diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 5ba7951ba..f99a39107 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -7,7 +7,7 @@
- [ ] Only relevant files were touched
- [ ] Only one feature/fix was added per PR and the code change compiles without warnings
- [ ] The code change is tested and works with Tasmota core ESP8266 V.2.7.4.9
- - [ ] The code change is tested and works with Tasmota core ESP32 V.2.0.6
+ - [ ] The code change is tested and works with Tasmota core ESP32 V.2.0.7
- [ ] I accept the [CLA](https://github.com/arendst/Tasmota/blob/development/CONTRIBUTING.md#contributor-license-agreement-cla).
_NOTE: The code change must pass CI tests. **Your PR cannot be merged unless tests pass**_
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 0188fe67c..f764ed574 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,75 +1,74 @@
{
- "platformio-ide.toolbar": [
- {
- "text": "$(home)",
- "tooltip": "PlatformIO: Home",
- "commands": [
- {
- "id": "platformio-ide.runPIOCoreCommand",
- "args": "pio home"
- }
- ]
- },
- {
- "text": "$(trash)",
- "tooltip": "PlatformIO: Clean All",
- "commands": [
- {
- "id": "workbench.action.tasks.runTask",
- "args": "PlatformIO: Clean All"
- }
- ]
- },
- {
- "text": "$(check)",
- "tooltip": "PlatformIO: Build",
- "commands": [
- {
- "id": "workbench.action.tasks.runTask",
- "args": "PlatformIO: Build"
- }
- ]
- },
- {
- "text": "$(zap)",
- "tooltip": "PlatformIO: Build and Upload",
- "commands": [
- {
- "id": "workbench.action.tasks.runTask",
- "args": "PlatformIO: Upload"
- }
- ]
- },
- {
- "text": "$(flame)",
- "tooltip": "PlatformIO: Build, Erase and Upload",
- "commands": [
- {
- "id": "platformio-ide.runPIOCoreCommand",
- "args": "pio run -t erase_upload"
- }
- ]
- },
- {
- "text": "$(device-desktop)",
- "tooltip": "PlatformIO: Serial Monitor",
- "commands": [
- {
- "id": "workbench.action.tasks.runTask",
- "args": "PlatformIO: Monitor"
- }
- ]
- },
- {
- "text": "$(refresh)",
- "tooltip": "PlatformIO: Rebuild IntelliSense Index",
- "commands": [
- {
- "id": "workbench.action.tasks.runTask",
- "args": "PlatformIO: Rebuild IntelliSense Index"
- }
- ]
- }
- ]
-}
-
+ "platformio-ide.toolbar": [
+ {
+ "text": "$(home)",
+ "tooltip": "PlatformIO: Home",
+ "commands": "platformio-ide.showHome"
+ },
+ {
+ "text": "$(trash)",
+ "tooltip": "PlatformIO: Clean",
+ "commands": "platformio-ide.clean"
+ },
+ {
+ "text": "$(check)",
+ "tooltip": "PlatformIO: Build",
+ "commands": "platformio-ide.build"
+ },
+ {
+ "text": "Upload",
+ "tooltip": "PlatformIO: Flash firmware (NO build run)",
+ "commands": [
+ {
+ "id": "platformio-ide.runPIOCoreCommand",
+ "args": "pio run -t nobuild -t factory_flash -e ${command:platformio-ide.activeEnvironment}"
+ }
+ ]
+ },
+ {
+ "text": "$(zap)",
+ "tooltip": "PlatformIO: Build and Upload",
+ "commands": "platformio-ide.upload"
+ },
+ {
+ "text": "$(flame)",
+ "tooltip": "PlatformIO: Build, Erase and Upload",
+ "commands": [
+ {
+ "id": "platformio-ide.runPIOCoreCommand",
+ "args": "pio run -t erase_upload -e ${command:platformio-ide.activeEnvironment}"
+ }
+ ]
+ },
+ {
+ "text": "$(error)",
+ "tooltip": "PlatformIO: Erase Flash",
+ "commands": [
+ {
+ "id": "platformio-ide.runPIOCoreCommand",
+ "args": "pio run -t nobuild -t erase -e ${command:platformio-ide.activeEnvironment}"
+ }
+ ]
+ },
+ {
+ "text": "$(arrow-right)",
+ "tooltip": "PlatformIO: Upload and Monitor",
+ "commands": "platformio-ide.uploadAndMonitor"
+ },
+ {
+ "text": "$(device-desktop)",
+ "tooltip": "PlatformIO: Serial Monitor",
+ "commands": "platformio-ide.serialMonitor"
+ },
+ {
+ "text": "$(terminal)",
+ "tooltip": "PlatformIO: New Terminal",
+ "commands": "platformio-ide.newTerminal"
+ },
+ {
+ "text": "$(refresh)",
+ "tooltip": "PlatformIO: Rebuild IntelliSense Index",
+ "commands": "platformio-ide.rebuildProjectIndex"
+ }
+ ]
+ }
diff --git a/BUILDS.md b/BUILDS.md
index e5dadfaa6..5f4102b85 100644
--- a/BUILDS.md
+++ b/BUILDS.md
@@ -123,6 +123,7 @@ Note: `minimal` variant is not listed as it shouldn't be used outside of the [up
| USE_LM75AD | - | - / x | - | x | - | - |
| USE_APDS9960 | - | - / - | - | - | - | - |
| USE_MCP230xx | - | - / - | - | - | - | - |
+| USE_MCP23XXX_DRV | - | - / - | - | - | - | - |
| USE_PCA9632 | - | - / - | - | - | - | - |
| USE_PCA9685 | - | - / - | - | - | - | - |
| USE_MPR121 | - | - / - | - | - | - | - |
@@ -143,6 +144,9 @@ Note: `minimal` variant is not listed as it shouldn't be used outside of the [up
| USE_CHIRP | - | - / - | - | - | - | - |
| USE_PAJ7620 | - | - / - | - | - | - | - |
| USE_PCF8574 | - | - / - | - | - | - | - |
+| USE_PMSA003I | - | - / - | - | - | - | - |
+| USE_LOX_O2 | - | - / x | - | x | - | - |
+| USE_GDK101 | - | - / - | - | - | - | - |
| | | | | | | |
| Feature or Sensor | l | t | k | s | i | d | Remarks
| USE_HIH6 | - | - / x | - | x | - | - |
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8537cae71..bfde3bd6c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,94 @@ All notable changes to this project will be documented in this file.
## [Released]
+## [12.5.0] 20230417
+- Release Peyton
+
+## [12.4.0.5] 20230417
+### Added
+- Matter support for Light and Relays on ESP32 by Stephan Hadinger (#18320)
+- ESP32 WIP support for 16 shutters using `#define USE_SHUTTER_ESP32` in addition to `USE_SHUTTER` by Stefan Bode (#18295)
+- Berry `webserver.html_escape()` reusing the internal HTML escaping function
+- Support for GDK101 gamma radiation sensor by Petr Novacek (#18390)
+
+### Changed
+- ESP32 LVGL library from v8.3.5 to v8.3.6 (no functional change)
+
+### Fixed
+- ESP32 ``Upload``, ``Upgrade``, ``WebGetConfig``, ``WebQuery`` and ``WebSend`` random HTTP(S) connection timeout set to 5 sec (commit 542eca3)
+- ESP32 energy monitoring set StartTotalTime regression from v12.3.1.5 (#18385)
+
+## [12.4.0.4] 20230403
+### Added
+- Matter support simple Relay on Apple Homekit by Stephan Hadinger (#18239)
+- VSC Pio menu bar extensions by @Jason2866 (#18233)
+- Command ``SwitchMode0`` to show or set all SwitchModes
+
+### Changed
+- Support for multiple PCF8574 as switch/button/relay if enabled with `#define USE_PCF8574` and `#define USE_PCF8574_MODE2`
+
+## [12.4.0.3] 20230322
+### Added
+- Support for PMSA003I Air Quality Sensor by Jean-Pierre Deschamps (#18214)
+- Support for DingTian virtual switch/button/relay (#18223)
+- Berry add `mdns.remove_service()`
+
+### Fixed
+- Refactor energy monitoring reducing stack usage and solve inherent exceptions and watchdogs (#18164)
+- Berry fix `tasmota.get_power(index)`
+
+## [12.4.0.2] 20230317
+### Added
+- Support for multiple MCP23008 as switch/button/relay if enabled with `#define USE_MCP23XXX_DRV`
+- Support for multiple PCF8574 as switch/button/relay
+- Extended Tariff command for forced tariff (#18080)
+- Berry support for Tensorflow Lite (TFL) by Christiaan Baars (#18119)
+- Zigbee send Tuya 'magic spell' to unlock devices when pairing (#18144)
+- Berry `webclient` `set_follow_redirects(bool)`
+- Berry `webclient` `collect_headers()` and `set_headers`
+- Display TM1650 commands like TM1637 (#18109)
+- Berry add `web_get_arg` event to drivers when `FUNC_WEB_GET_ARG` event is processed
+- Support for reset settings on filesystem
+
+### Breaking Changed
+- Shelly Pro 4PM using standard MCP23xxx driver and needs one time Auto-Configuration
+
+### Changed
+- Refactored Berry rule engine and support for arrays
+- ESP32 LVGL library from v8.3.3 to v8.3.5 (no functional change)
+- Removed absolute url from filesystem (#18148)
+- ``UrlFetch`` now follows redirects
+
+### Fixed
+- TuyaMcu v1 sequence fix (#17625)
+- TuyaMcu v1 timer integer overflow (#18048)
+- PZEM energy monitor stabilize period on larger configs (#18103)
+- Rule topic comparison (#18144)
+- ESP32 energy period shows kWh value instead of Wh regression from v12.3.1.5 (#15856)
+
+## [12.4.0.1] 20230301
+### Added
+- Matter read/write and commands (#18000)
+- Matter subscriptions (#18017, #18018)
+- Matter multi-fabric (#18019)
+- Support for multiple MCP23017/MCP23S17 as switch/button/relay
+- NTP time request from gateway (#17984)
+
+### Changed
+- ADC Range oversample from 2 to 32 (#17975)
+- ESP32 Framework (Core) from v2.0.6 to v2.0.7
+- Move #define OTA_URL from user_config.h to board files for better inital support (#18008)
+- Increase number of (virtual)relays and (virtual)buttons to 32
+- LibTeleinfo from v1.1.3 to v1.1.5 (#18050)
+
+### Fixed
+- SEN5X floats and units (#17961)
+- Energytotals cannot be set to negative values (#17965)
+- Undocumented support for non-sequential buttons and switches (#17967)
+- SR04 driver single pin ultrasonic sensor detection (#17966)
+- IR panasonic protocol regression from v12.0.2.4 (#18013)
+- EnergyTotal divided twice during minimal upgrade step regression from v12.3.1.3 (#18024)
+
## [12.4.0] 20230216
- Release Peter
diff --git a/CODE_OWNERS.md b/CODE_OWNERS.md
index 9e5b35411..2c8374b59 100644
--- a/CODE_OWNERS.md
+++ b/CODE_OWNERS.md
@@ -76,6 +76,9 @@ In addition to @arendst the following code is mainly owned by:
| xdrv_62_improv | @arendst
| xdrv_63_modbus_bridge | @jeroenst
| xdrv_64_pca9632 | Pascal Heinrich
+| xdrv_65_tuyamcubr | David Gwynne
+| xdrv_66_tm1638 | @arendst
+| xdrv_67_mcp23xxx | @arendst
| |
| xdrv_79_esp32_ble | @staars, @btsimonh
| xdrv_81_esp32_webcam | @gemu, @philrich
@@ -120,7 +123,7 @@ In addition to @arendst the following code is mainly owned by:
| xsns_25 |
| xsns_26_lm75ad | Andre Thomas
| xsns_27_apds9960 | Shawn Hymel
-| xsns_28_tm1638 | @arendst
+| xsns_28 |
| xsns_29_mcp230xx | Andre Thomas
| xsns_30_mpr121 | Rene 'Renne' Bartsch
| xsns_31_ccs811 | Gerhard Mutz
@@ -199,6 +202,9 @@ In addition to @arendst the following code is mainly owned by:
| xsns_101_hmc5883l | Andreas Achtzehn
| xsns_102_ld2410 | @arendst
| xsns_103_sen5x | @tyeth
+| xsns_104_pmsa003i | Jean-Pierre Deschamps
+| xsns_105_lox_o2 | @ACE1046
+| xsns_106_gdk101 | @Szewcson
| |
| Libraries |
| |
@@ -206,6 +212,7 @@ In addition to @arendst the following code is mainly owned by:
| ext-printf | @s-hadinger
| jsmn | @s-hadinger
| unishox | @s-hadinger
+| matter | @s-hadinger
| |
| PlatformIO |
| |
diff --git a/I2CDEVICES.md b/I2CDEVICES.md
index 86090c403..994490ddb 100644
--- a/I2CDEVICES.md
+++ b/I2CDEVICES.md
@@ -6,109 +6,112 @@ Using command ``I2cDriver`` individual drivers can be enabled or disabled at run
## Supported I2C devices
The following table lists the supported I2C devices
-Index | Define | Driver | Device | Address(es) | Description
-------|---------------------|----------|----------|-------------|-----------------------------------------------
- 1 | USE_PCA9685 | xdrv_15 | PCA9685 | 0x40 - 0x47 | 16-channel 12-bit pwm driver
+Index | Define | Driver | Device | Address(es) | Description
+------|---------------------|---------|----------|-------------|-----------------------------------------------
+ 1 | USE_PCA9685 | xdrv_15 | PCA9685 | 0x40 - 0x47 | 16-channel 12-bit pwm driver
2 | USE_PCF8574 | xdrv_28 | PCF8574 | 0x20 - 0x26 | 8-bit I/O expander (address range overridable)
2 | USE_PCF8574 | xdrv_28 | PCF8574A | 0x39 - 0x3F | 8-bit I/O expander (address range overridable)
- 3 | USE_DISPLAY_LCD | xdsp_01 | | 0x27, 0x3F | LCD display
- 4 | USE_DISPLAY_SSD1306 | xdsp_02 | SSD1306 | 0x3C - 0x3D | Oled display
- 5 | USE_DISPLAY_MATRIX | xdsp_03 | HT16K33 | 0x70 - 0x77 | 8x8 led matrix
- 6 | USE_DISPLAY_SH1106 | xdsp_07 | SH1106 | 0x3C - 0x3D | Oled display
- 7 | USE_ADE7953 | xnrg_07 | ADE7953 | 0x38 | Energy monitor
- 8 | USE_SHT | xsns_07 | SHT1X | Any | Temperature and Humidity sensor
- 9 | USE_HTU | xsns_08 | HTU21 | 0x40 | Temperature and Humidity sensor
- 9 | USE_HTU | xsns_08 | SI7013 | 0x40 | Temperature and Humidity sensor
- 9 | USE_HTU | xsns_08 | SI7020 | 0x40 | Temperature and Humidity sensor
- 9 | USE_HTU | xsns_08 | SI7021 | 0x40 | Temperature and Humidity sensor
- 10 | USE_BMP | xsns_09 | BMP085 | 0x76 - 0x77 | Pressure and temperature sensor
- 10 | USE_BMP | xsns_09 | BMP180 | 0x76 - 0x77 | Pressure and temperature sensor
- 10 | USE_BMP | xsns_09 | BMP280 | 0x76 - 0x77 | Pressure and temperature sensor
- 10 | USE_BMP | xsns_09 | BME280 | 0x76 - 0x77 | Pressure, temperature and humidity sensor
- 10 | USE_BMP | xsns_09 | BME680 | 0x76 - 0x77 | Pressure, temperature, humidity and gas sensor
- 11 | USE_BH1750 | xsns_10 | BH1750 | 0x23, 0x5C | Ambient light intensity sensor
- 12 | USE_VEML6070 | xsns_11 | VEML6070 | 0x38 - 0x39 | Ultra violet light intensity sensor
- 13 | USE_ADS1115 | xsns_12 | ADS1115 | 0x48 - 0x4B | 4-channel 16-bit A/D converter
- 14 | USE_INA219 | xsns_13 | INA219 | 0x40 - 0x41, 0x44 - 0x45 | Low voltage current sensor
- 15 | USE_SHT3X | xsns_14 | SHT3X | 0x44 - 0x45 | Temperature and Humidity sensor
- 15 | USE_SHT3X | xsns_14 | SHT4X | 0x44 - 0x45 | Temperature and Humidity sensor
- 15 | USE_SHT3X | xsns_14 | SHTCX | 0x70 | Temperature and Humidity sensor
- 16 | USE_TSL2561 | xsns_16 | TSL2561 | 0x29, 0x39, 0x49 | Light intensity sensor
- 17 | USE_MGS | xsns_19 | Grove | 0x04 | Multichannel gas sensor
- 18 | USE_SGP30 | xsns_21 | SGP30 | 0x58 | Gas (TVOC) and air quality sensor
- 19 | USE_SI1145 | xsns_24 | SI1145 | 0x60 | Ultra violet index and light sensor
- 19 | USE_SI1145 | xsns_24 | SI1146 | 0x60 | Ultra violet index and light sensor
- 19 | USE_SI1145 | xsns_24 | SI1147 | 0x60 | Ultra violet index and light sensor
- 20 | USE_LM75AD | xsns_26 | LM75AD | 0x48 - 0x4F | Temperature sensor
- 21 | USE_APDS9960 | xsns_27 | APDS9960 | 0x39 | Proximity ambient light RGB and gesture sensor
- 22 | USE_MCP230xx | xsns_29 | MCP23008 | 0x20 - 0x26 | 8-bit I/O expander
- 22 | USE_MCP230xx | xsns_29 | MCP23017 | 0x20 - 0x26 | 16-bit I/O expander
- 23 | USE_MPR121 | xsns_30 | MPR121 | 0x5A - 0x5D | Proximity capacitive touch sensor
- 24 | USE_CCS811 | xsns_31 | CCS811 | 0x5A | Gas (TVOC) and air quality sensor
+ 3 | USE_DISPLAY_LCD | xdsp_01 | | 0x27, 0x3F | LCD display
+ 4 | USE_DISPLAY_SSD1306 | xdsp_02 | SSD1306 | 0x3C - 0x3D | Oled display
+ 5 | USE_DISPLAY_MATRIX | xdsp_03 | HT16K33 | 0x70 - 0x77 | 8x8 led matrix
+ 6 | USE_DISPLAY_SH1106 | xdsp_07 | SH1106 | 0x3C - 0x3D | Oled display
+ 7 | USE_ADE7953 | xnrg_07 | ADE7953 | 0x38 | Energy monitor
+ 8 | USE_SHT | xsns_07 | SHT1X | Any | Temperature and Humidity sensor
+ 9 | USE_HTU | xsns_08 | HTU21 | 0x40 | Temperature and Humidity sensor
+ 9 | USE_HTU | xsns_08 | SI7013 | 0x40 | Temperature and Humidity sensor
+ 9 | USE_HTU | xsns_08 | SI7020 | 0x40 | Temperature and Humidity sensor
+ 9 | USE_HTU | xsns_08 | SI7021 | 0x40 | Temperature and Humidity sensor
+ 10 | USE_BMP | xsns_09 | BMP085 | 0x76 - 0x77 | Pressure and temperature sensor
+ 10 | USE_BMP | xsns_09 | BMP180 | 0x76 - 0x77 | Pressure and temperature sensor
+ 10 | USE_BMP | xsns_09 | BMP280 | 0x76 - 0x77 | Pressure and temperature sensor
+ 10 | USE_BMP | xsns_09 | BME280 | 0x76 - 0x77 | Pressure, temperature and humidity sensor
+ 10 | USE_BMP | xsns_09 | BME680 | 0x76 - 0x77 | Pressure, temperature, humidity and gas sensor
+ 11 | USE_BH1750 | xsns_10 | BH1750 | 0x23, 0x5C | Ambient light intensity sensor
+ 12 | USE_VEML6070 | xsns_11 | VEML6070 | 0x38 - 0x39 | Ultra violet light intensity sensor
+ 13 | USE_ADS1115 | xsns_12 | ADS1115 | 0x48 - 0x4B | 4-channel 16-bit A/D converter
+ 14 | USE_INA219 | xsns_13 | INA219 | 0x40 - 0x41, 0x44 - 0x45 | Low voltage current sensor
+ 15 | USE_SHT3X | xsns_14 | SHT3X | 0x44 - 0x45 | Temperature and Humidity sensor
+ 15 | USE_SHT3X | xsns_14 | SHT4X | 0x44 - 0x45 | Temperature and Humidity sensor
+ 15 | USE_SHT3X | xsns_14 | SHTCX | 0x70 | Temperature and Humidity sensor
+ 16 | USE_TSL2561 | xsns_16 | TSL2561 | 0x29, 0x39, 0x49 | Light intensity sensor
+ 17 | USE_MGS | xsns_19 | Grove | 0x04 | Multichannel gas sensor
+ 18 | USE_SGP30 | xsns_21 | SGP30 | 0x58 | Gas (TVOC) and air quality sensor
+ 19 | USE_SI1145 | xsns_24 | SI1145 | 0x60 | Ultra violet index and light sensor
+ 19 | USE_SI1145 | xsns_24 | SI1146 | 0x60 | Ultra violet index and light sensor
+ 19 | USE_SI1145 | xsns_24 | SI1147 | 0x60 | Ultra violet index and light sensor
+ 20 | USE_LM75AD | xsns_26 | LM75AD | 0x48 - 0x4F | Temperature sensor
+ 21 | USE_APDS9960 | xsns_27 | APDS9960 | 0x39 | Proximity ambient light RGB and gesture sensor
+ 22 | USE_MCP230xx | xsns_29 | MCP23008 | 0x20 - 0x26 | 8-bit I/O expander
+ 22 | USE_MCP230xx | xsns_29 | MCP23017 | 0x20 - 0x26 | 16-bit I/O expander
+ 23 | USE_MPR121 | xsns_30 | MPR121 | 0x5A - 0x5D | Proximity capacitive touch sensor
+ 24 | USE_CCS811 | xsns_31 | CCS811 | 0x5A | Gas (TVOC) and air quality sensor
24' | USE_CCS811_V2 | xsns_31 | CCS811 | 0x5A - 0x5B | Gas (TVOC) and air quality sensor
- 25 | USE_MPU6050 | xsns_32 | MPU6050 | 0x68 - 0x69 | 3-axis gyroscope and temperature sensor
- 26 | USE_DS3231 | xsns_33 | DS3231 | 0x68 | Real time clock
- 27 | USE_MGC3130 | xsns_36 | MGC3130 | 0x42 | Electric field sensor
- 28 | USE_MAX44009 | xsns_41 | MAX44009 | 0x4A - 0x4B | Ambient light intensity sensor
- 29 | USE_SCD30 | xsns_42 | SCD30 | 0x61 | CO2 sensor
- 30 | USE_SPS30 | xsns_44 | SPS30 | 0x69 | Particle sensor
- 31 | USE_VL53L0X | xsns_45 | VL53L0X | 0x29 | Time-of-flight (ToF) distance sensor
- 32 | USE_MLX90614 | xsns_46 | MLX90614 | 0x5A | Infra red temperature sensor
- 33 | USE_CHIRP | xsns_48 | CHIRP | 0x20 | Soil moisture sensor
- 34 | USE_PAJ7620 | xsns_50 | PAJ7620 | 0x73 | Gesture sensor
- 35 | USE_INA226 | xsns_54 | INA226 | 0x40 - 0x41, 0x44 - 0x45 | Low voltage current sensor
- 36 | USE_HIH6 | xsns_55 | HIH6130 | 0x27 | Temperature and Humidity sensor
- 37 | USE_24C256 | xdrv_10 | 24C256 | 0x50 | Scripter EEPROM storage
- 38 | USE_DISPLAY_ILI9488 | xdsp_08 | FT6236 | 0x38 | Touch panel controller
- 39 | USE_DISPLAY_RA8876 | xdsp_10 | FT5316 | 0x38 | Touch panel controller
+ 25 | USE_MPU6050 | xsns_32 | MPU6050 | 0x68 - 0x69 | 3-axis gyroscope and temperature sensor
+ 26 | USE_DS3231 | xsns_33 | DS3231 | 0x68 | Real time clock
+ 27 | USE_MGC3130 | xsns_36 | MGC3130 | 0x42 | Electric field sensor
+ 28 | USE_MAX44009 | xsns_41 | MAX44009 | 0x4A - 0x4B | Ambient light intensity sensor
+ 29 | USE_SCD30 | xsns_42 | SCD30 | 0x61 | CO2 sensor
+ 30 | USE_SPS30 | xsns_44 | SPS30 | 0x69 | Particle sensor
+ 31 | USE_VL53L0X | xsns_45 | VL53L0X | 0x29 | Time-of-flight (ToF) distance sensor
+ 32 | USE_MLX90614 | xsns_46 | MLX90614 | 0x5A | Infra red temperature sensor
+ 33 | USE_CHIRP | xsns_48 | CHIRP | 0x20 | Soil moisture sensor
+ 34 | USE_PAJ7620 | xsns_50 | PAJ7620 | 0x73 | Gesture sensor
+ 35 | USE_INA226 | xsns_54 | INA226 | 0x40 - 0x41, 0x44 - 0x45 | Low voltage current sensor
+ 36 | USE_HIH6 | xsns_55 | HIH6130 | 0x27 | Temperature and Humidity sensor
+ 37 | USE_24C256 | xdrv_10 | 24C256 | 0x50 | Scripter EEPROM storage
+ 38 | USE_DISPLAY_ILI9488 | xdsp_08 | FT6236 | 0x38 | Touch panel controller
+ 39 | USE_DISPLAY_RA8876 | xdsp_10 | FT5316 | 0x38 | Touch panel controller
40 | USE_TSL2591 | xsns_57 | TSL2591 | 0x29 | Light intensity sensor
- 41 | USE_DHT12 | xsns_58 | DHT12 | 0x5C | Temperature and humidity sensor
- 42 | USE_DS1624 | xsns_59 | DS1621 | 0x48 - 0x4F | Temperature sensor
- 42 | USE_DS1624 | xsns_59 | DS1624 | 0x48 - 0x4F | Temperature sensor
- 43 | USE_AHT1x | xsns_63 | AHT10/15 | 0x38 - 0x39 | Temperature and humidity sensor
- 43 | USE_AHT2x | xsns_63 | AHT20 | 0x38 | Temperature and humidity sensor
- 43 | USE_AHT2x | xsns_63 | AM2301B | 0x38 | Temperature and humidity sensor
- 44 | USE_WEMOS_MOTOR_V1 | xdrv_34 | | 0x2D - 0x30 | WEMOS motor shield v1.0.0 (6612FNG)
- 45 | USE_HDC1080 | xsns_65 | HDC1080 | 0x40 | Temperature and Humidity sensor
- 46 | USE_IAQ | xsns_66 | IAQ | 0x5a | Air quality sensor
- 47 | USE_DISPLAY_SEVENSEG| xdsp_11 | HT16K33 | 0x70 - 0x77 | Seven segment LED
- 48 | USE_AS3935 | xsns_67 | AS3935 | 0x03 | Franklin Lightning Sensor
- 49 | USE_VEML6075 | xsns_70 | VEML6075 | 0x10 | UVA/UVB/UVINDEX Sensor
- 50 | USE_VEML7700 | xsns_71 | VEML7700 | 0x10 | Ambient light intensity sensor
- 51 | USE_MCP9808 | xsns_72 | MCP9808 | 0x18 - 0x1F | Temperature sensor
- 52 | USE_HP303B | xsns_73 | HP303B | 0x76 - 0x77 | Pressure and temperature sensor
- 53 | USE_MLX90640 | xdrv_43 | MLX90640 | 0x33 | IR array temperature sensor
- 54 | USE_VL53L1X | xsns_77 | VL53L1X | 0x29 | Time-of-flight (ToF) distance sensor
- 55 | USE_EZOPH | xsns_78 | EZOPH | 0x61 - 0x70 | pH sensor
- 55 | USE_EZOORP | xsns_78 | EZOORP | 0x61 - 0x70 | ORP sensor
- 55 | USE_EZORTD | xsns_78 | EZORTD | 0x61 - 0x70 | Temperature sensor
- 55 | USE_EZOHUM | xsns_78 | EZOHUM | 0x61 - 0x70 | Humidity sensor
- 55 | USE_EZOEC | xsns_78 | EZOEC | 0x61 - 0x70 | Electric conductivity sensor
- 55 | USE_EZOCO2 | xsns_78 | EZOCO2 | 0x61 - 0x70 | CO2 sensor
- 55 | USE_EZOO2 | xsns_78 | EZOO2 | 0x61 - 0x70 | O2 sensor
- 55 | USE_EZOPRS | xsns_78 | EZOPRS | 0x61 - 0x70 | Pressure sensor
- 55 | USE_EZOFLO | xsns_78 | EZOFLO | 0x61 - 0x70 | Flow meter sensor
- 55 | USE_EZODO | xsns_78 | EZODO | 0x61 - 0x70 | Disolved Oxygen sensor
- 55 | USE_EZORGB | xsns_78 | EZORGB | 0x61 - 0x70 | Color sensor
- 55 | USE_EZOPMP | xsns_78 | EZOPMP | 0x61 - 0x70 | Peristaltic Pump
- 56 | USE_SEESAW_SOIL | xsns_81 | SEESOIL | 0x36 - 0x39 | Adafruit seesaw soil moisture sensor
- 57 | USE_TOF10120 | xsns_84 | TOF10120 | 0x52 | Time-of-flight (ToF) distance sensor
- 58 | USE_MPU_ACCEL | xsns_85 | MPU_ACCEL| 0x68 | MPU6886/MPU9250 6-axis MotionTracking sensor from M5Stac k
- 59 | USE_BM8563 | xdrv_56 | BM8563 | 0x51 | BM8563 RTC from M5Stack
- 60 | USE_AM2320 | xsns_88 | AM2320 | 0x5C | Temperature and Humidity sensor
- 61 | USE_T67XX | xsns_89 | T67XX | 0x15 | CO2 sensor
- 62 | USE_SCD40 | xsns_92 | SCD40 | 0x62 | CO2 sensor Sensirion SCD40/SCD41
- 63 | USE_HM330X | xsns_93 | HM330X | 0x40 | Particule sensor
- 64 | USE_HDC2010 | xsns_94 | HDC2010 | 0x40 | Temperature and Humidity sensor
- 65 | USE_ADE7880 | xnrg_23 | ADE7880 | 0x38 | Energy monitor
- 66 | USE_PCF85363 | xsns_99 | PCF85363 | 0x51 | Real time clock
- 67 | USE_DS3502 | xdrv_61 | DS3502 | 0x28 - 0x2B | Digital potentiometer
- 68 | USE_HYT | xsns_97 | HYTxxx | 0x28 | Temperature and Humidity sensor
- 69 | USE_SGP40 | xsns_98 | SGP40 | 0x59 | Gas (TVOC) and air quality
- 70 | USE_LUXV30B | xsns_99 | LUXV30B | 0x4A | DFRobot SEN0390 V30B lux sensor
+ 41 | USE_DHT12 | xsns_58 | DHT12 | 0x5C | Temperature and humidity sensor
+ 42 | USE_DS1624 | xsns_59 | DS1621 | 0x48 - 0x4F | Temperature sensor
+ 42 | USE_DS1624 | xsns_59 | DS1624 | 0x48 - 0x4F | Temperature sensor
+ 43 | USE_AHT1x | xsns_63 | AHT10/15 | 0x38 - 0x39 | Temperature and humidity sensor
+ 43 | USE_AHT2x | xsns_63 | AHT20 | 0x38 | Temperature and humidity sensor
+ 43 | USE_AHT2x | xsns_63 | AM2301B | 0x38 | Temperature and humidity sensor
+ 44 | USE_WEMOS_MOTOR_V1 | xdrv_34 | | 0x2D - 0x30 | WEMOS motor shield v1.0.0 (6612FNG)
+ 45 | USE_HDC1080 | xsns_65 | HDC1080 | 0x40 | Temperature and Humidity sensor
+ 46 | USE_IAQ | xsns_66 | IAQ | 0x5a | Air quality sensor
+ 47 | USE_DISPLAY_SEVENSEG| xdsp_11 | HT16K33 | 0x70 - 0x77 | Seven segment LED
+ 48 | USE_AS3935 | xsns_67 | AS3935 | 0x03 | Franklin Lightning Sensor
+ 49 | USE_VEML6075 | xsns_70 | VEML6075 | 0x10 | UVA/UVB/UVINDEX Sensor
+ 50 | USE_VEML7700 | xsns_71 | VEML7700 | 0x10 | Ambient light intensity sensor
+ 51 | USE_MCP9808 | xsns_72 | MCP9808 | 0x18 - 0x1F | Temperature sensor
+ 52 | USE_HP303B | xsns_73 | HP303B | 0x76 - 0x77 | Pressure and temperature sensor
+ 53 | USE_MLX90640 | xdrv_43 | MLX90640 | 0x33 | IR array temperature sensor
+ 54 | USE_VL53L1X | xsns_77 | VL53L1X | 0x29 | Time-of-flight (ToF) distance sensor
+ 55 | USE_EZOPH | xsns_78 | EZOPH | 0x61 - 0x70 | pH sensor
+ 55 | USE_EZOORP | xsns_78 | EZOORP | 0x61 - 0x70 | ORP sensor
+ 55 | USE_EZORTD | xsns_78 | EZORTD | 0x61 - 0x70 | Temperature sensor
+ 55 | USE_EZOHUM | xsns_78 | EZOHUM | 0x61 - 0x70 | Humidity sensor
+ 55 | USE_EZOEC | xsns_78 | EZOEC | 0x61 - 0x70 | Electric conductivity sensor
+ 55 | USE_EZOCO2 | xsns_78 | EZOCO2 | 0x61 - 0x70 | CO2 sensor
+ 55 | USE_EZOO2 | xsns_78 | EZOO2 | 0x61 - 0x70 | O2 sensor
+ 55 | USE_EZOPRS | xsns_78 | EZOPRS | 0x61 - 0x70 | Pressure sensor
+ 55 | USE_EZOFLO | xsns_78 | EZOFLO | 0x61 - 0x70 | Flow meter sensor
+ 55 | USE_EZODO | xsns_78 | EZODO | 0x61 - 0x70 | Disolved Oxygen sensor
+ 55 | USE_EZORGB | xsns_78 | EZORGB | 0x61 - 0x70 | Color sensor
+ 55 | USE_EZOPMP | xsns_78 | EZOPMP | 0x61 - 0x70 | Peristaltic Pump
+ 56 | USE_SEESAW_SOIL | xsns_81 | SEESOIL | 0x36 - 0x39 | Adafruit seesaw soil moisture sensor
+ 57 | USE_TOF10120 | xsns_84 | TOF10120 | 0x52 | Time-of-flight (ToF) distance sensor
+ 58 | USE_MPU_ACCEL | xsns_85 | MPU_ACCEL| 0x68 | MPU6886/MPU9250 6-axis MotionTracking sensor from M5Stack
+ 59 | USE_BM8563 | xdrv_56 | BM8563 | 0x51 | BM8563 RTC from M5Stack
+ 60 | USE_AM2320 | xsns_88 | AM2320 | 0x5C | Temperature and Humidity sensor
+ 61 | USE_T67XX | xsns_89 | T67XX | 0x15 | CO2 sensor
+ 62 | USE_SCD40 | xsns_92 | SCD40 | 0x62 | CO2 sensor Sensirion SCD40/SCD41
+ 63 | USE_HM330X | xsns_93 | HM330X | 0x40 | Particule sensor
+ 64 | USE_HDC2010 | xsns_94 | HDC2010 | 0x40 | Temperature and Humidity sensor
+ 65 | USE_ADE7880 | xnrg_23 | ADE7880 | 0x38 | Energy monitor
+ 66 | USE_PCF85363 | xsns_99 | PCF85363 | 0x51 | Real time clock
+ 67 | USE_DS3502 | xdrv_61 | DS3502 | 0x28 - 0x2B | Digital potentiometer
+ 68 | USE_HYT | xsns_97 | HYTxxx | 0x28 | Temperature and Humidity sensor
+ 69 | USE_SGP40 | xsns_98 | SGP40 | 0x59 | Gas (TVOC) and air quality
+ 70 | USE_LUXV30B | xsns_99 | LUXV30B | 0x4A | DFRobot SEN0390 V30B lux sensor
71 | USE_QMC5883L | xsns_33 | QMC5883L | 0x0D | Magnetic Field Sensor
72 | USE_INA3221 | xsns_100 | INA3221 | 0x40-0x43 | 3-channels Voltage and Current sensor
73 | USE_HMC5883L | xsns_101 | HMC5883L | 0x1E | 3-channels Magnetic Field Sensor
74 | USE_DISPLAY_TM1650 | xdsp_20 | TM1650 | 0x24 - 0x27, 0x34 - 0x37 | Four-digit seven-segment LED controller
75 | USE_PCA9632 | xdrv_64 | PCA9632 | 0x60 | 4-channel 4-bit pwm driver
76 | USE_SEN5X | xsns_103 | SEN5X | 0x69 | Gas (VOC/NOx index) and air quality (PPM <1,<2.5,<4,<10)
+ 77 | USE_MCP23XXX_DRV | xdrv_67 | MCP23x17 | 0x20 - 0x26 | 16-bit I/O expander as virtual button/switch/relay
+ 78 | USE_PMSA003I | xsns_104 | PMSA003I | 0x12 | PM2.5 Air Quality Sensor with I2C Interface
+ 79 | USE_GDK101 | xsns_106 | GDK101 | 0x18 - 0x1B | Gamma Radiation Sensor
\ No newline at end of file
diff --git a/README.md b/README.md
index ed2169f14..e41499fbf 100644
--- a/README.md
+++ b/README.md
@@ -41,7 +41,7 @@ See [CHANGELOG.md](CHANGELOG.md) for detailed change information.
Unless your Tasmota powered device exhibits a problem or lacks a feature that you need, leave your device alone - it works so don’t make unnecessary changes! If the release version (i.e., the master branch) exhibits unexpected behaviour for your device and configuration, you should upgrade to the latest development version instead to see if your problem is resolved as some bugs in previous releases or development builds may already have been resolved.
-Every commit made to the development branch, which is compiling successfuly, will post new binary files at http://ota.tasmota.com/tasmota/ (this web address can be used for OTA updates too). It is important to note that these binaries are based on the current development codebase. These commits are tested as much as is possible and are typically quite stable. However, it is infeasible to test on the hundreds of different types of devices with all the available configuration options permitted.
+Every commit made to the development branch, which is compiling successfully, will post new binary files at http://ota.tasmota.com/tasmota/ (this web address can be used for OTA updates too). It is important to note that these binaries are based on the current development codebase. These commits are tested as much as is possible and are typically quite stable. However, it is infeasible to test on the hundreds of different types of devices with all the available configuration options permitted.
Note that there is a chance, as with any upgrade, that the device may not function as expected. You must always account for the possibility that you may need to flash the device via the serial programming interface if the OTA upgrade fails. Even with the master release, you should always attempt to test the device or a similar prototype before upgrading a device which is in production or is hard to reach. And, as always, make a backup of the device configuration before beginning any firmware update.
@@ -172,4 +172,4 @@ People helping to keep the show on the road:
## License
-This program is licensed under GPL-3.0
+This program is licensed under GPL-3.0-only
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 7fa36024e..9b626657f 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -36,9 +36,9 @@ While fallback or downgrading is common practice it was never supported due to S
This release will be supported from ESP8266/Arduino library Core version **2.7.4.9** due to reported security and stability issues on previous Core version. This will also support gzipped binaries.
-This release will be supported from ESP32/Arduino library Core version **2.0.6**.
+This release will be supported from ESP32/Arduino library Core version **2.0.7**.
-Support of ESP8266 Core versions before 2.7.4.9 and ESP32 Core versions before 2.0.6 have been removed.
+Support of ESP8266 Core versions before 2.7.4.9 and ESP32 Core versions before 2.0.7 have been removed.
## Support of TLS
@@ -75,12 +75,12 @@ Latest released binaries can be downloaded from
- http://ota.tasmota.com/tasmota/release
Historical binaries can be downloaded from
-- http://ota.tasmota.com/tasmota/release-12.4.0
+- http://ota.tasmota.com/tasmota/release-12.5.0
The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmota.com/tasmota/release/tasmota.bin.gz``
### ESP32, ESP32-C3, ESP32-S2 and ESP32-S3 based
-The following binary downloads have been compiled with ESP32/Arduino library core version **2.0.6**.
+The following binary downloads have been compiled with ESP32/Arduino library core version **2.0.7**.
- **tasmota32.bin** = The Tasmota version with most drivers including additional sensors and KNX for 4M+ flash. **RECOMMENDED RELEASE BINARY**
- **tasmota32xy.bin** = The Tasmota version with most drivers including additional sensors and KNX for ESP32-C3/S2/S3 and 4M+ flash.
@@ -100,7 +100,7 @@ Latest released binaries can be downloaded from
- https://ota.tasmota.com/tasmota32/release
Historical binaries can be downloaded from
-- https://ota.tasmota.com/tasmota32/release-12.4.0
+- https://ota.tasmota.com/tasmota32/release-12.5.0
The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasmota.com/tasmota32/release/tasmota32.bin``
@@ -110,52 +110,47 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
[Complete list](BUILDS.md) of available feature and sensors.
-## Changelog v12.4.0 Peter
+## Changelog v12.5.0 Peyton
### Added
-- Command ``DhtDelay ,`` to allow user control over high and low delay in microseconds [#17944](https://github.com/arendst/Tasmota/issues/17944)
-- Support for up to 3 (ESP8266) or 8 (ESP32) phase modbus energy monitoring device using generic Energy Modbus driver
-- Support for RGB displays [#17414](https://github.com/arendst/Tasmota/issues/17414)
-- Support for IPv6 DNS records (AAAA) and IPv6 ``Ping`` for ESP32 and ESP8266 [#17417](https://github.com/arendst/Tasmota/issues/17417)
-- Support for IPv6 only networks on Ethernet (not yet Wifi)
-- Support for TM1650 display as used in some clocks by Stefan Oskamp [#17594](https://github.com/arendst/Tasmota/issues/17594)
-- Support for PCA9632 4-channel 8-bit PWM driver as light driver by Pascal Heinrich [#17557](https://github.com/arendst/Tasmota/issues/17557)
-- support for SEN5X gas and air quality sensor by Tyeth Gundry [#17736](https://github.com/arendst/Tasmota/issues/17736)
-- Basic support for Shelly Pro 4PM
-- Berry support for ``crypto.SHA256`` [#17430](https://github.com/arendst/Tasmota/issues/17430)
-- Berry crypto add ``EC_P256`` and ``PBKDF2_HMAC_SHA256`` algorithms required by Matter protocol [#17473](https://github.com/arendst/Tasmota/issues/17473)
-- Berry crypto add ``random`` to generate series of random bytes
-- Berry crypto add ``HKDF_HMAC_SHA256``
-- Berry crypto add ``SPAKE2P_Matter`` for Matter support
-- Berry add ``mdns`` advanced features and query
-- Berry `int64.fromstring()` to convert a string to an int64 [#17953](https://github.com/arendst/Tasmota/issues/17953)
-- ESP32 command ``EnergyCols 1..8`` to change number of GUI columns
-- ESP32 command ``EnergyDisplay 1..3`` to change GUI column presentation
-- ESP32 support for eigth energy phases/channels
-- ESP32 support for BMPxxx sensors on two I2C busses [#17643](https://github.com/arendst/Tasmota/issues/17643)
-- ESP32 support for Biomine BioPDU 625x12 [#17857](https://github.com/arendst/Tasmota/issues/17857)
-- ESP32 preliminary support for Matter protocol, milestone 1 (commissioning) by Stephan Hadinger
+- Command ``SwitchMode0`` to show or set all SwitchModes
+- Support for multiple MCP23008/MCP23017/MCP23S17 as switch/button/relay if enabled with `#define USE_MCP23XXX_DRV`
+- Support for multiple PCF8574 as switch/button/relay if enabled with `#define USE_PCF8574` and `#define USE_PCF8574_MODE2`
+- Support for PMSA003I Air Quality Sensor by Jean-Pierre Deschamps [#18214](https://github.com/arendst/Tasmota/issues/18214)
+- Support for DingTian virtual switch/button/relay [#18223](https://github.com/arendst/Tasmota/issues/18223)
+- Support for GDK101 gamma radiation sensor by Petr Novacek [#18390](https://github.com/arendst/Tasmota/issues/18390)
+- NTP time request from gateway [#17984](https://github.com/arendst/Tasmota/issues/17984)
+- Extended Tariff command for forced tariff [#18080](https://github.com/arendst/Tasmota/issues/18080)
+- Display TM1650 commands like TM1637 [#18109](https://github.com/arendst/Tasmota/issues/18109)
+- VSC Pio menu bar extensions by @Jason2866 [#18233](https://github.com/arendst/Tasmota/issues/18233)
+- Zigbee send Tuya 'magic spell' to unlock devices when pairing [#18144](https://github.com/arendst/Tasmota/issues/18144)
+- ESP32 WIP support for 16 shutters using `#define USE_SHUTTER_ESP32` in addition to `USE_SHUTTER` by Stefan Bode [#18295](https://github.com/arendst/Tasmota/issues/18295)
+- Berry support for Tensorflow Lite (TFL) by Christiaan Baars [#18119](https://github.com/arendst/Tasmota/issues/18119)
+- Berry `webclient` features
+- Matter support for Light and Relays by Stephan Hadinger [#18320](https://github.com/arendst/Tasmota/issues/18320)
### Breaking Changed
-- TM1638 button and led support are handled as virtual switches and relays [#11031](https://github.com/arendst/Tasmota/issues/11031)
+- Shelly Pro 4PM using standard MCP23xxx driver and needs one time Auto-Configuration
### Changed
-- Dht driver from v6 to v7
-- ESP32 Framework (Core) from v2.0.5.3 to v2.0.6 (IPv6 support)
-- Energy totals max supported value from +/-21474.83647 to +/-2147483.647 kWh
-- Removed delays in TasmotaSerial and TasmotaModbus Tx enable switching
-- Keep webserver enabled on command ``upload``
-- Better support for virtual buttons and switches up to a total of 28
-- TuyaMcu support of virtual switches
-- Increase rule event buffer from 100 to 256 characters [#16943](https://github.com/arendst/Tasmota/issues/16943)
-- Tasmota OTA scripts now support both unzipped and gzipped file uploads [#17378](https://github.com/arendst/Tasmota/issues/17378)
-- LVGL allow access to `lv.LAYOUT_GRID` and `lv.LAYOUT_FLEX` [#17948](https://github.com/arendst/Tasmota/issues/17948)
+- ESP32 Framework (Core) from v2.0.6 to v2.0.7
+- ESP32 LVGL library from v8.3.3 to v8.3.6 (no functional change)
+- LibTeleinfo from v1.1.3 to v1.1.5 [#18050](https://github.com/arendst/Tasmota/issues/18050)
+- Increase number of (virtual)relays and (virtual)buttons to 32
+- ADC Range oversample from 2 to 32 [#17975](https://github.com/arendst/Tasmota/issues/17975)
+- Move #define OTA_URL from user_config.h to board files for better inital support [#18008](https://github.com/arendst/Tasmota/issues/18008)
+- Removed absolute url from filesystem [#18148](https://github.com/arendst/Tasmota/issues/18148)
### Fixed
-- Modbus transmit enable GPIO enabled once during write buffer
-- Energy dummy switched voltage and power regression from v12.2.0.2
-- Shutter default motorstop set to 0 [#17403](https://github.com/arendst/Tasmota/issues/17403)
-- Shutter default tilt configuration [#17484](https://github.com/arendst/Tasmota/issues/17484)
-- Orno WE517 modbus serial config 8E1 setting [#17545](https://github.com/arendst/Tasmota/issues/17545)
-- Rename ``tasmota4M.bin`` to ``tasmota-4M.bin`` to solve use of ``tasmota-minimal.bin`` [#17674](https://github.com/arendst/Tasmota/issues/17674)
-- ESP8266 set GPIO's to input on power on fixing relay spikes [#17531](https://github.com/arendst/Tasmota/issues/17531)
-- ESP8266 TLS SNI which would prevent AWS IoT connection [#17936](https://github.com/arendst/Tasmota/issues/17936)
+- TuyaMcu v1 sequence fix [#17625](https://github.com/arendst/Tasmota/issues/17625)
+- SEN5X floats and units [#17961](https://github.com/arendst/Tasmota/issues/17961)
+- Energytotals cannot be set to negative values [#17965](https://github.com/arendst/Tasmota/issues/17965)
+- SR04 driver single pin ultrasonic sensor detection [#17966](https://github.com/arendst/Tasmota/issues/17966)
+- IR panasonic protocol regression from v12.0.2.4 [#18013](https://github.com/arendst/Tasmota/issues/18013)
+- EnergyTotal divided twice during minimal upgrade step regression from v12.3.1.3 [#18024](https://github.com/arendst/Tasmota/issues/18024)
+- TuyaMcu v1 timer integer overflow [#18048](https://github.com/arendst/Tasmota/issues/18048)
+- PZEM energy monitor stabilize period on larger configs [#18103](https://github.com/arendst/Tasmota/issues/18103)
+- Rule topic comparison [#18144](https://github.com/arendst/Tasmota/issues/18144)
+- Refactor energy monitoring reducing stack usage and solve inherent exceptions and watchdogs [#18164](https://github.com/arendst/Tasmota/issues/18164)
+- ESP32 ``Upload``, ``Upgrade``, ``WebGetConfig``, ``WebQuery`` and ``WebSend`` random HTTP(S) connection timeout set to 5 sec (commit 542eca3)
+- ESP32 energy period shows kWh value instead of Wh regression from v12.3.1.5 [#15856](https://github.com/arendst/Tasmota/issues/15856)
+- ESP32 energy monitoring set StartTotalTime regression from v12.3.1.5 [#18385](https://github.com/arendst/Tasmota/issues/18385)
diff --git a/TEMPLATES.md b/TEMPLATES.md
index 440eb0942..739cd6a0e 100644
--- a/TEMPLATES.md
+++ b/TEMPLATES.md
@@ -5,7 +5,7 @@
# Templates
-Find below the available templates as of February 2023. More template information can be found in the [Tasmota Device Templates Repository](http://blakadder.github.io/templates)
+Find below the available templates as of April 2023. More template information can be found in the [Tasmota Device Templates Repository](http://blakadder.github.io/templates)
## Adapter Board
```
@@ -220,6 +220,7 @@ LoraTap In-Wall {"NAME":"SC500W","GPIO":[0,0,0,576,160,161,0,0,224,
LoraTap In-Wall {"NAME":"SC511WSC","GPIO":[0,1,0,320,32,34,0,0,224,33,226,225,0,0],"FLAG":0,"BASE":18}
MS-108 In-Wall {"NAME":"MS-108","GPIO":[0,0,0,0,161,160,0,0,224,0,225,0,0,0],"FLAG":0,"BASE":18}
MS-108WR RF Curtain Module {"NAME":"MS-108WR","GPIO":[1,1,1,544,32,33,1,1,225,32,224,1,1,1],"FLAG":0,"BASE":18}
+Nous {"NAME":" Smart WiFi Curtain Module L12T","GPIO":[1,160,1,161,225,224,1,1,544,1,32,1,1,1],"FLAG":0,"BASE":18}
QS-WIFI-C01-RF {"NAME":"Shutter-QS-WIFI-C01","GPIO":[0,0,1,0,288,0,0,0,32,33,224,225,0,0],"FLAG":0,"BASE":18}
```
@@ -251,6 +252,7 @@ Zemismart Backlit {"NAME":"WF-CS01","GPIO":[544,227,289,34,226,161,0,
## DIN Relay
```
+CurrySmarter Power Monitoring 30A {"NAME":"30A Breaker","GPIO":[0,0,0,0,7584,224,0,0,2720,32,2656,2624,320,0],"FLAG":0,"BASE":18}
EARU DIN Circuit Breaker 1P 32A/50A {"NAME":"RDCBC-1P","GPIO":[320,0,0,0,0,0,0,0,32,224,0,0,0,0],"FLAG":0,"BASE":18}
Hoch Circuit Breaker 1P {"NAME":"HOCH ZJSB9","GPIO":[32,0,0,0,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":18}
Ketotek Single Phase Energy Monitor {"NAME":"Ketotek KTEM06","GPIO":[0,2272,0,2304,0,0,0,0,0,0,320,0,32,0],"FLAG":0,"BASE":54}
@@ -288,10 +290,12 @@ Adafruit QT Py ESP32 Pico {"NAME":"QTPy ESP32 Pico","GPIO":[32,3200,0,3232,1,
AZ-Envy Environmental Sensor {"NAME":"AZ Envy","GPIO":[32,0,320,0,640,608,0,0,0,0,0,0,0,4704],"FLAG":0,"BASE":18}
Coiaca Tasmota {"NAME":"AWR01t","GPIO":[576,1,1,128,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18}
Coiaca Tasmota Development Board AWR12 {"NAME":"AWR12t","GPIO":[320,1,1,1,1,1,0,0,1,1,1,1,1,1],"FLAG":0,"BASE":18}
+Dasduino CONNECT {"NAME":"Dasduino CONNECTPLUS","GPIO":[32,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,640,608,1,0,1,1,1,0,0,0,0,1376,1,1,1,1,0,0,1],"FLAG":0,"BASE":1}
+Dasduino CONNECTPLUS {"NAME":"Dasduino CONNECT","GPIO":[1,1,1376,1,640,608,1,1,1,1,1,1,1,1],"FLAG":0,"BASE":18}
Espoir Rev 1.0.0 PoE+ {"NAME":"Espoir","GPIO":[0,0,1,0,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,5568,5600,1,7968,1,1,1,1],"FLAG":0,"BASE":1}
LC Technology MicroPython Maker {"NAME":"LC-ESP-Python","GPIO":[1,1,544,1,1,1,1,1,1,1,1,1,1,1],"FLAG":0,"BASE":18}
LilyGO RGB LED Ring Encoder {"NAME":"T-Encoder","GPIO":[0,0,1,0,1,0,0,0,1,1,1,1,0,0,0,480,6212,0,0,0,0,449,450,448,0,0,0,0,0,0,0,0,3296,3264,32,0],"FLAG":0,"BASE":1,"CMND":"BuzzerPwm 1"}
-LilyGO T7 v1.5 {"NAME":"LilyGO T7 V1.5","GPIO":[1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,544,0,0,0,1,0,1,1,1,0,0,0,0,0,1,1,4704,1,0,0,1],"FLAG":0,"BASE":1}
+LilyGO T7 Mini32 V1.5 {"NAME":"LilyGO T7 V1.5","GPIO":[1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,544,0,0,0,1,0,1,1,1,0,0,0,0,0,1,1,4704,1,0,0,1],"FLAG":0,"BASE":1}
LilyGO TTGO ESP32 Ethernet {"NAME":"T-Internet-POE v1.2","GPIO":[0,1,1,1,1,1,1,1,1,1,1,1,1,1,5600,1,0,1,1,5568,0,1,1,1,0,0,0,0,1,1,1,1,1,0,0,1],"FLAG":0,"BASE":1,"CMND":"EthType 0|EthClockMode 1|EthAddress 0"}
M5Stack Atom Lite ESP32 {"NAME":"M5Stack Atom Lite","GPIO":[1,1,1,1,1,1,1,1,1056,1,1,1,1,1,1,1,0,1,1,1,0,1,640,1376,0,0,0,0,608,1,1,1,1,0,0,32],"FLAG":0,"BASE":1}
M5Stack AtomU USB-A ESP32 "Not available"
@@ -467,7 +471,7 @@ Wireless Tag 3.5" Touch {"NAME":"WT32-SC01","GPIO":[6210,1,1,1,1,1,0,0,1,70
## Display Switch
```
-Lanbon L8 5 in 1 LCD Touch {"NAME":"Lanbon L8","GPIO":[0,0,0,0,0,992,0,0,224,0,225,0,0,0,1024,896,0,6624,6592,864,0,832,416,226,0,0,0,0,417,418,0,352,0,0,0,4736],"FLAG":0,"BASE":1}
+Lanbon L8 5 in 1 LCD Touch {"NAME":"Lanbon L8","GPIO":[608,0,0,0,640,992,0,0,224,0,225,0,0,0,1024,736,0,800,768,704,6210,672,416,226,0,0,0,0,417,418,0,2688,0,0,0,0],"FLAG":0,"BASE":1}
Sonoff NSPanel Touch {"NAME":"NSPanel","GPIO":[0,0,0,0,3872,0,0,0,0,0,32,0,0,0,0,225,0,480,224,1,0,0,0,33,0,0,0,0,0,0,0,0,0,0,4736,0],"FLAG":0,"BASE":1,"CMND":"ADCParam1 2,11200,10000,3950 | Sleep 0 | BuzzerPWM 1"}
```
@@ -590,6 +594,7 @@ Proscenic {"NAME":"Generic","GPIO":[1,1,1,1,1,1,0,0,1,1,1,1,1
3DStar ESP IR Blaster xLR {"NAME":"3DS_IR Blaster_xLR","GPIO":[0,0,0,0,0,0,0,0,0,1088,0,1056,0,0],"FLAG":0,"BASE":18}
A1 Universal Remote Control {"NAME":"A1 IR Controller","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62}
AI Universal Remote {"NAME":"YTF IR Controller","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62}
+AI Universal Remote Control {"NAME":"LQ-08","GPIO":[0,0,0,0,0,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62}
Alfawise KS1 {"NAME":"KS1","GPIO":[1,1792,32,1824,32,1088,0,0,320,0,1056,0,0,4704],"FLAG":0,"BASE":62}
Antsig Universal Remote Controller {"NAME":"Antsig Smart Wi-Fi IR","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62}
Automate Things IR Bridge {"NAME":"AT-IRBR-1.0","GPIO":[0,0,0,0,1056,1088,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18,"CMND":"Module 0"}
@@ -689,6 +694,7 @@ RGB+CCT 12-24V {"NAME":"WS05","GPIO":[0,0,0,0,0,420,0,0,418,417,41
RGBW 12-24V {"NAME":"*WS04","GPIO":[0,0,0,0,0,0,0,0,417,418,416,419,0,0],"FLAG":0,"BASE":18}
Shelly RGBW2 {"NAME":"Shelly RGBW2","GPIO":[0,0,288,0,419,1,0,0,416,32,418,417,0,0],"FLAG":0,"BASE":18}
Spectrum Smart RGBCCT {"NAME":"Spectrum Smart RGB CCT Controller","GPIO":[32,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18}
+Tuya RGBCCT {"NAME":"AP-5CH-1","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18}
Xunata Led Controller High Voltage 110/220V {"NAME":"KL-LED-WIFI-AC","GPIO":[0,0,0,0,0,0,0,0,0,416,0,0,0,0],"FLAG":0,"BASE":18}
ZJ-WF-ESP-A v1.1 {"NAME":"RGB2","GPIO":[0,0,0,0,0,0,0,0,417,416,418,0,0,0],"FLAG":0,"BASE":18}
```
@@ -801,6 +807,7 @@ Novostella UT88836 20W Flood {"NAME":"Novo 20W Flood","GPIO":[0,0,0,0,416,419,0
Nue Vision Care Desk Lamp {"NAME":"Nue Vision Desk Lamp VC18","GPIO":[1,1,1,1,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54,"CMND":"TuyaMCU 11,1 | TuyaMCU 21,3 | TuyaMCU 23,4"}
Philips Wiz 24W LED White Batten {"NAME":"PHILIPS-wiz-24w","GPIO":[0,0,0,0,417,0,0,0,0,416,0,0,0,0],"FLAG":0,"BASE":18}
Polycab Hohm Avenir 20W Batten {"NAME":"PolycabBatten","GPIO":[0,0,0,0,0,416,0,0,0,449,0,0,0,0],"FLAG":0,"BASE":18}
+RGB Floor Lamp {"NAME":"Floor Lamp","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54}
Sonoff {"NAME":"Sonoff BN-SZ","GPIO":[0,0,0,0,0,0,0,0,416,320,0,0,0,0],"FLAG":0,"BASE":22}
Spotlight 9cm RGB+W 7W {"NAME":"Spotlight RGBW","GPIO":[0,0,0,0,0,0,0,0,0,3008,0,3040,0,0],"FLAG":0,"BASE":27}
TCP WPAN Square 600X600mm 36W CCT Panel {"NAME":"TCPsmart LED Panel","GPIO":[0,0,0,0,0,416,0,0,0,449,0,0,0,0],"FLAG":0,"BASE":18,"CMND":"SO92 1|DimmerRange 30,100"}
@@ -838,6 +845,9 @@ Proscenic T21 Air Fryer {"NAME":"Proscenic T21","GPIO":[0,2272,0,2304,0,0,0
RainPoint Indoor Water Pump {"NAME":"RainPoint","GPIO":[0,0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54,"CMND":"TuyaMCU 81,107|TuyaMCU 12,109|TuyaMCU 11,1|TuyaMCU 82,104"}
Sinilink PCIe Computer Remote {"NAME":"XY-WPCE","GPIO":[1,1,320,1,32,224,0,0,160,0,0,0,0,0],"FLAG":0,"BASE":18,"CMND":"SO114 1 | SwitchMode1 2"}
Sinilink USB Computer Remote {"NAME":"XY-WPCL","GPIO":[0,0,320,0,0,224,0,32,160,0,0,0,0,0],"FLAG":0,"BASE":18,"CMND":"SO114 1 | Pulsetime 10 | SwitchMode1 2"}
+Sinilink XY-Clock Clock Alarm Module {"NAME":"XY-Clock","GPIO":[288,0,289,0,0,416,32,33,608,640,0,0,34,0],"FLAG":0,"BASE":18}
+Sunbeam LoftTec Electric Blanket {"NAME":"Sunbeam Heated Blanket","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54}
+Ulanzi Smart Pixel Clock {"NAME":"Ulanzi TC001","GPIO":[0,0,0,0,0,0,0,0,0,0,34,480,0,0,0,0,0,640,608,0,0,0,32,33,0,0,0,0,1376,0,4704,4768,0,0,0,0],"FLAG":0,"BASE":1}
Xystec USB3.0 4 Port Hub {"NAME":"Xystec USB Hub","GPIO":[0,0,0,0,224,0,0,0,226,227,225,0,0,0],"FLAG":0,"BASE":18}
```
@@ -922,7 +932,9 @@ Kogan Energy Meter IP44 {"NAME":"Kogan Smart Sw IP44","GPIO":[32,0,0,0,2688
Konyks Pluviose 16A IP55 {"NAME":"Konyks Pluviose","GPIO":[32,0,0,0,0,0,0,0,224,288,0,0,0,0],"FLAG":0,"BASE":18}
Koolertron {"NAME":"C168 Outdoor","GPIO":[0,32,0,320,2720,2656,0,0,224,2624,225,226,0,0],"FLAG":0,"BASE":18}
Ledvance Smart+ 16A {"NAME":"LEDVANCE Smart Wifi Outdoor Plug","GPIO":[0,0,0,320,2688,2656,0,0,224,32,2624,0,0,0],"FLAG":0,"BASE":18}
+Ledvance Smart+ Compact {"NAME":"LEDVANCE SMART+ Compact Outdoor Plug ","GPIO":[0,0,0,0,320,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18}
LSC Dual Socket {"NAME":"LSC NFL-022","GPIO":[0,0,0,0,320,32,0,0,0,224,225,0,0,0],"FLAG":0,"BASE":18}
+LSC Dual Socket {"NAME":"LSC Outdoor Dual Socket","GPIO":[320,0,0,32,8673,8672,0,0,0,0,8674,0,8675,0],"FLAG":0,"BASE":18}
Luminea 2 Outlet {"NAME":"Luminea","GPIO":[0,0,0,0,225,320,0,0,224,321,32,0,0,1],"FLAG":0,"BASE":18}
Luminea NX-4458 {"NAME":"Luminea NX4458","GPIO":[32,0,0,0,2688,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":65}
Master {"NAME":"Master_IOT-EXTPLUG","GPIO":[32,1,0,1,1,0,0,0,224,288,0,0,0,0],"FLAG":0,"BASE":1}
@@ -957,6 +969,7 @@ WiOn Yard Stake {"NAME":"WiOn 50053","GPIO":[0,0,320,0,0,0,0,0,0,32
WOOX R4051 {"NAME":"WOOX R4051","GPIO":[32,0,0,0,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":18}
WOOX R4052 {"NAME":"WOOX R4052","GPIO":[32,0,0,0,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":18}
Wyze {"NAME":"Wyze Plug Outdoor","GPIO":[0,0,0,0,0,576,0,0,0,0,0,224,321,7713,7712,320,0,0,0,0,0,2624,2656,2720,0,0,0,0,225,0,4704,0,0,0,0,0],"FLAG":0,"BASE":1}
+XtendLan IP66 Double {"NAME":"XtendLan_ZAS4","GPIO":[32,0,0,0,0,225,33,0,224,0,0,0,0,0],"FLAG":0,"BASE":18}
```
## Plug
@@ -1046,6 +1059,7 @@ Avatto OT08 {"NAME":"Avatto OT08","GPIO":[416,0,418,0,417,2720,
Awow X5P {"NAME":"Awow","GPIO":[0,0,320,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18}
AWP02L-N {"NAME":"AWP02L-N","GPIO":[0,0,320,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18}
AzpenHome Smart {"NAME":"Socket2Me","GPIO":[288,1,1,1,225,1,0,0,224,1,32,1,1,0],"FLAG":0,"BASE":18}
+Baco Smart Power Socket {"NAME":"Balco HE200021","GPIO":[0,0,0,32,2720,2656,0,0,2624,576,224,0,0,0],"FLAG":0,"BASE":52}
Bagotte SK-EU-A01 {"NAME":"Bagotte SK-EU-A01","GPIO":[96,0,0,0,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":18}
Bakibo Mini {"NAME":"SM300","GPIO":[320,0,576,0,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":59}
Bakibo TP22Y {"NAME":"Bakibo TP22Y","GPIO":[0,0,0,32,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":52}
@@ -1180,6 +1194,7 @@ GDTech {"NAME":"GDTech Model: MPV2RO-US","GPIO":[320,0,0,0
GDTech W-US001 {"NAME":"GDTech W-US001","GPIO":[1,32,1,1,1,1,0,0,1,320,224,1,1,4704],"FLAG":0,"BASE":18}
GDTech W-US003 {"NAME":"W-US003","GPIO":[0,32,1,1,1,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18}
Geekbes YM-WS-1 {"NAME":"Office Test Pl","GPIO":[1,1,1,1,1,1,1,1,576,32,163,224,1,1],"FLAG":0,"BASE":18}
+Geekome Enchufe Inteligente Chile {"NAME":"Geekhome PG01-CL10A_T","GPIO":[0,0,0,32,2720,2656,0,0,2624,544,224,0,0,0],"FLAG":0,"BASE":1}
Geeni OUTDOOR {"NAME":"Geeni Outdoor","GPIO":[32,0,0,0,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18}
Geeni Spot {"NAME":"Geeni Spot","GPIO":[576,0,0,0,320,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18}
Geeni Spot Glo {"NAME":"Geeni Glo","GPIO":[0,0,0,0,320,0,0,0,224,32,225,0,0,0],"FLAG":0,"BASE":18}
@@ -1233,7 +1248,8 @@ HIPER IoT P05 {"NAME":"HIPER IoT P05","GPIO":[0,320,0,32,0,0,0,0,
hiwild W-US002 {"NAME":"W-US002","GPIO":[0,32,0,0,0,0,0,0,0,288,224,0,576,0],"FLAG":0,"BASE":18}
HLT-309 {"NAME":"HLT-309","GPIO":[0,0,0,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18}
Hoin 10A {"NAME":"NIOH XS-SSC01","GPIO":[0,32,0,0,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18}
-Hombli Socket Duo {"NAME":"HombliSocketDuo","GPIO":[33,0,0,0,0,0,0,0,0,544,224,225,32,0],"FLAG":0,"BASE":18}
+Hombli Smart Socket EU {"NAME":"Hombli HBSS-0109","GPIO":[0,0,0,32,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":18}
+Hombli Socket Duo {"NAME":"Hombli HBSD-0109","GPIO":[33,0,0,0,0,0,0,0,0,544,224,225,32,0],"FLAG":0,"BASE":18}
Homecube {"NAME":"Homecube SP1","GPIO":[0,321,0,32,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":55}
HomeMate 16A Heavy Duty {"NAME":"HMLPG16","GPIO":[0,288,0,32,2720,2656,0,0,2624,544,224,0,0,0],"FLAG":0,"BASE":18}
Houzetek {"NAME":"AWP07L","GPIO":[320,0,0,0,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":18}
@@ -1247,11 +1263,13 @@ Hyleton 314 {"NAME":"hyleton-314","GPIO":[321,0,320,0,0,0,0,0,0
Hyleton 315 {"NAME":"hyleton-315","GPIO":[0,0,0,0,321,320,0,0,224,64,0,0,0,0],"FLAG":0,"BASE":18}
Hyleton 317 {"NAME":"hyleton-317","GPIO":[320,0,321,0,322,0,0,0,0,64,0,224,0,0],"FLAG":0,"BASE":18}
Hyleton HLT-311 {"NAME":"HLT-311","GPIO":[544,0,320,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18}
+Hyrican SmartPlug 16A {"NAME":"Hyrican TM-MP-EU02","GPIO":[0,0,0,32,2656,2624,0,0,224,2720,320,0,0,0],"FLAG":0,"BASE":18}
iClever IC-BS08 {"NAME":"iClever BS08","GPIO":[0,0,0,0,544,320,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18}
iDIGITAL {"NAME":"Brilliant","GPIO":[0,0,0,0,288,0,0,0,224,64,0,0,0,0],"FLAG":0,"BASE":18}
iGET Security {"NAME":"iGET Security DP16","GPIO":[320,1,576,1,2656,2720,0,0,2624,32,0,224,0,0],"FLAG":0,"BASE":45}
Ihommate 16A {"NAME":"ZCH-02","GPIO":[0,0,0,32,2688,2656,0,0,2624,320,224,0,0,4704],"FLAG":0,"BASE":18}
Infray 16A {"NAME":"AWP08L","GPIO":[32,0,288,0,0,0,0,0,0,0,0,224,0,4704],"FLAG":0,"BASE":18}
+Insmart {"NAME":"INSMART SP1","GPIO":[320,1,321,1,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":45}
Insmart WP5 {"NAME":"INSMART","GPIO":[0,0,448,0,0,0,0,0,0,160,0,224,0,0],"FLAG":0,"BASE":18}
Intempo Home Euro 2-Pin {"NAME":"Intempo EE5010WHTSTKEU","GPIO":[0,0,0,32,0,2720,0,0,0,576,224,0,0,0],"FLAG":0,"BASE":18}
iQtech SmartLife {"NAME":"iQ-Tech WS020","GPIO":[0,0,320,0,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":18}
@@ -1357,6 +1375,7 @@ Moes W-DE004S {"NAME":"Moes DE004S ","GPIO":[321,0,0,0,0,2720,0,0
Moes WS-UEU {"NAME":"MoesHouse","GPIO":[0,0,0,224,32,0,0,0,321,0,0,0,0,0],"FLAG":0,"BASE":18}
MoKo 2 USB {"NAME":"MoKo Plug","GPIO":[0,32,0,0,0,0,0,0,0,321,224,0,0,0],"FLAG":0,"BASE":18}
MoKo YX-WS01A {"NAME":"MoKo Plug","GPIO":[0,32,0,0,0,0,0,0,0,321,224,0,0,0],"FLAG":0,"BASE":18}
+Muvit iO MIOSMP008 {"NAME":"MIOSMP008","GPIO":[0,0,0,32,2656,2624,0,0,224,2720,320,0,0,0],"FLAG":0,"BASE":1}
MXQ LED Nightlight {"NAME":"MXQ SP06","GPIO":[0,0,0,0,288,192,0,0,225,321,224,0,0,0],"FLAG":0,"BASE":18}
Nanxin NX-SM400 {"NAME":"NX-SM400","GPIO":[0,0,0,32,2720,2656,0,0,2592,288,224,0,0,0],"FLAG":0,"BASE":18}
Naxa NSH-1000 {"NAME":"Naxa NSH-1000","GPIO":[0,0,0,0,32,0,0,0,321,320,224,0,0,0],"FLAG":0,"BASE":18}
@@ -1389,6 +1408,7 @@ OFFONG 16A {"NAME":"OFFONG P1","GPIO":[0,32,0,0,2720,2656,0,0,
Oittm Smart {"NAME":"Oittm","GPIO":[0,0,0,0,224,320,0,0,32,0,0,0,0,0],"FLAG":0,"BASE":1}
Olliwon {"NAME":"Olliwon","GPIO":[0,0,320,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18}
Onearz Connect Smart {"NAME":"Onearz Power Plug Wifi","GPIO":[0,0,0,0,288,224,0,0,0,32,0,0,0,0],"FLAG":0,"BASE":18}
+Oneplug {"NAME":"ONEPLUG UP111","GPIO":[321,0,0,0,2656,2720,0,0,2624,0,224,0,32,0],"FLAG":0,"BASE":18}
Onestyle SD-WL-02 {"NAME":"JH-G01B1","GPIO":[0,3072,0,3104,0,0,0,0,32,320,224,0,0,0],"FLAG":0,"BASE":41}
Orbecco W-US009 {"NAME":"Orbecco Plug","GPIO":[0,32,0,0,0,0,0,0,0,288,224,0,0,0],"FLAG":0,"BASE":18}
Orvibo B25 {"NAME":"Orvibo B25","GPIO":[0,0,0,0,289,224,0,0,288,0,32,0,0,0],"FLAG":0,"BASE":18}
@@ -1405,8 +1425,8 @@ Panamalar NX-SM200 {"NAME":"NX-SM200","GPIO":[0,0,0,0,320,2720,0,0,262
Positivo PPW1000 {"NAME":"PPW1000","GPIO":[0,0,320,0,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":45}
Positivo Max {"NAME":"PPW1600","GPIO":[0,0,0,32,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":55}
PowerAdd BIE0091 {"NAME":"BIE0091","GPIO":[32,0,0,0,0,0,0,0,416,0,0,224,0,0],"FLAG":0,"BASE":18}
+Powertech {"NAME":"Jaycar MS6104","GPIO":[0,0,0,32,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":52}
Powertech {"NAME":"Jaycar","GPIO":[320,0,0,0,0,0,0,0,0,160,0,224,0,0],"FLAG":0,"BASE":6}
-Powertech MS6104 {"NAME":"Jaycar MS6104","GPIO":[0,0,0,32,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":52}
Powrui 3-Outlet with 4 USB {"NAME":"POWRUI AHR-077","GPIO":[0,0,0,35,34,33,0,0,225,226,32,224,544,0],"FLAG":0,"BASE":18}
Powrui AW-08 {"NAME":"POWRUI AW-08","GPIO":[0,0,0,0,32,224,0,0,0,288,321,0,0,4704],"FLAG":0,"BASE":18}
Premier PWIFPLG {"NAME":"Premier Plug","GPIO":[0,0,0,32,0,0,0,0,0,320,224,0,0,4704],"FLAG":0,"BASE":18}
@@ -1432,10 +1452,13 @@ SA-P202A {"NAME":"SA-P202A","GPIO":[0,0,0,0,0,320,0,0,224,32
SA-P202C 16A {"NAME":"Elivco 202C-G","GPIO":[0,0,0,32,2688,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":18}
SA-P302A {"NAME":"KinCam SA-P302A","GPIO":[0,0,0,0,0,320,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18}
Sansui {"NAME":"Sansui YSP-1","GPIO":[288,0,289,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18}
+Sansui Rewireable {"NAME":"YSP-2","GPIO":[288,0,289,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18}
See Switches {"NAME":"SEESWITCHES SSPG01WH","GPIO":[321,1,320,1,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":45}
+Setti+ {"NAME":"Setti+ SP301","GPIO":[320,0,576,0,2656,2720,0,0,2624,32,0,224,0,0],"FLAG":0,"BASE":45}
Shelly Plug {"NAME":"Shelly Plug EU","GPIO":[0,0,0,0,224,2688,0,0,96,288,289,0,290,0],"FLAG":0,"BASE":18}
Shelly Plug S {"NAME":"Shelly Plug S","GPIO":[320,1,576,1,1,2720,0,0,2624,32,2656,224,1,4736],"FLAG":0,"BASE":45}
Shelly Plug US {"NAME":"Shelly Plug US","GPIO":[288,0,321,0,224,2720,0,0,2624,32,2656,544,0,0],"FLAG":0,"BASE":45}
+Shelly Plus Plug S {"NAME":"Shelly Plus Plug S","GPIO":[0,0,0,0,224,0,32,2720,0,0,0,0,0,0,0,2624,0,0,2656,0,0,288,289,0,0,0,0,0,0,4736,0,0,0,0,0,0],"FLAG":0,"BASE":1}
Sieges {"NAME":"Sieges FLHS-ZN01","GPIO":[0,0,320,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18}
SilentNight {"NAME":"SilentNightPlug","GPIO":[0,0,0,0,288,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18}
Silvergear Slimme Stekker {"NAME":"Silvergear SmartHomePlug","GPIO":[0,0,0,96,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18}
@@ -1475,6 +1498,8 @@ STITCH {"NAME":"Stitch 27937","GPIO":[32,0,320,0,2688,2656
STITCH {"NAME":"Stitch 35511","GPIO":[320,0,321,0,0,2688,0,0,0,32,2656,224,2624,0],"FLAG":0,"BASE":18}
STITCH 15A In-Line {"NAME":"Stitch 39047","GPIO":[0,288,0,32,2688,2656,0,0,2624,0,224,0,0,0],"FLAG":0,"BASE":18}
STITCH Mini 10A {"NAME":"STITCH 41730","GPIO":[0,0,320,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18}
+Strong Helo Plight {"NAME":"Strong HELO-PLIGHT-EU","GPIO":[416,0,418,0,417,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":18}
+Strong Helo PLUSB 2x USB {"NAME":"Helo-PLUSB-EU","GPIO":[32,0,0,0,2720,2656,0,0,2624,320,224,225,8096,0],"FLAG":0,"BASE":18}
SuperNight Dual {"NAME":"SUPERNIGHT","GPIO":[0,32,0,224,2656,2688,0,0,225,2624,576,0,0,4833],"FLAG":0,"BASE":18}
SWA1 {"NAME":"SWA1","GPIO":[0,0,0,0,288,224,0,0,0,32,0,0,0,0],"FLAG":0,"BASE":18}
SWA1 FR {"NAME":"SWA1","GPIO":[0,0,0,0,288,224,0,0,0,32,0,0,0,0],"FLAG":0,"BASE":18}
@@ -1763,6 +1788,7 @@ AiYaTo 12W {"NAME":"AiYaTo RGBCW","GPIO":[0,0,0,0,419,418,0,0,
Alfawise LE12 9W 900LM {"NAME":"Alfawise LE12 ","GPIO":[0,0,0,0,420,417,0,0,418,0,419,416,0,0],"FLAG":0,"BASE":18}
Aoycocr JL81 5W 400lm {"NAME":"AoycocrJLB1","GPIO":[0,0,0,0,418,0,0,0,417,420,416,419,0,0],"FLAG":0,"BASE":18}
Aoycocr Q10CWM BR30 9W 720lm {"NAME":"AoycocrBR30","GPIO":[0,0,0,0,0,418,0,0,417,0,416,419,0,0],"FLAG":0,"BASE":18}
+Arlec 5.5W 470lm {"NAME":"Arlec GLD360HA","GPIO":[0,0,0,0,0,0,0,0,4067,0,4032,0,0,0],"FLAG":0,"BASE":18,"CMND":"SO37 24"}
Arlec Smart 10W 830lm {"NAME":"Arlec GLD320HA","GPIO":[0,0,0,0,4067,0,0,0,0,4032,0,0,0,0],"FLAG":0,"BASE":18,"CMND":"SO37 6"}
Arlec Smart 9.5W 806lm {"NAME":"Arlec RGBWW","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18}
Arlec Smart 9.5W 806lm {"NAME":"Arlec RGBWW","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18}
@@ -1951,13 +1977,14 @@ cod.m WLAN Pixel Controller v0.8 {"NAME":"cod.m Pixel Controller V0.8","GPIO":[
ESP01 NeoPixel Ring {"NAME":"ESP-01S-RGB-LED-v1.0","GPIO":[1,1,1376,1,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18}
H803WF 2048 Pixel 5V-24V {"NAME":"H803WF","GPIO":[0,0,0,0,3840,3840,0,0,3872,1376,0,3872,0,0],"FLAG":0,"BASE":18}
IOTMCU {"NAME":"IOTMCU_ESP-12S-RGB-LED-v1","GPIO":[1,1,1,1,0,1376,0,0,1,1088,32,0,0,0],"FLAG":0,"BASE":18}
+LifeSmart Cololight MIX {"NAME":"ESP32-DevKit","GPIO":[0,0,0,0,1376,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,4704,0,0,0,0,0,0],"FLAG":0,"BASE":1}
LifeSmart Cololight PRO Hexagonal {"NAME":"Cololight PRO","GPIO":[0,0,0,0,32,0,0,0,0,33,0,0,1376,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4704,0,0,0,0,0,0],"FLAG":0,"BASE":1}
SP501E WS2812B {"NAME":"SP501E","GPIO":[0,32,0,1376,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18}
```
## RGBW
```
-3Stone EBE-QPW36 1050lm {"NAME":"3STONE","GPIO":[0,0,0,0,2944,2912,0,0,416,2976,0,0,0,1],"FLAG":0,"BASE":18}
+3Stone EBE-QPW36 1050lm {"NAME":"3Stone","GPIO":[0,0,0,0,2912,417,0,0,0,416,2944,0,0,0],"FLAG":0,"BASE":18}
Accewit 7W 650lm {"NAME":"Accewit Bulb","GPIO":[0,0,0,0,0,417,0,0,418,0,419,416,0,0],"FLAG":0,"BASE":18}
Aisirer 7W 580lm {"NAME":"Aisirer RGBW","GPIO":[0,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18}
Aisirer 7W 580lm {"NAME":"Aisirer RGBW","GPIO":[0,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18}
@@ -2093,6 +2120,7 @@ REPSN G45 5W 500lm {"NAME":"REPSN RGBW E14","GPIO":[0,0,0,0,0,0,0,0,40
Riversong Juno 10W {"NAME":"Juno10","GPIO":[0,0,0,0,2912,416,0,0,0,2976,2944,0,0,0],"FLAG":0,"BASE":18}
Rogoei EBE-QPZ04 6.5W 450lm {"NAME":"EBE-QPZ04","GPIO":[0,0,0,0,4032,0,0,0,0,0,4064,0,0,0],"FLAG":0,"BASE":18}
Saudio 7W 700lm {"NAME":"X002BU0DOL","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18}
+Sengled {"NAME":"Sengled RGBW","GPIO":[0,0,0,0,0,0,0,0,417,416,419,418,0,0],"FLAG":0,"BASE":18}
Shelly Duo RGBW 5W 400lm {"NAME":"Shelly Duo RGBW","GPIO":[0,0,0,0,0,419,0,0,417,416,418,0,0,0],"FLAG":0,"BASE":18}
Shelly Duo RGBW 9W 800lm {"NAME":"Shelly Duo RGBW","GPIO":[0,0,0,0,0,419,0,0,417,416,418,0,0,0],"FLAG":0,"BASE":18}
Smart 810lm {"NAME":"OOOLED 60W RGB","GPIO":[0,0,0,0,418,419,0,0,416,0,417,0,0,4704],"FLAG":0,"BASE":18}
@@ -2129,6 +2157,7 @@ WOOX 4W 350lm {"NAME":"WOOX R4553","GPIO":[0,0,0,0,416,419,0,0,41
WOOX R4553 650lm {"NAME":"WOOX R4553","GPIO":[0,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18}
WOOX R5077 {"NAME":"WOOX R5077","GPIO":[0,0,0,0,2912,416,0,0,417,2976,2944,0,0,0],"FLAG":0,"BASE":18}
Wyze Bulb Color {"NAME":"Wyze Bulb Color","GPIO":[0,0,0,0,0,0,0,0,0,418,416,419,0,0,0,0,0,0,0,224,0,0,417,0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1}
+Xiaomi Mi LED Smart Bulb Essential {"NAME":"Mi LED Smart Bulb Essential","GPIO":[0,0,0,0,418,419,0,0,416,417,0,0,0,0],"FLAG":0,"BASE":18}
Zemismart 5W {"NAME":"Zemismart_GU10","GPIO":[0,0,0,0,0,0,0,0,0,3008,0,3040,0,0],"FLAG":0,"BASE":27}
Zemismart 5W 480lm {"NAME":"Zemismart-E14-RGBW","GPIO":[0,0,0,0,0,0,0,0,0,3008,0,3040,0,0],"FLAG":0,"BASE":27}
Zemismart A19 10W {"NAME":"Zemism_E27_A19","GPIO":[0,0,0,0,0,0,0,0,0,3008,0,3040,0,0],"FLAG":0,"BASE":27}
@@ -2145,7 +2174,10 @@ Athom 1Ch Inching/Self-locking {"NAME":"Athom R01","GPIO":[1,1,1,1,1,224,1,1,1,
Athom 8Ch Inching/Self-locking 10A {"NAME":"Athom R08","GPIO":[229,1,1,1,230,231,1,1,226,227,225,228,224,0],"FLAG":0,"BASE":18}
Claudy 5V {"NAME":"CLAUDY","GPIO":[0,0,225,0,0,0,0,0,0,0,0,224,0,0],"FLAG":0,"BASE":18}
Devantech 8x16A {"NAME":"ESP32LR88","GPIO":[0,0,231,0,32,35,0,0,229,230,228,0,33,34,36,37,0,38,39,544,0,225,226,227,0,0,0,0,0,224,3232,3200,0,0,0,0],"FLAG":0,"BASE":1}
-DoHome HomeKit DIY Switch {"NAME":"DoHome DIY","GPIO":[1,1,0,1,1,544,0,0,224,0,0,0,0,0],"FLAG":0,"BASE":1}
+Dingtian 16 Channel {"NAME":"Dingtian DT-R008","GPIO":[1,9408,1,9440,1,1,1,1,1,9760,9729,9856,9792,1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,9824,9952,1,1,1,0,0,1],"FLAG":0,"BASE":1}
+Dingtian 32 Channel {"NAME":"Dingtian DT-R008","GPIO":[1,9408,1,9440,1,1,1,1,1,9760,9731,9856,9792,1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,9824,9952,1,1,1,0,0,1],"FLAG":0,"BASE":1}
+Dingtian 8 Channel {"NAME":"Dingtian DT-R008","GPIO":[1,9408,1,9440,1,1,1,1,1,9760,9728,9856,9792,1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,9824,9952,1,1,1,0,0,1],"FLAG":0,"BASE":1}
+DoHome HomeKit DIY Switch {"NAME":"DoHome DIY","GPIO":[1,1,0,1,96,544,0,0,224,0,0,0,0,0],"FLAG":0,"BASE":1}
Eachen ST-DC2 {"NAME":"Garage Control","GPIO":[162,0,0,0,226,225,33,0,224,288,163,227,0,4704],"FLAG":0,"BASE":18}
Eachen ST-DC4 {"NAME":"Eachen_ST-DC4","GPIO":[160,1,1,1,226,225,1,1,224,544,1,227,1,0],"FLAG":0,"BASE":54}
Eachen ST-UDC1 {"NAME":"ST-UDC1","GPIO":[160,0,0,0,0,0,0,0,224,320,0,0,0,4704],"FLAG":0,"BASE":18}
@@ -2153,14 +2185,18 @@ Electrodragon Board SPDT {"NAME":"ED Relay Board","GPIO":[1,1,1,1,1,1,0,0,22
Electrodragon ESP8266 {"NAME":"ElectroDragon","GPIO":[33,1,32,1,1,1,0,0,225,224,1,1,288,4704],"FLAG":0,"BASE":15}
Electrodragon Inductive Load {"NAME":"ED RelayBoard IL","GPIO":[0,0,1,0,1,1,0,0,224,225,1,1,288,0],"FLAG":0,"BASE":18}
ESP-01 Relay V4.0 {"NAME":"ESP01v4","GPIO":[256,320,0,32,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18}
+ESP-01 Relay V5.0 {"NAME":"ESP01v5","GPIO":[256,320,0,32,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18}
ESP-01S 5V Relay Module V1.0 {"NAME":"ESP-01S Relay","GPIO":[256,288,1,1,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18}
ESP-12F 5V/7-28V 1 Channel 30A {"NAME":"Aideepen","GPIO":[0,0,0,0,0,288,0,0,0,0,0,0,224,0],"FLAG":0,"BASE":18}
ESP-12F 5V/7-28V 4 Channel 30A {"NAME":"ESP12F_Relay_30A_X4","GPIO":[1,1,1,1,32,1,1,1,226,227,225,1,224,1],"FLAG":0,"BASE":18}
ESP-12F 5V/7-28V 8 Channel {"NAME":"ESP12F_Relay_X8","GPIO":[229,1,1,1,230,231,0,0,226,227,225,228,224,1],"FLAG":0,"BASE":18}
+ESP-12F 5V/7-28V 8 Channel {"NAME":"ESP12F_Relay_X8_v1.1","GPIO":[230,1,231,229,1,1,1,1,226,225,227,224,228,1],"FLAG":0,"BASE":18}
ESP-12F 5V/7-30V/220V 4 Channel {"NAME":"ESP12F_Relay_X4","GPIO":[1,1,320,1,1,321,1,1,226,227,225,1,224,1],"FLAG":0,"BASE":18}
ESP-12F 5V/8-80V 2 Channel {"NAME":"LC-Relay-ESP12-2R-D8","GPIO":[1,1,1,1,224,225,1,1,1,1,1,1,1,1],"FLAG":0,"BASE":18}
ESP-12F DC 5V/12V/24V 16 Channel {"NAME":"ESP12F_Relay_X16","GPIO":[1,1,1,1,1,7712,1,1,7680,7648,7744,1,1,1],"FLAG":0,"BASE":18}
ESP32 4 Channel {"NAME":"RobotDyn ESP32R4","GPIO":[0,0,1,0,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,1,0,224,225,0,0,0,0,0,227,226,32,33,34,0,0,35],"FLAG":0,"BASE":2}
+ESP32SR88 - WIFI 8 x 1A {"NAME":"ESP32SR88","GPIO":[0,3200,0,3232,226,544,0,0,0,0,0,0,225,224,32,544,33,34,35,36,0,37,38,39,0,229,228,227,0,0,0,0,231,230,0,0],"FLAG":0,"BASE":1}
+ESP8266 4 Channel 5V/12V {"NAME":"4CH Relay","GPIO":[0,0,0,0,0,0,0,0,226,227,225,0,224,0],"FLAG":0,"BASE":18}
eWeLink PSF-B04 5V 7-32V 4 Channel {"NAME":"eWeLink 4CH","GPIO":[160,0,0,0,226,225,161,162,224,288,163,227,0,0],"FLAG":0,"BASE":18}
Ewelink RF No Neutral 3 Channel {"NAME":"Ewelink 3 Gang Module","GPIO":[32,0,0,0,225,226,33,34,224,544,0,0,0,0],"FLAG":0,"BASE":18}
Geekcreit 5V DIY 4 Channel Jog Inching Self-Locking {"NAME":"Geekcreit-4ch","GPIO":[160,0,0,0,226,225,161,162,224,288,163,227,0,0],"FLAG":0,"BASE":18}
@@ -2182,7 +2218,7 @@ LC Technology DC5-60V 1 Channel {"NAME":"ESP32_Relay_X1","GPIO":[1,1,1,1,1,1,1,
LC Technology DC5-60V 2 Channel {"NAME":"ESP32_Relay_X2","GPIO":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,544,0,225,224,0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1}
LC Technology DC5-60V 4 Channel {"NAME":"ESP32_Relay_X4","GPIO":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,544,0,226,227,1,0,0,0,0,224,225,1,1,1,0,0,1],"FLAG":0,"BASE":1}
LC Technology ESP8266 5V {"NAME":"ESP8266-01S","GPIO":[224,3200,0,3232,0,0,0,0,0,0,0,0,0,4704],"FLAG":0,"BASE":18}
-LilyGo T-Relay 8 {"NAME":"LilyGo ESP32 Relay 8","GPIO":[1,1,1,1,1,231,1,1,227,226,1,1,1,1,230,229,0,228,1,1,0,544,1,1,0,0,0,0,225,224,1,1,1,0,0,1],"FLAG":0,"BASE":1}
+LilyGo T-Relay 5V 8 Channel {"NAME":"LilyGo ESP32 Relay 8","GPIO":[1,1,1,1,1,231,1,1,227,226,1,1,1,1,230,229,0,228,1,1,0,544,1,1,0,0,0,0,225,224,1,1,1,0,0,1],"FLAG":0,"BASE":1}
LilyGO TTGO 4 Channel ESP32 {"NAME":"T-Relay ESP32","GPIO":[0,0,1,0,1,227,0,0,1,1,1,1,0,0,226,225,0,224,1,1,0,544,1,1,0,0,0,0,1,1,1,1,1,0,0,1],"FLAG":0,"BASE":1}
LinkNode R4 {"NAME":"LinkNode R4","GPIO":[0,0,0,0,0,0,0,0,224,225,226,0,227,0],"FLAG":0,"BASE":18}
LinkNode R8 {"NAME":"LinkNode R8","GPIO":[0,0,0,0,228,229,0,231,226,227,225,230,224,0],"FLAG":0,"BASE":18}
@@ -2202,15 +2238,13 @@ Sonoff SV {"NAME":"Sonoff SV","GPIO":[32,1,0,1,1,1,0,0,224,32
Yunshan 7-30V 10A {"NAME":"Yunshan 10A","GPIO":[32,1,288,1,224,161,0,0,225,0,0,0,0,0],"FLAG":0,"BASE":18}
```
-## Relay Module
-```
-```
-
## Sensor
```
Bresser 7-Kanal Thermo-/Hygrometer with Outdoor {"NAME":"Bresser","GPIO":[1,1,1,1,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54,"CMND":"SO97 1 | TuyaMCU 73,2 | TuyaMCU 71,102"}
Genesense IoT Controller {"NAME":"GNS24","GPIO":[32,1,1312,1,256,320,1,1,256,1216,160,3840,1,4704],"FLAG":0,"BASE":18}
+Kaiweets Air Quality {"NAME":"Kaiweets EH-8","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54}
Shelly 3EM Power Monitoring Module {"NAME":"Shelly 3EM","GPIO":[1,1,288,1,32,8065,0,0,640,8064,608,224,8096,0],"FLAG":0,"BASE":18}
+Tuya Air Detector 6 in 1 {"NAME":"DCR-KQG","GPIO":[1,2272,544,2304,1,1,1,1,1,1,1,1,1,1],"FLAG":0,"BASE":54,"CMND":"TuyaMCU 80,2 | TuyaMCU 71,18 | TuyaMCU 73,19 | TuyaMCU 99,20 | TuyaMCU 76,21 | TuyaMCU 77,22 | HumRes 1 | TempRes 1 "}
```
## Siren
@@ -2232,6 +2266,7 @@ Blitzwolf E27 {"NAME":"BlitzWolf LT-30","GPIO":[0,0,0,0,320,224,0
Elegant Choice E27/E26 {"NAME":"name","GPIO":[0,0,0,0,0,0,0,0,0,0,0,224,0,0],"FLAG":0,"BASE":18}
Slampher {"NAME":"Slampher","GPIO":[32,1,0,1,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":9}
SmartBase E0260 {"NAME":"SmartBaseE0260","GPIO":[0,0,0,0,320,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18}
+Timeguard Lamp Holder {"NAME":"Timeguard WFLH","GPIO":[0,0,0,0,576,320,0,0,224,0,32,0,0,0],"FLAG":0,"BASE":18}
```
## Soil Sensor
@@ -2239,6 +2274,11 @@ SmartBase E0260 {"NAME":"SmartBaseE0260","GPIO":[0,0,0,0,320,0,0,0,
DIY MORE ESP32 DHT11 {"NAME":"DIYMORESOILDHT11","GPIO":[1,1,1,1,1,1,1,1,1,1,1,1,544,1,1,1,0,1,1184,1,0,1,1,1,0,0,0,0,4864,288,4865,1,1,0,0,1],"FLAG":0,"BASE":1}
```
+## Soldering Iron
+```
+T13 100W PD3.0 Portable {"NAME":"PTS200","GPIO":[0,0,33,0,34,0,0,0,6210,0,32,512,0,0,0,0,0,640,608,0,0,224,4704,0,0,0,0,0,0,4737,0,0,0,0,0,0],"FLAG":0,"BASE":1}
+```
+
## Switch
```
3 Way Smart Light {"NAME":"KS-602F","GPIO":[1,1,1,1,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54}
@@ -2273,6 +2313,7 @@ Bardi Smart Wallswitch 1 Gang {"NAME":"Bardi 1 Gang","GPIO":[321,320,544,0,0,32
Bardi Smart Wallswitch 2 Gang {"NAME":"BARDI 2 Gang","GPIO":[320,0,544,33,225,0,0,0,288,224,321,0,32,0],"FLAG":0,"BASE":18}
Bardi Smart Wallswitch 3 Gang {"NAME":"BARDI 3 Gang","GPIO":[320,321,544,34,226,33,0,0,288,224,322,225,32,0],"FLAG":0,"BASE":18}
BAZZ SWTCHWFW1 {"NAME":"BAZZ KS-602S","GPIO":[32,0,0,0,0,0,224,288,256,320,0,0,0,0],"FLAG":0,"BASE":18}
+Bingoelec 1 Gang Touch {"NAME":"Bingoelec W601","GPIO":[0,544,0,0,0,32,0,0,224,0,0,0,0,0],"FLAG":0,"BASE":18}
BlitzWolf BW-SS3 1 Gang {"NAME":"BW-SS3-1G-EU","GPIO":[288,0,0,32,0,0,0,0,0,224,0,0,0,0],"FLAG":0,"BASE":18}
BlitzWolf BW-SS3 2 Gang {"NAME":"BW-SS3-2G-EU","GPIO":[544,1,1,1,225,33,1,1,32,224,1,1,1,1],"FLAG":0,"BASE":18}
BlitzWolf BW-SS3 3 Gang {"NAME":"BlitzWolf SS3","GPIO":[576,0,0,161,225,162,0,0,160,224,0,226,0,0],"FLAG":0,"BASE":18}
@@ -2469,6 +2510,7 @@ Smatrul 2 Gang RF No Neutral {"NAME":"SMATRUL 2 GANG","GPIO":[0,544,0,32,33,0,0
Smatrul 5A RF433MHz 1 Gang Touch {"NAME":"TMC01-EU","GPIO":[0,320,0,0,0,160,0,0,224,0,0,0,0,0],"FLAG":0,"BASE":18}
Smatrul 5A RF433MHz 4 Gang Touch {"NAME":"TMW4-01(EU)","GPIO":[0,0,0,33,35,32,0,0,34,224,225,226,227,0],"FLAG":0,"BASE":18}
Smatrul 5A RF433MHz 4 Gang Touch {"NAME":"Smatrul RF433MHz 3 Gang Touch Switch (TMW4-01(EU))","GPIO":[0,0,0,160,162,161,0,0,225,224,226,0,0,0],"FLAG":0,"BASE":18}
+Smatrul Infrared Sensor {"NAME":"WHS-2","GPIO":[0,0,0,160,288,0,0,0,0,224,0,0,0,0],"FLAG":0,"BASE":18,"CMND":"SwitchMode1 4 | SO13 1"}
Sonoff IW101 {"NAME":"Sonoff IW101","GPIO":[32,3072,0,3104,0,0,0,0,224,544,0,0,0,0],"FLAG":0,"BASE":41}
Sonoff SwitchMan M5-1C 1 Gang {"NAME":"Sonoff SwitchMan M5-1C-86","GPIO":[32,0,0,0,288,576,0,0,0,0,0,0,0,0,416,0,0,0,0,224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1}
Sonoff SwitchMan M5-2C 2 Gang {"NAME":"Sonoff SwitchMan 2C","GPIO":[0,0,0,0,32,576,0,0,0,0,0,33,0,0,416,225,0,0,0,224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1}
@@ -2523,6 +2565,7 @@ TreatLife {"NAME":"TL SS01S Swtch","GPIO":[0,0,0,0,288,576,0,
Treatlife 3-Way {"NAME":"Treatlife SS01 3-Way","GPIO":[0,0,0,0,224,576,0,0,225,33,160,0,0,0],"FLAG":0,"BASE":18}
TreatLife 3-Way {"NAME":"Treatlife 3-Way","GPIO":[0,0,0,0,224,576,0,0,225,33,160,0,0,0],"FLAG":0,"BASE":18}
TreatLife Single Pole ON/OFF {"NAME":"Treatlife SS02","GPIO":[0,0,0,0,288,576,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18}
+Tuya 20A {"NAME":"DS-161","GPIO":[544,0,0,32,0,0,0,0,0,224,288,0,0,0],"FLAG":0,"BASE":1}
Tuya 3 Gang {"NAME":"KING-Tuya-key","GPIO":[0,0,0,0,226,225,0,0,224,32,34,0,33,0],"FLAG":0,"BASE":18}
TY-US-L1-W {"NAME":"TY-US-L1-W","GPIO":[0,0,0,0,0,32,0,0,0,224,0,0,576,0],"FLAG":0,"BASE":18}
TY-US-L3-W {"NAME":"TY-US-L3-W","GPIO":[0,0,0,0,224,33,0,0,34,226,32,225,576,1],"FLAG":0,"BASE":18}
@@ -2605,6 +2648,7 @@ Moes {"NAME":"Moes MS-104B","GPIO":[0,0,32,0,480,0,0,0,1
Moes 10A {"NAME":"Moes MS-101","GPIO":[0,0,0,0,0,320,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18}
Moes Mini 3 Gang 1/2 Way {"NAME":"Moes MS-104C","GPIO":[0,0,0,34,32,33,0,0,224,225,226,0,0,0],"FLAG":0,"BASE":18}
Nedis 10A {"NAME":"Nedis WIFIPS10WT","GPIO":[0,0,0,0,224,0,0,0,32,321,0,288,0,0],"FLAG":0,"BASE":18}
+Nous 1/2 Channel {"NAME":"NOUS L13T Smart Switch Module","GPIO":[1,161,1,160,225,224,1,1,544,1,32,1,1,1],"FLAG":0,"BASE":18}
Nova Digital Basic 1 MS101 {"NAME":"NovaDigBasic1","GPIO":[0,1,0,1,320,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18}
PPA Contatto Wi-Fi {"NAME":"PPA Contatto","GPIO":[0,0,32,0,224,162,0,0,288,225,0,0,0,0],"FLAG":0,"BASE":18}
PS-1604 16A {"NAME":"PS-1604 16A","GPIO":[32,1,1,1,1,0,0,0,224,320,1,0,0,0],"FLAG":0,"BASE":1}
@@ -2625,6 +2669,7 @@ Shelly Plus i4 {"NAME":"Shelly Plus i4","GPIO":[0,0,0,0,0,0,0,0,19
Sinilink USB {"NAME":"XY-WFUSB","GPIO":[1,1,0,1,32,224,0,0,0,0,320,0,544,0],"FLAG":0,"BASE":18}
Smarsecur Smart Switch {"NAME":"ESP-02S","GPIO":[0,0,0,32,0,0,0,0,0,0,224,0,0,0],"FLAG":0,"BASE":18}
Smart Home SS-8839-01 {"NAME":"SS-8839-01","GPIO":[0,1,0,1,224,0,0,0,32,321,0,320,0,0],"FLAG":0,"BASE":18}
+Smart Switch {"NAME":"FL-S124-V1.0","GPIO":[1,1,1,1,32,224,1,1,1,320,1,1,1,1],"FLAG":0,"BASE":18}
Sonoff 4CH (R2) {"NAME":"Sonoff 4CH","GPIO":[32,1,1,1,226,225,33,34,224,320,35,227,0,0],"FLAG":0,"BASE":7}
Sonoff 4CH Pro (R2) {"NAME":"Sonoff 4CH Pro","GPIO":[32,1,1,1,226,225,33,34,224,320,35,227,0,0],"FLAG":0,"BASE":23}
Sonoff 4CHPROR3 {"NAME":"Sonoff 4CHPROR3","GPIO":[32,1,1,1,226,225,33,34,224,320,35,227,0,0],"FLAG":0,"BASE":23}
@@ -2713,6 +2758,8 @@ Deta Double Power Point {"NAME":"DETA 2G GPO","GPIO":[0,0,0,0,544,0,0,0,65,
DETA Outdoor Double Powerpoint {"NAME":"DETA 6294HA","GPIO":[0,0,0,3104,32,288,0,0,33,224,225,0,0,0],"FLAG":0,"BASE":18}
Deta Single Power Point {"NAME":"DETA 1G GPO","GPIO":[0,0,0,3104,64,576,0,0,0,224,0,0,0,0],"FLAG":0,"BASE":18}
Ener-J 13A Twin Wall Sockets with USB {"NAME":"Ener-J 2-Gang ","GPIO":[32,0,0,0,0,224,33,0,225,320,0,0,0,0],"FLAG":0,"BASE":18}
+GHome USB Charger {"NAME":"GHome Smart WO2-1","GPIO":[320,0,0,0,0,257,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18}
+Globe Double Receptacle 15A {"NAME":"Globe 50024","GPIO":[0,0,0,0,320,32,0,0,224,0,0,0,0,0],"FLAG":0,"BASE":18}
Gosund {"NAME":"Gosund WO1","GPIO":[320,0,576,0,2656,2720,0,0,2624,321,225,224,0,4704],"FLAG":0,"BASE":18}
Gosund USB Charger {"NAME":"Gosund WO2","GPIO":[320,0,576,0,0,257,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18}
Hevolta Glasense {"NAME":"Hevolta Socket","GPIO":[0,0,0,0,288,289,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18}
@@ -2743,6 +2790,7 @@ TopGreener Dual USB {"NAME":"TGWF215U2A","GPIO":[0,320,0,32,2720,2656,0
Vigica VGSPK00815 {"NAME":"VIGICA outlet","GPIO":[32,1,1,1,1,225,33,1,224,1,1,1,1,4704],"FLAG":0,"BASE":18}
Virage Labs ViragePlug {"NAME":"ViragePlug","GPIO":[544,0,0,32,320,33,0,0,225,224,320,226,0,0],"FLAG":0,"BASE":18}
Woox Dual {"NAME":"Woox R4053","GPIO":[33,0,0,0,0,224,32,0,225,320,0,0,0,0],"FLAG":0,"BASE":18}
+Xenon {"NAME":"Xenon SM-PM801-K1","GPIO":[0,320,0,32,2720,2656,0,0,2624,288,224,0,0,0],"FLAG":0,"BASE":18}
Xenon 2AC 1USB {"NAME":"Xenon SM-PW801-U1","GPIO":[0,0,0,0,288,32,0,0,224,0,225,0,226,0],"FLAG":0,"BASE":18}
```
@@ -2761,4 +2809,5 @@ Sonoff ZBBridge {"NAME":"Sonoff ZbBridge","GPIO":[320,3552,0,3584,5
Sonoff ZBBridge Pro {"NAME":"Sonoff Zigbee Pro","GPIO":[0,0,576,0,480,0,0,0,0,1,1,5792,0,0,0,3552,0,320,5793,3584,0,640,608,32,0,0,0,0,0,1,0,0,0,0,0,0],"FLAG":0,"BASE":1}
Tube's CC2652P2 Ethernet {"NAME":"Tube ZB CC2652","GPIO":[0,0,0,3840,0,3584,0,0,0,0,0,0,5536,3552,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,3840,5792,0,0,0,0,0,0],"FLAG":0,"BASE":1}
Tube's EFR32 Ethernet {"NAME":"Tube ZB EFR32","GPIO":[0,0,0,3840,0,3552,1,0,0,0,0,0,5536,3584,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,5793,5792,0,0,0,0,0,0],"FLAG":0,"BASE":1}
+TubesZB CC2652P2 Zigbee to PoE Coordinator 2022 {"NAME":"TubesZB CC2652 PoE Coordinator 2022","GPIO":[1,1,8864,1,5793,3584,0,0,5536,5792,8832,8800,3552,0,5600,1,1,1,1,5568,1,1,1,1,0,0,0,0,1,1,32,1,1,1,1,1],"FLAG":0,"BASE":1}
```
diff --git a/boards/esp32-fix.json b/boards/esp32-fix.json
index 90132b94e..a2a9bed87 100644
--- a/boards/esp32-fix.json
+++ b/boards/esp32-fix.json
@@ -4,7 +4,7 @@
"ldscript": "esp32_out.ld"
},
"core": "esp32",
- "extra_flags": "-DARDUINO_ESP32_DEV -DBOARD_HAS_PSRAM -DHAS_PSRAM_FIX -mfix-esp32-psram-cache-issue -mfix-esp32-psram-cache-strategy=memw -DARDUINO_USB_CDC_ON_BOOT=0 -DESP32_4M",
+ "extra_flags": "-DARDUINO_ESP32_DEV -DBOARD_HAS_PSRAM -DHAS_PSRAM_FIX -mfix-esp32-psram-cache-issue -mfix-esp32-psram-cache-strategy=memw -DESP32_4M",
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "dio",
diff --git a/boards/esp32.json b/boards/esp32.json
index 808ba0cd0..1e476569c 100644
--- a/boards/esp32.json
+++ b/boards/esp32.json
@@ -4,7 +4,7 @@
"ldscript": "esp32_out.ld"
},
"core": "esp32",
- "extra_flags": "-DARDUINO_ESP32_DEV -DBOARD_HAS_PSRAM -DARDUINO_USB_CDC_ON_BOOT=0 -DESP32_4M",
+ "extra_flags": "-DARDUINO_ESP32_DEV -DBOARD_HAS_PSRAM -DESP32_4M",
"f_cpu": "160000000L",
"f_flash": "40000000L",
"flash_mode": "dio",
diff --git a/boards/esp32_solo1.json b/boards/esp32_solo1.json
index 85b886a55..3bb85fe05 100644
--- a/boards/esp32_solo1.json
+++ b/boards/esp32_solo1.json
@@ -4,7 +4,7 @@
"ldscript": "esp32_out.ld"
},
"core": "esp32",
- "extra_flags": "-DARDUINO_ESP32_DEV -DBOARD_HAS_PSRAM -DARDUINO_USB_CDC_ON_BOOT=0 -DESP32_4M -DCORE32SOLO1",
+ "extra_flags": "-DARDUINO_ESP32_DEV -DBOARD_HAS_PSRAM -DESP32_4M -DCORE32SOLO1",
"f_cpu": "240000000L",
"f_flash": "40000000L",
"flash_mode": "dio",
diff --git a/boards/esp32c3.json b/boards/esp32c3.json
index 74a740dee..b7f74c3e5 100644
--- a/boards/esp32c3.json
+++ b/boards/esp32c3.json
@@ -4,7 +4,7 @@
"ldscript": "esp32c3_out.ld"
},
"core": "esp32",
- "extra_flags": "-DARDUINO_USB_MODE=1 -DARDUINO_USB_CDC_ON_BOOT=0 -DESP32_4M -DESP32C3",
+ "extra_flags": "-DESP32_4M -DESP32C3",
"f_cpu": "160000000L",
"f_flash": "80000000L",
"flash_mode": "dio",
diff --git a/boards/esp32c3cdc.json b/boards/esp32c3cdc.json
index b29b2ca98..3d280a73b 100644
--- a/boards/esp32c3cdc.json
+++ b/boards/esp32c3cdc.json
@@ -4,7 +4,7 @@
"ldscript": "esp32c3_out.ld"
},
"core": "esp32",
- "extra_flags": "-DARDUINO_USB_MODE=1 -DARDUINO_USB_CDC_ON_BOOT=0 -DESP32_4M -DESP32C3 -DUSE_USB_CDC_CONSOLE",
+ "extra_flags": "-DARDUINO_USB_MODE=1 -DESP32_4M -DESP32C3 -DUSE_USB_CDC_CONSOLE",
"f_cpu": "160000000L",
"f_flash": "80000000L",
"flash_mode": "dio",
diff --git a/boards/esp32s2.json b/boards/esp32s2.json
index e24ffd17d..d13f2a855 100644
--- a/boards/esp32s2.json
+++ b/boards/esp32s2.json
@@ -4,7 +4,7 @@
"ldscript": "esp32s2_out.ld"
},
"core": "esp32",
- "extra_flags": "-DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=0 -DARDUINO_USB_CDC_ON_BOOT=0 -DARDUINO_USB_MSC_ON_BOOT=0 -DARDUINO_USB_DFU_ON_BOOT=0 -DESP32_4M -DESP32S2",
+ "extra_flags": "-DBOARD_HAS_PSRAM -DESP32_4M -DESP32S2",
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "dio",
diff --git a/boards/esp32s2cdc.json b/boards/esp32s2cdc.json
index 03be3a6c0..bdd230d5c 100644
--- a/boards/esp32s2cdc.json
+++ b/boards/esp32s2cdc.json
@@ -4,7 +4,7 @@
"ldscript": "esp32s2_out.ld"
},
"core": "esp32",
- "extra_flags": "-DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=0 -DARDUINO_USB_CDC_ON_BOOT=0 -DARDUINO_USB_MSC_ON_BOOT=0 -DARDUINO_USB_DFU_ON_BOOT=0 -DUSE_USB_CDC_CONSOLE -DESP32_4M -DESP32S2",
+ "extra_flags": "-DBOARD_HAS_PSRAM -DUSE_USB_CDC_CONSOLE -DESP32_4M -DESP32S2",
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "dio",
diff --git a/boards/esp32s3-qio_opi.json b/boards/esp32s3-qio_opi.json
index 003053268..498534e61 100644
--- a/boards/esp32s3-qio_opi.json
+++ b/boards/esp32s3-qio_opi.json
@@ -5,7 +5,7 @@
"memory_type": "qio_opi"
},
"core": "esp32",
- "extra_flags": "-DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=0 -DARDUINO_USB_CDC_ON_BOOT=0 -DARDUINO_USB_MSC_ON_BOOT=0 -DARDUINO_USB_DFU_ON_BOOT=0 -DESP32_4M -DESP32S3",
+ "extra_flags": "-DBOARD_HAS_PSRAM -DESP32_4M -DESP32S3",
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "qio",
diff --git a/boards/esp32s3-qio_qspi.json b/boards/esp32s3-qio_qspi.json
index 64633ab50..cdc6d70ca 100644
--- a/boards/esp32s3-qio_qspi.json
+++ b/boards/esp32s3-qio_qspi.json
@@ -5,7 +5,7 @@
"memory_type": "qio_qspi"
},
"core": "esp32",
- "extra_flags": "-DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=0 -DARDUINO_USB_CDC_ON_BOOT=0 -DARDUINO_USB_MSC_ON_BOOT=0 -DARDUINO_USB_DFU_ON_BOOT=0 -DESP32_4M -DESP32S3",
+ "extra_flags": "-DBOARD_HAS_PSRAM -DESP32_4M -DESP32S3",
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "qio",
diff --git a/boards/esp32s3cdc-qio_opi.json b/boards/esp32s3cdc-qio_opi.json
index f01620ffc..67dae1a6e 100644
--- a/boards/esp32s3cdc-qio_opi.json
+++ b/boards/esp32s3cdc-qio_opi.json
@@ -5,7 +5,7 @@
"memory_type": "qio_opi"
},
"core": "esp32",
- "extra_flags": "-DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DARDUINO_USB_CDC_ON_BOOT=0 -DARDUINO_USB_MSC_ON_BOOT=0 -DARDUINO_USB_DFU_ON_BOOT=0 -DUSE_USB_CDC_CONSOLE -DESP32_4M -DESP32S3",
+ "extra_flags": "-DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_4M -DESP32S3",
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "qio",
diff --git a/boards/esp32s3cdc-qio_qspi.json b/boards/esp32s3cdc-qio_qspi.json
index 349cbe9ce..f37a47bb5 100644
--- a/boards/esp32s3cdc-qio_qspi.json
+++ b/boards/esp32s3cdc-qio_qspi.json
@@ -5,7 +5,7 @@
"memory_type": "qio_qspi"
},
"core": "esp32",
- "extra_flags": "-DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DARDUINO_USB_CDC_ON_BOOT=0 -DARDUINO_USB_MSC_ON_BOOT=0 -DARDUINO_USB_DFU_ON_BOOT=0 -DUSE_USB_CDC_CONSOLE -DESP32_4M -DESP32S3",
+ "extra_flags": "-DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_4M -DESP32S3",
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "qio",
diff --git a/lib/default/TasmotaSerial-3.6.0/src/TasmotaSerial.cpp b/lib/default/TasmotaSerial-3.6.0/src/TasmotaSerial.cpp
index a233422be..18cfee1e0 100644
--- a/lib/default/TasmotaSerial-3.6.0/src/TasmotaSerial.cpp
+++ b/lib/default/TasmotaSerial-3.6.0/src/TasmotaSerial.cpp
@@ -228,7 +228,7 @@ bool TasmotaSerial::begin(uint32_t speed, uint32_t config) {
#ifdef ESP32
if (TSerial == nullptr) { // Allow for dynamic change in baudrate or config
if (freeUart()) { // We prefer UART1 and UART2 and keep UART0 for debugging
-#ifdef ARDUINO_USB_CDC_ON_BOOT
+#if ARDUINO_USB_MODE
TSerial = new HardwareSerial(m_uart);
#else
if (0 == m_uart) {
@@ -239,7 +239,7 @@ bool TasmotaSerial::begin(uint32_t speed, uint32_t config) {
} else {
TSerial = new HardwareSerial(m_uart);
}
-#endif // ARDUINO_USB_CDC_ON_BOOT
+#endif // ARDUINO_USB_MODE
if (serial_buffer_size > 256) { // RX Buffer can't be resized when Serial is already running (HardwareSerial.cpp)
TSerial->setRxBufferSize(serial_buffer_size);
}
@@ -460,6 +460,7 @@ size_t TasmotaSerial::write(uint8_t b) {
size = 1;
}
if (m_tx_enable_pin > -1) {
+ flush(); // Must wait for all data sent
digitalWrite(m_tx_enable_pin, LOW);
}
return size;
diff --git a/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRrecv.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRrecv.cpp
index 95f7c2af9..00bc1f3ab 100644
--- a/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRrecv.cpp
+++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRrecv.cpp
@@ -411,6 +411,10 @@ void IRrecv::pause(void) {
params.rcvstate = kStopState;
params.rawlen = 0;
params.overflow = false;
+#if defined(ESP8266)
+ os_timer_disarm(&timer);
+ detachInterrupt(params.recvpin);
+#endif
#if defined(ESP32)
gpio_intr_disable((gpio_num_t)params.recvpin);
#endif // ESP32
@@ -424,6 +428,10 @@ void IRrecv::resume(void) {
params.rcvstate = kIdleState;
params.rawlen = 0;
params.overflow = false;
+#if defined(ESP8266)
+ os_timer_setfn(&timer, reinterpret_cast(read_timeout),NULL);
+ attachInterrupt(params.recvpin, gpio_intr, CHANGE);
+#endif
#if defined(ESP32)
timerAlarmDisable(timer);
gpio_intr_enable((gpio_num_t)params.recvpin);
diff --git a/lib/lib_basic/TasmotaModbus-3.6.0/src/TasmotaModbus.cpp b/lib/lib_basic/TasmotaModbus-3.6.0/src/TasmotaModbus.cpp
index 4319c5d8a..e9ab03ffa 100644
--- a/lib/lib_basic/TasmotaModbus-3.6.0/src/TasmotaModbus.cpp
+++ b/lib/lib_basic/TasmotaModbus-3.6.0/src/TasmotaModbus.cpp
@@ -171,6 +171,7 @@ uint8_t TasmotaModbus::Send(uint8_t device_address, uint8_t function_code, uint1
write(frame, framepointer);
#ifdef TASMOTA_MODBUS_TX_ENABLE
if (mb_tx_enable_pin > -1) {
+ flush(); // Must wait for all data sent
digitalWrite(mb_tx_enable_pin, LOW);
}
#endif // TASMOTA_MODBUS_TX_ENABLE
@@ -203,7 +204,7 @@ uint8_t TasmotaModbus::ReceiveBuffer(uint8_t *buffer, uint8_t register_count, ui
}
}
- timeout = millis() + 10;
+ timeout = millis() + 20;
}
}
diff --git a/lib/lib_display/Epaper_29-gemu-1.0/epd2in9.cpp b/lib/lib_display/Epaper_29-gemu-1.0/epd2in9.cpp
index 9f6fe4f74..32d0f2ad6 100644
--- a/lib/lib_display/Epaper_29-gemu-1.0/epd2in9.cpp
+++ b/lib/lib_display/Epaper_29-gemu-1.0/epd2in9.cpp
@@ -26,13 +26,15 @@
#include
#include "epd2in9.h"
+#include "tasmota_options.h"
-
+#ifndef EPD_29_V1
#define EPD_29_V2
+#endif
+
//#define BUSY_PIN 16
-
Epd::Epd(int16_t width, int16_t height) :
Paint(width,height) {
}
@@ -84,7 +86,6 @@ void Epd::DisplayInit(int8_t p,int8_t size,int8_t rot,int8_t font) {
setTextColor(WHITE,BLACK);
setCursor(0,0);
fillScreen(BLACK);
-
disp_bpp = 1;
}
@@ -99,7 +100,6 @@ void Epd::Begin(int16_t cs,int16_t mosi,int16_t sclk, int16_t rst, int16_t busy)
#endif
}
-
void Epd::Init(int8_t p) {
if (p == DISPLAY_INIT_PARTIAL) {
Init(lut_partial_update);
@@ -116,20 +116,14 @@ void Epd::Init(int8_t p) {
}
}
-
int Epd::Init(const unsigned char* lut) {
- /* this calls the peripheral hardware interface, see epdif */
- /*if (IfInit() != 0) {
- return -1;
- }*/
-/*
- cs_pin=pin[GPIO_SSPI_CS];
- mosi_pin=pin[GPIO_SSPI_MOSI];
- sclk_pin=pin[GPIO_SSPI_SCLK];
-*/
- if (framebuffer) {
- // free(framebuffer);
+ if (iniz) {
+#ifndef EPD_29_V2
+ this->lut = lut;
+ SetLut(this->lut);
+#endif
+ return 0;
}
framebuffer = (uint8_t*)malloc(EPD_WIDTH * EPD_HEIGHT / 8);
if (!framebuffer) return -1;
@@ -204,6 +198,7 @@ int Epd::Init(const unsigned char* lut) {
SetLut(this->lut);
#endif
/* EPD hardware init end */
+ iniz = 1;
return 0;
}
@@ -250,7 +245,9 @@ void Epd::Reset(void) {
digitalWrite(rst_pin, HIGH);
delay(200);
} else {
+#ifdef EPD_29_V2
SendCommand(0x12);
+#endif
}
}
diff --git a/lib/lib_display/Epaper_29-gemu-1.0/epd2in9.h b/lib/lib_display/Epaper_29-gemu-1.0/epd2in9.h
index 1fdba92fd..9935f4f9d 100644
--- a/lib/lib_display/Epaper_29-gemu-1.0/epd2in9.h
+++ b/lib/lib_display/Epaper_29-gemu-1.0/epd2in9.h
@@ -109,6 +109,7 @@ private:
unsigned int mosi_pin;
unsigned int sclk_pin;
unsigned char mode;
+ uint8_t iniz = 0;
void delay_busy(uint32_t wait);
void SetLut(const unsigned char* lut);
void SetMemoryArea(int x_start, int y_start, int x_end, int y_end);
diff --git a/lib/lib_div/LibTeleinfo/README.md b/lib/lib_div/LibTeleinfo/README.md
index 11a90ac2b..a83d34569 100644
--- a/lib/lib_div/LibTeleinfo/README.md
+++ b/lib/lib_div/LibTeleinfo/README.md
@@ -1,14 +1,12 @@
-Teleinfo (Aka TIC) Universal Library
-====================================
+# Teleinfo (Aka TIC) Universal Library
This is a generic Teleinfo French Meter Measure Library, it can be used on Arduino like device and also such as Spark Core, Particle, ESP8266, Raspberry PI or anywhere you can do Cpp code ...
-You can see Teleinformation official french datasheet [there][1]
+You can see Teleinformation official french datasheet [there][1] and this one is for [Linky][3].
-Since this is really dedicated to French energy measuring system, I will continue in French
+Since this is really dedicated to French energy measuring system, I will continue in French.
-Installation
-============
+# Installation
Copier le contenu de ce dossier (download zip) dans le dossier libraries de votre environnement Arduino Vous devriez avoir maintenant quelque chose comme `your_sketchbook_folder/libraries/LibTeleinfo` et ce dossier doit contentir les fichiers .cpp et .h ainsi que le sous dossier `examples`.
@@ -17,14 +15,12 @@ Pour trouver votre dossier de sketchbook, dans l'environnement IDE, allez dans F
allez voir ce [tutorial][2] sur les librairies Arduino si beoin.
-Documentation
-=============
+# Documentation
J'ai écrit un article [dédié][10] sur cette librairie, vous pouvez aussi voir les [catégories][6] associées à la téléinfo sur mon [blog][7].
Pour les commentaires et le support vous pouvez allez sur le [forum][8] dédié ou dans la [communauté][9]
-Sketch d'exemples
-=================
+# Sketch d'exemples
- [Arduino_Softserial_Etiquette][3] Affiche des informations de téléinformation reçue étiquette par étiquette
- [Arduino_Softserial_Blink][11] Affiche des informations de téléinformation reçue trame par trame avec clignotement LED court/long si les données ont été modifiés
@@ -32,23 +28,32 @@ Sketch d'exemples
- [Raspberry_JSON][12] Retourne les informations de téléinformation au format JSON sur stdout.
- [Wifinfo][5] ESP8266, ESP32 Wifi Teleinformation, Web + Rest + bonus, version en cours de développement, à venir mais un article [dédié][13] est déjà présent sur mon blog
- [ESP32][14] ESP32 Basic test pour WifInfo32 nouveau nom Denky :-)
+- [ESP32_Passthru][14] ESP32 PassThru Basic test pour Denky D4, affiche les données et les stats de la téléinfo dans la console série
+- [ESP8266_DataChanged][15] ESP8266 Surveille et affiche les données changées entre 2 trames, clignote la LED RGB en fonction
+- [Teleinfo_DenkyD4][16] ESP32 Denky D4 Basic test et stats pour le nouveau Denky D4 basé sur l'ESP32-Pico-V3-02
+- [Teleinfo_Stats][18] ESP32 Programme de test et statistiques pour la qualité de réception
+
+# Pourquoi
-Pourquoi
-========
- J'utilise la téléinfo dans plusieurs de mes programmes et j'en avais marre de devoir faire des copier/coller de code constament, j'ai donc décidé de faire une librairie commune que j'utilise sans me poser de question
-License
-=======
+# License
+
Cette oeuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.
Si vous êtes une entreprise et que vous souhaitez participer car vous utilisez cette librairie dans du hardware (box, automate, ...), vous pouvez toujours m'envoyer un exemplaire de votre fabrication, c'est toujours sympa de voir ce qui est fait avec ce code ;-)
-Divers
-======
+# Addon
+
+Ajout des compteurs d'erreurs, et du traitement du caracteres EOT d'interruption de trames
+
+# Divers
+
Vous pouvez aller voir les nouveautés et autres projets sur [blog][7]
-[1]: http://www.erdf.fr/sites/default/files/ERDF-NOI-CPT_02E.pdf
+[1]: https://www.enedis.fr/sites/default/files/Enedis-NOI-CPT_02E.pdf
[2]: http://learn.adafruit.com/arduino-tips-tricks-and-techniques/arduino-libraries
+[3]: https://www.enedis.fr/sites/default/files/Enedis-NOI-CPT_54E.pdf
[6]: https://hallard.me/category/tinfo/
[7]: https://hallard.me
[8]: https://community.hallard.me/category/7
@@ -59,7 +64,12 @@ Vous pouvez aller voir les nouveautés et autres projets sur [blog][7]
[4]: https://github.com/hallard/LibTeleinfo/blob/master/examples/Arduino_Softserial_JSON/Arduino_Softserial_JSON.ino
[5]: https://github.com/hallard/LibTeleinfo/tree/master/examples/Wifinfo/Wifinfo.ino
[11]: https://github.com/hallard/LibTeleinfo/blob/master/examples/Arduino_Softserial/Arduino_Softserial_Blink.ino
-[12]: https://github.com/hallard/LibTeleinfo/blob/master/examples/Raspberry_JSON/Raspberry_JSON.ino
+[12]: https://github.com/hallard/LibTeleinfo/blob/master/examples/Raspberry_JSON/raspjson.cpp
[13]: https://hallard.me/wifiinfo/
[14]: https://github.com/hallard/LibTeleinfo/blob/master/examples/ESP32/ESP32.ino
+[15]: https://github.com/hallard/LibTeleinfo/blob/master/examples/ESP8266_DataChanged/ESP8266_DataChanged.ino
+[16]: https://github.com/hallard/LibTeleinfo/blob/master/examples/Teleinfo_DenkyD4/Teleinfo_DenkyD4.ino
+[17]: https://github.com/hallard/LibTeleinfo/blob/master/examples/ESP32_Passthru/ESP32_Passthru.ino
+[18]: https://github.com/hallard/LibTeleinfo/blob/master/examples/Teleinfo_Stats/Teleinfo_Stats.ino
+
diff --git a/lib/lib_div/LibTeleinfo/library.json b/lib/lib_div/LibTeleinfo/library.json
index ea6932a9b..84593d3a6 100644
--- a/lib/lib_div/LibTeleinfo/library.json
+++ b/lib/lib_div/LibTeleinfo/library.json
@@ -1,6 +1,6 @@
{
"name": "LibTeleinfo",
- "version": "1.1.3",
+ "version": "1.1.5",
"keywords": "teleinfo, french, meter, power, erdf, linky, tic",
"description": "Decoder for Teleinfo (aka TIC) from French smart power meters",
"repository":
diff --git a/lib/lib_div/LibTeleinfo/library.properties b/lib/lib_div/LibTeleinfo/library.properties
index ad488ca08..562d96c62 100644
--- a/lib/lib_div/LibTeleinfo/library.properties
+++ b/lib/lib_div/LibTeleinfo/library.properties
@@ -1,5 +1,5 @@
name=LibTeleinfo
-version=1.1.3
+version=1.1.5
author=Charles-Henri Hallard
maintainer=Charles-Henri Hallard
sentence=Decoder for Teleinfo (aka TIC) from French smart power meters
diff --git a/lib/lib_div/LibTeleinfo/src/LibTeleinfo.cpp b/lib/lib_div/LibTeleinfo/src/LibTeleinfo.cpp
index cdaa8aa9e..92bd7e359 100644
--- a/lib/lib_div/LibTeleinfo/src/LibTeleinfo.cpp
+++ b/lib/lib_div/LibTeleinfo/src/LibTeleinfo.cpp
@@ -50,6 +50,8 @@ TInfo::TInfo()
_fn_data = NULL;
_fn_new_frame = NULL;
_fn_updated_frame = NULL;
+
+ clearStats();
}
/* ======================================================================
@@ -78,6 +80,22 @@ void TInfo::init(_Mode_e mode)
}
}
+/* ======================================================================
+Function: clearStats
+Purpose : clear stats counters
+Input : -
+Output : -
+Comments: -
+====================================================================== */
+void TInfo::clearStats()
+{
+ // reset Frame counters stats
+ _checksumerror =0;
+ _framesizeerror=0;
+ _frameformaterror=0;
+ _frameinterrupted=0;
+}
+
/* ======================================================================
Function: attachADPS
Purpose : attach a callback when we detected a ADPS on any phase
@@ -226,8 +244,11 @@ ValueList * TInfo::valueAdd(char * name, char * value, uint8_t checksum, uint8_t
ValueList *parNode = NULL ;
uint32_t ts = 0;
+ // Time stamped field?
if (horodate && *horodate) {
ts = horodate2Timestamp(horodate);
+ // We don't check horodate (not used) on storage so re calculate checksum without this one
+ checksum = calcChecksum(name,value) ;
}
// Loop thru the node
@@ -257,7 +278,6 @@ ValueList * TInfo::valueAdd(char * name, char * value, uint8_t checksum, uint8_t
// Copy it
strlcpy(me->value, value , lgvalue + 1 );
me->checksum = checksum ;
-
// That's all
return (me);
} else {
@@ -279,19 +299,12 @@ ValueList * TInfo::valueAdd(char * name, char * value, uint8_t checksum, uint8_t
// Our linked list structure sizeof(ValueList)
// + Name + '\0'
// + Value + '\0'
- size_t size ;
- #if defined (ESP8266) || defined (ESP32)
- lgname = ESP_allocAlign(lgname+1); // Align name buffer
- lgvalue = ESP_allocAlign(lgvalue+1); // Align value buffer
- // Align the whole structure
- size = ESP_allocAlign( sizeof(ValueList) + lgname + lgvalue ) ;
- #else
- size = sizeof(ValueList) + lgname + 1 + lgvalue + 1 ;
- #endif
+ size_t size = sizeof(ValueList) + lgname + 1 + lgvalue + 1 ;
// Create new node with size to store strings
- if ((newNode = (ValueList *) malloc(size) ) == NULL)
+ if ((newNode = (ValueList *) malloc(size) ) == NULL) {
return ( (ValueList *) NULL );
+ }
// get our buffer Safe
memset(newNode, 0, size);
@@ -456,10 +469,13 @@ char * TInfo::valueGet(char * name, char * value)
if (lgname==strlen(me->name) && strcmp(me->name, name)==0) {
// this one has a value ?
if (me->value) {
- // copy to dest buffer
- uint8_t lgvalue = strlen(me->value);
- strlcpy(value, me->value , lgvalue + 1 );
- return ( value );
+ // Check back checksum
+ if (me->checksum == calcChecksum(me->name, me->value)) {
+ // copy to dest buffer
+ uint8_t lgvalue = strlen(me->value);
+ strlcpy(value, me->value , lgvalue + 1 );
+ return ( value );
+ }
}
}
}
@@ -494,10 +510,13 @@ char * TInfo::valueGet_P(const char * name, char * value)
if (lgname==strlen(me->name) && strcmp_P(me->name, name)==0) {
// this one has a value ?
if (me->value) {
- // copy to dest buffer
- uint8_t lgvalue = strlen(me->value);
- strlcpy(value, me->value , lgvalue + 1 );
- return ( value );
+ // Check back checksum
+ if (me->checksum == calcChecksum(me->name, me->value)) {
+ // copy to dest buffer
+ uint8_t lgvalue = strlen(me->value);
+ strlcpy(value, me->value , lgvalue + 1 );
+ return ( value );
+ }
}
}
}
@@ -529,6 +548,7 @@ uint8_t TInfo::valuesDump(void)
// Get our linked list
ValueList * me = &_valueslist;
uint8_t index = 0;
+ uint8_t checksum=0;
// Got one ?
if (me) {
@@ -541,7 +561,7 @@ uint8_t TInfo::valuesDump(void)
TI_Debug(index) ;
TI_Debug(F(") ")) ;
- if (me->name) {
+ if (me->name ) {
TI_Debug(me->name) ;
} else {
TI_Debug(F("NULL")) ;
@@ -555,9 +575,17 @@ uint8_t TInfo::valuesDump(void)
TI_Debug(F("NULL")) ;
}
+ if (me->name && me->value && *me->name && *me->value) {
+ checksum = calcChecksum(me->name, me->value);
+ }
+
TI_Debug(F(" '")) ;
TI_Debug(me->checksum) ;
- TI_Debug(F("' "));
+ if (me->checksum != checksum ) {
+ TI_Debug(F("'!Err "));
+ } else {
+ TI_Debug(F("' "));
+ }
// Flags management
if ( me->flags) {
@@ -663,22 +691,51 @@ LF etiquette HT donnee HT Chk CR
====================================================================== */
unsigned char TInfo::calcChecksum(char *etiquette, char *valeur, char * horodate)
{
+ char c;
uint8_t sum = (_mode == TINFO_MODE_HISTORIQUE) ? _separator : (2 * _separator); // Somme des codes ASCII du message + 2 separateurs
// avoid dead loop, always check all is fine
if (etiquette && valeur) {
// this will not hurt and may save our life ;-)
if (strlen(etiquette) && strlen(valeur)) {
- while (*etiquette)
- sum += *etiquette++ ;
+ while (*etiquette) {
+ c =*etiquette++;
+ // Add another validity check since checksum may not be sufficient
+ if ( (c>='A' && c<='Z') || (c>='0' && c<='9') || c=='-' || c=='+') {
+ sum += c ;
+ } else {
+ return 0;
+ }
+ }
- while(*valeur)
- sum += *valeur++ ;
+ while(*valeur) {
+ c = *valeur++ ;
+ // Add another validity check since checksum may not be sufficient (space authorized in Standard mode)
+ if ( (c>='A' && c<='Z') || (c>='0' && c<='9') || c==' ' || c=='.' || c=='-' || c=='+' || c=='/') {
+ sum += c ;
+ } else {
+ return 0;
+ }
+ }
if (horodate) {
sum += _separator;
- while (*horodate)
- sum += *horodate++ ;
+ c = *horodate++;
+ // Add another validity check starting season [E]té (Summer) or [H]iver (Winter)
+ if ( c=='E' || c=='H' || c=='e' || c=='h') {
+ sum += c ;
+ while (*horodate) {
+ c = *horodate++ ;
+ // Add another validity check for horodate digits
+ if ( c>='0' && c<='9') {
+ sum += c ;
+ } else {
+ return 0;
+ }
+ }
+ } else {
+ return 0;
+ }
}
return ( (sum & 0x3f) + ' ' ) ;
@@ -798,6 +855,7 @@ ValueList * TInfo::checkLine(char * pline)
// 2 Label + Space + 1 etiquette + space + checksum + \r
if ( len < 7 || len >= TINFO_BUFSIZE) {
//AddLog(3, PSTR("LibTeleinfo: Error len < 7 || len >= TINFO_BUFSIZE"));
+ _framesizeerror++;
return NULL;
}
@@ -876,7 +934,8 @@ ValueList * TInfo::checkLine(char * pline)
// Always check to avoid bad behavior
if(strlen(ptok) && strlen(pvalue)) {
// Is checksum is OK
- char calc_checksum = calcChecksum(ptok,pvalue,pts);
+ char calc_checksum = calcChecksum(ptok,pvalue,pts);
+
if ( calc_checksum == checksum) {
// In case we need to do things on specific labels
customLabel(ptok, pvalue, &flags);
@@ -904,9 +963,18 @@ ValueList * TInfo::checkLine(char * pline)
}
else
{
- AddLog(1, PSTR("LibTeleinfo::checkLine Err checksum 0x%02X != 0x%02X"), calc_checksum, checksum);
+ _checksumerror++;
+ AddLog(1, PSTR("LibTeleinfo::checkLine Err checksum 0x%02X != 0x%02X (total errors=%d)"), calc_checksum, checksum, _checksumerror);
}
}
+ }
+ else
+ {
+ // Specific field not formated has others, don't set as an error
+ if ( strcmp(ptok, "DATE") ) {
+ _frameformaterror++;
+ AddLog(1, PSTR("LibTeleinfo::checkLine frame format error total=%d"), _frameformaterror);
+ }
}
}
// Next char
@@ -948,7 +1016,17 @@ _State_e TInfo::process(char c)
_state = TINFO_WAIT_ETX;
}
break;
-
+
+ // frame interruption
+ case TINFO_EOT:
+ //AddLog(3, PSTR("LibTeleinfo: case TINFO_EOT >>>>>>>>>>>>>>>>>>"));
+ // discard incomplete frame
+ // Clear buffer, begin to store in it
+ clearBuffer();
+ _frameinterrupted++;
+ _state = TINFO_WAIT_STX;
+ break;
+
// End of transmission ?
case TINFO_ETX:
//AddLog(3, PSTR("LibTeleinfo: case TINFO_ETX >>>>>>>>>>>>>>>>>>"));
@@ -1002,8 +1080,12 @@ _State_e TInfo::process(char c)
// Are we ready to process ?
if (_state == TINFO_READY) {
// Store data recceived (we'll need it)
- if ( _recv_idx < TINFO_BUFSIZE)
+ if ( _recv_idx < TINFO_BUFSIZE) {
_recv_buff[_recv_idx++]=c;
+ } else {
+ // group is too big (some ETX missing)
+ _framesizeerror++;
+ }
// clear the end of buffer (paranoia inside)
memset(&_recv_buff[_recv_idx], 0, TINFO_BUFSIZE-_recv_idx);
diff --git a/lib/lib_div/LibTeleinfo/src/LibTeleinfo.h b/lib/lib_div/LibTeleinfo/src/LibTeleinfo.h
index 3c947b5ca..8ac4ad034 100644
--- a/lib/lib_div/LibTeleinfo/src/LibTeleinfo.h
+++ b/lib/lib_div/LibTeleinfo/src/LibTeleinfo.h
@@ -74,14 +74,6 @@ void AddLog(uint32_t loglevel, PGM_P formatP, ...);
#define TI_Debugflush {}
#endif
-// For 4 bytes Aligment boundaries
-#if defined (ESP8266) || defined (ESP32)
-#define ESP_allocAlign(size) ((size + 3) & ~((size_t) 3))
-#endif
-
-#pragma pack(push) // push current alignment to stack
-#pragma pack(1) // set alignment to 1 byte boundary
-
// Linked list structure containing all values received
typedef struct _ValueList ValueList;
struct _ValueList
@@ -94,8 +86,6 @@ struct _ValueList
char * value; // value
};
-#pragma pack(pop)
-
// Library state machine
enum _Mode_e {
TINFO_MODE_HISTORIQUE, // Legacy mode (1200)
@@ -125,6 +115,7 @@ enum _State_e {
// Teleinfo start and end of frame characters
#define TINFO_STX 0x02
#define TINFO_ETX 0x03
+#define TINFO_EOT 0x04 // frame interrupt (End Of Transmission)
#define TINFO_HT 0x09
#define TINFO_SGR '\n' // start of group
#define TINFO_EGR '\r' // End of group
@@ -151,7 +142,12 @@ class TInfo
char * valueGet_P(const char * name, char * value);
int labelCount();
boolean listDelete();
+ void clearStats();
unsigned char calcChecksum(char *etiquette, char *valeur, char *horodate=NULL) ;
+ uint32_t getChecksumErrorCount() { return _checksumerror; };
+ uint32_t getFrameSizeErrorCount() { return _framesizeerror; };
+ uint32_t getFrameFormatErrorCount() { return _frameformaterror; };
+ uint32_t getFrameInterruptedCount() { return _frameinterrupted; };
private:
void clearBuffer();
@@ -169,6 +165,13 @@ class TInfo
char _separator;
uint8_t _recv_idx; // index in receive buffer
boolean _frame_updated; // Data on the frame has been updated
+
+ // Frame counters stats
+ uint32_t _checksumerror;
+ uint32_t _framesizeerror;
+ uint32_t _frameformaterror;
+ uint32_t _frameinterrupted;
+
void (*_fn_ADPS)(uint8_t phase, char * label);
void (*_fn_data)(ValueList * valueslist, uint8_t state);
void (*_fn_new_frame)(ValueList * valueslist);
diff --git a/lib/lib_div/ams/GcmParser.cpp b/lib/lib_div/ams/GcmParser.cpp
index cbdf130fe..12ac94a2b 100644
--- a/lib/lib_div/ams/GcmParser.cpp
+++ b/lib/lib_div/ams/GcmParser.cpp
@@ -51,6 +51,10 @@ int8_t GCMParser::parse(uint8_t *d, DataParserContext &ctx) {
ptr += 3;
headersize += 3;
} else if(((*ptr) & 0xFF) == 0x4f) {
+ // ???????? single frame did only decode with this compare
+ ptr++;
+ headersize++;
+ } else if(((*ptr) & 0xFF) == 0x5e) {
// ???????? single frame did only decode with this compare
ptr++;
headersize++;
diff --git a/lib/lib_div/rfid-1.4.7/src/MFRC522.cpp b/lib/lib_div/rfid-1.4.7/src/MFRC522.cpp
index a4f70e6dd..fbae40085 100644
--- a/lib/lib_div/rfid-1.4.7/src/MFRC522.cpp
+++ b/lib/lib_div/rfid-1.4.7/src/MFRC522.cpp
@@ -130,7 +130,7 @@ void MFRC522::PCD_ReadRegister( PCD_Register reg, ///< The register to read from
*/
void MFRC522::PCD_SetRegisterBitMask( PCD_Register reg, ///< The register to update. One of the PCD_Register enums.
byte mask ///< The bits to set.
- ) {
+ ) {
byte tmp;
tmp = PCD_ReadRegister(reg);
PCD_WriteRegister(reg, tmp | mask); // set bit mask
@@ -150,7 +150,7 @@ void MFRC522::PCD_ClearRegisterBitMask( PCD_Register reg, ///< The register to u
/**
* Use the CRC coprocessor in the MFRC522 to calculate a CRC_A.
- *
+ *
* @return STATUS_OK on success, STATUS_??? otherwise.
*/
MFRC522::StatusCode MFRC522::PCD_CalculateCRC( byte *data, ///< In: Pointer to the data to transfer to the FIFO for CRC calculation.
@@ -162,7 +162,7 @@ MFRC522::StatusCode MFRC522::PCD_CalculateCRC( byte *data, ///< In: Pointer to
PCD_WriteRegister(FIFOLevelReg, 0x80); // FlushBuffer = 1, FIFO initialization
PCD_WriteRegister(FIFODataReg, length, data); // Write data to the FIFO
PCD_WriteRegister(CommandReg, PCD_CalcCRC); // Start the calculation
-
+
// Wait for the CRC calculation to complete. Each iteration of the while-loop takes 17.73μs.
// TODO check/modify for other architectures than Arduino Uno 16bit
@@ -196,12 +196,12 @@ void MFRC522::PCD_Init() {
// Set the chipSelectPin as digital output, do not select the slave yet
pinMode(_chipSelectPin, OUTPUT);
digitalWrite(_chipSelectPin, HIGH);
-
+
// If a valid pin number has been set, pull device out of power down / reset state.
if (_resetPowerDownPin != UNUSED_PIN) {
// First set the resetPowerDownPin as digital input, to check the MFRC522 power down mode.
pinMode(_resetPowerDownPin, INPUT);
-
+
if (digitalRead(_resetPowerDownPin) == LOW) { // The MFRC522 chip is in power down mode.
pinMode(_resetPowerDownPin, OUTPUT); // Now set the resetPowerDownPin as digital output.
digitalWrite(_resetPowerDownPin, LOW); // Make sure we have a clean LOW state.
@@ -216,7 +216,7 @@ void MFRC522::PCD_Init() {
if (!hardReset) { // Perform a soft reset if we haven't triggered a hard reset above.
PCD_Reset();
}
-
+
// Reset baud rates
PCD_WriteRegister(TxModeReg, 0x00);
PCD_WriteRegister(RxModeReg, 0x00);
@@ -230,7 +230,7 @@ void MFRC522::PCD_Init() {
PCD_WriteRegister(TPrescalerReg, 0xA9); // TPreScaler = TModeReg[3..0]:TPrescalerReg, ie 0x0A9 = 169 => f_timer=40kHz, ie a timer period of 25μs.
PCD_WriteRegister(TReloadRegH, 0x03); // Reload timer with 0x3E8 = 1000, ie 25ms before timeout.
PCD_WriteRegister(TReloadRegL, 0xE8);
-
+
PCD_WriteRegister(TxASKReg, 0x40); // Default 0x00. Force a 100 % ASK modulation independent of the ModGsPReg register setting
PCD_WriteRegister(ModeReg, 0x3D); // Default 0x3F. Set the preset value for the CRC coprocessor for the CalcCRC command to 0x6363 (ISO 14443-3 part 6.2.4)
PCD_AntennaOn(); // Enable the antenna driver pins TX1 and TX2 (they were disabled by the reset)
@@ -251,7 +251,7 @@ void MFRC522::PCD_Init( byte chipSelectPin, ///< Arduino pin connected to MFRC5
byte resetPowerDownPin ///< Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low)
) {
_chipSelectPin = chipSelectPin;
- _resetPowerDownPin = resetPowerDownPin;
+ _resetPowerDownPin = resetPowerDownPin;
// Set the chipSelectPin as digital output, do not select the slave yet
PCD_Init();
} // End PCD_Init()
@@ -262,7 +262,7 @@ void MFRC522::PCD_Init( byte chipSelectPin, ///< Arduino pin connected to MFRC5
void MFRC522::PCD_Reset() {
PCD_WriteRegister(CommandReg, PCD_SoftReset); // Issue the SoftReset command.
// The datasheet does not mention how long the SoftRest command takes to complete.
- // But the MFRC522 might have been in soft power-down mode (triggered by bit 4 of CommandReg)
+ // But the MFRC522 might have been in soft power-down mode (triggered by bit 4 of CommandReg)
// Section 8.8.2 in the datasheet says the oscillator start-up time is the start up time of the crystal + 37,74μs. Let us be generous: 50ms.
uint8_t count = 0;
do {
@@ -293,7 +293,7 @@ void MFRC522::PCD_AntennaOff() {
* Get the current MFRC522 Receiver Gain (RxGain[2:0]) value.
* See 9.3.3.6 / table 98 in http://www.nxp.com/documents/data_sheet/MFRC522.pdf
* NOTE: Return value scrubbed with (0x07<<4)=01110000b as RCFfgReg may use reserved bits.
- *
+ *
* @return Value of the RxGain, scrubbed to the 3 bits used.
*/
byte MFRC522::PCD_GetAntennaGain() {
@@ -315,29 +315,29 @@ void MFRC522::PCD_SetAntennaGain(byte mask) {
/**
* Performs a self-test of the MFRC522
* See 16.1.1 in http://www.nxp.com/documents/data_sheet/MFRC522.pdf
- *
+ *
* @return Whether or not the test passed. Or false if no firmware reference is available.
*/
bool MFRC522::PCD_PerformSelfTest() {
// This follows directly the steps outlined in 16.1.1
// 1. Perform a soft reset.
PCD_Reset();
-
+
// 2. Clear the internal buffer by writing 25 bytes of 00h
byte ZEROES[25] = {0x00};
PCD_WriteRegister(FIFOLevelReg, 0x80); // flush the FIFO buffer
PCD_WriteRegister(FIFODataReg, 25, ZEROES); // write 25 bytes of 00h to FIFO
PCD_WriteRegister(CommandReg, PCD_Mem); // transfer to internal buffer
-
+
// 3. Enable self-test
PCD_WriteRegister(AutoTestReg, 0x09);
-
+
// 4. Write 00h to FIFO buffer
PCD_WriteRegister(FIFODataReg, 0x00);
-
+
// 5. Start self-test by issuing the CalcCRC command
PCD_WriteRegister(CommandReg, PCD_CalcCRC);
-
+
// 6. Wait for self-test to complete
byte n;
for (uint8_t i = 0; i < 0xFF; i++) {
@@ -354,18 +354,18 @@ bool MFRC522::PCD_PerformSelfTest() {
}
}
PCD_WriteRegister(CommandReg, PCD_Idle); // Stop calculating CRC for new content in the FIFO.
-
+
// 7. Read out resulting 64 bytes from the FIFO buffer.
byte result[64];
PCD_ReadRegister(FIFODataReg, 64, result, 0);
-
+
// Auto self-test done
// Reset AutoTestReg register to be 0 again. Required for normal operation.
PCD_WriteRegister(AutoTestReg, 0x00);
-
+
// Determine firmware version (see section 9.3.4.8 in spec)
byte version = PCD_ReadRegister(VersionReg);
-
+
// Pick the appropriate reference values
const byte *reference;
switch (version) {
@@ -384,14 +384,14 @@ bool MFRC522::PCD_PerformSelfTest() {
default: // Unknown version
return false; // abort test
}
-
+
// Verify that the results match up to our expectations
for (uint8_t i = 0; i < 64; i++) {
if (result[i] != pgm_read_byte(&(reference[i]))) {
return false;
}
}
-
+
// Test passed; all is good.
return true;
} // End PCD_PerformSelfTest()
@@ -405,22 +405,22 @@ bool MFRC522::PCD_PerformSelfTest() {
//For more details about power control, refer to the datasheet - page 33 (8.6)
void MFRC522::PCD_SoftPowerDown(){//Note : Only soft power down mode is available throught software
- byte val = PCD_ReadRegister(CommandReg); // Read state of the command register
- val |= (1<<4);// set PowerDown bit ( bit 4 ) to 1
+ byte val = PCD_ReadRegister(CommandReg); // Read state of the command register
+ val |= (1<<4);// set PowerDown bit ( bit 4 ) to 1
PCD_WriteRegister(CommandReg, val);//write new value to the command register
}
void MFRC522::PCD_SoftPowerUp(){
- byte val = PCD_ReadRegister(CommandReg); // Read state of the command register
- val &= ~(1<<4);// set PowerDown bit ( bit 4 ) to 0
+ byte val = PCD_ReadRegister(CommandReg); // Read state of the command register
+ val &= ~(1<<4);// set PowerDown bit ( bit 4 ) to 0
PCD_WriteRegister(CommandReg, val);//write new value to the command register
- // wait until PowerDown bit is cleared (this indicates end of wake up procedure)
- const uint32_t timeout = (uint32_t)millis() + 500;// create timer for timeout (just in case)
-
- while(millis()<=timeout){ // set timeout to 500 ms
+ // wait until PowerDown bit is cleared (this indicates end of wake up procedure)
+ const uint32_t timeout = (uint32_t)millis() + 500;// create timer for timeout (just in case)
+
+ while(millis()<=timeout){ // set timeout to 500 ms
val = PCD_ReadRegister(CommandReg);// Read state of the command register
- if(!(val & (1<<4))){ // if powerdown bit is 0
- break;// wake up procedure is finished
+ if(!(val & (1<<4))){ // if powerdown bit is 0
+ break;// wake up procedure is finished
}
}
}
@@ -432,7 +432,7 @@ void MFRC522::PCD_SoftPowerUp(){
/**
* Executes the Transceive command.
* CRC validation can only be done if backData and backLen are specified.
- *
+ *
* @return STATUS_OK on success, STATUS_??? otherwise.
*/
MFRC522::StatusCode MFRC522::PCD_TransceiveData( byte *sendData, ///< Pointer to the data to transfer to the FIFO.
@@ -466,7 +466,7 @@ MFRC522::StatusCode MFRC522::PCD_CommunicateWithPICC( byte command, ///< The co
// Prepare values for BitFramingReg
byte txLastBits = validBits ? *validBits : 0;
byte bitFraming = (rxAlign << 4) + txLastBits; // RxAlign = BitFramingReg[6..4]. TxLastBits = BitFramingReg[2..0]
-
+
PCD_WriteRegister(CommandReg, PCD_Idle); // Stop any active command.
PCD_WriteRegister(ComIrqReg, 0x7F); // Clear all seven interrupt request bits
PCD_WriteRegister(FIFOLevelReg, 0x80); // FlushBuffer = 1, FIFO initialization
@@ -476,7 +476,7 @@ MFRC522::StatusCode MFRC522::PCD_CommunicateWithPICC( byte command, ///< The co
if (command == PCD_Transceive) {
PCD_SetRegisterBitMask(BitFramingReg, 0x80); // StartSend=1, transmission of data starts
}
-
+
// Wait for the command to complete.
// In PCD_Init() we set the TAuto flag in TModeReg. This means the timer automatically starts when the PCD stops transmitting.
// Each iteration of the do-while-loop takes 17.86μs.
@@ -495,15 +495,15 @@ MFRC522::StatusCode MFRC522::PCD_CommunicateWithPICC( byte command, ///< The co
if (i == 0) {
return STATUS_TIMEOUT;
}
-
+
// Stop now if any errors except collisions were detected.
byte errorRegValue = PCD_ReadRegister(ErrorReg); // ErrorReg[7..0] bits are: WrErr TempErr reserved BufferOvfl CollErr CRCErr ParityErr ProtocolErr
if (errorRegValue & 0x13) { // BufferOvfl ParityErr ProtocolErr
return STATUS_ERROR;
}
-
+
byte _validBits = 0;
-
+
// If the caller wants data back, get it from the MFRC522.
if (backData && backLen) {
byte n = PCD_ReadRegister(FIFOLevelReg); // Number of bytes in the FIFO
@@ -517,12 +517,12 @@ MFRC522::StatusCode MFRC522::PCD_CommunicateWithPICC( byte command, ///< The co
*validBits = _validBits;
}
}
-
+
// Tell about collisions
if (errorRegValue & 0x08) { // CollErr
return STATUS_COLLISION;
}
-
+
// Perform CRC_A validation if requested.
if (backData && backLen && checkCRC) {
// In this case a MIFARE Classic NAK is not OK.
@@ -543,14 +543,14 @@ MFRC522::StatusCode MFRC522::PCD_CommunicateWithPICC( byte command, ///< The co
return STATUS_CRC_WRONG;
}
}
-
+
return STATUS_OK;
} // End PCD_CommunicateWithPICC()
/**
* Transmits a REQuest command, Type A. Invites PICCs in state IDLE to go to READY and prepare for anticollision or selection. 7 bit frame.
* Beware: When two PICCs are in the field at the same time I often get STATUS_TIMEOUT - probably due do bad antenna design.
- *
+ *
* @return STATUS_OK on success, STATUS_??? otherwise.
*/
MFRC522::StatusCode MFRC522::PICC_RequestA( byte *bufferATQA, ///< The buffer to store the ATQA (Answer to request) in
@@ -562,7 +562,7 @@ MFRC522::StatusCode MFRC522::PICC_RequestA( byte *bufferATQA, ///< The buffer to
/**
* Transmits a Wake-UP command, Type A. Invites PICCs in state IDLE and HALT to go to READY(*) and prepare for anticollision or selection. 7 bit frame.
* Beware: When two PICCs are in the field at the same time I often get STATUS_TIMEOUT - probably due do bad antenna design.
- *
+ *
* @return STATUS_OK on success, STATUS_??? otherwise.
*/
MFRC522::StatusCode MFRC522::PICC_WakeupA( byte *bufferATQA, ///< The buffer to store the ATQA (Answer to request) in
@@ -574,16 +574,16 @@ MFRC522::StatusCode MFRC522::PICC_WakeupA( byte *bufferATQA, ///< The buffer to
/**
* Transmits REQA or WUPA commands.
* Beware: When two PICCs are in the field at the same time I often get STATUS_TIMEOUT - probably due do bad antenna design.
- *
+ *
* @return STATUS_OK on success, STATUS_??? otherwise.
- */
+ */
MFRC522::StatusCode MFRC522::PICC_REQA_or_WUPA( byte command, ///< The command to send - PICC_CMD_REQA or PICC_CMD_WUPA
byte *bufferATQA, ///< The buffer to store the ATQA (Answer to request) in
byte *bufferSize ///< Buffer size, at least two bytes. Also number of bytes returned if STATUS_OK.
) {
byte validBits;
MFRC522::StatusCode status;
-
+
if (bufferATQA == nullptr || *bufferSize < 2) { // The ATQA response is 2 bytes long.
return STATUS_NO_ROOM;
}
@@ -605,7 +605,7 @@ MFRC522::StatusCode MFRC522::PICC_REQA_or_WUPA( byte command, ///< The command
* On success:
* - The chosen PICC is in state ACTIVE(*) and all other PICCs have returned to state IDLE/HALT. (Figure 7 of the ISO/IEC 14443-3 draft.)
* - The UID size and value of the chosen PICC is returned in *uid along with the SAK.
- *
+ *
* A PICC UID consists of 4, 7 or 10 bytes.
* Only 4 bytes can be specified in a SELECT command, so for the longer UIDs two or three iterations are used:
* UID size Number of UID bytes Cascade levels Example of PICC
@@ -613,7 +613,7 @@ MFRC522::StatusCode MFRC522::PICC_REQA_or_WUPA( byte command, ///< The command
* single 4 1 MIFARE Classic
* double 7 2 MIFARE Ultralight
* triple 10 3 Not currently in use?
- *
+ *
* @return STATUS_OK on success, STATUS_??? otherwise.
*/
MFRC522::StatusCode MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally output, but can also be used to supply a known UID.
@@ -632,13 +632,13 @@ MFRC522::StatusCode MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct
byte buffer[9]; // The SELECT/ANTICOLLISION commands uses a 7 byte standard frame + 2 bytes CRC_A
byte bufferUsed; // The number of bytes used in the buffer, ie the number of bytes to transfer to the FIFO.
byte rxAlign; // Used in BitFramingReg. Defines the bit position for the first bit received.
- byte txLastBits; // Used in BitFramingReg. The number of valid bits in the last transmitted byte.
+ byte txLastBits; // Used in BitFramingReg. The number of valid bits in the last transmitted byte.
byte *responseBuffer;
byte responseLength;
-
+
// Description of buffer structure:
// Byte 0: SEL Indicates the Cascade Level: PICC_CMD_SEL_CL1, PICC_CMD_SEL_CL2 or PICC_CMD_SEL_CL3
- // Byte 1: NVB Number of Valid Bits (in complete command, not just the UID): High nibble: complete bytes, Low nibble: Extra bits.
+ // Byte 1: NVB Number of Valid Bits (in complete command, not just the UID): High nibble: complete bytes, Low nibble: Extra bits.
// Byte 2: UID-data or CT See explanation below. CT means Cascade Tag.
// Byte 3: UID-data
// Byte 4: UID-data
@@ -657,15 +657,15 @@ MFRC522::StatusCode MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct
// 10 bytes 1 CT uid0 uid1 uid2
// 2 CT uid3 uid4 uid5
// 3 uid6 uid7 uid8 uid9
-
+
// Sanity checks
if (validBits > 80) {
return STATUS_INVALID;
}
-
+
// Prepare MFRC522
PCD_ClearRegisterBitMask(CollReg, 0x80); // ValuesAfterColl=1 => Bits received after collision are cleared.
-
+
// Repeat Cascade Level loop until we have a complete UID.
uidComplete = false;
while (!uidComplete) {
@@ -676,24 +676,24 @@ MFRC522::StatusCode MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct
uidIndex = 0;
useCascadeTag = validBits && uid->size > 4; // When we know that the UID has more than 4 bytes
break;
-
+
case 2:
buffer[0] = PICC_CMD_SEL_CL2;
uidIndex = 3;
useCascadeTag = validBits && uid->size > 7; // When we know that the UID has more than 7 bytes
break;
-
+
case 3:
buffer[0] = PICC_CMD_SEL_CL3;
uidIndex = 6;
useCascadeTag = false; // Never used in CL3.
break;
-
+
default:
return STATUS_INTERNAL_ERROR;
break;
}
-
+
// How many UID bits are known in this Cascade Level?
currentLevelKnownBits = validBits - (8 * uidIndex);
if (currentLevelKnownBits < 0) {
@@ -718,7 +718,7 @@ MFRC522::StatusCode MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct
if (useCascadeTag) {
currentLevelKnownBits += 8;
}
-
+
// Repeat anti collision loop until we can transmit all UID bits + BCC and receive a SAK - max 32 iterations.
selectDone = false;
while (!selectDone) {
@@ -750,11 +750,11 @@ MFRC522::StatusCode MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct
responseBuffer = &buffer[index];
responseLength = sizeof(buffer) - index;
}
-
+
// Set bit adjustments
rxAlign = txLastBits; // Having a separate variable is overkill. But it makes the next line easier to read.
PCD_WriteRegister(BitFramingReg, (rxAlign << 4) + txLastBits); // RxAlign = BitFramingReg[6..4]. TxLastBits = BitFramingReg[2..0]
-
+
// Transmit the buffer and receive the response.
result = PCD_TransceiveData(buffer, bufferUsed, responseBuffer, &responseLength, &txLastBits, rxAlign);
if (result == STATUS_COLLISION) { // More than one PICC in the field => collision.
@@ -766,7 +766,7 @@ MFRC522::StatusCode MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct
if (collisionPos == 0) {
collisionPos = 32;
}
- if (collisionPos <= currentLevelKnownBits) { // No progress - should not happen
+ if (collisionPos <= currentLevelKnownBits) { // No progress - should not happen
return STATUS_INTERNAL_ERROR;
}
// Choose the PICC with the bit set.
@@ -781,7 +781,7 @@ MFRC522::StatusCode MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct
}
else { // STATUS_OK
if (currentLevelKnownBits >= 32) { // This was a SELECT.
- selectDone = true; // No more anticollision
+ selectDone = true; // No more anticollision
// We continue below outside the while.
}
else { // This was an ANTICOLLISION.
@@ -791,16 +791,16 @@ MFRC522::StatusCode MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct
}
}
} // End of while (!selectDone)
-
+
// We do not check the CBB - it was constructed by us above.
-
+
// Copy the found UID bytes from buffer[] to uid->uidByte[]
index = (buffer[2] == PICC_CMD_CT) ? 3 : 2; // source index in buffer[]
bytesToCopy = (buffer[2] == PICC_CMD_CT) ? 3 : 4;
for (count = 0; count < bytesToCopy; count++) {
uid->uidByte[uidIndex + count] = buffer[index++];
}
-
+
// Check response SAK (Select Acknowledge)
if (responseLength != 3 || txLastBits != 0) { // SAK must be exactly 24 bits (1 byte + CRC_A).
return STATUS_ERROR;
@@ -821,7 +821,7 @@ MFRC522::StatusCode MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct
uid->sak = responseBuffer[0];
}
} // End of while (!uidComplete)
-
+
// Set correct uid->size
uid->size = 3 * cascadeLevel + 1;
@@ -832,11 +832,11 @@ MFRC522::StatusCode MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct
* Instructs a PICC in state ACTIVE(*) to go to state HALT.
*
* @return STATUS_OK on success, STATUS_??? otherwise.
- */
+ */
MFRC522::StatusCode MFRC522::PICC_HaltA() {
MFRC522::StatusCode result;
byte buffer[4];
-
+
// Build command buffer
buffer[0] = PICC_CMD_HLTA;
buffer[1] = 0;
@@ -845,7 +845,7 @@ MFRC522::StatusCode MFRC522::PICC_HaltA() {
if (result != STATUS_OK) {
return result;
}
-
+
// Send the command.
// The standard says:
// If the PICC responds with any modulation during a period of 1 ms after the end of the frame containing the
@@ -872,9 +872,9 @@ MFRC522::StatusCode MFRC522::PICC_HaltA() {
* For use with MIFARE Classic PICCs.
* The PICC must be selected - ie in state ACTIVE(*) - before calling this function.
* Remember to call PCD_StopCrypto1() after communicating with the authenticated PICC - otherwise no new communications can start.
- *
+ *
* All keys are set to FFFFFFFFFFFFh at chip delivery.
- *
+ *
* @return STATUS_OK on success, STATUS_??? otherwise. Probably STATUS_TIMEOUT if you supply the wrong key.
*/
MFRC522::StatusCode MFRC522::PCD_Authenticate(byte command, ///< PICC_CMD_MF_AUTH_KEY_A or PICC_CMD_MF_AUTH_KEY_B
@@ -883,7 +883,7 @@ MFRC522::StatusCode MFRC522::PCD_Authenticate(byte command, ///< PICC_CMD_MF_AU
Uid *uid ///< Pointer to Uid struct. The first 4 bytes of the UID is used.
) {
byte waitIRq = 0x10; // IdleIRq
-
+
// Build command buffer
byte sendData[12];
sendData[0] = command;
@@ -898,7 +898,7 @@ MFRC522::StatusCode MFRC522::PCD_Authenticate(byte command, ///< PICC_CMD_MF_AU
for (byte i = 0; i < 4; i++) { // The last 4 bytes of the UID
sendData[8+i] = uid->uidByte[i+uid->size-4];
}
-
+
// Start the authentication.
return PCD_CommunicateWithPICC(PCD_MFAuthent, waitIRq, &sendData[0], sizeof(sendData));
} // End PCD_Authenticate()
@@ -914,18 +914,18 @@ void MFRC522::PCD_StopCrypto1() {
/**
* Reads 16 bytes (+ 2 bytes CRC_A) from the active PICC.
- *
+ *
* For MIFARE Classic the sector containing the block must be authenticated before calling this function.
- *
+ *
* For MIFARE Ultralight only addresses 00h to 0Fh are decoded.
* The MF0ICU1 returns a NAK for higher addresses.
* The MF0ICU1 responds to the READ command by sending 16 bytes starting from the page address defined by the command argument.
* For example; if blockAddr is 03h then pages 03h, 04h, 05h, 06h are returned.
* A roll-back is implemented: If blockAddr is 0Eh, then the contents of pages 0Eh, 0Fh, 00h and 01h are returned.
- *
+ *
* The buffer must be at least 18 bytes because a CRC_A is also returned.
* Checks the CRC_A before returning STATUS_OK.
- *
+ *
* @return STATUS_OK on success, STATUS_??? otherwise.
*/
MFRC522::StatusCode MFRC522::MIFARE_Read( byte blockAddr, ///< MIFARE Classic: The block (0-0xff) number. MIFARE Ultralight: The first page to return data from.
@@ -933,12 +933,12 @@ MFRC522::StatusCode MFRC522::MIFARE_Read( byte blockAddr, ///< MIFARE Classic:
byte *bufferSize ///< Buffer size, at least 18 bytes. Also number of bytes returned if STATUS_OK.
) {
MFRC522::StatusCode result;
-
+
// Sanity check
if (buffer == nullptr || *bufferSize < 18) {
return STATUS_NO_ROOM;
}
-
+
// Build command buffer
buffer[0] = PICC_CMD_MF_READ;
buffer[1] = blockAddr;
@@ -947,20 +947,20 @@ MFRC522::StatusCode MFRC522::MIFARE_Read( byte blockAddr, ///< MIFARE Classic:
if (result != STATUS_OK) {
return result;
}
-
+
// Transmit the buffer and receive the response, validate CRC_A.
return PCD_TransceiveData(buffer, 4, buffer, bufferSize, nullptr, 0, true);
} // End MIFARE_Read()
/**
* Writes 16 bytes to the active PICC.
- *
+ *
* For MIFARE Classic the sector containing the block must be authenticated before calling this function.
- *
+ *
* For MIFARE Ultralight the operation is called "COMPATIBILITY WRITE".
* Even though 16 bytes are transferred to the Ultralight PICC, only the least significant 4 bytes (bytes 0 to 3)
* are written to the specified address. It is recommended to set the remaining bytes 04h to 0Fh to all logic 0.
- * *
+ * *
* @return STATUS_OK on success, STATUS_??? otherwise.
*/
MFRC522::StatusCode MFRC522::MIFARE_Write( byte blockAddr, ///< MIFARE Classic: The block (0-0xff) number. MIFARE Ultralight: The page (2-15) to write to.
@@ -968,12 +968,12 @@ MFRC522::StatusCode MFRC522::MIFARE_Write( byte blockAddr, ///< MIFARE Classic:
byte bufferSize ///< Buffer size, must be at least 16 bytes. Exactly 16 bytes are written.
) {
MFRC522::StatusCode result;
-
+
// Sanity check
if (buffer == nullptr || bufferSize < 16) {
return STATUS_INVALID;
}
-
+
// Mifare Classic protocol requires two communications to perform a write.
// Step 1: Tell the PICC we want to write to block blockAddr.
byte cmdBuffer[2];
@@ -983,19 +983,19 @@ MFRC522::StatusCode MFRC522::MIFARE_Write( byte blockAddr, ///< MIFARE Classic:
if (result != STATUS_OK) {
return result;
}
-
+
// Step 2: Transfer the data
result = PCD_MIFARE_Transceive(buffer, bufferSize); // Adds CRC_A and checks that the response is MF_ACK.
if (result != STATUS_OK) {
return result;
}
-
+
return STATUS_OK;
} // End MIFARE_Write()
/**
* Writes a 4 byte page to the active MIFARE Ultralight PICC.
- *
+ *
* @return STATUS_OK on success, STATUS_??? otherwise.
*/
MFRC522::StatusCode MFRC522::MIFARE_Ultralight_Write( byte page, ///< The page (2-15) to write to.
@@ -1003,18 +1003,18 @@ MFRC522::StatusCode MFRC522::MIFARE_Ultralight_Write( byte page, ///< The page
byte bufferSize ///< Buffer size, must be at least 4 bytes. Exactly 4 bytes are written.
) {
MFRC522::StatusCode result;
-
+
// Sanity check
if (buffer == nullptr || bufferSize < 4) {
return STATUS_INVALID;
}
-
+
// Build commmand buffer
byte cmdBuffer[6];
cmdBuffer[0] = PICC_CMD_UL_WRITE;
cmdBuffer[1] = page;
memcpy(&cmdBuffer[2], buffer, 4);
-
+
// Perform the write
result = PCD_MIFARE_Transceive(cmdBuffer, 6); // Adds CRC_A and checks that the response is MF_ACK.
if (result != STATUS_OK) {
@@ -1028,7 +1028,7 @@ MFRC522::StatusCode MFRC522::MIFARE_Ultralight_Write( byte page, ///< The page
* For MIFARE Classic only. The sector containing the block must be authenticated before calling this function.
* Only for blocks in "value block" mode, ie with access bits [C1 C2 C3] = [110] or [001].
* Use MIFARE_Transfer() to store the result in a block.
- *
+ *
* @return STATUS_OK on success, STATUS_??? otherwise.
*/
MFRC522::StatusCode MFRC522::MIFARE_Decrement( byte blockAddr, ///< The block (0-0xff) number.
@@ -1042,7 +1042,7 @@ MFRC522::StatusCode MFRC522::MIFARE_Decrement( byte blockAddr, ///< The block (0
* For MIFARE Classic only. The sector containing the block must be authenticated before calling this function.
* Only for blocks in "value block" mode, ie with access bits [C1 C2 C3] = [110] or [001].
* Use MIFARE_Transfer() to store the result in a block.
- *
+ *
* @return STATUS_OK on success, STATUS_??? otherwise.
*/
MFRC522::StatusCode MFRC522::MIFARE_Increment( byte blockAddr, ///< The block (0-0xff) number.
@@ -1056,7 +1056,7 @@ MFRC522::StatusCode MFRC522::MIFARE_Increment( byte blockAddr, ///< The block (0
* For MIFARE Classic only. The sector containing the block must be authenticated before calling this function.
* Only for blocks in "value block" mode, ie with access bits [C1 C2 C3] = [110] or [001].
* Use MIFARE_Transfer() to store the result in a block.
- *
+ *
* @return STATUS_OK on success, STATUS_??? otherwise.
*/
MFRC522::StatusCode MFRC522::MIFARE_Restore( byte blockAddr ///< The block (0-0xff) number.
@@ -1068,7 +1068,7 @@ MFRC522::StatusCode MFRC522::MIFARE_Restore( byte blockAddr ///< The block (0-0x
/**
* Helper function for the two-step MIFARE Classic protocol operations Decrement, Increment and Restore.
- *
+ *
* @return STATUS_OK on success, STATUS_??? otherwise.
*/
MFRC522::StatusCode MFRC522::MIFARE_TwoStepHelper( byte command, ///< The command to use
@@ -1077,7 +1077,7 @@ MFRC522::StatusCode MFRC522::MIFARE_TwoStepHelper( byte command, ///< The comman
) {
MFRC522::StatusCode result;
byte cmdBuffer[2]; // We only need room for 2 bytes.
-
+
// Step 1: Tell the PICC the command and block address
cmdBuffer[0] = command;
cmdBuffer[1] = blockAddr;
@@ -1085,13 +1085,13 @@ MFRC522::StatusCode MFRC522::MIFARE_TwoStepHelper( byte command, ///< The comman
if (result != STATUS_OK) {
return result;
}
-
+
// Step 2: Transfer the data
result = PCD_MIFARE_Transceive( (byte *)&data, 4, true); // Adds CRC_A and accept timeout as success.
if (result != STATUS_OK) {
return result;
}
-
+
return STATUS_OK;
} // End MIFARE_TwoStepHelper()
@@ -1099,14 +1099,14 @@ MFRC522::StatusCode MFRC522::MIFARE_TwoStepHelper( byte command, ///< The comman
* MIFARE Transfer writes the value stored in the volatile memory into one MIFARE Classic block.
* For MIFARE Classic only. The sector containing the block must be authenticated before calling this function.
* Only for blocks in "value block" mode, ie with access bits [C1 C2 C3] = [110] or [001].
- *
+ *
* @return STATUS_OK on success, STATUS_??? otherwise.
*/
MFRC522::StatusCode MFRC522::MIFARE_Transfer( byte blockAddr ///< The block (0-0xff) number.
) {
MFRC522::StatusCode result;
byte cmdBuffer[2]; // We only need room for 2 bytes.
-
+
// Tell the PICC we want to transfer the result into block blockAddr.
cmdBuffer[0] = PICC_CMD_MF_TRANSFER;
cmdBuffer[1] = blockAddr;
@@ -1119,11 +1119,11 @@ MFRC522::StatusCode MFRC522::MIFARE_Transfer( byte blockAddr ///< The block (0-0
/**
* Helper routine to read the current value from a Value Block.
- *
+ *
* Only for MIFARE Classic and only for blocks in "value block" mode, that
* is: with access bits [C1 C2 C3] = [110] or [001]. The sector containing
- * the block must be authenticated before calling this function.
- *
+ * the block must be authenticated before calling this function.
+ *
* @param[in] blockAddr The block (0x00-0xff) number.
* @param[out] value Current value of the Value Block.
* @return STATUS_OK on success, STATUS_??? otherwise.
@@ -1132,7 +1132,7 @@ MFRC522::StatusCode MFRC522::MIFARE_GetValue(byte blockAddr, int32_t *value) {
MFRC522::StatusCode status;
byte buffer[18];
byte size = sizeof(buffer);
-
+
// Read the block
status = MIFARE_Read(blockAddr, buffer, &size);
if (status == STATUS_OK) {
@@ -1144,18 +1144,18 @@ MFRC522::StatusCode MFRC522::MIFARE_GetValue(byte blockAddr, int32_t *value) {
/**
* Helper routine to write a specific value into a Value Block.
- *
+ *
* Only for MIFARE Classic and only for blocks in "value block" mode, that
* is: with access bits [C1 C2 C3] = [110] or [001]. The sector containing
- * the block must be authenticated before calling this function.
- *
+ * the block must be authenticated before calling this function.
+ *
* @param[in] blockAddr The block (0x00-0xff) number.
* @param[in] value New value of the Value Block.
* @return STATUS_OK on success, STATUS_??? otherwise.
*/
MFRC522::StatusCode MFRC522::MIFARE_SetValue(byte blockAddr, int32_t value) {
byte buffer[18];
-
+
// Translate the int32_t into 4 bytes; repeated 2x in value block
buffer[0] = buffer[ 8] = (value & 0xFF);
buffer[1] = buffer[ 9] = (value & 0xFF00) >> 8;
@@ -1169,16 +1169,16 @@ MFRC522::StatusCode MFRC522::MIFARE_SetValue(byte blockAddr, int32_t value) {
// Address 2x with inverse address 2x
buffer[12] = buffer[14] = blockAddr;
buffer[13] = buffer[15] = ~blockAddr;
-
+
// Write the whole data block
return MIFARE_Write(blockAddr, buffer, 16);
} // End MIFARE_SetValue()
/**
* Authenticate with a NTAG216.
- *
+ *
* Only for NTAG216. First implemented by Gargantuanman.
- *
+ *
* @param[in] passWord password.
* @param[in] pACK result success???.
* @return STATUS_OK on success, STATUS_??? otherwise.
@@ -1190,32 +1190,32 @@ MFRC522::StatusCode MFRC522::PCD_NTAG216_AUTH(byte* passWord, byte pACK[]) //Aut
MFRC522::StatusCode result;
byte cmdBuffer[18]; // We need room for 16 bytes data and 2 bytes CRC_A.
-
+
cmdBuffer[0] = 0x1B; //Comando de autentificacion
-
+
for (byte i = 0; i<4; i++)
cmdBuffer[i+1] = passWord[i];
-
+
result = PCD_CalculateCRC(cmdBuffer, 5, &cmdBuffer[5]);
-
+
if (result!=STATUS_OK) {
return result;
}
-
+
// Transceive the data, store the reply in cmdBuffer[]
byte waitIRq = 0x30; // RxIRq and IdleIRq
// byte cmdBufferSize = sizeof(cmdBuffer);
byte validBits = 0;
byte rxlength = 5;
result = PCD_CommunicateWithPICC(PCD_Transceive, waitIRq, cmdBuffer, 7, cmdBuffer, &rxlength, &validBits);
-
+
pACK[0] = cmdBuffer[0];
pACK[1] = cmdBuffer[1];
-
+
if (result!=STATUS_OK) {
return result;
}
-
+
return STATUS_OK;
} // End PCD_NTAG216_AUTH()
@@ -1227,7 +1227,7 @@ MFRC522::StatusCode MFRC522::PCD_NTAG216_AUTH(byte* passWord, byte pACK[]) //Aut
/**
* Wrapper for MIFARE protocol communication.
* Adds CRC_A, executes the Transceive command and checks that the response is MF_ACK or a timeout.
- *
+ *
* @return STATUS_OK on success, STATUS_??? otherwise.
*/
MFRC522::StatusCode MFRC522::PCD_MIFARE_Transceive( byte *sendData, ///< Pointer to the data to transfer to the FIFO. Do NOT include the CRC_A.
@@ -1236,20 +1236,20 @@ MFRC522::StatusCode MFRC522::PCD_MIFARE_Transceive( byte *sendData, ///< Pointe
) {
MFRC522::StatusCode result;
byte cmdBuffer[18]; // We need room for 16 bytes data and 2 bytes CRC_A.
-
+
// Sanity check
if (sendData == nullptr || sendLen > 16) {
return STATUS_INVALID;
}
-
+
// Copy sendData[] to cmdBuffer[] and add CRC_A
memcpy(cmdBuffer, sendData, sendLen);
result = PCD_CalculateCRC(cmdBuffer, sendLen, &cmdBuffer[sendLen]);
- if (result != STATUS_OK) {
+ if (result != STATUS_OK) {
return result;
}
sendLen += 2;
-
+
// Transceive the data, store the reply in cmdBuffer[]
byte waitIRq = 0x30; // RxIRq and IdleIRq
byte cmdBufferSize = sizeof(cmdBuffer);
@@ -1273,9 +1273,10 @@ MFRC522::StatusCode MFRC522::PCD_MIFARE_Transceive( byte *sendData, ///< Pointe
/**
* Returns a __FlashStringHelper pointer to a status code name.
- *
+ *
* @return const __FlashStringHelper *
*/
+/*
const __FlashStringHelper *MFRC522::GetStatusCodeName(MFRC522::StatusCode code ///< One of the StatusCode enums.
) {
switch (code) {
@@ -1291,15 +1292,31 @@ const __FlashStringHelper *MFRC522::GetStatusCodeName(MFRC522::StatusCode code /
default: return F("Unknown error");
}
} // End GetStatusCodeName()
+*/
+String MFRC522::GetStatusCodeName(MFRC522::StatusCode code ///< One of the StatusCode enums.
+ ) {
+ switch (code) {
+ case STATUS_OK: return F("Success.");
+ case STATUS_ERROR: return F("Error in communication.");
+ case STATUS_COLLISION: return F("Collision detected.");
+ case STATUS_TIMEOUT: return F("Timeout in communication.");
+ case STATUS_NO_ROOM: return F("A buffer is not big enough.");
+ case STATUS_INTERNAL_ERROR: return F("Internal error in the code. Should not happen.");
+ case STATUS_INVALID: return F("Invalid argument.");
+ case STATUS_CRC_WRONG: return F("The CRC_A does not match.");
+ case STATUS_MIFARE_NACK: return F("A MIFARE PICC responded with NAK.");
+ default: return F("Unknown error");
+ }
+} // End GetStatusCodeName()
/**
* Translates the SAK (Select Acknowledge) to a PICC type.
- *
+ *
* @return PICC_Type
*/
MFRC522::PICC_Type MFRC522::PICC_GetType(byte sak ///< The SAK byte returned from PICC_Select().
) {
- // http://www.nxp.com/documents/application_note/AN10833.pdf
+ // http://www.nxp.com/documents/application_note/AN10833.pdf
// 3.2 Coding of Select Acknowledge (SAK)
// ignore 8-bit (iso14443 starts with LSBit = bit 1)
// fixes wrong type for manufacturer Infineon (http://nfc-tools.org/index.php?title=ISO14443A)
@@ -1321,9 +1338,10 @@ MFRC522::PICC_Type MFRC522::PICC_GetType(byte sak ///< The SAK byte returned fr
/**
* Returns a __FlashStringHelper pointer to the PICC type name.
- *
+ *
* @return const __FlashStringHelper *
*/
+/*
const __FlashStringHelper *MFRC522::PICC_GetTypeName(PICC_Type piccType ///< One of the PICC_Type enums.
) {
switch (piccType) {
@@ -1341,6 +1359,24 @@ const __FlashStringHelper *MFRC522::PICC_GetTypeName(PICC_Type piccType ///< One
default: return F("Unknown type");
}
} // End PICC_GetTypeName()
+*/
+String MFRC522::PICC_GetTypeName(PICC_Type piccType ///< One of the PICC_Type enums.
+ ) {
+ switch (piccType) {
+ case PICC_TYPE_ISO_14443_4: return F("PICC compliant with ISO/IEC 14443-4");
+ case PICC_TYPE_ISO_18092: return F("PICC compliant with ISO/IEC 18092 (NFC)");
+ case PICC_TYPE_MIFARE_MINI: return F("MIFARE Mini, 320 bytes");
+ case PICC_TYPE_MIFARE_1K: return F("MIFARE 1KB");
+ case PICC_TYPE_MIFARE_4K: return F("MIFARE 4KB");
+ case PICC_TYPE_MIFARE_UL: return F("MIFARE Ultralight or Ultralight C");
+ case PICC_TYPE_MIFARE_PLUS: return F("MIFARE Plus");
+ case PICC_TYPE_MIFARE_DESFIRE: return F("MIFARE DESFire");
+ case PICC_TYPE_TNP3XXX: return F("MIFARE TNP3XXX");
+ case PICC_TYPE_NOT_COMPLETE: return F("SAK indicates UID is not complete.");
+ case PICC_TYPE_UNKNOWN:
+ default: return F("Unknown type");
+ }
+} // End PICC_GetTypeName()
/**
* Dumps debug info about the connected PCD to Serial.
@@ -1368,15 +1404,15 @@ void MFRC522::PCD_DumpVersionToSerial() {
/**
* Dumps debug info about the selected PICC to Serial.
* On success the PICC is halted after dumping the data.
- * For MIFARE Classic the factory default key of 0xFFFFFFFFFFFF is tried.
+ * For MIFARE Classic the factory default key of 0xFFFFFFFFFFFF is tried.
*/
void MFRC522::PICC_DumpToSerial(Uid *uid ///< Pointer to Uid struct returned from a successful PICC_Select().
) {
MIFARE_Key key;
-
+
// Dump UID, SAK and Type
PICC_DumpDetailsToSerial(uid);
-
+
// Dump contents
PICC_Type piccType = PICC_GetType(uid->sak);
switch (piccType) {
@@ -1389,11 +1425,11 @@ void MFRC522::PICC_DumpToSerial(Uid *uid ///< Pointer to Uid struct returned fro
}
PICC_DumpMifareClassicToSerial(uid, piccType, &key);
break;
-
+
case PICC_TYPE_MIFARE_UL:
PICC_DumpMifareUltralightToSerial();
break;
-
+
case PICC_TYPE_ISO_14443_4:
case PICC_TYPE_MIFARE_DESFIRE:
case PICC_TYPE_ISO_18092:
@@ -1401,13 +1437,13 @@ void MFRC522::PICC_DumpToSerial(Uid *uid ///< Pointer to Uid struct returned fro
case PICC_TYPE_TNP3XXX:
Serial.println(F("Dumping memory contents not implemented for that PICC type."));
break;
-
+
case PICC_TYPE_UNKNOWN:
case PICC_TYPE_NOT_COMPLETE:
default:
break; // No memory dump here
}
-
+
Serial.println();
PICC_HaltA(); // Already done if it was a MIFARE Classic PICC.
} // End PICC_DumpToSerial()
@@ -1425,15 +1461,15 @@ void MFRC522::PICC_DumpDetailsToSerial(Uid *uid ///< Pointer to Uid struct retur
else
Serial.print(F(" "));
Serial.print(uid->uidByte[i], HEX);
- }
+ }
Serial.println();
-
+
// SAK
Serial.print(F("Card SAK: "));
if(uid->sak < 0x10)
Serial.print(F("0"));
Serial.println(uid->sak, HEX);
-
+
// (suggested) PICC type
PICC_Type piccType = PICC_GetType(uid->sak);
Serial.print(F("PICC type: "));
@@ -1454,21 +1490,21 @@ void MFRC522::PICC_DumpMifareClassicToSerial( Uid *uid, ///< Pointer to Uid st
// Has 5 sectors * 4 blocks/sector * 16 bytes/block = 320 bytes.
no_of_sectors = 5;
break;
-
+
case PICC_TYPE_MIFARE_1K:
// Has 16 sectors * 4 blocks/sector * 16 bytes/block = 1024 bytes.
no_of_sectors = 16;
break;
-
+
case PICC_TYPE_MIFARE_4K:
// Has (32 sectors * 4 blocks/sector + 8 sectors * 16 blocks/sector) * 16 bytes/block = 4096 bytes.
no_of_sectors = 40;
break;
-
+
default: // Should not happen. Ignore.
break;
}
-
+
// Dump sectors, highest address first.
if (no_of_sectors) {
Serial.println(F("Sector Block 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 AccessBits"));
@@ -1493,7 +1529,7 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U
byte firstBlock; // Address of lowest address to dump actually last block dumped)
byte no_of_blocks; // Number of blocks in sector
bool isSectorTrailer; // Set to true while handling the "last" (ie highest address) in the sector.
-
+
// The access bits are stored in a peculiar fashion.
// There are four groups:
// g[3] Access bits for the sector trailer, block 3 (for sectors 0-31) or block 15 (for sectors 32-39)
@@ -1508,7 +1544,7 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U
byte g[4]; // Access bits for each of the four groups.
byte group; // 0-3 - active group for access bits
bool firstInGroup; // True for the first block dumped in the group
-
+
// Determine position and size of sector.
if (sector < 32) { // Sectors 0..31 has 4 blocks each
no_of_blocks = 4;
@@ -1521,7 +1557,7 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U
else { // Illegal input, no MIFARE Classic PICC has more than 40 sectors.
return;
}
-
+
// Dump blocks, highest address first.
byte byteCount;
byte buffer[18];
@@ -1558,7 +1594,7 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U
status = PCD_Authenticate(PICC_CMD_MF_AUTH_KEY_A, firstBlock, key, uid);
if (status != STATUS_OK) {
Serial.print(F("PCD_Authenticate() failed: "));
- Serial.println(GetStatusCodeName(status));
+ Serial.println(GetStatusCodeName(status).c_str());
return;
}
}
@@ -1567,7 +1603,7 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U
status = MIFARE_Read(blockAddr, buffer, &byteCount);
if (status != STATUS_OK) {
Serial.print(F("MIFARE_Read() failed: "));
- Serial.println(GetStatusCodeName(status));
+ Serial.println(GetStatusCodeName(status).c_str());
continue;
}
// Dump data
@@ -1596,7 +1632,7 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U
g[3] = ((c1 & 8) >> 1) | ((c2 & 8) >> 2) | ((c3 & 8) >> 3);
isSectorTrailer = false;
}
-
+
// Which access group is this block in?
if (no_of_blocks == 4) {
group = blockOffset;
@@ -1606,7 +1642,7 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U
group = blockOffset / 5;
firstInGroup = (group == 3) || (group != (blockOffset + 1) / 5);
}
-
+
if (firstInGroup) {
// Print access bits
Serial.print(F(" [ "));
@@ -1618,7 +1654,7 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U
Serial.print(F(" Inverted access bits did not match! "));
}
}
-
+
if (group != 3 && (g[group] == 1 || g[group] == 6)) { // Not a sector trailer, a value block
int32_t value = (int32_t(buffer[3])<<24) | (int32_t(buffer[2])<<16) | (int32_t(buffer[1])<<8) | int32_t(buffer[0]);
Serial.print(F(" Value=0x")); Serial.print(value, HEX);
@@ -1626,7 +1662,7 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U
}
Serial.println();
}
-
+
return;
} // End PICC_DumpMifareClassicSectorToSerial()
@@ -1638,7 +1674,7 @@ void MFRC522::PICC_DumpMifareUltralightToSerial() {
byte byteCount;
byte buffer[18];
byte i;
-
+
Serial.println(F("Page 0 1 2 3"));
// Try the mpages of the original Ultralight. Ultralight C has more pages.
for (byte page = 0; page < 16; page +=4) { // Read returns data for 4 pages at a time.
@@ -1647,7 +1683,7 @@ void MFRC522::PICC_DumpMifareUltralightToSerial() {
status = MIFARE_Read(page, buffer, &byteCount);
if (status != STATUS_OK) {
Serial.print(F("MIFARE_Read() failed: "));
- Serial.println(GetStatusCodeName(status));
+ Serial.println(GetStatusCodeName(status).c_str());
break;
}
// Dump data
@@ -1684,7 +1720,7 @@ void MFRC522::MIFARE_SetAccessBits( byte *accessBitBuffer, ///< Pointer to byte
byte c1 = ((g3 & 4) << 1) | ((g2 & 4) << 0) | ((g1 & 4) >> 1) | ((g0 & 4) >> 2);
byte c2 = ((g3 & 2) << 2) | ((g2 & 2) << 1) | ((g1 & 2) << 0) | ((g0 & 2) >> 1);
byte c3 = ((g3 & 1) << 3) | ((g2 & 1) << 2) | ((g1 & 1) << 1) | ((g0 & 1) << 0);
-
+
accessBitBuffer[0] = (~c2 & 0xF) << 4 | (~c1 & 0xF);
accessBitBuffer[1] = c1 << 4 | (~c3 & 0xF);
accessBitBuffer[2] = c3 << 4 | c2;
@@ -1699,7 +1735,7 @@ void MFRC522::MIFARE_SetAccessBits( byte *accessBitBuffer, ///< Pointer to byte
* this sequence works immediately when the card is in the reader vicinity.
* This means you can use this method even on "bricked" cards that your reader does
* not recognise anymore (see MFRC522::MIFARE_UnbrickUidSector).
- *
+ *
* Of course with non-bricked devices, you're free to select them before calling this function.
*/
bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) {
@@ -1710,9 +1746,9 @@ bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) {
// > 43
// < A (4 bits only)
// Then you can write to sector 0 without authenticating
-
+
PICC_HaltA(); // 50 00 57 CD
-
+
byte cmd = 0x40;
byte validBits = 7; /* Our command is only 7 bits. After receiving card response,
this will contain amount of valid response bits. */
@@ -1723,7 +1759,7 @@ bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) {
if(logErrors) {
Serial.println(F("Card did not respond to 0x40 after HALT command. Are you sure it is a UID changeable one?"));
Serial.print(F("Error name: "));
- Serial.println(GetStatusCodeName(status));
+ Serial.println(GetStatusCodeName(status).c_str());
}
return false;
}
@@ -1737,7 +1773,7 @@ bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) {
}
return false;
}
-
+
cmd = 0x43;
validBits = 8;
status = PCD_TransceiveData(&cmd, (byte)1, response, &received, &validBits, (byte)0, false); // 43
@@ -1745,7 +1781,7 @@ bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) {
if(logErrors) {
Serial.println(F("Error in communication at command 0x43, after successfully executing 0x40"));
Serial.print(F("Error name: "));
- Serial.println(GetStatusCodeName(status));
+ Serial.println(GetStatusCodeName(status).c_str());
}
return false;
}
@@ -1759,7 +1795,7 @@ bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) {
}
return false;
}
-
+
// You can now write to sector 0 without authenticating!
return true;
} // End MIFARE_OpenUidBackdoor()
@@ -1773,7 +1809,7 @@ bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) {
* Make sure to have selected the card before this function is called.
*/
bool MFRC522::MIFARE_SetUid(byte *newUid, byte uidSize, bool logErrors) {
-
+
// UID + BCC byte can not be larger than 16 together
if (!newUid || !uidSize || uidSize > 15) {
if (logErrors) {
@@ -1781,31 +1817,31 @@ bool MFRC522::MIFARE_SetUid(byte *newUid, byte uidSize, bool logErrors) {
}
return false;
}
-
+
// Authenticate for reading
MIFARE_Key key = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
MFRC522::StatusCode status = PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, (byte)1, &key, &uid);
if (status != STATUS_OK) {
-
+
if (status == STATUS_TIMEOUT) {
// We get a read timeout if no card is selected yet, so let's select one
-
+
// Wake the card up again if sleeping
// byte atqa_answer[2];
// byte atqa_size = 2;
// PICC_WakeupA(atqa_answer, &atqa_size);
-
+
if (!PICC_IsNewCardPresent() || !PICC_ReadCardSerial()) {
Serial.println(F("No card was previously selected, and none are available. Failed to set UID."));
return false;
}
-
+
status = PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, (byte)1, &key, &uid);
if (status != STATUS_OK) {
// We tried, time to give up
if (logErrors) {
Serial.println(F("Failed to authenticate to card for reading, could not set UID: "));
- Serial.println(GetStatusCodeName(status));
+ Serial.println(GetStatusCodeName(status).c_str());
}
return false;
}
@@ -1813,12 +1849,12 @@ bool MFRC522::MIFARE_SetUid(byte *newUid, byte uidSize, bool logErrors) {
else {
if (logErrors) {
Serial.print(F("PCD_Authenticate() failed: "));
- Serial.println(GetStatusCodeName(status));
+ Serial.println(GetStatusCodeName(status).c_str());
}
return false;
}
}
-
+
// Read block 0
byte block0_buffer[18];
byte byteCount = sizeof(block0_buffer);
@@ -1826,25 +1862,25 @@ bool MFRC522::MIFARE_SetUid(byte *newUid, byte uidSize, bool logErrors) {
if (status != STATUS_OK) {
if (logErrors) {
Serial.print(F("MIFARE_Read() failed: "));
- Serial.println(GetStatusCodeName(status));
+ Serial.println(GetStatusCodeName(status).c_str());
Serial.println(F("Are you sure your KEY A for sector 0 is 0xFFFFFFFFFFFF?"));
}
return false;
}
-
+
// Write new UID to the data we just read, and calculate BCC byte
byte bcc = 0;
for (uint8_t i = 0; i < uidSize; i++) {
block0_buffer[i] = newUid[i];
bcc ^= newUid[i];
}
-
+
// Write BCC byte to buffer
block0_buffer[uidSize] = bcc;
-
+
// Stop encrypted traffic so we can send raw bytes
PCD_StopCrypto1();
-
+
// Activate UID backdoor
if (!MIFARE_OpenUidBackdoor(logErrors)) {
if (logErrors) {
@@ -1852,22 +1888,22 @@ bool MFRC522::MIFARE_SetUid(byte *newUid, byte uidSize, bool logErrors) {
}
return false;
}
-
+
// Write modified block 0 back to card
status = MIFARE_Write((byte)0, block0_buffer, (byte)16);
if (status != STATUS_OK) {
if (logErrors) {
Serial.print(F("MIFARE_Write() failed: "));
- Serial.println(GetStatusCodeName(status));
+ Serial.println(GetStatusCodeName(status).c_str());
}
return false;
}
-
+
// Wake the card up again
byte atqa_answer[2];
byte atqa_size = 2;
PICC_WakeupA(atqa_answer, &atqa_size);
-
+
return true;
}
@@ -1876,15 +1912,15 @@ bool MFRC522::MIFARE_SetUid(byte *newUid, byte uidSize, bool logErrors) {
*/
bool MFRC522::MIFARE_UnbrickUidSector(bool logErrors) {
MIFARE_OpenUidBackdoor(logErrors);
-
- byte block0_buffer[] = {0x01, 0x02, 0x03, 0x04, 0x04, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-
+
+ byte block0_buffer[] = {0x01, 0x02, 0x03, 0x04, 0x04, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+
// Write modified block 0 back to card
MFRC522::StatusCode status = MIFARE_Write((byte)0, block0_buffer, (byte)16);
if (status != STATUS_OK) {
if (logErrors) {
Serial.print(F("MIFARE_Write() failed: "));
- Serial.println(GetStatusCodeName(status));
+ Serial.println(GetStatusCodeName(status).c_str());
}
return false;
}
@@ -1898,7 +1934,7 @@ bool MFRC522::MIFARE_UnbrickUidSector(bool logErrors) {
/**
* Returns true if a PICC responds to PICC_CMD_REQA.
* Only "new" cards in state IDLE are invited. Sleeping cards in state HALT are ignored.
- *
+ *
* @return bool
*/
bool MFRC522::PICC_IsNewCardPresent() {
@@ -1920,10 +1956,10 @@ bool MFRC522::PICC_IsNewCardPresent() {
* Returns true if a UID could be read.
* Remember to call PICC_IsNewCardPresent(), PICC_RequestA() or PICC_WakeupA() first.
* The read UID is available in the class variable uid.
- *
+ *
* @return bool
*/
bool MFRC522::PICC_ReadCardSerial() {
MFRC522::StatusCode result = PICC_Select(&uid);
return (result == STATUS_OK);
-} // End
+} // End
diff --git a/lib/lib_div/rfid-1.4.7/src/MFRC522.h b/lib/lib_div/rfid-1.4.7/src/MFRC522.h
index 5ebbd27dd..f04dd966d 100644
--- a/lib/lib_div/rfid-1.4.7/src/MFRC522.h
+++ b/lib/lib_div/rfid-1.4.7/src/MFRC522.h
@@ -1,10 +1,10 @@
/**
* Library to use Arduino MFRC522 module.
- *
+ *
* @authors Dr.Leong, Miguel Balboa, Søren Thing Andersen, Tom Clement, many more! See GitLog.
- *
+ *
* For more information read the README.
- *
+ *
* Please read this file for an overview and then MFRC522.cpp for comments on the specific functions.
*/
#ifndef MFRC522_h
@@ -92,7 +92,7 @@ public:
DivIEnReg = 0x03 << 1, // enable and disable interrupt request control bits
ComIrqReg = 0x04 << 1, // interrupt request bits
DivIrqReg = 0x05 << 1, // interrupt request bits
- ErrorReg = 0x06 << 1, // error bits showing the error status of the last command executed
+ ErrorReg = 0x06 << 1, // error bits showing the error status of the last command executed
Status1Reg = 0x07 << 1, // communication status bits
Status2Reg = 0x08 << 1, // receiver and transmitter status bits
FIFODataReg = 0x09 << 1, // input and output of 64 byte FIFO buffer
@@ -102,10 +102,10 @@ public:
BitFramingReg = 0x0D << 1, // adjustments for bit-oriented frames
CollReg = 0x0E << 1, // bit position of the first bit-collision detected on the RF interface
// 0x0F // reserved for future use
-
+
// Page 1: Command
// 0x10 // reserved for future use
- ModeReg = 0x11 << 1, // defines general modes for transmitting and receiving
+ ModeReg = 0x11 << 1, // defines general modes for transmitting and receiving
TxModeReg = 0x12 << 1, // defines transmission data rate and framing
RxModeReg = 0x13 << 1, // defines reception data rate and framing
TxControlReg = 0x14 << 1, // controls the logical behavior of the antenna driver pins TX1 and TX2
@@ -120,7 +120,7 @@ public:
MfRxReg = 0x1D << 1, // controls some MIFARE communication receive parameters
// 0x1E // reserved for future use
SerialSpeedReg = 0x1F << 1, // selects the speed of the serial UART interface
-
+
// Page 2: Configuration
// 0x20 // reserved for future use
CRCResultRegH = 0x21 << 1, // shows the MSB and LSB values of the CRC calculation
@@ -129,7 +129,7 @@ public:
ModWidthReg = 0x24 << 1, // controls the ModWidth setting?
// 0x25 // reserved for future use
RFCfgReg = 0x26 << 1, // configures the receiver gain
- GsNReg = 0x27 << 1, // selects the conductance of the antenna driver pins TX1 and TX2 for modulation
+ GsNReg = 0x27 << 1, // selects the conductance of the antenna driver pins TX1 and TX2 for modulation
CWGsPReg = 0x28 << 1, // defines the conductance of the p-driver output during periods of no modulation
ModGsPReg = 0x29 << 1, // defines the conductance of the p-driver output during periods of modulation
TModeReg = 0x2A << 1, // defines settings for the internal timer
@@ -138,7 +138,7 @@ public:
TReloadRegL = 0x2D << 1,
TCounterValueRegH = 0x2E << 1, // shows the 16-bit timer value
TCounterValueRegL = 0x2F << 1,
-
+
// Page 3: Test Registers
// 0x30 // reserved for future use
TestSel1Reg = 0x31 << 1, // general test signal configuration
@@ -157,7 +157,7 @@ public:
// 0x3E // reserved for production tests
// 0x3F // reserved for production tests
};
-
+
// MFRC522 commands. Described in chapter 10 of the datasheet.
enum PCD_Command : byte {
PCD_Idle = 0x00, // no action, cancels current command execution
@@ -171,7 +171,7 @@ public:
PCD_MFAuthent = 0x0E, // performs the MIFARE standard authentication as a reader
PCD_SoftReset = 0x0F // resets the MFRC522
};
-
+
// MFRC522 RxGain[2:0] masks, defines the receiver's signal voltage gain factor (on the PCD).
// Described in 9.3.3.6 / table 98 of the datasheet at http://www.nxp.com/documents/data_sheet/MFRC522.pdf
enum PCD_RxGain : byte {
@@ -187,7 +187,7 @@ public:
RxGain_avg = 0x04 << 4, // 100b - 33 dB, average, convenience for RxGain_33dB
RxGain_max = 0x07 << 4 // 111b - 48 dB, maximum, convenience for RxGain_48dB
};
-
+
// Commands sent to the PICC.
enum PICC_Command : byte {
// The commands used by the PCD to manage communication with several PICCs (ISO 14443-3, Type A, section 6.4)
@@ -214,18 +214,18 @@ public:
// The PICC_CMD_MF_READ and PICC_CMD_MF_WRITE can also be used for MIFARE Ultralight.
PICC_CMD_UL_WRITE = 0xA2 // Writes one 4 byte page to the PICC.
};
-
+
// MIFARE constants that does not fit anywhere else
enum MIFARE_Misc {
MF_ACK = 0xA, // The MIFARE Classic uses a 4 bit ACK/NAK. Any other value than 0xA is NAK.
MF_KEY_SIZE = 6 // A Mifare Crypto1 key is 6 bytes.
};
-
+
// PICC types we can detect. Remember to update PICC_GetTypeName() if you add more.
// last value set to 0xff, then compiler uses less ram, it seems some optimisations are triggered
enum PICC_Type : byte {
PICC_TYPE_UNKNOWN ,
- PICC_TYPE_ISO_14443_4 , // PICC compliant with ISO/IEC 14443-4
+ PICC_TYPE_ISO_14443_4 , // PICC compliant with ISO/IEC 14443-4
PICC_TYPE_ISO_18092 , // PICC compliant with ISO/IEC 18092 (NFC)
PICC_TYPE_MIFARE_MINI , // MIFARE Classic protocol, 320 bytes
PICC_TYPE_MIFARE_1K , // MIFARE Classic protocol, 1KB
@@ -236,7 +236,7 @@ public:
PICC_TYPE_TNP3XXX , // Only mentioned in NXP AN 10833 MIFARE Type Identification Procedure
PICC_TYPE_NOT_COMPLETE = 0xff // SAK indicates UID is not complete.
};
-
+
// Return codes from the functions in this class. Remember to update GetStatusCodeName() if you add more.
// last value set to 0xff, then compiler uses less ram, it seems some optimisations are triggered
enum StatusCode : byte {
@@ -250,7 +250,7 @@ public:
STATUS_CRC_WRONG , // The CRC_A does not match
STATUS_MIFARE_NACK = 0xff // A MIFARE PICC responded with NAK.
};
-
+
// A struct used for passing the UID of a PICC.
typedef struct {
byte size; // Number of bytes in the UID. 4, 7 or 10.
@@ -262,17 +262,17 @@ public:
typedef struct {
byte keyByte[MF_KEY_SIZE];
} MIFARE_Key;
-
+
// Member variables
Uid uid; // Used by PICC_ReadCardSerial().
-
+
/////////////////////////////////////////////////////////////////////////////////////
// Functions for setting up the Arduino
/////////////////////////////////////////////////////////////////////////////////////
MFRC522();
MFRC522(byte resetPowerDownPin);
MFRC522(byte chipSelectPin, byte resetPowerDownPin);
-
+
/////////////////////////////////////////////////////////////////////////////////////
// Basic interface functions for communicating with the MFRC522
/////////////////////////////////////////////////////////////////////////////////////
@@ -283,7 +283,7 @@ public:
void PCD_SetRegisterBitMask(PCD_Register reg, byte mask);
void PCD_ClearRegisterBitMask(PCD_Register reg, byte mask);
StatusCode PCD_CalculateCRC(byte *data, byte length, byte *result);
-
+
/////////////////////////////////////////////////////////////////////////////////////
// Functions for manipulating the MFRC522
/////////////////////////////////////////////////////////////////////////////////////
@@ -296,13 +296,13 @@ public:
byte PCD_GetAntennaGain();
void PCD_SetAntennaGain(byte mask);
bool PCD_PerformSelfTest();
-
+
/////////////////////////////////////////////////////////////////////////////////////
// Power control functions
/////////////////////////////////////////////////////////////////////////////////////
void PCD_SoftPowerDown();
void PCD_SoftPowerUp();
-
+
/////////////////////////////////////////////////////////////////////////////////////
// Functions for communicating with PICCs
/////////////////////////////////////////////////////////////////////////////////////
@@ -329,19 +329,21 @@ public:
StatusCode MIFARE_GetValue(byte blockAddr, int32_t *value);
StatusCode MIFARE_SetValue(byte blockAddr, int32_t value);
StatusCode PCD_NTAG216_AUTH(byte *passWord, byte pACK[]);
-
+
/////////////////////////////////////////////////////////////////////////////////////
// Support functions
/////////////////////////////////////////////////////////////////////////////////////
StatusCode PCD_MIFARE_Transceive(byte *sendData, byte sendLen, bool acceptTimeout = false);
// old function used too much memory, now name moved to flash; if you need char, copy from flash to memory
//const char *GetStatusCodeName(byte code);
- static const __FlashStringHelper *GetStatusCodeName(StatusCode code);
+// static const __FlashStringHelper *GetStatusCodeName(StatusCode code);
+ String GetStatusCodeName(StatusCode code);
static PICC_Type PICC_GetType(byte sak);
// old function used too much memory, now name moved to flash; if you need char, copy from flash to memory
//const char *PICC_GetTypeName(byte type);
- static const __FlashStringHelper *PICC_GetTypeName(PICC_Type type);
-
+// static const __FlashStringHelper *PICC_GetTypeName(PICC_Type type);
+ String PICC_GetTypeName(PICC_Type type);
+
// Support functions for debuging
void PCD_DumpVersionToSerial();
void PICC_DumpToSerial(Uid *uid);
@@ -349,19 +351,19 @@ public:
void PICC_DumpMifareClassicToSerial(Uid *uid, PICC_Type piccType, MIFARE_Key *key);
void PICC_DumpMifareClassicSectorToSerial(Uid *uid, MIFARE_Key *key, byte sector);
void PICC_DumpMifareUltralightToSerial();
-
+
// Advanced functions for MIFARE
void MIFARE_SetAccessBits(byte *accessBitBuffer, byte g0, byte g1, byte g2, byte g3);
bool MIFARE_OpenUidBackdoor(bool logErrors);
bool MIFARE_SetUid(byte *newUid, byte uidSize, bool logErrors);
bool MIFARE_UnbrickUidSector(bool logErrors);
-
+
/////////////////////////////////////////////////////////////////////////////////////
// Convenience functions - does not add extra functionality
/////////////////////////////////////////////////////////////////////////////////////
virtual bool PICC_IsNewCardPresent();
virtual bool PICC_ReadCardSerial();
-
+
protected:
byte _chipSelectPin; // Arduino pin connected to MFRC522's SPI slave select input (Pin 24, NSS, active low)
byte _resetPowerDownPin; // Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low)
diff --git a/lib/lib_i2c/Adafruit_PM25AQI-1.0.6/.gitignore b/lib/lib_i2c/Adafruit_PM25AQI-1.0.6/.gitignore
new file mode 100644
index 000000000..f74c7b473
--- /dev/null
+++ b/lib/lib_i2c/Adafruit_PM25AQI-1.0.6/.gitignore
@@ -0,0 +1,11 @@
+*~
+Doxyfile*
+doxygen_sqlite3.db
+html# osx
+.DS_Store
+
+# doxygen
+Doxyfile*
+doxygen_sqlite3.db
+html
+*.tmp
diff --git a/lib/lib_i2c/Adafruit_PM25AQI-1.0.6/Adafruit_PM25AQI.cpp b/lib/lib_i2c/Adafruit_PM25AQI-1.0.6/Adafruit_PM25AQI.cpp
new file mode 100644
index 000000000..a6aee3b8e
--- /dev/null
+++ b/lib/lib_i2c/Adafruit_PM25AQI-1.0.6/Adafruit_PM25AQI.cpp
@@ -0,0 +1,133 @@
+/*!
+ * @file Adafruit_PM25AQI.cpp
+ *
+ * @mainpage Adafruit PM2.5 air quality sensor driver
+ *
+ * @section intro_sec Introduction
+ *
+ * This is the documentation for Adafruit's PM2.5 AQI driver for the
+ * Arduino platform. It is designed specifically to work with the
+ * Adafruit PM2.5 Air quality sensors: http://www.adafruit.com/products/4632
+ *
+ * These sensors use I2C or UART to communicate.
+ *
+ * Adafruit invests time and resources providing this open source code,
+ * please support Adafruit and open-source hardware by purchasing
+ * products from Adafruit!
+ *
+ *
+ * @section author Author
+ * Written by Ladyada for Adafruit Industries.
+ *
+ * @section license License
+ * BSD license, all text here must be included in any redistribution.
+ *
+ */
+
+#include "Adafruit_PM25AQI.h"
+
+/*!
+ * @brief Instantiates a new PM25AQI class
+ */
+Adafruit_PM25AQI::Adafruit_PM25AQI() {}
+
+/*!
+ * @brief Setups the hardware and detects a valid PMSA003I. Initializes I2C.
+ * @param theWire
+ * Optional pointer to I2C interface, otherwise use Wire
+ * @return True if PMSA003I found on I2C, False if something went wrong!
+ */
+bool Adafruit_PM25AQI::begin_I2C(TwoWire *theWire) {
+ if (!i2c_dev) {
+ i2c_dev = new Adafruit_I2CDevice(PMSA003I_I2CADDR_DEFAULT, theWire);
+ }
+
+ if (!i2c_dev->begin()) {
+ return false;
+ }
+
+ return true;
+}
+
+/*!
+ * @brief Setups the hardware and detects a valid UART PM2.5
+ * @param theSerial
+ * Pointer to Stream (HardwareSerial/SoftwareSerial) interface
+ * @return True
+ */
+bool Adafruit_PM25AQI::begin_UART(Stream *theSerial) {
+ serial_dev = theSerial;
+
+ return true;
+}
+
+/*!
+ * @brief Setups the hardware and detects a valid UART PM2.5
+ * @param data
+ * Pointer to PM25_AQI_Data that will be filled by read()ing
+ * @return True on successful read, false if timed out or bad data
+ */
+bool Adafruit_PM25AQI::read(PM25_AQI_Data *data) {
+ uint8_t buffer[32];
+ uint16_t sum = 0;
+
+ if (!data) {
+ return false;
+ }
+
+ if (i2c_dev) { // ok using i2c?
+ if (!i2c_dev->read(buffer, 32)) {
+ return false;
+ }
+ } else if (serial_dev) { // ok using uart
+ if (!serial_dev->available()) {
+ return false;
+ }
+ int skipped = 0;
+ while ((skipped < 32) && (serial_dev->peek() != 0x42)) {
+ serial_dev->read();
+ skipped++;
+ if (!serial_dev->available()) {
+ return false;
+ }
+ }
+ if (serial_dev->peek() != 0x42) {
+ serial_dev->read();
+ return false;
+ }
+ // Now read all 32 bytes
+ if (serial_dev->available() < 32) {
+ return false;
+ }
+ serial_dev->readBytes(buffer, 32);
+ } else {
+ return false;
+ }
+
+ // Check that start byte is correct!
+ if (buffer[0] != 0x42) {
+ return false;
+ }
+
+ // get checksum ready
+ for (uint8_t i = 0; i < 30; i++) {
+ sum += buffer[i];
+ }
+
+ // The data comes in endian'd, this solves it so it works on all platforms
+ uint16_t buffer_u16[15];
+ for (uint8_t i = 0; i < 15; i++) {
+ buffer_u16[i] = buffer[2 + i * 2 + 1];
+ buffer_u16[i] += (buffer[2 + i * 2] << 8);
+ }
+
+ // put it into a nice struct :)
+ memcpy((void *)data, (void *)buffer_u16, 30);
+
+ if (sum != data->checksum) {
+ return false;
+ }
+
+ // success!
+ return true;
+}
diff --git a/lib/lib_i2c/Adafruit_PM25AQI-1.0.6/Adafruit_PM25AQI.h b/lib/lib_i2c/Adafruit_PM25AQI-1.0.6/Adafruit_PM25AQI.h
new file mode 100644
index 000000000..cd304b312
--- /dev/null
+++ b/lib/lib_i2c/Adafruit_PM25AQI-1.0.6/Adafruit_PM25AQI.h
@@ -0,0 +1,65 @@
+/*!
+ * @file Adafruit_PM25AQI.h
+ *
+ * This is the documentation for Adafruit's PM25 AQI driver for the
+ * Arduino platform. It is designed specifically to work with the
+ * Adafruit PM25 air quality sensors: http://www.adafruit.com/products/4632
+ *
+ * These sensors use I2C or UART to communicate.
+ *
+ * Adafruit invests time and resources providing this open source code,
+ * please support Adafruit and open-source hardware by purchasing
+ * products from Adafruit!
+ *
+ * Written by Ladyada for Adafruit Industries.
+ *
+ * BSD license, all text here must be included in any redistribution.
+ *
+ */
+
+#ifndef ADAFRUIT_PM25AQI_H
+#define ADAFRUIT_PM25AQI_H
+
+#include "Arduino.h"
+#include
+
+// the i2c address
+#define PMSA003I_I2CADDR_DEFAULT 0x12 ///< PMSA003I has only one I2C address
+
+/**! Structure holding Plantower's standard packet **/
+typedef struct PMSAQIdata {
+ uint16_t framelen; ///< How long this data chunk is
+ uint16_t pm10_standard, ///< Standard PM1.0
+ pm25_standard, ///< Standard PM2.5
+ pm100_standard; ///< Standard PM10.0
+ uint16_t pm10_env, ///< Environmental PM1.0
+ pm25_env, ///< Environmental PM2.5
+ pm100_env; ///< Environmental PM10.0
+ uint16_t particles_03um, ///< 0.3um Particle Count
+ particles_05um, ///< 0.5um Particle Count
+ particles_10um, ///< 1.0um Particle Count
+ particles_25um, ///< 2.5um Particle Count
+ particles_50um, ///< 5.0um Particle Count
+ particles_100um; ///< 10.0um Particle Count
+ uint16_t unused; ///< Unused
+ uint16_t checksum; ///< Packet checksum
+} PM25_AQI_Data;
+
+/*!
+ * @brief Class that stores state and functions for interacting with
+ * PM2.5 Air Quality Sensor
+ */
+class Adafruit_PM25AQI {
+public:
+ Adafruit_PM25AQI();
+ bool begin_I2C(TwoWire *theWire = &Wire);
+ bool begin_UART(Stream *theStream);
+ bool read(PM25_AQI_Data *data);
+
+private:
+ Adafruit_I2CDevice *i2c_dev = NULL;
+ Stream *serial_dev = NULL;
+ uint8_t _readbuffer[32];
+};
+
+#endif
diff --git a/lib/lib_i2c/Adafruit_PM25AQI-1.0.6/README.md b/lib/lib_i2c/Adafruit_PM25AQI-1.0.6/README.md
new file mode 100644
index 000000000..527954ab4
--- /dev/null
+++ b/lib/lib_i2c/Adafruit_PM25AQI-1.0.6/README.md
@@ -0,0 +1,49 @@
+# Adafruit PM2.5 Air Quality sensor [](https://github.com/adafruit/Adafruit_PM25AQI/actions)[](http://adafruit.github.io/Adafruit_PM25AQI/html/index.html)
+
+This is the Adafruit PM25AQI Arduino Library for Arduino
+Tested and works great with the Adafruit PM2.5 Air Quality Sensor and Breadboard Adapter Kit
+
+[ ](https://www.adafruit.com/products/3686)
+
+Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit!
+
+# Installation
+To install, use the Arduino Library Manager and search for "Adafruit PM25 AQI" and install the library.
+
+## Dependencies
+ * [Adafruit BusIO](https://github.com/adafruit/Adafruit_BusIO)
+
+# Contributing
+
+Contributions are welcome! Please read our [Code of Conduct](https://github.com/adafruit/Adafruit_PM25AQI/blob/master/CODE_OF_CONDUCT.md>)
+before contributing to help this project stay welcoming.
+
+## Documentation and doxygen
+Documentation is produced by doxygen. Contributions should include documentation for any new code added.
+
+Some examples of how to use doxygen can be found in these guide pages:
+
+https://learn.adafruit.com/the-well-automated-arduino-library/doxygen
+
+https://learn.adafruit.com/the-well-automated-arduino-library/doxygen-tips
+
+## Formatting and clang-format
+This library uses [`clang-format`](https://releases.llvm.org/download.html) to standardize the formatting of `.cpp` and `.h` files.
+Contributions should be formatted using `clang-format`:
+
+The `-i` flag will make the changes to the file.
+```bash
+clang-format -i *.cpp *.h
+```
+If you prefer to make the changes yourself, running `clang-format` without the `-i` flag will print out a formatted version of the file. You can save this to a file and diff it against the original to see the changes.
+
+Note that the formatting output by `clang-format` is what the automated formatting checker will expect. Any diffs from this formatting will result in a failed build until they are addressed. Using the `-i` flag is highly recommended.
+
+### clang-format resources
+ * [Binary builds and source available on the LLVM downloads page](https://releases.llvm.org/download.html)
+ * [Documentation and IDE integration](https://clang.llvm.org/docs/ClangFormat.html)
+
+## About this Driver
+Written by Ladyada for Adafruit Industries.
+BSD license, check license.txt for more information
+All text above must be included in any redistribution
diff --git a/lib/lib_i2c/Adafruit_PM25AQI-1.0.6/code-of-conduct.md b/lib/lib_i2c/Adafruit_PM25AQI-1.0.6/code-of-conduct.md
new file mode 100644
index 000000000..8ee6e4498
--- /dev/null
+++ b/lib/lib_i2c/Adafruit_PM25AQI-1.0.6/code-of-conduct.md
@@ -0,0 +1,127 @@
+# Adafruit Community Code of Conduct
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as
+contributors and leaders pledge to making participation in our project and
+our community a harassment-free experience for everyone, regardless of age, body
+size, disability, ethnicity, gender identity and expression, level or type of
+experience, education, socio-economic status, nationality, personal appearance,
+race, religion, or sexual identity and orientation.
+
+## Our Standards
+
+We are committed to providing a friendly, safe and welcoming environment for
+all.
+
+Examples of behavior that contributes to creating a positive environment
+include:
+
+* Be kind and courteous to others
+* Using welcoming and inclusive language
+* Being respectful of differing viewpoints and experiences
+* Collaborating with other community members
+* Gracefully accepting constructive criticism
+* Focusing on what is best for the community
+* Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery and sexual attention or advances
+* The use of inappropriate images, including in a community member's avatar
+* The use of inappropriate language, including in a community member's nickname
+* Any spamming, flaming, baiting or other attention-stealing behavior
+* Excessive or unwelcome helping; answering outside the scope of the question
+ asked
+* Trolling, insulting/derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or electronic
+ address, without explicit permission
+* Other conduct which could reasonably be considered inappropriate
+
+The goal of the standards and moderation guidelines outlined here is to build
+and maintain a respectful community. We ask that you don’t just aim to be
+"technically unimpeachable", but rather try to be your best self.
+
+We value many things beyond technical expertise, including collaboration and
+supporting others within our community. Providing a positive experience for
+other community members can have a much more significant impact than simply
+providing the correct answer.
+
+## Our Responsibilities
+
+Project leaders are responsible for clarifying the standards of acceptable
+behavior and are expected to take appropriate and fair corrective action in
+response to any instances of unacceptable behavior.
+
+Project leaders have the right and responsibility to remove, edit, or
+reject messages, comments, commits, code, issues, and other contributions
+that are not aligned to this Code of Conduct, or to ban temporarily or
+permanently any community member for other behaviors that they deem
+inappropriate, threatening, offensive, or harmful.
+
+## Moderation
+
+Instances of behaviors that violate the Adafruit Community Code of Conduct
+may be reported by any member of the community. Community members are
+encouraged to report these situations, including situations they witness
+involving other community members.
+
+You may report in the following ways:
+
+In any situation, you may send an email to .
+
+On the Adafruit Discord, you may send an open message from any channel
+to all Community Helpers by tagging @community helpers. You may also send an
+open message from any channel, or a direct message to @kattni#1507,
+@tannewt#4653, @Dan Halbert#1614, @cater#2442, @sommersoft#0222, or
+@Andon#8175.
+
+Email and direct message reports will be kept confidential.
+
+In situations on Discord where the issue is particularly egregious, possibly
+illegal, requires immediate action, or violates the Discord terms of service,
+you should also report the message directly to Discord.
+
+These are the steps for upholding our community’s standards of conduct.
+
+1. Any member of the community may report any situation that violates the
+Adafruit Community Code of Conduct. All reports will be reviewed and
+investigated.
+2. If the behavior is an egregious violation, the community member who
+committed the violation may be banned immediately, without warning.
+3. Otherwise, moderators will first respond to such behavior with a warning.
+4. Moderators follow a soft "three strikes" policy - the community member may
+be given another chance, if they are receptive to the warning and change their
+behavior.
+5. If the community member is unreceptive or unreasonable when warned by a
+moderator, or the warning goes unheeded, they may be banned for a first or
+second offense. Repeated offenses will result in the community member being
+banned.
+
+## Scope
+
+This Code of Conduct and the enforcement policies listed above apply to all
+Adafruit Community venues. This includes but is not limited to any community
+spaces (both public and private), the entire Adafruit Discord server, and
+Adafruit GitHub repositories. Examples of Adafruit Community spaces include
+but are not limited to meet-ups, audio chats on the Adafruit Discord, or
+interaction at a conference.
+
+This Code of Conduct applies both within project spaces and in public spaces
+when an individual is representing the project or its community. As a community
+member, you are representing our community, and are expected to behave
+accordingly.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage],
+version 1.4, available at
+,
+and the [Rust Code of Conduct](https://www.rust-lang.org/en-US/conduct.html).
+
+For other projects adopting the Adafruit Community Code of
+Conduct, please contact the maintainers of those projects for enforcement.
+If you wish to use this code of conduct for your own project, consider
+explicitly mentioning your moderation policy or making a copy with your
+own moderation policy so as to avoid confusion.
diff --git a/lib/lib_i2c/Adafruit_PM25AQI-1.0.6/examples/PM25_test/PM25_test.ino b/lib/lib_i2c/Adafruit_PM25AQI-1.0.6/examples/PM25_test/PM25_test.ino
new file mode 100644
index 000000000..9b7454c20
--- /dev/null
+++ b/lib/lib_i2c/Adafruit_PM25AQI-1.0.6/examples/PM25_test/PM25_test.ino
@@ -0,0 +1,73 @@
+/* Test sketch for Adafruit PM2.5 sensor with UART or I2C */
+
+#include "Adafruit_PM25AQI.h"
+
+// If your PM2.5 is UART only, for UNO and others (without hardware serial)
+// we must use software serial...
+// pin #2 is IN from sensor (TX pin on sensor), leave pin #3 disconnected
+// comment these two lines if using hardware serial
+//#include
+//SoftwareSerial pmSerial(2, 3);
+
+Adafruit_PM25AQI aqi = Adafruit_PM25AQI();
+
+void setup() {
+ // Wait for serial monitor to open
+ Serial.begin(115200);
+ while (!Serial) delay(10);
+
+ Serial.println("Adafruit PMSA003I Air Quality Sensor");
+
+ // Wait one second for sensor to boot up!
+ delay(1000);
+
+ // If using serial, initialize it and set baudrate before starting!
+ // Uncomment one of the following
+ //Serial1.begin(9600);
+ //pmSerial.begin(9600);
+
+ // There are 3 options for connectivity!
+ if (! aqi.begin_I2C()) { // connect to the sensor over I2C
+ //if (! aqi.begin_UART(&Serial1)) { // connect to the sensor over hardware serial
+ //if (! aqi.begin_UART(&pmSerial)) { // connect to the sensor over software serial
+ Serial.println("Could not find PM 2.5 sensor!");
+ while (1) delay(10);
+ }
+
+ Serial.println("PM25 found!");
+}
+
+void loop() {
+ PM25_AQI_Data data;
+
+ if (! aqi.read(&data)) {
+ Serial.println("Could not read from AQI");
+ delay(500); // try again in a bit!
+ return;
+ }
+ Serial.println("AQI reading success");
+
+ Serial.println();
+ Serial.println(F("---------------------------------------"));
+ Serial.println(F("Concentration Units (standard)"));
+ Serial.println(F("---------------------------------------"));
+ Serial.print(F("PM 1.0: ")); Serial.print(data.pm10_standard);
+ Serial.print(F("\t\tPM 2.5: ")); Serial.print(data.pm25_standard);
+ Serial.print(F("\t\tPM 10: ")); Serial.println(data.pm100_standard);
+ Serial.println(F("Concentration Units (environmental)"));
+ Serial.println(F("---------------------------------------"));
+ Serial.print(F("PM 1.0: ")); Serial.print(data.pm10_env);
+ Serial.print(F("\t\tPM 2.5: ")); Serial.print(data.pm25_env);
+ Serial.print(F("\t\tPM 10: ")); Serial.println(data.pm100_env);
+ Serial.println(F("---------------------------------------"));
+ Serial.print(F("Particles > 0.3um / 0.1L air:")); Serial.println(data.particles_03um);
+ Serial.print(F("Particles > 0.5um / 0.1L air:")); Serial.println(data.particles_05um);
+ Serial.print(F("Particles > 1.0um / 0.1L air:")); Serial.println(data.particles_10um);
+ Serial.print(F("Particles > 2.5um / 0.1L air:")); Serial.println(data.particles_25um);
+ Serial.print(F("Particles > 5.0um / 0.1L air:")); Serial.println(data.particles_50um);
+ Serial.print(F("Particles > 10 um / 0.1L air:")); Serial.println(data.particles_100um);
+ Serial.println(F("---------------------------------------"));
+
+
+ delay(1000);
+}
diff --git a/lib/lib_i2c/Adafruit_PM25AQI-1.0.6/library.properties b/lib/lib_i2c/Adafruit_PM25AQI-1.0.6/library.properties
new file mode 100644
index 000000000..570e61d67
--- /dev/null
+++ b/lib/lib_i2c/Adafruit_PM25AQI-1.0.6/library.properties
@@ -0,0 +1,10 @@
+name=Adafruit PM25 AQI Sensor
+version=1.0.6
+author=Adafruit
+maintainer=Adafruit
+sentence=This is an Arduino library for the Adafruit PM2.5 Air Quality Sensor
+paragraph=This is an Arduino library for the Adafruit PM2.5 Air Quality Sensor
+category=Sensors
+url=https://github.com/adafruit/Adafruit_PM25AQI
+architectures=*
+depends=Adafruit BusIO
diff --git a/lib/lib_i2c/Adafruit_PM25AQI-1.0.6/license.txt b/lib/lib_i2c/Adafruit_PM25AQI-1.0.6/license.txt
new file mode 100644
index 000000000..f6a0f22b8
--- /dev/null
+++ b/lib/lib_i2c/Adafruit_PM25AQI-1.0.6/license.txt
@@ -0,0 +1,26 @@
+Software License Agreement (BSD License)
+
+Copyright (c) 2012, Adafruit Industries
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+3. Neither the name of the copyright holders nor the
+names of its contributors may be used to endorse or promote products
+derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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.
diff --git a/lib/libesp32/Berry-HttpClientLight/src/HTTPUpdateLight.cpp b/lib/libesp32/Berry-HttpClientLight/src/HTTPUpdateLight.cpp
index a3c798f1c..93b1008db 100644
--- a/lib/libesp32/Berry-HttpClientLight/src/HTTPUpdateLight.cpp
+++ b/lib/libesp32/Berry-HttpClientLight/src/HTTPUpdateLight.cpp
@@ -229,17 +229,17 @@ HTTPUpdateResult HTTPUpdateLight::handleUpdate(HTTPClientLight& http, const Stri
uint32_t http_connect_time = millis();
- int code = http.GET();
- int len = http.getSize();
+ int code = http.GET(); // 0 if ok or < 0 if error
+ int len = http.getSize(); // -1 if no info or > 0 when Content-Length is set by server
// Add specific logging for Tasmota
- if (len < 0) {
- if (len <= -1000) {
- AddLog(LOG_LEVEL_INFO, "OTA: TLS connection error %d after %d ms", -len - 1000, millis() - http_connect_time);
- } else if (len == -1) {
- AddLog(LOG_LEVEL_INFO, "OTA: Connection timeout after %d ms", len, millis() - http_connect_time);
+ if (len < 0) { // -1 if no info or > 0 when Content-Length is set by server
+ if (code <= -1000) { // BearSSL error 46 transformed to -1046
+ AddLog(LOG_LEVEL_INFO, "OTA: TLS connection error %d after %d ms", -code - 1000, millis() - http_connect_time);
+ } else if (code == -1) { // HTTPC_ERROR_CONNECTION_REFUSED
+ AddLog(LOG_LEVEL_INFO, "OTA: Connection timeout after %d ms", millis() - http_connect_time);
} else {
- AddLog(LOG_LEVEL_INFO, "OTA: Connection error %d after %d ms", len, millis() - http_connect_time);
+ AddLog(LOG_LEVEL_INFO, "OTA: Connection error %d after %d ms", code, millis() - http_connect_time);
}
} else {
AddLog(LOG_LEVEL_DEBUG, PSTR("OTA: Connected in %d ms, stack low mark %d"),
diff --git a/lib/libesp32/Berry-HttpClientLight/src/HttpClientLight.h b/lib/libesp32/Berry-HttpClientLight/src/HttpClientLight.h
index 8c3709399..59f532d08 100644
--- a/lib/libesp32/Berry-HttpClientLight/src/HttpClientLight.h
+++ b/lib/libesp32/Berry-HttpClientLight/src/HttpClientLight.h
@@ -247,7 +247,7 @@ protected:
/// request handling
String _host;
uint16_t _port = 0;
- int32_t _connectTimeout = -1;
+ int32_t _connectTimeout = HTTPCLIENT_DEFAULT_TCP_TIMEOUT; // Do not set to -1 as it fails WiFiClient connect()
bool _reuse = true;
uint16_t _tcpTimeout = HTTPCLIENT_DEFAULT_TCP_TIMEOUT;
bool _useHTTP10 = false;
diff --git a/lib/libesp32/ESP32-to-ESP8266-compat/src/ESP32Wifi.cpp b/lib/libesp32/ESP32-to-ESP8266-compat/src/ESP32Wifi.cpp
index e2522942d..d5d8edb3c 100644
--- a/lib/libesp32/ESP32-to-ESP8266-compat/src/ESP32Wifi.cpp
+++ b/lib/libesp32/ESP32-to-ESP8266-compat/src/ESP32Wifi.cpp
@@ -137,10 +137,10 @@ int WiFiClass32::getPhyMode() {
int phy_mode = 0; // " BGNL"
uint8_t protocol_bitmap;
if (esp_wifi_get_protocol(WIFI_IF_STA, &protocol_bitmap) == ESP_OK) {
- if (protocol_bitmap & 1) { phy_mode = WIFI_PHY_MODE_11B; } // 1 = 11b
- if (protocol_bitmap & 2) { phy_mode = WIFI_PHY_MODE_11G; } // 2 = 11bg
- if (protocol_bitmap & 4) { phy_mode = WIFI_PHY_MODE_11N; } // 3 = 11bgn
- if (protocol_bitmap & 8) { phy_mode = 4; } // Low rate
+ if (protocol_bitmap & 1) { phy_mode = TAS_WIFI_PHY_MODE_11B; } // 1 = 11b (WIFI_PHY_MODE_11B)
+ if (protocol_bitmap & 2) { phy_mode = TAS_WIFI_PHY_MODE_11G; } // 2 = 11bg (WIFI_PHY_MODE_11G)
+ if (protocol_bitmap & 4) { phy_mode = TAS_WIFI_PHY_MODE_11N; } // 3 = 11bgn (WIFI_PHY_MODE_11N)
+ if (protocol_bitmap & 8) { phy_mode = 4; } // Low rate (WIFI_PHY_MODE_LR)
}
return phy_mode;
}
@@ -240,7 +240,7 @@ int WiFiClass32::hostByName(const char* aHostname, IPAddress& aResult, int32_t t
ip_addr_t addr;
aResult = (uint32_t) 0; // by default set to IPv4 0.0.0.0
dns_ipaddr = *IP4_ADDR_ANY; // by default set to IPv4 0.0.0.0
-
+
scrubDNS(); // internal calls to reconnect can zero the DNS servers, save DNS for future use
ip_addr_counter++; // increase counter, from now ignore previous responses
clearStatusBits(WIFI_DNS_IDLE_BIT | WIFI_DNS_DONE_BIT);
@@ -260,7 +260,7 @@ int WiFiClass32::hostByName(const char* aHostname, IPAddress& aResult, int32_t t
waitStatusBits(WIFI_DNS_DONE_BIT, timer_ms); //real internal timeout in lwip library is 14[s]
clearStatusBits(WIFI_DNS_DONE_BIT);
}
-
+
if (!ip_addr_isany_val(dns_ipaddr)) {
#ifdef USE_IPV6
aResult = dns_ipaddr;
diff --git a/lib/libesp32/ESP32-to-ESP8266-compat/src/ESP8266WiFi.h b/lib/libesp32/ESP32-to-ESP8266-compat/src/ESP8266WiFi.h
index 0206b0ec5..943b89e9a 100644
--- a/lib/libesp32/ESP32-to-ESP8266-compat/src/ESP8266WiFi.h
+++ b/lib/libesp32/ESP32-to-ESP8266-compat/src/ESP8266WiFi.h
@@ -29,11 +29,25 @@
#define WIFI_LIGHT_SLEEP 1
#define WIFI_MODEM_SLEEP 2
+// ESP8266
typedef enum WiFiPhyMode
{
- WIFI_PHY_MODE_11B = 1, WIFI_PHY_MODE_11G = 2, WIFI_PHY_MODE_11N = 3
+ TAS_WIFI_PHY_MODE_LR = 0, TAS_WIFI_PHY_MODE_11B = 1, TAS_WIFI_PHY_MODE_11G = 2, TAS_WIFI_PHY_MODE_11N = 3
} WiFiPhyMode_t;
+/*
+// ESP32 was never defined until IDF 4.4
+typedef enum
+{
+ WIFI_PHY_MODE_LR, // PHY mode for Low Rate
+ WIFI_PHY_MODE_11B, // PHY mode for 11b
+ WIFI_PHY_MODE_11G, // PHY mode for 11g
+ WIFI_PHY_MODE_HT20, // PHY mode for 11n Bandwidth HT20
+ WIFI_PHY_MODE_HT40, // PHY mode for 11n Bandwidth HT40
+ WIFI_PHY_MODE_HE20, // PHY mode for 11n Bandwidth HE20
+} wifi_phy_mode_t;
+*/
+
class WiFiClass32 : public WiFiClass
{
public:
diff --git a/lib/libesp32/ESP32-to-ESP8266-compat/src/esp8266toEsp32.cpp b/lib/libesp32/ESP32-to-ESP8266-compat/src/esp8266toEsp32.cpp
index 419442290..dfc8c3dab 100644
--- a/lib/libesp32/ESP32-to-ESP8266-compat/src/esp8266toEsp32.cpp
+++ b/lib/libesp32/ESP32-to-ESP8266-compat/src/esp8266toEsp32.cpp
@@ -207,7 +207,7 @@ void analogWriteFreqRange(int32_t freq, int32_t range, int32_t pin) {
_analogInit(); // make sure the mapping array is initialized
uint32_t timer0_freq = timer_freq_hz[0]; // global values
uint8_t timer0_res = timer_duty_resolution[0];
-
+
int32_t timer = 0;
int32_t res = timer0_res;
if (pin < 0) {
@@ -233,7 +233,7 @@ void analogWriteFreqRange(int32_t freq, int32_t range, int32_t pin) {
if (timer != 0) {
ledcSetTimer(chan, 0);
timer = 0;
- }
+ }
// else nothing to change
} else {
// specific (non-global) values, require a specific timer
@@ -293,7 +293,7 @@ int32_t analogAttach(uint32_t pin, bool output_invert) { // returns ledc chan
AddLog(LOG_LEVEL_INFO, "PWM: no more PWM (ledc) channel for GPIO %i", pin);
return -1;
}
-
+
// new channel attached to pin
pin_to_channel[pin] = chan + 1;
diff --git a/lib/libesp32/ESP32-to-ESP8266-compat/src/esp8266toEsp32.h b/lib/libesp32/ESP32-to-ESP8266-compat/src/esp8266toEsp32.h
index 23ed7f1b4..c544d5d30 100644
--- a/lib/libesp32/ESP32-to-ESP8266-compat/src/esp8266toEsp32.h
+++ b/lib/libesp32/ESP32-to-ESP8266-compat/src/esp8266toEsp32.h
@@ -25,14 +25,14 @@
/*******************************************************************************************\
* ESP32/S2/S3/C3... PWM analog support
- *
+ *
* The following supersedes Arduino framework and provides more granular control:
* - fine grained phase control (in addition to duty cycle)
* - fine control of PWM frequency and resolution per GPIO
- *
+ *
* By default, all PWM are using the same timer called Timer 0.
* Changes in frequency of resolution apply to all PWM using Timer 0.
- *
+ *
* You can specify a different a different resolution/frequency for
* specific GPIOs, this will internally assign a new timer to the GPIO.
* The limit is 3 specific values in addition to the global value.
@@ -129,7 +129,7 @@ uint32_t analogGetTimerFrequency(uint8_t timer);
#define os_delay_us ets_delay_us
// Serial minimal type to hold the config
typedef int SerConfu8;
-typedef int SerialConfig;
+//typedef int SerialConfig; // Will be replaced enum in esp32_hal-uart.h (#7926)
//
// UDP
diff --git a/lib/libesp32/berry/default/be_modtab.c b/lib/libesp32/berry/default/be_modtab.c
index e95c65ba2..d85c26177 100644
--- a/lib/libesp32/berry/default/be_modtab.c
+++ b/lib/libesp32/berry/default/be_modtab.c
@@ -50,6 +50,7 @@ be_extern_native_module(partition_core);
be_extern_native_module(crc);
be_extern_native_module(crypto);
be_extern_native_module(ULP);
+be_extern_native_module(TFL);
be_extern_native_module(mdns);
#ifdef USE_ZIGBEE
be_extern_native_module(zigbee);
@@ -171,6 +172,9 @@ BERRY_LOCAL const bntvmodule* const be_module_table[] = {
#if defined(USE_BERRY_ULP) && ((CONFIG_IDF_TARGET_ESP32) || defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32S3))
&be_native_module(ULP),
#endif // USE_BERRY_ULP
+#if defined(USE_BERRY_TF_LITE)
+ &be_native_module(TFL),
+#endif //USE_BERRY_TF_LITE
#if defined(USE_MI_ESP32) && !defined(USE_BLE_ESP32)
&be_native_module(MI32),
&be_native_module(BLE),
@@ -301,7 +305,7 @@ BERRY_LOCAL bclass_array be_class_table = {
#endif // USE_UFILESYS
&be_native_class(AudioOpusDecoder),
#endif // USE_I2S_AUDIO_BERRY
-#ifdef USE_BERRY_INT64
+#if defined(USE_BERRY_INT64) || defined(USE_MATTER_DEVICE)
&be_native_class(int64),
#endif
#endif // TASMOTA
diff --git a/lib/libesp32/berry/default/berry_conf.h b/lib/libesp32/berry/default/berry_conf.h
index 4c1294646..18d64ad81 100644
--- a/lib/libesp32/berry/default/berry_conf.h
+++ b/lib/libesp32/berry/default/berry_conf.h
@@ -259,7 +259,6 @@
* are not required.
* The default is to use the functions in the standard library.
**/
-#ifdef USE_BERRY_PSRAM
#ifdef __cplusplus
extern "C" {
#endif
@@ -270,6 +269,7 @@ extern "C" {
#ifdef __cplusplus
}
#endif
+#ifdef USE_BERRY_PSRAM
#define BE_EXPLICIT_MALLOC berry_malloc
#define BE_EXPLICIT_FREE berry_free
#define BE_EXPLICIT_REALLOC berry_realloc
@@ -306,6 +306,10 @@ extern "C" {
#undef BE_STACK_START
#define BE_STACK_START 200
#endif // USE_LVGL
+ #ifdef USE_MATTER_DEVICE
+ #undef BE_STACK_START
+ #define BE_STACK_START 256
+ #endif // USE_MATTER_DEVICE
#endif // USE_BERRY_DEBUG
#endif
diff --git a/lib/libesp32/berry/src/be_jsonlib.c b/lib/libesp32/berry/src/be_jsonlib.c
index 1d7049ea1..9550d642a 100644
--- a/lib/libesp32/berry/src/be_jsonlib.c
+++ b/lib/libesp32/berry/src/be_jsonlib.c
@@ -178,11 +178,20 @@ static const char* parser_string(bvm *vm, const char *json)
}
default: be_free(vm, buf, len); return NULL; /* error */
}
+ } else if(ch >= 0 && ch <= 0x1f) {
+ /* control characters must be escaped
+ as per https://www.rfc-editor.org/rfc/rfc7159#section-7 */
+ be_free(vm, buf, len);
+ return NULL;
} else {
*dst++ = (char)ch;
}
}
be_assert(ch == '"');
+ /* require the stack to have some free space for the string,
+ since parsing deeply nested objects might
+ crash the VM due to insufficient stack space. */
+ be_stack_require(vm, 1 + BE_STACK_FREE_MIN);
be_pushnstring(vm, buf, cast_int(dst - buf));
be_free(vm, buf, len);
return json + 1; /* skip '"' */
@@ -269,6 +278,92 @@ static const char* parser_array(bvm *vm, const char *json)
return json;
}
+static const char* parser_number(bvm *vm, const char *json)
+{
+ char c = *json++;
+ bbool is_neg = c == '-';
+ if(is_neg) {
+ c = *json++;
+ if(!is_digit(c)) {
+ /* minus must be followed by digit */
+ return NULL;
+ }
+ }
+ bint intv = 0;
+ if(c != '0') {
+ /* parse integer part */
+ while(is_digit(c)) {
+ intv = intv * 10 + c - '0';
+ c = *json++;
+ }
+
+ } else {
+ /*
+ Number starts with zero, this is only allowed
+ if the number is just '0' or
+ it has a fractional part or exponent.
+ */
+ c = *json++;
+
+ }
+ if(c != '.' && c != 'e' && c != 'E') {
+ /*
+ No fractional part or exponent follows, this is an integer.
+ If digits follow after it (for example due to a leading zero)
+ this will cause an error in the calling function.
+ */
+ be_pushint(vm, intv * (is_neg ? -1 : 1));
+ json--;
+ return json;
+ }
+ breal realval = (breal) intv;
+ if(c == '.') {
+
+ breal deci = 0.0, point = 0.1;
+ /* fractional part */
+ c = *json++;
+ if(!is_digit(c)) {
+ /* decimal point must be followed by digit */
+ return NULL;
+ }
+ while (is_digit(c)) {
+ deci = deci + ((breal)c - '0') * point;
+ point *= (breal)0.1;
+ c = *json++;
+ }
+
+ realval += deci;
+ }
+ if(c == 'e' || c == 'E') {
+ c = *json++;
+ /* exponent part */
+ breal ratio = c == '-' ? (breal)0.1 : 10;
+ if (c == '+' || c == '-') {
+ c = *json++;
+ if(!is_digit(c)) {
+ return NULL;
+ }
+ }
+ if(!is_digit(c)) {
+ /* e and sign must be followed by digit */
+ return NULL;
+ }
+ unsigned int e = 0;
+ while (is_digit(c)) {
+ e = e * 10 + c - '0';
+ c = *json++;
+ }
+ /* e > 0 must be here to prevent infinite loops when e overflows */
+ while (e--) {
+ realval *= ratio;
+ }
+ }
+
+ be_pushreal(vm, realval * (is_neg ? -1.0 : 1.0));
+ json--;
+ return json;
+}
+
/* parser json value */
static const char* parser_value(bvm *vm, const char *json)
{
@@ -288,11 +383,7 @@ static const char* parser_value(bvm *vm, const char *json)
return parser_null(vm, json);
default: /* number */
if (*json == '-' || is_digit(*json)) {
- /* check invalid JSON syntax: 0\d+ */
- if (json[0] == '0' && is_digit(json[1])) {
- return NULL;
- }
- return be_str2num(vm, json);
+ return parser_number(vm, json);
}
}
return NULL;
diff --git a/lib/libesp32/berry/src/be_solidifylib.c b/lib/libesp32/berry/src/be_solidifylib.c
index 58501e059..43d9107a3 100644
--- a/lib/libesp32/berry/src/be_solidifylib.c
+++ b/lib/libesp32/berry/src/be_solidifylib.c
@@ -19,6 +19,7 @@
#include
#include
#include
+#include
extern const bclass be_class_list;
extern const bclass be_class_map;
@@ -323,7 +324,7 @@ static void m_solidify_proto(bvm *vm, bbool str_literal, bproto *pr, const char
for (int32_t i = 0; i < pr->nproto; i++) {
size_t sub_len = strlen(func_name) + 10;
char sub_name[sub_len];
- snprintf(sub_name, sizeof(sub_name), "%s_%d", func_name, i);
+ snprintf(sub_name, sizeof(sub_name), "%s_%"PRId32, func_name, i);
m_solidify_proto(vm, str_literal, pr->ptab[i], sub_name, indent+2, fout);
logfmt(",\n");
}
@@ -361,7 +362,7 @@ static void m_solidify_proto(bvm *vm, bbool str_literal, bproto *pr, const char
logfmt("%*s( &(const binstruction[%2d]) { /* code */\n", indent, "", pr->codesize);
for (int pc = 0; pc < pr->codesize; pc++) {
uint32_t ins = pr->code[pc];
- logfmt("%*s 0x%08X, //", indent, "", ins);
+ logfmt("%*s 0x%08"PRIX32", //", indent, "", ins);
be_print_inst(ins, pc, fout);
bopcode op = IGET_OP(ins);
if (op == OP_GETGBL || op == OP_SETGBL) {
diff --git a/lib/libesp32/berry/src/be_string.c b/lib/libesp32/berry/src/be_string.c
index 2ab0d1004..07a0fb162 100644
--- a/lib/libesp32/berry/src/be_string.c
+++ b/lib/libesp32/berry/src/be_string.c
@@ -167,6 +167,12 @@ static bstring* find_conststr(const char *str, size_t len)
uint32_t hash = str_hash(str, len);
bcstring *s = (bcstring*)tab->table[hash % tab->size];
for (; s != NULL; s = next(s)) {
+ if (len == 0 && s->slen == 0) {
+ /* special case for the empty string,
+ since we don't want to compare it using strncmp,
+ because str might be NULL */
+ return (bstring*)s;
+ }
if (len == s->slen && !strncmp(str, s->s, len)) {
return (bstring*)s;
}
diff --git a/lib/libesp32/berry/tests/json.be b/lib/libesp32/berry/tests/json.be
index 6e1aaaf8d..92df2f3e6 100644
--- a/lib/libesp32/berry/tests/json.be
+++ b/lib/libesp32/berry/tests/json.be
@@ -1,9 +1,14 @@
import json
-
+import string
# load tests
def assert_load(text, value)
- assert(json.load(text) == value)
+ var loaded_val = json.load(text)
+ var ok = loaded_val == value
+ if !ok
+ print(string.format('for JSON \'%s\' expected %s [%s] but got %s [%s]', text, str(value), type(value), str(loaded_val), type(loaded_val)))
+ end
+ assert(ok)
end
def assert_load_failed(text)
@@ -15,6 +20,13 @@ assert_load('true', true)
assert_load('false', false)
assert_load('123', 123)
assert_load('12.3', 12.3)
+assert_load('-0.1', -0.1)
+assert_load('1e2', 1e2)
+assert_load('1e+2', 1e+2)
+assert_load('1e-2', 1e-2)
+assert_load('1E2', 1e2)
+assert_load('1E+2', 1e+2)
+assert_load('1.2e7', 1.2e7)
assert_load('"abc"', 'abc')
# strings
assert_load('"\\"\\\\\\/\\b\\f\\n\\r\\t"', '\"\\/\b\f\n\r\t')
@@ -30,10 +42,22 @@ assert_load_failed('[1, null')
# object
var o = json.load('{"key": 1}')
assert(o['key'] == 1 && o.size() == 1)
+
+# parsing an empty string used to cause berry to pass a NULL to strncmp
+# make sure we catch this
+o = json.load('{"key": ""}')
+assert(o['key'] == '' && o.size() == 1)
+
assert_load_failed('{"ke: 1}')
assert_load_failed('{"key": 1x}')
assert_load_failed('{"key"}')
assert_load_failed('{"key": 1, }')
+# insanely long, nested object
+var text = 'null'
+for i : 0 .. 200
+ text = '{"nested":' + text + ', "num": 1, "bool": true, "str": "abc", "n": null, "arr": [1, 2, 3]}'
+end
+json.load(text) # do nothing, just check that it doesn't crash
# dump tests
diff --git a/lib/libesp32/berry/tests/json_advenced.be b/lib/libesp32/berry/tests/json_advenced.be
new file mode 100644
index 000000000..be3b87e0b
--- /dev/null
+++ b/lib/libesp32/berry/tests/json_advenced.be
@@ -0,0 +1,50 @@
+import os
+import json
+
+
+
+def assert_load_failed(text)
+ assert(json.load(text) == nil)
+end
+
+var input_file = open("tests/json_test_cases.json", "r")
+var test_cases = json.load(input_file.read())
+
+# check positive cases
+var has_failed_positives = false
+for case_name : test_cases["positive"].keys()
+ var case = test_cases["positive"][case_name]
+ var val = json.load(case)
+ if val == nil && case != "null"
+ print("Failed to load case: " + case_name)
+ has_failed_positives = true
+ end
+end
+
+if has_failed_positives
+ assert(false)
+end
+
+# check negative cases
+
+var has_failed_negatives = false
+for case_name : test_cases["negative"].keys()
+ var case = test_cases["negative"][case_name]
+
+ var val = json.load(case)
+ if val != nil
+ print("Failed to fail case: " + case_name + ", got: " + json.dump(val))
+ has_failed_negatives = true
+ end
+end
+
+if has_failed_negatives
+ # assert(false)
+end
+
+# check "any" cases, only for crashes
+
+for case_name : test_cases["any"].keys()
+ var case = test_cases["any"][case_name]
+ var val = json.load(case)
+end
diff --git a/lib/libesp32/berry/tests/json_test_cases.json b/lib/libesp32/berry/tests/json_test_cases.json
new file mode 100644
index 000000000..c6e8e4a53
--- /dev/null
+++ b/lib/libesp32/berry/tests/json_test_cases.json
@@ -0,0 +1,295 @@
+{
+ "___comment": "Adapted from https://github.com/nst/JSONTestSuite",
+ "positive": {
+ "array_arraysWithSpaces": "[[] ]",
+ "array_empty-string": "[\"\"]",
+ "array_empty": "[]",
+ "array_ending_with_newline": "[\"a\"]",
+ "array_false": "[false]",
+ "array_heterogeneous": "[null, 1, \"1\", {}]",
+ "array_null": "[null]",
+ "array_with_1_and_newline": "[1\n]",
+ "array_with_leading_space": " [1]",
+ "array_with_several_null": "[1,null,null,null,2]",
+ "array_with_trailing_space": "[2] ",
+ "number": "[123e65]",
+ "number_0e+1": "[0e+1]",
+ "number_0e1": "[0e1]",
+ "number_after_space": "[ 4]",
+ "number_double_close_to_zero": "[-0.000000000000000000000000000000000000000000000000000000000000000000000000000001]\n",
+ "number_int_with_exp": "[20e1]",
+ "number_minus_zero": "[-0]",
+ "number_negative_int": "[-123]",
+ "number_negative_one": "[-1]",
+ "number_negative_zero": "[-0]",
+ "number_real_capital_e": "[1E22]",
+ "number_real_capital_e_neg_exp": "[1E-2]",
+ "number_real_capital_e_pos_exp": "[1E+2]",
+ "number_real_exponent": "[123e45]",
+ "number_real_fraction_exponent": "[123.456e78]",
+ "number_real_neg_exp": "[1e-2]",
+ "number_real_pos_exponent": "[1e+2]",
+ "number_simple_int": "[123]",
+ "number_simple_real": "[123.456789]",
+ "object": "{\"asd\":\"sdf\", \"dfg\":\"fgh\"}",
+ "object_basic": "{\"asd\":\"sdf\"}",
+ "object_duplicated_key": "{\"a\":\"b\",\"a\":\"c\"}",
+ "object_duplicated_key_and_value": "{\"a\":\"b\",\"a\":\"b\"}",
+ "object_empty": "{}",
+ "object_empty_key": "{\"\":0}",
+ "object_escaped_null_in_key": "{\"foo\\u0000bar\": 42}",
+ "object_extreme_numbers": "{ \"min\": -1.0e+28, \"max\": 1.0e+28 }",
+ "object_long_strings": "{\"x\":[{\"id\": \"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"}], \"id\": \"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"}",
+ "object_simple": "{\"a\":[]}",
+ "object_string_unicode": "{\"title\":\"\\u041f\\u043e\\u043b\\u0442\\u043e\\u0440\\u0430 \\u0417\\u0435\\u043c\\u043b\\u0435\\u043a\\u043e\\u043f\\u0430\" }",
+ "object_with_newlines": "{\n\"a\": \"b\"\n}",
+ "string_1_2_3_bytes_UTF-8_sequences": "[\"\\u0060\\u012a\\u12AB\"]",
+ "string_accepted_surrogate_pair": "[\"\\uD801\\udc37\"]",
+ "string_accepted_surrogate_pairs": "[\"\\ud83d\\ude39\\ud83d\\udc8d\"]",
+ "string_allowed_escapes": "[\"\\\"\\\\\\/\\b\\f\\n\\r\\t\"]",
+ "string_backslash_and_u_escaped_zero": "[\"\\\\u0000\"]",
+ "string_backslash_doublequotes": "[\"\\\"\"]",
+ "string_comments": "[\"a/*b*/c/*d//e\"]",
+ "string_double_escape_a": "[\"\\\\a\"]",
+ "string_double_escape_n": "[\"\\\\n\"]",
+ "string_escaped_control_character": "[\"\\u0012\"]",
+ "string_escaped_noncharacter": "[\"\\uFFFF\"]",
+ "string_in_array": "[\"asd\"]",
+ "string_in_array_with_leading_space": "[ \"asd\"]",
+ "string_last_surrogates_1_and_2": "[\"\\uDBFF\\uDFFF\"]",
+ "string_nbsp_uescaped": "[\"new\\u00A0line\"]",
+ "string_nonCharacterInUTF-8_U+10FFFF": "[\"\udbff\udfff\"]",
+ "string_nonCharacterInUTF-8_U+FFFF": "[\"\uffff\"]",
+ "string_null_escape": "[\"\\u0000\"]",
+ "string_one-byte-utf-8": "[\"\\u002c\"]",
+ "string_pi": "[\"\u03c0\"]",
+ "string_reservedCharacterInUTF-8_U+1BFFF": "[\"\ud82f\udfff\"]",
+ "string_simple_ascii": "[\"asd \"]",
+ "string_space": "\" \"",
+ "string_surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF": "[\"\\uD834\\uDd1e\"]",
+ "string_three-byte-utf-8": "[\"\\u0821\"]",
+ "string_two-byte-utf-8": "[\"\\u0123\"]",
+ "string_u+2028_line_sep": "[\"\u2028\"]",
+ "string_u+2029_par_sep": "[\"\u2029\"]",
+ "string_uEscape": "[\"\\u0061\\u30af\\u30EA\\u30b9\"]",
+ "string_uescaped_newline": "[\"new\\u000Aline\"]",
+ "string_unescaped_char_delete": "[\"\u007f\"]",
+ "string_unicode": "[\"\\uA66D\"]",
+ "string_unicodeEscapedBackslash": "[\"\\u005C\"]",
+ "string_unicode_2": "[\"\u2342\u3234\u2342\"]",
+ "string_unicode_U+10FFFE_nonchar": "[\"\\uDBFF\\uDFFE\"]",
+ "string_unicode_U+1FFFE_nonchar": "[\"\\uD83F\\uDFFE\"]",
+ "string_unicode_U+200B_ZERO_WIDTH_SPACE": "[\"\\u200B\"]",
+ "string_unicode_U+2064_invisible_plus": "[\"\\u2064\"]",
+ "string_unicode_U+FDD0_nonchar": "[\"\\uFDD0\"]",
+ "string_unicode_U+FFFE_nonchar": "[\"\\uFFFE\"]",
+ "string_unicode_escaped_double_quote": "[\"\\u0022\"]",
+ "string_utf8": "[\"\u20ac\ud834\udd1e\"]",
+ "string_with_del_character": "[\"a\u007fa\"]",
+ "structure_lonely_false": "false",
+ "structure_lonely_int": "42",
+ "structure_lonely_negative_real": "-0.1",
+ "structure_lonely_null": "null",
+ "structure_lonely_string": "\"asd\"",
+ "structure_lonely_true": "true",
+ "structure_string_empty": "\"\"",
+ "structure_trailing_newline": "[\"a\"]\n",
+ "structure_true_in_array": "[true]",
+ "structure_whitespace_array": " [] "
+ },
+ "negative": {
+ "array_1_true_without_comma": "[1 true]",
+ "array_colon_instead_of_comma": "[\"\": 1]",
+ "array_comma_after_close": "[\"\"],",
+ "array_comma_and_number": "[,1]",
+ "array_double_comma": "[1,,2]",
+ "array_double_extra_comma": "[\"x\",,]",
+ "array_extra_close": "[\"x\"]]",
+ "array_extra_comma": "[\"\",]",
+ "array_incomplete": "[\"x\"",
+ "array_incomplete_invalid_value": "[x",
+ "array_inner_array_no_comma": "[3[4]]",
+ "array_items_separated_by_semicolon": "[1:2]",
+ "array_just_comma": "[,]",
+ "array_just_minus": "[-]",
+ "array_missing_value": "[ , \"\"]",
+ "array_newlines_unclosed": "[\"a\",\n4\n,1,",
+ "array_number_and_comma": "[1,]",
+ "array_number_and_several_commas": "[1,,]",
+ "array_spaces_vertical_tab_formfeed": "[\"\u000ba\"\\f]",
+ "array_star_inside": "[*]",
+ "array_unclosed": "[\"\"",
+ "array_unclosed_trailing_comma": "[1,",
+ "array_unclosed_with_new_lines": "[1,\n1\n,1",
+ "array_unclosed_with_object_inside": "[{}",
+ "incomplete_false": "[fals]",
+ "incomplete_null": "[nul]",
+ "incomplete_true": "[tru]",
+ "number_++": "[++1234]",
+ "number_+1": "[+1]",
+ "number_+Inf": "[+Inf]",
+ "number_-01": "[-01]",
+ "number_-1.0.": "[-1.0.]",
+ "number_-2.": "[-2.]",
+ "number_-NaN": "[-NaN]",
+ "number_.-1": "[.-1]",
+ "number_.2e-3": "[.2e-3]",
+ "number_0.1.2": "[0.1.2]",
+ "number_0.3e+": "[0.3e+]",
+ "number_0.3e": "[0.3e]",
+ "number_0.e1": "[0.e1]",
+ "number_0_capital_E+": "[0E+]",
+ "number_0_capital_E": "[0E]",
+ "number_0e+": "[0e+]",
+ "number_0e": "[0e]",
+ "number_1.0e+": "[1.0e+]",
+ "number_1.0e-": "[1.0e-]",
+ "number_1.0e": "[1.0e]",
+ "number_1_000": "[1 000.0]",
+ "number_1eE2": "[1eE2]",
+ "number_2.e+3": "[2.e+3]",
+ "number_2.e-3": "[2.e-3]",
+ "number_2.e3": "[2.e3]",
+ "number_9.e+": "[9.e+]",
+ "number_Inf": "[Inf]",
+ "number_NaN": "[NaN]",
+ "number_U+FF11_fullwidth_digit_one": "[\uff11]",
+ "number_expression": "[1+2]",
+ "number_hex_1_digit": "[0x1]",
+ "number_hex_2_digits": "[0x42]",
+ "number_infinity": "[Infinity]",
+ "number_invalid+-": "[0e+-1]",
+ "number_invalid-negative-real": "[-123.123foo]",
+ "number_minus_infinity": "[-Infinity]",
+ "number_minus_sign_with_trailing_garbage": "[-foo]",
+ "number_minus_space_1": "[- 1]",
+ "number_neg_int_starting_with_zero": "[-012]",
+ "number_neg_real_without_int_part": "[-.123]",
+ "number_neg_with_garbage_at_end": "[-1x]",
+ "number_real_garbage_after_e": "[1ea]",
+ "number_real_without_fractional_part": "[1.]",
+ "number_starting_with_dot": "[.123]",
+ "number_with_alpha": "[1.2a-3]",
+ "number_with_alpha_char": "[1.8011670033376514H-308]",
+ "number_with_leading_zero": "[012]",
+ "object_bad_value": "[\"x\", truth]",
+ "object_bracket_key": "{[: \"x\"}\n",
+ "object_comma_instead_of_colon": "{\"x\", null}",
+ "object_double_colon": "{\"x\"::\"b\"}",
+ "object_emoji": "{\ud83c\udde8\ud83c\udded}",
+ "object_garbage_at_end": "{\"a\":\"a\" 123}",
+ "object_key_with_single_quotes": "{key: 'value'}",
+ "object_missing_colon": "{\"a\" b}",
+ "object_missing_key": "{:\"b\"}",
+ "object_missing_semicolon": "{\"a\" \"b\"}",
+ "object_missing_value": "{\"a\":",
+ "object_no-colon": "{\"a\"",
+ "object_non_string_key": "{1:1}",
+ "object_non_string_key_but_huge_number_instead": "{9999E9999:1}",
+ "object_repeated_null_null": "{null:null,null:null}",
+ "object_several_trailing_commas": "{\"id\":0,,,,,}",
+ "object_single_quote": "{'a':0}",
+ "object_trailing_comma": "{\"id\":0,}",
+ "object_trailing_comment": "{\"a\":\"b\"}/**/",
+ "object_trailing_comment_open": "{\"a\":\"b\"}/**//",
+ "object_trailing_comment_slash_open": "{\"a\":\"b\"}//",
+ "object_trailing_comment_slash_open_incomplete": "{\"a\":\"b\"}/",
+ "object_two_commas_in_a_row": "{\"a\":\"b\",,\"c\":\"d\"}",
+ "object_unquoted_key": "{a: \"b\"}",
+ "object_unterminated-value": "{\"a\":\"a",
+ "object_with_single_string": "{ \"foo\" : \"bar\", \"a\" }",
+ "object_with_trailing_garbage": "{\"a\":\"b\"}#",
+ "single_space": " ",
+ "string_1_surrogate_then_escape": "[\"\\uD800\\\"]",
+ "string_1_surrogate_then_escape_u": "[\"\\uD800\\u\"]",
+ "string_1_surrogate_then_escape_u1": "[\"\\uD800\\u1\"]",
+ "string_1_surrogate_then_escape_u1x": "[\"\\uD800\\u1x\"]",
+ "string_accentuated_char_no_quotes": "[\u00e9]",
+ "string_backslash_00": "[\"\\\u0000\"]",
+ "string_escape_x": "[\"\\x00\"]",
+ "string_escaped_backslash_bad": "[\"\\\\\\\"]",
+ "string_escaped_ctrl_char_tab": "[\"\\\t\"]",
+ "string_escaped_emoji": "[\"\\\ud83c\udf00\"]",
+ "string_incomplete_escape": "[\"\\\"]",
+ "string_incomplete_escaped_character": "[\"\\u00A\"]",
+ "string_incomplete_surrogate": "[\"\\uD834\\uDd\"]",
+ "string_incomplete_surrogate_escape_invalid": "[\"\\uD800\\uD800\\x\"]",
+ "string_invalid_backslash_esc": "[\"\\a\"]",
+ "string_invalid_unicode_escape": "[\"\\uqqqq\"]",
+ "string_leading_uescaped_thinspace": "[\\u0020\"asd\"]",
+ "string_no_quotes_with_bad_escape": "[\\n]",
+ "string_single_doublequote": "\"",
+ "string_single_quote": "['single quote']",
+ "string_single_string_no_double_quotes": "abc",
+ "string_start_escape_unclosed": "[\"\\",
+ "string_unescaped_ctrl_char": "[\"a\u0000a\"]",
+ "string_unescaped_newline": "[\"new\nline\"]",
+ "string_unescaped_tab": "[\"\t\"]",
+ "string_unicode_CapitalU": "\"\\UA66D\"",
+ "string_with_trailing_garbage": "\"\"x",
+ "structure_U+2060_word_joined": "[\u2060]",
+ "structure_UTF8_BOM_no_data": "\ufeff",
+ "structure_angle_bracket_.": "<.>",
+ "structure_angle_bracket_null": "[]",
+ "structure_array_trailing_garbage": "[1]x",
+ "structure_array_with_extra_array_close": "[1]]",
+ "structure_array_with_unclosed_string": "[\"asd]",
+ "structure_ascii-unicode-identifier": "a\u00e5",
+ "structure_capitalized_True": "[True]",
+ "structure_close_unopened_array": "1]",
+ "structure_comma_instead_of_closing_brace": "{\"x\": true,",
+ "structure_double_array": "[][]",
+ "structure_end_array": "]",
+ "structure_lone-open-bracket": "[",
+ "structure_no_data": "",
+ "structure_null-byte-outside-string": "[\u0000]",
+ "structure_number_with_trailing_garbage": "2@",
+ "structure_object_followed_by_closing_object": "{}}",
+ "structure_object_unclosed_no_value": "{\"\":",
+ "structure_object_with_comment": "{\"a\":/*comment*/\"b\"}",
+ "structure_object_with_trailing_garbage": "{\"a\": true} \"x\"",
+ "structure_open_array_apostrophe": "['",
+ "structure_open_array_comma": "[,",
+ "structure_open_array_open_object": "[{",
+ "structure_open_array_open_string": "[\"a",
+ "structure_open_array_string": "[\"a\"",
+ "structure_open_object": "{",
+ "structure_open_object_close_array": "{]",
+ "structure_open_object_comma": "{,",
+ "structure_open_object_open_array": "{[",
+ "structure_open_object_open_string": "{\"a",
+ "structure_open_object_string_with_apostrophes": "{'a'",
+ "structure_open_open": "[\"\\{[\"\\{[\"\\{[\"\\{",
+ "structure_single_star": "*",
+ "structure_trailing_#": "{\"a\":\"b\"}#{}",
+ "structure_uescaped_LF_before_string": "[\\u000A\"\"]",
+ "structure_unclosed_array": "[1",
+ "structure_unclosed_array_partial_null": "[ false, nul",
+ "structure_unclosed_array_unfinished_false": "[ true, fals",
+ "structure_unclosed_array_unfinished_true": "[ false, tru",
+ "structure_unclosed_object": "{\"asd\":\"asd\"",
+ "structure_unicode-identifier": "\u00e5",
+ "structure_whitespace_U+2060_word_joiner": "[\u2060]",
+ "structure_whitespace_formfeed": "[\f]"
+ },
+ "any": {
+ "number_double_huge_neg_exp": "[123.456e-789]",
+ "number_huge_exp": "[0.4e00669999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999969999999006]",
+ "number_neg_int_huge_exp": "[-1e+9999]",
+ "number_pos_double_huge_exp": "[1.5e+9999]",
+ "number_real_neg_overflow": "[-123123e100000]",
+ "number_real_pos_overflow": "[123123e100000]",
+ "number_real_underflow": "[123e-10000000]",
+ "object_key_lone_2nd_surrogate": "{\"\\uDFAA\":0}",
+ "string_1st_surrogate_but_2nd_missing": "[\"\\uDADA\"]",
+ "string_1st_valid_surrogate_2nd_invalid": "[\"\\uD888\\u1234\"]",
+ "string_incomplete_surrogate_and_escape_valid": "[\"\\uD800\\n\"]",
+ "string_incomplete_surrogate_pair": "[\"\\uDd1ea\"]",
+ "string_incomplete_surrogates_escape_valid": "[\"\\uD800\\uD800\\n\"]",
+ "string_invalid_lonely_surrogate": "[\"\\ud800\"]",
+ "string_invalid_surrogate": "[\"\\ud800abc\"]",
+ "string_inverted_surrogates_U+1D11E": "[\"\\uDd1e\\uD834\"]",
+ "string_lone_second_surrogate": "[\"\\uDFAA\"]",
+ "structure_UTF-8_BOM_empty_object": "\ufeff{}"
+ }
+}
diff --git a/lib/libesp32/berry/tools/coc/str_build.py b/lib/libesp32/berry/tools/coc/str_build.py
index 82933abec..31caba1d3 100644
--- a/lib/libesp32/berry/tools/coc/str_build.py
+++ b/lib/libesp32/berry/tools/coc/str_build.py
@@ -1,6 +1,20 @@
import json
from coc_string import *
+# from https://stackoverflow.com/questions/14945095/how-to-escape-string-for-generated-c (simplified)
+def escape_c(s, encoding='ascii'):
+ result = ''
+ for c in s:
+ if not (32 <= ord(c) < 127):
+ result += '\\%03o' % ord(c)
+ elif c == '\\':
+ result += "\\\\"
+ elif c == '"':
+ result += "\\\""
+ else:
+ result += c
+ return '"' + result + '"'
+
class str_info:
def __init__(self):
self.hash = 0
@@ -91,7 +105,7 @@ class str_build:
else:
next = "NULL"
istr += "be_define_const_str("
- istr += node + ", " + json.dumps(info.str) + ", "
+ istr += node + ", " + escape_c(info.str) + ", "
istr += str(info.hash) + "u, " + str(info.extra) + ", "
istr += str(len(info.str)) + ", " + next + ");\n"
strings[info.str] = istr
@@ -104,7 +118,7 @@ class str_build:
ostr += "\n/* weak strings */\n"
for k in self.str_weak:
ostr += "be_define_const_str("
- ostr += escape_operator(k) + ", " + json.dumps(k) + ", "
+ ostr += escape_operator(k) + ", " + escape_c(k) + ", "
ostr += "0u, 0, " + str(len(k)) + ", NULL);\n"
ostr += "\n"
diff --git a/lib/libesp32/berry_int64/src/be_int64_class.c b/lib/libesp32/berry_int64/src/be_int64_class.c
index 5b3d3e3c2..4e06354ea 100644
--- a/lib/libesp32/berry_int64/src/be_int64_class.c
+++ b/lib/libesp32/berry_int64/src/be_int64_class.c
@@ -72,6 +72,13 @@ void int64_set(int64_t *i64, int32_t high, int32_t low) {
}
BE_FUNC_CTYPE_DECLARE(int64_set, "", ".ii")
+int64_t* int64_fromu32(bvm *vm, uint32_t low) {
+ int64_t* r64 = (int64_t*)be_malloc(vm, sizeof(int64_t));
+ *r64 = low;
+ return r64;
+}
+BE_FUNC_CTYPE_DECLARE(int64_fromu32, "int64", "@i")
+
int64_t* int64_add(bvm *vm, int64_t *i64, int64_t *j64) {
int64_t* r64 = (int64_t*)be_malloc(vm, sizeof(int64_t));
// it's possible that arg j64 is nullptr, since class type does allow NULLPTR to come through.
@@ -197,6 +204,7 @@ class be_class_int64 (scope: global, name: int64) {
init, ctype_func(int64_init)
deinit, ctype_func(int64_deinit)
set, ctype_func(int64_set)
+ fromu32, static_ctype_func(int64_fromu32)
tostring, ctype_func(int64_tostring)
fromstring, static_ctype_func(int64_fromstring)
diff --git a/lib/libesp32/berry_matter/generate/Matter_generate_c.be b/lib/libesp32/berry_matter/generate/Matter_generate_c.be
index 6c9c13170..86155ec1c 100644
--- a/lib/libesp32/berry_matter/generate/Matter_generate_c.be
+++ b/lib/libesp32/berry_matter/generate/Matter_generate_c.be
@@ -59,6 +59,8 @@ fprint("* Compact form for attributes and clusters")
fprint("*")
fprint("* Generated content, do not edit")
fprint("\\*********************************************************************************/")
+fprint("#include ")
+fprint("#include ")
fprint()
fprint("typedef struct {")
fprint(" uint16_t id;")
@@ -89,7 +91,10 @@ for cl:cl_ids
var attr_ids_local = k2l(attr_id_name)
for attr_id:attr_ids_local
- fprint(string.format(' { 0x%04X, %i, 0x%02X, "%s" },', attr_id, 0, 0, attributes[attr_id]['attributeName']))
+ var reportable = attributes[attr_id].find('reportable', false)
+ var writable = attributes[attr_id].find('writable', false)
+ var flags = (writable ? 0x01 : 0x00) | (reportable ? 0x02 : 0x00)
+ fprint(string.format(' { 0x%04X, %i, 0x%02X, "%s" },', attr_id, 0, flags, attributes[attr_id]['attributeName']))
end
fprint(' { 0xFFFF, 0, 0x00, NULL },')
fprint("};")
diff --git a/lib/libesp32/berry_matter/generate/be_matter_clusters.h b/lib/libesp32/berry_matter/generate/be_matter_clusters.h
index fc9171ce6..e25982844 100644
--- a/lib/libesp32/berry_matter/generate/be_matter_clusters.h
+++ b/lib/libesp32/berry_matter/generate/be_matter_clusters.h
@@ -26,13 +26,13 @@ typedef struct {
} matter_cluster_t;
const matter_attribute_t matter_Attributes_0003[] = {
- { 0x0000, 0, 0x00, "IdentifyTime" },
- { 0x0001, 0, 0x00, "IdentifyType" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x03, "IdentifyTime" },
+ { 0x0001, 0, 0x02, "IdentifyType" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -43,12 +43,12 @@ const matter_command_t matter_Commands_0003[] = {
};
const matter_attribute_t matter_Attributes_0004[] = {
- { 0x0000, 0, 0x00, "NameSupport" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "NameSupport" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -63,16 +63,16 @@ const matter_command_t matter_Commands_0004[] = {
};
const matter_attribute_t matter_Attributes_0005[] = {
- { 0x0000, 0, 0x00, "SceneCount" },
- { 0x0001, 0, 0x00, "CurrentScene" },
- { 0x0002, 0, 0x00, "CurrentGroup" },
- { 0x0003, 0, 0x00, "SceneValid" },
- { 0x0004, 0, 0x00, "NameSupport" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "SceneCount" },
+ { 0x0001, 0, 0x02, "CurrentScene" },
+ { 0x0002, 0, 0x02, "CurrentGroup" },
+ { 0x0003, 0, 0x02, "SceneValid" },
+ { 0x0004, 0, 0x02, "NameSupport" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -88,16 +88,16 @@ const matter_command_t matter_Commands_0005[] = {
};
const matter_attribute_t matter_Attributes_0006[] = {
- { 0x0000, 0, 0x00, "OnOff" },
- { 0x4000, 0, 0x00, "GlobalSceneControl" },
- { 0x4001, 0, 0x00, "OnTime" },
- { 0x4002, 0, 0x00, "OffWaitTime" },
- { 0x4003, 0, 0x00, "StartUpOnOff" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "OnOff" },
+ { 0x4000, 0, 0x02, "GlobalSceneControl" },
+ { 0x4001, 0, 0x03, "OnTime" },
+ { 0x4002, 0, 0x03, "OffWaitTime" },
+ { 0x4003, 0, 0x03, "StartUpOnOff" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -112,13 +112,13 @@ const matter_command_t matter_Commands_0006[] = {
};
const matter_attribute_t matter_Attributes_0007[] = {
- { 0x0000, 0, 0x00, "SwitchType" },
- { 0x0010, 0, 0x00, "SwitchActions" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "SwitchType" },
+ { 0x0010, 0, 0x03, "SwitchActions" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -127,25 +127,25 @@ const matter_command_t matter_Commands_0007[] = {
};
const matter_attribute_t matter_Attributes_0008[] = {
- { 0x0000, 0, 0x00, "CurrentLevel" },
- { 0x0001, 0, 0x00, "RemainingTime" },
- { 0x0002, 0, 0x00, "MinLevel" },
- { 0x0003, 0, 0x00, "MaxLevel" },
- { 0x0004, 0, 0x00, "CurrentFrequency" },
- { 0x0005, 0, 0x00, "MinFrequency" },
- { 0x0006, 0, 0x00, "MaxFrequency" },
- { 0x000F, 0, 0x00, "Options" },
- { 0x0010, 0, 0x00, "OnOffTransitionTime" },
- { 0x0011, 0, 0x00, "OnLevel" },
- { 0x0012, 0, 0x00, "OnTransitionTime" },
- { 0x0013, 0, 0x00, "OffTransitionTime" },
- { 0x0014, 0, 0x00, "DefaultMoveRate" },
- { 0x4000, 0, 0x00, "StartUpCurrentLevel" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "CurrentLevel" },
+ { 0x0001, 0, 0x02, "RemainingTime" },
+ { 0x0002, 0, 0x02, "MinLevel" },
+ { 0x0003, 0, 0x02, "MaxLevel" },
+ { 0x0004, 0, 0x02, "CurrentFrequency" },
+ { 0x0005, 0, 0x02, "MinFrequency" },
+ { 0x0006, 0, 0x02, "MaxFrequency" },
+ { 0x000F, 0, 0x03, "Options" },
+ { 0x0010, 0, 0x03, "OnOffTransitionTime" },
+ { 0x0011, 0, 0x03, "OnLevel" },
+ { 0x0012, 0, 0x03, "OnTransitionTime" },
+ { 0x0013, 0, 0x03, "OffTransitionTime" },
+ { 0x0014, 0, 0x03, "DefaultMoveRate" },
+ { 0x4000, 0, 0x03, "StartUpCurrentLevel" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -162,14 +162,14 @@ const matter_command_t matter_Commands_0008[] = {
};
const matter_attribute_t matter_Attributes_000F[] = {
- { 0x0051, 0, 0x00, "OutOfService" },
- { 0x0055, 0, 0x00, "PresentValue" },
- { 0x006F, 0, 0x00, "StatusFlags" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0051, 0, 0x03, "OutOfService" },
+ { 0x0055, 0, 0x03, "PresentValue" },
+ { 0x006F, 0, 0x02, "StatusFlags" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -178,15 +178,15 @@ const matter_command_t matter_Commands_000F[] = {
};
const matter_attribute_t matter_Attributes_001D[] = {
- { 0x0000, 0, 0x00, "DeviceTypeList" },
- { 0x0001, 0, 0x00, "ServerList" },
- { 0x0002, 0, 0x00, "ClientList" },
- { 0x0003, 0, 0x00, "PartsList" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "DeviceTypeList" },
+ { 0x0001, 0, 0x02, "ServerList" },
+ { 0x0002, 0, 0x02, "ClientList" },
+ { 0x0003, 0, 0x02, "PartsList" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -195,12 +195,12 @@ const matter_command_t matter_Commands_001D[] = {
};
const matter_attribute_t matter_Attributes_001E[] = {
- { 0x0000, 0, 0x00, "Binding" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x03, "Binding" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -209,16 +209,16 @@ const matter_command_t matter_Commands_001E[] = {
};
const matter_attribute_t matter_Attributes_001F[] = {
- { 0x0000, 0, 0x00, "Acl" },
- { 0x0001, 0, 0x00, "Extension" },
- { 0x0002, 0, 0x00, "SubjectsPerAccessControlEntry" },
- { 0x0003, 0, 0x00, "TargetsPerAccessControlEntry" },
- { 0x0004, 0, 0x00, "AccessControlEntriesPerFabric" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x03, "Acl" },
+ { 0x0001, 0, 0x03, "Extension" },
+ { 0x0002, 0, 0x02, "SubjectsPerAccessControlEntry" },
+ { 0x0003, 0, 0x02, "TargetsPerAccessControlEntry" },
+ { 0x0004, 0, 0x02, "AccessControlEntriesPerFabric" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -227,14 +227,14 @@ const matter_command_t matter_Commands_001F[] = {
};
const matter_attribute_t matter_Attributes_0025[] = {
- { 0x0000, 0, 0x00, "ActionList" },
- { 0x0001, 0, 0x00, "EndpointLists" },
- { 0x0002, 0, 0x00, "SetupURL" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "ActionList" },
+ { 0x0001, 0, 0x02, "EndpointLists" },
+ { 0x0002, 0, 0x02, "SetupURL" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -255,31 +255,31 @@ const matter_command_t matter_Commands_0025[] = {
};
const matter_attribute_t matter_Attributes_0028[] = {
- { 0x0000, 0, 0x00, "DataModelRevision" },
- { 0x0001, 0, 0x00, "VendorName" },
- { 0x0002, 0, 0x00, "VendorID" },
- { 0x0003, 0, 0x00, "ProductName" },
- { 0x0004, 0, 0x00, "ProductID" },
- { 0x0005, 0, 0x00, "NodeLabel" },
- { 0x0006, 0, 0x00, "Location" },
- { 0x0007, 0, 0x00, "HardwareVersion" },
- { 0x0008, 0, 0x00, "HardwareVersionString" },
- { 0x0009, 0, 0x00, "SoftwareVersion" },
- { 0x000A, 0, 0x00, "SoftwareVersionString" },
- { 0x000B, 0, 0x00, "ManufacturingDate" },
- { 0x000C, 0, 0x00, "PartNumber" },
- { 0x000D, 0, 0x00, "ProductURL" },
- { 0x000E, 0, 0x00, "ProductLabel" },
- { 0x000F, 0, 0x00, "SerialNumber" },
- { 0x0010, 0, 0x00, "LocalConfigDisabled" },
- { 0x0011, 0, 0x00, "Reachable" },
- { 0x0012, 0, 0x00, "UniqueID" },
- { 0x0013, 0, 0x00, "CapabilityMinima" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "DataModelRevision" },
+ { 0x0001, 0, 0x02, "VendorName" },
+ { 0x0002, 0, 0x02, "VendorID" },
+ { 0x0003, 0, 0x02, "ProductName" },
+ { 0x0004, 0, 0x02, "ProductID" },
+ { 0x0005, 0, 0x03, "NodeLabel" },
+ { 0x0006, 0, 0x03, "Location" },
+ { 0x0007, 0, 0x02, "HardwareVersion" },
+ { 0x0008, 0, 0x02, "HardwareVersionString" },
+ { 0x0009, 0, 0x02, "SoftwareVersion" },
+ { 0x000A, 0, 0x02, "SoftwareVersionString" },
+ { 0x000B, 0, 0x02, "ManufacturingDate" },
+ { 0x000C, 0, 0x02, "PartNumber" },
+ { 0x000D, 0, 0x02, "ProductURL" },
+ { 0x000E, 0, 0x02, "ProductLabel" },
+ { 0x000F, 0, 0x02, "SerialNumber" },
+ { 0x0010, 0, 0x03, "LocalConfigDisabled" },
+ { 0x0011, 0, 0x02, "Reachable" },
+ { 0x0012, 0, 0x02, "UniqueID" },
+ { 0x0013, 0, 0x02, "CapabilityMinima" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -288,9 +288,9 @@ const matter_command_t matter_Commands_0028[] = {
};
const matter_attribute_t matter_Attributes_0029[] = {
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -302,13 +302,13 @@ const matter_command_t matter_Commands_0029[] = {
};
const matter_attribute_t matter_Attributes_002A[] = {
- { 0x0000, 0, 0x00, "DefaultOtaProviders" },
- { 0x0001, 0, 0x00, "UpdatePossible" },
- { 0x0002, 0, 0x00, "UpdateState" },
- { 0x0003, 0, 0x00, "UpdateStateProgress" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x03, "DefaultOtaProviders" },
+ { 0x0001, 0, 0x02, "UpdatePossible" },
+ { 0x0002, 0, 0x02, "UpdateState" },
+ { 0x0003, 0, 0x02, "UpdateStateProgress" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -318,12 +318,12 @@ const matter_command_t matter_Commands_002A[] = {
};
const matter_attribute_t matter_Attributes_002B[] = {
- { 0x0000, 0, 0x00, "ActiveLocale" },
- { 0x0001, 0, 0x00, "SupportedLocales" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x03, "ActiveLocale" },
+ { 0x0001, 0, 0x02, "SupportedLocales" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -332,13 +332,13 @@ const matter_command_t matter_Commands_002B[] = {
};
const matter_attribute_t matter_Attributes_002C[] = {
- { 0x0000, 0, 0x00, "HourFormat" },
- { 0x0001, 0, 0x00, "ActiveCalendarType" },
- { 0x0002, 0, 0x00, "SupportedCalendarTypes" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x03, "HourFormat" },
+ { 0x0001, 0, 0x03, "ActiveCalendarType" },
+ { 0x0002, 0, 0x02, "SupportedCalendarTypes" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -347,10 +347,10 @@ const matter_command_t matter_Commands_002C[] = {
};
const matter_attribute_t matter_Attributes_002D[] = {
- { 0x0000, 0, 0x00, "TemperatureUnit" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x03, "TemperatureUnit" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -359,12 +359,12 @@ const matter_command_t matter_Commands_002D[] = {
};
const matter_attribute_t matter_Attributes_002E[] = {
- { 0x0000, 0, 0x00, "Sources" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "Sources" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -373,42 +373,42 @@ const matter_command_t matter_Commands_002E[] = {
};
const matter_attribute_t matter_Attributes_002F[] = {
- { 0x0000, 0, 0x00, "Status" },
- { 0x0001, 0, 0x00, "Order" },
- { 0x0002, 0, 0x00, "Description" },
- { 0x0003, 0, 0x00, "WiredAssessedInputVoltage" },
- { 0x0004, 0, 0x00, "WiredAssessedInputFrequency" },
- { 0x0005, 0, 0x00, "WiredCurrentType" },
- { 0x0006, 0, 0x00, "WiredAssessedCurrent" },
- { 0x0007, 0, 0x00, "WiredNominalVoltage" },
- { 0x0008, 0, 0x00, "WiredMaximumCurrent" },
- { 0x0009, 0, 0x00, "WiredPresent" },
- { 0x000A, 0, 0x00, "ActiveWiredFaults" },
- { 0x000B, 0, 0x00, "BatVoltage" },
- { 0x000C, 0, 0x00, "BatPercentRemaining" },
- { 0x000D, 0, 0x00, "BatTimeRemaining" },
- { 0x000E, 0, 0x00, "BatChargeLevel" },
- { 0x000F, 0, 0x00, "BatReplacementNeeded" },
- { 0x0010, 0, 0x00, "BatReplaceability" },
- { 0x0011, 0, 0x00, "BatPresent" },
- { 0x0012, 0, 0x00, "ActiveBatFaults" },
- { 0x0013, 0, 0x00, "BatReplacementDescription" },
- { 0x0014, 0, 0x00, "BatCommonDesignation" },
- { 0x0015, 0, 0x00, "BatANSIDesignation" },
- { 0x0016, 0, 0x00, "BatIECDesignation" },
- { 0x0017, 0, 0x00, "BatApprovedChemistry" },
- { 0x0018, 0, 0x00, "BatCapacity" },
- { 0x0019, 0, 0x00, "BatQuantity" },
- { 0x001A, 0, 0x00, "BatChargeState" },
- { 0x001B, 0, 0x00, "BatTimeToFullCharge" },
- { 0x001C, 0, 0x00, "BatFunctionalWhileCharging" },
- { 0x001D, 0, 0x00, "BatChargingCurrent" },
- { 0x001E, 0, 0x00, "ActiveBatChargeFaults" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "Status" },
+ { 0x0001, 0, 0x02, "Order" },
+ { 0x0002, 0, 0x02, "Description" },
+ { 0x0003, 0, 0x02, "WiredAssessedInputVoltage" },
+ { 0x0004, 0, 0x02, "WiredAssessedInputFrequency" },
+ { 0x0005, 0, 0x02, "WiredCurrentType" },
+ { 0x0006, 0, 0x02, "WiredAssessedCurrent" },
+ { 0x0007, 0, 0x02, "WiredNominalVoltage" },
+ { 0x0008, 0, 0x02, "WiredMaximumCurrent" },
+ { 0x0009, 0, 0x02, "WiredPresent" },
+ { 0x000A, 0, 0x02, "ActiveWiredFaults" },
+ { 0x000B, 0, 0x02, "BatVoltage" },
+ { 0x000C, 0, 0x02, "BatPercentRemaining" },
+ { 0x000D, 0, 0x02, "BatTimeRemaining" },
+ { 0x000E, 0, 0x02, "BatChargeLevel" },
+ { 0x000F, 0, 0x02, "BatReplacementNeeded" },
+ { 0x0010, 0, 0x02, "BatReplaceability" },
+ { 0x0011, 0, 0x02, "BatPresent" },
+ { 0x0012, 0, 0x02, "ActiveBatFaults" },
+ { 0x0013, 0, 0x02, "BatReplacementDescription" },
+ { 0x0014, 0, 0x02, "BatCommonDesignation" },
+ { 0x0015, 0, 0x02, "BatANSIDesignation" },
+ { 0x0016, 0, 0x02, "BatIECDesignation" },
+ { 0x0017, 0, 0x02, "BatApprovedChemistry" },
+ { 0x0018, 0, 0x02, "BatCapacity" },
+ { 0x0019, 0, 0x02, "BatQuantity" },
+ { 0x001A, 0, 0x02, "BatChargeState" },
+ { 0x001B, 0, 0x02, "BatTimeToFullCharge" },
+ { 0x001C, 0, 0x02, "BatFunctionalWhileCharging" },
+ { 0x001D, 0, 0x02, "BatChargingCurrent" },
+ { 0x001E, 0, 0x02, "ActiveBatChargeFaults" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -417,16 +417,16 @@ const matter_command_t matter_Commands_002F[] = {
};
const matter_attribute_t matter_Attributes_0030[] = {
- { 0x0000, 0, 0x00, "Breadcrumb" },
- { 0x0001, 0, 0x00, "BasicCommissioningInfo" },
- { 0x0002, 0, 0x00, "RegulatoryConfig" },
- { 0x0003, 0, 0x00, "LocationCapability" },
- { 0x0004, 0, 0x00, "SupportsConcurrentConnection" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x03, "Breadcrumb" },
+ { 0x0001, 0, 0x02, "BasicCommissioningInfo" },
+ { 0x0002, 0, 0x02, "RegulatoryConfig" },
+ { 0x0003, 0, 0x02, "LocationCapability" },
+ { 0x0004, 0, 0x02, "SupportsConcurrentConnection" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -441,18 +441,18 @@ const matter_command_t matter_Commands_0030[] = {
};
const matter_attribute_t matter_Attributes_0031[] = {
- { 0x0000, 0, 0x00, "MaxNetworks" },
- { 0x0001, 0, 0x00, "Networks" },
- { 0x0002, 0, 0x00, "ScanMaxTimeSeconds" },
- { 0x0003, 0, 0x00, "ConnectMaxTimeSeconds" },
- { 0x0004, 0, 0x00, "InterfaceEnabled" },
- { 0x0005, 0, 0x00, "LastNetworkingStatus" },
- { 0x0006, 0, 0x00, "LastNetworkID" },
- { 0x0007, 0, 0x00, "LastConnectErrorValue" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "MaxNetworks" },
+ { 0x0001, 0, 0x02, "Networks" },
+ { 0x0002, 0, 0x02, "ScanMaxTimeSeconds" },
+ { 0x0003, 0, 0x02, "ConnectMaxTimeSeconds" },
+ { 0x0004, 0, 0x03, "InterfaceEnabled" },
+ { 0x0005, 0, 0x02, "LastNetworkingStatus" },
+ { 0x0006, 0, 0x02, "LastNetworkID" },
+ { 0x0007, 0, 0x02, "LastConnectErrorValue" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -467,11 +467,11 @@ const matter_command_t matter_Commands_0031[] = {
};
const matter_attribute_t matter_Attributes_0032[] = {
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -481,20 +481,20 @@ const matter_command_t matter_Commands_0032[] = {
};
const matter_attribute_t matter_Attributes_0033[] = {
- { 0x0000, 0, 0x00, "NetworkInterfaces" },
- { 0x0001, 0, 0x00, "RebootCount" },
- { 0x0002, 0, 0x00, "UpTime" },
- { 0x0003, 0, 0x00, "TotalOperationalHours" },
- { 0x0004, 0, 0x00, "BootReasons" },
- { 0x0005, 0, 0x00, "ActiveHardwareFaults" },
- { 0x0006, 0, 0x00, "ActiveRadioFaults" },
- { 0x0007, 0, 0x00, "ActiveNetworkFaults" },
- { 0x0008, 0, 0x00, "TestEventTriggersEnabled" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "NetworkInterfaces" },
+ { 0x0001, 0, 0x02, "RebootCount" },
+ { 0x0002, 0, 0x02, "UpTime" },
+ { 0x0003, 0, 0x02, "TotalOperationalHours" },
+ { 0x0004, 0, 0x02, "BootReasons" },
+ { 0x0005, 0, 0x02, "ActiveHardwareFaults" },
+ { 0x0006, 0, 0x02, "ActiveRadioFaults" },
+ { 0x0007, 0, 0x02, "ActiveNetworkFaults" },
+ { 0x0008, 0, 0x02, "TestEventTriggersEnabled" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -504,15 +504,15 @@ const matter_command_t matter_Commands_0033[] = {
};
const matter_attribute_t matter_Attributes_0034[] = {
- { 0x0000, 0, 0x00, "ThreadMetrics" },
- { 0x0001, 0, 0x00, "CurrentHeapFree" },
- { 0x0002, 0, 0x00, "CurrentHeapUsed" },
- { 0x0003, 0, 0x00, "CurrentHeapHighWatermark" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "ThreadMetrics" },
+ { 0x0001, 0, 0x02, "CurrentHeapFree" },
+ { 0x0002, 0, 0x02, "CurrentHeapUsed" },
+ { 0x0003, 0, 0x02, "CurrentHeapHighWatermark" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -522,74 +522,74 @@ const matter_command_t matter_Commands_0034[] = {
};
const matter_attribute_t matter_Attributes_0035[] = {
- { 0x0000, 0, 0x00, "Channel" },
- { 0x0001, 0, 0x00, "RoutingRole" },
- { 0x0002, 0, 0x00, "NetworkName" },
- { 0x0003, 0, 0x00, "PanId" },
- { 0x0004, 0, 0x00, "ExtendedPanId" },
- { 0x0005, 0, 0x00, "MeshLocalPrefix" },
- { 0x0006, 0, 0x00, "OverrunCount" },
- { 0x0007, 0, 0x00, "NeighborTableList" },
- { 0x0008, 0, 0x00, "RouteTableList" },
- { 0x0009, 0, 0x00, "PartitionId" },
- { 0x000A, 0, 0x00, "Weighting" },
- { 0x000B, 0, 0x00, "DataVersion" },
- { 0x000C, 0, 0x00, "StableDataVersion" },
- { 0x000D, 0, 0x00, "LeaderRouterId" },
- { 0x000E, 0, 0x00, "DetachedRoleCount" },
- { 0x000F, 0, 0x00, "ChildRoleCount" },
- { 0x0010, 0, 0x00, "RouterRoleCount" },
- { 0x0011, 0, 0x00, "LeaderRoleCount" },
- { 0x0012, 0, 0x00, "AttachAttemptCount" },
- { 0x0013, 0, 0x00, "PartitionIdChangeCount" },
- { 0x0014, 0, 0x00, "BetterPartitionAttachAttemptCount" },
- { 0x0015, 0, 0x00, "ParentChangeCount" },
- { 0x0016, 0, 0x00, "TxTotalCount" },
- { 0x0017, 0, 0x00, "TxUnicastCount" },
- { 0x0018, 0, 0x00, "TxBroadcastCount" },
- { 0x0019, 0, 0x00, "TxAckRequestedCount" },
- { 0x001A, 0, 0x00, "TxAckedCount" },
- { 0x001B, 0, 0x00, "TxNoAckRequestedCount" },
- { 0x001C, 0, 0x00, "TxDataCount" },
- { 0x001D, 0, 0x00, "TxDataPollCount" },
- { 0x001E, 0, 0x00, "TxBeaconCount" },
- { 0x001F, 0, 0x00, "TxBeaconRequestCount" },
- { 0x0020, 0, 0x00, "TxOtherCount" },
- { 0x0021, 0, 0x00, "TxRetryCount" },
- { 0x0022, 0, 0x00, "TxDirectMaxRetryExpiryCount" },
- { 0x0023, 0, 0x00, "TxIndirectMaxRetryExpiryCount" },
- { 0x0024, 0, 0x00, "TxErrCcaCount" },
- { 0x0025, 0, 0x00, "TxErrAbortCount" },
- { 0x0026, 0, 0x00, "TxErrBusyChannelCount" },
- { 0x0027, 0, 0x00, "RxTotalCount" },
- { 0x0028, 0, 0x00, "RxUnicastCount" },
- { 0x0029, 0, 0x00, "RxBroadcastCount" },
- { 0x002A, 0, 0x00, "RxDataCount" },
- { 0x002B, 0, 0x00, "RxDataPollCount" },
- { 0x002C, 0, 0x00, "RxBeaconCount" },
- { 0x002D, 0, 0x00, "RxBeaconRequestCount" },
- { 0x002E, 0, 0x00, "RxOtherCount" },
- { 0x002F, 0, 0x00, "RxAddressFilteredCount" },
- { 0x0030, 0, 0x00, "RxDestAddrFilteredCount" },
- { 0x0031, 0, 0x00, "RxDuplicatedCount" },
- { 0x0032, 0, 0x00, "RxErrNoFrameCount" },
- { 0x0033, 0, 0x00, "RxErrUnknownNeighborCount" },
- { 0x0034, 0, 0x00, "RxErrInvalidSrcAddrCount" },
- { 0x0035, 0, 0x00, "RxErrSecCount" },
- { 0x0036, 0, 0x00, "RxErrFcsCount" },
- { 0x0037, 0, 0x00, "RxErrOtherCount" },
- { 0x0038, 0, 0x00, "ActiveTimestamp" },
- { 0x0039, 0, 0x00, "PendingTimestamp" },
- { 0x003A, 0, 0x00, "Delay" },
- { 0x003B, 0, 0x00, "SecurityPolicy" },
- { 0x003C, 0, 0x00, "ChannelPage0Mask" },
- { 0x003D, 0, 0x00, "OperationalDatasetComponents" },
- { 0x003E, 0, 0x00, "ActiveNetworkFaultsList" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "Channel" },
+ { 0x0001, 0, 0x02, "RoutingRole" },
+ { 0x0002, 0, 0x02, "NetworkName" },
+ { 0x0003, 0, 0x02, "PanId" },
+ { 0x0004, 0, 0x02, "ExtendedPanId" },
+ { 0x0005, 0, 0x02, "MeshLocalPrefix" },
+ { 0x0006, 0, 0x02, "OverrunCount" },
+ { 0x0007, 0, 0x02, "NeighborTableList" },
+ { 0x0008, 0, 0x02, "RouteTableList" },
+ { 0x0009, 0, 0x02, "PartitionId" },
+ { 0x000A, 0, 0x02, "Weighting" },
+ { 0x000B, 0, 0x02, "DataVersion" },
+ { 0x000C, 0, 0x02, "StableDataVersion" },
+ { 0x000D, 0, 0x02, "LeaderRouterId" },
+ { 0x000E, 0, 0x02, "DetachedRoleCount" },
+ { 0x000F, 0, 0x02, "ChildRoleCount" },
+ { 0x0010, 0, 0x02, "RouterRoleCount" },
+ { 0x0011, 0, 0x02, "LeaderRoleCount" },
+ { 0x0012, 0, 0x02, "AttachAttemptCount" },
+ { 0x0013, 0, 0x02, "PartitionIdChangeCount" },
+ { 0x0014, 0, 0x02, "BetterPartitionAttachAttemptCount" },
+ { 0x0015, 0, 0x02, "ParentChangeCount" },
+ { 0x0016, 0, 0x02, "TxTotalCount" },
+ { 0x0017, 0, 0x02, "TxUnicastCount" },
+ { 0x0018, 0, 0x02, "TxBroadcastCount" },
+ { 0x0019, 0, 0x02, "TxAckRequestedCount" },
+ { 0x001A, 0, 0x02, "TxAckedCount" },
+ { 0x001B, 0, 0x02, "TxNoAckRequestedCount" },
+ { 0x001C, 0, 0x02, "TxDataCount" },
+ { 0x001D, 0, 0x02, "TxDataPollCount" },
+ { 0x001E, 0, 0x02, "TxBeaconCount" },
+ { 0x001F, 0, 0x02, "TxBeaconRequestCount" },
+ { 0x0020, 0, 0x02, "TxOtherCount" },
+ { 0x0021, 0, 0x02, "TxRetryCount" },
+ { 0x0022, 0, 0x02, "TxDirectMaxRetryExpiryCount" },
+ { 0x0023, 0, 0x02, "TxIndirectMaxRetryExpiryCount" },
+ { 0x0024, 0, 0x02, "TxErrCcaCount" },
+ { 0x0025, 0, 0x02, "TxErrAbortCount" },
+ { 0x0026, 0, 0x02, "TxErrBusyChannelCount" },
+ { 0x0027, 0, 0x02, "RxTotalCount" },
+ { 0x0028, 0, 0x02, "RxUnicastCount" },
+ { 0x0029, 0, 0x02, "RxBroadcastCount" },
+ { 0x002A, 0, 0x02, "RxDataCount" },
+ { 0x002B, 0, 0x02, "RxDataPollCount" },
+ { 0x002C, 0, 0x02, "RxBeaconCount" },
+ { 0x002D, 0, 0x02, "RxBeaconRequestCount" },
+ { 0x002E, 0, 0x02, "RxOtherCount" },
+ { 0x002F, 0, 0x02, "RxAddressFilteredCount" },
+ { 0x0030, 0, 0x02, "RxDestAddrFilteredCount" },
+ { 0x0031, 0, 0x02, "RxDuplicatedCount" },
+ { 0x0032, 0, 0x02, "RxErrNoFrameCount" },
+ { 0x0033, 0, 0x02, "RxErrUnknownNeighborCount" },
+ { 0x0034, 0, 0x02, "RxErrInvalidSrcAddrCount" },
+ { 0x0035, 0, 0x02, "RxErrSecCount" },
+ { 0x0036, 0, 0x02, "RxErrFcsCount" },
+ { 0x0037, 0, 0x02, "RxErrOtherCount" },
+ { 0x0038, 0, 0x02, "ActiveTimestamp" },
+ { 0x0039, 0, 0x02, "PendingTimestamp" },
+ { 0x003A, 0, 0x02, "Delay" },
+ { 0x003B, 0, 0x02, "SecurityPolicy" },
+ { 0x003C, 0, 0x02, "ChannelPage0Mask" },
+ { 0x003D, 0, 0x02, "OperationalDatasetComponents" },
+ { 0x003E, 0, 0x02, "ActiveNetworkFaultsList" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -599,24 +599,24 @@ const matter_command_t matter_Commands_0035[] = {
};
const matter_attribute_t matter_Attributes_0036[] = {
- { 0x0000, 0, 0x00, "Bssid" },
- { 0x0001, 0, 0x00, "SecurityType" },
- { 0x0002, 0, 0x00, "WiFiVersion" },
- { 0x0003, 0, 0x00, "ChannelNumber" },
- { 0x0004, 0, 0x00, "Rssi" },
- { 0x0005, 0, 0x00, "BeaconLostCount" },
- { 0x0006, 0, 0x00, "BeaconRxCount" },
- { 0x0007, 0, 0x00, "PacketMulticastRxCount" },
- { 0x0008, 0, 0x00, "PacketMulticastTxCount" },
- { 0x0009, 0, 0x00, "PacketUnicastRxCount" },
- { 0x000A, 0, 0x00, "PacketUnicastTxCount" },
- { 0x000B, 0, 0x00, "CurrentMaxRate" },
- { 0x000C, 0, 0x00, "OverrunCount" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "Bssid" },
+ { 0x0001, 0, 0x02, "SecurityType" },
+ { 0x0002, 0, 0x02, "WiFiVersion" },
+ { 0x0003, 0, 0x02, "ChannelNumber" },
+ { 0x0004, 0, 0x02, "Rssi" },
+ { 0x0005, 0, 0x02, "BeaconLostCount" },
+ { 0x0006, 0, 0x02, "BeaconRxCount" },
+ { 0x0007, 0, 0x02, "PacketMulticastRxCount" },
+ { 0x0008, 0, 0x02, "PacketMulticastTxCount" },
+ { 0x0009, 0, 0x02, "PacketUnicastRxCount" },
+ { 0x000A, 0, 0x02, "PacketUnicastTxCount" },
+ { 0x000B, 0, 0x02, "CurrentMaxRate" },
+ { 0x000C, 0, 0x02, "OverrunCount" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -626,20 +626,20 @@ const matter_command_t matter_Commands_0036[] = {
};
const matter_attribute_t matter_Attributes_0037[] = {
- { 0x0000, 0, 0x00, "PHYRate" },
- { 0x0001, 0, 0x00, "FullDuplex" },
- { 0x0002, 0, 0x00, "PacketRxCount" },
- { 0x0003, 0, 0x00, "PacketTxCount" },
- { 0x0004, 0, 0x00, "TxErrCount" },
- { 0x0005, 0, 0x00, "CollisionCount" },
- { 0x0006, 0, 0x00, "OverrunCount" },
- { 0x0007, 0, 0x00, "CarrierDetect" },
- { 0x0008, 0, 0x00, "TimeSinceReset" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "PHYRate" },
+ { 0x0001, 0, 0x02, "FullDuplex" },
+ { 0x0002, 0, 0x02, "PacketRxCount" },
+ { 0x0003, 0, 0x02, "PacketTxCount" },
+ { 0x0004, 0, 0x02, "TxErrCount" },
+ { 0x0005, 0, 0x02, "CollisionCount" },
+ { 0x0006, 0, 0x02, "OverrunCount" },
+ { 0x0007, 0, 0x02, "CarrierDetect" },
+ { 0x0008, 0, 0x02, "TimeSinceReset" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -649,26 +649,26 @@ const matter_command_t matter_Commands_0037[] = {
};
const matter_attribute_t matter_Attributes_0039[] = {
- { 0x0001, 0, 0x00, "VendorName" },
- { 0x0002, 0, 0x00, "VendorID" },
- { 0x0003, 0, 0x00, "ProductName" },
- { 0x0005, 0, 0x00, "NodeLabel" },
- { 0x0007, 0, 0x00, "HardwareVersion" },
- { 0x0008, 0, 0x00, "HardwareVersionString" },
- { 0x0009, 0, 0x00, "SoftwareVersion" },
- { 0x000A, 0, 0x00, "SoftwareVersionString" },
- { 0x000B, 0, 0x00, "ManufacturingDate" },
- { 0x000C, 0, 0x00, "PartNumber" },
- { 0x000D, 0, 0x00, "ProductURL" },
- { 0x000E, 0, 0x00, "ProductLabel" },
- { 0x000F, 0, 0x00, "SerialNumber" },
- { 0x0011, 0, 0x00, "Reachable" },
- { 0x0012, 0, 0x00, "UniqueID" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0001, 0, 0x02, "VendorName" },
+ { 0x0002, 0, 0x02, "VendorID" },
+ { 0x0003, 0, 0x02, "ProductName" },
+ { 0x0005, 0, 0x03, "NodeLabel" },
+ { 0x0007, 0, 0x02, "HardwareVersion" },
+ { 0x0008, 0, 0x02, "HardwareVersionString" },
+ { 0x0009, 0, 0x02, "SoftwareVersion" },
+ { 0x000A, 0, 0x02, "SoftwareVersionString" },
+ { 0x000B, 0, 0x02, "ManufacturingDate" },
+ { 0x000C, 0, 0x02, "PartNumber" },
+ { 0x000D, 0, 0x02, "ProductURL" },
+ { 0x000E, 0, 0x02, "ProductLabel" },
+ { 0x000F, 0, 0x02, "SerialNumber" },
+ { 0x0011, 0, 0x02, "Reachable" },
+ { 0x0012, 0, 0x02, "UniqueID" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -677,14 +677,14 @@ const matter_command_t matter_Commands_0039[] = {
};
const matter_attribute_t matter_Attributes_003B[] = {
- { 0x0000, 0, 0x00, "NumberOfPositions" },
- { 0x0001, 0, 0x00, "CurrentPosition" },
- { 0x0002, 0, 0x00, "MultiPressMax" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "NumberOfPositions" },
+ { 0x0001, 0, 0x02, "CurrentPosition" },
+ { 0x0002, 0, 0x02, "MultiPressMax" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -693,14 +693,14 @@ const matter_command_t matter_Commands_003B[] = {
};
const matter_attribute_t matter_Attributes_003C[] = {
- { 0x0000, 0, 0x00, "WindowStatus" },
- { 0x0001, 0, 0x00, "AdminFabricIndex" },
- { 0x0002, 0, 0x00, "AdminVendorId" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "WindowStatus" },
+ { 0x0001, 0, 0x02, "AdminFabricIndex" },
+ { 0x0002, 0, 0x02, "AdminVendorId" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -712,17 +712,17 @@ const matter_command_t matter_Commands_003C[] = {
};
const matter_attribute_t matter_Attributes_003E[] = {
- { 0x0000, 0, 0x00, "NOCs" },
- { 0x0001, 0, 0x00, "Fabrics" },
- { 0x0002, 0, 0x00, "SupportedFabrics" },
- { 0x0003, 0, 0x00, "CommissionedFabrics" },
- { 0x0004, 0, 0x00, "TrustedRootCertificates" },
- { 0x0005, 0, 0x00, "CurrentFabricIndex" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "NOCs" },
+ { 0x0001, 0, 0x02, "Fabrics" },
+ { 0x0002, 0, 0x02, "SupportedFabrics" },
+ { 0x0003, 0, 0x02, "CommissionedFabrics" },
+ { 0x0004, 0, 0x02, "TrustedRootCertificates" },
+ { 0x0005, 0, 0x02, "CurrentFabricIndex" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -743,15 +743,15 @@ const matter_command_t matter_Commands_003E[] = {
};
const matter_attribute_t matter_Attributes_003F[] = {
- { 0x0000, 0, 0x00, "GroupKeyMap" },
- { 0x0001, 0, 0x00, "GroupTable" },
- { 0x0002, 0, 0x00, "MaxGroupsPerFabric" },
- { 0x0003, 0, 0x00, "MaxGroupKeysPerFabric" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x03, "GroupKeyMap" },
+ { 0x0001, 0, 0x02, "GroupTable" },
+ { 0x0002, 0, 0x02, "MaxGroupsPerFabric" },
+ { 0x0003, 0, 0x02, "MaxGroupKeysPerFabric" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -764,12 +764,12 @@ const matter_command_t matter_Commands_003F[] = {
};
const matter_attribute_t matter_Attributes_0040[] = {
- { 0x0000, 0, 0x00, "LabelList" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "LabelList" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -778,11 +778,11 @@ const matter_command_t matter_Commands_0040[] = {
};
const matter_attribute_t matter_Attributes_0041[] = {
- { 0x0000, 0, 0x00, "LabelList" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x03, "LabelList" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -791,12 +791,12 @@ const matter_command_t matter_Commands_0041[] = {
};
const matter_attribute_t matter_Attributes_0045[] = {
- { 0x0000, 0, 0x00, "StateValue" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "StateValue" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -805,17 +805,17 @@ const matter_command_t matter_Commands_0045[] = {
};
const matter_attribute_t matter_Attributes_0050[] = {
- { 0x0000, 0, 0x00, "Description" },
- { 0x0001, 0, 0x00, "StandardNamespace" },
- { 0x0002, 0, 0x00, "SupportedModes" },
- { 0x0003, 0, 0x00, "CurrentMode" },
- { 0x0004, 0, 0x00, "StartUpMode" },
- { 0x0005, 0, 0x00, "OnMode" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "Description" },
+ { 0x0001, 0, 0x02, "StandardNamespace" },
+ { 0x0002, 0, 0x02, "SupportedModes" },
+ { 0x0003, 0, 0x02, "CurrentMode" },
+ { 0x0004, 0, 0x03, "StartUpMode" },
+ { 0x0005, 0, 0x03, "OnMode" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -825,36 +825,36 @@ const matter_command_t matter_Commands_0050[] = {
};
const matter_attribute_t matter_Attributes_0101[] = {
- { 0x0000, 0, 0x00, "LockState" },
- { 0x0001, 0, 0x00, "LockType" },
- { 0x0002, 0, 0x00, "ActuatorEnabled" },
- { 0x0003, 0, 0x00, "DoorState" },
- { 0x0011, 0, 0x00, "NumberOfTotalUsersSupported" },
- { 0x0012, 0, 0x00, "NumberOfPINUsersSupported" },
- { 0x0013, 0, 0x00, "NumberOfRFIDUsersSupported" },
- { 0x0014, 0, 0x00, "NumberOfWeekDaySchedulesSupportedPerUser" },
- { 0x0015, 0, 0x00, "NumberOfYearDaySchedulesSupportedPerUser" },
- { 0x0016, 0, 0x00, "NumberOfHolidaySchedulesSupported" },
- { 0x0017, 0, 0x00, "MaxPINCodeLength" },
- { 0x0018, 0, 0x00, "MinPINCodeLength" },
- { 0x0019, 0, 0x00, "MaxRFIDCodeLength" },
- { 0x001A, 0, 0x00, "MinRFIDCodeLength" },
- { 0x001C, 0, 0x00, "NumberOfCredentialsSupportedPerUser" },
- { 0x0021, 0, 0x00, "Language" },
- { 0x0023, 0, 0x00, "AutoRelockTime" },
- { 0x0024, 0, 0x00, "SoundVolume" },
- { 0x0025, 0, 0x00, "OperatingMode" },
- { 0x0026, 0, 0x00, "SupportedOperatingModes" },
- { 0x0029, 0, 0x00, "EnableOneTouchLocking" },
- { 0x002B, 0, 0x00, "EnablePrivacyModeButton" },
- { 0x0030, 0, 0x00, "WrongCodeEntryLimit" },
- { 0x0031, 0, 0x00, "UserCodeTemporaryDisableTime" },
- { 0x0033, 0, 0x00, "RequirePINforRemoteOperation" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "LockState" },
+ { 0x0001, 0, 0x02, "LockType" },
+ { 0x0002, 0, 0x02, "ActuatorEnabled" },
+ { 0x0003, 0, 0x02, "DoorState" },
+ { 0x0011, 0, 0x02, "NumberOfTotalUsersSupported" },
+ { 0x0012, 0, 0x02, "NumberOfPINUsersSupported" },
+ { 0x0013, 0, 0x02, "NumberOfRFIDUsersSupported" },
+ { 0x0014, 0, 0x02, "NumberOfWeekDaySchedulesSupportedPerUser" },
+ { 0x0015, 0, 0x02, "NumberOfYearDaySchedulesSupportedPerUser" },
+ { 0x0016, 0, 0x02, "NumberOfHolidaySchedulesSupported" },
+ { 0x0017, 0, 0x02, "MaxPINCodeLength" },
+ { 0x0018, 0, 0x02, "MinPINCodeLength" },
+ { 0x0019, 0, 0x02, "MaxRFIDCodeLength" },
+ { 0x001A, 0, 0x02, "MinRFIDCodeLength" },
+ { 0x001C, 0, 0x02, "NumberOfCredentialsSupportedPerUser" },
+ { 0x0021, 0, 0x03, "Language" },
+ { 0x0023, 0, 0x03, "AutoRelockTime" },
+ { 0x0024, 0, 0x03, "SoundVolume" },
+ { 0x0025, 0, 0x03, "OperatingMode" },
+ { 0x0026, 0, 0x02, "SupportedOperatingModes" },
+ { 0x0029, 0, 0x03, "EnableOneTouchLocking" },
+ { 0x002B, 0, 0x03, "EnablePrivacyModeButton" },
+ { 0x0030, 0, 0x03, "WrongCodeEntryLimit" },
+ { 0x0031, 0, 0x03, "UserCodeTemporaryDisableTime" },
+ { 0x0033, 0, 0x01, "RequirePINforRemoteOperation" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -881,33 +881,33 @@ const matter_command_t matter_Commands_0101[] = {
};
const matter_attribute_t matter_Attributes_0102[] = {
- { 0x0000, 0, 0x00, "Type" },
- { 0x0001, 0, 0x00, "PhysicalClosedLimitLift" },
- { 0x0002, 0, 0x00, "PhysicalClosedLimitTilt" },
- { 0x0003, 0, 0x00, "CurrentPositionLift" },
- { 0x0004, 0, 0x00, "CurrentPositionTilt" },
- { 0x0005, 0, 0x00, "NumberOfActuationsLift" },
- { 0x0006, 0, 0x00, "NumberOfActuationsTilt" },
- { 0x0007, 0, 0x00, "ConfigStatus" },
- { 0x0008, 0, 0x00, "CurrentPositionLiftPercentage" },
- { 0x0009, 0, 0x00, "CurrentPositionTiltPercentage" },
- { 0x000A, 0, 0x00, "OperationalStatus" },
- { 0x000B, 0, 0x00, "TargetPositionLiftPercent100ths" },
- { 0x000C, 0, 0x00, "TargetPositionTiltPercent100ths" },
- { 0x000D, 0, 0x00, "EndProductType" },
- { 0x000E, 0, 0x00, "CurrentPositionLiftPercent100ths" },
- { 0x000F, 0, 0x00, "CurrentPositionTiltPercent100ths" },
- { 0x0010, 0, 0x00, "InstalledOpenLimitLift" },
- { 0x0011, 0, 0x00, "InstalledClosedLimitLift" },
- { 0x0012, 0, 0x00, "InstalledOpenLimitTilt" },
- { 0x0013, 0, 0x00, "InstalledClosedLimitTilt" },
- { 0x0017, 0, 0x00, "Mode" },
- { 0x001A, 0, 0x00, "SafetyStatus" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "Type" },
+ { 0x0001, 0, 0x02, "PhysicalClosedLimitLift" },
+ { 0x0002, 0, 0x02, "PhysicalClosedLimitTilt" },
+ { 0x0003, 0, 0x02, "CurrentPositionLift" },
+ { 0x0004, 0, 0x02, "CurrentPositionTilt" },
+ { 0x0005, 0, 0x02, "NumberOfActuationsLift" },
+ { 0x0006, 0, 0x02, "NumberOfActuationsTilt" },
+ { 0x0007, 0, 0x02, "ConfigStatus" },
+ { 0x0008, 0, 0x02, "CurrentPositionLiftPercentage" },
+ { 0x0009, 0, 0x02, "CurrentPositionTiltPercentage" },
+ { 0x000A, 0, 0x02, "OperationalStatus" },
+ { 0x000B, 0, 0x02, "TargetPositionLiftPercent100ths" },
+ { 0x000C, 0, 0x02, "TargetPositionTiltPercent100ths" },
+ { 0x000D, 0, 0x02, "EndProductType" },
+ { 0x000E, 0, 0x02, "CurrentPositionLiftPercent100ths" },
+ { 0x000F, 0, 0x02, "CurrentPositionTiltPercent100ths" },
+ { 0x0010, 0, 0x02, "InstalledOpenLimitLift" },
+ { 0x0011, 0, 0x02, "InstalledClosedLimitLift" },
+ { 0x0012, 0, 0x02, "InstalledOpenLimitTilt" },
+ { 0x0013, 0, 0x02, "InstalledClosedLimitTilt" },
+ { 0x0017, 0, 0x03, "Mode" },
+ { 0x001A, 0, 0x02, "SafetyStatus" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -923,15 +923,15 @@ const matter_command_t matter_Commands_0102[] = {
};
const matter_attribute_t matter_Attributes_0103[] = {
- { 0x0001, 0, 0x00, "BarrierMovingState" },
- { 0x0002, 0, 0x00, "BarrierSafetyStatus" },
- { 0x0003, 0, 0x00, "BarrierCapabilities" },
- { 0x000A, 0, 0x00, "BarrierPosition" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0001, 0, 0x02, "BarrierMovingState" },
+ { 0x0002, 0, 0x02, "BarrierSafetyStatus" },
+ { 0x0003, 0, 0x02, "BarrierCapabilities" },
+ { 0x000A, 0, 0x02, "BarrierPosition" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -942,34 +942,34 @@ const matter_command_t matter_Commands_0103[] = {
};
const matter_attribute_t matter_Attributes_0200[] = {
- { 0x0000, 0, 0x00, "MaxPressure" },
- { 0x0001, 0, 0x00, "MaxSpeed" },
- { 0x0002, 0, 0x00, "MaxFlow" },
- { 0x0003, 0, 0x00, "MinConstPressure" },
- { 0x0004, 0, 0x00, "MaxConstPressure" },
- { 0x0005, 0, 0x00, "MinCompPressure" },
- { 0x0006, 0, 0x00, "MaxCompPressure" },
- { 0x0007, 0, 0x00, "MinConstSpeed" },
- { 0x0008, 0, 0x00, "MaxConstSpeed" },
- { 0x0009, 0, 0x00, "MinConstFlow" },
- { 0x000A, 0, 0x00, "MaxConstFlow" },
- { 0x000B, 0, 0x00, "MinConstTemp" },
- { 0x000C, 0, 0x00, "MaxConstTemp" },
- { 0x0010, 0, 0x00, "PumpStatus" },
- { 0x0011, 0, 0x00, "EffectiveOperationMode" },
- { 0x0012, 0, 0x00, "EffectiveControlMode" },
- { 0x0013, 0, 0x00, "Capacity" },
- { 0x0014, 0, 0x00, "Speed" },
- { 0x0015, 0, 0x00, "LifetimeRunningHours" },
- { 0x0016, 0, 0x00, "Power" },
- { 0x0017, 0, 0x00, "LifetimeEnergyConsumed" },
- { 0x0020, 0, 0x00, "OperationMode" },
- { 0x0021, 0, 0x00, "ControlMode" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "MaxPressure" },
+ { 0x0001, 0, 0x02, "MaxSpeed" },
+ { 0x0002, 0, 0x02, "MaxFlow" },
+ { 0x0003, 0, 0x02, "MinConstPressure" },
+ { 0x0004, 0, 0x02, "MaxConstPressure" },
+ { 0x0005, 0, 0x02, "MinCompPressure" },
+ { 0x0006, 0, 0x02, "MaxCompPressure" },
+ { 0x0007, 0, 0x02, "MinConstSpeed" },
+ { 0x0008, 0, 0x02, "MaxConstSpeed" },
+ { 0x0009, 0, 0x02, "MinConstFlow" },
+ { 0x000A, 0, 0x02, "MaxConstFlow" },
+ { 0x000B, 0, 0x02, "MinConstTemp" },
+ { 0x000C, 0, 0x02, "MaxConstTemp" },
+ { 0x0010, 0, 0x02, "PumpStatus" },
+ { 0x0011, 0, 0x02, "EffectiveOperationMode" },
+ { 0x0012, 0, 0x02, "EffectiveControlMode" },
+ { 0x0013, 0, 0x02, "Capacity" },
+ { 0x0014, 0, 0x02, "Speed" },
+ { 0x0015, 0, 0x03, "LifetimeRunningHours" },
+ { 0x0016, 0, 0x02, "Power" },
+ { 0x0017, 0, 0x03, "LifetimeEnergyConsumed" },
+ { 0x0020, 0, 0x03, "OperationMode" },
+ { 0x0021, 0, 0x03, "ControlMode" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -978,26 +978,26 @@ const matter_command_t matter_Commands_0200[] = {
};
const matter_attribute_t matter_Attributes_0201[] = {
- { 0x0000, 0, 0x00, "LocalTemperature" },
- { 0x0003, 0, 0x00, "AbsMinHeatSetpointLimit" },
- { 0x0004, 0, 0x00, "AbsMaxHeatSetpointLimit" },
- { 0x0005, 0, 0x00, "AbsMinCoolSetpointLimit" },
- { 0x0006, 0, 0x00, "AbsMaxCoolSetpointLimit" },
- { 0x0011, 0, 0x00, "OccupiedCoolingSetpoint" },
- { 0x0012, 0, 0x00, "OccupiedHeatingSetpoint" },
- { 0x0015, 0, 0x00, "MinHeatSetpointLimit" },
- { 0x0016, 0, 0x00, "MaxHeatSetpointLimit" },
- { 0x0017, 0, 0x00, "MinCoolSetpointLimit" },
- { 0x0018, 0, 0x00, "MaxCoolSetpointLimit" },
- { 0x0019, 0, 0x00, "MinSetpointDeadBand" },
- { 0x001B, 0, 0x00, "ControlSequenceOfOperation" },
- { 0x001C, 0, 0x00, "SystemMode" },
- { 0x0020, 0, 0x00, "StartOfWeek" },
- { 0x0021, 0, 0x00, "NumberOfWeeklyTransitions" },
- { 0x0022, 0, 0x00, "NumberOfDailyTransitions" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "LocalTemperature" },
+ { 0x0003, 0, 0x02, "AbsMinHeatSetpointLimit" },
+ { 0x0004, 0, 0x02, "AbsMaxHeatSetpointLimit" },
+ { 0x0005, 0, 0x02, "AbsMinCoolSetpointLimit" },
+ { 0x0006, 0, 0x02, "AbsMaxCoolSetpointLimit" },
+ { 0x0011, 0, 0x03, "OccupiedCoolingSetpoint" },
+ { 0x0012, 0, 0x03, "OccupiedHeatingSetpoint" },
+ { 0x0015, 0, 0x03, "MinHeatSetpointLimit" },
+ { 0x0016, 0, 0x03, "MaxHeatSetpointLimit" },
+ { 0x0017, 0, 0x03, "MinCoolSetpointLimit" },
+ { 0x0018, 0, 0x03, "MaxCoolSetpointLimit" },
+ { 0x0019, 0, 0x03, "MinSetpointDeadBand" },
+ { 0x001B, 0, 0x03, "ControlSequenceOfOperation" },
+ { 0x001C, 0, 0x03, "SystemMode" },
+ { 0x0020, 0, 0x02, "StartOfWeek" },
+ { 0x0021, 0, 0x02, "NumberOfWeeklyTransitions" },
+ { 0x0022, 0, 0x02, "NumberOfDailyTransitions" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1010,22 +1010,22 @@ const matter_command_t matter_Commands_0201[] = {
};
const matter_attribute_t matter_Attributes_0202[] = {
- { 0x0000, 0, 0x00, "FanMode" },
- { 0x0001, 0, 0x00, "FanModeSequence" },
- { 0x0002, 0, 0x00, "PercentSetting" },
- { 0x0003, 0, 0x00, "PercentCurrent" },
- { 0x0004, 0, 0x00, "SpeedMax" },
- { 0x0005, 0, 0x00, "SpeedSetting" },
- { 0x0006, 0, 0x00, "SpeedCurrent" },
- { 0x0007, 0, 0x00, "RockSupport" },
- { 0x0008, 0, 0x00, "RockSetting" },
- { 0x0009, 0, 0x00, "WindSupport" },
- { 0x000A, 0, 0x00, "WindSetting" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x03, "FanMode" },
+ { 0x0001, 0, 0x03, "FanModeSequence" },
+ { 0x0002, 0, 0x03, "PercentSetting" },
+ { 0x0003, 0, 0x02, "PercentCurrent" },
+ { 0x0004, 0, 0x02, "SpeedMax" },
+ { 0x0005, 0, 0x03, "SpeedSetting" },
+ { 0x0006, 0, 0x02, "SpeedCurrent" },
+ { 0x0007, 0, 0x02, "RockSupport" },
+ { 0x0008, 0, 0x03, "RockSetting" },
+ { 0x0009, 0, 0x02, "WindSupport" },
+ { 0x000A, 0, 0x03, "WindSetting" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1034,14 +1034,14 @@ const matter_command_t matter_Commands_0202[] = {
};
const matter_attribute_t matter_Attributes_0204[] = {
- { 0x0000, 0, 0x00, "TemperatureDisplayMode" },
- { 0x0001, 0, 0x00, "KeypadLockout" },
- { 0x0002, 0, 0x00, "ScheduleProgrammingVisibility" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x03, "TemperatureDisplayMode" },
+ { 0x0001, 0, 0x03, "KeypadLockout" },
+ { 0x0002, 0, 0x03, "ScheduleProgrammingVisibility" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1050,63 +1050,63 @@ const matter_command_t matter_Commands_0204[] = {
};
const matter_attribute_t matter_Attributes_0300[] = {
- { 0x0000, 0, 0x00, "CurrentHue" },
- { 0x0001, 0, 0x00, "CurrentSaturation" },
- { 0x0002, 0, 0x00, "RemainingTime" },
- { 0x0003, 0, 0x00, "CurrentX" },
- { 0x0004, 0, 0x00, "CurrentY" },
- { 0x0005, 0, 0x00, "DriftCompensation" },
- { 0x0006, 0, 0x00, "CompensationText" },
- { 0x0007, 0, 0x00, "ColorTemperatureMireds" },
- { 0x0008, 0, 0x00, "ColorMode" },
- { 0x000F, 0, 0x00, "Options" },
- { 0x0010, 0, 0x00, "NumberOfPrimaries" },
- { 0x0011, 0, 0x00, "Primary1X" },
- { 0x0012, 0, 0x00, "Primary1Y" },
- { 0x0013, 0, 0x00, "Primary1Intensity" },
- { 0x0015, 0, 0x00, "Primary2X" },
- { 0x0016, 0, 0x00, "Primary2Y" },
- { 0x0017, 0, 0x00, "Primary2Intensity" },
- { 0x0019, 0, 0x00, "Primary3X" },
- { 0x001A, 0, 0x00, "Primary3Y" },
- { 0x001B, 0, 0x00, "Primary3Intensity" },
- { 0x0020, 0, 0x00, "Primary4X" },
- { 0x0021, 0, 0x00, "Primary4Y" },
- { 0x0022, 0, 0x00, "Primary4Intensity" },
- { 0x0024, 0, 0x00, "Primary5X" },
- { 0x0025, 0, 0x00, "Primary5Y" },
- { 0x0026, 0, 0x00, "Primary5Intensity" },
- { 0x0028, 0, 0x00, "Primary6X" },
- { 0x0029, 0, 0x00, "Primary6Y" },
- { 0x002A, 0, 0x00, "Primary6Intensity" },
- { 0x0030, 0, 0x00, "WhitePointX" },
- { 0x0031, 0, 0x00, "WhitePointY" },
- { 0x0032, 0, 0x00, "ColorPointRX" },
- { 0x0033, 0, 0x00, "ColorPointRY" },
- { 0x0034, 0, 0x00, "ColorPointRIntensity" },
- { 0x0036, 0, 0x00, "ColorPointGX" },
- { 0x0037, 0, 0x00, "ColorPointGY" },
- { 0x0038, 0, 0x00, "ColorPointGIntensity" },
- { 0x003A, 0, 0x00, "ColorPointBX" },
- { 0x003B, 0, 0x00, "ColorPointBY" },
- { 0x003C, 0, 0x00, "ColorPointBIntensity" },
- { 0x4000, 0, 0x00, "EnhancedCurrentHue" },
- { 0x4001, 0, 0x00, "EnhancedColorMode" },
- { 0x4002, 0, 0x00, "ColorLoopActive" },
- { 0x4003, 0, 0x00, "ColorLoopDirection" },
- { 0x4004, 0, 0x00, "ColorLoopTime" },
- { 0x4005, 0, 0x00, "ColorLoopStartEnhancedHue" },
- { 0x4006, 0, 0x00, "ColorLoopStoredEnhancedHue" },
- { 0x400A, 0, 0x00, "ColorCapabilities" },
- { 0x400B, 0, 0x00, "ColorTempPhysicalMinMireds" },
- { 0x400C, 0, 0x00, "ColorTempPhysicalMaxMireds" },
- { 0x400D, 0, 0x00, "CoupleColorTempToLevelMinMireds" },
- { 0x4010, 0, 0x00, "StartUpColorTemperatureMireds" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "CurrentHue" },
+ { 0x0001, 0, 0x02, "CurrentSaturation" },
+ { 0x0002, 0, 0x02, "RemainingTime" },
+ { 0x0003, 0, 0x02, "CurrentX" },
+ { 0x0004, 0, 0x02, "CurrentY" },
+ { 0x0005, 0, 0x02, "DriftCompensation" },
+ { 0x0006, 0, 0x02, "CompensationText" },
+ { 0x0007, 0, 0x02, "ColorTemperatureMireds" },
+ { 0x0008, 0, 0x02, "ColorMode" },
+ { 0x000F, 0, 0x03, "Options" },
+ { 0x0010, 0, 0x02, "NumberOfPrimaries" },
+ { 0x0011, 0, 0x02, "Primary1X" },
+ { 0x0012, 0, 0x02, "Primary1Y" },
+ { 0x0013, 0, 0x02, "Primary1Intensity" },
+ { 0x0015, 0, 0x02, "Primary2X" },
+ { 0x0016, 0, 0x02, "Primary2Y" },
+ { 0x0017, 0, 0x02, "Primary2Intensity" },
+ { 0x0019, 0, 0x02, "Primary3X" },
+ { 0x001A, 0, 0x02, "Primary3Y" },
+ { 0x001B, 0, 0x02, "Primary3Intensity" },
+ { 0x0020, 0, 0x02, "Primary4X" },
+ { 0x0021, 0, 0x02, "Primary4Y" },
+ { 0x0022, 0, 0x02, "Primary4Intensity" },
+ { 0x0024, 0, 0x02, "Primary5X" },
+ { 0x0025, 0, 0x02, "Primary5Y" },
+ { 0x0026, 0, 0x02, "Primary5Intensity" },
+ { 0x0028, 0, 0x02, "Primary6X" },
+ { 0x0029, 0, 0x02, "Primary6Y" },
+ { 0x002A, 0, 0x02, "Primary6Intensity" },
+ { 0x0030, 0, 0x03, "WhitePointX" },
+ { 0x0031, 0, 0x03, "WhitePointY" },
+ { 0x0032, 0, 0x03, "ColorPointRX" },
+ { 0x0033, 0, 0x03, "ColorPointRY" },
+ { 0x0034, 0, 0x03, "ColorPointRIntensity" },
+ { 0x0036, 0, 0x03, "ColorPointGX" },
+ { 0x0037, 0, 0x03, "ColorPointGY" },
+ { 0x0038, 0, 0x03, "ColorPointGIntensity" },
+ { 0x003A, 0, 0x03, "ColorPointBX" },
+ { 0x003B, 0, 0x03, "ColorPointBY" },
+ { 0x003C, 0, 0x03, "ColorPointBIntensity" },
+ { 0x4000, 0, 0x02, "EnhancedCurrentHue" },
+ { 0x4001, 0, 0x02, "EnhancedColorMode" },
+ { 0x4002, 0, 0x02, "ColorLoopActive" },
+ { 0x4003, 0, 0x02, "ColorLoopDirection" },
+ { 0x4004, 0, 0x02, "ColorLoopTime" },
+ { 0x4005, 0, 0x02, "ColorLoopStartEnhancedHue" },
+ { 0x4006, 0, 0x02, "ColorLoopStoredEnhancedHue" },
+ { 0x400A, 0, 0x02, "ColorCapabilities" },
+ { 0x400B, 0, 0x02, "ColorTempPhysicalMinMireds" },
+ { 0x400C, 0, 0x02, "ColorTempPhysicalMaxMireds" },
+ { 0x400D, 0, 0x02, "CoupleColorTempToLevelMinMireds" },
+ { 0x4010, 0, 0x03, "StartUpColorTemperatureMireds" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1134,25 +1134,25 @@ const matter_command_t matter_Commands_0300[] = {
};
const matter_attribute_t matter_Attributes_0301[] = {
- { 0x0000, 0, 0x00, "PhysicalMinLevel" },
- { 0x0001, 0, 0x00, "PhysicalMaxLevel" },
- { 0x0002, 0, 0x00, "BallastStatus" },
- { 0x0010, 0, 0x00, "MinLevel" },
- { 0x0011, 0, 0x00, "MaxLevel" },
- { 0x0014, 0, 0x00, "IntrinsicBalanceFactor" },
- { 0x0015, 0, 0x00, "BallastFactorAdjustment" },
- { 0x0020, 0, 0x00, "LampQuantity" },
- { 0x0030, 0, 0x00, "LampType" },
- { 0x0031, 0, 0x00, "LampManufacturer" },
- { 0x0032, 0, 0x00, "LampRatedHours" },
- { 0x0033, 0, 0x00, "LampBurnHours" },
- { 0x0034, 0, 0x00, "LampAlarmMode" },
- { 0x0035, 0, 0x00, "LampBurnHoursTripPoint" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "PhysicalMinLevel" },
+ { 0x0001, 0, 0x02, "PhysicalMaxLevel" },
+ { 0x0002, 0, 0x02, "BallastStatus" },
+ { 0x0010, 0, 0x03, "MinLevel" },
+ { 0x0011, 0, 0x03, "MaxLevel" },
+ { 0x0014, 0, 0x03, "IntrinsicBalanceFactor" },
+ { 0x0015, 0, 0x03, "BallastFactorAdjustment" },
+ { 0x0020, 0, 0x02, "LampQuantity" },
+ { 0x0030, 0, 0x03, "LampType" },
+ { 0x0031, 0, 0x03, "LampManufacturer" },
+ { 0x0032, 0, 0x03, "LampRatedHours" },
+ { 0x0033, 0, 0x03, "LampBurnHours" },
+ { 0x0034, 0, 0x03, "LampAlarmMode" },
+ { 0x0035, 0, 0x03, "LampBurnHoursTripPoint" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1161,16 +1161,16 @@ const matter_command_t matter_Commands_0301[] = {
};
const matter_attribute_t matter_Attributes_0400[] = {
- { 0x0000, 0, 0x00, "MeasuredValue" },
- { 0x0001, 0, 0x00, "MinMeasuredValue" },
- { 0x0002, 0, 0x00, "MaxMeasuredValue" },
- { 0x0003, 0, 0x00, "Tolerance" },
- { 0x0004, 0, 0x00, "LightSensorType" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "MeasuredValue" },
+ { 0x0001, 0, 0x02, "MinMeasuredValue" },
+ { 0x0002, 0, 0x02, "MaxMeasuredValue" },
+ { 0x0003, 0, 0x02, "Tolerance" },
+ { 0x0004, 0, 0x02, "LightSensorType" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1179,13 +1179,13 @@ const matter_command_t matter_Commands_0400[] = {
};
const matter_attribute_t matter_Attributes_0402[] = {
- { 0x0000, 0, 0x00, "MeasuredValue" },
- { 0x0001, 0, 0x00, "MinMeasuredValue" },
- { 0x0002, 0, 0x00, "MaxMeasuredValue" },
- { 0x0003, 0, 0x00, "Tolerance" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "MeasuredValue" },
+ { 0x0001, 0, 0x02, "MinMeasuredValue" },
+ { 0x0002, 0, 0x02, "MaxMeasuredValue" },
+ { 0x0003, 0, 0x02, "Tolerance" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1194,18 +1194,18 @@ const matter_command_t matter_Commands_0402[] = {
};
const matter_attribute_t matter_Attributes_0403[] = {
- { 0x0000, 0, 0x00, "MeasuredValue" },
- { 0x0001, 0, 0x00, "MinMeasuredValue" },
- { 0x0002, 0, 0x00, "MaxMeasuredValue" },
- { 0x0003, 0, 0x00, "Tolerance" },
- { 0x0010, 0, 0x00, "ScaledValue" },
- { 0x0011, 0, 0x00, "MinScaledValue" },
- { 0x0012, 0, 0x00, "MaxScaledValue" },
- { 0x0013, 0, 0x00, "ScaledTolerance" },
- { 0x0014, 0, 0x00, "Scale" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "MeasuredValue" },
+ { 0x0001, 0, 0x02, "MinMeasuredValue" },
+ { 0x0002, 0, 0x02, "MaxMeasuredValue" },
+ { 0x0003, 0, 0x02, "Tolerance" },
+ { 0x0010, 0, 0x02, "ScaledValue" },
+ { 0x0011, 0, 0x02, "MinScaledValue" },
+ { 0x0012, 0, 0x02, "MaxScaledValue" },
+ { 0x0013, 0, 0x02, "ScaledTolerance" },
+ { 0x0014, 0, 0x02, "Scale" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1214,15 +1214,15 @@ const matter_command_t matter_Commands_0403[] = {
};
const matter_attribute_t matter_Attributes_0404[] = {
- { 0x0000, 0, 0x00, "MeasuredValue" },
- { 0x0001, 0, 0x00, "MinMeasuredValue" },
- { 0x0002, 0, 0x00, "MaxMeasuredValue" },
- { 0x0003, 0, 0x00, "Tolerance" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "MeasuredValue" },
+ { 0x0001, 0, 0x02, "MinMeasuredValue" },
+ { 0x0002, 0, 0x02, "MaxMeasuredValue" },
+ { 0x0003, 0, 0x02, "Tolerance" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1231,15 +1231,15 @@ const matter_command_t matter_Commands_0404[] = {
};
const matter_attribute_t matter_Attributes_0405[] = {
- { 0x0000, 0, 0x00, "MeasuredValue" },
- { 0x0001, 0, 0x00, "MinMeasuredValue" },
- { 0x0002, 0, 0x00, "MaxMeasuredValue" },
- { 0x0003, 0, 0x00, "Tolerance" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "MeasuredValue" },
+ { 0x0001, 0, 0x02, "MinMeasuredValue" },
+ { 0x0002, 0, 0x02, "MaxMeasuredValue" },
+ { 0x0003, 0, 0x02, "Tolerance" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1248,14 +1248,14 @@ const matter_command_t matter_Commands_0405[] = {
};
const matter_attribute_t matter_Attributes_0406[] = {
- { 0x0000, 0, 0x00, "Occupancy" },
- { 0x0001, 0, 0x00, "OccupancySensorType" },
- { 0x0002, 0, 0x00, "OccupancySensorTypeBitmap" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "Occupancy" },
+ { 0x0001, 0, 0x02, "OccupancySensorType" },
+ { 0x0002, 0, 0x02, "OccupancySensorTypeBitmap" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1264,12 +1264,12 @@ const matter_command_t matter_Commands_0406[] = {
};
const matter_attribute_t matter_Attributes_0503[] = {
- { 0x0000, 0, 0x00, "MACAddress" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "MACAddress" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1278,14 +1278,14 @@ const matter_command_t matter_Commands_0503[] = {
};
const matter_attribute_t matter_Attributes_0504[] = {
- { 0x0000, 0, 0x00, "ChannelList" },
- { 0x0001, 0, 0x00, "Lineup" },
- { 0x0002, 0, 0x00, "CurrentChannel" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "ChannelList" },
+ { 0x0001, 0, 0x02, "Lineup" },
+ { 0x0002, 0, 0x02, "CurrentChannel" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1297,13 +1297,13 @@ const matter_command_t matter_Commands_0504[] = {
};
const matter_attribute_t matter_Attributes_0505[] = {
- { 0x0000, 0, 0x00, "TargetList" },
- { 0x0001, 0, 0x00, "CurrentTarget" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "TargetList" },
+ { 0x0001, 0, 0x02, "CurrentTarget" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1313,18 +1313,18 @@ const matter_command_t matter_Commands_0505[] = {
};
const matter_attribute_t matter_Attributes_0506[] = {
- { 0x0000, 0, 0x00, "CurrentState" },
- { 0x0001, 0, 0x00, "StartTime" },
- { 0x0002, 0, 0x00, "Duration" },
- { 0x0003, 0, 0x00, "SampledPosition" },
- { 0x0004, 0, 0x00, "PlaybackSpeed" },
- { 0x0005, 0, 0x00, "SeekRangeEnd" },
- { 0x0006, 0, 0x00, "SeekRangeStart" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "CurrentState" },
+ { 0x0001, 0, 0x02, "StartTime" },
+ { 0x0002, 0, 0x02, "Duration" },
+ { 0x0003, 0, 0x02, "SampledPosition" },
+ { 0x0004, 0, 0x02, "PlaybackSpeed" },
+ { 0x0005, 0, 0x02, "SeekRangeEnd" },
+ { 0x0006, 0, 0x02, "SeekRangeStart" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1344,13 +1344,13 @@ const matter_command_t matter_Commands_0506[] = {
};
const matter_attribute_t matter_Attributes_0507[] = {
- { 0x0000, 0, 0x00, "InputList" },
- { 0x0001, 0, 0x00, "CurrentInput" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "InputList" },
+ { 0x0001, 0, 0x02, "CurrentInput" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1363,11 +1363,11 @@ const matter_command_t matter_Commands_0507[] = {
};
const matter_attribute_t matter_Attributes_0508[] = {
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1377,11 +1377,11 @@ const matter_command_t matter_Commands_0508[] = {
};
const matter_attribute_t matter_Attributes_0509[] = {
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1391,13 +1391,13 @@ const matter_command_t matter_Commands_0509[] = {
};
const matter_attribute_t matter_Attributes_050A[] = {
- { 0x0000, 0, 0x00, "AcceptHeader" },
- { 0x0001, 0, 0x00, "SupportedStreamingProtocols" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "AcceptHeader" },
+ { 0x0001, 0, 0x03, "SupportedStreamingProtocols" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1408,13 +1408,13 @@ const matter_command_t matter_Commands_050A[] = {
};
const matter_attribute_t matter_Attributes_050B[] = {
- { 0x0000, 0, 0x00, "OutputList" },
- { 0x0001, 0, 0x00, "CurrentOutput" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "OutputList" },
+ { 0x0001, 0, 0x02, "CurrentOutput" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1425,13 +1425,13 @@ const matter_command_t matter_Commands_050B[] = {
};
const matter_attribute_t matter_Attributes_050C[] = {
- { 0x0000, 0, 0x00, "CatalogList" },
- { 0x0001, 0, 0x00, "CurrentApp" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "CatalogList" },
+ { 0x0001, 0, 0x03, "CurrentApp" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1443,19 +1443,19 @@ const matter_command_t matter_Commands_050C[] = {
};
const matter_attribute_t matter_Attributes_050D[] = {
- { 0x0000, 0, 0x00, "VendorName" },
- { 0x0001, 0, 0x00, "VendorID" },
- { 0x0002, 0, 0x00, "ApplicationName" },
- { 0x0003, 0, 0x00, "ProductID" },
- { 0x0004, 0, 0x00, "Application" },
- { 0x0005, 0, 0x00, "Status" },
- { 0x0006, 0, 0x00, "ApplicationVersion" },
- { 0x0007, 0, 0x00, "AllowedVendorList" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "VendorName" },
+ { 0x0001, 0, 0x02, "VendorID" },
+ { 0x0002, 0, 0x02, "ApplicationName" },
+ { 0x0003, 0, 0x02, "ProductID" },
+ { 0x0004, 0, 0x02, "Application" },
+ { 0x0005, 0, 0x02, "Status" },
+ { 0x0006, 0, 0x02, "ApplicationVersion" },
+ { 0x0007, 0, 0x02, "AllowedVendorList" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1464,11 +1464,11 @@ const matter_command_t matter_Commands_050D[] = {
};
const matter_attribute_t matter_Attributes_050E[] = {
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
@@ -1480,22 +1480,22 @@ const matter_command_t matter_Commands_050E[] = {
};
const matter_attribute_t matter_Attributes_0B04[] = {
- { 0x0000, 0, 0x00, "MeasurementType" },
- { 0x0304, 0, 0x00, "TotalActivePower" },
- { 0x0505, 0, 0x00, "RmsVoltage" },
- { 0x0506, 0, 0x00, "RmsVoltageMin" },
- { 0x0507, 0, 0x00, "RmsVoltageMax" },
- { 0x0508, 0, 0x00, "RmsCurrent" },
- { 0x0509, 0, 0x00, "RmsCurrentMin" },
- { 0x050A, 0, 0x00, "RmsCurrentMax" },
- { 0x050B, 0, 0x00, "ActivePower" },
- { 0x050C, 0, 0x00, "ActivePowerMin" },
- { 0x050D, 0, 0x00, "ActivePowerMax" },
- { 0xFFF8, 0, 0x00, "GeneratedCommandList" },
- { 0xFFF9, 0, 0x00, "AcceptedCommandList" },
- { 0xFFFB, 0, 0x00, "AttributeList" },
- { 0xFFFC, 0, 0x00, "FeatureMap" },
- { 0xFFFD, 0, 0x00, "ClusterRevision" },
+ { 0x0000, 0, 0x02, "MeasurementType" },
+ { 0x0304, 0, 0x02, "TotalActivePower" },
+ { 0x0505, 0, 0x02, "RmsVoltage" },
+ { 0x0506, 0, 0x02, "RmsVoltageMin" },
+ { 0x0507, 0, 0x02, "RmsVoltageMax" },
+ { 0x0508, 0, 0x02, "RmsCurrent" },
+ { 0x0509, 0, 0x02, "RmsCurrentMin" },
+ { 0x050A, 0, 0x02, "RmsCurrentMax" },
+ { 0x050B, 0, 0x02, "ActivePower" },
+ { 0x050C, 0, 0x02, "ActivePowerMin" },
+ { 0x050D, 0, 0x02, "ActivePowerMax" },
+ { 0xFFF8, 0, 0x02, "GeneratedCommandList" },
+ { 0xFFF9, 0, 0x02, "AcceptedCommandList" },
+ { 0xFFFB, 0, 0x02, "AttributeList" },
+ { 0xFFFC, 0, 0x02, "FeatureMap" },
+ { 0xFFFD, 0, 0x02, "ClusterRevision" },
{ 0xFFFF, 0, 0x00, NULL },
};
diff --git a/lib/libesp32/berry_matter/src/be_matter_counter.cpp b/lib/libesp32/berry_matter/src/be_matter_counter.cpp
index a33dd6442..f8870156f 100644
--- a/lib/libesp32/berry_matter/src/be_matter_counter.cpp
+++ b/lib/libesp32/berry_matter/src/be_matter_counter.cpp
@@ -69,6 +69,12 @@ static void mc_deinit(bvm *vm, matter_counter_t *c) {
}
BE_FUNC_CTYPE_DECLARE(mc_deinit, "", "@.")
+// do a unisgned int32 comparison
+bbool mc_is_greater(uint32_t a, uint32_t b) {
+ return a > b;
+}
+BE_FUNC_CTYPE_DECLARE(mc_is_greater, "b", "ii")
+
static void mc_reset(matter_counter_t *c, int32_t val) {
c->counter = val;
c->window.reset();
@@ -175,7 +181,7 @@ static int mc_tostring(bvm *vm) {
#include "be_fixed_be_class_Matter_Counter.h"
/* @const_object_info_begin
-class be_class_Matter_Counter (scope: global, name: Matter_Counter) {
+class be_class_Matter_Counter (scope: global, name: Matter_Counter, strings: weak) {
_p, var
init, ctype_func(mc_init)
deinit, ctype_func(mc_deinit)
@@ -185,6 +191,8 @@ class be_class_Matter_Counter (scope: global, name: Matter_Counter) {
val, ctype_func(mc_val)
next, ctype_func(mc_next)
validate, ctype_func(mc_validate)
+
+ is_greater, static_ctype_func(mc_is_greater) // compare two numbers as unsigned 32 bits
}
@const_object_info_end */
diff --git a/lib/libesp32/berry_matter/src/be_matter_module.c b/lib/libesp32/berry_matter/src/be_matter_module.c
index dce07d4f7..8b5d31b5c 100644
--- a/lib/libesp32/berry_matter/src/be_matter_module.c
+++ b/lib/libesp32/berry_matter/src/be_matter_module.c
@@ -25,8 +25,6 @@
#include "be_constobj.h"
#include "be_mapping.h"
-#include "be_matter_qrcode_min_js.h"
-
// Matter logo
static const uint8_t MATTER_LOGO[] =
""
@@ -40,6 +38,7 @@ static const uint8_t MATTER_LOGO[] =
extern const bclass be_class_Matter_Counter;
extern const bclass be_class_Matter_Verhoeff;
+extern const bclass be_class_Matter_QRCode;
#include "solidify/solidified_Matter_Module.h"
@@ -80,6 +79,34 @@ const char* matter_get_attribute_name(uint16_t cluster, uint16_t attribute) {
}
BE_FUNC_CTYPE_DECLARE(matter_get_attribute_name, "s", "ii")
+bbool matter_is_attribute_writable(uint16_t cluster, uint16_t attribute) {
+ for (const matter_cluster_t * cl = matterAllClusters; cl->id != 0xFFFF; cl++) {
+ if (cl->id == cluster) {
+ for (const matter_attribute_t * at = cl->attributes; at->id != 0xFFFF; at++) {
+ if (at->id == attribute) {
+ return (at->flags & 0x01) ? btrue : bfalse;
+ }
+ }
+ }
+ }
+ return bfalse;
+}
+BE_FUNC_CTYPE_DECLARE(matter_is_attribute_writable, "b", "ii")
+
+bbool matter_is_attribute_reportable(uint16_t cluster, uint16_t attribute) {
+ for (const matter_cluster_t * cl = matterAllClusters; cl->id != 0xFFFF; cl++) {
+ if (cl->id == cluster) {
+ for (const matter_attribute_t * at = cl->attributes; at->id != 0xFFFF; at++) {
+ if (at->id == attribute) {
+ return (at->flags & 0x02) ? btrue : bfalse;
+ }
+ }
+ }
+ }
+ return bfalse;
+}
+BE_FUNC_CTYPE_DECLARE(matter_is_attribute_reportable, "b", "ii")
+
const char* matter_get_command_name(uint16_t cluster, uint16_t command) {
for (const matter_cluster_t * cl = matterAllClusters; cl->id != 0xFFFF; cl++) {
if (cl->id == cluster) {
@@ -102,15 +129,22 @@ BE_FUNC_CTYPE_DECLARE(matter_get_ip_bytes, "&", "s")
#include "solidify/solidified_Matter_inspect.h"
extern const bclass be_class_Matter_TLV; // need to declare it upfront because of circular reference
+#include "solidify/solidified_Matter_Path.h"
#include "solidify/solidified_Matter_TLV.h"
#include "solidify/solidified_Matter_IM_Data.h"
#include "solidify/solidified_Matter_UDPServer.h"
+#include "solidify/solidified_Matter_Expirable.h"
+#include "solidify/solidified_Matter_Fabric.h"
#include "solidify/solidified_Matter_Session.h"
+#include "solidify/solidified_Matter_Session_Store.h"
#include "solidify/solidified_Matter_Commissioning_Data.h"
#include "solidify/solidified_Matter_Commissioning.h"
#include "solidify/solidified_Matter_Message.h"
#include "solidify/solidified_Matter_MessageHandler.h"
+#include "solidify/solidified_Matter_IM_Message.h"
+#include "solidify/solidified_Matter_IM_Subscription.h"
#include "solidify/solidified_Matter_IM.h"
+#include "solidify/solidified_Matter_Control_Message.h"
#include "solidify/solidified_Matter_Plugin.h"
#include "solidify/solidified_Matter_Base38.h"
#include "solidify/solidified_Matter_UI.h"
@@ -118,8 +152,14 @@ extern const bclass be_class_Matter_TLV; // need to declare it upfront because
#include "../generate/be_matter_certs.h"
-#include "solidify/solidified_Matter_Plugin_core.h"
-#include "solidify/solidified_Matter_Plugin_Relay.h"
+#include "solidify/solidified_Matter_Plugin_Root.h"
+#include "solidify/solidified_Matter_Plugin_Device.h"
+#include "solidify/solidified_Matter_Plugin_OnOff.h"
+#include "solidify/solidified_Matter_Plugin_Light0.h"
+#include "solidify/solidified_Matter_Plugin_Light1.h"
+#include "solidify/solidified_Matter_Plugin_Light2.h"
+#include "solidify/solidified_Matter_Plugin_Light3.h"
+#include "solidify/solidified_Matter_Plugin_Temp_Sensor.h"
/*********************************************************************************************\
* Get a bytes() object of the certificate DAC/PAI_Cert
@@ -145,9 +185,8 @@ static int matter_CD_FFF1_8000(bvm *vm) { return matter_return_static_bytes(vm,
/* @const_object_info_begin
-module matter (scope: global) {
+module matter (scope: global, strings: weak) {
_LOGO, comptr(MATTER_LOGO)
- _QRCODE_MINJS, comptr(QRCODE_MINJS)
MATTER_OPTION, int(151) // SetOption151 enables Matter
Verhoeff, class(be_class_Matter_Verhoeff)
@@ -158,6 +197,8 @@ module matter (scope: global) {
get_cluster_name, ctype_func(matter_get_cluster_name)
get_attribute_name, ctype_func(matter_get_attribute_name)
+ is_attribute_writable, ctype_func(matter_is_attribute_writable)
+ is_attribute_reportable, ctype_func(matter_is_attribute_reportable)
get_command_name, ctype_func(matter_get_command_name)
get_opcode_name, ctype_func(matter_get_opcode_name)
TLV, class(be_class_Matter_TLV)
@@ -238,7 +279,12 @@ module matter (scope: global) {
UDPPacket_sent, class(be_class_Matter_UDPPacket_sent)
UDPServer, class(be_class_Matter_UDPServer)
+ // Expirable
+ Expirable, class(be_class_Matter_Expirable)
+ Expirable_list, class(be_class_Matter_Expirable_list)
+
// Sessions
+ Fabric, class(be_class_Matter_Fabric)
Session, class(be_class_Matter_Session)
Session_Store, class(be_class_Matter_Session_Store)
@@ -247,11 +293,23 @@ module matter (scope: global) {
MessageHandler, class(be_class_Matter_MessageHandler)
// Interation Model
- Response_container, class(be_class_Matter_Response_container)
+ Path, class(be_class_Matter_Path)
+ IM_Status, class(be_class_Matter_IM_Status)
+ IM_InvokeResponse, class(be_class_Matter_IM_InvokeResponse)
+ IM_WriteResponse, class(be_class_Matter_IM_WriteResponse)
+ IM_ReportData, class(be_class_Matter_IM_ReportData)
+ IM_ReportDataSubscribed, class(be_class_Matter_IM_ReportDataSubscribed)
+ IM_SubscribeResponse, class(be_class_Matter_IM_SubscribeResponse)
+ IM_SubscribedHeartbeat, class(be_class_Matter_IM_SubscribedHeartbeat)
+ IM_Subscription, class(be_class_Matter_IM_Subscription)
+ IM_Subscription_Shop, class(be_class_Matter_IM_Subscription_Shop)
IM, class(be_class_Matter_IM)
- Plugin_core, class(be_class_Matter_Plugin_core)
+ Control_Message, class(be_class_Matter_Control_Message)
UI, class(be_class_Matter_UI)
+ // QR Code
+ QRCode, class(be_class_Matter_QRCode)
+
// Base38 for QR Code
Base38, class(be_class_Matter_Base38)
@@ -265,11 +323,17 @@ module matter (scope: global) {
DAC_Cert_FFF1_8000, func(matter_DAC_Cert_FFF1_8000)
DAC_Pub_FFF1_8000, func(matter_DAC_Pub_FFF1_8000)
DAC_Priv_FFF1_8000, func(matter_DAC_Priv_FFF1_8000)
- CD_FFF1_8000, func(matter_CD_FFF1_8000) // Certification Declaration
+ CD_FFF1_8000, func(matter_CD_FFF1_8000) // Certification Declaration
// Plugins
- Plugin_core, class(be_class_Matter_Plugin_core) // Generic behavior common to all devices
- Plugin_Relay, class(be_class_Matter_Plugin_Relay) // Relay behavior (OnOff)
+ Plugin_Root, class(be_class_Matter_Plugin_Root) // Generic behavior common to all devices
+ Plugin_Device, class(be_class_Matter_Plugin_Device) // Generic device (abstract)
+ Plugin_OnOff, class(be_class_Matter_Plugin_OnOff) // Relay/Light behavior (OnOff)
+ Plugin_Light0, class(be_class_Matter_Plugin_Light0) // OnOff Light
+ Plugin_Light1, class(be_class_Matter_Plugin_Light1) // Dimmable Light
+ Plugin_Light2, class(be_class_Matter_Plugin_Light2) // Color Temperature Light
+ Plugin_Light3, class(be_class_Matter_Plugin_Light3) // Extended Color Light
+ Plugin_Temp_Sensor, class(be_class_Matter_Plugin_Temp_Sensor) // Temperature Sensor
}
@const_object_info_end */
diff --git a/lib/libesp32/berry_matter/src/be_matter_qrcode.c b/lib/libesp32/berry_matter/src/be_matter_qrcode.c
new file mode 100644
index 000000000..5bcddef86
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/be_matter_qrcode.c
@@ -0,0 +1,107 @@
+/*
+ be_matter_qrcode.cpp - implements Matter QRCode encoder as UTF8
+
+ Copyright (C) 2023 Stephan Hadinger & Theo Arends
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+#include
+#include "be_constobj.h"
+#include "be_mapping.h"
+#include "be_mem.h"
+#include "be_exec.h"
+#include "qrcodegen.h"
+
+/******************************************************************************************************\
+ *
+ *
+ *
+\******************************************************************************************************/
+
+// `matter.QRCode.encode_str(content:string) -> map`
+//
+int32_t qr_encode_str(bvm *vm) {
+ int32_t argc = be_top(vm);
+ if (argc >= 1 && be_isstring(vm, 1)) {
+ const char * data_str = be_tostring(vm, 1);
+ size_t data_len = strlen(data_str);
+
+ int32_t qr_version = qrcodegen_getMinFitVersion(qrcodegen_Ecc_MEDIUM, data_len);
+ if (qr_version <= 0) { be_return_nil(vm); }
+ int32_t qr_size = qrcodegen_version2size(qr_version);
+ if (qr_size <= 0) { be_return_nil(vm); }
+
+ uint8_t * qr0 = (uint8_t *) be_os_malloc(qrcodegen_BUFFER_LEN_FOR_VERSION(qr_version));
+ if (!qr0) { be_throw(vm, BE_MALLOC_FAIL); }
+ uint8_t * data_tmp = (uint8_t *) be_os_malloc(qrcodegen_BUFFER_LEN_FOR_VERSION(qr_version));
+ if (!qr0) { be_os_free(qr0); be_throw(vm, BE_MALLOC_FAIL); }
+
+ bool ok = qrcodegen_encodeText(data_str, data_tmp, qr0, qrcodegen_Ecc_MEDIUM, qr_version, qr_version, qrcodegen_Mask_AUTO, true);
+
+ if(!ok) {
+ be_os_free(qr0);
+ be_os_free(data_tmp);
+ be_return_nil(vm);
+ }
+
+ qr_size = qrcodegen_getSize(qr0);
+ size_t len = qr_size * qr_size;
+
+ be_newobject(vm, "map");
+ be_map_insert_int(vm, "size", qr_size);
+ be_map_insert_int(vm, "version", qr_version);
+
+ be_pushstring(vm, "bitmap");
+ be_newobject(vm, "list");
+
+ for (uint32_t i = 0; i < qr_size; i++) {
+ char line[qr_size];
+
+ for (uint32_t j = 0; j < qr_size; j++) {
+ line[j] = qrcodegen_getModule(qr0, i, j) ? '*' : ' ';
+ }
+
+ be_pushnstring(vm, line, qr_size);
+ be_data_push(vm, -2);
+ be_pop(vm, 1);
+ }
+
+ be_pop(vm, 1);
+ be_data_insert(vm, -3);
+ be_pop(vm, 2);
+
+ be_pop(vm, 1);
+
+ be_os_free(qr0);
+ be_os_free(data_tmp);
+
+ be_return(vm);
+ }
+ be_raise(vm, "type_error", NULL);
+}
+
+#include "be_fixed_be_class_Matter_QRCode.h"
+
+/* @const_object_info_begin
+class be_class_Matter_QRCode (scope: global, name: Matter_QRCode, strings: weak) {
+ encode_str, static_func(qr_encode_str)
+
+ // UTF8 basic blocs for QR Codes
+ // empty, str(" ")
+ // lowhalf, str("\342\226\204")
+ // uphalf, str("\342\226\200")
+ // full, str("\342\226\210")
+}
+@const_object_info_end */
diff --git a/lib/libesp32/berry_matter/src/be_matter_qrcode_min_js.h b/lib/libesp32/berry_matter/src/be_matter_qrcode_min_js.h
deleted file mode 100644
index ee97215d0..000000000
--- a/lib/libesp32/berry_matter/src/be_matter_qrcode_min_js.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- be_matter_qrcode_min_js.h - solidify in Flash `qrcode.min.js` for browser-side QRCode generation in Javascript
-
- Copyright (C) 2023 Stephan Hadinger & Theo Arends
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-*/
-
-// Lib JS from
-// from https://github.com/davidshimjs/qrcodejs
-// file qrcode.min.js
-
-// Converter: https://tomeko.net/online_tools/cpp_text_escape.php?lang=en
-
-/*
-The MIT License (MIT)
----------------------
-Copyright (c) 2012 davidshimjs
-
-Permission is hereby granted, free of charge,
-to any person obtaining a copy of this software and associated documentation files (the "Software"),
-to deal in the Software without restriction,
-including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
-and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-static const uint8_t QRCODE_MINJS[] =
-"var QRCode;!function(){function a(a){this.mode=c.MODE_8BIT_BYTE,this.data=a,this.parsedData=[];for(var b=[],d=0,e=this.data.length;e>d;d++){var f=this.data.charCodeAt(d);f>65536?(b[0]=240|(1835008&f)>>>18,b[1]=128|(258048&f)>>>12,b[2]=128|(4032&f)>>>6,b[3]=128|63&f):f>2048?(b[0]=224|(61440&f)>>>12,b[1]=128|(4032&f)>>>6,b[2]=128|63&f):f>128?(b[0]=192|(1984&f)>>>6,b[1]=128|63&f):b[0]=f,this.parsedData=this.parsedData.concat(b)}this.parsedData.length!=this.data.length&&(this.parsedData.unshift(191),this.parsedData.unshift(187),this.parsedData.unshift(239))}function b(a,b){this.typeNumber=a,this.errorCorrectLevel=b,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}function i(a,b){if(void 0==a.length)throw new Error(a.length+\"/\"+b);for(var c=0;c=f;f++){var h=0;switch(b){case d.L:h=l[f][0];break;case d.M:h=l[f][1];break;case d.Q:h=l[f][2];break;case d.H:h=l[f][3]}if(h>=e)break;c++}if(c>l.length)throw new Error(\"Too long data\");return c}function s(a){var b=encodeURI(a).toString().replace(/\\%[0-9a-fA-F]{2}/g,\"a\");return b.length+(b.length!=a?3:0)}a.prototype={getLength:function(){return this.parsedData.length},write:function(a){for(var b=0,c=this.parsedData.length;c>b;b++)a.put(this.parsedData[b],8)}},b.prototype={addData:function(b){var c=new a(b);this.dataList.push(c),this.dataCache=null},isDark:function(a,b){if(0>a||this.moduleCount<=a||0>b||this.moduleCount<=b)throw new Error(a+\",\"+b);return this.modules[a][b]},getModuleCount:function(){return this.moduleCount},make:function(){this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17,this.modules=new Array(this.moduleCount);for(var d=0;d=7&&this.setupTypeNumber(a),null==this.dataCache&&(this.dataCache=b.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,b){for(var c=-1;7>=c;c++)if(!(-1>=a+c||this.moduleCount<=a+c))for(var d=-1;7>=d;d++)-1>=b+d||this.moduleCount<=b+d||(this.modules[a+c][b+d]=c>=0&&6>=c&&(0==d||6==d)||d>=0&&6>=d&&(0==c||6==c)||c>=2&&4>=c&&d>=2&&4>=d?!0:!1)},getBestMaskPattern:function(){for(var a=0,b=0,c=0;8>c;c++){this.makeImpl(!0,c);var d=f.getLostPoint(this);(0==c||a>d)&&(a=d,b=c)}return b},createMovieClip:function(a,b,c){var d=a.createEmptyMovieClip(b,c),e=1;this.make();for(var f=0;f=g;g++)for(var h=-2;2>=h;h++)this.modules[d+g][e+h]=-2==g||2==g||-2==h||2==h||0==g&&0==h?!0:!1}},setupTypeNumber:function(a){for(var b=f.getBCHTypeNumber(this.typeNumber),c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[Math.floor(c/3)][c%3+this.moduleCount-8-3]=d}for(var c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[c%3+this.moduleCount-8-3][Math.floor(c/3)]=d}},setupTypeInfo:function(a,b){for(var c=this.errorCorrectLevel<<3|b,d=f.getBCHTypeInfo(c),e=0;15>e;e++){var g=!a&&1==(1&d>>e);6>e?this.modules[e][8]=g:8>e?this.modules[e+1][8]=g:this.modules[this.moduleCount-15+e][8]=g}for(var e=0;15>e;e++){var g=!a&&1==(1&d>>e);8>e?this.modules[8][this.moduleCount-e-1]=g:9>e?this.modules[8][15-e-1+1]=g:this.modules[8][15-e-1]=g}this.modules[this.moduleCount-8][8]=!a},mapData:function(a,b){for(var c=-1,d=this.moduleCount-1,e=7,g=0,h=this.moduleCount-1;h>0;h-=2)for(6==h&&h--;;){for(var i=0;2>i;i++)if(null==this.modules[d][h-i]){var j=!1;g>>e));var k=f.getMask(b,d,h-i);k&&(j=!j),this.modules[d][h-i]=j,e--,-1==e&&(g++,e=7)}if(d+=c,0>d||this.moduleCount<=d){d-=c,c=-c;break}}}},b.PAD0=236,b.PAD1=17,b.createData=function(a,c,d){for(var e=j.getRSBlocks(a,c),g=new k,h=0;h8*l)throw new Error(\"code length overflow. (\"+g.getLengthInBits()+\">\"+8*l+\")\");for(g.getLengthInBits()+4<=8*l&&g.put(0,4);0!=g.getLengthInBits()%8;)g.putBit(!1);for(;;){if(g.getLengthInBits()>=8*l)break;if(g.put(b.PAD0,8),g.getLengthInBits()>=8*l)break;g.put(b.PAD1,8)}return b.createBytes(g,e)},b.createBytes=function(a,b){for(var c=0,d=0,e=0,g=new Array(b.length),h=new Array(b.length),j=0;j=0?p.get(q):0}}for(var r=0,m=0;mm;m++)for(var j=0;jm;m++)for(var j=0;j=0;)b^=f.G15<=0;)b^=f.G18<>>=1;return b},getPatternPosition:function(a){return f.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,b,c){switch(a){case e.PATTERN000:return 0==(b+c)%2;case e.PATTERN001:return 0==b%2;case e.PATTERN010:return 0==c%3;case e.PATTERN011:return 0==(b+c)%3;case e.PATTERN100:return 0==(Math.floor(b/2)+Math.floor(c/3))%2;case e.PATTERN101:return 0==b*c%2+b*c%3;case e.PATTERN110:return 0==(b*c%2+b*c%3)%2;case e.PATTERN111:return 0==(b*c%3+(b+c)%2)%2;default:throw new Error(\"bad maskPattern:\"+a)}},getErrorCorrectPolynomial:function(a){for(var b=new i([1],0),c=0;a>c;c++)b=b.multiply(new i([1,g.gexp(c)],0));return b},getLengthInBits:function(a,b){if(b>=1&&10>b)switch(a){case c.MODE_NUMBER:return 10;case c.MODE_ALPHA_NUM:return 9;case c.MODE_8BIT_BYTE:return 8;case c.MODE_KANJI:return 8;default:throw new Error(\"mode:\"+a)}else if(27>b)switch(a){case c.MODE_NUMBER:return 12;case c.MODE_ALPHA_NUM:return 11;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 10;default:throw new Error(\"mode:\"+a)}else{if(!(41>b))throw new Error(\"type:\"+b);switch(a){case c.MODE_NUMBER:return 14;case c.MODE_ALPHA_NUM:return 13;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 12;default:throw new Error(\"mode:\"+a)}}},getLostPoint:function(a){for(var b=a.getModuleCount(),c=0,d=0;b>d;d++)for(var e=0;b>e;e++){for(var f=0,g=a.isDark(d,e),h=-1;1>=h;h++)if(!(0>d+h||d+h>=b))for(var i=-1;1>=i;i++)0>e+i||e+i>=b||(0!=h||0!=i)&&g==a.isDark(d+h,e+i)&&f++;f>5&&(c+=3+f-5)}for(var d=0;b-1>d;d++)for(var e=0;b-1>e;e++){var j=0;a.isDark(d,e)&&j++,a.isDark(d+1,e)&&j++,a.isDark(d,e+1)&&j++,a.isDark(d+1,e+1)&&j++,(0==j||4==j)&&(c+=3)}for(var d=0;b>d;d++)for(var e=0;b-6>e;e++)a.isDark(d,e)&&!a.isDark(d,e+1)&&a.isDark(d,e+2)&&a.isDark(d,e+3)&&a.isDark(d,e+4)&&!a.isDark(d,e+5)&&a.isDark(d,e+6)&&(c+=40);for(var e=0;b>e;e++)for(var d=0;b-6>d;d++)a.isDark(d,e)&&!a.isDark(d+1,e)&&a.isDark(d+2,e)&&a.isDark(d+3,e)&&a.isDark(d+4,e)&&!a.isDark(d+5,e)&&a.isDark(d+6,e)&&(c+=40);for(var k=0,e=0;b>e;e++)for(var d=0;b>d;d++)a.isDark(d,e)&&k++;var l=Math.abs(100*k/b/b-50)/5;return c+=10*l}},g={glog:function(a){if(1>a)throw new Error(\"glog(\"+a+\")\");return g.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;a>=256;)a-=255;return g.EXP_TABLE[a]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},h=0;8>h;h++)g.EXP_TABLE[h]=1<h;h++)g.EXP_TABLE[h]=g.EXP_TABLE[h-4]^g.EXP_TABLE[h-5]^g.EXP_TABLE[h-6]^g.EXP_TABLE[h-8];for(var h=0;255>h;h++)g.LOG_TABLE[g.EXP_TABLE[h]]=h;i.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var b=new Array(this.getLength()+a.getLength()-1),c=0;cf;f++)for(var g=c[3*f+0],h=c[3*f+1],i=c[3*f+2],k=0;g>k;k++)e.push(new j(h,i));return e},j.getRsBlockTable=function(a,b){switch(b){case d.L:return j.RS_BLOCK_TABLE[4*(a-1)+0];case d.M:return j.RS_BLOCK_TABLE[4*(a-1)+1];case d.Q:return j.RS_BLOCK_TABLE[4*(a-1)+2];case d.H:return j.RS_BLOCK_TABLE[4*(a-1)+3];default:return void 0}},k.prototype={get:function(a){var b=Math.floor(a/8);return 1==(1&this.buffer[b]>>>7-a%8)},put:function(a,b){for(var c=0;b>c;c++)this.putBit(1==(1&a>>>b-c-1))},getLengthInBits:function(){return this.length},putBit:function(a){var b=Math.floor(this.length/8);this.buffer.length<=b&&this.buffer.push(0),a&&(this.buffer[b]|=128>>>this.length%8),this.length++}};var l=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]],o=function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){function g(a,b){var c=document.createElementNS(\"http://www.w3.org/2000/svg\",a);for(var d in b)b.hasOwnProperty(d)&&c.setAttribute(d,b[d]);return c}var b=this._htOption,c=this._el,d=a.getModuleCount();Math.floor(b.width/d),Math.floor(b.height/d),this.clear();var h=g(\"svg\",{viewBox:\"0 0 \"+String(d)+\" \"+String(d),width:\"100%\",height:\"100%\",fill:b.colorLight});h.setAttributeNS(\"http://www.w3.org/2000/xmlns/\",\"xmlns:xlink\",\"http://www.w3.org/1999/xlink\"),c.appendChild(h),h.appendChild(g(\"rect\",{fill:b.colorDark,width:\"1\",height:\"1\",id:\"template\"}));for(var i=0;d>i;i++)for(var j=0;d>j;j++)if(a.isDark(i,j)){var k=g(\"use\",{x:String(i),y:String(j)});k.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"href\",\"#template\"),h.appendChild(k)}},a.prototype.clear=function(){for(;this._el.hasChildNodes();)this._el.removeChild(this._el.lastChild)},a}(),p=\"svg\"===document.documentElement.tagName.toLowerCase(),q=p?o:m()?function(){function a(){this._elImage.src=this._elCanvas.toDataURL(\"image/png\"),this._elImage.style.display=\"block\",this._elCanvas.style.display=\"none\"}function d(a,b){var c=this;if(c._fFail=b,c._fSuccess=a,null===c._bSupportDataURI){var d=document.createElement(\"img\"),e=function(){c._bSupportDataURI=!1,c._fFail&&_fFail.call(c)},f=function(){c._bSupportDataURI=!0,c._fSuccess&&c._fSuccess.call(c)};return d.onabort=e,d.onerror=e,d.onload=f,d.src=\"data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==\",void 0}c._bSupportDataURI===!0&&c._fSuccess?c._fSuccess.call(c):c._bSupportDataURI===!1&&c._fFail&&c._fFail.call(c)}if(this._android&&this._android<=2.1){var b=1/window.devicePixelRatio,c=CanvasRenderingContext2D.prototype.drawImage;CanvasRenderingContext2D.prototype.drawImage=function(a,d,e,f,g,h,i,j){if(\"nodeName\"in a&&/img/i.test(a.nodeName))for(var l=arguments.length-1;l>=1;l--)arguments[l]=arguments[l]*b;else\"undefined\"==typeof j&&(arguments[1]*=b,arguments[2]*=b,arguments[3]*=b,arguments[4]*=b);c.apply(this,arguments)}}var e=function(a,b){this._bIsPainted=!1,this._android=n(),this._htOption=b,this._elCanvas=document.createElement(\"canvas\"),this._elCanvas.width=b.width,this._elCanvas.height=b.height,a.appendChild(this._elCanvas),this._el=a,this._oContext=this._elCanvas.getContext(\"2d\"),this._bIsPainted=!1,this._elImage=document.createElement(\"img\"),this._elImage.style.display=\"none\",this._el.appendChild(this._elImage),this._bSupportDataURI=null};return e.prototype.draw=function(a){var b=this._elImage,c=this._oContext,d=this._htOption,e=a.getModuleCount(),f=d.width/e,g=d.height/e,h=Math.round(f),i=Math.round(g);b.style.display=\"none\",this.clear();for(var j=0;e>j;j++)for(var k=0;e>k;k++){var l=a.isDark(j,k),m=k*f,n=j*g;c.strokeStyle=l?d.colorDark:d.colorLight,c.lineWidth=1,c.fillStyle=l?d.colorDark:d.colorLight,c.fillRect(m,n,f,g),c.strokeRect(Math.floor(m)+.5,Math.floor(n)+.5,h,i),c.strokeRect(Math.ceil(m)-.5,Math.ceil(n)-.5,h,i)}this._bIsPainted=!0},e.prototype.makeImage=function(){this._bIsPainted&&d.call(this,a)},e.prototype.isPainted=function(){return this._bIsPainted},e.prototype.clear=function(){this._oContext.clearRect(0,0,this._elCanvas.width,this._elCanvas.height),this._bIsPainted=!1},e.prototype.round=function(a){return a?Math.floor(1e3*a)/1e3:a},e}():function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){for(var b=this._htOption,c=this._el,d=a.getModuleCount(),e=Math.floor(b.width/d),f=Math.floor(b.height/d),g=[''],h=0;d>h;h++){g.push(\"\");for(var i=0;d>i;i++)g.push(' ');g.push(\" \")}g.push(\"
\"),c.innerHTML=g.join(\"\");var j=c.childNodes[0],k=(b.width-j.offsetWidth)/2,l=(b.height-j.offsetHeight)/2;k>0&&l>0&&(j.style.margin=l+\"px \"+k+\"px\")},a.prototype.clear=function(){this._el.innerHTML=\"\"},a}();QRCode=function(a,b){if(this._htOption={width:256,height:256,typeNumber:4,colorDark:\"#000000\",colorLight:\"#ffffff\",correctLevel:d.H},\"string\"==typeof b&&(b={text:b}),b)for(var c in b)this._htOption[c]=b[c];\"string\"==typeof a&&(a=document.getElementById(a)),this._android=n(),this._el=a,this._oQRCode=null,this._oDrawing=new q(this._el,this._htOption),this._htOption.text&&this.makeCode(this._htOption.text)},QRCode.prototype.makeCode=function(a){this._oQRCode=new b(r(a,this._htOption.correctLevel),this._htOption.correctLevel),this._oQRCode.addData(a),this._oQRCode.make(),this._el.title=a,this._oDrawing.draw(this._oQRCode),this.makeImage()},QRCode.prototype.makeImage=function(){\"function\"==typeof this._oDrawing.makeImage&&(!this._android||this._android>=3)&&this._oDrawing.makeImage()},QRCode.prototype.clear=function(){this._oDrawing.clear()},QRCode.CorrectLevel=d}();"
-;
diff --git a/lib/libesp32/berry_matter/src/be_matter_verhoeff.cpp b/lib/libesp32/berry_matter/src/be_matter_verhoeff.cpp
index 5e8f56511..9e9f1ae4a 100644
--- a/lib/libesp32/berry_matter/src/be_matter_verhoeff.cpp
+++ b/lib/libesp32/berry_matter/src/be_matter_verhoeff.cpp
@@ -85,7 +85,7 @@ BE_FUNC_CTYPE_DECLARE(vh_validate, "b", "s")
#include "be_fixed_be_class_Matter_Verhoeff.h"
/* @const_object_info_begin
-class be_class_Matter_Verhoeff (scope: global, name: Matter_Verhoeff) {
+class be_class_Matter_Verhoeff (scope: global, name: Matter_Verhoeff, strings: weak) {
checksum, static_ctype_func(vh_checksum)
validate, static_ctype_func(vh_validate)
}
diff --git a/lib/libesp32/berry_matter/src/berry_tasmota.h b/lib/libesp32/berry_matter/src/berry_matter.h
similarity index 100%
rename from lib/libesp32/berry_matter/src/berry_tasmota.h
rename to lib/libesp32/berry_matter/src/berry_matter.h
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Commissioning.be b/lib/libesp32/berry_matter/src/embedded/Matter_Commissioning.be
index d2a5a0fa9..c55432916 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Commissioning.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Commissioning.be
@@ -1,5 +1,5 @@
#
-# Matter_Commissioning.be - suppport for Matter Commissioning process
+# Matter_Commissioning.be - suppport for Matter Commissioning process PASE and CASE
#
# Copyright (C) 2023 Stephan Hadinger & Theo Arends
#
@@ -35,43 +35,34 @@ class Matter_Commisioning_Context
var responder # reference to the caller, sending packets
var device # root device object
- var spake
- var future_initiator_session_id
- var future_local_session_id
- # used by TT hash
- var PBKDFParamRequest, PBKDFParamResponse
- # PAKE
- var y # 32 bytes random known only by verifier
- var pA, pB, cA, cB
- var Ke
- # CASE
- var ResponderEph_priv, ResponderEph_pub
- var initiatorEph_pub
- # Session data
- var session_timestamp
- var I2RKey, R2IKey, AttestationChallenge
- # is commissioning window open
- var window_open
-
+
def init(responder)
import crypto
self.responder = responder
self.device = responder.device
- # generate y once
- self.y = crypto.random(32)
+ end
- self.window_open = true # auto-commissioning for now
+ #############################################################
+ def add_session(local_session_id, initiator_session_id, i2r, r2i, ac)
+ import string
+ # create session object
+ tasmota.log(string.format("MTR: add_session local_session_id=%i initiator_session_id=%i", local_session_id, initiator_session_id), 3)
+
+ var session = self.device.sessions.create_session(local_session_id, initiator_session_id)
+ session.set_keys(i2r, r2i, ac)
end
def process_incoming(msg)
#
- if !self.window_open
+ if !self.device.is_commissioning_open() && msg.opcode >= 0x20 && msg.opcode <= 0x24
tasmota.log("MTR: commissioning not open", 2)
return false
end
tasmota.log("MTR: received message " + matter.inspect(msg), 3)
- if msg.opcode == 0x20
+ if msg.opcode == 0x10
+ # don't need to do anything, the message is acked already before this call
+ elif msg.opcode == 0x20
return self.parse_PBKDFParamRequest(msg)
elif msg.opcode == 0x22
return self.parse_Pake1(msg)
@@ -81,28 +72,68 @@ class Matter_Commisioning_Context
return self.parse_Sigma1(msg)
elif msg.opcode == 0x32
return self.parse_Sigma3(msg)
+ elif msg.opcode == 0x40
+ return self.parse_StatusReport(msg)
+ else
+ import string
+ tasmota.log(string.format("MTR: >????????? Unknown OpCode (secure channel) %02X", msg.opcode), 2)
+ return false
end
return false
end
+ #################################################################################
+ # send_status_report
+ #
+ # send a StatusReport message (unencrypted)
+ #
+ # Usage:
+ # # StatusReport(GeneralCode: SUCCESS, ProtocolId: SECURE_CHANNEL, ProtocolCode: SESSION_ESTABLISHMENT_SUCCESS)
+ # var raw = send_status_report(0x00, 0x0000, 0x0000)
+ # self.responder.send_response(raw, msg.remote_ip, msg.remote_port, nil)
+ def send_status_report(msg, general_code, protocol_id, protocol_code, reliable)
+ # now package the response message
+ var resp = msg.build_response(0x40 #-StatusReport-#, reliable)
+
+ var status_raw = bytes()
+ status_raw.add(general_code, 2)
+ status_raw.add(protocol_id, 4)
+ status_raw.add(protocol_code, 4)
+
+ var raw = resp.encode_frame(status_raw)
+
+ self.responder.send_response_frame(resp)
+ end
+
def parse_PBKDFParamRequest(msg)
import crypto
+ import string
+ var session = msg.session
# sanity checks
if msg.opcode != 0x20 || msg.local_session_id != 0 || msg.protocol_id != 0
- raise "protocol_error", "invalid PBKDFParamRequest message"
+ tasmota.log("MTR: invalid PBKDFParamRequest message", 2)
+ tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
+ var raw = self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
+ return false
end
var pbkdfparamreq = matter.PBKDFParamRequest().parse(msg.raw, msg.app_payload_idx)
- msg.session.set_mode(matter.Session.__PASE)
+ msg.session.set_mode_PASE()
- self.PBKDFParamRequest = msg.raw[msg.app_payload_idx..]
+ session.__Msg1 = msg.raw[msg.app_payload_idx..]
# sanity check for PBKDFParamRequest
- if pbkdfparamreq.passcodeId != 0 raise "protocol_error", "non-zero passcode id" end
+ if pbkdfparamreq.passcodeId != 0
+ tasmota.log("MTR: non-zero passcode id", 2)
+ tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
+ var raw = self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
+ return false
+ end
# record the initiator_session_id
- self.future_initiator_session_id = pbkdfparamreq.initiator_session_id
- self.future_local_session_id = self.device.sessions.gen_local_session_id()
+ session.__future_initiator_session_id = pbkdfparamreq.initiator_session_id
+ session.__future_local_session_id = self.device.sessions.gen_local_session_id()
+ tasmota.log(string.format("MTR: +Session (%6i) from '[%s]:%i'", session.__future_local_session_id, msg.remote_ip, msg.remote_port), 2)
# prepare response
var pbkdfparamresp = matter.PBKDFParamResponse()
@@ -110,159 +141,167 @@ class Matter_Commisioning_Context
pbkdfparamresp.initiatorRandom = pbkdfparamreq.initiatorRandom
# generate 32 bytes random
pbkdfparamresp.responderRandom = crypto.random(32)
- pbkdfparamresp.responderSessionId = self.future_local_session_id
- pbkdfparamresp.pbkdf_parameters_salt = self.device.salt
- pbkdfparamresp.pbkdf_parameters_iterations = self.device.iterations
- tasmota.log("MTR: pbkdfparamresp: " + str(matter.inspect(pbkdfparamresp)), 3)
- var pbkdfparamresp_raw = pbkdfparamresp.encode()
- tasmota.log("MTR: pbkdfparamresp_raw: " + pbkdfparamresp_raw.tohex(), 3)
+ pbkdfparamresp.responderSessionId = session.__future_local_session_id
+ pbkdfparamresp.pbkdf_parameters_salt = self.device.commissioning_salt
+ pbkdfparamresp.pbkdf_parameters_iterations = self.device.commissioning_iterations
+ tasmota.log("MTR: pbkdfparamresp: " + str(matter.inspect(pbkdfparamresp)), 4)
+ var pbkdfparamresp_raw = pbkdfparamresp.tlv2raw()
+ tasmota.log("MTR: pbkdfparamresp_raw: " + pbkdfparamresp_raw.tohex(), 4)
- self.PBKDFParamResponse = pbkdfparamresp_raw
+ session.__Msg2 = pbkdfparamresp_raw
var resp = msg.build_response(0x21 #-PBKDR Response-#, true)
- var raw = resp.encode(pbkdfparamresp_raw)
+ var raw = resp.encode_frame(pbkdfparamresp_raw)
- self.responder.send_response(raw, msg.remote_ip, msg.remote_port, resp.message_counter)
+ self.responder.send_response_frame(resp)
+ return true
end
def parse_Pake1(msg)
import crypto
+ var session = msg.session
# sanity checks
if msg.opcode != 0x22 || msg.local_session_id != 0 || msg.protocol_id != 0
- raise "protocol_error", "invalid Pake1 message"
+ tasmota.log("MTR: invalid Pake1 message", 2)
+ tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
+ var raw = self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
+ return false
end
var pake1 = matter.Pake1().parse(msg.raw, msg.app_payload_idx)
- self.pA = pake1.pA
- tasmota.log("MTR: received pA=" + self.pA.tohex(), 3)
-
+ var pA = pake1.pA
+ # tasmota.log("MTR: received pA=" + pA.tohex(), 4)
- tasmota.log("MTR: spake: " + matter.inspect(self.spake), 3)
# instanciate SPAKE
- self.spake = crypto.SPAKE2P_Matter(self.device.w0, self.device.w1, self.device.L)
+ # for testing purpose, we don't send `w1` to make sure
+ var spake = crypto.SPAKE2P_Matter(self.device.commissioning_w0, nil, self.device.commissioning_L)
+
+ # generate `y` nonce (not persisted)
+ var y = crypto.random(32) # 32 bytes random known only by verifier
+
# compute pB
- self.spake.compute_pB(self.y)
- self.pB = self.spake.pB
- tasmota.log("MTR: y=" + self.y.tohex(), 3)
- tasmota.log("MTR: pb=" + self.pB.tohex(), 3)
+ spake.compute_pB(y)
+ # tasmota.log("MTR: y=" + y.tohex(), 4)
+ # tasmota.log("MTR: pb=" + spake.pB.tohex(), 4)
# compute ZV
- self.spake.compute_ZV_verifier(self.pA)
- tasmota.log("MTR: Z=" + self.spake.Z.tohex(), 3)
- tasmota.log("MTR: V=" + self.spake.V.tohex(), 3)
+ spake.compute_ZV_verifier(pA)
+ # tasmota.log("MTR: Z=" + spake.Z.tohex(), 4)
+ # tasmota.log("MTR: V=" + spake.V.tohex(), 4)
var context = crypto.SHA256()
context.update(bytes().fromstring(self.Matter_Context_Prefix))
- context.update(self.PBKDFParamRequest)
- context.update(self.PBKDFParamResponse)
+ context.update(session.__Msg1)
+ context.update(session.__Msg2)
var context_hash = context.out()
- tasmota.log("MTR: Context=" + context_hash.tohex(), 3)
+ # tasmota.log("MTR: Context=" + context_hash.tohex(), 4)
# add pA
- self.spake.pA = self.pA
+ spake.pA = pA
- self.spake.set_context(context_hash)
- self.spake.compute_TT_hash(true) # `true` to indicate it's Matter variant to SPAKE2+
+ spake.set_context(context_hash)
+ spake.compute_TT_hash(true) # `true` to indicate it's Matter variant to SPAKE2+
- tasmota.log("MTR: ------------------------------", 3)
- tasmota.log("MTR: Context = " + self.spake.Context.tohex(), 3)
- tasmota.log("MTR: A = " + self.spake.A.tohex(), 3)
- tasmota.log("MTR: B = " + self.spake.B.tohex(), 3)
- tasmota.log("MTR: M = " + self.spake.M.tohex(), 3)
- tasmota.log("MTR: N = " + self.spake.N.tohex(), 3)
- tasmota.log("MTR: pA = " + self.spake.pA.tohex(), 3)
- tasmota.log("MTR: pB = " + self.spake.pB.tohex(), 3)
- tasmota.log("MTR: Z = " + self.spake.Z.tohex(), 3)
- tasmota.log("MTR: V = " + self.spake.V.tohex(), 3)
- tasmota.log("MTR: w0 = " + self.spake.w0.tohex(), 3)
- tasmota.log("MTR: ------------------------------", 3)
+ # tasmota.log("MTR: ------------------------------", 4)
+ # tasmota.log("MTR: Context = " + spake.Context.tohex(), 4)
+ # tasmota.log("MTR: M = " + spake.M.tohex(), 4)
+ # tasmota.log("MTR: N = " + spake.N.tohex(), 4)
+ # tasmota.log("MTR: pA = " + spake.pA.tohex(), 4)
+ # tasmota.log("MTR: pB = " + spake.pB.tohex(), 4)
+ # tasmota.log("MTR: Z = " + spake.Z.tohex(), 4)
+ # tasmota.log("MTR: V = " + spake.V.tohex(), 4)
+ # tasmota.log("MTR: w0 = " + spake.w0.tohex(), 4)
+ # tasmota.log("MTR: ------------------------------", 4)
- tasmota.log("MTR: Kmain =" + self.spake.Kmain.tohex(), 3)
+ # tasmota.log("MTR: Kmain =" + spake.Kmain.tohex(), 4)
- tasmota.log("MTR: KcA =" + self.spake.KcA.tohex(), 3)
- tasmota.log("MTR: KcB =" + self.spake.KcB.tohex(), 3)
- tasmota.log("MTR: K_shared=" + self.spake.K_shared.tohex(), 3)
- tasmota.log("MTR: Ke =" + self.spake.Ke.tohex(), 3)
- self.cB = self.spake.cB
- self.Ke = self.spake.Ke
- tasmota.log("MTR: cB=" + self.cB.tohex(), 3)
+ # tasmota.log("MTR: KcA =" + spake.KcA.tohex(), 4)
+ # tasmota.log("MTR: KcB =" + spake.KcB.tohex(), 4)
+ # tasmota.log("MTR: K_shared=" + spake.K_shared.tohex(), 4)
+ # tasmota.log("MTR: Ke =" + spake.Ke.tohex(), 4)
+ # tasmota.log("MTR: cB=" + spake.cB.tohex(), 4)
var pake2 = matter.Pake2()
- pake2.pB = self.pB
- pake2.cB = self.cB
- tasmota.log("MTR: pake2: " + matter.inspect(pake2), 3)
- var pake2_raw = pake2.encode()
- tasmota.log("MTR: pake2_raw: " + pake2_raw.tohex(), 3)
+ pake2.pB = spake.pB
+ pake2.cB = spake.cB
+ # tasmota.log("MTR: pake2: " + matter.inspect(pake2), 4)
+ var pake2_raw = pake2.tlv2raw()
+ # tasmota.log("MTR: pake2_raw: " + pake2_raw.tohex(), 4)
+ session.__spake_cA = spake.cA
+ session.__spake_Ke = spake.Ke
# now package the response message
var resp = msg.build_response(0x23 #-pake-2-#, true) # no reliable flag
- var raw = resp.encode(pake2_raw)
+ var raw = resp.encode_frame(pake2_raw)
- self.responder.send_response(raw, msg.remote_ip, msg.remote_port, resp.message_counter)
+ self.responder.send_response_frame(resp)
+ return true
end
def parse_Pake3(msg)
import crypto
+ var session = msg.session
# sanity checks
if msg.opcode != 0x24 || msg.local_session_id != 0 || msg.protocol_id != 0
- raise "protocol_error", "invalid Pake3 message"
+ tasmota.log("MTR: invalid Pake3 message", 2)
+ tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
+ var raw = self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
+ return false
end
var pake3 = matter.Pake3().parse(msg.raw, msg.app_payload_idx)
- self.cA = pake3.cA
- tasmota.log("MTR: received cA=" + self.cA.tohex(), 3)
+ var cA = pake3.cA
+ # tasmota.log("MTR: received cA=" + cA.tohex(), 4)
# check the value against computed
- if self.cA != self.spake.cA raise "protocol_error", "invalid cA received" end
+ if cA != session.__spake_cA
+ tasmota.log("MTR: invalid cA received", 2)
+ tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
+ var raw = self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
+ return false
+ end
# send PakeFinished and compute session key
- self.session_timestamp = tasmota.rtc()['utc']
- var session_keys = crypto.HKDF_SHA256().derive(self.Ke, bytes(), bytes().fromstring(self.SEKeys_Info), 48)
- self.I2RKey = session_keys[0..15]
- self.R2IKey = session_keys[16..31]
- self.AttestationChallenge = session_keys[32..47]
+ var created = tasmota.rtc()['utc']
+ var session_keys = crypto.HKDF_SHA256().derive(session.__spake_Ke, bytes(), bytes().fromstring(self.SEKeys_Info), 48)
+ var I2RKey = session_keys[0..15]
+ var R2IKey = session_keys[16..31]
+ var AttestationChallenge = session_keys[32..47]
- tasmota.log("MTR: ******************************", 3)
- tasmota.log("MTR: session_keys=" + session_keys.tohex(), 3)
- tasmota.log("MTR: I2RKey =" + self.I2RKey.tohex(), 3)
- tasmota.log("MTR: R2IKey =" + self.R2IKey.tohex(), 3)
- tasmota.log("MTR: AC =" + self.AttestationChallenge.tohex(), 3)
- tasmota.log("MTR: ******************************", 3)
+ # tasmota.log("MTR: ******************************", 4)
+ # tasmota.log("MTR: session_keys=" + session_keys.tohex(), 4)
+ # tasmota.log("MTR: I2RKey =" + I2RKey.tohex(), 4)
+ # tasmota.log("MTR: R2IKey =" + R2IKey.tohex(), 4)
+ # tasmota.log("MTR: AC =" + AttestationChallenge.tohex(), 4)
+ # tasmota.log("MTR: ******************************", 4)
- # now package the response message
- var resp = msg.build_response(0x40 #-StatusReport-#, false) # no reliable flag
+ # StatusReport(GeneralCode: SUCCESS, ProtocolId: SECURE_CHANNEL, ProtocolCode: SESSION_ESTABLISHMENT_SUCCESS)
+ var raw = self.send_status_report(msg, 0x00, 0x0000, 0x0000, false)
- var status_raw = bytes()
- status_raw.add(0x00, 2) # GeneralCode = SUCCESS
- status_raw.add(0x0000, 4) # ProtocolID = 0 (PROTOCOL_ID_SECURE_CHANNEL)
- status_raw.add(0x0000, 4) # ProtocolCode = 0 (SESSION_ESTABLISHMENT_SUCCESS)
-
- var raw = resp.encode(status_raw)
-
- self.responder.send_response(raw, msg.remote_ip, msg.remote_port, nil)
- self.responder.add_session(self.future_local_session_id, self.future_initiator_session_id, self.I2RKey, self.R2IKey, self.AttestationChallenge, self.session_timestamp)
+ self.add_session(session.__future_local_session_id, session.__future_initiator_session_id, I2RKey, R2IKey, AttestationChallenge, created)
+ return true
end
- def find_session_by_destination_id(destinationId, initiatorRandom)
+ def find_fabric_by_destination_id(destinationId, initiatorRandom)
import crypto
# Validate Sigma1 Destination ID, p.162
- # traverse all existing sessions
+ # traverse all existing fabrics
tasmota.log("MTR: SEARCHING: destinationId=" + destinationId.tohex(), 3)
- for session:self.device.sessions.sessions
- if session.noc == nil || session.fabric == nil || session.deviceid == nil continue end
+ for fabric : self.device.sessions.fabrics
+ if fabric.noc == nil || fabric.fabric_id == nil || fabric.device_id == nil continue end
# compute candidateDestinationId, Section 4.13.2.4.1, “Destination Identifier”
- var destinationMessage = initiatorRandom + session.get_ca_pub() + session.get_fabric() + session.get_deviceid()
- var key = session.get_ipk_group_key()
+ var destinationMessage = initiatorRandom + fabric.get_ca_pub() + fabric.fabric_id + fabric.device_id
+ var key = fabric.get_ipk_group_key()
tasmota.log("MTR: SIGMA1: destinationMessage=" + destinationMessage.tohex(), 3)
- tasmota.log("MTR: SIGMA1: key_ipk=" + key.tohex(), 3)
+ tasmota.log("MTR: SIGMA1: key_ipk=" + key.tohex(), 4)
var h = crypto.HMAC_SHA256(key)
h.update(destinationMessage)
var candidateDestinationId = h.out()
tasmota.log("MTR: SIGMA1: candidateDestinationId=" + candidateDestinationId.tohex(), 3)
if candidateDestinationId == destinationId
- return session
+ return fabric
end
end
return nil
@@ -270,130 +309,177 @@ class Matter_Commisioning_Context
def parse_Sigma1(msg)
import crypto
+ import string
+ var session = msg.session
# sanity checks
if msg.opcode != 0x30 || msg.local_session_id != 0 || msg.protocol_id != 0
- raise "protocol_error", "invalid Pake1 message"
+ # tasmota.log("MTR: invalid Sigma1 message", 2)
+ tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
+ var raw = self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
+ return false
end
var sigma1 = matter.Sigma1().parse(msg.raw, msg.app_payload_idx)
+ tasmota.log(string.format("MTR: sigma1=%s", matter.inspect(sigma1)), 4)
- self.initiatorEph_pub = sigma1.initiatorEphPubKey
+ session.__initiator_pub = sigma1.initiatorEphPubKey
# find session
var is_resumption = (sigma1.resumptionID != nil && sigma1.initiatorResumeMIC != nil)
+ tasmota.log(string.format("MTR: is_resumption=%i", is_resumption ? 1 : 0), 4)
+ # TODO disable resumption until fixed
+ is_resumption = false
# Check that it's a resumption
- var session
+ var session_resumption
if is_resumption
- session = self.device.sessions.find_session_by_resumption_id(sigma1.resumptionID)
- else
- session = self.find_session_by_destination_id(sigma1.destinationId, sigma1.initiatorRandom)
+ session_resumption = self.device.sessions.find_session_by_resumption_id(sigma1.resumptionID)
+ tasmota.log(string.format("MTR: session_resumption found session=%s session_resumption=%s", matter.inspect(session), matter.inspect(session_resumption)), 4)
+ if session_resumption == nil || session_resumption._fabric == nil
+ is_resumption = false
+ end
end
- if session == nil raise "valuer_error", "StatusReport(GeneralCode: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: NO_SHARED_TRUST_ROOTS)" end
- session.source_node_id = msg.source_node_id
- session.set_mode(matter.Session.__CASE)
-
- if msg.session
- self.device.sessions.remove_session(msg.session) # drop the temporary session that was created
- end
- msg.session = session
- session._future_initiator_session_id = sigma1.initiator_session_id # update initiator_session_id
- session._future_local_session_id = self.device.sessions.gen_local_session_id()
- self.future_local_session_id = session._future_local_session_id
-
-
+
# Check that it's a resumption
- if is_resumption && session.shared_secret != nil
+ if is_resumption
# Resumption p.169
var s1rk_salt = sigma1.initiatorRandom + sigma1.resumptionID
var s1rk_info = bytes().fromstring("Sigma1_Resume")
- var s1rk = crypto.HKDF_SHA256().derive(session.shared_secret, s1rk_salt, s1rk_info, 16)
+ var s1rk = crypto.HKDF_SHA256().derive(session_resumption.shared_secret, s1rk_salt, s1rk_info, 16)
- var Resume1MIC_Nonce = bytes().fromstring("NCASE_SigmaR1")
+ var Resume1MIC_Nonce = bytes().fromstring("NCASE_SigmaS1")
var encrypted = sigma1.initiatorResumeMIC[0..-17]
var tag = sigma1.initiatorResumeMIC[-16..]
var ec = crypto.AES_CCM(s1rk, Resume1MIC_Nonce, bytes(), size(encrypted), 16)
var Resume1MICPayload = ec.decrypt(encrypted)
var decrypted_tag = ec.tag()
- tasmota.log("****************************************", 3)
- tasmota.log("MTR: * s1rk = " + s1rk.tohex(), 3)
- tasmota.log("MTR: * tag = " + tag.tohex(), 3)
- tasmota.log("MTR: * Resume1MICPayload = " + Resume1MICPayload.tohex(), 3)
- tasmota.log("MTR: * decrypted_tag = " + decrypted_tag.tohex(), 3)
- tasmota.log("****************************************", 3)
+ tasmota.log("****************************************", 4)
+ tasmota.log("MTR: * s1rk = " + s1rk.tohex(), 4)
+ tasmota.log("MTR: * tag = " + tag.tohex(), 4)
+ tasmota.log("MTR: * Resume1MICPayload = " + Resume1MICPayload.tohex(), 4)
+ tasmota.log("MTR: * decrypted_tag = " + decrypted_tag.tohex(), 4)
+ tasmota.log("****************************************", 4)
if tag == decrypted_tag
+ session._fabric = session_resumption._fabric
+ session._source_node_id = msg.source_node_id
+ session.set_mode_CASE()
+ session.__future_initiator_session_id = sigma1.initiator_session_id # update initiator_session_id
+ session.__future_local_session_id = self.device.sessions.gen_local_session_id()
+ tasmota.log(string.format("MTR: +Session (%6i) from '[%s]:%i'", session.__future_local_session_id, msg.remote_ip, msg.remote_port), 2)
+
# Generate and Send Sigma2_Resume
+ session.shared_secret = session_resumption.shared_secret
session.resumption_id = crypto.random(16) # generate a new resumption id
# compute S2RK
- var s2rk_info = bytes().fromstring("Sigma2_Resume") + session.resumption_id
- var s2rk_salt = sigma1.initiatorRandom + sigma1.resumptionID
+ var s2rk_info = bytes().fromstring("Sigma2_Resume")
+ var s2rk_salt = sigma1.initiatorRandom + session.resumption_id
var s2rk = crypto.HKDF_SHA256().derive(session.shared_secret, s2rk_salt, s2rk_info, 16)
+
# compute Resume2MIC
- var aes = crypto.AES_CCM(s2rk, bytes().fromstring("NCASE_SigmaR2"), bytes(), 0, 16)
+ var aes = crypto.AES_CCM(s2rk, bytes().fromstring("NCASE_SigmaS2"), bytes(), 0, 16)
var Resume2MIC = aes.tag()
var sigma2resume = matter.Sigma2Resume()
sigma2resume.resumptionID = session.resumption_id
- sigma2resume.responderSessionID = session._future_local_session_id
+ sigma2resume.responderSessionID = session.__future_local_session_id
sigma2resume.sigma2ResumeMIC = Resume2MIC
+ tasmota.log("****************************************", 4)
+ tasmota.log("MTR: * s2rk = " + s2rk.tohex(), 4)
+ tasmota.log("MTR: * s2rk_salt = " + s2rk_salt.tohex(), 4)
+ tasmota.log("MTR: * new_resumption_id = " + session.resumption_id.tohex(), 4)
+ tasmota.log("MTR: * responderSessionID= " + str(session.__future_local_session_id), 4)
+ tasmota.log("MTR: * sigma2ResumeMIC = " + Resume2MIC.tohex(), 4)
+ tasmota.log("****************************************", 4)
# # compute session key, p.178
var session_keys = crypto.HKDF_SHA256().derive(session.shared_secret #- input key -#,
- sigma1.initiatorRandom + sigma1.resumptionID #- salt -#,
+ sigma1.initiatorRandom + session.resumption_id #- salt -#,
bytes().fromstring("SessionResumptionKeys") #- info -#,
48)
var i2r = session_keys[0..15]
var r2i = session_keys[16..31]
var ac = session_keys[32..47]
- var session_timestamp = tasmota.rtc()['utc']
+ var created = tasmota.rtc()['utc']
- tasmota.log("MTR: ******************************", 3)
- tasmota.log("MTR: I2RKey =" + i2r.tohex(), 3)
- tasmota.log("MTR: R2IKey =" + r2i.tohex(), 3)
- tasmota.log("MTR: AC =" + ac.tohex(), 3)
- tasmota.log("MTR: ******************************", 3)
+ tasmota.log("MTR: ******************************", 4)
+ tasmota.log("MTR: I2RKey =" + i2r.tohex(), 4)
+ tasmota.log("MTR: R2IKey =" + r2i.tohex(), 4)
+ tasmota.log("MTR: AC =" + ac.tohex(), 4)
+ tasmota.log("MTR: ******************************", 4)
- var sigma2resume_raw = sigma2resume.encode()
- session._Msg1 = nil
- tasmota.log("MTR: sigma2resume_raw: " + sigma2resume_raw.tohex(), 3)
+ var sigma2resume_raw = sigma2resume.tlv2raw()
+ session.__Msg1 = nil
+ tasmota.log("MTR: sigma2resume: " + matter.inspect(sigma2resume), 4)
+ tasmota.log("MTR: sigma2resume_raw: " + sigma2resume_raw.tohex(), 4)
# now package the response message
var resp = msg.build_response(0x33 #-sigma-2-resume-#, true)
- var raw = resp.encode(sigma2resume_raw)
+ var raw = resp.encode_frame(sigma2resume_raw)
- self.responder.send_response(raw, msg.remote_ip, msg.remote_port, resp.message_counter)
+ self.responder.send_response_frame(resp)
session.close()
- session.set_keys(i2r, r2i, ac, session_timestamp)
+ session.set_keys(i2r, r2i, ac, created)
+
+ # CASE Session completed, persist it
+ session._breadcrumb = 0 # clear breadcrumb
+ session.counter_snd_next() # force a first counter. It's important it's used before set_persist(true) to not have a double save
session.set_persist(true) # keep session on flash
session.set_no_expiration() # never expire
+ session.persist_to_fabric()
session.save()
return true
else
- sigma1.resumptionID = nil
+ is_resumption = false
# fall through normal sigma1 (non-resumption)
end
end
- if sigma1.resumptionID == nil || sigma1.initiatorResumeMIC == nil
+ if !is_resumption
+ # new CASE session, assign to existing fabric
+ var fabric = self.find_fabric_by_destination_id(sigma1.destinationId, sigma1.initiatorRandom)
+ session._fabric = fabric
+
+ if session == nil || session._fabric == nil
+ tasmota.log("MTR: StatusReport(GeneralCode: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: NO_SHARED_TRUST_ROOTS)", 2)
+ var raw = self.send_status_report(msg, 0x01, 0x0000, 0x0001, false)
+ return false
+ end
+ session._source_node_id = msg.source_node_id
+ session.set_mode_CASE()
+
+ session.__future_initiator_session_id = sigma1.initiator_session_id # update initiator_session_id
+ session.__future_local_session_id = self.device.sessions.gen_local_session_id()
+ tasmota.log(string.format("MTR: +Session (%6i) from '[%s]:%i'", session.__future_local_session_id, msg.remote_ip, msg.remote_port), 2)
+
+ tasmota.log("MTR: fabric="+matter.inspect(session._fabric), 4)
+ tasmota.log("MTR: no_private_key="+session._fabric.no_private_key.tohex(), 4)
+ tasmota.log("MTR: noc ="+session._fabric.noc.tohex(), 4)
+ if session._fabric.get_icac()
+ tasmota.log("MTR: icac ="+session._fabric.get_icac().tohex(), 4)
+ end
+ tasmota.log("MTR: root_ca_cert ="+session._fabric.root_ca_certificate.tohex(), 4)
+
# Compute Sigma2, p.162
session.resumption_id = crypto.random(16)
- self.ResponderEph_priv = crypto.random(32)
- self.ResponderEph_pub = crypto.EC_P256().public_key(self.ResponderEph_priv)
+ session.__responder_priv = crypto.random(32)
+ session.__responder_pub = crypto.EC_P256().public_key(session.__responder_priv)
+ tasmota.log("MTR: ResponderEph_priv ="+session.__responder_priv.tohex(), 4)
+ tasmota.log("MTR: ResponderEph_pub ="+session.__responder_pub.tohex(), 4)
var responderRandom = crypto.random(32)
- session.shared_secret = crypto.EC_P256().shared_key(self.ResponderEph_priv, sigma1.initiatorEphPubKey)
+ session.shared_secret = crypto.EC_P256().shared_key(session.__responder_priv, sigma1.initiatorEphPubKey)
var sigma2_tbsdata = matter.TLV.Matter_TLV_struct()
sigma2_tbsdata.add_TLV(1, matter.TLV.B2, session.get_noc())
sigma2_tbsdata.add_TLV(2, matter.TLV.B2, session.get_icac())
- sigma2_tbsdata.add_TLV(3, matter.TLV.B2, self.ResponderEph_pub)
+ sigma2_tbsdata.add_TLV(3, matter.TLV.B2, session.__responder_pub)
sigma2_tbsdata.add_TLV(4, matter.TLV.B2, sigma1.initiatorEphPubKey)
- var TBSData2Signature = crypto.EC_P256().ecdsa_sign_sha256(session.get_pk(), sigma2_tbsdata.encode())
+ var TBSData2Signature = crypto.EC_P256().ecdsa_sign_sha256(session.get_pk(), sigma2_tbsdata.tlv2raw())
var sigma2_tbedata = matter.TLV.Matter_TLV_struct()
sigma2_tbedata.add_TLV(1, matter.TLV.B2, session.get_noc())
@@ -402,43 +488,46 @@ class Matter_Commisioning_Context
sigma2_tbedata.add_TLV(4, matter.TLV.B2, session.resumption_id)
# compute TranscriptHash = Crypto_Hash(message = Msg1)
- tasmota.log("****************************************", 3)
- session._Msg1 = sigma1.Msg1
- tasmota.log("MTR: * MSG1 = " + session._Msg1.tohex(), 3)
- var TranscriptHash = crypto.SHA256().update(session._Msg1).out()
+ tasmota.log("****************************************", 4)
+ session.__Msg1 = sigma1.Msg1
+ tasmota.log("MTR: * resumptionid = " + session.resumption_id.tohex(), 4)
+ tasmota.log("MTR: * MSG1 = " + session.__Msg1.tohex(), 4)
+ var TranscriptHash = crypto.SHA256().update(session.__Msg1).out()
+ tasmota.log("MTR: TranscriptHash =" + TranscriptHash.tohex(), 4)
# Compute S2K, p.175
var s2k_info = bytes().fromstring(self.S2K_Info)
- var s2k_salt = session.get_ipk_group_key() + responderRandom + self.ResponderEph_pub + TranscriptHash
+ var s2k_salt = session.get_ipk_group_key() + responderRandom + session.__responder_pub + TranscriptHash
var s2k = crypto.HKDF_SHA256().derive(session.shared_secret, s2k_salt, s2k_info, 16)
- tasmota.log("MTR: * SharedSecret = " + session.shared_secret.tohex(), 3)
- tasmota.log("MTR: * s2k_salt = " + s2k_salt.tohex(), 3)
- tasmota.log("MTR: * s2k = " + s2k.tohex(), 3)
+ tasmota.log("MTR: * SharedSecret = " + session.shared_secret.tohex(), 4)
+ tasmota.log("MTR: * s2k_salt = " + s2k_salt.tohex(), 4)
+ tasmota.log("MTR: * s2k = " + s2k.tohex(), 4)
- var sigma2_tbedata_raw = sigma2_tbedata.encode()
+ var sigma2_tbedata_raw = sigma2_tbedata.tlv2raw()
+ tasmota.log("MTR: * TBEData2Raw = " + sigma2_tbedata_raw.tohex(), 4)
# // `AES_CCM.init(secret_key:bytes(16 or 32), iv:bytes(7..13), aad:bytes(), data_len:int, tag_len:int) -> instance`
var aes = crypto.AES_CCM(s2k, bytes().fromstring(self.TBEData2_Nonce), bytes(), size(sigma2_tbedata_raw), 16)
var TBEData2Encrypted = aes.encrypt(sigma2_tbedata_raw) + aes.tag()
- tasmota.log("MTR: * TBEData2Enc = " + TBEData2Encrypted.tohex(), 3)
- tasmota.log("****************************************", 3)
+ tasmota.log("MTR: * TBEData2Enc = " + TBEData2Encrypted.tohex(), 4)
+ tasmota.log("****************************************", 4)
var sigma2 = matter.Sigma2()
sigma2.responderRandom = responderRandom
- sigma2.responderSessionId = self.future_local_session_id
- sigma2.responderEphPubKey = self.ResponderEph_pub
+ sigma2.responderSessionId = session.__future_local_session_id
+ sigma2.responderEphPubKey = session.__responder_pub
sigma2.encrypted2 = TBEData2Encrypted
- tasmota.log("MTR: sigma2: " + matter.inspect(sigma2), 3)
- var sigma2_raw = sigma2.encode()
- session._Msg2 = sigma2_raw
- tasmota.log("MTR: sigma2_raw: " + sigma2_raw.tohex(), 3)
+ tasmota.log("MTR: sigma2: " + matter.inspect(sigma2), 4)
+ var sigma2_raw = sigma2.tlv2raw()
+ session.__Msg2 = sigma2_raw
+ tasmota.log("MTR: sigma2_raw: " + sigma2_raw.tohex(), 4)
# now package the response message
var resp = msg.build_response(0x31 #-sigma-2-#, true) # no reliable flag
- var raw = resp.encode(sigma2_raw)
+ var raw = resp.encode_frame(sigma2_raw)
- self.responder.send_response(raw, msg.remote_ip, msg.remote_port, resp.message_counter)
+ self.responder.send_response_frame(resp)
return true
end
@@ -449,28 +538,29 @@ class Matter_Commisioning_Context
import crypto
# sanity checks
if msg.opcode != 0x32 || msg.local_session_id != 0 || msg.protocol_id != 0
- raise "protocol_error", "invalid Pake1 message"
+ tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
+ var raw = self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
+ return false
end
var session = msg.session
var sigma3 = matter.Sigma3().parse(msg.raw, msg.app_payload_idx)
- tasmota.log("****************************************", 3)
+ tasmota.log("****************************************", 4)
# compute TranscriptHash = Crypto_Hash(message = Msg1 || Msg2)
- var TranscriptHash = crypto.SHA256().update(session._Msg1).update(session._Msg2).out()
- tasmota.log("MTR: * session = " + str(session), 3)
- tasmota.log("MTR: session.ipk_epoch_key " + str(session.ipk_epoch_key), 3)
- tasmota.log("MTR: session.fabric_compressed " + str(session.fabric_compressed), 3)
- tasmota.log("MTR: * ipk_group_key = " + session.get_ipk_group_key().tohex(), 3)
- tasmota.log("MTR: * TranscriptHash= " + TranscriptHash.tohex(), 3)
+ var TranscriptHash = crypto.SHA256().update(session.__Msg1).update(session.__Msg2).out()
+ tasmota.log("MTR: * session = " + str(session), 4)
+ tasmota.log("MTR: .ipk_epoch_key=" + str(session.get_ipk_epoch_key()), 4)
+ tasmota.log("MTR: .fabric_compr = " + str(session.get_fabric_compressed()), 4)
+ tasmota.log("MTR: * ipk_group_key = " + session.get_ipk_group_key().tohex(), 4)
+ tasmota.log("MTR: * TranscriptHash= " + TranscriptHash.tohex(), 4)
var s3k_info = bytes().fromstring(self.S3K_Info)
var s3k = crypto.HKDF_SHA256().derive(session.shared_secret, session.get_ipk_group_key() + TranscriptHash, s3k_info, 16)
- tasmota.log("****************************************", 3)
- # self.ipk_epoch_key == nil || self.fabric_compressed")
- tasmota.log("MTR: * s3k_salt = " + (session.get_ipk_group_key() + TranscriptHash).tohex(), 3)
- tasmota.log("MTR: * s3k = " + s3k.tohex(), 3)
- tasmota.log("****************************************", 3)
+ tasmota.log("****************************************", 4)
+ tasmota.log("MTR: * s3k_salt = " + (session.get_ipk_group_key() + TranscriptHash).tohex(), 4)
+ tasmota.log("MTR: * s3k = " + s3k.tohex(), 4)
+ tasmota.log("****************************************", 4)
# decrypt
var encrypted = sigma3.TBEData3Encrypted[0..-17]
@@ -478,17 +568,26 @@ class Matter_Commisioning_Context
var ec = crypto.AES_CCM(s3k, bytes().fromstring(self.TBEData3_Nonce), bytes(), size(encrypted), 16)
var TBEData3 = ec.decrypt(encrypted)
var TBETag3 = ec.tag()
- tasmota.log("MTR: * TBEData3 = " + TBEData3.tohex(), 3)
- tasmota.log("MTR: * TBETag3 = " + TBETag3.tohex(), 3)
- tasmota.log("MTR: * tag_sent = " + tag.tohex(), 3)
- tasmota.log("****************************************", 3)
+ tasmota.log("MTR: * TBEData3 = " + TBEData3.tohex(), 4)
+ tasmota.log("MTR: * TBETag3 = " + TBETag3.tohex(), 4)
+ tasmota.log("MTR: * tag_sent = " + tag.tohex(), 4)
+ tasmota.log("****************************************", 4)
- if TBETag3 != tag raise "value_error", "tag do not match" end
+ if TBETag3 != tag
+ tasmota.log("MTR: Tag don't match", 2)
+ tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
+ var raw = self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
+ return false
+ end
var TBEData3TLV = matter.TLV.parse(TBEData3)
+ tasmota.log("MTR: * TBEData3TLV = " + str(TBEData3TLV), 4)
var initiatorNOC = TBEData3TLV.findsubval(1)
var initiatorICAC = TBEData3TLV.findsubval(2)
var ec_signature = TBEData3TLV.findsubval(3)
+ tasmota.log("MTR: * initiatorNOC = " + str(initiatorNOC), 4)
+ tasmota.log("MTR: * initiatorICAC = " + str(initiatorICAC), 4)
+ tasmota.log("MTR: * ec_signature = " + str(ec_signature), 4)
# Success = Crypto_VerifyChain(certificates = [TBEData3.initiatorNOC, TBEData3.initiatorICAC, TrustedRCAC]), when TBEData3.initiatorICAC is present
# TODO
var initiatorNOCTLV = matter.TLV.parse(initiatorNOC)
@@ -503,30 +602,41 @@ class Matter_Commisioning_Context
var sigma3_tbs = matter.TLV.Matter_TLV_struct()
sigma3_tbs.add_TLV(1, matter.TLV.B1, initiatorNOC)
sigma3_tbs.add_TLV(2, matter.TLV.B1, initiatorICAC)
- sigma3_tbs.add_TLV(3, matter.TLV.B1, self.initiatorEph_pub)
- sigma3_tbs.add_TLV(4, matter.TLV.B1, self.ResponderEph_pub)
- var sigma3_tbs_raw = sigma3_tbs.encode()
+ sigma3_tbs.add_TLV(3, matter.TLV.B1, session.__initiator_pub)
+ sigma3_tbs.add_TLV(4, matter.TLV.B1, session.__responder_pub)
+ tasmota.log("MTR: * sigma3_tbs = " + str(sigma3_tbs), 4)
+ var sigma3_tbs_raw = sigma3_tbs.tlv2raw()
+ tasmota.log("MTR: * sigma3_tbs_raw= " + sigma3_tbs_raw.tohex(), 4)
- tasmota.log("MTR: * initiatorNOCPubKey = " + initiatorNOCPubKey.tohex(), 3)
- tasmota.log("MTR: * ec_signature = " + ec_signature.tohex(), 3)
- tasmota.log("****************************************", 3)
+ tasmota.log("MTR: * initiatorNOCPubKey= " + initiatorNOCPubKey.tohex(), 4)
+ tasmota.log("MTR: * ec_signature = " + ec_signature.tohex(), 4)
+ tasmota.log("****************************************", 4)
# `crypto.EC_P256().ecdsa_verify_sha256(public_key:bytes(65), message:bytes(), hash:bytes()) -> bool`
var sigma3_tbs_valid = crypto.EC_P256().ecdsa_verify_sha256(initiatorNOCPubKey, sigma3_tbs_raw, ec_signature)
- if !sigma3_tbs_valid raise "value_error", "sigma3_tbs does not have a valid signature" end
+ if !sigma3_tbs_valid
+ tasmota.log("MTR: sigma3_tbs does not have a valid signature", 2)
+ tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
+ var raw = self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
+ return false
+ end
# All good, compute new keys
tasmota.log("MTR: Sigma3 verified, computing new keys", 3)
- TranscriptHash = crypto.SHA256().update(session._Msg1).update(session._Msg2).update(sigma3.Msg3).out()
- # we can now free _Msg1 and _Msg2
- session._Msg1 = nil
- session._Msg2 = nil
+ TranscriptHash = crypto.SHA256().update(session.__Msg1).update(session.__Msg2).update(sigma3.Msg3).out()
+ tasmota.log("MTR: * __Msg1 = " + session.__Msg1.tohex(), 4)
+ tasmota.log("MTR: * __Msg2 = " + session.__Msg2.tohex(), 4)
+ tasmota.log("MTR: * __Msg3 = " + sigma3.Msg3.tohex(), 4)
+ tasmota.log("MTR: * TranscriptHash = " + TranscriptHash.tohex(), 4)
+ # we can now free __Msg1 and __Msg2
+ session.__Msg1 = nil
+ session.__Msg2 = nil
- tasmota.log("MTR: ******************************", 3)
- tasmota.log("MTR: shared_secret =" + session.shared_secret.tohex(), 3)
- tasmota.log("MTR: ipk + hash =" + (session.get_ipk_group_key() + TranscriptHash).tohex(), 3)
+ tasmota.log("MTR: ******************************", 4)
+ tasmota.log("MTR: shared_secret =" + session.shared_secret.tohex(), 4)
+ tasmota.log("MTR: ipk + hash =" + (session.get_ipk_group_key() + TranscriptHash).tohex(), 4)
# compute session key
var session_keys = crypto.HKDF_SHA256().derive(session.shared_secret #- input key -#,
session.get_ipk_group_key() + TranscriptHash #- salt -#,
@@ -535,35 +645,39 @@ class Matter_Commisioning_Context
var i2r = session_keys[0..15]
var r2i = session_keys[16..31]
var ac = session_keys[32..47]
- var session_timestamp = tasmota.rtc()['utc']
+ var created = tasmota.rtc()['utc']
- tasmota.log("MTR: ******************************", 3)
- tasmota.log("MTR: I2RKey =" + i2r.tohex(), 3)
- tasmota.log("MTR: R2IKey =" + r2i.tohex(), 3)
- tasmota.log("MTR: AC =" + ac.tohex(), 3)
- tasmota.log("MTR: ******************************", 3)
+ tasmota.log("MTR: ******************************", 4)
+ tasmota.log("MTR: I2RKey =" + i2r.tohex(), 4)
+ tasmota.log("MTR: R2IKey =" + r2i.tohex(), 4)
+ tasmota.log("MTR: AC =" + ac.tohex(), 4)
+ tasmota.log("MTR: ******************************", 4)
- # Send success status report
- var resp = msg.build_response(0x40 #-StatusReport-#, true) # reliable flag
-
- var status_raw = bytes()
- status_raw.add(0x00, 2) # GeneralCode = SUCCESS
- status_raw.add(0x0000, 4) # ProtocolID = 0 (PROTOCOL_ID_SECURE_CHANNEL)
- status_raw.add(0x0000, 4) # ProtocolCode = 0 (SESSION_ESTABLISHMENT_SUCCESS)
-
- var raw = resp.encode(status_raw)
-
- self.responder.send_response(raw, msg.remote_ip, msg.remote_port, resp.message_counter)
+ # StatusReport(GeneralCode: SUCCESS, ProtocolId: SECURE_CHANNEL, ProtocolCode: SESSION_ESTABLISHMENT_SUCCESS)
+ var raw = self.send_status_report(msg, 0x00, 0x0000, 0x0000, true)
session.close()
- session.set_keys(i2r, r2i, ac, session_timestamp)
+ session.set_keys(i2r, r2i, ac, created)
+
+ # CASE Session completed, persist it
+ session._breadcrumb = 0 # clear breadcrumb
+ session.counter_snd_next() # force a first counter. It's important it's used before set_persist(true) to not have a double save
session.set_persist(true) # keep session on flash
session.set_no_expiration() # never expire
+ session.persist_to_fabric()
session.save()
return true
end
+ #############################################################
+ # placeholder, nothing to run for now
+ def parse_StatusReport(msg)
+ var session = msg.session
+ tasmota.log("MTR: >Status "+msg.raw[msg.app_payload_idx..].tohex(), 2)
+ return false # we don't explicitly ack the message
+ end
+
#############################################################
# placeholder, nothing to run for now
def every_second()
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Commissioning_Data.be b/lib/libesp32/berry_matter/src/embedded/Matter_Commissioning_Data.be
index 9aca4927c..8b517912b 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Commissioning_Data.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Commissioning_Data.be
@@ -70,7 +70,7 @@ class Matter_PBKDFParamResponse
var SLEEPY_IDLE_INTERVAL
var SLEEPY_ACTIVE_INTERVAL
- def encode(b)
+ def tlv2raw(b)
var s = matter.TLV.Matter_TLV_struct()
# initiatorRandom
s.add_TLV(1, matter.TLV.B1, self.initiatorRandom)
@@ -84,7 +84,7 @@ class Matter_PBKDFParamResponse
s2.add_TLV(1, matter.TLV.U4, self.SLEEPY_IDLE_INTERVAL)
s2.add_TLV(2, matter.TLV.U4, self.SLEEPY_ACTIVE_INTERVAL)
end
- return s.encode()
+ return s.tlv2raw(b)
end
end
matter.PBKDFParamResponse = Matter_PBKDFParamResponse
@@ -98,7 +98,7 @@ class Matter_Pake1
def parse(b, idx)
if idx == nil idx = 0 end
var val = matter.TLV.parse(b, idx)
- tasmota.log("MTR: parsed TLV: " + str(val), 3)
+ tasmota.log("MTR: parsed TLV: " + str(val), 4)
self.pA = val.getsubval(1)
return self
@@ -113,12 +113,12 @@ class Matter_Pake2
var pB # 65 bytes
var cB # 32 bytes
- def encode(b)
+ def tlv2raw(b)
var s = matter.TLV.Matter_TLV_struct()
#
s.add_TLV(1, matter.TLV.B1, self.pB)
s.add_TLV(2, matter.TLV.B1, self.cB)
- return s.encode()
+ return s.tlv2raw(b)
end
end
matter.Pake2 = Matter_Pake2
@@ -130,7 +130,7 @@ class Matter_Pake3
def parse(b, idx)
if idx == nil idx = 0 end
var val = matter.TLV.parse(b, idx)
- tasmota.log("MTR: parsed TLV: " + str(val), 3)
+ tasmota.log("MTR: parsed TLV: " + str(val), 4)
self.cA = val.getsubval(1)
return self
@@ -157,7 +157,7 @@ class Matter_Sigma1
if idx == nil idx = 0 end
var val = matter.TLV.parse(b, idx)
self.Msg1 = b[idx..]
- tasmota.log("MTR: Sigma1 TLV=" + str(val), 3)
+ tasmota.log("MTR: Sigma1 TLV=" + str(val), 4)
self.initiatorRandom = val.getsubval(1)
self.initiator_session_id = val.getsubval(2)
@@ -168,8 +168,8 @@ class Matter_Sigma1
self.SLEEPY_IDLE_INTERVAL = initiatorSEDParams.findsubval(1)
self.SLEEPY_ACTIVE_INTERVAL = initiatorSEDParams.findsubval(2)
end
- var resumptionID = val.findsub(6)
- var initiatorResumeMIC = val.findsub(7)
+ self.resumptionID = val.findsubval(6)
+ self.initiatorResumeMIC = val.findsubval(7)
return self
end
end
@@ -186,7 +186,7 @@ class Matter_Sigma2
var SLEEPY_IDLE_INTERVAL
var SLEEPY_ACTIVE_INTERVAL
- def encode(b)
+ def tlv2raw(b)
var s = matter.TLV.Matter_TLV_struct()
# initiatorRandom
s.add_TLV(1, matter.TLV.B1, self.responderRandom)
@@ -198,7 +198,7 @@ class Matter_Sigma2
s2.add_TLV(1, matter.TLV.U4, self.SLEEPY_IDLE_INTERVAL)
s2.add_TLV(2, matter.TLV.U4, self.SLEEPY_ACTIVE_INTERVAL)
end
- return s.encode()
+ return s.tlv2raw(b)
end
end
matter.Sigma2 = Matter_Sigma2
@@ -213,18 +213,18 @@ class Matter_Sigma2Resume
var SLEEPY_IDLE_INTERVAL
var SLEEPY_ACTIVE_INTERVAL
- def encode(b)
+ def tlv2raw(b)
var s = matter.TLV.Matter_TLV_struct()
# initiatorRandom
s.add_TLV(1, matter.TLV.B1, self.resumptionID)
s.add_TLV(2, matter.TLV.B1, self.sigma2ResumeMIC)
- s.add_TLV(3, matter.TLV.B1, self.responderSessionID)
+ s.add_TLV(3, matter.TLV.U2, self.responderSessionID)
if self.SLEEPY_IDLE_INTERVAL != nil || self.SLEEPY_ACTIVE_INTERVAL != nil
var s2 = s.add_struct(4)
s2.add_TLV(1, matter.TLV.U4, self.SLEEPY_IDLE_INTERVAL)
s2.add_TLV(2, matter.TLV.U4, self.SLEEPY_ACTIVE_INTERVAL)
end
- return s.encode()
+ return s.tlv2raw(b)
end
end
matter.Sigma2Resume = Matter_Sigma2Resume
@@ -240,7 +240,7 @@ class Matter_Sigma3
if idx == nil idx = 0 end
var val = matter.TLV.parse(b, idx)
self.Msg3 = b[idx..]
- tasmota.log("MTR: Sigma3 TLV=" + str(val), 3)
+ tasmota.log("MTR: Sigma3 TLV=" + str(val), 4)
self.TBEData3Encrypted = val.getsubval(1)
return self
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Control_Message.be b/lib/libesp32/berry_matter/src/embedded/Matter_Control_Message.be
new file mode 100644
index 000000000..d2d3192ba
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Control_Message.be
@@ -0,0 +1,79 @@
+#
+# Matter_Control_Message.be - suppport for Matter Control Messages (flag C = 1)
+#
+# Copyright (C) 2023 Stephan Hadinger & Theo Arends
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+
+import matter
+
+#@ solidify:Matter_Control_Message,weak
+
+#################################################################################
+# Class Matter_Control_Message
+#
+# Control message have C flag = 1
+# Used primarily for Message Counter Synchronization Protocol (MCSP)
+#################################################################################
+class Matter_Control_Message
+ var responder # reference to the caller, sending packets
+ var device # root device object
+
+ def init(responder)
+ import crypto
+ self.responder = responder
+ self.device = responder.device
+ end
+
+ def process_incoming_control_message(msg)
+
+ tasmota.log("MTR: received control message " + matter.inspect(msg), 2)
+ if msg.opcode == 0x00
+ return self.parse_MsgCounterSyncReq(msg)
+ elif msg.opcode == 0x01
+ return self.parse_MsgCounterSyncRsp(msg)
+ else
+ import string
+ tasmota.log(string.format("MTR: >????????? Unknown OpCode (control message) %02X", msg.opcode), 2)
+ return false
+ end
+
+ return false
+ end
+
+ #############################################################
+ # MsgCounterSyncReq
+ #
+ # Not yet implemented
+ def parse_MsgCounterSyncReq(msg)
+ import string
+ var session = msg.session
+ tasmota.log(string.format("MTR: >MCSyncReq * Not implemented %s", msg.raw[msg.app_payload_idx..].tohex()), 2)
+ return false # we don't explicitly ack the message
+ end
+
+ #############################################################
+ # MsgCounterSyncRsp
+ #
+ # Not yet implemented
+ def parse_MsgCounterSyncRsp(msg)
+ import string
+ var session = msg.session
+ tasmota.log(string.format("MTR: >MCSyncRsp * Not implemented %s", msg.raw[msg.app_payload_idx..].tohex()), 2)
+ return false # we don't explicitly ack the message
+ end
+
+end
+matter.Control_Message = Matter_Control_Message
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Device.be b/lib/libesp32/berry_matter/src/embedded/Matter_Device.be
index 7765c16b8..312189d2b 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Device.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Device.be
@@ -26,25 +26,41 @@ class Matter_Device
static var VENDOR_ID = 0xFFF1
static var PRODUCT_ID = 0x8000
static var FILENAME = "_matter_device.json"
+ static var PASE_TIMEOUT = 10*60 # default open commissioning window (10 minutes)
+ var started # is the Matter Device started (configured, mDNS and UDPServer started)
var plugins # list of plugins
var udp_server # `matter.UDPServer()` object
- var msg_handler # `matter.MessageHandler()` object
+ var message_handler # `matter.MessageHandler()` object
var sessions # `matter.Session_Store()` objet
var ui
+ # Commissioning open
+ var commissioning_open # timestamp for timeout of commissioning (millis()) or `nil` if closed
+ var commissioning_iterations # current PBKDF number of iterations
+ var commissioning_discriminator # commissioning_discriminator
+ var commissioning_salt # current salt
+ var commissioning_w0 # current w0 (SPAKE2+)
+ var commissioning_L # current L (SPAKE2+)
+ var commissioning_admin_fabric # the fabric that opened the currint commissioning window, or `nil` for default
# information about the device
- var commissioning_instance_wifi # random instance name for commissioning
- var commissioning_instance_eth # random instance name for commissioning
+ var commissioning_instance_wifi # random instance name for commissioning (mDNS)
+ var commissioning_instance_eth # random instance name for commissioning (mDNS)
var hostname_wifi # MAC-derived hostname for commissioning
var hostname_eth # MAC-derived hostname for commissioning
var vendorid
var productid
- var discriminator
+ # mDNS active announces
+ var mdns_pase_eth # do we have an active PASE mDNS announce for eth
+ var mdns_pase_wifi # do we have an active PASE mDNS announce for wifi
+ # saved in parameters
+ var root_discriminator # as `int`
+ var root_passcode # as `int`
+ var ipv4only # advertize only IPv4 addresses (no IPv6)
# context for PBKDF
- var passcode
- var iterations
+ var root_iterations # PBKDF number of iterations
# PBKDF information used only during PASE (freed afterwards)
- var salt
- var w0, w1, L
+ var root_salt
+ var root_w0
+ var root_L
#############################################################
def init()
@@ -55,87 +71,181 @@ class Matter_Device
return
end # abort if SetOption 151 is not set
+ self.started = false
self.plugins = []
self.vendorid = self.VENDOR_ID
self.productid = self.PRODUCT_ID
- self.iterations = self.PBKDF_ITERATIONS
+ self.root_iterations = self.PBKDF_ITERATIONS
+ self.root_salt = crypto.random(16) # bytes("5350414B453250204B65792053616C74")
+ self.ipv4only = false
self.load_param()
- self.commissioning_instance_wifi = crypto.random(8).tohex() # 16 characters random hostname
- self.commissioning_instance_eth = crypto.random(8).tohex() # 16 characters random hostname
self.sessions = matter.Session_Store()
- self.sessions.load()
- self.msg_handler = matter.MessageHandler(self)
+ self.sessions.load_fabrics()
+ self.message_handler = matter.MessageHandler(self)
self.ui = matter.UI(self)
- # add the default plugin
- self.plugins.push(matter.Plugin_core(self))
- self.plugins.push(matter.Plugin_Relay(self))
-
- self.start_mdns_announce_hostnames()
-
- if tasmota.wifi()['up']
- self.start_udp(self.UDP_PORT)
- else
+ if tasmota.wifi()['up'] || tasmota.eth()['up']
+ self.start()
+ end
+ if !tasmota.wifi()['up']
tasmota.add_rule("Wifi#Connected", def ()
- self.start_udp(self.UDP_PORT)
- tasmota.remove_rule("Wifi#Connected", "matter_device_udp")
-
- end, self)
+ self.start()
+ tasmota.remove_rule("Wifi#Connected", "matter_start")
+ end, "matter_start")
end
-
- if tasmota.eth()['up']
- self.start_udp(self.UDP_PORT)
- else
+ if !tasmota.eth()['up']
tasmota.add_rule("Eth#Connected", def ()
- self.start_udp(self.UDP_PORT)
- tasmota.remove_rule("Eth#Connected", "matter_device_udp")
- end, self)
+ self.start()
+ tasmota.remove_rule("Eth#Connected", "matter_start")
+ end, "matter_start")
end
- self.start_basic_commissioning()
+ self._init_basic_commissioning()
tasmota.add_driver(self)
end
#############################################################
- # Start Basic Commissioning Window
- def start_basic_commissioning()
- # compute PBKDF
- self.compute_pbkdf(self.passcode)
- end
+ # Start Matter device server when the first network is coming up
+ def start()
+ if self.started return end # abort if already started
- def finish_commissioning()
+ # add the default plugin
+ self.plugins.push(matter.Plugin_Root(self, 0))
+ # autoconfigure other plugins
+ self.autoconf_device()
+
+ # for now read sensors every 5 seconds
+ tasmota.add_cron("*/5 * * * * *", def () self._trigger_read_sensors() end, "matter_sensors_5s")
+
+ self._start_udp(self.UDP_PORT)
+
+ self.start_mdns_announce_hostnames()
+
+ self.started = true
end
#############################################################
- # Compute the PBKDF parameters for SPAKE2+
+ # Start Basic Commissioning Window if needed at startup
+ def _init_basic_commissioning()
+ # if no fabric is configured, automatically open commissioning at restart
+ if self.sessions.count_active_fabrics() == 0
+ self.start_root_basic_commissioning()
+ end
+ end
+
+ #############################################################
+ # Start Basic Commissioning with root parameters
#
- # iterations is set to 1000 which is large enough
- def compute_pbkdf(passcode_int)
+ # Open window for `timeout_s` (default 10 minutes)
+ def start_root_basic_commissioning(timeout_s)
+ import string
+ if timeout_s == nil timeout_s = self.PASE_TIMEOUT end
+
+ # show Manual pairing code in logs
+ var pairing_code = self.compute_manual_pairing_code()
+ tasmota.log(string.format("MTR: Manual pairing code: %s-%s-%s", pairing_code[0..3], pairing_code[4..6], pairing_code[7..]), 2)
+
+ # compute PBKDF
+ self._compute_pbkdf(self.root_passcode, self.root_iterations, self.root_salt)
+ self.start_basic_commissioning(timeout_s, self.root_iterations, self.root_discriminator, self.root_salt, self.root_w0, #-self.root_w1,-# self.root_L, nil)
+ end
+
+ #####################################################################
+ # Remove a fabric and clean all corresponding values and mDNS entries
+ def remove_fabric(fabric_parent)
+ var sub_fabrics = self.sessions.find_children_fabrics(fabric_parent.get_fabric_index())
+ if sub_fabrics == nil return end
+ for fabric_index : sub_fabrics
+ var fabric = self.sessions.find_fabric_by_index(fabric_index)
+ if fabric != nil
+ self.message_handler.im.subs_shop.remove_by_fabric(fabric)
+ self.mdns_remove_op_discovery(fabric)
+ self.sessions.remove_fabric(fabric)
+ end
+ end
+ self.sessions.save_fabrics()
+ end
+
+ #############################################################
+ # Start Basic Commissioning Window with custom parameters
+ def start_basic_commissioning(timeout_s, iterations, discriminator, salt, w0, L, admin_fabric)
+ self.commissioning_open = tasmota.millis() + timeout_s * 1000
+ self.commissioning_iterations = iterations
+ self.commissioning_discriminator = discriminator
+ self.commissioning_salt = salt
+ self.commissioning_w0 = w0
+ self.commissioning_L = L
+ self.commissioning_admin_fabric = admin_fabric
+
+ if tasmota.wifi()['up'] || tasmota.eth()['up']
+ self.mdns_announce_PASE()
+ else
+ tasmota.add_rule("Wifi#Connected", def ()
+ self.mdns_announce_PASE()
+ tasmota.remove_rule("Wifi#Connected", "mdns_announce_PASE")
+ end, "mdns_announce_PASE")
+ tasmota.add_rule("Eth#Connected", def ()
+ self.mdns_announce_PASE()
+ tasmota.remove_rule("Eth#Connected", "mdns_announce_PASE")
+ end, "mdns_announce_PASE")
+ end
+ end
+
+ #############################################################
+ # Is root commissioning currently open. Mostly for UI to know if QRCode needs to be shown.
+ def is_root_commissioning_open()
+ return self.commissioning_open != nil && self.commissioning_admin_fabric == nil
+ end
+
+ #############################################################
+ # Stop PASE commissioning, mostly called when CASE is about to start
+ def stop_basic_commissioning()
+ self.commissioning_open = nil
+
+ self.mdns_remove_PASE()
+
+ # clear any PBKDF information to free memory
+ self.commissioning_iterations = nil
+ self.commissioning_discriminator = nil
+ self.commissioning_salt = nil
+ self.commissioning_w0 = nil
+ # self.commissioning_w1 = nil
+ self.commissioning_L = nil
+ self.commissioning_admin_fabric = nil
+ end
+ def is_commissioning_open()
+ return self.commissioning_open != nil
+ end
+
+ #############################################################
+ # (internal) Compute the PBKDF parameters for SPAKE2+ from root parameters
+ #
+ def _compute_pbkdf(passcode_int, iterations, salt)
import crypto
- self.salt = crypto.random(16) # bytes("5350414B453250204B65792053616C74")
+ import string
var passcode = bytes().add(passcode_int, 4)
- var tv = crypto.PBKDF2_HMAC_SHA256().derive(passcode, self.salt, self.iterations, 80)
+ var tv = crypto.PBKDF2_HMAC_SHA256().derive(passcode, salt, iterations, 80)
var w0s = tv[0..39]
var w1s = tv[40..79]
- self.w0 = crypto.EC_P256().mod(w0s)
- self.w1 = crypto.EC_P256().mod(w1s)
- self.L = crypto.EC_P256().public_key(self.w1)
+ self.root_w0 = crypto.EC_P256().mod(w0s)
+ var w1 = crypto.EC_P256().mod(w1s) # w1 is temporarily computed then discarded
+ # self.root_w1 = crypto.EC_P256().mod(w1s)
+ self.root_L = crypto.EC_P256().public_key(w1)
- tasmota.log("MTR: ******************************", 3)
- tasmota.log("MTR: salt = " + self.salt.tohex(), 3)
- tasmota.log("MTR: passcode = " + passcode.tohex(), 3)
- tasmota.log("MTR: w0 = " + self.w0.tohex(), 3)
- tasmota.log("MTR: w1 = " + self.w1.tohex(), 3)
- tasmota.log("MTR: L = " + self.L.tohex(), 3)
- tasmota.log("MTR: ******************************", 3)
+ # tasmota.log("MTR: ******************************", 4)
+ # tasmota.log("MTR: salt = " + self.root_salt.tohex(), 4)
+ # tasmota.log("MTR: passcode_hex = " + passcode.tohex(), 4)
+ # tasmota.log("MTR: w0 = " + self.root_w0.tohex(), 4)
+ # tasmota.log("MTR: L = " + self.root_L.tohex(), 4)
+ # tasmota.log("MTR: ******************************", 4)
end
#############################################################
- # compute QR Code content
+ # Compute QR Code content - can be done only for root PASE
def compute_qrcode_content()
var raw = bytes().resize(11) # we don't use TLV Data so it's only 88 bits or 11 bytes
# version is `000` dont touch
@@ -143,20 +253,22 @@ class Matter_Device
raw.setbits(19, 16, self.productid)
# custom flow = 0 (offset=35, len=2)
raw.setbits(37, 8, 0x04) # already on IP network
- raw.setbits(45, 12, self.discriminator & 0xFFF)
- raw.setbits(57, 27, self.passcode & 0x7FFFFFF)
+ raw.setbits(45, 12, self.root_discriminator & 0xFFF)
+ raw.setbits(57, 27, self.root_passcode & 0x7FFFFFF)
# padding (offset=84 len=4)
return "MT:" + matter.Base38.encode(raw)
end
#############################################################
- # compute the 11 digits manual pairing code (wihout vendorid nor productid) p.223
+ # Compute the 11 digits manual pairing code (wihout vendorid nor productid) p.223
+ #
+ # can be done only for root PASE (we need the passcode, but we don't get it with OpenCommissioningWindow command)
def compute_manual_pairing_code()
import string
- var digit_1 = (self.discriminator & 0x0FFF) >> 10
- var digit_2_6 = ((self.discriminator & 0x0300) << 6) | (self.passcode & 0x3FFF)
- var digit_7_10 = (self.passcode >> 14)
+ var digit_1 = (self.root_discriminator & 0x0FFF) >> 10
+ var digit_2_6 = ((self.root_discriminator & 0x0300) << 6) | (self.root_passcode & 0x3FFF)
+ var digit_7_10 = (self.root_passcode >> 14)
var ret = string.format("%1i%05i%04i", digit_1, digit_2_6, digit_7_10)
ret += matter.Verhoeff.checksum(ret)
@@ -167,31 +279,77 @@ class Matter_Device
# dispatch every second click to sub-objects that need it
def every_second()
self.sessions.every_second()
- self.msg_handler.every_second()
+ self.message_handler.every_second()
+ if self.commissioning_open != nil && tasmota.time_reached(self.commissioning_open) # timeout reached, close provisioning
+ self.commissioning_open = nil
+ end
+ # call all plugins
+ var idx = 0
+ while idx < size(self.plugins)
+ self.plugins[idx].every_second()
+ idx += 1
+ end
+ end
+
+ #############################################################
+ # trigger a read_sensors and dispatch to plugins
+ # Internally used by cron
+ def _trigger_read_sensors()
+ import json
+ var rs_json = tasmota.read_sensors()
+ if rs_json == nil return end
+ var rs = json.load(rs_json)
+ if rs != nil
+
+ # call all plugins
+ var idx = 0
+ while idx < size(self.plugins)
+ self.plugins[idx].parse_sensors(rs)
+ idx += 1
+ end
+
+ else
+ tasmota.log("MTR: unable to parse read_sensors: "+str(rs_json), 3)
+ end
+
+ end
+
+ #############################################################
+ # dispatch every 250ms click to sub-objects that need it
+ def every_250ms()
+ self.message_handler.every_250ms()
end
#############################################################
def stop()
+ tasmota.remove_driver(self)
if self.udp_server self.udp_server.stop() end
end
#############################################################
- # callback when message is received
+ # Callback when message is received.
+ # Send to `message_handler`
def msg_received(raw, addr, port)
- return self.msg_handler.msg_received(raw, addr, port)
- end
-
- def msg_send(raw, addr, port, id)
- return self.udp_server.send_response(raw, addr, port, id)
- end
-
- def packet_ack(id)
- return self.udp_server.packet_ack(id)
+ return self.message_handler.msg_received(raw, addr, port)
end
#############################################################
- # Start UDP Server
- def start_udp(port)
+ # Global entry point for sending a message.
+ # Delegates to `udp_server`
+ def msg_send(msg)
+ return self.udp_server.send_UDP(msg)
+ end
+
+ #############################################################
+ # Signals that a ack was received.
+ # Delegates to `udp_server` to remove from resending list.
+ def received_ack(msg)
+ return self.udp_server.received_ack(msg)
+ end
+
+ #############################################################
+ # (internal) Start UDP Server
+ def _start_udp(port)
if self.udp_server return end # already started
if port == nil port = 5540 end
tasmota.log("MTR: starting UDP server on port: " + str(port), 2)
@@ -200,163 +358,197 @@ class Matter_Device
end
#############################################################
- # start_operational_dicovery
+ # Start Operational Discovery for this session
#
- # Pass control to `device`
- def start_operational_dicovery_deferred(session)
+ # Deferred until next tick.
+ def start_operational_discovery_deferred(session)
# defer to next click
- tasmota.set_timer(0, /-> self.start_operational_dicovery(session))
+ tasmota.set_timer(0, /-> self.start_operational_discovery(session))
end
#############################################################
+ # Start Commissioning Complete for this session
+ #
+ # Deferred until next tick.
def start_commissioning_complete_deferred(session)
# defer to next click
tasmota.set_timer(0, /-> self.start_commissioning_complete(session))
end
#############################################################
- # Start UDP mDNS announcements for commissioning
+ # Start Operational Discovery for this session
#
- # eth is `true` if ethernet turned up, `false` is wifi turned up
- # def mdns_announce_commissioning()
- # var services = {
- # "VP":str(self.vendorid) + "+" + str(self.productid),
- # "D": self.discriminator,
- # "CM":1, # requires passcode
- # "T":0, # no support for TCP
- # "SII":5000, "SAI":300
- # }
-
- # if self.self.hostname_eth
- # mdns.add_service("_matterc","_udp", 5540, services, self.commissioning_instance_eth, self.hostname_eth)
- # end
- # if self.self.hostname_wifi
- # mdns.add_service("_matter","_tcp", 5540, services, self.commissioning_instance_wifi, self.hostname_wifi)
- # end
- # end
-
- #############################################################
- # Start Operational Discovery
- def start_operational_dicovery(session)
+ # Stop Basic Commissioning and clean PASE specific values (to save memory).
+ # Announce fabric entry in mDNS.
+ def start_operational_discovery(session)
import crypto
import mdns
import string
+ self.stop_basic_commissioning() # close all PASE commissioning information
# clear any PBKDF information to free memory
- self.salt = nil
- self.w0 = nil
- self.w1 = nil
- self.L = nil
+ self.root_w0 = nil
+ # self.root_w1 = nil
+ self.root_L = nil
- # save session as persistant
- session.set_no_expiration()
- session.set_persist(true)
- # close the PASE session, it will be re-opened with a CASE session
- session.close()
- self.sessions.save()
+ # we keep the PASE session for 1 minute
+ session.set_expire_in_seconds(60)
- self.mdns_announce_op_discovery(session)
+ self.mdns_announce_op_discovery(session.get_fabric())
end
#############################################################
# Commissioning Complete
#
+ # Stop basic commissioning.
def start_commissioning_complete(session)
tasmota.log("MTR: *** Commissioning complete ***", 2)
+ self.stop_basic_commissioning() # by default close commissioning when it's complete
+ end
+
+
+ #################################################################################
+ # Simple insertion sort - sorts the list in place, and returns the list
+ # remove duplicates
+ #################################################################################
+ static def sort_distinct(l)
+ # insertion sort
+ for i:1..size(l)-1
+ var k = l[i]
+ var j = i
+ while (j > 0) && (l[j-1] > k)
+ l[j] = l[j-1]
+ j -= 1
+ end
+ l[j] = k
+ end
+ # remove duplicate now that it's sorted
+ var i = 1
+ if size(l) <= 1 return l end # no duplicate if empty or 1 element
+ var prev = l[0]
+ while i < size(l)
+ if l[i] == prev
+ l.remove(i)
+ else
+ prev = l[i]
+ i += 1
+ end
+ end
+ return l
end
#############################################################
- # read an attribute
+ # Signal that an attribute has been changed and propagate
+ # to any active subscription.
#
- # def read_attribute(msg, ctx)
- # # dispatch only to plugins that support this endpoint and cluster
- # var endpoint = ctx.endpoint
- # var cluster = ctx.cluster
-
- # var idx = 0
- # while idx < size(self.plugins)
- # var plugin = self.plugins[idx]
-
- # if plugin.has(cluster, endpoint)
- # var ret = plugin.read_attribute(msg, ctx)
- # if ret != nil
- # return ret
- # end
- # end
-
- # idx += 1
- # end
- # end
+ # Delegates to `message_handler`
+ def attribute_updated(endpoint, cluster, attribute, fabric_specific)
+ if fabric_specific == nil fabric_specific = false end
+ var ctx = matter.Path()
+ ctx.endpoint = endpoint
+ ctx.cluster = cluster
+ ctx.attribute = attribute
+ self.message_handler.im.subs_shop.attribute_updated_ctx(ctx, fabric_specific)
+ end
#############################################################
- # expand attribute list based
+ # Proceed to attribute expansion (used for Attribute Read/Write/Subscribe)
#
- # called only when expansion is needed,
- # so we don't need to report any error since they are ignored
+ # Called only when expansion is needed, so we don't need to report any error since they are ignored
+ #
+ # calls `cb(pi, ctx, direct)` for each attribute expanded.
+ # `pi`: plugin instance targeted by the attribute (via endpoint). Note: nothing is sent if the attribute is not declared in supported attributes in plugin.
+ # `ctx`: context object with `endpoint`, `cluster`, `attribute` (no `command`)
+ # `direct`: `true` if the attribute is directly targeted, `false` if listed as part of a wildcard
+ # returns: `true` if processed succesfully, `false` if error occured. If `direct`, the error is returned to caller, but if expanded the error is silently ignored and the attribute skipped.
+ # In case of `direct` but the endpoint/cluster/attribute is not suppported, it calls `cb(nil, ctx, true)` so you have a chance to encode the exact error (UNSUPPORTED_ENDPOINT/UNSUPPORTED_CLUSTER/UNSUPPORTED_ATTRIBUTE/UNREPORTABLE_ATTRIBUTE)
def process_attribute_expansion(ctx, cb)
+ #################################################################################
+ # Returns the keys of a map as a sorted list
+ #################################################################################
+ def keys_sorted(m)
+ var l = []
+ for k: m.keys()
+ l.push(k)
+ end
+ # insertion sort
+ for i:1..size(l)-1
+ var k = l[i]
+ var j = i
+ while (j > 0) && (l[j-1] > k)
+ l[j] = l[j-1]
+ j -= 1
+ end
+ l[j] = k
+ end
+ return l
+ end
+
import string
var endpoint = ctx.endpoint
- var endpoint_mono = [ endpoint ]
+ # var endpoint_mono = [ endpoint ]
var endpoint_found = false # did any endpoint match
var cluster = ctx.cluster
- var cluster_mono = [ cluster ]
+ # var cluster_mono = [ cluster ]
var cluster_found = false
var attribute = ctx.attribute
- var attribute_mono = [ attribute ]
+ # var attribute_mono = [ attribute ]
var attribute_found = false
var direct = (ctx.endpoint != nil) && (ctx.cluster != nil) && (ctx.attribute != nil) # true if the target is a precise attribute, false if it results from an expansion and error are ignored
- tasmota.log(string.format("MTR: process_attribute_expansion %s", str(ctx)), 3)
+ tasmota.log(string.format("MTR: process_attribute_expansion %s", str(ctx)), 4)
+
+ # build the list of candidates
+
+ # list of all endpoints
+ var all = {} # map of {endpoint: {cluster: {attributes:[pi]}}
+ tasmota.log(string.format("MTR: endpoint=%s cluster=%s attribute=%s", endpoint, cluster, attribute), 4)
for pi: self.plugins
- var ep_list = pi.get_endpoints() # get supported endpoints for this plugin
- tasmota.log(string.format("MTR: ep_list %s %s", str(pi), str(ep_list)), 3)
- if endpoint != nil
- # we have a specific endpoint, make sure it's in the list
- if ep_list.find(endpoint) != nil
- ep_list = endpoint_mono
- endpoint_found = true
- else
- continue
+ var ep = pi.get_endpoint() # get supported endpoints for this plugin
+
+ if endpoint != nil && ep != endpoint continue end # skip if specific endpoint and no match
+ # from now on, 'ep' is a good candidate
+ if !all.contains(ep) all[ep] = {} end # create empty structure if not already in the list
+ endpoint_found = true
+
+ # now explore the cluster list for 'ep'
+ var cluster_list = pi.get_cluster_list(ep) # cluster_list is the actual list of candidate cluster for this pluging and endpoint
+ tasmota.log(string.format("MTR: pi=%s ep=%s cl_list=%s", str(pi), str(ep), str(cluster_list)), 4)
+ for cl: cluster_list
+ if cluster != nil && cl != cluster continue end # skip if specific cluster and no match
+ # from now on, 'cl' is a good candidate
+ if !all[ep].contains(cl) all[ep][cl] = {} end
+ cluster_found = true
+
+ # now filter on attributes
+ var attr_list = pi.get_attribute_list(ep, cl)
+ tasmota.log(string.format("MTR: pi=%s ep=%s cl=%s at_list=%s", str(pi), str(ep), str(cl), str(attr_list)), 4)
+ for at: attr_list
+ if attribute != nil && at != attribute continue end # skip if specific attribute and no match
+ # from now on, 'at' is a good candidate
+ if !all[ep][cl].contains(at) all[ep][cl][at] = [] end
+ attribute_found = true
+
+ all[ep][cl][at].push(pi) # add plugin to the list
end
end
- # ep_list is the actual list of candidate endpoints for this plugin
- # iterate on endpoints
- for ep: ep_list
- # now filter on clusters
- var cluster_list = pi.get_cluster_list(ep)
- tasmota.log(string.format("MTR: cluster_list %s %s", str(ep), str(cluster_list)), 3)
- if cluster != nil
- # we have a specific cluster, make sure it's in the list
- if cluster_list.find(cluster) != nil
- cluster_list = cluster_mono
- cluster_found = true
- else
- continue
- end
- end
- # cluster_list is the actual list of candidate cluster for this pluging and endpoint
- for cl: cluster_list
- # now filter on attribute
- var attr_list = pi.get_attribute_list(ep, cluster)
- tasmota.log(string.format("MTR: attr_list %s %s", str(cl), str(attr_list)), 3)
- if attribute != nil
- # we have a specific attribute, make sure it's in the list
- if attr_list.find(attribute) != nil
- attr_list = attribute_mono
- attribute_found = true
- else
- continue
- end
- for at: attr_list
- # we now have the complete candidate: ep/cl/at
- tasmota.log(string.format("MTR: expansion [%02X]%04X/%04X", ep, cl, at), 3)
- ctx.endpoint = ep
- ctx.cluster = cl
- ctx.attribute = at
- var finished = cb(pi, ctx, direct) # call the callback with the plugin and the context
- if finished return end
- end
+ end
+
+ # import json
+ # tasmota.log("MTR: all = " + json.dump(all), 2)
+
+ # iterate on candidates
+ for ep: keys_sorted(all)
+ for cl: keys_sorted(all[ep])
+ for at: keys_sorted(all[ep][cl])
+ for pi: all[ep][cl][at]
+ tasmota.log(string.format("MTR: expansion [%02X]%04X/%04X", ep, cl, at), 3)
+ ctx.endpoint = ep
+ ctx.cluster = cl
+ ctx.attribute = at
+ var finished = cb(pi, ctx, direct) # call the callback with the plugin and the context
+ if direct && finished return end
end
end
end
@@ -374,24 +566,15 @@ class Matter_Device
end
end
- # def process_read_attribute(ctx)
- # self.process_attribute_expansion(ctx,
- # / pi, ctx, direct -> pi.read_attribute(ctx))
- # end
-
#############################################################
- # get active endpoints
- #
- # return the list of endpoints from all plugins (distinct)
+ # Return the list of endpoints from all plugins (distinct), exclud endpoint zero if `exclude_zero` is `true`
def get_active_endpoints(exclude_zero)
var ret = []
for p:self.plugins
- var e = p.get_endpoints()
- for elt:e
- if exclude_zero && elt == 0 continue end
- if ret.find(elt) == nil
- ret.push(elt)
- end
+ var ep = p.get_endpoint()
+ if exclude_zero && ep == 0 continue end
+ if ret.find(ep) == nil
+ ret.push(ep)
end
end
return ret
@@ -404,7 +587,7 @@ class Matter_Device
#
def save_param()
import json
- var j = json.dump({'distinguish':self.discriminator, 'passcode':self.passcode})
+ var j = json.dump({'distinguish':self.root_discriminator, 'passcode':self.root_passcode, 'ipv4only':self.ipv4only})
try
import string
var f = open(self.FILENAME, "w")
@@ -418,6 +601,7 @@ class Matter_Device
end
#############################################################
+ # Load Matter Device parameters
def load_param()
import string
import crypto
@@ -430,8 +614,9 @@ class Matter_Device
import json
var j = json.load(s)
- self.discriminator = j.find("distinguish")
- self.passcode = j.find("passcode")
+ self.root_discriminator = j.find("distinguish", self.root_discriminator)
+ self.root_passcode = j.find("passcode", self.root_passcode)
+ self.ipv4only = bool(j.find("ipv4only", false))
except .. as e, m
if e != "io_error"
tasmota.log("MTR: Session_Store::load Exception:" + str(e) + "|" + str(m), 2)
@@ -439,12 +624,12 @@ class Matter_Device
end
var dirty = false
- if self.discriminator == nil
- self.discriminator = crypto.random(2).get(0,2) & 0xFFF
+ if self.root_discriminator == nil
+ self.root_discriminator = crypto.random(2).get(0,2) & 0xFFF
dirty = true
end
- if self.passcode == nil
- self.passcode = self.PASSCODE_DEFAULT
+ if self.root_passcode == nil
+ self.root_passcode = self.PASSCODE_DEFAULT
dirty = true
end
if dirty self.save_param() end
@@ -457,139 +642,201 @@ class Matter_Device
# Plugins allow to specify response to read/write attributes
# and command invokes
#############################################################
- def invoke_request(msg, val, ctx)
+ def invoke_request(session, val, ctx)
var idx = 0
+ var endpoint = ctx.endpoint
while idx < size(self.plugins)
var plugin = self.plugins[idx]
- var ret = plugin.invoke_request(msg, val, ctx)
- if ret != nil || ctx.status != matter.UNSUPPORTED_COMMAND # default value
- return ret
+ if plugin.endpoint == endpoint
+ return plugin.invoke_request(session, val, ctx)
end
idx += 1
end
+ ctx.status = matter.UNSUPPORTED_ENDPOINT
end
#############################################################
- # MDNS Configuration
+ # mDNS Configuration
#############################################################
- # Start MDNS and announce hostnames for Wifi and ETH from MAC
+ # Start mDNS and announce hostnames for Wifi and ETH from MAC
#
# When the announce is active, `hostname_wifi` and `hostname_eth`
# are defined
def start_mdns_announce_hostnames()
if tasmota.wifi()['up']
- self._start_mdns_announce(false)
+ self._mdns_announce_hostname(false)
else
tasmota.add_rule("Wifi#Connected", def ()
- self._start_mdns_announce(false)
- tasmota.remove_rule("Wifi#Connected", "matter_device_mdns")
- end, self)
+ self._mdns_announce_hostname(false)
+ tasmota.remove_rule("Wifi#Connected", "matter_mdns_host")
+ end, "matter_mdns_host")
end
if tasmota.eth()['up']
- self._start_mdns_announce(true)
+ self._mdns_announce_hostname(true)
else
tasmota.add_rule("Eth#Connected", def ()
- self._start_mdns_announce(true)
- tasmota.remove_rule("Eth#Connected", "matter_device_mdns")
- end, self)
+ self._mdns_announce_hostname(true)
+ tasmota.remove_rule("Eth#Connected", "matter_mdns_host")
+ end, "matter_mdns_host")
end
end
#############################################################
- # Start UDP mDNS announcements for commissioning
+ # Start UDP mDNS announcements hostname
+ # This announcement is independant from commissioning windows
#
# eth is `true` if ethernet turned up, `false` is wifi turned up
- def _start_mdns_announce(is_eth)
+ def _mdns_announce_hostname(is_eth)
import mdns
import string
mdns.start()
+ try
+ if is_eth
+ # Add Hostname (based on MAC) with IPv4/IPv6 addresses
+ var eth = tasmota.eth()
+ self.hostname_eth = string.replace(eth.find("mac"), ':', '')
+ if !self.ipv4only
+ tasmota.log(string.format("MTR: calling mdns.add_hostname(%s, %s, %s)", self.hostname_eth, eth.find('ip6local',''), eth.find('ip','')), 3)
+ mdns.add_hostname(self.hostname_eth, eth.find('ip6local',''), eth.find('ip',''), eth.find('ip6',''))
+ else
+ tasmota.log(string.format("MTR: calling mdns.add_hostname(%s, %s)", self.hostname_eth, eth.find('ip','')), 3)
+ mdns.add_hostname(self.hostname_eth, eth.find('ip',''))
+ end
+ else
+ var wifi = tasmota.wifi()
+ self.hostname_wifi = string.replace(wifi.find("mac"), ':', '')
+ if !self.ipv4only
+ tasmota.log(string.format("MTR: calling mdns.add_hostname(%s, %s, %s)", self.hostname_wifi, wifi.find('ip6local',''), wifi.find('ip','')), 3)
+ mdns.add_hostname(self.hostname_wifi, wifi.find('ip6local',''), wifi.find('ip',''), wifi.find('ip6',''))
+ else
+ tasmota.log(string.format("MTR: calling mdns.add_hostname(%s, %s)", self.hostname_eth, wifi.find('ip','')), 3)
+ mdns.add_hostname(self.hostname_wifi, wifi.find('ip',''))
+ end
+ end
+ tasmota.log(string.format("MTR: start mDNS on %s host '%s.local'", is_eth ? "eth" : "wifi", is_eth ? self.hostname_eth : self.hostname_wifi), 2)
+ except .. as e, m
+ tasmota.log("MTR: Exception" + str(e) + "|" + str(m), 2)
+ end
+
+ self.mdns_announce_op_discovery_all_fabrics()
+ end
+
+ #############################################################
+ # Announce MDNS for PASE commissioning
+ def mdns_announce_PASE()
+ import mdns
+ import string
+ import crypto
+
var services = {
"VP":str(self.vendorid) + "+" + str(self.productid),
- "D": self.discriminator,
+ "D": self.commissioning_discriminator,
"CM":1, # requires passcode
"T":0, # no support for TCP
"SII":5000, "SAI":300
}
- # mdns
+ self.commissioning_instance_wifi = crypto.random(8).tohex() # 16 characters random hostname
+ self.commissioning_instance_eth = crypto.random(8).tohex() # 16 characters random hostname
+
try
- if is_eth
- var eth = tasmota.eth()
- self.hostname_eth = string.replace(eth.find("mac"), ':', '')
- mdns.add_hostname(self.hostname_eth, eth.find('ip6local',''), eth.find('ip',''), eth.find('ip6',''))
+ if self.hostname_eth
+ # Add Matter `_matterc._udp` service
+ tasmota.log(string.format("MTR: calling mdns.add_service(%s, %s, %i, %s, %s, %s)", "_matterc", "_udp", 5540, str(services), self.commissioning_instance_eth, self.hostname_eth), 3)
mdns.add_service("_matterc", "_udp", 5540, services, self.commissioning_instance_eth, self.hostname_eth)
+ self.mdns_pase_eth = true
- tasmota.log(string.format("MTR: starting mDNS on %s '%s' ptr to `%s.local`", is_eth ? "eth" : "wifi",
- is_eth ? self.commissioning_instance_eth : self.commissioning_instance_wifi,
- is_eth ? self.hostname_eth : self.hostname_wifi), 2)
+ tasmota.log(string.format("MTR: announce mDNS on %s '%s' ptr to `%s.local`", "eth", self.commissioning_instance_eth, self.hostname_eth), 2)
# `mdns.add_subtype(service:string, proto:string, instance:string, hostname:string, subtype:string) -> nil`
- var subtype = "_L" + str(self.discriminator & 0xFFF)
- tasmota.log("MTR: adding subtype: "+subtype, 3)
+ var subtype = "_L" + str(self.commissioning_discriminator & 0xFFF)
+ tasmota.log("MTR: adding subtype: "+subtype, 2)
mdns.add_subtype("_matterc", "_udp", self.commissioning_instance_eth, self.hostname_eth, subtype)
- subtype = "_S" + str((self.discriminator & 0xF00) >> 8)
- tasmota.log("MTR: adding subtype: "+subtype, 3)
+ subtype = "_S" + str((self.commissioning_discriminator & 0xF00) >> 8)
+ tasmota.log("MTR: adding subtype: "+subtype, 2)
mdns.add_subtype("_matterc", "_udp", self.commissioning_instance_eth, self.hostname_eth, subtype)
subtype = "_V" + str(self.vendorid)
- tasmota.log("MTR: adding subtype: "+subtype, 3)
+ tasmota.log("MTR: adding subtype: "+subtype, 2)
mdns.add_subtype("_matterc", "_udp", self.commissioning_instance_eth, self.hostname_eth, subtype)
subtype = "_CM1"
- tasmota.log("MTR: adding subtype: "+subtype, 3)
+ tasmota.log("MTR: adding subtype: "+subtype, 2)
mdns.add_subtype("_matterc", "_udp", self.commissioning_instance_eth, self.hostname_eth, subtype)
- else
- var wifi = tasmota.wifi()
- self.hostname_wifi = string.replace(wifi.find("mac"), ':', '')
- mdns.add_hostname(self.hostname_wifi, wifi.find('ip6local',''), wifi.find('ip',''), wifi.find('ip6',''))
+ end
+ if self.hostname_wifi
+
+ tasmota.log(string.format("MTR: calling mdns.add_service(%s, %s, %i, %s, %s, %s)", "_matterc", "_udp", 5540, str(services), self.commissioning_instance_wifi, self.hostname_wifi), 3)
mdns.add_service("_matterc", "_udp", 5540, services, self.commissioning_instance_wifi, self.hostname_wifi)
+ self.mdns_pase_wifi = true
- tasmota.log(string.format("MTR: starting mDNS on %s '%s' ptr to `%s.local`", is_eth ? "eth" : "wifi",
- is_eth ? self.commissioning_instance_eth : self.commissioning_instance_wifi,
- is_eth ? self.hostname_eth : self.hostname_wifi), 2)
+ tasmota.log(string.format("MTR: starting mDNS on %s '%s' ptr to `%s.local`", "wifi", self.commissioning_instance_wifi, self.hostname_wifi), 2)
# `mdns.add_subtype(service:string, proto:string, instance:string, hostname:string, subtype:string) -> nil`
- var subtype = "_L" + str(self.discriminator & 0xFFF)
- tasmota.log("MTR: adding subtype: "+subtype, 3)
+ var subtype = "_L" + str(self.commissioning_discriminator & 0xFFF)
+ tasmota.log("MTR: adding subtype: "+subtype, 2)
mdns.add_subtype("_matterc", "_udp", self.commissioning_instance_wifi, self.hostname_wifi, subtype)
- subtype = "_S" + str((self.discriminator & 0xF00) >> 8)
- tasmota.log("MTR: adding subtype: "+subtype, 3)
+ subtype = "_S" + str((self.commissioning_discriminator & 0xF00) >> 8)
+ tasmota.log("MTR: adding subtype: "+subtype, 2)
mdns.add_subtype("_matterc", "_udp", self.commissioning_instance_wifi, self.hostname_wifi, subtype)
subtype = "_V" + str(self.vendorid)
- tasmota.log("MTR: adding subtype: "+subtype, 3)
+ tasmota.log("MTR: adding subtype: "+subtype, 2)
mdns.add_subtype("_matterc", "_udp", self.commissioning_instance_wifi, self.hostname_wifi, subtype)
subtype = "_CM1"
- tasmota.log("MTR: adding subtype: "+subtype, 3)
+ tasmota.log("MTR: adding subtype: "+subtype, 2)
mdns.add_subtype("_matterc", "_udp", self.commissioning_instance_wifi, self.hostname_wifi, subtype)
end
except .. as e, m
tasmota.log("MTR: Exception" + str(e) + "|" + str(m), 2)
end
- self.mdns_announce_op_discovery_all_sessions()
+ end
+
+ #############################################################
+ # MDNS remove any PASE announce
+ def mdns_remove_PASE()
+ import mdns
+ import string
+
+ try
+ if self.mdns_pase_eth
+ tasmota.log(string.format("MTR: calling mdns.remove_service(%s, %s, %s, %s)", "_matterc", "_udp", self.commissioning_instance_eth, self.hostname_eth), 3)
+ tasmota.log(string.format("MTR: remove mDNS on %s '%s'", "eth", self.commissioning_instance_eth), 2)
+ self.mdns_pase_eth = false
+ mdns.remove_service("_matterc", "_udp", self.commissioning_instance_eth, self.hostname_eth)
+ end
+ if self.mdns_pase_wifi
+ tasmota.log(string.format("MTR: calling mdns.remove_service(%s, %s, %s, %s)", "_matterc", "_udp", self.commissioning_instance_wifi, self.hostname_wifi), 3)
+ tasmota.log(string.format("MTR: remove mDNS on %s '%s'", "wifi", self.commissioning_instance_wifi), 2)
+ self.mdns_pase_wifi = false
+ mdns.remove_service("_matterc", "_udp", self.commissioning_instance_wifi, self.hostname_wifi)
+ end
+ except .. as e, m
+ tasmota.log("MTR: Exception" + str(e) + "|" + str(m), 2)
+ end
end
#############################################################
# Start UDP mDNS announcements for commissioning for all persisted sessions
- def mdns_announce_op_discovery_all_sessions()
- for session: self.sessions.sessions
- if session.get_deviceid() && session.get_fabric()
- self.mdns_announce_op_discovery(session)
+ def mdns_announce_op_discovery_all_fabrics()
+ for fabric: self.sessions.active_fabrics()
+ if fabric.get_device_id() && fabric.get_fabric_id()
+ self.mdns_announce_op_discovery(fabric)
end
end
end
#############################################################
# Start UDP mDNS announcements for commissioning
- def mdns_announce_op_discovery(session)
+ def mdns_announce_op_discovery(fabric)
import mdns
import string
try
- var device_id = session.get_deviceid().copy().reverse()
- var k_fabric = session.get_fabric_compressed()
+ var device_id = fabric.get_device_id().copy().reverse()
+ var k_fabric = fabric.get_fabric_compressed()
var op_node = k_fabric.tohex() + "-" + device_id.tohex()
tasmota.log("MTR: Operational Discovery node = " + op_node, 2)
@@ -612,6 +859,92 @@ class Matter_Device
tasmota.log("MTR: Exception" + str(e) + "|" + str(m), 2)
end
end
+
+ #############################################################
+ # Remove all mDNS announces for all fabrics
+ def mdns_remove_op_discovery_all_fabrics()
+ for fabric: self.sessions.active_fabrics()
+ if fabric.get_device_id() && fabric.get_fabric_id()
+ self.mdns_remove_op_discovery(fabric)
+ end
+ end
+ end
+
+ #############################################################
+ # Remove mDNS announce for fabric
+ def mdns_remove_op_discovery(fabric)
+ import mdns
+ import string
+ try
+ var device_id = fabric.get_device_id().copy().reverse()
+ var k_fabric = fabric.get_fabric_compressed()
+ var op_node = k_fabric.tohex() + "-" + device_id.tohex()
+
+ # mdns
+ if (tasmota.eth().find("up"))
+ tasmota.log(string.format("MTR: remove mDNS on %s '%s'", "eth", op_node), 2)
+ mdns.remove_service("_matter", "_tcp", op_node, self.hostname_eth)
+ end
+ if (tasmota.wifi().find("up"))
+ tasmota.log(string.format("MTR: remove mDNS on %s '%s'", "wifi", op_node), 2)
+ mdns.remove_service("_matter", "_tcp", op_node, self.hostname_wifi)
+ end
+ except .. as e, m
+ tasmota.log("MTR: Exception" + str(e) + "|" + str(m), 2)
+ end
+ end
+
+ #############################################################
+ # Try to clean MDNS entries before restart.
+ #
+ # Called by Tasmota loop as a Tasmota driver.
+ def save_before_restart()
+ self.stop_basic_commissioning()
+ self.mdns_remove_op_discovery_all_fabrics()
+ end
+
+ #############################################################
+ # Autoconfigure device from template
+ #
+ def autoconf_device()
+ import string
+ # check if we have a light
+ var endpoint = 1
+ var light_present = false
+
+ import light
+ var light_status = light.get()
+ if light_status != nil
+ var channels_count = size(light_status.find('channels', ""))
+ if channels_count > 0
+ if channels_count == 1
+ self.plugins.push(matter.Plugin_Light1(self, endpoint))
+ tasmota.log(string.format("MTR: Endpoint:%i Light_Dimmer", endpoint), 2)
+ elif channels_count == 2
+ self.plugins.push(matter.Plugin_Light2(self, endpoint))
+ tasmota.log(string.format("MTR: Endpoint:%i Light_CT", endpoint), 2)
+ else
+ self.plugins.push(matter.Plugin_Light3(self, endpoint))
+ tasmota.log(string.format("MTR: Endpoint:%i Light_RGB", endpoint), 2)
+ end
+ light_present = true
+ endpoint += 1
+ end
+ end
+
+ # how many relays are present
+ var relay_count = size(tasmota.get_power())
+ var relay_index = 0 # start at index 0
+ if light_present relay_count -= 1 end # last power is taken for lights
+
+ while relay_index < relay_count
+ self.plugins.push(matter.Plugin_OnOff(self, endpoint, relay_index))
+ tasmota.log(string.format("MTR: Endpoint:%i Relay_%i", endpoint, relay_index + 1), 2)
+ relay_index += 1
+ endpoint += 1
+ end
+
+ end
end
matter.Device = Matter_Device
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Expirable.be b/lib/libesp32/berry_matter/src/embedded/Matter_Expirable.be
new file mode 100644
index 000000000..391476982
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Expirable.be
@@ -0,0 +1,234 @@
+#
+# Matter_Expirable.be - Support for Matter Expirable and Persistable objects and lists
+#
+# Copyright (C) 2023 Stephan Hadinger & Theo Arends
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+
+import matter
+
+#@ solidify:Matter_Expirable,weak
+#@ solidify:Matter_Expirable_list,weak
+
+#################################################################################
+# Matter_Expirable class
+#
+# Object that can expire after a certain timestamp or
+# that does not expire and can be persisted
+#
+# There are only 3 valid states:
+# - not expirable and not persistable
+# - expirable and not persistable
+# - not expirable and persistable
+# - (both expirable and persistable is normally not valid but still supported)
+#
+#################################################################################
+class Matter_Expirable
+ var _list # the Expirable_list it belongs to (if any)
+ var _persist # do we persist this sessions or is it remporary (bool)
+ var _expiration # if not `nil` the entry is removed after this timestamp
+
+ #############################################################
+ def init()
+ self._persist = false
+ end
+
+ #############################################################
+ def set_parent_list(l)
+ self._list = l
+ end
+ def get_parent_list()
+ return self._list
+ end
+
+ #############################################################
+ def set_persist(p)
+ self._persist = bool(p)
+ end
+ def does_persist()
+ return self._persist
+ end
+
+ #############################################################
+ # pre and post process when persist
+ def persist_pre()
+ end
+ def persist_post()
+ end
+
+ #############################################################
+ # post process after the object was loaded
+ def hydrate_post()
+ end
+
+ #############################################################
+ # before_remove
+ #
+ # called right before the element is removed
+ def before_remove()
+ end
+
+ #############################################################
+ # set absolute time for expiration
+ def set_no_expiration()
+ self._expiration = nil
+ end
+
+ #############################################################
+ # set absolute time for expiration
+ def set_expire_time(t)
+ self._expiration = int(t)
+ end
+
+ #############################################################
+ # set relative time in the future for expiration (in seconds)
+ def set_expire_in_seconds(s, now)
+ if s == nil return end
+ if now == nil now = tasmota.rtc()['utc'] end
+ self.set_expire_time(now + s)
+ end
+
+ #############################################################
+ # set relative time in the future for expiration (in seconds)
+ # returns `true` if expiration date has been reached
+ def has_expired(now)
+ if now == nil now = tasmota.rtc()['utc'] end
+ if self._expiration != nil
+ return now >= self._expiration
+ end
+ return false
+ end
+
+end
+matter.Expirable = Matter_Expirable
+
+
+#################################################################################
+# Matter_Expirable_list class
+#
+# Subclass of list handling Expirable(s)
+#
+#################################################################################
+class Matter_Expirable_list : list
+ # no specific attributes
+ # no specific init()
+
+ #############################################################
+ # Accessors with control of arguments classes
+ def push(o)
+ if !isinstance(o, matter.Expirable) raise "type_error", "argument must be of class 'Expirable'" end
+ o.set_parent_list(self)
+ return super(self).push(o)
+ end
+ def setitem(i, o)
+ if !isinstance(o, matter.Expirable) raise "type_error", "argument must be of class 'Expirable'" end
+ o.set_parent_list(self)
+ return super(self).setitem(i, o)
+ end
+
+ #############################################################
+ # remove - override
+ #
+ def remove(i)
+ if i >= 0 && i < size(self) self[i].before_remove() end
+ return super(self).remove(i)
+ end
+
+ #############################################################
+ # remove_expired
+ #
+ # Check is any object has expired
+ #
+ # returns `true` if persistable objects were actually removed (i.e. needs to persist again), `false` instead
+ def remove_expired()
+ var dirty = false
+ var i = 0
+ while i < size(self)
+ if self[i].has_expired()
+ if self[i]._persist dirty = true end # do we need to save
+ self.remove(i)
+ else
+ i += 1
+ end
+ end
+ return dirty
+ end
+
+ #############################################################
+ # iterator over persistable instances
+ #
+ def persistables()
+ var iterator = self.iter()
+ var f = def ()
+ while true
+ var o = iterator()
+ if o._persist return o end
+ end
+ # ends with an exception
+ end
+
+ return f
+ end
+
+ #############################################################
+ # Count the number of persistable objects
+ def count_persistables()
+ var ret = 0
+ var idx = 0
+ while idx < size(self)
+ if self[idx]._persist ret += 1 end
+ idx += 1
+ end
+ return ret
+ end
+
+ #############################################################
+ # every_second
+ def every_second()
+ self.remove_expired()
+ end
+
+end
+matter.Expirable_list = Matter_Expirable_list
+
+#-
+
+# tests
+
+a = matter.Expirable()
+a.set_persist(true)
+b = matter.Expirable()
+c = matter.Expirable()
+c.set_persist(true)
+l = matter.Expirable_list()
+
+
+l.push(a)
+l.push(b)
+l.push(c)
+
+print('---')
+for e:l print(e) end
+print('---')
+for e:l.persistables() print(e) end
+print('---')
+
+l.every_second()
+print(size(l))
+l[1].set_expire_time(10)
+l.every_second()
+print(size(l))
+
+-#
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Fabric.be b/lib/libesp32/berry_matter/src/embedded/Matter_Fabric.be
new file mode 100644
index 000000000..aee02ef36
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Fabric.be
@@ -0,0 +1,288 @@
+#
+# Matter_Fabric.be - Support for Matter Fabric
+#
+# Copyright (C) 2023 Stephan Hadinger & Theo Arends
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+
+import matter
+
+#@ solidify:Matter_Fabric,weak
+
+# for solidification only
+class Matter_Expirable end
+
+#################################################################################
+# Matter_Fabric class
+#
+# Record all information for a fabric that has provisioned
+#
+# By convetion:
+# attributes with a normal name are persisted (unless they are instances)
+# attributes starting with '_' are not persisted
+# attributes starting with '__' are cleared when a new session is created
+#################################################################################
+class Matter_Fabric : Matter_Expirable
+ static var _MAX_CASE = 5 # maximum number of concurrent CASE sessions per fabric
+ static var _GROUP_SND_INCR = 32 # counter increased when persisting
+ # Group Key Derivation
+ static var _GROUP_KEY = "GroupKey v1.0" # starting with double `_` means it's not writable
+
+ var _store # reference back to session store
+ # timestamp
+ var created
+ # fabric-index
+ var fabric_index # index number for fabrics, starts with `1`
+ var fabric_parent # index of the parent fabric, i.e. the fabric that triggered the provisioning (if nested)
+ # list of active sessions
+ var _sessions # only active CASE sessions that need to be persisted
+ # our own private key
+ var no_private_key # private key of the device certificate (generated at commissioning)
+ # NOC information
+ var root_ca_certificate # root certificate of the initiator
+ var noc # Node Operational Certificate in TLV Matter Certificate
+ var icac # Initiator CA Certificate in TLV Matter Certificate
+ var ipk_epoch_key # timestamp
+ # Information extracted from `noc`
+ var fabric_id # fabric identifier as bytes(8) little endian
+ var fabric_compressed # comrpessed fabric_id identifier, hashed with root_ca public key
+ var device_id # our own device id bytes(8) little endian
+ var fabric_label # set by UpdateFabricLabel
+ # global group counters (send)
+ var counter_group_data_snd # counter for group data
+ var counter_group_ctrl_snd # counter for group command
+ var _counter_group_data_snd_impl# implementation of counter_group_data_snd by matter.Counter()
+ var _counter_group_ctrl_snd_impl# implementation of counter_group_ctrl_snd by matter.Counter()
+ # Admin info extracted from NOC/ICAC
+ var admin_subject
+ var admin_vendor
+
+ #############################################################
+ def init(store)
+ import crypto
+ self._store = store
+ self._sessions = matter.Expirable_list()
+ self.fabric_label = ""
+ self.created = tasmota.rtc()['utc']
+ # init group counters
+ self._counter_group_data_snd_impl = matter.Counter()
+ self._counter_group_ctrl_snd_impl = matter.Counter()
+ self.counter_group_data_snd = self._counter_group_data_snd_impl.next() + self._GROUP_SND_INCR
+ self.counter_group_ctrl_snd = self._counter_group_data_snd_impl.next() + self._GROUP_SND_INCR
+ end
+
+ def get_noc() return self.noc end
+ def get_icac() return self.icac end
+ def get_ipk_epoch_key() return self.ipk_epoch_key end
+ def get_fabric_id() return self.fabric_id end
+ def get_device_id() return self.device_id end
+ def get_fabric_compressed() return self.fabric_compressed end
+ def get_fabric_label() return self.fabric_label end
+ def get_admin_subject() return self.admin_subject end
+ def get_admin_vendor() return self.admin_vendor end
+ def get_ca() return self.root_ca_certificate end
+ def get_fabric_index() return self.fabric_index end
+
+ def set_fabric_index(v) self.fabric_index = v end
+
+ #############################################################
+ # When hydrating from persistance, update counters
+ def hydrate_post()
+ # reset counter_snd to highest known.
+ # We advance it only in case it is actually used
+ # This avoids updaing counters on dead sessions
+ self._counter_group_data_snd_impl.reset(self.counter_group_data_snd)
+ self._counter_group_ctrl_snd_impl.reset(self.counter_group_ctrl_snd)
+ self.counter_group_data_snd = self._counter_group_data_snd_impl.val()
+ self.counter_group_ctrl_snd = self._counter_group_ctrl_snd_impl.val()
+ end
+
+ #############################################################
+ # Management of security counters
+ #############################################################
+ # Provide the next counter value, and update the last know persisted if needed
+ #
+ def counter_group_data_snd_next()
+ import string
+ var next = self._counter_group_data_snd_impl.next()
+ tasmota.log(string.format("MTR: . Counter_group_data_snd=%i", next), 3)
+ if matter.Counter.is_greater(next, self.counter_group_data_snd)
+ self.counter_group_data_snd = next + self._GROUP_SND_INCR
+ if self.does_persist()
+ # the persisted counter is behind the actual counter
+ self.save()
+ end
+ end
+ return next
+ end
+ #############################################################
+ # Provide the next counter value, and update the last know persisted if needed
+ #
+ def counter_group_ctrl_snd_next()
+ import string
+ var next = self._counter_group_ctrl_snd_impl.next()
+ tasmota.log(string.format("MTR: . Counter_group_ctrl_snd=%i", next), 3)
+ if matter.Counter.is_greater(next, self.counter_group_ctrl_snd)
+ self.counter_group_ctrl_snd = next + self._GROUP_SND_INCR
+ if self.does_persist()
+ # the persisted counter is behind the actual counter
+ self.save()
+ end
+ end
+ return next
+ end
+
+ #############################################################
+ # Called before removal
+ def log_new_fabric()
+ import string
+ tasmota.log(string.format("MTR: +Fabric fab='%s'", self.get_fabric_id().copy().reverse().tohex()), 2)
+ end
+
+ #############################################################
+ # Called before removal
+ def before_remove()
+ import string
+ tasmota.log(string.format("MTR: -Fabric fab='%s' (removed)", self.get_fabric_id().copy().reverse().tohex()), 2)
+ end
+
+ #############################################################
+ # Operational Group Key Derivation, 4.15.2, p.182
+ def get_ipk_group_key()
+ if self.ipk_epoch_key == nil || self.fabric_compressed == nil return nil end
+ import crypto
+ var hk = crypto.HKDF_SHA256()
+ var info = bytes().fromstring(self._GROUP_KEY)
+ var hash = hk.derive(self.ipk_epoch_key, self.fabric_compressed, info, 16)
+ return hash
+ end
+
+ def get_ca_pub()
+ var ca = self.root_ca_certificate
+ if ca
+ var m = matter.TLV.parse(ca)
+ return m.findsubval(9)
+ end
+ end
+
+ #############################################################
+ # add session to list of persisted sessions
+ # check for duplicates
+ def add_session(s)
+ if self._sessions.find(s) == nil
+ while size(self._sessions) >= self._MAX_CASE
+ self._sessions.remove(self._sessions.find(self.get_oldest_session()))
+ end
+ self._sessions.push(s)
+ end
+ end
+
+ def get_oldest_session() return self.get_old_recent_session(true) end
+ def get_newest_session() return self.get_old_recent_session(false) end
+
+ # get the oldest or most recent session (oldest indicates direction)
+ def get_old_recent_session(oldest)
+ if size(self._sessions) == 0 return nil end
+ var session = self._sessions[0]
+ var timestamp = session.last_used
+
+ var idx = 1
+ while idx < size(self._sessions)
+ var time2 = self._sessions[idx].last_used
+ if (oldest ? time2 < timestamp : time2 > timestamp)
+ session = self._sessions[idx]
+ timestamp = time2
+ end
+ idx += 1
+ end
+ return session
+ end
+
+ #############################################################
+ # Fabric::tojson()
+ #
+ # convert a single entry as json
+ # returns a JSON string
+ #############################################################
+ def tojson()
+ import json
+ import string
+ import introspect
+
+ self.persist_pre()
+ var keys = []
+ for k : introspect.members(self)
+ var v = introspect.get(self, k)
+ if type(v) != 'function' && k[0] != '_' keys.push(k) end
+ end
+ keys = matter.sort(keys)
+
+ var r = []
+ for k : keys
+ var v = introspect.get(self, k)
+ if v == nil continue end
+ if isinstance(v, bytes) v = "$$" + v.tob64() end # bytes
+ r.push(string.format("%s:%s", json.dump(str(k)), json.dump(v)))
+ end
+
+ # add sessions
+ var s = []
+ for sess : self._sessions.persistables()
+ s.push(sess.tojson())
+ end
+ if size(s) > 0
+ var s_list = "[" + s.concat(",") + "]"
+ r.push('"_sessions":' + s_list)
+ end
+
+ self.persist_post()
+ return "{" + r.concat(",") + "}"
+ end
+
+ #############################################################
+ # fromjson()
+ #
+ # reads a map and load arguments
+ # returns an new instance of fabric
+ # don't load embedded session, this is done by store
+ # i.e. ignore any key starting with '_'
+ #############################################################
+ static def fromjson(store, values)
+ import string
+ import introspect
+ var self = matter.Fabric(store)
+
+ for k : values.keys()
+ if k[0] == '_' continue end # ignore if key starts with '_'
+ var v = values[k]
+ # standard values
+ if type(v) == 'string'
+ if string.find(v, "0x") == 0 # treat as bytes
+ introspect.set(self, k, bytes().fromhex(v[2..]))
+ elif string.find(v, "$$") == 0 # treat as bytes
+ introspect.set(self, k, bytes().fromb64(v[2..]))
+ else
+ introspect.set(self, k, v)
+ end
+ else
+ introspect.set(self, k, v)
+ end
+ end
+ self.hydrate_post()
+ return self
+ end
+
+end
+matter.Fabric = Matter_Fabric
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_IM.be b/lib/libesp32/berry_matter/src/embedded/Matter_IM.be
index e03f17aeb..7e4c49e9b 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_IM.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_IM.be
@@ -19,50 +19,21 @@
import matter
-#@ solidify:Matter_Response_container,weak
#@ solidify:Matter_IM,weak
-#################################################################################
-# Matter_Response_container
-#
-# Used to store all the elements of the reponse to an attribute or command
-#################################################################################
-class Matter_Response_container
- var endpoint
- var cluster
- var attribute
- var command
- var status
-
- def tostring()
- try
- import string
- var s = ""
- s += (self.endpoint != nil ? string.format("[%02X]", self.endpoint) : "[**]")
- s += (self.cluster != nil ? string.format("%04X/", self.cluster) : "****/")
- s += (self.attribute != nil ? string.format("%04X", self.attribute) : "")
- s += (self.command != nil ? string.format("%04X", self.attribute) : "")
- return s
- except .. as e, m
- return "Exception> " + str(e) + ", " + str(m)
- end
- end
-
-end
-matter.Response_container = Matter_Response_container
-
#################################################################################
# Matter_IM class
#################################################################################
class Matter_IM
- static var MAX_MESSAGE = 1200
- static var MSG_TIMEOUT = 10000 # 10s
- var responder
var device
+ var subs_shop # subscriptions shop
- def init(responder, device)
- self.responder = responder
+ var send_queue # list of IM_Message queued for sending as part of exchange-id
+
+ def init(device)
self.device = device
+ self.send_queue = []
+ self.subs_shop = matter.IM_Subscription_Shop(self)
end
def process_incoming(msg)
@@ -71,27 +42,31 @@ class Matter_IM
var val = matter.TLV.parse(msg.raw, msg.app_payload_idx)
- tasmota.log("MTR: IM TLV: " + str(val), 3)
+ # tasmota.log("MTR: IM TLV: " + str(val), 3)
var InteractionModelRevision = val.findsubval(0xFF)
- tasmota.log("MTR: InteractionModelRevision=" + (InteractionModelRevision != nil ? str(InteractionModelRevision) : "nil"), 3)
+ # tasmota.log("MTR: InteractionModelRevision=" + (InteractionModelRevision != nil ? str(InteractionModelRevision) : "nil"), 4)
var opcode = msg.opcode
if opcode == 0x01 # Status Response
return self.process_status_response(msg, val)
elif opcode == 0x02 # Read Request
+ self.send_ack_now(msg)
return self.process_read_request(msg, val)
elif opcode == 0x03 # Subscribe Request
+ self.send_ack_now(msg)
return self.subscribe_request(msg, val)
elif opcode == 0x04 # Subscribe Response
return self.subscribe_response(msg, val)
elif opcode == 0x05 # Report Data
return self.report_data(msg, val)
elif opcode == 0x06 # Write Request
+ self.send_ack_now(msg)
return self.process_write_request(msg, val)
elif opcode == 0x07 # Write Response
return self.process_write_response(msg, val)
elif opcode == 0x08 # Invoke Request
+ self.send_ack_now(msg)
return self.process_invoke_request(msg, val)
elif opcode == 0x09 # Invoke Response
return self.process_invoke_response(msg, val)
@@ -103,26 +78,133 @@ class Matter_IM
end
#############################################################
- # process IM 0x01 Status Response
+ # check whether the ack received is of interest to any
+ # current exchange
#
- # val is the TLV structure
- # returns `true` if processed, `false` if silently ignored,
- # or raises an exception
- def process_status_response(msg, val)
+ # return `true` if handled
+ def process_incoming_ack(msg)
import string
- var status = val.findsubval(0, 0xFF)
- tasmota.log(string.format("MTR: Status Response = 0x%02X", status), 3)
- return true
+ # check if there is an exchange_id interested in receiving this
+ var message = self.find_sendqueue_by_exchangeid(msg.exchange_id)
+ tasmota.log(string.format("MTR: process_incoming_ack exch=%i message=%i", msg.exchange_id, message != nil ? 1 : 0), 3)
+ if message
+ return message.ack_received(msg) # dispatch to IM_Message
+ end
+ return false
end
#############################################################
- # process IM 0x02 Read Request
+ # send Ack response now and don't enqueue it
+ #
+ # returns `true` if packet could be sent
+ def send_ack_now(msg)
+ msg.session._message_handler.send_encrypted_ack(msg, false #-not reliable-#)
+ end
+
+ #############################################################
+ # send enqueued responses
+ #
+ # self.send_queue is a list of
+ #
+ def send_enqueued(responder)
+ var idx = 0
+ while idx < size(self.send_queue)
+ var message = self.send_queue[idx]
+
+ if !message.finish && message.ready
+ message.send_im(responder) # send message
+ end
+
+ if message.finish
+ tasmota.log("MTR: remove IM message exch="+str(message.resp.exchange_id), 3)
+ self.send_queue.remove(idx)
+ else
+ idx += 1
+ end
+ end
+ end
+
+ #############################################################
+ # find in send_queue by exchangeid
+ #
+ def find_sendqueue_by_exchangeid(exchangeid)
+ if exchangeid == nil return nil end
+ var idx = 0
+ while idx < size(self.send_queue)
+ var message = self.send_queue[idx]
+ if message.get_exchangeid() == exchangeid
+ return message
+ end
+ idx += 1
+ end
+ return nil
+ end
+
+ #############################################################
+ # find in send_queue by exchangeid
+ #
+ def remove_sendqueue_by_exchangeid(exchangeid)
+ if exchangeid == nil return end
+ var idx = 0
+ while idx < size(self.send_queue)
+ if self.send_queue[idx].get_exchangeid() == exchangeid
+ self.send_queue.remove(idx)
+ else
+ idx += 1
+ end
+ end
+ end
+
+ #############################################################
+ # Remove any queued message that expired
+ #
+ def expire_sendqueue()
+ var idx = 0
+ while idx < size(self.send_queue)
+ var message = self.send_queue[idx]
+ if tasmota.time_reached(message.expiration)
+ message.reached_timeout()
+ self.send_queue.remove(idx)
+ else
+ idx += 1
+ end
+ end
+ return nil
+ end
+
+ #############################################################
+ # process IM 0x01 Status Response
#
# val is the TLV structure
- # returns `true` if processed, `false` if silently ignored,
# or raises an exception
- def process_read_request(msg, val)
- var endpoints = self.device.get_active_endpoints()
+ # return true if we handled the response and ack, false instead
+ def process_status_response(msg, val)
+ import string
+ var status = val.findsubval(0, 0xFF)
+ var message = self.find_sendqueue_by_exchangeid(msg.exchange_id)
+ if status == matter.SUCCESS
+ if message
+ return message.status_ok_received(msg) # re-arm the sending of next packets for the same exchange
+ else
+ tasmota.log(string.format("MTR: >OK (%6i) exch=%i not found", msg.session.local_session_id, msg.exchange_id), 3) # don't show 'SUCCESS' to not overflow logs with non-information
+ end
+ else
+ # error
+ tasmota.log(string.format("MTR: >Status ERROR = 0x%02X", status), 2)
+ if message
+ message.status_error_received(msg)
+ self.remove_sendqueue_by_exchangeid(msg.exchange_id)
+ end
+ end
+ return false # we did not ack the message, do it at higher level
+ end
+
+ #############################################################
+ # Inner code shared between read_attributes and subscribe_request
+ #
+ # query: `ReadRequestMessage` or `SubscribeRequestMessage`
+ def _inner_process_read_request(session, query, no_log)
+ import string
### Inner function to be iterated upon
# ret is the ReportDataMessage list to send back
@@ -138,7 +220,7 @@ class Matter_IM
attr_name = attr_name ? " (" + attr_name + ")" : ""
# tasmota.log(string.format("MTR: Read Attribute " + str(ctx) + (attr_name ? " (" + attr_name + ")" : ""), 2)
# Special case to report unsupported item, if pi==nil
- var res = (pi != nil) ? pi.read_attribute(msg, ctx) : nil
+ var res = (pi != nil) ? pi.read_attribute(session, ctx) : nil
if res != nil
var a1 = matter.AttributeReportIB()
a1.attribute_data = matter.AttributeDataIB()
@@ -150,7 +232,9 @@ class Matter_IM
a1.attribute_data.data = res
ret.attribute_reports.push(a1)
- tasmota.log(string.format("MTR: Read_Attr %s%s - %s", str(ctx), attr_name, str(res)), 2)
+ if !no_log
+ tasmota.log(string.format("MTR: >Read_Attr (%6i) %s%s - %s", session.local_session_id, str(ctx), attr_name, str(res)), 2)
+ end
return true # stop expansion since we have a value
elif ctx.status != nil
if direct
@@ -164,105 +248,104 @@ class Matter_IM
a1.attribute_status.status.status = ctx.status
ret.attribute_reports.push(a1)
- tasmota.log(string.format("MTR: Read_Attr %s%s - STATUS: 0x%02X %s", str(ctx), attr_name, ctx.status, ctx.status == matter.UNSUPPORTED_ATTRIBUTE ? "UNSUPPORTED_ATTRIBUTE" : ""), 2)
+ tasmota.log(string.format("MTR: >Read_Attr (%6i) %s%s - STATUS: 0x%02X %s", session.local_session_id, str(ctx), attr_name, ctx.status, ctx.status == matter.UNSUPPORTED_ATTRIBUTE ? "UNSUPPORTED_ATTRIBUTE" : ""), 2)
return true
end
else
- tasmota.log(string.format("MTR: Read_Attr %s%s - IGNORED", str(ctx), attr_name), 2)
+ tasmota.log(string.format("MTR: >Read_Attr (%6i) %s%s - IGNORED", session.local_session_id, str(ctx), attr_name), 2)
# ignore if content is nil and status is undefined
+ return false
end
end
+ var endpoints = self.device.get_active_endpoints()
# structure is `ReadRequestMessage` 10.6.2 p.558
- tasmota.log("MTR: IM:read_request processing start", 3)
- var ctx = matter.Response_container()
+ var ctx = matter.Path()
- var query = matter.ReadRequestMessage().from_TLV(val)
- if query.attributes_requests != nil
- # prepare the response
- var ret = matter.ReportDataMessage()
- # ret.suppress_response = true
- ret.attribute_reports = []
+ # prepare the response
+ var ret = matter.ReportDataMessage()
+ # ret.suppress_response = true
+ ret.attribute_reports = []
- for q:query.attributes_requests
- # need to do expansion here
- ctx.endpoint = q.endpoint
- ctx.cluster = q.cluster
- ctx.attribute = q.attribute
- ctx.status = matter.UNSUPPORTED_ATTRIBUTE #default error if returned `nil`
-
- # expand endpoint
- if ctx.endpoint == nil || ctx.cluster == nil || ctx.attribute == nil
- # we need expansion, log first
- if ctx.cluster != nil && ctx.attribute != nil
- var attr_name = matter.get_attribute_name(ctx.cluster, ctx.attribute)
- tasmota.log("MTR: Read_Attr " + str(ctx) + (attr_name ? " (" + attr_name + ")" : ""), 2)
- else
- tasmota.log("MTR: Read_Attr " + str(ctx), 2)
- end
-
+ for q:query.attributes_requests
+ # need to do expansion here
+ ctx.endpoint = q.endpoint
+ ctx.cluster = q.cluster
+ ctx.attribute = q.attribute
+ ctx.status = matter.UNSUPPORTED_ATTRIBUTE #default error if returned `nil`
+
+ # expand endpoint
+ if ctx.endpoint == nil || ctx.cluster == nil || ctx.attribute == nil
+ # we need expansion, log first
+ if ctx.cluster != nil && ctx.attribute != nil
+ var attr_name = matter.get_attribute_name(ctx.cluster, ctx.attribute)
+ tasmota.log(string.format("MTR: >Read_Attr (%6i) %s", session.local_session_id, str(ctx) + (attr_name ? " (" + attr_name + ")" : "")), 2)
+ else
+ tasmota.log(string.format("MTR: >Read_Attr (%6i) %s", session.local_session_id, str(ctx)), 2)
end
-
- # implement concrete expansion
- self.device.process_attribute_expansion(ctx,
- / pi, ctx, direct -> read_single_attribute(ret, pi, ctx, direct)
- )
+
end
- tasmota.log("MTR: ReportDataMessage=" + str(ret), 3)
- tasmota.log("MTR: ReportDataMessageTLV=" + str(ret.to_TLV()), 3)
+ # implement concrete expansion
+ self.device.process_attribute_expansion(ctx,
+ / pi, ctx, direct -> read_single_attribute(ret, pi, ctx, direct)
+ )
+ end
- # send the reponse that may need to be chunked if too large to fit in a single UDP message
- self.send_attr_report(msg, ret)
+ # tasmota.log("MTR: ReportDataMessage=" + str(ret), 3)
+ # tasmota.log("MTR: ReportDataMessageTLV=" + str(ret.to_TLV()), 3)
+
+ return ret
+ end
+
+ #############################################################
+ # process IM 0x02 Read Request
+ #
+ # val is the TLV structure
+ # returns `true` if processed, `false` if silently ignored,
+ # or raises an exception
+ def process_read_request(msg, val)
+ var query = matter.ReadRequestMessage().from_TLV(val)
+ if query.attributes_requests != nil
+ var ret = self._inner_process_read_request(msg.session, query)
+ self.send_report_data(msg, ret)
end
return true
end
- def send_attr_report(msg, ret)
- # class to keep the current chunked reponse
- class Matter_Attr_Report
- var ret # return structure as ReportDataMessage TLV structure
- var resp # response Frame (to keep all fields like session or remote_ip/port)
- var expiration
+ #############################################################
+ # process IM 0x03 Subscribe Request
+ #
+ def subscribe_request(msg, val)
+ import string
+ var query = matter.SubscribeRequestMessage().from_TLV(val)
+
+ if !query.keep_subscriptions
+ self.subs_shop.remove_by_session(msg.session) # if `keep_subscriptions`, kill all subscriptions from current session
end
- # compute the acceptable size
+ tasmota.log("MTR: received SubscribeRequestMessage=" + str(query), 3)
- var msg_sz = 0
- var elements = 0
- if size(ret.attribute_reports) > 0
- msg_sz = size(ret.attribute_reports[0].to_TLV().encode())
- elements = 1
- end
- while msg_sz < self.MAX_MESSAGE && elements < size(ret.attribute_reports)
- var next_sz = size(ret.attribute_reports[elements].to_TLV().encode())
- if msg_sz + next_sz < self.MAX_MESSAGE
- msg_sz += next_sz
- elements += 1
- end
- end
-
- var next_elemnts = ret.attribute_reports[elements .. ]
- ret.attribute_reports = ret.attribute_reports[0 .. elements - 1]
-
- if size(next_elemnts) > 0
- ret.more_chunked_messages = true
- end
-
- var resp = msg.build_response(0x05 #-Report Data-#, true)
- resp.encode(ret.to_TLV().encode()) # payload in cleartext
- resp.encrypt()
- self.responder.send_response(resp.raw, msg.remote_ip, msg.remote_port, resp.message_counter)
-
- if size(next_elemnts) > 0
- ret.attribute_reports = next_elemnts
- var chunked_next = Matter_Attr_Report()
- chunked_next.ret = ret
- chunked_next.resp = resp
- chunked_next.expiration = tasmota.millis() + self.MSG_TIMEOUT
+ var sub = self.subs_shop.new_subscription(msg.session, query)
+
+ # expand a string with all attributes requested
+ var attr_req = []
+ var ctx = matter.Path()
+ for q:query.attributes_requests
+ ctx.endpoint = q.endpoint
+ ctx.cluster = q.cluster
+ ctx.attribute = q.attribute
+ attr_req.push(str(ctx))
end
+ tasmota.log(string.format("MTR: >Subscribe (%6i) %s (min=%i, max=%i, keep=%i) sub=%i",
+ msg.session.local_session_id, attr_req.concat(" "), sub.min_interval, sub.max_interval, query.keep_subscriptions ? 1 : 0, sub.subscription_id), 2)
+ var ret = self._inner_process_read_request(msg.session, query, true #-no_log-#)
+ # ret is of type `Matter_ReportDataMessage`
+ ret.subscription_id = sub.subscription_id # enrich with subscription id TODO
+ self.send_subscribe_response(msg, ret, sub)
+ return true
end
#############################################################
@@ -274,8 +357,8 @@ class Matter_IM
def process_invoke_request(msg, val)
import string
# structure is `ReadRequestMessage` 10.6.2 p.558
- tasmota.log("MTR: IM:invoke_request processing start", 3)
- var ctx = matter.Response_container()
+ tasmota.log("MTR: IM:invoke_request processing start", 4)
+ var ctx = matter.Path()
var query = matter.InvokeRequestMessage().from_TLV(val)
if query.invoke_requests != nil
@@ -291,11 +374,22 @@ class Matter_IM
ctx.status = matter.UNSUPPORTED_COMMAND #default error if returned `nil`
var cmd_name = matter.get_command_name(ctx.cluster, ctx.command)
- if cmd_name == nil cmd_name = string.format("0x%04X/0x02X", ctx.cluster, ctx.command) end
- tasmota.log(string.format("MTR: >Received_cmd %s from [%s]:%i", cmd_name, msg.remote_ip, msg.remote_port), 2)
- var res = self.responder.device.invoke_request(msg, q.command_fields, ctx)
+ var res = self.device.invoke_request(msg.session, q.command_fields, ctx)
+ var params_log = (ctx.log != nil) ? "(" + str(ctx.log) + ") " : ""
+ tasmota.log(string.format("MTR: >Command (%6i) %s %s %s", msg.session.local_session_id, str(ctx), cmd_name ? cmd_name : "", params_log), 2)
+ ctx.log = nil
var a1 = matter.InvokeResponseIB()
- if res != nil
+ if res == true || ctx.status == matter.SUCCESS # special case, just respond ok
+ a1.status = matter.CommandStatusIB()
+ a1.status.command_path = matter.CommandPathIB()
+ a1.status.command_path.endpoint = ctx.endpoint
+ a1.status.command_path.cluster = ctx.cluster
+ a1.status.command_path.command = ctx.command
+ a1.status.status = matter.StatusIB()
+ a1.status.status.status = matter.SUCCESS
+ ret.invoke_responses.push(a1)
+ tasmota.log(string.format("MTR: write_single_attribute(ret, pi, ctx, write_data, direct)
+ )
+ end
+
+ tasmota.log("MTR: ReportWriteMessage=" + str(ret), 4)
+ tasmota.log("MTR: ReportWriteMessageTLV=" + str(ret.to_TLV()), 3)
+
+ # send the reponse that may need to be chunked if too large to fit in a single UDP message
+ if !suppress_response
+ self.send_write_response(msg, ret)
+ end
+ end
+ return true
end
#############################################################
@@ -387,7 +558,7 @@ class Matter_IM
def process_write_response(msg, val)
import string
var query = matter.WriteResponseMessage().from_TLV(val)
- tasmota.log("MTR: received WriteResponseMessage=" + str(query), 3)
+ tasmota.log("MTR: received WriteResponseMessage=" + str(query), 2)
return false
end
@@ -397,7 +568,7 @@ class Matter_IM
def process_invoke_response(msg, val)
import string
var query = matter.InvokeResponseMessage().from_TLV(val)
- tasmota.log("MTR: received InvokeResponseMessage=" + str(query), 3)
+ tasmota.log("MTR: received InvokeResponseMessage=" + str(query), 2)
return false
end
@@ -409,23 +580,113 @@ class Matter_IM
var query = matter.TimedRequestMessage().from_TLV(val)
tasmota.log("MTR: received TimedRequestMessage=" + str(query), 3)
- tasmota.log(string.format("MTR: >Received_IM TimedRequest=%i from [%s]:%i", query.timeout, msg.remote_ip, msg.remote_port), 2)
+ tasmota.log(string.format("MTR: >Command (%6i) TimedRequest=%i", msg.session.local_session_id, query.timeout), 2)
# Send success status report
- var sr = matter.StatusResponseMessage()
- sr.status = matter.SUCCESS
- var resp = msg.build_response(0x01 #-Status Response-#, true #-reliable-#)
- resp.encode(sr.to_TLV().encode()) # payload in cleartext
- resp.encrypt()
- self.responder.send_response(resp.raw, msg.remote_ip, msg.remote_port, resp.message_counter)
+ self.send_status(msg, matter.SUCCESS)
return true
end
+ #############################################################
+ # send regular update for data subscribed
+ #
+ def send_subscribe_update(sub)
+ import string
+ var session = sub.session
+
+ # create a fake read request to feed to the ReportData
+ var fake_read = matter.ReadRequestMessage()
+ fake_read.fabric_filtered = false
+ fake_read.attributes_requests = []
+
+ for ctx: sub.updates
+ var p1 = matter.AttributePathIB()
+ p1.endpoint = ctx.endpoint
+ p1.cluster = ctx.cluster
+ p1.attribute = ctx.attribute
+ fake_read.attributes_requests.push(p1)
+ end
+
+ tasmota.log(string.format("MTR: .
+#
+
+import matter
+
+#@ solidify:Matter_IM_Message,weak
+#@ solidify:Matter_IM_Status,weak
+#@ solidify:Matter_IM_InvokeResponse,weak
+#@ solidify:Matter_IM_WriteResponse,weak
+#@ solidify:Matter_IM_ReportData,weak
+#@ solidify:Matter_IM_ReportDataSubscribed,weak
+#@ solidify:Matter_IM_SubscribedHeartbeat,weak
+#@ solidify:Matter_IM_SubscribeResponse,weak
+
+#################################################################################
+# Matter_IM_Message
+#
+# Superclass for all IM responses
+#################################################################################
+class Matter_IM_Message
+ static var MSG_TIMEOUT = 5000 # 5s
+ var expiration # expiration time for the reporting
+ var resp # response Frame object
+ var ready # bool: ready to send (true) or wait (false)
+ var finish # if true, the message is removed from the queue
+ var data # TLV data of the response (if any)
+ var last_counter # counter value of last sent packet (to match ack)
+
+ # build a response message stub
+ def init(msg, opcode, reliable)
+ self.resp = msg.build_response(opcode, reliable)
+ self.ready = true # by default send immediately
+ self.expiration = tasmota.millis() + self.MSG_TIMEOUT
+ self.last_counter = 0 # avoid `nil` value
+ self.finish = false
+ end
+
+ # the message is being removed due to expiration
+ def reached_timeout()
+ end
+
+ # ack received for previous message, proceed to next (if any)
+ # return true if we manage the ack ourselves, false if it needs to be done upper
+ def ack_received(msg)
+ tasmota.log("MTR: IM_Message ack_received exch="+str(self.resp.exchange_id), 3)
+ self.expiration = tasmota.millis() + self.MSG_TIMEOUT # give more time
+ return false
+ end
+
+ # Status Report OK received for previous message, proceed to next (if any)
+ # return true if we manage the ack ourselves, false if it needs to be done upper
+ def status_ok_received(msg)
+ import string
+ tasmota.log(string.format("MTR: IM_Message status_ok_received exch=%i", self.resp.exchange_id), 3)
+ self.expiration = tasmota.millis() + self.MSG_TIMEOUT # give more time
+ if msg
+ self.resp = msg.build_response(self.resp.opcode, self.resp.x_flag_r, self.resp) # update packet
+ end
+ self.ready = true
+ return true
+ end
+
+ # we received an ACK error, do any necessary cleaning
+ def status_error_received(msg)
+ end
+
+ # get the exchange-id for this message
+ def get_exchangeid()
+ return self.resp.exchange_id
+ end
+
+ # default responder for data
+ def send_im(responder)
+ import string
+ tasmota.log(string.format("MTR: IM_Message send_im exch=%i ready=%i", self.resp.exchange_id, self.ready ? 1 : 0), 3)
+ if !self.ready return false end
+ var resp = self.resp
+ resp.encode_frame(self.data.to_TLV().tlv2raw()) # payload in cleartext
+ resp.encrypt()
+ tasmota.log(string.format("MTR: 0
+ msg_sz = data.attribute_reports[0].to_TLV().encode_len()
+ elements = 1
+ end
+ while msg_sz < self.MAX_MESSAGE && elements < sz_attribute_reports
+ var next_sz = data.attribute_reports[elements].to_TLV().encode_len()
+ if msg_sz + next_sz < self.MAX_MESSAGE
+ msg_sz += next_sz
+ elements += 1
+ else
+ break
+ end
+ end
+
+ tasmota.log(string.format("MTR: exch=%i elements=%i msg_sz=%i total=%i", self.get_exchangeid(), elements, msg_sz, sz_attribute_reports), 3)
+ var next_elemnts = []
+ if data.attribute_reports != nil
+ next_elemnts = data.attribute_reports[elements .. ]
+ data.attribute_reports = data.attribute_reports[0 .. elements - 1]
+ data.more_chunked_messages = (size(next_elemnts) > 0)
+ else
+ data.more_chunked_messages = false
+ end
+
+ if was_chunked
+ tasmota.log(string.format("MTR: .Read_Attr next_chunk exch=%i", self.get_exchangeid()), 3)
+ end
+ if data.more_chunked_messages
+ if !was_chunked
+ tasmota.log(string.format("MTR: .Read_Attr first_chunk exch=%i", self.get_exchangeid()), 3)
+ end
+ # tasmota.log("MTR: sending TLV" + str(data), 4)
+ end
+
+ # print(">>>>> send elements before encode")
+ var raw_tlv = self.data.to_TLV()
+ # print(">>>>> send elements before encode 2")
+ var encoded_tlv = raw_tlv.tlv2raw(bytes(self.MAX_MESSAGE)) # takes time
+ # print(">>>>> send elements before encode 3")
+ resp.encode_frame(encoded_tlv) # payload in cleartext, pre-allocate max buffer
+ # print(">>>>> send elements after encode")
+ resp.encrypt()
+ # print(">>>>> send elements after encrypt")
+ tasmota.log(string.format("MTR: 0
+ data.attribute_reports = next_elemnts
+ tasmota.log(string.format("MTR: to_be_sent_later size=%i exch=%i", size(data.attribute_reports), resp.exchange_id), 3)
+ self.ready = false # wait for Status Report before continuing sending
+ # keep alive
+ else
+ self.finish = true # finished, remove
+ end
+ end
+
+end
+matter.IM_ReportData = Matter_IM_ReportData
+
+
+#################################################################################
+# Matter_IM_ReportDataSubscribed
+#
+# Main difference is that we are the spontaneous initiator
+#################################################################################
+class Matter_IM_ReportDataSubscribed : Matter_IM_ReportData
+ var sub # subscription object
+ var report_data_phase # true during reportdata
+
+ def init(message_handler, session, data, sub)
+ self.resp = matter.Frame.initiate_response(message_handler, session, 0x05 #-Report Data-#, true)
+ self.data = data
+ self.ready = true # by default send immediately
+ self.expiration = tasmota.millis() + self.MSG_TIMEOUT
+ #
+ self.sub = sub
+ self.report_data_phase = true
+ end
+
+ def reached_timeout()
+ self.sub.remove_self()
+ end
+
+ # ack received, confirm the heartbeat
+ def ack_received(msg)
+ import string
+ tasmota.log(string.format("MTR: IM_ReportDataSubscribed ack_received sub=%i", self.sub.subscription_id), 3)
+ super(self).ack_received(msg)
+ if !self.report_data_phase
+ # if ack is received while all data is sent, means that it finished without error
+ if self.sub.is_keep_alive # only if keep-alive, for normal reports, re_arm is called at last StatusReport
+ self.sub.re_arm() # signal that we can proceed to next sub report
+ end
+ return true # proceed to calling send() which removes the message
+ else
+ return false # do nothing
+ end
+ end
+
+ # we received an ACK error, remove subscription
+ def status_error_received(msg)
+ import string
+ tasmota.log(string.format("MTR: IM_ReportDataSubscribed status_error_received sub=%i exch=%i", self.sub.subscription_id, self.resp.exchange_id), 3)
+ self.sub.remove_self()
+ end
+
+ # ack received for previous message, proceed to next (if any)
+ # return true if we manage the ack ourselves, false if it needs to be done upper
+ def status_ok_received(msg)
+ import string
+ tasmota.log(string.format("MTR: IM_ReportDataSubscribed status_ok_received sub=%i exch=%i", self.sub.subscription_id, self.resp.exchange_id), 3)
+ if self.report_data_phase
+ return super(self).status_ok_received(msg)
+ else
+ self.sub.re_arm() # always re_arm at last StatusReport. The only case where it does not happen is during keep-alive, hence we need to lookg for Ack (see above)
+ super(self).status_ok_received(nil)
+ return false # let the caller to the ack
+ end
+ end
+
+ # returns true if transaction is complete (remove object from queue)
+ # default responder for data
+ def send_im(responder)
+ import string
+ tasmota.log(string.format("MTR: IM_ReportDataSubscribed send sub=%i exch=%i ready=%i", self.sub.subscription_id, self.resp.exchange_id, self.ready ? 1 : 0), 3)
+ tasmota.log(string.format("MTR: ReportDataSubscribed::send_im size(self.data.attribute_reports)=%i ready=%s report_data_phase=%s", size(self.data.attribute_reports), str(self.ready), str(self.report_data_phase)), 3)
+ if !self.ready return false end
+ if size(self.data.attribute_reports) > 0 # do we have still attributes to send
+ if self.report_data_phase
+ super(self).send_im(responder)
+ tasmota.log(string.format("MTR: ReportDataSubscribed::send_im called super finish=%i", self.finish), 3)
+ if !self.finish return end # ReportData needs to continue
+ # ReportData is finished
+ self.report_data_phase = false
+ self.ready = false
+ self.finish = false # while a ReadReport would stop here, we continue for subscription
+ else
+ # send a simple ACK
+ var resp = self.resp.build_standalone_ack(false)
+ resp.encode_frame()
+ resp.encrypt()
+ tasmota.log(string.format("MTR: Sub_OK (%6i) sub=%i", msg.session.local_session_id, self.sub.subscription_id), 2)
+ return super(self).status_ok_received(msg)
+ end
+
+end
+matter.IM_SubscribeResponse = Matter_IM_SubscribeResponse
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_IM_Subscription.be b/lib/libesp32/berry_matter/src/embedded/Matter_IM_Subscription.be
new file mode 100644
index 000000000..0f526d987
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_IM_Subscription.be
@@ -0,0 +1,254 @@
+#
+# Matter_IM_Subscription.be - suppport for Matter Interaction Model subscriptions
+#
+# Copyright (C) 2023 Stephan Hadinger & Theo Arends
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+
+import matter
+
+#@ solidify:Matter_IM_Subscription,weak
+#@ solidify:Matter_IM_Subscription_Shop,weak
+
+#################################################################################
+# Matter_IM_Subscription
+#
+# Individual subscription instance
+#################################################################################
+class Matter_IM_Subscription
+ static var MAX_INTERVAL_MARGIN = 5 # we always keep 5s margin
+ var subs_shop # pointer to sub shop
+ # parameters of the subscription
+ var subscription_id # id of the subcription as known by requester
+ var session # the session it belongs to
+ var path_list # list of path subscibed to
+ var min_interval # never send data more often than every `min_interval` seconds
+ var max_interval # always send data before `max_interal` seconds or the subscription is lost
+ var fabric_filtered
+ # manage time
+ var not_before # rate-limiting
+ var expiration # expiration epoch, we need to respond before
+ var wait_status # if `true` wait for Status Response before sending anything new
+ var is_keep_alive # was the last message sent an empty keep-alive
+ # updates
+ var updates
+
+ # req: SubscribeRequestMessage
+ def init(subs_shop, id, session, req)
+ self.subs_shop = subs_shop
+ self.subscription_id = id
+ self.session = session
+ # check values for min_interval
+ var min_interval = req.min_interval_floor
+ if min_interval < 0 min_interval = 0 end
+ if min_interval > 60 min_interval = 60 end
+ self.min_interval = min_interval
+ # check values for max_interval
+ var max_interval = req.max_interval_ceiling
+ if max_interval < 60 max_interval = 60 end
+ if max_interval > 3600 max_interval = 3600 end
+ max_interval = 60
+ self.max_interval = max_interval
+ self.wait_status = false
+
+ self.fabric_filtered = req.fabric_filtered
+
+ # get list of path from
+ self.path_list = []
+
+ for q: req.attributes_requests
+ var ctx = matter.Path()
+ ctx.endpoint = q.endpoint
+ ctx.cluster = q.cluster
+ ctx.attribute = q.attribute
+ self.path_list.push(ctx)
+ end
+
+ # update next time interval
+ self.updates = []
+ self.clear_before_arm()
+ self.is_keep_alive = false
+
+ # tasmota.log("MTR: new subsctiption " + matter.inspect(self), 3)
+ end
+
+ # remove self from subs_shop list
+ def remove_self()
+ tasmota.log("MTR: -Sub_Del ( ) sub=" + str(self.subscription_id), 2)
+ self.subs_shop.remove_sub(self)
+ end
+
+ # clear log after it was sent, and re-arm next expiration
+ def clear_before_arm()
+ self.updates.clear()
+ self.wait_status = true
+ end
+
+ # we received a complete ack for previous message, rearm
+ def re_arm()
+ import string
+ self.wait_status = false
+ var now = tasmota.millis()
+ self.expiration = now + (self.max_interval - self.MAX_INTERVAL_MARGIN) * 1000
+ self.not_before = now + self.min_interval * 1000 - 1
+ if !self.is_keep_alive
+ tasmota.log(string.format("MTR: .Sub_Done ( ) sub=%i", self.subscription_id), 2)
+ end
+ end
+
+ # signal that an attribute was updated, to add to the list of reportable
+ def attribute_updated_ctx(ctx, fabric_specific)
+ var idx = 0
+ while idx < size(self.path_list)
+ var filter = self.path_list[idx]
+ if (filter.endpoint == nil || filter.endpoint == ctx.endpoint) &&
+ (filter.cluster == nil || filter.cluster == ctx.cluster) &&
+ (filter.attribute == nil || filter.attribute == ctx.attribute)
+
+ # ready to push the new attribute, check that it
+ self._add_attribute_unique_path(ctx)
+ end
+ idx += 1
+ end
+ end
+
+ # add an attribute path for an updated attribute, remove any duplicate
+ def _add_attribute_unique_path(ctx)
+ var idx = 0
+ while idx < size(self.updates)
+ var path = self.updates[idx]
+ if path.endpoint == ctx.endpoint &&
+ path.cluster == ctx.cluster &&
+ path.attribute == ctx.attribute
+ return # already exists in the list, abort
+ end
+ idx += 1
+ end
+ self.updates.push(ctx)
+ end
+
+end
+matter.IM_Subscription = Matter_IM_Subscription
+
+#################################################################################
+# Matter_IM_Subscription_Shop (monad)
+#
+# Handles all subscriptions
+#################################################################################
+class Matter_IM_Subscription_Shop
+ var subs # list of subscriptions
+ var im # pointer to parent `im` object
+
+ def init(im)
+ self.im = im
+ self.subs = []
+ end
+
+ #############################################################
+ # create a new subscription
+ #
+ # session object
+ # SubscribeRequestMessage request
+ # returns: new subscription
+ def new_subscription(session, req)
+ import crypto
+ var id = crypto.random(2).get(0,2)
+ while self.get_by_id(id)
+ id = crypto.random(2).get(0,2)
+ end
+
+ var sub = matter.IM_Subscription(self, id, session, req)
+ self.subs.push(sub)
+
+ return sub
+ end
+
+ def remove_sub(sub)
+ var idx = 0
+ while idx < size(self.subs)
+ if self.subs[idx] == sub
+ self.subs.remove(idx)
+ else
+ idx += 1
+ end
+ end
+ end
+
+ def get_by_id(id)
+ var idx = 0
+ while idx < size(self.subs)
+ if self.subs[idx].subscription_id == id
+ return self.subs[idx]
+ end
+ idx += 1
+ end
+ end
+
+ def remove_by_session(session)
+ var idx = 0
+ while idx < size(self.subs)
+ if self.subs[idx].session == session
+ self.subs.remove(idx)
+ else
+ idx += 1
+ end
+ end
+ end
+
+ def remove_by_fabric(fabric)
+ for session: fabric._sessions
+ self.remove_by_session(session)
+ end
+ end
+
+ #############################################################
+ # dispatch every 250ms click to sub-objects that need it
+ def every_250ms()
+ # any data ready to send?
+ var idx = 0
+ while idx < size(self.subs)
+ var sub = self.subs[idx]
+ if !sub.wait_status && size(sub.updates) > 0 && tasmota.time_reached(sub.not_before)
+ self.im.send_subscribe_update(sub)
+ sub.clear_before_arm()
+ end
+ idx += 1
+ end
+
+ # any heartbeat needing to be sent
+ idx = 0
+ while idx < size(self.subs)
+ var sub = self.subs[idx]
+ if !sub.wait_status && tasmota.time_reached(sub.expiration)
+ self.im.send_subscribe_heartbeat(sub)
+ sub.clear_before_arm()
+ sub.re_arm() # signal that we can proceed to next sub report
+ end
+ idx += 1
+ end
+ end
+
+ # signal that an attribute was updated, to add to the list of reportable
+ def attribute_updated_ctx(ctx, fabric_specific)
+ # signal any relevant subscription
+ var idx = 0
+ while idx < size(self.subs)
+ self.subs[idx].attribute_updated_ctx(ctx, fabric_specific)
+ idx += 1
+ end
+ end
+
+end
+matter.IM_Subscription_Shop = Matter_IM_Subscription_Shop
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Message.be b/lib/libesp32/berry_matter/src/embedded/Matter_Message.be
index 8ca41200b..d127d1a1c 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Message.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Message.be
@@ -52,7 +52,7 @@ class Matter_Frame
var x_flag_a
var x_flag_i
var opcode
- var exchange_id
+ var exchange_id # exchange_id is 16 bits unsigned, we set bit 16 if it's an id generated locally
var protocol_id
var vendor_id # (opt)
var ack_message_counter # (opt)
@@ -140,6 +140,7 @@ class Matter_Frame
self.opcode = raw.get(idx+1, 1)
self.exchange_id = raw.get(idx+2, 2)
+ if !self.x_flag_i self.exchange_id |= 0x10000 end # special encoding for local exchange_id
self.protocol_id = raw.get(idx+4, 2)
idx += 6
@@ -170,7 +171,7 @@ class Matter_Frame
#
# Header is built from attributes
# `payload` is a bytes() buffer for the app payload
- def encode(payload)
+ def encode_frame(payload)
var raw = bytes()
# compute flags
if self.flags == nil
@@ -210,7 +211,7 @@ class Matter_Frame
raw.add(self.x_flags, 1)
# opcode (mandatory)
raw.add(self.opcode, 1)
- raw.add(self.exchange_id, 2)
+ raw.add(self.exchange_id & 0xFFFF, 2)
raw.add(self.protocol_id, 2)
if self.x_flag_a raw.add(self.ack_message_counter, 4) end
# finally payload
@@ -227,38 +228,7 @@ class Matter_Frame
#############################################################
# Generate a Standalone Acknowledgment
# Uses `PROTOCOL_ID_SECURE_CHANNEL` no ecnryption required
- def build_standalone_ack()
- import string
- # send back response
- var resp = classof(self)(self.message_handler)
-
- if self.flag_s
- resp.flag_dsiz = 0x01
- resp.dest_node_id_8 = self.source_node_id
- else
- resp.flag_dsiz = 0x00
- end
- resp.session = self.session # also copy the session object
- # message counter
- resp.message_counter = self.session.counter_snd.next()
- resp.local_session_id = self.session.initiator_session_id
-
- resp.x_flag_i = 0 # not sent by initiator
- resp.opcode = 0x10 # MRP Standalone Acknowledgement
- resp.exchange_id = self.exchange_id
- resp.protocol_id = 0 # PROTOCOL_ID_SECURE_CHANNEL
- resp.x_flag_a = 1 # ACK of previous message
- resp.ack_message_counter = self.message_counter
- resp.x_flag_r = 0
-
- tasmota.log(string.format("MTR: >>>>>>>>>>>>>>>>>>> Compute Privacy TODO", 2)
var k = session.get_i2r_privacy()
var n = bytes().add(self.local_session_id, -2) + mic[5..15] # session in Big Endian
var m = self.raw[4 .. self.payload_idx-1]
@@ -340,25 +383,25 @@ class Matter_Frame
n.resize(13) # add zeros
end
- tasmota.log("MTR: ******************************", 3)
- tasmota.log("MTR: i2r =" + i2r.tohex(), 3)
- tasmota.log("MTR: p =" + p.tohex(), 3)
- tasmota.log("MTR: a =" + a.tohex(), 3)
- tasmota.log("MTR: n =" + n.tohex(), 3)
- tasmota.log("MTR: mic =" + mic.tohex(), 3)
+ tasmota.log("MTR: ******************************", 4)
+ tasmota.log("MTR: i2r =" + i2r.tohex(), 4)
+ tasmota.log("MTR: p =" + p.tohex(), 4)
+ tasmota.log("MTR: a =" + a.tohex(), 4)
+ tasmota.log("MTR: n =" + n.tohex(), 4)
+ tasmota.log("MTR: mic =" + mic.tohex(), 4)
# decrypt
var aes = crypto.AES_CCM(i2r, n, a, size(p), 16)
var cleartext = aes.decrypt(p)
var tag = aes.tag()
- tasmota.log("MTR: ******************************", 3)
- tasmota.log("MTR: cleartext =" + cleartext.tohex(), 3)
- tasmota.log("MTR: tag =" + tag.tohex(), 3)
- tasmota.log("MTR: ******************************", 3)
+ tasmota.log("MTR: ******************************", 4)
+ tasmota.log("MTR: cleartext =" + cleartext.tohex(), 4)
+ tasmota.log("MTR: tag =" + tag.tohex(), 4)
+ tasmota.log("MTR: ******************************", 4)
if tag != mic
- tasmota.log("MTR: rejected packet due to invalid MIC", 3)
+ tasmota.log("MTR: rejected packet due to invalid MIC", 2)
return nil
end
@@ -384,35 +427,35 @@ class Matter_Frame
var n = bytes()
n.add(self.flags, 1)
n.add(self.message_counter, 4)
- if session.get_mode() == session.__CASE && session.deviceid
- n .. session.deviceid
+ if session.is_CASE() && session.get_device_id()
+ n .. session.get_device_id()
end
n.resize(13) # add zeros
- tasmota.log("MTR: cleartext: " + self.raw.tohex(), 3)
+ # tasmota.log("MTR: cleartext: " + self.raw.tohex(), 4)
- tasmota.log("MTR: ******************************", 3)
- tasmota.log("MTR: r2i =" + r2i.tohex(), 3)
- tasmota.log("MTR: p =" + p.tohex(), 3)
- tasmota.log("MTR: a =" + a.tohex(), 3)
- tasmota.log("MTR: n =" + n.tohex(), 3)
+ # tasmota.log("MTR: ******************************", 4)
+ # tasmota.log("MTR: r2i =" + r2i.tohex(), 4)
+ # tasmota.log("MTR: p =" + p.tohex(), 4)
+ # tasmota.log("MTR: a =" + a.tohex(), 4)
+ # tasmota.log("MTR: n =" + n.tohex(), 4)
# decrypt
var aes = crypto.AES_CCM(r2i, n, a, size(p), 16)
var ciphertext = aes.encrypt(p)
var tag = aes.tag()
- tasmota.log("MTR: ******************************", 3)
- tasmota.log("MTR: ciphertext =" + ciphertext.tohex(), 3)
- tasmota.log("MTR: tag =" + tag.tohex(), 3)
- tasmota.log("MTR: ******************************", 3)
+ # tasmota.log("MTR: ******************************", 4)
+ # tasmota.log("MTR: ciphertext =" + ciphertext.tohex(), 4)
+ # tasmota.log("MTR: tag =" + tag.tohex(), 4)
+ # tasmota.log("MTR: ******************************", 4)
# packet is good, put back content in raw
self.raw.resize(self.payload_idx) # remove cleartext payload
self.raw .. ciphertext # add ciphertext
self.raw .. tag # add MIC
- # tasmota.log("MTR: encrypted: " + self.raw.tohex(), 3)
+ # tasmota.log("MTR: encrypted: " + self.raw.tohex(), 4)
end
#############################################################
@@ -421,7 +464,7 @@ class Matter_Frame
var r = matter.Frame(self.message_handler, raw)
r.decode_header()
r.decode_payload()
- tasmota.log("MTR: sending decode: " + matter.inspect(r), 3)
+ tasmota.log("MTR: sending decode: " + matter.inspect(r), 4)
end
end
matter.Frame = Matter_Frame
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_MessageHandler.be b/lib/libesp32/berry_matter/src/embedded/Matter_MessageHandler.be
index 4da3c5668..fb16f9795 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_MessageHandler.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_MessageHandler.be
@@ -26,17 +26,47 @@ class Matter_MessageHandler
var device # `tansport.msg_send(raw:bytes() [,...]) -> bool` true if succeeded
# handlers
- var commissioning
- var im # handler for Interaction Model
- # counters
- var counter_rcv # Global Unencrypted Message Counter incoming
+ var commissioning # Commissioning Context instance, handling the PASE/CASE phases
+ var im # Instance of `matter.IM` handling Interaction Model
+ var control_message # Instance of `matter.Control_Message` for MCSP
#############################################################
def init(device)
self.device = device
self.commissioning = matter.Commisioning_Context(self)
- self.im = matter.IM(self, device)
- self.counter_rcv = matter.Counter()
+ self.im = matter.IM(device)
+ self.control_message = matter.Control_Message(self)
+ end
+
+ #############################################################
+ # Send a unencrypted Ack if needed
+ #
+ # reliable: do we send as reliable message
+ #
+ def send_simple_ack(frame, reliable)
+ import string
+ if frame.x_flag_r # nothing to respond, check if we need a standalone ack
+ var resp = frame.build_standalone_ack(reliable)
+ resp.encode_frame()
+ tasmota.log(string.format("MTR: Received %s from [%s]:%i", op_name, addr, port), 2)
+ tasmota.log(string.format("MTR: >Received (%6i) %s rid=%i exch=%i from [%s]:%i", session.local_session_id, op_name, frame.message_counter, frame.exchange_id, addr, port), 2)
+ else
+ tasmota.log(string.format("MTR: >rcv Ack (%6i) rid=%i exch=%i ack=%s %sfrom [%s]:%i", session.local_session_id, frame.message_counter, frame.x_flag_r ? "{reliable} " : "", frame.exchange_id, str(frame.ack_message_counter), addr, port), 3)
end
- self.commissioning.process_incoming(frame, addr, port)
+ ret = self.commissioning.process_incoming(frame)
+ # if ret is false, the implicit Ack was not sent
+ if !ret self.send_simple_ack(frame, false #-not reliable-#) end
return true
else
#############################################################
@@ -84,15 +130,19 @@ class Matter_MessageHandler
var session = self.device.sessions.get_session_by_local_session_id(frame.local_session_id)
if session == nil
- tasmota.log("MTR: unknown local_session_id "+str(frame.local_session_id), 3)
- tasmota.log("MTR: frame="+matter.inspect(frame), 3)
+ tasmota.log("MTR: unknown local_session_id="+str(frame.local_session_id), 2)
+ # tasmota.log("MTR: frame="+matter.inspect(frame), 3)
return false
end
+ if addr session._ip = addr end
+ if port session._port = port end
+ session._message_handler = self
frame.session = session # keep a pointer of the session in the message
# check if it's a duplicate
- if !session.counter_rcv.validate(frame.message_counter, true)
- tasmota.log("MTR: rejected duplicate encrypted message = " + str(frame.message_counter) + " counter=" + str(session.counter_rcv.val()), 3)
+ if !session.counter_rcv_validate(frame.message_counter, true)
+ tasmota.log("MTR: . Duplicate encrypted message = " + str(frame.message_counter) + " counter=" + str(session.counter_rcv), 3)
+ self.send_encrypted_ack(frame, false #-not reliable-#)
return false
end
@@ -104,23 +154,37 @@ class Matter_MessageHandler
frame.raw .. cleartext # add cleartext
# continue decoding
- tasmota.log(string.format("MTR: idx=%i clear=%s", frame.payload_idx, frame.raw.tohex()), 3)
+ tasmota.log(string.format("MTR: idx=%i clear=%s", frame.payload_idx, frame.raw.tohex()), 4)
frame.decode_payload()
- tasmota.log("MTR: decrypted message: protocol_id:"+str(frame.protocol_id)+" opcode="+str(frame.opcode)+" exchange_id"+str(frame.exchange_id), 3)
+ tasmota.log("MTR: > Decrypted message: protocol_id:"+str(frame.protocol_id)+" opcode="+str(frame.opcode)+" exchange_id="+str(frame.exchange_id & 0xFFFF), 3)
- self.device.packet_ack(frame.ack_message_counter) # acknowledge packet
+ tasmota.log(string.format("MTR: >rcv (%6i) [%02X/%02X] rid=%i exch=%i ack=%s %sfrom [%s]:%i", session.local_session_id, frame.protocol_id, frame.opcode, frame.message_counter, frame.exchange_id, str(frame.ack_message_counter), frame.x_flag_r ? "{reliable} " : "", addr, port), 3)
+
+ self.device.received_ack(frame) # remove acknowledge packet from sending list
# dispatch according to protocol_id
var protocol_id = frame.protocol_id
if protocol_id == 0x0000 # PROTOCOL_ID_SECURE_CHANNEL
# it should not be encrypted
tasmota.log("MTR: PROTOCOL_ID_SECURE_CHANNEL " + matter.inspect(frame), 3)
- # if frame.opcode == 0x10
- # end
- return true
+ if frame.opcode == 0x10 # MRPStandaloneAcknowledgement
+ ret = self.im.process_incoming_ack(frame)
+ if ret
+ self.im.send_enqueued(self)
+ end
+ end
+ ret = true
elif protocol_id == 0x0001 # PROTOCOL_ID_INTERACTION_MODEL
# dispatch to IM Protocol Messages
- return self.im.process_incoming(frame, addr, port)
+ ret = self.im.process_incoming(frame)
+ # if `ret` is true, we have something to send
+ if ret
+ self.im.send_enqueued(self)
+
+ else
+ self.send_encrypted_ack(frame, true #-reliable-#)
+ end
+ ret = true
# -- PROTOCOL_ID_BDX is used for file transfer between devices, not used in Tasmota
# elif protocol_id == 0x0002 # PROTOCOL_ID_BDX -- BDX not handled at all in Tasmota
@@ -132,12 +196,11 @@ class Matter_MessageHandler
# return false # ignore for now TODO
else
tasmota.log("MTR: ignoring unhandled protocol_id:"+str(protocol_id), 3)
- return false
end
end
- return true
+ return ret
except .. as e, m
tasmota.log("MTR: MessageHandler::msg_received exception: "+str(e)+";"+str(m))
import debug
@@ -147,18 +210,18 @@ class Matter_MessageHandler
end
#############################################################
- def send_response(raw, addr, port, id)
- self.device.msg_send(raw, addr, port, id)
- end
-
- #############################################################
- def add_session(local_session_id, initiator_session_id, i2r, r2i, ac, session_timestamp)
- import string
- # create session object
- tasmota.log(string.format("MTR: add_session local_session_id=%i initiator_session_id=%i", local_session_id, initiator_session_id), 3)
-
- var session = self.device.sessions.create_session(local_session_id, initiator_session_id)
- session.set_keys(i2r, r2i, ac, session_timestamp)
+ # send a frame to target, usually a response
+ #
+ # We need the following:
+ # msg.raw: raw bytes to send (bytes)
+ # msg.remote_ip: ip address of target (string)
+ # msg.remote_port: port of target (int)
+ # msg.x_flag_r: is the frame expecting a Ack back (int)
+ # msg.message_counter: counter for this message (int)
+ # msg.exchange_id: exchange id (int)
+ # msg.local_session_id: local session (for logging)
+ def send_response_frame(msg)
+ self.device.msg_send(msg)
end
#############################################################
@@ -167,5 +230,12 @@ class Matter_MessageHandler
self.commissioning.every_second()
self.im.every_second()
end
+
+ #############################################################
+ # dispatch every 250ms click to sub-objects that need it
+ def every_250ms()
+ self.im.every_250ms()
+ end
+
end
matter.MessageHandler = Matter_MessageHandler
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Path.be b/lib/libesp32/berry_matter/src/embedded/Matter_Path.be
new file mode 100644
index 000000000..fe04be0aa
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Path.be
@@ -0,0 +1,53 @@
+#
+# Matter_IM_Path.be - suppport for Matter simple Path object
+#
+# Copyright (C) 2023 Stephan Hadinger & Theo Arends
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+
+import matter
+
+#@ solidify:Matter_Path,weak
+
+#################################################################################
+# Matter_Path
+#
+# Used to store all the elements of the reponse to an attribute or command
+#################################################################################
+class Matter_Path
+ var endpoint # endpoint or `nil` if expansion
+ var cluster # cluster or `nil` if expansion
+ var attribute # attribute or `nil` if expansion
+ var command # command
+ var status # status to be returned (matter.SUCCESS or matter.)
+ var log # any string that needs to be logged (used to show significant parameters for commands)
+
+ def tostring()
+ try
+ import string
+ var s = ""
+ s += (self.endpoint != nil ? string.format("[%02X]", self.endpoint) : "[**]")
+ s += (self.cluster != nil ? string.format("%04X/", self.cluster) : "****/")
+ s += (self.attribute != nil ? string.format("%04X", self.attribute) : "")
+ s += (self.command != nil ? string.format("%04X", self.command) : "")
+ if self.attribute == nil && self.command == nil s += "****" end
+ return s
+ except .. as e, m
+ return "Exception> " + str(e) + ", " + str(m)
+ end
+ end
+
+end
+matter.Path = Matter_Path
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin.be b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin.be
index d66ecbe92..60cfe112b 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin.be
@@ -23,27 +23,72 @@
#@ solidify:Matter_Plugin,weak
class Matter_Plugin
- static var EMPTY_LIST = []
- static var EMPTY_MAP = {}
+ static var CLUSTERS = {
+ 0x001D: [0,1,2,3,0xFFFC,0xFFFD], # Descriptor Cluster 9.5 p.453
+ }
var device # reference to the `device` global object
- var endpoints # list of supported endpoints
- var clusters # map from cluster to list of attributes
+ var endpoint # current endpoint
+ var clusters # map from cluster to list of attributes, typically constructed from CLUSTERS hierachy
+
+ #############################################################
+ # MVC Model
+ #
+ # Model linking the plugin to the Tasmota behavior
+ #############################################################
#############################################################
# Constructor
- def init(device)
+ #
+ def init(device, endpoint)
self.device = device
- self.endpoints = self.EMPTY_LIST
- self.clusters = self.EMPTY_LIST
+ self.endpoint = endpoint
+ self.clusters = self.consolidate_clusters()
+ end
+
+ #############################################################
+ # Stub for updating shadow values (local copies of what we published to the Matter gateway)
+ def update_shadow()
+ end
+
+ #############################################################
+ # signal that an attribute has been changed
+ #
+ # If `endpoint` is `nil`, send to all endpoints
+ def attribute_updated(endpoint, cluster, attribute, fabric_specific)
+ if endpoint == nil endpoint = self.endpoint end
+ self.device.attribute_updated(endpoint, cluster, attribute, fabric_specific)
+ end
+
+ #############################################################
+ # consolidate_clusters
+ #
+ # Build a consolidated map of all the `CLUSTERS` static vars
+ # from the inheritance hierarchy
+ def consolidate_clusters()
+ def real_super(o) return super(o) end # enclose `super()` in a static function to disable special behavior for super in instances
+ var ret = {}
+ var o = self # start with self
+ while o != nil # when we rich highest class, `super()` returns `nil`
+ var CL = o.CLUSTERS
+ for k: CL.keys()
+ # check if key already exists
+ if !ret.contains(k) ret[k] = [] end
+ for attr: CL[k] # iterate on values
+ if ret[k].find(attr) == nil
+ ret[k].push(attr)
+ end
+ end
+ end
+
+ o = real_super(o)
+ end
+ return ret
end
#############################################################
# Which endpoints does it handle (list of numbers)
- def get_endpoints()
- return self.endpoints
- end
- def get_cluster_map()
- return self.clusters
+ def get_endpoint()
+ return self.endpoint
end
def get_cluster_list(ep)
var ret = []
@@ -53,7 +98,7 @@ class Matter_Plugin
return ret
end
def get_attribute_list(ep, cluster)
- return self.clusters.find(cluster, self.EMPTY_LIST)
+ return self.clusters.find(cluster, [])
end
#############################################################
@@ -62,50 +107,114 @@ class Matter_Plugin
return self.clusters.contains(cluster) && self.endpoints.find(endpoint) != nil
end
+ #############################################################
+ # MVC Model
+ #
+ # View reading attributes
+ #############################################################
#############################################################
# read attribute
- def read_attribute(msg, ctx)
- return nil
+ def read_attribute(session, ctx)
+ var TLV = matter.TLV
+ var cluster = ctx.cluster
+ var attribute = ctx.attribute
+
+ if cluster == 0x001D # ========== Descriptor Cluster 9.5 p.453 ==========
+
+ if attribute == 0x0000 # ---------- DeviceTypeList / list[DeviceTypeStruct] ----------
+ var dtl = TLV.Matter_TLV_array()
+ for dt: self.TYPES.keys()
+ var d1 = dtl.add_struct()
+ d1.add_TLV(0, TLV.U2, dt) # DeviceType
+ d1.add_TLV(1, TLV.U2, self.TYPES[dt]) # Revision
+ end
+ return dtl
+ elif attribute == 0x0001 # ---------- ServerList / list[cluster-id] ----------
+ var sl = TLV.Matter_TLV_array()
+ for cl: self.get_cluster_list()
+ sl.add_TLV(nil, TLV.U4, cl)
+ end
+ return sl
+ elif attribute == 0x0002 # ---------- ClientList / list[cluster-id] ----------
+ var cl = TLV.Matter_TLV_array()
+ return cl
+ elif attribute == 0x0003 # ---------- PartsList / list[endpoint-no]----------
+ var pl = TLV.Matter_TLV_array()
+ return pl
+ elif attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
+ return TLV.create_TLV(TLV.U4, 0) #
+ elif attribute == 0xFFFD # ---------- ClusterRevision / u2 ----------
+ return TLV.create_TLV(TLV.U4, 1) # "Initial Release"
+ end
+
+ else
+ return nil
+ end
end
#############################################################
# read event
# TODO
- def read_event(msg, endpoint, cluster, eventid)
+ def read_event(session, endpoint, cluster, eventid)
return nil
end
#############################################################
# subscribe attribute
# TODO
- def subscribe_attribute(msg, endpoint, cluster, attribute)
+ def subscribe_attribute(session, endpoint, cluster, attribute)
return nil
end
#############################################################
# subscribe event
# TODO
- def subscribe_event(msg, endpoint, cluster, eventid)
+ def subscribe_event(session, endpoint, cluster, eventid)
return nil
end
+ #############################################################
+ # MVC Model
+ #
+ # Controller write attributes
+ #############################################################
#############################################################
# write attribute
- def write_attribute(msg, endpoint, cluster, attribute)
+ def write_attribute(session, ctx, write_data)
return nil
end
+ #############################################################
+ # MVC Model
+ #
+ # Controller invoke request
+ #############################################################
#############################################################
# invoke command
- def invoke_request(msg, val, ctx)
+ def invoke_request(session, val, ctx)
return nil
end
#############################################################
# timed request
# TODO - should we even support this?
- def timed_request(msg, val, ctx)
+ def timed_request(session, val, ctx)
return nil
end
+
+ #############################################################
+ # parse sensor
+ #
+ # The device calls regularly `tasmota.read_sensors()` and converts
+ # it to json.
+ def parse_sensors(payload)
+ end
+
+ #############################################################
+ # every_second
+ def every_second()
+ self.update_shadow() # force reading value and sending subscriptions
+ end
end
+
matter.Plugin = Matter_Plugin
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Device.be b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Device.be
new file mode 100644
index 000000000..864b536bf
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Device.be
@@ -0,0 +1,114 @@
+#
+# Matter_Plugin_Device.be - implements the behavior for a standard Device
+#
+# Copyright (C) 2023 Stephan Hadinger & Theo Arends
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+
+# dummy declaration for solidification
+class Matter_Plugin end
+
+#@ solidify:Matter_Plugin_Device,weak
+
+class Matter_Plugin_Device : Matter_Plugin
+ static var CLUSTERS = {
+ # 0x001D: inherited # Descriptor Cluster 9.5 p.453
+ 0x0003: [0,1,0xFFFC,0xFFFD], # Identify 1.2 p.16
+ 0x0004: [0,0xFFFC,0xFFFD], # Groups 1.3 p.21
+ }
+ static var TYPES = { 0x0000: 0 } # fake type
+
+ #############################################################
+ # Constructor
+ def init(device, endpoint, tasmota_relay_index)
+ super(self).init(device, endpoint)
+ end
+
+ #############################################################
+ # read an attribute
+ #
+ def read_attribute(session, ctx)
+ import string
+ var TLV = matter.TLV
+ var cluster = ctx.cluster
+ var attribute = ctx.attribute
+
+ # ====================================================================================================
+ if cluster == 0x0003 # ========== Identify 1.2 p.16 ==========
+ if attribute == 0x0000 # ---------- IdentifyTime / u2 ----------
+ return TLV.create_TLV(TLV.U2, 0) # no identification in progress
+ elif attribute == 0x0001 # ---------- IdentifyType / enum8 ----------
+ return TLV.create_TLV(TLV.U1, 0) # IdentifyType = 0x00 None
+ elif attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
+ return TLV.create_TLV(TLV.U4, 0) # no features
+ elif attribute == 0xFFFD # ---------- ClusterRevision / u2 ----------
+ return TLV.create_TLV(TLV.U4, 4) # "new data model format and notation"
+ end
+
+ # ====================================================================================================
+ elif cluster == 0x0004 # ========== Groups 1.3 p.21 ==========
+ if attribute == 0x0000 # ---------- ----------
+ return nil # TODO
+ elif attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
+ return TLV.create_TLV(TLV.U4, 0)#
+ elif attribute == 0xFFFD # ---------- ClusterRevision / u2 ----------
+ return TLV.create_TLV(TLV.U4, 4)# "new data model format and notation"
+ end
+
+ else
+ return super(self).read_attribute(session, ctx)
+ end
+ end
+
+ #############################################################
+ # Invoke a command
+ #
+ # returns a TLV object if successful, contains the response
+ # or an `int` to indicate a status
+ def invoke_request(session, val, ctx)
+ var TLV = matter.TLV
+ var cluster = ctx.cluster
+ var command = ctx.command
+
+ # ====================================================================================================
+ if cluster == 0x0003 # ========== Identify 1.2 p.16 ==========
+
+ if command == 0x0000 # ---------- Identify ----------
+ # ignore
+ return true
+ elif command == 0x0001 # ---------- IdentifyQuery ----------
+ # create IdentifyQueryResponse
+ # ID=1
+ # 0=Certificate (octstr)
+ var iqr = TLV.Matter_TLV_struct()
+ iqr.add_TLV(0, TLV.U2, 0) # Timeout
+ ctx.command = 0x00 # IdentifyQueryResponse
+ return iqr
+ elif command == 0x0040 # ---------- TriggerEffect ----------
+ # ignore
+ return true
+ end
+ # ====================================================================================================
+ elif cluster == 0x0004 # ========== Groups 1.3 p.21 ==========
+ # TODO
+ return true
+
+ else
+ return super(self).invoke_request(session, val, ctx)
+ end
+ end
+
+end
+matter.Plugin_Device = Matter_Plugin_Device
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Light0.be b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Light0.be
new file mode 100644
index 000000000..37d9dff38
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Light0.be
@@ -0,0 +1,166 @@
+#
+# Matter_Plugin_Light0.be - implements the behavior for a generic Lighting (OnOff only)
+#
+# Copyright (C) 2023 Stephan Hadinger & Theo Arends
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+
+# Matter plug-in for core behavior
+
+# dummy declaration for solidification
+class Matter_Plugin end
+
+#@ solidify:Matter_Plugin_Light0,weak
+
+class Matter_Plugin_Light0 : Matter_Plugin
+ static var CLUSTERS = {
+ # 0x001D: inherited # Descriptor Cluster 9.5 p.453
+ 0x0003: [0,1,0xFFFC,0xFFFD], # Identify 1.2 p.16
+ 0x0004: [0,0xFFFC,0xFFFD], # Groups 1.3 p.21
+ 0x0005: [0,1,2,3,4,5,0xFFFC,0xFFFD], # Scenes 1.4 p.30 - no writable
+ 0x0006: [0,0xFFFC,0xFFFD], # On/Off 1.5 p.48
+ }
+ static var TYPES = { 0x0100: 2 } # OnOff Light, but not actually used because Relay is managed by OnOff
+
+ var shadow_onoff
+
+ #############################################################
+ # Constructor
+ def init(device, endpoint)
+ super(self).init(device, endpoint)
+ self.shadow_onoff = false
+ end
+
+ #############################################################
+ # Update shadow
+ #
+ def update_shadow()
+ import light
+ var light_status = light.get()
+ var pow = light_status.find('power', nil)
+ if pow != self.shadow_onoff self.attribute_updated(nil, 0x0006, 0x0000) self.shadow_onoff = pow end
+ end
+
+ #############################################################
+ # read an attribute
+ #
+ def read_attribute(session, ctx)
+ import string
+ var TLV = matter.TLV
+ var cluster = ctx.cluster
+ var attribute = ctx.attribute
+
+ # ====================================================================================================
+ if cluster == 0x0003 # ========== Identify 1.2 p.16 ==========
+ if attribute == 0x0000 # ---------- IdentifyTime / u2 ----------
+ return TLV.create_TLV(TLV.U2, 0) # no identification in progress
+ elif attribute == 0x0001 # ---------- IdentifyType / enum8 ----------
+ return TLV.create_TLV(TLV.U1, 0) # IdentifyType = 0x00 None
+ elif attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
+ return TLV.create_TLV(TLV.U4, 0) # no features
+ elif attribute == 0xFFFD # ---------- ClusterRevision / u2 ----------
+ return TLV.create_TLV(TLV.U4, 4) # "new data model format and notation"
+ end
+
+ # ====================================================================================================
+ elif cluster == 0x0004 # ========== Groups 1.3 p.21 ==========
+ if attribute == 0x0000 # ---------- ----------
+ return nil # TODO
+ elif attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
+ return TLV.create_TLV(TLV.U4, 0)#
+ elif attribute == 0xFFFD # ---------- ClusterRevision / u2 ----------
+ return TLV.create_TLV(TLV.U4, 4)# "new data model format and notation"
+ end
+
+ # ====================================================================================================
+ elif cluster == 0x0005 # ========== Scenes 1.4 p.30 - no writable ==========
+ if attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
+ return TLV.create_TLV(TLV.U4, 0) # 0 = no Level Control for Lighting
+ elif attribute == 0xFFFD # ---------- ClusterRevision / u2 ----------
+ return TLV.create_TLV(TLV.U4, 4) # 0 = no Level Control for Lighting
+ end
+
+ # ====================================================================================================
+ elif cluster == 0x0006 # ========== On/Off 1.5 p.48 ==========
+ if attribute == 0x0000 # ---------- OnOff / bool ----------
+ return TLV.create_TLV(TLV.BOOL, self.shadow_onoff)
+ elif attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
+ return TLV.create_TLV(TLV.U4, 0) # 0 = no Level Control for Lighting
+ elif attribute == 0xFFFD # ---------- ClusterRevision / u2 ----------
+ return TLV.create_TLV(TLV.U4, 4) # 0 = no Level Control for Lighting
+ end
+
+ else
+ return super(self).read_attribute(session, ctx)
+ end
+ end
+
+ #############################################################
+ # Invoke a command
+ #
+ # returns a TLV object if successful, contains the response
+ # or an `int` to indicate a status
+ def invoke_request(session, val, ctx)
+ import light
+ var TLV = matter.TLV
+ var cluster = ctx.cluster
+ var command = ctx.command
+
+ # ====================================================================================================
+ if cluster == 0x0003 # ========== Identify 1.2 p.16 ==========
+
+ if command == 0x0000 # ---------- Identify ----------
+ # ignore
+ return true
+ elif command == 0x0001 # ---------- IdentifyQuery ----------
+ # create IdentifyQueryResponse
+ # ID=1
+ # 0=Certificate (octstr)
+ var iqr = TLV.Matter_TLV_struct()
+ iqr.add_TLV(0, TLV.U2, 0) # Timeout
+ ctx.command = 0x00 # IdentifyQueryResponse
+ return iqr
+ elif command == 0x0040 # ---------- TriggerEffect ----------
+ # ignore
+ return true
+ end
+ # ====================================================================================================
+ elif cluster == 0x0004 # ========== Groups 1.3 p.21 ==========
+ # TODO
+ return true
+ # ====================================================================================================
+ elif cluster == 0x0005 # ========== Scenes 1.4 p.30 ==========
+ # TODO
+ return true
+ # ====================================================================================================
+ elif cluster == 0x0006 # ========== On/Off 1.5 p.48 ==========
+ if command == 0x0000 # ---------- Off ----------
+ light.set({'power':false})
+ self.update_shadow()
+ return true
+ elif command == 0x0001 # ---------- On ----------
+ light.set({'power':true})
+ self.update_shadow()
+ return true
+ elif command == 0x0002 # ---------- Toggle ----------
+ light.set({'power':!self.shadow_onoff})
+ self.update_shadow()
+ return true
+ end
+ end
+ end
+
+end
+matter.Plugin_Light0 = Matter_Plugin_Light0
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Light1.be b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Light1.be
new file mode 100644
index 000000000..b917efb01
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Light1.be
@@ -0,0 +1,146 @@
+#
+# Matter_Plugin_Light1.be - implements the behavior for a Light with 1 channel (Dimmer)
+#
+# Copyright (C) 2023 Stephan Hadinger & Theo Arends
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+
+# Matter plug-in for core behavior
+
+# dummy declaration for solidification
+class Matter_Plugin_Light0 end
+
+#@ solidify:Matter_Plugin_Light1,weak
+
+class Matter_Plugin_Light1 : Matter_Plugin_Light0
+ static var CLUSTERS = {
+ # 0x001D: inherited # Descriptor Cluster 9.5 p.453
+ # 0x0003: inherited # Identify 1.2 p.16
+ # 0x0004: inherited # Groups 1.3 p.21
+ # 0x0005: inherited # Scenes 1.4 p.30 - no writable
+ # 0x0006: inherited # On/Off 1.5 p.48
+ 0x0008: [0,2,3,0x0F,0x11,0xFFFC,0xFFFD], # Level Control 1.6 p.57
+ }
+ static var TYPES = { 0x0101: 2 } # Dimmable Light
+
+ var shadow_bri
+ # var shadow_onoff # inherited
+
+ #############################################################
+ # Constructor
+ def init(device, endpoint)
+ super(self).init(device, endpoint)
+ self.shadow_bri = 0
+ end
+
+ #############################################################
+ # Update shadow
+ #
+ def update_shadow()
+ import light
+ var light_status = light.get()
+ var bri = light_status.find('bri', nil)
+ if bri != nil bri = tasmota.scale_uint(bri, 0, 255, 0, 254) else bri = self.shadow_bri end
+ if bri != self.shadow_bri self.attribute_updated(nil, 0x0008, 0x0000) self.shadow_bri = bri end
+ super(self).update_shadow() # superclass manages 'power'
+ end
+
+ #############################################################
+ # read an attribute
+ #
+ def read_attribute(session, ctx)
+ import string
+ var TLV = matter.TLV
+ var cluster = ctx.cluster
+ var attribute = ctx.attribute
+
+ # ====================================================================================================
+ if cluster == 0x0008 # ========== Level Control 1.6 p.57 ==========
+ if attribute == 0x0000 # ---------- CurrentLevel / u1 ----------
+ return TLV.create_TLV(TLV.U1, self.shadow_bri)
+ elif attribute == 0x0002 # ---------- MinLevel / u1 ----------
+ return TLV.create_TLV(TLV.U1, 0)
+ elif attribute == 0x0003 # ---------- MaxLevel / u1 ----------
+ return TLV.create_TLV(TLV.U1, 254)
+ elif attribute == 0x000F # ---------- Options / map8 ----------
+ return TLV.create_TLV(TLV.U1, 0) #
+ elif attribute == 0x0011 # ---------- OnLevel / u1 ----------
+ return TLV.create_TLV(TLV.U1, self.shadow_bri)
+ elif attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
+ return TLV.create_TLV(TLV.U4, 0X01) # OnOff
+ elif attribute == 0xFFFD # ---------- ClusterRevision / u2 ----------
+ return TLV.create_TLV(TLV.U4, 5) # "new data model format and notation"
+ end
+
+ else
+ return super(self).read_attribute(session, ctx)
+ end
+ end
+
+ #############################################################
+ # Invoke a command
+ #
+ # returns a TLV object if successful, contains the response
+ # or an `int` to indicate a status
+ def invoke_request(session, val, ctx)
+ import light
+ var TLV = matter.TLV
+ var cluster = ctx.cluster
+ var command = ctx.command
+
+ # ====================================================================================================
+ if cluster == 0x0008 # ========== Level Control 1.6 p.57 ==========
+ if command == 0x0000 # ---------- MoveToLevel ----------
+ var bri_in = val.findsubval(0) # Hue 0..254
+ var bri = tasmota.scale_uint(bri_in, 0, 254, 0, 255)
+ light.set({'bri': bri})
+ self.update_shadow()
+ ctx.log = "bri:"+str(bri_in)
+ return true
+ elif command == 0x0001 # ---------- Move ----------
+ # TODO, we don't really support it
+ return true
+ elif command == 0x0002 # ---------- Step ----------
+ # TODO, we don't really support it
+ return true
+ elif command == 0x0003 # ---------- Stop ----------
+ # TODO, we don't really support it
+ return true
+ elif command == 0x0004 # ---------- MoveToLevelWithOnOff ----------
+ var bri_in = val.findsubval(0) # Hue 0..254
+ var bri = tasmota.scale_uint(bri_in, 0, 254, 0, 255)
+ var onoff = bri > 0
+ light.set({'bri': bri, 'power': onoff})
+ self.update_shadow()
+ ctx.log = "bri:"+str(bri_in)
+ return true
+ elif command == 0x0005 # ---------- MoveWithOnOff ----------
+ # TODO, we don't really support it
+ return true
+ elif command == 0x0006 # ---------- StepWithOnOff ----------
+ # TODO, we don't really support it
+ return true
+ elif command == 0x0007 # ---------- StopWithOnOff ----------
+ # TODO, we don't really support it
+ return true
+ end
+
+ else
+ return super(self).invoke_request(session, val, ctx)
+ end
+ end
+
+end
+matter.Plugin_Light1 = Matter_Plugin_Light1
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Light2.be b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Light2.be
new file mode 100644
index 000000000..aa2f38207
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Light2.be
@@ -0,0 +1,144 @@
+#
+# Matter_Plugin_Light2.be - implements the behavior for a Light with 2 channel (CT)
+#
+# Copyright (C) 2023 Stephan Hadinger & Theo Arends
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+
+# Matter plug-in for core behavior
+
+# dummy declaration for solidification
+class Matter_Plugin_Light1 end
+
+#@ solidify:Matter_Plugin_Light2,weak
+
+class Matter_Plugin_Light2 : Matter_Plugin_Light1
+ static var CLUSTERS = {
+ # 0x001D: inherited # Descriptor Cluster 9.5 p.453
+ # 0x0003: inherited # Identify 1.2 p.16
+ # 0x0004: inherited # Groups 1.3 p.21
+ # 0x0005: inherited # Scenes 1.4 p.30 - no writable
+ # 0x0006: inherited # On/Off 1.5 p.48
+ # 0x0008: inherited # Level Control 1.6 p.57
+ 0x0300: [7,8,0xF,0x400B,0x400C,0xFFFC,0xFFFD], # Color Control 3.2 p.111
+ }
+ static var TYPES = { 0x010C: 2 } # Color Temperature Light
+
+ var shadow_ct
+ var ct_min, ct_max
+
+ #############################################################
+ # Constructor
+ def init(device, endpoint)
+ super(self).init(device, endpoint)
+ self.shadow_ct = 325
+ self.update_ct_minmax()
+ end
+
+ #############################################################
+ # Update shadow
+ #
+ def update_shadow()
+ import light
+ self.update_ct_minmax()
+ super(self).update_shadow()
+ var light_status = light.get()
+ var ct = light_status.find('ct', nil)
+ if ct == nil ct = self.shadow_ct end
+ if ct != self.shadow_ct self.attribute_updated(nil, 0x0300, 0x0007) self.shadow_ct = ct end
+ end
+
+ #############################################################
+ # Update ct_min/max
+ #
+ def update_ct_minmax()
+ var ct_alexa_mode = tasmota.get_option(82) # if set, range is 200..380 instead of 153...500
+ self.ct_min = ct_alexa_mode ? 200 : 153
+ self.ct_max = ct_alexa_mode ? 380 : 500
+ end
+
+ #############################################################
+ # read an attribute
+ #
+ def read_attribute(session, ctx)
+ import string
+ var TLV = matter.TLV
+ var cluster = ctx.cluster
+ var attribute = ctx.attribute
+
+ # ====================================================================================================
+ if cluster == 0x0300 # ========== Color Control 3.2 p.111 ==========
+ if attribute == 0x0007 # ---------- ColorTemperatureMireds / u2 ----------
+ return TLV.create_TLV(TLV.U1, self.shadow_ct)
+ elif attribute == 0x0008 # ---------- ColorMode / u1 ----------
+ return TLV.create_TLV(TLV.U1, 2)# 2 = ColorTemperatureMireds
+ elif attribute == 0x000F # ---------- Options / u1 ----------
+ return TLV.create_TLV(TLV.U1, 0)
+ elif attribute == 0x400B # ---------- ColorTempPhysicalMinMireds / u2 ----------
+ return TLV.create_TLV(TLV.U1, self.ct_min)
+ elif attribute == 0x400C # ---------- ColorTempPhysicalMaxMireds / u2 ----------
+ return TLV.create_TLV(TLV.U1, self.ct_max)
+
+ elif attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
+ return TLV.create_TLV(TLV.U4, 0x10) # CT
+ elif attribute == 0xFFFD # ---------- ClusterRevision / u2 ----------
+ return TLV.create_TLV(TLV.U4, 5) # "new data model format and notation, FeatureMap support"
+ end
+
+ else
+ return super(self).read_attribute(session, ctx)
+ end
+ end
+
+ #############################################################
+ # Invoke a command
+ #
+ # returns a TLV object if successful, contains the response
+ # or an `int` to indicate a status
+ def invoke_request(session, val, ctx)
+ import light
+ var TLV = matter.TLV
+ var cluster = ctx.cluster
+ var command = ctx.command
+
+ # ====================================================================================================
+ if cluster == 0x0300 # ========== Color Control 3.2 p.111 ==========
+ if command == 0x000A # ---------- MoveToColorTemperature ----------
+ var ct_in = val.findsubval(0) # CT
+ if ct_in < self.ct_min ct_in = self.ct_min end
+ if ct_in > self.ct_max ct_in = self.ct_max end
+ light.set({'ct': ct_in})
+ self.update_shadow()
+ ctx.log = "ct:"+str(ct_in)
+ return true
+ elif command == 0x0047 # ---------- StopMoveStep ----------
+ # TODO, we don't really support it
+ return true
+ elif command == 0x004B # ---------- MoveColorTemperature ----------
+ # TODO, we don't really support it
+ return true
+ elif command == 0x004C # ---------- StepColorTemperature ----------
+ # TODO, we don't really support it
+ return true
+ end
+
+ else
+ return super(self).invoke_request(session, val, ctx)
+ end
+
+ end
+
+end
+matter.Plugin_Light2 = Matter_Plugin_Light2
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Light3.be b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Light3.be
new file mode 100644
index 000000000..7d797b29a
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Light3.be
@@ -0,0 +1,165 @@
+#
+# Matter_Plugin_Light3.be - implements the behavior for a Light with 3 channels (RGB)
+#
+# Copyright (C) 2023 Stephan Hadinger & Theo Arends
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+
+# Matter plug-in for core behavior
+
+# dummy declaration for solidification
+class Matter_Plugin_Light1 end
+
+#@ solidify:Matter_Plugin_Light3,weak
+
+class Matter_Plugin_Light3 : Matter_Plugin_Light1
+ static var CLUSTERS = {
+ # 0x001D: inherited # Descriptor Cluster 9.5 p.453
+ # 0x0003: inherited # Identify 1.2 p.16
+ # 0x0004: inherited # Groups 1.3 p.21
+ # 0x0005: inherited # Scenes 1.4 p.30 - no writable
+ # 0x0006: inherited # On/Off 1.5 p.48
+ # 0x0008: inherited # Level Control 1.6 p.57
+ 0x0300: [0,1,7,8,0xF,0x4001,0x400A,0xFFFC,0xFFFD],# Color Control 3.2 p.111
+ }
+ static var TYPES = { 0x010D: 2 } # Extended Color Light
+
+ var shadow_hue, shadow_sat
+
+ #############################################################
+ # Constructor
+ def init(device, endpoint)
+ super(self).init(device, endpoint)
+ self.shadow_hue = 0
+ self.shadow_sat = 0
+ end
+
+ #############################################################
+ # Update shadow
+ #
+ def update_shadow()
+ import light
+ super(self).update_shadow()
+ var light_status = light.get()
+ var hue = light_status.find('hue', nil)
+ var sat = light_status.find('sat', nil)
+ if hue != nil hue = tasmota.scale_uint(hue, 0, 360, 0, 254) else hue = self.shadow_hue end
+ if sat != nil sat = tasmota.scale_uint(sat, 0, 255, 0, 254) else sat = self.shadow_sat end
+ if hue != self.shadow_hue self.attribute_updated(nil, 0x0300, 0x0000) self.shadow_hue = hue end
+ if sat != self.shadow_sat self.attribute_updated(nil, 0x0300, 0x0001) self.shadow_sat = sat end
+ end
+
+ #############################################################
+ # read an attribute
+ #
+ def read_attribute(session, ctx)
+ import string
+ var TLV = matter.TLV
+ var cluster = ctx.cluster
+ var attribute = ctx.attribute
+
+ # ====================================================================================================
+ if cluster == 0x0300 # ========== Color Control 3.2 p.111 ==========
+ if attribute == 0x0000 # ---------- CurrentHue / u1 ----------
+ return TLV.create_TLV(TLV.U1, self.shadow_hue)
+ elif attribute == 0x0001 # ---------- CurrentSaturation / u2 ----------
+ return TLV.create_TLV(TLV.U1, self.shadow_sat)
+ elif attribute == 0x0007 # ---------- ColorTemperatureMireds / u2 ----------
+ return TLV.create_TLV(TLV.U1, 0)
+ elif attribute == 0x0008 # ---------- ColorMode / u1 ----------
+ return TLV.create_TLV(TLV.U1, 0)# 0 = CurrentHue and CurrentSaturation
+ elif attribute == 0x000F # ---------- Options / u1 ----------
+ return TLV.create_TLV(TLV.U1, 0)
+ elif attribute == 0x4001 # ---------- EnhancedColorMode / u1 ----------
+ return TLV.create_TLV(TLV.U1, 0)
+ elif attribute == 0x400A # ---------- ColorCapabilities / map2 ----------
+ return TLV.create_TLV(TLV.U1, 0)
+
+ # Defined Primaries Information Attribute Set
+ elif attribute == 0x0010 # ---------- NumberOfPrimaries / u1 ----------
+ return TLV.create_TLV(TLV.U1, 0)
+
+ elif attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
+ return TLV.create_TLV(TLV.U4, 0x01) # HS
+ elif attribute == 0xFFFD # ---------- ClusterRevision / u2 ----------
+ return TLV.create_TLV(TLV.U4, 5) # "new data model format and notation, FeatureMap support"
+ end
+
+ else
+ return super(self).read_attribute(session, ctx)
+ end
+ end
+
+ #############################################################
+ # Invoke a command
+ #
+ # returns a TLV object if successful, contains the response
+ # or an `int` to indicate a status
+ def invoke_request(session, val, ctx)
+ import light
+ var TLV = matter.TLV
+ var cluster = ctx.cluster
+ var command = ctx.command
+
+ # ====================================================================================================
+ if cluster == 0x0300 # ========== Color Control 3.2 p.111 ==========
+ if command == 0x0000 # ---------- MoveToHue ----------
+ var hue_in = val.findsubval(0) # Hue 0..254
+ var hue = tasmota.scale_uint(hue_in, 0, 254, 0, 360)
+ light.set({'hue': hue})
+ self.update_shadow()
+ ctx.log = "hue:"+str(hue_in)
+ return true
+ elif command == 0x0001 # ---------- MoveHue ----------
+ # TODO, we don't really support it
+ return true
+ elif command == 0x0002 # ---------- StepHue ----------
+ # TODO, we don't really support it
+ return true
+ elif command == 0x0003 # ---------- MoveToSaturation ----------
+ var sat_in = val.findsubval(0) # Sat 0..254
+ var sat = tasmota.scale_uint(sat_in, 0, 254, 0, 255)
+ light.set({'sat': sat})
+ self.update_shadow()
+ ctx.log = "sat:"+str(sat_in)
+ return true
+ elif command == 0x0004 # ---------- MoveSaturation ----------
+ # TODO, we don't really support it
+ return true
+ elif command == 0x0005 # ---------- StepSaturation ----------
+ # TODO, we don't really support it
+ return true
+ elif command == 0x0006 # ---------- MoveToHueAndSaturation ----------
+ var hue_in = val.findsubval(0) # Hue 0..254
+ var hue = tasmota.scale_uint(hue_in, 0, 254, 0, 360)
+ var sat_in = val.findsubval(1) # Sat 0..254
+ var sat = tasmota.scale_uint(sat_in, 0, 254, 0, 255)
+ light.set({'hue': hue, 'sat': sat})
+ self.update_shadow()
+ ctx.log = "hue:"+str(hue_in)+" sat:"+str(sat_in)
+ return true
+ elif command == 0x0047 # ---------- StopMoveStep ----------
+ # TODO, we don't really support it
+ return true
+ end
+
+ else
+ return super(self).invoke_request(session, val, ctx)
+ end
+
+ end
+
+end
+matter.Plugin_Light3 = Matter_Plugin_Light3
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_OnOff.be b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_OnOff.be
new file mode 100644
index 000000000..a62d4fe39
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_OnOff.be
@@ -0,0 +1,223 @@
+#
+# Matter_Plugin_OnOff.be - implements the behavior for a Relay (OnOff)
+#
+# Copyright (C) 2023 Stephan Hadinger & Theo Arends
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+
+# Matter plug-in for core behavior
+
+# dummy declaration for solidification
+class Matter_Plugin end
+
+#@ solidify:Matter_Plugin_OnOff,weak
+
+class Matter_Plugin_OnOff : Matter_Plugin
+ static var CLUSTERS = {
+ # 0x001D: inherited # Descriptor Cluster 9.5 p.453
+ 0x0003: [0,1,0xFFFC,0xFFFD], # Identify 1.2 p.16
+ 0x0004: [0,0xFFFC,0xFFFD], # Groups 1.3 p.21
+ 0x0005: [0,1,2,3,4,5,0xFFFC,0xFFFD], # Scenes 1.4 p.30 - no writable
+ 0x0006: [0,0xFFFC,0xFFFD], # On/Off 1.5 p.48
+ # 0x0008: [0,15,17,0xFFFC,0xFFFD] # Level Control 1.6 p.57
+ }
+ static var TYPES = { 0x010A: 2 } # On/Off Light
+
+ var tasmota_relay_index # Relay number in Tasmota (zero based)
+ var shadow_onoff # fake status for now # TODO
+
+ #############################################################
+ # Constructor
+ def init(device, endpoint, tasmota_relay_index)
+ super(self).init(device, endpoint)
+ self.get_onoff() # read actual value
+ if tasmota_relay_index == nil tasmota_relay_index = 0 end
+ self.tasmota_relay_index = tasmota_relay_index
+ end
+
+ #############################################################
+ # Model
+ #
+ def set_onoff(v)
+ tasmota.set_power(self.tasmota_relay_index, bool(v))
+ self.get_onoff()
+ end
+ #############################################################
+ # get_onoff
+ #
+ # Update shadow and signal any change
+ def get_onoff()
+ var state = tasmota.get_power(self.tasmota_relay_index)
+ if state != nil
+ if self.shadow_onoff != nil && self.shadow_onoff != bool(state)
+ self.onoff_changed() # signal any change
+ end
+ self.shadow_onoff = state
+ end
+ if self.shadow_onoff == nil self.shadow_onoff = false end # avoid any `nil` value when initializing
+ return self.shadow_onoff
+ end
+
+ #############################################################
+ # read an attribute
+ #
+ def read_attribute(session, ctx)
+ import string
+ var TLV = matter.TLV
+ var cluster = ctx.cluster
+ var attribute = ctx.attribute
+
+ # ====================================================================================================
+ if cluster == 0x0003 # ========== Identify 1.2 p.16 ==========
+ if attribute == 0x0000 # ---------- IdentifyTime / u2 ----------
+ return TLV.create_TLV(TLV.U2, 0) # no identification in progress
+ elif attribute == 0x0001 # ---------- IdentifyType / enum8 ----------
+ return TLV.create_TLV(TLV.U1, 0) # IdentifyType = 0x00 None
+ elif attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
+ return TLV.create_TLV(TLV.U4, 0) # no features
+ elif attribute == 0xFFFD # ---------- ClusterRevision / u2 ----------
+ return TLV.create_TLV(TLV.U4, 4) # "new data model format and notation"
+ end
+
+ # ====================================================================================================
+ elif cluster == 0x0004 # ========== Groups 1.3 p.21 ==========
+ if attribute == 0x0000 # ---------- ----------
+ return nil # TODO
+ elif attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
+ return TLV.create_TLV(TLV.U4, 0)#
+ elif attribute == 0xFFFD # ---------- ClusterRevision / u2 ----------
+ return TLV.create_TLV(TLV.U4, 4)# "new data model format and notation"
+ end
+
+ # ====================================================================================================
+ elif cluster == 0x0005 # ========== Scenes 1.4 p.30 - no writable ==========
+ if attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
+ return TLV.create_TLV(TLV.U4, 0) # 0 = no Level Control for Lighting
+ elif attribute == 0xFFFD # ---------- ClusterRevision / u2 ----------
+ return TLV.create_TLV(TLV.U4, 4) # 0 = no Level Control for Lighting
+ end
+
+ # ====================================================================================================
+ elif cluster == 0x0006 # ========== On/Off 1.5 p.48 ==========
+ if attribute == 0x0000 # ---------- OnOff / bool ----------
+ return TLV.create_TLV(TLV.BOOL, self.get_onoff())
+ elif attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
+ return TLV.create_TLV(TLV.U4, 0) # 0 = no Level Control for Lighting
+ elif attribute == 0xFFFD # ---------- ClusterRevision / u2 ----------
+ return TLV.create_TLV(TLV.U4, 4) # 0 = no Level Control for Lighting
+ end
+
+ # ====================================================================================================
+ elif cluster == 0x0008 # ========== Level Control 1.6 p.57 ==========
+ if attribute == 0x0000 # ---------- CurrentLevel / u1 ----------
+ return TLV.create_TLV(TLV.U1, 0x88)
+ elif attribute == 0x000F # ---------- Options / map8 ----------
+ return TLV.create_TLV(TLV.U1, 0) # 0 = no Level Control for Lighting
+ elif attribute == 0x0010 # ---------- OnLevel / u1 ----------
+ return TLV.create_TLV(TLV.U1, 1) # 0 = no Level Control for Lighting
+ elif attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
+ return TLV.create_TLV(TLV.U4, 0) # 0 = no Level Control for Lighting
+ elif attribute == 0xFFFD # ---------- ClusterRevision / u2 ----------
+ return TLV.create_TLV(TLV.U4, 4) # 0 = no Level Control for Lighting
+ end
+
+ else
+ return super(self).read_attribute(session, ctx)
+ end
+ end
+
+ #############################################################
+ # Invoke a command
+ #
+ # returns a TLV object if successful, contains the response
+ # or an `int` to indicate a status
+ def invoke_request(session, val, ctx)
+ var TLV = matter.TLV
+ var cluster = ctx.cluster
+ var command = ctx.command
+
+ # ====================================================================================================
+ if cluster == 0x0003 # ========== Identify 1.2 p.16 ==========
+
+ if command == 0x0000 # ---------- Identify ----------
+ # ignore
+ return true
+ elif command == 0x0001 # ---------- IdentifyQuery ----------
+ # create IdentifyQueryResponse
+ # ID=1
+ # 0=Certificate (octstr)
+ var iqr = TLV.Matter_TLV_struct()
+ iqr.add_TLV(0, TLV.U2, 0) # Timeout
+ ctx.command = 0x00 # IdentifyQueryResponse
+ return iqr
+ elif command == 0x0040 # ---------- TriggerEffect ----------
+ # ignore
+ return true
+ end
+ # ====================================================================================================
+ elif cluster == 0x0004 # ========== Groups 1.3 p.21 ==========
+ # TODO
+ return true
+ # ====================================================================================================
+ elif cluster == 0x0005 # ========== Scenes 1.4 p.30 ==========
+ # TODO
+ return true
+ # ====================================================================================================
+ elif cluster == 0x0006 # ========== On/Off 1.5 p.48 ==========
+ if command == 0x0000 # ---------- Off ----------
+ self.set_onoff(false)
+ return true
+ elif command == 0x0001 # ---------- On ----------
+ self.set_onoff(true)
+ return true
+ elif command == 0x0002 # ---------- Toggle ----------
+ self.set_onoff(!self.get_onoff())
+ return true
+ end
+ # ====================================================================================================
+ elif cluster == 0x0008 # ========== Level Control 1.6 p.57 ==========
+ if command == 0x0000 # ---------- MoveToLevel ----------
+ return true
+ elif command == 0x0001 # ---------- Move ----------
+ return true
+ elif command == 0x0002 # ---------- Step ----------
+ return true
+ elif command == 0x0003 # ---------- Stop ----------
+ return true
+ elif command == 0x0004 # ---------- MoveToLevelWithOnOff ----------
+ return true
+ elif command == 0x0005 # ---------- MoveWithOnOff ----------
+ return true
+ elif command == 0x0006 # ---------- StepWithOnOff ----------
+ return true
+ elif command == 0x0007 # ---------- StopWithOnOff ----------
+ return true
+ end
+ end
+ end
+
+ #############################################################
+ # Signal that onoff attribute changed
+ def onoff_changed()
+ self.attribute_updated(nil, 0x0006, 0x0000) # send to all endpoints
+ end
+
+ #############################################################
+ # every_second
+ def every_second()
+ self.get_onoff() # force reading value and sending subscriptions
+ end
+end
+matter.Plugin_OnOff = Matter_Plugin_OnOff
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Relay.be b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Relay.be
deleted file mode 100644
index 8721cca93..000000000
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Relay.be
+++ /dev/null
@@ -1,93 +0,0 @@
-#
-# Matter_Plugin_Relay.be - implements the behavior for a Relay (OnOff)
-#
-# Copyright (C) 2023 Stephan Hadinger & Theo Arends
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
-#
-
-# Matter plug-in for core behavior
-
-# dummy declaration for solidification
-class Matter_Plugin end
-
-#@ solidify:Matter_Plugin_Relay,weak
-
-class Matter_Plugin_Relay : Matter_Plugin
- static var ENDPOINTS = [ 1 ]
- static var CLUSTERS = {
- 0x001D: [0,1,2,3],
- 0x0003: [],
- 0x0004: [],
- 0x0005: [],
- 0x0006: [0],
- 0x0008: [],
-# 0x0406: []
- }
- static var TYPES = [ 0x0100 ] # On/Off Light
-
- #############################################################
- # Constructor
- def init(device)
- super(self).init(device)
- self.endpoints = self.ENDPOINTS
- self.clusters = self.CLUSTERS
- end
-
- #############################################################
- # read an attribute
- #
- def read_attribute(msg, ctx)
- import string
- var TLV = matter.TLV
- var cluster = ctx.cluster
- var attribute = ctx.attribute
-
- if cluster == 0x001D # ========== Descriptor Cluster 9.5 p.453 ==========
-
- if attribute == 0x0000 # ---------- DeviceTypeList / list[DeviceTypeStruct] ----------
- var dtl = TLV.Matter_TLV_array()
- var d1 = dtl.add_struct()
- d1.add_TLV(0, TLV.U2, self.TYPES[0]) # DeviceType
- d1.add_TLV(1, TLV.U2, 1) # Revision
- return dtl
- elif attribute == 0x0001 # ---------- ServerList / list[cluster-id] ----------
- var sl = TLV.Matter_TLV_array()
- for cl: self.get_cluster_list()
- sl.add_TLV(nil, TLV.U4, cl)
- end
- return sl
- elif attribute == 0x0002 # ---------- ClientList / list[cluster-id] ----------
- var cl = TLV.Matter_TLV_array()
- cl.add_TLV(nil, TLV.U2, 0x0006)
- return cl
- elif attribute == 0x0003 # ---------- PartsList / list[endpoint-no]----------
- var pl = TLV.Matter_TLV_array()
- return pl
- end
- end
- # no match found, return that the attribute is unsupported end
- end
-
- #############################################################
- # Invoke a command
- #
- # returns a TLV object if successful, contains the response
- # or an `int` to indicate a status
- def invoke_request(msg, val, ctx)
- # no match found, return that the command is unsupported
- end
-end
-matter.Plugin_core = Matter_Plugin_core
-
\ No newline at end of file
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_core.be b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Root.be
similarity index 56%
rename from lib/libesp32/berry_matter/src/embedded/Matter_Plugin_core.be
rename to lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Root.be
index 4c8929cff..a387ab70f 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_core.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Root.be
@@ -1,5 +1,5 @@
#
-# Matter_Plugin_core.be - implements the core features that a Matter device must implemment
+# Matter_Plugin_Root.be - implements the core features that a Matter device must implemment
#
# Copyright (C) 2023 Stephan Hadinger & Theo Arends
#
@@ -17,43 +17,43 @@
# along with this program. If not, see .
#
-# Matter plug-in for core behavior
+# Matter plug-in for root behavior
# dummy declaration for solidification
class Matter_Plugin end
-#@ solidify:Matter_Plugin_core,weak
+#@ solidify:Matter_Plugin_Root,weak
-class Matter_Plugin_core : Matter_Plugin
- static var ENDPOINTS = [ 0 ]
+class Matter_Plugin_Root : Matter_Plugin
static var CLUSTERS = {
- 0x001D: [0,1,2,3],
- 0x0028: [0,1,2,3,4,5,6,7,8,9],
- 0x002B: [0,1],
- 0x002C: [0,1,2],
- 0x0030: [0,1,2,3,4],
- 0x0031: [3,0xFFFC],
- 0x0032: [],
- 0x0033: [0,1,2,8],
- 0x0034: [],
- 0x0038: [0,1,7],
- 0x003E: [0,1,2,3,4,5],
- 0x003C: [],
- 0x003F: []
+ # 0x001D: inherited # Descriptor Cluster 9.5 p.453
+ 0x001F: [0,2,3,4], # Access Control Cluster, p.461
+ 0x0028: [0,1,2,3,4,5,6,7,8,9,0x0A,0x0F,0x12,0x13],# Basic Information Cluster cluster 11.1 p.565
+ # 0x002A: [0,1,2,3], # OTA Software Update Requestor Cluster Definition 11.19.7 p.762
+ 0x002B: [0,1], # Localization Configuration Cluster 11.3 p.580
+ 0x002C: [0,1,2], # Time Format Localization Cluster 11.4 p.581
+ 0x0030: [0,1,2,3,4], # GeneralCommissioning cluster 11.9 p.627
+ 0x0031: [3,4,0xFFFC], # Network Commissioning Cluster cluster 11.8 p.606
+ 0x0032: [], # Diagnostic Logs Cluster 11.10 p.637
+ 0x0033: [0,1,2,8], # General Diagnostics Cluster 11.11 p.642
+ 0x0034: [], # Software Diagnostics Cluster 11.12 p.654
+ 0x0038: [0,1,7], # Time Synchronization 11.16 p.689
+ 0x003C: [0,1,2], # Administrator Commissioning Cluster 11.18 p.725
+ 0x003E: [0,1,2,3,4,5], # Node Operational Credentials Cluster 11.17 p.704
+ 0x003F: [] # Group Key Management Cluster 11.2 p.572
}
+ static var TYPES = { 0x0016: 1 } # Root node
#############################################################
# Constructor
- def init(device)
- super(self).init(device)
- self.endpoints = self.ENDPOINTS
- self.clusters = self.CLUSTERS
+ def init(device, endpoint)
+ super(self).init(device, endpoint)
end
#############################################################
# read an attribute
#
- def read_attribute(msg, ctx)
+ def read_attribute(session, ctx)
import string
var TLV = matter.TLV
var cluster = ctx.cluster
@@ -62,7 +62,7 @@ class Matter_Plugin_core : Matter_Plugin
if cluster == 0x0030 # ========== GeneralCommissioning cluster 11.9 p.627 ==========
if attribute == 0x0000 # ---------- Breadcrumb ----------
- return TLV.create_TLV(TLV.U8, msg.session.breadcrumb)
+ return TLV.create_TLV(TLV.U8, session._breadcrumb)
elif attribute == 0x0001 # ---------- BasicCommissioningInfo / BasicCommissioningInfo----------
var bci = TLV.Matter_TLV_struct()
bci.add_TLV(0, TLV.U2, 60) # FailSafeExpiryLengthSeconds
@@ -120,9 +120,9 @@ class Matter_Plugin_core : Matter_Plugin
end
return nwi
elif attribute == 0x0001 # ---------- RebootCount u16 ----------
- return TLV.create_TLV(TLV.U2, tasmota.cmd("Status 1")['StatusPRM']['BootCount'])
+ return TLV.create_TLV(TLV.U2, tasmota.cmd("Status 1", true)['StatusPRM']['BootCount'])
elif attribute == 0x0002 # ---------- UpTime u16 ----------
- return TLV.create_TLV(TLV.U4, tasmota.cmd("Status 11")['StatusSTS']['UptimeSec'])
+ return TLV.create_TLV(TLV.U4, tasmota.cmd("Status 11", true)['StatusSTS']['UptimeSec'])
# TODO add later other attributes
elif attribute == 0x0008 # ---------- TestEventTriggersEnabled bool ----------
return TLV.create_TLV(TLV.BOOL, false) # false - maybe can set to true
@@ -150,80 +150,125 @@ class Matter_Plugin_core : Matter_Plugin
if attribute == 0x0000 # ---------- NOCs / list[NOCStruct] ----------
var nocl = TLV.Matter_TLV_array() # NOCs, p.711
- for session: self.device.sessions.sessions_active()
+ for loc_fabric: self.device.sessions.active_fabrics()
var nocs = nocl.add_struct(nil)
- nocs.add_TLV(1, TLV.B2, session.noc) # NOC
- nocs.add_TLV(2, TLV.B2, session.icac) # ICAC
+ nocs.add_TLV(1, TLV.B2, loc_fabric.get_noc()) # NOC
+ nocs.add_TLV(2, TLV.B2, loc_fabric.get_icac()) # ICAC
+ nocs.add_TLV(0xFE, TLV.U2, loc_fabric.get_fabric_index()) # Label
end
return nocl
elif attribute == 0x0001 # ---------- Fabrics / list[FabricDescriptorStruct] ----------
var fabrics = TLV.Matter_TLV_array() # Fabrics, p.711
- for session: self.device.sessions.sessions_active()
- var root_ca_tlv = TLV.parse(session.get_ca())
+ for loc_fabric: self.device.sessions.active_fabrics()
+ var root_ca_tlv = TLV.parse(loc_fabric.get_ca())
var fab = fabrics.add_struct(nil) # encoding see p.303
fab.add_TLV(1, TLV.B2, root_ca_tlv.findsubval(9)) # RootPublicKey
- fab.add_TLV(2, TLV.U2, session.admin_vendor) # VendorID
- fab.add_TLV(3, TLV.U8, session.fabric) # FabricID
- fab.add_TLV(4, TLV.U8, session.deviceid) # NodeID
- fab.add_TLV(5, TLV.UTF1, session.fabric_label) # Label
+ fab.add_TLV(2, TLV.U2, loc_fabric.get_admin_vendor()) # VendorID
+ fab.add_TLV(3, TLV.U8, loc_fabric.get_fabric_id()) # FabricID
+ fab.add_TLV(4, TLV.U8, loc_fabric.get_device_id()) # NodeID
+ fab.add_TLV(5, TLV.UTF1, loc_fabric.get_fabric_label()) # Label
+ fab.add_TLV(0xFE, TLV.U2, loc_fabric.get_fabric_index()) # idx
end
return fabrics
elif attribute == 0x0002 # ---------- SupportedFabrics / u1 ----------
- return TLV.create_TLV(TLV.U1, 5) # Max 5 fabrics
+ return TLV.create_TLV(TLV.U1, matter.Fabric._MAX_CASE) # Max 5 fabrics
elif attribute == 0x0003 # ---------- CommissionedFabrics / u1 ----------
- var sessions_active = self.device.sessions.sessions_active()
- return TLV.create_TLV(TLV.U1, size(sessions_active)) # number of active sessions
+ var fabric_actice = self.device.sessions.count_active_fabrics()
+ return TLV.create_TLV(TLV.U1, fabric_actice) # number of active fabrics
elif attribute == 0x0004 # ---------- TrustedRootCertificates / list[octstr] ----------
# TODO
elif attribute == 0x0005 # ---------- Current FabricIndex / u1 ----------
- var sessions_active = self.device.sessions.sessions_active()
- var fabric_index = sessions_active.find(msg.session)
- if fabric_index == nil fabric_index = 0 end
- return TLV.create_TLV(TLV.U1, fabric_index) # number of active sessions
+ var fab_index = session._fabric.get_fabric_index()
+ if fab_index == nil fab_index = 0 end # if PASE session, then the fabric index should be zero
+ return TLV.create_TLV(TLV.U1, fab_index) # number of active sessions
end
# ====================================================================================================
elif cluster == 0x003C # ========== Administrator Commissioning Cluster 11.18 p.725 ==========
- # TODO
-
+ if attribute == 0x0000 # ---------- WindowStatus / u8 ----------
+ var commissioning_open = self.device.is_commissioning_open()
+ var basic_commissioning = self.device.is_root_commissioning_open()
+ var val = commissioning_open ? (basic_commissioning ? 2 #-BasicWindowOpen-# : 1 #-EnhancedWindowOpen-#) : 0 #-WindowNotOpen-#
+ return TLV.create_TLV(TLV.U1, val)
+ elif attribute == 0x0001 # ---------- AdminFabricIndex / u16 ----------
+ var admin_fabric = self.device.commissioning_admin_fabric
+ if admin_fabric != nil
+ return TLV.create_TLV(TLV.U2, admin_fabric.get_fabric_index())
+ else
+ return TLV.create_TLV(TLV.NULL, nil)
+ end
+ elif attribute == 0x0002 # ---------- AdminVendorId / u16 ----------
+ var admin_fabric = self.device.commissioning_admin_fabric
+ if admin_fabric != nil
+ return TLV.create_TLV(TLV.U2, admin_fabric.get_admin_vendor())
+ else
+ return TLV.create_TLV(TLV.NULL, nil)
+ end
+ end
+
# ====================================================================================================
elif cluster == 0x0028 # ========== Basic Information Cluster cluster 11.1 p.565 ==========
- if attribute == 0x0000 # ---------- DataModelRevision / u16 ----------
- return TLV.create_TLV(TLV.U2, 0)
+ if attribute == 0x0000 # ---------- DataModelRevision / CommissioningWindowStatus ----------
+ return TLV.create_TLV(TLV.U2, 1)
elif attribute == 0x0001 # ---------- VendorName / string ----------
return TLV.create_TLV(TLV.UTF1, "Tasmota")
elif attribute == 0x0002 # ---------- VendorID / vendor-id ----------
return TLV.create_TLV(TLV.U2, self.device.vendorid) # Vendor ID reserved for development
elif attribute == 0x0003 # ---------- ProductName / string ----------
- return TLV.create_TLV(TLV.UTF1, tasmota.cmd("DeviceName")['DeviceName'])
+ return TLV.create_TLV(TLV.UTF1, tasmota.cmd("DeviceName", true)['DeviceName'])
elif attribute == 0x0004 # ---------- ProductID / u16 (opt) ----------
return TLV.create_TLV(TLV.U2, 32768) # taken from esp-matter example
elif attribute == 0x0005 # ---------- NodeLabel / string ----------
- return TLV.create_TLV(TLV.UTF1, tasmota.cmd("FriendlyName")['FriendlyName1'])
+ return TLV.create_TLV(TLV.UTF1, tasmota.cmd("FriendlyName", true)['FriendlyName1'])
elif attribute == 0x0006 # ---------- Location / string ----------
return TLV.create_TLV(TLV.UTF1, "XX") # no location
elif attribute == 0x0007 # ---------- HardwareVersion / u16 ----------
return TLV.create_TLV(TLV.U2, 0)
elif attribute == 0x0008 # ---------- HardwareVersionString / string ----------
- return TLV.create_TLV(TLV.UTF1, tasmota.cmd("Status 2")['StatusFWR']['Hardware'])
+ return TLV.create_TLV(TLV.UTF1, tasmota.cmd("Status 2", true)['StatusFWR']['Hardware'])
elif attribute == 0x0009 # ---------- SoftwareVersion / u32 ----------
- return TLV.create_TLV(TLV.U2, 0)
+ return TLV.create_TLV(TLV.U2, 1)
elif attribute == 0x000A # ---------- SoftwareVersionString / string ----------
- return TLV.create_TLV(TLV.UTF1, tasmota.cmd("Status 2")['StatusFWR']['Version'])
+ var version_full = tasmota.cmd("Status 2", true)['StatusFWR']['Version']
+ var version_end = string.find(version_full, '(')
+ if version_end > 0 version_full = version_full[0..version_end - 1] end
+ return TLV.create_TLV(TLV.UTF1, version_full)
+ elif attribute == 0x000F # ---------- SerialNumber / string ----------
+ return TLV.create_TLV(TLV.UTF1, tasmota.wifi().find("mac", ""))
+ elif attribute == 0x0012 # ---------- UniqueID / string 32 max ----------
+ return TLV.create_TLV(TLV.UTF1, tasmota.wifi().find("mac", ""))
+ elif attribute == 0x0013 # ---------- CapabilityMinima / CapabilityMinimaStruct ----------
+ var cps = TLV.Matter_TLV_struct()
+ cps.add_TLV(0, TLV.U2, 3) # CaseSessionsPerFabric = 3
+ cps.add_TLV(1, TLV.U2, 3) # SubscriptionsPerFabric = 5
+ return cps
end
# ====================================================================================================
elif cluster == 0x003F # ========== Group Key Management Cluster 11.2 p.572 ==========
# TODO
+ # ====================================================================================================
+ elif cluster == 0x002A # ========== OTA Software Update Requestor Cluster Definition 11.19.7 p.762 ==========
+
+ if attribute == 0x0000 # ---------- DefaultOTAProviders / list[ProviderLocationStruct] ----------
+ return TLV.Matter_TLV_array() # empty list for now TODO
+ elif attribute == 0x0001 # ---------- UpdatePossible / bool ----------
+ return TLV.create_TLV(TLV.BOOL, 0) # we claim that update is not possible, would require to go to Tasmota UI
+ elif attribute == 0x0002 # ---------- UpdateState / UpdateStateEnum ----------
+ return TLV.create_TLV(TLV.U1, 1) # Idle
+ elif attribute == 0x0003 # ---------- UpdateStateProgress / uint8 ----------
+ return TLV.create_TLV(TLV.NULL, nil) # null, nothing in process
+ end
+
# ====================================================================================================
elif cluster == 0x002B # ========== Localization Configuration Cluster 11.3 p.580 ==========
if attribute == 0x0000 # ---------- ActiveLocale / string ----------
return TLV.create_TLV(TLV.UTF1, tasmota.locale())
elif attribute == 0x0001 # ---------- SupportedLocales / list[string] ----------
- var locl = TLV.Matter_TLV_list()
+ var locl = TLV.Matter_TLV_array()
locl.add_TLV(nil, TLV.UTF1, tasmota.locale())
return locl
end
@@ -236,7 +281,7 @@ class Matter_Plugin_core : Matter_Plugin
elif attribute == 0x0001 # ---------- ActiveCalendarType / CalendarType ----------
return TLV.create_TLV(TLV.U1, 4) # 4 = Gregorian
elif attribute == 0x0002 # ---------- SupportedCalendarTypes / list[CalendarType] ----------
- var callist = TLV.Matter_TLV_list()
+ var callist = TLV.Matter_TLV_array()
callist.add_TLV(nil, TLV.create_TLV(TLV.U1, 4))
return callist
end
@@ -246,32 +291,25 @@ class Matter_Plugin_core : Matter_Plugin
if attribute == 0x0003 # ---------- ConnectMaxTimeSeconds / uint8 ----------
return TLV.create_TLV(TLV.U1, 30) # 30 - value taking from example in esp-matter
elif attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
- return TLV.create_TLV(TLV.U4, 0) # 15s ??? TOOD what should we put here?
+ return TLV.create_TLV(TLV.U4, 0x04) # Put Eth for now which should work for any on-network
end
- # ====================================================================================================
- elif cluster == 0x001D # ========== Descriptor Cluster 9.5 p.453 ==========
- if attribute == 0x0000 # ---------- DeviceTypeList / list[DeviceTypeStruct] ----------
- elif attribute == 0x0001 # ---------- ServerList / list[cluster-id] ----------
- var sl = TLV.Matter_TLV_array()
- for cl: self.get_cluster_list()
- sl.add_TLV(nil, TLV.U4, cl)
- end
- return sl
- elif attribute == 0x0002 # ---------- ClientList / list[cluster-id] ----------
- var cl = TLV.Matter_TLV_array()
- return cl
- elif attribute == 0x0003 # ---------- PartsList / list[endpoint-no]----------
- var eps = self.device.get_active_endpoints(true)
+ elif cluster == 0x001D # ========== Descriptor Cluster 9.5 p.453 ==========
+
+ # overwrite PartsList
+ if attribute == 0x0003 # ---------- PartsList / list[endpoint-no]----------
var pl = TLV.Matter_TLV_array()
+ var eps = self.device.get_active_endpoints(true)
for ep: eps
pl.add_TLV(nil, TLV.U2, ep) # add each endpoint
end
return pl
+ else
+ return super(self).read_attribute(session, ctx)
end
else
- ctx.status = matter.UNSUPPORTED_CLUSTER
+ return super(self).read_attribute(session, ctx)
end
# no match found, return that the attribute is unsupported
@@ -282,12 +320,12 @@ class Matter_Plugin_core : Matter_Plugin
#
# returns a TLV object if successful, contains the response
# or an `int` to indicate a status
- def invoke_request(msg, val, ctx)
+ def invoke_request(session, val, ctx)
import crypto
+ import string
var TLV = matter.TLV
var cluster = ctx.cluster
var command = ctx.command
- var session = msg.session
if cluster == 0x0030 # ========== GeneralCommissioning cluster 11.9 p.627 ==========
if command == 0x0000 # ---------- ArmFailSafe ----------
@@ -297,7 +335,7 @@ class Matter_Plugin_core : Matter_Plugin
# 1=DebugText
var ExpiryLengthSeconds = val.findsubval(0, 900)
var Breadcrumb = val.findsubval(1, 0)
- session.breadcrumb = Breadcrumb
+ session._breadcrumb = Breadcrumb
var afsr = TLV.Matter_TLV_struct()
afsr.add_TLV(0, TLV.U1, 0) # ErrorCode = OK
@@ -309,7 +347,7 @@ class Matter_Plugin_core : Matter_Plugin
var NewRegulatoryConfig = val.findsubval(0) # RegulatoryLocationType Enum
var CountryCode = val.findsubval(1, "XX")
var Breadcrumb = val.findsubval(2, 0)
- session.breadcrumb = Breadcrumb
+ session._breadcrumb = Breadcrumb
# create SetRegulatoryConfigResponse
# ID=1
# 0=ErrorCode (OK=0)
@@ -322,8 +360,10 @@ class Matter_Plugin_core : Matter_Plugin
elif command == 0x0004 # ---------- CommissioningComplete p.636 ----------
# no data
- session.breadcrumb = 0 # clear breadcrumb
+ session._breadcrumb = 0 # clear breadcrumb
+ session.fabric_completed() # fabric information is complete, persist
session.set_no_expiration()
+ session.save()
# create CommissioningCompleteResponse
# ID=1
@@ -335,7 +375,7 @@ class Matter_Plugin_core : Matter_Plugin
ctx.command = 0x05 # CommissioningCompleteResponse
self.device.start_commissioning_complete_deferred(session)
- return ccr # trigger a standalone ack
+ return ccr
end
elif cluster == 0x003E # ========== Node Operational Credentials Cluster 11.17 p.704 ==========
@@ -364,7 +404,7 @@ class Matter_Plugin_core : Matter_Plugin
att_elts.add_TLV(1, TLV.B2, matter.CD_FFF1_8000()) # certification_declaration
att_elts.add_TLV(2, TLV.B1, AttestationNonce) # attestation_nonce
att_elts.add_TLV(3, TLV.U4, tasmota.rtc()['utc']) # timestamp in epoch-s
- var attestation_message = att_elts.encode()
+ var attestation_message = att_elts.tlv2raw()
var ac = session.get_ac()
var attestation_tbs = attestation_message + ac
@@ -391,7 +431,7 @@ class Matter_Plugin_core : Matter_Plugin
var nocsr_elements = TLV.Matter_TLV_struct()
nocsr_elements.add_TLV(1, TLV.B2, csr)
nocsr_elements.add_TLV(2, TLV.B1, CSRNonce)
- var nocsr_elements_message = nocsr_elements.encode()
+ var nocsr_elements_message = nocsr_elements.tlv2raw()
# sign with attestation challenge
var nocsr_tbs = nocsr_elements_message + session.get_ac()
tasmota.log("MTR: nocsr_tbs=" + nocsr_tbs.tohex(), 3)
@@ -416,6 +456,8 @@ class Matter_Plugin_core : Matter_Plugin
elif command == 0x0006 # ---------- AddNOC ----------
var NOCValue = val.findsubval(0) # octstr max 400
var ICACValue = val.findsubval(1) # octstr max 400
+ # Apple sends an empty ICAC instead of a missing attribute, fix this
+ if size(ICACValue) == 0 ICACValue = nil end
var IpkValue = val.findsubval(2) # octstr max 16
var CaseAdminSubject = val.findsubval(3)
var AdminVendorId = val.findsubval(4)
@@ -427,32 +469,40 @@ class Matter_Plugin_core : Matter_Plugin
session.set_noc(NOCValue, ICACValue)
session.set_ipk_epoch_key(IpkValue)
- session.admin_subject = CaseAdminSubject
- session.admin_vendor = AdminVendorId
+ session.set_admin_subject_vendor(CaseAdminSubject, AdminVendorId)
# extract important information from NOC
var noc_cert = matter.TLV.parse(NOCValue)
var dnlist = noc_cert.findsub(6)
- var fabric = dnlist.findsubval(21)
+ var fabric_id = dnlist.findsubval(21)
var deviceid = dnlist.findsubval(17)
- if !fabric || !deviceid
+ if !fabric_id || !deviceid
tasmota.log("MTR: Error: no fabricid nor deviceid in NOC certificate", 2)
return false
end
# convert fo bytes(8)
- if type(fabric) == 'int' fabric = int64(fabric).tobytes() else fabric = fabric.tobytes() end
- if type(deviceid) == 'int' deviceid = int64(deviceid).tobytes() else deviceid = deviceid.tobytes() end
+ if type(fabric_id) == 'int' fabric_id = int64.fromu32(fabric_id).tobytes() else fabric_id = fabric_id.tobytes() end
+ if type(deviceid) == 'int' deviceid = int64.fromu32(deviceid).tobytes() else deviceid = deviceid.tobytes() end
var root_ca = matter.TLV.parse(session.get_ca()).findsubval(9) # extract public key from ca
root_ca = root_ca[1..] # remove first byte as per Matter specification
var info = bytes().fromstring("CompressedFabric") # as per spec, 4.3.2.2 p.99
var hk = crypto.HKDF_SHA256()
- var fabric_rev = fabric.copy().reverse()
+ var fabric_rev = fabric_id.copy().reverse()
var k_fabric = hk.derive(root_ca, fabric_rev, info, 8)
- session.set_fabric_device(fabric, deviceid, k_fabric)
+ session.set_fabric_device(fabric_id, deviceid, k_fabric, self.device.commissioning_admin_fabric)
+
+ # We have a candidate fabric, add it as expirable for 2 minutes
+ session.persist_to_fabric() # fabric object is completed, persist it
+ session.fabric_candidate()
# move to next step
- self.device.start_operational_dicovery_deferred(session)
+ self.device.start_operational_discovery_deferred(session)
+ # session.fabric_completed()
+ tasmota.log("MTR: ------------------------------------------", 3)
+ tasmota.log("MTR: fabric=" + matter.inspect(session._fabric), 3)
+ tasmota.log("MTR: ------------------------------------------", 3)
+ session._fabric.log_new_fabric() # log that we registered a new fabric
# create NOCResponse
# 0=StatusCode
# 1=FabricIndex (1-254) (opt)
@@ -466,27 +516,161 @@ class Matter_Plugin_core : Matter_Plugin
elif command == 0x0009 # ---------- UpdateFabricLabel ----------
var label = val.findsubval(0) # Label string max 32
session.set_fabric_label(label)
+ tasmota.log(string.format("MTR: . Update fabric '%s' label='%s'", session._fabric.get_fabric_id().copy().reverse().tohex(), str(label)), 2)
ctx.status = matter.SUCCESS # OK
return nil # trigger a standalone ack
elif command == 0x000A # ---------- RemoveFabric ----------
var index = val.findsubval(0) # FabricIndex
- var sessions_act = self.device.sessions.sessions_active()
- if index >= 1 && index <= size(sessions_act)
- var session_deleted = sessions_act[index - 1]
- tasmota.log("MTR: removing fabric " + session.fabric.copy().reverse().tohex())
- self.device.sessions.remove_session()
- self.device.sessions.save()
- else
- # TODO return error 11 InvalidFabricIndex
+
+ for fab: self.device.sessions.active_fabrics()
+ if fab.get_fabric_index() == index
+ tasmota.log("MTR: removing fabric " + fab.get_fabric_id().copy().reverse().tohex(), 2)
+ # defer actual removal to send a response
+ tasmota.set_timer(2000, def () self.device.remove_fabric(fab) end)
+ return true # Ok
+ end
end
- ctx.status = matter.SUCCESS # OK
+ tasmota.log("MTR: RemoveFabric fabric("+str(index)+") not found", 2)
+ ctx.status = matter.INVALID_ACTION
+ ctx.log = "fabric_index:"+str(index)
return nil # trigger a standalone ack
end
+
+ # ====================================================================================================
+ elif cluster == 0x003C # ========== Administrator Commissioning Cluster 11.18 p.725 ==========
+
+ if command == 0x0000 # ---------- OpenCommissioningWindow ----------
+ var timeout = val.findsubval(0) # CommissioningTimeout u2
+ var passcode_verifier = val.findsubval(1) # PAKEPasscodeVerifier octstr
+ var discriminator = val.findsubval(2) # Discriminator u2
+ var iterations = val.findsubval(3) # Iterations u4
+ var salt = val.findsubval(4) # Salt octstr
+
+ tasmota.log(string.format("MTR: OpenCommissioningWindow(timeout=%i, passcode=%s, discriminator=%i, iterations=%i, salt=%s)",
+ timeout, passcode_verifier.tohex(), discriminator, iterations, salt.tohex()), 2)
+
+ # check values
+ if timeout == nil || passcode_verifier == nil || discriminator == nil || iterations == nil || salt == nil
+ ctx.status = matter.INVALID_DATA_TYPE
+ return nil # trigger a standalone ack
+ end
+ if size(passcode_verifier) != 32+65 || size(salt) < 16 || size(salt) > 32
+ tasmota.log("MTR: wrong size for PAKE parameters")
+ ctx.status = matter.CONSTRAINT_ERROR
+ return nil # trigger a standalone ack
+ end
+
+ var w0 = passcode_verifier[0..31]
+ var L = passcode_verifier[32..]
+
+ self.device.start_basic_commissioning(timeout, iterations, discriminator, salt, w0, #-w1,-# L, session.get_fabric())
+ # TODO announce in MDNS
+ return true # OK
+ elif command == 0x0001 # ---------- OpenBasicCommissioningWindow ----------
+ var commissioning_timeout = val.findsubval(0) # CommissioningTimeout
+ tasmota.log("MTR: OpenBasicCommissioningWindow commissioning_timeout="+str(commissioning_timeout), 2)
+ self.device.start_root_basic_commissioning(commissioning_timeout)
+ return true
+ elif command == 0x0002 # ---------- RevokeCommissioning ----------
+ # TODO add checks that the commissioning window was opened by the same fabric
+ self.device.stop_basic_commissioning()
+ return true
+ end
+
+ # ====================================================================================================
+ elif cluster == 0x002A # ========== OTA Software Update Requestor Cluster Definition 11.19.7 p.762 ==========
+
+ if command == 0x0000 # ---------- DefaultOTAProviders ----------
+ return true # OK
+ end
+
+ else
+ return super(self).invoke_request(session, val, ctx)
end
end
+
+ #############################################################
+ # write an attribute
+ #
+ def write_attribute(session, ctx, write_data)
+ import string
+ var TLV = matter.TLV
+ var cluster = ctx.cluster
+ var attribute = ctx.attribute
+
+ # 0x001D no writable attributes
+ # 0x0032 no attributes
+ # 0x0033 no writable attributes
+ # 0x0034 no writable attributes
+ # 0x0038 no mandatory writable attributes
+ # 0x003C no writable attributes
+ # 0x003E no writable attributes
+
+ if cluster == 0x0030 # ========== GeneralCommissioning cluster 11.9 p.627 ==========
+
+ if attribute == 0x0000 # ---------- Breadcrumb ----------
+ if type(write_data) == 'int' || isinstance(write_data, int64)
+ session._breadcrumb = write_data
+ self.attribute_updated(ctx.endpoint, ctx.cluster, ctx.attribute) # TODO should we have a more generalized way each time a write_attribute is triggered, declare the attribute as changed?
+ return true
+ else
+ ctx.status = matter.CONSTRAINT_ERROR
+ return false
+ end
+ end
+
+ # ====================================================================================================
+ elif cluster == 0x001F # ========== Access Control Cluster 9.10 p.461 ==========
+ if attribute == 0x0000 # ACL - list[AccessControlEntryStruct]
+ return true
+ end
+
+ # ====================================================================================================
+ elif cluster == 0x0028 # ========== Basic Information Cluster cluster 11.1 p.565 ==========
+
+ if attribute == 0x0005 # ---------- NodeLabel / string ----------
+ # TODO
+ return true
+ elif attribute == 0x0006 # ---------- Location / string ----------
+ # TODO
+ return true
+ end
+ # ====================================================================================================
+ elif cluster == 0x002A # ========== OTA Software Update Requestor Cluster Definition 11.19.7 p.762 ==========
+
+ if attribute == 0x0000 # ---------- DefaultOTAProviders / list[ProviderLocationStruct] ----------
+ return true # silently ignore
+ end
+ # ====================================================================================================
+ elif cluster == 0x002B # ========== Localization Configuration Cluster 11.3 p.580 ==========
+
+ if attribute == 0x0000 # ---------- ActiveLocale / string ----------
+ ctx.status = matter.CONSTRAINT_ERROR # changing locale is not possible
+ return false
+ end
+ # ====================================================================================================
+ elif cluster == 0x002C # ========== Time Format Localization Cluster 11.4 p.581 ==========
+
+ if attribute == 0x0000 # ---------- HourFormat / HourFormat ----------
+ # TODO
+ return true
+ elif attribute == 0x0001 # ---------- ActiveCalendarType / CalendarType ----------
+ # TODO
+ return true
+ end
+ # ====================================================================================================
+ elif cluster == 0x0031 # ========== Network Commissioning Cluster cluster 11.8 p.606 ==========
+ if attribute == 0x0004 # ---------- InterfaceEnabled / bool ----------
+ ctx.status = matter.INVALID_ACTION
+ return false
+ end
+
+
+ end
+ end
end
-matter.Plugin_core = Matter_Plugin_core
+matter.Plugin_Root = Matter_Plugin_Root
\ No newline at end of file
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Temp_Sensor.be b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Temp_Sensor.be
new file mode 100644
index 000000000..3375bce6d
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_Temp_Sensor.be
@@ -0,0 +1,109 @@
+#
+# Matter_Plugin_Temp_Sensor.be - implements the behavior for a Temperature Sensor
+#
+# Copyright (C) 2023 Stephan Hadinger & Theo Arends
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+
+# Matter plug-in for core behavior
+
+# dummy declaration for solidification
+class Matter_Plugin_Device end
+
+#@ solidify:Matter_Plugin_Temp_Sensor,weak
+
+class Matter_Plugin_Temp_Sensor : Matter_Plugin_Device
+ static var CLUSTERS = {
+ # 0x001D: inherited # Descriptor Cluster 9.5 p.453
+ # 0x0003: inherited # Identify 1.2 p.16
+ # 0x0004: inherited # Groups 1.3 p.21
+ 0x0402: [0,1,2], # Temperature Measurement p.97 - no writable
+ }
+ static var TYPES = { 0x0302: 2 } # Temperature Sensor, rev 2
+
+ var tasmota_sensor_filter # Rule-type filter to the value, like "ESP32#Temperature"
+ var tasmota_sensor_matcher # Actual matcher object
+ var shadow_temperature # fake status for now # TODO
+
+ #############################################################
+ # Constructor
+ def init(device, endpoint, sensor_filter)
+ super(self).init(device, endpoint)
+ self.tasmota_sensor_filter = sensor_filter
+ self.tasmota_sensor_matcher = tasmota.Rule_Matcher.parse(sensor_filter)
+ end
+
+ #############################################################
+ # parse sensor
+ #
+ # The device calls regularly `tasmota.read_sensors()` and converts
+ # it to json.
+ def parse_sensors(payload)
+ if self.tasmota_sensor_matcher
+ var val = real(self.tasmota_sensor_matcher.match(payload))
+ if val != nil
+ # import string
+ # tasmota.log(string.format("MTR: update temperature for endpoint %i - %.1f C", self.endpoint,), 3)
+ if val != self.shadow_temperature
+ self.attribute_updated(nil, 0x0402, 0x0000)
+ end
+ self.shadow_temperature = val
+ end
+ end
+ end
+
+ #############################################################
+ # get_temperature
+ #
+ # Update shadow and signal any change
+ def get_temperature()
+ return self.shadow_temperature
+ end
+
+ #############################################################
+ # read an attribute
+ #
+ def read_attribute(session, ctx)
+ import string
+ var TLV = matter.TLV
+ var cluster = ctx.cluster
+ var attribute = ctx.attribute
+
+ # ====================================================================================================
+ if cluster == 0x0402 # ========== Temperature Measurement 2.3 p.97 ==========
+ if attribute == 0x0000 # ---------- MeasuredValue / i16 (*100) ----------
+ if self.shadow_temperature != nil
+ return TLV.create_TLV(TLV.I2, int(self.shadow_temperature * 100))
+ else
+ return TLV.create_TLV(TLV.NULL, nil)
+ end
+ elif attribute == 0x0001 # ---------- MinMeasuredValue / i16 (*100) ----------
+ return TLV.create_TLV(TLV.I2, -5000) # -50 °C
+ elif attribute == 0x0002 # ---------- MaxMeasuredValue / i16 (*100) ----------
+ return TLV.create_TLV(TLV.I2, 15000) # 150 °C
+ end
+
+ else
+ return super(self).read_attribute(session, ctx)
+ end
+ end
+
+ #############################################################
+ # every_second
+ def every_second()
+ self.get_temperature() # force reading value and sending subscriptions
+ end
+end
+matter.Plugin_Temp_Sensor = Matter_Plugin_Temp_Sensor
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Session.be b/lib/libesp32/berry_matter/src/embedded/Matter_Session.be
index 1f46e0f32..5936c44cf 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_Session.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Session.be
@@ -1,5 +1,5 @@
#
-# Matter_Session.be - Support for Matter Sessions and Session Store
+# Matter_Session.be - Support for Matter Sessions
#
# Copyright (C) 2023 Stephan Hadinger & Theo Arends
#
@@ -20,7 +20,9 @@
import matter
#@ solidify:Matter_Session,weak
-#@ solidify:Matter_Session_Store,weak
+
+# for compilation
+class Matter_Expirable end
#################################################################################
# Matter_Session class
@@ -29,76 +31,178 @@ import matter
# It can also be retrived by `source_node_id` when `local_session_id` is 0
#
# By convention, names starting with `_` are not persisted
+# Names starting with `__` are cleared when session is closed (transition from PASE to CASE or CASE finished)
#################################################################################
-class Matter_Session
- static var __PASE = 1 # PASE authentication in progress
- static var __CASE = 2 # CASE authentication in progress
- var __store # reference back to session store
+class Matter_Session : Matter_Expirable
+ static var _PASE = 1 # PASE authentication in progress
+ static var _CASE = 2 # CASE authentication in progress
+ static var _COUNTER_SND_INCR = 1024 # counter increased when persisting
+ var _store # reference back to session store
# mode for Session. Can be PASE=1, CASE=2, Established=10 none=0
var mode
+ # link to a fabric object, temporary and in construction for PASE, persistent for CASE
+ var _fabric
# sesions
var local_session_id # id for the current local session, starts with 1
var initiator_session_id # id used to respond to the initiator
- var session_timestamp # timestamp (UTC) when the session was created
- var source_node_id # source node if bytes(8) (opt, used only when session is not established)
+ var created # timestamp (UTC) when the session was created
+ var last_used # timestamp (UTC) when the session was last used
+ var _source_node_id # source node if bytes(8) (opt, used only when session is not established)
# session_ids when the session will be active
- var _future_initiator_session_id
- var _future_local_session_id
+ var __future_initiator_session_id
+ var __future_local_session_id
# counters
var counter_rcv # counter for incoming messages
- var counter_snd # counter for outgoing messages
+ var counter_snd # persisted last highest known counter_snd (it is in advance or equal to the actual last used counter_snd)
+ var _counter_rcv_impl # implementation of counter_rcv by matter.Counter()
+ var _counter_snd_impl # implementation of counter_snd by matter.Counter()
+ var _exchange_id # exchange id for locally initiated transaction, non-persistent
+ # keep track of last known IP/Port of the fabric
+ var _ip # IP of the last received packet (string)
+ var _port # port of the last received packet (int)
+ var _message_handler # pointer to the message handler for this session
# non-session counters
- var _counter_insecure_rcv # counter for incoming messages
- var _counter_insecure_snd # counter for outgoing messages
+ var _counter_insecure_rcv # counter for incoming messages
+ var _counter_insecure_snd # counter for outgoing messages
# encryption keys and challenges
var i2rkey # key initiator to receiver (incoming)
var r2ikey # key receiver to initiator (outgoing)
var _i2r_privacy # cache for the i2r privacy key
- var attestation_challenge # Attestation challenge
+ var attestation_challenge # Attestation challenge
var peer_node_id
# breadcrumb
- var breadcrumb # breadcrumb attribute for this session
- # our own private key
- var no_private_key # private key of the device certificate (generated at commissioning)
- # NOC information
- var root_ca_certificate # root certificate of the initiator
- var noc # Node Operational Certificate in TLV Matter Certificate
- var icac # Initiator CA Certificate in TLV Matter Certificate
- var ipk_epoch_key # timestamp
+ var _breadcrumb # breadcrumb attribute for this session, prefix `_` so that it is not persisted and untouched
# CASE
var resumption_id # bytes(16)
- var shared_secret # ECDH shared secret used in CASE
- # Information extracted from `noc`
- var fabric # fabric identifier as bytes(8) little endian
- var fabric_compressed # comrpessed fabric identifier, hashed with root_ca public key
- var deviceid # our own device id bytes(8) little endian
- var fabric_label # set by UpdateFabricLabel
- # Admin info extracted from NOC/ICAC
- var admin_subject
- var admin_vendor
+ var shared_secret # ECDH shared secret used in CASE
+ var __responder_priv, __responder_pub
+ var __initiator_pub
+ # PASE
+ var __spake_cA # crypto.SPAKE2P_Matter object, cA
+ var __spake_Ke # crypto.SPAKE2P_Matter object, Ke
# Previous CASE messages for Transcript hash
- var _Msg1, _Msg2
- # Expiration
- var _persist # do we persist this sessions or is it remporary
- var expiration # if not `nil` the entry is removed after this timestamp
+ var __Msg1, __Msg2
# below are placeholders for ongoing transactions or chunked responses
- var _chunked_attr_reports # if not `nil` holds a container for the current _chuked_attr_reports
+ var __chunked_attr_reports # if not `nil` holds a container for the current _chuked_attr_reports
# Group Key Derivation
- static var __GROUP_KEY = "GroupKey v1.0" # starting with double `_` means it's not writable
+ static var _GROUP_KEY = "GroupKey v1.0" # starting with double `_` means it's not writable
#############################################################
- def init(store, local_session_id, initiator_session_id)
- self.__store = store
+ def init(store, local_session_id, initiator_session_id, fabric)
+ import crypto
+ self._store = store
self.mode = 0
self.local_session_id = local_session_id
self.initiator_session_id = initiator_session_id
- self.counter_rcv = matter.Counter()
- self.counter_snd = matter.Counter()
+ # self.counter_rcv = matter.Counter()
+ # self.counter_snd = matter.Counter()
+ self._counter_snd_impl = matter.Counter()
+ self._counter_rcv_impl = matter.Counter()
+ self.counter_rcv = 0 # avoid nil values
+ self.counter_snd = self._counter_snd_impl.next() + self._COUNTER_SND_INCR
+ #
self._counter_insecure_rcv = matter.Counter()
self._counter_insecure_snd = matter.Counter()
- self.breadcrumb = int64()
+ self._breadcrumb = 0
+ self._exchange_id = crypto.random(2).get(0,2) # generate a random 16 bits number, then increment with rollover
+
+ self._fabric = fabric ? fabric : self._store.create_fabric()
+ self.update()
+ end
+
+ #############################################################
+ # Called before removal
+ def before_remove()
+ import string
+ tasmota.log(string.format("MTR: -Session (%6i) (removed)", self.local_session_id), 3)
+ end
+
+ #############################################################
+ # Management of security counters
+ #############################################################
+ # Provide the next counter value, and update the last know persisted if needed
+ #
+ def counter_snd_next()
+ import string
+ var next = self._counter_snd_impl.next()
+ tasmota.log(string.format("MTR: . Counter_snd=%i", next), 3)
+ # print(">>> NEXT counter_snd=", self.counter_snd, "_impl=", self._counter_snd_impl.val(), 4)
+ if matter.Counter.is_greater(next, self.counter_snd)
+ self.counter_snd = next + self._COUNTER_SND_INCR
+ if self.does_persist()
+ # the persisted counter is behind the actual counter
+ self.save()
+ end
+ end
+ return next
+ end
+ # #############################################################
+ # # Before savind
+ # def persist_pre()
+ # end
+
+ #############################################################
+ # When hydrating from persistance, update counters
+ def hydrate_post()
+ # reset counter_snd to highest known.
+ # We advance it only in case it is actually used
+ # This avoids updaing counters on dead sessions
+ self._counter_snd_impl.reset(self.counter_snd)
+ self._counter_rcv_impl.reset(self.counter_rcv)
+ self.counter_snd = self._counter_snd_impl.val()
+ self.counter_rcv = self._counter_rcv_impl.val()
+ end
+ #############################################################
+ # Validate received counter
+ def counter_rcv_validate(v, t)
+ var ret = self._counter_rcv_impl.validate(v, t)
+ if ret self.counter_rcv = self._counter_rcv_impl.val() end # update the validated counter
+ return ret
+ end
+
+ #############################################################
+ # Update the timestamp or any other information
+ def update()
+ self.last_used = tasmota.rtc()['utc']
+ end
+
+ def set_mode_PASE() self.set_mode(self._PASE) end
+ def set_mode_CASE() self.set_mode(self._CASE) end
+ def is_PASE() return self.mode == self._PASE end
+ def is_CASE() return self.mode == self._CASE end
+
+ #############################################################
+ # Assign a new fabric index
+ def assign_fabric_index()
+ if (self._fabric.get_fabric_index() == nil)
+ self._fabric.set_fabric_index(self._store.next_fabric_idx())
+ end
+ end
+
+ #############################################################
+ # Register the fabric as complete (end of commissioning)
+ def fabric_completed()
+ self._fabric.set_no_expiration()
+ self._fabric.set_persist(true)
+ self.assign_fabric_index()
+ self._store.add_fabric(self._fabric)
+ end
+
+ #############################################################
+ # Register the frabric as complete (end of commissioning)
+ def fabric_candidate()
+ self._fabric.set_expire_in_seconds(120) # expire in 2 minutes
+ self.assign_fabric_index()
+ self._store.add_fabric(self._fabric)
+ end
+
+ #############################################################
+ # Persist to fabric
+ # Add self session to the persisted established CASE session of the fabric
+ def persist_to_fabric()
+ self._fabric.add_session(self)
end
#############################################################
@@ -106,28 +210,24 @@ class Matter_Session
#
def close()
# close the PASE session, it will be re-opened with a CASE session
- var persist_save = self._persist
- self.local_session_id = self._future_local_session_id
- self.initiator_session_id = self._future_initiator_session_id
- self.source_node_id = nil
- self.counter_rcv.reset()
- self.counter_snd.reset()
+ self.local_session_id = self.__future_local_session_id
+ self.initiator_session_id = self.__future_initiator_session_id
+ self._counter_rcv_impl.reset()
+ self._counter_snd_impl.reset()
+ self.counter_rcv = 0
+ self.counter_snd = self._counter_snd_impl.next()
self.i2rkey = nil
self._i2r_privacy = nil
self.r2ikey = nil
self.attestation_challenge = nil
- self.fabric_label = ""
- # clear any attribute starting with `_`
+ # clear any attribute starting with `__`
import introspect
for k : introspect.members(self)
var v = introspect.get(self, k)
- if type(v) != 'function' && type(v) != 'instance' && k[0] == '_' && k[1] != '_'
+ if type(v) != 'function' && type(v) != 'instance' && k[0] == '_' && k[1] == '_'
self.(k) = nil
end
end
- self._persist = persist_save
- # self._future_initiator_session_id = nil
- # self._future_local_session_id = nil
end
#############################################################
@@ -139,30 +239,32 @@ class Matter_Session
self._i2r_privacy = nil # clear cache
self.r2ikey = r2i
self.attestation_challenge = ac
- self.session_timestamp = st
+ self.created = st
end
def set_ca(ca)
- self.root_ca_certificate = ca
+ self._fabric.root_ca_certificate = ca
end
def set_noc(noc, icac)
- self.noc = noc
- self.icac = icac
+ self._fabric.noc = noc
+ self._fabric.icac = icac
end
def set_ipk_epoch_key(ipk_epoch_key)
- self.ipk_epoch_key = ipk_epoch_key
+ self._fabric.ipk_epoch_key = ipk_epoch_key
end
- def set_fabric_device(fabric, deviceid, fc)
- self.fabric = fabric
- self.deviceid = deviceid
- self.fabric_compressed = fc
- self.__store.remove_redundant_session(self)
+ def set_admin_subject_vendor(admin_subject, admin_vendor)
+ self._fabric.admin_subject = admin_subject
+ self._fabric.admin_vendor = admin_vendor
end
- def set_persist(p)
- self._persist = bool(p)
+
+ def set_fabric_device(fabric_id, device_id, fc, fabric_parent)
+ self._fabric.fabric_id = fabric_id
+ self._fabric.device_id = device_id
+ self._fabric.fabric_compressed = fc
+ self._fabric.fabric_parent = (fabric_parent != nil) ? fabric_parent.get_fabric_index() : nil
end
def set_fabric_label(s)
if type(s) == 'string'
- self.fabric_label = s
+ self._fabric.fabric_label = s
end
end
@@ -188,75 +290,45 @@ class Matter_Session
return self.attestation_challenge
end
def get_ca()
- return self.root_ca_certificate
+ return self._fabric.root_ca_certificate
end
def get_ca_pub()
- if self.root_ca_certificate
- var m = matter.TLV.parse(self.root_ca_certificate)
- return m.findsubval(9)
- end
+ return self._fabric.get_ca_pub()
end
- def get_noc() return self.noc end
- def get_icac() return self.icac end
- def get_ipk_epoch_key() return self.ipk_epoch_key end
- def get_fabric() return self.fabric end
- def get_deviceid() return self.deviceid end
- def get_fabric_compressed() return self.fabric_compressed end
+ def get_fabric() return self._fabric end
+ def get_noc() return self._fabric.noc end
+ def get_icac() return self._fabric.icac end
+ def get_ipk_epoch_key() return self._fabric.ipk_epoch_key end
+ def get_fabric_id() return self._fabric.fabric_id end
+ def get_device_id() return self._fabric.device_id end
+ def get_fabric_compressed() return self._fabric.fabric_compressed end
+ def get_fabric_label() return self._fabric.fabric_label end
+ def get_admin_subject() return self._fabric.admin_subject end
+ def get_admin_vendor() return self._fabric.admin_vendor end
#############################################################
# Generate a private key (or retrieve it)
def get_pk()
- if !self.no_private_key
+ if !self._fabric.no_private_key
import crypto
- self.no_private_key = crypto.random(32)
+ self._fabric.no_private_key = crypto.random(32)
end
- return self.no_private_key
+ return self._fabric.no_private_key
end
#############################################################
# Operational Group Key Derivation, 4.15.2, p.182
def get_ipk_group_key()
- if self.ipk_epoch_key == nil || self.fabric_compressed == nil return nil end
+ if self.get_ipk_epoch_key() == nil || self.get_fabric_compressed() == nil return nil end
import crypto
var hk = crypto.HKDF_SHA256()
- var info = bytes().fromstring(self.__GROUP_KEY)
- var hash = hk.derive(self.ipk_epoch_key, self.fabric_compressed, info, 16)
+ var info = bytes().fromstring(self._GROUP_KEY)
+ var hash = hk.derive(self.get_ipk_epoch_key(), self.get_fabric_compressed(), info, 16)
return hash
end
#############################################################
- # set absolute time for expiration
- def set_no_expiration()
- self.expiration = nil
- end
-
- #############################################################
- # set absolute time for expiration
- def set_expire_time(t)
- self.expiration = int(t)
- end
-
- #############################################################
- # set relative time in the future for expiration (in seconds)
- def set_expire_in_seconds(s, now)
- if s == nil return end
- if now == nil now = tasmota.rtc()['utc'] end
- self.set_expire_time(now + s)
- end
-
- #############################################################
- # set relative time in the future for expiration (in seconds)
- # returns `true` if expiration date has been reached
- def has_expired(now)
- if now == nil now = tasmota.rtc()['utc'] end
- if self.expiration != nil
- return now >= self.expiration
- end
- return false
- end
-
- #############################################################
- # to_json()
+ # Session::to_json()
#
# convert a single entry as json
# returns a JSON string
@@ -266,6 +338,7 @@ class Matter_Session
import string
import introspect
+ self.persist_pre()
var keys = []
for k : introspect.members(self)
var v = introspect.get(self, k)
@@ -278,57 +351,50 @@ class Matter_Session
var v = introspect.get(self, k)
if v == nil continue end
- if k == "counter_rcv" v = v.val()
- elif k == "counter_snd" v = v.val() + 256 # take a margin to avoid reusing the same counter
+ if isinstance(v, bytes) v = "$$" + v.tob64() # bytes
+ elif type(v) == 'instance' continue # skip any other instance
end
-
- if isinstance(v, bytes) v = "$$" + v.tob64() end # bytes
- # if isinstance(v, bytes) v = "0x" + v.tohex() end
- # if type(v) == 'string' v = string.escape(v, true) end
r.push(string.format("%s:%s", json.dump(str(k)), json.dump(v)))
end
+ self.persist_post()
return "{" + r.concat(",") + "}"
end
#############################################################
- # fromjson()
+ # Session::fromjson()
#
# reads a map and load arguments
# returns an new instance of session
#############################################################
- static def fromjson(store, values)
+ static def fromjson(store, values, fabric)
import string
import introspect
- var self = matter.Session(store)
+ var self = matter.Session(store, nil, nil, fabric)
for k:values.keys()
var v = values[k]
- if k == "counter_rcv" self.counter_rcv.reset(int(v))
- elif k == "counter_snd" self.counter_snd.reset(int(v))
- else
- # standard values
- if type(v) == 'string'
- if string.find(v, "0x") == 0 # treat as bytes
- introspect.set(self, k, bytes().fromhex(v[2..]))
- elif string.find(v, "$$") == 0 # treat as bytes
- introspect.set(self, k, bytes().fromb64(v[2..]))
- else
- introspect.set(self, k, v)
- end
+ # standard values
+ if type(v) == 'string'
+ if string.find(v, "0x") == 0 # treat as bytes
+ introspect.set(self, k, bytes().fromhex(v[2..]))
+ elif string.find(v, "$$") == 0 # treat as bytes
+ introspect.set(self, k, bytes().fromb64(v[2..]))
else
introspect.set(self, k, v)
end
+ else
+ introspect.set(self, k, v)
end
end
-
+ self.hydrate_post()
return self
end
#############################################################
# Callback to Session store
def save()
- self.__store.save()
+ self._store.save_fabrics()
end
#############################################################
@@ -377,234 +443,6 @@ end
matter.Session = Matter_Session
-#################################################################################
-# Matter_Session_Store class
-#################################################################################
-class Matter_Session_Store
- var sessions
- static var FILENAME = "_matter_sessions.json"
-
- #############################################################
- def init()
- self.sessions = []
- end
-
- #############################################################
- # add session
- def create_session(local_session_id, initiator_session_id)
- var session = self.get_session_by_local_session_id(local_session_id)
- if session != nil self.remove_session(session) end
- session = matter.Session(self, local_session_id, initiator_session_id)
- self.sessions.push(session)
- return session
- end
-
- #############################################################
- # add session
- def add_session(s, expires_in_seconds)
- if expires_in_seconds != nil
- s.set_expire_in_seconds(expires_in_seconds)
- end
- self.sessions.push(s)
- end
-
- #############################################################
- def get_session_by_local_session_id(id)
- if id == nil return nil end
- var sz = size(self.sessions)
- var i = 0
- var sessions = self.sessions
- while i < sz
- if sessions[i].local_session_id == id return sessions[i] end
- i += 1
- end
- end
-
- #############################################################
- def get_session_by_source_node_id(nodeid)
- if nodeid == nil return nil end
- var sz = size(self.sessions)
- var i = 0
- var sessions = self.sessions
- while i < sz
- if sessions[i].source_node_id == nodeid return sessions[i] end
- i += 1
- end
- end
-
- #############################################################
- # Remove session by reference
- #
- def remove_session(s)
- var i = 0
- var sessions = self.sessions
- while i < size(self.sessions)
- if sessions[i] == s
- sessions.remove(i)
- else
- i += 1
- end
- end
- end
-
- #############################################################
- # Remove session by reference
- #
- # remove all other sessions that have the same:
- # fabric / deviceid / fc
- def remove_redundant_session(s)
- var i = 0
- var sessions = self.sessions
- while i < size(self.sessions)
- var session = sessions[i]
- if session != s && session.fabric == s.fabric && session.deviceid == s.deviceid #- && session.fabric_compressed == s.fabric_compressed -#
- sessions.remove(i)
- else
- i += 1
- end
- end
- end
-
- #############################################################
- # Generate a new local_session_id
- def gen_local_session_id()
- import crypto
- while true
- var candidate_local_session_id = crypto.random(2).get(0, 2)
-
- if self.get_session_by_local_session_id(candidate_local_session_id) == nil
- return candidate_local_session_id
- end
-
- end
- end
-
- #############################################################
- # remove_expired
- #
- # Check is any session has expired
- def remove_expired()
- var dirty = false
- var i = 0
- var sessions = self.sessions
- while i < size(self.sessions)
- if sessions[i].has_expired()
- if sessions[i]._persist dirty = true end # do we need to save
- sessions.remove(i)
- else
- i += 1
- end
- end
- if dirty self.save() end
- end
- def every_second()
- self.remove_expired()
- end
-
- #############################################################
- # find or create a session for unencrypted traffic
- # expires in `expire` seconds
- def find_session_source_id_unsecure(source_node_id, expire)
- var session = self.get_session_by_source_node_id(source_node_id)
- if session == nil
- session = matter.Session(self, 0, 0)
- session.source_node_id = source_node_id
- self.sessions.push(session)
- end
- session.set_expire_in_seconds(expire)
- return session
- end
-
- #############################################################
- # find session by resumption id
- def find_session_by_resumption_id(resumption_id)
- if !resumption_id return nil end
- var i = 0
- var sessions = self.sessions
- while i < size(sessions)
- if sessions[i].resumption_id == resumption_id
- return sessions[i]
- end
- i += 1
- end
- end
-
- #############################################################
- # list of sessions that are active, i.e. have been
- # successfully commissioned
- #
- def sessions_active()
- var ret = []
- var idx = 0
- while idx < size(self.sessions)
- var session = self.sessions[idx]
- if session.get_deviceid() && session.get_fabric()
- ret.push(session)
- end
- idx += 1
- end
- return ret
- end
-
- #############################################################
- def save()
- import json
- self.remove_expired() # clean before saving
-
- var j = []
- for v:self.sessions
- if v._persist
- j.push(v.tojson())
- end
- end
- var j_size = size(j)
- j = "[" + j.concat(",") + "]"
-
- try
- import string
- var f = open(self.FILENAME, "w")
- f.write(j)
- f.close()
- tasmota.log(string.format("MTR: Saved %i session(s)", j_size), 2)
- return j
- except .. as e, m
- tasmota.log("MTR: Session_Store::save Exception:" + str(e) + "|" + str(m), 2)
- return j
- end
- end
-
- #############################################################
- def load()
- import string
- try
- self.sessions = [] # remove any left-over
- var f = open(self.FILENAME)
- var s = f.read()
- f.close()
-
- import json
- var j = json.load(s)
- s = nil
- tasmota.gc() # clean-up a potential long string
-
- for v:j # iterate on values
- var session = matter.Session.fromjson(self, v)
- if session != nil
- self.add_session(session)
- end
- end
-
- tasmota.log(string.format("MTR: Loaded %i session(s)", size(self.sessions)), 2)
- except .. as e, m
- if e != "io_error"
- tasmota.log("MTR: Session_Store::load Exception:" + str(e) + "|" + str(m), 2)
- end
- end
- self.remove_expired() # clean after load
- end
-end
-matter.Session_Store = Matter_Session_Store
-
#-
# Unit test
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Session_Store.be b/lib/libesp32/berry_matter/src/embedded/Matter_Session_Store.be
new file mode 100644
index 000000000..86e9af6c9
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_Session_Store.be
@@ -0,0 +1,391 @@
+#
+# Matter_Session_Store.be - Support for Matter Session Store
+#
+# Copyright (C) 2023 Stephan Hadinger & Theo Arends
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+
+import matter
+
+#@ solidify:Matter_Session_Store,weak
+
+# for compilation
+class Matter_Expirable end
+
+#################################################################################
+#################################################################################
+#################################################################################
+# Matter_Session_Store class
+#################################################################################
+#################################################################################
+#################################################################################
+class Matter_Session_Store
+ var sessions
+ var fabrics # list of provisioned fabrics
+ static var _FABRICS = "_matter_fabrics.json"
+
+ #############################################################
+ def init()
+ self.sessions = matter.Expirable_list()
+ self.fabrics = matter.Expirable_list()
+ end
+
+ #############################################################
+ # add provisioned fabric
+ def add_fabric(fabric)
+ if !isinstance(fabric, matter.Fabric) raise "value_error", "must be of class matter.Fabric" end
+ if self.fabrics.find(fabric) == nil
+ self.remove_redundant_fabric(fabric)
+ self.fabrics.push(fabric)
+ end
+ end
+
+ #############################################################
+ # remove fabric
+ def remove_fabric(fabric)
+ var idx = 0
+ while idx < size(self.sessions)
+ if self.sessions[idx]._fabric == fabric
+ self.sessions.remove(idx)
+ else
+ idx += 1
+ end
+ end
+ self.fabrics.remove(self.fabrics.find(fabric)) # fail safe
+ end
+
+ #############################################################
+ # Remove redudant fabric
+ #
+ # remove all other fabrics that have the same:
+ # fabric_id / device_id
+ def remove_redundant_fabric(f)
+ var i = 0
+ while i < size(self.fabrics)
+ var fabric = self.fabrics[i]
+ if fabric != f && fabric.fabric_id == f.fabric_id && fabric.device_id == f.device_id
+ self.fabrics.remove(i)
+ else
+ i += 1
+ end
+ end
+ end
+
+ #############################################################
+ # Returns an iterator on active fabrics
+ def active_fabrics()
+ self.remove_expired() # clean before
+ return self.fabrics.persistables()
+ end
+
+ #############################################################
+ # Count active fabrics
+ #
+ # Count the number of commissionned fabrics, i.e. persisted
+ def count_active_fabrics()
+ self.remove_expired() # clean before
+ return self.fabrics.count_persistables()
+ end
+
+ #############################################################
+ # Find fabric by index number
+ #
+ def find_fabric_by_index(fabric_index)
+ for fab : self.active_fabrics()
+ if fab.get_fabric_index() == fabric_index
+ return fab
+ end
+ end
+ return nil
+ end
+
+ #############################################################
+ # Find children fabrics
+ #
+ # Find all children fabrics recursively and collate in array
+ # includes the parent fabric as first element
+ #
+ # Ex:
+ # matter_device.sessions.fabrics[1].fabric_parent = 1
+ # matter_device.sessions.find_children_fabrics(1)
+ #
+ def find_children_fabrics(parent_index)
+ if parent_index == nil return [] end
+ var ret = [ parent_index ]
+
+ def find_children_fabrics_inner(index)
+ for fab: self.active_fabrics()
+ if fab.fabric_parent == index
+ # protect against infinite loops
+ if ret.find() == nil
+ var sub_index = fab.fabric_index
+ ret.push(sub_index)
+ find_children_fabrics_inner(sub_index)
+ end
+ end
+ end
+ end
+
+ find_children_fabrics_inner(parent_index)
+
+ # ret contains a list of indices
+ return ret
+ end
+
+ #############################################################
+ # Next fabric-idx
+ #
+ # starts at `1`, computes the next available fabric-idx
+ def next_fabric_idx()
+ self.remove_expired() # clean before
+ var next_idx = 1
+ for fab: self.active_fabrics()
+ var fab_idx = fab.fabric_index
+ if type(fab_idx) == 'int' && fab_idx >= next_idx
+ next_idx = fab_idx + 1
+ end
+ end
+ return next_idx
+ end
+
+ #############################################################
+ # add session
+ def create_session(local_session_id, initiator_session_id)
+ var session = self.get_session_by_local_session_id(local_session_id)
+ if session != nil self.remove_session(session) end
+ session = matter.Session(self, local_session_id, initiator_session_id)
+ self.sessions.push(session)
+ return session
+ end
+
+ #############################################################
+ # add session
+ def add_session(s, expires_in_seconds)
+ if expires_in_seconds != nil
+ s.set_expire_in_seconds(expires_in_seconds)
+ end
+ self.sessions.push(s)
+ end
+
+ #############################################################
+ def get_session_by_local_session_id(id)
+ if id == nil return nil end
+ var sz = size(self.sessions)
+ var i = 0
+ var sessions = self.sessions
+ while i < sz
+ var session = sessions[i]
+ if session.local_session_id == id
+ session.update()
+ return session
+ end
+ i += 1
+ end
+ end
+
+ #############################################################
+ def get_session_by_source_node_id(nodeid)
+ if nodeid == nil return nil end
+ var sz = size(self.sessions)
+ var i = 0
+ var sessions = self.sessions
+ while i < sz
+ var session = sessions[i]
+ if session._source_node_id == nodeid
+ session.update()
+ return session
+ end
+ i += 1
+ end
+ end
+
+ #############################################################
+ # Remove session by reference
+ #
+ def remove_session(s)
+ var i = 0
+ var sessions = self.sessions
+ while i < size(self.sessions)
+ if sessions[i] == s
+ sessions.remove(i)
+ else
+ i += 1
+ end
+ end
+ end
+
+ #############################################################
+ # Generate a new local_session_id
+ def gen_local_session_id()
+ import crypto
+ while true
+ var candidate_local_session_id = crypto.random(2).get(0, 2)
+
+ if self.get_session_by_local_session_id(candidate_local_session_id) == nil
+ return candidate_local_session_id
+ end
+
+ end
+ end
+
+ #############################################################
+ # remove_expired
+ #
+ def remove_expired()
+ self.sessions.every_second()
+ self.fabrics.every_second()
+ end
+
+ #############################################################
+ # call remove_expired every second
+ #
+ def every_second()
+ self.remove_expired()
+ end
+
+ #############################################################
+ # find or create a session for unencrypted traffic
+ # expires in `expire` seconds
+ def find_session_source_id_unsecure(source_node_id, expire)
+ var session = self.get_session_by_source_node_id(source_node_id)
+ if session == nil
+ session = matter.Session(self, 0, 0)
+ session._source_node_id = source_node_id
+ self.sessions.push(session)
+ session.set_expire_in_seconds(expire)
+ end
+ session.update()
+ return session
+ end
+
+ #############################################################
+ # find session by resumption id
+ def find_session_by_resumption_id(resumption_id)
+ import string
+ if !resumption_id return nil end
+ var i = 0
+ var sessions = self.sessions
+ while i < size(sessions)
+ var session = sessions[i]
+ tasmota.log(string.format("MTR: session.resumption_id=%s vs %s", str(session.resumption_id), str(resumption_id)))
+ if session.resumption_id == resumption_id && session.shared_secret != nil
+ tasmota.log(string.format("MTR: session.shared_secret=%s", str(session.shared_secret)))
+ session.update()
+ return session
+ end
+ i += 1
+ end
+ end
+
+ #############################################################
+ # list of sessions that are active, i.e. have been
+ # successfully commissioned
+ #
+ def sessions_active()
+ var ret = []
+ var idx = 0
+ while idx < size(self.sessions)
+ var session = self.sessions[idx]
+ if session.get_device_id() && session.get_fabric_id()
+ ret.push(session)
+ end
+ idx += 1
+ end
+ return ret
+ end
+
+ #############################################################
+ def save_fabrics()
+ import json
+ self.remove_expired() # clean before saving
+ var sessions_saved = 0
+
+ var fabs = []
+ for f : self.fabrics.persistables()
+ for _ : f._sessions.persistables() sessions_saved += 1 end # count persitable sessions
+ fabs.push(f.tojson())
+ end
+ var fabs_size = size(fabs)
+ fabs = "[" + fabs.concat(",") + "]"
+
+ try
+ import string
+
+ var f = open(self._FABRICS, "w")
+ f.write(fabs)
+ f.close()
+ tasmota.log(string.format("MTR: =Saved %i fabric(s) and %i session(s)", fabs_size, sessions_saved), 2)
+ except .. as e, m
+ tasmota.log("MTR: Session_Store::save Exception:" + str(e) + "|" + str(m), 2)
+ end
+ end
+
+ #############################################################
+ # load fabrics and associated sessions
+ def load_fabrics()
+ import string
+ try
+ self.sessions = matter.Expirable_list() # remove any left-over
+ self.fabrics = matter.Expirable_list() # remove any left-over
+ var f = open(self._FABRICS)
+ var file_content = f.read()
+ f.close()
+
+ import json
+ var file_json = json.load(file_content)
+ file_content = nil
+ tasmota.gc() # clean-up a potential long string
+
+ for v : file_json # iterate on values
+ # read fabric
+ var fabric = matter.Fabric.fromjson(self, v)
+ fabric.set_no_expiration()
+ fabric.set_persist(true)
+
+ # iterate on sessions
+ var sessions_json = v.find("_sessions", [])
+
+ for sess_json : sessions_json
+ var session = matter.Session.fromjson(self, sess_json, fabric)
+ if session != nil
+ session.set_no_expiration()
+ session.set_persist(true)
+ self.add_session(session)
+ fabric.add_session(session)
+ end
+ end
+
+ self.fabrics.push(fabric)
+ end
+
+ tasmota.log(string.format("MTR: Loaded %i fabric(s)", size(self.fabrics)), 2)
+ except .. as e, m
+ if e != "io_error"
+ tasmota.log("MTR: Session_Store::load Exception:" + str(e) + "|" + str(m), 2)
+ end
+ end
+ # persistables are normally not expiring
+ # if self.remove_expired() # clean after load
+ # self.save_fabrics()
+ # end
+ end
+
+ #############################################################
+ def create_fabric()
+ var fabric = matter.Fabric(self)
+ return fabric
+ end
+end
+matter.Session_Store = Matter_Session_Store
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_TLV.be b/lib/libesp32/berry_matter/src/embedded/Matter_TLV.be
index 8e927da7c..5aae42d03 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_TLV.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_TLV.be
@@ -46,6 +46,20 @@ class Matter_TLV
]
# type values (enum like)
+ #
+ # Type|Description
+ # :----|:---
+ # I1 I2 I4|Signed integer of at most (1/2/4) bytes (as 32 bits signed Berry type)
+ # U1 U2 U4|Unsiged integer of at motst (1/2/4) bytes (as 32 bits signed Berry type, be careful when comparing. Use `matter.Counter.is_greater(a,b)`)
+ # I8 U8|Signed/insigned 8 bytes. You can pass `bytes(8)`, `int64()` or `int`. Type is collapsed to a lower type if possible when encoding.
+ # BOOL|boolean, takes `true` and `false`. Abstracts the internal `BTRUE` and `BFALSE` that you don't need to use
+ # FLOAT|32 bites float
+ # UTF1 UTF2|String as UTF, size is encoded as 1 or 2 bytes automatically
+ # B1 B2|raw `bytes()`, size is encoded as 1 or 2 bytes automatically
+ # NULL|takes only `nil` value
+ # STRUCT ARRAY LIST EOC|(internal) Use through abstractions
+ # DOUBLE UTF4 UTF8 B4 B8|Unsuppored in Tasmota
+
static var I1 = 0x00
static var I2 = 0x01
static var I4 = 0x02
@@ -107,7 +121,7 @@ class Matter_TLV
#############################################################
# create simple TLV
static def create_TLV(t, value)
- if value != nil
+ if value != nil || t == 0x14 #-t == matter.TLV.NULL-# # put the actual number for performance
var v = _class() # parent is nil
v.typ = t
v.val = value
@@ -206,7 +220,7 @@ class Matter_TLV
# encode TLV
#
# appends to the bytes() object
- def encode(b)
+ def tlv2raw(b)
var TLV = self.TLV
if b == nil b = bytes() end # start new buffer if none passed
@@ -297,6 +311,83 @@ class Matter_TLV
return b
end
+ #############################################################
+ # compute the length in bytes of encoded TLV without actually
+ # allocating buffers (faster and no memory fragmentation)
+ #
+ # returns a number of bytes
+ def encode_len()
+ var TLV = self.TLV
+ var len = 0
+
+ # special case for bool
+ # we need to change the type according to the value
+ if self.typ == TLV.BFALSE || self.typ == TLV.BTRUE
+ self.typ = bool(self.val) ? TLV.BTRUE : TLV.BFALSE
+ # try to compress ints
+ elif self.typ >= TLV.I2 && self.typ <= TLV.I4
+ var i = int(self.val)
+ if i <= 127 && i >= -128 self.typ = TLV.I1
+ elif i <= 32767 && i >= -32768 self.typ = TLV.I2
+ end
+ elif self.typ >= TLV.U2 && self.typ <= TLV.U4
+ var i = int(self.val)
+ if i <= 255 && i >= 0 self.typ = TLV.U1
+ elif i <= 65535 && i >= 0 self.typ = TLV.U2
+ end
+ elif self.typ >= TLV.B1 && self.typ <= TLV.B8 # encode length as minimum possible
+ if size(self.val) <= 255
+ self.typ = TLV.B1
+ elif size(self.val) <= 65535
+ self.typ = TLV.B2
+ else
+ self.typ = TLV.B4 # B4 is unlikely, B8 is impossible
+ end
+ elif self.typ >= TLV.UTF1 && self.typ <= TLV.UTF8
+ if size(self.val) <= 255
+ self.typ = TLV.UTF1
+ elif size(self.val) <= 65535
+ self.typ = TLV.UTF2
+ else
+ self.typ = TLV.UTF4 # UTF4 is unlikely, UTF8 is impossible
+ end
+ end
+
+ # encode tag and type
+ len += self._encode_tag_len()
+ # encode value
+
+ if self.typ == TLV.I1 || self.typ == TLV.U1
+ len += 1
+ elif self.typ == TLV.I2 || self.typ == TLV.U2
+ len += 2
+ elif self.typ == TLV.I4 || self.typ == TLV.U4
+ len += 4
+ elif self.typ == TLV.I8 || self.typ == TLV.U8
+ len += 8
+ elif self.typ == TLV.BFALSE || self.typ == TLV.BTRUE
+ # push nothing
+ elif self.typ == TLV.FLOAT
+ len += 4
+ elif self.typ == TLV.DOUBLE
+ raise "value_error", "Unsupported type TLV.DOUBLE"
+ elif self.typ == TLV.UTF1
+ len += 1 + size(self.val)
+ elif self.typ == TLV.UTF2
+ len += 2 + size(self.val)
+ elif self.typ == TLV.B1
+ len += 1 + size(self.val)
+ elif self.typ == TLV.B2
+ len += 2 + size(self.val)
+ elif self.typ == TLV.NULL
+ # push nothing
+ else
+ raise "value_error", "unsupported type " + str(self.typ)
+ end
+
+ return len
+ end
+
#############################################################
# internal_function
# encode Tag+Type as the first bytes
@@ -341,6 +432,39 @@ class Matter_TLV
end
end
+ #############################################################
+ # internal_function
+ # compute len of Tag+Type as the first bytes
+ def _encode_tag_len()
+ var tag_number = self.tag_number != nil ? self.tag_number : 0
+ var tag_huge = (tag_number >= 65536) || (tag_number < 0)
+ var tag_control = 0x00
+ if self.tag_vendor != nil
+ # full encoding
+ if tag_huge
+ return 9
+ else
+ return 7
+ end
+ elif self.tag_profile == -1 # Matter Common profile
+ if tag_huge
+ return 5
+ else
+ return 3
+ end
+ elif self.tag_profile != nil
+ if tag_huge
+ return 5
+ else
+ return 3
+ end
+ elif self.tag_sub != nil
+ return 2
+ else # anonymous tag
+ return 1
+ end
+ end
+
#############################################################
# Compare the value index with an element
# returns:
@@ -494,22 +618,21 @@ class Matter_TLV
end
#############################################################
- # encode TLV
- #
- # appends to the bytes() object
- def _encode_inner(b, is_struct)
+ # encode to bytes
+ def tlv2raw(b)
if b == nil b = bytes() end
# encode tag and type
self._encode_tag(b)
# sort values
- var val_list = self.val.copy()
- if is_struct
+ var val_list = self.val
+ if self.is_struct
+ val_list = val_list.copy()
self.sort(val_list)
end
# output each one after the other
for v : val_list
- v.encode(b)
+ v.tlv2raw(b)
end
# add 'end of container'
@@ -519,9 +642,22 @@ class Matter_TLV
end
#############################################################
- # encode to bytes
- def encode(b)
- return self._encode_inner(b, self.is_struct)
+ # compute the length in bytes of encoded TLV without actually
+ # allocating buffers (faster and no memory fragmentation)
+ #
+ # returns a number of bytes
+ def encode_len()
+ # tag and type
+ var len = self._encode_tag_len()
+ # output each one after the other, order doesn't infulence size
+ var idx = 0
+ while idx < size(self.val)
+ len += self.val[idx].encode_len()
+ idx += 1
+ end
+ # add 'end of container'
+ len += 1
+ return len
end
#############################################################
@@ -760,117 +896,52 @@ matter.TLV = Matter_TLV
# Test
import matter
-#load("Matter_TLV.be")
+def test_TLV(b, s)
+ var m = matter.TLV.parse(b)
+ assert(m.tostring() == s)
+ assert(m.tlv2raw() == b)
+ assert(m.encode_len() == size(b))
+end
-var m
-m = matter.TLV.parse(bytes("2502054C"))
-assert(m.tostring() == "2 = 19461U")
-assert(m.encode() == bytes("2502054C"))
+test_TLV(bytes("2502054C"), "2 = 19461U")
+test_TLV(bytes("0001"), "1")
+test_TLV(bytes("08"), "false")
+test_TLV(bytes("09"), "true")
-m = matter.TLV.parse(bytes("0001"))
-assert(m.tostring() == "1")
-assert(m.encode() == bytes("0001"))
+test_TLV(bytes("00FF"), "-1")
+test_TLV(bytes("05FFFF"), "65535U")
-m = matter.TLV.parse(bytes("08"))
-assert(m.tostring() == "false")
-assert(m.encode() == bytes("08"))
-m = matter.TLV.parse(bytes("09"))
-assert(m.tostring() == "true")
-assert(m.encode() == bytes("09"))
-
-m = matter.TLV.parse(bytes("01FFFF"))
-assert(m.tostring() == "-1")
-assert(m.encode() == bytes("00FF"))
-m = matter.TLV.parse(bytes("05FFFF"))
-assert(m.tostring() == "65535U")
-assert(m.encode() == bytes("05FFFF"))
-
-m = matter.TLV.parse(bytes("0A0000C03F"))
-assert(m.tostring() == "1.5")
-assert(m.encode() == bytes("0A0000C03F"))
-
-m = matter.TLV.parse(bytes("0C06466f6f626172"))
-assert(m.tostring() == '"Foobar"')
-assert(m.encode() == bytes("0C06466f6f626172"))
-
-m = matter.TLV.parse(bytes("1006466f6f626172"))
-assert(m.tostring() == "466F6F626172")
-assert(m.encode() == bytes("1006466f6f626172"))
-
-m = matter.TLV.parse(bytes("e4f1ffeddeedfe55aa2a"))
-assert(m.tostring() == "0xFFF1::0xDEED:0xAA55FEED = 42U")
-assert(m.encode() == bytes("e4f1ffeddeedfe55aa2a"))
-
-
-m = matter.TLV.parse(bytes("300120D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D66"))
-assert(m.tostring() == "1 = D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D66")
-assert(m.encode() == bytes("300120D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D66"))
+test_TLV(bytes("0A0000C03F"), "1.5")
+test_TLV(bytes("0C06466f6f626172"), '"Foobar"')
+test_TLV(bytes("1006466f6f626172"), "466F6F626172")
+test_TLV(bytes("e4f1ffeddeedfe55aa2a"), "0xFFF1::0xDEED:0xAA55FEED = 42U")
+test_TLV(bytes("300120D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D66"), "1 = D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D66")
# context specific
-m = matter.TLV.parse(bytes("24012a"))
-assert(m.tostring() == "1 = 42U")
-assert(m.encode() == bytes("24012a"))
-
-m = matter.TLV.parse(bytes("4401002a"))
-assert(m.tostring() == "Matter::0x00000001 = 42U")
-assert(m.encode() == bytes("4401002a"))
+test_TLV(bytes("24012a"), "1 = 42U")
+test_TLV(bytes("4401002a"), "Matter::0x00000001 = 42U")
# int64
-m = matter.TLV.parse(bytes("030102000000000000"))
-assert(m.tostring() == "513")
-assert(m.encode() == bytes("030102000000000000"))
-
-m = matter.TLV.parse(bytes("070102000000000000"))
-assert(m.tostring() == "513U")
-assert(m.encode() == bytes("070102000000000000"))
-
-m = matter.TLV.parse(bytes("03FFFFFFFFFFFFFFFF"))
-assert(m.tostring() == "-1")
-assert(m.encode() == bytes("03FFFFFFFFFFFFFFFF"))
-
-m = matter.TLV.parse(bytes("07FFFFFFFFFFFFFF7F"))
-assert(m.tostring() == "9223372036854775807U")
-assert(m.encode() == bytes("07FFFFFFFFFFFFFF7F"))
+test_TLV(bytes("030102000000000000"), "513")
+test_TLV(bytes("070102000000000000"), "513U")
+test_TLV(bytes("03FFFFFFFFFFFFFFFF"), "-1")
+test_TLV(bytes("07FFFFFFFFFFFFFF7F"), "9223372036854775807U")
# structure
-m = matter.TLV.parse(bytes("1518"))
-assert(m.tostring() == "{}")
-assert(m.encode() == bytes("1518"))
-
-m = matter.TLV.parse(bytes("15300120D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D662502054C240300280418"))
-assert(m.tostring() == "{1 = D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D66, 2 = 19461U, 3 = 0U, 4 = false}")
-assert(m.encode() == bytes("15300120D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D662502054C240300280418"))
-
-m = matter.TLV.parse(bytes("15300120D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D662502054C240300280435052501881325022C011818"))
-assert(m.tostring() == "{1 = D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D66, 2 = 19461U, 3 = 0U, 4 = false, 5 = {1 = 5000U, 2 = 300U}}")
-assert(m.encode() == bytes("15300120D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D662502054C240300280435052501881325022C011818"))
+test_TLV(bytes("1518"), "{}")
+test_TLV(bytes("15300120D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D662502054C240300280418"), "{1 = D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D66, 2 = 19461U, 3 = 0U, 4 = false}")
+test_TLV(bytes("15300120D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D662502054C240300280435052501881325022C011818"), "{1 = D2DAEE8760C9B1D1B25E0E2E4DD6ECA8AEF6193C0203761356FCB06BBEDD7D66, 2 = 19461U, 3 = 0U, 4 = false, 5 = {1 = 5000U, 2 = 300U}}")
# list
-m = matter.TLV.parse(bytes("1718"))
-assert(m.tostring() == "[[]]")
-assert(m.encode() == bytes("1718"))
-
-m = matter.TLV.parse(bytes("17000120002a000200032000ef18"))
-assert(m.tostring() == "[[1, 0 = 42, 2, 3, 0 = -17]]")
-assert(m.encode() == bytes("17000120002a000200032000ef18"))
-
+test_TLV(bytes("1718"), "[[]]")
+test_TLV(bytes("17000120002a000200032000ef18"), "[[1, 0 = 42, 2, 3, 0 = -17]]")
# array
-m = matter.TLV.parse(bytes("1618"))
-assert(m.tostring() == "[]")
-assert(m.encode() == bytes("1618"))
-
-m = matter.TLV.parse(bytes("160000000100020003000418"))
-assert(m.tostring() == "[0, 1, 2, 3, 4]")
-assert(m.encode() == bytes("160000000100020003000418"))
+test_TLV(bytes("1618"), "[]")
+test_TLV(bytes("160000000100020003000418"), "[0, 1, 2, 3, 4]")
# mix
-m = matter.TLV.parse(bytes("16002a02f067fdff15180a33338f410c0648656c6c6f2118"))
-assert(m.tostring() == '[42, -170000, {}, 17.9, "Hello!"]')
-assert(m.encode() == bytes("16002a02f067fdff15180a33338f410c0648656c6c6f2118"))
-
-m = matter.TLV.parse(bytes("153600172403312504FCFF18172402002403302404001817240200240330240401181724020024033024040218172402002403302404031817240200240328240402181724020024032824040418172403312404031818280324FF0118"))
-assert(m.tostring() == '{0 = [[[3 = 49U, 4 = 65532U]], [[2 = 0U, 3 = 48U, 4 = 0U]], [[2 = 0U, 3 = 48U, 4 = 1U]], [[2 = 0U, 3 = 48U, 4 = 2U]], [[2 = 0U, 3 = 48U, 4 = 3U]], [[2 = 0U, 3 = 40U, 4 = 2U]], [[2 = 0U, 3 = 40U, 4 = 4U]], [[3 = 49U, 4 = 3U]]], 3 = false, 255 = 1U}')
-assert(m.encode() == bytes("153600172403312504FCFF18172402002403302404001817240200240330240401181724020024033024040218172402002403302404031817240200240328240402181724020024032824040418172403312404031818280324FF0118"))
+test_TLV(bytes("16002a02f067fdff15180a33338f410c0648656c6c6f2118"), '[42, -170000, {}, 17.9, "Hello!"]')
+test_TLV(bytes("153600172403312504FCFF18172402002403302404001817240200240330240401181724020024033024040218172402002403302404031817240200240328240402181724020024032824040418172403312404031818280324FF0118"), '{0 = [[[3 = 49U, 4 = 65532U]], [[2 = 0U, 3 = 48U, 4 = 0U]], [[2 = 0U, 3 = 48U, 4 = 1U]], [[2 = 0U, 3 = 48U, 4 = 2U]], [[2 = 0U, 3 = 48U, 4 = 3U]], [[2 = 0U, 3 = 40U, 4 = 2U]], [[2 = 0U, 3 = 40U, 4 = 4U]], [[3 = 49U, 4 = 3U]]], 3 = false, 255 = 1U}')
-#
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_UDPServer.be b/lib/libesp32/berry_matter/src/embedded/Matter_UDPServer.be
index 75df885c3..3578b7155 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_UDPServer.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_UDPServer.be
@@ -33,33 +33,28 @@ import matter
# A packet that needs to be resent if not acknowledged by the other party
#################################################################################
class Matter_UDPPacket_sent
- static var RETRY_MS = 500 # retry every 500 ms
- static var RETRIES = 4 # retry every 500 ms
var raw # bytes() to be sent
var addr # ip_address (string)
var port # port (int)
- var msg_id # (int) message identifier that needs to be acknowledged
- var retries # how many retries are allowed, when `0` drop and log
+ var msg_id # (int) message identifier that needs to be acknowledged, or `nil` if no ack needed
+ var exchange_id # (int) exchange id, to match ack
+ var session_id # (int) session id, for logging only
+ var retries # 0 in first attempts, goes up to RETRIES
var next_try # timestamp (millis) when to try again
- def init(raw, addr, port, id)
- self.raw = raw
- self.addr = addr
- self.port = port
- self.msg_id = id
- self.retries = self.RETRIES
- self.next_try = tasmota.millis() + self.RETRY_MS
+ def init(msg)
+ # extract information from msg
+ self.raw = msg.raw
+ self.addr = msg.remote_ip
+ self.port = msg.remote_port
+ self.msg_id = msg.x_flag_r ? msg.message_counter : nil
+ self.exchange_id = (msg.exchange_id != nil) ? msg.exchange_id : 0
+ self.session_id = (msg.local_session_id != nil) ? msg.local_session_id : 0
+ # other information
+ self.retries = 0
+ self.next_try = tasmota.millis() + matter.UDPServer._backoff_time(self.retries)
end
- def send(udp_socket)
- import string
- var ok = udp_socket.send(self.addr ? self.addr : udp_socket.remote_ip, self.port ? self.port : udp_socket.remote_port, self.raw)
- if ok
- tasmota.log(string.format("MTR: sending packet to '[%s]:%i'", self.addr, self.port), 3)
- else
- tasmota.log(string.format("MTR: failed to send packet to '[%s]:%i'", self.addr, self.port), 2)
- end
- end
end
matter.UDPPacket_sent = Matter_UDPPacket_sent
@@ -68,31 +63,35 @@ matter.UDPPacket_sent = Matter_UDPPacket_sent
#
#################################################################################
class Matter_UDPServer
+ static var RETRIES = 5 # 6 transmissions max (5 retries) - 1 more than spec `MRP_MAX_TRANSMISSIONS` 4.11.8 p.146
static var MAX_PACKETS_READ = 4 # read at most 4 packets per tick
- var address, port # local address and port
+ var addr, port # local addr and port
var listening # true if active
var udp_socket
var dispatch_cb # callback to call when a message is received
- var packets_sent # map of packets sent to be acknowledged
+ var packets_sent # list map of packets sent to be acknowledged
#############################################################
- def init(address, port)
- self.address = address ? address : ""
+ # Init UDP Server listening to `addr` and `port` (opt).
+ #
+ # By default, the server listens to `""` (all addresses) and port `5540`
+ def init(addr, port)
+ self.addr = addr ? addr : ""
self.port = port ? port : 5540
self.listening = false
- self.packets_sent = {}
+ self.packets_sent = []
end
#############################################################
- # start the server
- # raises an exception if something is wrong
- # registers as device handle
+ # Starts the server.
+ # Registers as device handler to Tasmota
#
- # `cb`: callback to call when a message is received
+ # `cb(packet, from_addr, from_port)`: callback to call when a message is received.
+ # Raises an exception if something is wrong.
def start(cb)
if !self.listening
self.udp_socket = udp()
- var ok = self.udp_socket.begin(self.address, self.port)
+ var ok = self.udp_socket.begin(self.addr, self.port)
if !ok raise "network_error", "could not open UDP server" end
self.listening = true
self.dispatch_cb = cb
@@ -101,8 +100,7 @@ class Matter_UDPServer
end
#############################################################
- # stop the server
- # remove driver
+ # Stops the server and remove driver
def stop()
if self.listening
self.udp_socket.stop()
@@ -112,6 +110,11 @@ class Matter_UDPServer
end
#############################################################
+ # At every tick:
+ # Check if a packet has arrived, and dispatch to `cb`.
+ # Read at most `MAX_PACKETS_READ (4) packets at each tick to
+ # avoid any starvation.
+ # Then resend queued outgoing packets.
def every_50ms()
import string
var packet_read = 0
@@ -122,7 +125,7 @@ class Matter_UDPServer
packet_read += 1
var from_addr = self.udp_socket.remote_ip
var from_port = self.udp_socket.remote_port
- tasmota.log(string.format("MTR: UDP received from [%s]:%i", from_addr, from_port), 4)
+ tasmota.log(string.format("MTR: UDP received from [%s]:%i", from_addr, from_port), 3)
if self.dispatch_cb
self.dispatch_cb(packet, from_addr, from_port)
end
@@ -133,41 +136,81 @@ class Matter_UDPServer
packet = nil
end
end
- self.resend_packets() # resend any packet
+ self._resend_packets() # resend any packet
end
#############################################################
- def resend_packets()
- for packet:self.packets_sent
+ # Send packet now.
+ #
+ # Returns `true` if packet was successfully sent.
+ def send(packet)
+ import string
+ var ok = self.udp_socket.send(packet.addr ? packet.addr : self.udp_socket.remote_ip, packet.port ? packet.port : self.udp_socket.remote_port, packet.raw)
+ if ok
+ tasmota.log(string.format("MTR: sending packet to '[%s]:%i'", packet.addr, packet.port), 4)
+ else
+ tasmota.log(string.format("MTR: error sending packet to '[%s]:%i'", packet.addr, packet.port), 2)
+ end
+ return ok
+ end
+
+ #############################################################
+ # Resend packets if they have not been acknowledged by receiver
+ # either with direct Ack packet or ack embedded in another packet.
+ # Packets with `id`=`nil` are not resent.
+ #
+ # Packets are re-sent at most `RETRIES` (4) times, i.e. sent maximum 5 times.
+ # Exponential backoff is added after each resending.
+ #
+ # If all retries expired, remove packet and log.
+ def _resend_packets()
+ var idx = 0
+ while idx < size(self.packets_sent)
+ var packet = self.packets_sent[idx]
if tasmota.time_reached(packet.next_try)
- tasmota.log("MTR: resending packet id=" + str(packet.msg_id), 3)
- packet.send(self.udp_socket) # resend
- packet.retries -= 1
- if packet.retries <= 0
- self.packets_sent.remove(packet.msg_id)
+ if packet.retries <= self.RETRIES
+ tasmota.log("MTR: . Resending packet id=" + str(packet.msg_id), 3)
+ self.send(packet)
+ packet.next_try = tasmota.millis() + self._backoff_time(packet.retries)
+ packet.retries += 1
+ idx += 1
else
- packet.next_try = tasmota.millis() + packet.RETRY_MS
+ import string
+ self.packets_sent.remove(idx)
+ tasmota.log(string.format("MTR: . (%6i) Unacked packet '[%s]:%i' msg_id=%i", packet.session_id, packet.addr, packet.port, packet.msg_id), 2)
end
+ else
+ idx += 1
end
end
end
#############################################################
- # just received acknowledgment, remove packet from sender
- def packet_ack(id)
+ # Just received acknowledgment, remove packet from sender
+ def received_ack(msg)
+ var id = msg.ack_message_counter
+ var exch = msg.exchange_id
if id == nil return end
- if self.packets_sent.contains(id)
- self.packets_sent.remove(id)
- tasmota.log("MTR: removed packet from sending list id=" + str(id), 3)
+ tasmota.log("MTR: receveived ACK id="+str(id), 3)
+ var idx = 0
+ while idx < size(self.packets_sent)
+ var packet = self.packets_sent[idx]
+ if packet.msg_id == id && packet.exchange_id == exch
+ self.packets_sent.remove(idx)
+ tasmota.log("MTR: . Removed packet from sending list id=" + str(id), 3)
+ else
+ idx += 1
+ end
end
end
#############################################################
- def send_response(raw, addr, port, id)
- var packet = matter.UDPPacket_sent(raw, addr, port, id)
- packet.send(self.udp_socket) # send
- if id
- self.packets_sent[id] = packet
+ # Send a packet, enqueue it if `id` is not `nil`
+ def send_UDP(msg)
+ var packet = matter.UDPPacket_sent(msg)
+ self.send(packet)
+ if packet.msg_id
+ self.packets_sent.push(packet)
end
end
@@ -175,13 +218,25 @@ class Matter_UDPServer
# placeholder, nothing to run for now
def every_second()
end
+
+ #############################################################
+ # Compute exponential backoff as per 4.11.2.1 p.137
+ static def _backoff_time(n)
+ def power_int(v, n)
+ var r = 1
+ while n > 0
+ r *= v
+ n -= 1
+ end
+ return r
+ end
+
+ import math
+ var i = 300 # SLEEPY_ACTIVE_INTERVAL
+ var rand = real(math.rand() & 0xFF) / 255 # 0..1 with reasonable granularity
+ var n_power = n > 0 ? n - 1 : 0
+ var mrpBackoffTime = i * power_int(1.6, n_power) * (1.0 + rand * 0.25 )
+ return int(mrpBackoffTime)
+ end
end
matter.UDPServer = Matter_UDPServer
-
-#-
-
-import matter
-var udps = matter.UDPServer()
-udps.listen()
-
--#
diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_UI.be b/lib/libesp32/berry_matter/src/embedded/Matter_UI.be
index 7bd6921f4..605c55738 100644
--- a/lib/libesp32/berry_matter/src/embedded/Matter_UI.be
+++ b/lib/libesp32/berry_matter/src/embedded/Matter_UI.be
@@ -70,12 +70,60 @@ class Matter_UI
webserver.content_send(string.format("
", matter_enabled ? "disable" : "enable"))
webserver.content_send(matter_enabled ? "Disable" : "Enable")
webserver.content_send(" Matter
")
-
+
webserver.content_send("
")
return matter_enabled
end
+ #- ---------------------------------------------------------------------- -#
+ #- Show QR Code
+ #- ---------------------------------------------------------------------- -#
+ def show_qrcode(qr_text)
+ import webserver
+ # QRCode via UTF8
+ var empty = " "
+ var lowhalf = "\342\226\204"
+ var uphalf = "\342\226\200"
+ var full = "\342\226\210"
+
+ var qr = matter.QRCode.encode_str(qr_text)
+ var bitmap = qr['bitmap']
+ var sz = qr['size']
+
+ webserver.content_send('')
+
+
+ webserver.content_send("")
+
+ var s = "
"
+ webserver.content_send(s)
+ s = ""
+ for i: 0 .. sz + 1 s += lowhalf end
+ s += "
"
+ webserver.content_send(s)
+ for i: 0 .. (sz+1)/2 - 1
+ s = "
" + full
+ for j: 0 .. sz - 1
+ var high = (bitmap[i*2][j] == " ")
+ var low = (i*2+1 < sz) ? (bitmap[i*2+1][j] == " ") : true # default to true for bottom margin if size is odd
+ s += high ? (low ? full : uphalf) : (low ? lowhalf : empty)
+ end
+ s += full
+ s += "
"
+ webserver.content_send(s)
+ end
+ # webserver.content_send("
")
+ if sz % 2 == 0
+ s = ""
+ for i: 0 .. sz + 1 s += uphalf end
+ s += "/
"
+ webserver.content_send(s)
+ end
+
+ webserver.content_send("
")
+ end
+
#- ---------------------------------------------------------------------- -#
#- Show commissioning information and QR Code
#- ---------------------------------------------------------------------- -#
@@ -83,24 +131,40 @@ class Matter_UI
import webserver
import string
- webserver.content_send("
Matter Passcode
")
+ var seconds_left = (self.device.commissioning_open - tasmota.millis()) / 1000
+ if seconds_left < 0 seconds_left = 0 end
+ var min_left = (seconds_left + 30) / 60
+
+ webserver.content_send(string.format(" Commissioning open for %i min
", min_left))
var pairing_code = self.device.compute_manual_pairing_code()
webserver.content_send(string.format("Manual pairing code:%s-%s-%s
", pairing_code[0..3], pairing_code[4..6], pairing_code[7..]))
-
- var qr_text = self.device.compute_qrcode_content()
- webserver.content_send('
')
- webserver.content_send(string.format('', qr_text))
- webserver.content_send(string.format("%s
", qr_text))
+ webserver.content_send(string.format(""))
+ var qr_text = self.device.compute_qrcode_content()
+ self.show_qrcode(qr_text)
+ webserver.content_send(string.format(" %s
", qr_text))
+ webserver.content_send(string.format(" "))
+
+ webserver.content_send("
")
+
+ end
+
+ #- ---------------------------------------------------------------------- -#
+ #- Show Passcode / discriminator form
+ #- ---------------------------------------------------------------------- -#
+ def show_passcode_form()
+ import webserver
+ import string
+
+ webserver.content_send(" Matter Passcode
")
webserver.content_send("")
-
-
webserver.content_send("
")
end
@@ -108,52 +172,42 @@ class Matter_UI
#- ---------------------------------------------------------------------- -#
#- Show commissioning information and QR Code
#- ---------------------------------------------------------------------- -#
- def show_session_info(p)
+ def show_fabric_info(p)
import webserver
import string
- webserver.content_send(" Sessions
")
- webserver.content_send("Existing sessions:
")
+ webserver.content_send(" Fabrics
")
+ webserver.content_send("Existing fabrics:
")
if size(self.device.sessions.sessions) == 0
webserver.content_send("None
")
else
- var i = 0
- var sz = size(self.device.sessions.sessions)
- while i < sz
- var s = self.device.sessions.sessions[i]
- if s.fabric
- webserver.content_send(string.format(" Session %i
", s.local_session_id))
- if i != 0 webserver.content_send(" ") end
- var fabric_rev = s.fabric.copy().reverse()
- var deviceid_rev = s.deviceid.copy().reverse()
- webserver.content_send(string.format("Fabric: %s ", fabric_rev.tohex()))
- webserver.content_send(string.format("Device: %s ", deviceid_rev.tohex()))
+ var first = true
+ for f : self.device.sessions.fabrics.persistables()
+ if !first webserver.content_send(" ") end
+ first = false
- webserver.content_send("")
-
- webserver.content_send("
")
- end
- i += 1
+ var label = f.fabric_label
+ if !label label = "" end
+ label = webserver.html_escape(label) # protect against HTML injection
+
+ webserver.content_send(string.format(" #%i %s
", f.get_fabric_index(), label))
+
+ var fabric_rev = f.get_fabric_id().copy().reverse()
+ var deviceid_rev = f.get_device_id().copy().reverse()
+ webserver.content_send(string.format("Fabric: %s ", fabric_rev.tohex()))
+ webserver.content_send(string.format("Device: %s ", deviceid_rev.tohex()))
+
+ webserver.content_send("")
+
+ webserver.content_send("
")
end
end
webserver.content_send("
")
-
- end
-
- #######################################################################
- # Serve qrcode.min.js static file
- #######################################################################
- def page_qrcode_min_js()
- import webserver
-
- webserver.content_open(200, "text/javascript")
- webserver.content_send(matter._QRCODE_MINJS)
end
#######################################################################
@@ -162,17 +216,15 @@ class Matter_UI
def page_part_mgr()
import webserver
import string
-
+
if !webserver.check_privileged_access() return nil end
webserver.content_start("Matter") #- title of the web page -#
webserver.content_send_style() #- send standard Tasmota styles -#
- webserver.content_send('')
-
if self.show_enable()
- self.show_commissioning_info()
- self.show_session_info()
+ self.show_passcode_form()
+ self.show_fabric_info()
end
webserver.content_button(webserver.BUTTON_CONFIGURATION)
webserver.content_stop() #- end of web page -#
@@ -188,23 +240,24 @@ class Matter_UI
import string
import partition_core
import persist
-
+
#- check that the partition is valid -#
var p = partition_core.Partition()
try
-
+
#---------------------------------------------------------------------#
# Change Passcode and/or Passcode
#---------------------------------------------------------------------#
if webserver.has_arg("passcode") || webserver.has_arg("discriminator")
if webserver.has_arg("passcode")
- self.device.passcode = int(webserver.arg("passcode"))
+ self.device.root_passcode = int(webserver.arg("passcode"))
end
if webserver.has_arg("discriminator")
- self.device.discriminator = int(webserver.arg("discriminator"))
+ self.device.root_discriminator = int(webserver.arg("discriminator"))
end
+ self.device.ipv4only = webserver.arg("ipv4") == 'on'
self.device.save_param()
#- and force restart -#
@@ -220,15 +273,21 @@ class Matter_UI
#- and force restart -#
webserver.redirect("/?rst=")
- elif webserver.has_arg("del_session")
- var session = self.device.sessions.get_session_by_local_session_id(int(webserver.arg("del_session")))
- if session != nil
- self.device.sessions.remove_session(session)
- self.device.sessions.save()
+ elif webserver.has_arg("del_fabric")
+ var del_fabric = int(webserver.arg("del_fabric"))
+ var idx = 0
+ var fabrics = self.device.sessions.fabrics
+ while idx < size(fabrics)
+ if fabrics[idx].get_fabric_index() == del_fabric
+ self.device.remove_fabric(fabrics[idx])
+ break
+ else
+ idx += 1
+ end
end
#- and force restart -#
- webserver.redirect("/?rst=")
+ webserver.redirect("/matterc?")
end
except .. as e, m
@@ -244,6 +303,46 @@ class Matter_UI
end
end
+ #- display sensor value in the web UI -#
+ def web_sensor()
+ import webserver
+ import string
+
+ var matter_enabled = tasmota.get_option(matter.MATTER_OPTION)
+
+ if matter_enabled
+ if self.device.is_root_commissioning_open()
+ self.show_commissioning_info()
+ end
+
+ # mtc0 = close, mtc1 = open commissioning
+ var fabrics_count = self.device.sessions.count_active_fabrics()
+ if fabrics_count == 0
+ webserver.content_send(string.format("%s
", "No active association"))
+ else
+ var plural = fabrics_count > 1
+ webserver.content_send(string.format("%s
", str(fabrics_count) + " active association" + (plural ? "s" : "")))
+ end
+
+ webserver.content_send(string.format("", self.device.commissioning_open == nil ? 1 : 0))
+ webserver.content_send(matter._LOGO)
+ if self.device.commissioning_open == nil
+ webserver.content_send(" Open Commissioning ")
+ else
+ webserver.content_send(" Close Commissioning")
+ end
+ end
+ end
+
+ def web_get_arg()
+ import webserver
+ if webserver.has_arg("mtc0") # Close Commissioning
+ self.device.stop_basic_commissioning()
+ elif webserver.has_arg("mtc1") # Open Commissioning
+ self.device.start_root_basic_commissioning()
+ end
+ end
+
#- ---------------------------------------------------------------------- -#
# respond to web_add_handler() event to register web listeners
#- ---------------------------------------------------------------------- -#
@@ -253,7 +352,6 @@ class Matter_UI
#- we need to register a closure, not just a function, that captures the current instance -#
webserver.on("/matterc", / -> self.page_part_mgr(), webserver.HTTP_GET)
webserver.on("/matterc", / -> self.page_part_ctl(), webserver.HTTP_POST)
- webserver.on("/qrcode.min.js", / -> self.page_qrcode_min_js(), webserver.HTTP_GET)
end
end
matter.UI = Matter_UI
diff --git a/lib/libesp32/berry_matter/src/qrcodegen.c b/lib/libesp32/berry_matter/src/qrcodegen.c
new file mode 100644
index 000000000..37ee74233
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/qrcodegen.c
@@ -0,0 +1,1035 @@
+/*
+ * QR Code generator library (C)
+ *
+ * Copyright (c) Project Nayuki. (MIT License)
+ * https://www.nayuki.io/page/qr-code-generator-library
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ * the Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ * - The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * - The Software is provided "as is", without warranty of any kind, express or
+ * implied, including but not limited to the warranties of merchantability,
+ * fitness for a particular purpose and noninfringement. In no event shall the
+ * authors or copyright holders be liable for any claim, damages or other
+ * liability, whether in an action of contract, tort or otherwise, arising from,
+ * out of or in connection with the Software or the use or other dealings in the
+ * Software.
+ */
+
+#include
+#include
+#include
+#include
+#include "qrcodegen.h"
+
+#ifndef QRCODEGEN_TEST
+ #define testable static // Keep functions private
+#else
+ #define testable // Expose private functions
+#endif
+
+
+/*---- Forward declarations for private functions ----*/
+
+// Regarding all public and private functions defined in this source file:
+// - They require all pointer/array arguments to be not null unless the array length is zero.
+// - They only read input scalar/array arguments, write to output pointer/array
+// arguments, and return scalar values; they are "pure" functions.
+// - They don't read mutable global variables or write to any global variables.
+// - They don't perform I/O, read the clock, print to console, etc.
+// - They allocate a small and constant amount of stack memory.
+// - They don't allocate or free any memory on the heap.
+// - They don't recurse or mutually recurse. All the code
+// could be inlined into the top-level public functions.
+// - They run in at most quadratic time with respect to input arguments.
+// Most functions run in linear time, and some in constant time.
+// There are no unbounded loops or non-obvious termination conditions.
+// - They are completely thread-safe if the caller does not give the
+// same writable buffer to concurrent calls to these functions.
+
+testable void appendBitsToBuffer(unsigned int val, int numBits, uint8_t buffer[], int *bitLen);
+
+testable void addEccAndInterleave(uint8_t data[], int version, enum qrcodegen_Ecc ecl, uint8_t result[]);
+testable int getNumDataCodewords(int version, enum qrcodegen_Ecc ecl);
+testable int getNumRawDataModules(int ver);
+
+testable void calcReedSolomonGenerator(int degree, uint8_t result[]);
+testable void calcReedSolomonRemainder(const uint8_t data[], int dataLen,
+ const uint8_t generator[], int degree, uint8_t result[]);
+testable uint8_t finiteFieldMultiply(uint8_t x, uint8_t y);
+
+testable void initializeFunctionModules(int version, uint8_t qrcode[]);
+static void drawWhiteFunctionModules(uint8_t qrcode[], int version);
+static void drawFormatBits(enum qrcodegen_Ecc ecl, enum qrcodegen_Mask mask, uint8_t qrcode[]);
+testable int getAlignmentPatternPositions(int version, uint8_t result[7]);
+static void fillRectangle(int left, int top, int width, int height, uint8_t qrcode[]);
+
+static void drawCodewords(const uint8_t data[], int dataLen, uint8_t qrcode[]);
+static void applyMask(const uint8_t functionModules[], uint8_t qrcode[], enum qrcodegen_Mask mask);
+static long getPenaltyScore(const uint8_t qrcode[]);
+static void addRunToHistory(unsigned char run, unsigned char history[7]);
+static bool hasFinderLikePattern(const unsigned char runHistory[7]);
+
+testable bool getModule(const uint8_t qrcode[], int x, int y);
+testable void setModule(uint8_t qrcode[], int x, int y, bool isBlack);
+testable void setModuleBounded(uint8_t qrcode[], int x, int y, bool isBlack);
+static bool getBit(int x, int i);
+
+testable int calcSegmentBitLength(enum qrcodegen_Mode mode, size_t numChars);
+testable int getTotalBits(const struct qrcodegen_Segment segs[], size_t len, int version);
+static int numCharCountBits(enum qrcodegen_Mode mode, int version);
+
+
+
+/*---- Private tables of constants ----*/
+
+// The set of all legal characters in alphanumeric mode, where each character
+// value maps to the index in the string. For checking text and encoding segments.
+static const char *ALPHANUMERIC_CHARSET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:";
+
+// For generating error correction codes.
+testable const int8_t ECC_CODEWORDS_PER_BLOCK[4][41] = {
+ // Version: (note that index 0 is for padding, and is set to an illegal value)
+ //0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level
+ {-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, // Low
+ {-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28}, // Medium
+ {-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, // Quartile
+ {-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, // High
+};
+
+#define qrcodegen_REED_SOLOMON_DEGREE_MAX 30 // Based on the table above
+
+// For generating error correction codes.
+testable const int8_t NUM_ERROR_CORRECTION_BLOCKS[4][41] = {
+ // Version: (note that index 0 is for padding, and is set to an illegal value)
+ //0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level
+ {-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25}, // Low
+ {-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49}, // Medium
+ {-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68}, // Quartile
+ {-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81}, // High
+};
+
+// For automatic mask pattern selection.
+static const int PENALTY_N1 = 3;
+static const int PENALTY_N2 = 3;
+static const int PENALTY_N3 = 40;
+static const int PENALTY_N4 = 10;
+
+
+
+/*---- High-level QR Code encoding functions ----*/
+
+// Public function - see documentation comment in header file.
+bool qrcodegen_encodeText(const char *text, uint8_t tempBuffer[], uint8_t qrcode[],
+ enum qrcodegen_Ecc ecl, int minVersion, int maxVersion, enum qrcodegen_Mask mask, bool boostEcl) {
+
+ size_t textLen = strlen(text);
+ if (textLen == 0)
+ return qrcodegen_encodeSegmentsAdvanced(NULL, 0, ecl, minVersion, maxVersion, mask, boostEcl, tempBuffer, qrcode);
+ size_t bufLen = qrcodegen_BUFFER_LEN_FOR_VERSION(maxVersion);
+
+ struct qrcodegen_Segment seg;
+ if (qrcodegen_isNumeric(text)) {
+ if (qrcodegen_calcSegmentBufferSize(qrcodegen_Mode_NUMERIC, textLen) > bufLen)
+ goto fail;
+ seg = qrcodegen_makeNumeric(text, tempBuffer);
+ } else if (qrcodegen_isAlphanumeric(text)) {
+ if (qrcodegen_calcSegmentBufferSize(qrcodegen_Mode_ALPHANUMERIC, textLen) > bufLen)
+ goto fail;
+ seg = qrcodegen_makeAlphanumeric(text, tempBuffer);
+ } else {
+ if (textLen > bufLen)
+ goto fail;
+ for (size_t i = 0; i < textLen; i++)
+ tempBuffer[i] = (uint8_t)text[i];
+ seg.mode = qrcodegen_Mode_BYTE;
+ seg.bitLength = calcSegmentBitLength(seg.mode, textLen);
+ if (seg.bitLength == -1)
+ goto fail;
+ seg.numChars = (int)textLen;
+ seg.data = tempBuffer;
+ }
+ return qrcodegen_encodeSegmentsAdvanced(&seg, 1, ecl, minVersion, maxVersion, mask, boostEcl, tempBuffer, qrcode);
+
+fail:
+ qrcode[0] = 0; // Set size to invalid value for safety
+ return false;
+}
+
+
+// Public function - see documentation comment in header file.
+bool qrcodegen_encodeBinary(uint8_t dataAndTemp[], size_t dataLen, uint8_t qrcode[],
+ enum qrcodegen_Ecc ecl, int minVersion, int maxVersion, enum qrcodegen_Mask mask, bool boostEcl) {
+
+ struct qrcodegen_Segment seg;
+ seg.mode = qrcodegen_Mode_BYTE;
+ seg.bitLength = calcSegmentBitLength(seg.mode, dataLen);
+ if (seg.bitLength == -1) {
+ qrcode[0] = 0; // Set size to invalid value for safety
+ return false;
+ }
+ seg.numChars = (int)dataLen;
+ seg.data = dataAndTemp;
+ return qrcodegen_encodeSegmentsAdvanced(&seg, 1, ecl, minVersion, maxVersion, mask, boostEcl, dataAndTemp, qrcode);
+}
+
+
+// Appends the given number of low-order bits of the given value to the given byte-based
+// bit buffer, increasing the bit length. Requires 0 <= numBits <= 16 and val < 2^numBits.
+testable void appendBitsToBuffer(unsigned int val, int numBits, uint8_t buffer[], int *bitLen) {
+ assert(0 <= numBits && numBits <= 16 && (unsigned long)val >> numBits == 0);
+ for (int i = numBits - 1; i >= 0; i--, (*bitLen)++)
+ buffer[*bitLen >> 3] |= ((val >> i) & 1) << (7 - (*bitLen & 7));
+}
+
+
+
+/*---- Low-level QR Code encoding functions ----*/
+
+// Public function - see documentation comment in header file.
+bool qrcodegen_encodeSegments(const struct qrcodegen_Segment segs[], size_t len,
+ enum qrcodegen_Ecc ecl, uint8_t tempBuffer[], uint8_t qrcode[]) {
+ return qrcodegen_encodeSegmentsAdvanced(segs, len, ecl,
+ qrcodegen_VERSION_MIN, qrcodegen_VERSION_MAX, -1, true, tempBuffer, qrcode);
+}
+
+
+// Public function - see documentation comment in header file.
+bool qrcodegen_encodeSegmentsAdvanced(const struct qrcodegen_Segment segs[], size_t len, enum qrcodegen_Ecc ecl,
+ int minVersion, int maxVersion, int mask, bool boostEcl, uint8_t tempBuffer[], uint8_t qrcode[]) {
+ assert(segs != NULL || len == 0);
+ assert(qrcodegen_VERSION_MIN <= minVersion && minVersion <= maxVersion && maxVersion <= qrcodegen_VERSION_MAX);
+ assert(0 <= (int)ecl && (int)ecl <= 3 && -1 <= (int)mask && (int)mask <= 7);
+
+ // Find the minimal version number to use
+ int version, dataUsedBits;
+ for (version = minVersion; ; version++) {
+ int dataCapacityBits = getNumDataCodewords(version, ecl) * 8; // Number of data bits available
+ dataUsedBits = getTotalBits(segs, len, version);
+ if (dataUsedBits != -1 && dataUsedBits <= dataCapacityBits)
+ break; // This version number is found to be suitable
+ if (version >= maxVersion) { // All versions in the range could not fit the given data
+ qrcode[0] = 0; // Set size to invalid value for safety
+ return false;
+ }
+ }
+ assert(dataUsedBits != -1);
+
+ // Increase the error correction level while the data still fits in the current version number
+ for (int i = (int)qrcodegen_Ecc_MEDIUM; i <= (int)qrcodegen_Ecc_HIGH; i++) { // From low to high
+ if (boostEcl && dataUsedBits <= getNumDataCodewords(version, (enum qrcodegen_Ecc)i) * 8)
+ ecl = (enum qrcodegen_Ecc)i;
+ }
+
+ // Concatenate all segments to create the data bit string
+ memset(qrcode, 0, qrcodegen_BUFFER_LEN_FOR_VERSION(version) * sizeof(qrcode[0]));
+ int bitLen = 0;
+ for (size_t i = 0; i < len; i++) {
+ const struct qrcodegen_Segment *seg = &segs[i];
+ appendBitsToBuffer((int)seg->mode, 4, qrcode, &bitLen);
+ appendBitsToBuffer(seg->numChars, numCharCountBits(seg->mode, version), qrcode, &bitLen);
+ for (int j = 0; j < seg->bitLength; j++)
+ appendBitsToBuffer((seg->data[j >> 3] >> (7 - (j & 7))) & 1, 1, qrcode, &bitLen);
+ }
+ assert(bitLen == dataUsedBits);
+
+ // Add terminator and pad up to a byte if applicable
+ int dataCapacityBits = getNumDataCodewords(version, ecl) * 8;
+ assert(bitLen <= dataCapacityBits);
+ int terminatorBits = dataCapacityBits - bitLen;
+ if (terminatorBits > 4)
+ terminatorBits = 4;
+ appendBitsToBuffer(0, terminatorBits, qrcode, &bitLen);
+ appendBitsToBuffer(0, (8 - bitLen % 8) % 8, qrcode, &bitLen);
+ assert(bitLen % 8 == 0);
+
+ // Pad with alternating bytes until data capacity is reached
+ for (uint8_t padByte = 0xEC; bitLen < dataCapacityBits; padByte ^= 0xEC ^ 0x11)
+ appendBitsToBuffer(padByte, 8, qrcode, &bitLen);
+
+ // Draw function and data codeword modules
+ addEccAndInterleave(qrcode, version, ecl, tempBuffer);
+ initializeFunctionModules(version, qrcode);
+ drawCodewords(tempBuffer, getNumRawDataModules(version) / 8, qrcode);
+ drawWhiteFunctionModules(qrcode, version);
+ initializeFunctionModules(version, tempBuffer);
+
+ // Handle masking
+ if (mask == qrcodegen_Mask_AUTO) { // Automatically choose best mask
+ long minPenalty = LONG_MAX;
+ for (int i = 0; i < 8; i++) {
+ enum qrcodegen_Mask msk = (enum qrcodegen_Mask)i;
+ applyMask(tempBuffer, qrcode, msk);
+ drawFormatBits(ecl, msk, qrcode);
+ long penalty = getPenaltyScore(qrcode);
+ if (penalty < minPenalty) {
+ mask = msk;
+ minPenalty = penalty;
+ }
+ applyMask(tempBuffer, qrcode, msk); // Undoes the mask due to XOR
+ }
+ }
+ assert(0 <= (int)mask && (int)mask <= 7);
+ applyMask(tempBuffer, qrcode, mask);
+ drawFormatBits(ecl, mask, qrcode);
+ return true;
+}
+
+
+
+/*---- Error correction code generation functions ----*/
+
+// Appends error correction bytes to each block of the given data array, then interleaves
+// bytes from the blocks and stores them in the result array. data[0 : dataLen] contains
+// the input data. data[dataLen : rawCodewords] is used as a temporary work area and will
+// be clobbered by this function. The final answer is stored in result[0 : rawCodewords].
+testable void addEccAndInterleave(uint8_t data[], int version, enum qrcodegen_Ecc ecl, uint8_t result[]) {
+ // Calculate parameter numbers
+ assert(0 <= (int)ecl && (int)ecl < 4 && qrcodegen_VERSION_MIN <= version && version <= qrcodegen_VERSION_MAX);
+ int numBlocks = NUM_ERROR_CORRECTION_BLOCKS[(int)ecl][version];
+ int blockEccLen = ECC_CODEWORDS_PER_BLOCK [(int)ecl][version];
+ int rawCodewords = getNumRawDataModules(version) / 8;
+ int dataLen = getNumDataCodewords(version, ecl);
+ int numShortBlocks = numBlocks - rawCodewords % numBlocks;
+ int shortBlockDataLen = rawCodewords / numBlocks - blockEccLen;
+
+ // Split data into blocks, calculate ECC, and interleave
+ // (not concatenate) the bytes into a single sequence
+ uint8_t generator[qrcodegen_REED_SOLOMON_DEGREE_MAX];
+ calcReedSolomonGenerator(blockEccLen, generator);
+ const uint8_t *dat = data;
+ for (int i = 0; i < numBlocks; i++) {
+ int datLen = shortBlockDataLen + (i < numShortBlocks ? 0 : 1);
+ uint8_t *ecc = &data[dataLen]; // Temporary storage
+ calcReedSolomonRemainder(dat, datLen, generator, blockEccLen, ecc);
+ for (int j = 0, k = i; j < datLen; j++, k += numBlocks) { // Copy data
+ if (j == shortBlockDataLen)
+ k -= numShortBlocks;
+ result[k] = dat[j];
+ }
+ for (int j = 0, k = dataLen + i; j < blockEccLen; j++, k += numBlocks) // Copy ECC
+ result[k] = ecc[j];
+ dat += datLen;
+ }
+}
+
+
+// Returns the number of 8-bit codewords that can be used for storing data (not ECC),
+// for the given version number and error correction level. The result is in the range [9, 2956].
+testable int getNumDataCodewords(int version, enum qrcodegen_Ecc ecl) {
+ int v = version, e = (int)ecl;
+ assert(0 <= e && e < 4);
+ return getNumRawDataModules(v) / 8
+ - ECC_CODEWORDS_PER_BLOCK [e][v]
+ * NUM_ERROR_CORRECTION_BLOCKS[e][v];
+}
+
+
+// Returns the number of data bits that can be stored in a QR Code of the given version number, after
+// all function modules are excluded. This includes remainder bits, so it might not be a multiple of 8.
+// The result is in the range [208, 29648]. This could be implemented as a 40-entry lookup table.
+testable int getNumRawDataModules(int ver) {
+ assert(qrcodegen_VERSION_MIN <= ver && ver <= qrcodegen_VERSION_MAX);
+ int result = (16 * ver + 128) * ver + 64;
+ if (ver >= 2) {
+ int numAlign = ver / 7 + 2;
+ result -= (25 * numAlign - 10) * numAlign - 55;
+ if (ver >= 7)
+ result -= 36;
+ }
+ return result;
+}
+
+
+
+/*---- Reed-Solomon ECC generator functions ----*/
+
+// Calculates the Reed-Solomon generator polynomial of the given degree, storing in result[0 : degree].
+testable void calcReedSolomonGenerator(int degree, uint8_t result[]) {
+ // Start with the monomial x^0
+ assert(1 <= degree && degree <= qrcodegen_REED_SOLOMON_DEGREE_MAX);
+ memset(result, 0, degree * sizeof(result[0]));
+ result[degree - 1] = 1;
+
+ // Compute the product polynomial (x - r^0) * (x - r^1) * (x - r^2) * ... * (x - r^{degree-1}),
+ // drop the highest term, and store the rest of the coefficients in order of descending powers.
+ // Note that r = 0x02, which is a generator element of this field GF(2^8/0x11D).
+ uint8_t root = 1;
+ for (int i = 0; i < degree; i++) {
+ // Multiply the current product by (x - r^i)
+ for (int j = 0; j < degree; j++) {
+ result[j] = finiteFieldMultiply(result[j], root);
+ if (j + 1 < degree)
+ result[j] ^= result[j + 1];
+ }
+ root = finiteFieldMultiply(root, 0x02);
+ }
+}
+
+
+// Calculates the remainder of the polynomial data[0 : dataLen] when divided by the generator[0 : degree], where all
+// polynomials are in big endian and the generator has an implicit leading 1 term, storing the result in result[0 : degree].
+testable void calcReedSolomonRemainder(const uint8_t data[], int dataLen,
+ const uint8_t generator[], int degree, uint8_t result[]) {
+
+ // Perform polynomial division
+ assert(1 <= degree && degree <= qrcodegen_REED_SOLOMON_DEGREE_MAX);
+ memset(result, 0, degree * sizeof(result[0]));
+ for (int i = 0; i < dataLen; i++) {
+ uint8_t factor = data[i] ^ result[0];
+ memmove(&result[0], &result[1], (degree - 1) * sizeof(result[0]));
+ result[degree - 1] = 0;
+ for (int j = 0; j < degree; j++)
+ result[j] ^= finiteFieldMultiply(generator[j], factor);
+ }
+}
+
+#undef qrcodegen_REED_SOLOMON_DEGREE_MAX
+
+
+// Returns the product of the two given field elements modulo GF(2^8/0x11D).
+// All inputs are valid. This could be implemented as a 256*256 lookup table.
+testable uint8_t finiteFieldMultiply(uint8_t x, uint8_t y) {
+ // Russian peasant multiplication
+ uint8_t z = 0;
+ for (int i = 7; i >= 0; i--) {
+ z = (z << 1) ^ ((z >> 7) * 0x11D);
+ z ^= ((y >> i) & 1) * x;
+ }
+ return z;
+}
+
+
+
+/*---- Drawing function modules ----*/
+
+// Clears the given QR Code grid with white modules for the given
+// version's size, then marks every function module as black.
+testable void initializeFunctionModules(int version, uint8_t qrcode[]) {
+ // Initialize QR Code
+ int qrsize = version * 4 + 17;
+ memset(qrcode, 0, ((qrsize * qrsize + 7) / 8 + 1) * sizeof(qrcode[0]));
+ qrcode[0] = (uint8_t)qrsize;
+
+ // Fill horizontal and vertical timing patterns
+ fillRectangle(6, 0, 1, qrsize, qrcode);
+ fillRectangle(0, 6, qrsize, 1, qrcode);
+
+ // Fill 3 finder patterns (all corners except bottom right) and format bits
+ fillRectangle(0, 0, 9, 9, qrcode);
+ fillRectangle(qrsize - 8, 0, 8, 9, qrcode);
+ fillRectangle(0, qrsize - 8, 9, 8, qrcode);
+
+ // Fill numerous alignment patterns
+ uint8_t alignPatPos[7];
+ int numAlign = getAlignmentPatternPositions(version, alignPatPos);
+ for (int i = 0; i < numAlign; i++) {
+ for (int j = 0; j < numAlign; j++) {
+ // Don't draw on the three finder corners
+ if (!((i == 0 && j == 0) || (i == 0 && j == numAlign - 1) || (i == numAlign - 1 && j == 0)))
+ fillRectangle(alignPatPos[i] - 2, alignPatPos[j] - 2, 5, 5, qrcode);
+ }
+ }
+
+ // Fill version blocks
+ if (version >= 7) {
+ fillRectangle(qrsize - 11, 0, 3, 6, qrcode);
+ fillRectangle(0, qrsize - 11, 6, 3, qrcode);
+ }
+}
+
+
+// Draws white function modules and possibly some black modules onto the given QR Code, without changing
+// non-function modules. This does not draw the format bits. This requires all function modules to be previously
+// marked black (namely by initializeFunctionModules()), because this may skip redrawing black function modules.
+static void drawWhiteFunctionModules(uint8_t qrcode[], int version) {
+ // Draw horizontal and vertical timing patterns
+ int qrsize = qrcodegen_getSize(qrcode);
+ for (int i = 7; i < qrsize - 7; i += 2) {
+ setModule(qrcode, 6, i, false);
+ setModule(qrcode, i, 6, false);
+ }
+
+ // Draw 3 finder patterns (all corners except bottom right; overwrites some timing modules)
+ for (int dy = -4; dy <= 4; dy++) {
+ for (int dx = -4; dx <= 4; dx++) {
+ int dist = abs(dx);
+ if (abs(dy) > dist)
+ dist = abs(dy);
+ if (dist == 2 || dist == 4) {
+ setModuleBounded(qrcode, 3 + dx, 3 + dy, false);
+ setModuleBounded(qrcode, qrsize - 4 + dx, 3 + dy, false);
+ setModuleBounded(qrcode, 3 + dx, qrsize - 4 + dy, false);
+ }
+ }
+ }
+
+ // Draw numerous alignment patterns
+ uint8_t alignPatPos[7];
+ int numAlign = getAlignmentPatternPositions(version, alignPatPos);
+ for (int i = 0; i < numAlign; i++) {
+ for (int j = 0; j < numAlign; j++) {
+ if ((i == 0 && j == 0) || (i == 0 && j == numAlign - 1) || (i == numAlign - 1 && j == 0))
+ continue; // Don't draw on the three finder corners
+ for (int dy = -1; dy <= 1; dy++) {
+ for (int dx = -1; dx <= 1; dx++)
+ setModule(qrcode, alignPatPos[i] + dx, alignPatPos[j] + dy, dx == 0 && dy == 0);
+ }
+ }
+ }
+
+ // Draw version blocks
+ if (version >= 7) {
+ // Calculate error correction code and pack bits
+ int rem = version; // version is uint6, in the range [7, 40]
+ for (int i = 0; i < 12; i++)
+ rem = (rem << 1) ^ ((rem >> 11) * 0x1F25);
+ long bits = (long)version << 12 | rem; // uint18
+ assert(bits >> 18 == 0);
+
+ // Draw two copies
+ for (int i = 0; i < 6; i++) {
+ for (int j = 0; j < 3; j++) {
+ int k = qrsize - 11 + j;
+ setModule(qrcode, k, i, (bits & 1) != 0);
+ setModule(qrcode, i, k, (bits & 1) != 0);
+ bits >>= 1;
+ }
+ }
+ }
+}
+
+
+// Draws two copies of the format bits (with its own error correction code) based
+// on the given mask and error correction level. This always draws all modules of
+// the format bits, unlike drawWhiteFunctionModules() which might skip black modules.
+static void drawFormatBits(enum qrcodegen_Ecc ecl, enum qrcodegen_Mask mask, uint8_t qrcode[]) {
+ // Calculate error correction code and pack bits
+ assert(0 <= (int)mask && (int)mask <= 7);
+ static const int table[] = {1, 0, 3, 2};
+ int data = table[(int)ecl] << 3 | (int)mask; // errCorrLvl is uint2, mask is uint3
+ int rem = data;
+ for (int i = 0; i < 10; i++)
+ rem = (rem << 1) ^ ((rem >> 9) * 0x537);
+ int bits = (data << 10 | rem) ^ 0x5412; // uint15
+ assert(bits >> 15 == 0);
+
+ // Draw first copy
+ for (int i = 0; i <= 5; i++)
+ setModule(qrcode, 8, i, getBit(bits, i));
+ setModule(qrcode, 8, 7, getBit(bits, 6));
+ setModule(qrcode, 8, 8, getBit(bits, 7));
+ setModule(qrcode, 7, 8, getBit(bits, 8));
+ for (int i = 9; i < 15; i++)
+ setModule(qrcode, 14 - i, 8, getBit(bits, i));
+
+ // Draw second copy
+ int qrsize = qrcodegen_getSize(qrcode);
+ for (int i = 0; i < 8; i++)
+ setModule(qrcode, qrsize - 1 - i, 8, getBit(bits, i));
+ for (int i = 8; i < 15; i++)
+ setModule(qrcode, 8, qrsize - 15 + i, getBit(bits, i));
+ setModule(qrcode, 8, qrsize - 8, true); // Always black
+}
+
+
+// Calculates and stores an ascending list of positions of alignment patterns
+// for this version number, returning the length of the list (in the range [0,7]).
+// Each position is in the range [0,177), and are used on both the x and y axes.
+// This could be implemented as lookup table of 40 variable-length lists of unsigned bytes.
+testable int getAlignmentPatternPositions(int version, uint8_t result[7]) {
+ if (version == 1)
+ return 0;
+ int numAlign = version / 7 + 2;
+ int step = (version == 32) ? 26 :
+ (version*4 + numAlign*2 + 1) / (numAlign*2 - 2) * 2;
+ for (int i = numAlign - 1, pos = version * 4 + 10; i >= 1; i--, pos -= step)
+ result[i] = pos;
+ result[0] = 6;
+ return numAlign;
+}
+
+
+// Sets every pixel in the range [left : left + width] * [top : top + height] to black.
+static void fillRectangle(int left, int top, int width, int height, uint8_t qrcode[]) {
+ for (int dy = 0; dy < height; dy++) {
+ for (int dx = 0; dx < width; dx++)
+ setModule(qrcode, left + dx, top + dy, true);
+ }
+}
+
+
+
+/*---- Drawing data modules and masking ----*/
+
+// Draws the raw codewords (including data and ECC) onto the given QR Code. This requires the initial state of
+// the QR Code to be black at function modules and white at codeword modules (including unused remainder bits).
+static void drawCodewords(const uint8_t data[], int dataLen, uint8_t qrcode[]) {
+ int qrsize = qrcodegen_getSize(qrcode);
+ int i = 0; // Bit index into the data
+ // Do the funny zigzag scan
+ for (int right = qrsize - 1; right >= 1; right -= 2) { // Index of right column in each column pair
+ if (right == 6)
+ right = 5;
+ for (int vert = 0; vert < qrsize; vert++) { // Vertical counter
+ for (int j = 0; j < 2; j++) {
+ int x = right - j; // Actual x coordinate
+ bool upward = ((right + 1) & 2) == 0;
+ int y = upward ? qrsize - 1 - vert : vert; // Actual y coordinate
+ if (!getModule(qrcode, x, y) && i < dataLen * 8) {
+ bool black = getBit(data[i >> 3], 7 - (i & 7));
+ setModule(qrcode, x, y, black);
+ i++;
+ }
+ // If this QR Code has any remainder bits (0 to 7), they were assigned as
+ // 0/false/white by the constructor and are left unchanged by this method
+ }
+ }
+ }
+ assert(i == dataLen * 8);
+}
+
+
+// XORs the codeword modules in this QR Code with the given mask pattern.
+// The function modules must be marked and the codeword bits must be drawn
+// before masking. Due to the arithmetic of XOR, calling applyMask() with
+// the same mask value a second time will undo the mask. A final well-formed
+// QR Code needs exactly one (not zero, two, etc.) mask applied.
+static void applyMask(const uint8_t functionModules[], uint8_t qrcode[], enum qrcodegen_Mask mask) {
+ assert(0 <= (int)mask && (int)mask <= 7); // Disallows qrcodegen_Mask_AUTO
+ int qrsize = qrcodegen_getSize(qrcode);
+ for (int y = 0; y < qrsize; y++) {
+ for (int x = 0; x < qrsize; x++) {
+ if (getModule(functionModules, x, y))
+ continue;
+ bool invert;
+ switch ((int)mask) {
+ case 0: invert = (x + y) % 2 == 0; break;
+ case 1: invert = y % 2 == 0; break;
+ case 2: invert = x % 3 == 0; break;
+ case 3: invert = (x + y) % 3 == 0; break;
+ case 4: invert = (x / 3 + y / 2) % 2 == 0; break;
+ case 5: invert = x * y % 2 + x * y % 3 == 0; break;
+ case 6: invert = (x * y % 2 + x * y % 3) % 2 == 0; break;
+ case 7: invert = ((x + y) % 2 + x * y % 3) % 2 == 0; break;
+ default: assert(false); return;
+ }
+ bool val = getModule(qrcode, x, y);
+ setModule(qrcode, x, y, val ^ invert);
+ }
+ }
+}
+
+
+// Calculates and returns the penalty score based on state of the given QR Code's current modules.
+// This is used by the automatic mask choice algorithm to find the mask pattern that yields the lowest score.
+static long getPenaltyScore(const uint8_t qrcode[]) {
+ int qrsize = qrcodegen_getSize(qrcode);
+ long result = 0;
+
+ // Adjacent modules in row having same color, and finder-like patterns
+ for (int y = 0; y < qrsize; y++) {
+ unsigned char runHistory[7] = {0};
+ bool color = false;
+ unsigned char runX = 0;
+ for (int x = 0; x < qrsize; x++) {
+ if (getModule(qrcode, x, y) == color) {
+ runX++;
+ if (runX == 5)
+ result += PENALTY_N1;
+ else if (runX > 5)
+ result++;
+ } else {
+ addRunToHistory(runX, runHistory);
+ if (!color && hasFinderLikePattern(runHistory))
+ result += PENALTY_N3;
+ color = getModule(qrcode, x, y);
+ runX = 1;
+ }
+ }
+ addRunToHistory(runX, runHistory);
+ if (color)
+ addRunToHistory(0, runHistory); // Dummy run of white
+ if (hasFinderLikePattern(runHistory))
+ result += PENALTY_N3;
+ }
+ // Adjacent modules in column having same color, and finder-like patterns
+ for (int x = 0; x < qrsize; x++) {
+ unsigned char runHistory[7] = {0};
+ bool color = false;
+ unsigned char runY = 0;
+ for (int y = 0; y < qrsize; y++) {
+ if (getModule(qrcode, x, y) == color) {
+ runY++;
+ if (runY == 5)
+ result += PENALTY_N1;
+ else if (runY > 5)
+ result++;
+ } else {
+ addRunToHistory(runY, runHistory);
+ if (!color && hasFinderLikePattern(runHistory))
+ result += PENALTY_N3;
+ color = getModule(qrcode, x, y);
+ runY = 1;
+ }
+ }
+ addRunToHistory(runY, runHistory);
+ if (color)
+ addRunToHistory(0, runHistory); // Dummy run of white
+ if (hasFinderLikePattern(runHistory))
+ result += PENALTY_N3;
+ }
+
+ // 2*2 blocks of modules having same color
+ for (int y = 0; y < qrsize - 1; y++) {
+ for (int x = 0; x < qrsize - 1; x++) {
+ bool color = getModule(qrcode, x, y);
+ if ( color == getModule(qrcode, x + 1, y) &&
+ color == getModule(qrcode, x, y + 1) &&
+ color == getModule(qrcode, x + 1, y + 1))
+ result += PENALTY_N2;
+ }
+ }
+
+ // Balance of black and white modules
+ int black = 0;
+ for (int y = 0; y < qrsize; y++) {
+ for (int x = 0; x < qrsize; x++) {
+ if (getModule(qrcode, x, y))
+ black++;
+ }
+ }
+ int total = qrsize * qrsize; // Note that size is odd, so black/total != 1/2
+ // Compute the smallest integer k >= 0 such that (45-5k)% <= black/total <= (55+5k)%
+ int k = (int)((labs(black * 20L - total * 10L) + total - 1) / total) - 1;
+ result += k * PENALTY_N4;
+ return result;
+}
+
+
+// Inserts the given value to the front of the given array, which shifts over the
+// existing values and deletes the last value. A helper function for getPenaltyScore().
+static void addRunToHistory(unsigned char run, unsigned char history[7]) {
+ memmove(&history[1], &history[0], 6 * sizeof(history[0]));
+ history[0] = run;
+}
+
+
+// Tests whether the given run history has the pattern of ratio 1:1:3:1:1 in the middle, and
+// surrounded by at least 4 on either or both ends. A helper function for getPenaltyScore().
+// Must only be called immediately after a run of white modules has ended.
+static bool hasFinderLikePattern(const unsigned char runHistory[7]) {
+ unsigned char n = runHistory[1];
+ // The maximum QR Code size is 177, hence the run length n <= 177.
+ // Arithmetic is promoted to int, so n*4 will not overflow.
+ return n > 0 && runHistory[2] == n && runHistory[4] == n && runHistory[5] == n
+ && runHistory[3] == n * 3 && (runHistory[0] >= n * 4 || runHistory[6] >= n * 4);
+}
+
+
+
+/*---- Basic QR Code information ----*/
+
+// Public function - see documentation comment in header file.
+int qrcodegen_getSize(const uint8_t qrcode[]) {
+ assert(qrcode != NULL);
+ int result = qrcode[0];
+ assert((qrcodegen_VERSION_MIN * 4 + 17) <= result
+ && result <= (qrcodegen_VERSION_MAX * 4 + 17));
+ return result;
+}
+
+
+// Public function - see documentation comment in header file.
+bool qrcodegen_getModule(const uint8_t qrcode[], int x, int y) {
+ assert(qrcode != NULL);
+ int qrsize = qrcode[0];
+ return (0 <= x && x < qrsize && 0 <= y && y < qrsize) && getModule(qrcode, x, y);
+}
+
+
+// Gets the module at the given coordinates, which must be in bounds.
+testable bool getModule(const uint8_t qrcode[], int x, int y) {
+ int qrsize = qrcode[0];
+ assert(21 <= qrsize && qrsize <= 177 && 0 <= x && x < qrsize && 0 <= y && y < qrsize);
+ int index = y * qrsize + x;
+ return getBit(qrcode[(index >> 3) + 1], index & 7);
+}
+
+
+// Sets the module at the given coordinates, which must be in bounds.
+testable void setModule(uint8_t qrcode[], int x, int y, bool isBlack) {
+ int qrsize = qrcode[0];
+ assert(21 <= qrsize && qrsize <= 177 && 0 <= x && x < qrsize && 0 <= y && y < qrsize);
+ int index = y * qrsize + x;
+ int bitIndex = index & 7;
+ int byteIndex = (index >> 3) + 1;
+ if (isBlack)
+ qrcode[byteIndex] |= 1 << bitIndex;
+ else
+ qrcode[byteIndex] &= (1 << bitIndex) ^ 0xFF;
+}
+
+
+// Sets the module at the given coordinates, doing nothing if out of bounds.
+testable void setModuleBounded(uint8_t qrcode[], int x, int y, bool isBlack) {
+ int qrsize = qrcode[0];
+ if (0 <= x && x < qrsize && 0 <= y && y < qrsize)
+ setModule(qrcode, x, y, isBlack);
+}
+
+
+// Returns true iff the i'th bit of x is set to 1. Requires x >= 0 and 0 <= i <= 14.
+static bool getBit(int x, int i) {
+ return ((x >> i) & 1) != 0;
+}
+
+
+
+/*---- Segment handling ----*/
+
+// Public function - see documentation comment in header file.
+bool qrcodegen_isAlphanumeric(const char *text) {
+ assert(text != NULL);
+ for (; *text != '\0'; text++) {
+ if (strchr(ALPHANUMERIC_CHARSET, *text) == NULL)
+ return false;
+ }
+ return true;
+}
+
+
+// Public function - see documentation comment in header file.
+bool qrcodegen_isNumeric(const char *text) {
+ assert(text != NULL);
+ for (; *text != '\0'; text++) {
+ if (*text < '0' || *text > '9')
+ return false;
+ }
+ return true;
+}
+
+
+// Public function - see documentation comment in header file.
+size_t qrcodegen_calcSegmentBufferSize(enum qrcodegen_Mode mode, size_t numChars) {
+ int temp = calcSegmentBitLength(mode, numChars);
+ if (temp == -1)
+ return SIZE_MAX;
+ assert(0 <= temp && temp <= INT16_MAX);
+ return ((size_t)temp + 7) / 8;
+}
+
+
+// Returns the number of data bits needed to represent a segment
+// containing the given number of characters using the given mode. Notes:
+// - Returns -1 on failure, i.e. numChars > INT16_MAX or
+// the number of needed bits exceeds INT16_MAX (i.e. 32767).
+// - Otherwise, all valid results are in the range [0, INT16_MAX].
+// - For byte mode, numChars measures the number of bytes, not Unicode code points.
+// - For ECI mode, numChars must be 0, and the worst-case number of bits is returned.
+// An actual ECI segment can have shorter data. For non-ECI modes, the result is exact.
+testable int calcSegmentBitLength(enum qrcodegen_Mode mode, size_t numChars) {
+ // All calculations are designed to avoid overflow on all platforms
+ if (numChars > (unsigned int)INT16_MAX)
+ return -1;
+ long result = (long)numChars;
+ if (mode == qrcodegen_Mode_NUMERIC)
+ result = (result * 10 + 2) / 3; // ceil(10/3 * n)
+ else if (mode == qrcodegen_Mode_ALPHANUMERIC)
+ result = (result * 11 + 1) / 2; // ceil(11/2 * n)
+ else if (mode == qrcodegen_Mode_BYTE)
+ result *= 8;
+ else if (mode == qrcodegen_Mode_KANJI)
+ result *= 13;
+ else if (mode == qrcodegen_Mode_ECI && numChars == 0)
+ result = 3 * 8;
+ else { // Invalid argument
+ assert(false);
+ return -1;
+ }
+ assert(result >= 0);
+ if ((unsigned int)result > (unsigned int)INT16_MAX)
+ return -1;
+ return (int)result;
+}
+
+
+// Public function - see documentation comment in header file.
+struct qrcodegen_Segment qrcodegen_makeBytes(const uint8_t data[], size_t len, uint8_t buf[]) {
+ assert(data != NULL || len == 0);
+ struct qrcodegen_Segment result;
+ result.mode = qrcodegen_Mode_BYTE;
+ result.bitLength = calcSegmentBitLength(result.mode, len);
+ assert(result.bitLength != -1);
+ result.numChars = (int)len;
+ if (len > 0)
+ memcpy(buf, data, len * sizeof(buf[0]));
+ result.data = buf;
+ return result;
+}
+
+
+// Public function - see documentation comment in header file.
+struct qrcodegen_Segment qrcodegen_makeNumeric(const char *digits, uint8_t buf[]) {
+ assert(digits != NULL);
+ struct qrcodegen_Segment result;
+ size_t len = strlen(digits);
+ result.mode = qrcodegen_Mode_NUMERIC;
+ int bitLen = calcSegmentBitLength(result.mode, len);
+ assert(bitLen != -1);
+ result.numChars = (int)len;
+ if (bitLen > 0)
+ memset(buf, 0, ((size_t)bitLen + 7) / 8 * sizeof(buf[0]));
+ result.bitLength = 0;
+
+ unsigned int accumData = 0;
+ int accumCount = 0;
+ for (; *digits != '\0'; digits++) {
+ char c = *digits;
+ assert('0' <= c && c <= '9');
+ accumData = accumData * 10 + (unsigned int)(c - '0');
+ accumCount++;
+ if (accumCount == 3) {
+ appendBitsToBuffer(accumData, 10, buf, &result.bitLength);
+ accumData = 0;
+ accumCount = 0;
+ }
+ }
+ if (accumCount > 0) // 1 or 2 digits remaining
+ appendBitsToBuffer(accumData, accumCount * 3 + 1, buf, &result.bitLength);
+ assert(result.bitLength == bitLen);
+ result.data = buf;
+ return result;
+}
+
+
+// Public function - see documentation comment in header file.
+struct qrcodegen_Segment qrcodegen_makeAlphanumeric(const char *text, uint8_t buf[]) {
+ assert(text != NULL);
+ struct qrcodegen_Segment result;
+ size_t len = strlen(text);
+ result.mode = qrcodegen_Mode_ALPHANUMERIC;
+ int bitLen = calcSegmentBitLength(result.mode, len);
+ assert(bitLen != -1);
+ result.numChars = (int)len;
+ if (bitLen > 0)
+ memset(buf, 0, ((size_t)bitLen + 7) / 8 * sizeof(buf[0]));
+ result.bitLength = 0;
+
+ unsigned int accumData = 0;
+ int accumCount = 0;
+ for (; *text != '\0'; text++) {
+ const char *temp = strchr(ALPHANUMERIC_CHARSET, *text);
+ assert(temp != NULL);
+ accumData = accumData * 45 + (unsigned int)(temp - ALPHANUMERIC_CHARSET);
+ accumCount++;
+ if (accumCount == 2) {
+ appendBitsToBuffer(accumData, 11, buf, &result.bitLength);
+ accumData = 0;
+ accumCount = 0;
+ }
+ }
+ if (accumCount > 0) // 1 character remaining
+ appendBitsToBuffer(accumData, 6, buf, &result.bitLength);
+ assert(result.bitLength == bitLen);
+ result.data = buf;
+ return result;
+}
+
+
+// Public function - see documentation comment in header file.
+struct qrcodegen_Segment qrcodegen_makeEci(long assignVal, uint8_t buf[]) {
+ struct qrcodegen_Segment result;
+ result.mode = qrcodegen_Mode_ECI;
+ result.numChars = 0;
+ result.bitLength = 0;
+ if (assignVal < 0) {
+ assert(false);
+ } else if (assignVal < (1 << 7)) {
+ memset(buf, 0, 1 * sizeof(buf[0]));
+ appendBitsToBuffer(assignVal, 8, buf, &result.bitLength);
+ } else if (assignVal < (1 << 14)) {
+ memset(buf, 0, 2 * sizeof(buf[0]));
+ appendBitsToBuffer(2, 2, buf, &result.bitLength);
+ appendBitsToBuffer(assignVal, 14, buf, &result.bitLength);
+ } else if (assignVal < 1000000L) {
+ memset(buf, 0, 3 * sizeof(buf[0]));
+ appendBitsToBuffer(6, 3, buf, &result.bitLength);
+ appendBitsToBuffer(assignVal >> 10, 11, buf, &result.bitLength);
+ appendBitsToBuffer(assignVal & 0x3FF, 10, buf, &result.bitLength);
+ } else {
+ assert(false);
+ }
+ result.data = buf;
+ return result;
+}
+
+
+// Calculates the number of bits needed to encode the given segments at the given version.
+// Returns a non-negative number if successful. Otherwise returns -1 if a segment has too
+// many characters to fit its length field, or the total bits exceeds INT16_MAX.
+testable int getTotalBits(const struct qrcodegen_Segment segs[], size_t len, int version) {
+ assert(segs != NULL || len == 0);
+ long result = 0;
+ for (size_t i = 0; i < len; i++) {
+ int numChars = segs[i].numChars;
+ int bitLength = segs[i].bitLength;
+ assert(0 <= numChars && numChars <= INT16_MAX);
+ assert(0 <= bitLength && bitLength <= INT16_MAX);
+ int ccbits = numCharCountBits(segs[i].mode, version);
+ assert(0 <= ccbits && ccbits <= 16);
+ if (numChars >= (1L << ccbits))
+ return -1; // The segment's length doesn't fit the field's bit width
+ result += 4L + ccbits + bitLength;
+ if (result > INT16_MAX)
+ return -1; // The sum might overflow an int type
+ }
+ assert(0 <= result && result <= INT16_MAX);
+ return (int)result;
+}
+
+
+// Returns the bit width of the character count field for a segment in the given mode
+// in a QR Code at the given version number. The result is in the range [0, 16].
+static int numCharCountBits(enum qrcodegen_Mode mode, int version) {
+ assert(qrcodegen_VERSION_MIN <= version && version <= qrcodegen_VERSION_MAX);
+ int i = (version + 7) / 17;
+ switch (mode) {
+ case qrcodegen_Mode_NUMERIC : { static const int temp[] = {10, 12, 14}; return temp[i]; }
+ case qrcodegen_Mode_ALPHANUMERIC: { static const int temp[] = { 9, 11, 13}; return temp[i]; }
+ case qrcodegen_Mode_BYTE : { static const int temp[] = { 8, 16, 16}; return temp[i]; }
+ case qrcodegen_Mode_KANJI : { static const int temp[] = { 8, 10, 12}; return temp[i]; }
+ case qrcodegen_Mode_ECI : return 0;
+ default: assert(false); return -1; // Dummy value
+ }
+}
+
+int qrcodegen_getMinFitVersion(enum qrcodegen_Ecc ecl, size_t dataLen)
+{
+ struct qrcodegen_Segment seg;
+ seg.mode = qrcodegen_Mode_BYTE;
+ seg.bitLength = calcSegmentBitLength(seg.mode, dataLen);
+ seg.numChars = (int)dataLen;
+
+ for (int version = qrcodegen_VERSION_MIN; version <= qrcodegen_VERSION_MAX; version++) {
+ int dataCapacityBits = getNumDataCodewords(version, ecl) * 8; // Number of data bits available
+ int dataUsedBits = getTotalBits(&seg, 1, version);
+ if (dataUsedBits != -1 && dataUsedBits <= dataCapacityBits)
+ return version;
+ }
+ return -1;
+}
+
+int qrcodegen_version2size(int version)
+{
+ if (version < qrcodegen_VERSION_MIN || version > qrcodegen_VERSION_MAX) {
+ return -1;
+ }
+
+ return ((version - 1)*4 + 21);
+}
diff --git a/lib/libesp32/berry_matter/src/qrcodegen.h b/lib/libesp32/berry_matter/src/qrcodegen.h
new file mode 100644
index 000000000..b484e9175
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/qrcodegen.h
@@ -0,0 +1,319 @@
+/*
+ * QR Code generator library (C)
+ *
+ * Copyright (c) Project Nayuki. (MIT License)
+ * https://www.nayuki.io/page/qr-code-generator-library
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ * the Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ * - The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * - The Software is provided "as is", without warranty of any kind, express or
+ * implied, including but not limited to the warranties of merchantability,
+ * fitness for a particular purpose and noninfringement. In no event shall the
+ * authors or copyright holders be liable for any claim, damages or other
+ * liability, whether in an action of contract, tort or otherwise, arising from,
+ * out of or in connection with the Software or the use or other dealings in the
+ * Software.
+ */
+
+#pragma once
+
+#include
+#include
+#include
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*
+ * This library creates QR Code symbols, which is a type of two-dimension barcode.
+ * Invented by Denso Wave and described in the ISO/IEC 18004 standard.
+ * A QR Code structure is an immutable square grid of black and white cells.
+ * The library provides functions to create a QR Code from text or binary data.
+ * The library covers the QR Code Model 2 specification, supporting all versions (sizes)
+ * from 1 to 40, all 4 error correction levels, and 4 character encoding modes.
+ *
+ * Ways to create a QR Code object:
+ * - High level: Take the payload data and call qrcodegen_encodeText() or qrcodegen_encodeBinary().
+ * - Low level: Custom-make the list of segments and call
+ * qrcodegen_encodeSegments() or qrcodegen_encodeSegmentsAdvanced().
+ * (Note that all ways require supplying the desired error correction level and various byte buffers.)
+ */
+
+
+/*---- Enum and struct types----*/
+
+/*
+ * The error correction level in a QR Code symbol.
+ */
+enum qrcodegen_Ecc {
+ // Must be declared in ascending order of error protection
+ // so that an internal qrcodegen function works properly
+ qrcodegen_Ecc_LOW = 0 , // The QR Code can tolerate about 7% erroneous codewords
+ qrcodegen_Ecc_MEDIUM , // The QR Code can tolerate about 15% erroneous codewords
+ qrcodegen_Ecc_QUARTILE, // The QR Code can tolerate about 25% erroneous codewords
+ qrcodegen_Ecc_HIGH , // The QR Code can tolerate about 30% erroneous codewords
+};
+
+
+/*
+ * The mask pattern used in a QR Code symbol.
+ */
+enum qrcodegen_Mask {
+ // A special value to tell the QR Code encoder to
+ // automatically select an appropriate mask pattern
+ qrcodegen_Mask_AUTO = -1,
+ // The eight actual mask patterns
+ qrcodegen_Mask_0 = 0,
+ qrcodegen_Mask_1,
+ qrcodegen_Mask_2,
+ qrcodegen_Mask_3,
+ qrcodegen_Mask_4,
+ qrcodegen_Mask_5,
+ qrcodegen_Mask_6,
+ qrcodegen_Mask_7,
+};
+
+
+/*
+ * Describes how a segment's data bits are interpreted.
+ */
+enum qrcodegen_Mode {
+ qrcodegen_Mode_NUMERIC = 0x1,
+ qrcodegen_Mode_ALPHANUMERIC = 0x2,
+ qrcodegen_Mode_BYTE = 0x4,
+ qrcodegen_Mode_KANJI = 0x8,
+ qrcodegen_Mode_ECI = 0x7,
+};
+
+
+/*
+ * A segment of character/binary/control data in a QR Code symbol.
+ * The mid-level way to create a segment is to take the payload data
+ * and call a factory function such as qrcodegen_makeNumeric().
+ * The low-level way to create a segment is to custom-make the bit buffer
+ * and initialize a qrcodegen_Segment struct with appropriate values.
+ * Even in the most favorable conditions, a QR Code can only hold 7089 characters of data.
+ * Any segment longer than this is meaningless for the purpose of generating QR Codes.
+ * Moreover, the maximum allowed bit length is 32767 because
+ * the largest QR Code (version 40) has 31329 modules.
+ */
+struct qrcodegen_Segment {
+ // The mode indicator of this segment.
+ enum qrcodegen_Mode mode;
+
+ // The length of this segment's unencoded data. Measured in characters for
+ // numeric/alphanumeric/kanji mode, bytes for byte mode, and 0 for ECI mode.
+ // Always zero or positive. Not the same as the data's bit length.
+ int numChars;
+
+ // The data bits of this segment, packed in bitwise big endian.
+ // Can be null if the bit length is zero.
+ uint8_t *data;
+
+ // The number of valid data bits used in the buffer. Requires
+ // 0 <= bitLength <= 32767, and bitLength <= (capacity of data array) * 8.
+ // The character count (numChars) must agree with the mode and the bit buffer length.
+ int bitLength;
+};
+
+
+
+/*---- Macro constants and functions ----*/
+
+#define qrcodegen_VERSION_MIN 1 // The minimum version number supported in the QR Code Model 2 standard
+#define qrcodegen_VERSION_MAX 40 // The maximum version number supported in the QR Code Model 2 standard
+
+// Calculates the number of bytes needed to store any QR Code up to and including the given version number,
+// as a compile-time constant. For example, 'uint8_t buffer[qrcodegen_BUFFER_LEN_FOR_VERSION(25)];'
+// can store any single QR Code from version 1 to 25 (inclusive). The result fits in an int (or int16).
+// Requires qrcodegen_VERSION_MIN <= n <= qrcodegen_VERSION_MAX.
+#define qrcodegen_BUFFER_LEN_FOR_VERSION(n) ((((n) * 4 + 17) * ((n) * 4 + 17) + 7) / 8 + 1)
+
+// The worst-case number of bytes needed to store one QR Code, up to and including
+// version 40. This value equals 3918, which is just under 4 kilobytes.
+// Use this more convenient value to avoid calculating tighter memory bounds for buffers.
+#define qrcodegen_BUFFER_LEN_MAX qrcodegen_BUFFER_LEN_FOR_VERSION(qrcodegen_VERSION_MAX)
+
+
+
+/*---- Functions (high level) to generate QR Codes ----*/
+
+/*
+ * Encodes the given text string to a QR Code, returning true if encoding succeeded.
+ * If the data is too long to fit in any version in the given range
+ * at the given ECC level, then false is returned.
+ * - The input text must be encoded in UTF-8 and contain no NULs.
+ * - The variables ecl and mask must correspond to enum constant values.
+ * - Requires 1 <= minVersion <= maxVersion <= 40.
+ * - The arrays tempBuffer and qrcode must each have a length
+ * of at least qrcodegen_BUFFER_LEN_FOR_VERSION(maxVersion).
+ * - After the function returns, tempBuffer contains no useful data.
+ * - If successful, the resulting QR Code may use numeric,
+ * alphanumeric, or byte mode to encode the text.
+ * - In the most optimistic case, a QR Code at version 40 with low ECC
+ * can hold any UTF-8 string up to 2953 bytes, or any alphanumeric string
+ * up to 4296 characters, or any digit string up to 7089 characters.
+ * These numbers represent the hard upper limit of the QR Code standard.
+ * - Please consult the QR Code specification for information on
+ * data capacities per version, ECC level, and text encoding mode.
+ */
+bool qrcodegen_encodeText(const char *text, uint8_t tempBuffer[], uint8_t qrcode[],
+ enum qrcodegen_Ecc ecl, int minVersion, int maxVersion, enum qrcodegen_Mask mask, bool boostEcl);
+
+
+/*
+ * Encodes the given binary data to a QR Code, returning true if encoding succeeded.
+ * If the data is too long to fit in any version in the given range
+ * at the given ECC level, then false is returned.
+ * - The input array range dataAndTemp[0 : dataLen] should normally be
+ * valid UTF-8 text, but is not required by the QR Code standard.
+ * - The variables ecl and mask must correspond to enum constant values.
+ * - Requires 1 <= minVersion <= maxVersion <= 40.
+ * - The arrays dataAndTemp and qrcode must each have a length
+ * of at least qrcodegen_BUFFER_LEN_FOR_VERSION(maxVersion).
+ * - After the function returns, the contents of dataAndTemp may have changed,
+ * and does not represent useful data anymore.
+ * - If successful, the resulting QR Code will use byte mode to encode the data.
+ * - In the most optimistic case, a QR Code at version 40 with low ECC can hold any byte
+ * sequence up to length 2953. This is the hard upper limit of the QR Code standard.
+ * - Please consult the QR Code specification for information on
+ * data capacities per version, ECC level, and text encoding mode.
+ */
+bool qrcodegen_encodeBinary(uint8_t dataAndTemp[], size_t dataLen, uint8_t qrcode[],
+ enum qrcodegen_Ecc ecl, int minVersion, int maxVersion, enum qrcodegen_Mask mask, bool boostEcl);
+
+
+/*---- Functions (low level) to generate QR Codes ----*/
+
+/*
+ * Renders a QR Code representing the given segments at the given error correction level.
+ * The smallest possible QR Code version is automatically chosen for the output. Returns true if
+ * QR Code creation succeeded, or false if the data is too long to fit in any version. The ECC level
+ * of the result may be higher than the ecl argument if it can be done without increasing the version.
+ * This function allows the user to create a custom sequence of segments that switches
+ * between modes (such as alphanumeric and byte) to encode text in less space.
+ * This is a low-level API; the high-level API is qrcodegen_encodeText() and qrcodegen_encodeBinary().
+ * To save memory, the segments' data buffers can alias/overlap tempBuffer, and will
+ * result in them being clobbered, but the QR Code output will still be correct.
+ * But the qrcode array must not overlap tempBuffer or any segment's data buffer.
+ */
+bool qrcodegen_encodeSegments(const struct qrcodegen_Segment segs[], size_t len,
+ enum qrcodegen_Ecc ecl, uint8_t tempBuffer[], uint8_t qrcode[]);
+
+
+/*
+ * Renders a QR Code representing the given segments with the given encoding parameters.
+ * Returns true if QR Code creation succeeded, or false if the data is too long to fit in the range of versions.
+ * The smallest possible QR Code version within the given range is automatically
+ * chosen for the output. Iff boostEcl is true, then the ECC level of the result
+ * may be higher than the ecl argument if it can be done without increasing the
+ * version. The mask number is either between 0 to 7 (inclusive) to force that
+ * mask, or -1 to automatically choose an appropriate mask (which may be slow).
+ * This function allows the user to create a custom sequence of segments that switches
+ * between modes (such as alphanumeric and byte) to encode text in less space.
+ * This is a low-level API; the high-level API is qrcodegen_encodeText() and qrcodegen_encodeBinary().
+ * To save memory, the segments' data buffers can alias/overlap tempBuffer, and will
+ * result in them being clobbered, but the QR Code output will still be correct.
+ * But the qrcode array must not overlap tempBuffer or any segment's data buffer.
+ */
+bool qrcodegen_encodeSegmentsAdvanced(const struct qrcodegen_Segment segs[], size_t len, enum qrcodegen_Ecc ecl,
+ int minVersion, int maxVersion, int mask, bool boostEcl, uint8_t tempBuffer[], uint8_t qrcode[]);
+
+
+/*
+ * Tests whether the given string can be encoded as a segment in alphanumeric mode.
+ * A string is encodable iff each character is in the following set: 0 to 9, A to Z
+ * (uppercase only), space, dollar, percent, asterisk, plus, hyphen, period, slash, colon.
+ */
+bool qrcodegen_isAlphanumeric(const char *text);
+
+
+/*
+ * Tests whether the given string can be encoded as a segment in numeric mode.
+ * A string is encodable iff each character is in the range 0 to 9.
+ */
+bool qrcodegen_isNumeric(const char *text);
+
+
+/*
+ * Returns the number of bytes (uint8_t) needed for the data buffer of a segment
+ * containing the given number of characters using the given mode. Notes:
+ * - Returns SIZE_MAX on failure, i.e. numChars > INT16_MAX or
+ * the number of needed bits exceeds INT16_MAX (i.e. 32767).
+ * - Otherwise, all valid results are in the range [0, ceil(INT16_MAX / 8)], i.e. at most 4096.
+ * - It is okay for the user to allocate more bytes for the buffer than needed.
+ * - For byte mode, numChars measures the number of bytes, not Unicode code points.
+ * - For ECI mode, numChars must be 0, and the worst-case number of bytes is returned.
+ * An actual ECI segment can have shorter data. For non-ECI modes, the result is exact.
+ */
+size_t qrcodegen_calcSegmentBufferSize(enum qrcodegen_Mode mode, size_t numChars);
+
+
+/*
+ * Returns a segment representing the given binary data encoded in
+ * byte mode. All input byte arrays are acceptable. Any text string
+ * can be converted to UTF-8 bytes and encoded as a byte mode segment.
+ */
+struct qrcodegen_Segment qrcodegen_makeBytes(const uint8_t data[], size_t len, uint8_t buf[]);
+
+
+/*
+ * Returns a segment representing the given string of decimal digits encoded in numeric mode.
+ */
+struct qrcodegen_Segment qrcodegen_makeNumeric(const char *digits, uint8_t buf[]);
+
+
+/*
+ * Returns a segment representing the given text string encoded in alphanumeric mode.
+ * The characters allowed are: 0 to 9, A to Z (uppercase only), space,
+ * dollar, percent, asterisk, plus, hyphen, period, slash, colon.
+ */
+struct qrcodegen_Segment qrcodegen_makeAlphanumeric(const char *text, uint8_t buf[]);
+
+
+/*
+ * Returns a segment representing an Extended Channel Interpretation
+ * (ECI) designator with the given assignment value.
+ */
+struct qrcodegen_Segment qrcodegen_makeEci(long assignVal, uint8_t buf[]);
+
+
+/*---- Functions to extract raw data from QR Codes ----*/
+
+/*
+ * Returns the side length of the given QR Code, assuming that encoding succeeded.
+ * The result is in the range [21, 177]. Note that the length of the array buffer
+ * is related to the side length - every 'uint8_t qrcode[]' must have length at least
+ * qrcodegen_BUFFER_LEN_FOR_VERSION(version), which equals ceil(size^2 / 8 + 1).
+ */
+int qrcodegen_getSize(const uint8_t qrcode[]);
+
+
+/*
+ * Returns the color of the module (pixel) at the given coordinates, which is false
+ * for white or true for black. The top left corner has the coordinates (x=0, y=0).
+ * If the given coordinates are out of bounds, then false (white) is returned.
+ */
+bool qrcodegen_getModule(const uint8_t qrcode[], int x, int y);
+
+/*
+ * Returns the qrcode size of the specified version. Returns -1 on failure
+ */
+int qrcodegen_version2size(int version);
+/*
+ * Returns the min version of the data that can be stored. Returns -1 on failure
+ */
+int qrcodegen_getMinFitVersion(enum qrcodegen_Ecc ecl, size_t dataLen);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Commissioning.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Commissioning.h
index 8888f26c3..0795e40ed 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Commissioning.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Commissioning.h
@@ -7,11 +7,11 @@
extern const bclass be_class_Matter_Commisioning_Context;
/********************************************************************
-** Solidified function: parse_PBKDFParamRequest
+** Solidified function: parse_StatusReport
********************************************************************/
-be_local_closure(Matter_Commisioning_Context_parse_PBKDFParamRequest, /* name */
+be_local_closure(Matter_Commisioning_Context_parse_StatusReport, /* name */
be_nested_proto(
- 14, /* nstack */
+ 7, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
@@ -19,153 +19,34 @@ be_local_closure(Matter_Commisioning_Context_parse_PBKDFParamRequest, /* name
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[48]) { /* constants */
- /* K0 */ be_nested_str_weak(crypto),
- /* K1 */ be_nested_str_weak(opcode),
- /* K2 */ be_nested_str_weak(local_session_id),
- /* K3 */ be_const_int(0),
- /* K4 */ be_nested_str_weak(protocol_id),
- /* K5 */ be_nested_str_weak(protocol_error),
- /* K6 */ be_nested_str_weak(invalid_X20PBKDFParamRequest_X20message),
- /* K7 */ be_nested_str_weak(matter),
- /* K8 */ be_nested_str_weak(PBKDFParamRequest),
- /* K9 */ be_nested_str_weak(parse),
- /* K10 */ be_nested_str_weak(raw),
- /* K11 */ be_nested_str_weak(app_payload_idx),
- /* K12 */ be_nested_str_weak(session),
- /* K13 */ be_nested_str_weak(set_mode),
- /* K14 */ be_nested_str_weak(Session),
- /* K15 */ be_nested_str_weak(__PASE),
- /* K16 */ be_const_int(2147483647),
- /* K17 */ be_nested_str_weak(passcodeId),
- /* K18 */ be_nested_str_weak(non_X2Dzero_X20passcode_X20id),
- /* K19 */ be_nested_str_weak(future_initiator_session_id),
- /* K20 */ be_nested_str_weak(initiator_session_id),
- /* K21 */ be_nested_str_weak(future_local_session_id),
- /* K22 */ be_nested_str_weak(device),
- /* K23 */ be_nested_str_weak(sessions),
- /* K24 */ be_nested_str_weak(gen_local_session_id),
- /* K25 */ be_nested_str_weak(PBKDFParamResponse),
- /* K26 */ be_nested_str_weak(initiatorRandom),
- /* K27 */ be_nested_str_weak(responderRandom),
- /* K28 */ be_nested_str_weak(random),
- /* K29 */ be_nested_str_weak(responderSessionId),
- /* K30 */ be_nested_str_weak(pbkdf_parameters_salt),
- /* K31 */ be_nested_str_weak(salt),
- /* K32 */ be_nested_str_weak(pbkdf_parameters_iterations),
- /* K33 */ be_nested_str_weak(iterations),
- /* K34 */ be_nested_str_weak(tasmota),
- /* K35 */ be_nested_str_weak(log),
- /* K36 */ be_nested_str_weak(MTR_X3A_X20pbkdfparamresp_X3A_X20),
- /* K37 */ be_nested_str_weak(inspect),
- /* K38 */ be_const_int(3),
- /* K39 */ be_nested_str_weak(encode),
- /* K40 */ be_nested_str_weak(MTR_X3A_X20pbkdfparamresp_raw_X3A_X20),
- /* K41 */ be_nested_str_weak(tohex),
- /* K42 */ be_nested_str_weak(build_response),
- /* K43 */ be_nested_str_weak(responder),
- /* K44 */ be_nested_str_weak(send_response),
- /* K45 */ be_nested_str_weak(remote_ip),
- /* K46 */ be_nested_str_weak(remote_port),
- /* K47 */ be_nested_str_weak(message_counter),
+ ( &(const bvalue[ 9]) { /* constants */
+ /* K0 */ be_nested_str_weak(session),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(MTR_X3A_X20_X3EStatus_X20_X20_X20_X20),
+ /* K4 */ be_nested_str_weak(raw),
+ /* K5 */ be_nested_str_weak(app_payload_idx),
+ /* K6 */ be_const_int(2147483647),
+ /* K7 */ be_nested_str_weak(tohex),
+ /* K8 */ be_const_int(2),
}),
- be_str_weak(parse_PBKDFParamRequest),
+ be_str_weak(parse_StatusReport),
&be_const_str_solidified,
- ( &(const binstruction[94]) { /* code */
- 0xA40A0000, // 0000 IMPORT R2 K0
- 0x880C0301, // 0001 GETMBR R3 R1 K1
- 0x5412001F, // 0002 LDINT R4 32
- 0x200C0604, // 0003 NE R3 R3 R4
- 0x740E0005, // 0004 JMPT R3 #000B
- 0x880C0302, // 0005 GETMBR R3 R1 K2
- 0x200C0703, // 0006 NE R3 R3 K3
- 0x740E0002, // 0007 JMPT R3 #000B
- 0x880C0304, // 0008 GETMBR R3 R1 K4
- 0x200C0703, // 0009 NE R3 R3 K3
- 0x780E0000, // 000A JMPF R3 #000C
- 0xB0060B06, // 000B RAISE 1 K5 K6
- 0xB80E0E00, // 000C GETNGBL R3 K7
- 0x8C0C0708, // 000D GETMET R3 R3 K8
- 0x7C0C0200, // 000E CALL R3 1
- 0x8C0C0709, // 000F GETMET R3 R3 K9
- 0x8814030A, // 0010 GETMBR R5 R1 K10
- 0x8818030B, // 0011 GETMBR R6 R1 K11
- 0x7C0C0600, // 0012 CALL R3 3
- 0x8810030C, // 0013 GETMBR R4 R1 K12
- 0x8C10090D, // 0014 GETMET R4 R4 K13
- 0xB81A0E00, // 0015 GETNGBL R6 K7
- 0x88180D0E, // 0016 GETMBR R6 R6 K14
- 0x88180D0F, // 0017 GETMBR R6 R6 K15
- 0x7C100400, // 0018 CALL R4 2
- 0x8810030B, // 0019 GETMBR R4 R1 K11
- 0x40100910, // 001A CONNECT R4 R4 K16
- 0x8814030A, // 001B GETMBR R5 R1 K10
- 0x94100A04, // 001C GETIDX R4 R5 R4
- 0x90021004, // 001D SETMBR R0 K8 R4
- 0x88100711, // 001E GETMBR R4 R3 K17
- 0x20100903, // 001F NE R4 R4 K3
- 0x78120000, // 0020 JMPF R4 #0022
- 0xB0060B12, // 0021 RAISE 1 K5 K18
- 0x88100714, // 0022 GETMBR R4 R3 K20
- 0x90022604, // 0023 SETMBR R0 K19 R4
- 0x88100116, // 0024 GETMBR R4 R0 K22
- 0x88100917, // 0025 GETMBR R4 R4 K23
- 0x8C100918, // 0026 GETMET R4 R4 K24
- 0x7C100200, // 0027 CALL R4 1
- 0x90022A04, // 0028 SETMBR R0 K21 R4
- 0xB8120E00, // 0029 GETNGBL R4 K7
- 0x8C100919, // 002A GETMET R4 R4 K25
- 0x7C100200, // 002B CALL R4 1
- 0x8814071A, // 002C GETMBR R5 R3 K26
- 0x90123405, // 002D SETMBR R4 K26 R5
- 0x8C14051C, // 002E GETMET R5 R2 K28
- 0x541E001F, // 002F LDINT R7 32
- 0x7C140400, // 0030 CALL R5 2
- 0x90123605, // 0031 SETMBR R4 K27 R5
- 0x88140115, // 0032 GETMBR R5 R0 K21
- 0x90123A05, // 0033 SETMBR R4 K29 R5
- 0x88140116, // 0034 GETMBR R5 R0 K22
- 0x88140B1F, // 0035 GETMBR R5 R5 K31
- 0x90123C05, // 0036 SETMBR R4 K30 R5
- 0x88140116, // 0037 GETMBR R5 R0 K22
- 0x88140B21, // 0038 GETMBR R5 R5 K33
- 0x90124005, // 0039 SETMBR R4 K32 R5
- 0xB8164400, // 003A GETNGBL R5 K34
- 0x8C140B23, // 003B GETMET R5 R5 K35
- 0x601C0008, // 003C GETGBL R7 G8
- 0xB8220E00, // 003D GETNGBL R8 K7
- 0x8C201125, // 003E GETMET R8 R8 K37
- 0x5C280800, // 003F MOVE R10 R4
- 0x7C200400, // 0040 CALL R8 2
- 0x7C1C0200, // 0041 CALL R7 1
- 0x001E4807, // 0042 ADD R7 K36 R7
- 0x58200026, // 0043 LDCONST R8 K38
- 0x7C140600, // 0044 CALL R5 3
- 0x8C140927, // 0045 GETMET R5 R4 K39
- 0x7C140200, // 0046 CALL R5 1
- 0xB81A4400, // 0047 GETNGBL R6 K34
- 0x8C180D23, // 0048 GETMET R6 R6 K35
- 0x8C200B29, // 0049 GETMET R8 R5 K41
- 0x7C200200, // 004A CALL R8 1
- 0x00225008, // 004B ADD R8 K40 R8
- 0x58240026, // 004C LDCONST R9 K38
- 0x7C180600, // 004D CALL R6 3
- 0x90023205, // 004E SETMBR R0 K25 R5
- 0x8C18032A, // 004F GETMET R6 R1 K42
- 0x54220020, // 0050 LDINT R8 33
- 0x50240200, // 0051 LDBOOL R9 1 0
- 0x7C180600, // 0052 CALL R6 3
- 0x8C1C0D27, // 0053 GETMET R7 R6 K39
- 0x5C240A00, // 0054 MOVE R9 R5
- 0x7C1C0400, // 0055 CALL R7 2
- 0x8820012B, // 0056 GETMBR R8 R0 K43
- 0x8C20112C, // 0057 GETMET R8 R8 K44
- 0x5C280E00, // 0058 MOVE R10 R7
- 0x882C032D, // 0059 GETMBR R11 R1 K45
- 0x8830032E, // 005A GETMBR R12 R1 K46
- 0x88340D2F, // 005B GETMBR R13 R6 K47
- 0x7C200A00, // 005C CALL R8 5
- 0x80000000, // 005D RET 0
+ ( &(const binstruction[14]) { /* code */
+ 0x88080300, // 0000 GETMBR R2 R1 K0
+ 0xB80E0200, // 0001 GETNGBL R3 K1
+ 0x8C0C0702, // 0002 GETMET R3 R3 K2
+ 0x88140305, // 0003 GETMBR R5 R1 K5
+ 0x40140B06, // 0004 CONNECT R5 R5 K6
+ 0x88180304, // 0005 GETMBR R6 R1 K4
+ 0x94140C05, // 0006 GETIDX R5 R6 R5
+ 0x8C140B07, // 0007 GETMET R5 R5 K7
+ 0x7C140200, // 0008 CALL R5 1
+ 0x00160605, // 0009 ADD R5 K3 R5
+ 0x58180008, // 000A LDCONST R6 K8
+ 0x7C0C0600, // 000B CALL R3 3
+ 0x500C0000, // 000C LDBOOL R3 0 0
+ 0x80040600, // 000D RET 1 R3
})
)
);
@@ -173,484 +54,9 @@ be_local_closure(Matter_Commisioning_Context_parse_PBKDFParamRequest, /* name
/********************************************************************
-** Solidified function: init
+** Solidified function: find_fabric_by_destination_id
********************************************************************/
-be_local_closure(Matter_Commisioning_Context_init, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 6]) { /* constants */
- /* K0 */ be_nested_str_weak(crypto),
- /* K1 */ be_nested_str_weak(responder),
- /* K2 */ be_nested_str_weak(device),
- /* K3 */ be_nested_str_weak(y),
- /* K4 */ be_nested_str_weak(random),
- /* K5 */ be_nested_str_weak(window_open),
- }),
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[11]) { /* code */
- 0xA40A0000, // 0000 IMPORT R2 K0
- 0x90020201, // 0001 SETMBR R0 K1 R1
- 0x880C0302, // 0002 GETMBR R3 R1 K2
- 0x90020403, // 0003 SETMBR R0 K2 R3
- 0x8C0C0504, // 0004 GETMET R3 R2 K4
- 0x5416001F, // 0005 LDINT R5 32
- 0x7C0C0400, // 0006 CALL R3 2
- 0x90020603, // 0007 SETMBR R0 K3 R3
- 0x500C0200, // 0008 LDBOOL R3 1 0
- 0x90020A03, // 0009 SETMBR R0 K5 R3
- 0x80000000, // 000A RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: parse_Pake1
-********************************************************************/
-be_local_closure(Matter_Commisioning_Context_parse_Pake1, /* name */
- be_nested_proto(
- 16, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[84]) { /* constants */
- /* K0 */ be_nested_str_weak(crypto),
- /* K1 */ be_nested_str_weak(opcode),
- /* K2 */ be_nested_str_weak(local_session_id),
- /* K3 */ be_const_int(0),
- /* K4 */ be_nested_str_weak(protocol_id),
- /* K5 */ be_nested_str_weak(protocol_error),
- /* K6 */ be_nested_str_weak(invalid_X20Pake1_X20message),
- /* K7 */ be_nested_str_weak(matter),
- /* K8 */ be_nested_str_weak(Pake1),
- /* K9 */ be_nested_str_weak(parse),
- /* K10 */ be_nested_str_weak(raw),
- /* K11 */ be_nested_str_weak(app_payload_idx),
- /* K12 */ be_nested_str_weak(pA),
- /* K13 */ be_nested_str_weak(tasmota),
- /* K14 */ be_nested_str_weak(log),
- /* K15 */ be_nested_str_weak(MTR_X3A_X20received_X20pA_X3D),
- /* K16 */ be_nested_str_weak(tohex),
- /* K17 */ be_const_int(3),
- /* K18 */ be_nested_str_weak(MTR_X3A_X20spake_X3A_X20),
- /* K19 */ be_nested_str_weak(inspect),
- /* K20 */ be_nested_str_weak(spake),
- /* K21 */ be_nested_str_weak(SPAKE2P_Matter),
- /* K22 */ be_nested_str_weak(device),
- /* K23 */ be_nested_str_weak(w0),
- /* K24 */ be_nested_str_weak(w1),
- /* K25 */ be_nested_str_weak(L),
- /* K26 */ be_nested_str_weak(compute_pB),
- /* K27 */ be_nested_str_weak(y),
- /* K28 */ be_nested_str_weak(pB),
- /* K29 */ be_nested_str_weak(MTR_X3A_X20y_X3D),
- /* K30 */ be_nested_str_weak(MTR_X3A_X20pb_X3D),
- /* K31 */ be_nested_str_weak(compute_ZV_verifier),
- /* K32 */ be_nested_str_weak(MTR_X3A_X20Z_X3D),
- /* K33 */ be_nested_str_weak(Z),
- /* K34 */ be_nested_str_weak(MTR_X3A_X20V_X3D),
- /* K35 */ be_nested_str_weak(V),
- /* K36 */ be_nested_str_weak(SHA256),
- /* K37 */ be_nested_str_weak(update),
- /* K38 */ be_nested_str_weak(fromstring),
- /* K39 */ be_nested_str_weak(Matter_Context_Prefix),
- /* K40 */ be_nested_str_weak(PBKDFParamRequest),
- /* K41 */ be_nested_str_weak(PBKDFParamResponse),
- /* K42 */ be_nested_str_weak(out),
- /* K43 */ be_nested_str_weak(MTR_X3A_X20Context_X3D),
- /* K44 */ be_nested_str_weak(set_context),
- /* K45 */ be_nested_str_weak(compute_TT_hash),
- /* K46 */ be_nested_str_weak(MTR_X3A_X20_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D),
- /* K47 */ be_nested_str_weak(MTR_X3A_X20Context_X20_X3D_X20),
- /* K48 */ be_nested_str_weak(Context),
- /* K49 */ be_nested_str_weak(MTR_X3A_X20A_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K50 */ be_nested_str_weak(A),
- /* K51 */ be_nested_str_weak(MTR_X3A_X20B_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K52 */ be_nested_str_weak(B),
- /* K53 */ be_nested_str_weak(MTR_X3A_X20M_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K54 */ be_nested_str_weak(M),
- /* K55 */ be_nested_str_weak(MTR_X3A_X20N_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K56 */ be_nested_str_weak(N),
- /* K57 */ be_nested_str_weak(MTR_X3A_X20pA_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K58 */ be_nested_str_weak(MTR_X3A_X20pB_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K59 */ be_nested_str_weak(MTR_X3A_X20Z_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K60 */ be_nested_str_weak(MTR_X3A_X20V_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K61 */ be_nested_str_weak(MTR_X3A_X20w0_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K62 */ be_nested_str_weak(MTR_X3A_X20Kmain_X20_X20_X20_X3D),
- /* K63 */ be_nested_str_weak(Kmain),
- /* K64 */ be_nested_str_weak(MTR_X3A_X20KcA_X20_X20_X20_X20_X20_X3D),
- /* K65 */ be_nested_str_weak(KcA),
- /* K66 */ be_nested_str_weak(MTR_X3A_X20KcB_X20_X20_X20_X20_X20_X3D),
- /* K67 */ be_nested_str_weak(KcB),
- /* K68 */ be_nested_str_weak(MTR_X3A_X20K_shared_X3D),
- /* K69 */ be_nested_str_weak(K_shared),
- /* K70 */ be_nested_str_weak(MTR_X3A_X20Ke_X20_X20_X20_X20_X20_X20_X3D),
- /* K71 */ be_nested_str_weak(Ke),
- /* K72 */ be_nested_str_weak(cB),
- /* K73 */ be_nested_str_weak(MTR_X3A_X20cB_X3D),
- /* K74 */ be_nested_str_weak(Pake2),
- /* K75 */ be_nested_str_weak(MTR_X3A_X20pake2_X3A_X20),
- /* K76 */ be_nested_str_weak(encode),
- /* K77 */ be_nested_str_weak(MTR_X3A_X20pake2_raw_X3A_X20),
- /* K78 */ be_nested_str_weak(build_response),
- /* K79 */ be_nested_str_weak(responder),
- /* K80 */ be_nested_str_weak(send_response),
- /* K81 */ be_nested_str_weak(remote_ip),
- /* K82 */ be_nested_str_weak(remote_port),
- /* K83 */ be_nested_str_weak(message_counter),
- }),
- be_str_weak(parse_Pake1),
- &be_const_str_solidified,
- ( &(const binstruction[326]) { /* code */
- 0xA40A0000, // 0000 IMPORT R2 K0
- 0x880C0301, // 0001 GETMBR R3 R1 K1
- 0x54120021, // 0002 LDINT R4 34
- 0x200C0604, // 0003 NE R3 R3 R4
- 0x740E0005, // 0004 JMPT R3 #000B
- 0x880C0302, // 0005 GETMBR R3 R1 K2
- 0x200C0703, // 0006 NE R3 R3 K3
- 0x740E0002, // 0007 JMPT R3 #000B
- 0x880C0304, // 0008 GETMBR R3 R1 K4
- 0x200C0703, // 0009 NE R3 R3 K3
- 0x780E0000, // 000A JMPF R3 #000C
- 0xB0060B06, // 000B RAISE 1 K5 K6
- 0xB80E0E00, // 000C GETNGBL R3 K7
- 0x8C0C0708, // 000D GETMET R3 R3 K8
- 0x7C0C0200, // 000E CALL R3 1
- 0x8C0C0709, // 000F GETMET R3 R3 K9
- 0x8814030A, // 0010 GETMBR R5 R1 K10
- 0x8818030B, // 0011 GETMBR R6 R1 K11
- 0x7C0C0600, // 0012 CALL R3 3
- 0x8810070C, // 0013 GETMBR R4 R3 K12
- 0x90021804, // 0014 SETMBR R0 K12 R4
- 0xB8121A00, // 0015 GETNGBL R4 K13
- 0x8C10090E, // 0016 GETMET R4 R4 K14
- 0x8818010C, // 0017 GETMBR R6 R0 K12
- 0x8C180D10, // 0018 GETMET R6 R6 K16
- 0x7C180200, // 0019 CALL R6 1
- 0x001A1E06, // 001A ADD R6 K15 R6
- 0x581C0011, // 001B LDCONST R7 K17
- 0x7C100600, // 001C CALL R4 3
- 0xB8121A00, // 001D GETNGBL R4 K13
- 0x8C10090E, // 001E GETMET R4 R4 K14
- 0xB81A0E00, // 001F GETNGBL R6 K7
- 0x8C180D13, // 0020 GETMET R6 R6 K19
- 0x88200114, // 0021 GETMBR R8 R0 K20
- 0x7C180400, // 0022 CALL R6 2
- 0x001A2406, // 0023 ADD R6 K18 R6
- 0x581C0011, // 0024 LDCONST R7 K17
- 0x7C100600, // 0025 CALL R4 3
- 0x8C100515, // 0026 GETMET R4 R2 K21
- 0x88180116, // 0027 GETMBR R6 R0 K22
- 0x88180D17, // 0028 GETMBR R6 R6 K23
- 0x881C0116, // 0029 GETMBR R7 R0 K22
- 0x881C0F18, // 002A GETMBR R7 R7 K24
- 0x88200116, // 002B GETMBR R8 R0 K22
- 0x88201119, // 002C GETMBR R8 R8 K25
- 0x7C100800, // 002D CALL R4 4
- 0x90022804, // 002E SETMBR R0 K20 R4
- 0x88100114, // 002F GETMBR R4 R0 K20
- 0x8C10091A, // 0030 GETMET R4 R4 K26
- 0x8818011B, // 0031 GETMBR R6 R0 K27
- 0x7C100400, // 0032 CALL R4 2
- 0x88100114, // 0033 GETMBR R4 R0 K20
- 0x8810091C, // 0034 GETMBR R4 R4 K28
- 0x90023804, // 0035 SETMBR R0 K28 R4
- 0xB8121A00, // 0036 GETNGBL R4 K13
- 0x8C10090E, // 0037 GETMET R4 R4 K14
- 0x8818011B, // 0038 GETMBR R6 R0 K27
- 0x8C180D10, // 0039 GETMET R6 R6 K16
- 0x7C180200, // 003A CALL R6 1
- 0x001A3A06, // 003B ADD R6 K29 R6
- 0x581C0011, // 003C LDCONST R7 K17
- 0x7C100600, // 003D CALL R4 3
- 0xB8121A00, // 003E GETNGBL R4 K13
- 0x8C10090E, // 003F GETMET R4 R4 K14
- 0x8818011C, // 0040 GETMBR R6 R0 K28
- 0x8C180D10, // 0041 GETMET R6 R6 K16
- 0x7C180200, // 0042 CALL R6 1
- 0x001A3C06, // 0043 ADD R6 K30 R6
- 0x581C0011, // 0044 LDCONST R7 K17
- 0x7C100600, // 0045 CALL R4 3
- 0x88100114, // 0046 GETMBR R4 R0 K20
- 0x8C10091F, // 0047 GETMET R4 R4 K31
- 0x8818010C, // 0048 GETMBR R6 R0 K12
- 0x7C100400, // 0049 CALL R4 2
- 0xB8121A00, // 004A GETNGBL R4 K13
- 0x8C10090E, // 004B GETMET R4 R4 K14
- 0x88180114, // 004C GETMBR R6 R0 K20
- 0x88180D21, // 004D GETMBR R6 R6 K33
- 0x8C180D10, // 004E GETMET R6 R6 K16
- 0x7C180200, // 004F CALL R6 1
- 0x001A4006, // 0050 ADD R6 K32 R6
- 0x581C0011, // 0051 LDCONST R7 K17
- 0x7C100600, // 0052 CALL R4 3
- 0xB8121A00, // 0053 GETNGBL R4 K13
- 0x8C10090E, // 0054 GETMET R4 R4 K14
- 0x88180114, // 0055 GETMBR R6 R0 K20
- 0x88180D23, // 0056 GETMBR R6 R6 K35
- 0x8C180D10, // 0057 GETMET R6 R6 K16
- 0x7C180200, // 0058 CALL R6 1
- 0x001A4406, // 0059 ADD R6 K34 R6
- 0x581C0011, // 005A LDCONST R7 K17
- 0x7C100600, // 005B CALL R4 3
- 0x8C100524, // 005C GETMET R4 R2 K36
- 0x7C100200, // 005D CALL R4 1
- 0x8C140925, // 005E GETMET R5 R4 K37
- 0x601C0015, // 005F GETGBL R7 G21
- 0x7C1C0000, // 0060 CALL R7 0
- 0x8C1C0F26, // 0061 GETMET R7 R7 K38
- 0x88240127, // 0062 GETMBR R9 R0 K39
- 0x7C1C0400, // 0063 CALL R7 2
- 0x7C140400, // 0064 CALL R5 2
- 0x8C140925, // 0065 GETMET R5 R4 K37
- 0x881C0128, // 0066 GETMBR R7 R0 K40
- 0x7C140400, // 0067 CALL R5 2
- 0x8C140925, // 0068 GETMET R5 R4 K37
- 0x881C0129, // 0069 GETMBR R7 R0 K41
- 0x7C140400, // 006A CALL R5 2
- 0x8C14092A, // 006B GETMET R5 R4 K42
- 0x7C140200, // 006C CALL R5 1
- 0xB81A1A00, // 006D GETNGBL R6 K13
- 0x8C180D0E, // 006E GETMET R6 R6 K14
- 0x8C200B10, // 006F GETMET R8 R5 K16
- 0x7C200200, // 0070 CALL R8 1
- 0x00225608, // 0071 ADD R8 K43 R8
- 0x58240011, // 0072 LDCONST R9 K17
- 0x7C180600, // 0073 CALL R6 3
- 0x88180114, // 0074 GETMBR R6 R0 K20
- 0x881C010C, // 0075 GETMBR R7 R0 K12
- 0x901A1807, // 0076 SETMBR R6 K12 R7
- 0x88180114, // 0077 GETMBR R6 R0 K20
- 0x8C180D2C, // 0078 GETMET R6 R6 K44
- 0x5C200A00, // 0079 MOVE R8 R5
- 0x7C180400, // 007A CALL R6 2
- 0x88180114, // 007B GETMBR R6 R0 K20
- 0x8C180D2D, // 007C GETMET R6 R6 K45
- 0x50200200, // 007D LDBOOL R8 1 0
- 0x7C180400, // 007E CALL R6 2
- 0xB81A1A00, // 007F GETNGBL R6 K13
- 0x8C180D0E, // 0080 GETMET R6 R6 K14
- 0x5820002E, // 0081 LDCONST R8 K46
- 0x58240011, // 0082 LDCONST R9 K17
- 0x7C180600, // 0083 CALL R6 3
- 0xB81A1A00, // 0084 GETNGBL R6 K13
- 0x8C180D0E, // 0085 GETMET R6 R6 K14
- 0x88200114, // 0086 GETMBR R8 R0 K20
- 0x88201130, // 0087 GETMBR R8 R8 K48
- 0x8C201110, // 0088 GETMET R8 R8 K16
- 0x7C200200, // 0089 CALL R8 1
- 0x00225E08, // 008A ADD R8 K47 R8
- 0x58240011, // 008B LDCONST R9 K17
- 0x7C180600, // 008C CALL R6 3
- 0xB81A1A00, // 008D GETNGBL R6 K13
- 0x8C180D0E, // 008E GETMET R6 R6 K14
- 0x88200114, // 008F GETMBR R8 R0 K20
- 0x88201132, // 0090 GETMBR R8 R8 K50
- 0x8C201110, // 0091 GETMET R8 R8 K16
- 0x7C200200, // 0092 CALL R8 1
- 0x00226208, // 0093 ADD R8 K49 R8
- 0x58240011, // 0094 LDCONST R9 K17
- 0x7C180600, // 0095 CALL R6 3
- 0xB81A1A00, // 0096 GETNGBL R6 K13
- 0x8C180D0E, // 0097 GETMET R6 R6 K14
- 0x88200114, // 0098 GETMBR R8 R0 K20
- 0x88201134, // 0099 GETMBR R8 R8 K52
- 0x8C201110, // 009A GETMET R8 R8 K16
- 0x7C200200, // 009B CALL R8 1
- 0x00226608, // 009C ADD R8 K51 R8
- 0x58240011, // 009D LDCONST R9 K17
- 0x7C180600, // 009E CALL R6 3
- 0xB81A1A00, // 009F GETNGBL R6 K13
- 0x8C180D0E, // 00A0 GETMET R6 R6 K14
- 0x88200114, // 00A1 GETMBR R8 R0 K20
- 0x88201136, // 00A2 GETMBR R8 R8 K54
- 0x8C201110, // 00A3 GETMET R8 R8 K16
- 0x7C200200, // 00A4 CALL R8 1
- 0x00226A08, // 00A5 ADD R8 K53 R8
- 0x58240011, // 00A6 LDCONST R9 K17
- 0x7C180600, // 00A7 CALL R6 3
- 0xB81A1A00, // 00A8 GETNGBL R6 K13
- 0x8C180D0E, // 00A9 GETMET R6 R6 K14
- 0x88200114, // 00AA GETMBR R8 R0 K20
- 0x88201138, // 00AB GETMBR R8 R8 K56
- 0x8C201110, // 00AC GETMET R8 R8 K16
- 0x7C200200, // 00AD CALL R8 1
- 0x00226E08, // 00AE ADD R8 K55 R8
- 0x58240011, // 00AF LDCONST R9 K17
- 0x7C180600, // 00B0 CALL R6 3
- 0xB81A1A00, // 00B1 GETNGBL R6 K13
- 0x8C180D0E, // 00B2 GETMET R6 R6 K14
- 0x88200114, // 00B3 GETMBR R8 R0 K20
- 0x8820110C, // 00B4 GETMBR R8 R8 K12
- 0x8C201110, // 00B5 GETMET R8 R8 K16
- 0x7C200200, // 00B6 CALL R8 1
- 0x00227208, // 00B7 ADD R8 K57 R8
- 0x58240011, // 00B8 LDCONST R9 K17
- 0x7C180600, // 00B9 CALL R6 3
- 0xB81A1A00, // 00BA GETNGBL R6 K13
- 0x8C180D0E, // 00BB GETMET R6 R6 K14
- 0x88200114, // 00BC GETMBR R8 R0 K20
- 0x8820111C, // 00BD GETMBR R8 R8 K28
- 0x8C201110, // 00BE GETMET R8 R8 K16
- 0x7C200200, // 00BF CALL R8 1
- 0x00227408, // 00C0 ADD R8 K58 R8
- 0x58240011, // 00C1 LDCONST R9 K17
- 0x7C180600, // 00C2 CALL R6 3
- 0xB81A1A00, // 00C3 GETNGBL R6 K13
- 0x8C180D0E, // 00C4 GETMET R6 R6 K14
- 0x88200114, // 00C5 GETMBR R8 R0 K20
- 0x88201121, // 00C6 GETMBR R8 R8 K33
- 0x8C201110, // 00C7 GETMET R8 R8 K16
- 0x7C200200, // 00C8 CALL R8 1
- 0x00227608, // 00C9 ADD R8 K59 R8
- 0x58240011, // 00CA LDCONST R9 K17
- 0x7C180600, // 00CB CALL R6 3
- 0xB81A1A00, // 00CC GETNGBL R6 K13
- 0x8C180D0E, // 00CD GETMET R6 R6 K14
- 0x88200114, // 00CE GETMBR R8 R0 K20
- 0x88201123, // 00CF GETMBR R8 R8 K35
- 0x8C201110, // 00D0 GETMET R8 R8 K16
- 0x7C200200, // 00D1 CALL R8 1
- 0x00227808, // 00D2 ADD R8 K60 R8
- 0x58240011, // 00D3 LDCONST R9 K17
- 0x7C180600, // 00D4 CALL R6 3
- 0xB81A1A00, // 00D5 GETNGBL R6 K13
- 0x8C180D0E, // 00D6 GETMET R6 R6 K14
- 0x88200114, // 00D7 GETMBR R8 R0 K20
- 0x88201117, // 00D8 GETMBR R8 R8 K23
- 0x8C201110, // 00D9 GETMET R8 R8 K16
- 0x7C200200, // 00DA CALL R8 1
- 0x00227A08, // 00DB ADD R8 K61 R8
- 0x58240011, // 00DC LDCONST R9 K17
- 0x7C180600, // 00DD CALL R6 3
- 0xB81A1A00, // 00DE GETNGBL R6 K13
- 0x8C180D0E, // 00DF GETMET R6 R6 K14
- 0x5820002E, // 00E0 LDCONST R8 K46
- 0x58240011, // 00E1 LDCONST R9 K17
- 0x7C180600, // 00E2 CALL R6 3
- 0xB81A1A00, // 00E3 GETNGBL R6 K13
- 0x8C180D0E, // 00E4 GETMET R6 R6 K14
- 0x88200114, // 00E5 GETMBR R8 R0 K20
- 0x8820113F, // 00E6 GETMBR R8 R8 K63
- 0x8C201110, // 00E7 GETMET R8 R8 K16
- 0x7C200200, // 00E8 CALL R8 1
- 0x00227C08, // 00E9 ADD R8 K62 R8
- 0x58240011, // 00EA LDCONST R9 K17
- 0x7C180600, // 00EB CALL R6 3
- 0xB81A1A00, // 00EC GETNGBL R6 K13
- 0x8C180D0E, // 00ED GETMET R6 R6 K14
- 0x88200114, // 00EE GETMBR R8 R0 K20
- 0x88201141, // 00EF GETMBR R8 R8 K65
- 0x8C201110, // 00F0 GETMET R8 R8 K16
- 0x7C200200, // 00F1 CALL R8 1
- 0x00228008, // 00F2 ADD R8 K64 R8
- 0x58240011, // 00F3 LDCONST R9 K17
- 0x7C180600, // 00F4 CALL R6 3
- 0xB81A1A00, // 00F5 GETNGBL R6 K13
- 0x8C180D0E, // 00F6 GETMET R6 R6 K14
- 0x88200114, // 00F7 GETMBR R8 R0 K20
- 0x88201143, // 00F8 GETMBR R8 R8 K67
- 0x8C201110, // 00F9 GETMET R8 R8 K16
- 0x7C200200, // 00FA CALL R8 1
- 0x00228408, // 00FB ADD R8 K66 R8
- 0x58240011, // 00FC LDCONST R9 K17
- 0x7C180600, // 00FD CALL R6 3
- 0xB81A1A00, // 00FE GETNGBL R6 K13
- 0x8C180D0E, // 00FF GETMET R6 R6 K14
- 0x88200114, // 0100 GETMBR R8 R0 K20
- 0x88201145, // 0101 GETMBR R8 R8 K69
- 0x8C201110, // 0102 GETMET R8 R8 K16
- 0x7C200200, // 0103 CALL R8 1
- 0x00228808, // 0104 ADD R8 K68 R8
- 0x58240011, // 0105 LDCONST R9 K17
- 0x7C180600, // 0106 CALL R6 3
- 0xB81A1A00, // 0107 GETNGBL R6 K13
- 0x8C180D0E, // 0108 GETMET R6 R6 K14
- 0x88200114, // 0109 GETMBR R8 R0 K20
- 0x88201147, // 010A GETMBR R8 R8 K71
- 0x8C201110, // 010B GETMET R8 R8 K16
- 0x7C200200, // 010C CALL R8 1
- 0x00228C08, // 010D ADD R8 K70 R8
- 0x58240011, // 010E LDCONST R9 K17
- 0x7C180600, // 010F CALL R6 3
- 0x88180114, // 0110 GETMBR R6 R0 K20
- 0x88180D48, // 0111 GETMBR R6 R6 K72
- 0x90029006, // 0112 SETMBR R0 K72 R6
- 0x88180114, // 0113 GETMBR R6 R0 K20
- 0x88180D47, // 0114 GETMBR R6 R6 K71
- 0x90028E06, // 0115 SETMBR R0 K71 R6
- 0xB81A1A00, // 0116 GETNGBL R6 K13
- 0x8C180D0E, // 0117 GETMET R6 R6 K14
- 0x88200148, // 0118 GETMBR R8 R0 K72
- 0x8C201110, // 0119 GETMET R8 R8 K16
- 0x7C200200, // 011A CALL R8 1
- 0x00229208, // 011B ADD R8 K73 R8
- 0x58240011, // 011C LDCONST R9 K17
- 0x7C180600, // 011D CALL R6 3
- 0xB81A0E00, // 011E GETNGBL R6 K7
- 0x8C180D4A, // 011F GETMET R6 R6 K74
- 0x7C180200, // 0120 CALL R6 1
- 0x881C011C, // 0121 GETMBR R7 R0 K28
- 0x901A3807, // 0122 SETMBR R6 K28 R7
- 0x881C0148, // 0123 GETMBR R7 R0 K72
- 0x901A9007, // 0124 SETMBR R6 K72 R7
- 0xB81E1A00, // 0125 GETNGBL R7 K13
- 0x8C1C0F0E, // 0126 GETMET R7 R7 K14
- 0xB8260E00, // 0127 GETNGBL R9 K7
- 0x8C241313, // 0128 GETMET R9 R9 K19
- 0x5C2C0C00, // 0129 MOVE R11 R6
- 0x7C240400, // 012A CALL R9 2
- 0x00269609, // 012B ADD R9 K75 R9
- 0x58280011, // 012C LDCONST R10 K17
- 0x7C1C0600, // 012D CALL R7 3
- 0x8C1C0D4C, // 012E GETMET R7 R6 K76
- 0x7C1C0200, // 012F CALL R7 1
- 0xB8221A00, // 0130 GETNGBL R8 K13
- 0x8C20110E, // 0131 GETMET R8 R8 K14
- 0x8C280F10, // 0132 GETMET R10 R7 K16
- 0x7C280200, // 0133 CALL R10 1
- 0x002A9A0A, // 0134 ADD R10 K77 R10
- 0x582C0011, // 0135 LDCONST R11 K17
- 0x7C200600, // 0136 CALL R8 3
- 0x8C20034E, // 0137 GETMET R8 R1 K78
- 0x542A0022, // 0138 LDINT R10 35
- 0x502C0200, // 0139 LDBOOL R11 1 0
- 0x7C200600, // 013A CALL R8 3
- 0x8C24114C, // 013B GETMET R9 R8 K76
- 0x5C2C0E00, // 013C MOVE R11 R7
- 0x7C240400, // 013D CALL R9 2
- 0x8828014F, // 013E GETMBR R10 R0 K79
- 0x8C281550, // 013F GETMET R10 R10 K80
- 0x5C301200, // 0140 MOVE R12 R9
- 0x88340351, // 0141 GETMBR R13 R1 K81
- 0x88380352, // 0142 GETMBR R14 R1 K82
- 0x883C1153, // 0143 GETMBR R15 R8 K83
- 0x7C280A00, // 0144 CALL R10 5
- 0x80000000, // 0145 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: find_session_by_destination_id
-********************************************************************/
-be_local_closure(Matter_Commisioning_Context_find_session_by_destination_id, /* name */
+be_local_closure(Matter_Commisioning_Context_find_fabric_by_destination_id, /* name */
be_nested_proto(
14, /* nstack */
3, /* argc */
@@ -660,7 +66,7 @@ be_local_closure(Matter_Commisioning_Context_find_session_by_destination_id, /
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[22]) { /* constants */
+ ( &(const bvalue[21]) { /* constants */
/* K0 */ be_nested_str_weak(crypto),
/* K1 */ be_nested_str_weak(tasmota),
/* K2 */ be_nested_str_weak(log),
@@ -669,24 +75,23 @@ be_local_closure(Matter_Commisioning_Context_find_session_by_destination_id, /
/* K5 */ be_const_int(3),
/* K6 */ be_nested_str_weak(device),
/* K7 */ be_nested_str_weak(sessions),
- /* K8 */ be_nested_str_weak(noc),
- /* K9 */ be_nested_str_weak(fabric),
- /* K10 */ be_nested_str_weak(deviceid),
- /* K11 */ be_nested_str_weak(get_ca_pub),
- /* K12 */ be_nested_str_weak(get_fabric),
- /* K13 */ be_nested_str_weak(get_deviceid),
- /* K14 */ be_nested_str_weak(get_ipk_group_key),
- /* K15 */ be_nested_str_weak(MTR_X3A_X20SIGMA1_X3A_X20destinationMessage_X3D),
- /* K16 */ be_nested_str_weak(MTR_X3A_X20SIGMA1_X3A_X20key_ipk_X3D),
- /* K17 */ be_nested_str_weak(HMAC_SHA256),
- /* K18 */ be_nested_str_weak(update),
- /* K19 */ be_nested_str_weak(out),
- /* K20 */ be_nested_str_weak(MTR_X3A_X20SIGMA1_X3A_X20candidateDestinationId_X3D),
- /* K21 */ be_nested_str_weak(stop_iteration),
+ /* K8 */ be_nested_str_weak(fabrics),
+ /* K9 */ be_nested_str_weak(noc),
+ /* K10 */ be_nested_str_weak(fabric_id),
+ /* K11 */ be_nested_str_weak(device_id),
+ /* K12 */ be_nested_str_weak(get_ca_pub),
+ /* K13 */ be_nested_str_weak(get_ipk_group_key),
+ /* K14 */ be_nested_str_weak(MTR_X3A_X20SIGMA1_X3A_X20destinationMessage_X3D),
+ /* K15 */ be_nested_str_weak(MTR_X3A_X20SIGMA1_X3A_X20key_ipk_X3D),
+ /* K16 */ be_nested_str_weak(HMAC_SHA256),
+ /* K17 */ be_nested_str_weak(update),
+ /* K18 */ be_nested_str_weak(out),
+ /* K19 */ be_nested_str_weak(MTR_X3A_X20SIGMA1_X3A_X20candidateDestinationId_X3D),
+ /* K20 */ be_nested_str_weak(stop_iteration),
}),
- be_str_weak(find_session_by_destination_id),
+ be_str_weak(find_fabric_by_destination_id),
&be_const_str_solidified,
- ( &(const binstruction[79]) { /* code */
+ ( &(const binstruction[77]) { /* code */
0xA40E0000, // 0000 IMPORT R3 K0
0xB8120200, // 0001 GETNGBL R4 K1
0x8C100902, // 0002 GETMET R4 R4 K2
@@ -698,74 +103,72 @@ be_local_closure(Matter_Commisioning_Context_find_session_by_destination_id, /
0x60100010, // 0008 GETGBL R4 G16
0x88140106, // 0009 GETMBR R5 R0 K6
0x88140B07, // 000A GETMBR R5 R5 K7
- 0x88140B07, // 000B GETMBR R5 R5 K7
+ 0x88140B08, // 000B GETMBR R5 R5 K8
0x7C100200, // 000C CALL R4 1
- 0xA802003B, // 000D EXBLK 0 #004A
+ 0xA8020039, // 000D EXBLK 0 #0048
0x5C140800, // 000E MOVE R5 R4
0x7C140000, // 000F CALL R5 0
- 0x88180B08, // 0010 GETMBR R6 R5 K8
+ 0x88180B09, // 0010 GETMBR R6 R5 K9
0x4C1C0000, // 0011 LDNIL R7
0x1C180C07, // 0012 EQ R6 R6 R7
0x741A0007, // 0013 JMPT R6 #001C
- 0x88180B09, // 0014 GETMBR R6 R5 K9
+ 0x88180B0A, // 0014 GETMBR R6 R5 K10
0x4C1C0000, // 0015 LDNIL R7
0x1C180C07, // 0016 EQ R6 R6 R7
0x741A0003, // 0017 JMPT R6 #001C
- 0x88180B0A, // 0018 GETMBR R6 R5 K10
+ 0x88180B0B, // 0018 GETMBR R6 R5 K11
0x4C1C0000, // 0019 LDNIL R7
0x1C180C07, // 001A EQ R6 R6 R7
0x781A0000, // 001B JMPF R6 #001D
0x7001FFF0, // 001C JMP #000E
- 0x8C180B0B, // 001D GETMET R6 R5 K11
+ 0x8C180B0C, // 001D GETMET R6 R5 K12
0x7C180200, // 001E CALL R6 1
0x00180406, // 001F ADD R6 R2 R6
- 0x8C1C0B0C, // 0020 GETMET R7 R5 K12
- 0x7C1C0200, // 0021 CALL R7 1
- 0x00180C07, // 0022 ADD R6 R6 R7
- 0x8C1C0B0D, // 0023 GETMET R7 R5 K13
- 0x7C1C0200, // 0024 CALL R7 1
- 0x00180C07, // 0025 ADD R6 R6 R7
- 0x8C1C0B0E, // 0026 GETMET R7 R5 K14
- 0x7C1C0200, // 0027 CALL R7 1
- 0xB8220200, // 0028 GETNGBL R8 K1
- 0x8C201102, // 0029 GETMET R8 R8 K2
- 0x8C280D04, // 002A GETMET R10 R6 K4
- 0x7C280200, // 002B CALL R10 1
- 0x002A1E0A, // 002C ADD R10 K15 R10
- 0x582C0005, // 002D LDCONST R11 K5
- 0x7C200600, // 002E CALL R8 3
- 0xB8220200, // 002F GETNGBL R8 K1
- 0x8C201102, // 0030 GETMET R8 R8 K2
- 0x8C280F04, // 0031 GETMET R10 R7 K4
- 0x7C280200, // 0032 CALL R10 1
- 0x002A200A, // 0033 ADD R10 K16 R10
- 0x582C0005, // 0034 LDCONST R11 K5
- 0x7C200600, // 0035 CALL R8 3
- 0x8C200711, // 0036 GETMET R8 R3 K17
- 0x5C280E00, // 0037 MOVE R10 R7
- 0x7C200400, // 0038 CALL R8 2
- 0x8C241112, // 0039 GETMET R9 R8 K18
- 0x5C2C0C00, // 003A MOVE R11 R6
- 0x7C240400, // 003B CALL R9 2
- 0x8C241113, // 003C GETMET R9 R8 K19
- 0x7C240200, // 003D CALL R9 1
- 0xB82A0200, // 003E GETNGBL R10 K1
- 0x8C281502, // 003F GETMET R10 R10 K2
- 0x8C301304, // 0040 GETMET R12 R9 K4
- 0x7C300200, // 0041 CALL R12 1
- 0x0032280C, // 0042 ADD R12 K20 R12
- 0x58340005, // 0043 LDCONST R13 K5
- 0x7C280600, // 0044 CALL R10 3
- 0x1C281201, // 0045 EQ R10 R9 R1
- 0x782A0001, // 0046 JMPF R10 #0049
- 0xA8040001, // 0047 EXBLK 1 1
- 0x80040A00, // 0048 RET 1 R5
- 0x7001FFC3, // 0049 JMP #000E
- 0x58100015, // 004A LDCONST R4 K21
- 0xAC100200, // 004B CATCH R4 1 0
- 0xB0080000, // 004C RAISE 2 R0 R0
- 0x4C100000, // 004D LDNIL R4
- 0x80040800, // 004E RET 1 R4
+ 0x881C0B0A, // 0020 GETMBR R7 R5 K10
+ 0x00180C07, // 0021 ADD R6 R6 R7
+ 0x881C0B0B, // 0022 GETMBR R7 R5 K11
+ 0x00180C07, // 0023 ADD R6 R6 R7
+ 0x8C1C0B0D, // 0024 GETMET R7 R5 K13
+ 0x7C1C0200, // 0025 CALL R7 1
+ 0xB8220200, // 0026 GETNGBL R8 K1
+ 0x8C201102, // 0027 GETMET R8 R8 K2
+ 0x8C280D04, // 0028 GETMET R10 R6 K4
+ 0x7C280200, // 0029 CALL R10 1
+ 0x002A1C0A, // 002A ADD R10 K14 R10
+ 0x582C0005, // 002B LDCONST R11 K5
+ 0x7C200600, // 002C CALL R8 3
+ 0xB8220200, // 002D GETNGBL R8 K1
+ 0x8C201102, // 002E GETMET R8 R8 K2
+ 0x8C280F04, // 002F GETMET R10 R7 K4
+ 0x7C280200, // 0030 CALL R10 1
+ 0x002A1E0A, // 0031 ADD R10 K15 R10
+ 0x542E0003, // 0032 LDINT R11 4
+ 0x7C200600, // 0033 CALL R8 3
+ 0x8C200710, // 0034 GETMET R8 R3 K16
+ 0x5C280E00, // 0035 MOVE R10 R7
+ 0x7C200400, // 0036 CALL R8 2
+ 0x8C241111, // 0037 GETMET R9 R8 K17
+ 0x5C2C0C00, // 0038 MOVE R11 R6
+ 0x7C240400, // 0039 CALL R9 2
+ 0x8C241112, // 003A GETMET R9 R8 K18
+ 0x7C240200, // 003B CALL R9 1
+ 0xB82A0200, // 003C GETNGBL R10 K1
+ 0x8C281502, // 003D GETMET R10 R10 K2
+ 0x8C301304, // 003E GETMET R12 R9 K4
+ 0x7C300200, // 003F CALL R12 1
+ 0x0032260C, // 0040 ADD R12 K19 R12
+ 0x58340005, // 0041 LDCONST R13 K5
+ 0x7C280600, // 0042 CALL R10 3
+ 0x1C281201, // 0043 EQ R10 R9 R1
+ 0x782A0001, // 0044 JMPF R10 #0047
+ 0xA8040001, // 0045 EXBLK 1 1
+ 0x80040A00, // 0046 RET 1 R5
+ 0x7001FFC5, // 0047 JMP #000E
+ 0x58100014, // 0048 LDCONST R4 K20
+ 0xAC100200, // 0049 CATCH R4 1 0
+ 0xB0080000, // 004A RAISE 2 R0 R0
+ 0x4C100000, // 004B LDNIL R4
+ 0x80040800, // 004C RET 1 R4
})
)
);
@@ -797,562 +200,55 @@ be_local_closure(Matter_Commisioning_Context_every_second, /* name */
/********************************************************************
-** Solidified function: parse_Sigma3
+** Solidified function: add_session
********************************************************************/
-be_local_closure(Matter_Commisioning_Context_parse_Sigma3, /* name */
+be_local_closure(Matter_Commisioning_Context_add_session, /* name */
be_nested_proto(
- 38, /* nstack */
- 2, /* argc */
+ 14, /* nstack */
+ 6, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[94]) { /* constants */
- /* K0 */ be_nested_str_weak(crypto),
- /* K1 */ be_nested_str_weak(opcode),
- /* K2 */ be_nested_str_weak(local_session_id),
- /* K3 */ be_const_int(0),
- /* K4 */ be_nested_str_weak(protocol_id),
- /* K5 */ be_nested_str_weak(protocol_error),
- /* K6 */ be_nested_str_weak(invalid_X20Pake1_X20message),
- /* K7 */ be_nested_str_weak(session),
- /* K8 */ be_nested_str_weak(matter),
- /* K9 */ be_nested_str_weak(Sigma3),
- /* K10 */ be_nested_str_weak(parse),
- /* K11 */ be_nested_str_weak(raw),
- /* K12 */ be_nested_str_weak(app_payload_idx),
- /* K13 */ be_nested_str_weak(tasmota),
- /* K14 */ be_nested_str_weak(log),
- /* K15 */ be_nested_str_weak(_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
- /* K16 */ be_const_int(3),
- /* K17 */ be_nested_str_weak(SHA256),
- /* K18 */ be_nested_str_weak(update),
- /* K19 */ be_nested_str_weak(_Msg1),
- /* K20 */ be_nested_str_weak(_Msg2),
- /* K21 */ be_nested_str_weak(out),
- /* K22 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20session_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K23 */ be_nested_str_weak(MTR_X3A_X20session_X2Eipk_epoch_key_X20),
- /* K24 */ be_nested_str_weak(ipk_epoch_key),
- /* K25 */ be_nested_str_weak(MTR_X3A_X20session_X2Efabric_compressed_X20),
- /* K26 */ be_nested_str_weak(fabric_compressed),
- /* K27 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20ipk_group_key_X20_X3D_X20),
- /* K28 */ be_nested_str_weak(get_ipk_group_key),
- /* K29 */ be_nested_str_weak(tohex),
- /* K30 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TranscriptHash_X3D_X20),
- /* K31 */ be_nested_str_weak(fromstring),
- /* K32 */ be_nested_str_weak(S3K_Info),
- /* K33 */ be_nested_str_weak(HKDF_SHA256),
- /* K34 */ be_nested_str_weak(derive),
- /* K35 */ be_nested_str_weak(shared_secret),
- /* K36 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s3k_salt_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K37 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s3k_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K38 */ be_nested_str_weak(TBEData3Encrypted),
- /* K39 */ be_const_int(2147483647),
- /* K40 */ be_nested_str_weak(AES_CCM),
- /* K41 */ be_nested_str_weak(TBEData3_Nonce),
- /* K42 */ be_nested_str_weak(decrypt),
- /* K43 */ be_nested_str_weak(tag),
- /* K44 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TBEData3_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K45 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TBETag3_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K46 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20tag_sent_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K47 */ be_nested_str_weak(value_error),
- /* K48 */ be_nested_str_weak(tag_X20do_X20not_X20match),
- /* K49 */ be_nested_str_weak(TLV),
- /* K50 */ be_nested_str_weak(findsubval),
- /* K51 */ be_const_int(1),
- /* K52 */ be_const_int(2),
- /* K53 */ be_nested_str_weak(MTR_X3A_X20initiatorNOCTLV_X20_X3D_X20),
- /* K54 */ be_nested_str_weak(findsub),
- /* K55 */ be_nested_str_weak(int),
- /* K56 */ be_nested_str_weak(int64),
- /* K57 */ be_nested_str_weak(peer_node_id),
- /* K58 */ be_nested_str_weak(tobytes),
- /* K59 */ be_nested_str_weak(MTR_X3A_X20initiatorFabricId_X3D),
- /* K60 */ be_nested_str_weak(Matter_TLV_struct),
- /* K61 */ be_nested_str_weak(add_TLV),
- /* K62 */ be_nested_str_weak(B1),
- /* K63 */ be_nested_str_weak(initiatorEph_pub),
- /* K64 */ be_nested_str_weak(ResponderEph_pub),
- /* K65 */ be_nested_str_weak(encode),
- /* K66 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20initiatorNOCPubKey_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K67 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20ec_signature_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K68 */ be_nested_str_weak(EC_P256),
- /* K69 */ be_nested_str_weak(ecdsa_verify_sha256),
- /* K70 */ be_nested_str_weak(sigma3_tbs_X20does_X20not_X20have_X20a_X20valid_X20signature),
- /* K71 */ be_nested_str_weak(MTR_X3A_X20Sigma3_X20verified_X2C_X20computing_X20new_X20keys),
- /* K72 */ be_nested_str_weak(Msg3),
- /* K73 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
- /* K74 */ be_nested_str_weak(MTR_X3A_X20shared_secret_X20_X3D),
- /* K75 */ be_nested_str_weak(MTR_X3A_X20ipk_X20_X2B_X20hash_X20_X20_X20_X20_X3D),
- /* K76 */ be_nested_str_weak(SEKeys_Info),
- /* K77 */ be_nested_str_weak(rtc),
- /* K78 */ be_nested_str_weak(utc),
- /* K79 */ be_nested_str_weak(MTR_X3A_X20I2RKey_X20_X20_X20_X20_X20_X20_X3D),
- /* K80 */ be_nested_str_weak(MTR_X3A_X20R2IKey_X20_X20_X20_X20_X20_X20_X3D),
- /* K81 */ be_nested_str_weak(MTR_X3A_X20AC_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K82 */ be_nested_str_weak(build_response),
- /* K83 */ be_nested_str_weak(add),
- /* K84 */ be_nested_str_weak(responder),
- /* K85 */ be_nested_str_weak(send_response),
- /* K86 */ be_nested_str_weak(remote_ip),
- /* K87 */ be_nested_str_weak(remote_port),
- /* K88 */ be_nested_str_weak(message_counter),
- /* K89 */ be_nested_str_weak(close),
- /* K90 */ be_nested_str_weak(set_keys),
- /* K91 */ be_nested_str_weak(set_persist),
- /* K92 */ be_nested_str_weak(set_no_expiration),
- /* K93 */ be_nested_str_weak(save),
+ ( &(const bvalue[10]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(format),
+ /* K4 */ be_nested_str_weak(MTR_X3A_X20add_session_X20local_session_id_X3D_X25i_X20initiator_session_id_X3D_X25i),
+ /* K5 */ be_const_int(3),
+ /* K6 */ be_nested_str_weak(device),
+ /* K7 */ be_nested_str_weak(sessions),
+ /* K8 */ be_nested_str_weak(create_session),
+ /* K9 */ be_nested_str_weak(set_keys),
}),
- be_str_weak(parse_Sigma3),
+ be_str_weak(add_session),
&be_const_str_solidified,
- ( &(const binstruction[445]) { /* code */
- 0xA40A0000, // 0000 IMPORT R2 K0
- 0x880C0301, // 0001 GETMBR R3 R1 K1
- 0x54120031, // 0002 LDINT R4 50
- 0x200C0604, // 0003 NE R3 R3 R4
- 0x740E0005, // 0004 JMPT R3 #000B
- 0x880C0302, // 0005 GETMBR R3 R1 K2
- 0x200C0703, // 0006 NE R3 R3 K3
- 0x740E0002, // 0007 JMPT R3 #000B
- 0x880C0304, // 0008 GETMBR R3 R1 K4
- 0x200C0703, // 0009 NE R3 R3 K3
- 0x780E0000, // 000A JMPF R3 #000C
- 0xB0060B06, // 000B RAISE 1 K5 K6
- 0x880C0307, // 000C GETMBR R3 R1 K7
- 0xB8121000, // 000D GETNGBL R4 K8
- 0x8C100909, // 000E GETMET R4 R4 K9
- 0x7C100200, // 000F CALL R4 1
- 0x8C10090A, // 0010 GETMET R4 R4 K10
- 0x8818030B, // 0011 GETMBR R6 R1 K11
- 0x881C030C, // 0012 GETMBR R7 R1 K12
- 0x7C100600, // 0013 CALL R4 3
- 0xB8161A00, // 0014 GETNGBL R5 K13
- 0x8C140B0E, // 0015 GETMET R5 R5 K14
- 0x581C000F, // 0016 LDCONST R7 K15
- 0x58200010, // 0017 LDCONST R8 K16
- 0x7C140600, // 0018 CALL R5 3
- 0x8C140511, // 0019 GETMET R5 R2 K17
- 0x7C140200, // 001A CALL R5 1
- 0x8C140B12, // 001B GETMET R5 R5 K18
- 0x881C0713, // 001C GETMBR R7 R3 K19
- 0x7C140400, // 001D CALL R5 2
- 0x8C140B12, // 001E GETMET R5 R5 K18
- 0x881C0714, // 001F GETMBR R7 R3 K20
- 0x7C140400, // 0020 CALL R5 2
- 0x8C140B15, // 0021 GETMET R5 R5 K21
- 0x7C140200, // 0022 CALL R5 1
- 0xB81A1A00, // 0023 GETNGBL R6 K13
- 0x8C180D0E, // 0024 GETMET R6 R6 K14
- 0x60200008, // 0025 GETGBL R8 G8
- 0x5C240600, // 0026 MOVE R9 R3
- 0x7C200200, // 0027 CALL R8 1
- 0x00222C08, // 0028 ADD R8 K22 R8
- 0x58240010, // 0029 LDCONST R9 K16
- 0x7C180600, // 002A CALL R6 3
- 0xB81A1A00, // 002B GETNGBL R6 K13
- 0x8C180D0E, // 002C GETMET R6 R6 K14
- 0x60200008, // 002D GETGBL R8 G8
- 0x88240718, // 002E GETMBR R9 R3 K24
- 0x7C200200, // 002F CALL R8 1
- 0x00222E08, // 0030 ADD R8 K23 R8
- 0x58240010, // 0031 LDCONST R9 K16
- 0x7C180600, // 0032 CALL R6 3
- 0xB81A1A00, // 0033 GETNGBL R6 K13
- 0x8C180D0E, // 0034 GETMET R6 R6 K14
- 0x60200008, // 0035 GETGBL R8 G8
- 0x8824071A, // 0036 GETMBR R9 R3 K26
- 0x7C200200, // 0037 CALL R8 1
- 0x00223208, // 0038 ADD R8 K25 R8
- 0x58240010, // 0039 LDCONST R9 K16
- 0x7C180600, // 003A CALL R6 3
- 0xB81A1A00, // 003B GETNGBL R6 K13
- 0x8C180D0E, // 003C GETMET R6 R6 K14
- 0x8C20071C, // 003D GETMET R8 R3 K28
- 0x7C200200, // 003E CALL R8 1
- 0x8C20111D, // 003F GETMET R8 R8 K29
- 0x7C200200, // 0040 CALL R8 1
- 0x00223608, // 0041 ADD R8 K27 R8
- 0x58240010, // 0042 LDCONST R9 K16
- 0x7C180600, // 0043 CALL R6 3
- 0xB81A1A00, // 0044 GETNGBL R6 K13
- 0x8C180D0E, // 0045 GETMET R6 R6 K14
- 0x8C200B1D, // 0046 GETMET R8 R5 K29
- 0x7C200200, // 0047 CALL R8 1
- 0x00223C08, // 0048 ADD R8 K30 R8
- 0x58240010, // 0049 LDCONST R9 K16
- 0x7C180600, // 004A CALL R6 3
- 0x60180015, // 004B GETGBL R6 G21
- 0x7C180000, // 004C CALL R6 0
- 0x8C180D1F, // 004D GETMET R6 R6 K31
- 0x88200120, // 004E GETMBR R8 R0 K32
- 0x7C180400, // 004F CALL R6 2
- 0x8C1C0521, // 0050 GETMET R7 R2 K33
- 0x7C1C0200, // 0051 CALL R7 1
- 0x8C1C0F22, // 0052 GETMET R7 R7 K34
- 0x88240723, // 0053 GETMBR R9 R3 K35
- 0x8C28071C, // 0054 GETMET R10 R3 K28
- 0x7C280200, // 0055 CALL R10 1
- 0x00281405, // 0056 ADD R10 R10 R5
- 0x5C2C0C00, // 0057 MOVE R11 R6
- 0x5432000F, // 0058 LDINT R12 16
- 0x7C1C0A00, // 0059 CALL R7 5
- 0xB8221A00, // 005A GETNGBL R8 K13
- 0x8C20110E, // 005B GETMET R8 R8 K14
- 0x5828000F, // 005C LDCONST R10 K15
- 0x582C0010, // 005D LDCONST R11 K16
- 0x7C200600, // 005E CALL R8 3
- 0xB8221A00, // 005F GETNGBL R8 K13
- 0x8C20110E, // 0060 GETMET R8 R8 K14
- 0x8C28071C, // 0061 GETMET R10 R3 K28
- 0x7C280200, // 0062 CALL R10 1
- 0x00281405, // 0063 ADD R10 R10 R5
- 0x8C28151D, // 0064 GETMET R10 R10 K29
- 0x7C280200, // 0065 CALL R10 1
- 0x002A480A, // 0066 ADD R10 K36 R10
- 0x582C0010, // 0067 LDCONST R11 K16
- 0x7C200600, // 0068 CALL R8 3
- 0xB8221A00, // 0069 GETNGBL R8 K13
- 0x8C20110E, // 006A GETMET R8 R8 K14
- 0x8C280F1D, // 006B GETMET R10 R7 K29
- 0x7C280200, // 006C CALL R10 1
- 0x002A4A0A, // 006D ADD R10 K37 R10
- 0x582C0010, // 006E LDCONST R11 K16
- 0x7C200600, // 006F CALL R8 3
- 0xB8221A00, // 0070 GETNGBL R8 K13
- 0x8C20110E, // 0071 GETMET R8 R8 K14
- 0x5828000F, // 0072 LDCONST R10 K15
- 0x582C0010, // 0073 LDCONST R11 K16
- 0x7C200600, // 0074 CALL R8 3
- 0x5421FFEE, // 0075 LDINT R8 -17
- 0x40220608, // 0076 CONNECT R8 K3 R8
- 0x88240926, // 0077 GETMBR R9 R4 K38
- 0x94201208, // 0078 GETIDX R8 R9 R8
- 0x5429FFEF, // 0079 LDINT R10 -16
- 0x40281527, // 007A CONNECT R10 R10 K39
- 0x882C0926, // 007B GETMBR R11 R4 K38
- 0x9424160A, // 007C GETIDX R9 R11 R10
- 0x8C300528, // 007D GETMET R12 R2 K40
- 0x5C380E00, // 007E MOVE R14 R7
- 0x603C0015, // 007F GETGBL R15 G21
- 0x7C3C0000, // 0080 CALL R15 0
- 0x8C3C1F1F, // 0081 GETMET R15 R15 K31
- 0x88440129, // 0082 GETMBR R17 R0 K41
- 0x7C3C0400, // 0083 CALL R15 2
- 0x60400015, // 0084 GETGBL R16 G21
- 0x7C400000, // 0085 CALL R16 0
- 0x6044000C, // 0086 GETGBL R17 G12
- 0x5C481000, // 0087 MOVE R18 R8
- 0x7C440200, // 0088 CALL R17 1
- 0x544A000F, // 0089 LDINT R18 16
- 0x7C300C00, // 008A CALL R12 6
- 0x5C281800, // 008B MOVE R10 R12
- 0x8C30152A, // 008C GETMET R12 R10 K42
- 0x5C381000, // 008D MOVE R14 R8
- 0x7C300400, // 008E CALL R12 2
- 0x5C2C1800, // 008F MOVE R11 R12
- 0x8C30152B, // 0090 GETMET R12 R10 K43
- 0x7C300200, // 0091 CALL R12 1
- 0xB8361A00, // 0092 GETNGBL R13 K13
- 0x8C341B0E, // 0093 GETMET R13 R13 K14
- 0x8C3C171D, // 0094 GETMET R15 R11 K29
- 0x7C3C0200, // 0095 CALL R15 1
- 0x003E580F, // 0096 ADD R15 K44 R15
- 0x58400010, // 0097 LDCONST R16 K16
- 0x7C340600, // 0098 CALL R13 3
- 0xB8361A00, // 0099 GETNGBL R13 K13
- 0x8C341B0E, // 009A GETMET R13 R13 K14
- 0x8C3C191D, // 009B GETMET R15 R12 K29
- 0x7C3C0200, // 009C CALL R15 1
- 0x003E5A0F, // 009D ADD R15 K45 R15
- 0x58400010, // 009E LDCONST R16 K16
- 0x7C340600, // 009F CALL R13 3
- 0xB8361A00, // 00A0 GETNGBL R13 K13
- 0x8C341B0E, // 00A1 GETMET R13 R13 K14
- 0x8C3C131D, // 00A2 GETMET R15 R9 K29
- 0x7C3C0200, // 00A3 CALL R15 1
- 0x003E5C0F, // 00A4 ADD R15 K46 R15
- 0x58400010, // 00A5 LDCONST R16 K16
- 0x7C340600, // 00A6 CALL R13 3
- 0xB8361A00, // 00A7 GETNGBL R13 K13
- 0x8C341B0E, // 00A8 GETMET R13 R13 K14
- 0x583C000F, // 00A9 LDCONST R15 K15
- 0x58400010, // 00AA LDCONST R16 K16
- 0x7C340600, // 00AB CALL R13 3
- 0x20341809, // 00AC NE R13 R12 R9
- 0x78360000, // 00AD JMPF R13 #00AF
- 0xB0065F30, // 00AE RAISE 1 K47 K48
- 0xB8361000, // 00AF GETNGBL R13 K8
- 0x88341B31, // 00B0 GETMBR R13 R13 K49
- 0x8C341B0A, // 00B1 GETMET R13 R13 K10
- 0x5C3C1600, // 00B2 MOVE R15 R11
- 0x7C340400, // 00B3 CALL R13 2
- 0x8C381B32, // 00B4 GETMET R14 R13 K50
- 0x58400033, // 00B5 LDCONST R16 K51
- 0x7C380400, // 00B6 CALL R14 2
- 0x8C3C1B32, // 00B7 GETMET R15 R13 K50
- 0x58440034, // 00B8 LDCONST R17 K52
- 0x7C3C0400, // 00B9 CALL R15 2
- 0x8C401B32, // 00BA GETMET R16 R13 K50
- 0x58480010, // 00BB LDCONST R18 K16
- 0x7C400400, // 00BC CALL R16 2
- 0xB8461000, // 00BD GETNGBL R17 K8
- 0x88442331, // 00BE GETMBR R17 R17 K49
- 0x8C44230A, // 00BF GETMET R17 R17 K10
- 0x5C4C1C00, // 00C0 MOVE R19 R14
- 0x7C440400, // 00C1 CALL R17 2
- 0xB84A1A00, // 00C2 GETNGBL R18 K13
- 0x8C48250E, // 00C3 GETMET R18 R18 K14
- 0x60500008, // 00C4 GETGBL R20 G8
- 0x5C542200, // 00C5 MOVE R21 R17
- 0x7C500200, // 00C6 CALL R20 1
- 0x00526A14, // 00C7 ADD R20 K53 R20
- 0x58540010, // 00C8 LDCONST R21 K16
- 0x7C480600, // 00C9 CALL R18 3
- 0x8C482332, // 00CA GETMET R18 R17 K50
- 0x54520008, // 00CB LDINT R20 9
- 0x7C480400, // 00CC CALL R18 2
- 0x8C4C2336, // 00CD GETMET R19 R17 K54
- 0x54560005, // 00CE LDINT R21 6
- 0x7C4C0400, // 00CF CALL R19 2
- 0x8C502732, // 00D0 GETMET R20 R19 K50
- 0x545A0010, // 00D1 LDINT R22 17
- 0x7C500400, // 00D2 CALL R20 2
- 0x60540004, // 00D3 GETGBL R21 G4
- 0x5C582800, // 00D4 MOVE R22 R20
- 0x7C540200, // 00D5 CALL R21 1
- 0x1C542B37, // 00D6 EQ R21 R21 K55
- 0x78560003, // 00D7 JMPF R21 #00DC
- 0xB8567000, // 00D8 GETNGBL R21 K56
- 0x5C582800, // 00D9 MOVE R22 R20
- 0x7C540200, // 00DA CALL R21 1
- 0x5C502A00, // 00DB MOVE R20 R21
- 0x8C54293A, // 00DC GETMET R21 R20 K58
- 0x7C540200, // 00DD CALL R21 1
- 0x900E7215, // 00DE SETMBR R3 K57 R21
- 0xB8561A00, // 00DF GETNGBL R21 K13
- 0x8C542B0E, // 00E0 GETMET R21 R21 K14
- 0x605C0008, // 00E1 GETGBL R23 G8
- 0x88600739, // 00E2 GETMBR R24 R3 K57
- 0x7C5C0200, // 00E3 CALL R23 1
- 0x005E7617, // 00E4 ADD R23 K59 R23
- 0x58600010, // 00E5 LDCONST R24 K16
- 0x7C540600, // 00E6 CALL R21 3
- 0xB8561000, // 00E7 GETNGBL R21 K8
- 0x88542B31, // 00E8 GETMBR R21 R21 K49
- 0x8C542B3C, // 00E9 GETMET R21 R21 K60
- 0x7C540200, // 00EA CALL R21 1
- 0x8C582B3D, // 00EB GETMET R22 R21 K61
- 0x58600033, // 00EC LDCONST R24 K51
- 0xB8661000, // 00ED GETNGBL R25 K8
- 0x88643331, // 00EE GETMBR R25 R25 K49
- 0x8864333E, // 00EF GETMBR R25 R25 K62
- 0x5C681C00, // 00F0 MOVE R26 R14
- 0x7C580800, // 00F1 CALL R22 4
- 0x8C582B3D, // 00F2 GETMET R22 R21 K61
- 0x58600034, // 00F3 LDCONST R24 K52
- 0xB8661000, // 00F4 GETNGBL R25 K8
- 0x88643331, // 00F5 GETMBR R25 R25 K49
- 0x8864333E, // 00F6 GETMBR R25 R25 K62
- 0x5C681E00, // 00F7 MOVE R26 R15
- 0x7C580800, // 00F8 CALL R22 4
- 0x8C582B3D, // 00F9 GETMET R22 R21 K61
- 0x58600010, // 00FA LDCONST R24 K16
- 0xB8661000, // 00FB GETNGBL R25 K8
- 0x88643331, // 00FC GETMBR R25 R25 K49
- 0x8864333E, // 00FD GETMBR R25 R25 K62
- 0x8868013F, // 00FE GETMBR R26 R0 K63
- 0x7C580800, // 00FF CALL R22 4
- 0x8C582B3D, // 0100 GETMET R22 R21 K61
- 0x54620003, // 0101 LDINT R24 4
- 0xB8661000, // 0102 GETNGBL R25 K8
- 0x88643331, // 0103 GETMBR R25 R25 K49
- 0x8864333E, // 0104 GETMBR R25 R25 K62
- 0x88680140, // 0105 GETMBR R26 R0 K64
- 0x7C580800, // 0106 CALL R22 4
- 0x8C582B41, // 0107 GETMET R22 R21 K65
- 0x7C580200, // 0108 CALL R22 1
- 0xB85E1A00, // 0109 GETNGBL R23 K13
- 0x8C5C2F0E, // 010A GETMET R23 R23 K14
- 0x8C64251D, // 010B GETMET R25 R18 K29
- 0x7C640200, // 010C CALL R25 1
- 0x00668419, // 010D ADD R25 K66 R25
- 0x58680010, // 010E LDCONST R26 K16
- 0x7C5C0600, // 010F CALL R23 3
- 0xB85E1A00, // 0110 GETNGBL R23 K13
- 0x8C5C2F0E, // 0111 GETMET R23 R23 K14
- 0x8C64211D, // 0112 GETMET R25 R16 K29
- 0x7C640200, // 0113 CALL R25 1
- 0x00668619, // 0114 ADD R25 K67 R25
- 0x58680010, // 0115 LDCONST R26 K16
- 0x7C5C0600, // 0116 CALL R23 3
- 0xB85E1A00, // 0117 GETNGBL R23 K13
- 0x8C5C2F0E, // 0118 GETMET R23 R23 K14
- 0x5864000F, // 0119 LDCONST R25 K15
- 0x58680010, // 011A LDCONST R26 K16
- 0x7C5C0600, // 011B CALL R23 3
- 0x8C5C0544, // 011C GETMET R23 R2 K68
- 0x7C5C0200, // 011D CALL R23 1
- 0x8C5C2F45, // 011E GETMET R23 R23 K69
- 0x5C642400, // 011F MOVE R25 R18
- 0x5C682C00, // 0120 MOVE R26 R22
- 0x5C6C2000, // 0121 MOVE R27 R16
- 0x7C5C0800, // 0122 CALL R23 4
- 0x5C602E00, // 0123 MOVE R24 R23
- 0x74620000, // 0124 JMPT R24 #0126
- 0xB0065F46, // 0125 RAISE 1 K47 K70
- 0xB8621A00, // 0126 GETNGBL R24 K13
- 0x8C60310E, // 0127 GETMET R24 R24 K14
- 0x58680047, // 0128 LDCONST R26 K71
- 0x586C0010, // 0129 LDCONST R27 K16
- 0x7C600600, // 012A CALL R24 3
- 0x8C600511, // 012B GETMET R24 R2 K17
- 0x7C600200, // 012C CALL R24 1
- 0x8C603112, // 012D GETMET R24 R24 K18
- 0x88680713, // 012E GETMBR R26 R3 K19
- 0x7C600400, // 012F CALL R24 2
- 0x8C603112, // 0130 GETMET R24 R24 K18
- 0x88680714, // 0131 GETMBR R26 R3 K20
- 0x7C600400, // 0132 CALL R24 2
- 0x8C603112, // 0133 GETMET R24 R24 K18
- 0x88680948, // 0134 GETMBR R26 R4 K72
- 0x7C600400, // 0135 CALL R24 2
- 0x8C603115, // 0136 GETMET R24 R24 K21
- 0x7C600200, // 0137 CALL R24 1
- 0x5C143000, // 0138 MOVE R5 R24
- 0x4C600000, // 0139 LDNIL R24
- 0x900E2618, // 013A SETMBR R3 K19 R24
- 0x4C600000, // 013B LDNIL R24
- 0x900E2818, // 013C SETMBR R3 K20 R24
- 0xB8621A00, // 013D GETNGBL R24 K13
- 0x8C60310E, // 013E GETMET R24 R24 K14
- 0x58680049, // 013F LDCONST R26 K73
- 0x586C0010, // 0140 LDCONST R27 K16
- 0x7C600600, // 0141 CALL R24 3
- 0xB8621A00, // 0142 GETNGBL R24 K13
- 0x8C60310E, // 0143 GETMET R24 R24 K14
- 0x88680723, // 0144 GETMBR R26 R3 K35
- 0x8C68351D, // 0145 GETMET R26 R26 K29
- 0x7C680200, // 0146 CALL R26 1
- 0x006A941A, // 0147 ADD R26 K74 R26
- 0x586C0010, // 0148 LDCONST R27 K16
- 0x7C600600, // 0149 CALL R24 3
- 0xB8621A00, // 014A GETNGBL R24 K13
- 0x8C60310E, // 014B GETMET R24 R24 K14
- 0x8C68071C, // 014C GETMET R26 R3 K28
- 0x7C680200, // 014D CALL R26 1
- 0x00683405, // 014E ADD R26 R26 R5
- 0x8C68351D, // 014F GETMET R26 R26 K29
- 0x7C680200, // 0150 CALL R26 1
- 0x006A961A, // 0151 ADD R26 K75 R26
- 0x586C0010, // 0152 LDCONST R27 K16
- 0x7C600600, // 0153 CALL R24 3
- 0x8C600521, // 0154 GETMET R24 R2 K33
- 0x7C600200, // 0155 CALL R24 1
- 0x8C603122, // 0156 GETMET R24 R24 K34
- 0x88680723, // 0157 GETMBR R26 R3 K35
- 0x8C6C071C, // 0158 GETMET R27 R3 K28
- 0x7C6C0200, // 0159 CALL R27 1
- 0x006C3605, // 015A ADD R27 R27 R5
- 0x60700015, // 015B GETGBL R28 G21
- 0x7C700000, // 015C CALL R28 0
- 0x8C70391F, // 015D GETMET R28 R28 K31
- 0x8878014C, // 015E GETMBR R30 R0 K76
- 0x7C700400, // 015F CALL R28 2
- 0x5476002F, // 0160 LDINT R29 48
- 0x7C600A00, // 0161 CALL R24 5
- 0x5466000E, // 0162 LDINT R25 15
- 0x40660619, // 0163 CONNECT R25 K3 R25
- 0x94643019, // 0164 GETIDX R25 R24 R25
- 0x546A000F, // 0165 LDINT R26 16
- 0x546E001E, // 0166 LDINT R27 31
- 0x4068341B, // 0167 CONNECT R26 R26 R27
- 0x9468301A, // 0168 GETIDX R26 R24 R26
- 0x546E001F, // 0169 LDINT R27 32
- 0x5472002E, // 016A LDINT R28 47
- 0x406C361C, // 016B CONNECT R27 R27 R28
- 0x946C301B, // 016C GETIDX R27 R24 R27
- 0xB8721A00, // 016D GETNGBL R28 K13
- 0x8C70394D, // 016E GETMET R28 R28 K77
- 0x7C700200, // 016F CALL R28 1
- 0x9470394E, // 0170 GETIDX R28 R28 K78
- 0xB8761A00, // 0171 GETNGBL R29 K13
- 0x8C743B0E, // 0172 GETMET R29 R29 K14
- 0x587C0049, // 0173 LDCONST R31 K73
- 0x58800010, // 0174 LDCONST R32 K16
- 0x7C740600, // 0175 CALL R29 3
- 0xB8761A00, // 0176 GETNGBL R29 K13
- 0x8C743B0E, // 0177 GETMET R29 R29 K14
- 0x8C7C331D, // 0178 GETMET R31 R25 K29
- 0x7C7C0200, // 0179 CALL R31 1
- 0x007E9E1F, // 017A ADD R31 K79 R31
- 0x58800010, // 017B LDCONST R32 K16
- 0x7C740600, // 017C CALL R29 3
- 0xB8761A00, // 017D GETNGBL R29 K13
- 0x8C743B0E, // 017E GETMET R29 R29 K14
- 0x8C7C351D, // 017F GETMET R31 R26 K29
- 0x7C7C0200, // 0180 CALL R31 1
- 0x007EA01F, // 0181 ADD R31 K80 R31
- 0x58800010, // 0182 LDCONST R32 K16
- 0x7C740600, // 0183 CALL R29 3
- 0xB8761A00, // 0184 GETNGBL R29 K13
- 0x8C743B0E, // 0185 GETMET R29 R29 K14
- 0x8C7C371D, // 0186 GETMET R31 R27 K29
- 0x7C7C0200, // 0187 CALL R31 1
- 0x007EA21F, // 0188 ADD R31 K81 R31
- 0x58800010, // 0189 LDCONST R32 K16
- 0x7C740600, // 018A CALL R29 3
- 0xB8761A00, // 018B GETNGBL R29 K13
- 0x8C743B0E, // 018C GETMET R29 R29 K14
- 0x587C0049, // 018D LDCONST R31 K73
- 0x58800010, // 018E LDCONST R32 K16
- 0x7C740600, // 018F CALL R29 3
- 0x8C740352, // 0190 GETMET R29 R1 K82
- 0x547E003F, // 0191 LDINT R31 64
- 0x50800200, // 0192 LDBOOL R32 1 0
- 0x7C740600, // 0193 CALL R29 3
- 0x60780015, // 0194 GETGBL R30 G21
- 0x7C780000, // 0195 CALL R30 0
- 0x8C7C3D53, // 0196 GETMET R31 R30 K83
- 0x58840003, // 0197 LDCONST R33 K3
- 0x58880034, // 0198 LDCONST R34 K52
- 0x7C7C0600, // 0199 CALL R31 3
- 0x8C7C3D53, // 019A GETMET R31 R30 K83
- 0x58840003, // 019B LDCONST R33 K3
- 0x548A0003, // 019C LDINT R34 4
- 0x7C7C0600, // 019D CALL R31 3
- 0x8C7C3D53, // 019E GETMET R31 R30 K83
- 0x58840003, // 019F LDCONST R33 K3
- 0x548A0003, // 01A0 LDINT R34 4
- 0x7C7C0600, // 01A1 CALL R31 3
- 0x8C7C3B41, // 01A2 GETMET R31 R29 K65
- 0x5C843C00, // 01A3 MOVE R33 R30
- 0x7C7C0400, // 01A4 CALL R31 2
- 0x88800154, // 01A5 GETMBR R32 R0 K84
- 0x8C804155, // 01A6 GETMET R32 R32 K85
- 0x5C883E00, // 01A7 MOVE R34 R31
- 0x888C0356, // 01A8 GETMBR R35 R1 K86
- 0x88900357, // 01A9 GETMBR R36 R1 K87
- 0x88943B58, // 01AA GETMBR R37 R29 K88
- 0x7C800A00, // 01AB CALL R32 5
- 0x8C800759, // 01AC GETMET R32 R3 K89
- 0x7C800200, // 01AD CALL R32 1
- 0x8C80075A, // 01AE GETMET R32 R3 K90
- 0x5C883200, // 01AF MOVE R34 R25
- 0x5C8C3400, // 01B0 MOVE R35 R26
- 0x5C903600, // 01B1 MOVE R36 R27
- 0x5C943800, // 01B2 MOVE R37 R28
- 0x7C800A00, // 01B3 CALL R32 5
- 0x8C80075B, // 01B4 GETMET R32 R3 K91
- 0x50880200, // 01B5 LDBOOL R34 1 0
- 0x7C800400, // 01B6 CALL R32 2
- 0x8C80075C, // 01B7 GETMET R32 R3 K92
- 0x7C800200, // 01B8 CALL R32 1
- 0x8C80075D, // 01B9 GETMET R32 R3 K93
- 0x7C800200, // 01BA CALL R32 1
- 0x50800200, // 01BB LDBOOL R32 1 0
- 0x80044000, // 01BC RET 1 R32
+ ( &(const binstruction[22]) { /* code */
+ 0xA41A0000, // 0000 IMPORT R6 K0
+ 0xB81E0200, // 0001 GETNGBL R7 K1
+ 0x8C1C0F02, // 0002 GETMET R7 R7 K2
+ 0x8C240D03, // 0003 GETMET R9 R6 K3
+ 0x582C0004, // 0004 LDCONST R11 K4
+ 0x5C300200, // 0005 MOVE R12 R1
+ 0x5C340400, // 0006 MOVE R13 R2
+ 0x7C240800, // 0007 CALL R9 4
+ 0x58280005, // 0008 LDCONST R10 K5
+ 0x7C1C0600, // 0009 CALL R7 3
+ 0x881C0106, // 000A GETMBR R7 R0 K6
+ 0x881C0F07, // 000B GETMBR R7 R7 K7
+ 0x8C1C0F08, // 000C GETMET R7 R7 K8
+ 0x5C240200, // 000D MOVE R9 R1
+ 0x5C280400, // 000E MOVE R10 R2
+ 0x7C1C0600, // 000F CALL R7 3
+ 0x8C200F09, // 0010 GETMET R8 R7 K9
+ 0x5C280600, // 0011 MOVE R10 R3
+ 0x5C2C0800, // 0012 MOVE R11 R4
+ 0x5C300A00, // 0013 MOVE R12 R5
+ 0x7C200800, // 0014 CALL R8 4
+ 0x80000000, // 0015 RET 0
})
)
);
@@ -1360,11 +256,11 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma3, /* name */
/********************************************************************
-** Solidified function: parse_Sigma1
+** Solidified function: parse_PBKDFParamRequest
********************************************************************/
-be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
+be_local_closure(Matter_Commisioning_Context_parse_PBKDFParamRequest, /* name */
be_nested_proto(
- 35, /* nstack */
+ 14, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
@@ -1372,694 +268,465 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[119]) { /* constants */
+ ( &(const bvalue[53]) { /* constants */
/* K0 */ be_nested_str_weak(crypto),
- /* K1 */ be_nested_str_weak(opcode),
- /* K2 */ be_nested_str_weak(local_session_id),
- /* K3 */ be_const_int(0),
- /* K4 */ be_nested_str_weak(protocol_id),
- /* K5 */ be_nested_str_weak(protocol_error),
- /* K6 */ be_nested_str_weak(invalid_X20Pake1_X20message),
- /* K7 */ be_nested_str_weak(matter),
- /* K8 */ be_nested_str_weak(Sigma1),
- /* K9 */ be_nested_str_weak(parse),
- /* K10 */ be_nested_str_weak(raw),
- /* K11 */ be_nested_str_weak(app_payload_idx),
- /* K12 */ be_nested_str_weak(initiatorEph_pub),
- /* K13 */ be_nested_str_weak(initiatorEphPubKey),
- /* K14 */ be_nested_str_weak(resumptionID),
- /* K15 */ be_nested_str_weak(initiatorResumeMIC),
- /* K16 */ be_nested_str_weak(device),
- /* K17 */ be_nested_str_weak(sessions),
- /* K18 */ be_nested_str_weak(find_session_by_resumption_id),
- /* K19 */ be_nested_str_weak(find_session_by_destination_id),
- /* K20 */ be_nested_str_weak(destinationId),
- /* K21 */ be_nested_str_weak(initiatorRandom),
- /* K22 */ be_nested_str_weak(valuer_error),
- /* K23 */ be_nested_str_weak(StatusReport_X28GeneralCode_X3A_X20FAILURE_X2C_X20ProtocolId_X3A_X20SECURE_CHANNEL_X2C_X20ProtocolCode_X3A_X20NO_SHARED_TRUST_ROOTS_X29),
- /* K24 */ be_nested_str_weak(source_node_id),
- /* K25 */ be_nested_str_weak(set_mode),
- /* K26 */ be_nested_str_weak(Session),
- /* K27 */ be_nested_str_weak(__CASE),
- /* K28 */ be_nested_str_weak(session),
- /* K29 */ be_nested_str_weak(remove_session),
- /* K30 */ be_nested_str_weak(_future_initiator_session_id),
- /* K31 */ be_nested_str_weak(initiator_session_id),
- /* K32 */ be_nested_str_weak(_future_local_session_id),
- /* K33 */ be_nested_str_weak(gen_local_session_id),
- /* K34 */ be_nested_str_weak(future_local_session_id),
- /* K35 */ be_nested_str_weak(shared_secret),
- /* K36 */ be_nested_str_weak(fromstring),
- /* K37 */ be_nested_str_weak(Sigma1_Resume),
- /* K38 */ be_nested_str_weak(HKDF_SHA256),
- /* K39 */ be_nested_str_weak(derive),
- /* K40 */ be_nested_str_weak(NCASE_SigmaR1),
- /* K41 */ be_const_int(2147483647),
- /* K42 */ be_nested_str_weak(AES_CCM),
- /* K43 */ be_nested_str_weak(decrypt),
- /* K44 */ be_nested_str_weak(tag),
- /* K45 */ be_nested_str_weak(tasmota),
- /* K46 */ be_nested_str_weak(log),
- /* K47 */ be_nested_str_weak(_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
- /* K48 */ be_const_int(3),
- /* K49 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s1rk_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K50 */ be_nested_str_weak(tohex),
- /* K51 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20tag_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K52 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20Resume1MICPayload_X20_X3D_X20),
- /* K53 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20decrypted_tag_X20_X20_X20_X20_X20_X3D_X20),
- /* K54 */ be_nested_str_weak(resumption_id),
- /* K55 */ be_nested_str_weak(random),
- /* K56 */ be_nested_str_weak(Sigma2_Resume),
- /* K57 */ be_nested_str_weak(NCASE_SigmaR2),
- /* K58 */ be_nested_str_weak(Sigma2Resume),
- /* K59 */ be_nested_str_weak(responderSessionID),
- /* K60 */ be_nested_str_weak(sigma2ResumeMIC),
- /* K61 */ be_nested_str_weak(SessionResumptionKeys),
- /* K62 */ be_nested_str_weak(rtc),
- /* K63 */ be_nested_str_weak(utc),
- /* K64 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
- /* K65 */ be_nested_str_weak(MTR_X3A_X20I2RKey_X20_X20_X20_X20_X20_X20_X3D),
- /* K66 */ be_nested_str_weak(MTR_X3A_X20R2IKey_X20_X20_X20_X20_X20_X20_X3D),
- /* K67 */ be_nested_str_weak(MTR_X3A_X20AC_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K68 */ be_nested_str_weak(encode),
- /* K69 */ be_nested_str_weak(_Msg1),
- /* K70 */ be_nested_str_weak(MTR_X3A_X20sigma2resume_raw_X3A_X20),
- /* K71 */ be_nested_str_weak(build_response),
- /* K72 */ be_nested_str_weak(responder),
- /* K73 */ be_nested_str_weak(send_response),
- /* K74 */ be_nested_str_weak(remote_ip),
- /* K75 */ be_nested_str_weak(remote_port),
- /* K76 */ be_nested_str_weak(message_counter),
- /* K77 */ be_nested_str_weak(close),
- /* K78 */ be_nested_str_weak(set_keys),
- /* K79 */ be_nested_str_weak(set_persist),
- /* K80 */ be_nested_str_weak(set_no_expiration),
- /* K81 */ be_nested_str_weak(save),
- /* K82 */ be_nested_str_weak(ResponderEph_priv),
- /* K83 */ be_nested_str_weak(ResponderEph_pub),
- /* K84 */ be_nested_str_weak(EC_P256),
- /* K85 */ be_nested_str_weak(public_key),
- /* K86 */ be_nested_str_weak(shared_key),
- /* K87 */ be_nested_str_weak(TLV),
- /* K88 */ be_nested_str_weak(Matter_TLV_struct),
- /* K89 */ be_nested_str_weak(add_TLV),
- /* K90 */ be_const_int(1),
- /* K91 */ be_nested_str_weak(B2),
- /* K92 */ be_nested_str_weak(get_noc),
- /* K93 */ be_const_int(2),
- /* K94 */ be_nested_str_weak(get_icac),
- /* K95 */ be_nested_str_weak(ecdsa_sign_sha256),
- /* K96 */ be_nested_str_weak(get_pk),
- /* K97 */ be_nested_str_weak(Msg1),
- /* K98 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20MSG1_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K99 */ be_nested_str_weak(SHA256),
- /* K100 */ be_nested_str_weak(update),
- /* K101 */ be_nested_str_weak(out),
- /* K102 */ be_nested_str_weak(S2K_Info),
- /* K103 */ be_nested_str_weak(get_ipk_group_key),
- /* K104 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20SharedSecret_X20_X20_X3D_X20),
- /* K105 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s2k_salt_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K106 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s2k_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K107 */ be_nested_str_weak(TBEData2_Nonce),
- /* K108 */ be_nested_str_weak(encrypt),
- /* K109 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TBEData2Enc_X20_X20_X20_X3D_X20),
- /* K110 */ be_nested_str_weak(Sigma2),
- /* K111 */ be_nested_str_weak(responderRandom),
- /* K112 */ be_nested_str_weak(responderSessionId),
- /* K113 */ be_nested_str_weak(responderEphPubKey),
- /* K114 */ be_nested_str_weak(encrypted2),
- /* K115 */ be_nested_str_weak(MTR_X3A_X20sigma2_X3A_X20),
- /* K116 */ be_nested_str_weak(inspect),
- /* K117 */ be_nested_str_weak(_Msg2),
- /* K118 */ be_nested_str_weak(MTR_X3A_X20sigma2_raw_X3A_X20),
+ /* K1 */ be_nested_str_weak(string),
+ /* K2 */ be_nested_str_weak(session),
+ /* K3 */ be_nested_str_weak(opcode),
+ /* K4 */ be_nested_str_weak(local_session_id),
+ /* K5 */ be_const_int(0),
+ /* K6 */ be_nested_str_weak(protocol_id),
+ /* K7 */ be_nested_str_weak(tasmota),
+ /* K8 */ be_nested_str_weak(log),
+ /* K9 */ be_nested_str_weak(MTR_X3A_X20invalid_X20PBKDFParamRequest_X20message),
+ /* K10 */ be_const_int(2),
+ /* K11 */ be_nested_str_weak(MTR_X3A_X20StatusReport_X28General_X20Code_X3A_X20FAILURE_X2C_X20ProtocolId_X3A_X20SECURE_CHANNEL_X2C_X20ProtocolCode_X3A_X20INVALID_PARAMETER_X29),
+ /* K12 */ be_nested_str_weak(send_status_report),
+ /* K13 */ be_const_int(1),
+ /* K14 */ be_nested_str_weak(matter),
+ /* K15 */ be_nested_str_weak(PBKDFParamRequest),
+ /* K16 */ be_nested_str_weak(parse),
+ /* K17 */ be_nested_str_weak(raw),
+ /* K18 */ be_nested_str_weak(app_payload_idx),
+ /* K19 */ be_nested_str_weak(set_mode_PASE),
+ /* K20 */ be_nested_str_weak(__Msg1),
+ /* K21 */ be_const_int(2147483647),
+ /* K22 */ be_nested_str_weak(passcodeId),
+ /* K23 */ be_nested_str_weak(MTR_X3A_X20non_X2Dzero_X20passcode_X20id),
+ /* K24 */ be_nested_str_weak(__future_initiator_session_id),
+ /* K25 */ be_nested_str_weak(initiator_session_id),
+ /* K26 */ be_nested_str_weak(__future_local_session_id),
+ /* K27 */ be_nested_str_weak(device),
+ /* K28 */ be_nested_str_weak(sessions),
+ /* K29 */ be_nested_str_weak(gen_local_session_id),
+ /* K30 */ be_nested_str_weak(format),
+ /* K31 */ be_nested_str_weak(MTR_X3A_X20_X2BSession_X20_X20_X20_X28_X256i_X29_X20from_X20_X27_X5B_X25s_X5D_X3A_X25i_X27),
+ /* K32 */ be_nested_str_weak(remote_ip),
+ /* K33 */ be_nested_str_weak(remote_port),
+ /* K34 */ be_nested_str_weak(PBKDFParamResponse),
+ /* K35 */ be_nested_str_weak(initiatorRandom),
+ /* K36 */ be_nested_str_weak(responderRandom),
+ /* K37 */ be_nested_str_weak(random),
+ /* K38 */ be_nested_str_weak(responderSessionId),
+ /* K39 */ be_nested_str_weak(pbkdf_parameters_salt),
+ /* K40 */ be_nested_str_weak(commissioning_salt),
+ /* K41 */ be_nested_str_weak(pbkdf_parameters_iterations),
+ /* K42 */ be_nested_str_weak(commissioning_iterations),
+ /* K43 */ be_nested_str_weak(MTR_X3A_X20pbkdfparamresp_X3A_X20),
+ /* K44 */ be_nested_str_weak(inspect),
+ /* K45 */ be_nested_str_weak(tlv2raw),
+ /* K46 */ be_nested_str_weak(MTR_X3A_X20pbkdfparamresp_raw_X3A_X20),
+ /* K47 */ be_nested_str_weak(tohex),
+ /* K48 */ be_nested_str_weak(__Msg2),
+ /* K49 */ be_nested_str_weak(build_response),
+ /* K50 */ be_nested_str_weak(encode_frame),
+ /* K51 */ be_nested_str_weak(responder),
+ /* K52 */ be_nested_str_weak(send_response_frame),
}),
- be_str_weak(parse_Sigma1),
+ be_str_weak(parse_PBKDFParamRequest),
&be_const_str_solidified,
- ( &(const binstruction[564]) { /* code */
+ ( &(const binstruction[137]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0xA40E0200, // 0001 IMPORT R3 K1
+ 0x88100302, // 0002 GETMBR R4 R1 K2
+ 0x88140303, // 0003 GETMBR R5 R1 K3
+ 0x541A001F, // 0004 LDINT R6 32
+ 0x20140A06, // 0005 NE R5 R5 R6
+ 0x74160005, // 0006 JMPT R5 #000D
+ 0x88140304, // 0007 GETMBR R5 R1 K4
+ 0x20140B05, // 0008 NE R5 R5 K5
+ 0x74160002, // 0009 JMPT R5 #000D
+ 0x88140306, // 000A GETMBR R5 R1 K6
+ 0x20140B05, // 000B NE R5 R5 K5
+ 0x78160012, // 000C JMPF R5 #0020
+ 0xB8160E00, // 000D GETNGBL R5 K7
+ 0x8C140B08, // 000E GETMET R5 R5 K8
+ 0x581C0009, // 000F LDCONST R7 K9
+ 0x5820000A, // 0010 LDCONST R8 K10
+ 0x7C140600, // 0011 CALL R5 3
+ 0xB8160E00, // 0012 GETNGBL R5 K7
+ 0x8C140B08, // 0013 GETMET R5 R5 K8
+ 0x581C000B, // 0014 LDCONST R7 K11
+ 0x5820000A, // 0015 LDCONST R8 K10
+ 0x7C140600, // 0016 CALL R5 3
+ 0x8C14010C, // 0017 GETMET R5 R0 K12
+ 0x5C1C0200, // 0018 MOVE R7 R1
+ 0x5820000D, // 0019 LDCONST R8 K13
+ 0x58240005, // 001A LDCONST R9 K5
+ 0x5828000A, // 001B LDCONST R10 K10
+ 0x502C0000, // 001C LDBOOL R11 0 0
+ 0x7C140C00, // 001D CALL R5 6
+ 0x50180000, // 001E LDBOOL R6 0 0
+ 0x80040C00, // 001F RET 1 R6
+ 0xB8161C00, // 0020 GETNGBL R5 K14
+ 0x8C140B0F, // 0021 GETMET R5 R5 K15
+ 0x7C140200, // 0022 CALL R5 1
+ 0x8C140B10, // 0023 GETMET R5 R5 K16
+ 0x881C0311, // 0024 GETMBR R7 R1 K17
+ 0x88200312, // 0025 GETMBR R8 R1 K18
+ 0x7C140600, // 0026 CALL R5 3
+ 0x88180302, // 0027 GETMBR R6 R1 K2
+ 0x8C180D13, // 0028 GETMET R6 R6 K19
+ 0x7C180200, // 0029 CALL R6 1
+ 0x88180312, // 002A GETMBR R6 R1 K18
+ 0x40180D15, // 002B CONNECT R6 R6 K21
+ 0x881C0311, // 002C GETMBR R7 R1 K17
+ 0x94180E06, // 002D GETIDX R6 R7 R6
+ 0x90122806, // 002E SETMBR R4 K20 R6
+ 0x88180B16, // 002F GETMBR R6 R5 K22
+ 0x20180D05, // 0030 NE R6 R6 K5
+ 0x781A0012, // 0031 JMPF R6 #0045
+ 0xB81A0E00, // 0032 GETNGBL R6 K7
+ 0x8C180D08, // 0033 GETMET R6 R6 K8
+ 0x58200017, // 0034 LDCONST R8 K23
+ 0x5824000A, // 0035 LDCONST R9 K10
+ 0x7C180600, // 0036 CALL R6 3
+ 0xB81A0E00, // 0037 GETNGBL R6 K7
+ 0x8C180D08, // 0038 GETMET R6 R6 K8
+ 0x5820000B, // 0039 LDCONST R8 K11
+ 0x5824000A, // 003A LDCONST R9 K10
+ 0x7C180600, // 003B CALL R6 3
+ 0x8C18010C, // 003C GETMET R6 R0 K12
+ 0x5C200200, // 003D MOVE R8 R1
+ 0x5824000D, // 003E LDCONST R9 K13
+ 0x58280005, // 003F LDCONST R10 K5
+ 0x582C000A, // 0040 LDCONST R11 K10
+ 0x50300000, // 0041 LDBOOL R12 0 0
+ 0x7C180C00, // 0042 CALL R6 6
+ 0x501C0000, // 0043 LDBOOL R7 0 0
+ 0x80040E00, // 0044 RET 1 R7
+ 0x88180B19, // 0045 GETMBR R6 R5 K25
+ 0x90123006, // 0046 SETMBR R4 K24 R6
+ 0x8818011B, // 0047 GETMBR R6 R0 K27
+ 0x88180D1C, // 0048 GETMBR R6 R6 K28
+ 0x8C180D1D, // 0049 GETMET R6 R6 K29
+ 0x7C180200, // 004A CALL R6 1
+ 0x90123406, // 004B SETMBR R4 K26 R6
+ 0xB81A0E00, // 004C GETNGBL R6 K7
+ 0x8C180D08, // 004D GETMET R6 R6 K8
+ 0x8C20071E, // 004E GETMET R8 R3 K30
+ 0x5828001F, // 004F LDCONST R10 K31
+ 0x882C091A, // 0050 GETMBR R11 R4 K26
+ 0x88300320, // 0051 GETMBR R12 R1 K32
+ 0x88340321, // 0052 GETMBR R13 R1 K33
+ 0x7C200A00, // 0053 CALL R8 5
+ 0x5824000A, // 0054 LDCONST R9 K10
+ 0x7C180600, // 0055 CALL R6 3
+ 0xB81A1C00, // 0056 GETNGBL R6 K14
+ 0x8C180D22, // 0057 GETMET R6 R6 K34
+ 0x7C180200, // 0058 CALL R6 1
+ 0x881C0B23, // 0059 GETMBR R7 R5 K35
+ 0x901A4607, // 005A SETMBR R6 K35 R7
+ 0x8C1C0525, // 005B GETMET R7 R2 K37
+ 0x5426001F, // 005C LDINT R9 32
+ 0x7C1C0400, // 005D CALL R7 2
+ 0x901A4807, // 005E SETMBR R6 K36 R7
+ 0x881C091A, // 005F GETMBR R7 R4 K26
+ 0x901A4C07, // 0060 SETMBR R6 K38 R7
+ 0x881C011B, // 0061 GETMBR R7 R0 K27
+ 0x881C0F28, // 0062 GETMBR R7 R7 K40
+ 0x901A4E07, // 0063 SETMBR R6 K39 R7
+ 0x881C011B, // 0064 GETMBR R7 R0 K27
+ 0x881C0F2A, // 0065 GETMBR R7 R7 K42
+ 0x901A5207, // 0066 SETMBR R6 K41 R7
+ 0xB81E0E00, // 0067 GETNGBL R7 K7
+ 0x8C1C0F08, // 0068 GETMET R7 R7 K8
+ 0x60240008, // 0069 GETGBL R9 G8
+ 0xB82A1C00, // 006A GETNGBL R10 K14
+ 0x8C28152C, // 006B GETMET R10 R10 K44
+ 0x5C300C00, // 006C MOVE R12 R6
+ 0x7C280400, // 006D CALL R10 2
+ 0x7C240200, // 006E CALL R9 1
+ 0x00265609, // 006F ADD R9 K43 R9
+ 0x542A0003, // 0070 LDINT R10 4
+ 0x7C1C0600, // 0071 CALL R7 3
+ 0x8C1C0D2D, // 0072 GETMET R7 R6 K45
+ 0x7C1C0200, // 0073 CALL R7 1
+ 0xB8220E00, // 0074 GETNGBL R8 K7
+ 0x8C201108, // 0075 GETMET R8 R8 K8
+ 0x8C280F2F, // 0076 GETMET R10 R7 K47
+ 0x7C280200, // 0077 CALL R10 1
+ 0x002A5C0A, // 0078 ADD R10 K46 R10
+ 0x542E0003, // 0079 LDINT R11 4
+ 0x7C200600, // 007A CALL R8 3
+ 0x90126007, // 007B SETMBR R4 K48 R7
+ 0x8C200331, // 007C GETMET R8 R1 K49
+ 0x542A0020, // 007D LDINT R10 33
+ 0x502C0200, // 007E LDBOOL R11 1 0
+ 0x7C200600, // 007F CALL R8 3
+ 0x8C241132, // 0080 GETMET R9 R8 K50
+ 0x5C2C0E00, // 0081 MOVE R11 R7
+ 0x7C240400, // 0082 CALL R9 2
+ 0x88280133, // 0083 GETMBR R10 R0 K51
+ 0x8C281534, // 0084 GETMET R10 R10 K52
+ 0x5C301000, // 0085 MOVE R12 R8
+ 0x7C280400, // 0086 CALL R10 2
+ 0x50280200, // 0087 LDBOOL R10 1 0
+ 0x80041400, // 0088 RET 1 R10
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_status_report
+********************************************************************/
+be_local_closure(Matter_Commisioning_Context_send_status_report, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 6, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(build_response),
+ /* K1 */ be_nested_str_weak(add),
+ /* K2 */ be_const_int(2),
+ /* K3 */ be_nested_str_weak(encode_frame),
+ /* K4 */ be_nested_str_weak(responder),
+ /* K5 */ be_nested_str_weak(send_response_frame),
+ }),
+ be_str_weak(send_status_report),
+ &be_const_str_solidified,
+ ( &(const binstruction[26]) { /* code */
+ 0x8C180300, // 0000 GETMET R6 R1 K0
+ 0x5422003F, // 0001 LDINT R8 64
+ 0x5C240A00, // 0002 MOVE R9 R5
+ 0x7C180600, // 0003 CALL R6 3
+ 0x601C0015, // 0004 GETGBL R7 G21
+ 0x7C1C0000, // 0005 CALL R7 0
+ 0x8C200F01, // 0006 GETMET R8 R7 K1
+ 0x5C280400, // 0007 MOVE R10 R2
+ 0x582C0002, // 0008 LDCONST R11 K2
+ 0x7C200600, // 0009 CALL R8 3
+ 0x8C200F01, // 000A GETMET R8 R7 K1
+ 0x5C280600, // 000B MOVE R10 R3
+ 0x542E0003, // 000C LDINT R11 4
+ 0x7C200600, // 000D CALL R8 3
+ 0x8C200F01, // 000E GETMET R8 R7 K1
+ 0x5C280800, // 000F MOVE R10 R4
+ 0x542E0003, // 0010 LDINT R11 4
+ 0x7C200600, // 0011 CALL R8 3
+ 0x8C200D03, // 0012 GETMET R8 R6 K3
+ 0x5C280E00, // 0013 MOVE R10 R7
+ 0x7C200400, // 0014 CALL R8 2
+ 0x88240104, // 0015 GETMBR R9 R0 K4
+ 0x8C241305, // 0016 GETMET R9 R9 K5
+ 0x5C2C0C00, // 0017 MOVE R11 R6
+ 0x7C240400, // 0018 CALL R9 2
+ 0x80000000, // 0019 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: parse_Pake1
+********************************************************************/
+be_local_closure(Matter_Commisioning_Context_parse_Pake1, /* name */
+ be_nested_proto(
+ 17, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[47]) { /* constants */
+ /* K0 */ be_nested_str_weak(crypto),
+ /* K1 */ be_nested_str_weak(session),
+ /* K2 */ be_nested_str_weak(opcode),
+ /* K3 */ be_nested_str_weak(local_session_id),
+ /* K4 */ be_const_int(0),
+ /* K5 */ be_nested_str_weak(protocol_id),
+ /* K6 */ be_nested_str_weak(tasmota),
+ /* K7 */ be_nested_str_weak(log),
+ /* K8 */ be_nested_str_weak(MTR_X3A_X20invalid_X20Pake1_X20message),
+ /* K9 */ be_const_int(2),
+ /* K10 */ be_nested_str_weak(MTR_X3A_X20StatusReport_X28General_X20Code_X3A_X20FAILURE_X2C_X20ProtocolId_X3A_X20SECURE_CHANNEL_X2C_X20ProtocolCode_X3A_X20INVALID_PARAMETER_X29),
+ /* K11 */ be_nested_str_weak(send_status_report),
+ /* K12 */ be_const_int(1),
+ /* K13 */ be_nested_str_weak(matter),
+ /* K14 */ be_nested_str_weak(Pake1),
+ /* K15 */ be_nested_str_weak(parse),
+ /* K16 */ be_nested_str_weak(raw),
+ /* K17 */ be_nested_str_weak(app_payload_idx),
+ /* K18 */ be_nested_str_weak(pA),
+ /* K19 */ be_nested_str_weak(SPAKE2P_Matter),
+ /* K20 */ be_nested_str_weak(device),
+ /* K21 */ be_nested_str_weak(commissioning_w0),
+ /* K22 */ be_nested_str_weak(commissioning_L),
+ /* K23 */ be_nested_str_weak(random),
+ /* K24 */ be_nested_str_weak(compute_pB),
+ /* K25 */ be_nested_str_weak(compute_ZV_verifier),
+ /* K26 */ be_nested_str_weak(SHA256),
+ /* K27 */ be_nested_str_weak(update),
+ /* K28 */ be_nested_str_weak(fromstring),
+ /* K29 */ be_nested_str_weak(Matter_Context_Prefix),
+ /* K30 */ be_nested_str_weak(__Msg1),
+ /* K31 */ be_nested_str_weak(__Msg2),
+ /* K32 */ be_nested_str_weak(out),
+ /* K33 */ be_nested_str_weak(set_context),
+ /* K34 */ be_nested_str_weak(compute_TT_hash),
+ /* K35 */ be_nested_str_weak(Pake2),
+ /* K36 */ be_nested_str_weak(pB),
+ /* K37 */ be_nested_str_weak(cB),
+ /* K38 */ be_nested_str_weak(tlv2raw),
+ /* K39 */ be_nested_str_weak(__spake_cA),
+ /* K40 */ be_nested_str_weak(cA),
+ /* K41 */ be_nested_str_weak(__spake_Ke),
+ /* K42 */ be_nested_str_weak(Ke),
+ /* K43 */ be_nested_str_weak(build_response),
+ /* K44 */ be_nested_str_weak(encode_frame),
+ /* K45 */ be_nested_str_weak(responder),
+ /* K46 */ be_nested_str_weak(send_response_frame),
+ }),
+ be_str_weak(parse_Pake1),
+ &be_const_str_solidified,
+ ( &(const binstruction[105]) { /* code */
0xA40A0000, // 0000 IMPORT R2 K0
0x880C0301, // 0001 GETMBR R3 R1 K1
- 0x5412002F, // 0002 LDINT R4 48
- 0x200C0604, // 0003 NE R3 R3 R4
- 0x740E0005, // 0004 JMPT R3 #000B
- 0x880C0302, // 0005 GETMBR R3 R1 K2
- 0x200C0703, // 0006 NE R3 R3 K3
- 0x740E0002, // 0007 JMPT R3 #000B
- 0x880C0304, // 0008 GETMBR R3 R1 K4
- 0x200C0703, // 0009 NE R3 R3 K3
- 0x780E0000, // 000A JMPF R3 #000C
- 0xB0060B06, // 000B RAISE 1 K5 K6
- 0xB80E0E00, // 000C GETNGBL R3 K7
- 0x8C0C0708, // 000D GETMET R3 R3 K8
- 0x7C0C0200, // 000E CALL R3 1
- 0x8C0C0709, // 000F GETMET R3 R3 K9
- 0x8814030A, // 0010 GETMBR R5 R1 K10
- 0x8818030B, // 0011 GETMBR R6 R1 K11
- 0x7C0C0600, // 0012 CALL R3 3
- 0x8810070D, // 0013 GETMBR R4 R3 K13
- 0x90021804, // 0014 SETMBR R0 K12 R4
- 0x8810070E, // 0015 GETMBR R4 R3 K14
- 0x4C140000, // 0016 LDNIL R5
- 0x20100805, // 0017 NE R4 R4 R5
- 0x78120003, // 0018 JMPF R4 #001D
- 0x8810070F, // 0019 GETMBR R4 R3 K15
- 0x4C140000, // 001A LDNIL R5
- 0x20100805, // 001B NE R4 R4 R5
- 0x74120000, // 001C JMPT R4 #001E
- 0x50100001, // 001D LDBOOL R4 0 1
- 0x50100200, // 001E LDBOOL R4 1 0
- 0x4C140000, // 001F LDNIL R5
- 0x78120006, // 0020 JMPF R4 #0028
- 0x88180110, // 0021 GETMBR R6 R0 K16
- 0x88180D11, // 0022 GETMBR R6 R6 K17
- 0x8C180D12, // 0023 GETMET R6 R6 K18
- 0x8820070E, // 0024 GETMBR R8 R3 K14
- 0x7C180400, // 0025 CALL R6 2
- 0x5C140C00, // 0026 MOVE R5 R6
- 0x70020004, // 0027 JMP #002D
- 0x8C180113, // 0028 GETMET R6 R0 K19
- 0x88200714, // 0029 GETMBR R8 R3 K20
- 0x88240715, // 002A GETMBR R9 R3 K21
- 0x7C180600, // 002B CALL R6 3
- 0x5C140C00, // 002C MOVE R5 R6
- 0x4C180000, // 002D LDNIL R6
- 0x1C180A06, // 002E EQ R6 R5 R6
- 0x781A0000, // 002F JMPF R6 #0031
- 0xB0062D17, // 0030 RAISE 1 K22 K23
- 0x88180318, // 0031 GETMBR R6 R1 K24
- 0x90163006, // 0032 SETMBR R5 K24 R6
- 0x8C180B19, // 0033 GETMET R6 R5 K25
- 0xB8220E00, // 0034 GETNGBL R8 K7
- 0x8820111A, // 0035 GETMBR R8 R8 K26
- 0x8820111B, // 0036 GETMBR R8 R8 K27
- 0x7C180400, // 0037 CALL R6 2
- 0x8818031C, // 0038 GETMBR R6 R1 K28
- 0x781A0004, // 0039 JMPF R6 #003F
- 0x88180110, // 003A GETMBR R6 R0 K16
- 0x88180D11, // 003B GETMBR R6 R6 K17
- 0x8C180D1D, // 003C GETMET R6 R6 K29
- 0x8820031C, // 003D GETMBR R8 R1 K28
- 0x7C180400, // 003E CALL R6 2
- 0x90063805, // 003F SETMBR R1 K28 R5
- 0x8818071F, // 0040 GETMBR R6 R3 K31
- 0x90163C06, // 0041 SETMBR R5 K30 R6
- 0x88180110, // 0042 GETMBR R6 R0 K16
- 0x88180D11, // 0043 GETMBR R6 R6 K17
- 0x8C180D21, // 0044 GETMET R6 R6 K33
- 0x7C180200, // 0045 CALL R6 1
- 0x90164006, // 0046 SETMBR R5 K32 R6
- 0x88180B20, // 0047 GETMBR R6 R5 K32
- 0x90024406, // 0048 SETMBR R0 K34 R6
- 0x781200EE, // 0049 JMPF R4 #0139
- 0x88180B23, // 004A GETMBR R6 R5 K35
- 0x4C1C0000, // 004B LDNIL R7
- 0x20180C07, // 004C NE R6 R6 R7
- 0x781A00EA, // 004D JMPF R6 #0139
- 0x88180715, // 004E GETMBR R6 R3 K21
- 0x881C070E, // 004F GETMBR R7 R3 K14
- 0x00180C07, // 0050 ADD R6 R6 R7
- 0x601C0015, // 0051 GETGBL R7 G21
- 0x7C1C0000, // 0052 CALL R7 0
- 0x8C1C0F24, // 0053 GETMET R7 R7 K36
- 0x58240025, // 0054 LDCONST R9 K37
- 0x7C1C0400, // 0055 CALL R7 2
- 0x8C200526, // 0056 GETMET R8 R2 K38
- 0x7C200200, // 0057 CALL R8 1
- 0x8C201127, // 0058 GETMET R8 R8 K39
- 0x88280B23, // 0059 GETMBR R10 R5 K35
- 0x5C2C0C00, // 005A MOVE R11 R6
- 0x5C300E00, // 005B MOVE R12 R7
- 0x5436000F, // 005C LDINT R13 16
- 0x7C200A00, // 005D CALL R8 5
- 0x60240015, // 005E GETGBL R9 G21
- 0x7C240000, // 005F CALL R9 0
- 0x8C241324, // 0060 GETMET R9 R9 K36
- 0x582C0028, // 0061 LDCONST R11 K40
- 0x7C240400, // 0062 CALL R9 2
- 0x5429FFEE, // 0063 LDINT R10 -17
- 0x402A060A, // 0064 CONNECT R10 K3 R10
- 0x882C070F, // 0065 GETMBR R11 R3 K15
- 0x9428160A, // 0066 GETIDX R10 R11 R10
- 0x5431FFEF, // 0067 LDINT R12 -16
- 0x40301929, // 0068 CONNECT R12 R12 K41
- 0x8834070F, // 0069 GETMBR R13 R3 K15
- 0x942C1A0C, // 006A GETIDX R11 R13 R12
- 0x8C38052A, // 006B GETMET R14 R2 K42
- 0x5C401000, // 006C MOVE R16 R8
- 0x5C441200, // 006D MOVE R17 R9
- 0x60480015, // 006E GETGBL R18 G21
- 0x7C480000, // 006F CALL R18 0
- 0x604C000C, // 0070 GETGBL R19 G12
- 0x5C501400, // 0071 MOVE R20 R10
- 0x7C4C0200, // 0072 CALL R19 1
- 0x5452000F, // 0073 LDINT R20 16
- 0x7C380C00, // 0074 CALL R14 6
- 0x5C301C00, // 0075 MOVE R12 R14
- 0x8C38192B, // 0076 GETMET R14 R12 K43
- 0x5C401400, // 0077 MOVE R16 R10
- 0x7C380400, // 0078 CALL R14 2
- 0x5C341C00, // 0079 MOVE R13 R14
- 0x8C38192C, // 007A GETMET R14 R12 K44
- 0x7C380200, // 007B CALL R14 1
- 0xB83E5A00, // 007C GETNGBL R15 K45
- 0x8C3C1F2E, // 007D GETMET R15 R15 K46
- 0x5844002F, // 007E LDCONST R17 K47
- 0x58480030, // 007F LDCONST R18 K48
- 0x7C3C0600, // 0080 CALL R15 3
- 0xB83E5A00, // 0081 GETNGBL R15 K45
- 0x8C3C1F2E, // 0082 GETMET R15 R15 K46
- 0x8C441132, // 0083 GETMET R17 R8 K50
- 0x7C440200, // 0084 CALL R17 1
- 0x00466211, // 0085 ADD R17 K49 R17
- 0x58480030, // 0086 LDCONST R18 K48
- 0x7C3C0600, // 0087 CALL R15 3
- 0xB83E5A00, // 0088 GETNGBL R15 K45
- 0x8C3C1F2E, // 0089 GETMET R15 R15 K46
- 0x8C441732, // 008A GETMET R17 R11 K50
- 0x7C440200, // 008B CALL R17 1
- 0x00466611, // 008C ADD R17 K51 R17
- 0x58480030, // 008D LDCONST R18 K48
- 0x7C3C0600, // 008E CALL R15 3
- 0xB83E5A00, // 008F GETNGBL R15 K45
- 0x8C3C1F2E, // 0090 GETMET R15 R15 K46
- 0x8C441B32, // 0091 GETMET R17 R13 K50
- 0x7C440200, // 0092 CALL R17 1
- 0x00466811, // 0093 ADD R17 K52 R17
- 0x58480030, // 0094 LDCONST R18 K48
- 0x7C3C0600, // 0095 CALL R15 3
- 0xB83E5A00, // 0096 GETNGBL R15 K45
- 0x8C3C1F2E, // 0097 GETMET R15 R15 K46
- 0x8C441D32, // 0098 GETMET R17 R14 K50
- 0x7C440200, // 0099 CALL R17 1
- 0x00466A11, // 009A ADD R17 K53 R17
- 0x58480030, // 009B LDCONST R18 K48
- 0x7C3C0600, // 009C CALL R15 3
- 0xB83E5A00, // 009D GETNGBL R15 K45
- 0x8C3C1F2E, // 009E GETMET R15 R15 K46
- 0x5844002F, // 009F LDCONST R17 K47
- 0x58480030, // 00A0 LDCONST R18 K48
- 0x7C3C0600, // 00A1 CALL R15 3
- 0x1C3C160E, // 00A2 EQ R15 R11 R14
- 0x783E0092, // 00A3 JMPF R15 #0137
- 0x8C3C0537, // 00A4 GETMET R15 R2 K55
- 0x5446000F, // 00A5 LDINT R17 16
- 0x7C3C0400, // 00A6 CALL R15 2
- 0x90166C0F, // 00A7 SETMBR R5 K54 R15
- 0x603C0015, // 00A8 GETGBL R15 G21
- 0x7C3C0000, // 00A9 CALL R15 0
- 0x8C3C1F24, // 00AA GETMET R15 R15 K36
- 0x58440038, // 00AB LDCONST R17 K56
- 0x7C3C0400, // 00AC CALL R15 2
- 0x88400B36, // 00AD GETMBR R16 R5 K54
- 0x003C1E10, // 00AE ADD R15 R15 R16
- 0x88400715, // 00AF GETMBR R16 R3 K21
- 0x8844070E, // 00B0 GETMBR R17 R3 K14
- 0x00402011, // 00B1 ADD R16 R16 R17
- 0x8C440526, // 00B2 GETMET R17 R2 K38
- 0x7C440200, // 00B3 CALL R17 1
- 0x8C442327, // 00B4 GETMET R17 R17 K39
- 0x884C0B23, // 00B5 GETMBR R19 R5 K35
- 0x5C502000, // 00B6 MOVE R20 R16
- 0x5C541E00, // 00B7 MOVE R21 R15
- 0x545A000F, // 00B8 LDINT R22 16
- 0x7C440A00, // 00B9 CALL R17 5
- 0x8C48052A, // 00BA GETMET R18 R2 K42
- 0x5C502200, // 00BB MOVE R20 R17
- 0x60540015, // 00BC GETGBL R21 G21
- 0x7C540000, // 00BD CALL R21 0
- 0x8C542B24, // 00BE GETMET R21 R21 K36
- 0x585C0039, // 00BF LDCONST R23 K57
- 0x7C540400, // 00C0 CALL R21 2
- 0x60580015, // 00C1 GETGBL R22 G21
- 0x7C580000, // 00C2 CALL R22 0
- 0x585C0003, // 00C3 LDCONST R23 K3
- 0x5462000F, // 00C4 LDINT R24 16
- 0x7C480C00, // 00C5 CALL R18 6
- 0x8C4C252C, // 00C6 GETMET R19 R18 K44
- 0x7C4C0200, // 00C7 CALL R19 1
- 0xB8520E00, // 00C8 GETNGBL R20 K7
- 0x8C50293A, // 00C9 GETMET R20 R20 K58
- 0x7C500200, // 00CA CALL R20 1
- 0x88540B36, // 00CB GETMBR R21 R5 K54
- 0x90521C15, // 00CC SETMBR R20 K14 R21
- 0x88540B20, // 00CD GETMBR R21 R5 K32
- 0x90527615, // 00CE SETMBR R20 K59 R21
- 0x90527813, // 00CF SETMBR R20 K60 R19
- 0x8C540526, // 00D0 GETMET R21 R2 K38
- 0x7C540200, // 00D1 CALL R21 1
- 0x8C542B27, // 00D2 GETMET R21 R21 K39
- 0x885C0B23, // 00D3 GETMBR R23 R5 K35
- 0x88600715, // 00D4 GETMBR R24 R3 K21
- 0x8864070E, // 00D5 GETMBR R25 R3 K14
- 0x00603019, // 00D6 ADD R24 R24 R25
- 0x60640015, // 00D7 GETGBL R25 G21
- 0x7C640000, // 00D8 CALL R25 0
- 0x8C643324, // 00D9 GETMET R25 R25 K36
- 0x586C003D, // 00DA LDCONST R27 K61
- 0x7C640400, // 00DB CALL R25 2
- 0x546A002F, // 00DC LDINT R26 48
- 0x7C540A00, // 00DD CALL R21 5
- 0x545A000E, // 00DE LDINT R22 15
- 0x405A0616, // 00DF CONNECT R22 K3 R22
- 0x94582A16, // 00E0 GETIDX R22 R21 R22
- 0x545E000F, // 00E1 LDINT R23 16
- 0x5462001E, // 00E2 LDINT R24 31
- 0x405C2E18, // 00E3 CONNECT R23 R23 R24
- 0x945C2A17, // 00E4 GETIDX R23 R21 R23
- 0x5462001F, // 00E5 LDINT R24 32
- 0x5466002E, // 00E6 LDINT R25 47
- 0x40603019, // 00E7 CONNECT R24 R24 R25
- 0x94602A18, // 00E8 GETIDX R24 R21 R24
- 0xB8665A00, // 00E9 GETNGBL R25 K45
- 0x8C64333E, // 00EA GETMET R25 R25 K62
- 0x7C640200, // 00EB CALL R25 1
- 0x9464333F, // 00EC GETIDX R25 R25 K63
- 0xB86A5A00, // 00ED GETNGBL R26 K45
- 0x8C68352E, // 00EE GETMET R26 R26 K46
- 0x58700040, // 00EF LDCONST R28 K64
- 0x58740030, // 00F0 LDCONST R29 K48
- 0x7C680600, // 00F1 CALL R26 3
- 0xB86A5A00, // 00F2 GETNGBL R26 K45
- 0x8C68352E, // 00F3 GETMET R26 R26 K46
- 0x8C702D32, // 00F4 GETMET R28 R22 K50
- 0x7C700200, // 00F5 CALL R28 1
- 0x0072821C, // 00F6 ADD R28 K65 R28
- 0x58740030, // 00F7 LDCONST R29 K48
- 0x7C680600, // 00F8 CALL R26 3
- 0xB86A5A00, // 00F9 GETNGBL R26 K45
- 0x8C68352E, // 00FA GETMET R26 R26 K46
- 0x8C702F32, // 00FB GETMET R28 R23 K50
- 0x7C700200, // 00FC CALL R28 1
- 0x0072841C, // 00FD ADD R28 K66 R28
- 0x58740030, // 00FE LDCONST R29 K48
- 0x7C680600, // 00FF CALL R26 3
- 0xB86A5A00, // 0100 GETNGBL R26 K45
- 0x8C68352E, // 0101 GETMET R26 R26 K46
- 0x8C703132, // 0102 GETMET R28 R24 K50
- 0x7C700200, // 0103 CALL R28 1
- 0x0072861C, // 0104 ADD R28 K67 R28
- 0x58740030, // 0105 LDCONST R29 K48
- 0x7C680600, // 0106 CALL R26 3
- 0xB86A5A00, // 0107 GETNGBL R26 K45
- 0x8C68352E, // 0108 GETMET R26 R26 K46
- 0x58700040, // 0109 LDCONST R28 K64
- 0x58740030, // 010A LDCONST R29 K48
- 0x7C680600, // 010B CALL R26 3
- 0x8C682944, // 010C GETMET R26 R20 K68
- 0x7C680200, // 010D CALL R26 1
- 0x4C6C0000, // 010E LDNIL R27
- 0x90168A1B, // 010F SETMBR R5 K69 R27
- 0xB86E5A00, // 0110 GETNGBL R27 K45
- 0x8C6C372E, // 0111 GETMET R27 R27 K46
- 0x8C743532, // 0112 GETMET R29 R26 K50
- 0x7C740200, // 0113 CALL R29 1
- 0x00768C1D, // 0114 ADD R29 K70 R29
- 0x58780030, // 0115 LDCONST R30 K48
- 0x7C6C0600, // 0116 CALL R27 3
- 0x8C6C0347, // 0117 GETMET R27 R1 K71
- 0x54760032, // 0118 LDINT R29 51
- 0x50780200, // 0119 LDBOOL R30 1 0
- 0x7C6C0600, // 011A CALL R27 3
- 0x8C703744, // 011B GETMET R28 R27 K68
- 0x5C783400, // 011C MOVE R30 R26
- 0x7C700400, // 011D CALL R28 2
- 0x88740148, // 011E GETMBR R29 R0 K72
- 0x8C743B49, // 011F GETMET R29 R29 K73
- 0x5C7C3800, // 0120 MOVE R31 R28
- 0x8880034A, // 0121 GETMBR R32 R1 K74
- 0x8884034B, // 0122 GETMBR R33 R1 K75
- 0x8888374C, // 0123 GETMBR R34 R27 K76
- 0x7C740A00, // 0124 CALL R29 5
- 0x8C740B4D, // 0125 GETMET R29 R5 K77
- 0x7C740200, // 0126 CALL R29 1
- 0x8C740B4E, // 0127 GETMET R29 R5 K78
- 0x5C7C2C00, // 0128 MOVE R31 R22
- 0x5C802E00, // 0129 MOVE R32 R23
- 0x5C843000, // 012A MOVE R33 R24
- 0x5C883200, // 012B MOVE R34 R25
- 0x7C740A00, // 012C CALL R29 5
- 0x8C740B4F, // 012D GETMET R29 R5 K79
- 0x507C0200, // 012E LDBOOL R31 1 0
- 0x7C740400, // 012F CALL R29 2
- 0x8C740B50, // 0130 GETMET R29 R5 K80
- 0x7C740200, // 0131 CALL R29 1
- 0x8C740B51, // 0132 GETMET R29 R5 K81
- 0x7C740200, // 0133 CALL R29 1
- 0x50740200, // 0134 LDBOOL R29 1 0
- 0x80043A00, // 0135 RET 1 R29
- 0x70020001, // 0136 JMP #0139
- 0x4C3C0000, // 0137 LDNIL R15
- 0x900E1C0F, // 0138 SETMBR R3 K14 R15
- 0x8818070E, // 0139 GETMBR R6 R3 K14
- 0x4C1C0000, // 013A LDNIL R7
- 0x1C180C07, // 013B EQ R6 R6 R7
- 0x741A0003, // 013C JMPT R6 #0141
- 0x8818070F, // 013D GETMBR R6 R3 K15
- 0x4C1C0000, // 013E LDNIL R7
- 0x1C180C07, // 013F EQ R6 R6 R7
- 0x781A00F0, // 0140 JMPF R6 #0232
- 0x8C180537, // 0141 GETMET R6 R2 K55
- 0x5422000F, // 0142 LDINT R8 16
- 0x7C180400, // 0143 CALL R6 2
- 0x90166C06, // 0144 SETMBR R5 K54 R6
- 0x8C180537, // 0145 GETMET R6 R2 K55
- 0x5422001F, // 0146 LDINT R8 32
- 0x7C180400, // 0147 CALL R6 2
- 0x9002A406, // 0148 SETMBR R0 K82 R6
- 0x8C180554, // 0149 GETMET R6 R2 K84
- 0x7C180200, // 014A CALL R6 1
- 0x8C180D55, // 014B GETMET R6 R6 K85
- 0x88200152, // 014C GETMBR R8 R0 K82
- 0x7C180400, // 014D CALL R6 2
- 0x9002A606, // 014E SETMBR R0 K83 R6
- 0x8C180537, // 014F GETMET R6 R2 K55
- 0x5422001F, // 0150 LDINT R8 32
- 0x7C180400, // 0151 CALL R6 2
- 0x8C1C0554, // 0152 GETMET R7 R2 K84
- 0x7C1C0200, // 0153 CALL R7 1
- 0x8C1C0F56, // 0154 GETMET R7 R7 K86
- 0x88240152, // 0155 GETMBR R9 R0 K82
- 0x8828070D, // 0156 GETMBR R10 R3 K13
- 0x7C1C0600, // 0157 CALL R7 3
- 0x90164607, // 0158 SETMBR R5 K35 R7
- 0xB81E0E00, // 0159 GETNGBL R7 K7
- 0x881C0F57, // 015A GETMBR R7 R7 K87
- 0x8C1C0F58, // 015B GETMET R7 R7 K88
- 0x7C1C0200, // 015C CALL R7 1
- 0x8C200F59, // 015D GETMET R8 R7 K89
- 0x5828005A, // 015E LDCONST R10 K90
- 0xB82E0E00, // 015F GETNGBL R11 K7
- 0x882C1757, // 0160 GETMBR R11 R11 K87
- 0x882C175B, // 0161 GETMBR R11 R11 K91
- 0x8C300B5C, // 0162 GETMET R12 R5 K92
- 0x7C300200, // 0163 CALL R12 1
- 0x7C200800, // 0164 CALL R8 4
- 0x8C200F59, // 0165 GETMET R8 R7 K89
- 0x5828005D, // 0166 LDCONST R10 K93
- 0xB82E0E00, // 0167 GETNGBL R11 K7
- 0x882C1757, // 0168 GETMBR R11 R11 K87
- 0x882C175B, // 0169 GETMBR R11 R11 K91
- 0x8C300B5E, // 016A GETMET R12 R5 K94
- 0x7C300200, // 016B CALL R12 1
- 0x7C200800, // 016C CALL R8 4
- 0x8C200F59, // 016D GETMET R8 R7 K89
- 0x58280030, // 016E LDCONST R10 K48
- 0xB82E0E00, // 016F GETNGBL R11 K7
- 0x882C1757, // 0170 GETMBR R11 R11 K87
- 0x882C175B, // 0171 GETMBR R11 R11 K91
- 0x88300153, // 0172 GETMBR R12 R0 K83
- 0x7C200800, // 0173 CALL R8 4
- 0x8C200F59, // 0174 GETMET R8 R7 K89
- 0x542A0003, // 0175 LDINT R10 4
- 0xB82E0E00, // 0176 GETNGBL R11 K7
- 0x882C1757, // 0177 GETMBR R11 R11 K87
- 0x882C175B, // 0178 GETMBR R11 R11 K91
- 0x8830070D, // 0179 GETMBR R12 R3 K13
- 0x7C200800, // 017A CALL R8 4
- 0x8C200554, // 017B GETMET R8 R2 K84
- 0x7C200200, // 017C CALL R8 1
- 0x8C20115F, // 017D GETMET R8 R8 K95
- 0x8C280B60, // 017E GETMET R10 R5 K96
- 0x7C280200, // 017F CALL R10 1
- 0x8C2C0F44, // 0180 GETMET R11 R7 K68
- 0x7C2C0200, // 0181 CALL R11 1
- 0x7C200600, // 0182 CALL R8 3
- 0xB8260E00, // 0183 GETNGBL R9 K7
- 0x88241357, // 0184 GETMBR R9 R9 K87
- 0x8C241358, // 0185 GETMET R9 R9 K88
- 0x7C240200, // 0186 CALL R9 1
- 0x8C281359, // 0187 GETMET R10 R9 K89
- 0x5830005A, // 0188 LDCONST R12 K90
- 0xB8360E00, // 0189 GETNGBL R13 K7
- 0x88341B57, // 018A GETMBR R13 R13 K87
- 0x88341B5B, // 018B GETMBR R13 R13 K91
- 0x8C380B5C, // 018C GETMET R14 R5 K92
- 0x7C380200, // 018D CALL R14 1
- 0x7C280800, // 018E CALL R10 4
- 0x8C281359, // 018F GETMET R10 R9 K89
- 0x5830005D, // 0190 LDCONST R12 K93
- 0xB8360E00, // 0191 GETNGBL R13 K7
- 0x88341B57, // 0192 GETMBR R13 R13 K87
- 0x88341B5B, // 0193 GETMBR R13 R13 K91
- 0x8C380B5E, // 0194 GETMET R14 R5 K94
- 0x7C380200, // 0195 CALL R14 1
- 0x7C280800, // 0196 CALL R10 4
- 0x8C281359, // 0197 GETMET R10 R9 K89
- 0x58300030, // 0198 LDCONST R12 K48
- 0xB8360E00, // 0199 GETNGBL R13 K7
- 0x88341B57, // 019A GETMBR R13 R13 K87
- 0x88341B5B, // 019B GETMBR R13 R13 K91
- 0x5C381000, // 019C MOVE R14 R8
- 0x7C280800, // 019D CALL R10 4
- 0x8C281359, // 019E GETMET R10 R9 K89
- 0x54320003, // 019F LDINT R12 4
- 0xB8360E00, // 01A0 GETNGBL R13 K7
- 0x88341B57, // 01A1 GETMBR R13 R13 K87
- 0x88341B5B, // 01A2 GETMBR R13 R13 K91
- 0x88380B36, // 01A3 GETMBR R14 R5 K54
- 0x7C280800, // 01A4 CALL R10 4
- 0xB82A5A00, // 01A5 GETNGBL R10 K45
- 0x8C28152E, // 01A6 GETMET R10 R10 K46
- 0x5830002F, // 01A7 LDCONST R12 K47
- 0x58340030, // 01A8 LDCONST R13 K48
- 0x7C280600, // 01A9 CALL R10 3
- 0x88280761, // 01AA GETMBR R10 R3 K97
- 0x90168A0A, // 01AB SETMBR R5 K69 R10
- 0xB82A5A00, // 01AC GETNGBL R10 K45
- 0x8C28152E, // 01AD GETMET R10 R10 K46
- 0x88300B45, // 01AE GETMBR R12 R5 K69
- 0x8C301932, // 01AF GETMET R12 R12 K50
- 0x7C300200, // 01B0 CALL R12 1
- 0x0032C40C, // 01B1 ADD R12 K98 R12
- 0x58340030, // 01B2 LDCONST R13 K48
- 0x7C280600, // 01B3 CALL R10 3
- 0x8C280563, // 01B4 GETMET R10 R2 K99
- 0x7C280200, // 01B5 CALL R10 1
- 0x8C281564, // 01B6 GETMET R10 R10 K100
- 0x88300B45, // 01B7 GETMBR R12 R5 K69
- 0x7C280400, // 01B8 CALL R10 2
- 0x8C281565, // 01B9 GETMET R10 R10 K101
- 0x7C280200, // 01BA CALL R10 1
- 0x602C0015, // 01BB GETGBL R11 G21
- 0x7C2C0000, // 01BC CALL R11 0
- 0x8C2C1724, // 01BD GETMET R11 R11 K36
- 0x88340166, // 01BE GETMBR R13 R0 K102
- 0x7C2C0400, // 01BF CALL R11 2
- 0x8C300B67, // 01C0 GETMET R12 R5 K103
- 0x7C300200, // 01C1 CALL R12 1
- 0x00301806, // 01C2 ADD R12 R12 R6
- 0x88340153, // 01C3 GETMBR R13 R0 K83
- 0x0030180D, // 01C4 ADD R12 R12 R13
- 0x0030180A, // 01C5 ADD R12 R12 R10
- 0x8C340526, // 01C6 GETMET R13 R2 K38
- 0x7C340200, // 01C7 CALL R13 1
- 0x8C341B27, // 01C8 GETMET R13 R13 K39
- 0x883C0B23, // 01C9 GETMBR R15 R5 K35
- 0x5C401800, // 01CA MOVE R16 R12
- 0x5C441600, // 01CB MOVE R17 R11
- 0x544A000F, // 01CC LDINT R18 16
- 0x7C340A00, // 01CD CALL R13 5
- 0xB83A5A00, // 01CE GETNGBL R14 K45
- 0x8C381D2E, // 01CF GETMET R14 R14 K46
- 0x88400B23, // 01D0 GETMBR R16 R5 K35
- 0x8C402132, // 01D1 GETMET R16 R16 K50
- 0x7C400200, // 01D2 CALL R16 1
- 0x0042D010, // 01D3 ADD R16 K104 R16
- 0x58440030, // 01D4 LDCONST R17 K48
- 0x7C380600, // 01D5 CALL R14 3
- 0xB83A5A00, // 01D6 GETNGBL R14 K45
- 0x8C381D2E, // 01D7 GETMET R14 R14 K46
- 0x8C401932, // 01D8 GETMET R16 R12 K50
- 0x7C400200, // 01D9 CALL R16 1
- 0x0042D210, // 01DA ADD R16 K105 R16
- 0x58440030, // 01DB LDCONST R17 K48
- 0x7C380600, // 01DC CALL R14 3
- 0xB83A5A00, // 01DD GETNGBL R14 K45
- 0x8C381D2E, // 01DE GETMET R14 R14 K46
- 0x8C401B32, // 01DF GETMET R16 R13 K50
- 0x7C400200, // 01E0 CALL R16 1
- 0x0042D410, // 01E1 ADD R16 K106 R16
- 0x58440030, // 01E2 LDCONST R17 K48
- 0x7C380600, // 01E3 CALL R14 3
- 0x8C381344, // 01E4 GETMET R14 R9 K68
- 0x7C380200, // 01E5 CALL R14 1
- 0x8C3C052A, // 01E6 GETMET R15 R2 K42
- 0x5C441A00, // 01E7 MOVE R17 R13
- 0x60480015, // 01E8 GETGBL R18 G21
- 0x7C480000, // 01E9 CALL R18 0
- 0x8C482524, // 01EA GETMET R18 R18 K36
- 0x8850016B, // 01EB GETMBR R20 R0 K107
- 0x7C480400, // 01EC CALL R18 2
- 0x604C0015, // 01ED GETGBL R19 G21
- 0x7C4C0000, // 01EE CALL R19 0
- 0x6050000C, // 01EF GETGBL R20 G12
- 0x5C541C00, // 01F0 MOVE R21 R14
- 0x7C500200, // 01F1 CALL R20 1
- 0x5456000F, // 01F2 LDINT R21 16
- 0x7C3C0C00, // 01F3 CALL R15 6
- 0x8C401F6C, // 01F4 GETMET R16 R15 K108
- 0x5C481C00, // 01F5 MOVE R18 R14
- 0x7C400400, // 01F6 CALL R16 2
- 0x8C441F2C, // 01F7 GETMET R17 R15 K44
- 0x7C440200, // 01F8 CALL R17 1
- 0x00402011, // 01F9 ADD R16 R16 R17
- 0xB8465A00, // 01FA GETNGBL R17 K45
- 0x8C44232E, // 01FB GETMET R17 R17 K46
- 0x8C4C2132, // 01FC GETMET R19 R16 K50
- 0x7C4C0200, // 01FD CALL R19 1
- 0x004EDA13, // 01FE ADD R19 K109 R19
- 0x58500030, // 01FF LDCONST R20 K48
- 0x7C440600, // 0200 CALL R17 3
- 0xB8465A00, // 0201 GETNGBL R17 K45
- 0x8C44232E, // 0202 GETMET R17 R17 K46
- 0x584C002F, // 0203 LDCONST R19 K47
- 0x58500030, // 0204 LDCONST R20 K48
- 0x7C440600, // 0205 CALL R17 3
- 0xB8460E00, // 0206 GETNGBL R17 K7
- 0x8C44236E, // 0207 GETMET R17 R17 K110
- 0x7C440200, // 0208 CALL R17 1
- 0x9046DE06, // 0209 SETMBR R17 K111 R6
- 0x88480122, // 020A GETMBR R18 R0 K34
- 0x9046E012, // 020B SETMBR R17 K112 R18
- 0x88480153, // 020C GETMBR R18 R0 K83
- 0x9046E212, // 020D SETMBR R17 K113 R18
- 0x9046E410, // 020E SETMBR R17 K114 R16
- 0xB84A5A00, // 020F GETNGBL R18 K45
- 0x8C48252E, // 0210 GETMET R18 R18 K46
- 0xB8520E00, // 0211 GETNGBL R20 K7
- 0x8C502974, // 0212 GETMET R20 R20 K116
- 0x5C582200, // 0213 MOVE R22 R17
- 0x7C500400, // 0214 CALL R20 2
- 0x0052E614, // 0215 ADD R20 K115 R20
- 0x58540030, // 0216 LDCONST R21 K48
- 0x7C480600, // 0217 CALL R18 3
- 0x8C482344, // 0218 GETMET R18 R17 K68
- 0x7C480200, // 0219 CALL R18 1
- 0x9016EA12, // 021A SETMBR R5 K117 R18
- 0xB84E5A00, // 021B GETNGBL R19 K45
- 0x8C4C272E, // 021C GETMET R19 R19 K46
- 0x8C542532, // 021D GETMET R21 R18 K50
- 0x7C540200, // 021E CALL R21 1
- 0x0056EC15, // 021F ADD R21 K118 R21
- 0x58580030, // 0220 LDCONST R22 K48
- 0x7C4C0600, // 0221 CALL R19 3
- 0x8C4C0347, // 0222 GETMET R19 R1 K71
- 0x54560030, // 0223 LDINT R21 49
- 0x50580200, // 0224 LDBOOL R22 1 0
- 0x7C4C0600, // 0225 CALL R19 3
- 0x8C502744, // 0226 GETMET R20 R19 K68
- 0x5C582400, // 0227 MOVE R22 R18
- 0x7C500400, // 0228 CALL R20 2
- 0x88540148, // 0229 GETMBR R21 R0 K72
- 0x8C542B49, // 022A GETMET R21 R21 K73
- 0x5C5C2800, // 022B MOVE R23 R20
- 0x8860034A, // 022C GETMBR R24 R1 K74
- 0x8864034B, // 022D GETMBR R25 R1 K75
- 0x8868274C, // 022E GETMBR R26 R19 K76
- 0x7C540A00, // 022F CALL R21 5
- 0x50540200, // 0230 LDBOOL R21 1 0
- 0x80042A00, // 0231 RET 1 R21
- 0x50180200, // 0232 LDBOOL R6 1 0
- 0x80040C00, // 0233 RET 1 R6
+ 0x88100302, // 0002 GETMBR R4 R1 K2
+ 0x54160021, // 0003 LDINT R5 34
+ 0x20100805, // 0004 NE R4 R4 R5
+ 0x74120005, // 0005 JMPT R4 #000C
+ 0x88100303, // 0006 GETMBR R4 R1 K3
+ 0x20100904, // 0007 NE R4 R4 K4
+ 0x74120002, // 0008 JMPT R4 #000C
+ 0x88100305, // 0009 GETMBR R4 R1 K5
+ 0x20100904, // 000A NE R4 R4 K4
+ 0x78120012, // 000B JMPF R4 #001F
+ 0xB8120C00, // 000C GETNGBL R4 K6
+ 0x8C100907, // 000D GETMET R4 R4 K7
+ 0x58180008, // 000E LDCONST R6 K8
+ 0x581C0009, // 000F LDCONST R7 K9
+ 0x7C100600, // 0010 CALL R4 3
+ 0xB8120C00, // 0011 GETNGBL R4 K6
+ 0x8C100907, // 0012 GETMET R4 R4 K7
+ 0x5818000A, // 0013 LDCONST R6 K10
+ 0x581C0009, // 0014 LDCONST R7 K9
+ 0x7C100600, // 0015 CALL R4 3
+ 0x8C10010B, // 0016 GETMET R4 R0 K11
+ 0x5C180200, // 0017 MOVE R6 R1
+ 0x581C000C, // 0018 LDCONST R7 K12
+ 0x58200004, // 0019 LDCONST R8 K4
+ 0x58240009, // 001A LDCONST R9 K9
+ 0x50280000, // 001B LDBOOL R10 0 0
+ 0x7C100C00, // 001C CALL R4 6
+ 0x50140000, // 001D LDBOOL R5 0 0
+ 0x80040A00, // 001E RET 1 R5
+ 0xB8121A00, // 001F GETNGBL R4 K13
+ 0x8C10090E, // 0020 GETMET R4 R4 K14
+ 0x7C100200, // 0021 CALL R4 1
+ 0x8C10090F, // 0022 GETMET R4 R4 K15
+ 0x88180310, // 0023 GETMBR R6 R1 K16
+ 0x881C0311, // 0024 GETMBR R7 R1 K17
+ 0x7C100600, // 0025 CALL R4 3
+ 0x88140912, // 0026 GETMBR R5 R4 K18
+ 0x8C180513, // 0027 GETMET R6 R2 K19
+ 0x88200114, // 0028 GETMBR R8 R0 K20
+ 0x88201115, // 0029 GETMBR R8 R8 K21
+ 0x4C240000, // 002A LDNIL R9
+ 0x88280114, // 002B GETMBR R10 R0 K20
+ 0x88281516, // 002C GETMBR R10 R10 K22
+ 0x7C180800, // 002D CALL R6 4
+ 0x8C1C0517, // 002E GETMET R7 R2 K23
+ 0x5426001F, // 002F LDINT R9 32
+ 0x7C1C0400, // 0030 CALL R7 2
+ 0x8C200D18, // 0031 GETMET R8 R6 K24
+ 0x5C280E00, // 0032 MOVE R10 R7
+ 0x7C200400, // 0033 CALL R8 2
+ 0x8C200D19, // 0034 GETMET R8 R6 K25
+ 0x5C280A00, // 0035 MOVE R10 R5
+ 0x7C200400, // 0036 CALL R8 2
+ 0x8C20051A, // 0037 GETMET R8 R2 K26
+ 0x7C200200, // 0038 CALL R8 1
+ 0x8C24111B, // 0039 GETMET R9 R8 K27
+ 0x602C0015, // 003A GETGBL R11 G21
+ 0x7C2C0000, // 003B CALL R11 0
+ 0x8C2C171C, // 003C GETMET R11 R11 K28
+ 0x8834011D, // 003D GETMBR R13 R0 K29
+ 0x7C2C0400, // 003E CALL R11 2
+ 0x7C240400, // 003F CALL R9 2
+ 0x8C24111B, // 0040 GETMET R9 R8 K27
+ 0x882C071E, // 0041 GETMBR R11 R3 K30
+ 0x7C240400, // 0042 CALL R9 2
+ 0x8C24111B, // 0043 GETMET R9 R8 K27
+ 0x882C071F, // 0044 GETMBR R11 R3 K31
+ 0x7C240400, // 0045 CALL R9 2
+ 0x8C241120, // 0046 GETMET R9 R8 K32
+ 0x7C240200, // 0047 CALL R9 1
+ 0x901A2405, // 0048 SETMBR R6 K18 R5
+ 0x8C280D21, // 0049 GETMET R10 R6 K33
+ 0x5C301200, // 004A MOVE R12 R9
+ 0x7C280400, // 004B CALL R10 2
+ 0x8C280D22, // 004C GETMET R10 R6 K34
+ 0x50300200, // 004D LDBOOL R12 1 0
+ 0x7C280400, // 004E CALL R10 2
+ 0xB82A1A00, // 004F GETNGBL R10 K13
+ 0x8C281523, // 0050 GETMET R10 R10 K35
+ 0x7C280200, // 0051 CALL R10 1
+ 0x882C0D24, // 0052 GETMBR R11 R6 K36
+ 0x902A480B, // 0053 SETMBR R10 K36 R11
+ 0x882C0D25, // 0054 GETMBR R11 R6 K37
+ 0x902A4A0B, // 0055 SETMBR R10 K37 R11
+ 0x8C2C1526, // 0056 GETMET R11 R10 K38
+ 0x7C2C0200, // 0057 CALL R11 1
+ 0x88300D28, // 0058 GETMBR R12 R6 K40
+ 0x900E4E0C, // 0059 SETMBR R3 K39 R12
+ 0x88300D2A, // 005A GETMBR R12 R6 K42
+ 0x900E520C, // 005B SETMBR R3 K41 R12
+ 0x8C30032B, // 005C GETMET R12 R1 K43
+ 0x543A0022, // 005D LDINT R14 35
+ 0x503C0200, // 005E LDBOOL R15 1 0
+ 0x7C300600, // 005F CALL R12 3
+ 0x8C34192C, // 0060 GETMET R13 R12 K44
+ 0x5C3C1600, // 0061 MOVE R15 R11
+ 0x7C340400, // 0062 CALL R13 2
+ 0x8838012D, // 0063 GETMBR R14 R0 K45
+ 0x8C381D2E, // 0064 GETMET R14 R14 K46
+ 0x5C401800, // 0065 MOVE R16 R12
+ 0x7C380400, // 0066 CALL R14 2
+ 0x50380200, // 0067 LDBOOL R14 1 0
+ 0x80041C00, // 0068 RET 1 R14
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_Commisioning_Context_init, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(crypto),
+ /* K1 */ be_nested_str_weak(responder),
+ /* K2 */ be_nested_str_weak(device),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0x90020201, // 0001 SETMBR R0 K1 R1
+ 0x880C0302, // 0002 GETMBR R3 R1 K2
+ 0x90020403, // 0003 SETMBR R0 K2 R3
+ 0x80000000, // 0004 RET 0
})
)
);
@@ -2071,7 +738,7 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
********************************************************************/
be_local_closure(Matter_Commisioning_Context_parse_Pake3, /* name */
be_nested_proto(
- 16, /* nstack */
+ 20, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
@@ -2079,61 +746,274 @@ be_local_closure(Matter_Commisioning_Context_parse_Pake3, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[47]) { /* constants */
+ ( &(const bvalue[31]) { /* constants */
+ /* K0 */ be_nested_str_weak(crypto),
+ /* K1 */ be_nested_str_weak(session),
+ /* K2 */ be_nested_str_weak(opcode),
+ /* K3 */ be_nested_str_weak(local_session_id),
+ /* K4 */ be_const_int(0),
+ /* K5 */ be_nested_str_weak(protocol_id),
+ /* K6 */ be_nested_str_weak(tasmota),
+ /* K7 */ be_nested_str_weak(log),
+ /* K8 */ be_nested_str_weak(MTR_X3A_X20invalid_X20Pake3_X20message),
+ /* K9 */ be_const_int(2),
+ /* K10 */ be_nested_str_weak(MTR_X3A_X20StatusReport_X28General_X20Code_X3A_X20FAILURE_X2C_X20ProtocolId_X3A_X20SECURE_CHANNEL_X2C_X20ProtocolCode_X3A_X20INVALID_PARAMETER_X29),
+ /* K11 */ be_nested_str_weak(send_status_report),
+ /* K12 */ be_const_int(1),
+ /* K13 */ be_nested_str_weak(matter),
+ /* K14 */ be_nested_str_weak(Pake3),
+ /* K15 */ be_nested_str_weak(parse),
+ /* K16 */ be_nested_str_weak(raw),
+ /* K17 */ be_nested_str_weak(app_payload_idx),
+ /* K18 */ be_nested_str_weak(cA),
+ /* K19 */ be_nested_str_weak(__spake_cA),
+ /* K20 */ be_nested_str_weak(MTR_X3A_X20invalid_X20cA_X20received),
+ /* K21 */ be_nested_str_weak(rtc),
+ /* K22 */ be_nested_str_weak(utc),
+ /* K23 */ be_nested_str_weak(HKDF_SHA256),
+ /* K24 */ be_nested_str_weak(derive),
+ /* K25 */ be_nested_str_weak(__spake_Ke),
+ /* K26 */ be_nested_str_weak(fromstring),
+ /* K27 */ be_nested_str_weak(SEKeys_Info),
+ /* K28 */ be_nested_str_weak(add_session),
+ /* K29 */ be_nested_str_weak(__future_local_session_id),
+ /* K30 */ be_nested_str_weak(__future_initiator_session_id),
+ }),
+ be_str_weak(parse_Pake3),
+ &be_const_str_solidified,
+ ( &(const binstruction[106]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0x880C0301, // 0001 GETMBR R3 R1 K1
+ 0x88100302, // 0002 GETMBR R4 R1 K2
+ 0x54160023, // 0003 LDINT R5 36
+ 0x20100805, // 0004 NE R4 R4 R5
+ 0x74120005, // 0005 JMPT R4 #000C
+ 0x88100303, // 0006 GETMBR R4 R1 K3
+ 0x20100904, // 0007 NE R4 R4 K4
+ 0x74120002, // 0008 JMPT R4 #000C
+ 0x88100305, // 0009 GETMBR R4 R1 K5
+ 0x20100904, // 000A NE R4 R4 K4
+ 0x78120012, // 000B JMPF R4 #001F
+ 0xB8120C00, // 000C GETNGBL R4 K6
+ 0x8C100907, // 000D GETMET R4 R4 K7
+ 0x58180008, // 000E LDCONST R6 K8
+ 0x581C0009, // 000F LDCONST R7 K9
+ 0x7C100600, // 0010 CALL R4 3
+ 0xB8120C00, // 0011 GETNGBL R4 K6
+ 0x8C100907, // 0012 GETMET R4 R4 K7
+ 0x5818000A, // 0013 LDCONST R6 K10
+ 0x581C0009, // 0014 LDCONST R7 K9
+ 0x7C100600, // 0015 CALL R4 3
+ 0x8C10010B, // 0016 GETMET R4 R0 K11
+ 0x5C180200, // 0017 MOVE R6 R1
+ 0x581C000C, // 0018 LDCONST R7 K12
+ 0x58200004, // 0019 LDCONST R8 K4
+ 0x58240009, // 001A LDCONST R9 K9
+ 0x50280000, // 001B LDBOOL R10 0 0
+ 0x7C100C00, // 001C CALL R4 6
+ 0x50140000, // 001D LDBOOL R5 0 0
+ 0x80040A00, // 001E RET 1 R5
+ 0xB8121A00, // 001F GETNGBL R4 K13
+ 0x8C10090E, // 0020 GETMET R4 R4 K14
+ 0x7C100200, // 0021 CALL R4 1
+ 0x8C10090F, // 0022 GETMET R4 R4 K15
+ 0x88180310, // 0023 GETMBR R6 R1 K16
+ 0x881C0311, // 0024 GETMBR R7 R1 K17
+ 0x7C100600, // 0025 CALL R4 3
+ 0x88140912, // 0026 GETMBR R5 R4 K18
+ 0x88180713, // 0027 GETMBR R6 R3 K19
+ 0x20180A06, // 0028 NE R6 R5 R6
+ 0x781A0012, // 0029 JMPF R6 #003D
+ 0xB81A0C00, // 002A GETNGBL R6 K6
+ 0x8C180D07, // 002B GETMET R6 R6 K7
+ 0x58200014, // 002C LDCONST R8 K20
+ 0x58240009, // 002D LDCONST R9 K9
+ 0x7C180600, // 002E CALL R6 3
+ 0xB81A0C00, // 002F GETNGBL R6 K6
+ 0x8C180D07, // 0030 GETMET R6 R6 K7
+ 0x5820000A, // 0031 LDCONST R8 K10
+ 0x58240009, // 0032 LDCONST R9 K9
+ 0x7C180600, // 0033 CALL R6 3
+ 0x8C18010B, // 0034 GETMET R6 R0 K11
+ 0x5C200200, // 0035 MOVE R8 R1
+ 0x5824000C, // 0036 LDCONST R9 K12
+ 0x58280004, // 0037 LDCONST R10 K4
+ 0x582C0009, // 0038 LDCONST R11 K9
+ 0x50300000, // 0039 LDBOOL R12 0 0
+ 0x7C180C00, // 003A CALL R6 6
+ 0x501C0000, // 003B LDBOOL R7 0 0
+ 0x80040E00, // 003C RET 1 R7
+ 0xB81A0C00, // 003D GETNGBL R6 K6
+ 0x8C180D15, // 003E GETMET R6 R6 K21
+ 0x7C180200, // 003F CALL R6 1
+ 0x94180D16, // 0040 GETIDX R6 R6 K22
+ 0x8C1C0517, // 0041 GETMET R7 R2 K23
+ 0x7C1C0200, // 0042 CALL R7 1
+ 0x8C1C0F18, // 0043 GETMET R7 R7 K24
+ 0x88240719, // 0044 GETMBR R9 R3 K25
+ 0x60280015, // 0045 GETGBL R10 G21
+ 0x7C280000, // 0046 CALL R10 0
+ 0x602C0015, // 0047 GETGBL R11 G21
+ 0x7C2C0000, // 0048 CALL R11 0
+ 0x8C2C171A, // 0049 GETMET R11 R11 K26
+ 0x8834011B, // 004A GETMBR R13 R0 K27
+ 0x7C2C0400, // 004B CALL R11 2
+ 0x5432002F, // 004C LDINT R12 48
+ 0x7C1C0A00, // 004D CALL R7 5
+ 0x5422000E, // 004E LDINT R8 15
+ 0x40220808, // 004F CONNECT R8 K4 R8
+ 0x94200E08, // 0050 GETIDX R8 R7 R8
+ 0x5426000F, // 0051 LDINT R9 16
+ 0x542A001E, // 0052 LDINT R10 31
+ 0x4024120A, // 0053 CONNECT R9 R9 R10
+ 0x94240E09, // 0054 GETIDX R9 R7 R9
+ 0x542A001F, // 0055 LDINT R10 32
+ 0x542E002E, // 0056 LDINT R11 47
+ 0x4028140B, // 0057 CONNECT R10 R10 R11
+ 0x94280E0A, // 0058 GETIDX R10 R7 R10
+ 0x8C2C010B, // 0059 GETMET R11 R0 K11
+ 0x5C340200, // 005A MOVE R13 R1
+ 0x58380004, // 005B LDCONST R14 K4
+ 0x583C0004, // 005C LDCONST R15 K4
+ 0x58400004, // 005D LDCONST R16 K4
+ 0x50440000, // 005E LDBOOL R17 0 0
+ 0x7C2C0C00, // 005F CALL R11 6
+ 0x8C30011C, // 0060 GETMET R12 R0 K28
+ 0x8838071D, // 0061 GETMBR R14 R3 K29
+ 0x883C071E, // 0062 GETMBR R15 R3 K30
+ 0x5C401000, // 0063 MOVE R16 R8
+ 0x5C441200, // 0064 MOVE R17 R9
+ 0x5C481400, // 0065 MOVE R18 R10
+ 0x5C4C0C00, // 0066 MOVE R19 R6
+ 0x7C300E00, // 0067 CALL R12 7
+ 0x50300200, // 0068 LDBOOL R12 1 0
+ 0x80041800, // 0069 RET 1 R12
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: parse_Sigma3
+********************************************************************/
+be_local_closure(Matter_Commisioning_Context_parse_Sigma3, /* name */
+ be_nested_proto(
+ 36, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[99]) { /* constants */
/* K0 */ be_nested_str_weak(crypto),
/* K1 */ be_nested_str_weak(opcode),
/* K2 */ be_nested_str_weak(local_session_id),
/* K3 */ be_const_int(0),
/* K4 */ be_nested_str_weak(protocol_id),
- /* K5 */ be_nested_str_weak(protocol_error),
- /* K6 */ be_nested_str_weak(invalid_X20Pake3_X20message),
- /* K7 */ be_nested_str_weak(matter),
- /* K8 */ be_nested_str_weak(Pake3),
- /* K9 */ be_nested_str_weak(parse),
- /* K10 */ be_nested_str_weak(raw),
- /* K11 */ be_nested_str_weak(app_payload_idx),
- /* K12 */ be_nested_str_weak(cA),
- /* K13 */ be_nested_str_weak(tasmota),
- /* K14 */ be_nested_str_weak(log),
- /* K15 */ be_nested_str_weak(MTR_X3A_X20received_X20cA_X3D),
- /* K16 */ be_nested_str_weak(tohex),
- /* K17 */ be_const_int(3),
- /* K18 */ be_nested_str_weak(spake),
- /* K19 */ be_nested_str_weak(invalid_X20cA_X20received),
- /* K20 */ be_nested_str_weak(session_timestamp),
- /* K21 */ be_nested_str_weak(rtc),
- /* K22 */ be_nested_str_weak(utc),
- /* K23 */ be_nested_str_weak(HKDF_SHA256),
- /* K24 */ be_nested_str_weak(derive),
- /* K25 */ be_nested_str_weak(Ke),
- /* K26 */ be_nested_str_weak(fromstring),
- /* K27 */ be_nested_str_weak(SEKeys_Info),
- /* K28 */ be_nested_str_weak(I2RKey),
- /* K29 */ be_nested_str_weak(R2IKey),
- /* K30 */ be_nested_str_weak(AttestationChallenge),
- /* K31 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
- /* K32 */ be_nested_str_weak(MTR_X3A_X20session_keys_X3D),
- /* K33 */ be_nested_str_weak(MTR_X3A_X20I2RKey_X20_X20_X20_X20_X20_X20_X3D),
- /* K34 */ be_nested_str_weak(MTR_X3A_X20R2IKey_X20_X20_X20_X20_X20_X20_X3D),
- /* K35 */ be_nested_str_weak(MTR_X3A_X20AC_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K36 */ be_nested_str_weak(build_response),
- /* K37 */ be_nested_str_weak(add),
- /* K38 */ be_const_int(2),
- /* K39 */ be_nested_str_weak(encode),
- /* K40 */ be_nested_str_weak(responder),
- /* K41 */ be_nested_str_weak(send_response),
- /* K42 */ be_nested_str_weak(remote_ip),
- /* K43 */ be_nested_str_weak(remote_port),
- /* K44 */ be_nested_str_weak(add_session),
- /* K45 */ be_nested_str_weak(future_local_session_id),
- /* K46 */ be_nested_str_weak(future_initiator_session_id),
+ /* K5 */ be_nested_str_weak(tasmota),
+ /* K6 */ be_nested_str_weak(log),
+ /* K7 */ be_nested_str_weak(MTR_X3A_X20StatusReport_X28General_X20Code_X3A_X20FAILURE_X2C_X20ProtocolId_X3A_X20SECURE_CHANNEL_X2C_X20ProtocolCode_X3A_X20INVALID_PARAMETER_X29),
+ /* K8 */ be_const_int(2),
+ /* K9 */ be_nested_str_weak(send_status_report),
+ /* K10 */ be_const_int(1),
+ /* K11 */ be_nested_str_weak(session),
+ /* K12 */ be_nested_str_weak(matter),
+ /* K13 */ be_nested_str_weak(Sigma3),
+ /* K14 */ be_nested_str_weak(parse),
+ /* K15 */ be_nested_str_weak(raw),
+ /* K16 */ be_nested_str_weak(app_payload_idx),
+ /* K17 */ be_nested_str_weak(_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
+ /* K18 */ be_nested_str_weak(SHA256),
+ /* K19 */ be_nested_str_weak(update),
+ /* K20 */ be_nested_str_weak(__Msg1),
+ /* K21 */ be_nested_str_weak(__Msg2),
+ /* K22 */ be_nested_str_weak(out),
+ /* K23 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20session_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K24 */ be_nested_str_weak(MTR_X3A_X20_X20_X20_X2Eipk_epoch_key_X3D),
+ /* K25 */ be_nested_str_weak(get_ipk_epoch_key),
+ /* K26 */ be_nested_str_weak(MTR_X3A_X20_X20_X20_X2Efabric_compr_X20_X3D_X20),
+ /* K27 */ be_nested_str_weak(get_fabric_compressed),
+ /* K28 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20ipk_group_key_X20_X3D_X20),
+ /* K29 */ be_nested_str_weak(get_ipk_group_key),
+ /* K30 */ be_nested_str_weak(tohex),
+ /* K31 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TranscriptHash_X3D_X20),
+ /* K32 */ be_nested_str_weak(fromstring),
+ /* K33 */ be_nested_str_weak(S3K_Info),
+ /* K34 */ be_nested_str_weak(HKDF_SHA256),
+ /* K35 */ be_nested_str_weak(derive),
+ /* K36 */ be_nested_str_weak(shared_secret),
+ /* K37 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s3k_salt_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K38 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s3k_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K39 */ be_nested_str_weak(TBEData3Encrypted),
+ /* K40 */ be_const_int(2147483647),
+ /* K41 */ be_nested_str_weak(AES_CCM),
+ /* K42 */ be_nested_str_weak(TBEData3_Nonce),
+ /* K43 */ be_nested_str_weak(decrypt),
+ /* K44 */ be_nested_str_weak(tag),
+ /* K45 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TBEData3_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K46 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TBETag3_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K47 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20tag_sent_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K48 */ be_nested_str_weak(MTR_X3A_X20Tag_X20don_X27t_X20match),
+ /* K49 */ be_nested_str_weak(TLV),
+ /* K50 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TBEData3TLV_X20_X20_X20_X3D_X20),
+ /* K51 */ be_nested_str_weak(findsubval),
+ /* K52 */ be_const_int(3),
+ /* K53 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20initiatorNOC_X20_X20_X3D_X20),
+ /* K54 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20initiatorICAC_X20_X3D_X20),
+ /* K55 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20ec_signature_X20_X20_X3D_X20),
+ /* K56 */ be_nested_str_weak(MTR_X3A_X20initiatorNOCTLV_X20_X3D_X20),
+ /* K57 */ be_nested_str_weak(findsub),
+ /* K58 */ be_nested_str_weak(int),
+ /* K59 */ be_nested_str_weak(int64),
+ /* K60 */ be_nested_str_weak(peer_node_id),
+ /* K61 */ be_nested_str_weak(tobytes),
+ /* K62 */ be_nested_str_weak(MTR_X3A_X20initiatorFabricId_X3D),
+ /* K63 */ be_nested_str_weak(Matter_TLV_struct),
+ /* K64 */ be_nested_str_weak(add_TLV),
+ /* K65 */ be_nested_str_weak(B1),
+ /* K66 */ be_nested_str_weak(__initiator_pub),
+ /* K67 */ be_nested_str_weak(__responder_pub),
+ /* K68 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20sigma3_tbs_X20_X20_X20_X20_X3D_X20),
+ /* K69 */ be_nested_str_weak(tlv2raw),
+ /* K70 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20sigma3_tbs_raw_X3D_X20),
+ /* K71 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20initiatorNOCPubKey_X3D_X20),
+ /* K72 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20ec_signature_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K73 */ be_nested_str_weak(EC_P256),
+ /* K74 */ be_nested_str_weak(ecdsa_verify_sha256),
+ /* K75 */ be_nested_str_weak(MTR_X3A_X20sigma3_tbs_X20does_X20not_X20have_X20a_X20valid_X20signature),
+ /* K76 */ be_nested_str_weak(MTR_X3A_X20Sigma3_X20verified_X2C_X20computing_X20new_X20keys),
+ /* K77 */ be_nested_str_weak(Msg3),
+ /* K78 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20__Msg1_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K79 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20__Msg2_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K80 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20__Msg3_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K81 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TranscriptHash_X20_X20_X20_X20_X3D_X20),
+ /* K82 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
+ /* K83 */ be_nested_str_weak(MTR_X3A_X20shared_secret_X20_X3D),
+ /* K84 */ be_nested_str_weak(MTR_X3A_X20ipk_X20_X2B_X20hash_X20_X20_X20_X20_X3D),
+ /* K85 */ be_nested_str_weak(SEKeys_Info),
+ /* K86 */ be_nested_str_weak(rtc),
+ /* K87 */ be_nested_str_weak(utc),
+ /* K88 */ be_nested_str_weak(MTR_X3A_X20I2RKey_X20_X20_X20_X20_X20_X20_X3D),
+ /* K89 */ be_nested_str_weak(MTR_X3A_X20R2IKey_X20_X20_X20_X20_X20_X20_X3D),
+ /* K90 */ be_nested_str_weak(MTR_X3A_X20AC_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
+ /* K91 */ be_nested_str_weak(close),
+ /* K92 */ be_nested_str_weak(set_keys),
+ /* K93 */ be_nested_str_weak(_breadcrumb),
+ /* K94 */ be_nested_str_weak(counter_snd_next),
+ /* K95 */ be_nested_str_weak(set_persist),
+ /* K96 */ be_nested_str_weak(set_no_expiration),
+ /* K97 */ be_nested_str_weak(persist_to_fabric),
+ /* K98 */ be_nested_str_weak(save),
}),
- be_str_weak(parse_Pake3),
+ be_str_weak(parse_Sigma3),
&be_const_str_solidified,
- ( &(const binstruction[146]) { /* code */
+ ( &(const binstruction[558]) { /* code */
0xA40A0000, // 0000 IMPORT R2 K0
0x880C0301, // 0001 GETMBR R3 R1 K1
- 0x54120023, // 0002 LDINT R4 36
+ 0x54120031, // 0002 LDINT R4 50
0x200C0604, // 0003 NE R3 R3 R4
0x740E0005, // 0004 JMPT R3 #000B
0x880C0302, // 0005 GETMBR R3 R1 K2
@@ -2141,142 +1021,554 @@ be_local_closure(Matter_Commisioning_Context_parse_Pake3, /* name */
0x740E0002, // 0007 JMPT R3 #000B
0x880C0304, // 0008 GETMBR R3 R1 K4
0x200C0703, // 0009 NE R3 R3 K3
- 0x780E0000, // 000A JMPF R3 #000C
- 0xB0060B06, // 000B RAISE 1 K5 K6
- 0xB80E0E00, // 000C GETNGBL R3 K7
- 0x8C0C0708, // 000D GETMET R3 R3 K8
- 0x7C0C0200, // 000E CALL R3 1
- 0x8C0C0709, // 000F GETMET R3 R3 K9
- 0x8814030A, // 0010 GETMBR R5 R1 K10
- 0x8818030B, // 0011 GETMBR R6 R1 K11
- 0x7C0C0600, // 0012 CALL R3 3
- 0x8810070C, // 0013 GETMBR R4 R3 K12
- 0x90021804, // 0014 SETMBR R0 K12 R4
- 0xB8121A00, // 0015 GETNGBL R4 K13
- 0x8C10090E, // 0016 GETMET R4 R4 K14
- 0x8818010C, // 0017 GETMBR R6 R0 K12
- 0x8C180D10, // 0018 GETMET R6 R6 K16
- 0x7C180200, // 0019 CALL R6 1
- 0x001A1E06, // 001A ADD R6 K15 R6
- 0x581C0011, // 001B LDCONST R7 K17
- 0x7C100600, // 001C CALL R4 3
- 0x8810010C, // 001D GETMBR R4 R0 K12
- 0x88140112, // 001E GETMBR R5 R0 K18
- 0x88140B0C, // 001F GETMBR R5 R5 K12
- 0x20100805, // 0020 NE R4 R4 R5
- 0x78120000, // 0021 JMPF R4 #0023
- 0xB0060B13, // 0022 RAISE 1 K5 K19
- 0xB8121A00, // 0023 GETNGBL R4 K13
- 0x8C100915, // 0024 GETMET R4 R4 K21
- 0x7C100200, // 0025 CALL R4 1
- 0x94100916, // 0026 GETIDX R4 R4 K22
- 0x90022804, // 0027 SETMBR R0 K20 R4
- 0x8C100517, // 0028 GETMET R4 R2 K23
- 0x7C100200, // 0029 CALL R4 1
- 0x8C100918, // 002A GETMET R4 R4 K24
- 0x88180119, // 002B GETMBR R6 R0 K25
- 0x601C0015, // 002C GETGBL R7 G21
- 0x7C1C0000, // 002D CALL R7 0
- 0x60200015, // 002E GETGBL R8 G21
- 0x7C200000, // 002F CALL R8 0
- 0x8C20111A, // 0030 GETMET R8 R8 K26
- 0x8828011B, // 0031 GETMBR R10 R0 K27
- 0x7C200400, // 0032 CALL R8 2
- 0x5426002F, // 0033 LDINT R9 48
- 0x7C100A00, // 0034 CALL R4 5
- 0x5416000E, // 0035 LDINT R5 15
- 0x40160605, // 0036 CONNECT R5 K3 R5
- 0x94140805, // 0037 GETIDX R5 R4 R5
- 0x90023805, // 0038 SETMBR R0 K28 R5
- 0x5416000F, // 0039 LDINT R5 16
- 0x541A001E, // 003A LDINT R6 31
- 0x40140A06, // 003B CONNECT R5 R5 R6
- 0x94140805, // 003C GETIDX R5 R4 R5
- 0x90023A05, // 003D SETMBR R0 K29 R5
- 0x5416001F, // 003E LDINT R5 32
- 0x541A002E, // 003F LDINT R6 47
- 0x40140A06, // 0040 CONNECT R5 R5 R6
- 0x94140805, // 0041 GETIDX R5 R4 R5
- 0x90023C05, // 0042 SETMBR R0 K30 R5
- 0xB8161A00, // 0043 GETNGBL R5 K13
- 0x8C140B0E, // 0044 GETMET R5 R5 K14
- 0x581C001F, // 0045 LDCONST R7 K31
- 0x58200011, // 0046 LDCONST R8 K17
- 0x7C140600, // 0047 CALL R5 3
- 0xB8161A00, // 0048 GETNGBL R5 K13
- 0x8C140B0E, // 0049 GETMET R5 R5 K14
- 0x8C1C0910, // 004A GETMET R7 R4 K16
- 0x7C1C0200, // 004B CALL R7 1
- 0x001E4007, // 004C ADD R7 K32 R7
- 0x58200011, // 004D LDCONST R8 K17
- 0x7C140600, // 004E CALL R5 3
- 0xB8161A00, // 004F GETNGBL R5 K13
- 0x8C140B0E, // 0050 GETMET R5 R5 K14
- 0x881C011C, // 0051 GETMBR R7 R0 K28
- 0x8C1C0F10, // 0052 GETMET R7 R7 K16
- 0x7C1C0200, // 0053 CALL R7 1
- 0x001E4207, // 0054 ADD R7 K33 R7
- 0x58200011, // 0055 LDCONST R8 K17
- 0x7C140600, // 0056 CALL R5 3
- 0xB8161A00, // 0057 GETNGBL R5 K13
- 0x8C140B0E, // 0058 GETMET R5 R5 K14
- 0x881C011D, // 0059 GETMBR R7 R0 K29
- 0x8C1C0F10, // 005A GETMET R7 R7 K16
- 0x7C1C0200, // 005B CALL R7 1
- 0x001E4407, // 005C ADD R7 K34 R7
- 0x58200011, // 005D LDCONST R8 K17
- 0x7C140600, // 005E CALL R5 3
- 0xB8161A00, // 005F GETNGBL R5 K13
- 0x8C140B0E, // 0060 GETMET R5 R5 K14
- 0x881C011E, // 0061 GETMBR R7 R0 K30
- 0x8C1C0F10, // 0062 GETMET R7 R7 K16
- 0x7C1C0200, // 0063 CALL R7 1
- 0x001E4607, // 0064 ADD R7 K35 R7
- 0x58200011, // 0065 LDCONST R8 K17
- 0x7C140600, // 0066 CALL R5 3
- 0xB8161A00, // 0067 GETNGBL R5 K13
- 0x8C140B0E, // 0068 GETMET R5 R5 K14
- 0x581C001F, // 0069 LDCONST R7 K31
- 0x58200011, // 006A LDCONST R8 K17
- 0x7C140600, // 006B CALL R5 3
- 0x8C140324, // 006C GETMET R5 R1 K36
- 0x541E003F, // 006D LDINT R7 64
- 0x50200000, // 006E LDBOOL R8 0 0
- 0x7C140600, // 006F CALL R5 3
- 0x60180015, // 0070 GETGBL R6 G21
- 0x7C180000, // 0071 CALL R6 0
- 0x8C1C0D25, // 0072 GETMET R7 R6 K37
- 0x58240003, // 0073 LDCONST R9 K3
- 0x58280026, // 0074 LDCONST R10 K38
- 0x7C1C0600, // 0075 CALL R7 3
- 0x8C1C0D25, // 0076 GETMET R7 R6 K37
- 0x58240003, // 0077 LDCONST R9 K3
- 0x542A0003, // 0078 LDINT R10 4
- 0x7C1C0600, // 0079 CALL R7 3
- 0x8C1C0D25, // 007A GETMET R7 R6 K37
- 0x58240003, // 007B LDCONST R9 K3
- 0x542A0003, // 007C LDINT R10 4
- 0x7C1C0600, // 007D CALL R7 3
- 0x8C1C0B27, // 007E GETMET R7 R5 K39
- 0x5C240C00, // 007F MOVE R9 R6
- 0x7C1C0400, // 0080 CALL R7 2
- 0x88200128, // 0081 GETMBR R8 R0 K40
- 0x8C201129, // 0082 GETMET R8 R8 K41
- 0x5C280E00, // 0083 MOVE R10 R7
- 0x882C032A, // 0084 GETMBR R11 R1 K42
- 0x8830032B, // 0085 GETMBR R12 R1 K43
- 0x4C340000, // 0086 LDNIL R13
- 0x7C200A00, // 0087 CALL R8 5
- 0x88200128, // 0088 GETMBR R8 R0 K40
- 0x8C20112C, // 0089 GETMET R8 R8 K44
- 0x8828012D, // 008A GETMBR R10 R0 K45
- 0x882C012E, // 008B GETMBR R11 R0 K46
- 0x8830011C, // 008C GETMBR R12 R0 K28
- 0x8834011D, // 008D GETMBR R13 R0 K29
- 0x8838011E, // 008E GETMBR R14 R0 K30
- 0x883C0114, // 008F GETMBR R15 R0 K20
- 0x7C200E00, // 0090 CALL R8 7
- 0x80000000, // 0091 RET 0
+ 0x780E000D, // 000A JMPF R3 #0019
+ 0xB80E0A00, // 000B GETNGBL R3 K5
+ 0x8C0C0706, // 000C GETMET R3 R3 K6
+ 0x58140007, // 000D LDCONST R5 K7
+ 0x58180008, // 000E LDCONST R6 K8
+ 0x7C0C0600, // 000F CALL R3 3
+ 0x8C0C0109, // 0010 GETMET R3 R0 K9
+ 0x5C140200, // 0011 MOVE R5 R1
+ 0x5818000A, // 0012 LDCONST R6 K10
+ 0x581C0003, // 0013 LDCONST R7 K3
+ 0x58200008, // 0014 LDCONST R8 K8
+ 0x50240000, // 0015 LDBOOL R9 0 0
+ 0x7C0C0C00, // 0016 CALL R3 6
+ 0x50100000, // 0017 LDBOOL R4 0 0
+ 0x80040800, // 0018 RET 1 R4
+ 0x880C030B, // 0019 GETMBR R3 R1 K11
+ 0xB8121800, // 001A GETNGBL R4 K12
+ 0x8C10090D, // 001B GETMET R4 R4 K13
+ 0x7C100200, // 001C CALL R4 1
+ 0x8C10090E, // 001D GETMET R4 R4 K14
+ 0x8818030F, // 001E GETMBR R6 R1 K15
+ 0x881C0310, // 001F GETMBR R7 R1 K16
+ 0x7C100600, // 0020 CALL R4 3
+ 0xB8160A00, // 0021 GETNGBL R5 K5
+ 0x8C140B06, // 0022 GETMET R5 R5 K6
+ 0x581C0011, // 0023 LDCONST R7 K17
+ 0x54220003, // 0024 LDINT R8 4
+ 0x7C140600, // 0025 CALL R5 3
+ 0x8C140512, // 0026 GETMET R5 R2 K18
+ 0x7C140200, // 0027 CALL R5 1
+ 0x8C140B13, // 0028 GETMET R5 R5 K19
+ 0x881C0714, // 0029 GETMBR R7 R3 K20
+ 0x7C140400, // 002A CALL R5 2
+ 0x8C140B13, // 002B GETMET R5 R5 K19
+ 0x881C0715, // 002C GETMBR R7 R3 K21
+ 0x7C140400, // 002D CALL R5 2
+ 0x8C140B16, // 002E GETMET R5 R5 K22
+ 0x7C140200, // 002F CALL R5 1
+ 0xB81A0A00, // 0030 GETNGBL R6 K5
+ 0x8C180D06, // 0031 GETMET R6 R6 K6
+ 0x60200008, // 0032 GETGBL R8 G8
+ 0x5C240600, // 0033 MOVE R9 R3
+ 0x7C200200, // 0034 CALL R8 1
+ 0x00222E08, // 0035 ADD R8 K23 R8
+ 0x54260003, // 0036 LDINT R9 4
+ 0x7C180600, // 0037 CALL R6 3
+ 0xB81A0A00, // 0038 GETNGBL R6 K5
+ 0x8C180D06, // 0039 GETMET R6 R6 K6
+ 0x60200008, // 003A GETGBL R8 G8
+ 0x8C240719, // 003B GETMET R9 R3 K25
+ 0x7C240200, // 003C CALL R9 1
+ 0x7C200200, // 003D CALL R8 1
+ 0x00223008, // 003E ADD R8 K24 R8
+ 0x54260003, // 003F LDINT R9 4
+ 0x7C180600, // 0040 CALL R6 3
+ 0xB81A0A00, // 0041 GETNGBL R6 K5
+ 0x8C180D06, // 0042 GETMET R6 R6 K6
+ 0x60200008, // 0043 GETGBL R8 G8
+ 0x8C24071B, // 0044 GETMET R9 R3 K27
+ 0x7C240200, // 0045 CALL R9 1
+ 0x7C200200, // 0046 CALL R8 1
+ 0x00223408, // 0047 ADD R8 K26 R8
+ 0x54260003, // 0048 LDINT R9 4
+ 0x7C180600, // 0049 CALL R6 3
+ 0xB81A0A00, // 004A GETNGBL R6 K5
+ 0x8C180D06, // 004B GETMET R6 R6 K6
+ 0x8C20071D, // 004C GETMET R8 R3 K29
+ 0x7C200200, // 004D CALL R8 1
+ 0x8C20111E, // 004E GETMET R8 R8 K30
+ 0x7C200200, // 004F CALL R8 1
+ 0x00223808, // 0050 ADD R8 K28 R8
+ 0x54260003, // 0051 LDINT R9 4
+ 0x7C180600, // 0052 CALL R6 3
+ 0xB81A0A00, // 0053 GETNGBL R6 K5
+ 0x8C180D06, // 0054 GETMET R6 R6 K6
+ 0x8C200B1E, // 0055 GETMET R8 R5 K30
+ 0x7C200200, // 0056 CALL R8 1
+ 0x00223E08, // 0057 ADD R8 K31 R8
+ 0x54260003, // 0058 LDINT R9 4
+ 0x7C180600, // 0059 CALL R6 3
+ 0x60180015, // 005A GETGBL R6 G21
+ 0x7C180000, // 005B CALL R6 0
+ 0x8C180D20, // 005C GETMET R6 R6 K32
+ 0x88200121, // 005D GETMBR R8 R0 K33
+ 0x7C180400, // 005E CALL R6 2
+ 0x8C1C0522, // 005F GETMET R7 R2 K34
+ 0x7C1C0200, // 0060 CALL R7 1
+ 0x8C1C0F23, // 0061 GETMET R7 R7 K35
+ 0x88240724, // 0062 GETMBR R9 R3 K36
+ 0x8C28071D, // 0063 GETMET R10 R3 K29
+ 0x7C280200, // 0064 CALL R10 1
+ 0x00281405, // 0065 ADD R10 R10 R5
+ 0x5C2C0C00, // 0066 MOVE R11 R6
+ 0x5432000F, // 0067 LDINT R12 16
+ 0x7C1C0A00, // 0068 CALL R7 5
+ 0xB8220A00, // 0069 GETNGBL R8 K5
+ 0x8C201106, // 006A GETMET R8 R8 K6
+ 0x58280011, // 006B LDCONST R10 K17
+ 0x542E0003, // 006C LDINT R11 4
+ 0x7C200600, // 006D CALL R8 3
+ 0xB8220A00, // 006E GETNGBL R8 K5
+ 0x8C201106, // 006F GETMET R8 R8 K6
+ 0x8C28071D, // 0070 GETMET R10 R3 K29
+ 0x7C280200, // 0071 CALL R10 1
+ 0x00281405, // 0072 ADD R10 R10 R5
+ 0x8C28151E, // 0073 GETMET R10 R10 K30
+ 0x7C280200, // 0074 CALL R10 1
+ 0x002A4A0A, // 0075 ADD R10 K37 R10
+ 0x542E0003, // 0076 LDINT R11 4
+ 0x7C200600, // 0077 CALL R8 3
+ 0xB8220A00, // 0078 GETNGBL R8 K5
+ 0x8C201106, // 0079 GETMET R8 R8 K6
+ 0x8C280F1E, // 007A GETMET R10 R7 K30
+ 0x7C280200, // 007B CALL R10 1
+ 0x002A4C0A, // 007C ADD R10 K38 R10
+ 0x542E0003, // 007D LDINT R11 4
+ 0x7C200600, // 007E CALL R8 3
+ 0xB8220A00, // 007F GETNGBL R8 K5
+ 0x8C201106, // 0080 GETMET R8 R8 K6
+ 0x58280011, // 0081 LDCONST R10 K17
+ 0x542E0003, // 0082 LDINT R11 4
+ 0x7C200600, // 0083 CALL R8 3
+ 0x5421FFEE, // 0084 LDINT R8 -17
+ 0x40220608, // 0085 CONNECT R8 K3 R8
+ 0x88240927, // 0086 GETMBR R9 R4 K39
+ 0x94201208, // 0087 GETIDX R8 R9 R8
+ 0x5429FFEF, // 0088 LDINT R10 -16
+ 0x40281528, // 0089 CONNECT R10 R10 K40
+ 0x882C0927, // 008A GETMBR R11 R4 K39
+ 0x9424160A, // 008B GETIDX R9 R11 R10
+ 0x8C300529, // 008C GETMET R12 R2 K41
+ 0x5C380E00, // 008D MOVE R14 R7
+ 0x603C0015, // 008E GETGBL R15 G21
+ 0x7C3C0000, // 008F CALL R15 0
+ 0x8C3C1F20, // 0090 GETMET R15 R15 K32
+ 0x8844012A, // 0091 GETMBR R17 R0 K42
+ 0x7C3C0400, // 0092 CALL R15 2
+ 0x60400015, // 0093 GETGBL R16 G21
+ 0x7C400000, // 0094 CALL R16 0
+ 0x6044000C, // 0095 GETGBL R17 G12
+ 0x5C481000, // 0096 MOVE R18 R8
+ 0x7C440200, // 0097 CALL R17 1
+ 0x544A000F, // 0098 LDINT R18 16
+ 0x7C300C00, // 0099 CALL R12 6
+ 0x5C281800, // 009A MOVE R10 R12
+ 0x8C30152B, // 009B GETMET R12 R10 K43
+ 0x5C381000, // 009C MOVE R14 R8
+ 0x7C300400, // 009D CALL R12 2
+ 0x5C2C1800, // 009E MOVE R11 R12
+ 0x8C30152C, // 009F GETMET R12 R10 K44
+ 0x7C300200, // 00A0 CALL R12 1
+ 0xB8360A00, // 00A1 GETNGBL R13 K5
+ 0x8C341B06, // 00A2 GETMET R13 R13 K6
+ 0x8C3C171E, // 00A3 GETMET R15 R11 K30
+ 0x7C3C0200, // 00A4 CALL R15 1
+ 0x003E5A0F, // 00A5 ADD R15 K45 R15
+ 0x54420003, // 00A6 LDINT R16 4
+ 0x7C340600, // 00A7 CALL R13 3
+ 0xB8360A00, // 00A8 GETNGBL R13 K5
+ 0x8C341B06, // 00A9 GETMET R13 R13 K6
+ 0x8C3C191E, // 00AA GETMET R15 R12 K30
+ 0x7C3C0200, // 00AB CALL R15 1
+ 0x003E5C0F, // 00AC ADD R15 K46 R15
+ 0x54420003, // 00AD LDINT R16 4
+ 0x7C340600, // 00AE CALL R13 3
+ 0xB8360A00, // 00AF GETNGBL R13 K5
+ 0x8C341B06, // 00B0 GETMET R13 R13 K6
+ 0x8C3C131E, // 00B1 GETMET R15 R9 K30
+ 0x7C3C0200, // 00B2 CALL R15 1
+ 0x003E5E0F, // 00B3 ADD R15 K47 R15
+ 0x54420003, // 00B4 LDINT R16 4
+ 0x7C340600, // 00B5 CALL R13 3
+ 0xB8360A00, // 00B6 GETNGBL R13 K5
+ 0x8C341B06, // 00B7 GETMET R13 R13 K6
+ 0x583C0011, // 00B8 LDCONST R15 K17
+ 0x54420003, // 00B9 LDINT R16 4
+ 0x7C340600, // 00BA CALL R13 3
+ 0x20341809, // 00BB NE R13 R12 R9
+ 0x78360012, // 00BC JMPF R13 #00D0
+ 0xB8360A00, // 00BD GETNGBL R13 K5
+ 0x8C341B06, // 00BE GETMET R13 R13 K6
+ 0x583C0030, // 00BF LDCONST R15 K48
+ 0x58400008, // 00C0 LDCONST R16 K8
+ 0x7C340600, // 00C1 CALL R13 3
+ 0xB8360A00, // 00C2 GETNGBL R13 K5
+ 0x8C341B06, // 00C3 GETMET R13 R13 K6
+ 0x583C0007, // 00C4 LDCONST R15 K7
+ 0x58400008, // 00C5 LDCONST R16 K8
+ 0x7C340600, // 00C6 CALL R13 3
+ 0x8C340109, // 00C7 GETMET R13 R0 K9
+ 0x5C3C0200, // 00C8 MOVE R15 R1
+ 0x5840000A, // 00C9 LDCONST R16 K10
+ 0x58440003, // 00CA LDCONST R17 K3
+ 0x58480008, // 00CB LDCONST R18 K8
+ 0x504C0000, // 00CC LDBOOL R19 0 0
+ 0x7C340C00, // 00CD CALL R13 6
+ 0x50380000, // 00CE LDBOOL R14 0 0
+ 0x80041C00, // 00CF RET 1 R14
+ 0xB8361800, // 00D0 GETNGBL R13 K12
+ 0x88341B31, // 00D1 GETMBR R13 R13 K49
+ 0x8C341B0E, // 00D2 GETMET R13 R13 K14
+ 0x5C3C1600, // 00D3 MOVE R15 R11
+ 0x7C340400, // 00D4 CALL R13 2
+ 0xB83A0A00, // 00D5 GETNGBL R14 K5
+ 0x8C381D06, // 00D6 GETMET R14 R14 K6
+ 0x60400008, // 00D7 GETGBL R16 G8
+ 0x5C441A00, // 00D8 MOVE R17 R13
+ 0x7C400200, // 00D9 CALL R16 1
+ 0x00426410, // 00DA ADD R16 K50 R16
+ 0x54460003, // 00DB LDINT R17 4
+ 0x7C380600, // 00DC CALL R14 3
+ 0x8C381B33, // 00DD GETMET R14 R13 K51
+ 0x5840000A, // 00DE LDCONST R16 K10
+ 0x7C380400, // 00DF CALL R14 2
+ 0x8C3C1B33, // 00E0 GETMET R15 R13 K51
+ 0x58440008, // 00E1 LDCONST R17 K8
+ 0x7C3C0400, // 00E2 CALL R15 2
+ 0x8C401B33, // 00E3 GETMET R16 R13 K51
+ 0x58480034, // 00E4 LDCONST R18 K52
+ 0x7C400400, // 00E5 CALL R16 2
+ 0xB8460A00, // 00E6 GETNGBL R17 K5
+ 0x8C442306, // 00E7 GETMET R17 R17 K6
+ 0x604C0008, // 00E8 GETGBL R19 G8
+ 0x5C501C00, // 00E9 MOVE R20 R14
+ 0x7C4C0200, // 00EA CALL R19 1
+ 0x004E6A13, // 00EB ADD R19 K53 R19
+ 0x54520003, // 00EC LDINT R20 4
+ 0x7C440600, // 00ED CALL R17 3
+ 0xB8460A00, // 00EE GETNGBL R17 K5
+ 0x8C442306, // 00EF GETMET R17 R17 K6
+ 0x604C0008, // 00F0 GETGBL R19 G8
+ 0x5C501E00, // 00F1 MOVE R20 R15
+ 0x7C4C0200, // 00F2 CALL R19 1
+ 0x004E6C13, // 00F3 ADD R19 K54 R19
+ 0x54520003, // 00F4 LDINT R20 4
+ 0x7C440600, // 00F5 CALL R17 3
+ 0xB8460A00, // 00F6 GETNGBL R17 K5
+ 0x8C442306, // 00F7 GETMET R17 R17 K6
+ 0x604C0008, // 00F8 GETGBL R19 G8
+ 0x5C502000, // 00F9 MOVE R20 R16
+ 0x7C4C0200, // 00FA CALL R19 1
+ 0x004E6E13, // 00FB ADD R19 K55 R19
+ 0x54520003, // 00FC LDINT R20 4
+ 0x7C440600, // 00FD CALL R17 3
+ 0xB8461800, // 00FE GETNGBL R17 K12
+ 0x88442331, // 00FF GETMBR R17 R17 K49
+ 0x8C44230E, // 0100 GETMET R17 R17 K14
+ 0x5C4C1C00, // 0101 MOVE R19 R14
+ 0x7C440400, // 0102 CALL R17 2
+ 0xB84A0A00, // 0103 GETNGBL R18 K5
+ 0x8C482506, // 0104 GETMET R18 R18 K6
+ 0x60500008, // 0105 GETGBL R20 G8
+ 0x5C542200, // 0106 MOVE R21 R17
+ 0x7C500200, // 0107 CALL R20 1
+ 0x00527014, // 0108 ADD R20 K56 R20
+ 0x58540034, // 0109 LDCONST R21 K52
+ 0x7C480600, // 010A CALL R18 3
+ 0x8C482333, // 010B GETMET R18 R17 K51
+ 0x54520008, // 010C LDINT R20 9
+ 0x7C480400, // 010D CALL R18 2
+ 0x8C4C2339, // 010E GETMET R19 R17 K57
+ 0x54560005, // 010F LDINT R21 6
+ 0x7C4C0400, // 0110 CALL R19 2
+ 0x8C502733, // 0111 GETMET R20 R19 K51
+ 0x545A0010, // 0112 LDINT R22 17
+ 0x7C500400, // 0113 CALL R20 2
+ 0x60540004, // 0114 GETGBL R21 G4
+ 0x5C582800, // 0115 MOVE R22 R20
+ 0x7C540200, // 0116 CALL R21 1
+ 0x1C542B3A, // 0117 EQ R21 R21 K58
+ 0x78560003, // 0118 JMPF R21 #011D
+ 0xB8567600, // 0119 GETNGBL R21 K59
+ 0x5C582800, // 011A MOVE R22 R20
+ 0x7C540200, // 011B CALL R21 1
+ 0x5C502A00, // 011C MOVE R20 R21
+ 0x8C54293D, // 011D GETMET R21 R20 K61
+ 0x7C540200, // 011E CALL R21 1
+ 0x900E7815, // 011F SETMBR R3 K60 R21
+ 0xB8560A00, // 0120 GETNGBL R21 K5
+ 0x8C542B06, // 0121 GETMET R21 R21 K6
+ 0x605C0008, // 0122 GETGBL R23 G8
+ 0x8860073C, // 0123 GETMBR R24 R3 K60
+ 0x7C5C0200, // 0124 CALL R23 1
+ 0x005E7C17, // 0125 ADD R23 K62 R23
+ 0x58600034, // 0126 LDCONST R24 K52
+ 0x7C540600, // 0127 CALL R21 3
+ 0xB8561800, // 0128 GETNGBL R21 K12
+ 0x88542B31, // 0129 GETMBR R21 R21 K49
+ 0x8C542B3F, // 012A GETMET R21 R21 K63
+ 0x7C540200, // 012B CALL R21 1
+ 0x8C582B40, // 012C GETMET R22 R21 K64
+ 0x5860000A, // 012D LDCONST R24 K10
+ 0xB8661800, // 012E GETNGBL R25 K12
+ 0x88643331, // 012F GETMBR R25 R25 K49
+ 0x88643341, // 0130 GETMBR R25 R25 K65
+ 0x5C681C00, // 0131 MOVE R26 R14
+ 0x7C580800, // 0132 CALL R22 4
+ 0x8C582B40, // 0133 GETMET R22 R21 K64
+ 0x58600008, // 0134 LDCONST R24 K8
+ 0xB8661800, // 0135 GETNGBL R25 K12
+ 0x88643331, // 0136 GETMBR R25 R25 K49
+ 0x88643341, // 0137 GETMBR R25 R25 K65
+ 0x5C681E00, // 0138 MOVE R26 R15
+ 0x7C580800, // 0139 CALL R22 4
+ 0x8C582B40, // 013A GETMET R22 R21 K64
+ 0x58600034, // 013B LDCONST R24 K52
+ 0xB8661800, // 013C GETNGBL R25 K12
+ 0x88643331, // 013D GETMBR R25 R25 K49
+ 0x88643341, // 013E GETMBR R25 R25 K65
+ 0x88680742, // 013F GETMBR R26 R3 K66
+ 0x7C580800, // 0140 CALL R22 4
+ 0x8C582B40, // 0141 GETMET R22 R21 K64
+ 0x54620003, // 0142 LDINT R24 4
+ 0xB8661800, // 0143 GETNGBL R25 K12
+ 0x88643331, // 0144 GETMBR R25 R25 K49
+ 0x88643341, // 0145 GETMBR R25 R25 K65
+ 0x88680743, // 0146 GETMBR R26 R3 K67
+ 0x7C580800, // 0147 CALL R22 4
+ 0xB85A0A00, // 0148 GETNGBL R22 K5
+ 0x8C582D06, // 0149 GETMET R22 R22 K6
+ 0x60600008, // 014A GETGBL R24 G8
+ 0x5C642A00, // 014B MOVE R25 R21
+ 0x7C600200, // 014C CALL R24 1
+ 0x00628818, // 014D ADD R24 K68 R24
+ 0x54660003, // 014E LDINT R25 4
+ 0x7C580600, // 014F CALL R22 3
+ 0x8C582B45, // 0150 GETMET R22 R21 K69
+ 0x7C580200, // 0151 CALL R22 1
+ 0xB85E0A00, // 0152 GETNGBL R23 K5
+ 0x8C5C2F06, // 0153 GETMET R23 R23 K6
+ 0x8C642D1E, // 0154 GETMET R25 R22 K30
+ 0x7C640200, // 0155 CALL R25 1
+ 0x00668C19, // 0156 ADD R25 K70 R25
+ 0x546A0003, // 0157 LDINT R26 4
+ 0x7C5C0600, // 0158 CALL R23 3
+ 0xB85E0A00, // 0159 GETNGBL R23 K5
+ 0x8C5C2F06, // 015A GETMET R23 R23 K6
+ 0x8C64251E, // 015B GETMET R25 R18 K30
+ 0x7C640200, // 015C CALL R25 1
+ 0x00668E19, // 015D ADD R25 K71 R25
+ 0x546A0003, // 015E LDINT R26 4
+ 0x7C5C0600, // 015F CALL R23 3
+ 0xB85E0A00, // 0160 GETNGBL R23 K5
+ 0x8C5C2F06, // 0161 GETMET R23 R23 K6
+ 0x8C64211E, // 0162 GETMET R25 R16 K30
+ 0x7C640200, // 0163 CALL R25 1
+ 0x00669019, // 0164 ADD R25 K72 R25
+ 0x546A0003, // 0165 LDINT R26 4
+ 0x7C5C0600, // 0166 CALL R23 3
+ 0xB85E0A00, // 0167 GETNGBL R23 K5
+ 0x8C5C2F06, // 0168 GETMET R23 R23 K6
+ 0x58640011, // 0169 LDCONST R25 K17
+ 0x546A0003, // 016A LDINT R26 4
+ 0x7C5C0600, // 016B CALL R23 3
+ 0x8C5C0549, // 016C GETMET R23 R2 K73
+ 0x7C5C0200, // 016D CALL R23 1
+ 0x8C5C2F4A, // 016E GETMET R23 R23 K74
+ 0x5C642400, // 016F MOVE R25 R18
+ 0x5C682C00, // 0170 MOVE R26 R22
+ 0x5C6C2000, // 0171 MOVE R27 R16
+ 0x7C5C0800, // 0172 CALL R23 4
+ 0x5C602E00, // 0173 MOVE R24 R23
+ 0x74620012, // 0174 JMPT R24 #0188
+ 0xB8620A00, // 0175 GETNGBL R24 K5
+ 0x8C603106, // 0176 GETMET R24 R24 K6
+ 0x5868004B, // 0177 LDCONST R26 K75
+ 0x586C0008, // 0178 LDCONST R27 K8
+ 0x7C600600, // 0179 CALL R24 3
+ 0xB8620A00, // 017A GETNGBL R24 K5
+ 0x8C603106, // 017B GETMET R24 R24 K6
+ 0x58680007, // 017C LDCONST R26 K7
+ 0x586C0008, // 017D LDCONST R27 K8
+ 0x7C600600, // 017E CALL R24 3
+ 0x8C600109, // 017F GETMET R24 R0 K9
+ 0x5C680200, // 0180 MOVE R26 R1
+ 0x586C000A, // 0181 LDCONST R27 K10
+ 0x58700003, // 0182 LDCONST R28 K3
+ 0x58740008, // 0183 LDCONST R29 K8
+ 0x50780000, // 0184 LDBOOL R30 0 0
+ 0x7C600C00, // 0185 CALL R24 6
+ 0x50640000, // 0186 LDBOOL R25 0 0
+ 0x80043200, // 0187 RET 1 R25
+ 0xB8620A00, // 0188 GETNGBL R24 K5
+ 0x8C603106, // 0189 GETMET R24 R24 K6
+ 0x5868004C, // 018A LDCONST R26 K76
+ 0x586C0034, // 018B LDCONST R27 K52
+ 0x7C600600, // 018C CALL R24 3
+ 0x8C600512, // 018D GETMET R24 R2 K18
+ 0x7C600200, // 018E CALL R24 1
+ 0x8C603113, // 018F GETMET R24 R24 K19
+ 0x88680714, // 0190 GETMBR R26 R3 K20
+ 0x7C600400, // 0191 CALL R24 2
+ 0x8C603113, // 0192 GETMET R24 R24 K19
+ 0x88680715, // 0193 GETMBR R26 R3 K21
+ 0x7C600400, // 0194 CALL R24 2
+ 0x8C603113, // 0195 GETMET R24 R24 K19
+ 0x8868094D, // 0196 GETMBR R26 R4 K77
+ 0x7C600400, // 0197 CALL R24 2
+ 0x8C603116, // 0198 GETMET R24 R24 K22
+ 0x7C600200, // 0199 CALL R24 1
+ 0x5C143000, // 019A MOVE R5 R24
+ 0xB8620A00, // 019B GETNGBL R24 K5
+ 0x8C603106, // 019C GETMET R24 R24 K6
+ 0x88680714, // 019D GETMBR R26 R3 K20
+ 0x8C68351E, // 019E GETMET R26 R26 K30
+ 0x7C680200, // 019F CALL R26 1
+ 0x006A9C1A, // 01A0 ADD R26 K78 R26
+ 0x546E0003, // 01A1 LDINT R27 4
+ 0x7C600600, // 01A2 CALL R24 3
+ 0xB8620A00, // 01A3 GETNGBL R24 K5
+ 0x8C603106, // 01A4 GETMET R24 R24 K6
+ 0x88680715, // 01A5 GETMBR R26 R3 K21
+ 0x8C68351E, // 01A6 GETMET R26 R26 K30
+ 0x7C680200, // 01A7 CALL R26 1
+ 0x006A9E1A, // 01A8 ADD R26 K79 R26
+ 0x546E0003, // 01A9 LDINT R27 4
+ 0x7C600600, // 01AA CALL R24 3
+ 0xB8620A00, // 01AB GETNGBL R24 K5
+ 0x8C603106, // 01AC GETMET R24 R24 K6
+ 0x8868094D, // 01AD GETMBR R26 R4 K77
+ 0x8C68351E, // 01AE GETMET R26 R26 K30
+ 0x7C680200, // 01AF CALL R26 1
+ 0x006AA01A, // 01B0 ADD R26 K80 R26
+ 0x546E0003, // 01B1 LDINT R27 4
+ 0x7C600600, // 01B2 CALL R24 3
+ 0xB8620A00, // 01B3 GETNGBL R24 K5
+ 0x8C603106, // 01B4 GETMET R24 R24 K6
+ 0x8C680B1E, // 01B5 GETMET R26 R5 K30
+ 0x7C680200, // 01B6 CALL R26 1
+ 0x006AA21A, // 01B7 ADD R26 K81 R26
+ 0x546E0003, // 01B8 LDINT R27 4
+ 0x7C600600, // 01B9 CALL R24 3
+ 0x4C600000, // 01BA LDNIL R24
+ 0x900E2818, // 01BB SETMBR R3 K20 R24
+ 0x4C600000, // 01BC LDNIL R24
+ 0x900E2A18, // 01BD SETMBR R3 K21 R24
+ 0xB8620A00, // 01BE GETNGBL R24 K5
+ 0x8C603106, // 01BF GETMET R24 R24 K6
+ 0x58680052, // 01C0 LDCONST R26 K82
+ 0x546E0003, // 01C1 LDINT R27 4
+ 0x7C600600, // 01C2 CALL R24 3
+ 0xB8620A00, // 01C3 GETNGBL R24 K5
+ 0x8C603106, // 01C4 GETMET R24 R24 K6
+ 0x88680724, // 01C5 GETMBR R26 R3 K36
+ 0x8C68351E, // 01C6 GETMET R26 R26 K30
+ 0x7C680200, // 01C7 CALL R26 1
+ 0x006AA61A, // 01C8 ADD R26 K83 R26
+ 0x546E0003, // 01C9 LDINT R27 4
+ 0x7C600600, // 01CA CALL R24 3
+ 0xB8620A00, // 01CB GETNGBL R24 K5
+ 0x8C603106, // 01CC GETMET R24 R24 K6
+ 0x8C68071D, // 01CD GETMET R26 R3 K29
+ 0x7C680200, // 01CE CALL R26 1
+ 0x00683405, // 01CF ADD R26 R26 R5
+ 0x8C68351E, // 01D0 GETMET R26 R26 K30
+ 0x7C680200, // 01D1 CALL R26 1
+ 0x006AA81A, // 01D2 ADD R26 K84 R26
+ 0x546E0003, // 01D3 LDINT R27 4
+ 0x7C600600, // 01D4 CALL R24 3
+ 0x8C600522, // 01D5 GETMET R24 R2 K34
+ 0x7C600200, // 01D6 CALL R24 1
+ 0x8C603123, // 01D7 GETMET R24 R24 K35
+ 0x88680724, // 01D8 GETMBR R26 R3 K36
+ 0x8C6C071D, // 01D9 GETMET R27 R3 K29
+ 0x7C6C0200, // 01DA CALL R27 1
+ 0x006C3605, // 01DB ADD R27 R27 R5
+ 0x60700015, // 01DC GETGBL R28 G21
+ 0x7C700000, // 01DD CALL R28 0
+ 0x8C703920, // 01DE GETMET R28 R28 K32
+ 0x88780155, // 01DF GETMBR R30 R0 K85
+ 0x7C700400, // 01E0 CALL R28 2
+ 0x5476002F, // 01E1 LDINT R29 48
+ 0x7C600A00, // 01E2 CALL R24 5
+ 0x5466000E, // 01E3 LDINT R25 15
+ 0x40660619, // 01E4 CONNECT R25 K3 R25
+ 0x94643019, // 01E5 GETIDX R25 R24 R25
+ 0x546A000F, // 01E6 LDINT R26 16
+ 0x546E001E, // 01E7 LDINT R27 31
+ 0x4068341B, // 01E8 CONNECT R26 R26 R27
+ 0x9468301A, // 01E9 GETIDX R26 R24 R26
+ 0x546E001F, // 01EA LDINT R27 32
+ 0x5472002E, // 01EB LDINT R28 47
+ 0x406C361C, // 01EC CONNECT R27 R27 R28
+ 0x946C301B, // 01ED GETIDX R27 R24 R27
+ 0xB8720A00, // 01EE GETNGBL R28 K5
+ 0x8C703956, // 01EF GETMET R28 R28 K86
+ 0x7C700200, // 01F0 CALL R28 1
+ 0x94703957, // 01F1 GETIDX R28 R28 K87
+ 0xB8760A00, // 01F2 GETNGBL R29 K5
+ 0x8C743B06, // 01F3 GETMET R29 R29 K6
+ 0x587C0052, // 01F4 LDCONST R31 K82
+ 0x54820003, // 01F5 LDINT R32 4
+ 0x7C740600, // 01F6 CALL R29 3
+ 0xB8760A00, // 01F7 GETNGBL R29 K5
+ 0x8C743B06, // 01F8 GETMET R29 R29 K6
+ 0x8C7C331E, // 01F9 GETMET R31 R25 K30
+ 0x7C7C0200, // 01FA CALL R31 1
+ 0x007EB01F, // 01FB ADD R31 K88 R31
+ 0x54820003, // 01FC LDINT R32 4
+ 0x7C740600, // 01FD CALL R29 3
+ 0xB8760A00, // 01FE GETNGBL R29 K5
+ 0x8C743B06, // 01FF GETMET R29 R29 K6
+ 0x8C7C351E, // 0200 GETMET R31 R26 K30
+ 0x7C7C0200, // 0201 CALL R31 1
+ 0x007EB21F, // 0202 ADD R31 K89 R31
+ 0x54820003, // 0203 LDINT R32 4
+ 0x7C740600, // 0204 CALL R29 3
+ 0xB8760A00, // 0205 GETNGBL R29 K5
+ 0x8C743B06, // 0206 GETMET R29 R29 K6
+ 0x8C7C371E, // 0207 GETMET R31 R27 K30
+ 0x7C7C0200, // 0208 CALL R31 1
+ 0x007EB41F, // 0209 ADD R31 K90 R31
+ 0x54820003, // 020A LDINT R32 4
+ 0x7C740600, // 020B CALL R29 3
+ 0xB8760A00, // 020C GETNGBL R29 K5
+ 0x8C743B06, // 020D GETMET R29 R29 K6
+ 0x587C0052, // 020E LDCONST R31 K82
+ 0x54820003, // 020F LDINT R32 4
+ 0x7C740600, // 0210 CALL R29 3
+ 0x8C740109, // 0211 GETMET R29 R0 K9
+ 0x5C7C0200, // 0212 MOVE R31 R1
+ 0x58800003, // 0213 LDCONST R32 K3
+ 0x58840003, // 0214 LDCONST R33 K3
+ 0x58880003, // 0215 LDCONST R34 K3
+ 0x508C0200, // 0216 LDBOOL R35 1 0
+ 0x7C740C00, // 0217 CALL R29 6
+ 0x8C78075B, // 0218 GETMET R30 R3 K91
+ 0x7C780200, // 0219 CALL R30 1
+ 0x8C78075C, // 021A GETMET R30 R3 K92
+ 0x5C803200, // 021B MOVE R32 R25
+ 0x5C843400, // 021C MOVE R33 R26
+ 0x5C883600, // 021D MOVE R34 R27
+ 0x5C8C3800, // 021E MOVE R35 R28
+ 0x7C780A00, // 021F CALL R30 5
+ 0x900EBB03, // 0220 SETMBR R3 K93 K3
+ 0x8C78075E, // 0221 GETMET R30 R3 K94
+ 0x7C780200, // 0222 CALL R30 1
+ 0x8C78075F, // 0223 GETMET R30 R3 K95
+ 0x50800200, // 0224 LDBOOL R32 1 0
+ 0x7C780400, // 0225 CALL R30 2
+ 0x8C780760, // 0226 GETMET R30 R3 K96
+ 0x7C780200, // 0227 CALL R30 1
+ 0x8C780761, // 0228 GETMET R30 R3 K97
+ 0x7C780200, // 0229 CALL R30 1
+ 0x8C780762, // 022A GETMET R30 R3 K98
+ 0x7C780200, // 022B CALL R30 1
+ 0x50780200, // 022C LDBOOL R30 1 0
+ 0x80043C00, // 022D RET 1 R30
})
)
);
@@ -2288,7 +1580,7 @@ be_local_closure(Matter_Commisioning_Context_parse_Pake3, /* name */
********************************************************************/
be_local_closure(Matter_Commisioning_Context_process_incoming, /* name */
be_nested_proto(
- 7, /* nstack */
+ 9, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
@@ -2296,90 +1588,1092 @@ be_local_closure(Matter_Commisioning_Context_process_incoming, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[15]) { /* constants */
- /* K0 */ be_nested_str_weak(window_open),
- /* K1 */ be_nested_str_weak(tasmota),
- /* K2 */ be_nested_str_weak(log),
- /* K3 */ be_nested_str_weak(MTR_X3A_X20commissioning_X20not_X20open),
- /* K4 */ be_const_int(2),
- /* K5 */ be_nested_str_weak(MTR_X3A_X20received_X20message_X20),
- /* K6 */ be_nested_str_weak(matter),
- /* K7 */ be_nested_str_weak(inspect),
- /* K8 */ be_const_int(3),
- /* K9 */ be_nested_str_weak(opcode),
- /* K10 */ be_nested_str_weak(parse_PBKDFParamRequest),
- /* K11 */ be_nested_str_weak(parse_Pake1),
- /* K12 */ be_nested_str_weak(parse_Pake3),
- /* K13 */ be_nested_str_weak(parse_Sigma1),
- /* K14 */ be_nested_str_weak(parse_Sigma3),
+ ( &(const bvalue[20]) { /* constants */
+ /* K0 */ be_nested_str_weak(device),
+ /* K1 */ be_nested_str_weak(is_commissioning_open),
+ /* K2 */ be_nested_str_weak(opcode),
+ /* K3 */ be_nested_str_weak(tasmota),
+ /* K4 */ be_nested_str_weak(log),
+ /* K5 */ be_nested_str_weak(MTR_X3A_X20commissioning_X20not_X20open),
+ /* K6 */ be_const_int(2),
+ /* K7 */ be_nested_str_weak(MTR_X3A_X20received_X20message_X20),
+ /* K8 */ be_nested_str_weak(matter),
+ /* K9 */ be_nested_str_weak(inspect),
+ /* K10 */ be_const_int(3),
+ /* K11 */ be_nested_str_weak(parse_PBKDFParamRequest),
+ /* K12 */ be_nested_str_weak(parse_Pake1),
+ /* K13 */ be_nested_str_weak(parse_Pake3),
+ /* K14 */ be_nested_str_weak(parse_Sigma1),
+ /* K15 */ be_nested_str_weak(parse_Sigma3),
+ /* K16 */ be_nested_str_weak(parse_StatusReport),
+ /* K17 */ be_nested_str_weak(string),
+ /* K18 */ be_nested_str_weak(format),
+ /* K19 */ be_nested_str_weak(MTR_X3A_X20_X3E_X3F_X3F_X3F_X3F_X3F_X3F_X3F_X3F_X3F_X20Unknown_X20OpCode_X20_X28secure_X20channel_X29_X20_X2502X),
}),
be_str_weak(process_incoming),
&be_const_str_solidified,
- ( &(const binstruction[64]) { /* code */
+ ( &(const binstruction[100]) { /* code */
0x88080100, // 0000 GETMBR R2 R0 K0
- 0x740A0006, // 0001 JMPT R2 #0009
- 0xB80A0200, // 0002 GETNGBL R2 K1
- 0x8C080502, // 0003 GETMET R2 R2 K2
- 0x58100003, // 0004 LDCONST R4 K3
- 0x58140004, // 0005 LDCONST R5 K4
- 0x7C080600, // 0006 CALL R2 3
- 0x50080000, // 0007 LDBOOL R2 0 0
- 0x80040400, // 0008 RET 1 R2
- 0xB80A0200, // 0009 GETNGBL R2 K1
- 0x8C080502, // 000A GETMET R2 R2 K2
- 0xB8120C00, // 000B GETNGBL R4 K6
- 0x8C100907, // 000C GETMET R4 R4 K7
- 0x5C180200, // 000D MOVE R6 R1
- 0x7C100400, // 000E CALL R4 2
- 0x00120A04, // 000F ADD R4 K5 R4
- 0x58140008, // 0010 LDCONST R5 K8
- 0x7C080600, // 0011 CALL R2 3
- 0x88080309, // 0012 GETMBR R2 R1 K9
- 0x540E001F, // 0013 LDINT R3 32
- 0x1C080403, // 0014 EQ R2 R2 R3
- 0x780A0004, // 0015 JMPF R2 #001B
- 0x8C08010A, // 0016 GETMET R2 R0 K10
- 0x5C100200, // 0017 MOVE R4 R1
- 0x7C080400, // 0018 CALL R2 2
- 0x80040400, // 0019 RET 1 R2
- 0x70020022, // 001A JMP #003E
- 0x88080309, // 001B GETMBR R2 R1 K9
- 0x540E0021, // 001C LDINT R3 34
- 0x1C080403, // 001D EQ R2 R2 R3
- 0x780A0004, // 001E JMPF R2 #0024
- 0x8C08010B, // 001F GETMET R2 R0 K11
- 0x5C100200, // 0020 MOVE R4 R1
- 0x7C080400, // 0021 CALL R2 2
- 0x80040400, // 0022 RET 1 R2
- 0x70020019, // 0023 JMP #003E
- 0x88080309, // 0024 GETMBR R2 R1 K9
- 0x540E0023, // 0025 LDINT R3 36
- 0x1C080403, // 0026 EQ R2 R2 R3
- 0x780A0004, // 0027 JMPF R2 #002D
- 0x8C08010C, // 0028 GETMET R2 R0 K12
- 0x5C100200, // 0029 MOVE R4 R1
- 0x7C080400, // 002A CALL R2 2
- 0x80040400, // 002B RET 1 R2
- 0x70020010, // 002C JMP #003E
- 0x88080309, // 002D GETMBR R2 R1 K9
- 0x540E002F, // 002E LDINT R3 48
- 0x1C080403, // 002F EQ R2 R2 R3
- 0x780A0004, // 0030 JMPF R2 #0036
- 0x8C08010D, // 0031 GETMET R2 R0 K13
- 0x5C100200, // 0032 MOVE R4 R1
- 0x7C080400, // 0033 CALL R2 2
- 0x80040400, // 0034 RET 1 R2
- 0x70020007, // 0035 JMP #003E
- 0x88080309, // 0036 GETMBR R2 R1 K9
- 0x540E0031, // 0037 LDINT R3 50
- 0x1C080403, // 0038 EQ R2 R2 R3
- 0x780A0003, // 0039 JMPF R2 #003E
- 0x8C08010E, // 003A GETMET R2 R0 K14
- 0x5C100200, // 003B MOVE R4 R1
- 0x7C080400, // 003C CALL R2 2
- 0x80040400, // 003D RET 1 R2
- 0x50080000, // 003E LDBOOL R2 0 0
- 0x80040400, // 003F RET 1 R2
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x7C080200, // 0002 CALL R2 1
+ 0x740A000E, // 0003 JMPT R2 #0013
+ 0x88080302, // 0004 GETMBR R2 R1 K2
+ 0x540E001F, // 0005 LDINT R3 32
+ 0x28080403, // 0006 GE R2 R2 R3
+ 0x780A000A, // 0007 JMPF R2 #0013
+ 0x88080302, // 0008 GETMBR R2 R1 K2
+ 0x540E0023, // 0009 LDINT R3 36
+ 0x18080403, // 000A LE R2 R2 R3
+ 0x780A0006, // 000B JMPF R2 #0013
+ 0xB80A0600, // 000C GETNGBL R2 K3
+ 0x8C080504, // 000D GETMET R2 R2 K4
+ 0x58100005, // 000E LDCONST R4 K5
+ 0x58140006, // 000F LDCONST R5 K6
+ 0x7C080600, // 0010 CALL R2 3
+ 0x50080000, // 0011 LDBOOL R2 0 0
+ 0x80040400, // 0012 RET 1 R2
+ 0xB80A0600, // 0013 GETNGBL R2 K3
+ 0x8C080504, // 0014 GETMET R2 R2 K4
+ 0xB8121000, // 0015 GETNGBL R4 K8
+ 0x8C100909, // 0016 GETMET R4 R4 K9
+ 0x5C180200, // 0017 MOVE R6 R1
+ 0x7C100400, // 0018 CALL R4 2
+ 0x00120E04, // 0019 ADD R4 K7 R4
+ 0x5814000A, // 001A LDCONST R5 K10
+ 0x7C080600, // 001B CALL R2 3
+ 0x88080302, // 001C GETMBR R2 R1 K2
+ 0x540E000F, // 001D LDINT R3 16
+ 0x1C080403, // 001E EQ R2 R2 R3
+ 0x780A0000, // 001F JMPF R2 #0021
+ 0x70020040, // 0020 JMP #0062
+ 0x88080302, // 0021 GETMBR R2 R1 K2
+ 0x540E001F, // 0022 LDINT R3 32
+ 0x1C080403, // 0023 EQ R2 R2 R3
+ 0x780A0004, // 0024 JMPF R2 #002A
+ 0x8C08010B, // 0025 GETMET R2 R0 K11
+ 0x5C100200, // 0026 MOVE R4 R1
+ 0x7C080400, // 0027 CALL R2 2
+ 0x80040400, // 0028 RET 1 R2
+ 0x70020037, // 0029 JMP #0062
+ 0x88080302, // 002A GETMBR R2 R1 K2
+ 0x540E0021, // 002B LDINT R3 34
+ 0x1C080403, // 002C EQ R2 R2 R3
+ 0x780A0004, // 002D JMPF R2 #0033
+ 0x8C08010C, // 002E GETMET R2 R0 K12
+ 0x5C100200, // 002F MOVE R4 R1
+ 0x7C080400, // 0030 CALL R2 2
+ 0x80040400, // 0031 RET 1 R2
+ 0x7002002E, // 0032 JMP #0062
+ 0x88080302, // 0033 GETMBR R2 R1 K2
+ 0x540E0023, // 0034 LDINT R3 36
+ 0x1C080403, // 0035 EQ R2 R2 R3
+ 0x780A0004, // 0036 JMPF R2 #003C
+ 0x8C08010D, // 0037 GETMET R2 R0 K13
+ 0x5C100200, // 0038 MOVE R4 R1
+ 0x7C080400, // 0039 CALL R2 2
+ 0x80040400, // 003A RET 1 R2
+ 0x70020025, // 003B JMP #0062
+ 0x88080302, // 003C GETMBR R2 R1 K2
+ 0x540E002F, // 003D LDINT R3 48
+ 0x1C080403, // 003E EQ R2 R2 R3
+ 0x780A0004, // 003F JMPF R2 #0045
+ 0x8C08010E, // 0040 GETMET R2 R0 K14
+ 0x5C100200, // 0041 MOVE R4 R1
+ 0x7C080400, // 0042 CALL R2 2
+ 0x80040400, // 0043 RET 1 R2
+ 0x7002001C, // 0044 JMP #0062
+ 0x88080302, // 0045 GETMBR R2 R1 K2
+ 0x540E0031, // 0046 LDINT R3 50
+ 0x1C080403, // 0047 EQ R2 R2 R3
+ 0x780A0004, // 0048 JMPF R2 #004E
+ 0x8C08010F, // 0049 GETMET R2 R0 K15
+ 0x5C100200, // 004A MOVE R4 R1
+ 0x7C080400, // 004B CALL R2 2
+ 0x80040400, // 004C RET 1 R2
+ 0x70020013, // 004D JMP #0062
+ 0x88080302, // 004E GETMBR R2 R1 K2
+ 0x540E003F, // 004F LDINT R3 64
+ 0x1C080403, // 0050 EQ R2 R2 R3
+ 0x780A0004, // 0051 JMPF R2 #0057
+ 0x8C080110, // 0052 GETMET R2 R0 K16
+ 0x5C100200, // 0053 MOVE R4 R1
+ 0x7C080400, // 0054 CALL R2 2
+ 0x80040400, // 0055 RET 1 R2
+ 0x7002000A, // 0056 JMP #0062
+ 0xA40A2200, // 0057 IMPORT R2 K17
+ 0xB80E0600, // 0058 GETNGBL R3 K3
+ 0x8C0C0704, // 0059 GETMET R3 R3 K4
+ 0x8C140512, // 005A GETMET R5 R2 K18
+ 0x581C0013, // 005B LDCONST R7 K19
+ 0x88200302, // 005C GETMBR R8 R1 K2
+ 0x7C140600, // 005D CALL R5 3
+ 0x58180006, // 005E LDCONST R6 K6
+ 0x7C0C0600, // 005F CALL R3 3
+ 0x500C0000, // 0060 LDBOOL R3 0 0
+ 0x80040600, // 0061 RET 1 R3
+ 0x50080000, // 0062 LDBOOL R2 0 0
+ 0x80040400, // 0063 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: parse_Sigma1
+********************************************************************/
+be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
+ be_nested_proto(
+ 37, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[144]) { /* constants */
+ /* K0 */ be_nested_str_weak(crypto),
+ /* K1 */ be_nested_str_weak(string),
+ /* K2 */ be_nested_str_weak(session),
+ /* K3 */ be_nested_str_weak(opcode),
+ /* K4 */ be_nested_str_weak(local_session_id),
+ /* K5 */ be_const_int(0),
+ /* K6 */ be_nested_str_weak(protocol_id),
+ /* K7 */ be_nested_str_weak(tasmota),
+ /* K8 */ be_nested_str_weak(log),
+ /* K9 */ be_nested_str_weak(MTR_X3A_X20StatusReport_X28General_X20Code_X3A_X20FAILURE_X2C_X20ProtocolId_X3A_X20SECURE_CHANNEL_X2C_X20ProtocolCode_X3A_X20INVALID_PARAMETER_X29),
+ /* K10 */ be_const_int(2),
+ /* K11 */ be_nested_str_weak(send_status_report),
+ /* K12 */ be_const_int(1),
+ /* K13 */ be_nested_str_weak(matter),
+ /* K14 */ be_nested_str_weak(Sigma1),
+ /* K15 */ be_nested_str_weak(parse),
+ /* K16 */ be_nested_str_weak(raw),
+ /* K17 */ be_nested_str_weak(app_payload_idx),
+ /* K18 */ be_nested_str_weak(format),
+ /* K19 */ be_nested_str_weak(MTR_X3A_X20sigma1_X3D_X25s),
+ /* K20 */ be_nested_str_weak(inspect),
+ /* K21 */ be_nested_str_weak(__initiator_pub),
+ /* K22 */ be_nested_str_weak(initiatorEphPubKey),
+ /* K23 */ be_nested_str_weak(resumptionID),
+ /* K24 */ be_nested_str_weak(initiatorResumeMIC),
+ /* K25 */ be_nested_str_weak(MTR_X3A_X20is_resumption_X3D_X25i),
+ /* K26 */ be_nested_str_weak(device),
+ /* K27 */ be_nested_str_weak(sessions),
+ /* K28 */ be_nested_str_weak(find_session_by_resumption_id),
+ /* K29 */ be_nested_str_weak(MTR_X3A_X20session_resumption_X20found_X20session_X3D_X25s_X20session_resumption_X3D_X25s),
+ /* K30 */ be_nested_str_weak(_fabric),
+ /* K31 */ be_nested_str_weak(initiatorRandom),
+ /* K32 */ be_nested_str_weak(fromstring),
+ /* K33 */ be_nested_str_weak(Sigma1_Resume),
+ /* K34 */ be_nested_str_weak(HKDF_SHA256),
+ /* K35 */ be_nested_str_weak(derive),
+ /* K36 */ be_nested_str_weak(shared_secret),
+ /* K37 */ be_nested_str_weak(NCASE_SigmaS1),
+ /* K38 */ be_const_int(2147483647),
+ /* K39 */ be_nested_str_weak(AES_CCM),
+ /* K40 */ be_nested_str_weak(decrypt),
+ /* K41 */ be_nested_str_weak(tag),
+ /* K42 */ be_nested_str_weak(_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
+ /* K43 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s1rk_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K44 */ be_nested_str_weak(tohex),
+ /* K45 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20tag_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K46 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20Resume1MICPayload_X20_X3D_X20),
+ /* K47 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20decrypted_tag_X20_X20_X20_X20_X20_X3D_X20),
+ /* K48 */ be_nested_str_weak(_source_node_id),
+ /* K49 */ be_nested_str_weak(source_node_id),
+ /* K50 */ be_nested_str_weak(set_mode_CASE),
+ /* K51 */ be_nested_str_weak(__future_initiator_session_id),
+ /* K52 */ be_nested_str_weak(initiator_session_id),
+ /* K53 */ be_nested_str_weak(__future_local_session_id),
+ /* K54 */ be_nested_str_weak(gen_local_session_id),
+ /* K55 */ be_nested_str_weak(MTR_X3A_X20_X2BSession_X20_X20_X20_X28_X256i_X29_X20from_X20_X27_X5B_X25s_X5D_X3A_X25i_X27),
+ /* K56 */ be_nested_str_weak(remote_ip),
+ /* K57 */ be_nested_str_weak(remote_port),
+ /* K58 */ be_nested_str_weak(resumption_id),
+ /* K59 */ be_nested_str_weak(random),
+ /* K60 */ be_nested_str_weak(Sigma2_Resume),
+ /* K61 */ be_nested_str_weak(NCASE_SigmaS2),
+ /* K62 */ be_nested_str_weak(Sigma2Resume),
+ /* K63 */ be_nested_str_weak(responderSessionID),
+ /* K64 */ be_nested_str_weak(sigma2ResumeMIC),
+ /* K65 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s2rk_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K66 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s2rk_salt_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K67 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20new_resumption_id_X20_X3D_X20),
+ /* K68 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20responderSessionID_X3D_X20),
+ /* K69 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20sigma2ResumeMIC_X20_X20_X20_X3D_X20),
+ /* K70 */ be_nested_str_weak(SessionResumptionKeys),
+ /* K71 */ be_nested_str_weak(rtc),
+ /* K72 */ be_nested_str_weak(utc),
+ /* K73 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
+ /* K74 */ be_nested_str_weak(MTR_X3A_X20I2RKey_X20_X20_X20_X20_X20_X20_X3D),
+ /* K75 */ be_nested_str_weak(MTR_X3A_X20R2IKey_X20_X20_X20_X20_X20_X20_X3D),
+ /* K76 */ be_nested_str_weak(MTR_X3A_X20AC_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
+ /* K77 */ be_nested_str_weak(tlv2raw),
+ /* K78 */ be_nested_str_weak(__Msg1),
+ /* K79 */ be_nested_str_weak(MTR_X3A_X20sigma2resume_X3A_X20),
+ /* K80 */ be_nested_str_weak(MTR_X3A_X20sigma2resume_raw_X3A_X20),
+ /* K81 */ be_nested_str_weak(build_response),
+ /* K82 */ be_nested_str_weak(encode_frame),
+ /* K83 */ be_nested_str_weak(responder),
+ /* K84 */ be_nested_str_weak(send_response_frame),
+ /* K85 */ be_nested_str_weak(close),
+ /* K86 */ be_nested_str_weak(set_keys),
+ /* K87 */ be_nested_str_weak(_breadcrumb),
+ /* K88 */ be_nested_str_weak(counter_snd_next),
+ /* K89 */ be_nested_str_weak(set_persist),
+ /* K90 */ be_nested_str_weak(set_no_expiration),
+ /* K91 */ be_nested_str_weak(persist_to_fabric),
+ /* K92 */ be_nested_str_weak(save),
+ /* K93 */ be_nested_str_weak(find_fabric_by_destination_id),
+ /* K94 */ be_nested_str_weak(destinationId),
+ /* K95 */ be_nested_str_weak(MTR_X3A_X20StatusReport_X28GeneralCode_X3A_X20FAILURE_X2C_X20ProtocolId_X3A_X20SECURE_CHANNEL_X2C_X20ProtocolCode_X3A_X20NO_SHARED_TRUST_ROOTS_X29),
+ /* K96 */ be_nested_str_weak(MTR_X3A_X20fabric_X3D),
+ /* K97 */ be_nested_str_weak(MTR_X3A_X20no_private_key_X3D),
+ /* K98 */ be_nested_str_weak(no_private_key),
+ /* K99 */ be_nested_str_weak(MTR_X3A_X20noc_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
+ /* K100 */ be_nested_str_weak(noc),
+ /* K101 */ be_nested_str_weak(get_icac),
+ /* K102 */ be_nested_str_weak(MTR_X3A_X20icac_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
+ /* K103 */ be_nested_str_weak(MTR_X3A_X20root_ca_cert_X20_X20_X3D),
+ /* K104 */ be_nested_str_weak(root_ca_certificate),
+ /* K105 */ be_nested_str_weak(__responder_priv),
+ /* K106 */ be_nested_str_weak(__responder_pub),
+ /* K107 */ be_nested_str_weak(EC_P256),
+ /* K108 */ be_nested_str_weak(public_key),
+ /* K109 */ be_nested_str_weak(MTR_X3A_X20ResponderEph_priv_X20_X20_X3D),
+ /* K110 */ be_nested_str_weak(MTR_X3A_X20ResponderEph_pub_X20_X20_X3D),
+ /* K111 */ be_nested_str_weak(shared_key),
+ /* K112 */ be_nested_str_weak(TLV),
+ /* K113 */ be_nested_str_weak(Matter_TLV_struct),
+ /* K114 */ be_nested_str_weak(add_TLV),
+ /* K115 */ be_nested_str_weak(B2),
+ /* K116 */ be_nested_str_weak(get_noc),
+ /* K117 */ be_const_int(3),
+ /* K118 */ be_nested_str_weak(ecdsa_sign_sha256),
+ /* K119 */ be_nested_str_weak(get_pk),
+ /* K120 */ be_nested_str_weak(Msg1),
+ /* K121 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20resumptionid_X20_X20_X3D_X20),
+ /* K122 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20MSG1_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K123 */ be_nested_str_weak(SHA256),
+ /* K124 */ be_nested_str_weak(update),
+ /* K125 */ be_nested_str_weak(out),
+ /* K126 */ be_nested_str_weak(MTR_X3A_X20TranscriptHash_X20_X3D),
+ /* K127 */ be_nested_str_weak(S2K_Info),
+ /* K128 */ be_nested_str_weak(get_ipk_group_key),
+ /* K129 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20SharedSecret_X20_X20_X3D_X20),
+ /* K130 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s2k_salt_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K131 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20s2k_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
+ /* K132 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TBEData2Raw_X20_X20_X20_X3D_X20),
+ /* K133 */ be_nested_str_weak(TBEData2_Nonce),
+ /* K134 */ be_nested_str_weak(encrypt),
+ /* K135 */ be_nested_str_weak(MTR_X3A_X20_X2A_X20TBEData2Enc_X20_X20_X20_X3D_X20),
+ /* K136 */ be_nested_str_weak(Sigma2),
+ /* K137 */ be_nested_str_weak(responderRandom),
+ /* K138 */ be_nested_str_weak(responderSessionId),
+ /* K139 */ be_nested_str_weak(responderEphPubKey),
+ /* K140 */ be_nested_str_weak(encrypted2),
+ /* K141 */ be_nested_str_weak(MTR_X3A_X20sigma2_X3A_X20),
+ /* K142 */ be_nested_str_weak(__Msg2),
+ /* K143 */ be_nested_str_weak(MTR_X3A_X20sigma2_raw_X3A_X20),
+ }),
+ be_str_weak(parse_Sigma1),
+ &be_const_str_solidified,
+ ( &(const binstruction[793]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0xA40E0200, // 0001 IMPORT R3 K1
+ 0x88100302, // 0002 GETMBR R4 R1 K2
+ 0x88140303, // 0003 GETMBR R5 R1 K3
+ 0x541A002F, // 0004 LDINT R6 48
+ 0x20140A06, // 0005 NE R5 R5 R6
+ 0x74160005, // 0006 JMPT R5 #000D
+ 0x88140304, // 0007 GETMBR R5 R1 K4
+ 0x20140B05, // 0008 NE R5 R5 K5
+ 0x74160002, // 0009 JMPT R5 #000D
+ 0x88140306, // 000A GETMBR R5 R1 K6
+ 0x20140B05, // 000B NE R5 R5 K5
+ 0x7816000D, // 000C JMPF R5 #001B
+ 0xB8160E00, // 000D GETNGBL R5 K7
+ 0x8C140B08, // 000E GETMET R5 R5 K8
+ 0x581C0009, // 000F LDCONST R7 K9
+ 0x5820000A, // 0010 LDCONST R8 K10
+ 0x7C140600, // 0011 CALL R5 3
+ 0x8C14010B, // 0012 GETMET R5 R0 K11
+ 0x5C1C0200, // 0013 MOVE R7 R1
+ 0x5820000C, // 0014 LDCONST R8 K12
+ 0x58240005, // 0015 LDCONST R9 K5
+ 0x5828000A, // 0016 LDCONST R10 K10
+ 0x502C0000, // 0017 LDBOOL R11 0 0
+ 0x7C140C00, // 0018 CALL R5 6
+ 0x50180000, // 0019 LDBOOL R6 0 0
+ 0x80040C00, // 001A RET 1 R6
+ 0xB8161A00, // 001B GETNGBL R5 K13
+ 0x8C140B0E, // 001C GETMET R5 R5 K14
+ 0x7C140200, // 001D CALL R5 1
+ 0x8C140B0F, // 001E GETMET R5 R5 K15
+ 0x881C0310, // 001F GETMBR R7 R1 K16
+ 0x88200311, // 0020 GETMBR R8 R1 K17
+ 0x7C140600, // 0021 CALL R5 3
+ 0xB81A0E00, // 0022 GETNGBL R6 K7
+ 0x8C180D08, // 0023 GETMET R6 R6 K8
+ 0x8C200712, // 0024 GETMET R8 R3 K18
+ 0x58280013, // 0025 LDCONST R10 K19
+ 0xB82E1A00, // 0026 GETNGBL R11 K13
+ 0x8C2C1714, // 0027 GETMET R11 R11 K20
+ 0x5C340A00, // 0028 MOVE R13 R5
+ 0x7C2C0400, // 0029 CALL R11 2
+ 0x7C200600, // 002A CALL R8 3
+ 0x54260003, // 002B LDINT R9 4
+ 0x7C180600, // 002C CALL R6 3
+ 0x88180B16, // 002D GETMBR R6 R5 K22
+ 0x90122A06, // 002E SETMBR R4 K21 R6
+ 0x88180B17, // 002F GETMBR R6 R5 K23
+ 0x4C1C0000, // 0030 LDNIL R7
+ 0x20180C07, // 0031 NE R6 R6 R7
+ 0x781A0003, // 0032 JMPF R6 #0037
+ 0x88180B18, // 0033 GETMBR R6 R5 K24
+ 0x4C1C0000, // 0034 LDNIL R7
+ 0x20180C07, // 0035 NE R6 R6 R7
+ 0x741A0000, // 0036 JMPT R6 #0038
+ 0x50180001, // 0037 LDBOOL R6 0 1
+ 0x50180200, // 0038 LDBOOL R6 1 0
+ 0xB81E0E00, // 0039 GETNGBL R7 K7
+ 0x8C1C0F08, // 003A GETMET R7 R7 K8
+ 0x8C240712, // 003B GETMET R9 R3 K18
+ 0x582C0019, // 003C LDCONST R11 K25
+ 0x781A0001, // 003D JMPF R6 #0040
+ 0x5830000C, // 003E LDCONST R12 K12
+ 0x70020000, // 003F JMP #0041
+ 0x58300005, // 0040 LDCONST R12 K5
+ 0x7C240600, // 0041 CALL R9 3
+ 0x542A0003, // 0042 LDINT R10 4
+ 0x7C1C0600, // 0043 CALL R7 3
+ 0x50180000, // 0044 LDBOOL R6 0 0
+ 0x4C1C0000, // 0045 LDNIL R7
+ 0x781A001C, // 0046 JMPF R6 #0064
+ 0x8820011A, // 0047 GETMBR R8 R0 K26
+ 0x8820111B, // 0048 GETMBR R8 R8 K27
+ 0x8C20111C, // 0049 GETMET R8 R8 K28
+ 0x88280B17, // 004A GETMBR R10 R5 K23
+ 0x7C200400, // 004B CALL R8 2
+ 0x5C1C1000, // 004C MOVE R7 R8
+ 0xB8220E00, // 004D GETNGBL R8 K7
+ 0x8C201108, // 004E GETMET R8 R8 K8
+ 0x8C280712, // 004F GETMET R10 R3 K18
+ 0x5830001D, // 0050 LDCONST R12 K29
+ 0xB8361A00, // 0051 GETNGBL R13 K13
+ 0x8C341B14, // 0052 GETMET R13 R13 K20
+ 0x5C3C0800, // 0053 MOVE R15 R4
+ 0x7C340400, // 0054 CALL R13 2
+ 0xB83A1A00, // 0055 GETNGBL R14 K13
+ 0x8C381D14, // 0056 GETMET R14 R14 K20
+ 0x5C400E00, // 0057 MOVE R16 R7
+ 0x7C380400, // 0058 CALL R14 2
+ 0x7C280800, // 0059 CALL R10 4
+ 0x542E0003, // 005A LDINT R11 4
+ 0x7C200600, // 005B CALL R8 3
+ 0x4C200000, // 005C LDNIL R8
+ 0x1C200E08, // 005D EQ R8 R7 R8
+ 0x74220003, // 005E JMPT R8 #0063
+ 0x88200F1E, // 005F GETMBR R8 R7 K30
+ 0x4C240000, // 0060 LDNIL R9
+ 0x1C201009, // 0061 EQ R8 R8 R9
+ 0x78220000, // 0062 JMPF R8 #0064
+ 0x50180000, // 0063 LDBOOL R6 0 0
+ 0x781A013A, // 0064 JMPF R6 #01A0
+ 0x88200B1F, // 0065 GETMBR R8 R5 K31
+ 0x88240B17, // 0066 GETMBR R9 R5 K23
+ 0x00201009, // 0067 ADD R8 R8 R9
+ 0x60240015, // 0068 GETGBL R9 G21
+ 0x7C240000, // 0069 CALL R9 0
+ 0x8C241320, // 006A GETMET R9 R9 K32
+ 0x582C0021, // 006B LDCONST R11 K33
+ 0x7C240400, // 006C CALL R9 2
+ 0x8C280522, // 006D GETMET R10 R2 K34
+ 0x7C280200, // 006E CALL R10 1
+ 0x8C281523, // 006F GETMET R10 R10 K35
+ 0x88300F24, // 0070 GETMBR R12 R7 K36
+ 0x5C341000, // 0071 MOVE R13 R8
+ 0x5C381200, // 0072 MOVE R14 R9
+ 0x543E000F, // 0073 LDINT R15 16
+ 0x7C280A00, // 0074 CALL R10 5
+ 0x602C0015, // 0075 GETGBL R11 G21
+ 0x7C2C0000, // 0076 CALL R11 0
+ 0x8C2C1720, // 0077 GETMET R11 R11 K32
+ 0x58340025, // 0078 LDCONST R13 K37
+ 0x7C2C0400, // 0079 CALL R11 2
+ 0x5431FFEE, // 007A LDINT R12 -17
+ 0x40320A0C, // 007B CONNECT R12 K5 R12
+ 0x88340B18, // 007C GETMBR R13 R5 K24
+ 0x94301A0C, // 007D GETIDX R12 R13 R12
+ 0x5439FFEF, // 007E LDINT R14 -16
+ 0x40381D26, // 007F CONNECT R14 R14 K38
+ 0x883C0B18, // 0080 GETMBR R15 R5 K24
+ 0x94341E0E, // 0081 GETIDX R13 R15 R14
+ 0x8C400527, // 0082 GETMET R16 R2 K39
+ 0x5C481400, // 0083 MOVE R18 R10
+ 0x5C4C1600, // 0084 MOVE R19 R11
+ 0x60500015, // 0085 GETGBL R20 G21
+ 0x7C500000, // 0086 CALL R20 0
+ 0x6054000C, // 0087 GETGBL R21 G12
+ 0x5C581800, // 0088 MOVE R22 R12
+ 0x7C540200, // 0089 CALL R21 1
+ 0x545A000F, // 008A LDINT R22 16
+ 0x7C400C00, // 008B CALL R16 6
+ 0x5C382000, // 008C MOVE R14 R16
+ 0x8C401D28, // 008D GETMET R16 R14 K40
+ 0x5C481800, // 008E MOVE R18 R12
+ 0x7C400400, // 008F CALL R16 2
+ 0x5C3C2000, // 0090 MOVE R15 R16
+ 0x8C401D29, // 0091 GETMET R16 R14 K41
+ 0x7C400200, // 0092 CALL R16 1
+ 0xB8460E00, // 0093 GETNGBL R17 K7
+ 0x8C442308, // 0094 GETMET R17 R17 K8
+ 0x584C002A, // 0095 LDCONST R19 K42
+ 0x54520003, // 0096 LDINT R20 4
+ 0x7C440600, // 0097 CALL R17 3
+ 0xB8460E00, // 0098 GETNGBL R17 K7
+ 0x8C442308, // 0099 GETMET R17 R17 K8
+ 0x8C4C152C, // 009A GETMET R19 R10 K44
+ 0x7C4C0200, // 009B CALL R19 1
+ 0x004E5613, // 009C ADD R19 K43 R19
+ 0x54520003, // 009D LDINT R20 4
+ 0x7C440600, // 009E CALL R17 3
+ 0xB8460E00, // 009F GETNGBL R17 K7
+ 0x8C442308, // 00A0 GETMET R17 R17 K8
+ 0x8C4C1B2C, // 00A1 GETMET R19 R13 K44
+ 0x7C4C0200, // 00A2 CALL R19 1
+ 0x004E5A13, // 00A3 ADD R19 K45 R19
+ 0x54520003, // 00A4 LDINT R20 4
+ 0x7C440600, // 00A5 CALL R17 3
+ 0xB8460E00, // 00A6 GETNGBL R17 K7
+ 0x8C442308, // 00A7 GETMET R17 R17 K8
+ 0x8C4C1F2C, // 00A8 GETMET R19 R15 K44
+ 0x7C4C0200, // 00A9 CALL R19 1
+ 0x004E5C13, // 00AA ADD R19 K46 R19
+ 0x54520003, // 00AB LDINT R20 4
+ 0x7C440600, // 00AC CALL R17 3
+ 0xB8460E00, // 00AD GETNGBL R17 K7
+ 0x8C442308, // 00AE GETMET R17 R17 K8
+ 0x8C4C212C, // 00AF GETMET R19 R16 K44
+ 0x7C4C0200, // 00B0 CALL R19 1
+ 0x004E5E13, // 00B1 ADD R19 K47 R19
+ 0x54520003, // 00B2 LDINT R20 4
+ 0x7C440600, // 00B3 CALL R17 3
+ 0xB8460E00, // 00B4 GETNGBL R17 K7
+ 0x8C442308, // 00B5 GETMET R17 R17 K8
+ 0x584C002A, // 00B6 LDCONST R19 K42
+ 0x54520003, // 00B7 LDINT R20 4
+ 0x7C440600, // 00B8 CALL R17 3
+ 0x1C441A10, // 00B9 EQ R17 R13 R16
+ 0x784600E3, // 00BA JMPF R17 #019F
+ 0x88440F1E, // 00BB GETMBR R17 R7 K30
+ 0x90123C11, // 00BC SETMBR R4 K30 R17
+ 0x88440331, // 00BD GETMBR R17 R1 K49
+ 0x90126011, // 00BE SETMBR R4 K48 R17
+ 0x8C440932, // 00BF GETMET R17 R4 K50
+ 0x7C440200, // 00C0 CALL R17 1
+ 0x88440B34, // 00C1 GETMBR R17 R5 K52
+ 0x90126611, // 00C2 SETMBR R4 K51 R17
+ 0x8844011A, // 00C3 GETMBR R17 R0 K26
+ 0x8844231B, // 00C4 GETMBR R17 R17 K27
+ 0x8C442336, // 00C5 GETMET R17 R17 K54
+ 0x7C440200, // 00C6 CALL R17 1
+ 0x90126A11, // 00C7 SETMBR R4 K53 R17
+ 0xB8460E00, // 00C8 GETNGBL R17 K7
+ 0x8C442308, // 00C9 GETMET R17 R17 K8
+ 0x8C4C0712, // 00CA GETMET R19 R3 K18
+ 0x58540037, // 00CB LDCONST R21 K55
+ 0x88580935, // 00CC GETMBR R22 R4 K53
+ 0x885C0338, // 00CD GETMBR R23 R1 K56
+ 0x88600339, // 00CE GETMBR R24 R1 K57
+ 0x7C4C0A00, // 00CF CALL R19 5
+ 0x5850000A, // 00D0 LDCONST R20 K10
+ 0x7C440600, // 00D1 CALL R17 3
+ 0x88440F24, // 00D2 GETMBR R17 R7 K36
+ 0x90124811, // 00D3 SETMBR R4 K36 R17
+ 0x8C44053B, // 00D4 GETMET R17 R2 K59
+ 0x544E000F, // 00D5 LDINT R19 16
+ 0x7C440400, // 00D6 CALL R17 2
+ 0x90127411, // 00D7 SETMBR R4 K58 R17
+ 0x60440015, // 00D8 GETGBL R17 G21
+ 0x7C440000, // 00D9 CALL R17 0
+ 0x8C442320, // 00DA GETMET R17 R17 K32
+ 0x584C003C, // 00DB LDCONST R19 K60
+ 0x7C440400, // 00DC CALL R17 2
+ 0x88480B1F, // 00DD GETMBR R18 R5 K31
+ 0x884C093A, // 00DE GETMBR R19 R4 K58
+ 0x00482413, // 00DF ADD R18 R18 R19
+ 0x8C4C0522, // 00E0 GETMET R19 R2 K34
+ 0x7C4C0200, // 00E1 CALL R19 1
+ 0x8C4C2723, // 00E2 GETMET R19 R19 K35
+ 0x88540924, // 00E3 GETMBR R21 R4 K36
+ 0x5C582400, // 00E4 MOVE R22 R18
+ 0x5C5C2200, // 00E5 MOVE R23 R17
+ 0x5462000F, // 00E6 LDINT R24 16
+ 0x7C4C0A00, // 00E7 CALL R19 5
+ 0x8C500527, // 00E8 GETMET R20 R2 K39
+ 0x5C582600, // 00E9 MOVE R22 R19
+ 0x605C0015, // 00EA GETGBL R23 G21
+ 0x7C5C0000, // 00EB CALL R23 0
+ 0x8C5C2F20, // 00EC GETMET R23 R23 K32
+ 0x5864003D, // 00ED LDCONST R25 K61
+ 0x7C5C0400, // 00EE CALL R23 2
+ 0x60600015, // 00EF GETGBL R24 G21
+ 0x7C600000, // 00F0 CALL R24 0
+ 0x58640005, // 00F1 LDCONST R25 K5
+ 0x546A000F, // 00F2 LDINT R26 16
+ 0x7C500C00, // 00F3 CALL R20 6
+ 0x8C542929, // 00F4 GETMET R21 R20 K41
+ 0x7C540200, // 00F5 CALL R21 1
+ 0xB85A1A00, // 00F6 GETNGBL R22 K13
+ 0x8C582D3E, // 00F7 GETMET R22 R22 K62
+ 0x7C580200, // 00F8 CALL R22 1
+ 0x885C093A, // 00F9 GETMBR R23 R4 K58
+ 0x905A2E17, // 00FA SETMBR R22 K23 R23
+ 0x885C0935, // 00FB GETMBR R23 R4 K53
+ 0x905A7E17, // 00FC SETMBR R22 K63 R23
+ 0x905A8015, // 00FD SETMBR R22 K64 R21
+ 0xB85E0E00, // 00FE GETNGBL R23 K7
+ 0x8C5C2F08, // 00FF GETMET R23 R23 K8
+ 0x5864002A, // 0100 LDCONST R25 K42
+ 0x546A0003, // 0101 LDINT R26 4
+ 0x7C5C0600, // 0102 CALL R23 3
+ 0xB85E0E00, // 0103 GETNGBL R23 K7
+ 0x8C5C2F08, // 0104 GETMET R23 R23 K8
+ 0x8C64272C, // 0105 GETMET R25 R19 K44
+ 0x7C640200, // 0106 CALL R25 1
+ 0x00668219, // 0107 ADD R25 K65 R25
+ 0x546A0003, // 0108 LDINT R26 4
+ 0x7C5C0600, // 0109 CALL R23 3
+ 0xB85E0E00, // 010A GETNGBL R23 K7
+ 0x8C5C2F08, // 010B GETMET R23 R23 K8
+ 0x8C64252C, // 010C GETMET R25 R18 K44
+ 0x7C640200, // 010D CALL R25 1
+ 0x00668419, // 010E ADD R25 K66 R25
+ 0x546A0003, // 010F LDINT R26 4
+ 0x7C5C0600, // 0110 CALL R23 3
+ 0xB85E0E00, // 0111 GETNGBL R23 K7
+ 0x8C5C2F08, // 0112 GETMET R23 R23 K8
+ 0x8864093A, // 0113 GETMBR R25 R4 K58
+ 0x8C64332C, // 0114 GETMET R25 R25 K44
+ 0x7C640200, // 0115 CALL R25 1
+ 0x00668619, // 0116 ADD R25 K67 R25
+ 0x546A0003, // 0117 LDINT R26 4
+ 0x7C5C0600, // 0118 CALL R23 3
+ 0xB85E0E00, // 0119 GETNGBL R23 K7
+ 0x8C5C2F08, // 011A GETMET R23 R23 K8
+ 0x60640008, // 011B GETGBL R25 G8
+ 0x88680935, // 011C GETMBR R26 R4 K53
+ 0x7C640200, // 011D CALL R25 1
+ 0x00668819, // 011E ADD R25 K68 R25
+ 0x546A0003, // 011F LDINT R26 4
+ 0x7C5C0600, // 0120 CALL R23 3
+ 0xB85E0E00, // 0121 GETNGBL R23 K7
+ 0x8C5C2F08, // 0122 GETMET R23 R23 K8
+ 0x8C642B2C, // 0123 GETMET R25 R21 K44
+ 0x7C640200, // 0124 CALL R25 1
+ 0x00668A19, // 0125 ADD R25 K69 R25
+ 0x546A0003, // 0126 LDINT R26 4
+ 0x7C5C0600, // 0127 CALL R23 3
+ 0xB85E0E00, // 0128 GETNGBL R23 K7
+ 0x8C5C2F08, // 0129 GETMET R23 R23 K8
+ 0x5864002A, // 012A LDCONST R25 K42
+ 0x546A0003, // 012B LDINT R26 4
+ 0x7C5C0600, // 012C CALL R23 3
+ 0x8C5C0522, // 012D GETMET R23 R2 K34
+ 0x7C5C0200, // 012E CALL R23 1
+ 0x8C5C2F23, // 012F GETMET R23 R23 K35
+ 0x88640924, // 0130 GETMBR R25 R4 K36
+ 0x88680B1F, // 0131 GETMBR R26 R5 K31
+ 0x886C093A, // 0132 GETMBR R27 R4 K58
+ 0x0068341B, // 0133 ADD R26 R26 R27
+ 0x606C0015, // 0134 GETGBL R27 G21
+ 0x7C6C0000, // 0135 CALL R27 0
+ 0x8C6C3720, // 0136 GETMET R27 R27 K32
+ 0x58740046, // 0137 LDCONST R29 K70
+ 0x7C6C0400, // 0138 CALL R27 2
+ 0x5472002F, // 0139 LDINT R28 48
+ 0x7C5C0A00, // 013A CALL R23 5
+ 0x5462000E, // 013B LDINT R24 15
+ 0x40620A18, // 013C CONNECT R24 K5 R24
+ 0x94602E18, // 013D GETIDX R24 R23 R24
+ 0x5466000F, // 013E LDINT R25 16
+ 0x546A001E, // 013F LDINT R26 31
+ 0x4064321A, // 0140 CONNECT R25 R25 R26
+ 0x94642E19, // 0141 GETIDX R25 R23 R25
+ 0x546A001F, // 0142 LDINT R26 32
+ 0x546E002E, // 0143 LDINT R27 47
+ 0x4068341B, // 0144 CONNECT R26 R26 R27
+ 0x94682E1A, // 0145 GETIDX R26 R23 R26
+ 0xB86E0E00, // 0146 GETNGBL R27 K7
+ 0x8C6C3747, // 0147 GETMET R27 R27 K71
+ 0x7C6C0200, // 0148 CALL R27 1
+ 0x946C3748, // 0149 GETIDX R27 R27 K72
+ 0xB8720E00, // 014A GETNGBL R28 K7
+ 0x8C703908, // 014B GETMET R28 R28 K8
+ 0x58780049, // 014C LDCONST R30 K73
+ 0x547E0003, // 014D LDINT R31 4
+ 0x7C700600, // 014E CALL R28 3
+ 0xB8720E00, // 014F GETNGBL R28 K7
+ 0x8C703908, // 0150 GETMET R28 R28 K8
+ 0x8C78312C, // 0151 GETMET R30 R24 K44
+ 0x7C780200, // 0152 CALL R30 1
+ 0x007A941E, // 0153 ADD R30 K74 R30
+ 0x547E0003, // 0154 LDINT R31 4
+ 0x7C700600, // 0155 CALL R28 3
+ 0xB8720E00, // 0156 GETNGBL R28 K7
+ 0x8C703908, // 0157 GETMET R28 R28 K8
+ 0x8C78332C, // 0158 GETMET R30 R25 K44
+ 0x7C780200, // 0159 CALL R30 1
+ 0x007A961E, // 015A ADD R30 K75 R30
+ 0x547E0003, // 015B LDINT R31 4
+ 0x7C700600, // 015C CALL R28 3
+ 0xB8720E00, // 015D GETNGBL R28 K7
+ 0x8C703908, // 015E GETMET R28 R28 K8
+ 0x8C78352C, // 015F GETMET R30 R26 K44
+ 0x7C780200, // 0160 CALL R30 1
+ 0x007A981E, // 0161 ADD R30 K76 R30
+ 0x547E0003, // 0162 LDINT R31 4
+ 0x7C700600, // 0163 CALL R28 3
+ 0xB8720E00, // 0164 GETNGBL R28 K7
+ 0x8C703908, // 0165 GETMET R28 R28 K8
+ 0x58780049, // 0166 LDCONST R30 K73
+ 0x547E0003, // 0167 LDINT R31 4
+ 0x7C700600, // 0168 CALL R28 3
+ 0x8C702D4D, // 0169 GETMET R28 R22 K77
+ 0x7C700200, // 016A CALL R28 1
+ 0x4C740000, // 016B LDNIL R29
+ 0x90129C1D, // 016C SETMBR R4 K78 R29
+ 0xB8760E00, // 016D GETNGBL R29 K7
+ 0x8C743B08, // 016E GETMET R29 R29 K8
+ 0xB87E1A00, // 016F GETNGBL R31 K13
+ 0x8C7C3F14, // 0170 GETMET R31 R31 K20
+ 0x5C842C00, // 0171 MOVE R33 R22
+ 0x7C7C0400, // 0172 CALL R31 2
+ 0x007E9E1F, // 0173 ADD R31 K79 R31
+ 0x54820003, // 0174 LDINT R32 4
+ 0x7C740600, // 0175 CALL R29 3
+ 0xB8760E00, // 0176 GETNGBL R29 K7
+ 0x8C743B08, // 0177 GETMET R29 R29 K8
+ 0x8C7C392C, // 0178 GETMET R31 R28 K44
+ 0x7C7C0200, // 0179 CALL R31 1
+ 0x007EA01F, // 017A ADD R31 K80 R31
+ 0x54820003, // 017B LDINT R32 4
+ 0x7C740600, // 017C CALL R29 3
+ 0x8C740351, // 017D GETMET R29 R1 K81
+ 0x547E0032, // 017E LDINT R31 51
+ 0x50800200, // 017F LDBOOL R32 1 0
+ 0x7C740600, // 0180 CALL R29 3
+ 0x8C783B52, // 0181 GETMET R30 R29 K82
+ 0x5C803800, // 0182 MOVE R32 R28
+ 0x7C780400, // 0183 CALL R30 2
+ 0x887C0153, // 0184 GETMBR R31 R0 K83
+ 0x8C7C3F54, // 0185 GETMET R31 R31 K84
+ 0x5C843A00, // 0186 MOVE R33 R29
+ 0x7C7C0400, // 0187 CALL R31 2
+ 0x8C7C0955, // 0188 GETMET R31 R4 K85
+ 0x7C7C0200, // 0189 CALL R31 1
+ 0x8C7C0956, // 018A GETMET R31 R4 K86
+ 0x5C843000, // 018B MOVE R33 R24
+ 0x5C883200, // 018C MOVE R34 R25
+ 0x5C8C3400, // 018D MOVE R35 R26
+ 0x5C903600, // 018E MOVE R36 R27
+ 0x7C7C0A00, // 018F CALL R31 5
+ 0x9012AF05, // 0190 SETMBR R4 K87 K5
+ 0x8C7C0958, // 0191 GETMET R31 R4 K88
+ 0x7C7C0200, // 0192 CALL R31 1
+ 0x8C7C0959, // 0193 GETMET R31 R4 K89
+ 0x50840200, // 0194 LDBOOL R33 1 0
+ 0x7C7C0400, // 0195 CALL R31 2
+ 0x8C7C095A, // 0196 GETMET R31 R4 K90
+ 0x7C7C0200, // 0197 CALL R31 1
+ 0x8C7C095B, // 0198 GETMET R31 R4 K91
+ 0x7C7C0200, // 0199 CALL R31 1
+ 0x8C7C095C, // 019A GETMET R31 R4 K92
+ 0x7C7C0200, // 019B CALL R31 1
+ 0x507C0200, // 019C LDBOOL R31 1 0
+ 0x80043E00, // 019D RET 1 R31
+ 0x70020000, // 019E JMP #01A0
+ 0x50180000, // 019F LDBOOL R6 0 0
+ 0x5C200C00, // 01A0 MOVE R8 R6
+ 0x74220174, // 01A1 JMPT R8 #0317
+ 0x8C20015D, // 01A2 GETMET R8 R0 K93
+ 0x88280B5E, // 01A3 GETMBR R10 R5 K94
+ 0x882C0B1F, // 01A4 GETMBR R11 R5 K31
+ 0x7C200600, // 01A5 CALL R8 3
+ 0x90123C08, // 01A6 SETMBR R4 K30 R8
+ 0x4C240000, // 01A7 LDNIL R9
+ 0x1C240809, // 01A8 EQ R9 R4 R9
+ 0x74260003, // 01A9 JMPT R9 #01AE
+ 0x8824091E, // 01AA GETMBR R9 R4 K30
+ 0x4C280000, // 01AB LDNIL R10
+ 0x1C24120A, // 01AC EQ R9 R9 R10
+ 0x7826000D, // 01AD JMPF R9 #01BC
+ 0xB8260E00, // 01AE GETNGBL R9 K7
+ 0x8C241308, // 01AF GETMET R9 R9 K8
+ 0x582C005F, // 01B0 LDCONST R11 K95
+ 0x5830000A, // 01B1 LDCONST R12 K10
+ 0x7C240600, // 01B2 CALL R9 3
+ 0x8C24010B, // 01B3 GETMET R9 R0 K11
+ 0x5C2C0200, // 01B4 MOVE R11 R1
+ 0x5830000C, // 01B5 LDCONST R12 K12
+ 0x58340005, // 01B6 LDCONST R13 K5
+ 0x5838000C, // 01B7 LDCONST R14 K12
+ 0x503C0000, // 01B8 LDBOOL R15 0 0
+ 0x7C240C00, // 01B9 CALL R9 6
+ 0x50280000, // 01BA LDBOOL R10 0 0
+ 0x80041400, // 01BB RET 1 R10
+ 0x88240331, // 01BC GETMBR R9 R1 K49
+ 0x90126009, // 01BD SETMBR R4 K48 R9
+ 0x8C240932, // 01BE GETMET R9 R4 K50
+ 0x7C240200, // 01BF CALL R9 1
+ 0x88240B34, // 01C0 GETMBR R9 R5 K52
+ 0x90126609, // 01C1 SETMBR R4 K51 R9
+ 0x8824011A, // 01C2 GETMBR R9 R0 K26
+ 0x8824131B, // 01C3 GETMBR R9 R9 K27
+ 0x8C241336, // 01C4 GETMET R9 R9 K54
+ 0x7C240200, // 01C5 CALL R9 1
+ 0x90126A09, // 01C6 SETMBR R4 K53 R9
+ 0xB8260E00, // 01C7 GETNGBL R9 K7
+ 0x8C241308, // 01C8 GETMET R9 R9 K8
+ 0x8C2C0712, // 01C9 GETMET R11 R3 K18
+ 0x58340037, // 01CA LDCONST R13 K55
+ 0x88380935, // 01CB GETMBR R14 R4 K53
+ 0x883C0338, // 01CC GETMBR R15 R1 K56
+ 0x88400339, // 01CD GETMBR R16 R1 K57
+ 0x7C2C0A00, // 01CE CALL R11 5
+ 0x5830000A, // 01CF LDCONST R12 K10
+ 0x7C240600, // 01D0 CALL R9 3
+ 0xB8260E00, // 01D1 GETNGBL R9 K7
+ 0x8C241308, // 01D2 GETMET R9 R9 K8
+ 0xB82E1A00, // 01D3 GETNGBL R11 K13
+ 0x8C2C1714, // 01D4 GETMET R11 R11 K20
+ 0x8834091E, // 01D5 GETMBR R13 R4 K30
+ 0x7C2C0400, // 01D6 CALL R11 2
+ 0x002EC00B, // 01D7 ADD R11 K96 R11
+ 0x54320003, // 01D8 LDINT R12 4
+ 0x7C240600, // 01D9 CALL R9 3
+ 0xB8260E00, // 01DA GETNGBL R9 K7
+ 0x8C241308, // 01DB GETMET R9 R9 K8
+ 0x882C091E, // 01DC GETMBR R11 R4 K30
+ 0x882C1762, // 01DD GETMBR R11 R11 K98
+ 0x8C2C172C, // 01DE GETMET R11 R11 K44
+ 0x7C2C0200, // 01DF CALL R11 1
+ 0x002EC20B, // 01E0 ADD R11 K97 R11
+ 0x54320003, // 01E1 LDINT R12 4
+ 0x7C240600, // 01E2 CALL R9 3
+ 0xB8260E00, // 01E3 GETNGBL R9 K7
+ 0x8C241308, // 01E4 GETMET R9 R9 K8
+ 0x882C091E, // 01E5 GETMBR R11 R4 K30
+ 0x882C1764, // 01E6 GETMBR R11 R11 K100
+ 0x8C2C172C, // 01E7 GETMET R11 R11 K44
+ 0x7C2C0200, // 01E8 CALL R11 1
+ 0x002EC60B, // 01E9 ADD R11 K99 R11
+ 0x54320003, // 01EA LDINT R12 4
+ 0x7C240600, // 01EB CALL R9 3
+ 0x8824091E, // 01EC GETMBR R9 R4 K30
+ 0x8C241365, // 01ED GETMET R9 R9 K101
+ 0x7C240200, // 01EE CALL R9 1
+ 0x78260009, // 01EF JMPF R9 #01FA
+ 0xB8260E00, // 01F0 GETNGBL R9 K7
+ 0x8C241308, // 01F1 GETMET R9 R9 K8
+ 0x882C091E, // 01F2 GETMBR R11 R4 K30
+ 0x8C2C1765, // 01F3 GETMET R11 R11 K101
+ 0x7C2C0200, // 01F4 CALL R11 1
+ 0x8C2C172C, // 01F5 GETMET R11 R11 K44
+ 0x7C2C0200, // 01F6 CALL R11 1
+ 0x002ECC0B, // 01F7 ADD R11 K102 R11
+ 0x54320003, // 01F8 LDINT R12 4
+ 0x7C240600, // 01F9 CALL R9 3
+ 0xB8260E00, // 01FA GETNGBL R9 K7
+ 0x8C241308, // 01FB GETMET R9 R9 K8
+ 0x882C091E, // 01FC GETMBR R11 R4 K30
+ 0x882C1768, // 01FD GETMBR R11 R11 K104
+ 0x8C2C172C, // 01FE GETMET R11 R11 K44
+ 0x7C2C0200, // 01FF CALL R11 1
+ 0x002ECE0B, // 0200 ADD R11 K103 R11
+ 0x54320003, // 0201 LDINT R12 4
+ 0x7C240600, // 0202 CALL R9 3
+ 0x8C24053B, // 0203 GETMET R9 R2 K59
+ 0x542E000F, // 0204 LDINT R11 16
+ 0x7C240400, // 0205 CALL R9 2
+ 0x90127409, // 0206 SETMBR R4 K58 R9
+ 0x8C24053B, // 0207 GETMET R9 R2 K59
+ 0x542E001F, // 0208 LDINT R11 32
+ 0x7C240400, // 0209 CALL R9 2
+ 0x9012D209, // 020A SETMBR R4 K105 R9
+ 0x8C24056B, // 020B GETMET R9 R2 K107
+ 0x7C240200, // 020C CALL R9 1
+ 0x8C24136C, // 020D GETMET R9 R9 K108
+ 0x882C0969, // 020E GETMBR R11 R4 K105
+ 0x7C240400, // 020F CALL R9 2
+ 0x9012D409, // 0210 SETMBR R4 K106 R9
+ 0xB8260E00, // 0211 GETNGBL R9 K7
+ 0x8C241308, // 0212 GETMET R9 R9 K8
+ 0x882C0969, // 0213 GETMBR R11 R4 K105
+ 0x8C2C172C, // 0214 GETMET R11 R11 K44
+ 0x7C2C0200, // 0215 CALL R11 1
+ 0x002EDA0B, // 0216 ADD R11 K109 R11
+ 0x54320003, // 0217 LDINT R12 4
+ 0x7C240600, // 0218 CALL R9 3
+ 0xB8260E00, // 0219 GETNGBL R9 K7
+ 0x8C241308, // 021A GETMET R9 R9 K8
+ 0x882C096A, // 021B GETMBR R11 R4 K106
+ 0x8C2C172C, // 021C GETMET R11 R11 K44
+ 0x7C2C0200, // 021D CALL R11 1
+ 0x002EDC0B, // 021E ADD R11 K110 R11
+ 0x54320003, // 021F LDINT R12 4
+ 0x7C240600, // 0220 CALL R9 3
+ 0x8C24053B, // 0221 GETMET R9 R2 K59
+ 0x542E001F, // 0222 LDINT R11 32
+ 0x7C240400, // 0223 CALL R9 2
+ 0x8C28056B, // 0224 GETMET R10 R2 K107
+ 0x7C280200, // 0225 CALL R10 1
+ 0x8C28156F, // 0226 GETMET R10 R10 K111
+ 0x88300969, // 0227 GETMBR R12 R4 K105
+ 0x88340B16, // 0228 GETMBR R13 R5 K22
+ 0x7C280600, // 0229 CALL R10 3
+ 0x9012480A, // 022A SETMBR R4 K36 R10
+ 0xB82A1A00, // 022B GETNGBL R10 K13
+ 0x88281570, // 022C GETMBR R10 R10 K112
+ 0x8C281571, // 022D GETMET R10 R10 K113
+ 0x7C280200, // 022E CALL R10 1
+ 0x8C2C1572, // 022F GETMET R11 R10 K114
+ 0x5834000C, // 0230 LDCONST R13 K12
+ 0xB83A1A00, // 0231 GETNGBL R14 K13
+ 0x88381D70, // 0232 GETMBR R14 R14 K112
+ 0x88381D73, // 0233 GETMBR R14 R14 K115
+ 0x8C3C0974, // 0234 GETMET R15 R4 K116
+ 0x7C3C0200, // 0235 CALL R15 1
+ 0x7C2C0800, // 0236 CALL R11 4
+ 0x8C2C1572, // 0237 GETMET R11 R10 K114
+ 0x5834000A, // 0238 LDCONST R13 K10
+ 0xB83A1A00, // 0239 GETNGBL R14 K13
+ 0x88381D70, // 023A GETMBR R14 R14 K112
+ 0x88381D73, // 023B GETMBR R14 R14 K115
+ 0x8C3C0965, // 023C GETMET R15 R4 K101
+ 0x7C3C0200, // 023D CALL R15 1
+ 0x7C2C0800, // 023E CALL R11 4
+ 0x8C2C1572, // 023F GETMET R11 R10 K114
+ 0x58340075, // 0240 LDCONST R13 K117
+ 0xB83A1A00, // 0241 GETNGBL R14 K13
+ 0x88381D70, // 0242 GETMBR R14 R14 K112
+ 0x88381D73, // 0243 GETMBR R14 R14 K115
+ 0x883C096A, // 0244 GETMBR R15 R4 K106
+ 0x7C2C0800, // 0245 CALL R11 4
+ 0x8C2C1572, // 0246 GETMET R11 R10 K114
+ 0x54360003, // 0247 LDINT R13 4
+ 0xB83A1A00, // 0248 GETNGBL R14 K13
+ 0x88381D70, // 0249 GETMBR R14 R14 K112
+ 0x88381D73, // 024A GETMBR R14 R14 K115
+ 0x883C0B16, // 024B GETMBR R15 R5 K22
+ 0x7C2C0800, // 024C CALL R11 4
+ 0x8C2C056B, // 024D GETMET R11 R2 K107
+ 0x7C2C0200, // 024E CALL R11 1
+ 0x8C2C1776, // 024F GETMET R11 R11 K118
+ 0x8C340977, // 0250 GETMET R13 R4 K119
+ 0x7C340200, // 0251 CALL R13 1
+ 0x8C38154D, // 0252 GETMET R14 R10 K77
+ 0x7C380200, // 0253 CALL R14 1
+ 0x7C2C0600, // 0254 CALL R11 3
+ 0xB8321A00, // 0255 GETNGBL R12 K13
+ 0x88301970, // 0256 GETMBR R12 R12 K112
+ 0x8C301971, // 0257 GETMET R12 R12 K113
+ 0x7C300200, // 0258 CALL R12 1
+ 0x8C341972, // 0259 GETMET R13 R12 K114
+ 0x583C000C, // 025A LDCONST R15 K12
+ 0xB8421A00, // 025B GETNGBL R16 K13
+ 0x88402170, // 025C GETMBR R16 R16 K112
+ 0x88402173, // 025D GETMBR R16 R16 K115
+ 0x8C440974, // 025E GETMET R17 R4 K116
+ 0x7C440200, // 025F CALL R17 1
+ 0x7C340800, // 0260 CALL R13 4
+ 0x8C341972, // 0261 GETMET R13 R12 K114
+ 0x583C000A, // 0262 LDCONST R15 K10
+ 0xB8421A00, // 0263 GETNGBL R16 K13
+ 0x88402170, // 0264 GETMBR R16 R16 K112
+ 0x88402173, // 0265 GETMBR R16 R16 K115
+ 0x8C440965, // 0266 GETMET R17 R4 K101
+ 0x7C440200, // 0267 CALL R17 1
+ 0x7C340800, // 0268 CALL R13 4
+ 0x8C341972, // 0269 GETMET R13 R12 K114
+ 0x583C0075, // 026A LDCONST R15 K117
+ 0xB8421A00, // 026B GETNGBL R16 K13
+ 0x88402170, // 026C GETMBR R16 R16 K112
+ 0x88402173, // 026D GETMBR R16 R16 K115
+ 0x5C441600, // 026E MOVE R17 R11
+ 0x7C340800, // 026F CALL R13 4
+ 0x8C341972, // 0270 GETMET R13 R12 K114
+ 0x543E0003, // 0271 LDINT R15 4
+ 0xB8421A00, // 0272 GETNGBL R16 K13
+ 0x88402170, // 0273 GETMBR R16 R16 K112
+ 0x88402173, // 0274 GETMBR R16 R16 K115
+ 0x8844093A, // 0275 GETMBR R17 R4 K58
+ 0x7C340800, // 0276 CALL R13 4
+ 0xB8360E00, // 0277 GETNGBL R13 K7
+ 0x8C341B08, // 0278 GETMET R13 R13 K8
+ 0x583C002A, // 0279 LDCONST R15 K42
+ 0x54420003, // 027A LDINT R16 4
+ 0x7C340600, // 027B CALL R13 3
+ 0x88340B78, // 027C GETMBR R13 R5 K120
+ 0x90129C0D, // 027D SETMBR R4 K78 R13
+ 0xB8360E00, // 027E GETNGBL R13 K7
+ 0x8C341B08, // 027F GETMET R13 R13 K8
+ 0x883C093A, // 0280 GETMBR R15 R4 K58
+ 0x8C3C1F2C, // 0281 GETMET R15 R15 K44
+ 0x7C3C0200, // 0282 CALL R15 1
+ 0x003EF20F, // 0283 ADD R15 K121 R15
+ 0x54420003, // 0284 LDINT R16 4
+ 0x7C340600, // 0285 CALL R13 3
+ 0xB8360E00, // 0286 GETNGBL R13 K7
+ 0x8C341B08, // 0287 GETMET R13 R13 K8
+ 0x883C094E, // 0288 GETMBR R15 R4 K78
+ 0x8C3C1F2C, // 0289 GETMET R15 R15 K44
+ 0x7C3C0200, // 028A CALL R15 1
+ 0x003EF40F, // 028B ADD R15 K122 R15
+ 0x54420003, // 028C LDINT R16 4
+ 0x7C340600, // 028D CALL R13 3
+ 0x8C34057B, // 028E GETMET R13 R2 K123
+ 0x7C340200, // 028F CALL R13 1
+ 0x8C341B7C, // 0290 GETMET R13 R13 K124
+ 0x883C094E, // 0291 GETMBR R15 R4 K78
+ 0x7C340400, // 0292 CALL R13 2
+ 0x8C341B7D, // 0293 GETMET R13 R13 K125
+ 0x7C340200, // 0294 CALL R13 1
+ 0xB83A0E00, // 0295 GETNGBL R14 K7
+ 0x8C381D08, // 0296 GETMET R14 R14 K8
+ 0x8C401B2C, // 0297 GETMET R16 R13 K44
+ 0x7C400200, // 0298 CALL R16 1
+ 0x0042FC10, // 0299 ADD R16 K126 R16
+ 0x54460003, // 029A LDINT R17 4
+ 0x7C380600, // 029B CALL R14 3
+ 0x60380015, // 029C GETGBL R14 G21
+ 0x7C380000, // 029D CALL R14 0
+ 0x8C381D20, // 029E GETMET R14 R14 K32
+ 0x8840017F, // 029F GETMBR R16 R0 K127
+ 0x7C380400, // 02A0 CALL R14 2
+ 0x8C3C0980, // 02A1 GETMET R15 R4 K128
+ 0x7C3C0200, // 02A2 CALL R15 1
+ 0x003C1E09, // 02A3 ADD R15 R15 R9
+ 0x8840096A, // 02A4 GETMBR R16 R4 K106
+ 0x003C1E10, // 02A5 ADD R15 R15 R16
+ 0x003C1E0D, // 02A6 ADD R15 R15 R13
+ 0x8C400522, // 02A7 GETMET R16 R2 K34
+ 0x7C400200, // 02A8 CALL R16 1
+ 0x8C402123, // 02A9 GETMET R16 R16 K35
+ 0x88480924, // 02AA GETMBR R18 R4 K36
+ 0x5C4C1E00, // 02AB MOVE R19 R15
+ 0x5C501C00, // 02AC MOVE R20 R14
+ 0x5456000F, // 02AD LDINT R21 16
+ 0x7C400A00, // 02AE CALL R16 5
+ 0xB8460E00, // 02AF GETNGBL R17 K7
+ 0x8C442308, // 02B0 GETMET R17 R17 K8
+ 0x884C0924, // 02B1 GETMBR R19 R4 K36
+ 0x8C4C272C, // 02B2 GETMET R19 R19 K44
+ 0x7C4C0200, // 02B3 CALL R19 1
+ 0x004F0213, // 02B4 ADD R19 K129 R19
+ 0x54520003, // 02B5 LDINT R20 4
+ 0x7C440600, // 02B6 CALL R17 3
+ 0xB8460E00, // 02B7 GETNGBL R17 K7
+ 0x8C442308, // 02B8 GETMET R17 R17 K8
+ 0x8C4C1F2C, // 02B9 GETMET R19 R15 K44
+ 0x7C4C0200, // 02BA CALL R19 1
+ 0x004F0413, // 02BB ADD R19 K130 R19
+ 0x54520003, // 02BC LDINT R20 4
+ 0x7C440600, // 02BD CALL R17 3
+ 0xB8460E00, // 02BE GETNGBL R17 K7
+ 0x8C442308, // 02BF GETMET R17 R17 K8
+ 0x8C4C212C, // 02C0 GETMET R19 R16 K44
+ 0x7C4C0200, // 02C1 CALL R19 1
+ 0x004F0613, // 02C2 ADD R19 K131 R19
+ 0x54520003, // 02C3 LDINT R20 4
+ 0x7C440600, // 02C4 CALL R17 3
+ 0x8C44194D, // 02C5 GETMET R17 R12 K77
+ 0x7C440200, // 02C6 CALL R17 1
+ 0xB84A0E00, // 02C7 GETNGBL R18 K7
+ 0x8C482508, // 02C8 GETMET R18 R18 K8
+ 0x8C50232C, // 02C9 GETMET R20 R17 K44
+ 0x7C500200, // 02CA CALL R20 1
+ 0x00530814, // 02CB ADD R20 K132 R20
+ 0x54560003, // 02CC LDINT R21 4
+ 0x7C480600, // 02CD CALL R18 3
+ 0x8C480527, // 02CE GETMET R18 R2 K39
+ 0x5C502000, // 02CF MOVE R20 R16
+ 0x60540015, // 02D0 GETGBL R21 G21
+ 0x7C540000, // 02D1 CALL R21 0
+ 0x8C542B20, // 02D2 GETMET R21 R21 K32
+ 0x885C0185, // 02D3 GETMBR R23 R0 K133
+ 0x7C540400, // 02D4 CALL R21 2
+ 0x60580015, // 02D5 GETGBL R22 G21
+ 0x7C580000, // 02D6 CALL R22 0
+ 0x605C000C, // 02D7 GETGBL R23 G12
+ 0x5C602200, // 02D8 MOVE R24 R17
+ 0x7C5C0200, // 02D9 CALL R23 1
+ 0x5462000F, // 02DA LDINT R24 16
+ 0x7C480C00, // 02DB CALL R18 6
+ 0x8C4C2586, // 02DC GETMET R19 R18 K134
+ 0x5C542200, // 02DD MOVE R21 R17
+ 0x7C4C0400, // 02DE CALL R19 2
+ 0x8C502529, // 02DF GETMET R20 R18 K41
+ 0x7C500200, // 02E0 CALL R20 1
+ 0x004C2614, // 02E1 ADD R19 R19 R20
+ 0xB8520E00, // 02E2 GETNGBL R20 K7
+ 0x8C502908, // 02E3 GETMET R20 R20 K8
+ 0x8C58272C, // 02E4 GETMET R22 R19 K44
+ 0x7C580200, // 02E5 CALL R22 1
+ 0x005B0E16, // 02E6 ADD R22 K135 R22
+ 0x545E0003, // 02E7 LDINT R23 4
+ 0x7C500600, // 02E8 CALL R20 3
+ 0xB8520E00, // 02E9 GETNGBL R20 K7
+ 0x8C502908, // 02EA GETMET R20 R20 K8
+ 0x5858002A, // 02EB LDCONST R22 K42
+ 0x545E0003, // 02EC LDINT R23 4
+ 0x7C500600, // 02ED CALL R20 3
+ 0xB8521A00, // 02EE GETNGBL R20 K13
+ 0x8C502988, // 02EF GETMET R20 R20 K136
+ 0x7C500200, // 02F0 CALL R20 1
+ 0x90531209, // 02F1 SETMBR R20 K137 R9
+ 0x88540935, // 02F2 GETMBR R21 R4 K53
+ 0x90531415, // 02F3 SETMBR R20 K138 R21
+ 0x8854096A, // 02F4 GETMBR R21 R4 K106
+ 0x90531615, // 02F5 SETMBR R20 K139 R21
+ 0x90531813, // 02F6 SETMBR R20 K140 R19
+ 0xB8560E00, // 02F7 GETNGBL R21 K7
+ 0x8C542B08, // 02F8 GETMET R21 R21 K8
+ 0xB85E1A00, // 02F9 GETNGBL R23 K13
+ 0x8C5C2F14, // 02FA GETMET R23 R23 K20
+ 0x5C642800, // 02FB MOVE R25 R20
+ 0x7C5C0400, // 02FC CALL R23 2
+ 0x005F1A17, // 02FD ADD R23 K141 R23
+ 0x54620003, // 02FE LDINT R24 4
+ 0x7C540600, // 02FF CALL R21 3
+ 0x8C54294D, // 0300 GETMET R21 R20 K77
+ 0x7C540200, // 0301 CALL R21 1
+ 0x90131C15, // 0302 SETMBR R4 K142 R21
+ 0xB85A0E00, // 0303 GETNGBL R22 K7
+ 0x8C582D08, // 0304 GETMET R22 R22 K8
+ 0x8C602B2C, // 0305 GETMET R24 R21 K44
+ 0x7C600200, // 0306 CALL R24 1
+ 0x00631E18, // 0307 ADD R24 K143 R24
+ 0x54660003, // 0308 LDINT R25 4
+ 0x7C580600, // 0309 CALL R22 3
+ 0x8C580351, // 030A GETMET R22 R1 K81
+ 0x54620030, // 030B LDINT R24 49
+ 0x50640200, // 030C LDBOOL R25 1 0
+ 0x7C580600, // 030D CALL R22 3
+ 0x8C5C2D52, // 030E GETMET R23 R22 K82
+ 0x5C642A00, // 030F MOVE R25 R21
+ 0x7C5C0400, // 0310 CALL R23 2
+ 0x88600153, // 0311 GETMBR R24 R0 K83
+ 0x8C603154, // 0312 GETMET R24 R24 K84
+ 0x5C682C00, // 0313 MOVE R26 R22
+ 0x7C600400, // 0314 CALL R24 2
+ 0x50600200, // 0315 LDBOOL R24 1 0
+ 0x80043000, // 0316 RET 1 R24
+ 0x50200200, // 0317 LDBOOL R8 1 0
+ 0x80041000, // 0318 RET 1 R8
})
)
);
@@ -2390,46 +2684,30 @@ be_local_closure(Matter_Commisioning_Context_process_incoming, /* name */
** Solidified class: Matter_Commisioning_Context
********************************************************************/
be_local_class(Matter_Commisioning_Context,
- 21,
+ 2,
NULL,
- be_nested_map(36,
+ be_nested_map(20,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(parse_PBKDFParamRequest, -1), be_const_closure(Matter_Commisioning_Context_parse_PBKDFParamRequest_closure) },
- { be_const_key_weak(cA, 32), be_const_var(10) },
- { be_const_key_weak(PBKDFParamRequest, -1), be_const_var(5) },
- { be_const_key_weak(parse_Pake3, 20), be_const_closure(Matter_Commisioning_Context_parse_Pake3_closure) },
- { be_const_key_weak(cB, -1), be_const_var(11) },
- { be_const_key_weak(spake, -1), be_const_var(2) },
- { be_const_key_weak(find_session_by_destination_id, 2), be_const_closure(Matter_Commisioning_Context_find_session_by_destination_id_closure) },
- { be_const_key_weak(R2IKey, -1), be_const_var(18) },
- { be_const_key_weak(Ke, -1), be_const_var(12) },
- { be_const_key_weak(parse_Sigma1, -1), be_const_closure(Matter_Commisioning_Context_parse_Sigma1_closure) },
- { be_const_key_weak(SEKeys_Info, -1), be_nested_str_weak(SessionKeys) },
- { be_const_key_weak(I2RKey, -1), be_const_var(17) },
- { be_const_key_weak(ResponderEph_priv, -1), be_const_var(13) },
- { be_const_key_weak(parse_Pake1, -1), be_const_closure(Matter_Commisioning_Context_parse_Pake1_closure) },
- { be_const_key_weak(AttestationChallenge, -1), be_const_var(19) },
- { be_const_key_weak(init, 3), be_const_closure(Matter_Commisioning_Context_init_closure) },
- { be_const_key_weak(ResponderEph_pub, 6), be_const_var(14) },
- { be_const_key_weak(initiatorEph_pub, -1), be_const_var(15) },
- { be_const_key_weak(window_open, -1), be_const_var(20) },
- { be_const_key_weak(session_timestamp, 26), be_const_var(16) },
- { be_const_key_weak(future_local_session_id, 34), be_const_var(4) },
- { be_const_key_weak(Matter_Context_Prefix, 27), be_nested_str_weak(CHIP_X20PAKE_X20V1_X20Commissioning) },
- { be_const_key_weak(pA, 30), be_const_var(8) },
- { be_const_key_weak(pB, -1), be_const_var(9) },
- { be_const_key_weak(TBEData2_Nonce, -1), be_nested_str_weak(NCASE_Sigma2N) },
- { be_const_key_weak(future_initiator_session_id, -1), be_const_var(3) },
- { be_const_key_weak(PBKDFParamResponse, -1), be_const_var(6) },
{ be_const_key_weak(every_second, -1), be_const_closure(Matter_Commisioning_Context_every_second_closure) },
- { be_const_key_weak(y, 19), be_const_var(7) },
- { be_const_key_weak(parse_Sigma3, 8), be_const_closure(Matter_Commisioning_Context_parse_Sigma3_closure) },
+ { be_const_key_weak(parse_StatusReport, -1), be_const_closure(Matter_Commisioning_Context_parse_StatusReport_closure) },
{ be_const_key_weak(S2K_Info, -1), be_nested_str_weak(Sigma2) },
- { be_const_key_weak(TBEData3_Nonce, 9), be_nested_str_weak(NCASE_Sigma3N) },
- { be_const_key_weak(responder, -1), be_const_var(0) },
- { be_const_key_weak(S3K_Info, -1), be_nested_str_weak(Sigma3) },
+ { be_const_key_weak(find_fabric_by_destination_id, -1), be_const_closure(Matter_Commisioning_Context_find_fabric_by_destination_id_closure) },
+ { be_const_key_weak(process_incoming, 18), be_const_closure(Matter_Commisioning_Context_process_incoming_closure) },
+ { be_const_key_weak(Matter_Context_Prefix, 0), be_nested_str_weak(CHIP_X20PAKE_X20V1_X20Commissioning) },
+ { be_const_key_weak(SEKeys_Info, -1), be_nested_str_weak(SessionKeys) },
+ { be_const_key_weak(TBEData3_Nonce, 4), be_nested_str_weak(NCASE_Sigma3N) },
+ { be_const_key_weak(parse_PBKDFParamRequest, -1), be_const_closure(Matter_Commisioning_Context_parse_PBKDFParamRequest_closure) },
+ { be_const_key_weak(send_status_report, -1), be_const_closure(Matter_Commisioning_Context_send_status_report_closure) },
+ { be_const_key_weak(parse_Sigma3, -1), be_const_closure(Matter_Commisioning_Context_parse_Sigma3_closure) },
{ be_const_key_weak(device, -1), be_const_var(1) },
- { be_const_key_weak(process_incoming, -1), be_const_closure(Matter_Commisioning_Context_process_incoming_closure) },
+ { be_const_key_weak(TBEData2_Nonce, -1), be_nested_str_weak(NCASE_Sigma2N) },
+ { be_const_key_weak(responder, 16), be_const_var(0) },
+ { be_const_key_weak(parse_Pake3, -1), be_const_closure(Matter_Commisioning_Context_parse_Pake3_closure) },
+ { be_const_key_weak(init, 14), be_const_closure(Matter_Commisioning_Context_init_closure) },
+ { be_const_key_weak(parse_Pake1, -1), be_const_closure(Matter_Commisioning_Context_parse_Pake1_closure) },
+ { be_const_key_weak(S3K_Info, 10), be_nested_str_weak(Sigma3) },
+ { be_const_key_weak(add_session, -1), be_const_closure(Matter_Commisioning_Context_add_session_closure) },
+ { be_const_key_weak(parse_Sigma1, -1), be_const_closure(Matter_Commisioning_Context_parse_Sigma1_closure) },
})),
be_str_weak(Matter_Commisioning_Context)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Commissioning_Data.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Commissioning_Data.h
index 2c2bb647a..ff4c9ef5b 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Commissioning_Data.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Commissioning_Data.h
@@ -116,9 +116,9 @@ void be_load_Matter_PBKDFParamRequest_class(bvm *vm) {
extern const bclass be_class_Matter_PBKDFParamResponse;
/********************************************************************
-** Solidified function: encode
+** Solidified function: tlv2raw
********************************************************************/
-be_local_closure(Matter_PBKDFParamResponse_encode, /* name */
+be_local_closure(Matter_PBKDFParamResponse_tlv2raw, /* name */
be_nested_proto(
10, /* nstack */
2, /* argc */
@@ -147,11 +147,11 @@ be_local_closure(Matter_PBKDFParamResponse_encode, /* name */
/* K15 */ be_nested_str_weak(pbkdf_parameters_salt),
/* K16 */ be_nested_str_weak(SLEEPY_IDLE_INTERVAL),
/* K17 */ be_nested_str_weak(SLEEPY_ACTIVE_INTERVAL),
- /* K18 */ be_nested_str_weak(encode),
+ /* K18 */ be_nested_str_weak(tlv2raw),
}),
- be_str_weak(encode),
+ be_str_weak(tlv2raw),
&be_const_str_solidified,
- ( &(const binstruction[70]) { /* code */
+ ( &(const binstruction[71]) { /* code */
0xB80A0000, // 0000 GETNGBL R2 K0
0x88080501, // 0001 GETMBR R2 R2 K1
0x8C080502, // 0002 GETMET R2 R2 K2
@@ -220,8 +220,9 @@ be_local_closure(Matter_PBKDFParamResponse_encode, /* name */
0x88240111, // 0041 GETMBR R9 R0 K17
0x7C140800, // 0042 CALL R5 4
0x8C100512, // 0043 GETMET R4 R2 K18
- 0x7C100200, // 0044 CALL R4 1
- 0x80040800, // 0045 RET 1 R4
+ 0x5C180200, // 0044 MOVE R6 R1
+ 0x7C100400, // 0045 CALL R4 2
+ 0x80040800, // 0046 RET 1 R4
})
)
);
@@ -237,13 +238,13 @@ be_local_class(Matter_PBKDFParamResponse,
be_nested_map(8,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_weak(pbkdf_parameters_salt, -1), be_const_var(4) },
- { be_const_key_weak(SLEEPY_IDLE_INTERVAL, -1), be_const_var(5) },
- { be_const_key_weak(SLEEPY_ACTIVE_INTERVAL, 1), be_const_var(6) },
- { be_const_key_weak(responderRandom, -1), be_const_var(1) },
+ { be_const_key_weak(SLEEPY_ACTIVE_INTERVAL, -1), be_const_var(6) },
+ { be_const_key_weak(SLEEPY_IDLE_INTERVAL, 1), be_const_var(5) },
+ { be_const_key_weak(responderSessionId, -1), be_const_var(2) },
{ be_const_key_weak(pbkdf_parameters_iterations, -1), be_const_var(3) },
- { be_const_key_weak(initiatorRandom, -1), be_const_var(0) },
- { be_const_key_weak(responderSessionId, 3), be_const_var(2) },
- { be_const_key_weak(encode, -1), be_const_closure(Matter_PBKDFParamResponse_encode_closure) },
+ { be_const_key_weak(initiatorRandom, 7), be_const_var(0) },
+ { be_const_key_weak(responderRandom, 3), be_const_var(1) },
+ { be_const_key_weak(tlv2raw, -1), be_const_closure(Matter_PBKDFParamResponse_tlv2raw_closure) },
})),
be_str_weak(Matter_PBKDFParamResponse)
);
@@ -270,7 +271,7 @@ be_local_closure(Matter_Pake1_parse, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[11]) { /* constants */
+ ( &(const bvalue[10]) { /* constants */
/* K0 */ be_const_int(0),
/* K1 */ be_nested_str_weak(matter),
/* K2 */ be_nested_str_weak(TLV),
@@ -278,10 +279,9 @@ be_local_closure(Matter_Pake1_parse, /* name */
/* K4 */ be_nested_str_weak(tasmota),
/* K5 */ be_nested_str_weak(log),
/* K6 */ be_nested_str_weak(MTR_X3A_X20parsed_X20TLV_X3A_X20),
- /* K7 */ be_const_int(3),
- /* K8 */ be_nested_str_weak(pA),
- /* K9 */ be_nested_str_weak(getsubval),
- /* K10 */ be_const_int(1),
+ /* K7 */ be_nested_str_weak(pA),
+ /* K8 */ be_nested_str_weak(getsubval),
+ /* K9 */ be_const_int(1),
}),
be_str_weak(parse),
&be_const_str_solidified,
@@ -302,12 +302,12 @@ be_local_closure(Matter_Pake1_parse, /* name */
0x5C1C0600, // 000D MOVE R7 R3
0x7C180200, // 000E CALL R6 1
0x001A0C06, // 000F ADD R6 K6 R6
- 0x581C0007, // 0010 LDCONST R7 K7
+ 0x541E0003, // 0010 LDINT R7 4
0x7C100600, // 0011 CALL R4 3
- 0x8C100709, // 0012 GETMET R4 R3 K9
- 0x5818000A, // 0013 LDCONST R6 K10
+ 0x8C100708, // 0012 GETMET R4 R3 K8
+ 0x58180009, // 0013 LDCONST R6 K9
0x7C100400, // 0014 CALL R4 2
- 0x90021004, // 0015 SETMBR R0 K8 R4
+ 0x90020E04, // 0015 SETMBR R0 K7 R4
0x80040000, // 0016 RET 1 R0
})
)
@@ -339,9 +339,9 @@ void be_load_Matter_Pake1_class(bvm *vm) {
extern const bclass be_class_Matter_Pake2;
/********************************************************************
-** Solidified function: encode
+** Solidified function: tlv2raw
********************************************************************/
-be_local_closure(Matter_Pake2_encode, /* name */
+be_local_closure(Matter_Pake2_tlv2raw, /* name */
be_nested_proto(
8, /* nstack */
2, /* argc */
@@ -361,11 +361,11 @@ be_local_closure(Matter_Pake2_encode, /* name */
/* K6 */ be_nested_str_weak(pB),
/* K7 */ be_const_int(2),
/* K8 */ be_nested_str_weak(cB),
- /* K9 */ be_nested_str_weak(encode),
+ /* K9 */ be_nested_str_weak(tlv2raw),
}),
- be_str_weak(encode),
+ be_str_weak(tlv2raw),
&be_const_str_solidified,
- ( &(const binstruction[21]) { /* code */
+ ( &(const binstruction[22]) { /* code */
0xB80A0000, // 0000 GETNGBL R2 K0
0x88080501, // 0001 GETMBR R2 R2 K1
0x8C080502, // 0002 GETMET R2 R2 K2
@@ -385,8 +385,9 @@ be_local_closure(Matter_Pake2_encode, /* name */
0x881C0108, // 0010 GETMBR R7 R0 K8
0x7C0C0800, // 0011 CALL R3 4
0x8C0C0509, // 0012 GETMET R3 R2 K9
- 0x7C0C0200, // 0013 CALL R3 1
- 0x80040600, // 0014 RET 1 R3
+ 0x5C140200, // 0013 MOVE R5 R1
+ 0x7C0C0400, // 0014 CALL R3 2
+ 0x80040600, // 0015 RET 1 R3
})
)
);
@@ -401,7 +402,7 @@ be_local_class(Matter_Pake2,
NULL,
be_nested_map(3,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(encode, -1), be_const_closure(Matter_Pake2_encode_closure) },
+ { be_const_key_weak(tlv2raw, -1), be_const_closure(Matter_Pake2_tlv2raw_closure) },
{ be_const_key_weak(cB, -1), be_const_var(1) },
{ be_const_key_weak(pB, 0), be_const_var(0) },
})),
@@ -430,7 +431,7 @@ be_local_closure(Matter_Pake3_parse, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[11]) { /* constants */
+ ( &(const bvalue[10]) { /* constants */
/* K0 */ be_const_int(0),
/* K1 */ be_nested_str_weak(matter),
/* K2 */ be_nested_str_weak(TLV),
@@ -438,10 +439,9 @@ be_local_closure(Matter_Pake3_parse, /* name */
/* K4 */ be_nested_str_weak(tasmota),
/* K5 */ be_nested_str_weak(log),
/* K6 */ be_nested_str_weak(MTR_X3A_X20parsed_X20TLV_X3A_X20),
- /* K7 */ be_const_int(3),
- /* K8 */ be_nested_str_weak(cA),
- /* K9 */ be_nested_str_weak(getsubval),
- /* K10 */ be_const_int(1),
+ /* K7 */ be_nested_str_weak(cA),
+ /* K8 */ be_nested_str_weak(getsubval),
+ /* K9 */ be_const_int(1),
}),
be_str_weak(parse),
&be_const_str_solidified,
@@ -462,12 +462,12 @@ be_local_closure(Matter_Pake3_parse, /* name */
0x5C1C0600, // 000D MOVE R7 R3
0x7C180200, // 000E CALL R6 1
0x001A0C06, // 000F ADD R6 K6 R6
- 0x581C0007, // 0010 LDCONST R7 K7
+ 0x541E0003, // 0010 LDINT R7 4
0x7C100600, // 0011 CALL R4 3
- 0x8C100709, // 0012 GETMET R4 R3 K9
- 0x5818000A, // 0013 LDCONST R6 K10
+ 0x8C100708, // 0012 GETMET R4 R3 K8
+ 0x58180009, // 0013 LDCONST R6 K9
0x7C100400, // 0014 CALL R4 2
- 0x90021004, // 0015 SETMBR R0 K8 R4
+ 0x90020E04, // 0015 SETMBR R0 K7 R4
0x80040000, // 0016 RET 1 R0
})
)
@@ -503,7 +503,7 @@ extern const bclass be_class_Matter_Sigma1;
********************************************************************/
be_local_closure(Matter_Sigma1_parse, /* name */
be_nested_proto(
- 9, /* nstack */
+ 8, /* nstack */
3, /* argc */
2, /* varg */
0, /* has upvals */
@@ -511,7 +511,7 @@ be_local_closure(Matter_Sigma1_parse, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[21]) { /* constants */
+ ( &(const bvalue[23]) { /* constants */
/* K0 */ be_const_int(0),
/* K1 */ be_nested_str_weak(matter),
/* K2 */ be_nested_str_weak(TLV),
@@ -521,22 +521,24 @@ be_local_closure(Matter_Sigma1_parse, /* name */
/* K6 */ be_nested_str_weak(tasmota),
/* K7 */ be_nested_str_weak(log),
/* K8 */ be_nested_str_weak(MTR_X3A_X20Sigma1_X20TLV_X3D),
- /* K9 */ be_const_int(3),
- /* K10 */ be_nested_str_weak(initiatorRandom),
- /* K11 */ be_nested_str_weak(getsubval),
- /* K12 */ be_const_int(1),
- /* K13 */ be_nested_str_weak(initiator_session_id),
- /* K14 */ be_const_int(2),
- /* K15 */ be_nested_str_weak(destinationId),
+ /* K9 */ be_nested_str_weak(initiatorRandom),
+ /* K10 */ be_nested_str_weak(getsubval),
+ /* K11 */ be_const_int(1),
+ /* K12 */ be_nested_str_weak(initiator_session_id),
+ /* K13 */ be_const_int(2),
+ /* K14 */ be_nested_str_weak(destinationId),
+ /* K15 */ be_const_int(3),
/* K16 */ be_nested_str_weak(initiatorEphPubKey),
/* K17 */ be_nested_str_weak(findsub),
/* K18 */ be_nested_str_weak(SLEEPY_IDLE_INTERVAL),
/* K19 */ be_nested_str_weak(findsubval),
/* K20 */ be_nested_str_weak(SLEEPY_ACTIVE_INTERVAL),
+ /* K21 */ be_nested_str_weak(resumptionID),
+ /* K22 */ be_nested_str_weak(initiatorResumeMIC),
}),
be_str_weak(parse),
&be_const_str_solidified,
- ( &(const binstruction[58]) { /* code */
+ ( &(const binstruction[60]) { /* code */
0x4C0C0000, // 0000 LDNIL R3
0x1C0C0403, // 0001 EQ R3 R2 R3
0x780E0000, // 0002 JMPF R3 #0004
@@ -556,21 +558,21 @@ be_local_closure(Matter_Sigma1_parse, /* name */
0x5C1C0600, // 0010 MOVE R7 R3
0x7C180200, // 0011 CALL R6 1
0x001A1006, // 0012 ADD R6 K8 R6
- 0x581C0009, // 0013 LDCONST R7 K9
+ 0x541E0003, // 0013 LDINT R7 4
0x7C100600, // 0014 CALL R4 3
- 0x8C10070B, // 0015 GETMET R4 R3 K11
- 0x5818000C, // 0016 LDCONST R6 K12
+ 0x8C10070A, // 0015 GETMET R4 R3 K10
+ 0x5818000B, // 0016 LDCONST R6 K11
0x7C100400, // 0017 CALL R4 2
- 0x90021404, // 0018 SETMBR R0 K10 R4
- 0x8C10070B, // 0019 GETMET R4 R3 K11
- 0x5818000E, // 001A LDCONST R6 K14
+ 0x90021204, // 0018 SETMBR R0 K9 R4
+ 0x8C10070A, // 0019 GETMET R4 R3 K10
+ 0x5818000D, // 001A LDCONST R6 K13
0x7C100400, // 001B CALL R4 2
- 0x90021A04, // 001C SETMBR R0 K13 R4
- 0x8C10070B, // 001D GETMET R4 R3 K11
- 0x58180009, // 001E LDCONST R6 K9
+ 0x90021804, // 001C SETMBR R0 K12 R4
+ 0x8C10070A, // 001D GETMET R4 R3 K10
+ 0x5818000F, // 001E LDCONST R6 K15
0x7C100400, // 001F CALL R4 2
- 0x90021E04, // 0020 SETMBR R0 K15 R4
- 0x8C10070B, // 0021 GETMET R4 R3 K11
+ 0x90021C04, // 0020 SETMBR R0 K14 R4
+ 0x8C10070A, // 0021 GETMET R4 R3 K10
0x541A0003, // 0022 LDINT R6 4
0x7C100400, // 0023 CALL R4 2
0x90022004, // 0024 SETMBR R0 K16 R4
@@ -581,20 +583,22 @@ be_local_closure(Matter_Sigma1_parse, /* name */
0x20140805, // 0029 NE R5 R4 R5
0x78160007, // 002A JMPF R5 #0033
0x8C140913, // 002B GETMET R5 R4 K19
- 0x581C000C, // 002C LDCONST R7 K12
+ 0x581C000B, // 002C LDCONST R7 K11
0x7C140400, // 002D CALL R5 2
0x90022405, // 002E SETMBR R0 K18 R5
0x8C140913, // 002F GETMET R5 R4 K19
- 0x581C000E, // 0030 LDCONST R7 K14
+ 0x581C000D, // 0030 LDCONST R7 K13
0x7C140400, // 0031 CALL R5 2
0x90022805, // 0032 SETMBR R0 K20 R5
- 0x8C140711, // 0033 GETMET R5 R3 K17
+ 0x8C140713, // 0033 GETMET R5 R3 K19
0x541E0005, // 0034 LDINT R7 6
0x7C140400, // 0035 CALL R5 2
- 0x8C180711, // 0036 GETMET R6 R3 K17
- 0x54220006, // 0037 LDINT R8 7
- 0x7C180400, // 0038 CALL R6 2
- 0x80040000, // 0039 RET 1 R0
+ 0x90022A05, // 0036 SETMBR R0 K21 R5
+ 0x8C140713, // 0037 GETMET R5 R3 K19
+ 0x541E0006, // 0038 LDINT R7 7
+ 0x7C140400, // 0039 CALL R5 2
+ 0x90022C05, // 003A SETMBR R0 K22 R5
+ 0x80040000, // 003B RET 1 R0
})
)
);
@@ -633,9 +637,9 @@ void be_load_Matter_Sigma1_class(bvm *vm) {
extern const bclass be_class_Matter_Sigma2;
/********************************************************************
-** Solidified function: encode
+** Solidified function: tlv2raw
********************************************************************/
-be_local_closure(Matter_Sigma2_encode, /* name */
+be_local_closure(Matter_Sigma2_tlv2raw, /* name */
be_nested_proto(
9, /* nstack */
2, /* argc */
@@ -663,11 +667,11 @@ be_local_closure(Matter_Sigma2_encode, /* name */
/* K14 */ be_nested_str_weak(SLEEPY_ACTIVE_INTERVAL),
/* K15 */ be_nested_str_weak(add_struct),
/* K16 */ be_nested_str_weak(U4),
- /* K17 */ be_nested_str_weak(encode),
+ /* K17 */ be_nested_str_weak(tlv2raw),
}),
- be_str_weak(encode),
+ be_str_weak(tlv2raw),
&be_const_str_solidified,
- ( &(const binstruction[60]) { /* code */
+ ( &(const binstruction[61]) { /* code */
0xB80A0000, // 0000 GETNGBL R2 K0
0x88080501, // 0001 GETMBR R2 R2 K1
0x8C080502, // 0002 GETMET R2 R2 K2
@@ -726,8 +730,9 @@ be_local_closure(Matter_Sigma2_encode, /* name */
0x8820010E, // 0037 GETMBR R8 R0 K14
0x7C100800, // 0038 CALL R4 4
0x8C0C0511, // 0039 GETMET R3 R2 K17
- 0x7C0C0200, // 003A CALL R3 1
- 0x80040600, // 003B RET 1 R3
+ 0x5C140200, // 003A MOVE R5 R1
+ 0x7C0C0400, // 003B CALL R3 2
+ 0x80040600, // 003C RET 1 R3
})
)
);
@@ -742,13 +747,13 @@ be_local_class(Matter_Sigma2,
NULL,
be_nested_map(7,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(encrypted2, -1), be_const_var(3) },
- { be_const_key_weak(encode, -1), be_const_closure(Matter_Sigma2_encode_closure) },
+ { be_const_key_weak(tlv2raw, -1), be_const_closure(Matter_Sigma2_tlv2raw_closure) },
+ { be_const_key_weak(responderEphPubKey, 3), be_const_var(2) },
{ be_const_key_weak(responderSessionId, -1), be_const_var(1) },
- { be_const_key_weak(SLEEPY_IDLE_INTERVAL, 6), be_const_var(4) },
- { be_const_key_weak(SLEEPY_ACTIVE_INTERVAL, 0), be_const_var(5) },
- { be_const_key_weak(responderRandom, 3), be_const_var(0) },
- { be_const_key_weak(responderEphPubKey, -1), be_const_var(2) },
+ { be_const_key_weak(SLEEPY_IDLE_INTERVAL, -1), be_const_var(4) },
+ { be_const_key_weak(SLEEPY_ACTIVE_INTERVAL, 6), be_const_var(5) },
+ { be_const_key_weak(responderRandom, 1), be_const_var(0) },
+ { be_const_key_weak(encrypted2, -1), be_const_var(3) },
})),
be_str_weak(Matter_Sigma2)
);
@@ -763,9 +768,9 @@ void be_load_Matter_Sigma2_class(bvm *vm) {
extern const bclass be_class_Matter_Sigma2Resume;
/********************************************************************
-** Solidified function: encode
+** Solidified function: tlv2raw
********************************************************************/
-be_local_closure(Matter_Sigma2Resume_encode, /* name */
+be_local_closure(Matter_Sigma2Resume_tlv2raw, /* name */
be_nested_proto(
9, /* nstack */
2, /* argc */
@@ -775,7 +780,7 @@ be_local_closure(Matter_Sigma2Resume_encode, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[16]) { /* constants */
+ ( &(const bvalue[17]) { /* constants */
/* K0 */ be_nested_str_weak(matter),
/* K1 */ be_nested_str_weak(TLV),
/* K2 */ be_nested_str_weak(Matter_TLV_struct),
@@ -786,16 +791,17 @@ be_local_closure(Matter_Sigma2Resume_encode, /* name */
/* K7 */ be_const_int(2),
/* K8 */ be_nested_str_weak(sigma2ResumeMIC),
/* K9 */ be_const_int(3),
- /* K10 */ be_nested_str_weak(responderSessionID),
- /* K11 */ be_nested_str_weak(SLEEPY_IDLE_INTERVAL),
- /* K12 */ be_nested_str_weak(SLEEPY_ACTIVE_INTERVAL),
- /* K13 */ be_nested_str_weak(add_struct),
- /* K14 */ be_nested_str_weak(U4),
- /* K15 */ be_nested_str_weak(encode),
+ /* K10 */ be_nested_str_weak(U2),
+ /* K11 */ be_nested_str_weak(responderSessionID),
+ /* K12 */ be_nested_str_weak(SLEEPY_IDLE_INTERVAL),
+ /* K13 */ be_nested_str_weak(SLEEPY_ACTIVE_INTERVAL),
+ /* K14 */ be_nested_str_weak(add_struct),
+ /* K15 */ be_nested_str_weak(U4),
+ /* K16 */ be_nested_str_weak(tlv2raw),
}),
- be_str_weak(encode),
+ be_str_weak(tlv2raw),
&be_const_str_solidified,
- ( &(const binstruction[53]) { /* code */
+ ( &(const binstruction[54]) { /* code */
0xB80A0000, // 0000 GETNGBL R2 K0
0x88080501, // 0001 GETMBR R2 R2 K1
0x8C080502, // 0002 GETMET R2 R2 K2
@@ -818,37 +824,38 @@ be_local_closure(Matter_Sigma2Resume_encode, /* name */
0x58140009, // 0013 LDCONST R5 K9
0xB81A0000, // 0014 GETNGBL R6 K0
0x88180D01, // 0015 GETMBR R6 R6 K1
- 0x88180D05, // 0016 GETMBR R6 R6 K5
- 0x881C010A, // 0017 GETMBR R7 R0 K10
+ 0x88180D0A, // 0016 GETMBR R6 R6 K10
+ 0x881C010B, // 0017 GETMBR R7 R0 K11
0x7C0C0800, // 0018 CALL R3 4
- 0x880C010B, // 0019 GETMBR R3 R0 K11
+ 0x880C010C, // 0019 GETMBR R3 R0 K12
0x4C100000, // 001A LDNIL R4
0x200C0604, // 001B NE R3 R3 R4
0x740E0003, // 001C JMPT R3 #0021
- 0x880C010C, // 001D GETMBR R3 R0 K12
+ 0x880C010D, // 001D GETMBR R3 R0 K13
0x4C100000, // 001E LDNIL R4
0x200C0604, // 001F NE R3 R3 R4
0x780E0010, // 0020 JMPF R3 #0032
- 0x8C0C050D, // 0021 GETMET R3 R2 K13
+ 0x8C0C050E, // 0021 GETMET R3 R2 K14
0x54160003, // 0022 LDINT R5 4
0x7C0C0400, // 0023 CALL R3 2
0x8C100703, // 0024 GETMET R4 R3 K3
0x58180004, // 0025 LDCONST R6 K4
0xB81E0000, // 0026 GETNGBL R7 K0
0x881C0F01, // 0027 GETMBR R7 R7 K1
- 0x881C0F0E, // 0028 GETMBR R7 R7 K14
- 0x8820010B, // 0029 GETMBR R8 R0 K11
+ 0x881C0F0F, // 0028 GETMBR R7 R7 K15
+ 0x8820010C, // 0029 GETMBR R8 R0 K12
0x7C100800, // 002A CALL R4 4
0x8C100703, // 002B GETMET R4 R3 K3
0x58180007, // 002C LDCONST R6 K7
0xB81E0000, // 002D GETNGBL R7 K0
0x881C0F01, // 002E GETMBR R7 R7 K1
- 0x881C0F0E, // 002F GETMBR R7 R7 K14
- 0x8820010C, // 0030 GETMBR R8 R0 K12
+ 0x881C0F0F, // 002F GETMBR R7 R7 K15
+ 0x8820010D, // 0030 GETMBR R8 R0 K13
0x7C100800, // 0031 CALL R4 4
- 0x8C0C050F, // 0032 GETMET R3 R2 K15
- 0x7C0C0200, // 0033 CALL R3 1
- 0x80040600, // 0034 RET 1 R3
+ 0x8C0C0510, // 0032 GETMET R3 R2 K16
+ 0x5C140200, // 0033 MOVE R5 R1
+ 0x7C0C0400, // 0034 CALL R3 2
+ 0x80040600, // 0035 RET 1 R3
})
)
);
@@ -868,7 +875,7 @@ be_local_class(Matter_Sigma2Resume,
{ be_const_key_weak(sigma2ResumeMIC, -1), be_const_var(1) },
{ be_const_key_weak(responderSessionID, 1), be_const_var(2) },
{ be_const_key_weak(SLEEPY_ACTIVE_INTERVAL, -1), be_const_var(4) },
- { be_const_key_weak(encode, -1), be_const_closure(Matter_Sigma2Resume_encode_closure) },
+ { be_const_key_weak(tlv2raw, -1), be_const_closure(Matter_Sigma2Resume_tlv2raw_closure) },
})),
be_str_weak(Matter_Sigma2Resume)
);
@@ -895,7 +902,7 @@ be_local_closure(Matter_Sigma3_parse, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[13]) { /* constants */
+ ( &(const bvalue[12]) { /* constants */
/* K0 */ be_const_int(0),
/* K1 */ be_nested_str_weak(matter),
/* K2 */ be_nested_str_weak(TLV),
@@ -905,10 +912,9 @@ be_local_closure(Matter_Sigma3_parse, /* name */
/* K6 */ be_nested_str_weak(tasmota),
/* K7 */ be_nested_str_weak(log),
/* K8 */ be_nested_str_weak(MTR_X3A_X20Sigma3_X20TLV_X3D),
- /* K9 */ be_const_int(3),
- /* K10 */ be_nested_str_weak(TBEData3Encrypted),
- /* K11 */ be_nested_str_weak(getsubval),
- /* K12 */ be_const_int(1),
+ /* K9 */ be_nested_str_weak(TBEData3Encrypted),
+ /* K10 */ be_nested_str_weak(getsubval),
+ /* K11 */ be_const_int(1),
}),
be_str_weak(parse),
&be_const_str_solidified,
@@ -932,12 +938,12 @@ be_local_closure(Matter_Sigma3_parse, /* name */
0x5C1C0600, // 0010 MOVE R7 R3
0x7C180200, // 0011 CALL R6 1
0x001A1006, // 0012 ADD R6 K8 R6
- 0x581C0009, // 0013 LDCONST R7 K9
+ 0x541E0003, // 0013 LDINT R7 4
0x7C100600, // 0014 CALL R4 3
- 0x8C10070B, // 0015 GETMET R4 R3 K11
- 0x5818000C, // 0016 LDCONST R6 K12
+ 0x8C10070A, // 0015 GETMET R4 R3 K10
+ 0x5818000B, // 0016 LDCONST R6 K11
0x7C100400, // 0017 CALL R4 2
- 0x90021404, // 0018 SETMBR R0 K10 R4
+ 0x90021204, // 0018 SETMBR R0 K9 R4
0x80040000, // 0019 RET 1 R0
})
)
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Control_Message.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Control_Message.h
new file mode 100644
index 000000000..967c09a27
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Control_Message.h
@@ -0,0 +1,246 @@
+/* Solidification of Matter_Control_Message.h */
+/********************************************************************\
+* Generated code, don't edit *
+\********************************************************************/
+#include "be_constobj.h"
+
+extern const bclass be_class_Matter_Control_Message;
+
+/********************************************************************
+** Solidified function: parse_MsgCounterSyncRsp
+********************************************************************/
+be_local_closure(Matter_Control_Message_parse_MsgCounterSyncRsp, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[11]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(session),
+ /* K2 */ be_nested_str_weak(tasmota),
+ /* K3 */ be_nested_str_weak(log),
+ /* K4 */ be_nested_str_weak(format),
+ /* K5 */ be_nested_str_weak(MTR_X3A_X20_X3EMCSyncRsp_X20_X2A_X20Not_X20implemented_X20_X25s),
+ /* K6 */ be_nested_str_weak(raw),
+ /* K7 */ be_nested_str_weak(app_payload_idx),
+ /* K8 */ be_const_int(2147483647),
+ /* K9 */ be_nested_str_weak(tohex),
+ /* K10 */ be_const_int(2),
+ }),
+ be_str_weak(parse_MsgCounterSyncRsp),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0x880C0301, // 0001 GETMBR R3 R1 K1
+ 0xB8120400, // 0002 GETNGBL R4 K2
+ 0x8C100903, // 0003 GETMET R4 R4 K3
+ 0x8C180504, // 0004 GETMET R6 R2 K4
+ 0x58200005, // 0005 LDCONST R8 K5
+ 0x88240307, // 0006 GETMBR R9 R1 K7
+ 0x40241308, // 0007 CONNECT R9 R9 K8
+ 0x88280306, // 0008 GETMBR R10 R1 K6
+ 0x94241409, // 0009 GETIDX R9 R10 R9
+ 0x8C241309, // 000A GETMET R9 R9 K9
+ 0x7C240200, // 000B CALL R9 1
+ 0x7C180600, // 000C CALL R6 3
+ 0x581C000A, // 000D LDCONST R7 K10
+ 0x7C100600, // 000E CALL R4 3
+ 0x50100000, // 000F LDBOOL R4 0 0
+ 0x80040800, // 0010 RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: parse_MsgCounterSyncReq
+********************************************************************/
+be_local_closure(Matter_Control_Message_parse_MsgCounterSyncReq, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[11]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(session),
+ /* K2 */ be_nested_str_weak(tasmota),
+ /* K3 */ be_nested_str_weak(log),
+ /* K4 */ be_nested_str_weak(format),
+ /* K5 */ be_nested_str_weak(MTR_X3A_X20_X3EMCSyncReq_X20_X2A_X20Not_X20implemented_X20_X25s),
+ /* K6 */ be_nested_str_weak(raw),
+ /* K7 */ be_nested_str_weak(app_payload_idx),
+ /* K8 */ be_const_int(2147483647),
+ /* K9 */ be_nested_str_weak(tohex),
+ /* K10 */ be_const_int(2),
+ }),
+ be_str_weak(parse_MsgCounterSyncReq),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0x880C0301, // 0001 GETMBR R3 R1 K1
+ 0xB8120400, // 0002 GETNGBL R4 K2
+ 0x8C100903, // 0003 GETMET R4 R4 K3
+ 0x8C180504, // 0004 GETMET R6 R2 K4
+ 0x58200005, // 0005 LDCONST R8 K5
+ 0x88240307, // 0006 GETMBR R9 R1 K7
+ 0x40241308, // 0007 CONNECT R9 R9 K8
+ 0x88280306, // 0008 GETMBR R10 R1 K6
+ 0x94241409, // 0009 GETIDX R9 R10 R9
+ 0x8C241309, // 000A GETMET R9 R9 K9
+ 0x7C240200, // 000B CALL R9 1
+ 0x7C180600, // 000C CALL R6 3
+ 0x581C000A, // 000D LDCONST R7 K10
+ 0x7C100600, // 000E CALL R4 3
+ 0x50100000, // 000F LDBOOL R4 0 0
+ 0x80040800, // 0010 RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_Control_Message_init, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(crypto),
+ /* K1 */ be_nested_str_weak(responder),
+ /* K2 */ be_nested_str_weak(device),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0x90020201, // 0001 SETMBR R0 K1 R1
+ 0x880C0302, // 0002 GETMBR R3 R1 K2
+ 0x90020403, // 0003 SETMBR R0 K2 R3
+ 0x80000000, // 0004 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: process_incoming_control_message
+********************************************************************/
+be_local_closure(Matter_Control_Message_process_incoming_control_message, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[14]) { /* constants */
+ /* K0 */ be_nested_str_weak(tasmota),
+ /* K1 */ be_nested_str_weak(log),
+ /* K2 */ be_nested_str_weak(MTR_X3A_X20received_X20control_X20message_X20),
+ /* K3 */ be_nested_str_weak(matter),
+ /* K4 */ be_nested_str_weak(inspect),
+ /* K5 */ be_const_int(2),
+ /* K6 */ be_nested_str_weak(opcode),
+ /* K7 */ be_const_int(0),
+ /* K8 */ be_nested_str_weak(parse_MsgCounterSyncReq),
+ /* K9 */ be_const_int(1),
+ /* K10 */ be_nested_str_weak(parse_MsgCounterSyncRsp),
+ /* K11 */ be_nested_str_weak(string),
+ /* K12 */ be_nested_str_weak(format),
+ /* K13 */ be_nested_str_weak(MTR_X3A_X20_X3E_X3F_X3F_X3F_X3F_X3F_X3F_X3F_X3F_X3F_X20Unknown_X20OpCode_X20_X28control_X20message_X29_X20_X2502X),
+ }),
+ be_str_weak(process_incoming_control_message),
+ &be_const_str_solidified,
+ ( &(const binstruction[38]) { /* code */
+ 0xB80A0000, // 0000 GETNGBL R2 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0xB8120600, // 0002 GETNGBL R4 K3
+ 0x8C100904, // 0003 GETMET R4 R4 K4
+ 0x5C180200, // 0004 MOVE R6 R1
+ 0x7C100400, // 0005 CALL R4 2
+ 0x00120404, // 0006 ADD R4 K2 R4
+ 0x58140005, // 0007 LDCONST R5 K5
+ 0x7C080600, // 0008 CALL R2 3
+ 0x88080306, // 0009 GETMBR R2 R1 K6
+ 0x1C080507, // 000A EQ R2 R2 K7
+ 0x780A0004, // 000B JMPF R2 #0011
+ 0x8C080108, // 000C GETMET R2 R0 K8
+ 0x5C100200, // 000D MOVE R4 R1
+ 0x7C080400, // 000E CALL R2 2
+ 0x80040400, // 000F RET 1 R2
+ 0x70020012, // 0010 JMP #0024
+ 0x88080306, // 0011 GETMBR R2 R1 K6
+ 0x1C080509, // 0012 EQ R2 R2 K9
+ 0x780A0004, // 0013 JMPF R2 #0019
+ 0x8C08010A, // 0014 GETMET R2 R0 K10
+ 0x5C100200, // 0015 MOVE R4 R1
+ 0x7C080400, // 0016 CALL R2 2
+ 0x80040400, // 0017 RET 1 R2
+ 0x7002000A, // 0018 JMP #0024
+ 0xA40A1600, // 0019 IMPORT R2 K11
+ 0xB80E0000, // 001A GETNGBL R3 K0
+ 0x8C0C0701, // 001B GETMET R3 R3 K1
+ 0x8C14050C, // 001C GETMET R5 R2 K12
+ 0x581C000D, // 001D LDCONST R7 K13
+ 0x88200306, // 001E GETMBR R8 R1 K6
+ 0x7C140600, // 001F CALL R5 3
+ 0x58180005, // 0020 LDCONST R6 K5
+ 0x7C0C0600, // 0021 CALL R3 3
+ 0x500C0000, // 0022 LDBOOL R3 0 0
+ 0x80040600, // 0023 RET 1 R3
+ 0x50080000, // 0024 LDBOOL R2 0 0
+ 0x80040400, // 0025 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_Control_Message
+********************************************************************/
+be_local_class(Matter_Control_Message,
+ 2,
+ NULL,
+ be_nested_map(6,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(parse_MsgCounterSyncRsp, -1), be_const_closure(Matter_Control_Message_parse_MsgCounterSyncRsp_closure) },
+ { be_const_key_weak(responder, 2), be_const_var(0) },
+ { be_const_key_weak(parse_MsgCounterSyncReq, -1), be_const_closure(Matter_Control_Message_parse_MsgCounterSyncReq_closure) },
+ { be_const_key_weak(init, 4), be_const_closure(Matter_Control_Message_init_closure) },
+ { be_const_key_weak(device, -1), be_const_var(1) },
+ { be_const_key_weak(process_incoming_control_message, -1), be_const_closure(Matter_Control_Message_process_incoming_control_message_closure) },
+ })),
+ be_str_weak(Matter_Control_Message)
+);
+/*******************************************************************/
+
+void be_load_Matter_Control_Message_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_Control_Message);
+ be_setglobal(vm, "Matter_Control_Message");
+ be_pop(vm, 1);
+}
+/********************************************************************/
+/* End of solidification */
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Device.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Device.h
index b52678302..afddf3b57 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Device.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Device.h
@@ -6,6 +6,92 @@
extern const bclass be_class_Matter_Device;
+/********************************************************************
+** Solidified function: start_operational_discovery
+********************************************************************/
+be_local_closure(Matter_Device_start_operational_discovery, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 9]) { /* constants */
+ /* K0 */ be_nested_str_weak(crypto),
+ /* K1 */ be_nested_str_weak(mdns),
+ /* K2 */ be_nested_str_weak(string),
+ /* K3 */ be_nested_str_weak(stop_basic_commissioning),
+ /* K4 */ be_nested_str_weak(root_w0),
+ /* K5 */ be_nested_str_weak(root_L),
+ /* K6 */ be_nested_str_weak(set_expire_in_seconds),
+ /* K7 */ be_nested_str_weak(mdns_announce_op_discovery),
+ /* K8 */ be_nested_str_weak(get_fabric),
+ }),
+ be_str_weak(start_operational_discovery),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0xA40E0200, // 0001 IMPORT R3 K1
+ 0xA4120400, // 0002 IMPORT R4 K2
+ 0x8C140103, // 0003 GETMET R5 R0 K3
+ 0x7C140200, // 0004 CALL R5 1
+ 0x4C140000, // 0005 LDNIL R5
+ 0x90020805, // 0006 SETMBR R0 K4 R5
+ 0x4C140000, // 0007 LDNIL R5
+ 0x90020A05, // 0008 SETMBR R0 K5 R5
+ 0x8C140306, // 0009 GETMET R5 R1 K6
+ 0x541E003B, // 000A LDINT R7 60
+ 0x7C140400, // 000B CALL R5 2
+ 0x8C140107, // 000C GETMET R5 R0 K7
+ 0x8C1C0308, // 000D GETMET R7 R1 K8
+ 0x7C1C0200, // 000E CALL R7 1
+ 0x7C140400, // 000F CALL R5 2
+ 0x80000000, // 0010 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _init_basic_commissioning
+********************************************************************/
+be_local_closure(Matter_Device__init_basic_commissioning, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(sessions),
+ /* K1 */ be_nested_str_weak(count_active_fabrics),
+ /* K2 */ be_const_int(0),
+ /* K3 */ be_nested_str_weak(start_root_basic_commissioning),
+ }),
+ be_str_weak(_init_basic_commissioning),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x1C040302, // 0003 EQ R1 R1 K2
+ 0x78060001, // 0004 JMPF R1 #0007
+ 0x8C040103, // 0005 GETMET R1 R0 K3
+ 0x7C040200, // 0006 CALL R1 1
+ 0x80000000, // 0007 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: compute_manual_pairing_code
********************************************************************/
@@ -21,8 +107,8 @@ be_local_closure(Matter_Device_compute_manual_pairing_code, /* name */
1, /* has constants */
( &(const bvalue[ 8]) { /* constants */
/* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(discriminator),
- /* K2 */ be_nested_str_weak(passcode),
+ /* K1 */ be_nested_str_weak(root_discriminator),
+ /* K2 */ be_nested_str_weak(root_passcode),
/* K3 */ be_nested_str_weak(format),
/* K4 */ be_nested_str_weak(_X251i_X2505i_X2504i),
/* K5 */ be_nested_str_weak(matter),
@@ -70,276 +156,11 @@ be_local_closure(Matter_Device_compute_manual_pairing_code, /* name */
/********************************************************************
-** Solidified function: process_attribute_expansion
+** Solidified function: _trigger_read_sensors
********************************************************************/
-be_local_closure(Matter_Device_process_attribute_expansion, /* name */
+be_local_closure(Matter_Device__trigger_read_sensors, /* name */
be_nested_proto(
- 33, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[25]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(endpoint),
- /* K2 */ be_nested_str_weak(cluster),
- /* K3 */ be_nested_str_weak(attribute),
- /* K4 */ be_nested_str_weak(tasmota),
- /* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(format),
- /* K7 */ be_nested_str_weak(MTR_X3A_X20process_attribute_expansion_X20_X25s),
- /* K8 */ be_const_int(3),
- /* K9 */ be_nested_str_weak(plugins),
- /* K10 */ be_nested_str_weak(get_endpoints),
- /* K11 */ be_nested_str_weak(MTR_X3A_X20ep_list_X20_X25s_X20_X25s),
- /* K12 */ be_nested_str_weak(find),
- /* K13 */ be_nested_str_weak(get_cluster_list),
- /* K14 */ be_nested_str_weak(MTR_X3A_X20cluster_list_X20_X25s_X20_X25s),
- /* K15 */ be_nested_str_weak(get_attribute_list),
- /* K16 */ be_nested_str_weak(MTR_X3A_X20attr_list_X20_X25s_X20_X25s),
- /* K17 */ be_nested_str_weak(MTR_X3A_X20expansion_X20_X5B_X2502X_X5D_X2504X_X2F_X2504X),
- /* K18 */ be_nested_str_weak(stop_iteration),
- /* K19 */ be_nested_str_weak(status),
- /* K20 */ be_nested_str_weak(matter),
- /* K21 */ be_nested_str_weak(UNSUPPORTED_ENDPOINT),
- /* K22 */ be_nested_str_weak(UNSUPPORTED_CLUSTER),
- /* K23 */ be_nested_str_weak(UNSUPPORTED_ATTRIBUTE),
- /* K24 */ be_nested_str_weak(UNREPORTABLE_ATTRIBUTE),
- }),
- be_str_weak(process_attribute_expansion),
- &be_const_str_solidified,
- ( &(const binstruction[216]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0x88100301, // 0001 GETMBR R4 R1 K1
- 0x60140012, // 0002 GETGBL R5 G18
- 0x7C140000, // 0003 CALL R5 0
- 0x40180A04, // 0004 CONNECT R6 R5 R4
- 0x50180000, // 0005 LDBOOL R6 0 0
- 0x881C0302, // 0006 GETMBR R7 R1 K2
- 0x60200012, // 0007 GETGBL R8 G18
- 0x7C200000, // 0008 CALL R8 0
- 0x40241007, // 0009 CONNECT R9 R8 R7
- 0x50240000, // 000A LDBOOL R9 0 0
- 0x88280303, // 000B GETMBR R10 R1 K3
- 0x602C0012, // 000C GETGBL R11 G18
- 0x7C2C0000, // 000D CALL R11 0
- 0x4030160A, // 000E CONNECT R12 R11 R10
- 0x50300000, // 000F LDBOOL R12 0 0
- 0x88340301, // 0010 GETMBR R13 R1 K1
- 0x4C380000, // 0011 LDNIL R14
- 0x20341A0E, // 0012 NE R13 R13 R14
- 0x78360007, // 0013 JMPF R13 #001C
- 0x88340302, // 0014 GETMBR R13 R1 K2
- 0x4C380000, // 0015 LDNIL R14
- 0x20341A0E, // 0016 NE R13 R13 R14
- 0x78360003, // 0017 JMPF R13 #001C
- 0x88340303, // 0018 GETMBR R13 R1 K3
- 0x4C380000, // 0019 LDNIL R14
- 0x20341A0E, // 001A NE R13 R13 R14
- 0x74360000, // 001B JMPT R13 #001D
- 0x50340001, // 001C LDBOOL R13 0 1
- 0x50340200, // 001D LDBOOL R13 1 0
- 0xB83A0800, // 001E GETNGBL R14 K4
- 0x8C381D05, // 001F GETMET R14 R14 K5
- 0x8C400706, // 0020 GETMET R16 R3 K6
- 0x58480007, // 0021 LDCONST R18 K7
- 0x604C0008, // 0022 GETGBL R19 G8
- 0x5C500200, // 0023 MOVE R20 R1
- 0x7C4C0200, // 0024 CALL R19 1
- 0x7C400600, // 0025 CALL R16 3
- 0x58440008, // 0026 LDCONST R17 K8
- 0x7C380600, // 0027 CALL R14 3
- 0x60380010, // 0028 GETGBL R14 G16
- 0x883C0109, // 0029 GETMBR R15 R0 K9
- 0x7C380200, // 002A CALL R14 1
- 0xA802008C, // 002B EXBLK 0 #00B9
- 0x5C3C1C00, // 002C MOVE R15 R14
- 0x7C3C0000, // 002D CALL R15 0
- 0x8C401F0A, // 002E GETMET R16 R15 K10
- 0x7C400200, // 002F CALL R16 1
- 0xB8460800, // 0030 GETNGBL R17 K4
- 0x8C442305, // 0031 GETMET R17 R17 K5
- 0x8C4C0706, // 0032 GETMET R19 R3 K6
- 0x5854000B, // 0033 LDCONST R21 K11
- 0x60580008, // 0034 GETGBL R22 G8
- 0x5C5C1E00, // 0035 MOVE R23 R15
- 0x7C580200, // 0036 CALL R22 1
- 0x605C0008, // 0037 GETGBL R23 G8
- 0x5C602000, // 0038 MOVE R24 R16
- 0x7C5C0200, // 0039 CALL R23 1
- 0x7C4C0800, // 003A CALL R19 4
- 0x58500008, // 003B LDCONST R20 K8
- 0x7C440600, // 003C CALL R17 3
- 0x4C440000, // 003D LDNIL R17
- 0x20440811, // 003E NE R17 R4 R17
- 0x78460009, // 003F JMPF R17 #004A
- 0x8C44210C, // 0040 GETMET R17 R16 K12
- 0x5C4C0800, // 0041 MOVE R19 R4
- 0x7C440400, // 0042 CALL R17 2
- 0x4C480000, // 0043 LDNIL R18
- 0x20442212, // 0044 NE R17 R17 R18
- 0x78460002, // 0045 JMPF R17 #0049
- 0x5C400A00, // 0046 MOVE R16 R5
- 0x50180200, // 0047 LDBOOL R6 1 0
- 0x70020000, // 0048 JMP #004A
- 0x7001FFE1, // 0049 JMP #002C
- 0x60440010, // 004A GETGBL R17 G16
- 0x5C482000, // 004B MOVE R18 R16
- 0x7C440200, // 004C CALL R17 1
- 0xA8020066, // 004D EXBLK 0 #00B5
- 0x5C482200, // 004E MOVE R18 R17
- 0x7C480000, // 004F CALL R18 0
- 0x8C4C1F0D, // 0050 GETMET R19 R15 K13
- 0x5C542400, // 0051 MOVE R21 R18
- 0x7C4C0400, // 0052 CALL R19 2
- 0xB8520800, // 0053 GETNGBL R20 K4
- 0x8C502905, // 0054 GETMET R20 R20 K5
- 0x8C580706, // 0055 GETMET R22 R3 K6
- 0x5860000E, // 0056 LDCONST R24 K14
- 0x60640008, // 0057 GETGBL R25 G8
- 0x5C682400, // 0058 MOVE R26 R18
- 0x7C640200, // 0059 CALL R25 1
- 0x60680008, // 005A GETGBL R26 G8
- 0x5C6C2600, // 005B MOVE R27 R19
- 0x7C680200, // 005C CALL R26 1
- 0x7C580800, // 005D CALL R22 4
- 0x585C0008, // 005E LDCONST R23 K8
- 0x7C500600, // 005F CALL R20 3
- 0x4C500000, // 0060 LDNIL R20
- 0x20500E14, // 0061 NE R20 R7 R20
- 0x78520009, // 0062 JMPF R20 #006D
- 0x8C50270C, // 0063 GETMET R20 R19 K12
- 0x5C580E00, // 0064 MOVE R22 R7
- 0x7C500400, // 0065 CALL R20 2
- 0x4C540000, // 0066 LDNIL R21
- 0x20502815, // 0067 NE R20 R20 R21
- 0x78520002, // 0068 JMPF R20 #006C
- 0x5C4C1000, // 0069 MOVE R19 R8
- 0x50240200, // 006A LDBOOL R9 1 0
- 0x70020000, // 006B JMP #006D
- 0x7001FFE0, // 006C JMP #004E
- 0x60500010, // 006D GETGBL R20 G16
- 0x5C542600, // 006E MOVE R21 R19
- 0x7C500200, // 006F CALL R20 1
- 0xA802003F, // 0070 EXBLK 0 #00B1
- 0x5C542800, // 0071 MOVE R21 R20
- 0x7C540000, // 0072 CALL R21 0
- 0x8C581F0F, // 0073 GETMET R22 R15 K15
- 0x5C602400, // 0074 MOVE R24 R18
- 0x5C640E00, // 0075 MOVE R25 R7
- 0x7C580600, // 0076 CALL R22 3
- 0xB85E0800, // 0077 GETNGBL R23 K4
- 0x8C5C2F05, // 0078 GETMET R23 R23 K5
- 0x8C640706, // 0079 GETMET R25 R3 K6
- 0x586C0010, // 007A LDCONST R27 K16
- 0x60700008, // 007B GETGBL R28 G8
- 0x5C742A00, // 007C MOVE R29 R21
- 0x7C700200, // 007D CALL R28 1
- 0x60740008, // 007E GETGBL R29 G8
- 0x5C782C00, // 007F MOVE R30 R22
- 0x7C740200, // 0080 CALL R29 1
- 0x7C640800, // 0081 CALL R25 4
- 0x58680008, // 0082 LDCONST R26 K8
- 0x7C5C0600, // 0083 CALL R23 3
- 0x4C5C0000, // 0084 LDNIL R23
- 0x205C1417, // 0085 NE R23 R10 R23
- 0x785E0028, // 0086 JMPF R23 #00B0
- 0x8C5C2D0C, // 0087 GETMET R23 R22 K12
- 0x5C641400, // 0088 MOVE R25 R10
- 0x7C5C0400, // 0089 CALL R23 2
- 0x4C600000, // 008A LDNIL R24
- 0x205C2E18, // 008B NE R23 R23 R24
- 0x785E0002, // 008C JMPF R23 #0090
- 0x5C581600, // 008D MOVE R22 R11
- 0x50300200, // 008E LDBOOL R12 1 0
- 0x70020000, // 008F JMP #0091
- 0x7001FFDF, // 0090 JMP #0071
- 0x605C0010, // 0091 GETGBL R23 G16
- 0x5C602C00, // 0092 MOVE R24 R22
- 0x7C5C0200, // 0093 CALL R23 1
- 0xA8020017, // 0094 EXBLK 0 #00AD
- 0x5C602E00, // 0095 MOVE R24 R23
- 0x7C600000, // 0096 CALL R24 0
- 0xB8660800, // 0097 GETNGBL R25 K4
- 0x8C643305, // 0098 GETMET R25 R25 K5
- 0x8C6C0706, // 0099 GETMET R27 R3 K6
- 0x58740011, // 009A LDCONST R29 K17
- 0x5C782400, // 009B MOVE R30 R18
- 0x5C7C2A00, // 009C MOVE R31 R21
- 0x5C803000, // 009D MOVE R32 R24
- 0x7C6C0A00, // 009E CALL R27 5
- 0x58700008, // 009F LDCONST R28 K8
- 0x7C640600, // 00A0 CALL R25 3
- 0x90060212, // 00A1 SETMBR R1 K1 R18
- 0x90060415, // 00A2 SETMBR R1 K2 R21
- 0x90060618, // 00A3 SETMBR R1 K3 R24
- 0x5C640400, // 00A4 MOVE R25 R2
- 0x5C681E00, // 00A5 MOVE R26 R15
- 0x5C6C0200, // 00A6 MOVE R27 R1
- 0x5C701A00, // 00A7 MOVE R28 R13
- 0x7C640600, // 00A8 CALL R25 3
- 0x78660001, // 00A9 JMPF R25 #00AC
- 0xA8040004, // 00AA EXBLK 1 4
- 0x80003400, // 00AB RET 0
- 0x7001FFE7, // 00AC JMP #0095
- 0x585C0012, // 00AD LDCONST R23 K18
- 0xAC5C0200, // 00AE CATCH R23 1 0
- 0xB0080000, // 00AF RAISE 2 R0 R0
- 0x7001FFBF, // 00B0 JMP #0071
- 0x58500012, // 00B1 LDCONST R20 K18
- 0xAC500200, // 00B2 CATCH R20 1 0
- 0xB0080000, // 00B3 RAISE 2 R0 R0
- 0x7001FF98, // 00B4 JMP #004E
- 0x58440012, // 00B5 LDCONST R17 K18
- 0xAC440200, // 00B6 CATCH R17 1 0
- 0xB0080000, // 00B7 RAISE 2 R0 R0
- 0x7001FF72, // 00B8 JMP #002C
- 0x58380012, // 00B9 LDCONST R14 K18
- 0xAC380200, // 00BA CATCH R14 1 0
- 0xB0080000, // 00BB RAISE 2 R0 R0
- 0x78360019, // 00BC JMPF R13 #00D7
- 0x5C380C00, // 00BD MOVE R14 R6
- 0x743A0003, // 00BE JMPT R14 #00C3
- 0xB83A2800, // 00BF GETNGBL R14 K20
- 0x88381D15, // 00C0 GETMBR R14 R14 K21
- 0x9006260E, // 00C1 SETMBR R1 K19 R14
- 0x7002000E, // 00C2 JMP #00D2
- 0x5C381200, // 00C3 MOVE R14 R9
- 0x743A0003, // 00C4 JMPT R14 #00C9
- 0xB83A2800, // 00C5 GETNGBL R14 K20
- 0x88381D16, // 00C6 GETMBR R14 R14 K22
- 0x9006260E, // 00C7 SETMBR R1 K19 R14
- 0x70020008, // 00C8 JMP #00D2
- 0x5C381800, // 00C9 MOVE R14 R12
- 0x743A0003, // 00CA JMPT R14 #00CF
- 0xB83A2800, // 00CB GETNGBL R14 K20
- 0x88381D17, // 00CC GETMBR R14 R14 K23
- 0x9006260E, // 00CD SETMBR R1 K19 R14
- 0x70020002, // 00CE JMP #00D2
- 0xB83A2800, // 00CF GETNGBL R14 K20
- 0x88381D18, // 00D0 GETMBR R14 R14 K24
- 0x9006260E, // 00D1 SETMBR R1 K19 R14
- 0x5C380400, // 00D2 MOVE R14 R2
- 0x4C3C0000, // 00D3 LDNIL R15
- 0x5C400200, // 00D4 MOVE R16 R1
- 0x50440200, // 00D5 LDBOOL R17 1 0
- 0x7C380600, // 00D6 CALL R14 3
- 0x80000000, // 00D7 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: save_param
-********************************************************************/
-be_local_closure(Matter_Device_save_param, /* name */
- be_nested_proto(
- 10, /* nstack */
+ 8, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
@@ -347,69 +168,59 @@ be_local_closure(Matter_Device_save_param, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[15]) { /* constants */
+ ( &(const bvalue[11]) { /* constants */
/* K0 */ be_nested_str_weak(json),
- /* K1 */ be_nested_str_weak(dump),
- /* K2 */ be_nested_str_weak(distinguish),
- /* K3 */ be_nested_str_weak(discriminator),
- /* K4 */ be_nested_str_weak(passcode),
- /* K5 */ be_nested_str_weak(string),
- /* K6 */ be_nested_str_weak(FILENAME),
- /* K7 */ be_nested_str_weak(w),
- /* K8 */ be_nested_str_weak(write),
- /* K9 */ be_nested_str_weak(close),
- /* K10 */ be_nested_str_weak(tasmota),
- /* K11 */ be_nested_str_weak(log),
- /* K12 */ be_nested_str_weak(MTR_X3A_X20Session_Store_X3A_X3Asave_X20Exception_X3A),
- /* K13 */ be_nested_str_weak(_X7C),
- /* K14 */ be_const_int(2),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(read_sensors),
+ /* K3 */ be_nested_str_weak(load),
+ /* K4 */ be_const_int(0),
+ /* K5 */ be_nested_str_weak(plugins),
+ /* K6 */ be_nested_str_weak(parse_sensors),
+ /* K7 */ be_const_int(1),
+ /* K8 */ be_nested_str_weak(log),
+ /* K9 */ be_nested_str_weak(MTR_X3A_X20unable_X20to_X20parse_X20read_sensors_X3A_X20),
+ /* K10 */ be_const_int(3),
}),
- be_str_weak(save_param),
+ be_str_weak(_trigger_read_sensors),
&be_const_str_solidified,
- ( &(const binstruction[43]) { /* code */
+ ( &(const binstruction[37]) { /* code */
0xA4060000, // 0000 IMPORT R1 K0
- 0x8C080301, // 0001 GETMET R2 R1 K1
- 0x60100013, // 0002 GETGBL R4 G19
- 0x7C100000, // 0003 CALL R4 0
- 0x88140103, // 0004 GETMBR R5 R0 K3
- 0x98120405, // 0005 SETIDX R4 K2 R5
- 0x88140104, // 0006 GETMBR R5 R0 K4
- 0x98120805, // 0007 SETIDX R4 K4 R5
- 0x7C080400, // 0008 CALL R2 2
- 0xA802000D, // 0009 EXBLK 0 #0018
- 0xA40E0A00, // 000A IMPORT R3 K5
- 0x60100011, // 000B GETGBL R4 G17
- 0x88140106, // 000C GETMBR R5 R0 K6
- 0x58180007, // 000D LDCONST R6 K7
- 0x7C100400, // 000E CALL R4 2
- 0x8C140908, // 000F GETMET R5 R4 K8
- 0x5C1C0400, // 0010 MOVE R7 R2
- 0x7C140400, // 0011 CALL R5 2
- 0x8C140909, // 0012 GETMET R5 R4 K9
- 0x7C140200, // 0013 CALL R5 1
- 0xA8040001, // 0014 EXBLK 1 1
- 0x80040400, // 0015 RET 1 R2
- 0xA8040001, // 0016 EXBLK 1 1
- 0x70020011, // 0017 JMP #002A
- 0xAC0C0002, // 0018 CATCH R3 0 2
- 0x7002000E, // 0019 JMP #0029
- 0xB8161400, // 001A GETNGBL R5 K10
- 0x8C140B0B, // 001B GETMET R5 R5 K11
- 0x601C0008, // 001C GETGBL R7 G8
- 0x5C200600, // 001D MOVE R8 R3
- 0x7C1C0200, // 001E CALL R7 1
- 0x001E1807, // 001F ADD R7 K12 R7
- 0x001C0F0D, // 0020 ADD R7 R7 K13
- 0x60200008, // 0021 GETGBL R8 G8
- 0x5C240800, // 0022 MOVE R9 R4
- 0x7C200200, // 0023 CALL R8 1
- 0x001C0E08, // 0024 ADD R7 R7 R8
- 0x5820000E, // 0025 LDCONST R8 K14
- 0x7C140600, // 0026 CALL R5 3
- 0x80040400, // 0027 RET 1 R2
- 0x70020000, // 0028 JMP #002A
- 0xB0080000, // 0029 RAISE 2 R0 R0
- 0x80000000, // 002A RET 0
+ 0xB80A0200, // 0001 GETNGBL R2 K1
+ 0x8C080502, // 0002 GETMET R2 R2 K2
+ 0x7C080200, // 0003 CALL R2 1
+ 0x4C0C0000, // 0004 LDNIL R3
+ 0x1C0C0403, // 0005 EQ R3 R2 R3
+ 0x780E0000, // 0006 JMPF R3 #0008
+ 0x80000600, // 0007 RET 0
+ 0x8C0C0303, // 0008 GETMET R3 R1 K3
+ 0x5C140400, // 0009 MOVE R5 R2
+ 0x7C0C0400, // 000A CALL R3 2
+ 0x4C100000, // 000B LDNIL R4
+ 0x20100604, // 000C NE R4 R3 R4
+ 0x7812000D, // 000D JMPF R4 #001C
+ 0x58100004, // 000E LDCONST R4 K4
+ 0x6014000C, // 000F GETGBL R5 G12
+ 0x88180105, // 0010 GETMBR R6 R0 K5
+ 0x7C140200, // 0011 CALL R5 1
+ 0x14140805, // 0012 LT R5 R4 R5
+ 0x78160006, // 0013 JMPF R5 #001B
+ 0x88140105, // 0014 GETMBR R5 R0 K5
+ 0x94140A04, // 0015 GETIDX R5 R5 R4
+ 0x8C140B06, // 0016 GETMET R5 R5 K6
+ 0x5C1C0600, // 0017 MOVE R7 R3
+ 0x7C140400, // 0018 CALL R5 2
+ 0x00100907, // 0019 ADD R4 R4 K7
+ 0x7001FFF3, // 001A JMP #000F
+ 0x70020007, // 001B JMP #0024
+ 0xB8120200, // 001C GETNGBL R4 K1
+ 0x8C100908, // 001D GETMET R4 R4 K8
+ 0x60180008, // 001E GETGBL R6 G8
+ 0x5C1C0400, // 001F MOVE R7 R2
+ 0x7C180200, // 0020 CALL R6 1
+ 0x001A1206, // 0021 ADD R6 K9 R6
+ 0x581C000A, // 0022 LDCONST R7 K10
+ 0x7C100600, // 0023 CALL R4 3
+ 0x80000000, // 0024 RET 0
})
)
);
@@ -417,20 +228,20 @@ be_local_closure(Matter_Device_save_param, /* name */
/********************************************************************
-** Solidified function: start_udp
+** Solidified function: start
********************************************************************/
-be_local_closure(Matter_Device_start_udp, /* name */
+be_local_closure(Matter_Device_start, /* name */
be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
+ 7, /* nstack */
+ 1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
1, /* has sup protos */
( &(const struct bproto*[ 1]) {
be_nested_proto(
- 8, /* nstack */
- 3, /* argc */
+ 2, /* nstack */
+ 0, /* argc */
0, /* varg */
1, /* has upvals */
( &(const bupvaldesc[ 1]) { /* upvals */
@@ -440,63 +251,66 @@ be_local_closure(Matter_Device_start_udp, /* name */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(msg_received),
+ /* K0 */ be_nested_str_weak(_trigger_read_sensors),
}),
- be_str_weak(_X3Clambda_X3E),
+ be_str_weak(_anonymous_),
&be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0x680C0000, // 0000 GETUPV R3 U0
- 0x8C0C0700, // 0001 GETMET R3 R3 K0
- 0x5C140000, // 0002 MOVE R5 R0
- 0x5C180200, // 0003 MOVE R6 R1
- 0x5C1C0400, // 0004 MOVE R7 R2
- 0x7C0C0800, // 0005 CALL R3 4
- 0x80040600, // 0006 RET 1 R3
+ ( &(const binstruction[ 4]) { /* code */
+ 0x68000000, // 0000 GETUPV R0 U0
+ 0x8C000100, // 0001 GETMET R0 R0 K0
+ 0x7C000200, // 0002 CALL R0 1
+ 0x80000000, // 0003 RET 0
})
),
}),
1, /* has constants */
- ( &(const bvalue[ 9]) { /* constants */
- /* K0 */ be_nested_str_weak(udp_server),
- /* K1 */ be_nested_str_weak(tasmota),
- /* K2 */ be_nested_str_weak(log),
- /* K3 */ be_nested_str_weak(MTR_X3A_X20starting_X20UDP_X20server_X20on_X20port_X3A_X20),
- /* K4 */ be_const_int(2),
- /* K5 */ be_nested_str_weak(matter),
- /* K6 */ be_nested_str_weak(UDPServer),
- /* K7 */ be_nested_str_weak(),
- /* K8 */ be_nested_str_weak(start),
+ ( &(const bvalue[14]) { /* constants */
+ /* K0 */ be_nested_str_weak(started),
+ /* K1 */ be_nested_str_weak(plugins),
+ /* K2 */ be_nested_str_weak(push),
+ /* K3 */ be_nested_str_weak(matter),
+ /* K4 */ be_nested_str_weak(Plugin_Root),
+ /* K5 */ be_const_int(0),
+ /* K6 */ be_nested_str_weak(autoconf_device),
+ /* K7 */ be_nested_str_weak(tasmota),
+ /* K8 */ be_nested_str_weak(add_cron),
+ /* K9 */ be_nested_str_weak(_X2A_X2F5_X20_X2A_X20_X2A_X20_X2A_X20_X2A_X20_X2A),
+ /* K10 */ be_nested_str_weak(matter_sensors_5s),
+ /* K11 */ be_nested_str_weak(_start_udp),
+ /* K12 */ be_nested_str_weak(UDP_PORT),
+ /* K13 */ be_nested_str_weak(start_mdns_announce_hostnames),
}),
- be_str_weak(start_udp),
+ be_str_weak(start),
&be_const_str_solidified,
- ( &(const binstruction[27]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x780A0000, // 0001 JMPF R2 #0003
- 0x80000400, // 0002 RET 0
- 0x4C080000, // 0003 LDNIL R2
- 0x1C080202, // 0004 EQ R2 R1 R2
- 0x780A0000, // 0005 JMPF R2 #0007
- 0x540615A3, // 0006 LDINT R1 5540
- 0xB80A0200, // 0007 GETNGBL R2 K1
- 0x8C080502, // 0008 GETMET R2 R2 K2
- 0x60100008, // 0009 GETGBL R4 G8
- 0x5C140200, // 000A MOVE R5 R1
- 0x7C100200, // 000B CALL R4 1
- 0x00120604, // 000C ADD R4 K3 R4
- 0x58140004, // 000D LDCONST R5 K4
- 0x7C080600, // 000E CALL R2 3
- 0xB80A0A00, // 000F GETNGBL R2 K5
- 0x8C080506, // 0010 GETMET R2 R2 K6
- 0x58100007, // 0011 LDCONST R4 K7
- 0x5C140200, // 0012 MOVE R5 R1
- 0x7C080600, // 0013 CALL R2 3
- 0x90020002, // 0014 SETMBR R0 K0 R2
- 0x88080100, // 0015 GETMBR R2 R0 K0
- 0x8C080508, // 0016 GETMET R2 R2 K8
- 0x84100000, // 0017 CLOSURE R4 P0
- 0x7C080400, // 0018 CALL R2 2
- 0xA0000000, // 0019 CLOSE R0
- 0x80000000, // 001A RET 0
+ ( &(const binstruction[28]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x78060000, // 0001 JMPF R1 #0003
+ 0x80000200, // 0002 RET 0
+ 0x88040101, // 0003 GETMBR R1 R0 K1
+ 0x8C040302, // 0004 GETMET R1 R1 K2
+ 0xB80E0600, // 0005 GETNGBL R3 K3
+ 0x8C0C0704, // 0006 GETMET R3 R3 K4
+ 0x5C140000, // 0007 MOVE R5 R0
+ 0x58180005, // 0008 LDCONST R6 K5
+ 0x7C0C0600, // 0009 CALL R3 3
+ 0x7C040400, // 000A CALL R1 2
+ 0x8C040106, // 000B GETMET R1 R0 K6
+ 0x7C040200, // 000C CALL R1 1
+ 0xB8060E00, // 000D GETNGBL R1 K7
+ 0x8C040308, // 000E GETMET R1 R1 K8
+ 0x580C0009, // 000F LDCONST R3 K9
+ 0x84100000, // 0010 CLOSURE R4 P0
+ 0x5814000A, // 0011 LDCONST R5 K10
+ 0x7C040800, // 0012 CALL R1 4
+ 0x8C04010B, // 0013 GETMET R1 R0 K11
+ 0x880C010C, // 0014 GETMBR R3 R0 K12
+ 0x7C040400, // 0015 CALL R1 2
+ 0x8C04010D, // 0016 GETMET R1 R0 K13
+ 0x7C040200, // 0017 CALL R1 1
+ 0x50040200, // 0018 LDBOOL R1 1 0
+ 0x90020001, // 0019 SETMBR R0 K0 R1
+ 0xA0000000, // 001A CLOSE R0
+ 0x80000000, // 001B RET 0
})
)
);
@@ -504,11 +318,11 @@ be_local_closure(Matter_Device_start_udp, /* name */
/********************************************************************
-** Solidified function: load_param
+** Solidified function: stop_basic_commissioning
********************************************************************/
-be_local_closure(Matter_Device_load_param, /* name */
+be_local_closure(Matter_Device_stop_basic_commissioning, /* name */
be_nested_proto(
- 10, /* nstack */
+ 3, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
@@ -516,103 +330,36 @@ be_local_closure(Matter_Device_load_param, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[22]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(crypto),
- /* K2 */ be_nested_str_weak(FILENAME),
- /* K3 */ be_nested_str_weak(read),
- /* K4 */ be_nested_str_weak(close),
- /* K5 */ be_nested_str_weak(json),
- /* K6 */ be_nested_str_weak(load),
- /* K7 */ be_nested_str_weak(discriminator),
- /* K8 */ be_nested_str_weak(find),
- /* K9 */ be_nested_str_weak(distinguish),
- /* K10 */ be_nested_str_weak(passcode),
- /* K11 */ be_nested_str_weak(io_error),
- /* K12 */ be_nested_str_weak(tasmota),
- /* K13 */ be_nested_str_weak(log),
- /* K14 */ be_nested_str_weak(MTR_X3A_X20Session_Store_X3A_X3Aload_X20Exception_X3A),
- /* K15 */ be_nested_str_weak(_X7C),
- /* K16 */ be_const_int(2),
- /* K17 */ be_nested_str_weak(random),
- /* K18 */ be_nested_str_weak(get),
- /* K19 */ be_const_int(0),
- /* K20 */ be_nested_str_weak(PASSCODE_DEFAULT),
- /* K21 */ be_nested_str_weak(save_param),
+ ( &(const bvalue[ 8]) { /* constants */
+ /* K0 */ be_nested_str_weak(commissioning_open),
+ /* K1 */ be_nested_str_weak(mdns_remove_PASE),
+ /* K2 */ be_nested_str_weak(commissioning_iterations),
+ /* K3 */ be_nested_str_weak(commissioning_discriminator),
+ /* K4 */ be_nested_str_weak(commissioning_salt),
+ /* K5 */ be_nested_str_weak(commissioning_w0),
+ /* K6 */ be_nested_str_weak(commissioning_L),
+ /* K7 */ be_nested_str_weak(commissioning_admin_fabric),
}),
- be_str_weak(load_param),
+ be_str_weak(stop_basic_commissioning),
&be_const_str_solidified,
- ( &(const binstruction[70]) { /* code */
- 0xA4060000, // 0000 IMPORT R1 K0
- 0xA40A0200, // 0001 IMPORT R2 K1
- 0xA8020014, // 0002 EXBLK 0 #0018
- 0x600C0011, // 0003 GETGBL R3 G17
- 0x88100102, // 0004 GETMBR R4 R0 K2
- 0x7C0C0200, // 0005 CALL R3 1
- 0x8C100703, // 0006 GETMET R4 R3 K3
- 0x7C100200, // 0007 CALL R4 1
- 0x8C140704, // 0008 GETMET R5 R3 K4
- 0x7C140200, // 0009 CALL R5 1
- 0xA4160A00, // 000A IMPORT R5 K5
- 0x8C180B06, // 000B GETMET R6 R5 K6
- 0x5C200800, // 000C MOVE R8 R4
- 0x7C180400, // 000D CALL R6 2
- 0x8C1C0D08, // 000E GETMET R7 R6 K8
- 0x58240009, // 000F LDCONST R9 K9
- 0x7C1C0400, // 0010 CALL R7 2
- 0x90020E07, // 0011 SETMBR R0 K7 R7
- 0x8C1C0D08, // 0012 GETMET R7 R6 K8
- 0x5824000A, // 0013 LDCONST R9 K10
- 0x7C1C0400, // 0014 CALL R7 2
- 0x90021407, // 0015 SETMBR R0 K10 R7
- 0xA8040001, // 0016 EXBLK 1 1
- 0x70020012, // 0017 JMP #002B
- 0xAC0C0002, // 0018 CATCH R3 0 2
- 0x7002000F, // 0019 JMP #002A
- 0x2014070B, // 001A NE R5 R3 K11
- 0x7816000C, // 001B JMPF R5 #0029
- 0xB8161800, // 001C GETNGBL R5 K12
- 0x8C140B0D, // 001D GETMET R5 R5 K13
- 0x601C0008, // 001E GETGBL R7 G8
- 0x5C200600, // 001F MOVE R8 R3
- 0x7C1C0200, // 0020 CALL R7 1
- 0x001E1C07, // 0021 ADD R7 K14 R7
- 0x001C0F0F, // 0022 ADD R7 R7 K15
- 0x60200008, // 0023 GETGBL R8 G8
- 0x5C240800, // 0024 MOVE R9 R4
- 0x7C200200, // 0025 CALL R8 1
- 0x001C0E08, // 0026 ADD R7 R7 R8
- 0x58200010, // 0027 LDCONST R8 K16
- 0x7C140600, // 0028 CALL R5 3
- 0x70020000, // 0029 JMP #002B
- 0xB0080000, // 002A RAISE 2 R0 R0
- 0x500C0000, // 002B LDBOOL R3 0 0
- 0x88100107, // 002C GETMBR R4 R0 K7
- 0x4C140000, // 002D LDNIL R5
- 0x1C100805, // 002E EQ R4 R4 R5
- 0x7812000A, // 002F JMPF R4 #003B
- 0x8C100511, // 0030 GETMET R4 R2 K17
- 0x58180010, // 0031 LDCONST R6 K16
- 0x7C100400, // 0032 CALL R4 2
- 0x8C100912, // 0033 GETMET R4 R4 K18
- 0x58180013, // 0034 LDCONST R6 K19
- 0x581C0010, // 0035 LDCONST R7 K16
- 0x7C100600, // 0036 CALL R4 3
- 0x54160FFE, // 0037 LDINT R5 4095
- 0x2C100805, // 0038 AND R4 R4 R5
- 0x90020E04, // 0039 SETMBR R0 K7 R4
- 0x500C0200, // 003A LDBOOL R3 1 0
- 0x8810010A, // 003B GETMBR R4 R0 K10
- 0x4C140000, // 003C LDNIL R5
- 0x1C100805, // 003D EQ R4 R4 R5
- 0x78120002, // 003E JMPF R4 #0042
- 0x88100114, // 003F GETMBR R4 R0 K20
- 0x90021404, // 0040 SETMBR R0 K10 R4
- 0x500C0200, // 0041 LDBOOL R3 1 0
- 0x780E0001, // 0042 JMPF R3 #0045
- 0x8C100115, // 0043 GETMET R4 R0 K21
- 0x7C100200, // 0044 CALL R4 1
- 0x80000000, // 0045 RET 0
+ ( &(const binstruction[17]) { /* code */
+ 0x4C040000, // 0000 LDNIL R1
+ 0x90020001, // 0001 SETMBR R0 K0 R1
+ 0x8C040101, // 0002 GETMET R1 R0 K1
+ 0x7C040200, // 0003 CALL R1 1
+ 0x4C040000, // 0004 LDNIL R1
+ 0x90020401, // 0005 SETMBR R0 K2 R1
+ 0x4C040000, // 0006 LDNIL R1
+ 0x90020601, // 0007 SETMBR R0 K3 R1
+ 0x4C040000, // 0008 LDNIL R1
+ 0x90020801, // 0009 SETMBR R0 K4 R1
+ 0x4C040000, // 000A LDNIL R1
+ 0x90020A01, // 000B SETMBR R0 K5 R1
+ 0x4C040000, // 000C LDNIL R1
+ 0x90020C01, // 000D SETMBR R0 K6 R1
+ 0x4C040000, // 000E LDNIL R1
+ 0x90020E01, // 000F SETMBR R0 K7 R1
+ 0x80000000, // 0010 RET 0
})
)
);
@@ -620,9 +367,9 @@ be_local_closure(Matter_Device_load_param, /* name */
/********************************************************************
-** Solidified function: start_operational_dicovery_deferred
+** Solidified function: start_operational_discovery_deferred
********************************************************************/
-be_local_closure(Matter_Device_start_operational_dicovery_deferred, /* name */
+be_local_closure(Matter_Device_start_operational_discovery_deferred, /* name */
be_nested_proto(
6, /* nstack */
2, /* argc */
@@ -644,7 +391,7 @@ be_local_closure(Matter_Device_start_operational_dicovery_deferred, /* name */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(start_operational_dicovery),
+ /* K0 */ be_nested_str_weak(start_operational_discovery),
}),
be_str_weak(_X3Clambda_X3E),
&be_const_str_solidified,
@@ -663,7 +410,7 @@ be_local_closure(Matter_Device_start_operational_dicovery_deferred, /* name */
/* K1 */ be_nested_str_weak(set_timer),
/* K2 */ be_const_int(0),
}),
- be_str_weak(start_operational_dicovery_deferred),
+ be_str_weak(start_operational_discovery_deferred),
&be_const_str_solidified,
( &(const binstruction[ 7]) { /* code */
0xB80A0000, // 0000 GETNGBL R2 K0
@@ -680,12 +427,91 @@ be_local_closure(Matter_Device_start_operational_dicovery_deferred, /* name */
/********************************************************************
-** Solidified function: stop
+** Solidified function: remove_fabric
********************************************************************/
-be_local_closure(Matter_Device_stop, /* name */
+be_local_closure(Matter_Device_remove_fabric, /* name */
be_nested_proto(
- 3, /* nstack */
- 1, /* argc */
+ 9, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[12]) { /* constants */
+ /* K0 */ be_nested_str_weak(sessions),
+ /* K1 */ be_nested_str_weak(find_children_fabrics),
+ /* K2 */ be_nested_str_weak(get_fabric_index),
+ /* K3 */ be_nested_str_weak(find_fabric_by_index),
+ /* K4 */ be_nested_str_weak(message_handler),
+ /* K5 */ be_nested_str_weak(im),
+ /* K6 */ be_nested_str_weak(subs_shop),
+ /* K7 */ be_nested_str_weak(remove_by_fabric),
+ /* K8 */ be_nested_str_weak(mdns_remove_op_discovery),
+ /* K9 */ be_nested_str_weak(remove_fabric),
+ /* K10 */ be_nested_str_weak(stop_iteration),
+ /* K11 */ be_nested_str_weak(save_fabrics),
+ }),
+ be_str_weak(remove_fabric),
+ &be_const_str_solidified,
+ ( &(const binstruction[43]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x8C100302, // 0002 GETMET R4 R1 K2
+ 0x7C100200, // 0003 CALL R4 1
+ 0x7C080400, // 0004 CALL R2 2
+ 0x4C0C0000, // 0005 LDNIL R3
+ 0x1C0C0403, // 0006 EQ R3 R2 R3
+ 0x780E0000, // 0007 JMPF R3 #0009
+ 0x80000600, // 0008 RET 0
+ 0x600C0010, // 0009 GETGBL R3 G16
+ 0x5C100400, // 000A MOVE R4 R2
+ 0x7C0C0200, // 000B CALL R3 1
+ 0xA8020016, // 000C EXBLK 0 #0024
+ 0x5C100600, // 000D MOVE R4 R3
+ 0x7C100000, // 000E CALL R4 0
+ 0x88140100, // 000F GETMBR R5 R0 K0
+ 0x8C140B03, // 0010 GETMET R5 R5 K3
+ 0x5C1C0800, // 0011 MOVE R7 R4
+ 0x7C140400, // 0012 CALL R5 2
+ 0x4C180000, // 0013 LDNIL R6
+ 0x20180A06, // 0014 NE R6 R5 R6
+ 0x781A000C, // 0015 JMPF R6 #0023
+ 0x88180104, // 0016 GETMBR R6 R0 K4
+ 0x88180D05, // 0017 GETMBR R6 R6 K5
+ 0x88180D06, // 0018 GETMBR R6 R6 K6
+ 0x8C180D07, // 0019 GETMET R6 R6 K7
+ 0x5C200A00, // 001A MOVE R8 R5
+ 0x7C180400, // 001B CALL R6 2
+ 0x8C180108, // 001C GETMET R6 R0 K8
+ 0x5C200A00, // 001D MOVE R8 R5
+ 0x7C180400, // 001E CALL R6 2
+ 0x88180100, // 001F GETMBR R6 R0 K0
+ 0x8C180D09, // 0020 GETMET R6 R6 K9
+ 0x5C200A00, // 0021 MOVE R8 R5
+ 0x7C180400, // 0022 CALL R6 2
+ 0x7001FFE8, // 0023 JMP #000D
+ 0x580C000A, // 0024 LDCONST R3 K10
+ 0xAC0C0200, // 0025 CATCH R3 1 0
+ 0xB0080000, // 0026 RAISE 2 R0 R0
+ 0x880C0100, // 0027 GETMBR R3 R0 K0
+ 0x8C0C070B, // 0028 GETMET R3 R3 K11
+ 0x7C0C0200, // 0029 CALL R3 1
+ 0x80000000, // 002A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: received_ack
+********************************************************************/
+be_local_closure(Matter_Device_received_ack, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
@@ -694,17 +520,16 @@ be_local_closure(Matter_Device_stop, /* name */
1, /* has constants */
( &(const bvalue[ 2]) { /* constants */
/* K0 */ be_nested_str_weak(udp_server),
- /* K1 */ be_nested_str_weak(stop),
+ /* K1 */ be_nested_str_weak(received_ack),
}),
- be_str_weak(stop),
+ be_str_weak(received_ack),
&be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x78060002, // 0001 JMPF R1 #0005
- 0x88040100, // 0002 GETMBR R1 R0 K0
- 0x8C040301, // 0003 GETMET R1 R1 K1
- 0x7C040200, // 0004 CALL R1 1
- 0x80000000, // 0005 RET 0
+ ( &(const binstruction[ 5]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x5C100200, // 0002 MOVE R4 R1
+ 0x7C080400, // 0003 CALL R2 2
+ 0x80040400, // 0004 RET 1 R2
})
)
);
@@ -712,55 +537,80 @@ be_local_closure(Matter_Device_stop, /* name */
/********************************************************************
-** Solidified function: invoke_request
+** Solidified function: start_root_basic_commissioning
********************************************************************/
-be_local_closure(Matter_Device_invoke_request, /* name */
+be_local_closure(Matter_Device_start_root_basic_commissioning, /* name */
be_nested_proto(
- 11, /* nstack */
- 4, /* argc */
+ 13, /* nstack */
+ 2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 7]) { /* constants */
- /* K0 */ be_const_int(0),
- /* K1 */ be_nested_str_weak(plugins),
- /* K2 */ be_nested_str_weak(invoke_request),
- /* K3 */ be_nested_str_weak(status),
- /* K4 */ be_nested_str_weak(matter),
- /* K5 */ be_nested_str_weak(UNSUPPORTED_COMMAND),
- /* K6 */ be_const_int(1),
+ ( &(const bvalue[19]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(PASE_TIMEOUT),
+ /* K2 */ be_nested_str_weak(compute_manual_pairing_code),
+ /* K3 */ be_nested_str_weak(tasmota),
+ /* K4 */ be_nested_str_weak(log),
+ /* K5 */ be_nested_str_weak(format),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20Manual_X20pairing_X20code_X3A_X20_X25s_X2D_X25s_X2D_X25s),
+ /* K7 */ be_const_int(0),
+ /* K8 */ be_const_int(3),
+ /* K9 */ be_const_int(2147483647),
+ /* K10 */ be_const_int(2),
+ /* K11 */ be_nested_str_weak(_compute_pbkdf),
+ /* K12 */ be_nested_str_weak(root_passcode),
+ /* K13 */ be_nested_str_weak(root_iterations),
+ /* K14 */ be_nested_str_weak(root_salt),
+ /* K15 */ be_nested_str_weak(start_basic_commissioning),
+ /* K16 */ be_nested_str_weak(root_discriminator),
+ /* K17 */ be_nested_str_weak(root_w0),
+ /* K18 */ be_nested_str_weak(root_L),
}),
- be_str_weak(invoke_request),
+ be_str_weak(start_root_basic_commissioning),
&be_const_str_solidified,
- ( &(const binstruction[25]) { /* code */
- 0x58100000, // 0000 LDCONST R4 K0
- 0x6014000C, // 0001 GETGBL R5 G12
- 0x88180101, // 0002 GETMBR R6 R0 K1
- 0x7C140200, // 0003 CALL R5 1
- 0x14140805, // 0004 LT R5 R4 R5
- 0x78160011, // 0005 JMPF R5 #0018
- 0x88140101, // 0006 GETMBR R5 R0 K1
- 0x94140A04, // 0007 GETIDX R5 R5 R4
- 0x8C180B02, // 0008 GETMET R6 R5 K2
- 0x5C200200, // 0009 MOVE R8 R1
- 0x5C240400, // 000A MOVE R9 R2
- 0x5C280600, // 000B MOVE R10 R3
- 0x7C180800, // 000C CALL R6 4
- 0x4C1C0000, // 000D LDNIL R7
- 0x201C0C07, // 000E NE R7 R6 R7
- 0x741E0004, // 000F JMPT R7 #0015
- 0x881C0703, // 0010 GETMBR R7 R3 K3
- 0xB8220800, // 0011 GETNGBL R8 K4
- 0x88201105, // 0012 GETMBR R8 R8 K5
- 0x201C0E08, // 0013 NE R7 R7 R8
- 0x781E0000, // 0014 JMPF R7 #0016
- 0x80040C00, // 0015 RET 1 R6
- 0x00100906, // 0016 ADD R4 R4 K6
- 0x7001FFE8, // 0017 JMP #0001
- 0x80000000, // 0018 RET 0
+ ( &(const binstruction[38]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0x4C0C0000, // 0001 LDNIL R3
+ 0x1C0C0203, // 0002 EQ R3 R1 R3
+ 0x780E0000, // 0003 JMPF R3 #0005
+ 0x88040101, // 0004 GETMBR R1 R0 K1
+ 0x8C0C0102, // 0005 GETMET R3 R0 K2
+ 0x7C0C0200, // 0006 CALL R3 1
+ 0xB8120600, // 0007 GETNGBL R4 K3
+ 0x8C100904, // 0008 GETMET R4 R4 K4
+ 0x8C180505, // 0009 GETMET R6 R2 K5
+ 0x58200006, // 000A LDCONST R8 K6
+ 0x40260F08, // 000B CONNECT R9 K7 K8
+ 0x94240609, // 000C GETIDX R9 R3 R9
+ 0x542A0003, // 000D LDINT R10 4
+ 0x542E0005, // 000E LDINT R11 6
+ 0x4028140B, // 000F CONNECT R10 R10 R11
+ 0x9428060A, // 0010 GETIDX R10 R3 R10
+ 0x542E0006, // 0011 LDINT R11 7
+ 0x402C1709, // 0012 CONNECT R11 R11 K9
+ 0x942C060B, // 0013 GETIDX R11 R3 R11
+ 0x7C180A00, // 0014 CALL R6 5
+ 0x581C000A, // 0015 LDCONST R7 K10
+ 0x7C100600, // 0016 CALL R4 3
+ 0x8C10010B, // 0017 GETMET R4 R0 K11
+ 0x8818010C, // 0018 GETMBR R6 R0 K12
+ 0x881C010D, // 0019 GETMBR R7 R0 K13
+ 0x8820010E, // 001A GETMBR R8 R0 K14
+ 0x7C100800, // 001B CALL R4 4
+ 0x8C10010F, // 001C GETMET R4 R0 K15
+ 0x5C180200, // 001D MOVE R6 R1
+ 0x881C010D, // 001E GETMBR R7 R0 K13
+ 0x88200110, // 001F GETMBR R8 R0 K16
+ 0x8824010E, // 0020 GETMBR R9 R0 K14
+ 0x88280111, // 0021 GETMBR R10 R0 K17
+ 0x882C0112, // 0022 GETMBR R11 R0 K18
+ 0x4C300000, // 0023 LDNIL R12
+ 0x7C101000, // 0024 CALL R4 8
+ 0x80000000, // 0025 RET 0
})
)
);
@@ -768,190 +618,9 @@ be_local_closure(Matter_Device_invoke_request, /* name */
/********************************************************************
-** Solidified function: start_mdns_announce_hostnames
+** Solidified function: save_before_restart
********************************************************************/
-be_local_closure(Matter_Device_start_mdns_announce_hostnames, /* name */
- be_nested_proto(
- 6, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 1, /* has sup protos */
- ( &(const struct bproto*[ 2]) {
- be_nested_proto(
- 4, /* nstack */
- 0, /* argc */
- 0, /* varg */
- 1, /* has upvals */
- ( &(const bupvaldesc[ 1]) { /* upvals */
- be_local_const_upval(1, 0),
- }),
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 5]) { /* constants */
- /* K0 */ be_nested_str_weak(_start_mdns_announce),
- /* K1 */ be_nested_str_weak(tasmota),
- /* K2 */ be_nested_str_weak(remove_rule),
- /* K3 */ be_nested_str_weak(Wifi_X23Connected),
- /* K4 */ be_nested_str_weak(matter_device_mdns),
- }),
- be_str_weak(_anonymous_),
- &be_const_str_solidified,
- ( &(const binstruction[10]) { /* code */
- 0x68000000, // 0000 GETUPV R0 U0
- 0x8C000100, // 0001 GETMET R0 R0 K0
- 0x50080000, // 0002 LDBOOL R2 0 0
- 0x7C000400, // 0003 CALL R0 2
- 0xB8020200, // 0004 GETNGBL R0 K1
- 0x8C000102, // 0005 GETMET R0 R0 K2
- 0x58080003, // 0006 LDCONST R2 K3
- 0x580C0004, // 0007 LDCONST R3 K4
- 0x7C000600, // 0008 CALL R0 3
- 0x80000000, // 0009 RET 0
- })
- ),
- be_nested_proto(
- 4, /* nstack */
- 0, /* argc */
- 0, /* varg */
- 1, /* has upvals */
- ( &(const bupvaldesc[ 1]) { /* upvals */
- be_local_const_upval(1, 0),
- }),
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 5]) { /* constants */
- /* K0 */ be_nested_str_weak(_start_mdns_announce),
- /* K1 */ be_nested_str_weak(tasmota),
- /* K2 */ be_nested_str_weak(remove_rule),
- /* K3 */ be_nested_str_weak(Eth_X23Connected),
- /* K4 */ be_nested_str_weak(matter_device_mdns),
- }),
- be_str_weak(_anonymous_),
- &be_const_str_solidified,
- ( &(const binstruction[10]) { /* code */
- 0x68000000, // 0000 GETUPV R0 U0
- 0x8C000100, // 0001 GETMET R0 R0 K0
- 0x50080200, // 0002 LDBOOL R2 1 0
- 0x7C000400, // 0003 CALL R0 2
- 0xB8020200, // 0004 GETNGBL R0 K1
- 0x8C000102, // 0005 GETMET R0 R0 K2
- 0x58080003, // 0006 LDCONST R2 K3
- 0x580C0004, // 0007 LDCONST R3 K4
- 0x7C000600, // 0008 CALL R0 3
- 0x80000000, // 0009 RET 0
- })
- ),
- }),
- 1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
- /* K0 */ be_nested_str_weak(tasmota),
- /* K1 */ be_nested_str_weak(wifi),
- /* K2 */ be_nested_str_weak(up),
- /* K3 */ be_nested_str_weak(_start_mdns_announce),
- /* K4 */ be_nested_str_weak(add_rule),
- /* K5 */ be_nested_str_weak(Wifi_X23Connected),
- /* K6 */ be_nested_str_weak(eth),
- /* K7 */ be_nested_str_weak(Eth_X23Connected),
- }),
- be_str_weak(start_mdns_announce_hostnames),
- &be_const_str_solidified,
- ( &(const binstruction[32]) { /* code */
- 0xB8060000, // 0000 GETNGBL R1 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x7C040200, // 0002 CALL R1 1
- 0x94040302, // 0003 GETIDX R1 R1 K2
- 0x78060003, // 0004 JMPF R1 #0009
- 0x8C040103, // 0005 GETMET R1 R0 K3
- 0x500C0000, // 0006 LDBOOL R3 0 0
- 0x7C040400, // 0007 CALL R1 2
- 0x70020005, // 0008 JMP #000F
- 0xB8060000, // 0009 GETNGBL R1 K0
- 0x8C040304, // 000A GETMET R1 R1 K4
- 0x580C0005, // 000B LDCONST R3 K5
- 0x84100000, // 000C CLOSURE R4 P0
- 0x5C140000, // 000D MOVE R5 R0
- 0x7C040800, // 000E CALL R1 4
- 0xB8060000, // 000F GETNGBL R1 K0
- 0x8C040306, // 0010 GETMET R1 R1 K6
- 0x7C040200, // 0011 CALL R1 1
- 0x94040302, // 0012 GETIDX R1 R1 K2
- 0x78060003, // 0013 JMPF R1 #0018
- 0x8C040103, // 0014 GETMET R1 R0 K3
- 0x500C0200, // 0015 LDBOOL R3 1 0
- 0x7C040400, // 0016 CALL R1 2
- 0x70020005, // 0017 JMP #001E
- 0xB8060000, // 0018 GETNGBL R1 K0
- 0x8C040304, // 0019 GETMET R1 R1 K4
- 0x580C0007, // 001A LDCONST R3 K7
- 0x84100001, // 001B CLOSURE R4 P1
- 0x5C140000, // 001C MOVE R5 R0
- 0x7C040800, // 001D CALL R1 4
- 0xA0000000, // 001E CLOSE R0
- 0x80000000, // 001F RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: mdns_announce_op_discovery_all_sessions
-********************************************************************/
-be_local_closure(Matter_Device_mdns_announce_op_discovery_all_sessions, /* name */
- be_nested_proto(
- 6, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 5]) { /* constants */
- /* K0 */ be_nested_str_weak(sessions),
- /* K1 */ be_nested_str_weak(get_deviceid),
- /* K2 */ be_nested_str_weak(get_fabric),
- /* K3 */ be_nested_str_weak(mdns_announce_op_discovery),
- /* K4 */ be_nested_str_weak(stop_iteration),
- }),
- be_str_weak(mdns_announce_op_discovery_all_sessions),
- &be_const_str_solidified,
- ( &(const binstruction[21]) { /* code */
- 0x60040010, // 0000 GETGBL R1 G16
- 0x88080100, // 0001 GETMBR R2 R0 K0
- 0x88080500, // 0002 GETMBR R2 R2 K0
- 0x7C040200, // 0003 CALL R1 1
- 0xA802000B, // 0004 EXBLK 0 #0011
- 0x5C080200, // 0005 MOVE R2 R1
- 0x7C080000, // 0006 CALL R2 0
- 0x8C0C0501, // 0007 GETMET R3 R2 K1
- 0x7C0C0200, // 0008 CALL R3 1
- 0x780E0005, // 0009 JMPF R3 #0010
- 0x8C0C0502, // 000A GETMET R3 R2 K2
- 0x7C0C0200, // 000B CALL R3 1
- 0x780E0002, // 000C JMPF R3 #0010
- 0x8C0C0103, // 000D GETMET R3 R0 K3
- 0x5C140400, // 000E MOVE R5 R2
- 0x7C0C0400, // 000F CALL R3 2
- 0x7001FFF3, // 0010 JMP #0005
- 0x58040004, // 0011 LDCONST R1 K4
- 0xAC040200, // 0012 CATCH R1 1 0
- 0xB0080000, // 0013 RAISE 2 R0 R0
- 0x80000000, // 0014 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: every_second
-********************************************************************/
-be_local_closure(Matter_Device_every_second, /* name */
+be_local_closure(Matter_Device_save_before_restart, /* name */
be_nested_proto(
3, /* nstack */
1, /* argc */
@@ -961,388 +630,18 @@ be_local_closure(Matter_Device_every_second, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_nested_str_weak(sessions),
- /* K1 */ be_nested_str_weak(every_second),
- /* K2 */ be_nested_str_weak(msg_handler),
- }),
- be_str_weak(every_second),
- &be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x8C040301, // 0001 GETMET R1 R1 K1
- 0x7C040200, // 0002 CALL R1 1
- 0x88040102, // 0003 GETMBR R1 R0 K2
- 0x8C040301, // 0004 GETMET R1 R1 K1
- 0x7C040200, // 0005 CALL R1 1
- 0x80000000, // 0006 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(Matter_Device_init, /* name */
- be_nested_proto(
- 8, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 1, /* has sup protos */
- ( &(const struct bproto*[ 2]) {
- be_nested_proto(
- 4, /* nstack */
- 0, /* argc */
- 0, /* varg */
- 1, /* has upvals */
- ( &(const bupvaldesc[ 1]) { /* upvals */
- be_local_const_upval(1, 0),
- }),
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 6]) { /* constants */
- /* K0 */ be_nested_str_weak(start_udp),
- /* K1 */ be_nested_str_weak(UDP_PORT),
- /* K2 */ be_nested_str_weak(tasmota),
- /* K3 */ be_nested_str_weak(remove_rule),
- /* K4 */ be_nested_str_weak(Wifi_X23Connected),
- /* K5 */ be_nested_str_weak(matter_device_udp),
- }),
- be_str_weak(_anonymous_),
- &be_const_str_solidified,
- ( &(const binstruction[11]) { /* code */
- 0x68000000, // 0000 GETUPV R0 U0
- 0x8C000100, // 0001 GETMET R0 R0 K0
- 0x68080000, // 0002 GETUPV R2 U0
- 0x88080501, // 0003 GETMBR R2 R2 K1
- 0x7C000400, // 0004 CALL R0 2
- 0xB8020400, // 0005 GETNGBL R0 K2
- 0x8C000103, // 0006 GETMET R0 R0 K3
- 0x58080004, // 0007 LDCONST R2 K4
- 0x580C0005, // 0008 LDCONST R3 K5
- 0x7C000600, // 0009 CALL R0 3
- 0x80000000, // 000A RET 0
- })
- ),
- be_nested_proto(
- 4, /* nstack */
- 0, /* argc */
- 0, /* varg */
- 1, /* has upvals */
- ( &(const bupvaldesc[ 1]) { /* upvals */
- be_local_const_upval(1, 0),
- }),
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 6]) { /* constants */
- /* K0 */ be_nested_str_weak(start_udp),
- /* K1 */ be_nested_str_weak(UDP_PORT),
- /* K2 */ be_nested_str_weak(tasmota),
- /* K3 */ be_nested_str_weak(remove_rule),
- /* K4 */ be_nested_str_weak(Eth_X23Connected),
- /* K5 */ be_nested_str_weak(matter_device_udp),
- }),
- be_str_weak(_anonymous_),
- &be_const_str_solidified,
- ( &(const binstruction[11]) { /* code */
- 0x68000000, // 0000 GETUPV R0 U0
- 0x8C000100, // 0001 GETMET R0 R0 K0
- 0x68080000, // 0002 GETUPV R2 U0
- 0x88080501, // 0003 GETMBR R2 R2 K1
- 0x7C000400, // 0004 CALL R0 2
- 0xB8020400, // 0005 GETNGBL R0 K2
- 0x8C000103, // 0006 GETMET R0 R0 K3
- 0x58080004, // 0007 LDCONST R2 K4
- 0x580C0005, // 0008 LDCONST R3 K5
- 0x7C000600, // 0009 CALL R0 3
- 0x80000000, // 000A RET 0
- })
- ),
- }),
- 1, /* has constants */
- ( &(const bvalue[39]) { /* constants */
- /* K0 */ be_nested_str_weak(crypto),
- /* K1 */ be_nested_str_weak(string),
- /* K2 */ be_nested_str_weak(tasmota),
- /* K3 */ be_nested_str_weak(get_option),
- /* K4 */ be_nested_str_weak(matter),
- /* K5 */ be_nested_str_weak(MATTER_OPTION),
- /* K6 */ be_nested_str_weak(UI),
- /* K7 */ be_nested_str_weak(plugins),
- /* K8 */ be_nested_str_weak(vendorid),
- /* K9 */ be_nested_str_weak(VENDOR_ID),
- /* K10 */ be_nested_str_weak(productid),
- /* K11 */ be_nested_str_weak(PRODUCT_ID),
- /* K12 */ be_nested_str_weak(iterations),
- /* K13 */ be_nested_str_weak(PBKDF_ITERATIONS),
- /* K14 */ be_nested_str_weak(load_param),
- /* K15 */ be_nested_str_weak(commissioning_instance_wifi),
- /* K16 */ be_nested_str_weak(random),
- /* K17 */ be_nested_str_weak(tohex),
- /* K18 */ be_nested_str_weak(commissioning_instance_eth),
- /* K19 */ be_nested_str_weak(sessions),
- /* K20 */ be_nested_str_weak(Session_Store),
- /* K21 */ be_nested_str_weak(load),
- /* K22 */ be_nested_str_weak(msg_handler),
- /* K23 */ be_nested_str_weak(MessageHandler),
- /* K24 */ be_nested_str_weak(ui),
- /* K25 */ be_nested_str_weak(push),
- /* K26 */ be_nested_str_weak(Plugin_core),
- /* K27 */ be_nested_str_weak(Plugin_Relay),
- /* K28 */ be_nested_str_weak(start_mdns_announce_hostnames),
- /* K29 */ be_nested_str_weak(wifi),
- /* K30 */ be_nested_str_weak(up),
- /* K31 */ be_nested_str_weak(start_udp),
- /* K32 */ be_nested_str_weak(UDP_PORT),
- /* K33 */ be_nested_str_weak(add_rule),
- /* K34 */ be_nested_str_weak(Wifi_X23Connected),
- /* K35 */ be_nested_str_weak(eth),
- /* K36 */ be_nested_str_weak(Eth_X23Connected),
- /* K37 */ be_nested_str_weak(start_basic_commissioning),
- /* K38 */ be_nested_str_weak(add_driver),
- }),
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[107]) { /* code */
- 0xA4060000, // 0000 IMPORT R1 K0
- 0xA40A0200, // 0001 IMPORT R2 K1
- 0xB80E0400, // 0002 GETNGBL R3 K2
- 0x8C0C0703, // 0003 GETMET R3 R3 K3
- 0xB8160800, // 0004 GETNGBL R5 K4
- 0x88140B05, // 0005 GETMBR R5 R5 K5
- 0x7C0C0400, // 0006 CALL R3 2
- 0x740E0004, // 0007 JMPT R3 #000D
- 0xB80E0800, // 0008 GETNGBL R3 K4
- 0x8C0C0706, // 0009 GETMET R3 R3 K6
- 0x5C140000, // 000A MOVE R5 R0
- 0x7C0C0400, // 000B CALL R3 2
- 0x80000600, // 000C RET 0
- 0x600C0012, // 000D GETGBL R3 G18
- 0x7C0C0000, // 000E CALL R3 0
- 0x90020E03, // 000F SETMBR R0 K7 R3
- 0x880C0109, // 0010 GETMBR R3 R0 K9
- 0x90021003, // 0011 SETMBR R0 K8 R3
- 0x880C010B, // 0012 GETMBR R3 R0 K11
- 0x90021403, // 0013 SETMBR R0 K10 R3
- 0x880C010D, // 0014 GETMBR R3 R0 K13
- 0x90021803, // 0015 SETMBR R0 K12 R3
- 0x8C0C010E, // 0016 GETMET R3 R0 K14
- 0x7C0C0200, // 0017 CALL R3 1
- 0x8C0C0310, // 0018 GETMET R3 R1 K16
- 0x54160007, // 0019 LDINT R5 8
- 0x7C0C0400, // 001A CALL R3 2
- 0x8C0C0711, // 001B GETMET R3 R3 K17
- 0x7C0C0200, // 001C CALL R3 1
- 0x90021E03, // 001D SETMBR R0 K15 R3
- 0x8C0C0310, // 001E GETMET R3 R1 K16
- 0x54160007, // 001F LDINT R5 8
- 0x7C0C0400, // 0020 CALL R3 2
- 0x8C0C0711, // 0021 GETMET R3 R3 K17
- 0x7C0C0200, // 0022 CALL R3 1
- 0x90022403, // 0023 SETMBR R0 K18 R3
- 0xB80E0800, // 0024 GETNGBL R3 K4
- 0x8C0C0714, // 0025 GETMET R3 R3 K20
- 0x7C0C0200, // 0026 CALL R3 1
- 0x90022603, // 0027 SETMBR R0 K19 R3
- 0x880C0113, // 0028 GETMBR R3 R0 K19
- 0x8C0C0715, // 0029 GETMET R3 R3 K21
- 0x7C0C0200, // 002A CALL R3 1
- 0xB80E0800, // 002B GETNGBL R3 K4
- 0x8C0C0717, // 002C GETMET R3 R3 K23
- 0x5C140000, // 002D MOVE R5 R0
- 0x7C0C0400, // 002E CALL R3 2
- 0x90022C03, // 002F SETMBR R0 K22 R3
- 0xB80E0800, // 0030 GETNGBL R3 K4
- 0x8C0C0706, // 0031 GETMET R3 R3 K6
- 0x5C140000, // 0032 MOVE R5 R0
- 0x7C0C0400, // 0033 CALL R3 2
- 0x90023003, // 0034 SETMBR R0 K24 R3
- 0x880C0107, // 0035 GETMBR R3 R0 K7
- 0x8C0C0719, // 0036 GETMET R3 R3 K25
- 0xB8160800, // 0037 GETNGBL R5 K4
- 0x8C140B1A, // 0038 GETMET R5 R5 K26
- 0x5C1C0000, // 0039 MOVE R7 R0
- 0x7C140400, // 003A CALL R5 2
- 0x7C0C0400, // 003B CALL R3 2
- 0x880C0107, // 003C GETMBR R3 R0 K7
- 0x8C0C0719, // 003D GETMET R3 R3 K25
- 0xB8160800, // 003E GETNGBL R5 K4
- 0x8C140B1B, // 003F GETMET R5 R5 K27
- 0x5C1C0000, // 0040 MOVE R7 R0
- 0x7C140400, // 0041 CALL R5 2
- 0x7C0C0400, // 0042 CALL R3 2
- 0x8C0C011C, // 0043 GETMET R3 R0 K28
- 0x7C0C0200, // 0044 CALL R3 1
- 0xB80E0400, // 0045 GETNGBL R3 K2
- 0x8C0C071D, // 0046 GETMET R3 R3 K29
- 0x7C0C0200, // 0047 CALL R3 1
- 0x940C071E, // 0048 GETIDX R3 R3 K30
- 0x780E0003, // 0049 JMPF R3 #004E
- 0x8C0C011F, // 004A GETMET R3 R0 K31
- 0x88140120, // 004B GETMBR R5 R0 K32
- 0x7C0C0400, // 004C CALL R3 2
- 0x70020005, // 004D JMP #0054
- 0xB80E0400, // 004E GETNGBL R3 K2
- 0x8C0C0721, // 004F GETMET R3 R3 K33
- 0x58140022, // 0050 LDCONST R5 K34
- 0x84180000, // 0051 CLOSURE R6 P0
- 0x5C1C0000, // 0052 MOVE R7 R0
- 0x7C0C0800, // 0053 CALL R3 4
- 0xB80E0400, // 0054 GETNGBL R3 K2
- 0x8C0C0723, // 0055 GETMET R3 R3 K35
- 0x7C0C0200, // 0056 CALL R3 1
- 0x940C071E, // 0057 GETIDX R3 R3 K30
- 0x780E0003, // 0058 JMPF R3 #005D
- 0x8C0C011F, // 0059 GETMET R3 R0 K31
- 0x88140120, // 005A GETMBR R5 R0 K32
- 0x7C0C0400, // 005B CALL R3 2
- 0x70020005, // 005C JMP #0063
- 0xB80E0400, // 005D GETNGBL R3 K2
- 0x8C0C0721, // 005E GETMET R3 R3 K33
- 0x58140024, // 005F LDCONST R5 K36
- 0x84180001, // 0060 CLOSURE R6 P1
- 0x5C1C0000, // 0061 MOVE R7 R0
- 0x7C0C0800, // 0062 CALL R3 4
- 0x8C0C0125, // 0063 GETMET R3 R0 K37
- 0x7C0C0200, // 0064 CALL R3 1
- 0xB80E0400, // 0065 GETNGBL R3 K2
- 0x8C0C0726, // 0066 GETMET R3 R3 K38
- 0x5C140000, // 0067 MOVE R5 R0
- 0x7C0C0400, // 0068 CALL R3 2
- 0xA0000000, // 0069 CLOSE R0
- 0x80000000, // 006A RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: start_basic_commissioning
-********************************************************************/
-be_local_closure(Matter_Device_start_basic_commissioning, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(compute_pbkdf),
- /* K1 */ be_nested_str_weak(passcode),
+ /* K0 */ be_nested_str_weak(stop_basic_commissioning),
+ /* K1 */ be_nested_str_weak(mdns_remove_op_discovery_all_fabrics),
}),
- be_str_weak(start_basic_commissioning),
+ be_str_weak(save_before_restart),
&be_const_str_solidified,
- ( &(const binstruction[ 4]) { /* code */
+ ( &(const binstruction[ 5]) { /* code */
0x8C040100, // 0000 GETMET R1 R0 K0
- 0x880C0101, // 0001 GETMBR R3 R0 K1
- 0x7C040400, // 0002 CALL R1 2
- 0x80000000, // 0003 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: start_operational_dicovery
-********************************************************************/
-be_local_closure(Matter_Device_start_operational_dicovery, /* name */
- be_nested_proto(
- 8, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[13]) { /* constants */
- /* K0 */ be_nested_str_weak(crypto),
- /* K1 */ be_nested_str_weak(mdns),
- /* K2 */ be_nested_str_weak(string),
- /* K3 */ be_nested_str_weak(salt),
- /* K4 */ be_nested_str_weak(w0),
- /* K5 */ be_nested_str_weak(w1),
- /* K6 */ be_nested_str_weak(L),
- /* K7 */ be_nested_str_weak(set_no_expiration),
- /* K8 */ be_nested_str_weak(set_persist),
- /* K9 */ be_nested_str_weak(close),
- /* K10 */ be_nested_str_weak(sessions),
- /* K11 */ be_nested_str_weak(save),
- /* K12 */ be_nested_str_weak(mdns_announce_op_discovery),
- }),
- be_str_weak(start_operational_dicovery),
- &be_const_str_solidified,
- ( &(const binstruction[25]) { /* code */
- 0xA40A0000, // 0000 IMPORT R2 K0
- 0xA40E0200, // 0001 IMPORT R3 K1
- 0xA4120400, // 0002 IMPORT R4 K2
- 0x4C140000, // 0003 LDNIL R5
- 0x90020605, // 0004 SETMBR R0 K3 R5
- 0x4C140000, // 0005 LDNIL R5
- 0x90020805, // 0006 SETMBR R0 K4 R5
- 0x4C140000, // 0007 LDNIL R5
- 0x90020A05, // 0008 SETMBR R0 K5 R5
- 0x4C140000, // 0009 LDNIL R5
- 0x90020C05, // 000A SETMBR R0 K6 R5
- 0x8C140307, // 000B GETMET R5 R1 K7
- 0x7C140200, // 000C CALL R5 1
- 0x8C140308, // 000D GETMET R5 R1 K8
- 0x501C0200, // 000E LDBOOL R7 1 0
- 0x7C140400, // 000F CALL R5 2
- 0x8C140309, // 0010 GETMET R5 R1 K9
- 0x7C140200, // 0011 CALL R5 1
- 0x8814010A, // 0012 GETMBR R5 R0 K10
- 0x8C140B0B, // 0013 GETMET R5 R5 K11
- 0x7C140200, // 0014 CALL R5 1
- 0x8C14010C, // 0015 GETMET R5 R0 K12
- 0x5C1C0200, // 0016 MOVE R7 R1
- 0x7C140400, // 0017 CALL R5 2
- 0x80000000, // 0018 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: start_commissioning_complete
-********************************************************************/
-be_local_closure(Matter_Device_start_commissioning_complete, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(tasmota),
- /* K1 */ be_nested_str_weak(log),
- /* K2 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X20Commissioning_X20complete_X20_X2A_X2A_X2A),
- /* K3 */ be_const_int(2),
- }),
- be_str_weak(start_commissioning_complete),
- &be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
- 0xB80A0000, // 0000 GETNGBL R2 K0
- 0x8C080501, // 0001 GETMET R2 R2 K1
- 0x58100002, // 0002 LDCONST R4 K2
- 0x58140003, // 0003 LDCONST R5 K3
- 0x7C080600, // 0004 CALL R2 3
- 0x80000000, // 0005 RET 0
+ 0x7C040200, // 0001 CALL R1 1
+ 0x8C040101, // 0002 GETMET R1 R0 K1
+ 0x7C040200, // 0003 CALL R1 1
+ 0x80000000, // 0004 RET 0
})
)
);
@@ -1368,8 +667,8 @@ be_local_closure(Matter_Device_compute_qrcode_content, /* name */
/* K2 */ be_const_int(3),
/* K3 */ be_nested_str_weak(vendorid),
/* K4 */ be_nested_str_weak(productid),
- /* K5 */ be_nested_str_weak(discriminator),
- /* K6 */ be_nested_str_weak(passcode),
+ /* K5 */ be_nested_str_weak(root_discriminator),
+ /* K6 */ be_nested_str_weak(root_passcode),
/* K7 */ be_const_int(134217727),
/* K8 */ be_nested_str_weak(MT_X3A),
/* K9 */ be_nested_str_weak(matter),
@@ -1426,23 +725,2872 @@ be_local_closure(Matter_Device_compute_qrcode_content, /* name */
/********************************************************************
-** Solidified function: finish_commissioning
+** Solidified function: _start_udp
********************************************************************/
-be_local_closure(Matter_Device_finish_commissioning, /* name */
+be_local_closure(Matter_Device__start_udp, /* name */
be_nested_proto(
- 1, /* nstack */
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 1]) {
+ be_nested_proto(
+ 8, /* nstack */
+ 3, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 1]) { /* upvals */
+ be_local_const_upval(1, 0),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(msg_received),
+ }),
+ be_str_weak(_X3Clambda_X3E),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0x680C0000, // 0000 GETUPV R3 U0
+ 0x8C0C0700, // 0001 GETMET R3 R3 K0
+ 0x5C140000, // 0002 MOVE R5 R0
+ 0x5C180200, // 0003 MOVE R6 R1
+ 0x5C1C0400, // 0004 MOVE R7 R2
+ 0x7C0C0800, // 0005 CALL R3 4
+ 0x80040600, // 0006 RET 1 R3
+ })
+ ),
+ }),
+ 1, /* has constants */
+ ( &(const bvalue[ 9]) { /* constants */
+ /* K0 */ be_nested_str_weak(udp_server),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(MTR_X3A_X20starting_X20UDP_X20server_X20on_X20port_X3A_X20),
+ /* K4 */ be_const_int(2),
+ /* K5 */ be_nested_str_weak(matter),
+ /* K6 */ be_nested_str_weak(UDPServer),
+ /* K7 */ be_nested_str_weak(),
+ /* K8 */ be_nested_str_weak(start),
+ }),
+ be_str_weak(_start_udp),
+ &be_const_str_solidified,
+ ( &(const binstruction[27]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x780A0000, // 0001 JMPF R2 #0003
+ 0x80000400, // 0002 RET 0
+ 0x4C080000, // 0003 LDNIL R2
+ 0x1C080202, // 0004 EQ R2 R1 R2
+ 0x780A0000, // 0005 JMPF R2 #0007
+ 0x540615A3, // 0006 LDINT R1 5540
+ 0xB80A0200, // 0007 GETNGBL R2 K1
+ 0x8C080502, // 0008 GETMET R2 R2 K2
+ 0x60100008, // 0009 GETGBL R4 G8
+ 0x5C140200, // 000A MOVE R5 R1
+ 0x7C100200, // 000B CALL R4 1
+ 0x00120604, // 000C ADD R4 K3 R4
+ 0x58140004, // 000D LDCONST R5 K4
+ 0x7C080600, // 000E CALL R2 3
+ 0xB80A0A00, // 000F GETNGBL R2 K5
+ 0x8C080506, // 0010 GETMET R2 R2 K6
+ 0x58100007, // 0011 LDCONST R4 K7
+ 0x5C140200, // 0012 MOVE R5 R1
+ 0x7C080600, // 0013 CALL R2 3
+ 0x90020002, // 0014 SETMBR R0 K0 R2
+ 0x88080100, // 0015 GETMBR R2 R0 K0
+ 0x8C080508, // 0016 GETMET R2 R2 K8
+ 0x84100000, // 0017 CLOSURE R4 P0
+ 0x7C080400, // 0018 CALL R2 2
+ 0xA0000000, // 0019 CLOSE R0
+ 0x80000000, // 001A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: attribute_updated
+********************************************************************/
+be_local_closure(Matter_Device_attribute_updated, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 5, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 9]) { /* constants */
+ /* K0 */ be_nested_str_weak(matter),
+ /* K1 */ be_nested_str_weak(Path),
+ /* K2 */ be_nested_str_weak(endpoint),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(attribute),
+ /* K5 */ be_nested_str_weak(message_handler),
+ /* K6 */ be_nested_str_weak(im),
+ /* K7 */ be_nested_str_weak(subs_shop),
+ /* K8 */ be_nested_str_weak(attribute_updated_ctx),
+ }),
+ be_str_weak(attribute_updated),
+ &be_const_str_solidified,
+ ( &(const binstruction[18]) { /* code */
+ 0x4C140000, // 0000 LDNIL R5
+ 0x1C140805, // 0001 EQ R5 R4 R5
+ 0x78160000, // 0002 JMPF R5 #0004
+ 0x50100000, // 0003 LDBOOL R4 0 0
+ 0xB8160000, // 0004 GETNGBL R5 K0
+ 0x8C140B01, // 0005 GETMET R5 R5 K1
+ 0x7C140200, // 0006 CALL R5 1
+ 0x90160401, // 0007 SETMBR R5 K2 R1
+ 0x90160602, // 0008 SETMBR R5 K3 R2
+ 0x90160803, // 0009 SETMBR R5 K4 R3
+ 0x88180105, // 000A GETMBR R6 R0 K5
+ 0x88180D06, // 000B GETMBR R6 R6 K6
+ 0x88180D07, // 000C GETMBR R6 R6 K7
+ 0x8C180D08, // 000D GETMET R6 R6 K8
+ 0x5C200A00, // 000E MOVE R8 R5
+ 0x5C240800, // 000F MOVE R9 R4
+ 0x7C180600, // 0010 CALL R6 3
+ 0x80000000, // 0011 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: every_250ms
+********************************************************************/
+be_local_closure(Matter_Device_every_250ms, /* name */
+ be_nested_proto(
+ 3, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
- 0, /* has constants */
- NULL, /* no const */
- be_str_weak(finish_commissioning),
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(message_handler),
+ /* K1 */ be_nested_str_weak(every_250ms),
+ }),
+ be_str_weak(every_250ms),
&be_const_str_solidified,
- ( &(const binstruction[ 1]) { /* code */
- 0x80000000, // 0000 RET 0
+ ( &(const binstruction[ 4]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x80000000, // 0003 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: process_attribute_expansion
+********************************************************************/
+be_local_closure(Matter_Device_process_attribute_expansion, /* name */
+ be_nested_proto(
+ 30, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 1]) {
+ be_nested_proto(
+ 7, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(keys),
+ /* K1 */ be_nested_str_weak(push),
+ /* K2 */ be_nested_str_weak(stop_iteration),
+ /* K3 */ be_const_int(1),
+ /* K4 */ be_const_int(0),
+ }),
+ be_str_weak(keys_sorted),
+ &be_const_str_solidified,
+ ( &(const binstruction[45]) { /* code */
+ 0x60040012, // 0000 GETGBL R1 G18
+ 0x7C040000, // 0001 CALL R1 0
+ 0x60080010, // 0002 GETGBL R2 G16
+ 0x8C0C0100, // 0003 GETMET R3 R0 K0
+ 0x7C0C0200, // 0004 CALL R3 1
+ 0x7C080200, // 0005 CALL R2 1
+ 0xA8020005, // 0006 EXBLK 0 #000D
+ 0x5C0C0400, // 0007 MOVE R3 R2
+ 0x7C0C0000, // 0008 CALL R3 0
+ 0x8C100301, // 0009 GETMET R4 R1 K1
+ 0x5C180600, // 000A MOVE R6 R3
+ 0x7C100400, // 000B CALL R4 2
+ 0x7001FFF9, // 000C JMP #0007
+ 0x58080002, // 000D LDCONST R2 K2
+ 0xAC080200, // 000E CATCH R2 1 0
+ 0xB0080000, // 000F RAISE 2 R0 R0
+ 0x60080010, // 0010 GETGBL R2 G16
+ 0x600C000C, // 0011 GETGBL R3 G12
+ 0x5C100200, // 0012 MOVE R4 R1
+ 0x7C0C0200, // 0013 CALL R3 1
+ 0x040C0703, // 0014 SUB R3 R3 K3
+ 0x400E0603, // 0015 CONNECT R3 K3 R3
+ 0x7C080200, // 0016 CALL R2 1
+ 0xA8020010, // 0017 EXBLK 0 #0029
+ 0x5C0C0400, // 0018 MOVE R3 R2
+ 0x7C0C0000, // 0019 CALL R3 0
+ 0x94100203, // 001A GETIDX R4 R1 R3
+ 0x5C140600, // 001B MOVE R5 R3
+ 0x24180B04, // 001C GT R6 R5 K4
+ 0x781A0008, // 001D JMPF R6 #0027
+ 0x04180B03, // 001E SUB R6 R5 K3
+ 0x94180206, // 001F GETIDX R6 R1 R6
+ 0x24180C04, // 0020 GT R6 R6 R4
+ 0x781A0004, // 0021 JMPF R6 #0027
+ 0x04180B03, // 0022 SUB R6 R5 K3
+ 0x94180206, // 0023 GETIDX R6 R1 R6
+ 0x98040A06, // 0024 SETIDX R1 R5 R6
+ 0x04140B03, // 0025 SUB R5 R5 K3
+ 0x7001FFF4, // 0026 JMP #001C
+ 0x98040A04, // 0027 SETIDX R1 R5 R4
+ 0x7001FFEE, // 0028 JMP #0018
+ 0x58080002, // 0029 LDCONST R2 K2
+ 0xAC080200, // 002A CATCH R2 1 0
+ 0xB0080000, // 002B RAISE 2 R0 R0
+ 0x80040200, // 002C RET 1 R1
+ })
+ ),
+ }),
+ 1, /* has constants */
+ ( &(const bvalue[26]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(endpoint),
+ /* K2 */ be_nested_str_weak(cluster),
+ /* K3 */ be_nested_str_weak(attribute),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(log),
+ /* K6 */ be_nested_str_weak(format),
+ /* K7 */ be_nested_str_weak(MTR_X3A_X20process_attribute_expansion_X20_X25s),
+ /* K8 */ be_nested_str_weak(MTR_X3A_X20endpoint_X3D_X25s_X20cluster_X3D_X25s_X20attribute_X3D_X25s),
+ /* K9 */ be_nested_str_weak(plugins),
+ /* K10 */ be_nested_str_weak(get_endpoint),
+ /* K11 */ be_nested_str_weak(contains),
+ /* K12 */ be_nested_str_weak(get_cluster_list),
+ /* K13 */ be_nested_str_weak(MTR_X3A_X20pi_X3D_X25s_X20ep_X3D_X25s_X20cl_list_X3D_X25s),
+ /* K14 */ be_nested_str_weak(get_attribute_list),
+ /* K15 */ be_nested_str_weak(MTR_X3A_X20pi_X3D_X25s_X20ep_X3D_X25s_X20cl_X3D_X25s_X20at_list_X3D_X25s),
+ /* K16 */ be_nested_str_weak(push),
+ /* K17 */ be_nested_str_weak(stop_iteration),
+ /* K18 */ be_nested_str_weak(MTR_X3A_X20expansion_X20_X5B_X2502X_X5D_X2504X_X2F_X2504X),
+ /* K19 */ be_const_int(3),
+ /* K20 */ be_nested_str_weak(status),
+ /* K21 */ be_nested_str_weak(matter),
+ /* K22 */ be_nested_str_weak(UNSUPPORTED_ENDPOINT),
+ /* K23 */ be_nested_str_weak(UNSUPPORTED_CLUSTER),
+ /* K24 */ be_nested_str_weak(UNSUPPORTED_ATTRIBUTE),
+ /* K25 */ be_nested_str_weak(UNREPORTABLE_ATTRIBUTE),
+ }),
+ be_str_weak(process_attribute_expansion),
+ &be_const_str_solidified,
+ ( &(const binstruction[271]) { /* code */
+ 0x840C0000, // 0000 CLOSURE R3 P0
+ 0xA4120000, // 0001 IMPORT R4 K0
+ 0x88140301, // 0002 GETMBR R5 R1 K1
+ 0x50180000, // 0003 LDBOOL R6 0 0
+ 0x881C0302, // 0004 GETMBR R7 R1 K2
+ 0x50200000, // 0005 LDBOOL R8 0 0
+ 0x88240303, // 0006 GETMBR R9 R1 K3
+ 0x50280000, // 0007 LDBOOL R10 0 0
+ 0x882C0301, // 0008 GETMBR R11 R1 K1
+ 0x4C300000, // 0009 LDNIL R12
+ 0x202C160C, // 000A NE R11 R11 R12
+ 0x782E0007, // 000B JMPF R11 #0014
+ 0x882C0302, // 000C GETMBR R11 R1 K2
+ 0x4C300000, // 000D LDNIL R12
+ 0x202C160C, // 000E NE R11 R11 R12
+ 0x782E0003, // 000F JMPF R11 #0014
+ 0x882C0303, // 0010 GETMBR R11 R1 K3
+ 0x4C300000, // 0011 LDNIL R12
+ 0x202C160C, // 0012 NE R11 R11 R12
+ 0x742E0000, // 0013 JMPT R11 #0015
+ 0x502C0001, // 0014 LDBOOL R11 0 1
+ 0x502C0200, // 0015 LDBOOL R11 1 0
+ 0xB8320800, // 0016 GETNGBL R12 K4
+ 0x8C301905, // 0017 GETMET R12 R12 K5
+ 0x8C380906, // 0018 GETMET R14 R4 K6
+ 0x58400007, // 0019 LDCONST R16 K7
+ 0x60440008, // 001A GETGBL R17 G8
+ 0x5C480200, // 001B MOVE R18 R1
+ 0x7C440200, // 001C CALL R17 1
+ 0x7C380600, // 001D CALL R14 3
+ 0x543E0003, // 001E LDINT R15 4
+ 0x7C300600, // 001F CALL R12 3
+ 0x60300013, // 0020 GETGBL R12 G19
+ 0x7C300000, // 0021 CALL R12 0
+ 0xB8360800, // 0022 GETNGBL R13 K4
+ 0x8C341B05, // 0023 GETMET R13 R13 K5
+ 0x8C3C0906, // 0024 GETMET R15 R4 K6
+ 0x58440008, // 0025 LDCONST R17 K8
+ 0x5C480A00, // 0026 MOVE R18 R5
+ 0x5C4C0E00, // 0027 MOVE R19 R7
+ 0x5C501200, // 0028 MOVE R20 R9
+ 0x7C3C0A00, // 0029 CALL R15 5
+ 0x54420003, // 002A LDINT R16 4
+ 0x7C340600, // 002B CALL R13 3
+ 0x60340010, // 002C GETGBL R13 G16
+ 0x88380109, // 002D GETMBR R14 R0 K9
+ 0x7C340200, // 002E CALL R13 1
+ 0xA8020078, // 002F EXBLK 0 #00A9
+ 0x5C381A00, // 0030 MOVE R14 R13
+ 0x7C380000, // 0031 CALL R14 0
+ 0x8C3C1D0A, // 0032 GETMET R15 R14 K10
+ 0x7C3C0200, // 0033 CALL R15 1
+ 0x4C400000, // 0034 LDNIL R16
+ 0x20400A10, // 0035 NE R16 R5 R16
+ 0x78420002, // 0036 JMPF R16 #003A
+ 0x20401E05, // 0037 NE R16 R15 R5
+ 0x78420000, // 0038 JMPF R16 #003A
+ 0x7001FFF5, // 0039 JMP #0030
+ 0x8C40190B, // 003A GETMET R16 R12 K11
+ 0x5C481E00, // 003B MOVE R18 R15
+ 0x7C400400, // 003C CALL R16 2
+ 0x74420002, // 003D JMPT R16 #0041
+ 0x60400013, // 003E GETGBL R16 G19
+ 0x7C400000, // 003F CALL R16 0
+ 0x98301E10, // 0040 SETIDX R12 R15 R16
+ 0x50180200, // 0041 LDBOOL R6 1 0
+ 0x8C401D0C, // 0042 GETMET R16 R14 K12
+ 0x5C481E00, // 0043 MOVE R18 R15
+ 0x7C400400, // 0044 CALL R16 2
+ 0xB8460800, // 0045 GETNGBL R17 K4
+ 0x8C442305, // 0046 GETMET R17 R17 K5
+ 0x8C4C0906, // 0047 GETMET R19 R4 K6
+ 0x5854000D, // 0048 LDCONST R21 K13
+ 0x60580008, // 0049 GETGBL R22 G8
+ 0x5C5C1C00, // 004A MOVE R23 R14
+ 0x7C580200, // 004B CALL R22 1
+ 0x605C0008, // 004C GETGBL R23 G8
+ 0x5C601E00, // 004D MOVE R24 R15
+ 0x7C5C0200, // 004E CALL R23 1
+ 0x60600008, // 004F GETGBL R24 G8
+ 0x5C642000, // 0050 MOVE R25 R16
+ 0x7C600200, // 0051 CALL R24 1
+ 0x7C4C0A00, // 0052 CALL R19 5
+ 0x54520003, // 0053 LDINT R20 4
+ 0x7C440600, // 0054 CALL R17 3
+ 0x60440010, // 0055 GETGBL R17 G16
+ 0x5C482000, // 0056 MOVE R18 R16
+ 0x7C440200, // 0057 CALL R17 1
+ 0xA802004B, // 0058 EXBLK 0 #00A5
+ 0x5C482200, // 0059 MOVE R18 R17
+ 0x7C480000, // 005A CALL R18 0
+ 0x4C4C0000, // 005B LDNIL R19
+ 0x204C0E13, // 005C NE R19 R7 R19
+ 0x784E0002, // 005D JMPF R19 #0061
+ 0x204C2407, // 005E NE R19 R18 R7
+ 0x784E0000, // 005F JMPF R19 #0061
+ 0x7001FFF7, // 0060 JMP #0059
+ 0x944C180F, // 0061 GETIDX R19 R12 R15
+ 0x8C4C270B, // 0062 GETMET R19 R19 K11
+ 0x5C542400, // 0063 MOVE R21 R18
+ 0x7C4C0400, // 0064 CALL R19 2
+ 0x744E0003, // 0065 JMPT R19 #006A
+ 0x944C180F, // 0066 GETIDX R19 R12 R15
+ 0x60500013, // 0067 GETGBL R20 G19
+ 0x7C500000, // 0068 CALL R20 0
+ 0x984C2414, // 0069 SETIDX R19 R18 R20
+ 0x50200200, // 006A LDBOOL R8 1 0
+ 0x8C4C1D0E, // 006B GETMET R19 R14 K14
+ 0x5C541E00, // 006C MOVE R21 R15
+ 0x5C582400, // 006D MOVE R22 R18
+ 0x7C4C0600, // 006E CALL R19 3
+ 0xB8520800, // 006F GETNGBL R20 K4
+ 0x8C502905, // 0070 GETMET R20 R20 K5
+ 0x8C580906, // 0071 GETMET R22 R4 K6
+ 0x5860000F, // 0072 LDCONST R24 K15
+ 0x60640008, // 0073 GETGBL R25 G8
+ 0x5C681C00, // 0074 MOVE R26 R14
+ 0x7C640200, // 0075 CALL R25 1
+ 0x60680008, // 0076 GETGBL R26 G8
+ 0x5C6C1E00, // 0077 MOVE R27 R15
+ 0x7C680200, // 0078 CALL R26 1
+ 0x606C0008, // 0079 GETGBL R27 G8
+ 0x5C702400, // 007A MOVE R28 R18
+ 0x7C6C0200, // 007B CALL R27 1
+ 0x60700008, // 007C GETGBL R28 G8
+ 0x5C742600, // 007D MOVE R29 R19
+ 0x7C700200, // 007E CALL R28 1
+ 0x7C580C00, // 007F CALL R22 6
+ 0x545E0003, // 0080 LDINT R23 4
+ 0x7C500600, // 0081 CALL R20 3
+ 0x60500010, // 0082 GETGBL R20 G16
+ 0x5C542600, // 0083 MOVE R21 R19
+ 0x7C500200, // 0084 CALL R20 1
+ 0xA802001A, // 0085 EXBLK 0 #00A1
+ 0x5C542800, // 0086 MOVE R21 R20
+ 0x7C540000, // 0087 CALL R21 0
+ 0x4C580000, // 0088 LDNIL R22
+ 0x20581216, // 0089 NE R22 R9 R22
+ 0x785A0002, // 008A JMPF R22 #008E
+ 0x20582A09, // 008B NE R22 R21 R9
+ 0x785A0000, // 008C JMPF R22 #008E
+ 0x7001FFF7, // 008D JMP #0086
+ 0x9458180F, // 008E GETIDX R22 R12 R15
+ 0x94582C12, // 008F GETIDX R22 R22 R18
+ 0x8C582D0B, // 0090 GETMET R22 R22 K11
+ 0x5C602A00, // 0091 MOVE R24 R21
+ 0x7C580400, // 0092 CALL R22 2
+ 0x745A0004, // 0093 JMPT R22 #0099
+ 0x9458180F, // 0094 GETIDX R22 R12 R15
+ 0x94582C12, // 0095 GETIDX R22 R22 R18
+ 0x605C0012, // 0096 GETGBL R23 G18
+ 0x7C5C0000, // 0097 CALL R23 0
+ 0x98582A17, // 0098 SETIDX R22 R21 R23
+ 0x50280200, // 0099 LDBOOL R10 1 0
+ 0x9458180F, // 009A GETIDX R22 R12 R15
+ 0x94582C12, // 009B GETIDX R22 R22 R18
+ 0x94582C15, // 009C GETIDX R22 R22 R21
+ 0x8C582D10, // 009D GETMET R22 R22 K16
+ 0x5C601C00, // 009E MOVE R24 R14
+ 0x7C580400, // 009F CALL R22 2
+ 0x7001FFE4, // 00A0 JMP #0086
+ 0x58500011, // 00A1 LDCONST R20 K17
+ 0xAC500200, // 00A2 CATCH R20 1 0
+ 0xB0080000, // 00A3 RAISE 2 R0 R0
+ 0x7001FFB3, // 00A4 JMP #0059
+ 0x58440011, // 00A5 LDCONST R17 K17
+ 0xAC440200, // 00A6 CATCH R17 1 0
+ 0xB0080000, // 00A7 RAISE 2 R0 R0
+ 0x7001FF86, // 00A8 JMP #0030
+ 0x58340011, // 00A9 LDCONST R13 K17
+ 0xAC340200, // 00AA CATCH R13 1 0
+ 0xB0080000, // 00AB RAISE 2 R0 R0
+ 0x60340010, // 00AC GETGBL R13 G16
+ 0x5C380600, // 00AD MOVE R14 R3
+ 0x5C3C1800, // 00AE MOVE R15 R12
+ 0x7C380200, // 00AF CALL R14 1
+ 0x7C340200, // 00B0 CALL R13 1
+ 0xA802003D, // 00B1 EXBLK 0 #00F0
+ 0x5C381A00, // 00B2 MOVE R14 R13
+ 0x7C380000, // 00B3 CALL R14 0
+ 0x603C0010, // 00B4 GETGBL R15 G16
+ 0x5C400600, // 00B5 MOVE R16 R3
+ 0x9444180E, // 00B6 GETIDX R17 R12 R14
+ 0x7C400200, // 00B7 CALL R16 1
+ 0x7C3C0200, // 00B8 CALL R15 1
+ 0xA8020031, // 00B9 EXBLK 0 #00EC
+ 0x5C401E00, // 00BA MOVE R16 R15
+ 0x7C400000, // 00BB CALL R16 0
+ 0x60440010, // 00BC GETGBL R17 G16
+ 0x5C480600, // 00BD MOVE R18 R3
+ 0x944C180E, // 00BE GETIDX R19 R12 R14
+ 0x944C2610, // 00BF GETIDX R19 R19 R16
+ 0x7C480200, // 00C0 CALL R18 1
+ 0x7C440200, // 00C1 CALL R17 1
+ 0xA8020024, // 00C2 EXBLK 0 #00E8
+ 0x5C482200, // 00C3 MOVE R18 R17
+ 0x7C480000, // 00C4 CALL R18 0
+ 0x604C0010, // 00C5 GETGBL R19 G16
+ 0x9450180E, // 00C6 GETIDX R20 R12 R14
+ 0x94502810, // 00C7 GETIDX R20 R20 R16
+ 0x94502812, // 00C8 GETIDX R20 R20 R18
+ 0x7C4C0200, // 00C9 CALL R19 1
+ 0xA8020018, // 00CA EXBLK 0 #00E4
+ 0x5C502600, // 00CB MOVE R20 R19
+ 0x7C500000, // 00CC CALL R20 0
+ 0xB8560800, // 00CD GETNGBL R21 K4
+ 0x8C542B05, // 00CE GETMET R21 R21 K5
+ 0x8C5C0906, // 00CF GETMET R23 R4 K6
+ 0x58640012, // 00D0 LDCONST R25 K18
+ 0x5C681C00, // 00D1 MOVE R26 R14
+ 0x5C6C2000, // 00D2 MOVE R27 R16
+ 0x5C702400, // 00D3 MOVE R28 R18
+ 0x7C5C0A00, // 00D4 CALL R23 5
+ 0x58600013, // 00D5 LDCONST R24 K19
+ 0x7C540600, // 00D6 CALL R21 3
+ 0x9006020E, // 00D7 SETMBR R1 K1 R14
+ 0x90060410, // 00D8 SETMBR R1 K2 R16
+ 0x90060612, // 00D9 SETMBR R1 K3 R18
+ 0x5C540400, // 00DA MOVE R21 R2
+ 0x5C582800, // 00DB MOVE R22 R20
+ 0x5C5C0200, // 00DC MOVE R23 R1
+ 0x5C601600, // 00DD MOVE R24 R11
+ 0x7C540600, // 00DE CALL R21 3
+ 0x782E0002, // 00DF JMPF R11 #00E3
+ 0x78560001, // 00E0 JMPF R21 #00E3
+ 0xA8040004, // 00E1 EXBLK 1 4
+ 0x80002C00, // 00E2 RET 0
+ 0x7001FFE6, // 00E3 JMP #00CB
+ 0x584C0011, // 00E4 LDCONST R19 K17
+ 0xAC4C0200, // 00E5 CATCH R19 1 0
+ 0xB0080000, // 00E6 RAISE 2 R0 R0
+ 0x7001FFDA, // 00E7 JMP #00C3
+ 0x58440011, // 00E8 LDCONST R17 K17
+ 0xAC440200, // 00E9 CATCH R17 1 0
+ 0xB0080000, // 00EA RAISE 2 R0 R0
+ 0x7001FFCD, // 00EB JMP #00BA
+ 0x583C0011, // 00EC LDCONST R15 K17
+ 0xAC3C0200, // 00ED CATCH R15 1 0
+ 0xB0080000, // 00EE RAISE 2 R0 R0
+ 0x7001FFC1, // 00EF JMP #00B2
+ 0x58340011, // 00F0 LDCONST R13 K17
+ 0xAC340200, // 00F1 CATCH R13 1 0
+ 0xB0080000, // 00F2 RAISE 2 R0 R0
+ 0x782E0019, // 00F3 JMPF R11 #010E
+ 0x5C340C00, // 00F4 MOVE R13 R6
+ 0x74360003, // 00F5 JMPT R13 #00FA
+ 0xB8362A00, // 00F6 GETNGBL R13 K21
+ 0x88341B16, // 00F7 GETMBR R13 R13 K22
+ 0x9006280D, // 00F8 SETMBR R1 K20 R13
+ 0x7002000E, // 00F9 JMP #0109
+ 0x5C341000, // 00FA MOVE R13 R8
+ 0x74360003, // 00FB JMPT R13 #0100
+ 0xB8362A00, // 00FC GETNGBL R13 K21
+ 0x88341B17, // 00FD GETMBR R13 R13 K23
+ 0x9006280D, // 00FE SETMBR R1 K20 R13
+ 0x70020008, // 00FF JMP #0109
+ 0x5C341400, // 0100 MOVE R13 R10
+ 0x74360003, // 0101 JMPT R13 #0106
+ 0xB8362A00, // 0102 GETNGBL R13 K21
+ 0x88341B18, // 0103 GETMBR R13 R13 K24
+ 0x9006280D, // 0104 SETMBR R1 K20 R13
+ 0x70020002, // 0105 JMP #0109
+ 0xB8362A00, // 0106 GETNGBL R13 K21
+ 0x88341B19, // 0107 GETMBR R13 R13 K25
+ 0x9006280D, // 0108 SETMBR R1 K20 R13
+ 0x5C340400, // 0109 MOVE R13 R2
+ 0x4C380000, // 010A LDNIL R14
+ 0x5C3C0200, // 010B MOVE R15 R1
+ 0x50400200, // 010C LDBOOL R16 1 0
+ 0x7C340600, // 010D CALL R13 3
+ 0x80000000, // 010E RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: save_param
+********************************************************************/
+be_local_closure(Matter_Device_save_param, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[17]) { /* constants */
+ /* K0 */ be_nested_str_weak(json),
+ /* K1 */ be_nested_str_weak(dump),
+ /* K2 */ be_nested_str_weak(distinguish),
+ /* K3 */ be_nested_str_weak(root_discriminator),
+ /* K4 */ be_nested_str_weak(passcode),
+ /* K5 */ be_nested_str_weak(root_passcode),
+ /* K6 */ be_nested_str_weak(ipv4only),
+ /* K7 */ be_nested_str_weak(string),
+ /* K8 */ be_nested_str_weak(FILENAME),
+ /* K9 */ be_nested_str_weak(w),
+ /* K10 */ be_nested_str_weak(write),
+ /* K11 */ be_nested_str_weak(close),
+ /* K12 */ be_nested_str_weak(tasmota),
+ /* K13 */ be_nested_str_weak(log),
+ /* K14 */ be_nested_str_weak(MTR_X3A_X20Session_Store_X3A_X3Asave_X20Exception_X3A),
+ /* K15 */ be_nested_str_weak(_X7C),
+ /* K16 */ be_const_int(2),
+ }),
+ be_str_weak(save_param),
+ &be_const_str_solidified,
+ ( &(const binstruction[45]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0x8C080301, // 0001 GETMET R2 R1 K1
+ 0x60100013, // 0002 GETGBL R4 G19
+ 0x7C100000, // 0003 CALL R4 0
+ 0x88140103, // 0004 GETMBR R5 R0 K3
+ 0x98120405, // 0005 SETIDX R4 K2 R5
+ 0x88140105, // 0006 GETMBR R5 R0 K5
+ 0x98120805, // 0007 SETIDX R4 K4 R5
+ 0x88140106, // 0008 GETMBR R5 R0 K6
+ 0x98120C05, // 0009 SETIDX R4 K6 R5
+ 0x7C080400, // 000A CALL R2 2
+ 0xA802000D, // 000B EXBLK 0 #001A
+ 0xA40E0E00, // 000C IMPORT R3 K7
+ 0x60100011, // 000D GETGBL R4 G17
+ 0x88140108, // 000E GETMBR R5 R0 K8
+ 0x58180009, // 000F LDCONST R6 K9
+ 0x7C100400, // 0010 CALL R4 2
+ 0x8C14090A, // 0011 GETMET R5 R4 K10
+ 0x5C1C0400, // 0012 MOVE R7 R2
+ 0x7C140400, // 0013 CALL R5 2
+ 0x8C14090B, // 0014 GETMET R5 R4 K11
+ 0x7C140200, // 0015 CALL R5 1
+ 0xA8040001, // 0016 EXBLK 1 1
+ 0x80040400, // 0017 RET 1 R2
+ 0xA8040001, // 0018 EXBLK 1 1
+ 0x70020011, // 0019 JMP #002C
+ 0xAC0C0002, // 001A CATCH R3 0 2
+ 0x7002000E, // 001B JMP #002B
+ 0xB8161800, // 001C GETNGBL R5 K12
+ 0x8C140B0D, // 001D GETMET R5 R5 K13
+ 0x601C0008, // 001E GETGBL R7 G8
+ 0x5C200600, // 001F MOVE R8 R3
+ 0x7C1C0200, // 0020 CALL R7 1
+ 0x001E1C07, // 0021 ADD R7 K14 R7
+ 0x001C0F0F, // 0022 ADD R7 R7 K15
+ 0x60200008, // 0023 GETGBL R8 G8
+ 0x5C240800, // 0024 MOVE R9 R4
+ 0x7C200200, // 0025 CALL R8 1
+ 0x001C0E08, // 0026 ADD R7 R7 R8
+ 0x58200010, // 0027 LDCONST R8 K16
+ 0x7C140600, // 0028 CALL R5 3
+ 0x80040400, // 0029 RET 1 R2
+ 0x70020000, // 002A JMP #002C
+ 0xB0080000, // 002B RAISE 2 R0 R0
+ 0x80000000, // 002C RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: mdns_announce_PASE
+********************************************************************/
+be_local_closure(Matter_Device_mdns_announce_PASE, /* name */
+ be_nested_proto(
+ 16, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[44]) { /* constants */
+ /* K0 */ be_nested_str_weak(mdns),
+ /* K1 */ be_nested_str_weak(string),
+ /* K2 */ be_nested_str_weak(crypto),
+ /* K3 */ be_nested_str_weak(VP),
+ /* K4 */ be_nested_str_weak(vendorid),
+ /* K5 */ be_nested_str_weak(_X2B),
+ /* K6 */ be_nested_str_weak(productid),
+ /* K7 */ be_nested_str_weak(D),
+ /* K8 */ be_nested_str_weak(commissioning_discriminator),
+ /* K9 */ be_nested_str_weak(CM),
+ /* K10 */ be_const_int(1),
+ /* K11 */ be_nested_str_weak(T),
+ /* K12 */ be_const_int(0),
+ /* K13 */ be_nested_str_weak(SII),
+ /* K14 */ be_nested_str_weak(SAI),
+ /* K15 */ be_nested_str_weak(commissioning_instance_wifi),
+ /* K16 */ be_nested_str_weak(random),
+ /* K17 */ be_nested_str_weak(tohex),
+ /* K18 */ be_nested_str_weak(commissioning_instance_eth),
+ /* K19 */ be_nested_str_weak(hostname_eth),
+ /* K20 */ be_nested_str_weak(tasmota),
+ /* K21 */ be_nested_str_weak(log),
+ /* K22 */ be_nested_str_weak(format),
+ /* K23 */ be_nested_str_weak(MTR_X3A_X20calling_X20mdns_X2Eadd_service_X28_X25s_X2C_X20_X25s_X2C_X20_X25i_X2C_X20_X25s_X2C_X20_X25s_X2C_X20_X25s_X29),
+ /* K24 */ be_nested_str_weak(_matterc),
+ /* K25 */ be_nested_str_weak(_udp),
+ /* K26 */ be_const_int(3),
+ /* K27 */ be_nested_str_weak(add_service),
+ /* K28 */ be_nested_str_weak(mdns_pase_eth),
+ /* K29 */ be_nested_str_weak(MTR_X3A_X20announce_X20mDNS_X20on_X20_X25s_X20_X27_X25s_X27_X20ptr_X20to_X20_X60_X25s_X2Elocal_X60),
+ /* K30 */ be_nested_str_weak(eth),
+ /* K31 */ be_const_int(2),
+ /* K32 */ be_nested_str_weak(_L),
+ /* K33 */ be_nested_str_weak(MTR_X3A_X20adding_X20subtype_X3A_X20),
+ /* K34 */ be_nested_str_weak(add_subtype),
+ /* K35 */ be_nested_str_weak(_S),
+ /* K36 */ be_nested_str_weak(_V),
+ /* K37 */ be_nested_str_weak(_CM1),
+ /* K38 */ be_nested_str_weak(hostname_wifi),
+ /* K39 */ be_nested_str_weak(mdns_pase_wifi),
+ /* K40 */ be_nested_str_weak(MTR_X3A_X20starting_X20mDNS_X20on_X20_X25s_X20_X27_X25s_X27_X20ptr_X20to_X20_X60_X25s_X2Elocal_X60),
+ /* K41 */ be_nested_str_weak(wifi),
+ /* K42 */ be_nested_str_weak(MTR_X3A_X20Exception),
+ /* K43 */ be_nested_str_weak(_X7C),
+ }),
+ be_str_weak(mdns_announce_PASE),
+ &be_const_str_solidified,
+ ( &(const binstruction[267]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0xA40A0200, // 0001 IMPORT R2 K1
+ 0xA40E0400, // 0002 IMPORT R3 K2
+ 0x60100013, // 0003 GETGBL R4 G19
+ 0x7C100000, // 0004 CALL R4 0
+ 0x60140008, // 0005 GETGBL R5 G8
+ 0x88180104, // 0006 GETMBR R6 R0 K4
+ 0x7C140200, // 0007 CALL R5 1
+ 0x00140B05, // 0008 ADD R5 R5 K5
+ 0x60180008, // 0009 GETGBL R6 G8
+ 0x881C0106, // 000A GETMBR R7 R0 K6
+ 0x7C180200, // 000B CALL R6 1
+ 0x00140A06, // 000C ADD R5 R5 R6
+ 0x98120605, // 000D SETIDX R4 K3 R5
+ 0x88140108, // 000E GETMBR R5 R0 K8
+ 0x98120E05, // 000F SETIDX R4 K7 R5
+ 0x9812130A, // 0010 SETIDX R4 K9 K10
+ 0x9812170C, // 0011 SETIDX R4 K11 K12
+ 0x54161387, // 0012 LDINT R5 5000
+ 0x98121A05, // 0013 SETIDX R4 K13 R5
+ 0x5416012B, // 0014 LDINT R5 300
+ 0x98121C05, // 0015 SETIDX R4 K14 R5
+ 0x8C140710, // 0016 GETMET R5 R3 K16
+ 0x541E0007, // 0017 LDINT R7 8
+ 0x7C140400, // 0018 CALL R5 2
+ 0x8C140B11, // 0019 GETMET R5 R5 K17
+ 0x7C140200, // 001A CALL R5 1
+ 0x90021E05, // 001B SETMBR R0 K15 R5
+ 0x8C140710, // 001C GETMET R5 R3 K16
+ 0x541E0007, // 001D LDINT R7 8
+ 0x7C140400, // 001E CALL R5 2
+ 0x8C140B11, // 001F GETMET R5 R5 K17
+ 0x7C140200, // 0020 CALL R5 1
+ 0x90022405, // 0021 SETMBR R0 K18 R5
+ 0xA80200D5, // 0022 EXBLK 0 #00F9
+ 0x88140113, // 0023 GETMBR R5 R0 K19
+ 0x78160067, // 0024 JMPF R5 #008D
+ 0xB8162800, // 0025 GETNGBL R5 K20
+ 0x8C140B15, // 0026 GETMET R5 R5 K21
+ 0x8C1C0516, // 0027 GETMET R7 R2 K22
+ 0x58240017, // 0028 LDCONST R9 K23
+ 0x58280018, // 0029 LDCONST R10 K24
+ 0x582C0019, // 002A LDCONST R11 K25
+ 0x543215A3, // 002B LDINT R12 5540
+ 0x60340008, // 002C GETGBL R13 G8
+ 0x5C380800, // 002D MOVE R14 R4
+ 0x7C340200, // 002E CALL R13 1
+ 0x88380112, // 002F GETMBR R14 R0 K18
+ 0x883C0113, // 0030 GETMBR R15 R0 K19
+ 0x7C1C1000, // 0031 CALL R7 8
+ 0x5820001A, // 0032 LDCONST R8 K26
+ 0x7C140600, // 0033 CALL R5 3
+ 0x8C14031B, // 0034 GETMET R5 R1 K27
+ 0x581C0018, // 0035 LDCONST R7 K24
+ 0x58200019, // 0036 LDCONST R8 K25
+ 0x542615A3, // 0037 LDINT R9 5540
+ 0x5C280800, // 0038 MOVE R10 R4
+ 0x882C0112, // 0039 GETMBR R11 R0 K18
+ 0x88300113, // 003A GETMBR R12 R0 K19
+ 0x7C140E00, // 003B CALL R5 7
+ 0x50140200, // 003C LDBOOL R5 1 0
+ 0x90023805, // 003D SETMBR R0 K28 R5
+ 0xB8162800, // 003E GETNGBL R5 K20
+ 0x8C140B15, // 003F GETMET R5 R5 K21
+ 0x8C1C0516, // 0040 GETMET R7 R2 K22
+ 0x5824001D, // 0041 LDCONST R9 K29
+ 0x5828001E, // 0042 LDCONST R10 K30
+ 0x882C0112, // 0043 GETMBR R11 R0 K18
+ 0x88300113, // 0044 GETMBR R12 R0 K19
+ 0x7C1C0A00, // 0045 CALL R7 5
+ 0x5820001F, // 0046 LDCONST R8 K31
+ 0x7C140600, // 0047 CALL R5 3
+ 0x60140008, // 0048 GETGBL R5 G8
+ 0x88180108, // 0049 GETMBR R6 R0 K8
+ 0x541E0FFE, // 004A LDINT R7 4095
+ 0x2C180C07, // 004B AND R6 R6 R7
+ 0x7C140200, // 004C CALL R5 1
+ 0x00164005, // 004D ADD R5 K32 R5
+ 0xB81A2800, // 004E GETNGBL R6 K20
+ 0x8C180D15, // 004F GETMET R6 R6 K21
+ 0x00224205, // 0050 ADD R8 K33 R5
+ 0x5824001F, // 0051 LDCONST R9 K31
+ 0x7C180600, // 0052 CALL R6 3
+ 0x8C180322, // 0053 GETMET R6 R1 K34
+ 0x58200018, // 0054 LDCONST R8 K24
+ 0x58240019, // 0055 LDCONST R9 K25
+ 0x88280112, // 0056 GETMBR R10 R0 K18
+ 0x882C0113, // 0057 GETMBR R11 R0 K19
+ 0x5C300A00, // 0058 MOVE R12 R5
+ 0x7C180C00, // 0059 CALL R6 6
+ 0x60180008, // 005A GETGBL R6 G8
+ 0x881C0108, // 005B GETMBR R7 R0 K8
+ 0x54220EFF, // 005C LDINT R8 3840
+ 0x2C1C0E08, // 005D AND R7 R7 R8
+ 0x54220007, // 005E LDINT R8 8
+ 0x3C1C0E08, // 005F SHR R7 R7 R8
+ 0x7C180200, // 0060 CALL R6 1
+ 0x001A4606, // 0061 ADD R6 K35 R6
+ 0x5C140C00, // 0062 MOVE R5 R6
+ 0xB81A2800, // 0063 GETNGBL R6 K20
+ 0x8C180D15, // 0064 GETMET R6 R6 K21
+ 0x00224205, // 0065 ADD R8 K33 R5
+ 0x5824001F, // 0066 LDCONST R9 K31
+ 0x7C180600, // 0067 CALL R6 3
+ 0x8C180322, // 0068 GETMET R6 R1 K34
+ 0x58200018, // 0069 LDCONST R8 K24
+ 0x58240019, // 006A LDCONST R9 K25
+ 0x88280112, // 006B GETMBR R10 R0 K18
+ 0x882C0113, // 006C GETMBR R11 R0 K19
+ 0x5C300A00, // 006D MOVE R12 R5
+ 0x7C180C00, // 006E CALL R6 6
+ 0x60180008, // 006F GETGBL R6 G8
+ 0x881C0104, // 0070 GETMBR R7 R0 K4
+ 0x7C180200, // 0071 CALL R6 1
+ 0x001A4806, // 0072 ADD R6 K36 R6
+ 0x5C140C00, // 0073 MOVE R5 R6
+ 0xB81A2800, // 0074 GETNGBL R6 K20
+ 0x8C180D15, // 0075 GETMET R6 R6 K21
+ 0x00224205, // 0076 ADD R8 K33 R5
+ 0x5824001F, // 0077 LDCONST R9 K31
+ 0x7C180600, // 0078 CALL R6 3
+ 0x8C180322, // 0079 GETMET R6 R1 K34
+ 0x58200018, // 007A LDCONST R8 K24
+ 0x58240019, // 007B LDCONST R9 K25
+ 0x88280112, // 007C GETMBR R10 R0 K18
+ 0x882C0113, // 007D GETMBR R11 R0 K19
+ 0x5C300A00, // 007E MOVE R12 R5
+ 0x7C180C00, // 007F CALL R6 6
+ 0x58140025, // 0080 LDCONST R5 K37
+ 0xB81A2800, // 0081 GETNGBL R6 K20
+ 0x8C180D15, // 0082 GETMET R6 R6 K21
+ 0x00224205, // 0083 ADD R8 K33 R5
+ 0x5824001F, // 0084 LDCONST R9 K31
+ 0x7C180600, // 0085 CALL R6 3
+ 0x8C180322, // 0086 GETMET R6 R1 K34
+ 0x58200018, // 0087 LDCONST R8 K24
+ 0x58240019, // 0088 LDCONST R9 K25
+ 0x88280112, // 0089 GETMBR R10 R0 K18
+ 0x882C0113, // 008A GETMBR R11 R0 K19
+ 0x5C300A00, // 008B MOVE R12 R5
+ 0x7C180C00, // 008C CALL R6 6
+ 0x88140126, // 008D GETMBR R5 R0 K38
+ 0x78160067, // 008E JMPF R5 #00F7
+ 0xB8162800, // 008F GETNGBL R5 K20
+ 0x8C140B15, // 0090 GETMET R5 R5 K21
+ 0x8C1C0516, // 0091 GETMET R7 R2 K22
+ 0x58240017, // 0092 LDCONST R9 K23
+ 0x58280018, // 0093 LDCONST R10 K24
+ 0x582C0019, // 0094 LDCONST R11 K25
+ 0x543215A3, // 0095 LDINT R12 5540
+ 0x60340008, // 0096 GETGBL R13 G8
+ 0x5C380800, // 0097 MOVE R14 R4
+ 0x7C340200, // 0098 CALL R13 1
+ 0x8838010F, // 0099 GETMBR R14 R0 K15
+ 0x883C0126, // 009A GETMBR R15 R0 K38
+ 0x7C1C1000, // 009B CALL R7 8
+ 0x5820001A, // 009C LDCONST R8 K26
+ 0x7C140600, // 009D CALL R5 3
+ 0x8C14031B, // 009E GETMET R5 R1 K27
+ 0x581C0018, // 009F LDCONST R7 K24
+ 0x58200019, // 00A0 LDCONST R8 K25
+ 0x542615A3, // 00A1 LDINT R9 5540
+ 0x5C280800, // 00A2 MOVE R10 R4
+ 0x882C010F, // 00A3 GETMBR R11 R0 K15
+ 0x88300126, // 00A4 GETMBR R12 R0 K38
+ 0x7C140E00, // 00A5 CALL R5 7
+ 0x50140200, // 00A6 LDBOOL R5 1 0
+ 0x90024E05, // 00A7 SETMBR R0 K39 R5
+ 0xB8162800, // 00A8 GETNGBL R5 K20
+ 0x8C140B15, // 00A9 GETMET R5 R5 K21
+ 0x8C1C0516, // 00AA GETMET R7 R2 K22
+ 0x58240028, // 00AB LDCONST R9 K40
+ 0x58280029, // 00AC LDCONST R10 K41
+ 0x882C010F, // 00AD GETMBR R11 R0 K15
+ 0x88300126, // 00AE GETMBR R12 R0 K38
+ 0x7C1C0A00, // 00AF CALL R7 5
+ 0x5820001F, // 00B0 LDCONST R8 K31
+ 0x7C140600, // 00B1 CALL R5 3
+ 0x60140008, // 00B2 GETGBL R5 G8
+ 0x88180108, // 00B3 GETMBR R6 R0 K8
+ 0x541E0FFE, // 00B4 LDINT R7 4095
+ 0x2C180C07, // 00B5 AND R6 R6 R7
+ 0x7C140200, // 00B6 CALL R5 1
+ 0x00164005, // 00B7 ADD R5 K32 R5
+ 0xB81A2800, // 00B8 GETNGBL R6 K20
+ 0x8C180D15, // 00B9 GETMET R6 R6 K21
+ 0x00224205, // 00BA ADD R8 K33 R5
+ 0x5824001F, // 00BB LDCONST R9 K31
+ 0x7C180600, // 00BC CALL R6 3
+ 0x8C180322, // 00BD GETMET R6 R1 K34
+ 0x58200018, // 00BE LDCONST R8 K24
+ 0x58240019, // 00BF LDCONST R9 K25
+ 0x8828010F, // 00C0 GETMBR R10 R0 K15
+ 0x882C0126, // 00C1 GETMBR R11 R0 K38
+ 0x5C300A00, // 00C2 MOVE R12 R5
+ 0x7C180C00, // 00C3 CALL R6 6
+ 0x60180008, // 00C4 GETGBL R6 G8
+ 0x881C0108, // 00C5 GETMBR R7 R0 K8
+ 0x54220EFF, // 00C6 LDINT R8 3840
+ 0x2C1C0E08, // 00C7 AND R7 R7 R8
+ 0x54220007, // 00C8 LDINT R8 8
+ 0x3C1C0E08, // 00C9 SHR R7 R7 R8
+ 0x7C180200, // 00CA CALL R6 1
+ 0x001A4606, // 00CB ADD R6 K35 R6
+ 0x5C140C00, // 00CC MOVE R5 R6
+ 0xB81A2800, // 00CD GETNGBL R6 K20
+ 0x8C180D15, // 00CE GETMET R6 R6 K21
+ 0x00224205, // 00CF ADD R8 K33 R5
+ 0x5824001F, // 00D0 LDCONST R9 K31
+ 0x7C180600, // 00D1 CALL R6 3
+ 0x8C180322, // 00D2 GETMET R6 R1 K34
+ 0x58200018, // 00D3 LDCONST R8 K24
+ 0x58240019, // 00D4 LDCONST R9 K25
+ 0x8828010F, // 00D5 GETMBR R10 R0 K15
+ 0x882C0126, // 00D6 GETMBR R11 R0 K38
+ 0x5C300A00, // 00D7 MOVE R12 R5
+ 0x7C180C00, // 00D8 CALL R6 6
+ 0x60180008, // 00D9 GETGBL R6 G8
+ 0x881C0104, // 00DA GETMBR R7 R0 K4
+ 0x7C180200, // 00DB CALL R6 1
+ 0x001A4806, // 00DC ADD R6 K36 R6
+ 0x5C140C00, // 00DD MOVE R5 R6
+ 0xB81A2800, // 00DE GETNGBL R6 K20
+ 0x8C180D15, // 00DF GETMET R6 R6 K21
+ 0x00224205, // 00E0 ADD R8 K33 R5
+ 0x5824001F, // 00E1 LDCONST R9 K31
+ 0x7C180600, // 00E2 CALL R6 3
+ 0x8C180322, // 00E3 GETMET R6 R1 K34
+ 0x58200018, // 00E4 LDCONST R8 K24
+ 0x58240019, // 00E5 LDCONST R9 K25
+ 0x8828010F, // 00E6 GETMBR R10 R0 K15
+ 0x882C0126, // 00E7 GETMBR R11 R0 K38
+ 0x5C300A00, // 00E8 MOVE R12 R5
+ 0x7C180C00, // 00E9 CALL R6 6
+ 0x58140025, // 00EA LDCONST R5 K37
+ 0xB81A2800, // 00EB GETNGBL R6 K20
+ 0x8C180D15, // 00EC GETMET R6 R6 K21
+ 0x00224205, // 00ED ADD R8 K33 R5
+ 0x5824001F, // 00EE LDCONST R9 K31
+ 0x7C180600, // 00EF CALL R6 3
+ 0x8C180322, // 00F0 GETMET R6 R1 K34
+ 0x58200018, // 00F1 LDCONST R8 K24
+ 0x58240019, // 00F2 LDCONST R9 K25
+ 0x8828010F, // 00F3 GETMBR R10 R0 K15
+ 0x882C0126, // 00F4 GETMBR R11 R0 K38
+ 0x5C300A00, // 00F5 MOVE R12 R5
+ 0x7C180C00, // 00F6 CALL R6 6
+ 0xA8040001, // 00F7 EXBLK 1 1
+ 0x70020010, // 00F8 JMP #010A
+ 0xAC140002, // 00F9 CATCH R5 0 2
+ 0x7002000D, // 00FA JMP #0109
+ 0xB81E2800, // 00FB GETNGBL R7 K20
+ 0x8C1C0F15, // 00FC GETMET R7 R7 K21
+ 0x60240008, // 00FD GETGBL R9 G8
+ 0x5C280A00, // 00FE MOVE R10 R5
+ 0x7C240200, // 00FF CALL R9 1
+ 0x00265409, // 0100 ADD R9 K42 R9
+ 0x0024132B, // 0101 ADD R9 R9 K43
+ 0x60280008, // 0102 GETGBL R10 G8
+ 0x5C2C0C00, // 0103 MOVE R11 R6
+ 0x7C280200, // 0104 CALL R10 1
+ 0x0024120A, // 0105 ADD R9 R9 R10
+ 0x5828001F, // 0106 LDCONST R10 K31
+ 0x7C1C0600, // 0107 CALL R7 3
+ 0x70020000, // 0108 JMP #010A
+ 0xB0080000, // 0109 RAISE 2 R0 R0
+ 0x80000000, // 010A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: start_basic_commissioning
+********************************************************************/
+be_local_closure(Matter_Device_start_basic_commissioning, /* name */
+ be_nested_proto(
+ 13, /* nstack */
+ 8, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 2]) {
+ be_nested_proto(
+ 4, /* nstack */
+ 0, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 1]) { /* upvals */
+ be_local_const_upval(1, 0),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(mdns_announce_PASE),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(remove_rule),
+ /* K3 */ be_nested_str_weak(Wifi_X23Connected),
+ }),
+ be_str_weak(_anonymous_),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x68000000, // 0000 GETUPV R0 U0
+ 0x8C000100, // 0001 GETMET R0 R0 K0
+ 0x7C000200, // 0002 CALL R0 1
+ 0xB8020200, // 0003 GETNGBL R0 K1
+ 0x8C000102, // 0004 GETMET R0 R0 K2
+ 0x58080003, // 0005 LDCONST R2 K3
+ 0x580C0000, // 0006 LDCONST R3 K0
+ 0x7C000600, // 0007 CALL R0 3
+ 0x80000000, // 0008 RET 0
+ })
+ ),
+ be_nested_proto(
+ 4, /* nstack */
+ 0, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 1]) { /* upvals */
+ be_local_const_upval(1, 0),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(mdns_announce_PASE),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(remove_rule),
+ /* K3 */ be_nested_str_weak(Eth_X23Connected),
+ }),
+ be_str_weak(_anonymous_),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x68000000, // 0000 GETUPV R0 U0
+ 0x8C000100, // 0001 GETMET R0 R0 K0
+ 0x7C000200, // 0002 CALL R0 1
+ 0xB8020200, // 0003 GETNGBL R0 K1
+ 0x8C000102, // 0004 GETMET R0 R0 K2
+ 0x58080003, // 0005 LDCONST R2 K3
+ 0x580C0000, // 0006 LDCONST R3 K0
+ 0x7C000600, // 0007 CALL R0 3
+ 0x80000000, // 0008 RET 0
+ })
+ ),
+ }),
+ 1, /* has constants */
+ ( &(const bvalue[16]) { /* constants */
+ /* K0 */ be_nested_str_weak(commissioning_open),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(millis),
+ /* K3 */ be_nested_str_weak(commissioning_iterations),
+ /* K4 */ be_nested_str_weak(commissioning_discriminator),
+ /* K5 */ be_nested_str_weak(commissioning_salt),
+ /* K6 */ be_nested_str_weak(commissioning_w0),
+ /* K7 */ be_nested_str_weak(commissioning_L),
+ /* K8 */ be_nested_str_weak(commissioning_admin_fabric),
+ /* K9 */ be_nested_str_weak(wifi),
+ /* K10 */ be_nested_str_weak(up),
+ /* K11 */ be_nested_str_weak(eth),
+ /* K12 */ be_nested_str_weak(mdns_announce_PASE),
+ /* K13 */ be_nested_str_weak(add_rule),
+ /* K14 */ be_nested_str_weak(Wifi_X23Connected),
+ /* K15 */ be_nested_str_weak(Eth_X23Connected),
+ }),
+ be_str_weak(start_basic_commissioning),
+ &be_const_str_solidified,
+ ( &(const binstruction[40]) { /* code */
+ 0xB8220200, // 0000 GETNGBL R8 K1
+ 0x8C201102, // 0001 GETMET R8 R8 K2
+ 0x7C200200, // 0002 CALL R8 1
+ 0x542603E7, // 0003 LDINT R9 1000
+ 0x08240209, // 0004 MUL R9 R1 R9
+ 0x00201009, // 0005 ADD R8 R8 R9
+ 0x90020008, // 0006 SETMBR R0 K0 R8
+ 0x90020602, // 0007 SETMBR R0 K3 R2
+ 0x90020803, // 0008 SETMBR R0 K4 R3
+ 0x90020A04, // 0009 SETMBR R0 K5 R4
+ 0x90020C05, // 000A SETMBR R0 K6 R5
+ 0x90020E06, // 000B SETMBR R0 K7 R6
+ 0x90021007, // 000C SETMBR R0 K8 R7
+ 0xB8220200, // 000D GETNGBL R8 K1
+ 0x8C201109, // 000E GETMET R8 R8 K9
+ 0x7C200200, // 000F CALL R8 1
+ 0x9420110A, // 0010 GETIDX R8 R8 K10
+ 0x74220004, // 0011 JMPT R8 #0017
+ 0xB8220200, // 0012 GETNGBL R8 K1
+ 0x8C20110B, // 0013 GETMET R8 R8 K11
+ 0x7C200200, // 0014 CALL R8 1
+ 0x9420110A, // 0015 GETIDX R8 R8 K10
+ 0x78220002, // 0016 JMPF R8 #001A
+ 0x8C20010C, // 0017 GETMET R8 R0 K12
+ 0x7C200200, // 0018 CALL R8 1
+ 0x7002000B, // 0019 JMP #0026
+ 0xB8220200, // 001A GETNGBL R8 K1
+ 0x8C20110D, // 001B GETMET R8 R8 K13
+ 0x5828000E, // 001C LDCONST R10 K14
+ 0x842C0000, // 001D CLOSURE R11 P0
+ 0x5830000C, // 001E LDCONST R12 K12
+ 0x7C200800, // 001F CALL R8 4
+ 0xB8220200, // 0020 GETNGBL R8 K1
+ 0x8C20110D, // 0021 GETMET R8 R8 K13
+ 0x5828000F, // 0022 LDCONST R10 K15
+ 0x842C0001, // 0023 CLOSURE R11 P1
+ 0x5830000C, // 0024 LDCONST R12 K12
+ 0x7C200800, // 0025 CALL R8 4
+ 0xA0000000, // 0026 CLOSE R0
+ 0x80000000, // 0027 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_Device_init, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 2]) {
+ be_nested_proto(
+ 4, /* nstack */
+ 0, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 1]) { /* upvals */
+ be_local_const_upval(1, 0),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(start),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(remove_rule),
+ /* K3 */ be_nested_str_weak(Wifi_X23Connected),
+ /* K4 */ be_nested_str_weak(matter_start),
+ }),
+ be_str_weak(_anonymous_),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x68000000, // 0000 GETUPV R0 U0
+ 0x8C000100, // 0001 GETMET R0 R0 K0
+ 0x7C000200, // 0002 CALL R0 1
+ 0xB8020200, // 0003 GETNGBL R0 K1
+ 0x8C000102, // 0004 GETMET R0 R0 K2
+ 0x58080003, // 0005 LDCONST R2 K3
+ 0x580C0004, // 0006 LDCONST R3 K4
+ 0x7C000600, // 0007 CALL R0 3
+ 0x80000000, // 0008 RET 0
+ })
+ ),
+ be_nested_proto(
+ 4, /* nstack */
+ 0, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 1]) { /* upvals */
+ be_local_const_upval(1, 0),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(start),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(remove_rule),
+ /* K3 */ be_nested_str_weak(Eth_X23Connected),
+ /* K4 */ be_nested_str_weak(matter_start),
+ }),
+ be_str_weak(_anonymous_),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x68000000, // 0000 GETUPV R0 U0
+ 0x8C000100, // 0001 GETMET R0 R0 K0
+ 0x7C000200, // 0002 CALL R0 1
+ 0xB8020200, // 0003 GETNGBL R0 K1
+ 0x8C000102, // 0004 GETMET R0 R0 K2
+ 0x58080003, // 0005 LDCONST R2 K3
+ 0x580C0004, // 0006 LDCONST R3 K4
+ 0x7C000600, // 0007 CALL R0 3
+ 0x80000000, // 0008 RET 0
+ })
+ ),
+ }),
+ 1, /* has constants */
+ ( &(const bvalue[35]) { /* constants */
+ /* K0 */ be_nested_str_weak(crypto),
+ /* K1 */ be_nested_str_weak(string),
+ /* K2 */ be_nested_str_weak(tasmota),
+ /* K3 */ be_nested_str_weak(get_option),
+ /* K4 */ be_nested_str_weak(matter),
+ /* K5 */ be_nested_str_weak(MATTER_OPTION),
+ /* K6 */ be_nested_str_weak(UI),
+ /* K7 */ be_nested_str_weak(started),
+ /* K8 */ be_nested_str_weak(plugins),
+ /* K9 */ be_nested_str_weak(vendorid),
+ /* K10 */ be_nested_str_weak(VENDOR_ID),
+ /* K11 */ be_nested_str_weak(productid),
+ /* K12 */ be_nested_str_weak(PRODUCT_ID),
+ /* K13 */ be_nested_str_weak(root_iterations),
+ /* K14 */ be_nested_str_weak(PBKDF_ITERATIONS),
+ /* K15 */ be_nested_str_weak(root_salt),
+ /* K16 */ be_nested_str_weak(random),
+ /* K17 */ be_nested_str_weak(ipv4only),
+ /* K18 */ be_nested_str_weak(load_param),
+ /* K19 */ be_nested_str_weak(sessions),
+ /* K20 */ be_nested_str_weak(Session_Store),
+ /* K21 */ be_nested_str_weak(load_fabrics),
+ /* K22 */ be_nested_str_weak(message_handler),
+ /* K23 */ be_nested_str_weak(MessageHandler),
+ /* K24 */ be_nested_str_weak(ui),
+ /* K25 */ be_nested_str_weak(wifi),
+ /* K26 */ be_nested_str_weak(up),
+ /* K27 */ be_nested_str_weak(eth),
+ /* K28 */ be_nested_str_weak(start),
+ /* K29 */ be_nested_str_weak(add_rule),
+ /* K30 */ be_nested_str_weak(Wifi_X23Connected),
+ /* K31 */ be_nested_str_weak(matter_start),
+ /* K32 */ be_nested_str_weak(Eth_X23Connected),
+ /* K33 */ be_nested_str_weak(_init_basic_commissioning),
+ /* K34 */ be_nested_str_weak(add_driver),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[91]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0xA40A0200, // 0001 IMPORT R2 K1
+ 0xB80E0400, // 0002 GETNGBL R3 K2
+ 0x8C0C0703, // 0003 GETMET R3 R3 K3
+ 0xB8160800, // 0004 GETNGBL R5 K4
+ 0x88140B05, // 0005 GETMBR R5 R5 K5
+ 0x7C0C0400, // 0006 CALL R3 2
+ 0x740E0004, // 0007 JMPT R3 #000D
+ 0xB80E0800, // 0008 GETNGBL R3 K4
+ 0x8C0C0706, // 0009 GETMET R3 R3 K6
+ 0x5C140000, // 000A MOVE R5 R0
+ 0x7C0C0400, // 000B CALL R3 2
+ 0x80000600, // 000C RET 0
+ 0x500C0000, // 000D LDBOOL R3 0 0
+ 0x90020E03, // 000E SETMBR R0 K7 R3
+ 0x600C0012, // 000F GETGBL R3 G18
+ 0x7C0C0000, // 0010 CALL R3 0
+ 0x90021003, // 0011 SETMBR R0 K8 R3
+ 0x880C010A, // 0012 GETMBR R3 R0 K10
+ 0x90021203, // 0013 SETMBR R0 K9 R3
+ 0x880C010C, // 0014 GETMBR R3 R0 K12
+ 0x90021603, // 0015 SETMBR R0 K11 R3
+ 0x880C010E, // 0016 GETMBR R3 R0 K14
+ 0x90021A03, // 0017 SETMBR R0 K13 R3
+ 0x8C0C0310, // 0018 GETMET R3 R1 K16
+ 0x5416000F, // 0019 LDINT R5 16
+ 0x7C0C0400, // 001A CALL R3 2
+ 0x90021E03, // 001B SETMBR R0 K15 R3
+ 0x500C0000, // 001C LDBOOL R3 0 0
+ 0x90022203, // 001D SETMBR R0 K17 R3
+ 0x8C0C0112, // 001E GETMET R3 R0 K18
+ 0x7C0C0200, // 001F CALL R3 1
+ 0xB80E0800, // 0020 GETNGBL R3 K4
+ 0x8C0C0714, // 0021 GETMET R3 R3 K20
+ 0x7C0C0200, // 0022 CALL R3 1
+ 0x90022603, // 0023 SETMBR R0 K19 R3
+ 0x880C0113, // 0024 GETMBR R3 R0 K19
+ 0x8C0C0715, // 0025 GETMET R3 R3 K21
+ 0x7C0C0200, // 0026 CALL R3 1
+ 0xB80E0800, // 0027 GETNGBL R3 K4
+ 0x8C0C0717, // 0028 GETMET R3 R3 K23
+ 0x5C140000, // 0029 MOVE R5 R0
+ 0x7C0C0400, // 002A CALL R3 2
+ 0x90022C03, // 002B SETMBR R0 K22 R3
+ 0xB80E0800, // 002C GETNGBL R3 K4
+ 0x8C0C0706, // 002D GETMET R3 R3 K6
+ 0x5C140000, // 002E MOVE R5 R0
+ 0x7C0C0400, // 002F CALL R3 2
+ 0x90023003, // 0030 SETMBR R0 K24 R3
+ 0xB80E0400, // 0031 GETNGBL R3 K2
+ 0x8C0C0719, // 0032 GETMET R3 R3 K25
+ 0x7C0C0200, // 0033 CALL R3 1
+ 0x940C071A, // 0034 GETIDX R3 R3 K26
+ 0x740E0004, // 0035 JMPT R3 #003B
+ 0xB80E0400, // 0036 GETNGBL R3 K2
+ 0x8C0C071B, // 0037 GETMET R3 R3 K27
+ 0x7C0C0200, // 0038 CALL R3 1
+ 0x940C071A, // 0039 GETIDX R3 R3 K26
+ 0x780E0001, // 003A JMPF R3 #003D
+ 0x8C0C011C, // 003B GETMET R3 R0 K28
+ 0x7C0C0200, // 003C CALL R3 1
+ 0xB80E0400, // 003D GETNGBL R3 K2
+ 0x8C0C0719, // 003E GETMET R3 R3 K25
+ 0x7C0C0200, // 003F CALL R3 1
+ 0x940C071A, // 0040 GETIDX R3 R3 K26
+ 0x740E0005, // 0041 JMPT R3 #0048
+ 0xB80E0400, // 0042 GETNGBL R3 K2
+ 0x8C0C071D, // 0043 GETMET R3 R3 K29
+ 0x5814001E, // 0044 LDCONST R5 K30
+ 0x84180000, // 0045 CLOSURE R6 P0
+ 0x581C001F, // 0046 LDCONST R7 K31
+ 0x7C0C0800, // 0047 CALL R3 4
+ 0xB80E0400, // 0048 GETNGBL R3 K2
+ 0x8C0C071B, // 0049 GETMET R3 R3 K27
+ 0x7C0C0200, // 004A CALL R3 1
+ 0x940C071A, // 004B GETIDX R3 R3 K26
+ 0x740E0005, // 004C JMPT R3 #0053
+ 0xB80E0400, // 004D GETNGBL R3 K2
+ 0x8C0C071D, // 004E GETMET R3 R3 K29
+ 0x58140020, // 004F LDCONST R5 K32
+ 0x84180001, // 0050 CLOSURE R6 P1
+ 0x581C001F, // 0051 LDCONST R7 K31
+ 0x7C0C0800, // 0052 CALL R3 4
+ 0x8C0C0121, // 0053 GETMET R3 R0 K33
+ 0x7C0C0200, // 0054 CALL R3 1
+ 0xB80E0400, // 0055 GETNGBL R3 K2
+ 0x8C0C0722, // 0056 GETMET R3 R3 K34
+ 0x5C140000, // 0057 MOVE R5 R0
+ 0x7C0C0400, // 0058 CALL R3 2
+ 0xA0000000, // 0059 CLOSE R0
+ 0x80000000, // 005A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: start_commissioning_complete
+********************************************************************/
+be_local_closure(Matter_Device_start_commissioning_complete, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(tasmota),
+ /* K1 */ be_nested_str_weak(log),
+ /* K2 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X20Commissioning_X20complete_X20_X2A_X2A_X2A),
+ /* K3 */ be_const_int(2),
+ /* K4 */ be_nested_str_weak(stop_basic_commissioning),
+ }),
+ be_str_weak(start_commissioning_complete),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0xB80A0000, // 0000 GETNGBL R2 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x58100002, // 0002 LDCONST R4 K2
+ 0x58140003, // 0003 LDCONST R5 K3
+ 0x7C080600, // 0004 CALL R2 3
+ 0x8C080104, // 0005 GETMET R2 R0 K4
+ 0x7C080200, // 0006 CALL R2 1
+ 0x80000000, // 0007 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: is_root_commissioning_open
+********************************************************************/
+be_local_closure(Matter_Device_is_root_commissioning_open, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(commissioning_open),
+ /* K1 */ be_nested_str_weak(commissioning_admin_fabric),
+ }),
+ be_str_weak(is_root_commissioning_open),
+ &be_const_str_solidified,
+ ( &(const binstruction[11]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x4C080000, // 0001 LDNIL R2
+ 0x20040202, // 0002 NE R1 R1 R2
+ 0x78060003, // 0003 JMPF R1 #0008
+ 0x88040101, // 0004 GETMBR R1 R0 K1
+ 0x4C080000, // 0005 LDNIL R2
+ 0x1C040202, // 0006 EQ R1 R1 R2
+ 0x74060000, // 0007 JMPT R1 #0009
+ 0x50040001, // 0008 LDBOOL R1 0 1
+ 0x50040200, // 0009 LDBOOL R1 1 0
+ 0x80040200, // 000A RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: is_commissioning_open
+********************************************************************/
+be_local_closure(Matter_Device_is_commissioning_open, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(commissioning_open),
+ }),
+ be_str_weak(is_commissioning_open),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x4C080000, // 0001 LDNIL R2
+ 0x20040202, // 0002 NE R1 R1 R2
+ 0x80040200, // 0003 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: stop
+********************************************************************/
+be_local_closure(Matter_Device_stop, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(tasmota),
+ /* K1 */ be_nested_str_weak(remove_driver),
+ /* K2 */ be_nested_str_weak(udp_server),
+ /* K3 */ be_nested_str_weak(stop),
+ }),
+ be_str_weak(stop),
+ &be_const_str_solidified,
+ ( &(const binstruction[10]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C040400, // 0003 CALL R1 2
+ 0x88040102, // 0004 GETMBR R1 R0 K2
+ 0x78060002, // 0005 JMPF R1 #0009
+ 0x88040102, // 0006 GETMBR R1 R0 K2
+ 0x8C040303, // 0007 GETMET R1 R1 K3
+ 0x7C040200, // 0008 CALL R1 1
+ 0x80000000, // 0009 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: mdns_remove_op_discovery
+********************************************************************/
+be_local_closure(Matter_Device_mdns_remove_op_discovery, /* name */
+ be_nested_proto(
+ 14, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[24]) { /* constants */
+ /* K0 */ be_nested_str_weak(mdns),
+ /* K1 */ be_nested_str_weak(string),
+ /* K2 */ be_nested_str_weak(get_device_id),
+ /* K3 */ be_nested_str_weak(copy),
+ /* K4 */ be_nested_str_weak(reverse),
+ /* K5 */ be_nested_str_weak(get_fabric_compressed),
+ /* K6 */ be_nested_str_weak(tohex),
+ /* K7 */ be_nested_str_weak(_X2D),
+ /* K8 */ be_nested_str_weak(tasmota),
+ /* K9 */ be_nested_str_weak(eth),
+ /* K10 */ be_nested_str_weak(find),
+ /* K11 */ be_nested_str_weak(up),
+ /* K12 */ be_nested_str_weak(log),
+ /* K13 */ be_nested_str_weak(format),
+ /* K14 */ be_nested_str_weak(MTR_X3A_X20remove_X20mDNS_X20on_X20_X25s_X20_X27_X25s_X27),
+ /* K15 */ be_const_int(2),
+ /* K16 */ be_nested_str_weak(remove_service),
+ /* K17 */ be_nested_str_weak(_matter),
+ /* K18 */ be_nested_str_weak(_tcp),
+ /* K19 */ be_nested_str_weak(hostname_eth),
+ /* K20 */ be_nested_str_weak(wifi),
+ /* K21 */ be_nested_str_weak(hostname_wifi),
+ /* K22 */ be_nested_str_weak(MTR_X3A_X20Exception),
+ /* K23 */ be_nested_str_weak(_X7C),
+ }),
+ be_str_weak(mdns_remove_op_discovery),
+ &be_const_str_solidified,
+ ( &(const binstruction[81]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0xA40E0200, // 0001 IMPORT R3 K1
+ 0xA802003B, // 0002 EXBLK 0 #003F
+ 0x8C100302, // 0003 GETMET R4 R1 K2
+ 0x7C100200, // 0004 CALL R4 1
+ 0x8C100903, // 0005 GETMET R4 R4 K3
+ 0x7C100200, // 0006 CALL R4 1
+ 0x8C100904, // 0007 GETMET R4 R4 K4
+ 0x7C100200, // 0008 CALL R4 1
+ 0x8C140305, // 0009 GETMET R5 R1 K5
+ 0x7C140200, // 000A CALL R5 1
+ 0x8C180B06, // 000B GETMET R6 R5 K6
+ 0x7C180200, // 000C CALL R6 1
+ 0x00180D07, // 000D ADD R6 R6 K7
+ 0x8C1C0906, // 000E GETMET R7 R4 K6
+ 0x7C1C0200, // 000F CALL R7 1
+ 0x00180C07, // 0010 ADD R6 R6 R7
+ 0xB81E1000, // 0011 GETNGBL R7 K8
+ 0x8C1C0F09, // 0012 GETMET R7 R7 K9
+ 0x7C1C0200, // 0013 CALL R7 1
+ 0x8C1C0F0A, // 0014 GETMET R7 R7 K10
+ 0x5824000B, // 0015 LDCONST R9 K11
+ 0x7C1C0400, // 0016 CALL R7 2
+ 0x781E000E, // 0017 JMPF R7 #0027
+ 0xB81E1000, // 0018 GETNGBL R7 K8
+ 0x8C1C0F0C, // 0019 GETMET R7 R7 K12
+ 0x8C24070D, // 001A GETMET R9 R3 K13
+ 0x582C000E, // 001B LDCONST R11 K14
+ 0x58300009, // 001C LDCONST R12 K9
+ 0x5C340C00, // 001D MOVE R13 R6
+ 0x7C240800, // 001E CALL R9 4
+ 0x5828000F, // 001F LDCONST R10 K15
+ 0x7C1C0600, // 0020 CALL R7 3
+ 0x8C1C0510, // 0021 GETMET R7 R2 K16
+ 0x58240011, // 0022 LDCONST R9 K17
+ 0x58280012, // 0023 LDCONST R10 K18
+ 0x5C2C0C00, // 0024 MOVE R11 R6
+ 0x88300113, // 0025 GETMBR R12 R0 K19
+ 0x7C1C0A00, // 0026 CALL R7 5
+ 0xB81E1000, // 0027 GETNGBL R7 K8
+ 0x8C1C0F14, // 0028 GETMET R7 R7 K20
+ 0x7C1C0200, // 0029 CALL R7 1
+ 0x8C1C0F0A, // 002A GETMET R7 R7 K10
+ 0x5824000B, // 002B LDCONST R9 K11
+ 0x7C1C0400, // 002C CALL R7 2
+ 0x781E000E, // 002D JMPF R7 #003D
+ 0xB81E1000, // 002E GETNGBL R7 K8
+ 0x8C1C0F0C, // 002F GETMET R7 R7 K12
+ 0x8C24070D, // 0030 GETMET R9 R3 K13
+ 0x582C000E, // 0031 LDCONST R11 K14
+ 0x58300014, // 0032 LDCONST R12 K20
+ 0x5C340C00, // 0033 MOVE R13 R6
+ 0x7C240800, // 0034 CALL R9 4
+ 0x5828000F, // 0035 LDCONST R10 K15
+ 0x7C1C0600, // 0036 CALL R7 3
+ 0x8C1C0510, // 0037 GETMET R7 R2 K16
+ 0x58240011, // 0038 LDCONST R9 K17
+ 0x58280012, // 0039 LDCONST R10 K18
+ 0x5C2C0C00, // 003A MOVE R11 R6
+ 0x88300115, // 003B GETMBR R12 R0 K21
+ 0x7C1C0A00, // 003C CALL R7 5
+ 0xA8040001, // 003D EXBLK 1 1
+ 0x70020010, // 003E JMP #0050
+ 0xAC100002, // 003F CATCH R4 0 2
+ 0x7002000D, // 0040 JMP #004F
+ 0xB81A1000, // 0041 GETNGBL R6 K8
+ 0x8C180D0C, // 0042 GETMET R6 R6 K12
+ 0x60200008, // 0043 GETGBL R8 G8
+ 0x5C240800, // 0044 MOVE R9 R4
+ 0x7C200200, // 0045 CALL R8 1
+ 0x00222C08, // 0046 ADD R8 K22 R8
+ 0x00201117, // 0047 ADD R8 R8 K23
+ 0x60240008, // 0048 GETGBL R9 G8
+ 0x5C280A00, // 0049 MOVE R10 R5
+ 0x7C240200, // 004A CALL R9 1
+ 0x00201009, // 004B ADD R8 R8 R9
+ 0x5824000F, // 004C LDCONST R9 K15
+ 0x7C180600, // 004D CALL R6 3
+ 0x70020000, // 004E JMP #0050
+ 0xB0080000, // 004F RAISE 2 R0 R0
+ 0x80000000, // 0050 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: msg_received
+********************************************************************/
+be_local_closure(Matter_Device_msg_received, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(message_handler),
+ /* K1 */ be_nested_str_weak(msg_received),
+ }),
+ be_str_weak(msg_received),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0x88100100, // 0000 GETMBR R4 R0 K0
+ 0x8C100901, // 0001 GETMET R4 R4 K1
+ 0x5C180200, // 0002 MOVE R6 R1
+ 0x5C1C0400, // 0003 MOVE R7 R2
+ 0x5C200600, // 0004 MOVE R8 R3
+ 0x7C100800, // 0005 CALL R4 4
+ 0x80040800, // 0006 RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: sort_distinct
+********************************************************************/
+be_local_closure(Matter_Device_sort_distinct, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 1, /* argc */
+ 4, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_const_class(be_class_Matter_Device),
+ /* K1 */ be_const_int(1),
+ /* K2 */ be_const_int(0),
+ /* K3 */ be_nested_str_weak(stop_iteration),
+ /* K4 */ be_nested_str_weak(remove),
+ }),
+ be_str_weak(sort_distinct),
+ &be_const_str_solidified,
+ ( &(const binstruction[53]) { /* code */
+ 0x58040000, // 0000 LDCONST R1 K0
+ 0x60080010, // 0001 GETGBL R2 G16
+ 0x600C000C, // 0002 GETGBL R3 G12
+ 0x5C100000, // 0003 MOVE R4 R0
+ 0x7C0C0200, // 0004 CALL R3 1
+ 0x040C0701, // 0005 SUB R3 R3 K1
+ 0x400E0203, // 0006 CONNECT R3 K1 R3
+ 0x7C080200, // 0007 CALL R2 1
+ 0xA8020010, // 0008 EXBLK 0 #001A
+ 0x5C0C0400, // 0009 MOVE R3 R2
+ 0x7C0C0000, // 000A CALL R3 0
+ 0x94100003, // 000B GETIDX R4 R0 R3
+ 0x5C140600, // 000C MOVE R5 R3
+ 0x24180B02, // 000D GT R6 R5 K2
+ 0x781A0008, // 000E JMPF R6 #0018
+ 0x04180B01, // 000F SUB R6 R5 K1
+ 0x94180006, // 0010 GETIDX R6 R0 R6
+ 0x24180C04, // 0011 GT R6 R6 R4
+ 0x781A0004, // 0012 JMPF R6 #0018
+ 0x04180B01, // 0013 SUB R6 R5 K1
+ 0x94180006, // 0014 GETIDX R6 R0 R6
+ 0x98000A06, // 0015 SETIDX R0 R5 R6
+ 0x04140B01, // 0016 SUB R5 R5 K1
+ 0x7001FFF4, // 0017 JMP #000D
+ 0x98000A04, // 0018 SETIDX R0 R5 R4
+ 0x7001FFEE, // 0019 JMP #0009
+ 0x58080003, // 001A LDCONST R2 K3
+ 0xAC080200, // 001B CATCH R2 1 0
+ 0xB0080000, // 001C RAISE 2 R0 R0
+ 0x58080001, // 001D LDCONST R2 K1
+ 0x600C000C, // 001E GETGBL R3 G12
+ 0x5C100000, // 001F MOVE R4 R0
+ 0x7C0C0200, // 0020 CALL R3 1
+ 0x180C0701, // 0021 LE R3 R3 K1
+ 0x780E0000, // 0022 JMPF R3 #0024
+ 0x80040000, // 0023 RET 1 R0
+ 0x940C0102, // 0024 GETIDX R3 R0 K2
+ 0x6010000C, // 0025 GETGBL R4 G12
+ 0x5C140000, // 0026 MOVE R5 R0
+ 0x7C100200, // 0027 CALL R4 1
+ 0x14100404, // 0028 LT R4 R2 R4
+ 0x78120009, // 0029 JMPF R4 #0034
+ 0x94100002, // 002A GETIDX R4 R0 R2
+ 0x1C100803, // 002B EQ R4 R4 R3
+ 0x78120003, // 002C JMPF R4 #0031
+ 0x8C100104, // 002D GETMET R4 R0 K4
+ 0x5C180400, // 002E MOVE R6 R2
+ 0x7C100400, // 002F CALL R4 2
+ 0x70020001, // 0030 JMP #0033
+ 0x940C0002, // 0031 GETIDX R3 R0 R2
+ 0x00080501, // 0032 ADD R2 R2 K1
+ 0x7001FFF0, // 0033 JMP #0025
+ 0x80040000, // 0034 RET 1 R0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: start_mdns_announce_hostnames
+********************************************************************/
+be_local_closure(Matter_Device_start_mdns_announce_hostnames, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 2]) {
+ be_nested_proto(
+ 4, /* nstack */
+ 0, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 1]) { /* upvals */
+ be_local_const_upval(1, 0),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(_mdns_announce_hostname),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(remove_rule),
+ /* K3 */ be_nested_str_weak(Wifi_X23Connected),
+ /* K4 */ be_nested_str_weak(matter_mdns_host),
+ }),
+ be_str_weak(_anonymous_),
+ &be_const_str_solidified,
+ ( &(const binstruction[10]) { /* code */
+ 0x68000000, // 0000 GETUPV R0 U0
+ 0x8C000100, // 0001 GETMET R0 R0 K0
+ 0x50080000, // 0002 LDBOOL R2 0 0
+ 0x7C000400, // 0003 CALL R0 2
+ 0xB8020200, // 0004 GETNGBL R0 K1
+ 0x8C000102, // 0005 GETMET R0 R0 K2
+ 0x58080003, // 0006 LDCONST R2 K3
+ 0x580C0004, // 0007 LDCONST R3 K4
+ 0x7C000600, // 0008 CALL R0 3
+ 0x80000000, // 0009 RET 0
+ })
+ ),
+ be_nested_proto(
+ 4, /* nstack */
+ 0, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 1]) { /* upvals */
+ be_local_const_upval(1, 0),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(_mdns_announce_hostname),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(remove_rule),
+ /* K3 */ be_nested_str_weak(Eth_X23Connected),
+ /* K4 */ be_nested_str_weak(matter_mdns_host),
+ }),
+ be_str_weak(_anonymous_),
+ &be_const_str_solidified,
+ ( &(const binstruction[10]) { /* code */
+ 0x68000000, // 0000 GETUPV R0 U0
+ 0x8C000100, // 0001 GETMET R0 R0 K0
+ 0x50080200, // 0002 LDBOOL R2 1 0
+ 0x7C000400, // 0003 CALL R0 2
+ 0xB8020200, // 0004 GETNGBL R0 K1
+ 0x8C000102, // 0005 GETMET R0 R0 K2
+ 0x58080003, // 0006 LDCONST R2 K3
+ 0x580C0004, // 0007 LDCONST R3 K4
+ 0x7C000600, // 0008 CALL R0 3
+ 0x80000000, // 0009 RET 0
+ })
+ ),
+ }),
+ 1, /* has constants */
+ ( &(const bvalue[ 9]) { /* constants */
+ /* K0 */ be_nested_str_weak(tasmota),
+ /* K1 */ be_nested_str_weak(wifi),
+ /* K2 */ be_nested_str_weak(up),
+ /* K3 */ be_nested_str_weak(_mdns_announce_hostname),
+ /* K4 */ be_nested_str_weak(add_rule),
+ /* K5 */ be_nested_str_weak(Wifi_X23Connected),
+ /* K6 */ be_nested_str_weak(matter_mdns_host),
+ /* K7 */ be_nested_str_weak(eth),
+ /* K8 */ be_nested_str_weak(Eth_X23Connected),
+ }),
+ be_str_weak(start_mdns_announce_hostnames),
+ &be_const_str_solidified,
+ ( &(const binstruction[32]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x94040302, // 0003 GETIDX R1 R1 K2
+ 0x78060003, // 0004 JMPF R1 #0009
+ 0x8C040103, // 0005 GETMET R1 R0 K3
+ 0x500C0000, // 0006 LDBOOL R3 0 0
+ 0x7C040400, // 0007 CALL R1 2
+ 0x70020005, // 0008 JMP #000F
+ 0xB8060000, // 0009 GETNGBL R1 K0
+ 0x8C040304, // 000A GETMET R1 R1 K4
+ 0x580C0005, // 000B LDCONST R3 K5
+ 0x84100000, // 000C CLOSURE R4 P0
+ 0x58140006, // 000D LDCONST R5 K6
+ 0x7C040800, // 000E CALL R1 4
+ 0xB8060000, // 000F GETNGBL R1 K0
+ 0x8C040307, // 0010 GETMET R1 R1 K7
+ 0x7C040200, // 0011 CALL R1 1
+ 0x94040302, // 0012 GETIDX R1 R1 K2
+ 0x78060003, // 0013 JMPF R1 #0018
+ 0x8C040103, // 0014 GETMET R1 R0 K3
+ 0x500C0200, // 0015 LDBOOL R3 1 0
+ 0x7C040400, // 0016 CALL R1 2
+ 0x70020005, // 0017 JMP #001E
+ 0xB8060000, // 0018 GETNGBL R1 K0
+ 0x8C040304, // 0019 GETMET R1 R1 K4
+ 0x580C0008, // 001A LDCONST R3 K8
+ 0x84100001, // 001B CLOSURE R4 P1
+ 0x58140006, // 001C LDCONST R5 K6
+ 0x7C040800, // 001D CALL R1 4
+ 0xA0000000, // 001E CLOSE R0
+ 0x80000000, // 001F RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _mdns_announce_hostname
+********************************************************************/
+be_local_closure(Matter_Device__mdns_announce_hostname, /* name */
+ be_nested_proto(
+ 16, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[28]) { /* constants */
+ /* K0 */ be_nested_str_weak(mdns),
+ /* K1 */ be_nested_str_weak(string),
+ /* K2 */ be_nested_str_weak(start),
+ /* K3 */ be_nested_str_weak(tasmota),
+ /* K4 */ be_nested_str_weak(eth),
+ /* K5 */ be_nested_str_weak(hostname_eth),
+ /* K6 */ be_nested_str_weak(replace),
+ /* K7 */ be_nested_str_weak(find),
+ /* K8 */ be_nested_str_weak(mac),
+ /* K9 */ be_nested_str_weak(_X3A),
+ /* K10 */ be_nested_str_weak(),
+ /* K11 */ be_nested_str_weak(ipv4only),
+ /* K12 */ be_nested_str_weak(log),
+ /* K13 */ be_nested_str_weak(format),
+ /* K14 */ be_nested_str_weak(MTR_X3A_X20calling_X20mdns_X2Eadd_hostname_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29),
+ /* K15 */ be_nested_str_weak(ip6local),
+ /* K16 */ be_nested_str_weak(ip),
+ /* K17 */ be_const_int(3),
+ /* K18 */ be_nested_str_weak(add_hostname),
+ /* K19 */ be_nested_str_weak(ip6),
+ /* K20 */ be_nested_str_weak(MTR_X3A_X20calling_X20mdns_X2Eadd_hostname_X28_X25s_X2C_X20_X25s_X29),
+ /* K21 */ be_nested_str_weak(wifi),
+ /* K22 */ be_nested_str_weak(hostname_wifi),
+ /* K23 */ be_nested_str_weak(MTR_X3A_X20start_X20mDNS_X20on_X20_X25s_X20host_X20_X27_X25s_X2Elocal_X27),
+ /* K24 */ be_const_int(2),
+ /* K25 */ be_nested_str_weak(MTR_X3A_X20Exception),
+ /* K26 */ be_nested_str_weak(_X7C),
+ /* K27 */ be_nested_str_weak(mdns_announce_op_discovery_all_fabrics),
+ }),
+ be_str_weak(_mdns_announce_hostname),
+ &be_const_str_solidified,
+ ( &(const binstruction[172]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0xA40E0200, // 0001 IMPORT R3 K1
+ 0x8C100502, // 0002 GETMET R4 R2 K2
+ 0x7C100200, // 0003 CALL R4 1
+ 0xA8020092, // 0004 EXBLK 0 #0098
+ 0x78060040, // 0005 JMPF R1 #0047
+ 0xB8120600, // 0006 GETNGBL R4 K3
+ 0x8C100904, // 0007 GETMET R4 R4 K4
+ 0x7C100200, // 0008 CALL R4 1
+ 0x8C140706, // 0009 GETMET R5 R3 K6
+ 0x8C1C0907, // 000A GETMET R7 R4 K7
+ 0x58240008, // 000B LDCONST R9 K8
+ 0x7C1C0400, // 000C CALL R7 2
+ 0x58200009, // 000D LDCONST R8 K9
+ 0x5824000A, // 000E LDCONST R9 K10
+ 0x7C140800, // 000F CALL R5 4
+ 0x90020A05, // 0010 SETMBR R0 K5 R5
+ 0x8814010B, // 0011 GETMBR R5 R0 K11
+ 0x7416001F, // 0012 JMPT R5 #0033
+ 0xB8160600, // 0013 GETNGBL R5 K3
+ 0x8C140B0C, // 0014 GETMET R5 R5 K12
+ 0x8C1C070D, // 0015 GETMET R7 R3 K13
+ 0x5824000E, // 0016 LDCONST R9 K14
+ 0x88280105, // 0017 GETMBR R10 R0 K5
+ 0x8C2C0907, // 0018 GETMET R11 R4 K7
+ 0x5834000F, // 0019 LDCONST R13 K15
+ 0x5838000A, // 001A LDCONST R14 K10
+ 0x7C2C0600, // 001B CALL R11 3
+ 0x8C300907, // 001C GETMET R12 R4 K7
+ 0x58380010, // 001D LDCONST R14 K16
+ 0x583C000A, // 001E LDCONST R15 K10
+ 0x7C300600, // 001F CALL R12 3
+ 0x7C1C0A00, // 0020 CALL R7 5
+ 0x58200011, // 0021 LDCONST R8 K17
+ 0x7C140600, // 0022 CALL R5 3
+ 0x8C140512, // 0023 GETMET R5 R2 K18
+ 0x881C0105, // 0024 GETMBR R7 R0 K5
+ 0x8C200907, // 0025 GETMET R8 R4 K7
+ 0x5828000F, // 0026 LDCONST R10 K15
+ 0x582C000A, // 0027 LDCONST R11 K10
+ 0x7C200600, // 0028 CALL R8 3
+ 0x8C240907, // 0029 GETMET R9 R4 K7
+ 0x582C0010, // 002A LDCONST R11 K16
+ 0x5830000A, // 002B LDCONST R12 K10
+ 0x7C240600, // 002C CALL R9 3
+ 0x8C280907, // 002D GETMET R10 R4 K7
+ 0x58300013, // 002E LDCONST R12 K19
+ 0x5834000A, // 002F LDCONST R13 K10
+ 0x7C280600, // 0030 CALL R10 3
+ 0x7C140A00, // 0031 CALL R5 5
+ 0x70020012, // 0032 JMP #0046
+ 0xB8160600, // 0033 GETNGBL R5 K3
+ 0x8C140B0C, // 0034 GETMET R5 R5 K12
+ 0x8C1C070D, // 0035 GETMET R7 R3 K13
+ 0x58240014, // 0036 LDCONST R9 K20
+ 0x88280105, // 0037 GETMBR R10 R0 K5
+ 0x8C2C0907, // 0038 GETMET R11 R4 K7
+ 0x58340010, // 0039 LDCONST R13 K16
+ 0x5838000A, // 003A LDCONST R14 K10
+ 0x7C2C0600, // 003B CALL R11 3
+ 0x7C1C0800, // 003C CALL R7 4
+ 0x58200011, // 003D LDCONST R8 K17
+ 0x7C140600, // 003E CALL R5 3
+ 0x8C140512, // 003F GETMET R5 R2 K18
+ 0x881C0105, // 0040 GETMBR R7 R0 K5
+ 0x8C200907, // 0041 GETMET R8 R4 K7
+ 0x58280010, // 0042 LDCONST R10 K16
+ 0x582C000A, // 0043 LDCONST R11 K10
+ 0x7C200600, // 0044 CALL R8 3
+ 0x7C140600, // 0045 CALL R5 3
+ 0x7002003F, // 0046 JMP #0087
+ 0xB8120600, // 0047 GETNGBL R4 K3
+ 0x8C100915, // 0048 GETMET R4 R4 K21
+ 0x7C100200, // 0049 CALL R4 1
+ 0x8C140706, // 004A GETMET R5 R3 K6
+ 0x8C1C0907, // 004B GETMET R7 R4 K7
+ 0x58240008, // 004C LDCONST R9 K8
+ 0x7C1C0400, // 004D CALL R7 2
+ 0x58200009, // 004E LDCONST R8 K9
+ 0x5824000A, // 004F LDCONST R9 K10
+ 0x7C140800, // 0050 CALL R5 4
+ 0x90022C05, // 0051 SETMBR R0 K22 R5
+ 0x8814010B, // 0052 GETMBR R5 R0 K11
+ 0x7416001F, // 0053 JMPT R5 #0074
+ 0xB8160600, // 0054 GETNGBL R5 K3
+ 0x8C140B0C, // 0055 GETMET R5 R5 K12
+ 0x8C1C070D, // 0056 GETMET R7 R3 K13
+ 0x5824000E, // 0057 LDCONST R9 K14
+ 0x88280116, // 0058 GETMBR R10 R0 K22
+ 0x8C2C0907, // 0059 GETMET R11 R4 K7
+ 0x5834000F, // 005A LDCONST R13 K15
+ 0x5838000A, // 005B LDCONST R14 K10
+ 0x7C2C0600, // 005C CALL R11 3
+ 0x8C300907, // 005D GETMET R12 R4 K7
+ 0x58380010, // 005E LDCONST R14 K16
+ 0x583C000A, // 005F LDCONST R15 K10
+ 0x7C300600, // 0060 CALL R12 3
+ 0x7C1C0A00, // 0061 CALL R7 5
+ 0x58200011, // 0062 LDCONST R8 K17
+ 0x7C140600, // 0063 CALL R5 3
+ 0x8C140512, // 0064 GETMET R5 R2 K18
+ 0x881C0116, // 0065 GETMBR R7 R0 K22
+ 0x8C200907, // 0066 GETMET R8 R4 K7
+ 0x5828000F, // 0067 LDCONST R10 K15
+ 0x582C000A, // 0068 LDCONST R11 K10
+ 0x7C200600, // 0069 CALL R8 3
+ 0x8C240907, // 006A GETMET R9 R4 K7
+ 0x582C0010, // 006B LDCONST R11 K16
+ 0x5830000A, // 006C LDCONST R12 K10
+ 0x7C240600, // 006D CALL R9 3
+ 0x8C280907, // 006E GETMET R10 R4 K7
+ 0x58300013, // 006F LDCONST R12 K19
+ 0x5834000A, // 0070 LDCONST R13 K10
+ 0x7C280600, // 0071 CALL R10 3
+ 0x7C140A00, // 0072 CALL R5 5
+ 0x70020012, // 0073 JMP #0087
+ 0xB8160600, // 0074 GETNGBL R5 K3
+ 0x8C140B0C, // 0075 GETMET R5 R5 K12
+ 0x8C1C070D, // 0076 GETMET R7 R3 K13
+ 0x58240014, // 0077 LDCONST R9 K20
+ 0x88280105, // 0078 GETMBR R10 R0 K5
+ 0x8C2C0907, // 0079 GETMET R11 R4 K7
+ 0x58340010, // 007A LDCONST R13 K16
+ 0x5838000A, // 007B LDCONST R14 K10
+ 0x7C2C0600, // 007C CALL R11 3
+ 0x7C1C0800, // 007D CALL R7 4
+ 0x58200011, // 007E LDCONST R8 K17
+ 0x7C140600, // 007F CALL R5 3
+ 0x8C140512, // 0080 GETMET R5 R2 K18
+ 0x881C0116, // 0081 GETMBR R7 R0 K22
+ 0x8C200907, // 0082 GETMET R8 R4 K7
+ 0x58280010, // 0083 LDCONST R10 K16
+ 0x582C000A, // 0084 LDCONST R11 K10
+ 0x7C200600, // 0085 CALL R8 3
+ 0x7C140600, // 0086 CALL R5 3
+ 0xB8120600, // 0087 GETNGBL R4 K3
+ 0x8C10090C, // 0088 GETMET R4 R4 K12
+ 0x8C18070D, // 0089 GETMET R6 R3 K13
+ 0x58200017, // 008A LDCONST R8 K23
+ 0x78060001, // 008B JMPF R1 #008E
+ 0x58240004, // 008C LDCONST R9 K4
+ 0x70020000, // 008D JMP #008F
+ 0x58240015, // 008E LDCONST R9 K21
+ 0x78060001, // 008F JMPF R1 #0092
+ 0x88280105, // 0090 GETMBR R10 R0 K5
+ 0x70020000, // 0091 JMP #0093
+ 0x88280116, // 0092 GETMBR R10 R0 K22
+ 0x7C180800, // 0093 CALL R6 4
+ 0x581C0018, // 0094 LDCONST R7 K24
+ 0x7C100600, // 0095 CALL R4 3
+ 0xA8040001, // 0096 EXBLK 1 1
+ 0x70020010, // 0097 JMP #00A9
+ 0xAC100002, // 0098 CATCH R4 0 2
+ 0x7002000D, // 0099 JMP #00A8
+ 0xB81A0600, // 009A GETNGBL R6 K3
+ 0x8C180D0C, // 009B GETMET R6 R6 K12
+ 0x60200008, // 009C GETGBL R8 G8
+ 0x5C240800, // 009D MOVE R9 R4
+ 0x7C200200, // 009E CALL R8 1
+ 0x00223208, // 009F ADD R8 K25 R8
+ 0x0020111A, // 00A0 ADD R8 R8 K26
+ 0x60240008, // 00A1 GETGBL R9 G8
+ 0x5C280A00, // 00A2 MOVE R10 R5
+ 0x7C240200, // 00A3 CALL R9 1
+ 0x00201009, // 00A4 ADD R8 R8 R9
+ 0x58240018, // 00A5 LDCONST R9 K24
+ 0x7C180600, // 00A6 CALL R6 3
+ 0x70020000, // 00A7 JMP #00A9
+ 0xB0080000, // 00A8 RAISE 2 R0 R0
+ 0x8C10011B, // 00A9 GETMET R4 R0 K27
+ 0x7C100200, // 00AA CALL R4 1
+ 0x80000000, // 00AB RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: load_param
+********************************************************************/
+be_local_closure(Matter_Device_load_param, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[24]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(crypto),
+ /* K2 */ be_nested_str_weak(FILENAME),
+ /* K3 */ be_nested_str_weak(read),
+ /* K4 */ be_nested_str_weak(close),
+ /* K5 */ be_nested_str_weak(json),
+ /* K6 */ be_nested_str_weak(load),
+ /* K7 */ be_nested_str_weak(root_discriminator),
+ /* K8 */ be_nested_str_weak(find),
+ /* K9 */ be_nested_str_weak(distinguish),
+ /* K10 */ be_nested_str_weak(root_passcode),
+ /* K11 */ be_nested_str_weak(passcode),
+ /* K12 */ be_nested_str_weak(ipv4only),
+ /* K13 */ be_nested_str_weak(io_error),
+ /* K14 */ be_nested_str_weak(tasmota),
+ /* K15 */ be_nested_str_weak(log),
+ /* K16 */ be_nested_str_weak(MTR_X3A_X20Session_Store_X3A_X3Aload_X20Exception_X3A),
+ /* K17 */ be_nested_str_weak(_X7C),
+ /* K18 */ be_const_int(2),
+ /* K19 */ be_nested_str_weak(random),
+ /* K20 */ be_nested_str_weak(get),
+ /* K21 */ be_const_int(0),
+ /* K22 */ be_nested_str_weak(PASSCODE_DEFAULT),
+ /* K23 */ be_nested_str_weak(save_param),
+ }),
+ be_str_weak(load_param),
+ &be_const_str_solidified,
+ ( &(const binstruction[79]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0xA40A0200, // 0001 IMPORT R2 K1
+ 0xA802001D, // 0002 EXBLK 0 #0021
+ 0x600C0011, // 0003 GETGBL R3 G17
+ 0x88100102, // 0004 GETMBR R4 R0 K2
+ 0x7C0C0200, // 0005 CALL R3 1
+ 0x8C100703, // 0006 GETMET R4 R3 K3
+ 0x7C100200, // 0007 CALL R4 1
+ 0x8C140704, // 0008 GETMET R5 R3 K4
+ 0x7C140200, // 0009 CALL R5 1
+ 0xA4160A00, // 000A IMPORT R5 K5
+ 0x8C180B06, // 000B GETMET R6 R5 K6
+ 0x5C200800, // 000C MOVE R8 R4
+ 0x7C180400, // 000D CALL R6 2
+ 0x8C1C0D08, // 000E GETMET R7 R6 K8
+ 0x58240009, // 000F LDCONST R9 K9
+ 0x88280107, // 0010 GETMBR R10 R0 K7
+ 0x7C1C0600, // 0011 CALL R7 3
+ 0x90020E07, // 0012 SETMBR R0 K7 R7
+ 0x8C1C0D08, // 0013 GETMET R7 R6 K8
+ 0x5824000B, // 0014 LDCONST R9 K11
+ 0x8828010A, // 0015 GETMBR R10 R0 K10
+ 0x7C1C0600, // 0016 CALL R7 3
+ 0x90021407, // 0017 SETMBR R0 K10 R7
+ 0x601C0017, // 0018 GETGBL R7 G23
+ 0x8C200D08, // 0019 GETMET R8 R6 K8
+ 0x5828000C, // 001A LDCONST R10 K12
+ 0x502C0000, // 001B LDBOOL R11 0 0
+ 0x7C200600, // 001C CALL R8 3
+ 0x7C1C0200, // 001D CALL R7 1
+ 0x90021807, // 001E SETMBR R0 K12 R7
+ 0xA8040001, // 001F EXBLK 1 1
+ 0x70020012, // 0020 JMP #0034
+ 0xAC0C0002, // 0021 CATCH R3 0 2
+ 0x7002000F, // 0022 JMP #0033
+ 0x2014070D, // 0023 NE R5 R3 K13
+ 0x7816000C, // 0024 JMPF R5 #0032
+ 0xB8161C00, // 0025 GETNGBL R5 K14
+ 0x8C140B0F, // 0026 GETMET R5 R5 K15
+ 0x601C0008, // 0027 GETGBL R7 G8
+ 0x5C200600, // 0028 MOVE R8 R3
+ 0x7C1C0200, // 0029 CALL R7 1
+ 0x001E2007, // 002A ADD R7 K16 R7
+ 0x001C0F11, // 002B ADD R7 R7 K17
+ 0x60200008, // 002C GETGBL R8 G8
+ 0x5C240800, // 002D MOVE R9 R4
+ 0x7C200200, // 002E CALL R8 1
+ 0x001C0E08, // 002F ADD R7 R7 R8
+ 0x58200012, // 0030 LDCONST R8 K18
+ 0x7C140600, // 0031 CALL R5 3
+ 0x70020000, // 0032 JMP #0034
+ 0xB0080000, // 0033 RAISE 2 R0 R0
+ 0x500C0000, // 0034 LDBOOL R3 0 0
+ 0x88100107, // 0035 GETMBR R4 R0 K7
+ 0x4C140000, // 0036 LDNIL R5
+ 0x1C100805, // 0037 EQ R4 R4 R5
+ 0x7812000A, // 0038 JMPF R4 #0044
+ 0x8C100513, // 0039 GETMET R4 R2 K19
+ 0x58180012, // 003A LDCONST R6 K18
+ 0x7C100400, // 003B CALL R4 2
+ 0x8C100914, // 003C GETMET R4 R4 K20
+ 0x58180015, // 003D LDCONST R6 K21
+ 0x581C0012, // 003E LDCONST R7 K18
+ 0x7C100600, // 003F CALL R4 3
+ 0x54160FFE, // 0040 LDINT R5 4095
+ 0x2C100805, // 0041 AND R4 R4 R5
+ 0x90020E04, // 0042 SETMBR R0 K7 R4
+ 0x500C0200, // 0043 LDBOOL R3 1 0
+ 0x8810010A, // 0044 GETMBR R4 R0 K10
+ 0x4C140000, // 0045 LDNIL R5
+ 0x1C100805, // 0046 EQ R4 R4 R5
+ 0x78120002, // 0047 JMPF R4 #004B
+ 0x88100116, // 0048 GETMBR R4 R0 K22
+ 0x90021404, // 0049 SETMBR R0 K10 R4
+ 0x500C0200, // 004A LDBOOL R3 1 0
+ 0x780E0001, // 004B JMPF R3 #004E
+ 0x8C100117, // 004C GETMET R4 R0 K23
+ 0x7C100200, // 004D CALL R4 1
+ 0x80000000, // 004E RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _compute_pbkdf
+********************************************************************/
+be_local_closure(Matter_Device__compute_pbkdf, /* name */
+ be_nested_proto(
+ 14, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[11]) { /* constants */
+ /* K0 */ be_nested_str_weak(crypto),
+ /* K1 */ be_nested_str_weak(string),
+ /* K2 */ be_nested_str_weak(add),
+ /* K3 */ be_nested_str_weak(PBKDF2_HMAC_SHA256),
+ /* K4 */ be_nested_str_weak(derive),
+ /* K5 */ be_const_int(0),
+ /* K6 */ be_nested_str_weak(root_w0),
+ /* K7 */ be_nested_str_weak(EC_P256),
+ /* K8 */ be_nested_str_weak(mod),
+ /* K9 */ be_nested_str_weak(root_L),
+ /* K10 */ be_nested_str_weak(public_key),
+ }),
+ be_str_weak(_compute_pbkdf),
+ &be_const_str_solidified,
+ ( &(const binstruction[41]) { /* code */
+ 0xA4120000, // 0000 IMPORT R4 K0
+ 0xA4160200, // 0001 IMPORT R5 K1
+ 0x60180015, // 0002 GETGBL R6 G21
+ 0x7C180000, // 0003 CALL R6 0
+ 0x8C180D02, // 0004 GETMET R6 R6 K2
+ 0x5C200200, // 0005 MOVE R8 R1
+ 0x54260003, // 0006 LDINT R9 4
+ 0x7C180600, // 0007 CALL R6 3
+ 0x8C1C0903, // 0008 GETMET R7 R4 K3
+ 0x7C1C0200, // 0009 CALL R7 1
+ 0x8C1C0F04, // 000A GETMET R7 R7 K4
+ 0x5C240C00, // 000B MOVE R9 R6
+ 0x5C280600, // 000C MOVE R10 R3
+ 0x5C2C0400, // 000D MOVE R11 R2
+ 0x5432004F, // 000E LDINT R12 80
+ 0x7C1C0A00, // 000F CALL R7 5
+ 0x54220026, // 0010 LDINT R8 39
+ 0x40220A08, // 0011 CONNECT R8 K5 R8
+ 0x94200E08, // 0012 GETIDX R8 R7 R8
+ 0x54260027, // 0013 LDINT R9 40
+ 0x542A004E, // 0014 LDINT R10 79
+ 0x4024120A, // 0015 CONNECT R9 R9 R10
+ 0x94240E09, // 0016 GETIDX R9 R7 R9
+ 0x8C280907, // 0017 GETMET R10 R4 K7
+ 0x7C280200, // 0018 CALL R10 1
+ 0x8C281508, // 0019 GETMET R10 R10 K8
+ 0x5C301000, // 001A MOVE R12 R8
+ 0x7C280400, // 001B CALL R10 2
+ 0x90020C0A, // 001C SETMBR R0 K6 R10
+ 0x8C280907, // 001D GETMET R10 R4 K7
+ 0x7C280200, // 001E CALL R10 1
+ 0x8C281508, // 001F GETMET R10 R10 K8
+ 0x5C301200, // 0020 MOVE R12 R9
+ 0x7C280400, // 0021 CALL R10 2
+ 0x8C2C0907, // 0022 GETMET R11 R4 K7
+ 0x7C2C0200, // 0023 CALL R11 1
+ 0x8C2C170A, // 0024 GETMET R11 R11 K10
+ 0x5C341400, // 0025 MOVE R13 R10
+ 0x7C2C0400, // 0026 CALL R11 2
+ 0x9002120B, // 0027 SETMBR R0 K9 R11
+ 0x80000000, // 0028 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: invoke_request
+********************************************************************/
+be_local_closure(Matter_Device_invoke_request, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 8]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(endpoint),
+ /* K2 */ be_nested_str_weak(plugins),
+ /* K3 */ be_nested_str_weak(invoke_request),
+ /* K4 */ be_const_int(1),
+ /* K5 */ be_nested_str_weak(status),
+ /* K6 */ be_nested_str_weak(matter),
+ /* K7 */ be_nested_str_weak(UNSUPPORTED_ENDPOINT),
+ }),
+ be_str_weak(invoke_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[24]) { /* code */
+ 0x58100000, // 0000 LDCONST R4 K0
+ 0x88140701, // 0001 GETMBR R5 R3 K1
+ 0x6018000C, // 0002 GETGBL R6 G12
+ 0x881C0102, // 0003 GETMBR R7 R0 K2
+ 0x7C180200, // 0004 CALL R6 1
+ 0x14180806, // 0005 LT R6 R4 R6
+ 0x781A000C, // 0006 JMPF R6 #0014
+ 0x88180102, // 0007 GETMBR R6 R0 K2
+ 0x94180C04, // 0008 GETIDX R6 R6 R4
+ 0x881C0D01, // 0009 GETMBR R7 R6 K1
+ 0x1C1C0E05, // 000A EQ R7 R7 R5
+ 0x781E0005, // 000B JMPF R7 #0012
+ 0x8C1C0D03, // 000C GETMET R7 R6 K3
+ 0x5C240200, // 000D MOVE R9 R1
+ 0x5C280400, // 000E MOVE R10 R2
+ 0x5C2C0600, // 000F MOVE R11 R3
+ 0x7C1C0800, // 0010 CALL R7 4
+ 0x80040E00, // 0011 RET 1 R7
+ 0x00100904, // 0012 ADD R4 R4 K4
+ 0x7001FFED, // 0013 JMP #0002
+ 0xB81A0C00, // 0014 GETNGBL R6 K6
+ 0x88180D07, // 0015 GETMBR R6 R6 K7
+ 0x900E0A06, // 0016 SETMBR R3 K5 R6
+ 0x80000000, // 0017 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: mdns_remove_PASE
+********************************************************************/
+be_local_closure(Matter_Device_mdns_remove_PASE, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[22]) { /* constants */
+ /* K0 */ be_nested_str_weak(mdns),
+ /* K1 */ be_nested_str_weak(string),
+ /* K2 */ be_nested_str_weak(mdns_pase_eth),
+ /* K3 */ be_nested_str_weak(tasmota),
+ /* K4 */ be_nested_str_weak(log),
+ /* K5 */ be_nested_str_weak(format),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20calling_X20mdns_X2Eremove_service_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X2C_X20_X25s_X29),
+ /* K7 */ be_nested_str_weak(_matterc),
+ /* K8 */ be_nested_str_weak(_udp),
+ /* K9 */ be_nested_str_weak(commissioning_instance_eth),
+ /* K10 */ be_nested_str_weak(hostname_eth),
+ /* K11 */ be_const_int(3),
+ /* K12 */ be_nested_str_weak(MTR_X3A_X20remove_X20mDNS_X20on_X20_X25s_X20_X27_X25s_X27),
+ /* K13 */ be_nested_str_weak(eth),
+ /* K14 */ be_const_int(2),
+ /* K15 */ be_nested_str_weak(remove_service),
+ /* K16 */ be_nested_str_weak(mdns_pase_wifi),
+ /* K17 */ be_nested_str_weak(commissioning_instance_wifi),
+ /* K18 */ be_nested_str_weak(hostname_wifi),
+ /* K19 */ be_nested_str_weak(wifi),
+ /* K20 */ be_nested_str_weak(MTR_X3A_X20Exception),
+ /* K21 */ be_nested_str_weak(_X7C),
+ }),
+ be_str_weak(mdns_remove_PASE),
+ &be_const_str_solidified,
+ ( &(const binstruction[83]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0xA40A0200, // 0001 IMPORT R2 K1
+ 0xA802003D, // 0002 EXBLK 0 #0041
+ 0x880C0102, // 0003 GETMBR R3 R0 K2
+ 0x780E001B, // 0004 JMPF R3 #0021
+ 0xB80E0600, // 0005 GETNGBL R3 K3
+ 0x8C0C0704, // 0006 GETMET R3 R3 K4
+ 0x8C140505, // 0007 GETMET R5 R2 K5
+ 0x581C0006, // 0008 LDCONST R7 K6
+ 0x58200007, // 0009 LDCONST R8 K7
+ 0x58240008, // 000A LDCONST R9 K8
+ 0x88280109, // 000B GETMBR R10 R0 K9
+ 0x882C010A, // 000C GETMBR R11 R0 K10
+ 0x7C140C00, // 000D CALL R5 6
+ 0x5818000B, // 000E LDCONST R6 K11
+ 0x7C0C0600, // 000F CALL R3 3
+ 0xB80E0600, // 0010 GETNGBL R3 K3
+ 0x8C0C0704, // 0011 GETMET R3 R3 K4
+ 0x8C140505, // 0012 GETMET R5 R2 K5
+ 0x581C000C, // 0013 LDCONST R7 K12
+ 0x5820000D, // 0014 LDCONST R8 K13
+ 0x88240109, // 0015 GETMBR R9 R0 K9
+ 0x7C140800, // 0016 CALL R5 4
+ 0x5818000E, // 0017 LDCONST R6 K14
+ 0x7C0C0600, // 0018 CALL R3 3
+ 0x500C0000, // 0019 LDBOOL R3 0 0
+ 0x90020403, // 001A SETMBR R0 K2 R3
+ 0x8C0C030F, // 001B GETMET R3 R1 K15
+ 0x58140007, // 001C LDCONST R5 K7
+ 0x58180008, // 001D LDCONST R6 K8
+ 0x881C0109, // 001E GETMBR R7 R0 K9
+ 0x8820010A, // 001F GETMBR R8 R0 K10
+ 0x7C0C0A00, // 0020 CALL R3 5
+ 0x880C0110, // 0021 GETMBR R3 R0 K16
+ 0x780E001B, // 0022 JMPF R3 #003F
+ 0xB80E0600, // 0023 GETNGBL R3 K3
+ 0x8C0C0704, // 0024 GETMET R3 R3 K4
+ 0x8C140505, // 0025 GETMET R5 R2 K5
+ 0x581C0006, // 0026 LDCONST R7 K6
+ 0x58200007, // 0027 LDCONST R8 K7
+ 0x58240008, // 0028 LDCONST R9 K8
+ 0x88280111, // 0029 GETMBR R10 R0 K17
+ 0x882C0112, // 002A GETMBR R11 R0 K18
+ 0x7C140C00, // 002B CALL R5 6
+ 0x5818000B, // 002C LDCONST R6 K11
+ 0x7C0C0600, // 002D CALL R3 3
+ 0xB80E0600, // 002E GETNGBL R3 K3
+ 0x8C0C0704, // 002F GETMET R3 R3 K4
+ 0x8C140505, // 0030 GETMET R5 R2 K5
+ 0x581C000C, // 0031 LDCONST R7 K12
+ 0x58200013, // 0032 LDCONST R8 K19
+ 0x88240111, // 0033 GETMBR R9 R0 K17
+ 0x7C140800, // 0034 CALL R5 4
+ 0x5818000E, // 0035 LDCONST R6 K14
+ 0x7C0C0600, // 0036 CALL R3 3
+ 0x500C0000, // 0037 LDBOOL R3 0 0
+ 0x90022003, // 0038 SETMBR R0 K16 R3
+ 0x8C0C030F, // 0039 GETMET R3 R1 K15
+ 0x58140007, // 003A LDCONST R5 K7
+ 0x58180008, // 003B LDCONST R6 K8
+ 0x881C0111, // 003C GETMBR R7 R0 K17
+ 0x88200112, // 003D GETMBR R8 R0 K18
+ 0x7C0C0A00, // 003E CALL R3 5
+ 0xA8040001, // 003F EXBLK 1 1
+ 0x70020010, // 0040 JMP #0052
+ 0xAC0C0002, // 0041 CATCH R3 0 2
+ 0x7002000D, // 0042 JMP #0051
+ 0xB8160600, // 0043 GETNGBL R5 K3
+ 0x8C140B04, // 0044 GETMET R5 R5 K4
+ 0x601C0008, // 0045 GETGBL R7 G8
+ 0x5C200600, // 0046 MOVE R8 R3
+ 0x7C1C0200, // 0047 CALL R7 1
+ 0x001E2807, // 0048 ADD R7 K20 R7
+ 0x001C0F15, // 0049 ADD R7 R7 K21
+ 0x60200008, // 004A GETGBL R8 G8
+ 0x5C240800, // 004B MOVE R9 R4
+ 0x7C200200, // 004C CALL R8 1
+ 0x001C0E08, // 004D ADD R7 R7 R8
+ 0x5820000E, // 004E LDCONST R8 K14
+ 0x7C140600, // 004F CALL R5 3
+ 0x70020000, // 0050 JMP #0052
+ 0xB0080000, // 0051 RAISE 2 R0 R0
+ 0x80000000, // 0052 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: mdns_announce_op_discovery_all_fabrics
+********************************************************************/
+be_local_closure(Matter_Device_mdns_announce_op_discovery_all_fabrics, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(sessions),
+ /* K1 */ be_nested_str_weak(active_fabrics),
+ /* K2 */ be_nested_str_weak(get_device_id),
+ /* K3 */ be_nested_str_weak(get_fabric_id),
+ /* K4 */ be_nested_str_weak(mdns_announce_op_discovery),
+ /* K5 */ be_nested_str_weak(stop_iteration),
+ }),
+ be_str_weak(mdns_announce_op_discovery_all_fabrics),
+ &be_const_str_solidified,
+ ( &(const binstruction[22]) { /* code */
+ 0x60040010, // 0000 GETGBL R1 G16
+ 0x88080100, // 0001 GETMBR R2 R0 K0
+ 0x8C080501, // 0002 GETMET R2 R2 K1
+ 0x7C080200, // 0003 CALL R2 1
+ 0x7C040200, // 0004 CALL R1 1
+ 0xA802000B, // 0005 EXBLK 0 #0012
+ 0x5C080200, // 0006 MOVE R2 R1
+ 0x7C080000, // 0007 CALL R2 0
+ 0x8C0C0502, // 0008 GETMET R3 R2 K2
+ 0x7C0C0200, // 0009 CALL R3 1
+ 0x780E0005, // 000A JMPF R3 #0011
+ 0x8C0C0503, // 000B GETMET R3 R2 K3
+ 0x7C0C0200, // 000C CALL R3 1
+ 0x780E0002, // 000D JMPF R3 #0011
+ 0x8C0C0104, // 000E GETMET R3 R0 K4
+ 0x5C140400, // 000F MOVE R5 R2
+ 0x7C0C0400, // 0010 CALL R3 2
+ 0x7001FFF3, // 0011 JMP #0006
+ 0x58040005, // 0012 LDCONST R1 K5
+ 0xAC040200, // 0013 CATCH R1 1 0
+ 0xB0080000, // 0014 RAISE 2 R0 R0
+ 0x80000000, // 0015 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_active_endpoints
+********************************************************************/
+be_local_closure(Matter_Device_get_active_endpoints, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(plugins),
+ /* K1 */ be_nested_str_weak(get_endpoint),
+ /* K2 */ be_const_int(0),
+ /* K3 */ be_nested_str_weak(find),
+ /* K4 */ be_nested_str_weak(push),
+ /* K5 */ be_nested_str_weak(stop_iteration),
+ }),
+ be_str_weak(get_active_endpoints),
+ &be_const_str_solidified,
+ ( &(const binstruction[28]) { /* code */
+ 0x60080012, // 0000 GETGBL R2 G18
+ 0x7C080000, // 0001 CALL R2 0
+ 0x600C0010, // 0002 GETGBL R3 G16
+ 0x88100100, // 0003 GETMBR R4 R0 K0
+ 0x7C0C0200, // 0004 CALL R3 1
+ 0xA8020011, // 0005 EXBLK 0 #0018
+ 0x5C100600, // 0006 MOVE R4 R3
+ 0x7C100000, // 0007 CALL R4 0
+ 0x8C140901, // 0008 GETMET R5 R4 K1
+ 0x7C140200, // 0009 CALL R5 1
+ 0x78060002, // 000A JMPF R1 #000E
+ 0x1C180B02, // 000B EQ R6 R5 K2
+ 0x781A0000, // 000C JMPF R6 #000E
+ 0x7001FFF7, // 000D JMP #0006
+ 0x8C180503, // 000E GETMET R6 R2 K3
+ 0x5C200A00, // 000F MOVE R8 R5
+ 0x7C180400, // 0010 CALL R6 2
+ 0x4C1C0000, // 0011 LDNIL R7
+ 0x1C180C07, // 0012 EQ R6 R6 R7
+ 0x781A0002, // 0013 JMPF R6 #0017
+ 0x8C180504, // 0014 GETMET R6 R2 K4
+ 0x5C200A00, // 0015 MOVE R8 R5
+ 0x7C180400, // 0016 CALL R6 2
+ 0x7001FFED, // 0017 JMP #0006
+ 0x580C0005, // 0018 LDCONST R3 K5
+ 0xAC0C0200, // 0019 CATCH R3 1 0
+ 0xB0080000, // 001A RAISE 2 R0 R0
+ 0x80040400, // 001B RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: autoconf_device
+********************************************************************/
+be_local_closure(Matter_Device_autoconf_device, /* name */
+ be_nested_proto(
+ 15, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[24]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_const_int(1),
+ /* K2 */ be_nested_str_weak(light),
+ /* K3 */ be_nested_str_weak(get),
+ /* K4 */ be_nested_str_weak(find),
+ /* K5 */ be_nested_str_weak(channels),
+ /* K6 */ be_nested_str_weak(),
+ /* K7 */ be_const_int(0),
+ /* K8 */ be_nested_str_weak(plugins),
+ /* K9 */ be_nested_str_weak(push),
+ /* K10 */ be_nested_str_weak(matter),
+ /* K11 */ be_nested_str_weak(Plugin_Light1),
+ /* K12 */ be_nested_str_weak(tasmota),
+ /* K13 */ be_nested_str_weak(log),
+ /* K14 */ be_nested_str_weak(format),
+ /* K15 */ be_nested_str_weak(MTR_X3A_X20Endpoint_X3A_X25i_X20Light_Dimmer),
+ /* K16 */ be_const_int(2),
+ /* K17 */ be_nested_str_weak(Plugin_Light2),
+ /* K18 */ be_nested_str_weak(MTR_X3A_X20Endpoint_X3A_X25i_X20Light_CT),
+ /* K19 */ be_nested_str_weak(Plugin_Light3),
+ /* K20 */ be_nested_str_weak(MTR_X3A_X20Endpoint_X3A_X25i_X20Light_RGB),
+ /* K21 */ be_nested_str_weak(get_power),
+ /* K22 */ be_nested_str_weak(Plugin_OnOff),
+ /* K23 */ be_nested_str_weak(MTR_X3A_X20Endpoint_X3A_X25i_X20Relay__X25i),
+ }),
+ be_str_weak(autoconf_device),
+ &be_const_str_solidified,
+ ( &(const binstruction[105]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0x58080001, // 0001 LDCONST R2 K1
+ 0x500C0000, // 0002 LDBOOL R3 0 0
+ 0xA4120400, // 0003 IMPORT R4 K2
+ 0x8C140903, // 0004 GETMET R5 R4 K3
+ 0x7C140200, // 0005 CALL R5 1
+ 0x4C180000, // 0006 LDNIL R6
+ 0x20180A06, // 0007 NE R6 R5 R6
+ 0x781A003F, // 0008 JMPF R6 #0049
+ 0x6018000C, // 0009 GETGBL R6 G12
+ 0x8C1C0B04, // 000A GETMET R7 R5 K4
+ 0x58240005, // 000B LDCONST R9 K5
+ 0x58280006, // 000C LDCONST R10 K6
+ 0x7C1C0600, // 000D CALL R7 3
+ 0x7C180200, // 000E CALL R6 1
+ 0x241C0D07, // 000F GT R7 R6 K7
+ 0x781E0037, // 0010 JMPF R7 #0049
+ 0x1C1C0D01, // 0011 EQ R7 R6 K1
+ 0x781E0010, // 0012 JMPF R7 #0024
+ 0x881C0108, // 0013 GETMBR R7 R0 K8
+ 0x8C1C0F09, // 0014 GETMET R7 R7 K9
+ 0xB8261400, // 0015 GETNGBL R9 K10
+ 0x8C24130B, // 0016 GETMET R9 R9 K11
+ 0x5C2C0000, // 0017 MOVE R11 R0
+ 0x5C300400, // 0018 MOVE R12 R2
+ 0x7C240600, // 0019 CALL R9 3
+ 0x7C1C0400, // 001A CALL R7 2
+ 0xB81E1800, // 001B GETNGBL R7 K12
+ 0x8C1C0F0D, // 001C GETMET R7 R7 K13
+ 0x8C24030E, // 001D GETMET R9 R1 K14
+ 0x582C000F, // 001E LDCONST R11 K15
+ 0x5C300400, // 001F MOVE R12 R2
+ 0x7C240600, // 0020 CALL R9 3
+ 0x58280010, // 0021 LDCONST R10 K16
+ 0x7C1C0600, // 0022 CALL R7 3
+ 0x70020022, // 0023 JMP #0047
+ 0x1C1C0D10, // 0024 EQ R7 R6 K16
+ 0x781E0010, // 0025 JMPF R7 #0037
+ 0x881C0108, // 0026 GETMBR R7 R0 K8
+ 0x8C1C0F09, // 0027 GETMET R7 R7 K9
+ 0xB8261400, // 0028 GETNGBL R9 K10
+ 0x8C241311, // 0029 GETMET R9 R9 K17
+ 0x5C2C0000, // 002A MOVE R11 R0
+ 0x5C300400, // 002B MOVE R12 R2
+ 0x7C240600, // 002C CALL R9 3
+ 0x7C1C0400, // 002D CALL R7 2
+ 0xB81E1800, // 002E GETNGBL R7 K12
+ 0x8C1C0F0D, // 002F GETMET R7 R7 K13
+ 0x8C24030E, // 0030 GETMET R9 R1 K14
+ 0x582C0012, // 0031 LDCONST R11 K18
+ 0x5C300400, // 0032 MOVE R12 R2
+ 0x7C240600, // 0033 CALL R9 3
+ 0x58280010, // 0034 LDCONST R10 K16
+ 0x7C1C0600, // 0035 CALL R7 3
+ 0x7002000F, // 0036 JMP #0047
+ 0x881C0108, // 0037 GETMBR R7 R0 K8
+ 0x8C1C0F09, // 0038 GETMET R7 R7 K9
+ 0xB8261400, // 0039 GETNGBL R9 K10
+ 0x8C241313, // 003A GETMET R9 R9 K19
+ 0x5C2C0000, // 003B MOVE R11 R0
+ 0x5C300400, // 003C MOVE R12 R2
+ 0x7C240600, // 003D CALL R9 3
+ 0x7C1C0400, // 003E CALL R7 2
+ 0xB81E1800, // 003F GETNGBL R7 K12
+ 0x8C1C0F0D, // 0040 GETMET R7 R7 K13
+ 0x8C24030E, // 0041 GETMET R9 R1 K14
+ 0x582C0014, // 0042 LDCONST R11 K20
+ 0x5C300400, // 0043 MOVE R12 R2
+ 0x7C240600, // 0044 CALL R9 3
+ 0x58280010, // 0045 LDCONST R10 K16
+ 0x7C1C0600, // 0046 CALL R7 3
+ 0x500C0200, // 0047 LDBOOL R3 1 0
+ 0x00080501, // 0048 ADD R2 R2 K1
+ 0x6018000C, // 0049 GETGBL R6 G12
+ 0xB81E1800, // 004A GETNGBL R7 K12
+ 0x8C1C0F15, // 004B GETMET R7 R7 K21
+ 0x7C1C0200, // 004C CALL R7 1
+ 0x7C180200, // 004D CALL R6 1
+ 0x581C0007, // 004E LDCONST R7 K7
+ 0x780E0000, // 004F JMPF R3 #0051
+ 0x04180D01, // 0050 SUB R6 R6 K1
+ 0x14200E06, // 0051 LT R8 R7 R6
+ 0x78220014, // 0052 JMPF R8 #0068
+ 0x88200108, // 0053 GETMBR R8 R0 K8
+ 0x8C201109, // 0054 GETMET R8 R8 K9
+ 0xB82A1400, // 0055 GETNGBL R10 K10
+ 0x8C281516, // 0056 GETMET R10 R10 K22
+ 0x5C300000, // 0057 MOVE R12 R0
+ 0x5C340400, // 0058 MOVE R13 R2
+ 0x5C380E00, // 0059 MOVE R14 R7
+ 0x7C280800, // 005A CALL R10 4
+ 0x7C200400, // 005B CALL R8 2
+ 0xB8221800, // 005C GETNGBL R8 K12
+ 0x8C20110D, // 005D GETMET R8 R8 K13
+ 0x8C28030E, // 005E GETMET R10 R1 K14
+ 0x58300017, // 005F LDCONST R12 K23
+ 0x5C340400, // 0060 MOVE R13 R2
+ 0x00380F01, // 0061 ADD R14 R7 K1
+ 0x7C280800, // 0062 CALL R10 4
+ 0x582C0010, // 0063 LDCONST R11 K16
+ 0x7C200600, // 0064 CALL R8 3
+ 0x001C0F01, // 0065 ADD R7 R7 K1
+ 0x00080501, // 0066 ADD R2 R2 K1
+ 0x7001FFE8, // 0067 JMP #0051
+ 0x80000000, // 0068 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: msg_send
+********************************************************************/
+be_local_closure(Matter_Device_msg_send, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(udp_server),
+ /* K1 */ be_nested_str_weak(send_UDP),
+ }),
+ be_str_weak(msg_send),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x5C100200, // 0002 MOVE R4 R1
+ 0x7C080400, // 0003 CALL R2 2
+ 0x80040400, // 0004 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: every_second
+********************************************************************/
+be_local_closure(Matter_Device_every_second, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 9]) { /* constants */
+ /* K0 */ be_nested_str_weak(sessions),
+ /* K1 */ be_nested_str_weak(every_second),
+ /* K2 */ be_nested_str_weak(message_handler),
+ /* K3 */ be_nested_str_weak(commissioning_open),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(time_reached),
+ /* K6 */ be_const_int(0),
+ /* K7 */ be_nested_str_weak(plugins),
+ /* K8 */ be_const_int(1),
+ }),
+ be_str_weak(every_second),
+ &be_const_str_solidified,
+ ( &(const binstruction[30]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x88040102, // 0003 GETMBR R1 R0 K2
+ 0x8C040301, // 0004 GETMET R1 R1 K1
+ 0x7C040200, // 0005 CALL R1 1
+ 0x88040103, // 0006 GETMBR R1 R0 K3
+ 0x4C080000, // 0007 LDNIL R2
+ 0x20040202, // 0008 NE R1 R1 R2
+ 0x78060006, // 0009 JMPF R1 #0011
+ 0xB8060800, // 000A GETNGBL R1 K4
+ 0x8C040305, // 000B GETMET R1 R1 K5
+ 0x880C0103, // 000C GETMBR R3 R0 K3
+ 0x7C040400, // 000D CALL R1 2
+ 0x78060001, // 000E JMPF R1 #0011
+ 0x4C040000, // 000F LDNIL R1
+ 0x90020601, // 0010 SETMBR R0 K3 R1
+ 0x58040006, // 0011 LDCONST R1 K6
+ 0x6008000C, // 0012 GETGBL R2 G12
+ 0x880C0107, // 0013 GETMBR R3 R0 K7
+ 0x7C080200, // 0014 CALL R2 1
+ 0x14080202, // 0015 LT R2 R1 R2
+ 0x780A0005, // 0016 JMPF R2 #001D
+ 0x88080107, // 0017 GETMBR R2 R0 K7
+ 0x94080401, // 0018 GETIDX R2 R2 R1
+ 0x8C080501, // 0019 GETMET R2 R2 K1
+ 0x7C080200, // 001A CALL R2 1
+ 0x00040308, // 001B ADD R1 R1 K8
+ 0x7001FFF4, // 001C JMP #0012
+ 0x80000000, // 001D RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: mdns_remove_op_discovery_all_fabrics
+********************************************************************/
+be_local_closure(Matter_Device_mdns_remove_op_discovery_all_fabrics, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(sessions),
+ /* K1 */ be_nested_str_weak(active_fabrics),
+ /* K2 */ be_nested_str_weak(get_device_id),
+ /* K3 */ be_nested_str_weak(get_fabric_id),
+ /* K4 */ be_nested_str_weak(mdns_remove_op_discovery),
+ /* K5 */ be_nested_str_weak(stop_iteration),
+ }),
+ be_str_weak(mdns_remove_op_discovery_all_fabrics),
+ &be_const_str_solidified,
+ ( &(const binstruction[22]) { /* code */
+ 0x60040010, // 0000 GETGBL R1 G16
+ 0x88080100, // 0001 GETMBR R2 R0 K0
+ 0x8C080501, // 0002 GETMET R2 R2 K1
+ 0x7C080200, // 0003 CALL R2 1
+ 0x7C040200, // 0004 CALL R1 1
+ 0xA802000B, // 0005 EXBLK 0 #0012
+ 0x5C080200, // 0006 MOVE R2 R1
+ 0x7C080000, // 0007 CALL R2 0
+ 0x8C0C0502, // 0008 GETMET R3 R2 K2
+ 0x7C0C0200, // 0009 CALL R3 1
+ 0x780E0005, // 000A JMPF R3 #0011
+ 0x8C0C0503, // 000B GETMET R3 R2 K3
+ 0x7C0C0200, // 000C CALL R3 1
+ 0x780E0002, // 000D JMPF R3 #0011
+ 0x8C0C0104, // 000E GETMET R3 R0 K4
+ 0x5C140400, // 000F MOVE R5 R2
+ 0x7C0C0400, // 0010 CALL R3 2
+ 0x7001FFF3, // 0011 JMP #0006
+ 0x58040005, // 0012 LDCONST R1 K5
+ 0xAC040200, // 0013 CATCH R1 1 0
+ 0xB0080000, // 0014 RAISE 2 R0 R0
+ 0x80000000, // 0015 RET 0
})
)
);
@@ -1465,7 +3613,7 @@ be_local_closure(Matter_Device_mdns_announce_op_discovery, /* name */
( &(const bvalue[29]) { /* constants */
/* K0 */ be_nested_str_weak(mdns),
/* K1 */ be_nested_str_weak(string),
- /* K2 */ be_nested_str_weak(get_deviceid),
+ /* K2 */ be_nested_str_weak(get_device_id),
/* K3 */ be_nested_str_weak(copy),
/* K4 */ be_nested_str_weak(reverse),
/* K5 */ be_nested_str_weak(get_fabric_compressed),
@@ -1684,735 +3832,90 @@ be_local_closure(Matter_Device_start_commissioning_complete_deferred, /* name
/*******************************************************************/
-/********************************************************************
-** Solidified function: compute_pbkdf
-********************************************************************/
-be_local_closure(Matter_Device_compute_pbkdf, /* name */
- be_nested_proto(
- 11, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[24]) { /* constants */
- /* K0 */ be_nested_str_weak(crypto),
- /* K1 */ be_nested_str_weak(salt),
- /* K2 */ be_nested_str_weak(random),
- /* K3 */ be_nested_str_weak(add),
- /* K4 */ be_nested_str_weak(PBKDF2_HMAC_SHA256),
- /* K5 */ be_nested_str_weak(derive),
- /* K6 */ be_nested_str_weak(iterations),
- /* K7 */ be_const_int(0),
- /* K8 */ be_nested_str_weak(w0),
- /* K9 */ be_nested_str_weak(EC_P256),
- /* K10 */ be_nested_str_weak(mod),
- /* K11 */ be_nested_str_weak(w1),
- /* K12 */ be_nested_str_weak(L),
- /* K13 */ be_nested_str_weak(public_key),
- /* K14 */ be_nested_str_weak(tasmota),
- /* K15 */ be_nested_str_weak(log),
- /* K16 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
- /* K17 */ be_const_int(3),
- /* K18 */ be_nested_str_weak(MTR_X3A_X20salt_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K19 */ be_nested_str_weak(tohex),
- /* K20 */ be_nested_str_weak(MTR_X3A_X20passcode_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K21 */ be_nested_str_weak(MTR_X3A_X20w0_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K22 */ be_nested_str_weak(MTR_X3A_X20w1_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- /* K23 */ be_nested_str_weak(MTR_X3A_X20L_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D_X20),
- }),
- be_str_weak(compute_pbkdf),
- &be_const_str_solidified,
- ( &(const binstruction[94]) { /* code */
- 0xA40A0000, // 0000 IMPORT R2 K0
- 0x8C0C0502, // 0001 GETMET R3 R2 K2
- 0x5416000F, // 0002 LDINT R5 16
- 0x7C0C0400, // 0003 CALL R3 2
- 0x90020203, // 0004 SETMBR R0 K1 R3
- 0x600C0015, // 0005 GETGBL R3 G21
- 0x7C0C0000, // 0006 CALL R3 0
- 0x8C0C0703, // 0007 GETMET R3 R3 K3
- 0x5C140200, // 0008 MOVE R5 R1
- 0x541A0003, // 0009 LDINT R6 4
- 0x7C0C0600, // 000A CALL R3 3
- 0x8C100504, // 000B GETMET R4 R2 K4
- 0x7C100200, // 000C CALL R4 1
- 0x8C100905, // 000D GETMET R4 R4 K5
- 0x5C180600, // 000E MOVE R6 R3
- 0x881C0101, // 000F GETMBR R7 R0 K1
- 0x88200106, // 0010 GETMBR R8 R0 K6
- 0x5426004F, // 0011 LDINT R9 80
- 0x7C100A00, // 0012 CALL R4 5
- 0x54160026, // 0013 LDINT R5 39
- 0x40160E05, // 0014 CONNECT R5 K7 R5
- 0x94140805, // 0015 GETIDX R5 R4 R5
- 0x541A0027, // 0016 LDINT R6 40
- 0x541E004E, // 0017 LDINT R7 79
- 0x40180C07, // 0018 CONNECT R6 R6 R7
- 0x94180806, // 0019 GETIDX R6 R4 R6
- 0x8C1C0509, // 001A GETMET R7 R2 K9
- 0x7C1C0200, // 001B CALL R7 1
- 0x8C1C0F0A, // 001C GETMET R7 R7 K10
- 0x5C240A00, // 001D MOVE R9 R5
- 0x7C1C0400, // 001E CALL R7 2
- 0x90021007, // 001F SETMBR R0 K8 R7
- 0x8C1C0509, // 0020 GETMET R7 R2 K9
- 0x7C1C0200, // 0021 CALL R7 1
- 0x8C1C0F0A, // 0022 GETMET R7 R7 K10
- 0x5C240C00, // 0023 MOVE R9 R6
- 0x7C1C0400, // 0024 CALL R7 2
- 0x90021607, // 0025 SETMBR R0 K11 R7
- 0x8C1C0509, // 0026 GETMET R7 R2 K9
- 0x7C1C0200, // 0027 CALL R7 1
- 0x8C1C0F0D, // 0028 GETMET R7 R7 K13
- 0x8824010B, // 0029 GETMBR R9 R0 K11
- 0x7C1C0400, // 002A CALL R7 2
- 0x90021807, // 002B SETMBR R0 K12 R7
- 0xB81E1C00, // 002C GETNGBL R7 K14
- 0x8C1C0F0F, // 002D GETMET R7 R7 K15
- 0x58240010, // 002E LDCONST R9 K16
- 0x58280011, // 002F LDCONST R10 K17
- 0x7C1C0600, // 0030 CALL R7 3
- 0xB81E1C00, // 0031 GETNGBL R7 K14
- 0x8C1C0F0F, // 0032 GETMET R7 R7 K15
- 0x88240101, // 0033 GETMBR R9 R0 K1
- 0x8C241313, // 0034 GETMET R9 R9 K19
- 0x7C240200, // 0035 CALL R9 1
- 0x00262409, // 0036 ADD R9 K18 R9
- 0x58280011, // 0037 LDCONST R10 K17
- 0x7C1C0600, // 0038 CALL R7 3
- 0xB81E1C00, // 0039 GETNGBL R7 K14
- 0x8C1C0F0F, // 003A GETMET R7 R7 K15
- 0x8C240713, // 003B GETMET R9 R3 K19
- 0x7C240200, // 003C CALL R9 1
- 0x00262809, // 003D ADD R9 K20 R9
- 0x58280011, // 003E LDCONST R10 K17
- 0x7C1C0600, // 003F CALL R7 3
- 0xB81E1C00, // 0040 GETNGBL R7 K14
- 0x8C1C0F0F, // 0041 GETMET R7 R7 K15
- 0x88240108, // 0042 GETMBR R9 R0 K8
- 0x8C241313, // 0043 GETMET R9 R9 K19
- 0x7C240200, // 0044 CALL R9 1
- 0x00262A09, // 0045 ADD R9 K21 R9
- 0x58280011, // 0046 LDCONST R10 K17
- 0x7C1C0600, // 0047 CALL R7 3
- 0xB81E1C00, // 0048 GETNGBL R7 K14
- 0x8C1C0F0F, // 0049 GETMET R7 R7 K15
- 0x8824010B, // 004A GETMBR R9 R0 K11
- 0x8C241313, // 004B GETMET R9 R9 K19
- 0x7C240200, // 004C CALL R9 1
- 0x00262C09, // 004D ADD R9 K22 R9
- 0x58280011, // 004E LDCONST R10 K17
- 0x7C1C0600, // 004F CALL R7 3
- 0xB81E1C00, // 0050 GETNGBL R7 K14
- 0x8C1C0F0F, // 0051 GETMET R7 R7 K15
- 0x8824010C, // 0052 GETMBR R9 R0 K12
- 0x8C241313, // 0053 GETMET R9 R9 K19
- 0x7C240200, // 0054 CALL R9 1
- 0x00262E09, // 0055 ADD R9 K23 R9
- 0x58280011, // 0056 LDCONST R10 K17
- 0x7C1C0600, // 0057 CALL R7 3
- 0xB81E1C00, // 0058 GETNGBL R7 K14
- 0x8C1C0F0F, // 0059 GETMET R7 R7 K15
- 0x58240010, // 005A LDCONST R9 K16
- 0x58280011, // 005B LDCONST R10 K17
- 0x7C1C0600, // 005C CALL R7 3
- 0x80000000, // 005D RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_active_endpoints
-********************************************************************/
-be_local_closure(Matter_Device_get_active_endpoints, /* name */
- be_nested_proto(
- 11, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 6]) { /* constants */
- /* K0 */ be_nested_str_weak(plugins),
- /* K1 */ be_nested_str_weak(get_endpoints),
- /* K2 */ be_const_int(0),
- /* K3 */ be_nested_str_weak(find),
- /* K4 */ be_nested_str_weak(push),
- /* K5 */ be_nested_str_weak(stop_iteration),
- }),
- be_str_weak(get_active_endpoints),
- &be_const_str_solidified,
- ( &(const binstruction[38]) { /* code */
- 0x60080012, // 0000 GETGBL R2 G18
- 0x7C080000, // 0001 CALL R2 0
- 0x600C0010, // 0002 GETGBL R3 G16
- 0x88100100, // 0003 GETMBR R4 R0 K0
- 0x7C0C0200, // 0004 CALL R3 1
- 0xA802001B, // 0005 EXBLK 0 #0022
- 0x5C100600, // 0006 MOVE R4 R3
- 0x7C100000, // 0007 CALL R4 0
- 0x8C140901, // 0008 GETMET R5 R4 K1
- 0x7C140200, // 0009 CALL R5 1
- 0x60180010, // 000A GETGBL R6 G16
- 0x5C1C0A00, // 000B MOVE R7 R5
- 0x7C180200, // 000C CALL R6 1
- 0xA802000F, // 000D EXBLK 0 #001E
- 0x5C1C0C00, // 000E MOVE R7 R6
- 0x7C1C0000, // 000F CALL R7 0
- 0x78060002, // 0010 JMPF R1 #0014
- 0x1C200F02, // 0011 EQ R8 R7 K2
- 0x78220000, // 0012 JMPF R8 #0014
- 0x7001FFF9, // 0013 JMP #000E
- 0x8C200503, // 0014 GETMET R8 R2 K3
- 0x5C280E00, // 0015 MOVE R10 R7
- 0x7C200400, // 0016 CALL R8 2
- 0x4C240000, // 0017 LDNIL R9
- 0x1C201009, // 0018 EQ R8 R8 R9
- 0x78220002, // 0019 JMPF R8 #001D
- 0x8C200504, // 001A GETMET R8 R2 K4
- 0x5C280E00, // 001B MOVE R10 R7
- 0x7C200400, // 001C CALL R8 2
- 0x7001FFEF, // 001D JMP #000E
- 0x58180005, // 001E LDCONST R6 K5
- 0xAC180200, // 001F CATCH R6 1 0
- 0xB0080000, // 0020 RAISE 2 R0 R0
- 0x7001FFE3, // 0021 JMP #0006
- 0x580C0005, // 0022 LDCONST R3 K5
- 0xAC0C0200, // 0023 CATCH R3 1 0
- 0xB0080000, // 0024 RAISE 2 R0 R0
- 0x80040400, // 0025 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: msg_received
-********************************************************************/
-be_local_closure(Matter_Device_msg_received, /* name */
- be_nested_proto(
- 9, /* nstack */
- 4, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(msg_handler),
- /* K1 */ be_nested_str_weak(msg_received),
- }),
- be_str_weak(msg_received),
- &be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0x88100100, // 0000 GETMBR R4 R0 K0
- 0x8C100901, // 0001 GETMET R4 R4 K1
- 0x5C180200, // 0002 MOVE R6 R1
- 0x5C1C0400, // 0003 MOVE R7 R2
- 0x5C200600, // 0004 MOVE R8 R3
- 0x7C100800, // 0005 CALL R4 4
- 0x80040800, // 0006 RET 1 R4
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _start_mdns_announce
-********************************************************************/
-be_local_closure(Matter_Device__start_mdns_announce, /* name */
- be_nested_proto(
- 15, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[48]) { /* constants */
- /* K0 */ be_nested_str_weak(mdns),
- /* K1 */ be_nested_str_weak(string),
- /* K2 */ be_nested_str_weak(start),
- /* K3 */ be_nested_str_weak(VP),
- /* K4 */ be_nested_str_weak(vendorid),
- /* K5 */ be_nested_str_weak(_X2B),
- /* K6 */ be_nested_str_weak(productid),
- /* K7 */ be_nested_str_weak(D),
- /* K8 */ be_nested_str_weak(discriminator),
- /* K9 */ be_nested_str_weak(CM),
- /* K10 */ be_const_int(1),
- /* K11 */ be_nested_str_weak(T),
- /* K12 */ be_const_int(0),
- /* K13 */ be_nested_str_weak(SII),
- /* K14 */ be_nested_str_weak(SAI),
- /* K15 */ be_nested_str_weak(tasmota),
- /* K16 */ be_nested_str_weak(eth),
- /* K17 */ be_nested_str_weak(hostname_eth),
- /* K18 */ be_nested_str_weak(replace),
- /* K19 */ be_nested_str_weak(find),
- /* K20 */ be_nested_str_weak(mac),
- /* K21 */ be_nested_str_weak(_X3A),
- /* K22 */ be_nested_str_weak(),
- /* K23 */ be_nested_str_weak(add_hostname),
- /* K24 */ be_nested_str_weak(ip6local),
- /* K25 */ be_nested_str_weak(ip),
- /* K26 */ be_nested_str_weak(ip6),
- /* K27 */ be_nested_str_weak(add_service),
- /* K28 */ be_nested_str_weak(_matterc),
- /* K29 */ be_nested_str_weak(_udp),
- /* K30 */ be_nested_str_weak(commissioning_instance_eth),
- /* K31 */ be_nested_str_weak(log),
- /* K32 */ be_nested_str_weak(format),
- /* K33 */ be_nested_str_weak(MTR_X3A_X20starting_X20mDNS_X20on_X20_X25s_X20_X27_X25s_X27_X20ptr_X20to_X20_X60_X25s_X2Elocal_X60),
- /* K34 */ be_nested_str_weak(wifi),
- /* K35 */ be_nested_str_weak(commissioning_instance_wifi),
- /* K36 */ be_nested_str_weak(hostname_wifi),
- /* K37 */ be_const_int(2),
- /* K38 */ be_nested_str_weak(_L),
- /* K39 */ be_nested_str_weak(MTR_X3A_X20adding_X20subtype_X3A_X20),
- /* K40 */ be_const_int(3),
- /* K41 */ be_nested_str_weak(add_subtype),
- /* K42 */ be_nested_str_weak(_S),
- /* K43 */ be_nested_str_weak(_V),
- /* K44 */ be_nested_str_weak(_CM1),
- /* K45 */ be_nested_str_weak(MTR_X3A_X20Exception),
- /* K46 */ be_nested_str_weak(_X7C),
- /* K47 */ be_nested_str_weak(mdns_announce_op_discovery_all_sessions),
- }),
- be_str_weak(_start_mdns_announce),
- &be_const_str_solidified,
- ( &(const binstruction[292]) { /* code */
- 0xA40A0000, // 0000 IMPORT R2 K0
- 0xA40E0200, // 0001 IMPORT R3 K1
- 0x8C100502, // 0002 GETMET R4 R2 K2
- 0x7C100200, // 0003 CALL R4 1
- 0x60100013, // 0004 GETGBL R4 G19
- 0x7C100000, // 0005 CALL R4 0
- 0x60140008, // 0006 GETGBL R5 G8
- 0x88180104, // 0007 GETMBR R6 R0 K4
- 0x7C140200, // 0008 CALL R5 1
- 0x00140B05, // 0009 ADD R5 R5 K5
- 0x60180008, // 000A GETGBL R6 G8
- 0x881C0106, // 000B GETMBR R7 R0 K6
- 0x7C180200, // 000C CALL R6 1
- 0x00140A06, // 000D ADD R5 R5 R6
- 0x98120605, // 000E SETIDX R4 K3 R5
- 0x88140108, // 000F GETMBR R5 R0 K8
- 0x98120E05, // 0010 SETIDX R4 K7 R5
- 0x9812130A, // 0011 SETIDX R4 K9 K10
- 0x9812170C, // 0012 SETIDX R4 K11 K12
- 0x54161387, // 0013 LDINT R5 5000
- 0x98121A05, // 0014 SETIDX R4 K13 R5
- 0x5416012B, // 0015 LDINT R5 300
- 0x98121C05, // 0016 SETIDX R4 K14 R5
- 0xA80200F7, // 0017 EXBLK 0 #0110
- 0x7806007A, // 0018 JMPF R1 #0094
- 0xB8161E00, // 0019 GETNGBL R5 K15
- 0x8C140B10, // 001A GETMET R5 R5 K16
- 0x7C140200, // 001B CALL R5 1
- 0x8C180712, // 001C GETMET R6 R3 K18
- 0x8C200B13, // 001D GETMET R8 R5 K19
- 0x58280014, // 001E LDCONST R10 K20
- 0x7C200400, // 001F CALL R8 2
- 0x58240015, // 0020 LDCONST R9 K21
- 0x58280016, // 0021 LDCONST R10 K22
- 0x7C180800, // 0022 CALL R6 4
- 0x90022206, // 0023 SETMBR R0 K17 R6
- 0x8C180517, // 0024 GETMET R6 R2 K23
- 0x88200111, // 0025 GETMBR R8 R0 K17
- 0x8C240B13, // 0026 GETMET R9 R5 K19
- 0x582C0018, // 0027 LDCONST R11 K24
- 0x58300016, // 0028 LDCONST R12 K22
- 0x7C240600, // 0029 CALL R9 3
- 0x8C280B13, // 002A GETMET R10 R5 K19
- 0x58300019, // 002B LDCONST R12 K25
- 0x58340016, // 002C LDCONST R13 K22
- 0x7C280600, // 002D CALL R10 3
- 0x8C2C0B13, // 002E GETMET R11 R5 K19
- 0x5834001A, // 002F LDCONST R13 K26
- 0x58380016, // 0030 LDCONST R14 K22
- 0x7C2C0600, // 0031 CALL R11 3
- 0x7C180A00, // 0032 CALL R6 5
- 0x8C18051B, // 0033 GETMET R6 R2 K27
- 0x5820001C, // 0034 LDCONST R8 K28
- 0x5824001D, // 0035 LDCONST R9 K29
- 0x542A15A3, // 0036 LDINT R10 5540
- 0x5C2C0800, // 0037 MOVE R11 R4
- 0x8830011E, // 0038 GETMBR R12 R0 K30
- 0x88340111, // 0039 GETMBR R13 R0 K17
- 0x7C180E00, // 003A CALL R6 7
- 0xB81A1E00, // 003B GETNGBL R6 K15
- 0x8C180D1F, // 003C GETMET R6 R6 K31
- 0x8C200720, // 003D GETMET R8 R3 K32
- 0x58280021, // 003E LDCONST R10 K33
- 0x78060001, // 003F JMPF R1 #0042
- 0x582C0010, // 0040 LDCONST R11 K16
- 0x70020000, // 0041 JMP #0043
- 0x582C0022, // 0042 LDCONST R11 K34
- 0x78060001, // 0043 JMPF R1 #0046
- 0x8830011E, // 0044 GETMBR R12 R0 K30
- 0x70020000, // 0045 JMP #0047
- 0x88300123, // 0046 GETMBR R12 R0 K35
- 0x78060001, // 0047 JMPF R1 #004A
- 0x88340111, // 0048 GETMBR R13 R0 K17
- 0x70020000, // 0049 JMP #004B
- 0x88340124, // 004A GETMBR R13 R0 K36
- 0x7C200A00, // 004B CALL R8 5
- 0x58240025, // 004C LDCONST R9 K37
- 0x7C180600, // 004D CALL R6 3
- 0x60180008, // 004E GETGBL R6 G8
- 0x881C0108, // 004F GETMBR R7 R0 K8
- 0x54220FFE, // 0050 LDINT R8 4095
- 0x2C1C0E08, // 0051 AND R7 R7 R8
- 0x7C180200, // 0052 CALL R6 1
- 0x001A4C06, // 0053 ADD R6 K38 R6
- 0xB81E1E00, // 0054 GETNGBL R7 K15
- 0x8C1C0F1F, // 0055 GETMET R7 R7 K31
- 0x00264E06, // 0056 ADD R9 K39 R6
- 0x58280028, // 0057 LDCONST R10 K40
- 0x7C1C0600, // 0058 CALL R7 3
- 0x8C1C0529, // 0059 GETMET R7 R2 K41
- 0x5824001C, // 005A LDCONST R9 K28
- 0x5828001D, // 005B LDCONST R10 K29
- 0x882C011E, // 005C GETMBR R11 R0 K30
- 0x88300111, // 005D GETMBR R12 R0 K17
- 0x5C340C00, // 005E MOVE R13 R6
- 0x7C1C0C00, // 005F CALL R7 6
- 0x601C0008, // 0060 GETGBL R7 G8
- 0x88200108, // 0061 GETMBR R8 R0 K8
- 0x54260EFF, // 0062 LDINT R9 3840
- 0x2C201009, // 0063 AND R8 R8 R9
- 0x54260007, // 0064 LDINT R9 8
- 0x3C201009, // 0065 SHR R8 R8 R9
- 0x7C1C0200, // 0066 CALL R7 1
- 0x001E5407, // 0067 ADD R7 K42 R7
- 0x5C180E00, // 0068 MOVE R6 R7
- 0xB81E1E00, // 0069 GETNGBL R7 K15
- 0x8C1C0F1F, // 006A GETMET R7 R7 K31
- 0x00264E06, // 006B ADD R9 K39 R6
- 0x58280028, // 006C LDCONST R10 K40
- 0x7C1C0600, // 006D CALL R7 3
- 0x8C1C0529, // 006E GETMET R7 R2 K41
- 0x5824001C, // 006F LDCONST R9 K28
- 0x5828001D, // 0070 LDCONST R10 K29
- 0x882C011E, // 0071 GETMBR R11 R0 K30
- 0x88300111, // 0072 GETMBR R12 R0 K17
- 0x5C340C00, // 0073 MOVE R13 R6
- 0x7C1C0C00, // 0074 CALL R7 6
- 0x601C0008, // 0075 GETGBL R7 G8
- 0x88200104, // 0076 GETMBR R8 R0 K4
- 0x7C1C0200, // 0077 CALL R7 1
- 0x001E5607, // 0078 ADD R7 K43 R7
- 0x5C180E00, // 0079 MOVE R6 R7
- 0xB81E1E00, // 007A GETNGBL R7 K15
- 0x8C1C0F1F, // 007B GETMET R7 R7 K31
- 0x00264E06, // 007C ADD R9 K39 R6
- 0x58280028, // 007D LDCONST R10 K40
- 0x7C1C0600, // 007E CALL R7 3
- 0x8C1C0529, // 007F GETMET R7 R2 K41
- 0x5824001C, // 0080 LDCONST R9 K28
- 0x5828001D, // 0081 LDCONST R10 K29
- 0x882C011E, // 0082 GETMBR R11 R0 K30
- 0x88300111, // 0083 GETMBR R12 R0 K17
- 0x5C340C00, // 0084 MOVE R13 R6
- 0x7C1C0C00, // 0085 CALL R7 6
- 0x5818002C, // 0086 LDCONST R6 K44
- 0xB81E1E00, // 0087 GETNGBL R7 K15
- 0x8C1C0F1F, // 0088 GETMET R7 R7 K31
- 0x00264E06, // 0089 ADD R9 K39 R6
- 0x58280028, // 008A LDCONST R10 K40
- 0x7C1C0600, // 008B CALL R7 3
- 0x8C1C0529, // 008C GETMET R7 R2 K41
- 0x5824001C, // 008D LDCONST R9 K28
- 0x5828001D, // 008E LDCONST R10 K29
- 0x882C011E, // 008F GETMBR R11 R0 K30
- 0x88300111, // 0090 GETMBR R12 R0 K17
- 0x5C340C00, // 0091 MOVE R13 R6
- 0x7C1C0C00, // 0092 CALL R7 6
- 0x70020079, // 0093 JMP #010E
- 0xB8161E00, // 0094 GETNGBL R5 K15
- 0x8C140B22, // 0095 GETMET R5 R5 K34
- 0x7C140200, // 0096 CALL R5 1
- 0x8C180712, // 0097 GETMET R6 R3 K18
- 0x8C200B13, // 0098 GETMET R8 R5 K19
- 0x58280014, // 0099 LDCONST R10 K20
- 0x7C200400, // 009A CALL R8 2
- 0x58240015, // 009B LDCONST R9 K21
- 0x58280016, // 009C LDCONST R10 K22
- 0x7C180800, // 009D CALL R6 4
- 0x90024806, // 009E SETMBR R0 K36 R6
- 0x8C180517, // 009F GETMET R6 R2 K23
- 0x88200124, // 00A0 GETMBR R8 R0 K36
- 0x8C240B13, // 00A1 GETMET R9 R5 K19
- 0x582C0018, // 00A2 LDCONST R11 K24
- 0x58300016, // 00A3 LDCONST R12 K22
- 0x7C240600, // 00A4 CALL R9 3
- 0x8C280B13, // 00A5 GETMET R10 R5 K19
- 0x58300019, // 00A6 LDCONST R12 K25
- 0x58340016, // 00A7 LDCONST R13 K22
- 0x7C280600, // 00A8 CALL R10 3
- 0x8C2C0B13, // 00A9 GETMET R11 R5 K19
- 0x5834001A, // 00AA LDCONST R13 K26
- 0x58380016, // 00AB LDCONST R14 K22
- 0x7C2C0600, // 00AC CALL R11 3
- 0x7C180A00, // 00AD CALL R6 5
- 0x8C18051B, // 00AE GETMET R6 R2 K27
- 0x5820001C, // 00AF LDCONST R8 K28
- 0x5824001D, // 00B0 LDCONST R9 K29
- 0x542A15A3, // 00B1 LDINT R10 5540
- 0x5C2C0800, // 00B2 MOVE R11 R4
- 0x88300123, // 00B3 GETMBR R12 R0 K35
- 0x88340124, // 00B4 GETMBR R13 R0 K36
- 0x7C180E00, // 00B5 CALL R6 7
- 0xB81A1E00, // 00B6 GETNGBL R6 K15
- 0x8C180D1F, // 00B7 GETMET R6 R6 K31
- 0x8C200720, // 00B8 GETMET R8 R3 K32
- 0x58280021, // 00B9 LDCONST R10 K33
- 0x78060001, // 00BA JMPF R1 #00BD
- 0x582C0010, // 00BB LDCONST R11 K16
- 0x70020000, // 00BC JMP #00BE
- 0x582C0022, // 00BD LDCONST R11 K34
- 0x78060001, // 00BE JMPF R1 #00C1
- 0x8830011E, // 00BF GETMBR R12 R0 K30
- 0x70020000, // 00C0 JMP #00C2
- 0x88300123, // 00C1 GETMBR R12 R0 K35
- 0x78060001, // 00C2 JMPF R1 #00C5
- 0x88340111, // 00C3 GETMBR R13 R0 K17
- 0x70020000, // 00C4 JMP #00C6
- 0x88340124, // 00C5 GETMBR R13 R0 K36
- 0x7C200A00, // 00C6 CALL R8 5
- 0x58240025, // 00C7 LDCONST R9 K37
- 0x7C180600, // 00C8 CALL R6 3
- 0x60180008, // 00C9 GETGBL R6 G8
- 0x881C0108, // 00CA GETMBR R7 R0 K8
- 0x54220FFE, // 00CB LDINT R8 4095
- 0x2C1C0E08, // 00CC AND R7 R7 R8
- 0x7C180200, // 00CD CALL R6 1
- 0x001A4C06, // 00CE ADD R6 K38 R6
- 0xB81E1E00, // 00CF GETNGBL R7 K15
- 0x8C1C0F1F, // 00D0 GETMET R7 R7 K31
- 0x00264E06, // 00D1 ADD R9 K39 R6
- 0x58280028, // 00D2 LDCONST R10 K40
- 0x7C1C0600, // 00D3 CALL R7 3
- 0x8C1C0529, // 00D4 GETMET R7 R2 K41
- 0x5824001C, // 00D5 LDCONST R9 K28
- 0x5828001D, // 00D6 LDCONST R10 K29
- 0x882C0123, // 00D7 GETMBR R11 R0 K35
- 0x88300124, // 00D8 GETMBR R12 R0 K36
- 0x5C340C00, // 00D9 MOVE R13 R6
- 0x7C1C0C00, // 00DA CALL R7 6
- 0x601C0008, // 00DB GETGBL R7 G8
- 0x88200108, // 00DC GETMBR R8 R0 K8
- 0x54260EFF, // 00DD LDINT R9 3840
- 0x2C201009, // 00DE AND R8 R8 R9
- 0x54260007, // 00DF LDINT R9 8
- 0x3C201009, // 00E0 SHR R8 R8 R9
- 0x7C1C0200, // 00E1 CALL R7 1
- 0x001E5407, // 00E2 ADD R7 K42 R7
- 0x5C180E00, // 00E3 MOVE R6 R7
- 0xB81E1E00, // 00E4 GETNGBL R7 K15
- 0x8C1C0F1F, // 00E5 GETMET R7 R7 K31
- 0x00264E06, // 00E6 ADD R9 K39 R6
- 0x58280028, // 00E7 LDCONST R10 K40
- 0x7C1C0600, // 00E8 CALL R7 3
- 0x8C1C0529, // 00E9 GETMET R7 R2 K41
- 0x5824001C, // 00EA LDCONST R9 K28
- 0x5828001D, // 00EB LDCONST R10 K29
- 0x882C0123, // 00EC GETMBR R11 R0 K35
- 0x88300124, // 00ED GETMBR R12 R0 K36
- 0x5C340C00, // 00EE MOVE R13 R6
- 0x7C1C0C00, // 00EF CALL R7 6
- 0x601C0008, // 00F0 GETGBL R7 G8
- 0x88200104, // 00F1 GETMBR R8 R0 K4
- 0x7C1C0200, // 00F2 CALL R7 1
- 0x001E5607, // 00F3 ADD R7 K43 R7
- 0x5C180E00, // 00F4 MOVE R6 R7
- 0xB81E1E00, // 00F5 GETNGBL R7 K15
- 0x8C1C0F1F, // 00F6 GETMET R7 R7 K31
- 0x00264E06, // 00F7 ADD R9 K39 R6
- 0x58280028, // 00F8 LDCONST R10 K40
- 0x7C1C0600, // 00F9 CALL R7 3
- 0x8C1C0529, // 00FA GETMET R7 R2 K41
- 0x5824001C, // 00FB LDCONST R9 K28
- 0x5828001D, // 00FC LDCONST R10 K29
- 0x882C0123, // 00FD GETMBR R11 R0 K35
- 0x88300124, // 00FE GETMBR R12 R0 K36
- 0x5C340C00, // 00FF MOVE R13 R6
- 0x7C1C0C00, // 0100 CALL R7 6
- 0x5818002C, // 0101 LDCONST R6 K44
- 0xB81E1E00, // 0102 GETNGBL R7 K15
- 0x8C1C0F1F, // 0103 GETMET R7 R7 K31
- 0x00264E06, // 0104 ADD R9 K39 R6
- 0x58280028, // 0105 LDCONST R10 K40
- 0x7C1C0600, // 0106 CALL R7 3
- 0x8C1C0529, // 0107 GETMET R7 R2 K41
- 0x5824001C, // 0108 LDCONST R9 K28
- 0x5828001D, // 0109 LDCONST R10 K29
- 0x882C0123, // 010A GETMBR R11 R0 K35
- 0x88300124, // 010B GETMBR R12 R0 K36
- 0x5C340C00, // 010C MOVE R13 R6
- 0x7C1C0C00, // 010D CALL R7 6
- 0xA8040001, // 010E EXBLK 1 1
- 0x70020010, // 010F JMP #0121
- 0xAC140002, // 0110 CATCH R5 0 2
- 0x7002000D, // 0111 JMP #0120
- 0xB81E1E00, // 0112 GETNGBL R7 K15
- 0x8C1C0F1F, // 0113 GETMET R7 R7 K31
- 0x60240008, // 0114 GETGBL R9 G8
- 0x5C280A00, // 0115 MOVE R10 R5
- 0x7C240200, // 0116 CALL R9 1
- 0x00265A09, // 0117 ADD R9 K45 R9
- 0x0024132E, // 0118 ADD R9 R9 K46
- 0x60280008, // 0119 GETGBL R10 G8
- 0x5C2C0C00, // 011A MOVE R11 R6
- 0x7C280200, // 011B CALL R10 1
- 0x0024120A, // 011C ADD R9 R9 R10
- 0x58280025, // 011D LDCONST R10 K37
- 0x7C1C0600, // 011E CALL R7 3
- 0x70020000, // 011F JMP #0121
- 0xB0080000, // 0120 RAISE 2 R0 R0
- 0x8C14012F, // 0121 GETMET R5 R0 K47
- 0x7C140200, // 0122 CALL R5 1
- 0x80000000, // 0123 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: packet_ack
-********************************************************************/
-be_local_closure(Matter_Device_packet_ack, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(udp_server),
- /* K1 */ be_nested_str_weak(packet_ack),
- }),
- be_str_weak(packet_ack),
- &be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x8C080501, // 0001 GETMET R2 R2 K1
- 0x5C100200, // 0002 MOVE R4 R1
- 0x7C080400, // 0003 CALL R2 2
- 0x80040400, // 0004 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: msg_send
-********************************************************************/
-be_local_closure(Matter_Device_msg_send, /* name */
- be_nested_proto(
- 11, /* nstack */
- 5, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(udp_server),
- /* K1 */ be_nested_str_weak(send_response),
- }),
- be_str_weak(msg_send),
- &be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0x88140100, // 0000 GETMBR R5 R0 K0
- 0x8C140B01, // 0001 GETMET R5 R5 K1
- 0x5C1C0200, // 0002 MOVE R7 R1
- 0x5C200400, // 0003 MOVE R8 R2
- 0x5C240600, // 0004 MOVE R9 R3
- 0x5C280800, // 0005 MOVE R10 R4
- 0x7C140A00, // 0006 CALL R5 5
- 0x80040A00, // 0007 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified class: Matter_Device
********************************************************************/
be_local_class(Matter_Device,
- 18,
+ 28,
NULL,
- be_nested_map(49,
+ be_nested_map(76,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(compute_manual_pairing_code, 12), be_const_closure(Matter_Device_compute_manual_pairing_code_closure) },
- { be_const_key_weak(msg_handler, 45), be_const_var(2) },
- { be_const_key_weak(FILENAME, 20), be_nested_str_weak(_matter_device_X2Ejson) },
- { be_const_key_weak(plugins, 40), be_const_var(0) },
- { be_const_key_weak(process_attribute_expansion, -1), be_const_closure(Matter_Device_process_attribute_expansion_closure) },
- { be_const_key_weak(msg_send, -1), be_const_closure(Matter_Device_msg_send_closure) },
- { be_const_key_weak(packet_ack, -1), be_const_closure(Matter_Device_packet_ack_closure) },
- { be_const_key_weak(save_param, 48), be_const_closure(Matter_Device_save_param_closure) },
- { be_const_key_weak(_start_mdns_announce, -1), be_const_closure(Matter_Device__start_mdns_announce_closure) },
- { be_const_key_weak(start_operational_dicovery_deferred, -1), be_const_closure(Matter_Device_start_operational_dicovery_deferred_closure) },
- { be_const_key_weak(ui, 47), be_const_var(4) },
- { be_const_key_weak(w0, -1), be_const_var(15) },
- { be_const_key_weak(invoke_request, -1), be_const_closure(Matter_Device_invoke_request_closure) },
- { be_const_key_weak(passcode, 15), be_const_var(12) },
- { be_const_key_weak(start_mdns_announce_hostnames, -1), be_const_closure(Matter_Device_start_mdns_announce_hostnames_closure) },
- { be_const_key_weak(hostname_eth, 31), be_const_var(8) },
- { be_const_key_weak(L, -1), be_const_var(17) },
- { be_const_key_weak(every_second, 8), be_const_closure(Matter_Device_every_second_closure) },
- { be_const_key_weak(VENDOR_ID, -1), be_const_int(65521) },
- { be_const_key_weak(init, -1), be_const_closure(Matter_Device_init_closure) },
- { be_const_key_weak(get_active_endpoints, -1), be_const_closure(Matter_Device_get_active_endpoints_closure) },
- { be_const_key_weak(iterations, 43), be_const_var(13) },
- { be_const_key_weak(commissioning_instance_eth, -1), be_const_var(6) },
- { be_const_key_weak(start_operational_dicovery, 41), be_const_closure(Matter_Device_start_operational_dicovery_closure) },
- { be_const_key_weak(start_commissioning_complete, 16), be_const_closure(Matter_Device_start_commissioning_complete_closure) },
- { be_const_key_weak(start_basic_commissioning, 42), be_const_closure(Matter_Device_start_basic_commissioning_closure) },
- { be_const_key_weak(productid, -1), be_const_var(10) },
{ be_const_key_weak(PRODUCT_ID, -1), be_const_int(32768) },
- { be_const_key_weak(PBKDF_ITERATIONS, 36), be_const_int(1000) },
- { be_const_key_weak(salt, 5), be_const_var(14) },
- { be_const_key_weak(w1, -1), be_const_var(16) },
- { be_const_key_weak(start_commissioning_complete_deferred, -1), be_const_closure(Matter_Device_start_commissioning_complete_deferred_closure) },
- { be_const_key_weak(mdns_announce_op_discovery, 27), be_const_closure(Matter_Device_mdns_announce_op_discovery_closure) },
- { be_const_key_weak(discriminator, -1), be_const_var(11) },
- { be_const_key_weak(commissioning_instance_wifi, -1), be_const_var(5) },
- { be_const_key_weak(start_udp, 34), be_const_closure(Matter_Device_start_udp_closure) },
+ { be_const_key_weak(start_operational_discovery, 57), be_const_closure(Matter_Device_start_operational_discovery_closure) },
+ { be_const_key_weak(root_L, 14), be_const_var(27) },
+ { be_const_key_weak(commissioning_discriminator, 10), be_const_var(8) },
+ { be_const_key_weak(FILENAME, 41), be_nested_str_weak(_matter_device_X2Ejson) },
+ { be_const_key_weak(_init_basic_commissioning, -1), be_const_closure(Matter_Device__init_basic_commissioning_closure) },
+ { be_const_key_weak(compute_manual_pairing_code, -1), be_const_closure(Matter_Device_compute_manual_pairing_code_closure) },
+ { be_const_key_weak(_trigger_read_sensors, -1), be_const_closure(Matter_Device__trigger_read_sensors_closure) },
+ { be_const_key_weak(hostname_eth, -1), be_const_var(16) },
+ { be_const_key_weak(productid, 44), be_const_var(18) },
+ { be_const_key_weak(start, -1), be_const_closure(Matter_Device_start_closure) },
+ { be_const_key_weak(root_salt, -1), be_const_var(25) },
+ { be_const_key_weak(mdns_announce_op_discovery, 65), be_const_closure(Matter_Device_mdns_announce_op_discovery_closure) },
+ { be_const_key_weak(start_operational_discovery_deferred, -1), be_const_closure(Matter_Device_start_operational_discovery_deferred_closure) },
+ { be_const_key_weak(mdns_remove_op_discovery_all_fabrics, -1), be_const_closure(Matter_Device_mdns_remove_op_discovery_all_fabrics_closure) },
{ be_const_key_weak(UDP_PORT, -1), be_const_int(5540) },
- { be_const_key_weak(compute_pbkdf, -1), be_const_closure(Matter_Device_compute_pbkdf_closure) },
- { be_const_key_weak(hostname_wifi, -1), be_const_var(7) },
- { be_const_key_weak(udp_server, 2), be_const_var(1) },
- { be_const_key_weak(finish_commissioning, -1), be_const_closure(Matter_Device_finish_commissioning_closure) },
- { be_const_key_weak(compute_qrcode_content, -1), be_const_closure(Matter_Device_compute_qrcode_content_closure) },
+ { be_const_key_weak(compute_qrcode_content, 71), be_const_closure(Matter_Device_compute_qrcode_content_closure) },
+ { be_const_key_weak(msg_send, 42), be_const_closure(Matter_Device_msg_send_closure) },
+ { be_const_key_weak(commissioning_instance_eth, -1), be_const_var(14) },
+ { be_const_key_weak(PBKDF_ITERATIONS, 16), be_const_int(1000) },
+ { be_const_key_weak(received_ack, -1), be_const_closure(Matter_Device_received_ack_closure) },
+ { be_const_key_weak(start_root_basic_commissioning, -1), be_const_closure(Matter_Device_start_root_basic_commissioning_closure) },
+ { be_const_key_weak(save_before_restart, -1), be_const_closure(Matter_Device_save_before_restart_closure) },
+ { be_const_key_weak(plugins, 40), be_const_var(1) },
+ { be_const_key_weak(commissioning_admin_fabric, -1), be_const_var(12) },
+ { be_const_key_weak(commissioning_iterations, 17), be_const_var(7) },
+ { be_const_key_weak(root_passcode, 63), be_const_var(22) },
+ { be_const_key_weak(mdns_pase_eth, 36), be_const_var(19) },
+ { be_const_key_weak(autoconf_device, 33), be_const_closure(Matter_Device_autoconf_device_closure) },
+ { be_const_key_weak(mdns_announce_PASE, -1), be_const_closure(Matter_Device_mdns_announce_PASE_closure) },
+ { be_const_key_weak(get_active_endpoints, 29), be_const_closure(Matter_Device_get_active_endpoints_closure) },
+ { be_const_key_weak(attribute_updated, -1), be_const_closure(Matter_Device_attribute_updated_closure) },
+ { be_const_key_weak(every_250ms, -1), be_const_closure(Matter_Device_every_250ms_closure) },
+ { be_const_key_weak(mdns_announce_op_discovery_all_fabrics, -1), be_const_closure(Matter_Device_mdns_announce_op_discovery_all_fabrics_closure) },
+ { be_const_key_weak(save_param, 12), be_const_closure(Matter_Device_save_param_closure) },
+ { be_const_key_weak(process_attribute_expansion, 30), be_const_closure(Matter_Device_process_attribute_expansion_closure) },
+ { be_const_key_weak(commissioning_L, -1), be_const_var(11) },
+ { be_const_key_weak(root_w0, -1), be_const_var(26) },
+ { be_const_key_weak(started, 64), be_const_var(0) },
+ { be_const_key_weak(message_handler, -1), be_const_var(3) },
{ be_const_key_weak(PASSCODE_DEFAULT, -1), be_const_int(20202021) },
- { be_const_key_weak(vendorid, 44), be_const_var(9) },
- { be_const_key_weak(sessions, -1), be_const_var(3) },
- { be_const_key_weak(mdns_announce_op_discovery_all_sessions, -1), be_const_closure(Matter_Device_mdns_announce_op_discovery_all_sessions_closure) },
- { be_const_key_weak(msg_received, 6), be_const_closure(Matter_Device_msg_received_closure) },
+ { be_const_key_weak(stop_basic_commissioning, -1), be_const_closure(Matter_Device_stop_basic_commissioning_closure) },
+ { be_const_key_weak(_compute_pbkdf, -1), be_const_closure(Matter_Device__compute_pbkdf_closure) },
+ { be_const_key_weak(is_root_commissioning_open, -1), be_const_closure(Matter_Device_is_root_commissioning_open_closure) },
+ { be_const_key_weak(VENDOR_ID, -1), be_const_int(65521) },
+ { be_const_key_weak(commissioning_open, -1), be_const_var(6) },
+ { be_const_key_weak(commissioning_instance_wifi, 60), be_const_var(13) },
+ { be_const_key_weak(mdns_remove_op_discovery, 62), be_const_closure(Matter_Device_mdns_remove_op_discovery_closure) },
+ { be_const_key_weak(sessions, -1), be_const_var(4) },
{ be_const_key_weak(stop, -1), be_const_closure(Matter_Device_stop_closure) },
+ { be_const_key_weak(root_discriminator, -1), be_const_var(21) },
+ { be_const_key_weak(init, 55), be_const_closure(Matter_Device_init_closure) },
+ { be_const_key_weak(msg_received, -1), be_const_closure(Matter_Device_msg_received_closure) },
+ { be_const_key_weak(commissioning_salt, -1), be_const_var(9) },
+ { be_const_key_weak(sort_distinct, -1), be_const_static_closure(Matter_Device_sort_distinct_closure) },
+ { be_const_key_weak(ui, 47), be_const_var(5) },
+ { be_const_key_weak(hostname_wifi, -1), be_const_var(15) },
+ { be_const_key_weak(start_mdns_announce_hostnames, 13), be_const_closure(Matter_Device_start_mdns_announce_hostnames_closure) },
+ { be_const_key_weak(_mdns_announce_hostname, -1), be_const_closure(Matter_Device__mdns_announce_hostname_closure) },
{ be_const_key_weak(load_param, -1), be_const_closure(Matter_Device_load_param_closure) },
+ { be_const_key_weak(vendorid, 73), be_const_var(17) },
+ { be_const_key_weak(mdns_pase_wifi, -1), be_const_var(20) },
+ { be_const_key_weak(start_commissioning_complete, -1), be_const_closure(Matter_Device_start_commissioning_complete_closure) },
+ { be_const_key_weak(commissioning_w0, 68), be_const_var(10) },
+ { be_const_key_weak(start_basic_commissioning, -1), be_const_closure(Matter_Device_start_basic_commissioning_closure) },
+ { be_const_key_weak(PASE_TIMEOUT, -1), be_const_int(600) },
+ { be_const_key_weak(udp_server, -1), be_const_var(2) },
+ { be_const_key_weak(invoke_request, 28), be_const_closure(Matter_Device_invoke_request_closure) },
+ { be_const_key_weak(_start_udp, -1), be_const_closure(Matter_Device__start_udp_closure) },
+ { be_const_key_weak(every_second, -1), be_const_closure(Matter_Device_every_second_closure) },
+ { be_const_key_weak(mdns_remove_PASE, 15), be_const_closure(Matter_Device_mdns_remove_PASE_closure) },
+ { be_const_key_weak(remove_fabric, -1), be_const_closure(Matter_Device_remove_fabric_closure) },
+ { be_const_key_weak(ipv4only, -1), be_const_var(23) },
+ { be_const_key_weak(root_iterations, -1), be_const_var(24) },
+ { be_const_key_weak(is_commissioning_open, 11), be_const_closure(Matter_Device_is_commissioning_open_closure) },
+ { be_const_key_weak(start_commissioning_complete_deferred, -1), be_const_closure(Matter_Device_start_commissioning_complete_deferred_closure) },
})),
be_str_weak(Matter_Device)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Expirable.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Expirable.h
new file mode 100644
index 000000000..59867c307
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Expirable.h
@@ -0,0 +1,771 @@
+/* Solidification of Matter_Expirable.h */
+/********************************************************************\
+* Generated code, don't edit *
+\********************************************************************/
+#include "be_constobj.h"
+
+extern const bclass be_class_Matter_Expirable;
+
+/********************************************************************
+** Solidified function: before_remove
+********************************************************************/
+be_local_closure(Matter_Expirable_before_remove, /* name */
+ be_nested_proto(
+ 1, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 0, /* has constants */
+ NULL, /* no const */
+ be_str_weak(before_remove),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 1]) { /* code */
+ 0x80000000, // 0000 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_no_expiration
+********************************************************************/
+be_local_closure(Matter_Expirable_set_no_expiration, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(_expiration),
+ }),
+ be_str_weak(set_no_expiration),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x4C040000, // 0000 LDNIL R1
+ 0x90020001, // 0001 SETMBR R0 K0 R1
+ 0x80000000, // 0002 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_Expirable_init, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(_persist),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x50040000, // 0000 LDBOOL R1 0 0
+ 0x90020001, // 0001 SETMBR R0 K0 R1
+ 0x80000000, // 0002 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_expire_time
+********************************************************************/
+be_local_closure(Matter_Expirable_set_expire_time, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(_expiration),
+ }),
+ be_str_weak(set_expire_time),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x60080009, // 0000 GETGBL R2 G9
+ 0x5C0C0200, // 0001 MOVE R3 R1
+ 0x7C080200, // 0002 CALL R2 1
+ 0x90020002, // 0003 SETMBR R0 K0 R2
+ 0x80000000, // 0004 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: has_expired
+********************************************************************/
+be_local_closure(Matter_Expirable_has_expired, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(tasmota),
+ /* K1 */ be_nested_str_weak(rtc),
+ /* K2 */ be_nested_str_weak(utc),
+ /* K3 */ be_nested_str_weak(_expiration),
+ }),
+ be_str_weak(has_expired),
+ &be_const_str_solidified,
+ ( &(const binstruction[16]) { /* code */
+ 0x4C080000, // 0000 LDNIL R2
+ 0x1C080202, // 0001 EQ R2 R1 R2
+ 0x780A0003, // 0002 JMPF R2 #0007
+ 0xB80A0000, // 0003 GETNGBL R2 K0
+ 0x8C080501, // 0004 GETMET R2 R2 K1
+ 0x7C080200, // 0005 CALL R2 1
+ 0x94040502, // 0006 GETIDX R1 R2 K2
+ 0x88080103, // 0007 GETMBR R2 R0 K3
+ 0x4C0C0000, // 0008 LDNIL R3
+ 0x20080403, // 0009 NE R2 R2 R3
+ 0x780A0002, // 000A JMPF R2 #000E
+ 0x88080103, // 000B GETMBR R2 R0 K3
+ 0x28080202, // 000C GE R2 R1 R2
+ 0x80040400, // 000D RET 1 R2
+ 0x50080000, // 000E LDBOOL R2 0 0
+ 0x80040400, // 000F RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_parent_list
+********************************************************************/
+be_local_closure(Matter_Expirable_set_parent_list, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(_list),
+ }),
+ be_str_weak(set_parent_list),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x80000000, // 0001 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: hydrate_post
+********************************************************************/
+be_local_closure(Matter_Expirable_hydrate_post, /* name */
+ be_nested_proto(
+ 1, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 0, /* has constants */
+ NULL, /* no const */
+ be_str_weak(hydrate_post),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 1]) { /* code */
+ 0x80000000, // 0000 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_expire_in_seconds
+********************************************************************/
+be_local_closure(Matter_Expirable_set_expire_in_seconds, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(tasmota),
+ /* K1 */ be_nested_str_weak(rtc),
+ /* K2 */ be_nested_str_weak(utc),
+ /* K3 */ be_nested_str_weak(set_expire_time),
+ }),
+ be_str_weak(set_expire_in_seconds),
+ &be_const_str_solidified,
+ ( &(const binstruction[15]) { /* code */
+ 0x4C0C0000, // 0000 LDNIL R3
+ 0x1C0C0203, // 0001 EQ R3 R1 R3
+ 0x780E0000, // 0002 JMPF R3 #0004
+ 0x80000600, // 0003 RET 0
+ 0x4C0C0000, // 0004 LDNIL R3
+ 0x1C0C0403, // 0005 EQ R3 R2 R3
+ 0x780E0003, // 0006 JMPF R3 #000B
+ 0xB80E0000, // 0007 GETNGBL R3 K0
+ 0x8C0C0701, // 0008 GETMET R3 R3 K1
+ 0x7C0C0200, // 0009 CALL R3 1
+ 0x94080702, // 000A GETIDX R2 R3 K2
+ 0x8C0C0103, // 000B GETMET R3 R0 K3
+ 0x00140401, // 000C ADD R5 R2 R1
+ 0x7C0C0400, // 000D CALL R3 2
+ 0x80000000, // 000E RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_parent_list
+********************************************************************/
+be_local_closure(Matter_Expirable_get_parent_list, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(_list),
+ }),
+ be_str_weak(get_parent_list),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: does_persist
+********************************************************************/
+be_local_closure(Matter_Expirable_does_persist, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(_persist),
+ }),
+ be_str_weak(does_persist),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_persist
+********************************************************************/
+be_local_closure(Matter_Expirable_set_persist, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(_persist),
+ }),
+ be_str_weak(set_persist),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x60080017, // 0000 GETGBL R2 G23
+ 0x5C0C0200, // 0001 MOVE R3 R1
+ 0x7C080200, // 0002 CALL R2 1
+ 0x90020002, // 0003 SETMBR R0 K0 R2
+ 0x80000000, // 0004 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: persist_pre
+********************************************************************/
+be_local_closure(Matter_Expirable_persist_pre, /* name */
+ be_nested_proto(
+ 1, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 0, /* has constants */
+ NULL, /* no const */
+ be_str_weak(persist_pre),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 1]) { /* code */
+ 0x80000000, // 0000 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: persist_post
+********************************************************************/
+be_local_closure(Matter_Expirable_persist_post, /* name */
+ be_nested_proto(
+ 1, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 0, /* has constants */
+ NULL, /* no const */
+ be_str_weak(persist_post),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 1]) { /* code */
+ 0x80000000, // 0000 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_Expirable
+********************************************************************/
+be_local_class(Matter_Expirable,
+ 3,
+ NULL,
+ be_nested_map(16,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(_expiration, -1), be_const_var(2) },
+ { be_const_key_weak(set_no_expiration, 9), be_const_closure(Matter_Expirable_set_no_expiration_closure) },
+ { be_const_key_weak(persist_post, -1), be_const_closure(Matter_Expirable_persist_post_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_Expirable_init_closure) },
+ { be_const_key_weak(has_expired, -1), be_const_closure(Matter_Expirable_has_expired_closure) },
+ { be_const_key_weak(set_expire_time, 6), be_const_closure(Matter_Expirable_set_expire_time_closure) },
+ { be_const_key_weak(set_parent_list, 4), be_const_closure(Matter_Expirable_set_parent_list_closure) },
+ { be_const_key_weak(hydrate_post, -1), be_const_closure(Matter_Expirable_hydrate_post_closure) },
+ { be_const_key_weak(set_expire_in_seconds, -1), be_const_closure(Matter_Expirable_set_expire_in_seconds_closure) },
+ { be_const_key_weak(get_parent_list, 8), be_const_closure(Matter_Expirable_get_parent_list_closure) },
+ { be_const_key_weak(_list, -1), be_const_var(0) },
+ { be_const_key_weak(does_persist, -1), be_const_closure(Matter_Expirable_does_persist_closure) },
+ { be_const_key_weak(set_persist, -1), be_const_closure(Matter_Expirable_set_persist_closure) },
+ { be_const_key_weak(persist_pre, -1), be_const_closure(Matter_Expirable_persist_pre_closure) },
+ { be_const_key_weak(_persist, 2), be_const_var(1) },
+ { be_const_key_weak(before_remove, 0), be_const_closure(Matter_Expirable_before_remove_closure) },
+ })),
+ be_str_weak(Matter_Expirable)
+);
+/*******************************************************************/
+
+void be_load_Matter_Expirable_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_Expirable);
+ be_setglobal(vm, "Matter_Expirable");
+ be_pop(vm, 1);
+}
+
+extern const bclass be_class_Matter_Expirable_list;
+
+/********************************************************************
+** Solidified function: count_persistables
+********************************************************************/
+be_local_closure(Matter_Expirable_list_count_persistables, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(_persist),
+ /* K2 */ be_const_int(1),
+ }),
+ be_str_weak(count_persistables),
+ &be_const_str_solidified,
+ ( &(const binstruction[14]) { /* code */
+ 0x58040000, // 0000 LDCONST R1 K0
+ 0x58080000, // 0001 LDCONST R2 K0
+ 0x600C000C, // 0002 GETGBL R3 G12
+ 0x5C100000, // 0003 MOVE R4 R0
+ 0x7C0C0200, // 0004 CALL R3 1
+ 0x140C0403, // 0005 LT R3 R2 R3
+ 0x780E0005, // 0006 JMPF R3 #000D
+ 0x940C0002, // 0007 GETIDX R3 R0 R2
+ 0x880C0701, // 0008 GETMBR R3 R3 K1
+ 0x780E0000, // 0009 JMPF R3 #000B
+ 0x00040302, // 000A ADD R1 R1 K2
+ 0x00080502, // 000B ADD R2 R2 K2
+ 0x7001FFF4, // 000C JMP #0002
+ 0x80040200, // 000D RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: remove
+********************************************************************/
+be_local_closure(Matter_Expirable_list_remove, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(before_remove),
+ /* K2 */ be_nested_str_weak(remove),
+ }),
+ be_str_weak(remove),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0x28080300, // 0000 GE R2 R1 K0
+ 0x780A0007, // 0001 JMPF R2 #000A
+ 0x6008000C, // 0002 GETGBL R2 G12
+ 0x5C0C0000, // 0003 MOVE R3 R0
+ 0x7C080200, // 0004 CALL R2 1
+ 0x14080202, // 0005 LT R2 R1 R2
+ 0x780A0002, // 0006 JMPF R2 #000A
+ 0x94080001, // 0007 GETIDX R2 R0 R1
+ 0x8C080501, // 0008 GETMET R2 R2 K1
+ 0x7C080200, // 0009 CALL R2 1
+ 0x60080003, // 000A GETGBL R2 G3
+ 0x5C0C0000, // 000B MOVE R3 R0
+ 0x7C080200, // 000C CALL R2 1
+ 0x8C080502, // 000D GETMET R2 R2 K2
+ 0x5C100200, // 000E MOVE R4 R1
+ 0x7C080400, // 000F CALL R2 2
+ 0x80040400, // 0010 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: push
+********************************************************************/
+be_local_closure(Matter_Expirable_list_push, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(matter),
+ /* K1 */ be_nested_str_weak(Expirable),
+ /* K2 */ be_nested_str_weak(type_error),
+ /* K3 */ be_nested_str_weak(argument_X20must_X20be_X20of_X20class_X20_X27Expirable_X27),
+ /* K4 */ be_nested_str_weak(set_parent_list),
+ /* K5 */ be_nested_str_weak(push),
+ }),
+ be_str_weak(push),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0x6008000F, // 0000 GETGBL R2 G15
+ 0x5C0C0200, // 0001 MOVE R3 R1
+ 0xB8120000, // 0002 GETNGBL R4 K0
+ 0x88100901, // 0003 GETMBR R4 R4 K1
+ 0x7C080400, // 0004 CALL R2 2
+ 0x740A0000, // 0005 JMPT R2 #0007
+ 0xB0060503, // 0006 RAISE 1 K2 K3
+ 0x8C080304, // 0007 GETMET R2 R1 K4
+ 0x5C100000, // 0008 MOVE R4 R0
+ 0x7C080400, // 0009 CALL R2 2
+ 0x60080003, // 000A GETGBL R2 G3
+ 0x5C0C0000, // 000B MOVE R3 R0
+ 0x7C080200, // 000C CALL R2 1
+ 0x8C080505, // 000D GETMET R2 R2 K5
+ 0x5C100200, // 000E MOVE R4 R1
+ 0x7C080400, // 000F CALL R2 2
+ 0x80040400, // 0010 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: every_second
+********************************************************************/
+be_local_closure(Matter_Expirable_list_every_second, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(remove_expired),
+ }),
+ be_str_weak(every_second),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x8C040100, // 0000 GETMET R1 R0 K0
+ 0x7C040200, // 0001 CALL R1 1
+ 0x80000000, // 0002 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: remove_expired
+********************************************************************/
+be_local_closure(Matter_Expirable_list_remove_expired, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(has_expired),
+ /* K2 */ be_nested_str_weak(_persist),
+ /* K3 */ be_nested_str_weak(remove),
+ /* K4 */ be_const_int(1),
+ }),
+ be_str_weak(remove_expired),
+ &be_const_str_solidified,
+ ( &(const binstruction[22]) { /* code */
+ 0x50040000, // 0000 LDBOOL R1 0 0
+ 0x58080000, // 0001 LDCONST R2 K0
+ 0x600C000C, // 0002 GETGBL R3 G12
+ 0x5C100000, // 0003 MOVE R4 R0
+ 0x7C0C0200, // 0004 CALL R3 1
+ 0x140C0403, // 0005 LT R3 R2 R3
+ 0x780E000D, // 0006 JMPF R3 #0015
+ 0x940C0002, // 0007 GETIDX R3 R0 R2
+ 0x8C0C0701, // 0008 GETMET R3 R3 K1
+ 0x7C0C0200, // 0009 CALL R3 1
+ 0x780E0007, // 000A JMPF R3 #0013
+ 0x940C0002, // 000B GETIDX R3 R0 R2
+ 0x880C0702, // 000C GETMBR R3 R3 K2
+ 0x780E0000, // 000D JMPF R3 #000F
+ 0x50040200, // 000E LDBOOL R1 1 0
+ 0x8C0C0103, // 000F GETMET R3 R0 K3
+ 0x5C140400, // 0010 MOVE R5 R2
+ 0x7C0C0400, // 0011 CALL R3 2
+ 0x70020000, // 0012 JMP #0014
+ 0x00080504, // 0013 ADD R2 R2 K4
+ 0x7001FFEC, // 0014 JMP #0002
+ 0x80040200, // 0015 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: persistables
+********************************************************************/
+be_local_closure(Matter_Expirable_list_persistables, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 1]) {
+ be_nested_proto(
+ 2, /* nstack */
+ 0, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 1]) { /* upvals */
+ be_local_const_upval(1, 1),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(_persist),
+ }),
+ be_str_weak(_anonymous_),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x50000200, // 0000 LDBOOL R0 1 0
+ 0x78020005, // 0001 JMPF R0 #0008
+ 0x68000000, // 0002 GETUPV R0 U0
+ 0x7C000000, // 0003 CALL R0 0
+ 0x88040100, // 0004 GETMBR R1 R0 K0
+ 0x78060000, // 0005 JMPF R1 #0007
+ 0x80040000, // 0006 RET 1 R0
+ 0x7001FFF7, // 0007 JMP #0000
+ 0x80000000, // 0008 RET 0
+ })
+ ),
+ }),
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(iter),
+ }),
+ be_str_weak(persistables),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x8C040100, // 0000 GETMET R1 R0 K0
+ 0x7C040200, // 0001 CALL R1 1
+ 0x84080000, // 0002 CLOSURE R2 P0
+ 0xA0000000, // 0003 CLOSE R0
+ 0x80040400, // 0004 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: setitem
+********************************************************************/
+be_local_closure(Matter_Expirable_list_setitem, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(matter),
+ /* K1 */ be_nested_str_weak(Expirable),
+ /* K2 */ be_nested_str_weak(type_error),
+ /* K3 */ be_nested_str_weak(argument_X20must_X20be_X20of_X20class_X20_X27Expirable_X27),
+ /* K4 */ be_nested_str_weak(set_parent_list),
+ /* K5 */ be_nested_str_weak(setitem),
+ }),
+ be_str_weak(setitem),
+ &be_const_str_solidified,
+ ( &(const binstruction[18]) { /* code */
+ 0x600C000F, // 0000 GETGBL R3 G15
+ 0x5C100400, // 0001 MOVE R4 R2
+ 0xB8160000, // 0002 GETNGBL R5 K0
+ 0x88140B01, // 0003 GETMBR R5 R5 K1
+ 0x7C0C0400, // 0004 CALL R3 2
+ 0x740E0000, // 0005 JMPT R3 #0007
+ 0xB0060503, // 0006 RAISE 1 K2 K3
+ 0x8C0C0504, // 0007 GETMET R3 R2 K4
+ 0x5C140000, // 0008 MOVE R5 R0
+ 0x7C0C0400, // 0009 CALL R3 2
+ 0x600C0003, // 000A GETGBL R3 G3
+ 0x5C100000, // 000B MOVE R4 R0
+ 0x7C0C0200, // 000C CALL R3 1
+ 0x8C0C0705, // 000D GETMET R3 R3 K5
+ 0x5C140200, // 000E MOVE R5 R1
+ 0x5C180400, // 000F MOVE R6 R2
+ 0x7C0C0600, // 0010 CALL R3 3
+ 0x80040600, // 0011 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_Expirable_list
+********************************************************************/
+extern const bclass be_class_list;
+be_local_class(Matter_Expirable_list,
+ 0,
+ &be_class_list,
+ be_nested_map(7,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(count_persistables, 4), be_const_closure(Matter_Expirable_list_count_persistables_closure) },
+ { be_const_key_weak(remove, -1), be_const_closure(Matter_Expirable_list_remove_closure) },
+ { be_const_key_weak(push, 5), be_const_closure(Matter_Expirable_list_push_closure) },
+ { be_const_key_weak(every_second, -1), be_const_closure(Matter_Expirable_list_every_second_closure) },
+ { be_const_key_weak(setitem, 6), be_const_closure(Matter_Expirable_list_setitem_closure) },
+ { be_const_key_weak(persistables, -1), be_const_closure(Matter_Expirable_list_persistables_closure) },
+ { be_const_key_weak(remove_expired, -1), be_const_closure(Matter_Expirable_list_remove_expired_closure) },
+ })),
+ be_str_weak(Matter_Expirable_list)
+);
+/*******************************************************************/
+
+void be_load_Matter_Expirable_list_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_Expirable_list);
+ be_setglobal(vm, "Matter_Expirable_list");
+ be_pop(vm, 1);
+}
+/********************************************************************/
+/* End of solidification */
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Fabric.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Fabric.h
new file mode 100644
index 000000000..94d1f1d16
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Fabric.h
@@ -0,0 +1,1321 @@
+/* Solidification of Matter_Fabric.h */
+/********************************************************************\
+* Generated code, don't edit *
+\********************************************************************/
+#include "be_constobj.h"
+
+extern const bclass be_class_Matter_Fabric;
+
+/********************************************************************
+** Solidified function: tojson
+********************************************************************/
+be_local_closure(Matter_Fabric_tojson, /* name */
+ be_nested_proto(
+ 18, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[29]) { /* constants */
+ /* K0 */ be_nested_str_weak(json),
+ /* K1 */ be_nested_str_weak(string),
+ /* K2 */ be_nested_str_weak(introspect),
+ /* K3 */ be_nested_str_weak(persist_pre),
+ /* K4 */ be_nested_str_weak(members),
+ /* K5 */ be_nested_str_weak(get),
+ /* K6 */ be_nested_str_weak(function),
+ /* K7 */ be_const_int(0),
+ /* K8 */ be_nested_str_weak(_),
+ /* K9 */ be_nested_str_weak(push),
+ /* K10 */ be_nested_str_weak(stop_iteration),
+ /* K11 */ be_nested_str_weak(matter),
+ /* K12 */ be_nested_str_weak(sort),
+ /* K13 */ be_nested_str_weak(_X24_X24),
+ /* K14 */ be_nested_str_weak(tob64),
+ /* K15 */ be_nested_str_weak(format),
+ /* K16 */ be_nested_str_weak(_X25s_X3A_X25s),
+ /* K17 */ be_nested_str_weak(dump),
+ /* K18 */ be_nested_str_weak(_sessions),
+ /* K19 */ be_nested_str_weak(persistables),
+ /* K20 */ be_nested_str_weak(tojson),
+ /* K21 */ be_nested_str_weak(_X5B),
+ /* K22 */ be_nested_str_weak(concat),
+ /* K23 */ be_nested_str_weak(_X2C),
+ /* K24 */ be_nested_str_weak(_X5D),
+ /* K25 */ be_nested_str_weak(_X22_sessions_X22_X3A),
+ /* K26 */ be_nested_str_weak(persist_post),
+ /* K27 */ be_nested_str_weak(_X7B),
+ /* K28 */ be_nested_str_weak(_X7D),
+ }),
+ be_str_weak(tojson),
+ &be_const_str_solidified,
+ ( &(const binstruction[120]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0xA40A0200, // 0001 IMPORT R2 K1
+ 0xA40E0400, // 0002 IMPORT R3 K2
+ 0x8C100103, // 0003 GETMET R4 R0 K3
+ 0x7C100200, // 0004 CALL R4 1
+ 0x60100012, // 0005 GETGBL R4 G18
+ 0x7C100000, // 0006 CALL R4 0
+ 0x60140010, // 0007 GETGBL R5 G16
+ 0x8C180704, // 0008 GETMET R6 R3 K4
+ 0x5C200000, // 0009 MOVE R8 R0
+ 0x7C180400, // 000A CALL R6 2
+ 0x7C140200, // 000B CALL R5 1
+ 0xA8020011, // 000C EXBLK 0 #001F
+ 0x5C180A00, // 000D MOVE R6 R5
+ 0x7C180000, // 000E CALL R6 0
+ 0x8C1C0705, // 000F GETMET R7 R3 K5
+ 0x5C240000, // 0010 MOVE R9 R0
+ 0x5C280C00, // 0011 MOVE R10 R6
+ 0x7C1C0600, // 0012 CALL R7 3
+ 0x60200004, // 0013 GETGBL R8 G4
+ 0x5C240E00, // 0014 MOVE R9 R7
+ 0x7C200200, // 0015 CALL R8 1
+ 0x20201106, // 0016 NE R8 R8 K6
+ 0x78220005, // 0017 JMPF R8 #001E
+ 0x94200D07, // 0018 GETIDX R8 R6 K7
+ 0x20201108, // 0019 NE R8 R8 K8
+ 0x78220002, // 001A JMPF R8 #001E
+ 0x8C200909, // 001B GETMET R8 R4 K9
+ 0x5C280C00, // 001C MOVE R10 R6
+ 0x7C200400, // 001D CALL R8 2
+ 0x7001FFED, // 001E JMP #000D
+ 0x5814000A, // 001F LDCONST R5 K10
+ 0xAC140200, // 0020 CATCH R5 1 0
+ 0xB0080000, // 0021 RAISE 2 R0 R0
+ 0xB8161600, // 0022 GETNGBL R5 K11
+ 0x8C140B0C, // 0023 GETMET R5 R5 K12
+ 0x5C1C0800, // 0024 MOVE R7 R4
+ 0x7C140400, // 0025 CALL R5 2
+ 0x5C100A00, // 0026 MOVE R4 R5
+ 0x60140012, // 0027 GETGBL R5 G18
+ 0x7C140000, // 0028 CALL R5 0
+ 0x60180010, // 0029 GETGBL R6 G16
+ 0x5C1C0800, // 002A MOVE R7 R4
+ 0x7C180200, // 002B CALL R6 1
+ 0xA8020020, // 002C EXBLK 0 #004E
+ 0x5C1C0C00, // 002D MOVE R7 R6
+ 0x7C1C0000, // 002E CALL R7 0
+ 0x8C200705, // 002F GETMET R8 R3 K5
+ 0x5C280000, // 0030 MOVE R10 R0
+ 0x5C2C0E00, // 0031 MOVE R11 R7
+ 0x7C200600, // 0032 CALL R8 3
+ 0x4C240000, // 0033 LDNIL R9
+ 0x1C241009, // 0034 EQ R9 R8 R9
+ 0x78260000, // 0035 JMPF R9 #0037
+ 0x7001FFF5, // 0036 JMP #002D
+ 0x6024000F, // 0037 GETGBL R9 G15
+ 0x5C281000, // 0038 MOVE R10 R8
+ 0x602C0015, // 0039 GETGBL R11 G21
+ 0x7C240400, // 003A CALL R9 2
+ 0x78260003, // 003B JMPF R9 #0040
+ 0x8C24110E, // 003C GETMET R9 R8 K14
+ 0x7C240200, // 003D CALL R9 1
+ 0x00261A09, // 003E ADD R9 K13 R9
+ 0x5C201200, // 003F MOVE R8 R9
+ 0x8C240B09, // 0040 GETMET R9 R5 K9
+ 0x8C2C050F, // 0041 GETMET R11 R2 K15
+ 0x58340010, // 0042 LDCONST R13 K16
+ 0x8C380311, // 0043 GETMET R14 R1 K17
+ 0x60400008, // 0044 GETGBL R16 G8
+ 0x5C440E00, // 0045 MOVE R17 R7
+ 0x7C400200, // 0046 CALL R16 1
+ 0x7C380400, // 0047 CALL R14 2
+ 0x8C3C0311, // 0048 GETMET R15 R1 K17
+ 0x5C441000, // 0049 MOVE R17 R8
+ 0x7C3C0400, // 004A CALL R15 2
+ 0x7C2C0800, // 004B CALL R11 4
+ 0x7C240400, // 004C CALL R9 2
+ 0x7001FFDE, // 004D JMP #002D
+ 0x5818000A, // 004E LDCONST R6 K10
+ 0xAC180200, // 004F CATCH R6 1 0
+ 0xB0080000, // 0050 RAISE 2 R0 R0
+ 0x60180012, // 0051 GETGBL R6 G18
+ 0x7C180000, // 0052 CALL R6 0
+ 0x601C0010, // 0053 GETGBL R7 G16
+ 0x88200112, // 0054 GETMBR R8 R0 K18
+ 0x8C201113, // 0055 GETMET R8 R8 K19
+ 0x7C200200, // 0056 CALL R8 1
+ 0x7C1C0200, // 0057 CALL R7 1
+ 0xA8020006, // 0058 EXBLK 0 #0060
+ 0x5C200E00, // 0059 MOVE R8 R7
+ 0x7C200000, // 005A CALL R8 0
+ 0x8C240D09, // 005B GETMET R9 R6 K9
+ 0x8C2C1114, // 005C GETMET R11 R8 K20
+ 0x7C2C0200, // 005D CALL R11 1
+ 0x7C240400, // 005E CALL R9 2
+ 0x7001FFF8, // 005F JMP #0059
+ 0x581C000A, // 0060 LDCONST R7 K10
+ 0xAC1C0200, // 0061 CATCH R7 1 0
+ 0xB0080000, // 0062 RAISE 2 R0 R0
+ 0x601C000C, // 0063 GETGBL R7 G12
+ 0x5C200C00, // 0064 MOVE R8 R6
+ 0x7C1C0200, // 0065 CALL R7 1
+ 0x241C0F07, // 0066 GT R7 R7 K7
+ 0x781E0007, // 0067 JMPF R7 #0070
+ 0x8C1C0D16, // 0068 GETMET R7 R6 K22
+ 0x58240017, // 0069 LDCONST R9 K23
+ 0x7C1C0400, // 006A CALL R7 2
+ 0x001E2A07, // 006B ADD R7 K21 R7
+ 0x001C0F18, // 006C ADD R7 R7 K24
+ 0x8C200B09, // 006D GETMET R8 R5 K9
+ 0x002A3207, // 006E ADD R10 K25 R7
+ 0x7C200400, // 006F CALL R8 2
+ 0x8C1C011A, // 0070 GETMET R7 R0 K26
+ 0x7C1C0200, // 0071 CALL R7 1
+ 0x8C1C0B16, // 0072 GETMET R7 R5 K22
+ 0x58240017, // 0073 LDCONST R9 K23
+ 0x7C1C0400, // 0074 CALL R7 2
+ 0x001E3607, // 0075 ADD R7 K27 R7
+ 0x001C0F1C, // 0076 ADD R7 R7 K28
+ 0x80040E00, // 0077 RET 1 R7
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_fabric_index
+********************************************************************/
+be_local_closure(Matter_Fabric_get_fabric_index, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(fabric_index),
+ }),
+ be_str_weak(get_fabric_index),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_admin_subject
+********************************************************************/
+be_local_closure(Matter_Fabric_get_admin_subject, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(admin_subject),
+ }),
+ be_str_weak(get_admin_subject),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_old_recent_session
+********************************************************************/
+be_local_closure(Matter_Fabric_get_old_recent_session, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(_sessions),
+ /* K1 */ be_const_int(0),
+ /* K2 */ be_nested_str_weak(last_used),
+ /* K3 */ be_const_int(1),
+ }),
+ be_str_weak(get_old_recent_session),
+ &be_const_str_solidified,
+ ( &(const binstruction[30]) { /* code */
+ 0x6008000C, // 0000 GETGBL R2 G12
+ 0x880C0100, // 0001 GETMBR R3 R0 K0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x1C080501, // 0003 EQ R2 R2 K1
+ 0x780A0001, // 0004 JMPF R2 #0007
+ 0x4C080000, // 0005 LDNIL R2
+ 0x80040400, // 0006 RET 1 R2
+ 0x88080100, // 0007 GETMBR R2 R0 K0
+ 0x94080501, // 0008 GETIDX R2 R2 K1
+ 0x880C0502, // 0009 GETMBR R3 R2 K2
+ 0x58100003, // 000A LDCONST R4 K3
+ 0x6014000C, // 000B GETGBL R5 G12
+ 0x88180100, // 000C GETMBR R6 R0 K0
+ 0x7C140200, // 000D CALL R5 1
+ 0x14140805, // 000E LT R5 R4 R5
+ 0x7816000C, // 000F JMPF R5 #001D
+ 0x88140100, // 0010 GETMBR R5 R0 K0
+ 0x94140A04, // 0011 GETIDX R5 R5 R4
+ 0x88140B02, // 0012 GETMBR R5 R5 K2
+ 0x78060001, // 0013 JMPF R1 #0016
+ 0x14180A03, // 0014 LT R6 R5 R3
+ 0x70020000, // 0015 JMP #0017
+ 0x24180A03, // 0016 GT R6 R5 R3
+ 0x781A0002, // 0017 JMPF R6 #001B
+ 0x88180100, // 0018 GETMBR R6 R0 K0
+ 0x94080C04, // 0019 GETIDX R2 R6 R4
+ 0x5C0C0A00, // 001A MOVE R3 R5
+ 0x00100903, // 001B ADD R4 R4 K3
+ 0x7001FFED, // 001C JMP #000B
+ 0x80040400, // 001D RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_device_id
+********************************************************************/
+be_local_closure(Matter_Fabric_get_device_id, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(device_id),
+ }),
+ be_str_weak(get_device_id),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: counter_group_ctrl_snd_next
+********************************************************************/
+be_local_closure(Matter_Fabric_counter_group_ctrl_snd_next, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[15]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(_counter_group_ctrl_snd_impl),
+ /* K2 */ be_nested_str_weak(next),
+ /* K3 */ be_nested_str_weak(tasmota),
+ /* K4 */ be_nested_str_weak(log),
+ /* K5 */ be_nested_str_weak(format),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20_X2E_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20Counter_group_ctrl_snd_X3D_X25i),
+ /* K7 */ be_const_int(3),
+ /* K8 */ be_nested_str_weak(matter),
+ /* K9 */ be_nested_str_weak(Counter),
+ /* K10 */ be_nested_str_weak(is_greater),
+ /* K11 */ be_nested_str_weak(counter_group_ctrl_snd),
+ /* K12 */ be_nested_str_weak(_GROUP_SND_INCR),
+ /* K13 */ be_nested_str_weak(does_persist),
+ /* K14 */ be_nested_str_weak(save),
+ }),
+ be_str_weak(counter_group_ctrl_snd_next),
+ &be_const_str_solidified,
+ ( &(const binstruction[28]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0x88080101, // 0001 GETMBR R2 R0 K1
+ 0x8C080502, // 0002 GETMET R2 R2 K2
+ 0x7C080200, // 0003 CALL R2 1
+ 0xB80E0600, // 0004 GETNGBL R3 K3
+ 0x8C0C0704, // 0005 GETMET R3 R3 K4
+ 0x8C140305, // 0006 GETMET R5 R1 K5
+ 0x581C0006, // 0007 LDCONST R7 K6
+ 0x5C200400, // 0008 MOVE R8 R2
+ 0x7C140600, // 0009 CALL R5 3
+ 0x58180007, // 000A LDCONST R6 K7
+ 0x7C0C0600, // 000B CALL R3 3
+ 0xB80E1000, // 000C GETNGBL R3 K8
+ 0x880C0709, // 000D GETMBR R3 R3 K9
+ 0x8C0C070A, // 000E GETMET R3 R3 K10
+ 0x5C140400, // 000F MOVE R5 R2
+ 0x8818010B, // 0010 GETMBR R6 R0 K11
+ 0x7C0C0600, // 0011 CALL R3 3
+ 0x780E0007, // 0012 JMPF R3 #001B
+ 0x880C010C, // 0013 GETMBR R3 R0 K12
+ 0x000C0403, // 0014 ADD R3 R2 R3
+ 0x90021603, // 0015 SETMBR R0 K11 R3
+ 0x8C0C010D, // 0016 GETMET R3 R0 K13
+ 0x7C0C0200, // 0017 CALL R3 1
+ 0x780E0001, // 0018 JMPF R3 #001B
+ 0x8C0C010E, // 0019 GETMET R3 R0 K14
+ 0x7C0C0200, // 001A CALL R3 1
+ 0x80040400, // 001B RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_fabric_index
+********************************************************************/
+be_local_closure(Matter_Fabric_set_fabric_index, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(fabric_index),
+ }),
+ be_str_weak(set_fabric_index),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x80000000, // 0001 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_fabric_compressed
+********************************************************************/
+be_local_closure(Matter_Fabric_get_fabric_compressed, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(fabric_compressed),
+ }),
+ be_str_weak(get_fabric_compressed),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: add_session
+********************************************************************/
+be_local_closure(Matter_Fabric_add_session, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(_sessions),
+ /* K1 */ be_nested_str_weak(find),
+ /* K2 */ be_nested_str_weak(_MAX_CASE),
+ /* K3 */ be_nested_str_weak(remove),
+ /* K4 */ be_nested_str_weak(get_oldest_session),
+ /* K5 */ be_nested_str_weak(push),
+ }),
+ be_str_weak(add_session),
+ &be_const_str_solidified,
+ ( &(const binstruction[27]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x5C100200, // 0002 MOVE R4 R1
+ 0x7C080400, // 0003 CALL R2 2
+ 0x4C0C0000, // 0004 LDNIL R3
+ 0x1C080403, // 0005 EQ R2 R2 R3
+ 0x780A0012, // 0006 JMPF R2 #001A
+ 0x6008000C, // 0007 GETGBL R2 G12
+ 0x880C0100, // 0008 GETMBR R3 R0 K0
+ 0x7C080200, // 0009 CALL R2 1
+ 0x880C0102, // 000A GETMBR R3 R0 K2
+ 0x28080403, // 000B GE R2 R2 R3
+ 0x780A0008, // 000C JMPF R2 #0016
+ 0x88080100, // 000D GETMBR R2 R0 K0
+ 0x8C080503, // 000E GETMET R2 R2 K3
+ 0x88100100, // 000F GETMBR R4 R0 K0
+ 0x8C100901, // 0010 GETMET R4 R4 K1
+ 0x8C180104, // 0011 GETMET R6 R0 K4
+ 0x7C180200, // 0012 CALL R6 1
+ 0x7C100400, // 0013 CALL R4 2
+ 0x7C080400, // 0014 CALL R2 2
+ 0x7001FFF0, // 0015 JMP #0007
+ 0x88080100, // 0016 GETMBR R2 R0 K0
+ 0x8C080505, // 0017 GETMET R2 R2 K5
+ 0x5C100200, // 0018 MOVE R4 R1
+ 0x7C080400, // 0019 CALL R2 2
+ 0x80000000, // 001A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: log_new_fabric
+********************************************************************/
+be_local_closure(Matter_Fabric_log_new_fabric, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[10]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(format),
+ /* K4 */ be_nested_str_weak(MTR_X3A_X20_X2BFabric_X20_X20_X20_X20fab_X3D_X27_X25s_X27),
+ /* K5 */ be_nested_str_weak(get_fabric_id),
+ /* K6 */ be_nested_str_weak(copy),
+ /* K7 */ be_nested_str_weak(reverse),
+ /* K8 */ be_nested_str_weak(tohex),
+ /* K9 */ be_const_int(2),
+ }),
+ be_str_weak(log_new_fabric),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0xB80A0200, // 0001 GETNGBL R2 K1
+ 0x8C080502, // 0002 GETMET R2 R2 K2
+ 0x8C100303, // 0003 GETMET R4 R1 K3
+ 0x58180004, // 0004 LDCONST R6 K4
+ 0x8C1C0105, // 0005 GETMET R7 R0 K5
+ 0x7C1C0200, // 0006 CALL R7 1
+ 0x8C1C0F06, // 0007 GETMET R7 R7 K6
+ 0x7C1C0200, // 0008 CALL R7 1
+ 0x8C1C0F07, // 0009 GETMET R7 R7 K7
+ 0x7C1C0200, // 000A CALL R7 1
+ 0x8C1C0F08, // 000B GETMET R7 R7 K8
+ 0x7C1C0200, // 000C CALL R7 1
+ 0x7C100600, // 000D CALL R4 3
+ 0x58140009, // 000E LDCONST R5 K9
+ 0x7C080600, // 000F CALL R2 3
+ 0x80000000, // 0010 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: before_remove
+********************************************************************/
+be_local_closure(Matter_Fabric_before_remove, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[10]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(format),
+ /* K4 */ be_nested_str_weak(MTR_X3A_X20_X2DFabric_X20_X20_X20_X20fab_X3D_X27_X25s_X27_X20_X28removed_X29),
+ /* K5 */ be_nested_str_weak(get_fabric_id),
+ /* K6 */ be_nested_str_weak(copy),
+ /* K7 */ be_nested_str_weak(reverse),
+ /* K8 */ be_nested_str_weak(tohex),
+ /* K9 */ be_const_int(2),
+ }),
+ be_str_weak(before_remove),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0xB80A0200, // 0001 GETNGBL R2 K1
+ 0x8C080502, // 0002 GETMET R2 R2 K2
+ 0x8C100303, // 0003 GETMET R4 R1 K3
+ 0x58180004, // 0004 LDCONST R6 K4
+ 0x8C1C0105, // 0005 GETMET R7 R0 K5
+ 0x7C1C0200, // 0006 CALL R7 1
+ 0x8C1C0F06, // 0007 GETMET R7 R7 K6
+ 0x7C1C0200, // 0008 CALL R7 1
+ 0x8C1C0F07, // 0009 GETMET R7 R7 K7
+ 0x7C1C0200, // 000A CALL R7 1
+ 0x8C1C0F08, // 000B GETMET R7 R7 K8
+ 0x7C1C0200, // 000C CALL R7 1
+ 0x7C100600, // 000D CALL R4 3
+ 0x58140009, // 000E LDCONST R5 K9
+ 0x7C080600, // 000F CALL R2 3
+ 0x80000000, // 0010 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: fromjson
+********************************************************************/
+be_local_closure(Matter_Fabric_fromjson, /* name */
+ be_nested_proto(
+ 16, /* nstack */
+ 2, /* argc */
+ 4, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[18]) { /* constants */
+ /* K0 */ be_const_class(be_class_Matter_Fabric),
+ /* K1 */ be_nested_str_weak(string),
+ /* K2 */ be_nested_str_weak(introspect),
+ /* K3 */ be_nested_str_weak(matter),
+ /* K4 */ be_nested_str_weak(Fabric),
+ /* K5 */ be_nested_str_weak(keys),
+ /* K6 */ be_const_int(0),
+ /* K7 */ be_nested_str_weak(_),
+ /* K8 */ be_nested_str_weak(find),
+ /* K9 */ be_nested_str_weak(0x),
+ /* K10 */ be_nested_str_weak(set),
+ /* K11 */ be_nested_str_weak(fromhex),
+ /* K12 */ be_const_int(2),
+ /* K13 */ be_const_int(2147483647),
+ /* K14 */ be_nested_str_weak(_X24_X24),
+ /* K15 */ be_nested_str_weak(fromb64),
+ /* K16 */ be_nested_str_weak(stop_iteration),
+ /* K17 */ be_nested_str_weak(hydrate_post),
+ }),
+ be_str_weak(fromjson),
+ &be_const_str_solidified,
+ ( &(const binstruction[76]) { /* code */
+ 0x58080000, // 0000 LDCONST R2 K0
+ 0xA40E0200, // 0001 IMPORT R3 K1
+ 0xA4120400, // 0002 IMPORT R4 K2
+ 0xB8160600, // 0003 GETNGBL R5 K3
+ 0x8C140B04, // 0004 GETMET R5 R5 K4
+ 0x5C1C0000, // 0005 MOVE R7 R0
+ 0x7C140400, // 0006 CALL R5 2
+ 0x60180010, // 0007 GETGBL R6 G16
+ 0x8C1C0305, // 0008 GETMET R7 R1 K5
+ 0x7C1C0200, // 0009 CALL R7 1
+ 0x7C180200, // 000A CALL R6 1
+ 0xA8020039, // 000B EXBLK 0 #0046
+ 0x5C1C0C00, // 000C MOVE R7 R6
+ 0x7C1C0000, // 000D CALL R7 0
+ 0x94200F06, // 000E GETIDX R8 R7 K6
+ 0x1C201107, // 000F EQ R8 R8 K7
+ 0x78220000, // 0010 JMPF R8 #0012
+ 0x7001FFF9, // 0011 JMP #000C
+ 0x94200207, // 0012 GETIDX R8 R1 R7
+ 0x60240004, // 0013 GETGBL R9 G4
+ 0x5C281000, // 0014 MOVE R10 R8
+ 0x7C240200, // 0015 CALL R9 1
+ 0x1C241301, // 0016 EQ R9 R9 K1
+ 0x78260027, // 0017 JMPF R9 #0040
+ 0x8C240708, // 0018 GETMET R9 R3 K8
+ 0x5C2C1000, // 0019 MOVE R11 R8
+ 0x58300009, // 001A LDCONST R12 K9
+ 0x7C240600, // 001B CALL R9 3
+ 0x1C241306, // 001C EQ R9 R9 K6
+ 0x7826000A, // 001D JMPF R9 #0029
+ 0x8C24090A, // 001E GETMET R9 R4 K10
+ 0x5C2C0A00, // 001F MOVE R11 R5
+ 0x5C300E00, // 0020 MOVE R12 R7
+ 0x60340015, // 0021 GETGBL R13 G21
+ 0x7C340000, // 0022 CALL R13 0
+ 0x8C341B0B, // 0023 GETMET R13 R13 K11
+ 0x403E190D, // 0024 CONNECT R15 K12 K13
+ 0x943C100F, // 0025 GETIDX R15 R8 R15
+ 0x7C340400, // 0026 CALL R13 2
+ 0x7C240800, // 0027 CALL R9 4
+ 0x70020015, // 0028 JMP #003F
+ 0x8C240708, // 0029 GETMET R9 R3 K8
+ 0x5C2C1000, // 002A MOVE R11 R8
+ 0x5830000E, // 002B LDCONST R12 K14
+ 0x7C240600, // 002C CALL R9 3
+ 0x1C241306, // 002D EQ R9 R9 K6
+ 0x7826000A, // 002E JMPF R9 #003A
+ 0x8C24090A, // 002F GETMET R9 R4 K10
+ 0x5C2C0A00, // 0030 MOVE R11 R5
+ 0x5C300E00, // 0031 MOVE R12 R7
+ 0x60340015, // 0032 GETGBL R13 G21
+ 0x7C340000, // 0033 CALL R13 0
+ 0x8C341B0F, // 0034 GETMET R13 R13 K15
+ 0x403E190D, // 0035 CONNECT R15 K12 K13
+ 0x943C100F, // 0036 GETIDX R15 R8 R15
+ 0x7C340400, // 0037 CALL R13 2
+ 0x7C240800, // 0038 CALL R9 4
+ 0x70020004, // 0039 JMP #003F
+ 0x8C24090A, // 003A GETMET R9 R4 K10
+ 0x5C2C0A00, // 003B MOVE R11 R5
+ 0x5C300E00, // 003C MOVE R12 R7
+ 0x5C341000, // 003D MOVE R13 R8
+ 0x7C240800, // 003E CALL R9 4
+ 0x70020004, // 003F JMP #0045
+ 0x8C24090A, // 0040 GETMET R9 R4 K10
+ 0x5C2C0A00, // 0041 MOVE R11 R5
+ 0x5C300E00, // 0042 MOVE R12 R7
+ 0x5C341000, // 0043 MOVE R13 R8
+ 0x7C240800, // 0044 CALL R9 4
+ 0x7001FFC5, // 0045 JMP #000C
+ 0x58180010, // 0046 LDCONST R6 K16
+ 0xAC180200, // 0047 CATCH R6 1 0
+ 0xB0080000, // 0048 RAISE 2 R0 R0
+ 0x8C180B11, // 0049 GETMET R6 R5 K17
+ 0x7C180200, // 004A CALL R6 1
+ 0x80040A00, // 004B RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_Fabric_init, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[18]) { /* constants */
+ /* K0 */ be_nested_str_weak(crypto),
+ /* K1 */ be_nested_str_weak(_store),
+ /* K2 */ be_nested_str_weak(_sessions),
+ /* K3 */ be_nested_str_weak(matter),
+ /* K4 */ be_nested_str_weak(Expirable_list),
+ /* K5 */ be_nested_str_weak(fabric_label),
+ /* K6 */ be_nested_str_weak(),
+ /* K7 */ be_nested_str_weak(created),
+ /* K8 */ be_nested_str_weak(tasmota),
+ /* K9 */ be_nested_str_weak(rtc),
+ /* K10 */ be_nested_str_weak(utc),
+ /* K11 */ be_nested_str_weak(_counter_group_data_snd_impl),
+ /* K12 */ be_nested_str_weak(Counter),
+ /* K13 */ be_nested_str_weak(_counter_group_ctrl_snd_impl),
+ /* K14 */ be_nested_str_weak(counter_group_data_snd),
+ /* K15 */ be_nested_str_weak(next),
+ /* K16 */ be_nested_str_weak(_GROUP_SND_INCR),
+ /* K17 */ be_nested_str_weak(counter_group_ctrl_snd),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[33]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0x90020201, // 0001 SETMBR R0 K1 R1
+ 0xB80E0600, // 0002 GETNGBL R3 K3
+ 0x8C0C0704, // 0003 GETMET R3 R3 K4
+ 0x7C0C0200, // 0004 CALL R3 1
+ 0x90020403, // 0005 SETMBR R0 K2 R3
+ 0x90020B06, // 0006 SETMBR R0 K5 K6
+ 0xB80E1000, // 0007 GETNGBL R3 K8
+ 0x8C0C0709, // 0008 GETMET R3 R3 K9
+ 0x7C0C0200, // 0009 CALL R3 1
+ 0x940C070A, // 000A GETIDX R3 R3 K10
+ 0x90020E03, // 000B SETMBR R0 K7 R3
+ 0xB80E0600, // 000C GETNGBL R3 K3
+ 0x8C0C070C, // 000D GETMET R3 R3 K12
+ 0x7C0C0200, // 000E CALL R3 1
+ 0x90021603, // 000F SETMBR R0 K11 R3
+ 0xB80E0600, // 0010 GETNGBL R3 K3
+ 0x8C0C070C, // 0011 GETMET R3 R3 K12
+ 0x7C0C0200, // 0012 CALL R3 1
+ 0x90021A03, // 0013 SETMBR R0 K13 R3
+ 0x880C010B, // 0014 GETMBR R3 R0 K11
+ 0x8C0C070F, // 0015 GETMET R3 R3 K15
+ 0x7C0C0200, // 0016 CALL R3 1
+ 0x88100110, // 0017 GETMBR R4 R0 K16
+ 0x000C0604, // 0018 ADD R3 R3 R4
+ 0x90021C03, // 0019 SETMBR R0 K14 R3
+ 0x880C010B, // 001A GETMBR R3 R0 K11
+ 0x8C0C070F, // 001B GETMET R3 R3 K15
+ 0x7C0C0200, // 001C CALL R3 1
+ 0x88100110, // 001D GETMBR R4 R0 K16
+ 0x000C0604, // 001E ADD R3 R3 R4
+ 0x90022203, // 001F SETMBR R0 K17 R3
+ 0x80000000, // 0020 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_ipk_group_key
+********************************************************************/
+be_local_closure(Matter_Fabric_get_ipk_group_key, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_nested_str_weak(ipk_epoch_key),
+ /* K1 */ be_nested_str_weak(fabric_compressed),
+ /* K2 */ be_nested_str_weak(crypto),
+ /* K3 */ be_nested_str_weak(HKDF_SHA256),
+ /* K4 */ be_nested_str_weak(fromstring),
+ /* K5 */ be_nested_str_weak(_GROUP_KEY),
+ /* K6 */ be_nested_str_weak(derive),
+ }),
+ be_str_weak(get_ipk_group_key),
+ &be_const_str_solidified,
+ ( &(const binstruction[25]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x4C080000, // 0001 LDNIL R2
+ 0x1C040202, // 0002 EQ R1 R1 R2
+ 0x74060003, // 0003 JMPT R1 #0008
+ 0x88040101, // 0004 GETMBR R1 R0 K1
+ 0x4C080000, // 0005 LDNIL R2
+ 0x1C040202, // 0006 EQ R1 R1 R2
+ 0x78060001, // 0007 JMPF R1 #000A
+ 0x4C040000, // 0008 LDNIL R1
+ 0x80040200, // 0009 RET 1 R1
+ 0xA4060400, // 000A IMPORT R1 K2
+ 0x8C080303, // 000B GETMET R2 R1 K3
+ 0x7C080200, // 000C CALL R2 1
+ 0x600C0015, // 000D GETGBL R3 G21
+ 0x7C0C0000, // 000E CALL R3 0
+ 0x8C0C0704, // 000F GETMET R3 R3 K4
+ 0x88140105, // 0010 GETMBR R5 R0 K5
+ 0x7C0C0400, // 0011 CALL R3 2
+ 0x8C100506, // 0012 GETMET R4 R2 K6
+ 0x88180100, // 0013 GETMBR R6 R0 K0
+ 0x881C0101, // 0014 GETMBR R7 R0 K1
+ 0x5C200600, // 0015 MOVE R8 R3
+ 0x5426000F, // 0016 LDINT R9 16
+ 0x7C100A00, // 0017 CALL R4 5
+ 0x80040800, // 0018 RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_ipk_epoch_key
+********************************************************************/
+be_local_closure(Matter_Fabric_get_ipk_epoch_key, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(ipk_epoch_key),
+ }),
+ be_str_weak(get_ipk_epoch_key),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_oldest_session
+********************************************************************/
+be_local_closure(Matter_Fabric_get_oldest_session, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(get_old_recent_session),
+ }),
+ be_str_weak(get_oldest_session),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x8C040100, // 0000 GETMET R1 R0 K0
+ 0x500C0200, // 0001 LDBOOL R3 1 0
+ 0x7C040400, // 0002 CALL R1 2
+ 0x80040200, // 0003 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_fabric_label
+********************************************************************/
+be_local_closure(Matter_Fabric_get_fabric_label, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(fabric_label),
+ }),
+ be_str_weak(get_fabric_label),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_newest_session
+********************************************************************/
+be_local_closure(Matter_Fabric_get_newest_session, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(get_old_recent_session),
+ }),
+ be_str_weak(get_newest_session),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x8C040100, // 0000 GETMET R1 R0 K0
+ 0x500C0000, // 0001 LDBOOL R3 0 0
+ 0x7C040400, // 0002 CALL R1 2
+ 0x80040200, // 0003 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_ca
+********************************************************************/
+be_local_closure(Matter_Fabric_get_ca, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(root_ca_certificate),
+ }),
+ be_str_weak(get_ca),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_icac
+********************************************************************/
+be_local_closure(Matter_Fabric_get_icac, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(icac),
+ }),
+ be_str_weak(get_icac),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_noc
+********************************************************************/
+be_local_closure(Matter_Fabric_get_noc, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(noc),
+ }),
+ be_str_weak(get_noc),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_fabric_id
+********************************************************************/
+be_local_closure(Matter_Fabric_get_fabric_id, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(fabric_id),
+ }),
+ be_str_weak(get_fabric_id),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_admin_vendor
+********************************************************************/
+be_local_closure(Matter_Fabric_get_admin_vendor, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(admin_vendor),
+ }),
+ be_str_weak(get_admin_vendor),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: hydrate_post
+********************************************************************/
+be_local_closure(Matter_Fabric_hydrate_post, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(_counter_group_data_snd_impl),
+ /* K1 */ be_nested_str_weak(reset),
+ /* K2 */ be_nested_str_weak(counter_group_data_snd),
+ /* K3 */ be_nested_str_weak(_counter_group_ctrl_snd_impl),
+ /* K4 */ be_nested_str_weak(counter_group_ctrl_snd),
+ /* K5 */ be_nested_str_weak(val),
+ }),
+ be_str_weak(hydrate_post),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x880C0102, // 0002 GETMBR R3 R0 K2
+ 0x7C040400, // 0003 CALL R1 2
+ 0x88040103, // 0004 GETMBR R1 R0 K3
+ 0x8C040301, // 0005 GETMET R1 R1 K1
+ 0x880C0104, // 0006 GETMBR R3 R0 K4
+ 0x7C040400, // 0007 CALL R1 2
+ 0x88040100, // 0008 GETMBR R1 R0 K0
+ 0x8C040305, // 0009 GETMET R1 R1 K5
+ 0x7C040200, // 000A CALL R1 1
+ 0x90020401, // 000B SETMBR R0 K2 R1
+ 0x88040103, // 000C GETMBR R1 R0 K3
+ 0x8C040305, // 000D GETMET R1 R1 K5
+ 0x7C040200, // 000E CALL R1 1
+ 0x90020801, // 000F SETMBR R0 K4 R1
+ 0x80000000, // 0010 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: counter_group_data_snd_next
+********************************************************************/
+be_local_closure(Matter_Fabric_counter_group_data_snd_next, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[15]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(_counter_group_data_snd_impl),
+ /* K2 */ be_nested_str_weak(next),
+ /* K3 */ be_nested_str_weak(tasmota),
+ /* K4 */ be_nested_str_weak(log),
+ /* K5 */ be_nested_str_weak(format),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20_X2E_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20Counter_group_data_snd_X3D_X25i),
+ /* K7 */ be_const_int(3),
+ /* K8 */ be_nested_str_weak(matter),
+ /* K9 */ be_nested_str_weak(Counter),
+ /* K10 */ be_nested_str_weak(is_greater),
+ /* K11 */ be_nested_str_weak(counter_group_data_snd),
+ /* K12 */ be_nested_str_weak(_GROUP_SND_INCR),
+ /* K13 */ be_nested_str_weak(does_persist),
+ /* K14 */ be_nested_str_weak(save),
+ }),
+ be_str_weak(counter_group_data_snd_next),
+ &be_const_str_solidified,
+ ( &(const binstruction[28]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0x88080101, // 0001 GETMBR R2 R0 K1
+ 0x8C080502, // 0002 GETMET R2 R2 K2
+ 0x7C080200, // 0003 CALL R2 1
+ 0xB80E0600, // 0004 GETNGBL R3 K3
+ 0x8C0C0704, // 0005 GETMET R3 R3 K4
+ 0x8C140305, // 0006 GETMET R5 R1 K5
+ 0x581C0006, // 0007 LDCONST R7 K6
+ 0x5C200400, // 0008 MOVE R8 R2
+ 0x7C140600, // 0009 CALL R5 3
+ 0x58180007, // 000A LDCONST R6 K7
+ 0x7C0C0600, // 000B CALL R3 3
+ 0xB80E1000, // 000C GETNGBL R3 K8
+ 0x880C0709, // 000D GETMBR R3 R3 K9
+ 0x8C0C070A, // 000E GETMET R3 R3 K10
+ 0x5C140400, // 000F MOVE R5 R2
+ 0x8818010B, // 0010 GETMBR R6 R0 K11
+ 0x7C0C0600, // 0011 CALL R3 3
+ 0x780E0007, // 0012 JMPF R3 #001B
+ 0x880C010C, // 0013 GETMBR R3 R0 K12
+ 0x000C0403, // 0014 ADD R3 R2 R3
+ 0x90021603, // 0015 SETMBR R0 K11 R3
+ 0x8C0C010D, // 0016 GETMET R3 R0 K13
+ 0x7C0C0200, // 0017 CALL R3 1
+ 0x780E0001, // 0018 JMPF R3 #001B
+ 0x8C0C010E, // 0019 GETMET R3 R0 K14
+ 0x7C0C0200, // 001A CALL R3 1
+ 0x80040400, // 001B RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_ca_pub
+********************************************************************/
+be_local_closure(Matter_Fabric_get_ca_pub, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(root_ca_certificate),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(TLV),
+ /* K3 */ be_nested_str_weak(parse),
+ /* K4 */ be_nested_str_weak(findsubval),
+ }),
+ be_str_weak(get_ca_pub),
+ &be_const_str_solidified,
+ ( &(const binstruction[12]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x78060008, // 0001 JMPF R1 #000B
+ 0xB80A0200, // 0002 GETNGBL R2 K1
+ 0x88080502, // 0003 GETMBR R2 R2 K2
+ 0x8C080503, // 0004 GETMET R2 R2 K3
+ 0x5C100200, // 0005 MOVE R4 R1
+ 0x7C080400, // 0006 CALL R2 2
+ 0x8C0C0504, // 0007 GETMET R3 R2 K4
+ 0x54160008, // 0008 LDINT R5 9
+ 0x7C0C0400, // 0009 CALL R3 2
+ 0x80040600, // 000A RET 1 R3
+ 0x80000000, // 000B RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_Fabric
+********************************************************************/
+extern const bclass be_class_Matter_Expirable;
+be_local_class(Matter_Fabric,
+ 20,
+ &be_class_Matter_Expirable,
+ be_nested_map(49,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(no_private_key, -1), be_const_var(5) },
+ { be_const_key_weak(tojson, 8), be_const_closure(Matter_Fabric_tojson_closure) },
+ { be_const_key_weak(counter_group_data_snd, -1), be_const_var(14) },
+ { be_const_key_weak(fabric_label, -1), be_const_var(13) },
+ { be_const_key_weak(_sessions, 34), be_const_var(4) },
+ { be_const_key_weak(created, -1), be_const_var(1) },
+ { be_const_key_weak(_GROUP_SND_INCR, -1), be_const_int(32) },
+ { be_const_key_weak(get_admin_subject, -1), be_const_closure(Matter_Fabric_get_admin_subject_closure) },
+ { be_const_key_weak(add_session, -1), be_const_closure(Matter_Fabric_add_session_closure) },
+ { be_const_key_weak(get_old_recent_session, -1), be_const_closure(Matter_Fabric_get_old_recent_session_closure) },
+ { be_const_key_weak(counter_group_data_snd_next, -1), be_const_closure(Matter_Fabric_counter_group_data_snd_next_closure) },
+ { be_const_key_weak(ipk_epoch_key, -1), be_const_var(9) },
+ { be_const_key_weak(get_device_id, -1), be_const_closure(Matter_Fabric_get_device_id_closure) },
+ { be_const_key_weak(counter_group_ctrl_snd_next, -1), be_const_closure(Matter_Fabric_counter_group_ctrl_snd_next_closure) },
+ { be_const_key_weak(_counter_group_ctrl_snd_impl, -1), be_const_var(17) },
+ { be_const_key_weak(admin_subject, 3), be_const_var(18) },
+ { be_const_key_weak(set_fabric_index, -1), be_const_closure(Matter_Fabric_set_fabric_index_closure) },
+ { be_const_key_weak(get_fabric_compressed, 32), be_const_closure(Matter_Fabric_get_fabric_compressed_closure) },
+ { be_const_key_weak(fabric_index, -1), be_const_var(2) },
+ { be_const_key_weak(counter_group_ctrl_snd, 21), be_const_var(15) },
+ { be_const_key_weak(log_new_fabric, -1), be_const_closure(Matter_Fabric_log_new_fabric_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_Fabric_init_closure) },
+ { be_const_key_weak(get_fabric_id, -1), be_const_closure(Matter_Fabric_get_fabric_id_closure) },
+ { be_const_key_weak(_store, 15), be_const_var(0) },
+ { be_const_key_weak(admin_vendor, 20), be_const_var(19) },
+ { be_const_key_weak(device_id, 40), be_const_var(12) },
+ { be_const_key_weak(before_remove, 28), be_const_closure(Matter_Fabric_before_remove_closure) },
+ { be_const_key_weak(fromjson, -1), be_const_static_closure(Matter_Fabric_fromjson_closure) },
+ { be_const_key_weak(get_noc, 39), be_const_closure(Matter_Fabric_get_noc_closure) },
+ { be_const_key_weak(get_fabric_index, 38), be_const_closure(Matter_Fabric_get_fabric_index_closure) },
+ { be_const_key_weak(_MAX_CASE, -1), be_const_int(5) },
+ { be_const_key_weak(get_ipk_epoch_key, -1), be_const_closure(Matter_Fabric_get_ipk_epoch_key_closure) },
+ { be_const_key_weak(_GROUP_KEY, -1), be_nested_str_weak(GroupKey_X20v1_X2E0) },
+ { be_const_key_weak(_counter_group_data_snd_impl, -1), be_const_var(16) },
+ { be_const_key_weak(fabric_parent, -1), be_const_var(3) },
+ { be_const_key_weak(fabric_id, -1), be_const_var(10) },
+ { be_const_key_weak(icac, 35), be_const_var(8) },
+ { be_const_key_weak(get_ca, -1), be_const_closure(Matter_Fabric_get_ca_closure) },
+ { be_const_key_weak(get_ipk_group_key, 6), be_const_closure(Matter_Fabric_get_ipk_group_key_closure) },
+ { be_const_key_weak(get_fabric_label, -1), be_const_closure(Matter_Fabric_get_fabric_label_closure) },
+ { be_const_key_weak(get_oldest_session, -1), be_const_closure(Matter_Fabric_get_oldest_session_closure) },
+ { be_const_key_weak(get_newest_session, 22), be_const_closure(Matter_Fabric_get_newest_session_closure) },
+ { be_const_key_weak(get_admin_vendor, -1), be_const_closure(Matter_Fabric_get_admin_vendor_closure) },
+ { be_const_key_weak(noc, -1), be_const_var(7) },
+ { be_const_key_weak(hydrate_post, -1), be_const_closure(Matter_Fabric_hydrate_post_closure) },
+ { be_const_key_weak(get_icac, 10), be_const_closure(Matter_Fabric_get_icac_closure) },
+ { be_const_key_weak(fabric_compressed, -1), be_const_var(11) },
+ { be_const_key_weak(get_ca_pub, -1), be_const_closure(Matter_Fabric_get_ca_pub_closure) },
+ { be_const_key_weak(root_ca_certificate, -1), be_const_var(6) },
+ })),
+ be_str_weak(Matter_Fabric)
+);
+/*******************************************************************/
+
+void be_load_Matter_Fabric_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_Fabric);
+ be_setglobal(vm, "Matter_Fabric");
+ be_pop(vm, 1);
+}
+/********************************************************************/
+/* End of solidification */
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM.h
index 1e828f15b..18c27b534 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM.h
@@ -4,14 +4,14 @@
\********************************************************************/
#include "be_constobj.h"
-extern const bclass be_class_Matter_Response_container;
+extern const bclass be_class_Matter_IM;
/********************************************************************
-** Solidified function: tostring
+** Solidified function: expire_sendqueue
********************************************************************/
-be_local_closure(Matter_Response_container_tostring, /* name */
+be_local_closure(Matter_IM_expire_sendqueue, /* name */
be_nested_proto(
- 7, /* nstack */
+ 6, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
@@ -19,91 +19,43 @@ be_local_closure(Matter_Response_container_tostring, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[14]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(),
- /* K2 */ be_nested_str_weak(endpoint),
- /* K3 */ be_nested_str_weak(format),
- /* K4 */ be_nested_str_weak(_X5B_X2502X_X5D),
- /* K5 */ be_nested_str_weak(_X5B_X2A_X2A_X5D),
- /* K6 */ be_nested_str_weak(cluster),
- /* K7 */ be_nested_str_weak(_X2504X_X2F),
- /* K8 */ be_nested_str_weak(_X2A_X2A_X2A_X2A_X2F),
- /* K9 */ be_nested_str_weak(attribute),
- /* K10 */ be_nested_str_weak(_X2504X),
- /* K11 */ be_nested_str_weak(command),
- /* K12 */ be_nested_str_weak(Exception_X3E_X20),
- /* K13 */ be_nested_str_weak(_X2C_X20),
+ ( &(const bvalue[ 8]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(send_queue),
+ /* K2 */ be_nested_str_weak(tasmota),
+ /* K3 */ be_nested_str_weak(time_reached),
+ /* K4 */ be_nested_str_weak(expiration),
+ /* K5 */ be_nested_str_weak(reached_timeout),
+ /* K6 */ be_nested_str_weak(remove),
+ /* K7 */ be_const_int(1),
}),
- be_str_weak(tostring),
+ be_str_weak(expire_sendqueue),
&be_const_str_solidified,
- ( &(const binstruction[66]) { /* code */
- 0xA8020031, // 0000 EXBLK 0 #0033
- 0xA4060000, // 0001 IMPORT R1 K0
- 0x58080001, // 0002 LDCONST R2 K1
- 0x880C0102, // 0003 GETMBR R3 R0 K2
- 0x4C100000, // 0004 LDNIL R4
- 0x200C0604, // 0005 NE R3 R3 R4
- 0x780E0004, // 0006 JMPF R3 #000C
- 0x8C0C0303, // 0007 GETMET R3 R1 K3
- 0x58140004, // 0008 LDCONST R5 K4
- 0x88180102, // 0009 GETMBR R6 R0 K2
- 0x7C0C0600, // 000A CALL R3 3
- 0x70020000, // 000B JMP #000D
- 0x580C0005, // 000C LDCONST R3 K5
- 0x00080403, // 000D ADD R2 R2 R3
- 0x880C0106, // 000E GETMBR R3 R0 K6
- 0x4C100000, // 000F LDNIL R4
- 0x200C0604, // 0010 NE R3 R3 R4
- 0x780E0004, // 0011 JMPF R3 #0017
- 0x8C0C0303, // 0012 GETMET R3 R1 K3
- 0x58140007, // 0013 LDCONST R5 K7
- 0x88180106, // 0014 GETMBR R6 R0 K6
- 0x7C0C0600, // 0015 CALL R3 3
- 0x70020000, // 0016 JMP #0018
- 0x580C0008, // 0017 LDCONST R3 K8
- 0x00080403, // 0018 ADD R2 R2 R3
- 0x880C0109, // 0019 GETMBR R3 R0 K9
- 0x4C100000, // 001A LDNIL R4
- 0x200C0604, // 001B NE R3 R3 R4
- 0x780E0004, // 001C JMPF R3 #0022
- 0x8C0C0303, // 001D GETMET R3 R1 K3
- 0x5814000A, // 001E LDCONST R5 K10
- 0x88180109, // 001F GETMBR R6 R0 K9
- 0x7C0C0600, // 0020 CALL R3 3
- 0x70020000, // 0021 JMP #0023
- 0x580C0001, // 0022 LDCONST R3 K1
- 0x00080403, // 0023 ADD R2 R2 R3
- 0x880C010B, // 0024 GETMBR R3 R0 K11
- 0x4C100000, // 0025 LDNIL R4
- 0x200C0604, // 0026 NE R3 R3 R4
- 0x780E0004, // 0027 JMPF R3 #002D
- 0x8C0C0303, // 0028 GETMET R3 R1 K3
- 0x5814000A, // 0029 LDCONST R5 K10
- 0x88180109, // 002A GETMBR R6 R0 K9
- 0x7C0C0600, // 002B CALL R3 3
- 0x70020000, // 002C JMP #002E
- 0x580C0001, // 002D LDCONST R3 K1
- 0x00080403, // 002E ADD R2 R2 R3
- 0xA8040001, // 002F EXBLK 1 1
- 0x80040400, // 0030 RET 1 R2
- 0xA8040001, // 0031 EXBLK 1 1
- 0x7002000D, // 0032 JMP #0041
- 0xAC040002, // 0033 CATCH R1 0 2
- 0x7002000A, // 0034 JMP #0040
- 0x600C0008, // 0035 GETGBL R3 G8
- 0x5C100200, // 0036 MOVE R4 R1
- 0x7C0C0200, // 0037 CALL R3 1
- 0x000E1803, // 0038 ADD R3 K12 R3
- 0x000C070D, // 0039 ADD R3 R3 K13
- 0x60100008, // 003A GETGBL R4 G8
- 0x5C140400, // 003B MOVE R5 R2
- 0x7C100200, // 003C CALL R4 1
- 0x000C0604, // 003D ADD R3 R3 R4
- 0x80040600, // 003E RET 1 R3
- 0x70020000, // 003F JMP #0041
- 0xB0080000, // 0040 RAISE 2 R0 R0
- 0x80000000, // 0041 RET 0
+ ( &(const binstruction[24]) { /* code */
+ 0x58040000, // 0000 LDCONST R1 K0
+ 0x6008000C, // 0001 GETGBL R2 G12
+ 0x880C0101, // 0002 GETMBR R3 R0 K1
+ 0x7C080200, // 0003 CALL R2 1
+ 0x14080202, // 0004 LT R2 R1 R2
+ 0x780A000F, // 0005 JMPF R2 #0016
+ 0x88080101, // 0006 GETMBR R2 R0 K1
+ 0x94080401, // 0007 GETIDX R2 R2 R1
+ 0xB80E0400, // 0008 GETNGBL R3 K2
+ 0x8C0C0703, // 0009 GETMET R3 R3 K3
+ 0x88140504, // 000A GETMBR R5 R2 K4
+ 0x7C0C0400, // 000B CALL R3 2
+ 0x780E0006, // 000C JMPF R3 #0014
+ 0x8C0C0505, // 000D GETMET R3 R2 K5
+ 0x7C0C0200, // 000E CALL R3 1
+ 0x880C0101, // 000F GETMBR R3 R0 K1
+ 0x8C0C0706, // 0010 GETMET R3 R3 K6
+ 0x5C140200, // 0011 MOVE R5 R1
+ 0x7C0C0400, // 0012 CALL R3 2
+ 0x70020000, // 0013 JMP #0015
+ 0x00040307, // 0014 ADD R1 R1 K7
+ 0x7001FFEA, // 0015 JMP #0001
+ 0x4C080000, // 0016 LDNIL R2
+ 0x80040400, // 0017 RET 1 R2
})
)
);
@@ -111,36 +63,1979 @@ be_local_closure(Matter_Response_container_tostring, /* name */
/********************************************************************
-** Solidified class: Matter_Response_container
+** Solidified function: process_invoke_request
********************************************************************/
-be_local_class(Matter_Response_container,
- 5,
- NULL,
- be_nested_map(6,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(tostring, -1), be_const_closure(Matter_Response_container_tostring_closure) },
- { be_const_key_weak(cluster, 3), be_const_var(1) },
- { be_const_key_weak(command, -1), be_const_var(3) },
- { be_const_key_weak(status, 0), be_const_var(4) },
- { be_const_key_weak(endpoint, -1), be_const_var(0) },
- { be_const_key_weak(attribute, -1), be_const_var(2) },
- })),
- be_str_weak(Matter_Response_container)
+be_local_closure(Matter_IM_process_invoke_request, /* name */
+ be_nested_proto(
+ 21, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[50]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(MTR_X3A_X20IM_X3Ainvoke_request_X20processing_X20start),
+ /* K4 */ be_nested_str_weak(matter),
+ /* K5 */ be_nested_str_weak(Path),
+ /* K6 */ be_nested_str_weak(InvokeRequestMessage),
+ /* K7 */ be_nested_str_weak(from_TLV),
+ /* K8 */ be_nested_str_weak(invoke_requests),
+ /* K9 */ be_nested_str_weak(InvokeResponseMessage),
+ /* K10 */ be_nested_str_weak(suppress_response),
+ /* K11 */ be_nested_str_weak(invoke_responses),
+ /* K12 */ be_nested_str_weak(endpoint),
+ /* K13 */ be_nested_str_weak(command_path),
+ /* K14 */ be_nested_str_weak(cluster),
+ /* K15 */ be_nested_str_weak(command),
+ /* K16 */ be_nested_str_weak(status),
+ /* K17 */ be_nested_str_weak(UNSUPPORTED_COMMAND),
+ /* K18 */ be_nested_str_weak(get_command_name),
+ /* K19 */ be_nested_str_weak(device),
+ /* K20 */ be_nested_str_weak(invoke_request),
+ /* K21 */ be_nested_str_weak(session),
+ /* K22 */ be_nested_str_weak(command_fields),
+ /* K23 */ be_nested_str_weak(_X28),
+ /* K24 */ be_nested_str_weak(_X29_X20),
+ /* K25 */ be_nested_str_weak(),
+ /* K26 */ be_nested_str_weak(format),
+ /* K27 */ be_nested_str_weak(MTR_X3A_X20_X3ECommand_X20_X20_X20_X28_X256i_X29_X20_X25s_X20_X25s_X20_X25s),
+ /* K28 */ be_nested_str_weak(local_session_id),
+ /* K29 */ be_const_int(2),
+ /* K30 */ be_nested_str_weak(InvokeResponseIB),
+ /* K31 */ be_nested_str_weak(SUCCESS),
+ /* K32 */ be_nested_str_weak(CommandStatusIB),
+ /* K33 */ be_nested_str_weak(CommandPathIB),
+ /* K34 */ be_nested_str_weak(StatusIB),
+ /* K35 */ be_nested_str_weak(push),
+ /* K36 */ be_nested_str_weak(MTR_X3A_X20_X3CReplied_X20_X20_X20_X28_X256i_X29_X20OK_X20exch_X3D_X25i),
+ /* K37 */ be_nested_str_weak(exchange_id),
+ /* K38 */ be_nested_str_weak(CommandDataIB),
+ /* K39 */ be_nested_str_weak(MTR_X3A_X20_X3CReplied_X20_X20_X20_X28_X256i_X29_X20_X25s_X20_X25s),
+ /* K40 */ be_nested_str_weak(MTR_X3A_X20_X3CReplied_X20_X20_X20_X28_X256i_X29_X20Status_X3D0x_X2502X_X20exch_X3D_X25i),
+ /* K41 */ be_nested_str_weak(MTR_X3A_X20_Ignore_X20_X20_X20_X20_X28_X256i_X29_X20exch_X3D_X25i),
+ /* K42 */ be_nested_str_weak(stop_iteration),
+ /* K43 */ be_nested_str_weak(MTR_X3A_X20invoke_responses_X3D),
+ /* K44 */ be_const_int(0),
+ /* K45 */ be_nested_str_weak(MTR_X3A_X20InvokeResponse_X3D),
+ /* K46 */ be_nested_str_weak(MTR_X3A_X20InvokeResponseTLV_X3D),
+ /* K47 */ be_nested_str_weak(to_TLV),
+ /* K48 */ be_const_int(3),
+ /* K49 */ be_nested_str_weak(send_invoke_response),
+ }),
+ be_str_weak(process_invoke_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[300]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x8C100902, // 0002 GETMET R4 R4 K2
+ 0x58180003, // 0003 LDCONST R6 K3
+ 0x541E0003, // 0004 LDINT R7 4
+ 0x7C100600, // 0005 CALL R4 3
+ 0xB8120800, // 0006 GETNGBL R4 K4
+ 0x8C100905, // 0007 GETMET R4 R4 K5
+ 0x7C100200, // 0008 CALL R4 1
+ 0xB8160800, // 0009 GETNGBL R5 K4
+ 0x8C140B06, // 000A GETMET R5 R5 K6
+ 0x7C140200, // 000B CALL R5 1
+ 0x8C140B07, // 000C GETMET R5 R5 K7
+ 0x5C1C0400, // 000D MOVE R7 R2
+ 0x7C140400, // 000E CALL R5 2
+ 0x88180B08, // 000F GETMBR R6 R5 K8
+ 0x4C1C0000, // 0010 LDNIL R7
+ 0x20180C07, // 0011 NE R6 R6 R7
+ 0x781A0117, // 0012 JMPF R6 #012B
+ 0xB81A0800, // 0013 GETNGBL R6 K4
+ 0x8C180D09, // 0014 GETMET R6 R6 K9
+ 0x7C180200, // 0015 CALL R6 1
+ 0x501C0000, // 0016 LDBOOL R7 0 0
+ 0x901A1407, // 0017 SETMBR R6 K10 R7
+ 0x601C0012, // 0018 GETGBL R7 G18
+ 0x7C1C0000, // 0019 CALL R7 0
+ 0x901A1607, // 001A SETMBR R6 K11 R7
+ 0x601C0010, // 001B GETGBL R7 G16
+ 0x88200B08, // 001C GETMBR R8 R5 K8
+ 0x7C1C0200, // 001D CALL R7 1
+ 0xA80200E1, // 001E EXBLK 0 #0101
+ 0x5C200E00, // 001F MOVE R8 R7
+ 0x7C200000, // 0020 CALL R8 0
+ 0x8824110D, // 0021 GETMBR R9 R8 K13
+ 0x8824130C, // 0022 GETMBR R9 R9 K12
+ 0x90121809, // 0023 SETMBR R4 K12 R9
+ 0x8824110D, // 0024 GETMBR R9 R8 K13
+ 0x8824130E, // 0025 GETMBR R9 R9 K14
+ 0x90121C09, // 0026 SETMBR R4 K14 R9
+ 0x8824110D, // 0027 GETMBR R9 R8 K13
+ 0x8824130F, // 0028 GETMBR R9 R9 K15
+ 0x90121E09, // 0029 SETMBR R4 K15 R9
+ 0xB8260800, // 002A GETNGBL R9 K4
+ 0x88241311, // 002B GETMBR R9 R9 K17
+ 0x90122009, // 002C SETMBR R4 K16 R9
+ 0xB8260800, // 002D GETNGBL R9 K4
+ 0x8C241312, // 002E GETMET R9 R9 K18
+ 0x882C090E, // 002F GETMBR R11 R4 K14
+ 0x8830090F, // 0030 GETMBR R12 R4 K15
+ 0x7C240600, // 0031 CALL R9 3
+ 0x88280113, // 0032 GETMBR R10 R0 K19
+ 0x8C281514, // 0033 GETMET R10 R10 K20
+ 0x88300315, // 0034 GETMBR R12 R1 K21
+ 0x88341116, // 0035 GETMBR R13 R8 K22
+ 0x5C380800, // 0036 MOVE R14 R4
+ 0x7C280800, // 0037 CALL R10 4
+ 0x882C0902, // 0038 GETMBR R11 R4 K2
+ 0x4C300000, // 0039 LDNIL R12
+ 0x202C160C, // 003A NE R11 R11 R12
+ 0x782E0005, // 003B JMPF R11 #0042
+ 0x602C0008, // 003C GETGBL R11 G8
+ 0x88300902, // 003D GETMBR R12 R4 K2
+ 0x7C2C0200, // 003E CALL R11 1
+ 0x002E2E0B, // 003F ADD R11 K23 R11
+ 0x002C1718, // 0040 ADD R11 R11 K24
+ 0x70020000, // 0041 JMP #0043
+ 0x582C0019, // 0042 LDCONST R11 K25
+ 0xB8320200, // 0043 GETNGBL R12 K1
+ 0x8C301902, // 0044 GETMET R12 R12 K2
+ 0x8C38071A, // 0045 GETMET R14 R3 K26
+ 0x5840001B, // 0046 LDCONST R16 K27
+ 0x88440315, // 0047 GETMBR R17 R1 K21
+ 0x8844231C, // 0048 GETMBR R17 R17 K28
+ 0x60480008, // 0049 GETGBL R18 G8
+ 0x5C4C0800, // 004A MOVE R19 R4
+ 0x7C480200, // 004B CALL R18 1
+ 0x78260001, // 004C JMPF R9 #004F
+ 0x5C4C1200, // 004D MOVE R19 R9
+ 0x70020000, // 004E JMP #0050
+ 0x584C0019, // 004F LDCONST R19 K25
+ 0x5C501600, // 0050 MOVE R20 R11
+ 0x7C380C00, // 0051 CALL R14 6
+ 0x583C001D, // 0052 LDCONST R15 K29
+ 0x7C300600, // 0053 CALL R12 3
+ 0x4C300000, // 0054 LDNIL R12
+ 0x9012040C, // 0055 SETMBR R4 K2 R12
+ 0xB8320800, // 0056 GETNGBL R12 K4
+ 0x8C30191E, // 0057 GETMET R12 R12 K30
+ 0x7C300200, // 0058 CALL R12 1
+ 0x50340200, // 0059 LDBOOL R13 1 0
+ 0x1C34140D, // 005A EQ R13 R10 R13
+ 0x74360004, // 005B JMPT R13 #0061
+ 0x88340910, // 005C GETMBR R13 R4 K16
+ 0xB83A0800, // 005D GETNGBL R14 K4
+ 0x88381D1F, // 005E GETMBR R14 R14 K31
+ 0x1C341A0E, // 005F EQ R13 R13 R14
+ 0x7836002D, // 0060 JMPF R13 #008F
+ 0xB8360800, // 0061 GETNGBL R13 K4
+ 0x8C341B20, // 0062 GETMET R13 R13 K32
+ 0x7C340200, // 0063 CALL R13 1
+ 0x9032200D, // 0064 SETMBR R12 K16 R13
+ 0x88341910, // 0065 GETMBR R13 R12 K16
+ 0xB83A0800, // 0066 GETNGBL R14 K4
+ 0x8C381D21, // 0067 GETMET R14 R14 K33
+ 0x7C380200, // 0068 CALL R14 1
+ 0x90361A0E, // 0069 SETMBR R13 K13 R14
+ 0x88341910, // 006A GETMBR R13 R12 K16
+ 0x88341B0D, // 006B GETMBR R13 R13 K13
+ 0x8838090C, // 006C GETMBR R14 R4 K12
+ 0x9036180E, // 006D SETMBR R13 K12 R14
+ 0x88341910, // 006E GETMBR R13 R12 K16
+ 0x88341B0D, // 006F GETMBR R13 R13 K13
+ 0x8838090E, // 0070 GETMBR R14 R4 K14
+ 0x90361C0E, // 0071 SETMBR R13 K14 R14
+ 0x88341910, // 0072 GETMBR R13 R12 K16
+ 0x88341B0D, // 0073 GETMBR R13 R13 K13
+ 0x8838090F, // 0074 GETMBR R14 R4 K15
+ 0x90361E0E, // 0075 SETMBR R13 K15 R14
+ 0x88341910, // 0076 GETMBR R13 R12 K16
+ 0xB83A0800, // 0077 GETNGBL R14 K4
+ 0x8C381D22, // 0078 GETMET R14 R14 K34
+ 0x7C380200, // 0079 CALL R14 1
+ 0x9036200E, // 007A SETMBR R13 K16 R14
+ 0x88341910, // 007B GETMBR R13 R12 K16
+ 0x88341B10, // 007C GETMBR R13 R13 K16
+ 0xB83A0800, // 007D GETNGBL R14 K4
+ 0x88381D1F, // 007E GETMBR R14 R14 K31
+ 0x9036200E, // 007F SETMBR R13 K16 R14
+ 0x88340D0B, // 0080 GETMBR R13 R6 K11
+ 0x8C341B23, // 0081 GETMET R13 R13 K35
+ 0x5C3C1800, // 0082 MOVE R15 R12
+ 0x7C340400, // 0083 CALL R13 2
+ 0xB8360200, // 0084 GETNGBL R13 K1
+ 0x8C341B02, // 0085 GETMET R13 R13 K2
+ 0x8C3C071A, // 0086 GETMET R15 R3 K26
+ 0x58440024, // 0087 LDCONST R17 K36
+ 0x88480315, // 0088 GETMBR R18 R1 K21
+ 0x8848251C, // 0089 GETMBR R18 R18 K28
+ 0x884C0325, // 008A GETMBR R19 R1 K37
+ 0x7C3C0800, // 008B CALL R15 4
+ 0x5840001D, // 008C LDCONST R16 K29
+ 0x7C340600, // 008D CALL R13 3
+ 0x70020070, // 008E JMP #0100
+ 0x4C340000, // 008F LDNIL R13
+ 0x2034140D, // 0090 NE R13 R10 R13
+ 0x78360031, // 0091 JMPF R13 #00C4
+ 0xB8360800, // 0092 GETNGBL R13 K4
+ 0x8C341B26, // 0093 GETMET R13 R13 K38
+ 0x7C340200, // 0094 CALL R13 1
+ 0x90321E0D, // 0095 SETMBR R12 K15 R13
+ 0x8834190F, // 0096 GETMBR R13 R12 K15
+ 0xB83A0800, // 0097 GETNGBL R14 K4
+ 0x8C381D21, // 0098 GETMET R14 R14 K33
+ 0x7C380200, // 0099 CALL R14 1
+ 0x90361A0E, // 009A SETMBR R13 K13 R14
+ 0x8834190F, // 009B GETMBR R13 R12 K15
+ 0x88341B0D, // 009C GETMBR R13 R13 K13
+ 0x8838090C, // 009D GETMBR R14 R4 K12
+ 0x9036180E, // 009E SETMBR R13 K12 R14
+ 0x8834190F, // 009F GETMBR R13 R12 K15
+ 0x88341B0D, // 00A0 GETMBR R13 R13 K13
+ 0x8838090E, // 00A1 GETMBR R14 R4 K14
+ 0x90361C0E, // 00A2 SETMBR R13 K14 R14
+ 0x8834190F, // 00A3 GETMBR R13 R12 K15
+ 0x88341B0D, // 00A4 GETMBR R13 R13 K13
+ 0x8838090F, // 00A5 GETMBR R14 R4 K15
+ 0x90361E0E, // 00A6 SETMBR R13 K15 R14
+ 0x8834190F, // 00A7 GETMBR R13 R12 K15
+ 0x90362C0A, // 00A8 SETMBR R13 K22 R10
+ 0x88340D0B, // 00A9 GETMBR R13 R6 K11
+ 0x8C341B23, // 00AA GETMET R13 R13 K35
+ 0x5C3C1800, // 00AB MOVE R15 R12
+ 0x7C340400, // 00AC CALL R13 2
+ 0xB8360800, // 00AD GETNGBL R13 K4
+ 0x8C341B12, // 00AE GETMET R13 R13 K18
+ 0x883C090E, // 00AF GETMBR R15 R4 K14
+ 0x8840090F, // 00B0 GETMBR R16 R4 K15
+ 0x7C340600, // 00B1 CALL R13 3
+ 0x5C241A00, // 00B2 MOVE R9 R13
+ 0xB8360200, // 00B3 GETNGBL R13 K1
+ 0x8C341B02, // 00B4 GETMET R13 R13 K2
+ 0x8C3C071A, // 00B5 GETMET R15 R3 K26
+ 0x58440027, // 00B6 LDCONST R17 K39
+ 0x88480315, // 00B7 GETMBR R18 R1 K21
+ 0x8848251C, // 00B8 GETMBR R18 R18 K28
+ 0x604C0008, // 00B9 GETGBL R19 G8
+ 0x5C500800, // 00BA MOVE R20 R4
+ 0x7C4C0200, // 00BB CALL R19 1
+ 0x78260001, // 00BC JMPF R9 #00BF
+ 0x5C501200, // 00BD MOVE R20 R9
+ 0x70020000, // 00BE JMP #00C0
+ 0x58500019, // 00BF LDCONST R20 K25
+ 0x7C3C0A00, // 00C0 CALL R15 5
+ 0x5840001D, // 00C1 LDCONST R16 K29
+ 0x7C340600, // 00C2 CALL R13 3
+ 0x7002003B, // 00C3 JMP #0100
+ 0x88340910, // 00C4 GETMBR R13 R4 K16
+ 0x4C380000, // 00C5 LDNIL R14
+ 0x20341A0E, // 00C6 NE R13 R13 R14
+ 0x7836002D, // 00C7 JMPF R13 #00F6
+ 0xB8360800, // 00C8 GETNGBL R13 K4
+ 0x8C341B20, // 00C9 GETMET R13 R13 K32
+ 0x7C340200, // 00CA CALL R13 1
+ 0x9032200D, // 00CB SETMBR R12 K16 R13
+ 0x88341910, // 00CC GETMBR R13 R12 K16
+ 0xB83A0800, // 00CD GETNGBL R14 K4
+ 0x8C381D21, // 00CE GETMET R14 R14 K33
+ 0x7C380200, // 00CF CALL R14 1
+ 0x90361A0E, // 00D0 SETMBR R13 K13 R14
+ 0x88341910, // 00D1 GETMBR R13 R12 K16
+ 0x88341B0D, // 00D2 GETMBR R13 R13 K13
+ 0x8838090C, // 00D3 GETMBR R14 R4 K12
+ 0x9036180E, // 00D4 SETMBR R13 K12 R14
+ 0x88341910, // 00D5 GETMBR R13 R12 K16
+ 0x88341B0D, // 00D6 GETMBR R13 R13 K13
+ 0x8838090E, // 00D7 GETMBR R14 R4 K14
+ 0x90361C0E, // 00D8 SETMBR R13 K14 R14
+ 0x88341910, // 00D9 GETMBR R13 R12 K16
+ 0x88341B0D, // 00DA GETMBR R13 R13 K13
+ 0x8838090F, // 00DB GETMBR R14 R4 K15
+ 0x90361E0E, // 00DC SETMBR R13 K15 R14
+ 0x88341910, // 00DD GETMBR R13 R12 K16
+ 0xB83A0800, // 00DE GETNGBL R14 K4
+ 0x8C381D22, // 00DF GETMET R14 R14 K34
+ 0x7C380200, // 00E0 CALL R14 1
+ 0x9036200E, // 00E1 SETMBR R13 K16 R14
+ 0x88341910, // 00E2 GETMBR R13 R12 K16
+ 0x88341B10, // 00E3 GETMBR R13 R13 K16
+ 0x88380910, // 00E4 GETMBR R14 R4 K16
+ 0x9036200E, // 00E5 SETMBR R13 K16 R14
+ 0x88340D0B, // 00E6 GETMBR R13 R6 K11
+ 0x8C341B23, // 00E7 GETMET R13 R13 K35
+ 0x5C3C1800, // 00E8 MOVE R15 R12
+ 0x7C340400, // 00E9 CALL R13 2
+ 0xB8360200, // 00EA GETNGBL R13 K1
+ 0x8C341B02, // 00EB GETMET R13 R13 K2
+ 0x8C3C071A, // 00EC GETMET R15 R3 K26
+ 0x58440028, // 00ED LDCONST R17 K40
+ 0x88480315, // 00EE GETMBR R18 R1 K21
+ 0x8848251C, // 00EF GETMBR R18 R18 K28
+ 0x884C0910, // 00F0 GETMBR R19 R4 K16
+ 0x88500325, // 00F1 GETMBR R20 R1 K37
+ 0x7C3C0A00, // 00F2 CALL R15 5
+ 0x5840001D, // 00F3 LDCONST R16 K29
+ 0x7C340600, // 00F4 CALL R13 3
+ 0x70020009, // 00F5 JMP #0100
+ 0xB8360200, // 00F6 GETNGBL R13 K1
+ 0x8C341B02, // 00F7 GETMET R13 R13 K2
+ 0x8C3C071A, // 00F8 GETMET R15 R3 K26
+ 0x58440029, // 00F9 LDCONST R17 K41
+ 0x88480315, // 00FA GETMBR R18 R1 K21
+ 0x8848251C, // 00FB GETMBR R18 R18 K28
+ 0x884C0325, // 00FC GETMBR R19 R1 K37
+ 0x7C3C0800, // 00FD CALL R15 4
+ 0x5840001D, // 00FE LDCONST R16 K29
+ 0x7C340600, // 00FF CALL R13 3
+ 0x7001FF1D, // 0100 JMP #001F
+ 0x581C002A, // 0101 LDCONST R7 K42
+ 0xAC1C0200, // 0102 CATCH R7 1 0
+ 0xB0080000, // 0103 RAISE 2 R0 R0
+ 0xB81E0200, // 0104 GETNGBL R7 K1
+ 0x8C1C0F02, // 0105 GETMET R7 R7 K2
+ 0x60240008, // 0106 GETGBL R9 G8
+ 0x88280D0B, // 0107 GETMBR R10 R6 K11
+ 0x7C240200, // 0108 CALL R9 1
+ 0x00265609, // 0109 ADD R9 K43 R9
+ 0x542A0003, // 010A LDINT R10 4
+ 0x7C1C0600, // 010B CALL R7 3
+ 0x601C000C, // 010C GETGBL R7 G12
+ 0x88200D0B, // 010D GETMBR R8 R6 K11
+ 0x7C1C0200, // 010E CALL R7 1
+ 0x241C0F2C, // 010F GT R7 R7 K44
+ 0x781E0015, // 0110 JMPF R7 #0127
+ 0xB81E0200, // 0111 GETNGBL R7 K1
+ 0x8C1C0F02, // 0112 GETMET R7 R7 K2
+ 0x60240008, // 0113 GETGBL R9 G8
+ 0x5C280C00, // 0114 MOVE R10 R6
+ 0x7C240200, // 0115 CALL R9 1
+ 0x00265A09, // 0116 ADD R9 K45 R9
+ 0x542A0003, // 0117 LDINT R10 4
+ 0x7C1C0600, // 0118 CALL R7 3
+ 0xB81E0200, // 0119 GETNGBL R7 K1
+ 0x8C1C0F02, // 011A GETMET R7 R7 K2
+ 0x60240008, // 011B GETGBL R9 G8
+ 0x8C280D2F, // 011C GETMET R10 R6 K47
+ 0x7C280200, // 011D CALL R10 1
+ 0x7C240200, // 011E CALL R9 1
+ 0x00265C09, // 011F ADD R9 K46 R9
+ 0x58280030, // 0120 LDCONST R10 K48
+ 0x7C1C0600, // 0121 CALL R7 3
+ 0x8C1C0131, // 0122 GETMET R7 R0 K49
+ 0x5C240200, // 0123 MOVE R9 R1
+ 0x5C280C00, // 0124 MOVE R10 R6
+ 0x7C1C0600, // 0125 CALL R7 3
+ 0x70020001, // 0126 JMP #0129
+ 0x501C0000, // 0127 LDBOOL R7 0 0
+ 0x80040E00, // 0128 RET 1 R7
+ 0x501C0200, // 0129 LDBOOL R7 1 0
+ 0x80040E00, // 012A RET 1 R7
+ 0x80000000, // 012B RET 0
+ })
+ )
);
/*******************************************************************/
-void be_load_Matter_Response_container_class(bvm *vm) {
- be_pushntvclass(vm, &be_class_Matter_Response_container);
- be_setglobal(vm, "Matter_Response_container");
- be_pop(vm, 1);
-}
-
-extern const bclass be_class_Matter_IM;
/********************************************************************
-** Solidified function: process_timed_request
+** Solidified function: subscribe_request
********************************************************************/
-be_local_closure(Matter_IM_process_timed_request, /* name */
+be_local_closure(Matter_IM_subscribe_request, /* name */
+ be_nested_proto(
+ 19, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[33]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(SubscribeRequestMessage),
+ /* K3 */ be_nested_str_weak(from_TLV),
+ /* K4 */ be_nested_str_weak(keep_subscriptions),
+ /* K5 */ be_nested_str_weak(subs_shop),
+ /* K6 */ be_nested_str_weak(remove_by_session),
+ /* K7 */ be_nested_str_weak(session),
+ /* K8 */ be_nested_str_weak(tasmota),
+ /* K9 */ be_nested_str_weak(log),
+ /* K10 */ be_nested_str_weak(MTR_X3A_X20received_X20SubscribeRequestMessage_X3D),
+ /* K11 */ be_const_int(3),
+ /* K12 */ be_nested_str_weak(new_subscription),
+ /* K13 */ be_nested_str_weak(Path),
+ /* K14 */ be_nested_str_weak(attributes_requests),
+ /* K15 */ be_nested_str_weak(endpoint),
+ /* K16 */ be_nested_str_weak(cluster),
+ /* K17 */ be_nested_str_weak(attribute),
+ /* K18 */ be_nested_str_weak(push),
+ /* K19 */ be_nested_str_weak(stop_iteration),
+ /* K20 */ be_nested_str_weak(format),
+ /* K21 */ be_nested_str_weak(MTR_X3A_X20_X3ESubscribe_X20_X28_X256i_X29_X20_X25s_X20_X28min_X3D_X25i_X2C_X20max_X3D_X25i_X2C_X20keep_X3D_X25i_X29_X20sub_X3D_X25i),
+ /* K22 */ be_nested_str_weak(local_session_id),
+ /* K23 */ be_nested_str_weak(concat),
+ /* K24 */ be_nested_str_weak(_X20),
+ /* K25 */ be_nested_str_weak(min_interval),
+ /* K26 */ be_nested_str_weak(max_interval),
+ /* K27 */ be_const_int(1),
+ /* K28 */ be_const_int(0),
+ /* K29 */ be_nested_str_weak(subscription_id),
+ /* K30 */ be_const_int(2),
+ /* K31 */ be_nested_str_weak(_inner_process_read_request),
+ /* K32 */ be_nested_str_weak(send_subscribe_response),
+ }),
+ be_str_weak(subscribe_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[86]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x8C100902, // 0002 GETMET R4 R4 K2
+ 0x7C100200, // 0003 CALL R4 1
+ 0x8C100903, // 0004 GETMET R4 R4 K3
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C100400, // 0006 CALL R4 2
+ 0x88140904, // 0007 GETMBR R5 R4 K4
+ 0x74160003, // 0008 JMPT R5 #000D
+ 0x88140105, // 0009 GETMBR R5 R0 K5
+ 0x8C140B06, // 000A GETMET R5 R5 K6
+ 0x881C0307, // 000B GETMBR R7 R1 K7
+ 0x7C140400, // 000C CALL R5 2
+ 0xB8161000, // 000D GETNGBL R5 K8
+ 0x8C140B09, // 000E GETMET R5 R5 K9
+ 0x601C0008, // 000F GETGBL R7 G8
+ 0x5C200800, // 0010 MOVE R8 R4
+ 0x7C1C0200, // 0011 CALL R7 1
+ 0x001E1407, // 0012 ADD R7 K10 R7
+ 0x5820000B, // 0013 LDCONST R8 K11
+ 0x7C140600, // 0014 CALL R5 3
+ 0x88140105, // 0015 GETMBR R5 R0 K5
+ 0x8C140B0C, // 0016 GETMET R5 R5 K12
+ 0x881C0307, // 0017 GETMBR R7 R1 K7
+ 0x5C200800, // 0018 MOVE R8 R4
+ 0x7C140600, // 0019 CALL R5 3
+ 0x60180012, // 001A GETGBL R6 G18
+ 0x7C180000, // 001B CALL R6 0
+ 0xB81E0200, // 001C GETNGBL R7 K1
+ 0x8C1C0F0D, // 001D GETMET R7 R7 K13
+ 0x7C1C0200, // 001E CALL R7 1
+ 0x60200010, // 001F GETGBL R8 G16
+ 0x8824090E, // 0020 GETMBR R9 R4 K14
+ 0x7C200200, // 0021 CALL R8 1
+ 0xA802000D, // 0022 EXBLK 0 #0031
+ 0x5C241000, // 0023 MOVE R9 R8
+ 0x7C240000, // 0024 CALL R9 0
+ 0x8828130F, // 0025 GETMBR R10 R9 K15
+ 0x901E1E0A, // 0026 SETMBR R7 K15 R10
+ 0x88281310, // 0027 GETMBR R10 R9 K16
+ 0x901E200A, // 0028 SETMBR R7 K16 R10
+ 0x88281311, // 0029 GETMBR R10 R9 K17
+ 0x901E220A, // 002A SETMBR R7 K17 R10
+ 0x8C280D12, // 002B GETMET R10 R6 K18
+ 0x60300008, // 002C GETGBL R12 G8
+ 0x5C340E00, // 002D MOVE R13 R7
+ 0x7C300200, // 002E CALL R12 1
+ 0x7C280400, // 002F CALL R10 2
+ 0x7001FFF1, // 0030 JMP #0023
+ 0x58200013, // 0031 LDCONST R8 K19
+ 0xAC200200, // 0032 CATCH R8 1 0
+ 0xB0080000, // 0033 RAISE 2 R0 R0
+ 0xB8221000, // 0034 GETNGBL R8 K8
+ 0x8C201109, // 0035 GETMET R8 R8 K9
+ 0x8C280714, // 0036 GETMET R10 R3 K20
+ 0x58300015, // 0037 LDCONST R12 K21
+ 0x88340307, // 0038 GETMBR R13 R1 K7
+ 0x88341B16, // 0039 GETMBR R13 R13 K22
+ 0x8C380D17, // 003A GETMET R14 R6 K23
+ 0x58400018, // 003B LDCONST R16 K24
+ 0x7C380400, // 003C CALL R14 2
+ 0x883C0B19, // 003D GETMBR R15 R5 K25
+ 0x88400B1A, // 003E GETMBR R16 R5 K26
+ 0x88440904, // 003F GETMBR R17 R4 K4
+ 0x78460001, // 0040 JMPF R17 #0043
+ 0x5844001B, // 0041 LDCONST R17 K27
+ 0x70020000, // 0042 JMP #0044
+ 0x5844001C, // 0043 LDCONST R17 K28
+ 0x88480B1D, // 0044 GETMBR R18 R5 K29
+ 0x7C281000, // 0045 CALL R10 8
+ 0x582C001E, // 0046 LDCONST R11 K30
+ 0x7C200600, // 0047 CALL R8 3
+ 0x8C20011F, // 0048 GETMET R8 R0 K31
+ 0x88280307, // 0049 GETMBR R10 R1 K7
+ 0x5C2C0800, // 004A MOVE R11 R4
+ 0x50300200, // 004B LDBOOL R12 1 0
+ 0x7C200800, // 004C CALL R8 4
+ 0x88240B1D, // 004D GETMBR R9 R5 K29
+ 0x90223A09, // 004E SETMBR R8 K29 R9
+ 0x8C240120, // 004F GETMET R9 R0 K32
+ 0x5C2C0200, // 0050 MOVE R11 R1
+ 0x5C301000, // 0051 MOVE R12 R8
+ 0x5C340A00, // 0052 MOVE R13 R5
+ 0x7C240800, // 0053 CALL R9 4
+ 0x50240200, // 0054 LDBOOL R9 1 0
+ 0x80041200, // 0055 RET 1 R9
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: process_write_request
+********************************************************************/
+be_local_closure(Matter_IM_process_write_request, /* name */
+ be_nested_proto(
+ 20, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 2]) {
+ be_nested_proto(
+ 19, /* nstack */
+ 5, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 1]) { /* upvals */
+ be_local_const_upval(1, 1),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[26]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(get_attribute_name),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(attribute),
+ /* K5 */ be_nested_str_weak(_X20_X28),
+ /* K6 */ be_nested_str_weak(_X29),
+ /* K7 */ be_nested_str_weak(),
+ /* K8 */ be_nested_str_weak(status),
+ /* K9 */ be_nested_str_weak(UNSUPPORTED_WRITE),
+ /* K10 */ be_nested_str_weak(write_attribute),
+ /* K11 */ be_nested_str_weak(session),
+ /* K12 */ be_nested_str_weak(SUCCESS),
+ /* K13 */ be_nested_str_weak(AttributeStatusIB),
+ /* K14 */ be_nested_str_weak(path),
+ /* K15 */ be_nested_str_weak(AttributePathIB),
+ /* K16 */ be_nested_str_weak(StatusIB),
+ /* K17 */ be_nested_str_weak(endpoint),
+ /* K18 */ be_nested_str_weak(write_responses),
+ /* K19 */ be_nested_str_weak(push),
+ /* K20 */ be_nested_str_weak(tasmota),
+ /* K21 */ be_nested_str_weak(log),
+ /* K22 */ be_nested_str_weak(format),
+ /* K23 */ be_nested_str_weak(MTR_X3A_X20Write_Attr_X20_X25s_X25s_X20_X2D_X20STATUS_X3A_X200x_X2502X_X20_X25s),
+ /* K24 */ be_const_int(2),
+ /* K25 */ be_nested_str_weak(MTR_X3A_X20Write_Attr_X20_X25s_X25s_X20_X2D_X20IGNORED),
+ }),
+ be_str_weak(write_single_attribute),
+ &be_const_str_solidified,
+ ( &(const binstruction[97]) { /* code */
+ 0xA4160000, // 0000 IMPORT R5 K0
+ 0xB81A0200, // 0001 GETNGBL R6 K1
+ 0x8C180D02, // 0002 GETMET R6 R6 K2
+ 0x88200503, // 0003 GETMBR R8 R2 K3
+ 0x88240504, // 0004 GETMBR R9 R2 K4
+ 0x7C180600, // 0005 CALL R6 3
+ 0x781A0002, // 0006 JMPF R6 #000A
+ 0x001E0A06, // 0007 ADD R7 K5 R6
+ 0x001C0F06, // 0008 ADD R7 R7 K6
+ 0x70020000, // 0009 JMP #000B
+ 0x581C0007, // 000A LDCONST R7 K7
+ 0x5C180E00, // 000B MOVE R6 R7
+ 0xB81E0200, // 000C GETNGBL R7 K1
+ 0x881C0F09, // 000D GETMBR R7 R7 K9
+ 0x900A1007, // 000E SETMBR R2 K8 R7
+ 0x4C1C0000, // 000F LDNIL R7
+ 0x201C0207, // 0010 NE R7 R1 R7
+ 0x781E0006, // 0011 JMPF R7 #0019
+ 0x8C1C030A, // 0012 GETMET R7 R1 K10
+ 0x68240000, // 0013 GETUPV R9 U0
+ 0x8824130B, // 0014 GETMBR R9 R9 K11
+ 0x5C280400, // 0015 MOVE R10 R2
+ 0x5C2C0600, // 0016 MOVE R11 R3
+ 0x7C1C0800, // 0017 CALL R7 4
+ 0x70020000, // 0018 JMP #001A
+ 0x4C1C0000, // 0019 LDNIL R7
+ 0x781E0002, // 001A JMPF R7 #001E
+ 0xB8220200, // 001B GETNGBL R8 K1
+ 0x8820110C, // 001C GETMBR R8 R8 K12
+ 0x900A1008, // 001D SETMBR R2 K8 R8
+ 0x88200508, // 001E GETMBR R8 R2 K8
+ 0x4C240000, // 001F LDNIL R9
+ 0x20201009, // 0020 NE R8 R8 R9
+ 0x78220032, // 0021 JMPF R8 #0055
+ 0x78120030, // 0022 JMPF R4 #0054
+ 0xB8220200, // 0023 GETNGBL R8 K1
+ 0x8C20110D, // 0024 GETMET R8 R8 K13
+ 0x7C200200, // 0025 CALL R8 1
+ 0xB8260200, // 0026 GETNGBL R9 K1
+ 0x8C24130F, // 0027 GETMET R9 R9 K15
+ 0x7C240200, // 0028 CALL R9 1
+ 0x90221C09, // 0029 SETMBR R8 K14 R9
+ 0xB8260200, // 002A GETNGBL R9 K1
+ 0x8C241310, // 002B GETMET R9 R9 K16
+ 0x7C240200, // 002C CALL R9 1
+ 0x90221009, // 002D SETMBR R8 K8 R9
+ 0x8824110E, // 002E GETMBR R9 R8 K14
+ 0x88280511, // 002F GETMBR R10 R2 K17
+ 0x9026220A, // 0030 SETMBR R9 K17 R10
+ 0x8824110E, // 0031 GETMBR R9 R8 K14
+ 0x88280503, // 0032 GETMBR R10 R2 K3
+ 0x9026060A, // 0033 SETMBR R9 K3 R10
+ 0x8824110E, // 0034 GETMBR R9 R8 K14
+ 0x88280504, // 0035 GETMBR R10 R2 K4
+ 0x9026080A, // 0036 SETMBR R9 K4 R10
+ 0x88241108, // 0037 GETMBR R9 R8 K8
+ 0x88280508, // 0038 GETMBR R10 R2 K8
+ 0x9026100A, // 0039 SETMBR R9 K8 R10
+ 0x88240112, // 003A GETMBR R9 R0 K18
+ 0x8C241313, // 003B GETMET R9 R9 K19
+ 0x5C2C1000, // 003C MOVE R11 R8
+ 0x7C240400, // 003D CALL R9 2
+ 0xB8262800, // 003E GETNGBL R9 K20
+ 0x8C241315, // 003F GETMET R9 R9 K21
+ 0x8C2C0B16, // 0040 GETMET R11 R5 K22
+ 0x58340017, // 0041 LDCONST R13 K23
+ 0x60380008, // 0042 GETGBL R14 G8
+ 0x5C3C0400, // 0043 MOVE R15 R2
+ 0x7C380200, // 0044 CALL R14 1
+ 0x5C3C0C00, // 0045 MOVE R15 R6
+ 0x88400508, // 0046 GETMBR R16 R2 K8
+ 0x88440508, // 0047 GETMBR R17 R2 K8
+ 0xB84A0200, // 0048 GETNGBL R18 K1
+ 0x8848250C, // 0049 GETMBR R18 R18 K12
+ 0x1C442212, // 004A EQ R17 R17 R18
+ 0x78460001, // 004B JMPF R17 #004E
+ 0x5844000C, // 004C LDCONST R17 K12
+ 0x70020000, // 004D JMP #004F
+ 0x58440007, // 004E LDCONST R17 K7
+ 0x7C2C0C00, // 004F CALL R11 6
+ 0x58300018, // 0050 LDCONST R12 K24
+ 0x7C240600, // 0051 CALL R9 3
+ 0x50240200, // 0052 LDBOOL R9 1 0
+ 0x80041200, // 0053 RET 1 R9
+ 0x7002000A, // 0054 JMP #0060
+ 0xB8222800, // 0055 GETNGBL R8 K20
+ 0x8C201115, // 0056 GETMET R8 R8 K21
+ 0x8C280B16, // 0057 GETMET R10 R5 K22
+ 0x58300019, // 0058 LDCONST R12 K25
+ 0x60340008, // 0059 GETGBL R13 G8
+ 0x5C380400, // 005A MOVE R14 R2
+ 0x7C340200, // 005B CALL R13 1
+ 0x5C380C00, // 005C MOVE R14 R6
+ 0x7C280800, // 005D CALL R10 4
+ 0x582C0018, // 005E LDCONST R11 K24
+ 0x7C200600, // 005F CALL R8 3
+ 0x80000000, // 0060 RET 0
+ })
+ ),
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 3]) { /* upvals */
+ be_local_const_upval(1, 7),
+ be_local_const_upval(1, 9),
+ be_local_const_upval(1, 13),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 0, /* has constants */
+ NULL, /* no const */
+ be_str_weak(_X3Clambda_X3E),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0x680C0000, // 0000 GETUPV R3 U0
+ 0x68100001, // 0001 GETUPV R4 U1
+ 0x5C140000, // 0002 MOVE R5 R0
+ 0x5C180200, // 0003 MOVE R6 R1
+ 0x681C0002, // 0004 GETUPV R7 U2
+ 0x5C200400, // 0005 MOVE R8 R2
+ 0x7C0C0A00, // 0006 CALL R3 5
+ 0x80040600, // 0007 RET 1 R3
+ })
+ ),
+ }),
+ 1, /* has constants */
+ ( &(const bvalue[36]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(WriteRequestMessage),
+ /* K3 */ be_nested_str_weak(from_TLV),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(log),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20WriteRequestMessage_X3D),
+ /* K7 */ be_const_int(3),
+ /* K8 */ be_nested_str_weak(suppress_response),
+ /* K9 */ be_nested_str_weak(device),
+ /* K10 */ be_nested_str_weak(get_active_endpoints),
+ /* K11 */ be_nested_str_weak(MTR_X3A_X20IM_X3Awrite_request_X20processing_X20start),
+ /* K12 */ be_nested_str_weak(Path),
+ /* K13 */ be_nested_str_weak(write_requests),
+ /* K14 */ be_nested_str_weak(WriteResponseMessage),
+ /* K15 */ be_nested_str_weak(write_responses),
+ /* K16 */ be_nested_str_weak(path),
+ /* K17 */ be_nested_str_weak(data),
+ /* K18 */ be_nested_str_weak(endpoint),
+ /* K19 */ be_nested_str_weak(cluster),
+ /* K20 */ be_nested_str_weak(attribute),
+ /* K21 */ be_nested_str_weak(status),
+ /* K22 */ be_nested_str_weak(UNSUPPORTED_ATTRIBUTE),
+ /* K23 */ be_nested_str_weak(INVALID_ACTION),
+ /* K24 */ be_nested_str_weak(get_attribute_name),
+ /* K25 */ be_nested_str_weak(MTR_X3A_X20Write_Attr_X20),
+ /* K26 */ be_nested_str_weak(_X20_X28),
+ /* K27 */ be_nested_str_weak(_X29),
+ /* K28 */ be_nested_str_weak(),
+ /* K29 */ be_const_int(2),
+ /* K30 */ be_nested_str_weak(process_attribute_expansion),
+ /* K31 */ be_nested_str_weak(stop_iteration),
+ /* K32 */ be_nested_str_weak(MTR_X3A_X20ReportWriteMessage_X3D),
+ /* K33 */ be_nested_str_weak(MTR_X3A_X20ReportWriteMessageTLV_X3D),
+ /* K34 */ be_nested_str_weak(to_TLV),
+ /* K35 */ be_nested_str_weak(send_write_response),
+ }),
+ be_str_weak(process_write_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[134]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x8C100902, // 0002 GETMET R4 R4 K2
+ 0x7C100200, // 0003 CALL R4 1
+ 0x8C100903, // 0004 GETMET R4 R4 K3
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C100400, // 0006 CALL R4 2
+ 0xB8160800, // 0007 GETNGBL R5 K4
+ 0x8C140B05, // 0008 GETMET R5 R5 K5
+ 0x601C0008, // 0009 GETGBL R7 G8
+ 0x5C200800, // 000A MOVE R8 R4
+ 0x7C1C0200, // 000B CALL R7 1
+ 0x001E0C07, // 000C ADD R7 K6 R7
+ 0x58200007, // 000D LDCONST R8 K7
+ 0x7C140600, // 000E CALL R5 3
+ 0x88140908, // 000F GETMBR R5 R4 K8
+ 0x88180109, // 0010 GETMBR R6 R0 K9
+ 0x8C180D0A, // 0011 GETMET R6 R6 K10
+ 0x7C180200, // 0012 CALL R6 1
+ 0x841C0000, // 0013 CLOSURE R7 P0
+ 0xB8220800, // 0014 GETNGBL R8 K4
+ 0x8C201105, // 0015 GETMET R8 R8 K5
+ 0x5828000B, // 0016 LDCONST R10 K11
+ 0x542E0003, // 0017 LDINT R11 4
+ 0x7C200600, // 0018 CALL R8 3
+ 0xB8220200, // 0019 GETNGBL R8 K1
+ 0x8C20110C, // 001A GETMET R8 R8 K12
+ 0x7C200200, // 001B CALL R8 1
+ 0x8824090D, // 001C GETMBR R9 R4 K13
+ 0x4C280000, // 001D LDNIL R10
+ 0x2024120A, // 001E NE R9 R9 R10
+ 0x78260062, // 001F JMPF R9 #0083
+ 0xB8260200, // 0020 GETNGBL R9 K1
+ 0x8C24130E, // 0021 GETMET R9 R9 K14
+ 0x7C240200, // 0022 CALL R9 1
+ 0x60280012, // 0023 GETGBL R10 G18
+ 0x7C280000, // 0024 CALL R10 0
+ 0x90261E0A, // 0025 SETMBR R9 K15 R10
+ 0x60280010, // 0026 GETGBL R10 G16
+ 0x882C090D, // 0027 GETMBR R11 R4 K13
+ 0x7C280200, // 0028 CALL R10 1
+ 0xA802003D, // 0029 EXBLK 0 #0068
+ 0x5C2C1400, // 002A MOVE R11 R10
+ 0x7C2C0000, // 002B CALL R11 0
+ 0x88301710, // 002C GETMBR R12 R11 K16
+ 0x88341711, // 002D GETMBR R13 R11 K17
+ 0x88381912, // 002E GETMBR R14 R12 K18
+ 0x9022240E, // 002F SETMBR R8 K18 R14
+ 0x88381913, // 0030 GETMBR R14 R12 K19
+ 0x9022260E, // 0031 SETMBR R8 K19 R14
+ 0x88381914, // 0032 GETMBR R14 R12 K20
+ 0x9022280E, // 0033 SETMBR R8 K20 R14
+ 0xB83A0200, // 0034 GETNGBL R14 K1
+ 0x88381D16, // 0035 GETMBR R14 R14 K22
+ 0x90222A0E, // 0036 SETMBR R8 K21 R14
+ 0x88381113, // 0037 GETMBR R14 R8 K19
+ 0x4C3C0000, // 0038 LDNIL R15
+ 0x1C381C0F, // 0039 EQ R14 R14 R15
+ 0x743A0003, // 003A JMPT R14 #003F
+ 0x88381114, // 003B GETMBR R14 R8 K20
+ 0x4C3C0000, // 003C LDNIL R15
+ 0x1C381C0F, // 003D EQ R14 R14 R15
+ 0x783A000A, // 003E JMPF R14 #004A
+ 0xB83A0200, // 003F GETNGBL R14 K1
+ 0x88381D17, // 0040 GETMBR R14 R14 K23
+ 0x90222A0E, // 0041 SETMBR R8 K21 R14
+ 0x5C380E00, // 0042 MOVE R14 R7
+ 0x5C3C1200, // 0043 MOVE R15 R9
+ 0x4C400000, // 0044 LDNIL R16
+ 0x5C441000, // 0045 MOVE R17 R8
+ 0x4C480000, // 0046 LDNIL R18
+ 0x504C0200, // 0047 LDBOOL R19 1 0
+ 0x7C380A00, // 0048 CALL R14 5
+ 0x7001FFDF, // 0049 JMP #002A
+ 0x88381112, // 004A GETMBR R14 R8 K18
+ 0x4C3C0000, // 004B LDNIL R15
+ 0x1C381C0F, // 004C EQ R14 R14 R15
+ 0x783A0012, // 004D JMPF R14 #0061
+ 0xB83A0200, // 004E GETNGBL R14 K1
+ 0x8C381D18, // 004F GETMET R14 R14 K24
+ 0x88401113, // 0050 GETMBR R16 R8 K19
+ 0x88441114, // 0051 GETMBR R17 R8 K20
+ 0x7C380600, // 0052 CALL R14 3
+ 0xB83E0800, // 0053 GETNGBL R15 K4
+ 0x8C3C1F05, // 0054 GETMET R15 R15 K5
+ 0x60440008, // 0055 GETGBL R17 G8
+ 0x5C481000, // 0056 MOVE R18 R8
+ 0x7C440200, // 0057 CALL R17 1
+ 0x00463211, // 0058 ADD R17 K25 R17
+ 0x783A0002, // 0059 JMPF R14 #005D
+ 0x004A340E, // 005A ADD R18 K26 R14
+ 0x0048251B, // 005B ADD R18 R18 K27
+ 0x70020000, // 005C JMP #005E
+ 0x5848001C, // 005D LDCONST R18 K28
+ 0x00442212, // 005E ADD R17 R17 R18
+ 0x5848001D, // 005F LDCONST R18 K29
+ 0x7C3C0600, // 0060 CALL R15 3
+ 0x88380109, // 0061 GETMBR R14 R0 K9
+ 0x8C381D1E, // 0062 GETMET R14 R14 K30
+ 0x5C401000, // 0063 MOVE R16 R8
+ 0x84440001, // 0064 CLOSURE R17 P1
+ 0x7C380600, // 0065 CALL R14 3
+ 0xA0280000, // 0066 CLOSE R10
+ 0x7001FFC1, // 0067 JMP #002A
+ 0x5828001F, // 0068 LDCONST R10 K31
+ 0xAC280200, // 0069 CATCH R10 1 0
+ 0xB0080000, // 006A RAISE 2 R0 R0
+ 0xB82A0800, // 006B GETNGBL R10 K4
+ 0x8C281505, // 006C GETMET R10 R10 K5
+ 0x60300008, // 006D GETGBL R12 G8
+ 0x5C341200, // 006E MOVE R13 R9
+ 0x7C300200, // 006F CALL R12 1
+ 0x0032400C, // 0070 ADD R12 K32 R12
+ 0x54360003, // 0071 LDINT R13 4
+ 0x7C280600, // 0072 CALL R10 3
+ 0xB82A0800, // 0073 GETNGBL R10 K4
+ 0x8C281505, // 0074 GETMET R10 R10 K5
+ 0x60300008, // 0075 GETGBL R12 G8
+ 0x8C341322, // 0076 GETMET R13 R9 K34
+ 0x7C340200, // 0077 CALL R13 1
+ 0x7C300200, // 0078 CALL R12 1
+ 0x0032420C, // 0079 ADD R12 K33 R12
+ 0x58340007, // 007A LDCONST R13 K7
+ 0x7C280600, // 007B CALL R10 3
+ 0x5C280A00, // 007C MOVE R10 R5
+ 0x742A0003, // 007D JMPT R10 #0082
+ 0x8C280123, // 007E GETMET R10 R0 K35
+ 0x5C300200, // 007F MOVE R12 R1
+ 0x5C341200, // 0080 MOVE R13 R9
+ 0x7C280600, // 0081 CALL R10 3
+ 0xA0240000, // 0082 CLOSE R9
+ 0x50240200, // 0083 LDBOOL R9 1 0
+ 0xA0000000, // 0084 CLOSE R0
+ 0x80041200, // 0085 RET 1 R9
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_write_response
+********************************************************************/
+be_local_closure(Matter_IM_send_write_response, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(send_queue),
+ /* K1 */ be_nested_str_weak(push),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(IM_WriteResponse),
+ }),
+ be_str_weak(send_write_response),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0xB8160400, // 0002 GETNGBL R5 K2
+ 0x8C140B03, // 0003 GETMET R5 R5 K3
+ 0x5C1C0200, // 0004 MOVE R7 R1
+ 0x5C200400, // 0005 MOVE R8 R2
+ 0x7C140600, // 0006 CALL R5 3
+ 0x7C0C0400, // 0007 CALL R3 2
+ 0x80000000, // 0008 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: remove_sendqueue_by_exchangeid
+********************************************************************/
+be_local_closure(Matter_IM_remove_sendqueue_by_exchangeid, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(send_queue),
+ /* K2 */ be_nested_str_weak(get_exchangeid),
+ /* K3 */ be_nested_str_weak(remove),
+ /* K4 */ be_const_int(1),
+ }),
+ be_str_weak(remove_sendqueue_by_exchangeid),
+ &be_const_str_solidified,
+ ( &(const binstruction[24]) { /* code */
+ 0x4C080000, // 0000 LDNIL R2
+ 0x1C080202, // 0001 EQ R2 R1 R2
+ 0x780A0000, // 0002 JMPF R2 #0004
+ 0x80000400, // 0003 RET 0
+ 0x58080000, // 0004 LDCONST R2 K0
+ 0x600C000C, // 0005 GETGBL R3 G12
+ 0x88100101, // 0006 GETMBR R4 R0 K1
+ 0x7C0C0200, // 0007 CALL R3 1
+ 0x140C0403, // 0008 LT R3 R2 R3
+ 0x780E000C, // 0009 JMPF R3 #0017
+ 0x880C0101, // 000A GETMBR R3 R0 K1
+ 0x940C0602, // 000B GETIDX R3 R3 R2
+ 0x8C0C0702, // 000C GETMET R3 R3 K2
+ 0x7C0C0200, // 000D CALL R3 1
+ 0x1C0C0601, // 000E EQ R3 R3 R1
+ 0x780E0004, // 000F JMPF R3 #0015
+ 0x880C0101, // 0010 GETMBR R3 R0 K1
+ 0x8C0C0703, // 0011 GETMET R3 R3 K3
+ 0x5C140400, // 0012 MOVE R5 R2
+ 0x7C0C0400, // 0013 CALL R3 2
+ 0x70020000, // 0014 JMP #0016
+ 0x00080504, // 0015 ADD R2 R2 K4
+ 0x7001FFED, // 0016 JMP #0005
+ 0x80000000, // 0017 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: every_second
+********************************************************************/
+be_local_closure(Matter_IM_every_second, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(expire_sendqueue),
+ }),
+ be_str_weak(every_second),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x8C040100, // 0000 GETMET R1 R0 K0
+ 0x7C040200, // 0001 CALL R1 1
+ 0x80000000, // 0002 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_ack_now
+********************************************************************/
+be_local_closure(Matter_IM_send_ack_now, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(session),
+ /* K1 */ be_nested_str_weak(_message_handler),
+ /* K2 */ be_nested_str_weak(send_encrypted_ack),
+ }),
+ be_str_weak(send_ack_now),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0x88080300, // 0000 GETMBR R2 R1 K0
+ 0x88080501, // 0001 GETMBR R2 R2 K1
+ 0x8C080502, // 0002 GETMET R2 R2 K2
+ 0x5C100200, // 0003 MOVE R4 R1
+ 0x50140000, // 0004 LDBOOL R5 0 0
+ 0x7C080600, // 0005 CALL R2 3
+ 0x80000000, // 0006 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: every_250ms
+********************************************************************/
+be_local_closure(Matter_IM_every_250ms, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(subs_shop),
+ /* K1 */ be_nested_str_weak(every_250ms),
+ }),
+ be_str_weak(every_250ms),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x80000000, // 0003 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_subscribe_response
+********************************************************************/
+be_local_closure(Matter_IM_send_subscribe_response, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(send_queue),
+ /* K1 */ be_nested_str_weak(push),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(IM_SubscribeResponse),
+ }),
+ be_str_weak(send_subscribe_response),
+ &be_const_str_solidified,
+ ( &(const binstruction[10]) { /* code */
+ 0x88100100, // 0000 GETMBR R4 R0 K0
+ 0x8C100901, // 0001 GETMET R4 R4 K1
+ 0xB81A0400, // 0002 GETNGBL R6 K2
+ 0x8C180D03, // 0003 GETMET R6 R6 K3
+ 0x5C200200, // 0004 MOVE R8 R1
+ 0x5C240400, // 0005 MOVE R9 R2
+ 0x5C280600, // 0006 MOVE R10 R3
+ 0x7C180800, // 0007 CALL R6 4
+ 0x7C100400, // 0008 CALL R4 2
+ 0x80000000, // 0009 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_invoke_response
+********************************************************************/
+be_local_closure(Matter_IM_send_invoke_response, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(send_queue),
+ /* K1 */ be_nested_str_weak(push),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(IM_InvokeResponse),
+ }),
+ be_str_weak(send_invoke_response),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0xB8160400, // 0002 GETNGBL R5 K2
+ 0x8C140B03, // 0003 GETMET R5 R5 K3
+ 0x5C1C0200, // 0004 MOVE R7 R1
+ 0x5C200400, // 0005 MOVE R8 R2
+ 0x7C140600, // 0006 CALL R5 3
+ 0x7C0C0400, // 0007 CALL R3 2
+ 0x80000000, // 0008 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_status
+********************************************************************/
+be_local_closure(Matter_IM_send_status, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(send_queue),
+ /* K1 */ be_nested_str_weak(push),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(IM_Status),
+ }),
+ be_str_weak(send_status),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0xB8160400, // 0002 GETNGBL R5 K2
+ 0x8C140B03, // 0003 GETMET R5 R5 K3
+ 0x5C1C0200, // 0004 MOVE R7 R1
+ 0x5C200400, // 0005 MOVE R8 R2
+ 0x7C140600, // 0006 CALL R5 3
+ 0x7C0C0400, // 0007 CALL R3 2
+ 0x80000000, // 0008 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: subscribe_response
+********************************************************************/
+be_local_closure(Matter_IM_subscribe_response, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 8]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(SubscribeResponseMessage),
+ /* K3 */ be_nested_str_weak(from_TLV),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(log),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20SubscribeResponsetMessage_X3D),
+ /* K7 */ be_const_int(2),
+ }),
+ be_str_weak(subscribe_response),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x8C100902, // 0002 GETMET R4 R4 K2
+ 0x7C100200, // 0003 CALL R4 1
+ 0x8C100903, // 0004 GETMET R4 R4 K3
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C100400, // 0006 CALL R4 2
+ 0xB8160800, // 0007 GETNGBL R5 K4
+ 0x8C140B05, // 0008 GETMET R5 R5 K5
+ 0x601C0008, // 0009 GETGBL R7 G8
+ 0x5C200800, // 000A MOVE R8 R4
+ 0x7C1C0200, // 000B CALL R7 1
+ 0x001E0C07, // 000C ADD R7 K6 R7
+ 0x58200007, // 000D LDCONST R8 K7
+ 0x7C140600, // 000E CALL R5 3
+ 0x50140000, // 000F LDBOOL R5 0 0
+ 0x80040A00, // 0010 RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: process_incoming
+********************************************************************/
+be_local_closure(Matter_IM_process_incoming, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[25]) { /* constants */
+ /* K0 */ be_nested_str_weak(tasmota),
+ /* K1 */ be_nested_str_weak(log),
+ /* K2 */ be_nested_str_weak(MTR_X3A_X20received_X20IM_X20message_X20),
+ /* K3 */ be_nested_str_weak(matter),
+ /* K4 */ be_nested_str_weak(inspect),
+ /* K5 */ be_const_int(3),
+ /* K6 */ be_nested_str_weak(TLV),
+ /* K7 */ be_nested_str_weak(parse),
+ /* K8 */ be_nested_str_weak(raw),
+ /* K9 */ be_nested_str_weak(app_payload_idx),
+ /* K10 */ be_nested_str_weak(findsubval),
+ /* K11 */ be_nested_str_weak(opcode),
+ /* K12 */ be_const_int(1),
+ /* K13 */ be_nested_str_weak(process_status_response),
+ /* K14 */ be_const_int(2),
+ /* K15 */ be_nested_str_weak(send_ack_now),
+ /* K16 */ be_nested_str_weak(process_read_request),
+ /* K17 */ be_nested_str_weak(subscribe_request),
+ /* K18 */ be_nested_str_weak(subscribe_response),
+ /* K19 */ be_nested_str_weak(report_data),
+ /* K20 */ be_nested_str_weak(process_write_request),
+ /* K21 */ be_nested_str_weak(process_write_response),
+ /* K22 */ be_nested_str_weak(process_invoke_request),
+ /* K23 */ be_nested_str_weak(process_invoke_response),
+ /* K24 */ be_nested_str_weak(process_timed_request),
+ }),
+ be_str_weak(process_incoming),
+ &be_const_str_solidified,
+ ( &(const binstruction[119]) { /* code */
+ 0xB80A0000, // 0000 GETNGBL R2 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0xB8120600, // 0002 GETNGBL R4 K3
+ 0x8C100904, // 0003 GETMET R4 R4 K4
+ 0x5C180200, // 0004 MOVE R6 R1
+ 0x7C100400, // 0005 CALL R4 2
+ 0x00120404, // 0006 ADD R4 K2 R4
+ 0x58140005, // 0007 LDCONST R5 K5
+ 0x7C080600, // 0008 CALL R2 3
+ 0xB80A0600, // 0009 GETNGBL R2 K3
+ 0x88080506, // 000A GETMBR R2 R2 K6
+ 0x8C080507, // 000B GETMET R2 R2 K7
+ 0x88100308, // 000C GETMBR R4 R1 K8
+ 0x88140309, // 000D GETMBR R5 R1 K9
+ 0x7C080600, // 000E CALL R2 3
+ 0x8C0C050A, // 000F GETMET R3 R2 K10
+ 0x541600FE, // 0010 LDINT R5 255
+ 0x7C0C0400, // 0011 CALL R3 2
+ 0x8810030B, // 0012 GETMBR R4 R1 K11
+ 0x1C14090C, // 0013 EQ R5 R4 K12
+ 0x78160005, // 0014 JMPF R5 #001B
+ 0x8C14010D, // 0015 GETMET R5 R0 K13
+ 0x5C1C0200, // 0016 MOVE R7 R1
+ 0x5C200400, // 0017 MOVE R8 R2
+ 0x7C140600, // 0018 CALL R5 3
+ 0x80040A00, // 0019 RET 1 R5
+ 0x70020059, // 001A JMP #0075
+ 0x1C14090E, // 001B EQ R5 R4 K14
+ 0x78160008, // 001C JMPF R5 #0026
+ 0x8C14010F, // 001D GETMET R5 R0 K15
+ 0x5C1C0200, // 001E MOVE R7 R1
+ 0x7C140400, // 001F CALL R5 2
+ 0x8C140110, // 0020 GETMET R5 R0 K16
+ 0x5C1C0200, // 0021 MOVE R7 R1
+ 0x5C200400, // 0022 MOVE R8 R2
+ 0x7C140600, // 0023 CALL R5 3
+ 0x80040A00, // 0024 RET 1 R5
+ 0x7002004E, // 0025 JMP #0075
+ 0x1C140905, // 0026 EQ R5 R4 K5
+ 0x78160008, // 0027 JMPF R5 #0031
+ 0x8C14010F, // 0028 GETMET R5 R0 K15
+ 0x5C1C0200, // 0029 MOVE R7 R1
+ 0x7C140400, // 002A CALL R5 2
+ 0x8C140111, // 002B GETMET R5 R0 K17
+ 0x5C1C0200, // 002C MOVE R7 R1
+ 0x5C200400, // 002D MOVE R8 R2
+ 0x7C140600, // 002E CALL R5 3
+ 0x80040A00, // 002F RET 1 R5
+ 0x70020043, // 0030 JMP #0075
+ 0x54160003, // 0031 LDINT R5 4
+ 0x1C140805, // 0032 EQ R5 R4 R5
+ 0x78160005, // 0033 JMPF R5 #003A
+ 0x8C140112, // 0034 GETMET R5 R0 K18
+ 0x5C1C0200, // 0035 MOVE R7 R1
+ 0x5C200400, // 0036 MOVE R8 R2
+ 0x7C140600, // 0037 CALL R5 3
+ 0x80040A00, // 0038 RET 1 R5
+ 0x7002003A, // 0039 JMP #0075
+ 0x54160004, // 003A LDINT R5 5
+ 0x1C140805, // 003B EQ R5 R4 R5
+ 0x78160005, // 003C JMPF R5 #0043
+ 0x8C140113, // 003D GETMET R5 R0 K19
+ 0x5C1C0200, // 003E MOVE R7 R1
+ 0x5C200400, // 003F MOVE R8 R2
+ 0x7C140600, // 0040 CALL R5 3
+ 0x80040A00, // 0041 RET 1 R5
+ 0x70020031, // 0042 JMP #0075
+ 0x54160005, // 0043 LDINT R5 6
+ 0x1C140805, // 0044 EQ R5 R4 R5
+ 0x78160008, // 0045 JMPF R5 #004F
+ 0x8C14010F, // 0046 GETMET R5 R0 K15
+ 0x5C1C0200, // 0047 MOVE R7 R1
+ 0x7C140400, // 0048 CALL R5 2
+ 0x8C140114, // 0049 GETMET R5 R0 K20
+ 0x5C1C0200, // 004A MOVE R7 R1
+ 0x5C200400, // 004B MOVE R8 R2
+ 0x7C140600, // 004C CALL R5 3
+ 0x80040A00, // 004D RET 1 R5
+ 0x70020025, // 004E JMP #0075
+ 0x54160006, // 004F LDINT R5 7
+ 0x1C140805, // 0050 EQ R5 R4 R5
+ 0x78160005, // 0051 JMPF R5 #0058
+ 0x8C140115, // 0052 GETMET R5 R0 K21
+ 0x5C1C0200, // 0053 MOVE R7 R1
+ 0x5C200400, // 0054 MOVE R8 R2
+ 0x7C140600, // 0055 CALL R5 3
+ 0x80040A00, // 0056 RET 1 R5
+ 0x7002001C, // 0057 JMP #0075
+ 0x54160007, // 0058 LDINT R5 8
+ 0x1C140805, // 0059 EQ R5 R4 R5
+ 0x78160008, // 005A JMPF R5 #0064
+ 0x8C14010F, // 005B GETMET R5 R0 K15
+ 0x5C1C0200, // 005C MOVE R7 R1
+ 0x7C140400, // 005D CALL R5 2
+ 0x8C140116, // 005E GETMET R5 R0 K22
+ 0x5C1C0200, // 005F MOVE R7 R1
+ 0x5C200400, // 0060 MOVE R8 R2
+ 0x7C140600, // 0061 CALL R5 3
+ 0x80040A00, // 0062 RET 1 R5
+ 0x70020010, // 0063 JMP #0075
+ 0x54160008, // 0064 LDINT R5 9
+ 0x1C140805, // 0065 EQ R5 R4 R5
+ 0x78160005, // 0066 JMPF R5 #006D
+ 0x8C140117, // 0067 GETMET R5 R0 K23
+ 0x5C1C0200, // 0068 MOVE R7 R1
+ 0x5C200400, // 0069 MOVE R8 R2
+ 0x7C140600, // 006A CALL R5 3
+ 0x80040A00, // 006B RET 1 R5
+ 0x70020007, // 006C JMP #0075
+ 0x54160009, // 006D LDINT R5 10
+ 0x1C140805, // 006E EQ R5 R4 R5
+ 0x78160004, // 006F JMPF R5 #0075
+ 0x8C140118, // 0070 GETMET R5 R0 K24
+ 0x5C1C0200, // 0071 MOVE R7 R1
+ 0x5C200400, // 0072 MOVE R8 R2
+ 0x7C140600, // 0073 CALL R5 3
+ 0x80040A00, // 0074 RET 1 R5
+ 0x50140000, // 0075 LDBOOL R5 0 0
+ 0x80040A00, // 0076 RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _inner_process_read_request
+********************************************************************/
+be_local_closure(Matter_IM__inner_process_read_request, /* name */
+ be_nested_proto(
+ 20, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 2]) {
+ be_nested_proto(
+ 19, /* nstack */
+ 4, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 2]) { /* upvals */
+ be_local_const_upval(1, 1),
+ be_local_const_upval(1, 3),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[33]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(get_attribute_name),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(attribute),
+ /* K5 */ be_nested_str_weak(_X20_X28),
+ /* K6 */ be_nested_str_weak(_X29),
+ /* K7 */ be_nested_str_weak(),
+ /* K8 */ be_nested_str_weak(read_attribute),
+ /* K9 */ be_nested_str_weak(AttributeReportIB),
+ /* K10 */ be_nested_str_weak(attribute_data),
+ /* K11 */ be_nested_str_weak(AttributeDataIB),
+ /* K12 */ be_nested_str_weak(data_version),
+ /* K13 */ be_const_int(1),
+ /* K14 */ be_nested_str_weak(path),
+ /* K15 */ be_nested_str_weak(AttributePathIB),
+ /* K16 */ be_nested_str_weak(endpoint),
+ /* K17 */ be_nested_str_weak(data),
+ /* K18 */ be_nested_str_weak(attribute_reports),
+ /* K19 */ be_nested_str_weak(push),
+ /* K20 */ be_nested_str_weak(tasmota),
+ /* K21 */ be_nested_str_weak(log),
+ /* K22 */ be_nested_str_weak(format),
+ /* K23 */ be_nested_str_weak(MTR_X3A_X20_X3ERead_Attr_X20_X28_X256i_X29_X20_X25s_X25s_X20_X2D_X20_X25s),
+ /* K24 */ be_nested_str_weak(local_session_id),
+ /* K25 */ be_const_int(2),
+ /* K26 */ be_nested_str_weak(status),
+ /* K27 */ be_nested_str_weak(attribute_status),
+ /* K28 */ be_nested_str_weak(AttributeStatusIB),
+ /* K29 */ be_nested_str_weak(StatusIB),
+ /* K30 */ be_nested_str_weak(MTR_X3A_X20_X3ERead_Attr_X20_X28_X256i_X29_X20_X25s_X25s_X20_X2D_X20STATUS_X3A_X200x_X2502X_X20_X25s),
+ /* K31 */ be_nested_str_weak(UNSUPPORTED_ATTRIBUTE),
+ /* K32 */ be_nested_str_weak(MTR_X3A_X20_X3ERead_Attr_X20_X28_X256i_X29_X20_X25s_X25s_X20_X2D_X20IGNORED),
+ }),
+ be_str_weak(read_single_attribute),
+ &be_const_str_solidified,
+ ( &(const binstruction[160]) { /* code */
+ 0xA4120000, // 0000 IMPORT R4 K0
+ 0xB8160200, // 0001 GETNGBL R5 K1
+ 0x8C140B02, // 0002 GETMET R5 R5 K2
+ 0x881C0503, // 0003 GETMBR R7 R2 K3
+ 0x88200504, // 0004 GETMBR R8 R2 K4
+ 0x7C140600, // 0005 CALL R5 3
+ 0x78160002, // 0006 JMPF R5 #000A
+ 0x001A0A05, // 0007 ADD R6 K5 R5
+ 0x00180D06, // 0008 ADD R6 R6 K6
+ 0x70020000, // 0009 JMP #000B
+ 0x58180007, // 000A LDCONST R6 K7
+ 0x5C140C00, // 000B MOVE R5 R6
+ 0x4C180000, // 000C LDNIL R6
+ 0x20180206, // 000D NE R6 R1 R6
+ 0x781A0004, // 000E JMPF R6 #0014
+ 0x8C180308, // 000F GETMET R6 R1 K8
+ 0x68200000, // 0010 GETUPV R8 U0
+ 0x5C240400, // 0011 MOVE R9 R2
+ 0x7C180600, // 0012 CALL R6 3
+ 0x70020000, // 0013 JMP #0015
+ 0x4C180000, // 0014 LDNIL R6
+ 0x4C1C0000, // 0015 LDNIL R7
+ 0x201C0C07, // 0016 NE R7 R6 R7
+ 0x781E0034, // 0017 JMPF R7 #004D
+ 0xB81E0200, // 0018 GETNGBL R7 K1
+ 0x8C1C0F09, // 0019 GETMET R7 R7 K9
+ 0x7C1C0200, // 001A CALL R7 1
+ 0xB8220200, // 001B GETNGBL R8 K1
+ 0x8C20110B, // 001C GETMET R8 R8 K11
+ 0x7C200200, // 001D CALL R8 1
+ 0x901E1408, // 001E SETMBR R7 K10 R8
+ 0x88200F0A, // 001F GETMBR R8 R7 K10
+ 0x9022190D, // 0020 SETMBR R8 K12 K13
+ 0x88200F0A, // 0021 GETMBR R8 R7 K10
+ 0xB8260200, // 0022 GETNGBL R9 K1
+ 0x8C24130F, // 0023 GETMET R9 R9 K15
+ 0x7C240200, // 0024 CALL R9 1
+ 0x90221C09, // 0025 SETMBR R8 K14 R9
+ 0x88200F0A, // 0026 GETMBR R8 R7 K10
+ 0x8820110E, // 0027 GETMBR R8 R8 K14
+ 0x88240510, // 0028 GETMBR R9 R2 K16
+ 0x90222009, // 0029 SETMBR R8 K16 R9
+ 0x88200F0A, // 002A GETMBR R8 R7 K10
+ 0x8820110E, // 002B GETMBR R8 R8 K14
+ 0x88240503, // 002C GETMBR R9 R2 K3
+ 0x90220609, // 002D SETMBR R8 K3 R9
+ 0x88200F0A, // 002E GETMBR R8 R7 K10
+ 0x8820110E, // 002F GETMBR R8 R8 K14
+ 0x88240504, // 0030 GETMBR R9 R2 K4
+ 0x90220809, // 0031 SETMBR R8 K4 R9
+ 0x88200F0A, // 0032 GETMBR R8 R7 K10
+ 0x90222206, // 0033 SETMBR R8 K17 R6
+ 0x88200112, // 0034 GETMBR R8 R0 K18
+ 0x8C201113, // 0035 GETMET R8 R8 K19
+ 0x5C280E00, // 0036 MOVE R10 R7
+ 0x7C200400, // 0037 CALL R8 2
+ 0x68200001, // 0038 GETUPV R8 U1
+ 0x7422000F, // 0039 JMPT R8 #004A
+ 0xB8222800, // 003A GETNGBL R8 K20
+ 0x8C201115, // 003B GETMET R8 R8 K21
+ 0x8C280916, // 003C GETMET R10 R4 K22
+ 0x58300017, // 003D LDCONST R12 K23
+ 0x68340000, // 003E GETUPV R13 U0
+ 0x88341B18, // 003F GETMBR R13 R13 K24
+ 0x60380008, // 0040 GETGBL R14 G8
+ 0x5C3C0400, // 0041 MOVE R15 R2
+ 0x7C380200, // 0042 CALL R14 1
+ 0x5C3C0A00, // 0043 MOVE R15 R5
+ 0x60400008, // 0044 GETGBL R16 G8
+ 0x5C440C00, // 0045 MOVE R17 R6
+ 0x7C400200, // 0046 CALL R16 1
+ 0x7C280C00, // 0047 CALL R10 6
+ 0x582C0019, // 0048 LDCONST R11 K25
+ 0x7C200600, // 0049 CALL R8 3
+ 0x50200200, // 004A LDBOOL R8 1 0
+ 0x80041000, // 004B RET 1 R8
+ 0x70020051, // 004C JMP #009F
+ 0x881C051A, // 004D GETMBR R7 R2 K26
+ 0x4C200000, // 004E LDNIL R8
+ 0x201C0E08, // 004F NE R7 R7 R8
+ 0x781E003E, // 0050 JMPF R7 #0090
+ 0x780E003C, // 0051 JMPF R3 #008F
+ 0xB81E0200, // 0052 GETNGBL R7 K1
+ 0x8C1C0F09, // 0053 GETMET R7 R7 K9
+ 0x7C1C0200, // 0054 CALL R7 1
+ 0xB8220200, // 0055 GETNGBL R8 K1
+ 0x8C20111C, // 0056 GETMET R8 R8 K28
+ 0x7C200200, // 0057 CALL R8 1
+ 0x901E3608, // 0058 SETMBR R7 K27 R8
+ 0x88200F1B, // 0059 GETMBR R8 R7 K27
+ 0xB8260200, // 005A GETNGBL R9 K1
+ 0x8C24130F, // 005B GETMET R9 R9 K15
+ 0x7C240200, // 005C CALL R9 1
+ 0x90221C09, // 005D SETMBR R8 K14 R9
+ 0x88200F1B, // 005E GETMBR R8 R7 K27
+ 0xB8260200, // 005F GETNGBL R9 K1
+ 0x8C24131D, // 0060 GETMET R9 R9 K29
+ 0x7C240200, // 0061 CALL R9 1
+ 0x90223409, // 0062 SETMBR R8 K26 R9
+ 0x88200F1B, // 0063 GETMBR R8 R7 K27
+ 0x8820110E, // 0064 GETMBR R8 R8 K14
+ 0x88240510, // 0065 GETMBR R9 R2 K16
+ 0x90222009, // 0066 SETMBR R8 K16 R9
+ 0x88200F1B, // 0067 GETMBR R8 R7 K27
+ 0x8820110E, // 0068 GETMBR R8 R8 K14
+ 0x88240503, // 0069 GETMBR R9 R2 K3
+ 0x90220609, // 006A SETMBR R8 K3 R9
+ 0x88200F1B, // 006B GETMBR R8 R7 K27
+ 0x8820110E, // 006C GETMBR R8 R8 K14
+ 0x88240504, // 006D GETMBR R9 R2 K4
+ 0x90220809, // 006E SETMBR R8 K4 R9
+ 0x88200F1B, // 006F GETMBR R8 R7 K27
+ 0x8820111A, // 0070 GETMBR R8 R8 K26
+ 0x8824051A, // 0071 GETMBR R9 R2 K26
+ 0x90223409, // 0072 SETMBR R8 K26 R9
+ 0x88200112, // 0073 GETMBR R8 R0 K18
+ 0x8C201113, // 0074 GETMET R8 R8 K19
+ 0x5C280E00, // 0075 MOVE R10 R7
+ 0x7C200400, // 0076 CALL R8 2
+ 0xB8222800, // 0077 GETNGBL R8 K20
+ 0x8C201115, // 0078 GETMET R8 R8 K21
+ 0x8C280916, // 0079 GETMET R10 R4 K22
+ 0x5830001E, // 007A LDCONST R12 K30
+ 0x68340000, // 007B GETUPV R13 U0
+ 0x88341B18, // 007C GETMBR R13 R13 K24
+ 0x60380008, // 007D GETGBL R14 G8
+ 0x5C3C0400, // 007E MOVE R15 R2
+ 0x7C380200, // 007F CALL R14 1
+ 0x5C3C0A00, // 0080 MOVE R15 R5
+ 0x8840051A, // 0081 GETMBR R16 R2 K26
+ 0x8844051A, // 0082 GETMBR R17 R2 K26
+ 0xB84A0200, // 0083 GETNGBL R18 K1
+ 0x8848251F, // 0084 GETMBR R18 R18 K31
+ 0x1C442212, // 0085 EQ R17 R17 R18
+ 0x78460001, // 0086 JMPF R17 #0089
+ 0x5844001F, // 0087 LDCONST R17 K31
+ 0x70020000, // 0088 JMP #008A
+ 0x58440007, // 0089 LDCONST R17 K7
+ 0x7C280E00, // 008A CALL R10 7
+ 0x582C0019, // 008B LDCONST R11 K25
+ 0x7C200600, // 008C CALL R8 3
+ 0x50200200, // 008D LDBOOL R8 1 0
+ 0x80041000, // 008E RET 1 R8
+ 0x7002000E, // 008F JMP #009F
+ 0xB81E2800, // 0090 GETNGBL R7 K20
+ 0x8C1C0F15, // 0091 GETMET R7 R7 K21
+ 0x8C240916, // 0092 GETMET R9 R4 K22
+ 0x582C0020, // 0093 LDCONST R11 K32
+ 0x68300000, // 0094 GETUPV R12 U0
+ 0x88301918, // 0095 GETMBR R12 R12 K24
+ 0x60340008, // 0096 GETGBL R13 G8
+ 0x5C380400, // 0097 MOVE R14 R2
+ 0x7C340200, // 0098 CALL R13 1
+ 0x5C380A00, // 0099 MOVE R14 R5
+ 0x7C240A00, // 009A CALL R9 5
+ 0x58280019, // 009B LDCONST R10 K25
+ 0x7C1C0600, // 009C CALL R7 3
+ 0x501C0000, // 009D LDBOOL R7 0 0
+ 0x80040E00, // 009E RET 1 R7
+ 0x80000000, // 009F RET 0
+ })
+ ),
+ be_nested_proto(
+ 8, /* nstack */
+ 3, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 2]) { /* upvals */
+ be_local_const_upval(1, 5),
+ be_local_const_upval(1, 8),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 0, /* has constants */
+ NULL, /* no const */
+ be_str_weak(_X3Clambda_X3E),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0x680C0000, // 0000 GETUPV R3 U0
+ 0x68100001, // 0001 GETUPV R4 U1
+ 0x5C140000, // 0002 MOVE R5 R0
+ 0x5C180200, // 0003 MOVE R6 R1
+ 0x5C1C0400, // 0004 MOVE R7 R2
+ 0x7C0C0800, // 0005 CALL R3 4
+ 0x80040600, // 0006 RET 1 R3
+ })
+ ),
+ }),
+ 1, /* has constants */
+ ( &(const bvalue[25]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(device),
+ /* K2 */ be_nested_str_weak(get_active_endpoints),
+ /* K3 */ be_nested_str_weak(matter),
+ /* K4 */ be_nested_str_weak(Path),
+ /* K5 */ be_nested_str_weak(ReportDataMessage),
+ /* K6 */ be_nested_str_weak(attribute_reports),
+ /* K7 */ be_nested_str_weak(attributes_requests),
+ /* K8 */ be_nested_str_weak(endpoint),
+ /* K9 */ be_nested_str_weak(cluster),
+ /* K10 */ be_nested_str_weak(attribute),
+ /* K11 */ be_nested_str_weak(status),
+ /* K12 */ be_nested_str_weak(UNSUPPORTED_ATTRIBUTE),
+ /* K13 */ be_nested_str_weak(get_attribute_name),
+ /* K14 */ be_nested_str_weak(tasmota),
+ /* K15 */ be_nested_str_weak(log),
+ /* K16 */ be_nested_str_weak(format),
+ /* K17 */ be_nested_str_weak(MTR_X3A_X20_X3ERead_Attr_X20_X28_X256i_X29_X20_X25s),
+ /* K18 */ be_nested_str_weak(local_session_id),
+ /* K19 */ be_nested_str_weak(_X20_X28),
+ /* K20 */ be_nested_str_weak(_X29),
+ /* K21 */ be_nested_str_weak(),
+ /* K22 */ be_const_int(2),
+ /* K23 */ be_nested_str_weak(process_attribute_expansion),
+ /* K24 */ be_nested_str_weak(stop_iteration),
+ }),
+ be_str_weak(_inner_process_read_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[94]) { /* code */
+ 0xA4120000, // 0000 IMPORT R4 K0
+ 0x84140000, // 0001 CLOSURE R5 P0
+ 0x88180101, // 0002 GETMBR R6 R0 K1
+ 0x8C180D02, // 0003 GETMET R6 R6 K2
+ 0x7C180200, // 0004 CALL R6 1
+ 0xB81E0600, // 0005 GETNGBL R7 K3
+ 0x8C1C0F04, // 0006 GETMET R7 R7 K4
+ 0x7C1C0200, // 0007 CALL R7 1
+ 0xB8220600, // 0008 GETNGBL R8 K3
+ 0x8C201105, // 0009 GETMET R8 R8 K5
+ 0x7C200200, // 000A CALL R8 1
+ 0x60240012, // 000B GETGBL R9 G18
+ 0x7C240000, // 000C CALL R9 0
+ 0x90220C09, // 000D SETMBR R8 K6 R9
+ 0x60240010, // 000E GETGBL R9 G16
+ 0x88280507, // 000F GETMBR R10 R2 K7
+ 0x7C240200, // 0010 CALL R9 1
+ 0xA8020046, // 0011 EXBLK 0 #0059
+ 0x5C281200, // 0012 MOVE R10 R9
+ 0x7C280000, // 0013 CALL R10 0
+ 0x882C1508, // 0014 GETMBR R11 R10 K8
+ 0x901E100B, // 0015 SETMBR R7 K8 R11
+ 0x882C1509, // 0016 GETMBR R11 R10 K9
+ 0x901E120B, // 0017 SETMBR R7 K9 R11
+ 0x882C150A, // 0018 GETMBR R11 R10 K10
+ 0x901E140B, // 0019 SETMBR R7 K10 R11
+ 0xB82E0600, // 001A GETNGBL R11 K3
+ 0x882C170C, // 001B GETMBR R11 R11 K12
+ 0x901E160B, // 001C SETMBR R7 K11 R11
+ 0x882C0F08, // 001D GETMBR R11 R7 K8
+ 0x4C300000, // 001E LDNIL R12
+ 0x1C2C160C, // 001F EQ R11 R11 R12
+ 0x742E0007, // 0020 JMPT R11 #0029
+ 0x882C0F09, // 0021 GETMBR R11 R7 K9
+ 0x4C300000, // 0022 LDNIL R12
+ 0x1C2C160C, // 0023 EQ R11 R11 R12
+ 0x742E0003, // 0024 JMPT R11 #0029
+ 0x882C0F0A, // 0025 GETMBR R11 R7 K10
+ 0x4C300000, // 0026 LDNIL R12
+ 0x1C2C160C, // 0027 EQ R11 R11 R12
+ 0x782E0029, // 0028 JMPF R11 #0053
+ 0x882C0F09, // 0029 GETMBR R11 R7 K9
+ 0x4C300000, // 002A LDNIL R12
+ 0x202C160C, // 002B NE R11 R11 R12
+ 0x782E001A, // 002C JMPF R11 #0048
+ 0x882C0F0A, // 002D GETMBR R11 R7 K10
+ 0x4C300000, // 002E LDNIL R12
+ 0x202C160C, // 002F NE R11 R11 R12
+ 0x782E0016, // 0030 JMPF R11 #0048
+ 0xB82E0600, // 0031 GETNGBL R11 K3
+ 0x8C2C170D, // 0032 GETMET R11 R11 K13
+ 0x88340F09, // 0033 GETMBR R13 R7 K9
+ 0x88380F0A, // 0034 GETMBR R14 R7 K10
+ 0x7C2C0600, // 0035 CALL R11 3
+ 0xB8321C00, // 0036 GETNGBL R12 K14
+ 0x8C30190F, // 0037 GETMET R12 R12 K15
+ 0x8C380910, // 0038 GETMET R14 R4 K16
+ 0x58400011, // 0039 LDCONST R16 K17
+ 0x88440312, // 003A GETMBR R17 R1 K18
+ 0x60480008, // 003B GETGBL R18 G8
+ 0x5C4C0E00, // 003C MOVE R19 R7
+ 0x7C480200, // 003D CALL R18 1
+ 0x782E0002, // 003E JMPF R11 #0042
+ 0x004E260B, // 003F ADD R19 K19 R11
+ 0x004C2714, // 0040 ADD R19 R19 K20
+ 0x70020000, // 0041 JMP #0043
+ 0x584C0015, // 0042 LDCONST R19 K21
+ 0x00482413, // 0043 ADD R18 R18 R19
+ 0x7C380800, // 0044 CALL R14 4
+ 0x583C0016, // 0045 LDCONST R15 K22
+ 0x7C300600, // 0046 CALL R12 3
+ 0x7002000A, // 0047 JMP #0053
+ 0xB82E1C00, // 0048 GETNGBL R11 K14
+ 0x8C2C170F, // 0049 GETMET R11 R11 K15
+ 0x8C340910, // 004A GETMET R13 R4 K16
+ 0x583C0011, // 004B LDCONST R15 K17
+ 0x88400312, // 004C GETMBR R16 R1 K18
+ 0x60440008, // 004D GETGBL R17 G8
+ 0x5C480E00, // 004E MOVE R18 R7
+ 0x7C440200, // 004F CALL R17 1
+ 0x7C340800, // 0050 CALL R13 4
+ 0x58380016, // 0051 LDCONST R14 K22
+ 0x7C2C0600, // 0052 CALL R11 3
+ 0x882C0101, // 0053 GETMBR R11 R0 K1
+ 0x8C2C1717, // 0054 GETMET R11 R11 K23
+ 0x5C340E00, // 0055 MOVE R13 R7
+ 0x84380001, // 0056 CLOSURE R14 P1
+ 0x7C2C0600, // 0057 CALL R11 3
+ 0x7001FFB8, // 0058 JMP #0012
+ 0x58240018, // 0059 LDCONST R9 K24
+ 0xAC240200, // 005A CATCH R9 1 0
+ 0xB0080000, // 005B RAISE 2 R0 R0
+ 0xA0000000, // 005C CLOSE R0
+ 0x80041000, // 005D RET 1 R8
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: find_sendqueue_by_exchangeid
+********************************************************************/
+be_local_closure(Matter_IM_find_sendqueue_by_exchangeid, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(send_queue),
+ /* K2 */ be_nested_str_weak(get_exchangeid),
+ /* K3 */ be_const_int(1),
+ }),
+ be_str_weak(find_sendqueue_by_exchangeid),
+ &be_const_str_solidified,
+ ( &(const binstruction[22]) { /* code */
+ 0x4C080000, // 0000 LDNIL R2
+ 0x1C080202, // 0001 EQ R2 R1 R2
+ 0x780A0001, // 0002 JMPF R2 #0005
+ 0x4C080000, // 0003 LDNIL R2
+ 0x80040400, // 0004 RET 1 R2
+ 0x58080000, // 0005 LDCONST R2 K0
+ 0x600C000C, // 0006 GETGBL R3 G12
+ 0x88100101, // 0007 GETMBR R4 R0 K1
+ 0x7C0C0200, // 0008 CALL R3 1
+ 0x140C0403, // 0009 LT R3 R2 R3
+ 0x780E0008, // 000A JMPF R3 #0014
+ 0x880C0101, // 000B GETMBR R3 R0 K1
+ 0x940C0602, // 000C GETIDX R3 R3 R2
+ 0x8C100702, // 000D GETMET R4 R3 K2
+ 0x7C100200, // 000E CALL R4 1
+ 0x1C100801, // 000F EQ R4 R4 R1
+ 0x78120000, // 0010 JMPF R4 #0012
+ 0x80040600, // 0011 RET 1 R3
+ 0x00080503, // 0012 ADD R2 R2 K3
+ 0x7001FFF1, // 0013 JMP #0006
+ 0x4C0C0000, // 0014 LDNIL R3
+ 0x80040600, // 0015 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: process_incoming_ack
+********************************************************************/
+be_local_closure(Matter_IM_process_incoming_ack, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[11]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(find_sendqueue_by_exchangeid),
+ /* K2 */ be_nested_str_weak(exchange_id),
+ /* K3 */ be_nested_str_weak(tasmota),
+ /* K4 */ be_nested_str_weak(log),
+ /* K5 */ be_nested_str_weak(format),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20process_incoming_ack_X20exch_X3D_X25i_X20message_X3D_X25i),
+ /* K7 */ be_const_int(1),
+ /* K8 */ be_const_int(0),
+ /* K9 */ be_const_int(3),
+ /* K10 */ be_nested_str_weak(ack_received),
+ }),
+ be_str_weak(process_incoming_ack),
+ &be_const_str_solidified,
+ ( &(const binstruction[25]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0x8C0C0101, // 0001 GETMET R3 R0 K1
+ 0x88140302, // 0002 GETMBR R5 R1 K2
+ 0x7C0C0400, // 0003 CALL R3 2
+ 0xB8120600, // 0004 GETNGBL R4 K3
+ 0x8C100904, // 0005 GETMET R4 R4 K4
+ 0x8C180505, // 0006 GETMET R6 R2 K5
+ 0x58200006, // 0007 LDCONST R8 K6
+ 0x88240302, // 0008 GETMBR R9 R1 K2
+ 0x4C280000, // 0009 LDNIL R10
+ 0x2028060A, // 000A NE R10 R3 R10
+ 0x782A0001, // 000B JMPF R10 #000E
+ 0x58280007, // 000C LDCONST R10 K7
+ 0x70020000, // 000D JMP #000F
+ 0x58280008, // 000E LDCONST R10 K8
+ 0x7C180800, // 000F CALL R6 4
+ 0x581C0009, // 0010 LDCONST R7 K9
+ 0x7C100600, // 0011 CALL R4 3
+ 0x780E0003, // 0012 JMPF R3 #0017
+ 0x8C10070A, // 0013 GETMET R4 R3 K10
+ 0x5C180200, // 0014 MOVE R6 R1
+ 0x7C100400, // 0015 CALL R4 2
+ 0x80040800, // 0016 RET 1 R4
+ 0x50100000, // 0017 LDBOOL R4 0 0
+ 0x80040800, // 0018 RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: process_read_request
+********************************************************************/
+be_local_closure(Matter_IM_process_read_request, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_nested_str_weak(matter),
+ /* K1 */ be_nested_str_weak(ReadRequestMessage),
+ /* K2 */ be_nested_str_weak(from_TLV),
+ /* K3 */ be_nested_str_weak(attributes_requests),
+ /* K4 */ be_nested_str_weak(_inner_process_read_request),
+ /* K5 */ be_nested_str_weak(session),
+ /* K6 */ be_nested_str_weak(send_report_data),
+ }),
+ be_str_weak(process_read_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[20]) { /* code */
+ 0xB80E0000, // 0000 GETNGBL R3 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C0702, // 0003 GETMET R3 R3 K2
+ 0x5C140400, // 0004 MOVE R5 R2
+ 0x7C0C0400, // 0005 CALL R3 2
+ 0x88100703, // 0006 GETMBR R4 R3 K3
+ 0x4C140000, // 0007 LDNIL R5
+ 0x20100805, // 0008 NE R4 R4 R5
+ 0x78120007, // 0009 JMPF R4 #0012
+ 0x8C100104, // 000A GETMET R4 R0 K4
+ 0x88180305, // 000B GETMBR R6 R1 K5
+ 0x5C1C0600, // 000C MOVE R7 R3
+ 0x7C100600, // 000D CALL R4 3
+ 0x8C140106, // 000E GETMET R5 R0 K6
+ 0x5C1C0200, // 000F MOVE R7 R1
+ 0x5C200800, // 0010 MOVE R8 R4
+ 0x7C140600, // 0011 CALL R5 3
+ 0x50100200, // 0012 LDBOOL R4 1 0
+ 0x80040800, // 0013 RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_report_data
+********************************************************************/
+be_local_closure(Matter_IM_send_report_data, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(send_queue),
+ /* K1 */ be_nested_str_weak(push),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(IM_ReportData),
+ }),
+ be_str_weak(send_report_data),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0xB8160400, // 0002 GETNGBL R5 K2
+ 0x8C140B03, // 0003 GETMET R5 R5 K3
+ 0x5C1C0200, // 0004 MOVE R7 R1
+ 0x5C200400, // 0005 MOVE R8 R2
+ 0x7C140600, // 0006 CALL R5 3
+ 0x7C0C0400, // 0007 CALL R3 2
+ 0x80000000, // 0008 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: process_status_response
+********************************************************************/
+be_local_closure(Matter_IM_process_status_response, /* name */
be_nested_proto(
13, /* nstack */
3, /* argc */
@@ -150,7 +2045,334 @@ be_local_closure(Matter_IM_process_timed_request, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[26]) { /* constants */
+ ( &(const bvalue[19]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(findsubval),
+ /* K2 */ be_const_int(0),
+ /* K3 */ be_nested_str_weak(find_sendqueue_by_exchangeid),
+ /* K4 */ be_nested_str_weak(exchange_id),
+ /* K5 */ be_nested_str_weak(matter),
+ /* K6 */ be_nested_str_weak(SUCCESS),
+ /* K7 */ be_nested_str_weak(status_ok_received),
+ /* K8 */ be_nested_str_weak(tasmota),
+ /* K9 */ be_nested_str_weak(log),
+ /* K10 */ be_nested_str_weak(format),
+ /* K11 */ be_nested_str_weak(MTR_X3A_X20_X3EOK_X20_X20_X20_X20_X20_X20_X20_X20_X28_X256i_X29_X20exch_X3D_X25i_X20not_X20found),
+ /* K12 */ be_nested_str_weak(session),
+ /* K13 */ be_nested_str_weak(local_session_id),
+ /* K14 */ be_const_int(3),
+ /* K15 */ be_nested_str_weak(MTR_X3A_X20_X3EStatus_X20_X20_X20_X20ERROR_X20_X3D_X200x_X2502X),
+ /* K16 */ be_const_int(2),
+ /* K17 */ be_nested_str_weak(status_error_received),
+ /* K18 */ be_nested_str_weak(remove_sendqueue_by_exchangeid),
+ }),
+ be_str_weak(process_status_response),
+ &be_const_str_solidified,
+ ( &(const binstruction[46]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0x8C100501, // 0001 GETMET R4 R2 K1
+ 0x58180002, // 0002 LDCONST R6 K2
+ 0x541E00FE, // 0003 LDINT R7 255
+ 0x7C100600, // 0004 CALL R4 3
+ 0x8C140103, // 0005 GETMET R5 R0 K3
+ 0x881C0304, // 0006 GETMBR R7 R1 K4
+ 0x7C140400, // 0007 CALL R5 2
+ 0xB81A0A00, // 0008 GETNGBL R6 K5
+ 0x88180D06, // 0009 GETMBR R6 R6 K6
+ 0x1C180806, // 000A EQ R6 R4 R6
+ 0x781A0010, // 000B JMPF R6 #001D
+ 0x78160004, // 000C JMPF R5 #0012
+ 0x8C180B07, // 000D GETMET R6 R5 K7
+ 0x5C200200, // 000E MOVE R8 R1
+ 0x7C180400, // 000F CALL R6 2
+ 0x80040C00, // 0010 RET 1 R6
+ 0x70020009, // 0011 JMP #001C
+ 0xB81A1000, // 0012 GETNGBL R6 K8
+ 0x8C180D09, // 0013 GETMET R6 R6 K9
+ 0x8C20070A, // 0014 GETMET R8 R3 K10
+ 0x5828000B, // 0015 LDCONST R10 K11
+ 0x882C030C, // 0016 GETMBR R11 R1 K12
+ 0x882C170D, // 0017 GETMBR R11 R11 K13
+ 0x88300304, // 0018 GETMBR R12 R1 K4
+ 0x7C200800, // 0019 CALL R8 4
+ 0x5824000E, // 001A LDCONST R9 K14
+ 0x7C180600, // 001B CALL R6 3
+ 0x7002000E, // 001C JMP #002C
+ 0xB81A1000, // 001D GETNGBL R6 K8
+ 0x8C180D09, // 001E GETMET R6 R6 K9
+ 0x8C20070A, // 001F GETMET R8 R3 K10
+ 0x5828000F, // 0020 LDCONST R10 K15
+ 0x5C2C0800, // 0021 MOVE R11 R4
+ 0x7C200600, // 0022 CALL R8 3
+ 0x58240010, // 0023 LDCONST R9 K16
+ 0x7C180600, // 0024 CALL R6 3
+ 0x78160005, // 0025 JMPF R5 #002C
+ 0x8C180B11, // 0026 GETMET R6 R5 K17
+ 0x5C200200, // 0027 MOVE R8 R1
+ 0x7C180400, // 0028 CALL R6 2
+ 0x8C180112, // 0029 GETMET R6 R0 K18
+ 0x88200304, // 002A GETMBR R8 R1 K4
+ 0x7C180400, // 002B CALL R6 2
+ 0x50180000, // 002C LDBOOL R6 0 0
+ 0x80040C00, // 002D RET 1 R6
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: process_write_response
+********************************************************************/
+be_local_closure(Matter_IM_process_write_response, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 8]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(WriteResponseMessage),
+ /* K3 */ be_nested_str_weak(from_TLV),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(log),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20WriteResponseMessage_X3D),
+ /* K7 */ be_const_int(2),
+ }),
+ be_str_weak(process_write_response),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x8C100902, // 0002 GETMET R4 R4 K2
+ 0x7C100200, // 0003 CALL R4 1
+ 0x8C100903, // 0004 GETMET R4 R4 K3
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C100400, // 0006 CALL R4 2
+ 0xB8160800, // 0007 GETNGBL R5 K4
+ 0x8C140B05, // 0008 GETMET R5 R5 K5
+ 0x601C0008, // 0009 GETGBL R7 G8
+ 0x5C200800, // 000A MOVE R8 R4
+ 0x7C1C0200, // 000B CALL R7 1
+ 0x001E0C07, // 000C ADD R7 K6 R7
+ 0x58200007, // 000D LDCONST R8 K7
+ 0x7C140600, // 000E CALL R5 3
+ 0x50140000, // 000F LDBOOL R5 0 0
+ 0x80040A00, // 0010 RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_subscribe_update
+********************************************************************/
+be_local_closure(Matter_IM_send_subscribe_update, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[27]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(session),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(ReadRequestMessage),
+ /* K4 */ be_nested_str_weak(fabric_filtered),
+ /* K5 */ be_nested_str_weak(attributes_requests),
+ /* K6 */ be_nested_str_weak(updates),
+ /* K7 */ be_nested_str_weak(AttributePathIB),
+ /* K8 */ be_nested_str_weak(endpoint),
+ /* K9 */ be_nested_str_weak(cluster),
+ /* K10 */ be_nested_str_weak(attribute),
+ /* K11 */ be_nested_str_weak(push),
+ /* K12 */ be_nested_str_weak(stop_iteration),
+ /* K13 */ be_nested_str_weak(tasmota),
+ /* K14 */ be_nested_str_weak(log),
+ /* K15 */ be_nested_str_weak(format),
+ /* K16 */ be_nested_str_weak(MTR_X3A_X20_X3CSub_Data_X20_X20_X28_X256i_X29_X20sub_X3D_X25i),
+ /* K17 */ be_nested_str_weak(local_session_id),
+ /* K18 */ be_nested_str_weak(subscription_id),
+ /* K19 */ be_const_int(2),
+ /* K20 */ be_nested_str_weak(is_keep_alive),
+ /* K21 */ be_nested_str_weak(_inner_process_read_request),
+ /* K22 */ be_nested_str_weak(suppress_response),
+ /* K23 */ be_nested_str_weak(IM_ReportDataSubscribed),
+ /* K24 */ be_nested_str_weak(_message_handler),
+ /* K25 */ be_nested_str_weak(send_queue),
+ /* K26 */ be_nested_str_weak(send_enqueued),
+ }),
+ be_str_weak(send_subscribe_update),
+ &be_const_str_solidified,
+ ( &(const binstruction[67]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0x880C0301, // 0001 GETMBR R3 R1 K1
+ 0xB8120400, // 0002 GETNGBL R4 K2
+ 0x8C100903, // 0003 GETMET R4 R4 K3
+ 0x7C100200, // 0004 CALL R4 1
+ 0x50140000, // 0005 LDBOOL R5 0 0
+ 0x90120805, // 0006 SETMBR R4 K4 R5
+ 0x60140012, // 0007 GETGBL R5 G18
+ 0x7C140000, // 0008 CALL R5 0
+ 0x90120A05, // 0009 SETMBR R4 K5 R5
+ 0x60140010, // 000A GETGBL R5 G16
+ 0x88180306, // 000B GETMBR R6 R1 K6
+ 0x7C140200, // 000C CALL R5 1
+ 0xA802000F, // 000D EXBLK 0 #001E
+ 0x5C180A00, // 000E MOVE R6 R5
+ 0x7C180000, // 000F CALL R6 0
+ 0xB81E0400, // 0010 GETNGBL R7 K2
+ 0x8C1C0F07, // 0011 GETMET R7 R7 K7
+ 0x7C1C0200, // 0012 CALL R7 1
+ 0x88200D08, // 0013 GETMBR R8 R6 K8
+ 0x901E1008, // 0014 SETMBR R7 K8 R8
+ 0x88200D09, // 0015 GETMBR R8 R6 K9
+ 0x901E1208, // 0016 SETMBR R7 K9 R8
+ 0x88200D0A, // 0017 GETMBR R8 R6 K10
+ 0x901E1408, // 0018 SETMBR R7 K10 R8
+ 0x88200905, // 0019 GETMBR R8 R4 K5
+ 0x8C20110B, // 001A GETMET R8 R8 K11
+ 0x5C280E00, // 001B MOVE R10 R7
+ 0x7C200400, // 001C CALL R8 2
+ 0x7001FFEF, // 001D JMP #000E
+ 0x5814000C, // 001E LDCONST R5 K12
+ 0xAC140200, // 001F CATCH R5 1 0
+ 0xB0080000, // 0020 RAISE 2 R0 R0
+ 0xB8161A00, // 0021 GETNGBL R5 K13
+ 0x8C140B0E, // 0022 GETMET R5 R5 K14
+ 0x8C1C050F, // 0023 GETMET R7 R2 K15
+ 0x58240010, // 0024 LDCONST R9 K16
+ 0x88280711, // 0025 GETMBR R10 R3 K17
+ 0x882C0312, // 0026 GETMBR R11 R1 K18
+ 0x7C1C0800, // 0027 CALL R7 4
+ 0x58200013, // 0028 LDCONST R8 K19
+ 0x7C140600, // 0029 CALL R5 3
+ 0x50140000, // 002A LDBOOL R5 0 0
+ 0x90062805, // 002B SETMBR R1 K20 R5
+ 0x8C140115, // 002C GETMET R5 R0 K21
+ 0x5C1C0600, // 002D MOVE R7 R3
+ 0x5C200800, // 002E MOVE R8 R4
+ 0x7C140600, // 002F CALL R5 3
+ 0x50180000, // 0030 LDBOOL R6 0 0
+ 0x90162C06, // 0031 SETMBR R5 K22 R6
+ 0x88180312, // 0032 GETMBR R6 R1 K18
+ 0x90162406, // 0033 SETMBR R5 K18 R6
+ 0xB81A0400, // 0034 GETNGBL R6 K2
+ 0x8C180D17, // 0035 GETMET R6 R6 K23
+ 0x88200718, // 0036 GETMBR R8 R3 K24
+ 0x5C240600, // 0037 MOVE R9 R3
+ 0x5C280A00, // 0038 MOVE R10 R5
+ 0x5C2C0200, // 0039 MOVE R11 R1
+ 0x7C180A00, // 003A CALL R6 5
+ 0x881C0119, // 003B GETMBR R7 R0 K25
+ 0x8C1C0F0B, // 003C GETMET R7 R7 K11
+ 0x5C240C00, // 003D MOVE R9 R6
+ 0x7C1C0400, // 003E CALL R7 2
+ 0x8C1C011A, // 003F GETMET R7 R0 K26
+ 0x88240718, // 0040 GETMBR R9 R3 K24
+ 0x7C1C0400, // 0041 CALL R7 2
+ 0x80000000, // 0042 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_enqueued
+********************************************************************/
+be_local_closure(Matter_IM_send_enqueued, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[13]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(send_queue),
+ /* K2 */ be_nested_str_weak(finish),
+ /* K3 */ be_nested_str_weak(ready),
+ /* K4 */ be_nested_str_weak(send_im),
+ /* K5 */ be_nested_str_weak(tasmota),
+ /* K6 */ be_nested_str_weak(log),
+ /* K7 */ be_nested_str_weak(MTR_X3A_X20remove_X20IM_X20message_X20exch_X3D),
+ /* K8 */ be_nested_str_weak(resp),
+ /* K9 */ be_nested_str_weak(exchange_id),
+ /* K10 */ be_const_int(3),
+ /* K11 */ be_nested_str_weak(remove),
+ /* K12 */ be_const_int(1),
+ }),
+ be_str_weak(send_enqueued),
+ &be_const_str_solidified,
+ ( &(const binstruction[34]) { /* code */
+ 0x58080000, // 0000 LDCONST R2 K0
+ 0x600C000C, // 0001 GETGBL R3 G12
+ 0x88100101, // 0002 GETMBR R4 R0 K1
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x140C0403, // 0004 LT R3 R2 R3
+ 0x780E001A, // 0005 JMPF R3 #0021
+ 0x880C0101, // 0006 GETMBR R3 R0 K1
+ 0x940C0602, // 0007 GETIDX R3 R3 R2
+ 0x88100702, // 0008 GETMBR R4 R3 K2
+ 0x74120004, // 0009 JMPT R4 #000F
+ 0x88100703, // 000A GETMBR R4 R3 K3
+ 0x78120002, // 000B JMPF R4 #000F
+ 0x8C100704, // 000C GETMET R4 R3 K4
+ 0x5C180200, // 000D MOVE R6 R1
+ 0x7C100400, // 000E CALL R4 2
+ 0x88100702, // 000F GETMBR R4 R3 K2
+ 0x7812000D, // 0010 JMPF R4 #001F
+ 0xB8120A00, // 0011 GETNGBL R4 K5
+ 0x8C100906, // 0012 GETMET R4 R4 K6
+ 0x60180008, // 0013 GETGBL R6 G8
+ 0x881C0708, // 0014 GETMBR R7 R3 K8
+ 0x881C0F09, // 0015 GETMBR R7 R7 K9
+ 0x7C180200, // 0016 CALL R6 1
+ 0x001A0E06, // 0017 ADD R6 K7 R6
+ 0x581C000A, // 0018 LDCONST R7 K10
+ 0x7C100600, // 0019 CALL R4 3
+ 0x88100101, // 001A GETMBR R4 R0 K1
+ 0x8C10090B, // 001B GETMET R4 R4 K11
+ 0x5C180400, // 001C MOVE R6 R2
+ 0x7C100400, // 001D CALL R4 2
+ 0x70020000, // 001E JMP #0020
+ 0x0008050C, // 001F ADD R2 R2 K12
+ 0x7001FFDF, // 0020 JMP #0001
+ 0x80000000, // 0021 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: process_timed_request
+********************************************************************/
+be_local_closure(Matter_IM_process_timed_request, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[16]) { /* constants */
/* K0 */ be_nested_str_weak(string),
/* K1 */ be_nested_str_weak(matter),
/* K2 */ be_nested_str_weak(TimedRequestMessage),
@@ -160,27 +2382,17 @@ be_local_closure(Matter_IM_process_timed_request, /* name */
/* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20TimedRequestMessage_X3D),
/* K7 */ be_const_int(3),
/* K8 */ be_nested_str_weak(format),
- /* K9 */ be_nested_str_weak(MTR_X3A_X20_X3EReceived_IM_X20_X20_X20TimedRequest_X3D_X25i_X20from_X20_X5B_X25s_X5D_X3A_X25i),
- /* K10 */ be_nested_str_weak(timeout),
- /* K11 */ be_nested_str_weak(remote_ip),
- /* K12 */ be_nested_str_weak(remote_port),
+ /* K9 */ be_nested_str_weak(MTR_X3A_X20_X3ECommand_X20_X20_X20_X28_X256i_X29_X20TimedRequest_X3D_X25i),
+ /* K10 */ be_nested_str_weak(session),
+ /* K11 */ be_nested_str_weak(local_session_id),
+ /* K12 */ be_nested_str_weak(timeout),
/* K13 */ be_const_int(2),
- /* K14 */ be_nested_str_weak(StatusResponseMessage),
- /* K15 */ be_nested_str_weak(status),
- /* K16 */ be_nested_str_weak(SUCCESS),
- /* K17 */ be_nested_str_weak(build_response),
- /* K18 */ be_const_int(1),
- /* K19 */ be_nested_str_weak(encode),
- /* K20 */ be_nested_str_weak(to_TLV),
- /* K21 */ be_nested_str_weak(encrypt),
- /* K22 */ be_nested_str_weak(responder),
- /* K23 */ be_nested_str_weak(send_response),
- /* K24 */ be_nested_str_weak(raw),
- /* K25 */ be_nested_str_weak(message_counter),
+ /* K14 */ be_nested_str_weak(send_status),
+ /* K15 */ be_nested_str_weak(SUCCESS),
}),
be_str_weak(process_timed_request),
&be_const_str_solidified,
- ( &(const binstruction[52]) { /* code */
+ ( &(const binstruction[32]) { /* code */
0xA40E0000, // 0000 IMPORT R3 K0
0xB8120200, // 0001 GETNGBL R4 K1
0x8C100902, // 0002 GETMET R4 R4 K2
@@ -200,110 +2412,19 @@ be_local_closure(Matter_IM_process_timed_request, /* name */
0x8C140B05, // 0010 GETMET R5 R5 K5
0x8C1C0708, // 0011 GETMET R7 R3 K8
0x58240009, // 0012 LDCONST R9 K9
- 0x8828090A, // 0013 GETMBR R10 R4 K10
- 0x882C030B, // 0014 GETMBR R11 R1 K11
- 0x8830030C, // 0015 GETMBR R12 R1 K12
- 0x7C1C0A00, // 0016 CALL R7 5
+ 0x8828030A, // 0013 GETMBR R10 R1 K10
+ 0x8828150B, // 0014 GETMBR R10 R10 K11
+ 0x882C090C, // 0015 GETMBR R11 R4 K12
+ 0x7C1C0800, // 0016 CALL R7 4
0x5820000D, // 0017 LDCONST R8 K13
0x7C140600, // 0018 CALL R5 3
- 0xB8160200, // 0019 GETNGBL R5 K1
- 0x8C140B0E, // 001A GETMET R5 R5 K14
- 0x7C140200, // 001B CALL R5 1
- 0xB81A0200, // 001C GETNGBL R6 K1
- 0x88180D10, // 001D GETMBR R6 R6 K16
- 0x90161E06, // 001E SETMBR R5 K15 R6
- 0x8C180311, // 001F GETMET R6 R1 K17
- 0x58200012, // 0020 LDCONST R8 K18
- 0x50240200, // 0021 LDBOOL R9 1 0
- 0x7C180600, // 0022 CALL R6 3
- 0x8C1C0D13, // 0023 GETMET R7 R6 K19
- 0x8C240B14, // 0024 GETMET R9 R5 K20
- 0x7C240200, // 0025 CALL R9 1
- 0x8C241313, // 0026 GETMET R9 R9 K19
- 0x7C240200, // 0027 CALL R9 1
- 0x7C1C0400, // 0028 CALL R7 2
- 0x8C1C0D15, // 0029 GETMET R7 R6 K21
- 0x7C1C0200, // 002A CALL R7 1
- 0x881C0116, // 002B GETMBR R7 R0 K22
- 0x8C1C0F17, // 002C GETMET R7 R7 K23
- 0x88240D18, // 002D GETMBR R9 R6 K24
- 0x8828030B, // 002E GETMBR R10 R1 K11
- 0x882C030C, // 002F GETMBR R11 R1 K12
- 0x88300D19, // 0030 GETMBR R12 R6 K25
- 0x7C1C0A00, // 0031 CALL R7 5
- 0x501C0200, // 0032 LDBOOL R7 1 0
- 0x80040E00, // 0033 RET 1 R7
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: process_status_response
-********************************************************************/
-be_local_closure(Matter_IM_process_status_response, /* name */
- be_nested_proto(
- 11, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(findsubval),
- /* K2 */ be_const_int(0),
- /* K3 */ be_nested_str_weak(tasmota),
- /* K4 */ be_nested_str_weak(log),
- /* K5 */ be_nested_str_weak(format),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20Status_X20Response_X20_X3D_X200x_X2502X),
- /* K7 */ be_const_int(3),
- }),
- be_str_weak(process_status_response),
- &be_const_str_solidified,
- ( &(const binstruction[15]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0x8C100501, // 0001 GETMET R4 R2 K1
- 0x58180002, // 0002 LDCONST R6 K2
- 0x541E00FE, // 0003 LDINT R7 255
- 0x7C100600, // 0004 CALL R4 3
- 0xB8160600, // 0005 GETNGBL R5 K3
- 0x8C140B04, // 0006 GETMET R5 R5 K4
- 0x8C1C0705, // 0007 GETMET R7 R3 K5
- 0x58240006, // 0008 LDCONST R9 K6
- 0x5C280800, // 0009 MOVE R10 R4
- 0x7C1C0600, // 000A CALL R7 3
- 0x58200007, // 000B LDCONST R8 K7
- 0x7C140600, // 000C CALL R5 3
- 0x50140200, // 000D LDBOOL R5 1 0
- 0x80040A00, // 000E RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: every_second
-********************************************************************/
-be_local_closure(Matter_IM_every_second, /* name */
- be_nested_proto(
- 1, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 0, /* has constants */
- NULL, /* no const */
- be_str_weak(every_second),
- &be_const_str_solidified,
- ( &(const binstruction[ 1]) { /* code */
- 0x80000000, // 0000 RET 0
+ 0x8C14010E, // 0019 GETMET R5 R0 K14
+ 0x5C1C0200, // 001A MOVE R7 R1
+ 0xB8220200, // 001B GETNGBL R8 K1
+ 0x8820110F, // 001C GETMBR R8 R8 K15
+ 0x7C140600, // 001D CALL R5 3
+ 0x50140200, // 001E LDBOOL R5 1 0
+ 0x80040A00, // 001F RET 1 R5
})
)
);
@@ -331,7 +2452,7 @@ be_local_closure(Matter_IM_report_data, /* name */
/* K4 */ be_nested_str_weak(tasmota),
/* K5 */ be_nested_str_weak(log),
/* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20ReportDataMessage_X3D),
- /* K7 */ be_const_int(3),
+ /* K7 */ be_const_int(2),
}),
be_str_weak(report_data),
&be_const_str_solidified,
@@ -380,7 +2501,7 @@ be_local_closure(Matter_IM_process_invoke_response, /* name */
/* K4 */ be_nested_str_weak(tasmota),
/* K5 */ be_nested_str_weak(log),
/* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20InvokeResponseMessage_X3D),
- /* K7 */ be_const_int(3),
+ /* K7 */ be_const_int(2),
}),
be_str_weak(process_invoke_response),
&be_const_str_solidified,
@@ -408,1117 +2529,12 @@ be_local_closure(Matter_IM_process_invoke_response, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: process_read_request
-********************************************************************/
-be_local_closure(Matter_IM_process_read_request, /* name */
- be_nested_proto(
- 15, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 1, /* has sup protos */
- ( &(const struct bproto*[ 2]) {
- be_nested_proto(
- 18, /* nstack */
- 4, /* argc */
- 0, /* varg */
- 1, /* has upvals */
- ( &(const bupvaldesc[ 1]) { /* upvals */
- be_local_const_upval(1, 1),
- }),
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[32]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(get_attribute_name),
- /* K3 */ be_nested_str_weak(cluster),
- /* K4 */ be_nested_str_weak(attribute),
- /* K5 */ be_nested_str_weak(_X20_X28),
- /* K6 */ be_nested_str_weak(_X29),
- /* K7 */ be_nested_str_weak(),
- /* K8 */ be_nested_str_weak(read_attribute),
- /* K9 */ be_nested_str_weak(AttributeReportIB),
- /* K10 */ be_nested_str_weak(attribute_data),
- /* K11 */ be_nested_str_weak(AttributeDataIB),
- /* K12 */ be_nested_str_weak(data_version),
- /* K13 */ be_const_int(1),
- /* K14 */ be_nested_str_weak(path),
- /* K15 */ be_nested_str_weak(AttributePathIB),
- /* K16 */ be_nested_str_weak(endpoint),
- /* K17 */ be_nested_str_weak(data),
- /* K18 */ be_nested_str_weak(attribute_reports),
- /* K19 */ be_nested_str_weak(push),
- /* K20 */ be_nested_str_weak(tasmota),
- /* K21 */ be_nested_str_weak(log),
- /* K22 */ be_nested_str_weak(format),
- /* K23 */ be_nested_str_weak(MTR_X3A_X20Read_Attr_X20_X25s_X25s_X20_X2D_X20_X25s),
- /* K24 */ be_const_int(2),
- /* K25 */ be_nested_str_weak(status),
- /* K26 */ be_nested_str_weak(attribute_status),
- /* K27 */ be_nested_str_weak(AttributeStatusIB),
- /* K28 */ be_nested_str_weak(StatusIB),
- /* K29 */ be_nested_str_weak(MTR_X3A_X20Read_Attr_X20_X25s_X25s_X20_X2D_X20STATUS_X3A_X200x_X2502X_X20_X25s),
- /* K30 */ be_nested_str_weak(UNSUPPORTED_ATTRIBUTE),
- /* K31 */ be_nested_str_weak(MTR_X3A_X20Read_Attr_X20_X25s_X25s_X20_X2D_X20IGNORED),
- }),
- be_str_weak(read_single_attribute),
- &be_const_str_solidified,
- ( &(const binstruction[150]) { /* code */
- 0xA4120000, // 0000 IMPORT R4 K0
- 0xB8160200, // 0001 GETNGBL R5 K1
- 0x8C140B02, // 0002 GETMET R5 R5 K2
- 0x881C0503, // 0003 GETMBR R7 R2 K3
- 0x88200504, // 0004 GETMBR R8 R2 K4
- 0x7C140600, // 0005 CALL R5 3
- 0x78160002, // 0006 JMPF R5 #000A
- 0x001A0A05, // 0007 ADD R6 K5 R5
- 0x00180D06, // 0008 ADD R6 R6 K6
- 0x70020000, // 0009 JMP #000B
- 0x58180007, // 000A LDCONST R6 K7
- 0x5C140C00, // 000B MOVE R5 R6
- 0x4C180000, // 000C LDNIL R6
- 0x20180206, // 000D NE R6 R1 R6
- 0x781A0004, // 000E JMPF R6 #0014
- 0x8C180308, // 000F GETMET R6 R1 K8
- 0x68200000, // 0010 GETUPV R8 U0
- 0x5C240400, // 0011 MOVE R9 R2
- 0x7C180600, // 0012 CALL R6 3
- 0x70020000, // 0013 JMP #0015
- 0x4C180000, // 0014 LDNIL R6
- 0x4C1C0000, // 0015 LDNIL R7
- 0x201C0C07, // 0016 NE R7 R6 R7
- 0x781E0030, // 0017 JMPF R7 #0049
- 0xB81E0200, // 0018 GETNGBL R7 K1
- 0x8C1C0F09, // 0019 GETMET R7 R7 K9
- 0x7C1C0200, // 001A CALL R7 1
- 0xB8220200, // 001B GETNGBL R8 K1
- 0x8C20110B, // 001C GETMET R8 R8 K11
- 0x7C200200, // 001D CALL R8 1
- 0x901E1408, // 001E SETMBR R7 K10 R8
- 0x88200F0A, // 001F GETMBR R8 R7 K10
- 0x9022190D, // 0020 SETMBR R8 K12 K13
- 0x88200F0A, // 0021 GETMBR R8 R7 K10
- 0xB8260200, // 0022 GETNGBL R9 K1
- 0x8C24130F, // 0023 GETMET R9 R9 K15
- 0x7C240200, // 0024 CALL R9 1
- 0x90221C09, // 0025 SETMBR R8 K14 R9
- 0x88200F0A, // 0026 GETMBR R8 R7 K10
- 0x8820110E, // 0027 GETMBR R8 R8 K14
- 0x88240510, // 0028 GETMBR R9 R2 K16
- 0x90222009, // 0029 SETMBR R8 K16 R9
- 0x88200F0A, // 002A GETMBR R8 R7 K10
- 0x8820110E, // 002B GETMBR R8 R8 K14
- 0x88240503, // 002C GETMBR R9 R2 K3
- 0x90220609, // 002D SETMBR R8 K3 R9
- 0x88200F0A, // 002E GETMBR R8 R7 K10
- 0x8820110E, // 002F GETMBR R8 R8 K14
- 0x88240504, // 0030 GETMBR R9 R2 K4
- 0x90220809, // 0031 SETMBR R8 K4 R9
- 0x88200F0A, // 0032 GETMBR R8 R7 K10
- 0x90222206, // 0033 SETMBR R8 K17 R6
- 0x88200112, // 0034 GETMBR R8 R0 K18
- 0x8C201113, // 0035 GETMET R8 R8 K19
- 0x5C280E00, // 0036 MOVE R10 R7
- 0x7C200400, // 0037 CALL R8 2
- 0xB8222800, // 0038 GETNGBL R8 K20
- 0x8C201115, // 0039 GETMET R8 R8 K21
- 0x8C280916, // 003A GETMET R10 R4 K22
- 0x58300017, // 003B LDCONST R12 K23
- 0x60340008, // 003C GETGBL R13 G8
- 0x5C380400, // 003D MOVE R14 R2
- 0x7C340200, // 003E CALL R13 1
- 0x5C380A00, // 003F MOVE R14 R5
- 0x603C0008, // 0040 GETGBL R15 G8
- 0x5C400C00, // 0041 MOVE R16 R6
- 0x7C3C0200, // 0042 CALL R15 1
- 0x7C280A00, // 0043 CALL R10 5
- 0x582C0018, // 0044 LDCONST R11 K24
- 0x7C200600, // 0045 CALL R8 3
- 0x50200200, // 0046 LDBOOL R8 1 0
- 0x80041000, // 0047 RET 1 R8
- 0x7002004B, // 0048 JMP #0095
- 0x881C0519, // 0049 GETMBR R7 R2 K25
- 0x4C200000, // 004A LDNIL R8
- 0x201C0E08, // 004B NE R7 R7 R8
- 0x781E003C, // 004C JMPF R7 #008A
- 0x780E003A, // 004D JMPF R3 #0089
- 0xB81E0200, // 004E GETNGBL R7 K1
- 0x8C1C0F09, // 004F GETMET R7 R7 K9
- 0x7C1C0200, // 0050 CALL R7 1
- 0xB8220200, // 0051 GETNGBL R8 K1
- 0x8C20111B, // 0052 GETMET R8 R8 K27
- 0x7C200200, // 0053 CALL R8 1
- 0x901E3408, // 0054 SETMBR R7 K26 R8
- 0x88200F1A, // 0055 GETMBR R8 R7 K26
- 0xB8260200, // 0056 GETNGBL R9 K1
- 0x8C24130F, // 0057 GETMET R9 R9 K15
- 0x7C240200, // 0058 CALL R9 1
- 0x90221C09, // 0059 SETMBR R8 K14 R9
- 0x88200F1A, // 005A GETMBR R8 R7 K26
- 0xB8260200, // 005B GETNGBL R9 K1
- 0x8C24131C, // 005C GETMET R9 R9 K28
- 0x7C240200, // 005D CALL R9 1
- 0x90223209, // 005E SETMBR R8 K25 R9
- 0x88200F1A, // 005F GETMBR R8 R7 K26
- 0x8820110E, // 0060 GETMBR R8 R8 K14
- 0x88240510, // 0061 GETMBR R9 R2 K16
- 0x90222009, // 0062 SETMBR R8 K16 R9
- 0x88200F1A, // 0063 GETMBR R8 R7 K26
- 0x8820110E, // 0064 GETMBR R8 R8 K14
- 0x88240503, // 0065 GETMBR R9 R2 K3
- 0x90220609, // 0066 SETMBR R8 K3 R9
- 0x88200F1A, // 0067 GETMBR R8 R7 K26
- 0x8820110E, // 0068 GETMBR R8 R8 K14
- 0x88240504, // 0069 GETMBR R9 R2 K4
- 0x90220809, // 006A SETMBR R8 K4 R9
- 0x88200F1A, // 006B GETMBR R8 R7 K26
- 0x88201119, // 006C GETMBR R8 R8 K25
- 0x88240519, // 006D GETMBR R9 R2 K25
- 0x90223209, // 006E SETMBR R8 K25 R9
- 0x88200112, // 006F GETMBR R8 R0 K18
- 0x8C201113, // 0070 GETMET R8 R8 K19
- 0x5C280E00, // 0071 MOVE R10 R7
- 0x7C200400, // 0072 CALL R8 2
- 0xB8222800, // 0073 GETNGBL R8 K20
- 0x8C201115, // 0074 GETMET R8 R8 K21
- 0x8C280916, // 0075 GETMET R10 R4 K22
- 0x5830001D, // 0076 LDCONST R12 K29
- 0x60340008, // 0077 GETGBL R13 G8
- 0x5C380400, // 0078 MOVE R14 R2
- 0x7C340200, // 0079 CALL R13 1
- 0x5C380A00, // 007A MOVE R14 R5
- 0x883C0519, // 007B GETMBR R15 R2 K25
- 0x88400519, // 007C GETMBR R16 R2 K25
- 0xB8460200, // 007D GETNGBL R17 K1
- 0x8844231E, // 007E GETMBR R17 R17 K30
- 0x1C402011, // 007F EQ R16 R16 R17
- 0x78420001, // 0080 JMPF R16 #0083
- 0x5840001E, // 0081 LDCONST R16 K30
- 0x70020000, // 0082 JMP #0084
- 0x58400007, // 0083 LDCONST R16 K7
- 0x7C280C00, // 0084 CALL R10 6
- 0x582C0018, // 0085 LDCONST R11 K24
- 0x7C200600, // 0086 CALL R8 3
- 0x50200200, // 0087 LDBOOL R8 1 0
- 0x80041000, // 0088 RET 1 R8
- 0x7002000A, // 0089 JMP #0095
- 0xB81E2800, // 008A GETNGBL R7 K20
- 0x8C1C0F15, // 008B GETMET R7 R7 K21
- 0x8C240916, // 008C GETMET R9 R4 K22
- 0x582C001F, // 008D LDCONST R11 K31
- 0x60300008, // 008E GETGBL R12 G8
- 0x5C340400, // 008F MOVE R13 R2
- 0x7C300200, // 0090 CALL R12 1
- 0x5C340A00, // 0091 MOVE R13 R5
- 0x7C240800, // 0092 CALL R9 4
- 0x58280018, // 0093 LDCONST R10 K24
- 0x7C1C0600, // 0094 CALL R7 3
- 0x80000000, // 0095 RET 0
- })
- ),
- be_nested_proto(
- 8, /* nstack */
- 3, /* argc */
- 0, /* varg */
- 1, /* has upvals */
- ( &(const bupvaldesc[ 2]) { /* upvals */
- be_local_const_upval(1, 4),
- be_local_const_upval(1, 7),
- }),
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 0, /* has constants */
- NULL, /* no const */
- be_str_weak(_X3Clambda_X3E),
- &be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0x680C0000, // 0000 GETUPV R3 U0
- 0x68100001, // 0001 GETUPV R4 U1
- 0x5C140000, // 0002 MOVE R5 R0
- 0x5C180200, // 0003 MOVE R6 R1
- 0x5C1C0400, // 0004 MOVE R7 R2
- 0x7C0C0800, // 0005 CALL R3 4
- 0x80040600, // 0006 RET 1 R3
- })
- ),
- }),
- 1, /* has constants */
- ( &(const bvalue[30]) { /* constants */
- /* K0 */ be_nested_str_weak(device),
- /* K1 */ be_nested_str_weak(get_active_endpoints),
- /* K2 */ be_nested_str_weak(tasmota),
- /* K3 */ be_nested_str_weak(log),
- /* K4 */ be_nested_str_weak(MTR_X3A_X20IM_X3Aread_request_X20processing_X20start),
- /* K5 */ be_const_int(3),
- /* K6 */ be_nested_str_weak(matter),
- /* K7 */ be_nested_str_weak(Response_container),
- /* K8 */ be_nested_str_weak(ReadRequestMessage),
- /* K9 */ be_nested_str_weak(from_TLV),
- /* K10 */ be_nested_str_weak(attributes_requests),
- /* K11 */ be_nested_str_weak(ReportDataMessage),
- /* K12 */ be_nested_str_weak(attribute_reports),
- /* K13 */ be_nested_str_weak(endpoint),
- /* K14 */ be_nested_str_weak(cluster),
- /* K15 */ be_nested_str_weak(attribute),
- /* K16 */ be_nested_str_weak(status),
- /* K17 */ be_nested_str_weak(UNSUPPORTED_ATTRIBUTE),
- /* K18 */ be_nested_str_weak(get_attribute_name),
- /* K19 */ be_nested_str_weak(MTR_X3A_X20Read_Attr_X20),
- /* K20 */ be_nested_str_weak(_X20_X28),
- /* K21 */ be_nested_str_weak(_X29),
- /* K22 */ be_nested_str_weak(),
- /* K23 */ be_const_int(2),
- /* K24 */ be_nested_str_weak(process_attribute_expansion),
- /* K25 */ be_nested_str_weak(stop_iteration),
- /* K26 */ be_nested_str_weak(MTR_X3A_X20ReportDataMessage_X3D),
- /* K27 */ be_nested_str_weak(MTR_X3A_X20ReportDataMessageTLV_X3D),
- /* K28 */ be_nested_str_weak(to_TLV),
- /* K29 */ be_nested_str_weak(send_attr_report),
- }),
- be_str_weak(process_read_request),
- &be_const_str_solidified,
- ( &(const binstruction[125]) { /* code */
- 0x880C0100, // 0000 GETMBR R3 R0 K0
- 0x8C0C0701, // 0001 GETMET R3 R3 K1
- 0x7C0C0200, // 0002 CALL R3 1
- 0x84100000, // 0003 CLOSURE R4 P0
- 0xB8160400, // 0004 GETNGBL R5 K2
- 0x8C140B03, // 0005 GETMET R5 R5 K3
- 0x581C0004, // 0006 LDCONST R7 K4
- 0x58200005, // 0007 LDCONST R8 K5
- 0x7C140600, // 0008 CALL R5 3
- 0xB8160C00, // 0009 GETNGBL R5 K6
- 0x8C140B07, // 000A GETMET R5 R5 K7
- 0x7C140200, // 000B CALL R5 1
- 0xB81A0C00, // 000C GETNGBL R6 K6
- 0x8C180D08, // 000D GETMET R6 R6 K8
- 0x7C180200, // 000E CALL R6 1
- 0x8C180D09, // 000F GETMET R6 R6 K9
- 0x5C200400, // 0010 MOVE R8 R2
- 0x7C180400, // 0011 CALL R6 2
- 0x881C0D0A, // 0012 GETMBR R7 R6 K10
- 0x4C200000, // 0013 LDNIL R8
- 0x201C0E08, // 0014 NE R7 R7 R8
- 0x781E0063, // 0015 JMPF R7 #007A
- 0xB81E0C00, // 0016 GETNGBL R7 K6
- 0x8C1C0F0B, // 0017 GETMET R7 R7 K11
- 0x7C1C0200, // 0018 CALL R7 1
- 0x60200012, // 0019 GETGBL R8 G18
- 0x7C200000, // 001A CALL R8 0
- 0x901E1808, // 001B SETMBR R7 K12 R8
- 0x60200010, // 001C GETGBL R8 G16
- 0x88240D0A, // 001D GETMBR R9 R6 K10
- 0x7C200200, // 001E CALL R8 1
- 0xA8020040, // 001F EXBLK 0 #0061
- 0x5C241000, // 0020 MOVE R9 R8
- 0x7C240000, // 0021 CALL R9 0
- 0x8828130D, // 0022 GETMBR R10 R9 K13
- 0x90161A0A, // 0023 SETMBR R5 K13 R10
- 0x8828130E, // 0024 GETMBR R10 R9 K14
- 0x90161C0A, // 0025 SETMBR R5 K14 R10
- 0x8828130F, // 0026 GETMBR R10 R9 K15
- 0x90161E0A, // 0027 SETMBR R5 K15 R10
- 0xB82A0C00, // 0028 GETNGBL R10 K6
- 0x88281511, // 0029 GETMBR R10 R10 K17
- 0x9016200A, // 002A SETMBR R5 K16 R10
- 0x88280B0D, // 002B GETMBR R10 R5 K13
- 0x4C2C0000, // 002C LDNIL R11
- 0x1C28140B, // 002D EQ R10 R10 R11
- 0x742A0007, // 002E JMPT R10 #0037
- 0x88280B0E, // 002F GETMBR R10 R5 K14
- 0x4C2C0000, // 0030 LDNIL R11
- 0x1C28140B, // 0031 EQ R10 R10 R11
- 0x742A0003, // 0032 JMPT R10 #0037
- 0x88280B0F, // 0033 GETMBR R10 R5 K15
- 0x4C2C0000, // 0034 LDNIL R11
- 0x1C28140B, // 0035 EQ R10 R10 R11
- 0x782A0023, // 0036 JMPF R10 #005B
- 0x88280B0E, // 0037 GETMBR R10 R5 K14
- 0x4C2C0000, // 0038 LDNIL R11
- 0x2028140B, // 0039 NE R10 R10 R11
- 0x782A0017, // 003A JMPF R10 #0053
- 0x88280B0F, // 003B GETMBR R10 R5 K15
- 0x4C2C0000, // 003C LDNIL R11
- 0x2028140B, // 003D NE R10 R10 R11
- 0x782A0013, // 003E JMPF R10 #0053
- 0xB82A0C00, // 003F GETNGBL R10 K6
- 0x8C281512, // 0040 GETMET R10 R10 K18
- 0x88300B0E, // 0041 GETMBR R12 R5 K14
- 0x88340B0F, // 0042 GETMBR R13 R5 K15
- 0x7C280600, // 0043 CALL R10 3
- 0xB82E0400, // 0044 GETNGBL R11 K2
- 0x8C2C1703, // 0045 GETMET R11 R11 K3
- 0x60340008, // 0046 GETGBL R13 G8
- 0x5C380A00, // 0047 MOVE R14 R5
- 0x7C340200, // 0048 CALL R13 1
- 0x0036260D, // 0049 ADD R13 K19 R13
- 0x782A0002, // 004A JMPF R10 #004E
- 0x003A280A, // 004B ADD R14 K20 R10
- 0x00381D15, // 004C ADD R14 R14 K21
- 0x70020000, // 004D JMP #004F
- 0x58380016, // 004E LDCONST R14 K22
- 0x00341A0E, // 004F ADD R13 R13 R14
- 0x58380017, // 0050 LDCONST R14 K23
- 0x7C2C0600, // 0051 CALL R11 3
- 0x70020007, // 0052 JMP #005B
- 0xB82A0400, // 0053 GETNGBL R10 K2
- 0x8C281503, // 0054 GETMET R10 R10 K3
- 0x60300008, // 0055 GETGBL R12 G8
- 0x5C340A00, // 0056 MOVE R13 R5
- 0x7C300200, // 0057 CALL R12 1
- 0x0032260C, // 0058 ADD R12 K19 R12
- 0x58340017, // 0059 LDCONST R13 K23
- 0x7C280600, // 005A CALL R10 3
- 0x88280100, // 005B GETMBR R10 R0 K0
- 0x8C281518, // 005C GETMET R10 R10 K24
- 0x5C300A00, // 005D MOVE R12 R5
- 0x84340001, // 005E CLOSURE R13 P1
- 0x7C280600, // 005F CALL R10 3
- 0x7001FFBE, // 0060 JMP #0020
- 0x58200019, // 0061 LDCONST R8 K25
- 0xAC200200, // 0062 CATCH R8 1 0
- 0xB0080000, // 0063 RAISE 2 R0 R0
- 0xB8220400, // 0064 GETNGBL R8 K2
- 0x8C201103, // 0065 GETMET R8 R8 K3
- 0x60280008, // 0066 GETGBL R10 G8
- 0x5C2C0E00, // 0067 MOVE R11 R7
- 0x7C280200, // 0068 CALL R10 1
- 0x002A340A, // 0069 ADD R10 K26 R10
- 0x582C0005, // 006A LDCONST R11 K5
- 0x7C200600, // 006B CALL R8 3
- 0xB8220400, // 006C GETNGBL R8 K2
- 0x8C201103, // 006D GETMET R8 R8 K3
- 0x60280008, // 006E GETGBL R10 G8
- 0x8C2C0F1C, // 006F GETMET R11 R7 K28
- 0x7C2C0200, // 0070 CALL R11 1
- 0x7C280200, // 0071 CALL R10 1
- 0x002A360A, // 0072 ADD R10 K27 R10
- 0x582C0005, // 0073 LDCONST R11 K5
- 0x7C200600, // 0074 CALL R8 3
- 0x8C20011D, // 0075 GETMET R8 R0 K29
- 0x5C280200, // 0076 MOVE R10 R1
- 0x5C2C0E00, // 0077 MOVE R11 R7
- 0x7C200600, // 0078 CALL R8 3
- 0xA01C0000, // 0079 CLOSE R7
- 0x501C0200, // 007A LDBOOL R7 1 0
- 0xA0000000, // 007B CLOSE R0
- 0x80040E00, // 007C RET 1 R7
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: process_write_request
-********************************************************************/
-be_local_closure(Matter_IM_process_write_request, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(WriteRequestMessage),
- /* K3 */ be_nested_str_weak(from_TLV),
- /* K4 */ be_nested_str_weak(tasmota),
- /* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20WriteRequestMessage_X3D),
- /* K7 */ be_const_int(3),
- }),
- be_str_weak(process_write_request),
- &be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0xB8120200, // 0001 GETNGBL R4 K1
- 0x8C100902, // 0002 GETMET R4 R4 K2
- 0x7C100200, // 0003 CALL R4 1
- 0x8C100903, // 0004 GETMET R4 R4 K3
- 0x5C180400, // 0005 MOVE R6 R2
- 0x7C100400, // 0006 CALL R4 2
- 0xB8160800, // 0007 GETNGBL R5 K4
- 0x8C140B05, // 0008 GETMET R5 R5 K5
- 0x601C0008, // 0009 GETGBL R7 G8
- 0x5C200800, // 000A MOVE R8 R4
- 0x7C1C0200, // 000B CALL R7 1
- 0x001E0C07, // 000C ADD R7 K6 R7
- 0x58200007, // 000D LDCONST R8 K7
- 0x7C140600, // 000E CALL R5 3
- 0x50140000, // 000F LDBOOL R5 0 0
- 0x80040A00, // 0010 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: process_invoke_request
-********************************************************************/
-be_local_closure(Matter_IM_process_invoke_request, /* name */
- be_nested_proto(
- 18, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[52]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(tasmota),
- /* K2 */ be_nested_str_weak(log),
- /* K3 */ be_nested_str_weak(MTR_X3A_X20IM_X3Ainvoke_request_X20processing_X20start),
- /* K4 */ be_const_int(3),
- /* K5 */ be_nested_str_weak(matter),
- /* K6 */ be_nested_str_weak(Response_container),
- /* K7 */ be_nested_str_weak(InvokeRequestMessage),
- /* K8 */ be_nested_str_weak(from_TLV),
- /* K9 */ be_nested_str_weak(invoke_requests),
- /* K10 */ be_nested_str_weak(InvokeResponseMessage),
- /* K11 */ be_nested_str_weak(suppress_response),
- /* K12 */ be_nested_str_weak(invoke_responses),
- /* K13 */ be_nested_str_weak(endpoint),
- /* K14 */ be_nested_str_weak(command_path),
- /* K15 */ be_nested_str_weak(cluster),
- /* K16 */ be_nested_str_weak(command),
- /* K17 */ be_nested_str_weak(status),
- /* K18 */ be_nested_str_weak(UNSUPPORTED_COMMAND),
- /* K19 */ be_nested_str_weak(get_command_name),
- /* K20 */ be_nested_str_weak(format),
- /* K21 */ be_nested_str_weak(0x_X2504X_X2F0x02X),
- /* K22 */ be_nested_str_weak(MTR_X3A_X20_X3EReceived_cmd_X20_X20_X25s_X20from_X20_X5B_X25s_X5D_X3A_X25i),
- /* K23 */ be_nested_str_weak(remote_ip),
- /* K24 */ be_nested_str_weak(remote_port),
- /* K25 */ be_const_int(2),
- /* K26 */ be_nested_str_weak(responder),
- /* K27 */ be_nested_str_weak(device),
- /* K28 */ be_nested_str_weak(invoke_request),
- /* K29 */ be_nested_str_weak(command_fields),
- /* K30 */ be_nested_str_weak(InvokeResponseIB),
- /* K31 */ be_nested_str_weak(CommandDataIB),
- /* K32 */ be_nested_str_weak(CommandPathIB),
- /* K33 */ be_nested_str_weak(push),
- /* K34 */ be_nested_str_weak(0x_X2504X_X2F0x_X2502X),
- /* K35 */ be_nested_str_weak(MTR_X3A_X20_X3CReplied_cmd_X20_X20_X20_X25s),
- /* K36 */ be_nested_str_weak(CommandStatusIB),
- /* K37 */ be_nested_str_weak(StatusIB),
- /* K38 */ be_nested_str_weak(stop_iteration),
- /* K39 */ be_nested_str_weak(MTR_X3A_X20invoke_responses_X3D),
- /* K40 */ be_const_int(0),
- /* K41 */ be_nested_str_weak(MTR_X3A_X20InvokeResponse_X3D),
- /* K42 */ be_nested_str_weak(MTR_X3A_X20InvokeResponseTLV_X3D),
- /* K43 */ be_nested_str_weak(to_TLV),
- /* K44 */ be_nested_str_weak(build_response),
- /* K45 */ be_nested_str_weak(encode),
- /* K46 */ be_nested_str_weak(encrypt),
- /* K47 */ be_nested_str_weak(send_response),
- /* K48 */ be_nested_str_weak(raw),
- /* K49 */ be_nested_str_weak(message_counter),
- /* K50 */ be_nested_str_weak(x_flag_r),
- /* K51 */ be_nested_str_weak(build_standalone_ack),
- }),
- be_str_weak(process_invoke_request),
- &be_const_str_solidified,
- ( &(const binstruction[242]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0xB8120200, // 0001 GETNGBL R4 K1
- 0x8C100902, // 0002 GETMET R4 R4 K2
- 0x58180003, // 0003 LDCONST R6 K3
- 0x581C0004, // 0004 LDCONST R7 K4
- 0x7C100600, // 0005 CALL R4 3
- 0xB8120A00, // 0006 GETNGBL R4 K5
- 0x8C100906, // 0007 GETMET R4 R4 K6
- 0x7C100200, // 0008 CALL R4 1
- 0xB8160A00, // 0009 GETNGBL R5 K5
- 0x8C140B07, // 000A GETMET R5 R5 K7
- 0x7C140200, // 000B CALL R5 1
- 0x8C140B08, // 000C GETMET R5 R5 K8
- 0x5C1C0400, // 000D MOVE R7 R2
- 0x7C140400, // 000E CALL R5 2
- 0x88180B09, // 000F GETMBR R6 R5 K9
- 0x4C1C0000, // 0010 LDNIL R7
- 0x20180C07, // 0011 NE R6 R6 R7
- 0x781A00DD, // 0012 JMPF R6 #00F1
- 0xB81A0A00, // 0013 GETNGBL R6 K5
- 0x8C180D0A, // 0014 GETMET R6 R6 K10
- 0x7C180200, // 0015 CALL R6 1
- 0x501C0000, // 0016 LDBOOL R7 0 0
- 0x901A1607, // 0017 SETMBR R6 K11 R7
- 0x601C0012, // 0018 GETGBL R7 G18
- 0x7C1C0000, // 0019 CALL R7 0
- 0x901A1807, // 001A SETMBR R6 K12 R7
- 0x601C0010, // 001B GETGBL R7 G16
- 0x88200B09, // 001C GETMBR R8 R5 K9
- 0x7C1C0200, // 001D CALL R7 1
- 0xA802008D, // 001E EXBLK 0 #00AD
- 0x5C200E00, // 001F MOVE R8 R7
- 0x7C200000, // 0020 CALL R8 0
- 0x8824110E, // 0021 GETMBR R9 R8 K14
- 0x8824130D, // 0022 GETMBR R9 R9 K13
- 0x90121A09, // 0023 SETMBR R4 K13 R9
- 0x8824110E, // 0024 GETMBR R9 R8 K14
- 0x8824130F, // 0025 GETMBR R9 R9 K15
- 0x90121E09, // 0026 SETMBR R4 K15 R9
- 0x8824110E, // 0027 GETMBR R9 R8 K14
- 0x88241310, // 0028 GETMBR R9 R9 K16
- 0x90122009, // 0029 SETMBR R4 K16 R9
- 0xB8260A00, // 002A GETNGBL R9 K5
- 0x88241312, // 002B GETMBR R9 R9 K18
- 0x90122209, // 002C SETMBR R4 K17 R9
- 0xB8260A00, // 002D GETNGBL R9 K5
- 0x8C241313, // 002E GETMET R9 R9 K19
- 0x882C090F, // 002F GETMBR R11 R4 K15
- 0x88300910, // 0030 GETMBR R12 R4 K16
- 0x7C240600, // 0031 CALL R9 3
- 0x4C280000, // 0032 LDNIL R10
- 0x1C28120A, // 0033 EQ R10 R9 R10
- 0x782A0005, // 0034 JMPF R10 #003B
- 0x8C280714, // 0035 GETMET R10 R3 K20
- 0x58300015, // 0036 LDCONST R12 K21
- 0x8834090F, // 0037 GETMBR R13 R4 K15
- 0x88380910, // 0038 GETMBR R14 R4 K16
- 0x7C280800, // 0039 CALL R10 4
- 0x5C241400, // 003A MOVE R9 R10
- 0xB82A0200, // 003B GETNGBL R10 K1
- 0x8C281502, // 003C GETMET R10 R10 K2
- 0x8C300714, // 003D GETMET R12 R3 K20
- 0x58380016, // 003E LDCONST R14 K22
- 0x5C3C1200, // 003F MOVE R15 R9
- 0x88400317, // 0040 GETMBR R16 R1 K23
- 0x88440318, // 0041 GETMBR R17 R1 K24
- 0x7C300A00, // 0042 CALL R12 5
- 0x58340019, // 0043 LDCONST R13 K25
- 0x7C280600, // 0044 CALL R10 3
- 0x8828011A, // 0045 GETMBR R10 R0 K26
- 0x8828151B, // 0046 GETMBR R10 R10 K27
- 0x8C28151C, // 0047 GETMET R10 R10 K28
- 0x5C300200, // 0048 MOVE R12 R1
- 0x8834111D, // 0049 GETMBR R13 R8 K29
- 0x5C380800, // 004A MOVE R14 R4
- 0x7C280800, // 004B CALL R10 4
- 0xB82E0A00, // 004C GETNGBL R11 K5
- 0x8C2C171E, // 004D GETMET R11 R11 K30
- 0x7C2C0200, // 004E CALL R11 1
- 0x4C300000, // 004F LDNIL R12
- 0x2030140C, // 0050 NE R12 R10 R12
- 0x78320032, // 0051 JMPF R12 #0085
- 0xB8320A00, // 0052 GETNGBL R12 K5
- 0x8C30191F, // 0053 GETMET R12 R12 K31
- 0x7C300200, // 0054 CALL R12 1
- 0x902E200C, // 0055 SETMBR R11 K16 R12
- 0x88301710, // 0056 GETMBR R12 R11 K16
- 0xB8360A00, // 0057 GETNGBL R13 K5
- 0x8C341B20, // 0058 GETMET R13 R13 K32
- 0x7C340200, // 0059 CALL R13 1
- 0x90321C0D, // 005A SETMBR R12 K14 R13
- 0x88301710, // 005B GETMBR R12 R11 K16
- 0x8830190E, // 005C GETMBR R12 R12 K14
- 0x8834090D, // 005D GETMBR R13 R4 K13
- 0x90321A0D, // 005E SETMBR R12 K13 R13
- 0x88301710, // 005F GETMBR R12 R11 K16
- 0x8830190E, // 0060 GETMBR R12 R12 K14
- 0x8834090F, // 0061 GETMBR R13 R4 K15
- 0x90321E0D, // 0062 SETMBR R12 K15 R13
- 0x88301710, // 0063 GETMBR R12 R11 K16
- 0x8830190E, // 0064 GETMBR R12 R12 K14
- 0x88340910, // 0065 GETMBR R13 R4 K16
- 0x9032200D, // 0066 SETMBR R12 K16 R13
- 0x88301710, // 0067 GETMBR R12 R11 K16
- 0x90323A0A, // 0068 SETMBR R12 K29 R10
- 0x88300D0C, // 0069 GETMBR R12 R6 K12
- 0x8C301921, // 006A GETMET R12 R12 K33
- 0x5C381600, // 006B MOVE R14 R11
- 0x7C300400, // 006C CALL R12 2
- 0xB8320A00, // 006D GETNGBL R12 K5
- 0x8C301913, // 006E GETMET R12 R12 K19
- 0x8838090F, // 006F GETMBR R14 R4 K15
- 0x883C0910, // 0070 GETMBR R15 R4 K16
- 0x7C300600, // 0071 CALL R12 3
- 0x5C241800, // 0072 MOVE R9 R12
- 0x4C300000, // 0073 LDNIL R12
- 0x1C30120C, // 0074 EQ R12 R9 R12
- 0x78320005, // 0075 JMPF R12 #007C
- 0x8C300714, // 0076 GETMET R12 R3 K20
- 0x58380022, // 0077 LDCONST R14 K34
- 0x883C090F, // 0078 GETMBR R15 R4 K15
- 0x88400910, // 0079 GETMBR R16 R4 K16
- 0x7C300800, // 007A CALL R12 4
- 0x5C241800, // 007B MOVE R9 R12
- 0xB8320200, // 007C GETNGBL R12 K1
- 0x8C301902, // 007D GETMET R12 R12 K2
- 0x8C380714, // 007E GETMET R14 R3 K20
- 0x58400023, // 007F LDCONST R16 K35
- 0x5C441200, // 0080 MOVE R17 R9
- 0x7C380600, // 0081 CALL R14 3
- 0x583C0019, // 0082 LDCONST R15 K25
- 0x7C300600, // 0083 CALL R12 3
- 0x70020026, // 0084 JMP #00AC
- 0x88300911, // 0085 GETMBR R12 R4 K17
- 0x4C340000, // 0086 LDNIL R13
- 0x2030180D, // 0087 NE R12 R12 R13
- 0x78320022, // 0088 JMPF R12 #00AC
- 0xB8320A00, // 0089 GETNGBL R12 K5
- 0x8C301924, // 008A GETMET R12 R12 K36
- 0x7C300200, // 008B CALL R12 1
- 0x902E220C, // 008C SETMBR R11 K17 R12
- 0x88301711, // 008D GETMBR R12 R11 K17
- 0xB8360A00, // 008E GETNGBL R13 K5
- 0x8C341B20, // 008F GETMET R13 R13 K32
- 0x7C340200, // 0090 CALL R13 1
- 0x90321C0D, // 0091 SETMBR R12 K14 R13
- 0x88301711, // 0092 GETMBR R12 R11 K17
- 0x8830190E, // 0093 GETMBR R12 R12 K14
- 0x8834090D, // 0094 GETMBR R13 R4 K13
- 0x90321A0D, // 0095 SETMBR R12 K13 R13
- 0x88301711, // 0096 GETMBR R12 R11 K17
- 0x8830190E, // 0097 GETMBR R12 R12 K14
- 0x8834090F, // 0098 GETMBR R13 R4 K15
- 0x90321E0D, // 0099 SETMBR R12 K15 R13
- 0x88301711, // 009A GETMBR R12 R11 K17
- 0x8830190E, // 009B GETMBR R12 R12 K14
- 0x88340910, // 009C GETMBR R13 R4 K16
- 0x9032200D, // 009D SETMBR R12 K16 R13
- 0x88301711, // 009E GETMBR R12 R11 K17
- 0xB8360A00, // 009F GETNGBL R13 K5
- 0x8C341B25, // 00A0 GETMET R13 R13 K37
- 0x7C340200, // 00A1 CALL R13 1
- 0x9032220D, // 00A2 SETMBR R12 K17 R13
- 0x88301711, // 00A3 GETMBR R12 R11 K17
- 0x88301911, // 00A4 GETMBR R12 R12 K17
- 0x88340911, // 00A5 GETMBR R13 R4 K17
- 0x9032220D, // 00A6 SETMBR R12 K17 R13
- 0x88300D0C, // 00A7 GETMBR R12 R6 K12
- 0x8C301921, // 00A8 GETMET R12 R12 K33
- 0x5C381600, // 00A9 MOVE R14 R11
- 0x7C300400, // 00AA CALL R12 2
- 0x7001FFFF, // 00AB JMP #00AC
- 0x7001FF71, // 00AC JMP #001F
- 0x581C0026, // 00AD LDCONST R7 K38
- 0xAC1C0200, // 00AE CATCH R7 1 0
- 0xB0080000, // 00AF RAISE 2 R0 R0
- 0xB81E0200, // 00B0 GETNGBL R7 K1
- 0x8C1C0F02, // 00B1 GETMET R7 R7 K2
- 0x60240008, // 00B2 GETGBL R9 G8
- 0x88280D0C, // 00B3 GETMBR R10 R6 K12
- 0x7C240200, // 00B4 CALL R9 1
- 0x00264E09, // 00B5 ADD R9 K39 R9
- 0x58280004, // 00B6 LDCONST R10 K4
- 0x7C1C0600, // 00B7 CALL R7 3
- 0x601C000C, // 00B8 GETGBL R7 G12
- 0x88200D0C, // 00B9 GETMBR R8 R6 K12
- 0x7C1C0200, // 00BA CALL R7 1
- 0x241C0F28, // 00BB GT R7 R7 K40
- 0x781E0024, // 00BC JMPF R7 #00E2
- 0xB81E0200, // 00BD GETNGBL R7 K1
- 0x8C1C0F02, // 00BE GETMET R7 R7 K2
- 0x60240008, // 00BF GETGBL R9 G8
- 0x5C280C00, // 00C0 MOVE R10 R6
- 0x7C240200, // 00C1 CALL R9 1
- 0x00265209, // 00C2 ADD R9 K41 R9
- 0x58280004, // 00C3 LDCONST R10 K4
- 0x7C1C0600, // 00C4 CALL R7 3
- 0xB81E0200, // 00C5 GETNGBL R7 K1
- 0x8C1C0F02, // 00C6 GETMET R7 R7 K2
- 0x60240008, // 00C7 GETGBL R9 G8
- 0x8C280D2B, // 00C8 GETMET R10 R6 K43
- 0x7C280200, // 00C9 CALL R10 1
- 0x7C240200, // 00CA CALL R9 1
- 0x00265409, // 00CB ADD R9 K42 R9
- 0x58280004, // 00CC LDCONST R10 K4
- 0x7C1C0600, // 00CD CALL R7 3
- 0x8C1C032C, // 00CE GETMET R7 R1 K44
- 0x54260008, // 00CF LDINT R9 9
- 0x50280200, // 00D0 LDBOOL R10 1 0
- 0x7C1C0600, // 00D1 CALL R7 3
- 0x8C200F2D, // 00D2 GETMET R8 R7 K45
- 0x8C280D2B, // 00D3 GETMET R10 R6 K43
- 0x7C280200, // 00D4 CALL R10 1
- 0x8C28152D, // 00D5 GETMET R10 R10 K45
- 0x7C280200, // 00D6 CALL R10 1
- 0x7C200400, // 00D7 CALL R8 2
- 0x8C200F2E, // 00D8 GETMET R8 R7 K46
- 0x7C200200, // 00D9 CALL R8 1
- 0x8820011A, // 00DA GETMBR R8 R0 K26
- 0x8C20112F, // 00DB GETMET R8 R8 K47
- 0x88280F30, // 00DC GETMBR R10 R7 K48
- 0x882C0317, // 00DD GETMBR R11 R1 K23
- 0x88300318, // 00DE GETMBR R12 R1 K24
- 0x88340F31, // 00DF GETMBR R13 R7 K49
- 0x7C200A00, // 00E0 CALL R8 5
- 0x7002000E, // 00E1 JMP #00F1
- 0x881C0332, // 00E2 GETMBR R7 R1 K50
- 0x781E000C, // 00E3 JMPF R7 #00F1
- 0x8C1C0333, // 00E4 GETMET R7 R1 K51
- 0x7C1C0200, // 00E5 CALL R7 1
- 0x8C200F2D, // 00E6 GETMET R8 R7 K45
- 0x7C200200, // 00E7 CALL R8 1
- 0x8C200F2E, // 00E8 GETMET R8 R7 K46
- 0x7C200200, // 00E9 CALL R8 1
- 0x8820011A, // 00EA GETMBR R8 R0 K26
- 0x8C20112F, // 00EB GETMET R8 R8 K47
- 0x88280F30, // 00EC GETMBR R10 R7 K48
- 0x882C0317, // 00ED GETMBR R11 R1 K23
- 0x88300318, // 00EE GETMBR R12 R1 K24
- 0x88340F31, // 00EF GETMBR R13 R7 K49
- 0x7C200A00, // 00F0 CALL R8 5
- 0x80000000, // 00F1 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified function: init
********************************************************************/
be_local_closure(Matter_IM_init, /* name */
be_nested_proto(
- 3, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(responder),
- /* K1 */ be_nested_str_weak(device),
- }),
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[ 3]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x90020202, // 0001 SETMBR R0 K1 R2
- 0x80000000, // 0002 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-extern const bclass be_class_Matter_Attr_Report;
-
-/********************************************************************
-** Solidified class: Matter_Attr_Report
-********************************************************************/
-be_local_class(Matter_Attr_Report,
- 3,
- NULL,
- be_nested_map(3,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(ret, 1), be_const_var(0) },
- { be_const_key_weak(expiration, 2), be_const_var(2) },
- { be_const_key_weak(resp, -1), be_const_var(1) },
- })),
- be_str_weak(Matter_Attr_Report)
-);
-
-/********************************************************************
-** Solidified function: send_attr_report
-********************************************************************/
-be_local_closure(Matter_IM_send_attr_report, /* name */
- be_nested_proto(
- 14, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[23]) { /* constants */
- /* K0 */ be_const_class(be_class_Matter_Attr_Report),
- /* K1 */ be_const_int(0),
- /* K2 */ be_nested_str_weak(attribute_reports),
- /* K3 */ be_nested_str_weak(to_TLV),
- /* K4 */ be_nested_str_weak(encode),
- /* K5 */ be_const_int(1),
- /* K6 */ be_nested_str_weak(MAX_MESSAGE),
- /* K7 */ be_const_int(2147483647),
- /* K8 */ be_nested_str_weak(more_chunked_messages),
- /* K9 */ be_nested_str_weak(build_response),
- /* K10 */ be_nested_str_weak(encrypt),
- /* K11 */ be_nested_str_weak(responder),
- /* K12 */ be_nested_str_weak(send_response),
- /* K13 */ be_nested_str_weak(raw),
- /* K14 */ be_nested_str_weak(remote_ip),
- /* K15 */ be_nested_str_weak(remote_port),
- /* K16 */ be_nested_str_weak(message_counter),
- /* K17 */ be_nested_str_weak(ret),
- /* K18 */ be_nested_str_weak(resp),
- /* K19 */ be_nested_str_weak(expiration),
- /* K20 */ be_nested_str_weak(tasmota),
- /* K21 */ be_nested_str_weak(millis),
- /* K22 */ be_nested_str_weak(MSG_TIMEOUT),
- }),
- be_str_weak(send_attr_report),
- &be_const_str_solidified,
- ( &(const binstruction[93]) { /* code */
- 0x580C0000, // 0000 LDCONST R3 K0
- 0xB4000000, // 0001 CLASS K0
- 0x58100001, // 0002 LDCONST R4 K1
- 0x58140001, // 0003 LDCONST R5 K1
- 0x6018000C, // 0004 GETGBL R6 G12
- 0x881C0502, // 0005 GETMBR R7 R2 K2
- 0x7C180200, // 0006 CALL R6 1
- 0x24180D01, // 0007 GT R6 R6 K1
- 0x781A0009, // 0008 JMPF R6 #0013
- 0x6018000C, // 0009 GETGBL R6 G12
- 0x881C0502, // 000A GETMBR R7 R2 K2
- 0x941C0F01, // 000B GETIDX R7 R7 K1
- 0x8C1C0F03, // 000C GETMET R7 R7 K3
- 0x7C1C0200, // 000D CALL R7 1
- 0x8C1C0F04, // 000E GETMET R7 R7 K4
- 0x7C1C0200, // 000F CALL R7 1
- 0x7C180200, // 0010 CALL R6 1
- 0x5C100C00, // 0011 MOVE R4 R6
- 0x58140005, // 0012 LDCONST R5 K5
- 0x88180106, // 0013 GETMBR R6 R0 K6
- 0x14180806, // 0014 LT R6 R4 R6
- 0x781A0013, // 0015 JMPF R6 #002A
- 0x6018000C, // 0016 GETGBL R6 G12
- 0x881C0502, // 0017 GETMBR R7 R2 K2
- 0x7C180200, // 0018 CALL R6 1
- 0x14180A06, // 0019 LT R6 R5 R6
- 0x781A000E, // 001A JMPF R6 #002A
- 0x6018000C, // 001B GETGBL R6 G12
- 0x881C0502, // 001C GETMBR R7 R2 K2
- 0x941C0E05, // 001D GETIDX R7 R7 R5
- 0x8C1C0F03, // 001E GETMET R7 R7 K3
- 0x7C1C0200, // 001F CALL R7 1
- 0x8C1C0F04, // 0020 GETMET R7 R7 K4
- 0x7C1C0200, // 0021 CALL R7 1
- 0x7C180200, // 0022 CALL R6 1
- 0x001C0806, // 0023 ADD R7 R4 R6
- 0x88200106, // 0024 GETMBR R8 R0 K6
- 0x141C0E08, // 0025 LT R7 R7 R8
- 0x781E0001, // 0026 JMPF R7 #0029
- 0x00100806, // 0027 ADD R4 R4 R6
- 0x00140B05, // 0028 ADD R5 R5 K5
- 0x7001FFE8, // 0029 JMP #0013
- 0x40180B07, // 002A CONNECT R6 R5 K7
- 0x881C0502, // 002B GETMBR R7 R2 K2
- 0x94180E06, // 002C GETIDX R6 R7 R6
- 0x04200B05, // 002D SUB R8 R5 K5
- 0x40220208, // 002E CONNECT R8 K1 R8
- 0x88240502, // 002F GETMBR R9 R2 K2
- 0x94201208, // 0030 GETIDX R8 R9 R8
- 0x900A0408, // 0031 SETMBR R2 K2 R8
- 0x6020000C, // 0032 GETGBL R8 G12
- 0x5C240C00, // 0033 MOVE R9 R6
- 0x7C200200, // 0034 CALL R8 1
- 0x24201101, // 0035 GT R8 R8 K1
- 0x78220001, // 0036 JMPF R8 #0039
- 0x50200200, // 0037 LDBOOL R8 1 0
- 0x900A1008, // 0038 SETMBR R2 K8 R8
- 0x8C1C0309, // 0039 GETMET R7 R1 K9
- 0x54260004, // 003A LDINT R9 5
- 0x50280200, // 003B LDBOOL R10 1 0
- 0x7C1C0600, // 003C CALL R7 3
- 0x8C200F04, // 003D GETMET R8 R7 K4
- 0x8C280503, // 003E GETMET R10 R2 K3
- 0x7C280200, // 003F CALL R10 1
- 0x8C281504, // 0040 GETMET R10 R10 K4
- 0x7C280200, // 0041 CALL R10 1
- 0x7C200400, // 0042 CALL R8 2
- 0x8C200F0A, // 0043 GETMET R8 R7 K10
- 0x7C200200, // 0044 CALL R8 1
- 0x8820010B, // 0045 GETMBR R8 R0 K11
- 0x8C20110C, // 0046 GETMET R8 R8 K12
- 0x88280F0D, // 0047 GETMBR R10 R7 K13
- 0x882C030E, // 0048 GETMBR R11 R1 K14
- 0x8830030F, // 0049 GETMBR R12 R1 K15
- 0x88340F10, // 004A GETMBR R13 R7 K16
- 0x7C200A00, // 004B CALL R8 5
- 0x6020000C, // 004C GETGBL R8 G12
- 0x5C240C00, // 004D MOVE R9 R6
- 0x7C200200, // 004E CALL R8 1
- 0x24201101, // 004F GT R8 R8 K1
- 0x7822000A, // 0050 JMPF R8 #005C
- 0x900A0406, // 0051 SETMBR R2 K2 R6
- 0x5C200600, // 0052 MOVE R8 R3
- 0x7C200000, // 0053 CALL R8 0
- 0x90222202, // 0054 SETMBR R8 K17 R2
- 0x90222407, // 0055 SETMBR R8 K18 R7
- 0xB8262800, // 0056 GETNGBL R9 K20
- 0x8C241315, // 0057 GETMET R9 R9 K21
- 0x7C240200, // 0058 CALL R9 1
- 0x88280116, // 0059 GETMBR R10 R0 K22
- 0x0024120A, // 005A ADD R9 R9 R10
- 0x90222609, // 005B SETMBR R8 K19 R9
- 0x80000000, // 005C RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: subscribe_response
-********************************************************************/
-be_local_closure(Matter_IM_subscribe_response, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(SubscribeResponseMessage),
- /* K3 */ be_nested_str_weak(from_TLV),
- /* K4 */ be_nested_str_weak(tasmota),
- /* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20SubscribeResponsetMessage_X3D),
- /* K7 */ be_const_int(3),
- }),
- be_str_weak(subscribe_response),
- &be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0xB8120200, // 0001 GETNGBL R4 K1
- 0x8C100902, // 0002 GETMET R4 R4 K2
- 0x7C100200, // 0003 CALL R4 1
- 0x8C100903, // 0004 GETMET R4 R4 K3
- 0x5C180400, // 0005 MOVE R6 R2
- 0x7C100400, // 0006 CALL R4 2
- 0xB8160800, // 0007 GETNGBL R5 K4
- 0x8C140B05, // 0008 GETMET R5 R5 K5
- 0x601C0008, // 0009 GETGBL R7 G8
- 0x5C200800, // 000A MOVE R8 R4
- 0x7C1C0200, // 000B CALL R7 1
- 0x001E0C07, // 000C ADD R7 K6 R7
- 0x58200007, // 000D LDCONST R8 K7
- 0x7C140600, // 000E CALL R5 3
- 0x50140000, // 000F LDBOOL R5 0 0
- 0x80040A00, // 0010 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: subscribe_request
-********************************************************************/
-be_local_closure(Matter_IM_subscribe_request, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(SubscribeRequestMessage),
- /* K3 */ be_nested_str_weak(from_TLV),
- /* K4 */ be_nested_str_weak(tasmota),
- /* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20SubscribeRequestMessage_X3D),
- /* K7 */ be_const_int(3),
- }),
- be_str_weak(subscribe_request),
- &be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0xB8120200, // 0001 GETNGBL R4 K1
- 0x8C100902, // 0002 GETMET R4 R4 K2
- 0x7C100200, // 0003 CALL R4 1
- 0x8C100903, // 0004 GETMET R4 R4 K3
- 0x5C180400, // 0005 MOVE R6 R2
- 0x7C100400, // 0006 CALL R4 2
- 0xB8160800, // 0007 GETNGBL R5 K4
- 0x8C140B05, // 0008 GETMET R5 R5 K5
- 0x601C0008, // 0009 GETGBL R7 G8
- 0x5C200800, // 000A MOVE R8 R4
- 0x7C1C0200, // 000B CALL R7 1
- 0x001E0C07, // 000C ADD R7 K6 R7
- 0x58200007, // 000D LDCONST R8 K7
- 0x7C140600, // 000E CALL R5 3
- 0x50140000, // 000F LDBOOL R5 0 0
- 0x80040A00, // 0010 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: process_write_response
-********************************************************************/
-be_local_closure(Matter_IM_process_write_response, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(WriteResponseMessage),
- /* K3 */ be_nested_str_weak(from_TLV),
- /* K4 */ be_nested_str_weak(tasmota),
- /* K5 */ be_nested_str_weak(log),
- /* K6 */ be_nested_str_weak(MTR_X3A_X20received_X20WriteResponseMessage_X3D),
- /* K7 */ be_const_int(3),
- }),
- be_str_weak(process_write_response),
- &be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0xB8120200, // 0001 GETNGBL R4 K1
- 0x8C100902, // 0002 GETMET R4 R4 K2
- 0x7C100200, // 0003 CALL R4 1
- 0x8C100903, // 0004 GETMET R4 R4 K3
- 0x5C180400, // 0005 MOVE R6 R2
- 0x7C100400, // 0006 CALL R4 2
- 0xB8160800, // 0007 GETNGBL R5 K4
- 0x8C140B05, // 0008 GETMET R5 R5 K5
- 0x601C0008, // 0009 GETGBL R7 G8
- 0x5C200800, // 000A MOVE R8 R4
- 0x7C1C0200, // 000B CALL R7 1
- 0x001E0C07, // 000C ADD R7 K6 R7
- 0x58200007, // 000D LDCONST R8 K7
- 0x7C140600, // 000E CALL R5 3
- 0x50140000, // 000F LDBOOL R5 0 0
- 0x80040A00, // 0010 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: process_incoming
-********************************************************************/
-be_local_closure(Matter_IM_process_incoming, /* name */
- be_nested_proto(
- 9, /* nstack */
+ 5, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
@@ -1526,166 +2542,103 @@ be_local_closure(Matter_IM_process_incoming, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[27]) { /* constants */
- /* K0 */ be_nested_str_weak(tasmota),
- /* K1 */ be_nested_str_weak(log),
- /* K2 */ be_nested_str_weak(MTR_X3A_X20received_X20IM_X20message_X20),
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(device),
+ /* K1 */ be_nested_str_weak(send_queue),
+ /* K2 */ be_nested_str_weak(subs_shop),
/* K3 */ be_nested_str_weak(matter),
- /* K4 */ be_nested_str_weak(inspect),
- /* K5 */ be_const_int(3),
- /* K6 */ be_nested_str_weak(TLV),
- /* K7 */ be_nested_str_weak(parse),
- /* K8 */ be_nested_str_weak(raw),
- /* K9 */ be_nested_str_weak(app_payload_idx),
- /* K10 */ be_nested_str_weak(MTR_X3A_X20IM_X20TLV_X3A_X20),
- /* K11 */ be_nested_str_weak(findsubval),
- /* K12 */ be_nested_str_weak(MTR_X3A_X20InteractionModelRevision_X3D),
- /* K13 */ be_nested_str_weak(nil),
- /* K14 */ be_nested_str_weak(opcode),
- /* K15 */ be_const_int(1),
- /* K16 */ be_nested_str_weak(process_status_response),
- /* K17 */ be_const_int(2),
- /* K18 */ be_nested_str_weak(process_read_request),
- /* K19 */ be_nested_str_weak(subscribe_request),
- /* K20 */ be_nested_str_weak(subscribe_response),
- /* K21 */ be_nested_str_weak(report_data),
- /* K22 */ be_nested_str_weak(process_write_request),
- /* K23 */ be_nested_str_weak(process_write_response),
- /* K24 */ be_nested_str_weak(process_invoke_request),
- /* K25 */ be_nested_str_weak(process_invoke_response),
- /* K26 */ be_nested_str_weak(process_timed_request),
+ /* K4 */ be_nested_str_weak(IM_Subscription_Shop),
}),
- be_str_weak(process_incoming),
+ be_str_weak(init),
&be_const_str_solidified,
- ( &(const binstruction[128]) { /* code */
- 0xB80A0000, // 0000 GETNGBL R2 K0
- 0x8C080501, // 0001 GETMET R2 R2 K1
- 0xB8120600, // 0002 GETNGBL R4 K3
- 0x8C100904, // 0003 GETMET R4 R4 K4
- 0x5C180200, // 0004 MOVE R6 R1
- 0x7C100400, // 0005 CALL R4 2
- 0x00120404, // 0006 ADD R4 K2 R4
- 0x58140005, // 0007 LDCONST R5 K5
- 0x7C080600, // 0008 CALL R2 3
- 0xB80A0600, // 0009 GETNGBL R2 K3
- 0x88080506, // 000A GETMBR R2 R2 K6
- 0x8C080507, // 000B GETMET R2 R2 K7
- 0x88100308, // 000C GETMBR R4 R1 K8
- 0x88140309, // 000D GETMBR R5 R1 K9
- 0x7C080600, // 000E CALL R2 3
- 0xB80E0000, // 000F GETNGBL R3 K0
- 0x8C0C0701, // 0010 GETMET R3 R3 K1
- 0x60140008, // 0011 GETGBL R5 G8
- 0x5C180400, // 0012 MOVE R6 R2
- 0x7C140200, // 0013 CALL R5 1
- 0x00161405, // 0014 ADD R5 K10 R5
- 0x58180005, // 0015 LDCONST R6 K5
- 0x7C0C0600, // 0016 CALL R3 3
- 0x8C0C050B, // 0017 GETMET R3 R2 K11
- 0x541600FE, // 0018 LDINT R5 255
- 0x7C0C0400, // 0019 CALL R3 2
- 0xB8120000, // 001A GETNGBL R4 K0
- 0x8C100901, // 001B GETMET R4 R4 K1
- 0x4C180000, // 001C LDNIL R6
- 0x20180606, // 001D NE R6 R3 R6
- 0x781A0003, // 001E JMPF R6 #0023
- 0x60180008, // 001F GETGBL R6 G8
- 0x5C1C0600, // 0020 MOVE R7 R3
- 0x7C180200, // 0021 CALL R6 1
- 0x70020000, // 0022 JMP #0024
- 0x5818000D, // 0023 LDCONST R6 K13
- 0x001A1806, // 0024 ADD R6 K12 R6
- 0x581C0005, // 0025 LDCONST R7 K5
- 0x7C100600, // 0026 CALL R4 3
- 0x8810030E, // 0027 GETMBR R4 R1 K14
- 0x1C14090F, // 0028 EQ R5 R4 K15
- 0x78160005, // 0029 JMPF R5 #0030
- 0x8C140110, // 002A GETMET R5 R0 K16
- 0x5C1C0200, // 002B MOVE R7 R1
- 0x5C200400, // 002C MOVE R8 R2
- 0x7C140600, // 002D CALL R5 3
- 0x80040A00, // 002E RET 1 R5
- 0x7002004D, // 002F JMP #007E
- 0x1C140911, // 0030 EQ R5 R4 K17
- 0x78160005, // 0031 JMPF R5 #0038
- 0x8C140112, // 0032 GETMET R5 R0 K18
- 0x5C1C0200, // 0033 MOVE R7 R1
- 0x5C200400, // 0034 MOVE R8 R2
- 0x7C140600, // 0035 CALL R5 3
- 0x80040A00, // 0036 RET 1 R5
- 0x70020045, // 0037 JMP #007E
- 0x1C140905, // 0038 EQ R5 R4 K5
- 0x78160005, // 0039 JMPF R5 #0040
- 0x8C140113, // 003A GETMET R5 R0 K19
- 0x5C1C0200, // 003B MOVE R7 R1
- 0x5C200400, // 003C MOVE R8 R2
- 0x7C140600, // 003D CALL R5 3
- 0x80040A00, // 003E RET 1 R5
- 0x7002003D, // 003F JMP #007E
- 0x54160003, // 0040 LDINT R5 4
- 0x1C140805, // 0041 EQ R5 R4 R5
- 0x78160005, // 0042 JMPF R5 #0049
- 0x8C140114, // 0043 GETMET R5 R0 K20
- 0x5C1C0200, // 0044 MOVE R7 R1
- 0x5C200400, // 0045 MOVE R8 R2
- 0x7C140600, // 0046 CALL R5 3
- 0x80040A00, // 0047 RET 1 R5
- 0x70020034, // 0048 JMP #007E
- 0x54160004, // 0049 LDINT R5 5
- 0x1C140805, // 004A EQ R5 R4 R5
- 0x78160005, // 004B JMPF R5 #0052
- 0x8C140115, // 004C GETMET R5 R0 K21
- 0x5C1C0200, // 004D MOVE R7 R1
- 0x5C200400, // 004E MOVE R8 R2
- 0x7C140600, // 004F CALL R5 3
- 0x80040A00, // 0050 RET 1 R5
- 0x7002002B, // 0051 JMP #007E
- 0x54160005, // 0052 LDINT R5 6
- 0x1C140805, // 0053 EQ R5 R4 R5
- 0x78160005, // 0054 JMPF R5 #005B
- 0x8C140116, // 0055 GETMET R5 R0 K22
- 0x5C1C0200, // 0056 MOVE R7 R1
- 0x5C200400, // 0057 MOVE R8 R2
- 0x7C140600, // 0058 CALL R5 3
- 0x80040A00, // 0059 RET 1 R5
- 0x70020022, // 005A JMP #007E
- 0x54160006, // 005B LDINT R5 7
- 0x1C140805, // 005C EQ R5 R4 R5
- 0x78160005, // 005D JMPF R5 #0064
- 0x8C140117, // 005E GETMET R5 R0 K23
- 0x5C1C0200, // 005F MOVE R7 R1
- 0x5C200400, // 0060 MOVE R8 R2
- 0x7C140600, // 0061 CALL R5 3
- 0x80040A00, // 0062 RET 1 R5
- 0x70020019, // 0063 JMP #007E
- 0x54160007, // 0064 LDINT R5 8
- 0x1C140805, // 0065 EQ R5 R4 R5
- 0x78160005, // 0066 JMPF R5 #006D
- 0x8C140118, // 0067 GETMET R5 R0 K24
- 0x5C1C0200, // 0068 MOVE R7 R1
- 0x5C200400, // 0069 MOVE R8 R2
- 0x7C140600, // 006A CALL R5 3
- 0x80040A00, // 006B RET 1 R5
- 0x70020010, // 006C JMP #007E
- 0x54160008, // 006D LDINT R5 9
- 0x1C140805, // 006E EQ R5 R4 R5
- 0x78160005, // 006F JMPF R5 #0076
- 0x8C140119, // 0070 GETMET R5 R0 K25
- 0x5C1C0200, // 0071 MOVE R7 R1
- 0x5C200400, // 0072 MOVE R8 R2
- 0x7C140600, // 0073 CALL R5 3
- 0x80040A00, // 0074 RET 1 R5
- 0x70020007, // 0075 JMP #007E
- 0x54160009, // 0076 LDINT R5 10
- 0x1C140805, // 0077 EQ R5 R4 R5
- 0x78160004, // 0078 JMPF R5 #007E
- 0x8C14011A, // 0079 GETMET R5 R0 K26
- 0x5C1C0200, // 007A MOVE R7 R1
- 0x5C200400, // 007B MOVE R8 R2
- 0x7C140600, // 007C CALL R5 3
- 0x80040A00, // 007D RET 1 R5
- 0x50140000, // 007E LDBOOL R5 0 0
- 0x80040A00, // 007F RET 1 R5
+ ( &(const binstruction[10]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x60080012, // 0001 GETGBL R2 G18
+ 0x7C080000, // 0002 CALL R2 0
+ 0x90020202, // 0003 SETMBR R0 K1 R2
+ 0xB80A0600, // 0004 GETNGBL R2 K3
+ 0x8C080504, // 0005 GETMET R2 R2 K4
+ 0x5C100000, // 0006 MOVE R4 R0
+ 0x7C080400, // 0007 CALL R2 2
+ 0x90020402, // 0008 SETMBR R0 K2 R2
+ 0x80000000, // 0009 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_subscribe_heartbeat
+********************************************************************/
+be_local_closure(Matter_IM_send_subscribe_heartbeat, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[18]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(session),
+ /* K2 */ be_nested_str_weak(tasmota),
+ /* K3 */ be_nested_str_weak(log),
+ /* K4 */ be_nested_str_weak(format),
+ /* K5 */ be_nested_str_weak(MTR_X3A_X20_X3CSub_Alive_X20_X28_X256i_X29_X20sub_X3D_X25i),
+ /* K6 */ be_nested_str_weak(local_session_id),
+ /* K7 */ be_nested_str_weak(subscription_id),
+ /* K8 */ be_const_int(2),
+ /* K9 */ be_nested_str_weak(is_keep_alive),
+ /* K10 */ be_nested_str_weak(matter),
+ /* K11 */ be_nested_str_weak(ReportDataMessage),
+ /* K12 */ be_nested_str_weak(suppress_response),
+ /* K13 */ be_nested_str_weak(IM_SubscribedHeartbeat),
+ /* K14 */ be_nested_str_weak(_message_handler),
+ /* K15 */ be_nested_str_weak(send_queue),
+ /* K16 */ be_nested_str_weak(push),
+ /* K17 */ be_nested_str_weak(send_enqueued),
+ }),
+ be_str_weak(send_subscribe_heartbeat),
+ &be_const_str_solidified,
+ ( &(const binstruction[35]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0x880C0301, // 0001 GETMBR R3 R1 K1
+ 0xB8120400, // 0002 GETNGBL R4 K2
+ 0x8C100903, // 0003 GETMET R4 R4 K3
+ 0x8C180504, // 0004 GETMET R6 R2 K4
+ 0x58200005, // 0005 LDCONST R8 K5
+ 0x88240706, // 0006 GETMBR R9 R3 K6
+ 0x88280307, // 0007 GETMBR R10 R1 K7
+ 0x7C180800, // 0008 CALL R6 4
+ 0x581C0008, // 0009 LDCONST R7 K8
+ 0x7C100600, // 000A CALL R4 3
+ 0x50100200, // 000B LDBOOL R4 1 0
+ 0x90061204, // 000C SETMBR R1 K9 R4
+ 0xB8121400, // 000D GETNGBL R4 K10
+ 0x8C10090B, // 000E GETMET R4 R4 K11
+ 0x7C100200, // 000F CALL R4 1
+ 0x50140200, // 0010 LDBOOL R5 1 0
+ 0x90121805, // 0011 SETMBR R4 K12 R5
+ 0x88140307, // 0012 GETMBR R5 R1 K7
+ 0x90120E05, // 0013 SETMBR R4 K7 R5
+ 0xB8161400, // 0014 GETNGBL R5 K10
+ 0x8C140B0D, // 0015 GETMET R5 R5 K13
+ 0x881C070E, // 0016 GETMBR R7 R3 K14
+ 0x5C200600, // 0017 MOVE R8 R3
+ 0x5C240800, // 0018 MOVE R9 R4
+ 0x5C280200, // 0019 MOVE R10 R1
+ 0x7C140A00, // 001A CALL R5 5
+ 0x8818010F, // 001B GETMBR R6 R0 K15
+ 0x8C180D10, // 001C GETMET R6 R6 K16
+ 0x5C200A00, // 001D MOVE R8 R5
+ 0x7C180400, // 001E CALL R6 2
+ 0x8C180111, // 001F GETMET R6 R0 K17
+ 0x8820070E, // 0020 GETMBR R8 R3 K14
+ 0x7C180400, // 0021 CALL R6 2
+ 0x80000000, // 0022 RET 0
})
)
);
@@ -1696,28 +2649,41 @@ be_local_closure(Matter_IM_process_incoming, /* name */
** Solidified class: Matter_IM
********************************************************************/
be_local_class(Matter_IM,
- 2,
+ 3,
NULL,
- be_nested_map(18,
+ be_nested_map(31,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(process_timed_request, 14), be_const_closure(Matter_IM_process_timed_request_closure) },
- { be_const_key_weak(responder, -1), be_const_var(0) },
- { be_const_key_weak(process_read_request, -1), be_const_closure(Matter_IM_process_read_request_closure) },
- { be_const_key_weak(every_second, 2), be_const_closure(Matter_IM_every_second_closure) },
- { be_const_key_weak(report_data, -1), be_const_closure(Matter_IM_report_data_closure) },
- { be_const_key_weak(process_invoke_response, -1), be_const_closure(Matter_IM_process_invoke_response_closure) },
- { be_const_key_weak(process_write_response, -1), be_const_closure(Matter_IM_process_write_response_closure) },
- { be_const_key_weak(device, -1), be_const_var(1) },
- { be_const_key_weak(subscribe_request, -1), be_const_closure(Matter_IM_subscribe_request_closure) },
+ { be_const_key_weak(send_subscribe_heartbeat, -1), be_const_closure(Matter_IM_send_subscribe_heartbeat_closure) },
+ { be_const_key_weak(subs_shop, 23), be_const_var(1) },
+ { be_const_key_weak(send_queue, 30), be_const_var(2) },
{ be_const_key_weak(process_invoke_request, -1), be_const_closure(Matter_IM_process_invoke_request_closure) },
- { be_const_key_weak(MAX_MESSAGE, -1), be_const_int(1200) },
- { be_const_key_weak(process_status_response, 10), be_const_closure(Matter_IM_process_status_response_closure) },
- { be_const_key_weak(send_attr_report, -1), be_const_closure(Matter_IM_send_attr_report_closure) },
- { be_const_key_weak(subscribe_response, 8), be_const_closure(Matter_IM_subscribe_response_closure) },
- { be_const_key_weak(process_write_request, -1), be_const_closure(Matter_IM_process_write_request_closure) },
- { be_const_key_weak(init, 7), be_const_closure(Matter_IM_init_closure) },
- { be_const_key_weak(MSG_TIMEOUT, 6), be_const_int(10000) },
+ { be_const_key_weak(subscribe_request, -1), be_const_closure(Matter_IM_subscribe_request_closure) },
+ { be_const_key_weak(process_write_request, 11), be_const_closure(Matter_IM_process_write_request_closure) },
+ { be_const_key_weak(send_write_response, -1), be_const_closure(Matter_IM_send_write_response_closure) },
+ { be_const_key_weak(remove_sendqueue_by_exchangeid, -1), be_const_closure(Matter_IM_remove_sendqueue_by_exchangeid_closure) },
+ { be_const_key_weak(every_second, -1), be_const_closure(Matter_IM_every_second_closure) },
+ { be_const_key_weak(send_ack_now, -1), be_const_closure(Matter_IM_send_ack_now_closure) },
+ { be_const_key_weak(every_250ms, -1), be_const_closure(Matter_IM_every_250ms_closure) },
+ { be_const_key_weak(send_invoke_response, -1), be_const_closure(Matter_IM_send_invoke_response_closure) },
+ { be_const_key_weak(process_invoke_response, 21), be_const_closure(Matter_IM_process_invoke_response_closure) },
+ { be_const_key_weak(_inner_process_read_request, -1), be_const_closure(Matter_IM__inner_process_read_request_closure) },
+ { be_const_key_weak(subscribe_response, 22), be_const_closure(Matter_IM_subscribe_response_closure) },
{ be_const_key_weak(process_incoming, -1), be_const_closure(Matter_IM_process_incoming_closure) },
+ { be_const_key_weak(send_subscribe_response, 18), be_const_closure(Matter_IM_send_subscribe_response_closure) },
+ { be_const_key_weak(find_sendqueue_by_exchangeid, -1), be_const_closure(Matter_IM_find_sendqueue_by_exchangeid_closure) },
+ { be_const_key_weak(process_incoming_ack, 13), be_const_closure(Matter_IM_process_incoming_ack_closure) },
+ { be_const_key_weak(process_read_request, -1), be_const_closure(Matter_IM_process_read_request_closure) },
+ { be_const_key_weak(send_report_data, -1), be_const_closure(Matter_IM_send_report_data_closure) },
+ { be_const_key_weak(process_timed_request, -1), be_const_closure(Matter_IM_process_timed_request_closure) },
+ { be_const_key_weak(process_status_response, -1), be_const_closure(Matter_IM_process_status_response_closure) },
+ { be_const_key_weak(send_subscribe_update, 28), be_const_closure(Matter_IM_send_subscribe_update_closure) },
+ { be_const_key_weak(send_enqueued, -1), be_const_closure(Matter_IM_send_enqueued_closure) },
+ { be_const_key_weak(process_write_response, 12), be_const_closure(Matter_IM_process_write_response_closure) },
+ { be_const_key_weak(report_data, 0), be_const_closure(Matter_IM_report_data_closure) },
+ { be_const_key_weak(device, -1), be_const_var(0) },
+ { be_const_key_weak(send_status, -1), be_const_closure(Matter_IM_send_status_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_IM_init_closure) },
+ { be_const_key_weak(expire_sendqueue, -1), be_const_closure(Matter_IM_expire_sendqueue_closure) },
})),
be_str_weak(Matter_IM)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Data.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Data.h
index 738b9ec91..aecff66c6 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Data.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Data.h
@@ -3026,7 +3026,7 @@ be_local_closure(Matter_SubscribeRequestMessage_from_TLV, /* name */
/* K4 */ be_const_int(1),
/* K5 */ be_nested_str_weak(max_interval_ceiling),
/* K6 */ be_const_int(2),
- /* K7 */ be_nested_str_weak(attribute_requests),
+ /* K7 */ be_nested_str_weak(attributes_requests),
/* K8 */ be_nested_str_weak(from_TLV_array),
/* K9 */ be_const_int(3),
/* K10 */ be_nested_str_weak(matter),
@@ -3041,7 +3041,7 @@ be_local_closure(Matter_SubscribeRequestMessage_from_TLV, /* name */
}),
be_str_weak(from_TLV),
&be_const_str_solidified,
- ( &(const binstruction[54]) { /* code */
+ ( &(const binstruction[58]) { /* code */
0x4C080000, // 0000 LDNIL R2
0x1C080202, // 0001 EQ R2 R1 R2
0x780A0001, // 0002 JMPF R2 #0005
@@ -3049,53 +3049,57 @@ be_local_closure(Matter_SubscribeRequestMessage_from_TLV, /* name */
0x80040400, // 0004 RET 1 R2
0x8C080301, // 0005 GETMET R2 R1 K1
0x58100002, // 0006 LDCONST R4 K2
- 0x7C080400, // 0007 CALL R2 2
- 0x90020002, // 0008 SETMBR R0 K0 R2
- 0x8C080301, // 0009 GETMET R2 R1 K1
- 0x58100004, // 000A LDCONST R4 K4
- 0x7C080400, // 000B CALL R2 2
- 0x90020602, // 000C SETMBR R0 K3 R2
- 0x8C080301, // 000D GETMET R2 R1 K1
- 0x58100006, // 000E LDCONST R4 K6
- 0x7C080400, // 000F CALL R2 2
- 0x90020A02, // 0010 SETMBR R0 K5 R2
- 0x8C080108, // 0011 GETMET R2 R0 K8
- 0x8C100301, // 0012 GETMET R4 R1 K1
- 0x58180009, // 0013 LDCONST R6 K9
- 0x7C100400, // 0014 CALL R4 2
- 0xB8161400, // 0015 GETNGBL R5 K10
- 0x88140B0B, // 0016 GETMBR R5 R5 K11
- 0x7C080600, // 0017 CALL R2 3
- 0x90020E02, // 0018 SETMBR R0 K7 R2
- 0x8C080108, // 0019 GETMET R2 R0 K8
- 0x8C100301, // 001A GETMET R4 R1 K1
- 0x541A0003, // 001B LDINT R6 4
- 0x7C100400, // 001C CALL R4 2
- 0xB8161400, // 001D GETNGBL R5 K10
- 0x88140B0D, // 001E GETMBR R5 R5 K13
- 0x7C080600, // 001F CALL R2 3
- 0x90021802, // 0020 SETMBR R0 K12 R2
- 0x8C080108, // 0021 GETMET R2 R0 K8
- 0x8C100301, // 0022 GETMET R4 R1 K1
- 0x541A0004, // 0023 LDINT R6 5
- 0x7C100400, // 0024 CALL R4 2
- 0xB8161400, // 0025 GETNGBL R5 K10
- 0x88140B0F, // 0026 GETMBR R5 R5 K15
- 0x7C080600, // 0027 CALL R2 3
- 0x90021C02, // 0028 SETMBR R0 K14 R2
- 0x8C080301, // 0029 GETMET R2 R1 K1
- 0x54120006, // 002A LDINT R4 7
- 0x7C080400, // 002B CALL R2 2
- 0x90022002, // 002C SETMBR R0 K16 R2
- 0x8C080108, // 002D GETMET R2 R0 K8
- 0x8C100301, // 002E GETMET R4 R1 K1
- 0x541A0007, // 002F LDINT R6 8
- 0x7C100400, // 0030 CALL R4 2
- 0xB8161400, // 0031 GETNGBL R5 K10
- 0x88140B12, // 0032 GETMBR R5 R5 K18
- 0x7C080600, // 0033 CALL R2 3
- 0x90022202, // 0034 SETMBR R0 K17 R2
- 0x80040000, // 0035 RET 1 R0
+ 0x50140000, // 0007 LDBOOL R5 0 0
+ 0x7C080600, // 0008 CALL R2 3
+ 0x90020002, // 0009 SETMBR R0 K0 R2
+ 0x8C080301, // 000A GETMET R2 R1 K1
+ 0x58100004, // 000B LDCONST R4 K4
+ 0x58140002, // 000C LDCONST R5 K2
+ 0x7C080600, // 000D CALL R2 3
+ 0x90020602, // 000E SETMBR R0 K3 R2
+ 0x8C080301, // 000F GETMET R2 R1 K1
+ 0x58100006, // 0010 LDCONST R4 K6
+ 0x5416003B, // 0011 LDINT R5 60
+ 0x7C080600, // 0012 CALL R2 3
+ 0x90020A02, // 0013 SETMBR R0 K5 R2
+ 0x8C080108, // 0014 GETMET R2 R0 K8
+ 0x8C100301, // 0015 GETMET R4 R1 K1
+ 0x58180009, // 0016 LDCONST R6 K9
+ 0x7C100400, // 0017 CALL R4 2
+ 0xB8161400, // 0018 GETNGBL R5 K10
+ 0x88140B0B, // 0019 GETMBR R5 R5 K11
+ 0x7C080600, // 001A CALL R2 3
+ 0x90020E02, // 001B SETMBR R0 K7 R2
+ 0x8C080108, // 001C GETMET R2 R0 K8
+ 0x8C100301, // 001D GETMET R4 R1 K1
+ 0x541A0003, // 001E LDINT R6 4
+ 0x7C100400, // 001F CALL R4 2
+ 0xB8161400, // 0020 GETNGBL R5 K10
+ 0x88140B0D, // 0021 GETMBR R5 R5 K13
+ 0x7C080600, // 0022 CALL R2 3
+ 0x90021802, // 0023 SETMBR R0 K12 R2
+ 0x8C080108, // 0024 GETMET R2 R0 K8
+ 0x8C100301, // 0025 GETMET R4 R1 K1
+ 0x541A0004, // 0026 LDINT R6 5
+ 0x7C100400, // 0027 CALL R4 2
+ 0xB8161400, // 0028 GETNGBL R5 K10
+ 0x88140B0F, // 0029 GETMBR R5 R5 K15
+ 0x7C080600, // 002A CALL R2 3
+ 0x90021C02, // 002B SETMBR R0 K14 R2
+ 0x8C080301, // 002C GETMET R2 R1 K1
+ 0x54120006, // 002D LDINT R4 7
+ 0x50140000, // 002E LDBOOL R5 0 0
+ 0x7C080600, // 002F CALL R2 3
+ 0x90022002, // 0030 SETMBR R0 K16 R2
+ 0x8C080108, // 0031 GETMET R2 R0 K8
+ 0x8C100301, // 0032 GETMET R4 R1 K1
+ 0x541A0007, // 0033 LDINT R6 8
+ 0x7C100400, // 0034 CALL R4 2
+ 0xB8161400, // 0035 GETNGBL R5 K10
+ 0x88140B12, // 0036 GETMBR R5 R5 K18
+ 0x7C080600, // 0037 CALL R2 3
+ 0x90022202, // 0038 SETMBR R0 K17 R2
+ 0x80040000, // 0039 RET 1 R0
})
)
);
@@ -3130,7 +3134,7 @@ be_local_closure(Matter_SubscribeRequestMessage_to_TLV, /* name */
/* K11 */ be_nested_str_weak(max_interval_ceiling),
/* K12 */ be_nested_str_weak(to_TLV_array),
/* K13 */ be_const_int(3),
- /* K14 */ be_nested_str_weak(attribute_requests),
+ /* K14 */ be_nested_str_weak(attributes_requests),
/* K15 */ be_nested_str_weak(event_requests),
/* K16 */ be_nested_str_weak(event_filters),
/* K17 */ be_nested_str_weak(fabric_filtered),
@@ -3207,13 +3211,13 @@ be_local_class(Matter_SubscribeRequestMessage,
be_nested_map(10,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_weak(to_TLV, -1), be_const_closure(Matter_SubscribeRequestMessage_to_TLV_closure) },
- { be_const_key_weak(event_filters, -1), be_const_var(5) },
- { be_const_key_weak(event_requests, 6), be_const_var(4) },
+ { be_const_key_weak(attributes_requests, 7), be_const_var(3) },
+ { be_const_key_weak(fabric_filtered, 6), be_const_var(6) },
{ be_const_key_weak(min_interval_floor, -1), be_const_var(1) },
{ be_const_key_weak(data_version_filters, -1), be_const_var(7) },
{ be_const_key_weak(max_interval_ceiling, -1), be_const_var(2) },
- { be_const_key_weak(attribute_requests, 7), be_const_var(3) },
- { be_const_key_weak(fabric_filtered, 3), be_const_var(6) },
+ { be_const_key_weak(event_requests, 3), be_const_var(4) },
+ { be_const_key_weak(event_filters, -1), be_const_var(5) },
{ be_const_key_weak(from_TLV, -1), be_const_closure(Matter_SubscribeRequestMessage_from_TLV_closure) },
{ be_const_key_weak(keep_subscriptions, 0), be_const_var(0) },
})),
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Message.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Message.h
new file mode 100644
index 000000000..023811a39
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Message.h
@@ -0,0 +1,1942 @@
+/* Solidification of Matter_IM_Message.h */
+/********************************************************************\
+* Generated code, don't edit *
+\********************************************************************/
+#include "be_constobj.h"
+
+extern const bclass be_class_Matter_IM_Message;
+
+/********************************************************************
+** Solidified function: status_error_received
+********************************************************************/
+be_local_closure(Matter_IM_Message_status_error_received, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 0, /* has constants */
+ NULL, /* no const */
+ be_str_weak(status_error_received),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 1]) { /* code */
+ 0x80000000, // 0000 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_im
+********************************************************************/
+be_local_closure(Matter_IM_Message_send_im, /* name */
+ be_nested_proto(
+ 13, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[24]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(format),
+ /* K4 */ be_nested_str_weak(MTR_X3A_X20IM_Message_X20send_im_X20exch_X3D_X25i_X20ready_X3D_X25i),
+ /* K5 */ be_nested_str_weak(resp),
+ /* K6 */ be_nested_str_weak(exchange_id),
+ /* K7 */ be_nested_str_weak(ready),
+ /* K8 */ be_const_int(1),
+ /* K9 */ be_const_int(0),
+ /* K10 */ be_const_int(3),
+ /* K11 */ be_nested_str_weak(encode_frame),
+ /* K12 */ be_nested_str_weak(data),
+ /* K13 */ be_nested_str_weak(to_TLV),
+ /* K14 */ be_nested_str_weak(tlv2raw),
+ /* K15 */ be_nested_str_weak(encrypt),
+ /* K16 */ be_nested_str_weak(MTR_X3A_X20_X3Csnd_X20_X20_X20_X20_X20_X20_X20_X28_X256i_X29_X20id_X3D_X25i_X20exch_X3D_X25i_X20rack_X3D_X25s),
+ /* K17 */ be_nested_str_weak(session),
+ /* K18 */ be_nested_str_weak(local_session_id),
+ /* K19 */ be_nested_str_weak(message_counter),
+ /* K20 */ be_nested_str_weak(ack_message_counter),
+ /* K21 */ be_nested_str_weak(send_response_frame),
+ /* K22 */ be_nested_str_weak(last_counter),
+ /* K23 */ be_nested_str_weak(finish),
+ }),
+ be_str_weak(send_im),
+ &be_const_str_solidified,
+ ( &(const binstruction[49]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0xB80E0200, // 0001 GETNGBL R3 K1
+ 0x8C0C0702, // 0002 GETMET R3 R3 K2
+ 0x8C140503, // 0003 GETMET R5 R2 K3
+ 0x581C0004, // 0004 LDCONST R7 K4
+ 0x88200105, // 0005 GETMBR R8 R0 K5
+ 0x88201106, // 0006 GETMBR R8 R8 K6
+ 0x88240107, // 0007 GETMBR R9 R0 K7
+ 0x78260001, // 0008 JMPF R9 #000B
+ 0x58240008, // 0009 LDCONST R9 K8
+ 0x70020000, // 000A JMP #000C
+ 0x58240009, // 000B LDCONST R9 K9
+ 0x7C140800, // 000C CALL R5 4
+ 0x5818000A, // 000D LDCONST R6 K10
+ 0x7C0C0600, // 000E CALL R3 3
+ 0x880C0107, // 000F GETMBR R3 R0 K7
+ 0x740E0001, // 0010 JMPT R3 #0013
+ 0x500C0000, // 0011 LDBOOL R3 0 0
+ 0x80040600, // 0012 RET 1 R3
+ 0x880C0105, // 0013 GETMBR R3 R0 K5
+ 0x8C10070B, // 0014 GETMET R4 R3 K11
+ 0x8818010C, // 0015 GETMBR R6 R0 K12
+ 0x8C180D0D, // 0016 GETMET R6 R6 K13
+ 0x7C180200, // 0017 CALL R6 1
+ 0x8C180D0E, // 0018 GETMET R6 R6 K14
+ 0x7C180200, // 0019 CALL R6 1
+ 0x7C100400, // 001A CALL R4 2
+ 0x8C10070F, // 001B GETMET R4 R3 K15
+ 0x7C100200, // 001C CALL R4 1
+ 0xB8120200, // 001D GETNGBL R4 K1
+ 0x8C100902, // 001E GETMET R4 R4 K2
+ 0x8C180503, // 001F GETMET R6 R2 K3
+ 0x58200010, // 0020 LDCONST R8 K16
+ 0x88240711, // 0021 GETMBR R9 R3 K17
+ 0x88241312, // 0022 GETMBR R9 R9 K18
+ 0x88280713, // 0023 GETMBR R10 R3 K19
+ 0x882C0706, // 0024 GETMBR R11 R3 K6
+ 0x88300714, // 0025 GETMBR R12 R3 K20
+ 0x7C180C00, // 0026 CALL R6 6
+ 0x581C000A, // 0027 LDCONST R7 K10
+ 0x7C100600, // 0028 CALL R4 3
+ 0x8C100315, // 0029 GETMET R4 R1 K21
+ 0x5C180600, // 002A MOVE R6 R3
+ 0x7C100400, // 002B CALL R4 2
+ 0x88100713, // 002C GETMBR R4 R3 K19
+ 0x90022C04, // 002D SETMBR R0 K22 R4
+ 0x50100200, // 002E LDBOOL R4 1 0
+ 0x90022E04, // 002F SETMBR R0 K23 R4
+ 0x80000000, // 0030 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_exchangeid
+********************************************************************/
+be_local_closure(Matter_IM_Message_get_exchangeid, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(resp),
+ /* K1 */ be_nested_str_weak(exchange_id),
+ }),
+ be_str_weak(get_exchangeid),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x88040301, // 0001 GETMBR R1 R1 K1
+ 0x80040200, // 0002 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_Message_init, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[10]) { /* constants */
+ /* K0 */ be_nested_str_weak(resp),
+ /* K1 */ be_nested_str_weak(build_response),
+ /* K2 */ be_nested_str_weak(ready),
+ /* K3 */ be_nested_str_weak(expiration),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(millis),
+ /* K6 */ be_nested_str_weak(MSG_TIMEOUT),
+ /* K7 */ be_nested_str_weak(last_counter),
+ /* K8 */ be_const_int(0),
+ /* K9 */ be_nested_str_weak(finish),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0x8C100301, // 0000 GETMET R4 R1 K1
+ 0x5C180400, // 0001 MOVE R6 R2
+ 0x5C1C0600, // 0002 MOVE R7 R3
+ 0x7C100600, // 0003 CALL R4 3
+ 0x90020004, // 0004 SETMBR R0 K0 R4
+ 0x50100200, // 0005 LDBOOL R4 1 0
+ 0x90020404, // 0006 SETMBR R0 K2 R4
+ 0xB8120800, // 0007 GETNGBL R4 K4
+ 0x8C100905, // 0008 GETMET R4 R4 K5
+ 0x7C100200, // 0009 CALL R4 1
+ 0x88140106, // 000A GETMBR R5 R0 K6
+ 0x00100805, // 000B ADD R4 R4 R5
+ 0x90020604, // 000C SETMBR R0 K3 R4
+ 0x90020F08, // 000D SETMBR R0 K7 K8
+ 0x50100000, // 000E LDBOOL R4 0 0
+ 0x90021204, // 000F SETMBR R0 K9 R4
+ 0x80000000, // 0010 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: ack_received
+********************************************************************/
+be_local_closure(Matter_IM_Message_ack_received, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 9]) { /* constants */
+ /* K0 */ be_nested_str_weak(tasmota),
+ /* K1 */ be_nested_str_weak(log),
+ /* K2 */ be_nested_str_weak(MTR_X3A_X20IM_Message_X20ack_received_X20exch_X3D),
+ /* K3 */ be_nested_str_weak(resp),
+ /* K4 */ be_nested_str_weak(exchange_id),
+ /* K5 */ be_const_int(3),
+ /* K6 */ be_nested_str_weak(expiration),
+ /* K7 */ be_nested_str_weak(millis),
+ /* K8 */ be_nested_str_weak(MSG_TIMEOUT),
+ }),
+ be_str_weak(ack_received),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0xB80A0000, // 0000 GETNGBL R2 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x60100008, // 0002 GETGBL R4 G8
+ 0x88140103, // 0003 GETMBR R5 R0 K3
+ 0x88140B04, // 0004 GETMBR R5 R5 K4
+ 0x7C100200, // 0005 CALL R4 1
+ 0x00120404, // 0006 ADD R4 K2 R4
+ 0x58140005, // 0007 LDCONST R5 K5
+ 0x7C080600, // 0008 CALL R2 3
+ 0xB80A0000, // 0009 GETNGBL R2 K0
+ 0x8C080507, // 000A GETMET R2 R2 K7
+ 0x7C080200, // 000B CALL R2 1
+ 0x880C0108, // 000C GETMBR R3 R0 K8
+ 0x00080403, // 000D ADD R2 R2 R3
+ 0x90020C02, // 000E SETMBR R0 K6 R2
+ 0x50080000, // 000F LDBOOL R2 0 0
+ 0x80040400, // 0010 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: reached_timeout
+********************************************************************/
+be_local_closure(Matter_IM_Message_reached_timeout, /* name */
+ be_nested_proto(
+ 1, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 0, /* has constants */
+ NULL, /* no const */
+ be_str_weak(reached_timeout),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 1]) { /* code */
+ 0x80000000, // 0000 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: status_ok_received
+********************************************************************/
+be_local_closure(Matter_IM_Message_status_ok_received, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[15]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(format),
+ /* K4 */ be_nested_str_weak(MTR_X3A_X20IM_Message_X20status_ok_received_X20exch_X3D_X25i),
+ /* K5 */ be_nested_str_weak(resp),
+ /* K6 */ be_nested_str_weak(exchange_id),
+ /* K7 */ be_const_int(3),
+ /* K8 */ be_nested_str_weak(expiration),
+ /* K9 */ be_nested_str_weak(millis),
+ /* K10 */ be_nested_str_weak(MSG_TIMEOUT),
+ /* K11 */ be_nested_str_weak(build_response),
+ /* K12 */ be_nested_str_weak(opcode),
+ /* K13 */ be_nested_str_weak(x_flag_r),
+ /* K14 */ be_nested_str_weak(ready),
+ }),
+ be_str_weak(status_ok_received),
+ &be_const_str_solidified,
+ ( &(const binstruction[29]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0xB80E0200, // 0001 GETNGBL R3 K1
+ 0x8C0C0702, // 0002 GETMET R3 R3 K2
+ 0x8C140503, // 0003 GETMET R5 R2 K3
+ 0x581C0004, // 0004 LDCONST R7 K4
+ 0x88200105, // 0005 GETMBR R8 R0 K5
+ 0x88201106, // 0006 GETMBR R8 R8 K6
+ 0x7C140600, // 0007 CALL R5 3
+ 0x58180007, // 0008 LDCONST R6 K7
+ 0x7C0C0600, // 0009 CALL R3 3
+ 0xB80E0200, // 000A GETNGBL R3 K1
+ 0x8C0C0709, // 000B GETMET R3 R3 K9
+ 0x7C0C0200, // 000C CALL R3 1
+ 0x8810010A, // 000D GETMBR R4 R0 K10
+ 0x000C0604, // 000E ADD R3 R3 R4
+ 0x90021003, // 000F SETMBR R0 K8 R3
+ 0x78060007, // 0010 JMPF R1 #0019
+ 0x8C0C030B, // 0011 GETMET R3 R1 K11
+ 0x88140105, // 0012 GETMBR R5 R0 K5
+ 0x88140B0C, // 0013 GETMBR R5 R5 K12
+ 0x88180105, // 0014 GETMBR R6 R0 K5
+ 0x88180D0D, // 0015 GETMBR R6 R6 K13
+ 0x881C0105, // 0016 GETMBR R7 R0 K5
+ 0x7C0C0800, // 0017 CALL R3 4
+ 0x90020A03, // 0018 SETMBR R0 K5 R3
+ 0x500C0200, // 0019 LDBOOL R3 1 0
+ 0x90021C03, // 001A SETMBR R0 K14 R3
+ 0x500C0200, // 001B LDBOOL R3 1 0
+ 0x80040600, // 001C RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_IM_Message
+********************************************************************/
+be_local_class(Matter_IM_Message,
+ 6,
+ NULL,
+ be_nested_map(14,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(MSG_TIMEOUT, -1), be_const_int(5000) },
+ { be_const_key_weak(data, -1), be_const_var(4) },
+ { be_const_key_weak(send_im, -1), be_const_closure(Matter_IM_Message_send_im_closure) },
+ { be_const_key_weak(status_ok_received, -1), be_const_closure(Matter_IM_Message_status_ok_received_closure) },
+ { be_const_key_weak(get_exchangeid, 0), be_const_closure(Matter_IM_Message_get_exchangeid_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_IM_Message_init_closure) },
+ { be_const_key_weak(expiration, -1), be_const_var(0) },
+ { be_const_key_weak(resp, -1), be_const_var(1) },
+ { be_const_key_weak(finish, 13), be_const_var(3) },
+ { be_const_key_weak(last_counter, 6), be_const_var(5) },
+ { be_const_key_weak(ack_received, 9), be_const_closure(Matter_IM_Message_ack_received_closure) },
+ { be_const_key_weak(reached_timeout, -1), be_const_closure(Matter_IM_Message_reached_timeout_closure) },
+ { be_const_key_weak(status_error_received, 3), be_const_closure(Matter_IM_Message_status_error_received_closure) },
+ { be_const_key_weak(ready, -1), be_const_var(2) },
+ })),
+ be_str_weak(Matter_IM_Message)
+);
+/*******************************************************************/
+
+void be_load_Matter_IM_Message_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_IM_Message);
+ be_setglobal(vm, "Matter_IM_Message");
+ be_pop(vm, 1);
+}
+
+extern const bclass be_class_Matter_IM_Status;
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_Status_init, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(init),
+ /* K1 */ be_const_int(1),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(StatusResponseMessage),
+ /* K4 */ be_nested_str_weak(status),
+ /* K5 */ be_nested_str_weak(data),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[14]) { /* code */
+ 0x600C0003, // 0000 GETGBL R3 G3
+ 0x5C100000, // 0001 MOVE R4 R0
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C0700, // 0003 GETMET R3 R3 K0
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x58180001, // 0005 LDCONST R6 K1
+ 0x501C0200, // 0006 LDBOOL R7 1 0
+ 0x7C0C0800, // 0007 CALL R3 4
+ 0xB80E0400, // 0008 GETNGBL R3 K2
+ 0x8C0C0703, // 0009 GETMET R3 R3 K3
+ 0x7C0C0200, // 000A CALL R3 1
+ 0x900E0802, // 000B SETMBR R3 K4 R2
+ 0x90020A03, // 000C SETMBR R0 K5 R3
+ 0x80000000, // 000D RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_IM_Status
+********************************************************************/
+extern const bclass be_class_Matter_IM_Message;
+be_local_class(Matter_IM_Status,
+ 0,
+ &be_class_Matter_IM_Message,
+ be_nested_map(1,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(init, -1), be_const_closure(Matter_IM_Status_init_closure) },
+ })),
+ be_str_weak(Matter_IM_Status)
+);
+/*******************************************************************/
+
+void be_load_Matter_IM_Status_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_IM_Status);
+ be_setglobal(vm, "Matter_IM_Status");
+ be_pop(vm, 1);
+}
+
+extern const bclass be_class_Matter_IM_InvokeResponse;
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_InvokeResponse_init, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(init),
+ /* K1 */ be_nested_str_weak(data),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[10]) { /* code */
+ 0x600C0003, // 0000 GETGBL R3 G3
+ 0x5C100000, // 0001 MOVE R4 R0
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C0700, // 0003 GETMET R3 R3 K0
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x541A0008, // 0005 LDINT R6 9
+ 0x501C0200, // 0006 LDBOOL R7 1 0
+ 0x7C0C0800, // 0007 CALL R3 4
+ 0x90020202, // 0008 SETMBR R0 K1 R2
+ 0x80000000, // 0009 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_IM_InvokeResponse
+********************************************************************/
+extern const bclass be_class_Matter_IM_Message;
+be_local_class(Matter_IM_InvokeResponse,
+ 0,
+ &be_class_Matter_IM_Message,
+ be_nested_map(1,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(init, -1), be_const_closure(Matter_IM_InvokeResponse_init_closure) },
+ })),
+ be_str_weak(Matter_IM_InvokeResponse)
+);
+/*******************************************************************/
+
+void be_load_Matter_IM_InvokeResponse_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_IM_InvokeResponse);
+ be_setglobal(vm, "Matter_IM_InvokeResponse");
+ be_pop(vm, 1);
+}
+
+extern const bclass be_class_Matter_IM_WriteResponse;
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_WriteResponse_init, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(init),
+ /* K1 */ be_nested_str_weak(data),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[10]) { /* code */
+ 0x600C0003, // 0000 GETGBL R3 G3
+ 0x5C100000, // 0001 MOVE R4 R0
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C0700, // 0003 GETMET R3 R3 K0
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x541A0006, // 0005 LDINT R6 7
+ 0x501C0200, // 0006 LDBOOL R7 1 0
+ 0x7C0C0800, // 0007 CALL R3 4
+ 0x90020202, // 0008 SETMBR R0 K1 R2
+ 0x80000000, // 0009 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_IM_WriteResponse
+********************************************************************/
+extern const bclass be_class_Matter_IM_Message;
+be_local_class(Matter_IM_WriteResponse,
+ 0,
+ &be_class_Matter_IM_Message,
+ be_nested_map(1,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(init, -1), be_const_closure(Matter_IM_WriteResponse_init_closure) },
+ })),
+ be_str_weak(Matter_IM_WriteResponse)
+);
+/*******************************************************************/
+
+void be_load_Matter_IM_WriteResponse_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_IM_WriteResponse);
+ be_setglobal(vm, "Matter_IM_WriteResponse");
+ be_pop(vm, 1);
+}
+
+extern const bclass be_class_Matter_IM_ReportData;
+
+/********************************************************************
+** Solidified function: send_im
+********************************************************************/
+be_local_closure(Matter_IM_ReportData_send_im, /* name */
+ be_nested_proto(
+ 21, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[34]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(format),
+ /* K4 */ be_nested_str_weak(MTR_X3A_X20IM_ReportData_X20send_im_X20exch_X3D_X25i_X20ready_X3D_X25i),
+ /* K5 */ be_nested_str_weak(resp),
+ /* K6 */ be_nested_str_weak(exchange_id),
+ /* K7 */ be_nested_str_weak(ready),
+ /* K8 */ be_const_int(1),
+ /* K9 */ be_const_int(0),
+ /* K10 */ be_const_int(3),
+ /* K11 */ be_nested_str_weak(data),
+ /* K12 */ be_nested_str_weak(more_chunked_messages),
+ /* K13 */ be_nested_str_weak(attribute_reports),
+ /* K14 */ be_nested_str_weak(to_TLV),
+ /* K15 */ be_nested_str_weak(encode_len),
+ /* K16 */ be_nested_str_weak(MAX_MESSAGE),
+ /* K17 */ be_nested_str_weak(MTR_X3A_X20exch_X3D_X25i_X20elements_X3D_X25i_X20msg_sz_X3D_X25i_X20total_X3D_X25i),
+ /* K18 */ be_nested_str_weak(get_exchangeid),
+ /* K19 */ be_const_int(2147483647),
+ /* K20 */ be_nested_str_weak(MTR_X3A_X20_X2ERead_Attr_X20next_chunk_X20exch_X3D_X25i),
+ /* K21 */ be_nested_str_weak(MTR_X3A_X20_X2ERead_Attr_X20first_chunk_X20exch_X3D_X25i),
+ /* K22 */ be_nested_str_weak(tlv2raw),
+ /* K23 */ be_nested_str_weak(encode_frame),
+ /* K24 */ be_nested_str_weak(encrypt),
+ /* K25 */ be_nested_str_weak(MTR_X3A_X20_X3Csnd_X20_X20_X20_X20_X20_X20_X20_X28_X256i_X29_X20id_X3D_X25i_X20exch_X3D_X25i_X20rack_X3D_X25s),
+ /* K26 */ be_nested_str_weak(session),
+ /* K27 */ be_nested_str_weak(local_session_id),
+ /* K28 */ be_nested_str_weak(message_counter),
+ /* K29 */ be_nested_str_weak(ack_message_counter),
+ /* K30 */ be_nested_str_weak(send_response_frame),
+ /* K31 */ be_nested_str_weak(last_counter),
+ /* K32 */ be_nested_str_weak(MTR_X3A_X20to_be_sent_later_X20size_X3D_X25i_X20exch_X3D_X25i),
+ /* K33 */ be_nested_str_weak(finish),
+ }),
+ be_str_weak(send_im),
+ &be_const_str_solidified,
+ ( &(const binstruction[173]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0xB80E0200, // 0001 GETNGBL R3 K1
+ 0x8C0C0702, // 0002 GETMET R3 R3 K2
+ 0x8C140503, // 0003 GETMET R5 R2 K3
+ 0x581C0004, // 0004 LDCONST R7 K4
+ 0x88200105, // 0005 GETMBR R8 R0 K5
+ 0x88201106, // 0006 GETMBR R8 R8 K6
+ 0x88240107, // 0007 GETMBR R9 R0 K7
+ 0x78260001, // 0008 JMPF R9 #000B
+ 0x58240008, // 0009 LDCONST R9 K8
+ 0x70020000, // 000A JMP #000C
+ 0x58240009, // 000B LDCONST R9 K9
+ 0x7C140800, // 000C CALL R5 4
+ 0x5818000A, // 000D LDCONST R6 K10
+ 0x7C0C0600, // 000E CALL R3 3
+ 0x880C0107, // 000F GETMBR R3 R0 K7
+ 0x740E0001, // 0010 JMPT R3 #0013
+ 0x500C0000, // 0011 LDBOOL R3 0 0
+ 0x80040600, // 0012 RET 1 R3
+ 0x880C0105, // 0013 GETMBR R3 R0 K5
+ 0x8810010B, // 0014 GETMBR R4 R0 K11
+ 0x8814090C, // 0015 GETMBR R5 R4 K12
+ 0x58180009, // 0016 LDCONST R6 K9
+ 0x581C0009, // 0017 LDCONST R7 K9
+ 0x8820090D, // 0018 GETMBR R8 R4 K13
+ 0x4C240000, // 0019 LDNIL R9
+ 0x20201009, // 001A NE R8 R8 R9
+ 0x78220003, // 001B JMPF R8 #0020
+ 0x6020000C, // 001C GETGBL R8 G12
+ 0x8824090D, // 001D GETMBR R9 R4 K13
+ 0x7C200200, // 001E CALL R8 1
+ 0x70020000, // 001F JMP #0021
+ 0x58200009, // 0020 LDCONST R8 K9
+ 0x24241109, // 0021 GT R9 R8 K9
+ 0x78260007, // 0022 JMPF R9 #002B
+ 0x8824090D, // 0023 GETMBR R9 R4 K13
+ 0x94241309, // 0024 GETIDX R9 R9 K9
+ 0x8C24130E, // 0025 GETMET R9 R9 K14
+ 0x7C240200, // 0026 CALL R9 1
+ 0x8C24130F, // 0027 GETMET R9 R9 K15
+ 0x7C240200, // 0028 CALL R9 1
+ 0x5C181200, // 0029 MOVE R6 R9
+ 0x581C0008, // 002A LDCONST R7 K8
+ 0x88240110, // 002B GETMBR R9 R0 K16
+ 0x14240C09, // 002C LT R9 R6 R9
+ 0x78260010, // 002D JMPF R9 #003F
+ 0x14240E08, // 002E LT R9 R7 R8
+ 0x7826000E, // 002F JMPF R9 #003F
+ 0x8824090D, // 0030 GETMBR R9 R4 K13
+ 0x94241207, // 0031 GETIDX R9 R9 R7
+ 0x8C24130E, // 0032 GETMET R9 R9 K14
+ 0x7C240200, // 0033 CALL R9 1
+ 0x8C24130F, // 0034 GETMET R9 R9 K15
+ 0x7C240200, // 0035 CALL R9 1
+ 0x00280C09, // 0036 ADD R10 R6 R9
+ 0x882C0110, // 0037 GETMBR R11 R0 K16
+ 0x1428140B, // 0038 LT R10 R10 R11
+ 0x782A0002, // 0039 JMPF R10 #003D
+ 0x00180C09, // 003A ADD R6 R6 R9
+ 0x001C0F08, // 003B ADD R7 R7 K8
+ 0x70020000, // 003C JMP #003E
+ 0x70020000, // 003D JMP #003F
+ 0x7001FFEB, // 003E JMP #002B
+ 0xB8260200, // 003F GETNGBL R9 K1
+ 0x8C241302, // 0040 GETMET R9 R9 K2
+ 0x8C2C0503, // 0041 GETMET R11 R2 K3
+ 0x58340011, // 0042 LDCONST R13 K17
+ 0x8C380112, // 0043 GETMET R14 R0 K18
+ 0x7C380200, // 0044 CALL R14 1
+ 0x5C3C0E00, // 0045 MOVE R15 R7
+ 0x5C400C00, // 0046 MOVE R16 R6
+ 0x5C441000, // 0047 MOVE R17 R8
+ 0x7C2C0C00, // 0048 CALL R11 6
+ 0x5830000A, // 0049 LDCONST R12 K10
+ 0x7C240600, // 004A CALL R9 3
+ 0x60240012, // 004B GETGBL R9 G18
+ 0x7C240000, // 004C CALL R9 0
+ 0x8828090D, // 004D GETMBR R10 R4 K13
+ 0x4C2C0000, // 004E LDNIL R11
+ 0x2028140B, // 004F NE R10 R10 R11
+ 0x782A000D, // 0050 JMPF R10 #005F
+ 0x40280F13, // 0051 CONNECT R10 R7 K19
+ 0x882C090D, // 0052 GETMBR R11 R4 K13
+ 0x9424160A, // 0053 GETIDX R9 R11 R10
+ 0x04300F08, // 0054 SUB R12 R7 K8
+ 0x4032120C, // 0055 CONNECT R12 K9 R12
+ 0x8834090D, // 0056 GETMBR R13 R4 K13
+ 0x94301A0C, // 0057 GETIDX R12 R13 R12
+ 0x90121A0C, // 0058 SETMBR R4 K13 R12
+ 0x6030000C, // 0059 GETGBL R12 G12
+ 0x5C341200, // 005A MOVE R13 R9
+ 0x7C300200, // 005B CALL R12 1
+ 0x24301909, // 005C GT R12 R12 K9
+ 0x9012180C, // 005D SETMBR R4 K12 R12
+ 0x70020001, // 005E JMP #0061
+ 0x50280000, // 005F LDBOOL R10 0 0
+ 0x9012180A, // 0060 SETMBR R4 K12 R10
+ 0x78160008, // 0061 JMPF R5 #006B
+ 0xB82A0200, // 0062 GETNGBL R10 K1
+ 0x8C281502, // 0063 GETMET R10 R10 K2
+ 0x8C300503, // 0064 GETMET R12 R2 K3
+ 0x58380014, // 0065 LDCONST R14 K20
+ 0x8C3C0112, // 0066 GETMET R15 R0 K18
+ 0x7C3C0200, // 0067 CALL R15 1
+ 0x7C300600, // 0068 CALL R12 3
+ 0x5834000A, // 0069 LDCONST R13 K10
+ 0x7C280600, // 006A CALL R10 3
+ 0x8828090C, // 006B GETMBR R10 R4 K12
+ 0x782A000A, // 006C JMPF R10 #0078
+ 0x5C280A00, // 006D MOVE R10 R5
+ 0x742A0008, // 006E JMPT R10 #0078
+ 0xB82A0200, // 006F GETNGBL R10 K1
+ 0x8C281502, // 0070 GETMET R10 R10 K2
+ 0x8C300503, // 0071 GETMET R12 R2 K3
+ 0x58380015, // 0072 LDCONST R14 K21
+ 0x8C3C0112, // 0073 GETMET R15 R0 K18
+ 0x7C3C0200, // 0074 CALL R15 1
+ 0x7C300600, // 0075 CALL R12 3
+ 0x5834000A, // 0076 LDCONST R13 K10
+ 0x7C280600, // 0077 CALL R10 3
+ 0x8828010B, // 0078 GETMBR R10 R0 K11
+ 0x8C28150E, // 0079 GETMET R10 R10 K14
+ 0x7C280200, // 007A CALL R10 1
+ 0x8C2C1516, // 007B GETMET R11 R10 K22
+ 0x60340015, // 007C GETGBL R13 G21
+ 0x88380110, // 007D GETMBR R14 R0 K16
+ 0x7C340200, // 007E CALL R13 1
+ 0x7C2C0400, // 007F CALL R11 2
+ 0x8C300717, // 0080 GETMET R12 R3 K23
+ 0x5C381600, // 0081 MOVE R14 R11
+ 0x7C300400, // 0082 CALL R12 2
+ 0x8C300718, // 0083 GETMET R12 R3 K24
+ 0x7C300200, // 0084 CALL R12 1
+ 0xB8320200, // 0085 GETNGBL R12 K1
+ 0x8C301902, // 0086 GETMET R12 R12 K2
+ 0x8C380503, // 0087 GETMET R14 R2 K3
+ 0x58400019, // 0088 LDCONST R16 K25
+ 0x8844071A, // 0089 GETMBR R17 R3 K26
+ 0x8844231B, // 008A GETMBR R17 R17 K27
+ 0x8848071C, // 008B GETMBR R18 R3 K28
+ 0x884C0706, // 008C GETMBR R19 R3 K6
+ 0x8850071D, // 008D GETMBR R20 R3 K29
+ 0x7C380C00, // 008E CALL R14 6
+ 0x583C000A, // 008F LDCONST R15 K10
+ 0x7C300600, // 0090 CALL R12 3
+ 0x8C30031E, // 0091 GETMET R12 R1 K30
+ 0x5C380600, // 0092 MOVE R14 R3
+ 0x7C300400, // 0093 CALL R12 2
+ 0x8830071C, // 0094 GETMBR R12 R3 K28
+ 0x90023E0C, // 0095 SETMBR R0 K31 R12
+ 0x6030000C, // 0096 GETGBL R12 G12
+ 0x5C341200, // 0097 MOVE R13 R9
+ 0x7C300200, // 0098 CALL R12 1
+ 0x24301909, // 0099 GT R12 R12 K9
+ 0x7832000E, // 009A JMPF R12 #00AA
+ 0x90121A09, // 009B SETMBR R4 K13 R9
+ 0xB8320200, // 009C GETNGBL R12 K1
+ 0x8C301902, // 009D GETMET R12 R12 K2
+ 0x8C380503, // 009E GETMET R14 R2 K3
+ 0x58400020, // 009F LDCONST R16 K32
+ 0x6044000C, // 00A0 GETGBL R17 G12
+ 0x8848090D, // 00A1 GETMBR R18 R4 K13
+ 0x7C440200, // 00A2 CALL R17 1
+ 0x88480706, // 00A3 GETMBR R18 R3 K6
+ 0x7C380800, // 00A4 CALL R14 4
+ 0x583C000A, // 00A5 LDCONST R15 K10
+ 0x7C300600, // 00A6 CALL R12 3
+ 0x50300000, // 00A7 LDBOOL R12 0 0
+ 0x90020E0C, // 00A8 SETMBR R0 K7 R12
+ 0x70020001, // 00A9 JMP #00AC
+ 0x50300200, // 00AA LDBOOL R12 1 0
+ 0x9002420C, // 00AB SETMBR R0 K33 R12
+ 0x80000000, // 00AC RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_ReportData_init, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(init),
+ /* K1 */ be_nested_str_weak(data),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[10]) { /* code */
+ 0x600C0003, // 0000 GETGBL R3 G3
+ 0x5C100000, // 0001 MOVE R4 R0
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C0700, // 0003 GETMET R3 R3 K0
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x541A0004, // 0005 LDINT R6 5
+ 0x501C0200, // 0006 LDBOOL R7 1 0
+ 0x7C0C0800, // 0007 CALL R3 4
+ 0x90020202, // 0008 SETMBR R0 K1 R2
+ 0x80000000, // 0009 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_IM_ReportData
+********************************************************************/
+extern const bclass be_class_Matter_IM_Message;
+be_local_class(Matter_IM_ReportData,
+ 0,
+ &be_class_Matter_IM_Message,
+ be_nested_map(3,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(send_im, 1), be_const_closure(Matter_IM_ReportData_send_im_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_IM_ReportData_init_closure) },
+ { be_const_key_weak(MAX_MESSAGE, -1), be_const_int(1200) },
+ })),
+ be_str_weak(Matter_IM_ReportData)
+);
+/*******************************************************************/
+
+void be_load_Matter_IM_ReportData_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_IM_ReportData);
+ be_setglobal(vm, "Matter_IM_ReportData");
+ be_pop(vm, 1);
+}
+
+extern const bclass be_class_Matter_IM_ReportDataSubscribed;
+
+/********************************************************************
+** Solidified function: ack_received
+********************************************************************/
+be_local_closure(Matter_IM_ReportDataSubscribed_ack_received, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[12]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(format),
+ /* K4 */ be_nested_str_weak(MTR_X3A_X20IM_ReportDataSubscribed_X20ack_received_X20sub_X3D_X25i),
+ /* K5 */ be_nested_str_weak(sub),
+ /* K6 */ be_nested_str_weak(subscription_id),
+ /* K7 */ be_const_int(3),
+ /* K8 */ be_nested_str_weak(ack_received),
+ /* K9 */ be_nested_str_weak(report_data_phase),
+ /* K10 */ be_nested_str_weak(is_keep_alive),
+ /* K11 */ be_nested_str_weak(re_arm),
+ }),
+ be_str_weak(ack_received),
+ &be_const_str_solidified,
+ ( &(const binstruction[30]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0xB80E0200, // 0001 GETNGBL R3 K1
+ 0x8C0C0702, // 0002 GETMET R3 R3 K2
+ 0x8C140503, // 0003 GETMET R5 R2 K3
+ 0x581C0004, // 0004 LDCONST R7 K4
+ 0x88200105, // 0005 GETMBR R8 R0 K5
+ 0x88201106, // 0006 GETMBR R8 R8 K6
+ 0x7C140600, // 0007 CALL R5 3
+ 0x58180007, // 0008 LDCONST R6 K7
+ 0x7C0C0600, // 0009 CALL R3 3
+ 0x600C0003, // 000A GETGBL R3 G3
+ 0x5C100000, // 000B MOVE R4 R0
+ 0x7C0C0200, // 000C CALL R3 1
+ 0x8C0C0708, // 000D GETMET R3 R3 K8
+ 0x5C140200, // 000E MOVE R5 R1
+ 0x7C0C0400, // 000F CALL R3 2
+ 0x880C0109, // 0010 GETMBR R3 R0 K9
+ 0x740E0008, // 0011 JMPT R3 #001B
+ 0x880C0105, // 0012 GETMBR R3 R0 K5
+ 0x880C070A, // 0013 GETMBR R3 R3 K10
+ 0x780E0002, // 0014 JMPF R3 #0018
+ 0x880C0105, // 0015 GETMBR R3 R0 K5
+ 0x8C0C070B, // 0016 GETMET R3 R3 K11
+ 0x7C0C0200, // 0017 CALL R3 1
+ 0x500C0200, // 0018 LDBOOL R3 1 0
+ 0x80040600, // 0019 RET 1 R3
+ 0x70020001, // 001A JMP #001D
+ 0x500C0000, // 001B LDBOOL R3 0 0
+ 0x80040600, // 001C RET 1 R3
+ 0x80000000, // 001D RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_im
+********************************************************************/
+be_local_closure(Matter_IM_ReportDataSubscribed_send_im, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[30]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(format),
+ /* K4 */ be_nested_str_weak(MTR_X3A_X20IM_ReportDataSubscribed_X20send_X20sub_X3D_X25i_X20exch_X3D_X25i_X20ready_X3D_X25i),
+ /* K5 */ be_nested_str_weak(sub),
+ /* K6 */ be_nested_str_weak(subscription_id),
+ /* K7 */ be_nested_str_weak(resp),
+ /* K8 */ be_nested_str_weak(exchange_id),
+ /* K9 */ be_nested_str_weak(ready),
+ /* K10 */ be_const_int(1),
+ /* K11 */ be_const_int(0),
+ /* K12 */ be_const_int(3),
+ /* K13 */ be_nested_str_weak(MTR_X3A_X20ReportDataSubscribed_X3A_X3Asend_im_X20size_X28self_X2Edata_X2Eattribute_reports_X29_X3D_X25i_X20ready_X3D_X25s_X20report_data_phase_X3D_X25s),
+ /* K14 */ be_nested_str_weak(data),
+ /* K15 */ be_nested_str_weak(attribute_reports),
+ /* K16 */ be_nested_str_weak(report_data_phase),
+ /* K17 */ be_nested_str_weak(send_im),
+ /* K18 */ be_nested_str_weak(MTR_X3A_X20ReportDataSubscribed_X3A_X3Asend_im_X20called_X20super_X20finish_X3D_X25i),
+ /* K19 */ be_nested_str_weak(finish),
+ /* K20 */ be_nested_str_weak(build_standalone_ack),
+ /* K21 */ be_nested_str_weak(encode_frame),
+ /* K22 */ be_nested_str_weak(encrypt),
+ /* K23 */ be_nested_str_weak(MTR_X3A_X20_X3CAck_X20_X20_X20_X20_X20_X20_X20_X28_X256i_X29_X20ack_X3D_X25i_X20id_X3D_X25i),
+ /* K24 */ be_nested_str_weak(session),
+ /* K25 */ be_nested_str_weak(local_session_id),
+ /* K26 */ be_nested_str_weak(ack_message_counter),
+ /* K27 */ be_nested_str_weak(message_counter),
+ /* K28 */ be_nested_str_weak(send_response_frame),
+ /* K29 */ be_nested_str_weak(last_counter),
+ }),
+ be_str_weak(send_im),
+ &be_const_str_solidified,
+ ( &(const binstruction[111]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0xB80E0200, // 0001 GETNGBL R3 K1
+ 0x8C0C0702, // 0002 GETMET R3 R3 K2
+ 0x8C140503, // 0003 GETMET R5 R2 K3
+ 0x581C0004, // 0004 LDCONST R7 K4
+ 0x88200105, // 0005 GETMBR R8 R0 K5
+ 0x88201106, // 0006 GETMBR R8 R8 K6
+ 0x88240107, // 0007 GETMBR R9 R0 K7
+ 0x88241308, // 0008 GETMBR R9 R9 K8
+ 0x88280109, // 0009 GETMBR R10 R0 K9
+ 0x782A0001, // 000A JMPF R10 #000D
+ 0x5828000A, // 000B LDCONST R10 K10
+ 0x70020000, // 000C JMP #000E
+ 0x5828000B, // 000D LDCONST R10 K11
+ 0x7C140A00, // 000E CALL R5 5
+ 0x5818000C, // 000F LDCONST R6 K12
+ 0x7C0C0600, // 0010 CALL R3 3
+ 0xB80E0200, // 0011 GETNGBL R3 K1
+ 0x8C0C0702, // 0012 GETMET R3 R3 K2
+ 0x8C140503, // 0013 GETMET R5 R2 K3
+ 0x581C000D, // 0014 LDCONST R7 K13
+ 0x6020000C, // 0015 GETGBL R8 G12
+ 0x8824010E, // 0016 GETMBR R9 R0 K14
+ 0x8824130F, // 0017 GETMBR R9 R9 K15
+ 0x7C200200, // 0018 CALL R8 1
+ 0x60240008, // 0019 GETGBL R9 G8
+ 0x88280109, // 001A GETMBR R10 R0 K9
+ 0x7C240200, // 001B CALL R9 1
+ 0x60280008, // 001C GETGBL R10 G8
+ 0x882C0110, // 001D GETMBR R11 R0 K16
+ 0x7C280200, // 001E CALL R10 1
+ 0x7C140A00, // 001F CALL R5 5
+ 0x5818000C, // 0020 LDCONST R6 K12
+ 0x7C0C0600, // 0021 CALL R3 3
+ 0x880C0109, // 0022 GETMBR R3 R0 K9
+ 0x740E0001, // 0023 JMPT R3 #0026
+ 0x500C0000, // 0024 LDBOOL R3 0 0
+ 0x80040600, // 0025 RET 1 R3
+ 0x600C000C, // 0026 GETGBL R3 G12
+ 0x8810010E, // 0027 GETMBR R4 R0 K14
+ 0x8810090F, // 0028 GETMBR R4 R4 K15
+ 0x7C0C0200, // 0029 CALL R3 1
+ 0x240C070B, // 002A GT R3 R3 K11
+ 0x780E0034, // 002B JMPF R3 #0061
+ 0x880C0110, // 002C GETMBR R3 R0 K16
+ 0x780E0017, // 002D JMPF R3 #0046
+ 0x600C0003, // 002E GETGBL R3 G3
+ 0x5C100000, // 002F MOVE R4 R0
+ 0x7C0C0200, // 0030 CALL R3 1
+ 0x8C0C0711, // 0031 GETMET R3 R3 K17
+ 0x5C140200, // 0032 MOVE R5 R1
+ 0x7C0C0400, // 0033 CALL R3 2
+ 0xB80E0200, // 0034 GETNGBL R3 K1
+ 0x8C0C0702, // 0035 GETMET R3 R3 K2
+ 0x8C140503, // 0036 GETMET R5 R2 K3
+ 0x581C0012, // 0037 LDCONST R7 K18
+ 0x88200113, // 0038 GETMBR R8 R0 K19
+ 0x7C140600, // 0039 CALL R5 3
+ 0x5818000C, // 003A LDCONST R6 K12
+ 0x7C0C0600, // 003B CALL R3 3
+ 0x880C0113, // 003C GETMBR R3 R0 K19
+ 0x740E0000, // 003D JMPT R3 #003F
+ 0x80000600, // 003E RET 0
+ 0x500C0000, // 003F LDBOOL R3 0 0
+ 0x90022003, // 0040 SETMBR R0 K16 R3
+ 0x500C0000, // 0041 LDBOOL R3 0 0
+ 0x90021203, // 0042 SETMBR R0 K9 R3
+ 0x500C0000, // 0043 LDBOOL R3 0 0
+ 0x90022603, // 0044 SETMBR R0 K19 R3
+ 0x70020019, // 0045 JMP #0060
+ 0x880C0107, // 0046 GETMBR R3 R0 K7
+ 0x8C0C0714, // 0047 GETMET R3 R3 K20
+ 0x50140000, // 0048 LDBOOL R5 0 0
+ 0x7C0C0400, // 0049 CALL R3 2
+ 0x8C100715, // 004A GETMET R4 R3 K21
+ 0x7C100200, // 004B CALL R4 1
+ 0x8C100716, // 004C GETMET R4 R3 K22
+ 0x7C100200, // 004D CALL R4 1
+ 0xB8120200, // 004E GETNGBL R4 K1
+ 0x8C100902, // 004F GETMET R4 R4 K2
+ 0x8C180503, // 0050 GETMET R6 R2 K3
+ 0x58200017, // 0051 LDCONST R8 K23
+ 0x88240718, // 0052 GETMBR R9 R3 K24
+ 0x88241319, // 0053 GETMBR R9 R9 K25
+ 0x8828071A, // 0054 GETMBR R10 R3 K26
+ 0x882C071B, // 0055 GETMBR R11 R3 K27
+ 0x7C180A00, // 0056 CALL R6 5
+ 0x581C000C, // 0057 LDCONST R7 K12
+ 0x7C100600, // 0058 CALL R4 3
+ 0x8C10031C, // 0059 GETMET R4 R1 K28
+ 0x5C180600, // 005A MOVE R6 R3
+ 0x7C100400, // 005B CALL R4 2
+ 0x8810071B, // 005C GETMBR R4 R3 K27
+ 0x90023A04, // 005D SETMBR R0 K29 R4
+ 0x50100200, // 005E LDBOOL R4 1 0
+ 0x90022604, // 005F SETMBR R0 K19 R4
+ 0x7002000C, // 0060 JMP #006E
+ 0x880C0110, // 0061 GETMBR R3 R0 K16
+ 0x780E0008, // 0062 JMPF R3 #006C
+ 0x600C0003, // 0063 GETGBL R3 G3
+ 0x5C100000, // 0064 MOVE R4 R0
+ 0x7C0C0200, // 0065 CALL R3 1
+ 0x8C0C0711, // 0066 GETMET R3 R3 K17
+ 0x5C140200, // 0067 MOVE R5 R1
+ 0x7C0C0400, // 0068 CALL R3 2
+ 0x500C0000, // 0069 LDBOOL R3 0 0
+ 0x90022003, // 006A SETMBR R0 K16 R3
+ 0x70020001, // 006B JMP #006E
+ 0x500C0200, // 006C LDBOOL R3 1 0
+ 0x90022603, // 006D SETMBR R0 K19 R3
+ 0x80000000, // 006E RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_ReportDataSubscribed_init, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 5, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[12]) { /* constants */
+ /* K0 */ be_nested_str_weak(resp),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(Frame),
+ /* K3 */ be_nested_str_weak(initiate_response),
+ /* K4 */ be_nested_str_weak(data),
+ /* K5 */ be_nested_str_weak(ready),
+ /* K6 */ be_nested_str_weak(expiration),
+ /* K7 */ be_nested_str_weak(tasmota),
+ /* K8 */ be_nested_str_weak(millis),
+ /* K9 */ be_nested_str_weak(MSG_TIMEOUT),
+ /* K10 */ be_nested_str_weak(sub),
+ /* K11 */ be_nested_str_weak(report_data_phase),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[22]) { /* code */
+ 0xB8160200, // 0000 GETNGBL R5 K1
+ 0x88140B02, // 0001 GETMBR R5 R5 K2
+ 0x8C140B03, // 0002 GETMET R5 R5 K3
+ 0x5C1C0200, // 0003 MOVE R7 R1
+ 0x5C200400, // 0004 MOVE R8 R2
+ 0x54260004, // 0005 LDINT R9 5
+ 0x50280200, // 0006 LDBOOL R10 1 0
+ 0x7C140A00, // 0007 CALL R5 5
+ 0x90020005, // 0008 SETMBR R0 K0 R5
+ 0x90020803, // 0009 SETMBR R0 K4 R3
+ 0x50140200, // 000A LDBOOL R5 1 0
+ 0x90020A05, // 000B SETMBR R0 K5 R5
+ 0xB8160E00, // 000C GETNGBL R5 K7
+ 0x8C140B08, // 000D GETMET R5 R5 K8
+ 0x7C140200, // 000E CALL R5 1
+ 0x88180109, // 000F GETMBR R6 R0 K9
+ 0x00140A06, // 0010 ADD R5 R5 R6
+ 0x90020C05, // 0011 SETMBR R0 K6 R5
+ 0x90021404, // 0012 SETMBR R0 K10 R4
+ 0x50140200, // 0013 LDBOOL R5 1 0
+ 0x90021605, // 0014 SETMBR R0 K11 R5
+ 0x80000000, // 0015 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: status_error_received
+********************************************************************/
+be_local_closure(Matter_IM_ReportDataSubscribed_status_error_received, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[11]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(format),
+ /* K4 */ be_nested_str_weak(MTR_X3A_X20IM_ReportDataSubscribed_X20status_error_received_X20sub_X3D_X25i_X20exch_X3D_X25i),
+ /* K5 */ be_nested_str_weak(sub),
+ /* K6 */ be_nested_str_weak(subscription_id),
+ /* K7 */ be_nested_str_weak(resp),
+ /* K8 */ be_nested_str_weak(exchange_id),
+ /* K9 */ be_const_int(3),
+ /* K10 */ be_nested_str_weak(remove_self),
+ }),
+ be_str_weak(status_error_received),
+ &be_const_str_solidified,
+ ( &(const binstruction[16]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0xB80E0200, // 0001 GETNGBL R3 K1
+ 0x8C0C0702, // 0002 GETMET R3 R3 K2
+ 0x8C140503, // 0003 GETMET R5 R2 K3
+ 0x581C0004, // 0004 LDCONST R7 K4
+ 0x88200105, // 0005 GETMBR R8 R0 K5
+ 0x88201106, // 0006 GETMBR R8 R8 K6
+ 0x88240107, // 0007 GETMBR R9 R0 K7
+ 0x88241308, // 0008 GETMBR R9 R9 K8
+ 0x7C140800, // 0009 CALL R5 4
+ 0x58180009, // 000A LDCONST R6 K9
+ 0x7C0C0600, // 000B CALL R3 3
+ 0x880C0105, // 000C GETMBR R3 R0 K5
+ 0x8C0C070A, // 000D GETMET R3 R3 K10
+ 0x7C0C0200, // 000E CALL R3 1
+ 0x80000000, // 000F RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: reached_timeout
+********************************************************************/
+be_local_closure(Matter_IM_ReportDataSubscribed_reached_timeout, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(sub),
+ /* K1 */ be_nested_str_weak(remove_self),
+ }),
+ be_str_weak(reached_timeout),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x80000000, // 0003 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: status_ok_received
+********************************************************************/
+be_local_closure(Matter_IM_ReportDataSubscribed_status_ok_received, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[13]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(format),
+ /* K4 */ be_nested_str_weak(MTR_X3A_X20IM_ReportDataSubscribed_X20status_ok_received_X20sub_X3D_X25i_X20exch_X3D_X25i),
+ /* K5 */ be_nested_str_weak(sub),
+ /* K6 */ be_nested_str_weak(subscription_id),
+ /* K7 */ be_nested_str_weak(resp),
+ /* K8 */ be_nested_str_weak(exchange_id),
+ /* K9 */ be_const_int(3),
+ /* K10 */ be_nested_str_weak(report_data_phase),
+ /* K11 */ be_nested_str_weak(status_ok_received),
+ /* K12 */ be_nested_str_weak(re_arm),
+ }),
+ be_str_weak(status_ok_received),
+ &be_const_str_solidified,
+ ( &(const binstruction[34]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0xB80E0200, // 0001 GETNGBL R3 K1
+ 0x8C0C0702, // 0002 GETMET R3 R3 K2
+ 0x8C140503, // 0003 GETMET R5 R2 K3
+ 0x581C0004, // 0004 LDCONST R7 K4
+ 0x88200105, // 0005 GETMBR R8 R0 K5
+ 0x88201106, // 0006 GETMBR R8 R8 K6
+ 0x88240107, // 0007 GETMBR R9 R0 K7
+ 0x88241308, // 0008 GETMBR R9 R9 K8
+ 0x7C140800, // 0009 CALL R5 4
+ 0x58180009, // 000A LDCONST R6 K9
+ 0x7C0C0600, // 000B CALL R3 3
+ 0x880C010A, // 000C GETMBR R3 R0 K10
+ 0x780E0007, // 000D JMPF R3 #0016
+ 0x600C0003, // 000E GETGBL R3 G3
+ 0x5C100000, // 000F MOVE R4 R0
+ 0x7C0C0200, // 0010 CALL R3 1
+ 0x8C0C070B, // 0011 GETMET R3 R3 K11
+ 0x5C140200, // 0012 MOVE R5 R1
+ 0x7C0C0400, // 0013 CALL R3 2
+ 0x80040600, // 0014 RET 1 R3
+ 0x7002000A, // 0015 JMP #0021
+ 0x880C0105, // 0016 GETMBR R3 R0 K5
+ 0x8C0C070C, // 0017 GETMET R3 R3 K12
+ 0x7C0C0200, // 0018 CALL R3 1
+ 0x600C0003, // 0019 GETGBL R3 G3
+ 0x5C100000, // 001A MOVE R4 R0
+ 0x7C0C0200, // 001B CALL R3 1
+ 0x8C0C070B, // 001C GETMET R3 R3 K11
+ 0x4C140000, // 001D LDNIL R5
+ 0x7C0C0400, // 001E CALL R3 2
+ 0x500C0000, // 001F LDBOOL R3 0 0
+ 0x80040600, // 0020 RET 1 R3
+ 0x80000000, // 0021 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_IM_ReportDataSubscribed
+********************************************************************/
+extern const bclass be_class_Matter_IM_ReportData;
+be_local_class(Matter_IM_ReportDataSubscribed,
+ 2,
+ &be_class_Matter_IM_ReportData,
+ be_nested_map(8,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(ack_received, 1), be_const_closure(Matter_IM_ReportDataSubscribed_ack_received_closure) },
+ { be_const_key_weak(status_ok_received, -1), be_const_closure(Matter_IM_ReportDataSubscribed_status_ok_received_closure) },
+ { be_const_key_weak(send_im, -1), be_const_closure(Matter_IM_ReportDataSubscribed_send_im_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_IM_ReportDataSubscribed_init_closure) },
+ { be_const_key_weak(report_data_phase, 7), be_const_var(1) },
+ { be_const_key_weak(sub, 6), be_const_var(0) },
+ { be_const_key_weak(reached_timeout, -1), be_const_closure(Matter_IM_ReportDataSubscribed_reached_timeout_closure) },
+ { be_const_key_weak(status_error_received, -1), be_const_closure(Matter_IM_ReportDataSubscribed_status_error_received_closure) },
+ })),
+ be_str_weak(Matter_IM_ReportDataSubscribed)
+);
+/*******************************************************************/
+
+void be_load_Matter_IM_ReportDataSubscribed_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_IM_ReportDataSubscribed);
+ be_setglobal(vm, "Matter_IM_ReportDataSubscribed");
+ be_pop(vm, 1);
+}
+
+extern const bclass be_class_Matter_IM_SubscribedHeartbeat;
+
+/********************************************************************
+** Solidified function: status_error_received
+********************************************************************/
+be_local_closure(Matter_IM_SubscribedHeartbeat_status_error_received, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[11]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(format),
+ /* K4 */ be_nested_str_weak(MTR_X3A_X20Matter_IM_SubscribedHeartbeat_X20status_error_received_X20sub_X3D_X25i_X20exch_X3D_X25i),
+ /* K5 */ be_nested_str_weak(sub),
+ /* K6 */ be_nested_str_weak(subscription_id),
+ /* K7 */ be_nested_str_weak(resp),
+ /* K8 */ be_nested_str_weak(exchange_id),
+ /* K9 */ be_const_int(3),
+ /* K10 */ be_nested_str_weak(remove_self),
+ }),
+ be_str_weak(status_error_received),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0xB80E0200, // 0001 GETNGBL R3 K1
+ 0x8C0C0702, // 0002 GETMET R3 R3 K2
+ 0x8C140503, // 0003 GETMET R5 R2 K3
+ 0x581C0004, // 0004 LDCONST R7 K4
+ 0x88200105, // 0005 GETMBR R8 R0 K5
+ 0x88201106, // 0006 GETMBR R8 R8 K6
+ 0x88240107, // 0007 GETMBR R9 R0 K7
+ 0x88241308, // 0008 GETMBR R9 R9 K8
+ 0x7C140800, // 0009 CALL R5 4
+ 0x58180009, // 000A LDCONST R6 K9
+ 0x7C0C0600, // 000B CALL R3 3
+ 0x880C0105, // 000C GETMBR R3 R0 K5
+ 0x8C0C070A, // 000D GETMET R3 R3 K10
+ 0x7C0C0200, // 000E CALL R3 1
+ 0x500C0000, // 000F LDBOOL R3 0 0
+ 0x80040600, // 0010 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_im
+********************************************************************/
+be_local_closure(Matter_IM_SubscribedHeartbeat_send_im, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[14]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(format),
+ /* K4 */ be_nested_str_weak(MTR_X3A_X20Matter_IM_SubscribedHeartbeat_X20send_X20sub_X3D_X25i_X20exch_X3D_X25i_X20ready_X3D_X25i),
+ /* K5 */ be_nested_str_weak(sub),
+ /* K6 */ be_nested_str_weak(subscription_id),
+ /* K7 */ be_nested_str_weak(resp),
+ /* K8 */ be_nested_str_weak(exchange_id),
+ /* K9 */ be_nested_str_weak(ready),
+ /* K10 */ be_const_int(1),
+ /* K11 */ be_const_int(0),
+ /* K12 */ be_const_int(3),
+ /* K13 */ be_nested_str_weak(send_im),
+ }),
+ be_str_weak(send_im),
+ &be_const_str_solidified,
+ ( &(const binstruction[30]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0xB80E0200, // 0001 GETNGBL R3 K1
+ 0x8C0C0702, // 0002 GETMET R3 R3 K2
+ 0x8C140503, // 0003 GETMET R5 R2 K3
+ 0x581C0004, // 0004 LDCONST R7 K4
+ 0x88200105, // 0005 GETMBR R8 R0 K5
+ 0x88201106, // 0006 GETMBR R8 R8 K6
+ 0x88240107, // 0007 GETMBR R9 R0 K7
+ 0x88241308, // 0008 GETMBR R9 R9 K8
+ 0x88280109, // 0009 GETMBR R10 R0 K9
+ 0x782A0001, // 000A JMPF R10 #000D
+ 0x5828000A, // 000B LDCONST R10 K10
+ 0x70020000, // 000C JMP #000E
+ 0x5828000B, // 000D LDCONST R10 K11
+ 0x7C140A00, // 000E CALL R5 5
+ 0x5818000C, // 000F LDCONST R6 K12
+ 0x7C0C0600, // 0010 CALL R3 3
+ 0x880C0109, // 0011 GETMBR R3 R0 K9
+ 0x740E0001, // 0012 JMPT R3 #0015
+ 0x500C0000, // 0013 LDBOOL R3 0 0
+ 0x80040600, // 0014 RET 1 R3
+ 0x600C0003, // 0015 GETGBL R3 G3
+ 0x5C100000, // 0016 MOVE R4 R0
+ 0x7C0C0200, // 0017 CALL R3 1
+ 0x8C0C070D, // 0018 GETMET R3 R3 K13
+ 0x5C140200, // 0019 MOVE R5 R1
+ 0x7C0C0400, // 001A CALL R3 2
+ 0x500C0000, // 001B LDBOOL R3 0 0
+ 0x90021203, // 001C SETMBR R0 K9 R3
+ 0x80000000, // 001D RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: ack_received
+********************************************************************/
+be_local_closure(Matter_IM_SubscribedHeartbeat_ack_received, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[10]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(format),
+ /* K4 */ be_nested_str_weak(MTR_X3A_X20Matter_IM_SubscribedHeartbeat_X20ack_received_X20sub_X3D_X25i),
+ /* K5 */ be_nested_str_weak(sub),
+ /* K6 */ be_nested_str_weak(subscription_id),
+ /* K7 */ be_const_int(3),
+ /* K8 */ be_nested_str_weak(ack_received),
+ /* K9 */ be_nested_str_weak(finish),
+ }),
+ be_str_weak(ack_received),
+ &be_const_str_solidified,
+ ( &(const binstruction[20]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0xB80E0200, // 0001 GETNGBL R3 K1
+ 0x8C0C0702, // 0002 GETMET R3 R3 K2
+ 0x8C140503, // 0003 GETMET R5 R2 K3
+ 0x581C0004, // 0004 LDCONST R7 K4
+ 0x88200105, // 0005 GETMBR R8 R0 K5
+ 0x88201106, // 0006 GETMBR R8 R8 K6
+ 0x7C140600, // 0007 CALL R5 3
+ 0x58180007, // 0008 LDCONST R6 K7
+ 0x7C0C0600, // 0009 CALL R3 3
+ 0x600C0003, // 000A GETGBL R3 G3
+ 0x5C100000, // 000B MOVE R4 R0
+ 0x7C0C0200, // 000C CALL R3 1
+ 0x8C0C0708, // 000D GETMET R3 R3 K8
+ 0x5C140200, // 000E MOVE R5 R1
+ 0x7C0C0400, // 000F CALL R3 2
+ 0x500C0200, // 0010 LDBOOL R3 1 0
+ 0x90021203, // 0011 SETMBR R0 K9 R3
+ 0x500C0200, // 0012 LDBOOL R3 1 0
+ 0x80040600, // 0013 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: reached_timeout
+********************************************************************/
+be_local_closure(Matter_IM_SubscribedHeartbeat_reached_timeout, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(sub),
+ /* K1 */ be_nested_str_weak(remove_self),
+ }),
+ be_str_weak(reached_timeout),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x80000000, // 0003 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: status_ok_received
+********************************************************************/
+be_local_closure(Matter_IM_SubscribedHeartbeat_status_ok_received, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[10]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(format),
+ /* K4 */ be_nested_str_weak(MTR_X3A_X20Matter_IM_SubscribedHeartbeat_X20status_ok_received_X20sub_X3D_X25i_X20exch_X3D_X25i),
+ /* K5 */ be_nested_str_weak(sub),
+ /* K6 */ be_nested_str_weak(subscription_id),
+ /* K7 */ be_nested_str_weak(resp),
+ /* K8 */ be_nested_str_weak(exchange_id),
+ /* K9 */ be_const_int(3),
+ }),
+ be_str_weak(status_ok_received),
+ &be_const_str_solidified,
+ ( &(const binstruction[14]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0xB80E0200, // 0001 GETNGBL R3 K1
+ 0x8C0C0702, // 0002 GETMET R3 R3 K2
+ 0x8C140503, // 0003 GETMET R5 R2 K3
+ 0x581C0004, // 0004 LDCONST R7 K4
+ 0x88200105, // 0005 GETMBR R8 R0 K5
+ 0x88201106, // 0006 GETMBR R8 R8 K6
+ 0x88240107, // 0007 GETMBR R9 R0 K7
+ 0x88241308, // 0008 GETMBR R9 R9 K8
+ 0x7C140800, // 0009 CALL R5 4
+ 0x58180009, // 000A LDCONST R6 K9
+ 0x7C0C0600, // 000B CALL R3 3
+ 0x500C0000, // 000C LDBOOL R3 0 0
+ 0x80040600, // 000D RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_SubscribedHeartbeat_init, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 5, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[11]) { /* constants */
+ /* K0 */ be_nested_str_weak(resp),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(Frame),
+ /* K3 */ be_nested_str_weak(initiate_response),
+ /* K4 */ be_nested_str_weak(data),
+ /* K5 */ be_nested_str_weak(ready),
+ /* K6 */ be_nested_str_weak(expiration),
+ /* K7 */ be_nested_str_weak(tasmota),
+ /* K8 */ be_nested_str_weak(millis),
+ /* K9 */ be_nested_str_weak(MSG_TIMEOUT),
+ /* K10 */ be_nested_str_weak(sub),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[20]) { /* code */
+ 0xB8160200, // 0000 GETNGBL R5 K1
+ 0x88140B02, // 0001 GETMBR R5 R5 K2
+ 0x8C140B03, // 0002 GETMET R5 R5 K3
+ 0x5C1C0200, // 0003 MOVE R7 R1
+ 0x5C200400, // 0004 MOVE R8 R2
+ 0x54260004, // 0005 LDINT R9 5
+ 0x50280200, // 0006 LDBOOL R10 1 0
+ 0x7C140A00, // 0007 CALL R5 5
+ 0x90020005, // 0008 SETMBR R0 K0 R5
+ 0x90020803, // 0009 SETMBR R0 K4 R3
+ 0x50140200, // 000A LDBOOL R5 1 0
+ 0x90020A05, // 000B SETMBR R0 K5 R5
+ 0xB8160E00, // 000C GETNGBL R5 K7
+ 0x8C140B08, // 000D GETMET R5 R5 K8
+ 0x7C140200, // 000E CALL R5 1
+ 0x88180109, // 000F GETMBR R6 R0 K9
+ 0x00140A06, // 0010 ADD R5 R5 R6
+ 0x90020C05, // 0011 SETMBR R0 K6 R5
+ 0x90021404, // 0012 SETMBR R0 K10 R4
+ 0x80000000, // 0013 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_IM_SubscribedHeartbeat
+********************************************************************/
+extern const bclass be_class_Matter_IM_ReportData;
+be_local_class(Matter_IM_SubscribedHeartbeat,
+ 1,
+ &be_class_Matter_IM_ReportData,
+ be_nested_map(7,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(init, 1), be_const_closure(Matter_IM_SubscribedHeartbeat_init_closure) },
+ { be_const_key_weak(status_ok_received, -1), be_const_closure(Matter_IM_SubscribedHeartbeat_status_ok_received_closure) },
+ { be_const_key_weak(sub, 6), be_const_var(0) },
+ { be_const_key_weak(ack_received, -1), be_const_closure(Matter_IM_SubscribedHeartbeat_ack_received_closure) },
+ { be_const_key_weak(reached_timeout, -1), be_const_closure(Matter_IM_SubscribedHeartbeat_reached_timeout_closure) },
+ { be_const_key_weak(status_error_received, 0), be_const_closure(Matter_IM_SubscribedHeartbeat_status_error_received_closure) },
+ { be_const_key_weak(send_im, -1), be_const_closure(Matter_IM_SubscribedHeartbeat_send_im_closure) },
+ })),
+ be_str_weak(Matter_IM_SubscribedHeartbeat)
+);
+/*******************************************************************/
+
+void be_load_Matter_IM_SubscribedHeartbeat_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_IM_SubscribedHeartbeat);
+ be_setglobal(vm, "Matter_IM_SubscribedHeartbeat");
+ be_pop(vm, 1);
+}
+
+extern const bclass be_class_Matter_IM_SubscribeResponse;
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_SubscribeResponse_init, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(init),
+ /* K1 */ be_nested_str_weak(sub),
+ /* K2 */ be_nested_str_weak(report_data_phase),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[11]) { /* code */
+ 0x60100003, // 0000 GETGBL R4 G3
+ 0x5C140000, // 0001 MOVE R5 R0
+ 0x7C100200, // 0002 CALL R4 1
+ 0x8C100900, // 0003 GETMET R4 R4 K0
+ 0x5C180200, // 0004 MOVE R6 R1
+ 0x5C1C0400, // 0005 MOVE R7 R2
+ 0x7C100600, // 0006 CALL R4 3
+ 0x90020203, // 0007 SETMBR R0 K1 R3
+ 0x50100200, // 0008 LDBOOL R4 1 0
+ 0x90020404, // 0009 SETMBR R0 K2 R4
+ 0x80000000, // 000A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: status_ok_received
+********************************************************************/
+be_local_closure(Matter_IM_SubscribeResponse_status_ok_received, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[18]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(format),
+ /* K4 */ be_nested_str_weak(MTR_X3A_X20IM_SubscribeResponse_X20status_ok_received_X20sub_X3D_X25i_X20exch_X3D_X25i_X20ack_X3D_X25i_X20last_counter_X3D_X25i),
+ /* K5 */ be_nested_str_weak(sub),
+ /* K6 */ be_nested_str_weak(subscription_id),
+ /* K7 */ be_nested_str_weak(resp),
+ /* K8 */ be_nested_str_weak(exchange_id),
+ /* K9 */ be_nested_str_weak(ack_message_counter),
+ /* K10 */ be_const_int(0),
+ /* K11 */ be_nested_str_weak(last_counter),
+ /* K12 */ be_const_int(3),
+ /* K13 */ be_nested_str_weak(MTR_X3A_X20_X3ESub_OK_X20_X20_X20_X20_X28_X256i_X29_X20sub_X3D_X25i),
+ /* K14 */ be_nested_str_weak(session),
+ /* K15 */ be_nested_str_weak(local_session_id),
+ /* K16 */ be_const_int(2),
+ /* K17 */ be_nested_str_weak(status_ok_received),
+ }),
+ be_str_weak(status_ok_received),
+ &be_const_str_solidified,
+ ( &(const binstruction[36]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0xB80E0200, // 0001 GETNGBL R3 K1
+ 0x8C0C0702, // 0002 GETMET R3 R3 K2
+ 0x8C140503, // 0003 GETMET R5 R2 K3
+ 0x581C0004, // 0004 LDCONST R7 K4
+ 0x88200105, // 0005 GETMBR R8 R0 K5
+ 0x88201106, // 0006 GETMBR R8 R8 K6
+ 0x88240107, // 0007 GETMBR R9 R0 K7
+ 0x88241308, // 0008 GETMBR R9 R9 K8
+ 0x88280309, // 0009 GETMBR R10 R1 K9
+ 0x782A0001, // 000A JMPF R10 #000D
+ 0x88280309, // 000B GETMBR R10 R1 K9
+ 0x70020000, // 000C JMP #000E
+ 0x5828000A, // 000D LDCONST R10 K10
+ 0x882C010B, // 000E GETMBR R11 R0 K11
+ 0x7C140C00, // 000F CALL R5 6
+ 0x5818000C, // 0010 LDCONST R6 K12
+ 0x7C0C0600, // 0011 CALL R3 3
+ 0xB80E0200, // 0012 GETNGBL R3 K1
+ 0x8C0C0702, // 0013 GETMET R3 R3 K2
+ 0x8C140503, // 0014 GETMET R5 R2 K3
+ 0x581C000D, // 0015 LDCONST R7 K13
+ 0x8820030E, // 0016 GETMBR R8 R1 K14
+ 0x8820110F, // 0017 GETMBR R8 R8 K15
+ 0x88240105, // 0018 GETMBR R9 R0 K5
+ 0x88241306, // 0019 GETMBR R9 R9 K6
+ 0x7C140800, // 001A CALL R5 4
+ 0x58180010, // 001B LDCONST R6 K16
+ 0x7C0C0600, // 001C CALL R3 3
+ 0x600C0003, // 001D GETGBL R3 G3
+ 0x5C100000, // 001E MOVE R4 R0
+ 0x7C0C0200, // 001F CALL R3 1
+ 0x8C0C0711, // 0020 GETMET R3 R3 K17
+ 0x5C140200, // 0021 MOVE R5 R1
+ 0x7C0C0400, // 0022 CALL R3 2
+ 0x80040600, // 0023 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send_im
+********************************************************************/
+be_local_closure(Matter_IM_SubscribeResponse_send_im, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[28]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(format),
+ /* K4 */ be_nested_str_weak(MTR_X3A_X20Matter_IM_SubscribeResponse_X20send_X20sub_X3D_X25i_X20ready_X3D_X25i),
+ /* K5 */ be_nested_str_weak(sub),
+ /* K6 */ be_nested_str_weak(subscription_id),
+ /* K7 */ be_nested_str_weak(ready),
+ /* K8 */ be_const_int(1),
+ /* K9 */ be_const_int(0),
+ /* K10 */ be_const_int(3),
+ /* K11 */ be_nested_str_weak(report_data_phase),
+ /* K12 */ be_nested_str_weak(send_im),
+ /* K13 */ be_nested_str_weak(finish),
+ /* K14 */ be_nested_str_weak(resp),
+ /* K15 */ be_nested_str_weak(matter),
+ /* K16 */ be_nested_str_weak(SubscribeResponseMessage),
+ /* K17 */ be_nested_str_weak(max_interval),
+ /* K18 */ be_nested_str_weak(opcode),
+ /* K19 */ be_nested_str_weak(encode_frame),
+ /* K20 */ be_nested_str_weak(to_TLV),
+ /* K21 */ be_nested_str_weak(tlv2raw),
+ /* K22 */ be_nested_str_weak(encrypt),
+ /* K23 */ be_nested_str_weak(send_response_frame),
+ /* K24 */ be_nested_str_weak(last_counter),
+ /* K25 */ be_nested_str_weak(message_counter),
+ /* K26 */ be_nested_str_weak(MTR_X3A_X20Send_X20SubscribeResponseMessage_X20sub_X3D_X25i_X20id_X3D_X25i),
+ /* K27 */ be_nested_str_weak(re_arm),
+ }),
+ be_str_weak(send_im),
+ &be_const_str_solidified,
+ ( &(const binstruction[78]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0xB80E0200, // 0001 GETNGBL R3 K1
+ 0x8C0C0702, // 0002 GETMET R3 R3 K2
+ 0x8C140503, // 0003 GETMET R5 R2 K3
+ 0x581C0004, // 0004 LDCONST R7 K4
+ 0x88200105, // 0005 GETMBR R8 R0 K5
+ 0x88201106, // 0006 GETMBR R8 R8 K6
+ 0x88240107, // 0007 GETMBR R9 R0 K7
+ 0x78260001, // 0008 JMPF R9 #000B
+ 0x58240008, // 0009 LDCONST R9 K8
+ 0x70020000, // 000A JMP #000C
+ 0x58240009, // 000B LDCONST R9 K9
+ 0x7C140800, // 000C CALL R5 4
+ 0x5818000A, // 000D LDCONST R6 K10
+ 0x7C0C0600, // 000E CALL R3 3
+ 0x880C0107, // 000F GETMBR R3 R0 K7
+ 0x740E0001, // 0010 JMPT R3 #0013
+ 0x500C0000, // 0011 LDBOOL R3 0 0
+ 0x80040600, // 0012 RET 1 R3
+ 0x880C010B, // 0013 GETMBR R3 R0 K11
+ 0x780E000E, // 0014 JMPF R3 #0024
+ 0x600C0003, // 0015 GETGBL R3 G3
+ 0x5C100000, // 0016 MOVE R4 R0
+ 0x7C0C0200, // 0017 CALL R3 1
+ 0x8C0C070C, // 0018 GETMET R3 R3 K12
+ 0x5C140200, // 0019 MOVE R5 R1
+ 0x7C0C0400, // 001A CALL R3 2
+ 0x880C010D, // 001B GETMBR R3 R0 K13
+ 0x780E0003, // 001C JMPF R3 #0021
+ 0x500C0000, // 001D LDBOOL R3 0 0
+ 0x90021603, // 001E SETMBR R0 K11 R3
+ 0x500C0000, // 001F LDBOOL R3 0 0
+ 0x90021A03, // 0020 SETMBR R0 K13 R3
+ 0x500C0000, // 0021 LDBOOL R3 0 0
+ 0x90020E03, // 0022 SETMBR R0 K7 R3
+ 0x70020028, // 0023 JMP #004D
+ 0x880C010E, // 0024 GETMBR R3 R0 K14
+ 0xB8121E00, // 0025 GETNGBL R4 K15
+ 0x8C100910, // 0026 GETMET R4 R4 K16
+ 0x7C100200, // 0027 CALL R4 1
+ 0x88140105, // 0028 GETMBR R5 R0 K5
+ 0x88140B06, // 0029 GETMBR R5 R5 K6
+ 0x90120C05, // 002A SETMBR R4 K6 R5
+ 0x88140105, // 002B GETMBR R5 R0 K5
+ 0x88140B11, // 002C GETMBR R5 R5 K17
+ 0x90122205, // 002D SETMBR R4 K17 R5
+ 0x8814010E, // 002E GETMBR R5 R0 K14
+ 0x541A0003, // 002F LDINT R6 4
+ 0x90162406, // 0030 SETMBR R5 K18 R6
+ 0x8C140713, // 0031 GETMET R5 R3 K19
+ 0x8C1C0914, // 0032 GETMET R7 R4 K20
+ 0x7C1C0200, // 0033 CALL R7 1
+ 0x8C1C0F15, // 0034 GETMET R7 R7 K21
+ 0x7C1C0200, // 0035 CALL R7 1
+ 0x7C140400, // 0036 CALL R5 2
+ 0x8C140716, // 0037 GETMET R5 R3 K22
+ 0x7C140200, // 0038 CALL R5 1
+ 0x8C140317, // 0039 GETMET R5 R1 K23
+ 0x5C1C0600, // 003A MOVE R7 R3
+ 0x7C140400, // 003B CALL R5 2
+ 0x88140719, // 003C GETMBR R5 R3 K25
+ 0x90023005, // 003D SETMBR R0 K24 R5
+ 0xB8160200, // 003E GETNGBL R5 K1
+ 0x8C140B02, // 003F GETMET R5 R5 K2
+ 0x8C1C0503, // 0040 GETMET R7 R2 K3
+ 0x5824001A, // 0041 LDCONST R9 K26
+ 0x88280105, // 0042 GETMBR R10 R0 K5
+ 0x88281506, // 0043 GETMBR R10 R10 K6
+ 0x882C0719, // 0044 GETMBR R11 R3 K25
+ 0x7C1C0800, // 0045 CALL R7 4
+ 0x5820000A, // 0046 LDCONST R8 K10
+ 0x7C140600, // 0047 CALL R5 3
+ 0x88140105, // 0048 GETMBR R5 R0 K5
+ 0x8C140B1B, // 0049 GETMET R5 R5 K27
+ 0x7C140200, // 004A CALL R5 1
+ 0x50140200, // 004B LDBOOL R5 1 0
+ 0x90021A05, // 004C SETMBR R0 K13 R5
+ 0x80000000, // 004D RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_IM_SubscribeResponse
+********************************************************************/
+extern const bclass be_class_Matter_IM_ReportData;
+be_local_class(Matter_IM_SubscribeResponse,
+ 2,
+ &be_class_Matter_IM_ReportData,
+ be_nested_map(5,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(init, 4), be_const_closure(Matter_IM_SubscribeResponse_init_closure) },
+ { be_const_key_weak(sub, -1), be_const_var(0) },
+ { be_const_key_weak(status_ok_received, -1), be_const_closure(Matter_IM_SubscribeResponse_status_ok_received_closure) },
+ { be_const_key_weak(send_im, -1), be_const_closure(Matter_IM_SubscribeResponse_send_im_closure) },
+ { be_const_key_weak(report_data_phase, -1), be_const_var(1) },
+ })),
+ be_str_weak(Matter_IM_SubscribeResponse)
+);
+/*******************************************************************/
+
+void be_load_Matter_IM_SubscribeResponse_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_IM_SubscribeResponse);
+ be_setglobal(vm, "Matter_IM_SubscribeResponse");
+ be_pop(vm, 1);
+}
+/********************************************************************/
+/* End of solidification */
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Subscription.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Subscription.h
new file mode 100644
index 000000000..e2f48b099
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM_Subscription.h
@@ -0,0 +1,873 @@
+/* Solidification of Matter_IM_Subscription.h */
+/********************************************************************\
+* Generated code, don't edit *
+\********************************************************************/
+#include "be_constobj.h"
+
+extern const bclass be_class_Matter_IM_Subscription;
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_init, /* name */
+ be_nested_proto(
+ 13, /* nstack */
+ 5, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[22]) { /* constants */
+ /* K0 */ be_nested_str_weak(subs_shop),
+ /* K1 */ be_nested_str_weak(subscription_id),
+ /* K2 */ be_nested_str_weak(session),
+ /* K3 */ be_nested_str_weak(min_interval_floor),
+ /* K4 */ be_const_int(0),
+ /* K5 */ be_nested_str_weak(min_interval),
+ /* K6 */ be_nested_str_weak(max_interval_ceiling),
+ /* K7 */ be_nested_str_weak(max_interval),
+ /* K8 */ be_nested_str_weak(wait_status),
+ /* K9 */ be_nested_str_weak(fabric_filtered),
+ /* K10 */ be_nested_str_weak(path_list),
+ /* K11 */ be_nested_str_weak(attributes_requests),
+ /* K12 */ be_nested_str_weak(matter),
+ /* K13 */ be_nested_str_weak(Path),
+ /* K14 */ be_nested_str_weak(endpoint),
+ /* K15 */ be_nested_str_weak(cluster),
+ /* K16 */ be_nested_str_weak(attribute),
+ /* K17 */ be_nested_str_weak(push),
+ /* K18 */ be_nested_str_weak(stop_iteration),
+ /* K19 */ be_nested_str_weak(updates),
+ /* K20 */ be_nested_str_weak(clear_before_arm),
+ /* K21 */ be_nested_str_weak(is_keep_alive),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[61]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x90020202, // 0001 SETMBR R0 K1 R2
+ 0x90020403, // 0002 SETMBR R0 K2 R3
+ 0x88140903, // 0003 GETMBR R5 R4 K3
+ 0x14180B04, // 0004 LT R6 R5 K4
+ 0x781A0000, // 0005 JMPF R6 #0007
+ 0x58140004, // 0006 LDCONST R5 K4
+ 0x541A003B, // 0007 LDINT R6 60
+ 0x24180A06, // 0008 GT R6 R5 R6
+ 0x781A0000, // 0009 JMPF R6 #000B
+ 0x5416003B, // 000A LDINT R5 60
+ 0x90020A05, // 000B SETMBR R0 K5 R5
+ 0x88180906, // 000C GETMBR R6 R4 K6
+ 0x541E003B, // 000D LDINT R7 60
+ 0x141C0C07, // 000E LT R7 R6 R7
+ 0x781E0000, // 000F JMPF R7 #0011
+ 0x541A003B, // 0010 LDINT R6 60
+ 0x541E0E0F, // 0011 LDINT R7 3600
+ 0x241C0C07, // 0012 GT R7 R6 R7
+ 0x781E0000, // 0013 JMPF R7 #0015
+ 0x541A0E0F, // 0014 LDINT R6 3600
+ 0x541A003B, // 0015 LDINT R6 60
+ 0x90020E06, // 0016 SETMBR R0 K7 R6
+ 0x501C0000, // 0017 LDBOOL R7 0 0
+ 0x90021007, // 0018 SETMBR R0 K8 R7
+ 0x881C0909, // 0019 GETMBR R7 R4 K9
+ 0x90021207, // 001A SETMBR R0 K9 R7
+ 0x601C0012, // 001B GETGBL R7 G18
+ 0x7C1C0000, // 001C CALL R7 0
+ 0x90021407, // 001D SETMBR R0 K10 R7
+ 0x601C0010, // 001E GETGBL R7 G16
+ 0x8820090B, // 001F GETMBR R8 R4 K11
+ 0x7C1C0200, // 0020 CALL R7 1
+ 0xA802000F, // 0021 EXBLK 0 #0032
+ 0x5C200E00, // 0022 MOVE R8 R7
+ 0x7C200000, // 0023 CALL R8 0
+ 0xB8261800, // 0024 GETNGBL R9 K12
+ 0x8C24130D, // 0025 GETMET R9 R9 K13
+ 0x7C240200, // 0026 CALL R9 1
+ 0x8828110E, // 0027 GETMBR R10 R8 K14
+ 0x90261C0A, // 0028 SETMBR R9 K14 R10
+ 0x8828110F, // 0029 GETMBR R10 R8 K15
+ 0x90261E0A, // 002A SETMBR R9 K15 R10
+ 0x88281110, // 002B GETMBR R10 R8 K16
+ 0x9026200A, // 002C SETMBR R9 K16 R10
+ 0x8828010A, // 002D GETMBR R10 R0 K10
+ 0x8C281511, // 002E GETMET R10 R10 K17
+ 0x5C301200, // 002F MOVE R12 R9
+ 0x7C280400, // 0030 CALL R10 2
+ 0x7001FFEF, // 0031 JMP #0022
+ 0x581C0012, // 0032 LDCONST R7 K18
+ 0xAC1C0200, // 0033 CATCH R7 1 0
+ 0xB0080000, // 0034 RAISE 2 R0 R0
+ 0x601C0012, // 0035 GETGBL R7 G18
+ 0x7C1C0000, // 0036 CALL R7 0
+ 0x90022607, // 0037 SETMBR R0 K19 R7
+ 0x8C1C0114, // 0038 GETMET R7 R0 K20
+ 0x7C1C0200, // 0039 CALL R7 1
+ 0x501C0000, // 003A LDBOOL R7 0 0
+ 0x90022A07, // 003B SETMBR R0 K21 R7
+ 0x80000000, // 003C RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _add_attribute_unique_path
+********************************************************************/
+be_local_closure(Matter_IM_Subscription__add_attribute_unique_path, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(updates),
+ /* K2 */ be_nested_str_weak(endpoint),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(attribute),
+ /* K5 */ be_const_int(1),
+ /* K6 */ be_nested_str_weak(push),
+ }),
+ be_str_weak(_add_attribute_unique_path),
+ &be_const_str_solidified,
+ ( &(const binstruction[28]) { /* code */
+ 0x58080000, // 0000 LDCONST R2 K0
+ 0x600C000C, // 0001 GETGBL R3 G12
+ 0x88100101, // 0002 GETMBR R4 R0 K1
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x140C0403, // 0004 LT R3 R2 R3
+ 0x780E0010, // 0005 JMPF R3 #0017
+ 0x880C0101, // 0006 GETMBR R3 R0 K1
+ 0x940C0602, // 0007 GETIDX R3 R3 R2
+ 0x88100702, // 0008 GETMBR R4 R3 K2
+ 0x88140302, // 0009 GETMBR R5 R1 K2
+ 0x1C100805, // 000A EQ R4 R4 R5
+ 0x78120008, // 000B JMPF R4 #0015
+ 0x88100703, // 000C GETMBR R4 R3 K3
+ 0x88140303, // 000D GETMBR R5 R1 K3
+ 0x1C100805, // 000E EQ R4 R4 R5
+ 0x78120004, // 000F JMPF R4 #0015
+ 0x88100704, // 0010 GETMBR R4 R3 K4
+ 0x88140304, // 0011 GETMBR R5 R1 K4
+ 0x1C100805, // 0012 EQ R4 R4 R5
+ 0x78120000, // 0013 JMPF R4 #0015
+ 0x80000800, // 0014 RET 0
+ 0x00080505, // 0015 ADD R2 R2 K5
+ 0x7001FFE9, // 0016 JMP #0001
+ 0x880C0101, // 0017 GETMBR R3 R0 K1
+ 0x8C0C0706, // 0018 GETMET R3 R3 K6
+ 0x5C140200, // 0019 MOVE R5 R1
+ 0x7C0C0400, // 001A CALL R3 2
+ 0x80000000, // 001B RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: remove_self
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_remove_self, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_nested_str_weak(tasmota),
+ /* K1 */ be_nested_str_weak(log),
+ /* K2 */ be_nested_str_weak(MTR_X3A_X20_X2DSub_Del_X20_X20_X20_X28_X20_X20_X20_X20_X20_X20_X29_X20sub_X3D),
+ /* K3 */ be_nested_str_weak(subscription_id),
+ /* K4 */ be_const_int(2),
+ /* K5 */ be_nested_str_weak(subs_shop),
+ /* K6 */ be_nested_str_weak(remove_sub),
+ }),
+ be_str_weak(remove_self),
+ &be_const_str_solidified,
+ ( &(const binstruction[13]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x600C0008, // 0002 GETGBL R3 G8
+ 0x88100103, // 0003 GETMBR R4 R0 K3
+ 0x7C0C0200, // 0004 CALL R3 1
+ 0x000E0403, // 0005 ADD R3 K2 R3
+ 0x58100004, // 0006 LDCONST R4 K4
+ 0x7C040600, // 0007 CALL R1 3
+ 0x88040105, // 0008 GETMBR R1 R0 K5
+ 0x8C040306, // 0009 GETMET R1 R1 K6
+ 0x5C0C0000, // 000A MOVE R3 R0
+ 0x7C040400, // 000B CALL R1 2
+ 0x80000000, // 000C RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: clear_before_arm
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_clear_before_arm, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(updates),
+ /* K1 */ be_nested_str_weak(clear),
+ /* K2 */ be_nested_str_weak(wait_status),
+ }),
+ be_str_weak(clear_before_arm),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x50040200, // 0003 LDBOOL R1 1 0
+ 0x90020401, // 0004 SETMBR R0 K2 R1
+ 0x80000000, // 0005 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: attribute_updated_ctx
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_attribute_updated_ctx, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(path_list),
+ /* K2 */ be_nested_str_weak(endpoint),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(attribute),
+ /* K5 */ be_nested_str_weak(_add_attribute_unique_path),
+ /* K6 */ be_const_int(1),
+ }),
+ be_str_weak(attribute_updated_ctx),
+ &be_const_str_solidified,
+ ( &(const binstruction[38]) { /* code */
+ 0x580C0000, // 0000 LDCONST R3 K0
+ 0x6010000C, // 0001 GETGBL R4 G12
+ 0x88140101, // 0002 GETMBR R5 R0 K1
+ 0x7C100200, // 0003 CALL R4 1
+ 0x14100604, // 0004 LT R4 R3 R4
+ 0x7812001E, // 0005 JMPF R4 #0025
+ 0x88100101, // 0006 GETMBR R4 R0 K1
+ 0x94100803, // 0007 GETIDX R4 R4 R3
+ 0x88140902, // 0008 GETMBR R5 R4 K2
+ 0x4C180000, // 0009 LDNIL R6
+ 0x1C140A06, // 000A EQ R5 R5 R6
+ 0x74160003, // 000B JMPT R5 #0010
+ 0x88140902, // 000C GETMBR R5 R4 K2
+ 0x88180302, // 000D GETMBR R6 R1 K2
+ 0x1C140A06, // 000E EQ R5 R5 R6
+ 0x78160012, // 000F JMPF R5 #0023
+ 0x88140903, // 0010 GETMBR R5 R4 K3
+ 0x4C180000, // 0011 LDNIL R6
+ 0x1C140A06, // 0012 EQ R5 R5 R6
+ 0x74160003, // 0013 JMPT R5 #0018
+ 0x88140903, // 0014 GETMBR R5 R4 K3
+ 0x88180303, // 0015 GETMBR R6 R1 K3
+ 0x1C140A06, // 0016 EQ R5 R5 R6
+ 0x7816000A, // 0017 JMPF R5 #0023
+ 0x88140904, // 0018 GETMBR R5 R4 K4
+ 0x4C180000, // 0019 LDNIL R6
+ 0x1C140A06, // 001A EQ R5 R5 R6
+ 0x74160003, // 001B JMPT R5 #0020
+ 0x88140904, // 001C GETMBR R5 R4 K4
+ 0x88180304, // 001D GETMBR R6 R1 K4
+ 0x1C140A06, // 001E EQ R5 R5 R6
+ 0x78160002, // 001F JMPF R5 #0023
+ 0x8C140105, // 0020 GETMET R5 R0 K5
+ 0x5C1C0200, // 0021 MOVE R7 R1
+ 0x7C140400, // 0022 CALL R5 2
+ 0x000C0706, // 0023 ADD R3 R3 K6
+ 0x7001FFDB, // 0024 JMP #0001
+ 0x80000000, // 0025 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: re_arm
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_re_arm, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[16]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(wait_status),
+ /* K2 */ be_nested_str_weak(tasmota),
+ /* K3 */ be_nested_str_weak(millis),
+ /* K4 */ be_nested_str_weak(expiration),
+ /* K5 */ be_nested_str_weak(max_interval),
+ /* K6 */ be_nested_str_weak(MAX_INTERVAL_MARGIN),
+ /* K7 */ be_nested_str_weak(not_before),
+ /* K8 */ be_nested_str_weak(min_interval),
+ /* K9 */ be_const_int(1),
+ /* K10 */ be_nested_str_weak(is_keep_alive),
+ /* K11 */ be_nested_str_weak(log),
+ /* K12 */ be_nested_str_weak(format),
+ /* K13 */ be_nested_str_weak(MTR_X3A_X20_X2ESub_Done_X20_X20_X28_X20_X20_X20_X20_X20_X20_X29_X20sub_X3D_X25i),
+ /* K14 */ be_nested_str_weak(subscription_id),
+ /* K15 */ be_const_int(2),
+ }),
+ be_str_weak(re_arm),
+ &be_const_str_solidified,
+ ( &(const binstruction[30]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0x50080000, // 0001 LDBOOL R2 0 0
+ 0x90020202, // 0002 SETMBR R0 K1 R2
+ 0xB80A0400, // 0003 GETNGBL R2 K2
+ 0x8C080503, // 0004 GETMET R2 R2 K3
+ 0x7C080200, // 0005 CALL R2 1
+ 0x880C0105, // 0006 GETMBR R3 R0 K5
+ 0x88100106, // 0007 GETMBR R4 R0 K6
+ 0x040C0604, // 0008 SUB R3 R3 R4
+ 0x541203E7, // 0009 LDINT R4 1000
+ 0x080C0604, // 000A MUL R3 R3 R4
+ 0x000C0403, // 000B ADD R3 R2 R3
+ 0x90020803, // 000C SETMBR R0 K4 R3
+ 0x880C0108, // 000D GETMBR R3 R0 K8
+ 0x541203E7, // 000E LDINT R4 1000
+ 0x080C0604, // 000F MUL R3 R3 R4
+ 0x000C0403, // 0010 ADD R3 R2 R3
+ 0x040C0709, // 0011 SUB R3 R3 K9
+ 0x90020E03, // 0012 SETMBR R0 K7 R3
+ 0x880C010A, // 0013 GETMBR R3 R0 K10
+ 0x740E0007, // 0014 JMPT R3 #001D
+ 0xB80E0400, // 0015 GETNGBL R3 K2
+ 0x8C0C070B, // 0016 GETMET R3 R3 K11
+ 0x8C14030C, // 0017 GETMET R5 R1 K12
+ 0x581C000D, // 0018 LDCONST R7 K13
+ 0x8820010E, // 0019 GETMBR R8 R0 K14
+ 0x7C140600, // 001A CALL R5 3
+ 0x5818000F, // 001B LDCONST R6 K15
+ 0x7C0C0600, // 001C CALL R3 3
+ 0x80000000, // 001D RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_IM_Subscription
+********************************************************************/
+be_local_class(Matter_IM_Subscription,
+ 12,
+ NULL,
+ be_nested_map(19,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(not_before, -1), be_const_var(7) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_IM_Subscription_init_closure) },
+ { be_const_key_weak(attribute_updated_ctx, -1), be_const_closure(Matter_IM_Subscription_attribute_updated_ctx_closure) },
+ { be_const_key_weak(updates, -1), be_const_var(11) },
+ { be_const_key_weak(min_interval, -1), be_const_var(4) },
+ { be_const_key_weak(expiration, -1), be_const_var(8) },
+ { be_const_key_weak(subscription_id, 3), be_const_var(1) },
+ { be_const_key_weak(subs_shop, -1), be_const_var(0) },
+ { be_const_key_weak(max_interval, -1), be_const_var(5) },
+ { be_const_key_weak(remove_self, 1), be_const_closure(Matter_IM_Subscription_remove_self_closure) },
+ { be_const_key_weak(MAX_INTERVAL_MARGIN, -1), be_const_int(5) },
+ { be_const_key_weak(fabric_filtered, 7), be_const_var(6) },
+ { be_const_key_weak(_add_attribute_unique_path, 11), be_const_closure(Matter_IM_Subscription__add_attribute_unique_path_closure) },
+ { be_const_key_weak(path_list, 9), be_const_var(3) },
+ { be_const_key_weak(is_keep_alive, -1), be_const_var(10) },
+ { be_const_key_weak(clear_before_arm, -1), be_const_closure(Matter_IM_Subscription_clear_before_arm_closure) },
+ { be_const_key_weak(session, 2), be_const_var(2) },
+ { be_const_key_weak(re_arm, -1), be_const_closure(Matter_IM_Subscription_re_arm_closure) },
+ { be_const_key_weak(wait_status, 0), be_const_var(9) },
+ })),
+ be_str_weak(Matter_IM_Subscription)
+);
+/*******************************************************************/
+
+void be_load_Matter_IM_Subscription_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_IM_Subscription);
+ be_setglobal(vm, "Matter_IM_Subscription");
+ be_pop(vm, 1);
+}
+
+extern const bclass be_class_Matter_IM_Subscription_Shop;
+
+/********************************************************************
+** Solidified function: every_250ms
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_Shop_every_250ms, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[14]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(subs),
+ /* K2 */ be_nested_str_weak(wait_status),
+ /* K3 */ be_nested_str_weak(updates),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(time_reached),
+ /* K6 */ be_nested_str_weak(not_before),
+ /* K7 */ be_nested_str_weak(im),
+ /* K8 */ be_nested_str_weak(send_subscribe_update),
+ /* K9 */ be_nested_str_weak(clear_before_arm),
+ /* K10 */ be_const_int(1),
+ /* K11 */ be_nested_str_weak(expiration),
+ /* K12 */ be_nested_str_weak(send_subscribe_heartbeat),
+ /* K13 */ be_nested_str_weak(re_arm),
+ }),
+ be_str_weak(every_250ms),
+ &be_const_str_solidified,
+ ( &(const binstruction[54]) { /* code */
+ 0x58040000, // 0000 LDCONST R1 K0
+ 0x6008000C, // 0001 GETGBL R2 G12
+ 0x880C0101, // 0002 GETMBR R3 R0 K1
+ 0x7C080200, // 0003 CALL R2 1
+ 0x14080202, // 0004 LT R2 R1 R2
+ 0x780A0015, // 0005 JMPF R2 #001C
+ 0x88080101, // 0006 GETMBR R2 R0 K1
+ 0x94080401, // 0007 GETIDX R2 R2 R1
+ 0x880C0502, // 0008 GETMBR R3 R2 K2
+ 0x740E000F, // 0009 JMPT R3 #001A
+ 0x600C000C, // 000A GETGBL R3 G12
+ 0x88100503, // 000B GETMBR R4 R2 K3
+ 0x7C0C0200, // 000C CALL R3 1
+ 0x240C0700, // 000D GT R3 R3 K0
+ 0x780E000A, // 000E JMPF R3 #001A
+ 0xB80E0800, // 000F GETNGBL R3 K4
+ 0x8C0C0705, // 0010 GETMET R3 R3 K5
+ 0x88140506, // 0011 GETMBR R5 R2 K6
+ 0x7C0C0400, // 0012 CALL R3 2
+ 0x780E0005, // 0013 JMPF R3 #001A
+ 0x880C0107, // 0014 GETMBR R3 R0 K7
+ 0x8C0C0708, // 0015 GETMET R3 R3 K8
+ 0x5C140400, // 0016 MOVE R5 R2
+ 0x7C0C0400, // 0017 CALL R3 2
+ 0x8C0C0509, // 0018 GETMET R3 R2 K9
+ 0x7C0C0200, // 0019 CALL R3 1
+ 0x0004030A, // 001A ADD R1 R1 K10
+ 0x7001FFE4, // 001B JMP #0001
+ 0x58040000, // 001C LDCONST R1 K0
+ 0x6008000C, // 001D GETGBL R2 G12
+ 0x880C0101, // 001E GETMBR R3 R0 K1
+ 0x7C080200, // 001F CALL R2 1
+ 0x14080202, // 0020 LT R2 R1 R2
+ 0x780A0012, // 0021 JMPF R2 #0035
+ 0x88080101, // 0022 GETMBR R2 R0 K1
+ 0x94080401, // 0023 GETIDX R2 R2 R1
+ 0x880C0502, // 0024 GETMBR R3 R2 K2
+ 0x740E000C, // 0025 JMPT R3 #0033
+ 0xB80E0800, // 0026 GETNGBL R3 K4
+ 0x8C0C0705, // 0027 GETMET R3 R3 K5
+ 0x8814050B, // 0028 GETMBR R5 R2 K11
+ 0x7C0C0400, // 0029 CALL R3 2
+ 0x780E0007, // 002A JMPF R3 #0033
+ 0x880C0107, // 002B GETMBR R3 R0 K7
+ 0x8C0C070C, // 002C GETMET R3 R3 K12
+ 0x5C140400, // 002D MOVE R5 R2
+ 0x7C0C0400, // 002E CALL R3 2
+ 0x8C0C0509, // 002F GETMET R3 R2 K9
+ 0x7C0C0200, // 0030 CALL R3 1
+ 0x8C0C050D, // 0031 GETMET R3 R2 K13
+ 0x7C0C0200, // 0032 CALL R3 1
+ 0x0004030A, // 0033 ADD R1 R1 K10
+ 0x7001FFE7, // 0034 JMP #001D
+ 0x80000000, // 0035 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_by_id
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_Shop_get_by_id, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(subs),
+ /* K2 */ be_nested_str_weak(subscription_id),
+ /* K3 */ be_const_int(1),
+ }),
+ be_str_weak(get_by_id),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0x58080000, // 0000 LDCONST R2 K0
+ 0x600C000C, // 0001 GETGBL R3 G12
+ 0x88100101, // 0002 GETMBR R4 R0 K1
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x140C0403, // 0004 LT R3 R2 R3
+ 0x780E0009, // 0005 JMPF R3 #0010
+ 0x880C0101, // 0006 GETMBR R3 R0 K1
+ 0x940C0602, // 0007 GETIDX R3 R3 R2
+ 0x880C0702, // 0008 GETMBR R3 R3 K2
+ 0x1C0C0601, // 0009 EQ R3 R3 R1
+ 0x780E0002, // 000A JMPF R3 #000E
+ 0x880C0101, // 000B GETMBR R3 R0 K1
+ 0x940C0602, // 000C GETIDX R3 R3 R2
+ 0x80040600, // 000D RET 1 R3
+ 0x00080503, // 000E ADD R2 R2 K3
+ 0x7001FFF0, // 000F JMP #0001
+ 0x80000000, // 0010 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: new_subscription
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_Shop_new_subscription, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[10]) { /* constants */
+ /* K0 */ be_nested_str_weak(crypto),
+ /* K1 */ be_nested_str_weak(random),
+ /* K2 */ be_const_int(2),
+ /* K3 */ be_nested_str_weak(get),
+ /* K4 */ be_const_int(0),
+ /* K5 */ be_nested_str_weak(get_by_id),
+ /* K6 */ be_nested_str_weak(matter),
+ /* K7 */ be_nested_str_weak(IM_Subscription),
+ /* K8 */ be_nested_str_weak(subs),
+ /* K9 */ be_nested_str_weak(push),
+ }),
+ be_str_weak(new_subscription),
+ &be_const_str_solidified,
+ ( &(const binstruction[33]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0x8C100701, // 0001 GETMET R4 R3 K1
+ 0x58180002, // 0002 LDCONST R6 K2
+ 0x7C100400, // 0003 CALL R4 2
+ 0x8C100903, // 0004 GETMET R4 R4 K3
+ 0x58180004, // 0005 LDCONST R6 K4
+ 0x581C0002, // 0006 LDCONST R7 K2
+ 0x7C100600, // 0007 CALL R4 3
+ 0x8C140105, // 0008 GETMET R5 R0 K5
+ 0x5C1C0800, // 0009 MOVE R7 R4
+ 0x7C140400, // 000A CALL R5 2
+ 0x78160008, // 000B JMPF R5 #0015
+ 0x8C140701, // 000C GETMET R5 R3 K1
+ 0x581C0002, // 000D LDCONST R7 K2
+ 0x7C140400, // 000E CALL R5 2
+ 0x8C140B03, // 000F GETMET R5 R5 K3
+ 0x581C0004, // 0010 LDCONST R7 K4
+ 0x58200002, // 0011 LDCONST R8 K2
+ 0x7C140600, // 0012 CALL R5 3
+ 0x5C100A00, // 0013 MOVE R4 R5
+ 0x7001FFF2, // 0014 JMP #0008
+ 0xB8160C00, // 0015 GETNGBL R5 K6
+ 0x8C140B07, // 0016 GETMET R5 R5 K7
+ 0x5C1C0000, // 0017 MOVE R7 R0
+ 0x5C200800, // 0018 MOVE R8 R4
+ 0x5C240200, // 0019 MOVE R9 R1
+ 0x5C280400, // 001A MOVE R10 R2
+ 0x7C140A00, // 001B CALL R5 5
+ 0x88180108, // 001C GETMBR R6 R0 K8
+ 0x8C180D09, // 001D GETMET R6 R6 K9
+ 0x5C200A00, // 001E MOVE R8 R5
+ 0x7C180400, // 001F CALL R6 2
+ 0x80040A00, // 0020 RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: remove_sub
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_Shop_remove_sub, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(subs),
+ /* K2 */ be_nested_str_weak(remove),
+ /* K3 */ be_const_int(1),
+ }),
+ be_str_weak(remove_sub),
+ &be_const_str_solidified,
+ ( &(const binstruction[18]) { /* code */
+ 0x58080000, // 0000 LDCONST R2 K0
+ 0x600C000C, // 0001 GETGBL R3 G12
+ 0x88100101, // 0002 GETMBR R4 R0 K1
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x140C0403, // 0004 LT R3 R2 R3
+ 0x780E000A, // 0005 JMPF R3 #0011
+ 0x880C0101, // 0006 GETMBR R3 R0 K1
+ 0x940C0602, // 0007 GETIDX R3 R3 R2
+ 0x1C0C0601, // 0008 EQ R3 R3 R1
+ 0x780E0004, // 0009 JMPF R3 #000F
+ 0x880C0101, // 000A GETMBR R3 R0 K1
+ 0x8C0C0702, // 000B GETMET R3 R3 K2
+ 0x5C140400, // 000C MOVE R5 R2
+ 0x7C0C0400, // 000D CALL R3 2
+ 0x70020000, // 000E JMP #0010
+ 0x00080503, // 000F ADD R2 R2 K3
+ 0x7001FFEF, // 0010 JMP #0001
+ 0x80000000, // 0011 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: attribute_updated_ctx
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_Shop_attribute_updated_ctx, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(subs),
+ /* K2 */ be_nested_str_weak(attribute_updated_ctx),
+ /* K3 */ be_const_int(1),
+ }),
+ be_str_weak(attribute_updated_ctx),
+ &be_const_str_solidified,
+ ( &(const binstruction[15]) { /* code */
+ 0x580C0000, // 0000 LDCONST R3 K0
+ 0x6010000C, // 0001 GETGBL R4 G12
+ 0x88140101, // 0002 GETMBR R5 R0 K1
+ 0x7C100200, // 0003 CALL R4 1
+ 0x14100604, // 0004 LT R4 R3 R4
+ 0x78120007, // 0005 JMPF R4 #000E
+ 0x88100101, // 0006 GETMBR R4 R0 K1
+ 0x94100803, // 0007 GETIDX R4 R4 R3
+ 0x8C100902, // 0008 GETMET R4 R4 K2
+ 0x5C180200, // 0009 MOVE R6 R1
+ 0x5C1C0400, // 000A MOVE R7 R2
+ 0x7C100600, // 000B CALL R4 3
+ 0x000C0703, // 000C ADD R3 R3 K3
+ 0x7001FFF2, // 000D JMP #0001
+ 0x80000000, // 000E RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: remove_by_session
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_Shop_remove_by_session, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(subs),
+ /* K2 */ be_nested_str_weak(session),
+ /* K3 */ be_nested_str_weak(remove),
+ /* K4 */ be_const_int(1),
+ }),
+ be_str_weak(remove_by_session),
+ &be_const_str_solidified,
+ ( &(const binstruction[19]) { /* code */
+ 0x58080000, // 0000 LDCONST R2 K0
+ 0x600C000C, // 0001 GETGBL R3 G12
+ 0x88100101, // 0002 GETMBR R4 R0 K1
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x140C0403, // 0004 LT R3 R2 R3
+ 0x780E000B, // 0005 JMPF R3 #0012
+ 0x880C0101, // 0006 GETMBR R3 R0 K1
+ 0x940C0602, // 0007 GETIDX R3 R3 R2
+ 0x880C0702, // 0008 GETMBR R3 R3 K2
+ 0x1C0C0601, // 0009 EQ R3 R3 R1
+ 0x780E0004, // 000A JMPF R3 #0010
+ 0x880C0101, // 000B GETMBR R3 R0 K1
+ 0x8C0C0703, // 000C GETMET R3 R3 K3
+ 0x5C140400, // 000D MOVE R5 R2
+ 0x7C0C0400, // 000E CALL R3 2
+ 0x70020000, // 000F JMP #0011
+ 0x00080504, // 0010 ADD R2 R2 K4
+ 0x7001FFEE, // 0011 JMP #0001
+ 0x80000000, // 0012 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_Shop_init, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(im),
+ /* K1 */ be_nested_str_weak(subs),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x60080012, // 0001 GETGBL R2 G18
+ 0x7C080000, // 0002 CALL R2 0
+ 0x90020202, // 0003 SETMBR R0 K1 R2
+ 0x80000000, // 0004 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: remove_by_fabric
+********************************************************************/
+be_local_closure(Matter_IM_Subscription_Shop_remove_by_fabric, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(_sessions),
+ /* K1 */ be_nested_str_weak(remove_by_session),
+ /* K2 */ be_nested_str_weak(stop_iteration),
+ }),
+ be_str_weak(remove_by_fabric),
+ &be_const_str_solidified,
+ ( &(const binstruction[14]) { /* code */
+ 0x60080010, // 0000 GETGBL R2 G16
+ 0x880C0300, // 0001 GETMBR R3 R1 K0
+ 0x7C080200, // 0002 CALL R2 1
+ 0xA8020005, // 0003 EXBLK 0 #000A
+ 0x5C0C0400, // 0004 MOVE R3 R2
+ 0x7C0C0000, // 0005 CALL R3 0
+ 0x8C100101, // 0006 GETMET R4 R0 K1
+ 0x5C180600, // 0007 MOVE R6 R3
+ 0x7C100400, // 0008 CALL R4 2
+ 0x7001FFF9, // 0009 JMP #0004
+ 0x58080002, // 000A LDCONST R2 K2
+ 0xAC080200, // 000B CATCH R2 1 0
+ 0xB0080000, // 000C RAISE 2 R0 R0
+ 0x80000000, // 000D RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_IM_Subscription_Shop
+********************************************************************/
+be_local_class(Matter_IM_Subscription_Shop,
+ 2,
+ NULL,
+ be_nested_map(10,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(every_250ms, -1), be_const_closure(Matter_IM_Subscription_Shop_every_250ms_closure) },
+ { be_const_key_weak(get_by_id, -1), be_const_closure(Matter_IM_Subscription_Shop_get_by_id_closure) },
+ { be_const_key_weak(attribute_updated_ctx, -1), be_const_closure(Matter_IM_Subscription_Shop_attribute_updated_ctx_closure) },
+ { be_const_key_weak(init, 2), be_const_closure(Matter_IM_Subscription_Shop_init_closure) },
+ { be_const_key_weak(remove_sub, -1), be_const_closure(Matter_IM_Subscription_Shop_remove_sub_closure) },
+ { be_const_key_weak(new_subscription, 3), be_const_closure(Matter_IM_Subscription_Shop_new_subscription_closure) },
+ { be_const_key_weak(subs, 8), be_const_var(0) },
+ { be_const_key_weak(im, -1), be_const_var(1) },
+ { be_const_key_weak(remove_by_session, -1), be_const_closure(Matter_IM_Subscription_Shop_remove_by_session_closure) },
+ { be_const_key_weak(remove_by_fabric, -1), be_const_closure(Matter_IM_Subscription_Shop_remove_by_fabric_closure) },
+ })),
+ be_str_weak(Matter_IM_Subscription_Shop)
+);
+/*******************************************************************/
+
+void be_load_Matter_IM_Subscription_Shop_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_IM_Subscription_Shop);
+ be_setglobal(vm, "Matter_IM_Subscription_Shop");
+ be_pop(vm, 1);
+}
+/********************************************************************/
+/* End of solidification */
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Message.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Message.h
index 76f644b3a..fbb32f5c4 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Message.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Message.h
@@ -6,6 +6,206 @@
extern const bclass be_class_Matter_Frame;
+/********************************************************************
+** Solidified function: encode_frame
+********************************************************************/
+be_local_closure(Matter_Frame_encode_frame, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[30]) { /* constants */
+ /* K0 */ be_nested_str_weak(flags),
+ /* K1 */ be_const_int(0),
+ /* K2 */ be_nested_str_weak(flag_s),
+ /* K3 */ be_nested_str_weak(flag_dsiz),
+ /* K4 */ be_const_int(3),
+ /* K5 */ be_nested_str_weak(add),
+ /* K6 */ be_const_int(1),
+ /* K7 */ be_nested_str_weak(local_session_id),
+ /* K8 */ be_const_int(2),
+ /* K9 */ be_nested_str_weak(sec_flags),
+ /* K10 */ be_nested_str_weak(sec_p),
+ /* K11 */ be_nested_str_weak(sec_c),
+ /* K12 */ be_nested_str_weak(sec_sesstype),
+ /* K13 */ be_nested_str_weak(message_counter),
+ /* K14 */ be_nested_str_weak(source_node_id),
+ /* K15 */ be_nested_str_weak(dest_node_id_8),
+ /* K16 */ be_nested_str_weak(dest_node_id_2),
+ /* K17 */ be_nested_str_weak(payload_idx),
+ /* K18 */ be_nested_str_weak(x_flags),
+ /* K19 */ be_nested_str_weak(x_flag_v),
+ /* K20 */ be_nested_str_weak(x_flag_r),
+ /* K21 */ be_nested_str_weak(x_flag_a),
+ /* K22 */ be_nested_str_weak(x_flag_i),
+ /* K23 */ be_nested_str_weak(opcode),
+ /* K24 */ be_nested_str_weak(exchange_id),
+ /* K25 */ be_nested_str_weak(protocol_id),
+ /* K26 */ be_nested_str_weak(ack_message_counter),
+ /* K27 */ be_nested_str_weak(app_payload_idx),
+ /* K28 */ be_nested_str_weak(debug),
+ /* K29 */ be_nested_str_weak(raw),
+ }),
+ be_str_weak(encode_frame),
+ &be_const_str_solidified,
+ ( &(const binstruction[146]) { /* code */
+ 0x60080015, // 0000 GETGBL R2 G21
+ 0x7C080000, // 0001 CALL R2 0
+ 0x880C0100, // 0002 GETMBR R3 R0 K0
+ 0x4C100000, // 0003 LDNIL R4
+ 0x1C0C0604, // 0004 EQ R3 R3 R4
+ 0x780E000D, // 0005 JMPF R3 #0014
+ 0x90020101, // 0006 SETMBR R0 K0 K1
+ 0x880C0102, // 0007 GETMBR R3 R0 K2
+ 0x780E0003, // 0008 JMPF R3 #000D
+ 0x880C0100, // 0009 GETMBR R3 R0 K0
+ 0x54120003, // 000A LDINT R4 4
+ 0x300C0604, // 000B OR R3 R3 R4
+ 0x90020003, // 000C SETMBR R0 K0 R3
+ 0x880C0103, // 000D GETMBR R3 R0 K3
+ 0x780E0004, // 000E JMPF R3 #0014
+ 0x880C0100, // 000F GETMBR R3 R0 K0
+ 0x88100103, // 0010 GETMBR R4 R0 K3
+ 0x2C100904, // 0011 AND R4 R4 K4
+ 0x300C0604, // 0012 OR R3 R3 R4
+ 0x90020003, // 0013 SETMBR R0 K0 R3
+ 0x8C0C0505, // 0014 GETMET R3 R2 K5
+ 0x88140100, // 0015 GETMBR R5 R0 K0
+ 0x58180006, // 0016 LDCONST R6 K6
+ 0x7C0C0600, // 0017 CALL R3 3
+ 0x8C0C0505, // 0018 GETMET R3 R2 K5
+ 0x88140107, // 0019 GETMBR R5 R0 K7
+ 0x78160001, // 001A JMPF R5 #001D
+ 0x88140107, // 001B GETMBR R5 R0 K7
+ 0x70020000, // 001C JMP #001E
+ 0x58140001, // 001D LDCONST R5 K1
+ 0x58180008, // 001E LDCONST R6 K8
+ 0x7C0C0600, // 001F CALL R3 3
+ 0x880C0109, // 0020 GETMBR R3 R0 K9
+ 0x4C100000, // 0021 LDNIL R4
+ 0x1C0C0604, // 0022 EQ R3 R3 R4
+ 0x780E0013, // 0023 JMPF R3 #0038
+ 0x90021301, // 0024 SETMBR R0 K9 K1
+ 0x880C010A, // 0025 GETMBR R3 R0 K10
+ 0x780E0003, // 0026 JMPF R3 #002B
+ 0x880C0109, // 0027 GETMBR R3 R0 K9
+ 0x5412007F, // 0028 LDINT R4 128
+ 0x300C0604, // 0029 OR R3 R3 R4
+ 0x90021203, // 002A SETMBR R0 K9 R3
+ 0x880C010B, // 002B GETMBR R3 R0 K11
+ 0x780E0003, // 002C JMPF R3 #0031
+ 0x880C0109, // 002D GETMBR R3 R0 K9
+ 0x5412003F, // 002E LDINT R4 64
+ 0x300C0604, // 002F OR R3 R3 R4
+ 0x90021203, // 0030 SETMBR R0 K9 R3
+ 0x880C010C, // 0031 GETMBR R3 R0 K12
+ 0x780E0004, // 0032 JMPF R3 #0038
+ 0x880C0109, // 0033 GETMBR R3 R0 K9
+ 0x8810010C, // 0034 GETMBR R4 R0 K12
+ 0x2C100904, // 0035 AND R4 R4 K4
+ 0x300C0604, // 0036 OR R3 R3 R4
+ 0x90021203, // 0037 SETMBR R0 K9 R3
+ 0x8C0C0505, // 0038 GETMET R3 R2 K5
+ 0x88140109, // 0039 GETMBR R5 R0 K9
+ 0x58180006, // 003A LDCONST R6 K6
+ 0x7C0C0600, // 003B CALL R3 3
+ 0x8C0C0505, // 003C GETMET R3 R2 K5
+ 0x8814010D, // 003D GETMBR R5 R0 K13
+ 0x541A0003, // 003E LDINT R6 4
+ 0x7C0C0600, // 003F CALL R3 3
+ 0x880C0102, // 0040 GETMBR R3 R0 K2
+ 0x780E0001, // 0041 JMPF R3 #0044
+ 0x880C010E, // 0042 GETMBR R3 R0 K14
+ 0x400C0403, // 0043 CONNECT R3 R2 R3
+ 0x880C0103, // 0044 GETMBR R3 R0 K3
+ 0x1C0C0706, // 0045 EQ R3 R3 K6
+ 0x780E0001, // 0046 JMPF R3 #0049
+ 0x880C010F, // 0047 GETMBR R3 R0 K15
+ 0x400C0403, // 0048 CONNECT R3 R2 R3
+ 0x880C0103, // 0049 GETMBR R3 R0 K3
+ 0x1C0C0708, // 004A EQ R3 R3 K8
+ 0x780E0003, // 004B JMPF R3 #0050
+ 0x8C0C0505, // 004C GETMET R3 R2 K5
+ 0x88140110, // 004D GETMBR R5 R0 K16
+ 0x58180008, // 004E LDCONST R6 K8
+ 0x7C0C0600, // 004F CALL R3 3
+ 0x600C000C, // 0050 GETGBL R3 G12
+ 0x5C100400, // 0051 MOVE R4 R2
+ 0x7C0C0200, // 0052 CALL R3 1
+ 0x90022203, // 0053 SETMBR R0 K17 R3
+ 0x880C0112, // 0054 GETMBR R3 R0 K18
+ 0x4C100000, // 0055 LDNIL R4
+ 0x1C0C0604, // 0056 EQ R3 R3 R4
+ 0x780E0016, // 0057 JMPF R3 #006F
+ 0x90022501, // 0058 SETMBR R0 K18 K1
+ 0x880C0113, // 0059 GETMBR R3 R0 K19
+ 0x780E0003, // 005A JMPF R3 #005F
+ 0x880C0112, // 005B GETMBR R3 R0 K18
+ 0x5412000F, // 005C LDINT R4 16
+ 0x300C0604, // 005D OR R3 R3 R4
+ 0x90022403, // 005E SETMBR R0 K18 R3
+ 0x880C0114, // 005F GETMBR R3 R0 K20
+ 0x780E0003, // 0060 JMPF R3 #0065
+ 0x880C0112, // 0061 GETMBR R3 R0 K18
+ 0x54120003, // 0062 LDINT R4 4
+ 0x300C0604, // 0063 OR R3 R3 R4
+ 0x90022403, // 0064 SETMBR R0 K18 R3
+ 0x880C0115, // 0065 GETMBR R3 R0 K21
+ 0x780E0002, // 0066 JMPF R3 #006A
+ 0x880C0112, // 0067 GETMBR R3 R0 K18
+ 0x300C0708, // 0068 OR R3 R3 K8
+ 0x90022403, // 0069 SETMBR R0 K18 R3
+ 0x880C0116, // 006A GETMBR R3 R0 K22
+ 0x780E0002, // 006B JMPF R3 #006F
+ 0x880C0112, // 006C GETMBR R3 R0 K18
+ 0x300C0706, // 006D OR R3 R3 K6
+ 0x90022403, // 006E SETMBR R0 K18 R3
+ 0x8C0C0505, // 006F GETMET R3 R2 K5
+ 0x88140112, // 0070 GETMBR R5 R0 K18
+ 0x58180006, // 0071 LDCONST R6 K6
+ 0x7C0C0600, // 0072 CALL R3 3
+ 0x8C0C0505, // 0073 GETMET R3 R2 K5
+ 0x88140117, // 0074 GETMBR R5 R0 K23
+ 0x58180006, // 0075 LDCONST R6 K6
+ 0x7C0C0600, // 0076 CALL R3 3
+ 0x8C0C0505, // 0077 GETMET R3 R2 K5
+ 0x88140118, // 0078 GETMBR R5 R0 K24
+ 0x541AFFFE, // 0079 LDINT R6 65535
+ 0x2C140A06, // 007A AND R5 R5 R6
+ 0x58180008, // 007B LDCONST R6 K8
+ 0x7C0C0600, // 007C CALL R3 3
+ 0x8C0C0505, // 007D GETMET R3 R2 K5
+ 0x88140119, // 007E GETMBR R5 R0 K25
+ 0x58180008, // 007F LDCONST R6 K8
+ 0x7C0C0600, // 0080 CALL R3 3
+ 0x880C0115, // 0081 GETMBR R3 R0 K21
+ 0x780E0003, // 0082 JMPF R3 #0087
+ 0x8C0C0505, // 0083 GETMET R3 R2 K5
+ 0x8814011A, // 0084 GETMBR R5 R0 K26
+ 0x541A0003, // 0085 LDINT R6 4
+ 0x7C0C0600, // 0086 CALL R3 3
+ 0x600C000C, // 0087 GETGBL R3 G12
+ 0x5C100400, // 0088 MOVE R4 R2
+ 0x7C0C0200, // 0089 CALL R3 1
+ 0x90023603, // 008A SETMBR R0 K27 R3
+ 0x78060000, // 008B JMPF R1 #008D
+ 0x400C0401, // 008C CONNECT R3 R2 R1
+ 0x8C0C011C, // 008D GETMET R3 R0 K28
+ 0x5C140400, // 008E MOVE R5 R2
+ 0x7C0C0400, // 008F CALL R3 2
+ 0x90023A02, // 0090 SETMBR R0 K29 R2
+ 0x80040400, // 0091 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: encrypt
********************************************************************/
@@ -19,7 +219,7 @@ be_local_closure(Matter_Frame_encrypt, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[30]) { /* constants */
+ ( &(const bvalue[17]) { /* constants */
/* K0 */ be_nested_str_weak(crypto),
/* K1 */ be_nested_str_weak(raw),
/* K2 */ be_nested_str_weak(session),
@@ -31,29 +231,16 @@ be_local_closure(Matter_Frame_encrypt, /* name */
/* K8 */ be_nested_str_weak(add),
/* K9 */ be_nested_str_weak(flags),
/* K10 */ be_nested_str_weak(message_counter),
- /* K11 */ be_nested_str_weak(get_mode),
- /* K12 */ be_nested_str_weak(__CASE),
- /* K13 */ be_nested_str_weak(deviceid),
- /* K14 */ be_nested_str_weak(resize),
- /* K15 */ be_nested_str_weak(tasmota),
- /* K16 */ be_nested_str_weak(log),
- /* K17 */ be_nested_str_weak(MTR_X3A_X20cleartext_X3A_X20),
- /* K18 */ be_nested_str_weak(tohex),
- /* K19 */ be_const_int(3),
- /* K20 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
- /* K21 */ be_nested_str_weak(MTR_X3A_X20r2i_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K22 */ be_nested_str_weak(MTR_X3A_X20p_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K23 */ be_nested_str_weak(MTR_X3A_X20a_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K24 */ be_nested_str_weak(MTR_X3A_X20n_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K25 */ be_nested_str_weak(AES_CCM),
- /* K26 */ be_nested_str_weak(encrypt),
- /* K27 */ be_nested_str_weak(tag),
- /* K28 */ be_nested_str_weak(MTR_X3A_X20ciphertext_X20_X20_X3D),
- /* K29 */ be_nested_str_weak(MTR_X3A_X20tag_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
+ /* K11 */ be_nested_str_weak(is_CASE),
+ /* K12 */ be_nested_str_weak(get_device_id),
+ /* K13 */ be_nested_str_weak(resize),
+ /* K14 */ be_nested_str_weak(AES_CCM),
+ /* K15 */ be_nested_str_weak(encrypt),
+ /* K16 */ be_nested_str_weak(tag),
}),
be_str_weak(encrypt),
&be_const_str_solidified,
- ( &(const binstruction[122]) { /* code */
+ ( &(const binstruction[57]) { /* code */
0xA4060000, // 0000 IMPORT R1 K0
0x88080101, // 0001 GETMBR R2 R0 K1
0x880C0102, // 0002 GETMBR R3 R0 K2
@@ -78,104 +265,183 @@ be_local_closure(Matter_Frame_encrypt, /* name */
0x7C200600, // 0015 CALL R8 3
0x8C20070B, // 0016 GETMET R8 R3 K11
0x7C200200, // 0017 CALL R8 1
- 0x8824070C, // 0018 GETMBR R9 R3 K12
- 0x1C201009, // 0019 EQ R8 R8 R9
- 0x78220003, // 001A JMPF R8 #001F
- 0x8820070D, // 001B GETMBR R8 R3 K13
- 0x78220001, // 001C JMPF R8 #001F
- 0x8820070D, // 001D GETMBR R8 R3 K13
+ 0x78220005, // 0018 JMPF R8 #001F
+ 0x8C20070C, // 0019 GETMET R8 R3 K12
+ 0x7C200200, // 001A CALL R8 1
+ 0x78220002, // 001B JMPF R8 #001F
+ 0x8C20070C, // 001C GETMET R8 R3 K12
+ 0x7C200200, // 001D CALL R8 1
0x40200E08, // 001E CONNECT R8 R7 R8
- 0x8C200F0E, // 001F GETMET R8 R7 K14
+ 0x8C200F0D, // 001F GETMET R8 R7 K13
0x542A000C, // 0020 LDINT R10 13
0x7C200400, // 0021 CALL R8 2
- 0xB8221E00, // 0022 GETNGBL R8 K15
- 0x8C201110, // 0023 GETMET R8 R8 K16
- 0x88280101, // 0024 GETMBR R10 R0 K1
- 0x8C281512, // 0025 GETMET R10 R10 K18
- 0x7C280200, // 0026 CALL R10 1
- 0x002A220A, // 0027 ADD R10 K17 R10
- 0x582C0013, // 0028 LDCONST R11 K19
- 0x7C200600, // 0029 CALL R8 3
- 0xB8221E00, // 002A GETNGBL R8 K15
- 0x8C201110, // 002B GETMET R8 R8 K16
- 0x58280014, // 002C LDCONST R10 K20
- 0x582C0013, // 002D LDCONST R11 K19
- 0x7C200600, // 002E CALL R8 3
- 0xB8221E00, // 002F GETNGBL R8 K15
- 0x8C201110, // 0030 GETMET R8 R8 K16
- 0x8C280912, // 0031 GETMET R10 R4 K18
- 0x7C280200, // 0032 CALL R10 1
- 0x002A2A0A, // 0033 ADD R10 K21 R10
- 0x582C0013, // 0034 LDCONST R11 K19
- 0x7C200600, // 0035 CALL R8 3
- 0xB8221E00, // 0036 GETNGBL R8 K15
- 0x8C201110, // 0037 GETMET R8 R8 K16
- 0x8C280D12, // 0038 GETMET R10 R6 K18
- 0x7C280200, // 0039 CALL R10 1
- 0x002A2C0A, // 003A ADD R10 K22 R10
- 0x582C0013, // 003B LDCONST R11 K19
- 0x7C200600, // 003C CALL R8 3
- 0xB8221E00, // 003D GETNGBL R8 K15
- 0x8C201110, // 003E GETMET R8 R8 K16
- 0x8C280B12, // 003F GETMET R10 R5 K18
- 0x7C280200, // 0040 CALL R10 1
- 0x002A2E0A, // 0041 ADD R10 K23 R10
- 0x582C0013, // 0042 LDCONST R11 K19
- 0x7C200600, // 0043 CALL R8 3
- 0xB8221E00, // 0044 GETNGBL R8 K15
- 0x8C201110, // 0045 GETMET R8 R8 K16
- 0x8C280F12, // 0046 GETMET R10 R7 K18
- 0x7C280200, // 0047 CALL R10 1
- 0x002A300A, // 0048 ADD R10 K24 R10
- 0x582C0013, // 0049 LDCONST R11 K19
- 0x7C200600, // 004A CALL R8 3
- 0x8C200319, // 004B GETMET R8 R1 K25
- 0x5C280800, // 004C MOVE R10 R4
- 0x5C2C0E00, // 004D MOVE R11 R7
- 0x5C300A00, // 004E MOVE R12 R5
- 0x6034000C, // 004F GETGBL R13 G12
- 0x5C380C00, // 0050 MOVE R14 R6
- 0x7C340200, // 0051 CALL R13 1
- 0x543A000F, // 0052 LDINT R14 16
- 0x7C200C00, // 0053 CALL R8 6
- 0x8C24111A, // 0054 GETMET R9 R8 K26
- 0x5C2C0C00, // 0055 MOVE R11 R6
- 0x7C240400, // 0056 CALL R9 2
- 0x8C28111B, // 0057 GETMET R10 R8 K27
- 0x7C280200, // 0058 CALL R10 1
- 0xB82E1E00, // 0059 GETNGBL R11 K15
- 0x8C2C1710, // 005A GETMET R11 R11 K16
- 0x58340014, // 005B LDCONST R13 K20
- 0x58380013, // 005C LDCONST R14 K19
- 0x7C2C0600, // 005D CALL R11 3
- 0xB82E1E00, // 005E GETNGBL R11 K15
- 0x8C2C1710, // 005F GETMET R11 R11 K16
- 0x8C341312, // 0060 GETMET R13 R9 K18
- 0x7C340200, // 0061 CALL R13 1
- 0x0036380D, // 0062 ADD R13 K28 R13
- 0x58380013, // 0063 LDCONST R14 K19
- 0x7C2C0600, // 0064 CALL R11 3
- 0xB82E1E00, // 0065 GETNGBL R11 K15
- 0x8C2C1710, // 0066 GETMET R11 R11 K16
- 0x8C341512, // 0067 GETMET R13 R10 K18
- 0x7C340200, // 0068 CALL R13 1
- 0x00363A0D, // 0069 ADD R13 K29 R13
- 0x58380013, // 006A LDCONST R14 K19
- 0x7C2C0600, // 006B CALL R11 3
- 0xB82E1E00, // 006C GETNGBL R11 K15
- 0x8C2C1710, // 006D GETMET R11 R11 K16
- 0x58340014, // 006E LDCONST R13 K20
- 0x58380013, // 006F LDCONST R14 K19
- 0x7C2C0600, // 0070 CALL R11 3
- 0x882C0101, // 0071 GETMBR R11 R0 K1
- 0x8C2C170E, // 0072 GETMET R11 R11 K14
- 0x88340105, // 0073 GETMBR R13 R0 K5
- 0x7C2C0400, // 0074 CALL R11 2
- 0x882C0101, // 0075 GETMBR R11 R0 K1
- 0x402C1609, // 0076 CONNECT R11 R11 R9
- 0x882C0101, // 0077 GETMBR R11 R0 K1
- 0x402C160A, // 0078 CONNECT R11 R11 R10
- 0x80000000, // 0079 RET 0
+ 0x8C20030E, // 0022 GETMET R8 R1 K14
+ 0x5C280800, // 0023 MOVE R10 R4
+ 0x5C2C0E00, // 0024 MOVE R11 R7
+ 0x5C300A00, // 0025 MOVE R12 R5
+ 0x6034000C, // 0026 GETGBL R13 G12
+ 0x5C380C00, // 0027 MOVE R14 R6
+ 0x7C340200, // 0028 CALL R13 1
+ 0x543A000F, // 0029 LDINT R14 16
+ 0x7C200C00, // 002A CALL R8 6
+ 0x8C24110F, // 002B GETMET R9 R8 K15
+ 0x5C2C0C00, // 002C MOVE R11 R6
+ 0x7C240400, // 002D CALL R9 2
+ 0x8C281110, // 002E GETMET R10 R8 K16
+ 0x7C280200, // 002F CALL R10 1
+ 0x882C0101, // 0030 GETMBR R11 R0 K1
+ 0x8C2C170D, // 0031 GETMET R11 R11 K13
+ 0x88340105, // 0032 GETMBR R13 R0 K5
+ 0x7C2C0400, // 0033 CALL R11 2
+ 0x882C0101, // 0034 GETMBR R11 R0 K1
+ 0x402C1609, // 0035 CONNECT R11 R11 R9
+ 0x882C0101, // 0036 GETMBR R11 R0 K1
+ 0x402C160A, // 0037 CONNECT R11 R11 R10
+ 0x80000000, // 0038 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: debug
+********************************************************************/
+be_local_closure(Matter_Frame_debug, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 9]) { /* constants */
+ /* K0 */ be_nested_str_weak(matter),
+ /* K1 */ be_nested_str_weak(Frame),
+ /* K2 */ be_nested_str_weak(message_handler),
+ /* K3 */ be_nested_str_weak(decode_header),
+ /* K4 */ be_nested_str_weak(decode_payload),
+ /* K5 */ be_nested_str_weak(tasmota),
+ /* K6 */ be_nested_str_weak(log),
+ /* K7 */ be_nested_str_weak(MTR_X3A_X20sending_X20decode_X3A_X20),
+ /* K8 */ be_nested_str_weak(inspect),
+ }),
+ be_str_weak(debug),
+ &be_const_str_solidified,
+ ( &(const binstruction[19]) { /* code */
+ 0xB80A0000, // 0000 GETNGBL R2 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x88100102, // 0002 GETMBR R4 R0 K2
+ 0x5C140200, // 0003 MOVE R5 R1
+ 0x7C080600, // 0004 CALL R2 3
+ 0x8C0C0503, // 0005 GETMET R3 R2 K3
+ 0x7C0C0200, // 0006 CALL R3 1
+ 0x8C0C0504, // 0007 GETMET R3 R2 K4
+ 0x7C0C0200, // 0008 CALL R3 1
+ 0xB80E0A00, // 0009 GETNGBL R3 K5
+ 0x8C0C0706, // 000A GETMET R3 R3 K6
+ 0xB8160000, // 000B GETNGBL R5 K0
+ 0x8C140B08, // 000C GETMET R5 R5 K8
+ 0x5C1C0400, // 000D MOVE R7 R2
+ 0x7C140400, // 000E CALL R5 2
+ 0x00160E05, // 000F ADD R5 K7 R5
+ 0x541A0003, // 0010 LDINT R6 4
+ 0x7C0C0600, // 0011 CALL R3 3
+ 0x80000000, // 0012 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: build_standalone_ack
+********************************************************************/
+be_local_closure(Matter_Frame_build_standalone_ack, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[22]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(message_handler),
+ /* K2 */ be_nested_str_weak(remote_ip),
+ /* K3 */ be_nested_str_weak(remote_port),
+ /* K4 */ be_nested_str_weak(flag_s),
+ /* K5 */ be_nested_str_weak(flag_dsiz),
+ /* K6 */ be_const_int(1),
+ /* K7 */ be_nested_str_weak(dest_node_id_8),
+ /* K8 */ be_nested_str_weak(source_node_id),
+ /* K9 */ be_const_int(0),
+ /* K10 */ be_nested_str_weak(session),
+ /* K11 */ be_nested_str_weak(message_counter),
+ /* K12 */ be_nested_str_weak(counter_snd_next),
+ /* K13 */ be_nested_str_weak(local_session_id),
+ /* K14 */ be_nested_str_weak(initiator_session_id),
+ /* K15 */ be_nested_str_weak(x_flag_i),
+ /* K16 */ be_nested_str_weak(opcode),
+ /* K17 */ be_nested_str_weak(exchange_id),
+ /* K18 */ be_nested_str_weak(protocol_id),
+ /* K19 */ be_nested_str_weak(x_flag_a),
+ /* K20 */ be_nested_str_weak(ack_message_counter),
+ /* K21 */ be_nested_str_weak(x_flag_r),
+ }),
+ be_str_weak(build_standalone_ack),
+ &be_const_str_solidified,
+ ( &(const binstruction[46]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0x600C0006, // 0001 GETGBL R3 G6
+ 0x5C100000, // 0002 MOVE R4 R0
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x88100101, // 0004 GETMBR R4 R0 K1
+ 0x7C0C0200, // 0005 CALL R3 1
+ 0x88100102, // 0006 GETMBR R4 R0 K2
+ 0x900E0404, // 0007 SETMBR R3 K2 R4
+ 0x88100103, // 0008 GETMBR R4 R0 K3
+ 0x900E0604, // 0009 SETMBR R3 K3 R4
+ 0x88100104, // 000A GETMBR R4 R0 K4
+ 0x78120003, // 000B JMPF R4 #0010
+ 0x900E0B06, // 000C SETMBR R3 K5 K6
+ 0x88100108, // 000D GETMBR R4 R0 K8
+ 0x900E0E04, // 000E SETMBR R3 K7 R4
+ 0x70020000, // 000F JMP #0011
+ 0x900E0B09, // 0010 SETMBR R3 K5 K9
+ 0x8810010A, // 0011 GETMBR R4 R0 K10
+ 0x900E1404, // 0012 SETMBR R3 K10 R4
+ 0x8810010A, // 0013 GETMBR R4 R0 K10
+ 0x8C10090C, // 0014 GETMET R4 R4 K12
+ 0x7C100200, // 0015 CALL R4 1
+ 0x900E1604, // 0016 SETMBR R3 K11 R4
+ 0x8810010A, // 0017 GETMBR R4 R0 K10
+ 0x8810090E, // 0018 GETMBR R4 R4 K14
+ 0x900E1A04, // 0019 SETMBR R3 K13 R4
+ 0x8810010F, // 001A GETMBR R4 R0 K15
+ 0x78120001, // 001B JMPF R4 #001E
+ 0x58100009, // 001C LDCONST R4 K9
+ 0x70020000, // 001D JMP #001F
+ 0x58100006, // 001E LDCONST R4 K6
+ 0x900E1E04, // 001F SETMBR R3 K15 R4
+ 0x5412000F, // 0020 LDINT R4 16
+ 0x900E2004, // 0021 SETMBR R3 K16 R4
+ 0x88100111, // 0022 GETMBR R4 R0 K17
+ 0x900E2204, // 0023 SETMBR R3 K17 R4
+ 0x900E2509, // 0024 SETMBR R3 K18 K9
+ 0x900E2706, // 0025 SETMBR R3 K19 K6
+ 0x8810010B, // 0026 GETMBR R4 R0 K11
+ 0x900E2804, // 0027 SETMBR R3 K20 R4
+ 0x78060001, // 0028 JMPF R1 #002B
+ 0x58100006, // 0029 LDCONST R4 K6
+ 0x70020000, // 002A JMP #002C
+ 0x58100009, // 002B LDCONST R4 K9
+ 0x900E2A04, // 002C SETMBR R3 K21 R4
+ 0x80040600, // 002D RET 1 R3
})
)
);
@@ -187,8 +453,8 @@ be_local_closure(Matter_Frame_encrypt, /* name */
********************************************************************/
be_local_closure(Matter_Frame_build_response, /* name */
be_nested_proto(
- 12, /* nstack */
- 3, /* argc */
+ 13, /* nstack */
+ 4, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
@@ -210,9 +476,9 @@ be_local_closure(Matter_Frame_build_response, /* name */
/* K11 */ be_nested_str_weak(local_session_id),
/* K12 */ be_nested_str_weak(initiator_session_id),
/* K13 */ be_nested_str_weak(message_counter),
- /* K14 */ be_nested_str_weak(counter_snd),
- /* K15 */ be_nested_str_weak(next),
- /* K16 */ be_nested_str_weak(_counter_insecure_snd),
+ /* K14 */ be_nested_str_weak(counter_snd_next),
+ /* K15 */ be_nested_str_weak(_counter_insecure_snd),
+ /* K16 */ be_nested_str_weak(next),
/* K17 */ be_nested_str_weak(x_flag_i),
/* K18 */ be_nested_str_weak(opcode),
/* K19 */ be_nested_str_weak(exchange_id),
@@ -226,94 +492,104 @@ be_local_closure(Matter_Frame_build_response, /* name */
/* K27 */ be_nested_str_weak(0x_X2502X),
/* K28 */ be_nested_str_weak(tasmota),
/* K29 */ be_nested_str_weak(log),
- /* K30 */ be_nested_str_weak(MTR_X3A_X20_X3CReplied_X20_X20_X20_X20_X20_X20_X20_X25s),
+ /* K30 */ be_nested_str_weak(MTR_X3A_X20_X3CReplied_X20_X20_X20_X28_X256i_X29_X20_X25s),
/* K31 */ be_const_int(2),
}),
be_str_weak(build_response),
&be_const_str_solidified,
- ( &(const binstruction[82]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0x60100006, // 0001 GETGBL R4 G6
- 0x5C140000, // 0002 MOVE R5 R0
- 0x7C100200, // 0003 CALL R4 1
- 0x88140101, // 0004 GETMBR R5 R0 K1
- 0x7C100200, // 0005 CALL R4 1
- 0x88140102, // 0006 GETMBR R5 R0 K2
- 0x90120405, // 0007 SETMBR R4 K2 R5
- 0x88140103, // 0008 GETMBR R5 R0 K3
- 0x90120605, // 0009 SETMBR R4 K3 R5
- 0x88140104, // 000A GETMBR R5 R0 K4
- 0x78160003, // 000B JMPF R5 #0010
- 0x90120B06, // 000C SETMBR R4 K5 K6
- 0x88140108, // 000D GETMBR R5 R0 K8
- 0x90120E05, // 000E SETMBR R4 K7 R5
- 0x70020000, // 000F JMP #0011
- 0x90120B09, // 0010 SETMBR R4 K5 K9
- 0x8814010A, // 0011 GETMBR R5 R0 K10
- 0x90121405, // 0012 SETMBR R4 K10 R5
- 0x8814010B, // 0013 GETMBR R5 R0 K11
- 0x20140B09, // 0014 NE R5 R5 K9
- 0x7816000E, // 0015 JMPF R5 #0025
- 0x8814010A, // 0016 GETMBR R5 R0 K10
- 0x7816000C, // 0017 JMPF R5 #0025
- 0x8814010A, // 0018 GETMBR R5 R0 K10
- 0x88140B0C, // 0019 GETMBR R5 R5 K12
- 0x20140B09, // 001A NE R5 R5 K9
- 0x78160008, // 001B JMPF R5 #0025
+ ( &(const binstruction[92]) { /* code */
+ 0xA4120000, // 0000 IMPORT R4 K0
+ 0x4C140000, // 0001 LDNIL R5
+ 0x1C140605, // 0002 EQ R5 R3 R5
+ 0x78160005, // 0003 JMPF R5 #000A
+ 0x60140006, // 0004 GETGBL R5 G6
+ 0x5C180000, // 0005 MOVE R6 R0
+ 0x7C140200, // 0006 CALL R5 1
+ 0x88180101, // 0007 GETMBR R6 R0 K1
+ 0x7C140200, // 0008 CALL R5 1
+ 0x5C0C0A00, // 0009 MOVE R3 R5
+ 0x88140102, // 000A GETMBR R5 R0 K2
+ 0x900E0405, // 000B SETMBR R3 K2 R5
+ 0x88140103, // 000C GETMBR R5 R0 K3
+ 0x900E0605, // 000D SETMBR R3 K3 R5
+ 0x88140104, // 000E GETMBR R5 R0 K4
+ 0x78160003, // 000F JMPF R5 #0014
+ 0x900E0B06, // 0010 SETMBR R3 K5 K6
+ 0x88140108, // 0011 GETMBR R5 R0 K8
+ 0x900E0E05, // 0012 SETMBR R3 K7 R5
+ 0x70020000, // 0013 JMP #0015
+ 0x900E0B09, // 0014 SETMBR R3 K5 K9
+ 0x8814010A, // 0015 GETMBR R5 R0 K10
+ 0x900E1405, // 0016 SETMBR R3 K10 R5
+ 0x8814010B, // 0017 GETMBR R5 R0 K11
+ 0x20140B09, // 0018 NE R5 R5 K9
+ 0x7816000D, // 0019 JMPF R5 #0028
+ 0x8814010A, // 001A GETMBR R5 R0 K10
+ 0x7816000B, // 001B JMPF R5 #0028
0x8814010A, // 001C GETMBR R5 R0 K10
- 0x88140B0E, // 001D GETMBR R5 R5 K14
- 0x8C140B0F, // 001E GETMET R5 R5 K15
- 0x7C140200, // 001F CALL R5 1
- 0x90121A05, // 0020 SETMBR R4 K13 R5
- 0x8814010A, // 0021 GETMBR R5 R0 K10
- 0x88140B0C, // 0022 GETMBR R5 R5 K12
- 0x90121605, // 0023 SETMBR R4 K11 R5
- 0x70020005, // 0024 JMP #002B
- 0x8814010A, // 0025 GETMBR R5 R0 K10
- 0x88140B10, // 0026 GETMBR R5 R5 K16
- 0x8C140B0F, // 0027 GETMET R5 R5 K15
- 0x7C140200, // 0028 CALL R5 1
- 0x90121A05, // 0029 SETMBR R4 K13 R5
- 0x90121709, // 002A SETMBR R4 K11 K9
- 0x90122309, // 002B SETMBR R4 K17 K9
- 0x90122401, // 002C SETMBR R4 K18 R1
- 0x88140113, // 002D GETMBR R5 R0 K19
- 0x90122605, // 002E SETMBR R4 K19 R5
- 0x88140114, // 002F GETMBR R5 R0 K20
- 0x90122805, // 0030 SETMBR R4 K20 R5
- 0x88140115, // 0031 GETMBR R5 R0 K21
- 0x78160002, // 0032 JMPF R5 #0036
- 0x90122D06, // 0033 SETMBR R4 K22 K6
- 0x8814010D, // 0034 GETMBR R5 R0 K13
- 0x90122E05, // 0035 SETMBR R4 K23 R5
- 0x780A0001, // 0036 JMPF R2 #0039
- 0x58140006, // 0037 LDCONST R5 K6
- 0x70020000, // 0038 JMP #003A
- 0x58140009, // 0039 LDCONST R5 K9
- 0x90122A05, // 003A SETMBR R4 K21 R5
- 0x8814090B, // 003B GETMBR R5 R4 K11
- 0x1C140B09, // 003C EQ R5 R5 K9
- 0x78160012, // 003D JMPF R5 #0051
- 0xB8163000, // 003E GETNGBL R5 K24
- 0x8C140B19, // 003F GETMET R5 R5 K25
- 0x881C0912, // 0040 GETMBR R7 R4 K18
- 0x7C140400, // 0041 CALL R5 2
- 0x5C180A00, // 0042 MOVE R6 R5
- 0x741A0004, // 0043 JMPT R6 #0049
- 0x8C18071A, // 0044 GETMET R6 R3 K26
- 0x5820001B, // 0045 LDCONST R8 K27
- 0x88240912, // 0046 GETMBR R9 R4 K18
- 0x7C180600, // 0047 CALL R6 3
- 0x5C140C00, // 0048 MOVE R5 R6
- 0xB81A3800, // 0049 GETNGBL R6 K28
- 0x8C180D1D, // 004A GETMET R6 R6 K29
- 0x8C20071A, // 004B GETMET R8 R3 K26
- 0x5828001E, // 004C LDCONST R10 K30
- 0x5C2C0A00, // 004D MOVE R11 R5
- 0x7C200600, // 004E CALL R8 3
- 0x5824001F, // 004F LDCONST R9 K31
- 0x7C180600, // 0050 CALL R6 3
- 0x80040800, // 0051 RET 1 R4
+ 0x88140B0C, // 001D GETMBR R5 R5 K12
+ 0x20140B09, // 001E NE R5 R5 K9
+ 0x78160007, // 001F JMPF R5 #0028
+ 0x8814010A, // 0020 GETMBR R5 R0 K10
+ 0x8C140B0E, // 0021 GETMET R5 R5 K14
+ 0x7C140200, // 0022 CALL R5 1
+ 0x900E1A05, // 0023 SETMBR R3 K13 R5
+ 0x8814010A, // 0024 GETMBR R5 R0 K10
+ 0x88140B0C, // 0025 GETMBR R5 R5 K12
+ 0x900E1605, // 0026 SETMBR R3 K11 R5
+ 0x70020005, // 0027 JMP #002E
+ 0x8814010A, // 0028 GETMBR R5 R0 K10
+ 0x88140B0F, // 0029 GETMBR R5 R5 K15
+ 0x8C140B10, // 002A GETMET R5 R5 K16
+ 0x7C140200, // 002B CALL R5 1
+ 0x900E1A05, // 002C SETMBR R3 K13 R5
+ 0x900E1709, // 002D SETMBR R3 K11 K9
+ 0x88140111, // 002E GETMBR R5 R0 K17
+ 0x78160001, // 002F JMPF R5 #0032
+ 0x58140009, // 0030 LDCONST R5 K9
+ 0x70020000, // 0031 JMP #0033
+ 0x58140006, // 0032 LDCONST R5 K6
+ 0x900E2205, // 0033 SETMBR R3 K17 R5
+ 0x900E2401, // 0034 SETMBR R3 K18 R1
+ 0x88140113, // 0035 GETMBR R5 R0 K19
+ 0x900E2605, // 0036 SETMBR R3 K19 R5
+ 0x88140114, // 0037 GETMBR R5 R0 K20
+ 0x900E2805, // 0038 SETMBR R3 K20 R5
+ 0x88140115, // 0039 GETMBR R5 R0 K21
+ 0x78160002, // 003A JMPF R5 #003E
+ 0x900E2D06, // 003B SETMBR R3 K22 K6
+ 0x8814010D, // 003C GETMBR R5 R0 K13
+ 0x900E2E05, // 003D SETMBR R3 K23 R5
+ 0x780A0001, // 003E JMPF R2 #0041
+ 0x58140006, // 003F LDCONST R5 K6
+ 0x70020000, // 0040 JMP #0042
+ 0x58140009, // 0041 LDCONST R5 K9
+ 0x900E2A05, // 0042 SETMBR R3 K21 R5
+ 0x8814070B, // 0043 GETMBR R5 R3 K11
+ 0x1C140B09, // 0044 EQ R5 R5 K9
+ 0x78160014, // 0045 JMPF R5 #005B
+ 0xB8163000, // 0046 GETNGBL R5 K24
+ 0x8C140B19, // 0047 GETMET R5 R5 K25
+ 0x881C0712, // 0048 GETMBR R7 R3 K18
+ 0x7C140400, // 0049 CALL R5 2
+ 0x5C180A00, // 004A MOVE R6 R5
+ 0x741A0004, // 004B JMPT R6 #0051
+ 0x8C18091A, // 004C GETMET R6 R4 K26
+ 0x5820001B, // 004D LDCONST R8 K27
+ 0x88240712, // 004E GETMBR R9 R3 K18
+ 0x7C180600, // 004F CALL R6 3
+ 0x5C140C00, // 0050 MOVE R5 R6
+ 0xB81A3800, // 0051 GETNGBL R6 K28
+ 0x8C180D1D, // 0052 GETMET R6 R6 K29
+ 0x8C20091A, // 0053 GETMET R8 R4 K26
+ 0x5828001E, // 0054 LDCONST R10 K30
+ 0x882C070A, // 0055 GETMBR R11 R3 K10
+ 0x882C170B, // 0056 GETMBR R11 R11 K11
+ 0x5C300A00, // 0057 MOVE R12 R5
+ 0x7C200800, // 0058 CALL R8 4
+ 0x5824001F, // 0059 LDCONST R9 K31
+ 0x7C180600, // 005A CALL R6 3
+ 0x80040600, // 005B RET 1 R3
})
)
);
@@ -321,32 +597,94 @@ be_local_closure(Matter_Frame_build_response, /* name */
/********************************************************************
-** Solidified function: init
+** Solidified function: initiate_response
********************************************************************/
-be_local_closure(Matter_Frame_init, /* name */
+be_local_closure(Matter_Frame_initiate_response, /* name */
be_nested_proto(
- 5, /* nstack */
+ 10, /* nstack */
5, /* argc */
- 2, /* varg */
+ 4, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(message_handler),
- /* K1 */ be_nested_str_weak(raw),
- /* K2 */ be_nested_str_weak(remote_ip),
- /* K3 */ be_nested_str_weak(remote_port),
+ ( &(const bvalue[24]) { /* constants */
+ /* K0 */ be_const_class(be_class_Matter_Frame),
+ /* K1 */ be_nested_str_weak(string),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(Frame),
+ /* K4 */ be_nested_str_weak(remote_ip),
+ /* K5 */ be_nested_str_weak(_ip),
+ /* K6 */ be_nested_str_weak(remote_port),
+ /* K7 */ be_nested_str_weak(_port),
+ /* K8 */ be_nested_str_weak(flag_dsiz),
+ /* K9 */ be_const_int(0),
+ /* K10 */ be_nested_str_weak(session),
+ /* K11 */ be_nested_str_weak(initiator_session_id),
+ /* K12 */ be_nested_str_weak(message_counter),
+ /* K13 */ be_nested_str_weak(counter_snd_next),
+ /* K14 */ be_nested_str_weak(local_session_id),
+ /* K15 */ be_nested_str_weak(_counter_insecure_snd),
+ /* K16 */ be_nested_str_weak(next),
+ /* K17 */ be_nested_str_weak(x_flag_i),
+ /* K18 */ be_const_int(1),
+ /* K19 */ be_nested_str_weak(opcode),
+ /* K20 */ be_nested_str_weak(_exchange_id),
+ /* K21 */ be_nested_str_weak(exchange_id),
+ /* K22 */ be_nested_str_weak(protocol_id),
+ /* K23 */ be_nested_str_weak(x_flag_r),
}),
- be_str_weak(init),
+ be_str_weak(initiate_response),
&be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x90020202, // 0001 SETMBR R0 K1 R2
- 0x90020403, // 0002 SETMBR R0 K2 R3
- 0x90020604, // 0003 SETMBR R0 K3 R4
- 0x80000000, // 0004 RET 0
+ ( &(const binstruction[47]) { /* code */
+ 0x58140000, // 0000 LDCONST R5 K0
+ 0xA41A0200, // 0001 IMPORT R6 K1
+ 0x4C1C0000, // 0002 LDNIL R7
+ 0x1C1C0807, // 0003 EQ R7 R4 R7
+ 0x781E0004, // 0004 JMPF R7 #000A
+ 0xB81E0400, // 0005 GETNGBL R7 K2
+ 0x8C1C0F03, // 0006 GETMET R7 R7 K3
+ 0x5C240000, // 0007 MOVE R9 R0
+ 0x7C1C0400, // 0008 CALL R7 2
+ 0x5C100E00, // 0009 MOVE R4 R7
+ 0x881C0305, // 000A GETMBR R7 R1 K5
+ 0x90120807, // 000B SETMBR R4 K4 R7
+ 0x881C0307, // 000C GETMBR R7 R1 K7
+ 0x90120C07, // 000D SETMBR R4 K6 R7
+ 0x90121109, // 000E SETMBR R4 K8 K9
+ 0x90121401, // 000F SETMBR R4 K10 R1
+ 0x78060008, // 0010 JMPF R1 #001A
+ 0x881C030B, // 0011 GETMBR R7 R1 K11
+ 0x201C0F09, // 0012 NE R7 R7 K9
+ 0x781E0005, // 0013 JMPF R7 #001A
+ 0x8C1C030D, // 0014 GETMET R7 R1 K13
+ 0x7C1C0200, // 0015 CALL R7 1
+ 0x90121807, // 0016 SETMBR R4 K12 R7
+ 0x881C030B, // 0017 GETMBR R7 R1 K11
+ 0x90121C07, // 0018 SETMBR R4 K14 R7
+ 0x70020004, // 0019 JMP #001F
+ 0x881C030F, // 001A GETMBR R7 R1 K15
+ 0x8C1C0F10, // 001B GETMET R7 R7 K16
+ 0x7C1C0200, // 001C CALL R7 1
+ 0x90121807, // 001D SETMBR R4 K12 R7
+ 0x90121D09, // 001E SETMBR R4 K14 K9
+ 0x90122312, // 001F SETMBR R4 K17 K18
+ 0x90122602, // 0020 SETMBR R4 K19 R2
+ 0x881C0314, // 0021 GETMBR R7 R1 K20
+ 0x001C0F12, // 0022 ADD R7 R7 K18
+ 0x90062807, // 0023 SETMBR R1 K20 R7
+ 0x881C0314, // 0024 GETMBR R7 R1 K20
+ 0x5422FFFF, // 0025 LDINT R8 65536
+ 0x301C0E08, // 0026 OR R7 R7 R8
+ 0x90122A07, // 0027 SETMBR R4 K21 R7
+ 0x90122D12, // 0028 SETMBR R4 K22 K18
+ 0x780E0001, // 0029 JMPF R3 #002C
+ 0x581C0012, // 002A LDCONST R7 K18
+ 0x70020000, // 002B JMP #002D
+ 0x581C0009, // 002C LDCONST R7 K9
+ 0x90122E07, // 002D SETMBR R4 K23 R7
+ 0x80040800, // 002E RET 1 R4
})
)
);
@@ -519,6 +857,39 @@ be_local_closure(Matter_Frame_decode_header, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_Frame_init, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 5, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(message_handler),
+ /* K1 */ be_nested_str_weak(raw),
+ /* K2 */ be_nested_str_weak(remote_ip),
+ /* K3 */ be_nested_str_weak(remote_port),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x90020202, // 0001 SETMBR R0 K1 R2
+ 0x90020403, // 0002 SETMBR R0 K2 R3
+ 0x90020604, // 0003 SETMBR R0 K3 R4
+ 0x80000000, // 0004 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: decode_payload
********************************************************************/
@@ -555,7 +926,7 @@ be_local_closure(Matter_Frame_decode_payload, /* name */
}),
be_str_weak(decode_payload),
&be_const_str_solidified,
- ( &(const binstruction[87]) { /* code */
+ ( &(const binstruction[93]) { /* code */
0x88040100, // 0000 GETMBR R1 R0 K0
0x88080101, // 0001 GETMBR R2 R0 K1
0x8C0C0503, // 0002 GETMET R3 R2 K3
@@ -608,191 +979,47 @@ be_local_closure(Matter_Frame_decode_payload, /* name */
0x5818000A, // 0031 LDCONST R6 K10
0x7C0C0600, // 0032 CALL R3 3
0x90021C03, // 0033 SETMBR R0 K14 R3
- 0x8C0C0503, // 0034 GETMET R3 R2 K3
- 0x54160003, // 0035 LDINT R5 4
- 0x00140205, // 0036 ADD R5 R1 R5
- 0x5818000A, // 0037 LDCONST R6 K10
- 0x7C0C0600, // 0038 CALL R3 3
- 0x90021E03, // 0039 SETMBR R0 K15 R3
- 0x540E0005, // 003A LDINT R3 6
- 0x00040203, // 003B ADD R1 R1 R3
- 0x880C0105, // 003C GETMBR R3 R0 K5
- 0x780E0005, // 003D JMPF R3 #0044
- 0x8C0C0503, // 003E GETMET R3 R2 K3
- 0x5C140200, // 003F MOVE R5 R1
- 0x5818000A, // 0040 LDCONST R6 K10
- 0x7C0C0600, // 0041 CALL R3 3
- 0x90022003, // 0042 SETMBR R0 K16 R3
- 0x0004030A, // 0043 ADD R1 R1 K10
- 0x880C010B, // 0044 GETMBR R3 R0 K11
- 0x780E0006, // 0045 JMPF R3 #004D
- 0x8C0C0503, // 0046 GETMET R3 R2 K3
- 0x5C140200, // 0047 MOVE R5 R1
- 0x541A0003, // 0048 LDINT R6 4
- 0x7C0C0600, // 0049 CALL R3 3
- 0x90022203, // 004A SETMBR R0 K17 R3
- 0x540E0003, // 004B LDINT R3 4
- 0x00040203, // 004C ADD R1 R1 R3
- 0x880C0107, // 004D GETMBR R3 R0 K7
- 0x780E0005, // 004E JMPF R3 #0055
- 0x8C0C0503, // 004F GETMET R3 R2 K3
- 0x5C140200, // 0050 MOVE R5 R1
- 0x5818000A, // 0051 LDCONST R6 K10
- 0x7C0C0600, // 0052 CALL R3 3
- 0x0010070A, // 0053 ADD R4 R3 K10
- 0x00040204, // 0054 ADD R1 R1 R4
- 0x90022401, // 0055 SETMBR R0 K18 R1
- 0x80040000, // 0056 RET 1 R0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: debug
-********************************************************************/
-be_local_closure(Matter_Frame_debug, /* name */
- be_nested_proto(
- 8, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[10]) { /* constants */
- /* K0 */ be_nested_str_weak(matter),
- /* K1 */ be_nested_str_weak(Frame),
- /* K2 */ be_nested_str_weak(message_handler),
- /* K3 */ be_nested_str_weak(decode_header),
- /* K4 */ be_nested_str_weak(decode_payload),
- /* K5 */ be_nested_str_weak(tasmota),
- /* K6 */ be_nested_str_weak(log),
- /* K7 */ be_nested_str_weak(MTR_X3A_X20sending_X20decode_X3A_X20),
- /* K8 */ be_nested_str_weak(inspect),
- /* K9 */ be_const_int(3),
- }),
- be_str_weak(debug),
- &be_const_str_solidified,
- ( &(const binstruction[19]) { /* code */
- 0xB80A0000, // 0000 GETNGBL R2 K0
- 0x8C080501, // 0001 GETMET R2 R2 K1
- 0x88100102, // 0002 GETMBR R4 R0 K2
- 0x5C140200, // 0003 MOVE R5 R1
- 0x7C080600, // 0004 CALL R2 3
- 0x8C0C0503, // 0005 GETMET R3 R2 K3
- 0x7C0C0200, // 0006 CALL R3 1
- 0x8C0C0504, // 0007 GETMET R3 R2 K4
- 0x7C0C0200, // 0008 CALL R3 1
- 0xB80E0A00, // 0009 GETNGBL R3 K5
- 0x8C0C0706, // 000A GETMET R3 R3 K6
- 0xB8160000, // 000B GETNGBL R5 K0
- 0x8C140B08, // 000C GETMET R5 R5 K8
- 0x5C1C0400, // 000D MOVE R7 R2
- 0x7C140400, // 000E CALL R5 2
- 0x00160E05, // 000F ADD R5 K7 R5
- 0x58180009, // 0010 LDCONST R6 K9
- 0x7C0C0600, // 0011 CALL R3 3
- 0x80000000, // 0012 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: build_standalone_ack
-********************************************************************/
-be_local_closure(Matter_Frame_build_standalone_ack, /* name */
- be_nested_proto(
- 11, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[28]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(message_handler),
- /* K2 */ be_nested_str_weak(flag_s),
- /* K3 */ be_nested_str_weak(flag_dsiz),
- /* K4 */ be_const_int(1),
- /* K5 */ be_nested_str_weak(dest_node_id_8),
- /* K6 */ be_nested_str_weak(source_node_id),
- /* K7 */ be_const_int(0),
- /* K8 */ be_nested_str_weak(session),
- /* K9 */ be_nested_str_weak(message_counter),
- /* K10 */ be_nested_str_weak(counter_snd),
- /* K11 */ be_nested_str_weak(next),
- /* K12 */ be_nested_str_weak(local_session_id),
- /* K13 */ be_nested_str_weak(initiator_session_id),
- /* K14 */ be_nested_str_weak(x_flag_i),
- /* K15 */ be_nested_str_weak(opcode),
- /* K16 */ be_nested_str_weak(exchange_id),
- /* K17 */ be_nested_str_weak(protocol_id),
- /* K18 */ be_nested_str_weak(x_flag_a),
- /* K19 */ be_nested_str_weak(ack_message_counter),
- /* K20 */ be_nested_str_weak(x_flag_r),
- /* K21 */ be_nested_str_weak(tasmota),
- /* K22 */ be_nested_str_weak(log),
- /* K23 */ be_nested_str_weak(format),
- /* K24 */ be_nested_str_weak(MTR_X3A_X20_X3CReplied_X20_X20_X20_X20_X20_X20_X20_X25s),
- /* K25 */ be_nested_str_weak(matter),
- /* K26 */ be_nested_str_weak(get_opcode_name),
- /* K27 */ be_const_int(2),
- }),
- be_str_weak(build_standalone_ack),
- &be_const_str_solidified,
- ( &(const binstruction[45]) { /* code */
- 0xA4060000, // 0000 IMPORT R1 K0
- 0x60080006, // 0001 GETGBL R2 G6
- 0x5C0C0000, // 0002 MOVE R3 R0
- 0x7C080200, // 0003 CALL R2 1
- 0x880C0101, // 0004 GETMBR R3 R0 K1
- 0x7C080200, // 0005 CALL R2 1
- 0x880C0102, // 0006 GETMBR R3 R0 K2
- 0x780E0003, // 0007 JMPF R3 #000C
- 0x900A0704, // 0008 SETMBR R2 K3 K4
- 0x880C0106, // 0009 GETMBR R3 R0 K6
- 0x900A0A03, // 000A SETMBR R2 K5 R3
- 0x70020000, // 000B JMP #000D
- 0x900A0707, // 000C SETMBR R2 K3 K7
- 0x880C0108, // 000D GETMBR R3 R0 K8
- 0x900A1003, // 000E SETMBR R2 K8 R3
- 0x880C0108, // 000F GETMBR R3 R0 K8
- 0x880C070A, // 0010 GETMBR R3 R3 K10
- 0x8C0C070B, // 0011 GETMET R3 R3 K11
- 0x7C0C0200, // 0012 CALL R3 1
- 0x900A1203, // 0013 SETMBR R2 K9 R3
- 0x880C0108, // 0014 GETMBR R3 R0 K8
- 0x880C070D, // 0015 GETMBR R3 R3 K13
- 0x900A1803, // 0016 SETMBR R2 K12 R3
- 0x900A1D07, // 0017 SETMBR R2 K14 K7
- 0x540E000F, // 0018 LDINT R3 16
- 0x900A1E03, // 0019 SETMBR R2 K15 R3
- 0x880C0110, // 001A GETMBR R3 R0 K16
- 0x900A2003, // 001B SETMBR R2 K16 R3
- 0x900A2307, // 001C SETMBR R2 K17 K7
- 0x900A2504, // 001D SETMBR R2 K18 K4
- 0x880C0109, // 001E GETMBR R3 R0 K9
- 0x900A2603, // 001F SETMBR R2 K19 R3
- 0x900A2907, // 0020 SETMBR R2 K20 K7
- 0xB80E2A00, // 0021 GETNGBL R3 K21
- 0x8C0C0716, // 0022 GETMET R3 R3 K22
- 0x8C140317, // 0023 GETMET R5 R1 K23
- 0x581C0018, // 0024 LDCONST R7 K24
- 0xB8223200, // 0025 GETNGBL R8 K25
- 0x8C20111A, // 0026 GETMET R8 R8 K26
- 0x8828050F, // 0027 GETMBR R10 R2 K15
- 0x7C200400, // 0028 CALL R8 2
- 0x7C140600, // 0029 CALL R5 3
- 0x5818001B, // 002A LDCONST R6 K27
- 0x7C0C0600, // 002B CALL R3 3
- 0x80040400, // 002C RET 1 R2
+ 0x880C010C, // 0034 GETMBR R3 R0 K12
+ 0x740E0003, // 0035 JMPT R3 #003A
+ 0x880C010E, // 0036 GETMBR R3 R0 K14
+ 0x5412FFFF, // 0037 LDINT R4 65536
+ 0x300C0604, // 0038 OR R3 R3 R4
+ 0x90021C03, // 0039 SETMBR R0 K14 R3
+ 0x8C0C0503, // 003A GETMET R3 R2 K3
+ 0x54160003, // 003B LDINT R5 4
+ 0x00140205, // 003C ADD R5 R1 R5
+ 0x5818000A, // 003D LDCONST R6 K10
+ 0x7C0C0600, // 003E CALL R3 3
+ 0x90021E03, // 003F SETMBR R0 K15 R3
+ 0x540E0005, // 0040 LDINT R3 6
+ 0x00040203, // 0041 ADD R1 R1 R3
+ 0x880C0105, // 0042 GETMBR R3 R0 K5
+ 0x780E0005, // 0043 JMPF R3 #004A
+ 0x8C0C0503, // 0044 GETMET R3 R2 K3
+ 0x5C140200, // 0045 MOVE R5 R1
+ 0x5818000A, // 0046 LDCONST R6 K10
+ 0x7C0C0600, // 0047 CALL R3 3
+ 0x90022003, // 0048 SETMBR R0 K16 R3
+ 0x0004030A, // 0049 ADD R1 R1 K10
+ 0x880C010B, // 004A GETMBR R3 R0 K11
+ 0x780E0006, // 004B JMPF R3 #0053
+ 0x8C0C0503, // 004C GETMET R3 R2 K3
+ 0x5C140200, // 004D MOVE R5 R1
+ 0x541A0003, // 004E LDINT R6 4
+ 0x7C0C0600, // 004F CALL R3 3
+ 0x90022203, // 0050 SETMBR R0 K17 R3
+ 0x540E0003, // 0051 LDINT R3 4
+ 0x00040203, // 0052 ADD R1 R1 R3
+ 0x880C0107, // 0053 GETMBR R3 R0 K7
+ 0x780E0005, // 0054 JMPF R3 #005B
+ 0x8C0C0503, // 0055 GETMET R3 R2 K3
+ 0x5C140200, // 0056 MOVE R5 R1
+ 0x5818000A, // 0057 LDCONST R6 K10
+ 0x7C0C0600, // 0058 CALL R3 3
+ 0x0010070A, // 0059 ADD R4 R3 K10
+ 0x00040204, // 005A ADD R1 R1 R4
+ 0x90022401, // 005B SETMBR R0 K18 R1
+ 0x80040000, // 005C RET 1 R0
})
)
);
@@ -812,47 +1039,48 @@ be_local_closure(Matter_Frame_decrypt, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[36]) { /* constants */
+ ( &(const bvalue[37]) { /* constants */
/* K0 */ be_nested_str_weak(crypto),
/* K1 */ be_nested_str_weak(session),
/* K2 */ be_nested_str_weak(raw),
/* K3 */ be_const_int(2147483647),
/* K4 */ be_nested_str_weak(get_i2r),
/* K5 */ be_nested_str_weak(sec_p),
- /* K6 */ be_nested_str_weak(get_i2r_privacy),
- /* K7 */ be_nested_str_weak(add),
- /* K8 */ be_nested_str_weak(local_session_id),
- /* K9 */ be_nested_str_weak(payload_idx),
- /* K10 */ be_const_int(1),
- /* K11 */ be_nested_str_weak(AES_CTR),
- /* K12 */ be_nested_str_weak(decrypt),
- /* K13 */ be_const_int(2),
- /* K14 */ be_const_int(0),
- /* K15 */ be_const_int(3),
- /* K16 */ be_nested_str_weak(self),
- /* K17 */ be_nested_str_weak(flags),
- /* K18 */ be_nested_str_weak(message_counter),
- /* K19 */ be_nested_str_weak(source_node_id),
- /* K20 */ be_nested_str_weak(peer_node_id),
- /* K21 */ be_nested_str_weak(resize),
- /* K22 */ be_nested_str_weak(tasmota),
- /* K23 */ be_nested_str_weak(log),
- /* K24 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
- /* K25 */ be_nested_str_weak(MTR_X3A_X20i2r_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K26 */ be_nested_str_weak(tohex),
- /* K27 */ be_nested_str_weak(MTR_X3A_X20p_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K28 */ be_nested_str_weak(MTR_X3A_X20a_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K29 */ be_nested_str_weak(MTR_X3A_X20n_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K30 */ be_nested_str_weak(MTR_X3A_X20mic_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K31 */ be_nested_str_weak(AES_CCM),
- /* K32 */ be_nested_str_weak(tag),
- /* K33 */ be_nested_str_weak(MTR_X3A_X20cleartext_X20_X20_X20_X3D),
- /* K34 */ be_nested_str_weak(MTR_X3A_X20tag_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
- /* K35 */ be_nested_str_weak(MTR_X3A_X20rejected_X20packet_X20due_X20to_X20invalid_X20MIC),
+ /* K6 */ be_nested_str_weak(tasmota),
+ /* K7 */ be_nested_str_weak(log),
+ /* K8 */ be_nested_str_weak(MTR_X3A_X20_X3E_X3E_X3E_X3E_X3E_X3E_X3E_X3E_X3E_X3E_X3E_X3E_X3E_X3E_X3E_X3E_X3E_X3E_X3E_X3E_X20Compute_X20Privacy_X20TODO),
+ /* K9 */ be_const_int(2),
+ /* K10 */ be_nested_str_weak(get_i2r_privacy),
+ /* K11 */ be_nested_str_weak(add),
+ /* K12 */ be_nested_str_weak(local_session_id),
+ /* K13 */ be_nested_str_weak(payload_idx),
+ /* K14 */ be_const_int(1),
+ /* K15 */ be_nested_str_weak(AES_CTR),
+ /* K16 */ be_nested_str_weak(decrypt),
+ /* K17 */ be_const_int(0),
+ /* K18 */ be_const_int(3),
+ /* K19 */ be_nested_str_weak(self),
+ /* K20 */ be_nested_str_weak(flags),
+ /* K21 */ be_nested_str_weak(message_counter),
+ /* K22 */ be_nested_str_weak(source_node_id),
+ /* K23 */ be_nested_str_weak(peer_node_id),
+ /* K24 */ be_nested_str_weak(resize),
+ /* K25 */ be_nested_str_weak(MTR_X3A_X20_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A_X2A),
+ /* K26 */ be_nested_str_weak(MTR_X3A_X20i2r_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
+ /* K27 */ be_nested_str_weak(tohex),
+ /* K28 */ be_nested_str_weak(MTR_X3A_X20p_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
+ /* K29 */ be_nested_str_weak(MTR_X3A_X20a_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
+ /* K30 */ be_nested_str_weak(MTR_X3A_X20n_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
+ /* K31 */ be_nested_str_weak(MTR_X3A_X20mic_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
+ /* K32 */ be_nested_str_weak(AES_CCM),
+ /* K33 */ be_nested_str_weak(tag),
+ /* K34 */ be_nested_str_weak(MTR_X3A_X20cleartext_X20_X20_X20_X3D),
+ /* K35 */ be_nested_str_weak(MTR_X3A_X20tag_X20_X20_X20_X20_X20_X20_X20_X20_X20_X3D),
+ /* K36 */ be_nested_str_weak(MTR_X3A_X20rejected_X20packet_X20due_X20to_X20invalid_X20MIC),
}),
be_str_weak(decrypt),
&be_const_str_solidified,
- ( &(const binstruction[165]) { /* code */
+ ( &(const binstruction[170]) { /* code */
0xA4060000, // 0000 IMPORT R1 K0
0x88080101, // 0001 GETMBR R2 R0 K1
0x880C0102, // 0002 GETMBR R3 R0 K2
@@ -862,360 +1090,167 @@ be_local_closure(Matter_Frame_decrypt, /* name */
0x8C140504, // 0006 GETMET R5 R2 K4
0x7C140200, // 0007 CALL R5 1
0x88180105, // 0008 GETMBR R6 R0 K5
- 0x781A0025, // 0009 JMPF R6 #0030
- 0x8C180506, // 000A GETMET R6 R2 K6
- 0x7C180200, // 000B CALL R6 1
- 0x601C0015, // 000C GETGBL R7 G21
- 0x7C1C0000, // 000D CALL R7 0
- 0x8C1C0F07, // 000E GETMET R7 R7 K7
- 0x88240108, // 000F GETMBR R9 R0 K8
- 0x5429FFFD, // 0010 LDINT R10 -2
- 0x7C1C0600, // 0011 CALL R7 3
- 0x54220004, // 0012 LDINT R8 5
- 0x5426000E, // 0013 LDINT R9 15
- 0x40201009, // 0014 CONNECT R8 R8 R9
- 0x94200808, // 0015 GETIDX R8 R4 R8
- 0x001C0E08, // 0016 ADD R7 R7 R8
- 0x54220003, // 0017 LDINT R8 4
- 0x88240109, // 0018 GETMBR R9 R0 K9
- 0x0424130A, // 0019 SUB R9 R9 K10
- 0x40201009, // 001A CONNECT R8 R8 R9
- 0x88240102, // 001B GETMBR R9 R0 K2
- 0x94201208, // 001C GETIDX R8 R9 R8
- 0x8C28030B, // 001D GETMET R10 R1 K11
- 0x5C300C00, // 001E MOVE R12 R6
- 0x7C280400, // 001F CALL R10 2
- 0x8C28150C, // 0020 GETMET R10 R10 K12
- 0x5C301000, // 0021 MOVE R12 R8
- 0x5C340E00, // 0022 MOVE R13 R7
- 0x5838000D, // 0023 LDCONST R14 K13
- 0x7C280800, // 0024 CALL R10 4
- 0x5C241400, // 0025 MOVE R9 R10
- 0x402A1D0F, // 0026 CONNECT R10 K14 K15
- 0x882C0102, // 0027 GETMBR R11 R0 K2
- 0x9428160A, // 0028 GETIDX R10 R11 R10
- 0x00281409, // 0029 ADD R10 R10 R9
- 0x882C0110, // 002A GETMBR R11 R0 K16
- 0x882C1709, // 002B GETMBR R11 R11 K9
- 0x402C1703, // 002C CONNECT R11 R11 K3
- 0x942C100B, // 002D GETIDX R11 R8 R11
- 0x0028140B, // 002E ADD R10 R10 R11
- 0x9002040A, // 002F SETMBR R0 K2 R10
- 0x88180109, // 0030 GETMBR R6 R0 K9
- 0x04180D0A, // 0031 SUB R6 R6 K10
- 0x401A1C06, // 0032 CONNECT R6 K14 R6
- 0x94180606, // 0033 GETIDX R6 R3 R6
- 0x881C0109, // 0034 GETMBR R7 R0 K9
- 0x5421FFEE, // 0035 LDINT R8 -17
- 0x401C0E08, // 0036 CONNECT R7 R7 R8
- 0x941C0607, // 0037 GETIDX R7 R3 R7
- 0x60200015, // 0038 GETGBL R8 G21
- 0x7C200000, // 0039 CALL R8 0
- 0x8C241107, // 003A GETMET R9 R8 K7
- 0x882C0111, // 003B GETMBR R11 R0 K17
- 0x5830000A, // 003C LDCONST R12 K10
- 0x7C240600, // 003D CALL R9 3
- 0x8C241107, // 003E GETMET R9 R8 K7
- 0x882C0112, // 003F GETMBR R11 R0 K18
- 0x54320003, // 0040 LDINT R12 4
- 0x7C240600, // 0041 CALL R9 3
- 0x88240113, // 0042 GETMBR R9 R0 K19
- 0x78260001, // 0043 JMPF R9 #0046
- 0x40241103, // 0044 CONNECT R9 R8 K3
- 0x70020006, // 0045 JMP #004D
- 0x88240514, // 0046 GETMBR R9 R2 K20
- 0x78260001, // 0047 JMPF R9 #004A
- 0x88240514, // 0048 GETMBR R9 R2 K20
- 0x40241009, // 0049 CONNECT R9 R8 R9
- 0x8C241115, // 004A GETMET R9 R8 K21
- 0x542E000C, // 004B LDINT R11 13
- 0x7C240400, // 004C CALL R9 2
- 0xB8262C00, // 004D GETNGBL R9 K22
- 0x8C241317, // 004E GETMET R9 R9 K23
- 0x582C0018, // 004F LDCONST R11 K24
- 0x5830000F, // 0050 LDCONST R12 K15
- 0x7C240600, // 0051 CALL R9 3
- 0xB8262C00, // 0052 GETNGBL R9 K22
- 0x8C241317, // 0053 GETMET R9 R9 K23
- 0x8C2C0B1A, // 0054 GETMET R11 R5 K26
- 0x7C2C0200, // 0055 CALL R11 1
- 0x002E320B, // 0056 ADD R11 K25 R11
- 0x5830000F, // 0057 LDCONST R12 K15
- 0x7C240600, // 0058 CALL R9 3
- 0xB8262C00, // 0059 GETNGBL R9 K22
- 0x8C241317, // 005A GETMET R9 R9 K23
- 0x8C2C0F1A, // 005B GETMET R11 R7 K26
- 0x7C2C0200, // 005C CALL R11 1
- 0x002E360B, // 005D ADD R11 K27 R11
- 0x5830000F, // 005E LDCONST R12 K15
- 0x7C240600, // 005F CALL R9 3
- 0xB8262C00, // 0060 GETNGBL R9 K22
- 0x8C241317, // 0061 GETMET R9 R9 K23
- 0x8C2C0D1A, // 0062 GETMET R11 R6 K26
- 0x7C2C0200, // 0063 CALL R11 1
- 0x002E380B, // 0064 ADD R11 K28 R11
- 0x5830000F, // 0065 LDCONST R12 K15
- 0x7C240600, // 0066 CALL R9 3
- 0xB8262C00, // 0067 GETNGBL R9 K22
- 0x8C241317, // 0068 GETMET R9 R9 K23
- 0x8C2C111A, // 0069 GETMET R11 R8 K26
- 0x7C2C0200, // 006A CALL R11 1
- 0x002E3A0B, // 006B ADD R11 K29 R11
- 0x5830000F, // 006C LDCONST R12 K15
- 0x7C240600, // 006D CALL R9 3
- 0xB8262C00, // 006E GETNGBL R9 K22
- 0x8C241317, // 006F GETMET R9 R9 K23
- 0x8C2C091A, // 0070 GETMET R11 R4 K26
- 0x7C2C0200, // 0071 CALL R11 1
- 0x002E3C0B, // 0072 ADD R11 K30 R11
- 0x5830000F, // 0073 LDCONST R12 K15
- 0x7C240600, // 0074 CALL R9 3
- 0x8C24031F, // 0075 GETMET R9 R1 K31
- 0x5C2C0A00, // 0076 MOVE R11 R5
- 0x5C301000, // 0077 MOVE R12 R8
- 0x5C340C00, // 0078 MOVE R13 R6
- 0x6038000C, // 0079 GETGBL R14 G12
- 0x5C3C0E00, // 007A MOVE R15 R7
- 0x7C380200, // 007B CALL R14 1
- 0x543E000F, // 007C LDINT R15 16
- 0x7C240C00, // 007D CALL R9 6
- 0x8C28130C, // 007E GETMET R10 R9 K12
- 0x5C300E00, // 007F MOVE R12 R7
- 0x7C280400, // 0080 CALL R10 2
- 0x8C2C1320, // 0081 GETMET R11 R9 K32
- 0x7C2C0200, // 0082 CALL R11 1
- 0xB8322C00, // 0083 GETNGBL R12 K22
- 0x8C301917, // 0084 GETMET R12 R12 K23
- 0x58380018, // 0085 LDCONST R14 K24
- 0x583C000F, // 0086 LDCONST R15 K15
- 0x7C300600, // 0087 CALL R12 3
- 0xB8322C00, // 0088 GETNGBL R12 K22
- 0x8C301917, // 0089 GETMET R12 R12 K23
- 0x8C38151A, // 008A GETMET R14 R10 K26
- 0x7C380200, // 008B CALL R14 1
- 0x003A420E, // 008C ADD R14 K33 R14
- 0x583C000F, // 008D LDCONST R15 K15
- 0x7C300600, // 008E CALL R12 3
- 0xB8322C00, // 008F GETNGBL R12 K22
- 0x8C301917, // 0090 GETMET R12 R12 K23
- 0x8C38171A, // 0091 GETMET R14 R11 K26
- 0x7C380200, // 0092 CALL R14 1
- 0x003A440E, // 0093 ADD R14 K34 R14
- 0x583C000F, // 0094 LDCONST R15 K15
- 0x7C300600, // 0095 CALL R12 3
- 0xB8322C00, // 0096 GETNGBL R12 K22
- 0x8C301917, // 0097 GETMET R12 R12 K23
- 0x58380018, // 0098 LDCONST R14 K24
- 0x583C000F, // 0099 LDCONST R15 K15
+ 0x781A002A, // 0009 JMPF R6 #0035
+ 0xB81A0C00, // 000A GETNGBL R6 K6
+ 0x8C180D07, // 000B GETMET R6 R6 K7
+ 0x58200008, // 000C LDCONST R8 K8
+ 0x58240009, // 000D LDCONST R9 K9
+ 0x7C180600, // 000E CALL R6 3
+ 0x8C18050A, // 000F GETMET R6 R2 K10
+ 0x7C180200, // 0010 CALL R6 1
+ 0x601C0015, // 0011 GETGBL R7 G21
+ 0x7C1C0000, // 0012 CALL R7 0
+ 0x8C1C0F0B, // 0013 GETMET R7 R7 K11
+ 0x8824010C, // 0014 GETMBR R9 R0 K12
+ 0x5429FFFD, // 0015 LDINT R10 -2
+ 0x7C1C0600, // 0016 CALL R7 3
+ 0x54220004, // 0017 LDINT R8 5
+ 0x5426000E, // 0018 LDINT R9 15
+ 0x40201009, // 0019 CONNECT R8 R8 R9
+ 0x94200808, // 001A GETIDX R8 R4 R8
+ 0x001C0E08, // 001B ADD R7 R7 R8
+ 0x54220003, // 001C LDINT R8 4
+ 0x8824010D, // 001D GETMBR R9 R0 K13
+ 0x0424130E, // 001E SUB R9 R9 K14
+ 0x40201009, // 001F CONNECT R8 R8 R9
+ 0x88240102, // 0020 GETMBR R9 R0 K2
+ 0x94201208, // 0021 GETIDX R8 R9 R8
+ 0x8C28030F, // 0022 GETMET R10 R1 K15
+ 0x5C300C00, // 0023 MOVE R12 R6
+ 0x7C280400, // 0024 CALL R10 2
+ 0x8C281510, // 0025 GETMET R10 R10 K16
+ 0x5C301000, // 0026 MOVE R12 R8
+ 0x5C340E00, // 0027 MOVE R13 R7
+ 0x58380009, // 0028 LDCONST R14 K9
+ 0x7C280800, // 0029 CALL R10 4
+ 0x5C241400, // 002A MOVE R9 R10
+ 0x402A2312, // 002B CONNECT R10 K17 K18
+ 0x882C0102, // 002C GETMBR R11 R0 K2
+ 0x9428160A, // 002D GETIDX R10 R11 R10
+ 0x00281409, // 002E ADD R10 R10 R9
+ 0x882C0113, // 002F GETMBR R11 R0 K19
+ 0x882C170D, // 0030 GETMBR R11 R11 K13
+ 0x402C1703, // 0031 CONNECT R11 R11 K3
+ 0x942C100B, // 0032 GETIDX R11 R8 R11
+ 0x0028140B, // 0033 ADD R10 R10 R11
+ 0x9002040A, // 0034 SETMBR R0 K2 R10
+ 0x8818010D, // 0035 GETMBR R6 R0 K13
+ 0x04180D0E, // 0036 SUB R6 R6 K14
+ 0x401A2206, // 0037 CONNECT R6 K17 R6
+ 0x94180606, // 0038 GETIDX R6 R3 R6
+ 0x881C010D, // 0039 GETMBR R7 R0 K13
+ 0x5421FFEE, // 003A LDINT R8 -17
+ 0x401C0E08, // 003B CONNECT R7 R7 R8
+ 0x941C0607, // 003C GETIDX R7 R3 R7
+ 0x60200015, // 003D GETGBL R8 G21
+ 0x7C200000, // 003E CALL R8 0
+ 0x8C24110B, // 003F GETMET R9 R8 K11
+ 0x882C0114, // 0040 GETMBR R11 R0 K20
+ 0x5830000E, // 0041 LDCONST R12 K14
+ 0x7C240600, // 0042 CALL R9 3
+ 0x8C24110B, // 0043 GETMET R9 R8 K11
+ 0x882C0115, // 0044 GETMBR R11 R0 K21
+ 0x54320003, // 0045 LDINT R12 4
+ 0x7C240600, // 0046 CALL R9 3
+ 0x88240116, // 0047 GETMBR R9 R0 K22
+ 0x78260001, // 0048 JMPF R9 #004B
+ 0x40241103, // 0049 CONNECT R9 R8 K3
+ 0x70020006, // 004A JMP #0052
+ 0x88240517, // 004B GETMBR R9 R2 K23
+ 0x78260001, // 004C JMPF R9 #004F
+ 0x88240517, // 004D GETMBR R9 R2 K23
+ 0x40241009, // 004E CONNECT R9 R8 R9
+ 0x8C241118, // 004F GETMET R9 R8 K24
+ 0x542E000C, // 0050 LDINT R11 13
+ 0x7C240400, // 0051 CALL R9 2
+ 0xB8260C00, // 0052 GETNGBL R9 K6
+ 0x8C241307, // 0053 GETMET R9 R9 K7
+ 0x582C0019, // 0054 LDCONST R11 K25
+ 0x54320003, // 0055 LDINT R12 4
+ 0x7C240600, // 0056 CALL R9 3
+ 0xB8260C00, // 0057 GETNGBL R9 K6
+ 0x8C241307, // 0058 GETMET R9 R9 K7
+ 0x8C2C0B1B, // 0059 GETMET R11 R5 K27
+ 0x7C2C0200, // 005A CALL R11 1
+ 0x002E340B, // 005B ADD R11 K26 R11
+ 0x54320003, // 005C LDINT R12 4
+ 0x7C240600, // 005D CALL R9 3
+ 0xB8260C00, // 005E GETNGBL R9 K6
+ 0x8C241307, // 005F GETMET R9 R9 K7
+ 0x8C2C0F1B, // 0060 GETMET R11 R7 K27
+ 0x7C2C0200, // 0061 CALL R11 1
+ 0x002E380B, // 0062 ADD R11 K28 R11
+ 0x54320003, // 0063 LDINT R12 4
+ 0x7C240600, // 0064 CALL R9 3
+ 0xB8260C00, // 0065 GETNGBL R9 K6
+ 0x8C241307, // 0066 GETMET R9 R9 K7
+ 0x8C2C0D1B, // 0067 GETMET R11 R6 K27
+ 0x7C2C0200, // 0068 CALL R11 1
+ 0x002E3A0B, // 0069 ADD R11 K29 R11
+ 0x54320003, // 006A LDINT R12 4
+ 0x7C240600, // 006B CALL R9 3
+ 0xB8260C00, // 006C GETNGBL R9 K6
+ 0x8C241307, // 006D GETMET R9 R9 K7
+ 0x8C2C111B, // 006E GETMET R11 R8 K27
+ 0x7C2C0200, // 006F CALL R11 1
+ 0x002E3C0B, // 0070 ADD R11 K30 R11
+ 0x54320003, // 0071 LDINT R12 4
+ 0x7C240600, // 0072 CALL R9 3
+ 0xB8260C00, // 0073 GETNGBL R9 K6
+ 0x8C241307, // 0074 GETMET R9 R9 K7
+ 0x8C2C091B, // 0075 GETMET R11 R4 K27
+ 0x7C2C0200, // 0076 CALL R11 1
+ 0x002E3E0B, // 0077 ADD R11 K31 R11
+ 0x54320003, // 0078 LDINT R12 4
+ 0x7C240600, // 0079 CALL R9 3
+ 0x8C240320, // 007A GETMET R9 R1 K32
+ 0x5C2C0A00, // 007B MOVE R11 R5
+ 0x5C301000, // 007C MOVE R12 R8
+ 0x5C340C00, // 007D MOVE R13 R6
+ 0x6038000C, // 007E GETGBL R14 G12
+ 0x5C3C0E00, // 007F MOVE R15 R7
+ 0x7C380200, // 0080 CALL R14 1
+ 0x543E000F, // 0081 LDINT R15 16
+ 0x7C240C00, // 0082 CALL R9 6
+ 0x8C281310, // 0083 GETMET R10 R9 K16
+ 0x5C300E00, // 0084 MOVE R12 R7
+ 0x7C280400, // 0085 CALL R10 2
+ 0x8C2C1321, // 0086 GETMET R11 R9 K33
+ 0x7C2C0200, // 0087 CALL R11 1
+ 0xB8320C00, // 0088 GETNGBL R12 K6
+ 0x8C301907, // 0089 GETMET R12 R12 K7
+ 0x58380019, // 008A LDCONST R14 K25
+ 0x543E0003, // 008B LDINT R15 4
+ 0x7C300600, // 008C CALL R12 3
+ 0xB8320C00, // 008D GETNGBL R12 K6
+ 0x8C301907, // 008E GETMET R12 R12 K7
+ 0x8C38151B, // 008F GETMET R14 R10 K27
+ 0x7C380200, // 0090 CALL R14 1
+ 0x003A440E, // 0091 ADD R14 K34 R14
+ 0x543E0003, // 0092 LDINT R15 4
+ 0x7C300600, // 0093 CALL R12 3
+ 0xB8320C00, // 0094 GETNGBL R12 K6
+ 0x8C301907, // 0095 GETMET R12 R12 K7
+ 0x8C38171B, // 0096 GETMET R14 R11 K27
+ 0x7C380200, // 0097 CALL R14 1
+ 0x003A460E, // 0098 ADD R14 K35 R14
+ 0x543E0003, // 0099 LDINT R15 4
0x7C300600, // 009A CALL R12 3
- 0x20301604, // 009B NE R12 R11 R4
- 0x78320006, // 009C JMPF R12 #00A4
- 0xB8322C00, // 009D GETNGBL R12 K22
- 0x8C301917, // 009E GETMET R12 R12 K23
- 0x58380023, // 009F LDCONST R14 K35
- 0x583C000F, // 00A0 LDCONST R15 K15
- 0x7C300600, // 00A1 CALL R12 3
- 0x4C300000, // 00A2 LDNIL R12
- 0x80041800, // 00A3 RET 1 R12
- 0x80041400, // 00A4 RET 1 R10
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: encode
-********************************************************************/
-be_local_closure(Matter_Frame_encode, /* name */
- be_nested_proto(
- 7, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[30]) { /* constants */
- /* K0 */ be_nested_str_weak(flags),
- /* K1 */ be_const_int(0),
- /* K2 */ be_nested_str_weak(flag_s),
- /* K3 */ be_nested_str_weak(flag_dsiz),
- /* K4 */ be_const_int(3),
- /* K5 */ be_nested_str_weak(add),
- /* K6 */ be_const_int(1),
- /* K7 */ be_nested_str_weak(local_session_id),
- /* K8 */ be_const_int(2),
- /* K9 */ be_nested_str_weak(sec_flags),
- /* K10 */ be_nested_str_weak(sec_p),
- /* K11 */ be_nested_str_weak(sec_c),
- /* K12 */ be_nested_str_weak(sec_sesstype),
- /* K13 */ be_nested_str_weak(message_counter),
- /* K14 */ be_nested_str_weak(source_node_id),
- /* K15 */ be_nested_str_weak(dest_node_id_8),
- /* K16 */ be_nested_str_weak(dest_node_id_2),
- /* K17 */ be_nested_str_weak(payload_idx),
- /* K18 */ be_nested_str_weak(x_flags),
- /* K19 */ be_nested_str_weak(x_flag_v),
- /* K20 */ be_nested_str_weak(x_flag_r),
- /* K21 */ be_nested_str_weak(x_flag_a),
- /* K22 */ be_nested_str_weak(x_flag_i),
- /* K23 */ be_nested_str_weak(opcode),
- /* K24 */ be_nested_str_weak(exchange_id),
- /* K25 */ be_nested_str_weak(protocol_id),
- /* K26 */ be_nested_str_weak(ack_message_counter),
- /* K27 */ be_nested_str_weak(app_payload_idx),
- /* K28 */ be_nested_str_weak(debug),
- /* K29 */ be_nested_str_weak(raw),
- }),
- be_str_weak(encode),
- &be_const_str_solidified,
- ( &(const binstruction[144]) { /* code */
- 0x60080015, // 0000 GETGBL R2 G21
- 0x7C080000, // 0001 CALL R2 0
- 0x880C0100, // 0002 GETMBR R3 R0 K0
- 0x4C100000, // 0003 LDNIL R4
- 0x1C0C0604, // 0004 EQ R3 R3 R4
- 0x780E000D, // 0005 JMPF R3 #0014
- 0x90020101, // 0006 SETMBR R0 K0 K1
- 0x880C0102, // 0007 GETMBR R3 R0 K2
- 0x780E0003, // 0008 JMPF R3 #000D
- 0x880C0100, // 0009 GETMBR R3 R0 K0
- 0x54120003, // 000A LDINT R4 4
- 0x300C0604, // 000B OR R3 R3 R4
- 0x90020003, // 000C SETMBR R0 K0 R3
- 0x880C0103, // 000D GETMBR R3 R0 K3
- 0x780E0004, // 000E JMPF R3 #0014
- 0x880C0100, // 000F GETMBR R3 R0 K0
- 0x88100103, // 0010 GETMBR R4 R0 K3
- 0x2C100904, // 0011 AND R4 R4 K4
- 0x300C0604, // 0012 OR R3 R3 R4
- 0x90020003, // 0013 SETMBR R0 K0 R3
- 0x8C0C0505, // 0014 GETMET R3 R2 K5
- 0x88140100, // 0015 GETMBR R5 R0 K0
- 0x58180006, // 0016 LDCONST R6 K6
- 0x7C0C0600, // 0017 CALL R3 3
- 0x8C0C0505, // 0018 GETMET R3 R2 K5
- 0x88140107, // 0019 GETMBR R5 R0 K7
- 0x78160001, // 001A JMPF R5 #001D
- 0x88140107, // 001B GETMBR R5 R0 K7
- 0x70020000, // 001C JMP #001E
- 0x58140001, // 001D LDCONST R5 K1
- 0x58180008, // 001E LDCONST R6 K8
- 0x7C0C0600, // 001F CALL R3 3
- 0x880C0109, // 0020 GETMBR R3 R0 K9
- 0x4C100000, // 0021 LDNIL R4
- 0x1C0C0604, // 0022 EQ R3 R3 R4
- 0x780E0013, // 0023 JMPF R3 #0038
- 0x90021301, // 0024 SETMBR R0 K9 K1
- 0x880C010A, // 0025 GETMBR R3 R0 K10
- 0x780E0003, // 0026 JMPF R3 #002B
- 0x880C0109, // 0027 GETMBR R3 R0 K9
- 0x5412007F, // 0028 LDINT R4 128
- 0x300C0604, // 0029 OR R3 R3 R4
- 0x90021203, // 002A SETMBR R0 K9 R3
- 0x880C010B, // 002B GETMBR R3 R0 K11
- 0x780E0003, // 002C JMPF R3 #0031
- 0x880C0109, // 002D GETMBR R3 R0 K9
- 0x5412003F, // 002E LDINT R4 64
- 0x300C0604, // 002F OR R3 R3 R4
- 0x90021203, // 0030 SETMBR R0 K9 R3
- 0x880C010C, // 0031 GETMBR R3 R0 K12
- 0x780E0004, // 0032 JMPF R3 #0038
- 0x880C0109, // 0033 GETMBR R3 R0 K9
- 0x8810010C, // 0034 GETMBR R4 R0 K12
- 0x2C100904, // 0035 AND R4 R4 K4
- 0x300C0604, // 0036 OR R3 R3 R4
- 0x90021203, // 0037 SETMBR R0 K9 R3
- 0x8C0C0505, // 0038 GETMET R3 R2 K5
- 0x88140109, // 0039 GETMBR R5 R0 K9
- 0x58180006, // 003A LDCONST R6 K6
- 0x7C0C0600, // 003B CALL R3 3
- 0x8C0C0505, // 003C GETMET R3 R2 K5
- 0x8814010D, // 003D GETMBR R5 R0 K13
- 0x541A0003, // 003E LDINT R6 4
- 0x7C0C0600, // 003F CALL R3 3
- 0x880C0102, // 0040 GETMBR R3 R0 K2
- 0x780E0001, // 0041 JMPF R3 #0044
- 0x880C010E, // 0042 GETMBR R3 R0 K14
- 0x400C0403, // 0043 CONNECT R3 R2 R3
- 0x880C0103, // 0044 GETMBR R3 R0 K3
- 0x1C0C0706, // 0045 EQ R3 R3 K6
- 0x780E0001, // 0046 JMPF R3 #0049
- 0x880C010F, // 0047 GETMBR R3 R0 K15
- 0x400C0403, // 0048 CONNECT R3 R2 R3
- 0x880C0103, // 0049 GETMBR R3 R0 K3
- 0x1C0C0708, // 004A EQ R3 R3 K8
- 0x780E0003, // 004B JMPF R3 #0050
- 0x8C0C0505, // 004C GETMET R3 R2 K5
- 0x88140110, // 004D GETMBR R5 R0 K16
- 0x58180008, // 004E LDCONST R6 K8
- 0x7C0C0600, // 004F CALL R3 3
- 0x600C000C, // 0050 GETGBL R3 G12
- 0x5C100400, // 0051 MOVE R4 R2
- 0x7C0C0200, // 0052 CALL R3 1
- 0x90022203, // 0053 SETMBR R0 K17 R3
- 0x880C0112, // 0054 GETMBR R3 R0 K18
- 0x4C100000, // 0055 LDNIL R4
- 0x1C0C0604, // 0056 EQ R3 R3 R4
- 0x780E0016, // 0057 JMPF R3 #006F
- 0x90022501, // 0058 SETMBR R0 K18 K1
- 0x880C0113, // 0059 GETMBR R3 R0 K19
- 0x780E0003, // 005A JMPF R3 #005F
- 0x880C0112, // 005B GETMBR R3 R0 K18
- 0x5412000F, // 005C LDINT R4 16
- 0x300C0604, // 005D OR R3 R3 R4
- 0x90022403, // 005E SETMBR R0 K18 R3
- 0x880C0114, // 005F GETMBR R3 R0 K20
- 0x780E0003, // 0060 JMPF R3 #0065
- 0x880C0112, // 0061 GETMBR R3 R0 K18
- 0x54120003, // 0062 LDINT R4 4
- 0x300C0604, // 0063 OR R3 R3 R4
- 0x90022403, // 0064 SETMBR R0 K18 R3
- 0x880C0115, // 0065 GETMBR R3 R0 K21
- 0x780E0002, // 0066 JMPF R3 #006A
- 0x880C0112, // 0067 GETMBR R3 R0 K18
- 0x300C0708, // 0068 OR R3 R3 K8
- 0x90022403, // 0069 SETMBR R0 K18 R3
- 0x880C0116, // 006A GETMBR R3 R0 K22
- 0x780E0002, // 006B JMPF R3 #006F
- 0x880C0112, // 006C GETMBR R3 R0 K18
- 0x300C0706, // 006D OR R3 R3 K6
- 0x90022403, // 006E SETMBR R0 K18 R3
- 0x8C0C0505, // 006F GETMET R3 R2 K5
- 0x88140112, // 0070 GETMBR R5 R0 K18
- 0x58180006, // 0071 LDCONST R6 K6
- 0x7C0C0600, // 0072 CALL R3 3
- 0x8C0C0505, // 0073 GETMET R3 R2 K5
- 0x88140117, // 0074 GETMBR R5 R0 K23
- 0x58180006, // 0075 LDCONST R6 K6
- 0x7C0C0600, // 0076 CALL R3 3
- 0x8C0C0505, // 0077 GETMET R3 R2 K5
- 0x88140118, // 0078 GETMBR R5 R0 K24
- 0x58180008, // 0079 LDCONST R6 K8
- 0x7C0C0600, // 007A CALL R3 3
- 0x8C0C0505, // 007B GETMET R3 R2 K5
- 0x88140119, // 007C GETMBR R5 R0 K25
- 0x58180008, // 007D LDCONST R6 K8
- 0x7C0C0600, // 007E CALL R3 3
- 0x880C0115, // 007F GETMBR R3 R0 K21
- 0x780E0003, // 0080 JMPF R3 #0085
- 0x8C0C0505, // 0081 GETMET R3 R2 K5
- 0x8814011A, // 0082 GETMBR R5 R0 K26
- 0x541A0003, // 0083 LDINT R6 4
- 0x7C0C0600, // 0084 CALL R3 3
- 0x600C000C, // 0085 GETGBL R3 G12
- 0x5C100400, // 0086 MOVE R4 R2
- 0x7C0C0200, // 0087 CALL R3 1
- 0x90023603, // 0088 SETMBR R0 K27 R3
- 0x78060000, // 0089 JMPF R1 #008B
- 0x400C0401, // 008A CONNECT R3 R2 R1
- 0x8C0C011C, // 008B GETMET R3 R0 K28
- 0x5C140400, // 008C MOVE R5 R2
- 0x7C0C0400, // 008D CALL R3 2
- 0x90023A02, // 008E SETMBR R0 K29 R2
- 0x80040400, // 008F RET 1 R2
+ 0xB8320C00, // 009B GETNGBL R12 K6
+ 0x8C301907, // 009C GETMET R12 R12 K7
+ 0x58380019, // 009D LDCONST R14 K25
+ 0x543E0003, // 009E LDINT R15 4
+ 0x7C300600, // 009F CALL R12 3
+ 0x20301604, // 00A0 NE R12 R11 R4
+ 0x78320006, // 00A1 JMPF R12 #00A9
+ 0xB8320C00, // 00A2 GETNGBL R12 K6
+ 0x8C301907, // 00A3 GETMET R12 R12 K7
+ 0x58380024, // 00A4 LDCONST R14 K36
+ 0x583C0009, // 00A5 LDCONST R15 K9
+ 0x7C300600, // 00A6 CALL R12 3
+ 0x4C300000, // 00A7 LDNIL R12
+ 0x80041800, // 00A8 RET 1 R12
+ 0x80041400, // 00A9 RET 1 R10
})
)
);
@@ -1228,49 +1263,50 @@ be_local_closure(Matter_Frame_encode, /* name */
be_local_class(Matter_Frame,
32,
NULL,
- be_nested_map(41,
+ be_nested_map(42,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(x_flag_a, 8), be_const_var(21) },
+ { be_const_key_weak(x_flag_i, -1), be_const_var(22) },
+ { be_const_key_weak(dest_node_id_8, 7), be_const_var(16) },
{ be_const_key_weak(x_flags, -1), be_const_var(17) },
- { be_const_key_weak(raw, 37), be_const_var(2) },
- { be_const_key_weak(sec_sesstype, 0), be_const_var(12) },
- { be_const_key_weak(build_response, 5), be_const_closure(Matter_Frame_build_response_closure) },
- { be_const_key_weak(sec_mx, -1), be_const_var(11) },
- { be_const_key_weak(dest_node_id_2, 32), be_const_var(15) },
- { be_const_key_weak(encode, -1), be_const_closure(Matter_Frame_encode_closure) },
+ { be_const_key_weak(x_flag_a, -1), be_const_var(21) },
+ { be_const_key_weak(exchange_id, -1), be_const_var(24) },
+ { be_const_key_weak(opcode, -1), be_const_var(23) },
+ { be_const_key_weak(encode_frame, -1), be_const_closure(Matter_Frame_encode_frame_closure) },
+ { be_const_key_weak(app_payload_idx, -1), be_const_var(29) },
+ { be_const_key_weak(payload_idx, -1), be_const_var(3) },
+ { be_const_key_weak(ack_message_counter, 24), be_const_var(27) },
+ { be_const_key_weak(build_standalone_ack, -1), be_const_closure(Matter_Frame_build_standalone_ack_closure) },
+ { be_const_key_weak(x_flag_v, 6), be_const_var(18) },
+ { be_const_key_weak(sec_c, -1), be_const_var(10) },
+ { be_const_key_weak(vendor_id, 32), be_const_var(26) },
+ { be_const_key_weak(local_session_id, -1), be_const_var(7) },
+ { be_const_key_weak(flag_s, -1), be_const_var(5) },
+ { be_const_key_weak(debug, -1), be_const_closure(Matter_Frame_debug_closure) },
+ { be_const_key_weak(message_handler, 10), be_const_var(0) },
+ { be_const_key_weak(encrypt, 34), be_const_closure(Matter_Frame_encrypt_closure) },
+ { be_const_key_weak(session, -1), be_const_var(1) },
+ { be_const_key_weak(sec_flags, -1), be_const_var(8) },
+ { be_const_key_weak(build_response, -1), be_const_closure(Matter_Frame_build_response_closure) },
+ { be_const_key_weak(initiate_response, -1), be_const_static_closure(Matter_Frame_initiate_response_closure) },
+ { be_const_key_weak(remote_port, -1), be_const_var(31) },
+ { be_const_key_weak(sec_sesstype, -1), be_const_var(12) },
+ { be_const_key_weak(decode_header, 23), be_const_closure(Matter_Frame_decode_header_closure) },
+ { be_const_key_weak(flags, -1), be_const_var(4) },
+ { be_const_key_weak(protocol_id, 13), be_const_var(25) },
+ { be_const_key_weak(raw, -1), be_const_var(2) },
+ { be_const_key_weak(source_node_id, 28), be_const_var(14) },
+ { be_const_key_weak(flag_dsiz, -1), be_const_var(6) },
+ { be_const_key_weak(x_flag_r, -1), be_const_var(20) },
+ { be_const_key_weak(message_counter, -1), be_const_var(13) },
+ { be_const_key_weak(init, 14), be_const_closure(Matter_Frame_init_closure) },
+ { be_const_key_weak(x_flag_sx, 12), be_const_var(19) },
+ { be_const_key_weak(dest_node_id_2, -1), be_const_var(15) },
+ { be_const_key_weak(decode_payload, -1), be_const_closure(Matter_Frame_decode_payload_closure) },
+ { be_const_key_weak(sec_p, 8), be_const_var(9) },
{ be_const_key_weak(decrypt, -1), be_const_closure(Matter_Frame_decrypt_closure) },
{ be_const_key_weak(sec_extensions, -1), be_const_var(28) },
- { be_const_key_weak(remote_ip, 7), be_const_var(30) },
- { be_const_key_weak(message_counter, 33), be_const_var(13) },
- { be_const_key_weak(ack_message_counter, -1), be_const_var(27) },
- { be_const_key_weak(x_flag_i, -1), be_const_var(22) },
- { be_const_key_weak(dest_node_id_8, -1), be_const_var(16) },
- { be_const_key_weak(x_flag_r, 2), be_const_var(20) },
- { be_const_key_weak(x_flag_v, -1), be_const_var(18) },
- { be_const_key_weak(opcode, -1), be_const_var(23) },
- { be_const_key_weak(sec_c, 25), be_const_var(10) },
- { be_const_key_weak(sec_p, -1), be_const_var(9) },
- { be_const_key_weak(protocol_id, 29), be_const_var(25) },
- { be_const_key_weak(sec_flags, -1), be_const_var(8) },
- { be_const_key_weak(message_handler, -1), be_const_var(0) },
- { be_const_key_weak(init, -1), be_const_closure(Matter_Frame_init_closure) },
- { be_const_key_weak(encrypt, 19), be_const_closure(Matter_Frame_encrypt_closure) },
- { be_const_key_weak(build_standalone_ack, 27), be_const_closure(Matter_Frame_build_standalone_ack_closure) },
- { be_const_key_weak(decode_payload, -1), be_const_closure(Matter_Frame_decode_payload_closure) },
- { be_const_key_weak(remote_port, 36), be_const_var(31) },
- { be_const_key_weak(flag_dsiz, -1), be_const_var(6) },
- { be_const_key_weak(vendor_id, 16), be_const_var(26) },
- { be_const_key_weak(payload_idx, -1), be_const_var(3) },
- { be_const_key_weak(debug, -1), be_const_closure(Matter_Frame_debug_closure) },
- { be_const_key_weak(x_flag_sx, 39), be_const_var(19) },
- { be_const_key_weak(decode_header, -1), be_const_closure(Matter_Frame_decode_header_closure) },
- { be_const_key_weak(flag_s, -1), be_const_var(5) },
- { be_const_key_weak(app_payload_idx, -1), be_const_var(29) },
- { be_const_key_weak(source_node_id, -1), be_const_var(14) },
- { be_const_key_weak(session, -1), be_const_var(1) },
- { be_const_key_weak(flags, -1), be_const_var(4) },
- { be_const_key_weak(local_session_id, 40), be_const_var(7) },
- { be_const_key_weak(exchange_id, -1), be_const_var(24) },
+ { be_const_key_weak(sec_mx, 3), be_const_var(11) },
+ { be_const_key_weak(remote_ip, 2), be_const_var(30) },
})),
be_str_weak(Matter_Frame)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_MessageHandler.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_MessageHandler.h
index 453348f65..24a47772d 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_MessageHandler.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_MessageHandler.h
@@ -7,12 +7,12 @@
extern const bclass be_class_Matter_MessageHandler;
/********************************************************************
-** Solidified function: send_response
+** Solidified function: send_response_frame
********************************************************************/
-be_local_closure(Matter_MessageHandler_send_response, /* name */
+be_local_closure(Matter_MessageHandler_send_response_frame, /* name */
be_nested_proto(
- 11, /* nstack */
- 5, /* argc */
+ 5, /* nstack */
+ 2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
@@ -23,17 +23,14 @@ be_local_closure(Matter_MessageHandler_send_response, /* name */
/* K0 */ be_nested_str_weak(device),
/* K1 */ be_nested_str_weak(msg_send),
}),
- be_str_weak(send_response),
+ be_str_weak(send_response_frame),
&be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0x88140100, // 0000 GETMBR R5 R0 K0
- 0x8C140B01, // 0001 GETMET R5 R5 K1
- 0x5C1C0200, // 0002 MOVE R7 R1
- 0x5C200400, // 0003 MOVE R8 R2
- 0x5C240600, // 0004 MOVE R9 R3
- 0x5C280800, // 0005 MOVE R10 R4
- 0x7C140A00, // 0006 CALL R5 5
- 0x80000000, // 0007 RET 0
+ ( &(const binstruction[ 5]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x5C100200, // 0002 MOVE R4 R1
+ 0x7C080400, // 0003 CALL R2 2
+ 0x80000000, // 0004 RET 0
})
)
);
@@ -41,479 +38,69 @@ be_local_closure(Matter_MessageHandler_send_response, /* name */
/********************************************************************
-** Solidified function: msg_received
+** Solidified function: send_encrypted_ack
********************************************************************/
-be_local_closure(Matter_MessageHandler_msg_received, /* name */
+be_local_closure(Matter_MessageHandler_send_encrypted_ack, /* name */
be_nested_proto(
- 17, /* nstack */
- 4, /* argc */
+ 14, /* nstack */
+ 3, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[59]) { /* constants */
+ ( &(const bvalue[17]) { /* constants */
/* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(tasmota),
- /* K2 */ be_nested_str_weak(log),
- /* K3 */ be_nested_str_weak(MTR_X3A_X20MessageHandler_X3A_X3Amsg_received_X20raw_X3D),
- /* K4 */ be_nested_str_weak(tohex),
- /* K5 */ be_nested_str_weak(matter),
- /* K6 */ be_nested_str_weak(Frame),
- /* K7 */ be_nested_str_weak(decode_header),
- /* K8 */ be_nested_str_weak(local_session_id),
- /* K9 */ be_const_int(0),
- /* K10 */ be_nested_str_weak(sec_sesstype),
- /* K11 */ be_nested_str_weak(device),
- /* K12 */ be_nested_str_weak(sessions),
- /* K13 */ be_nested_str_weak(find_session_source_id_unsecure),
- /* K14 */ be_nested_str_weak(source_node_id),
- /* K15 */ be_nested_str_weak(MTR_X3A_X20find_X20session_X20by_X20source_node_id_X20_X3D_X20),
- /* K16 */ be_nested_str_weak(session_id_X20_X3D_X20),
- /* K17 */ be_const_int(3),
- /* K18 */ be_nested_str_weak(session),
- /* K19 */ be_nested_str_weak(counter_rcv),
- /* K20 */ be_nested_str_weak(validate),
- /* K21 */ be_nested_str_weak(message_counter),
- /* K22 */ be_nested_str_weak(format),
- /* K23 */ be_nested_str_weak(MTR_X3A_X20rejected_X20duplicate_X20unencrypted_X20message_X20_X3D_X20_X25i_X20ref_X20_X3D_X20_X25i),
- /* K24 */ be_nested_str_weak(val),
- /* K25 */ be_nested_str_weak(decode_payload),
- /* K26 */ be_nested_str_weak(packet_ack),
- /* K27 */ be_nested_str_weak(ack_message_counter),
- /* K28 */ be_nested_str_weak(opcode),
- /* K29 */ be_nested_str_weak(get_opcode_name),
- /* K30 */ be_nested_str_weak(0x_X2502X),
- /* K31 */ be_nested_str_weak(MTR_X3A_X20_X3EReceived_X20_X20_X20_X20_X20_X20_X25s_X20from_X20_X5B_X25s_X5D_X3A_X25i),
- /* K32 */ be_const_int(2),
- /* K33 */ be_nested_str_weak(commissioning),
- /* K34 */ be_nested_str_weak(process_incoming),
- /* K35 */ be_nested_str_weak(MTR_X3A_X20decode_X20header_X3A_X20local_session_id_X3D_X25i_X20message_counter_X3D_X25i),
- /* K36 */ be_nested_str_weak(get_session_by_local_session_id),
- /* K37 */ be_nested_str_weak(MTR_X3A_X20unknown_X20local_session_id_X20),
- /* K38 */ be_nested_str_weak(MTR_X3A_X20frame_X3D),
- /* K39 */ be_nested_str_weak(inspect),
- /* K40 */ be_nested_str_weak(MTR_X3A_X20rejected_X20duplicate_X20encrypted_X20message_X20_X3D_X20),
- /* K41 */ be_nested_str_weak(_X20counter_X3D),
- /* K42 */ be_nested_str_weak(decrypt),
- /* K43 */ be_nested_str_weak(raw),
- /* K44 */ be_nested_str_weak(payload_idx),
- /* K45 */ be_const_int(1),
- /* K46 */ be_nested_str_weak(MTR_X3A_X20idx_X3D_X25i_X20clear_X3D_X25s),
- /* K47 */ be_nested_str_weak(MTR_X3A_X20decrypted_X20message_X3A_X20protocol_id_X3A),
- /* K48 */ be_nested_str_weak(protocol_id),
- /* K49 */ be_nested_str_weak(_X20opcode_X3D),
- /* K50 */ be_nested_str_weak(_X20exchange_id),
- /* K51 */ be_nested_str_weak(exchange_id),
- /* K52 */ be_nested_str_weak(MTR_X3A_X20PROTOCOL_ID_SECURE_CHANNEL_X20),
- /* K53 */ be_nested_str_weak(im),
- /* K54 */ be_nested_str_weak(MTR_X3A_X20ignoring_X20unhandled_X20protocol_id_X3A),
- /* K55 */ be_nested_str_weak(MTR_X3A_X20MessageHandler_X3A_X3Amsg_received_X20exception_X3A_X20),
- /* K56 */ be_nested_str_weak(_X3B),
- /* K57 */ be_nested_str_weak(debug),
- /* K58 */ be_nested_str_weak(traceback),
+ /* K1 */ be_nested_str_weak(x_flag_r),
+ /* K2 */ be_nested_str_weak(build_standalone_ack),
+ /* K3 */ be_nested_str_weak(encode_frame),
+ /* K4 */ be_nested_str_weak(encrypt),
+ /* K5 */ be_nested_str_weak(tasmota),
+ /* K6 */ be_nested_str_weak(log),
+ /* K7 */ be_nested_str_weak(format),
+ /* K8 */ be_nested_str_weak(MTR_X3A_X20_X3CAck_X2A_X20_X20_X20_X20_X20_X20_X28_X256i_X29_X20ack_X3D_X25i_X20id_X3D_X25i_X20_X25s),
+ /* K9 */ be_nested_str_weak(session),
+ /* K10 */ be_nested_str_weak(local_session_id),
+ /* K11 */ be_nested_str_weak(ack_message_counter),
+ /* K12 */ be_nested_str_weak(message_counter),
+ /* K13 */ be_nested_str_weak(_X7Breliable_X7D),
+ /* K14 */ be_nested_str_weak(),
+ /* K15 */ be_const_int(3),
+ /* K16 */ be_nested_str_weak(send_response_frame),
}),
- be_str_weak(msg_received),
+ be_str_weak(send_encrypted_ack),
&be_const_str_solidified,
- ( &(const binstruction[291]) { /* code */
- 0xA4120000, // 0000 IMPORT R4 K0
- 0xA802010A, // 0001 EXBLK 0 #010D
- 0xB8160200, // 0002 GETNGBL R5 K1
- 0x8C140B02, // 0003 GETMET R5 R5 K2
- 0x8C1C0304, // 0004 GETMET R7 R1 K4
- 0x7C1C0200, // 0005 CALL R7 1
- 0x001E0607, // 0006 ADD R7 K3 R7
- 0x54220003, // 0007 LDINT R8 4
- 0x7C140600, // 0008 CALL R5 3
- 0xB8160A00, // 0009 GETNGBL R5 K5
- 0x8C140B06, // 000A GETMET R5 R5 K6
- 0x5C1C0000, // 000B MOVE R7 R0
- 0x5C200200, // 000C MOVE R8 R1
- 0x5C240400, // 000D MOVE R9 R2
- 0x5C280600, // 000E MOVE R10 R3
- 0x7C140A00, // 000F CALL R5 5
- 0x8C180B07, // 0010 GETMET R6 R5 K7
- 0x7C180200, // 0011 CALL R6 1
- 0x5C1C0C00, // 0012 MOVE R7 R6
- 0x741E0002, // 0013 JMPT R7 #0017
- 0x501C0000, // 0014 LDBOOL R7 0 0
- 0xA8040001, // 0015 EXBLK 1 1
- 0x80040E00, // 0016 RET 1 R7
- 0x881C0B08, // 0017 GETMBR R7 R5 K8
- 0x1C1C0F09, // 0018 EQ R7 R7 K9
- 0x781E0057, // 0019 JMPF R7 #0072
- 0x881C0B0A, // 001A GETMBR R7 R5 K10
- 0x1C1C0F09, // 001B EQ R7 R7 K9
- 0x781E0054, // 001C JMPF R7 #0072
- 0x881C010B, // 001D GETMBR R7 R0 K11
- 0x881C0F0C, // 001E GETMBR R7 R7 K12
- 0x8C1C0F0D, // 001F GETMET R7 R7 K13
- 0x88240B0E, // 0020 GETMBR R9 R5 K14
- 0x542A0059, // 0021 LDINT R10 90
- 0x7C1C0600, // 0022 CALL R7 3
- 0xB8220200, // 0023 GETNGBL R8 K1
- 0x8C201102, // 0024 GETMET R8 R8 K2
- 0x60280008, // 0025 GETGBL R10 G8
- 0x882C0B0E, // 0026 GETMBR R11 R5 K14
- 0x7C280200, // 0027 CALL R10 1
- 0x002A1E0A, // 0028 ADD R10 K15 R10
- 0x00281510, // 0029 ADD R10 R10 K16
- 0x602C0008, // 002A GETGBL R11 G8
- 0x88300F08, // 002B GETMBR R12 R7 K8
- 0x7C2C0200, // 002C CALL R11 1
- 0x0028140B, // 002D ADD R10 R10 R11
- 0x582C0011, // 002E LDCONST R11 K17
- 0x7C200600, // 002F CALL R8 3
- 0x90162407, // 0030 SETMBR R5 K18 R7
- 0x88200113, // 0031 GETMBR R8 R0 K19
- 0x8C201114, // 0032 GETMET R8 R8 K20
- 0x88280B15, // 0033 GETMBR R10 R5 K21
- 0x502C0000, // 0034 LDBOOL R11 0 0
- 0x7C200600, // 0035 CALL R8 3
- 0x7422000D, // 0036 JMPT R8 #0045
- 0xB8220200, // 0037 GETNGBL R8 K1
- 0x8C201102, // 0038 GETMET R8 R8 K2
- 0x8C280916, // 0039 GETMET R10 R4 K22
- 0x58300017, // 003A LDCONST R12 K23
- 0x88340B15, // 003B GETMBR R13 R5 K21
- 0x88380113, // 003C GETMBR R14 R0 K19
- 0x8C381D18, // 003D GETMET R14 R14 K24
- 0x7C380200, // 003E CALL R14 1
- 0x7C280800, // 003F CALL R10 4
- 0x582C0011, // 0040 LDCONST R11 K17
- 0x7C200600, // 0041 CALL R8 3
- 0x50200000, // 0042 LDBOOL R8 0 0
- 0xA8040001, // 0043 EXBLK 1 1
- 0x80041000, // 0044 RET 1 R8
- 0x8C200B19, // 0045 GETMET R8 R5 K25
- 0x7C200200, // 0046 CALL R8 1
- 0x74220002, // 0047 JMPT R8 #004B
- 0x50200000, // 0048 LDBOOL R8 0 0
- 0xA8040001, // 0049 EXBLK 1 1
- 0x80041000, // 004A RET 1 R8
- 0x8820010B, // 004B GETMBR R8 R0 K11
- 0x8C20111A, // 004C GETMET R8 R8 K26
- 0x88280B1B, // 004D GETMBR R10 R5 K27
- 0x7C200400, // 004E CALL R8 2
- 0x88200B1C, // 004F GETMBR R8 R5 K28
- 0x5426000F, // 0050 LDINT R9 16
- 0x20201009, // 0051 NE R8 R8 R9
- 0x78220014, // 0052 JMPF R8 #0068
- 0xB8220A00, // 0053 GETNGBL R8 K5
- 0x8C20111D, // 0054 GETMET R8 R8 K29
- 0x88280B1C, // 0055 GETMBR R10 R5 K28
- 0x7C200400, // 0056 CALL R8 2
- 0x5C241000, // 0057 MOVE R9 R8
- 0x74260004, // 0058 JMPT R9 #005E
- 0x8C240916, // 0059 GETMET R9 R4 K22
- 0x582C001E, // 005A LDCONST R11 K30
- 0x88300B1C, // 005B GETMBR R12 R5 K28
- 0x7C240600, // 005C CALL R9 3
- 0x5C201200, // 005D MOVE R8 R9
- 0xB8260200, // 005E GETNGBL R9 K1
- 0x8C241302, // 005F GETMET R9 R9 K2
- 0x8C2C0916, // 0060 GETMET R11 R4 K22
- 0x5834001F, // 0061 LDCONST R13 K31
- 0x5C381000, // 0062 MOVE R14 R8
- 0x5C3C0400, // 0063 MOVE R15 R2
- 0x5C400600, // 0064 MOVE R16 R3
- 0x7C2C0A00, // 0065 CALL R11 5
- 0x58300020, // 0066 LDCONST R12 K32
- 0x7C240600, // 0067 CALL R9 3
- 0x88200121, // 0068 GETMBR R8 R0 K33
- 0x8C201122, // 0069 GETMET R8 R8 K34
- 0x5C280A00, // 006A MOVE R10 R5
- 0x5C2C0400, // 006B MOVE R11 R2
- 0x5C300600, // 006C MOVE R12 R3
- 0x7C200800, // 006D CALL R8 4
- 0x50200200, // 006E LDBOOL R8 1 0
- 0xA8040001, // 006F EXBLK 1 1
- 0x80041000, // 0070 RET 1 R8
- 0x70020095, // 0071 JMP #0108
- 0xB81E0200, // 0072 GETNGBL R7 K1
- 0x8C1C0F02, // 0073 GETMET R7 R7 K2
- 0x8C240916, // 0074 GETMET R9 R4 K22
- 0x582C0023, // 0075 LDCONST R11 K35
- 0x88300B08, // 0076 GETMBR R12 R5 K8
- 0x88340B15, // 0077 GETMBR R13 R5 K21
- 0x7C240800, // 0078 CALL R9 4
- 0x58280011, // 0079 LDCONST R10 K17
- 0x7C1C0600, // 007A CALL R7 3
- 0x881C010B, // 007B GETMBR R7 R0 K11
- 0x881C0F0C, // 007C GETMBR R7 R7 K12
- 0x8C1C0F24, // 007D GETMET R7 R7 K36
- 0x88240B08, // 007E GETMBR R9 R5 K8
- 0x7C1C0400, // 007F CALL R7 2
- 0x4C200000, // 0080 LDNIL R8
- 0x1C200E08, // 0081 EQ R8 R7 R8
- 0x78220013, // 0082 JMPF R8 #0097
- 0xB8220200, // 0083 GETNGBL R8 K1
- 0x8C201102, // 0084 GETMET R8 R8 K2
- 0x60280008, // 0085 GETGBL R10 G8
- 0x882C0B08, // 0086 GETMBR R11 R5 K8
- 0x7C280200, // 0087 CALL R10 1
- 0x002A4A0A, // 0088 ADD R10 K37 R10
- 0x582C0011, // 0089 LDCONST R11 K17
- 0x7C200600, // 008A CALL R8 3
- 0xB8220200, // 008B GETNGBL R8 K1
- 0x8C201102, // 008C GETMET R8 R8 K2
- 0xB82A0A00, // 008D GETNGBL R10 K5
- 0x8C281527, // 008E GETMET R10 R10 K39
- 0x5C300A00, // 008F MOVE R12 R5
- 0x7C280400, // 0090 CALL R10 2
- 0x002A4C0A, // 0091 ADD R10 K38 R10
- 0x582C0011, // 0092 LDCONST R11 K17
- 0x7C200600, // 0093 CALL R8 3
- 0x50200000, // 0094 LDBOOL R8 0 0
- 0xA8040001, // 0095 EXBLK 1 1
- 0x80041000, // 0096 RET 1 R8
- 0x90162407, // 0097 SETMBR R5 K18 R7
- 0x88200F13, // 0098 GETMBR R8 R7 K19
- 0x8C201114, // 0099 GETMET R8 R8 K20
- 0x88280B15, // 009A GETMBR R10 R5 K21
- 0x502C0200, // 009B LDBOOL R11 1 0
- 0x7C200600, // 009C CALL R8 3
- 0x74220011, // 009D JMPT R8 #00B0
- 0xB8220200, // 009E GETNGBL R8 K1
- 0x8C201102, // 009F GETMET R8 R8 K2
- 0x60280008, // 00A0 GETGBL R10 G8
- 0x882C0B15, // 00A1 GETMBR R11 R5 K21
- 0x7C280200, // 00A2 CALL R10 1
- 0x002A500A, // 00A3 ADD R10 K40 R10
- 0x00281529, // 00A4 ADD R10 R10 K41
- 0x602C0008, // 00A5 GETGBL R11 G8
- 0x88300F13, // 00A6 GETMBR R12 R7 K19
- 0x8C301918, // 00A7 GETMET R12 R12 K24
- 0x7C300200, // 00A8 CALL R12 1
- 0x7C2C0200, // 00A9 CALL R11 1
- 0x0028140B, // 00AA ADD R10 R10 R11
- 0x582C0011, // 00AB LDCONST R11 K17
- 0x7C200600, // 00AC CALL R8 3
- 0x50200000, // 00AD LDBOOL R8 0 0
- 0xA8040001, // 00AE EXBLK 1 1
- 0x80041000, // 00AF RET 1 R8
- 0x8C200B2A, // 00B0 GETMET R8 R5 K42
- 0x7C200200, // 00B1 CALL R8 1
- 0x5C241000, // 00B2 MOVE R9 R8
- 0x74260002, // 00B3 JMPT R9 #00B7
- 0x50240000, // 00B4 LDBOOL R9 0 0
- 0xA8040001, // 00B5 EXBLK 1 1
- 0x80041200, // 00B6 RET 1 R9
- 0x88240B2C, // 00B7 GETMBR R9 R5 K44
- 0x0424132D, // 00B8 SUB R9 R9 K45
- 0x40261209, // 00B9 CONNECT R9 K9 R9
- 0x88280B2B, // 00BA GETMBR R10 R5 K43
- 0x94241409, // 00BB GETIDX R9 R10 R9
- 0x90165609, // 00BC SETMBR R5 K43 R9
- 0x88240B2B, // 00BD GETMBR R9 R5 K43
- 0x40241208, // 00BE CONNECT R9 R9 R8
- 0xB8260200, // 00BF GETNGBL R9 K1
- 0x8C241302, // 00C0 GETMET R9 R9 K2
- 0x8C2C0916, // 00C1 GETMET R11 R4 K22
- 0x5834002E, // 00C2 LDCONST R13 K46
- 0x88380B2C, // 00C3 GETMBR R14 R5 K44
- 0x883C0B2B, // 00C4 GETMBR R15 R5 K43
- 0x8C3C1F04, // 00C5 GETMET R15 R15 K4
- 0x7C3C0200, // 00C6 CALL R15 1
- 0x7C2C0800, // 00C7 CALL R11 4
- 0x58300011, // 00C8 LDCONST R12 K17
- 0x7C240600, // 00C9 CALL R9 3
- 0x8C240B19, // 00CA GETMET R9 R5 K25
- 0x7C240200, // 00CB CALL R9 1
- 0xB8260200, // 00CC GETNGBL R9 K1
- 0x8C241302, // 00CD GETMET R9 R9 K2
- 0x602C0008, // 00CE GETGBL R11 G8
- 0x88300B30, // 00CF GETMBR R12 R5 K48
- 0x7C2C0200, // 00D0 CALL R11 1
- 0x002E5E0B, // 00D1 ADD R11 K47 R11
- 0x002C1731, // 00D2 ADD R11 R11 K49
- 0x60300008, // 00D3 GETGBL R12 G8
- 0x88340B1C, // 00D4 GETMBR R13 R5 K28
- 0x7C300200, // 00D5 CALL R12 1
- 0x002C160C, // 00D6 ADD R11 R11 R12
- 0x002C1732, // 00D7 ADD R11 R11 K50
- 0x60300008, // 00D8 GETGBL R12 G8
- 0x88340B33, // 00D9 GETMBR R13 R5 K51
- 0x7C300200, // 00DA CALL R12 1
- 0x002C160C, // 00DB ADD R11 R11 R12
- 0x58300011, // 00DC LDCONST R12 K17
- 0x7C240600, // 00DD CALL R9 3
- 0x8824010B, // 00DE GETMBR R9 R0 K11
- 0x8C24131A, // 00DF GETMET R9 R9 K26
- 0x882C0B1B, // 00E0 GETMBR R11 R5 K27
- 0x7C240400, // 00E1 CALL R9 2
- 0x88240B30, // 00E2 GETMBR R9 R5 K48
- 0x1C281309, // 00E3 EQ R10 R9 K9
- 0x782A000C, // 00E4 JMPF R10 #00F2
- 0xB82A0200, // 00E5 GETNGBL R10 K1
- 0x8C281502, // 00E6 GETMET R10 R10 K2
- 0xB8320A00, // 00E7 GETNGBL R12 K5
- 0x8C301927, // 00E8 GETMET R12 R12 K39
- 0x5C380A00, // 00E9 MOVE R14 R5
- 0x7C300400, // 00EA CALL R12 2
- 0x0032680C, // 00EB ADD R12 K52 R12
- 0x58340011, // 00EC LDCONST R13 K17
- 0x7C280600, // 00ED CALL R10 3
- 0x50280200, // 00EE LDBOOL R10 1 0
- 0xA8040001, // 00EF EXBLK 1 1
- 0x80041400, // 00F0 RET 1 R10
- 0x70020015, // 00F1 JMP #0108
- 0x1C28132D, // 00F2 EQ R10 R9 K45
- 0x782A0008, // 00F3 JMPF R10 #00FD
- 0x88280135, // 00F4 GETMBR R10 R0 K53
- 0x8C281522, // 00F5 GETMET R10 R10 K34
- 0x5C300A00, // 00F6 MOVE R12 R5
- 0x5C340400, // 00F7 MOVE R13 R2
- 0x5C380600, // 00F8 MOVE R14 R3
- 0x7C280800, // 00F9 CALL R10 4
- 0xA8040001, // 00FA EXBLK 1 1
- 0x80041400, // 00FB RET 1 R10
- 0x7002000A, // 00FC JMP #0108
- 0xB82A0200, // 00FD GETNGBL R10 K1
- 0x8C281502, // 00FE GETMET R10 R10 K2
- 0x60300008, // 00FF GETGBL R12 G8
- 0x5C341200, // 0100 MOVE R13 R9
- 0x7C300200, // 0101 CALL R12 1
- 0x00326C0C, // 0102 ADD R12 K54 R12
- 0x58340011, // 0103 LDCONST R13 K17
- 0x7C280600, // 0104 CALL R10 3
- 0x50280000, // 0105 LDBOOL R10 0 0
- 0xA8040001, // 0106 EXBLK 1 1
- 0x80041400, // 0107 RET 1 R10
- 0x501C0200, // 0108 LDBOOL R7 1 0
- 0xA8040001, // 0109 EXBLK 1 1
- 0x80040E00, // 010A RET 1 R7
- 0xA8040001, // 010B EXBLK 1 1
- 0x70020014, // 010C JMP #0122
- 0xAC140002, // 010D CATCH R5 0 2
- 0x70020011, // 010E JMP #0121
- 0xB81E0200, // 010F GETNGBL R7 K1
- 0x8C1C0F02, // 0110 GETMET R7 R7 K2
- 0x60240008, // 0111 GETGBL R9 G8
- 0x5C280A00, // 0112 MOVE R10 R5
- 0x7C240200, // 0113 CALL R9 1
- 0x00266E09, // 0114 ADD R9 K55 R9
- 0x00241338, // 0115 ADD R9 R9 K56
- 0x60280008, // 0116 GETGBL R10 G8
- 0x5C2C0C00, // 0117 MOVE R11 R6
- 0x7C280200, // 0118 CALL R10 1
- 0x0024120A, // 0119 ADD R9 R9 R10
- 0x7C1C0400, // 011A CALL R7 2
- 0xA41E7200, // 011B IMPORT R7 K57
- 0x8C200F3A, // 011C GETMET R8 R7 K58
- 0x7C200200, // 011D CALL R8 1
- 0x50200000, // 011E LDBOOL R8 0 0
- 0x80041000, // 011F RET 1 R8
- 0x70020000, // 0120 JMP #0122
- 0xB0080000, // 0121 RAISE 2 R0 R0
- 0x80000000, // 0122 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: add_session
-********************************************************************/
-be_local_closure(Matter_MessageHandler_add_session, /* name */
- be_nested_proto(
- 15, /* nstack */
- 7, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[10]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(tasmota),
- /* K2 */ be_nested_str_weak(log),
- /* K3 */ be_nested_str_weak(format),
- /* K4 */ be_nested_str_weak(MTR_X3A_X20add_session_X20local_session_id_X3D_X25i_X20initiator_session_id_X3D_X25i),
- /* K5 */ be_const_int(3),
- /* K6 */ be_nested_str_weak(device),
- /* K7 */ be_nested_str_weak(sessions),
- /* K8 */ be_nested_str_weak(create_session),
- /* K9 */ be_nested_str_weak(set_keys),
- }),
- be_str_weak(add_session),
- &be_const_str_solidified,
- ( &(const binstruction[23]) { /* code */
- 0xA41E0000, // 0000 IMPORT R7 K0
- 0xB8220200, // 0001 GETNGBL R8 K1
- 0x8C201102, // 0002 GETMET R8 R8 K2
- 0x8C280F03, // 0003 GETMET R10 R7 K3
- 0x58300004, // 0004 LDCONST R12 K4
- 0x5C340200, // 0005 MOVE R13 R1
- 0x5C380400, // 0006 MOVE R14 R2
- 0x7C280800, // 0007 CALL R10 4
- 0x582C0005, // 0008 LDCONST R11 K5
- 0x7C200600, // 0009 CALL R8 3
- 0x88200106, // 000A GETMBR R8 R0 K6
- 0x88201107, // 000B GETMBR R8 R8 K7
- 0x8C201108, // 000C GETMET R8 R8 K8
- 0x5C280200, // 000D MOVE R10 R1
- 0x5C2C0400, // 000E MOVE R11 R2
- 0x7C200600, // 000F CALL R8 3
- 0x8C241109, // 0010 GETMET R9 R8 K9
- 0x5C2C0600, // 0011 MOVE R11 R3
- 0x5C300800, // 0012 MOVE R12 R4
- 0x5C340A00, // 0013 MOVE R13 R5
- 0x5C380C00, // 0014 MOVE R14 R6
- 0x7C240A00, // 0015 CALL R9 5
- 0x80000000, // 0016 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(Matter_MessageHandler_init, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
- /* K0 */ be_nested_str_weak(device),
- /* K1 */ be_nested_str_weak(commissioning),
- /* K2 */ be_nested_str_weak(matter),
- /* K3 */ be_nested_str_weak(Commisioning_Context),
- /* K4 */ be_nested_str_weak(im),
- /* K5 */ be_nested_str_weak(IM),
- /* K6 */ be_nested_str_weak(counter_rcv),
- /* K7 */ be_nested_str_weak(Counter),
- }),
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0xB80A0400, // 0001 GETNGBL R2 K2
- 0x8C080503, // 0002 GETMET R2 R2 K3
- 0x5C100000, // 0003 MOVE R4 R0
- 0x7C080400, // 0004 CALL R2 2
- 0x90020202, // 0005 SETMBR R0 K1 R2
- 0xB80A0400, // 0006 GETNGBL R2 K2
- 0x8C080505, // 0007 GETMET R2 R2 K5
- 0x5C100000, // 0008 MOVE R4 R0
- 0x5C140200, // 0009 MOVE R5 R1
- 0x7C080600, // 000A CALL R2 3
- 0x90020802, // 000B SETMBR R0 K4 R2
- 0xB80A0400, // 000C GETNGBL R2 K2
- 0x8C080507, // 000D GETMET R2 R2 K7
- 0x7C080200, // 000E CALL R2 1
- 0x90020C02, // 000F SETMBR R0 K6 R2
- 0x80000000, // 0010 RET 0
+ ( &(const binstruction[29]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0x88100301, // 0001 GETMBR R4 R1 K1
+ 0x78120018, // 0002 JMPF R4 #001C
+ 0x8C100302, // 0003 GETMET R4 R1 K2
+ 0x5C180400, // 0004 MOVE R6 R2
+ 0x7C100400, // 0005 CALL R4 2
+ 0x8C140903, // 0006 GETMET R5 R4 K3
+ 0x7C140200, // 0007 CALL R5 1
+ 0x8C140904, // 0008 GETMET R5 R4 K4
+ 0x7C140200, // 0009 CALL R5 1
+ 0xB8160A00, // 000A GETNGBL R5 K5
+ 0x8C140B06, // 000B GETMET R5 R5 K6
+ 0x8C1C0707, // 000C GETMET R7 R3 K7
+ 0x58240008, // 000D LDCONST R9 K8
+ 0x88280909, // 000E GETMBR R10 R4 K9
+ 0x8828150A, // 000F GETMBR R10 R10 K10
+ 0x882C090B, // 0010 GETMBR R11 R4 K11
+ 0x8830090C, // 0011 GETMBR R12 R4 K12
+ 0x780A0001, // 0012 JMPF R2 #0015
+ 0x5834000D, // 0013 LDCONST R13 K13
+ 0x70020000, // 0014 JMP #0016
+ 0x5834000E, // 0015 LDCONST R13 K14
+ 0x7C1C0C00, // 0016 CALL R7 6
+ 0x5820000F, // 0017 LDCONST R8 K15
+ 0x7C140600, // 0018 CALL R5 3
+ 0x8C140110, // 0019 GETMET R5 R0 K16
+ 0x5C1C0800, // 001A MOVE R7 R4
+ 0x7C140400, // 001B CALL R5 2
+ 0x80000000, // 001C RET 0
})
)
);
@@ -554,23 +141,666 @@ be_local_closure(Matter_MessageHandler_every_second, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: send_simple_ack
+********************************************************************/
+be_local_closure(Matter_MessageHandler_send_simple_ack, /* name */
+ be_nested_proto(
+ 14, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[16]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(x_flag_r),
+ /* K2 */ be_nested_str_weak(build_standalone_ack),
+ /* K3 */ be_nested_str_weak(encode_frame),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(log),
+ /* K6 */ be_nested_str_weak(format),
+ /* K7 */ be_nested_str_weak(MTR_X3A_X20_X3CAck_X20_X20_X20_X20_X20_X20_X20_X28_X256i_X29_X20ack_X3D_X25i_X20id_X3D_X25i_X20_X25s),
+ /* K8 */ be_nested_str_weak(session),
+ /* K9 */ be_nested_str_weak(local_session_id),
+ /* K10 */ be_nested_str_weak(ack_message_counter),
+ /* K11 */ be_nested_str_weak(message_counter),
+ /* K12 */ be_nested_str_weak(_X7Breliable_X7D),
+ /* K13 */ be_nested_str_weak(),
+ /* K14 */ be_const_int(3),
+ /* K15 */ be_nested_str_weak(send_response_frame),
+ }),
+ be_str_weak(send_simple_ack),
+ &be_const_str_solidified,
+ ( &(const binstruction[27]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0x88100301, // 0001 GETMBR R4 R1 K1
+ 0x78120016, // 0002 JMPF R4 #001A
+ 0x8C100302, // 0003 GETMET R4 R1 K2
+ 0x5C180400, // 0004 MOVE R6 R2
+ 0x7C100400, // 0005 CALL R4 2
+ 0x8C140903, // 0006 GETMET R5 R4 K3
+ 0x7C140200, // 0007 CALL R5 1
+ 0xB8160800, // 0008 GETNGBL R5 K4
+ 0x8C140B05, // 0009 GETMET R5 R5 K5
+ 0x8C1C0706, // 000A GETMET R7 R3 K6
+ 0x58240007, // 000B LDCONST R9 K7
+ 0x88280908, // 000C GETMBR R10 R4 K8
+ 0x88281509, // 000D GETMBR R10 R10 K9
+ 0x882C090A, // 000E GETMBR R11 R4 K10
+ 0x8830090B, // 000F GETMBR R12 R4 K11
+ 0x780A0001, // 0010 JMPF R2 #0013
+ 0x5834000C, // 0011 LDCONST R13 K12
+ 0x70020000, // 0012 JMP #0014
+ 0x5834000D, // 0013 LDCONST R13 K13
+ 0x7C1C0C00, // 0014 CALL R7 6
+ 0x5820000E, // 0015 LDCONST R8 K14
+ 0x7C140600, // 0016 CALL R5 3
+ 0x8C14010F, // 0017 GETMET R5 R0 K15
+ 0x5C1C0800, // 0018 MOVE R7 R4
+ 0x7C140400, // 0019 CALL R5 2
+ 0x80000000, // 001A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: msg_received
+********************************************************************/
+be_local_closure(Matter_MessageHandler_msg_received, /* name */
+ be_nested_proto(
+ 24, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[75]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(Frame),
+ /* K3 */ be_nested_str_weak(decode_header),
+ /* K4 */ be_nested_str_weak(sec_p),
+ /* K5 */ be_nested_str_weak(tasmota),
+ /* K6 */ be_nested_str_weak(log),
+ /* K7 */ be_nested_str_weak(MTR_X3A_X20CONTROL_X20MESSAGE_X3D),
+ /* K8 */ be_nested_str_weak(inspect),
+ /* K9 */ be_nested_str_weak(device),
+ /* K10 */ be_nested_str_weak(sessions),
+ /* K11 */ be_nested_str_weak(find_session_source_id_unsecure),
+ /* K12 */ be_nested_str_weak(source_node_id),
+ /* K13 */ be_nested_str_weak(MTR_X3A_X20find_X20session_X20by_X20source_node_id_X20_X3D_X20),
+ /* K14 */ be_nested_str_weak(_X20session_id_X20_X3D_X20),
+ /* K15 */ be_nested_str_weak(local_session_id),
+ /* K16 */ be_const_int(2),
+ /* K17 */ be_nested_str_weak(control_message),
+ /* K18 */ be_nested_str_weak(process_incoming_control_message),
+ /* K19 */ be_const_int(0),
+ /* K20 */ be_nested_str_weak(sec_sesstype),
+ /* K21 */ be_const_int(3),
+ /* K22 */ be_nested_str_weak(_ip),
+ /* K23 */ be_nested_str_weak(_port),
+ /* K24 */ be_nested_str_weak(_message_handler),
+ /* K25 */ be_nested_str_weak(session),
+ /* K26 */ be_nested_str_weak(_counter_insecure_rcv),
+ /* K27 */ be_nested_str_weak(validate),
+ /* K28 */ be_nested_str_weak(message_counter),
+ /* K29 */ be_nested_str_weak(format),
+ /* K30 */ be_nested_str_weak(MTR_X3A_X20_X2E_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20Duplicate_X20unencrypted_X20message_X20_X3D_X20_X25i_X20ref_X20_X3D_X20_X25i),
+ /* K31 */ be_nested_str_weak(val),
+ /* K32 */ be_nested_str_weak(send_simple_ack),
+ /* K33 */ be_nested_str_weak(decode_payload),
+ /* K34 */ be_nested_str_weak(received_ack),
+ /* K35 */ be_nested_str_weak(opcode),
+ /* K36 */ be_nested_str_weak(get_opcode_name),
+ /* K37 */ be_nested_str_weak(0x_X2502X),
+ /* K38 */ be_nested_str_weak(MTR_X3A_X20_X3EReceived_X20_X20_X28_X256i_X29_X20_X25s_X20rid_X3D_X25i_X20exch_X3D_X25i_X20from_X20_X5B_X25s_X5D_X3A_X25i),
+ /* K39 */ be_nested_str_weak(exchange_id),
+ /* K40 */ be_nested_str_weak(MTR_X3A_X20_X3Ercv_X20Ack_X20_X20_X20_X28_X256i_X29_X20rid_X3D_X25i_X20exch_X3D_X25i_X20ack_X3D_X25s_X20_X25sfrom_X20_X5B_X25s_X5D_X3A_X25i),
+ /* K41 */ be_nested_str_weak(x_flag_r),
+ /* K42 */ be_nested_str_weak(_X7Breliable_X7D_X20),
+ /* K43 */ be_nested_str_weak(),
+ /* K44 */ be_nested_str_weak(ack_message_counter),
+ /* K45 */ be_nested_str_weak(commissioning),
+ /* K46 */ be_nested_str_weak(process_incoming),
+ /* K47 */ be_nested_str_weak(MTR_X3A_X20decode_X20header_X3A_X20local_session_id_X3D_X25i_X20message_counter_X3D_X25i),
+ /* K48 */ be_nested_str_weak(get_session_by_local_session_id),
+ /* K49 */ be_nested_str_weak(MTR_X3A_X20unknown_X20local_session_id_X3D),
+ /* K50 */ be_nested_str_weak(counter_rcv_validate),
+ /* K51 */ be_nested_str_weak(MTR_X3A_X20_X2E_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20Duplicate_X20encrypted_X20message_X20_X3D_X20),
+ /* K52 */ be_nested_str_weak(_X20counter_X3D),
+ /* K53 */ be_nested_str_weak(counter_rcv),
+ /* K54 */ be_nested_str_weak(send_encrypted_ack),
+ /* K55 */ be_nested_str_weak(decrypt),
+ /* K56 */ be_nested_str_weak(raw),
+ /* K57 */ be_nested_str_weak(payload_idx),
+ /* K58 */ be_const_int(1),
+ /* K59 */ be_nested_str_weak(MTR_X3A_X20idx_X3D_X25i_X20clear_X3D_X25s),
+ /* K60 */ be_nested_str_weak(tohex),
+ /* K61 */ be_nested_str_weak(MTR_X3A_X20_X3E_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20Decrypted_X20message_X3A_X20protocol_id_X3A),
+ /* K62 */ be_nested_str_weak(protocol_id),
+ /* K63 */ be_nested_str_weak(_X20opcode_X3D),
+ /* K64 */ be_nested_str_weak(_X20exchange_id_X3D),
+ /* K65 */ be_nested_str_weak(MTR_X3A_X20_X3Ercv_X20_X20_X20_X20_X20_X20_X20_X28_X256i_X29_X20_X5B_X2502X_X2F_X2502X_X5D_X20rid_X3D_X25i_X20exch_X3D_X25i_X20ack_X3D_X25s_X20_X25sfrom_X20_X5B_X25s_X5D_X3A_X25i),
+ /* K66 */ be_nested_str_weak(MTR_X3A_X20PROTOCOL_ID_SECURE_CHANNEL_X20),
+ /* K67 */ be_nested_str_weak(im),
+ /* K68 */ be_nested_str_weak(process_incoming_ack),
+ /* K69 */ be_nested_str_weak(send_enqueued),
+ /* K70 */ be_nested_str_weak(MTR_X3A_X20ignoring_X20unhandled_X20protocol_id_X3A),
+ /* K71 */ be_nested_str_weak(MTR_X3A_X20MessageHandler_X3A_X3Amsg_received_X20exception_X3A_X20),
+ /* K72 */ be_nested_str_weak(_X3B),
+ /* K73 */ be_nested_str_weak(debug),
+ /* K74 */ be_nested_str_weak(traceback),
+ }),
+ be_str_weak(msg_received),
+ &be_const_str_solidified,
+ ( &(const binstruction[396]) { /* code */
+ 0xA4120000, // 0000 IMPORT R4 K0
+ 0x50140000, // 0001 LDBOOL R5 0 0
+ 0xA8020172, // 0002 EXBLK 0 #0176
+ 0xB81A0200, // 0003 GETNGBL R6 K1
+ 0x8C180D02, // 0004 GETMET R6 R6 K2
+ 0x5C200000, // 0005 MOVE R8 R0
+ 0x5C240200, // 0006 MOVE R9 R1
+ 0x5C280400, // 0007 MOVE R10 R2
+ 0x5C2C0600, // 0008 MOVE R11 R3
+ 0x7C180A00, // 0009 CALL R6 5
+ 0x8C1C0D03, // 000A GETMET R7 R6 K3
+ 0x7C1C0200, // 000B CALL R7 1
+ 0x5C200E00, // 000C MOVE R8 R7
+ 0x74220002, // 000D JMPT R8 #0011
+ 0x50200000, // 000E LDBOOL R8 0 0
+ 0xA8040001, // 000F EXBLK 1 1
+ 0x80041000, // 0010 RET 1 R8
+ 0x88200D04, // 0011 GETMBR R8 R6 K4
+ 0x78220021, // 0012 JMPF R8 #0035
+ 0xB8220A00, // 0013 GETNGBL R8 K5
+ 0x8C201106, // 0014 GETMET R8 R8 K6
+ 0xB82A0200, // 0015 GETNGBL R10 K1
+ 0x8C281508, // 0016 GETMET R10 R10 K8
+ 0x5C300C00, // 0017 MOVE R12 R6
+ 0x7C280400, // 0018 CALL R10 2
+ 0x002A0E0A, // 0019 ADD R10 K7 R10
+ 0x7C200400, // 001A CALL R8 2
+ 0x88200109, // 001B GETMBR R8 R0 K9
+ 0x8820110A, // 001C GETMBR R8 R8 K10
+ 0x8C20110B, // 001D GETMET R8 R8 K11
+ 0x88280D0C, // 001E GETMBR R10 R6 K12
+ 0x542E0059, // 001F LDINT R11 90
+ 0x7C200600, // 0020 CALL R8 3
+ 0xB8260A00, // 0021 GETNGBL R9 K5
+ 0x8C241306, // 0022 GETMET R9 R9 K6
+ 0x602C0008, // 0023 GETGBL R11 G8
+ 0x88300D0C, // 0024 GETMBR R12 R6 K12
+ 0x7C2C0200, // 0025 CALL R11 1
+ 0x002E1A0B, // 0026 ADD R11 K13 R11
+ 0x002C170E, // 0027 ADD R11 R11 K14
+ 0x60300008, // 0028 GETGBL R12 G8
+ 0x8834110F, // 0029 GETMBR R13 R8 K15
+ 0x7C300200, // 002A CALL R12 1
+ 0x002C160C, // 002B ADD R11 R11 R12
+ 0x58300010, // 002C LDCONST R12 K16
+ 0x7C240600, // 002D CALL R9 3
+ 0x88240111, // 002E GETMBR R9 R0 K17
+ 0x8C241312, // 002F GETMET R9 R9 K18
+ 0x5C2C0C00, // 0030 MOVE R11 R6
+ 0x7C240400, // 0031 CALL R9 2
+ 0xA8040001, // 0032 EXBLK 1 1
+ 0x80041200, // 0033 RET 1 R9
+ 0x7002013C, // 0034 JMP #0172
+ 0x88200D0F, // 0035 GETMBR R8 R6 K15
+ 0x1C201113, // 0036 EQ R8 R8 K19
+ 0x7822007D, // 0037 JMPF R8 #00B6
+ 0x88200D14, // 0038 GETMBR R8 R6 K20
+ 0x1C201113, // 0039 EQ R8 R8 K19
+ 0x7822007A, // 003A JMPF R8 #00B6
+ 0x88200109, // 003B GETMBR R8 R0 K9
+ 0x8820110A, // 003C GETMBR R8 R8 K10
+ 0x8C20110B, // 003D GETMET R8 R8 K11
+ 0x88280D0C, // 003E GETMBR R10 R6 K12
+ 0x542E0059, // 003F LDINT R11 90
+ 0x7C200600, // 0040 CALL R8 3
+ 0xB8260A00, // 0041 GETNGBL R9 K5
+ 0x8C241306, // 0042 GETMET R9 R9 K6
+ 0x602C0008, // 0043 GETGBL R11 G8
+ 0x88300D0C, // 0044 GETMBR R12 R6 K12
+ 0x7C2C0200, // 0045 CALL R11 1
+ 0x002E1A0B, // 0046 ADD R11 K13 R11
+ 0x002C170E, // 0047 ADD R11 R11 K14
+ 0x60300008, // 0048 GETGBL R12 G8
+ 0x8834110F, // 0049 GETMBR R13 R8 K15
+ 0x7C300200, // 004A CALL R12 1
+ 0x002C160C, // 004B ADD R11 R11 R12
+ 0x58300015, // 004C LDCONST R12 K21
+ 0x7C240600, // 004D CALL R9 3
+ 0x780A0000, // 004E JMPF R2 #0050
+ 0x90222C02, // 004F SETMBR R8 K22 R2
+ 0x780E0000, // 0050 JMPF R3 #0052
+ 0x90222E03, // 0051 SETMBR R8 K23 R3
+ 0x90223000, // 0052 SETMBR R8 K24 R0
+ 0x901A3208, // 0053 SETMBR R6 K25 R8
+ 0x8824111A, // 0054 GETMBR R9 R8 K26
+ 0x8C24131B, // 0055 GETMET R9 R9 K27
+ 0x882C0D1C, // 0056 GETMBR R11 R6 K28
+ 0x50300000, // 0057 LDBOOL R12 0 0
+ 0x7C240600, // 0058 CALL R9 3
+ 0x74260011, // 0059 JMPT R9 #006C
+ 0xB8260A00, // 005A GETNGBL R9 K5
+ 0x8C241306, // 005B GETMET R9 R9 K6
+ 0x8C2C091D, // 005C GETMET R11 R4 K29
+ 0x5834001E, // 005D LDCONST R13 K30
+ 0x88380D1C, // 005E GETMBR R14 R6 K28
+ 0x883C111A, // 005F GETMBR R15 R8 K26
+ 0x8C3C1F1F, // 0060 GETMET R15 R15 K31
+ 0x7C3C0200, // 0061 CALL R15 1
+ 0x7C2C0800, // 0062 CALL R11 4
+ 0x58300015, // 0063 LDCONST R12 K21
+ 0x7C240600, // 0064 CALL R9 3
+ 0x8C240120, // 0065 GETMET R9 R0 K32
+ 0x5C2C0C00, // 0066 MOVE R11 R6
+ 0x50300000, // 0067 LDBOOL R12 0 0
+ 0x7C240600, // 0068 CALL R9 3
+ 0x50240000, // 0069 LDBOOL R9 0 0
+ 0xA8040001, // 006A EXBLK 1 1
+ 0x80041200, // 006B RET 1 R9
+ 0x8C240D21, // 006C GETMET R9 R6 K33
+ 0x7C240200, // 006D CALL R9 1
+ 0x74260002, // 006E JMPT R9 #0072
+ 0x50240000, // 006F LDBOOL R9 0 0
+ 0xA8040001, // 0070 EXBLK 1 1
+ 0x80041200, // 0071 RET 1 R9
+ 0x88240109, // 0072 GETMBR R9 R0 K9
+ 0x8C241322, // 0073 GETMET R9 R9 K34
+ 0x5C2C0C00, // 0074 MOVE R11 R6
+ 0x7C240400, // 0075 CALL R9 2
+ 0x88240D23, // 0076 GETMBR R9 R6 K35
+ 0x542A000F, // 0077 LDINT R10 16
+ 0x2024120A, // 0078 NE R9 R9 R10
+ 0x78260018, // 0079 JMPF R9 #0093
+ 0xB8260200, // 007A GETNGBL R9 K1
+ 0x8C241324, // 007B GETMET R9 R9 K36
+ 0x882C0D23, // 007C GETMBR R11 R6 K35
+ 0x7C240400, // 007D CALL R9 2
+ 0x5C281200, // 007E MOVE R10 R9
+ 0x742A0004, // 007F JMPT R10 #0085
+ 0x8C28091D, // 0080 GETMET R10 R4 K29
+ 0x58300025, // 0081 LDCONST R12 K37
+ 0x88340D23, // 0082 GETMBR R13 R6 K35
+ 0x7C280600, // 0083 CALL R10 3
+ 0x5C241400, // 0084 MOVE R9 R10
+ 0xB82A0A00, // 0085 GETNGBL R10 K5
+ 0x8C281506, // 0086 GETMET R10 R10 K6
+ 0x8C30091D, // 0087 GETMET R12 R4 K29
+ 0x58380026, // 0088 LDCONST R14 K38
+ 0x883C110F, // 0089 GETMBR R15 R8 K15
+ 0x5C401200, // 008A MOVE R16 R9
+ 0x88440D1C, // 008B GETMBR R17 R6 K28
+ 0x88480D27, // 008C GETMBR R18 R6 K39
+ 0x5C4C0400, // 008D MOVE R19 R2
+ 0x5C500600, // 008E MOVE R20 R3
+ 0x7C301000, // 008F CALL R12 8
+ 0x58340010, // 0090 LDCONST R13 K16
+ 0x7C280600, // 0091 CALL R10 3
+ 0x70020013, // 0092 JMP #00A7
+ 0xB8260A00, // 0093 GETNGBL R9 K5
+ 0x8C241306, // 0094 GETMET R9 R9 K6
+ 0x8C2C091D, // 0095 GETMET R11 R4 K29
+ 0x58340028, // 0096 LDCONST R13 K40
+ 0x8838110F, // 0097 GETMBR R14 R8 K15
+ 0x883C0D1C, // 0098 GETMBR R15 R6 K28
+ 0x88400D29, // 0099 GETMBR R16 R6 K41
+ 0x78420001, // 009A JMPF R16 #009D
+ 0x5840002A, // 009B LDCONST R16 K42
+ 0x70020000, // 009C JMP #009E
+ 0x5840002B, // 009D LDCONST R16 K43
+ 0x88440D27, // 009E GETMBR R17 R6 K39
+ 0x60480008, // 009F GETGBL R18 G8
+ 0x884C0D2C, // 00A0 GETMBR R19 R6 K44
+ 0x7C480200, // 00A1 CALL R18 1
+ 0x5C4C0400, // 00A2 MOVE R19 R2
+ 0x5C500600, // 00A3 MOVE R20 R3
+ 0x7C2C1200, // 00A4 CALL R11 9
+ 0x58300015, // 00A5 LDCONST R12 K21
+ 0x7C240600, // 00A6 CALL R9 3
+ 0x8824012D, // 00A7 GETMBR R9 R0 K45
+ 0x8C24132E, // 00A8 GETMET R9 R9 K46
+ 0x5C2C0C00, // 00A9 MOVE R11 R6
+ 0x7C240400, // 00AA CALL R9 2
+ 0x5C141200, // 00AB MOVE R5 R9
+ 0x5C240A00, // 00AC MOVE R9 R5
+ 0x74260003, // 00AD JMPT R9 #00B2
+ 0x8C240120, // 00AE GETMET R9 R0 K32
+ 0x5C2C0C00, // 00AF MOVE R11 R6
+ 0x50300000, // 00B0 LDBOOL R12 0 0
+ 0x7C240600, // 00B1 CALL R9 3
+ 0x50240200, // 00B2 LDBOOL R9 1 0
+ 0xA8040001, // 00B3 EXBLK 1 1
+ 0x80041200, // 00B4 RET 1 R9
+ 0x700200BB, // 00B5 JMP #0172
+ 0xB8220A00, // 00B6 GETNGBL R8 K5
+ 0x8C201106, // 00B7 GETMET R8 R8 K6
+ 0x8C28091D, // 00B8 GETMET R10 R4 K29
+ 0x5830002F, // 00B9 LDCONST R12 K47
+ 0x88340D0F, // 00BA GETMBR R13 R6 K15
+ 0x88380D1C, // 00BB GETMBR R14 R6 K28
+ 0x7C280800, // 00BC CALL R10 4
+ 0x582C0015, // 00BD LDCONST R11 K21
+ 0x7C200600, // 00BE CALL R8 3
+ 0x88200109, // 00BF GETMBR R8 R0 K9
+ 0x8820110A, // 00C0 GETMBR R8 R8 K10
+ 0x8C201130, // 00C1 GETMET R8 R8 K48
+ 0x88280D0F, // 00C2 GETMBR R10 R6 K15
+ 0x7C200400, // 00C3 CALL R8 2
+ 0x4C240000, // 00C4 LDNIL R9
+ 0x1C241009, // 00C5 EQ R9 R8 R9
+ 0x7826000A, // 00C6 JMPF R9 #00D2
+ 0xB8260A00, // 00C7 GETNGBL R9 K5
+ 0x8C241306, // 00C8 GETMET R9 R9 K6
+ 0x602C0008, // 00C9 GETGBL R11 G8
+ 0x88300D0F, // 00CA GETMBR R12 R6 K15
+ 0x7C2C0200, // 00CB CALL R11 1
+ 0x002E620B, // 00CC ADD R11 K49 R11
+ 0x58300010, // 00CD LDCONST R12 K16
+ 0x7C240600, // 00CE CALL R9 3
+ 0x50240000, // 00CF LDBOOL R9 0 0
+ 0xA8040001, // 00D0 EXBLK 1 1
+ 0x80041200, // 00D1 RET 1 R9
+ 0x780A0000, // 00D2 JMPF R2 #00D4
+ 0x90222C02, // 00D3 SETMBR R8 K22 R2
+ 0x780E0000, // 00D4 JMPF R3 #00D6
+ 0x90222E03, // 00D5 SETMBR R8 K23 R3
+ 0x90223000, // 00D6 SETMBR R8 K24 R0
+ 0x901A3208, // 00D7 SETMBR R6 K25 R8
+ 0x8C241132, // 00D8 GETMET R9 R8 K50
+ 0x882C0D1C, // 00D9 GETMBR R11 R6 K28
+ 0x50300200, // 00DA LDBOOL R12 1 0
+ 0x7C240600, // 00DB CALL R9 3
+ 0x74260013, // 00DC JMPT R9 #00F1
+ 0xB8260A00, // 00DD GETNGBL R9 K5
+ 0x8C241306, // 00DE GETMET R9 R9 K6
+ 0x602C0008, // 00DF GETGBL R11 G8
+ 0x88300D1C, // 00E0 GETMBR R12 R6 K28
+ 0x7C2C0200, // 00E1 CALL R11 1
+ 0x002E660B, // 00E2 ADD R11 K51 R11
+ 0x002C1734, // 00E3 ADD R11 R11 K52
+ 0x60300008, // 00E4 GETGBL R12 G8
+ 0x88341135, // 00E5 GETMBR R13 R8 K53
+ 0x7C300200, // 00E6 CALL R12 1
+ 0x002C160C, // 00E7 ADD R11 R11 R12
+ 0x58300015, // 00E8 LDCONST R12 K21
+ 0x7C240600, // 00E9 CALL R9 3
+ 0x8C240136, // 00EA GETMET R9 R0 K54
+ 0x5C2C0C00, // 00EB MOVE R11 R6
+ 0x50300000, // 00EC LDBOOL R12 0 0
+ 0x7C240600, // 00ED CALL R9 3
+ 0x50240000, // 00EE LDBOOL R9 0 0
+ 0xA8040001, // 00EF EXBLK 1 1
+ 0x80041200, // 00F0 RET 1 R9
+ 0x8C240D37, // 00F1 GETMET R9 R6 K55
+ 0x7C240200, // 00F2 CALL R9 1
+ 0x5C281200, // 00F3 MOVE R10 R9
+ 0x742A0002, // 00F4 JMPT R10 #00F8
+ 0x50280000, // 00F5 LDBOOL R10 0 0
+ 0xA8040001, // 00F6 EXBLK 1 1
+ 0x80041400, // 00F7 RET 1 R10
+ 0x88280D39, // 00F8 GETMBR R10 R6 K57
+ 0x0428153A, // 00F9 SUB R10 R10 K58
+ 0x402A260A, // 00FA CONNECT R10 K19 R10
+ 0x882C0D38, // 00FB GETMBR R11 R6 K56
+ 0x9428160A, // 00FC GETIDX R10 R11 R10
+ 0x901A700A, // 00FD SETMBR R6 K56 R10
+ 0x88280D38, // 00FE GETMBR R10 R6 K56
+ 0x40281409, // 00FF CONNECT R10 R10 R9
+ 0xB82A0A00, // 0100 GETNGBL R10 K5
+ 0x8C281506, // 0101 GETMET R10 R10 K6
+ 0x8C30091D, // 0102 GETMET R12 R4 K29
+ 0x5838003B, // 0103 LDCONST R14 K59
+ 0x883C0D39, // 0104 GETMBR R15 R6 K57
+ 0x88400D38, // 0105 GETMBR R16 R6 K56
+ 0x8C40213C, // 0106 GETMET R16 R16 K60
+ 0x7C400200, // 0107 CALL R16 1
+ 0x7C300800, // 0108 CALL R12 4
+ 0x54360003, // 0109 LDINT R13 4
+ 0x7C280600, // 010A CALL R10 3
+ 0x8C280D21, // 010B GETMET R10 R6 K33
+ 0x7C280200, // 010C CALL R10 1
+ 0xB82A0A00, // 010D GETNGBL R10 K5
+ 0x8C281506, // 010E GETMET R10 R10 K6
+ 0x60300008, // 010F GETGBL R12 G8
+ 0x88340D3E, // 0110 GETMBR R13 R6 K62
+ 0x7C300200, // 0111 CALL R12 1
+ 0x00327A0C, // 0112 ADD R12 K61 R12
+ 0x0030193F, // 0113 ADD R12 R12 K63
+ 0x60340008, // 0114 GETGBL R13 G8
+ 0x88380D23, // 0115 GETMBR R14 R6 K35
+ 0x7C340200, // 0116 CALL R13 1
+ 0x0030180D, // 0117 ADD R12 R12 R13
+ 0x00301940, // 0118 ADD R12 R12 K64
+ 0x60340008, // 0119 GETGBL R13 G8
+ 0x88380D27, // 011A GETMBR R14 R6 K39
+ 0x543EFFFE, // 011B LDINT R15 65535
+ 0x2C381C0F, // 011C AND R14 R14 R15
+ 0x7C340200, // 011D CALL R13 1
+ 0x0030180D, // 011E ADD R12 R12 R13
+ 0x58340015, // 011F LDCONST R13 K21
+ 0x7C280600, // 0120 CALL R10 3
+ 0xB82A0A00, // 0121 GETNGBL R10 K5
+ 0x8C281506, // 0122 GETMET R10 R10 K6
+ 0x8C30091D, // 0123 GETMET R12 R4 K29
+ 0x58380041, // 0124 LDCONST R14 K65
+ 0x883C110F, // 0125 GETMBR R15 R8 K15
+ 0x88400D3E, // 0126 GETMBR R16 R6 K62
+ 0x88440D23, // 0127 GETMBR R17 R6 K35
+ 0x88480D1C, // 0128 GETMBR R18 R6 K28
+ 0x884C0D27, // 0129 GETMBR R19 R6 K39
+ 0x60500008, // 012A GETGBL R20 G8
+ 0x88540D2C, // 012B GETMBR R21 R6 K44
+ 0x7C500200, // 012C CALL R20 1
+ 0x88540D29, // 012D GETMBR R21 R6 K41
+ 0x78560001, // 012E JMPF R21 #0131
+ 0x5854002A, // 012F LDCONST R21 K42
+ 0x70020000, // 0130 JMP #0132
+ 0x5854002B, // 0131 LDCONST R21 K43
+ 0x5C580400, // 0132 MOVE R22 R2
+ 0x5C5C0600, // 0133 MOVE R23 R3
+ 0x7C301600, // 0134 CALL R12 11
+ 0x58340015, // 0135 LDCONST R13 K21
+ 0x7C280600, // 0136 CALL R10 3
+ 0x88280109, // 0137 GETMBR R10 R0 K9
+ 0x8C281522, // 0138 GETMET R10 R10 K34
+ 0x5C300C00, // 0139 MOVE R12 R6
+ 0x7C280400, // 013A CALL R10 2
+ 0x88280D3E, // 013B GETMBR R10 R6 K62
+ 0x1C2C1513, // 013C EQ R11 R10 K19
+ 0x782E0018, // 013D JMPF R11 #0157
+ 0xB82E0A00, // 013E GETNGBL R11 K5
+ 0x8C2C1706, // 013F GETMET R11 R11 K6
+ 0xB8360200, // 0140 GETNGBL R13 K1
+ 0x8C341B08, // 0141 GETMET R13 R13 K8
+ 0x5C3C0C00, // 0142 MOVE R15 R6
+ 0x7C340400, // 0143 CALL R13 2
+ 0x0036840D, // 0144 ADD R13 K66 R13
+ 0x58380015, // 0145 LDCONST R14 K21
+ 0x7C2C0600, // 0146 CALL R11 3
+ 0x882C0D23, // 0147 GETMBR R11 R6 K35
+ 0x5432000F, // 0148 LDINT R12 16
+ 0x1C2C160C, // 0149 EQ R11 R11 R12
+ 0x782E0009, // 014A JMPF R11 #0155
+ 0x882C0143, // 014B GETMBR R11 R0 K67
+ 0x8C2C1744, // 014C GETMET R11 R11 K68
+ 0x5C340C00, // 014D MOVE R13 R6
+ 0x7C2C0400, // 014E CALL R11 2
+ 0x5C141600, // 014F MOVE R5 R11
+ 0x78160003, // 0150 JMPF R5 #0155
+ 0x882C0143, // 0151 GETMBR R11 R0 K67
+ 0x8C2C1745, // 0152 GETMET R11 R11 K69
+ 0x5C340000, // 0153 MOVE R13 R0
+ 0x7C2C0400, // 0154 CALL R11 2
+ 0x50140200, // 0155 LDBOOL R5 1 0
+ 0x7002001A, // 0156 JMP #0172
+ 0x1C2C153A, // 0157 EQ R11 R10 K58
+ 0x782E0010, // 0158 JMPF R11 #016A
+ 0x882C0143, // 0159 GETMBR R11 R0 K67
+ 0x8C2C172E, // 015A GETMET R11 R11 K46
+ 0x5C340C00, // 015B MOVE R13 R6
+ 0x7C2C0400, // 015C CALL R11 2
+ 0x5C141600, // 015D MOVE R5 R11
+ 0x78160004, // 015E JMPF R5 #0164
+ 0x882C0143, // 015F GETMBR R11 R0 K67
+ 0x8C2C1745, // 0160 GETMET R11 R11 K69
+ 0x5C340000, // 0161 MOVE R13 R0
+ 0x7C2C0400, // 0162 CALL R11 2
+ 0x70020003, // 0163 JMP #0168
+ 0x8C2C0136, // 0164 GETMET R11 R0 K54
+ 0x5C340C00, // 0165 MOVE R13 R6
+ 0x50380200, // 0166 LDBOOL R14 1 0
+ 0x7C2C0600, // 0167 CALL R11 3
+ 0x50140200, // 0168 LDBOOL R5 1 0
+ 0x70020007, // 0169 JMP #0172
+ 0xB82E0A00, // 016A GETNGBL R11 K5
+ 0x8C2C1706, // 016B GETMET R11 R11 K6
+ 0x60340008, // 016C GETGBL R13 G8
+ 0x5C381400, // 016D MOVE R14 R10
+ 0x7C340200, // 016E CALL R13 1
+ 0x00368C0D, // 016F ADD R13 K70 R13
+ 0x58380015, // 0170 LDCONST R14 K21
+ 0x7C2C0600, // 0171 CALL R11 3
+ 0xA8040001, // 0172 EXBLK 1 1
+ 0x80040A00, // 0173 RET 1 R5
+ 0xA8040001, // 0174 EXBLK 1 1
+ 0x70020014, // 0175 JMP #018B
+ 0xAC180002, // 0176 CATCH R6 0 2
+ 0x70020011, // 0177 JMP #018A
+ 0xB8220A00, // 0178 GETNGBL R8 K5
+ 0x8C201106, // 0179 GETMET R8 R8 K6
+ 0x60280008, // 017A GETGBL R10 G8
+ 0x5C2C0C00, // 017B MOVE R11 R6
+ 0x7C280200, // 017C CALL R10 1
+ 0x002A8E0A, // 017D ADD R10 K71 R10
+ 0x00281548, // 017E ADD R10 R10 K72
+ 0x602C0008, // 017F GETGBL R11 G8
+ 0x5C300E00, // 0180 MOVE R12 R7
+ 0x7C2C0200, // 0181 CALL R11 1
+ 0x0028140B, // 0182 ADD R10 R10 R11
+ 0x7C200400, // 0183 CALL R8 2
+ 0xA4229200, // 0184 IMPORT R8 K73
+ 0x8C24114A, // 0185 GETMET R9 R8 K74
+ 0x7C240200, // 0186 CALL R9 1
+ 0x50240000, // 0187 LDBOOL R9 0 0
+ 0x80041200, // 0188 RET 1 R9
+ 0x70020000, // 0189 JMP #018B
+ 0xB0080000, // 018A RAISE 2 R0 R0
+ 0x80000000, // 018B RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: every_250ms
+********************************************************************/
+be_local_closure(Matter_MessageHandler_every_250ms, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(im),
+ /* K1 */ be_nested_str_weak(every_250ms),
+ }),
+ be_str_weak(every_250ms),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x80000000, // 0003 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_MessageHandler_init, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 8]) { /* constants */
+ /* K0 */ be_nested_str_weak(device),
+ /* K1 */ be_nested_str_weak(commissioning),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(Commisioning_Context),
+ /* K4 */ be_nested_str_weak(im),
+ /* K5 */ be_nested_str_weak(IM),
+ /* K6 */ be_nested_str_weak(control_message),
+ /* K7 */ be_nested_str_weak(Control_Message),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0xB80A0400, // 0001 GETNGBL R2 K2
+ 0x8C080503, // 0002 GETMET R2 R2 K3
+ 0x5C100000, // 0003 MOVE R4 R0
+ 0x7C080400, // 0004 CALL R2 2
+ 0x90020202, // 0005 SETMBR R0 K1 R2
+ 0xB80A0400, // 0006 GETNGBL R2 K2
+ 0x8C080505, // 0007 GETMET R2 R2 K5
+ 0x5C100200, // 0008 MOVE R4 R1
+ 0x7C080400, // 0009 CALL R2 2
+ 0x90020802, // 000A SETMBR R0 K4 R2
+ 0xB80A0400, // 000B GETNGBL R2 K2
+ 0x8C080507, // 000C GETMET R2 R2 K7
+ 0x5C100000, // 000D MOVE R4 R0
+ 0x7C080400, // 000E CALL R2 2
+ 0x90020C02, // 000F SETMBR R0 K6 R2
+ 0x80000000, // 0010 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified class: Matter_MessageHandler
********************************************************************/
be_local_class(Matter_MessageHandler,
4,
NULL,
- be_nested_map(9,
+ be_nested_map(11,
( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(im, 3), be_const_var(2) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_MessageHandler_init_closure) },
+ { be_const_key_weak(send_encrypted_ack, -1), be_const_closure(Matter_MessageHandler_send_encrypted_ack_closure) },
{ be_const_key_weak(every_second, -1), be_const_closure(Matter_MessageHandler_every_second_closure) },
+ { be_const_key_weak(every_250ms, -1), be_const_closure(Matter_MessageHandler_every_250ms_closure) },
+ { be_const_key_weak(device, -1), be_const_var(0) },
{ be_const_key_weak(msg_received, -1), be_const_closure(Matter_MessageHandler_msg_received_closure) },
- { be_const_key_weak(counter_rcv, -1), be_const_var(3) },
- { be_const_key_weak(commissioning, 0), be_const_var(1) },
- { be_const_key_weak(device, 5), be_const_var(0) },
- { be_const_key_weak(init, 8), be_const_closure(Matter_MessageHandler_init_closure) },
- { be_const_key_weak(send_response, 4), be_const_closure(Matter_MessageHandler_send_response_closure) },
- { be_const_key_weak(add_session, 2), be_const_closure(Matter_MessageHandler_add_session_closure) },
- { be_const_key_weak(im, -1), be_const_var(2) },
+ { be_const_key_weak(control_message, 4), be_const_var(3) },
+ { be_const_key_weak(commissioning, -1), be_const_var(1) },
+ { be_const_key_weak(send_simple_ack, 1), be_const_closure(Matter_MessageHandler_send_simple_ack_closure) },
+ { be_const_key_weak(send_response_frame, 0), be_const_closure(Matter_MessageHandler_send_response_frame_closure) },
})),
be_str_weak(Matter_MessageHandler)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Path.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Path.h
new file mode 100644
index 000000000..1916265ee
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Path.h
@@ -0,0 +1,149 @@
+/* Solidification of Matter_Path.h */
+/********************************************************************\
+* Generated code, don't edit *
+\********************************************************************/
+#include "be_constobj.h"
+
+extern const bclass be_class_Matter_Path;
+
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(Matter_Path_tostring, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[15]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(),
+ /* K2 */ be_nested_str_weak(endpoint),
+ /* K3 */ be_nested_str_weak(format),
+ /* K4 */ be_nested_str_weak(_X5B_X2502X_X5D),
+ /* K5 */ be_nested_str_weak(_X5B_X2A_X2A_X5D),
+ /* K6 */ be_nested_str_weak(cluster),
+ /* K7 */ be_nested_str_weak(_X2504X_X2F),
+ /* K8 */ be_nested_str_weak(_X2A_X2A_X2A_X2A_X2F),
+ /* K9 */ be_nested_str_weak(attribute),
+ /* K10 */ be_nested_str_weak(_X2504X),
+ /* K11 */ be_nested_str_weak(command),
+ /* K12 */ be_nested_str_weak(_X2A_X2A_X2A_X2A),
+ /* K13 */ be_nested_str_weak(Exception_X3E_X20),
+ /* K14 */ be_nested_str_weak(_X2C_X20),
+ }),
+ be_str_weak(tostring),
+ &be_const_str_solidified,
+ ( &(const binstruction[75]) { /* code */
+ 0xA802003A, // 0000 EXBLK 0 #003C
+ 0xA4060000, // 0001 IMPORT R1 K0
+ 0x58080001, // 0002 LDCONST R2 K1
+ 0x880C0102, // 0003 GETMBR R3 R0 K2
+ 0x4C100000, // 0004 LDNIL R4
+ 0x200C0604, // 0005 NE R3 R3 R4
+ 0x780E0004, // 0006 JMPF R3 #000C
+ 0x8C0C0303, // 0007 GETMET R3 R1 K3
+ 0x58140004, // 0008 LDCONST R5 K4
+ 0x88180102, // 0009 GETMBR R6 R0 K2
+ 0x7C0C0600, // 000A CALL R3 3
+ 0x70020000, // 000B JMP #000D
+ 0x580C0005, // 000C LDCONST R3 K5
+ 0x00080403, // 000D ADD R2 R2 R3
+ 0x880C0106, // 000E GETMBR R3 R0 K6
+ 0x4C100000, // 000F LDNIL R4
+ 0x200C0604, // 0010 NE R3 R3 R4
+ 0x780E0004, // 0011 JMPF R3 #0017
+ 0x8C0C0303, // 0012 GETMET R3 R1 K3
+ 0x58140007, // 0013 LDCONST R5 K7
+ 0x88180106, // 0014 GETMBR R6 R0 K6
+ 0x7C0C0600, // 0015 CALL R3 3
+ 0x70020000, // 0016 JMP #0018
+ 0x580C0008, // 0017 LDCONST R3 K8
+ 0x00080403, // 0018 ADD R2 R2 R3
+ 0x880C0109, // 0019 GETMBR R3 R0 K9
+ 0x4C100000, // 001A LDNIL R4
+ 0x200C0604, // 001B NE R3 R3 R4
+ 0x780E0004, // 001C JMPF R3 #0022
+ 0x8C0C0303, // 001D GETMET R3 R1 K3
+ 0x5814000A, // 001E LDCONST R5 K10
+ 0x88180109, // 001F GETMBR R6 R0 K9
+ 0x7C0C0600, // 0020 CALL R3 3
+ 0x70020000, // 0021 JMP #0023
+ 0x580C0001, // 0022 LDCONST R3 K1
+ 0x00080403, // 0023 ADD R2 R2 R3
+ 0x880C010B, // 0024 GETMBR R3 R0 K11
+ 0x4C100000, // 0025 LDNIL R4
+ 0x200C0604, // 0026 NE R3 R3 R4
+ 0x780E0004, // 0027 JMPF R3 #002D
+ 0x8C0C0303, // 0028 GETMET R3 R1 K3
+ 0x5814000A, // 0029 LDCONST R5 K10
+ 0x8818010B, // 002A GETMBR R6 R0 K11
+ 0x7C0C0600, // 002B CALL R3 3
+ 0x70020000, // 002C JMP #002E
+ 0x580C0001, // 002D LDCONST R3 K1
+ 0x00080403, // 002E ADD R2 R2 R3
+ 0x880C0109, // 002F GETMBR R3 R0 K9
+ 0x4C100000, // 0030 LDNIL R4
+ 0x1C0C0604, // 0031 EQ R3 R3 R4
+ 0x780E0004, // 0032 JMPF R3 #0038
+ 0x880C010B, // 0033 GETMBR R3 R0 K11
+ 0x4C100000, // 0034 LDNIL R4
+ 0x1C0C0604, // 0035 EQ R3 R3 R4
+ 0x780E0000, // 0036 JMPF R3 #0038
+ 0x0008050C, // 0037 ADD R2 R2 K12
+ 0xA8040001, // 0038 EXBLK 1 1
+ 0x80040400, // 0039 RET 1 R2
+ 0xA8040001, // 003A EXBLK 1 1
+ 0x7002000D, // 003B JMP #004A
+ 0xAC040002, // 003C CATCH R1 0 2
+ 0x7002000A, // 003D JMP #0049
+ 0x600C0008, // 003E GETGBL R3 G8
+ 0x5C100200, // 003F MOVE R4 R1
+ 0x7C0C0200, // 0040 CALL R3 1
+ 0x000E1A03, // 0041 ADD R3 K13 R3
+ 0x000C070E, // 0042 ADD R3 R3 K14
+ 0x60100008, // 0043 GETGBL R4 G8
+ 0x5C140400, // 0044 MOVE R5 R2
+ 0x7C100200, // 0045 CALL R4 1
+ 0x000C0604, // 0046 ADD R3 R3 R4
+ 0x80040600, // 0047 RET 1 R3
+ 0x70020000, // 0048 JMP #004A
+ 0xB0080000, // 0049 RAISE 2 R0 R0
+ 0x80000000, // 004A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_Path
+********************************************************************/
+be_local_class(Matter_Path,
+ 6,
+ NULL,
+ be_nested_map(7,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(log, 4), be_const_var(5) },
+ { be_const_key_weak(command, 2), be_const_var(3) },
+ { be_const_key_weak(status, -1), be_const_var(4) },
+ { be_const_key_weak(tostring, -1), be_const_closure(Matter_Path_tostring_closure) },
+ { be_const_key_weak(cluster, 5), be_const_var(1) },
+ { be_const_key_weak(endpoint, -1), be_const_var(0) },
+ { be_const_key_weak(attribute, -1), be_const_var(2) },
+ })),
+ be_str_weak(Matter_Path)
+);
+/*******************************************************************/
+
+void be_load_Matter_Path_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_Path);
+ be_setglobal(vm, "Matter_Path");
+ be_pop(vm, 1);
+}
+/********************************************************************/
+/* End of solidification */
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin.h
index 8091439a8..dac3fc7df 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin.h
@@ -7,58 +7,134 @@
extern const bclass be_class_Matter_Plugin;
/********************************************************************
-** Solidified function: read_event
+** Solidified function: read_attribute
********************************************************************/
-be_local_closure(Matter_Plugin_read_event, /* name */
+be_local_closure(Matter_Plugin_read_attribute, /* name */
be_nested_proto(
- 6, /* nstack */
- 5, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 0, /* has constants */
- NULL, /* no const */
- be_str_weak(read_event),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x4C140000, // 0000 LDNIL R5
- 0x80040A00, // 0001 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(Matter_Plugin_init, /* name */
- be_nested_proto(
- 3, /* nstack */
- 2, /* argc */
+ 15, /* nstack */
+ 3, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(device),
- /* K1 */ be_nested_str_weak(endpoints),
- /* K2 */ be_nested_str_weak(EMPTY_LIST),
- /* K3 */ be_nested_str_weak(clusters),
+ ( &(const bvalue[18]) { /* constants */
+ /* K0 */ be_nested_str_weak(matter),
+ /* K1 */ be_nested_str_weak(TLV),
+ /* K2 */ be_nested_str_weak(cluster),
+ /* K3 */ be_nested_str_weak(attribute),
+ /* K4 */ be_const_int(0),
+ /* K5 */ be_nested_str_weak(Matter_TLV_array),
+ /* K6 */ be_nested_str_weak(TYPES),
+ /* K7 */ be_nested_str_weak(keys),
+ /* K8 */ be_nested_str_weak(add_struct),
+ /* K9 */ be_nested_str_weak(add_TLV),
+ /* K10 */ be_nested_str_weak(U2),
+ /* K11 */ be_const_int(1),
+ /* K12 */ be_nested_str_weak(stop_iteration),
+ /* K13 */ be_nested_str_weak(get_cluster_list),
+ /* K14 */ be_nested_str_weak(U4),
+ /* K15 */ be_const_int(2),
+ /* K16 */ be_const_int(3),
+ /* K17 */ be_nested_str_weak(create_TLV),
}),
- be_str_weak(init),
+ be_str_weak(read_attribute),
&be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x88080102, // 0001 GETMBR R2 R0 K2
- 0x90020202, // 0002 SETMBR R0 K1 R2
- 0x88080102, // 0003 GETMBR R2 R0 K2
- 0x90020602, // 0004 SETMBR R0 K3 R2
- 0x80000000, // 0005 RET 0
+ ( &(const binstruction[93]) { /* code */
+ 0xB80E0000, // 0000 GETNGBL R3 K0
+ 0x880C0701, // 0001 GETMBR R3 R3 K1
+ 0x88100502, // 0002 GETMBR R4 R2 K2
+ 0x88140503, // 0003 GETMBR R5 R2 K3
+ 0x541A001C, // 0004 LDINT R6 29
+ 0x1C180806, // 0005 EQ R6 R4 R6
+ 0x781A0052, // 0006 JMPF R6 #005A
+ 0x1C180B04, // 0007 EQ R6 R5 K4
+ 0x781A001C, // 0008 JMPF R6 #0026
+ 0x8C180705, // 0009 GETMET R6 R3 K5
+ 0x7C180200, // 000A CALL R6 1
+ 0x601C0010, // 000B GETGBL R7 G16
+ 0x88200106, // 000C GETMBR R8 R0 K6
+ 0x8C201107, // 000D GETMET R8 R8 K7
+ 0x7C200200, // 000E CALL R8 1
+ 0x7C1C0200, // 000F CALL R7 1
+ 0xA802000F, // 0010 EXBLK 0 #0021
+ 0x5C200E00, // 0011 MOVE R8 R7
+ 0x7C200000, // 0012 CALL R8 0
+ 0x8C240D08, // 0013 GETMET R9 R6 K8
+ 0x7C240200, // 0014 CALL R9 1
+ 0x8C281309, // 0015 GETMET R10 R9 K9
+ 0x58300004, // 0016 LDCONST R12 K4
+ 0x8834070A, // 0017 GETMBR R13 R3 K10
+ 0x5C381000, // 0018 MOVE R14 R8
+ 0x7C280800, // 0019 CALL R10 4
+ 0x8C281309, // 001A GETMET R10 R9 K9
+ 0x5830000B, // 001B LDCONST R12 K11
+ 0x8834070A, // 001C GETMBR R13 R3 K10
+ 0x88380106, // 001D GETMBR R14 R0 K6
+ 0x94381C08, // 001E GETIDX R14 R14 R8
+ 0x7C280800, // 001F CALL R10 4
+ 0x7001FFEF, // 0020 JMP #0011
+ 0x581C000C, // 0021 LDCONST R7 K12
+ 0xAC1C0200, // 0022 CATCH R7 1 0
+ 0xB0080000, // 0023 RAISE 2 R0 R0
+ 0x80040C00, // 0024 RET 1 R6
+ 0x70020032, // 0025 JMP #0059
+ 0x1C180B0B, // 0026 EQ R6 R5 K11
+ 0x781A0013, // 0027 JMPF R6 #003C
+ 0x8C180705, // 0028 GETMET R6 R3 K5
+ 0x7C180200, // 0029 CALL R6 1
+ 0x601C0010, // 002A GETGBL R7 G16
+ 0x8C20010D, // 002B GETMET R8 R0 K13
+ 0x7C200200, // 002C CALL R8 1
+ 0x7C1C0200, // 002D CALL R7 1
+ 0xA8020007, // 002E EXBLK 0 #0037
+ 0x5C200E00, // 002F MOVE R8 R7
+ 0x7C200000, // 0030 CALL R8 0
+ 0x8C240D09, // 0031 GETMET R9 R6 K9
+ 0x4C2C0000, // 0032 LDNIL R11
+ 0x8830070E, // 0033 GETMBR R12 R3 K14
+ 0x5C341000, // 0034 MOVE R13 R8
+ 0x7C240800, // 0035 CALL R9 4
+ 0x7001FFF7, // 0036 JMP #002F
+ 0x581C000C, // 0037 LDCONST R7 K12
+ 0xAC1C0200, // 0038 CATCH R7 1 0
+ 0xB0080000, // 0039 RAISE 2 R0 R0
+ 0x80040C00, // 003A RET 1 R6
+ 0x7002001C, // 003B JMP #0059
+ 0x1C180B0F, // 003C EQ R6 R5 K15
+ 0x781A0003, // 003D JMPF R6 #0042
+ 0x8C180705, // 003E GETMET R6 R3 K5
+ 0x7C180200, // 003F CALL R6 1
+ 0x80040C00, // 0040 RET 1 R6
+ 0x70020016, // 0041 JMP #0059
+ 0x1C180B10, // 0042 EQ R6 R5 K16
+ 0x781A0003, // 0043 JMPF R6 #0048
+ 0x8C180705, // 0044 GETMET R6 R3 K5
+ 0x7C180200, // 0045 CALL R6 1
+ 0x80040C00, // 0046 RET 1 R6
+ 0x70020010, // 0047 JMP #0059
+ 0x541AFFFB, // 0048 LDINT R6 65532
+ 0x1C180A06, // 0049 EQ R6 R5 R6
+ 0x781A0005, // 004A JMPF R6 #0051
+ 0x8C180711, // 004B GETMET R6 R3 K17
+ 0x8820070E, // 004C GETMBR R8 R3 K14
+ 0x58240004, // 004D LDCONST R9 K4
+ 0x7C180600, // 004E CALL R6 3
+ 0x80040C00, // 004F RET 1 R6
+ 0x70020007, // 0050 JMP #0059
+ 0x541AFFFC, // 0051 LDINT R6 65533
+ 0x1C180A06, // 0052 EQ R6 R5 R6
+ 0x781A0004, // 0053 JMPF R6 #0059
+ 0x8C180711, // 0054 GETMET R6 R3 K17
+ 0x8820070E, // 0055 GETMBR R8 R3 K14
+ 0x5824000B, // 0056 LDCONST R9 K11
+ 0x7C180600, // 0057 CALL R6 3
+ 0x80040C00, // 0058 RET 1 R6
+ 0x70020001, // 0059 JMP #005C
+ 0x4C180000, // 005A LDNIL R6
+ 0x80040C00, // 005B RET 1 R6
+ 0x80000000, // 005C RET 0
})
)
);
@@ -108,6 +184,347 @@ be_local_closure(Matter_Plugin_has, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: consolidate_clusters
+********************************************************************/
+be_local_closure(Matter_Plugin_consolidate_clusters, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 1]) {
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 0, /* has constants */
+ NULL, /* no const */
+ be_str_weak(real_super),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x60040003, // 0000 GETGBL R1 G3
+ 0x5C080000, // 0001 MOVE R2 R0
+ 0x7C040200, // 0002 CALL R1 1
+ 0x80040200, // 0003 RET 1 R1
+ })
+ ),
+ }),
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(CLUSTERS),
+ /* K1 */ be_nested_str_weak(keys),
+ /* K2 */ be_nested_str_weak(contains),
+ /* K3 */ be_nested_str_weak(find),
+ /* K4 */ be_nested_str_weak(push),
+ /* K5 */ be_nested_str_weak(stop_iteration),
+ }),
+ be_str_weak(consolidate_clusters),
+ &be_const_str_solidified,
+ ( &(const binstruction[53]) { /* code */
+ 0x84040000, // 0000 CLOSURE R1 P0
+ 0x60080013, // 0001 GETGBL R2 G19
+ 0x7C080000, // 0002 CALL R2 0
+ 0x5C0C0000, // 0003 MOVE R3 R0
+ 0x4C100000, // 0004 LDNIL R4
+ 0x20100604, // 0005 NE R4 R3 R4
+ 0x7812002C, // 0006 JMPF R4 #0034
+ 0x88100700, // 0007 GETMBR R4 R3 K0
+ 0x60140010, // 0008 GETGBL R5 G16
+ 0x8C180901, // 0009 GETMET R6 R4 K1
+ 0x7C180200, // 000A CALL R6 1
+ 0x7C140200, // 000B CALL R5 1
+ 0xA802001E, // 000C EXBLK 0 #002C
+ 0x5C180A00, // 000D MOVE R6 R5
+ 0x7C180000, // 000E CALL R6 0
+ 0x8C1C0502, // 000F GETMET R7 R2 K2
+ 0x5C240C00, // 0010 MOVE R9 R6
+ 0x7C1C0400, // 0011 CALL R7 2
+ 0x741E0002, // 0012 JMPT R7 #0016
+ 0x601C0012, // 0013 GETGBL R7 G18
+ 0x7C1C0000, // 0014 CALL R7 0
+ 0x98080C07, // 0015 SETIDX R2 R6 R7
+ 0x601C0010, // 0016 GETGBL R7 G16
+ 0x94200806, // 0017 GETIDX R8 R4 R6
+ 0x7C1C0200, // 0018 CALL R7 1
+ 0xA802000D, // 0019 EXBLK 0 #0028
+ 0x5C200E00, // 001A MOVE R8 R7
+ 0x7C200000, // 001B CALL R8 0
+ 0x94240406, // 001C GETIDX R9 R2 R6
+ 0x8C241303, // 001D GETMET R9 R9 K3
+ 0x5C2C1000, // 001E MOVE R11 R8
+ 0x7C240400, // 001F CALL R9 2
+ 0x4C280000, // 0020 LDNIL R10
+ 0x1C24120A, // 0021 EQ R9 R9 R10
+ 0x78260003, // 0022 JMPF R9 #0027
+ 0x94240406, // 0023 GETIDX R9 R2 R6
+ 0x8C241304, // 0024 GETMET R9 R9 K4
+ 0x5C2C1000, // 0025 MOVE R11 R8
+ 0x7C240400, // 0026 CALL R9 2
+ 0x7001FFF1, // 0027 JMP #001A
+ 0x581C0005, // 0028 LDCONST R7 K5
+ 0xAC1C0200, // 0029 CATCH R7 1 0
+ 0xB0080000, // 002A RAISE 2 R0 R0
+ 0x7001FFE0, // 002B JMP #000D
+ 0x58140005, // 002C LDCONST R5 K5
+ 0xAC140200, // 002D CATCH R5 1 0
+ 0xB0080000, // 002E RAISE 2 R0 R0
+ 0x5C140200, // 002F MOVE R5 R1
+ 0x5C180600, // 0030 MOVE R6 R3
+ 0x7C140200, // 0031 CALL R5 1
+ 0x5C0C0A00, // 0032 MOVE R3 R5
+ 0x7001FFCF, // 0033 JMP #0004
+ 0x80040400, // 0034 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: every_second
+********************************************************************/
+be_local_closure(Matter_Plugin_every_second, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(update_shadow),
+ }),
+ be_str_weak(every_second),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x8C040100, // 0000 GETMET R1 R0 K0
+ 0x7C040200, // 0001 CALL R1 1
+ 0x80000000, // 0002 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: subscribe_attribute
+********************************************************************/
+be_local_closure(Matter_Plugin_subscribe_attribute, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 5, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 0, /* has constants */
+ NULL, /* no const */
+ be_str_weak(subscribe_attribute),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x4C140000, // 0000 LDNIL R5
+ 0x80040A00, // 0001 RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: subscribe_event
+********************************************************************/
+be_local_closure(Matter_Plugin_subscribe_event, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 5, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 0, /* has constants */
+ NULL, /* no const */
+ be_str_weak(subscribe_event),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x4C140000, // 0000 LDNIL R5
+ 0x80040A00, // 0001 RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: update_shadow
+********************************************************************/
+be_local_closure(Matter_Plugin_update_shadow, /* name */
+ be_nested_proto(
+ 1, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 0, /* has constants */
+ NULL, /* no const */
+ be_str_weak(update_shadow),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 1]) { /* code */
+ 0x80000000, // 0000 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: read_event
+********************************************************************/
+be_local_closure(Matter_Plugin_read_event, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 5, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 0, /* has constants */
+ NULL, /* no const */
+ be_str_weak(read_event),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x4C140000, // 0000 LDNIL R5
+ 0x80040A00, // 0001 RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_endpoint
+********************************************************************/
+be_local_closure(Matter_Plugin_get_endpoint, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(endpoint),
+ }),
+ be_str_weak(get_endpoint),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: write_attribute
+********************************************************************/
+be_local_closure(Matter_Plugin_write_attribute, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 0, /* has constants */
+ NULL, /* no const */
+ be_str_weak(write_attribute),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x4C100000, // 0000 LDNIL R4
+ 0x80040800, // 0001 RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_Plugin_init, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(device),
+ /* K1 */ be_nested_str_weak(endpoint),
+ /* K2 */ be_nested_str_weak(clusters),
+ /* K3 */ be_nested_str_weak(consolidate_clusters),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x90020202, // 0001 SETMBR R0 K1 R2
+ 0x8C0C0103, // 0002 GETMET R3 R0 K3
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x90020403, // 0004 SETMBR R0 K2 R3
+ 0x80000000, // 0005 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: timed_request
+********************************************************************/
+be_local_closure(Matter_Plugin_timed_request, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 0, /* has constants */
+ NULL, /* no const */
+ be_str_weak(timed_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x4C100000, // 0000 LDNIL R4
+ 0x80040800, // 0001 RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: get_attribute_list
********************************************************************/
@@ -121,20 +538,20 @@ be_local_closure(Matter_Plugin_get_attribute_list, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
+ ( &(const bvalue[ 2]) { /* constants */
/* K0 */ be_nested_str_weak(clusters),
/* K1 */ be_nested_str_weak(find),
- /* K2 */ be_nested_str_weak(EMPTY_LIST),
}),
be_str_weak(get_attribute_list),
&be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
+ ( &(const binstruction[ 7]) { /* code */
0x880C0100, // 0000 GETMBR R3 R0 K0
0x8C0C0701, // 0001 GETMET R3 R3 K1
0x5C140400, // 0002 MOVE R5 R2
- 0x88180102, // 0003 GETMBR R6 R0 K2
- 0x7C0C0600, // 0004 CALL R3 3
- 0x80040600, // 0005 RET 1 R3
+ 0x60180012, // 0003 GETGBL R6 G18
+ 0x7C180000, // 0004 CALL R6 0
+ 0x7C0C0600, // 0005 CALL R3 3
+ 0x80040600, // 0006 RET 1 R3
})
)
);
@@ -187,6 +604,30 @@ be_local_closure(Matter_Plugin_get_cluster_list, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: parse_sensors
+********************************************************************/
+be_local_closure(Matter_Plugin_parse_sensors, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 0, /* has constants */
+ NULL, /* no const */
+ be_str_weak(parse_sensors),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 1]) { /* code */
+ 0x80000000, // 0000 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: invoke_request
********************************************************************/
@@ -213,178 +654,38 @@ be_local_closure(Matter_Plugin_invoke_request, /* name */
/********************************************************************
-** Solidified function: read_attribute
+** Solidified function: attribute_updated
********************************************************************/
-be_local_closure(Matter_Plugin_read_attribute, /* name */
+be_local_closure(Matter_Plugin_attribute_updated, /* name */
be_nested_proto(
- 4, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 0, /* has constants */
- NULL, /* no const */
- be_str_weak(read_attribute),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x4C0C0000, // 0000 LDNIL R3
- 0x80040600, // 0001 RET 1 R3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: subscribe_event
-********************************************************************/
-be_local_closure(Matter_Plugin_subscribe_event, /* name */
- be_nested_proto(
- 6, /* nstack */
+ 11, /* nstack */
5, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
- 0, /* has constants */
- NULL, /* no const */
- be_str_weak(subscribe_event),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x4C140000, // 0000 LDNIL R5
- 0x80040A00, // 0001 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_cluster_map
-********************************************************************/
-be_local_closure(Matter_Plugin_get_cluster_map, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(clusters),
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(endpoint),
+ /* K1 */ be_nested_str_weak(device),
+ /* K2 */ be_nested_str_weak(attribute_updated),
}),
- be_str_weak(get_cluster_map),
+ be_str_weak(attribute_updated),
&be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x80040200, // 0001 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_endpoints
-********************************************************************/
-be_local_closure(Matter_Plugin_get_endpoints, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(endpoints),
- }),
- be_str_weak(get_endpoints),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x80040200, // 0001 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: write_attribute
-********************************************************************/
-be_local_closure(Matter_Plugin_write_attribute, /* name */
- be_nested_proto(
- 6, /* nstack */
- 5, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 0, /* has constants */
- NULL, /* no const */
- be_str_weak(write_attribute),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
+ ( &(const binstruction[12]) { /* code */
0x4C140000, // 0000 LDNIL R5
- 0x80040A00, // 0001 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: timed_request
-********************************************************************/
-be_local_closure(Matter_Plugin_timed_request, /* name */
- be_nested_proto(
- 5, /* nstack */
- 4, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 0, /* has constants */
- NULL, /* no const */
- be_str_weak(timed_request),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x4C100000, // 0000 LDNIL R4
- 0x80040800, // 0001 RET 1 R4
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: subscribe_attribute
-********************************************************************/
-be_local_closure(Matter_Plugin_subscribe_attribute, /* name */
- be_nested_proto(
- 6, /* nstack */
- 5, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 0, /* has constants */
- NULL, /* no const */
- be_str_weak(subscribe_attribute),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x4C140000, // 0000 LDNIL R5
- 0x80040A00, // 0001 RET 1 R5
+ 0x1C140205, // 0001 EQ R5 R1 R5
+ 0x78160000, // 0002 JMPF R5 #0004
+ 0x88040100, // 0003 GETMBR R1 R0 K0
+ 0x88140101, // 0004 GETMBR R5 R0 K1
+ 0x8C140B02, // 0005 GETMET R5 R5 K2
+ 0x5C1C0200, // 0006 MOVE R7 R1
+ 0x5C200400, // 0007 MOVE R8 R2
+ 0x5C240600, // 0008 MOVE R9 R3
+ 0x5C280800, // 0009 MOVE R10 R4
+ 0x7C140A00, // 000A CALL R5 5
+ 0x80000000, // 000B RET 0
})
)
);
@@ -397,32 +698,42 @@ be_local_closure(Matter_Plugin_subscribe_attribute, /* name */
be_local_class(Matter_Plugin,
3,
NULL,
- be_nested_map(18,
+ be_nested_map(21,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(read_event, -1), be_const_closure(Matter_Plugin_read_event_closure) },
- { be_const_key_weak(get_cluster_list, -1), be_const_closure(Matter_Plugin_get_cluster_list_closure) },
- { be_const_key_weak(endpoints, 1), be_const_var(1) },
- { be_const_key_weak(get_attribute_list, 9), be_const_closure(Matter_Plugin_get_attribute_list_closure) },
- { be_const_key_weak(device, -1), be_const_var(0) },
- { be_const_key_weak(invoke_request, -1), be_const_closure(Matter_Plugin_invoke_request_closure) },
{ be_const_key_weak(read_attribute, -1), be_const_closure(Matter_Plugin_read_attribute_closure) },
- { be_const_key_weak(has, 13), be_const_closure(Matter_Plugin_has_closure) },
+ { be_const_key_weak(attribute_updated, 18), be_const_closure(Matter_Plugin_attribute_updated_closure) },
+ { be_const_key_weak(consolidate_clusters, -1), be_const_closure(Matter_Plugin_consolidate_clusters_closure) },
+ { be_const_key_weak(every_second, -1), be_const_closure(Matter_Plugin_every_second_closure) },
+ { be_const_key_weak(subscribe_attribute, 1), be_const_closure(Matter_Plugin_subscribe_attribute_closure) },
{ be_const_key_weak(subscribe_event, -1), be_const_closure(Matter_Plugin_subscribe_event_closure) },
- { be_const_key_weak(get_cluster_map, -1), be_const_closure(Matter_Plugin_get_cluster_map_closure) },
- { be_const_key_weak(clusters, -1), be_const_var(2) },
- { be_const_key_weak(EMPTY_MAP, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(0,
+ { be_const_key_weak(device, -1), be_const_var(0) },
+ { be_const_key_weak(update_shadow, 17), be_const_closure(Matter_Plugin_update_shadow_closure) },
+ { be_const_key_weak(get_endpoint, -1), be_const_closure(Matter_Plugin_get_endpoint_closure) },
+ { be_const_key_weak(invoke_request, -1), be_const_closure(Matter_Plugin_invoke_request_closure) },
+ { be_const_key_weak(has, 8), be_const_closure(Matter_Plugin_has_closure) },
+ { be_const_key_weak(parse_sensors, 13), be_const_closure(Matter_Plugin_parse_sensors_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_Plugin_init_closure) },
+ { be_const_key_weak(get_attribute_list, -1), be_const_closure(Matter_Plugin_get_attribute_list_closure) },
+ { be_const_key_weak(timed_request, 9), be_const_closure(Matter_Plugin_timed_request_closure) },
+ { be_const_key_weak(read_event, 11), be_const_closure(Matter_Plugin_read_event_closure) },
+ { be_const_key_weak(get_cluster_list, -1), be_const_closure(Matter_Plugin_get_cluster_list_closure) },
+ { be_const_key_weak(CLUSTERS, 20), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(1,
( (struct bmapnode*) &(const bmapnode[]) {
- })) ) } )) },
- { be_const_key_weak(get_endpoints, -1), be_const_closure(Matter_Plugin_get_endpoints_closure) },
- { be_const_key_weak(write_attribute, 2), be_const_closure(Matter_Plugin_write_attribute_closure) },
- { be_const_key_weak(timed_request, -1), be_const_closure(Matter_Plugin_timed_request_closure) },
- { be_const_key_weak(init, 4), be_const_closure(Matter_Plugin_init_closure) },
- { be_const_key_weak(subscribe_attribute, -1), be_const_closure(Matter_Plugin_subscribe_attribute_closure) },
- { be_const_key_weak(EMPTY_LIST, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(0,
+ { be_const_key_int(29, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(6,
( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ be_const_int(2),
+ be_const_int(3),
+ be_const_int(65532),
+ be_const_int(65533),
})) ) } )) },
+ })) ) } )) },
+ { be_const_key_weak(write_attribute, -1), be_const_closure(Matter_Plugin_write_attribute_closure) },
+ { be_const_key_weak(clusters, -1), be_const_var(2) },
+ { be_const_key_weak(endpoint, -1), be_const_var(1) },
})),
be_str_weak(Matter_Plugin)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Device.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Device.h
new file mode 100644
index 000000000..b50a887fe
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Device.h
@@ -0,0 +1,282 @@
+/* Solidification of Matter_Plugin_Device.h */
+/********************************************************************\
+* Generated code, don't edit *
+\********************************************************************/
+#include "be_constobj.h"
+
+extern const bclass be_class_Matter_Plugin_Device;
+
+/********************************************************************
+** Solidified function: invoke_request
+********************************************************************/
+be_local_closure(Matter_Plugin_Device_invoke_request, /* name */
+ be_nested_proto(
+ 13, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[11]) { /* constants */
+ /* K0 */ be_nested_str_weak(matter),
+ /* K1 */ be_nested_str_weak(TLV),
+ /* K2 */ be_nested_str_weak(cluster),
+ /* K3 */ be_nested_str_weak(command),
+ /* K4 */ be_const_int(3),
+ /* K5 */ be_const_int(0),
+ /* K6 */ be_const_int(1),
+ /* K7 */ be_nested_str_weak(Matter_TLV_struct),
+ /* K8 */ be_nested_str_weak(add_TLV),
+ /* K9 */ be_nested_str_weak(U2),
+ /* K10 */ be_nested_str_weak(invoke_request),
+ }),
+ be_str_weak(invoke_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[45]) { /* code */
+ 0xB8120000, // 0000 GETNGBL R4 K0
+ 0x88100901, // 0001 GETMBR R4 R4 K1
+ 0x88140702, // 0002 GETMBR R5 R3 K2
+ 0x88180703, // 0003 GETMBR R6 R3 K3
+ 0x1C1C0B04, // 0004 EQ R7 R5 K4
+ 0x781E0016, // 0005 JMPF R7 #001D
+ 0x1C1C0D05, // 0006 EQ R7 R6 K5
+ 0x781E0002, // 0007 JMPF R7 #000B
+ 0x501C0200, // 0008 LDBOOL R7 1 0
+ 0x80040E00, // 0009 RET 1 R7
+ 0x70020010, // 000A JMP #001C
+ 0x1C1C0D06, // 000B EQ R7 R6 K6
+ 0x781E0009, // 000C JMPF R7 #0017
+ 0x8C1C0907, // 000D GETMET R7 R4 K7
+ 0x7C1C0200, // 000E CALL R7 1
+ 0x8C200F08, // 000F GETMET R8 R7 K8
+ 0x58280005, // 0010 LDCONST R10 K5
+ 0x882C0909, // 0011 GETMBR R11 R4 K9
+ 0x58300005, // 0012 LDCONST R12 K5
+ 0x7C200800, // 0013 CALL R8 4
+ 0x900E0705, // 0014 SETMBR R3 K3 K5
+ 0x80040E00, // 0015 RET 1 R7
+ 0x70020004, // 0016 JMP #001C
+ 0x541E003F, // 0017 LDINT R7 64
+ 0x1C1C0C07, // 0018 EQ R7 R6 R7
+ 0x781E0001, // 0019 JMPF R7 #001C
+ 0x501C0200, // 001A LDBOOL R7 1 0
+ 0x80040E00, // 001B RET 1 R7
+ 0x7002000E, // 001C JMP #002C
+ 0x541E0003, // 001D LDINT R7 4
+ 0x1C1C0A07, // 001E EQ R7 R5 R7
+ 0x781E0002, // 001F JMPF R7 #0023
+ 0x501C0200, // 0020 LDBOOL R7 1 0
+ 0x80040E00, // 0021 RET 1 R7
+ 0x70020008, // 0022 JMP #002C
+ 0x601C0003, // 0023 GETGBL R7 G3
+ 0x5C200000, // 0024 MOVE R8 R0
+ 0x7C1C0200, // 0025 CALL R7 1
+ 0x8C1C0F0A, // 0026 GETMET R7 R7 K10
+ 0x5C240200, // 0027 MOVE R9 R1
+ 0x5C280400, // 0028 MOVE R10 R2
+ 0x5C2C0600, // 0029 MOVE R11 R3
+ 0x7C1C0800, // 002A CALL R7 4
+ 0x80040E00, // 002B RET 1 R7
+ 0x80000000, // 002C RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: read_attribute
+********************************************************************/
+be_local_closure(Matter_Plugin_Device_read_attribute, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[13]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(TLV),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(attribute),
+ /* K5 */ be_const_int(3),
+ /* K6 */ be_const_int(0),
+ /* K7 */ be_nested_str_weak(create_TLV),
+ /* K8 */ be_nested_str_weak(U2),
+ /* K9 */ be_const_int(1),
+ /* K10 */ be_nested_str_weak(U1),
+ /* K11 */ be_nested_str_weak(U4),
+ /* K12 */ be_nested_str_weak(read_attribute),
+ }),
+ be_str_weak(read_attribute),
+ &be_const_str_solidified,
+ ( &(const binstruction[76]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x88100902, // 0002 GETMBR R4 R4 K2
+ 0x88140503, // 0003 GETMBR R5 R2 K3
+ 0x88180504, // 0004 GETMBR R6 R2 K4
+ 0x1C1C0B05, // 0005 EQ R7 R5 K5
+ 0x781E0021, // 0006 JMPF R7 #0029
+ 0x1C1C0D06, // 0007 EQ R7 R6 K6
+ 0x781E0005, // 0008 JMPF R7 #000F
+ 0x8C1C0907, // 0009 GETMET R7 R4 K7
+ 0x88240908, // 000A GETMBR R9 R4 K8
+ 0x58280006, // 000B LDCONST R10 K6
+ 0x7C1C0600, // 000C CALL R7 3
+ 0x80040E00, // 000D RET 1 R7
+ 0x70020018, // 000E JMP #0028
+ 0x1C1C0D09, // 000F EQ R7 R6 K9
+ 0x781E0005, // 0010 JMPF R7 #0017
+ 0x8C1C0907, // 0011 GETMET R7 R4 K7
+ 0x8824090A, // 0012 GETMBR R9 R4 K10
+ 0x58280006, // 0013 LDCONST R10 K6
+ 0x7C1C0600, // 0014 CALL R7 3
+ 0x80040E00, // 0015 RET 1 R7
+ 0x70020010, // 0016 JMP #0028
+ 0x541EFFFB, // 0017 LDINT R7 65532
+ 0x1C1C0C07, // 0018 EQ R7 R6 R7
+ 0x781E0005, // 0019 JMPF R7 #0020
+ 0x8C1C0907, // 001A GETMET R7 R4 K7
+ 0x8824090B, // 001B GETMBR R9 R4 K11
+ 0x58280006, // 001C LDCONST R10 K6
+ 0x7C1C0600, // 001D CALL R7 3
+ 0x80040E00, // 001E RET 1 R7
+ 0x70020007, // 001F JMP #0028
+ 0x541EFFFC, // 0020 LDINT R7 65533
+ 0x1C1C0C07, // 0021 EQ R7 R6 R7
+ 0x781E0004, // 0022 JMPF R7 #0028
+ 0x8C1C0907, // 0023 GETMET R7 R4 K7
+ 0x8824090B, // 0024 GETMBR R9 R4 K11
+ 0x542A0003, // 0025 LDINT R10 4
+ 0x7C1C0600, // 0026 CALL R7 3
+ 0x80040E00, // 0027 RET 1 R7
+ 0x70020021, // 0028 JMP #004B
+ 0x541E0003, // 0029 LDINT R7 4
+ 0x1C1C0A07, // 002A EQ R7 R5 R7
+ 0x781E0016, // 002B JMPF R7 #0043
+ 0x1C1C0D06, // 002C EQ R7 R6 K6
+ 0x781E0002, // 002D JMPF R7 #0031
+ 0x4C1C0000, // 002E LDNIL R7
+ 0x80040E00, // 002F RET 1 R7
+ 0x70020010, // 0030 JMP #0042
+ 0x541EFFFB, // 0031 LDINT R7 65532
+ 0x1C1C0C07, // 0032 EQ R7 R6 R7
+ 0x781E0005, // 0033 JMPF R7 #003A
+ 0x8C1C0907, // 0034 GETMET R7 R4 K7
+ 0x8824090B, // 0035 GETMBR R9 R4 K11
+ 0x58280006, // 0036 LDCONST R10 K6
+ 0x7C1C0600, // 0037 CALL R7 3
+ 0x80040E00, // 0038 RET 1 R7
+ 0x70020007, // 0039 JMP #0042
+ 0x541EFFFC, // 003A LDINT R7 65533
+ 0x1C1C0C07, // 003B EQ R7 R6 R7
+ 0x781E0004, // 003C JMPF R7 #0042
+ 0x8C1C0907, // 003D GETMET R7 R4 K7
+ 0x8824090B, // 003E GETMBR R9 R4 K11
+ 0x542A0003, // 003F LDINT R10 4
+ 0x7C1C0600, // 0040 CALL R7 3
+ 0x80040E00, // 0041 RET 1 R7
+ 0x70020007, // 0042 JMP #004B
+ 0x601C0003, // 0043 GETGBL R7 G3
+ 0x5C200000, // 0044 MOVE R8 R0
+ 0x7C1C0200, // 0045 CALL R7 1
+ 0x8C1C0F0C, // 0046 GETMET R7 R7 K12
+ 0x5C240200, // 0047 MOVE R9 R1
+ 0x5C280400, // 0048 MOVE R10 R2
+ 0x7C1C0600, // 0049 CALL R7 3
+ 0x80040E00, // 004A RET 1 R7
+ 0x80000000, // 004B RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_Plugin_Device_init, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(init),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0x60100003, // 0000 GETGBL R4 G3
+ 0x5C140000, // 0001 MOVE R5 R0
+ 0x7C100200, // 0002 CALL R4 1
+ 0x8C100900, // 0003 GETMET R4 R4 K0
+ 0x5C180200, // 0004 MOVE R6 R1
+ 0x5C1C0400, // 0005 MOVE R7 R2
+ 0x7C100600, // 0006 CALL R4 3
+ 0x80000000, // 0007 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_Plugin_Device
+********************************************************************/
+extern const bclass be_class_Matter_Plugin;
+be_local_class(Matter_Plugin_Device,
+ 0,
+ &be_class_Matter_Plugin,
+ be_nested_map(5,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(TYPES, 3), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(1,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_int(0, -1), be_const_int(0) },
+ })) ) } )) },
+ { be_const_key_weak(read_attribute, -1), be_const_closure(Matter_Plugin_Device_read_attribute_closure) },
+ { be_const_key_weak(invoke_request, 1), be_const_closure(Matter_Plugin_Device_invoke_request_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_Plugin_Device_init_closure) },
+ { be_const_key_weak(CLUSTERS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(2,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_int(4, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(3,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(65532),
+ be_const_int(65533),
+ })) ) } )) },
+ { be_const_key_int(3, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(4,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ be_const_int(65532),
+ be_const_int(65533),
+ })) ) } )) },
+ })) ) } )) },
+ })),
+ be_str_weak(Matter_Plugin_Device)
+);
+/*******************************************************************/
+
+void be_load_Matter_Plugin_Device_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_Plugin_Device);
+ be_setglobal(vm, "Matter_Plugin_Device");
+ be_pop(vm, 1);
+}
+/********************************************************************/
+/* End of solidification */
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Light0.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Light0.h
new file mode 100644
index 000000000..40809e95f
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Light0.h
@@ -0,0 +1,453 @@
+/* Solidification of Matter_Plugin_Light0.h */
+/********************************************************************\
+* Generated code, don't edit *
+\********************************************************************/
+#include "be_constobj.h"
+
+extern const bclass be_class_Matter_Plugin_Light0;
+
+/********************************************************************
+** Solidified function: read_attribute
+********************************************************************/
+be_local_closure(Matter_Plugin_Light0_read_attribute, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[15]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(TLV),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(attribute),
+ /* K5 */ be_const_int(3),
+ /* K6 */ be_const_int(0),
+ /* K7 */ be_nested_str_weak(create_TLV),
+ /* K8 */ be_nested_str_weak(U2),
+ /* K9 */ be_const_int(1),
+ /* K10 */ be_nested_str_weak(U1),
+ /* K11 */ be_nested_str_weak(U4),
+ /* K12 */ be_nested_str_weak(BOOL),
+ /* K13 */ be_nested_str_weak(shadow_onoff),
+ /* K14 */ be_nested_str_weak(read_attribute),
+ }),
+ be_str_weak(read_attribute),
+ &be_const_str_solidified,
+ ( &(const binstruction[126]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x88100902, // 0002 GETMBR R4 R4 K2
+ 0x88140503, // 0003 GETMBR R5 R2 K3
+ 0x88180504, // 0004 GETMBR R6 R2 K4
+ 0x1C1C0B05, // 0005 EQ R7 R5 K5
+ 0x781E0021, // 0006 JMPF R7 #0029
+ 0x1C1C0D06, // 0007 EQ R7 R6 K6
+ 0x781E0005, // 0008 JMPF R7 #000F
+ 0x8C1C0907, // 0009 GETMET R7 R4 K7
+ 0x88240908, // 000A GETMBR R9 R4 K8
+ 0x58280006, // 000B LDCONST R10 K6
+ 0x7C1C0600, // 000C CALL R7 3
+ 0x80040E00, // 000D RET 1 R7
+ 0x70020018, // 000E JMP #0028
+ 0x1C1C0D09, // 000F EQ R7 R6 K9
+ 0x781E0005, // 0010 JMPF R7 #0017
+ 0x8C1C0907, // 0011 GETMET R7 R4 K7
+ 0x8824090A, // 0012 GETMBR R9 R4 K10
+ 0x58280006, // 0013 LDCONST R10 K6
+ 0x7C1C0600, // 0014 CALL R7 3
+ 0x80040E00, // 0015 RET 1 R7
+ 0x70020010, // 0016 JMP #0028
+ 0x541EFFFB, // 0017 LDINT R7 65532
+ 0x1C1C0C07, // 0018 EQ R7 R6 R7
+ 0x781E0005, // 0019 JMPF R7 #0020
+ 0x8C1C0907, // 001A GETMET R7 R4 K7
+ 0x8824090B, // 001B GETMBR R9 R4 K11
+ 0x58280006, // 001C LDCONST R10 K6
+ 0x7C1C0600, // 001D CALL R7 3
+ 0x80040E00, // 001E RET 1 R7
+ 0x70020007, // 001F JMP #0028
+ 0x541EFFFC, // 0020 LDINT R7 65533
+ 0x1C1C0C07, // 0021 EQ R7 R6 R7
+ 0x781E0004, // 0022 JMPF R7 #0028
+ 0x8C1C0907, // 0023 GETMET R7 R4 K7
+ 0x8824090B, // 0024 GETMBR R9 R4 K11
+ 0x542A0003, // 0025 LDINT R10 4
+ 0x7C1C0600, // 0026 CALL R7 3
+ 0x80040E00, // 0027 RET 1 R7
+ 0x70020053, // 0028 JMP #007D
+ 0x541E0003, // 0029 LDINT R7 4
+ 0x1C1C0A07, // 002A EQ R7 R5 R7
+ 0x781E0016, // 002B JMPF R7 #0043
+ 0x1C1C0D06, // 002C EQ R7 R6 K6
+ 0x781E0002, // 002D JMPF R7 #0031
+ 0x4C1C0000, // 002E LDNIL R7
+ 0x80040E00, // 002F RET 1 R7
+ 0x70020010, // 0030 JMP #0042
+ 0x541EFFFB, // 0031 LDINT R7 65532
+ 0x1C1C0C07, // 0032 EQ R7 R6 R7
+ 0x781E0005, // 0033 JMPF R7 #003A
+ 0x8C1C0907, // 0034 GETMET R7 R4 K7
+ 0x8824090B, // 0035 GETMBR R9 R4 K11
+ 0x58280006, // 0036 LDCONST R10 K6
+ 0x7C1C0600, // 0037 CALL R7 3
+ 0x80040E00, // 0038 RET 1 R7
+ 0x70020007, // 0039 JMP #0042
+ 0x541EFFFC, // 003A LDINT R7 65533
+ 0x1C1C0C07, // 003B EQ R7 R6 R7
+ 0x781E0004, // 003C JMPF R7 #0042
+ 0x8C1C0907, // 003D GETMET R7 R4 K7
+ 0x8824090B, // 003E GETMBR R9 R4 K11
+ 0x542A0003, // 003F LDINT R10 4
+ 0x7C1C0600, // 0040 CALL R7 3
+ 0x80040E00, // 0041 RET 1 R7
+ 0x70020039, // 0042 JMP #007D
+ 0x541E0004, // 0043 LDINT R7 5
+ 0x1C1C0A07, // 0044 EQ R7 R5 R7
+ 0x781E0011, // 0045 JMPF R7 #0058
+ 0x541EFFFB, // 0046 LDINT R7 65532
+ 0x1C1C0C07, // 0047 EQ R7 R6 R7
+ 0x781E0005, // 0048 JMPF R7 #004F
+ 0x8C1C0907, // 0049 GETMET R7 R4 K7
+ 0x8824090B, // 004A GETMBR R9 R4 K11
+ 0x58280006, // 004B LDCONST R10 K6
+ 0x7C1C0600, // 004C CALL R7 3
+ 0x80040E00, // 004D RET 1 R7
+ 0x70020007, // 004E JMP #0057
+ 0x541EFFFC, // 004F LDINT R7 65533
+ 0x1C1C0C07, // 0050 EQ R7 R6 R7
+ 0x781E0004, // 0051 JMPF R7 #0057
+ 0x8C1C0907, // 0052 GETMET R7 R4 K7
+ 0x8824090B, // 0053 GETMBR R9 R4 K11
+ 0x542A0003, // 0054 LDINT R10 4
+ 0x7C1C0600, // 0055 CALL R7 3
+ 0x80040E00, // 0056 RET 1 R7
+ 0x70020024, // 0057 JMP #007D
+ 0x541E0005, // 0058 LDINT R7 6
+ 0x1C1C0A07, // 0059 EQ R7 R5 R7
+ 0x781E0019, // 005A JMPF R7 #0075
+ 0x1C1C0D06, // 005B EQ R7 R6 K6
+ 0x781E0005, // 005C JMPF R7 #0063
+ 0x8C1C0907, // 005D GETMET R7 R4 K7
+ 0x8824090C, // 005E GETMBR R9 R4 K12
+ 0x8828010D, // 005F GETMBR R10 R0 K13
+ 0x7C1C0600, // 0060 CALL R7 3
+ 0x80040E00, // 0061 RET 1 R7
+ 0x70020010, // 0062 JMP #0074
+ 0x541EFFFB, // 0063 LDINT R7 65532
+ 0x1C1C0C07, // 0064 EQ R7 R6 R7
+ 0x781E0005, // 0065 JMPF R7 #006C
+ 0x8C1C0907, // 0066 GETMET R7 R4 K7
+ 0x8824090B, // 0067 GETMBR R9 R4 K11
+ 0x58280006, // 0068 LDCONST R10 K6
+ 0x7C1C0600, // 0069 CALL R7 3
+ 0x80040E00, // 006A RET 1 R7
+ 0x70020007, // 006B JMP #0074
+ 0x541EFFFC, // 006C LDINT R7 65533
+ 0x1C1C0C07, // 006D EQ R7 R6 R7
+ 0x781E0004, // 006E JMPF R7 #0074
+ 0x8C1C0907, // 006F GETMET R7 R4 K7
+ 0x8824090B, // 0070 GETMBR R9 R4 K11
+ 0x542A0003, // 0071 LDINT R10 4
+ 0x7C1C0600, // 0072 CALL R7 3
+ 0x80040E00, // 0073 RET 1 R7
+ 0x70020007, // 0074 JMP #007D
+ 0x601C0003, // 0075 GETGBL R7 G3
+ 0x5C200000, // 0076 MOVE R8 R0
+ 0x7C1C0200, // 0077 CALL R7 1
+ 0x8C1C0F0E, // 0078 GETMET R7 R7 K14
+ 0x5C240200, // 0079 MOVE R9 R1
+ 0x5C280400, // 007A MOVE R10 R2
+ 0x7C1C0600, // 007B CALL R7 3
+ 0x80040E00, // 007C RET 1 R7
+ 0x80000000, // 007D RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: update_shadow
+********************************************************************/
+be_local_closure(Matter_Plugin_Light0_update_shadow, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_nested_str_weak(light),
+ /* K1 */ be_nested_str_weak(get),
+ /* K2 */ be_nested_str_weak(find),
+ /* K3 */ be_nested_str_weak(power),
+ /* K4 */ be_nested_str_weak(shadow_onoff),
+ /* K5 */ be_nested_str_weak(attribute_updated),
+ /* K6 */ be_const_int(0),
+ }),
+ be_str_weak(update_shadow),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0x8C080301, // 0001 GETMET R2 R1 K1
+ 0x7C080200, // 0002 CALL R2 1
+ 0x8C0C0502, // 0003 GETMET R3 R2 K2
+ 0x58140003, // 0004 LDCONST R5 K3
+ 0x4C180000, // 0005 LDNIL R6
+ 0x7C0C0600, // 0006 CALL R3 3
+ 0x88100104, // 0007 GETMBR R4 R0 K4
+ 0x20100604, // 0008 NE R4 R3 R4
+ 0x78120005, // 0009 JMPF R4 #0010
+ 0x8C100105, // 000A GETMET R4 R0 K5
+ 0x4C180000, // 000B LDNIL R6
+ 0x541E0005, // 000C LDINT R7 6
+ 0x58200006, // 000D LDCONST R8 K6
+ 0x7C100800, // 000E CALL R4 4
+ 0x90020803, // 000F SETMBR R0 K4 R3
+ 0x80000000, // 0010 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: invoke_request
+********************************************************************/
+be_local_closure(Matter_Plugin_Light0_invoke_request, /* name */
+ be_nested_proto(
+ 14, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[16]) { /* constants */
+ /* K0 */ be_nested_str_weak(light),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(TLV),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(command),
+ /* K5 */ be_const_int(3),
+ /* K6 */ be_const_int(0),
+ /* K7 */ be_const_int(1),
+ /* K8 */ be_nested_str_weak(Matter_TLV_struct),
+ /* K9 */ be_nested_str_weak(add_TLV),
+ /* K10 */ be_nested_str_weak(U2),
+ /* K11 */ be_nested_str_weak(set),
+ /* K12 */ be_nested_str_weak(power),
+ /* K13 */ be_nested_str_weak(update_shadow),
+ /* K14 */ be_const_int(2),
+ /* K15 */ be_nested_str_weak(shadow_onoff),
+ }),
+ be_str_weak(invoke_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[87]) { /* code */
+ 0xA4120000, // 0000 IMPORT R4 K0
+ 0xB8160200, // 0001 GETNGBL R5 K1
+ 0x88140B02, // 0002 GETMBR R5 R5 K2
+ 0x88180703, // 0003 GETMBR R6 R3 K3
+ 0x881C0704, // 0004 GETMBR R7 R3 K4
+ 0x1C200D05, // 0005 EQ R8 R6 K5
+ 0x78220016, // 0006 JMPF R8 #001E
+ 0x1C200F06, // 0007 EQ R8 R7 K6
+ 0x78220002, // 0008 JMPF R8 #000C
+ 0x50200200, // 0009 LDBOOL R8 1 0
+ 0x80041000, // 000A RET 1 R8
+ 0x70020010, // 000B JMP #001D
+ 0x1C200F07, // 000C EQ R8 R7 K7
+ 0x78220009, // 000D JMPF R8 #0018
+ 0x8C200B08, // 000E GETMET R8 R5 K8
+ 0x7C200200, // 000F CALL R8 1
+ 0x8C241109, // 0010 GETMET R9 R8 K9
+ 0x582C0006, // 0011 LDCONST R11 K6
+ 0x88300B0A, // 0012 GETMBR R12 R5 K10
+ 0x58340006, // 0013 LDCONST R13 K6
+ 0x7C240800, // 0014 CALL R9 4
+ 0x900E0906, // 0015 SETMBR R3 K4 K6
+ 0x80041000, // 0016 RET 1 R8
+ 0x70020004, // 0017 JMP #001D
+ 0x5422003F, // 0018 LDINT R8 64
+ 0x1C200E08, // 0019 EQ R8 R7 R8
+ 0x78220001, // 001A JMPF R8 #001D
+ 0x50200200, // 001B LDBOOL R8 1 0
+ 0x80041000, // 001C RET 1 R8
+ 0x70020037, // 001D JMP #0056
+ 0x54220003, // 001E LDINT R8 4
+ 0x1C200C08, // 001F EQ R8 R6 R8
+ 0x78220002, // 0020 JMPF R8 #0024
+ 0x50200200, // 0021 LDBOOL R8 1 0
+ 0x80041000, // 0022 RET 1 R8
+ 0x70020031, // 0023 JMP #0056
+ 0x54220004, // 0024 LDINT R8 5
+ 0x1C200C08, // 0025 EQ R8 R6 R8
+ 0x78220002, // 0026 JMPF R8 #002A
+ 0x50200200, // 0027 LDBOOL R8 1 0
+ 0x80041000, // 0028 RET 1 R8
+ 0x7002002B, // 0029 JMP #0056
+ 0x54220005, // 002A LDINT R8 6
+ 0x1C200C08, // 002B EQ R8 R6 R8
+ 0x78220028, // 002C JMPF R8 #0056
+ 0x1C200F06, // 002D EQ R8 R7 K6
+ 0x7822000A, // 002E JMPF R8 #003A
+ 0x8C20090B, // 002F GETMET R8 R4 K11
+ 0x60280013, // 0030 GETGBL R10 G19
+ 0x7C280000, // 0031 CALL R10 0
+ 0x502C0000, // 0032 LDBOOL R11 0 0
+ 0x982A180B, // 0033 SETIDX R10 K12 R11
+ 0x7C200400, // 0034 CALL R8 2
+ 0x8C20010D, // 0035 GETMET R8 R0 K13
+ 0x7C200200, // 0036 CALL R8 1
+ 0x50200200, // 0037 LDBOOL R8 1 0
+ 0x80041000, // 0038 RET 1 R8
+ 0x7002001B, // 0039 JMP #0056
+ 0x1C200F07, // 003A EQ R8 R7 K7
+ 0x7822000A, // 003B JMPF R8 #0047
+ 0x8C20090B, // 003C GETMET R8 R4 K11
+ 0x60280013, // 003D GETGBL R10 G19
+ 0x7C280000, // 003E CALL R10 0
+ 0x502C0200, // 003F LDBOOL R11 1 0
+ 0x982A180B, // 0040 SETIDX R10 K12 R11
+ 0x7C200400, // 0041 CALL R8 2
+ 0x8C20010D, // 0042 GETMET R8 R0 K13
+ 0x7C200200, // 0043 CALL R8 1
+ 0x50200200, // 0044 LDBOOL R8 1 0
+ 0x80041000, // 0045 RET 1 R8
+ 0x7002000E, // 0046 JMP #0056
+ 0x1C200F0E, // 0047 EQ R8 R7 K14
+ 0x7822000C, // 0048 JMPF R8 #0056
+ 0x8C20090B, // 0049 GETMET R8 R4 K11
+ 0x60280013, // 004A GETGBL R10 G19
+ 0x7C280000, // 004B CALL R10 0
+ 0x882C010F, // 004C GETMBR R11 R0 K15
+ 0x782E0000, // 004D JMPF R11 #004F
+ 0x502C0001, // 004E LDBOOL R11 0 1
+ 0x502C0200, // 004F LDBOOL R11 1 0
+ 0x982A180B, // 0050 SETIDX R10 K12 R11
+ 0x7C200400, // 0051 CALL R8 2
+ 0x8C20010D, // 0052 GETMET R8 R0 K13
+ 0x7C200200, // 0053 CALL R8 1
+ 0x50200200, // 0054 LDBOOL R8 1 0
+ 0x80041000, // 0055 RET 1 R8
+ 0x80000000, // 0056 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_Plugin_Light0_init, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(init),
+ /* K1 */ be_nested_str_weak(shadow_onoff),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[10]) { /* code */
+ 0x600C0003, // 0000 GETGBL R3 G3
+ 0x5C100000, // 0001 MOVE R4 R0
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C0700, // 0003 GETMET R3 R3 K0
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C0C0600, // 0006 CALL R3 3
+ 0x500C0000, // 0007 LDBOOL R3 0 0
+ 0x90020203, // 0008 SETMBR R0 K1 R3
+ 0x80000000, // 0009 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_Plugin_Light0
+********************************************************************/
+extern const bclass be_class_Matter_Plugin;
+be_local_class(Matter_Plugin_Light0,
+ 1,
+ &be_class_Matter_Plugin,
+ be_nested_map(7,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(read_attribute, 4), be_const_closure(Matter_Plugin_Light0_read_attribute_closure) },
+ { be_const_key_weak(update_shadow, -1), be_const_closure(Matter_Plugin_Light0_update_shadow_closure) },
+ { be_const_key_weak(CLUSTERS, 1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(4,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_int(4, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(3,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(65532),
+ be_const_int(65533),
+ })) ) } )) },
+ { be_const_key_int(5, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(8,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ be_const_int(2),
+ be_const_int(3),
+ be_const_int(4),
+ be_const_int(5),
+ be_const_int(65532),
+ be_const_int(65533),
+ })) ) } )) },
+ { be_const_key_int(6, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(3,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(65532),
+ be_const_int(65533),
+ })) ) } )) },
+ { be_const_key_int(3, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(4,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ be_const_int(65532),
+ be_const_int(65533),
+ })) ) } )) },
+ })) ) } )) },
+ { be_const_key_weak(TYPES, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(1,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_int(256, -1), be_const_int(2) },
+ })) ) } )) },
+ { be_const_key_weak(invoke_request, 2), be_const_closure(Matter_Plugin_Light0_invoke_request_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_Plugin_Light0_init_closure) },
+ { be_const_key_weak(shadow_onoff, -1), be_const_var(0) },
+ })),
+ be_str_weak(Matter_Plugin_Light0)
+);
+/*******************************************************************/
+
+void be_load_Matter_Plugin_Light0_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_Plugin_Light0);
+ be_setglobal(vm, "Matter_Plugin_Light0");
+ be_pop(vm, 1);
+}
+/********************************************************************/
+/* End of solidification */
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Light1.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Light1.h
new file mode 100644
index 000000000..b19758c0f
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Light1.h
@@ -0,0 +1,428 @@
+/* Solidification of Matter_Plugin_Light1.h */
+/********************************************************************\
+* Generated code, don't edit *
+\********************************************************************/
+#include "be_constobj.h"
+
+extern const bclass be_class_Matter_Plugin_Light1;
+
+/********************************************************************
+** Solidified function: invoke_request
+********************************************************************/
+be_local_closure(Matter_Plugin_Light1_invoke_request, /* name */
+ be_nested_proto(
+ 16, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[19]) { /* constants */
+ /* K0 */ be_nested_str_weak(light),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(TLV),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(command),
+ /* K5 */ be_const_int(0),
+ /* K6 */ be_nested_str_weak(findsubval),
+ /* K7 */ be_nested_str_weak(tasmota),
+ /* K8 */ be_nested_str_weak(scale_uint),
+ /* K9 */ be_nested_str_weak(set),
+ /* K10 */ be_nested_str_weak(bri),
+ /* K11 */ be_nested_str_weak(update_shadow),
+ /* K12 */ be_nested_str_weak(log),
+ /* K13 */ be_nested_str_weak(bri_X3A),
+ /* K14 */ be_const_int(1),
+ /* K15 */ be_const_int(2),
+ /* K16 */ be_const_int(3),
+ /* K17 */ be_nested_str_weak(power),
+ /* K18 */ be_nested_str_weak(invoke_request),
+ }),
+ be_str_weak(invoke_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[110]) { /* code */
+ 0xA4120000, // 0000 IMPORT R4 K0
+ 0xB8160200, // 0001 GETNGBL R5 K1
+ 0x88140B02, // 0002 GETMBR R5 R5 K2
+ 0x88180703, // 0003 GETMBR R6 R3 K3
+ 0x881C0704, // 0004 GETMBR R7 R3 K4
+ 0x54220007, // 0005 LDINT R8 8
+ 0x1C200C08, // 0006 EQ R8 R6 R8
+ 0x7822005B, // 0007 JMPF R8 #0064
+ 0x1C200F05, // 0008 EQ R8 R7 K5
+ 0x78220019, // 0009 JMPF R8 #0024
+ 0x8C200506, // 000A GETMET R8 R2 K6
+ 0x58280005, // 000B LDCONST R10 K5
+ 0x7C200400, // 000C CALL R8 2
+ 0xB8260E00, // 000D GETNGBL R9 K7
+ 0x8C241308, // 000E GETMET R9 R9 K8
+ 0x5C2C1000, // 000F MOVE R11 R8
+ 0x58300005, // 0010 LDCONST R12 K5
+ 0x543600FD, // 0011 LDINT R13 254
+ 0x58380005, // 0012 LDCONST R14 K5
+ 0x543E00FE, // 0013 LDINT R15 255
+ 0x7C240C00, // 0014 CALL R9 6
+ 0x8C280909, // 0015 GETMET R10 R4 K9
+ 0x60300013, // 0016 GETGBL R12 G19
+ 0x7C300000, // 0017 CALL R12 0
+ 0x98321409, // 0018 SETIDX R12 K10 R9
+ 0x7C280400, // 0019 CALL R10 2
+ 0x8C28010B, // 001A GETMET R10 R0 K11
+ 0x7C280200, // 001B CALL R10 1
+ 0x60280008, // 001C GETGBL R10 G8
+ 0x5C2C1000, // 001D MOVE R11 R8
+ 0x7C280200, // 001E CALL R10 1
+ 0x002A1A0A, // 001F ADD R10 K13 R10
+ 0x900E180A, // 0020 SETMBR R3 K12 R10
+ 0x50280200, // 0021 LDBOOL R10 1 0
+ 0x80041400, // 0022 RET 1 R10
+ 0x7002003E, // 0023 JMP #0063
+ 0x1C200F0E, // 0024 EQ R8 R7 K14
+ 0x78220002, // 0025 JMPF R8 #0029
+ 0x50200200, // 0026 LDBOOL R8 1 0
+ 0x80041000, // 0027 RET 1 R8
+ 0x70020039, // 0028 JMP #0063
+ 0x1C200F0F, // 0029 EQ R8 R7 K15
+ 0x78220002, // 002A JMPF R8 #002E
+ 0x50200200, // 002B LDBOOL R8 1 0
+ 0x80041000, // 002C RET 1 R8
+ 0x70020034, // 002D JMP #0063
+ 0x1C200F10, // 002E EQ R8 R7 K16
+ 0x78220002, // 002F JMPF R8 #0033
+ 0x50200200, // 0030 LDBOOL R8 1 0
+ 0x80041000, // 0031 RET 1 R8
+ 0x7002002F, // 0032 JMP #0063
+ 0x54220003, // 0033 LDINT R8 4
+ 0x1C200E08, // 0034 EQ R8 R7 R8
+ 0x7822001B, // 0035 JMPF R8 #0052
+ 0x8C200506, // 0036 GETMET R8 R2 K6
+ 0x58280005, // 0037 LDCONST R10 K5
+ 0x7C200400, // 0038 CALL R8 2
+ 0xB8260E00, // 0039 GETNGBL R9 K7
+ 0x8C241308, // 003A GETMET R9 R9 K8
+ 0x5C2C1000, // 003B MOVE R11 R8
+ 0x58300005, // 003C LDCONST R12 K5
+ 0x543600FD, // 003D LDINT R13 254
+ 0x58380005, // 003E LDCONST R14 K5
+ 0x543E00FE, // 003F LDINT R15 255
+ 0x7C240C00, // 0040 CALL R9 6
+ 0x24281305, // 0041 GT R10 R9 K5
+ 0x8C2C0909, // 0042 GETMET R11 R4 K9
+ 0x60340013, // 0043 GETGBL R13 G19
+ 0x7C340000, // 0044 CALL R13 0
+ 0x98361409, // 0045 SETIDX R13 K10 R9
+ 0x9836220A, // 0046 SETIDX R13 K17 R10
+ 0x7C2C0400, // 0047 CALL R11 2
+ 0x8C2C010B, // 0048 GETMET R11 R0 K11
+ 0x7C2C0200, // 0049 CALL R11 1
+ 0x602C0008, // 004A GETGBL R11 G8
+ 0x5C301000, // 004B MOVE R12 R8
+ 0x7C2C0200, // 004C CALL R11 1
+ 0x002E1A0B, // 004D ADD R11 K13 R11
+ 0x900E180B, // 004E SETMBR R3 K12 R11
+ 0x502C0200, // 004F LDBOOL R11 1 0
+ 0x80041600, // 0050 RET 1 R11
+ 0x70020010, // 0051 JMP #0063
+ 0x54220004, // 0052 LDINT R8 5
+ 0x1C200E08, // 0053 EQ R8 R7 R8
+ 0x78220002, // 0054 JMPF R8 #0058
+ 0x50200200, // 0055 LDBOOL R8 1 0
+ 0x80041000, // 0056 RET 1 R8
+ 0x7002000A, // 0057 JMP #0063
+ 0x54220005, // 0058 LDINT R8 6
+ 0x1C200E08, // 0059 EQ R8 R7 R8
+ 0x78220002, // 005A JMPF R8 #005E
+ 0x50200200, // 005B LDBOOL R8 1 0
+ 0x80041000, // 005C RET 1 R8
+ 0x70020004, // 005D JMP #0063
+ 0x54220006, // 005E LDINT R8 7
+ 0x1C200E08, // 005F EQ R8 R7 R8
+ 0x78220001, // 0060 JMPF R8 #0063
+ 0x50200200, // 0061 LDBOOL R8 1 0
+ 0x80041000, // 0062 RET 1 R8
+ 0x70020008, // 0063 JMP #006D
+ 0x60200003, // 0064 GETGBL R8 G3
+ 0x5C240000, // 0065 MOVE R9 R0
+ 0x7C200200, // 0066 CALL R8 1
+ 0x8C201112, // 0067 GETMET R8 R8 K18
+ 0x5C280200, // 0068 MOVE R10 R1
+ 0x5C2C0400, // 0069 MOVE R11 R2
+ 0x5C300600, // 006A MOVE R12 R3
+ 0x7C200800, // 006B CALL R8 4
+ 0x80041000, // 006C RET 1 R8
+ 0x80000000, // 006D RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: update_shadow
+********************************************************************/
+be_local_closure(Matter_Plugin_Light1_update_shadow, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[10]) { /* constants */
+ /* K0 */ be_nested_str_weak(light),
+ /* K1 */ be_nested_str_weak(get),
+ /* K2 */ be_nested_str_weak(find),
+ /* K3 */ be_nested_str_weak(bri),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(scale_uint),
+ /* K6 */ be_const_int(0),
+ /* K7 */ be_nested_str_weak(shadow_bri),
+ /* K8 */ be_nested_str_weak(attribute_updated),
+ /* K9 */ be_nested_str_weak(update_shadow),
+ }),
+ be_str_weak(update_shadow),
+ &be_const_str_solidified,
+ ( &(const binstruction[36]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0x8C080301, // 0001 GETMET R2 R1 K1
+ 0x7C080200, // 0002 CALL R2 1
+ 0x8C0C0502, // 0003 GETMET R3 R2 K2
+ 0x58140003, // 0004 LDCONST R5 K3
+ 0x4C180000, // 0005 LDNIL R6
+ 0x7C0C0600, // 0006 CALL R3 3
+ 0x4C100000, // 0007 LDNIL R4
+ 0x20100604, // 0008 NE R4 R3 R4
+ 0x78120009, // 0009 JMPF R4 #0014
+ 0xB8120800, // 000A GETNGBL R4 K4
+ 0x8C100905, // 000B GETMET R4 R4 K5
+ 0x5C180600, // 000C MOVE R6 R3
+ 0x581C0006, // 000D LDCONST R7 K6
+ 0x542200FE, // 000E LDINT R8 255
+ 0x58240006, // 000F LDCONST R9 K6
+ 0x542A00FD, // 0010 LDINT R10 254
+ 0x7C100C00, // 0011 CALL R4 6
+ 0x5C0C0800, // 0012 MOVE R3 R4
+ 0x70020000, // 0013 JMP #0015
+ 0x880C0107, // 0014 GETMBR R3 R0 K7
+ 0x88100107, // 0015 GETMBR R4 R0 K7
+ 0x20100604, // 0016 NE R4 R3 R4
+ 0x78120005, // 0017 JMPF R4 #001E
+ 0x8C100108, // 0018 GETMET R4 R0 K8
+ 0x4C180000, // 0019 LDNIL R6
+ 0x541E0007, // 001A LDINT R7 8
+ 0x58200006, // 001B LDCONST R8 K6
+ 0x7C100800, // 001C CALL R4 4
+ 0x90020E03, // 001D SETMBR R0 K7 R3
+ 0x60100003, // 001E GETGBL R4 G3
+ 0x5C140000, // 001F MOVE R5 R0
+ 0x7C100200, // 0020 CALL R4 1
+ 0x8C100909, // 0021 GETMET R4 R4 K9
+ 0x7C100200, // 0022 CALL R4 1
+ 0x80000000, // 0023 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_Plugin_Light1_init, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(init),
+ /* K1 */ be_nested_str_weak(shadow_bri),
+ /* K2 */ be_const_int(0),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0x600C0003, // 0000 GETGBL R3 G3
+ 0x5C100000, // 0001 MOVE R4 R0
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C0700, // 0003 GETMET R3 R3 K0
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C0C0600, // 0006 CALL R3 3
+ 0x90020302, // 0007 SETMBR R0 K1 K2
+ 0x80000000, // 0008 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: read_attribute
+********************************************************************/
+be_local_closure(Matter_Plugin_Light1_read_attribute, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[14]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(TLV),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(attribute),
+ /* K5 */ be_const_int(0),
+ /* K6 */ be_nested_str_weak(create_TLV),
+ /* K7 */ be_nested_str_weak(U1),
+ /* K8 */ be_nested_str_weak(shadow_bri),
+ /* K9 */ be_const_int(2),
+ /* K10 */ be_const_int(3),
+ /* K11 */ be_nested_str_weak(U4),
+ /* K12 */ be_const_int(1),
+ /* K13 */ be_nested_str_weak(read_attribute),
+ }),
+ be_str_weak(read_attribute),
+ &be_const_str_solidified,
+ ( &(const binstruction[77]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x88100902, // 0002 GETMBR R4 R4 K2
+ 0x88140503, // 0003 GETMBR R5 R2 K3
+ 0x88180504, // 0004 GETMBR R6 R2 K4
+ 0x541E0007, // 0005 LDINT R7 8
+ 0x1C1C0A07, // 0006 EQ R7 R5 R7
+ 0x781E003B, // 0007 JMPF R7 #0044
+ 0x1C1C0D05, // 0008 EQ R7 R6 K5
+ 0x781E0005, // 0009 JMPF R7 #0010
+ 0x8C1C0906, // 000A GETMET R7 R4 K6
+ 0x88240907, // 000B GETMBR R9 R4 K7
+ 0x88280108, // 000C GETMBR R10 R0 K8
+ 0x7C1C0600, // 000D CALL R7 3
+ 0x80040E00, // 000E RET 1 R7
+ 0x70020032, // 000F JMP #0043
+ 0x1C1C0D09, // 0010 EQ R7 R6 K9
+ 0x781E0005, // 0011 JMPF R7 #0018
+ 0x8C1C0906, // 0012 GETMET R7 R4 K6
+ 0x88240907, // 0013 GETMBR R9 R4 K7
+ 0x58280005, // 0014 LDCONST R10 K5
+ 0x7C1C0600, // 0015 CALL R7 3
+ 0x80040E00, // 0016 RET 1 R7
+ 0x7002002A, // 0017 JMP #0043
+ 0x1C1C0D0A, // 0018 EQ R7 R6 K10
+ 0x781E0005, // 0019 JMPF R7 #0020
+ 0x8C1C0906, // 001A GETMET R7 R4 K6
+ 0x88240907, // 001B GETMBR R9 R4 K7
+ 0x542A00FD, // 001C LDINT R10 254
+ 0x7C1C0600, // 001D CALL R7 3
+ 0x80040E00, // 001E RET 1 R7
+ 0x70020022, // 001F JMP #0043
+ 0x541E000E, // 0020 LDINT R7 15
+ 0x1C1C0C07, // 0021 EQ R7 R6 R7
+ 0x781E0005, // 0022 JMPF R7 #0029
+ 0x8C1C0906, // 0023 GETMET R7 R4 K6
+ 0x88240907, // 0024 GETMBR R9 R4 K7
+ 0x58280005, // 0025 LDCONST R10 K5
+ 0x7C1C0600, // 0026 CALL R7 3
+ 0x80040E00, // 0027 RET 1 R7
+ 0x70020019, // 0028 JMP #0043
+ 0x541E0010, // 0029 LDINT R7 17
+ 0x1C1C0C07, // 002A EQ R7 R6 R7
+ 0x781E0005, // 002B JMPF R7 #0032
+ 0x8C1C0906, // 002C GETMET R7 R4 K6
+ 0x88240907, // 002D GETMBR R9 R4 K7
+ 0x88280108, // 002E GETMBR R10 R0 K8
+ 0x7C1C0600, // 002F CALL R7 3
+ 0x80040E00, // 0030 RET 1 R7
+ 0x70020010, // 0031 JMP #0043
+ 0x541EFFFB, // 0032 LDINT R7 65532
+ 0x1C1C0C07, // 0033 EQ R7 R6 R7
+ 0x781E0005, // 0034 JMPF R7 #003B
+ 0x8C1C0906, // 0035 GETMET R7 R4 K6
+ 0x8824090B, // 0036 GETMBR R9 R4 K11
+ 0x5828000C, // 0037 LDCONST R10 K12
+ 0x7C1C0600, // 0038 CALL R7 3
+ 0x80040E00, // 0039 RET 1 R7
+ 0x70020007, // 003A JMP #0043
+ 0x541EFFFC, // 003B LDINT R7 65533
+ 0x1C1C0C07, // 003C EQ R7 R6 R7
+ 0x781E0004, // 003D JMPF R7 #0043
+ 0x8C1C0906, // 003E GETMET R7 R4 K6
+ 0x8824090B, // 003F GETMBR R9 R4 K11
+ 0x542A0004, // 0040 LDINT R10 5
+ 0x7C1C0600, // 0041 CALL R7 3
+ 0x80040E00, // 0042 RET 1 R7
+ 0x70020007, // 0043 JMP #004C
+ 0x601C0003, // 0044 GETGBL R7 G3
+ 0x5C200000, // 0045 MOVE R8 R0
+ 0x7C1C0200, // 0046 CALL R7 1
+ 0x8C1C0F0D, // 0047 GETMET R7 R7 K13
+ 0x5C240200, // 0048 MOVE R9 R1
+ 0x5C280400, // 0049 MOVE R10 R2
+ 0x7C1C0600, // 004A CALL R7 3
+ 0x80040E00, // 004B RET 1 R7
+ 0x80000000, // 004C RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_Plugin_Light1
+********************************************************************/
+extern const bclass be_class_Matter_Plugin_Light0;
+be_local_class(Matter_Plugin_Light1,
+ 1,
+ &be_class_Matter_Plugin_Light0,
+ be_nested_map(7,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(invoke_request, 1), be_const_closure(Matter_Plugin_Light1_invoke_request_closure) },
+ { be_const_key_weak(read_attribute, 4), be_const_closure(Matter_Plugin_Light1_read_attribute_closure) },
+ { be_const_key_weak(shadow_bri, -1), be_const_var(0) },
+ { be_const_key_weak(TYPES, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(1,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_int(257, -1), be_const_int(2) },
+ })) ) } )) },
+ { be_const_key_weak(update_shadow, 6), be_const_closure(Matter_Plugin_Light1_update_shadow_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_Plugin_Light1_init_closure) },
+ { be_const_key_weak(CLUSTERS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(1,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_int(8, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(7,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(2),
+ be_const_int(3),
+ be_const_int(15),
+ be_const_int(17),
+ be_const_int(65532),
+ be_const_int(65533),
+ })) ) } )) },
+ })) ) } )) },
+ })),
+ be_str_weak(Matter_Plugin_Light1)
+);
+/*******************************************************************/
+
+void be_load_Matter_Plugin_Light1_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_Plugin_Light1);
+ be_setglobal(vm, "Matter_Plugin_Light1");
+ be_pop(vm, 1);
+}
+/********************************************************************/
+/* End of solidification */
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Light2.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Light2.h
new file mode 100644
index 000000000..d572d80e2
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Light2.h
@@ -0,0 +1,421 @@
+/* Solidification of Matter_Plugin_Light2.h */
+/********************************************************************\
+* Generated code, don't edit *
+\********************************************************************/
+#include "be_constobj.h"
+
+extern const bclass be_class_Matter_Plugin_Light2;
+
+/********************************************************************
+** Solidified function: read_attribute
+********************************************************************/
+be_local_closure(Matter_Plugin_Light2_read_attribute, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[14]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(TLV),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(attribute),
+ /* K5 */ be_nested_str_weak(create_TLV),
+ /* K6 */ be_nested_str_weak(U1),
+ /* K7 */ be_nested_str_weak(shadow_ct),
+ /* K8 */ be_const_int(2),
+ /* K9 */ be_const_int(0),
+ /* K10 */ be_nested_str_weak(ct_min),
+ /* K11 */ be_nested_str_weak(ct_max),
+ /* K12 */ be_nested_str_weak(U4),
+ /* K13 */ be_nested_str_weak(read_attribute),
+ }),
+ be_str_weak(read_attribute),
+ &be_const_str_solidified,
+ ( &(const binstruction[80]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x88100902, // 0002 GETMBR R4 R4 K2
+ 0x88140503, // 0003 GETMBR R5 R2 K3
+ 0x88180504, // 0004 GETMBR R6 R2 K4
+ 0x541E02FF, // 0005 LDINT R7 768
+ 0x1C1C0A07, // 0006 EQ R7 R5 R7
+ 0x781E003E, // 0007 JMPF R7 #0047
+ 0x541E0006, // 0008 LDINT R7 7
+ 0x1C1C0C07, // 0009 EQ R7 R6 R7
+ 0x781E0005, // 000A JMPF R7 #0011
+ 0x8C1C0905, // 000B GETMET R7 R4 K5
+ 0x88240906, // 000C GETMBR R9 R4 K6
+ 0x88280107, // 000D GETMBR R10 R0 K7
+ 0x7C1C0600, // 000E CALL R7 3
+ 0x80040E00, // 000F RET 1 R7
+ 0x70020034, // 0010 JMP #0046
+ 0x541E0007, // 0011 LDINT R7 8
+ 0x1C1C0C07, // 0012 EQ R7 R6 R7
+ 0x781E0005, // 0013 JMPF R7 #001A
+ 0x8C1C0905, // 0014 GETMET R7 R4 K5
+ 0x88240906, // 0015 GETMBR R9 R4 K6
+ 0x58280008, // 0016 LDCONST R10 K8
+ 0x7C1C0600, // 0017 CALL R7 3
+ 0x80040E00, // 0018 RET 1 R7
+ 0x7002002B, // 0019 JMP #0046
+ 0x541E000E, // 001A LDINT R7 15
+ 0x1C1C0C07, // 001B EQ R7 R6 R7
+ 0x781E0005, // 001C JMPF R7 #0023
+ 0x8C1C0905, // 001D GETMET R7 R4 K5
+ 0x88240906, // 001E GETMBR R9 R4 K6
+ 0x58280009, // 001F LDCONST R10 K9
+ 0x7C1C0600, // 0020 CALL R7 3
+ 0x80040E00, // 0021 RET 1 R7
+ 0x70020022, // 0022 JMP #0046
+ 0x541E400A, // 0023 LDINT R7 16395
+ 0x1C1C0C07, // 0024 EQ R7 R6 R7
+ 0x781E0005, // 0025 JMPF R7 #002C
+ 0x8C1C0905, // 0026 GETMET R7 R4 K5
+ 0x88240906, // 0027 GETMBR R9 R4 K6
+ 0x8828010A, // 0028 GETMBR R10 R0 K10
+ 0x7C1C0600, // 0029 CALL R7 3
+ 0x80040E00, // 002A RET 1 R7
+ 0x70020019, // 002B JMP #0046
+ 0x541E400B, // 002C LDINT R7 16396
+ 0x1C1C0C07, // 002D EQ R7 R6 R7
+ 0x781E0005, // 002E JMPF R7 #0035
+ 0x8C1C0905, // 002F GETMET R7 R4 K5
+ 0x88240906, // 0030 GETMBR R9 R4 K6
+ 0x8828010B, // 0031 GETMBR R10 R0 K11
+ 0x7C1C0600, // 0032 CALL R7 3
+ 0x80040E00, // 0033 RET 1 R7
+ 0x70020010, // 0034 JMP #0046
+ 0x541EFFFB, // 0035 LDINT R7 65532
+ 0x1C1C0C07, // 0036 EQ R7 R6 R7
+ 0x781E0005, // 0037 JMPF R7 #003E
+ 0x8C1C0905, // 0038 GETMET R7 R4 K5
+ 0x8824090C, // 0039 GETMBR R9 R4 K12
+ 0x542A000F, // 003A LDINT R10 16
+ 0x7C1C0600, // 003B CALL R7 3
+ 0x80040E00, // 003C RET 1 R7
+ 0x70020007, // 003D JMP #0046
+ 0x541EFFFC, // 003E LDINT R7 65533
+ 0x1C1C0C07, // 003F EQ R7 R6 R7
+ 0x781E0004, // 0040 JMPF R7 #0046
+ 0x8C1C0905, // 0041 GETMET R7 R4 K5
+ 0x8824090C, // 0042 GETMBR R9 R4 K12
+ 0x542A0004, // 0043 LDINT R10 5
+ 0x7C1C0600, // 0044 CALL R7 3
+ 0x80040E00, // 0045 RET 1 R7
+ 0x70020007, // 0046 JMP #004F
+ 0x601C0003, // 0047 GETGBL R7 G3
+ 0x5C200000, // 0048 MOVE R8 R0
+ 0x7C1C0200, // 0049 CALL R7 1
+ 0x8C1C0F0D, // 004A GETMET R7 R7 K13
+ 0x5C240200, // 004B MOVE R9 R1
+ 0x5C280400, // 004C MOVE R10 R2
+ 0x7C1C0600, // 004D CALL R7 3
+ 0x80040E00, // 004E RET 1 R7
+ 0x80000000, // 004F RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_Plugin_Light2_init, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(init),
+ /* K1 */ be_nested_str_weak(shadow_ct),
+ /* K2 */ be_nested_str_weak(update_ct_minmax),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[12]) { /* code */
+ 0x600C0003, // 0000 GETGBL R3 G3
+ 0x5C100000, // 0001 MOVE R4 R0
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C0700, // 0003 GETMET R3 R3 K0
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C0C0600, // 0006 CALL R3 3
+ 0x540E0144, // 0007 LDINT R3 325
+ 0x90020203, // 0008 SETMBR R0 K1 R3
+ 0x8C0C0102, // 0009 GETMET R3 R0 K2
+ 0x7C0C0200, // 000A CALL R3 1
+ 0x80000000, // 000B RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: update_ct_minmax
+********************************************************************/
+be_local_closure(Matter_Plugin_Light2_update_ct_minmax, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(tasmota),
+ /* K1 */ be_nested_str_weak(get_option),
+ /* K2 */ be_nested_str_weak(ct_min),
+ /* K3 */ be_nested_str_weak(ct_max),
+ }),
+ be_str_weak(update_ct_minmax),
+ &be_const_str_solidified,
+ ( &(const binstruction[15]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x540E0051, // 0002 LDINT R3 82
+ 0x7C040400, // 0003 CALL R1 2
+ 0x78060001, // 0004 JMPF R1 #0007
+ 0x540A00C7, // 0005 LDINT R2 200
+ 0x70020000, // 0006 JMP #0008
+ 0x540A0098, // 0007 LDINT R2 153
+ 0x90020402, // 0008 SETMBR R0 K2 R2
+ 0x78060001, // 0009 JMPF R1 #000C
+ 0x540A017B, // 000A LDINT R2 380
+ 0x70020000, // 000B JMP #000D
+ 0x540A01F3, // 000C LDINT R2 500
+ 0x90020602, // 000D SETMBR R0 K3 R2
+ 0x80000000, // 000E RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: invoke_request
+********************************************************************/
+be_local_closure(Matter_Plugin_Light2_invoke_request, /* name */
+ be_nested_proto(
+ 13, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[15]) { /* constants */
+ /* K0 */ be_nested_str_weak(light),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(TLV),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(command),
+ /* K5 */ be_nested_str_weak(findsubval),
+ /* K6 */ be_const_int(0),
+ /* K7 */ be_nested_str_weak(ct_min),
+ /* K8 */ be_nested_str_weak(ct_max),
+ /* K9 */ be_nested_str_weak(set),
+ /* K10 */ be_nested_str_weak(ct),
+ /* K11 */ be_nested_str_weak(update_shadow),
+ /* K12 */ be_nested_str_weak(log),
+ /* K13 */ be_nested_str_weak(ct_X3A),
+ /* K14 */ be_nested_str_weak(invoke_request),
+ }),
+ be_str_weak(invoke_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[65]) { /* code */
+ 0xA4120000, // 0000 IMPORT R4 K0
+ 0xB8160200, // 0001 GETNGBL R5 K1
+ 0x88140B02, // 0002 GETMBR R5 R5 K2
+ 0x88180703, // 0003 GETMBR R6 R3 K3
+ 0x881C0704, // 0004 GETMBR R7 R3 K4
+ 0x542202FF, // 0005 LDINT R8 768
+ 0x1C200C08, // 0006 EQ R8 R6 R8
+ 0x7822002E, // 0007 JMPF R8 #0037
+ 0x54220009, // 0008 LDINT R8 10
+ 0x1C200E08, // 0009 EQ R8 R7 R8
+ 0x78220019, // 000A JMPF R8 #0025
+ 0x8C200505, // 000B GETMET R8 R2 K5
+ 0x58280006, // 000C LDCONST R10 K6
+ 0x7C200400, // 000D CALL R8 2
+ 0x88240107, // 000E GETMBR R9 R0 K7
+ 0x14241009, // 000F LT R9 R8 R9
+ 0x78260000, // 0010 JMPF R9 #0012
+ 0x88200107, // 0011 GETMBR R8 R0 K7
+ 0x88240108, // 0012 GETMBR R9 R0 K8
+ 0x24241009, // 0013 GT R9 R8 R9
+ 0x78260000, // 0014 JMPF R9 #0016
+ 0x88200108, // 0015 GETMBR R8 R0 K8
+ 0x8C240909, // 0016 GETMET R9 R4 K9
+ 0x602C0013, // 0017 GETGBL R11 G19
+ 0x7C2C0000, // 0018 CALL R11 0
+ 0x982E1408, // 0019 SETIDX R11 K10 R8
+ 0x7C240400, // 001A CALL R9 2
+ 0x8C24010B, // 001B GETMET R9 R0 K11
+ 0x7C240200, // 001C CALL R9 1
+ 0x60240008, // 001D GETGBL R9 G8
+ 0x5C281000, // 001E MOVE R10 R8
+ 0x7C240200, // 001F CALL R9 1
+ 0x00261A09, // 0020 ADD R9 K13 R9
+ 0x900E1809, // 0021 SETMBR R3 K12 R9
+ 0x50240200, // 0022 LDBOOL R9 1 0
+ 0x80041200, // 0023 RET 1 R9
+ 0x70020010, // 0024 JMP #0036
+ 0x54220046, // 0025 LDINT R8 71
+ 0x1C200E08, // 0026 EQ R8 R7 R8
+ 0x78220002, // 0027 JMPF R8 #002B
+ 0x50200200, // 0028 LDBOOL R8 1 0
+ 0x80041000, // 0029 RET 1 R8
+ 0x7002000A, // 002A JMP #0036
+ 0x5422004A, // 002B LDINT R8 75
+ 0x1C200E08, // 002C EQ R8 R7 R8
+ 0x78220002, // 002D JMPF R8 #0031
+ 0x50200200, // 002E LDBOOL R8 1 0
+ 0x80041000, // 002F RET 1 R8
+ 0x70020004, // 0030 JMP #0036
+ 0x5422004B, // 0031 LDINT R8 76
+ 0x1C200E08, // 0032 EQ R8 R7 R8
+ 0x78220001, // 0033 JMPF R8 #0036
+ 0x50200200, // 0034 LDBOOL R8 1 0
+ 0x80041000, // 0035 RET 1 R8
+ 0x70020008, // 0036 JMP #0040
+ 0x60200003, // 0037 GETGBL R8 G3
+ 0x5C240000, // 0038 MOVE R9 R0
+ 0x7C200200, // 0039 CALL R8 1
+ 0x8C20110E, // 003A GETMET R8 R8 K14
+ 0x5C280200, // 003B MOVE R10 R1
+ 0x5C2C0400, // 003C MOVE R11 R2
+ 0x5C300600, // 003D MOVE R12 R3
+ 0x7C200800, // 003E CALL R8 4
+ 0x80041000, // 003F RET 1 R8
+ 0x80000000, // 0040 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: update_shadow
+********************************************************************/
+be_local_closure(Matter_Plugin_Light2_update_shadow, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 8]) { /* constants */
+ /* K0 */ be_nested_str_weak(light),
+ /* K1 */ be_nested_str_weak(update_ct_minmax),
+ /* K2 */ be_nested_str_weak(update_shadow),
+ /* K3 */ be_nested_str_weak(get),
+ /* K4 */ be_nested_str_weak(find),
+ /* K5 */ be_nested_str_weak(ct),
+ /* K6 */ be_nested_str_weak(shadow_ct),
+ /* K7 */ be_nested_str_weak(attribute_updated),
+ }),
+ be_str_weak(update_shadow),
+ &be_const_str_solidified,
+ ( &(const binstruction[28]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0x8C080101, // 0001 GETMET R2 R0 K1
+ 0x7C080200, // 0002 CALL R2 1
+ 0x60080003, // 0003 GETGBL R2 G3
+ 0x5C0C0000, // 0004 MOVE R3 R0
+ 0x7C080200, // 0005 CALL R2 1
+ 0x8C080502, // 0006 GETMET R2 R2 K2
+ 0x7C080200, // 0007 CALL R2 1
+ 0x8C080303, // 0008 GETMET R2 R1 K3
+ 0x7C080200, // 0009 CALL R2 1
+ 0x8C0C0504, // 000A GETMET R3 R2 K4
+ 0x58140005, // 000B LDCONST R5 K5
+ 0x4C180000, // 000C LDNIL R6
+ 0x7C0C0600, // 000D CALL R3 3
+ 0x4C100000, // 000E LDNIL R4
+ 0x1C100604, // 000F EQ R4 R3 R4
+ 0x78120000, // 0010 JMPF R4 #0012
+ 0x880C0106, // 0011 GETMBR R3 R0 K6
+ 0x88100106, // 0012 GETMBR R4 R0 K6
+ 0x20100604, // 0013 NE R4 R3 R4
+ 0x78120005, // 0014 JMPF R4 #001B
+ 0x8C100107, // 0015 GETMET R4 R0 K7
+ 0x4C180000, // 0016 LDNIL R6
+ 0x541E02FF, // 0017 LDINT R7 768
+ 0x54220006, // 0018 LDINT R8 7
+ 0x7C100800, // 0019 CALL R4 4
+ 0x90020C03, // 001A SETMBR R0 K6 R3
+ 0x80000000, // 001B RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_Plugin_Light2
+********************************************************************/
+extern const bclass be_class_Matter_Plugin_Light1;
+be_local_class(Matter_Plugin_Light2,
+ 3,
+ &be_class_Matter_Plugin_Light1,
+ be_nested_map(10,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(TYPES, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(1,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_int(268, -1), be_const_int(2) },
+ })) ) } )) },
+ { be_const_key_weak(shadow_ct, -1), be_const_var(0) },
+ { be_const_key_weak(read_attribute, -1), be_const_closure(Matter_Plugin_Light2_read_attribute_closure) },
+ { be_const_key_weak(ct_min, 8), be_const_var(1) },
+ { be_const_key_weak(CLUSTERS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(1,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_int(768, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(7,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(7),
+ be_const_int(8),
+ be_const_int(15),
+ be_const_int(16395),
+ be_const_int(16396),
+ be_const_int(65532),
+ be_const_int(65533),
+ })) ) } )) },
+ })) ) } )) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_Plugin_Light2_init_closure) },
+ { be_const_key_weak(invoke_request, -1), be_const_closure(Matter_Plugin_Light2_invoke_request_closure) },
+ { be_const_key_weak(update_ct_minmax, 6), be_const_closure(Matter_Plugin_Light2_update_ct_minmax_closure) },
+ { be_const_key_weak(ct_max, -1), be_const_var(2) },
+ { be_const_key_weak(update_shadow, -1), be_const_closure(Matter_Plugin_Light2_update_shadow_closure) },
+ })),
+ be_str_weak(Matter_Plugin_Light2)
+);
+/*******************************************************************/
+
+void be_load_Matter_Plugin_Light2_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_Plugin_Light2);
+ be_setglobal(vm, "Matter_Plugin_Light2");
+ be_pop(vm, 1);
+}
+/********************************************************************/
+/* End of solidification */
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Light3.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Light3.h
new file mode 100644
index 000000000..2c86c864a
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Light3.h
@@ -0,0 +1,530 @@
+/* Solidification of Matter_Plugin_Light3.h */
+/********************************************************************\
+* Generated code, don't edit *
+\********************************************************************/
+#include "be_constobj.h"
+
+extern const bclass be_class_Matter_Plugin_Light3;
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_Plugin_Light3_init, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(init),
+ /* K1 */ be_nested_str_weak(shadow_hue),
+ /* K2 */ be_const_int(0),
+ /* K3 */ be_nested_str_weak(shadow_sat),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[10]) { /* code */
+ 0x600C0003, // 0000 GETGBL R3 G3
+ 0x5C100000, // 0001 MOVE R4 R0
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C0700, // 0003 GETMET R3 R3 K0
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C0C0600, // 0006 CALL R3 3
+ 0x90020302, // 0007 SETMBR R0 K1 K2
+ 0x90020702, // 0008 SETMBR R0 K3 K2
+ 0x80000000, // 0009 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: read_attribute
+********************************************************************/
+be_local_closure(Matter_Plugin_Light3_read_attribute, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[13]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(TLV),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(attribute),
+ /* K5 */ be_const_int(0),
+ /* K6 */ be_nested_str_weak(create_TLV),
+ /* K7 */ be_nested_str_weak(U1),
+ /* K8 */ be_nested_str_weak(shadow_hue),
+ /* K9 */ be_const_int(1),
+ /* K10 */ be_nested_str_weak(shadow_sat),
+ /* K11 */ be_nested_str_weak(U4),
+ /* K12 */ be_nested_str_weak(read_attribute),
+ }),
+ be_str_weak(read_attribute),
+ &be_const_str_solidified,
+ ( &(const binstruction[105]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x88100902, // 0002 GETMBR R4 R4 K2
+ 0x88140503, // 0003 GETMBR R5 R2 K3
+ 0x88180504, // 0004 GETMBR R6 R2 K4
+ 0x541E02FF, // 0005 LDINT R7 768
+ 0x1C1C0A07, // 0006 EQ R7 R5 R7
+ 0x781E0057, // 0007 JMPF R7 #0060
+ 0x1C1C0D05, // 0008 EQ R7 R6 K5
+ 0x781E0005, // 0009 JMPF R7 #0010
+ 0x8C1C0906, // 000A GETMET R7 R4 K6
+ 0x88240907, // 000B GETMBR R9 R4 K7
+ 0x88280108, // 000C GETMBR R10 R0 K8
+ 0x7C1C0600, // 000D CALL R7 3
+ 0x80040E00, // 000E RET 1 R7
+ 0x7002004E, // 000F JMP #005F
+ 0x1C1C0D09, // 0010 EQ R7 R6 K9
+ 0x781E0005, // 0011 JMPF R7 #0018
+ 0x8C1C0906, // 0012 GETMET R7 R4 K6
+ 0x88240907, // 0013 GETMBR R9 R4 K7
+ 0x8828010A, // 0014 GETMBR R10 R0 K10
+ 0x7C1C0600, // 0015 CALL R7 3
+ 0x80040E00, // 0016 RET 1 R7
+ 0x70020046, // 0017 JMP #005F
+ 0x541E0006, // 0018 LDINT R7 7
+ 0x1C1C0C07, // 0019 EQ R7 R6 R7
+ 0x781E0005, // 001A JMPF R7 #0021
+ 0x8C1C0906, // 001B GETMET R7 R4 K6
+ 0x88240907, // 001C GETMBR R9 R4 K7
+ 0x58280005, // 001D LDCONST R10 K5
+ 0x7C1C0600, // 001E CALL R7 3
+ 0x80040E00, // 001F RET 1 R7
+ 0x7002003D, // 0020 JMP #005F
+ 0x541E0007, // 0021 LDINT R7 8
+ 0x1C1C0C07, // 0022 EQ R7 R6 R7
+ 0x781E0005, // 0023 JMPF R7 #002A
+ 0x8C1C0906, // 0024 GETMET R7 R4 K6
+ 0x88240907, // 0025 GETMBR R9 R4 K7
+ 0x58280005, // 0026 LDCONST R10 K5
+ 0x7C1C0600, // 0027 CALL R7 3
+ 0x80040E00, // 0028 RET 1 R7
+ 0x70020034, // 0029 JMP #005F
+ 0x541E000E, // 002A LDINT R7 15
+ 0x1C1C0C07, // 002B EQ R7 R6 R7
+ 0x781E0005, // 002C JMPF R7 #0033
+ 0x8C1C0906, // 002D GETMET R7 R4 K6
+ 0x88240907, // 002E GETMBR R9 R4 K7
+ 0x58280005, // 002F LDCONST R10 K5
+ 0x7C1C0600, // 0030 CALL R7 3
+ 0x80040E00, // 0031 RET 1 R7
+ 0x7002002B, // 0032 JMP #005F
+ 0x541E4000, // 0033 LDINT R7 16385
+ 0x1C1C0C07, // 0034 EQ R7 R6 R7
+ 0x781E0005, // 0035 JMPF R7 #003C
+ 0x8C1C0906, // 0036 GETMET R7 R4 K6
+ 0x88240907, // 0037 GETMBR R9 R4 K7
+ 0x58280005, // 0038 LDCONST R10 K5
+ 0x7C1C0600, // 0039 CALL R7 3
+ 0x80040E00, // 003A RET 1 R7
+ 0x70020022, // 003B JMP #005F
+ 0x541E4009, // 003C LDINT R7 16394
+ 0x1C1C0C07, // 003D EQ R7 R6 R7
+ 0x781E0005, // 003E JMPF R7 #0045
+ 0x8C1C0906, // 003F GETMET R7 R4 K6
+ 0x88240907, // 0040 GETMBR R9 R4 K7
+ 0x58280005, // 0041 LDCONST R10 K5
+ 0x7C1C0600, // 0042 CALL R7 3
+ 0x80040E00, // 0043 RET 1 R7
+ 0x70020019, // 0044 JMP #005F
+ 0x541E000F, // 0045 LDINT R7 16
+ 0x1C1C0C07, // 0046 EQ R7 R6 R7
+ 0x781E0005, // 0047 JMPF R7 #004E
+ 0x8C1C0906, // 0048 GETMET R7 R4 K6
+ 0x88240907, // 0049 GETMBR R9 R4 K7
+ 0x58280005, // 004A LDCONST R10 K5
+ 0x7C1C0600, // 004B CALL R7 3
+ 0x80040E00, // 004C RET 1 R7
+ 0x70020010, // 004D JMP #005F
+ 0x541EFFFB, // 004E LDINT R7 65532
+ 0x1C1C0C07, // 004F EQ R7 R6 R7
+ 0x781E0005, // 0050 JMPF R7 #0057
+ 0x8C1C0906, // 0051 GETMET R7 R4 K6
+ 0x8824090B, // 0052 GETMBR R9 R4 K11
+ 0x58280009, // 0053 LDCONST R10 K9
+ 0x7C1C0600, // 0054 CALL R7 3
+ 0x80040E00, // 0055 RET 1 R7
+ 0x70020007, // 0056 JMP #005F
+ 0x541EFFFC, // 0057 LDINT R7 65533
+ 0x1C1C0C07, // 0058 EQ R7 R6 R7
+ 0x781E0004, // 0059 JMPF R7 #005F
+ 0x8C1C0906, // 005A GETMET R7 R4 K6
+ 0x8824090B, // 005B GETMBR R9 R4 K11
+ 0x542A0004, // 005C LDINT R10 5
+ 0x7C1C0600, // 005D CALL R7 3
+ 0x80040E00, // 005E RET 1 R7
+ 0x70020007, // 005F JMP #0068
+ 0x601C0003, // 0060 GETGBL R7 G3
+ 0x5C200000, // 0061 MOVE R8 R0
+ 0x7C1C0200, // 0062 CALL R7 1
+ 0x8C1C0F0C, // 0063 GETMET R7 R7 K12
+ 0x5C240200, // 0064 MOVE R9 R1
+ 0x5C280400, // 0065 MOVE R10 R2
+ 0x7C1C0600, // 0066 CALL R7 3
+ 0x80040E00, // 0067 RET 1 R7
+ 0x80000000, // 0068 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: invoke_request
+********************************************************************/
+be_local_closure(Matter_Plugin_Light3_invoke_request, /* name */
+ be_nested_proto(
+ 18, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[21]) { /* constants */
+ /* K0 */ be_nested_str_weak(light),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(TLV),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(command),
+ /* K5 */ be_const_int(0),
+ /* K6 */ be_nested_str_weak(findsubval),
+ /* K7 */ be_nested_str_weak(tasmota),
+ /* K8 */ be_nested_str_weak(scale_uint),
+ /* K9 */ be_nested_str_weak(set),
+ /* K10 */ be_nested_str_weak(hue),
+ /* K11 */ be_nested_str_weak(update_shadow),
+ /* K12 */ be_nested_str_weak(log),
+ /* K13 */ be_nested_str_weak(hue_X3A),
+ /* K14 */ be_const_int(1),
+ /* K15 */ be_const_int(2),
+ /* K16 */ be_const_int(3),
+ /* K17 */ be_nested_str_weak(sat),
+ /* K18 */ be_nested_str_weak(sat_X3A),
+ /* K19 */ be_nested_str_weak(_X20sat_X3A),
+ /* K20 */ be_nested_str_weak(invoke_request),
+ }),
+ be_str_weak(invoke_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[148]) { /* code */
+ 0xA4120000, // 0000 IMPORT R4 K0
+ 0xB8160200, // 0001 GETNGBL R5 K1
+ 0x88140B02, // 0002 GETMBR R5 R5 K2
+ 0x88180703, // 0003 GETMBR R6 R3 K3
+ 0x881C0704, // 0004 GETMBR R7 R3 K4
+ 0x542202FF, // 0005 LDINT R8 768
+ 0x1C200C08, // 0006 EQ R8 R6 R8
+ 0x78220081, // 0007 JMPF R8 #008A
+ 0x1C200F05, // 0008 EQ R8 R7 K5
+ 0x78220019, // 0009 JMPF R8 #0024
+ 0x8C200506, // 000A GETMET R8 R2 K6
+ 0x58280005, // 000B LDCONST R10 K5
+ 0x7C200400, // 000C CALL R8 2
+ 0xB8260E00, // 000D GETNGBL R9 K7
+ 0x8C241308, // 000E GETMET R9 R9 K8
+ 0x5C2C1000, // 000F MOVE R11 R8
+ 0x58300005, // 0010 LDCONST R12 K5
+ 0x543600FD, // 0011 LDINT R13 254
+ 0x58380005, // 0012 LDCONST R14 K5
+ 0x543E0167, // 0013 LDINT R15 360
+ 0x7C240C00, // 0014 CALL R9 6
+ 0x8C280909, // 0015 GETMET R10 R4 K9
+ 0x60300013, // 0016 GETGBL R12 G19
+ 0x7C300000, // 0017 CALL R12 0
+ 0x98321409, // 0018 SETIDX R12 K10 R9
+ 0x7C280400, // 0019 CALL R10 2
+ 0x8C28010B, // 001A GETMET R10 R0 K11
+ 0x7C280200, // 001B CALL R10 1
+ 0x60280008, // 001C GETGBL R10 G8
+ 0x5C2C1000, // 001D MOVE R11 R8
+ 0x7C280200, // 001E CALL R10 1
+ 0x002A1A0A, // 001F ADD R10 K13 R10
+ 0x900E180A, // 0020 SETMBR R3 K12 R10
+ 0x50280200, // 0021 LDBOOL R10 1 0
+ 0x80041400, // 0022 RET 1 R10
+ 0x70020064, // 0023 JMP #0089
+ 0x1C200F0E, // 0024 EQ R8 R7 K14
+ 0x78220002, // 0025 JMPF R8 #0029
+ 0x50200200, // 0026 LDBOOL R8 1 0
+ 0x80041000, // 0027 RET 1 R8
+ 0x7002005F, // 0028 JMP #0089
+ 0x1C200F0F, // 0029 EQ R8 R7 K15
+ 0x78220002, // 002A JMPF R8 #002E
+ 0x50200200, // 002B LDBOOL R8 1 0
+ 0x80041000, // 002C RET 1 R8
+ 0x7002005A, // 002D JMP #0089
+ 0x1C200F10, // 002E EQ R8 R7 K16
+ 0x78220019, // 002F JMPF R8 #004A
+ 0x8C200506, // 0030 GETMET R8 R2 K6
+ 0x58280005, // 0031 LDCONST R10 K5
+ 0x7C200400, // 0032 CALL R8 2
+ 0xB8260E00, // 0033 GETNGBL R9 K7
+ 0x8C241308, // 0034 GETMET R9 R9 K8
+ 0x5C2C1000, // 0035 MOVE R11 R8
+ 0x58300005, // 0036 LDCONST R12 K5
+ 0x543600FD, // 0037 LDINT R13 254
+ 0x58380005, // 0038 LDCONST R14 K5
+ 0x543E00FE, // 0039 LDINT R15 255
+ 0x7C240C00, // 003A CALL R9 6
+ 0x8C280909, // 003B GETMET R10 R4 K9
+ 0x60300013, // 003C GETGBL R12 G19
+ 0x7C300000, // 003D CALL R12 0
+ 0x98322209, // 003E SETIDX R12 K17 R9
+ 0x7C280400, // 003F CALL R10 2
+ 0x8C28010B, // 0040 GETMET R10 R0 K11
+ 0x7C280200, // 0041 CALL R10 1
+ 0x60280008, // 0042 GETGBL R10 G8
+ 0x5C2C1000, // 0043 MOVE R11 R8
+ 0x7C280200, // 0044 CALL R10 1
+ 0x002A240A, // 0045 ADD R10 K18 R10
+ 0x900E180A, // 0046 SETMBR R3 K12 R10
+ 0x50280200, // 0047 LDBOOL R10 1 0
+ 0x80041400, // 0048 RET 1 R10
+ 0x7002003E, // 0049 JMP #0089
+ 0x54220003, // 004A LDINT R8 4
+ 0x1C200E08, // 004B EQ R8 R7 R8
+ 0x78220002, // 004C JMPF R8 #0050
+ 0x50200200, // 004D LDBOOL R8 1 0
+ 0x80041000, // 004E RET 1 R8
+ 0x70020038, // 004F JMP #0089
+ 0x54220004, // 0050 LDINT R8 5
+ 0x1C200E08, // 0051 EQ R8 R7 R8
+ 0x78220002, // 0052 JMPF R8 #0056
+ 0x50200200, // 0053 LDBOOL R8 1 0
+ 0x80041000, // 0054 RET 1 R8
+ 0x70020032, // 0055 JMP #0089
+ 0x54220005, // 0056 LDINT R8 6
+ 0x1C200E08, // 0057 EQ R8 R7 R8
+ 0x7822002A, // 0058 JMPF R8 #0084
+ 0x8C200506, // 0059 GETMET R8 R2 K6
+ 0x58280005, // 005A LDCONST R10 K5
+ 0x7C200400, // 005B CALL R8 2
+ 0xB8260E00, // 005C GETNGBL R9 K7
+ 0x8C241308, // 005D GETMET R9 R9 K8
+ 0x5C2C1000, // 005E MOVE R11 R8
+ 0x58300005, // 005F LDCONST R12 K5
+ 0x543600FD, // 0060 LDINT R13 254
+ 0x58380005, // 0061 LDCONST R14 K5
+ 0x543E0167, // 0062 LDINT R15 360
+ 0x7C240C00, // 0063 CALL R9 6
+ 0x8C280506, // 0064 GETMET R10 R2 K6
+ 0x5830000E, // 0065 LDCONST R12 K14
+ 0x7C280400, // 0066 CALL R10 2
+ 0xB82E0E00, // 0067 GETNGBL R11 K7
+ 0x8C2C1708, // 0068 GETMET R11 R11 K8
+ 0x5C341400, // 0069 MOVE R13 R10
+ 0x58380005, // 006A LDCONST R14 K5
+ 0x543E00FD, // 006B LDINT R15 254
+ 0x58400005, // 006C LDCONST R16 K5
+ 0x544600FE, // 006D LDINT R17 255
+ 0x7C2C0C00, // 006E CALL R11 6
+ 0x8C300909, // 006F GETMET R12 R4 K9
+ 0x60380013, // 0070 GETGBL R14 G19
+ 0x7C380000, // 0071 CALL R14 0
+ 0x983A1409, // 0072 SETIDX R14 K10 R9
+ 0x983A220B, // 0073 SETIDX R14 K17 R11
+ 0x7C300400, // 0074 CALL R12 2
+ 0x8C30010B, // 0075 GETMET R12 R0 K11
+ 0x7C300200, // 0076 CALL R12 1
+ 0x60300008, // 0077 GETGBL R12 G8
+ 0x5C341000, // 0078 MOVE R13 R8
+ 0x7C300200, // 0079 CALL R12 1
+ 0x00321A0C, // 007A ADD R12 K13 R12
+ 0x00301913, // 007B ADD R12 R12 K19
+ 0x60340008, // 007C GETGBL R13 G8
+ 0x5C381400, // 007D MOVE R14 R10
+ 0x7C340200, // 007E CALL R13 1
+ 0x0030180D, // 007F ADD R12 R12 R13
+ 0x900E180C, // 0080 SETMBR R3 K12 R12
+ 0x50300200, // 0081 LDBOOL R12 1 0
+ 0x80041800, // 0082 RET 1 R12
+ 0x70020004, // 0083 JMP #0089
+ 0x54220046, // 0084 LDINT R8 71
+ 0x1C200E08, // 0085 EQ R8 R7 R8
+ 0x78220001, // 0086 JMPF R8 #0089
+ 0x50200200, // 0087 LDBOOL R8 1 0
+ 0x80041000, // 0088 RET 1 R8
+ 0x70020008, // 0089 JMP #0093
+ 0x60200003, // 008A GETGBL R8 G3
+ 0x5C240000, // 008B MOVE R9 R0
+ 0x7C200200, // 008C CALL R8 1
+ 0x8C201114, // 008D GETMET R8 R8 K20
+ 0x5C280200, // 008E MOVE R10 R1
+ 0x5C2C0400, // 008F MOVE R11 R2
+ 0x5C300600, // 0090 MOVE R12 R3
+ 0x7C200800, // 0091 CALL R8 4
+ 0x80041000, // 0092 RET 1 R8
+ 0x80000000, // 0093 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: update_shadow
+********************************************************************/
+be_local_closure(Matter_Plugin_Light3_update_shadow, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[13]) { /* constants */
+ /* K0 */ be_nested_str_weak(light),
+ /* K1 */ be_nested_str_weak(update_shadow),
+ /* K2 */ be_nested_str_weak(get),
+ /* K3 */ be_nested_str_weak(find),
+ /* K4 */ be_nested_str_weak(hue),
+ /* K5 */ be_nested_str_weak(sat),
+ /* K6 */ be_nested_str_weak(tasmota),
+ /* K7 */ be_nested_str_weak(scale_uint),
+ /* K8 */ be_const_int(0),
+ /* K9 */ be_nested_str_weak(shadow_hue),
+ /* K10 */ be_nested_str_weak(shadow_sat),
+ /* K11 */ be_nested_str_weak(attribute_updated),
+ /* K12 */ be_const_int(1),
+ }),
+ be_str_weak(update_shadow),
+ &be_const_str_solidified,
+ ( &(const binstruction[63]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0x60080003, // 0001 GETGBL R2 G3
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C080200, // 0003 CALL R2 1
+ 0x8C080501, // 0004 GETMET R2 R2 K1
+ 0x7C080200, // 0005 CALL R2 1
+ 0x8C080302, // 0006 GETMET R2 R1 K2
+ 0x7C080200, // 0007 CALL R2 1
+ 0x8C0C0503, // 0008 GETMET R3 R2 K3
+ 0x58140004, // 0009 LDCONST R5 K4
+ 0x4C180000, // 000A LDNIL R6
+ 0x7C0C0600, // 000B CALL R3 3
+ 0x8C100503, // 000C GETMET R4 R2 K3
+ 0x58180005, // 000D LDCONST R6 K5
+ 0x4C1C0000, // 000E LDNIL R7
+ 0x7C100600, // 000F CALL R4 3
+ 0x4C140000, // 0010 LDNIL R5
+ 0x20140605, // 0011 NE R5 R3 R5
+ 0x78160009, // 0012 JMPF R5 #001D
+ 0xB8160C00, // 0013 GETNGBL R5 K6
+ 0x8C140B07, // 0014 GETMET R5 R5 K7
+ 0x5C1C0600, // 0015 MOVE R7 R3
+ 0x58200008, // 0016 LDCONST R8 K8
+ 0x54260167, // 0017 LDINT R9 360
+ 0x58280008, // 0018 LDCONST R10 K8
+ 0x542E00FD, // 0019 LDINT R11 254
+ 0x7C140C00, // 001A CALL R5 6
+ 0x5C0C0A00, // 001B MOVE R3 R5
+ 0x70020000, // 001C JMP #001E
+ 0x880C0109, // 001D GETMBR R3 R0 K9
+ 0x4C140000, // 001E LDNIL R5
+ 0x20140805, // 001F NE R5 R4 R5
+ 0x78160009, // 0020 JMPF R5 #002B
+ 0xB8160C00, // 0021 GETNGBL R5 K6
+ 0x8C140B07, // 0022 GETMET R5 R5 K7
+ 0x5C1C0800, // 0023 MOVE R7 R4
+ 0x58200008, // 0024 LDCONST R8 K8
+ 0x542600FE, // 0025 LDINT R9 255
+ 0x58280008, // 0026 LDCONST R10 K8
+ 0x542E00FD, // 0027 LDINT R11 254
+ 0x7C140C00, // 0028 CALL R5 6
+ 0x5C100A00, // 0029 MOVE R4 R5
+ 0x70020000, // 002A JMP #002C
+ 0x8810010A, // 002B GETMBR R4 R0 K10
+ 0x88140109, // 002C GETMBR R5 R0 K9
+ 0x20140605, // 002D NE R5 R3 R5
+ 0x78160005, // 002E JMPF R5 #0035
+ 0x8C14010B, // 002F GETMET R5 R0 K11
+ 0x4C1C0000, // 0030 LDNIL R7
+ 0x542202FF, // 0031 LDINT R8 768
+ 0x58240008, // 0032 LDCONST R9 K8
+ 0x7C140800, // 0033 CALL R5 4
+ 0x90021203, // 0034 SETMBR R0 K9 R3
+ 0x8814010A, // 0035 GETMBR R5 R0 K10
+ 0x20140805, // 0036 NE R5 R4 R5
+ 0x78160005, // 0037 JMPF R5 #003E
+ 0x8C14010B, // 0038 GETMET R5 R0 K11
+ 0x4C1C0000, // 0039 LDNIL R7
+ 0x542202FF, // 003A LDINT R8 768
+ 0x5824000C, // 003B LDCONST R9 K12
+ 0x7C140800, // 003C CALL R5 4
+ 0x90021404, // 003D SETMBR R0 K10 R4
+ 0x80000000, // 003E RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_Plugin_Light3
+********************************************************************/
+extern const bclass be_class_Matter_Plugin_Light1;
+be_local_class(Matter_Plugin_Light3,
+ 2,
+ &be_class_Matter_Plugin_Light1,
+ be_nested_map(8,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(CLUSTERS, 7), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(1,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_int(768, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(9,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ be_const_int(7),
+ be_const_int(8),
+ be_const_int(15),
+ be_const_int(16385),
+ be_const_int(16394),
+ be_const_int(65532),
+ be_const_int(65533),
+ })) ) } )) },
+ })) ) } )) },
+ { be_const_key_weak(invoke_request, -1), be_const_closure(Matter_Plugin_Light3_invoke_request_closure) },
+ { be_const_key_weak(TYPES, 0), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(1,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_int(269, -1), be_const_int(2) },
+ })) ) } )) },
+ { be_const_key_weak(init, 1), be_const_closure(Matter_Plugin_Light3_init_closure) },
+ { be_const_key_weak(shadow_hue, -1), be_const_var(0) },
+ { be_const_key_weak(update_shadow, -1), be_const_closure(Matter_Plugin_Light3_update_shadow_closure) },
+ { be_const_key_weak(shadow_sat, -1), be_const_var(1) },
+ { be_const_key_weak(read_attribute, -1), be_const_closure(Matter_Plugin_Light3_read_attribute_closure) },
+ })),
+ be_str_weak(Matter_Plugin_Light3)
+);
+/*******************************************************************/
+
+void be_load_Matter_Plugin_Light3_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_Plugin_Light3);
+ be_setglobal(vm, "Matter_Plugin_Light3");
+ be_pop(vm, 1);
+}
+/********************************************************************/
+/* End of solidification */
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_OnOff.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_OnOff.h
new file mode 100644
index 000000000..f0ecd333d
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_OnOff.h
@@ -0,0 +1,648 @@
+/* Solidification of Matter_Plugin_OnOff.h */
+/********************************************************************\
+* Generated code, don't edit *
+\********************************************************************/
+#include "be_constobj.h"
+
+extern const bclass be_class_Matter_Plugin_OnOff;
+
+/********************************************************************
+** Solidified function: invoke_request
+********************************************************************/
+be_local_closure(Matter_Plugin_OnOff_invoke_request, /* name */
+ be_nested_proto(
+ 13, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[13]) { /* constants */
+ /* K0 */ be_nested_str_weak(matter),
+ /* K1 */ be_nested_str_weak(TLV),
+ /* K2 */ be_nested_str_weak(cluster),
+ /* K3 */ be_nested_str_weak(command),
+ /* K4 */ be_const_int(3),
+ /* K5 */ be_const_int(0),
+ /* K6 */ be_const_int(1),
+ /* K7 */ be_nested_str_weak(Matter_TLV_struct),
+ /* K8 */ be_nested_str_weak(add_TLV),
+ /* K9 */ be_nested_str_weak(U2),
+ /* K10 */ be_nested_str_weak(set_onoff),
+ /* K11 */ be_const_int(2),
+ /* K12 */ be_nested_str_weak(get_onoff),
+ }),
+ be_str_weak(invoke_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[119]) { /* code */
+ 0xB8120000, // 0000 GETNGBL R4 K0
+ 0x88100901, // 0001 GETMBR R4 R4 K1
+ 0x88140702, // 0002 GETMBR R5 R3 K2
+ 0x88180703, // 0003 GETMBR R6 R3 K3
+ 0x1C1C0B04, // 0004 EQ R7 R5 K4
+ 0x781E0016, // 0005 JMPF R7 #001D
+ 0x1C1C0D05, // 0006 EQ R7 R6 K5
+ 0x781E0002, // 0007 JMPF R7 #000B
+ 0x501C0200, // 0008 LDBOOL R7 1 0
+ 0x80040E00, // 0009 RET 1 R7
+ 0x70020010, // 000A JMP #001C
+ 0x1C1C0D06, // 000B EQ R7 R6 K6
+ 0x781E0009, // 000C JMPF R7 #0017
+ 0x8C1C0907, // 000D GETMET R7 R4 K7
+ 0x7C1C0200, // 000E CALL R7 1
+ 0x8C200F08, // 000F GETMET R8 R7 K8
+ 0x58280005, // 0010 LDCONST R10 K5
+ 0x882C0909, // 0011 GETMBR R11 R4 K9
+ 0x58300005, // 0012 LDCONST R12 K5
+ 0x7C200800, // 0013 CALL R8 4
+ 0x900E0705, // 0014 SETMBR R3 K3 K5
+ 0x80040E00, // 0015 RET 1 R7
+ 0x70020004, // 0016 JMP #001C
+ 0x541E003F, // 0017 LDINT R7 64
+ 0x1C1C0C07, // 0018 EQ R7 R6 R7
+ 0x781E0001, // 0019 JMPF R7 #001C
+ 0x501C0200, // 001A LDBOOL R7 1 0
+ 0x80040E00, // 001B RET 1 R7
+ 0x70020058, // 001C JMP #0076
+ 0x541E0003, // 001D LDINT R7 4
+ 0x1C1C0A07, // 001E EQ R7 R5 R7
+ 0x781E0002, // 001F JMPF R7 #0023
+ 0x501C0200, // 0020 LDBOOL R7 1 0
+ 0x80040E00, // 0021 RET 1 R7
+ 0x70020052, // 0022 JMP #0076
+ 0x541E0004, // 0023 LDINT R7 5
+ 0x1C1C0A07, // 0024 EQ R7 R5 R7
+ 0x781E0002, // 0025 JMPF R7 #0029
+ 0x501C0200, // 0026 LDBOOL R7 1 0
+ 0x80040E00, // 0027 RET 1 R7
+ 0x7002004C, // 0028 JMP #0076
+ 0x541E0005, // 0029 LDINT R7 6
+ 0x1C1C0A07, // 002A EQ R7 R5 R7
+ 0x781E001B, // 002B JMPF R7 #0048
+ 0x1C1C0D05, // 002C EQ R7 R6 K5
+ 0x781E0005, // 002D JMPF R7 #0034
+ 0x8C1C010A, // 002E GETMET R7 R0 K10
+ 0x50240000, // 002F LDBOOL R9 0 0
+ 0x7C1C0400, // 0030 CALL R7 2
+ 0x501C0200, // 0031 LDBOOL R7 1 0
+ 0x80040E00, // 0032 RET 1 R7
+ 0x70020012, // 0033 JMP #0047
+ 0x1C1C0D06, // 0034 EQ R7 R6 K6
+ 0x781E0005, // 0035 JMPF R7 #003C
+ 0x8C1C010A, // 0036 GETMET R7 R0 K10
+ 0x50240200, // 0037 LDBOOL R9 1 0
+ 0x7C1C0400, // 0038 CALL R7 2
+ 0x501C0200, // 0039 LDBOOL R7 1 0
+ 0x80040E00, // 003A RET 1 R7
+ 0x7002000A, // 003B JMP #0047
+ 0x1C1C0D0B, // 003C EQ R7 R6 K11
+ 0x781E0008, // 003D JMPF R7 #0047
+ 0x8C1C010A, // 003E GETMET R7 R0 K10
+ 0x8C24010C, // 003F GETMET R9 R0 K12
+ 0x7C240200, // 0040 CALL R9 1
+ 0x78260000, // 0041 JMPF R9 #0043
+ 0x50240001, // 0042 LDBOOL R9 0 1
+ 0x50240200, // 0043 LDBOOL R9 1 0
+ 0x7C1C0400, // 0044 CALL R7 2
+ 0x501C0200, // 0045 LDBOOL R7 1 0
+ 0x80040E00, // 0046 RET 1 R7
+ 0x7002002D, // 0047 JMP #0076
+ 0x541E0007, // 0048 LDINT R7 8
+ 0x1C1C0A07, // 0049 EQ R7 R5 R7
+ 0x781E002A, // 004A JMPF R7 #0076
+ 0x1C1C0D05, // 004B EQ R7 R6 K5
+ 0x781E0002, // 004C JMPF R7 #0050
+ 0x501C0200, // 004D LDBOOL R7 1 0
+ 0x80040E00, // 004E RET 1 R7
+ 0x70020025, // 004F JMP #0076
+ 0x1C1C0D06, // 0050 EQ R7 R6 K6
+ 0x781E0002, // 0051 JMPF R7 #0055
+ 0x501C0200, // 0052 LDBOOL R7 1 0
+ 0x80040E00, // 0053 RET 1 R7
+ 0x70020020, // 0054 JMP #0076
+ 0x1C1C0D0B, // 0055 EQ R7 R6 K11
+ 0x781E0002, // 0056 JMPF R7 #005A
+ 0x501C0200, // 0057 LDBOOL R7 1 0
+ 0x80040E00, // 0058 RET 1 R7
+ 0x7002001B, // 0059 JMP #0076
+ 0x1C1C0D04, // 005A EQ R7 R6 K4
+ 0x781E0002, // 005B JMPF R7 #005F
+ 0x501C0200, // 005C LDBOOL R7 1 0
+ 0x80040E00, // 005D RET 1 R7
+ 0x70020016, // 005E JMP #0076
+ 0x541E0003, // 005F LDINT R7 4
+ 0x1C1C0C07, // 0060 EQ R7 R6 R7
+ 0x781E0002, // 0061 JMPF R7 #0065
+ 0x501C0200, // 0062 LDBOOL R7 1 0
+ 0x80040E00, // 0063 RET 1 R7
+ 0x70020010, // 0064 JMP #0076
+ 0x541E0004, // 0065 LDINT R7 5
+ 0x1C1C0C07, // 0066 EQ R7 R6 R7
+ 0x781E0002, // 0067 JMPF R7 #006B
+ 0x501C0200, // 0068 LDBOOL R7 1 0
+ 0x80040E00, // 0069 RET 1 R7
+ 0x7002000A, // 006A JMP #0076
+ 0x541E0005, // 006B LDINT R7 6
+ 0x1C1C0C07, // 006C EQ R7 R6 R7
+ 0x781E0002, // 006D JMPF R7 #0071
+ 0x501C0200, // 006E LDBOOL R7 1 0
+ 0x80040E00, // 006F RET 1 R7
+ 0x70020004, // 0070 JMP #0076
+ 0x541E0006, // 0071 LDINT R7 7
+ 0x1C1C0C07, // 0072 EQ R7 R6 R7
+ 0x781E0001, // 0073 JMPF R7 #0076
+ 0x501C0200, // 0074 LDBOOL R7 1 0
+ 0x80040E00, // 0075 RET 1 R7
+ 0x80000000, // 0076 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_onoff
+********************************************************************/
+be_local_closure(Matter_Plugin_OnOff_get_onoff, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(tasmota),
+ /* K1 */ be_nested_str_weak(get_power),
+ /* K2 */ be_nested_str_weak(tasmota_relay_index),
+ /* K3 */ be_nested_str_weak(shadow_onoff),
+ /* K4 */ be_nested_str_weak(onoff_changed),
+ }),
+ be_str_weak(get_onoff),
+ &be_const_str_solidified,
+ ( &(const binstruction[28]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x880C0102, // 0002 GETMBR R3 R0 K2
+ 0x7C040400, // 0003 CALL R1 2
+ 0x4C080000, // 0004 LDNIL R2
+ 0x20080202, // 0005 NE R2 R1 R2
+ 0x780A000C, // 0006 JMPF R2 #0014
+ 0x88080103, // 0007 GETMBR R2 R0 K3
+ 0x4C0C0000, // 0008 LDNIL R3
+ 0x20080403, // 0009 NE R2 R2 R3
+ 0x780A0007, // 000A JMPF R2 #0013
+ 0x88080103, // 000B GETMBR R2 R0 K3
+ 0x600C0017, // 000C GETGBL R3 G23
+ 0x5C100200, // 000D MOVE R4 R1
+ 0x7C0C0200, // 000E CALL R3 1
+ 0x20080403, // 000F NE R2 R2 R3
+ 0x780A0001, // 0010 JMPF R2 #0013
+ 0x8C080104, // 0011 GETMET R2 R0 K4
+ 0x7C080200, // 0012 CALL R2 1
+ 0x90020601, // 0013 SETMBR R0 K3 R1
+ 0x88080103, // 0014 GETMBR R2 R0 K3
+ 0x4C0C0000, // 0015 LDNIL R3
+ 0x1C080403, // 0016 EQ R2 R2 R3
+ 0x780A0001, // 0017 JMPF R2 #001A
+ 0x50080000, // 0018 LDBOOL R2 0 0
+ 0x90020602, // 0019 SETMBR R0 K3 R2
+ 0x88080103, // 001A GETMBR R2 R0 K3
+ 0x80040400, // 001B RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: onoff_changed
+********************************************************************/
+be_local_closure(Matter_Plugin_OnOff_onoff_changed, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(attribute_updated),
+ /* K1 */ be_const_int(0),
+ }),
+ be_str_weak(onoff_changed),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0x8C040100, // 0000 GETMET R1 R0 K0
+ 0x4C0C0000, // 0001 LDNIL R3
+ 0x54120005, // 0002 LDINT R4 6
+ 0x58140001, // 0003 LDCONST R5 K1
+ 0x7C040800, // 0004 CALL R1 4
+ 0x80000000, // 0005 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_onoff
+********************************************************************/
+be_local_closure(Matter_Plugin_OnOff_set_onoff, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(tasmota),
+ /* K1 */ be_nested_str_weak(set_power),
+ /* K2 */ be_nested_str_weak(tasmota_relay_index),
+ /* K3 */ be_nested_str_weak(get_onoff),
+ }),
+ be_str_weak(set_onoff),
+ &be_const_str_solidified,
+ ( &(const binstruction[10]) { /* code */
+ 0xB80A0000, // 0000 GETNGBL R2 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x88100102, // 0002 GETMBR R4 R0 K2
+ 0x60140017, // 0003 GETGBL R5 G23
+ 0x5C180200, // 0004 MOVE R6 R1
+ 0x7C140200, // 0005 CALL R5 1
+ 0x7C080600, // 0006 CALL R2 3
+ 0x8C080103, // 0007 GETMET R2 R0 K3
+ 0x7C080200, // 0008 CALL R2 1
+ 0x80000000, // 0009 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: read_attribute
+********************************************************************/
+be_local_closure(Matter_Plugin_OnOff_read_attribute, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[15]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(TLV),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(attribute),
+ /* K5 */ be_const_int(3),
+ /* K6 */ be_const_int(0),
+ /* K7 */ be_nested_str_weak(create_TLV),
+ /* K8 */ be_nested_str_weak(U2),
+ /* K9 */ be_const_int(1),
+ /* K10 */ be_nested_str_weak(U1),
+ /* K11 */ be_nested_str_weak(U4),
+ /* K12 */ be_nested_str_weak(BOOL),
+ /* K13 */ be_nested_str_weak(get_onoff),
+ /* K14 */ be_nested_str_weak(read_attribute),
+ }),
+ be_str_weak(read_attribute),
+ &be_const_str_solidified,
+ ( &(const binstruction[174]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x88100902, // 0002 GETMBR R4 R4 K2
+ 0x88140503, // 0003 GETMBR R5 R2 K3
+ 0x88180504, // 0004 GETMBR R6 R2 K4
+ 0x1C1C0B05, // 0005 EQ R7 R5 K5
+ 0x781E0021, // 0006 JMPF R7 #0029
+ 0x1C1C0D06, // 0007 EQ R7 R6 K6
+ 0x781E0005, // 0008 JMPF R7 #000F
+ 0x8C1C0907, // 0009 GETMET R7 R4 K7
+ 0x88240908, // 000A GETMBR R9 R4 K8
+ 0x58280006, // 000B LDCONST R10 K6
+ 0x7C1C0600, // 000C CALL R7 3
+ 0x80040E00, // 000D RET 1 R7
+ 0x70020018, // 000E JMP #0028
+ 0x1C1C0D09, // 000F EQ R7 R6 K9
+ 0x781E0005, // 0010 JMPF R7 #0017
+ 0x8C1C0907, // 0011 GETMET R7 R4 K7
+ 0x8824090A, // 0012 GETMBR R9 R4 K10
+ 0x58280006, // 0013 LDCONST R10 K6
+ 0x7C1C0600, // 0014 CALL R7 3
+ 0x80040E00, // 0015 RET 1 R7
+ 0x70020010, // 0016 JMP #0028
+ 0x541EFFFB, // 0017 LDINT R7 65532
+ 0x1C1C0C07, // 0018 EQ R7 R6 R7
+ 0x781E0005, // 0019 JMPF R7 #0020
+ 0x8C1C0907, // 001A GETMET R7 R4 K7
+ 0x8824090B, // 001B GETMBR R9 R4 K11
+ 0x58280006, // 001C LDCONST R10 K6
+ 0x7C1C0600, // 001D CALL R7 3
+ 0x80040E00, // 001E RET 1 R7
+ 0x70020007, // 001F JMP #0028
+ 0x541EFFFC, // 0020 LDINT R7 65533
+ 0x1C1C0C07, // 0021 EQ R7 R6 R7
+ 0x781E0004, // 0022 JMPF R7 #0028
+ 0x8C1C0907, // 0023 GETMET R7 R4 K7
+ 0x8824090B, // 0024 GETMBR R9 R4 K11
+ 0x542A0003, // 0025 LDINT R10 4
+ 0x7C1C0600, // 0026 CALL R7 3
+ 0x80040E00, // 0027 RET 1 R7
+ 0x70020083, // 0028 JMP #00AD
+ 0x541E0003, // 0029 LDINT R7 4
+ 0x1C1C0A07, // 002A EQ R7 R5 R7
+ 0x781E0016, // 002B JMPF R7 #0043
+ 0x1C1C0D06, // 002C EQ R7 R6 K6
+ 0x781E0002, // 002D JMPF R7 #0031
+ 0x4C1C0000, // 002E LDNIL R7
+ 0x80040E00, // 002F RET 1 R7
+ 0x70020010, // 0030 JMP #0042
+ 0x541EFFFB, // 0031 LDINT R7 65532
+ 0x1C1C0C07, // 0032 EQ R7 R6 R7
+ 0x781E0005, // 0033 JMPF R7 #003A
+ 0x8C1C0907, // 0034 GETMET R7 R4 K7
+ 0x8824090B, // 0035 GETMBR R9 R4 K11
+ 0x58280006, // 0036 LDCONST R10 K6
+ 0x7C1C0600, // 0037 CALL R7 3
+ 0x80040E00, // 0038 RET 1 R7
+ 0x70020007, // 0039 JMP #0042
+ 0x541EFFFC, // 003A LDINT R7 65533
+ 0x1C1C0C07, // 003B EQ R7 R6 R7
+ 0x781E0004, // 003C JMPF R7 #0042
+ 0x8C1C0907, // 003D GETMET R7 R4 K7
+ 0x8824090B, // 003E GETMBR R9 R4 K11
+ 0x542A0003, // 003F LDINT R10 4
+ 0x7C1C0600, // 0040 CALL R7 3
+ 0x80040E00, // 0041 RET 1 R7
+ 0x70020069, // 0042 JMP #00AD
+ 0x541E0004, // 0043 LDINT R7 5
+ 0x1C1C0A07, // 0044 EQ R7 R5 R7
+ 0x781E0011, // 0045 JMPF R7 #0058
+ 0x541EFFFB, // 0046 LDINT R7 65532
+ 0x1C1C0C07, // 0047 EQ R7 R6 R7
+ 0x781E0005, // 0048 JMPF R7 #004F
+ 0x8C1C0907, // 0049 GETMET R7 R4 K7
+ 0x8824090B, // 004A GETMBR R9 R4 K11
+ 0x58280006, // 004B LDCONST R10 K6
+ 0x7C1C0600, // 004C CALL R7 3
+ 0x80040E00, // 004D RET 1 R7
+ 0x70020007, // 004E JMP #0057
+ 0x541EFFFC, // 004F LDINT R7 65533
+ 0x1C1C0C07, // 0050 EQ R7 R6 R7
+ 0x781E0004, // 0051 JMPF R7 #0057
+ 0x8C1C0907, // 0052 GETMET R7 R4 K7
+ 0x8824090B, // 0053 GETMBR R9 R4 K11
+ 0x542A0003, // 0054 LDINT R10 4
+ 0x7C1C0600, // 0055 CALL R7 3
+ 0x80040E00, // 0056 RET 1 R7
+ 0x70020054, // 0057 JMP #00AD
+ 0x541E0005, // 0058 LDINT R7 6
+ 0x1C1C0A07, // 0059 EQ R7 R5 R7
+ 0x781E001A, // 005A JMPF R7 #0076
+ 0x1C1C0D06, // 005B EQ R7 R6 K6
+ 0x781E0006, // 005C JMPF R7 #0064
+ 0x8C1C0907, // 005D GETMET R7 R4 K7
+ 0x8824090C, // 005E GETMBR R9 R4 K12
+ 0x8C28010D, // 005F GETMET R10 R0 K13
+ 0x7C280200, // 0060 CALL R10 1
+ 0x7C1C0600, // 0061 CALL R7 3
+ 0x80040E00, // 0062 RET 1 R7
+ 0x70020010, // 0063 JMP #0075
+ 0x541EFFFB, // 0064 LDINT R7 65532
+ 0x1C1C0C07, // 0065 EQ R7 R6 R7
+ 0x781E0005, // 0066 JMPF R7 #006D
+ 0x8C1C0907, // 0067 GETMET R7 R4 K7
+ 0x8824090B, // 0068 GETMBR R9 R4 K11
+ 0x58280006, // 0069 LDCONST R10 K6
+ 0x7C1C0600, // 006A CALL R7 3
+ 0x80040E00, // 006B RET 1 R7
+ 0x70020007, // 006C JMP #0075
+ 0x541EFFFC, // 006D LDINT R7 65533
+ 0x1C1C0C07, // 006E EQ R7 R6 R7
+ 0x781E0004, // 006F JMPF R7 #0075
+ 0x8C1C0907, // 0070 GETMET R7 R4 K7
+ 0x8824090B, // 0071 GETMBR R9 R4 K11
+ 0x542A0003, // 0072 LDINT R10 4
+ 0x7C1C0600, // 0073 CALL R7 3
+ 0x80040E00, // 0074 RET 1 R7
+ 0x70020036, // 0075 JMP #00AD
+ 0x541E0007, // 0076 LDINT R7 8
+ 0x1C1C0A07, // 0077 EQ R7 R5 R7
+ 0x781E002B, // 0078 JMPF R7 #00A5
+ 0x1C1C0D06, // 0079 EQ R7 R6 K6
+ 0x781E0005, // 007A JMPF R7 #0081
+ 0x8C1C0907, // 007B GETMET R7 R4 K7
+ 0x8824090A, // 007C GETMBR R9 R4 K10
+ 0x542A0087, // 007D LDINT R10 136
+ 0x7C1C0600, // 007E CALL R7 3
+ 0x80040E00, // 007F RET 1 R7
+ 0x70020022, // 0080 JMP #00A4
+ 0x541E000E, // 0081 LDINT R7 15
+ 0x1C1C0C07, // 0082 EQ R7 R6 R7
+ 0x781E0005, // 0083 JMPF R7 #008A
+ 0x8C1C0907, // 0084 GETMET R7 R4 K7
+ 0x8824090A, // 0085 GETMBR R9 R4 K10
+ 0x58280006, // 0086 LDCONST R10 K6
+ 0x7C1C0600, // 0087 CALL R7 3
+ 0x80040E00, // 0088 RET 1 R7
+ 0x70020019, // 0089 JMP #00A4
+ 0x541E000F, // 008A LDINT R7 16
+ 0x1C1C0C07, // 008B EQ R7 R6 R7
+ 0x781E0005, // 008C JMPF R7 #0093
+ 0x8C1C0907, // 008D GETMET R7 R4 K7
+ 0x8824090A, // 008E GETMBR R9 R4 K10
+ 0x58280009, // 008F LDCONST R10 K9
+ 0x7C1C0600, // 0090 CALL R7 3
+ 0x80040E00, // 0091 RET 1 R7
+ 0x70020010, // 0092 JMP #00A4
+ 0x541EFFFB, // 0093 LDINT R7 65532
+ 0x1C1C0C07, // 0094 EQ R7 R6 R7
+ 0x781E0005, // 0095 JMPF R7 #009C
+ 0x8C1C0907, // 0096 GETMET R7 R4 K7
+ 0x8824090B, // 0097 GETMBR R9 R4 K11
+ 0x58280006, // 0098 LDCONST R10 K6
+ 0x7C1C0600, // 0099 CALL R7 3
+ 0x80040E00, // 009A RET 1 R7
+ 0x70020007, // 009B JMP #00A4
+ 0x541EFFFC, // 009C LDINT R7 65533
+ 0x1C1C0C07, // 009D EQ R7 R6 R7
+ 0x781E0004, // 009E JMPF R7 #00A4
+ 0x8C1C0907, // 009F GETMET R7 R4 K7
+ 0x8824090B, // 00A0 GETMBR R9 R4 K11
+ 0x542A0003, // 00A1 LDINT R10 4
+ 0x7C1C0600, // 00A2 CALL R7 3
+ 0x80040E00, // 00A3 RET 1 R7
+ 0x70020007, // 00A4 JMP #00AD
+ 0x601C0003, // 00A5 GETGBL R7 G3
+ 0x5C200000, // 00A6 MOVE R8 R0
+ 0x7C1C0200, // 00A7 CALL R7 1
+ 0x8C1C0F0E, // 00A8 GETMET R7 R7 K14
+ 0x5C240200, // 00A9 MOVE R9 R1
+ 0x5C280400, // 00AA MOVE R10 R2
+ 0x7C1C0600, // 00AB CALL R7 3
+ 0x80040E00, // 00AC RET 1 R7
+ 0x80000000, // 00AD RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_Plugin_OnOff_init, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(init),
+ /* K1 */ be_nested_str_weak(get_onoff),
+ /* K2 */ be_const_int(0),
+ /* K3 */ be_nested_str_weak(tasmota_relay_index),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[15]) { /* code */
+ 0x60100003, // 0000 GETGBL R4 G3
+ 0x5C140000, // 0001 MOVE R5 R0
+ 0x7C100200, // 0002 CALL R4 1
+ 0x8C100900, // 0003 GETMET R4 R4 K0
+ 0x5C180200, // 0004 MOVE R6 R1
+ 0x5C1C0400, // 0005 MOVE R7 R2
+ 0x7C100600, // 0006 CALL R4 3
+ 0x8C100101, // 0007 GETMET R4 R0 K1
+ 0x7C100200, // 0008 CALL R4 1
+ 0x4C100000, // 0009 LDNIL R4
+ 0x1C100604, // 000A EQ R4 R3 R4
+ 0x78120000, // 000B JMPF R4 #000D
+ 0x580C0002, // 000C LDCONST R3 K2
+ 0x90020603, // 000D SETMBR R0 K3 R3
+ 0x80000000, // 000E RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: every_second
+********************************************************************/
+be_local_closure(Matter_Plugin_OnOff_every_second, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(get_onoff),
+ }),
+ be_str_weak(every_second),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x8C040100, // 0000 GETMET R1 R0 K0
+ 0x7C040200, // 0001 CALL R1 1
+ 0x80000000, // 0002 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_Plugin_OnOff
+********************************************************************/
+extern const bclass be_class_Matter_Plugin;
+be_local_class(Matter_Plugin_OnOff,
+ 2,
+ &be_class_Matter_Plugin,
+ be_nested_map(11,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(every_second, -1), be_const_closure(Matter_Plugin_OnOff_every_second_closure) },
+ { be_const_key_weak(get_onoff, 8), be_const_closure(Matter_Plugin_OnOff_get_onoff_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_Plugin_OnOff_init_closure) },
+ { be_const_key_weak(shadow_onoff, 5), be_const_var(1) },
+ { be_const_key_weak(TYPES, 7), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(1,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_int(266, -1), be_const_int(2) },
+ })) ) } )) },
+ { be_const_key_weak(read_attribute, -1), be_const_closure(Matter_Plugin_OnOff_read_attribute_closure) },
+ { be_const_key_weak(CLUSTERS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(4,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_int(4, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(3,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(65532),
+ be_const_int(65533),
+ })) ) } )) },
+ { be_const_key_int(5, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(8,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ be_const_int(2),
+ be_const_int(3),
+ be_const_int(4),
+ be_const_int(5),
+ be_const_int(65532),
+ be_const_int(65533),
+ })) ) } )) },
+ { be_const_key_int(6, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(3,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(65532),
+ be_const_int(65533),
+ })) ) } )) },
+ { be_const_key_int(3, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(4,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ be_const_int(65532),
+ be_const_int(65533),
+ })) ) } )) },
+ })) ) } )) },
+ { be_const_key_weak(set_onoff, -1), be_const_closure(Matter_Plugin_OnOff_set_onoff_closure) },
+ { be_const_key_weak(onoff_changed, -1), be_const_closure(Matter_Plugin_OnOff_onoff_changed_closure) },
+ { be_const_key_weak(tasmota_relay_index, 2), be_const_var(0) },
+ { be_const_key_weak(invoke_request, 0), be_const_closure(Matter_Plugin_OnOff_invoke_request_closure) },
+ })),
+ be_str_weak(Matter_Plugin_OnOff)
+);
+/*******************************************************************/
+
+void be_load_Matter_Plugin_OnOff_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_Plugin_OnOff);
+ be_setglobal(vm, "Matter_Plugin_OnOff");
+ be_pop(vm, 1);
+}
+/********************************************************************/
+/* End of solidification */
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Relay.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Relay.h
deleted file mode 100644
index 8a68d6822..000000000
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Relay.h
+++ /dev/null
@@ -1,246 +0,0 @@
-/* Solidification of Matter_Plugin_Relay.h */
-/********************************************************************\
-* Generated code, don't edit *
-\********************************************************************/
-#include "be_constobj.h"
-
-extern const bclass be_class_Matter_Plugin_Relay;
-
-/********************************************************************
-** Solidified function: read_attribute
-********************************************************************/
-be_local_closure(Matter_Plugin_Relay_read_attribute, /* name */
- be_nested_proto(
- 15, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[17]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(TLV),
- /* K3 */ be_nested_str_weak(cluster),
- /* K4 */ be_nested_str_weak(attribute),
- /* K5 */ be_const_int(0),
- /* K6 */ be_nested_str_weak(Matter_TLV_array),
- /* K7 */ be_nested_str_weak(add_struct),
- /* K8 */ be_nested_str_weak(add_TLV),
- /* K9 */ be_nested_str_weak(U2),
- /* K10 */ be_nested_str_weak(TYPES),
- /* K11 */ be_const_int(1),
- /* K12 */ be_nested_str_weak(get_cluster_list),
- /* K13 */ be_nested_str_weak(U4),
- /* K14 */ be_nested_str_weak(stop_iteration),
- /* K15 */ be_const_int(2),
- /* K16 */ be_const_int(3),
- }),
- be_str_weak(read_attribute),
- &be_const_str_solidified,
- ( &(const binstruction[66]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0xB8120200, // 0001 GETNGBL R4 K1
- 0x88100902, // 0002 GETMBR R4 R4 K2
- 0x88140503, // 0003 GETMBR R5 R2 K3
- 0x88180504, // 0004 GETMBR R6 R2 K4
- 0x541E001C, // 0005 LDINT R7 29
- 0x1C1C0A07, // 0006 EQ R7 R5 R7
- 0x781E0038, // 0007 JMPF R7 #0041
- 0x1C1C0D05, // 0008 EQ R7 R6 K5
- 0x781E0010, // 0009 JMPF R7 #001B
- 0x8C1C0906, // 000A GETMET R7 R4 K6
- 0x7C1C0200, // 000B CALL R7 1
- 0x8C200F07, // 000C GETMET R8 R7 K7
- 0x7C200200, // 000D CALL R8 1
- 0x8C241108, // 000E GETMET R9 R8 K8
- 0x582C0005, // 000F LDCONST R11 K5
- 0x88300909, // 0010 GETMBR R12 R4 K9
- 0x8834010A, // 0011 GETMBR R13 R0 K10
- 0x94341B05, // 0012 GETIDX R13 R13 K5
- 0x7C240800, // 0013 CALL R9 4
- 0x8C241108, // 0014 GETMET R9 R8 K8
- 0x582C000B, // 0015 LDCONST R11 K11
- 0x88300909, // 0016 GETMBR R12 R4 K9
- 0x5834000B, // 0017 LDCONST R13 K11
- 0x7C240800, // 0018 CALL R9 4
- 0x80040E00, // 0019 RET 1 R7
- 0x70020025, // 001A JMP #0041
- 0x1C1C0D0B, // 001B EQ R7 R6 K11
- 0x781E0013, // 001C JMPF R7 #0031
- 0x8C1C0906, // 001D GETMET R7 R4 K6
- 0x7C1C0200, // 001E CALL R7 1
- 0x60200010, // 001F GETGBL R8 G16
- 0x8C24010C, // 0020 GETMET R9 R0 K12
- 0x7C240200, // 0021 CALL R9 1
- 0x7C200200, // 0022 CALL R8 1
- 0xA8020007, // 0023 EXBLK 0 #002C
- 0x5C241000, // 0024 MOVE R9 R8
- 0x7C240000, // 0025 CALL R9 0
- 0x8C280F08, // 0026 GETMET R10 R7 K8
- 0x4C300000, // 0027 LDNIL R12
- 0x8834090D, // 0028 GETMBR R13 R4 K13
- 0x5C381200, // 0029 MOVE R14 R9
- 0x7C280800, // 002A CALL R10 4
- 0x7001FFF7, // 002B JMP #0024
- 0x5820000E, // 002C LDCONST R8 K14
- 0xAC200200, // 002D CATCH R8 1 0
- 0xB0080000, // 002E RAISE 2 R0 R0
- 0x80040E00, // 002F RET 1 R7
- 0x7002000F, // 0030 JMP #0041
- 0x1C1C0D0F, // 0031 EQ R7 R6 K15
- 0x781E0008, // 0032 JMPF R7 #003C
- 0x8C1C0906, // 0033 GETMET R7 R4 K6
- 0x7C1C0200, // 0034 CALL R7 1
- 0x8C200F08, // 0035 GETMET R8 R7 K8
- 0x4C280000, // 0036 LDNIL R10
- 0x882C0909, // 0037 GETMBR R11 R4 K9
- 0x54320005, // 0038 LDINT R12 6
- 0x7C200800, // 0039 CALL R8 4
- 0x80040E00, // 003A RET 1 R7
- 0x70020004, // 003B JMP #0041
- 0x1C1C0D10, // 003C EQ R7 R6 K16
- 0x781E0002, // 003D JMPF R7 #0041
- 0x8C1C0906, // 003E GETMET R7 R4 K6
- 0x7C1C0200, // 003F CALL R7 1
- 0x80040E00, // 0040 RET 1 R7
- 0x80000000, // 0041 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(Matter_Plugin_Relay_init, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 5]) { /* constants */
- /* K0 */ be_nested_str_weak(init),
- /* K1 */ be_nested_str_weak(endpoints),
- /* K2 */ be_nested_str_weak(ENDPOINTS),
- /* K3 */ be_nested_str_weak(clusters),
- /* K4 */ be_nested_str_weak(CLUSTERS),
- }),
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[11]) { /* code */
- 0x60080003, // 0000 GETGBL R2 G3
- 0x5C0C0000, // 0001 MOVE R3 R0
- 0x7C080200, // 0002 CALL R2 1
- 0x8C080500, // 0003 GETMET R2 R2 K0
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x88080102, // 0006 GETMBR R2 R0 K2
- 0x90020202, // 0007 SETMBR R0 K1 R2
- 0x88080104, // 0008 GETMBR R2 R0 K4
- 0x90020602, // 0009 SETMBR R0 K3 R2
- 0x80000000, // 000A RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: invoke_request
-********************************************************************/
-be_local_closure(Matter_Plugin_Relay_invoke_request, /* name */
- be_nested_proto(
- 4, /* nstack */
- 4, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 0, /* has constants */
- NULL, /* no const */
- be_str_weak(invoke_request),
- &be_const_str_solidified,
- ( &(const binstruction[ 1]) { /* code */
- 0x80000000, // 0000 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: Matter_Plugin_Relay
-********************************************************************/
-extern const bclass be_class_Matter_Plugin;
-be_local_class(Matter_Plugin_Relay,
- 0,
- &be_class_Matter_Plugin,
- be_nested_map(6,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(read_attribute, -1), be_const_closure(Matter_Plugin_Relay_read_attribute_closure) },
- { be_const_key_weak(ENDPOINTS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(1,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(1),
- })) ) } )) },
- { be_const_key_weak(TYPES, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(1,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(256),
- })) ) } )) },
- { be_const_key_weak(init, -1), be_const_closure(Matter_Plugin_Relay_init_closure) },
- { be_const_key_weak(CLUSTERS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(6,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_int(6, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(1,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(0),
- })) ) } )) },
- { be_const_key_int(29, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(4,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(0),
- be_const_int(1),
- be_const_int(2),
- be_const_int(3),
- })) ) } )) },
- { be_const_key_int(8, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(0,
- ( (struct bvalue*) &(const bvalue[]) {
- })) ) } )) },
- { be_const_key_int(3, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(0,
- ( (struct bvalue*) &(const bvalue[]) {
- })) ) } )) },
- { be_const_key_int(4, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(0,
- ( (struct bvalue*) &(const bvalue[]) {
- })) ) } )) },
- { be_const_key_int(5, 1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(0,
- ( (struct bvalue*) &(const bvalue[]) {
- })) ) } )) },
- })) ) } )) },
- { be_const_key_weak(invoke_request, -1), be_const_closure(Matter_Plugin_Relay_invoke_request_closure) },
- })),
- be_str_weak(Matter_Plugin_Relay)
-);
-/*******************************************************************/
-
-void be_load_Matter_Plugin_Relay_class(bvm *vm) {
- be_pushntvclass(vm, &be_class_Matter_Plugin_Relay);
- be_setglobal(vm, "Matter_Plugin_Relay");
- be_pop(vm, 1);
-}
-/********************************************************************/
-/* End of solidification */
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Root.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Root.h
new file mode 100644
index 000000000..b8eed6db6
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Root.h
@@ -0,0 +1,2201 @@
+/* Solidification of Matter_Plugin_Root.h */
+/********************************************************************\
+* Generated code, don't edit *
+\********************************************************************/
+#include "be_constobj.h"
+
+extern const bclass be_class_Matter_Plugin_Root;
+
+/********************************************************************
+** Solidified function: read_attribute
+********************************************************************/
+be_local_closure(Matter_Plugin_Root_read_attribute, /* name */
+ be_nested_proto(
+ 24, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[87]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(TLV),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(attribute),
+ /* K5 */ be_const_int(0),
+ /* K6 */ be_nested_str_weak(create_TLV),
+ /* K7 */ be_nested_str_weak(U8),
+ /* K8 */ be_nested_str_weak(_breadcrumb),
+ /* K9 */ be_const_int(1),
+ /* K10 */ be_nested_str_weak(Matter_TLV_struct),
+ /* K11 */ be_nested_str_weak(add_TLV),
+ /* K12 */ be_nested_str_weak(U2),
+ /* K13 */ be_const_int(2),
+ /* K14 */ be_nested_str_weak(U1),
+ /* K15 */ be_const_int(3),
+ /* K16 */ be_nested_str_weak(BOOL),
+ /* K17 */ be_nested_str_weak(Matter_TLV_array),
+ /* K18 */ be_nested_str_weak(tasmota),
+ /* K19 */ be_nested_str_weak(eth),
+ /* K20 */ be_nested_str_weak(up),
+ /* K21 */ be_nested_str_weak(add_struct),
+ /* K22 */ be_nested_str_weak(UTF1),
+ /* K23 */ be_nested_str_weak(ethernet),
+ /* K24 */ be_nested_str_weak(NULL),
+ /* K25 */ be_nested_str_weak(fromhex),
+ /* K26 */ be_nested_str_weak(replace),
+ /* K27 */ be_nested_str_weak(find),
+ /* K28 */ be_nested_str_weak(mac),
+ /* K29 */ be_nested_str_weak(),
+ /* K30 */ be_nested_str_weak(_X3A),
+ /* K31 */ be_nested_str_weak(B1),
+ /* K32 */ be_nested_str_weak(add_array),
+ /* K33 */ be_nested_str_weak(get_ip_bytes),
+ /* K34 */ be_nested_str_weak(ip),
+ /* K35 */ be_nested_str_weak(ip6local),
+ /* K36 */ be_nested_str_weak(ip6),
+ /* K37 */ be_nested_str_weak(wifi),
+ /* K38 */ be_nested_str_weak(cmd),
+ /* K39 */ be_nested_str_weak(Status_X201),
+ /* K40 */ be_nested_str_weak(StatusPRM),
+ /* K41 */ be_nested_str_weak(BootCount),
+ /* K42 */ be_nested_str_weak(U4),
+ /* K43 */ be_nested_str_weak(Status_X2011),
+ /* K44 */ be_nested_str_weak(StatusSTS),
+ /* K45 */ be_nested_str_weak(UptimeSec),
+ /* K46 */ be_nested_str_weak(int64),
+ /* K47 */ be_nested_str_weak(rtc),
+ /* K48 */ be_nested_str_weak(utc),
+ /* K49 */ be_const_int(1000000),
+ /* K50 */ be_nested_str_weak(local),
+ /* K51 */ be_nested_str_weak(device),
+ /* K52 */ be_nested_str_weak(sessions),
+ /* K53 */ be_nested_str_weak(active_fabrics),
+ /* K54 */ be_nested_str_weak(B2),
+ /* K55 */ be_nested_str_weak(get_noc),
+ /* K56 */ be_nested_str_weak(get_icac),
+ /* K57 */ be_nested_str_weak(get_fabric_index),
+ /* K58 */ be_nested_str_weak(stop_iteration),
+ /* K59 */ be_nested_str_weak(parse),
+ /* K60 */ be_nested_str_weak(get_ca),
+ /* K61 */ be_nested_str_weak(findsubval),
+ /* K62 */ be_nested_str_weak(get_admin_vendor),
+ /* K63 */ be_nested_str_weak(get_fabric_id),
+ /* K64 */ be_nested_str_weak(get_device_id),
+ /* K65 */ be_nested_str_weak(get_fabric_label),
+ /* K66 */ be_nested_str_weak(Fabric),
+ /* K67 */ be_nested_str_weak(_MAX_CASE),
+ /* K68 */ be_nested_str_weak(count_active_fabrics),
+ /* K69 */ be_nested_str_weak(_fabric),
+ /* K70 */ be_nested_str_weak(is_commissioning_open),
+ /* K71 */ be_nested_str_weak(is_root_commissioning_open),
+ /* K72 */ be_nested_str_weak(commissioning_admin_fabric),
+ /* K73 */ be_nested_str_weak(Tasmota),
+ /* K74 */ be_nested_str_weak(vendorid),
+ /* K75 */ be_nested_str_weak(DeviceName),
+ /* K76 */ be_nested_str_weak(FriendlyName),
+ /* K77 */ be_nested_str_weak(FriendlyName1),
+ /* K78 */ be_nested_str_weak(XX),
+ /* K79 */ be_nested_str_weak(Status_X202),
+ /* K80 */ be_nested_str_weak(StatusFWR),
+ /* K81 */ be_nested_str_weak(Hardware),
+ /* K82 */ be_nested_str_weak(Version),
+ /* K83 */ be_nested_str_weak(_X28),
+ /* K84 */ be_nested_str_weak(locale),
+ /* K85 */ be_nested_str_weak(get_active_endpoints),
+ /* K86 */ be_nested_str_weak(read_attribute),
+ }),
+ be_str_weak(read_attribute),
+ &be_const_str_solidified,
+ ( &(const binstruction[888]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x88100902, // 0002 GETMBR R4 R4 K2
+ 0x88140503, // 0003 GETMBR R5 R2 K3
+ 0x88180504, // 0004 GETMBR R6 R2 K4
+ 0x541E002F, // 0005 LDINT R7 48
+ 0x1C1C0A07, // 0006 EQ R7 R5 R7
+ 0x781E0030, // 0007 JMPF R7 #0039
+ 0x1C1C0D05, // 0008 EQ R7 R6 K5
+ 0x781E0005, // 0009 JMPF R7 #0010
+ 0x8C1C0906, // 000A GETMET R7 R4 K6
+ 0x88240907, // 000B GETMBR R9 R4 K7
+ 0x88280308, // 000C GETMBR R10 R1 K8
+ 0x7C1C0600, // 000D CALL R7 3
+ 0x80040E00, // 000E RET 1 R7
+ 0x70020027, // 000F JMP #0038
+ 0x1C1C0D09, // 0010 EQ R7 R6 K9
+ 0x781E000D, // 0011 JMPF R7 #0020
+ 0x8C1C090A, // 0012 GETMET R7 R4 K10
+ 0x7C1C0200, // 0013 CALL R7 1
+ 0x8C200F0B, // 0014 GETMET R8 R7 K11
+ 0x58280005, // 0015 LDCONST R10 K5
+ 0x882C090C, // 0016 GETMBR R11 R4 K12
+ 0x5432003B, // 0017 LDINT R12 60
+ 0x7C200800, // 0018 CALL R8 4
+ 0x8C200F0B, // 0019 GETMET R8 R7 K11
+ 0x58280009, // 001A LDCONST R10 K9
+ 0x882C090C, // 001B GETMBR R11 R4 K12
+ 0x54320383, // 001C LDINT R12 900
+ 0x7C200800, // 001D CALL R8 4
+ 0x80040E00, // 001E RET 1 R7
+ 0x70020017, // 001F JMP #0038
+ 0x1C1C0D0D, // 0020 EQ R7 R6 K13
+ 0x781E0005, // 0021 JMPF R7 #0028
+ 0x8C1C0906, // 0022 GETMET R7 R4 K6
+ 0x8824090E, // 0023 GETMBR R9 R4 K14
+ 0x5828000D, // 0024 LDCONST R10 K13
+ 0x7C1C0600, // 0025 CALL R7 3
+ 0x80040E00, // 0026 RET 1 R7
+ 0x7002000F, // 0027 JMP #0038
+ 0x1C1C0D0F, // 0028 EQ R7 R6 K15
+ 0x781E0005, // 0029 JMPF R7 #0030
+ 0x8C1C0906, // 002A GETMET R7 R4 K6
+ 0x8824090E, // 002B GETMBR R9 R4 K14
+ 0x5828000D, // 002C LDCONST R10 K13
+ 0x7C1C0600, // 002D CALL R7 3
+ 0x80040E00, // 002E RET 1 R7
+ 0x70020007, // 002F JMP #0038
+ 0x541E0003, // 0030 LDINT R7 4
+ 0x1C1C0C07, // 0031 EQ R7 R6 R7
+ 0x781E0004, // 0032 JMPF R7 #0038
+ 0x8C1C0906, // 0033 GETMET R7 R4 K6
+ 0x88240910, // 0034 GETMBR R9 R4 K16
+ 0x50280000, // 0035 LDBOOL R10 0 0
+ 0x7C1C0600, // 0036 CALL R7 3
+ 0x80040E00, // 0037 RET 1 R7
+ 0x7002033D, // 0038 JMP #0377
+ 0x541E0031, // 0039 LDINT R7 50
+ 0x1C1C0A07, // 003A EQ R7 R5 R7
+ 0x781E0000, // 003B JMPF R7 #003D
+ 0x70020339, // 003C JMP #0377
+ 0x541E0032, // 003D LDINT R7 51
+ 0x1C1C0A07, // 003E EQ R7 R5 R7
+ 0x781E00DC, // 003F JMPF R7 #011D
+ 0x1C1C0D05, // 0040 EQ R7 R6 K5
+ 0x781E00B5, // 0041 JMPF R7 #00F8
+ 0x8C1C0911, // 0042 GETMET R7 R4 K17
+ 0x7C1C0200, // 0043 CALL R7 1
+ 0xB8222400, // 0044 GETNGBL R8 K18
+ 0x8C201113, // 0045 GETMET R8 R8 K19
+ 0x7C200200, // 0046 CALL R8 1
+ 0x94241114, // 0047 GETIDX R9 R8 K20
+ 0x78260053, // 0048 JMPF R9 #009D
+ 0x8C240F15, // 0049 GETMET R9 R7 K21
+ 0x4C2C0000, // 004A LDNIL R11
+ 0x7C240400, // 004B CALL R9 2
+ 0x8C28130B, // 004C GETMET R10 R9 K11
+ 0x58300005, // 004D LDCONST R12 K5
+ 0x88340916, // 004E GETMBR R13 R4 K22
+ 0x58380017, // 004F LDCONST R14 K23
+ 0x7C280800, // 0050 CALL R10 4
+ 0x8C28130B, // 0051 GETMET R10 R9 K11
+ 0x58300009, // 0052 LDCONST R12 K9
+ 0x88340910, // 0053 GETMBR R13 R4 K16
+ 0x58380009, // 0054 LDCONST R14 K9
+ 0x7C280800, // 0055 CALL R10 4
+ 0x8C28130B, // 0056 GETMET R10 R9 K11
+ 0x5830000D, // 0057 LDCONST R12 K13
+ 0x88340910, // 0058 GETMBR R13 R4 K16
+ 0x58380009, // 0059 LDCONST R14 K9
+ 0x7C280800, // 005A CALL R10 4
+ 0x8C28130B, // 005B GETMET R10 R9 K11
+ 0x5830000F, // 005C LDCONST R12 K15
+ 0x88340918, // 005D GETMBR R13 R4 K24
+ 0x4C380000, // 005E LDNIL R14
+ 0x7C280800, // 005F CALL R10 4
+ 0x60280015, // 0060 GETGBL R10 G21
+ 0x7C280000, // 0061 CALL R10 0
+ 0x8C281519, // 0062 GETMET R10 R10 K25
+ 0x8C30071A, // 0063 GETMET R12 R3 K26
+ 0x8C38111B, // 0064 GETMET R14 R8 K27
+ 0x5840001C, // 0065 LDCONST R16 K28
+ 0x5844001D, // 0066 LDCONST R17 K29
+ 0x7C380600, // 0067 CALL R14 3
+ 0x583C001E, // 0068 LDCONST R15 K30
+ 0x5840001D, // 0069 LDCONST R16 K29
+ 0x7C300800, // 006A CALL R12 4
+ 0x7C280400, // 006B CALL R10 2
+ 0x8C2C130B, // 006C GETMET R11 R9 K11
+ 0x54360003, // 006D LDINT R13 4
+ 0x8838091F, // 006E GETMBR R14 R4 K31
+ 0x5C3C1400, // 006F MOVE R15 R10
+ 0x7C2C0800, // 0070 CALL R11 4
+ 0x8C2C1320, // 0071 GETMET R11 R9 K32
+ 0x54360004, // 0072 LDINT R13 5
+ 0x7C2C0400, // 0073 CALL R11 2
+ 0x8C30170B, // 0074 GETMET R12 R11 K11
+ 0x4C380000, // 0075 LDNIL R14
+ 0x883C091F, // 0076 GETMBR R15 R4 K31
+ 0xB8420200, // 0077 GETNGBL R16 K1
+ 0x8C402121, // 0078 GETMET R16 R16 K33
+ 0x8C48111B, // 0079 GETMET R18 R8 K27
+ 0x58500022, // 007A LDCONST R20 K34
+ 0x5854001D, // 007B LDCONST R21 K29
+ 0x7C480600, // 007C CALL R18 3
+ 0x7C400400, // 007D CALL R16 2
+ 0x7C300800, // 007E CALL R12 4
+ 0x8C301320, // 007F GETMET R12 R9 K32
+ 0x543A0005, // 0080 LDINT R14 6
+ 0x7C300400, // 0081 CALL R12 2
+ 0x8C34190B, // 0082 GETMET R13 R12 K11
+ 0x4C3C0000, // 0083 LDNIL R15
+ 0x8840091F, // 0084 GETMBR R16 R4 K31
+ 0xB8460200, // 0085 GETNGBL R17 K1
+ 0x8C442321, // 0086 GETMET R17 R17 K33
+ 0x8C4C111B, // 0087 GETMET R19 R8 K27
+ 0x58540023, // 0088 LDCONST R21 K35
+ 0x5858001D, // 0089 LDCONST R22 K29
+ 0x7C4C0600, // 008A CALL R19 3
+ 0x7C440400, // 008B CALL R17 2
+ 0x7C340800, // 008C CALL R13 4
+ 0x8C34190B, // 008D GETMET R13 R12 K11
+ 0x4C3C0000, // 008E LDNIL R15
+ 0x8840091F, // 008F GETMBR R16 R4 K31
+ 0xB8460200, // 0090 GETNGBL R17 K1
+ 0x8C442321, // 0091 GETMET R17 R17 K33
+ 0x8C4C111B, // 0092 GETMET R19 R8 K27
+ 0x58540024, // 0093 LDCONST R21 K36
+ 0x5858001D, // 0094 LDCONST R22 K29
+ 0x7C4C0600, // 0095 CALL R19 3
+ 0x7C440400, // 0096 CALL R17 2
+ 0x7C340800, // 0097 CALL R13 4
+ 0x8C34130B, // 0098 GETMET R13 R9 K11
+ 0x543E0006, // 0099 LDINT R15 7
+ 0x8840090E, // 009A GETMBR R16 R4 K14
+ 0x5844000D, // 009B LDCONST R17 K13
+ 0x7C340800, // 009C CALL R13 4
+ 0xB8262400, // 009D GETNGBL R9 K18
+ 0x8C241325, // 009E GETMET R9 R9 K37
+ 0x7C240200, // 009F CALL R9 1
+ 0x94281314, // 00A0 GETIDX R10 R9 K20
+ 0x782A0053, // 00A1 JMPF R10 #00F6
+ 0x8C280F15, // 00A2 GETMET R10 R7 K21
+ 0x4C300000, // 00A3 LDNIL R12
+ 0x7C280400, // 00A4 CALL R10 2
+ 0x8C2C150B, // 00A5 GETMET R11 R10 K11
+ 0x58340005, // 00A6 LDCONST R13 K5
+ 0x88380916, // 00A7 GETMBR R14 R4 K22
+ 0x583C0025, // 00A8 LDCONST R15 K37
+ 0x7C2C0800, // 00A9 CALL R11 4
+ 0x8C2C150B, // 00AA GETMET R11 R10 K11
+ 0x58340009, // 00AB LDCONST R13 K9
+ 0x88380910, // 00AC GETMBR R14 R4 K16
+ 0x583C0009, // 00AD LDCONST R15 K9
+ 0x7C2C0800, // 00AE CALL R11 4
+ 0x8C2C150B, // 00AF GETMET R11 R10 K11
+ 0x5834000D, // 00B0 LDCONST R13 K13
+ 0x88380910, // 00B1 GETMBR R14 R4 K16
+ 0x583C0009, // 00B2 LDCONST R15 K9
+ 0x7C2C0800, // 00B3 CALL R11 4
+ 0x8C2C150B, // 00B4 GETMET R11 R10 K11
+ 0x5834000F, // 00B5 LDCONST R13 K15
+ 0x88380918, // 00B6 GETMBR R14 R4 K24
+ 0x4C3C0000, // 00B7 LDNIL R15
+ 0x7C2C0800, // 00B8 CALL R11 4
+ 0x602C0015, // 00B9 GETGBL R11 G21
+ 0x7C2C0000, // 00BA CALL R11 0
+ 0x8C2C1719, // 00BB GETMET R11 R11 K25
+ 0x8C34071A, // 00BC GETMET R13 R3 K26
+ 0x8C3C131B, // 00BD GETMET R15 R9 K27
+ 0x5844001C, // 00BE LDCONST R17 K28
+ 0x5848001D, // 00BF LDCONST R18 K29
+ 0x7C3C0600, // 00C0 CALL R15 3
+ 0x5840001E, // 00C1 LDCONST R16 K30
+ 0x5844001D, // 00C2 LDCONST R17 K29
+ 0x7C340800, // 00C3 CALL R13 4
+ 0x7C2C0400, // 00C4 CALL R11 2
+ 0x8C30150B, // 00C5 GETMET R12 R10 K11
+ 0x543A0003, // 00C6 LDINT R14 4
+ 0x883C091F, // 00C7 GETMBR R15 R4 K31
+ 0x5C401600, // 00C8 MOVE R16 R11
+ 0x7C300800, // 00C9 CALL R12 4
+ 0x8C301520, // 00CA GETMET R12 R10 K32
+ 0x543A0004, // 00CB LDINT R14 5
+ 0x7C300400, // 00CC CALL R12 2
+ 0x8C34190B, // 00CD GETMET R13 R12 K11
+ 0x4C3C0000, // 00CE LDNIL R15
+ 0x8840091F, // 00CF GETMBR R16 R4 K31
+ 0xB8460200, // 00D0 GETNGBL R17 K1
+ 0x8C442321, // 00D1 GETMET R17 R17 K33
+ 0x8C4C131B, // 00D2 GETMET R19 R9 K27
+ 0x58540022, // 00D3 LDCONST R21 K34
+ 0x5858001D, // 00D4 LDCONST R22 K29
+ 0x7C4C0600, // 00D5 CALL R19 3
+ 0x7C440400, // 00D6 CALL R17 2
+ 0x7C340800, // 00D7 CALL R13 4
+ 0x8C341520, // 00D8 GETMET R13 R10 K32
+ 0x543E0005, // 00D9 LDINT R15 6
+ 0x7C340400, // 00DA CALL R13 2
+ 0x8C381B0B, // 00DB GETMET R14 R13 K11
+ 0x4C400000, // 00DC LDNIL R16
+ 0x8844091F, // 00DD GETMBR R17 R4 K31
+ 0xB84A0200, // 00DE GETNGBL R18 K1
+ 0x8C482521, // 00DF GETMET R18 R18 K33
+ 0x8C50131B, // 00E0 GETMET R20 R9 K27
+ 0x58580023, // 00E1 LDCONST R22 K35
+ 0x585C001D, // 00E2 LDCONST R23 K29
+ 0x7C500600, // 00E3 CALL R20 3
+ 0x7C480400, // 00E4 CALL R18 2
+ 0x7C380800, // 00E5 CALL R14 4
+ 0x8C381B0B, // 00E6 GETMET R14 R13 K11
+ 0x4C400000, // 00E7 LDNIL R16
+ 0x8844091F, // 00E8 GETMBR R17 R4 K31
+ 0xB84A0200, // 00E9 GETNGBL R18 K1
+ 0x8C482521, // 00EA GETMET R18 R18 K33
+ 0x8C50131B, // 00EB GETMET R20 R9 K27
+ 0x58580024, // 00EC LDCONST R22 K36
+ 0x585C001D, // 00ED LDCONST R23 K29
+ 0x7C500600, // 00EE CALL R20 3
+ 0x7C480400, // 00EF CALL R18 2
+ 0x7C380800, // 00F0 CALL R14 4
+ 0x8C38150B, // 00F1 GETMET R14 R10 K11
+ 0x54420006, // 00F2 LDINT R16 7
+ 0x8844090E, // 00F3 GETMBR R17 R4 K14
+ 0x58480009, // 00F4 LDCONST R18 K9
+ 0x7C380800, // 00F5 CALL R14 4
+ 0x80040E00, // 00F6 RET 1 R7
+ 0x70020023, // 00F7 JMP #011C
+ 0x1C1C0D09, // 00F8 EQ R7 R6 K9
+ 0x781E000B, // 00F9 JMPF R7 #0106
+ 0x8C1C0906, // 00FA GETMET R7 R4 K6
+ 0x8824090C, // 00FB GETMBR R9 R4 K12
+ 0xB82A2400, // 00FC GETNGBL R10 K18
+ 0x8C281526, // 00FD GETMET R10 R10 K38
+ 0x58300027, // 00FE LDCONST R12 K39
+ 0x50340200, // 00FF LDBOOL R13 1 0
+ 0x7C280600, // 0100 CALL R10 3
+ 0x94281528, // 0101 GETIDX R10 R10 K40
+ 0x94281529, // 0102 GETIDX R10 R10 K41
+ 0x7C1C0600, // 0103 CALL R7 3
+ 0x80040E00, // 0104 RET 1 R7
+ 0x70020015, // 0105 JMP #011C
+ 0x1C1C0D0D, // 0106 EQ R7 R6 K13
+ 0x781E000B, // 0107 JMPF R7 #0114
+ 0x8C1C0906, // 0108 GETMET R7 R4 K6
+ 0x8824092A, // 0109 GETMBR R9 R4 K42
+ 0xB82A2400, // 010A GETNGBL R10 K18
+ 0x8C281526, // 010B GETMET R10 R10 K38
+ 0x5830002B, // 010C LDCONST R12 K43
+ 0x50340200, // 010D LDBOOL R13 1 0
+ 0x7C280600, // 010E CALL R10 3
+ 0x9428152C, // 010F GETIDX R10 R10 K44
+ 0x9428152D, // 0110 GETIDX R10 R10 K45
+ 0x7C1C0600, // 0111 CALL R7 3
+ 0x80040E00, // 0112 RET 1 R7
+ 0x70020007, // 0113 JMP #011C
+ 0x541E0007, // 0114 LDINT R7 8
+ 0x1C1C0C07, // 0115 EQ R7 R6 R7
+ 0x781E0004, // 0116 JMPF R7 #011C
+ 0x8C1C0906, // 0117 GETMET R7 R4 K6
+ 0x88240910, // 0118 GETMBR R9 R4 K16
+ 0x50280000, // 0119 LDBOOL R10 0 0
+ 0x7C1C0600, // 011A CALL R7 3
+ 0x80040E00, // 011B RET 1 R7
+ 0x70020259, // 011C JMP #0377
+ 0x541E0033, // 011D LDINT R7 52
+ 0x1C1C0A07, // 011E EQ R7 R5 R7
+ 0x781E0000, // 011F JMPF R7 #0121
+ 0x70020255, // 0120 JMP #0377
+ 0x541E0037, // 0121 LDINT R7 56
+ 0x1C1C0A07, // 0122 EQ R7 R5 R7
+ 0x781E002C, // 0123 JMPF R7 #0151
+ 0x1C1C0D05, // 0124 EQ R7 R6 K5
+ 0x781E000F, // 0125 JMPF R7 #0136
+ 0xB81E5C00, // 0126 GETNGBL R7 K46
+ 0xB8222400, // 0127 GETNGBL R8 K18
+ 0x8C20112F, // 0128 GETMET R8 R8 K47
+ 0x7C200200, // 0129 CALL R8 1
+ 0x94201130, // 012A GETIDX R8 R8 K48
+ 0x7C1C0200, // 012B CALL R7 1
+ 0xB8225C00, // 012C GETNGBL R8 K46
+ 0x58240031, // 012D LDCONST R9 K49
+ 0x7C200200, // 012E CALL R8 1
+ 0x081C0E08, // 012F MUL R7 R7 R8
+ 0x8C200906, // 0130 GETMET R8 R4 K6
+ 0x88280907, // 0131 GETMBR R10 R4 K7
+ 0x5C2C0E00, // 0132 MOVE R11 R7
+ 0x7C200600, // 0133 CALL R8 3
+ 0x80041000, // 0134 RET 1 R8
+ 0x70020019, // 0135 JMP #0150
+ 0x1C1C0D09, // 0136 EQ R7 R6 K9
+ 0x781E0005, // 0137 JMPF R7 #013E
+ 0x8C1C0906, // 0138 GETMET R7 R4 K6
+ 0x8824090E, // 0139 GETMBR R9 R4 K14
+ 0x5828000F, // 013A LDCONST R10 K15
+ 0x7C1C0600, // 013B CALL R7 3
+ 0x80040E00, // 013C RET 1 R7
+ 0x70020011, // 013D JMP #0150
+ 0x541E0006, // 013E LDINT R7 7
+ 0x1C1C0C07, // 013F EQ R7 R6 R7
+ 0x781E000E, // 0140 JMPF R7 #0150
+ 0xB81E5C00, // 0141 GETNGBL R7 K46
+ 0xB8222400, // 0142 GETNGBL R8 K18
+ 0x8C20112F, // 0143 GETMET R8 R8 K47
+ 0x7C200200, // 0144 CALL R8 1
+ 0x94201132, // 0145 GETIDX R8 R8 K50
+ 0x7C1C0200, // 0146 CALL R7 1
+ 0xB8225C00, // 0147 GETNGBL R8 K46
+ 0x58240031, // 0148 LDCONST R9 K49
+ 0x7C200200, // 0149 CALL R8 1
+ 0x081C0E08, // 014A MUL R7 R7 R8
+ 0x8C200906, // 014B GETMET R8 R4 K6
+ 0x88280907, // 014C GETMBR R10 R4 K7
+ 0x5C2C0E00, // 014D MOVE R11 R7
+ 0x7C200600, // 014E CALL R8 3
+ 0x80041000, // 014F RET 1 R8
+ 0x70020225, // 0150 JMP #0377
+ 0x541E003D, // 0151 LDINT R7 62
+ 0x1C1C0A07, // 0152 EQ R7 R5 R7
+ 0x781E0090, // 0153 JMPF R7 #01E5
+ 0x1C1C0D05, // 0154 EQ R7 R6 K5
+ 0x781E0025, // 0155 JMPF R7 #017C
+ 0x8C1C0911, // 0156 GETMET R7 R4 K17
+ 0x7C1C0200, // 0157 CALL R7 1
+ 0x60200010, // 0158 GETGBL R8 G16
+ 0x88240133, // 0159 GETMBR R9 R0 K51
+ 0x88241334, // 015A GETMBR R9 R9 K52
+ 0x8C241335, // 015B GETMET R9 R9 K53
+ 0x7C240200, // 015C CALL R9 1
+ 0x7C200200, // 015D CALL R8 1
+ 0xA8020017, // 015E EXBLK 0 #0177
+ 0x5C241000, // 015F MOVE R9 R8
+ 0x7C240000, // 0160 CALL R9 0
+ 0x8C280F15, // 0161 GETMET R10 R7 K21
+ 0x4C300000, // 0162 LDNIL R12
+ 0x7C280400, // 0163 CALL R10 2
+ 0x8C2C150B, // 0164 GETMET R11 R10 K11
+ 0x58340009, // 0165 LDCONST R13 K9
+ 0x88380936, // 0166 GETMBR R14 R4 K54
+ 0x8C3C1337, // 0167 GETMET R15 R9 K55
+ 0x7C3C0200, // 0168 CALL R15 1
+ 0x7C2C0800, // 0169 CALL R11 4
+ 0x8C2C150B, // 016A GETMET R11 R10 K11
+ 0x5834000D, // 016B LDCONST R13 K13
+ 0x88380936, // 016C GETMBR R14 R4 K54
+ 0x8C3C1338, // 016D GETMET R15 R9 K56
+ 0x7C3C0200, // 016E CALL R15 1
+ 0x7C2C0800, // 016F CALL R11 4
+ 0x8C2C150B, // 0170 GETMET R11 R10 K11
+ 0x543600FD, // 0171 LDINT R13 254
+ 0x8838090C, // 0172 GETMBR R14 R4 K12
+ 0x8C3C1339, // 0173 GETMET R15 R9 K57
+ 0x7C3C0200, // 0174 CALL R15 1
+ 0x7C2C0800, // 0175 CALL R11 4
+ 0x7001FFE7, // 0176 JMP #015F
+ 0x5820003A, // 0177 LDCONST R8 K58
+ 0xAC200200, // 0178 CATCH R8 1 0
+ 0xB0080000, // 0179 RAISE 2 R0 R0
+ 0x80040E00, // 017A RET 1 R7
+ 0x70020067, // 017B JMP #01E4
+ 0x1C1C0D09, // 017C EQ R7 R6 K9
+ 0x781E003C, // 017D JMPF R7 #01BB
+ 0x8C1C0911, // 017E GETMET R7 R4 K17
+ 0x7C1C0200, // 017F CALL R7 1
+ 0x60200010, // 0180 GETGBL R8 G16
+ 0x88240133, // 0181 GETMBR R9 R0 K51
+ 0x88241334, // 0182 GETMBR R9 R9 K52
+ 0x8C241335, // 0183 GETMET R9 R9 K53
+ 0x7C240200, // 0184 CALL R9 1
+ 0x7C200200, // 0185 CALL R8 1
+ 0xA802002E, // 0186 EXBLK 0 #01B6
+ 0x5C241000, // 0187 MOVE R9 R8
+ 0x7C240000, // 0188 CALL R9 0
+ 0x8C28093B, // 0189 GETMET R10 R4 K59
+ 0x8C30133C, // 018A GETMET R12 R9 K60
+ 0x7C300200, // 018B CALL R12 1
+ 0x7C280400, // 018C CALL R10 2
+ 0x8C2C0F15, // 018D GETMET R11 R7 K21
+ 0x4C340000, // 018E LDNIL R13
+ 0x7C2C0400, // 018F CALL R11 2
+ 0x8C30170B, // 0190 GETMET R12 R11 K11
+ 0x58380009, // 0191 LDCONST R14 K9
+ 0x883C0936, // 0192 GETMBR R15 R4 K54
+ 0x8C40153D, // 0193 GETMET R16 R10 K61
+ 0x544A0008, // 0194 LDINT R18 9
+ 0x7C400400, // 0195 CALL R16 2
+ 0x7C300800, // 0196 CALL R12 4
+ 0x8C30170B, // 0197 GETMET R12 R11 K11
+ 0x5838000D, // 0198 LDCONST R14 K13
+ 0x883C090C, // 0199 GETMBR R15 R4 K12
+ 0x8C40133E, // 019A GETMET R16 R9 K62
+ 0x7C400200, // 019B CALL R16 1
+ 0x7C300800, // 019C CALL R12 4
+ 0x8C30170B, // 019D GETMET R12 R11 K11
+ 0x5838000F, // 019E LDCONST R14 K15
+ 0x883C0907, // 019F GETMBR R15 R4 K7
+ 0x8C40133F, // 01A0 GETMET R16 R9 K63
+ 0x7C400200, // 01A1 CALL R16 1
+ 0x7C300800, // 01A2 CALL R12 4
+ 0x8C30170B, // 01A3 GETMET R12 R11 K11
+ 0x543A0003, // 01A4 LDINT R14 4
+ 0x883C0907, // 01A5 GETMBR R15 R4 K7
+ 0x8C401340, // 01A6 GETMET R16 R9 K64
+ 0x7C400200, // 01A7 CALL R16 1
+ 0x7C300800, // 01A8 CALL R12 4
+ 0x8C30170B, // 01A9 GETMET R12 R11 K11
+ 0x543A0004, // 01AA LDINT R14 5
+ 0x883C0916, // 01AB GETMBR R15 R4 K22
+ 0x8C401341, // 01AC GETMET R16 R9 K65
+ 0x7C400200, // 01AD CALL R16 1
+ 0x7C300800, // 01AE CALL R12 4
+ 0x8C30170B, // 01AF GETMET R12 R11 K11
+ 0x543A00FD, // 01B0 LDINT R14 254
+ 0x883C090C, // 01B1 GETMBR R15 R4 K12
+ 0x8C401339, // 01B2 GETMET R16 R9 K57
+ 0x7C400200, // 01B3 CALL R16 1
+ 0x7C300800, // 01B4 CALL R12 4
+ 0x7001FFD0, // 01B5 JMP #0187
+ 0x5820003A, // 01B6 LDCONST R8 K58
+ 0xAC200200, // 01B7 CATCH R8 1 0
+ 0xB0080000, // 01B8 RAISE 2 R0 R0
+ 0x80040E00, // 01B9 RET 1 R7
+ 0x70020028, // 01BA JMP #01E4
+ 0x1C1C0D0D, // 01BB EQ R7 R6 K13
+ 0x781E0007, // 01BC JMPF R7 #01C5
+ 0x8C1C0906, // 01BD GETMET R7 R4 K6
+ 0x8824090E, // 01BE GETMBR R9 R4 K14
+ 0xB82A0200, // 01BF GETNGBL R10 K1
+ 0x88281542, // 01C0 GETMBR R10 R10 K66
+ 0x88281543, // 01C1 GETMBR R10 R10 K67
+ 0x7C1C0600, // 01C2 CALL R7 3
+ 0x80040E00, // 01C3 RET 1 R7
+ 0x7002001E, // 01C4 JMP #01E4
+ 0x1C1C0D0F, // 01C5 EQ R7 R6 K15
+ 0x781E0009, // 01C6 JMPF R7 #01D1
+ 0x881C0133, // 01C7 GETMBR R7 R0 K51
+ 0x881C0F34, // 01C8 GETMBR R7 R7 K52
+ 0x8C1C0F44, // 01C9 GETMET R7 R7 K68
+ 0x7C1C0200, // 01CA CALL R7 1
+ 0x8C200906, // 01CB GETMET R8 R4 K6
+ 0x8828090E, // 01CC GETMBR R10 R4 K14
+ 0x5C2C0E00, // 01CD MOVE R11 R7
+ 0x7C200600, // 01CE CALL R8 3
+ 0x80041000, // 01CF RET 1 R8
+ 0x70020012, // 01D0 JMP #01E4
+ 0x541E0003, // 01D1 LDINT R7 4
+ 0x1C1C0C07, // 01D2 EQ R7 R6 R7
+ 0x781E0000, // 01D3 JMPF R7 #01D5
+ 0x7002000E, // 01D4 JMP #01E4
+ 0x541E0004, // 01D5 LDINT R7 5
+ 0x1C1C0C07, // 01D6 EQ R7 R6 R7
+ 0x781E000B, // 01D7 JMPF R7 #01E4
+ 0x881C0345, // 01D8 GETMBR R7 R1 K69
+ 0x8C1C0F39, // 01D9 GETMET R7 R7 K57
+ 0x7C1C0200, // 01DA CALL R7 1
+ 0x4C200000, // 01DB LDNIL R8
+ 0x1C200E08, // 01DC EQ R8 R7 R8
+ 0x78220000, // 01DD JMPF R8 #01DF
+ 0x581C0005, // 01DE LDCONST R7 K5
+ 0x8C200906, // 01DF GETMET R8 R4 K6
+ 0x8828090E, // 01E0 GETMBR R10 R4 K14
+ 0x5C2C0E00, // 01E1 MOVE R11 R7
+ 0x7C200600, // 01E2 CALL R8 3
+ 0x80041000, // 01E3 RET 1 R8
+ 0x70020191, // 01E4 JMP #0377
+ 0x541E003B, // 01E5 LDINT R7 60
+ 0x1C1C0A07, // 01E6 EQ R7 R5 R7
+ 0x781E003C, // 01E7 JMPF R7 #0225
+ 0x1C1C0D05, // 01E8 EQ R7 R6 K5
+ 0x781E0012, // 01E9 JMPF R7 #01FD
+ 0x881C0133, // 01EA GETMBR R7 R0 K51
+ 0x8C1C0F46, // 01EB GETMET R7 R7 K70
+ 0x7C1C0200, // 01EC CALL R7 1
+ 0x88200133, // 01ED GETMBR R8 R0 K51
+ 0x8C201147, // 01EE GETMET R8 R8 K71
+ 0x7C200200, // 01EF CALL R8 1
+ 0x781E0004, // 01F0 JMPF R7 #01F6
+ 0x78220001, // 01F1 JMPF R8 #01F4
+ 0x5824000D, // 01F2 LDCONST R9 K13
+ 0x70020000, // 01F3 JMP #01F5
+ 0x58240009, // 01F4 LDCONST R9 K9
+ 0x70020000, // 01F5 JMP #01F7
+ 0x58240005, // 01F6 LDCONST R9 K5
+ 0x8C280906, // 01F7 GETMET R10 R4 K6
+ 0x8830090E, // 01F8 GETMBR R12 R4 K14
+ 0x5C341200, // 01F9 MOVE R13 R9
+ 0x7C280600, // 01FA CALL R10 3
+ 0x80041400, // 01FB RET 1 R10
+ 0x70020026, // 01FC JMP #0224
+ 0x1C1C0D09, // 01FD EQ R7 R6 K9
+ 0x781E0011, // 01FE JMPF R7 #0211
+ 0x881C0133, // 01FF GETMBR R7 R0 K51
+ 0x881C0F48, // 0200 GETMBR R7 R7 K72
+ 0x4C200000, // 0201 LDNIL R8
+ 0x20200E08, // 0202 NE R8 R7 R8
+ 0x78220006, // 0203 JMPF R8 #020B
+ 0x8C200906, // 0204 GETMET R8 R4 K6
+ 0x8828090C, // 0205 GETMBR R10 R4 K12
+ 0x8C2C0F39, // 0206 GETMET R11 R7 K57
+ 0x7C2C0200, // 0207 CALL R11 1
+ 0x7C200600, // 0208 CALL R8 3
+ 0x80041000, // 0209 RET 1 R8
+ 0x70020004, // 020A JMP #0210
+ 0x8C200906, // 020B GETMET R8 R4 K6
+ 0x88280918, // 020C GETMBR R10 R4 K24
+ 0x4C2C0000, // 020D LDNIL R11
+ 0x7C200600, // 020E CALL R8 3
+ 0x80041000, // 020F RET 1 R8
+ 0x70020012, // 0210 JMP #0224
+ 0x1C1C0D0D, // 0211 EQ R7 R6 K13
+ 0x781E0010, // 0212 JMPF R7 #0224
+ 0x881C0133, // 0213 GETMBR R7 R0 K51
+ 0x881C0F48, // 0214 GETMBR R7 R7 K72
+ 0x4C200000, // 0215 LDNIL R8
+ 0x20200E08, // 0216 NE R8 R7 R8
+ 0x78220006, // 0217 JMPF R8 #021F
+ 0x8C200906, // 0218 GETMET R8 R4 K6
+ 0x8828090C, // 0219 GETMBR R10 R4 K12
+ 0x8C2C0F3E, // 021A GETMET R11 R7 K62
+ 0x7C2C0200, // 021B CALL R11 1
+ 0x7C200600, // 021C CALL R8 3
+ 0x80041000, // 021D RET 1 R8
+ 0x70020004, // 021E JMP #0224
+ 0x8C200906, // 021F GETMET R8 R4 K6
+ 0x88280918, // 0220 GETMBR R10 R4 K24
+ 0x4C2C0000, // 0221 LDNIL R11
+ 0x7C200600, // 0222 CALL R8 3
+ 0x80041000, // 0223 RET 1 R8
+ 0x70020151, // 0224 JMP #0377
+ 0x541E0027, // 0225 LDINT R7 40
+ 0x1C1C0A07, // 0226 EQ R7 R5 R7
+ 0x781E00AE, // 0227 JMPF R7 #02D7
+ 0x1C1C0D05, // 0228 EQ R7 R6 K5
+ 0x781E0005, // 0229 JMPF R7 #0230
+ 0x8C1C0906, // 022A GETMET R7 R4 K6
+ 0x8824090C, // 022B GETMBR R9 R4 K12
+ 0x58280009, // 022C LDCONST R10 K9
+ 0x7C1C0600, // 022D CALL R7 3
+ 0x80040E00, // 022E RET 1 R7
+ 0x700200A5, // 022F JMP #02D6
+ 0x1C1C0D09, // 0230 EQ R7 R6 K9
+ 0x781E0005, // 0231 JMPF R7 #0238
+ 0x8C1C0906, // 0232 GETMET R7 R4 K6
+ 0x88240916, // 0233 GETMBR R9 R4 K22
+ 0x58280049, // 0234 LDCONST R10 K73
+ 0x7C1C0600, // 0235 CALL R7 3
+ 0x80040E00, // 0236 RET 1 R7
+ 0x7002009D, // 0237 JMP #02D6
+ 0x1C1C0D0D, // 0238 EQ R7 R6 K13
+ 0x781E0006, // 0239 JMPF R7 #0241
+ 0x8C1C0906, // 023A GETMET R7 R4 K6
+ 0x8824090C, // 023B GETMBR R9 R4 K12
+ 0x88280133, // 023C GETMBR R10 R0 K51
+ 0x8828154A, // 023D GETMBR R10 R10 K74
+ 0x7C1C0600, // 023E CALL R7 3
+ 0x80040E00, // 023F RET 1 R7
+ 0x70020094, // 0240 JMP #02D6
+ 0x1C1C0D0F, // 0241 EQ R7 R6 K15
+ 0x781E000A, // 0242 JMPF R7 #024E
+ 0x8C1C0906, // 0243 GETMET R7 R4 K6
+ 0x88240916, // 0244 GETMBR R9 R4 K22
+ 0xB82A2400, // 0245 GETNGBL R10 K18
+ 0x8C281526, // 0246 GETMET R10 R10 K38
+ 0x5830004B, // 0247 LDCONST R12 K75
+ 0x50340200, // 0248 LDBOOL R13 1 0
+ 0x7C280600, // 0249 CALL R10 3
+ 0x9428154B, // 024A GETIDX R10 R10 K75
+ 0x7C1C0600, // 024B CALL R7 3
+ 0x80040E00, // 024C RET 1 R7
+ 0x70020087, // 024D JMP #02D6
+ 0x541E0003, // 024E LDINT R7 4
+ 0x1C1C0C07, // 024F EQ R7 R6 R7
+ 0x781E0005, // 0250 JMPF R7 #0257
+ 0x8C1C0906, // 0251 GETMET R7 R4 K6
+ 0x8824090C, // 0252 GETMBR R9 R4 K12
+ 0x542A7FFF, // 0253 LDINT R10 32768
+ 0x7C1C0600, // 0254 CALL R7 3
+ 0x80040E00, // 0255 RET 1 R7
+ 0x7002007E, // 0256 JMP #02D6
+ 0x541E0004, // 0257 LDINT R7 5
+ 0x1C1C0C07, // 0258 EQ R7 R6 R7
+ 0x781E000A, // 0259 JMPF R7 #0265
+ 0x8C1C0906, // 025A GETMET R7 R4 K6
+ 0x88240916, // 025B GETMBR R9 R4 K22
+ 0xB82A2400, // 025C GETNGBL R10 K18
+ 0x8C281526, // 025D GETMET R10 R10 K38
+ 0x5830004C, // 025E LDCONST R12 K76
+ 0x50340200, // 025F LDBOOL R13 1 0
+ 0x7C280600, // 0260 CALL R10 3
+ 0x9428154D, // 0261 GETIDX R10 R10 K77
+ 0x7C1C0600, // 0262 CALL R7 3
+ 0x80040E00, // 0263 RET 1 R7
+ 0x70020070, // 0264 JMP #02D6
+ 0x541E0005, // 0265 LDINT R7 6
+ 0x1C1C0C07, // 0266 EQ R7 R6 R7
+ 0x781E0005, // 0267 JMPF R7 #026E
+ 0x8C1C0906, // 0268 GETMET R7 R4 K6
+ 0x88240916, // 0269 GETMBR R9 R4 K22
+ 0x5828004E, // 026A LDCONST R10 K78
+ 0x7C1C0600, // 026B CALL R7 3
+ 0x80040E00, // 026C RET 1 R7
+ 0x70020067, // 026D JMP #02D6
+ 0x541E0006, // 026E LDINT R7 7
+ 0x1C1C0C07, // 026F EQ R7 R6 R7
+ 0x781E0005, // 0270 JMPF R7 #0277
+ 0x8C1C0906, // 0271 GETMET R7 R4 K6
+ 0x8824090C, // 0272 GETMBR R9 R4 K12
+ 0x58280005, // 0273 LDCONST R10 K5
+ 0x7C1C0600, // 0274 CALL R7 3
+ 0x80040E00, // 0275 RET 1 R7
+ 0x7002005E, // 0276 JMP #02D6
+ 0x541E0007, // 0277 LDINT R7 8
+ 0x1C1C0C07, // 0278 EQ R7 R6 R7
+ 0x781E000B, // 0279 JMPF R7 #0286
+ 0x8C1C0906, // 027A GETMET R7 R4 K6
+ 0x88240916, // 027B GETMBR R9 R4 K22
+ 0xB82A2400, // 027C GETNGBL R10 K18
+ 0x8C281526, // 027D GETMET R10 R10 K38
+ 0x5830004F, // 027E LDCONST R12 K79
+ 0x50340200, // 027F LDBOOL R13 1 0
+ 0x7C280600, // 0280 CALL R10 3
+ 0x94281550, // 0281 GETIDX R10 R10 K80
+ 0x94281551, // 0282 GETIDX R10 R10 K81
+ 0x7C1C0600, // 0283 CALL R7 3
+ 0x80040E00, // 0284 RET 1 R7
+ 0x7002004F, // 0285 JMP #02D6
+ 0x541E0008, // 0286 LDINT R7 9
+ 0x1C1C0C07, // 0287 EQ R7 R6 R7
+ 0x781E0005, // 0288 JMPF R7 #028F
+ 0x8C1C0906, // 0289 GETMET R7 R4 K6
+ 0x8824090C, // 028A GETMBR R9 R4 K12
+ 0x58280009, // 028B LDCONST R10 K9
+ 0x7C1C0600, // 028C CALL R7 3
+ 0x80040E00, // 028D RET 1 R7
+ 0x70020046, // 028E JMP #02D6
+ 0x541E0009, // 028F LDINT R7 10
+ 0x1C1C0C07, // 0290 EQ R7 R6 R7
+ 0x781E0015, // 0291 JMPF R7 #02A8
+ 0xB81E2400, // 0292 GETNGBL R7 K18
+ 0x8C1C0F26, // 0293 GETMET R7 R7 K38
+ 0x5824004F, // 0294 LDCONST R9 K79
+ 0x50280200, // 0295 LDBOOL R10 1 0
+ 0x7C1C0600, // 0296 CALL R7 3
+ 0x941C0F50, // 0297 GETIDX R7 R7 K80
+ 0x941C0F52, // 0298 GETIDX R7 R7 K82
+ 0x8C20071B, // 0299 GETMET R8 R3 K27
+ 0x5C280E00, // 029A MOVE R10 R7
+ 0x582C0053, // 029B LDCONST R11 K83
+ 0x7C200600, // 029C CALL R8 3
+ 0x24241105, // 029D GT R9 R8 K5
+ 0x78260002, // 029E JMPF R9 #02A2
+ 0x04241109, // 029F SUB R9 R8 K9
+ 0x40260A09, // 02A0 CONNECT R9 K5 R9
+ 0x941C0E09, // 02A1 GETIDX R7 R7 R9
+ 0x8C240906, // 02A2 GETMET R9 R4 K6
+ 0x882C0916, // 02A3 GETMBR R11 R4 K22
+ 0x5C300E00, // 02A4 MOVE R12 R7
+ 0x7C240600, // 02A5 CALL R9 3
+ 0x80041200, // 02A6 RET 1 R9
+ 0x7002002D, // 02A7 JMP #02D6
+ 0x541E000E, // 02A8 LDINT R7 15
+ 0x1C1C0C07, // 02A9 EQ R7 R6 R7
+ 0x781E000B, // 02AA JMPF R7 #02B7
+ 0x8C1C0906, // 02AB GETMET R7 R4 K6
+ 0x88240916, // 02AC GETMBR R9 R4 K22
+ 0xB82A2400, // 02AD GETNGBL R10 K18
+ 0x8C281525, // 02AE GETMET R10 R10 K37
+ 0x7C280200, // 02AF CALL R10 1
+ 0x8C28151B, // 02B0 GETMET R10 R10 K27
+ 0x5830001C, // 02B1 LDCONST R12 K28
+ 0x5834001D, // 02B2 LDCONST R13 K29
+ 0x7C280600, // 02B3 CALL R10 3
+ 0x7C1C0600, // 02B4 CALL R7 3
+ 0x80040E00, // 02B5 RET 1 R7
+ 0x7002001E, // 02B6 JMP #02D6
+ 0x541E0011, // 02B7 LDINT R7 18
+ 0x1C1C0C07, // 02B8 EQ R7 R6 R7
+ 0x781E000B, // 02B9 JMPF R7 #02C6
+ 0x8C1C0906, // 02BA GETMET R7 R4 K6
+ 0x88240916, // 02BB GETMBR R9 R4 K22
+ 0xB82A2400, // 02BC GETNGBL R10 K18
+ 0x8C281525, // 02BD GETMET R10 R10 K37
+ 0x7C280200, // 02BE CALL R10 1
+ 0x8C28151B, // 02BF GETMET R10 R10 K27
+ 0x5830001C, // 02C0 LDCONST R12 K28
+ 0x5834001D, // 02C1 LDCONST R13 K29
+ 0x7C280600, // 02C2 CALL R10 3
+ 0x7C1C0600, // 02C3 CALL R7 3
+ 0x80040E00, // 02C4 RET 1 R7
+ 0x7002000F, // 02C5 JMP #02D6
+ 0x541E0012, // 02C6 LDINT R7 19
+ 0x1C1C0C07, // 02C7 EQ R7 R6 R7
+ 0x781E000C, // 02C8 JMPF R7 #02D6
+ 0x8C1C090A, // 02C9 GETMET R7 R4 K10
+ 0x7C1C0200, // 02CA CALL R7 1
+ 0x8C200F0B, // 02CB GETMET R8 R7 K11
+ 0x58280005, // 02CC LDCONST R10 K5
+ 0x882C090C, // 02CD GETMBR R11 R4 K12
+ 0x5830000F, // 02CE LDCONST R12 K15
+ 0x7C200800, // 02CF CALL R8 4
+ 0x8C200F0B, // 02D0 GETMET R8 R7 K11
+ 0x58280009, // 02D1 LDCONST R10 K9
+ 0x882C090C, // 02D2 GETMBR R11 R4 K12
+ 0x5830000F, // 02D3 LDCONST R12 K15
+ 0x7C200800, // 02D4 CALL R8 4
+ 0x80040E00, // 02D5 RET 1 R7
+ 0x7002009F, // 02D6 JMP #0377
+ 0x541E003E, // 02D7 LDINT R7 63
+ 0x1C1C0A07, // 02D8 EQ R7 R5 R7
+ 0x781E0000, // 02D9 JMPF R7 #02DB
+ 0x7002009B, // 02DA JMP #0377
+ 0x541E0029, // 02DB LDINT R7 42
+ 0x1C1C0A07, // 02DC EQ R7 R5 R7
+ 0x781E001D, // 02DD JMPF R7 #02FC
+ 0x1C1C0D05, // 02DE EQ R7 R6 K5
+ 0x781E0003, // 02DF JMPF R7 #02E4
+ 0x8C1C0911, // 02E0 GETMET R7 R4 K17
+ 0x7C1C0200, // 02E1 CALL R7 1
+ 0x80040E00, // 02E2 RET 1 R7
+ 0x70020016, // 02E3 JMP #02FB
+ 0x1C1C0D09, // 02E4 EQ R7 R6 K9
+ 0x781E0005, // 02E5 JMPF R7 #02EC
+ 0x8C1C0906, // 02E6 GETMET R7 R4 K6
+ 0x88240910, // 02E7 GETMBR R9 R4 K16
+ 0x58280005, // 02E8 LDCONST R10 K5
+ 0x7C1C0600, // 02E9 CALL R7 3
+ 0x80040E00, // 02EA RET 1 R7
+ 0x7002000E, // 02EB JMP #02FB
+ 0x1C1C0D0D, // 02EC EQ R7 R6 K13
+ 0x781E0005, // 02ED JMPF R7 #02F4
+ 0x8C1C0906, // 02EE GETMET R7 R4 K6
+ 0x8824090E, // 02EF GETMBR R9 R4 K14
+ 0x58280009, // 02F0 LDCONST R10 K9
+ 0x7C1C0600, // 02F1 CALL R7 3
+ 0x80040E00, // 02F2 RET 1 R7
+ 0x70020006, // 02F3 JMP #02FB
+ 0x1C1C0D0F, // 02F4 EQ R7 R6 K15
+ 0x781E0004, // 02F5 JMPF R7 #02FB
+ 0x8C1C0906, // 02F6 GETMET R7 R4 K6
+ 0x88240918, // 02F7 GETMBR R9 R4 K24
+ 0x4C280000, // 02F8 LDNIL R10
+ 0x7C1C0600, // 02F9 CALL R7 3
+ 0x80040E00, // 02FA RET 1 R7
+ 0x7002007A, // 02FB JMP #0377
+ 0x541E002A, // 02FC LDINT R7 43
+ 0x1C1C0A07, // 02FD EQ R7 R5 R7
+ 0x781E0016, // 02FE JMPF R7 #0316
+ 0x1C1C0D05, // 02FF EQ R7 R6 K5
+ 0x781E0007, // 0300 JMPF R7 #0309
+ 0x8C1C0906, // 0301 GETMET R7 R4 K6
+ 0x88240916, // 0302 GETMBR R9 R4 K22
+ 0xB82A2400, // 0303 GETNGBL R10 K18
+ 0x8C281554, // 0304 GETMET R10 R10 K84
+ 0x7C280200, // 0305 CALL R10 1
+ 0x7C1C0600, // 0306 CALL R7 3
+ 0x80040E00, // 0307 RET 1 R7
+ 0x7002000B, // 0308 JMP #0315
+ 0x1C1C0D09, // 0309 EQ R7 R6 K9
+ 0x781E0009, // 030A JMPF R7 #0315
+ 0x8C1C0911, // 030B GETMET R7 R4 K17
+ 0x7C1C0200, // 030C CALL R7 1
+ 0x8C200F0B, // 030D GETMET R8 R7 K11
+ 0x4C280000, // 030E LDNIL R10
+ 0x882C0916, // 030F GETMBR R11 R4 K22
+ 0xB8322400, // 0310 GETNGBL R12 K18
+ 0x8C301954, // 0311 GETMET R12 R12 K84
+ 0x7C300200, // 0312 CALL R12 1
+ 0x7C200800, // 0313 CALL R8 4
+ 0x80040E00, // 0314 RET 1 R7
+ 0x70020060, // 0315 JMP #0377
+ 0x541E002B, // 0316 LDINT R7 44
+ 0x1C1C0A07, // 0317 EQ R7 R5 R7
+ 0x781E001C, // 0318 JMPF R7 #0336
+ 0x1C1C0D05, // 0319 EQ R7 R6 K5
+ 0x781E0005, // 031A JMPF R7 #0321
+ 0x8C1C0906, // 031B GETMET R7 R4 K6
+ 0x8824090E, // 031C GETMBR R9 R4 K14
+ 0x58280009, // 031D LDCONST R10 K9
+ 0x7C1C0600, // 031E CALL R7 3
+ 0x80040E00, // 031F RET 1 R7
+ 0x70020013, // 0320 JMP #0335
+ 0x1C1C0D09, // 0321 EQ R7 R6 K9
+ 0x781E0005, // 0322 JMPF R7 #0329
+ 0x8C1C0906, // 0323 GETMET R7 R4 K6
+ 0x8824090E, // 0324 GETMBR R9 R4 K14
+ 0x542A0003, // 0325 LDINT R10 4
+ 0x7C1C0600, // 0326 CALL R7 3
+ 0x80040E00, // 0327 RET 1 R7
+ 0x7002000B, // 0328 JMP #0335
+ 0x1C1C0D0D, // 0329 EQ R7 R6 K13
+ 0x781E0009, // 032A JMPF R7 #0335
+ 0x8C1C0911, // 032B GETMET R7 R4 K17
+ 0x7C1C0200, // 032C CALL R7 1
+ 0x8C200F0B, // 032D GETMET R8 R7 K11
+ 0x4C280000, // 032E LDNIL R10
+ 0x8C2C0906, // 032F GETMET R11 R4 K6
+ 0x8834090E, // 0330 GETMBR R13 R4 K14
+ 0x543A0003, // 0331 LDINT R14 4
+ 0x7C2C0600, // 0332 CALL R11 3
+ 0x7C200600, // 0333 CALL R8 3
+ 0x80040E00, // 0334 RET 1 R7
+ 0x70020040, // 0335 JMP #0377
+ 0x541E0030, // 0336 LDINT R7 49
+ 0x1C1C0A07, // 0337 EQ R7 R5 R7
+ 0x781E0010, // 0338 JMPF R7 #034A
+ 0x1C1C0D0F, // 0339 EQ R7 R6 K15
+ 0x781E0005, // 033A JMPF R7 #0341
+ 0x8C1C0906, // 033B GETMET R7 R4 K6
+ 0x8824090E, // 033C GETMBR R9 R4 K14
+ 0x542A001D, // 033D LDINT R10 30
+ 0x7C1C0600, // 033E CALL R7 3
+ 0x80040E00, // 033F RET 1 R7
+ 0x70020007, // 0340 JMP #0349
+ 0x541EFFFB, // 0341 LDINT R7 65532
+ 0x1C1C0C07, // 0342 EQ R7 R6 R7
+ 0x781E0004, // 0343 JMPF R7 #0349
+ 0x8C1C0906, // 0344 GETMET R7 R4 K6
+ 0x8824092A, // 0345 GETMBR R9 R4 K42
+ 0x542A0003, // 0346 LDINT R10 4
+ 0x7C1C0600, // 0347 CALL R7 3
+ 0x80040E00, // 0348 RET 1 R7
+ 0x7002002C, // 0349 JMP #0377
+ 0x541E001C, // 034A LDINT R7 29
+ 0x1C1C0A07, // 034B EQ R7 R5 R7
+ 0x781E0021, // 034C JMPF R7 #036F
+ 0x1C1C0D0F, // 034D EQ R7 R6 K15
+ 0x781E0016, // 034E JMPF R7 #0366
+ 0x8C1C0911, // 034F GETMET R7 R4 K17
+ 0x7C1C0200, // 0350 CALL R7 1
+ 0x88200133, // 0351 GETMBR R8 R0 K51
+ 0x8C201155, // 0352 GETMET R8 R8 K85
+ 0x50280200, // 0353 LDBOOL R10 1 0
+ 0x7C200400, // 0354 CALL R8 2
+ 0x60240010, // 0355 GETGBL R9 G16
+ 0x5C281000, // 0356 MOVE R10 R8
+ 0x7C240200, // 0357 CALL R9 1
+ 0xA8020007, // 0358 EXBLK 0 #0361
+ 0x5C281200, // 0359 MOVE R10 R9
+ 0x7C280000, // 035A CALL R10 0
+ 0x8C2C0F0B, // 035B GETMET R11 R7 K11
+ 0x4C340000, // 035C LDNIL R13
+ 0x8838090C, // 035D GETMBR R14 R4 K12
+ 0x5C3C1400, // 035E MOVE R15 R10
+ 0x7C2C0800, // 035F CALL R11 4
+ 0x7001FFF7, // 0360 JMP #0359
+ 0x5824003A, // 0361 LDCONST R9 K58
+ 0xAC240200, // 0362 CATCH R9 1 0
+ 0xB0080000, // 0363 RAISE 2 R0 R0
+ 0x80040E00, // 0364 RET 1 R7
+ 0x70020007, // 0365 JMP #036E
+ 0x601C0003, // 0366 GETGBL R7 G3
+ 0x5C200000, // 0367 MOVE R8 R0
+ 0x7C1C0200, // 0368 CALL R7 1
+ 0x8C1C0F56, // 0369 GETMET R7 R7 K86
+ 0x5C240200, // 036A MOVE R9 R1
+ 0x5C280400, // 036B MOVE R10 R2
+ 0x7C1C0600, // 036C CALL R7 3
+ 0x80040E00, // 036D RET 1 R7
+ 0x70020007, // 036E JMP #0377
+ 0x601C0003, // 036F GETGBL R7 G3
+ 0x5C200000, // 0370 MOVE R8 R0
+ 0x7C1C0200, // 0371 CALL R7 1
+ 0x8C1C0F56, // 0372 GETMET R7 R7 K86
+ 0x5C240200, // 0373 MOVE R9 R1
+ 0x5C280400, // 0374 MOVE R10 R2
+ 0x7C1C0600, // 0375 CALL R7 3
+ 0x80040E00, // 0376 RET 1 R7
+ 0x80000000, // 0377 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: write_attribute
+********************************************************************/
+be_local_closure(Matter_Plugin_Root_write_attribute, /* name */
+ be_nested_proto(
+ 13, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[15]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(TLV),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(attribute),
+ /* K5 */ be_const_int(0),
+ /* K6 */ be_nested_str_weak(int),
+ /* K7 */ be_nested_str_weak(int64),
+ /* K8 */ be_nested_str_weak(_breadcrumb),
+ /* K9 */ be_nested_str_weak(attribute_updated),
+ /* K10 */ be_nested_str_weak(endpoint),
+ /* K11 */ be_nested_str_weak(status),
+ /* K12 */ be_nested_str_weak(CONSTRAINT_ERROR),
+ /* K13 */ be_const_int(1),
+ /* K14 */ be_nested_str_weak(INVALID_ACTION),
+ }),
+ be_str_weak(write_attribute),
+ &be_const_str_solidified,
+ ( &(const binstruction[102]) { /* code */
+ 0xA4120000, // 0000 IMPORT R4 K0
+ 0xB8160200, // 0001 GETNGBL R5 K1
+ 0x88140B02, // 0002 GETMBR R5 R5 K2
+ 0x88180503, // 0003 GETMBR R6 R2 K3
+ 0x881C0504, // 0004 GETMBR R7 R2 K4
+ 0x5422002F, // 0005 LDINT R8 48
+ 0x1C200C08, // 0006 EQ R8 R6 R8
+ 0x7822001A, // 0007 JMPF R8 #0023
+ 0x1C200F05, // 0008 EQ R8 R7 K5
+ 0x78220017, // 0009 JMPF R8 #0022
+ 0x60200004, // 000A GETGBL R8 G4
+ 0x5C240600, // 000B MOVE R9 R3
+ 0x7C200200, // 000C CALL R8 1
+ 0x1C201106, // 000D EQ R8 R8 K6
+ 0x74220004, // 000E JMPT R8 #0014
+ 0x6020000F, // 000F GETGBL R8 G15
+ 0x5C240600, // 0010 MOVE R9 R3
+ 0xB82A0E00, // 0011 GETNGBL R10 K7
+ 0x7C200400, // 0012 CALL R8 2
+ 0x78220008, // 0013 JMPF R8 #001D
+ 0x90061003, // 0014 SETMBR R1 K8 R3
+ 0x8C200109, // 0015 GETMET R8 R0 K9
+ 0x8828050A, // 0016 GETMBR R10 R2 K10
+ 0x882C0503, // 0017 GETMBR R11 R2 K3
+ 0x88300504, // 0018 GETMBR R12 R2 K4
+ 0x7C200800, // 0019 CALL R8 4
+ 0x50200200, // 001A LDBOOL R8 1 0
+ 0x80041000, // 001B RET 1 R8
+ 0x70020004, // 001C JMP #0022
+ 0xB8220200, // 001D GETNGBL R8 K1
+ 0x8820110C, // 001E GETMBR R8 R8 K12
+ 0x900A1608, // 001F SETMBR R2 K11 R8
+ 0x50200000, // 0020 LDBOOL R8 0 0
+ 0x80041000, // 0021 RET 1 R8
+ 0x70020041, // 0022 JMP #0065
+ 0x5422001E, // 0023 LDINT R8 31
+ 0x1C200C08, // 0024 EQ R8 R6 R8
+ 0x78220004, // 0025 JMPF R8 #002B
+ 0x1C200F05, // 0026 EQ R8 R7 K5
+ 0x78220001, // 0027 JMPF R8 #002A
+ 0x50200200, // 0028 LDBOOL R8 1 0
+ 0x80041000, // 0029 RET 1 R8
+ 0x70020039, // 002A JMP #0065
+ 0x54220027, // 002B LDINT R8 40
+ 0x1C200C08, // 002C EQ R8 R6 R8
+ 0x7822000B, // 002D JMPF R8 #003A
+ 0x54220004, // 002E LDINT R8 5
+ 0x1C200E08, // 002F EQ R8 R7 R8
+ 0x78220002, // 0030 JMPF R8 #0034
+ 0x50200200, // 0031 LDBOOL R8 1 0
+ 0x80041000, // 0032 RET 1 R8
+ 0x70020004, // 0033 JMP #0039
+ 0x54220005, // 0034 LDINT R8 6
+ 0x1C200E08, // 0035 EQ R8 R7 R8
+ 0x78220001, // 0036 JMPF R8 #0039
+ 0x50200200, // 0037 LDBOOL R8 1 0
+ 0x80041000, // 0038 RET 1 R8
+ 0x7002002A, // 0039 JMP #0065
+ 0x54220029, // 003A LDINT R8 42
+ 0x1C200C08, // 003B EQ R8 R6 R8
+ 0x78220004, // 003C JMPF R8 #0042
+ 0x1C200F05, // 003D EQ R8 R7 K5
+ 0x78220001, // 003E JMPF R8 #0041
+ 0x50200200, // 003F LDBOOL R8 1 0
+ 0x80041000, // 0040 RET 1 R8
+ 0x70020022, // 0041 JMP #0065
+ 0x5422002A, // 0042 LDINT R8 43
+ 0x1C200C08, // 0043 EQ R8 R6 R8
+ 0x78220007, // 0044 JMPF R8 #004D
+ 0x1C200F05, // 0045 EQ R8 R7 K5
+ 0x78220004, // 0046 JMPF R8 #004C
+ 0xB8220200, // 0047 GETNGBL R8 K1
+ 0x8820110C, // 0048 GETMBR R8 R8 K12
+ 0x900A1608, // 0049 SETMBR R2 K11 R8
+ 0x50200000, // 004A LDBOOL R8 0 0
+ 0x80041000, // 004B RET 1 R8
+ 0x70020017, // 004C JMP #0065
+ 0x5422002B, // 004D LDINT R8 44
+ 0x1C200C08, // 004E EQ R8 R6 R8
+ 0x78220009, // 004F JMPF R8 #005A
+ 0x1C200F05, // 0050 EQ R8 R7 K5
+ 0x78220002, // 0051 JMPF R8 #0055
+ 0x50200200, // 0052 LDBOOL R8 1 0
+ 0x80041000, // 0053 RET 1 R8
+ 0x70020003, // 0054 JMP #0059
+ 0x1C200F0D, // 0055 EQ R8 R7 K13
+ 0x78220001, // 0056 JMPF R8 #0059
+ 0x50200200, // 0057 LDBOOL R8 1 0
+ 0x80041000, // 0058 RET 1 R8
+ 0x7002000A, // 0059 JMP #0065
+ 0x54220030, // 005A LDINT R8 49
+ 0x1C200C08, // 005B EQ R8 R6 R8
+ 0x78220007, // 005C JMPF R8 #0065
+ 0x54220003, // 005D LDINT R8 4
+ 0x1C200E08, // 005E EQ R8 R7 R8
+ 0x78220004, // 005F JMPF R8 #0065
+ 0xB8220200, // 0060 GETNGBL R8 K1
+ 0x8820110E, // 0061 GETMBR R8 R8 K14
+ 0x900A1608, // 0062 SETMBR R2 K11 R8
+ 0x50200000, // 0063 LDBOOL R8 0 0
+ 0x80041000, // 0064 RET 1 R8
+ 0x80000000, // 0065 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_Plugin_Root_init, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(init),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0x600C0003, // 0000 GETGBL R3 G3
+ 0x5C100000, // 0001 MOVE R4 R0
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x8C0C0700, // 0003 GETMET R3 R3 K0
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x5C180400, // 0005 MOVE R6 R2
+ 0x7C0C0600, // 0006 CALL R3 3
+ 0x80000000, // 0007 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: invoke_request
+********************************************************************/
+be_local_closure(Matter_Plugin_Root_invoke_request, /* name */
+ be_nested_proto(
+ 29, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 1]) {
+ be_nested_proto(
+ 3, /* nstack */
+ 0, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 2]) { /* upvals */
+ be_local_const_upval(1, 0),
+ be_local_const_upval(1, 11),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(device),
+ /* K1 */ be_nested_str_weak(remove_fabric),
+ }),
+ be_str_weak(_anonymous_),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0x68000000, // 0000 GETUPV R0 U0
+ 0x88000100, // 0001 GETMBR R0 R0 K0
+ 0x8C000101, // 0002 GETMET R0 R0 K1
+ 0x68080001, // 0003 GETUPV R2 U1
+ 0x7C000400, // 0004 CALL R0 2
+ 0x80000000, // 0005 RET 0
+ })
+ ),
+ }),
+ 1, /* has constants */
+ ( &(const bvalue[100]) { /* constants */
+ /* K0 */ be_nested_str_weak(crypto),
+ /* K1 */ be_nested_str_weak(string),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(TLV),
+ /* K4 */ be_nested_str_weak(cluster),
+ /* K5 */ be_nested_str_weak(command),
+ /* K6 */ be_const_int(0),
+ /* K7 */ be_nested_str_weak(findsubval),
+ /* K8 */ be_const_int(1),
+ /* K9 */ be_nested_str_weak(_breadcrumb),
+ /* K10 */ be_nested_str_weak(Matter_TLV_struct),
+ /* K11 */ be_nested_str_weak(add_TLV),
+ /* K12 */ be_nested_str_weak(U1),
+ /* K13 */ be_nested_str_weak(UTF1),
+ /* K14 */ be_nested_str_weak(),
+ /* K15 */ be_const_int(2),
+ /* K16 */ be_nested_str_weak(XX),
+ /* K17 */ be_const_int(3),
+ /* K18 */ be_nested_str_weak(fabric_completed),
+ /* K19 */ be_nested_str_weak(set_no_expiration),
+ /* K20 */ be_nested_str_weak(save),
+ /* K21 */ be_nested_str_weak(device),
+ /* K22 */ be_nested_str_weak(start_commissioning_complete_deferred),
+ /* K23 */ be_nested_str_weak(status),
+ /* K24 */ be_nested_str_weak(UNSUPPORTED_COMMAND),
+ /* K25 */ be_nested_str_weak(B2),
+ /* K26 */ be_nested_str_weak(DAC_Cert_FFF1_8000),
+ /* K27 */ be_nested_str_weak(PAI_Cert_FFF1),
+ /* K28 */ be_nested_str_weak(CD_FFF1_8000),
+ /* K29 */ be_nested_str_weak(B1),
+ /* K30 */ be_nested_str_weak(U4),
+ /* K31 */ be_nested_str_weak(tasmota),
+ /* K32 */ be_nested_str_weak(rtc),
+ /* K33 */ be_nested_str_weak(utc),
+ /* K34 */ be_nested_str_weak(tlv2raw),
+ /* K35 */ be_nested_str_weak(get_ac),
+ /* K36 */ be_nested_str_weak(log),
+ /* K37 */ be_nested_str_weak(MTR_X3A_X20attestation_tbs_X3D),
+ /* K38 */ be_nested_str_weak(tohex),
+ /* K39 */ be_nested_str_weak(EC_P256),
+ /* K40 */ be_nested_str_weak(ecdsa_sign_sha256),
+ /* K41 */ be_nested_str_weak(DAC_Priv_FFF1_8000),
+ /* K42 */ be_nested_str_weak(gen_CSR),
+ /* K43 */ be_nested_str_weak(MTR_X3A_X20nocsr_tbs_X3D),
+ /* K44 */ be_nested_str_weak(set_ca),
+ /* K45 */ be_nested_str_weak(MTR_X3A_X20received_X20ca_root_X3D),
+ /* K46 */ be_nested_str_weak(SUCCESS),
+ /* K47 */ be_nested_str_weak(get_ca),
+ /* K48 */ be_nested_str_weak(MTR_X3A_X20Error_X3A_X20AdNOC_X20without_X20CA),
+ /* K49 */ be_nested_str_weak(set_noc),
+ /* K50 */ be_nested_str_weak(set_ipk_epoch_key),
+ /* K51 */ be_nested_str_weak(set_admin_subject_vendor),
+ /* K52 */ be_nested_str_weak(parse),
+ /* K53 */ be_nested_str_weak(findsub),
+ /* K54 */ be_nested_str_weak(MTR_X3A_X20Error_X3A_X20no_X20fabricid_X20nor_X20deviceid_X20in_X20NOC_X20certificate),
+ /* K55 */ be_nested_str_weak(int),
+ /* K56 */ be_nested_str_weak(int64),
+ /* K57 */ be_nested_str_weak(fromu32),
+ /* K58 */ be_nested_str_weak(tobytes),
+ /* K59 */ be_const_int(2147483647),
+ /* K60 */ be_nested_str_weak(fromstring),
+ /* K61 */ be_nested_str_weak(CompressedFabric),
+ /* K62 */ be_nested_str_weak(HKDF_SHA256),
+ /* K63 */ be_nested_str_weak(copy),
+ /* K64 */ be_nested_str_weak(reverse),
+ /* K65 */ be_nested_str_weak(derive),
+ /* K66 */ be_nested_str_weak(set_fabric_device),
+ /* K67 */ be_nested_str_weak(commissioning_admin_fabric),
+ /* K68 */ be_nested_str_weak(persist_to_fabric),
+ /* K69 */ be_nested_str_weak(fabric_candidate),
+ /* K70 */ be_nested_str_weak(start_operational_discovery_deferred),
+ /* K71 */ be_nested_str_weak(MTR_X3A_X20_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D_X2D),
+ /* K72 */ be_nested_str_weak(MTR_X3A_X20fabric_X3D),
+ /* K73 */ be_nested_str_weak(inspect),
+ /* K74 */ be_nested_str_weak(_fabric),
+ /* K75 */ be_nested_str_weak(log_new_fabric),
+ /* K76 */ be_nested_str_weak(set_fabric_label),
+ /* K77 */ be_nested_str_weak(format),
+ /* K78 */ be_nested_str_weak(MTR_X3A_X20_X2E_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20Update_X20fabric_X20_X27_X25s_X27_X20label_X3D_X27_X25s_X27),
+ /* K79 */ be_nested_str_weak(get_fabric_id),
+ /* K80 */ be_nested_str_weak(sessions),
+ /* K81 */ be_nested_str_weak(active_fabrics),
+ /* K82 */ be_nested_str_weak(get_fabric_index),
+ /* K83 */ be_nested_str_weak(MTR_X3A_X20removing_X20fabric_X20),
+ /* K84 */ be_nested_str_weak(set_timer),
+ /* K85 */ be_nested_str_weak(stop_iteration),
+ /* K86 */ be_nested_str_weak(MTR_X3A_X20RemoveFabric_X20fabric_X28),
+ /* K87 */ be_nested_str_weak(_X29_X20not_X20found),
+ /* K88 */ be_nested_str_weak(INVALID_ACTION),
+ /* K89 */ be_nested_str_weak(fabric_index_X3A),
+ /* K90 */ be_nested_str_weak(MTR_X3A_X20OpenCommissioningWindow_X28timeout_X3D_X25i_X2C_X20passcode_X3D_X25s_X2C_X20discriminator_X3D_X25i_X2C_X20iterations_X3D_X25i_X2C_X20salt_X3D_X25s_X29),
+ /* K91 */ be_nested_str_weak(INVALID_DATA_TYPE),
+ /* K92 */ be_nested_str_weak(MTR_X3A_X20wrong_X20size_X20for_X20PAKE_X20parameters),
+ /* K93 */ be_nested_str_weak(CONSTRAINT_ERROR),
+ /* K94 */ be_nested_str_weak(start_basic_commissioning),
+ /* K95 */ be_nested_str_weak(get_fabric),
+ /* K96 */ be_nested_str_weak(MTR_X3A_X20OpenBasicCommissioningWindow_X20commissioning_timeout_X3D),
+ /* K97 */ be_nested_str_weak(start_root_basic_commissioning),
+ /* K98 */ be_nested_str_weak(stop_basic_commissioning),
+ /* K99 */ be_nested_str_weak(invoke_request),
+ }),
+ be_str_weak(invoke_request),
+ &be_const_str_solidified,
+ ( &(const binstruction[735]) { /* code */
+ 0xA4120000, // 0000 IMPORT R4 K0
+ 0xA4160200, // 0001 IMPORT R5 K1
+ 0xB81A0400, // 0002 GETNGBL R6 K2
+ 0x88180D03, // 0003 GETMBR R6 R6 K3
+ 0x881C0704, // 0004 GETMBR R7 R3 K4
+ 0x88200705, // 0005 GETMBR R8 R3 K5
+ 0x5426002F, // 0006 LDINT R9 48
+ 0x1C240E09, // 0007 EQ R9 R7 R9
+ 0x78260054, // 0008 JMPF R9 #005E
+ 0x1C241106, // 0009 EQ R9 R8 K6
+ 0x78260017, // 000A JMPF R9 #0023
+ 0x8C240507, // 000B GETMET R9 R2 K7
+ 0x582C0006, // 000C LDCONST R11 K6
+ 0x54320383, // 000D LDINT R12 900
+ 0x7C240600, // 000E CALL R9 3
+ 0x8C280507, // 000F GETMET R10 R2 K7
+ 0x58300008, // 0010 LDCONST R12 K8
+ 0x58340006, // 0011 LDCONST R13 K6
+ 0x7C280600, // 0012 CALL R10 3
+ 0x9006120A, // 0013 SETMBR R1 K9 R10
+ 0x8C2C0D0A, // 0014 GETMET R11 R6 K10
+ 0x7C2C0200, // 0015 CALL R11 1
+ 0x8C30170B, // 0016 GETMET R12 R11 K11
+ 0x58380006, // 0017 LDCONST R14 K6
+ 0x883C0D0C, // 0018 GETMBR R15 R6 K12
+ 0x58400006, // 0019 LDCONST R16 K6
+ 0x7C300800, // 001A CALL R12 4
+ 0x8C30170B, // 001B GETMET R12 R11 K11
+ 0x58380008, // 001C LDCONST R14 K8
+ 0x883C0D0D, // 001D GETMBR R15 R6 K13
+ 0x5840000E, // 001E LDCONST R16 K14
+ 0x7C300800, // 001F CALL R12 4
+ 0x900E0B08, // 0020 SETMBR R3 K5 K8
+ 0x80041600, // 0021 RET 1 R11
+ 0x70020039, // 0022 JMP #005D
+ 0x1C24110F, // 0023 EQ R9 R8 K15
+ 0x7826001A, // 0024 JMPF R9 #0040
+ 0x8C240507, // 0025 GETMET R9 R2 K7
+ 0x582C0006, // 0026 LDCONST R11 K6
+ 0x7C240400, // 0027 CALL R9 2
+ 0x8C280507, // 0028 GETMET R10 R2 K7
+ 0x58300008, // 0029 LDCONST R12 K8
+ 0x58340010, // 002A LDCONST R13 K16
+ 0x7C280600, // 002B CALL R10 3
+ 0x8C2C0507, // 002C GETMET R11 R2 K7
+ 0x5834000F, // 002D LDCONST R13 K15
+ 0x58380006, // 002E LDCONST R14 K6
+ 0x7C2C0600, // 002F CALL R11 3
+ 0x9006120B, // 0030 SETMBR R1 K9 R11
+ 0x8C300D0A, // 0031 GETMET R12 R6 K10
+ 0x7C300200, // 0032 CALL R12 1
+ 0x8C34190B, // 0033 GETMET R13 R12 K11
+ 0x583C0006, // 0034 LDCONST R15 K6
+ 0x88400D0C, // 0035 GETMBR R16 R6 K12
+ 0x58440006, // 0036 LDCONST R17 K6
+ 0x7C340800, // 0037 CALL R13 4
+ 0x8C34190B, // 0038 GETMET R13 R12 K11
+ 0x583C0008, // 0039 LDCONST R15 K8
+ 0x88400D0D, // 003A GETMBR R16 R6 K13
+ 0x5844000E, // 003B LDCONST R17 K14
+ 0x7C340800, // 003C CALL R13 4
+ 0x900E0B11, // 003D SETMBR R3 K5 K17
+ 0x80041800, // 003E RET 1 R12
+ 0x7002001C, // 003F JMP #005D
+ 0x54260003, // 0040 LDINT R9 4
+ 0x1C241009, // 0041 EQ R9 R8 R9
+ 0x78260019, // 0042 JMPF R9 #005D
+ 0x90061306, // 0043 SETMBR R1 K9 K6
+ 0x8C240312, // 0044 GETMET R9 R1 K18
+ 0x7C240200, // 0045 CALL R9 1
+ 0x8C240313, // 0046 GETMET R9 R1 K19
+ 0x7C240200, // 0047 CALL R9 1
+ 0x8C240314, // 0048 GETMET R9 R1 K20
+ 0x7C240200, // 0049 CALL R9 1
+ 0x8C240D0A, // 004A GETMET R9 R6 K10
+ 0x7C240200, // 004B CALL R9 1
+ 0x8C28130B, // 004C GETMET R10 R9 K11
+ 0x58300006, // 004D LDCONST R12 K6
+ 0x88340D0C, // 004E GETMBR R13 R6 K12
+ 0x58380006, // 004F LDCONST R14 K6
+ 0x7C280800, // 0050 CALL R10 4
+ 0x8C28130B, // 0051 GETMET R10 R9 K11
+ 0x58300008, // 0052 LDCONST R12 K8
+ 0x88340D0D, // 0053 GETMBR R13 R6 K13
+ 0x5838000E, // 0054 LDCONST R14 K14
+ 0x7C280800, // 0055 CALL R10 4
+ 0x542A0004, // 0056 LDINT R10 5
+ 0x900E0A0A, // 0057 SETMBR R3 K5 R10
+ 0x88280115, // 0058 GETMBR R10 R0 K21
+ 0x8C281516, // 0059 GETMET R10 R10 K22
+ 0x5C300200, // 005A MOVE R12 R1
+ 0x7C280400, // 005B CALL R10 2
+ 0x80041200, // 005C RET 1 R9
+ 0x7002027E, // 005D JMP #02DD
+ 0x5426003D, // 005E LDINT R9 62
+ 0x1C240E09, // 005F EQ R9 R7 R9
+ 0x782601E0, // 0060 JMPF R9 #0242
+ 0x1C24110F, // 0061 EQ R9 R8 K15
+ 0x7826001D, // 0062 JMPF R9 #0081
+ 0x8C240507, // 0063 GETMET R9 R2 K7
+ 0x582C0006, // 0064 LDCONST R11 K6
+ 0x7C240400, // 0065 CALL R9 2
+ 0x20281308, // 0066 NE R10 R9 K8
+ 0x782A0006, // 0067 JMPF R10 #006F
+ 0x2028130F, // 0068 NE R10 R9 K15
+ 0x782A0004, // 0069 JMPF R10 #006F
+ 0xB82A0400, // 006A GETNGBL R10 K2
+ 0x88281518, // 006B GETMBR R10 R10 K24
+ 0x900E2E0A, // 006C SETMBR R3 K23 R10
+ 0x4C280000, // 006D LDNIL R10
+ 0x80041400, // 006E RET 1 R10
+ 0x8C280D0A, // 006F GETMET R10 R6 K10
+ 0x7C280200, // 0070 CALL R10 1
+ 0x8C2C150B, // 0071 GETMET R11 R10 K11
+ 0x58340006, // 0072 LDCONST R13 K6
+ 0x88380D19, // 0073 GETMBR R14 R6 K25
+ 0x1C3C1308, // 0074 EQ R15 R9 K8
+ 0x783E0003, // 0075 JMPF R15 #007A
+ 0xB83E0400, // 0076 GETNGBL R15 K2
+ 0x8C3C1F1A, // 0077 GETMET R15 R15 K26
+ 0x7C3C0200, // 0078 CALL R15 1
+ 0x70020002, // 0079 JMP #007D
+ 0xB83E0400, // 007A GETNGBL R15 K2
+ 0x8C3C1F1B, // 007B GETMET R15 R15 K27
+ 0x7C3C0200, // 007C CALL R15 1
+ 0x7C2C0800, // 007D CALL R11 4
+ 0x900E0B11, // 007E SETMBR R3 K5 K17
+ 0x80041400, // 007F RET 1 R10
+ 0x700201BF, // 0080 JMP #0241
+ 0x1C241106, // 0081 EQ R9 R8 K6
+ 0x78260044, // 0082 JMPF R9 #00C8
+ 0x8C240507, // 0083 GETMET R9 R2 K7
+ 0x582C0006, // 0084 LDCONST R11 K6
+ 0x7C240400, // 0085 CALL R9 2
+ 0x6028000C, // 0086 GETGBL R10 G12
+ 0x5C2C1200, // 0087 MOVE R11 R9
+ 0x7C280200, // 0088 CALL R10 1
+ 0x542E001F, // 0089 LDINT R11 32
+ 0x2028140B, // 008A NE R10 R10 R11
+ 0x782A0001, // 008B JMPF R10 #008E
+ 0x4C280000, // 008C LDNIL R10
+ 0x80041400, // 008D RET 1 R10
+ 0x900E0B08, // 008E SETMBR R3 K5 K8
+ 0x8C280D0A, // 008F GETMET R10 R6 K10
+ 0x7C280200, // 0090 CALL R10 1
+ 0x8C2C150B, // 0091 GETMET R11 R10 K11
+ 0x58340008, // 0092 LDCONST R13 K8
+ 0x88380D19, // 0093 GETMBR R14 R6 K25
+ 0xB83E0400, // 0094 GETNGBL R15 K2
+ 0x8C3C1F1C, // 0095 GETMET R15 R15 K28
+ 0x7C3C0200, // 0096 CALL R15 1
+ 0x7C2C0800, // 0097 CALL R11 4
+ 0x8C2C150B, // 0098 GETMET R11 R10 K11
+ 0x5834000F, // 0099 LDCONST R13 K15
+ 0x88380D1D, // 009A GETMBR R14 R6 K29
+ 0x5C3C1200, // 009B MOVE R15 R9
+ 0x7C2C0800, // 009C CALL R11 4
+ 0x8C2C150B, // 009D GETMET R11 R10 K11
+ 0x58340011, // 009E LDCONST R13 K17
+ 0x88380D1E, // 009F GETMBR R14 R6 K30
+ 0xB83E3E00, // 00A0 GETNGBL R15 K31
+ 0x8C3C1F20, // 00A1 GETMET R15 R15 K32
+ 0x7C3C0200, // 00A2 CALL R15 1
+ 0x943C1F21, // 00A3 GETIDX R15 R15 K33
+ 0x7C2C0800, // 00A4 CALL R11 4
+ 0x8C2C1522, // 00A5 GETMET R11 R10 K34
+ 0x7C2C0200, // 00A6 CALL R11 1
+ 0x8C300323, // 00A7 GETMET R12 R1 K35
+ 0x7C300200, // 00A8 CALL R12 1
+ 0x0034160C, // 00A9 ADD R13 R11 R12
+ 0xB83A3E00, // 00AA GETNGBL R14 K31
+ 0x8C381D24, // 00AB GETMET R14 R14 K36
+ 0x8C401B26, // 00AC GETMET R16 R13 K38
+ 0x7C400200, // 00AD CALL R16 1
+ 0x00424A10, // 00AE ADD R16 K37 R16
+ 0x58440011, // 00AF LDCONST R17 K17
+ 0x7C380600, // 00B0 CALL R14 3
+ 0x8C380927, // 00B1 GETMET R14 R4 K39
+ 0x7C380200, // 00B2 CALL R14 1
+ 0x8C381D28, // 00B3 GETMET R14 R14 K40
+ 0xB8420400, // 00B4 GETNGBL R16 K2
+ 0x8C402129, // 00B5 GETMET R16 R16 K41
+ 0x7C400200, // 00B6 CALL R16 1
+ 0x5C441A00, // 00B7 MOVE R17 R13
+ 0x7C380600, // 00B8 CALL R14 3
+ 0x8C3C0D0A, // 00B9 GETMET R15 R6 K10
+ 0x7C3C0200, // 00BA CALL R15 1
+ 0x8C401F0B, // 00BB GETMET R16 R15 K11
+ 0x58480006, // 00BC LDCONST R18 K6
+ 0x884C0D19, // 00BD GETMBR R19 R6 K25
+ 0x5C501600, // 00BE MOVE R20 R11
+ 0x7C400800, // 00BF CALL R16 4
+ 0x8C401F0B, // 00C0 GETMET R16 R15 K11
+ 0x58480008, // 00C1 LDCONST R18 K8
+ 0x884C0D1D, // 00C2 GETMBR R19 R6 K29
+ 0x5C501C00, // 00C3 MOVE R20 R14
+ 0x7C400800, // 00C4 CALL R16 4
+ 0x900E0B08, // 00C5 SETMBR R3 K5 K8
+ 0x80041E00, // 00C6 RET 1 R15
+ 0x70020178, // 00C7 JMP #0241
+ 0x54260003, // 00C8 LDINT R9 4
+ 0x1C241009, // 00C9 EQ R9 R8 R9
+ 0x78260040, // 00CA JMPF R9 #010C
+ 0x8C240507, // 00CB GETMET R9 R2 K7
+ 0x582C0006, // 00CC LDCONST R11 K6
+ 0x7C240400, // 00CD CALL R9 2
+ 0x6028000C, // 00CE GETGBL R10 G12
+ 0x5C2C1200, // 00CF MOVE R11 R9
+ 0x7C280200, // 00D0 CALL R10 1
+ 0x542E001F, // 00D1 LDINT R11 32
+ 0x2028140B, // 00D2 NE R10 R10 R11
+ 0x782A0001, // 00D3 JMPF R10 #00D6
+ 0x4C280000, // 00D4 LDNIL R10
+ 0x80041400, // 00D5 RET 1 R10
+ 0x8C280507, // 00D6 GETMET R10 R2 K7
+ 0x58300008, // 00D7 LDCONST R12 K8
+ 0x50340000, // 00D8 LDBOOL R13 0 0
+ 0x7C280600, // 00D9 CALL R10 3
+ 0x8C2C032A, // 00DA GETMET R11 R1 K42
+ 0x7C2C0200, // 00DB CALL R11 1
+ 0x8C300D0A, // 00DC GETMET R12 R6 K10
+ 0x7C300200, // 00DD CALL R12 1
+ 0x8C34190B, // 00DE GETMET R13 R12 K11
+ 0x583C0008, // 00DF LDCONST R15 K8
+ 0x88400D19, // 00E0 GETMBR R16 R6 K25
+ 0x5C441600, // 00E1 MOVE R17 R11
+ 0x7C340800, // 00E2 CALL R13 4
+ 0x8C34190B, // 00E3 GETMET R13 R12 K11
+ 0x583C000F, // 00E4 LDCONST R15 K15
+ 0x88400D1D, // 00E5 GETMBR R16 R6 K29
+ 0x5C441200, // 00E6 MOVE R17 R9
+ 0x7C340800, // 00E7 CALL R13 4
+ 0x8C341922, // 00E8 GETMET R13 R12 K34
+ 0x7C340200, // 00E9 CALL R13 1
+ 0x8C380323, // 00EA GETMET R14 R1 K35
+ 0x7C380200, // 00EB CALL R14 1
+ 0x00381A0E, // 00EC ADD R14 R13 R14
+ 0xB83E3E00, // 00ED GETNGBL R15 K31
+ 0x8C3C1F24, // 00EE GETMET R15 R15 K36
+ 0x8C441D26, // 00EF GETMET R17 R14 K38
+ 0x7C440200, // 00F0 CALL R17 1
+ 0x00465611, // 00F1 ADD R17 K43 R17
+ 0x58480011, // 00F2 LDCONST R18 K17
+ 0x7C3C0600, // 00F3 CALL R15 3
+ 0x8C3C0927, // 00F4 GETMET R15 R4 K39
+ 0x7C3C0200, // 00F5 CALL R15 1
+ 0x8C3C1F28, // 00F6 GETMET R15 R15 K40
+ 0xB8460400, // 00F7 GETNGBL R17 K2
+ 0x8C442329, // 00F8 GETMET R17 R17 K41
+ 0x7C440200, // 00F9 CALL R17 1
+ 0x5C481C00, // 00FA MOVE R18 R14
+ 0x7C3C0600, // 00FB CALL R15 3
+ 0x8C400D0A, // 00FC GETMET R16 R6 K10
+ 0x7C400200, // 00FD CALL R16 1
+ 0x8C44210B, // 00FE GETMET R17 R16 K11
+ 0x584C0006, // 00FF LDCONST R19 K6
+ 0x88500D19, // 0100 GETMBR R20 R6 K25
+ 0x5C541A00, // 0101 MOVE R21 R13
+ 0x7C440800, // 0102 CALL R17 4
+ 0x8C44210B, // 0103 GETMET R17 R16 K11
+ 0x584C0008, // 0104 LDCONST R19 K8
+ 0x88500D1D, // 0105 GETMBR R20 R6 K29
+ 0x5C541E00, // 0106 MOVE R21 R15
+ 0x7C440800, // 0107 CALL R17 4
+ 0x54460004, // 0108 LDINT R17 5
+ 0x900E0A11, // 0109 SETMBR R3 K5 R17
+ 0x80042000, // 010A RET 1 R16
+ 0x70020134, // 010B JMP #0241
+ 0x5426000A, // 010C LDINT R9 11
+ 0x1C241009, // 010D EQ R9 R8 R9
+ 0x78260012, // 010E JMPF R9 #0122
+ 0x8C240507, // 010F GETMET R9 R2 K7
+ 0x582C0006, // 0110 LDCONST R11 K6
+ 0x7C240400, // 0111 CALL R9 2
+ 0x8C28032C, // 0112 GETMET R10 R1 K44
+ 0x5C301200, // 0113 MOVE R12 R9
+ 0x7C280400, // 0114 CALL R10 2
+ 0xB82A3E00, // 0115 GETNGBL R10 K31
+ 0x8C281524, // 0116 GETMET R10 R10 K36
+ 0x8C301326, // 0117 GETMET R12 R9 K38
+ 0x7C300200, // 0118 CALL R12 1
+ 0x00325A0C, // 0119 ADD R12 K45 R12
+ 0x58340011, // 011A LDCONST R13 K17
+ 0x7C280600, // 011B CALL R10 3
+ 0xB82A0400, // 011C GETNGBL R10 K2
+ 0x8828152E, // 011D GETMBR R10 R10 K46
+ 0x900E2E0A, // 011E SETMBR R3 K23 R10
+ 0x4C280000, // 011F LDNIL R10
+ 0x80041400, // 0120 RET 1 R10
+ 0x7002011E, // 0121 JMP #0241
+ 0x54260005, // 0122 LDINT R9 6
+ 0x1C241009, // 0123 EQ R9 R8 R9
+ 0x782600B7, // 0124 JMPF R9 #01DD
+ 0x8C240507, // 0125 GETMET R9 R2 K7
+ 0x582C0006, // 0126 LDCONST R11 K6
+ 0x7C240400, // 0127 CALL R9 2
+ 0x8C280507, // 0128 GETMET R10 R2 K7
+ 0x58300008, // 0129 LDCONST R12 K8
+ 0x7C280400, // 012A CALL R10 2
+ 0x602C000C, // 012B GETGBL R11 G12
+ 0x5C301400, // 012C MOVE R12 R10
+ 0x7C2C0200, // 012D CALL R11 1
+ 0x1C2C1706, // 012E EQ R11 R11 K6
+ 0x782E0000, // 012F JMPF R11 #0131
+ 0x4C280000, // 0130 LDNIL R10
+ 0x8C2C0507, // 0131 GETMET R11 R2 K7
+ 0x5834000F, // 0132 LDCONST R13 K15
+ 0x7C2C0400, // 0133 CALL R11 2
+ 0x8C300507, // 0134 GETMET R12 R2 K7
+ 0x58380011, // 0135 LDCONST R14 K17
+ 0x7C300400, // 0136 CALL R12 2
+ 0x8C340507, // 0137 GETMET R13 R2 K7
+ 0x543E0003, // 0138 LDINT R15 4
+ 0x7C340400, // 0139 CALL R13 2
+ 0x8C38032F, // 013A GETMET R14 R1 K47
+ 0x7C380200, // 013B CALL R14 1
+ 0x4C3C0000, // 013C LDNIL R15
+ 0x1C381C0F, // 013D EQ R14 R14 R15
+ 0x783A0006, // 013E JMPF R14 #0146
+ 0xB83A3E00, // 013F GETNGBL R14 K31
+ 0x8C381D24, // 0140 GETMET R14 R14 K36
+ 0x58400030, // 0141 LDCONST R16 K48
+ 0x5844000F, // 0142 LDCONST R17 K15
+ 0x7C380600, // 0143 CALL R14 3
+ 0x4C380000, // 0144 LDNIL R14
+ 0x80041C00, // 0145 RET 1 R14
+ 0x8C380331, // 0146 GETMET R14 R1 K49
+ 0x5C401200, // 0147 MOVE R16 R9
+ 0x5C441400, // 0148 MOVE R17 R10
+ 0x7C380600, // 0149 CALL R14 3
+ 0x8C380332, // 014A GETMET R14 R1 K50
+ 0x5C401600, // 014B MOVE R16 R11
+ 0x7C380400, // 014C CALL R14 2
+ 0x8C380333, // 014D GETMET R14 R1 K51
+ 0x5C401800, // 014E MOVE R16 R12
+ 0x5C441A00, // 014F MOVE R17 R13
+ 0x7C380600, // 0150 CALL R14 3
+ 0xB83A0400, // 0151 GETNGBL R14 K2
+ 0x88381D03, // 0152 GETMBR R14 R14 K3
+ 0x8C381D34, // 0153 GETMET R14 R14 K52
+ 0x5C401200, // 0154 MOVE R16 R9
+ 0x7C380400, // 0155 CALL R14 2
+ 0x8C3C1D35, // 0156 GETMET R15 R14 K53
+ 0x54460005, // 0157 LDINT R17 6
+ 0x7C3C0400, // 0158 CALL R15 2
+ 0x8C401F07, // 0159 GETMET R16 R15 K7
+ 0x544A0014, // 015A LDINT R18 21
+ 0x7C400400, // 015B CALL R16 2
+ 0x8C441F07, // 015C GETMET R17 R15 K7
+ 0x544E0010, // 015D LDINT R19 17
+ 0x7C440400, // 015E CALL R17 2
+ 0x5C482000, // 015F MOVE R18 R16
+ 0x784A0001, // 0160 JMPF R18 #0163
+ 0x5C482200, // 0161 MOVE R18 R17
+ 0x744A0006, // 0162 JMPT R18 #016A
+ 0xB84A3E00, // 0163 GETNGBL R18 K31
+ 0x8C482524, // 0164 GETMET R18 R18 K36
+ 0x58500036, // 0165 LDCONST R20 K54
+ 0x5854000F, // 0166 LDCONST R21 K15
+ 0x7C480600, // 0167 CALL R18 3
+ 0x50480000, // 0168 LDBOOL R18 0 0
+ 0x80042400, // 0169 RET 1 R18
+ 0x60480004, // 016A GETGBL R18 G4
+ 0x5C4C2000, // 016B MOVE R19 R16
+ 0x7C480200, // 016C CALL R18 1
+ 0x1C482537, // 016D EQ R18 R18 K55
+ 0x784A0007, // 016E JMPF R18 #0177
+ 0xB84A7000, // 016F GETNGBL R18 K56
+ 0x8C482539, // 0170 GETMET R18 R18 K57
+ 0x5C502000, // 0171 MOVE R20 R16
+ 0x7C480400, // 0172 CALL R18 2
+ 0x8C48253A, // 0173 GETMET R18 R18 K58
+ 0x7C480200, // 0174 CALL R18 1
+ 0x5C402400, // 0175 MOVE R16 R18
+ 0x70020002, // 0176 JMP #017A
+ 0x8C48213A, // 0177 GETMET R18 R16 K58
+ 0x7C480200, // 0178 CALL R18 1
+ 0x5C402400, // 0179 MOVE R16 R18
+ 0x60480004, // 017A GETGBL R18 G4
+ 0x5C4C2200, // 017B MOVE R19 R17
+ 0x7C480200, // 017C CALL R18 1
+ 0x1C482537, // 017D EQ R18 R18 K55
+ 0x784A0007, // 017E JMPF R18 #0187
+ 0xB84A7000, // 017F GETNGBL R18 K56
+ 0x8C482539, // 0180 GETMET R18 R18 K57
+ 0x5C502200, // 0181 MOVE R20 R17
+ 0x7C480400, // 0182 CALL R18 2
+ 0x8C48253A, // 0183 GETMET R18 R18 K58
+ 0x7C480200, // 0184 CALL R18 1
+ 0x5C442400, // 0185 MOVE R17 R18
+ 0x70020002, // 0186 JMP #018A
+ 0x8C48233A, // 0187 GETMET R18 R17 K58
+ 0x7C480200, // 0188 CALL R18 1
+ 0x5C442400, // 0189 MOVE R17 R18
+ 0xB84A0400, // 018A GETNGBL R18 K2
+ 0x88482503, // 018B GETMBR R18 R18 K3
+ 0x8C482534, // 018C GETMET R18 R18 K52
+ 0x8C50032F, // 018D GETMET R20 R1 K47
+ 0x7C500200, // 018E CALL R20 1
+ 0x7C480400, // 018F CALL R18 2
+ 0x8C482507, // 0190 GETMET R18 R18 K7
+ 0x54520008, // 0191 LDINT R20 9
+ 0x7C480400, // 0192 CALL R18 2
+ 0x404E113B, // 0193 CONNECT R19 K8 K59
+ 0x94482413, // 0194 GETIDX R18 R18 R19
+ 0x60500015, // 0195 GETGBL R20 G21
+ 0x7C500000, // 0196 CALL R20 0
+ 0x8C50293C, // 0197 GETMET R20 R20 K60
+ 0x5858003D, // 0198 LDCONST R22 K61
+ 0x7C500400, // 0199 CALL R20 2
+ 0x5C4C2800, // 019A MOVE R19 R20
+ 0x8C50093E, // 019B GETMET R20 R4 K62
+ 0x7C500200, // 019C CALL R20 1
+ 0x8C54213F, // 019D GETMET R21 R16 K63
+ 0x7C540200, // 019E CALL R21 1
+ 0x8C542B40, // 019F GETMET R21 R21 K64
+ 0x7C540200, // 01A0 CALL R21 1
+ 0x8C582941, // 01A1 GETMET R22 R20 K65
+ 0x5C602400, // 01A2 MOVE R24 R18
+ 0x5C642A00, // 01A3 MOVE R25 R21
+ 0x5C682600, // 01A4 MOVE R26 R19
+ 0x546E0007, // 01A5 LDINT R27 8
+ 0x7C580A00, // 01A6 CALL R22 5
+ 0x8C5C0342, // 01A7 GETMET R23 R1 K66
+ 0x5C642000, // 01A8 MOVE R25 R16
+ 0x5C682200, // 01A9 MOVE R26 R17
+ 0x5C6C2C00, // 01AA MOVE R27 R22
+ 0x88700115, // 01AB GETMBR R28 R0 K21
+ 0x88703943, // 01AC GETMBR R28 R28 K67
+ 0x7C5C0A00, // 01AD CALL R23 5
+ 0x8C5C0344, // 01AE GETMET R23 R1 K68
+ 0x7C5C0200, // 01AF CALL R23 1
+ 0x8C5C0345, // 01B0 GETMET R23 R1 K69
+ 0x7C5C0200, // 01B1 CALL R23 1
+ 0x885C0115, // 01B2 GETMBR R23 R0 K21
+ 0x8C5C2F46, // 01B3 GETMET R23 R23 K70
+ 0x5C640200, // 01B4 MOVE R25 R1
+ 0x7C5C0400, // 01B5 CALL R23 2
+ 0xB85E3E00, // 01B6 GETNGBL R23 K31
+ 0x8C5C2F24, // 01B7 GETMET R23 R23 K36
+ 0x58640047, // 01B8 LDCONST R25 K71
+ 0x58680011, // 01B9 LDCONST R26 K17
+ 0x7C5C0600, // 01BA CALL R23 3
+ 0xB85E3E00, // 01BB GETNGBL R23 K31
+ 0x8C5C2F24, // 01BC GETMET R23 R23 K36
+ 0xB8660400, // 01BD GETNGBL R25 K2
+ 0x8C643349, // 01BE GETMET R25 R25 K73
+ 0x886C034A, // 01BF GETMBR R27 R1 K74
+ 0x7C640400, // 01C0 CALL R25 2
+ 0x00669019, // 01C1 ADD R25 K72 R25
+ 0x58680011, // 01C2 LDCONST R26 K17
+ 0x7C5C0600, // 01C3 CALL R23 3
+ 0xB85E3E00, // 01C4 GETNGBL R23 K31
+ 0x8C5C2F24, // 01C5 GETMET R23 R23 K36
+ 0x58640047, // 01C6 LDCONST R25 K71
+ 0x58680011, // 01C7 LDCONST R26 K17
+ 0x7C5C0600, // 01C8 CALL R23 3
+ 0x885C034A, // 01C9 GETMBR R23 R1 K74
+ 0x8C5C2F4B, // 01CA GETMET R23 R23 K75
+ 0x7C5C0200, // 01CB CALL R23 1
+ 0x8C5C0D0A, // 01CC GETMET R23 R6 K10
+ 0x7C5C0200, // 01CD CALL R23 1
+ 0x8C602F0B, // 01CE GETMET R24 R23 K11
+ 0x58680006, // 01CF LDCONST R26 K6
+ 0x886C0D0C, // 01D0 GETMBR R27 R6 K12
+ 0xB8720400, // 01D1 GETNGBL R28 K2
+ 0x8870392E, // 01D2 GETMBR R28 R28 K46
+ 0x7C600800, // 01D3 CALL R24 4
+ 0x8C602F0B, // 01D4 GETMET R24 R23 K11
+ 0x58680008, // 01D5 LDCONST R26 K8
+ 0x886C0D0C, // 01D6 GETMBR R27 R6 K12
+ 0x58700008, // 01D7 LDCONST R28 K8
+ 0x7C600800, // 01D8 CALL R24 4
+ 0x54620007, // 01D9 LDINT R24 8
+ 0x900E0A18, // 01DA SETMBR R3 K5 R24
+ 0x80042E00, // 01DB RET 1 R23
+ 0x70020063, // 01DC JMP #0241
+ 0x54260008, // 01DD LDINT R9 9
+ 0x1C241009, // 01DE EQ R9 R8 R9
+ 0x7826001E, // 01DF JMPF R9 #01FF
+ 0x8C240507, // 01E0 GETMET R9 R2 K7
+ 0x582C0006, // 01E1 LDCONST R11 K6
+ 0x7C240400, // 01E2 CALL R9 2
+ 0x8C28034C, // 01E3 GETMET R10 R1 K76
+ 0x5C301200, // 01E4 MOVE R12 R9
+ 0x7C280400, // 01E5 CALL R10 2
+ 0xB82A3E00, // 01E6 GETNGBL R10 K31
+ 0x8C281524, // 01E7 GETMET R10 R10 K36
+ 0x8C300B4D, // 01E8 GETMET R12 R5 K77
+ 0x5838004E, // 01E9 LDCONST R14 K78
+ 0x883C034A, // 01EA GETMBR R15 R1 K74
+ 0x8C3C1F4F, // 01EB GETMET R15 R15 K79
+ 0x7C3C0200, // 01EC CALL R15 1
+ 0x8C3C1F3F, // 01ED GETMET R15 R15 K63
+ 0x7C3C0200, // 01EE CALL R15 1
+ 0x8C3C1F40, // 01EF GETMET R15 R15 K64
+ 0x7C3C0200, // 01F0 CALL R15 1
+ 0x8C3C1F26, // 01F1 GETMET R15 R15 K38
+ 0x7C3C0200, // 01F2 CALL R15 1
+ 0x60400008, // 01F3 GETGBL R16 G8
+ 0x5C441200, // 01F4 MOVE R17 R9
+ 0x7C400200, // 01F5 CALL R16 1
+ 0x7C300800, // 01F6 CALL R12 4
+ 0x5834000F, // 01F7 LDCONST R13 K15
+ 0x7C280600, // 01F8 CALL R10 3
+ 0xB82A0400, // 01F9 GETNGBL R10 K2
+ 0x8828152E, // 01FA GETMBR R10 R10 K46
+ 0x900E2E0A, // 01FB SETMBR R3 K23 R10
+ 0x4C280000, // 01FC LDNIL R10
+ 0x80041400, // 01FD RET 1 R10
+ 0x70020041, // 01FE JMP #0241
+ 0x54260009, // 01FF LDINT R9 10
+ 0x1C241009, // 0200 EQ R9 R8 R9
+ 0x7826003E, // 0201 JMPF R9 #0241
+ 0x8C240507, // 0202 GETMET R9 R2 K7
+ 0x582C0006, // 0203 LDCONST R11 K6
+ 0x7C240400, // 0204 CALL R9 2
+ 0x60280010, // 0205 GETGBL R10 G16
+ 0x882C0115, // 0206 GETMBR R11 R0 K21
+ 0x882C1750, // 0207 GETMBR R11 R11 K80
+ 0x8C2C1751, // 0208 GETMET R11 R11 K81
+ 0x7C2C0200, // 0209 CALL R11 1
+ 0x7C280200, // 020A CALL R10 1
+ 0xA802001D, // 020B EXBLK 0 #022A
+ 0x5C2C1400, // 020C MOVE R11 R10
+ 0x7C2C0000, // 020D CALL R11 0
+ 0x8C301752, // 020E GETMET R12 R11 K82
+ 0x7C300200, // 020F CALL R12 1
+ 0x1C301809, // 0210 EQ R12 R12 R9
+ 0x78320015, // 0211 JMPF R12 #0228
+ 0xB8323E00, // 0212 GETNGBL R12 K31
+ 0x8C301924, // 0213 GETMET R12 R12 K36
+ 0x8C38174F, // 0214 GETMET R14 R11 K79
+ 0x7C380200, // 0215 CALL R14 1
+ 0x8C381D3F, // 0216 GETMET R14 R14 K63
+ 0x7C380200, // 0217 CALL R14 1
+ 0x8C381D40, // 0218 GETMET R14 R14 K64
+ 0x7C380200, // 0219 CALL R14 1
+ 0x8C381D26, // 021A GETMET R14 R14 K38
+ 0x7C380200, // 021B CALL R14 1
+ 0x003AA60E, // 021C ADD R14 K83 R14
+ 0x583C000F, // 021D LDCONST R15 K15
+ 0x7C300600, // 021E CALL R12 3
+ 0xB8323E00, // 021F GETNGBL R12 K31
+ 0x8C301954, // 0220 GETMET R12 R12 K84
+ 0x543A07CF, // 0221 LDINT R14 2000
+ 0x843C0000, // 0222 CLOSURE R15 P0
+ 0x7C300600, // 0223 CALL R12 3
+ 0x50300200, // 0224 LDBOOL R12 1 0
+ 0xA0000000, // 0225 CLOSE R0
+ 0xA8040001, // 0226 EXBLK 1 1
+ 0x80041800, // 0227 RET 1 R12
+ 0xA0280000, // 0228 CLOSE R10
+ 0x7001FFE1, // 0229 JMP #020C
+ 0x58280055, // 022A LDCONST R10 K85
+ 0xAC280200, // 022B CATCH R10 1 0
+ 0xB0080000, // 022C RAISE 2 R0 R0
+ 0xB82A3E00, // 022D GETNGBL R10 K31
+ 0x8C281524, // 022E GETMET R10 R10 K36
+ 0x60300008, // 022F GETGBL R12 G8
+ 0x5C341200, // 0230 MOVE R13 R9
+ 0x7C300200, // 0231 CALL R12 1
+ 0x0032AC0C, // 0232 ADD R12 K86 R12
+ 0x00301957, // 0233 ADD R12 R12 K87
+ 0x5834000F, // 0234 LDCONST R13 K15
+ 0x7C280600, // 0235 CALL R10 3
+ 0xB82A0400, // 0236 GETNGBL R10 K2
+ 0x88281558, // 0237 GETMBR R10 R10 K88
+ 0x900E2E0A, // 0238 SETMBR R3 K23 R10
+ 0x60280008, // 0239 GETGBL R10 G8
+ 0x5C2C1200, // 023A MOVE R11 R9
+ 0x7C280200, // 023B CALL R10 1
+ 0x002AB20A, // 023C ADD R10 K89 R10
+ 0x900E480A, // 023D SETMBR R3 K36 R10
+ 0x4C280000, // 023E LDNIL R10
+ 0xA0000000, // 023F CLOSE R0
+ 0x80041400, // 0240 RET 1 R10
+ 0x7002009A, // 0241 JMP #02DD
+ 0x5426003B, // 0242 LDINT R9 60
+ 0x1C240E09, // 0243 EQ R9 R7 R9
+ 0x78260084, // 0244 JMPF R9 #02CA
+ 0x1C241106, // 0245 EQ R9 R8 K6
+ 0x78260064, // 0246 JMPF R9 #02AC
+ 0x8C240507, // 0247 GETMET R9 R2 K7
+ 0x582C0006, // 0248 LDCONST R11 K6
+ 0x7C240400, // 0249 CALL R9 2
+ 0x8C280507, // 024A GETMET R10 R2 K7
+ 0x58300008, // 024B LDCONST R12 K8
+ 0x7C280400, // 024C CALL R10 2
+ 0x8C2C0507, // 024D GETMET R11 R2 K7
+ 0x5834000F, // 024E LDCONST R13 K15
+ 0x7C2C0400, // 024F CALL R11 2
+ 0x8C300507, // 0250 GETMET R12 R2 K7
+ 0x58380011, // 0251 LDCONST R14 K17
+ 0x7C300400, // 0252 CALL R12 2
+ 0x8C340507, // 0253 GETMET R13 R2 K7
+ 0x543E0003, // 0254 LDINT R15 4
+ 0x7C340400, // 0255 CALL R13 2
+ 0xB83A3E00, // 0256 GETNGBL R14 K31
+ 0x8C381D24, // 0257 GETMET R14 R14 K36
+ 0x8C400B4D, // 0258 GETMET R16 R5 K77
+ 0x5848005A, // 0259 LDCONST R18 K90
+ 0x5C4C1200, // 025A MOVE R19 R9
+ 0x8C501526, // 025B GETMET R20 R10 K38
+ 0x7C500200, // 025C CALL R20 1
+ 0x5C541600, // 025D MOVE R21 R11
+ 0x5C581800, // 025E MOVE R22 R12
+ 0x8C5C1B26, // 025F GETMET R23 R13 K38
+ 0x7C5C0200, // 0260 CALL R23 1
+ 0x7C400E00, // 0261 CALL R16 7
+ 0x5844000F, // 0262 LDCONST R17 K15
+ 0x7C380600, // 0263 CALL R14 3
+ 0x4C380000, // 0264 LDNIL R14
+ 0x1C38120E, // 0265 EQ R14 R9 R14
+ 0x743A000B, // 0266 JMPT R14 #0273
+ 0x4C380000, // 0267 LDNIL R14
+ 0x1C38140E, // 0268 EQ R14 R10 R14
+ 0x743A0008, // 0269 JMPT R14 #0273
+ 0x4C380000, // 026A LDNIL R14
+ 0x1C38160E, // 026B EQ R14 R11 R14
+ 0x743A0005, // 026C JMPT R14 #0273
+ 0x4C380000, // 026D LDNIL R14
+ 0x1C38180E, // 026E EQ R14 R12 R14
+ 0x743A0002, // 026F JMPT R14 #0273
+ 0x4C380000, // 0270 LDNIL R14
+ 0x1C381A0E, // 0271 EQ R14 R13 R14
+ 0x783A0005, // 0272 JMPF R14 #0279
+ 0xB83A0400, // 0273 GETNGBL R14 K2
+ 0x88381D5B, // 0274 GETMBR R14 R14 K91
+ 0x900E2E0E, // 0275 SETMBR R3 K23 R14
+ 0x4C380000, // 0276 LDNIL R14
+ 0xA0000000, // 0277 CLOSE R0
+ 0x80041C00, // 0278 RET 1 R14
+ 0x6038000C, // 0279 GETGBL R14 G12
+ 0x5C3C1400, // 027A MOVE R15 R10
+ 0x7C380200, // 027B CALL R14 1
+ 0x543E001F, // 027C LDINT R15 32
+ 0x54420040, // 027D LDINT R16 65
+ 0x003C1E10, // 027E ADD R15 R15 R16
+ 0x20381C0F, // 027F NE R14 R14 R15
+ 0x743A000B, // 0280 JMPT R14 #028D
+ 0x6038000C, // 0281 GETGBL R14 G12
+ 0x5C3C1A00, // 0282 MOVE R15 R13
+ 0x7C380200, // 0283 CALL R14 1
+ 0x543E000F, // 0284 LDINT R15 16
+ 0x14381C0F, // 0285 LT R14 R14 R15
+ 0x743A0005, // 0286 JMPT R14 #028D
+ 0x6038000C, // 0287 GETGBL R14 G12
+ 0x5C3C1A00, // 0288 MOVE R15 R13
+ 0x7C380200, // 0289 CALL R14 1
+ 0x543E001F, // 028A LDINT R15 32
+ 0x24381C0F, // 028B GT R14 R14 R15
+ 0x783A0009, // 028C JMPF R14 #0297
+ 0xB83A3E00, // 028D GETNGBL R14 K31
+ 0x8C381D24, // 028E GETMET R14 R14 K36
+ 0x5840005C, // 028F LDCONST R16 K92
+ 0x7C380400, // 0290 CALL R14 2
+ 0xB83A0400, // 0291 GETNGBL R14 K2
+ 0x88381D5D, // 0292 GETMBR R14 R14 K93
+ 0x900E2E0E, // 0293 SETMBR R3 K23 R14
+ 0x4C380000, // 0294 LDNIL R14
+ 0xA0000000, // 0295 CLOSE R0
+ 0x80041C00, // 0296 RET 1 R14
+ 0x543A001E, // 0297 LDINT R14 31
+ 0x403A0C0E, // 0298 CONNECT R14 K6 R14
+ 0x9438140E, // 0299 GETIDX R14 R10 R14
+ 0x543E001F, // 029A LDINT R15 32
+ 0x403C1F3B, // 029B CONNECT R15 R15 K59
+ 0x943C140F, // 029C GETIDX R15 R10 R15
+ 0x88400115, // 029D GETMBR R16 R0 K21
+ 0x8C40215E, // 029E GETMET R16 R16 K94
+ 0x5C481200, // 029F MOVE R18 R9
+ 0x5C4C1800, // 02A0 MOVE R19 R12
+ 0x5C501600, // 02A1 MOVE R20 R11
+ 0x5C541A00, // 02A2 MOVE R21 R13
+ 0x5C581C00, // 02A3 MOVE R22 R14
+ 0x5C5C1E00, // 02A4 MOVE R23 R15
+ 0x8C60035F, // 02A5 GETMET R24 R1 K95
+ 0x7C600200, // 02A6 CALL R24 1
+ 0x7C401000, // 02A7 CALL R16 8
+ 0x50400200, // 02A8 LDBOOL R16 1 0
+ 0xA0000000, // 02A9 CLOSE R0
+ 0x80042000, // 02AA RET 1 R16
+ 0x7002001C, // 02AB JMP #02C9
+ 0x1C241108, // 02AC EQ R9 R8 K8
+ 0x78260012, // 02AD JMPF R9 #02C1
+ 0x8C240507, // 02AE GETMET R9 R2 K7
+ 0x582C0006, // 02AF LDCONST R11 K6
+ 0x7C240400, // 02B0 CALL R9 2
+ 0xB82A3E00, // 02B1 GETNGBL R10 K31
+ 0x8C281524, // 02B2 GETMET R10 R10 K36
+ 0x60300008, // 02B3 GETGBL R12 G8
+ 0x5C341200, // 02B4 MOVE R13 R9
+ 0x7C300200, // 02B5 CALL R12 1
+ 0x0032C00C, // 02B6 ADD R12 K96 R12
+ 0x5834000F, // 02B7 LDCONST R13 K15
+ 0x7C280600, // 02B8 CALL R10 3
+ 0x88280115, // 02B9 GETMBR R10 R0 K21
+ 0x8C281561, // 02BA GETMET R10 R10 K97
+ 0x5C301200, // 02BB MOVE R12 R9
+ 0x7C280400, // 02BC CALL R10 2
+ 0x50280200, // 02BD LDBOOL R10 1 0
+ 0xA0000000, // 02BE CLOSE R0
+ 0x80041400, // 02BF RET 1 R10
+ 0x70020007, // 02C0 JMP #02C9
+ 0x1C24110F, // 02C1 EQ R9 R8 K15
+ 0x78260005, // 02C2 JMPF R9 #02C9
+ 0x88240115, // 02C3 GETMBR R9 R0 K21
+ 0x8C241362, // 02C4 GETMET R9 R9 K98
+ 0x7C240200, // 02C5 CALL R9 1
+ 0x50240200, // 02C6 LDBOOL R9 1 0
+ 0xA0000000, // 02C7 CLOSE R0
+ 0x80041200, // 02C8 RET 1 R9
+ 0x70020012, // 02C9 JMP #02DD
+ 0x54260029, // 02CA LDINT R9 42
+ 0x1C240E09, // 02CB EQ R9 R7 R9
+ 0x78260005, // 02CC JMPF R9 #02D3
+ 0x1C241106, // 02CD EQ R9 R8 K6
+ 0x78260002, // 02CE JMPF R9 #02D2
+ 0x50240200, // 02CF LDBOOL R9 1 0
+ 0xA0000000, // 02D0 CLOSE R0
+ 0x80041200, // 02D1 RET 1 R9
+ 0x70020009, // 02D2 JMP #02DD
+ 0x60240003, // 02D3 GETGBL R9 G3
+ 0x5C280000, // 02D4 MOVE R10 R0
+ 0x7C240200, // 02D5 CALL R9 1
+ 0x8C241363, // 02D6 GETMET R9 R9 K99
+ 0x5C2C0200, // 02D7 MOVE R11 R1
+ 0x5C300400, // 02D8 MOVE R12 R2
+ 0x5C340600, // 02D9 MOVE R13 R3
+ 0x7C240800, // 02DA CALL R9 4
+ 0xA0000000, // 02DB CLOSE R0
+ 0x80041200, // 02DC RET 1 R9
+ 0xA0000000, // 02DD CLOSE R0
+ 0x80000000, // 02DE RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_Plugin_Root
+********************************************************************/
+extern const bclass be_class_Matter_Plugin;
+be_local_class(Matter_Plugin_Root,
+ 0,
+ &be_class_Matter_Plugin,
+ be_nested_map(6,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(read_attribute, -1), be_const_closure(Matter_Plugin_Root_read_attribute_closure) },
+ { be_const_key_weak(write_attribute, -1), be_const_closure(Matter_Plugin_Root_write_attribute_closure) },
+ { be_const_key_weak(TYPES, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(1,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_int(22, -1), be_const_int(1) },
+ })) ) } )) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_Plugin_Root_init_closure) },
+ { be_const_key_weak(CLUSTERS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(13,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_int(52, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(0,
+ ( (struct bvalue*) &(const bvalue[]) {
+ })) ) } )) },
+ { be_const_key_int(40, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(14,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ be_const_int(2),
+ be_const_int(3),
+ be_const_int(4),
+ be_const_int(5),
+ be_const_int(6),
+ be_const_int(7),
+ be_const_int(8),
+ be_const_int(9),
+ be_const_int(10),
+ be_const_int(15),
+ be_const_int(18),
+ be_const_int(19),
+ })) ) } )) },
+ { be_const_key_int(62, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(6,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ be_const_int(2),
+ be_const_int(3),
+ be_const_int(4),
+ be_const_int(5),
+ })) ) } )) },
+ { be_const_key_int(63, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(0,
+ ( (struct bvalue*) &(const bvalue[]) {
+ })) ) } )) },
+ { be_const_key_int(56, 6), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(3,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ be_const_int(7),
+ })) ) } )) },
+ { be_const_key_int(44, 7), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(3,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ be_const_int(2),
+ })) ) } )) },
+ { be_const_key_int(43, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(2,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ })) ) } )) },
+ { be_const_key_int(31, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(4,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(2),
+ be_const_int(3),
+ be_const_int(4),
+ })) ) } )) },
+ { be_const_key_int(60, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(3,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ be_const_int(2),
+ })) ) } )) },
+ { be_const_key_int(48, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(5,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ be_const_int(2),
+ be_const_int(3),
+ be_const_int(4),
+ })) ) } )) },
+ { be_const_key_int(49, 2), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(3,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(3),
+ be_const_int(4),
+ be_const_int(65532),
+ })) ) } )) },
+ { be_const_key_int(50, 3), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(0,
+ ( (struct bvalue*) &(const bvalue[]) {
+ })) ) } )) },
+ { be_const_key_int(51, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(4,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ be_const_int(2),
+ be_const_int(8),
+ })) ) } )) },
+ })) ) } )) },
+ { be_const_key_weak(invoke_request, -1), be_const_closure(Matter_Plugin_Root_invoke_request_closure) },
+ })),
+ be_str_weak(Matter_Plugin_Root)
+);
+/*******************************************************************/
+
+void be_load_Matter_Plugin_Root_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_Plugin_Root);
+ be_setglobal(vm, "Matter_Plugin_Root");
+ be_pop(vm, 1);
+}
+/********************************************************************/
+/* End of solidification */
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Temp_Sensor.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Temp_Sensor.h
new file mode 100644
index 000000000..0c91b56c3
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_Temp_Sensor.h
@@ -0,0 +1,295 @@
+/* Solidification of Matter_Plugin_Temp_Sensor.h */
+/********************************************************************\
+* Generated code, don't edit *
+\********************************************************************/
+#include "be_constobj.h"
+
+extern const bclass be_class_Matter_Plugin_Temp_Sensor;
+
+/********************************************************************
+** Solidified function: get_temperature
+********************************************************************/
+be_local_closure(Matter_Plugin_Temp_Sensor_get_temperature, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(shadow_temperature),
+ }),
+ be_str_weak(get_temperature),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: every_second
+********************************************************************/
+be_local_closure(Matter_Plugin_Temp_Sensor_every_second, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(get_temperature),
+ }),
+ be_str_weak(every_second),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x8C040100, // 0000 GETMET R1 R0 K0
+ 0x7C040200, // 0001 CALL R1 1
+ 0x80000000, // 0002 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: parse_sensors
+********************************************************************/
+be_local_closure(Matter_Plugin_Temp_Sensor_parse_sensors, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(tasmota_sensor_matcher),
+ /* K1 */ be_nested_str_weak(match),
+ /* K2 */ be_nested_str_weak(shadow_temperature),
+ /* K3 */ be_nested_str_weak(attribute_updated),
+ /* K4 */ be_const_int(0),
+ }),
+ be_str_weak(parse_sensors),
+ &be_const_str_solidified,
+ ( &(const binstruction[21]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x780A0011, // 0001 JMPF R2 #0014
+ 0x6008000A, // 0002 GETGBL R2 G10
+ 0x880C0100, // 0003 GETMBR R3 R0 K0
+ 0x8C0C0701, // 0004 GETMET R3 R3 K1
+ 0x5C140200, // 0005 MOVE R5 R1
+ 0x7C0C0400, // 0006 CALL R3 2
+ 0x7C080200, // 0007 CALL R2 1
+ 0x4C0C0000, // 0008 LDNIL R3
+ 0x200C0403, // 0009 NE R3 R2 R3
+ 0x780E0008, // 000A JMPF R3 #0014
+ 0x880C0102, // 000B GETMBR R3 R0 K2
+ 0x200C0403, // 000C NE R3 R2 R3
+ 0x780E0004, // 000D JMPF R3 #0013
+ 0x8C0C0103, // 000E GETMET R3 R0 K3
+ 0x4C140000, // 000F LDNIL R5
+ 0x541A0401, // 0010 LDINT R6 1026
+ 0x581C0004, // 0011 LDCONST R7 K4
+ 0x7C0C0800, // 0012 CALL R3 4
+ 0x90020402, // 0013 SETMBR R0 K2 R2
+ 0x80000000, // 0014 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_Plugin_Temp_Sensor_init, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(init),
+ /* K1 */ be_nested_str_weak(tasmota_sensor_filter),
+ /* K2 */ be_nested_str_weak(tasmota_sensor_matcher),
+ /* K3 */ be_nested_str_weak(tasmota),
+ /* K4 */ be_nested_str_weak(Rule_Matcher),
+ /* K5 */ be_nested_str_weak(parse),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[15]) { /* code */
+ 0x60100003, // 0000 GETGBL R4 G3
+ 0x5C140000, // 0001 MOVE R5 R0
+ 0x7C100200, // 0002 CALL R4 1
+ 0x8C100900, // 0003 GETMET R4 R4 K0
+ 0x5C180200, // 0004 MOVE R6 R1
+ 0x5C1C0400, // 0005 MOVE R7 R2
+ 0x7C100600, // 0006 CALL R4 3
+ 0x90020203, // 0007 SETMBR R0 K1 R3
+ 0xB8120600, // 0008 GETNGBL R4 K3
+ 0x88100904, // 0009 GETMBR R4 R4 K4
+ 0x8C100905, // 000A GETMET R4 R4 K5
+ 0x5C180600, // 000B MOVE R6 R3
+ 0x7C100400, // 000C CALL R4 2
+ 0x90020404, // 000D SETMBR R0 K2 R4
+ 0x80000000, // 000E RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: read_attribute
+********************************************************************/
+be_local_closure(Matter_Plugin_Temp_Sensor_read_attribute, /* name */
+ be_nested_proto(
+ 13, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[13]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(TLV),
+ /* K3 */ be_nested_str_weak(cluster),
+ /* K4 */ be_nested_str_weak(attribute),
+ /* K5 */ be_const_int(0),
+ /* K6 */ be_nested_str_weak(shadow_temperature),
+ /* K7 */ be_nested_str_weak(create_TLV),
+ /* K8 */ be_nested_str_weak(I2),
+ /* K9 */ be_nested_str_weak(NULL),
+ /* K10 */ be_const_int(1),
+ /* K11 */ be_const_int(2),
+ /* K12 */ be_nested_str_weak(read_attribute),
+ }),
+ be_str_weak(read_attribute),
+ &be_const_str_solidified,
+ ( &(const binstruction[55]) { /* code */
+ 0xA40E0000, // 0000 IMPORT R3 K0
+ 0xB8120200, // 0001 GETNGBL R4 K1
+ 0x88100902, // 0002 GETMBR R4 R4 K2
+ 0x88140503, // 0003 GETMBR R5 R2 K3
+ 0x88180504, // 0004 GETMBR R6 R2 K4
+ 0x541E0401, // 0005 LDINT R7 1026
+ 0x1C1C0A07, // 0006 EQ R7 R5 R7
+ 0x781E0025, // 0007 JMPF R7 #002E
+ 0x1C1C0D05, // 0008 EQ R7 R6 K5
+ 0x781E0013, // 0009 JMPF R7 #001E
+ 0x881C0106, // 000A GETMBR R7 R0 K6
+ 0x4C200000, // 000B LDNIL R8
+ 0x201C0E08, // 000C NE R7 R7 R8
+ 0x781E0009, // 000D JMPF R7 #0018
+ 0x8C1C0907, // 000E GETMET R7 R4 K7
+ 0x88240908, // 000F GETMBR R9 R4 K8
+ 0x60280009, // 0010 GETGBL R10 G9
+ 0x882C0106, // 0011 GETMBR R11 R0 K6
+ 0x54320063, // 0012 LDINT R12 100
+ 0x082C160C, // 0013 MUL R11 R11 R12
+ 0x7C280200, // 0014 CALL R10 1
+ 0x7C1C0600, // 0015 CALL R7 3
+ 0x80040E00, // 0016 RET 1 R7
+ 0x70020004, // 0017 JMP #001D
+ 0x8C1C0907, // 0018 GETMET R7 R4 K7
+ 0x88240909, // 0019 GETMBR R9 R4 K9
+ 0x4C280000, // 001A LDNIL R10
+ 0x7C1C0600, // 001B CALL R7 3
+ 0x80040E00, // 001C RET 1 R7
+ 0x7002000E, // 001D JMP #002D
+ 0x1C1C0D0A, // 001E EQ R7 R6 K10
+ 0x781E0005, // 001F JMPF R7 #0026
+ 0x8C1C0907, // 0020 GETMET R7 R4 K7
+ 0x88240908, // 0021 GETMBR R9 R4 K8
+ 0x5429EC77, // 0022 LDINT R10 -5000
+ 0x7C1C0600, // 0023 CALL R7 3
+ 0x80040E00, // 0024 RET 1 R7
+ 0x70020006, // 0025 JMP #002D
+ 0x1C1C0D0B, // 0026 EQ R7 R6 K11
+ 0x781E0004, // 0027 JMPF R7 #002D
+ 0x8C1C0907, // 0028 GETMET R7 R4 K7
+ 0x88240908, // 0029 GETMBR R9 R4 K8
+ 0x542A3A97, // 002A LDINT R10 15000
+ 0x7C1C0600, // 002B CALL R7 3
+ 0x80040E00, // 002C RET 1 R7
+ 0x70020007, // 002D JMP #0036
+ 0x601C0003, // 002E GETGBL R7 G3
+ 0x5C200000, // 002F MOVE R8 R0
+ 0x7C1C0200, // 0030 CALL R7 1
+ 0x8C1C0F0C, // 0031 GETMET R7 R7 K12
+ 0x5C240200, // 0032 MOVE R9 R1
+ 0x5C280400, // 0033 MOVE R10 R2
+ 0x7C1C0600, // 0034 CALL R7 3
+ 0x80040E00, // 0035 RET 1 R7
+ 0x80000000, // 0036 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_Plugin_Temp_Sensor
+********************************************************************/
+extern const bclass be_class_Matter_Plugin_Device;
+be_local_class(Matter_Plugin_Temp_Sensor,
+ 3,
+ &be_class_Matter_Plugin_Device,
+ be_nested_map(10,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(TYPES, 7), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(1,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_int(770, -1), be_const_int(2) },
+ })) ) } )) },
+ { be_const_key_weak(read_attribute, -1), be_const_closure(Matter_Plugin_Temp_Sensor_read_attribute_closure) },
+ { be_const_key_weak(get_temperature, 1), be_const_closure(Matter_Plugin_Temp_Sensor_get_temperature_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_Plugin_Temp_Sensor_init_closure) },
+ { be_const_key_weak(CLUSTERS, 9), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
+ be_const_map( * be_nested_map(1,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_int(1026, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
+ be_const_list( * be_nested_list(3,
+ ( (struct bvalue*) &(const bvalue[]) {
+ be_const_int(0),
+ be_const_int(1),
+ be_const_int(2),
+ })) ) } )) },
+ })) ) } )) },
+ { be_const_key_weak(every_second, 3), be_const_closure(Matter_Plugin_Temp_Sensor_every_second_closure) },
+ { be_const_key_weak(tasmota_sensor_filter, 8), be_const_var(0) },
+ { be_const_key_weak(tasmota_sensor_matcher, -1), be_const_var(1) },
+ { be_const_key_weak(parse_sensors, -1), be_const_closure(Matter_Plugin_Temp_Sensor_parse_sensors_closure) },
+ { be_const_key_weak(shadow_temperature, -1), be_const_var(2) },
+ })),
+ be_str_weak(Matter_Plugin_Temp_Sensor)
+);
+/*******************************************************************/
+
+void be_load_Matter_Plugin_Temp_Sensor_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_Plugin_Temp_Sensor);
+ be_setglobal(vm, "Matter_Plugin_Temp_Sensor");
+ be_pop(vm, 1);
+}
+/********************************************************************/
+/* End of solidification */
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_core.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_core.h
deleted file mode 100644
index 10592a17a..000000000
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_core.h
+++ /dev/null
@@ -1,1606 +0,0 @@
-/* Solidification of Matter_Plugin_core.h */
-/********************************************************************\
-* Generated code, don't edit *
-\********************************************************************/
-#include "be_constobj.h"
-
-extern const bclass be_class_Matter_Plugin_core;
-
-/********************************************************************
-** Solidified function: invoke_request
-********************************************************************/
-be_local_closure(Matter_Plugin_core_invoke_request, /* name */
- be_nested_proto(
- 29, /* nstack */
- 4, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[73]) { /* constants */
- /* K0 */ be_nested_str_weak(crypto),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(TLV),
- /* K3 */ be_nested_str_weak(cluster),
- /* K4 */ be_nested_str_weak(command),
- /* K5 */ be_nested_str_weak(session),
- /* K6 */ be_const_int(0),
- /* K7 */ be_nested_str_weak(findsubval),
- /* K8 */ be_const_int(1),
- /* K9 */ be_nested_str_weak(breadcrumb),
- /* K10 */ be_nested_str_weak(Matter_TLV_struct),
- /* K11 */ be_nested_str_weak(add_TLV),
- /* K12 */ be_nested_str_weak(U1),
- /* K13 */ be_nested_str_weak(UTF1),
- /* K14 */ be_nested_str_weak(),
- /* K15 */ be_const_int(2),
- /* K16 */ be_nested_str_weak(XX),
- /* K17 */ be_const_int(3),
- /* K18 */ be_nested_str_weak(set_no_expiration),
- /* K19 */ be_nested_str_weak(device),
- /* K20 */ be_nested_str_weak(start_commissioning_complete_deferred),
- /* K21 */ be_nested_str_weak(status),
- /* K22 */ be_nested_str_weak(UNSUPPORTED_COMMAND),
- /* K23 */ be_nested_str_weak(B2),
- /* K24 */ be_nested_str_weak(DAC_Cert_FFF1_8000),
- /* K25 */ be_nested_str_weak(PAI_Cert_FFF1),
- /* K26 */ be_nested_str_weak(CD_FFF1_8000),
- /* K27 */ be_nested_str_weak(B1),
- /* K28 */ be_nested_str_weak(U4),
- /* K29 */ be_nested_str_weak(tasmota),
- /* K30 */ be_nested_str_weak(rtc),
- /* K31 */ be_nested_str_weak(utc),
- /* K32 */ be_nested_str_weak(encode),
- /* K33 */ be_nested_str_weak(get_ac),
- /* K34 */ be_nested_str_weak(log),
- /* K35 */ be_nested_str_weak(MTR_X3A_X20attestation_tbs_X3D),
- /* K36 */ be_nested_str_weak(tohex),
- /* K37 */ be_nested_str_weak(EC_P256),
- /* K38 */ be_nested_str_weak(ecdsa_sign_sha256),
- /* K39 */ be_nested_str_weak(DAC_Priv_FFF1_8000),
- /* K40 */ be_nested_str_weak(gen_CSR),
- /* K41 */ be_nested_str_weak(MTR_X3A_X20nocsr_tbs_X3D),
- /* K42 */ be_nested_str_weak(set_ca),
- /* K43 */ be_nested_str_weak(MTR_X3A_X20received_X20ca_root_X3D),
- /* K44 */ be_nested_str_weak(SUCCESS),
- /* K45 */ be_nested_str_weak(get_ca),
- /* K46 */ be_nested_str_weak(MTR_X3A_X20Error_X3A_X20AdNOC_X20without_X20CA),
- /* K47 */ be_nested_str_weak(set_noc),
- /* K48 */ be_nested_str_weak(set_ipk_epoch_key),
- /* K49 */ be_nested_str_weak(admin_subject),
- /* K50 */ be_nested_str_weak(admin_vendor),
- /* K51 */ be_nested_str_weak(parse),
- /* K52 */ be_nested_str_weak(findsub),
- /* K53 */ be_nested_str_weak(MTR_X3A_X20Error_X3A_X20no_X20fabricid_X20nor_X20deviceid_X20in_X20NOC_X20certificate),
- /* K54 */ be_nested_str_weak(int),
- /* K55 */ be_nested_str_weak(int64),
- /* K56 */ be_nested_str_weak(tobytes),
- /* K57 */ be_const_int(2147483647),
- /* K58 */ be_nested_str_weak(fromstring),
- /* K59 */ be_nested_str_weak(CompressedFabric),
- /* K60 */ be_nested_str_weak(HKDF_SHA256),
- /* K61 */ be_nested_str_weak(copy),
- /* K62 */ be_nested_str_weak(reverse),
- /* K63 */ be_nested_str_weak(derive),
- /* K64 */ be_nested_str_weak(set_fabric_device),
- /* K65 */ be_nested_str_weak(start_operational_dicovery_deferred),
- /* K66 */ be_nested_str_weak(set_fabric_label),
- /* K67 */ be_nested_str_weak(sessions),
- /* K68 */ be_nested_str_weak(sessions_active),
- /* K69 */ be_nested_str_weak(MTR_X3A_X20removing_X20fabric_X20),
- /* K70 */ be_nested_str_weak(fabric),
- /* K71 */ be_nested_str_weak(remove_session),
- /* K72 */ be_nested_str_weak(save),
- }),
- be_str_weak(invoke_request),
- &be_const_str_solidified,
- ( &(const binstruction[495]) { /* code */
- 0xA4120000, // 0000 IMPORT R4 K0
- 0xB8160200, // 0001 GETNGBL R5 K1
- 0x88140B02, // 0002 GETMBR R5 R5 K2
- 0x88180703, // 0003 GETMBR R6 R3 K3
- 0x881C0704, // 0004 GETMBR R7 R3 K4
- 0x88200305, // 0005 GETMBR R8 R1 K5
- 0x5426002F, // 0006 LDINT R9 48
- 0x1C240C09, // 0007 EQ R9 R6 R9
- 0x78260050, // 0008 JMPF R9 #005A
- 0x1C240F06, // 0009 EQ R9 R7 K6
- 0x78260017, // 000A JMPF R9 #0023
- 0x8C240507, // 000B GETMET R9 R2 K7
- 0x582C0006, // 000C LDCONST R11 K6
- 0x54320383, // 000D LDINT R12 900
- 0x7C240600, // 000E CALL R9 3
- 0x8C280507, // 000F GETMET R10 R2 K7
- 0x58300008, // 0010 LDCONST R12 K8
- 0x58340006, // 0011 LDCONST R13 K6
- 0x7C280600, // 0012 CALL R10 3
- 0x9022120A, // 0013 SETMBR R8 K9 R10
- 0x8C2C0B0A, // 0014 GETMET R11 R5 K10
- 0x7C2C0200, // 0015 CALL R11 1
- 0x8C30170B, // 0016 GETMET R12 R11 K11
- 0x58380006, // 0017 LDCONST R14 K6
- 0x883C0B0C, // 0018 GETMBR R15 R5 K12
- 0x58400006, // 0019 LDCONST R16 K6
- 0x7C300800, // 001A CALL R12 4
- 0x8C30170B, // 001B GETMET R12 R11 K11
- 0x58380008, // 001C LDCONST R14 K8
- 0x883C0B0D, // 001D GETMBR R15 R5 K13
- 0x5840000E, // 001E LDCONST R16 K14
- 0x7C300800, // 001F CALL R12 4
- 0x900E0908, // 0020 SETMBR R3 K4 K8
- 0x80041600, // 0021 RET 1 R11
- 0x70020035, // 0022 JMP #0059
- 0x1C240F0F, // 0023 EQ R9 R7 K15
- 0x7826001A, // 0024 JMPF R9 #0040
- 0x8C240507, // 0025 GETMET R9 R2 K7
- 0x582C0006, // 0026 LDCONST R11 K6
- 0x7C240400, // 0027 CALL R9 2
- 0x8C280507, // 0028 GETMET R10 R2 K7
- 0x58300008, // 0029 LDCONST R12 K8
- 0x58340010, // 002A LDCONST R13 K16
- 0x7C280600, // 002B CALL R10 3
- 0x8C2C0507, // 002C GETMET R11 R2 K7
- 0x5834000F, // 002D LDCONST R13 K15
- 0x58380006, // 002E LDCONST R14 K6
- 0x7C2C0600, // 002F CALL R11 3
- 0x9022120B, // 0030 SETMBR R8 K9 R11
- 0x8C300B0A, // 0031 GETMET R12 R5 K10
- 0x7C300200, // 0032 CALL R12 1
- 0x8C34190B, // 0033 GETMET R13 R12 K11
- 0x583C0006, // 0034 LDCONST R15 K6
- 0x88400B0C, // 0035 GETMBR R16 R5 K12
- 0x58440006, // 0036 LDCONST R17 K6
- 0x7C340800, // 0037 CALL R13 4
- 0x8C34190B, // 0038 GETMET R13 R12 K11
- 0x583C0008, // 0039 LDCONST R15 K8
- 0x88400B0D, // 003A GETMBR R16 R5 K13
- 0x5844000E, // 003B LDCONST R17 K14
- 0x7C340800, // 003C CALL R13 4
- 0x900E0911, // 003D SETMBR R3 K4 K17
- 0x80041800, // 003E RET 1 R12
- 0x70020018, // 003F JMP #0059
- 0x54260003, // 0040 LDINT R9 4
- 0x1C240E09, // 0041 EQ R9 R7 R9
- 0x78260015, // 0042 JMPF R9 #0059
- 0x90221306, // 0043 SETMBR R8 K9 K6
- 0x8C241112, // 0044 GETMET R9 R8 K18
- 0x7C240200, // 0045 CALL R9 1
- 0x8C240B0A, // 0046 GETMET R9 R5 K10
- 0x7C240200, // 0047 CALL R9 1
- 0x8C28130B, // 0048 GETMET R10 R9 K11
- 0x58300006, // 0049 LDCONST R12 K6
- 0x88340B0C, // 004A GETMBR R13 R5 K12
- 0x58380006, // 004B LDCONST R14 K6
- 0x7C280800, // 004C CALL R10 4
- 0x8C28130B, // 004D GETMET R10 R9 K11
- 0x58300008, // 004E LDCONST R12 K8
- 0x88340B0D, // 004F GETMBR R13 R5 K13
- 0x5838000E, // 0050 LDCONST R14 K14
- 0x7C280800, // 0051 CALL R10 4
- 0x542A0004, // 0052 LDINT R10 5
- 0x900E080A, // 0053 SETMBR R3 K4 R10
- 0x88280113, // 0054 GETMBR R10 R0 K19
- 0x8C281514, // 0055 GETMET R10 R10 K20
- 0x5C301000, // 0056 MOVE R12 R8
- 0x7C280400, // 0057 CALL R10 2
- 0x80041200, // 0058 RET 1 R9
- 0x70020193, // 0059 JMP #01EE
- 0x5426003D, // 005A LDINT R9 62
- 0x1C240C09, // 005B EQ R9 R6 R9
- 0x78260190, // 005C JMPF R9 #01EE
- 0x1C240F0F, // 005D EQ R9 R7 K15
- 0x7826001D, // 005E JMPF R9 #007D
- 0x8C240507, // 005F GETMET R9 R2 K7
- 0x582C0006, // 0060 LDCONST R11 K6
- 0x7C240400, // 0061 CALL R9 2
- 0x20281308, // 0062 NE R10 R9 K8
- 0x782A0006, // 0063 JMPF R10 #006B
- 0x2028130F, // 0064 NE R10 R9 K15
- 0x782A0004, // 0065 JMPF R10 #006B
- 0xB82A0200, // 0066 GETNGBL R10 K1
- 0x88281516, // 0067 GETMBR R10 R10 K22
- 0x900E2A0A, // 0068 SETMBR R3 K21 R10
- 0x4C280000, // 0069 LDNIL R10
- 0x80041400, // 006A RET 1 R10
- 0x8C280B0A, // 006B GETMET R10 R5 K10
- 0x7C280200, // 006C CALL R10 1
- 0x8C2C150B, // 006D GETMET R11 R10 K11
- 0x58340006, // 006E LDCONST R13 K6
- 0x88380B17, // 006F GETMBR R14 R5 K23
- 0x1C3C1308, // 0070 EQ R15 R9 K8
- 0x783E0003, // 0071 JMPF R15 #0076
- 0xB83E0200, // 0072 GETNGBL R15 K1
- 0x8C3C1F18, // 0073 GETMET R15 R15 K24
- 0x7C3C0200, // 0074 CALL R15 1
- 0x70020002, // 0075 JMP #0079
- 0xB83E0200, // 0076 GETNGBL R15 K1
- 0x8C3C1F19, // 0077 GETMET R15 R15 K25
- 0x7C3C0200, // 0078 CALL R15 1
- 0x7C2C0800, // 0079 CALL R11 4
- 0x900E0911, // 007A SETMBR R3 K4 K17
- 0x80041400, // 007B RET 1 R10
- 0x70020170, // 007C JMP #01EE
- 0x1C240F06, // 007D EQ R9 R7 K6
- 0x78260044, // 007E JMPF R9 #00C4
- 0x8C240507, // 007F GETMET R9 R2 K7
- 0x582C0006, // 0080 LDCONST R11 K6
- 0x7C240400, // 0081 CALL R9 2
- 0x6028000C, // 0082 GETGBL R10 G12
- 0x5C2C1200, // 0083 MOVE R11 R9
- 0x7C280200, // 0084 CALL R10 1
- 0x542E001F, // 0085 LDINT R11 32
- 0x2028140B, // 0086 NE R10 R10 R11
- 0x782A0001, // 0087 JMPF R10 #008A
- 0x4C280000, // 0088 LDNIL R10
- 0x80041400, // 0089 RET 1 R10
- 0x900E0908, // 008A SETMBR R3 K4 K8
- 0x8C280B0A, // 008B GETMET R10 R5 K10
- 0x7C280200, // 008C CALL R10 1
- 0x8C2C150B, // 008D GETMET R11 R10 K11
- 0x58340008, // 008E LDCONST R13 K8
- 0x88380B17, // 008F GETMBR R14 R5 K23
- 0xB83E0200, // 0090 GETNGBL R15 K1
- 0x8C3C1F1A, // 0091 GETMET R15 R15 K26
- 0x7C3C0200, // 0092 CALL R15 1
- 0x7C2C0800, // 0093 CALL R11 4
- 0x8C2C150B, // 0094 GETMET R11 R10 K11
- 0x5834000F, // 0095 LDCONST R13 K15
- 0x88380B1B, // 0096 GETMBR R14 R5 K27
- 0x5C3C1200, // 0097 MOVE R15 R9
- 0x7C2C0800, // 0098 CALL R11 4
- 0x8C2C150B, // 0099 GETMET R11 R10 K11
- 0x58340011, // 009A LDCONST R13 K17
- 0x88380B1C, // 009B GETMBR R14 R5 K28
- 0xB83E3A00, // 009C GETNGBL R15 K29
- 0x8C3C1F1E, // 009D GETMET R15 R15 K30
- 0x7C3C0200, // 009E CALL R15 1
- 0x943C1F1F, // 009F GETIDX R15 R15 K31
- 0x7C2C0800, // 00A0 CALL R11 4
- 0x8C2C1520, // 00A1 GETMET R11 R10 K32
- 0x7C2C0200, // 00A2 CALL R11 1
- 0x8C301121, // 00A3 GETMET R12 R8 K33
- 0x7C300200, // 00A4 CALL R12 1
- 0x0034160C, // 00A5 ADD R13 R11 R12
- 0xB83A3A00, // 00A6 GETNGBL R14 K29
- 0x8C381D22, // 00A7 GETMET R14 R14 K34
- 0x8C401B24, // 00A8 GETMET R16 R13 K36
- 0x7C400200, // 00A9 CALL R16 1
- 0x00424610, // 00AA ADD R16 K35 R16
- 0x58440011, // 00AB LDCONST R17 K17
- 0x7C380600, // 00AC CALL R14 3
- 0x8C380925, // 00AD GETMET R14 R4 K37
- 0x7C380200, // 00AE CALL R14 1
- 0x8C381D26, // 00AF GETMET R14 R14 K38
- 0xB8420200, // 00B0 GETNGBL R16 K1
- 0x8C402127, // 00B1 GETMET R16 R16 K39
- 0x7C400200, // 00B2 CALL R16 1
- 0x5C441A00, // 00B3 MOVE R17 R13
- 0x7C380600, // 00B4 CALL R14 3
- 0x8C3C0B0A, // 00B5 GETMET R15 R5 K10
- 0x7C3C0200, // 00B6 CALL R15 1
- 0x8C401F0B, // 00B7 GETMET R16 R15 K11
- 0x58480006, // 00B8 LDCONST R18 K6
- 0x884C0B17, // 00B9 GETMBR R19 R5 K23
- 0x5C501600, // 00BA MOVE R20 R11
- 0x7C400800, // 00BB CALL R16 4
- 0x8C401F0B, // 00BC GETMET R16 R15 K11
- 0x58480008, // 00BD LDCONST R18 K8
- 0x884C0B1B, // 00BE GETMBR R19 R5 K27
- 0x5C501C00, // 00BF MOVE R20 R14
- 0x7C400800, // 00C0 CALL R16 4
- 0x900E0908, // 00C1 SETMBR R3 K4 K8
- 0x80041E00, // 00C2 RET 1 R15
- 0x70020129, // 00C3 JMP #01EE
- 0x54260003, // 00C4 LDINT R9 4
- 0x1C240E09, // 00C5 EQ R9 R7 R9
- 0x78260040, // 00C6 JMPF R9 #0108
- 0x8C240507, // 00C7 GETMET R9 R2 K7
- 0x582C0006, // 00C8 LDCONST R11 K6
- 0x7C240400, // 00C9 CALL R9 2
- 0x6028000C, // 00CA GETGBL R10 G12
- 0x5C2C1200, // 00CB MOVE R11 R9
- 0x7C280200, // 00CC CALL R10 1
- 0x542E001F, // 00CD LDINT R11 32
- 0x2028140B, // 00CE NE R10 R10 R11
- 0x782A0001, // 00CF JMPF R10 #00D2
- 0x4C280000, // 00D0 LDNIL R10
- 0x80041400, // 00D1 RET 1 R10
- 0x8C280507, // 00D2 GETMET R10 R2 K7
- 0x58300008, // 00D3 LDCONST R12 K8
- 0x50340000, // 00D4 LDBOOL R13 0 0
- 0x7C280600, // 00D5 CALL R10 3
- 0x8C2C1128, // 00D6 GETMET R11 R8 K40
- 0x7C2C0200, // 00D7 CALL R11 1
- 0x8C300B0A, // 00D8 GETMET R12 R5 K10
- 0x7C300200, // 00D9 CALL R12 1
- 0x8C34190B, // 00DA GETMET R13 R12 K11
- 0x583C0008, // 00DB LDCONST R15 K8
- 0x88400B17, // 00DC GETMBR R16 R5 K23
- 0x5C441600, // 00DD MOVE R17 R11
- 0x7C340800, // 00DE CALL R13 4
- 0x8C34190B, // 00DF GETMET R13 R12 K11
- 0x583C000F, // 00E0 LDCONST R15 K15
- 0x88400B1B, // 00E1 GETMBR R16 R5 K27
- 0x5C441200, // 00E2 MOVE R17 R9
- 0x7C340800, // 00E3 CALL R13 4
- 0x8C341920, // 00E4 GETMET R13 R12 K32
- 0x7C340200, // 00E5 CALL R13 1
- 0x8C381121, // 00E6 GETMET R14 R8 K33
- 0x7C380200, // 00E7 CALL R14 1
- 0x00381A0E, // 00E8 ADD R14 R13 R14
- 0xB83E3A00, // 00E9 GETNGBL R15 K29
- 0x8C3C1F22, // 00EA GETMET R15 R15 K34
- 0x8C441D24, // 00EB GETMET R17 R14 K36
- 0x7C440200, // 00EC CALL R17 1
- 0x00465211, // 00ED ADD R17 K41 R17
- 0x58480011, // 00EE LDCONST R18 K17
- 0x7C3C0600, // 00EF CALL R15 3
- 0x8C3C0925, // 00F0 GETMET R15 R4 K37
- 0x7C3C0200, // 00F1 CALL R15 1
- 0x8C3C1F26, // 00F2 GETMET R15 R15 K38
- 0xB8460200, // 00F3 GETNGBL R17 K1
- 0x8C442327, // 00F4 GETMET R17 R17 K39
- 0x7C440200, // 00F5 CALL R17 1
- 0x5C481C00, // 00F6 MOVE R18 R14
- 0x7C3C0600, // 00F7 CALL R15 3
- 0x8C400B0A, // 00F8 GETMET R16 R5 K10
- 0x7C400200, // 00F9 CALL R16 1
- 0x8C44210B, // 00FA GETMET R17 R16 K11
- 0x584C0006, // 00FB LDCONST R19 K6
- 0x88500B17, // 00FC GETMBR R20 R5 K23
- 0x5C541A00, // 00FD MOVE R21 R13
- 0x7C440800, // 00FE CALL R17 4
- 0x8C44210B, // 00FF GETMET R17 R16 K11
- 0x584C0008, // 0100 LDCONST R19 K8
- 0x88500B1B, // 0101 GETMBR R20 R5 K27
- 0x5C541E00, // 0102 MOVE R21 R15
- 0x7C440800, // 0103 CALL R17 4
- 0x54460004, // 0104 LDINT R17 5
- 0x900E0811, // 0105 SETMBR R3 K4 R17
- 0x80042000, // 0106 RET 1 R16
- 0x700200E5, // 0107 JMP #01EE
- 0x5426000A, // 0108 LDINT R9 11
- 0x1C240E09, // 0109 EQ R9 R7 R9
- 0x78260012, // 010A JMPF R9 #011E
- 0x8C240507, // 010B GETMET R9 R2 K7
- 0x582C0006, // 010C LDCONST R11 K6
- 0x7C240400, // 010D CALL R9 2
- 0x8C28112A, // 010E GETMET R10 R8 K42
- 0x5C301200, // 010F MOVE R12 R9
- 0x7C280400, // 0110 CALL R10 2
- 0xB82A3A00, // 0111 GETNGBL R10 K29
- 0x8C281522, // 0112 GETMET R10 R10 K34
- 0x8C301324, // 0113 GETMET R12 R9 K36
- 0x7C300200, // 0114 CALL R12 1
- 0x0032560C, // 0115 ADD R12 K43 R12
- 0x58340011, // 0116 LDCONST R13 K17
- 0x7C280600, // 0117 CALL R10 3
- 0xB82A0200, // 0118 GETNGBL R10 K1
- 0x8828152C, // 0119 GETMBR R10 R10 K44
- 0x900E2A0A, // 011A SETMBR R3 K21 R10
- 0x4C280000, // 011B LDNIL R10
- 0x80041400, // 011C RET 1 R10
- 0x700200CF, // 011D JMP #01EE
- 0x54260005, // 011E LDINT R9 6
- 0x1C240E09, // 011F EQ R9 R7 R9
- 0x78260091, // 0120 JMPF R9 #01B3
- 0x8C240507, // 0121 GETMET R9 R2 K7
- 0x582C0006, // 0122 LDCONST R11 K6
- 0x7C240400, // 0123 CALL R9 2
- 0x8C280507, // 0124 GETMET R10 R2 K7
- 0x58300008, // 0125 LDCONST R12 K8
- 0x7C280400, // 0126 CALL R10 2
- 0x8C2C0507, // 0127 GETMET R11 R2 K7
- 0x5834000F, // 0128 LDCONST R13 K15
- 0x7C2C0400, // 0129 CALL R11 2
- 0x8C300507, // 012A GETMET R12 R2 K7
- 0x58380011, // 012B LDCONST R14 K17
- 0x7C300400, // 012C CALL R12 2
- 0x8C340507, // 012D GETMET R13 R2 K7
- 0x543E0003, // 012E LDINT R15 4
- 0x7C340400, // 012F CALL R13 2
- 0x8C38112D, // 0130 GETMET R14 R8 K45
- 0x7C380200, // 0131 CALL R14 1
- 0x4C3C0000, // 0132 LDNIL R15
- 0x1C381C0F, // 0133 EQ R14 R14 R15
- 0x783A0006, // 0134 JMPF R14 #013C
- 0xB83A3A00, // 0135 GETNGBL R14 K29
- 0x8C381D22, // 0136 GETMET R14 R14 K34
- 0x5840002E, // 0137 LDCONST R16 K46
- 0x5844000F, // 0138 LDCONST R17 K15
- 0x7C380600, // 0139 CALL R14 3
- 0x4C380000, // 013A LDNIL R14
- 0x80041C00, // 013B RET 1 R14
- 0x8C38112F, // 013C GETMET R14 R8 K47
- 0x5C401200, // 013D MOVE R16 R9
- 0x5C441400, // 013E MOVE R17 R10
- 0x7C380600, // 013F CALL R14 3
- 0x8C381130, // 0140 GETMET R14 R8 K48
- 0x5C401600, // 0141 MOVE R16 R11
- 0x7C380400, // 0142 CALL R14 2
- 0x9022620C, // 0143 SETMBR R8 K49 R12
- 0x9022640D, // 0144 SETMBR R8 K50 R13
- 0xB83A0200, // 0145 GETNGBL R14 K1
- 0x88381D02, // 0146 GETMBR R14 R14 K2
- 0x8C381D33, // 0147 GETMET R14 R14 K51
- 0x5C401200, // 0148 MOVE R16 R9
- 0x7C380400, // 0149 CALL R14 2
- 0x8C3C1D34, // 014A GETMET R15 R14 K52
- 0x54460005, // 014B LDINT R17 6
- 0x7C3C0400, // 014C CALL R15 2
- 0x8C401F07, // 014D GETMET R16 R15 K7
- 0x544A0014, // 014E LDINT R18 21
- 0x7C400400, // 014F CALL R16 2
- 0x8C441F07, // 0150 GETMET R17 R15 K7
- 0x544E0010, // 0151 LDINT R19 17
- 0x7C440400, // 0152 CALL R17 2
- 0x5C482000, // 0153 MOVE R18 R16
- 0x784A0001, // 0154 JMPF R18 #0157
- 0x5C482200, // 0155 MOVE R18 R17
- 0x744A0006, // 0156 JMPT R18 #015E
- 0xB84A3A00, // 0157 GETNGBL R18 K29
- 0x8C482522, // 0158 GETMET R18 R18 K34
- 0x58500035, // 0159 LDCONST R20 K53
- 0x5854000F, // 015A LDCONST R21 K15
- 0x7C480600, // 015B CALL R18 3
- 0x50480000, // 015C LDBOOL R18 0 0
- 0x80042400, // 015D RET 1 R18
- 0x60480004, // 015E GETGBL R18 G4
- 0x5C4C2000, // 015F MOVE R19 R16
- 0x7C480200, // 0160 CALL R18 1
- 0x1C482536, // 0161 EQ R18 R18 K54
- 0x784A0006, // 0162 JMPF R18 #016A
- 0xB84A6E00, // 0163 GETNGBL R18 K55
- 0x5C4C2000, // 0164 MOVE R19 R16
- 0x7C480200, // 0165 CALL R18 1
- 0x8C482538, // 0166 GETMET R18 R18 K56
- 0x7C480200, // 0167 CALL R18 1
- 0x5C402400, // 0168 MOVE R16 R18
- 0x70020002, // 0169 JMP #016D
- 0x8C482138, // 016A GETMET R18 R16 K56
- 0x7C480200, // 016B CALL R18 1
- 0x5C402400, // 016C MOVE R16 R18
- 0x60480004, // 016D GETGBL R18 G4
- 0x5C4C2200, // 016E MOVE R19 R17
- 0x7C480200, // 016F CALL R18 1
- 0x1C482536, // 0170 EQ R18 R18 K54
- 0x784A0006, // 0171 JMPF R18 #0179
- 0xB84A6E00, // 0172 GETNGBL R18 K55
- 0x5C4C2200, // 0173 MOVE R19 R17
- 0x7C480200, // 0174 CALL R18 1
- 0x8C482538, // 0175 GETMET R18 R18 K56
- 0x7C480200, // 0176 CALL R18 1
- 0x5C442400, // 0177 MOVE R17 R18
- 0x70020002, // 0178 JMP #017C
- 0x8C482338, // 0179 GETMET R18 R17 K56
- 0x7C480200, // 017A CALL R18 1
- 0x5C442400, // 017B MOVE R17 R18
- 0xB84A0200, // 017C GETNGBL R18 K1
- 0x88482502, // 017D GETMBR R18 R18 K2
- 0x8C482533, // 017E GETMET R18 R18 K51
- 0x8C50112D, // 017F GETMET R20 R8 K45
- 0x7C500200, // 0180 CALL R20 1
- 0x7C480400, // 0181 CALL R18 2
- 0x8C482507, // 0182 GETMET R18 R18 K7
- 0x54520008, // 0183 LDINT R20 9
- 0x7C480400, // 0184 CALL R18 2
- 0x404E1139, // 0185 CONNECT R19 K8 K57
- 0x94482413, // 0186 GETIDX R18 R18 R19
- 0x60500015, // 0187 GETGBL R20 G21
- 0x7C500000, // 0188 CALL R20 0
- 0x8C50293A, // 0189 GETMET R20 R20 K58
- 0x5858003B, // 018A LDCONST R22 K59
- 0x7C500400, // 018B CALL R20 2
- 0x5C4C2800, // 018C MOVE R19 R20
- 0x8C50093C, // 018D GETMET R20 R4 K60
- 0x7C500200, // 018E CALL R20 1
- 0x8C54213D, // 018F GETMET R21 R16 K61
- 0x7C540200, // 0190 CALL R21 1
- 0x8C542B3E, // 0191 GETMET R21 R21 K62
- 0x7C540200, // 0192 CALL R21 1
- 0x8C58293F, // 0193 GETMET R22 R20 K63
- 0x5C602400, // 0194 MOVE R24 R18
- 0x5C642A00, // 0195 MOVE R25 R21
- 0x5C682600, // 0196 MOVE R26 R19
- 0x546E0007, // 0197 LDINT R27 8
- 0x7C580A00, // 0198 CALL R22 5
- 0x8C5C1140, // 0199 GETMET R23 R8 K64
- 0x5C642000, // 019A MOVE R25 R16
- 0x5C682200, // 019B MOVE R26 R17
- 0x5C6C2C00, // 019C MOVE R27 R22
- 0x7C5C0800, // 019D CALL R23 4
- 0x885C0113, // 019E GETMBR R23 R0 K19
- 0x8C5C2F41, // 019F GETMET R23 R23 K65
- 0x5C641000, // 01A0 MOVE R25 R8
- 0x7C5C0400, // 01A1 CALL R23 2
- 0x8C5C0B0A, // 01A2 GETMET R23 R5 K10
- 0x7C5C0200, // 01A3 CALL R23 1
- 0x8C602F0B, // 01A4 GETMET R24 R23 K11
- 0x58680006, // 01A5 LDCONST R26 K6
- 0x886C0B0C, // 01A6 GETMBR R27 R5 K12
- 0xB8720200, // 01A7 GETNGBL R28 K1
- 0x8870392C, // 01A8 GETMBR R28 R28 K44
- 0x7C600800, // 01A9 CALL R24 4
- 0x8C602F0B, // 01AA GETMET R24 R23 K11
- 0x58680008, // 01AB LDCONST R26 K8
- 0x886C0B0C, // 01AC GETMBR R27 R5 K12
- 0x58700008, // 01AD LDCONST R28 K8
- 0x7C600800, // 01AE CALL R24 4
- 0x54620007, // 01AF LDINT R24 8
- 0x900E0818, // 01B0 SETMBR R3 K4 R24
- 0x80042E00, // 01B1 RET 1 R23
- 0x7002003A, // 01B2 JMP #01EE
- 0x54260008, // 01B3 LDINT R9 9
- 0x1C240E09, // 01B4 EQ R9 R7 R9
- 0x7826000B, // 01B5 JMPF R9 #01C2
- 0x8C240507, // 01B6 GETMET R9 R2 K7
- 0x582C0006, // 01B7 LDCONST R11 K6
- 0x7C240400, // 01B8 CALL R9 2
- 0x8C281142, // 01B9 GETMET R10 R8 K66
- 0x5C301200, // 01BA MOVE R12 R9
- 0x7C280400, // 01BB CALL R10 2
- 0xB82A0200, // 01BC GETNGBL R10 K1
- 0x8828152C, // 01BD GETMBR R10 R10 K44
- 0x900E2A0A, // 01BE SETMBR R3 K21 R10
- 0x4C280000, // 01BF LDNIL R10
- 0x80041400, // 01C0 RET 1 R10
- 0x7002002B, // 01C1 JMP #01EE
- 0x54260009, // 01C2 LDINT R9 10
- 0x1C240E09, // 01C3 EQ R9 R7 R9
- 0x78260028, // 01C4 JMPF R9 #01EE
- 0x8C240507, // 01C5 GETMET R9 R2 K7
- 0x582C0006, // 01C6 LDCONST R11 K6
- 0x7C240400, // 01C7 CALL R9 2
- 0x88280113, // 01C8 GETMBR R10 R0 K19
- 0x88281543, // 01C9 GETMBR R10 R10 K67
- 0x8C281544, // 01CA GETMET R10 R10 K68
- 0x7C280200, // 01CB CALL R10 1
- 0x282C1308, // 01CC GE R11 R9 K8
- 0x782E001A, // 01CD JMPF R11 #01E9
- 0x602C000C, // 01CE GETGBL R11 G12
- 0x5C301400, // 01CF MOVE R12 R10
- 0x7C2C0200, // 01D0 CALL R11 1
- 0x182C120B, // 01D1 LE R11 R9 R11
- 0x782E0015, // 01D2 JMPF R11 #01E9
- 0x042C1308, // 01D3 SUB R11 R9 K8
- 0x942C140B, // 01D4 GETIDX R11 R10 R11
- 0xB8323A00, // 01D5 GETNGBL R12 K29
- 0x8C301922, // 01D6 GETMET R12 R12 K34
- 0x88381146, // 01D7 GETMBR R14 R8 K70
- 0x8C381D3D, // 01D8 GETMET R14 R14 K61
- 0x7C380200, // 01D9 CALL R14 1
- 0x8C381D3E, // 01DA GETMET R14 R14 K62
- 0x7C380200, // 01DB CALL R14 1
- 0x8C381D24, // 01DC GETMET R14 R14 K36
- 0x7C380200, // 01DD CALL R14 1
- 0x003A8A0E, // 01DE ADD R14 K69 R14
- 0x7C300400, // 01DF CALL R12 2
- 0x88300113, // 01E0 GETMBR R12 R0 K19
- 0x88301943, // 01E1 GETMBR R12 R12 K67
- 0x8C301947, // 01E2 GETMET R12 R12 K71
- 0x7C300200, // 01E3 CALL R12 1
- 0x88300113, // 01E4 GETMBR R12 R0 K19
- 0x88301943, // 01E5 GETMBR R12 R12 K67
- 0x8C301948, // 01E6 GETMET R12 R12 K72
- 0x7C300200, // 01E7 CALL R12 1
- 0x7001FFFF, // 01E8 JMP #01E9
- 0xB82E0200, // 01E9 GETNGBL R11 K1
- 0x882C172C, // 01EA GETMBR R11 R11 K44
- 0x900E2A0B, // 01EB SETMBR R3 K21 R11
- 0x4C2C0000, // 01EC LDNIL R11
- 0x80041600, // 01ED RET 1 R11
- 0x80000000, // 01EE RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: read_attribute
-********************************************************************/
-be_local_closure(Matter_Plugin_core_read_attribute, /* name */
- be_nested_proto(
- 24, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[82]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(TLV),
- /* K3 */ be_nested_str_weak(cluster),
- /* K4 */ be_nested_str_weak(attribute),
- /* K5 */ be_const_int(0),
- /* K6 */ be_nested_str_weak(create_TLV),
- /* K7 */ be_nested_str_weak(U8),
- /* K8 */ be_nested_str_weak(session),
- /* K9 */ be_nested_str_weak(breadcrumb),
- /* K10 */ be_const_int(1),
- /* K11 */ be_nested_str_weak(Matter_TLV_struct),
- /* K12 */ be_nested_str_weak(add_TLV),
- /* K13 */ be_nested_str_weak(U2),
- /* K14 */ be_const_int(2),
- /* K15 */ be_nested_str_weak(U1),
- /* K16 */ be_const_int(3),
- /* K17 */ be_nested_str_weak(BOOL),
- /* K18 */ be_nested_str_weak(Matter_TLV_array),
- /* K19 */ be_nested_str_weak(tasmota),
- /* K20 */ be_nested_str_weak(eth),
- /* K21 */ be_nested_str_weak(up),
- /* K22 */ be_nested_str_weak(add_struct),
- /* K23 */ be_nested_str_weak(UTF1),
- /* K24 */ be_nested_str_weak(ethernet),
- /* K25 */ be_nested_str_weak(NULL),
- /* K26 */ be_nested_str_weak(fromhex),
- /* K27 */ be_nested_str_weak(replace),
- /* K28 */ be_nested_str_weak(find),
- /* K29 */ be_nested_str_weak(mac),
- /* K30 */ be_nested_str_weak(),
- /* K31 */ be_nested_str_weak(_X3A),
- /* K32 */ be_nested_str_weak(B1),
- /* K33 */ be_nested_str_weak(add_array),
- /* K34 */ be_nested_str_weak(get_ip_bytes),
- /* K35 */ be_nested_str_weak(ip),
- /* K36 */ be_nested_str_weak(ip6local),
- /* K37 */ be_nested_str_weak(ip6),
- /* K38 */ be_nested_str_weak(wifi),
- /* K39 */ be_nested_str_weak(cmd),
- /* K40 */ be_nested_str_weak(Status_X201),
- /* K41 */ be_nested_str_weak(StatusPRM),
- /* K42 */ be_nested_str_weak(BootCount),
- /* K43 */ be_nested_str_weak(U4),
- /* K44 */ be_nested_str_weak(Status_X2011),
- /* K45 */ be_nested_str_weak(StatusSTS),
- /* K46 */ be_nested_str_weak(UptimeSec),
- /* K47 */ be_nested_str_weak(int64),
- /* K48 */ be_nested_str_weak(rtc),
- /* K49 */ be_nested_str_weak(utc),
- /* K50 */ be_const_int(1000000),
- /* K51 */ be_nested_str_weak(local),
- /* K52 */ be_nested_str_weak(device),
- /* K53 */ be_nested_str_weak(sessions),
- /* K54 */ be_nested_str_weak(sessions_active),
- /* K55 */ be_nested_str_weak(B2),
- /* K56 */ be_nested_str_weak(noc),
- /* K57 */ be_nested_str_weak(icac),
- /* K58 */ be_nested_str_weak(stop_iteration),
- /* K59 */ be_nested_str_weak(parse),
- /* K60 */ be_nested_str_weak(get_ca),
- /* K61 */ be_nested_str_weak(findsubval),
- /* K62 */ be_nested_str_weak(admin_vendor),
- /* K63 */ be_nested_str_weak(fabric),
- /* K64 */ be_nested_str_weak(deviceid),
- /* K65 */ be_nested_str_weak(fabric_label),
- /* K66 */ be_nested_str_weak(Tasmota),
- /* K67 */ be_nested_str_weak(vendorid),
- /* K68 */ be_nested_str_weak(DeviceName),
- /* K69 */ be_nested_str_weak(FriendlyName),
- /* K70 */ be_nested_str_weak(FriendlyName1),
- /* K71 */ be_nested_str_weak(XX),
- /* K72 */ be_nested_str_weak(Status_X202),
- /* K73 */ be_nested_str_weak(StatusFWR),
- /* K74 */ be_nested_str_weak(Hardware),
- /* K75 */ be_nested_str_weak(Version),
- /* K76 */ be_nested_str_weak(locale),
- /* K77 */ be_nested_str_weak(Matter_TLV_list),
- /* K78 */ be_nested_str_weak(get_cluster_list),
- /* K79 */ be_nested_str_weak(get_active_endpoints),
- /* K80 */ be_nested_str_weak(status),
- /* K81 */ be_nested_str_weak(UNSUPPORTED_CLUSTER),
- }),
- be_str_weak(read_attribute),
- &be_const_str_solidified,
- ( &(const binstruction[736]) { /* code */
- 0xA40E0000, // 0000 IMPORT R3 K0
- 0xB8120200, // 0001 GETNGBL R4 K1
- 0x88100902, // 0002 GETMBR R4 R4 K2
- 0x88140503, // 0003 GETMBR R5 R2 K3
- 0x88180504, // 0004 GETMBR R6 R2 K4
- 0x541E002F, // 0005 LDINT R7 48
- 0x1C1C0A07, // 0006 EQ R7 R5 R7
- 0x781E0031, // 0007 JMPF R7 #003A
- 0x1C1C0D05, // 0008 EQ R7 R6 K5
- 0x781E0006, // 0009 JMPF R7 #0011
- 0x8C1C0906, // 000A GETMET R7 R4 K6
- 0x88240907, // 000B GETMBR R9 R4 K7
- 0x88280308, // 000C GETMBR R10 R1 K8
- 0x88281509, // 000D GETMBR R10 R10 K9
- 0x7C1C0600, // 000E CALL R7 3
- 0x80040E00, // 000F RET 1 R7
- 0x70020027, // 0010 JMP #0039
- 0x1C1C0D0A, // 0011 EQ R7 R6 K10
- 0x781E000D, // 0012 JMPF R7 #0021
- 0x8C1C090B, // 0013 GETMET R7 R4 K11
- 0x7C1C0200, // 0014 CALL R7 1
- 0x8C200F0C, // 0015 GETMET R8 R7 K12
- 0x58280005, // 0016 LDCONST R10 K5
- 0x882C090D, // 0017 GETMBR R11 R4 K13
- 0x5432003B, // 0018 LDINT R12 60
- 0x7C200800, // 0019 CALL R8 4
- 0x8C200F0C, // 001A GETMET R8 R7 K12
- 0x5828000A, // 001B LDCONST R10 K10
- 0x882C090D, // 001C GETMBR R11 R4 K13
- 0x54320383, // 001D LDINT R12 900
- 0x7C200800, // 001E CALL R8 4
- 0x80040E00, // 001F RET 1 R7
- 0x70020017, // 0020 JMP #0039
- 0x1C1C0D0E, // 0021 EQ R7 R6 K14
- 0x781E0005, // 0022 JMPF R7 #0029
- 0x8C1C0906, // 0023 GETMET R7 R4 K6
- 0x8824090F, // 0024 GETMBR R9 R4 K15
- 0x5828000E, // 0025 LDCONST R10 K14
- 0x7C1C0600, // 0026 CALL R7 3
- 0x80040E00, // 0027 RET 1 R7
- 0x7002000F, // 0028 JMP #0039
- 0x1C1C0D10, // 0029 EQ R7 R6 K16
- 0x781E0005, // 002A JMPF R7 #0031
- 0x8C1C0906, // 002B GETMET R7 R4 K6
- 0x8824090F, // 002C GETMBR R9 R4 K15
- 0x5828000E, // 002D LDCONST R10 K14
- 0x7C1C0600, // 002E CALL R7 3
- 0x80040E00, // 002F RET 1 R7
- 0x70020007, // 0030 JMP #0039
- 0x541E0003, // 0031 LDINT R7 4
- 0x1C1C0C07, // 0032 EQ R7 R6 R7
- 0x781E0004, // 0033 JMPF R7 #0039
- 0x8C1C0906, // 0034 GETMET R7 R4 K6
- 0x88240911, // 0035 GETMBR R9 R4 K17
- 0x50280000, // 0036 LDBOOL R10 0 0
- 0x7C1C0600, // 0037 CALL R7 3
- 0x80040E00, // 0038 RET 1 R7
- 0x700202A4, // 0039 JMP #02DF
- 0x541E0031, // 003A LDINT R7 50
- 0x1C1C0A07, // 003B EQ R7 R5 R7
- 0x781E0000, // 003C JMPF R7 #003E
- 0x700202A0, // 003D JMP #02DF
- 0x541E0032, // 003E LDINT R7 51
- 0x1C1C0A07, // 003F EQ R7 R5 R7
- 0x781E00DA, // 0040 JMPF R7 #011C
- 0x1C1C0D05, // 0041 EQ R7 R6 K5
- 0x781E00B5, // 0042 JMPF R7 #00F9
- 0x8C1C0912, // 0043 GETMET R7 R4 K18
- 0x7C1C0200, // 0044 CALL R7 1
- 0xB8222600, // 0045 GETNGBL R8 K19
- 0x8C201114, // 0046 GETMET R8 R8 K20
- 0x7C200200, // 0047 CALL R8 1
- 0x94241115, // 0048 GETIDX R9 R8 K21
- 0x78260053, // 0049 JMPF R9 #009E
- 0x8C240F16, // 004A GETMET R9 R7 K22
- 0x4C2C0000, // 004B LDNIL R11
- 0x7C240400, // 004C CALL R9 2
- 0x8C28130C, // 004D GETMET R10 R9 K12
- 0x58300005, // 004E LDCONST R12 K5
- 0x88340917, // 004F GETMBR R13 R4 K23
- 0x58380018, // 0050 LDCONST R14 K24
- 0x7C280800, // 0051 CALL R10 4
- 0x8C28130C, // 0052 GETMET R10 R9 K12
- 0x5830000A, // 0053 LDCONST R12 K10
- 0x88340911, // 0054 GETMBR R13 R4 K17
- 0x5838000A, // 0055 LDCONST R14 K10
- 0x7C280800, // 0056 CALL R10 4
- 0x8C28130C, // 0057 GETMET R10 R9 K12
- 0x5830000E, // 0058 LDCONST R12 K14
- 0x88340911, // 0059 GETMBR R13 R4 K17
- 0x5838000A, // 005A LDCONST R14 K10
- 0x7C280800, // 005B CALL R10 4
- 0x8C28130C, // 005C GETMET R10 R9 K12
- 0x58300010, // 005D LDCONST R12 K16
- 0x88340919, // 005E GETMBR R13 R4 K25
- 0x4C380000, // 005F LDNIL R14
- 0x7C280800, // 0060 CALL R10 4
- 0x60280015, // 0061 GETGBL R10 G21
- 0x7C280000, // 0062 CALL R10 0
- 0x8C28151A, // 0063 GETMET R10 R10 K26
- 0x8C30071B, // 0064 GETMET R12 R3 K27
- 0x8C38111C, // 0065 GETMET R14 R8 K28
- 0x5840001D, // 0066 LDCONST R16 K29
- 0x5844001E, // 0067 LDCONST R17 K30
- 0x7C380600, // 0068 CALL R14 3
- 0x583C001F, // 0069 LDCONST R15 K31
- 0x5840001E, // 006A LDCONST R16 K30
- 0x7C300800, // 006B CALL R12 4
- 0x7C280400, // 006C CALL R10 2
- 0x8C2C130C, // 006D GETMET R11 R9 K12
- 0x54360003, // 006E LDINT R13 4
- 0x88380920, // 006F GETMBR R14 R4 K32
- 0x5C3C1400, // 0070 MOVE R15 R10
- 0x7C2C0800, // 0071 CALL R11 4
- 0x8C2C1321, // 0072 GETMET R11 R9 K33
- 0x54360004, // 0073 LDINT R13 5
- 0x7C2C0400, // 0074 CALL R11 2
- 0x8C30170C, // 0075 GETMET R12 R11 K12
- 0x4C380000, // 0076 LDNIL R14
- 0x883C0920, // 0077 GETMBR R15 R4 K32
- 0xB8420200, // 0078 GETNGBL R16 K1
- 0x8C402122, // 0079 GETMET R16 R16 K34
- 0x8C48111C, // 007A GETMET R18 R8 K28
- 0x58500023, // 007B LDCONST R20 K35
- 0x5854001E, // 007C LDCONST R21 K30
- 0x7C480600, // 007D CALL R18 3
- 0x7C400400, // 007E CALL R16 2
- 0x7C300800, // 007F CALL R12 4
- 0x8C301321, // 0080 GETMET R12 R9 K33
- 0x543A0005, // 0081 LDINT R14 6
- 0x7C300400, // 0082 CALL R12 2
- 0x8C34190C, // 0083 GETMET R13 R12 K12
- 0x4C3C0000, // 0084 LDNIL R15
- 0x88400920, // 0085 GETMBR R16 R4 K32
- 0xB8460200, // 0086 GETNGBL R17 K1
- 0x8C442322, // 0087 GETMET R17 R17 K34
- 0x8C4C111C, // 0088 GETMET R19 R8 K28
- 0x58540024, // 0089 LDCONST R21 K36
- 0x5858001E, // 008A LDCONST R22 K30
- 0x7C4C0600, // 008B CALL R19 3
- 0x7C440400, // 008C CALL R17 2
- 0x7C340800, // 008D CALL R13 4
- 0x8C34190C, // 008E GETMET R13 R12 K12
- 0x4C3C0000, // 008F LDNIL R15
- 0x88400920, // 0090 GETMBR R16 R4 K32
- 0xB8460200, // 0091 GETNGBL R17 K1
- 0x8C442322, // 0092 GETMET R17 R17 K34
- 0x8C4C111C, // 0093 GETMET R19 R8 K28
- 0x58540025, // 0094 LDCONST R21 K37
- 0x5858001E, // 0095 LDCONST R22 K30
- 0x7C4C0600, // 0096 CALL R19 3
- 0x7C440400, // 0097 CALL R17 2
- 0x7C340800, // 0098 CALL R13 4
- 0x8C34130C, // 0099 GETMET R13 R9 K12
- 0x543E0006, // 009A LDINT R15 7
- 0x8840090F, // 009B GETMBR R16 R4 K15
- 0x5844000E, // 009C LDCONST R17 K14
- 0x7C340800, // 009D CALL R13 4
- 0xB8262600, // 009E GETNGBL R9 K19
- 0x8C241326, // 009F GETMET R9 R9 K38
- 0x7C240200, // 00A0 CALL R9 1
- 0x94281315, // 00A1 GETIDX R10 R9 K21
- 0x782A0053, // 00A2 JMPF R10 #00F7
- 0x8C280F16, // 00A3 GETMET R10 R7 K22
- 0x4C300000, // 00A4 LDNIL R12
- 0x7C280400, // 00A5 CALL R10 2
- 0x8C2C150C, // 00A6 GETMET R11 R10 K12
- 0x58340005, // 00A7 LDCONST R13 K5
- 0x88380917, // 00A8 GETMBR R14 R4 K23
- 0x583C0026, // 00A9 LDCONST R15 K38
- 0x7C2C0800, // 00AA CALL R11 4
- 0x8C2C150C, // 00AB GETMET R11 R10 K12
- 0x5834000A, // 00AC LDCONST R13 K10
- 0x88380911, // 00AD GETMBR R14 R4 K17
- 0x583C000A, // 00AE LDCONST R15 K10
- 0x7C2C0800, // 00AF CALL R11 4
- 0x8C2C150C, // 00B0 GETMET R11 R10 K12
- 0x5834000E, // 00B1 LDCONST R13 K14
- 0x88380911, // 00B2 GETMBR R14 R4 K17
- 0x583C000A, // 00B3 LDCONST R15 K10
- 0x7C2C0800, // 00B4 CALL R11 4
- 0x8C2C150C, // 00B5 GETMET R11 R10 K12
- 0x58340010, // 00B6 LDCONST R13 K16
- 0x88380919, // 00B7 GETMBR R14 R4 K25
- 0x4C3C0000, // 00B8 LDNIL R15
- 0x7C2C0800, // 00B9 CALL R11 4
- 0x602C0015, // 00BA GETGBL R11 G21
- 0x7C2C0000, // 00BB CALL R11 0
- 0x8C2C171A, // 00BC GETMET R11 R11 K26
- 0x8C34071B, // 00BD GETMET R13 R3 K27
- 0x8C3C131C, // 00BE GETMET R15 R9 K28
- 0x5844001D, // 00BF LDCONST R17 K29
- 0x5848001E, // 00C0 LDCONST R18 K30
- 0x7C3C0600, // 00C1 CALL R15 3
- 0x5840001F, // 00C2 LDCONST R16 K31
- 0x5844001E, // 00C3 LDCONST R17 K30
- 0x7C340800, // 00C4 CALL R13 4
- 0x7C2C0400, // 00C5 CALL R11 2
- 0x8C30150C, // 00C6 GETMET R12 R10 K12
- 0x543A0003, // 00C7 LDINT R14 4
- 0x883C0920, // 00C8 GETMBR R15 R4 K32
- 0x5C401600, // 00C9 MOVE R16 R11
- 0x7C300800, // 00CA CALL R12 4
- 0x8C301521, // 00CB GETMET R12 R10 K33
- 0x543A0004, // 00CC LDINT R14 5
- 0x7C300400, // 00CD CALL R12 2
- 0x8C34190C, // 00CE GETMET R13 R12 K12
- 0x4C3C0000, // 00CF LDNIL R15
- 0x88400920, // 00D0 GETMBR R16 R4 K32
- 0xB8460200, // 00D1 GETNGBL R17 K1
- 0x8C442322, // 00D2 GETMET R17 R17 K34
- 0x8C4C131C, // 00D3 GETMET R19 R9 K28
- 0x58540023, // 00D4 LDCONST R21 K35
- 0x5858001E, // 00D5 LDCONST R22 K30
- 0x7C4C0600, // 00D6 CALL R19 3
- 0x7C440400, // 00D7 CALL R17 2
- 0x7C340800, // 00D8 CALL R13 4
- 0x8C341521, // 00D9 GETMET R13 R10 K33
- 0x543E0005, // 00DA LDINT R15 6
- 0x7C340400, // 00DB CALL R13 2
- 0x8C381B0C, // 00DC GETMET R14 R13 K12
- 0x4C400000, // 00DD LDNIL R16
- 0x88440920, // 00DE GETMBR R17 R4 K32
- 0xB84A0200, // 00DF GETNGBL R18 K1
- 0x8C482522, // 00E0 GETMET R18 R18 K34
- 0x8C50131C, // 00E1 GETMET R20 R9 K28
- 0x58580024, // 00E2 LDCONST R22 K36
- 0x585C001E, // 00E3 LDCONST R23 K30
- 0x7C500600, // 00E4 CALL R20 3
- 0x7C480400, // 00E5 CALL R18 2
- 0x7C380800, // 00E6 CALL R14 4
- 0x8C381B0C, // 00E7 GETMET R14 R13 K12
- 0x4C400000, // 00E8 LDNIL R16
- 0x88440920, // 00E9 GETMBR R17 R4 K32
- 0xB84A0200, // 00EA GETNGBL R18 K1
- 0x8C482522, // 00EB GETMET R18 R18 K34
- 0x8C50131C, // 00EC GETMET R20 R9 K28
- 0x58580025, // 00ED LDCONST R22 K37
- 0x585C001E, // 00EE LDCONST R23 K30
- 0x7C500600, // 00EF CALL R20 3
- 0x7C480400, // 00F0 CALL R18 2
- 0x7C380800, // 00F1 CALL R14 4
- 0x8C38150C, // 00F2 GETMET R14 R10 K12
- 0x54420006, // 00F3 LDINT R16 7
- 0x8844090F, // 00F4 GETMBR R17 R4 K15
- 0x5848000A, // 00F5 LDCONST R18 K10
- 0x7C380800, // 00F6 CALL R14 4
- 0x80040E00, // 00F7 RET 1 R7
- 0x70020021, // 00F8 JMP #011B
- 0x1C1C0D0A, // 00F9 EQ R7 R6 K10
- 0x781E000A, // 00FA JMPF R7 #0106
- 0x8C1C0906, // 00FB GETMET R7 R4 K6
- 0x8824090D, // 00FC GETMBR R9 R4 K13
- 0xB82A2600, // 00FD GETNGBL R10 K19
- 0x8C281527, // 00FE GETMET R10 R10 K39
- 0x58300028, // 00FF LDCONST R12 K40
- 0x7C280400, // 0100 CALL R10 2
- 0x94281529, // 0101 GETIDX R10 R10 K41
- 0x9428152A, // 0102 GETIDX R10 R10 K42
- 0x7C1C0600, // 0103 CALL R7 3
- 0x80040E00, // 0104 RET 1 R7
- 0x70020014, // 0105 JMP #011B
- 0x1C1C0D0E, // 0106 EQ R7 R6 K14
- 0x781E000A, // 0107 JMPF R7 #0113
- 0x8C1C0906, // 0108 GETMET R7 R4 K6
- 0x8824092B, // 0109 GETMBR R9 R4 K43
- 0xB82A2600, // 010A GETNGBL R10 K19
- 0x8C281527, // 010B GETMET R10 R10 K39
- 0x5830002C, // 010C LDCONST R12 K44
- 0x7C280400, // 010D CALL R10 2
- 0x9428152D, // 010E GETIDX R10 R10 K45
- 0x9428152E, // 010F GETIDX R10 R10 K46
- 0x7C1C0600, // 0110 CALL R7 3
- 0x80040E00, // 0111 RET 1 R7
- 0x70020007, // 0112 JMP #011B
- 0x541E0007, // 0113 LDINT R7 8
- 0x1C1C0C07, // 0114 EQ R7 R6 R7
- 0x781E0004, // 0115 JMPF R7 #011B
- 0x8C1C0906, // 0116 GETMET R7 R4 K6
- 0x88240911, // 0117 GETMBR R9 R4 K17
- 0x50280000, // 0118 LDBOOL R10 0 0
- 0x7C1C0600, // 0119 CALL R7 3
- 0x80040E00, // 011A RET 1 R7
- 0x700201C2, // 011B JMP #02DF
- 0x541E0033, // 011C LDINT R7 52
- 0x1C1C0A07, // 011D EQ R7 R5 R7
- 0x781E0000, // 011E JMPF R7 #0120
- 0x700201BE, // 011F JMP #02DF
- 0x541E0037, // 0120 LDINT R7 56
- 0x1C1C0A07, // 0121 EQ R7 R5 R7
- 0x781E002C, // 0122 JMPF R7 #0150
- 0x1C1C0D05, // 0123 EQ R7 R6 K5
- 0x781E000F, // 0124 JMPF R7 #0135
- 0xB81E5E00, // 0125 GETNGBL R7 K47
- 0xB8222600, // 0126 GETNGBL R8 K19
- 0x8C201130, // 0127 GETMET R8 R8 K48
- 0x7C200200, // 0128 CALL R8 1
- 0x94201131, // 0129 GETIDX R8 R8 K49
- 0x7C1C0200, // 012A CALL R7 1
- 0xB8225E00, // 012B GETNGBL R8 K47
- 0x58240032, // 012C LDCONST R9 K50
- 0x7C200200, // 012D CALL R8 1
- 0x081C0E08, // 012E MUL R7 R7 R8
- 0x8C200906, // 012F GETMET R8 R4 K6
- 0x88280907, // 0130 GETMBR R10 R4 K7
- 0x5C2C0E00, // 0131 MOVE R11 R7
- 0x7C200600, // 0132 CALL R8 3
- 0x80041000, // 0133 RET 1 R8
- 0x70020019, // 0134 JMP #014F
- 0x1C1C0D0A, // 0135 EQ R7 R6 K10
- 0x781E0005, // 0136 JMPF R7 #013D
- 0x8C1C0906, // 0137 GETMET R7 R4 K6
- 0x8824090F, // 0138 GETMBR R9 R4 K15
- 0x58280010, // 0139 LDCONST R10 K16
- 0x7C1C0600, // 013A CALL R7 3
- 0x80040E00, // 013B RET 1 R7
- 0x70020011, // 013C JMP #014F
- 0x541E0006, // 013D LDINT R7 7
- 0x1C1C0C07, // 013E EQ R7 R6 R7
- 0x781E000E, // 013F JMPF R7 #014F
- 0xB81E5E00, // 0140 GETNGBL R7 K47
- 0xB8222600, // 0141 GETNGBL R8 K19
- 0x8C201130, // 0142 GETMET R8 R8 K48
- 0x7C200200, // 0143 CALL R8 1
- 0x94201133, // 0144 GETIDX R8 R8 K51
- 0x7C1C0200, // 0145 CALL R7 1
- 0xB8225E00, // 0146 GETNGBL R8 K47
- 0x58240032, // 0147 LDCONST R9 K50
- 0x7C200200, // 0148 CALL R8 1
- 0x081C0E08, // 0149 MUL R7 R7 R8
- 0x8C200906, // 014A GETMET R8 R4 K6
- 0x88280907, // 014B GETMBR R10 R4 K7
- 0x5C2C0E00, // 014C MOVE R11 R7
- 0x7C200600, // 014D CALL R8 3
- 0x80041000, // 014E RET 1 R8
- 0x7002018E, // 014F JMP #02DF
- 0x541E003D, // 0150 LDINT R7 62
- 0x1C1C0A07, // 0151 EQ R7 R5 R7
- 0x781E0082, // 0152 JMPF R7 #01D6
- 0x1C1C0D05, // 0153 EQ R7 R6 K5
- 0x781E001D, // 0154 JMPF R7 #0173
- 0x8C1C0912, // 0155 GETMET R7 R4 K18
- 0x7C1C0200, // 0156 CALL R7 1
- 0x60200010, // 0157 GETGBL R8 G16
- 0x88240134, // 0158 GETMBR R9 R0 K52
- 0x88241335, // 0159 GETMBR R9 R9 K53
- 0x8C241336, // 015A GETMET R9 R9 K54
- 0x7C240200, // 015B CALL R9 1
- 0x7C200200, // 015C CALL R8 1
- 0xA802000F, // 015D EXBLK 0 #016E
- 0x5C241000, // 015E MOVE R9 R8
- 0x7C240000, // 015F CALL R9 0
- 0x8C280F16, // 0160 GETMET R10 R7 K22
- 0x4C300000, // 0161 LDNIL R12
- 0x7C280400, // 0162 CALL R10 2
- 0x8C2C150C, // 0163 GETMET R11 R10 K12
- 0x5834000A, // 0164 LDCONST R13 K10
- 0x88380937, // 0165 GETMBR R14 R4 K55
- 0x883C1338, // 0166 GETMBR R15 R9 K56
- 0x7C2C0800, // 0167 CALL R11 4
- 0x8C2C150C, // 0168 GETMET R11 R10 K12
- 0x5834000E, // 0169 LDCONST R13 K14
- 0x88380937, // 016A GETMBR R14 R4 K55
- 0x883C1339, // 016B GETMBR R15 R9 K57
- 0x7C2C0800, // 016C CALL R11 4
- 0x7001FFEF, // 016D JMP #015E
- 0x5820003A, // 016E LDCONST R8 K58
- 0xAC200200, // 016F CATCH R8 1 0
- 0xB0080000, // 0170 RAISE 2 R0 R0
- 0x80040E00, // 0171 RET 1 R7
- 0x70020061, // 0172 JMP #01D5
- 0x1C1C0D0A, // 0173 EQ R7 R6 K10
- 0x781E0032, // 0174 JMPF R7 #01A8
- 0x8C1C0912, // 0175 GETMET R7 R4 K18
- 0x7C1C0200, // 0176 CALL R7 1
- 0x60200010, // 0177 GETGBL R8 G16
- 0x88240134, // 0178 GETMBR R9 R0 K52
- 0x88241335, // 0179 GETMBR R9 R9 K53
- 0x8C241336, // 017A GETMET R9 R9 K54
- 0x7C240200, // 017B CALL R9 1
- 0x7C200200, // 017C CALL R8 1
- 0xA8020024, // 017D EXBLK 0 #01A3
- 0x5C241000, // 017E MOVE R9 R8
- 0x7C240000, // 017F CALL R9 0
- 0x8C28093B, // 0180 GETMET R10 R4 K59
- 0x8C30133C, // 0181 GETMET R12 R9 K60
- 0x7C300200, // 0182 CALL R12 1
- 0x7C280400, // 0183 CALL R10 2
- 0x8C2C0F16, // 0184 GETMET R11 R7 K22
- 0x4C340000, // 0185 LDNIL R13
- 0x7C2C0400, // 0186 CALL R11 2
- 0x8C30170C, // 0187 GETMET R12 R11 K12
- 0x5838000A, // 0188 LDCONST R14 K10
- 0x883C0937, // 0189 GETMBR R15 R4 K55
- 0x8C40153D, // 018A GETMET R16 R10 K61
- 0x544A0008, // 018B LDINT R18 9
- 0x7C400400, // 018C CALL R16 2
- 0x7C300800, // 018D CALL R12 4
- 0x8C30170C, // 018E GETMET R12 R11 K12
- 0x5838000E, // 018F LDCONST R14 K14
- 0x883C090D, // 0190 GETMBR R15 R4 K13
- 0x8840133E, // 0191 GETMBR R16 R9 K62
- 0x7C300800, // 0192 CALL R12 4
- 0x8C30170C, // 0193 GETMET R12 R11 K12
- 0x58380010, // 0194 LDCONST R14 K16
- 0x883C0907, // 0195 GETMBR R15 R4 K7
- 0x8840133F, // 0196 GETMBR R16 R9 K63
- 0x7C300800, // 0197 CALL R12 4
- 0x8C30170C, // 0198 GETMET R12 R11 K12
- 0x543A0003, // 0199 LDINT R14 4
- 0x883C0907, // 019A GETMBR R15 R4 K7
- 0x88401340, // 019B GETMBR R16 R9 K64
- 0x7C300800, // 019C CALL R12 4
- 0x8C30170C, // 019D GETMET R12 R11 K12
- 0x543A0004, // 019E LDINT R14 5
- 0x883C0917, // 019F GETMBR R15 R4 K23
- 0x88401341, // 01A0 GETMBR R16 R9 K65
- 0x7C300800, // 01A1 CALL R12 4
- 0x7001FFDA, // 01A2 JMP #017E
- 0x5820003A, // 01A3 LDCONST R8 K58
- 0xAC200200, // 01A4 CATCH R8 1 0
- 0xB0080000, // 01A5 RAISE 2 R0 R0
- 0x80040E00, // 01A6 RET 1 R7
- 0x7002002C, // 01A7 JMP #01D5
- 0x1C1C0D0E, // 01A8 EQ R7 R6 K14
- 0x781E0005, // 01A9 JMPF R7 #01B0
- 0x8C1C0906, // 01AA GETMET R7 R4 K6
- 0x8824090F, // 01AB GETMBR R9 R4 K15
- 0x542A0004, // 01AC LDINT R10 5
- 0x7C1C0600, // 01AD CALL R7 3
- 0x80040E00, // 01AE RET 1 R7
- 0x70020024, // 01AF JMP #01D5
- 0x1C1C0D10, // 01B0 EQ R7 R6 K16
- 0x781E000B, // 01B1 JMPF R7 #01BE
- 0x881C0134, // 01B2 GETMBR R7 R0 K52
- 0x881C0F35, // 01B3 GETMBR R7 R7 K53
- 0x8C1C0F36, // 01B4 GETMET R7 R7 K54
- 0x7C1C0200, // 01B5 CALL R7 1
- 0x8C200906, // 01B6 GETMET R8 R4 K6
- 0x8828090F, // 01B7 GETMBR R10 R4 K15
- 0x602C000C, // 01B8 GETGBL R11 G12
- 0x5C300E00, // 01B9 MOVE R12 R7
- 0x7C2C0200, // 01BA CALL R11 1
- 0x7C200600, // 01BB CALL R8 3
- 0x80041000, // 01BC RET 1 R8
- 0x70020016, // 01BD JMP #01D5
- 0x541E0003, // 01BE LDINT R7 4
- 0x1C1C0C07, // 01BF EQ R7 R6 R7
- 0x781E0000, // 01C0 JMPF R7 #01C2
- 0x70020012, // 01C1 JMP #01D5
- 0x541E0004, // 01C2 LDINT R7 5
- 0x1C1C0C07, // 01C3 EQ R7 R6 R7
- 0x781E000F, // 01C4 JMPF R7 #01D5
- 0x881C0134, // 01C5 GETMBR R7 R0 K52
- 0x881C0F35, // 01C6 GETMBR R7 R7 K53
- 0x8C1C0F36, // 01C7 GETMET R7 R7 K54
- 0x7C1C0200, // 01C8 CALL R7 1
- 0x8C200F1C, // 01C9 GETMET R8 R7 K28
- 0x88280308, // 01CA GETMBR R10 R1 K8
- 0x7C200400, // 01CB CALL R8 2
- 0x4C240000, // 01CC LDNIL R9
- 0x1C241009, // 01CD EQ R9 R8 R9
- 0x78260000, // 01CE JMPF R9 #01D0
- 0x58200005, // 01CF LDCONST R8 K5
- 0x8C240906, // 01D0 GETMET R9 R4 K6
- 0x882C090F, // 01D1 GETMBR R11 R4 K15
- 0x5C301000, // 01D2 MOVE R12 R8
- 0x7C240600, // 01D3 CALL R9 3
- 0x80041200, // 01D4 RET 1 R9
- 0x70020108, // 01D5 JMP #02DF
- 0x541E003B, // 01D6 LDINT R7 60
- 0x1C1C0A07, // 01D7 EQ R7 R5 R7
- 0x781E0000, // 01D8 JMPF R7 #01DA
- 0x70020104, // 01D9 JMP #02DF
- 0x541E0027, // 01DA LDINT R7 40
- 0x1C1C0A07, // 01DB EQ R7 R5 R7
- 0x781E0071, // 01DC JMPF R7 #024F
- 0x1C1C0D05, // 01DD EQ R7 R6 K5
- 0x781E0005, // 01DE JMPF R7 #01E5
- 0x8C1C0906, // 01DF GETMET R7 R4 K6
- 0x8824090D, // 01E0 GETMBR R9 R4 K13
- 0x58280005, // 01E1 LDCONST R10 K5
- 0x7C1C0600, // 01E2 CALL R7 3
- 0x80040E00, // 01E3 RET 1 R7
- 0x70020068, // 01E4 JMP #024E
- 0x1C1C0D0A, // 01E5 EQ R7 R6 K10
- 0x781E0005, // 01E6 JMPF R7 #01ED
- 0x8C1C0906, // 01E7 GETMET R7 R4 K6
- 0x88240917, // 01E8 GETMBR R9 R4 K23
- 0x58280042, // 01E9 LDCONST R10 K66
- 0x7C1C0600, // 01EA CALL R7 3
- 0x80040E00, // 01EB RET 1 R7
- 0x70020060, // 01EC JMP #024E
- 0x1C1C0D0E, // 01ED EQ R7 R6 K14
- 0x781E0006, // 01EE JMPF R7 #01F6
- 0x8C1C0906, // 01EF GETMET R7 R4 K6
- 0x8824090D, // 01F0 GETMBR R9 R4 K13
- 0x88280134, // 01F1 GETMBR R10 R0 K52
- 0x88281543, // 01F2 GETMBR R10 R10 K67
- 0x7C1C0600, // 01F3 CALL R7 3
- 0x80040E00, // 01F4 RET 1 R7
- 0x70020057, // 01F5 JMP #024E
- 0x1C1C0D10, // 01F6 EQ R7 R6 K16
- 0x781E0009, // 01F7 JMPF R7 #0202
- 0x8C1C0906, // 01F8 GETMET R7 R4 K6
- 0x88240917, // 01F9 GETMBR R9 R4 K23
- 0xB82A2600, // 01FA GETNGBL R10 K19
- 0x8C281527, // 01FB GETMET R10 R10 K39
- 0x58300044, // 01FC LDCONST R12 K68
- 0x7C280400, // 01FD CALL R10 2
- 0x94281544, // 01FE GETIDX R10 R10 K68
- 0x7C1C0600, // 01FF CALL R7 3
- 0x80040E00, // 0200 RET 1 R7
- 0x7002004B, // 0201 JMP #024E
- 0x541E0003, // 0202 LDINT R7 4
- 0x1C1C0C07, // 0203 EQ R7 R6 R7
- 0x781E0005, // 0204 JMPF R7 #020B
- 0x8C1C0906, // 0205 GETMET R7 R4 K6
- 0x8824090D, // 0206 GETMBR R9 R4 K13
- 0x542A7FFF, // 0207 LDINT R10 32768
- 0x7C1C0600, // 0208 CALL R7 3
- 0x80040E00, // 0209 RET 1 R7
- 0x70020042, // 020A JMP #024E
- 0x541E0004, // 020B LDINT R7 5
- 0x1C1C0C07, // 020C EQ R7 R6 R7
- 0x781E0009, // 020D JMPF R7 #0218
- 0x8C1C0906, // 020E GETMET R7 R4 K6
- 0x88240917, // 020F GETMBR R9 R4 K23
- 0xB82A2600, // 0210 GETNGBL R10 K19
- 0x8C281527, // 0211 GETMET R10 R10 K39
- 0x58300045, // 0212 LDCONST R12 K69
- 0x7C280400, // 0213 CALL R10 2
- 0x94281546, // 0214 GETIDX R10 R10 K70
- 0x7C1C0600, // 0215 CALL R7 3
- 0x80040E00, // 0216 RET 1 R7
- 0x70020035, // 0217 JMP #024E
- 0x541E0005, // 0218 LDINT R7 6
- 0x1C1C0C07, // 0219 EQ R7 R6 R7
- 0x781E0005, // 021A JMPF R7 #0221
- 0x8C1C0906, // 021B GETMET R7 R4 K6
- 0x88240917, // 021C GETMBR R9 R4 K23
- 0x58280047, // 021D LDCONST R10 K71
- 0x7C1C0600, // 021E CALL R7 3
- 0x80040E00, // 021F RET 1 R7
- 0x7002002C, // 0220 JMP #024E
- 0x541E0006, // 0221 LDINT R7 7
- 0x1C1C0C07, // 0222 EQ R7 R6 R7
- 0x781E0005, // 0223 JMPF R7 #022A
- 0x8C1C0906, // 0224 GETMET R7 R4 K6
- 0x8824090D, // 0225 GETMBR R9 R4 K13
- 0x58280005, // 0226 LDCONST R10 K5
- 0x7C1C0600, // 0227 CALL R7 3
- 0x80040E00, // 0228 RET 1 R7
- 0x70020023, // 0229 JMP #024E
- 0x541E0007, // 022A LDINT R7 8
- 0x1C1C0C07, // 022B EQ R7 R6 R7
- 0x781E000A, // 022C JMPF R7 #0238
- 0x8C1C0906, // 022D GETMET R7 R4 K6
- 0x88240917, // 022E GETMBR R9 R4 K23
- 0xB82A2600, // 022F GETNGBL R10 K19
- 0x8C281527, // 0230 GETMET R10 R10 K39
- 0x58300048, // 0231 LDCONST R12 K72
- 0x7C280400, // 0232 CALL R10 2
- 0x94281549, // 0233 GETIDX R10 R10 K73
- 0x9428154A, // 0234 GETIDX R10 R10 K74
- 0x7C1C0600, // 0235 CALL R7 3
- 0x80040E00, // 0236 RET 1 R7
- 0x70020015, // 0237 JMP #024E
- 0x541E0008, // 0238 LDINT R7 9
- 0x1C1C0C07, // 0239 EQ R7 R6 R7
- 0x781E0005, // 023A JMPF R7 #0241
- 0x8C1C0906, // 023B GETMET R7 R4 K6
- 0x8824090D, // 023C GETMBR R9 R4 K13
- 0x58280005, // 023D LDCONST R10 K5
- 0x7C1C0600, // 023E CALL R7 3
- 0x80040E00, // 023F RET 1 R7
- 0x7002000C, // 0240 JMP #024E
- 0x541E0009, // 0241 LDINT R7 10
- 0x1C1C0C07, // 0242 EQ R7 R6 R7
- 0x781E0009, // 0243 JMPF R7 #024E
- 0x8C1C0906, // 0244 GETMET R7 R4 K6
- 0x88240917, // 0245 GETMBR R9 R4 K23
- 0xB82A2600, // 0246 GETNGBL R10 K19
- 0x8C281527, // 0247 GETMET R10 R10 K39
- 0x58300048, // 0248 LDCONST R12 K72
- 0x7C280400, // 0249 CALL R10 2
- 0x94281549, // 024A GETIDX R10 R10 K73
- 0x9428154B, // 024B GETIDX R10 R10 K75
- 0x7C1C0600, // 024C CALL R7 3
- 0x80040E00, // 024D RET 1 R7
- 0x7002008F, // 024E JMP #02DF
- 0x541E003E, // 024F LDINT R7 63
- 0x1C1C0A07, // 0250 EQ R7 R5 R7
- 0x781E0000, // 0251 JMPF R7 #0253
- 0x7002008B, // 0252 JMP #02DF
- 0x541E002A, // 0253 LDINT R7 43
- 0x1C1C0A07, // 0254 EQ R7 R5 R7
- 0x781E0016, // 0255 JMPF R7 #026D
- 0x1C1C0D05, // 0256 EQ R7 R6 K5
- 0x781E0007, // 0257 JMPF R7 #0260
- 0x8C1C0906, // 0258 GETMET R7 R4 K6
- 0x88240917, // 0259 GETMBR R9 R4 K23
- 0xB82A2600, // 025A GETNGBL R10 K19
- 0x8C28154C, // 025B GETMET R10 R10 K76
- 0x7C280200, // 025C CALL R10 1
- 0x7C1C0600, // 025D CALL R7 3
- 0x80040E00, // 025E RET 1 R7
- 0x7002000B, // 025F JMP #026C
- 0x1C1C0D0A, // 0260 EQ R7 R6 K10
- 0x781E0009, // 0261 JMPF R7 #026C
- 0x8C1C094D, // 0262 GETMET R7 R4 K77
- 0x7C1C0200, // 0263 CALL R7 1
- 0x8C200F0C, // 0264 GETMET R8 R7 K12
- 0x4C280000, // 0265 LDNIL R10
- 0x882C0917, // 0266 GETMBR R11 R4 K23
- 0xB8322600, // 0267 GETNGBL R12 K19
- 0x8C30194C, // 0268 GETMET R12 R12 K76
- 0x7C300200, // 0269 CALL R12 1
- 0x7C200800, // 026A CALL R8 4
- 0x80040E00, // 026B RET 1 R7
- 0x70020071, // 026C JMP #02DF
- 0x541E002B, // 026D LDINT R7 44
- 0x1C1C0A07, // 026E EQ R7 R5 R7
- 0x781E001C, // 026F JMPF R7 #028D
- 0x1C1C0D05, // 0270 EQ R7 R6 K5
- 0x781E0005, // 0271 JMPF R7 #0278
- 0x8C1C0906, // 0272 GETMET R7 R4 K6
- 0x8824090F, // 0273 GETMBR R9 R4 K15
- 0x5828000A, // 0274 LDCONST R10 K10
- 0x7C1C0600, // 0275 CALL R7 3
- 0x80040E00, // 0276 RET 1 R7
- 0x70020013, // 0277 JMP #028C
- 0x1C1C0D0A, // 0278 EQ R7 R6 K10
- 0x781E0005, // 0279 JMPF R7 #0280
- 0x8C1C0906, // 027A GETMET R7 R4 K6
- 0x8824090F, // 027B GETMBR R9 R4 K15
- 0x542A0003, // 027C LDINT R10 4
- 0x7C1C0600, // 027D CALL R7 3
- 0x80040E00, // 027E RET 1 R7
- 0x7002000B, // 027F JMP #028C
- 0x1C1C0D0E, // 0280 EQ R7 R6 K14
- 0x781E0009, // 0281 JMPF R7 #028C
- 0x8C1C094D, // 0282 GETMET R7 R4 K77
- 0x7C1C0200, // 0283 CALL R7 1
- 0x8C200F0C, // 0284 GETMET R8 R7 K12
- 0x4C280000, // 0285 LDNIL R10
- 0x8C2C0906, // 0286 GETMET R11 R4 K6
- 0x8834090F, // 0287 GETMBR R13 R4 K15
- 0x543A0003, // 0288 LDINT R14 4
- 0x7C2C0600, // 0289 CALL R11 3
- 0x7C200600, // 028A CALL R8 3
- 0x80040E00, // 028B RET 1 R7
- 0x70020051, // 028C JMP #02DF
- 0x541E0030, // 028D LDINT R7 49
- 0x1C1C0A07, // 028E EQ R7 R5 R7
- 0x781E0010, // 028F JMPF R7 #02A1
- 0x1C1C0D10, // 0290 EQ R7 R6 K16
- 0x781E0005, // 0291 JMPF R7 #0298
- 0x8C1C0906, // 0292 GETMET R7 R4 K6
- 0x8824090F, // 0293 GETMBR R9 R4 K15
- 0x542A001D, // 0294 LDINT R10 30
- 0x7C1C0600, // 0295 CALL R7 3
- 0x80040E00, // 0296 RET 1 R7
- 0x70020007, // 0297 JMP #02A0
- 0x541EFFFB, // 0298 LDINT R7 65532
- 0x1C1C0C07, // 0299 EQ R7 R6 R7
- 0x781E0004, // 029A JMPF R7 #02A0
- 0x8C1C0906, // 029B GETMET R7 R4 K6
- 0x8824092B, // 029C GETMBR R9 R4 K43
- 0x58280005, // 029D LDCONST R10 K5
- 0x7C1C0600, // 029E CALL R7 3
- 0x80040E00, // 029F RET 1 R7
- 0x7002003D, // 02A0 JMP #02DF
- 0x541E001C, // 02A1 LDINT R7 29
- 0x1C1C0A07, // 02A2 EQ R7 R5 R7
- 0x781E0037, // 02A3 JMPF R7 #02DC
- 0x1C1C0D05, // 02A4 EQ R7 R6 K5
- 0x781E0000, // 02A5 JMPF R7 #02A7
- 0x70020033, // 02A6 JMP #02DB
- 0x1C1C0D0A, // 02A7 EQ R7 R6 K10
- 0x781E0013, // 02A8 JMPF R7 #02BD
- 0x8C1C0912, // 02A9 GETMET R7 R4 K18
- 0x7C1C0200, // 02AA CALL R7 1
- 0x60200010, // 02AB GETGBL R8 G16
- 0x8C24014E, // 02AC GETMET R9 R0 K78
- 0x7C240200, // 02AD CALL R9 1
- 0x7C200200, // 02AE CALL R8 1
- 0xA8020007, // 02AF EXBLK 0 #02B8
- 0x5C241000, // 02B0 MOVE R9 R8
- 0x7C240000, // 02B1 CALL R9 0
- 0x8C280F0C, // 02B2 GETMET R10 R7 K12
- 0x4C300000, // 02B3 LDNIL R12
- 0x8834092B, // 02B4 GETMBR R13 R4 K43
- 0x5C381200, // 02B5 MOVE R14 R9
- 0x7C280800, // 02B6 CALL R10 4
- 0x7001FFF7, // 02B7 JMP #02B0
- 0x5820003A, // 02B8 LDCONST R8 K58
- 0xAC200200, // 02B9 CATCH R8 1 0
- 0xB0080000, // 02BA RAISE 2 R0 R0
- 0x80040E00, // 02BB RET 1 R7
- 0x7002001D, // 02BC JMP #02DB
- 0x1C1C0D0E, // 02BD EQ R7 R6 K14
- 0x781E0003, // 02BE JMPF R7 #02C3
- 0x8C1C0912, // 02BF GETMET R7 R4 K18
- 0x7C1C0200, // 02C0 CALL R7 1
- 0x80040E00, // 02C1 RET 1 R7
- 0x70020017, // 02C2 JMP #02DB
- 0x1C1C0D10, // 02C3 EQ R7 R6 K16
- 0x781E0015, // 02C4 JMPF R7 #02DB
- 0x881C0134, // 02C5 GETMBR R7 R0 K52
- 0x8C1C0F4F, // 02C6 GETMET R7 R7 K79
- 0x50240200, // 02C7 LDBOOL R9 1 0
- 0x7C1C0400, // 02C8 CALL R7 2
- 0x8C200912, // 02C9 GETMET R8 R4 K18
- 0x7C200200, // 02CA CALL R8 1
- 0x60240010, // 02CB GETGBL R9 G16
- 0x5C280E00, // 02CC MOVE R10 R7
- 0x7C240200, // 02CD CALL R9 1
- 0xA8020007, // 02CE EXBLK 0 #02D7
- 0x5C281200, // 02CF MOVE R10 R9
- 0x7C280000, // 02D0 CALL R10 0
- 0x8C2C110C, // 02D1 GETMET R11 R8 K12
- 0x4C340000, // 02D2 LDNIL R13
- 0x8838090D, // 02D3 GETMBR R14 R4 K13
- 0x5C3C1400, // 02D4 MOVE R15 R10
- 0x7C2C0800, // 02D5 CALL R11 4
- 0x7001FFF7, // 02D6 JMP #02CF
- 0x5824003A, // 02D7 LDCONST R9 K58
- 0xAC240200, // 02D8 CATCH R9 1 0
- 0xB0080000, // 02D9 RAISE 2 R0 R0
- 0x80041000, // 02DA RET 1 R8
- 0x70020002, // 02DB JMP #02DF
- 0xB81E0200, // 02DC GETNGBL R7 K1
- 0x881C0F51, // 02DD GETMBR R7 R7 K81
- 0x900AA007, // 02DE SETMBR R2 K80 R7
- 0x80000000, // 02DF RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(Matter_Plugin_core_init, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 5]) { /* constants */
- /* K0 */ be_nested_str_weak(init),
- /* K1 */ be_nested_str_weak(endpoints),
- /* K2 */ be_nested_str_weak(ENDPOINTS),
- /* K3 */ be_nested_str_weak(clusters),
- /* K4 */ be_nested_str_weak(CLUSTERS),
- }),
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[11]) { /* code */
- 0x60080003, // 0000 GETGBL R2 G3
- 0x5C0C0000, // 0001 MOVE R3 R0
- 0x7C080200, // 0002 CALL R2 1
- 0x8C080500, // 0003 GETMET R2 R2 K0
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x88080102, // 0006 GETMBR R2 R0 K2
- 0x90020202, // 0007 SETMBR R0 K1 R2
- 0x88080104, // 0008 GETMBR R2 R0 K4
- 0x90020602, // 0009 SETMBR R0 K3 R2
- 0x80000000, // 000A RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: Matter_Plugin_core
-********************************************************************/
-extern const bclass be_class_Matter_Plugin;
-be_local_class(Matter_Plugin_core,
- 0,
- &be_class_Matter_Plugin,
- be_nested_map(5,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(ENDPOINTS, 3), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(1,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(0),
- })) ) } )) },
- { be_const_key_weak(read_attribute, -1), be_const_closure(Matter_Plugin_core_read_attribute_closure) },
- { be_const_key_weak(invoke_request, 1), be_const_closure(Matter_Plugin_core_invoke_request_closure) },
- { be_const_key_weak(init, -1), be_const_closure(Matter_Plugin_core_init_closure) },
- { be_const_key_weak(CLUSTERS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
- be_const_map( * be_nested_map(13,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_int(52, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(0,
- ( (struct bvalue*) &(const bvalue[]) {
- })) ) } )) },
- { be_const_key_int(40, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(10,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(0),
- be_const_int(1),
- be_const_int(2),
- be_const_int(3),
- be_const_int(4),
- be_const_int(5),
- be_const_int(6),
- be_const_int(7),
- be_const_int(8),
- be_const_int(9),
- })) ) } )) },
- { be_const_key_int(43, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(2,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(0),
- be_const_int(1),
- })) ) } )) },
- { be_const_key_int(29, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(4,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(0),
- be_const_int(1),
- be_const_int(2),
- be_const_int(3),
- })) ) } )) },
- { be_const_key_int(56, 2), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(3,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(0),
- be_const_int(1),
- be_const_int(7),
- })) ) } )) },
- { be_const_key_int(44, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(3,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(0),
- be_const_int(1),
- be_const_int(2),
- })) ) } )) },
- { be_const_key_int(62, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(6,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(0),
- be_const_int(1),
- be_const_int(2),
- be_const_int(3),
- be_const_int(4),
- be_const_int(5),
- })) ) } )) },
- { be_const_key_int(50, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(0,
- ( (struct bvalue*) &(const bvalue[]) {
- })) ) } )) },
- { be_const_key_int(60, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(0,
- ( (struct bvalue*) &(const bvalue[]) {
- })) ) } )) },
- { be_const_key_int(48, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(5,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(0),
- be_const_int(1),
- be_const_int(2),
- be_const_int(3),
- be_const_int(4),
- })) ) } )) },
- { be_const_key_int(49, 6), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(2,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(3),
- be_const_int(65532),
- })) ) } )) },
- { be_const_key_int(63, 7), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(0,
- ( (struct bvalue*) &(const bvalue[]) {
- })) ) } )) },
- { be_const_key_int(51, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
- be_const_list( * be_nested_list(4,
- ( (struct bvalue*) &(const bvalue[]) {
- be_const_int(0),
- be_const_int(1),
- be_const_int(2),
- be_const_int(8),
- })) ) } )) },
- })) ) } )) },
- })),
- be_str_weak(Matter_Plugin_core)
-);
-/*******************************************************************/
-
-void be_load_Matter_Plugin_core_class(bvm *vm) {
- be_pushntvclass(vm, &be_class_Matter_Plugin_core);
- be_setglobal(vm, "Matter_Plugin_core");
- be_pop(vm, 1);
-}
-/********************************************************************/
-/* End of solidification */
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Session.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Session.h
index 45fcfe981..d35617f1e 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Session.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Session.h
@@ -6,6 +6,662 @@
extern const bclass be_class_Matter_Session;
+/********************************************************************
+** Solidified function: get_i2r
+********************************************************************/
+be_local_closure(Matter_Session_get_i2r, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(i2rkey),
+ }),
+ be_str_weak(get_i2r),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: tojson
+********************************************************************/
+be_local_closure(Matter_Session_tojson, /* name */
+ be_nested_proto(
+ 18, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[24]) { /* constants */
+ /* K0 */ be_nested_str_weak(json),
+ /* K1 */ be_nested_str_weak(string),
+ /* K2 */ be_nested_str_weak(introspect),
+ /* K3 */ be_nested_str_weak(persist_pre),
+ /* K4 */ be_nested_str_weak(members),
+ /* K5 */ be_nested_str_weak(get),
+ /* K6 */ be_nested_str_weak(function),
+ /* K7 */ be_const_int(0),
+ /* K8 */ be_nested_str_weak(_),
+ /* K9 */ be_nested_str_weak(push),
+ /* K10 */ be_nested_str_weak(stop_iteration),
+ /* K11 */ be_nested_str_weak(matter),
+ /* K12 */ be_nested_str_weak(sort),
+ /* K13 */ be_nested_str_weak(_X24_X24),
+ /* K14 */ be_nested_str_weak(tob64),
+ /* K15 */ be_nested_str_weak(instance),
+ /* K16 */ be_nested_str_weak(format),
+ /* K17 */ be_nested_str_weak(_X25s_X3A_X25s),
+ /* K18 */ be_nested_str_weak(dump),
+ /* K19 */ be_nested_str_weak(persist_post),
+ /* K20 */ be_nested_str_weak(_X7B),
+ /* K21 */ be_nested_str_weak(concat),
+ /* K22 */ be_nested_str_weak(_X2C),
+ /* K23 */ be_nested_str_weak(_X7D),
+ }),
+ be_str_weak(tojson),
+ &be_const_str_solidified,
+ ( &(const binstruction[96]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0xA40A0200, // 0001 IMPORT R2 K1
+ 0xA40E0400, // 0002 IMPORT R3 K2
+ 0x8C100103, // 0003 GETMET R4 R0 K3
+ 0x7C100200, // 0004 CALL R4 1
+ 0x60100012, // 0005 GETGBL R4 G18
+ 0x7C100000, // 0006 CALL R4 0
+ 0x60140010, // 0007 GETGBL R5 G16
+ 0x8C180704, // 0008 GETMET R6 R3 K4
+ 0x5C200000, // 0009 MOVE R8 R0
+ 0x7C180400, // 000A CALL R6 2
+ 0x7C140200, // 000B CALL R5 1
+ 0xA8020011, // 000C EXBLK 0 #001F
+ 0x5C180A00, // 000D MOVE R6 R5
+ 0x7C180000, // 000E CALL R6 0
+ 0x8C1C0705, // 000F GETMET R7 R3 K5
+ 0x5C240000, // 0010 MOVE R9 R0
+ 0x5C280C00, // 0011 MOVE R10 R6
+ 0x7C1C0600, // 0012 CALL R7 3
+ 0x60200004, // 0013 GETGBL R8 G4
+ 0x5C240E00, // 0014 MOVE R9 R7
+ 0x7C200200, // 0015 CALL R8 1
+ 0x20201106, // 0016 NE R8 R8 K6
+ 0x78220005, // 0017 JMPF R8 #001E
+ 0x94200D07, // 0018 GETIDX R8 R6 K7
+ 0x20201108, // 0019 NE R8 R8 K8
+ 0x78220002, // 001A JMPF R8 #001E
+ 0x8C200909, // 001B GETMET R8 R4 K9
+ 0x5C280C00, // 001C MOVE R10 R6
+ 0x7C200400, // 001D CALL R8 2
+ 0x7001FFED, // 001E JMP #000D
+ 0x5814000A, // 001F LDCONST R5 K10
+ 0xAC140200, // 0020 CATCH R5 1 0
+ 0xB0080000, // 0021 RAISE 2 R0 R0
+ 0xB8161600, // 0022 GETNGBL R5 K11
+ 0x8C140B0C, // 0023 GETMET R5 R5 K12
+ 0x5C1C0800, // 0024 MOVE R7 R4
+ 0x7C140400, // 0025 CALL R5 2
+ 0x5C100A00, // 0026 MOVE R4 R5
+ 0x60140012, // 0027 GETGBL R5 G18
+ 0x7C140000, // 0028 CALL R5 0
+ 0x60180010, // 0029 GETGBL R6 G16
+ 0x5C1C0800, // 002A MOVE R7 R4
+ 0x7C180200, // 002B CALL R6 1
+ 0xA8020027, // 002C EXBLK 0 #0055
+ 0x5C1C0C00, // 002D MOVE R7 R6
+ 0x7C1C0000, // 002E CALL R7 0
+ 0x8C200705, // 002F GETMET R8 R3 K5
+ 0x5C280000, // 0030 MOVE R10 R0
+ 0x5C2C0E00, // 0031 MOVE R11 R7
+ 0x7C200600, // 0032 CALL R8 3
+ 0x4C240000, // 0033 LDNIL R9
+ 0x1C241009, // 0034 EQ R9 R8 R9
+ 0x78260000, // 0035 JMPF R9 #0037
+ 0x7001FFF5, // 0036 JMP #002D
+ 0x6024000F, // 0037 GETGBL R9 G15
+ 0x5C281000, // 0038 MOVE R10 R8
+ 0x602C0015, // 0039 GETGBL R11 G21
+ 0x7C240400, // 003A CALL R9 2
+ 0x78260004, // 003B JMPF R9 #0041
+ 0x8C24110E, // 003C GETMET R9 R8 K14
+ 0x7C240200, // 003D CALL R9 1
+ 0x00261A09, // 003E ADD R9 K13 R9
+ 0x5C201200, // 003F MOVE R8 R9
+ 0x70020005, // 0040 JMP #0047
+ 0x60240004, // 0041 GETGBL R9 G4
+ 0x5C281000, // 0042 MOVE R10 R8
+ 0x7C240200, // 0043 CALL R9 1
+ 0x1C24130F, // 0044 EQ R9 R9 K15
+ 0x78260000, // 0045 JMPF R9 #0047
+ 0x7001FFE5, // 0046 JMP #002D
+ 0x8C240B09, // 0047 GETMET R9 R5 K9
+ 0x8C2C0510, // 0048 GETMET R11 R2 K16
+ 0x58340011, // 0049 LDCONST R13 K17
+ 0x8C380312, // 004A GETMET R14 R1 K18
+ 0x60400008, // 004B GETGBL R16 G8
+ 0x5C440E00, // 004C MOVE R17 R7
+ 0x7C400200, // 004D CALL R16 1
+ 0x7C380400, // 004E CALL R14 2
+ 0x8C3C0312, // 004F GETMET R15 R1 K18
+ 0x5C441000, // 0050 MOVE R17 R8
+ 0x7C3C0400, // 0051 CALL R15 2
+ 0x7C2C0800, // 0052 CALL R11 4
+ 0x7C240400, // 0053 CALL R9 2
+ 0x7001FFD7, // 0054 JMP #002D
+ 0x5818000A, // 0055 LDCONST R6 K10
+ 0xAC180200, // 0056 CATCH R6 1 0
+ 0xB0080000, // 0057 RAISE 2 R0 R0
+ 0x8C180113, // 0058 GETMET R6 R0 K19
+ 0x7C180200, // 0059 CALL R6 1
+ 0x8C180B15, // 005A GETMET R6 R5 K21
+ 0x58200016, // 005B LDCONST R8 K22
+ 0x7C180400, // 005C CALL R6 2
+ 0x001A2806, // 005D ADD R6 K20 R6
+ 0x00180D17, // 005E ADD R6 R6 K23
+ 0x80040C00, // 005F RET 1 R6
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: assign_fabric_index
+********************************************************************/
+be_local_closure(Matter_Session_assign_fabric_index, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(_fabric),
+ /* K1 */ be_nested_str_weak(get_fabric_index),
+ /* K2 */ be_nested_str_weak(set_fabric_index),
+ /* K3 */ be_nested_str_weak(_store),
+ /* K4 */ be_nested_str_weak(next_fabric_idx),
+ }),
+ be_str_weak(assign_fabric_index),
+ &be_const_str_solidified,
+ ( &(const binstruction[13]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x4C080000, // 0003 LDNIL R2
+ 0x1C040202, // 0004 EQ R1 R1 R2
+ 0x78060005, // 0005 JMPF R1 #000C
+ 0x88040100, // 0006 GETMBR R1 R0 K0
+ 0x8C040302, // 0007 GETMET R1 R1 K2
+ 0x880C0103, // 0008 GETMBR R3 R0 K3
+ 0x8C0C0704, // 0009 GETMET R3 R3 K4
+ 0x7C0C0200, // 000A CALL R3 1
+ 0x7C040400, // 000B CALL R1 2
+ 0x80000000, // 000C RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: persist_to_fabric
+********************************************************************/
+be_local_closure(Matter_Session_persist_to_fabric, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(_fabric),
+ /* K1 */ be_nested_str_weak(add_session),
+ }),
+ be_str_weak(persist_to_fabric),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C040400, // 0003 CALL R1 2
+ 0x80000000, // 0004 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_mode_PASE
+********************************************************************/
+be_local_closure(Matter_Session_set_mode_PASE, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(set_mode),
+ /* K1 */ be_nested_str_weak(_PASE),
+ }),
+ be_str_weak(set_mode_PASE),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x8C040100, // 0000 GETMET R1 R0 K0
+ 0x880C0101, // 0001 GETMBR R3 R0 K1
+ 0x7C040400, // 0002 CALL R1 2
+ 0x80000000, // 0003 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_fabric_label
+********************************************************************/
+be_local_closure(Matter_Session_get_fabric_label, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(_fabric),
+ /* K1 */ be_nested_str_weak(fabric_label),
+ }),
+ be_str_weak(get_fabric_label),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x88040301, // 0001 GETMBR R1 R1 K1
+ 0x80040200, // 0002 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_device_id
+********************************************************************/
+be_local_closure(Matter_Session_get_device_id, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(_fabric),
+ /* K1 */ be_nested_str_weak(device_id),
+ }),
+ be_str_weak(get_device_id),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x88040301, // 0001 GETMBR R1 R1 K1
+ 0x80040200, // 0002 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_r2i
+********************************************************************/
+be_local_closure(Matter_Session_get_r2i, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(r2ikey),
+ }),
+ be_str_weak(get_r2i),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_Session_init, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 5, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[24]) { /* constants */
+ /* K0 */ be_nested_str_weak(crypto),
+ /* K1 */ be_nested_str_weak(_store),
+ /* K2 */ be_nested_str_weak(mode),
+ /* K3 */ be_const_int(0),
+ /* K4 */ be_nested_str_weak(local_session_id),
+ /* K5 */ be_nested_str_weak(initiator_session_id),
+ /* K6 */ be_nested_str_weak(_counter_snd_impl),
+ /* K7 */ be_nested_str_weak(matter),
+ /* K8 */ be_nested_str_weak(Counter),
+ /* K9 */ be_nested_str_weak(_counter_rcv_impl),
+ /* K10 */ be_nested_str_weak(counter_rcv),
+ /* K11 */ be_nested_str_weak(counter_snd),
+ /* K12 */ be_nested_str_weak(next),
+ /* K13 */ be_nested_str_weak(_COUNTER_SND_INCR),
+ /* K14 */ be_nested_str_weak(_counter_insecure_rcv),
+ /* K15 */ be_nested_str_weak(_counter_insecure_snd),
+ /* K16 */ be_nested_str_weak(_breadcrumb),
+ /* K17 */ be_nested_str_weak(_exchange_id),
+ /* K18 */ be_nested_str_weak(random),
+ /* K19 */ be_const_int(2),
+ /* K20 */ be_nested_str_weak(get),
+ /* K21 */ be_nested_str_weak(_fabric),
+ /* K22 */ be_nested_str_weak(create_fabric),
+ /* K23 */ be_nested_str_weak(update),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[47]) { /* code */
+ 0xA4160000, // 0000 IMPORT R5 K0
+ 0x90020201, // 0001 SETMBR R0 K1 R1
+ 0x90020503, // 0002 SETMBR R0 K2 K3
+ 0x90020802, // 0003 SETMBR R0 K4 R2
+ 0x90020A03, // 0004 SETMBR R0 K5 R3
+ 0xB81A0E00, // 0005 GETNGBL R6 K7
+ 0x8C180D08, // 0006 GETMET R6 R6 K8
+ 0x7C180200, // 0007 CALL R6 1
+ 0x90020C06, // 0008 SETMBR R0 K6 R6
+ 0xB81A0E00, // 0009 GETNGBL R6 K7
+ 0x8C180D08, // 000A GETMET R6 R6 K8
+ 0x7C180200, // 000B CALL R6 1
+ 0x90021206, // 000C SETMBR R0 K9 R6
+ 0x90021503, // 000D SETMBR R0 K10 K3
+ 0x88180106, // 000E GETMBR R6 R0 K6
+ 0x8C180D0C, // 000F GETMET R6 R6 K12
+ 0x7C180200, // 0010 CALL R6 1
+ 0x881C010D, // 0011 GETMBR R7 R0 K13
+ 0x00180C07, // 0012 ADD R6 R6 R7
+ 0x90021606, // 0013 SETMBR R0 K11 R6
+ 0xB81A0E00, // 0014 GETNGBL R6 K7
+ 0x8C180D08, // 0015 GETMET R6 R6 K8
+ 0x7C180200, // 0016 CALL R6 1
+ 0x90021C06, // 0017 SETMBR R0 K14 R6
+ 0xB81A0E00, // 0018 GETNGBL R6 K7
+ 0x8C180D08, // 0019 GETMET R6 R6 K8
+ 0x7C180200, // 001A CALL R6 1
+ 0x90021E06, // 001B SETMBR R0 K15 R6
+ 0x90022103, // 001C SETMBR R0 K16 K3
+ 0x8C180B12, // 001D GETMET R6 R5 K18
+ 0x58200013, // 001E LDCONST R8 K19
+ 0x7C180400, // 001F CALL R6 2
+ 0x8C180D14, // 0020 GETMET R6 R6 K20
+ 0x58200003, // 0021 LDCONST R8 K3
+ 0x58240013, // 0022 LDCONST R9 K19
+ 0x7C180600, // 0023 CALL R6 3
+ 0x90022206, // 0024 SETMBR R0 K17 R6
+ 0x78120001, // 0025 JMPF R4 #0028
+ 0x5C180800, // 0026 MOVE R6 R4
+ 0x70020002, // 0027 JMP #002B
+ 0x88180101, // 0028 GETMBR R6 R0 K1
+ 0x8C180D16, // 0029 GETMET R6 R6 K22
+ 0x7C180200, // 002A CALL R6 1
+ 0x90022A06, // 002B SETMBR R0 K21 R6
+ 0x8C180117, // 002C GETMET R6 R0 K23
+ 0x7C180200, // 002D CALL R6 1
+ 0x80000000, // 002E RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_mode
+********************************************************************/
+be_local_closure(Matter_Session_get_mode, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(mode),
+ }),
+ be_str_weak(get_mode),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: fromjson
+********************************************************************/
+be_local_closure(Matter_Session_fromjson, /* name */
+ be_nested_proto(
+ 17, /* nstack */
+ 3, /* argc */
+ 4, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[17]) { /* constants */
+ /* K0 */ be_const_class(be_class_Matter_Session),
+ /* K1 */ be_nested_str_weak(string),
+ /* K2 */ be_nested_str_weak(introspect),
+ /* K3 */ be_nested_str_weak(matter),
+ /* K4 */ be_nested_str_weak(Session),
+ /* K5 */ be_nested_str_weak(keys),
+ /* K6 */ be_nested_str_weak(find),
+ /* K7 */ be_nested_str_weak(0x),
+ /* K8 */ be_const_int(0),
+ /* K9 */ be_nested_str_weak(set),
+ /* K10 */ be_nested_str_weak(fromhex),
+ /* K11 */ be_const_int(2),
+ /* K12 */ be_const_int(2147483647),
+ /* K13 */ be_nested_str_weak(_X24_X24),
+ /* K14 */ be_nested_str_weak(fromb64),
+ /* K15 */ be_nested_str_weak(stop_iteration),
+ /* K16 */ be_nested_str_weak(hydrate_post),
+ }),
+ be_str_weak(fromjson),
+ &be_const_str_solidified,
+ ( &(const binstruction[75]) { /* code */
+ 0x580C0000, // 0000 LDCONST R3 K0
+ 0xA4120200, // 0001 IMPORT R4 K1
+ 0xA4160400, // 0002 IMPORT R5 K2
+ 0xB81A0600, // 0003 GETNGBL R6 K3
+ 0x8C180D04, // 0004 GETMET R6 R6 K4
+ 0x5C200000, // 0005 MOVE R8 R0
+ 0x4C240000, // 0006 LDNIL R9
+ 0x4C280000, // 0007 LDNIL R10
+ 0x5C2C0400, // 0008 MOVE R11 R2
+ 0x7C180A00, // 0009 CALL R6 5
+ 0x601C0010, // 000A GETGBL R7 G16
+ 0x8C200305, // 000B GETMET R8 R1 K5
+ 0x7C200200, // 000C CALL R8 1
+ 0x7C1C0200, // 000D CALL R7 1
+ 0xA8020035, // 000E EXBLK 0 #0045
+ 0x5C200E00, // 000F MOVE R8 R7
+ 0x7C200000, // 0010 CALL R8 0
+ 0x94240208, // 0011 GETIDX R9 R1 R8
+ 0x60280004, // 0012 GETGBL R10 G4
+ 0x5C2C1200, // 0013 MOVE R11 R9
+ 0x7C280200, // 0014 CALL R10 1
+ 0x1C281501, // 0015 EQ R10 R10 K1
+ 0x782A0027, // 0016 JMPF R10 #003F
+ 0x8C280906, // 0017 GETMET R10 R4 K6
+ 0x5C301200, // 0018 MOVE R12 R9
+ 0x58340007, // 0019 LDCONST R13 K7
+ 0x7C280600, // 001A CALL R10 3
+ 0x1C281508, // 001B EQ R10 R10 K8
+ 0x782A000A, // 001C JMPF R10 #0028
+ 0x8C280B09, // 001D GETMET R10 R5 K9
+ 0x5C300C00, // 001E MOVE R12 R6
+ 0x5C341000, // 001F MOVE R13 R8
+ 0x60380015, // 0020 GETGBL R14 G21
+ 0x7C380000, // 0021 CALL R14 0
+ 0x8C381D0A, // 0022 GETMET R14 R14 K10
+ 0x4042170C, // 0023 CONNECT R16 K11 K12
+ 0x94401210, // 0024 GETIDX R16 R9 R16
+ 0x7C380400, // 0025 CALL R14 2
+ 0x7C280800, // 0026 CALL R10 4
+ 0x70020015, // 0027 JMP #003E
+ 0x8C280906, // 0028 GETMET R10 R4 K6
+ 0x5C301200, // 0029 MOVE R12 R9
+ 0x5834000D, // 002A LDCONST R13 K13
+ 0x7C280600, // 002B CALL R10 3
+ 0x1C281508, // 002C EQ R10 R10 K8
+ 0x782A000A, // 002D JMPF R10 #0039
+ 0x8C280B09, // 002E GETMET R10 R5 K9
+ 0x5C300C00, // 002F MOVE R12 R6
+ 0x5C341000, // 0030 MOVE R13 R8
+ 0x60380015, // 0031 GETGBL R14 G21
+ 0x7C380000, // 0032 CALL R14 0
+ 0x8C381D0E, // 0033 GETMET R14 R14 K14
+ 0x4042170C, // 0034 CONNECT R16 K11 K12
+ 0x94401210, // 0035 GETIDX R16 R9 R16
+ 0x7C380400, // 0036 CALL R14 2
+ 0x7C280800, // 0037 CALL R10 4
+ 0x70020004, // 0038 JMP #003E
+ 0x8C280B09, // 0039 GETMET R10 R5 K9
+ 0x5C300C00, // 003A MOVE R12 R6
+ 0x5C341000, // 003B MOVE R13 R8
+ 0x5C381200, // 003C MOVE R14 R9
+ 0x7C280800, // 003D CALL R10 4
+ 0x70020004, // 003E JMP #0044
+ 0x8C280B09, // 003F GETMET R10 R5 K9
+ 0x5C300C00, // 0040 MOVE R12 R6
+ 0x5C341000, // 0041 MOVE R13 R8
+ 0x5C381200, // 0042 MOVE R14 R9
+ 0x7C280800, // 0043 CALL R10 4
+ 0x7001FFC9, // 0044 JMP #000F
+ 0x581C000F, // 0045 LDCONST R7 K15
+ 0xAC1C0200, // 0046 CATCH R7 1 0
+ 0xB0080000, // 0047 RAISE 2 R0 R0
+ 0x8C1C0D10, // 0048 GETMET R7 R6 K16
+ 0x7C1C0200, // 0049 CALL R7 1
+ 0x80040C00, // 004A RET 1 R6
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: is_PASE
+********************************************************************/
+be_local_closure(Matter_Session_is_PASE, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(mode),
+ /* K1 */ be_nested_str_weak(_PASE),
+ }),
+ be_str_weak(is_PASE),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x88080101, // 0001 GETMBR R2 R0 K1
+ 0x1C040202, // 0002 EQ R1 R1 R2
+ 0x80040200, // 0003 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_admin_subject
+********************************************************************/
+be_local_closure(Matter_Session_get_admin_subject, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(_fabric),
+ /* K1 */ be_nested_str_weak(admin_subject),
+ }),
+ be_str_weak(get_admin_subject),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x88040301, // 0001 GETMBR R1 R1 K1
+ 0x80040200, // 0002 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: save
********************************************************************/
@@ -20,8 +676,8 @@ be_local_closure(Matter_Session_save, /* name */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(__store),
- /* K1 */ be_nested_str_weak(save),
+ /* K0 */ be_nested_str_weak(_store),
+ /* K1 */ be_nested_str_weak(save_fabrics),
}),
be_str_weak(save),
&be_const_str_solidified,
@@ -37,11 +693,598 @@ be_local_closure(Matter_Session_save, /* name */
/********************************************************************
-** Solidified function: set_expire_in_seconds
+** Solidified function: get_ipk_epoch_key
********************************************************************/
-be_local_closure(Matter_Session_set_expire_in_seconds, /* name */
+be_local_closure(Matter_Session_get_ipk_epoch_key, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(_fabric),
+ /* K1 */ be_nested_str_weak(ipk_epoch_key),
+ }),
+ be_str_weak(get_ipk_epoch_key),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x88040301, // 0001 GETMBR R1 R1 K1
+ 0x80040200, // 0002 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: is_CASE
+********************************************************************/
+be_local_closure(Matter_Session_is_CASE, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(mode),
+ /* K1 */ be_nested_str_weak(_CASE),
+ }),
+ be_str_weak(is_CASE),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x88080101, // 0001 GETMBR R2 R0 K1
+ 0x1C040202, // 0002 EQ R1 R1 R2
+ 0x80040200, // 0003 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: fabric_candidate
+********************************************************************/
+be_local_closure(Matter_Session_fabric_candidate, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(_fabric),
+ /* K1 */ be_nested_str_weak(set_expire_in_seconds),
+ /* K2 */ be_nested_str_weak(assign_fabric_index),
+ /* K3 */ be_nested_str_weak(_store),
+ /* K4 */ be_nested_str_weak(add_fabric),
+ }),
+ be_str_weak(fabric_candidate),
+ &be_const_str_solidified,
+ ( &(const binstruction[11]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x540E0077, // 0002 LDINT R3 120
+ 0x7C040400, // 0003 CALL R1 2
+ 0x8C040102, // 0004 GETMET R1 R0 K2
+ 0x7C040200, // 0005 CALL R1 1
+ 0x88040103, // 0006 GETMBR R1 R0 K3
+ 0x8C040304, // 0007 GETMET R1 R1 K4
+ 0x880C0100, // 0008 GETMBR R3 R0 K0
+ 0x7C040400, // 0009 CALL R1 2
+ 0x80000000, // 000A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_ipk_group_key
+********************************************************************/
+be_local_closure(Matter_Session_get_ipk_group_key, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_nested_str_weak(get_ipk_epoch_key),
+ /* K1 */ be_nested_str_weak(get_fabric_compressed),
+ /* K2 */ be_nested_str_weak(crypto),
+ /* K3 */ be_nested_str_weak(HKDF_SHA256),
+ /* K4 */ be_nested_str_weak(fromstring),
+ /* K5 */ be_nested_str_weak(_GROUP_KEY),
+ /* K6 */ be_nested_str_weak(derive),
+ }),
+ be_str_weak(get_ipk_group_key),
+ &be_const_str_solidified,
+ ( &(const binstruction[29]) { /* code */
+ 0x8C040100, // 0000 GETMET R1 R0 K0
+ 0x7C040200, // 0001 CALL R1 1
+ 0x4C080000, // 0002 LDNIL R2
+ 0x1C040202, // 0003 EQ R1 R1 R2
+ 0x74060004, // 0004 JMPT R1 #000A
+ 0x8C040101, // 0005 GETMET R1 R0 K1
+ 0x7C040200, // 0006 CALL R1 1
+ 0x4C080000, // 0007 LDNIL R2
+ 0x1C040202, // 0008 EQ R1 R1 R2
+ 0x78060001, // 0009 JMPF R1 #000C
+ 0x4C040000, // 000A LDNIL R1
+ 0x80040200, // 000B RET 1 R1
+ 0xA4060400, // 000C IMPORT R1 K2
+ 0x8C080303, // 000D GETMET R2 R1 K3
+ 0x7C080200, // 000E CALL R2 1
+ 0x600C0015, // 000F GETGBL R3 G21
+ 0x7C0C0000, // 0010 CALL R3 0
+ 0x8C0C0704, // 0011 GETMET R3 R3 K4
+ 0x88140105, // 0012 GETMBR R5 R0 K5
+ 0x7C0C0400, // 0013 CALL R3 2
+ 0x8C100506, // 0014 GETMET R4 R2 K6
+ 0x8C180100, // 0015 GETMET R6 R0 K0
+ 0x7C180200, // 0016 CALL R6 1
+ 0x8C1C0101, // 0017 GETMET R7 R0 K1
+ 0x7C1C0200, // 0018 CALL R7 1
+ 0x5C200600, // 0019 MOVE R8 R3
+ 0x5426000F, // 001A LDINT R9 16
+ 0x7C100A00, // 001B CALL R4 5
+ 0x80040800, // 001C RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_noc
+********************************************************************/
+be_local_closure(Matter_Session_get_noc, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(_fabric),
+ /* K1 */ be_nested_str_weak(noc),
+ }),
+ be_str_weak(get_noc),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x88040301, // 0001 GETMBR R1 R1 K1
+ 0x80040200, // 0002 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: fabric_completed
+********************************************************************/
+be_local_closure(Matter_Session_fabric_completed, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(_fabric),
+ /* K1 */ be_nested_str_weak(set_no_expiration),
+ /* K2 */ be_nested_str_weak(set_persist),
+ /* K3 */ be_nested_str_weak(assign_fabric_index),
+ /* K4 */ be_nested_str_weak(_store),
+ /* K5 */ be_nested_str_weak(add_fabric),
+ }),
+ be_str_weak(fabric_completed),
+ &be_const_str_solidified,
+ ( &(const binstruction[14]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x88040100, // 0003 GETMBR R1 R0 K0
+ 0x8C040302, // 0004 GETMET R1 R1 K2
+ 0x500C0200, // 0005 LDBOOL R3 1 0
+ 0x7C040400, // 0006 CALL R1 2
+ 0x8C040103, // 0007 GETMET R1 R0 K3
+ 0x7C040200, // 0008 CALL R1 1
+ 0x88040104, // 0009 GETMBR R1 R0 K4
+ 0x8C040305, // 000A GETMET R1 R1 K5
+ 0x880C0100, // 000B GETMBR R3 R0 K0
+ 0x7C040400, // 000C CALL R1 2
+ 0x80000000, // 000D RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_keys
+********************************************************************/
+be_local_closure(Matter_Session_set_keys, /* name */
be_nested_proto(
6, /* nstack */
+ 5, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(i2rkey),
+ /* K1 */ be_nested_str_weak(_i2r_privacy),
+ /* K2 */ be_nested_str_weak(r2ikey),
+ /* K3 */ be_nested_str_weak(attestation_challenge),
+ /* K4 */ be_nested_str_weak(created),
+ }),
+ be_str_weak(set_keys),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x4C140000, // 0001 LDNIL R5
+ 0x90020205, // 0002 SETMBR R0 K1 R5
+ 0x90020402, // 0003 SETMBR R0 K2 R2
+ 0x90020603, // 0004 SETMBR R0 K3 R3
+ 0x90020804, // 0005 SETMBR R0 K4 R4
+ 0x80000000, // 0006 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: counter_snd_next
+********************************************************************/
+be_local_closure(Matter_Session_counter_snd_next, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[15]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(_counter_snd_impl),
+ /* K2 */ be_nested_str_weak(next),
+ /* K3 */ be_nested_str_weak(tasmota),
+ /* K4 */ be_nested_str_weak(log),
+ /* K5 */ be_nested_str_weak(format),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20_X2E_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20Counter_snd_X3D_X25i),
+ /* K7 */ be_const_int(3),
+ /* K8 */ be_nested_str_weak(matter),
+ /* K9 */ be_nested_str_weak(Counter),
+ /* K10 */ be_nested_str_weak(is_greater),
+ /* K11 */ be_nested_str_weak(counter_snd),
+ /* K12 */ be_nested_str_weak(_COUNTER_SND_INCR),
+ /* K13 */ be_nested_str_weak(does_persist),
+ /* K14 */ be_nested_str_weak(save),
+ }),
+ be_str_weak(counter_snd_next),
+ &be_const_str_solidified,
+ ( &(const binstruction[28]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0x88080101, // 0001 GETMBR R2 R0 K1
+ 0x8C080502, // 0002 GETMET R2 R2 K2
+ 0x7C080200, // 0003 CALL R2 1
+ 0xB80E0600, // 0004 GETNGBL R3 K3
+ 0x8C0C0704, // 0005 GETMET R3 R3 K4
+ 0x8C140305, // 0006 GETMET R5 R1 K5
+ 0x581C0006, // 0007 LDCONST R7 K6
+ 0x5C200400, // 0008 MOVE R8 R2
+ 0x7C140600, // 0009 CALL R5 3
+ 0x58180007, // 000A LDCONST R6 K7
+ 0x7C0C0600, // 000B CALL R3 3
+ 0xB80E1000, // 000C GETNGBL R3 K8
+ 0x880C0709, // 000D GETMBR R3 R3 K9
+ 0x8C0C070A, // 000E GETMET R3 R3 K10
+ 0x5C140400, // 000F MOVE R5 R2
+ 0x8818010B, // 0010 GETMBR R6 R0 K11
+ 0x7C0C0600, // 0011 CALL R3 3
+ 0x780E0007, // 0012 JMPF R3 #001B
+ 0x880C010C, // 0013 GETMBR R3 R0 K12
+ 0x000C0403, // 0014 ADD R3 R2 R3
+ 0x90021603, // 0015 SETMBR R0 K11 R3
+ 0x8C0C010D, // 0016 GETMET R3 R0 K13
+ 0x7C0C0200, // 0017 CALL R3 1
+ 0x780E0001, // 0018 JMPF R3 #001B
+ 0x8C0C010E, // 0019 GETMET R3 R0 K14
+ 0x7C0C0200, // 001A CALL R3 1
+ 0x80040400, // 001B RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_fabric_id
+********************************************************************/
+be_local_closure(Matter_Session_get_fabric_id, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(_fabric),
+ /* K1 */ be_nested_str_weak(fabric_id),
+ }),
+ be_str_weak(get_fabric_id),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x88040301, // 0001 GETMBR R1 R1 K1
+ 0x80040200, // 0002 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_ca
+********************************************************************/
+be_local_closure(Matter_Session_set_ca, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(_fabric),
+ /* K1 */ be_nested_str_weak(root_ca_certificate),
+ }),
+ be_str_weak(set_ca),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x900A0201, // 0001 SETMBR R2 K1 R1
+ 0x80000000, // 0002 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_fabric_label
+********************************************************************/
+be_local_closure(Matter_Session_set_fabric_label, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(_fabric),
+ /* K2 */ be_nested_str_weak(fabric_label),
+ }),
+ be_str_weak(set_fabric_label),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 8]) { /* code */
+ 0x60080004, // 0000 GETGBL R2 G4
+ 0x5C0C0200, // 0001 MOVE R3 R1
+ 0x7C080200, // 0002 CALL R2 1
+ 0x1C080500, // 0003 EQ R2 R2 K0
+ 0x780A0001, // 0004 JMPF R2 #0007
+ 0x88080101, // 0005 GETMBR R2 R0 K1
+ 0x900A0401, // 0006 SETMBR R2 K2 R1
+ 0x80000000, // 0007 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_ca
+********************************************************************/
+be_local_closure(Matter_Session_get_ca, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(_fabric),
+ /* K1 */ be_nested_str_weak(root_ca_certificate),
+ }),
+ be_str_weak(get_ca),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x88040301, // 0001 GETMBR R1 R1 K1
+ 0x80040200, // 0002 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_mode
+********************************************************************/
+be_local_closure(Matter_Session_set_mode, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(mode),
+ }),
+ be_str_weak(set_mode),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x80000000, // 0001 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_ac
+********************************************************************/
+be_local_closure(Matter_Session_get_ac, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(attestation_challenge),
+ }),
+ be_str_weak(get_ac),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x80040200, // 0001 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: hydrate_post
+********************************************************************/
+be_local_closure(Matter_Session_hydrate_post, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(_counter_snd_impl),
+ /* K1 */ be_nested_str_weak(reset),
+ /* K2 */ be_nested_str_weak(counter_snd),
+ /* K3 */ be_nested_str_weak(_counter_rcv_impl),
+ /* K4 */ be_nested_str_weak(counter_rcv),
+ /* K5 */ be_nested_str_weak(val),
+ }),
+ be_str_weak(hydrate_post),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x880C0102, // 0002 GETMBR R3 R0 K2
+ 0x7C040400, // 0003 CALL R1 2
+ 0x88040103, // 0004 GETMBR R1 R0 K3
+ 0x8C040301, // 0005 GETMET R1 R1 K1
+ 0x880C0104, // 0006 GETMBR R3 R0 K4
+ 0x7C040400, // 0007 CALL R1 2
+ 0x88040100, // 0008 GETMBR R1 R0 K0
+ 0x8C040305, // 0009 GETMET R1 R1 K5
+ 0x7C040200, // 000A CALL R1 1
+ 0x90020401, // 000B SETMBR R0 K2 R1
+ 0x88040103, // 000C GETMBR R1 R0 K3
+ 0x8C040305, // 000D GETMET R1 R1 K5
+ 0x7C040200, // 000E CALL R1 1
+ 0x90020801, // 000F SETMBR R0 K4 R1
+ 0x80000000, // 0010 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_icac
+********************************************************************/
+be_local_closure(Matter_Session_get_icac, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(_fabric),
+ /* K1 */ be_nested_str_weak(icac),
+ }),
+ be_str_weak(get_icac),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x88040301, // 0001 GETMBR R1 R1 K1
+ 0x80040200, // 0002 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_admin_subject_vendor
+********************************************************************/
+be_local_closure(Matter_Session_set_admin_subject_vendor, /* name */
+ be_nested_proto(
+ 4, /* nstack */
3, /* argc */
2, /* varg */
0, /* has upvals */
@@ -49,30 +1292,153 @@ be_local_closure(Matter_Session_set_expire_in_seconds, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(tasmota),
- /* K1 */ be_nested_str_weak(rtc),
- /* K2 */ be_nested_str_weak(utc),
- /* K3 */ be_nested_str_weak(set_expire_time),
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(_fabric),
+ /* K1 */ be_nested_str_weak(admin_subject),
+ /* K2 */ be_nested_str_weak(admin_vendor),
}),
- be_str_weak(set_expire_in_seconds),
+ be_str_weak(set_admin_subject_vendor),
&be_const_str_solidified,
- ( &(const binstruction[15]) { /* code */
- 0x4C0C0000, // 0000 LDNIL R3
- 0x1C0C0203, // 0001 EQ R3 R1 R3
- 0x780E0000, // 0002 JMPF R3 #0004
- 0x80000600, // 0003 RET 0
- 0x4C0C0000, // 0004 LDNIL R3
- 0x1C0C0403, // 0005 EQ R3 R2 R3
- 0x780E0003, // 0006 JMPF R3 #000B
- 0xB80E0000, // 0007 GETNGBL R3 K0
- 0x8C0C0701, // 0008 GETMET R3 R3 K1
- 0x7C0C0200, // 0009 CALL R3 1
- 0x94080702, // 000A GETIDX R2 R3 K2
- 0x8C0C0103, // 000B GETMET R3 R0 K3
- 0x00140401, // 000C ADD R5 R2 R1
- 0x7C0C0400, // 000D CALL R3 2
- 0x80000000, // 000E RET 0
+ ( &(const binstruction[ 5]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x900E0201, // 0001 SETMBR R3 K1 R1
+ 0x880C0100, // 0002 GETMBR R3 R0 K0
+ 0x900E0402, // 0003 SETMBR R3 K2 R2
+ 0x80000000, // 0004 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_ipk_epoch_key
+********************************************************************/
+be_local_closure(Matter_Session_set_ipk_epoch_key, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(_fabric),
+ /* K1 */ be_nested_str_weak(ipk_epoch_key),
+ }),
+ be_str_weak(set_ipk_epoch_key),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x900A0201, // 0001 SETMBR R2 K1 R1
+ 0x80000000, // 0002 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: before_remove
+********************************************************************/
+be_local_closure(Matter_Session_before_remove, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(log),
+ /* K3 */ be_nested_str_weak(format),
+ /* K4 */ be_nested_str_weak(MTR_X3A_X20_X2DSession_X20_X20_X20_X28_X256i_X29_X20_X28removed_X29),
+ /* K5 */ be_nested_str_weak(local_session_id),
+ /* K6 */ be_const_int(3),
+ }),
+ be_str_weak(before_remove),
+ &be_const_str_solidified,
+ ( &(const binstruction[10]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0xB80A0200, // 0001 GETNGBL R2 K1
+ 0x8C080502, // 0002 GETMET R2 R2 K2
+ 0x8C100303, // 0003 GETMET R4 R1 K3
+ 0x58180004, // 0004 LDCONST R6 K4
+ 0x881C0105, // 0005 GETMBR R7 R0 K5
+ 0x7C100600, // 0006 CALL R4 3
+ 0x58140006, // 0007 LDCONST R5 K6
+ 0x7C080600, // 0008 CALL R2 3
+ 0x80000000, // 0009 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: update
+********************************************************************/
+be_local_closure(Matter_Session_update, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(last_used),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(rtc),
+ /* K3 */ be_nested_str_weak(utc),
+ }),
+ be_str_weak(update),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0xB8060200, // 0000 GETNGBL R1 K1
+ 0x8C040302, // 0001 GETMET R1 R1 K2
+ 0x7C040200, // 0002 CALL R1 1
+ 0x94040303, // 0003 GETIDX R1 R1 K3
+ 0x90020001, // 0004 SETMBR R0 K0 R1
+ 0x80000000, // 0005 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_mode_CASE
+********************************************************************/
+be_local_closure(Matter_Session_set_mode_CASE, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(set_mode),
+ /* K1 */ be_nested_str_weak(_CASE),
+ }),
+ be_str_weak(set_mode_CASE),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x8C040100, // 0000 GETMET R1 R0 K0
+ 0x880C0101, // 0001 GETMBR R3 R0 K1
+ 0x7C040400, // 0002 CALL R1 2
+ 0x80000000, // 0003 RET 0
})
)
);
@@ -133,55 +1499,11 @@ be_local_closure(Matter_Session_get_i2r_privacy, /* name */
/********************************************************************
-** Solidified function: has_expired
+** Solidified function: get_ca_pub
********************************************************************/
-be_local_closure(Matter_Session_has_expired, /* name */
+be_local_closure(Matter_Session_get_ca_pub, /* name */
be_nested_proto(
- 4, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(tasmota),
- /* K1 */ be_nested_str_weak(rtc),
- /* K2 */ be_nested_str_weak(utc),
- /* K3 */ be_nested_str_weak(expiration),
- }),
- be_str_weak(has_expired),
- &be_const_str_solidified,
- ( &(const binstruction[16]) { /* code */
- 0x4C080000, // 0000 LDNIL R2
- 0x1C080202, // 0001 EQ R2 R1 R2
- 0x780A0003, // 0002 JMPF R2 #0007
- 0xB80A0000, // 0003 GETNGBL R2 K0
- 0x8C080501, // 0004 GETMET R2 R2 K1
- 0x7C080200, // 0005 CALL R2 1
- 0x94040502, // 0006 GETIDX R1 R2 K2
- 0x88080103, // 0007 GETMBR R2 R0 K3
- 0x4C0C0000, // 0008 LDNIL R3
- 0x20080403, // 0009 NE R2 R2 R3
- 0x780A0002, // 000A JMPF R2 #000E
- 0x88080103, // 000B GETMBR R2 R0 K3
- 0x28080202, // 000C GE R2 R1 R2
- 0x80040400, // 000D RET 1 R2
- 0x50080000, // 000E LDBOOL R2 0 0
- 0x80040400, // 000F RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_icac
-********************************************************************/
-be_local_closure(Matter_Session_get_icac, /* name */
- be_nested_proto(
- 2, /* nstack */
+ 3, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
@@ -189,68 +1511,17 @@ be_local_closure(Matter_Session_get_icac, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(icac),
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(_fabric),
+ /* K1 */ be_nested_str_weak(get_ca_pub),
}),
- be_str_weak(get_icac),
+ be_str_weak(get_ca_pub),
&be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
+ ( &(const binstruction[ 4]) { /* code */
0x88040100, // 0000 GETMBR R1 R0 K0
- 0x80040200, // 0001 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_deviceid
-********************************************************************/
-be_local_closure(Matter_Session_get_deviceid, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(deviceid),
- }),
- be_str_weak(get_deviceid),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x80040200, // 0001 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_noc
-********************************************************************/
-be_local_closure(Matter_Session_get_noc, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(noc),
- }),
- be_str_weak(get_noc),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x80040200, // 0001 RET 1 R1
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x80040200, // 0003 RET 1 R1
})
)
);
@@ -262,7 +1533,7 @@ be_local_closure(Matter_Session_get_noc, /* name */
********************************************************************/
be_local_closure(Matter_Session_close, /* name */
be_nested_proto(
- 9, /* nstack */
+ 8, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
@@ -270,480 +1541,93 @@ be_local_closure(Matter_Session_close, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[24]) { /* constants */
- /* K0 */ be_nested_str_weak(_persist),
- /* K1 */ be_nested_str_weak(local_session_id),
- /* K2 */ be_nested_str_weak(_future_local_session_id),
- /* K3 */ be_nested_str_weak(initiator_session_id),
- /* K4 */ be_nested_str_weak(_future_initiator_session_id),
- /* K5 */ be_nested_str_weak(source_node_id),
- /* K6 */ be_nested_str_weak(counter_rcv),
- /* K7 */ be_nested_str_weak(reset),
- /* K8 */ be_nested_str_weak(counter_snd),
- /* K9 */ be_nested_str_weak(i2rkey),
- /* K10 */ be_nested_str_weak(_i2r_privacy),
- /* K11 */ be_nested_str_weak(r2ikey),
- /* K12 */ be_nested_str_weak(attestation_challenge),
- /* K13 */ be_nested_str_weak(fabric_label),
- /* K14 */ be_nested_str_weak(),
+ ( &(const bvalue[23]) { /* constants */
+ /* K0 */ be_nested_str_weak(local_session_id),
+ /* K1 */ be_nested_str_weak(__future_local_session_id),
+ /* K2 */ be_nested_str_weak(initiator_session_id),
+ /* K3 */ be_nested_str_weak(__future_initiator_session_id),
+ /* K4 */ be_nested_str_weak(_counter_rcv_impl),
+ /* K5 */ be_nested_str_weak(reset),
+ /* K6 */ be_nested_str_weak(_counter_snd_impl),
+ /* K7 */ be_nested_str_weak(counter_rcv),
+ /* K8 */ be_const_int(0),
+ /* K9 */ be_nested_str_weak(counter_snd),
+ /* K10 */ be_nested_str_weak(next),
+ /* K11 */ be_nested_str_weak(i2rkey),
+ /* K12 */ be_nested_str_weak(_i2r_privacy),
+ /* K13 */ be_nested_str_weak(r2ikey),
+ /* K14 */ be_nested_str_weak(attestation_challenge),
/* K15 */ be_nested_str_weak(introspect),
/* K16 */ be_nested_str_weak(members),
/* K17 */ be_nested_str_weak(get),
/* K18 */ be_nested_str_weak(function),
/* K19 */ be_nested_str_weak(instance),
- /* K20 */ be_const_int(0),
- /* K21 */ be_nested_str_weak(_),
- /* K22 */ be_const_int(1),
- /* K23 */ be_nested_str_weak(stop_iteration),
+ /* K20 */ be_nested_str_weak(_),
+ /* K21 */ be_const_int(1),
+ /* K22 */ be_nested_str_weak(stop_iteration),
}),
be_str_weak(close),
&be_const_str_solidified,
( &(const binstruction[59]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x88080102, // 0001 GETMBR R2 R0 K2
- 0x90020202, // 0002 SETMBR R0 K1 R2
- 0x88080104, // 0003 GETMBR R2 R0 K4
- 0x90020602, // 0004 SETMBR R0 K3 R2
- 0x4C080000, // 0005 LDNIL R2
- 0x90020A02, // 0006 SETMBR R0 K5 R2
- 0x88080106, // 0007 GETMBR R2 R0 K6
- 0x8C080507, // 0008 GETMET R2 R2 K7
- 0x7C080200, // 0009 CALL R2 1
- 0x88080108, // 000A GETMBR R2 R0 K8
- 0x8C080507, // 000B GETMET R2 R2 K7
- 0x7C080200, // 000C CALL R2 1
- 0x4C080000, // 000D LDNIL R2
- 0x90021202, // 000E SETMBR R0 K9 R2
- 0x4C080000, // 000F LDNIL R2
- 0x90021402, // 0010 SETMBR R0 K10 R2
- 0x4C080000, // 0011 LDNIL R2
- 0x90021602, // 0012 SETMBR R0 K11 R2
- 0x4C080000, // 0013 LDNIL R2
- 0x90021802, // 0014 SETMBR R0 K12 R2
- 0x90021B0E, // 0015 SETMBR R0 K13 K14
- 0xA40A1E00, // 0016 IMPORT R2 K15
- 0x600C0010, // 0017 GETGBL R3 G16
- 0x8C100510, // 0018 GETMET R4 R2 K16
- 0x5C180000, // 0019 MOVE R6 R0
- 0x7C100400, // 001A CALL R4 2
- 0x7C0C0200, // 001B CALL R3 1
- 0xA8020018, // 001C EXBLK 0 #0036
- 0x5C100600, // 001D MOVE R4 R3
- 0x7C100000, // 001E CALL R4 0
- 0x8C140511, // 001F GETMET R5 R2 K17
- 0x5C1C0000, // 0020 MOVE R7 R0
- 0x5C200800, // 0021 MOVE R8 R4
- 0x7C140600, // 0022 CALL R5 3
- 0x60180004, // 0023 GETGBL R6 G4
- 0x5C1C0A00, // 0024 MOVE R7 R5
- 0x7C180200, // 0025 CALL R6 1
- 0x20180D12, // 0026 NE R6 R6 K18
- 0x781A000C, // 0027 JMPF R6 #0035
- 0x60180004, // 0028 GETGBL R6 G4
- 0x5C1C0A00, // 0029 MOVE R7 R5
- 0x7C180200, // 002A CALL R6 1
- 0x20180D13, // 002B NE R6 R6 K19
- 0x781A0007, // 002C JMPF R6 #0035
- 0x94180914, // 002D GETIDX R6 R4 K20
- 0x1C180D15, // 002E EQ R6 R6 K21
- 0x781A0004, // 002F JMPF R6 #0035
- 0x94180916, // 0030 GETIDX R6 R4 K22
- 0x20180D15, // 0031 NE R6 R6 K21
- 0x781A0001, // 0032 JMPF R6 #0035
- 0x4C180000, // 0033 LDNIL R6
- 0x90000806, // 0034 SETMBR R0 R4 R6
- 0x7001FFE6, // 0035 JMP #001D
- 0x580C0017, // 0036 LDCONST R3 K23
- 0xAC0C0200, // 0037 CATCH R3 1 0
- 0xB0080000, // 0038 RAISE 2 R0 R0
- 0x90020001, // 0039 SETMBR R0 K0 R1
- 0x80000000, // 003A RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: fromjson
-********************************************************************/
-be_local_closure(Matter_Session_fromjson, /* name */
- be_nested_proto(
- 16, /* nstack */
- 2, /* argc */
- 4, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[19]) { /* constants */
- /* K0 */ be_const_class(be_class_Matter_Session),
- /* K1 */ be_nested_str_weak(string),
- /* K2 */ be_nested_str_weak(introspect),
- /* K3 */ be_nested_str_weak(matter),
- /* K4 */ be_nested_str_weak(Session),
- /* K5 */ be_nested_str_weak(keys),
- /* K6 */ be_nested_str_weak(counter_rcv),
- /* K7 */ be_nested_str_weak(reset),
- /* K8 */ be_nested_str_weak(counter_snd),
- /* K9 */ be_nested_str_weak(find),
- /* K10 */ be_nested_str_weak(0x),
- /* K11 */ be_const_int(0),
- /* K12 */ be_nested_str_weak(set),
- /* K13 */ be_nested_str_weak(fromhex),
- /* K14 */ be_const_int(2),
- /* K15 */ be_const_int(2147483647),
- /* K16 */ be_nested_str_weak(_X24_X24),
- /* K17 */ be_nested_str_weak(fromb64),
- /* K18 */ be_nested_str_weak(stop_iteration),
- }),
- be_str_weak(fromjson),
- &be_const_str_solidified,
- ( &(const binstruction[88]) { /* code */
- 0x58080000, // 0000 LDCONST R2 K0
- 0xA40E0200, // 0001 IMPORT R3 K1
- 0xA4120400, // 0002 IMPORT R4 K2
- 0xB8160600, // 0003 GETNGBL R5 K3
- 0x8C140B04, // 0004 GETMET R5 R5 K4
- 0x5C1C0000, // 0005 MOVE R7 R0
- 0x7C140400, // 0006 CALL R5 2
- 0x60180010, // 0007 GETGBL R6 G16
- 0x8C1C0305, // 0008 GETMET R7 R1 K5
- 0x7C1C0200, // 0009 CALL R7 1
- 0x7C180200, // 000A CALL R6 1
- 0xA8020047, // 000B EXBLK 0 #0054
- 0x5C1C0C00, // 000C MOVE R7 R6
- 0x7C1C0000, // 000D CALL R7 0
- 0x94200207, // 000E GETIDX R8 R1 R7
- 0x1C240F06, // 000F EQ R9 R7 K6
- 0x78260006, // 0010 JMPF R9 #0018
- 0x88240B06, // 0011 GETMBR R9 R5 K6
- 0x8C241307, // 0012 GETMET R9 R9 K7
- 0x602C0009, // 0013 GETGBL R11 G9
- 0x5C301000, // 0014 MOVE R12 R8
- 0x7C2C0200, // 0015 CALL R11 1
- 0x7C240400, // 0016 CALL R9 2
- 0x7002003A, // 0017 JMP #0053
- 0x1C240F08, // 0018 EQ R9 R7 K8
- 0x78260006, // 0019 JMPF R9 #0021
- 0x88240B08, // 001A GETMBR R9 R5 K8
- 0x8C241307, // 001B GETMET R9 R9 K7
- 0x602C0009, // 001C GETGBL R11 G9
- 0x5C301000, // 001D MOVE R12 R8
- 0x7C2C0200, // 001E CALL R11 1
- 0x7C240400, // 001F CALL R9 2
- 0x70020031, // 0020 JMP #0053
- 0x60240004, // 0021 GETGBL R9 G4
- 0x5C281000, // 0022 MOVE R10 R8
- 0x7C240200, // 0023 CALL R9 1
- 0x1C241301, // 0024 EQ R9 R9 K1
- 0x78260027, // 0025 JMPF R9 #004E
- 0x8C240709, // 0026 GETMET R9 R3 K9
- 0x5C2C1000, // 0027 MOVE R11 R8
- 0x5830000A, // 0028 LDCONST R12 K10
- 0x7C240600, // 0029 CALL R9 3
- 0x1C24130B, // 002A EQ R9 R9 K11
- 0x7826000A, // 002B JMPF R9 #0037
- 0x8C24090C, // 002C GETMET R9 R4 K12
- 0x5C2C0A00, // 002D MOVE R11 R5
- 0x5C300E00, // 002E MOVE R12 R7
- 0x60340015, // 002F GETGBL R13 G21
- 0x7C340000, // 0030 CALL R13 0
- 0x8C341B0D, // 0031 GETMET R13 R13 K13
- 0x403E1D0F, // 0032 CONNECT R15 K14 K15
- 0x943C100F, // 0033 GETIDX R15 R8 R15
- 0x7C340400, // 0034 CALL R13 2
- 0x7C240800, // 0035 CALL R9 4
- 0x70020015, // 0036 JMP #004D
- 0x8C240709, // 0037 GETMET R9 R3 K9
- 0x5C2C1000, // 0038 MOVE R11 R8
- 0x58300010, // 0039 LDCONST R12 K16
- 0x7C240600, // 003A CALL R9 3
- 0x1C24130B, // 003B EQ R9 R9 K11
- 0x7826000A, // 003C JMPF R9 #0048
- 0x8C24090C, // 003D GETMET R9 R4 K12
- 0x5C2C0A00, // 003E MOVE R11 R5
- 0x5C300E00, // 003F MOVE R12 R7
- 0x60340015, // 0040 GETGBL R13 G21
- 0x7C340000, // 0041 CALL R13 0
- 0x8C341B11, // 0042 GETMET R13 R13 K17
- 0x403E1D0F, // 0043 CONNECT R15 K14 K15
- 0x943C100F, // 0044 GETIDX R15 R8 R15
- 0x7C340400, // 0045 CALL R13 2
- 0x7C240800, // 0046 CALL R9 4
- 0x70020004, // 0047 JMP #004D
- 0x8C24090C, // 0048 GETMET R9 R4 K12
- 0x5C2C0A00, // 0049 MOVE R11 R5
- 0x5C300E00, // 004A MOVE R12 R7
- 0x5C341000, // 004B MOVE R13 R8
- 0x7C240800, // 004C CALL R9 4
- 0x70020004, // 004D JMP #0053
- 0x8C24090C, // 004E GETMET R9 R4 K12
- 0x5C2C0A00, // 004F MOVE R11 R5
- 0x5C300E00, // 0050 MOVE R12 R7
- 0x5C341000, // 0051 MOVE R13 R8
- 0x7C240800, // 0052 CALL R9 4
- 0x7001FFB7, // 0053 JMP #000C
- 0x58180012, // 0054 LDCONST R6 K18
- 0xAC180200, // 0055 CATCH R6 1 0
- 0xB0080000, // 0056 RAISE 2 R0 R0
- 0x80040A00, // 0057 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_ipk_epoch_key
-********************************************************************/
-be_local_closure(Matter_Session_get_ipk_epoch_key, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(ipk_epoch_key),
- }),
- be_str_weak(get_ipk_epoch_key),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x80040200, // 0001 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: tojson
-********************************************************************/
-be_local_closure(Matter_Session_tojson, /* name */
- be_nested_proto(
- 18, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[24]) { /* constants */
- /* K0 */ be_nested_str_weak(json),
- /* K1 */ be_nested_str_weak(string),
- /* K2 */ be_nested_str_weak(introspect),
- /* K3 */ be_nested_str_weak(members),
- /* K4 */ be_nested_str_weak(get),
- /* K5 */ be_nested_str_weak(function),
- /* K6 */ be_const_int(0),
- /* K7 */ be_nested_str_weak(_),
- /* K8 */ be_nested_str_weak(push),
- /* K9 */ be_nested_str_weak(stop_iteration),
- /* K10 */ be_nested_str_weak(matter),
- /* K11 */ be_nested_str_weak(sort),
- /* K12 */ be_nested_str_weak(counter_rcv),
- /* K13 */ be_nested_str_weak(val),
- /* K14 */ be_nested_str_weak(counter_snd),
- /* K15 */ be_nested_str_weak(_X24_X24),
- /* K16 */ be_nested_str_weak(tob64),
- /* K17 */ be_nested_str_weak(format),
- /* K18 */ be_nested_str_weak(_X25s_X3A_X25s),
- /* K19 */ be_nested_str_weak(dump),
- /* K20 */ be_nested_str_weak(_X7B),
- /* K21 */ be_nested_str_weak(concat),
- /* K22 */ be_nested_str_weak(_X2C),
- /* K23 */ be_nested_str_weak(_X7D),
- }),
- be_str_weak(tojson),
- &be_const_str_solidified,
- ( &(const binstruction[98]) { /* code */
- 0xA4060000, // 0000 IMPORT R1 K0
- 0xA40A0200, // 0001 IMPORT R2 K1
- 0xA40E0400, // 0002 IMPORT R3 K2
- 0x60100012, // 0003 GETGBL R4 G18
- 0x7C100000, // 0004 CALL R4 0
- 0x60140010, // 0005 GETGBL R5 G16
- 0x8C180703, // 0006 GETMET R6 R3 K3
- 0x5C200000, // 0007 MOVE R8 R0
- 0x7C180400, // 0008 CALL R6 2
- 0x7C140200, // 0009 CALL R5 1
- 0xA8020011, // 000A EXBLK 0 #001D
- 0x5C180A00, // 000B MOVE R6 R5
- 0x7C180000, // 000C CALL R6 0
- 0x8C1C0704, // 000D GETMET R7 R3 K4
- 0x5C240000, // 000E MOVE R9 R0
- 0x5C280C00, // 000F MOVE R10 R6
- 0x7C1C0600, // 0010 CALL R7 3
- 0x60200004, // 0011 GETGBL R8 G4
- 0x5C240E00, // 0012 MOVE R9 R7
- 0x7C200200, // 0013 CALL R8 1
- 0x20201105, // 0014 NE R8 R8 K5
- 0x78220005, // 0015 JMPF R8 #001C
- 0x94200D06, // 0016 GETIDX R8 R6 K6
- 0x20201107, // 0017 NE R8 R8 K7
- 0x78220002, // 0018 JMPF R8 #001C
- 0x8C200908, // 0019 GETMET R8 R4 K8
- 0x5C280C00, // 001A MOVE R10 R6
- 0x7C200400, // 001B CALL R8 2
- 0x7001FFED, // 001C JMP #000B
- 0x58140009, // 001D LDCONST R5 K9
- 0xAC140200, // 001E CATCH R5 1 0
- 0xB0080000, // 001F RAISE 2 R0 R0
- 0xB8161400, // 0020 GETNGBL R5 K10
- 0x8C140B0B, // 0021 GETMET R5 R5 K11
- 0x5C1C0800, // 0022 MOVE R7 R4
- 0x7C140400, // 0023 CALL R5 2
- 0x5C100A00, // 0024 MOVE R4 R5
- 0x60140012, // 0025 GETGBL R5 G18
- 0x7C140000, // 0026 CALL R5 0
- 0x60180010, // 0027 GETGBL R6 G16
- 0x5C1C0800, // 0028 MOVE R7 R4
- 0x7C180200, // 0029 CALL R6 1
- 0xA802002D, // 002A EXBLK 0 #0059
- 0x5C1C0C00, // 002B MOVE R7 R6
- 0x7C1C0000, // 002C CALL R7 0
- 0x8C200704, // 002D GETMET R8 R3 K4
- 0x5C280000, // 002E MOVE R10 R0
- 0x5C2C0E00, // 002F MOVE R11 R7
- 0x7C200600, // 0030 CALL R8 3
- 0x4C240000, // 0031 LDNIL R9
- 0x1C241009, // 0032 EQ R9 R8 R9
- 0x78260000, // 0033 JMPF R9 #0035
- 0x7001FFF5, // 0034 JMP #002B
- 0x1C240F0C, // 0035 EQ R9 R7 K12
- 0x78260003, // 0036 JMPF R9 #003B
- 0x8C24110D, // 0037 GETMET R9 R8 K13
- 0x7C240200, // 0038 CALL R9 1
- 0x5C201200, // 0039 MOVE R8 R9
- 0x70020006, // 003A JMP #0042
- 0x1C240F0E, // 003B EQ R9 R7 K14
- 0x78260004, // 003C JMPF R9 #0042
- 0x8C24110D, // 003D GETMET R9 R8 K13
- 0x7C240200, // 003E CALL R9 1
- 0x542A00FF, // 003F LDINT R10 256
- 0x0024120A, // 0040 ADD R9 R9 R10
- 0x5C201200, // 0041 MOVE R8 R9
- 0x6024000F, // 0042 GETGBL R9 G15
- 0x5C281000, // 0043 MOVE R10 R8
- 0x602C0015, // 0044 GETGBL R11 G21
- 0x7C240400, // 0045 CALL R9 2
- 0x78260003, // 0046 JMPF R9 #004B
- 0x8C241110, // 0047 GETMET R9 R8 K16
- 0x7C240200, // 0048 CALL R9 1
- 0x00261E09, // 0049 ADD R9 K15 R9
- 0x5C201200, // 004A MOVE R8 R9
- 0x8C240B08, // 004B GETMET R9 R5 K8
- 0x8C2C0511, // 004C GETMET R11 R2 K17
- 0x58340012, // 004D LDCONST R13 K18
- 0x8C380313, // 004E GETMET R14 R1 K19
- 0x60400008, // 004F GETGBL R16 G8
- 0x5C440E00, // 0050 MOVE R17 R7
- 0x7C400200, // 0051 CALL R16 1
- 0x7C380400, // 0052 CALL R14 2
- 0x8C3C0313, // 0053 GETMET R15 R1 K19
- 0x5C441000, // 0054 MOVE R17 R8
- 0x7C3C0400, // 0055 CALL R15 2
- 0x7C2C0800, // 0056 CALL R11 4
- 0x7C240400, // 0057 CALL R9 2
- 0x7001FFD1, // 0058 JMP #002B
- 0x58180009, // 0059 LDCONST R6 K9
- 0xAC180200, // 005A CATCH R6 1 0
- 0xB0080000, // 005B RAISE 2 R0 R0
- 0x8C180B15, // 005C GETMET R6 R5 K21
- 0x58200016, // 005D LDCONST R8 K22
- 0x7C180400, // 005E CALL R6 2
- 0x001A2806, // 005F ADD R6 K20 R6
- 0x00180D17, // 0060 ADD R6 R6 K23
- 0x80040C00, // 0061 RET 1 R6
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_ac
-********************************************************************/
-be_local_closure(Matter_Session_get_ac, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(attestation_challenge),
- }),
- be_str_weak(get_ac),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x80040200, // 0001 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: set_no_expiration
-********************************************************************/
-be_local_closure(Matter_Session_set_no_expiration, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(expiration),
- }),
- be_str_weak(set_no_expiration),
- &be_const_str_solidified,
- ( &(const binstruction[ 3]) { /* code */
- 0x4C040000, // 0000 LDNIL R1
+ 0x88040101, // 0000 GETMBR R1 R0 K1
0x90020001, // 0001 SETMBR R0 K0 R1
- 0x80000000, // 0002 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_r2i
-********************************************************************/
-be_local_closure(Matter_Session_get_r2i, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(r2ikey),
- }),
- be_str_weak(get_r2i),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x80040200, // 0001 RET 1 R1
+ 0x88040103, // 0002 GETMBR R1 R0 K3
+ 0x90020401, // 0003 SETMBR R0 K2 R1
+ 0x88040104, // 0004 GETMBR R1 R0 K4
+ 0x8C040305, // 0005 GETMET R1 R1 K5
+ 0x7C040200, // 0006 CALL R1 1
+ 0x88040106, // 0007 GETMBR R1 R0 K6
+ 0x8C040305, // 0008 GETMET R1 R1 K5
+ 0x7C040200, // 0009 CALL R1 1
+ 0x90020F08, // 000A SETMBR R0 K7 K8
+ 0x88040106, // 000B GETMBR R1 R0 K6
+ 0x8C04030A, // 000C GETMET R1 R1 K10
+ 0x7C040200, // 000D CALL R1 1
+ 0x90021201, // 000E SETMBR R0 K9 R1
+ 0x4C040000, // 000F LDNIL R1
+ 0x90021601, // 0010 SETMBR R0 K11 R1
+ 0x4C040000, // 0011 LDNIL R1
+ 0x90021801, // 0012 SETMBR R0 K12 R1
+ 0x4C040000, // 0013 LDNIL R1
+ 0x90021A01, // 0014 SETMBR R0 K13 R1
+ 0x4C040000, // 0015 LDNIL R1
+ 0x90021C01, // 0016 SETMBR R0 K14 R1
+ 0xA4061E00, // 0017 IMPORT R1 K15
+ 0x60080010, // 0018 GETGBL R2 G16
+ 0x8C0C0310, // 0019 GETMET R3 R1 K16
+ 0x5C140000, // 001A MOVE R5 R0
+ 0x7C0C0400, // 001B CALL R3 2
+ 0x7C080200, // 001C CALL R2 1
+ 0xA8020018, // 001D EXBLK 0 #0037
+ 0x5C0C0400, // 001E MOVE R3 R2
+ 0x7C0C0000, // 001F CALL R3 0
+ 0x8C100311, // 0020 GETMET R4 R1 K17
+ 0x5C180000, // 0021 MOVE R6 R0
+ 0x5C1C0600, // 0022 MOVE R7 R3
+ 0x7C100600, // 0023 CALL R4 3
+ 0x60140004, // 0024 GETGBL R5 G4
+ 0x5C180800, // 0025 MOVE R6 R4
+ 0x7C140200, // 0026 CALL R5 1
+ 0x20140B12, // 0027 NE R5 R5 K18
+ 0x7816000C, // 0028 JMPF R5 #0036
+ 0x60140004, // 0029 GETGBL R5 G4
+ 0x5C180800, // 002A MOVE R6 R4
+ 0x7C140200, // 002B CALL R5 1
+ 0x20140B13, // 002C NE R5 R5 K19
+ 0x78160007, // 002D JMPF R5 #0036
+ 0x94140708, // 002E GETIDX R5 R3 K8
+ 0x1C140B14, // 002F EQ R5 R5 K20
+ 0x78160004, // 0030 JMPF R5 #0036
+ 0x94140715, // 0031 GETIDX R5 R3 K21
+ 0x1C140B14, // 0032 EQ R5 R5 K20
+ 0x78160001, // 0033 JMPF R5 #0036
+ 0x4C140000, // 0034 LDNIL R5
+ 0x90000605, // 0035 SETMBR R0 R3 R5
+ 0x7001FFE6, // 0036 JMP #001E
+ 0x58080016, // 0037 LDCONST R2 K22
+ 0xAC080200, // 0038 CATCH R2 1 0
+ 0xB0080000, // 0039 RAISE 2 R0 R0
+ 0x80000000, // 003A RET 0
})
)
);
@@ -763,14 +1647,16 @@ be_local_closure(Matter_Session_get_fabric_compressed, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(fabric_compressed),
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(_fabric),
+ /* K1 */ be_nested_str_weak(fabric_compressed),
}),
be_str_weak(get_fabric_compressed),
&be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
+ ( &(const binstruction[ 3]) { /* code */
0x88040100, // 0000 GETMBR R1 R0 K0
- 0x80040200, // 0001 RET 1 R1
+ 0x88040301, // 0001 GETMBR R1 R1 K1
+ 0x80040200, // 0002 RET 1 R1
})
)
);
@@ -778,12 +1664,12 @@ be_local_closure(Matter_Session_get_fabric_compressed, /* name */
/********************************************************************
-** Solidified function: set_fabric_label
+** Solidified function: get_admin_vendor
********************************************************************/
-be_local_closure(Matter_Session_set_fabric_label, /* name */
+be_local_closure(Matter_Session_get_admin_vendor, /* name */
be_nested_proto(
- 4, /* nstack */
- 2, /* argc */
+ 2, /* nstack */
+ 1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
@@ -791,19 +1677,15 @@ be_local_closure(Matter_Session_set_fabric_label, /* name */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(fabric_label),
+ /* K0 */ be_nested_str_weak(_fabric),
+ /* K1 */ be_nested_str_weak(admin_vendor),
}),
- be_str_weak(set_fabric_label),
+ be_str_weak(get_admin_vendor),
&be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0x60080004, // 0000 GETGBL R2 G4
- 0x5C0C0200, // 0001 MOVE R3 R1
- 0x7C080200, // 0002 CALL R2 1
- 0x1C080500, // 0003 EQ R2 R2 K0
- 0x780A0000, // 0004 JMPF R2 #0006
- 0x90020201, // 0005 SETMBR R0 K1 R1
- 0x80000000, // 0006 RET 0
+ ( &(const binstruction[ 3]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x88040301, // 0001 GETMBR R1 R1 K1
+ 0x80040200, // 0002 RET 1 R1
})
)
);
@@ -811,26 +1693,39 @@ be_local_closure(Matter_Session_set_fabric_label, /* name */
/********************************************************************
-** Solidified function: set_ipk_epoch_key
+** Solidified function: get_pk
********************************************************************/
-be_local_closure(Matter_Session_set_ipk_epoch_key, /* name */
+be_local_closure(Matter_Session_get_pk, /* name */
be_nested_proto(
- 2, /* nstack */
- 2, /* argc */
+ 6, /* nstack */
+ 1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(ipk_epoch_key),
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(_fabric),
+ /* K1 */ be_nested_str_weak(no_private_key),
+ /* K2 */ be_nested_str_weak(crypto),
+ /* K3 */ be_nested_str_weak(random),
}),
- be_str_weak(set_ipk_epoch_key),
+ be_str_weak(get_pk),
&be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x80000000, // 0001 RET 0
+ ( &(const binstruction[12]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x88040301, // 0001 GETMBR R1 R1 K1
+ 0x74060005, // 0002 JMPT R1 #0009
+ 0xA4060400, // 0003 IMPORT R1 K2
+ 0x88080100, // 0004 GETMBR R2 R0 K0
+ 0x8C0C0303, // 0005 GETMET R3 R1 K3
+ 0x5416001F, // 0006 LDINT R5 32
+ 0x7C0C0400, // 0007 CALL R3 2
+ 0x900A0203, // 0008 SETMBR R2 K1 R3
+ 0x88040100, // 0009 GETMBR R1 R0 K0
+ 0x88040301, // 000A GETMBR R1 R1 K1
+ 0x80040200, // 000B RET 1 R1
})
)
);
@@ -842,62 +1737,41 @@ be_local_closure(Matter_Session_set_ipk_epoch_key, /* name */
********************************************************************/
be_local_closure(Matter_Session_set_fabric_device, /* name */
be_nested_proto(
- 7, /* nstack */
- 4, /* argc */
+ 8, /* nstack */
+ 5, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 5]) { /* constants */
- /* K0 */ be_nested_str_weak(fabric),
- /* K1 */ be_nested_str_weak(deviceid),
- /* K2 */ be_nested_str_weak(fabric_compressed),
- /* K3 */ be_nested_str_weak(__store),
- /* K4 */ be_nested_str_weak(remove_redundant_session),
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(_fabric),
+ /* K1 */ be_nested_str_weak(fabric_id),
+ /* K2 */ be_nested_str_weak(device_id),
+ /* K3 */ be_nested_str_weak(fabric_compressed),
+ /* K4 */ be_nested_str_weak(fabric_parent),
+ /* K5 */ be_nested_str_weak(get_fabric_index),
}),
be_str_weak(set_fabric_device),
&be_const_str_solidified,
- ( &(const binstruction[ 8]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x90020202, // 0001 SETMBR R0 K1 R2
- 0x90020403, // 0002 SETMBR R0 K2 R3
- 0x88100103, // 0003 GETMBR R4 R0 K3
- 0x8C100904, // 0004 GETMET R4 R4 K4
- 0x5C180000, // 0005 MOVE R6 R0
- 0x7C100400, // 0006 CALL R4 2
- 0x80000000, // 0007 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: set_persist
-********************************************************************/
-be_local_closure(Matter_Session_set_persist, /* name */
- be_nested_proto(
- 4, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(_persist),
- }),
- be_str_weak(set_persist),
- &be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0x60080017, // 0000 GETGBL R2 G23
- 0x5C0C0200, // 0001 MOVE R3 R1
- 0x7C080200, // 0002 CALL R2 1
- 0x90020002, // 0003 SETMBR R0 K0 R2
- 0x80000000, // 0004 RET 0
+ ( &(const binstruction[16]) { /* code */
+ 0x88140100, // 0000 GETMBR R5 R0 K0
+ 0x90160201, // 0001 SETMBR R5 K1 R1
+ 0x88140100, // 0002 GETMBR R5 R0 K0
+ 0x90160402, // 0003 SETMBR R5 K2 R2
+ 0x88140100, // 0004 GETMBR R5 R0 K0
+ 0x90160603, // 0005 SETMBR R5 K3 R3
+ 0x88140100, // 0006 GETMBR R5 R0 K0
+ 0x4C180000, // 0007 LDNIL R6
+ 0x20180806, // 0008 NE R6 R4 R6
+ 0x781A0002, // 0009 JMPF R6 #000D
+ 0x8C180905, // 000A GETMET R6 R4 K5
+ 0x7C180200, // 000B CALL R6 1
+ 0x70020000, // 000C JMP #000E
+ 0x4C180000, // 000D LDNIL R6
+ 0x90160806, // 000E SETMBR R5 K4 R6
+ 0x80000000, // 000F RET 0
})
)
);
@@ -1013,376 +1887,6 @@ be_local_closure(Matter_Session_gen_CSR, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: set_ca
-********************************************************************/
-be_local_closure(Matter_Session_set_ca, /* name */
- be_nested_proto(
- 2, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(root_ca_certificate),
- }),
- be_str_weak(set_ca),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x80000000, // 0001 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: set_expire_time
-********************************************************************/
-be_local_closure(Matter_Session_set_expire_time, /* name */
- be_nested_proto(
- 4, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(expiration),
- }),
- be_str_weak(set_expire_time),
- &be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0x60080009, // 0000 GETGBL R2 G9
- 0x5C0C0200, // 0001 MOVE R3 R1
- 0x7C080200, // 0002 CALL R2 1
- 0x90020002, // 0003 SETMBR R0 K0 R2
- 0x80000000, // 0004 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_i2r
-********************************************************************/
-be_local_closure(Matter_Session_get_i2r, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(i2rkey),
- }),
- be_str_weak(get_i2r),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x80040200, // 0001 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: set_keys
-********************************************************************/
-be_local_closure(Matter_Session_set_keys, /* name */
- be_nested_proto(
- 6, /* nstack */
- 5, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 5]) { /* constants */
- /* K0 */ be_nested_str_weak(i2rkey),
- /* K1 */ be_nested_str_weak(_i2r_privacy),
- /* K2 */ be_nested_str_weak(r2ikey),
- /* K3 */ be_nested_str_weak(attestation_challenge),
- /* K4 */ be_nested_str_weak(session_timestamp),
- }),
- be_str_weak(set_keys),
- &be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x4C140000, // 0001 LDNIL R5
- 0x90020205, // 0002 SETMBR R0 K1 R5
- 0x90020402, // 0003 SETMBR R0 K2 R2
- 0x90020603, // 0004 SETMBR R0 K3 R3
- 0x90020804, // 0005 SETMBR R0 K4 R4
- 0x80000000, // 0006 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_ca
-********************************************************************/
-be_local_closure(Matter_Session_get_ca, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(root_ca_certificate),
- }),
- be_str_weak(get_ca),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x80040200, // 0001 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_pk
-********************************************************************/
-be_local_closure(Matter_Session_get_pk, /* name */
- be_nested_proto(
- 5, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_nested_str_weak(no_private_key),
- /* K1 */ be_nested_str_weak(crypto),
- /* K2 */ be_nested_str_weak(random),
- }),
- be_str_weak(get_pk),
- &be_const_str_solidified,
- ( &(const binstruction[ 9]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x74060004, // 0001 JMPT R1 #0007
- 0xA4060200, // 0002 IMPORT R1 K1
- 0x8C080302, // 0003 GETMET R2 R1 K2
- 0x5412001F, // 0004 LDINT R4 32
- 0x7C080400, // 0005 CALL R2 2
- 0x90020002, // 0006 SETMBR R0 K0 R2
- 0x88040100, // 0007 GETMBR R1 R0 K0
- 0x80040200, // 0008 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_ca_pub
-********************************************************************/
-be_local_closure(Matter_Session_get_ca_pub, /* name */
- be_nested_proto(
- 5, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 5]) { /* constants */
- /* K0 */ be_nested_str_weak(root_ca_certificate),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(TLV),
- /* K3 */ be_nested_str_weak(parse),
- /* K4 */ be_nested_str_weak(findsubval),
- }),
- be_str_weak(get_ca_pub),
- &be_const_str_solidified,
- ( &(const binstruction[12]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x78060008, // 0001 JMPF R1 #000B
- 0xB8060200, // 0002 GETNGBL R1 K1
- 0x88040302, // 0003 GETMBR R1 R1 K2
- 0x8C040303, // 0004 GETMET R1 R1 K3
- 0x880C0100, // 0005 GETMBR R3 R0 K0
- 0x7C040400, // 0006 CALL R1 2
- 0x8C080304, // 0007 GETMET R2 R1 K4
- 0x54120008, // 0008 LDINT R4 9
- 0x7C080400, // 0009 CALL R2 2
- 0x80040400, // 000A RET 1 R2
- 0x80000000, // 000B RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(Matter_Session_init, /* name */
- be_nested_proto(
- 6, /* nstack */
- 4, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[13]) { /* constants */
- /* K0 */ be_nested_str_weak(__store),
- /* K1 */ be_nested_str_weak(mode),
- /* K2 */ be_const_int(0),
- /* K3 */ be_nested_str_weak(local_session_id),
- /* K4 */ be_nested_str_weak(initiator_session_id),
- /* K5 */ be_nested_str_weak(counter_rcv),
- /* K6 */ be_nested_str_weak(matter),
- /* K7 */ be_nested_str_weak(Counter),
- /* K8 */ be_nested_str_weak(counter_snd),
- /* K9 */ be_nested_str_weak(_counter_insecure_rcv),
- /* K10 */ be_nested_str_weak(_counter_insecure_snd),
- /* K11 */ be_nested_str_weak(breadcrumb),
- /* K12 */ be_nested_str_weak(int64),
- }),
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[24]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x90020302, // 0001 SETMBR R0 K1 K2
- 0x90020602, // 0002 SETMBR R0 K3 R2
- 0x90020803, // 0003 SETMBR R0 K4 R3
- 0xB8120C00, // 0004 GETNGBL R4 K6
- 0x8C100907, // 0005 GETMET R4 R4 K7
- 0x7C100200, // 0006 CALL R4 1
- 0x90020A04, // 0007 SETMBR R0 K5 R4
- 0xB8120C00, // 0008 GETNGBL R4 K6
- 0x8C100907, // 0009 GETMET R4 R4 K7
- 0x7C100200, // 000A CALL R4 1
- 0x90021004, // 000B SETMBR R0 K8 R4
- 0xB8120C00, // 000C GETNGBL R4 K6
- 0x8C100907, // 000D GETMET R4 R4 K7
- 0x7C100200, // 000E CALL R4 1
- 0x90021204, // 000F SETMBR R0 K9 R4
- 0xB8120C00, // 0010 GETNGBL R4 K6
- 0x8C100907, // 0011 GETMET R4 R4 K7
- 0x7C100200, // 0012 CALL R4 1
- 0x90021404, // 0013 SETMBR R0 K10 R4
- 0xB8121800, // 0014 GETNGBL R4 K12
- 0x7C100000, // 0015 CALL R4 0
- 0x90021604, // 0016 SETMBR R0 K11 R4
- 0x80000000, // 0017 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_ipk_group_key
-********************************************************************/
-be_local_closure(Matter_Session_get_ipk_group_key, /* name */
- be_nested_proto(
- 10, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 7]) { /* constants */
- /* K0 */ be_nested_str_weak(ipk_epoch_key),
- /* K1 */ be_nested_str_weak(fabric_compressed),
- /* K2 */ be_nested_str_weak(crypto),
- /* K3 */ be_nested_str_weak(HKDF_SHA256),
- /* K4 */ be_nested_str_weak(fromstring),
- /* K5 */ be_nested_str_weak(__GROUP_KEY),
- /* K6 */ be_nested_str_weak(derive),
- }),
- be_str_weak(get_ipk_group_key),
- &be_const_str_solidified,
- ( &(const binstruction[25]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x4C080000, // 0001 LDNIL R2
- 0x1C040202, // 0002 EQ R1 R1 R2
- 0x74060003, // 0003 JMPT R1 #0008
- 0x88040101, // 0004 GETMBR R1 R0 K1
- 0x4C080000, // 0005 LDNIL R2
- 0x1C040202, // 0006 EQ R1 R1 R2
- 0x78060001, // 0007 JMPF R1 #000A
- 0x4C040000, // 0008 LDNIL R1
- 0x80040200, // 0009 RET 1 R1
- 0xA4060400, // 000A IMPORT R1 K2
- 0x8C080303, // 000B GETMET R2 R1 K3
- 0x7C080200, // 000C CALL R2 1
- 0x600C0015, // 000D GETGBL R3 G21
- 0x7C0C0000, // 000E CALL R3 0
- 0x8C0C0704, // 000F GETMET R3 R3 K4
- 0x88140105, // 0010 GETMBR R5 R0 K5
- 0x7C0C0400, // 0011 CALL R3 2
- 0x8C100506, // 0012 GETMET R4 R2 K6
- 0x88180100, // 0013 GETMBR R6 R0 K0
- 0x881C0101, // 0014 GETMBR R7 R0 K1
- 0x5C200600, // 0015 MOVE R8 R3
- 0x5426000F, // 0016 LDINT R9 16
- 0x7C100A00, // 0017 CALL R4 5
- 0x80040800, // 0018 RET 1 R4
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: set_noc
-********************************************************************/
-be_local_closure(Matter_Session_set_noc, /* name */
- be_nested_proto(
- 3, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(noc),
- /* K1 */ be_nested_str_weak(icac),
- }),
- be_str_weak(set_noc),
- &be_const_str_solidified,
- ( &(const binstruction[ 3]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x90020202, // 0001 SETMBR R0 K1 R2
- 0x80000000, // 0002 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified function: get_fabric
********************************************************************/
@@ -1397,7 +1901,7 @@ be_local_closure(Matter_Session_get_fabric, /* name */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(fabric),
+ /* K0 */ be_nested_str_weak(_fabric),
}),
be_str_weak(get_fabric),
&be_const_str_solidified,
@@ -1411,26 +1915,38 @@ be_local_closure(Matter_Session_get_fabric, /* name */
/********************************************************************
-** Solidified function: get_mode
+** Solidified function: counter_rcv_validate
********************************************************************/
-be_local_closure(Matter_Session_get_mode, /* name */
+be_local_closure(Matter_Session_counter_rcv_validate, /* name */
be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
+ 7, /* nstack */
+ 3, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(mode),
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(_counter_rcv_impl),
+ /* K1 */ be_nested_str_weak(validate),
+ /* K2 */ be_nested_str_weak(counter_rcv),
+ /* K3 */ be_nested_str_weak(val),
}),
- be_str_weak(get_mode),
+ be_str_weak(counter_rcv_validate),
&be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x80040200, // 0001 RET 1 R1
+ ( &(const binstruction[11]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x8C0C0701, // 0001 GETMET R3 R3 K1
+ 0x5C140200, // 0002 MOVE R5 R1
+ 0x5C180400, // 0003 MOVE R6 R2
+ 0x7C0C0600, // 0004 CALL R3 3
+ 0x780E0003, // 0005 JMPF R3 #000A
+ 0x88100100, // 0006 GETMBR R4 R0 K0
+ 0x8C100903, // 0007 GETMET R4 R4 K3
+ 0x7C100200, // 0008 CALL R4 1
+ 0x90020404, // 0009 SETMBR R0 K2 R4
+ 0x80040600, // 000A RET 1 R3
})
)
);
@@ -1438,26 +1954,31 @@ be_local_closure(Matter_Session_get_mode, /* name */
/********************************************************************
-** Solidified function: set_mode
+** Solidified function: set_noc
********************************************************************/
-be_local_closure(Matter_Session_set_mode, /* name */
+be_local_closure(Matter_Session_set_noc, /* name */
be_nested_proto(
- 2, /* nstack */
- 2, /* argc */
+ 4, /* nstack */
+ 3, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(mode),
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(_fabric),
+ /* K1 */ be_nested_str_weak(noc),
+ /* K2 */ be_nested_str_weak(icac),
}),
- be_str_weak(set_mode),
+ be_str_weak(set_noc),
&be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x80000000, // 0001 RET 0
+ ( &(const binstruction[ 5]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x900E0201, // 0001 SETMBR R3 K1 R1
+ 0x880C0100, // 0002 GETMBR R3 R0 K0
+ 0x900E0402, // 0003 SETMBR R3 K2 R2
+ 0x80000000, // 0004 RET 0
})
)
);
@@ -1467,83 +1988,98 @@ be_local_closure(Matter_Session_set_mode, /* name */
/********************************************************************
** Solidified class: Matter_Session
********************************************************************/
+extern const bclass be_class_Matter_Expirable;
be_local_class(Matter_Session,
36,
- NULL,
- be_nested_map(72,
+ &be_class_Matter_Expirable,
+ be_nested_map(86,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(save, -1), be_const_closure(Matter_Session_save_closure) },
- { be_const_key_weak(set_mode, -1), be_const_closure(Matter_Session_set_mode_closure) },
- { be_const_key_weak(root_ca_certificate, -1), be_const_var(19) },
- { be_const_key_weak(admin_subject, 29), be_const_var(29) },
- { be_const_key_weak(get_i2r_privacy, 25), be_const_closure(Matter_Session_get_i2r_privacy_closure) },
- { be_const_key_weak(has_expired, -1), be_const_closure(Matter_Session_has_expired_closure) },
- { be_const_key_weak(set_no_expiration, -1), be_const_closure(Matter_Session_set_no_expiration_closure) },
- { be_const_key_weak(get_deviceid, 61), be_const_closure(Matter_Session_get_deviceid_closure) },
- { be_const_key_weak(local_session_id, -1), be_const_var(2) },
- { be_const_key_weak(get_mode, -1), be_const_closure(Matter_Session_get_mode_closure) },
- { be_const_key_weak(set_fabric_device, -1), be_const_closure(Matter_Session_set_fabric_device_closure) },
- { be_const_key_weak(fromjson, -1), be_const_static_closure(Matter_Session_fromjson_closure) },
- { be_const_key_weak(get_ipk_epoch_key, -1), be_const_closure(Matter_Session_get_ipk_epoch_key_closure) },
- { be_const_key_weak(get_fabric, 33), be_const_closure(Matter_Session_get_fabric_closure) },
+ { be_const_key_weak(__Msg2, -1), be_const_var(34) },
+ { be_const_key_weak(_GROUP_KEY, -1), be_nested_str_weak(GroupKey_X20v1_X2E0) },
+ { be_const_key_weak(set_noc, 50), be_const_closure(Matter_Session_set_noc_closure) },
+ { be_const_key_weak(get_i2r, 79), be_const_closure(Matter_Session_get_i2r_closure) },
{ be_const_key_weak(tojson, -1), be_const_closure(Matter_Session_tojson_closure) },
- { be_const_key_weak(set_noc, 37), be_const_closure(Matter_Session_set_noc_closure) },
- { be_const_key_weak(get_ac, -1), be_const_closure(Matter_Session_get_ac_closure) },
- { be_const_key_weak(_counter_insecure_snd, 6), be_const_var(11) },
- { be_const_key_weak(initiator_session_id, -1), be_const_var(3) },
- { be_const_key_weak(get_fabric_compressed, -1), be_const_closure(Matter_Session_get_fabric_compressed_closure) },
- { be_const_key_weak(set_fabric_label, -1), be_const_closure(Matter_Session_set_fabric_label_closure) },
- { be_const_key_weak(shared_secret, 8), be_const_var(24) },
- { be_const_key_weak(get_ipk_group_key, 43), be_const_closure(Matter_Session_get_ipk_group_key_closure) },
- { be_const_key_weak(init, 42), be_const_closure(Matter_Session_init_closure) },
- { be_const_key_weak(_chunked_attr_reports, -1), be_const_var(35) },
- { be_const_key_weak(set_persist, -1), be_const_closure(Matter_Session_set_persist_closure) },
- { be_const_key_weak(_future_initiator_session_id, -1), be_const_var(6) },
- { be_const_key_weak(_Msg2, -1), be_const_var(32) },
- { be_const_key_weak(fabric, -1), be_const_var(25) },
- { be_const_key_weak(close, -1), be_const_closure(Matter_Session_close_closure) },
- { be_const_key_weak(_i2r_privacy, -1), be_const_var(14) },
- { be_const_key_weak(ipk_epoch_key, -1), be_const_var(22) },
- { be_const_key_weak(get_ca, 10), be_const_closure(Matter_Session_get_ca_closure) },
- { be_const_key_weak(resumption_id, -1), be_const_var(23) },
- { be_const_key_weak(gen_CSR, 38), be_const_closure(Matter_Session_gen_CSR_closure) },
- { be_const_key_weak(source_node_id, -1), be_const_var(5) },
- { be_const_key_weak(set_ca, -1), be_const_closure(Matter_Session_set_ca_closure) },
- { be_const_key_weak(set_ipk_epoch_key, -1), be_const_closure(Matter_Session_set_ipk_epoch_key_closure) },
- { be_const_key_weak(_future_local_session_id, -1), be_const_var(7) },
- { be_const_key_weak(get_r2i, 31), be_const_closure(Matter_Session_get_r2i_closure) },
- { be_const_key_weak(icac, -1), be_const_var(21) },
- { be_const_key_weak(fabric_label, -1), be_const_var(28) },
- { be_const_key_weak(attestation_challenge, -1), be_const_var(15) },
- { be_const_key_weak(peer_node_id, 49), be_const_var(16) },
- { be_const_key_weak(get_noc, 53), be_const_closure(Matter_Session_get_noc_closure) },
- { be_const_key_weak(set_expire_time, 40), be_const_closure(Matter_Session_set_expire_time_closure) },
- { be_const_key_weak(deviceid, -1), be_const_var(27) },
- { be_const_key_weak(__CASE, -1), be_const_int(2) },
- { be_const_key_weak(get_icac, 50), be_const_closure(Matter_Session_get_icac_closure) },
- { be_const_key_weak(_Msg1, -1), be_const_var(31) },
- { be_const_key_weak(set_keys, 58), be_const_closure(Matter_Session_set_keys_closure) },
- { be_const_key_weak(noc, 23), be_const_var(20) },
- { be_const_key_weak(__PASE, -1), be_const_int(1) },
- { be_const_key_weak(breadcrumb, 26), be_const_var(17) },
- { be_const_key_weak(__GROUP_KEY, -1), be_nested_str_weak(GroupKey_X20v1_X2E0) },
- { be_const_key_weak(counter_snd, -1), be_const_var(9) },
- { be_const_key_weak(fabric_compressed, 32), be_const_var(26) },
+ { be_const_key_weak(assign_fabric_index, 30), be_const_closure(Matter_Session_assign_fabric_index_closure) },
+ { be_const_key_weak(get_r2i, -1), be_const_closure(Matter_Session_get_r2i_closure) },
+ { be_const_key_weak(_breadcrumb, -1), be_const_var(25) },
+ { be_const_key_weak(_counter_snd_impl, -1), be_const_var(13) },
+ { be_const_key_weak(gen_CSR, -1), be_const_closure(Matter_Session_gen_CSR_closure) },
+ { be_const_key_weak(__future_local_session_id, -1), be_const_var(9) },
+ { be_const_key_weak(set_mode_PASE, -1), be_const_closure(Matter_Session_set_mode_PASE_closure) },
+ { be_const_key_weak(get_fabric_label, -1), be_const_closure(Matter_Session_get_fabric_label_closure) },
+ { be_const_key_weak(__spake_Ke, -1), be_const_var(32) },
+ { be_const_key_weak(get_device_id, 85), be_const_closure(Matter_Session_get_device_id_closure) },
+ { be_const_key_weak(persist_to_fabric, 6), be_const_closure(Matter_Session_persist_to_fabric_closure) },
+ { be_const_key_weak(_COUNTER_SND_INCR, -1), be_const_int(1024) },
+ { be_const_key_weak(local_session_id, 18), be_const_var(3) },
+ { be_const_key_weak(shared_secret, 42), be_const_var(27) },
+ { be_const_key_weak(get_mode, 74), be_const_closure(Matter_Session_get_mode_closure) },
+ { be_const_key_weak(peer_node_id, -1), be_const_var(24) },
+ { be_const_key_weak(i2rkey, -1), be_const_var(20) },
{ be_const_key_weak(get_pk, -1), be_const_closure(Matter_Session_get_pk_closure) },
- { be_const_key_weak(expiration, -1), be_const_var(34) },
- { be_const_key_weak(r2ikey, -1), be_const_var(13) },
+ { be_const_key_weak(is_PASE, -1), be_const_closure(Matter_Session_is_PASE_closure) },
+ { be_const_key_weak(get_admin_subject, -1), be_const_closure(Matter_Session_get_admin_subject_closure) },
+ { be_const_key_weak(get_admin_vendor, -1), be_const_closure(Matter_Session_get_admin_vendor_closure) },
+ { be_const_key_weak(get_ipk_epoch_key, 2), be_const_closure(Matter_Session_get_ipk_epoch_key_closure) },
+ { be_const_key_weak(_counter_insecure_snd, -1), be_const_var(19) },
+ { be_const_key_weak(_i2r_privacy, 78), be_const_var(22) },
+ { be_const_key_weak(get_fabric_compressed, -1), be_const_closure(Matter_Session_get_fabric_compressed_closure) },
+ { be_const_key_weak(get_fabric_id, -1), be_const_closure(Matter_Session_get_fabric_id_closure) },
+ { be_const_key_weak(_exchange_id, 29), be_const_var(14) },
+ { be_const_key_weak(fabric_candidate, -1), be_const_closure(Matter_Session_fabric_candidate_closure) },
+ { be_const_key_weak(__responder_pub, -1), be_const_var(29) },
+ { be_const_key_weak(get_ipk_group_key, -1), be_const_closure(Matter_Session_get_ipk_group_key_closure) },
+ { be_const_key_weak(__Msg1, -1), be_const_var(33) },
+ { be_const_key_weak(get_noc, -1), be_const_closure(Matter_Session_get_noc_closure) },
+ { be_const_key_weak(_port, 48), be_const_var(16) },
+ { be_const_key_weak(fabric_completed, -1), be_const_closure(Matter_Session_fabric_completed_closure) },
+ { be_const_key_weak(__future_initiator_session_id, -1), be_const_var(8) },
+ { be_const_key_weak(__spake_cA, 54), be_const_var(31) },
+ { be_const_key_weak(_message_handler, -1), be_const_var(17) },
+ { be_const_key_weak(attestation_challenge, 8), be_const_var(23) },
+ { be_const_key_weak(get_i2r_privacy, -1), be_const_closure(Matter_Session_get_i2r_privacy_closure) },
+ { be_const_key_weak(set_keys, -1), be_const_closure(Matter_Session_set_keys_closure) },
+ { be_const_key_weak(counter_snd_next, -1), be_const_closure(Matter_Session_counter_snd_next_closure) },
+ { be_const_key_weak(_CASE, -1), be_const_int(2) },
+ { be_const_key_weak(last_used, -1), be_const_var(6) },
+ { be_const_key_weak(_ip, -1), be_const_var(15) },
+ { be_const_key_weak(set_mode_CASE, 28), be_const_closure(Matter_Session_set_mode_CASE_closure) },
+ { be_const_key_weak(set_fabric_label, 13), be_const_closure(Matter_Session_set_fabric_label_closure) },
+ { be_const_key_weak(hydrate_post, -1), be_const_closure(Matter_Session_hydrate_post_closure) },
+ { be_const_key_weak(get_ca, -1), be_const_closure(Matter_Session_get_ca_closure) },
+ { be_const_key_weak(init, 69), be_const_closure(Matter_Session_init_closure) },
+ { be_const_key_weak(get_icac, 41), be_const_closure(Matter_Session_get_icac_closure) },
+ { be_const_key_weak(_store, 51), be_const_var(0) },
+ { be_const_key_weak(__chunked_attr_reports, -1), be_const_var(35) },
+ { be_const_key_weak(counter_rcv, -1), be_const_var(10) },
+ { be_const_key_weak(_source_node_id, -1), be_const_var(7) },
+ { be_const_key_weak(set_admin_subject_vendor, 63), be_const_closure(Matter_Session_set_admin_subject_vendor_closure) },
+ { be_const_key_weak(set_ipk_epoch_key, -1), be_const_closure(Matter_Session_set_ipk_epoch_key_closure) },
+ { be_const_key_weak(_counter_insecure_rcv, 62), be_const_var(18) },
+ { be_const_key_weak(before_remove, 64), be_const_closure(Matter_Session_before_remove_closure) },
+ { be_const_key_weak(__responder_priv, -1), be_const_var(28) },
+ { be_const_key_weak(initiator_session_id, -1), be_const_var(4) },
+ { be_const_key_weak(r2ikey, 16), be_const_var(21) },
+ { be_const_key_weak(__initiator_pub, -1), be_const_var(30) },
+ { be_const_key_weak(resumption_id, -1), be_const_var(26) },
+ { be_const_key_weak(save, 49), be_const_closure(Matter_Session_save_closure) },
+ { be_const_key_weak(set_mode, 56), be_const_closure(Matter_Session_set_mode_closure) },
+ { be_const_key_weak(get_ac, 43), be_const_closure(Matter_Session_get_ac_closure) },
+ { be_const_key_weak(_PASE, -1), be_const_int(1) },
{ be_const_key_weak(get_ca_pub, -1), be_const_closure(Matter_Session_get_ca_pub_closure) },
- { be_const_key_weak(counter_rcv, -1), be_const_var(8) },
- { be_const_key_weak(_persist, 22), be_const_var(33) },
- { be_const_key_weak(i2rkey, 18), be_const_var(12) },
- { be_const_key_weak(session_timestamp, 15), be_const_var(4) },
- { be_const_key_weak(set_expire_in_seconds, 13), be_const_closure(Matter_Session_set_expire_in_seconds_closure) },
+ { be_const_key_weak(close, -1), be_const_closure(Matter_Session_close_closure) },
+ { be_const_key_weak(_counter_rcv_impl, -1), be_const_var(12) },
+ { be_const_key_weak(_fabric, -1), be_const_var(2) },
+ { be_const_key_weak(update, 25), be_const_closure(Matter_Session_update_closure) },
+ { be_const_key_weak(fromjson, 22), be_const_static_closure(Matter_Session_fromjson_closure) },
+ { be_const_key_weak(is_CASE, -1), be_const_closure(Matter_Session_is_CASE_closure) },
+ { be_const_key_weak(counter_snd, -1), be_const_var(11) },
+ { be_const_key_weak(set_fabric_device, -1), be_const_closure(Matter_Session_set_fabric_device_closure) },
+ { be_const_key_weak(created, 10), be_const_var(5) },
+ { be_const_key_weak(set_ca, 9), be_const_closure(Matter_Session_set_ca_closure) },
+ { be_const_key_weak(get_fabric, -1), be_const_closure(Matter_Session_get_fabric_closure) },
+ { be_const_key_weak(counter_rcv_validate, -1), be_const_closure(Matter_Session_counter_rcv_validate_closure) },
{ be_const_key_weak(mode, -1), be_const_var(1) },
- { be_const_key_weak(get_i2r, 9), be_const_closure(Matter_Session_get_i2r_closure) },
- { be_const_key_weak(__store, -1), be_const_var(0) },
- { be_const_key_weak(_counter_insecure_rcv, -1), be_const_var(10) },
- { be_const_key_weak(no_private_key, 2), be_const_var(18) },
- { be_const_key_weak(admin_vendor, 1), be_const_var(30) },
})),
be_str_weak(Matter_Session)
);
@@ -1554,888 +2090,5 @@ void be_load_Matter_Session_class(bvm *vm) {
be_setglobal(vm, "Matter_Session");
be_pop(vm, 1);
}
-
-extern const bclass be_class_Matter_Session_Store;
-
-/********************************************************************
-** Solidified function: remove_expired
-********************************************************************/
-be_local_closure(Matter_Session_Store_remove_expired, /* name */
- be_nested_proto(
- 7, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 7]) { /* constants */
- /* K0 */ be_const_int(0),
- /* K1 */ be_nested_str_weak(sessions),
- /* K2 */ be_nested_str_weak(has_expired),
- /* K3 */ be_nested_str_weak(_persist),
- /* K4 */ be_nested_str_weak(remove),
- /* K5 */ be_const_int(1),
- /* K6 */ be_nested_str_weak(save),
- }),
- be_str_weak(remove_expired),
- &be_const_str_solidified,
- ( &(const binstruction[26]) { /* code */
- 0x50040000, // 0000 LDBOOL R1 0 0
- 0x58080000, // 0001 LDCONST R2 K0
- 0x880C0101, // 0002 GETMBR R3 R0 K1
- 0x6010000C, // 0003 GETGBL R4 G12
- 0x88140101, // 0004 GETMBR R5 R0 K1
- 0x7C100200, // 0005 CALL R4 1
- 0x14100404, // 0006 LT R4 R2 R4
- 0x7812000D, // 0007 JMPF R4 #0016
- 0x94100602, // 0008 GETIDX R4 R3 R2
- 0x8C100902, // 0009 GETMET R4 R4 K2
- 0x7C100200, // 000A CALL R4 1
- 0x78120007, // 000B JMPF R4 #0014
- 0x94100602, // 000C GETIDX R4 R3 R2
- 0x88100903, // 000D GETMBR R4 R4 K3
- 0x78120000, // 000E JMPF R4 #0010
- 0x50040200, // 000F LDBOOL R1 1 0
- 0x8C100704, // 0010 GETMET R4 R3 K4
- 0x5C180400, // 0011 MOVE R6 R2
- 0x7C100400, // 0012 CALL R4 2
- 0x70020000, // 0013 JMP #0015
- 0x00080505, // 0014 ADD R2 R2 K5
- 0x7001FFEC, // 0015 JMP #0003
- 0x78060001, // 0016 JMPF R1 #0019
- 0x8C100106, // 0017 GETMET R4 R0 K6
- 0x7C100200, // 0018 CALL R4 1
- 0x80000000, // 0019 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: remove_redundant_session
-********************************************************************/
-be_local_closure(Matter_Session_Store_remove_redundant_session, /* name */
- be_nested_proto(
- 8, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 6]) { /* constants */
- /* K0 */ be_const_int(0),
- /* K1 */ be_nested_str_weak(sessions),
- /* K2 */ be_nested_str_weak(fabric),
- /* K3 */ be_nested_str_weak(deviceid),
- /* K4 */ be_nested_str_weak(remove),
- /* K5 */ be_const_int(1),
- }),
- be_str_weak(remove_redundant_session),
- &be_const_str_solidified,
- ( &(const binstruction[25]) { /* code */
- 0x58080000, // 0000 LDCONST R2 K0
- 0x880C0101, // 0001 GETMBR R3 R0 K1
- 0x6010000C, // 0002 GETGBL R4 G12
- 0x88140101, // 0003 GETMBR R5 R0 K1
- 0x7C100200, // 0004 CALL R4 1
- 0x14100404, // 0005 LT R4 R2 R4
- 0x78120010, // 0006 JMPF R4 #0018
- 0x94100602, // 0007 GETIDX R4 R3 R2
- 0x20140801, // 0008 NE R5 R4 R1
- 0x7816000B, // 0009 JMPF R5 #0016
- 0x88140902, // 000A GETMBR R5 R4 K2
- 0x88180302, // 000B GETMBR R6 R1 K2
- 0x1C140A06, // 000C EQ R5 R5 R6
- 0x78160007, // 000D JMPF R5 #0016
- 0x88140903, // 000E GETMBR R5 R4 K3
- 0x88180303, // 000F GETMBR R6 R1 K3
- 0x1C140A06, // 0010 EQ R5 R5 R6
- 0x78160003, // 0011 JMPF R5 #0016
- 0x8C140704, // 0012 GETMET R5 R3 K4
- 0x5C1C0400, // 0013 MOVE R7 R2
- 0x7C140400, // 0014 CALL R5 2
- 0x70020000, // 0015 JMP #0017
- 0x00080505, // 0016 ADD R2 R2 K5
- 0x7001FFE9, // 0017 JMP #0002
- 0x80000000, // 0018 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: add_session
-********************************************************************/
-be_local_closure(Matter_Session_Store_add_session, /* name */
- be_nested_proto(
- 6, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_nested_str_weak(set_expire_in_seconds),
- /* K1 */ be_nested_str_weak(sessions),
- /* K2 */ be_nested_str_weak(push),
- }),
- be_str_weak(add_session),
- &be_const_str_solidified,
- ( &(const binstruction[11]) { /* code */
- 0x4C0C0000, // 0000 LDNIL R3
- 0x200C0403, // 0001 NE R3 R2 R3
- 0x780E0002, // 0002 JMPF R3 #0006
- 0x8C0C0300, // 0003 GETMET R3 R1 K0
- 0x5C140400, // 0004 MOVE R5 R2
- 0x7C0C0400, // 0005 CALL R3 2
- 0x880C0101, // 0006 GETMBR R3 R0 K1
- 0x8C0C0702, // 0007 GETMET R3 R3 K2
- 0x5C140200, // 0008 MOVE R5 R1
- 0x7C0C0400, // 0009 CALL R3 2
- 0x80000000, // 000A RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: sessions_active
-********************************************************************/
-be_local_closure(Matter_Session_Store_sessions_active, /* name */
- be_nested_proto(
- 7, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 6]) { /* constants */
- /* K0 */ be_const_int(0),
- /* K1 */ be_nested_str_weak(sessions),
- /* K2 */ be_nested_str_weak(get_deviceid),
- /* K3 */ be_nested_str_weak(get_fabric),
- /* K4 */ be_nested_str_weak(push),
- /* K5 */ be_const_int(1),
- }),
- be_str_weak(sessions_active),
- &be_const_str_solidified,
- ( &(const binstruction[22]) { /* code */
- 0x60040012, // 0000 GETGBL R1 G18
- 0x7C040000, // 0001 CALL R1 0
- 0x58080000, // 0002 LDCONST R2 K0
- 0x600C000C, // 0003 GETGBL R3 G12
- 0x88100101, // 0004 GETMBR R4 R0 K1
- 0x7C0C0200, // 0005 CALL R3 1
- 0x140C0403, // 0006 LT R3 R2 R3
- 0x780E000C, // 0007 JMPF R3 #0015
- 0x880C0101, // 0008 GETMBR R3 R0 K1
- 0x940C0602, // 0009 GETIDX R3 R3 R2
- 0x8C100702, // 000A GETMET R4 R3 K2
- 0x7C100200, // 000B CALL R4 1
- 0x78120005, // 000C JMPF R4 #0013
- 0x8C100703, // 000D GETMET R4 R3 K3
- 0x7C100200, // 000E CALL R4 1
- 0x78120002, // 000F JMPF R4 #0013
- 0x8C100304, // 0010 GETMET R4 R1 K4
- 0x5C180600, // 0011 MOVE R6 R3
- 0x7C100400, // 0012 CALL R4 2
- 0x00080505, // 0013 ADD R2 R2 K5
- 0x7001FFED, // 0014 JMP #0003
- 0x80040200, // 0015 RET 1 R1
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: every_second
-********************************************************************/
-be_local_closure(Matter_Session_Store_every_second, /* name */
- be_nested_proto(
- 3, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(remove_expired),
- }),
- be_str_weak(every_second),
- &be_const_str_solidified,
- ( &(const binstruction[ 3]) { /* code */
- 0x8C040100, // 0000 GETMET R1 R0 K0
- 0x7C040200, // 0001 CALL R1 1
- 0x80000000, // 0002 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: save
-********************************************************************/
-be_local_closure(Matter_Session_Store_save, /* name */
- be_nested_proto(
- 12, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[23]) { /* constants */
- /* K0 */ be_nested_str_weak(json),
- /* K1 */ be_nested_str_weak(remove_expired),
- /* K2 */ be_nested_str_weak(sessions),
- /* K3 */ be_nested_str_weak(_persist),
- /* K4 */ be_nested_str_weak(push),
- /* K5 */ be_nested_str_weak(tojson),
- /* K6 */ be_nested_str_weak(stop_iteration),
- /* K7 */ be_nested_str_weak(_X5B),
- /* K8 */ be_nested_str_weak(concat),
- /* K9 */ be_nested_str_weak(_X2C),
- /* K10 */ be_nested_str_weak(_X5D),
- /* K11 */ be_nested_str_weak(string),
- /* K12 */ be_nested_str_weak(FILENAME),
- /* K13 */ be_nested_str_weak(w),
- /* K14 */ be_nested_str_weak(write),
- /* K15 */ be_nested_str_weak(close),
- /* K16 */ be_nested_str_weak(tasmota),
- /* K17 */ be_nested_str_weak(log),
- /* K18 */ be_nested_str_weak(format),
- /* K19 */ be_nested_str_weak(MTR_X3A_X20Saved_X20_X25i_X20session_X28s_X29),
- /* K20 */ be_const_int(2),
- /* K21 */ be_nested_str_weak(MTR_X3A_X20Session_Store_X3A_X3Asave_X20Exception_X3A),
- /* K22 */ be_nested_str_weak(_X7C),
- }),
- be_str_weak(save),
- &be_const_str_solidified,
- ( &(const binstruction[72]) { /* code */
- 0xA4060000, // 0000 IMPORT R1 K0
- 0x8C080101, // 0001 GETMET R2 R0 K1
- 0x7C080200, // 0002 CALL R2 1
- 0x60080012, // 0003 GETGBL R2 G18
- 0x7C080000, // 0004 CALL R2 0
- 0x600C0010, // 0005 GETGBL R3 G16
- 0x88100102, // 0006 GETMBR R4 R0 K2
- 0x7C0C0200, // 0007 CALL R3 1
- 0xA8020008, // 0008 EXBLK 0 #0012
- 0x5C100600, // 0009 MOVE R4 R3
- 0x7C100000, // 000A CALL R4 0
- 0x88140903, // 000B GETMBR R5 R4 K3
- 0x78160003, // 000C JMPF R5 #0011
- 0x8C140504, // 000D GETMET R5 R2 K4
- 0x8C1C0905, // 000E GETMET R7 R4 K5
- 0x7C1C0200, // 000F CALL R7 1
- 0x7C140400, // 0010 CALL R5 2
- 0x7001FFF6, // 0011 JMP #0009
- 0x580C0006, // 0012 LDCONST R3 K6
- 0xAC0C0200, // 0013 CATCH R3 1 0
- 0xB0080000, // 0014 RAISE 2 R0 R0
- 0x600C000C, // 0015 GETGBL R3 G12
- 0x5C100400, // 0016 MOVE R4 R2
- 0x7C0C0200, // 0017 CALL R3 1
- 0x8C100508, // 0018 GETMET R4 R2 K8
- 0x58180009, // 0019 LDCONST R6 K9
- 0x7C100400, // 001A CALL R4 2
- 0x00120E04, // 001B ADD R4 K7 R4
- 0x0010090A, // 001C ADD R4 R4 K10
- 0x5C080800, // 001D MOVE R2 R4
- 0xA8020015, // 001E EXBLK 0 #0035
- 0xA4121600, // 001F IMPORT R4 K11
- 0x60140011, // 0020 GETGBL R5 G17
- 0x8818010C, // 0021 GETMBR R6 R0 K12
- 0x581C000D, // 0022 LDCONST R7 K13
- 0x7C140400, // 0023 CALL R5 2
- 0x8C180B0E, // 0024 GETMET R6 R5 K14
- 0x5C200400, // 0025 MOVE R8 R2
- 0x7C180400, // 0026 CALL R6 2
- 0x8C180B0F, // 0027 GETMET R6 R5 K15
- 0x7C180200, // 0028 CALL R6 1
- 0xB81A2000, // 0029 GETNGBL R6 K16
- 0x8C180D11, // 002A GETMET R6 R6 K17
- 0x8C200912, // 002B GETMET R8 R4 K18
- 0x58280013, // 002C LDCONST R10 K19
- 0x5C2C0600, // 002D MOVE R11 R3
- 0x7C200600, // 002E CALL R8 3
- 0x58240014, // 002F LDCONST R9 K20
- 0x7C180600, // 0030 CALL R6 3
- 0xA8040001, // 0031 EXBLK 1 1
- 0x80040400, // 0032 RET 1 R2
- 0xA8040001, // 0033 EXBLK 1 1
- 0x70020011, // 0034 JMP #0047
- 0xAC100002, // 0035 CATCH R4 0 2
- 0x7002000E, // 0036 JMP #0046
- 0xB81A2000, // 0037 GETNGBL R6 K16
- 0x8C180D11, // 0038 GETMET R6 R6 K17
- 0x60200008, // 0039 GETGBL R8 G8
- 0x5C240800, // 003A MOVE R9 R4
- 0x7C200200, // 003B CALL R8 1
- 0x00222A08, // 003C ADD R8 K21 R8
- 0x00201116, // 003D ADD R8 R8 K22
- 0x60240008, // 003E GETGBL R9 G8
- 0x5C280A00, // 003F MOVE R10 R5
- 0x7C240200, // 0040 CALL R9 1
- 0x00201009, // 0041 ADD R8 R8 R9
- 0x58240014, // 0042 LDCONST R9 K20
- 0x7C180600, // 0043 CALL R6 3
- 0x80040400, // 0044 RET 1 R2
- 0x70020000, // 0045 JMP #0047
- 0xB0080000, // 0046 RAISE 2 R0 R0
- 0x80000000, // 0047 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: find_session_by_resumption_id
-********************************************************************/
-be_local_closure(Matter_Session_Store_find_session_by_resumption_id, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_const_int(0),
- /* K1 */ be_nested_str_weak(sessions),
- /* K2 */ be_nested_str_weak(resumption_id),
- /* K3 */ be_const_int(1),
- }),
- be_str_weak(find_session_by_resumption_id),
- &be_const_str_solidified,
- ( &(const binstruction[20]) { /* code */
- 0x5C080200, // 0000 MOVE R2 R1
- 0x740A0001, // 0001 JMPT R2 #0004
- 0x4C080000, // 0002 LDNIL R2
- 0x80040400, // 0003 RET 1 R2
- 0x58080000, // 0004 LDCONST R2 K0
- 0x880C0101, // 0005 GETMBR R3 R0 K1
- 0x6010000C, // 0006 GETGBL R4 G12
- 0x5C140600, // 0007 MOVE R5 R3
- 0x7C100200, // 0008 CALL R4 1
- 0x14100404, // 0009 LT R4 R2 R4
- 0x78120007, // 000A JMPF R4 #0013
- 0x94100602, // 000B GETIDX R4 R3 R2
- 0x88100902, // 000C GETMBR R4 R4 K2
- 0x1C100801, // 000D EQ R4 R4 R1
- 0x78120001, // 000E JMPF R4 #0011
- 0x94100602, // 000F GETIDX R4 R3 R2
- 0x80040800, // 0010 RET 1 R4
- 0x00080503, // 0011 ADD R2 R2 K3
- 0x7001FFF2, // 0012 JMP #0006
- 0x80000000, // 0013 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: gen_local_session_id
-********************************************************************/
-be_local_closure(Matter_Session_Store_gen_local_session_id, /* name */
- be_nested_proto(
- 6, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 6]) { /* constants */
- /* K0 */ be_nested_str_weak(crypto),
- /* K1 */ be_nested_str_weak(random),
- /* K2 */ be_const_int(2),
- /* K3 */ be_nested_str_weak(get),
- /* K4 */ be_const_int(0),
- /* K5 */ be_nested_str_weak(get_session_by_local_session_id),
- }),
- be_str_weak(gen_local_session_id),
- &be_const_str_solidified,
- ( &(const binstruction[19]) { /* code */
- 0xA4060000, // 0000 IMPORT R1 K0
- 0x50080200, // 0001 LDBOOL R2 1 0
- 0x780A000E, // 0002 JMPF R2 #0012
- 0x8C080301, // 0003 GETMET R2 R1 K1
- 0x58100002, // 0004 LDCONST R4 K2
- 0x7C080400, // 0005 CALL R2 2
- 0x8C080503, // 0006 GETMET R2 R2 K3
- 0x58100004, // 0007 LDCONST R4 K4
- 0x58140002, // 0008 LDCONST R5 K2
- 0x7C080600, // 0009 CALL R2 3
- 0x8C0C0105, // 000A GETMET R3 R0 K5
- 0x5C140400, // 000B MOVE R5 R2
- 0x7C0C0400, // 000C CALL R3 2
- 0x4C100000, // 000D LDNIL R4
- 0x1C0C0604, // 000E EQ R3 R3 R4
- 0x780E0000, // 000F JMPF R3 #0011
- 0x80040400, // 0010 RET 1 R2
- 0x7001FFEE, // 0011 JMP #0001
- 0x80000000, // 0012 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_session_by_local_session_id
-********************************************************************/
-be_local_closure(Matter_Session_Store_get_session_by_local_session_id, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(sessions),
- /* K1 */ be_const_int(0),
- /* K2 */ be_nested_str_weak(local_session_id),
- /* K3 */ be_const_int(1),
- }),
- be_str_weak(get_session_by_local_session_id),
- &be_const_str_solidified,
- ( &(const binstruction[21]) { /* code */
- 0x4C080000, // 0000 LDNIL R2
- 0x1C080202, // 0001 EQ R2 R1 R2
- 0x780A0001, // 0002 JMPF R2 #0005
- 0x4C080000, // 0003 LDNIL R2
- 0x80040400, // 0004 RET 1 R2
- 0x6008000C, // 0005 GETGBL R2 G12
- 0x880C0100, // 0006 GETMBR R3 R0 K0
- 0x7C080200, // 0007 CALL R2 1
- 0x580C0001, // 0008 LDCONST R3 K1
- 0x88100100, // 0009 GETMBR R4 R0 K0
- 0x14140602, // 000A LT R5 R3 R2
- 0x78160007, // 000B JMPF R5 #0014
- 0x94140803, // 000C GETIDX R5 R4 R3
- 0x88140B02, // 000D GETMBR R5 R5 K2
- 0x1C140A01, // 000E EQ R5 R5 R1
- 0x78160001, // 000F JMPF R5 #0012
- 0x94140803, // 0010 GETIDX R5 R4 R3
- 0x80040A00, // 0011 RET 1 R5
- 0x000C0703, // 0012 ADD R3 R3 K3
- 0x7001FFF5, // 0013 JMP #000A
- 0x80000000, // 0014 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: init
-********************************************************************/
-be_local_closure(Matter_Session_Store_init, /* name */
- be_nested_proto(
- 2, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(sessions),
- }),
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[ 4]) { /* code */
- 0x60040012, // 0000 GETGBL R1 G18
- 0x7C040000, // 0001 CALL R1 0
- 0x90020001, // 0002 SETMBR R0 K0 R1
- 0x80000000, // 0003 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: find_session_source_id_unsecure
-********************************************************************/
-be_local_closure(Matter_Session_Store_find_session_source_id_unsecure, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 8]) { /* constants */
- /* K0 */ be_nested_str_weak(get_session_by_source_node_id),
- /* K1 */ be_nested_str_weak(matter),
- /* K2 */ be_nested_str_weak(Session),
- /* K3 */ be_const_int(0),
- /* K4 */ be_nested_str_weak(source_node_id),
- /* K5 */ be_nested_str_weak(sessions),
- /* K6 */ be_nested_str_weak(push),
- /* K7 */ be_nested_str_weak(set_expire_in_seconds),
- }),
- be_str_weak(find_session_source_id_unsecure),
- &be_const_str_solidified,
- ( &(const binstruction[22]) { /* code */
- 0x8C0C0100, // 0000 GETMET R3 R0 K0
- 0x5C140200, // 0001 MOVE R5 R1
- 0x7C0C0400, // 0002 CALL R3 2
- 0x4C100000, // 0003 LDNIL R4
- 0x1C100604, // 0004 EQ R4 R3 R4
- 0x7812000B, // 0005 JMPF R4 #0012
- 0xB8120200, // 0006 GETNGBL R4 K1
- 0x8C100902, // 0007 GETMET R4 R4 K2
- 0x5C180000, // 0008 MOVE R6 R0
- 0x581C0003, // 0009 LDCONST R7 K3
- 0x58200003, // 000A LDCONST R8 K3
- 0x7C100800, // 000B CALL R4 4
- 0x5C0C0800, // 000C MOVE R3 R4
- 0x900E0801, // 000D SETMBR R3 K4 R1
- 0x88100105, // 000E GETMBR R4 R0 K5
- 0x8C100906, // 000F GETMET R4 R4 K6
- 0x5C180600, // 0010 MOVE R6 R3
- 0x7C100400, // 0011 CALL R4 2
- 0x8C100707, // 0012 GETMET R4 R3 K7
- 0x5C180400, // 0013 MOVE R6 R2
- 0x7C100400, // 0014 CALL R4 2
- 0x80040600, // 0015 RET 1 R3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: remove_session
-********************************************************************/
-be_local_closure(Matter_Session_Store_remove_session, /* name */
- be_nested_proto(
- 7, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_const_int(0),
- /* K1 */ be_nested_str_weak(sessions),
- /* K2 */ be_nested_str_weak(remove),
- /* K3 */ be_const_int(1),
- }),
- be_str_weak(remove_session),
- &be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
- 0x58080000, // 0000 LDCONST R2 K0
- 0x880C0101, // 0001 GETMBR R3 R0 K1
- 0x6010000C, // 0002 GETGBL R4 G12
- 0x88140101, // 0003 GETMBR R5 R0 K1
- 0x7C100200, // 0004 CALL R4 1
- 0x14100404, // 0005 LT R4 R2 R4
- 0x78120008, // 0006 JMPF R4 #0010
- 0x94100602, // 0007 GETIDX R4 R3 R2
- 0x1C100801, // 0008 EQ R4 R4 R1
- 0x78120003, // 0009 JMPF R4 #000E
- 0x8C100702, // 000A GETMET R4 R3 K2
- 0x5C180400, // 000B MOVE R6 R2
- 0x7C100400, // 000C CALL R4 2
- 0x70020000, // 000D JMP #000F
- 0x00080503, // 000E ADD R2 R2 K3
- 0x7001FFF1, // 000F JMP #0002
- 0x80000000, // 0010 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: create_session
-********************************************************************/
-be_local_closure(Matter_Session_Store_create_session, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 6]) { /* constants */
- /* K0 */ be_nested_str_weak(get_session_by_local_session_id),
- /* K1 */ be_nested_str_weak(remove_session),
- /* K2 */ be_nested_str_weak(matter),
- /* K3 */ be_nested_str_weak(Session),
- /* K4 */ be_nested_str_weak(sessions),
- /* K5 */ be_nested_str_weak(push),
- }),
- be_str_weak(create_session),
- &be_const_str_solidified,
- ( &(const binstruction[21]) { /* code */
- 0x8C0C0100, // 0000 GETMET R3 R0 K0
- 0x5C140200, // 0001 MOVE R5 R1
- 0x7C0C0400, // 0002 CALL R3 2
- 0x4C100000, // 0003 LDNIL R4
- 0x20100604, // 0004 NE R4 R3 R4
- 0x78120002, // 0005 JMPF R4 #0009
- 0x8C100101, // 0006 GETMET R4 R0 K1
- 0x5C180600, // 0007 MOVE R6 R3
- 0x7C100400, // 0008 CALL R4 2
- 0xB8120400, // 0009 GETNGBL R4 K2
- 0x8C100903, // 000A GETMET R4 R4 K3
- 0x5C180000, // 000B MOVE R6 R0
- 0x5C1C0200, // 000C MOVE R7 R1
- 0x5C200400, // 000D MOVE R8 R2
- 0x7C100800, // 000E CALL R4 4
- 0x5C0C0800, // 000F MOVE R3 R4
- 0x88100104, // 0010 GETMBR R4 R0 K4
- 0x8C100905, // 0011 GETMET R4 R4 K5
- 0x5C180600, // 0012 MOVE R6 R3
- 0x7C100400, // 0013 CALL R4 2
- 0x80040600, // 0014 RET 1 R3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: load
-********************************************************************/
-be_local_closure(Matter_Session_Store_load, /* name */
- be_nested_proto(
- 13, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[22]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(sessions),
- /* K2 */ be_nested_str_weak(FILENAME),
- /* K3 */ be_nested_str_weak(read),
- /* K4 */ be_nested_str_weak(close),
- /* K5 */ be_nested_str_weak(json),
- /* K6 */ be_nested_str_weak(load),
- /* K7 */ be_nested_str_weak(tasmota),
- /* K8 */ be_nested_str_weak(gc),
- /* K9 */ be_nested_str_weak(matter),
- /* K10 */ be_nested_str_weak(Session),
- /* K11 */ be_nested_str_weak(fromjson),
- /* K12 */ be_nested_str_weak(add_session),
- /* K13 */ be_nested_str_weak(stop_iteration),
- /* K14 */ be_nested_str_weak(log),
- /* K15 */ be_nested_str_weak(format),
- /* K16 */ be_nested_str_weak(MTR_X3A_X20Loaded_X20_X25i_X20session_X28s_X29),
- /* K17 */ be_const_int(2),
- /* K18 */ be_nested_str_weak(io_error),
- /* K19 */ be_nested_str_weak(MTR_X3A_X20Session_Store_X3A_X3Aload_X20Exception_X3A),
- /* K20 */ be_nested_str_weak(_X7C),
- /* K21 */ be_nested_str_weak(remove_expired),
- }),
- be_str_weak(load),
- &be_const_str_solidified,
- ( &(const binstruction[76]) { /* code */
- 0xA4060000, // 0000 IMPORT R1 K0
- 0xA8020033, // 0001 EXBLK 0 #0036
- 0x60080012, // 0002 GETGBL R2 G18
- 0x7C080000, // 0003 CALL R2 0
- 0x90020202, // 0004 SETMBR R0 K1 R2
- 0x60080011, // 0005 GETGBL R2 G17
- 0x880C0102, // 0006 GETMBR R3 R0 K2
- 0x7C080200, // 0007 CALL R2 1
- 0x8C0C0503, // 0008 GETMET R3 R2 K3
- 0x7C0C0200, // 0009 CALL R3 1
- 0x8C100504, // 000A GETMET R4 R2 K4
- 0x7C100200, // 000B CALL R4 1
- 0xA4120A00, // 000C IMPORT R4 K5
- 0x8C140906, // 000D GETMET R5 R4 K6
- 0x5C1C0600, // 000E MOVE R7 R3
- 0x7C140400, // 000F CALL R5 2
- 0x4C0C0000, // 0010 LDNIL R3
- 0xB81A0E00, // 0011 GETNGBL R6 K7
- 0x8C180D08, // 0012 GETMET R6 R6 K8
- 0x7C180200, // 0013 CALL R6 1
- 0x60180010, // 0014 GETGBL R6 G16
- 0x5C1C0A00, // 0015 MOVE R7 R5
- 0x7C180200, // 0016 CALL R6 1
- 0xA802000E, // 0017 EXBLK 0 #0027
- 0x5C1C0C00, // 0018 MOVE R7 R6
- 0x7C1C0000, // 0019 CALL R7 0
- 0xB8221200, // 001A GETNGBL R8 K9
- 0x8820110A, // 001B GETMBR R8 R8 K10
- 0x8C20110B, // 001C GETMET R8 R8 K11
- 0x5C280000, // 001D MOVE R10 R0
- 0x5C2C0E00, // 001E MOVE R11 R7
- 0x7C200600, // 001F CALL R8 3
- 0x4C240000, // 0020 LDNIL R9
- 0x20241009, // 0021 NE R9 R8 R9
- 0x78260002, // 0022 JMPF R9 #0026
- 0x8C24010C, // 0023 GETMET R9 R0 K12
- 0x5C2C1000, // 0024 MOVE R11 R8
- 0x7C240400, // 0025 CALL R9 2
- 0x7001FFF0, // 0026 JMP #0018
- 0x5818000D, // 0027 LDCONST R6 K13
- 0xAC180200, // 0028 CATCH R6 1 0
- 0xB0080000, // 0029 RAISE 2 R0 R0
- 0xB81A0E00, // 002A GETNGBL R6 K7
- 0x8C180D0E, // 002B GETMET R6 R6 K14
- 0x8C20030F, // 002C GETMET R8 R1 K15
- 0x58280010, // 002D LDCONST R10 K16
- 0x602C000C, // 002E GETGBL R11 G12
- 0x88300101, // 002F GETMBR R12 R0 K1
- 0x7C2C0200, // 0030 CALL R11 1
- 0x7C200600, // 0031 CALL R8 3
- 0x58240011, // 0032 LDCONST R9 K17
- 0x7C180600, // 0033 CALL R6 3
- 0xA8040001, // 0034 EXBLK 1 1
- 0x70020012, // 0035 JMP #0049
- 0xAC080002, // 0036 CATCH R2 0 2
- 0x7002000F, // 0037 JMP #0048
- 0x20100512, // 0038 NE R4 R2 K18
- 0x7812000C, // 0039 JMPF R4 #0047
- 0xB8120E00, // 003A GETNGBL R4 K7
- 0x8C10090E, // 003B GETMET R4 R4 K14
- 0x60180008, // 003C GETGBL R6 G8
- 0x5C1C0400, // 003D MOVE R7 R2
- 0x7C180200, // 003E CALL R6 1
- 0x001A2606, // 003F ADD R6 K19 R6
- 0x00180D14, // 0040 ADD R6 R6 K20
- 0x601C0008, // 0041 GETGBL R7 G8
- 0x5C200600, // 0042 MOVE R8 R3
- 0x7C1C0200, // 0043 CALL R7 1
- 0x00180C07, // 0044 ADD R6 R6 R7
- 0x581C0011, // 0045 LDCONST R7 K17
- 0x7C100600, // 0046 CALL R4 3
- 0x70020000, // 0047 JMP #0049
- 0xB0080000, // 0048 RAISE 2 R0 R0
- 0x8C080115, // 0049 GETMET R2 R0 K21
- 0x7C080200, // 004A CALL R2 1
- 0x80000000, // 004B RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: get_session_by_source_node_id
-********************************************************************/
-be_local_closure(Matter_Session_Store_get_session_by_source_node_id, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(sessions),
- /* K1 */ be_const_int(0),
- /* K2 */ be_nested_str_weak(source_node_id),
- /* K3 */ be_const_int(1),
- }),
- be_str_weak(get_session_by_source_node_id),
- &be_const_str_solidified,
- ( &(const binstruction[21]) { /* code */
- 0x4C080000, // 0000 LDNIL R2
- 0x1C080202, // 0001 EQ R2 R1 R2
- 0x780A0001, // 0002 JMPF R2 #0005
- 0x4C080000, // 0003 LDNIL R2
- 0x80040400, // 0004 RET 1 R2
- 0x6008000C, // 0005 GETGBL R2 G12
- 0x880C0100, // 0006 GETMBR R3 R0 K0
- 0x7C080200, // 0007 CALL R2 1
- 0x580C0001, // 0008 LDCONST R3 K1
- 0x88100100, // 0009 GETMBR R4 R0 K0
- 0x14140602, // 000A LT R5 R3 R2
- 0x78160007, // 000B JMPF R5 #0014
- 0x94140803, // 000C GETIDX R5 R4 R3
- 0x88140B02, // 000D GETMBR R5 R5 K2
- 0x1C140A01, // 000E EQ R5 R5 R1
- 0x78160001, // 000F JMPF R5 #0012
- 0x94140803, // 0010 GETIDX R5 R4 R3
- 0x80040A00, // 0011 RET 1 R5
- 0x000C0703, // 0012 ADD R3 R3 K3
- 0x7001FFF5, // 0013 JMP #000A
- 0x80000000, // 0014 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified class: Matter_Session_Store
-********************************************************************/
-be_local_class(Matter_Session_Store,
- 1,
- NULL,
- be_nested_map(17,
- ( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(remove_expired, 6), be_const_closure(Matter_Session_Store_remove_expired_closure) },
- { be_const_key_weak(remove_redundant_session, -1), be_const_closure(Matter_Session_Store_remove_redundant_session_closure) },
- { be_const_key_weak(add_session, -1), be_const_closure(Matter_Session_Store_add_session_closure) },
- { be_const_key_weak(sessions, 12), be_const_var(0) },
- { be_const_key_weak(sessions_active, -1), be_const_closure(Matter_Session_Store_sessions_active_closure) },
- { be_const_key_weak(every_second, 9), be_const_closure(Matter_Session_Store_every_second_closure) },
- { be_const_key_weak(find_session_by_resumption_id, -1), be_const_closure(Matter_Session_Store_find_session_by_resumption_id_closure) },
- { be_const_key_weak(load, -1), be_const_closure(Matter_Session_Store_load_closure) },
- { be_const_key_weak(gen_local_session_id, -1), be_const_closure(Matter_Session_Store_gen_local_session_id_closure) },
- { be_const_key_weak(get_session_by_local_session_id, -1), be_const_closure(Matter_Session_Store_get_session_by_local_session_id_closure) },
- { be_const_key_weak(FILENAME, -1), be_nested_str_weak(_matter_sessions_X2Ejson) },
- { be_const_key_weak(save, 10), be_const_closure(Matter_Session_Store_save_closure) },
- { be_const_key_weak(find_session_source_id_unsecure, -1), be_const_closure(Matter_Session_Store_find_session_source_id_unsecure_closure) },
- { be_const_key_weak(remove_session, -1), be_const_closure(Matter_Session_Store_remove_session_closure) },
- { be_const_key_weak(create_session, -1), be_const_closure(Matter_Session_Store_create_session_closure) },
- { be_const_key_weak(init, 7), be_const_closure(Matter_Session_Store_init_closure) },
- { be_const_key_weak(get_session_by_source_node_id, -1), be_const_closure(Matter_Session_Store_get_session_by_source_node_id_closure) },
- })),
- be_str_weak(Matter_Session_Store)
-);
-/*******************************************************************/
-
-void be_load_Matter_Session_Store_class(bvm *vm) {
- be_pushntvclass(vm, &be_class_Matter_Session_Store);
- be_setglobal(vm, "Matter_Session_Store");
- be_pop(vm, 1);
-}
/********************************************************************/
/* End of solidification */
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Session_Store.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Session_Store.h
new file mode 100644
index 000000000..c3abc2b85
--- /dev/null
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Session_Store.h
@@ -0,0 +1,1395 @@
+/* Solidification of Matter_Session_Store.h */
+/********************************************************************\
+* Generated code, don't edit *
+\********************************************************************/
+#include "be_constobj.h"
+
+extern const bclass be_class_Matter_Session_Store;
+
+/********************************************************************
+** Solidified function: gen_local_session_id
+********************************************************************/
+be_local_closure(Matter_Session_Store_gen_local_session_id, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(crypto),
+ /* K1 */ be_nested_str_weak(random),
+ /* K2 */ be_const_int(2),
+ /* K3 */ be_nested_str_weak(get),
+ /* K4 */ be_const_int(0),
+ /* K5 */ be_nested_str_weak(get_session_by_local_session_id),
+ }),
+ be_str_weak(gen_local_session_id),
+ &be_const_str_solidified,
+ ( &(const binstruction[19]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0x50080200, // 0001 LDBOOL R2 1 0
+ 0x780A000E, // 0002 JMPF R2 #0012
+ 0x8C080301, // 0003 GETMET R2 R1 K1
+ 0x58100002, // 0004 LDCONST R4 K2
+ 0x7C080400, // 0005 CALL R2 2
+ 0x8C080503, // 0006 GETMET R2 R2 K3
+ 0x58100004, // 0007 LDCONST R4 K4
+ 0x58140002, // 0008 LDCONST R5 K2
+ 0x7C080600, // 0009 CALL R2 3
+ 0x8C0C0105, // 000A GETMET R3 R0 K5
+ 0x5C140400, // 000B MOVE R5 R2
+ 0x7C0C0400, // 000C CALL R3 2
+ 0x4C100000, // 000D LDNIL R4
+ 0x1C0C0604, // 000E EQ R3 R3 R4
+ 0x780E0000, // 000F JMPF R3 #0011
+ 0x80040400, // 0010 RET 1 R2
+ 0x7001FFEE, // 0011 JMP #0001
+ 0x80000000, // 0012 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: remove_redundant_fabric
+********************************************************************/
+be_local_closure(Matter_Session_Store_remove_redundant_fabric, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(fabrics),
+ /* K2 */ be_nested_str_weak(fabric_id),
+ /* K3 */ be_nested_str_weak(device_id),
+ /* K4 */ be_nested_str_weak(remove),
+ /* K5 */ be_const_int(1),
+ }),
+ be_str_weak(remove_redundant_fabric),
+ &be_const_str_solidified,
+ ( &(const binstruction[26]) { /* code */
+ 0x58080000, // 0000 LDCONST R2 K0
+ 0x600C000C, // 0001 GETGBL R3 G12
+ 0x88100101, // 0002 GETMBR R4 R0 K1
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x140C0403, // 0004 LT R3 R2 R3
+ 0x780E0012, // 0005 JMPF R3 #0019
+ 0x880C0101, // 0006 GETMBR R3 R0 K1
+ 0x940C0602, // 0007 GETIDX R3 R3 R2
+ 0x20100601, // 0008 NE R4 R3 R1
+ 0x7812000C, // 0009 JMPF R4 #0017
+ 0x88100702, // 000A GETMBR R4 R3 K2
+ 0x88140302, // 000B GETMBR R5 R1 K2
+ 0x1C100805, // 000C EQ R4 R4 R5
+ 0x78120008, // 000D JMPF R4 #0017
+ 0x88100703, // 000E GETMBR R4 R3 K3
+ 0x88140303, // 000F GETMBR R5 R1 K3
+ 0x1C100805, // 0010 EQ R4 R4 R5
+ 0x78120004, // 0011 JMPF R4 #0017
+ 0x88100101, // 0012 GETMBR R4 R0 K1
+ 0x8C100904, // 0013 GETMET R4 R4 K4
+ 0x5C180400, // 0014 MOVE R6 R2
+ 0x7C100400, // 0015 CALL R4 2
+ 0x70020000, // 0016 JMP #0018
+ 0x00080505, // 0017 ADD R2 R2 K5
+ 0x7001FFE7, // 0018 JMP #0001
+ 0x80000000, // 0019 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: find_session_by_resumption_id
+********************************************************************/
+be_local_closure(Matter_Session_Store_find_session_by_resumption_id, /* name */
+ be_nested_proto(
+ 14, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[12]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_const_int(0),
+ /* K2 */ be_nested_str_weak(sessions),
+ /* K3 */ be_nested_str_weak(tasmota),
+ /* K4 */ be_nested_str_weak(log),
+ /* K5 */ be_nested_str_weak(format),
+ /* K6 */ be_nested_str_weak(MTR_X3A_X20session_X2Eresumption_id_X3D_X25s_X20vs_X20_X25s),
+ /* K7 */ be_nested_str_weak(resumption_id),
+ /* K8 */ be_nested_str_weak(shared_secret),
+ /* K9 */ be_nested_str_weak(MTR_X3A_X20session_X2Eshared_secret_X3D_X25s),
+ /* K10 */ be_nested_str_weak(update),
+ /* K11 */ be_const_int(1),
+ }),
+ be_str_weak(find_session_by_resumption_id),
+ &be_const_str_solidified,
+ ( &(const binstruction[47]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0x5C0C0200, // 0001 MOVE R3 R1
+ 0x740E0001, // 0002 JMPT R3 #0005
+ 0x4C0C0000, // 0003 LDNIL R3
+ 0x80040600, // 0004 RET 1 R3
+ 0x580C0001, // 0005 LDCONST R3 K1
+ 0x88100102, // 0006 GETMBR R4 R0 K2
+ 0x6014000C, // 0007 GETGBL R5 G12
+ 0x5C180800, // 0008 MOVE R6 R4
+ 0x7C140200, // 0009 CALL R5 1
+ 0x14140605, // 000A LT R5 R3 R5
+ 0x78160021, // 000B JMPF R5 #002E
+ 0x94140803, // 000C GETIDX R5 R4 R3
+ 0xB81A0600, // 000D GETNGBL R6 K3
+ 0x8C180D04, // 000E GETMET R6 R6 K4
+ 0x8C200505, // 000F GETMET R8 R2 K5
+ 0x58280006, // 0010 LDCONST R10 K6
+ 0x602C0008, // 0011 GETGBL R11 G8
+ 0x88300B07, // 0012 GETMBR R12 R5 K7
+ 0x7C2C0200, // 0013 CALL R11 1
+ 0x60300008, // 0014 GETGBL R12 G8
+ 0x5C340200, // 0015 MOVE R13 R1
+ 0x7C300200, // 0016 CALL R12 1
+ 0x7C200800, // 0017 CALL R8 4
+ 0x7C180400, // 0018 CALL R6 2
+ 0x88180B07, // 0019 GETMBR R6 R5 K7
+ 0x1C180C01, // 001A EQ R6 R6 R1
+ 0x781A000F, // 001B JMPF R6 #002C
+ 0x88180B08, // 001C GETMBR R6 R5 K8
+ 0x4C1C0000, // 001D LDNIL R7
+ 0x20180C07, // 001E NE R6 R6 R7
+ 0x781A000B, // 001F JMPF R6 #002C
+ 0xB81A0600, // 0020 GETNGBL R6 K3
+ 0x8C180D04, // 0021 GETMET R6 R6 K4
+ 0x8C200505, // 0022 GETMET R8 R2 K5
+ 0x58280009, // 0023 LDCONST R10 K9
+ 0x602C0008, // 0024 GETGBL R11 G8
+ 0x88300B08, // 0025 GETMBR R12 R5 K8
+ 0x7C2C0200, // 0026 CALL R11 1
+ 0x7C200600, // 0027 CALL R8 3
+ 0x7C180400, // 0028 CALL R6 2
+ 0x8C180B0A, // 0029 GETMET R6 R5 K10
+ 0x7C180200, // 002A CALL R6 1
+ 0x80040A00, // 002B RET 1 R5
+ 0x000C070B, // 002C ADD R3 R3 K11
+ 0x7001FFD8, // 002D JMP #0007
+ 0x80000000, // 002E RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: remove_fabric
+********************************************************************/
+be_local_closure(Matter_Session_Store_remove_fabric, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(sessions),
+ /* K2 */ be_nested_str_weak(_fabric),
+ /* K3 */ be_nested_str_weak(remove),
+ /* K4 */ be_const_int(1),
+ /* K5 */ be_nested_str_weak(fabrics),
+ /* K6 */ be_nested_str_weak(find),
+ }),
+ be_str_weak(remove_fabric),
+ &be_const_str_solidified,
+ ( &(const binstruction[26]) { /* code */
+ 0x58080000, // 0000 LDCONST R2 K0
+ 0x600C000C, // 0001 GETGBL R3 G12
+ 0x88100101, // 0002 GETMBR R4 R0 K1
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x140C0403, // 0004 LT R3 R2 R3
+ 0x780E000B, // 0005 JMPF R3 #0012
+ 0x880C0101, // 0006 GETMBR R3 R0 K1
+ 0x940C0602, // 0007 GETIDX R3 R3 R2
+ 0x880C0702, // 0008 GETMBR R3 R3 K2
+ 0x1C0C0601, // 0009 EQ R3 R3 R1
+ 0x780E0004, // 000A JMPF R3 #0010
+ 0x880C0101, // 000B GETMBR R3 R0 K1
+ 0x8C0C0703, // 000C GETMET R3 R3 K3
+ 0x5C140400, // 000D MOVE R5 R2
+ 0x7C0C0400, // 000E CALL R3 2
+ 0x70020000, // 000F JMP #0011
+ 0x00080504, // 0010 ADD R2 R2 K4
+ 0x7001FFEE, // 0011 JMP #0001
+ 0x880C0105, // 0012 GETMBR R3 R0 K5
+ 0x8C0C0703, // 0013 GETMET R3 R3 K3
+ 0x88140105, // 0014 GETMBR R5 R0 K5
+ 0x8C140B06, // 0015 GETMET R5 R5 K6
+ 0x5C1C0200, // 0016 MOVE R7 R1
+ 0x7C140400, // 0017 CALL R5 2
+ 0x7C0C0400, // 0018 CALL R3 2
+ 0x80000000, // 0019 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: find_session_source_id_unsecure
+********************************************************************/
+be_local_closure(Matter_Session_Store_find_session_source_id_unsecure, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 9]) { /* constants */
+ /* K0 */ be_nested_str_weak(get_session_by_source_node_id),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(Session),
+ /* K3 */ be_const_int(0),
+ /* K4 */ be_nested_str_weak(_source_node_id),
+ /* K5 */ be_nested_str_weak(sessions),
+ /* K6 */ be_nested_str_weak(push),
+ /* K7 */ be_nested_str_weak(set_expire_in_seconds),
+ /* K8 */ be_nested_str_weak(update),
+ }),
+ be_str_weak(find_session_source_id_unsecure),
+ &be_const_str_solidified,
+ ( &(const binstruction[24]) { /* code */
+ 0x8C0C0100, // 0000 GETMET R3 R0 K0
+ 0x5C140200, // 0001 MOVE R5 R1
+ 0x7C0C0400, // 0002 CALL R3 2
+ 0x4C100000, // 0003 LDNIL R4
+ 0x1C100604, // 0004 EQ R4 R3 R4
+ 0x7812000E, // 0005 JMPF R4 #0015
+ 0xB8120200, // 0006 GETNGBL R4 K1
+ 0x8C100902, // 0007 GETMET R4 R4 K2
+ 0x5C180000, // 0008 MOVE R6 R0
+ 0x581C0003, // 0009 LDCONST R7 K3
+ 0x58200003, // 000A LDCONST R8 K3
+ 0x7C100800, // 000B CALL R4 4
+ 0x5C0C0800, // 000C MOVE R3 R4
+ 0x900E0801, // 000D SETMBR R3 K4 R1
+ 0x88100105, // 000E GETMBR R4 R0 K5
+ 0x8C100906, // 000F GETMET R4 R4 K6
+ 0x5C180600, // 0010 MOVE R6 R3
+ 0x7C100400, // 0011 CALL R4 2
+ 0x8C100707, // 0012 GETMET R4 R3 K7
+ 0x5C180400, // 0013 MOVE R6 R2
+ 0x7C100400, // 0014 CALL R4 2
+ 0x8C100708, // 0015 GETMET R4 R3 K8
+ 0x7C100200, // 0016 CALL R4 1
+ 0x80040600, // 0017 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_session_by_source_node_id
+********************************************************************/
+be_local_closure(Matter_Session_Store_get_session_by_source_node_id, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(sessions),
+ /* K1 */ be_const_int(0),
+ /* K2 */ be_nested_str_weak(_source_node_id),
+ /* K3 */ be_nested_str_weak(update),
+ /* K4 */ be_const_int(1),
+ }),
+ be_str_weak(get_session_by_source_node_id),
+ &be_const_str_solidified,
+ ( &(const binstruction[22]) { /* code */
+ 0x4C080000, // 0000 LDNIL R2
+ 0x1C080202, // 0001 EQ R2 R1 R2
+ 0x780A0001, // 0002 JMPF R2 #0005
+ 0x4C080000, // 0003 LDNIL R2
+ 0x80040400, // 0004 RET 1 R2
+ 0x6008000C, // 0005 GETGBL R2 G12
+ 0x880C0100, // 0006 GETMBR R3 R0 K0
+ 0x7C080200, // 0007 CALL R2 1
+ 0x580C0001, // 0008 LDCONST R3 K1
+ 0x88100100, // 0009 GETMBR R4 R0 K0
+ 0x14140602, // 000A LT R5 R3 R2
+ 0x78160008, // 000B JMPF R5 #0015
+ 0x94140803, // 000C GETIDX R5 R4 R3
+ 0x88180B02, // 000D GETMBR R6 R5 K2
+ 0x1C180C01, // 000E EQ R6 R6 R1
+ 0x781A0002, // 000F JMPF R6 #0013
+ 0x8C180B03, // 0010 GETMET R6 R5 K3
+ 0x7C180200, // 0011 CALL R6 1
+ 0x80040A00, // 0012 RET 1 R5
+ 0x000C0704, // 0013 ADD R3 R3 K4
+ 0x7001FFF4, // 0014 JMP #000A
+ 0x80000000, // 0015 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: add_session
+********************************************************************/
+be_local_closure(Matter_Session_Store_add_session, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(set_expire_in_seconds),
+ /* K1 */ be_nested_str_weak(sessions),
+ /* K2 */ be_nested_str_weak(push),
+ }),
+ be_str_weak(add_session),
+ &be_const_str_solidified,
+ ( &(const binstruction[11]) { /* code */
+ 0x4C0C0000, // 0000 LDNIL R3
+ 0x200C0403, // 0001 NE R3 R2 R3
+ 0x780E0002, // 0002 JMPF R3 #0006
+ 0x8C0C0300, // 0003 GETMET R3 R1 K0
+ 0x5C140400, // 0004 MOVE R5 R2
+ 0x7C0C0400, // 0005 CALL R3 2
+ 0x880C0101, // 0006 GETMBR R3 R0 K1
+ 0x8C0C0702, // 0007 GETMET R3 R3 K2
+ 0x5C140200, // 0008 MOVE R5 R1
+ 0x7C0C0400, // 0009 CALL R3 2
+ 0x80000000, // 000A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: count_active_fabrics
+********************************************************************/
+be_local_closure(Matter_Session_Store_count_active_fabrics, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(remove_expired),
+ /* K1 */ be_nested_str_weak(fabrics),
+ /* K2 */ be_nested_str_weak(count_persistables),
+ }),
+ be_str_weak(count_active_fabrics),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0x8C040100, // 0000 GETMET R1 R0 K0
+ 0x7C040200, // 0001 CALL R1 1
+ 0x88040101, // 0002 GETMBR R1 R0 K1
+ 0x8C040302, // 0003 GETMET R1 R1 K2
+ 0x7C040200, // 0004 CALL R1 1
+ 0x80040200, // 0005 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: remove_expired
+********************************************************************/
+be_local_closure(Matter_Session_Store_remove_expired, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(sessions),
+ /* K1 */ be_nested_str_weak(every_second),
+ /* K2 */ be_nested_str_weak(fabrics),
+ }),
+ be_str_weak(remove_expired),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x88040102, // 0003 GETMBR R1 R0 K2
+ 0x8C040301, // 0004 GETMET R1 R1 K1
+ 0x7C040200, // 0005 CALL R1 1
+ 0x80000000, // 0006 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: find_children_fabrics
+********************************************************************/
+be_local_closure(Matter_Session_Store_find_children_fabrics, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 1]) {
+ be_nested_proto(
+ 7, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 3]) { /* upvals */
+ be_local_const_upval(1, 0),
+ be_local_const_upval(1, 2),
+ be_local_const_upval(1, 3),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(active_fabrics),
+ /* K1 */ be_nested_str_weak(fabric_parent),
+ /* K2 */ be_nested_str_weak(find),
+ /* K3 */ be_nested_str_weak(fabric_index),
+ /* K4 */ be_nested_str_weak(push),
+ /* K5 */ be_nested_str_weak(stop_iteration),
+ }),
+ be_str_weak(find_children_fabrics_inner),
+ &be_const_str_solidified,
+ ( &(const binstruction[30]) { /* code */
+ 0x60040010, // 0000 GETGBL R1 G16
+ 0x68080000, // 0001 GETUPV R2 U0
+ 0x8C080500, // 0002 GETMET R2 R2 K0
+ 0x7C080200, // 0003 CALL R2 1
+ 0x7C040200, // 0004 CALL R1 1
+ 0xA8020013, // 0005 EXBLK 0 #001A
+ 0x5C080200, // 0006 MOVE R2 R1
+ 0x7C080000, // 0007 CALL R2 0
+ 0x880C0501, // 0008 GETMBR R3 R2 K1
+ 0x1C0C0600, // 0009 EQ R3 R3 R0
+ 0x780E000D, // 000A JMPF R3 #0019
+ 0x680C0001, // 000B GETUPV R3 U1
+ 0x8C0C0702, // 000C GETMET R3 R3 K2
+ 0x7C0C0200, // 000D CALL R3 1
+ 0x4C100000, // 000E LDNIL R4
+ 0x1C0C0604, // 000F EQ R3 R3 R4
+ 0x780E0007, // 0010 JMPF R3 #0019
+ 0x880C0503, // 0011 GETMBR R3 R2 K3
+ 0x68100001, // 0012 GETUPV R4 U1
+ 0x8C100904, // 0013 GETMET R4 R4 K4
+ 0x5C180600, // 0014 MOVE R6 R3
+ 0x7C100400, // 0015 CALL R4 2
+ 0x68100002, // 0016 GETUPV R4 U2
+ 0x5C140600, // 0017 MOVE R5 R3
+ 0x7C100200, // 0018 CALL R4 1
+ 0x7001FFEB, // 0019 JMP #0006
+ 0x58040005, // 001A LDCONST R1 K5
+ 0xAC040200, // 001B CATCH R1 1 0
+ 0xB0080000, // 001C RAISE 2 R0 R0
+ 0x80000000, // 001D RET 0
+ })
+ ),
+ }),
+ 0, /* has constants */
+ NULL, /* no const */
+ be_str_weak(find_children_fabrics),
+ &be_const_str_solidified,
+ ( &(const binstruction[15]) { /* code */
+ 0x4C080000, // 0000 LDNIL R2
+ 0x1C080202, // 0001 EQ R2 R1 R2
+ 0x780A0002, // 0002 JMPF R2 #0006
+ 0x60080012, // 0003 GETGBL R2 G18
+ 0x7C080000, // 0004 CALL R2 0
+ 0x80040400, // 0005 RET 1 R2
+ 0x60080012, // 0006 GETGBL R2 G18
+ 0x7C080000, // 0007 CALL R2 0
+ 0x400C0401, // 0008 CONNECT R3 R2 R1
+ 0x840C0000, // 0009 CLOSURE R3 P0
+ 0x5C100600, // 000A MOVE R4 R3
+ 0x5C140200, // 000B MOVE R5 R1
+ 0x7C100200, // 000C CALL R4 1
+ 0xA0000000, // 000D CLOSE R0
+ 0x80040400, // 000E RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: find_fabric_by_index
+********************************************************************/
+be_local_closure(Matter_Session_Store_find_fabric_by_index, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(active_fabrics),
+ /* K1 */ be_nested_str_weak(get_fabric_index),
+ /* K2 */ be_nested_str_weak(stop_iteration),
+ }),
+ be_str_weak(find_fabric_by_index),
+ &be_const_str_solidified,
+ ( &(const binstruction[19]) { /* code */
+ 0x60080010, // 0000 GETGBL R2 G16
+ 0x8C0C0100, // 0001 GETMET R3 R0 K0
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0x7C080200, // 0003 CALL R2 1
+ 0xA8020008, // 0004 EXBLK 0 #000E
+ 0x5C0C0400, // 0005 MOVE R3 R2
+ 0x7C0C0000, // 0006 CALL R3 0
+ 0x8C100701, // 0007 GETMET R4 R3 K1
+ 0x7C100200, // 0008 CALL R4 1
+ 0x1C100801, // 0009 EQ R4 R4 R1
+ 0x78120001, // 000A JMPF R4 #000D
+ 0xA8040001, // 000B EXBLK 1 1
+ 0x80040600, // 000C RET 1 R3
+ 0x7001FFF6, // 000D JMP #0005
+ 0x58080002, // 000E LDCONST R2 K2
+ 0xAC080200, // 000F CATCH R2 1 0
+ 0xB0080000, // 0010 RAISE 2 R0 R0
+ 0x4C080000, // 0011 LDNIL R2
+ 0x80040400, // 0012 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: next_fabric_idx
+********************************************************************/
+be_local_closure(Matter_Session_Store_next_fabric_idx, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(remove_expired),
+ /* K1 */ be_const_int(1),
+ /* K2 */ be_nested_str_weak(active_fabrics),
+ /* K3 */ be_nested_str_weak(fabric_index),
+ /* K4 */ be_nested_str_weak(int),
+ /* K5 */ be_nested_str_weak(stop_iteration),
+ }),
+ be_str_weak(next_fabric_idx),
+ &be_const_str_solidified,
+ ( &(const binstruction[25]) { /* code */
+ 0x8C040100, // 0000 GETMET R1 R0 K0
+ 0x7C040200, // 0001 CALL R1 1
+ 0x58040001, // 0002 LDCONST R1 K1
+ 0x60080010, // 0003 GETGBL R2 G16
+ 0x8C0C0102, // 0004 GETMET R3 R0 K2
+ 0x7C0C0200, // 0005 CALL R3 1
+ 0x7C080200, // 0006 CALL R2 1
+ 0xA802000C, // 0007 EXBLK 0 #0015
+ 0x5C0C0400, // 0008 MOVE R3 R2
+ 0x7C0C0000, // 0009 CALL R3 0
+ 0x88100703, // 000A GETMBR R4 R3 K3
+ 0x60140004, // 000B GETGBL R5 G4
+ 0x5C180800, // 000C MOVE R6 R4
+ 0x7C140200, // 000D CALL R5 1
+ 0x1C140B04, // 000E EQ R5 R5 K4
+ 0x78160003, // 000F JMPF R5 #0014
+ 0x28140801, // 0010 GE R5 R4 R1
+ 0x78160001, // 0011 JMPF R5 #0014
+ 0x00140901, // 0012 ADD R5 R4 K1
+ 0x5C040A00, // 0013 MOVE R1 R5
+ 0x7001FFF2, // 0014 JMP #0008
+ 0x58080005, // 0015 LDCONST R2 K5
+ 0xAC080200, // 0016 CATCH R2 1 0
+ 0xB0080000, // 0017 RAISE 2 R0 R0
+ 0x80040200, // 0018 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_session_by_local_session_id
+********************************************************************/
+be_local_closure(Matter_Session_Store_get_session_by_local_session_id, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(sessions),
+ /* K1 */ be_const_int(0),
+ /* K2 */ be_nested_str_weak(local_session_id),
+ /* K3 */ be_nested_str_weak(update),
+ /* K4 */ be_const_int(1),
+ }),
+ be_str_weak(get_session_by_local_session_id),
+ &be_const_str_solidified,
+ ( &(const binstruction[22]) { /* code */
+ 0x4C080000, // 0000 LDNIL R2
+ 0x1C080202, // 0001 EQ R2 R1 R2
+ 0x780A0001, // 0002 JMPF R2 #0005
+ 0x4C080000, // 0003 LDNIL R2
+ 0x80040400, // 0004 RET 1 R2
+ 0x6008000C, // 0005 GETGBL R2 G12
+ 0x880C0100, // 0006 GETMBR R3 R0 K0
+ 0x7C080200, // 0007 CALL R2 1
+ 0x580C0001, // 0008 LDCONST R3 K1
+ 0x88100100, // 0009 GETMBR R4 R0 K0
+ 0x14140602, // 000A LT R5 R3 R2
+ 0x78160008, // 000B JMPF R5 #0015
+ 0x94140803, // 000C GETIDX R5 R4 R3
+ 0x88180B02, // 000D GETMBR R6 R5 K2
+ 0x1C180C01, // 000E EQ R6 R6 R1
+ 0x781A0002, // 000F JMPF R6 #0013
+ 0x8C180B03, // 0010 GETMET R6 R5 K3
+ 0x7C180200, // 0011 CALL R6 1
+ 0x80040A00, // 0012 RET 1 R5
+ 0x000C0704, // 0013 ADD R3 R3 K4
+ 0x7001FFF4, // 0014 JMP #000A
+ 0x80000000, // 0015 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: active_fabrics
+********************************************************************/
+be_local_closure(Matter_Session_Store_active_fabrics, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(remove_expired),
+ /* K1 */ be_nested_str_weak(fabrics),
+ /* K2 */ be_nested_str_weak(persistables),
+ }),
+ be_str_weak(active_fabrics),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0x8C040100, // 0000 GETMET R1 R0 K0
+ 0x7C040200, // 0001 CALL R1 1
+ 0x88040101, // 0002 GETMBR R1 R0 K1
+ 0x8C040302, // 0003 GETMET R1 R1 K2
+ 0x7C040200, // 0004 CALL R1 1
+ 0x80040200, // 0005 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: every_second
+********************************************************************/
+be_local_closure(Matter_Session_Store_every_second, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(remove_expired),
+ }),
+ be_str_weak(every_second),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x8C040100, // 0000 GETMET R1 R0 K0
+ 0x7C040200, // 0001 CALL R1 1
+ 0x80000000, // 0002 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: remove_session
+********************************************************************/
+be_local_closure(Matter_Session_Store_remove_session, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(sessions),
+ /* K2 */ be_nested_str_weak(remove),
+ /* K3 */ be_const_int(1),
+ }),
+ be_str_weak(remove_session),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0x58080000, // 0000 LDCONST R2 K0
+ 0x880C0101, // 0001 GETMBR R3 R0 K1
+ 0x6010000C, // 0002 GETGBL R4 G12
+ 0x88140101, // 0003 GETMBR R5 R0 K1
+ 0x7C100200, // 0004 CALL R4 1
+ 0x14100404, // 0005 LT R4 R2 R4
+ 0x78120008, // 0006 JMPF R4 #0010
+ 0x94100602, // 0007 GETIDX R4 R3 R2
+ 0x1C100801, // 0008 EQ R4 R4 R1
+ 0x78120003, // 0009 JMPF R4 #000E
+ 0x8C100702, // 000A GETMET R4 R3 K2
+ 0x5C180400, // 000B MOVE R6 R2
+ 0x7C100400, // 000C CALL R4 2
+ 0x70020000, // 000D JMP #000F
+ 0x00080503, // 000E ADD R2 R2 K3
+ 0x7001FFF1, // 000F JMP #0002
+ 0x80000000, // 0010 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_Session_Store_init, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(sessions),
+ /* K1 */ be_nested_str_weak(matter),
+ /* K2 */ be_nested_str_weak(Expirable_list),
+ /* K3 */ be_nested_str_weak(fabrics),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0xB8060200, // 0000 GETNGBL R1 K1
+ 0x8C040302, // 0001 GETMET R1 R1 K2
+ 0x7C040200, // 0002 CALL R1 1
+ 0x90020001, // 0003 SETMBR R0 K0 R1
+ 0xB8060200, // 0004 GETNGBL R1 K1
+ 0x8C040302, // 0005 GETMET R1 R1 K2
+ 0x7C040200, // 0006 CALL R1 1
+ 0x90020601, // 0007 SETMBR R0 K3 R1
+ 0x80000000, // 0008 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: create_session
+********************************************************************/
+be_local_closure(Matter_Session_Store_create_session, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(get_session_by_local_session_id),
+ /* K1 */ be_nested_str_weak(remove_session),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(Session),
+ /* K4 */ be_nested_str_weak(sessions),
+ /* K5 */ be_nested_str_weak(push),
+ }),
+ be_str_weak(create_session),
+ &be_const_str_solidified,
+ ( &(const binstruction[21]) { /* code */
+ 0x8C0C0100, // 0000 GETMET R3 R0 K0
+ 0x5C140200, // 0001 MOVE R5 R1
+ 0x7C0C0400, // 0002 CALL R3 2
+ 0x4C100000, // 0003 LDNIL R4
+ 0x20100604, // 0004 NE R4 R3 R4
+ 0x78120002, // 0005 JMPF R4 #0009
+ 0x8C100101, // 0006 GETMET R4 R0 K1
+ 0x5C180600, // 0007 MOVE R6 R3
+ 0x7C100400, // 0008 CALL R4 2
+ 0xB8120400, // 0009 GETNGBL R4 K2
+ 0x8C100903, // 000A GETMET R4 R4 K3
+ 0x5C180000, // 000B MOVE R6 R0
+ 0x5C1C0200, // 000C MOVE R7 R1
+ 0x5C200400, // 000D MOVE R8 R2
+ 0x7C100800, // 000E CALL R4 4
+ 0x5C0C0800, // 000F MOVE R3 R4
+ 0x88100104, // 0010 GETMBR R4 R0 K4
+ 0x8C100905, // 0011 GETMET R4 R4 K5
+ 0x5C180600, // 0012 MOVE R6 R3
+ 0x7C100400, // 0013 CALL R4 2
+ 0x80040600, // 0014 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: save_fabrics
+********************************************************************/
+be_local_closure(Matter_Session_Store_save_fabrics, /* name */
+ be_nested_proto(
+ 14, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[26]) { /* constants */
+ /* K0 */ be_nested_str_weak(json),
+ /* K1 */ be_nested_str_weak(remove_expired),
+ /* K2 */ be_const_int(0),
+ /* K3 */ be_nested_str_weak(fabrics),
+ /* K4 */ be_nested_str_weak(persistables),
+ /* K5 */ be_nested_str_weak(_sessions),
+ /* K6 */ be_const_int(1),
+ /* K7 */ be_nested_str_weak(stop_iteration),
+ /* K8 */ be_nested_str_weak(push),
+ /* K9 */ be_nested_str_weak(tojson),
+ /* K10 */ be_nested_str_weak(_X5B),
+ /* K11 */ be_nested_str_weak(concat),
+ /* K12 */ be_nested_str_weak(_X2C),
+ /* K13 */ be_nested_str_weak(_X5D),
+ /* K14 */ be_nested_str_weak(string),
+ /* K15 */ be_nested_str_weak(_FABRICS),
+ /* K16 */ be_nested_str_weak(w),
+ /* K17 */ be_nested_str_weak(write),
+ /* K18 */ be_nested_str_weak(close),
+ /* K19 */ be_nested_str_weak(tasmota),
+ /* K20 */ be_nested_str_weak(log),
+ /* K21 */ be_nested_str_weak(format),
+ /* K22 */ be_nested_str_weak(MTR_X3A_X20_X3DSaved_X20_X20_X20_X20_X20_X25i_X20fabric_X28s_X29_X20and_X20_X25i_X20session_X28s_X29),
+ /* K23 */ be_const_int(2),
+ /* K24 */ be_nested_str_weak(MTR_X3A_X20Session_Store_X3A_X3Asave_X20Exception_X3A),
+ /* K25 */ be_nested_str_weak(_X7C),
+ }),
+ be_str_weak(save_fabrics),
+ &be_const_str_solidified,
+ ( &(const binstruction[84]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0x8C080101, // 0001 GETMET R2 R0 K1
+ 0x7C080200, // 0002 CALL R2 1
+ 0x58080002, // 0003 LDCONST R2 K2
+ 0x600C0012, // 0004 GETGBL R3 G18
+ 0x7C0C0000, // 0005 CALL R3 0
+ 0x60100010, // 0006 GETGBL R4 G16
+ 0x88140103, // 0007 GETMBR R5 R0 K3
+ 0x8C140B04, // 0008 GETMET R5 R5 K4
+ 0x7C140200, // 0009 CALL R5 1
+ 0x7C100200, // 000A CALL R4 1
+ 0xA8020013, // 000B EXBLK 0 #0020
+ 0x5C140800, // 000C MOVE R5 R4
+ 0x7C140000, // 000D CALL R5 0
+ 0x60180010, // 000E GETGBL R6 G16
+ 0x881C0B05, // 000F GETMBR R7 R5 K5
+ 0x8C1C0F04, // 0010 GETMET R7 R7 K4
+ 0x7C1C0200, // 0011 CALL R7 1
+ 0x7C180200, // 0012 CALL R6 1
+ 0xA8020003, // 0013 EXBLK 0 #0018
+ 0x5C1C0C00, // 0014 MOVE R7 R6
+ 0x7C1C0000, // 0015 CALL R7 0
+ 0x00080506, // 0016 ADD R2 R2 K6
+ 0x7001FFFB, // 0017 JMP #0014
+ 0x58180007, // 0018 LDCONST R6 K7
+ 0xAC180200, // 0019 CATCH R6 1 0
+ 0xB0080000, // 001A RAISE 2 R0 R0
+ 0x8C180708, // 001B GETMET R6 R3 K8
+ 0x8C200B09, // 001C GETMET R8 R5 K9
+ 0x7C200200, // 001D CALL R8 1
+ 0x7C180400, // 001E CALL R6 2
+ 0x7001FFEB, // 001F JMP #000C
+ 0x58100007, // 0020 LDCONST R4 K7
+ 0xAC100200, // 0021 CATCH R4 1 0
+ 0xB0080000, // 0022 RAISE 2 R0 R0
+ 0x6010000C, // 0023 GETGBL R4 G12
+ 0x5C140600, // 0024 MOVE R5 R3
+ 0x7C100200, // 0025 CALL R4 1
+ 0x8C14070B, // 0026 GETMET R5 R3 K11
+ 0x581C000C, // 0027 LDCONST R7 K12
+ 0x7C140400, // 0028 CALL R5 2
+ 0x00161405, // 0029 ADD R5 K10 R5
+ 0x00140B0D, // 002A ADD R5 R5 K13
+ 0x5C0C0A00, // 002B MOVE R3 R5
+ 0xA8020014, // 002C EXBLK 0 #0042
+ 0xA4161C00, // 002D IMPORT R5 K14
+ 0x60180011, // 002E GETGBL R6 G17
+ 0x881C010F, // 002F GETMBR R7 R0 K15
+ 0x58200010, // 0030 LDCONST R8 K16
+ 0x7C180400, // 0031 CALL R6 2
+ 0x8C1C0D11, // 0032 GETMET R7 R6 K17
+ 0x5C240600, // 0033 MOVE R9 R3
+ 0x7C1C0400, // 0034 CALL R7 2
+ 0x8C1C0D12, // 0035 GETMET R7 R6 K18
+ 0x7C1C0200, // 0036 CALL R7 1
+ 0xB81E2600, // 0037 GETNGBL R7 K19
+ 0x8C1C0F14, // 0038 GETMET R7 R7 K20
+ 0x8C240B15, // 0039 GETMET R9 R5 K21
+ 0x582C0016, // 003A LDCONST R11 K22
+ 0x5C300800, // 003B MOVE R12 R4
+ 0x5C340400, // 003C MOVE R13 R2
+ 0x7C240800, // 003D CALL R9 4
+ 0x58280017, // 003E LDCONST R10 K23
+ 0x7C1C0600, // 003F CALL R7 3
+ 0xA8040001, // 0040 EXBLK 1 1
+ 0x70020010, // 0041 JMP #0053
+ 0xAC140002, // 0042 CATCH R5 0 2
+ 0x7002000D, // 0043 JMP #0052
+ 0xB81E2600, // 0044 GETNGBL R7 K19
+ 0x8C1C0F14, // 0045 GETMET R7 R7 K20
+ 0x60240008, // 0046 GETGBL R9 G8
+ 0x5C280A00, // 0047 MOVE R10 R5
+ 0x7C240200, // 0048 CALL R9 1
+ 0x00263009, // 0049 ADD R9 K24 R9
+ 0x00241319, // 004A ADD R9 R9 K25
+ 0x60280008, // 004B GETGBL R10 G8
+ 0x5C2C0C00, // 004C MOVE R11 R6
+ 0x7C280200, // 004D CALL R10 1
+ 0x0024120A, // 004E ADD R9 R9 R10
+ 0x58280017, // 004F LDCONST R10 K23
+ 0x7C1C0600, // 0050 CALL R7 3
+ 0x70020000, // 0051 JMP #0053
+ 0xB0080000, // 0052 RAISE 2 R0 R0
+ 0x80000000, // 0053 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: load_fabrics
+********************************************************************/
+be_local_closure(Matter_Session_Store_load_fabrics, /* name */
+ be_nested_proto(
+ 17, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[29]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(sessions),
+ /* K2 */ be_nested_str_weak(matter),
+ /* K3 */ be_nested_str_weak(Expirable_list),
+ /* K4 */ be_nested_str_weak(fabrics),
+ /* K5 */ be_nested_str_weak(_FABRICS),
+ /* K6 */ be_nested_str_weak(read),
+ /* K7 */ be_nested_str_weak(close),
+ /* K8 */ be_nested_str_weak(json),
+ /* K9 */ be_nested_str_weak(load),
+ /* K10 */ be_nested_str_weak(tasmota),
+ /* K11 */ be_nested_str_weak(gc),
+ /* K12 */ be_nested_str_weak(Fabric),
+ /* K13 */ be_nested_str_weak(fromjson),
+ /* K14 */ be_nested_str_weak(set_no_expiration),
+ /* K15 */ be_nested_str_weak(set_persist),
+ /* K16 */ be_nested_str_weak(find),
+ /* K17 */ be_nested_str_weak(_sessions),
+ /* K18 */ be_nested_str_weak(Session),
+ /* K19 */ be_nested_str_weak(add_session),
+ /* K20 */ be_nested_str_weak(stop_iteration),
+ /* K21 */ be_nested_str_weak(push),
+ /* K22 */ be_nested_str_weak(log),
+ /* K23 */ be_nested_str_weak(format),
+ /* K24 */ be_nested_str_weak(MTR_X3A_X20Loaded_X20_X25i_X20fabric_X28s_X29),
+ /* K25 */ be_const_int(2),
+ /* K26 */ be_nested_str_weak(io_error),
+ /* K27 */ be_nested_str_weak(MTR_X3A_X20Session_Store_X3A_X3Aload_X20Exception_X3A),
+ /* K28 */ be_nested_str_weak(_X7C),
+ }),
+ be_str_weak(load_fabrics),
+ &be_const_str_solidified,
+ ( &(const binstruction[118]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0xA802005F, // 0001 EXBLK 0 #0062
+ 0xB80A0400, // 0002 GETNGBL R2 K2
+ 0x8C080503, // 0003 GETMET R2 R2 K3
+ 0x7C080200, // 0004 CALL R2 1
+ 0x90020202, // 0005 SETMBR R0 K1 R2
+ 0xB80A0400, // 0006 GETNGBL R2 K2
+ 0x8C080503, // 0007 GETMET R2 R2 K3
+ 0x7C080200, // 0008 CALL R2 1
+ 0x90020802, // 0009 SETMBR R0 K4 R2
+ 0x60080011, // 000A GETGBL R2 G17
+ 0x880C0105, // 000B GETMBR R3 R0 K5
+ 0x7C080200, // 000C CALL R2 1
+ 0x8C0C0506, // 000D GETMET R3 R2 K6
+ 0x7C0C0200, // 000E CALL R3 1
+ 0x8C100507, // 000F GETMET R4 R2 K7
+ 0x7C100200, // 0010 CALL R4 1
+ 0xA4121000, // 0011 IMPORT R4 K8
+ 0x8C140909, // 0012 GETMET R5 R4 K9
+ 0x5C1C0600, // 0013 MOVE R7 R3
+ 0x7C140400, // 0014 CALL R5 2
+ 0x4C0C0000, // 0015 LDNIL R3
+ 0xB81A1400, // 0016 GETNGBL R6 K10
+ 0x8C180D0B, // 0017 GETMET R6 R6 K11
+ 0x7C180200, // 0018 CALL R6 1
+ 0x60180010, // 0019 GETGBL R6 G16
+ 0x5C1C0A00, // 001A MOVE R7 R5
+ 0x7C180200, // 001B CALL R6 1
+ 0xA8020035, // 001C EXBLK 0 #0053
+ 0x5C1C0C00, // 001D MOVE R7 R6
+ 0x7C1C0000, // 001E CALL R7 0
+ 0xB8220400, // 001F GETNGBL R8 K2
+ 0x8820110C, // 0020 GETMBR R8 R8 K12
+ 0x8C20110D, // 0021 GETMET R8 R8 K13
+ 0x5C280000, // 0022 MOVE R10 R0
+ 0x5C2C0E00, // 0023 MOVE R11 R7
+ 0x7C200600, // 0024 CALL R8 3
+ 0x8C24110E, // 0025 GETMET R9 R8 K14
+ 0x7C240200, // 0026 CALL R9 1
+ 0x8C24110F, // 0027 GETMET R9 R8 K15
+ 0x502C0200, // 0028 LDBOOL R11 1 0
+ 0x7C240400, // 0029 CALL R9 2
+ 0x8C240F10, // 002A GETMET R9 R7 K16
+ 0x582C0011, // 002B LDCONST R11 K17
+ 0x60300012, // 002C GETGBL R12 G18
+ 0x7C300000, // 002D CALL R12 0
+ 0x7C240600, // 002E CALL R9 3
+ 0x60280010, // 002F GETGBL R10 G16
+ 0x5C2C1200, // 0030 MOVE R11 R9
+ 0x7C280200, // 0031 CALL R10 1
+ 0xA8020017, // 0032 EXBLK 0 #004B
+ 0x5C2C1400, // 0033 MOVE R11 R10
+ 0x7C2C0000, // 0034 CALL R11 0
+ 0xB8320400, // 0035 GETNGBL R12 K2
+ 0x88301912, // 0036 GETMBR R12 R12 K18
+ 0x8C30190D, // 0037 GETMET R12 R12 K13
+ 0x5C380000, // 0038 MOVE R14 R0
+ 0x5C3C1600, // 0039 MOVE R15 R11
+ 0x5C401000, // 003A MOVE R16 R8
+ 0x7C300800, // 003B CALL R12 4
+ 0x4C340000, // 003C LDNIL R13
+ 0x2034180D, // 003D NE R13 R12 R13
+ 0x7836000A, // 003E JMPF R13 #004A
+ 0x8C34190E, // 003F GETMET R13 R12 K14
+ 0x7C340200, // 0040 CALL R13 1
+ 0x8C34190F, // 0041 GETMET R13 R12 K15
+ 0x503C0200, // 0042 LDBOOL R15 1 0
+ 0x7C340400, // 0043 CALL R13 2
+ 0x8C340113, // 0044 GETMET R13 R0 K19
+ 0x5C3C1800, // 0045 MOVE R15 R12
+ 0x7C340400, // 0046 CALL R13 2
+ 0x8C341113, // 0047 GETMET R13 R8 K19
+ 0x5C3C1800, // 0048 MOVE R15 R12
+ 0x7C340400, // 0049 CALL R13 2
+ 0x7001FFE7, // 004A JMP #0033
+ 0x58280014, // 004B LDCONST R10 K20
+ 0xAC280200, // 004C CATCH R10 1 0
+ 0xB0080000, // 004D RAISE 2 R0 R0
+ 0x88280104, // 004E GETMBR R10 R0 K4
+ 0x8C281515, // 004F GETMET R10 R10 K21
+ 0x5C301000, // 0050 MOVE R12 R8
+ 0x7C280400, // 0051 CALL R10 2
+ 0x7001FFC9, // 0052 JMP #001D
+ 0x58180014, // 0053 LDCONST R6 K20
+ 0xAC180200, // 0054 CATCH R6 1 0
+ 0xB0080000, // 0055 RAISE 2 R0 R0
+ 0xB81A1400, // 0056 GETNGBL R6 K10
+ 0x8C180D16, // 0057 GETMET R6 R6 K22
+ 0x8C200317, // 0058 GETMET R8 R1 K23
+ 0x58280018, // 0059 LDCONST R10 K24
+ 0x602C000C, // 005A GETGBL R11 G12
+ 0x88300104, // 005B GETMBR R12 R0 K4
+ 0x7C2C0200, // 005C CALL R11 1
+ 0x7C200600, // 005D CALL R8 3
+ 0x58240019, // 005E LDCONST R9 K25
+ 0x7C180600, // 005F CALL R6 3
+ 0xA8040001, // 0060 EXBLK 1 1
+ 0x70020012, // 0061 JMP #0075
+ 0xAC080002, // 0062 CATCH R2 0 2
+ 0x7002000F, // 0063 JMP #0074
+ 0x2010051A, // 0064 NE R4 R2 K26
+ 0x7812000C, // 0065 JMPF R4 #0073
+ 0xB8121400, // 0066 GETNGBL R4 K10
+ 0x8C100916, // 0067 GETMET R4 R4 K22
+ 0x60180008, // 0068 GETGBL R6 G8
+ 0x5C1C0400, // 0069 MOVE R7 R2
+ 0x7C180200, // 006A CALL R6 1
+ 0x001A3606, // 006B ADD R6 K27 R6
+ 0x00180D1C, // 006C ADD R6 R6 K28
+ 0x601C0008, // 006D GETGBL R7 G8
+ 0x5C200600, // 006E MOVE R8 R3
+ 0x7C1C0200, // 006F CALL R7 1
+ 0x00180C07, // 0070 ADD R6 R6 R7
+ 0x581C0019, // 0071 LDCONST R7 K25
+ 0x7C100600, // 0072 CALL R4 3
+ 0x70020000, // 0073 JMP #0075
+ 0xB0080000, // 0074 RAISE 2 R0 R0
+ 0x80000000, // 0075 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: sessions_active
+********************************************************************/
+be_local_closure(Matter_Session_Store_sessions_active, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(sessions),
+ /* K2 */ be_nested_str_weak(get_device_id),
+ /* K3 */ be_nested_str_weak(get_fabric_id),
+ /* K4 */ be_nested_str_weak(push),
+ /* K5 */ be_const_int(1),
+ }),
+ be_str_weak(sessions_active),
+ &be_const_str_solidified,
+ ( &(const binstruction[22]) { /* code */
+ 0x60040012, // 0000 GETGBL R1 G18
+ 0x7C040000, // 0001 CALL R1 0
+ 0x58080000, // 0002 LDCONST R2 K0
+ 0x600C000C, // 0003 GETGBL R3 G12
+ 0x88100101, // 0004 GETMBR R4 R0 K1
+ 0x7C0C0200, // 0005 CALL R3 1
+ 0x140C0403, // 0006 LT R3 R2 R3
+ 0x780E000C, // 0007 JMPF R3 #0015
+ 0x880C0101, // 0008 GETMBR R3 R0 K1
+ 0x940C0602, // 0009 GETIDX R3 R3 R2
+ 0x8C100702, // 000A GETMET R4 R3 K2
+ 0x7C100200, // 000B CALL R4 1
+ 0x78120005, // 000C JMPF R4 #0013
+ 0x8C100703, // 000D GETMET R4 R3 K3
+ 0x7C100200, // 000E CALL R4 1
+ 0x78120002, // 000F JMPF R4 #0013
+ 0x8C100304, // 0010 GETMET R4 R1 K4
+ 0x5C180600, // 0011 MOVE R6 R3
+ 0x7C100400, // 0012 CALL R4 2
+ 0x00080505, // 0013 ADD R2 R2 K5
+ 0x7001FFED, // 0014 JMP #0003
+ 0x80040200, // 0015 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: create_fabric
+********************************************************************/
+be_local_closure(Matter_Session_Store_create_fabric, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(matter),
+ /* K1 */ be_nested_str_weak(Fabric),
+ }),
+ be_str_weak(create_fabric),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C040400, // 0003 CALL R1 2
+ 0x80040200, // 0004 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: add_fabric
+********************************************************************/
+be_local_closure(Matter_Session_Store_add_fabric, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 8]) { /* constants */
+ /* K0 */ be_nested_str_weak(matter),
+ /* K1 */ be_nested_str_weak(Fabric),
+ /* K2 */ be_nested_str_weak(value_error),
+ /* K3 */ be_nested_str_weak(must_X20be_X20of_X20class_X20matter_X2EFabric),
+ /* K4 */ be_nested_str_weak(fabrics),
+ /* K5 */ be_nested_str_weak(find),
+ /* K6 */ be_nested_str_weak(remove_redundant_fabric),
+ /* K7 */ be_nested_str_weak(push),
+ }),
+ be_str_weak(add_fabric),
+ &be_const_str_solidified,
+ ( &(const binstruction[22]) { /* code */
+ 0x6008000F, // 0000 GETGBL R2 G15
+ 0x5C0C0200, // 0001 MOVE R3 R1
+ 0xB8120000, // 0002 GETNGBL R4 K0
+ 0x88100901, // 0003 GETMBR R4 R4 K1
+ 0x7C080400, // 0004 CALL R2 2
+ 0x740A0000, // 0005 JMPT R2 #0007
+ 0xB0060503, // 0006 RAISE 1 K2 K3
+ 0x88080104, // 0007 GETMBR R2 R0 K4
+ 0x8C080505, // 0008 GETMET R2 R2 K5
+ 0x5C100200, // 0009 MOVE R4 R1
+ 0x7C080400, // 000A CALL R2 2
+ 0x4C0C0000, // 000B LDNIL R3
+ 0x1C080403, // 000C EQ R2 R2 R3
+ 0x780A0006, // 000D JMPF R2 #0015
+ 0x8C080106, // 000E GETMET R2 R0 K6
+ 0x5C100200, // 000F MOVE R4 R1
+ 0x7C080400, // 0010 CALL R2 2
+ 0x88080104, // 0011 GETMBR R2 R0 K4
+ 0x8C080507, // 0012 GETMET R2 R2 K7
+ 0x5C100200, // 0013 MOVE R4 R1
+ 0x7C080400, // 0014 CALL R2 2
+ 0x80000000, // 0015 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Matter_Session_Store
+********************************************************************/
+be_local_class(Matter_Session_Store,
+ 2,
+ NULL,
+ be_nested_map(26,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key_weak(gen_local_session_id, 25), be_const_closure(Matter_Session_Store_gen_local_session_id_closure) },
+ { be_const_key_weak(remove_redundant_fabric, 15), be_const_closure(Matter_Session_Store_remove_redundant_fabric_closure) },
+ { be_const_key_weak(find_session_by_resumption_id, -1), be_const_closure(Matter_Session_Store_find_session_by_resumption_id_closure) },
+ { be_const_key_weak(fabrics, 5), be_const_var(1) },
+ { be_const_key_weak(add_fabric, -1), be_const_closure(Matter_Session_Store_add_fabric_closure) },
+ { be_const_key_weak(create_fabric, -1), be_const_closure(Matter_Session_Store_create_fabric_closure) },
+ { be_const_key_weak(sessions_active, -1), be_const_closure(Matter_Session_Store_sessions_active_closure) },
+ { be_const_key_weak(add_session, -1), be_const_closure(Matter_Session_Store_add_session_closure) },
+ { be_const_key_weak(count_active_fabrics, -1), be_const_closure(Matter_Session_Store_count_active_fabrics_closure) },
+ { be_const_key_weak(remove_expired, 17), be_const_closure(Matter_Session_Store_remove_expired_closure) },
+ { be_const_key_weak(_FABRICS, -1), be_nested_str_weak(_matter_fabrics_X2Ejson) },
+ { be_const_key_weak(find_fabric_by_index, -1), be_const_closure(Matter_Session_Store_find_fabric_by_index_closure) },
+ { be_const_key_weak(sessions, 4), be_const_var(0) },
+ { be_const_key_weak(get_session_by_source_node_id, 11), be_const_closure(Matter_Session_Store_get_session_by_source_node_id_closure) },
+ { be_const_key_weak(next_fabric_idx, -1), be_const_closure(Matter_Session_Store_next_fabric_idx_closure) },
+ { be_const_key_weak(get_session_by_local_session_id, 24), be_const_closure(Matter_Session_Store_get_session_by_local_session_id_closure) },
+ { be_const_key_weak(active_fabrics, -1), be_const_closure(Matter_Session_Store_active_fabrics_closure) },
+ { be_const_key_weak(every_second, -1), be_const_closure(Matter_Session_Store_every_second_closure) },
+ { be_const_key_weak(remove_session, -1), be_const_closure(Matter_Session_Store_remove_session_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_Session_Store_init_closure) },
+ { be_const_key_weak(create_session, -1), be_const_closure(Matter_Session_Store_create_session_closure) },
+ { be_const_key_weak(save_fabrics, -1), be_const_closure(Matter_Session_Store_save_fabrics_closure) },
+ { be_const_key_weak(load_fabrics, -1), be_const_closure(Matter_Session_Store_load_fabrics_closure) },
+ { be_const_key_weak(remove_fabric, 6), be_const_closure(Matter_Session_Store_remove_fabric_closure) },
+ { be_const_key_weak(find_children_fabrics, -1), be_const_closure(Matter_Session_Store_find_children_fabrics_closure) },
+ { be_const_key_weak(find_session_source_id_unsecure, -1), be_const_closure(Matter_Session_Store_find_session_source_id_unsecure_closure) },
+ })),
+ be_str_weak(Matter_Session_Store)
+);
+/*******************************************************************/
+
+void be_load_Matter_Session_Store_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Matter_Session_Store);
+ be_setglobal(vm, "Matter_Session_Store");
+ be_pop(vm, 1);
+}
+/********************************************************************/
+/* End of solidification */
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_TLV.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_TLV.h
index dc225d633..784417069 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_TLV.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_TLV.h
@@ -6,6 +6,101 @@
extern const bclass be_class_Matter_TLV_item;
+/********************************************************************
+** Solidified function: set_parent
+********************************************************************/
+be_local_closure(Matter_TLV_item_set_parent, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(parent),
+ }),
+ be_str_weak(set_parent),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x80000000, // 0001 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: create_TLV
+********************************************************************/
+be_local_closure(Matter_TLV_item_create_TLV, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 4, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_const_class(be_class_Matter_TLV_item),
+ /* K1 */ be_nested_str_weak(typ),
+ /* K2 */ be_nested_str_weak(val),
+ }),
+ be_str_weak(create_TLV),
+ &be_const_str_solidified,
+ ( &(const binstruction[13]) { /* code */
+ 0x58080000, // 0000 LDCONST R2 K0
+ 0x4C0C0000, // 0001 LDNIL R3
+ 0x200C0203, // 0002 NE R3 R1 R3
+ 0x740E0002, // 0003 JMPT R3 #0007
+ 0x540E0013, // 0004 LDINT R3 20
+ 0x1C0C0003, // 0005 EQ R3 R0 R3
+ 0x780E0004, // 0006 JMPF R3 #000C
+ 0x5C0C0400, // 0007 MOVE R3 R2
+ 0x7C0C0000, // 0008 CALL R3 0
+ 0x900E0200, // 0009 SETMBR R3 K1 R0
+ 0x900E0401, // 000A SETMBR R3 K2 R1
+ 0x80040600, // 000B RET 1 R3
+ 0x80000000, // 000C RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_anonymoustag
+********************************************************************/
+be_local_closure(Matter_TLV_item_set_anonymoustag, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(set_fulltag),
+ }),
+ be_str_weak(set_anonymoustag),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x8C040100, // 0000 GETMET R1 R0 K0
+ 0x7C040200, // 0001 CALL R1 1
+ 0x80000000, // 0002 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: set_commonprofile
********************************************************************/
@@ -38,9 +133,909 @@ be_local_closure(Matter_TLV_item_set_commonprofile, /* name */
/********************************************************************
-** Solidified function: encode
+** Solidified function: _cmp_gt
********************************************************************/
-be_local_closure(Matter_TLV_item_encode, /* name */
+be_local_closure(Matter_TLV_item__cmp_gt, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(tag_vendor),
+ /* K1 */ be_const_int(1),
+ /* K2 */ be_nested_str_weak(tag_profile),
+ /* K3 */ be_const_int(0),
+ /* K4 */ be_nested_str_weak(tag_number),
+ /* K5 */ be_nested_str_weak(tag_sub),
+ }),
+ be_str_weak(_cmp_gt),
+ &be_const_str_solidified,
+ ( &(const binstruction[72]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x4C0C0000, // 0001 LDNIL R3
+ 0x20080403, // 0002 NE R2 R2 R3
+ 0x780A0012, // 0003 JMPF R2 #0017
+ 0x88080300, // 0004 GETMBR R2 R1 K0
+ 0x4C0C0000, // 0005 LDNIL R3
+ 0x1C080403, // 0006 EQ R2 R2 R3
+ 0x780A0000, // 0007 JMPF R2 #0009
+ 0x80060200, // 0008 RET 1 K1
+ 0x88080100, // 0009 GETMBR R2 R0 K0
+ 0x880C0300, // 000A GETMBR R3 R1 K0
+ 0x24080403, // 000B GT R2 R2 R3
+ 0x780A0000, // 000C JMPF R2 #000E
+ 0x80060200, // 000D RET 1 K1
+ 0x88080100, // 000E GETMBR R2 R0 K0
+ 0x880C0300, // 000F GETMBR R3 R1 K0
+ 0x1C080403, // 0010 EQ R2 R2 R3
+ 0x780A0004, // 0011 JMPF R2 #0017
+ 0x88080102, // 0012 GETMBR R2 R0 K2
+ 0x880C0302, // 0013 GETMBR R3 R1 K2
+ 0x24080403, // 0014 GT R2 R2 R3
+ 0x780A0000, // 0015 JMPF R2 #0017
+ 0x80060200, // 0016 RET 1 K1
+ 0x88080102, // 0017 GETMBR R2 R0 K2
+ 0x540DFFFE, // 0018 LDINT R3 -1
+ 0x1C080403, // 0019 EQ R2 R2 R3
+ 0x780A0005, // 001A JMPF R2 #0021
+ 0x88080302, // 001B GETMBR R2 R1 K2
+ 0x4C0C0000, // 001C LDNIL R3
+ 0x1C080403, // 001D EQ R2 R2 R3
+ 0x780A0000, // 001E JMPF R2 #0020
+ 0x80060200, // 001F RET 1 K1
+ 0x70020008, // 0020 JMP #002A
+ 0x88080102, // 0021 GETMBR R2 R0 K2
+ 0x4C0C0000, // 0022 LDNIL R3
+ 0x1C080403, // 0023 EQ R2 R2 R3
+ 0x780A0004, // 0024 JMPF R2 #002A
+ 0x88080302, // 0025 GETMBR R2 R1 K2
+ 0x540DFFFE, // 0026 LDINT R3 -1
+ 0x1C080403, // 0027 EQ R2 R2 R3
+ 0x780A0000, // 0028 JMPF R2 #002A
+ 0x80060600, // 0029 RET 1 K3
+ 0x88080104, // 002A GETMBR R2 R0 K4
+ 0x4C0C0000, // 002B LDNIL R3
+ 0x20080403, // 002C NE R2 R2 R3
+ 0x780A000A, // 002D JMPF R2 #0039
+ 0x88080304, // 002E GETMBR R2 R1 K4
+ 0x4C0C0000, // 002F LDNIL R3
+ 0x1C080403, // 0030 EQ R2 R2 R3
+ 0x780A0000, // 0031 JMPF R2 #0033
+ 0x80060200, // 0032 RET 1 K1
+ 0x88080104, // 0033 GETMBR R2 R0 K4
+ 0x880C0304, // 0034 GETMBR R3 R1 K4
+ 0x24080403, // 0035 GT R2 R2 R3
+ 0x780A0000, // 0036 JMPF R2 #0038
+ 0x80060200, // 0037 RET 1 K1
+ 0x80060600, // 0038 RET 1 K3
+ 0x88080105, // 0039 GETMBR R2 R0 K5
+ 0x4C0C0000, // 003A LDNIL R3
+ 0x20080403, // 003B NE R2 R2 R3
+ 0x780A0009, // 003C JMPF R2 #0047
+ 0x88080305, // 003D GETMBR R2 R1 K5
+ 0x4C0C0000, // 003E LDNIL R3
+ 0x1C080403, // 003F EQ R2 R2 R3
+ 0x780A0000, // 0040 JMPF R2 #0042
+ 0x80060200, // 0041 RET 1 K1
+ 0x88080105, // 0042 GETMBR R2 R0 K5
+ 0x880C0305, // 0043 GETMBR R3 R1 K5
+ 0x24080403, // 0044 GT R2 R2 R3
+ 0x780A0000, // 0045 JMPF R2 #0047
+ 0x80060200, // 0046 RET 1 K1
+ 0x80060600, // 0047 RET 1 K3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _encode_tag
+********************************************************************/
+be_local_closure(Matter_TLV_item__encode_tag, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 9]) { /* constants */
+ /* K0 */ be_nested_str_weak(tag_number),
+ /* K1 */ be_const_int(0),
+ /* K2 */ be_nested_str_weak(tag_vendor),
+ /* K3 */ be_nested_str_weak(add),
+ /* K4 */ be_nested_str_weak(typ),
+ /* K5 */ be_const_int(1),
+ /* K6 */ be_const_int(2),
+ /* K7 */ be_nested_str_weak(tag_profile),
+ /* K8 */ be_nested_str_weak(tag_sub),
+ }),
+ be_str_weak(_encode_tag),
+ &be_const_str_solidified,
+ ( &(const binstruction[133]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x4C0C0000, // 0001 LDNIL R3
+ 0x20080403, // 0002 NE R2 R2 R3
+ 0x780A0001, // 0003 JMPF R2 #0006
+ 0x88080100, // 0004 GETMBR R2 R0 K0
+ 0x70020000, // 0005 JMP #0007
+ 0x58080001, // 0006 LDCONST R2 K1
+ 0x540EFFFF, // 0007 LDINT R3 65536
+ 0x280C0403, // 0008 GE R3 R2 R3
+ 0x740E0002, // 0009 JMPT R3 #000D
+ 0x140C0501, // 000A LT R3 R2 K1
+ 0x740E0000, // 000B JMPT R3 #000D
+ 0x500C0001, // 000C LDBOOL R3 0 1
+ 0x500C0200, // 000D LDBOOL R3 1 0
+ 0x58100001, // 000E LDCONST R4 K1
+ 0x88140102, // 000F GETMBR R5 R0 K2
+ 0x4C180000, // 0010 LDNIL R6
+ 0x20140A06, // 0011 NE R5 R5 R6
+ 0x78160026, // 0012 JMPF R5 #003A
+ 0x780E0012, // 0013 JMPF R3 #0027
+ 0x8C140303, // 0014 GETMET R5 R1 K3
+ 0x541E00DF, // 0015 LDINT R7 224
+ 0x88200104, // 0016 GETMBR R8 R0 K4
+ 0x001C0E08, // 0017 ADD R7 R7 R8
+ 0x58200005, // 0018 LDCONST R8 K5
+ 0x7C140600, // 0019 CALL R5 3
+ 0x8C140303, // 001A GETMET R5 R1 K3
+ 0x881C0102, // 001B GETMBR R7 R0 K2
+ 0x58200006, // 001C LDCONST R8 K6
+ 0x7C140600, // 001D CALL R5 3
+ 0x8C140303, // 001E GETMET R5 R1 K3
+ 0x881C0107, // 001F GETMBR R7 R0 K7
+ 0x58200006, // 0020 LDCONST R8 K6
+ 0x7C140600, // 0021 CALL R5 3
+ 0x8C140303, // 0022 GETMET R5 R1 K3
+ 0x881C0100, // 0023 GETMBR R7 R0 K0
+ 0x54220003, // 0024 LDINT R8 4
+ 0x7C140600, // 0025 CALL R5 3
+ 0x70020011, // 0026 JMP #0039
+ 0x8C140303, // 0027 GETMET R5 R1 K3
+ 0x541E00BF, // 0028 LDINT R7 192
+ 0x88200104, // 0029 GETMBR R8 R0 K4
+ 0x001C0E08, // 002A ADD R7 R7 R8
+ 0x58200005, // 002B LDCONST R8 K5
+ 0x7C140600, // 002C CALL R5 3
+ 0x8C140303, // 002D GETMET R5 R1 K3
+ 0x881C0102, // 002E GETMBR R7 R0 K2
+ 0x58200006, // 002F LDCONST R8 K6
+ 0x7C140600, // 0030 CALL R5 3
+ 0x8C140303, // 0031 GETMET R5 R1 K3
+ 0x881C0107, // 0032 GETMBR R7 R0 K7
+ 0x58200006, // 0033 LDCONST R8 K6
+ 0x7C140600, // 0034 CALL R5 3
+ 0x8C140303, // 0035 GETMET R5 R1 K3
+ 0x881C0100, // 0036 GETMBR R7 R0 K0
+ 0x58200006, // 0037 LDCONST R8 K6
+ 0x7C140600, // 0038 CALL R5 3
+ 0x70020049, // 0039 JMP #0084
+ 0x88140107, // 003A GETMBR R5 R0 K7
+ 0x5419FFFE, // 003B LDINT R6 -1
+ 0x1C140A06, // 003C EQ R5 R5 R6
+ 0x78160016, // 003D JMPF R5 #0055
+ 0x780E000A, // 003E JMPF R3 #004A
+ 0x8C140303, // 003F GETMET R5 R1 K3
+ 0x541E005F, // 0040 LDINT R7 96
+ 0x88200104, // 0041 GETMBR R8 R0 K4
+ 0x001C0E08, // 0042 ADD R7 R7 R8
+ 0x58200005, // 0043 LDCONST R8 K5
+ 0x7C140600, // 0044 CALL R5 3
+ 0x8C140303, // 0045 GETMET R5 R1 K3
+ 0x881C0100, // 0046 GETMBR R7 R0 K0
+ 0x54220003, // 0047 LDINT R8 4
+ 0x7C140600, // 0048 CALL R5 3
+ 0x70020009, // 0049 JMP #0054
+ 0x8C140303, // 004A GETMET R5 R1 K3
+ 0x541E003F, // 004B LDINT R7 64
+ 0x88200104, // 004C GETMBR R8 R0 K4
+ 0x001C0E08, // 004D ADD R7 R7 R8
+ 0x58200005, // 004E LDCONST R8 K5
+ 0x7C140600, // 004F CALL R5 3
+ 0x8C140303, // 0050 GETMET R5 R1 K3
+ 0x881C0100, // 0051 GETMBR R7 R0 K0
+ 0x58200006, // 0052 LDCONST R8 K6
+ 0x7C140600, // 0053 CALL R5 3
+ 0x7002002E, // 0054 JMP #0084
+ 0x88140107, // 0055 GETMBR R5 R0 K7
+ 0x4C180000, // 0056 LDNIL R6
+ 0x20140A06, // 0057 NE R5 R5 R6
+ 0x78160016, // 0058 JMPF R5 #0070
+ 0x780E000A, // 0059 JMPF R3 #0065
+ 0x8C140303, // 005A GETMET R5 R1 K3
+ 0x541E009F, // 005B LDINT R7 160
+ 0x88200104, // 005C GETMBR R8 R0 K4
+ 0x001C0E08, // 005D ADD R7 R7 R8
+ 0x58200005, // 005E LDCONST R8 K5
+ 0x7C140600, // 005F CALL R5 3
+ 0x8C140303, // 0060 GETMET R5 R1 K3
+ 0x881C0100, // 0061 GETMBR R7 R0 K0
+ 0x54220003, // 0062 LDINT R8 4
+ 0x7C140600, // 0063 CALL R5 3
+ 0x70020009, // 0064 JMP #006F
+ 0x8C140303, // 0065 GETMET R5 R1 K3
+ 0x541E007F, // 0066 LDINT R7 128
+ 0x88200104, // 0067 GETMBR R8 R0 K4
+ 0x001C0E08, // 0068 ADD R7 R7 R8
+ 0x58200005, // 0069 LDCONST R8 K5
+ 0x7C140600, // 006A CALL R5 3
+ 0x8C140303, // 006B GETMET R5 R1 K3
+ 0x881C0100, // 006C GETMBR R7 R0 K0
+ 0x58200006, // 006D LDCONST R8 K6
+ 0x7C140600, // 006E CALL R5 3
+ 0x70020013, // 006F JMP #0084
+ 0x88140108, // 0070 GETMBR R5 R0 K8
+ 0x4C180000, // 0071 LDNIL R6
+ 0x20140A06, // 0072 NE R5 R5 R6
+ 0x7816000A, // 0073 JMPF R5 #007F
+ 0x8C140303, // 0074 GETMET R5 R1 K3
+ 0x541E001F, // 0075 LDINT R7 32
+ 0x88200104, // 0076 GETMBR R8 R0 K4
+ 0x001C0E08, // 0077 ADD R7 R7 R8
+ 0x58200005, // 0078 LDCONST R8 K5
+ 0x7C140600, // 0079 CALL R5 3
+ 0x8C140303, // 007A GETMET R5 R1 K3
+ 0x881C0108, // 007B GETMBR R7 R0 K8
+ 0x58200005, // 007C LDCONST R8 K5
+ 0x7C140600, // 007D CALL R5 3
+ 0x70020004, // 007E JMP #0084
+ 0x8C140303, // 007F GETMET R5 R1 K3
+ 0x881C0104, // 0080 GETMBR R7 R0 K4
+ 0x001E0207, // 0081 ADD R7 K1 R7
+ 0x58200005, // 0082 LDCONST R8 K5
+ 0x7C140600, // 0083 CALL R5 3
+ 0x80000000, // 0084 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: encode_len
+********************************************************************/
+be_local_closure(Matter_TLV_item_encode_len, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[31]) { /* constants */
+ /* K0 */ be_nested_str_weak(TLV),
+ /* K1 */ be_const_int(0),
+ /* K2 */ be_nested_str_weak(typ),
+ /* K3 */ be_nested_str_weak(BFALSE),
+ /* K4 */ be_nested_str_weak(BTRUE),
+ /* K5 */ be_nested_str_weak(val),
+ /* K6 */ be_nested_str_weak(I2),
+ /* K7 */ be_nested_str_weak(I4),
+ /* K8 */ be_nested_str_weak(I1),
+ /* K9 */ be_nested_str_weak(U2),
+ /* K10 */ be_nested_str_weak(U4),
+ /* K11 */ be_nested_str_weak(U1),
+ /* K12 */ be_nested_str_weak(B1),
+ /* K13 */ be_nested_str_weak(B8),
+ /* K14 */ be_nested_str_weak(B2),
+ /* K15 */ be_nested_str_weak(B4),
+ /* K16 */ be_nested_str_weak(UTF1),
+ /* K17 */ be_nested_str_weak(UTF8),
+ /* K18 */ be_nested_str_weak(UTF2),
+ /* K19 */ be_nested_str_weak(UTF4),
+ /* K20 */ be_nested_str_weak(_encode_tag_len),
+ /* K21 */ be_const_int(1),
+ /* K22 */ be_const_int(2),
+ /* K23 */ be_nested_str_weak(I8),
+ /* K24 */ be_nested_str_weak(U8),
+ /* K25 */ be_nested_str_weak(FLOAT),
+ /* K26 */ be_nested_str_weak(DOUBLE),
+ /* K27 */ be_nested_str_weak(value_error),
+ /* K28 */ be_nested_str_weak(Unsupported_X20type_X20TLV_X2EDOUBLE),
+ /* K29 */ be_nested_str_weak(NULL),
+ /* K30 */ be_nested_str_weak(unsupported_X20type_X20),
+ }),
+ be_str_weak(encode_len),
+ &be_const_str_solidified,
+ ( &(const binstruction[250]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x58080001, // 0001 LDCONST R2 K1
+ 0x880C0102, // 0002 GETMBR R3 R0 K2
+ 0x88100303, // 0003 GETMBR R4 R1 K3
+ 0x1C0C0604, // 0004 EQ R3 R3 R4
+ 0x740E0003, // 0005 JMPT R3 #000A
+ 0x880C0102, // 0006 GETMBR R3 R0 K2
+ 0x88100304, // 0007 GETMBR R4 R1 K4
+ 0x1C0C0604, // 0008 EQ R3 R3 R4
+ 0x780E0008, // 0009 JMPF R3 #0013
+ 0x600C0017, // 000A GETGBL R3 G23
+ 0x88100105, // 000B GETMBR R4 R0 K5
+ 0x7C0C0200, // 000C CALL R3 1
+ 0x780E0001, // 000D JMPF R3 #0010
+ 0x880C0304, // 000E GETMBR R3 R1 K4
+ 0x70020000, // 000F JMP #0011
+ 0x880C0303, // 0010 GETMBR R3 R1 K3
+ 0x90020403, // 0011 SETMBR R0 K2 R3
+ 0x70020070, // 0012 JMP #0084
+ 0x880C0102, // 0013 GETMBR R3 R0 K2
+ 0x88100306, // 0014 GETMBR R4 R1 K6
+ 0x280C0604, // 0015 GE R3 R3 R4
+ 0x780E0018, // 0016 JMPF R3 #0030
+ 0x880C0102, // 0017 GETMBR R3 R0 K2
+ 0x88100307, // 0018 GETMBR R4 R1 K7
+ 0x180C0604, // 0019 LE R3 R3 R4
+ 0x780E0014, // 001A JMPF R3 #0030
+ 0x600C0009, // 001B GETGBL R3 G9
+ 0x88100105, // 001C GETMBR R4 R0 K5
+ 0x7C0C0200, // 001D CALL R3 1
+ 0x5412007E, // 001E LDINT R4 127
+ 0x18100604, // 001F LE R4 R3 R4
+ 0x78120005, // 0020 JMPF R4 #0027
+ 0x5411FF7F, // 0021 LDINT R4 -128
+ 0x28100604, // 0022 GE R4 R3 R4
+ 0x78120002, // 0023 JMPF R4 #0027
+ 0x88100308, // 0024 GETMBR R4 R1 K8
+ 0x90020404, // 0025 SETMBR R0 K2 R4
+ 0x70020007, // 0026 JMP #002F
+ 0x54127FFE, // 0027 LDINT R4 32767
+ 0x18100604, // 0028 LE R4 R3 R4
+ 0x78120004, // 0029 JMPF R4 #002F
+ 0x54117FFF, // 002A LDINT R4 -32768
+ 0x28100604, // 002B GE R4 R3 R4
+ 0x78120001, // 002C JMPF R4 #002F
+ 0x88100306, // 002D GETMBR R4 R1 K6
+ 0x90020404, // 002E SETMBR R0 K2 R4
+ 0x70020053, // 002F JMP #0084
+ 0x880C0102, // 0030 GETMBR R3 R0 K2
+ 0x88100309, // 0031 GETMBR R4 R1 K9
+ 0x280C0604, // 0032 GE R3 R3 R4
+ 0x780E0016, // 0033 JMPF R3 #004B
+ 0x880C0102, // 0034 GETMBR R3 R0 K2
+ 0x8810030A, // 0035 GETMBR R4 R1 K10
+ 0x180C0604, // 0036 LE R3 R3 R4
+ 0x780E0012, // 0037 JMPF R3 #004B
+ 0x600C0009, // 0038 GETGBL R3 G9
+ 0x88100105, // 0039 GETMBR R4 R0 K5
+ 0x7C0C0200, // 003A CALL R3 1
+ 0x541200FE, // 003B LDINT R4 255
+ 0x18100604, // 003C LE R4 R3 R4
+ 0x78120004, // 003D JMPF R4 #0043
+ 0x28100701, // 003E GE R4 R3 K1
+ 0x78120002, // 003F JMPF R4 #0043
+ 0x8810030B, // 0040 GETMBR R4 R1 K11
+ 0x90020404, // 0041 SETMBR R0 K2 R4
+ 0x70020006, // 0042 JMP #004A
+ 0x5412FFFE, // 0043 LDINT R4 65535
+ 0x18100604, // 0044 LE R4 R3 R4
+ 0x78120003, // 0045 JMPF R4 #004A
+ 0x28100701, // 0046 GE R4 R3 K1
+ 0x78120001, // 0047 JMPF R4 #004A
+ 0x88100309, // 0048 GETMBR R4 R1 K9
+ 0x90020404, // 0049 SETMBR R0 K2 R4
+ 0x70020038, // 004A JMP #0084
+ 0x880C0102, // 004B GETMBR R3 R0 K2
+ 0x8810030C, // 004C GETMBR R4 R1 K12
+ 0x280C0604, // 004D GE R3 R3 R4
+ 0x780E0018, // 004E JMPF R3 #0068
+ 0x880C0102, // 004F GETMBR R3 R0 K2
+ 0x8810030D, // 0050 GETMBR R4 R1 K13
+ 0x180C0604, // 0051 LE R3 R3 R4
+ 0x780E0014, // 0052 JMPF R3 #0068
+ 0x600C000C, // 0053 GETGBL R3 G12
+ 0x88100105, // 0054 GETMBR R4 R0 K5
+ 0x7C0C0200, // 0055 CALL R3 1
+ 0x541200FE, // 0056 LDINT R4 255
+ 0x180C0604, // 0057 LE R3 R3 R4
+ 0x780E0002, // 0058 JMPF R3 #005C
+ 0x880C030C, // 0059 GETMBR R3 R1 K12
+ 0x90020403, // 005A SETMBR R0 K2 R3
+ 0x7002000A, // 005B JMP #0067
+ 0x600C000C, // 005C GETGBL R3 G12
+ 0x88100105, // 005D GETMBR R4 R0 K5
+ 0x7C0C0200, // 005E CALL R3 1
+ 0x5412FFFE, // 005F LDINT R4 65535
+ 0x180C0604, // 0060 LE R3 R3 R4
+ 0x780E0002, // 0061 JMPF R3 #0065
+ 0x880C030E, // 0062 GETMBR R3 R1 K14
+ 0x90020403, // 0063 SETMBR R0 K2 R3
+ 0x70020001, // 0064 JMP #0067
+ 0x880C030F, // 0065 GETMBR R3 R1 K15
+ 0x90020403, // 0066 SETMBR R0 K2 R3
+ 0x7002001B, // 0067 JMP #0084
+ 0x880C0102, // 0068 GETMBR R3 R0 K2
+ 0x88100310, // 0069 GETMBR R4 R1 K16
+ 0x280C0604, // 006A GE R3 R3 R4
+ 0x780E0017, // 006B JMPF R3 #0084
+ 0x880C0102, // 006C GETMBR R3 R0 K2
+ 0x88100311, // 006D GETMBR R4 R1 K17
+ 0x180C0604, // 006E LE R3 R3 R4
+ 0x780E0013, // 006F JMPF R3 #0084
+ 0x600C000C, // 0070 GETGBL R3 G12
+ 0x88100105, // 0071 GETMBR R4 R0 K5
+ 0x7C0C0200, // 0072 CALL R3 1
+ 0x541200FE, // 0073 LDINT R4 255
+ 0x180C0604, // 0074 LE R3 R3 R4
+ 0x780E0002, // 0075 JMPF R3 #0079
+ 0x880C0310, // 0076 GETMBR R3 R1 K16
+ 0x90020403, // 0077 SETMBR R0 K2 R3
+ 0x7002000A, // 0078 JMP #0084
+ 0x600C000C, // 0079 GETGBL R3 G12
+ 0x88100105, // 007A GETMBR R4 R0 K5
+ 0x7C0C0200, // 007B CALL R3 1
+ 0x5412FFFE, // 007C LDINT R4 65535
+ 0x180C0604, // 007D LE R3 R3 R4
+ 0x780E0002, // 007E JMPF R3 #0082
+ 0x880C0312, // 007F GETMBR R3 R1 K18
+ 0x90020403, // 0080 SETMBR R0 K2 R3
+ 0x70020001, // 0081 JMP #0084
+ 0x880C0313, // 0082 GETMBR R3 R1 K19
+ 0x90020403, // 0083 SETMBR R0 K2 R3
+ 0x8C0C0114, // 0084 GETMET R3 R0 K20
+ 0x7C0C0200, // 0085 CALL R3 1
+ 0x00080403, // 0086 ADD R2 R2 R3
+ 0x880C0102, // 0087 GETMBR R3 R0 K2
+ 0x88100308, // 0088 GETMBR R4 R1 K8
+ 0x1C0C0604, // 0089 EQ R3 R3 R4
+ 0x740E0003, // 008A JMPT R3 #008F
+ 0x880C0102, // 008B GETMBR R3 R0 K2
+ 0x8810030B, // 008C GETMBR R4 R1 K11
+ 0x1C0C0604, // 008D EQ R3 R3 R4
+ 0x780E0001, // 008E JMPF R3 #0091
+ 0x00080515, // 008F ADD R2 R2 K21
+ 0x70020067, // 0090 JMP #00F9
+ 0x880C0102, // 0091 GETMBR R3 R0 K2
+ 0x88100306, // 0092 GETMBR R4 R1 K6
+ 0x1C0C0604, // 0093 EQ R3 R3 R4
+ 0x740E0003, // 0094 JMPT R3 #0099
+ 0x880C0102, // 0095 GETMBR R3 R0 K2
+ 0x88100309, // 0096 GETMBR R4 R1 K9
+ 0x1C0C0604, // 0097 EQ R3 R3 R4
+ 0x780E0001, // 0098 JMPF R3 #009B
+ 0x00080516, // 0099 ADD R2 R2 K22
+ 0x7002005D, // 009A JMP #00F9
+ 0x880C0102, // 009B GETMBR R3 R0 K2
+ 0x88100307, // 009C GETMBR R4 R1 K7
+ 0x1C0C0604, // 009D EQ R3 R3 R4
+ 0x740E0003, // 009E JMPT R3 #00A3
+ 0x880C0102, // 009F GETMBR R3 R0 K2
+ 0x8810030A, // 00A0 GETMBR R4 R1 K10
+ 0x1C0C0604, // 00A1 EQ R3 R3 R4
+ 0x780E0002, // 00A2 JMPF R3 #00A6
+ 0x540E0003, // 00A3 LDINT R3 4
+ 0x00080403, // 00A4 ADD R2 R2 R3
+ 0x70020052, // 00A5 JMP #00F9
+ 0x880C0102, // 00A6 GETMBR R3 R0 K2
+ 0x88100317, // 00A7 GETMBR R4 R1 K23
+ 0x1C0C0604, // 00A8 EQ R3 R3 R4
+ 0x740E0003, // 00A9 JMPT R3 #00AE
+ 0x880C0102, // 00AA GETMBR R3 R0 K2
+ 0x88100318, // 00AB GETMBR R4 R1 K24
+ 0x1C0C0604, // 00AC EQ R3 R3 R4
+ 0x780E0002, // 00AD JMPF R3 #00B1
+ 0x540E0007, // 00AE LDINT R3 8
+ 0x00080403, // 00AF ADD R2 R2 R3
+ 0x70020047, // 00B0 JMP #00F9
+ 0x880C0102, // 00B1 GETMBR R3 R0 K2
+ 0x88100303, // 00B2 GETMBR R4 R1 K3
+ 0x1C0C0604, // 00B3 EQ R3 R3 R4
+ 0x740E0003, // 00B4 JMPT R3 #00B9
+ 0x880C0102, // 00B5 GETMBR R3 R0 K2
+ 0x88100304, // 00B6 GETMBR R4 R1 K4
+ 0x1C0C0604, // 00B7 EQ R3 R3 R4
+ 0x780E0000, // 00B8 JMPF R3 #00BA
+ 0x7002003E, // 00B9 JMP #00F9
+ 0x880C0102, // 00BA GETMBR R3 R0 K2
+ 0x88100319, // 00BB GETMBR R4 R1 K25
+ 0x1C0C0604, // 00BC EQ R3 R3 R4
+ 0x780E0002, // 00BD JMPF R3 #00C1
+ 0x540E0003, // 00BE LDINT R3 4
+ 0x00080403, // 00BF ADD R2 R2 R3
+ 0x70020037, // 00C0 JMP #00F9
+ 0x880C0102, // 00C1 GETMBR R3 R0 K2
+ 0x8810031A, // 00C2 GETMBR R4 R1 K26
+ 0x1C0C0604, // 00C3 EQ R3 R3 R4
+ 0x780E0001, // 00C4 JMPF R3 #00C7
+ 0xB006371C, // 00C5 RAISE 1 K27 K28
+ 0x70020031, // 00C6 JMP #00F9
+ 0x880C0102, // 00C7 GETMBR R3 R0 K2
+ 0x88100310, // 00C8 GETMBR R4 R1 K16
+ 0x1C0C0604, // 00C9 EQ R3 R3 R4
+ 0x780E0005, // 00CA JMPF R3 #00D1
+ 0x600C000C, // 00CB GETGBL R3 G12
+ 0x88100105, // 00CC GETMBR R4 R0 K5
+ 0x7C0C0200, // 00CD CALL R3 1
+ 0x000E2A03, // 00CE ADD R3 K21 R3
+ 0x00080403, // 00CF ADD R2 R2 R3
+ 0x70020027, // 00D0 JMP #00F9
+ 0x880C0102, // 00D1 GETMBR R3 R0 K2
+ 0x88100312, // 00D2 GETMBR R4 R1 K18
+ 0x1C0C0604, // 00D3 EQ R3 R3 R4
+ 0x780E0005, // 00D4 JMPF R3 #00DB
+ 0x600C000C, // 00D5 GETGBL R3 G12
+ 0x88100105, // 00D6 GETMBR R4 R0 K5
+ 0x7C0C0200, // 00D7 CALL R3 1
+ 0x000E2C03, // 00D8 ADD R3 K22 R3
+ 0x00080403, // 00D9 ADD R2 R2 R3
+ 0x7002001D, // 00DA JMP #00F9
+ 0x880C0102, // 00DB GETMBR R3 R0 K2
+ 0x8810030C, // 00DC GETMBR R4 R1 K12
+ 0x1C0C0604, // 00DD EQ R3 R3 R4
+ 0x780E0005, // 00DE JMPF R3 #00E5
+ 0x600C000C, // 00DF GETGBL R3 G12
+ 0x88100105, // 00E0 GETMBR R4 R0 K5
+ 0x7C0C0200, // 00E1 CALL R3 1
+ 0x000E2A03, // 00E2 ADD R3 K21 R3
+ 0x00080403, // 00E3 ADD R2 R2 R3
+ 0x70020013, // 00E4 JMP #00F9
+ 0x880C0102, // 00E5 GETMBR R3 R0 K2
+ 0x8810030E, // 00E6 GETMBR R4 R1 K14
+ 0x1C0C0604, // 00E7 EQ R3 R3 R4
+ 0x780E0005, // 00E8 JMPF R3 #00EF
+ 0x600C000C, // 00E9 GETGBL R3 G12
+ 0x88100105, // 00EA GETMBR R4 R0 K5
+ 0x7C0C0200, // 00EB CALL R3 1
+ 0x000E2C03, // 00EC ADD R3 K22 R3
+ 0x00080403, // 00ED ADD R2 R2 R3
+ 0x70020009, // 00EE JMP #00F9
+ 0x880C0102, // 00EF GETMBR R3 R0 K2
+ 0x8810031D, // 00F0 GETMBR R4 R1 K29
+ 0x1C0C0604, // 00F1 EQ R3 R3 R4
+ 0x780E0000, // 00F2 JMPF R3 #00F4
+ 0x70020004, // 00F3 JMP #00F9
+ 0x600C0008, // 00F4 GETGBL R3 G8
+ 0x88100102, // 00F5 GETMBR R4 R0 K2
+ 0x7C0C0200, // 00F6 CALL R3 1
+ 0x000E3C03, // 00F7 ADD R3 K30 R3
+ 0xB0063603, // 00F8 RAISE 1 K27 R3
+ 0x80040400, // 00F9 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_contextspecific
+********************************************************************/
+be_local_closure(Matter_TLV_item_set_contextspecific, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str_weak(set_fulltag),
+ /* K1 */ be_nested_str_weak(tag_sub),
+ }),
+ be_str_weak(set_contextspecific),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0x8C080100, // 0000 GETMET R2 R0 K0
+ 0x7C080200, // 0001 CALL R2 1
+ 0x60080009, // 0002 GETGBL R2 G9
+ 0x5C0C0200, // 0003 MOVE R3 R1
+ 0x7C080200, // 0004 CALL R2 1
+ 0x90020202, // 0005 SETMBR R0 K1 R2
+ 0x80000000, // 0006 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_fulltag
+********************************************************************/
+be_local_closure(Matter_TLV_item_set_fulltag, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(tag_vendor),
+ /* K1 */ be_nested_str_weak(tag_profile),
+ /* K2 */ be_nested_str_weak(tag_number),
+ /* K3 */ be_nested_str_weak(tag_sub),
+ }),
+ be_str_weak(set_fulltag),
+ &be_const_str_solidified,
+ ( &(const binstruction[15]) { /* code */
+ 0x60100009, // 0000 GETGBL R4 G9
+ 0x5C140200, // 0001 MOVE R5 R1
+ 0x7C100200, // 0002 CALL R4 1
+ 0x90020004, // 0003 SETMBR R0 K0 R4
+ 0x60100009, // 0004 GETGBL R4 G9
+ 0x5C140400, // 0005 MOVE R5 R2
+ 0x7C100200, // 0006 CALL R4 1
+ 0x90020204, // 0007 SETMBR R0 K1 R4
+ 0x60100009, // 0008 GETGBL R4 G9
+ 0x5C140600, // 0009 MOVE R5 R3
+ 0x7C100200, // 000A CALL R4 1
+ 0x90020404, // 000B SETMBR R0 K2 R4
+ 0x4C100000, // 000C LDNIL R4
+ 0x90020604, // 000D SETMBR R0 K3 R4
+ 0x80000000, // 000E RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(Matter_TLV_item_tostring, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[35]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(),
+ /* K2 */ be_nested_str_weak(tag_profile),
+ /* K3 */ be_nested_str_weak(Matter_X3A_X3A),
+ /* K4 */ be_nested_str_weak(tag_number),
+ /* K5 */ be_nested_str_weak(format),
+ /* K6 */ be_nested_str_weak(0x_X2508X_X20),
+ /* K7 */ be_nested_str_weak(tag_vendor),
+ /* K8 */ be_nested_str_weak(0x_X2504X_X3A_X3A),
+ /* K9 */ be_nested_str_weak(0x_X2504X_X3A),
+ /* K10 */ be_nested_str_weak(tag_sub),
+ /* K11 */ be_nested_str_weak(_X25i_X20),
+ /* K12 */ be_const_int(0),
+ /* K13 */ be_nested_str_weak(_X3D_X20),
+ /* K14 */ be_nested_str_weak(val),
+ /* K15 */ be_nested_str_weak(int),
+ /* K16 */ be_nested_str_weak(_X25i),
+ /* K17 */ be_nested_str_weak(typ),
+ /* K18 */ be_nested_str_weak(TLV),
+ /* K19 */ be_nested_str_weak(U1),
+ /* K20 */ be_nested_str_weak(U8),
+ /* K21 */ be_nested_str_weak(U),
+ /* K22 */ be_nested_str_weak(bool),
+ /* K23 */ be_nested_str_weak(true),
+ /* K24 */ be_nested_str_weak(false),
+ /* K25 */ be_nested_str_weak(null),
+ /* K26 */ be_nested_str_weak(real),
+ /* K27 */ be_nested_str_weak(_X25g),
+ /* K28 */ be_nested_str_weak(_X22_X25s_X22),
+ /* K29 */ be_nested_str_weak(int64),
+ /* K30 */ be_nested_str_weak(tostring),
+ /* K31 */ be_nested_str_weak(instance),
+ /* K32 */ be_nested_str_weak(_X25s),
+ /* K33 */ be_nested_str_weak(tohex),
+ /* K34 */ be_nested_str_weak(_X20),
+ }),
+ be_str_weak(tostring),
+ &be_const_str_solidified,
+ ( &(const binstruction[165]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0x58080001, // 0001 LDCONST R2 K1
+ 0xA8020099, // 0002 EXBLK 0 #009D
+ 0x880C0102, // 0003 GETMBR R3 R0 K2
+ 0x5411FFFE, // 0004 LDINT R4 -1
+ 0x1C0C0604, // 0005 EQ R3 R3 R4
+ 0x780E000A, // 0006 JMPF R3 #0012
+ 0x00080503, // 0007 ADD R2 R2 K3
+ 0x880C0104, // 0008 GETMBR R3 R0 K4
+ 0x4C100000, // 0009 LDNIL R4
+ 0x200C0604, // 000A NE R3 R3 R4
+ 0x780E0004, // 000B JMPF R3 #0011
+ 0x8C0C0305, // 000C GETMET R3 R1 K5
+ 0x58140006, // 000D LDCONST R5 K6
+ 0x88180104, // 000E GETMBR R6 R0 K4
+ 0x7C0C0600, // 000F CALL R3 3
+ 0x00080403, // 0010 ADD R2 R2 R3
+ 0x70020023, // 0011 JMP #0036
+ 0x880C0107, // 0012 GETMBR R3 R0 K7
+ 0x4C100000, // 0013 LDNIL R4
+ 0x200C0604, // 0014 NE R3 R3 R4
+ 0x780E0004, // 0015 JMPF R3 #001B
+ 0x8C0C0305, // 0016 GETMET R3 R1 K5
+ 0x58140008, // 0017 LDCONST R5 K8
+ 0x88180107, // 0018 GETMBR R6 R0 K7
+ 0x7C0C0600, // 0019 CALL R3 3
+ 0x00080403, // 001A ADD R2 R2 R3
+ 0x880C0102, // 001B GETMBR R3 R0 K2
+ 0x4C100000, // 001C LDNIL R4
+ 0x200C0604, // 001D NE R3 R3 R4
+ 0x780E0004, // 001E JMPF R3 #0024
+ 0x8C0C0305, // 001F GETMET R3 R1 K5
+ 0x58140009, // 0020 LDCONST R5 K9
+ 0x88180102, // 0021 GETMBR R6 R0 K2
+ 0x7C0C0600, // 0022 CALL R3 3
+ 0x00080403, // 0023 ADD R2 R2 R3
+ 0x880C0104, // 0024 GETMBR R3 R0 K4
+ 0x4C100000, // 0025 LDNIL R4
+ 0x200C0604, // 0026 NE R3 R3 R4
+ 0x780E0004, // 0027 JMPF R3 #002D
+ 0x8C0C0305, // 0028 GETMET R3 R1 K5
+ 0x58140006, // 0029 LDCONST R5 K6
+ 0x88180104, // 002A GETMBR R6 R0 K4
+ 0x7C0C0600, // 002B CALL R3 3
+ 0x00080403, // 002C ADD R2 R2 R3
+ 0x880C010A, // 002D GETMBR R3 R0 K10
+ 0x4C100000, // 002E LDNIL R4
+ 0x200C0604, // 002F NE R3 R3 R4
+ 0x780E0004, // 0030 JMPF R3 #0036
+ 0x8C0C0305, // 0031 GETMET R3 R1 K5
+ 0x5814000B, // 0032 LDCONST R5 K11
+ 0x8818010A, // 0033 GETMBR R6 R0 K10
+ 0x7C0C0600, // 0034 CALL R3 3
+ 0x00080403, // 0035 ADD R2 R2 R3
+ 0x600C000C, // 0036 GETGBL R3 G12
+ 0x5C100400, // 0037 MOVE R4 R2
+ 0x7C0C0200, // 0038 CALL R3 1
+ 0x240C070C, // 0039 GT R3 R3 K12
+ 0x780E0000, // 003A JMPF R3 #003C
+ 0x0008050D, // 003B ADD R2 R2 K13
+ 0x600C0004, // 003C GETGBL R3 G4
+ 0x8810010E, // 003D GETMBR R4 R0 K14
+ 0x7C0C0200, // 003E CALL R3 1
+ 0x1C0C070F, // 003F EQ R3 R3 K15
+ 0x780E0010, // 0040 JMPF R3 #0052
+ 0x8C0C0305, // 0041 GETMET R3 R1 K5
+ 0x58140010, // 0042 LDCONST R5 K16
+ 0x8818010E, // 0043 GETMBR R6 R0 K14
+ 0x7C0C0600, // 0044 CALL R3 3
+ 0x00080403, // 0045 ADD R2 R2 R3
+ 0x880C0111, // 0046 GETMBR R3 R0 K17
+ 0x88100112, // 0047 GETMBR R4 R0 K18
+ 0x88100913, // 0048 GETMBR R4 R4 K19
+ 0x280C0604, // 0049 GE R3 R3 R4
+ 0x780E0005, // 004A JMPF R3 #0051
+ 0x880C0111, // 004B GETMBR R3 R0 K17
+ 0x88100112, // 004C GETMBR R4 R0 K18
+ 0x88100914, // 004D GETMBR R4 R4 K20
+ 0x180C0604, // 004E LE R3 R3 R4
+ 0x780E0000, // 004F JMPF R3 #0051
+ 0x00080515, // 0050 ADD R2 R2 K21
+ 0x70020048, // 0051 JMP #009B
+ 0x600C0004, // 0052 GETGBL R3 G4
+ 0x8810010E, // 0053 GETMBR R4 R0 K14
+ 0x7C0C0200, // 0054 CALL R3 1
+ 0x1C0C0716, // 0055 EQ R3 R3 K22
+ 0x780E0006, // 0056 JMPF R3 #005E
+ 0x880C010E, // 0057 GETMBR R3 R0 K14
+ 0x780E0001, // 0058 JMPF R3 #005B
+ 0x580C0017, // 0059 LDCONST R3 K23
+ 0x70020000, // 005A JMP #005C
+ 0x580C0018, // 005B LDCONST R3 K24
+ 0x00080403, // 005C ADD R2 R2 R3
+ 0x7002003C, // 005D JMP #009B
+ 0x880C010E, // 005E GETMBR R3 R0 K14
+ 0x4C100000, // 005F LDNIL R4
+ 0x1C0C0604, // 0060 EQ R3 R3 R4
+ 0x780E0001, // 0061 JMPF R3 #0064
+ 0x00080519, // 0062 ADD R2 R2 K25
+ 0x70020036, // 0063 JMP #009B
+ 0x600C0004, // 0064 GETGBL R3 G4
+ 0x8810010E, // 0065 GETMBR R4 R0 K14
+ 0x7C0C0200, // 0066 CALL R3 1
+ 0x1C0C071A, // 0067 EQ R3 R3 K26
+ 0x780E0005, // 0068 JMPF R3 #006F
+ 0x8C0C0305, // 0069 GETMET R3 R1 K5
+ 0x5814001B, // 006A LDCONST R5 K27
+ 0x8818010E, // 006B GETMBR R6 R0 K14
+ 0x7C0C0600, // 006C CALL R3 3
+ 0x00080403, // 006D ADD R2 R2 R3
+ 0x7002002B, // 006E JMP #009B
+ 0x600C0004, // 006F GETGBL R3 G4
+ 0x8810010E, // 0070 GETMBR R4 R0 K14
+ 0x7C0C0200, // 0071 CALL R3 1
+ 0x1C0C0700, // 0072 EQ R3 R3 K0
+ 0x780E0005, // 0073 JMPF R3 #007A
+ 0x8C0C0305, // 0074 GETMET R3 R1 K5
+ 0x5814001C, // 0075 LDCONST R5 K28
+ 0x8818010E, // 0076 GETMBR R6 R0 K14
+ 0x7C0C0600, // 0077 CALL R3 3
+ 0x00080403, // 0078 ADD R2 R2 R3
+ 0x70020020, // 0079 JMP #009B
+ 0x600C000F, // 007A GETGBL R3 G15
+ 0x8810010E, // 007B GETMBR R4 R0 K14
+ 0xB8163A00, // 007C GETNGBL R5 K29
+ 0x7C0C0400, // 007D CALL R3 2
+ 0x780E000F, // 007E JMPF R3 #008F
+ 0x880C010E, // 007F GETMBR R3 R0 K14
+ 0x8C0C071E, // 0080 GETMET R3 R3 K30
+ 0x7C0C0200, // 0081 CALL R3 1
+ 0x00080403, // 0082 ADD R2 R2 R3
+ 0x880C0111, // 0083 GETMBR R3 R0 K17
+ 0x88100112, // 0084 GETMBR R4 R0 K18
+ 0x88100913, // 0085 GETMBR R4 R4 K19
+ 0x280C0604, // 0086 GE R3 R3 R4
+ 0x780E0005, // 0087 JMPF R3 #008E
+ 0x880C0111, // 0088 GETMBR R3 R0 K17
+ 0x88100112, // 0089 GETMBR R4 R0 K18
+ 0x88100914, // 008A GETMBR R4 R4 K20
+ 0x180C0604, // 008B LE R3 R3 R4
+ 0x780E0000, // 008C JMPF R3 #008E
+ 0x00080515, // 008D ADD R2 R2 K21
+ 0x7002000B, // 008E JMP #009B
+ 0x600C0004, // 008F GETGBL R3 G4
+ 0x8810010E, // 0090 GETMBR R4 R0 K14
+ 0x7C0C0200, // 0091 CALL R3 1
+ 0x1C0C071F, // 0092 EQ R3 R3 K31
+ 0x780E0006, // 0093 JMPF R3 #009B
+ 0x8C0C0305, // 0094 GETMET R3 R1 K5
+ 0x58140020, // 0095 LDCONST R5 K32
+ 0x8818010E, // 0096 GETMBR R6 R0 K14
+ 0x8C180D21, // 0097 GETMET R6 R6 K33
+ 0x7C180200, // 0098 CALL R6 1
+ 0x7C0C0600, // 0099 CALL R3 3
+ 0x00080403, // 009A ADD R2 R2 R3
+ 0xA8040001, // 009B EXBLK 1 1
+ 0x70020006, // 009C JMP #00A4
+ 0xAC0C0002, // 009D CATCH R3 0 2
+ 0x70020003, // 009E JMP #00A3
+ 0x00140722, // 009F ADD R5 R3 K34
+ 0x00140A04, // 00A0 ADD R5 R5 R4
+ 0x80040A00, // 00A1 RET 1 R5
+ 0x70020000, // 00A2 JMP #00A4
+ 0xB0080000, // 00A3 RAISE 2 R0 R0
+ 0x80040400, // 00A4 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_TLV_item_init, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(parent),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x80000000, // 0001 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: tlv2raw
+********************************************************************/
+be_local_closure(Matter_TLV_item_tlv2raw, /* name */
be_nested_proto(
9, /* nstack */
2, /* argc */
@@ -93,7 +1088,7 @@ be_local_closure(Matter_TLV_item_encode, /* name */
/* K39 */ be_nested_str_weak(NULL),
/* K40 */ be_nested_str_weak(unsupported_X20type_X20),
}),
- be_str_weak(encode),
+ be_str_weak(tlv2raw),
&be_const_str_solidified,
( &(const binstruction[361]) { /* code */
0x88080100, // 0000 GETMBR R2 R0 K0
@@ -464,520 +1459,147 @@ be_local_closure(Matter_TLV_item_encode, /* name */
/********************************************************************
-** Solidified function: create_TLV
+** Solidified function: _encode_tag_len
********************************************************************/
-be_local_closure(Matter_TLV_item_create_TLV, /* name */
+be_local_closure(Matter_TLV_item__encode_tag_len, /* name */
be_nested_proto(
- 4, /* nstack */
- 2, /* argc */
+ 6, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 8]) { /* constants */
+ /* K0 */ be_nested_str_weak(tag_number),
+ /* K1 */ be_const_int(0),
+ /* K2 */ be_nested_str_weak(tag_vendor),
+ /* K3 */ be_nested_str_weak(tag_profile),
+ /* K4 */ be_const_int(3),
+ /* K5 */ be_nested_str_weak(tag_sub),
+ /* K6 */ be_const_int(2),
+ /* K7 */ be_const_int(1),
+ }),
+ be_str_weak(_encode_tag_len),
+ &be_const_str_solidified,
+ ( &(const binstruction[54]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x4C080000, // 0001 LDNIL R2
+ 0x20040202, // 0002 NE R1 R1 R2
+ 0x78060001, // 0003 JMPF R1 #0006
+ 0x88040100, // 0004 GETMBR R1 R0 K0
+ 0x70020000, // 0005 JMP #0007
+ 0x58040001, // 0006 LDCONST R1 K1
+ 0x540AFFFF, // 0007 LDINT R2 65536
+ 0x28080202, // 0008 GE R2 R1 R2
+ 0x740A0002, // 0009 JMPT R2 #000D
+ 0x14080301, // 000A LT R2 R1 K1
+ 0x740A0000, // 000B JMPT R2 #000D
+ 0x50080001, // 000C LDBOOL R2 0 1
+ 0x50080200, // 000D LDBOOL R2 1 0
+ 0x580C0001, // 000E LDCONST R3 K1
+ 0x88100102, // 000F GETMBR R4 R0 K2
+ 0x4C140000, // 0010 LDNIL R5
+ 0x20100805, // 0011 NE R4 R4 R5
+ 0x78120006, // 0012 JMPF R4 #001A
+ 0x780A0002, // 0013 JMPF R2 #0017
+ 0x54120008, // 0014 LDINT R4 9
+ 0x80040800, // 0015 RET 1 R4
+ 0x70020001, // 0016 JMP #0019
+ 0x54120006, // 0017 LDINT R4 7
+ 0x80040800, // 0018 RET 1 R4
+ 0x7002001A, // 0019 JMP #0035
+ 0x88100103, // 001A GETMBR R4 R0 K3
+ 0x5415FFFE, // 001B LDINT R5 -1
+ 0x1C100805, // 001C EQ R4 R4 R5
+ 0x78120005, // 001D JMPF R4 #0024
+ 0x780A0002, // 001E JMPF R2 #0022
+ 0x54120004, // 001F LDINT R4 5
+ 0x80040800, // 0020 RET 1 R4
+ 0x70020000, // 0021 JMP #0023
+ 0x80060800, // 0022 RET 1 K4
+ 0x70020010, // 0023 JMP #0035
+ 0x88100103, // 0024 GETMBR R4 R0 K3
+ 0x4C140000, // 0025 LDNIL R5
+ 0x20100805, // 0026 NE R4 R4 R5
+ 0x78120005, // 0027 JMPF R4 #002E
+ 0x780A0002, // 0028 JMPF R2 #002C
+ 0x54120004, // 0029 LDINT R4 5
+ 0x80040800, // 002A RET 1 R4
+ 0x70020000, // 002B JMP #002D
+ 0x80060800, // 002C RET 1 K4
+ 0x70020006, // 002D JMP #0035
+ 0x88100105, // 002E GETMBR R4 R0 K5
+ 0x4C140000, // 002F LDNIL R5
+ 0x20100805, // 0030 NE R4 R4 R5
+ 0x78120001, // 0031 JMPF R4 #0034
+ 0x80060C00, // 0032 RET 1 K6
+ 0x70020000, // 0033 JMP #0035
+ 0x80060E00, // 0034 RET 1 K7
+ 0x80000000, // 0035 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: sort
+********************************************************************/
+be_local_closure(Matter_TLV_item_sort, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 1, /* argc */
4, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
+ ( &(const bvalue[ 5]) { /* constants */
/* K0 */ be_const_class(be_class_Matter_TLV_item),
- /* K1 */ be_nested_str_weak(typ),
- /* K2 */ be_nested_str_weak(val),
+ /* K1 */ be_const_int(1),
+ /* K2 */ be_const_int(0),
+ /* K3 */ be_nested_str_weak(_cmp_gt),
+ /* K4 */ be_nested_str_weak(stop_iteration),
}),
- be_str_weak(create_TLV),
+ be_str_weak(sort),
&be_const_str_solidified,
- ( &(const binstruction[10]) { /* code */
- 0x58080000, // 0000 LDCONST R2 K0
- 0x4C0C0000, // 0001 LDNIL R3
- 0x200C0203, // 0002 NE R3 R1 R3
- 0x780E0004, // 0003 JMPF R3 #0009
- 0x5C0C0400, // 0004 MOVE R3 R2
- 0x7C0C0000, // 0005 CALL R3 0
- 0x900E0200, // 0006 SETMBR R3 K1 R0
- 0x900E0401, // 0007 SETMBR R3 K2 R1
- 0x80040600, // 0008 RET 1 R3
- 0x80000000, // 0009 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _encode_tag
-********************************************************************/
-be_local_closure(Matter_TLV_item__encode_tag, /* name */
- be_nested_proto(
- 9, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 9]) { /* constants */
- /* K0 */ be_nested_str_weak(tag_number),
- /* K1 */ be_const_int(0),
- /* K2 */ be_nested_str_weak(tag_vendor),
- /* K3 */ be_nested_str_weak(add),
- /* K4 */ be_nested_str_weak(typ),
- /* K5 */ be_const_int(1),
- /* K6 */ be_const_int(2),
- /* K7 */ be_nested_str_weak(tag_profile),
- /* K8 */ be_nested_str_weak(tag_sub),
- }),
- be_str_weak(_encode_tag),
- &be_const_str_solidified,
- ( &(const binstruction[133]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x4C0C0000, // 0001 LDNIL R3
- 0x20080403, // 0002 NE R2 R2 R3
- 0x780A0001, // 0003 JMPF R2 #0006
- 0x88080100, // 0004 GETMBR R2 R0 K0
- 0x70020000, // 0005 JMP #0007
- 0x58080001, // 0006 LDCONST R2 K1
- 0x540EFFFF, // 0007 LDINT R3 65536
- 0x280C0403, // 0008 GE R3 R2 R3
- 0x740E0002, // 0009 JMPT R3 #000D
- 0x140C0501, // 000A LT R3 R2 K1
- 0x740E0000, // 000B JMPT R3 #000D
- 0x500C0001, // 000C LDBOOL R3 0 1
- 0x500C0200, // 000D LDBOOL R3 1 0
- 0x58100001, // 000E LDCONST R4 K1
- 0x88140102, // 000F GETMBR R5 R0 K2
- 0x4C180000, // 0010 LDNIL R6
- 0x20140A06, // 0011 NE R5 R5 R6
- 0x78160026, // 0012 JMPF R5 #003A
- 0x780E0012, // 0013 JMPF R3 #0027
- 0x8C140303, // 0014 GETMET R5 R1 K3
- 0x541E00DF, // 0015 LDINT R7 224
- 0x88200104, // 0016 GETMBR R8 R0 K4
- 0x001C0E08, // 0017 ADD R7 R7 R8
- 0x58200005, // 0018 LDCONST R8 K5
- 0x7C140600, // 0019 CALL R5 3
- 0x8C140303, // 001A GETMET R5 R1 K3
- 0x881C0102, // 001B GETMBR R7 R0 K2
- 0x58200006, // 001C LDCONST R8 K6
- 0x7C140600, // 001D CALL R5 3
- 0x8C140303, // 001E GETMET R5 R1 K3
- 0x881C0107, // 001F GETMBR R7 R0 K7
- 0x58200006, // 0020 LDCONST R8 K6
- 0x7C140600, // 0021 CALL R5 3
- 0x8C140303, // 0022 GETMET R5 R1 K3
- 0x881C0100, // 0023 GETMBR R7 R0 K0
- 0x54220003, // 0024 LDINT R8 4
- 0x7C140600, // 0025 CALL R5 3
- 0x70020011, // 0026 JMP #0039
- 0x8C140303, // 0027 GETMET R5 R1 K3
- 0x541E00BF, // 0028 LDINT R7 192
- 0x88200104, // 0029 GETMBR R8 R0 K4
- 0x001C0E08, // 002A ADD R7 R7 R8
- 0x58200005, // 002B LDCONST R8 K5
- 0x7C140600, // 002C CALL R5 3
- 0x8C140303, // 002D GETMET R5 R1 K3
- 0x881C0102, // 002E GETMBR R7 R0 K2
- 0x58200006, // 002F LDCONST R8 K6
- 0x7C140600, // 0030 CALL R5 3
- 0x8C140303, // 0031 GETMET R5 R1 K3
- 0x881C0107, // 0032 GETMBR R7 R0 K7
- 0x58200006, // 0033 LDCONST R8 K6
- 0x7C140600, // 0034 CALL R5 3
- 0x8C140303, // 0035 GETMET R5 R1 K3
- 0x881C0100, // 0036 GETMBR R7 R0 K0
- 0x58200006, // 0037 LDCONST R8 K6
- 0x7C140600, // 0038 CALL R5 3
- 0x70020049, // 0039 JMP #0084
- 0x88140107, // 003A GETMBR R5 R0 K7
- 0x5419FFFE, // 003B LDINT R6 -1
- 0x1C140A06, // 003C EQ R5 R5 R6
- 0x78160016, // 003D JMPF R5 #0055
- 0x780E000A, // 003E JMPF R3 #004A
- 0x8C140303, // 003F GETMET R5 R1 K3
- 0x541E005F, // 0040 LDINT R7 96
- 0x88200104, // 0041 GETMBR R8 R0 K4
- 0x001C0E08, // 0042 ADD R7 R7 R8
- 0x58200005, // 0043 LDCONST R8 K5
- 0x7C140600, // 0044 CALL R5 3
- 0x8C140303, // 0045 GETMET R5 R1 K3
- 0x881C0100, // 0046 GETMBR R7 R0 K0
- 0x54220003, // 0047 LDINT R8 4
- 0x7C140600, // 0048 CALL R5 3
- 0x70020009, // 0049 JMP #0054
- 0x8C140303, // 004A GETMET R5 R1 K3
- 0x541E003F, // 004B LDINT R7 64
- 0x88200104, // 004C GETMBR R8 R0 K4
- 0x001C0E08, // 004D ADD R7 R7 R8
- 0x58200005, // 004E LDCONST R8 K5
- 0x7C140600, // 004F CALL R5 3
- 0x8C140303, // 0050 GETMET R5 R1 K3
- 0x881C0100, // 0051 GETMBR R7 R0 K0
- 0x58200006, // 0052 LDCONST R8 K6
- 0x7C140600, // 0053 CALL R5 3
- 0x7002002E, // 0054 JMP #0084
- 0x88140107, // 0055 GETMBR R5 R0 K7
- 0x4C180000, // 0056 LDNIL R6
- 0x20140A06, // 0057 NE R5 R5 R6
- 0x78160016, // 0058 JMPF R5 #0070
- 0x780E000A, // 0059 JMPF R3 #0065
- 0x8C140303, // 005A GETMET R5 R1 K3
- 0x541E009F, // 005B LDINT R7 160
- 0x88200104, // 005C GETMBR R8 R0 K4
- 0x001C0E08, // 005D ADD R7 R7 R8
- 0x58200005, // 005E LDCONST R8 K5
- 0x7C140600, // 005F CALL R5 3
- 0x8C140303, // 0060 GETMET R5 R1 K3
- 0x881C0100, // 0061 GETMBR R7 R0 K0
- 0x54220003, // 0062 LDINT R8 4
- 0x7C140600, // 0063 CALL R5 3
- 0x70020009, // 0064 JMP #006F
- 0x8C140303, // 0065 GETMET R5 R1 K3
- 0x541E007F, // 0066 LDINT R7 128
- 0x88200104, // 0067 GETMBR R8 R0 K4
- 0x001C0E08, // 0068 ADD R7 R7 R8
- 0x58200005, // 0069 LDCONST R8 K5
- 0x7C140600, // 006A CALL R5 3
- 0x8C140303, // 006B GETMET R5 R1 K3
- 0x881C0100, // 006C GETMBR R7 R0 K0
- 0x58200006, // 006D LDCONST R8 K6
- 0x7C140600, // 006E CALL R5 3
- 0x70020013, // 006F JMP #0084
- 0x88140108, // 0070 GETMBR R5 R0 K8
- 0x4C180000, // 0071 LDNIL R6
- 0x20140A06, // 0072 NE R5 R5 R6
- 0x7816000A, // 0073 JMPF R5 #007F
- 0x8C140303, // 0074 GETMET R5 R1 K3
- 0x541E001F, // 0075 LDINT R7 32
- 0x88200104, // 0076 GETMBR R8 R0 K4
- 0x001C0E08, // 0077 ADD R7 R7 R8
- 0x58200005, // 0078 LDCONST R8 K5
- 0x7C140600, // 0079 CALL R5 3
- 0x8C140303, // 007A GETMET R5 R1 K3
- 0x881C0108, // 007B GETMBR R7 R0 K8
- 0x58200005, // 007C LDCONST R8 K5
- 0x7C140600, // 007D CALL R5 3
- 0x70020004, // 007E JMP #0084
- 0x8C140303, // 007F GETMET R5 R1 K3
- 0x881C0104, // 0080 GETMBR R7 R0 K4
- 0x001E0207, // 0081 ADD R7 K1 R7
- 0x58200005, // 0082 LDCONST R8 K5
- 0x7C140600, // 0083 CALL R5 3
- 0x80000000, // 0084 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: set_parent
-********************************************************************/
-be_local_closure(Matter_TLV_item_set_parent, /* name */
- be_nested_proto(
- 2, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(parent),
- }),
- be_str_weak(set_parent),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x80000000, // 0001 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: set_fulltag
-********************************************************************/
-be_local_closure(Matter_TLV_item_set_fulltag, /* name */
- be_nested_proto(
- 6, /* nstack */
- 4, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 4]) { /* constants */
- /* K0 */ be_nested_str_weak(tag_vendor),
- /* K1 */ be_nested_str_weak(tag_profile),
- /* K2 */ be_nested_str_weak(tag_number),
- /* K3 */ be_nested_str_weak(tag_sub),
- }),
- be_str_weak(set_fulltag),
- &be_const_str_solidified,
- ( &(const binstruction[15]) { /* code */
- 0x60100009, // 0000 GETGBL R4 G9
- 0x5C140200, // 0001 MOVE R5 R1
- 0x7C100200, // 0002 CALL R4 1
- 0x90020004, // 0003 SETMBR R0 K0 R4
- 0x60100009, // 0004 GETGBL R4 G9
- 0x5C140400, // 0005 MOVE R5 R2
- 0x7C100200, // 0006 CALL R4 1
- 0x90020204, // 0007 SETMBR R0 K1 R4
- 0x60100009, // 0008 GETGBL R4 G9
- 0x5C140600, // 0009 MOVE R5 R3
- 0x7C100200, // 000A CALL R4 1
- 0x90020404, // 000B SETMBR R0 K2 R4
- 0x4C100000, // 000C LDNIL R4
- 0x90020604, // 000D SETMBR R0 K3 R4
- 0x80000000, // 000E RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: to_TLV
-********************************************************************/
-be_local_closure(Matter_TLV_item_to_TLV, /* name */
- be_nested_proto(
- 1, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 0, /* has constants */
- NULL, /* no const */
- be_str_weak(to_TLV),
- &be_const_str_solidified,
- ( &(const binstruction[ 1]) { /* code */
- 0x80040000, // 0000 RET 1 R0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: tostring
-********************************************************************/
-be_local_closure(Matter_TLV_item_tostring, /* name */
- be_nested_proto(
- 8, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[35]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(),
- /* K2 */ be_nested_str_weak(tag_profile),
- /* K3 */ be_nested_str_weak(Matter_X3A_X3A),
- /* K4 */ be_nested_str_weak(tag_number),
- /* K5 */ be_nested_str_weak(format),
- /* K6 */ be_nested_str_weak(0x_X2508X_X20),
- /* K7 */ be_nested_str_weak(tag_vendor),
- /* K8 */ be_nested_str_weak(0x_X2504X_X3A_X3A),
- /* K9 */ be_nested_str_weak(0x_X2504X_X3A),
- /* K10 */ be_nested_str_weak(tag_sub),
- /* K11 */ be_nested_str_weak(_X25i_X20),
- /* K12 */ be_const_int(0),
- /* K13 */ be_nested_str_weak(_X3D_X20),
- /* K14 */ be_nested_str_weak(val),
- /* K15 */ be_nested_str_weak(int),
- /* K16 */ be_nested_str_weak(_X25i),
- /* K17 */ be_nested_str_weak(typ),
- /* K18 */ be_nested_str_weak(TLV),
- /* K19 */ be_nested_str_weak(U1),
- /* K20 */ be_nested_str_weak(U8),
- /* K21 */ be_nested_str_weak(U),
- /* K22 */ be_nested_str_weak(bool),
- /* K23 */ be_nested_str_weak(true),
- /* K24 */ be_nested_str_weak(false),
- /* K25 */ be_nested_str_weak(null),
- /* K26 */ be_nested_str_weak(real),
- /* K27 */ be_nested_str_weak(_X25g),
- /* K28 */ be_nested_str_weak(_X22_X25s_X22),
- /* K29 */ be_nested_str_weak(int64),
- /* K30 */ be_nested_str_weak(tostring),
- /* K31 */ be_nested_str_weak(instance),
- /* K32 */ be_nested_str_weak(_X25s),
- /* K33 */ be_nested_str_weak(tohex),
- /* K34 */ be_nested_str_weak(_X20),
- }),
- be_str_weak(tostring),
- &be_const_str_solidified,
- ( &(const binstruction[165]) { /* code */
- 0xA4060000, // 0000 IMPORT R1 K0
- 0x58080001, // 0001 LDCONST R2 K1
- 0xA8020099, // 0002 EXBLK 0 #009D
- 0x880C0102, // 0003 GETMBR R3 R0 K2
- 0x5411FFFE, // 0004 LDINT R4 -1
- 0x1C0C0604, // 0005 EQ R3 R3 R4
- 0x780E000A, // 0006 JMPF R3 #0012
- 0x00080503, // 0007 ADD R2 R2 K3
- 0x880C0104, // 0008 GETMBR R3 R0 K4
- 0x4C100000, // 0009 LDNIL R4
- 0x200C0604, // 000A NE R3 R3 R4
- 0x780E0004, // 000B JMPF R3 #0011
- 0x8C0C0305, // 000C GETMET R3 R1 K5
- 0x58140006, // 000D LDCONST R5 K6
- 0x88180104, // 000E GETMBR R6 R0 K4
- 0x7C0C0600, // 000F CALL R3 3
- 0x00080403, // 0010 ADD R2 R2 R3
- 0x70020023, // 0011 JMP #0036
- 0x880C0107, // 0012 GETMBR R3 R0 K7
- 0x4C100000, // 0013 LDNIL R4
- 0x200C0604, // 0014 NE R3 R3 R4
- 0x780E0004, // 0015 JMPF R3 #001B
- 0x8C0C0305, // 0016 GETMET R3 R1 K5
- 0x58140008, // 0017 LDCONST R5 K8
- 0x88180107, // 0018 GETMBR R6 R0 K7
- 0x7C0C0600, // 0019 CALL R3 3
- 0x00080403, // 001A ADD R2 R2 R3
- 0x880C0102, // 001B GETMBR R3 R0 K2
- 0x4C100000, // 001C LDNIL R4
- 0x200C0604, // 001D NE R3 R3 R4
- 0x780E0004, // 001E JMPF R3 #0024
- 0x8C0C0305, // 001F GETMET R3 R1 K5
- 0x58140009, // 0020 LDCONST R5 K9
- 0x88180102, // 0021 GETMBR R6 R0 K2
- 0x7C0C0600, // 0022 CALL R3 3
- 0x00080403, // 0023 ADD R2 R2 R3
- 0x880C0104, // 0024 GETMBR R3 R0 K4
- 0x4C100000, // 0025 LDNIL R4
- 0x200C0604, // 0026 NE R3 R3 R4
- 0x780E0004, // 0027 JMPF R3 #002D
- 0x8C0C0305, // 0028 GETMET R3 R1 K5
- 0x58140006, // 0029 LDCONST R5 K6
- 0x88180104, // 002A GETMBR R6 R0 K4
- 0x7C0C0600, // 002B CALL R3 3
- 0x00080403, // 002C ADD R2 R2 R3
- 0x880C010A, // 002D GETMBR R3 R0 K10
- 0x4C100000, // 002E LDNIL R4
- 0x200C0604, // 002F NE R3 R3 R4
- 0x780E0004, // 0030 JMPF R3 #0036
- 0x8C0C0305, // 0031 GETMET R3 R1 K5
- 0x5814000B, // 0032 LDCONST R5 K11
- 0x8818010A, // 0033 GETMBR R6 R0 K10
- 0x7C0C0600, // 0034 CALL R3 3
- 0x00080403, // 0035 ADD R2 R2 R3
- 0x600C000C, // 0036 GETGBL R3 G12
- 0x5C100400, // 0037 MOVE R4 R2
- 0x7C0C0200, // 0038 CALL R3 1
- 0x240C070C, // 0039 GT R3 R3 K12
- 0x780E0000, // 003A JMPF R3 #003C
- 0x0008050D, // 003B ADD R2 R2 K13
- 0x600C0004, // 003C GETGBL R3 G4
- 0x8810010E, // 003D GETMBR R4 R0 K14
- 0x7C0C0200, // 003E CALL R3 1
- 0x1C0C070F, // 003F EQ R3 R3 K15
- 0x780E0010, // 0040 JMPF R3 #0052
- 0x8C0C0305, // 0041 GETMET R3 R1 K5
- 0x58140010, // 0042 LDCONST R5 K16
- 0x8818010E, // 0043 GETMBR R6 R0 K14
- 0x7C0C0600, // 0044 CALL R3 3
- 0x00080403, // 0045 ADD R2 R2 R3
- 0x880C0111, // 0046 GETMBR R3 R0 K17
- 0x88100112, // 0047 GETMBR R4 R0 K18
- 0x88100913, // 0048 GETMBR R4 R4 K19
- 0x280C0604, // 0049 GE R3 R3 R4
- 0x780E0005, // 004A JMPF R3 #0051
- 0x880C0111, // 004B GETMBR R3 R0 K17
- 0x88100112, // 004C GETMBR R4 R0 K18
- 0x88100914, // 004D GETMBR R4 R4 K20
- 0x180C0604, // 004E LE R3 R3 R4
- 0x780E0000, // 004F JMPF R3 #0051
- 0x00080515, // 0050 ADD R2 R2 K21
- 0x70020048, // 0051 JMP #009B
- 0x600C0004, // 0052 GETGBL R3 G4
- 0x8810010E, // 0053 GETMBR R4 R0 K14
- 0x7C0C0200, // 0054 CALL R3 1
- 0x1C0C0716, // 0055 EQ R3 R3 K22
- 0x780E0006, // 0056 JMPF R3 #005E
- 0x880C010E, // 0057 GETMBR R3 R0 K14
- 0x780E0001, // 0058 JMPF R3 #005B
- 0x580C0017, // 0059 LDCONST R3 K23
- 0x70020000, // 005A JMP #005C
- 0x580C0018, // 005B LDCONST R3 K24
- 0x00080403, // 005C ADD R2 R2 R3
- 0x7002003C, // 005D JMP #009B
- 0x880C010E, // 005E GETMBR R3 R0 K14
- 0x4C100000, // 005F LDNIL R4
- 0x1C0C0604, // 0060 EQ R3 R3 R4
- 0x780E0001, // 0061 JMPF R3 #0064
- 0x00080519, // 0062 ADD R2 R2 K25
- 0x70020036, // 0063 JMP #009B
- 0x600C0004, // 0064 GETGBL R3 G4
- 0x8810010E, // 0065 GETMBR R4 R0 K14
- 0x7C0C0200, // 0066 CALL R3 1
- 0x1C0C071A, // 0067 EQ R3 R3 K26
- 0x780E0005, // 0068 JMPF R3 #006F
- 0x8C0C0305, // 0069 GETMET R3 R1 K5
- 0x5814001B, // 006A LDCONST R5 K27
- 0x8818010E, // 006B GETMBR R6 R0 K14
- 0x7C0C0600, // 006C CALL R3 3
- 0x00080403, // 006D ADD R2 R2 R3
- 0x7002002B, // 006E JMP #009B
- 0x600C0004, // 006F GETGBL R3 G4
- 0x8810010E, // 0070 GETMBR R4 R0 K14
- 0x7C0C0200, // 0071 CALL R3 1
- 0x1C0C0700, // 0072 EQ R3 R3 K0
- 0x780E0005, // 0073 JMPF R3 #007A
- 0x8C0C0305, // 0074 GETMET R3 R1 K5
- 0x5814001C, // 0075 LDCONST R5 K28
- 0x8818010E, // 0076 GETMBR R6 R0 K14
- 0x7C0C0600, // 0077 CALL R3 3
- 0x00080403, // 0078 ADD R2 R2 R3
- 0x70020020, // 0079 JMP #009B
- 0x600C000F, // 007A GETGBL R3 G15
- 0x8810010E, // 007B GETMBR R4 R0 K14
- 0xB8163A00, // 007C GETNGBL R5 K29
- 0x7C0C0400, // 007D CALL R3 2
- 0x780E000F, // 007E JMPF R3 #008F
- 0x880C010E, // 007F GETMBR R3 R0 K14
- 0x8C0C071E, // 0080 GETMET R3 R3 K30
- 0x7C0C0200, // 0081 CALL R3 1
- 0x00080403, // 0082 ADD R2 R2 R3
- 0x880C0111, // 0083 GETMBR R3 R0 K17
- 0x88100112, // 0084 GETMBR R4 R0 K18
- 0x88100913, // 0085 GETMBR R4 R4 K19
- 0x280C0604, // 0086 GE R3 R3 R4
- 0x780E0005, // 0087 JMPF R3 #008E
- 0x880C0111, // 0088 GETMBR R3 R0 K17
- 0x88100112, // 0089 GETMBR R4 R0 K18
- 0x88100914, // 008A GETMBR R4 R4 K20
- 0x180C0604, // 008B LE R3 R3 R4
- 0x780E0000, // 008C JMPF R3 #008E
- 0x00080515, // 008D ADD R2 R2 K21
- 0x7002000B, // 008E JMP #009B
- 0x600C0004, // 008F GETGBL R3 G4
- 0x8810010E, // 0090 GETMBR R4 R0 K14
- 0x7C0C0200, // 0091 CALL R3 1
- 0x1C0C071F, // 0092 EQ R3 R3 K31
- 0x780E0006, // 0093 JMPF R3 #009B
- 0x8C0C0305, // 0094 GETMET R3 R1 K5
- 0x58140020, // 0095 LDCONST R5 K32
- 0x8818010E, // 0096 GETMBR R6 R0 K14
- 0x8C180D21, // 0097 GETMET R6 R6 K33
- 0x7C180200, // 0098 CALL R6 1
- 0x7C0C0600, // 0099 CALL R3 3
- 0x00080403, // 009A ADD R2 R2 R3
- 0xA8040001, // 009B EXBLK 1 1
- 0x70020006, // 009C JMP #00A4
- 0xAC0C0002, // 009D CATCH R3 0 2
- 0x70020003, // 009E JMP #00A3
- 0x00140722, // 009F ADD R5 R3 K34
- 0x00140A04, // 00A0 ADD R5 R5 R4
- 0x80040A00, // 00A1 RET 1 R5
- 0x70020000, // 00A2 JMP #00A4
- 0xB0080000, // 00A3 RAISE 2 R0 R0
- 0x80040400, // 00A4 RET 1 R2
+ ( &(const binstruction[33]) { /* code */
+ 0x58040000, // 0000 LDCONST R1 K0
+ 0x60080010, // 0001 GETGBL R2 G16
+ 0x600C000C, // 0002 GETGBL R3 G12
+ 0x5C100000, // 0003 MOVE R4 R0
+ 0x7C0C0200, // 0004 CALL R3 1
+ 0x040C0701, // 0005 SUB R3 R3 K1
+ 0x400E0203, // 0006 CONNECT R3 K1 R3
+ 0x7C080200, // 0007 CALL R2 1
+ 0xA8020013, // 0008 EXBLK 0 #001D
+ 0x5C0C0400, // 0009 MOVE R3 R2
+ 0x7C0C0000, // 000A CALL R3 0
+ 0x94100003, // 000B GETIDX R4 R0 R3
+ 0x5C140600, // 000C MOVE R5 R3
+ 0x24180B02, // 000D GT R6 R5 K2
+ 0x781A000B, // 000E JMPF R6 #001B
+ 0x04180B01, // 000F SUB R6 R5 K1
+ 0x94180006, // 0010 GETIDX R6 R0 R6
+ 0x8C180D03, // 0011 GETMET R6 R6 K3
+ 0x5C200800, // 0012 MOVE R8 R4
+ 0x7C180400, // 0013 CALL R6 2
+ 0x24180D02, // 0014 GT R6 R6 K2
+ 0x781A0004, // 0015 JMPF R6 #001B
+ 0x04180B01, // 0016 SUB R6 R5 K1
+ 0x94180006, // 0017 GETIDX R6 R0 R6
+ 0x98000A06, // 0018 SETIDX R0 R5 R6
+ 0x04140B01, // 0019 SUB R5 R5 K1
+ 0x7001FFF1, // 001A JMP #000D
+ 0x98000A04, // 001B SETIDX R0 R5 R4
+ 0x7001FFEB, // 001C JMP #0009
+ 0x58080004, // 001D LDCONST R2 K4
+ 0xAC080200, // 001E CATCH R2 1 0
+ 0xB0080000, // 001F RAISE 2 R0 R0
+ 0x80040000, // 0020 RET 1 R0
})
)
);
@@ -1139,251 +1761,23 @@ be_local_closure(Matter_TLV_item_parse, /* name */
/********************************************************************
-** Solidified function: init
+** Solidified function: to_TLV
********************************************************************/
-be_local_closure(Matter_TLV_item_init, /* name */
+be_local_closure(Matter_TLV_item_to_TLV, /* name */
be_nested_proto(
- 2, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(parent),
- }),
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[ 2]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x80000000, // 0001 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _cmp_gt
-********************************************************************/
-be_local_closure(Matter_TLV_item__cmp_gt, /* name */
- be_nested_proto(
- 4, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 6]) { /* constants */
- /* K0 */ be_nested_str_weak(tag_vendor),
- /* K1 */ be_const_int(1),
- /* K2 */ be_nested_str_weak(tag_profile),
- /* K3 */ be_const_int(0),
- /* K4 */ be_nested_str_weak(tag_number),
- /* K5 */ be_nested_str_weak(tag_sub),
- }),
- be_str_weak(_cmp_gt),
- &be_const_str_solidified,
- ( &(const binstruction[72]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x4C0C0000, // 0001 LDNIL R3
- 0x20080403, // 0002 NE R2 R2 R3
- 0x780A0012, // 0003 JMPF R2 #0017
- 0x88080300, // 0004 GETMBR R2 R1 K0
- 0x4C0C0000, // 0005 LDNIL R3
- 0x1C080403, // 0006 EQ R2 R2 R3
- 0x780A0000, // 0007 JMPF R2 #0009
- 0x80060200, // 0008 RET 1 K1
- 0x88080100, // 0009 GETMBR R2 R0 K0
- 0x880C0300, // 000A GETMBR R3 R1 K0
- 0x24080403, // 000B GT R2 R2 R3
- 0x780A0000, // 000C JMPF R2 #000E
- 0x80060200, // 000D RET 1 K1
- 0x88080100, // 000E GETMBR R2 R0 K0
- 0x880C0300, // 000F GETMBR R3 R1 K0
- 0x1C080403, // 0010 EQ R2 R2 R3
- 0x780A0004, // 0011 JMPF R2 #0017
- 0x88080102, // 0012 GETMBR R2 R0 K2
- 0x880C0302, // 0013 GETMBR R3 R1 K2
- 0x24080403, // 0014 GT R2 R2 R3
- 0x780A0000, // 0015 JMPF R2 #0017
- 0x80060200, // 0016 RET 1 K1
- 0x88080102, // 0017 GETMBR R2 R0 K2
- 0x540DFFFE, // 0018 LDINT R3 -1
- 0x1C080403, // 0019 EQ R2 R2 R3
- 0x780A0005, // 001A JMPF R2 #0021
- 0x88080302, // 001B GETMBR R2 R1 K2
- 0x4C0C0000, // 001C LDNIL R3
- 0x1C080403, // 001D EQ R2 R2 R3
- 0x780A0000, // 001E JMPF R2 #0020
- 0x80060200, // 001F RET 1 K1
- 0x70020008, // 0020 JMP #002A
- 0x88080102, // 0021 GETMBR R2 R0 K2
- 0x4C0C0000, // 0022 LDNIL R3
- 0x1C080403, // 0023 EQ R2 R2 R3
- 0x780A0004, // 0024 JMPF R2 #002A
- 0x88080302, // 0025 GETMBR R2 R1 K2
- 0x540DFFFE, // 0026 LDINT R3 -1
- 0x1C080403, // 0027 EQ R2 R2 R3
- 0x780A0000, // 0028 JMPF R2 #002A
- 0x80060600, // 0029 RET 1 K3
- 0x88080104, // 002A GETMBR R2 R0 K4
- 0x4C0C0000, // 002B LDNIL R3
- 0x20080403, // 002C NE R2 R2 R3
- 0x780A000A, // 002D JMPF R2 #0039
- 0x88080304, // 002E GETMBR R2 R1 K4
- 0x4C0C0000, // 002F LDNIL R3
- 0x1C080403, // 0030 EQ R2 R2 R3
- 0x780A0000, // 0031 JMPF R2 #0033
- 0x80060200, // 0032 RET 1 K1
- 0x88080104, // 0033 GETMBR R2 R0 K4
- 0x880C0304, // 0034 GETMBR R3 R1 K4
- 0x24080403, // 0035 GT R2 R2 R3
- 0x780A0000, // 0036 JMPF R2 #0038
- 0x80060200, // 0037 RET 1 K1
- 0x80060600, // 0038 RET 1 K3
- 0x88080105, // 0039 GETMBR R2 R0 K5
- 0x4C0C0000, // 003A LDNIL R3
- 0x20080403, // 003B NE R2 R2 R3
- 0x780A0009, // 003C JMPF R2 #0047
- 0x88080305, // 003D GETMBR R2 R1 K5
- 0x4C0C0000, // 003E LDNIL R3
- 0x1C080403, // 003F EQ R2 R2 R3
- 0x780A0000, // 0040 JMPF R2 #0042
- 0x80060200, // 0041 RET 1 K1
- 0x88080105, // 0042 GETMBR R2 R0 K5
- 0x880C0305, // 0043 GETMBR R3 R1 K5
- 0x24080403, // 0044 GT R2 R2 R3
- 0x780A0000, // 0045 JMPF R2 #0047
- 0x80060200, // 0046 RET 1 K1
- 0x80060600, // 0047 RET 1 K3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: sort
-********************************************************************/
-be_local_closure(Matter_TLV_item_sort, /* name */
- be_nested_proto(
- 9, /* nstack */
- 1, /* argc */
- 4, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 5]) { /* constants */
- /* K0 */ be_const_class(be_class_Matter_TLV_item),
- /* K1 */ be_const_int(1),
- /* K2 */ be_const_int(0),
- /* K3 */ be_nested_str_weak(_cmp_gt),
- /* K4 */ be_nested_str_weak(stop_iteration),
- }),
- be_str_weak(sort),
- &be_const_str_solidified,
- ( &(const binstruction[33]) { /* code */
- 0x58040000, // 0000 LDCONST R1 K0
- 0x60080010, // 0001 GETGBL R2 G16
- 0x600C000C, // 0002 GETGBL R3 G12
- 0x5C100000, // 0003 MOVE R4 R0
- 0x7C0C0200, // 0004 CALL R3 1
- 0x040C0701, // 0005 SUB R3 R3 K1
- 0x400E0203, // 0006 CONNECT R3 K1 R3
- 0x7C080200, // 0007 CALL R2 1
- 0xA8020013, // 0008 EXBLK 0 #001D
- 0x5C0C0400, // 0009 MOVE R3 R2
- 0x7C0C0000, // 000A CALL R3 0
- 0x94100003, // 000B GETIDX R4 R0 R3
- 0x5C140600, // 000C MOVE R5 R3
- 0x24180B02, // 000D GT R6 R5 K2
- 0x781A000B, // 000E JMPF R6 #001B
- 0x04180B01, // 000F SUB R6 R5 K1
- 0x94180006, // 0010 GETIDX R6 R0 R6
- 0x8C180D03, // 0011 GETMET R6 R6 K3
- 0x5C200800, // 0012 MOVE R8 R4
- 0x7C180400, // 0013 CALL R6 2
- 0x24180D02, // 0014 GT R6 R6 K2
- 0x781A0004, // 0015 JMPF R6 #001B
- 0x04180B01, // 0016 SUB R6 R5 K1
- 0x94180006, // 0017 GETIDX R6 R0 R6
- 0x98000A06, // 0018 SETIDX R0 R5 R6
- 0x04140B01, // 0019 SUB R5 R5 K1
- 0x7001FFF1, // 001A JMP #000D
- 0x98000A04, // 001B SETIDX R0 R5 R4
- 0x7001FFEB, // 001C JMP #0009
- 0x58080004, // 001D LDCONST R2 K4
- 0xAC080200, // 001E CATCH R2 1 0
- 0xB0080000, // 001F RAISE 2 R0 R0
- 0x80040000, // 0020 RET 1 R0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: set_anonymoustag
-********************************************************************/
-be_local_closure(Matter_TLV_item_set_anonymoustag, /* name */
- be_nested_proto(
- 3, /* nstack */
+ 1, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(set_fulltag),
- }),
- be_str_weak(set_anonymoustag),
+ 0, /* has constants */
+ NULL, /* no const */
+ be_str_weak(to_TLV),
&be_const_str_solidified,
- ( &(const binstruction[ 3]) { /* code */
- 0x8C040100, // 0000 GETMET R1 R0 K0
- 0x7C040200, // 0001 CALL R1 1
- 0x80000000, // 0002 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: set_contextspecific
-********************************************************************/
-be_local_closure(Matter_TLV_item_set_contextspecific, /* name */
- be_nested_proto(
- 4, /* nstack */
- 2, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(set_fulltag),
- /* K1 */ be_nested_str_weak(tag_sub),
- }),
- be_str_weak(set_contextspecific),
- &be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0x8C080100, // 0000 GETMET R2 R0 K0
- 0x7C080200, // 0001 CALL R2 1
- 0x60080009, // 0002 GETGBL R2 G9
- 0x5C0C0200, // 0003 MOVE R3 R1
- 0x7C080200, // 0004 CALL R2 1
- 0x90020202, // 0005 SETMBR R0 K1 R2
- 0x80000000, // 0006 RET 0
+ ( &(const binstruction[ 1]) { /* code */
+ 0x80040000, // 0000 RET 1 R0
})
)
);
@@ -1396,31 +1790,33 @@ be_local_closure(Matter_TLV_item_set_contextspecific, /* name */
be_local_class(Matter_TLV_item,
8,
NULL,
- be_nested_map(23,
+ be_nested_map(25,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(set_commonprofile, -1), be_const_closure(Matter_TLV_item_set_commonprofile_closure) },
{ be_const_key_weak(set_parent, -1), be_const_closure(Matter_TLV_item_set_parent_closure) },
- { be_const_key_weak(tag_profile, 3), be_const_var(3) },
- { be_const_key_weak(set_anonymoustag, 8), be_const_closure(Matter_TLV_item_set_anonymoustag_closure) },
{ be_const_key_weak(create_TLV, -1), be_const_static_closure(Matter_TLV_item_create_TLV_closure) },
- { be_const_key_weak(_encode_tag, -1), be_const_closure(Matter_TLV_item__encode_tag_closure) },
- { be_const_key_weak(val, -1), be_const_var(7) },
- { be_const_key_weak(TLV, 20), be_const_class(be_class_Matter_TLV) },
- { be_const_key_weak(tag_vendor, 1), be_const_var(2) },
- { be_const_key_weak(tostring, -1), be_const_closure(Matter_TLV_item_tostring_closure) },
- { be_const_key_weak(parse, -1), be_const_closure(Matter_TLV_item_parse_closure) },
- { be_const_key_weak(tag_number, -1), be_const_var(4) },
- { be_const_key_weak(sort, -1), be_const_static_closure(Matter_TLV_item_sort_closure) },
{ be_const_key_weak(next_idx, -1), be_const_var(1) },
- { be_const_key_weak(init, -1), be_const_closure(Matter_TLV_item_init_closure) },
- { be_const_key_weak(_cmp_gt, -1), be_const_closure(Matter_TLV_item__cmp_gt_closure) },
- { be_const_key_weak(encode, 12), be_const_closure(Matter_TLV_item_encode_closure) },
- { be_const_key_weak(typ, -1), be_const_var(6) },
- { be_const_key_weak(parent, -1), be_const_var(0) },
- { be_const_key_weak(to_TLV, 6), be_const_closure(Matter_TLV_item_to_TLV_closure) },
+ { be_const_key_weak(TLV, -1), be_const_class(be_class_Matter_TLV) },
+ { be_const_key_weak(tag_vendor, 22), be_const_var(2) },
+ { be_const_key_weak(set_anonymoustag, 17), be_const_closure(Matter_TLV_item_set_anonymoustag_closure) },
+ { be_const_key_weak(val, -1), be_const_var(7) },
+ { be_const_key_weak(to_TLV, -1), be_const_closure(Matter_TLV_item_to_TLV_closure) },
+ { be_const_key_weak(parse, -1), be_const_closure(Matter_TLV_item_parse_closure) },
+ { be_const_key_weak(_cmp_gt, 7), be_const_closure(Matter_TLV_item__cmp_gt_closure) },
+ { be_const_key_weak(tag_profile, -1), be_const_var(3) },
+ { be_const_key_weak(encode_len, 10), be_const_closure(Matter_TLV_item_encode_len_closure) },
+ { be_const_key_weak(set_contextspecific, 8), be_const_closure(Matter_TLV_item_set_contextspecific_closure) },
{ be_const_key_weak(set_fulltag, -1), be_const_closure(Matter_TLV_item_set_fulltag_closure) },
- { be_const_key_weak(tag_sub, 2), be_const_var(5) },
- { be_const_key_weak(set_contextspecific, -1), be_const_closure(Matter_TLV_item_set_contextspecific_closure) },
+ { be_const_key_weak(parent, -1), be_const_var(0) },
+ { be_const_key_weak(_encode_tag_len, 19), be_const_closure(Matter_TLV_item__encode_tag_len_closure) },
+ { be_const_key_weak(tag_sub, -1), be_const_var(5) },
+ { be_const_key_weak(init, 23), be_const_closure(Matter_TLV_item_init_closure) },
+ { be_const_key_weak(tlv2raw, -1), be_const_closure(Matter_TLV_item_tlv2raw_closure) },
+ { be_const_key_weak(tostring, -1), be_const_closure(Matter_TLV_item_tostring_closure) },
+ { be_const_key_weak(set_commonprofile, 15), be_const_closure(Matter_TLV_item_set_commonprofile_closure) },
+ { be_const_key_weak(sort, -1), be_const_static_closure(Matter_TLV_item_sort_closure) },
+ { be_const_key_weak(_encode_tag, -1), be_const_closure(Matter_TLV_item__encode_tag_closure) },
+ { be_const_key_weak(tag_number, 16), be_const_var(4) },
+ { be_const_key_weak(typ, 3), be_const_var(6) },
})),
be_str_weak(Matter_TLV_item)
);
@@ -1575,38 +1971,27 @@ be_local_closure(Matter_TLV_list_getsubval, /* name */
/********************************************************************
-** Solidified function: add_list
+** Solidified function: setitem
********************************************************************/
-be_local_closure(Matter_TLV_list_add_list, /* name */
+be_local_closure(Matter_TLV_list_setitem, /* name */
be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
+ 4, /* nstack */
+ 3, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 5]) { /* constants */
- /* K0 */ be_nested_str_weak(TLV),
- /* K1 */ be_nested_str_weak(Matter_TLV_list),
- /* K2 */ be_nested_str_weak(tag_sub),
- /* K3 */ be_nested_str_weak(val),
- /* K4 */ be_nested_str_weak(push),
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(val),
}),
- be_str_weak(add_list),
+ be_str_weak(setitem),
&be_const_str_solidified,
- ( &(const binstruction[10]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x8C080501, // 0001 GETMET R2 R2 K1
- 0x5C100000, // 0002 MOVE R4 R0
- 0x7C080400, // 0003 CALL R2 2
- 0x900A0401, // 0004 SETMBR R2 K2 R1
- 0x880C0103, // 0005 GETMBR R3 R0 K3
- 0x8C0C0704, // 0006 GETMET R3 R3 K4
- 0x5C140400, // 0007 MOVE R5 R2
- 0x7C0C0400, // 0008 CALL R3 2
- 0x80040400, // 0009 RET 1 R2
+ ( &(const binstruction[ 3]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x980C0202, // 0001 SETIDX R3 R1 R2
+ 0x80000000, // 0002 RET 0
})
)
);
@@ -1707,9 +2092,9 @@ be_local_closure(Matter_TLV_list_findsubtyp, /* name */
/********************************************************************
-** Solidified function: encode
+** Solidified function: add_list
********************************************************************/
-be_local_closure(Matter_TLV_list_encode, /* name */
+be_local_closure(Matter_TLV_list_add_list, /* name */
be_nested_proto(
6, /* nstack */
2, /* argc */
@@ -1719,18 +2104,26 @@ be_local_closure(Matter_TLV_list_encode, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
- /* K0 */ be_nested_str_weak(_encode_inner),
- /* K1 */ be_nested_str_weak(is_struct),
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(TLV),
+ /* K1 */ be_nested_str_weak(Matter_TLV_list),
+ /* K2 */ be_nested_str_weak(tag_sub),
+ /* K3 */ be_nested_str_weak(val),
+ /* K4 */ be_nested_str_weak(push),
}),
- be_str_weak(encode),
+ be_str_weak(add_list),
&be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0x8C080100, // 0000 GETMET R2 R0 K0
- 0x5C100200, // 0001 MOVE R4 R1
- 0x88140101, // 0002 GETMBR R5 R0 K1
- 0x7C080600, // 0003 CALL R2 3
- 0x80040400, // 0004 RET 1 R2
+ ( &(const binstruction[10]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x5C100000, // 0002 MOVE R4 R0
+ 0x7C080400, // 0003 CALL R2 2
+ 0x900A0401, // 0004 SETMBR R2 K2 R1
+ 0x880C0103, // 0005 GETMBR R3 R0 K3
+ 0x8C0C0704, // 0006 GETMET R3 R3 K4
+ 0x5C140400, // 0007 MOVE R5 R2
+ 0x7C0C0400, // 0008 CALL R3 2
+ 0x80040400, // 0009 RET 1 R2
})
)
);
@@ -1865,11 +2258,11 @@ be_local_closure(Matter_TLV_list_tostring_inner, /* name */
/********************************************************************
-** Solidified function: tostring
+** Solidified function: encode_len
********************************************************************/
-be_local_closure(Matter_TLV_list_tostring, /* name */
+be_local_closure(Matter_TLV_list_encode_len, /* name */
be_nested_proto(
- 6, /* nstack */
+ 5, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
@@ -1877,20 +2270,33 @@ be_local_closure(Matter_TLV_list_tostring, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_nested_str_weak(tostring_inner),
- /* K1 */ be_nested_str_weak(_X5B_X5B),
- /* K2 */ be_nested_str_weak(_X5D_X5D),
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(_encode_tag_len),
+ /* K1 */ be_const_int(0),
+ /* K2 */ be_nested_str_weak(val),
+ /* K3 */ be_nested_str_weak(encode_len),
+ /* K4 */ be_const_int(1),
}),
- be_str_weak(tostring),
+ be_str_weak(encode_len),
&be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
+ ( &(const binstruction[17]) { /* code */
0x8C040100, // 0000 GETMET R1 R0 K0
- 0x500C0000, // 0001 LDBOOL R3 0 0
- 0x58100001, // 0002 LDCONST R4 K1
- 0x58140002, // 0003 LDCONST R5 K2
- 0x7C040800, // 0004 CALL R1 4
- 0x80040200, // 0005 RET 1 R1
+ 0x7C040200, // 0001 CALL R1 1
+ 0x58080001, // 0002 LDCONST R2 K1
+ 0x600C000C, // 0003 GETGBL R3 G12
+ 0x88100102, // 0004 GETMBR R4 R0 K2
+ 0x7C0C0200, // 0005 CALL R3 1
+ 0x140C0403, // 0006 LT R3 R2 R3
+ 0x780E0006, // 0007 JMPF R3 #000F
+ 0x880C0102, // 0008 GETMBR R3 R0 K2
+ 0x940C0602, // 0009 GETIDX R3 R3 R2
+ 0x8C0C0703, // 000A GETMET R3 R3 K3
+ 0x7C0C0200, // 000B CALL R3 1
+ 0x00040203, // 000C ADD R1 R1 R3
+ 0x00080504, // 000D ADD R2 R2 K4
+ 0x7001FFF3, // 000E JMP #0003
+ 0x00040304, // 000F ADD R1 R1 K4
+ 0x80040200, // 0010 RET 1 R1
})
)
);
@@ -2066,96 +2472,71 @@ be_local_closure(Matter_TLV_list_add_TLV, /* name */
/********************************************************************
-** Solidified function: setitem
+** Solidified function: tlv2raw
********************************************************************/
-be_local_closure(Matter_TLV_list_setitem, /* name */
+be_local_closure(Matter_TLV_list_tlv2raw, /* name */
be_nested_proto(
- 4, /* nstack */
- 3, /* argc */
+ 8, /* nstack */
+ 2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(val),
- }),
- be_str_weak(setitem),
- &be_const_str_solidified,
- ( &(const binstruction[ 3]) { /* code */
- 0x880C0100, // 0000 GETMBR R3 R0 K0
- 0x980C0202, // 0001 SETIDX R3 R1 R2
- 0x80000000, // 0002 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: _encode_inner
-********************************************************************/
-be_local_closure(Matter_TLV_list__encode_inner, /* name */
- be_nested_proto(
- 9, /* nstack */
- 3, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[10]) { /* constants */
+ ( &(const bvalue[11]) { /* constants */
/* K0 */ be_nested_str_weak(_encode_tag),
/* K1 */ be_nested_str_weak(val),
- /* K2 */ be_nested_str_weak(copy),
- /* K3 */ be_nested_str_weak(sort),
- /* K4 */ be_nested_str_weak(encode),
- /* K5 */ be_nested_str_weak(stop_iteration),
- /* K6 */ be_nested_str_weak(add),
- /* K7 */ be_nested_str_weak(TLV),
- /* K8 */ be_nested_str_weak(EOC),
- /* K9 */ be_const_int(1),
+ /* K2 */ be_nested_str_weak(is_struct),
+ /* K3 */ be_nested_str_weak(copy),
+ /* K4 */ be_nested_str_weak(sort),
+ /* K5 */ be_nested_str_weak(tlv2raw),
+ /* K6 */ be_nested_str_weak(stop_iteration),
+ /* K7 */ be_nested_str_weak(add),
+ /* K8 */ be_nested_str_weak(TLV),
+ /* K9 */ be_nested_str_weak(EOC),
+ /* K10 */ be_const_int(1),
}),
- be_str_weak(_encode_inner),
+ be_str_weak(tlv2raw),
&be_const_str_solidified,
- ( &(const binstruction[35]) { /* code */
- 0x4C0C0000, // 0000 LDNIL R3
- 0x1C0C0203, // 0001 EQ R3 R1 R3
- 0x780E0002, // 0002 JMPF R3 #0006
- 0x600C0015, // 0003 GETGBL R3 G21
- 0x7C0C0000, // 0004 CALL R3 0
- 0x5C040600, // 0005 MOVE R1 R3
- 0x8C0C0100, // 0006 GETMET R3 R0 K0
- 0x5C140200, // 0007 MOVE R5 R1
- 0x7C0C0400, // 0008 CALL R3 2
- 0x880C0101, // 0009 GETMBR R3 R0 K1
- 0x8C0C0702, // 000A GETMET R3 R3 K2
- 0x7C0C0200, // 000B CALL R3 1
- 0x780A0002, // 000C JMPF R2 #0010
- 0x8C100103, // 000D GETMET R4 R0 K3
- 0x5C180600, // 000E MOVE R6 R3
- 0x7C100400, // 000F CALL R4 2
- 0x60100010, // 0010 GETGBL R4 G16
- 0x5C140600, // 0011 MOVE R5 R3
- 0x7C100200, // 0012 CALL R4 1
- 0xA8020005, // 0013 EXBLK 0 #001A
- 0x5C140800, // 0014 MOVE R5 R4
- 0x7C140000, // 0015 CALL R5 0
- 0x8C180B04, // 0016 GETMET R6 R5 K4
- 0x5C200200, // 0017 MOVE R8 R1
- 0x7C180400, // 0018 CALL R6 2
- 0x7001FFF9, // 0019 JMP #0014
- 0x58100005, // 001A LDCONST R4 K5
- 0xAC100200, // 001B CATCH R4 1 0
- 0xB0080000, // 001C RAISE 2 R0 R0
- 0x8C100306, // 001D GETMET R4 R1 K6
- 0x88180107, // 001E GETMBR R6 R0 K7
- 0x88180D08, // 001F GETMBR R6 R6 K8
- 0x581C0009, // 0020 LDCONST R7 K9
- 0x7C100600, // 0021 CALL R4 3
- 0x80040200, // 0022 RET 1 R1
+ ( &(const binstruction[37]) { /* code */
+ 0x4C080000, // 0000 LDNIL R2
+ 0x1C080202, // 0001 EQ R2 R1 R2
+ 0x780A0002, // 0002 JMPF R2 #0006
+ 0x60080015, // 0003 GETGBL R2 G21
+ 0x7C080000, // 0004 CALL R2 0
+ 0x5C040400, // 0005 MOVE R1 R2
+ 0x8C080100, // 0006 GETMET R2 R0 K0
+ 0x5C100200, // 0007 MOVE R4 R1
+ 0x7C080400, // 0008 CALL R2 2
+ 0x88080101, // 0009 GETMBR R2 R0 K1
+ 0x880C0102, // 000A GETMBR R3 R0 K2
+ 0x780E0005, // 000B JMPF R3 #0012
+ 0x8C0C0503, // 000C GETMET R3 R2 K3
+ 0x7C0C0200, // 000D CALL R3 1
+ 0x5C080600, // 000E MOVE R2 R3
+ 0x8C0C0104, // 000F GETMET R3 R0 K4
+ 0x5C140400, // 0010 MOVE R5 R2
+ 0x7C0C0400, // 0011 CALL R3 2
+ 0x600C0010, // 0012 GETGBL R3 G16
+ 0x5C100400, // 0013 MOVE R4 R2
+ 0x7C0C0200, // 0014 CALL R3 1
+ 0xA8020005, // 0015 EXBLK 0 #001C
+ 0x5C100600, // 0016 MOVE R4 R3
+ 0x7C100000, // 0017 CALL R4 0
+ 0x8C140905, // 0018 GETMET R5 R4 K5
+ 0x5C1C0200, // 0019 MOVE R7 R1
+ 0x7C140400, // 001A CALL R5 2
+ 0x7001FFF9, // 001B JMP #0016
+ 0x580C0006, // 001C LDCONST R3 K6
+ 0xAC0C0200, // 001D CATCH R3 1 0
+ 0xB0080000, // 001E RAISE 2 R0 R0
+ 0x8C0C0307, // 001F GETMET R3 R1 K7
+ 0x88140108, // 0020 GETMBR R5 R0 K8
+ 0x88140B09, // 0021 GETMBR R5 R5 K9
+ 0x5818000A, // 0022 LDCONST R6 K10
+ 0x7C0C0600, // 0023 CALL R3 3
+ 0x80040200, // 0024 RET 1 R1
})
)
);
@@ -2205,6 +2586,39 @@ be_local_closure(Matter_TLV_list_findsub, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(Matter_TLV_list_tostring, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(tostring_inner),
+ /* K1 */ be_nested_str_weak(_X5B_X5B),
+ /* K2 */ be_nested_str_weak(_X5D_X5D),
+ }),
+ be_str_weak(tostring),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0x8C040100, // 0000 GETMET R1 R0 K0
+ 0x500C0000, // 0001 LDBOOL R3 0 0
+ 0x58100001, // 0002 LDCONST R4 K1
+ 0x58140002, // 0003 LDCONST R5 K2
+ 0x7C040800, // 0004 CALL R1 4
+ 0x80040200, // 0005 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: parse
********************************************************************/
@@ -2308,17 +2722,17 @@ be_local_class(Matter_TLV_list,
{ be_const_key_weak(parse, -1), be_const_closure(Matter_TLV_list_parse_closure) },
{ be_const_key_weak(size, -1), be_const_closure(Matter_TLV_list_size_closure) },
{ be_const_key_weak(findsubtyp, -1), be_const_closure(Matter_TLV_list_findsubtyp_closure) },
- { be_const_key_weak(encode, -1), be_const_closure(Matter_TLV_list_encode_closure) },
+ { be_const_key_weak(tostring, -1), be_const_closure(Matter_TLV_list_tostring_closure) },
{ be_const_key_weak(tostring_inner, 4), be_const_closure(Matter_TLV_list_tostring_inner_closure) },
- { be_const_key_weak(tostring, 16), be_const_closure(Matter_TLV_list_tostring_closure) },
+ { be_const_key_weak(encode_len, 8), be_const_closure(Matter_TLV_list_encode_len_closure) },
{ be_const_key_weak(findsubval, -1), be_const_closure(Matter_TLV_list_findsubval_closure) },
{ be_const_key_weak(init, -1), be_const_closure(Matter_TLV_list_init_closure) },
- { be_const_key_weak(add_array, 15), be_const_closure(Matter_TLV_list_add_array_closure) },
- { be_const_key_weak(add_TLV, 18), be_const_closure(Matter_TLV_list_add_TLV_closure) },
+ { be_const_key_weak(add_array, 16), be_const_closure(Matter_TLV_list_add_array_closure) },
+ { be_const_key_weak(setitem, 15), be_const_closure(Matter_TLV_list_setitem_closure) },
+ { be_const_key_weak(tlv2raw, 18), be_const_closure(Matter_TLV_list_tlv2raw_closure) },
{ be_const_key_weak(findsub, -1), be_const_closure(Matter_TLV_list_findsub_closure) },
- { be_const_key_weak(_encode_inner, -1), be_const_closure(Matter_TLV_list__encode_inner_closure) },
{ be_const_key_weak(is_struct, -1), be_const_bool(0) },
- { be_const_key_weak(setitem, -1), be_const_closure(Matter_TLV_list_setitem_closure) },
+ { be_const_key_weak(add_TLV, -1), be_const_closure(Matter_TLV_list_add_TLV_closure) },
{ be_const_key_weak(item, 5), be_const_closure(Matter_TLV_list_item_closure) },
{ be_const_key_weak(add_list, -1), be_const_closure(Matter_TLV_list_add_list_closure) },
})),
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_UDPServer.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_UDPServer.h
index 9cf11d294..a95cc8253 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_UDPServer.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_UDPServer.h
@@ -11,54 +11,7 @@ extern const bclass be_class_Matter_UDPPacket_sent;
********************************************************************/
be_local_closure(Matter_UDPPacket_sent_init, /* name */
be_nested_proto(
- 7, /* nstack */
- 5, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[10]) { /* constants */
- /* K0 */ be_nested_str_weak(raw),
- /* K1 */ be_nested_str_weak(addr),
- /* K2 */ be_nested_str_weak(port),
- /* K3 */ be_nested_str_weak(msg_id),
- /* K4 */ be_nested_str_weak(retries),
- /* K5 */ be_nested_str_weak(RETRIES),
- /* K6 */ be_nested_str_weak(next_try),
- /* K7 */ be_nested_str_weak(tasmota),
- /* K8 */ be_nested_str_weak(millis),
- /* K9 */ be_nested_str_weak(RETRY_MS),
- }),
- be_str_weak(init),
- &be_const_str_solidified,
- ( &(const binstruction[13]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0x90020202, // 0001 SETMBR R0 K1 R2
- 0x90020403, // 0002 SETMBR R0 K2 R3
- 0x90020604, // 0003 SETMBR R0 K3 R4
- 0x88140105, // 0004 GETMBR R5 R0 K5
- 0x90020805, // 0005 SETMBR R0 K4 R5
- 0xB8160E00, // 0006 GETNGBL R5 K7
- 0x8C140B08, // 0007 GETMET R5 R5 K8
- 0x7C140200, // 0008 CALL R5 1
- 0x88180109, // 0009 GETMBR R6 R0 K9
- 0x00140A06, // 000A ADD R5 R5 R6
- 0x90020C05, // 000B SETMBR R0 K6 R5
- 0x80000000, // 000C RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: send
-********************************************************************/
-be_local_closure(Matter_UDPPacket_sent_send, /* name */
- be_nested_proto(
- 11, /* nstack */
+ 6, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
@@ -66,60 +19,70 @@ be_local_closure(Matter_UDPPacket_sent_send, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[14]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_nested_str_weak(send),
- /* K2 */ be_nested_str_weak(addr),
- /* K3 */ be_nested_str_weak(remote_ip),
- /* K4 */ be_nested_str_weak(port),
- /* K5 */ be_nested_str_weak(remote_port),
- /* K6 */ be_nested_str_weak(raw),
- /* K7 */ be_nested_str_weak(tasmota),
- /* K8 */ be_nested_str_weak(log),
- /* K9 */ be_nested_str_weak(format),
- /* K10 */ be_nested_str_weak(MTR_X3A_X20sending_X20packet_X20to_X20_X27_X5B_X25s_X5D_X3A_X25i_X27),
- /* K11 */ be_const_int(3),
- /* K12 */ be_nested_str_weak(MTR_X3A_X20failed_X20to_X20send_X20packet_X20to_X20_X27_X5B_X25s_X5D_X3A_X25i_X27),
- /* K13 */ be_const_int(2),
+ ( &(const bvalue[19]) { /* constants */
+ /* K0 */ be_nested_str_weak(raw),
+ /* K1 */ be_nested_str_weak(addr),
+ /* K2 */ be_nested_str_weak(remote_ip),
+ /* K3 */ be_nested_str_weak(port),
+ /* K4 */ be_nested_str_weak(remote_port),
+ /* K5 */ be_nested_str_weak(msg_id),
+ /* K6 */ be_nested_str_weak(x_flag_r),
+ /* K7 */ be_nested_str_weak(message_counter),
+ /* K8 */ be_nested_str_weak(exchange_id),
+ /* K9 */ be_const_int(0),
+ /* K10 */ be_nested_str_weak(session_id),
+ /* K11 */ be_nested_str_weak(local_session_id),
+ /* K12 */ be_nested_str_weak(retries),
+ /* K13 */ be_nested_str_weak(next_try),
+ /* K14 */ be_nested_str_weak(tasmota),
+ /* K15 */ be_nested_str_weak(millis),
+ /* K16 */ be_nested_str_weak(matter),
+ /* K17 */ be_nested_str_weak(UDPServer),
+ /* K18 */ be_nested_str_weak(_backoff_time),
}),
- be_str_weak(send),
+ be_str_weak(init),
&be_const_str_solidified,
- ( &(const binstruction[35]) { /* code */
- 0xA40A0000, // 0000 IMPORT R2 K0
- 0x8C0C0301, // 0001 GETMET R3 R1 K1
- 0x88140102, // 0002 GETMBR R5 R0 K2
- 0x78160001, // 0003 JMPF R5 #0006
- 0x88140102, // 0004 GETMBR R5 R0 K2
- 0x70020000, // 0005 JMP #0007
- 0x88140303, // 0006 GETMBR R5 R1 K3
- 0x88180104, // 0007 GETMBR R6 R0 K4
- 0x781A0001, // 0008 JMPF R6 #000B
- 0x88180104, // 0009 GETMBR R6 R0 K4
- 0x70020000, // 000A JMP #000C
- 0x88180305, // 000B GETMBR R6 R1 K5
- 0x881C0106, // 000C GETMBR R7 R0 K6
- 0x7C0C0800, // 000D CALL R3 4
- 0x780E0009, // 000E JMPF R3 #0019
- 0xB8120E00, // 000F GETNGBL R4 K7
- 0x8C100908, // 0010 GETMET R4 R4 K8
- 0x8C180509, // 0011 GETMET R6 R2 K9
- 0x5820000A, // 0012 LDCONST R8 K10
- 0x88240102, // 0013 GETMBR R9 R0 K2
- 0x88280104, // 0014 GETMBR R10 R0 K4
- 0x7C180800, // 0015 CALL R6 4
- 0x581C000B, // 0016 LDCONST R7 K11
- 0x7C100600, // 0017 CALL R4 3
- 0x70020008, // 0018 JMP #0022
- 0xB8120E00, // 0019 GETNGBL R4 K7
- 0x8C100908, // 001A GETMET R4 R4 K8
- 0x8C180509, // 001B GETMET R6 R2 K9
- 0x5820000C, // 001C LDCONST R8 K12
- 0x88240102, // 001D GETMBR R9 R0 K2
- 0x88280104, // 001E GETMBR R10 R0 K4
- 0x7C180800, // 001F CALL R6 4
- 0x581C000D, // 0020 LDCONST R7 K13
- 0x7C100600, // 0021 CALL R4 3
- 0x80000000, // 0022 RET 0
+ ( &(const binstruction[40]) { /* code */
+ 0x88080300, // 0000 GETMBR R2 R1 K0
+ 0x90020002, // 0001 SETMBR R0 K0 R2
+ 0x88080302, // 0002 GETMBR R2 R1 K2
+ 0x90020202, // 0003 SETMBR R0 K1 R2
+ 0x88080304, // 0004 GETMBR R2 R1 K4
+ 0x90020602, // 0005 SETMBR R0 K3 R2
+ 0x88080306, // 0006 GETMBR R2 R1 K6
+ 0x780A0001, // 0007 JMPF R2 #000A
+ 0x88080307, // 0008 GETMBR R2 R1 K7
+ 0x70020000, // 0009 JMP #000B
+ 0x4C080000, // 000A LDNIL R2
+ 0x90020A02, // 000B SETMBR R0 K5 R2
+ 0x88080308, // 000C GETMBR R2 R1 K8
+ 0x4C0C0000, // 000D LDNIL R3
+ 0x20080403, // 000E NE R2 R2 R3
+ 0x780A0001, // 000F JMPF R2 #0012
+ 0x88080308, // 0010 GETMBR R2 R1 K8
+ 0x70020000, // 0011 JMP #0013
+ 0x58080009, // 0012 LDCONST R2 K9
+ 0x90021002, // 0013 SETMBR R0 K8 R2
+ 0x8808030B, // 0014 GETMBR R2 R1 K11
+ 0x4C0C0000, // 0015 LDNIL R3
+ 0x20080403, // 0016 NE R2 R2 R3
+ 0x780A0001, // 0017 JMPF R2 #001A
+ 0x8808030B, // 0018 GETMBR R2 R1 K11
+ 0x70020000, // 0019 JMP #001B
+ 0x58080009, // 001A LDCONST R2 K9
+ 0x90021402, // 001B SETMBR R0 K10 R2
+ 0x90021909, // 001C SETMBR R0 K12 K9
+ 0xB80A1C00, // 001D GETNGBL R2 K14
+ 0x8C08050F, // 001E GETMET R2 R2 K15
+ 0x7C080200, // 001F CALL R2 1
+ 0xB80E2000, // 0020 GETNGBL R3 K16
+ 0x880C0711, // 0021 GETMBR R3 R3 K17
+ 0x8C0C0712, // 0022 GETMET R3 R3 K18
+ 0x8814010C, // 0023 GETMBR R5 R0 K12
+ 0x7C0C0400, // 0024 CALL R3 2
+ 0x00080403, // 0025 ADD R2 R2 R3
+ 0x90021A02, // 0026 SETMBR R0 K13 R2
+ 0x80000000, // 0027 RET 0
})
)
);
@@ -130,19 +93,18 @@ be_local_closure(Matter_UDPPacket_sent_send, /* name */
** Solidified class: Matter_UDPPacket_sent
********************************************************************/
be_local_class(Matter_UDPPacket_sent,
- 6,
+ 8,
NULL,
- be_nested_map(10,
+ be_nested_map(9,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(RETRY_MS, 7), be_const_int(500) },
- { be_const_key_weak(raw, 4), be_const_var(0) },
- { be_const_key_weak(next_try, 9), be_const_var(5) },
- { be_const_key_weak(retries, -1), be_const_var(4) },
- { be_const_key_weak(send, 6), be_const_closure(Matter_UDPPacket_sent_send_closure) },
- { be_const_key_weak(init, -1), be_const_closure(Matter_UDPPacket_sent_init_closure) },
- { be_const_key_weak(RETRIES, -1), be_const_int(4) },
- { be_const_key_weak(port, -1), be_const_var(2) },
+ { be_const_key_weak(next_try, -1), be_const_var(7) },
+ { be_const_key_weak(session_id, 8), be_const_var(5) },
+ { be_const_key_weak(retries, 3), be_const_var(6) },
{ be_const_key_weak(addr, -1), be_const_var(1) },
+ { be_const_key_weak(port, 0), be_const_var(2) },
+ { be_const_key_weak(raw, -1), be_const_var(0) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_UDPPacket_sent_init_closure) },
+ { be_const_key_weak(exchange_id, -1), be_const_var(4) },
{ be_const_key_weak(msg_id, -1), be_const_var(3) },
})),
be_str_weak(Matter_UDPPacket_sent)
@@ -158,44 +120,194 @@ void be_load_Matter_UDPPacket_sent_class(bvm *vm) {
extern const bclass be_class_Matter_UDPServer;
/********************************************************************
-** Solidified function: init
+** Solidified function: _backoff_time
********************************************************************/
-be_local_closure(Matter_UDPServer_init, /* name */
+be_local_closure(Matter_UDPServer__backoff_time, /* name */
be_nested_proto(
- 4, /* nstack */
- 3, /* argc */
+ 10, /* nstack */
+ 1, /* argc */
+ 4, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 1]) {
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_const_int(1),
+ /* K1 */ be_const_int(0),
+ }),
+ be_str_weak(power_int),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0x58080000, // 0000 LDCONST R2 K0
+ 0x240C0301, // 0001 GT R3 R1 K1
+ 0x780E0002, // 0002 JMPF R3 #0006
+ 0x08080400, // 0003 MUL R2 R2 R0
+ 0x04040300, // 0004 SUB R1 R1 K0
+ 0x7001FFFA, // 0005 JMP #0001
+ 0x80040400, // 0006 RET 1 R2
+ })
+ ),
+ }),
+ 1, /* has constants */
+ ( &(const bvalue[ 8]) { /* constants */
+ /* K0 */ be_const_class(be_class_Matter_UDPServer),
+ /* K1 */ be_nested_str_weak(math),
+ /* K2 */ be_nested_str_weak(rand),
+ /* K3 */ be_const_int(0),
+ /* K4 */ be_const_int(1),
+ /* K5 */ be_const_real_hex(0x3FCCCCCD),
+ /* K6 */ be_const_real_hex(0x3F800000),
+ /* K7 */ be_const_real_hex(0x3E800000),
+ }),
+ be_str_weak(_backoff_time),
+ &be_const_str_solidified,
+ ( &(const binstruction[29]) { /* code */
+ 0x58040000, // 0000 LDCONST R1 K0
+ 0x84080000, // 0001 CLOSURE R2 P0
+ 0xA40E0200, // 0002 IMPORT R3 K1
+ 0x5412012B, // 0003 LDINT R4 300
+ 0x6014000A, // 0004 GETGBL R5 G10
+ 0x8C180702, // 0005 GETMET R6 R3 K2
+ 0x7C180200, // 0006 CALL R6 1
+ 0x541E00FE, // 0007 LDINT R7 255
+ 0x2C180C07, // 0008 AND R6 R6 R7
+ 0x7C140200, // 0009 CALL R5 1
+ 0x541A00FE, // 000A LDINT R6 255
+ 0x0C140A06, // 000B DIV R5 R5 R6
+ 0x24180103, // 000C GT R6 R0 K3
+ 0x781A0001, // 000D JMPF R6 #0010
+ 0x04180104, // 000E SUB R6 R0 K4
+ 0x70020000, // 000F JMP #0011
+ 0x58180003, // 0010 LDCONST R6 K3
+ 0x5C1C0400, // 0011 MOVE R7 R2
+ 0x58200005, // 0012 LDCONST R8 K5
+ 0x5C240C00, // 0013 MOVE R9 R6
+ 0x7C1C0400, // 0014 CALL R7 2
+ 0x081C0807, // 0015 MUL R7 R4 R7
+ 0x08200B07, // 0016 MUL R8 R5 K7
+ 0x00220C08, // 0017 ADD R8 K6 R8
+ 0x081C0E08, // 0018 MUL R7 R7 R8
+ 0x60200009, // 0019 GETGBL R8 G9
+ 0x5C240E00, // 001A MOVE R9 R7
+ 0x7C200200, // 001B CALL R8 1
+ 0x80041000, // 001C RET 1 R8
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: _resend_packets
+********************************************************************/
+be_local_closure(Matter_UDPServer__resend_packets, /* name */
+ be_nested_proto(
+ 13, /* nstack */
+ 1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 5]) { /* constants */
- /* K0 */ be_nested_str_weak(address),
- /* K1 */ be_nested_str_weak(),
- /* K2 */ be_nested_str_weak(port),
- /* K3 */ be_nested_str_weak(listening),
- /* K4 */ be_nested_str_weak(packets_sent),
+ ( &(const bvalue[23]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str_weak(packets_sent),
+ /* K2 */ be_nested_str_weak(tasmota),
+ /* K3 */ be_nested_str_weak(time_reached),
+ /* K4 */ be_nested_str_weak(next_try),
+ /* K5 */ be_nested_str_weak(retries),
+ /* K6 */ be_nested_str_weak(RETRIES),
+ /* K7 */ be_nested_str_weak(log),
+ /* K8 */ be_nested_str_weak(MTR_X3A_X20_X2E_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20Resending_X20packet_X20id_X3D),
+ /* K9 */ be_nested_str_weak(msg_id),
+ /* K10 */ be_const_int(3),
+ /* K11 */ be_nested_str_weak(send),
+ /* K12 */ be_nested_str_weak(millis),
+ /* K13 */ be_nested_str_weak(_backoff_time),
+ /* K14 */ be_const_int(1),
+ /* K15 */ be_nested_str_weak(string),
+ /* K16 */ be_nested_str_weak(remove),
+ /* K17 */ be_nested_str_weak(format),
+ /* K18 */ be_nested_str_weak(MTR_X3A_X20_X2E_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20_X28_X256i_X29_X20Unacked_X20packet_X20_X27_X5B_X25s_X5D_X3A_X25i_X27_X20msg_id_X3D_X25i),
+ /* K19 */ be_nested_str_weak(session_id),
+ /* K20 */ be_nested_str_weak(addr),
+ /* K21 */ be_nested_str_weak(port),
+ /* K22 */ be_const_int(2),
}),
- be_str_weak(init),
+ be_str_weak(_resend_packets),
&be_const_str_solidified,
- ( &(const binstruction[16]) { /* code */
- 0x78060001, // 0000 JMPF R1 #0003
- 0x5C0C0200, // 0001 MOVE R3 R1
- 0x70020000, // 0002 JMP #0004
- 0x580C0001, // 0003 LDCONST R3 K1
- 0x90020003, // 0004 SETMBR R0 K0 R3
- 0x780A0001, // 0005 JMPF R2 #0008
- 0x5C0C0400, // 0006 MOVE R3 R2
- 0x70020000, // 0007 JMP #0009
- 0x540E15A3, // 0008 LDINT R3 5540
- 0x90020403, // 0009 SETMBR R0 K2 R3
- 0x500C0000, // 000A LDBOOL R3 0 0
- 0x90020603, // 000B SETMBR R0 K3 R3
- 0x600C0013, // 000C GETGBL R3 G19
- 0x7C0C0000, // 000D CALL R3 0
- 0x90020803, // 000E SETMBR R0 K4 R3
- 0x80000000, // 000F RET 0
+ ( &(const binstruction[61]) { /* code */
+ 0x58040000, // 0000 LDCONST R1 K0
+ 0x6008000C, // 0001 GETGBL R2 G12
+ 0x880C0101, // 0002 GETMBR R3 R0 K1
+ 0x7C080200, // 0003 CALL R2 1
+ 0x14080202, // 0004 LT R2 R1 R2
+ 0x780A0035, // 0005 JMPF R2 #003C
+ 0x88080101, // 0006 GETMBR R2 R0 K1
+ 0x94080401, // 0007 GETIDX R2 R2 R1
+ 0xB80E0400, // 0008 GETNGBL R3 K2
+ 0x8C0C0703, // 0009 GETMET R3 R3 K3
+ 0x88140504, // 000A GETMBR R5 R2 K4
+ 0x7C0C0400, // 000B CALL R3 2
+ 0x780E002C, // 000C JMPF R3 #003A
+ 0x880C0505, // 000D GETMBR R3 R2 K5
+ 0x88100106, // 000E GETMBR R4 R0 K6
+ 0x180C0604, // 000F LE R3 R3 R4
+ 0x780E0017, // 0010 JMPF R3 #0029
+ 0xB80E0400, // 0011 GETNGBL R3 K2
+ 0x8C0C0707, // 0012 GETMET R3 R3 K7
+ 0x60140008, // 0013 GETGBL R5 G8
+ 0x88180509, // 0014 GETMBR R6 R2 K9
+ 0x7C140200, // 0015 CALL R5 1
+ 0x00161005, // 0016 ADD R5 K8 R5
+ 0x5818000A, // 0017 LDCONST R6 K10
+ 0x7C0C0600, // 0018 CALL R3 3
+ 0x8C0C010B, // 0019 GETMET R3 R0 K11
+ 0x5C140400, // 001A MOVE R5 R2
+ 0x7C0C0400, // 001B CALL R3 2
+ 0xB80E0400, // 001C GETNGBL R3 K2
+ 0x8C0C070C, // 001D GETMET R3 R3 K12
+ 0x7C0C0200, // 001E CALL R3 1
+ 0x8C10010D, // 001F GETMET R4 R0 K13
+ 0x88180505, // 0020 GETMBR R6 R2 K5
+ 0x7C100400, // 0021 CALL R4 2
+ 0x000C0604, // 0022 ADD R3 R3 R4
+ 0x900A0803, // 0023 SETMBR R2 K4 R3
+ 0x880C0505, // 0024 GETMBR R3 R2 K5
+ 0x000C070E, // 0025 ADD R3 R3 K14
+ 0x900A0A03, // 0026 SETMBR R2 K5 R3
+ 0x0004030E, // 0027 ADD R1 R1 K14
+ 0x7002000F, // 0028 JMP #0039
+ 0xA40E1E00, // 0029 IMPORT R3 K15
+ 0x88100101, // 002A GETMBR R4 R0 K1
+ 0x8C100910, // 002B GETMET R4 R4 K16
+ 0x5C180200, // 002C MOVE R6 R1
+ 0x7C100400, // 002D CALL R4 2
+ 0xB8120400, // 002E GETNGBL R4 K2
+ 0x8C100907, // 002F GETMET R4 R4 K7
+ 0x8C180711, // 0030 GETMET R6 R3 K17
+ 0x58200012, // 0031 LDCONST R8 K18
+ 0x88240513, // 0032 GETMBR R9 R2 K19
+ 0x88280514, // 0033 GETMBR R10 R2 K20
+ 0x882C0515, // 0034 GETMBR R11 R2 K21
+ 0x88300509, // 0035 GETMBR R12 R2 K9
+ 0x7C180C00, // 0036 CALL R6 6
+ 0x581C0016, // 0037 LDCONST R7 K22
+ 0x7C100600, // 0038 CALL R4 3
+ 0x70020000, // 0039 JMP #003B
+ 0x0004030E, // 003A ADD R1 R1 K14
+ 0x7001FFC4, // 003B JMP #0001
+ 0x80000000, // 003C RET 0
})
)
);
@@ -226,6 +338,136 @@ be_local_closure(Matter_UDPServer_every_second, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: send_UDP
+********************************************************************/
+be_local_closure(Matter_UDPServer_send_UDP, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(matter),
+ /* K1 */ be_nested_str_weak(UDPPacket_sent),
+ /* K2 */ be_nested_str_weak(send),
+ /* K3 */ be_nested_str_weak(msg_id),
+ /* K4 */ be_nested_str_weak(packets_sent),
+ /* K5 */ be_nested_str_weak(push),
+ }),
+ be_str_weak(send_UDP),
+ &be_const_str_solidified,
+ ( &(const binstruction[14]) { /* code */
+ 0xB80A0000, // 0000 GETNGBL R2 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x5C100200, // 0002 MOVE R4 R1
+ 0x7C080400, // 0003 CALL R2 2
+ 0x8C0C0102, // 0004 GETMET R3 R0 K2
+ 0x5C140400, // 0005 MOVE R5 R2
+ 0x7C0C0400, // 0006 CALL R3 2
+ 0x880C0503, // 0007 GETMBR R3 R2 K3
+ 0x780E0003, // 0008 JMPF R3 #000D
+ 0x880C0104, // 0009 GETMBR R3 R0 K4
+ 0x8C0C0705, // 000A GETMET R3 R3 K5
+ 0x5C140400, // 000B MOVE R5 R2
+ 0x7C0C0400, // 000C CALL R3 2
+ 0x80000000, // 000D RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: every_50ms
+********************************************************************/
+be_local_closure(Matter_UDPServer_every_50ms, /* name */
+ be_nested_proto(
+ 13, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[15]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_const_int(0),
+ /* K2 */ be_nested_str_weak(udp_socket),
+ /* K3 */ be_nested_str_weak(read),
+ /* K4 */ be_const_int(1),
+ /* K5 */ be_nested_str_weak(remote_ip),
+ /* K6 */ be_nested_str_weak(remote_port),
+ /* K7 */ be_nested_str_weak(tasmota),
+ /* K8 */ be_nested_str_weak(log),
+ /* K9 */ be_nested_str_weak(format),
+ /* K10 */ be_nested_str_weak(MTR_X3A_X20UDP_X20received_X20from_X20_X5B_X25s_X5D_X3A_X25i),
+ /* K11 */ be_const_int(3),
+ /* K12 */ be_nested_str_weak(dispatch_cb),
+ /* K13 */ be_nested_str_weak(MAX_PACKETS_READ),
+ /* K14 */ be_nested_str_weak(_resend_packets),
+ }),
+ be_str_weak(every_50ms),
+ &be_const_str_solidified,
+ ( &(const binstruction[47]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0x58080001, // 0001 LDCONST R2 K1
+ 0x880C0102, // 0002 GETMBR R3 R0 K2
+ 0x4C100000, // 0003 LDNIL R4
+ 0x1C0C0604, // 0004 EQ R3 R3 R4
+ 0x780E0000, // 0005 JMPF R3 #0007
+ 0x80000600, // 0006 RET 0
+ 0x880C0102, // 0007 GETMBR R3 R0 K2
+ 0x8C0C0703, // 0008 GETMET R3 R3 K3
+ 0x7C0C0200, // 0009 CALL R3 1
+ 0x4C100000, // 000A LDNIL R4
+ 0x20100604, // 000B NE R4 R3 R4
+ 0x7812001E, // 000C JMPF R4 #002C
+ 0x00080504, // 000D ADD R2 R2 K4
+ 0x88100102, // 000E GETMBR R4 R0 K2
+ 0x88100905, // 000F GETMBR R4 R4 K5
+ 0x88140102, // 0010 GETMBR R5 R0 K2
+ 0x88140B06, // 0011 GETMBR R5 R5 K6
+ 0xB81A0E00, // 0012 GETNGBL R6 K7
+ 0x8C180D08, // 0013 GETMET R6 R6 K8
+ 0x8C200309, // 0014 GETMET R8 R1 K9
+ 0x5828000A, // 0015 LDCONST R10 K10
+ 0x5C2C0800, // 0016 MOVE R11 R4
+ 0x5C300A00, // 0017 MOVE R12 R5
+ 0x7C200800, // 0018 CALL R8 4
+ 0x5824000B, // 0019 LDCONST R9 K11
+ 0x7C180600, // 001A CALL R6 3
+ 0x8818010C, // 001B GETMBR R6 R0 K12
+ 0x781A0004, // 001C JMPF R6 #0022
+ 0x8C18010C, // 001D GETMET R6 R0 K12
+ 0x5C200600, // 001E MOVE R8 R3
+ 0x5C240800, // 001F MOVE R9 R4
+ 0x5C280A00, // 0020 MOVE R10 R5
+ 0x7C180800, // 0021 CALL R6 4
+ 0x8818010D, // 0022 GETMBR R6 R0 K13
+ 0x14180406, // 0023 LT R6 R2 R6
+ 0x781A0004, // 0024 JMPF R6 #002A
+ 0x88180102, // 0025 GETMBR R6 R0 K2
+ 0x8C180D03, // 0026 GETMET R6 R6 K3
+ 0x7C180200, // 0027 CALL R6 1
+ 0x5C0C0C00, // 0028 MOVE R3 R6
+ 0x70020000, // 0029 JMP #002B
+ 0x4C0C0000, // 002A LDNIL R3
+ 0x7001FFDD, // 002B JMP #000A
+ 0x8C10010E, // 002C GETMET R4 R0 K14
+ 0x7C100200, // 002D CALL R4 1
+ 0x80000000, // 002E RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified function: stop
********************************************************************/
@@ -267,176 +509,6 @@ be_local_closure(Matter_UDPServer_stop, /* name */
/*******************************************************************/
-/********************************************************************
-** Solidified function: every_50ms
-********************************************************************/
-be_local_closure(Matter_UDPServer_every_50ms, /* name */
- be_nested_proto(
- 13, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[14]) { /* constants */
- /* K0 */ be_nested_str_weak(string),
- /* K1 */ be_const_int(0),
- /* K2 */ be_nested_str_weak(udp_socket),
- /* K3 */ be_nested_str_weak(read),
- /* K4 */ be_const_int(1),
- /* K5 */ be_nested_str_weak(remote_ip),
- /* K6 */ be_nested_str_weak(remote_port),
- /* K7 */ be_nested_str_weak(tasmota),
- /* K8 */ be_nested_str_weak(log),
- /* K9 */ be_nested_str_weak(format),
- /* K10 */ be_nested_str_weak(MTR_X3A_X20UDP_X20received_X20from_X20_X5B_X25s_X5D_X3A_X25i),
- /* K11 */ be_nested_str_weak(dispatch_cb),
- /* K12 */ be_nested_str_weak(MAX_PACKETS_READ),
- /* K13 */ be_nested_str_weak(resend_packets),
- }),
- be_str_weak(every_50ms),
- &be_const_str_solidified,
- ( &(const binstruction[47]) { /* code */
- 0xA4060000, // 0000 IMPORT R1 K0
- 0x58080001, // 0001 LDCONST R2 K1
- 0x880C0102, // 0002 GETMBR R3 R0 K2
- 0x4C100000, // 0003 LDNIL R4
- 0x1C0C0604, // 0004 EQ R3 R3 R4
- 0x780E0000, // 0005 JMPF R3 #0007
- 0x80000600, // 0006 RET 0
- 0x880C0102, // 0007 GETMBR R3 R0 K2
- 0x8C0C0703, // 0008 GETMET R3 R3 K3
- 0x7C0C0200, // 0009 CALL R3 1
- 0x4C100000, // 000A LDNIL R4
- 0x20100604, // 000B NE R4 R3 R4
- 0x7812001E, // 000C JMPF R4 #002C
- 0x00080504, // 000D ADD R2 R2 K4
- 0x88100102, // 000E GETMBR R4 R0 K2
- 0x88100905, // 000F GETMBR R4 R4 K5
- 0x88140102, // 0010 GETMBR R5 R0 K2
- 0x88140B06, // 0011 GETMBR R5 R5 K6
- 0xB81A0E00, // 0012 GETNGBL R6 K7
- 0x8C180D08, // 0013 GETMET R6 R6 K8
- 0x8C200309, // 0014 GETMET R8 R1 K9
- 0x5828000A, // 0015 LDCONST R10 K10
- 0x5C2C0800, // 0016 MOVE R11 R4
- 0x5C300A00, // 0017 MOVE R12 R5
- 0x7C200800, // 0018 CALL R8 4
- 0x54260003, // 0019 LDINT R9 4
- 0x7C180600, // 001A CALL R6 3
- 0x8818010B, // 001B GETMBR R6 R0 K11
- 0x781A0004, // 001C JMPF R6 #0022
- 0x8C18010B, // 001D GETMET R6 R0 K11
- 0x5C200600, // 001E MOVE R8 R3
- 0x5C240800, // 001F MOVE R9 R4
- 0x5C280A00, // 0020 MOVE R10 R5
- 0x7C180800, // 0021 CALL R6 4
- 0x8818010C, // 0022 GETMBR R6 R0 K12
- 0x14180406, // 0023 LT R6 R2 R6
- 0x781A0004, // 0024 JMPF R6 #002A
- 0x88180102, // 0025 GETMBR R6 R0 K2
- 0x8C180D03, // 0026 GETMET R6 R6 K3
- 0x7C180200, // 0027 CALL R6 1
- 0x5C0C0C00, // 0028 MOVE R3 R6
- 0x70020000, // 0029 JMP #002B
- 0x4C0C0000, // 002A LDNIL R3
- 0x7001FFDD, // 002B JMP #000A
- 0x8C10010D, // 002C GETMET R4 R0 K13
- 0x7C100200, // 002D CALL R4 1
- 0x80000000, // 002E RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: resend_packets
-********************************************************************/
-be_local_closure(Matter_UDPServer_resend_packets, /* name */
- be_nested_proto(
- 7, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[17]) { /* constants */
- /* K0 */ be_nested_str_weak(packets_sent),
- /* K1 */ be_nested_str_weak(tasmota),
- /* K2 */ be_nested_str_weak(time_reached),
- /* K3 */ be_nested_str_weak(next_try),
- /* K4 */ be_nested_str_weak(log),
- /* K5 */ be_nested_str_weak(MTR_X3A_X20resending_X20packet_X20id_X3D),
- /* K6 */ be_nested_str_weak(msg_id),
- /* K7 */ be_const_int(3),
- /* K8 */ be_nested_str_weak(send),
- /* K9 */ be_nested_str_weak(udp_socket),
- /* K10 */ be_nested_str_weak(retries),
- /* K11 */ be_const_int(1),
- /* K12 */ be_const_int(0),
- /* K13 */ be_nested_str_weak(remove),
- /* K14 */ be_nested_str_weak(millis),
- /* K15 */ be_nested_str_weak(RETRY_MS),
- /* K16 */ be_nested_str_weak(stop_iteration),
- }),
- be_str_weak(resend_packets),
- &be_const_str_solidified,
- ( &(const binstruction[44]) { /* code */
- 0x60040010, // 0000 GETGBL R1 G16
- 0x88080100, // 0001 GETMBR R2 R0 K0
- 0x7C040200, // 0002 CALL R1 1
- 0xA8020023, // 0003 EXBLK 0 #0028
- 0x5C080200, // 0004 MOVE R2 R1
- 0x7C080000, // 0005 CALL R2 0
- 0xB80E0200, // 0006 GETNGBL R3 K1
- 0x8C0C0702, // 0007 GETMET R3 R3 K2
- 0x88140503, // 0008 GETMBR R5 R2 K3
- 0x7C0C0400, // 0009 CALL R3 2
- 0x780E001B, // 000A JMPF R3 #0027
- 0xB80E0200, // 000B GETNGBL R3 K1
- 0x8C0C0704, // 000C GETMET R3 R3 K4
- 0x60140008, // 000D GETGBL R5 G8
- 0x88180506, // 000E GETMBR R6 R2 K6
- 0x7C140200, // 000F CALL R5 1
- 0x00160A05, // 0010 ADD R5 K5 R5
- 0x58180007, // 0011 LDCONST R6 K7
- 0x7C0C0600, // 0012 CALL R3 3
- 0x8C0C0508, // 0013 GETMET R3 R2 K8
- 0x88140109, // 0014 GETMBR R5 R0 K9
- 0x7C0C0400, // 0015 CALL R3 2
- 0x880C050A, // 0016 GETMBR R3 R2 K10
- 0x040C070B, // 0017 SUB R3 R3 K11
- 0x900A1403, // 0018 SETMBR R2 K10 R3
- 0x880C050A, // 0019 GETMBR R3 R2 K10
- 0x180C070C, // 001A LE R3 R3 K12
- 0x780E0004, // 001B JMPF R3 #0021
- 0x880C0100, // 001C GETMBR R3 R0 K0
- 0x8C0C070D, // 001D GETMET R3 R3 K13
- 0x88140506, // 001E GETMBR R5 R2 K6
- 0x7C0C0400, // 001F CALL R3 2
- 0x70020005, // 0020 JMP #0027
- 0xB80E0200, // 0021 GETNGBL R3 K1
- 0x8C0C070E, // 0022 GETMET R3 R3 K14
- 0x7C0C0200, // 0023 CALL R3 1
- 0x8810050F, // 0024 GETMBR R4 R2 K15
- 0x000C0604, // 0025 ADD R3 R3 R4
- 0x900A0603, // 0026 SETMBR R2 K3 R3
- 0x7001FFDB, // 0027 JMP #0004
- 0x58040010, // 0028 LDCONST R1 K16
- 0xAC040200, // 0029 CATCH R1 1 0
- 0xB0080000, // 002A RAISE 2 R0 R0
- 0x80000000, // 002B RET 0
- })
- )
-);
-/*******************************************************************/
-
-
/********************************************************************
** Solidified function: start
********************************************************************/
@@ -455,7 +527,7 @@ be_local_closure(Matter_UDPServer_start, /* name */
/* K1 */ be_nested_str_weak(udp_socket),
/* K2 */ be_nested_str_weak(udp),
/* K3 */ be_nested_str_weak(begin),
- /* K4 */ be_nested_str_weak(address),
+ /* K4 */ be_nested_str_weak(addr),
/* K5 */ be_nested_str_weak(port),
/* K6 */ be_nested_str_weak(network_error),
/* K7 */ be_nested_str_weak(could_X20not_X20open_X20UDP_X20server),
@@ -494,54 +566,11 @@ be_local_closure(Matter_UDPServer_start, /* name */
/********************************************************************
-** Solidified function: send_response
+** Solidified function: received_ack
********************************************************************/
-be_local_closure(Matter_UDPServer_send_response, /* name */
+be_local_closure(Matter_UDPServer_received_ack, /* name */
be_nested_proto(
- 11, /* nstack */
- 5, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 5]) { /* constants */
- /* K0 */ be_nested_str_weak(matter),
- /* K1 */ be_nested_str_weak(UDPPacket_sent),
- /* K2 */ be_nested_str_weak(send),
- /* K3 */ be_nested_str_weak(udp_socket),
- /* K4 */ be_nested_str_weak(packets_sent),
- }),
- be_str_weak(send_response),
- &be_const_str_solidified,
- ( &(const binstruction[14]) { /* code */
- 0xB8160000, // 0000 GETNGBL R5 K0
- 0x8C140B01, // 0001 GETMET R5 R5 K1
- 0x5C1C0200, // 0002 MOVE R7 R1
- 0x5C200400, // 0003 MOVE R8 R2
- 0x5C240600, // 0004 MOVE R9 R3
- 0x5C280800, // 0005 MOVE R10 R4
- 0x7C140A00, // 0006 CALL R5 5
- 0x8C180B02, // 0007 GETMET R6 R5 K2
- 0x88200103, // 0008 GETMBR R8 R0 K3
- 0x7C180400, // 0009 CALL R6 2
- 0x78120001, // 000A JMPF R4 #000D
- 0x88180104, // 000B GETMBR R6 R0 K4
- 0x98180805, // 000C SETIDX R6 R4 R5
- 0x80000000, // 000D RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: packet_ack
-********************************************************************/
-be_local_closure(Matter_UDPServer_packet_ack, /* name */
- be_nested_proto(
- 6, /* nstack */
+ 10, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
@@ -549,40 +578,188 @@ be_local_closure(Matter_UDPServer_packet_ack, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 7]) { /* constants */
- /* K0 */ be_nested_str_weak(packets_sent),
- /* K1 */ be_nested_str_weak(contains),
- /* K2 */ be_nested_str_weak(remove),
- /* K3 */ be_nested_str_weak(tasmota),
- /* K4 */ be_nested_str_weak(log),
- /* K5 */ be_nested_str_weak(MTR_X3A_X20removed_X20packet_X20from_X20sending_X20list_X20id_X3D),
- /* K6 */ be_const_int(3),
+ ( &(const bvalue[12]) { /* constants */
+ /* K0 */ be_nested_str_weak(ack_message_counter),
+ /* K1 */ be_nested_str_weak(exchange_id),
+ /* K2 */ be_nested_str_weak(tasmota),
+ /* K3 */ be_nested_str_weak(log),
+ /* K4 */ be_nested_str_weak(MTR_X3A_X20receveived_X20ACK_X20id_X3D),
+ /* K5 */ be_const_int(3),
+ /* K6 */ be_const_int(0),
+ /* K7 */ be_nested_str_weak(packets_sent),
+ /* K8 */ be_nested_str_weak(msg_id),
+ /* K9 */ be_nested_str_weak(remove),
+ /* K10 */ be_nested_str_weak(MTR_X3A_X20_X2E_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20Removed_X20packet_X20from_X20sending_X20list_X20id_X3D),
+ /* K11 */ be_const_int(1),
}),
- be_str_weak(packet_ack),
+ be_str_weak(received_ack),
&be_const_str_solidified,
- ( &(const binstruction[22]) { /* code */
- 0x4C080000, // 0000 LDNIL R2
- 0x1C080202, // 0001 EQ R2 R1 R2
- 0x780A0000, // 0002 JMPF R2 #0004
- 0x80000400, // 0003 RET 0
- 0x88080100, // 0004 GETMBR R2 R0 K0
- 0x8C080501, // 0005 GETMET R2 R2 K1
- 0x5C100200, // 0006 MOVE R4 R1
- 0x7C080400, // 0007 CALL R2 2
- 0x780A000B, // 0008 JMPF R2 #0015
- 0x88080100, // 0009 GETMBR R2 R0 K0
- 0x8C080502, // 000A GETMET R2 R2 K2
- 0x5C100200, // 000B MOVE R4 R1
- 0x7C080400, // 000C CALL R2 2
- 0xB80A0600, // 000D GETNGBL R2 K3
- 0x8C080504, // 000E GETMET R2 R2 K4
- 0x60100008, // 000F GETGBL R4 G8
- 0x5C140200, // 0010 MOVE R5 R1
- 0x7C100200, // 0011 CALL R4 1
- 0x00120A04, // 0012 ADD R4 K5 R4
- 0x58140006, // 0013 LDCONST R5 K6
- 0x7C080600, // 0014 CALL R2 3
- 0x80000000, // 0015 RET 0
+ ( &(const binstruction[44]) { /* code */
+ 0x88080300, // 0000 GETMBR R2 R1 K0
+ 0x880C0301, // 0001 GETMBR R3 R1 K1
+ 0x4C100000, // 0002 LDNIL R4
+ 0x1C100404, // 0003 EQ R4 R2 R4
+ 0x78120000, // 0004 JMPF R4 #0006
+ 0x80000800, // 0005 RET 0
+ 0xB8120400, // 0006 GETNGBL R4 K2
+ 0x8C100903, // 0007 GETMET R4 R4 K3
+ 0x60180008, // 0008 GETGBL R6 G8
+ 0x5C1C0400, // 0009 MOVE R7 R2
+ 0x7C180200, // 000A CALL R6 1
+ 0x001A0806, // 000B ADD R6 K4 R6
+ 0x581C0005, // 000C LDCONST R7 K5
+ 0x7C100600, // 000D CALL R4 3
+ 0x58100006, // 000E LDCONST R4 K6
+ 0x6014000C, // 000F GETGBL R5 G12
+ 0x88180107, // 0010 GETMBR R6 R0 K7
+ 0x7C140200, // 0011 CALL R5 1
+ 0x14140805, // 0012 LT R5 R4 R5
+ 0x78160016, // 0013 JMPF R5 #002B
+ 0x88140107, // 0014 GETMBR R5 R0 K7
+ 0x94140A04, // 0015 GETIDX R5 R5 R4
+ 0x88180B08, // 0016 GETMBR R6 R5 K8
+ 0x1C180C02, // 0017 EQ R6 R6 R2
+ 0x781A000F, // 0018 JMPF R6 #0029
+ 0x88180B01, // 0019 GETMBR R6 R5 K1
+ 0x1C180C03, // 001A EQ R6 R6 R3
+ 0x781A000C, // 001B JMPF R6 #0029
+ 0x88180107, // 001C GETMBR R6 R0 K7
+ 0x8C180D09, // 001D GETMET R6 R6 K9
+ 0x5C200800, // 001E MOVE R8 R4
+ 0x7C180400, // 001F CALL R6 2
+ 0xB81A0400, // 0020 GETNGBL R6 K2
+ 0x8C180D03, // 0021 GETMET R6 R6 K3
+ 0x60200008, // 0022 GETGBL R8 G8
+ 0x5C240400, // 0023 MOVE R9 R2
+ 0x7C200200, // 0024 CALL R8 1
+ 0x00221408, // 0025 ADD R8 K10 R8
+ 0x58240005, // 0026 LDCONST R9 K5
+ 0x7C180600, // 0027 CALL R6 3
+ 0x70020000, // 0028 JMP #002A
+ 0x0010090B, // 0029 ADD R4 R4 K11
+ 0x7001FFE3, // 002A JMP #000F
+ 0x80000000, // 002B RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_UDPServer_init, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(addr),
+ /* K1 */ be_nested_str_weak(),
+ /* K2 */ be_nested_str_weak(port),
+ /* K3 */ be_nested_str_weak(listening),
+ /* K4 */ be_nested_str_weak(packets_sent),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[16]) { /* code */
+ 0x78060001, // 0000 JMPF R1 #0003
+ 0x5C0C0200, // 0001 MOVE R3 R1
+ 0x70020000, // 0002 JMP #0004
+ 0x580C0001, // 0003 LDCONST R3 K1
+ 0x90020003, // 0004 SETMBR R0 K0 R3
+ 0x780A0001, // 0005 JMPF R2 #0008
+ 0x5C0C0400, // 0006 MOVE R3 R2
+ 0x70020000, // 0007 JMP #0009
+ 0x540E15A3, // 0008 LDINT R3 5540
+ 0x90020403, // 0009 SETMBR R0 K2 R3
+ 0x500C0000, // 000A LDBOOL R3 0 0
+ 0x90020603, // 000B SETMBR R0 K3 R3
+ 0x600C0012, // 000C GETGBL R3 G18
+ 0x7C0C0000, // 000D CALL R3 0
+ 0x90020803, // 000E SETMBR R0 K4 R3
+ 0x80000000, // 000F RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: send
+********************************************************************/
+be_local_closure(Matter_UDPServer_send, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[14]) { /* constants */
+ /* K0 */ be_nested_str_weak(string),
+ /* K1 */ be_nested_str_weak(udp_socket),
+ /* K2 */ be_nested_str_weak(send),
+ /* K3 */ be_nested_str_weak(addr),
+ /* K4 */ be_nested_str_weak(remote_ip),
+ /* K5 */ be_nested_str_weak(port),
+ /* K6 */ be_nested_str_weak(remote_port),
+ /* K7 */ be_nested_str_weak(raw),
+ /* K8 */ be_nested_str_weak(tasmota),
+ /* K9 */ be_nested_str_weak(log),
+ /* K10 */ be_nested_str_weak(format),
+ /* K11 */ be_nested_str_weak(MTR_X3A_X20sending_X20packet_X20to_X20_X27_X5B_X25s_X5D_X3A_X25i_X27),
+ /* K12 */ be_nested_str_weak(MTR_X3A_X20error_X20sending_X20packet_X20to_X20_X27_X5B_X25s_X5D_X3A_X25i_X27),
+ /* K13 */ be_const_int(2),
+ }),
+ be_str_weak(send),
+ &be_const_str_solidified,
+ ( &(const binstruction[38]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0x880C0101, // 0001 GETMBR R3 R0 K1
+ 0x8C0C0702, // 0002 GETMET R3 R3 K2
+ 0x88140303, // 0003 GETMBR R5 R1 K3
+ 0x78160001, // 0004 JMPF R5 #0007
+ 0x88140303, // 0005 GETMBR R5 R1 K3
+ 0x70020001, // 0006 JMP #0009
+ 0x88140101, // 0007 GETMBR R5 R0 K1
+ 0x88140B04, // 0008 GETMBR R5 R5 K4
+ 0x88180305, // 0009 GETMBR R6 R1 K5
+ 0x781A0001, // 000A JMPF R6 #000D
+ 0x88180305, // 000B GETMBR R6 R1 K5
+ 0x70020001, // 000C JMP #000F
+ 0x88180101, // 000D GETMBR R6 R0 K1
+ 0x88180D06, // 000E GETMBR R6 R6 K6
+ 0x881C0307, // 000F GETMBR R7 R1 K7
+ 0x7C0C0800, // 0010 CALL R3 4
+ 0x780E0009, // 0011 JMPF R3 #001C
+ 0xB8121000, // 0012 GETNGBL R4 K8
+ 0x8C100909, // 0013 GETMET R4 R4 K9
+ 0x8C18050A, // 0014 GETMET R6 R2 K10
+ 0x5820000B, // 0015 LDCONST R8 K11
+ 0x88240303, // 0016 GETMBR R9 R1 K3
+ 0x88280305, // 0017 GETMBR R10 R1 K5
+ 0x7C180800, // 0018 CALL R6 4
+ 0x541E0003, // 0019 LDINT R7 4
+ 0x7C100600, // 001A CALL R4 3
+ 0x70020008, // 001B JMP #0025
+ 0xB8121000, // 001C GETNGBL R4 K8
+ 0x8C100909, // 001D GETMET R4 R4 K9
+ 0x8C18050A, // 001E GETMET R6 R2 K10
+ 0x5820000C, // 001F LDCONST R8 K12
+ 0x88240303, // 0020 GETMBR R9 R1 K3
+ 0x88280305, // 0021 GETMBR R10 R1 K5
+ 0x7C180800, // 0022 CALL R6 4
+ 0x581C000D, // 0023 LDCONST R7 K13
+ 0x7C100600, // 0024 CALL R4 3
+ 0x80040600, // 0025 RET 1 R3
})
)
);
@@ -595,23 +772,26 @@ be_local_closure(Matter_UDPServer_packet_ack, /* name */
be_local_class(Matter_UDPServer,
6,
NULL,
- be_nested_map(15,
+ be_nested_map(18,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(init, 1), be_const_closure(Matter_UDPServer_init_closure) },
- { be_const_key_weak(every_second, -1), be_const_closure(Matter_UDPServer_every_second_closure) },
- { be_const_key_weak(stop, -1), be_const_closure(Matter_UDPServer_stop_closure) },
- { be_const_key_weak(udp_socket, -1), be_const_var(3) },
- { be_const_key_weak(address, -1), be_const_var(0) },
- { be_const_key_weak(dispatch_cb, -1), be_const_var(4) },
- { be_const_key_weak(packet_ack, 7), be_const_closure(Matter_UDPServer_packet_ack_closure) },
- { be_const_key_weak(MAX_PACKETS_READ, 13), be_const_int(4) },
- { be_const_key_weak(every_50ms, 6), be_const_closure(Matter_UDPServer_every_50ms_closure) },
- { be_const_key_weak(listening, -1), be_const_var(2) },
- { be_const_key_weak(port, -1), be_const_var(1) },
- { be_const_key_weak(start, -1), be_const_closure(Matter_UDPServer_start_closure) },
- { be_const_key_weak(send_response, -1), be_const_closure(Matter_UDPServer_send_response_closure) },
- { be_const_key_weak(resend_packets, -1), be_const_closure(Matter_UDPServer_resend_packets_closure) },
+ { be_const_key_weak(_backoff_time, 17), be_const_static_closure(Matter_UDPServer__backoff_time_closure) },
{ be_const_key_weak(packets_sent, -1), be_const_var(5) },
+ { be_const_key_weak(addr, -1), be_const_var(0) },
+ { be_const_key_weak(every_second, -1), be_const_closure(Matter_UDPServer_every_second_closure) },
+ { be_const_key_weak(port, -1), be_const_var(1) },
+ { be_const_key_weak(dispatch_cb, 1), be_const_var(4) },
+ { be_const_key_weak(udp_socket, -1), be_const_var(3) },
+ { be_const_key_weak(send_UDP, -1), be_const_closure(Matter_UDPServer_send_UDP_closure) },
+ { be_const_key_weak(every_50ms, -1), be_const_closure(Matter_UDPServer_every_50ms_closure) },
+ { be_const_key_weak(send, 10), be_const_closure(Matter_UDPServer_send_closure) },
+ { be_const_key_weak(RETRIES, -1), be_const_int(5) },
+ { be_const_key_weak(stop, 16), be_const_closure(Matter_UDPServer_stop_closure) },
+ { be_const_key_weak(received_ack, -1), be_const_closure(Matter_UDPServer_received_ack_closure) },
+ { be_const_key_weak(_resend_packets, 9), be_const_closure(Matter_UDPServer__resend_packets_closure) },
+ { be_const_key_weak(MAX_PACKETS_READ, -1), be_const_int(4) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_UDPServer_init_closure) },
+ { be_const_key_weak(start, -1), be_const_closure(Matter_UDPServer_start_closure) },
+ { be_const_key_weak(listening, -1), be_const_var(2) },
})),
be_str_weak(Matter_UDPServer)
);
diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_UI.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_UI.h
index 0eaee343f..350e3a387 100644
--- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_UI.h
+++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_UI.h
@@ -7,11 +7,167 @@
extern const bclass be_class_Matter_UI;
/********************************************************************
-** Solidified function: show_commissioning_info
+** Solidified function: show_fabric_info
********************************************************************/
-be_local_closure(Matter_UI_show_commissioning_info, /* name */
+be_local_closure(Matter_UI_show_fabric_info, /* name */
be_nested_proto(
- 12, /* nstack */
+ 17, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[30]) { /* constants */
+ /* K0 */ be_nested_str_weak(webserver),
+ /* K1 */ be_nested_str_weak(string),
+ /* K2 */ be_nested_str_weak(content_send),
+ /* K3 */ be_nested_str_weak(_X3Cfieldset_X3E_X3Clegend_X3E_X3Cb_X3E_X26nbsp_X3BFabrics_X26nbsp_X3B_X3C_X2Fb_X3E_X3C_X2Flegend_X3E_X3Cp_X3E_X3C_X2Fp_X3E),
+ /* K4 */ be_nested_str_weak(_X3Cp_X3EExisting_X20fabrics_X3A_X3C_X2Fp_X3E),
+ /* K5 */ be_nested_str_weak(device),
+ /* K6 */ be_nested_str_weak(sessions),
+ /* K7 */ be_const_int(0),
+ /* K8 */ be_nested_str_weak(_X3Cp_X3E_X3Cb_X3ENone_X3C_X2Fb_X3E_X3C_X2Fp_X3E),
+ /* K9 */ be_nested_str_weak(fabrics),
+ /* K10 */ be_nested_str_weak(persistables),
+ /* K11 */ be_nested_str_weak(_X3Chr_X3E),
+ /* K12 */ be_nested_str_weak(fabric_label),
+ /* K13 */ be_nested_str_weak(_X3CNo_X20label_X3E),
+ /* K14 */ be_nested_str_weak(html_escape),
+ /* K15 */ be_nested_str_weak(format),
+ /* K16 */ be_nested_str_weak(_X3Cfieldset_X3E_X3Clegend_X3E_X3Cb_X3E_X26nbsp_X3B_X23_X25i_X20_X25s_X26nbsp_X3B_X3C_X2Fb_X3E_X3C_X2Flegend_X3E_X3Cp_X3E_X3C_X2Fp_X3E),
+ /* K17 */ be_nested_str_weak(get_fabric_index),
+ /* K18 */ be_nested_str_weak(get_fabric_id),
+ /* K19 */ be_nested_str_weak(copy),
+ /* K20 */ be_nested_str_weak(reverse),
+ /* K21 */ be_nested_str_weak(get_device_id),
+ /* K22 */ be_nested_str_weak(Fabric_X3A_X20_X25s_X3Cbr_X3E),
+ /* K23 */ be_nested_str_weak(tohex),
+ /* K24 */ be_nested_str_weak(Device_X3A_X20_X25s_X3Cbr_X3E_X26nbsp_X3B),
+ /* K25 */ be_nested_str_weak(_X3Cform_X20action_X3D_X27_X2Fmatterc_X27_X20method_X3D_X27post_X27_X3E),
+ /* K26 */ be_nested_str_weak(_X3Cinput_X20name_X3D_X27del_fabric_X27_X20type_X3D_X27hidden_X27_X20value_X3D_X27_X25i_X27_X3E),
+ /* K27 */ be_nested_str_weak(_X3Cbutton_X20name_X3D_X27del_X27_X20class_X3D_X27button_X20bgrn_X27_X3EDelete_X20Fabric_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E),
+ /* K28 */ be_nested_str_weak(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E),
+ /* K29 */ be_nested_str_weak(stop_iteration),
+ }),
+ be_str_weak(show_fabric_info),
+ &be_const_str_solidified,
+ ( &(const binstruction[102]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0xA40E0200, // 0001 IMPORT R3 K1
+ 0x8C100502, // 0002 GETMET R4 R2 K2
+ 0x58180003, // 0003 LDCONST R6 K3
+ 0x7C100400, // 0004 CALL R4 2
+ 0x8C100502, // 0005 GETMET R4 R2 K2
+ 0x58180004, // 0006 LDCONST R6 K4
+ 0x7C100400, // 0007 CALL R4 2
+ 0x6010000C, // 0008 GETGBL R4 G12
+ 0x88140105, // 0009 GETMBR R5 R0 K5
+ 0x88140B06, // 000A GETMBR R5 R5 K6
+ 0x88140B06, // 000B GETMBR R5 R5 K6
+ 0x7C100200, // 000C CALL R4 1
+ 0x1C100907, // 000D EQ R4 R4 K7
+ 0x78120003, // 000E JMPF R4 #0013
+ 0x8C100502, // 000F GETMET R4 R2 K2
+ 0x58180008, // 0010 LDCONST R6 K8
+ 0x7C100400, // 0011 CALL R4 2
+ 0x7002004E, // 0012 JMP #0062
+ 0x50100200, // 0013 LDBOOL R4 1 0
+ 0x60140010, // 0014 GETGBL R5 G16
+ 0x88180105, // 0015 GETMBR R6 R0 K5
+ 0x88180D06, // 0016 GETMBR R6 R6 K6
+ 0x88180D09, // 0017 GETMBR R6 R6 K9
+ 0x8C180D0A, // 0018 GETMET R6 R6 K10
+ 0x7C180200, // 0019 CALL R6 1
+ 0x7C140200, // 001A CALL R5 1
+ 0xA8020042, // 001B EXBLK 0 #005F
+ 0x5C180A00, // 001C MOVE R6 R5
+ 0x7C180000, // 001D CALL R6 0
+ 0x5C1C0800, // 001E MOVE R7 R4
+ 0x741E0002, // 001F JMPT R7 #0023
+ 0x8C1C0502, // 0020 GETMET R7 R2 K2
+ 0x5824000B, // 0021 LDCONST R9 K11
+ 0x7C1C0400, // 0022 CALL R7 2
+ 0x50100000, // 0023 LDBOOL R4 0 0
+ 0x881C0D0C, // 0024 GETMBR R7 R6 K12
+ 0x5C200E00, // 0025 MOVE R8 R7
+ 0x74220000, // 0026 JMPT R8 #0028
+ 0x581C000D, // 0027 LDCONST R7 K13
+ 0x8C20050E, // 0028 GETMET R8 R2 K14
+ 0x5C280E00, // 0029 MOVE R10 R7
+ 0x7C200400, // 002A CALL R8 2
+ 0x5C1C1000, // 002B MOVE R7 R8
+ 0x8C200502, // 002C GETMET R8 R2 K2
+ 0x8C28070F, // 002D GETMET R10 R3 K15
+ 0x58300010, // 002E LDCONST R12 K16
+ 0x8C340D11, // 002F GETMET R13 R6 K17
+ 0x7C340200, // 0030 CALL R13 1
+ 0x5C380E00, // 0031 MOVE R14 R7
+ 0x7C280800, // 0032 CALL R10 4
+ 0x7C200400, // 0033 CALL R8 2
+ 0x8C200D12, // 0034 GETMET R8 R6 K18
+ 0x7C200200, // 0035 CALL R8 1
+ 0x8C201113, // 0036 GETMET R8 R8 K19
+ 0x7C200200, // 0037 CALL R8 1
+ 0x8C201114, // 0038 GETMET R8 R8 K20
+ 0x7C200200, // 0039 CALL R8 1
+ 0x8C240D15, // 003A GETMET R9 R6 K21
+ 0x7C240200, // 003B CALL R9 1
+ 0x8C241313, // 003C GETMET R9 R9 K19
+ 0x7C240200, // 003D CALL R9 1
+ 0x8C241314, // 003E GETMET R9 R9 K20
+ 0x7C240200, // 003F CALL R9 1
+ 0x8C280502, // 0040 GETMET R10 R2 K2
+ 0x8C30070F, // 0041 GETMET R12 R3 K15
+ 0x58380016, // 0042 LDCONST R14 K22
+ 0x8C3C1117, // 0043 GETMET R15 R8 K23
+ 0x7C3C0200, // 0044 CALL R15 1
+ 0x7C300600, // 0045 CALL R12 3
+ 0x7C280400, // 0046 CALL R10 2
+ 0x8C280502, // 0047 GETMET R10 R2 K2
+ 0x8C30070F, // 0048 GETMET R12 R3 K15
+ 0x58380018, // 0049 LDCONST R14 K24
+ 0x8C3C1317, // 004A GETMET R15 R9 K23
+ 0x7C3C0200, // 004B CALL R15 1
+ 0x7C300600, // 004C CALL R12 3
+ 0x7C280400, // 004D CALL R10 2
+ 0x8C280502, // 004E GETMET R10 R2 K2
+ 0x58300019, // 004F LDCONST R12 K25
+ 0x7C280400, // 0050 CALL R10 2
+ 0x8C280502, // 0051 GETMET R10 R2 K2
+ 0x8C30070F, // 0052 GETMET R12 R3 K15
+ 0x5838001A, // 0053 LDCONST R14 K26
+ 0x8C3C0D11, // 0054 GETMET R15 R6 K17
+ 0x7C3C0200, // 0055 CALL R15 1
+ 0x7C300600, // 0056 CALL R12 3
+ 0x7C280400, // 0057 CALL R10 2
+ 0x8C280502, // 0058 GETMET R10 R2 K2
+ 0x5830001B, // 0059 LDCONST R12 K27
+ 0x7C280400, // 005A CALL R10 2
+ 0x8C280502, // 005B GETMET R10 R2 K2
+ 0x5830001C, // 005C LDCONST R12 K28
+ 0x7C280400, // 005D CALL R10 2
+ 0x7001FFBC, // 005E JMP #001C
+ 0x5814001D, // 005F LDCONST R5 K29
+ 0xAC140200, // 0060 CATCH R5 1 0
+ 0xB0080000, // 0061 RAISE 2 R0 R0
+ 0x8C100502, // 0062 GETMET R4 R2 K2
+ 0x5818001C, // 0063 LDCONST R6 K28
+ 0x7C100400, // 0064 CALL R4 2
+ 0x80000000, // 0065 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: web_sensor
+********************************************************************/
+be_local_closure(Matter_UI_web_sensor, /* name */
+ be_nested_proto(
+ 13, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
@@ -19,105 +175,292 @@ be_local_closure(Matter_UI_show_commissioning_info, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[24]) { /* constants */
+ ( &(const bvalue[25]) { /* constants */
/* K0 */ be_nested_str_weak(webserver),
/* K1 */ be_nested_str_weak(string),
- /* K2 */ be_nested_str_weak(content_send),
- /* K3 */ be_nested_str_weak(_X3Cfieldset_X3E_X3Clegend_X3E_X3Cb_X3E_X26nbsp_X3BMatter_X20Passcode_X26nbsp_X3B_X3C_X2Fb_X3E_X3C_X2Flegend_X3E_X3Cp_X3E_X3C_X2Fp_X3E),
- /* K4 */ be_nested_str_weak(device),
- /* K5 */ be_nested_str_weak(compute_manual_pairing_code),
- /* K6 */ be_nested_str_weak(format),
- /* K7 */ be_nested_str_weak(_X3Cp_X3EManual_X20pairing_X20code_X3A_X3Cbr_X3E_X3Cb_X3E_X25s_X2D_X25s_X2D_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E_X3Chr_X3E),
- /* K8 */ be_const_int(0),
- /* K9 */ be_const_int(3),
- /* K10 */ be_const_int(2147483647),
- /* K11 */ be_nested_str_weak(compute_qrcode_content),
- /* K12 */ be_nested_str_weak(_X3Cdiv_X20id_X3D_X22qrcode_X22_X3E_X3C_X2Fdiv_X3E),
- /* K13 */ be_nested_str_weak(_X3Cscript_X20type_X3D_X22text_X2Fjavascript_X22_X3E_X20new_X20QRCode_X28document_X2EgetElementById_X28_X22qrcode_X22_X29_X2C_X20_X22_X25s_X22_X29_X3B_X3C_X2Fscript_X3E),
- /* K14 */ be_nested_str_weak(_X3Cp_X3E_X25s_X3C_X2Fp_X3E_X3Chr_X3E),
- /* K15 */ be_nested_str_weak(_X3Cform_X20action_X3D_X27_X2Fmatterc_X27_X20method_X3D_X27post_X27_X20_X3E),
- /* K16 */ be_nested_str_weak(_X3Cp_X3EPasscode_X3A_X3C_X2Fp_X3E),
- /* K17 */ be_nested_str_weak(_X3Cinput_X20type_X3D_X27number_X27_X20min_X3D_X271_X27_X20max_X3D_X2799999998_X27_X20name_X3D_X27passcode_X27_X20value_X3D_X27_X25i_X27_X3E),
- /* K18 */ be_nested_str_weak(passcode),
- /* K19 */ be_nested_str_weak(_X3Cp_X3EDistinguish_X20id_X3A_X3C_X2Fp_X3E),
- /* K20 */ be_nested_str_weak(_X3Cinput_X20type_X3D_X27number_X27_X20min_X3D_X270_X27_X20max_X3D_X272047_X27_X20name_X3D_X27discriminator_X27_X20value_X3D_X27_X25i_X27_X3E),
- /* K21 */ be_nested_str_weak(discriminator),
- /* K22 */ be_nested_str_weak(_X3Cp_X3E_X3C_X2Fp_X3E_X3Cbutton_X20name_X3D_X27passcode_X27_X20class_X3D_X27button_X20bgrn_X27_X3EChange_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E),
- /* K23 */ be_nested_str_weak(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E),
+ /* K2 */ be_nested_str_weak(tasmota),
+ /* K3 */ be_nested_str_weak(get_option),
+ /* K4 */ be_nested_str_weak(matter),
+ /* K5 */ be_nested_str_weak(MATTER_OPTION),
+ /* K6 */ be_nested_str_weak(device),
+ /* K7 */ be_nested_str_weak(is_root_commissioning_open),
+ /* K8 */ be_nested_str_weak(show_commissioning_info),
+ /* K9 */ be_nested_str_weak(sessions),
+ /* K10 */ be_nested_str_weak(count_active_fabrics),
+ /* K11 */ be_const_int(0),
+ /* K12 */ be_nested_str_weak(content_send),
+ /* K13 */ be_nested_str_weak(format),
+ /* K14 */ be_nested_str_weak(_X3Cdiv_X20style_X3D_X27text_X2Dalign_X3Aright_X3Bfont_X2Dsize_X3A11px_X3Bcolor_X3A_X23aaa_X3B_X27_X3E_X25s_X3C_X2Fdiv_X3E),
+ /* K15 */ be_nested_str_weak(No_X20active_X20association),
+ /* K16 */ be_const_int(1),
+ /* K17 */ be_nested_str_weak(_X20active_X20association),
+ /* K18 */ be_nested_str_weak(s),
+ /* K19 */ be_nested_str_weak(),
+ /* K20 */ be_nested_str_weak(_X3Cbutton_X20onclick_X3D_X27la_X28_X22_X26mtc_X25i_X3D1_X22_X29_X3B_X27_X3E),
+ /* K21 */ be_nested_str_weak(commissioning_open),
+ /* K22 */ be_nested_str_weak(_LOGO),
+ /* K23 */ be_nested_str_weak(_X20Open_X20Commissioning_X3C_X2Fbutton_X3E),
+ /* K24 */ be_nested_str_weak(_X20Close_X20Commissioning_X3C_X2Fbutton_X3E),
}),
- be_str_weak(show_commissioning_info),
+ be_str_weak(web_sensor),
&be_const_str_solidified,
- ( &(const binstruction[70]) { /* code */
+ ( &(const binstruction[72]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0xA40A0200, // 0001 IMPORT R2 K1
+ 0xB80E0400, // 0002 GETNGBL R3 K2
+ 0x8C0C0703, // 0003 GETMET R3 R3 K3
+ 0xB8160800, // 0004 GETNGBL R5 K4
+ 0x88140B05, // 0005 GETMBR R5 R5 K5
+ 0x7C0C0400, // 0006 CALL R3 2
+ 0x780E003E, // 0007 JMPF R3 #0047
+ 0x88100106, // 0008 GETMBR R4 R0 K6
+ 0x8C100907, // 0009 GETMET R4 R4 K7
+ 0x7C100200, // 000A CALL R4 1
+ 0x78120001, // 000B JMPF R4 #000E
+ 0x8C100108, // 000C GETMET R4 R0 K8
+ 0x7C100200, // 000D CALL R4 1
+ 0x88100106, // 000E GETMBR R4 R0 K6
+ 0x88100909, // 000F GETMBR R4 R4 K9
+ 0x8C10090A, // 0010 GETMET R4 R4 K10
+ 0x7C100200, // 0011 CALL R4 1
+ 0x1C14090B, // 0012 EQ R5 R4 K11
+ 0x78160006, // 0013 JMPF R5 #001B
+ 0x8C14030C, // 0014 GETMET R5 R1 K12
+ 0x8C1C050D, // 0015 GETMET R7 R2 K13
+ 0x5824000E, // 0016 LDCONST R9 K14
+ 0x5828000F, // 0017 LDCONST R10 K15
+ 0x7C1C0600, // 0018 CALL R7 3
+ 0x7C140400, // 0019 CALL R5 2
+ 0x7002000E, // 001A JMP #002A
+ 0x24140910, // 001B GT R5 R4 K16
+ 0x8C18030C, // 001C GETMET R6 R1 K12
+ 0x8C20050D, // 001D GETMET R8 R2 K13
+ 0x5828000E, // 001E LDCONST R10 K14
+ 0x602C0008, // 001F GETGBL R11 G8
+ 0x5C300800, // 0020 MOVE R12 R4
+ 0x7C2C0200, // 0021 CALL R11 1
+ 0x002C1711, // 0022 ADD R11 R11 K17
+ 0x78160001, // 0023 JMPF R5 #0026
+ 0x58300012, // 0024 LDCONST R12 K18
+ 0x70020000, // 0025 JMP #0027
+ 0x58300013, // 0026 LDCONST R12 K19
+ 0x002C160C, // 0027 ADD R11 R11 R12
+ 0x7C200600, // 0028 CALL R8 3
+ 0x7C180400, // 0029 CALL R6 2
+ 0x8C14030C, // 002A GETMET R5 R1 K12
+ 0x8C1C050D, // 002B GETMET R7 R2 K13
+ 0x58240014, // 002C LDCONST R9 K20
+ 0x88280106, // 002D GETMBR R10 R0 K6
+ 0x88281515, // 002E GETMBR R10 R10 K21
+ 0x4C2C0000, // 002F LDNIL R11
+ 0x1C28140B, // 0030 EQ R10 R10 R11
+ 0x782A0001, // 0031 JMPF R10 #0034
+ 0x58280010, // 0032 LDCONST R10 K16
+ 0x70020000, // 0033 JMP #0035
+ 0x5828000B, // 0034 LDCONST R10 K11
+ 0x7C1C0600, // 0035 CALL R7 3
+ 0x7C140400, // 0036 CALL R5 2
+ 0x8C14030C, // 0037 GETMET R5 R1 K12
+ 0xB81E0800, // 0038 GETNGBL R7 K4
+ 0x881C0F16, // 0039 GETMBR R7 R7 K22
+ 0x7C140400, // 003A CALL R5 2
+ 0x88140106, // 003B GETMBR R5 R0 K6
+ 0x88140B15, // 003C GETMBR R5 R5 K21
+ 0x4C180000, // 003D LDNIL R6
+ 0x1C140A06, // 003E EQ R5 R5 R6
+ 0x78160003, // 003F JMPF R5 #0044
+ 0x8C14030C, // 0040 GETMET R5 R1 K12
+ 0x581C0017, // 0041 LDCONST R7 K23
+ 0x7C140400, // 0042 CALL R5 2
+ 0x70020002, // 0043 JMP #0047
+ 0x8C14030C, // 0044 GETMET R5 R1 K12
+ 0x581C0018, // 0045 LDCONST R7 K24
+ 0x7C140400, // 0046 CALL R5 2
+ 0x80000000, // 0047 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: web_get_arg
+********************************************************************/
+be_local_closure(Matter_UI_web_get_arg, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 7]) { /* constants */
+ /* K0 */ be_nested_str_weak(webserver),
+ /* K1 */ be_nested_str_weak(has_arg),
+ /* K2 */ be_nested_str_weak(mtc0),
+ /* K3 */ be_nested_str_weak(device),
+ /* K4 */ be_nested_str_weak(stop_basic_commissioning),
+ /* K5 */ be_nested_str_weak(mtc1),
+ /* K6 */ be_nested_str_weak(start_root_basic_commissioning),
+ }),
+ be_str_weak(web_get_arg),
+ &be_const_str_solidified,
+ ( &(const binstruction[17]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0x8C080301, // 0001 GETMET R2 R1 K1
+ 0x58100002, // 0002 LDCONST R4 K2
+ 0x7C080400, // 0003 CALL R2 2
+ 0x780A0003, // 0004 JMPF R2 #0009
+ 0x88080103, // 0005 GETMBR R2 R0 K3
+ 0x8C080504, // 0006 GETMET R2 R2 K4
+ 0x7C080200, // 0007 CALL R2 1
+ 0x70020006, // 0008 JMP #0010
+ 0x8C080301, // 0009 GETMET R2 R1 K1
+ 0x58100005, // 000A LDCONST R4 K5
+ 0x7C080400, // 000B CALL R2 2
+ 0x780A0002, // 000C JMPF R2 #0010
+ 0x88080103, // 000D GETMBR R2 R0 K3
+ 0x8C080506, // 000E GETMET R2 R2 K6
+ 0x7C080200, // 000F CALL R2 1
+ 0x80000000, // 0010 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: page_part_mgr
+********************************************************************/
+be_local_closure(Matter_UI_page_part_mgr, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[12]) { /* constants */
+ /* K0 */ be_nested_str_weak(webserver),
+ /* K1 */ be_nested_str_weak(string),
+ /* K2 */ be_nested_str_weak(check_privileged_access),
+ /* K3 */ be_nested_str_weak(content_start),
+ /* K4 */ be_nested_str_weak(Matter),
+ /* K5 */ be_nested_str_weak(content_send_style),
+ /* K6 */ be_nested_str_weak(show_enable),
+ /* K7 */ be_nested_str_weak(show_passcode_form),
+ /* K8 */ be_nested_str_weak(show_fabric_info),
+ /* K9 */ be_nested_str_weak(content_button),
+ /* K10 */ be_nested_str_weak(BUTTON_CONFIGURATION),
+ /* K11 */ be_nested_str_weak(content_stop),
+ }),
+ be_str_weak(page_part_mgr),
+ &be_const_str_solidified,
+ ( &(const binstruction[25]) { /* code */
0xA4060000, // 0000 IMPORT R1 K0
0xA40A0200, // 0001 IMPORT R2 K1
0x8C0C0302, // 0002 GETMET R3 R1 K2
- 0x58140003, // 0003 LDCONST R5 K3
- 0x7C0C0400, // 0004 CALL R3 2
- 0x880C0104, // 0005 GETMBR R3 R0 K4
- 0x8C0C0705, // 0006 GETMET R3 R3 K5
- 0x7C0C0200, // 0007 CALL R3 1
- 0x8C100302, // 0008 GETMET R4 R1 K2
- 0x8C180506, // 0009 GETMET R6 R2 K6
- 0x58200007, // 000A LDCONST R8 K7
- 0x40261109, // 000B CONNECT R9 K8 K9
- 0x94240609, // 000C GETIDX R9 R3 R9
- 0x542A0003, // 000D LDINT R10 4
- 0x542E0005, // 000E LDINT R11 6
- 0x4028140B, // 000F CONNECT R10 R10 R11
- 0x9428060A, // 0010 GETIDX R10 R3 R10
- 0x542E0006, // 0011 LDINT R11 7
- 0x402C170A, // 0012 CONNECT R11 R11 K10
- 0x942C060B, // 0013 GETIDX R11 R3 R11
- 0x7C180A00, // 0014 CALL R6 5
- 0x7C100400, // 0015 CALL R4 2
- 0x88100104, // 0016 GETMBR R4 R0 K4
- 0x8C10090B, // 0017 GETMET R4 R4 K11
- 0x7C100200, // 0018 CALL R4 1
- 0x8C140302, // 0019 GETMET R5 R1 K2
- 0x581C000C, // 001A LDCONST R7 K12
- 0x7C140400, // 001B CALL R5 2
- 0x8C140302, // 001C GETMET R5 R1 K2
- 0x8C1C0506, // 001D GETMET R7 R2 K6
- 0x5824000D, // 001E LDCONST R9 K13
- 0x5C280800, // 001F MOVE R10 R4
- 0x7C1C0600, // 0020 CALL R7 3
- 0x7C140400, // 0021 CALL R5 2
- 0x8C140302, // 0022 GETMET R5 R1 K2
- 0x8C1C0506, // 0023 GETMET R7 R2 K6
- 0x5824000E, // 0024 LDCONST R9 K14
- 0x5C280800, // 0025 MOVE R10 R4
- 0x7C1C0600, // 0026 CALL R7 3
- 0x7C140400, // 0027 CALL R5 2
- 0x8C140302, // 0028 GETMET R5 R1 K2
- 0x581C000F, // 0029 LDCONST R7 K15
- 0x7C140400, // 002A CALL R5 2
- 0x8C140302, // 002B GETMET R5 R1 K2
- 0x581C0010, // 002C LDCONST R7 K16
- 0x7C140400, // 002D CALL R5 2
- 0x8C140302, // 002E GETMET R5 R1 K2
- 0x8C1C0506, // 002F GETMET R7 R2 K6
- 0x58240011, // 0030 LDCONST R9 K17
- 0x88280104, // 0031 GETMBR R10 R0 K4
- 0x88281512, // 0032 GETMBR R10 R10 K18
- 0x7C1C0600, // 0033 CALL R7 3
- 0x7C140400, // 0034 CALL R5 2
- 0x8C140302, // 0035 GETMET R5 R1 K2
- 0x581C0013, // 0036 LDCONST R7 K19
- 0x7C140400, // 0037 CALL R5 2
- 0x8C140302, // 0038 GETMET R5 R1 K2
- 0x8C1C0506, // 0039 GETMET R7 R2 K6
- 0x58240014, // 003A LDCONST R9 K20
- 0x88280104, // 003B GETMBR R10 R0 K4
- 0x88281515, // 003C GETMBR R10 R10 K21
- 0x7C1C0600, // 003D CALL R7 3
- 0x7C140400, // 003E CALL R5 2
- 0x8C140302, // 003F GETMET R5 R1 K2
- 0x581C0016, // 0040 LDCONST R7 K22
- 0x7C140400, // 0041 CALL R5 2
- 0x8C140302, // 0042 GETMET R5 R1 K2
- 0x581C0017, // 0043 LDCONST R7 K23
- 0x7C140400, // 0044 CALL R5 2
- 0x80000000, // 0045 RET 0
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x740E0001, // 0004 JMPT R3 #0007
+ 0x4C0C0000, // 0005 LDNIL R3
+ 0x80040600, // 0006 RET 1 R3
+ 0x8C0C0303, // 0007 GETMET R3 R1 K3
+ 0x58140004, // 0008 LDCONST R5 K4
+ 0x7C0C0400, // 0009 CALL R3 2
+ 0x8C0C0305, // 000A GETMET R3 R1 K5
+ 0x7C0C0200, // 000B CALL R3 1
+ 0x8C0C0106, // 000C GETMET R3 R0 K6
+ 0x7C0C0200, // 000D CALL R3 1
+ 0x780E0003, // 000E JMPF R3 #0013
+ 0x8C0C0107, // 000F GETMET R3 R0 K7
+ 0x7C0C0200, // 0010 CALL R3 1
+ 0x8C0C0108, // 0011 GETMET R3 R0 K8
+ 0x7C0C0200, // 0012 CALL R3 1
+ 0x8C0C0309, // 0013 GETMET R3 R1 K9
+ 0x8814030A, // 0014 GETMBR R5 R1 K10
+ 0x7C0C0400, // 0015 CALL R3 2
+ 0x8C0C030B, // 0016 GETMET R3 R1 K11
+ 0x7C0C0200, // 0017 CALL R3 1
+ 0x80000000, // 0018 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: web_add_config_button
+********************************************************************/
+be_local_closure(Matter_UI_web_add_config_button, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(webserver),
+ /* K1 */ be_nested_str_weak(content_send),
+ /* K2 */ be_nested_str_weak(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27matterc_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3E),
+ /* K3 */ be_nested_str_weak(matter),
+ /* K4 */ be_nested_str_weak(_LOGO),
+ /* K5 */ be_nested_str_weak(_X20Configure_X20Matter_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E),
+ }),
+ be_str_weak(web_add_config_button),
+ &be_const_str_solidified,
+ ( &(const binstruction[12]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0x8C080301, // 0001 GETMET R2 R1 K1
+ 0x58100002, // 0002 LDCONST R4 K2
+ 0x7C080400, // 0003 CALL R2 2
+ 0x8C080301, // 0004 GETMET R2 R1 K1
+ 0xB8120600, // 0005 GETNGBL R4 K3
+ 0x88100904, // 0006 GETMBR R4 R4 K4
+ 0x7C080400, // 0007 CALL R2 2
+ 0x8C080301, // 0008 GETMET R2 R1 K1
+ 0x58100005, // 0009 LDCONST R4 K5
+ 0x7C080400, // 000A CALL R2 2
+ 0x80000000, // 000B RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Matter_UI_init, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str_weak(device),
+ /* K1 */ be_nested_str_weak(tasmota),
+ /* K2 */ be_nested_str_weak(add_driver),
+ }),
+ be_str_weak(init),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0xB80A0200, // 0001 GETNGBL R2 K1
+ 0x8C080502, // 0002 GETMET R2 R2 K2
+ 0x5C100000, // 0003 MOVE R4 R0
+ 0x7C080400, // 0004 CALL R2 2
+ 0x80000000, // 0005 RET 0
})
)
);
@@ -135,7 +478,7 @@ be_local_closure(Matter_UI_web_add_handler, /* name */
0, /* has upvals */
NULL, /* no upvals */
1, /* has sup protos */
- ( &(const struct bproto*[ 3]) {
+ ( &(const struct bproto*[ 2]) {
be_nested_proto(
2, /* nstack */
0, /* argc */
@@ -182,42 +525,18 @@ be_local_closure(Matter_UI_web_add_handler, /* name */
0x80040000, // 0003 RET 1 R0
})
),
- be_nested_proto(
- 2, /* nstack */
- 0, /* argc */
- 0, /* varg */
- 1, /* has upvals */
- ( &(const bupvaldesc[ 1]) { /* upvals */
- be_local_const_upval(1, 0),
- }),
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(page_qrcode_min_js),
- }),
- be_str_weak(_X3Clambda_X3E),
- &be_const_str_solidified,
- ( &(const binstruction[ 4]) { /* code */
- 0x68000000, // 0000 GETUPV R0 U0
- 0x8C000100, // 0001 GETMET R0 R0 K0
- 0x7C000200, // 0002 CALL R0 1
- 0x80040000, // 0003 RET 1 R0
- })
- ),
}),
1, /* has constants */
- ( &(const bvalue[ 6]) { /* constants */
+ ( &(const bvalue[ 5]) { /* constants */
/* K0 */ be_nested_str_weak(webserver),
/* K1 */ be_nested_str_weak(on),
/* K2 */ be_nested_str_weak(_X2Fmatterc),
/* K3 */ be_nested_str_weak(HTTP_GET),
/* K4 */ be_nested_str_weak(HTTP_POST),
- /* K5 */ be_nested_str_weak(_X2Fqrcode_X2Emin_X2Ejs),
}),
be_str_weak(web_add_handler),
&be_const_str_solidified,
- ( &(const binstruction[18]) { /* code */
+ ( &(const binstruction[13]) { /* code */
0xA4060000, // 0000 IMPORT R1 K0
0x8C080301, // 0001 GETMET R2 R1 K1
0x58100002, // 0002 LDCONST R4 K2
@@ -229,13 +548,8 @@ be_local_closure(Matter_UI_web_add_handler, /* name */
0x84140001, // 0008 CLOSURE R5 P1
0x88180304, // 0009 GETMBR R6 R1 K4
0x7C080800, // 000A CALL R2 4
- 0x8C080301, // 000B GETMET R2 R1 K1
- 0x58100005, // 000C LDCONST R4 K5
- 0x84140002, // 000D CLOSURE R5 P2
- 0x88180303, // 000E GETMBR R6 R1 K3
- 0x7C080800, // 000F CALL R2 4
- 0xA0000000, // 0010 CLOSE R0
- 0x80000000, // 0011 RET 0
+ 0xA0000000, // 000B CLOSE R0
+ 0x80000000, // 000C RET 0
})
)
);
@@ -243,11 +557,11 @@ be_local_closure(Matter_UI_web_add_handler, /* name */
/********************************************************************
-** Solidified function: show_session_info
+** Solidified function: show_qrcode
********************************************************************/
-be_local_closure(Matter_UI_show_session_info, /* name */
+be_local_closure(Matter_UI_show_qrcode, /* name */
be_nested_proto(
- 16, /* nstack */
+ 18, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
@@ -255,129 +569,242 @@ be_local_closure(Matter_UI_show_session_info, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[26]) { /* constants */
+ ( &(const bvalue[22]) { /* constants */
+ /* K0 */ be_nested_str_weak(webserver),
+ /* K1 */ be_nested_str_weak(_X20),
+ /* K2 */ be_nested_str_weak(_XE2_X96_X84),
+ /* K3 */ be_nested_str_weak(_XE2_X96_X80),
+ /* K4 */ be_nested_str_weak(_XE2_X96_X88),
+ /* K5 */ be_nested_str_weak(matter),
+ /* K6 */ be_nested_str_weak(QRCode),
+ /* K7 */ be_nested_str_weak(encode_str),
+ /* K8 */ be_nested_str_weak(bitmap),
+ /* K9 */ be_nested_str_weak(size),
+ /* K10 */ be_nested_str_weak(content_send),
+ /* K11 */ be_nested_str_weak(_X3Cstyle_X3E_X2Eqr_X7Bfont_X2Dfamily_X3Amonospace_X3B_X20margin_X3A0_X3B_X20padding_X3A0_X3B_X20white_X2Dspace_X3Apre_X3B_X20font_X2Dsize_X3A18px_X3B_X20color_X3A_X23fff_X3B_X20line_X2Dheight_X3A100_X25_X3B_X7D_X3C_X2Fstyle_X3E),
+ /* K12 */ be_nested_str_weak(_X3Cdiv_X20style_X3D_X27transform_X3Ascale_X28_X2E8_X2C1_X29_X3B_X20display_X3Ainline_X2Dblock_X3B_X27_X3E),
+ /* K13 */ be_nested_str_weak(_X3Cdiv_X20class_X3D_X27qr_X27_X3E),
+ /* K14 */ be_nested_str_weak(),
+ /* K15 */ be_const_int(0),
+ /* K16 */ be_const_int(1),
+ /* K17 */ be_nested_str_weak(stop_iteration),
+ /* K18 */ be_nested_str_weak(_X3C_X2Fdiv_X3E),
+ /* K19 */ be_const_int(2),
+ /* K20 */ be_nested_str_weak(_X3Cdiv_X20class_X3D_X27qr_X27_X20style_X3D_X27background_X2Dcolor_X3A_X23000_X3B_X27_X3E),
+ /* K21 */ be_nested_str_weak(_X2F_X3Cdiv_X3E),
+ }),
+ be_str_weak(show_qrcode),
+ &be_const_str_solidified,
+ ( &(const binstruction[120]) { /* code */
+ 0xA40A0000, // 0000 IMPORT R2 K0
+ 0x580C0001, // 0001 LDCONST R3 K1
+ 0x58100002, // 0002 LDCONST R4 K2
+ 0x58140003, // 0003 LDCONST R5 K3
+ 0x58180004, // 0004 LDCONST R6 K4
+ 0xB81E0A00, // 0005 GETNGBL R7 K5
+ 0x881C0F06, // 0006 GETMBR R7 R7 K6
+ 0x8C1C0F07, // 0007 GETMET R7 R7 K7
+ 0x5C240200, // 0008 MOVE R9 R1
+ 0x7C1C0400, // 0009 CALL R7 2
+ 0x94200F08, // 000A GETIDX R8 R7 K8
+ 0x94240F09, // 000B GETIDX R9 R7 K9
+ 0x8C28050A, // 000C GETMET R10 R2 K10
+ 0x5830000B, // 000D LDCONST R12 K11
+ 0x7C280400, // 000E CALL R10 2
+ 0x8C28050A, // 000F GETMET R10 R2 K10
+ 0x5830000C, // 0010 LDCONST R12 K12
+ 0x7C280400, // 0011 CALL R10 2
+ 0x5828000D, // 0012 LDCONST R10 K13
+ 0x8C2C050A, // 0013 GETMET R11 R2 K10
+ 0x5C341400, // 0014 MOVE R13 R10
+ 0x7C2C0400, // 0015 CALL R11 2
+ 0x5828000E, // 0016 LDCONST R10 K14
+ 0x602C0010, // 0017 GETGBL R11 G16
+ 0x00301310, // 0018 ADD R12 R9 K16
+ 0x40321E0C, // 0019 CONNECT R12 K15 R12
+ 0x7C2C0200, // 001A CALL R11 1
+ 0xA8020003, // 001B EXBLK 0 #0020
+ 0x5C301600, // 001C MOVE R12 R11
+ 0x7C300000, // 001D CALL R12 0
+ 0x00281404, // 001E ADD R10 R10 R4
+ 0x7001FFFB, // 001F JMP #001C
+ 0x582C0011, // 0020 LDCONST R11 K17
+ 0xAC2C0200, // 0021 CATCH R11 1 0
+ 0xB0080000, // 0022 RAISE 2 R0 R0
+ 0x00281512, // 0023 ADD R10 R10 K18
+ 0x8C2C050A, // 0024 GETMET R11 R2 K10
+ 0x5C341400, // 0025 MOVE R13 R10
+ 0x7C2C0400, // 0026 CALL R11 2
+ 0x602C0010, // 0027 GETGBL R11 G16
+ 0x00301310, // 0028 ADD R12 R9 K16
+ 0x0C301913, // 0029 DIV R12 R12 K19
+ 0x04301910, // 002A SUB R12 R12 K16
+ 0x40321E0C, // 002B CONNECT R12 K15 R12
+ 0x7C2C0200, // 002C CALL R11 1
+ 0xA802002E, // 002D EXBLK 0 #005D
+ 0x5C301600, // 002E MOVE R12 R11
+ 0x7C300000, // 002F CALL R12 0
+ 0x00362806, // 0030 ADD R13 K20 R6
+ 0x5C281A00, // 0031 MOVE R10 R13
+ 0x60340010, // 0032 GETGBL R13 G16
+ 0x04381310, // 0033 SUB R14 R9 K16
+ 0x403A1E0E, // 0034 CONNECT R14 K15 R14
+ 0x7C340200, // 0035 CALL R13 1
+ 0xA802001C, // 0036 EXBLK 0 #0054
+ 0x5C381A00, // 0037 MOVE R14 R13
+ 0x7C380000, // 0038 CALL R14 0
+ 0x083C1913, // 0039 MUL R15 R12 K19
+ 0x943C100F, // 003A GETIDX R15 R8 R15
+ 0x943C1E0E, // 003B GETIDX R15 R15 R14
+ 0x1C3C1F01, // 003C EQ R15 R15 K1
+ 0x08401913, // 003D MUL R16 R12 K19
+ 0x00402110, // 003E ADD R16 R16 K16
+ 0x14402009, // 003F LT R16 R16 R9
+ 0x78420005, // 0040 JMPF R16 #0047
+ 0x08401913, // 0041 MUL R16 R12 K19
+ 0x00402110, // 0042 ADD R16 R16 K16
+ 0x94401010, // 0043 GETIDX R16 R8 R16
+ 0x9440200E, // 0044 GETIDX R16 R16 R14
+ 0x1C402101, // 0045 EQ R16 R16 K1
+ 0x70020000, // 0046 JMP #0048
+ 0x50400200, // 0047 LDBOOL R16 1 0
+ 0x783E0004, // 0048 JMPF R15 #004E
+ 0x78420001, // 0049 JMPF R16 #004C
+ 0x5C440C00, // 004A MOVE R17 R6
+ 0x70020000, // 004B JMP #004D
+ 0x5C440A00, // 004C MOVE R17 R5
+ 0x70020003, // 004D JMP #0052
+ 0x78420001, // 004E JMPF R16 #0051
+ 0x5C440800, // 004F MOVE R17 R4
+ 0x70020000, // 0050 JMP #0052
+ 0x5C440600, // 0051 MOVE R17 R3
+ 0x00281411, // 0052 ADD R10 R10 R17
+ 0x7001FFE2, // 0053 JMP #0037
+ 0x58340011, // 0054 LDCONST R13 K17
+ 0xAC340200, // 0055 CATCH R13 1 0
+ 0xB0080000, // 0056 RAISE 2 R0 R0
+ 0x00281406, // 0057 ADD R10 R10 R6
+ 0x00281512, // 0058 ADD R10 R10 K18
+ 0x8C34050A, // 0059 GETMET R13 R2 K10
+ 0x5C3C1400, // 005A MOVE R15 R10
+ 0x7C340400, // 005B CALL R13 2
+ 0x7001FFD0, // 005C JMP #002E
+ 0x582C0011, // 005D LDCONST R11 K17
+ 0xAC2C0200, // 005E CATCH R11 1 0
+ 0xB0080000, // 005F RAISE 2 R0 R0
+ 0x102C1313, // 0060 MOD R11 R9 K19
+ 0x1C2C170F, // 0061 EQ R11 R11 K15
+ 0x782E0010, // 0062 JMPF R11 #0074
+ 0x58280014, // 0063 LDCONST R10 K20
+ 0x602C0010, // 0064 GETGBL R11 G16
+ 0x00301310, // 0065 ADD R12 R9 K16
+ 0x40321E0C, // 0066 CONNECT R12 K15 R12
+ 0x7C2C0200, // 0067 CALL R11 1
+ 0xA8020003, // 0068 EXBLK 0 #006D
+ 0x5C301600, // 0069 MOVE R12 R11
+ 0x7C300000, // 006A CALL R12 0
+ 0x00281405, // 006B ADD R10 R10 R5
+ 0x7001FFFB, // 006C JMP #0069
+ 0x582C0011, // 006D LDCONST R11 K17
+ 0xAC2C0200, // 006E CATCH R11 1 0
+ 0xB0080000, // 006F RAISE 2 R0 R0
+ 0x00281515, // 0070 ADD R10 R10 K21
+ 0x8C2C050A, // 0071 GETMET R11 R2 K10
+ 0x5C341400, // 0072 MOVE R13 R10
+ 0x7C2C0400, // 0073 CALL R11 2
+ 0x8C2C050A, // 0074 GETMET R11 R2 K10
+ 0x58340012, // 0075 LDCONST R13 K18
+ 0x7C2C0400, // 0076 CALL R11 2
+ 0x80000000, // 0077 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: show_passcode_form
+********************************************************************/
+be_local_closure(Matter_UI_show_passcode_form, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[19]) { /* constants */
/* K0 */ be_nested_str_weak(webserver),
/* K1 */ be_nested_str_weak(string),
/* K2 */ be_nested_str_weak(content_send),
- /* K3 */ be_nested_str_weak(_X3Cfieldset_X3E_X3Clegend_X3E_X3Cb_X3E_X26nbsp_X3BSessions_X26nbsp_X3B_X3C_X2Fb_X3E_X3C_X2Flegend_X3E_X3Cp_X3E_X3C_X2Fp_X3E),
- /* K4 */ be_nested_str_weak(_X3Cp_X3EExisting_X20sessions_X3A_X3C_X2Fp_X3E),
- /* K5 */ be_nested_str_weak(device),
- /* K6 */ be_nested_str_weak(sessions),
- /* K7 */ be_const_int(0),
- /* K8 */ be_nested_str_weak(_X3Cp_X3E_X3Cb_X3ENone_X3C_X2Fb_X3E_X3C_X2Fp_X3E),
- /* K9 */ be_nested_str_weak(fabric),
- /* K10 */ be_nested_str_weak(format),
- /* K11 */ be_nested_str_weak(_X3Cfieldset_X3E_X3Clegend_X3E_X3Cb_X3E_X26nbsp_X3BSession_X20_X25i_X26nbsp_X3B_X3C_X2Fb_X3E_X3C_X2Flegend_X3E_X3Cp_X3E_X3C_X2Fp_X3E),
- /* K12 */ be_nested_str_weak(local_session_id),
- /* K13 */ be_nested_str_weak(_X3Chr_X3E),
- /* K14 */ be_nested_str_weak(copy),
- /* K15 */ be_nested_str_weak(reverse),
- /* K16 */ be_nested_str_weak(deviceid),
- /* K17 */ be_nested_str_weak(Fabric_X3A_X20_X25s_X3Cbr_X3E),
- /* K18 */ be_nested_str_weak(tohex),
- /* K19 */ be_nested_str_weak(Device_X3A_X20_X25s_X3Cbr_X3E_X26nbsp_X3B),
- /* K20 */ be_nested_str_weak(_X3Cform_X20action_X3D_X27_X2Fmatterc_X27_X20method_X3D_X27post_X27_X20),
- /* K21 */ be_nested_str_weak(onsubmit_X3D_X27return_X20confirm_X28_X22This_X20will_X20cause_X20a_X20restart_X2E_X22_X29_X3B_X27_X3E),
- /* K22 */ be_nested_str_weak(_X3Cinput_X20name_X3D_X27del_session_X27_X20type_X3D_X27hidden_X27_X20value_X3D_X27_X25d_X27_X3E),
- /* K23 */ be_nested_str_weak(_X3Cbutton_X20name_X3D_X27del_X27_X20class_X3D_X27button_X20bgrn_X27_X3EDelete_X20Session_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E),
- /* K24 */ be_nested_str_weak(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E),
- /* K25 */ be_const_int(1),
+ /* K3 */ be_nested_str_weak(_X3Cfieldset_X3E_X3Clegend_X3E_X3Cb_X3E_X26nbsp_X3BMatter_X20Passcode_X26nbsp_X3B_X3C_X2Fb_X3E_X3C_X2Flegend_X3E_X3Cp_X3E_X3C_X2Fp_X3E),
+ /* K4 */ be_nested_str_weak(_X3Cform_X20action_X3D_X27_X2Fmatterc_X27_X20method_X3D_X27post_X27_X20_X3E),
+ /* K5 */ be_nested_str_weak(_X3Cp_X3EPasscode_X3A_X3C_X2Fp_X3E),
+ /* K6 */ be_nested_str_weak(format),
+ /* K7 */ be_nested_str_weak(_X3Cinput_X20type_X3D_X27number_X27_X20min_X3D_X271_X27_X20max_X3D_X2799999998_X27_X20name_X3D_X27passcode_X27_X20value_X3D_X27_X25i_X27_X3E),
+ /* K8 */ be_nested_str_weak(device),
+ /* K9 */ be_nested_str_weak(root_passcode),
+ /* K10 */ be_nested_str_weak(_X3Cp_X3EDistinguish_X20id_X3A_X3C_X2Fp_X3E),
+ /* K11 */ be_nested_str_weak(_X3Cinput_X20type_X3D_X27number_X27_X20min_X3D_X270_X27_X20max_X3D_X274095_X27_X20name_X3D_X27discriminator_X27_X20value_X3D_X27_X25i_X27_X3E),
+ /* K12 */ be_nested_str_weak(root_discriminator),
+ /* K13 */ be_nested_str_weak(_X3Cp_X3E_X3Cinput_X20type_X3D_X27checkbox_X27_X20name_X3D_X27ipv4_X27_X25s_X3EIPv4_X20only_X3C_X2Fp_X3E),
+ /* K14 */ be_nested_str_weak(ipv4only),
+ /* K15 */ be_nested_str_weak(_X20checked),
+ /* K16 */ be_nested_str_weak(),
+ /* K17 */ be_nested_str_weak(_X3Cp_X3E_X3C_X2Fp_X3E_X3Cbutton_X20name_X3D_X27passcode_X27_X20class_X3D_X27button_X20bgrn_X27_X3EChange_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E),
+ /* K18 */ be_nested_str_weak(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E),
}),
- be_str_weak(show_session_info),
+ be_str_weak(show_passcode_form),
&be_const_str_solidified,
- ( &(const binstruction[92]) { /* code */
- 0xA40A0000, // 0000 IMPORT R2 K0
- 0xA40E0200, // 0001 IMPORT R3 K1
- 0x8C100502, // 0002 GETMET R4 R2 K2
- 0x58180003, // 0003 LDCONST R6 K3
- 0x7C100400, // 0004 CALL R4 2
- 0x8C100502, // 0005 GETMET R4 R2 K2
- 0x58180004, // 0006 LDCONST R6 K4
- 0x7C100400, // 0007 CALL R4 2
- 0x6010000C, // 0008 GETGBL R4 G12
- 0x88140105, // 0009 GETMBR R5 R0 K5
- 0x88140B06, // 000A GETMBR R5 R5 K6
- 0x88140B06, // 000B GETMBR R5 R5 K6
- 0x7C100200, // 000C CALL R4 1
- 0x1C100907, // 000D EQ R4 R4 K7
- 0x78120003, // 000E JMPF R4 #0013
- 0x8C100502, // 000F GETMET R4 R2 K2
- 0x58180008, // 0010 LDCONST R6 K8
- 0x7C100400, // 0011 CALL R4 2
- 0x70020044, // 0012 JMP #0058
- 0x58100007, // 0013 LDCONST R4 K7
- 0x6014000C, // 0014 GETGBL R5 G12
- 0x88180105, // 0015 GETMBR R6 R0 K5
- 0x88180D06, // 0016 GETMBR R6 R6 K6
- 0x88180D06, // 0017 GETMBR R6 R6 K6
- 0x7C140200, // 0018 CALL R5 1
- 0x14180805, // 0019 LT R6 R4 R5
- 0x781A003C, // 001A JMPF R6 #0058
- 0x88180105, // 001B GETMBR R6 R0 K5
- 0x88180D06, // 001C GETMBR R6 R6 K6
- 0x88180D06, // 001D GETMBR R6 R6 K6
- 0x94180C04, // 001E GETIDX R6 R6 R4
- 0x881C0D09, // 001F GETMBR R7 R6 K9
- 0x781E0034, // 0020 JMPF R7 #0056
- 0x8C1C0502, // 0021 GETMET R7 R2 K2
- 0x8C24070A, // 0022 GETMET R9 R3 K10
- 0x582C000B, // 0023 LDCONST R11 K11
- 0x88300D0C, // 0024 GETMBR R12 R6 K12
- 0x7C240600, // 0025 CALL R9 3
- 0x7C1C0400, // 0026 CALL R7 2
- 0x201C0907, // 0027 NE R7 R4 K7
- 0x781E0002, // 0028 JMPF R7 #002C
- 0x8C1C0502, // 0029 GETMET R7 R2 K2
- 0x5824000D, // 002A LDCONST R9 K13
- 0x7C1C0400, // 002B CALL R7 2
- 0x881C0D09, // 002C GETMBR R7 R6 K9
- 0x8C1C0F0E, // 002D GETMET R7 R7 K14
- 0x7C1C0200, // 002E CALL R7 1
- 0x8C1C0F0F, // 002F GETMET R7 R7 K15
- 0x7C1C0200, // 0030 CALL R7 1
- 0x88200D10, // 0031 GETMBR R8 R6 K16
- 0x8C20110E, // 0032 GETMET R8 R8 K14
- 0x7C200200, // 0033 CALL R8 1
- 0x8C20110F, // 0034 GETMET R8 R8 K15
- 0x7C200200, // 0035 CALL R8 1
- 0x8C240502, // 0036 GETMET R9 R2 K2
- 0x8C2C070A, // 0037 GETMET R11 R3 K10
- 0x58340011, // 0038 LDCONST R13 K17
- 0x8C380F12, // 0039 GETMET R14 R7 K18
- 0x7C380200, // 003A CALL R14 1
- 0x7C2C0600, // 003B CALL R11 3
- 0x7C240400, // 003C CALL R9 2
- 0x8C240502, // 003D GETMET R9 R2 K2
- 0x8C2C070A, // 003E GETMET R11 R3 K10
- 0x58340013, // 003F LDCONST R13 K19
- 0x8C381112, // 0040 GETMET R14 R8 K18
- 0x7C380200, // 0041 CALL R14 1
- 0x7C2C0600, // 0042 CALL R11 3
- 0x7C240400, // 0043 CALL R9 2
- 0x8C240502, // 0044 GETMET R9 R2 K2
- 0x582C0014, // 0045 LDCONST R11 K20
- 0x7C240400, // 0046 CALL R9 2
- 0x8C240502, // 0047 GETMET R9 R2 K2
- 0x582C0015, // 0048 LDCONST R11 K21
- 0x7C240400, // 0049 CALL R9 2
- 0x8C240502, // 004A GETMET R9 R2 K2
- 0x8C2C070A, // 004B GETMET R11 R3 K10
- 0x58340016, // 004C LDCONST R13 K22
- 0x88380D0C, // 004D GETMBR R14 R6 K12
- 0x7C2C0600, // 004E CALL R11 3
- 0x7C240400, // 004F CALL R9 2
- 0x8C240502, // 0050 GETMET R9 R2 K2
- 0x582C0017, // 0051 LDCONST R11 K23
- 0x7C240400, // 0052 CALL R9 2
- 0x8C240502, // 0053 GETMET R9 R2 K2
- 0x582C0018, // 0054 LDCONST R11 K24
- 0x7C240400, // 0055 CALL R9 2
- 0x00100919, // 0056 ADD R4 R4 K25
- 0x7001FFC0, // 0057 JMP #0019
- 0x8C100502, // 0058 GETMET R4 R2 K2
- 0x58180018, // 0059 LDCONST R6 K24
- 0x7C100400, // 005A CALL R4 2
- 0x80000000, // 005B RET 0
+ ( &(const binstruction[46]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0xA40A0200, // 0001 IMPORT R2 K1
+ 0x8C0C0302, // 0002 GETMET R3 R1 K2
+ 0x58140003, // 0003 LDCONST R5 K3
+ 0x7C0C0400, // 0004 CALL R3 2
+ 0x8C0C0302, // 0005 GETMET R3 R1 K2
+ 0x58140004, // 0006 LDCONST R5 K4
+ 0x7C0C0400, // 0007 CALL R3 2
+ 0x8C0C0302, // 0008 GETMET R3 R1 K2
+ 0x58140005, // 0009 LDCONST R5 K5
+ 0x7C0C0400, // 000A CALL R3 2
+ 0x8C0C0302, // 000B GETMET R3 R1 K2
+ 0x8C140506, // 000C GETMET R5 R2 K6
+ 0x581C0007, // 000D LDCONST R7 K7
+ 0x88200108, // 000E GETMBR R8 R0 K8
+ 0x88201109, // 000F GETMBR R8 R8 K9
+ 0x7C140600, // 0010 CALL R5 3
+ 0x7C0C0400, // 0011 CALL R3 2
+ 0x8C0C0302, // 0012 GETMET R3 R1 K2
+ 0x5814000A, // 0013 LDCONST R5 K10
+ 0x7C0C0400, // 0014 CALL R3 2
+ 0x8C0C0302, // 0015 GETMET R3 R1 K2
+ 0x8C140506, // 0016 GETMET R5 R2 K6
+ 0x581C000B, // 0017 LDCONST R7 K11
+ 0x88200108, // 0018 GETMBR R8 R0 K8
+ 0x8820110C, // 0019 GETMBR R8 R8 K12
+ 0x7C140600, // 001A CALL R5 3
+ 0x7C0C0400, // 001B CALL R3 2
+ 0x8C0C0302, // 001C GETMET R3 R1 K2
+ 0x8C140506, // 001D GETMET R5 R2 K6
+ 0x581C000D, // 001E LDCONST R7 K13
+ 0x88200108, // 001F GETMBR R8 R0 K8
+ 0x8820110E, // 0020 GETMBR R8 R8 K14
+ 0x78220001, // 0021 JMPF R8 #0024
+ 0x5820000F, // 0022 LDCONST R8 K15
+ 0x70020000, // 0023 JMP #0025
+ 0x58200010, // 0024 LDCONST R8 K16
+ 0x7C140600, // 0025 CALL R5 3
+ 0x7C0C0400, // 0026 CALL R3 2
+ 0x8C0C0302, // 0027 GETMET R3 R1 K2
+ 0x58140011, // 0028 LDCONST R5 K17
+ 0x7C0C0400, // 0029 CALL R3 2
+ 0x8C0C0302, // 002A GETMET R3 R1 K2
+ 0x58140012, // 002B LDCONST R5 K18
+ 0x7C0C0400, // 002C CALL R3 2
+ 0x80000000, // 002D RET 0
})
)
);
@@ -473,32 +900,109 @@ be_local_closure(Matter_UI_show_enable, /* name */
/********************************************************************
-** Solidified function: init
+** Solidified function: show_commissioning_info
********************************************************************/
-be_local_closure(Matter_UI_init, /* name */
+be_local_closure(Matter_UI_show_commissioning_info, /* name */
be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
+ 14, /* nstack */
+ 1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_nested_str_weak(device),
- /* K1 */ be_nested_str_weak(tasmota),
- /* K2 */ be_nested_str_weak(add_driver),
+ ( &(const bvalue[20]) { /* constants */
+ /* K0 */ be_nested_str_weak(webserver),
+ /* K1 */ be_nested_str_weak(string),
+ /* K2 */ be_nested_str_weak(device),
+ /* K3 */ be_nested_str_weak(commissioning_open),
+ /* K4 */ be_nested_str_weak(tasmota),
+ /* K5 */ be_nested_str_weak(millis),
+ /* K6 */ be_const_int(0),
+ /* K7 */ be_nested_str_weak(content_send),
+ /* K8 */ be_nested_str_weak(format),
+ /* K9 */ be_nested_str_weak(_X3Cfieldset_X3E_X3Clegend_X3E_X3Cb_X3E_X26nbsp_X3BCommissioning_X20open_X20for_X20_X25i_X20min_X26nbsp_X3B_X3C_X2Fb_X3E_X3C_X2Flegend_X3E_X3Cp_X3E_X3C_X2Fp_X3E),
+ /* K10 */ be_nested_str_weak(compute_manual_pairing_code),
+ /* K11 */ be_nested_str_weak(_X3Cp_X3EManual_X20pairing_X20code_X3A_X3Cbr_X3E_X3Cb_X3E_X25s_X2D_X25s_X2D_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E_X3Chr_X3E),
+ /* K12 */ be_const_int(3),
+ /* K13 */ be_const_int(2147483647),
+ /* K14 */ be_nested_str_weak(_X3Cdiv_X3E_X3Ccenter_X3E),
+ /* K15 */ be_nested_str_weak(compute_qrcode_content),
+ /* K16 */ be_nested_str_weak(show_qrcode),
+ /* K17 */ be_nested_str_weak(_X3Cp_X3E_X20_X25s_X3C_X2Fp_X3E),
+ /* K18 */ be_nested_str_weak(_X3C_X2Fdiv_X3E),
+ /* K19 */ be_nested_str_weak(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E),
}),
- be_str_weak(init),
+ be_str_weak(show_commissioning_info),
&be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
- 0x90020001, // 0000 SETMBR R0 K0 R1
- 0xB80A0200, // 0001 GETNGBL R2 K1
- 0x8C080502, // 0002 GETMET R2 R2 K2
- 0x5C100000, // 0003 MOVE R4 R0
- 0x7C080400, // 0004 CALL R2 2
- 0x80000000, // 0005 RET 0
+ ( &(const binstruction[66]) { /* code */
+ 0xA4060000, // 0000 IMPORT R1 K0
+ 0xA40A0200, // 0001 IMPORT R2 K1
+ 0x880C0102, // 0002 GETMBR R3 R0 K2
+ 0x880C0703, // 0003 GETMBR R3 R3 K3
+ 0xB8120800, // 0004 GETNGBL R4 K4
+ 0x8C100905, // 0005 GETMET R4 R4 K5
+ 0x7C100200, // 0006 CALL R4 1
+ 0x040C0604, // 0007 SUB R3 R3 R4
+ 0x541203E7, // 0008 LDINT R4 1000
+ 0x0C0C0604, // 0009 DIV R3 R3 R4
+ 0x14100706, // 000A LT R4 R3 K6
+ 0x78120000, // 000B JMPF R4 #000D
+ 0x580C0006, // 000C LDCONST R3 K6
+ 0x5412001D, // 000D LDINT R4 30
+ 0x00100604, // 000E ADD R4 R3 R4
+ 0x5416003B, // 000F LDINT R5 60
+ 0x0C100805, // 0010 DIV R4 R4 R5
+ 0x8C140307, // 0011 GETMET R5 R1 K7
+ 0x8C1C0508, // 0012 GETMET R7 R2 K8
+ 0x58240009, // 0013 LDCONST R9 K9
+ 0x5C280800, // 0014 MOVE R10 R4
+ 0x7C1C0600, // 0015 CALL R7 3
+ 0x7C140400, // 0016 CALL R5 2
+ 0x88140102, // 0017 GETMBR R5 R0 K2
+ 0x8C140B0A, // 0018 GETMET R5 R5 K10
+ 0x7C140200, // 0019 CALL R5 1
+ 0x8C180307, // 001A GETMET R6 R1 K7
+ 0x8C200508, // 001B GETMET R8 R2 K8
+ 0x5828000B, // 001C LDCONST R10 K11
+ 0x402E0D0C, // 001D CONNECT R11 K6 K12
+ 0x942C0A0B, // 001E GETIDX R11 R5 R11
+ 0x54320003, // 001F LDINT R12 4
+ 0x54360005, // 0020 LDINT R13 6
+ 0x4030180D, // 0021 CONNECT R12 R12 R13
+ 0x94300A0C, // 0022 GETIDX R12 R5 R12
+ 0x54360006, // 0023 LDINT R13 7
+ 0x40341B0D, // 0024 CONNECT R13 R13 K13
+ 0x94340A0D, // 0025 GETIDX R13 R5 R13
+ 0x7C200A00, // 0026 CALL R8 5
+ 0x7C180400, // 0027 CALL R6 2
+ 0x8C180307, // 0028 GETMET R6 R1 K7
+ 0x8C200508, // 0029 GETMET R8 R2 K8
+ 0x5828000E, // 002A LDCONST R10 K14
+ 0x7C200400, // 002B CALL R8 2
+ 0x7C180400, // 002C CALL R6 2
+ 0x88180102, // 002D GETMBR R6 R0 K2
+ 0x8C180D0F, // 002E GETMET R6 R6 K15
+ 0x7C180200, // 002F CALL R6 1
+ 0x8C1C0110, // 0030 GETMET R7 R0 K16
+ 0x5C240C00, // 0031 MOVE R9 R6
+ 0x7C1C0400, // 0032 CALL R7 2
+ 0x8C1C0307, // 0033 GETMET R7 R1 K7
+ 0x8C240508, // 0034 GETMET R9 R2 K8
+ 0x582C0011, // 0035 LDCONST R11 K17
+ 0x5C300C00, // 0036 MOVE R12 R6
+ 0x7C240600, // 0037 CALL R9 3
+ 0x7C1C0400, // 0038 CALL R7 2
+ 0x8C1C0307, // 0039 GETMET R7 R1 K7
+ 0x8C240508, // 003A GETMET R9 R2 K8
+ 0x582C0012, // 003B LDCONST R11 K18
+ 0x7C240400, // 003C CALL R9 2
+ 0x7C1C0400, // 003D CALL R7 2
+ 0x8C1C0307, // 003E GETMET R7 R1 K7
+ 0x58240013, // 003F LDCONST R9 K19
+ 0x7C1C0400, // 0040 CALL R7 2
+ 0x80000000, // 0041 RET 0
})
)
);
@@ -518,7 +1022,7 @@ be_local_closure(Matter_UI_page_part_ctl, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[40]) { /* constants */
+ ( &(const bvalue[48]) { /* constants */
/* K0 */ be_nested_str_weak(webserver),
/* K1 */ be_nested_str_weak(check_privileged_access),
/* K2 */ be_nested_str_weak(string),
@@ -529,40 +1033,48 @@ be_local_closure(Matter_UI_page_part_ctl, /* name */
/* K7 */ be_nested_str_weak(passcode),
/* K8 */ be_nested_str_weak(discriminator),
/* K9 */ be_nested_str_weak(device),
- /* K10 */ be_nested_str_weak(arg),
- /* K11 */ be_nested_str_weak(save_param),
- /* K12 */ be_nested_str_weak(redirect),
- /* K13 */ be_nested_str_weak(_X2F_X3Frst_X3D),
- /* K14 */ be_nested_str_weak(enable),
- /* K15 */ be_nested_str_weak(tasmota),
- /* K16 */ be_nested_str_weak(cmd),
- /* K17 */ be_nested_str_weak(SetOption),
- /* K18 */ be_nested_str_weak(matter),
- /* K19 */ be_nested_str_weak(MATTER_OPTION),
- /* K20 */ be_nested_str_weak(_X201),
- /* K21 */ be_nested_str_weak(disable),
- /* K22 */ be_nested_str_weak(_X200),
- /* K23 */ be_nested_str_weak(del_session),
- /* K24 */ be_nested_str_weak(sessions),
- /* K25 */ be_nested_str_weak(get_session_by_local_session_id),
- /* K26 */ be_nested_str_weak(remove_session),
- /* K27 */ be_nested_str_weak(save),
- /* K28 */ be_nested_str_weak(log),
- /* K29 */ be_nested_str_weak(format),
- /* K30 */ be_nested_str_weak(BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s),
- /* K31 */ be_const_int(2),
- /* K32 */ be_nested_str_weak(content_start),
- /* K33 */ be_nested_str_weak(Parameter_X20error),
- /* K34 */ be_nested_str_weak(content_send_style),
- /* K35 */ be_nested_str_weak(content_send),
- /* K36 */ be_nested_str_weak(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E),
- /* K37 */ be_nested_str_weak(content_button),
- /* K38 */ be_nested_str_weak(BUTTON_MANAGEMENT),
- /* K39 */ be_nested_str_weak(content_stop),
+ /* K10 */ be_nested_str_weak(root_passcode),
+ /* K11 */ be_nested_str_weak(arg),
+ /* K12 */ be_nested_str_weak(root_discriminator),
+ /* K13 */ be_nested_str_weak(ipv4only),
+ /* K14 */ be_nested_str_weak(ipv4),
+ /* K15 */ be_nested_str_weak(on),
+ /* K16 */ be_nested_str_weak(save_param),
+ /* K17 */ be_nested_str_weak(redirect),
+ /* K18 */ be_nested_str_weak(_X2F_X3Frst_X3D),
+ /* K19 */ be_nested_str_weak(enable),
+ /* K20 */ be_nested_str_weak(tasmota),
+ /* K21 */ be_nested_str_weak(cmd),
+ /* K22 */ be_nested_str_weak(SetOption),
+ /* K23 */ be_nested_str_weak(matter),
+ /* K24 */ be_nested_str_weak(MATTER_OPTION),
+ /* K25 */ be_nested_str_weak(_X201),
+ /* K26 */ be_nested_str_weak(disable),
+ /* K27 */ be_nested_str_weak(_X200),
+ /* K28 */ be_nested_str_weak(del_fabric),
+ /* K29 */ be_const_int(0),
+ /* K30 */ be_nested_str_weak(sessions),
+ /* K31 */ be_nested_str_weak(fabrics),
+ /* K32 */ be_nested_str_weak(get_fabric_index),
+ /* K33 */ be_nested_str_weak(remove_fabric),
+ /* K34 */ be_const_int(1),
+ /* K35 */ be_nested_str_weak(_X2Fmatterc_X3F),
+ /* K36 */ be_nested_str_weak(log),
+ /* K37 */ be_nested_str_weak(format),
+ /* K38 */ be_nested_str_weak(BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s),
+ /* K39 */ be_const_int(2),
+ /* K40 */ be_nested_str_weak(content_start),
+ /* K41 */ be_nested_str_weak(Parameter_X20error),
+ /* K42 */ be_nested_str_weak(content_send_style),
+ /* K43 */ be_nested_str_weak(content_send),
+ /* K44 */ be_nested_str_weak(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E),
+ /* K45 */ be_nested_str_weak(content_button),
+ /* K46 */ be_nested_str_weak(BUTTON_MANAGEMENT),
+ /* K47 */ be_nested_str_weak(content_stop),
}),
be_str_weak(page_part_ctl),
&be_const_str_solidified,
- ( &(const binstruction[144]) { /* code */
+ ( &(const binstruction[156]) { /* code */
0xA4060000, // 0000 IMPORT R1 K0
0x8C080301, // 0001 GETMET R2 R1 K1
0x7C080200, // 0002 CALL R2 1
@@ -574,7 +1086,7 @@ be_local_closure(Matter_UI_page_part_ctl, /* name */
0xA4120800, // 0008 IMPORT R4 K4
0x8C140705, // 0009 GETMET R5 R3 K5
0x7C140200, // 000A CALL R5 1
- 0xA8020064, // 000B EXBLK 0 #0071
+ 0xA8020070, // 000B EXBLK 0 #007D
0x8C180306, // 000C GETMET R6 R1 K6
0x58200007, // 000D LDCONST R8 K7
0x7C180400, // 000E CALL R6 2
@@ -582,279 +1094,143 @@ be_local_closure(Matter_UI_page_part_ctl, /* name */
0x8C180306, // 0010 GETMET R6 R1 K6
0x58200008, // 0011 LDCONST R8 K8
0x7C180400, // 0012 CALL R6 2
- 0x781A001C, // 0013 JMPF R6 #0031
+ 0x781A0022, // 0013 JMPF R6 #0037
0x8C180306, // 0014 GETMET R6 R1 K6
0x58200007, // 0015 LDCONST R8 K7
0x7C180400, // 0016 CALL R6 2
0x781A0006, // 0017 JMPF R6 #001F
0x88180109, // 0018 GETMBR R6 R0 K9
0x601C0009, // 0019 GETGBL R7 G9
- 0x8C20030A, // 001A GETMET R8 R1 K10
+ 0x8C20030B, // 001A GETMET R8 R1 K11
0x58280007, // 001B LDCONST R10 K7
0x7C200400, // 001C CALL R8 2
0x7C1C0200, // 001D CALL R7 1
- 0x901A0E07, // 001E SETMBR R6 K7 R7
+ 0x901A1407, // 001E SETMBR R6 K10 R7
0x8C180306, // 001F GETMET R6 R1 K6
0x58200008, // 0020 LDCONST R8 K8
0x7C180400, // 0021 CALL R6 2
0x781A0006, // 0022 JMPF R6 #002A
0x88180109, // 0023 GETMBR R6 R0 K9
0x601C0009, // 0024 GETGBL R7 G9
- 0x8C20030A, // 0025 GETMET R8 R1 K10
+ 0x8C20030B, // 0025 GETMET R8 R1 K11
0x58280008, // 0026 LDCONST R10 K8
0x7C200400, // 0027 CALL R8 2
0x7C1C0200, // 0028 CALL R7 1
- 0x901A1007, // 0029 SETMBR R6 K8 R7
+ 0x901A1807, // 0029 SETMBR R6 K12 R7
0x88180109, // 002A GETMBR R6 R0 K9
- 0x8C180D0B, // 002B GETMET R6 R6 K11
- 0x7C180200, // 002C CALL R6 1
- 0x8C18030C, // 002D GETMET R6 R1 K12
- 0x5820000D, // 002E LDCONST R8 K13
- 0x7C180400, // 002F CALL R6 2
- 0x7002003D, // 0030 JMP #006F
- 0x8C180306, // 0031 GETMET R6 R1 K6
- 0x5820000E, // 0032 LDCONST R8 K14
- 0x7C180400, // 0033 CALL R6 2
- 0x781A000C, // 0034 JMPF R6 #0042
- 0xB81A1E00, // 0035 GETNGBL R6 K15
- 0x8C180D10, // 0036 GETMET R6 R6 K16
- 0x60200008, // 0037 GETGBL R8 G8
- 0xB8262400, // 0038 GETNGBL R9 K18
- 0x88241313, // 0039 GETMBR R9 R9 K19
- 0x7C200200, // 003A CALL R8 1
- 0x00222208, // 003B ADD R8 K17 R8
- 0x00201114, // 003C ADD R8 R8 K20
- 0x7C180400, // 003D CALL R6 2
- 0x8C18030C, // 003E GETMET R6 R1 K12
- 0x5820000D, // 003F LDCONST R8 K13
- 0x7C180400, // 0040 CALL R6 2
- 0x7002002C, // 0041 JMP #006F
- 0x8C180306, // 0042 GETMET R6 R1 K6
- 0x58200015, // 0043 LDCONST R8 K21
- 0x7C180400, // 0044 CALL R6 2
- 0x781A000C, // 0045 JMPF R6 #0053
- 0xB81A1E00, // 0046 GETNGBL R6 K15
- 0x8C180D10, // 0047 GETMET R6 R6 K16
- 0x60200008, // 0048 GETGBL R8 G8
- 0xB8262400, // 0049 GETNGBL R9 K18
- 0x88241313, // 004A GETMBR R9 R9 K19
- 0x7C200200, // 004B CALL R8 1
- 0x00222208, // 004C ADD R8 K17 R8
- 0x00201116, // 004D ADD R8 R8 K22
- 0x7C180400, // 004E CALL R6 2
- 0x8C18030C, // 004F GETMET R6 R1 K12
- 0x5820000D, // 0050 LDCONST R8 K13
- 0x7C180400, // 0051 CALL R6 2
- 0x7002001B, // 0052 JMP #006F
- 0x8C180306, // 0053 GETMET R6 R1 K6
- 0x58200017, // 0054 LDCONST R8 K23
- 0x7C180400, // 0055 CALL R6 2
- 0x781A0017, // 0056 JMPF R6 #006F
- 0x88180109, // 0057 GETMBR R6 R0 K9
- 0x88180D18, // 0058 GETMBR R6 R6 K24
- 0x8C180D19, // 0059 GETMET R6 R6 K25
- 0x60200009, // 005A GETGBL R8 G9
- 0x8C24030A, // 005B GETMET R9 R1 K10
- 0x582C0017, // 005C LDCONST R11 K23
- 0x7C240400, // 005D CALL R9 2
- 0x7C200200, // 005E CALL R8 1
- 0x7C180400, // 005F CALL R6 2
- 0x4C1C0000, // 0060 LDNIL R7
- 0x201C0C07, // 0061 NE R7 R6 R7
- 0x781E0008, // 0062 JMPF R7 #006C
- 0x881C0109, // 0063 GETMBR R7 R0 K9
- 0x881C0F18, // 0064 GETMBR R7 R7 K24
- 0x8C1C0F1A, // 0065 GETMET R7 R7 K26
- 0x5C240C00, // 0066 MOVE R9 R6
- 0x7C1C0400, // 0067 CALL R7 2
- 0x881C0109, // 0068 GETMBR R7 R0 K9
- 0x881C0F18, // 0069 GETMBR R7 R7 K24
- 0x8C1C0F1B, // 006A GETMET R7 R7 K27
- 0x7C1C0200, // 006B CALL R7 1
- 0x8C1C030C, // 006C GETMET R7 R1 K12
- 0x5824000D, // 006D LDCONST R9 K13
- 0x7C1C0400, // 006E CALL R7 2
- 0xA8040001, // 006F EXBLK 1 1
- 0x7002001D, // 0070 JMP #008F
- 0xAC180002, // 0071 CATCH R6 0 2
- 0x7002001A, // 0072 JMP #008E
- 0xB8221E00, // 0073 GETNGBL R8 K15
- 0x8C20111C, // 0074 GETMET R8 R8 K28
- 0x8C28051D, // 0075 GETMET R10 R2 K29
- 0x5830001E, // 0076 LDCONST R12 K30
- 0x5C340C00, // 0077 MOVE R13 R6
- 0x5C380E00, // 0078 MOVE R14 R7
- 0x7C280800, // 0079 CALL R10 4
- 0x582C001F, // 007A LDCONST R11 K31
- 0x7C200600, // 007B CALL R8 3
- 0x8C200320, // 007C GETMET R8 R1 K32
- 0x58280021, // 007D LDCONST R10 K33
- 0x7C200400, // 007E CALL R8 2
- 0x8C200322, // 007F GETMET R8 R1 K34
- 0x7C200200, // 0080 CALL R8 1
- 0x8C200323, // 0081 GETMET R8 R1 K35
- 0x8C28051D, // 0082 GETMET R10 R2 K29
- 0x58300024, // 0083 LDCONST R12 K36
- 0x5C340C00, // 0084 MOVE R13 R6
- 0x5C380E00, // 0085 MOVE R14 R7
- 0x7C280800, // 0086 CALL R10 4
- 0x7C200400, // 0087 CALL R8 2
- 0x8C200325, // 0088 GETMET R8 R1 K37
- 0x88280326, // 0089 GETMBR R10 R1 K38
+ 0x8C1C030B, // 002B GETMET R7 R1 K11
+ 0x5824000E, // 002C LDCONST R9 K14
+ 0x7C1C0400, // 002D CALL R7 2
+ 0x1C1C0F0F, // 002E EQ R7 R7 K15
+ 0x901A1A07, // 002F SETMBR R6 K13 R7
+ 0x88180109, // 0030 GETMBR R6 R0 K9
+ 0x8C180D10, // 0031 GETMET R6 R6 K16
+ 0x7C180200, // 0032 CALL R6 1
+ 0x8C180311, // 0033 GETMET R6 R1 K17
+ 0x58200012, // 0034 LDCONST R8 K18
+ 0x7C180400, // 0035 CALL R6 2
+ 0x70020043, // 0036 JMP #007B
+ 0x8C180306, // 0037 GETMET R6 R1 K6
+ 0x58200013, // 0038 LDCONST R8 K19
+ 0x7C180400, // 0039 CALL R6 2
+ 0x781A000C, // 003A JMPF R6 #0048
+ 0xB81A2800, // 003B GETNGBL R6 K20
+ 0x8C180D15, // 003C GETMET R6 R6 K21
+ 0x60200008, // 003D GETGBL R8 G8
+ 0xB8262E00, // 003E GETNGBL R9 K23
+ 0x88241318, // 003F GETMBR R9 R9 K24
+ 0x7C200200, // 0040 CALL R8 1
+ 0x00222C08, // 0041 ADD R8 K22 R8
+ 0x00201119, // 0042 ADD R8 R8 K25
+ 0x7C180400, // 0043 CALL R6 2
+ 0x8C180311, // 0044 GETMET R6 R1 K17
+ 0x58200012, // 0045 LDCONST R8 K18
+ 0x7C180400, // 0046 CALL R6 2
+ 0x70020032, // 0047 JMP #007B
+ 0x8C180306, // 0048 GETMET R6 R1 K6
+ 0x5820001A, // 0049 LDCONST R8 K26
+ 0x7C180400, // 004A CALL R6 2
+ 0x781A000C, // 004B JMPF R6 #0059
+ 0xB81A2800, // 004C GETNGBL R6 K20
+ 0x8C180D15, // 004D GETMET R6 R6 K21
+ 0x60200008, // 004E GETGBL R8 G8
+ 0xB8262E00, // 004F GETNGBL R9 K23
+ 0x88241318, // 0050 GETMBR R9 R9 K24
+ 0x7C200200, // 0051 CALL R8 1
+ 0x00222C08, // 0052 ADD R8 K22 R8
+ 0x0020111B, // 0053 ADD R8 R8 K27
+ 0x7C180400, // 0054 CALL R6 2
+ 0x8C180311, // 0055 GETMET R6 R1 K17
+ 0x58200012, // 0056 LDCONST R8 K18
+ 0x7C180400, // 0057 CALL R6 2
+ 0x70020021, // 0058 JMP #007B
+ 0x8C180306, // 0059 GETMET R6 R1 K6
+ 0x5820001C, // 005A LDCONST R8 K28
+ 0x7C180400, // 005B CALL R6 2
+ 0x781A001D, // 005C JMPF R6 #007B
+ 0x60180009, // 005D GETGBL R6 G9
+ 0x8C1C030B, // 005E GETMET R7 R1 K11
+ 0x5824001C, // 005F LDCONST R9 K28
+ 0x7C1C0400, // 0060 CALL R7 2
+ 0x7C180200, // 0061 CALL R6 1
+ 0x581C001D, // 0062 LDCONST R7 K29
+ 0x88200109, // 0063 GETMBR R8 R0 K9
+ 0x8820111E, // 0064 GETMBR R8 R8 K30
+ 0x8820111F, // 0065 GETMBR R8 R8 K31
+ 0x6024000C, // 0066 GETGBL R9 G12
+ 0x5C281000, // 0067 MOVE R10 R8
+ 0x7C240200, // 0068 CALL R9 1
+ 0x14240E09, // 0069 LT R9 R7 R9
+ 0x7826000C, // 006A JMPF R9 #0078
+ 0x94241007, // 006B GETIDX R9 R8 R7
+ 0x8C241320, // 006C GETMET R9 R9 K32
+ 0x7C240200, // 006D CALL R9 1
+ 0x1C241206, // 006E EQ R9 R9 R6
+ 0x78260005, // 006F JMPF R9 #0076
+ 0x88240109, // 0070 GETMBR R9 R0 K9
+ 0x8C241321, // 0071 GETMET R9 R9 K33
+ 0x942C1007, // 0072 GETIDX R11 R8 R7
+ 0x7C240400, // 0073 CALL R9 2
+ 0x70020002, // 0074 JMP #0078
+ 0x70020000, // 0075 JMP #0077
+ 0x001C0F22, // 0076 ADD R7 R7 K34
+ 0x7001FFED, // 0077 JMP #0066
+ 0x8C240311, // 0078 GETMET R9 R1 K17
+ 0x582C0023, // 0079 LDCONST R11 K35
+ 0x7C240400, // 007A CALL R9 2
+ 0xA8040001, // 007B EXBLK 1 1
+ 0x7002001D, // 007C JMP #009B
+ 0xAC180002, // 007D CATCH R6 0 2
+ 0x7002001A, // 007E JMP #009A
+ 0xB8222800, // 007F GETNGBL R8 K20
+ 0x8C201124, // 0080 GETMET R8 R8 K36
+ 0x8C280525, // 0081 GETMET R10 R2 K37
+ 0x58300026, // 0082 LDCONST R12 K38
+ 0x5C340C00, // 0083 MOVE R13 R6
+ 0x5C380E00, // 0084 MOVE R14 R7
+ 0x7C280800, // 0085 CALL R10 4
+ 0x582C0027, // 0086 LDCONST R11 K39
+ 0x7C200600, // 0087 CALL R8 3
+ 0x8C200328, // 0088 GETMET R8 R1 K40
+ 0x58280029, // 0089 LDCONST R10 K41
0x7C200400, // 008A CALL R8 2
- 0x8C200327, // 008B GETMET R8 R1 K39
+ 0x8C20032A, // 008B GETMET R8 R1 K42
0x7C200200, // 008C CALL R8 1
- 0x70020000, // 008D JMP #008F
- 0xB0080000, // 008E RAISE 2 R0 R0
- 0x80000000, // 008F RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: web_add_config_button
-********************************************************************/
-be_local_closure(Matter_UI_web_add_config_button, /* name */
- be_nested_proto(
- 5, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 6]) { /* constants */
- /* K0 */ be_nested_str_weak(webserver),
- /* K1 */ be_nested_str_weak(content_send),
- /* K2 */ be_nested_str_weak(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27matterc_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3E),
- /* K3 */ be_nested_str_weak(matter),
- /* K4 */ be_nested_str_weak(_LOGO),
- /* K5 */ be_nested_str_weak(_X20Configure_X20Matter_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E),
- }),
- be_str_weak(web_add_config_button),
- &be_const_str_solidified,
- ( &(const binstruction[12]) { /* code */
- 0xA4060000, // 0000 IMPORT R1 K0
- 0x8C080301, // 0001 GETMET R2 R1 K1
- 0x58100002, // 0002 LDCONST R4 K2
- 0x7C080400, // 0003 CALL R2 2
- 0x8C080301, // 0004 GETMET R2 R1 K1
- 0xB8120600, // 0005 GETNGBL R4 K3
- 0x88100904, // 0006 GETMBR R4 R4 K4
- 0x7C080400, // 0007 CALL R2 2
- 0x8C080301, // 0008 GETMET R2 R1 K1
- 0x58100005, // 0009 LDCONST R4 K5
- 0x7C080400, // 000A CALL R2 2
- 0x80000000, // 000B RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: page_qrcode_min_js
-********************************************************************/
-be_local_closure(Matter_UI_page_qrcode_min_js, /* name */
- be_nested_proto(
- 6, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[ 6]) { /* constants */
- /* K0 */ be_nested_str_weak(webserver),
- /* K1 */ be_nested_str_weak(content_open),
- /* K2 */ be_nested_str_weak(text_X2Fjavascript),
- /* K3 */ be_nested_str_weak(content_send),
- /* K4 */ be_nested_str_weak(matter),
- /* K5 */ be_nested_str_weak(_QRCODE_MINJS),
- }),
- be_str_weak(page_qrcode_min_js),
- &be_const_str_solidified,
- ( &(const binstruction[10]) { /* code */
- 0xA4060000, // 0000 IMPORT R1 K0
- 0x8C080301, // 0001 GETMET R2 R1 K1
- 0x541200C7, // 0002 LDINT R4 200
- 0x58140002, // 0003 LDCONST R5 K2
- 0x7C080600, // 0004 CALL R2 3
- 0x8C080303, // 0005 GETMET R2 R1 K3
- 0xB8120800, // 0006 GETNGBL R4 K4
- 0x88100905, // 0007 GETMBR R4 R4 K5
- 0x7C080400, // 0008 CALL R2 2
- 0x80000000, // 0009 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: page_part_mgr
-********************************************************************/
-be_local_closure(Matter_UI_page_part_mgr, /* name */
- be_nested_proto(
- 6, /* nstack */
- 1, /* argc */
- 2, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- ( &(const bvalue[14]) { /* constants */
- /* K0 */ be_nested_str_weak(webserver),
- /* K1 */ be_nested_str_weak(string),
- /* K2 */ be_nested_str_weak(check_privileged_access),
- /* K3 */ be_nested_str_weak(content_start),
- /* K4 */ be_nested_str_weak(Matter),
- /* K5 */ be_nested_str_weak(content_send_style),
- /* K6 */ be_nested_str_weak(content_send),
- /* K7 */ be_nested_str_weak(_X3Cscript_X20type_X3D_X22text_X2Fjavascript_X22_X20src_X3D_X22qrcode_X2Emin_X2Ejs_X22_X3E_X3C_X2Fscript_X3E),
- /* K8 */ be_nested_str_weak(show_enable),
- /* K9 */ be_nested_str_weak(show_commissioning_info),
- /* K10 */ be_nested_str_weak(show_session_info),
- /* K11 */ be_nested_str_weak(content_button),
- /* K12 */ be_nested_str_weak(BUTTON_CONFIGURATION),
- /* K13 */ be_nested_str_weak(content_stop),
- }),
- be_str_weak(page_part_mgr),
- &be_const_str_solidified,
- ( &(const binstruction[28]) { /* code */
- 0xA4060000, // 0000 IMPORT R1 K0
- 0xA40A0200, // 0001 IMPORT R2 K1
- 0x8C0C0302, // 0002 GETMET R3 R1 K2
- 0x7C0C0200, // 0003 CALL R3 1
- 0x740E0001, // 0004 JMPT R3 #0007
- 0x4C0C0000, // 0005 LDNIL R3
- 0x80040600, // 0006 RET 1 R3
- 0x8C0C0303, // 0007 GETMET R3 R1 K3
- 0x58140004, // 0008 LDCONST R5 K4
- 0x7C0C0400, // 0009 CALL R3 2
- 0x8C0C0305, // 000A GETMET R3 R1 K5
- 0x7C0C0200, // 000B CALL R3 1
- 0x8C0C0306, // 000C GETMET R3 R1 K6
- 0x58140007, // 000D LDCONST R5 K7
- 0x7C0C0400, // 000E CALL R3 2
- 0x8C0C0108, // 000F GETMET R3 R0 K8
- 0x7C0C0200, // 0010 CALL R3 1
- 0x780E0003, // 0011 JMPF R3 #0016
- 0x8C0C0109, // 0012 GETMET R3 R0 K9
- 0x7C0C0200, // 0013 CALL R3 1
- 0x8C0C010A, // 0014 GETMET R3 R0 K10
- 0x7C0C0200, // 0015 CALL R3 1
- 0x8C0C030B, // 0016 GETMET R3 R1 K11
- 0x8814030C, // 0017 GETMBR R5 R1 K12
- 0x7C0C0400, // 0018 CALL R3 2
- 0x8C0C030D, // 0019 GETMET R3 R1 K13
- 0x7C0C0200, // 001A CALL R3 1
- 0x80000000, // 001B RET 0
+ 0x8C20032B, // 008D GETMET R8 R1 K43
+ 0x8C280525, // 008E GETMET R10 R2 K37
+ 0x5830002C, // 008F LDCONST R12 K44
+ 0x5C340C00, // 0090 MOVE R13 R6
+ 0x5C380E00, // 0091 MOVE R14 R7
+ 0x7C280800, // 0092 CALL R10 4
+ 0x7C200400, // 0093 CALL R8 2
+ 0x8C20032D, // 0094 GETMET R8 R1 K45
+ 0x8828032E, // 0095 GETMBR R10 R1 K46
+ 0x7C200400, // 0096 CALL R8 2
+ 0x8C20032F, // 0097 GETMET R8 R1 K47
+ 0x7C200200, // 0098 CALL R8 1
+ 0x70020000, // 0099 JMP #009B
+ 0xB0080000, // 009A RAISE 2 R0 R0
+ 0x80000000, // 009B RET 0
})
)
);
@@ -867,18 +1243,21 @@ be_local_closure(Matter_UI_page_part_mgr, /* name */
be_local_class(Matter_UI,
1,
NULL,
- be_nested_map(10,
+ be_nested_map(13,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(init, -1), be_const_closure(Matter_UI_init_closure) },
- { be_const_key_weak(device, -1), be_const_var(0) },
- { be_const_key_weak(web_add_handler, -1), be_const_closure(Matter_UI_web_add_handler_closure) },
+ { be_const_key_weak(show_fabric_info, -1), be_const_closure(Matter_UI_show_fabric_info_closure) },
{ be_const_key_weak(page_part_ctl, -1), be_const_closure(Matter_UI_page_part_ctl_closure) },
- { be_const_key_weak(show_enable, -1), be_const_closure(Matter_UI_show_enable_closure) },
- { be_const_key_weak(show_commissioning_info, 7), be_const_closure(Matter_UI_show_commissioning_info_closure) },
- { be_const_key_weak(show_session_info, 3), be_const_closure(Matter_UI_show_session_info_closure) },
- { be_const_key_weak(web_add_config_button, 0), be_const_closure(Matter_UI_web_add_config_button_closure) },
- { be_const_key_weak(page_qrcode_min_js, -1), be_const_closure(Matter_UI_page_qrcode_min_js_closure) },
- { be_const_key_weak(page_part_mgr, -1), be_const_closure(Matter_UI_page_part_mgr_closure) },
+ { be_const_key_weak(web_get_arg, -1), be_const_closure(Matter_UI_web_get_arg_closure) },
+ { be_const_key_weak(page_part_mgr, 8), be_const_closure(Matter_UI_page_part_mgr_closure) },
+ { be_const_key_weak(web_add_config_button, -1), be_const_closure(Matter_UI_web_add_config_button_closure) },
+ { be_const_key_weak(init, -1), be_const_closure(Matter_UI_init_closure) },
+ { be_const_key_weak(web_sensor, 10), be_const_closure(Matter_UI_web_sensor_closure) },
+ { be_const_key_weak(web_add_handler, -1), be_const_closure(Matter_UI_web_add_handler_closure) },
+ { be_const_key_weak(show_enable, 12), be_const_closure(Matter_UI_show_enable_closure) },
+ { be_const_key_weak(show_passcode_form, 1), be_const_closure(Matter_UI_show_passcode_form_closure) },
+ { be_const_key_weak(show_qrcode, 5), be_const_closure(Matter_UI_show_qrcode_closure) },
+ { be_const_key_weak(show_commissioning_info, -1), be_const_closure(Matter_UI_show_commissioning_info_closure) },
+ { be_const_key_weak(device, -1), be_const_var(0) },
})),
be_str_weak(Matter_UI)
);
diff --git a/lib/libesp32/berry_tasmota/src/be_TFL_lib.c b/lib/libesp32/berry_tasmota/src/be_TFL_lib.c
new file mode 100644
index 000000000..bfc4c2b54
--- /dev/null
+++ b/lib/libesp32/berry_tasmota/src/be_TFL_lib.c
@@ -0,0 +1,47 @@
+/********************************************************************
+ * Tasmota lib
+ *
+ * To use: import TFL`
+ *******************************************************************/
+#include "be_constobj.h"
+#include "be_mapping.h"
+
+#ifdef USE_BERRY_TF_LITE
+
+
+extern const char* be_TFL_log(struct bvm *vm);
+BE_FUNC_CTYPE_DECLARE(be_TFL_log, "s", "@");
+
+extern const char* be_TFL_stats(struct bvm *vm);
+BE_FUNC_CTYPE_DECLARE(be_TFL_stats, "s", "@");
+
+extern bbool be_TFL_begin(struct bvm *vm, const char* type, const uint8_t *descriptor, size_t size);
+BE_FUNC_CTYPE_DECLARE(be_TFL_begin, "b", "@s[(bytes)~]");
+
+extern bbool be_TFL_load(struct bvm *vm, const uint8_t *model_buf, size_t model_size, const uint8_t *output_buf, size_t output_size,int arena);
+BE_FUNC_CTYPE_DECLARE(be_TFL_load, "b", "@(bytes)~(bytes)~[i]");
+
+extern bbool be_TFL_input(struct bvm *vm, const uint8_t *buf, size_t size);
+BE_FUNC_CTYPE_DECLARE(be_TFL_input, "b", "@(bytes)~");
+
+extern bbool be_TFL_output(struct bvm *vm, const uint8_t *buf, size_t size);
+BE_FUNC_CTYPE_DECLARE(be_TFL_output, "b", "@(bytes)~");
+
+extern void be_TFL_rec(struct bvm *vm, const char* filename, size_t seconds);
+BE_FUNC_CTYPE_DECLARE(be_TFL_rec, "", "@si");
+
+#include "be_fixed_TFL.h"
+
+/* @const_object_info_begin
+module TFL (scope: global) {
+ begin, ctype_func(be_TFL_begin)
+ load, ctype_func(be_TFL_load)
+ input, ctype_func(be_TFL_input)
+ output, ctype_func(be_TFL_output)
+ log, ctype_func(be_TFL_log)
+ stats, ctype_func(be_TFL_stats)
+ rec, ctype_func(be_TFL_rec)
+}
+@const_object_info_end */
+
+#endif // USE_BERRY_TF_LITE
diff --git a/lib/libesp32/berry_tasmota/src/be_crypto_lib.c b/lib/libesp32/berry_tasmota/src/be_crypto_lib.c
index 90c2ae7c6..621d17113 100644
--- a/lib/libesp32/berry_tasmota/src/be_crypto_lib.c
+++ b/lib/libesp32/berry_tasmota/src/be_crypto_lib.c
@@ -67,18 +67,6 @@ extern const bclass be_class_md5;
#include "be_fixed_be_class_hkdf_sha256.h"
#include "be_fixed_crypto.h"
-// Enable all the crypto required by Matter
-#ifdef USE_BERRY_CRYPTO_SPAKE2P_MATTER
- #undef USE_BERRY_CRYPTO_EC_P256
- #define USE_BERRY_CRYPTO_EC_P256
- #undef USE_BERRY_CRYPTO_HMAC_SHA256
- #define USE_BERRY_CRYPTO_HMAC_SHA256
- #undef USE_BERRY_CRYPTO_HKDF_SHA256
- #define USE_BERRY_CRYPTO_HKDF_SHA256
- #undef USE_BERRY_CRYPTO_AES_CCM
- #define USE_BERRY_CRYPTO_AES_CCM
-#endif
-
const be_const_member_t be_crypto_members[] = {
// name with prefix '/' indicates a Berry class
// entries need to be sorted (ignoring the prefix char)
diff --git a/lib/libesp32/berry_tasmota/src/be_lv_haspmota.c b/lib/libesp32/berry_tasmota/src/be_lv_haspmota.c
index 36c7aa7a8..e2063c5d0 100644
--- a/lib/libesp32/berry_tasmota/src/be_lv_haspmota.c
+++ b/lib/libesp32/berry_tasmota/src/be_lv_haspmota.c
@@ -41,6 +41,7 @@ extern const bclass be_class_lv_theme;
extern const bclass be_class_lv_timer;
extern const bclass be_class_lv_qrcode;
+extern const bclass be_class_lvh_page;
/********************************************************************
** Solidified function: get_obj
@@ -464,6 +465,8 @@ void be_load_lvh_page_class(bvm *vm) {
be_pop(vm, 1);
}
+extern const bclass be_class_lvh_obj;
+
/********************************************************************
** Solidified function: set_radius2
********************************************************************/
@@ -775,9 +778,9 @@ be_local_closure(lvh_obj_set_value_ofs_y, /* name */
********************************************************************/
be_local_closure(lvh_obj_parse_color, /* name */
be_nested_proto(
- 9, /* nstack */
+ 10, /* nstack */
1, /* argc */
- 0, /* varg */
+ 4, /* varg */
0, /* has upvals */
NULL, /* no upvals */
1, /* has sup protos */
@@ -870,59 +873,61 @@ be_local_closure(lvh_obj_parse_color, /* name */
),
}),
1, /* has constants */
- ( &(const bvalue[ 9]) { /* constants */
- /* K0 */ be_const_int(0),
- /* K1 */ be_nested_str_weak(_X23),
- /* K2 */ be_nested_str_weak(lv),
- /* K3 */ be_nested_str_weak(color),
- /* K4 */ be_nested_str_weak(string),
- /* K5 */ be_nested_str_weak(introspect),
- /* K6 */ be_nested_str_weak(COLOR_),
- /* K7 */ be_nested_str_weak(toupper),
- /* K8 */ be_nested_str_weak(get),
+ ( &(const bvalue[10]) { /* constants */
+ /* K0 */ be_const_class(be_class_lvh_obj),
+ /* K1 */ be_const_int(0),
+ /* K2 */ be_nested_str_weak(_X23),
+ /* K3 */ be_nested_str_weak(lv),
+ /* K4 */ be_nested_str_weak(color),
+ /* K5 */ be_nested_str_weak(string),
+ /* K6 */ be_nested_str_weak(introspect),
+ /* K7 */ be_nested_str_weak(COLOR_),
+ /* K8 */ be_nested_str_weak(toupper),
+ /* K9 */ be_nested_str_weak(get),
}),
be_str_weak(parse_color),
&be_const_str_solidified,
- ( &(const binstruction[39]) { /* code */
- 0x84040000, // 0000 CLOSURE R1 P0
- 0x60080008, // 0001 GETGBL R2 G8
- 0x5C0C0000, // 0002 MOVE R3 R0
- 0x7C080200, // 0003 CALL R2 1
- 0x5C000400, // 0004 MOVE R0 R2
- 0x94080100, // 0005 GETIDX R2 R0 K0
- 0x1C080501, // 0006 EQ R2 R2 K1
- 0x780A0007, // 0007 JMPF R2 #0010
- 0xB80A0400, // 0008 GETNGBL R2 K2
- 0x8C080503, // 0009 GETMET R2 R2 K3
- 0x5C100200, // 000A MOVE R4 R1
- 0x5C140000, // 000B MOVE R5 R0
- 0x7C100200, // 000C CALL R4 1
- 0x7C080400, // 000D CALL R2 2
- 0x80040400, // 000E RET 1 R2
- 0x70020011, // 000F JMP #0022
- 0xA40A0800, // 0010 IMPORT R2 K4
+ ( &(const binstruction[40]) { /* code */
+ 0x58040000, // 0000 LDCONST R1 K0
+ 0x84080000, // 0001 CLOSURE R2 P0
+ 0x600C0008, // 0002 GETGBL R3 G8
+ 0x5C100000, // 0003 MOVE R4 R0
+ 0x7C0C0200, // 0004 CALL R3 1
+ 0x5C000600, // 0005 MOVE R0 R3
+ 0x940C0101, // 0006 GETIDX R3 R0 K1
+ 0x1C0C0702, // 0007 EQ R3 R3 K2
+ 0x780E0007, // 0008 JMPF R3 #0011
+ 0xB80E0600, // 0009 GETNGBL R3 K3
+ 0x8C0C0704, // 000A GETMET R3 R3 K4
+ 0x5C140400, // 000B MOVE R5 R2
+ 0x5C180000, // 000C MOVE R6 R0
+ 0x7C140200, // 000D CALL R5 1
+ 0x7C0C0400, // 000E CALL R3 2
+ 0x80040600, // 000F RET 1 R3
+ 0x70020011, // 0010 JMP #0023
0xA40E0A00, // 0011 IMPORT R3 K5
- 0x8C100507, // 0012 GETMET R4 R2 K7
- 0x5C180000, // 0013 MOVE R6 R0
- 0x7C100400, // 0014 CALL R4 2
- 0x00120C04, // 0015 ADD R4 K6 R4
- 0x8C140708, // 0016 GETMET R5 R3 K8
- 0xB81E0400, // 0017 GETNGBL R7 K2
- 0x5C200800, // 0018 MOVE R8 R4
- 0x7C140600, // 0019 CALL R5 3
- 0x4C180000, // 001A LDNIL R6
- 0x20180A06, // 001B NE R6 R5 R6
- 0x781A0004, // 001C JMPF R6 #0022
- 0xB81A0400, // 001D GETNGBL R6 K2
- 0x8C180D03, // 001E GETMET R6 R6 K3
- 0x5C200A00, // 001F MOVE R8 R5
- 0x7C180400, // 0020 CALL R6 2
- 0x80040C00, // 0021 RET 1 R6
- 0xB80A0400, // 0022 GETNGBL R2 K2
- 0x8C080503, // 0023 GETMET R2 R2 K3
- 0x58100000, // 0024 LDCONST R4 K0
- 0x7C080400, // 0025 CALL R2 2
- 0x80040400, // 0026 RET 1 R2
+ 0xA4120C00, // 0012 IMPORT R4 K6
+ 0x8C140708, // 0013 GETMET R5 R3 K8
+ 0x5C1C0000, // 0014 MOVE R7 R0
+ 0x7C140400, // 0015 CALL R5 2
+ 0x00160E05, // 0016 ADD R5 K7 R5
+ 0x8C180909, // 0017 GETMET R6 R4 K9
+ 0xB8220600, // 0018 GETNGBL R8 K3
+ 0x5C240A00, // 0019 MOVE R9 R5
+ 0x7C180600, // 001A CALL R6 3
+ 0x4C1C0000, // 001B LDNIL R7
+ 0x201C0C07, // 001C NE R7 R6 R7
+ 0x781E0004, // 001D JMPF R7 #0023
+ 0xB81E0600, // 001E GETNGBL R7 K3
+ 0x8C1C0F04, // 001F GETMET R7 R7 K4
+ 0x5C240C00, // 0020 MOVE R9 R6
+ 0x7C1C0400, // 0021 CALL R7 2
+ 0x80040E00, // 0022 RET 1 R7
+ 0xB80E0600, // 0023 GETNGBL R3 K3
+ 0x8C0C0704, // 0024 GETMET R3 R3 K4
+ 0x58140001, // 0025 LDCONST R5 K1
+ 0x7C0C0400, // 0026 CALL R3 2
+ 0x80040600, // 0027 RET 1 R3
})
)
);
@@ -1394,45 +1399,47 @@ be_local_closure(lvh_obj_val_rule_matched, /* name */
********************************************************************/
be_local_closure(lvh_obj_remove_trailing_zeroes, /* name */
be_nested_proto(
- 7, /* nstack */
+ 8, /* nstack */
1, /* argc */
- 0, /* varg */
+ 4, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_const_int(0),
- /* K1 */ be_const_int(1),
- /* K2 */ be_nested_str_weak(resize),
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_const_class(be_class_lvh_obj),
+ /* K1 */ be_const_int(0),
+ /* K2 */ be_const_int(1),
+ /* K3 */ be_nested_str_weak(resize),
}),
be_str_weak(remove_trailing_zeroes),
&be_const_str_solidified,
- ( &(const binstruction[23]) { /* code */
- 0x6004000C, // 0000 GETGBL R1 G12
- 0x5C080000, // 0001 MOVE R2 R0
- 0x7C040200, // 0002 CALL R1 1
- 0x58080000, // 0003 LDCONST R2 K0
- 0x140C0401, // 0004 LT R3 R2 R1
- 0x780E0007, // 0005 JMPF R3 #000E
- 0x540DFFFE, // 0006 LDINT R3 -1
- 0x040C0602, // 0007 SUB R3 R3 R2
- 0x940C0003, // 0008 GETIDX R3 R0 R3
- 0x200C0700, // 0009 NE R3 R3 K0
- 0x780E0000, // 000A JMPF R3 #000C
- 0x70020001, // 000B JMP #000E
- 0x00080501, // 000C ADD R2 R2 K1
- 0x7001FFF5, // 000D JMP #0004
- 0x240C0500, // 000E GT R3 R2 K0
- 0x780E0005, // 000F JMPF R3 #0016
- 0x8C0C0102, // 0010 GETMET R3 R0 K2
- 0x6014000C, // 0011 GETGBL R5 G12
- 0x5C180000, // 0012 MOVE R6 R0
- 0x7C140200, // 0013 CALL R5 1
- 0x04140A02, // 0014 SUB R5 R5 R2
- 0x7C0C0400, // 0015 CALL R3 2
- 0x80040000, // 0016 RET 1 R0
+ ( &(const binstruction[24]) { /* code */
+ 0x58040000, // 0000 LDCONST R1 K0
+ 0x6008000C, // 0001 GETGBL R2 G12
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C080200, // 0003 CALL R2 1
+ 0x580C0001, // 0004 LDCONST R3 K1
+ 0x14100602, // 0005 LT R4 R3 R2
+ 0x78120007, // 0006 JMPF R4 #000F
+ 0x5411FFFE, // 0007 LDINT R4 -1
+ 0x04100803, // 0008 SUB R4 R4 R3
+ 0x94100004, // 0009 GETIDX R4 R0 R4
+ 0x20100901, // 000A NE R4 R4 K1
+ 0x78120000, // 000B JMPF R4 #000D
+ 0x70020001, // 000C JMP #000F
+ 0x000C0702, // 000D ADD R3 R3 K2
+ 0x7001FFF5, // 000E JMP #0005
+ 0x24100701, // 000F GT R4 R3 K1
+ 0x78120005, // 0010 JMPF R4 #0017
+ 0x8C100103, // 0011 GETMET R4 R0 K3
+ 0x6018000C, // 0012 GETGBL R6 G12
+ 0x5C1C0000, // 0013 MOVE R7 R0
+ 0x7C180200, // 0014 CALL R6 1
+ 0x04180C03, // 0015 SUB R6 R6 R3
+ 0x7C100400, // 0016 CALL R4 2
+ 0x80040000, // 0017 RET 1 R0
})
)
);
@@ -2414,32 +2421,34 @@ be_local_closure(lvh_obj_get_obj, /* name */
********************************************************************/
be_local_closure(lvh_obj_is_color_attribute, /* name */
be_nested_proto(
- 8, /* nstack */
+ 9, /* nstack */
1, /* argc */
- 0, /* varg */
+ 4, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_nested_str_weak(re),
- /* K1 */ be_nested_str_weak(search),
- /* K2 */ be_nested_str_weak(color_X24),
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_const_class(be_class_lvh_obj),
+ /* K1 */ be_nested_str_weak(re),
+ /* K2 */ be_nested_str_weak(search),
+ /* K3 */ be_nested_str_weak(color_X24),
}),
be_str_weak(is_color_attribute),
&be_const_str_solidified,
- ( &(const binstruction[10]) { /* code */
- 0xA4060000, // 0000 IMPORT R1 K0
- 0x60080017, // 0001 GETGBL R2 G23
- 0x8C0C0301, // 0002 GETMET R3 R1 K1
- 0x58140002, // 0003 LDCONST R5 K2
- 0x60180008, // 0004 GETGBL R6 G8
- 0x5C1C0000, // 0005 MOVE R7 R0
- 0x7C180200, // 0006 CALL R6 1
- 0x7C0C0600, // 0007 CALL R3 3
- 0x7C080200, // 0008 CALL R2 1
- 0x80040400, // 0009 RET 1 R2
+ ( &(const binstruction[11]) { /* code */
+ 0x58040000, // 0000 LDCONST R1 K0
+ 0xA40A0200, // 0001 IMPORT R2 K1
+ 0x600C0017, // 0002 GETGBL R3 G23
+ 0x8C100502, // 0003 GETMET R4 R2 K2
+ 0x58180003, // 0004 LDCONST R6 K3
+ 0x601C0008, // 0005 GETGBL R7 G8
+ 0x5C200000, // 0006 MOVE R8 R0
+ 0x7C1C0200, // 0007 CALL R7 1
+ 0x7C100600, // 0008 CALL R4 3
+ 0x7C0C0200, // 0009 CALL R3 1
+ 0x80040600, // 000A RET 1 R3
})
)
);
@@ -4030,6 +4039,8 @@ void be_load_lvh_obj_class(bvm *vm) {
be_pop(vm, 1);
}
+extern const bclass be_class_lvh_scr;
+
/********************************************************************
** Solidified class: lvh_scr
********************************************************************/
@@ -4051,6 +4062,8 @@ void be_load_lvh_scr_class(bvm *vm) {
be_pop(vm, 1);
}
+extern const bclass be_class_lvh_btn;
+
/********************************************************************
** Solidified class: lvh_btn
********************************************************************/
@@ -4072,12 +4085,14 @@ void be_load_lvh_btn_class(bvm *vm) {
be_pop(vm, 1);
}
+extern const bclass be_class_lvh_switch;
+
/********************************************************************
-** Solidified function: set_val
+** Solidified function: set_radius20
********************************************************************/
-be_local_closure(lvh_switch_set_val, /* name */
+be_local_closure(lvh_switch_set_radius20, /* name */
be_nested_proto(
- 5, /* nstack */
+ 7, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
@@ -4085,16 +4100,28 @@ be_local_closure(lvh_switch_set_val, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 1]) { /* constants */
- /* K0 */ be_nested_str_weak(set_toggle),
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str_weak(_lv_obj),
+ /* K1 */ be_nested_str_weak(set_style_radius),
+ /* K2 */ be_nested_str_weak(lv),
+ /* K3 */ be_nested_str_weak(PART_KNOB),
+ /* K4 */ be_nested_str_weak(STATE_DEFAULT),
}),
- be_str_weak(set_val),
+ be_str_weak(set_radius20),
&be_const_str_solidified,
- ( &(const binstruction[ 4]) { /* code */
- 0x8C080100, // 0000 GETMET R2 R0 K0
- 0x5C100200, // 0001 MOVE R4 R1
- 0x7C080400, // 0002 CALL R2 2
- 0x80040400, // 0003 RET 1 R2
+ ( &(const binstruction[12]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x60100009, // 0002 GETGBL R4 G9
+ 0x5C140200, // 0003 MOVE R5 R1
+ 0x7C100200, // 0004 CALL R4 1
+ 0xB8160400, // 0005 GETNGBL R5 K2
+ 0x88140B03, // 0006 GETMBR R5 R5 K3
+ 0xB81A0400, // 0007 GETNGBL R6 K2
+ 0x88180D04, // 0008 GETMBR R6 R6 K4
+ 0x30140A06, // 0009 OR R5 R5 R6
+ 0x7C080600, // 000A CALL R2 3
+ 0x80000000, // 000B RET 0
})
)
);
@@ -4129,6 +4156,221 @@ be_local_closure(lvh_switch_get_val, /* name */
/*******************************************************************/
+/********************************************************************
+** Solidified function: get_bg_color10
+********************************************************************/
+be_local_closure(lvh_switch_get_bg_color10, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(_lv_obj),
+ /* K1 */ be_nested_str_weak(get_style_bg_color),
+ /* K2 */ be_nested_str_weak(lv),
+ /* K3 */ be_nested_str_weak(PART_INDICATOR),
+ }),
+ be_str_weak(get_bg_color10),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0xB80E0400, // 0002 GETNGBL R3 K2
+ 0x880C0703, // 0003 GETMBR R3 R3 K3
+ 0x7C040400, // 0004 CALL R1 2
+ 0x80040200, // 0005 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_bg_color20
+********************************************************************/
+be_local_closure(lvh_switch_set_bg_color20, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(_lv_obj),
+ /* K1 */ be_nested_str_weak(set_style_bg_color),
+ /* K2 */ be_nested_str_weak(parse_color),
+ /* K3 */ be_nested_str_weak(lv),
+ /* K4 */ be_nested_str_weak(PART_KNOB),
+ /* K5 */ be_nested_str_weak(STATE_DEFAULT),
+ }),
+ be_str_weak(set_bg_color20),
+ &be_const_str_solidified,
+ ( &(const binstruction[12]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x8C100102, // 0002 GETMET R4 R0 K2
+ 0x5C180200, // 0003 MOVE R6 R1
+ 0x7C100400, // 0004 CALL R4 2
+ 0xB8160600, // 0005 GETNGBL R5 K3
+ 0x88140B04, // 0006 GETMBR R5 R5 K4
+ 0xB81A0600, // 0007 GETNGBL R6 K3
+ 0x88180D05, // 0008 GETMBR R6 R6 K5
+ 0x30140A06, // 0009 OR R5 R5 R6
+ 0x7C080600, // 000A CALL R2 3
+ 0x80000000, // 000B RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_bg_color10
+********************************************************************/
+be_local_closure(lvh_switch_set_bg_color10, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 6]) { /* constants */
+ /* K0 */ be_nested_str_weak(_lv_obj),
+ /* K1 */ be_nested_str_weak(set_style_bg_color),
+ /* K2 */ be_nested_str_weak(parse_color),
+ /* K3 */ be_nested_str_weak(lv),
+ /* K4 */ be_nested_str_weak(PART_INDICATOR),
+ /* K5 */ be_nested_str_weak(STATE_CHECKED),
+ }),
+ be_str_weak(set_bg_color10),
+ &be_const_str_solidified,
+ ( &(const binstruction[12]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x8C100102, // 0002 GETMET R4 R0 K2
+ 0x5C180200, // 0003 MOVE R6 R1
+ 0x7C100400, // 0004 CALL R4 2
+ 0xB8160600, // 0005 GETNGBL R5 K3
+ 0x88140B04, // 0006 GETMBR R5 R5 K4
+ 0xB81A0600, // 0007 GETNGBL R6 K3
+ 0x88180D05, // 0008 GETMBR R6 R6 K5
+ 0x30140A06, // 0009 OR R5 R5 R6
+ 0x7C080600, // 000A CALL R2 3
+ 0x80000000, // 000B RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_val
+********************************************************************/
+be_local_closure(lvh_switch_set_val, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str_weak(set_toggle),
+ }),
+ be_str_weak(set_val),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x8C080100, // 0000 GETMET R2 R0 K0
+ 0x5C100200, // 0001 MOVE R4 R1
+ 0x7C080400, // 0002 CALL R2 2
+ 0x80040400, // 0003 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_radius20
+********************************************************************/
+be_local_closure(lvh_switch_get_radius20, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(_lv_obj),
+ /* K1 */ be_nested_str_weak(get_style_radius),
+ /* K2 */ be_nested_str_weak(lv),
+ /* K3 */ be_nested_str_weak(PART_KNOB),
+ }),
+ be_str_weak(get_radius20),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0xB80E0400, // 0002 GETNGBL R3 K2
+ 0x880C0703, // 0003 GETMBR R3 R3 K3
+ 0x7C040400, // 0004 CALL R1 2
+ 0x80040200, // 0005 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: get_bg_color20
+********************************************************************/
+be_local_closure(lvh_switch_get_bg_color20, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str_weak(_lv_obj),
+ /* K1 */ be_nested_str_weak(get_style_bg_color),
+ /* K2 */ be_nested_str_weak(lv),
+ /* K3 */ be_nested_str_weak(PART_KNOB),
+ }),
+ be_str_weak(get_bg_color20),
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0x88040100, // 0000 GETMBR R1 R0 K0
+ 0x8C040301, // 0001 GETMET R1 R1 K1
+ 0xB80E0400, // 0002 GETNGBL R3 K2
+ 0x880C0703, // 0003 GETMBR R3 R3 K3
+ 0x7C040400, // 0004 CALL R1 2
+ 0x80040200, // 0005 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
/********************************************************************
** Solidified class: lvh_switch
********************************************************************/
@@ -4136,12 +4378,18 @@ extern const bclass be_class_lvh_obj;
be_local_class(lvh_switch,
0,
&be_class_lvh_obj,
- be_nested_map(4,
+ be_nested_map(10,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key_weak(get_val, 1), be_const_closure(lvh_switch_get_val_closure) },
+ { be_const_key_weak(set_radius20, -1), be_const_closure(lvh_switch_set_radius20_closure) },
+ { be_const_key_weak(get_val, -1), be_const_closure(lvh_switch_get_val_closure) },
+ { be_const_key_weak(get_bg_color10, 9), be_const_closure(lvh_switch_get_bg_color10_closure) },
+ { be_const_key_weak(set_bg_color20, 8), be_const_closure(lvh_switch_set_bg_color20_closure) },
+ { be_const_key_weak(set_bg_color10, -1), be_const_closure(lvh_switch_set_bg_color10_closure) },
{ be_const_key_weak(set_val, -1), be_const_closure(lvh_switch_set_val_closure) },
+ { be_const_key_weak(get_radius20, -1), be_const_closure(lvh_switch_get_radius20_closure) },
+ { be_const_key_weak(_lv_class, -1), be_const_class(be_class_lv_switch) },
+ { be_const_key_weak(get_bg_color20, -1), be_const_closure(lvh_switch_get_bg_color20_closure) },
{ be_const_key_weak(_lv_part2_selector, -1), be_const_int(196608) },
- { be_const_key_weak(_lv_class, 0), be_const_class(be_class_lv_switch) },
})),
be_str_weak(lvh_switch)
);
@@ -4153,6 +4401,8 @@ void be_load_lvh_switch_class(bvm *vm) {
be_pop(vm, 1);
}
+extern const bclass be_class_lvh_checkbox;
+
/********************************************************************
** Solidified class: lvh_checkbox
********************************************************************/
@@ -4174,6 +4424,8 @@ void be_load_lvh_checkbox_class(bvm *vm) {
be_pop(vm, 1);
}
+extern const bclass be_class_lvh_label;
+
/********************************************************************
** Solidified function: post_init
********************************************************************/
@@ -4231,6 +4483,8 @@ void be_load_lvh_label_class(bvm *vm) {
be_pop(vm, 1);
}
+extern const bclass be_class_lvh_spinner;
+
/********************************************************************
** Solidified function: set_angle
********************************************************************/
@@ -4475,6 +4729,8 @@ void be_load_lvh_spinner_class(bvm *vm) {
be_pop(vm, 1);
}
+extern const bclass be_class_lvh_line;
+
/********************************************************************
** Solidified class: lvh_line
********************************************************************/
@@ -4496,6 +4752,8 @@ void be_load_lvh_line_class(bvm *vm) {
be_pop(vm, 1);
}
+extern const bclass be_class_lvh_img;
+
/********************************************************************
** Solidified function: set_angle
********************************************************************/
@@ -4584,6 +4842,8 @@ void be_load_lvh_img_class(bvm *vm) {
be_pop(vm, 1);
}
+extern const bclass be_class_lvh_roller;
+
/********************************************************************
** Solidified function: set_options
********************************************************************/
@@ -4815,6 +5075,8 @@ void be_load_lvh_roller_class(bvm *vm) {
be_pop(vm, 1);
}
+extern const bclass be_class_lvh_btnmatrix;
+
/********************************************************************
** Solidified class: lvh_btnmatrix
********************************************************************/
@@ -4836,6 +5098,8 @@ void be_load_lvh_btnmatrix_class(bvm *vm) {
be_pop(vm, 1);
}
+extern const bclass be_class_lvh_bar;
+
/********************************************************************
** Solidified class: lvh_bar
********************************************************************/
@@ -4857,6 +5121,8 @@ void be_load_lvh_bar_class(bvm *vm) {
be_pop(vm, 1);
}
+extern const bclass be_class_lvh_slider;
+
/********************************************************************
** Solidified function: set_val
********************************************************************/
@@ -4912,6 +5178,8 @@ void be_load_lvh_slider_class(bvm *vm) {
be_pop(vm, 1);
}
+extern const bclass be_class_lvh_arc;
+
/********************************************************************
** Solidified function: set_line_width1
********************************************************************/
@@ -5308,6 +5576,8 @@ void be_load_lvh_arc_class(bvm *vm) {
be_pop(vm, 1);
}
+extern const bclass be_class_lvh_textarea;
+
/********************************************************************
** Solidified class: lvh_textarea
********************************************************************/
@@ -5329,6 +5599,8 @@ void be_load_lvh_textarea_class(bvm *vm) {
be_pop(vm, 1);
}
+extern const bclass be_class_lvh_dropdown;
+
/********************************************************************
** Solidified function: get_val
********************************************************************/
@@ -5732,6 +6004,8 @@ void be_load_lvh_dropdown_class(bvm *vm) {
be_pop(vm, 1);
}
+extern const bclass be_class_lvh_qrcode;
+
/********************************************************************
** Solidified function: get_qr_size
********************************************************************/
@@ -6032,6 +6306,8 @@ void be_load_lvh_qrcode_class(bvm *vm) {
be_pop(vm, 1);
}
+extern const bclass be_class_HASPmota;
+
/********************************************************************
** Solidified function: do_action
********************************************************************/
@@ -6880,51 +7156,53 @@ be_local_closure(HASPmota_parse, /* name */
********************************************************************/
be_local_closure(HASPmota_sort, /* name */
be_nested_proto(
- 6, /* nstack */
+ 7, /* nstack */
1, /* argc */
- 0, /* varg */
+ 4, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 3]) { /* constants */
- /* K0 */ be_const_int(1),
- /* K1 */ be_const_int(0),
- /* K2 */ be_nested_str_weak(stop_iteration),
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_const_class(be_class_HASPmota),
+ /* K1 */ be_const_int(1),
+ /* K2 */ be_const_int(0),
+ /* K3 */ be_nested_str_weak(stop_iteration),
}),
be_str_weak(sort),
&be_const_str_solidified,
- ( &(const binstruction[29]) { /* code */
- 0x60040010, // 0000 GETGBL R1 G16
- 0x6008000C, // 0001 GETGBL R2 G12
- 0x5C0C0000, // 0002 MOVE R3 R0
- 0x7C080200, // 0003 CALL R2 1
- 0x04080500, // 0004 SUB R2 R2 K0
- 0x400A0002, // 0005 CONNECT R2 K0 R2
- 0x7C040200, // 0006 CALL R1 1
- 0xA8020010, // 0007 EXBLK 0 #0019
- 0x5C080200, // 0008 MOVE R2 R1
- 0x7C080000, // 0009 CALL R2 0
- 0x940C0002, // 000A GETIDX R3 R0 R2
- 0x5C100400, // 000B MOVE R4 R2
- 0x24140901, // 000C GT R5 R4 K1
- 0x78160008, // 000D JMPF R5 #0017
- 0x04140900, // 000E SUB R5 R4 K0
- 0x94140005, // 000F GETIDX R5 R0 R5
- 0x24140A03, // 0010 GT R5 R5 R3
- 0x78160004, // 0011 JMPF R5 #0017
- 0x04140900, // 0012 SUB R5 R4 K0
- 0x94140005, // 0013 GETIDX R5 R0 R5
- 0x98000805, // 0014 SETIDX R0 R4 R5
- 0x04100900, // 0015 SUB R4 R4 K0
- 0x7001FFF4, // 0016 JMP #000C
- 0x98000803, // 0017 SETIDX R0 R4 R3
- 0x7001FFEE, // 0018 JMP #0008
- 0x58040002, // 0019 LDCONST R1 K2
- 0xAC040200, // 001A CATCH R1 1 0
- 0xB0080000, // 001B RAISE 2 R0 R0
- 0x80040000, // 001C RET 1 R0
+ ( &(const binstruction[30]) { /* code */
+ 0x58040000, // 0000 LDCONST R1 K0
+ 0x60080010, // 0001 GETGBL R2 G16
+ 0x600C000C, // 0002 GETGBL R3 G12
+ 0x5C100000, // 0003 MOVE R4 R0
+ 0x7C0C0200, // 0004 CALL R3 1
+ 0x040C0701, // 0005 SUB R3 R3 K1
+ 0x400E0203, // 0006 CONNECT R3 K1 R3
+ 0x7C080200, // 0007 CALL R2 1
+ 0xA8020010, // 0008 EXBLK 0 #001A
+ 0x5C0C0400, // 0009 MOVE R3 R2
+ 0x7C0C0000, // 000A CALL R3 0
+ 0x94100003, // 000B GETIDX R4 R0 R3
+ 0x5C140600, // 000C MOVE R5 R3
+ 0x24180B02, // 000D GT R6 R5 K2
+ 0x781A0008, // 000E JMPF R6 #0018
+ 0x04180B01, // 000F SUB R6 R5 K1
+ 0x94180006, // 0010 GETIDX R6 R0 R6
+ 0x24180C04, // 0011 GT R6 R6 R4
+ 0x781A0004, // 0012 JMPF R6 #0018
+ 0x04180B01, // 0013 SUB R6 R5 K1
+ 0x94180006, // 0014 GETIDX R6 R0 R6
+ 0x98000A06, // 0015 SETIDX R0 R5 R6
+ 0x04140B01, // 0016 SUB R5 R5 K1
+ 0x7001FFF4, // 0017 JMP #000D
+ 0x98000A04, // 0018 SETIDX R0 R5 R4
+ 0x7001FFEE, // 0019 JMP #0009
+ 0x58080003, // 001A LDCONST R2 K3
+ 0xAC080200, // 001B CATCH R2 1 0
+ 0xB0080000, // 001C RAISE 2 R0 R0
+ 0x80040000, // 001D RET 1 R0
})
)
);
diff --git a/lib/libesp32/berry_tasmota/src/be_mdns_module.cpp b/lib/libesp32/berry_tasmota/src/be_mdns_module.cpp
index dad697ba0..aa7629519 100644
--- a/lib/libesp32/berry_tasmota/src/be_mdns_module.cpp
+++ b/lib/libesp32/berry_tasmota/src/be_mdns_module.cpp
@@ -129,6 +129,44 @@ static int32_t m_mdns_add_service(struct bvm *vm) {
be_raise(vm, "value_error", "wrong or missing arguments");
}
+
+//
+// `mdns.remove_service(service:string, proto:string [, instance:string, hostname:string]) -> nil`
+//
+// remove service from mDNS server with hostname.
+//
+// Test:
+// import mdns mdns.remove_service("_arduino","_tcp")
+//
+// import mdns mdns.remove_service("_matterc","_udp")
+static int32_t m_mdns_remove_service(struct bvm *vm) {
+ int32_t top = be_top(vm);
+ if (top >= 2 && be_isstring(vm, 1) && be_isstring(vm, 2)) {
+ const char* service_type = be_tostring(vm, 1);
+ const char* proto = be_tostring(vm, 2);
+ const char * instance = nullptr;
+ const char * hostname = nullptr;
+ if (top >= 3 && be_isstring(vm, 3)) {
+ instance = be_tostring(vm, 3);
+ }
+ if (top >= 4 && be_isstring(vm, 4)) {
+ hostname = be_tostring(vm, 4);
+ }
+
+ esp_err_t err;
+ if (hostname == nullptr) {
+ err = mdns_service_remove(service_type, proto);
+ } else {
+ err = mdns_service_remove_for_host(instance, service_type, proto, hostname);
+ }
+ if (err != ESP_OK) {
+ be_raisef(vm, "internal_error", "mdns service_remove err=%i", err);
+ }
+ be_return_nil(vm);
+ }
+ be_raise(vm, "value_error", "wrong or missing arguments");
+}
+
// `mdns_service_subtype_add_for_host()` is only available in most recent esp-protocols version
//
// This alias makes sure that the compilation succeeds even if the function is not available
@@ -309,6 +347,7 @@ module mdns (scope: global) {
add_service, func(m_mdns_add_service)
add_hostname, func(m_dns_add_hostname)
add_subtype, func(m_dns_add_subtype)
+ remove_service, func(m_mdns_remove_service)
// querying
find_service, func(m_dns_find_service)
diff --git a/lib/libesp32/berry_tasmota/src/be_tasmota_lib.c b/lib/libesp32/berry_tasmota/src/be_tasmota_lib.c
index 0f27586ab..8b64ce03b 100644
--- a/lib/libesp32/berry_tasmota/src/be_tasmota_lib.c
+++ b/lib/libesp32/berry_tasmota/src/be_tasmota_lib.c
@@ -58,27 +58,29 @@ extern int l_getswitch(bvm *vm);
extern int l_i2cenabled(bvm *vm);
extern int tasm_find_op(bvm *vm);
+extern int tasm_apply_str_op(bvm *vm);
#include "solidify/solidified_tasmota_class.h"
+#include "solidify/solidified_rule_matcher.h"
+#include "solidify/solidified_trigger_class.h"
#include "be_fixed_be_class_tasmota.h"
-
/* @const_object_info_begin
class be_class_tasmota (scope: global, name: Tasmota) {
- _fl, var
- _rules, var
- _timers, var
- _crons, var
- _ccmd, var
- _drivers, var
- wire1, var
- wire2, var
- cmd_res, var
- global, var
- settings, var
- wd, var
- _debug_present, var
+ _fl, var // list of active fast-loop object (faster than drivers)
+ _rules, var // list of active rules
+ _timers, var // list of active timers
+ _crons, var // list of active crons
+ _ccmd, var // list of active Tasmota commands implemented in Berry
+ _drivers, var // list of active drivers
+ wire1, var // Tasmota I2C Wire1
+ wire2, var // Tasmota I2C Wire2
+ cmd_res, var // store the command result, nil if disables, true if capture enabled, contains return value
+ global, var // mapping to TasmotaGlobal
+ settings, var // mapping to Tasmota Settings
+ wd, var // working dir
+ _debug_present, var // is `import debug` present?
_global_def, comptr(&be_tasmota_global_struct)
_settings_def, comptr(&be_tasmota_settings_struct)
@@ -137,6 +139,7 @@ class be_class_tasmota (scope: global, name: Tasmota) {
remove_fast_loop, closure(Tasmota_remove_fast_loop_closure)
cmd, closure(Tasmota_cmd_closure)
_find_op, func(tasm_find_op) // new C version for finding a rule operator
+ _apply_str_op, func(tasm_apply_str_op)
find_key_i, closure(Tasmota_find_key_i_closure)
find_op, closure(Tasmota_find_op_closure)
add_rule, closure(Tasmota_add_rule_closure)
@@ -173,5 +176,7 @@ class be_class_tasmota (scope: global, name: Tasmota) {
get_light, closure(Tasmota_get_light_closure)
set_light, closure(Tasmota_set_light_closure)
+
+ Rule_Matcher, class(be_class_Rule_Matcher)
}
@const_object_info_end */
diff --git a/lib/libesp32/berry_tasmota/src/be_webclient_lib.c b/lib/libesp32/berry_tasmota/src/be_webclient_lib.c
index ace4499a2..a5c888d01 100644
--- a/lib/libesp32/berry_tasmota/src/be_webclient_lib.c
+++ b/lib/libesp32/berry_tasmota/src/be_webclient_lib.c
@@ -14,7 +14,10 @@ extern int wc_urlencode(bvm *vm);
extern int wc_begin(bvm *vm);
extern int wc_set_timeouts(bvm *vm);
extern int wc_set_useragent(bvm *vm);
+extern int wc_set_follow_redirects(bvm *vm);
extern int wc_set_auth(bvm *vm);
+extern int wc_collect_headers(bvm *vm);
+extern int wc_get_header(bvm *vm);
extern int wc_connected(bvm *vm);
extern int wc_close(bvm *vm);
extern int wc_addheader(bvm *vm);
@@ -47,7 +50,13 @@ class be_class_webclient (scope: global, name: webclient) {
begin, func(wc_begin)
set_timeouts, func(wc_set_timeouts)
set_useragent, func(wc_set_useragent)
+ set_follow_redirects, func(wc_set_follow_redirects)
set_auth, func(wc_set_auth)
+
+ // collect response headers
+ collect_headers, func(wc_collect_headers)
+ get_header, func(wc_get_header)
+
close, func(wc_close)
add_header, func(wc_addheader)
GET, func(wc_GET)
diff --git a/lib/libesp32/berry_tasmota/src/be_webserver_lib.c b/lib/libesp32/berry_tasmota/src/be_webserver_lib.c
index ad7bcadd7..0cdf4ede0 100644
--- a/lib/libesp32/berry_tasmota/src/be_webserver_lib.c
+++ b/lib/libesp32/berry_tasmota/src/be_webserver_lib.c
@@ -24,6 +24,8 @@ extern int w_webserver_content_flush(bvm *vm);
extern int w_webserver_content_stop(bvm *vm);
extern int w_webserver_content_button(bvm *vm);
+extern int w_webserver_html_escape(bvm *vm);
+
extern int w_webserver_argsize(bvm *vm);
extern int w_webserver_arg(bvm *vm);
extern int w_webserver_arg_name(bvm *vm);
@@ -48,6 +50,8 @@ module webserver (scope: global) {
content_stop, func(w_webserver_content_stop)
content_button, func(w_webserver_content_button)
+ html_escape, func(w_webserver_html_escape)
+
arg_size, func(w_webserver_argsize)
arg, func(w_webserver_arg)
arg_name, func(w_webserver_arg_name)
diff --git a/lib/libesp32/berry_tasmota/src/embedded/rule_matcher.be b/lib/libesp32/berry_tasmota/src/embedded/rule_matcher.be
new file mode 100644
index 000000000..a3005e6b1
--- /dev/null
+++ b/lib/libesp32/berry_tasmota/src/embedded/rule_matcher.be
@@ -0,0 +1,368 @@
+#- Native code used for testing and code solidification -#
+#- Do not use it directly -#
+
+#@ solidify:Rule_Matcher_Key
+#@ solidify:Rule_Matcher_Wildcard
+#@ solidify:Rule_Matcher_Operator
+#@ solidify:Rule_Matcher_Array
+#@ solidify:Rule_Matcher
+
+
+#-
+# tests
+
+tasmota.Rule_Matcher.parse("AA#BB#CC")
+# [, , ]
+
+tasmota.Rule_Matcher.parse("AA")
+# []
+
+tasmota.Rule_Matcher.parse("AA#BB#CC=2")
+# [, , , ]
+
+tasmota.Rule_Matcher.parse("AA#BB#CC>=3.5")
+# [, , , =' val='3.5'>]
+
+tasmota.Rule_Matcher.parse("AA#BB#CC!3.5")
+# [, , ]
+
+tasmota.Rule_Matcher.parse("AA#BB#CC==3=5")
+# [, , , ]
+
+tasmota.Rule_Matcher.parse("AA#BB#!CC!==3=5")
+# [, , , ]
+
+tasmota.Rule_Matcher.parse("")
+# []
+
+tasmota.Rule_Matcher.parse("A#?#B")
+# [, , ]
+
+tasmota.Rule_Matcher.parse("A#?>50")
+# [, , ' val='50'>]
+
+tasmota.Rule_Matcher.parse("A[1]")
+# [, ]
+
+tasmota.Rule_Matcher.parse("A[1]#B[2]>3")
+# [, , , , ' val='3'>]
+
+tasmota.Rule_Matcher.parse("A#B[]>3")
+# [, , , ' val='3'>]
+
+#################################################################################
+
+m = tasmota.Rule_Matcher.parse("AA")
+assert(m.match({'aa':1}) == 1)
+assert(m.match({'AA':'1'}) == '1')
+assert(m.match({'ab':1}) == nil)
+
+m = tasmota.Rule_Matcher.parse("AA#BB")
+assert(m.match({'aa':1}) == nil)
+assert(m.match({'aa':{'bb':1}}) == 1)
+
+m = tasmota.Rule_Matcher.parse("AA#BB#CC==2")
+assert(m.match({'aa':1}) == nil)
+assert(m.match({'aa':{'bb':1}}) == nil)
+assert(m.match({'aa':{'bb':{'cc':1}}}) == nil)
+assert(m.match({'aa':{'bb':{'cc':2}}}) == 2)
+
+m = tasmota.Rule_Matcher.parse("AA#?#CC==2")
+assert(m.match({'aa':1}) == nil)
+assert(m.match({'aa':{'bb':{'cc':2}}}) == 2)
+
+m = tasmota.Rule_Matcher.parse("AA#Power[1]")
+assert(m.match({'aa':{'power':[0.5,1.5,2.5]}}) == 0.5)
+m = tasmota.Rule_Matcher.parse("AA#Power[2]")
+assert(m.match({'aa':{'power':[0.5,1.5,2.5]}}) == 1.5)
+m = tasmota.Rule_Matcher.parse("AA#Power[3]")
+assert(m.match({'aa':{'power':[0.5,1.5,2.5]}}) == 2.5)
+m = tasmota.Rule_Matcher.parse("AA#Power[4]")
+assert(m.match({'aa':{'power':[0.5,1.5,2.5]}}) == nil)
+
+m = tasmota.Rule_Matcher.parse("AA#Power[1]>1")
+assert(m.match({'aa':{'power':[0.5,1.5,2.5]}}) == nil)
+assert(m.match({'aa':{'power':[1.2,1.5,2.5]}}) == 1.2)
+
+-#
+
+class Rule_Matcher
+
+ # We don't actually need a superclass, just implementing `match(val)`
+ #
+ # static class Rule_Matcher
+ # def init()
+ # end
+
+ # # return the next index in tha val string
+ # # or `nil` if no match
+ # def match(val)
+ # return nil
+ # end
+ # end
+
+ # Each matcher is an instance that implements `match(val) -> any or nil`
+ #
+ # The method takes a map or value as input, applies the matcher and
+ # returns a new map or value, or `nil` if the matcher did not match anything.
+ #
+ # Example:
+ # Payload#?#Temperature>50
+ # is decomposed as:
+ # , ,
+ #
+ # Instance types:
+ # Rule_Matcher_Key(key): checks that the input map contains the key (case insensitive) and
+ # returns the sub-value or `nil` if the key does not exist
+ #
+ # Rule_Matcher_Wildcard: maps any key, which yields to unpredictable behavior if the map
+ # has multiple keys (gets the first key returned by the iterator)
+ #
+ # Rule_Matcher_Operator: checks is a simple value (numerical or string) matches the operator and the value
+ # returns the value unchanged if match, or `nil` if no match
+
+ static class Rule_Matcher_Key
+ var name # literal name of what to match
+
+ def init(name)
+ self.name = name
+ end
+
+ # find a key in map, case insensitive, return actual key or nil if not found
+ static def find_key_i(m, keyi)
+ import string
+ var keyu = string.toupper(keyi)
+ if isinstance(m, map)
+ for k:m.keys()
+ if string.toupper(k)==keyu
+ return k
+ end
+ end
+ end
+ end
+
+ def match(val)
+ if val == nil return nil end # safeguard
+ if !isinstance(val, map) return nil end # literal name can only match a map key
+ var k = self.find_key_i(val, self.name)
+ if k == nil return nil end # no key with value self.name
+ return val[k]
+ end
+
+ def tostring()
+ return ""
+ end
+ end
+
+ static class Rule_Matcher_Array
+ var index # index in the array, defaults to zero
+
+ def init(index)
+ self.index = index
+ end
+
+ def match(val)
+ if val == nil return nil end # safeguard
+ if !isinstance(val, list) return val end # ignore index if not a list
+ if self.index <= 0 return nil end # out of bounds
+ if self.index > size(val) return nil end # out of bounds
+ return val[self.index - 1]
+ end
+
+ def tostring()
+ return ""
+ end
+ end
+
+ static class Rule_Matcher_Wildcard
+
+ def match(val)
+ if val == nil return nil end # safeguard
+ if !isinstance(val, map) return nil end # literal name can only match a map key
+ if size(val) == 0 return nil end
+ return val.iter()() # get first value from iterator
+ end
+
+ def tostring()
+ return ""
+ end
+ end
+
+ static class Rule_Matcher_Operator
+ var op_func # function making the comparison
+ var op_str # name of the operator like '>'
+ var op_value # value to compare agains
+
+ def init(op_str, op_value)
+ self.op_parse(op_str, op_value)
+ end
+
+
+ ###########################################################################################
+ # Functions to compare two values
+ ###########################################################################################
+ def op_parse(op, op_value)
+ self.op_str = op
+
+ def op_eq_str(a,b) return tasmota._apply_str_op(1, str(a), b) end
+ def op_neq_str(a,b) return tasmota._apply_str_op(2, str(a), b) end
+ def op_start_str(a,b) return tasmota._apply_str_op(3, str(a), b) end
+ def op_end_str(a,b) return tasmota._apply_str_op(4, str(a), b) end
+ def op_sub_str(a,b) return tasmota._apply_str_op(5, str(a), b) end
+ def op_notsub_str(a,b) return tasmota._apply_str_op(6, str(a), b) end
+ def op_eq(a,b) return number(a) == b end
+ def op_neq(a,b) return number(a) != b end
+ def op_gt(a,b) return number(a) > b end
+ def op_gte(a,b) return number(a) >= b end
+ def op_lt(a,b) return number(a) < b end
+ def op_lte(a,b) return number(a) <= b end
+ def op_mod(a,b) return (int(a) % b) == 0 end
+
+ var numerical = false
+ var f
+
+ if op=='=' f = op_eq_str
+ elif op=='!==' f = op_neq_str
+ elif op=='$!' f = op_neq_str
+ elif op=='$<' f = op_start_str
+ elif op=='$>' f = op_end_str
+ elif op=='$|' f = op_sub_str
+ elif op=='$^' f = op_notsub_str
+ else
+ numerical = true
+ if op=='==' f = op_eq
+ elif op=='!=' f = op_neq
+ elif op=='>' f = op_gt
+ elif op=='>=' f = op_gte
+ elif op=='<' f = op_lt
+ elif op=='<=' f = op_lte
+ elif op=='|' f = op_mod
+ end
+ end
+
+ self.op_func = f
+ if numerical # if numerical comparator, make sure that the value passed is a number
+ # to check if a number is correct, the safest method is to use a json decoder
+ import json
+ var val_num = json.load(op_value)
+ if type(val_num) != 'int' && type(val_num) != 'real'
+ raise "value_error", "value needs to be a number"
+ else
+ self.op_value = val_num
+ end
+ else
+ self.op_value = str(op)
+ end
+
+ end
+
+ def match(val)
+ var t = type(val)
+ if t != 'int' && t != 'real' && t != 'string' return nil end # must be a simple type
+ return self.op_func(val, self.op_value) ? val : nil
+ end
+
+ def tostring()
+ if type(self.op_value) == 'string'
+ return ""
+ else
+ return ""
+ end
+ end
+ end
+
+ ###########################################################################################
+ # instance variables
+ var rule # original pattern of the rules
+ var trigger # rule pattern of trigger, excluding operator check (ex: "AA#BB>50" would be "AA#BB")
+ var matchers # array of Rule_Matcher(s)
+
+ def init(rule, trigger, matchers)
+ self.rule = rule
+ self.trigger = trigger
+ self.matchers = matchers
+ end
+
+ # parses a rule pattern and creates a list of Rule_Matcher(s)
+ static def parse(pattern)
+ import string
+ if pattern == nil return nil end
+
+ var matchers = []
+
+ # changes "Dimmer>50" to ['Dimmer', '>', '50']
+ # Ex: DS18B20#Temperature<20
+ var op_list = tasmota.find_op(pattern)
+
+ # ex: 'DS18B20#Temperature'
+ var value_str = op_list[0]
+ var op_str = op_list[1]
+ var op_value = op_list[2]
+
+ var sz = size(value_str)
+ var idx_start = 0 # index of current cursor
+ var idx_end = -1 # end of current item
+
+ while idx_start < sz
+ # split by '#'
+ var idx_sep = string.find(value_str, '#', idx_start)
+ var item_str
+ if idx_sep >= 0
+ if idx_sep == idx_start raise "pattern_error", "empty pattern not allowed" end
+ item_str = value_str[idx_start .. idx_sep - 1]
+ idx_start = idx_sep + 1
+ else
+ item_str = value_str[idx_start .. ]
+ idx_start = sz # will end the loop
+ end
+
+ # check if there is an array accessor
+ var arr_start = string.find(item_str, '[')
+ var arr_index = nil
+ if arr_start >= 0 # we have an array index
+ var arr_end = string.find(item_str, ']', arr_start)
+ if arr_end < 0 raise "value_error", "missing ']' in rule pattern" end
+ var arr_str = item_str[arr_start + 1 .. arr_end - 1]
+ item_str = item_str[0 .. arr_start - 1] # truncate
+ arr_index = int(arr_str)
+ end
+
+ if item_str == '?'
+ matchers.push(_class.Rule_Matcher_Wildcard())
+ else
+ matchers.push(_class.Rule_Matcher_Key(item_str))
+ end
+
+ if arr_index != nil
+ matchers.push(_class.Rule_Matcher_Array(arr_index))
+ end
+ end
+
+ # if an operator was found, add the operator matcher
+ if op_str != nil && op_value != nil # we have an operator
+ matchers.push(_class.Rule_Matcher_Operator(op_str, op_value))
+ end
+
+ return _class(pattern, value_str, matchers) # `_class` is a reference to the Rule_Matcher class
+ end
+
+ # apply all matchers, abort if any returns `nil`
+ def match(val_in)
+ if self.matchers == nil return nil end
+ var val = val_in
+
+ var idx = 0
+ while idx < size(self.matchers)
+ val = self.matchers[idx].match(val)
+ if val == nil return nil end
+ idx += 1
+ end
+
+ return val
+ end
+
+ def tostring()
+ return str(self.matchers)
+ end
+
+end
diff --git a/lib/libesp32/berry_tasmota/src/embedded/tasmota_class.be b/lib/libesp32/berry_tasmota/src/embedded/tasmota_class.be
index 03d36637a..1295436bd 100644
--- a/lib/libesp32/berry_tasmota/src/embedded/tasmota_class.be
+++ b/lib/libesp32/berry_tasmota/src/embedded/tasmota_class.be
@@ -1,7 +1,8 @@
#- Native code used for testing and code solidification -#
#- Do not use it -#
-class Trigger end # for compilation
+class Trigger end # for compilation
+class Rule_Matche end # for compilation
tasmota = nil
#@ solidify:Tasmota
@@ -65,22 +66,18 @@ class Tasmota
# split the item when there is an operator, returns a list of (left,op,right)
- # ex: "Dimmer>50" -> ["Dimmer",tasmota_gt,"50"]
+ #-
+ assert(tasmota.find_op("Dimmer>50") == ['Dimmer', '>', '50'])
+ assert(tasmota.find_op("Dimmer") == ['Dimmer', nil, nil])
+ assert(tasmota.find_op("Status!==Connected") == ['Status', '!==', 'Connected'])
+ -#
def find_op(item)
- import string
- var op_chars = '=<>!'
- var pos = self._find_op(item, false) # initial run
- if pos >= 0
- var op_split = string.split(item,pos)
- var op_left = op_split[0]
- var op_rest = op_split[1]
- pos = self._find_op(op_rest, true)
- if pos >= 0
- var op_split2 = string.split(op_rest,pos)
- var op_middle = op_split2[0]
- var op_right = op_split2[1]
- return [op_left,op_middle,op_right]
- end
+ var idx_composite = self._find_op(item)
+ if idx_composite >= 0
+ var idx_start = idx_composite & 0x7FFF
+ var idx_end = idx_composite >> 16
+
+ return [ item[0 .. idx_start-1], item[idx_start .. idx_end - 1], item[idx_end ..]]
end
return [item, nil, nil]
end
@@ -92,7 +89,7 @@ class Tasmota
self._rules=[]
end
if type(f) == 'function'
- self._rules.push(Trigger(pat, f, id))
+ self._rules.push(Trigger(self.Rule_Matcher.parse(pat), f, id))
else
raise 'value_error', 'the second argument is not a function'
end
@@ -102,7 +99,7 @@ class Tasmota
if self._rules
var i = 0
while i < size(self._rules)
- if self._rules[i].trig == pat && self._rules[i].id == id
+ if self._rules[i].trig.rule == pat && self._rules[i].id == id
self._rules.remove(i) #- don't increment i since we removed the object -#
else
i += 1
@@ -112,43 +109,19 @@ class Tasmota
end
# Rules trigger if match. return true if match, false if not
- def try_rule(event, rule, f)
- import string
- var rl_list = self.find_op(rule)
- var sub_event = event
- var rl = string.split(rl_list[0],'#')
- var i = 0
- while i < size(rl)
- # for it:rl
- var it = rl[i]
- var found=self.find_key_i(sub_event,it)
- if found == nil return false end
- sub_event = sub_event[found]
- i += 1
- end
- var op=rl_list[1]
- var op2=rl_list[2]
- if op
- if op=='=='
- if str(sub_event) != str(op2) return false end
- elif op=='!=='
- if str(sub_event) == str(op2) return false end
- elif op=='='
- if real(sub_event) != real(op2) return false end
- elif op=='!='
- if real(sub_event) == real(op2) return false end
- elif op=='>'
- if real(sub_event) <= real(op2) return false end
- elif op=='>='
- if real(sub_event) < real(op2) return false end
- elif op=='<'
- if real(sub_event) >= real(op2) return false end
- elif op=='<='
- if real(sub_event) > real(op2) return false end
+ #
+ # event: native Berry map representing the JSON input
+ # rule: Rule_Matcher instance
+ # f: callback to call in case of a match
+ def try_rule(event, rule_matcher, f)
+ var sub_event = rule_matcher.match(event)
+ if sub_event != nil
+ if f != nil
+ f(sub_event, rule_matcher.trigger, event)
end
+ return true
end
- f(sub_event, rl_list[0], event)
- return true
+ return false
end
# Run rules, i.e. check each individual rule
@@ -162,7 +135,7 @@ class Tasmota
self.cmd_res = nil # disable sunsequent recording of results
var ret = false
- var ev = json.load(ev_json) # returns nil if invalid JSON
+ var ev = json.load(ev_json) # returns nil if invalid JSON
if ev == nil
self.log('BRY: ERROR, bad json: '+ev_json, 3)
ev = ev_json # revert to string
@@ -567,7 +540,8 @@ class Tasmota
# iterate and call each closure
var i = 0
- while i < size(fl)
+ var sz = size(fl)
+ while i < sz
# note: this is not guarded in try/except for performance reasons. The inner function must not raise exceptions
fl[i]()
i += 1
@@ -663,10 +637,21 @@ class Tasmota
end
# cmd high-level function
- def cmd(command)
+ # mute: (opt, bool) if true temporarily reduce log_level to 1
+ def cmd(command, mute)
var save_cmd_res = self.cmd_res # restore value on exit (for reentrant)
self.cmd_res = true # signal buffer capture
+ var seriallog_level = tasmota.global.seriallog_level
+ var mqttlog_level = tasmota.settings.mqttlog_level
+ var weblog_level = tasmota.settings.weblog_level
+
+ if mute # mute logging
+ if seriallog_level >= 2 tasmota.global.seriallog_level = 1 end
+ if mqttlog_level >= 2 tasmota.settings.mqttlog_level = 1 end
+ if weblog_level >= 2 tasmota.settings.weblog_level = 1 end
+ end
+
self._cmd(command)
var ret = nil
@@ -675,6 +660,12 @@ class Tasmota
end
self.cmd_res = save_cmd_res # restore previous state
+ # restore log_level
+ if mute
+ tasmota.global.seriallog_level = seriallog_level
+ tasmota.settings.mqttlog_level = mqttlog_level
+ tasmota.settings.weblog_level = weblog_level
+ end
return ret
end
@@ -764,6 +755,7 @@ class Tasmota
end
end
var wc = webclient()
+ wc.set_follow_redirects(true)
wc.begin(url)
var st = wc.GET()
if st != 200
diff --git a/lib/libesp32/berry_tasmota/src/embedded/trigger_class.be b/lib/libesp32/berry_tasmota/src/embedded/trigger_class.be
index 419a8178c..83a52556a 100644
--- a/lib/libesp32/berry_tasmota/src/embedded/trigger_class.be
+++ b/lib/libesp32/berry_tasmota/src/embedded/trigger_class.be
@@ -1,21 +1,33 @@
#- Native code used for testing and code solidification -#
-#- Do not use it -#
+#- Do not use it directly -#
#@ solidify:Trigger
+
class Trigger
var trig, f, id
var o # optional object
+
+ # trig: trigger of the event, either timestamp (int) or a rule matcher instance
+ # f: function or closure to call
+ # id: (any) identifier to allow removal of a specific trigger
+ # o: (instance, optional) instance implementing `timer_reached(trig)`
+ # this is used to implement cron with a specific method for matching time reached
def init(trig, f, id, o)
self.trig = trig
self.f = f
self.id = id
self.o = o
end
+
def tostring()
import string
return string.format(" 0
return self.o.time_reached(self.trig)
diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_rule_matcher.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_rule_matcher.h
new file mode 100644
index 000000000..d00751b01
--- /dev/null
+++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_rule_matcher.h
@@ -0,0 +1,1356 @@
+/* Solidification of rule_matcher.h */
+/********************************************************************\
+* Generated code, don't edit *
+\********************************************************************/
+#include "be_constobj.h"
+
+extern const bclass be_class_Rule_Matcher_Key;
+
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(Rule_Matcher_Key_tostring, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str(_X3CMatcher_X20key_X3D_X27),
+ /* K1 */ be_nested_str(name),
+ /* K2 */ be_nested_str(_X27_X3E),
+ }),
+ &be_const_str_tostring,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0x60040008, // 0000 GETGBL R1 G8
+ 0x88080101, // 0001 GETMBR R2 R0 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x00060001, // 0003 ADD R1 K0 R1
+ 0x00040302, // 0004 ADD R1 R1 K2
+ 0x80040200, // 0005 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: find_key_i
+********************************************************************/
+be_local_closure(Rule_Matcher_Key_find_key_i, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 2, /* argc */
+ 4, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_const_class(be_class_Rule_Matcher_Key),
+ /* K1 */ be_nested_str(string),
+ /* K2 */ be_nested_str(toupper),
+ /* K3 */ be_nested_str(keys),
+ /* K4 */ be_nested_str(stop_iteration),
+ }),
+ &be_const_str_find_key_i,
+ &be_const_str_solidified,
+ ( &(const binstruction[29]) { /* code */
+ 0x58080000, // 0000 LDCONST R2 K0
+ 0xA40E0200, // 0001 IMPORT R3 K1
+ 0x8C100702, // 0002 GETMET R4 R3 K2
+ 0x5C180200, // 0003 MOVE R6 R1
+ 0x7C100400, // 0004 CALL R4 2
+ 0x6014000F, // 0005 GETGBL R5 G15
+ 0x5C180000, // 0006 MOVE R6 R0
+ 0x601C0013, // 0007 GETGBL R7 G19
+ 0x7C140400, // 0008 CALL R5 2
+ 0x78160011, // 0009 JMPF R5 #001C
+ 0x60140010, // 000A GETGBL R5 G16
+ 0x8C180103, // 000B GETMET R6 R0 K3
+ 0x7C180200, // 000C CALL R6 1
+ 0x7C140200, // 000D CALL R5 1
+ 0xA8020009, // 000E EXBLK 0 #0019
+ 0x5C180A00, // 000F MOVE R6 R5
+ 0x7C180000, // 0010 CALL R6 0
+ 0x8C1C0702, // 0011 GETMET R7 R3 K2
+ 0x5C240C00, // 0012 MOVE R9 R6
+ 0x7C1C0400, // 0013 CALL R7 2
+ 0x1C1C0E04, // 0014 EQ R7 R7 R4
+ 0x781E0001, // 0015 JMPF R7 #0018
+ 0xA8040001, // 0016 EXBLK 1 1
+ 0x80040C00, // 0017 RET 1 R6
+ 0x7001FFF5, // 0018 JMP #000F
+ 0x58140004, // 0019 LDCONST R5 K4
+ 0xAC140200, // 001A CATCH R5 1 0
+ 0xB0080000, // 001B RAISE 2 R0 R0
+ 0x80000000, // 001C RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: match
+********************************************************************/
+be_local_closure(Rule_Matcher_Key_match, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str(find_key_i),
+ /* K1 */ be_nested_str(name),
+ }),
+ &be_const_str_match,
+ &be_const_str_solidified,
+ ( &(const binstruction[23]) { /* code */
+ 0x4C080000, // 0000 LDNIL R2
+ 0x1C080202, // 0001 EQ R2 R1 R2
+ 0x780A0001, // 0002 JMPF R2 #0005
+ 0x4C080000, // 0003 LDNIL R2
+ 0x80040400, // 0004 RET 1 R2
+ 0x6008000F, // 0005 GETGBL R2 G15
+ 0x5C0C0200, // 0006 MOVE R3 R1
+ 0x60100013, // 0007 GETGBL R4 G19
+ 0x7C080400, // 0008 CALL R2 2
+ 0x740A0001, // 0009 JMPT R2 #000C
+ 0x4C080000, // 000A LDNIL R2
+ 0x80040400, // 000B RET 1 R2
+ 0x8C080100, // 000C GETMET R2 R0 K0
+ 0x5C100200, // 000D MOVE R4 R1
+ 0x88140101, // 000E GETMBR R5 R0 K1
+ 0x7C080600, // 000F CALL R2 3
+ 0x4C0C0000, // 0010 LDNIL R3
+ 0x1C0C0403, // 0011 EQ R3 R2 R3
+ 0x780E0001, // 0012 JMPF R3 #0015
+ 0x4C0C0000, // 0013 LDNIL R3
+ 0x80040600, // 0014 RET 1 R3
+ 0x940C0202, // 0015 GETIDX R3 R1 R2
+ 0x80040600, // 0016 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Rule_Matcher_Key_init, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str(name),
+ }),
+ &be_const_str_init,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x80000000, // 0001 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Rule_Matcher_Key
+********************************************************************/
+be_local_class(Rule_Matcher_Key,
+ 1,
+ NULL,
+ be_nested_map(5,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key(tostring, 3), be_const_closure(Rule_Matcher_Key_tostring_closure) },
+ { be_const_key(find_key_i, -1), be_const_static_closure(Rule_Matcher_Key_find_key_i_closure) },
+ { be_const_key(name, -1), be_const_var(0) },
+ { be_const_key(init, 4), be_const_closure(Rule_Matcher_Key_init_closure) },
+ { be_const_key(match, -1), be_const_closure(Rule_Matcher_Key_match_closure) },
+ })),
+ (bstring*) &be_const_str_Rule_Matcher_Key
+);
+/*******************************************************************/
+
+void be_load_Rule_Matcher_Key_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Rule_Matcher_Key);
+ be_setglobal(vm, "Rule_Matcher_Key");
+ be_pop(vm, 1);
+}
+
+extern const bclass be_class_Rule_Matcher_Wildcard;
+
+/********************************************************************
+** Solidified function: match
+********************************************************************/
+be_local_closure(Rule_Matcher_Wildcard_match, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_const_int(0),
+ /* K1 */ be_nested_str(iter),
+ }),
+ &be_const_str_match,
+ &be_const_str_solidified,
+ ( &(const binstruction[23]) { /* code */
+ 0x4C080000, // 0000 LDNIL R2
+ 0x1C080202, // 0001 EQ R2 R1 R2
+ 0x780A0001, // 0002 JMPF R2 #0005
+ 0x4C080000, // 0003 LDNIL R2
+ 0x80040400, // 0004 RET 1 R2
+ 0x6008000F, // 0005 GETGBL R2 G15
+ 0x5C0C0200, // 0006 MOVE R3 R1
+ 0x60100013, // 0007 GETGBL R4 G19
+ 0x7C080400, // 0008 CALL R2 2
+ 0x740A0001, // 0009 JMPT R2 #000C
+ 0x4C080000, // 000A LDNIL R2
+ 0x80040400, // 000B RET 1 R2
+ 0x6008000C, // 000C GETGBL R2 G12
+ 0x5C0C0200, // 000D MOVE R3 R1
+ 0x7C080200, // 000E CALL R2 1
+ 0x1C080500, // 000F EQ R2 R2 K0
+ 0x780A0001, // 0010 JMPF R2 #0013
+ 0x4C080000, // 0011 LDNIL R2
+ 0x80040400, // 0012 RET 1 R2
+ 0x8C080301, // 0013 GETMET R2 R1 K1
+ 0x7C080200, // 0014 CALL R2 1
+ 0x7C080000, // 0015 CALL R2 0
+ 0x80040400, // 0016 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(Rule_Matcher_Wildcard_tostring, /* name */
+ be_nested_proto(
+ 1, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str(_X3CMatcher_X20any_X3E),
+ }),
+ &be_const_str_tostring,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 1]) { /* code */
+ 0x80060000, // 0000 RET 1 K0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Rule_Matcher_Wildcard
+********************************************************************/
+be_local_class(Rule_Matcher_Wildcard,
+ 0,
+ NULL,
+ be_nested_map(2,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key(match, -1), be_const_closure(Rule_Matcher_Wildcard_match_closure) },
+ { be_const_key(tostring, -1), be_const_closure(Rule_Matcher_Wildcard_tostring_closure) },
+ })),
+ (bstring*) &be_const_str_Rule_Matcher_Wildcard
+);
+/*******************************************************************/
+
+void be_load_Rule_Matcher_Wildcard_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Rule_Matcher_Wildcard);
+ be_setglobal(vm, "Rule_Matcher_Wildcard");
+ be_pop(vm, 1);
+}
+
+extern const bclass be_class_Rule_Matcher_Operator;
+
+/********************************************************************
+** Solidified function: match
+********************************************************************/
+be_local_closure(Rule_Matcher_Operator_match, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 5]) { /* constants */
+ /* K0 */ be_nested_str(int),
+ /* K1 */ be_nested_str(real),
+ /* K2 */ be_nested_str(string),
+ /* K3 */ be_nested_str(op_func),
+ /* K4 */ be_nested_str(op_value),
+ }),
+ &be_const_str_match,
+ &be_const_str_solidified,
+ ( &(const binstruction[20]) { /* code */
+ 0x60080004, // 0000 GETGBL R2 G4
+ 0x5C0C0200, // 0001 MOVE R3 R1
+ 0x7C080200, // 0002 CALL R2 1
+ 0x200C0500, // 0003 NE R3 R2 K0
+ 0x780E0005, // 0004 JMPF R3 #000B
+ 0x200C0501, // 0005 NE R3 R2 K1
+ 0x780E0003, // 0006 JMPF R3 #000B
+ 0x200C0502, // 0007 NE R3 R2 K2
+ 0x780E0001, // 0008 JMPF R3 #000B
+ 0x4C0C0000, // 0009 LDNIL R3
+ 0x80040600, // 000A RET 1 R3
+ 0x8C0C0103, // 000B GETMET R3 R0 K3
+ 0x5C140200, // 000C MOVE R5 R1
+ 0x88180104, // 000D GETMBR R6 R0 K4
+ 0x7C0C0600, // 000E CALL R3 3
+ 0x780E0001, // 000F JMPF R3 #0012
+ 0x5C0C0200, // 0010 MOVE R3 R1
+ 0x70020000, // 0011 JMP #0013
+ 0x4C0C0000, // 0012 LDNIL R3
+ 0x80040600, // 0013 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: op_parse
+********************************************************************/
+be_local_closure(Rule_Matcher_Operator_op_parse, /* name */
+ be_nested_proto(
+ 22, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[13]) {
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str(tasmota),
+ /* K1 */ be_nested_str(_apply_str_op),
+ /* K2 */ be_const_int(1),
+ }),
+ &be_const_str_op_eq_str,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0xB80A0000, // 0000 GETNGBL R2 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x58100002, // 0002 LDCONST R4 K2
+ 0x60140008, // 0003 GETGBL R5 G8
+ 0x5C180000, // 0004 MOVE R6 R0
+ 0x7C140200, // 0005 CALL R5 1
+ 0x5C180200, // 0006 MOVE R6 R1
+ 0x7C080800, // 0007 CALL R2 4
+ 0x80040400, // 0008 RET 1 R2
+ })
+ ),
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str(tasmota),
+ /* K1 */ be_nested_str(_apply_str_op),
+ /* K2 */ be_const_int(2),
+ }),
+ &be_const_str_op_neq_str,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0xB80A0000, // 0000 GETNGBL R2 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x58100002, // 0002 LDCONST R4 K2
+ 0x60140008, // 0003 GETGBL R5 G8
+ 0x5C180000, // 0004 MOVE R6 R0
+ 0x7C140200, // 0005 CALL R5 1
+ 0x5C180200, // 0006 MOVE R6 R1
+ 0x7C080800, // 0007 CALL R2 4
+ 0x80040400, // 0008 RET 1 R2
+ })
+ ),
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str(tasmota),
+ /* K1 */ be_nested_str(_apply_str_op),
+ /* K2 */ be_const_int(3),
+ }),
+ &be_const_str_op_start_str,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0xB80A0000, // 0000 GETNGBL R2 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x58100002, // 0002 LDCONST R4 K2
+ 0x60140008, // 0003 GETGBL R5 G8
+ 0x5C180000, // 0004 MOVE R6 R0
+ 0x7C140200, // 0005 CALL R5 1
+ 0x5C180200, // 0006 MOVE R6 R1
+ 0x7C080800, // 0007 CALL R2 4
+ 0x80040400, // 0008 RET 1 R2
+ })
+ ),
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str(tasmota),
+ /* K1 */ be_nested_str(_apply_str_op),
+ }),
+ &be_const_str_op_end_str,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0xB80A0000, // 0000 GETNGBL R2 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x54120003, // 0002 LDINT R4 4
+ 0x60140008, // 0003 GETGBL R5 G8
+ 0x5C180000, // 0004 MOVE R6 R0
+ 0x7C140200, // 0005 CALL R5 1
+ 0x5C180200, // 0006 MOVE R6 R1
+ 0x7C080800, // 0007 CALL R2 4
+ 0x80040400, // 0008 RET 1 R2
+ })
+ ),
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str(tasmota),
+ /* K1 */ be_nested_str(_apply_str_op),
+ }),
+ &be_const_str_op_sub_str,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0xB80A0000, // 0000 GETNGBL R2 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x54120004, // 0002 LDINT R4 5
+ 0x60140008, // 0003 GETGBL R5 G8
+ 0x5C180000, // 0004 MOVE R6 R0
+ 0x7C140200, // 0005 CALL R5 1
+ 0x5C180200, // 0006 MOVE R6 R1
+ 0x7C080800, // 0007 CALL R2 4
+ 0x80040400, // 0008 RET 1 R2
+ })
+ ),
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str(tasmota),
+ /* K1 */ be_nested_str(_apply_str_op),
+ }),
+ &be_const_str_op_notsub_str,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 9]) { /* code */
+ 0xB80A0000, // 0000 GETNGBL R2 K0
+ 0x8C080501, // 0001 GETMET R2 R2 K1
+ 0x54120005, // 0002 LDINT R4 6
+ 0x60140008, // 0003 GETGBL R5 G8
+ 0x5C180000, // 0004 MOVE R6 R0
+ 0x7C140200, // 0005 CALL R5 1
+ 0x5C180200, // 0006 MOVE R6 R1
+ 0x7C080800, // 0007 CALL R2 4
+ 0x80040400, // 0008 RET 1 R2
+ })
+ ),
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 0, /* has constants */
+ NULL, /* no const */
+ &be_const_str_op_eq,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x60080007, // 0000 GETGBL R2 G7
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x1C080401, // 0003 EQ R2 R2 R1
+ 0x80040400, // 0004 RET 1 R2
+ })
+ ),
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 0, /* has constants */
+ NULL, /* no const */
+ &be_const_str_op_neq,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x60080007, // 0000 GETGBL R2 G7
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x20080401, // 0003 NE R2 R2 R1
+ 0x80040400, // 0004 RET 1 R2
+ })
+ ),
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 0, /* has constants */
+ NULL, /* no const */
+ &be_const_str_op_gt,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x60080007, // 0000 GETGBL R2 G7
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x24080401, // 0003 GT R2 R2 R1
+ 0x80040400, // 0004 RET 1 R2
+ })
+ ),
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 0, /* has constants */
+ NULL, /* no const */
+ &be_const_str_op_gte,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x60080007, // 0000 GETGBL R2 G7
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x28080401, // 0003 GE R2 R2 R1
+ 0x80040400, // 0004 RET 1 R2
+ })
+ ),
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 0, /* has constants */
+ NULL, /* no const */
+ &be_const_str_op_lt,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x60080007, // 0000 GETGBL R2 G7
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x14080401, // 0003 LT R2 R2 R1
+ 0x80040400, // 0004 RET 1 R2
+ })
+ ),
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 0, /* has constants */
+ NULL, /* no const */
+ &be_const_str_op_lte,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x60080007, // 0000 GETGBL R2 G7
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x18080401, // 0003 LE R2 R2 R1
+ 0x80040400, // 0004 RET 1 R2
+ })
+ ),
+ be_nested_proto(
+ 4, /* nstack */
+ 2, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_const_int(0),
+ }),
+ &be_const_str_op_mod,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0x60080009, // 0000 GETGBL R2 G9
+ 0x5C0C0000, // 0001 MOVE R3 R0
+ 0x7C080200, // 0002 CALL R2 1
+ 0x10080401, // 0003 MOD R2 R2 R1
+ 0x1C080500, // 0004 EQ R2 R2 K0
+ 0x80040400, // 0005 RET 1 R2
+ })
+ ),
+ }),
+ 1, /* has constants */
+ ( &(const bvalue[23]) { /* constants */
+ /* K0 */ be_nested_str(op_str),
+ /* K1 */ be_nested_str(_X3D),
+ /* K2 */ be_nested_str(_X21_X3D_X3D),
+ /* K3 */ be_nested_str(_X24_X21),
+ /* K4 */ be_nested_str(_X24_X3C),
+ /* K5 */ be_nested_str(_X24_X3E),
+ /* K6 */ be_nested_str(_X24_X7C),
+ /* K7 */ be_nested_str(_X24_X5E),
+ /* K8 */ be_nested_str(_X3D_X3D),
+ /* K9 */ be_nested_str(_X21_X3D),
+ /* K10 */ be_nested_str(_X3E),
+ /* K11 */ be_nested_str(_X3E_X3D),
+ /* K12 */ be_nested_str(_X3C),
+ /* K13 */ be_nested_str(_X3C_X3D),
+ /* K14 */ be_nested_str(_X7C),
+ /* K15 */ be_nested_str(op_func),
+ /* K16 */ be_nested_str(json),
+ /* K17 */ be_nested_str(load),
+ /* K18 */ be_nested_str(int),
+ /* K19 */ be_nested_str(real),
+ /* K20 */ be_nested_str(value_error),
+ /* K21 */ be_nested_str(value_X20needs_X20to_X20be_X20a_X20number),
+ /* K22 */ be_nested_str(op_value),
+ }),
+ &be_const_str_op_parse,
+ &be_const_str_solidified,
+ ( &(const binstruction[97]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x840C0000, // 0001 CLOSURE R3 P0
+ 0x84100001, // 0002 CLOSURE R4 P1
+ 0x84140002, // 0003 CLOSURE R5 P2
+ 0x84180003, // 0004 CLOSURE R6 P3
+ 0x841C0004, // 0005 CLOSURE R7 P4
+ 0x84200005, // 0006 CLOSURE R8 P5
+ 0x84240006, // 0007 CLOSURE R9 P6
+ 0x84280007, // 0008 CLOSURE R10 P7
+ 0x842C0008, // 0009 CLOSURE R11 P8
+ 0x84300009, // 000A CLOSURE R12 P9
+ 0x8434000A, // 000B CLOSURE R13 P10
+ 0x8438000B, // 000C CLOSURE R14 P11
+ 0x843C000C, // 000D CLOSURE R15 P12
+ 0x50400000, // 000E LDBOOL R16 0 0
+ 0x4C440000, // 000F LDNIL R17
+ 0x1C480301, // 0010 EQ R18 R1 K1
+ 0x784A0001, // 0011 JMPF R18 #0014
+ 0x5C440600, // 0012 MOVE R17 R3
+ 0x70020033, // 0013 JMP #0048
+ 0x1C480302, // 0014 EQ R18 R1 K2
+ 0x784A0001, // 0015 JMPF R18 #0018
+ 0x5C440800, // 0016 MOVE R17 R4
+ 0x7002002F, // 0017 JMP #0048
+ 0x1C480303, // 0018 EQ R18 R1 K3
+ 0x784A0001, // 0019 JMPF R18 #001C
+ 0x5C440800, // 001A MOVE R17 R4
+ 0x7002002B, // 001B JMP #0048
+ 0x1C480304, // 001C EQ R18 R1 K4
+ 0x784A0001, // 001D JMPF R18 #0020
+ 0x5C440A00, // 001E MOVE R17 R5
+ 0x70020027, // 001F JMP #0048
+ 0x1C480305, // 0020 EQ R18 R1 K5
+ 0x784A0001, // 0021 JMPF R18 #0024
+ 0x5C440C00, // 0022 MOVE R17 R6
+ 0x70020023, // 0023 JMP #0048
+ 0x1C480306, // 0024 EQ R18 R1 K6
+ 0x784A0001, // 0025 JMPF R18 #0028
+ 0x5C440E00, // 0026 MOVE R17 R7
+ 0x7002001F, // 0027 JMP #0048
+ 0x1C480307, // 0028 EQ R18 R1 K7
+ 0x784A0001, // 0029 JMPF R18 #002C
+ 0x5C441000, // 002A MOVE R17 R8
+ 0x7002001B, // 002B JMP #0048
+ 0x50400200, // 002C LDBOOL R16 1 0
+ 0x1C480308, // 002D EQ R18 R1 K8
+ 0x784A0001, // 002E JMPF R18 #0031
+ 0x5C441200, // 002F MOVE R17 R9
+ 0x70020016, // 0030 JMP #0048
+ 0x1C480309, // 0031 EQ R18 R1 K9
+ 0x784A0001, // 0032 JMPF R18 #0035
+ 0x5C441400, // 0033 MOVE R17 R10
+ 0x70020012, // 0034 JMP #0048
+ 0x1C48030A, // 0035 EQ R18 R1 K10
+ 0x784A0001, // 0036 JMPF R18 #0039
+ 0x5C441600, // 0037 MOVE R17 R11
+ 0x7002000E, // 0038 JMP #0048
+ 0x1C48030B, // 0039 EQ R18 R1 K11
+ 0x784A0001, // 003A JMPF R18 #003D
+ 0x5C441800, // 003B MOVE R17 R12
+ 0x7002000A, // 003C JMP #0048
+ 0x1C48030C, // 003D EQ R18 R1 K12
+ 0x784A0001, // 003E JMPF R18 #0041
+ 0x5C441A00, // 003F MOVE R17 R13
+ 0x70020006, // 0040 JMP #0048
+ 0x1C48030D, // 0041 EQ R18 R1 K13
+ 0x784A0001, // 0042 JMPF R18 #0045
+ 0x5C441C00, // 0043 MOVE R17 R14
+ 0x70020002, // 0044 JMP #0048
+ 0x1C48030E, // 0045 EQ R18 R1 K14
+ 0x784A0000, // 0046 JMPF R18 #0048
+ 0x5C441E00, // 0047 MOVE R17 R15
+ 0x90021E11, // 0048 SETMBR R0 K15 R17
+ 0x78420011, // 0049 JMPF R16 #005C
+ 0xA44A2000, // 004A IMPORT R18 K16
+ 0x8C4C2511, // 004B GETMET R19 R18 K17
+ 0x5C540400, // 004C MOVE R21 R2
+ 0x7C4C0400, // 004D CALL R19 2
+ 0x60500004, // 004E GETGBL R20 G4
+ 0x5C542600, // 004F MOVE R21 R19
+ 0x7C500200, // 0050 CALL R20 1
+ 0x20502912, // 0051 NE R20 R20 K18
+ 0x78520006, // 0052 JMPF R20 #005A
+ 0x60500004, // 0053 GETGBL R20 G4
+ 0x5C542600, // 0054 MOVE R21 R19
+ 0x7C500200, // 0055 CALL R20 1
+ 0x20502913, // 0056 NE R20 R20 K19
+ 0x78520001, // 0057 JMPF R20 #005A
+ 0xB0062915, // 0058 RAISE 1 K20 K21
+ 0x70020000, // 0059 JMP #005B
+ 0x90022C13, // 005A SETMBR R0 K22 R19
+ 0x70020003, // 005B JMP #0060
+ 0x60480008, // 005C GETGBL R18 G8
+ 0x5C4C0200, // 005D MOVE R19 R1
+ 0x7C480200, // 005E CALL R18 1
+ 0x90022C12, // 005F SETMBR R0 K22 R18
+ 0x80000000, // 0060 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(Rule_Matcher_Operator_tostring, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 8]) { /* constants */
+ /* K0 */ be_nested_str(op_value),
+ /* K1 */ be_nested_str(string),
+ /* K2 */ be_nested_str(_X3CMatcher_X20op_X20_X27),
+ /* K3 */ be_nested_str(op_str),
+ /* K4 */ be_nested_str(_X27_X20val_X3D_X27),
+ /* K5 */ be_nested_str(_X27_X3E),
+ /* K6 */ be_nested_str(_X27_X20val_X3D),
+ /* K7 */ be_nested_str(_X3E),
+ }),
+ &be_const_str_tostring,
+ &be_const_str_solidified,
+ ( &(const binstruction[25]) { /* code */
+ 0x60040004, // 0000 GETGBL R1 G4
+ 0x88080100, // 0001 GETMBR R2 R0 K0
+ 0x7C040200, // 0002 CALL R1 1
+ 0x1C040301, // 0003 EQ R1 R1 K1
+ 0x78060009, // 0004 JMPF R1 #000F
+ 0x88040103, // 0005 GETMBR R1 R0 K3
+ 0x00060401, // 0006 ADD R1 K2 R1
+ 0x00040304, // 0007 ADD R1 R1 K4
+ 0x60080008, // 0008 GETGBL R2 G8
+ 0x880C0100, // 0009 GETMBR R3 R0 K0
+ 0x7C080200, // 000A CALL R2 1
+ 0x00040202, // 000B ADD R1 R1 R2
+ 0x00040305, // 000C ADD R1 R1 K5
+ 0x80040200, // 000D RET 1 R1
+ 0x70020008, // 000E JMP #0018
+ 0x88040103, // 000F GETMBR R1 R0 K3
+ 0x00060401, // 0010 ADD R1 K2 R1
+ 0x00040306, // 0011 ADD R1 R1 K6
+ 0x60080008, // 0012 GETGBL R2 G8
+ 0x880C0100, // 0013 GETMBR R3 R0 K0
+ 0x7C080200, // 0014 CALL R2 1
+ 0x00040202, // 0015 ADD R1 R1 R2
+ 0x00040307, // 0016 ADD R1 R1 K7
+ 0x80040200, // 0017 RET 1 R1
+ 0x80000000, // 0018 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Rule_Matcher_Operator_init, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 3, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str(op_parse),
+ }),
+ &be_const_str_init,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0x8C0C0100, // 0000 GETMET R3 R0 K0
+ 0x5C140200, // 0001 MOVE R5 R1
+ 0x5C180400, // 0002 MOVE R6 R2
+ 0x7C0C0600, // 0003 CALL R3 3
+ 0x80000000, // 0004 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Rule_Matcher_Operator
+********************************************************************/
+be_local_class(Rule_Matcher_Operator,
+ 3,
+ NULL,
+ be_nested_map(7,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key(op_value, 6), be_const_var(2) },
+ { be_const_key(tostring, -1), be_const_closure(Rule_Matcher_Operator_tostring_closure) },
+ { be_const_key(op_func, 0), be_const_var(0) },
+ { be_const_key(match, 1), be_const_closure(Rule_Matcher_Operator_match_closure) },
+ { be_const_key(op_str, -1), be_const_var(1) },
+ { be_const_key(init, -1), be_const_closure(Rule_Matcher_Operator_init_closure) },
+ { be_const_key(op_parse, -1), be_const_closure(Rule_Matcher_Operator_op_parse_closure) },
+ })),
+ (bstring*) &be_const_str_Rule_Matcher_Operator
+);
+/*******************************************************************/
+
+void be_load_Rule_Matcher_Operator_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Rule_Matcher_Operator);
+ be_setglobal(vm, "Rule_Matcher_Operator");
+ be_pop(vm, 1);
+}
+
+extern const bclass be_class_Rule_Matcher_Array;
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Rule_Matcher_Array_init, /* name */
+ be_nested_proto(
+ 2, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str(index),
+ }),
+ &be_const_str_init,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 2]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x80000000, // 0001 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(Rule_Matcher_Array_tostring, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str(_X3CMatcher_X20_X5B),
+ /* K1 */ be_nested_str(index),
+ /* K2 */ be_nested_str(_X5D_X3E),
+ }),
+ &be_const_str_tostring,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 6]) { /* code */
+ 0x60040008, // 0000 GETGBL R1 G8
+ 0x88080101, // 0001 GETMBR R2 R0 K1
+ 0x7C040200, // 0002 CALL R1 1
+ 0x00060001, // 0003 ADD R1 K0 R1
+ 0x00040302, // 0004 ADD R1 R1 K2
+ 0x80040200, // 0005 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: match
+********************************************************************/
+be_local_closure(Rule_Matcher_Array_match, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str(index),
+ /* K1 */ be_const_int(0),
+ /* K2 */ be_const_int(1),
+ }),
+ &be_const_str_match,
+ &be_const_str_solidified,
+ ( &(const binstruction[28]) { /* code */
+ 0x4C080000, // 0000 LDNIL R2
+ 0x1C080202, // 0001 EQ R2 R1 R2
+ 0x780A0001, // 0002 JMPF R2 #0005
+ 0x4C080000, // 0003 LDNIL R2
+ 0x80040400, // 0004 RET 1 R2
+ 0x6008000F, // 0005 GETGBL R2 G15
+ 0x5C0C0200, // 0006 MOVE R3 R1
+ 0x60100012, // 0007 GETGBL R4 G18
+ 0x7C080400, // 0008 CALL R2 2
+ 0x740A0000, // 0009 JMPT R2 #000B
+ 0x80040200, // 000A RET 1 R1
+ 0x88080100, // 000B GETMBR R2 R0 K0
+ 0x18080501, // 000C LE R2 R2 K1
+ 0x780A0001, // 000D JMPF R2 #0010
+ 0x4C080000, // 000E LDNIL R2
+ 0x80040400, // 000F RET 1 R2
+ 0x88080100, // 0010 GETMBR R2 R0 K0
+ 0x600C000C, // 0011 GETGBL R3 G12
+ 0x5C100200, // 0012 MOVE R4 R1
+ 0x7C0C0200, // 0013 CALL R3 1
+ 0x24080403, // 0014 GT R2 R2 R3
+ 0x780A0001, // 0015 JMPF R2 #0018
+ 0x4C080000, // 0016 LDNIL R2
+ 0x80040400, // 0017 RET 1 R2
+ 0x88080100, // 0018 GETMBR R2 R0 K0
+ 0x04080502, // 0019 SUB R2 R2 K2
+ 0x94080202, // 001A GETIDX R2 R1 R2
+ 0x80040400, // 001B RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Rule_Matcher_Array
+********************************************************************/
+be_local_class(Rule_Matcher_Array,
+ 1,
+ NULL,
+ be_nested_map(4,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key(index, -1), be_const_var(0) },
+ { be_const_key(tostring, -1), be_const_closure(Rule_Matcher_Array_tostring_closure) },
+ { be_const_key(match, -1), be_const_closure(Rule_Matcher_Array_match_closure) },
+ { be_const_key(init, 0), be_const_closure(Rule_Matcher_Array_init_closure) },
+ })),
+ (bstring*) &be_const_str_Rule_Matcher_Array
+);
+/*******************************************************************/
+
+void be_load_Rule_Matcher_Array_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Rule_Matcher_Array);
+ be_setglobal(vm, "Rule_Matcher_Array");
+ be_pop(vm, 1);
+}
+
+extern const bclass be_class_Rule_Matcher;
+
+/********************************************************************
+** Solidified function: tostring
+********************************************************************/
+be_local_closure(Rule_Matcher_tostring, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str(matchers),
+ }),
+ &be_const_str_tostring,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x60040008, // 0000 GETGBL R1 G8
+ 0x88080100, // 0001 GETMBR R2 R0 K0
+ 0x7C040200, // 0002 CALL R1 1
+ 0x80040200, // 0003 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: parse
+********************************************************************/
+be_local_closure(Rule_Matcher_parse, /* name */
+ be_nested_proto(
+ 20, /* nstack */
+ 1, /* argc */
+ 4, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[22]) { /* constants */
+ /* K0 */ be_const_class(be_class_Rule_Matcher),
+ /* K1 */ be_nested_str(string),
+ /* K2 */ be_nested_str(tasmota),
+ /* K3 */ be_nested_str(find_op),
+ /* K4 */ be_const_int(0),
+ /* K5 */ be_const_int(1),
+ /* K6 */ be_const_int(2),
+ /* K7 */ be_nested_str(find),
+ /* K8 */ be_nested_str(_X23),
+ /* K9 */ be_nested_str(pattern_error),
+ /* K10 */ be_nested_str(empty_X20pattern_X20not_X20allowed),
+ /* K11 */ be_const_int(2147483647),
+ /* K12 */ be_nested_str(_X5B),
+ /* K13 */ be_nested_str(_X5D),
+ /* K14 */ be_nested_str(value_error),
+ /* K15 */ be_nested_str(missing_X20_X27_X5D_X27_X20in_X20rule_X20pattern),
+ /* K16 */ be_nested_str(_X3F),
+ /* K17 */ be_nested_str(push),
+ /* K18 */ be_nested_str(Rule_Matcher_Wildcard),
+ /* K19 */ be_nested_str(Rule_Matcher_Key),
+ /* K20 */ be_nested_str(Rule_Matcher_Array),
+ /* K21 */ be_nested_str(Rule_Matcher_Operator),
+ }),
+ &be_const_str_parse,
+ &be_const_str_solidified,
+ ( &(const binstruction[108]) { /* code */
+ 0x58040000, // 0000 LDCONST R1 K0
+ 0xA40A0200, // 0001 IMPORT R2 K1
+ 0x4C0C0000, // 0002 LDNIL R3
+ 0x1C0C0003, // 0003 EQ R3 R0 R3
+ 0x780E0001, // 0004 JMPF R3 #0007
+ 0x4C0C0000, // 0005 LDNIL R3
+ 0x80040600, // 0006 RET 1 R3
+ 0x600C0012, // 0007 GETGBL R3 G18
+ 0x7C0C0000, // 0008 CALL R3 0
+ 0xB8120400, // 0009 GETNGBL R4 K2
+ 0x8C100903, // 000A GETMET R4 R4 K3
+ 0x5C180000, // 000B MOVE R6 R0
+ 0x7C100400, // 000C CALL R4 2
+ 0x94140904, // 000D GETIDX R5 R4 K4
+ 0x94180905, // 000E GETIDX R6 R4 K5
+ 0x941C0906, // 000F GETIDX R7 R4 K6
+ 0x6020000C, // 0010 GETGBL R8 G12
+ 0x5C240A00, // 0011 MOVE R9 R5
+ 0x7C200200, // 0012 CALL R8 1
+ 0x58240004, // 0013 LDCONST R9 K4
+ 0x5429FFFE, // 0014 LDINT R10 -1
+ 0x142C1208, // 0015 LT R11 R9 R8
+ 0x782E0042, // 0016 JMPF R11 #005A
+ 0x8C2C0507, // 0017 GETMET R11 R2 K7
+ 0x5C340A00, // 0018 MOVE R13 R5
+ 0x58380008, // 0019 LDCONST R14 K8
+ 0x5C3C1200, // 001A MOVE R15 R9
+ 0x7C2C0800, // 001B CALL R11 4
+ 0x4C300000, // 001C LDNIL R12
+ 0x28341704, // 001D GE R13 R11 K4
+ 0x78360008, // 001E JMPF R13 #0028
+ 0x1C341609, // 001F EQ R13 R11 R9
+ 0x78360000, // 0020 JMPF R13 #0022
+ 0xB006130A, // 0021 RAISE 1 K9 K10
+ 0x04341705, // 0022 SUB R13 R11 K5
+ 0x4034120D, // 0023 CONNECT R13 R9 R13
+ 0x94300A0D, // 0024 GETIDX R12 R5 R13
+ 0x00381705, // 0025 ADD R14 R11 K5
+ 0x5C241C00, // 0026 MOVE R9 R14
+ 0x70020002, // 0027 JMP #002B
+ 0x4034130B, // 0028 CONNECT R13 R9 K11
+ 0x94300A0D, // 0029 GETIDX R12 R5 R13
+ 0x5C241000, // 002A MOVE R9 R8
+ 0x8C340507, // 002B GETMET R13 R2 K7
+ 0x5C3C1800, // 002C MOVE R15 R12
+ 0x5840000C, // 002D LDCONST R16 K12
+ 0x7C340600, // 002E CALL R13 3
+ 0x4C380000, // 002F LDNIL R14
+ 0x283C1B04, // 0030 GE R15 R13 K4
+ 0x783E0012, // 0031 JMPF R15 #0045
+ 0x8C3C0507, // 0032 GETMET R15 R2 K7
+ 0x5C441800, // 0033 MOVE R17 R12
+ 0x5848000D, // 0034 LDCONST R18 K13
+ 0x5C4C1A00, // 0035 MOVE R19 R13
+ 0x7C3C0800, // 0036 CALL R15 4
+ 0x14401F04, // 0037 LT R16 R15 K4
+ 0x78420000, // 0038 JMPF R16 #003A
+ 0xB0061D0F, // 0039 RAISE 1 K14 K15
+ 0x00401B05, // 003A ADD R16 R13 K5
+ 0x04441F05, // 003B SUB R17 R15 K5
+ 0x40402011, // 003C CONNECT R16 R16 R17
+ 0x94401810, // 003D GETIDX R16 R12 R16
+ 0x04441B05, // 003E SUB R17 R13 K5
+ 0x40460811, // 003F CONNECT R17 K4 R17
+ 0x94301811, // 0040 GETIDX R12 R12 R17
+ 0x60480009, // 0041 GETGBL R18 G9
+ 0x5C4C2000, // 0042 MOVE R19 R16
+ 0x7C480200, // 0043 CALL R18 1
+ 0x5C382400, // 0044 MOVE R14 R18
+ 0x1C3C1910, // 0045 EQ R15 R12 K16
+ 0x783E0004, // 0046 JMPF R15 #004C
+ 0x8C3C0711, // 0047 GETMET R15 R3 K17
+ 0x8C440312, // 0048 GETMET R17 R1 K18
+ 0x7C440200, // 0049 CALL R17 1
+ 0x7C3C0400, // 004A CALL R15 2
+ 0x70020004, // 004B JMP #0051
+ 0x8C3C0711, // 004C GETMET R15 R3 K17
+ 0x8C440313, // 004D GETMET R17 R1 K19
+ 0x5C4C1800, // 004E MOVE R19 R12
+ 0x7C440400, // 004F CALL R17 2
+ 0x7C3C0400, // 0050 CALL R15 2
+ 0x4C3C0000, // 0051 LDNIL R15
+ 0x203C1C0F, // 0052 NE R15 R14 R15
+ 0x783E0004, // 0053 JMPF R15 #0059
+ 0x8C3C0711, // 0054 GETMET R15 R3 K17
+ 0x8C440314, // 0055 GETMET R17 R1 K20
+ 0x5C4C1C00, // 0056 MOVE R19 R14
+ 0x7C440400, // 0057 CALL R17 2
+ 0x7C3C0400, // 0058 CALL R15 2
+ 0x7001FFBA, // 0059 JMP #0015
+ 0x4C2C0000, // 005A LDNIL R11
+ 0x202C0C0B, // 005B NE R11 R6 R11
+ 0x782E0008, // 005C JMPF R11 #0066
+ 0x4C2C0000, // 005D LDNIL R11
+ 0x202C0E0B, // 005E NE R11 R7 R11
+ 0x782E0005, // 005F JMPF R11 #0066
+ 0x8C2C0711, // 0060 GETMET R11 R3 K17
+ 0x8C340315, // 0061 GETMET R13 R1 K21
+ 0x5C3C0C00, // 0062 MOVE R15 R6
+ 0x5C400E00, // 0063 MOVE R16 R7
+ 0x7C340600, // 0064 CALL R13 3
+ 0x7C2C0400, // 0065 CALL R11 2
+ 0x5C2C0200, // 0066 MOVE R11 R1
+ 0x5C300000, // 0067 MOVE R12 R0
+ 0x5C340A00, // 0068 MOVE R13 R5
+ 0x5C380600, // 0069 MOVE R14 R3
+ 0x7C2C0600, // 006A CALL R11 3
+ 0x80041600, // 006B RET 1 R11
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(Rule_Matcher_init, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 4, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 3]) { /* constants */
+ /* K0 */ be_nested_str(rule),
+ /* K1 */ be_nested_str(trigger),
+ /* K2 */ be_nested_str(matchers),
+ }),
+ &be_const_str_init,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x90020001, // 0000 SETMBR R0 K0 R1
+ 0x90020202, // 0001 SETMBR R0 K1 R2
+ 0x90020403, // 0002 SETMBR R0 K2 R3
+ 0x80000000, // 0003 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: match
+********************************************************************/
+be_local_closure(Rule_Matcher_match, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 2, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str(matchers),
+ /* K1 */ be_const_int(0),
+ /* K2 */ be_nested_str(match),
+ /* K3 */ be_const_int(1),
+ }),
+ &be_const_str_match,
+ &be_const_str_solidified,
+ ( &(const binstruction[27]) { /* code */
+ 0x88080100, // 0000 GETMBR R2 R0 K0
+ 0x4C0C0000, // 0001 LDNIL R3
+ 0x1C080403, // 0002 EQ R2 R2 R3
+ 0x780A0001, // 0003 JMPF R2 #0006
+ 0x4C080000, // 0004 LDNIL R2
+ 0x80040400, // 0005 RET 1 R2
+ 0x5C080200, // 0006 MOVE R2 R1
+ 0x580C0001, // 0007 LDCONST R3 K1
+ 0x6010000C, // 0008 GETGBL R4 G12
+ 0x88140100, // 0009 GETMBR R5 R0 K0
+ 0x7C100200, // 000A CALL R4 1
+ 0x14100604, // 000B LT R4 R3 R4
+ 0x7812000C, // 000C JMPF R4 #001A
+ 0x88100100, // 000D GETMBR R4 R0 K0
+ 0x94100803, // 000E GETIDX R4 R4 R3
+ 0x8C100902, // 000F GETMET R4 R4 K2
+ 0x5C180400, // 0010 MOVE R6 R2
+ 0x7C100400, // 0011 CALL R4 2
+ 0x5C080800, // 0012 MOVE R2 R4
+ 0x4C100000, // 0013 LDNIL R4
+ 0x1C100404, // 0014 EQ R4 R2 R4
+ 0x78120001, // 0015 JMPF R4 #0018
+ 0x4C100000, // 0016 LDNIL R4
+ 0x80040800, // 0017 RET 1 R4
+ 0x000C0703, // 0018 ADD R3 R3 K3
+ 0x7001FFED, // 0019 JMP #0008
+ 0x80040400, // 001A RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Rule_Matcher
+********************************************************************/
+be_local_class(Rule_Matcher,
+ 3,
+ NULL,
+ be_nested_map(11,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key(Rule_Matcher_Wildcard, -1), be_const_class(be_class_Rule_Matcher_Wildcard) },
+ { be_const_key(Rule_Matcher_Array, -1), be_const_class(be_class_Rule_Matcher_Array) },
+ { be_const_key(trigger, -1), be_const_var(1) },
+ { be_const_key(tostring, 2), be_const_closure(Rule_Matcher_tostring_closure) },
+ { be_const_key(init, 7), be_const_closure(Rule_Matcher_init_closure) },
+ { be_const_key(Rule_Matcher_Key, -1), be_const_class(be_class_Rule_Matcher_Key) },
+ { be_const_key(parse, -1), be_const_static_closure(Rule_Matcher_parse_closure) },
+ { be_const_key(rule, -1), be_const_var(0) },
+ { be_const_key(matchers, 6), be_const_var(2) },
+ { be_const_key(Rule_Matcher_Operator, 4), be_const_class(be_class_Rule_Matcher_Operator) },
+ { be_const_key(match, -1), be_const_closure(Rule_Matcher_match_closure) },
+ })),
+ (bstring*) &be_const_str_Rule_Matcher
+);
+/*******************************************************************/
+
+void be_load_Rule_Matcher_class(bvm *vm) {
+ be_pushntvclass(vm, &be_class_Rule_Matcher);
+ be_setglobal(vm, "Rule_Matcher");
+ be_pop(vm, 1);
+}
+/********************************************************************/
+/* End of solidification */
diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_tasmota_class.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_tasmota_class.h
index af2a338d1..25461a620 100644
--- a/lib/libesp32/berry_tasmota/src/solidify/solidified_tasmota_class.h
+++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_tasmota_class.h
@@ -97,35 +97,78 @@ be_local_closure(Tasmota_exec_rules, /* name */
********************************************************************/
be_local_closure(Tasmota_cmd, /* name */
be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
+ 10, /* nstack */
+ 3, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 2]) { /* constants */
+ ( &(const bvalue[10]) { /* constants */
/* K0 */ be_nested_str(cmd_res),
- /* K1 */ be_nested_str(_cmd),
+ /* K1 */ be_nested_str(tasmota),
+ /* K2 */ be_nested_str(global),
+ /* K3 */ be_nested_str(seriallog_level),
+ /* K4 */ be_nested_str(settings),
+ /* K5 */ be_nested_str(mqttlog_level),
+ /* K6 */ be_nested_str(weblog_level),
+ /* K7 */ be_const_int(2),
+ /* K8 */ be_const_int(1),
+ /* K9 */ be_nested_str(_cmd),
}),
&be_const_str_cmd,
&be_const_str_solidified,
- ( &(const binstruction[14]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x500C0200, // 0001 LDBOOL R3 1 0
- 0x90020003, // 0002 SETMBR R0 K0 R3
- 0x8C0C0101, // 0003 GETMET R3 R0 K1
- 0x5C140200, // 0004 MOVE R5 R1
- 0x7C0C0400, // 0005 CALL R3 2
- 0x4C0C0000, // 0006 LDNIL R3
- 0x88100100, // 0007 GETMBR R4 R0 K0
- 0x50140200, // 0008 LDBOOL R5 1 0
- 0x20100805, // 0009 NE R4 R4 R5
- 0x78120000, // 000A JMPF R4 #000C
- 0x880C0100, // 000B GETMBR R3 R0 K0
- 0x90020002, // 000C SETMBR R0 K0 R2
- 0x80040600, // 000D RET 1 R3
+ ( &(const binstruction[49]) { /* code */
+ 0x880C0100, // 0000 GETMBR R3 R0 K0
+ 0x50100200, // 0001 LDBOOL R4 1 0
+ 0x90020004, // 0002 SETMBR R0 K0 R4
+ 0xB8120200, // 0003 GETNGBL R4 K1
+ 0x88100902, // 0004 GETMBR R4 R4 K2
+ 0x88100903, // 0005 GETMBR R4 R4 K3
+ 0xB8160200, // 0006 GETNGBL R5 K1
+ 0x88140B04, // 0007 GETMBR R5 R5 K4
+ 0x88140B05, // 0008 GETMBR R5 R5 K5
+ 0xB81A0200, // 0009 GETNGBL R6 K1
+ 0x88180D04, // 000A GETMBR R6 R6 K4
+ 0x88180D06, // 000B GETMBR R6 R6 K6
+ 0x780A000E, // 000C JMPF R2 #001C
+ 0x281C0907, // 000D GE R7 R4 K7
+ 0x781E0002, // 000E JMPF R7 #0012
+ 0xB81E0200, // 000F GETNGBL R7 K1
+ 0x881C0F02, // 0010 GETMBR R7 R7 K2
+ 0x901E0708, // 0011 SETMBR R7 K3 K8
+ 0x281C0B07, // 0012 GE R7 R5 K7
+ 0x781E0002, // 0013 JMPF R7 #0017
+ 0xB81E0200, // 0014 GETNGBL R7 K1
+ 0x881C0F04, // 0015 GETMBR R7 R7 K4
+ 0x901E0B08, // 0016 SETMBR R7 K5 K8
+ 0x281C0D07, // 0017 GE R7 R6 K7
+ 0x781E0002, // 0018 JMPF R7 #001C
+ 0xB81E0200, // 0019 GETNGBL R7 K1
+ 0x881C0F04, // 001A GETMBR R7 R7 K4
+ 0x901E0D08, // 001B SETMBR R7 K6 K8
+ 0x8C1C0109, // 001C GETMET R7 R0 K9
+ 0x5C240200, // 001D MOVE R9 R1
+ 0x7C1C0400, // 001E CALL R7 2
+ 0x4C1C0000, // 001F LDNIL R7
+ 0x88200100, // 0020 GETMBR R8 R0 K0
+ 0x50240200, // 0021 LDBOOL R9 1 0
+ 0x20201009, // 0022 NE R8 R8 R9
+ 0x78220000, // 0023 JMPF R8 #0025
+ 0x881C0100, // 0024 GETMBR R7 R0 K0
+ 0x90020003, // 0025 SETMBR R0 K0 R3
+ 0x780A0008, // 0026 JMPF R2 #0030
+ 0xB8220200, // 0027 GETNGBL R8 K1
+ 0x88201102, // 0028 GETMBR R8 R8 K2
+ 0x90220604, // 0029 SETMBR R8 K3 R4
+ 0xB8220200, // 002A GETNGBL R8 K1
+ 0x88201104, // 002B GETMBR R8 R8 K4
+ 0x90220A05, // 002C SETMBR R8 K5 R5
+ 0xB8220200, // 002D GETNGBL R8 K1
+ 0x88201104, // 002E GETMBR R8 R8 K4
+ 0x90220C06, // 002F SETMBR R8 K6 R6
+ 0x80040E00, // 0030 RET 1 R7
})
)
);
@@ -190,43 +233,45 @@ be_local_closure(Tasmota_remove_rule, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 6]) { /* constants */
+ ( &(const bvalue[ 7]) { /* constants */
/* K0 */ be_nested_str(_rules),
/* K1 */ be_const_int(0),
/* K2 */ be_nested_str(trig),
- /* K3 */ be_nested_str(id),
- /* K4 */ be_nested_str(remove),
- /* K5 */ be_const_int(1),
+ /* K3 */ be_nested_str(rule),
+ /* K4 */ be_nested_str(id),
+ /* K5 */ be_nested_str(remove),
+ /* K6 */ be_const_int(1),
}),
&be_const_str_remove_rule,
&be_const_str_solidified,
- ( &(const binstruction[26]) { /* code */
+ ( &(const binstruction[27]) { /* code */
0x880C0100, // 0000 GETMBR R3 R0 K0
- 0x780E0016, // 0001 JMPF R3 #0019
+ 0x780E0017, // 0001 JMPF R3 #001A
0x580C0001, // 0002 LDCONST R3 K1
0x6010000C, // 0003 GETGBL R4 G12
0x88140100, // 0004 GETMBR R5 R0 K0
0x7C100200, // 0005 CALL R4 1
0x14100604, // 0006 LT R4 R3 R4
- 0x78120010, // 0007 JMPF R4 #0019
+ 0x78120011, // 0007 JMPF R4 #001A
0x88100100, // 0008 GETMBR R4 R0 K0
0x94100803, // 0009 GETIDX R4 R4 R3
0x88100902, // 000A GETMBR R4 R4 K2
- 0x1C100801, // 000B EQ R4 R4 R1
- 0x78120009, // 000C JMPF R4 #0017
- 0x88100100, // 000D GETMBR R4 R0 K0
- 0x94100803, // 000E GETIDX R4 R4 R3
- 0x88100903, // 000F GETMBR R4 R4 K3
- 0x1C100802, // 0010 EQ R4 R4 R2
- 0x78120004, // 0011 JMPF R4 #0017
- 0x88100100, // 0012 GETMBR R4 R0 K0
- 0x8C100904, // 0013 GETMET R4 R4 K4
- 0x5C180600, // 0014 MOVE R6 R3
- 0x7C100400, // 0015 CALL R4 2
- 0x70020000, // 0016 JMP #0018
- 0x000C0705, // 0017 ADD R3 R3 K5
- 0x7001FFE9, // 0018 JMP #0003
- 0x80000000, // 0019 RET 0
+ 0x88100903, // 000B GETMBR R4 R4 K3
+ 0x1C100801, // 000C EQ R4 R4 R1
+ 0x78120009, // 000D JMPF R4 #0018
+ 0x88100100, // 000E GETMBR R4 R0 K0
+ 0x94100803, // 000F GETIDX R4 R4 R3
+ 0x88100904, // 0010 GETMBR R4 R4 K4
+ 0x1C100802, // 0011 EQ R4 R4 R2
+ 0x78120004, // 0012 JMPF R4 #0018
+ 0x88100100, // 0013 GETMBR R4 R0 K0
+ 0x8C100905, // 0014 GETMET R4 R4 K5
+ 0x5C180600, // 0015 MOVE R6 R3
+ 0x7C100400, // 0016 CALL R4 2
+ 0x70020000, // 0017 JMP #0019
+ 0x000C0706, // 0018 ADD R3 R3 K6
+ 0x7001FFE8, // 0019 JMP #0003
+ 0x80000000, // 001A RET 0
})
)
);
@@ -1564,7 +1609,7 @@ be_local_closure(Tasmota_urlfetch, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[16]) { /* constants */
+ ( &(const bvalue[17]) { /* constants */
/* K0 */ be_nested_str(string),
/* K1 */ be_nested_str(split),
/* K2 */ be_nested_str(_X2F),
@@ -1572,19 +1617,20 @@ be_local_closure(Tasmota_urlfetch, /* name */
/* K4 */ be_const_int(0),
/* K5 */ be_nested_str(index_X2Ehtml),
/* K6 */ be_nested_str(webclient),
- /* K7 */ be_nested_str(begin),
- /* K8 */ be_nested_str(GET),
- /* K9 */ be_nested_str(status_X3A_X20),
- /* K10 */ be_nested_str(connection_error),
- /* K11 */ be_nested_str(write_file),
- /* K12 */ be_nested_str(close),
- /* K13 */ be_nested_str(log),
- /* K14 */ be_nested_str(BRY_X3A_X20Fetched_X20),
- /* K15 */ be_const_int(3),
+ /* K7 */ be_nested_str(set_follow_redirects),
+ /* K8 */ be_nested_str(begin),
+ /* K9 */ be_nested_str(GET),
+ /* K10 */ be_nested_str(status_X3A_X20),
+ /* K11 */ be_nested_str(connection_error),
+ /* K12 */ be_nested_str(write_file),
+ /* K13 */ be_nested_str(close),
+ /* K14 */ be_nested_str(log),
+ /* K15 */ be_nested_str(BRY_X3A_X20Fetched_X20),
+ /* K16 */ be_const_int(3),
}),
&be_const_str_urlfetch,
&be_const_str_solidified,
- ( &(const binstruction[45]) { /* code */
+ ( &(const binstruction[48]) { /* code */
0x4C0C0000, // 0000 LDNIL R3
0x1C0C0403, // 0001 EQ R3 R2 R3
0x780E000D, // 0002 JMPF R3 #0011
@@ -1605,31 +1651,34 @@ be_local_closure(Tasmota_urlfetch, /* name */
0xB80E0C00, // 0011 GETNGBL R3 K6
0x7C0C0000, // 0012 CALL R3 0
0x8C100707, // 0013 GETMET R4 R3 K7
- 0x5C180200, // 0014 MOVE R6 R1
+ 0x50180200, // 0014 LDBOOL R6 1 0
0x7C100400, // 0015 CALL R4 2
0x8C100708, // 0016 GETMET R4 R3 K8
- 0x7C100200, // 0017 CALL R4 1
- 0x541600C7, // 0018 LDINT R5 200
- 0x20140805, // 0019 NE R5 R4 R5
- 0x78160004, // 001A JMPF R5 #0020
- 0x60140008, // 001B GETGBL R5 G8
- 0x5C180800, // 001C MOVE R6 R4
- 0x7C140200, // 001D CALL R5 1
- 0x00161205, // 001E ADD R5 K9 R5
- 0xB0061405, // 001F RAISE 1 K10 R5
- 0x8C14070B, // 0020 GETMET R5 R3 K11
- 0x5C1C0400, // 0021 MOVE R7 R2
- 0x7C140400, // 0022 CALL R5 2
- 0x8C18070C, // 0023 GETMET R6 R3 K12
- 0x7C180200, // 0024 CALL R6 1
- 0x8C18010D, // 0025 GETMET R6 R0 K13
- 0x60200008, // 0026 GETGBL R8 G8
- 0x5C240A00, // 0027 MOVE R9 R5
- 0x7C200200, // 0028 CALL R8 1
- 0x00221C08, // 0029 ADD R8 K14 R8
- 0x5824000F, // 002A LDCONST R9 K15
- 0x7C180600, // 002B CALL R6 3
- 0x80040800, // 002C RET 1 R4
+ 0x5C180200, // 0017 MOVE R6 R1
+ 0x7C100400, // 0018 CALL R4 2
+ 0x8C100709, // 0019 GETMET R4 R3 K9
+ 0x7C100200, // 001A CALL R4 1
+ 0x541600C7, // 001B LDINT R5 200
+ 0x20140805, // 001C NE R5 R4 R5
+ 0x78160004, // 001D JMPF R5 #0023
+ 0x60140008, // 001E GETGBL R5 G8
+ 0x5C180800, // 001F MOVE R6 R4
+ 0x7C140200, // 0020 CALL R5 1
+ 0x00161405, // 0021 ADD R5 K10 R5
+ 0xB0061605, // 0022 RAISE 1 K11 R5
+ 0x8C14070C, // 0023 GETMET R5 R3 K12
+ 0x5C1C0400, // 0024 MOVE R7 R2
+ 0x7C140400, // 0025 CALL R5 2
+ 0x8C18070D, // 0026 GETMET R6 R3 K13
+ 0x7C180200, // 0027 CALL R6 1
+ 0x8C18010E, // 0028 GETMET R6 R0 K14
+ 0x60200008, // 0029 GETGBL R8 G8
+ 0x5C240A00, // 002A MOVE R9 R5
+ 0x7C200200, // 002B CALL R8 1
+ 0x00221E08, // 002C ADD R8 K15 R8
+ 0x58240010, // 002D LDCONST R9 K16
+ 0x7C180600, // 002E CALL R6 3
+ 0x80040800, // 002F RET 1 R4
})
)
);
@@ -1932,7 +1981,7 @@ be_local_closure(Tasmota_hs2rgb, /* name */
********************************************************************/
be_local_closure(Tasmota_try_rule, /* name */
be_nested_proto(
- 15, /* nstack */
+ 9, /* nstack */
4, /* argc */
2, /* varg */
0, /* has upvals */
@@ -1940,168 +1989,31 @@ be_local_closure(Tasmota_try_rule, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[16]) { /* constants */
- /* K0 */ be_nested_str(string),
- /* K1 */ be_nested_str(find_op),
- /* K2 */ be_nested_str(split),
- /* K3 */ be_const_int(0),
- /* K4 */ be_nested_str(_X23),
- /* K5 */ be_nested_str(find_key_i),
- /* K6 */ be_const_int(1),
- /* K7 */ be_const_int(2),
- /* K8 */ be_nested_str(_X3D_X3D),
- /* K9 */ be_nested_str(_X21_X3D_X3D),
- /* K10 */ be_nested_str(_X3D),
- /* K11 */ be_nested_str(_X21_X3D),
- /* K12 */ be_nested_str(_X3E),
- /* K13 */ be_nested_str(_X3E_X3D),
- /* K14 */ be_nested_str(_X3C),
- /* K15 */ be_nested_str(_X3C_X3D),
+ ( &(const bvalue[ 2]) { /* constants */
+ /* K0 */ be_nested_str(match),
+ /* K1 */ be_nested_str(trigger),
}),
&be_const_str_try_rule,
&be_const_str_solidified,
- ( &(const binstruction[141]) { /* code */
- 0xA4120000, // 0000 IMPORT R4 K0
- 0x8C140101, // 0001 GETMET R5 R0 K1
- 0x5C1C0400, // 0002 MOVE R7 R2
- 0x7C140400, // 0003 CALL R5 2
- 0x5C180200, // 0004 MOVE R6 R1
- 0x8C1C0902, // 0005 GETMET R7 R4 K2
- 0x94240B03, // 0006 GETIDX R9 R5 K3
- 0x58280004, // 0007 LDCONST R10 K4
- 0x7C1C0600, // 0008 CALL R7 3
- 0x58200003, // 0009 LDCONST R8 K3
- 0x6024000C, // 000A GETGBL R9 G12
- 0x5C280E00, // 000B MOVE R10 R7
- 0x7C240200, // 000C CALL R9 1
- 0x14241009, // 000D LT R9 R8 R9
- 0x7826000C, // 000E JMPF R9 #001C
- 0x94240E08, // 000F GETIDX R9 R7 R8
- 0x8C280105, // 0010 GETMET R10 R0 K5
- 0x5C300C00, // 0011 MOVE R12 R6
- 0x5C341200, // 0012 MOVE R13 R9
- 0x7C280600, // 0013 CALL R10 3
- 0x4C2C0000, // 0014 LDNIL R11
- 0x1C2C140B, // 0015 EQ R11 R10 R11
- 0x782E0001, // 0016 JMPF R11 #0019
- 0x502C0000, // 0017 LDBOOL R11 0 0
- 0x80041600, // 0018 RET 1 R11
- 0x94180C0A, // 0019 GETIDX R6 R6 R10
- 0x00201106, // 001A ADD R8 R8 K6
- 0x7001FFED, // 001B JMP #000A
- 0x94240B06, // 001C GETIDX R9 R5 K6
- 0x94280B07, // 001D GETIDX R10 R5 K7
- 0x78260066, // 001E JMPF R9 #0086
- 0x1C2C1308, // 001F EQ R11 R9 K8
- 0x782E000A, // 0020 JMPF R11 #002C
- 0x602C0008, // 0021 GETGBL R11 G8
- 0x5C300C00, // 0022 MOVE R12 R6
- 0x7C2C0200, // 0023 CALL R11 1
- 0x60300008, // 0024 GETGBL R12 G8
- 0x5C341400, // 0025 MOVE R13 R10
- 0x7C300200, // 0026 CALL R12 1
- 0x202C160C, // 0027 NE R11 R11 R12
- 0x782E0001, // 0028 JMPF R11 #002B
- 0x502C0000, // 0029 LDBOOL R11 0 0
- 0x80041600, // 002A RET 1 R11
- 0x70020059, // 002B JMP #0086
- 0x1C2C1309, // 002C EQ R11 R9 K9
- 0x782E000A, // 002D JMPF R11 #0039
- 0x602C0008, // 002E GETGBL R11 G8
- 0x5C300C00, // 002F MOVE R12 R6
- 0x7C2C0200, // 0030 CALL R11 1
- 0x60300008, // 0031 GETGBL R12 G8
- 0x5C341400, // 0032 MOVE R13 R10
- 0x7C300200, // 0033 CALL R12 1
- 0x1C2C160C, // 0034 EQ R11 R11 R12
- 0x782E0001, // 0035 JMPF R11 #0038
- 0x502C0000, // 0036 LDBOOL R11 0 0
- 0x80041600, // 0037 RET 1 R11
- 0x7002004C, // 0038 JMP #0086
- 0x1C2C130A, // 0039 EQ R11 R9 K10
- 0x782E000A, // 003A JMPF R11 #0046
- 0x602C000A, // 003B GETGBL R11 G10
- 0x5C300C00, // 003C MOVE R12 R6
- 0x7C2C0200, // 003D CALL R11 1
- 0x6030000A, // 003E GETGBL R12 G10
- 0x5C341400, // 003F MOVE R13 R10
- 0x7C300200, // 0040 CALL R12 1
- 0x202C160C, // 0041 NE R11 R11 R12
- 0x782E0001, // 0042 JMPF R11 #0045
- 0x502C0000, // 0043 LDBOOL R11 0 0
- 0x80041600, // 0044 RET 1 R11
- 0x7002003F, // 0045 JMP #0086
- 0x1C2C130B, // 0046 EQ R11 R9 K11
- 0x782E000A, // 0047 JMPF R11 #0053
- 0x602C000A, // 0048 GETGBL R11 G10
- 0x5C300C00, // 0049 MOVE R12 R6
- 0x7C2C0200, // 004A CALL R11 1
- 0x6030000A, // 004B GETGBL R12 G10
- 0x5C341400, // 004C MOVE R13 R10
- 0x7C300200, // 004D CALL R12 1
- 0x1C2C160C, // 004E EQ R11 R11 R12
- 0x782E0001, // 004F JMPF R11 #0052
- 0x502C0000, // 0050 LDBOOL R11 0 0
- 0x80041600, // 0051 RET 1 R11
- 0x70020032, // 0052 JMP #0086
- 0x1C2C130C, // 0053 EQ R11 R9 K12
- 0x782E000A, // 0054 JMPF R11 #0060
- 0x602C000A, // 0055 GETGBL R11 G10
- 0x5C300C00, // 0056 MOVE R12 R6
- 0x7C2C0200, // 0057 CALL R11 1
- 0x6030000A, // 0058 GETGBL R12 G10
- 0x5C341400, // 0059 MOVE R13 R10
- 0x7C300200, // 005A CALL R12 1
- 0x182C160C, // 005B LE R11 R11 R12
- 0x782E0001, // 005C JMPF R11 #005F
- 0x502C0000, // 005D LDBOOL R11 0 0
- 0x80041600, // 005E RET 1 R11
- 0x70020025, // 005F JMP #0086
- 0x1C2C130D, // 0060 EQ R11 R9 K13
- 0x782E000A, // 0061 JMPF R11 #006D
- 0x602C000A, // 0062 GETGBL R11 G10
- 0x5C300C00, // 0063 MOVE R12 R6
- 0x7C2C0200, // 0064 CALL R11 1
- 0x6030000A, // 0065 GETGBL R12 G10
- 0x5C341400, // 0066 MOVE R13 R10
- 0x7C300200, // 0067 CALL R12 1
- 0x142C160C, // 0068 LT R11 R11 R12
- 0x782E0001, // 0069 JMPF R11 #006C
- 0x502C0000, // 006A LDBOOL R11 0 0
- 0x80041600, // 006B RET 1 R11
- 0x70020018, // 006C JMP #0086
- 0x1C2C130E, // 006D EQ R11 R9 K14
- 0x782E000A, // 006E JMPF R11 #007A
- 0x602C000A, // 006F GETGBL R11 G10
- 0x5C300C00, // 0070 MOVE R12 R6
- 0x7C2C0200, // 0071 CALL R11 1
- 0x6030000A, // 0072 GETGBL R12 G10
- 0x5C341400, // 0073 MOVE R13 R10
- 0x7C300200, // 0074 CALL R12 1
- 0x282C160C, // 0075 GE R11 R11 R12
- 0x782E0001, // 0076 JMPF R11 #0079
- 0x502C0000, // 0077 LDBOOL R11 0 0
- 0x80041600, // 0078 RET 1 R11
- 0x7002000B, // 0079 JMP #0086
- 0x1C2C130F, // 007A EQ R11 R9 K15
- 0x782E0009, // 007B JMPF R11 #0086
- 0x602C000A, // 007C GETGBL R11 G10
- 0x5C300C00, // 007D MOVE R12 R6
- 0x7C2C0200, // 007E CALL R11 1
- 0x6030000A, // 007F GETGBL R12 G10
- 0x5C341400, // 0080 MOVE R13 R10
- 0x7C300200, // 0081 CALL R12 1
- 0x242C160C, // 0082 GT R11 R11 R12
- 0x782E0001, // 0083 JMPF R11 #0086
- 0x502C0000, // 0084 LDBOOL R11 0 0
- 0x80041600, // 0085 RET 1 R11
- 0x5C2C0600, // 0086 MOVE R11 R3
- 0x5C300C00, // 0087 MOVE R12 R6
- 0x94340B03, // 0088 GETIDX R13 R5 K3
- 0x5C380200, // 0089 MOVE R14 R1
- 0x7C2C0600, // 008A CALL R11 3
- 0x502C0200, // 008B LDBOOL R11 1 0
- 0x80041600, // 008C RET 1 R11
+ ( &(const binstruction[18]) { /* code */
+ 0x8C100500, // 0000 GETMET R4 R2 K0
+ 0x5C180200, // 0001 MOVE R6 R1
+ 0x7C100400, // 0002 CALL R4 2
+ 0x4C140000, // 0003 LDNIL R5
+ 0x20140805, // 0004 NE R5 R4 R5
+ 0x78160009, // 0005 JMPF R5 #0010
+ 0x4C140000, // 0006 LDNIL R5
+ 0x20140605, // 0007 NE R5 R3 R5
+ 0x78160004, // 0008 JMPF R5 #000E
+ 0x5C140600, // 0009 MOVE R5 R3
+ 0x5C180800, // 000A MOVE R6 R4
+ 0x881C0501, // 000B GETMBR R7 R2 K1
+ 0x5C200200, // 000C MOVE R8 R1
+ 0x7C140600, // 000D CALL R5 3
+ 0x50140200, // 000E LDBOOL R5 1 0
+ 0x80040A00, // 000F RET 1 R5
+ 0x50140000, // 0010 LDBOOL R5 0 0
+ 0x80040A00, // 0011 RET 1 R5
})
)
);
@@ -2216,7 +2128,7 @@ be_local_closure(Tasmota_add_cmd, /* name */
********************************************************************/
be_local_closure(Tasmota_find_op, /* name */
be_nested_proto(
- 13, /* nstack */
+ 7, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
@@ -2224,58 +2136,46 @@ be_local_closure(Tasmota_find_op, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 6]) { /* constants */
- /* K0 */ be_nested_str(string),
- /* K1 */ be_nested_str(_X3D_X3C_X3E_X21),
- /* K2 */ be_nested_str(_find_op),
- /* K3 */ be_const_int(0),
- /* K4 */ be_nested_str(split),
- /* K5 */ be_const_int(1),
+ ( &(const bvalue[ 4]) { /* constants */
+ /* K0 */ be_nested_str(_find_op),
+ /* K1 */ be_const_int(0),
+ /* K2 */ be_const_int(1),
+ /* K3 */ be_const_int(2147483647),
}),
&be_const_str_find_op,
&be_const_str_solidified,
- ( &(const binstruction[41]) { /* code */
- 0xA40A0000, // 0000 IMPORT R2 K0
- 0x580C0001, // 0001 LDCONST R3 K1
- 0x8C100102, // 0002 GETMET R4 R0 K2
- 0x5C180200, // 0003 MOVE R6 R1
- 0x501C0000, // 0004 LDBOOL R7 0 0
- 0x7C100600, // 0005 CALL R4 3
- 0x28140903, // 0006 GE R5 R4 K3
- 0x78160018, // 0007 JMPF R5 #0021
- 0x8C140504, // 0008 GETMET R5 R2 K4
- 0x5C1C0200, // 0009 MOVE R7 R1
- 0x5C200800, // 000A MOVE R8 R4
- 0x7C140600, // 000B CALL R5 3
- 0x94180B03, // 000C GETIDX R6 R5 K3
- 0x941C0B05, // 000D GETIDX R7 R5 K5
- 0x8C200102, // 000E GETMET R8 R0 K2
- 0x5C280E00, // 000F MOVE R10 R7
- 0x502C0200, // 0010 LDBOOL R11 1 0
- 0x7C200600, // 0011 CALL R8 3
- 0x5C101000, // 0012 MOVE R4 R8
- 0x28200903, // 0013 GE R8 R4 K3
- 0x7822000B, // 0014 JMPF R8 #0021
- 0x8C200504, // 0015 GETMET R8 R2 K4
- 0x5C280E00, // 0016 MOVE R10 R7
- 0x5C2C0800, // 0017 MOVE R11 R4
- 0x7C200600, // 0018 CALL R8 3
- 0x94241103, // 0019 GETIDX R9 R8 K3
- 0x94281105, // 001A GETIDX R10 R8 K5
- 0x602C0012, // 001B GETGBL R11 G18
- 0x7C2C0000, // 001C CALL R11 0
- 0x40301606, // 001D CONNECT R12 R11 R6
- 0x40301609, // 001E CONNECT R12 R11 R9
- 0x4030160A, // 001F CONNECT R12 R11 R10
- 0x80041600, // 0020 RET 1 R11
- 0x60140012, // 0021 GETGBL R5 G18
- 0x7C140000, // 0022 CALL R5 0
- 0x40180A01, // 0023 CONNECT R6 R5 R1
- 0x4C180000, // 0024 LDNIL R6
- 0x40180A06, // 0025 CONNECT R6 R5 R6
- 0x4C180000, // 0026 LDNIL R6
- 0x40180A06, // 0027 CONNECT R6 R5 R6
- 0x80040A00, // 0028 RET 1 R5
+ ( &(const binstruction[31]) { /* code */
+ 0x8C080100, // 0000 GETMET R2 R0 K0
+ 0x5C100200, // 0001 MOVE R4 R1
+ 0x7C080400, // 0002 CALL R2 2
+ 0x280C0501, // 0003 GE R3 R2 K1
+ 0x780E0011, // 0004 JMPF R3 #0017
+ 0x540E7FFE, // 0005 LDINT R3 32767
+ 0x2C0C0403, // 0006 AND R3 R2 R3
+ 0x5412000F, // 0007 LDINT R4 16
+ 0x3C100404, // 0008 SHR R4 R2 R4
+ 0x60140012, // 0009 GETGBL R5 G18
+ 0x7C140000, // 000A CALL R5 0
+ 0x04180702, // 000B SUB R6 R3 K2
+ 0x401A0206, // 000C CONNECT R6 K1 R6
+ 0x94180206, // 000D GETIDX R6 R1 R6
+ 0x40180A06, // 000E CONNECT R6 R5 R6
+ 0x04180902, // 000F SUB R6 R4 K2
+ 0x40180606, // 0010 CONNECT R6 R3 R6
+ 0x94180206, // 0011 GETIDX R6 R1 R6
+ 0x40180A06, // 0012 CONNECT R6 R5 R6
+ 0x40180903, // 0013 CONNECT R6 R4 K3
+ 0x94180206, // 0014 GETIDX R6 R1 R6
+ 0x40180A06, // 0015 CONNECT R6 R5 R6
+ 0x80040A00, // 0016 RET 1 R5
+ 0x600C0012, // 0017 GETGBL R3 G18
+ 0x7C0C0000, // 0018 CALL R3 0
+ 0x40100601, // 0019 CONNECT R4 R3 R1
+ 0x4C100000, // 001A LDNIL R4
+ 0x40100604, // 001B CONNECT R4 R3 R4
+ 0x4C100000, // 001C LDNIL R4
+ 0x40100604, // 001D CONNECT R4 R3 R4
+ 0x80040600, // 001E RET 1 R3
})
)
);
@@ -2349,18 +2249,20 @@ be_local_closure(Tasmota_add_rule, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
- ( &(const bvalue[ 7]) { /* constants */
+ ( &(const bvalue[ 9]) { /* constants */
/* K0 */ be_nested_str(check_not_method),
/* K1 */ be_nested_str(_rules),
/* K2 */ be_nested_str(function),
/* K3 */ be_nested_str(push),
/* K4 */ be_nested_str(Trigger),
- /* K5 */ be_nested_str(value_error),
- /* K6 */ be_nested_str(the_X20second_X20argument_X20is_X20not_X20a_X20function),
+ /* K5 */ be_nested_str(Rule_Matcher),
+ /* K6 */ be_nested_str(parse),
+ /* K7 */ be_nested_str(value_error),
+ /* K8 */ be_nested_str(the_X20second_X20argument_X20is_X20not_X20a_X20function),
}),
&be_const_str_add_rule,
&be_const_str_solidified,
- ( &(const binstruction[24]) { /* code */
+ ( &(const binstruction[27]) { /* code */
0x8C100100, // 0000 GETMET R4 R0 K0
0x5C180400, // 0001 MOVE R6 R2
0x7C100400, // 0002 CALL R4 2
@@ -2373,18 +2275,21 @@ be_local_closure(Tasmota_add_rule, /* name */
0x5C140400, // 0009 MOVE R5 R2
0x7C100200, // 000A CALL R4 1
0x1C100902, // 000B EQ R4 R4 K2
- 0x78120008, // 000C JMPF R4 #0016
+ 0x7812000B, // 000C JMPF R4 #0019
0x88100101, // 000D GETMBR R4 R0 K1
0x8C100903, // 000E GETMET R4 R4 K3
0xB81A0800, // 000F GETNGBL R6 K4
- 0x5C1C0200, // 0010 MOVE R7 R1
- 0x5C200400, // 0011 MOVE R8 R2
- 0x5C240600, // 0012 MOVE R9 R3
- 0x7C180600, // 0013 CALL R6 3
- 0x7C100400, // 0014 CALL R4 2
- 0x70020000, // 0015 JMP #0017
- 0xB0060B06, // 0016 RAISE 1 K5 K6
- 0x80000000, // 0017 RET 0
+ 0x881C0105, // 0010 GETMBR R7 R0 K5
+ 0x8C1C0F06, // 0011 GETMET R7 R7 K6
+ 0x5C240200, // 0012 MOVE R9 R1
+ 0x7C1C0400, // 0013 CALL R7 2
+ 0x5C200400, // 0014 MOVE R8 R2
+ 0x5C240600, // 0015 MOVE R9 R3
+ 0x7C180600, // 0016 CALL R6 3
+ 0x7C100400, // 0017 CALL R4 2
+ 0x70020000, // 0018 JMP #001A
+ 0xB0060F08, // 0019 RAISE 1 K7 K8
+ 0x80000000, // 001A RET 0
})
)
);
@@ -2611,12 +2516,12 @@ be_local_closure(Tasmota_fast_loop, /* name */
0x600C000C, // 0005 GETGBL R3 G12
0x5C100200, // 0006 MOVE R4 R1
0x7C0C0200, // 0007 CALL R3 1
- 0x140C0403, // 0008 LT R3 R2 R3
- 0x780E0003, // 0009 JMPF R3 #000E
- 0x940C0202, // 000A GETIDX R3 R1 R2
- 0x7C0C0000, // 000B CALL R3 0
+ 0x14100403, // 0008 LT R4 R2 R3
+ 0x78120003, // 0009 JMPF R4 #000E
+ 0x94100202, // 000A GETIDX R4 R1 R2
+ 0x7C100000, // 000B CALL R4 0
0x00080502, // 000C ADD R2 R2 K2
- 0x7001FFF6, // 000D JMP #0005
+ 0x7001FFF9, // 000D JMP #0008
0x80000000, // 000E RET 0
})
)
diff --git a/lib/libesp32_lvgl/lvgl/library.json b/lib/libesp32_lvgl/lvgl/library.json
index fe8ef4c15..928d7beed 100644
--- a/lib/libesp32_lvgl/lvgl/library.json
+++ b/lib/libesp32_lvgl/lvgl/library.json
@@ -1,6 +1,6 @@
{
"name": "lvgl",
- "version": "8.3.3",
+ "version": "8.3.6",
"keywords": "graphics, gui, embedded, tft, lvgl",
"description": "Graphics library to create embedded GUI with easy-to-use graphical elements, beautiful visual effects and low memory footprint. It offers anti-aliasing, opacity, and animations using only one frame buffer.",
"repository": {
@@ -8,13 +8,11 @@
"url": "https://github.com/lvgl/lvgl.git"
},
"build": {
- "includeDir": "."
+ "includeDir": ".",
+ "flags": [ "-I$PROJECT_DIR/tasmota/lvgl_berry" ]
},
"license": "MIT",
"homepage": "https://lvgl.io",
"frameworks": "arduino",
- "platforms": "espressif32",
- "build": {
- "flags": [ "-I$PROJECT_DIR/tasmota/lvgl_berry" ]
- }
+ "platforms": "espressif32"
}
diff --git a/lib/libesp32_lvgl/lvgl/library.properties b/lib/libesp32_lvgl/lvgl/library.properties
index 816446a93..19de5008b 100644
--- a/lib/libesp32_lvgl/lvgl/library.properties
+++ b/lib/libesp32_lvgl/lvgl/library.properties
@@ -1,5 +1,5 @@
name=lvgl
-version=8.3.3
+version=8.3.6
author=kisvegabor
maintainer=kisvegabor,embeddedt,pete-pjb
sentence=Full-featured Graphics Library for Embedded Systems
diff --git a/lib/libesp32_lvgl/lvgl/lv_conf_template.h b/lib/libesp32_lvgl/lvgl/lv_conf_template.h
index 3d087f0f3..f36af2a28 100644
--- a/lib/libesp32_lvgl/lvgl/lv_conf_template.h
+++ b/lib/libesp32_lvgl/lvgl/lv_conf_template.h
@@ -1,6 +1,6 @@
/**
* @file lv_conf.h
- * Configuration file for v8.3.3
+ * Configuration file for v8.3.6
*/
/*
@@ -89,6 +89,9 @@
#if LV_TICK_CUSTOM
#define LV_TICK_CUSTOM_INCLUDE "Arduino.h" /*Header for the system time function*/
#define LV_TICK_CUSTOM_SYS_TIME_EXPR (millis()) /*Expression evaluating to current system time in ms*/
+ /*If using lvgl as ESP32 component*/
+ // #define LV_TICK_CUSTOM_INCLUDE "esp_timer.h"
+ // #define LV_TICK_CUSTOM_SYS_TIME_EXPR ((esp_timer_get_time() / 1000LL))
#endif /*LV_TICK_CUSTOM*/
/*Default Dot Per Inch. Used to initialize default sizes such as widgets sized, style paddings.
@@ -180,7 +183,7 @@
#define LV_USE_GPU_STM32_DMA2D 0
#if LV_USE_GPU_STM32_DMA2D
/*Must be defined to include path of CMSIS header of target processor
- e.g. "stm32f769xx.h" or "stm32f429xx.h"*/
+ e.g. "stm32f7xx.h" or "stm32f4xx.h"*/
#define LV_GPU_DMA2D_CMSIS_INCLUDE
#endif
diff --git a/lib/libesp32_lvgl/lvgl/lvgl.h b/lib/libesp32_lvgl/lvgl/lvgl.h
index c0be411b2..6eedc7f23 100644
--- a/lib/libesp32_lvgl/lvgl/lvgl.h
+++ b/lib/libesp32_lvgl/lvgl/lvgl.h
@@ -15,7 +15,7 @@ extern "C" {
***************************/
#define LVGL_VERSION_MAJOR 8
#define LVGL_VERSION_MINOR 3
-#define LVGL_VERSION_PATCH 3
+#define LVGL_VERSION_PATCH 6
#define LVGL_VERSION_INFO ""
/*********************
diff --git a/lib/libesp32_lvgl/lvgl/src/core/lv_group.c b/lib/libesp32_lvgl/lvgl/src/core/lv_group.c
index 2c4fa93e9..63fde71a0 100644
--- a/lib/libesp32_lvgl/lvgl/src/core/lv_group.c
+++ b/lib/libesp32_lvgl/lvgl/src/core/lv_group.c
@@ -92,6 +92,7 @@ void lv_group_del(lv_group_t * group)
indev = lv_indev_get_next(indev);
}
+ if(default_group == group) default_group = NULL;
_lv_ll_clear(&(group->obj_ll));
_lv_ll_remove(&LV_GC_ROOT(_lv_group_ll), group);
lv_mem_free(group);
diff --git a/lib/libesp32_lvgl/lvgl/src/core/lv_indev.c b/lib/libesp32_lvgl/lvgl/src/core/lv_indev.c
index ab1265ec8..caf9c3178 100644
--- a/lib/libesp32_lvgl/lvgl/src/core/lv_indev.c
+++ b/lib/libesp32_lvgl/lvgl/src/core/lv_indev.c
@@ -852,8 +852,6 @@ static void indev_proc_press(_lv_indev_proc_t * proc)
if(indev_reset_check(proc)) return;
}
- lv_obj_transform_point(indev_obj_act, &proc->types.pointer.act_point, true, true);
-
/*If a new object was found reset some variables and send a pressed event handler*/
if(indev_obj_act != proc->types.pointer.act_obj) {
proc->types.pointer.last_point.x = proc->types.pointer.act_point.x;
@@ -987,6 +985,27 @@ static void indev_proc_release(_lv_indev_proc_t * proc)
proc->pr_timestamp = 0;
proc->longpr_rep_timestamp = 0;
+
+ /*Get the transformed vector with this object*/
+ if(scroll_obj) {
+ int16_t angle = 0;
+ int16_t zoom = 256;
+ lv_point_t pivot = { 0, 0 };
+ lv_obj_t * parent = scroll_obj;
+ while(parent) {
+ angle += lv_obj_get_style_transform_angle(parent, 0);
+ zoom *= (lv_obj_get_style_transform_zoom(parent, 0) / 256);
+ parent = lv_obj_get_parent(parent);
+ }
+
+ if(angle != 0 || zoom != LV_IMG_ZOOM_NONE) {
+ angle = -angle;
+ zoom = (256 * 256) / zoom;
+ lv_point_transform(&proc->types.pointer.scroll_throw_vect, angle, zoom, &pivot);
+ lv_point_transform(&proc->types.pointer.scroll_throw_vect_ori, angle, zoom, &pivot);
+ }
+ }
+
}
/*The reset can be set in the Call the ancestor's event handler function.
diff --git a/lib/libesp32_lvgl/lvgl/src/core/lv_indev_scroll.c b/lib/libesp32_lvgl/lvgl/src/core/lv_indev_scroll.c
index c05e3459f..3a7318316 100644
--- a/lib/libesp32_lvgl/lvgl/src/core/lv_indev_scroll.c
+++ b/lib/libesp32_lvgl/lvgl/src/core/lv_indev_scroll.c
@@ -45,12 +45,13 @@ static lv_coord_t elastic_diff(lv_obj_t * scroll_obj, lv_coord_t diff, lv_coord_
void _lv_indev_scroll_handler(_lv_indev_proc_t * proc)
{
+ if(proc->types.pointer.vect.x == 0 && proc->types.pointer.vect.y == 0) {
+ return;
+ }
+
lv_obj_t * scroll_obj = proc->types.pointer.scroll_obj;
/*If there is no scroll object yet try to find one*/
if(scroll_obj == NULL) {
- proc->types.pointer.scroll_sum.x += proc->types.pointer.vect.x;
- proc->types.pointer.scroll_sum.y += proc->types.pointer.vect.y;
-
scroll_obj = find_scroll_obj(proc);
if(scroll_obj == NULL) return;
@@ -61,35 +62,50 @@ void _lv_indev_scroll_handler(_lv_indev_proc_t * proc)
}
/*Set new position or scroll if the vector is not zero*/
- if(proc->types.pointer.vect.x != 0 || proc->types.pointer.vect.y != 0) {
- lv_coord_t diff_x = 0;
- lv_coord_t diff_y = 0;
-
- if(proc->types.pointer.scroll_dir == LV_DIR_HOR) {
- lv_coord_t sr = lv_obj_get_scroll_right(scroll_obj);
- lv_coord_t sl = lv_obj_get_scroll_left(scroll_obj);
- diff_x = elastic_diff(scroll_obj, proc->types.pointer.vect.x, sl, sr, LV_DIR_HOR);
- }
- else {
- lv_coord_t st = lv_obj_get_scroll_top(scroll_obj);
- lv_coord_t sb = lv_obj_get_scroll_bottom(scroll_obj);
- diff_y = elastic_diff(scroll_obj, proc->types.pointer.vect.y, st, sb, LV_DIR_VER);
- }
-
- lv_dir_t scroll_dir = lv_obj_get_scroll_dir(scroll_obj);
- if((scroll_dir & LV_DIR_LEFT) == 0 && diff_x > 0) diff_x = 0;
- if((scroll_dir & LV_DIR_RIGHT) == 0 && diff_x < 0) diff_x = 0;
- if((scroll_dir & LV_DIR_TOP) == 0 && diff_y > 0) diff_y = 0;
- if((scroll_dir & LV_DIR_BOTTOM) == 0 && diff_y < 0) diff_y = 0;
-
- /*Respect the scroll limit area*/
- scroll_limit_diff(proc, &diff_x, &diff_y);
-
- _lv_obj_scroll_by_raw(scroll_obj, diff_x, diff_y);
- if(proc->reset_query) return;
- proc->types.pointer.scroll_sum.x += diff_x;
- proc->types.pointer.scroll_sum.y += diff_y;
+ int16_t angle = 0;
+ int16_t zoom = 256;
+ lv_obj_t * parent = scroll_obj;
+ while(parent) {
+ angle += lv_obj_get_style_transform_angle(parent, 0);
+ zoom *= (lv_obj_get_style_transform_zoom(parent, 0) / 256);
+ parent = lv_obj_get_parent(parent);
}
+
+ if(angle != 0 || zoom != LV_IMG_ZOOM_NONE) {
+ angle = -angle;
+ zoom = (256 * 256) / zoom;
+ lv_point_t pivot = { 0, 0 };
+ lv_point_transform(&proc->types.pointer.vect, angle, zoom, &pivot);
+ }
+
+
+
+ lv_coord_t diff_x = 0;
+ lv_coord_t diff_y = 0;
+ if(proc->types.pointer.scroll_dir == LV_DIR_HOR) {
+ lv_coord_t sr = lv_obj_get_scroll_right(scroll_obj);
+ lv_coord_t sl = lv_obj_get_scroll_left(scroll_obj);
+ diff_x = elastic_diff(scroll_obj, proc->types.pointer.vect.x, sl, sr, LV_DIR_HOR);
+ }
+ else {
+ lv_coord_t st = lv_obj_get_scroll_top(scroll_obj);
+ lv_coord_t sb = lv_obj_get_scroll_bottom(scroll_obj);
+ diff_y = elastic_diff(scroll_obj, proc->types.pointer.vect.y, st, sb, LV_DIR_VER);
+ }
+
+ lv_dir_t scroll_dir = lv_obj_get_scroll_dir(scroll_obj);
+ if((scroll_dir & LV_DIR_LEFT) == 0 && diff_x > 0) diff_x = 0;
+ if((scroll_dir & LV_DIR_RIGHT) == 0 && diff_x < 0) diff_x = 0;
+ if((scroll_dir & LV_DIR_TOP) == 0 && diff_y > 0) diff_y = 0;
+ if((scroll_dir & LV_DIR_BOTTOM) == 0 && diff_y < 0) diff_y = 0;
+
+ /*Respect the scroll limit area*/
+ scroll_limit_diff(proc, &diff_x, &diff_y);
+
+ _lv_obj_scroll_by_raw(scroll_obj, diff_x, diff_y);
+ if(proc->reset_query) return;
+ proc->types.pointer.scroll_sum.x += diff_x;
+ proc->types.pointer.scroll_sum.y += diff_y;
}
@@ -99,7 +115,6 @@ void _lv_indev_scroll_throw_handler(_lv_indev_proc_t * proc)
if(scroll_obj == NULL) return;
if(proc->types.pointer.scroll_dir == LV_DIR_NONE) return;
-
lv_indev_t * indev_act = lv_indev_get_act();
lv_coord_t scroll_throw = indev_act->driver->scroll_throw;
@@ -259,14 +274,36 @@ static lv_obj_t * find_scroll_obj(_lv_indev_proc_t * proc)
/*Decide if it's a horizontal or vertical scroll*/
bool hor_en = false;
bool ver_en = false;
- if(LV_ABS(proc->types.pointer.scroll_sum.x) > LV_ABS(proc->types.pointer.scroll_sum.y)) {
- hor_en = true;
- }
- else {
- ver_en = true;
- }
+
+ proc->types.pointer.scroll_sum.x += proc->types.pointer.vect.x;
+ proc->types.pointer.scroll_sum.y += proc->types.pointer.vect.y;
while(obj_act) {
+ /*Get the transformed scroll_sum with this object*/
+ int16_t angle = 0;
+ int16_t zoom = 256;
+ lv_point_t pivot = { 0, 0 };
+ lv_obj_t * parent = obj_act;
+ while(parent) {
+ angle += lv_obj_get_style_transform_angle(parent, 0);
+ zoom *= (lv_obj_get_style_transform_zoom(parent, 0) / 256);
+ parent = lv_obj_get_parent(parent);
+ }
+
+ lv_point_t obj_scroll_sum = proc->types.pointer.scroll_sum;
+ if(angle != 0 || zoom != LV_IMG_ZOOM_NONE) {
+ angle = -angle;
+ zoom = (256 * 256) / zoom;
+ lv_point_transform(&obj_scroll_sum, angle, zoom, &pivot);
+ }
+
+ if(LV_ABS(obj_scroll_sum.x) > LV_ABS(obj_scroll_sum.y)) {
+ hor_en = true;
+ }
+ else {
+ ver_en = true;
+ }
+
if(lv_obj_has_flag(obj_act, LV_OBJ_FLAG_SCROLLABLE) == false) {
/*If this object don't want to chain the scroll to the parent stop searching*/
if(lv_obj_has_flag(obj_act, LV_OBJ_FLAG_SCROLL_CHAIN_HOR) == false && hor_en) break;
@@ -300,15 +337,15 @@ static lv_obj_t * find_scroll_obj(_lv_indev_proc_t * proc)
*is propagated to this object it can show at least elastic scroll effect.
*But if not hor/ver scrollable do not scroll it at all (so it's not a good candidate)*/
if((st > 0 || sb > 0) &&
- ((up_en && proc->types.pointer.scroll_sum.y >= scroll_limit) ||
- (down_en && proc->types.pointer.scroll_sum.y <= - scroll_limit))) {
+ ((up_en && obj_scroll_sum.y >= scroll_limit) ||
+ (down_en && obj_scroll_sum.y <= - scroll_limit))) {
obj_candidate = obj_act;
dir_candidate = LV_DIR_VER;
}
if((sl > 0 || sr > 0) &&
- ((left_en && proc->types.pointer.scroll_sum.x >= scroll_limit) ||
- (right_en && proc->types.pointer.scroll_sum.x <= - scroll_limit))) {
+ ((left_en && obj_scroll_sum.x >= scroll_limit) ||
+ (right_en && obj_scroll_sum.x <= - scroll_limit))) {
obj_candidate = obj_act;
dir_candidate = LV_DIR_HOR;
}
@@ -318,11 +355,11 @@ static lv_obj_t * find_scroll_obj(_lv_indev_proc_t * proc)
if(sl <= 0) left_en = false;
if(sr <= 0) right_en = false;
- /*If the object really can be scrolled into the current direction the use it.*/
- if((left_en && proc->types.pointer.scroll_sum.x >= scroll_limit) ||
- (right_en && proc->types.pointer.scroll_sum.x <= - scroll_limit) ||
- (up_en && proc->types.pointer.scroll_sum.y >= scroll_limit) ||
- (down_en && proc->types.pointer.scroll_sum.y <= - scroll_limit)) {
+ /*If the object really can be scrolled into the current direction then use it.*/
+ if((left_en && obj_scroll_sum.x >= scroll_limit) ||
+ (right_en && obj_scroll_sum.x <= - scroll_limit) ||
+ (up_en && obj_scroll_sum.y >= scroll_limit) ||
+ (down_en && obj_scroll_sum.y <= - scroll_limit)) {
proc->types.pointer.scroll_dir = hor_en ? LV_DIR_HOR : LV_DIR_VER;
break;
}
diff --git a/lib/libesp32_lvgl/lvgl/src/core/lv_obj_pos.c b/lib/libesp32_lvgl/lvgl/src/core/lv_obj_pos.c
index a31c11db8..5fc7db9ee 100644
--- a/lib/libesp32_lvgl/lvgl/src/core/lv_obj_pos.c
+++ b/lib/libesp32_lvgl/lvgl/src/core/lv_obj_pos.c
@@ -1160,9 +1160,21 @@ static void transform_point(const lv_obj_t * obj, lv_point_t * p, bool inv)
if(angle == 0 && zoom == LV_IMG_ZOOM_NONE) return;
- lv_point_t pivot;
- pivot.x = obj->coords.x1 + lv_obj_get_style_transform_pivot_x(obj, 0);
- pivot.y = obj->coords.y1 + lv_obj_get_style_transform_pivot_y(obj, 0);
+ lv_point_t pivot = {
+ .x = lv_obj_get_style_transform_pivot_x(obj, 0),
+ .y = lv_obj_get_style_transform_pivot_y(obj, 0)
+ };
+
+ if(LV_COORD_IS_PCT(pivot.x)) {
+ pivot.x = (LV_COORD_GET_PCT(pivot.x) * lv_area_get_width(&obj->coords)) / 100;
+ }
+ if(LV_COORD_IS_PCT(pivot.y)) {
+ pivot.y = (LV_COORD_GET_PCT(pivot.y) * lv_area_get_height(&obj->coords)) / 100;
+ }
+
+ pivot.x = obj->coords.x1 + pivot.x;
+ pivot.y = obj->coords.y1 + pivot.y;
+
if(inv) {
angle = -angle;
zoom = (256 * 256) / zoom;
diff --git a/lib/libesp32_lvgl/lvgl/src/core/lv_refr.c b/lib/libesp32_lvgl/lvgl/src/core/lv_refr.c
index 1a56fed0b..45ff2e0e7 100644
--- a/lib/libesp32_lvgl/lvgl/src/core/lv_refr.c
+++ b/lib/libesp32_lvgl/lvgl/src/core/lv_refr.c
@@ -613,6 +613,9 @@ static void refr_area_part(lv_draw_ctx_t * draw_ctx)
{
lv_disp_draw_buf_t * draw_buf = lv_disp_get_draw_buf(disp_refr);
+ if(draw_ctx->init_buf)
+ draw_ctx->init_buf(draw_ctx);
+
/* Below the `area_p` area will be redrawn into the draw buffer.
* In single buffered mode wait here until the buffer is freed.
* In full double buffered mode wait here while the buffers are swapped and a buffer becomes available*/
@@ -914,6 +917,13 @@ void refr_obj(lv_draw_ctx_t * draw_ctx, lv_obj_t * obj)
.y = lv_obj_get_style_transform_pivot_y(obj, 0)
};
+ if(LV_COORD_IS_PCT(pivot.x)) {
+ pivot.x = (LV_COORD_GET_PCT(pivot.x) * lv_area_get_width(&obj->coords)) / 100;
+ }
+ if(LV_COORD_IS_PCT(pivot.y)) {
+ pivot.y = (LV_COORD_GET_PCT(pivot.y) * lv_area_get_height(&obj->coords)) / 100;
+ }
+
lv_draw_img_dsc_t draw_dsc;
lv_draw_img_dsc_init(&draw_dsc);
draw_dsc.opa = opa;
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/arm2d/lv_gpu_arm2d.c b/lib/libesp32_lvgl/lvgl/src/draw/arm2d/lv_gpu_arm2d.c
index 7777fe21b..f294125be 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/arm2d/lv_gpu_arm2d.c
+++ b/lib/libesp32_lvgl/lvgl/src/draw/arm2d/lv_gpu_arm2d.c
@@ -39,6 +39,7 @@
#include "../../core/lv_refr.h"
#if LV_USE_GPU_ARM2D
+#define __ARM_2D_IMPL__
#include "arm_2d.h"
#include "__arm_2d_impl.h"
@@ -89,10 +90,12 @@
#define __arm_2d_impl_cl_key_copy __arm_2d_impl_rgb16_cl_key_copy
#define __arm_2d_impl_alpha_blending_colour_keying \
__arm_2d_impl_rgb565_alpha_blending_colour_keying
-#define arm_2d_tile_transform_with_src_mask_and_opacity \
- arm_2d_rgb565_tile_transform_with_src_mask_and_opacity
-#define arm_2d_tile_transform_with_opacity \
- arm_2d_rgb565_tile_transform_with_opacity
+#define arm_2d_tile_transform_with_src_mask_and_opacity_prepare \
+ arm_2dp_rgb565_tile_transform_with_src_mask_and_opacity_prepare
+#define arm_2d_tile_transform_with_opacity_prepare \
+ arm_2dp_rgb565_tile_transform_with_opacity_prepare
+#define arm_2d_tile_transform_prepare \
+ arm_2dp_rgb565_tile_transform_prepare
#define __ARM_2D_PIXEL_BLENDING_OPA __ARM_2D_PIXEL_BLENDING_OPA_RGB565
@@ -124,10 +127,12 @@
#define __arm_2d_impl_cl_key_copy __arm_2d_impl_rgb32_cl_key_copy
#define __arm_2d_impl_alpha_blending_colour_keying \
__arm_2d_impl_cccn888_alpha_blending_colour_keying
-#define arm_2d_tile_transform_with_src_mask_and_opacity \
- arm_2d_cccn888_tile_transform_with_src_mask_and_opacity
-#define arm_2d_tile_transform_with_opacity \
- arm_2d_cccn888_tile_transform_with_opacity
+#define arm_2d_tile_transform_with_src_mask_and_opacity_prepare \
+ arm_2dp_cccn888_tile_transform_with_src_mask_and_opacity_prepare
+#define arm_2d_tile_transform_with_opacity_prepare \
+ arm_2dp_cccn888_tile_transform_with_opacity_prepare
+#define arm_2d_tile_transform_prepare \
+ arm_2dp_cccn888_tile_transform_prepare
#define __ARM_2D_PIXEL_BLENDING_OPA __ARM_2D_PIXEL_BLENDING_OPA_CCCN888
@@ -298,11 +303,88 @@
/* replace src_buf for the following operation */ \
src_buf = (const uint8_t *)rgb_tmp_buf; \
} \
- __VA_ARGS__ \
+ do { \
+ __VA_ARGS__ \
+ } while(0); \
if (NULL != rgb_tmp_buf) { \
lv_mem_buf_release(rgb_tmp_buf); \
} \
- } while(0);
+ } while(0); \
+ src_buf = src_buf_org;
+
+#define __RECOLOUR_BEGIN() \
+ do { \
+ lv_color_t *rgb_tmp_buf = NULL; \
+ if(draw_dsc->recolor_opa > LV_OPA_MIN) { \
+ rgb_tmp_buf \
+ = lv_malloc(src_w * src_h * sizeof(lv_color_t)); \
+ if (NULL == rgb_tmp_buf) { \
+ LV_LOG_WARN( \
+ "Failed to allocate memory for accelerating recolour, " \
+ "use normal route instead."); \
+ break; \
+ } \
+ lv_memcpy(rgb_tmp_buf, src_buf, src_w * src_h * sizeof(lv_color_t));\
+ arm_2d_size_t copy_size = { \
+ .iWidth = src_w, \
+ .iHeight = src_h, \
+ }; \
+ /* apply re-colour */ \
+ __arm_2d_impl_colour_filling_with_opacity( \
+ (color_int *)rgb_tmp_buf, \
+ src_w, \
+ ©_size, \
+ (color_int)draw_dsc->recolor.full, \
+ draw_dsc->recolor_opa); \
+ \
+ /* replace src_buf for the following operation */ \
+ src_buf = (const uint8_t *)rgb_tmp_buf; \
+ } \
+ do {
+
+#define __RECOLOUR_END() \
+ } while(0); \
+ if (NULL != rgb_tmp_buf) { \
+ lv_free(rgb_tmp_buf); \
+ } \
+ } while(0); \
+ src_buf = src_buf_org;
+
+#define __ARM_2D_PREPARE_TRANS_AND_TARGET_REGION(__TRANS_PREPARE, ...) \
+ do { \
+ __TRANS_PREPARE( \
+ NULL, \
+ __VA_ARGS__); \
+ \
+ target_region = (arm_2d_region_t) { \
+ .tLocation = { \
+ .iX = coords->x1 - draw_ctx->clip_area->x1, \
+ .iY = coords->y1 - draw_ctx->clip_area->y1, \
+ }, \
+ .tSize = { \
+ .iWidth = lv_area_get_width(coords), \
+ .iHeight = lv_area_get_height(coords), \
+ }, \
+ }; \
+ \
+ arm_2d_size_t tTransSize \
+ = ARM_2D_CTRL.DefaultOP \
+ .tTransform.Source.ptTile->tRegion.tSize; \
+ \
+ if (target_region.tSize.iWidth < tTransSize.iWidth) { \
+ int16_t iDelta = tTransSize.iWidth - target_region.tSize.iWidth;\
+ target_region.tLocation.iX -= iDelta / 2; \
+ target_region.tSize.iWidth = tTransSize.iWidth; \
+ } \
+ \
+ if (target_region.tSize.iHeight < tTransSize.iHeight) { \
+ int16_t iDelta \
+ = tTransSize.iHeight - target_region.tSize.iHeight; \
+ target_region.tLocation.iY -= iDelta / 2; \
+ target_region.tSize.iHeight = tTransSize.iHeight; \
+ } \
+ } while(0)
+
/* *INDENT-ON* */
/**********************
@@ -601,18 +683,26 @@ static void lv_draw_arm2d_blend(lv_draw_ctx_t * draw_ctx, const lv_draw_sw_blend
lv_area_t blend_area;
if(!_lv_area_intersect(&blend_area, dsc->blend_area, draw_ctx->clip_area)) return;
- lv_disp_t * disp = _lv_refr_get_disp_refreshing();
+ //lv_disp_t * disp = _lv_refr_get_disp_refreshing();
bool is_accelerated = false;
do {
- if(NULL != disp->driver->set_px_cb) {
- break;
+
+ /* target buffer */
+ lv_color_t * dest_buf = draw_ctx->buf;
+ lv_disp_t * disp = _lv_refr_get_disp_refreshing();
+ if(disp->driver->screen_transp == 0) {
+ dest_buf += dest_stride * (blend_area.y1 - draw_ctx->buf_area->y1) + (blend_area.x1 - draw_ctx->buf_area->x1);
+ }
+ else {
+ /*With LV_COLOR_DEPTH 16 it means ARGB8565 (3 bytes format)*/
+ uint8_t * dest_buf8 = (uint8_t *) dest_buf;
+ dest_buf8 += dest_stride * (blend_area.y1 - draw_ctx->buf_area->y1) * LV_IMG_PX_SIZE_ALPHA_BYTE;
+ dest_buf8 += (blend_area.x1 - draw_ctx->buf_area->x1) * LV_IMG_PX_SIZE_ALPHA_BYTE;
+ dest_buf = (lv_color_t *)dest_buf8;
}
- lv_color_t * dest_buf = draw_ctx->buf;
- dest_buf += dest_stride * (blend_area.y1 - draw_ctx->buf_area->y1)
- + (blend_area.x1 - draw_ctx->buf_area->x1);
-
+ /* source buffer */
const lv_color_t * src_buf = dsc->src_buf;
lv_coord_t src_stride;
if(src_buf) {
@@ -634,7 +724,9 @@ static void lv_draw_arm2d_blend(lv_draw_ctx_t * draw_ctx, const lv_draw_sw_blend
lv_area_move(&blend_area, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
-
+ if(disp->driver->screen_transp) {
+ break;
+ }
if(dsc->src_buf == NULL) {
if(dsc->blend_mode == LV_BLEND_MODE_NORMAL) {
is_accelerated = arm_2d_fill_normal(dest_buf,
@@ -645,14 +737,8 @@ static void lv_draw_arm2d_blend(lv_draw_ctx_t * draw_ctx, const lv_draw_sw_blend
mask,
mask_stride);
}
-#if LV_DRAW_COMPLEX
- else {
- break;
- }
-#endif
}
else {
-
if(dsc->blend_mode == LV_BLEND_MODE_NORMAL) {
is_accelerated = arm_2d_copy_normal(dest_buf,
&blend_area,
@@ -663,11 +749,6 @@ static void lv_draw_arm2d_blend(lv_draw_ctx_t * draw_ctx, const lv_draw_sw_blend
mask,
mask_stride);
}
-#if LV_DRAW_COMPLEX
- else {
- break;
- }
-#endif
}
} while(0);
@@ -698,15 +779,11 @@ static bool arm_2d_fill_normal(lv_color_t * dest_buf,
}
/*Has opacity*/
else {
-#if LV_COLOR_SCREEN_TRANSP
- return false;
-#else
__arm_2d_impl_colour_filling_with_opacity((color_int *)dest_buf,
dest_stride,
&target_size,
color.full,
opa);
-#endif
}
}
/*Masked*/
@@ -722,9 +799,6 @@ static bool arm_2d_fill_normal(lv_color_t * dest_buf,
}
/*With opacity*/
else {
-#if LV_COLOR_SCREEN_TRANSP
- return false;
-#else
__arm_2d_impl_colour_filling_mask_opacity((color_int *)dest_buf,
dest_stride,
(uint8_t *)mask,
@@ -732,7 +806,6 @@ static bool arm_2d_fill_normal(lv_color_t * dest_buf,
&target_size,
color.full,
opa);
-#endif
}
}
@@ -759,10 +832,6 @@ static bool arm_2d_copy_normal(lv_color_t * dest_buf,
.iHeight = lv_area_get_height(dest_area),
};
-#if LV_COLOR_SCREEN_TRANSP
- lv_disp_t * disp = _lv_refr_get_disp_refreshing();
-#endif
-
/*Simple fill (maybe with opacity), no masking*/
if(mask == NULL) {
if(opa >= LV_OPA_MAX) {
@@ -773,25 +842,18 @@ static bool arm_2d_copy_normal(lv_color_t * dest_buf,
©_size);
}
else {
-#if LV_COLOR_SCREEN_TRANSP
- return false;
-#else
__arm_2d_impl_alpha_blending((color_int *)src_buf,
src_stride,
(color_int *)dest_buf,
dest_stride,
©_size,
opa);
-#endif
}
}
/*Masked*/
else {
/*Only the mask matters*/
if(opa > LV_OPA_MAX) {
-#if LV_COLOR_SCREEN_TRANSP
- return false;
-#else
__arm_2d_impl_src_msk_copy((color_int *)src_buf,
src_stride,
(uint8_t *)mask,
@@ -800,13 +862,9 @@ static bool arm_2d_copy_normal(lv_color_t * dest_buf,
(color_int *)dest_buf,
dest_stride,
©_size);
-#endif
}
/*Handle opa and mask values too*/
else {
-#if LV_COLOR_SCREEN_TRANSP
- return false;
-#else
__arm_2d_impl_gray8_alpha_blending((uint8_t *)mask,
mask_stride,
(uint8_t *)mask,
@@ -822,7 +880,6 @@ static bool arm_2d_copy_normal(lv_color_t * dest_buf,
(color_int *)dest_buf,
dest_stride,
©_size);
-#endif
}
}
@@ -839,6 +896,7 @@ static void lv_draw_arm2d_img_decoded(struct _lv_draw_ctx_t * draw_ctx,
/*Use the clip area as draw area*/
lv_area_t draw_area;
lv_area_copy(&draw_area, draw_ctx->clip_area);
+ const uint8_t * src_buf_org = src_buf;
bool mask_any = lv_draw_mask_is_any(&draw_area);
bool transform = draw_dsc->angle != 0 || draw_dsc->zoom != LV_IMG_ZOOM_NONE ? true : false;
@@ -851,6 +909,13 @@ static void lv_draw_arm2d_img_decoded(struct _lv_draw_ctx_t * draw_ctx,
blend_dsc.blend_mode = draw_dsc->blend_mode;
blend_dsc.blend_area = &blend_area;
+ if(lv_img_cf_is_chroma_keyed(cf)) cf = LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED;
+ else if(cf == LV_IMG_CF_ALPHA_8BIT) {}
+ else if(cf == LV_IMG_CF_RGB565A8) {}
+ else if(lv_img_cf_has_alpha(cf)) cf = LV_IMG_CF_TRUE_COLOR_ALPHA;
+ else cf = LV_IMG_CF_TRUE_COLOR;
+
+
/*The simplest case just copy the pixels into the draw_buf*/
if(!mask_any && !transform && cf == LV_IMG_CF_TRUE_COLOR && draw_dsc->recolor_opa == LV_OPA_TRANSP) {
blend_dsc.src_buf = (const lv_color_t *)src_buf;
@@ -859,6 +924,9 @@ static void lv_draw_arm2d_img_decoded(struct _lv_draw_ctx_t * draw_ctx,
lv_draw_sw_blend(draw_ctx, &blend_dsc);
}
else if(!mask_any && !transform && cf == LV_IMG_CF_ALPHA_8BIT) {
+ lv_area_t clipped_coords;
+ if(!_lv_area_intersect(&clipped_coords, coords, draw_ctx->clip_area)) return;
+
blend_dsc.mask_buf = (lv_opa_t *)src_buf;
blend_dsc.mask_area = coords;
blend_dsc.src_buf = NULL;
@@ -869,7 +937,8 @@ static void lv_draw_arm2d_img_decoded(struct _lv_draw_ctx_t * draw_ctx,
lv_draw_sw_blend(draw_ctx, &blend_dsc);
}
#if LV_COLOR_DEPTH == 16
- else if(!mask_any && !transform && cf == LV_IMG_CF_RGB565A8 && draw_dsc->recolor_opa == LV_OPA_TRANSP) {
+ else if(!mask_any && !transform && cf == LV_IMG_CF_RGB565A8 && draw_dsc->recolor_opa == LV_OPA_TRANSP &&
+ blend_dsc.opa >= LV_OPA_MAX) {
lv_coord_t src_w = lv_area_get_width(coords);
lv_coord_t src_h = lv_area_get_height(coords);
blend_dsc.src_buf = (const lv_color_t *)src_buf;
@@ -922,6 +991,23 @@ static void lv_draw_arm2d_img_decoded(struct _lv_draw_ctx_t * draw_ctx,
LV_DRAW_MASK_RES_CHANGED : LV_DRAW_MASK_RES_FULL_COVER;
blend_dsc.mask_res = mask_res_def;
+ if(cf == LV_IMG_CF_ALPHA_8BIT) {
+ /* original code:
+ lv_color_fill(rgb_buf, draw_dsc->recolor, buf_size);
+ */
+ arm_2d_size_t copy_size = {
+ .iWidth = buf_w,
+ .iHeight = buf_h,
+ };
+
+ /* apply re-colour */
+ __arm_2d_impl_colour_filling(
+ (color_int *)rgb_buf,
+ buf_w,
+ ©_size,
+ (color_int)draw_dsc->recolor.full);
+ }
+
bool is_accelerated = false;
if(!transform) {
@@ -968,7 +1054,7 @@ static void lv_draw_arm2d_img_decoded(struct _lv_draw_ctx_t * draw_ctx,
}
else if((LV_COLOR_DEPTH == 32)
&& !mask_any
- && (cf == LV_IMG_CF_TRUE_COLOR_ALPHA)) {
+ && (LV_IMG_CF_TRUE_COLOR_ALPHA == cf)) {
/* accelerate copy-with-source-masks-and-opacity */
/* *INDENT-OFF* */
@@ -1025,6 +1111,63 @@ static void lv_draw_arm2d_img_decoded(struct _lv_draw_ctx_t * draw_ctx,
)
/* *INDENT-ON* */
}
+ else if(!mask_any
+ && (LV_IMG_CF_RGB565A8 == cf)) {
+ /* accelerate copy-with-source-masks-and-opacity */
+
+ uint8_t * mask_after_rgb = src_buf + sizeof(lv_color_t) * src_w * src_h;
+ /* *INDENT-OFF* */
+ __RECOLOUR_WRAPPER(
+ __PREPARE_LL_ACCELERATION__();
+
+ uint8_t * mask_temp_buf = NULL;
+ if(blend_dsc.opa < LV_OPA_MAX) {
+ mask_temp_buf = lv_mem_buf_get(copy_size.iHeight * copy_size.iWidth);
+ if(NULL == mask_temp_buf) {
+ LV_LOG_WARN(
+ "Failed to allocate memory for alpha mask,"
+ " use normal route instead.");
+ break;
+ }
+ lv_memset_00(mask_temp_buf, copy_size.iHeight * copy_size.iWidth);
+
+ __arm_2d_impl_gray8_colour_filling_mask_opacity(
+ mask_temp_buf,
+ src_stride,
+ mask_after_rgb,
+ src_stride,
+ ©_size,
+ 0xFF,
+ blend_dsc.opa);
+
+ __arm_2d_impl_src_msk_copy(
+ (color_int *)src_buf_tmp,
+ src_stride,
+ mask_temp_buf,
+ src_stride,
+ ©_size,
+ (color_int *)dest_buf,
+ dest_stride,
+ ©_size);
+
+ lv_mem_buf_release(mask_temp_buf);
+ }
+ else {
+ __arm_2d_impl_src_msk_copy(
+ (color_int *)src_buf_tmp,
+ src_stride,
+ mask_after_rgb,
+ src_stride,
+ ©_size,
+ (color_int *)dest_buf,
+ dest_stride,
+ ©_size);
+ }
+
+ is_accelerated = true;
+ )
+ /* *INDENT-ON* */
+ }
else if(!mask_any && (cf == LV_IMG_CF_TRUE_COLOR)) {
/* accelerate copy-with-source-masks-and-opacity */
@@ -1063,6 +1206,7 @@ static void lv_draw_arm2d_img_decoded(struct _lv_draw_ctx_t * draw_ctx,
&& (draw_dsc->recolor_opa == LV_OPA_TRANSP)
&& (((LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED == cf)
|| (LV_IMG_CF_TRUE_COLOR == cf))
+ || (LV_IMG_CF_RGB565A8 == cf)
#if defined(__ARM_2D_CFG_SUPPORT_COLOUR_CHANNEL_ACCESS__) && __ARM_2D_CFG_SUPPORT_COLOUR_CHANNEL_ACCESS__
|| ((LV_IMG_CF_TRUE_COLOR_ALPHA == cf)
&& (LV_COLOR_DEPTH == 32))
@@ -1070,6 +1214,7 @@ static void lv_draw_arm2d_img_decoded(struct _lv_draw_ctx_t * draw_ctx,
)
) {
+ uint8_t * mask_after_rgb = src_buf + sizeof(lv_color_t) * src_w * src_h;
/* *INDENT-OFF* */
__RECOLOUR_WRAPPER(
/* accelerate transform without re-color */
@@ -1108,17 +1253,6 @@ static void lv_draw_arm2d_img_decoded(struct _lv_draw_ctx_t * draw_ctx,
&target_tile,
false);
- target_region = (arm_2d_region_t) {
- .tLocation = {
- .iX = coords->x1 - draw_ctx->clip_area->x1,
- .iY = coords->y1 - draw_ctx->clip_area->y1,
- },
- .tSize = {
- .iWidth = lv_area_get_width(coords),
- .iHeight = lv_area_get_height(coords),
- },
- };
-
static arm_2d_tile_t source_tile;
source_tile = (arm_2d_tile_t) {
@@ -1132,45 +1266,81 @@ static void lv_draw_arm2d_img_decoded(struct _lv_draw_ctx_t * draw_ctx,
.pchBuffer = (uint8_t *)src_buf,
};
- static arm_2d_tile_t mask_tile;
- mask_tile = source_tile;
-
- mask_tile.tInfo.bHasEnforcedColour = true;
- mask_tile.tInfo.tColourInfo.chScheme = ARM_2D_CHANNEL_8in32;
- mask_tile.pchBuffer += 3;
-
static arm_2d_location_t source_center, target_center;
source_center.iX = draw_dsc->pivot.x;
source_center.iY = draw_dsc->pivot.y;
-
- if((LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED == cf) ||
+ if((LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED == cf) ||
(LV_IMG_CF_TRUE_COLOR == cf)) {
- arm_2d_tile_transform_with_opacity(
+
+ __ARM_2D_PREPARE_TRANS_AND_TARGET_REGION(
+ arm_2d_tile_transform_with_opacity_prepare,
&source_tile,
- &target_tile,
- &target_region,
source_center,
ARM_2D_ANGLE((draw_dsc->angle / 10.0f)),
draw_dsc->zoom / 256.0f,
(color_int)LV_COLOR_CHROMA_KEY.full,
blend_dsc.opa);
+ arm_2d_tile_transform(
+ &target_tile,
+ &target_region,
+ NULL
+ );
+ is_accelerated = true;
+ }
+ else if (LV_IMG_CF_RGB565A8 == cf) {
+ static arm_2d_tile_t mask_tile;
+ mask_tile = source_tile;
+
+ mask_tile.tInfo.bHasEnforcedColour = true;
+ mask_tile.tInfo.tColourInfo.chScheme = ARM_2D_COLOUR_GRAY8;
+ mask_tile.pchBuffer = mask_after_rgb;
+
+ __ARM_2D_PREPARE_TRANS_AND_TARGET_REGION(
+ arm_2d_tile_transform_with_src_mask_and_opacity_prepare,
+ &source_tile,
+ &mask_tile,
+ source_center,
+ ARM_2D_ANGLE((draw_dsc->angle / 10.0f)),
+ draw_dsc->zoom / 256.0f,
+ blend_dsc.opa
+ );
+
+ arm_2d_tile_transform(
+ &target_tile,
+ &target_region,
+ NULL
+ );
+
is_accelerated = true;
}
#if defined(__ARM_2D_CFG_SUPPORT_COLOUR_CHANNEL_ACCESS__) \
&& __ARM_2D_CFG_SUPPORT_COLOUR_CHANNEL_ACCESS__
- else if((LV_IMG_CF_TRUE_COLOR_ALPHA == cf) &&
+ else if((LV_IMG_CF_TRUE_COLOR_ALPHA == cf) &&
(LV_COLOR_DEPTH == 32)) {
- arm_2d_tile_transform_with_src_mask_and_opacity(
+ static arm_2d_tile_t mask_tile;
+ mask_tile = source_tile;
+
+ mask_tile.tInfo.bHasEnforcedColour = true;
+ mask_tile.tInfo.tColourInfo.chScheme = ARM_2D_CHANNEL_8in32;
+ mask_tile.pchBuffer += 3;
+
+ __ARM_2D_PREPARE_TRANS_AND_TARGET_REGION(
+ arm_2d_tile_transform_with_src_mask_and_opacity_prepare,
&source_tile,
&mask_tile,
- &target_tile,
- &target_region,
source_center,
ARM_2D_ANGLE((draw_dsc->angle / 10.0f)),
draw_dsc->zoom / 256.0f,
- blend_dsc.opa);
+ blend_dsc.opa
+ );
+
+ arm_2d_tile_transform(
+ &target_tile,
+ &target_region,
+ NULL
+ );
is_accelerated = true;
}
@@ -1208,7 +1378,7 @@ static void lv_draw_arm2d_img_decoded(struct _lv_draw_ctx_t * draw_ctx,
(color_int)draw_dsc->recolor.full,
draw_dsc->recolor_opa);
}
-#if LV_DRAW_COMPLEX
+#if LV_USE_DRAW_MASKS
/*Apply the masks if any*/
if(mask_any) {
lv_coord_t y;
@@ -1275,7 +1445,7 @@ static void convert_cb(const lv_area_t * dest_area, const void * src_buf, lv_coo
if(cf == LV_IMG_CF_TRUE_COLOR || cf == LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED) {
uint32_t px_cnt = lv_area_get_size(dest_area);
- lv_memset_ff(abuf, px_cnt);
+ lv_memset(abuf, 0xff, px_cnt);
src_tmp8 += (src_stride * dest_area->y1 * sizeof(lv_color_t)) + dest_area->x1 * sizeof(lv_color_t);
uint32_t dest_w = lv_area_get_width(dest_area);
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/lv_draw.h b/lib/libesp32_lvgl/lvgl/src/draw/lv_draw.h
index 80b62e9f0..ffe1d4e27 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/lv_draw.h
+++ b/lib/libesp32_lvgl/lvgl/src/draw/lv_draw.h
@@ -72,6 +72,7 @@ typedef struct _lv_draw_ctx_t {
*/
const lv_area_t * clip_area;
+ void (*init_buf)(struct _lv_draw_ctx_t * draw_ctx);
void (*draw_rect)(struct _lv_draw_ctx_t * draw_ctx, const lv_draw_rect_dsc_t * dsc, const lv_area_t * coords);
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/lv_draw_img.c b/lib/libesp32_lvgl/lvgl/src/draw/lv_draw_img.c
index 41dc0f039..1deb39e0c 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/lv_draw_img.c
+++ b/lib/libesp32_lvgl/lvgl/src/draw/lv_draw_img.c
@@ -69,18 +69,19 @@ void lv_draw_img(lv_draw_ctx_t * draw_ctx, const lv_draw_img_dsc_t * dsc, const
if(dsc->opa <= LV_OPA_MIN) return;
- lv_res_t res;
+ lv_res_t res = LV_RES_INV;
+
if(draw_ctx->draw_img) {
res = draw_ctx->draw_img(draw_ctx, dsc, coords, src);
}
- else {
+
+ if(res != LV_RES_OK) {
res = decode_and_draw(draw_ctx, dsc, coords, src);
}
- if(res == LV_RES_INV) {
+ if(res != LV_RES_OK) {
LV_LOG_WARN("Image draw error");
show_error(draw_ctx, coords, "No\ndata");
- return;
}
}
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/lv_draw_nxp.mk b/lib/libesp32_lvgl/lvgl/src/draw/nxp/lv_draw_nxp.mk
index 17371ac98..18a751eab 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/nxp/lv_draw_nxp.mk
+++ b/lib/libesp32_lvgl/lvgl/src/draw/nxp/lv_draw_nxp.mk
@@ -1,5 +1,3 @@
-CSRCS += lv_gpu_nxp.c
-
DEPPATH += --dep-path $(LVGL_DIR)/$(LVGL_DIR_NAME)/src/draw/nxp
VPATH += :$(LVGL_DIR)/$(LVGL_DIR_NAME)/src/draw/nxp
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/lv_gpu_nxp.c b/lib/libesp32_lvgl/lvgl/src/draw/nxp/lv_gpu_nxp.c
deleted file mode 100644
index 46da9334a..000000000
--- a/lib/libesp32_lvgl/lvgl/src/draw/nxp/lv_gpu_nxp.c
+++ /dev/null
@@ -1,418 +0,0 @@
-/**
- * @file lv_gpu_nxp.c
- *
- */
-
-/**
- * MIT License
- *
- * Copyright 2022 NXP
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next paragraph)
- * shall be included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
- * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
- * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
- * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-
-#include "lv_gpu_nxp.h"
-
-#if LV_USE_GPU_NXP_PXP || LV_USE_GPU_NXP_VG_LITE
-
-/*
- * allow to use both PXP and VGLITE
-
- * both 2D accelerators can be used at the same time:
- * thus VGLITE can be used to accelerate widget drawing
- * while PXP accelerates Blit & Fill operations.
- */
-#if LV_USE_GPU_NXP_PXP
- #include "pxp/lv_draw_pxp_blend.h"
-#endif
-#if LV_USE_GPU_NXP_VG_LITE
- #include "vglite/lv_draw_vglite_blend.h"
- #include "vglite/lv_draw_vglite_rect.h"
- #include "vglite/lv_draw_vglite_arc.h"
-#endif
-
-#if LV_COLOR_DEPTH != 32
- #include "../../core/lv_refr.h"
-#endif
-
-/*********************
- * DEFINES
- *********************/
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-static void lv_draw_nxp_img_decoded(lv_draw_ctx_t * draw_ctx, const lv_draw_img_dsc_t * dsc,
- const lv_area_t * coords, const uint8_t * map_p, lv_img_cf_t cf);
-
-static void lv_draw_nxp_blend(lv_draw_ctx_t * draw_ctx, const lv_draw_sw_blend_dsc_t * dsc);
-
-static void lv_draw_nxp_rect(lv_draw_ctx_t * draw_ctx, const lv_draw_rect_dsc_t * dsc, const lv_area_t * coords);
-
-static lv_res_t draw_nxp_bg(lv_draw_ctx_t * draw_ctx, const lv_draw_rect_dsc_t * dsc, const lv_area_t * coords);
-
-static void lv_draw_nxp_arc(lv_draw_ctx_t * draw_ctx, const lv_draw_arc_dsc_t * dsc, const lv_point_t * center,
- uint16_t radius, uint16_t start_angle, uint16_t end_angle);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-void lv_draw_nxp_ctx_init(lv_disp_drv_t * drv, lv_draw_ctx_t * draw_ctx)
-{
- lv_draw_sw_init_ctx(drv, draw_ctx);
-
- lv_draw_nxp_ctx_t * nxp_draw_ctx = (lv_draw_sw_ctx_t *)draw_ctx;
-
- nxp_draw_ctx->base_draw.draw_arc = lv_draw_nxp_arc;
- nxp_draw_ctx->base_draw.draw_rect = lv_draw_nxp_rect;
- nxp_draw_ctx->base_draw.draw_img_decoded = lv_draw_nxp_img_decoded;
- nxp_draw_ctx->blend = lv_draw_nxp_blend;
- //nxp_draw_ctx->base_draw.wait_for_finish = lv_draw_nxp_wait_cb;
-}
-
-void lv_draw_nxp_ctx_deinit(lv_disp_drv_t * drv, lv_draw_ctx_t * draw_ctx)
-{
- lv_draw_sw_deinit_ctx(drv, draw_ctx);
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-/**
- * During rendering, LVGL might initializes new draw_ctxs and start drawing into
- * a separate buffer (called layer). If the content to be rendered has "holes",
- * e.g. rounded corner, LVGL temporarily sets the disp_drv.screen_transp flag.
- * It means the renderers should draw into an ARGB buffer.
- * With 32 bit color depth it's not a big problem but with 16 bit color depth
- * the target pixel format is ARGB8565 which is not supported by the GPU.
- * In this case, the NXP callbacks should fallback to SW rendering.
- */
-static inline bool need_argb8565_support()
-{
-#if LV_COLOR_DEPTH != 32
- lv_disp_t * disp = _lv_refr_get_disp_refreshing();
-
- if(disp->driver->screen_transp == 1)
- return true;
-#endif
-
- return false;
-}
-
-static void lv_draw_nxp_blend(lv_draw_ctx_t * draw_ctx, const lv_draw_sw_blend_dsc_t * dsc)
-{
- lv_area_t blend_area;
-
- /*Let's get the blend area which is the intersection of the area to fill and the clip area.*/
- if(!_lv_area_intersect(&blend_area, dsc->blend_area, draw_ctx->clip_area))
- return; /*Fully clipped, nothing to do*/
-
- /*Make the blend area relative to the buffer*/
- lv_area_move(&blend_area, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
-
- bool done = false;
-
- /*Fill/Blend only non masked, normal blended*/
- if(dsc->mask_buf == NULL && dsc->blend_mode == LV_BLEND_MODE_NORMAL && !need_argb8565_support()) {
- lv_color_t * dest_buf = draw_ctx->buf;
- lv_coord_t dest_stride = lv_area_get_width(draw_ctx->buf_area);
-#if LV_USE_GPU_NXP_VG_LITE
- lv_coord_t dest_width = lv_area_get_width(draw_ctx->buf_area);
- lv_coord_t dest_height = lv_area_get_height(draw_ctx->buf_area);
-#endif
-
- const lv_color_t * src_buf = dsc->src_buf;
-
- if(src_buf == NULL) {
-#if LV_USE_GPU_NXP_PXP
- done = (lv_gpu_nxp_pxp_fill(dest_buf, dest_stride, &blend_area,
- dsc->color, dsc->opa) == LV_RES_OK);
- if(!done)
- PXP_LOG_TRACE("PXP fill failed. Fallback.");
-
-#endif
-#if LV_USE_GPU_NXP_VG_LITE
- if(!done) {
- done = (lv_gpu_nxp_vglite_fill(dest_buf, dest_width, dest_height, &blend_area,
- dsc->color, dsc->opa) == LV_RES_OK);
- if(!done)
- VG_LITE_LOG_TRACE("VG-Lite fill failed. Fallback.");
- }
-#endif
- }
- else {
-#if LV_USE_GPU_NXP_PXP
- done = (lv_gpu_nxp_pxp_blit(dest_buf, &blend_area, dest_stride, src_buf, dsc->blend_area,
- dsc->opa, LV_DISP_ROT_NONE) == LV_RES_OK);
- if(!done)
- PXP_LOG_TRACE("PXP blit failed. Fallback.");
-#endif
-#if LV_USE_GPU_NXP_VG_LITE
- if(!done) {
- lv_gpu_nxp_vglite_blit_info_t blit;
- lv_coord_t src_stride = lv_area_get_width(dsc->blend_area);
-
- blit.src = src_buf;
- blit.src_width = lv_area_get_width(dsc->blend_area);
- blit.src_height = lv_area_get_height(dsc->blend_area);
- blit.src_stride = src_stride * (int32_t)sizeof(lv_color_t);
- blit.src_area.x1 = (blend_area.x1 - (dsc->blend_area->x1 - draw_ctx->buf_area->x1));
- blit.src_area.y1 = (blend_area.y1 - (dsc->blend_area->y1 - draw_ctx->buf_area->y1));
- blit.src_area.x2 = blit.src_area.x1 + blit.src_width - 1;
- blit.src_area.y2 = blit.src_area.y1 + blit.src_height - 1;
-
- blit.dst = dest_buf;
- blit.dst_width = dest_width;
- blit.dst_height = dest_height;
- blit.dst_stride = dest_stride * (int32_t)sizeof(lv_color_t);
- blit.dst_area.x1 = blend_area.x1;
- blit.dst_area.y1 = blend_area.y1;
- blit.dst_area.x2 = blend_area.x2;
- blit.dst_area.y2 = blend_area.y2;
-
- blit.opa = dsc->opa;
- blit.zoom = LV_IMG_ZOOM_NONE;
- blit.angle = 0;
-
- done = (lv_gpu_nxp_vglite_blit(&blit) == LV_RES_OK);
-
- if(!done)
- VG_LITE_LOG_TRACE("VG-Lite blit failed. Fallback.");
- }
-#endif
- }
- }
-
- if(!done)
- lv_draw_sw_blend_basic(draw_ctx, dsc);
-}
-
-static void lv_draw_nxp_img_decoded(lv_draw_ctx_t * draw_ctx, const lv_draw_img_dsc_t * dsc,
- const lv_area_t * coords, const uint8_t * map_p, lv_img_cf_t cf)
-{
- /*Use the clip area as draw area*/
- lv_area_t draw_area;
- lv_area_copy(&draw_area, draw_ctx->clip_area);
- bool mask_any = lv_draw_mask_is_any(&draw_area);
-#if LV_USE_GPU_NXP_VG_LITE
- bool recolor = (dsc->recolor_opa != LV_OPA_TRANSP);
-#endif
-#if LV_USE_GPU_NXP_PXP
- bool scale = (dsc->zoom != LV_IMG_ZOOM_NONE);
-#endif
- bool done = false;
-
- lv_area_t blend_area;
- /*Let's get the blend area which is the intersection of the area to fill and the clip area.*/
- if(!_lv_area_intersect(&blend_area, coords, draw_ctx->clip_area))
- return; /*Fully clipped, nothing to do*/
-
- /*Make the blend area relative to the buffer*/
- lv_area_move(&blend_area, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
-
- const lv_color_t * src_buf = (const lv_color_t *)map_p;
- if(!src_buf) {
- lv_draw_sw_img_decoded(draw_ctx, dsc, coords, map_p, cf);
- return;
- }
-
- lv_color_t * dest_buf = draw_ctx->buf;
- lv_coord_t dest_stride = lv_area_get_width(draw_ctx->buf_area);
-
-#if LV_USE_GPU_NXP_PXP
- if(!mask_any && !scale && !need_argb8565_support()
-#if LV_COLOR_DEPTH!=32
- && !lv_img_cf_has_alpha(cf)
-#endif
- ) {
- done = (lv_gpu_nxp_pxp_blit_transform(dest_buf, &blend_area, dest_stride, src_buf, coords,
- dsc, cf) == LV_RES_OK);
- if(!done)
- PXP_LOG_TRACE("PXP blit transform failed. Fallback.");
- }
-#endif
-
-#if LV_USE_GPU_NXP_VG_LITE
- if(!done && !mask_any && !need_argb8565_support() &&
- !lv_img_cf_is_chroma_keyed(cf) && !recolor
-#if LV_COLOR_DEPTH!=32
- && !lv_img_cf_has_alpha(cf)
-#endif
- ) {
- lv_gpu_nxp_vglite_blit_info_t blit;
- lv_coord_t src_stride = lv_area_get_width(coords);
-
- blit.src = src_buf;
- blit.src_width = lv_area_get_width(coords);
- blit.src_height = lv_area_get_height(coords);
- blit.src_stride = src_stride * (int32_t)sizeof(lv_color_t);
- blit.src_area.x1 = (blend_area.x1 - (coords->x1 - draw_ctx->buf_area->x1));
- blit.src_area.y1 = (blend_area.y1 - (coords->y1 - draw_ctx->buf_area->y1));
- blit.src_area.x2 = blit.src_area.x1 + blit.src_width - 1;
- blit.src_area.y2 = blit.src_area.y1 + blit.src_height - 1;
-
- blit.dst = dest_buf;
- blit.dst_width = lv_area_get_width(draw_ctx->buf_area);
- blit.dst_height = lv_area_get_height(draw_ctx->buf_area);
- blit.dst_stride = dest_stride * (int32_t)sizeof(lv_color_t);
- blit.dst_area.x1 = blend_area.x1;
- blit.dst_area.y1 = blend_area.y1;
- blit.dst_area.x2 = blend_area.x2;
- blit.dst_area.y2 = blend_area.y2;
-
- blit.opa = dsc->opa;
- blit.angle = dsc->angle;
- blit.pivot = dsc->pivot;
- blit.zoom = dsc->zoom;
-
- done = (lv_gpu_nxp_vglite_blit_transform(&blit) == LV_RES_OK);
-
- if(!done)
- VG_LITE_LOG_TRACE("VG-Lite blit transform failed. Fallback.");
- }
-#endif
-
- if(!done)
- lv_draw_sw_img_decoded(draw_ctx, dsc, coords, map_p, cf);
-}
-
-static void lv_draw_nxp_rect(lv_draw_ctx_t * draw_ctx, const lv_draw_rect_dsc_t * dsc, const lv_area_t * coords)
-{
- bool done = false;
- lv_draw_rect_dsc_t nxp_dsc;
-
- lv_memcpy(&nxp_dsc, dsc, sizeof(nxp_dsc));
-#if LV_DRAW_COMPLEX
- /* Draw only the shadow */
- nxp_dsc.bg_opa = 0;
- nxp_dsc.bg_img_opa = 0;
- nxp_dsc.border_opa = 0;
- nxp_dsc.outline_opa = 0;
-
- lv_draw_sw_rect(draw_ctx, &nxp_dsc, coords);
-
- /* Draw the background */
- nxp_dsc.shadow_opa = 0;
- nxp_dsc.bg_opa = dsc->bg_opa;
- done = (draw_nxp_bg(draw_ctx, &nxp_dsc, coords) == LV_RES_OK);
-#endif /*LV_DRAW_COMPLEX*/
-
- /* Draw the remaining parts */
- nxp_dsc.shadow_opa = 0;
- if(done)
- nxp_dsc.bg_opa = 0;
- nxp_dsc.bg_img_opa = dsc->bg_img_opa;
- nxp_dsc.border_opa = dsc->border_opa;
- nxp_dsc.outline_opa = dsc->outline_opa;
-
- lv_draw_sw_rect(draw_ctx, &nxp_dsc, coords);
-}
-
-static lv_res_t draw_nxp_bg(lv_draw_ctx_t * draw_ctx, const lv_draw_rect_dsc_t * dsc, const lv_area_t * coords)
-{
- if(dsc->bg_opa <= LV_OPA_MIN)
- return LV_RES_INV;
-
- lv_area_t bg_coords;
- lv_area_copy(&bg_coords, coords);
-
- /*If the border fully covers make the bg area 1px smaller to avoid artifacts on the corners*/
- if(dsc->border_width > 1 && dsc->border_opa >= (lv_opa_t)LV_OPA_MAX && dsc->radius != 0) {
- bg_coords.x1 += (dsc->border_side & LV_BORDER_SIDE_LEFT) ? 1 : 0;
- bg_coords.y1 += (dsc->border_side & LV_BORDER_SIDE_TOP) ? 1 : 0;
- bg_coords.x2 -= (dsc->border_side & LV_BORDER_SIDE_RIGHT) ? 1 : 0;
- bg_coords.y2 -= (dsc->border_side & LV_BORDER_SIDE_BOTTOM) ? 1 : 0;
- }
-
- lv_area_t clipped_coords;
- if(!_lv_area_intersect(&clipped_coords, &bg_coords, draw_ctx->clip_area))
- return LV_RES_INV;
-
- lv_grad_dir_t grad_dir = dsc->bg_grad.dir;
- lv_color_t bg_color = grad_dir == LV_GRAD_DIR_NONE ? dsc->bg_color : dsc->bg_grad.stops[0].color;
- if(bg_color.full == dsc->bg_grad.stops[1].color.full) grad_dir = LV_GRAD_DIR_NONE;
-
- bool mask_any = lv_draw_mask_is_any(&bg_coords);
-
- /*
- * Most simple case: just a plain rectangle (no mask, no radius, no gradient)
- * shall fallback to lv_draw_sw_blend().
- *
- * Complex case: gradient or radius but no mask.
- */
- if(!mask_any && ((dsc->radius != 0) || (grad_dir != LV_GRAD_DIR_NONE)) && !need_argb8565_support()) {
-#if LV_USE_GPU_NXP_VG_LITE
- lv_res_t res = lv_gpu_nxp_vglite_draw_bg(draw_ctx, dsc, &bg_coords);
- if(res != LV_RES_OK)
- VG_LITE_LOG_TRACE("VG-Lite draw bg failed. Fallback.");
-
- return res;
-#endif
- }
-
- return LV_RES_INV;
-}
-
-static void lv_draw_nxp_arc(lv_draw_ctx_t * draw_ctx, const lv_draw_arc_dsc_t * dsc, const lv_point_t * center,
- uint16_t radius, uint16_t start_angle, uint16_t end_angle)
-{
- bool done = false;
-
-#if LV_DRAW_COMPLEX
- if(dsc->opa <= LV_OPA_MIN)
- return;
- if(dsc->width == 0)
- return;
- if(start_angle == end_angle)
- return;
-
-#if LV_USE_GPU_NXP_VG_LITE
- if(!need_argb8565_support()) {
- done = (lv_gpu_nxp_vglite_draw_arc(draw_ctx, dsc, center, (int32_t)radius,
- (int32_t)start_angle, (int32_t)end_angle) == LV_RES_OK);
- if(!done)
- VG_LITE_LOG_TRACE("VG-Lite draw arc failed. Fallback.");
- }
-#endif
-#endif/*LV_DRAW_COMPLEX*/
-
- if(!done)
- lv_draw_sw_arc(draw_ctx, dsc, center, radius, start_angle, end_angle);
-}
-
-#endif /*LV_USE_GPU_NXP_PXP || LV_USE_GPU_NXP_VG_LITE*/
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_draw_nxp_pxp.mk b/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_draw_nxp_pxp.mk
index ff475a193..5c684bcd5 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_draw_nxp_pxp.mk
+++ b/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_draw_nxp_pxp.mk
@@ -1,3 +1,4 @@
+CSRCS += lv_draw_pxp.c
CSRCS += lv_draw_pxp_blend.c
CSRCS += lv_gpu_nxp_pxp_osa.c
CSRCS += lv_gpu_nxp_pxp.c
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_draw_pxp.c b/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_draw_pxp.c
new file mode 100644
index 000000000..a7084b408
--- /dev/null
+++ b/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_draw_pxp.c
@@ -0,0 +1,250 @@
+/**
+ * @file lv_draw_pxp.c
+ *
+ */
+
+/**
+ * MIT License
+ *
+ * Copyright 2022, 2023 NXP
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ * the Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next paragraph)
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+ * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+ * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+/*********************
+ * INCLUDES
+ *********************/
+
+#include "lv_draw_pxp.h"
+
+#if LV_USE_GPU_NXP_PXP
+#include "lv_draw_pxp_blend.h"
+
+#if LV_COLOR_DEPTH != 32
+ #include "../../../core/lv_refr.h"
+#endif
+
+/*********************
+ * DEFINES
+ *********************/
+
+/* Minimum area (in pixels) for PXP blit/fill processing. */
+#ifndef LV_GPU_NXP_PXP_SIZE_LIMIT
+ #define LV_GPU_NXP_PXP_SIZE_LIMIT 5000
+#endif
+
+/**********************
+ * TYPEDEFS
+ **********************/
+
+/**********************
+ * STATIC PROTOTYPES
+ **********************/
+
+static void lv_draw_pxp_wait_for_finish(lv_draw_ctx_t * draw_ctx);
+
+static void lv_draw_pxp_img_decoded(lv_draw_ctx_t * draw_ctx, const lv_draw_img_dsc_t * dsc,
+ const lv_area_t * coords, const uint8_t * map_p, lv_img_cf_t cf);
+
+static void lv_draw_pxp_blend(lv_draw_ctx_t * draw_ctx, const lv_draw_sw_blend_dsc_t * dsc);
+
+/**********************
+ * STATIC VARIABLES
+ **********************/
+
+/**********************
+ * MACROS
+ **********************/
+
+/**********************
+ * GLOBAL FUNCTIONS
+ **********************/
+
+void lv_draw_pxp_ctx_init(lv_disp_drv_t * drv, lv_draw_ctx_t * draw_ctx)
+{
+ lv_draw_sw_init_ctx(drv, draw_ctx);
+
+ lv_draw_pxp_ctx_t * pxp_draw_ctx = (lv_draw_sw_ctx_t *)draw_ctx;
+ pxp_draw_ctx->base_draw.draw_img_decoded = lv_draw_pxp_img_decoded;
+ pxp_draw_ctx->blend = lv_draw_pxp_blend;
+ pxp_draw_ctx->base_draw.wait_for_finish = lv_draw_pxp_wait_for_finish;
+}
+
+void lv_draw_pxp_ctx_deinit(lv_disp_drv_t * drv, lv_draw_ctx_t * draw_ctx)
+{
+ lv_draw_sw_deinit_ctx(drv, draw_ctx);
+}
+
+/**********************
+ * STATIC FUNCTIONS
+ **********************/
+
+/**
+ * During rendering, LVGL might initializes new draw_ctxs and start drawing into
+ * a separate buffer (called layer). If the content to be rendered has "holes",
+ * e.g. rounded corner, LVGL temporarily sets the disp_drv.screen_transp flag.
+ * It means the renderers should draw into an ARGB buffer.
+ * With 32 bit color depth it's not a big problem but with 16 bit color depth
+ * the target pixel format is ARGB8565 which is not supported by the GPU.
+ * In this case, the PXP callbacks should fallback to SW rendering.
+ */
+static inline bool need_argb8565_support()
+{
+#if LV_COLOR_DEPTH != 32
+ lv_disp_t * disp = _lv_refr_get_disp_refreshing();
+
+ if(disp->driver->screen_transp == 1)
+ return true;
+#endif
+
+ return false;
+}
+
+static void lv_draw_pxp_wait_for_finish(lv_draw_ctx_t * draw_ctx)
+{
+ lv_gpu_nxp_pxp_wait();
+
+ lv_draw_sw_wait_for_finish(draw_ctx);
+}
+
+static void lv_draw_pxp_blend(lv_draw_ctx_t * draw_ctx, const lv_draw_sw_blend_dsc_t * dsc)
+{
+ if(dsc->opa <= (lv_opa_t)LV_OPA_MIN)
+ return;
+
+ if(need_argb8565_support()) {
+ lv_draw_sw_blend_basic(draw_ctx, dsc);
+ return;
+ }
+
+ lv_area_t blend_area;
+ /*Let's get the blend area which is the intersection of the area to draw and the clip area*/
+ if(!_lv_area_intersect(&blend_area, dsc->blend_area, draw_ctx->clip_area))
+ return; /*Fully clipped, nothing to do*/
+
+ /*Make the blend area relative to the buffer*/
+ lv_area_move(&blend_area, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
+ if(dsc->mask_buf != NULL || dsc->blend_mode != LV_BLEND_MODE_NORMAL ||
+ lv_area_get_size(&blend_area) < LV_GPU_NXP_PXP_SIZE_LIMIT) {
+ lv_draw_sw_blend_basic(draw_ctx, dsc);
+ return;
+ }
+
+ /*Fill/Blend only non masked, normal blended*/
+ lv_color_t * dest_buf = draw_ctx->buf;
+ lv_coord_t dest_stride = lv_area_get_width(draw_ctx->buf_area);
+ const lv_color_t * src_buf = dsc->src_buf;
+
+ if(src_buf == NULL) {
+ lv_gpu_nxp_pxp_fill(dest_buf, &blend_area, dest_stride, dsc->color, dsc->opa);
+ }
+ else {
+ lv_area_t src_area;
+ src_area.x1 = blend_area.x1 - (dsc->blend_area->x1 - draw_ctx->buf_area->x1);
+ src_area.y1 = blend_area.y1 - (dsc->blend_area->y1 - draw_ctx->buf_area->y1);
+ src_area.x2 = src_area.x1 + lv_area_get_width(dsc->blend_area) - 1;
+ src_area.y2 = src_area.y1 + lv_area_get_height(dsc->blend_area) - 1;
+ lv_coord_t src_stride = lv_area_get_width(dsc->blend_area);
+
+ lv_gpu_nxp_pxp_blit(dest_buf, &blend_area, dest_stride, src_buf, &src_area, src_stride,
+ dsc->opa, LV_DISP_ROT_NONE);
+ }
+}
+
+static void lv_draw_pxp_img_decoded(lv_draw_ctx_t * draw_ctx, const lv_draw_img_dsc_t * dsc,
+ const lv_area_t * coords, const uint8_t * map_p, lv_img_cf_t cf)
+{
+ if(dsc->opa <= (lv_opa_t)LV_OPA_MIN)
+ return;
+
+ if(need_argb8565_support()) {
+ lv_draw_sw_img_decoded(draw_ctx, dsc, coords, map_p, cf);
+ return;
+ }
+
+ const lv_color_t * src_buf = (const lv_color_t *)map_p;
+ if(!src_buf) {
+ lv_draw_sw_img_decoded(draw_ctx, dsc, coords, map_p, cf);
+ return;
+ }
+
+ lv_area_t blend_area;
+ /*Let's get the blend area which is the intersection of the area to draw and the clip area.*/
+ if(!_lv_area_intersect(&blend_area, coords, draw_ctx->clip_area))
+ return; /*Fully clipped, nothing to do*/
+
+ /*Make the blend area relative to the buffer*/
+ lv_area_move(&blend_area, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
+
+ lv_coord_t src_width = lv_area_get_width(coords);
+ lv_coord_t src_height = lv_area_get_height(coords);
+
+ bool has_mask = lv_draw_mask_is_any(&blend_area);
+ bool has_scale = (dsc->zoom != LV_IMG_ZOOM_NONE);
+ bool has_rotation = (dsc->angle != 0);
+ bool unsup_rotation = false;
+
+ if(has_rotation) {
+ /*
+ * PXP can only rotate at 90x angles.
+ */
+ if(dsc->angle % 900) {
+ PXP_LOG_TRACE("Rotation angle %d is not supported. PXP can rotate only 90x angle.", dsc->angle);
+ unsup_rotation = true;
+ }
+
+ /*
+ * PXP is set to process 16x16 blocks to optimize the system for memory
+ * bandwidth and image processing time.
+ * The output engine essentially truncates any output pixels after the
+ * desired number of pixels has been written.
+ * When rotating a source image and the output is not divisible by the block
+ * size, the incorrect pixels could be truncated and the final output image
+ * can look shifted.
+ */
+ if(src_width % 16 || src_height % 16) {
+ PXP_LOG_TRACE("Rotation is not supported for image w/o alignment to block size 16x16.");
+ unsup_rotation = true;
+ }
+ }
+
+ if(has_mask || has_scale || unsup_rotation || lv_area_get_size(&blend_area) < LV_GPU_NXP_PXP_SIZE_LIMIT
+#if LV_COLOR_DEPTH != 32
+ || lv_img_cf_has_alpha(cf)
+#endif
+ ) {
+ lv_draw_sw_img_decoded(draw_ctx, dsc, coords, map_p, cf);
+ return;
+ }
+
+ lv_color_t * dest_buf = draw_ctx->buf;
+ lv_coord_t dest_stride = lv_area_get_width(draw_ctx->buf_area);
+
+ lv_area_t src_area;
+ src_area.x1 = blend_area.x1 - (coords->x1 - draw_ctx->buf_area->x1);
+ src_area.y1 = blend_area.y1 - (coords->y1 - draw_ctx->buf_area->y1);
+ src_area.x2 = src_area.x1 + src_width - 1;
+ src_area.y2 = src_area.y1 + src_height - 1;
+ lv_coord_t src_stride = lv_area_get_width(coords);
+
+ lv_gpu_nxp_pxp_blit_transform(dest_buf, &blend_area, dest_stride, src_buf, &src_area, src_stride,
+ dsc, cf);
+}
+
+#endif /*LV_USE_GPU_NXP_PXP*/
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/lv_gpu_nxp.h b/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_draw_pxp.h
similarity index 77%
rename from lib/libesp32_lvgl/lvgl/src/draw/nxp/lv_gpu_nxp.h
rename to lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_draw_pxp.h
index 899aff25b..1ace3bca4 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/nxp/lv_gpu_nxp.h
+++ b/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_draw_pxp.h
@@ -1,12 +1,12 @@
/**
- * @file lv_gpu_nxp.h
+ * @file lv_draw_pxp.h
*
*/
/**
* MIT License
*
- * Copyright 2022 NXP
+ * Copyright 2022, 2023 NXP
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -27,8 +27,8 @@
*
*/
-#ifndef LV_GPU_NXP_H
-#define LV_GPU_NXP_H
+#ifndef LV_DRAW_PXP_H
+#define LV_DRAW_PXP_H
#ifdef __cplusplus
extern "C" {
@@ -38,9 +38,10 @@ extern "C" {
* INCLUDES
*********************/
-#include "../../lv_conf_internal.h"
-#if LV_USE_GPU_NXP_PXP || LV_USE_GPU_NXP_VG_LITE
-#include "../sw/lv_draw_sw.h"
+#include "../../../lv_conf_internal.h"
+
+#if LV_USE_GPU_NXP_PXP
+#include "../../sw/lv_draw_sw.h"
/*********************
* DEFINES
@@ -49,23 +50,23 @@ extern "C" {
/**********************
* TYPEDEFS
**********************/
-typedef lv_draw_sw_ctx_t lv_draw_nxp_ctx_t;
+typedef lv_draw_sw_ctx_t lv_draw_pxp_ctx_t;
/**********************
* GLOBAL PROTOTYPES
**********************/
-void lv_draw_nxp_ctx_init(struct _lv_disp_drv_t * drv, lv_draw_ctx_t * draw_ctx);
+void lv_draw_pxp_ctx_init(struct _lv_disp_drv_t * drv, lv_draw_ctx_t * draw_ctx);
-void lv_draw_nxp_ctx_deinit(struct _lv_disp_drv_t * drv, lv_draw_ctx_t * draw_ctx);
+void lv_draw_pxp_ctx_deinit(struct _lv_disp_drv_t * drv, lv_draw_ctx_t * draw_ctx);
/**********************
* MACROS
**********************/
-#endif /*LV_USE_GPU_NXP_PXP || LV_USE_GPU_NXP_VG_LITE*/
+#endif /*LV_USE_GPU_NXP_PXP*/
#ifdef __cplusplus
} /*extern "C"*/
#endif
-#endif /*LV_GPU_NXP_H*/
+#endif /*LV_DRAW_PXP_H*/
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_draw_pxp_blend.c b/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_draw_pxp_blend.c
index c0a6ecafa..a32c91710 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_draw_pxp_blend.c
+++ b/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_draw_pxp_blend.c
@@ -6,7 +6,7 @@
/**
* MIT License
*
- * Copyright 2020-2022 NXP
+ * Copyright 2020-2023 NXP
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -34,20 +34,23 @@
#include "lv_draw_pxp_blend.h"
#if LV_USE_GPU_NXP_PXP
+#include "lvgl_support.h"
/*********************
* DEFINES
*********************/
+#define PXP_TEMP_BUF_SIZE LCD_WIDTH * LCD_HEIGHT * LCD_FB_BYTE_PER_PIXEL
+
#if LV_COLOR_16_SWAP
#error Color swap not implemented. Disable LV_COLOR_16_SWAP feature.
#endif
-#if LV_COLOR_DEPTH==16
+#if LV_COLOR_DEPTH == 16
#define PXP_OUT_PIXEL_FORMAT kPXP_OutputPixelFormatRGB565
#define PXP_AS_PIXEL_FORMAT kPXP_AsPixelFormatRGB565
#define PXP_PS_PIXEL_FORMAT kPXP_PsPixelFormatRGB565
-#elif LV_COLOR_DEPTH==32
+#elif LV_COLOR_DEPTH == 32
#define PXP_OUT_PIXEL_FORMAT kPXP_OutputPixelFormatARGB8888
#define PXP_AS_PIXEL_FORMAT kPXP_AsPixelFormatARGB8888
#define PXP_PS_PIXEL_FORMAT kPXP_PsPixelFormatRGB888
@@ -55,13 +58,6 @@
#error Only 16bit and 32bit color depth are supported. Set LV_COLOR_DEPTH to 16 or 32.
#endif
-#if defined (__alpha__) || defined (__ia64__) || defined (__x86_64__) \
- || defined (_WIN64) || defined (__LP64__) || defined (__LLP64__)
- #define ALIGN_SIZE 8
-#else
- #define ALIGN_SIZE 4
-#endif
-
/**********************
* TYPEDEFS
**********************/
@@ -70,63 +66,60 @@
* STATIC PROTOTYPES
**********************/
+static LV_ATTRIBUTE_MEM_ALIGN uint8_t temp_buf[PXP_TEMP_BUF_SIZE];
+
/**
* BLock Image Transfer - copy rectangular image from src buffer to dst buffer
* with combination of transformation (rotation, scale, recolor) and opacity, alpha channel
* or color keying. This requires two steps. First step is used for transformation into
* a temporary buffer and the second one will handle the color format or opacity.
*
- * @param[in/out] dest_buf destination buffer
- * @param[in] dest_area area to be copied from src_buf to dst_buf
- * @param[in] dest_stride width (stride) of destination buffer in pixels
- * @param[in] src_buf source buffer
- * @param[in] src_area source area with absolute coordinates to draw on destination buffer
- * @param[in] dsc image descriptor
- * @param[in] cf color format
- * @retval LV_RES_OK Fill completed
- * @retval LV_RES_INV Error occurred (\see LV_GPU_NXP_PXP_LOG_ERRORS)
+ * @param[in/out] dest_buf Destination buffer
+ * @param[in] dest_area Area with relative coordinates of destination buffer
+ * @param[in] dest_stride Stride of destination buffer in pixels
+ * @param[in] src_buf Source buffer
+ * @param[in] src_area Area with relative coordinates of source buffer
+ * @param[in] src_stride Stride of source buffer in pixels
+ * @param[in] dsc Image descriptor
+ * @param[in] cf Color format
*/
-static lv_res_t lv_gpu_nxp_pxp_blit_opa(lv_color_t * dest_buf, const lv_area_t * dest_area, lv_coord_t dest_stride,
- const lv_color_t * src_buf, const lv_area_t * src_area,
- const lv_draw_img_dsc_t * dsc, lv_img_cf_t cf);
+static void lv_pxp_blit_opa(lv_color_t * dest_buf, const lv_area_t * dest_area, lv_coord_t dest_stride,
+ const lv_color_t * src_buf, const lv_area_t * src_area, lv_coord_t src_stride,
+ const lv_draw_img_dsc_t * dsc, lv_img_cf_t cf);
/**
* BLock Image Transfer - copy rectangular image from src buffer to dst buffer
* with transformation and full opacity.
*
- * @param[in/out] dest_buf destination buffer
- * @param[in] dest_area area to be copied from src_buf to dst_buf
- * @param[in] dest_stride width (stride) of destination buffer in pixels
- * @param[in] src_buf source buffer
- * @param[in] src_area source area with absolute coordinates to draw on destination buffer
- * @param[in] dsc image descriptor
- * @param[in] cf color format
- * @retval LV_RES_OK Fill completed
- * @retval LV_RES_INV Error occurred (\see LV_GPU_NXP_PXP_LOG_ERRORS)
+ * @param[in/out] dest_buf Destination buffer
+ * @param[in] dest_area Area with relative coordinates of destination buffer
+ * @param[in] dest_stride Stride of destination buffer in pixels
+ * @param[in] src_buf Source buffer
+ * @param[in] src_area Area with relative coordinates of source buffer
+ * @param[in] src_stride Stride of source buffer in pixels
+ * @param[in] dsc Image descriptor
+ * @param[in] cf Color format
*/
-static lv_res_t lv_gpu_nxp_pxp_blit_cover(lv_color_t * dest_buf, const lv_area_t * dest_area,
- lv_coord_t dest_stride,
- const lv_color_t * src_buf, const lv_area_t * src_area,
- const lv_draw_img_dsc_t * dsc, lv_img_cf_t cf);
+static void lv_pxp_blit_cover(lv_color_t * dest_buf, const lv_area_t * dest_area, lv_coord_t dest_stride,
+ const lv_color_t * src_buf, const lv_area_t * src_area, lv_coord_t src_stride,
+ const lv_draw_img_dsc_t * dsc, lv_img_cf_t cf);
/**
* BLock Image Transfer - copy rectangular image from src buffer to dst buffer
* without transformation but handling color format or opacity.
*
- * @param[in/out] dest_buf destination buffer
- * @param[in] dest_area area to be copied from src_buf to dst_buf
- * @param[in] dest_stride width (stride) of destination buffer in pixels
- * @param[in] src_buf source buffer
- * @param[in] src_area source area with absolute coordinates to draw on destination buffer
- * @param[in] dsc image descriptor
- * @param[in] cf color format
- * @retval LV_RES_OK Fill completed
- * @retval LV_RES_INV Error occurred (\see LV_GPU_NXP_PXP_LOG_ERRORS)
+ * @param[in/out] dest_buf Destination buffer
+ * @param[in] dest_area Area with relative coordinates of destination buffer
+ * @param[in] dest_stride Stride of destination buffer in pixels
+ * @param[in] src_buf Source buffer
+ * @param[in] src_area Area with relative coordinates of source buffer
+ * @param[in] src_stride Stride of source buffer in pixels
+ * @param[in] dsc Image descriptor
+ * @param[in] cf Color format
*/
-static lv_res_t lv_gpu_nxp_pxp_blit_cf(lv_color_t * dest_buf, const lv_area_t * dest_area,
- lv_coord_t dest_stride,
- const lv_color_t * src_buf, const lv_area_t * src_area,
- const lv_draw_img_dsc_t * dsc, lv_img_cf_t cf);
+static void lv_pxp_blit_cf(lv_color_t * dest_buf, const lv_area_t * dest_area, lv_coord_t dest_stride,
+ const lv_color_t * src_buf, const lv_area_t * src_area, lv_coord_t src_stride,
+ const lv_draw_img_dsc_t * dsc, lv_img_cf_t cf);
/**********************
* STATIC VARIABLES
@@ -136,45 +129,27 @@ static lv_res_t lv_gpu_nxp_pxp_blit_cf(lv_color_t * dest_buf, const lv_area_t *
* MACROS
**********************/
-#define ROUND_UP(x, align) ((x + (align - 1)) & ~(align - 1))
-
/**********************
* GLOBAL FUNCTIONS
**********************/
-lv_res_t lv_gpu_nxp_pxp_fill(lv_color_t * dest_buf, lv_coord_t dest_stride, const lv_area_t * fill_area,
- lv_color_t color, lv_opa_t opa)
+void lv_gpu_nxp_pxp_fill(lv_color_t * dest_buf, const lv_area_t * dest_area, lv_coord_t dest_stride,
+ lv_color_t color, lv_opa_t opa)
{
- uint32_t area_size = lv_area_get_size(fill_area);
- lv_coord_t area_w = lv_area_get_width(fill_area);
- lv_coord_t area_h = lv_area_get_height(fill_area);
+ lv_coord_t dest_w = lv_area_get_width(dest_area);
+ lv_coord_t dest_h = lv_area_get_height(dest_area);
- if(opa >= (lv_opa_t)LV_OPA_MAX) {
- if(area_size < LV_GPU_NXP_PXP_FILL_SIZE_LIMIT) {
- PXP_LOG_TRACE("Area size %d smaller than limit %d.", area_size, LV_GPU_NXP_PXP_FILL_SIZE_LIMIT);
- return LV_RES_INV;
- }
- }
- else {
- if(area_size < LV_GPU_NXP_PXP_FILL_OPA_SIZE_LIMIT) {
- PXP_LOG_TRACE("Area size %d smaller than limit %d.", area_size, LV_GPU_NXP_PXP_FILL_OPA_SIZE_LIMIT);
- return LV_RES_INV;
- }
- }
-
- PXP_Init(LV_GPU_NXP_PXP_ID);
- PXP_EnableCsc1(LV_GPU_NXP_PXP_ID, false); /*Disable CSC1, it is enabled by default.*/
- PXP_SetProcessBlockSize(LV_GPU_NXP_PXP_ID, kPXP_BlockSize16); /*Block size 16x16 for higher performance*/
+ lv_gpu_nxp_pxp_reset();
/*OUT buffer configure*/
pxp_output_buffer_config_t outputConfig = {
.pixelFormat = PXP_OUT_PIXEL_FORMAT,
.interlacedMode = kPXP_OutputProgressive,
- .buffer0Addr = (uint32_t)(dest_buf + dest_stride * fill_area->y1 + fill_area->x1),
+ .buffer0Addr = (uint32_t)(dest_buf + dest_stride * dest_area->y1 + dest_area->x1),
.buffer1Addr = (uint32_t)NULL,
.pitchBytes = dest_stride * sizeof(lv_color_t),
- .width = area_w,
- .height = area_h
+ .width = dest_w,
+ .height = dest_h
};
PXP_SetOutputBufferConfig(LV_GPU_NXP_PXP_ID, &outputConfig);
@@ -193,7 +168,7 @@ lv_res_t lv_gpu_nxp_pxp_fill(lv_color_t * dest_buf, lv_coord_t dest_stride, cons
};
PXP_SetAlphaSurfaceBufferConfig(LV_GPU_NXP_PXP_ID, &asBufferConfig);
- PXP_SetAlphaSurfacePosition(LV_GPU_NXP_PXP_ID, 0U, 0U, area_w, area_h);
+ PXP_SetAlphaSurfacePosition(LV_GPU_NXP_PXP_ID, 0U, 0U, dest_w - 1U, dest_h - 1U);
}
/*Disable PS, use as color generator*/
@@ -223,34 +198,19 @@ lv_res_t lv_gpu_nxp_pxp_fill(lv_color_t * dest_buf, lv_coord_t dest_stride, cons
PXP_SetPorterDuffConfig(LV_GPU_NXP_PXP_ID, &pdConfig);
- lv_gpu_nxp_pxp_run(); /*Start PXP task*/
-
- return LV_RES_OK;
+ lv_gpu_nxp_pxp_run();
}
-lv_res_t lv_gpu_nxp_pxp_blit(lv_color_t * dest_buf, const lv_area_t * dest_area, lv_coord_t dest_stride,
- const lv_color_t * src_buf, const lv_area_t * src_area, lv_opa_t opa, lv_disp_rot_t angle)
+void lv_gpu_nxp_pxp_blit(lv_color_t * dest_buf, const lv_area_t * dest_area, lv_coord_t dest_stride,
+ const lv_color_t * src_buf, const lv_area_t * src_area, lv_coord_t src_stride,
+ lv_opa_t opa, lv_disp_rot_t angle)
{
- uint32_t dest_size = lv_area_get_size(dest_area);
lv_coord_t dest_w = lv_area_get_width(dest_area);
lv_coord_t dest_h = lv_area_get_height(dest_area);
+ lv_coord_t src_w = lv_area_get_width(src_area);
+ lv_coord_t src_h = lv_area_get_height(src_area);
- if(opa >= (lv_opa_t)LV_OPA_MAX) {
- if(dest_size < LV_GPU_NXP_PXP_BLIT_SIZE_LIMIT) {
- PXP_LOG_TRACE("Area size %d smaller than limit %d.", dest_size, LV_GPU_NXP_PXP_BLIT_SIZE_LIMIT);
- return LV_RES_INV;
- }
- }
- else {
- if(dest_size < LV_GPU_NXP_PXP_BLIT_OPA_SIZE_LIMIT) {
- PXP_LOG_TRACE("Area size %d smaller than limit %d.", dest_size, LV_GPU_NXP_PXP_BLIT_OPA_SIZE_LIMIT);
- return LV_RES_INV;
- }
- }
-
- PXP_Init(LV_GPU_NXP_PXP_ID);
- PXP_EnableCsc1(LV_GPU_NXP_PXP_ID, false); /*Disable CSC1, it is enabled by default.*/
- PXP_SetProcessBlockSize(LV_GPU_NXP_PXP_ID, kPXP_BlockSize16); /*block size 16x16 for higher performance*/
+ lv_gpu_nxp_pxp_reset();
/* convert rotation angle */
pxp_rotate_degree_t pxp_rot;
@@ -297,19 +257,17 @@ lv_res_t lv_gpu_nxp_pxp_blit(lv_color_t * dest_buf, const lv_area_t * dest_area,
asBlendConfig.alphaMode = kPXP_AlphaOverride;
PXP_SetProcessSurfaceBufferConfig(LV_GPU_NXP_PXP_ID, &psBufferConfig);
- PXP_SetProcessSurfacePosition(LV_GPU_NXP_PXP_ID, 0U, 0U, dest_w - 1, dest_h - 1);
+ PXP_SetProcessSurfacePosition(LV_GPU_NXP_PXP_ID, 0U, 0U, dest_w - 1U, dest_h - 1U);
}
- lv_coord_t src_stride = lv_area_get_width(src_area);
-
/*AS buffer - source image*/
pxp_as_buffer_config_t asBufferConfig = {
.pixelFormat = PXP_AS_PIXEL_FORMAT,
- .bufferAddr = (uint32_t)src_buf,
+ .bufferAddr = (uint32_t)(src_buf + src_stride * src_area->y1 + src_area->x1),
.pitchBytes = src_stride * sizeof(lv_color_t)
};
PXP_SetAlphaSurfaceBufferConfig(LV_GPU_NXP_PXP_ID, &asBufferConfig);
- PXP_SetAlphaSurfacePosition(LV_GPU_NXP_PXP_ID, 0U, 0U, dest_w - 1U, dest_h - 1U);
+ PXP_SetAlphaSurfacePosition(LV_GPU_NXP_PXP_ID, 0U, 0U, src_w - 1U, src_h - 1U);
PXP_SetAlphaSurfaceBlendConfig(LV_GPU_NXP_PXP_ID, &asBlendConfig);
PXP_EnableAlphaSurfaceOverlayColorKey(LV_GPU_NXP_PXP_ID, false);
@@ -325,162 +283,102 @@ lv_res_t lv_gpu_nxp_pxp_blit(lv_color_t * dest_buf, const lv_area_t * dest_area,
};
PXP_SetOutputBufferConfig(LV_GPU_NXP_PXP_ID, &outputBufferConfig);
- lv_gpu_nxp_pxp_run(); /* Start PXP task */
-
- return LV_RES_OK;
+ lv_gpu_nxp_pxp_run();
}
-lv_res_t lv_gpu_nxp_pxp_blit_transform(lv_color_t * dest_buf, const lv_area_t * dest_area, lv_coord_t dest_stride,
- const lv_color_t * src_buf, const lv_area_t * src_area,
- const lv_draw_img_dsc_t * dsc, lv_img_cf_t cf)
+void lv_gpu_nxp_pxp_blit_transform(lv_color_t * dest_buf, const lv_area_t * dest_area, lv_coord_t dest_stride,
+ const lv_color_t * src_buf, const lv_area_t * src_area, lv_coord_t src_stride,
+ const lv_draw_img_dsc_t * dsc, lv_img_cf_t cf)
{
- uint32_t dest_size = lv_area_get_size(dest_area);
+ bool has_recolor = (dsc->recolor_opa != LV_OPA_TRANSP);
+ bool has_rotation = (dsc->angle != 0);
- if(dsc->opa >= (lv_opa_t)LV_OPA_MAX) {
- if(dest_size < LV_GPU_NXP_PXP_BLIT_SIZE_LIMIT) {
- PXP_LOG_TRACE("Area size %d smaller than limit %d.", dest_size, LV_GPU_NXP_PXP_BLIT_SIZE_LIMIT);
- return LV_RES_INV;
+ if(has_recolor || has_rotation) {
+ if(dsc->opa >= (lv_opa_t)LV_OPA_MAX && !lv_img_cf_has_alpha(cf) && !lv_img_cf_is_chroma_keyed(cf)) {
+ lv_pxp_blit_cover(dest_buf, dest_area, dest_stride, src_buf, src_area, src_stride, dsc, cf);
+ return;
}
- }
- else {
- if(dest_size < LV_GPU_NXP_PXP_BLIT_OPA_SIZE_LIMIT) {
- PXP_LOG_TRACE("Area size %d smaller than limit %d.", dest_size, LV_GPU_NXP_PXP_BLIT_OPA_SIZE_LIMIT);
- return LV_RES_INV;
- }
- }
-
- bool recolor = (dsc->recolor_opa != LV_OPA_TRANSP);
- bool rotation = (dsc->angle != 0);
-
- if(rotation) {
- if(dsc->angle != 0 && dsc->angle != 900 && dsc->angle != 1800 && dsc->angle != 2700) {
- PXP_LOG_TRACE("Rotation angle %d is not supported. PXP can rotate only 90x angle.", dsc->angle);
- return LV_RES_INV;
- }
- }
-
- if(recolor || rotation) {
- if(dsc->opa >= (lv_opa_t)LV_OPA_MAX && !lv_img_cf_has_alpha(cf) && !lv_img_cf_is_chroma_keyed(cf))
- return lv_gpu_nxp_pxp_blit_cover(dest_buf, dest_area, dest_stride, src_buf, src_area, dsc, cf);
- else
+ else {
/*Recolor and/or rotation with alpha or opacity is done in two steps.*/
- return lv_gpu_nxp_pxp_blit_opa(dest_buf, dest_area, dest_stride, src_buf, src_area, dsc, cf);
+ lv_pxp_blit_opa(dest_buf, dest_area, dest_stride, src_buf, src_area, src_stride, dsc, cf);
+ return;
+ }
}
- return lv_gpu_nxp_pxp_blit_cf(dest_buf, dest_area, dest_stride, src_buf, src_area, dsc, cf);
+ lv_pxp_blit_cf(dest_buf, dest_area, dest_stride, src_buf, src_area, src_stride, dsc, cf);
}
/**********************
* STATIC FUNCTIONS
**********************/
-static lv_res_t lv_gpu_nxp_pxp_blit_opa(lv_color_t * dest_buf, const lv_area_t * dest_area, lv_coord_t dest_stride,
- const lv_color_t * src_buf, const lv_area_t * src_area,
- const lv_draw_img_dsc_t * dsc, lv_img_cf_t cf)
+static void lv_pxp_blit_opa(lv_color_t * dest_buf, const lv_area_t * dest_area, lv_coord_t dest_stride,
+ const lv_color_t * src_buf, const lv_area_t * src_area, lv_coord_t src_stride,
+ const lv_draw_img_dsc_t * dsc, lv_img_cf_t cf)
{
- lv_coord_t dest_w = lv_area_get_width(dest_area);
- lv_coord_t dest_h = lv_area_get_height(dest_area);
- lv_res_t res;
- uint32_t size = dest_w * dest_h * sizeof(lv_color_t);
-
- if(ROUND_UP(size, ALIGN_SIZE) >= LV_MEM_SIZE)
- PXP_RETURN_INV("Insufficient memory for temporary buffer. Please increase LV_MEM_SIZE.");
-
- lv_color_t * tmp_buf = (lv_color_t *)lv_mem_buf_get(size);
- if(!tmp_buf)
- PXP_RETURN_INV("Allocating temporary buffer failed.");
-
- const lv_area_t tmp_area = {
+ lv_coord_t temp_area_w = lv_area_get_width(dest_area);
+ lv_coord_t temp_area_h = lv_area_get_height(dest_area);
+ const lv_area_t temp_area = {
.x1 = 0,
.y1 = 0,
- .x2 = dest_w - 1,
- .y2 = dest_h - 1
+ .x2 = temp_area_w - 1,
+ .y2 = temp_area_h - 1
};
/*Step 1: Transform with full opacity to temporary buffer*/
- res = lv_gpu_nxp_pxp_blit_cover(tmp_buf, &tmp_area, dest_w, src_buf, src_area, dsc, cf);
- if(res != LV_RES_OK) {
- PXP_LOG_TRACE("Blit cover with full opacity failed.");
- lv_mem_buf_release(tmp_buf);
+ lv_pxp_blit_cover((lv_color_t *)temp_buf, &temp_area, temp_area_w, src_buf, src_area, src_stride, dsc, cf);
- return res;
- }
-
- /*Step 2: Blit temporary results with required opacity to output*/
- res = lv_gpu_nxp_pxp_blit_cf(dest_buf, dest_area, dest_stride, tmp_buf, &tmp_area, dsc, cf);
-
- /*Clean-up memory*/
- lv_mem_buf_release(tmp_buf);
-
- return res;
+ /*Step 2: Blit temporary result with required opacity to output*/
+ lv_pxp_blit_cf(dest_buf, dest_area, dest_stride, (lv_color_t *)temp_buf, &temp_area, temp_area_w, dsc, cf);
}
-
-static lv_res_t lv_gpu_nxp_pxp_blit_cover(lv_color_t * dest_buf, const lv_area_t * dest_area,
- lv_coord_t dest_stride,
- const lv_color_t * src_buf, const lv_area_t * src_area,
- const lv_draw_img_dsc_t * dsc, lv_img_cf_t cf)
+static void lv_pxp_blit_cover(lv_color_t * dest_buf, const lv_area_t * dest_area, lv_coord_t dest_stride,
+ const lv_color_t * src_buf, const lv_area_t * src_area, lv_coord_t src_stride,
+ const lv_draw_img_dsc_t * dsc, lv_img_cf_t cf)
{
lv_coord_t dest_w = lv_area_get_width(dest_area);
lv_coord_t dest_h = lv_area_get_height(dest_area);
+ lv_coord_t src_w = lv_area_get_width(src_area);
+ lv_coord_t src_h = lv_area_get_height(src_area);
- bool recolor = (dsc->recolor_opa != LV_OPA_TRANSP);
- bool rotation = (dsc->angle != 0);
+ bool has_recolor = (dsc->recolor_opa != LV_OPA_TRANSP);
+ bool has_rotation = (dsc->angle != 0);
- PXP_Init(LV_GPU_NXP_PXP_ID);
- PXP_EnableCsc1(LV_GPU_NXP_PXP_ID, false); /*Disable CSC1, it is enabled by default.*/
- PXP_SetProcessBlockSize(LV_GPU_NXP_PXP_ID, kPXP_BlockSize16); /*block size 16x16 for higher performance*/
-
- if(rotation) {
- /*
- * PXP is set to process 16x16 blocks to optimize the system for memory
- * bandwidth and image processing time.
- * The output engine essentially truncates any output pixels after the
- * desired number of pixels has been written.
- * When rotating a source image and the output is not divisible by the block
- * size, the incorrect pixels could be truncated and the final output image
- * can look shifted.
- */
- if(lv_area_get_width(src_area) % 16 || lv_area_get_height(src_area) % 16) {
- PXP_LOG_TRACE("Rotation is not supported for image w/o alignment to block size 16x16.");
- return LV_RES_INV;
- }
+ lv_gpu_nxp_pxp_reset();
+ if(has_rotation) {
/*Convert rotation angle*/
- pxp_rotate_degree_t pxp_rot;
+ pxp_rotate_degree_t pxp_angle;
switch(dsc->angle) {
case 0:
- pxp_rot = kPXP_Rotate0;
+ pxp_angle = kPXP_Rotate0;
break;
case 900:
- pxp_rot = kPXP_Rotate90;
+ pxp_angle = kPXP_Rotate90;
break;
case 1800:
- pxp_rot = kPXP_Rotate180;
+ pxp_angle = kPXP_Rotate180;
break;
case 2700:
- pxp_rot = kPXP_Rotate270;
+ pxp_angle = kPXP_Rotate270;
break;
default:
- PXP_LOG_TRACE("Rotation angle %d is not supported. PXP can rotate only 90x angle.", dsc->angle);
- return LV_RES_INV;
+ pxp_angle = kPXP_Rotate0;
}
- PXP_SetRotateConfig(LV_GPU_NXP_PXP_ID, kPXP_RotateOutputBuffer, pxp_rot, kPXP_FlipDisable);
+ PXP_SetRotateConfig(LV_GPU_NXP_PXP_ID, kPXP_RotateOutputBuffer, pxp_angle, kPXP_FlipDisable);
}
- lv_coord_t src_stride = lv_area_get_width(src_area);
-
/*AS buffer - source image*/
pxp_as_buffer_config_t asBufferConfig = {
.pixelFormat = PXP_AS_PIXEL_FORMAT,
- .bufferAddr = (uint32_t)src_buf,
+ .bufferAddr = (uint32_t)(src_buf + src_stride * src_area->y1 + src_area->x1),
.pitchBytes = src_stride * sizeof(lv_color_t)
};
PXP_SetAlphaSurfaceBufferConfig(LV_GPU_NXP_PXP_ID, &asBufferConfig);
- PXP_SetAlphaSurfacePosition(LV_GPU_NXP_PXP_ID, 0U, 0U, dest_w - 1U, dest_h - 1U);
+ PXP_SetAlphaSurfacePosition(LV_GPU_NXP_PXP_ID, 0U, 0U, src_w - 1U, src_h - 1U);
/*Disable PS buffer*/
PXP_SetProcessSurfacePosition(LV_GPU_NXP_PXP_ID, 0xFFFFU, 0xFFFFU, 0U, 0U);
- if(recolor)
+ if(has_recolor)
/*Use as color generator*/
PXP_SetProcessSurfaceBackGroundColor(LV_GPU_NXP_PXP_ID, lv_color_to32(dsc->recolor));
@@ -496,7 +394,7 @@ static lv_res_t lv_gpu_nxp_pxp_blit_cover(lv_color_t * dest_buf, const lv_area_t
};
PXP_SetOutputBufferConfig(LV_GPU_NXP_PXP_ID, &outputBufferConfig);
- if(recolor || lv_img_cf_has_alpha(cf)) {
+ if(has_recolor || lv_img_cf_has_alpha(cf)) {
/**
* Configure Porter-Duff blending.
*
@@ -512,7 +410,7 @@ static lv_res_t lv_gpu_nxp_pxp_blit_cover(lv_color_t * dest_buf, const lv_area_t
.srcGlobalAlphaMode = lv_img_cf_has_alpha(cf) ? kPXP_PorterDuffLocalAlpha : kPXP_PorterDuffGlobalAlpha,
.dstFactorMode = kPXP_PorterDuffFactorStraight,
.srcFactorMode = kPXP_PorterDuffFactorInversed,
- .dstGlobalAlpha = recolor ? dsc->recolor_opa : 0x00,
+ .dstGlobalAlpha = has_recolor ? dsc->recolor_opa : 0x00,
.srcGlobalAlpha = 0xff,
.dstAlphaMode = kPXP_PorterDuffAlphaStraight, /*don't care*/
.srcAlphaMode = kPXP_PorterDuffAlphaStraight
@@ -520,22 +418,19 @@ static lv_res_t lv_gpu_nxp_pxp_blit_cover(lv_color_t * dest_buf, const lv_area_t
PXP_SetPorterDuffConfig(LV_GPU_NXP_PXP_ID, &pdConfig);
}
- lv_gpu_nxp_pxp_run(); /*Start PXP task*/
-
- return LV_RES_OK;
+ lv_gpu_nxp_pxp_run();
}
-static lv_res_t lv_gpu_nxp_pxp_blit_cf(lv_color_t * dest_buf, const lv_area_t * dest_area,
- lv_coord_t dest_stride,
- const lv_color_t * src_buf, const lv_area_t * src_area,
- const lv_draw_img_dsc_t * dsc, lv_img_cf_t cf)
+static void lv_pxp_blit_cf(lv_color_t * dest_buf, const lv_area_t * dest_area, lv_coord_t dest_stride,
+ const lv_color_t * src_buf, const lv_area_t * src_area, lv_coord_t src_stride,
+ const lv_draw_img_dsc_t * dsc, lv_img_cf_t cf)
{
lv_coord_t dest_w = lv_area_get_width(dest_area);
lv_coord_t dest_h = lv_area_get_height(dest_area);
+ lv_coord_t src_w = lv_area_get_width(src_area);
+ lv_coord_t src_h = lv_area_get_height(src_area);
- PXP_Init(LV_GPU_NXP_PXP_ID);
- PXP_EnableCsc1(LV_GPU_NXP_PXP_ID, false); /*Disable CSC1, it is enabled by default.*/
- PXP_SetProcessBlockSize(LV_GPU_NXP_PXP_ID, kPXP_BlockSize16); /*block size 16x16 for higher performance*/
+ lv_gpu_nxp_pxp_reset();
pxp_as_blend_config_t asBlendConfig = {
.alpha = dsc->opa,
@@ -566,28 +461,26 @@ static lv_res_t lv_gpu_nxp_pxp_blit_cf(lv_color_t * dest_buf, const lv_area_t *
asBlendConfig.alphaMode = lv_img_cf_has_alpha(cf) ? kPXP_AlphaMultiply : kPXP_AlphaOverride;
}
PXP_SetProcessSurfaceBufferConfig(LV_GPU_NXP_PXP_ID, &psBufferConfig);
- PXP_SetProcessSurfacePosition(LV_GPU_NXP_PXP_ID, 0U, 0U, dest_w - 1, dest_h - 1);
+ PXP_SetProcessSurfacePosition(LV_GPU_NXP_PXP_ID, 0U, 0U, dest_w - 1U, dest_h - 1U);
}
- lv_coord_t src_stride = lv_area_get_width(src_area);
-
/*AS buffer - source image*/
pxp_as_buffer_config_t asBufferConfig = {
.pixelFormat = PXP_AS_PIXEL_FORMAT,
- .bufferAddr = (uint32_t)src_buf,
+ .bufferAddr = (uint32_t)(src_buf + src_stride * src_area->y1 + src_area->x1),
.pitchBytes = src_stride * sizeof(lv_color_t)
};
PXP_SetAlphaSurfaceBufferConfig(LV_GPU_NXP_PXP_ID, &asBufferConfig);
- PXP_SetAlphaSurfacePosition(LV_GPU_NXP_PXP_ID, 0U, 0U, dest_w - 1U, dest_h - 1U);
+ PXP_SetAlphaSurfacePosition(LV_GPU_NXP_PXP_ID, 0U, 0U, src_w - 1U, src_h - 1U);
PXP_SetAlphaSurfaceBlendConfig(LV_GPU_NXP_PXP_ID, &asBlendConfig);
if(lv_img_cf_is_chroma_keyed(cf)) {
lv_color_t colorKeyLow = LV_COLOR_CHROMA_KEY;
lv_color_t colorKeyHigh = LV_COLOR_CHROMA_KEY;
- bool recolor = (dsc->recolor_opa != LV_OPA_TRANSP);
+ bool has_recolor = (dsc->recolor_opa != LV_OPA_TRANSP);
- if(recolor) {
+ if(has_recolor) {
/* New color key after recoloring */
lv_color_t colorKey = lv_color_mix(dsc->recolor, LV_COLOR_CHROMA_KEY, dsc->recolor_opa);
@@ -595,11 +488,11 @@ static lv_res_t lv_gpu_nxp_pxp_blit_cf(lv_color_t * dest_buf, const lv_area_t *
LV_COLOR_SET_G(colorKeyLow, colorKey.ch.green != 0 ? colorKey.ch.green - 1 : 0);
LV_COLOR_SET_B(colorKeyLow, colorKey.ch.blue != 0 ? colorKey.ch.blue - 1 : 0);
-#if LV_COLOR_DEPTH==16
+#if LV_COLOR_DEPTH == 16
LV_COLOR_SET_R(colorKeyHigh, colorKey.ch.red != 0x1f ? colorKey.ch.red + 1 : 0x1f);
LV_COLOR_SET_G(colorKeyHigh, colorKey.ch.green != 0x3f ? colorKey.ch.green + 1 : 0x3f);
LV_COLOR_SET_B(colorKeyHigh, colorKey.ch.blue != 0x1f ? colorKey.ch.blue + 1 : 0x1f);
-#else /*LV_COLOR_DEPTH==32*/
+#else /*LV_COLOR_DEPTH == 32*/
LV_COLOR_SET_R(colorKeyHigh, colorKey.ch.red != 0xff ? colorKey.ch.red + 1 : 0xff);
LV_COLOR_SET_G(colorKeyHigh, colorKey.ch.green != 0xff ? colorKey.ch.green + 1 : 0xff);
LV_COLOR_SET_B(colorKeyHigh, colorKey.ch.blue != 0xff ? colorKey.ch.blue + 1 : 0xff);
@@ -624,9 +517,7 @@ static lv_res_t lv_gpu_nxp_pxp_blit_cf(lv_color_t * dest_buf, const lv_area_t *
};
PXP_SetOutputBufferConfig(LV_GPU_NXP_PXP_ID, &outputBufferConfig);
- lv_gpu_nxp_pxp_run(); /* Start PXP task */
-
- return LV_RES_OK;
+ lv_gpu_nxp_pxp_run();
}
#endif /*LV_USE_GPU_NXP_PXP*/
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_draw_pxp_blend.h b/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_draw_pxp_blend.h
index 43a6440de..9fe9192f7 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_draw_pxp_blend.h
+++ b/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_draw_pxp_blend.h
@@ -6,7 +6,7 @@
/**
* MIT License
*
- * Copyright 2020-2022 NXP
+ * Copyright 2020-2023 NXP
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -48,31 +48,6 @@ extern "C" {
* DEFINES
*********************/
-#ifndef LV_GPU_NXP_PXP_BLIT_SIZE_LIMIT
-/** Minimum area (in pixels) for image copy with 100% opacity to be handled by PXP*/
-#define LV_GPU_NXP_PXP_BLIT_SIZE_LIMIT 5000
-#endif
-
-#ifndef LV_GPU_NXP_PXP_BLIT_OPA_SIZE_LIMIT
-/** Minimum area (in pixels) for image copy with transparency to be handled by PXP*/
-#define LV_GPU_NXP_PXP_BLIT_OPA_SIZE_LIMIT 5000
-#endif
-
-#ifndef LV_GPU_NXP_PXP_BUFF_SYNC_BLIT_SIZE_LIMIT
-/** Minimum invalidated area (in pixels) to be synchronized by PXP during buffer sync */
-#define LV_GPU_NXP_PXP_BUFF_SYNC_BLIT_SIZE_LIMIT 5000
-#endif
-
-#ifndef LV_GPU_NXP_PXP_FILL_SIZE_LIMIT
-/** Minimum area (in pixels) to be filled by PXP with 100% opacity*/
-#define LV_GPU_NXP_PXP_FILL_SIZE_LIMIT 5000
-#endif
-
-#ifndef LV_GPU_NXP_PXP_FILL_OPA_SIZE_LIMIT
-/** Minimum area (in pixels) to be filled by PXP with transparency*/
-#define LV_GPU_NXP_PXP_FILL_OPA_SIZE_LIMIT 5000
-#endif
-
/**********************
* TYPEDEFS
**********************/
@@ -84,51 +59,49 @@ extern "C" {
/**
* Fill area, with optional opacity.
*
- * @param[in/out] dest_buf destination buffer
- * @param[in] dest_stride width (stride) of destination buffer in pixels
- * @param[in] fill_area area to fill
- * @param[in] color color
- * @param[in] opa transparency of the color
- * @retval LV_RES_OK Fill completed
- * @retval LV_RES_INV Error occurred (\see LV_GPU_NXP_PXP_LOG_ERRORS)
+ * @param[in/out] dest_buf Destination buffer
+ * @param[in] dest_area Area with relative coordinates of destination buffer
+ * @param[in] dest_stride Stride of destination buffer in pixels
+ * @param[in] color Color
+ * @param[in] opa Opacity
*/
-lv_res_t lv_gpu_nxp_pxp_fill(lv_color_t * dest_buf, lv_coord_t dest_stride, const lv_area_t * fill_area,
- lv_color_t color, lv_opa_t opa);
+void lv_gpu_nxp_pxp_fill(lv_color_t * dest_buf, const lv_area_t * dest_area, lv_coord_t dest_stride,
+ lv_color_t color, lv_opa_t opa);
/**
* BLock Image Transfer - copy rectangular image from src_buf to dst_buf with effects.
* By default, image is copied directly, with optional opacity. This function can also
* rotate the display output buffer to a specified angle (90x step).
*
- * @param[in/out] dest_buf destination buffer
- * @param[in] dest_area destination area
- * @param[in] dest_stride width (stride) of destination buffer in pixels
- * @param[in] src_buf source buffer
- * @param[in] src_area source area with absolute coordinates to draw on destination buffer
- * @param[in] opa opacity of the result
- * @param[in] angle display rotation angle (90x)
- * @retval LV_RES_OK Fill completed
- * @retval LV_RES_INV Error occurred (\see LV_GPU_NXP_PXP_LOG_ERRORS)
+ * @param[in/out] dest_buf Destination buffer
+ * @param[in] dest_area Area with relative coordinates of destination buffer
+ * @param[in] dest_stride Stride of destination buffer in pixels
+ * @param[in] src_buf Source buffer
+ * @param[in] src_area Source area with relative coordinates of source buffer
+ * @param[in] src_stride Stride of source buffer in pixels
+ * @param[in] opa Opacity
+ * @param[in] angle Display rotation angle (90x)
*/
-lv_res_t lv_gpu_nxp_pxp_blit(lv_color_t * dest_buf, const lv_area_t * dest_area, lv_coord_t dest_stride,
- const lv_color_t * src_buf, const lv_area_t * src_area, lv_opa_t opa, lv_disp_rot_t angle);
+void lv_gpu_nxp_pxp_blit(lv_color_t * dest_buf, const lv_area_t * dest_area, lv_coord_t dest_stride,
+ const lv_color_t * src_buf, const lv_area_t * src_area, lv_coord_t src_stride,
+ lv_opa_t opa, lv_disp_rot_t angle);
/**
* BLock Image Transfer - copy rectangular image from src_buf to dst_buf with transformation.
*
*
- * @param[in/out] dest_buf destination buffer
- * @param[in] dest_area destination area
- * @param[in] dest_stride width (stride) of destination buffer in pixels
- * @param[in] src_buf source buffer
- * @param[in] src_area source area with absolute coordinates to draw on destination buffer
- * @param[in] dsc image descriptor
- * @param[in] cf color format
- * @retval LV_RES_OK Fill completed
- * @retval LV_RES_INV Error occurred (\see LV_GPU_NXP_PXP_LOG_ERRORS)
+ * @param[in/out] dest_buf Destination buffer
+ * @param[in] dest_area Area with relative coordinates of destination buffer
+ * @param[in] dest_stride Stride of destination buffer in pixels
+ * @param[in] src_buf Source buffer
+ * @param[in] src_area Area with relative coordinates of source buffer
+ * @param[in] src_stride Stride of source buffer in pixels
+ * @param[in] dsc Image descriptor
+ * @param[in] cf Color format
*/
-lv_res_t lv_gpu_nxp_pxp_blit_transform(lv_color_t * dest_buf, const lv_area_t * dest_area, lv_coord_t dest_stride,
- const lv_color_t * src_buf, const lv_area_t * src_area, const lv_draw_img_dsc_t * dsc, lv_img_cf_t cf);
+void lv_gpu_nxp_pxp_blit_transform(lv_color_t * dest_buf, const lv_area_t * dest_area, lv_coord_t dest_stride,
+ const lv_color_t * src_buf, const lv_area_t * src_area, lv_coord_t src_stride,
+ const lv_draw_img_dsc_t * dsc, lv_img_cf_t cf);
/**********************
* MACROS
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_gpu_nxp_pxp.c b/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_gpu_nxp_pxp.c
index 94d242a0d..164216f44 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_gpu_nxp_pxp.c
+++ b/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_gpu_nxp_pxp.c
@@ -6,7 +6,7 @@
/**
* MIT License
*
- * Copyright 2020-2022 NXP
+ * Copyright 2020-2023 NXP
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -50,9 +50,9 @@
**********************/
/**
- * Clean & invalidate cache.
+ * Clean and invalidate cache.
*/
-static void invalidate_cache(void);
+static inline void invalidate_cache(void);
/**********************
* STATIC VARIABLES
@@ -70,16 +70,23 @@ static lv_nxp_pxp_cfg_t * pxp_cfg;
lv_res_t lv_gpu_nxp_pxp_init(void)
{
+#if LV_USE_GPU_NXP_PXP_AUTO_INIT
pxp_cfg = lv_gpu_nxp_pxp_get_cfg();
+#endif
- if(!pxp_cfg || !pxp_cfg->pxp_interrupt_deinit || !pxp_cfg->pxp_interrupt_init || !pxp_cfg->pxp_run)
+ if(!pxp_cfg || !pxp_cfg->pxp_interrupt_deinit || !pxp_cfg->pxp_interrupt_init ||
+ !pxp_cfg->pxp_run || !pxp_cfg->pxp_wait)
PXP_RETURN_INV("PXP configuration error.");
PXP_Init(LV_GPU_NXP_PXP_ID);
+
PXP_EnableCsc1(LV_GPU_NXP_PXP_ID, false); /*Disable CSC1, it is enabled by default.*/
+ PXP_SetProcessBlockSize(LV_GPU_NXP_PXP_ID, kPXP_BlockSize16); /*Block size 16x16 for higher performance*/
+
PXP_EnableInterrupts(LV_GPU_NXP_PXP_ID, kPXP_CompleteInterruptEnable);
if(pxp_cfg->pxp_interrupt_init() != LV_RES_OK) {
+ PXP_DisableInterrupts(LV_GPU_NXP_PXP_ID, kPXP_CompleteInterruptEnable);
PXP_Deinit(LV_GPU_NXP_PXP_ID);
PXP_RETURN_INV("PXP interrupt init failed.");
}
@@ -90,23 +97,38 @@ lv_res_t lv_gpu_nxp_pxp_init(void)
void lv_gpu_nxp_pxp_deinit(void)
{
pxp_cfg->pxp_interrupt_deinit();
- PXP_DisableInterrupts(PXP, kPXP_CompleteInterruptEnable);
+ PXP_DisableInterrupts(LV_GPU_NXP_PXP_ID, kPXP_CompleteInterruptEnable);
PXP_Deinit(LV_GPU_NXP_PXP_ID);
}
+void lv_gpu_nxp_pxp_reset(void)
+{
+ /* Wait for previous command to complete before resetting the registers. */
+ lv_gpu_nxp_pxp_wait();
+
+ PXP_ResetControl(LV_GPU_NXP_PXP_ID);
+
+ PXP_EnableCsc1(LV_GPU_NXP_PXP_ID, false); /*Disable CSC1, it is enabled by default.*/
+ PXP_SetProcessBlockSize(LV_GPU_NXP_PXP_ID, kPXP_BlockSize16); /*Block size 16x16 for higher performance*/
+}
+
void lv_gpu_nxp_pxp_run(void)
{
- /*Clean & invalidate cache*/
invalidate_cache();
pxp_cfg->pxp_run();
}
+void lv_gpu_nxp_pxp_wait(void)
+{
+ pxp_cfg->pxp_wait();
+}
+
/**********************
* STATIC FUNCTIONS
**********************/
-static void invalidate_cache(void)
+static inline void invalidate_cache(void)
{
lv_disp_t * disp = _lv_refr_get_disp_refreshing();
if(disp->driver->clean_dcache_cb)
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_gpu_nxp_pxp.h b/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_gpu_nxp_pxp.h
index e695d8f13..10a67215a 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_gpu_nxp_pxp.h
+++ b/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_gpu_nxp_pxp.h
@@ -6,7 +6,7 @@
/**
* MIT License
*
- * Copyright 2020-2022 NXP
+ * Copyright 2020-2023 NXP
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -81,8 +81,11 @@ typedef struct {
/** Callback for PXP interrupt de-initialization*/
void (*pxp_interrupt_deinit)(void);
- /** Callback that should start PXP and wait for operation complete*/
+ /** Callback for PXP start*/
void (*pxp_run)(void);
+
+ /** Callback for waiting of PXP completion*/
+ void (*pxp_wait)(void);
} lv_nxp_pxp_cfg_t;
/**********************
@@ -104,10 +107,20 @@ lv_res_t lv_gpu_nxp_pxp_init(void);
void lv_gpu_nxp_pxp_deinit(void);
/**
- * Start PXP job and wait for completion.
+ * Reset PXP device.
+ */
+void lv_gpu_nxp_pxp_reset(void);
+
+/**
+ * Clear cache and start PXP.
*/
void lv_gpu_nxp_pxp_run(void);
+/**
+ * Wait for PXP completion.
+ */
+void lv_gpu_nxp_pxp_wait(void);
+
/**********************
* MACROS
**********************/
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_gpu_nxp_pxp_osa.c b/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_gpu_nxp_pxp_osa.c
index c4b8dbe57..8e1884036 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_gpu_nxp_pxp_osa.c
+++ b/lib/libesp32_lvgl/lvgl/src/draw/nxp/pxp/lv_gpu_nxp_pxp_osa.c
@@ -6,7 +6,7 @@
/**
* MIT License
*
- * Copyright 2020, 2022 NXP
+ * Copyright 2020, 2022, 2023 NXP
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -65,24 +65,29 @@ static lv_res_t _lv_gpu_nxp_pxp_interrupt_init(void);
static void _lv_gpu_nxp_pxp_interrupt_deinit(void);
/**
- * Start the PXP job and wait for task completion.
+ * Start the PXP job.
*/
static void _lv_gpu_nxp_pxp_run(void);
+/**
+ * Wait for PXP completion.
+ */
+static void _lv_gpu_nxp_pxp_wait(void);
+
/**********************
* STATIC VARIABLES
**********************/
#if defined(SDK_OS_FREE_RTOS)
- static SemaphoreHandle_t s_pxpIdle;
-#else
- static volatile bool s_pxpIdle;
+ static SemaphoreHandle_t s_pxpIdleSem;
#endif
+static volatile bool s_pxpIdle;
static lv_nxp_pxp_cfg_t pxp_default_cfg = {
.pxp_interrupt_init = _lv_gpu_nxp_pxp_interrupt_init,
.pxp_interrupt_deinit = _lv_gpu_nxp_pxp_interrupt_deinit,
- .pxp_run = _lv_gpu_nxp_pxp_run
+ .pxp_run = _lv_gpu_nxp_pxp_run,
+ .pxp_wait = _lv_gpu_nxp_pxp_wait,
};
/**********************
@@ -102,7 +107,7 @@ void PXP_IRQHandler(void)
if(kPXP_CompleteFlag & PXP_GetStatusFlags(LV_GPU_NXP_PXP_ID)) {
PXP_ClearStatusFlags(LV_GPU_NXP_PXP_ID, kPXP_CompleteFlag);
#if defined(SDK_OS_FREE_RTOS)
- xSemaphoreGiveFromISR(s_pxpIdle, &taskAwake);
+ xSemaphoreGiveFromISR(s_pxpIdleSem, &taskAwake);
portYIELD_FROM_ISR(taskAwake);
#else
s_pxpIdle = true;
@@ -122,14 +127,13 @@ lv_nxp_pxp_cfg_t * lv_gpu_nxp_pxp_get_cfg(void)
static lv_res_t _lv_gpu_nxp_pxp_interrupt_init(void)
{
#if defined(SDK_OS_FREE_RTOS)
- s_pxpIdle = xSemaphoreCreateBinary();
- if(s_pxpIdle == NULL)
+ s_pxpIdleSem = xSemaphoreCreateBinary();
+ if(s_pxpIdleSem == NULL)
return LV_RES_INV;
NVIC_SetPriority(LV_GPU_NXP_PXP_IRQ_ID, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY + 1);
-#else
- s_pxpIdle = true;
#endif
+ s_pxpIdle = true;
NVIC_EnableIRQ(LV_GPU_NXP_PXP_IRQ_ID);
@@ -140,21 +144,33 @@ static void _lv_gpu_nxp_pxp_interrupt_deinit(void)
{
NVIC_DisableIRQ(LV_GPU_NXP_PXP_IRQ_ID);
#if defined(SDK_OS_FREE_RTOS)
- vSemaphoreDelete(s_pxpIdle);
+ vSemaphoreDelete(s_pxpIdleSem);
#endif
}
+/**
+ * Function to start PXP job.
+ */
static void _lv_gpu_nxp_pxp_run(void)
{
-#if !defined(SDK_OS_FREE_RTOS)
s_pxpIdle = false;
-#endif
PXP_EnableInterrupts(LV_GPU_NXP_PXP_ID, kPXP_CompleteInterruptEnable);
PXP_Start(LV_GPU_NXP_PXP_ID);
+}
+/**
+ * Function to wait for PXP completion.
+ */
+static void _lv_gpu_nxp_pxp_wait(void)
+{
#if defined(SDK_OS_FREE_RTOS)
- PXP_COND_STOP(!xSemaphoreTake(s_pxpIdle, portMAX_DELAY), "xSemaphoreTake failed.");
+ /* Return if PXP was never started, otherwise the semaphore will lock forever. */
+ if(s_pxpIdle == true)
+ return;
+
+ if(xSemaphoreTake(s_pxpIdleSem, portMAX_DELAY) == pdTRUE)
+ s_pxpIdle = true;
#else
while(s_pxpIdle == false) {
}
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_nxp_vglite.mk b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_nxp_vglite.mk
index c84e2e47a..c9473cc10 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_nxp_vglite.mk
+++ b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_nxp_vglite.mk
@@ -1,7 +1,10 @@
+CSRCS += lv_draw_vglite.c
CSRCS += lv_draw_vglite_arc.c
CSRCS += lv_draw_vglite_blend.c
+CSRCS += lv_draw_vglite_line.c
CSRCS += lv_draw_vglite_rect.c
-CSRCS += lv_gpu_nxp_vglite.c
+CSRCS += lv_vglite_buf.c
+CSRCS += lv_vglite_utils.c
DEPPATH += --dep-path $(LVGL_DIR)/$(LVGL_DIR_NAME)/src/draw/nxp/vglite
VPATH += :$(LVGL_DIR)/$(LVGL_DIR_NAME)/src/draw/nxp/vglite
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite.c b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite.c
new file mode 100644
index 000000000..eae1b8a58
--- /dev/null
+++ b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite.c
@@ -0,0 +1,508 @@
+/**
+ * @file lv_draw_vglite.c
+ *
+ */
+
+/**
+ * MIT License
+ *
+ * Copyright 2022, 2023 NXP
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ * the Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next paragraph)
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+ * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+ * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+/*********************
+ * INCLUDES
+ *********************/
+
+#include "lv_draw_vglite.h"
+
+#if LV_USE_GPU_NXP_VG_LITE
+#include
+#include "lv_draw_vglite_blend.h"
+#include "lv_draw_vglite_line.h"
+#include "lv_draw_vglite_rect.h"
+#include "lv_draw_vglite_arc.h"
+#include "lv_vglite_buf.h"
+
+#if LV_COLOR_DEPTH != 32
+ #include "../../../core/lv_refr.h"
+#endif
+
+/*********************
+ * DEFINES
+ *********************/
+
+/* Minimum area (in pixels) for VG-Lite blit/fill processing. */
+#ifndef LV_GPU_NXP_VG_LITE_SIZE_LIMIT
+ #define LV_GPU_NXP_VG_LITE_SIZE_LIMIT 5000
+#endif
+
+/**********************
+ * TYPEDEFS
+ **********************/
+
+/**********************
+ * STATIC PROTOTYPES
+ **********************/
+
+static void lv_draw_vglite_init_buf(lv_draw_ctx_t * draw_ctx);
+
+static void lv_draw_vglite_wait_for_finish(lv_draw_ctx_t * draw_ctx);
+
+static void lv_draw_vglite_img_decoded(lv_draw_ctx_t * draw_ctx, const lv_draw_img_dsc_t * dsc,
+ const lv_area_t * coords, const uint8_t * map_p, lv_img_cf_t cf);
+
+static void lv_draw_vglite_blend(lv_draw_ctx_t * draw_ctx, const lv_draw_sw_blend_dsc_t * dsc);
+
+static void lv_draw_vglite_line(lv_draw_ctx_t * draw_ctx, const lv_draw_line_dsc_t * dsc, const lv_point_t * point1,
+ const lv_point_t * point2);
+
+static void lv_draw_vglite_rect(lv_draw_ctx_t * draw_ctx, const lv_draw_rect_dsc_t * dsc, const lv_area_t * coords);
+
+static lv_res_t lv_draw_vglite_bg(lv_draw_ctx_t * draw_ctx, const lv_draw_rect_dsc_t * dsc, const lv_area_t * coords);
+
+static lv_res_t lv_draw_vglite_border(lv_draw_ctx_t * draw_ctx, const lv_draw_rect_dsc_t * dsc,
+ const lv_area_t * coords);
+
+static lv_res_t lv_draw_vglite_outline(lv_draw_ctx_t * draw_ctx, const lv_draw_rect_dsc_t * dsc,
+ const lv_area_t * coords);
+
+static void lv_draw_vglite_arc(lv_draw_ctx_t * draw_ctx, const lv_draw_arc_dsc_t * dsc, const lv_point_t * center,
+ uint16_t radius, uint16_t start_angle, uint16_t end_angle);
+
+/**********************
+ * STATIC VARIABLES
+ **********************/
+
+/**********************
+ * MACROS
+ **********************/
+
+/**********************
+ * GLOBAL FUNCTIONS
+ **********************/
+
+void lv_draw_vglite_ctx_init(lv_disp_drv_t * drv, lv_draw_ctx_t * draw_ctx)
+{
+ lv_draw_sw_init_ctx(drv, draw_ctx);
+
+ lv_draw_vglite_ctx_t * vglite_draw_ctx = (lv_draw_sw_ctx_t *)draw_ctx;
+ vglite_draw_ctx->base_draw.init_buf = lv_draw_vglite_init_buf;
+ vglite_draw_ctx->base_draw.draw_line = lv_draw_vglite_line;
+ vglite_draw_ctx->base_draw.draw_arc = lv_draw_vglite_arc;
+ vglite_draw_ctx->base_draw.draw_rect = lv_draw_vglite_rect;
+ vglite_draw_ctx->base_draw.draw_img_decoded = lv_draw_vglite_img_decoded;
+ vglite_draw_ctx->blend = lv_draw_vglite_blend;
+ vglite_draw_ctx->base_draw.wait_for_finish = lv_draw_vglite_wait_for_finish;
+}
+
+void lv_draw_vglite_ctx_deinit(lv_disp_drv_t * drv, lv_draw_ctx_t * draw_ctx)
+{
+ lv_draw_sw_deinit_ctx(drv, draw_ctx);
+}
+
+/**********************
+ * STATIC FUNCTIONS
+ **********************/
+
+/**
+ * During rendering, LVGL might initializes new draw_ctxs and start drawing into
+ * a separate buffer (called layer). If the content to be rendered has "holes",
+ * e.g. rounded corner, LVGL temporarily sets the disp_drv.screen_transp flag.
+ * It means the renderers should draw into an ARGB buffer.
+ * With 32 bit color depth it's not a big problem but with 16 bit color depth
+ * the target pixel format is ARGB8565 which is not supported by the GPU.
+ * In this case, the VG-Lite callbacks should fallback to SW rendering.
+ */
+static inline bool need_argb8565_support()
+{
+#if LV_COLOR_DEPTH != 32
+ lv_disp_t * disp = _lv_refr_get_disp_refreshing();
+
+ if(disp->driver->screen_transp == 1)
+ return true;
+#endif
+
+ return false;
+}
+
+static void lv_draw_vglite_init_buf(lv_draw_ctx_t * draw_ctx)
+{
+ lv_gpu_nxp_vglite_init_buf(draw_ctx->buf, draw_ctx->buf_area, lv_area_get_width(draw_ctx->buf_area));
+}
+
+static void lv_draw_vglite_wait_for_finish(lv_draw_ctx_t * draw_ctx)
+{
+ vg_lite_finish();
+
+ lv_draw_sw_wait_for_finish(draw_ctx);
+}
+
+static void lv_draw_vglite_blend(lv_draw_ctx_t * draw_ctx, const lv_draw_sw_blend_dsc_t * dsc)
+{
+ if(dsc->opa <= (lv_opa_t)LV_OPA_MIN)
+ return;
+
+ if(need_argb8565_support()) {
+ lv_draw_sw_blend_basic(draw_ctx, dsc);
+ return;
+ }
+
+ lv_area_t blend_area;
+ /*Let's get the blend area which is the intersection of the area to draw and the clip area*/
+ if(!_lv_area_intersect(&blend_area, dsc->blend_area, draw_ctx->clip_area))
+ return; /*Fully clipped, nothing to do*/
+
+ /*Make the blend area relative to the buffer*/
+ lv_area_move(&blend_area, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
+
+ bool done = false;
+ /*Fill/Blend only non masked, normal blended*/
+ if(dsc->mask_buf == NULL && dsc->blend_mode == LV_BLEND_MODE_NORMAL &&
+ lv_area_get_size(&blend_area) >= LV_GPU_NXP_VG_LITE_SIZE_LIMIT) {
+ const lv_color_t * src_buf = dsc->src_buf;
+
+ if(src_buf == NULL) {
+ done = (lv_gpu_nxp_vglite_fill(&blend_area, dsc->color, dsc->opa) == LV_RES_OK);
+ if(!done)
+ VG_LITE_LOG_TRACE("VG-Lite fill failed. Fallback.");
+ }
+ else {
+ lv_color_t * dest_buf = draw_ctx->buf;
+ lv_coord_t dest_stride = lv_area_get_width(draw_ctx->buf_area);
+
+ lv_area_t src_area;
+ src_area.x1 = blend_area.x1 - (dsc->blend_area->x1 - draw_ctx->buf_area->x1);
+ src_area.y1 = blend_area.y1 - (dsc->blend_area->y1 - draw_ctx->buf_area->y1);
+ src_area.x2 = src_area.x1 + lv_area_get_width(dsc->blend_area) - 1;
+ src_area.y2 = src_area.y1 + lv_area_get_height(dsc->blend_area) - 1;
+ lv_coord_t src_stride = lv_area_get_width(dsc->blend_area);
+
+ done = (lv_gpu_nxp_vglite_blit(dest_buf, &blend_area, dest_stride,
+ src_buf, &src_area, src_stride, dsc->opa) == LV_RES_OK);
+
+ if(!done)
+ VG_LITE_LOG_TRACE("VG-Lite blit failed. Fallback.");
+ }
+ }
+
+ if(!done)
+ lv_draw_sw_blend_basic(draw_ctx, dsc);
+}
+
+static void lv_draw_vglite_img_decoded(lv_draw_ctx_t * draw_ctx, const lv_draw_img_dsc_t * dsc,
+ const lv_area_t * coords, const uint8_t * map_p, lv_img_cf_t cf)
+{
+ if(dsc->opa <= (lv_opa_t)LV_OPA_MIN)
+ return;
+
+ if(need_argb8565_support()) {
+ lv_draw_sw_img_decoded(draw_ctx, dsc, coords, map_p, cf);
+ return;
+ }
+
+ const lv_color_t * src_buf = (const lv_color_t *)map_p;
+ if(!src_buf) {
+ lv_draw_sw_img_decoded(draw_ctx, dsc, coords, map_p, cf);
+ return;
+ }
+
+ lv_area_t blend_area;
+ /*Let's get the blend area which is the intersection of the area to draw and the clip area*/
+ if(!_lv_area_intersect(&blend_area, coords, draw_ctx->clip_area))
+ return; /*Fully clipped, nothing to do*/
+
+ /*Make the blend area relative to the buffer*/
+ lv_area_move(&blend_area, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
+
+ bool has_mask = lv_draw_mask_is_any(&blend_area);
+ bool has_recolor = (dsc->recolor_opa != LV_OPA_TRANSP);
+
+ bool done = false;
+ if(!has_mask && !has_recolor && !lv_img_cf_is_chroma_keyed(cf) &&
+ lv_area_get_size(&blend_area) >= LV_GPU_NXP_VG_LITE_SIZE_LIMIT
+#if LV_COLOR_DEPTH != 32
+ && !lv_img_cf_has_alpha(cf)
+#endif
+ ) {
+ lv_color_t * dest_buf = draw_ctx->buf;
+ lv_coord_t dest_stride = lv_area_get_width(draw_ctx->buf_area);
+
+ lv_area_t src_area;
+ src_area.x1 = blend_area.x1 - (coords->x1 - draw_ctx->buf_area->x1);
+ src_area.y1 = blend_area.y1 - (coords->y1 - draw_ctx->buf_area->y1);
+ src_area.x2 = src_area.x1 + lv_area_get_width(coords) - 1;
+ src_area.y2 = src_area.y1 + lv_area_get_height(coords) - 1;
+ lv_coord_t src_stride = lv_area_get_width(coords);
+
+ done = (lv_gpu_nxp_vglite_blit_transform(dest_buf, &blend_area, dest_stride,
+ src_buf, &src_area, src_stride, dsc) == LV_RES_OK);
+
+ if(!done)
+ VG_LITE_LOG_TRACE("VG-Lite blit transform failed. Fallback.");
+ }
+
+ if(!done)
+ lv_draw_sw_img_decoded(draw_ctx, dsc, coords, map_p, cf);
+}
+
+static void lv_draw_vglite_line(lv_draw_ctx_t * draw_ctx, const lv_draw_line_dsc_t * dsc, const lv_point_t * point1,
+ const lv_point_t * point2)
+{
+ if(dsc->width == 0)
+ return;
+ if(dsc->opa <= (lv_opa_t)LV_OPA_MIN)
+ return;
+ if(point1->x == point2->x && point1->y == point2->y)
+ return;
+
+ if(need_argb8565_support()) {
+ lv_draw_sw_line(draw_ctx, dsc, point1, point2);
+ return;
+ }
+
+ lv_area_t rel_clip_area;
+ rel_clip_area.x1 = LV_MIN(point1->x, point2->x) - dsc->width / 2;
+ rel_clip_area.x2 = LV_MAX(point1->x, point2->x) + dsc->width / 2;
+ rel_clip_area.y1 = LV_MIN(point1->y, point2->y) - dsc->width / 2;
+ rel_clip_area.y2 = LV_MAX(point1->y, point2->y) + dsc->width / 2;
+
+ bool is_common;
+ is_common = _lv_area_intersect(&rel_clip_area, &rel_clip_area, draw_ctx->clip_area);
+ if(!is_common)
+ return;
+
+ /* Make coordinates relative to the draw buffer */
+ lv_area_move(&rel_clip_area, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
+
+ lv_point_t rel_point1 = { point1->x - draw_ctx->buf_area->x1, point1->y - draw_ctx->buf_area->y1 };
+ lv_point_t rel_point2 = { point2->x - draw_ctx->buf_area->x1, point2->y - draw_ctx->buf_area->y1 };
+
+ bool done = false;
+ bool mask_any = lv_draw_mask_is_any(&rel_clip_area);
+
+ if(!mask_any) {
+ done = (lv_gpu_nxp_vglite_draw_line(&rel_point1, &rel_point2, &rel_clip_area, dsc) == LV_RES_OK);
+ if(!done)
+ VG_LITE_LOG_TRACE("VG-Lite draw line failed. Fallback.");
+ }
+
+ if(!done)
+ lv_draw_sw_line(draw_ctx, dsc, point1, point2);
+}
+
+static void lv_draw_vglite_rect(lv_draw_ctx_t * draw_ctx, const lv_draw_rect_dsc_t * dsc, const lv_area_t * coords)
+{
+ if(need_argb8565_support()) {
+ lv_draw_sw_rect(draw_ctx, dsc, coords);
+ return;
+ }
+
+ lv_draw_rect_dsc_t vglite_dsc;
+
+ lv_memcpy(&vglite_dsc, dsc, sizeof(vglite_dsc));
+ vglite_dsc.bg_opa = 0;
+ vglite_dsc.bg_img_opa = 0;
+ vglite_dsc.border_opa = 0;
+ vglite_dsc.outline_opa = 0;
+#if LV_DRAW_COMPLEX
+ /* Draw the shadow with CPU */
+ lv_draw_sw_rect(draw_ctx, &vglite_dsc, coords);
+ vglite_dsc.shadow_opa = 0;
+#endif /*LV_DRAW_COMPLEX*/
+
+ /* Draw the background */
+ vglite_dsc.bg_opa = dsc->bg_opa;
+ if(lv_draw_vglite_bg(draw_ctx, &vglite_dsc, coords) != LV_RES_OK)
+ lv_draw_sw_rect(draw_ctx, &vglite_dsc, coords);
+ vglite_dsc.bg_opa = 0;
+
+ /* Draw the background image
+ * It will be done once draw_ctx->draw_img_decoded()
+ * callback gets called from lv_draw_sw_rect().
+ */
+ vglite_dsc.bg_img_opa = dsc->bg_img_opa;
+ lv_draw_sw_rect(draw_ctx, &vglite_dsc, coords);
+ vglite_dsc.bg_img_opa = 0;
+
+ /* Draw the border */
+ vglite_dsc.border_opa = dsc->border_opa;
+ if(lv_draw_vglite_border(draw_ctx, &vglite_dsc, coords) != LV_RES_OK)
+ lv_draw_sw_rect(draw_ctx, &vglite_dsc, coords);
+ vglite_dsc.border_opa = 0;
+
+ /* Draw the outline */
+ vglite_dsc.outline_opa = dsc->outline_opa;
+ if(lv_draw_vglite_outline(draw_ctx, &vglite_dsc, coords) != LV_RES_OK)
+ lv_draw_sw_rect(draw_ctx, &vglite_dsc, coords);
+}
+
+static lv_res_t lv_draw_vglite_bg(lv_draw_ctx_t * draw_ctx, const lv_draw_rect_dsc_t * dsc, const lv_area_t * coords)
+{
+ if(dsc->bg_opa <= (lv_opa_t)LV_OPA_MIN)
+ return LV_RES_INV;
+
+ lv_area_t rel_coords;
+ lv_area_copy(&rel_coords, coords);
+
+ /*If the border fully covers make the bg area 1px smaller to avoid artifacts on the corners*/
+ if(dsc->border_width > 1 && dsc->border_opa >= (lv_opa_t)LV_OPA_MAX && dsc->radius != 0) {
+ rel_coords.x1 += (dsc->border_side & LV_BORDER_SIDE_LEFT) ? 1 : 0;
+ rel_coords.y1 += (dsc->border_side & LV_BORDER_SIDE_TOP) ? 1 : 0;
+ rel_coords.x2 -= (dsc->border_side & LV_BORDER_SIDE_RIGHT) ? 1 : 0;
+ rel_coords.y2 -= (dsc->border_side & LV_BORDER_SIDE_BOTTOM) ? 1 : 0;
+ }
+
+ /* Make coordinates relative to draw buffer */
+ lv_area_move(&rel_coords, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
+
+ lv_area_t rel_clip_area;
+ lv_area_copy(&rel_clip_area, draw_ctx->clip_area);
+ lv_area_move(&rel_clip_area, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
+
+ lv_area_t clipped_coords;
+ if(!_lv_area_intersect(&clipped_coords, &rel_coords, &rel_clip_area))
+ return LV_RES_INV;
+
+ bool mask_any = lv_draw_mask_is_any(&rel_coords);
+ lv_grad_dir_t grad_dir = dsc->bg_grad.dir;
+ lv_color_t bg_color = (grad_dir == (lv_grad_dir_t)LV_GRAD_DIR_NONE) ?
+ dsc->bg_color : dsc->bg_grad.stops[0].color;
+ if(bg_color.full == dsc->bg_grad.stops[1].color.full)
+ grad_dir = LV_GRAD_DIR_NONE;
+
+ /*
+ * Most simple case: just a plain rectangle (no mask, no radius, no gradient)
+ * shall be handled by draw_ctx->blend().
+ *
+ * Complex case: gradient or radius but no mask.
+ */
+ if(!mask_any && ((dsc->radius != 0) || (grad_dir != (lv_grad_dir_t)LV_GRAD_DIR_NONE))) {
+ lv_res_t res = lv_gpu_nxp_vglite_draw_bg(&rel_coords, &rel_clip_area, dsc);
+ if(res != LV_RES_OK)
+ VG_LITE_LOG_TRACE("VG-Lite draw bg failed. Fallback.");
+
+ return res;
+ }
+
+ return LV_RES_INV;
+}
+
+static lv_res_t lv_draw_vglite_border(lv_draw_ctx_t * draw_ctx, const lv_draw_rect_dsc_t * dsc,
+ const lv_area_t * coords)
+{
+ if(dsc->border_opa <= (lv_opa_t)LV_OPA_MIN)
+ return LV_RES_INV;
+ if(dsc->border_width == 0)
+ return LV_RES_INV;
+ if(dsc->border_post)
+ return LV_RES_INV;
+ if(dsc->border_side != (lv_border_side_t)LV_BORDER_SIDE_FULL)
+ return LV_RES_INV;
+
+ lv_area_t rel_coords;
+ lv_coord_t border_width = dsc->border_width;
+
+ /* Move border inwards to align with software rendered border */
+ rel_coords.x1 = coords->x1 + ceil(border_width / 2.0f);
+ rel_coords.x2 = coords->x2 - floor(border_width / 2.0f);
+ rel_coords.y1 = coords->y1 + ceil(border_width / 2.0f);
+ rel_coords.y2 = coords->y2 - floor(border_width / 2.0f);
+
+ /* Make coordinates relative to the draw buffer */
+ lv_area_move(&rel_coords, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
+
+ lv_area_t rel_clip_area;
+ lv_area_copy(&rel_clip_area, draw_ctx->clip_area);
+ lv_area_move(&rel_clip_area, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
+
+ lv_res_t res = lv_gpu_nxp_vglite_draw_border_generic(&rel_coords, &rel_clip_area, dsc, true);
+ if(res != LV_RES_OK)
+ VG_LITE_LOG_TRACE("VG-Lite draw border failed. Fallback.");
+
+ return res;
+}
+
+static lv_res_t lv_draw_vglite_outline(lv_draw_ctx_t * draw_ctx, const lv_draw_rect_dsc_t * dsc,
+ const lv_area_t * coords)
+{
+ if(dsc->outline_opa <= (lv_opa_t)LV_OPA_MIN)
+ return LV_RES_INV;
+ if(dsc->outline_width == 0)
+ return LV_RES_INV;
+
+ /* Move outline outwards to align with software rendered outline */
+ lv_coord_t outline_pad = dsc->outline_pad - 1;
+ lv_area_t rel_coords;
+ rel_coords.x1 = coords->x1 - outline_pad - floor(dsc->outline_width / 2.0f);
+ rel_coords.x2 = coords->x2 + outline_pad + ceil(dsc->outline_width / 2.0f);
+ rel_coords.y1 = coords->y1 - outline_pad - floor(dsc->outline_width / 2.0f);
+ rel_coords.y2 = coords->y2 + outline_pad + ceil(dsc->outline_width / 2.0f);
+
+ /* Make coordinates relative to the draw buffer */
+ lv_area_move(&rel_coords, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
+
+ lv_area_t rel_clip_area;
+ lv_area_copy(&rel_clip_area, draw_ctx->clip_area);
+ lv_area_move(&rel_clip_area, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
+
+ lv_res_t res = lv_gpu_nxp_vglite_draw_border_generic(&rel_coords, &rel_clip_area, dsc, false);
+ if(res != LV_RES_OK)
+ VG_LITE_LOG_TRACE("VG-Lite draw outline failed. Fallback.");
+
+ return res;
+}
+
+static void lv_draw_vglite_arc(lv_draw_ctx_t * draw_ctx, const lv_draw_arc_dsc_t * dsc, const lv_point_t * center,
+ uint16_t radius, uint16_t start_angle, uint16_t end_angle)
+{
+ bool done = false;
+
+#if LV_DRAW_COMPLEX
+ if(dsc->opa <= (lv_opa_t)LV_OPA_MIN)
+ return;
+ if(dsc->width == 0)
+ return;
+ if(start_angle == end_angle)
+ return;
+
+ if(need_argb8565_support()) {
+ lv_draw_sw_arc(draw_ctx, dsc, center, radius, start_angle, end_angle);
+ return;
+ }
+
+ /* Make coordinates relative to the draw buffer */
+ lv_point_t rel_center = {center->x - draw_ctx->buf_area->x1, center->y - draw_ctx->buf_area->y1};
+
+ lv_area_t rel_clip_area;
+ lv_area_copy(&rel_clip_area, draw_ctx->clip_area);
+ lv_area_move(&rel_clip_area, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
+
+ done = (lv_gpu_nxp_vglite_draw_arc(&rel_center, (int32_t)radius, (int32_t)start_angle, (int32_t)end_angle,
+ &rel_clip_area, dsc) == LV_RES_OK);
+ if(!done)
+ VG_LITE_LOG_TRACE("VG-Lite draw arc failed. Fallback.");
+#endif/*LV_DRAW_COMPLEX*/
+
+ if(!done)
+ lv_draw_sw_arc(draw_ctx, dsc, center, radius, start_angle, end_angle);
+}
+
+#endif /*LV_USE_GPU_NXP_VG_LITE*/
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite.h b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite.h
new file mode 100644
index 000000000..c44cb8fc7
--- /dev/null
+++ b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite.h
@@ -0,0 +1,72 @@
+/**
+ * @file lv_draw_vglite.h
+ *
+ */
+
+/**
+ * MIT License
+ *
+ * Copyright 2022, 2023 NXP
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ * the Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next paragraph)
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+ * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+ * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#ifndef LV_DRAW_VGLITE_H
+#define LV_DRAW_VGLITE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ * INCLUDES
+ *********************/
+
+#include "../../../lv_conf_internal.h"
+
+#if LV_USE_GPU_NXP_VG_LITE
+#include "../../sw/lv_draw_sw.h"
+
+/*********************
+ * DEFINES
+ *********************/
+
+/**********************
+ * TYPEDEFS
+ **********************/
+typedef lv_draw_sw_ctx_t lv_draw_vglite_ctx_t;
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+void lv_draw_vglite_ctx_init(struct _lv_disp_drv_t * drv, lv_draw_ctx_t * draw_ctx);
+
+void lv_draw_vglite_ctx_deinit(struct _lv_disp_drv_t * drv, lv_draw_ctx_t * draw_ctx);
+
+/**********************
+ * MACROS
+ **********************/
+#endif /*LV_USE_GPU_NXP_VG_LITE*/
+
+#ifdef __cplusplus
+} /*extern "C"*/
+#endif
+
+#endif /*LV_DRAW_VGLITE_H*/
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_arc.c b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_arc.c
index 194f03d88..775bf734b 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_arc.c
+++ b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_arc.c
@@ -6,7 +6,7 @@
/**
* MIT License
*
- * Copyright 2021, 2022 NXP
+ * Copyright 2021-2023 NXP
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -34,7 +34,8 @@
#include "lv_draw_vglite_arc.h"
#if LV_USE_GPU_NXP_VG_LITE
-#include "math.h"
+#include "lv_vglite_buf.h"
+#include
/*********************
* DEFINES
@@ -88,7 +89,7 @@ typedef struct _cubic_cont_pt {
static void rotate_point(int32_t angle, int32_t * x, int32_t * y);
static void add_arc_path(int32_t * arc_path, int * pidx, int32_t radius,
- int32_t start_angle, int32_t end_angle, lv_point_t center, bool cw);
+ int32_t start_angle, int32_t end_angle, const lv_point_t * center, bool cw);
/**********************
* STATIC VARIABLES
@@ -102,31 +103,20 @@ static void add_arc_path(int32_t * arc_path, int * pidx, int32_t radius,
* GLOBAL FUNCTIONS
**********************/
-lv_res_t lv_gpu_nxp_vglite_draw_arc(lv_draw_ctx_t * draw_ctx, const lv_draw_arc_dsc_t * dsc, const lv_point_t * center,
- int32_t radius, int32_t start_angle, int32_t end_angle)
+lv_res_t lv_gpu_nxp_vglite_draw_arc(const lv_point_t * center, int32_t radius, int32_t start_angle, int32_t end_angle,
+ const lv_area_t * clip_area, const lv_draw_arc_dsc_t * dsc)
{
-
- vg_lite_buffer_t vgbuf;
vg_lite_error_t err = VG_LITE_SUCCESS;
lv_color32_t col32 = {.full = lv_color_to32(dsc->color)}; /*Convert color to RGBA8888*/
- lv_coord_t dest_width = lv_area_get_width(draw_ctx->buf_area);
- lv_coord_t dest_height = lv_area_get_height(draw_ctx->buf_area);
vg_lite_path_t path;
vg_lite_color_t vgcol; /* vglite takes ABGR */
- vg_lite_matrix_t matrix;
- lv_opa_t opa = dsc->opa;
bool donut = ((end_angle - start_angle) % 360 == 0) ? true : false;
- lv_point_t clip_center = {center->x - draw_ctx->buf_area->x1, center->y - draw_ctx->buf_area->y1};
+ vg_lite_buffer_t * vgbuf = lv_vglite_get_dest_buf();
/* path: max size = 16 cubic bezier (7 words each) */
int32_t arc_path[16 * 7];
lv_memset_00(arc_path, sizeof(arc_path));
- /*** Init destination buffer ***/
- if(lv_vglite_init_buf(&vgbuf, (uint32_t)dest_width, (uint32_t)dest_height, (uint32_t)dest_width * sizeof(lv_color_t),
- (const lv_color_t *)draw_ctx->buf, false) != LV_RES_OK)
- VG_LITE_RETURN_INV("Init buffer failed.");
-
/*** Init path ***/
lv_coord_t width = dsc->width; /* inner arc radius = outer arc radius - width */
if(width > (lv_coord_t)radius)
@@ -140,11 +130,11 @@ lv_res_t lv_gpu_nxp_vglite_draw_arc(lv_draw_ctx_t * draw_ctx, const lv_draw_arc_
cp_y = 0;
rotate_point(start_angle, &cp_x, &cp_y);
arc_path[pidx++] = VLC_OP_MOVE;
- arc_path[pidx++] = clip_center.x + cp_x;
- arc_path[pidx++] = clip_center.y + cp_y;
+ arc_path[pidx++] = center->x + cp_x;
+ arc_path[pidx++] = center->y + cp_y;
/* draw 1-5 outer quarters */
- add_arc_path(arc_path, &pidx, radius, start_angle, end_angle, clip_center, true);
+ add_arc_path(arc_path, &pidx, radius, start_angle, end_angle, center, true);
if(donut) {
/* close outer circle */
@@ -152,24 +142,24 @@ lv_res_t lv_gpu_nxp_vglite_draw_arc(lv_draw_ctx_t * draw_ctx, const lv_draw_arc_
cp_y = 0;
rotate_point(start_angle, &cp_x, &cp_y);
arc_path[pidx++] = VLC_OP_LINE;
- arc_path[pidx++] = clip_center.x + cp_x;
- arc_path[pidx++] = clip_center.y + cp_y;
+ arc_path[pidx++] = center->x + cp_x;
+ arc_path[pidx++] = center->y + cp_y;
/* start inner circle */
cp_x = radius - width;
cp_y = 0;
rotate_point(start_angle, &cp_x, &cp_y);
arc_path[pidx++] = VLC_OP_MOVE;
- arc_path[pidx++] = clip_center.x + cp_x;
- arc_path[pidx++] = clip_center.y + cp_y;
+ arc_path[pidx++] = center->x + cp_x;
+ arc_path[pidx++] = center->y + cp_y;
}
else if(dsc->rounded != 0U) { /* 1st rounded arc ending */
cp_x = radius - width / 2;
cp_y = 0;
rotate_point(end_angle, &cp_x, &cp_y);
- lv_point_t round_center = {clip_center.x + cp_x, clip_center.y + cp_y};
+ lv_point_t round_center = {center->x + cp_x, center->y + cp_y};
add_arc_path(arc_path, &pidx, width / 2, end_angle, (end_angle + 180),
- round_center, true);
+ &round_center, true);
}
else { /* 1st flat ending */
@@ -177,12 +167,12 @@ lv_res_t lv_gpu_nxp_vglite_draw_arc(lv_draw_ctx_t * draw_ctx, const lv_draw_arc_
cp_y = 0;
rotate_point(end_angle, &cp_x, &cp_y);
arc_path[pidx++] = VLC_OP_LINE;
- arc_path[pidx++] = clip_center.x + cp_x;
- arc_path[pidx++] = clip_center.y + cp_y;
+ arc_path[pidx++] = center->x + cp_x;
+ arc_path[pidx++] = center->y + cp_y;
}
/* draw 1-5 inner quarters */
- add_arc_path(arc_path, &pidx, radius - width, start_angle, end_angle, clip_center, false);
+ add_arc_path(arc_path, &pidx, radius - width, start_angle, end_angle, center, false);
/* last control point of curve */
if(donut) { /* close the loop */
@@ -190,17 +180,17 @@ lv_res_t lv_gpu_nxp_vglite_draw_arc(lv_draw_ctx_t * draw_ctx, const lv_draw_arc_
cp_y = 0;
rotate_point(start_angle, &cp_x, &cp_y);
arc_path[pidx++] = VLC_OP_LINE;
- arc_path[pidx++] = clip_center.x + cp_x;
- arc_path[pidx++] = clip_center.y + cp_y;
+ arc_path[pidx++] = center->x + cp_x;
+ arc_path[pidx++] = center->y + cp_y;
}
else if(dsc->rounded != 0U) { /* 2nd rounded arc ending */
cp_x = radius - width / 2;
cp_y = 0;
rotate_point(start_angle, &cp_x, &cp_y);
- lv_point_t round_center = {clip_center.x + cp_x, clip_center.y + cp_y};
+ lv_point_t round_center = {center->x + cp_x, center->y + cp_y};
add_arc_path(arc_path, &pidx, width / 2, (start_angle + 180), (start_angle + 360),
- round_center, true);
+ &round_center, true);
}
else { /* 2nd flat ending */
@@ -208,46 +198,30 @@ lv_res_t lv_gpu_nxp_vglite_draw_arc(lv_draw_ctx_t * draw_ctx, const lv_draw_arc_
cp_y = 0;
rotate_point(start_angle, &cp_x, &cp_y);
arc_path[pidx++] = VLC_OP_LINE;
- arc_path[pidx++] = clip_center.x + cp_x;
- arc_path[pidx++] = clip_center.y + cp_y;
+ arc_path[pidx++] = center->x + cp_x;
+ arc_path[pidx++] = center->y + cp_y;
}
arc_path[pidx++] = VLC_OP_END;
err = vg_lite_init_path(&path, VG_LITE_S32, VG_LITE_HIGH, (uint32_t)pidx * sizeof(int32_t), arc_path,
- (vg_lite_float_t) draw_ctx->clip_area->x1, (vg_lite_float_t) draw_ctx->clip_area->y1,
- ((vg_lite_float_t) draw_ctx->clip_area->x2) + 1.0f, ((vg_lite_float_t) draw_ctx->clip_area->y2) + 1.0f);
+ (vg_lite_float_t)clip_area->x1, (vg_lite_float_t)clip_area->y1,
+ ((vg_lite_float_t)clip_area->x2) + 1.0f, ((vg_lite_float_t)clip_area->y2) + 1.0f);
VG_LITE_ERR_RETURN_INV(err, "Init path failed.");
- /* set rotation angle */
+ vg_lite_buffer_format_t color_format = LV_COLOR_DEPTH == 16 ? VG_LITE_BGRA8888 : VG_LITE_ABGR8888;
+ if(lv_vglite_premult_and_swizzle(&vgcol, col32, dsc->opa, color_format) != LV_RES_OK)
+ VG_LITE_RETURN_INV("Premultiplication and swizzle failed.");
+
+ vg_lite_matrix_t matrix;
vg_lite_identity(&matrix);
- if(opa <= (lv_opa_t)LV_OPA_MAX) {
- /* Only pre-multiply color if hardware pre-multiplication is not present */
- if(!vg_lite_query_feature(gcFEATURE_BIT_VG_PE_PREMULTIPLY)) {
- col32.ch.red = (uint8_t)(((uint16_t)col32.ch.red * opa) >> 8);
- col32.ch.green = (uint8_t)(((uint16_t)col32.ch.green * opa) >> 8);
- col32.ch.blue = (uint8_t)(((uint16_t)col32.ch.blue * opa) >> 8);
- }
- col32.ch.alpha = opa;
- }
-
-#if LV_COLOR_DEPTH==16
- vgcol = col32.full;
-#else /*LV_COLOR_DEPTH==32*/
- vgcol = ((uint32_t)col32.ch.alpha << 24) | ((uint32_t)col32.ch.blue << 16) | ((uint32_t)col32.ch.green << 8) |
- (uint32_t)col32.ch.red;
-#endif
-
- /*Clean & invalidate cache*/
- lv_vglite_invalidate_cache();
-
/*** Draw arc ***/
- err = vg_lite_draw(&vgbuf, &path, VG_LITE_FILL_NON_ZERO, &matrix, VG_LITE_BLEND_SRC_OVER, vgcol);
+ err = vg_lite_draw(vgbuf, &path, VG_LITE_FILL_NON_ZERO, &matrix, VG_LITE_BLEND_SRC_OVER, vgcol);
VG_LITE_ERR_RETURN_INV(err, "Draw arc failed.");
- err = vg_lite_finish();
- VG_LITE_ERR_RETURN_INV(err, "Finish failed.");
+ if(lv_vglite_run() != LV_RES_OK)
+ VG_LITE_RETURN_INV("Run failed.");
err = vg_lite_clear_path(&path);
VG_LITE_ERR_RETURN_INV(err, "Clear path failed.");
@@ -564,50 +538,50 @@ static void get_arc_control_points(vg_arc * arc, bool start)
* center: (in) the center of the circle in draw coordinates
* cw: (in) true if arc is clockwise
*/
-static void add_split_arc_path(int32_t * arc_path, int * pidx, vg_arc * q_arc, lv_point_t center, bool cw)
+static void add_split_arc_path(int32_t * arc_path, int * pidx, vg_arc * q_arc, const lv_point_t * center, bool cw)
{
/* assumes first control point already in array arc_path[] */
int idx = *pidx;
if(cw) {
#if BEZIER_DBG_CONTROL_POINTS
arc_path[idx++] = VLC_OP_LINE;
- arc_path[idx++] = q_arc->p1x + center.x;
- arc_path[idx++] = q_arc->p1y + center.y;
+ arc_path[idx++] = q_arc->p1x + center->x;
+ arc_path[idx++] = q_arc->p1y + center->y;
arc_path[idx++] = VLC_OP_LINE;
- arc_path[idx++] = q_arc->p2x + center.x;
- arc_path[idx++] = q_arc->p2y + center.y;
+ arc_path[idx++] = q_arc->p2x + center->x;
+ arc_path[idx++] = q_arc->p2y + center->y;
arc_path[idx++] = VLC_OP_LINE;
- arc_path[idx++] = q_arc->p3x + center.x;
- arc_path[idx++] = q_arc->p3y + center.y;
+ arc_path[idx++] = q_arc->p3x + center->x;
+ arc_path[idx++] = q_arc->p3y + center->y;
#else
arc_path[idx++] = VLC_OP_CUBIC;
- arc_path[idx++] = q_arc->p1x + center.x;
- arc_path[idx++] = q_arc->p1y + center.y;
- arc_path[idx++] = q_arc->p2x + center.x;
- arc_path[idx++] = q_arc->p2y + center.y;
- arc_path[idx++] = q_arc->p3x + center.x;
- arc_path[idx++] = q_arc->p3y + center.y;
+ arc_path[idx++] = q_arc->p1x + center->x;
+ arc_path[idx++] = q_arc->p1y + center->y;
+ arc_path[idx++] = q_arc->p2x + center->x;
+ arc_path[idx++] = q_arc->p2y + center->y;
+ arc_path[idx++] = q_arc->p3x + center->x;
+ arc_path[idx++] = q_arc->p3y + center->y;
#endif
}
else { /* reverse points order when counter-clockwise */
#if BEZIER_DBG_CONTROL_POINTS
arc_path[idx++] = VLC_OP_LINE;
- arc_path[idx++] = q_arc->p2x + center.x;
- arc_path[idx++] = q_arc->p2y + center.y;
+ arc_path[idx++] = q_arc->p2x + center->x;
+ arc_path[idx++] = q_arc->p2y + center->y;
arc_path[idx++] = VLC_OP_LINE;
- arc_path[idx++] = q_arc->p1x + center.x;
- arc_path[idx++] = q_arc->p1y + center.y;
+ arc_path[idx++] = q_arc->p1x + center->x;
+ arc_path[idx++] = q_arc->p1y + center->y;
arc_path[idx++] = VLC_OP_LINE;
- arc_path[idx++] = q_arc->p0x + center.x;
- arc_path[idx++] = q_arc->p0y + center.y;
+ arc_path[idx++] = q_arc->p0x + center->x;
+ arc_path[idx++] = q_arc->p0y + center->y;
#else
arc_path[idx++] = VLC_OP_CUBIC;
- arc_path[idx++] = q_arc->p2x + center.x;
- arc_path[idx++] = q_arc->p2y + center.y;
- arc_path[idx++] = q_arc->p1x + center.x;
- arc_path[idx++] = q_arc->p1y + center.y;
- arc_path[idx++] = q_arc->p0x + center.x;
- arc_path[idx++] = q_arc->p0y + center.y;
+ arc_path[idx++] = q_arc->p2x + center->x;
+ arc_path[idx++] = q_arc->p2y + center->y;
+ arc_path[idx++] = q_arc->p1x + center->x;
+ arc_path[idx++] = q_arc->p1y + center->y;
+ arc_path[idx++] = q_arc->p0x + center->x;
+ arc_path[idx++] = q_arc->p0y + center->y;
#endif
}
/* update index i n path array*/
@@ -615,7 +589,7 @@ static void add_split_arc_path(int32_t * arc_path, int * pidx, vg_arc * q_arc, l
}
static void add_arc_path(int32_t * arc_path, int * pidx, int32_t radius,
- int32_t start_angle, int32_t end_angle, lv_point_t center, bool cw)
+ int32_t start_angle, int32_t end_angle, const lv_point_t * center, bool cw)
{
/* set number of arcs to draw */
vg_arc q_arc;
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_arc.h b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_arc.h
index 98ba8a3d0..0fbff3d92 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_arc.h
+++ b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_arc.h
@@ -6,7 +6,7 @@
/**
* MIT License
*
- * Copyright 2021, 2022 NXP
+ * Copyright 2021-2023 NXP
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -40,7 +40,7 @@ extern "C" {
#include "../../../lv_conf_internal.h"
#if LV_USE_GPU_NXP_VG_LITE
-#include "lv_gpu_nxp_vglite.h"
+#include "lv_vglite_utils.h"
/*********************
* DEFINES
@@ -54,17 +54,21 @@ extern "C" {
* GLOBAL PROTOTYPES
**********************/
-/***
+/**
* Draw arc shape with effects
- * @param draw_ctx drawing context
- * @param dsc the arc description structure (width, rounded ending, opacity)
- * @param center the coordinates of the arc center
- * @param radius the radius of external arc
- * @param start_angle the starting angle in degrees
- * @param end_angle the ending angle in degrees
+ *
+ * @param[in] center Arc center with relative coordinates
+ * @param[in] radius Radius of external arc
+ * @param[in] start_angle Starting angle in degrees
+ * @param[in] end_angle Ending angle in degrees
+ * @param[in] clip_area Clipping area with relative coordinates to dest buff
+ * @param[in] dsc Arc description structure (width, rounded ending, opacity)
+ *
+ * @retval LV_RES_OK Draw completed
+ * @retval LV_RES_INV Error occurred (\see LV_GPU_NXP_VG_LITE_LOG_ERRORS)
*/
-lv_res_t lv_gpu_nxp_vglite_draw_arc(lv_draw_ctx_t * draw_ctx, const lv_draw_arc_dsc_t * dsc, const lv_point_t * center,
- int32_t radius, int32_t start_angle, int32_t end_angle);
+lv_res_t lv_gpu_nxp_vglite_draw_arc(const lv_point_t * center, int32_t radius, int32_t start_angle, int32_t end_angle,
+ const lv_area_t * clip_area, const lv_draw_arc_dsc_t * dsc);
/**********************
* MACROS
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_blend.c b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_blend.c
index b59b143b3..e1408b760 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_blend.c
+++ b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_blend.c
@@ -6,7 +6,7 @@
/**
* MIT License
*
- * Copyright 2020-2022 NXP
+ * Copyright 2020-2023 NXP
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -34,12 +34,19 @@
#include "lv_draw_vglite_blend.h"
#if LV_USE_GPU_NXP_VG_LITE
+#include "lv_vglite_buf.h"
/*********************
* DEFINES
*********************/
-/* Enable BLIT quality degradation workaround for RT595, recommended for screen's dimension > 352 pixels */
+/** Stride in px required by VG-Lite HW*/
+#define LV_GPU_NXP_VG_LITE_STRIDE_ALIGN_PX 16U
+
+/**
+ * Enable BLIT quality degradation workaround for RT595,
+ * recommended for screen's dimension > 352 pixels.
+ */
#define RT595_BLIT_WRKRND_ENABLED 1
/* Internal compound symbol */
@@ -51,12 +58,13 @@
#define VG_LITE_BLIT_SPLIT_ENABLED 0
#endif
-/**
- * BLIT split threshold - BLITs with width or height higher than this value will be done
- * in multiple steps. Value must be 16-aligned. Don't change.
- */
-#define LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR 352
-
+#if VG_LITE_BLIT_SPLIT_ENABLED
+ /**
+ * BLIT split threshold - BLITs with width or height higher than this value will be done
+ * in multiple steps. Value must be 16-aligned. Don't change.
+ */
+ #define LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR 352
+#endif
/**********************
* TYPEDEFS
@@ -67,63 +75,87 @@
**********************/
/**
- * BLock Image Transfer - single direct BLIT.
+ * Blit single image, with optional opacity.
+ *
+ * @param[in] dest_area Area with relative coordinates of destination buffer
+ * @param[in] src_area Source area with relative coordinates of source buffer
+ * @param[in] opa Opacity
*
- * @param[in] blit Description of the transfer
* @retval LV_RES_OK Transfer complete
* @retval LV_RES_INV Error occurred (\see LV_GPU_NXP_VG_LITE_LOG_ERRORS)
*/
-static lv_res_t _lv_gpu_nxp_vglite_blit_single(lv_gpu_nxp_vglite_blit_info_t * blit);
+static lv_res_t lv_vglite_blit_single(const lv_area_t * dest_area, const lv_area_t * src_area, lv_opa_t opa);
+
+/**
+ * Check source memory and stride alignment.
+ *
+ * @param[in] src_buf Source buffer
+ * @param[in] src_stride Stride of source buffer in pixels
+ *
+ * @retval LV_RES_OK Alignment OK
+ * @retval LV_RES_INV Error occurred (\see LV_GPU_NXP_VG_LITE_LOG_ERRORS)
+ */
+static lv_res_t check_src_alignment(const lv_color_t * src_buf, lv_coord_t src_stride);
+
+/**
+ * Creates matrix that translates to origin of given destination area.
+ *
+ * @param[in] dest_area Area with relative coordinates of destination buffer
+ */
+static inline void lv_vglite_set_translation_matrix(const lv_area_t * dest_area);
+
+/**
+ * Creates matrix that translates to origin of given destination area with transformation (scale or rotate).
+ *
+ * @param[in] dest_area Area with relative coordinates of destination buffer
+ * @param[in] dsc Image descriptor
+ */
+static inline void lv_vglite_set_transformation_matrix(const lv_area_t * dest_area, const lv_draw_img_dsc_t * dsc);
#if VG_LITE_BLIT_SPLIT_ENABLED
- /**
- * Move buffer pointer as close as possible to area, but with respect to alignment requirements. X-axis only.
- *
- * @param[in,out] area Area to be updated
- * @param[in,out] buf Pointer to be updated
- */
- static void _align_x(lv_area_t * area, lv_color_t ** buf);
+/**
+ * Move buffer pointer as close as possible to area, but with respect to alignment requirements. X-axis only.
+ *
+ * @param[in/out] area Area to be updated
+ * @param[in/out] buf Pointer to be updated
+ */
+static void align_x(lv_area_t * area, lv_color_t ** buf);
- /**
- * Move buffer pointer to the area start and update variables, Y-axis only.
- *
- * @param[in,out] area Area to be updated
- * @param[in,out] buf Pointer to be updated
- * @param[in] stridePx Buffer stride in pixels
- */
- static void _align_y(lv_area_t * area, lv_color_t ** buf, uint32_t stridePx);
+/**
+ * Move buffer pointer to the area start and update variables, Y-axis only.
+ *
+ * @param[in/out] area Area to be updated
+ * @param[in/out] buf Pointer to be updated
+ * @param[in] stride Buffer stride in pixels
+ */
+static void align_y(lv_area_t * area, lv_color_t ** buf, lv_coord_t stride);
- /**
- * Software BLIT as a fall-back scenario.
- *
- * @param[in] blit BLIT configuration
- */
- static void _sw_blit(lv_gpu_nxp_vglite_blit_info_t * blit);
-
- /**
- * Verify BLIT structure - widths, stride, pointer alignment
- *
- * @param[in] blit BLIT configuration
- * @retval LV_RES_OK
- * @retval LV_RES_INV Error occurred (\see LV_GPU_NXP_VG_LITE_LOG_ERRORS)
- */
- static lv_res_t _lv_gpu_nxp_vglite_check_blit(lv_gpu_nxp_vglite_blit_info_t * blit);
-
- /**
- * BLock Image Transfer - split BLIT.
- *
- * @param[in] blit BLIT configuration
- * @retval LV_RES_OK Transfer complete
- * @retval LV_RES_INV Error occurred (\see LV_GPU_NXP_VG_LITE_LOG_ERRORS)
- */
- static lv_res_t _lv_gpu_nxp_vglite_blit_split(lv_gpu_nxp_vglite_blit_info_t * blit);
+/**
+ * Blit image split in tiles, with optional opacity.
+ *
+ * @param[in/out] dest_buf Destination buffer
+ * @param[in] dest_area Area with relative coordinates of destination buffer
+ * @param[in] dest_stride Stride of destination buffer in pixels
+ * @param[in] src_buf Source buffer
+ * @param[in] src_area Source area with relative coordinates of source buffer
+ * @param[in] src_stride Stride of source buffer in pixels
+ * @param[in] opa Opacity
+ *
+ * @retval LV_RES_OK Transfer complete
+ * @retval LV_RES_INV Error occurred (\see LV_GPU_NXP_VG_LITE_LOG_ERRORS)
+ */
+static lv_res_t lv_vglite_blit_split(lv_color_t * dest_buf, lv_area_t * dest_area, lv_coord_t dest_stride,
+ const lv_color_t * src_buf, lv_area_t * src_area, lv_coord_t src_stride,
+ lv_opa_t opa);
#endif
/**********************
* STATIC VARIABLES
**********************/
+static vg_lite_matrix_t vgmatrix;
+
/**********************
* MACROS
**********************/
@@ -132,98 +164,57 @@ static lv_res_t _lv_gpu_nxp_vglite_blit_single(lv_gpu_nxp_vglite_blit_info_t * b
* GLOBAL FUNCTIONS
**********************/
-lv_res_t lv_gpu_nxp_vglite_fill(lv_color_t * dest_buf, lv_coord_t dest_width, lv_coord_t dest_height,
- const lv_area_t * fill_area, lv_color_t color, lv_opa_t opa)
+lv_res_t lv_gpu_nxp_vglite_fill(const lv_area_t * dest_area, lv_color_t color, lv_opa_t opa)
{
- uint32_t area_size = lv_area_get_size(fill_area);
- lv_coord_t area_w = lv_area_get_width(fill_area);
- lv_coord_t area_h = lv_area_get_height(fill_area);
-
- if(opa >= (lv_opa_t)LV_OPA_MAX) {
- if(area_size < LV_GPU_NXP_VG_LITE_FILL_SIZE_LIMIT)
- VG_LITE_RETURN_INV("Area size %d smaller than limit %d.", area_size, LV_GPU_NXP_VG_LITE_FILL_SIZE_LIMIT);
- }
- else {
- if(area_size < LV_GPU_NXP_VG_LITE_FILL_OPA_SIZE_LIMIT)
- VG_LITE_RETURN_INV("Area size %d smaller than limit %d.", area_size, LV_GPU_NXP_VG_LITE_FILL_OPA_SIZE_LIMIT);
- }
-
- vg_lite_buffer_t vgbuf;
- vg_lite_rectangle_t rect;
vg_lite_error_t err = VG_LITE_SUCCESS;
lv_color32_t col32 = {.full = lv_color_to32(color)}; /*Convert color to RGBA8888*/
vg_lite_color_t vgcol; /* vglite takes ABGR */
+ vg_lite_buffer_t * vgbuf = lv_vglite_get_dest_buf();
- if(lv_vglite_init_buf(&vgbuf, (uint32_t)dest_width, (uint32_t)dest_height, (uint32_t)dest_width * sizeof(lv_color_t),
- (const lv_color_t *)dest_buf, false) != LV_RES_OK)
- VG_LITE_RETURN_INV("Init buffer failed.");
+ vg_lite_buffer_format_t color_format = LV_COLOR_DEPTH == 16 ? VG_LITE_BGRA8888 : VG_LITE_ABGR8888;
+ if(lv_vglite_premult_and_swizzle(&vgcol, col32, opa, color_format) != LV_RES_OK)
+ VG_LITE_RETURN_INV("Premultiplication and swizzle failed.");
if(opa >= (lv_opa_t)LV_OPA_MAX) { /*Opaque fill*/
- rect.x = fill_area->x1;
- rect.y = fill_area->y1;
- rect.width = area_w;
- rect.height = area_h;
+ vg_lite_rectangle_t rect = {
+ .x = dest_area->x1,
+ .y = dest_area->y1,
+ .width = lv_area_get_width(dest_area),
+ .height = lv_area_get_height(dest_area)
+ };
- /*Clean & invalidate cache*/
- lv_vglite_invalidate_cache();
-
-#if LV_COLOR_DEPTH==16
- vgcol = col32.full;
-#else /*LV_COLOR_DEPTH==32*/
- vgcol = ((uint32_t)col32.ch.alpha << 24) | ((uint32_t)col32.ch.blue << 16) | ((uint32_t)col32.ch.green << 8) |
- (uint32_t)col32.ch.red;
-#endif
-
- err = vg_lite_clear(&vgbuf, &rect, vgcol);
+ err = vg_lite_clear(vgbuf, &rect, vgcol);
VG_LITE_ERR_RETURN_INV(err, "Clear failed.");
- err = vg_lite_finish();
- VG_LITE_ERR_RETURN_INV(err, "Finish failed.");
+ if(lv_vglite_run() != LV_RES_OK)
+ VG_LITE_RETURN_INV("Run failed.");
}
else { /*fill with transparency*/
vg_lite_path_t path;
int32_t path_data[] = { /*VG rectangular path*/
- VLC_OP_MOVE, fill_area->x1, fill_area->y1,
- VLC_OP_LINE, fill_area->x2 + 1, fill_area->y1,
- VLC_OP_LINE, fill_area->x2 + 1, fill_area->y2 + 1,
- VLC_OP_LINE, fill_area->x1, fill_area->y2 + 1,
- VLC_OP_LINE, fill_area->x1, fill_area->y1,
+ VLC_OP_MOVE, dest_area->x1, dest_area->y1,
+ VLC_OP_LINE, dest_area->x2 + 1, dest_area->y1,
+ VLC_OP_LINE, dest_area->x2 + 1, dest_area->y2 + 1,
+ VLC_OP_LINE, dest_area->x1, dest_area->y2 + 1,
+ VLC_OP_LINE, dest_area->x1, dest_area->y1,
VLC_OP_END
};
err = vg_lite_init_path(&path, VG_LITE_S32, VG_LITE_LOW, sizeof(path_data), path_data,
- (vg_lite_float_t) fill_area->x1, (vg_lite_float_t) fill_area->y1,
- ((vg_lite_float_t) fill_area->x2) + 1.0f, ((vg_lite_float_t) fill_area->y2) + 1.0f);
+ (vg_lite_float_t) dest_area->x1, (vg_lite_float_t) dest_area->y1,
+ ((vg_lite_float_t) dest_area->x2) + 1.0f, ((vg_lite_float_t) dest_area->y2) + 1.0f);
VG_LITE_ERR_RETURN_INV(err, "Init path failed.");
- /* Only pre-multiply color if hardware pre-multiplication is not present */
- if(!vg_lite_query_feature(gcFEATURE_BIT_VG_PE_PREMULTIPLY)) {
- col32.ch.red = (uint8_t)(((uint16_t)col32.ch.red * opa) >> 8);
- col32.ch.green = (uint8_t)(((uint16_t)col32.ch.green * opa) >> 8);
- col32.ch.blue = (uint8_t)(((uint16_t)col32.ch.blue * opa) >> 8);
- }
- col32.ch.alpha = opa;
-
-#if LV_COLOR_DEPTH==16
- vgcol = col32.full;
-#else /*LV_COLOR_DEPTH==32*/
- vgcol = ((uint32_t)col32.ch.alpha << 24) | ((uint32_t)col32.ch.blue << 16) | ((uint32_t)col32.ch.green << 8) |
- (uint32_t)col32.ch.red;
-#endif
-
- /*Clean & invalidate cache*/
- lv_vglite_invalidate_cache();
-
vg_lite_matrix_t matrix;
vg_lite_identity(&matrix);
/*Draw rectangle*/
- err = vg_lite_draw(&vgbuf, &path, VG_LITE_FILL_EVEN_ODD, &matrix, VG_LITE_BLEND_SRC_OVER, vgcol);
+ err = vg_lite_draw(vgbuf, &path, VG_LITE_FILL_EVEN_ODD, &matrix, VG_LITE_BLEND_SRC_OVER, vgcol);
VG_LITE_ERR_RETURN_INV(err, "Draw rectangle failed.");
- err = vg_lite_finish();
- VG_LITE_ERR_RETURN_INV(err, "Finish failed.");
+ if(lv_vglite_run() != LV_RES_OK)
+ VG_LITE_RETURN_INV("Run failed.");
err = vg_lite_clear_path(&path);
VG_LITE_ERR_RETURN_INV(err, "Clear path failed.");
@@ -232,41 +223,64 @@ lv_res_t lv_gpu_nxp_vglite_fill(lv_color_t * dest_buf, lv_coord_t dest_width, lv
return LV_RES_OK;
}
-lv_res_t lv_gpu_nxp_vglite_blit(lv_gpu_nxp_vglite_blit_info_t * blit)
+lv_res_t lv_gpu_nxp_vglite_blit(lv_color_t * dest_buf, lv_area_t * dest_area, lv_coord_t dest_stride,
+ const lv_color_t * src_buf, lv_area_t * src_area, lv_coord_t src_stride,
+ lv_opa_t opa)
{
- uint32_t dest_size = lv_area_get_size(&blit->dst_area);
+ /* Set vgmatrix. */
+ lv_vglite_set_translation_matrix(dest_area);
- if(blit->opa >= (lv_opa_t)LV_OPA_MAX) {
- if(dest_size < LV_GPU_NXP_VG_LITE_BLIT_SIZE_LIMIT)
- VG_LITE_RETURN_INV("Area size %d smaller than limit %d.", dest_size, LV_GPU_NXP_VG_LITE_BLIT_SIZE_LIMIT);
- }
- else {
- if(dest_size < LV_GPU_NXP_VG_LITE_BLIT_OPA_SIZE_LIMIT)
- VG_LITE_RETURN_INV("Area size %d smaller than limit %d.", dest_size, LV_GPU_NXP_VG_LITE_BLIT_OPA_SIZE_LIMIT);
- }
+ /* Set src_vgbuf structure. */
+ lv_vglite_set_src_buf(src_buf, src_area, src_stride);
#if VG_LITE_BLIT_SPLIT_ENABLED
- return _lv_gpu_nxp_vglite_blit_split(blit);
-#endif /* non RT595 */
+ lv_color_t * orig_dest_buf = dest_buf;
- /* Just pass down */
- return _lv_gpu_nxp_vglite_blit_single(blit);
+ lv_res_t rv = lv_vglite_blit_split(dest_buf, dest_area, dest_stride, src_buf, src_area, src_stride, opa);
+
+ /* Restore the original dest_vgbuf memory address. */
+ lv_vglite_set_dest_buf_ptr(orig_dest_buf);
+
+ return rv;
+#else
+ LV_UNUSED(dest_buf);
+ LV_UNUSED(dest_stride);
+
+ if(check_src_alignment(src_buf, src_stride) != LV_RES_OK)
+ VG_LITE_RETURN_INV("Check src alignment failed.");
+
+ return lv_vglite_blit_single(dest_area, src_area, opa);
+#endif
}
-lv_res_t lv_gpu_nxp_vglite_blit_transform(lv_gpu_nxp_vglite_blit_info_t * blit)
+lv_res_t lv_gpu_nxp_vglite_blit_transform(lv_color_t * dest_buf, lv_area_t * dest_area, lv_coord_t dest_stride,
+ const lv_color_t * src_buf, lv_area_t * src_area, lv_coord_t src_stride,
+ const lv_draw_img_dsc_t * dsc)
{
- uint32_t dest_size = lv_area_get_size(&blit->dst_area);
+ /* Set vgmatrix. */
+ lv_vglite_set_transformation_matrix(dest_area, dsc);
- if(blit->opa >= (lv_opa_t)LV_OPA_MAX) {
- if(dest_size < LV_GPU_NXP_VG_LITE_BLIT_SIZE_LIMIT)
- VG_LITE_RETURN_INV("Area size %d smaller than limit %d.", dest_size, LV_GPU_NXP_VG_LITE_BLIT_SIZE_LIMIT);
- }
- else {
- if(dest_size < LV_GPU_NXP_VG_LITE_BLIT_OPA_SIZE_LIMIT)
- VG_LITE_RETURN_INV("Area size %d smaller than limit %d.", dest_size, LV_GPU_NXP_VG_LITE_BLIT_OPA_SIZE_LIMIT);
- }
+ /* Set src_vgbuf structure. */
+ lv_vglite_set_src_buf(src_buf, src_area, src_stride);
- return _lv_gpu_nxp_vglite_blit_single(blit);
+#if VG_LITE_BLIT_SPLIT_ENABLED
+ lv_color_t * orig_dest_buf = dest_buf;
+
+ lv_res_t rv = lv_vglite_blit_split(dest_buf, dest_area, dest_stride, src_buf, src_area, src_stride, dsc->opa);
+
+ /* Restore the original dest_vgbuf memory address. */
+ lv_vglite_set_dest_buf_ptr(orig_dest_buf);
+
+ return rv;
+#else
+ LV_UNUSED(dest_buf);
+ LV_UNUSED(dest_stride);
+
+ if(check_src_alignment(src_buf, src_stride) != LV_RES_OK)
+ VG_LITE_RETURN_INV("Check src alignment failed.");
+
+ return lv_vglite_blit_single(dest_area, src_area, dsc->opa);
+#endif
}
/**********************
@@ -274,223 +288,196 @@ lv_res_t lv_gpu_nxp_vglite_blit_transform(lv_gpu_nxp_vglite_blit_info_t * blit)
**********************/
#if VG_LITE_BLIT_SPLIT_ENABLED
-static lv_res_t _lv_gpu_nxp_vglite_blit_split(lv_gpu_nxp_vglite_blit_info_t * blit)
+static lv_res_t lv_vglite_blit_split(lv_color_t * dest_buf, lv_area_t * dest_area, lv_coord_t dest_stride,
+ const lv_color_t * src_buf, lv_area_t * src_area, lv_coord_t src_stride,
+ lv_opa_t opa)
{
lv_res_t rv = LV_RES_INV;
- if(_lv_gpu_nxp_vglite_check_blit(blit) != LV_RES_OK) {
- PRINT_BLT("Blit check failed\n");
- return LV_RES_INV;
- }
+ VG_LITE_LOG_TRACE("Blit "
+ "Area: ([%d,%d], [%d,%d]) -> ([%d,%d], [%d,%d]) | "
+ "Size: ([%dx%d] -> [%dx%d]) | "
+ "Addr: (0x%x -> 0x%x)",
+ src_area->x1, src_area->y1, src_area->x2, src_area->y2,
+ dest_area->x1, dest_area->y1, dest_area->x2, dest_area->y2,
+ lv_area_get_width(src_area), lv_area_get_height(src_area),
+ lv_area_get_width(dest_area), lv_area_get_height(dest_area),
+ (uintptr_t)src_buf, (uintptr_t)dest_buf);
- PRINT_BLT("BLIT from: "
- "Area: %03d,%03d - %03d,%03d "
- "Addr: %d\n\n",
- blit->src_area.x1, blit->src_area.y1,
- blit->src_area.x2, blit->src_area.y2,
- (uintptr_t) blit->src);
-
- PRINT_BLT("BLIT to: "
- "Area: %03d,%03d - %03d,%03d "
- "Addr: %d\n\n",
- blit->dst_area.x1, blit->dst_area.y1,
- blit->dst_area.x2, blit->dst_area.y2,
- (uintptr_t) blit->src);
-
- /* Stage 1: Move starting pointers as close as possible to [x1, y1], so coordinates are as small as possible. */
- _align_x(&blit->src_area, (lv_color_t **)&blit->src);
- _align_y(&blit->src_area, (lv_color_t **)&blit->src, blit->src_stride / sizeof(lv_color_t));
- _align_x(&blit->dst_area, (lv_color_t **)&blit->dst);
- _align_y(&blit->dst_area, (lv_color_t **)&blit->dst, blit->dst_stride / sizeof(lv_color_t));
+ /* Stage 1: Move starting pointers as close as possible to [x1, y1], so coordinates are as small as possible. */
+ align_x(src_area, (lv_color_t **)&src_buf);
+ align_y(src_area, (lv_color_t **)&src_buf, src_stride);
+ align_x(dest_area, (lv_color_t **)&dest_buf);
+ align_y(dest_area, (lv_color_t **)&dest_buf, dest_stride);
/* Stage 2: If we're in limit, do a single BLIT */
- if((blit->src_area.x2 < LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR) &&
- (blit->src_area.y2 < LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR)) {
- PRINT_BLT("Simple blit!\n");
- return _lv_gpu_nxp_vglite_blit_single(blit);
+ if((src_area->x2 < LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR) &&
+ (src_area->y2 < LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR)) {
+ if(check_src_alignment(src_buf, src_stride) != LV_RES_OK)
+ VG_LITE_RETURN_INV("Check src alignment failed.");
+
+ /* Set new dest_vgbuf and src_vgbuf memory addresses. */
+ lv_vglite_set_dest_buf_ptr(dest_buf);
+ lv_vglite_set_src_buf_ptr(src_buf);
+
+ /* Set vgmatrix. */
+ lv_vglite_set_translation_matrix(dest_area);
+
+ rv = lv_vglite_blit_single(dest_area, src_area, opa);
+
+ VG_LITE_LOG_TRACE("Single "
+ "Area: ([%d,%d], [%d,%d]) -> ([%d,%d], [%d,%d]) | "
+ "Size: ([%dx%d] -> [%dx%d]) | "
+ "Addr: (0x%x -> 0x%x) %s",
+ src_area->x1, src_area->y1, src_area->x2, src_area->y2,
+ dest_area->x1, dest_area->y1, dest_area->x2, dest_area->y2,
+ lv_area_get_width(src_area), lv_area_get_height(src_area),
+ lv_area_get_width(dest_area), lv_area_get_height(dest_area),
+ (uintptr_t)src_buf, (uintptr_t)dest_buf,
+ rv == LV_RES_OK ? "OK!" : "FAILED!");
+
+ return rv;
};
/* Stage 3: Split the BLIT into multiple tiles */
- PRINT_BLT("Split blit!\n");
-
- PRINT_BLT("Blit "
- "([%03d,%03d], [%03d,%03d]) -> "
- "([%03d,%03d], [%03d,%03d]) | "
- "([%03dx%03d] -> [%03dx%03d]) | "
- "A:(%d -> %d)\n",
- blit->src_area.x1, blit->src_area.y1, blit->src_area.x2, blit->src_area.y2,
- blit->dst_area.x1, blit->dst_area.y1, blit->dst_area.x2, blit->dst_area.y2,
- lv_area_get_width(&blit->src_area), lv_area_get_height(&blit->src_area),
- lv_area_get_width(&blit->dst_area), lv_area_get_height(&blit->dst_area),
- (uintptr_t) blit->src, (uintptr_t) blit->dst);
+ VG_LITE_LOG_TRACE("Split "
+ "Area: ([%d,%d], [%d,%d]) -> ([%d,%d], [%d,%d]) | "
+ "Size: ([%dx%d] -> [%dx%d]) | "
+ "Addr: (0x%x -> 0x%x)",
+ src_area->x1, src_area->y1, src_area->x2, src_area->y2,
+ dest_area->x1, dest_area->y1, dest_area->x2, dest_area->y2,
+ lv_area_get_width(src_area), lv_area_get_height(src_area),
+ lv_area_get_width(dest_area), lv_area_get_height(dest_area),
+ (uintptr_t)src_buf, (uintptr_t)dest_buf);
- lv_coord_t totalWidth = lv_area_get_width(&blit->src_area);
- lv_coord_t totalHeight = lv_area_get_height(&blit->src_area);
-
- lv_gpu_nxp_vglite_blit_info_t tileBlit;
+ lv_coord_t width = lv_area_get_width(src_area);
+ lv_coord_t height = lv_area_get_height(src_area);
/* Number of tiles needed */
- int totalTilesX = (blit->src_area.x1 + totalWidth + LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR - 1) /
- LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR;
- int totalTilesY = (blit->src_area.y1 + totalHeight + LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR - 1) /
- LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR;
+ int total_tiles_x = (src_area->x1 + width + LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR - 1) /
+ LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR;
+ int total_tiles_y = (src_area->y1 + height + LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR - 1) /
+ LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR;
/* src and dst buffer shift against each other. Src buffer real data [0,0] may start actually at [3,0] in buffer, as
* the buffer pointer has to be aligned, while dst buffer real data [0,0] may start at [1,0] in buffer. alignment may be
* different */
- int shiftSrcX = (blit->src_area.x1 > blit->dst_area.x1) ? (blit->src_area.x1 - blit->dst_area.x1) : 0;
- int shiftDstX = (blit->src_area.x1 < blit->dst_area.x1) ? (blit->dst_area.x1 - blit->src_area.x1) : 0;
+ int shift_src_x = (src_area->x1 > dest_area->x1) ? (src_area->x1 - dest_area->x1) : 0;
+ int shift_dest_x = (src_area->x1 < dest_area->x1) ? (dest_area->x1 - src_area->x1) : 0;
- PRINT_BLT("\n");
- PRINT_BLT("Align shift: src: %d, dst: %d\n", shiftSrcX, shiftDstX);
+ VG_LITE_LOG_TRACE("X shift: src: %d, dst: %d", shift_src_x, shift_dest_x);
- tileBlit = *blit;
+ lv_color_t * tile_dest_buf;
+ lv_area_t tile_dest_area;
+ const lv_color_t * tile_src_buf;
+ lv_area_t tile_src_area;
- for(int tileY = 0; tileY < totalTilesY; tileY++) {
+ for(int y = 0; y < total_tiles_y; y++) {
- tileBlit.src_area.y1 = 0; /* no vertical alignment, always start from 0 */
- tileBlit.src_area.y2 = totalHeight - tileY * LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR - 1;
- if(tileBlit.src_area.y2 >= LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR) {
- tileBlit.src_area.y2 = LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR - 1; /* Should never happen */
+ tile_src_area.y1 = 0; /* no vertical alignment, always start from 0 */
+ tile_src_area.y2 = height - y * LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR - 1;
+ if(tile_src_area.y2 >= LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR) {
+ tile_src_area.y2 = LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR - 1; /* Should never happen */
}
- tileBlit.src = blit->src + tileY * LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR * blit->src_stride / sizeof(
- lv_color_t); /* stride in px! */
+ tile_src_buf = src_buf + y * LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR * src_stride;
- tileBlit.dst_area.y1 = tileBlit.src_area.y1; /* y has no alignment, always in sync with src */
- tileBlit.dst_area.y2 = tileBlit.src_area.y2;
+ tile_dest_area.y1 = tile_src_area.y1; /* y has no alignment, always in sync with src */
+ tile_dest_area.y2 = tile_src_area.y2;
- tileBlit.dst = blit->dst + tileY * LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR * blit->dst_stride / sizeof(
- lv_color_t); /* stride in px! */
+ tile_dest_buf = dest_buf + y * LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR * dest_stride;
- for(int tileX = 0; tileX < totalTilesX; tileX++) {
+ for(int x = 0; x < total_tiles_x; x++) {
- if(tileX == 0) {
+ if(x == 0) {
/* 1st tile is special - there may be a gap between buffer start pointer
* and area.x1 value, as the pointer has to be aligned.
- * tileBlit.src pointer - keep init value from Y-loop.
+ * tile_src_buf pointer - keep init value from Y-loop.
* Also, 1st tile start is not shifted! shift is applied from 2nd tile */
- tileBlit.src_area.x1 = blit->src_area.x1;
- tileBlit.dst_area.x1 = blit->dst_area.x1;
+ tile_src_area.x1 = src_area->x1;
+ tile_dest_area.x1 = dest_area->x1;
}
else {
/* subsequent tiles always starts from 0, but shifted*/
- tileBlit.src_area.x1 = 0 + shiftSrcX;
- tileBlit.dst_area.x1 = 0 + shiftDstX;
+ tile_src_area.x1 = 0 + shift_src_x;
+ tile_dest_area.x1 = 0 + shift_dest_x;
/* and advance start pointer + 1 tile size */
- tileBlit.src += LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR;
- tileBlit.dst += LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR;
+ tile_src_buf += LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR;
+ tile_dest_buf += LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR;
}
/* Clip tile end coordinates */
- tileBlit.src_area.x2 = totalWidth + blit->src_area.x1 - tileX * LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR - 1;
- if(tileBlit.src_area.x2 >= LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR) {
- tileBlit.src_area.x2 = LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR - 1;
+ tile_src_area.x2 = width + src_area->x1 - x * LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR - 1;
+ if(tile_src_area.x2 >= LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR) {
+ tile_src_area.x2 = LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR - 1;
}
- tileBlit.dst_area.x2 = totalWidth + blit->dst_area.x1 - tileX * LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR - 1;
- if(tileBlit.dst_area.x2 >= LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR) {
- tileBlit.dst_area.x2 = LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR - 1;
+ tile_dest_area.x2 = width + dest_area->x1 - x * LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR - 1;
+ if(tile_dest_area.x2 >= LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR) {
+ tile_dest_area.x2 = LV_GPU_NXP_VG_LITE_BLIT_SPLIT_THR - 1;
}
- if(tileX < (totalTilesX - 1)) {
- /* And adjust end coords if shifted, but not for last tile! */
- tileBlit.src_area.x2 += shiftSrcX;
- tileBlit.dst_area.x2 += shiftDstX;
+ if(x < (total_tiles_x - 1)) {
+ /* And adjust end coords if shifted, but not for last tile! */
+ tile_src_area.x2 += shift_src_x;
+ tile_dest_area.x2 += shift_dest_x;
}
- rv = _lv_gpu_nxp_vglite_blit_single(&tileBlit);
+ if(check_src_alignment(tile_src_buf, src_stride) != LV_RES_OK)
+ VG_LITE_RETURN_INV("Check src alignment failed.");
-#if BLIT_DBG_AREAS
- lv_vglite_dbg_draw_rectangle((lv_color_t *) tileBlit.dst, tileBlit.dst_width, tileBlit.dst_height, &tileBlit.dst_area,
- LV_COLOR_RED);
- lv_vglite_dbg_draw_rectangle((lv_color_t *) tileBlit.src, tileBlit.src_width, tileBlit.src_height, &tileBlit.src_area,
- LV_COLOR_GREEN);
-#endif
+ /* Set vgmatrix. */
+ lv_vglite_set_translation_matrix(&tile_dest_area);
- PRINT_BLT("Tile [%d, %d]: "
- "([%d,%d], [%d,%d]) -> "
- "([%d,%d], [%d,%d]) | "
- "([%dx%d] -> [%dx%d]) | "
- "A:(0x%8X -> 0x%8X) %s\n",
- tileX, tileY,
- tileBlit.src_area.x1, tileBlit.src_area.y1, tileBlit.src_area.x2, tileBlit.src_area.y2,
- tileBlit.dst_area.x1, tileBlit.dst_area.y1, tileBlit.dst_area.x2, tileBlit.dst_area.y2,
- lv_area_get_width(&tileBlit.src_area), lv_area_get_height(&tileBlit.src_area),
- lv_area_get_width(&tileBlit.dst_area), lv_area_get_height(&tileBlit.dst_area),
- (uintptr_t) tileBlit.src, (uintptr_t) tileBlit.dst,
- rv == LV_RES_OK ? "OK!" : "!!! FAILED !!!");
+ /* Set new dest_vgbuf and src_vgbuf memory addresses. */
+ lv_vglite_set_dest_buf_ptr(tile_dest_buf);
+ lv_vglite_set_src_buf_ptr(tile_src_buf);
- if(rv != LV_RES_OK) { /* if anything goes wrong... */
-#if LV_GPU_NXP_VG_LITE_LOG_ERRORS
- LV_LOG_ERROR("Split blit failed. Trying SW blit instead.");
-#endif
- _sw_blit(&tileBlit);
- rv = LV_RES_OK; /* Don't report error, as SW BLIT was performed */
+ rv = lv_vglite_blit_single(&tile_dest_area, &tile_src_area, opa);
+
+ VG_LITE_LOG_TRACE("Tile [%d, %d] "
+ "Area: ([%d,%d], [%d,%d]) -> ([%d,%d], [%d,%d]) | "
+ "Size: ([%dx%d] -> [%dx%d]) | "
+ "Addr: (0x%x -> 0x%x) %s",
+ x, y,
+ tile_src_area.x1, tile_src_area.y1, tile_src_area.x2, tile_src_area.y2,
+ tile_dest_area.x1, tile_dest_area.y1, tile_dest_area.x2, tile_dest_area.y2,
+ lv_area_get_width(&tile_src_area), lv_area_get_height(&tile_src_area),
+ lv_area_get_width(&tile_dest_area), lv_area_get_height(&tile_dest_area),
+ (uintptr_t)tile_src_buf, (uintptr_t)tile_dest_buf,
+ rv == LV_RES_OK ? "OK!" : "FAILED!");
+
+ if(rv != LV_RES_OK) {
+ return rv;
}
-
}
- PRINT_BLT(" \n");
}
- return rv; /* should never fail */
+ return rv;
}
#endif /* VG_LITE_BLIT_SPLIT_ENABLED */
-static lv_res_t _lv_gpu_nxp_vglite_blit_single(lv_gpu_nxp_vglite_blit_info_t * blit)
+static lv_res_t lv_vglite_blit_single(const lv_area_t * dest_area, const lv_area_t * src_area, lv_opa_t opa)
{
- vg_lite_buffer_t src_vgbuf, dst_vgbuf;
vg_lite_error_t err = VG_LITE_SUCCESS;
- uint32_t rect[4];
- vg_lite_float_t scale = 1.0;
+ vg_lite_buffer_t * dst_vgbuf = lv_vglite_get_dest_buf();
+ vg_lite_buffer_t * src_vgbuf = lv_vglite_get_src_buf();
- if(blit == NULL) {
- /*Wrong parameter*/
- return LV_RES_INV;
- }
-
- if(blit->opa < (lv_opa_t) LV_OPA_MIN) {
- return LV_RES_OK; /*Nothing to BLIT*/
- }
-
- /*Wrap src/dst buffer into VG-Lite buffer*/
- if(lv_vglite_init_buf(&src_vgbuf, (uint32_t)blit->src_width, (uint32_t)blit->src_height, (uint32_t)blit->src_stride,
- blit->src, true) != LV_RES_OK)
- VG_LITE_RETURN_INV("Init buffer failed.");
-
- if(lv_vglite_init_buf(&dst_vgbuf, (uint32_t)blit->dst_width, (uint32_t)blit->dst_height, (uint32_t)blit->dst_stride,
- blit->dst, false) != LV_RES_OK)
- VG_LITE_RETURN_INV("Init buffer failed.");
-
- rect[0] = (uint32_t)blit->src_area.x1; /* start x */
- rect[1] = (uint32_t)blit->src_area.y1; /* start y */
- rect[2] = (uint32_t)blit->src_area.x2 - (uint32_t)blit->src_area.x1 + 1U; /* width */
- rect[3] = (uint32_t)blit->src_area.y2 - (uint32_t)blit->src_area.y1 + 1U; /* height */
-
- vg_lite_matrix_t matrix;
- vg_lite_identity(&matrix);
- vg_lite_translate((vg_lite_float_t)blit->dst_area.x1, (vg_lite_float_t)blit->dst_area.y1, &matrix);
-
- if((blit->angle != 0) || (blit->zoom != LV_IMG_ZOOM_NONE)) {
- vg_lite_translate(blit->pivot.x, blit->pivot.y, &matrix);
- vg_lite_rotate(blit->angle / 10.0f, &matrix); /* angle is 1/10 degree */
- scale = 1.0f * blit->zoom / LV_IMG_ZOOM_NONE;
- vg_lite_scale(scale, scale, &matrix);
- vg_lite_translate(0.0f - blit->pivot.x, 0.0f - blit->pivot.y, &matrix);
- }
-
- /*Clean & invalidate cache*/
- lv_vglite_invalidate_cache();
+ uint32_t rect[] = {
+ (uint32_t)src_area->x1, /* start x */
+ (uint32_t)src_area->y1, /* start y */
+ (uint32_t)lv_area_get_width(src_area), /* width */
+ (uint32_t)lv_area_get_height(src_area) /* height */
+ };
uint32_t color;
vg_lite_blend_t blend;
- if(blit->opa >= (lv_opa_t)LV_OPA_MAX) {
+ if(opa >= (lv_opa_t)LV_OPA_MAX) {
color = 0xFFFFFFFFU;
blend = VG_LITE_BLEND_SRC_OVER;
- src_vgbuf.transparency_mode = VG_LITE_IMAGE_TRANSPARENT;
+ src_vgbuf->transparency_mode = VG_LITE_IMAGE_TRANSPARENT;
}
else {
- uint32_t opa = (uint32_t)blit->opa;
if(vg_lite_query_feature(gcFEATURE_BIT_VG_PE_PREMULTIPLY)) {
color = (opa << 24) | 0x00FFFFFFU;
}
@@ -498,94 +485,83 @@ static lv_res_t _lv_gpu_nxp_vglite_blit_single(lv_gpu_nxp_vglite_blit_info_t * b
color = (opa << 24) | (opa << 16) | (opa << 8) | opa;
}
blend = VG_LITE_BLEND_SRC_OVER;
- src_vgbuf.image_mode = VG_LITE_MULTIPLY_IMAGE_MODE;
- src_vgbuf.transparency_mode = VG_LITE_IMAGE_TRANSPARENT;
+ src_vgbuf->image_mode = VG_LITE_MULTIPLY_IMAGE_MODE;
+ src_vgbuf->transparency_mode = VG_LITE_IMAGE_TRANSPARENT;
}
- err = vg_lite_blit_rect(&dst_vgbuf, &src_vgbuf, rect, &matrix, blend, color, VG_LITE_FILTER_POINT);
- VG_LITE_ERR_RETURN_INV(err, "Blit rectangle failed.");
+ bool scissoring = lv_area_get_width(dest_area) < lv_area_get_width(src_area) ||
+ lv_area_get_height(dest_area) < lv_area_get_height(src_area);
+ if(scissoring) {
+ vg_lite_enable_scissor();
+ vg_lite_set_scissor((int32_t)dest_area->x1, (int32_t)dest_area->y1,
+ (int32_t)lv_area_get_width(dest_area),
+ (int32_t)lv_area_get_height(dest_area));
+ }
- err = vg_lite_finish();
- VG_LITE_ERR_RETURN_INV(err, "Finish failed.");
+ err = vg_lite_blit_rect(dst_vgbuf, src_vgbuf, rect, &vgmatrix, blend, color, VG_LITE_FILTER_POINT);
+ if(err != VG_LITE_SUCCESS) {
+ if(scissoring)
+ vg_lite_disable_scissor();
+ VG_LITE_RETURN_INV("Blit rectangle failed.");
+ }
+
+ if(lv_vglite_run() != LV_RES_OK) {
+ if(scissoring)
+ vg_lite_disable_scissor();
+ VG_LITE_RETURN_INV("Run failed.");
+ }
+
+ if(scissoring)
+ vg_lite_disable_scissor();
return LV_RES_OK;
}
+static lv_res_t check_src_alignment(const lv_color_t * src_buf, lv_coord_t src_stride)
+{
+ /* No alignment requirement for destination pixel buffer when using mode VG_LITE_LINEAR */
+
+ /* Test for pointer alignment */
+ if((((uintptr_t)src_buf) % (uintptr_t)LV_ATTRIBUTE_MEM_ALIGN_SIZE) != (uintptr_t)0x0U)
+ VG_LITE_RETURN_INV("Src buffer ptr (0x%x) not aligned to 0x%x bytes.",
+ (size_t)src_buf, LV_ATTRIBUTE_MEM_ALIGN_SIZE);
+
+ /* Test for stride alignment */
+ if((src_stride % (lv_coord_t)LV_GPU_NXP_VG_LITE_STRIDE_ALIGN_PX) != 0x0U)
+ VG_LITE_RETURN_INV("Src buffer stride (%d px) not aligned to %d px.",
+ src_stride, LV_GPU_NXP_VG_LITE_STRIDE_ALIGN_PX);
+ return LV_RES_OK;
+}
+
+static inline void lv_vglite_set_translation_matrix(const lv_area_t * dest_area)
+{
+ vg_lite_identity(&vgmatrix);
+ vg_lite_translate((vg_lite_float_t)dest_area->x1, (vg_lite_float_t)dest_area->y1, &vgmatrix);
+}
+
+static inline void lv_vglite_set_transformation_matrix(const lv_area_t * dest_area, const lv_draw_img_dsc_t * dsc)
+{
+ lv_vglite_set_translation_matrix(dest_area);
+
+ bool has_scale = (dsc->zoom != LV_IMG_ZOOM_NONE);
+ bool has_rotation = (dsc->angle != 0);
+
+ if(has_scale || has_rotation) {
+ vg_lite_translate(dsc->pivot.x, dsc->pivot.y, &vgmatrix);
+ if(has_rotation)
+ vg_lite_rotate(dsc->angle / 10.0f, &vgmatrix); /* angle is 1/10 degree */
+ if(has_scale) {
+ vg_lite_float_t scale = 1.0f * dsc->zoom / LV_IMG_ZOOM_NONE;
+ vg_lite_scale(scale, scale, &vgmatrix);
+ }
+ vg_lite_translate(0.0f - dsc->pivot.x, 0.0f - dsc->pivot.y, &vgmatrix);
+ }
+}
+
#if VG_LITE_BLIT_SPLIT_ENABLED
-
-static void _sw_blit(lv_gpu_nxp_vglite_blit_info_t * blit)
+static void align_x(lv_area_t * area, lv_color_t ** buf)
{
- int x, y;
-
- lv_coord_t w = lv_area_get_width(&blit->src_area);
- lv_coord_t h = lv_area_get_height(&blit->src_area);
-
- int32_t srcStridePx = blit->src_stride / (int32_t)sizeof(lv_color_t);
- int32_t dstStridePx = blit->dst_stride / (int32_t)sizeof(lv_color_t);
-
- lv_color_t * src = (lv_color_t *)blit->src + blit->src_area.y1 * srcStridePx + blit->src_area.x1;
- lv_color_t * dst = (lv_color_t *)blit->dst + blit->dst_area.y1 * dstStridePx + blit->dst_area.x1;
-
- if(blit->opa >= (lv_opa_t)LV_OPA_MAX) {
- /* simple copy */
- for(y = 0; y < h; y++) {
- lv_memcpy(dst, src, (uint32_t)w * sizeof(lv_color_t));
- src += srcStridePx;
- dst += dstStridePx;
- }
- }
- else if(blit->opa >= LV_OPA_MIN) {
- /* alpha blending */
- for(y = 0; y < h; y++) {
- for(x = 0; x < w; x++) {
- dst[x] = lv_color_mix(src[x], dst[x], blit->opa);
- }
- src += srcStridePx;
- dst += dstStridePx;
- }
- }
-}
-
-static lv_res_t _lv_gpu_nxp_vglite_check_blit(lv_gpu_nxp_vglite_blit_info_t * blit)
-{
-
- /* Test for minimal width */
- if(lv_area_get_width(&blit->src_area) < (lv_coord_t)LV_GPU_NXP_VG_LITE_STRIDE_ALIGN_PX)
- VG_LITE_RETURN_INV("Src area width (%d) is smaller than required (%d).", lv_area_get_width(&blit->src_area),
- LV_GPU_NXP_VG_LITE_STRIDE_ALIGN_PX);
-
- /* Test for minimal width */
- if(lv_area_get_width(&blit->dst_area) < (lv_coord_t)LV_GPU_NXP_VG_LITE_STRIDE_ALIGN_PX)
- VG_LITE_RETURN_INV("Dest area width (%d) is smaller than required (%d).", lv_area_get_width(&blit->dst_area),
- LV_GPU_NXP_VG_LITE_STRIDE_ALIGN_PX);
-
- /* Test for pointer alignment */
- if((((uintptr_t) blit->src) % LV_ATTRIBUTE_MEM_ALIGN_SIZE) != 0x0)
- VG_LITE_RETURN_INV("Src buffer ptr (0x%X) not aligned to %d.", (size_t) blit->src, LV_ATTRIBUTE_MEM_ALIGN_SIZE);
-
- /* No alignment requirement for destination pixel buffer when using mode VG_LITE_LINEAR */
-
- /* Test for stride alignment */
- if((blit->src_stride % (LV_GPU_NXP_VG_LITE_STRIDE_ALIGN_PX * LV_COLOR_DEPTH / 8)) != 0x0)
- VG_LITE_RETURN_INV("Src buffer stride (%d px) not aligned to %d px.", blit->src_stride,
- LV_GPU_NXP_VG_LITE_STRIDE_ALIGN_PX);
-
- /* Test for stride alignment */
- if((blit->dst_stride % (LV_GPU_NXP_VG_LITE_STRIDE_ALIGN_PX * LV_COLOR_DEPTH / 8)) != 0x0)
- VG_LITE_RETURN_INV("Dest buffer stride (%d px) not aligned to %d px.", blit->dst_stride,
- LV_GPU_NXP_VG_LITE_STRIDE_ALIGN_PX);
-
- if((lv_area_get_width(&blit->src_area) != lv_area_get_width(&blit->dst_area)) ||
- (lv_area_get_height(&blit->src_area) != lv_area_get_height(&blit->dst_area)))
- VG_LITE_RETURN_INV("Src and dest buffer areas are not equal.");
-
- return LV_RES_OK;
-}
-
-static void _align_x(lv_area_t * area, lv_color_t ** buf)
-{
-
- int alignedAreaStartPx = area->x1 - (area->x1 % (LV_ATTRIBUTE_MEM_ALIGN_SIZE * 8 / LV_COLOR_DEPTH));
+ int alignedAreaStartPx = area->x1 - (area->x1 % (LV_ATTRIBUTE_MEM_ALIGN_SIZE / sizeof(lv_color_t)));
VG_LITE_COND_STOP(alignedAreaStartPx < 0, "Negative X alignment.");
area->x1 -= alignedAreaStartPx;
@@ -593,17 +569,17 @@ static void _align_x(lv_area_t * area, lv_color_t ** buf)
*buf += alignedAreaStartPx;
}
-static void _align_y(lv_area_t * area, lv_color_t ** buf, uint32_t stridePx)
+static void align_y(lv_area_t * area, lv_color_t ** buf, lv_coord_t stride)
{
int LineToAlignMem;
int alignedAreaStartPy;
/* find how many lines of pixels will respect memory alignment requirement */
- if(stridePx % (uint32_t)LV_ATTRIBUTE_MEM_ALIGN_SIZE == 0U) {
+ if((stride % (lv_coord_t)LV_ATTRIBUTE_MEM_ALIGN_SIZE) == 0x0U) {
alignedAreaStartPy = area->y1;
}
else {
- LineToAlignMem = LV_ATTRIBUTE_MEM_ALIGN_SIZE / (sizeof(lv_color_t) * LV_GPU_NXP_VG_LITE_STRIDE_ALIGN_PX);
- VG_LITE_COND_STOP(LV_ATTRIBUTE_MEM_ALIGN_SIZE % (sizeof(lv_color_t) * LV_GPU_NXP_VG_LITE_STRIDE_ALIGN_PX),
+ LineToAlignMem = LV_ATTRIBUTE_MEM_ALIGN_SIZE / (LV_GPU_NXP_VG_LITE_STRIDE_ALIGN_PX * sizeof(lv_color_t));
+ VG_LITE_COND_STOP(LV_ATTRIBUTE_MEM_ALIGN_SIZE % (LV_GPU_NXP_VG_LITE_STRIDE_ALIGN_PX * sizeof(lv_color_t)),
"Complex case: need gcd function.");
alignedAreaStartPy = area->y1 - (area->y1 % LineToAlignMem);
VG_LITE_COND_STOP(alignedAreaStartPy < 0, "Negative Y alignment.");
@@ -611,7 +587,7 @@ static void _align_y(lv_area_t * area, lv_color_t ** buf, uint32_t stridePx)
area->y1 -= alignedAreaStartPy;
area->y2 -= alignedAreaStartPy;
- *buf += (uint32_t)alignedAreaStartPy * stridePx;
+ *buf += (uint32_t)(alignedAreaStartPy * stride);
}
#endif /*VG_LITE_BLIT_SPLIT_ENABLED*/
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_blend.h b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_blend.h
index bc448c65a..025d2b5cc 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_blend.h
+++ b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_blend.h
@@ -6,7 +6,7 @@
/**
* MIT License
*
- * Copyright 2020-2022 NXP
+ * Copyright 2020-2023 NXP
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -41,64 +41,16 @@ extern "C" {
#include "../../../lv_conf_internal.h"
#if LV_USE_GPU_NXP_VG_LITE
-#include "lv_gpu_nxp_vglite.h"
+#include "lv_vglite_utils.h"
/*********************
* DEFINES
*********************/
-#ifndef LV_GPU_NXP_VG_LITE_FILL_SIZE_LIMIT
-/** Minimum area (in pixels) to be filled by VG-Lite with 100% opacity*/
-#define LV_GPU_NXP_VG_LITE_FILL_SIZE_LIMIT 5000
-#endif
-
-#ifndef LV_GPU_NXP_VG_LITE_FILL_OPA_SIZE_LIMIT
-/** Minimum area (in pixels) to be filled by VG-Lite with transparency*/
-#define LV_GPU_NXP_VG_LITE_FILL_OPA_SIZE_LIMIT 5000
-#endif
-
-#ifndef LV_GPU_NXP_VG_LITE_BLIT_SIZE_LIMIT
-/** Minimum area (in pixels) for image copy with 100% opacity to be handled by VG-Lite*/
-#define LV_GPU_NXP_VG_LITE_BLIT_SIZE_LIMIT 5000
-#endif
-
-#ifndef LV_GPU_NXP_VG_LITE_BUFF_SYNC_BLIT_SIZE_LIMIT
-/** Minimum invalidated area (in pixels) to be synchronized by VG-Lite during buffer sync */
-#define LV_GPU_NXP_VG_LITE_BUFF_SYNC_BLIT_SIZE_LIMIT 5000
-#endif
-
-#ifndef LV_GPU_NXP_VG_LITE_BLIT_OPA_SIZE_LIMIT
-/** Minimum area (in pixels) for image copy with transparency to be handled by VG-Lite*/
-#define LV_GPU_NXP_VG_LITE_BLIT_OPA_SIZE_LIMIT 5000
-#endif
-
/**********************
* TYPEDEFS
**********************/
-/**
- * BLock Image Transfer descriptor structure
- */
-typedef struct {
-
- const lv_color_t * src; /**< Source buffer pointer (must be aligned on 32 bytes)*/
- lv_area_t src_area; /**< Area to be copied from source*/
- lv_coord_t src_width; /**< Source buffer width*/
- lv_coord_t src_height; /**< Source buffer height*/
- int32_t src_stride; /**< Source buffer stride in bytes (must be aligned on 16 px)*/
-
- const lv_color_t * dst; /**< Destination buffer pointer (must be aligned on 32 bytes)*/
- lv_area_t dst_area; /**< Target area in destination buffer (must be the same as src_area)*/
- lv_coord_t dst_width; /**< Destination buffer width*/
- lv_coord_t dst_height; /**< Destination buffer height*/
- int32_t dst_stride; /**< Destination buffer stride in bytes (must be aligned on 16 px)*/
-
- lv_opa_t opa; /**< Opacity - alpha mix (0 = source not copied, 255 = 100% opaque)*/
- uint32_t angle; /**< Rotation angle (1/10 of degree)*/
- uint32_t zoom; /**< 256 = no zoom (1:1 scale ratio)*/
- lv_point_t pivot; /**< The coordinates of rotation pivot in source image buffer*/
-} lv_gpu_nxp_vglite_blit_info_t;
-
/**********************
* GLOBAL PROTOTYPES
**********************/
@@ -106,35 +58,52 @@ typedef struct {
/**
* Fill area, with optional opacity.
*
- * @param[in/out] dest_buf Destination buffer pointer (must be aligned on 32 bytes)
- * @param[in] dest_width Destination buffer width in pixels (must be aligned on 16 px)
- * @param[in] dest_height Destination buffer height in pixels
- * @param[in] fill_area Area to be filled
- * @param[in] color Fill color
+ * @param[in] dest_area Area with relative coordinates of destination buffer
+ * @param[in] color Color
* @param[in] opa Opacity (255 = full, 128 = 50% background/50% color, 0 = no fill)
+ *
* @retval LV_RES_OK Fill completed
* @retval LV_RES_INV Error occurred (\see LV_GPU_NXP_VG_LITE_LOG_ERRORS)
*/
-lv_res_t lv_gpu_nxp_vglite_fill(lv_color_t * dest_buf, lv_coord_t dest_width, lv_coord_t dest_height,
- const lv_area_t * fill_area, lv_color_t color, lv_opa_t opa);
+lv_res_t lv_gpu_nxp_vglite_fill(const lv_area_t * dest_area, lv_color_t color, lv_opa_t opa);
/**
- * BLock Image Transfer.
+ * BLock Image Transfer - copy rectangular image from src_buf to dst_buf with effects.
+ * By default, image is copied directly, with optional opacity.
+ *
+ * @param[in/out] dest_buf Destination buffer
+ * @param[in] dest_area Area with relative coordinates of destination buffer
+ * @param[in] dest_stride Stride of destination buffer in pixels
+ * @param[in] src_buf Source buffer
+ * @param[in] src_area Source area with relative coordinates of source buffer
+ * @param[in] src_stride Stride of source buffer in pixels
+ * @param[in] opa Opacity
*
- * @param[in] blit Description of the transfer
* @retval LV_RES_OK Transfer complete
* @retval LV_RES_INV Error occurred (\see LV_GPU_NXP_VG_LITE_LOG_ERRORS)
*/
-lv_res_t lv_gpu_nxp_vglite_blit(lv_gpu_nxp_vglite_blit_info_t * blit);
+lv_res_t lv_gpu_nxp_vglite_blit(lv_color_t * dest_buf, lv_area_t * dest_area, lv_coord_t dest_stride,
+ const lv_color_t * src_buf, lv_area_t * src_area, lv_coord_t src_stride,
+ lv_opa_t opa);
/**
- * BLock Image Transfer with transformation.
+ * BLock Image Transfer - copy rectangular image from src_buf to dst_buf with transformation.
+ * By default, image is copied directly, with optional opacity.
+ *
+ * @param[in/out] dest_buf Destination buffer
+ * @param[in] dest_area Area with relative coordinates of destination buffer
+ * @param[in] dest_stride Stride of destination buffer in pixels
+ * @param[in] src_buf Source buffer
+ * @param[in] src_area Source area with relative coordinates of source buffer
+ * @param[in] src_stride Stride of source buffer in pixels
+ * @param[in] dsc Image descriptor
*
- * @param[in] blit Description of the transfer
* @retval LV_RES_OK Transfer complete
* @retval LV_RES_INV Error occurred (\see LV_GPU_NXP_VG_LITE_LOG_ERRORS)
*/
-lv_res_t lv_gpu_nxp_vglite_blit_transform(lv_gpu_nxp_vglite_blit_info_t * blit);
+lv_res_t lv_gpu_nxp_vglite_blit_transform(lv_color_t * dest_buf, lv_area_t * dest_area, lv_coord_t dest_stride,
+ const lv_color_t * src_buf, lv_area_t * src_area, lv_coord_t src_stride,
+ const lv_draw_img_dsc_t * dsc);
/**********************
* MACROS
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_line.c b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_line.c
new file mode 100644
index 000000000..f6e1c4352
--- /dev/null
+++ b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_line.c
@@ -0,0 +1,138 @@
+/**
+ * @file lv_draw_vglite_line.c
+ *
+ */
+
+/**
+ * MIT License
+ *
+ * Copyright 2022, 2023 NXP
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ * the Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next paragraph)
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+ * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+ * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+/*********************
+ * INCLUDES
+ *********************/
+
+#include "lv_draw_vglite_line.h"
+
+#if LV_USE_GPU_NXP_VG_LITE
+#include "lv_vglite_buf.h"
+#include
+
+/*********************
+ * DEFINES
+ *********************/
+
+/**********************
+ * TYPEDEFS
+ **********************/
+
+/**********************
+ * STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ * STATIC VARIABLES
+ **********************/
+
+/**********************
+ * MACROS
+ **********************/
+
+/**********************
+ * GLOBAL FUNCTIONS
+ **********************/
+
+lv_res_t lv_gpu_nxp_vglite_draw_line(const lv_point_t * point1, const lv_point_t * point2,
+ const lv_area_t * clip_area, const lv_draw_line_dsc_t * dsc)
+{
+ vg_lite_error_t err = VG_LITE_SUCCESS;
+ vg_lite_path_t path;
+ vg_lite_color_t vgcol; /* vglite takes ABGR */
+ vg_lite_buffer_t * vgbuf = lv_vglite_get_dest_buf();
+ vg_lite_cap_style_t cap_style = (dsc->round_start || dsc->round_end) ? VG_LITE_CAP_ROUND : VG_LITE_CAP_BUTT;
+ vg_lite_join_style_t join_style = (dsc->round_start || dsc->round_end) ? VG_LITE_JOIN_ROUND : VG_LITE_JOIN_MITER;
+
+ bool is_dashed = (dsc->dash_width && dsc->dash_gap);
+
+ vg_lite_float_t stroke_dash_pattern[2] = {0, 0};
+ uint32_t stroke_dash_count = 0;
+ vg_lite_float_t stroke_dash_phase = 0;
+ if(is_dashed) {
+ stroke_dash_pattern[0] = (vg_lite_float_t)dsc->dash_width;
+ stroke_dash_pattern[1] = (vg_lite_float_t)dsc->dash_gap;
+ stroke_dash_count = sizeof(stroke_dash_pattern) / sizeof(vg_lite_float_t);
+ stroke_dash_phase = (vg_lite_float_t)dsc->dash_width / 2;
+ }
+
+ /* Choose vglite blend mode based on given lvgl blend mode */
+ vg_lite_blend_t vglite_blend_mode = lv_vglite_get_blend_mode(dsc->blend_mode);
+
+ /*** Init path ***/
+ lv_coord_t width = dsc->width;
+
+ int32_t line_path[] = { /*VG line path*/
+ VLC_OP_MOVE, point1->x, point1->y,
+ VLC_OP_LINE, point2->x, point2->y,
+ VLC_OP_END
+ };
+
+ err = vg_lite_init_path(&path, VG_LITE_S32, VG_LITE_HIGH, sizeof(line_path), line_path,
+ (vg_lite_float_t)clip_area->x1, (vg_lite_float_t)clip_area->y1,
+ ((vg_lite_float_t)clip_area->x2) + 1.0f, ((vg_lite_float_t)clip_area->y2) + 1.0f);
+ VG_LITE_ERR_RETURN_INV(err, "Init path failed.");
+
+ vg_lite_matrix_t matrix;
+ vg_lite_identity(&matrix);
+
+ lv_color32_t col32 = { .full = lv_color_to32(dsc->color) }; /*Convert color to RGBA8888*/
+ vg_lite_buffer_format_t color_format = LV_COLOR_DEPTH == 16 ? VG_LITE_BGRA8888 : VG_LITE_ABGR8888;
+ if(lv_vglite_premult_and_swizzle(&vgcol, col32, dsc->opa, color_format) != LV_RES_OK)
+ VG_LITE_RETURN_INV("Premultiplication and swizzle failed.");
+
+ /*** Draw line ***/
+ err = vg_lite_set_draw_path_type(&path, VG_LITE_DRAW_STROKE_PATH);
+ VG_LITE_ERR_RETURN_INV(err, "Set draw path type failed.");
+
+ err = vg_lite_set_stroke(&path, cap_style, join_style, width, 8, stroke_dash_pattern, stroke_dash_count,
+ stroke_dash_phase, vgcol);
+ VG_LITE_ERR_RETURN_INV(err, "Set stroke failed.");
+
+ err = vg_lite_update_stroke(&path);
+ VG_LITE_ERR_RETURN_INV(err, "Update stroke failed.");
+
+ err = vg_lite_draw(vgbuf, &path, VG_LITE_FILL_NON_ZERO, &matrix, vglite_blend_mode, vgcol);
+ VG_LITE_ERR_RETURN_INV(err, "Draw line failed.");
+
+ if(lv_vglite_run() != LV_RES_OK)
+ VG_LITE_RETURN_INV("Run failed.");
+
+ err = vg_lite_clear_path(&path);
+ VG_LITE_ERR_RETURN_INV(err, "Clear path failed.");
+
+ return LV_RES_OK;
+}
+
+/**********************
+ * STATIC FUNCTIONS
+ **********************/
+
+#endif /*LV_USE_GPU_NXP_VG_LITE*/
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_line.h b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_line.h
new file mode 100644
index 000000000..cbd4b95ec
--- /dev/null
+++ b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_line.h
@@ -0,0 +1,83 @@
+/**
+ * @file lv_draw_vglite_line.h
+ *
+ */
+
+/**
+ * MIT License
+ *
+ * Copyright 2022, 2023 NXP
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ * the Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next paragraph)
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+ * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+ * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#ifndef LV_DRAW_VGLITE_LINE_H
+#define LV_DRAW_VGLITE_LINE_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*********************
+ * INCLUDES
+ *********************/
+#include "../../../lv_conf_internal.h"
+
+#if LV_USE_GPU_NXP_VG_LITE
+#include "lv_vglite_utils.h"
+#include "../../lv_draw_line.h"
+
+/*********************
+ * DEFINES
+ *********************/
+
+/**********************
+ * TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+
+/**
+ * Draw line shape with effects
+ *
+ * @param[in] point1 Starting point with relative coordinates
+ * @param[in] point2 Ending point with relative coordinates
+ * @param[in] clip_area Clipping area with relative coordinates to dest buff
+ * @param[in] dsc Line description structure (width, rounded ending, opacity, ...)
+ *
+ * @retval LV_RES_OK Draw completed
+ * @retval LV_RES_INV Error occurred (\see LV_GPU_NXP_VG_LITE_LOG_ERRORS)
+ */
+lv_res_t lv_gpu_nxp_vglite_draw_line(const lv_point_t * point1, const lv_point_t * point2,
+ const lv_area_t * clip_area, const lv_draw_line_dsc_t * dsc);
+
+/**********************
+ * MACROS
+ **********************/
+
+#endif /*LV_USE_GPU_NXP_VG_LITE*/
+
+#ifdef __cplusplus
+} /*extern "C"*/
+#endif
+
+#endif /*LV_DRAW_VGLITE_RECT_H*/
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_rect.c b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_rect.c
index bc1d55c85..39ccaa481 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_rect.c
+++ b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_rect.c
@@ -6,7 +6,7 @@
/**
* MIT License
*
- * Copyright 2021, 2022 NXP
+ * Copyright 2021-2023 NXP
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -34,10 +34,28 @@
#include "lv_draw_vglite_rect.h"
#if LV_USE_GPU_NXP_VG_LITE
+#include "lv_vglite_buf.h"
+#include
/*********************
* DEFINES
*********************/
+/*********************
+ * DEFINES
+ *********************/
+
+/* Path data sizes for different elements */
+#define CUBIC_PATH_DATA_SIZE 7 /* 1 opcode, 6 arguments */
+#define LINE_PATH_DATA_SIZE 3 /* 1 opcode, 2 arguments */
+#define MOVE_PATH_DATA_SIZE 3 /* 1 opcode, 2 arguments */
+#define END_PATH_DATA_SIZE 1 /* 1 opcode, 0 arguments */
+/* Maximum possible rectangle path size
+ * is in the rounded rectangle case:
+ * - 1 move for the path start
+ * - 4 cubics for the corners
+ * - 4 lines for the sides
+ * - 1 end for the path end */
+#define RECT_PATH_DATA_MAX_SIZE 1 * MOVE_PATH_DATA_SIZE + 4 * CUBIC_PATH_DATA_SIZE + 4 * LINE_PATH_DATA_SIZE + 1 * END_PATH_DATA_SIZE
/**********************
* TYPEDEFS
@@ -47,6 +65,18 @@
* STATIC PROTOTYPES
**********************/
+/**
+ * Generates path data for rectangle drawing.
+ *
+ * @param[in/out] path The path data to initialize
+ * @param[in/out] path_size The resulting size of the created path data
+ * @param[in] dsc The style descriptor for the rectangle to be drawn
+ * @param[in] coords The coordinates of the rectangle to be drawn
+ */
+static void lv_vglite_create_rect_path_data(int32_t * path_data, uint32_t * path_data_size,
+ lv_coord_t radius,
+ const lv_area_t * coords);
+
/**********************
* STATIC VARIABLES
**********************/
@@ -59,94 +89,37 @@
* GLOBAL FUNCTIONS
**********************/
-lv_res_t lv_gpu_nxp_vglite_draw_bg(lv_draw_ctx_t * draw_ctx, const lv_draw_rect_dsc_t * dsc, const lv_area_t * coords)
+lv_res_t lv_gpu_nxp_vglite_draw_bg(const lv_area_t * coords, const lv_area_t * clip_area,
+ const lv_draw_rect_dsc_t * dsc)
{
- vg_lite_buffer_t vgbuf;
vg_lite_error_t err = VG_LITE_SUCCESS;
- lv_coord_t dest_width = lv_area_get_width(draw_ctx->buf_area);
- lv_coord_t dest_height = lv_area_get_height(draw_ctx->buf_area);
- vg_lite_path_t path;
- vg_lite_color_t vgcol; /* vglite takes ABGR */
- vg_lite_matrix_t matrix;
lv_coord_t width = lv_area_get_width(coords);
lv_coord_t height = lv_area_get_height(coords);
- vg_lite_linear_gradient_t gradient;
- vg_lite_matrix_t * grad_matrix;
+ vg_lite_color_t vgcol;
+ lv_coord_t radius = dsc->radius;
+ vg_lite_buffer_t * vgbuf = lv_vglite_get_dest_buf();
if(dsc->radius < 0)
return LV_RES_INV;
- /* Make areas relative to draw buffer */
- lv_area_t rel_coords;
- lv_area_copy(&rel_coords, coords);
- lv_area_move(&rel_coords, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
-
- lv_area_t rel_clip;
- lv_area_copy(&rel_clip, draw_ctx->clip_area);
- lv_area_move(&rel_clip, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
-
- /*** Init destination buffer ***/
- if(lv_vglite_init_buf(&vgbuf, (uint32_t)dest_width, (uint32_t)dest_height, (uint32_t)dest_width * sizeof(lv_color_t),
- (const lv_color_t *)draw_ctx->buf, false) != LV_RES_OK)
- VG_LITE_RETURN_INV("Init buffer failed.");
-
/*** Init path ***/
- int32_t rad = dsc->radius;
- if(dsc->radius == LV_RADIUS_CIRCLE) {
- rad = (width > height) ? height / 2 : width / 2;
- }
-
- if((dsc->radius == LV_RADIUS_CIRCLE) && (width == height)) {
- float tang = ((float)rad * BEZIER_OPTIM_CIRCLE);
- int32_t cpoff = (int32_t)tang;
- int32_t circle_path[] = { /*VG circle path*/
- VLC_OP_MOVE, rel_coords.x1 + rad, rel_coords.y1,
- VLC_OP_CUBIC_REL, cpoff, 0, rad, rad - cpoff, rad, rad, /* top-right */
- VLC_OP_CUBIC_REL, 0, cpoff, cpoff - rad, rad, 0 - rad, rad, /* bottom-right */
- VLC_OP_CUBIC_REL, 0 - cpoff, 0, 0 - rad, cpoff - rad, 0 - rad, 0 - rad, /* bottom-left */
- VLC_OP_CUBIC_REL, 0, 0 - cpoff, rad - cpoff, 0 - rad, rad, 0 - rad, /* top-left */
- VLC_OP_END
- };
- err = vg_lite_init_path(&path, VG_LITE_S32, VG_LITE_HIGH, sizeof(circle_path), circle_path,
- (vg_lite_float_t) rel_clip.x1, (vg_lite_float_t) rel_clip.y1,
- ((vg_lite_float_t) rel_clip.x2) + 1.0f, ((vg_lite_float_t) rel_clip.y2) + 1.0f);
- }
- else if(dsc->radius > 0) {
- float tang = ((float)rad * BEZIER_OPTIM_CIRCLE);
- int32_t cpoff = (int32_t)tang;
- int32_t rounded_path[] = { /*VG rounded rectangular path*/
- VLC_OP_MOVE, rel_coords.x1 + rad, rel_coords.y1,
- VLC_OP_LINE, rel_coords.x2 - rad + 1, rel_coords.y1, /* top */
- VLC_OP_CUBIC_REL, cpoff, 0, rad, rad - cpoff, rad, rad, /* top-right */
- VLC_OP_LINE, rel_coords.x2 + 1, rel_coords.y2 - rad + 1, /* right */
- VLC_OP_CUBIC_REL, 0, cpoff, cpoff - rad, rad, 0 - rad, rad, /* bottom-right */
- VLC_OP_LINE, rel_coords.x1 + rad, rel_coords.y2 + 1, /* bottom */
- VLC_OP_CUBIC_REL, 0 - cpoff, 0, 0 - rad, cpoff - rad, 0 - rad, 0 - rad, /* bottom-left */
- VLC_OP_LINE, rel_coords.x1, rel_coords.y1 + rad, /* left */
- VLC_OP_CUBIC_REL, 0, 0 - cpoff, rad - cpoff, 0 - rad, rad, 0 - rad, /* top-left */
- VLC_OP_END
- };
- err = vg_lite_init_path(&path, VG_LITE_S32, VG_LITE_HIGH, sizeof(rounded_path), rounded_path,
- (vg_lite_float_t) rel_clip.x1, (vg_lite_float_t) rel_clip.y1,
- ((vg_lite_float_t) rel_clip.x2) + 1.0f, ((vg_lite_float_t) rel_clip.y2) + 1.0f);
- }
- else {
- int32_t rect_path[] = { /*VG rectangular path*/
- VLC_OP_MOVE, rel_coords.x1, rel_coords.y1,
- VLC_OP_LINE, rel_coords.x2 + 1, rel_coords.y1,
- VLC_OP_LINE, rel_coords.x2 + 1, rel_coords.y2 + 1,
- VLC_OP_LINE, rel_coords.x1, rel_coords.y2 + 1,
- VLC_OP_LINE, rel_coords.x1, rel_coords.y1,
- VLC_OP_END
- };
- err = vg_lite_init_path(&path, VG_LITE_S32, VG_LITE_LOW, sizeof(rect_path), rect_path,
- (vg_lite_float_t) rel_clip.x1, (vg_lite_float_t) rel_clip.y1,
- ((vg_lite_float_t) rel_clip.x2) + 1.0f, ((vg_lite_float_t) rel_clip.y2) + 1.0f);
- }
+ int32_t path_data[RECT_PATH_DATA_MAX_SIZE];
+ uint32_t path_data_size;
+ lv_vglite_create_rect_path_data(path_data, &path_data_size, radius, coords);
+ vg_lite_quality_t path_quality = dsc->radius > 0 ? VG_LITE_HIGH : VG_LITE_LOW;
+ vg_lite_path_t path;
+ err = vg_lite_init_path(&path, VG_LITE_S32, path_quality, path_data_size, path_data,
+ (vg_lite_float_t)clip_area->x1, (vg_lite_float_t)clip_area->y1,
+ ((vg_lite_float_t)clip_area->x2) + 1.0f, ((vg_lite_float_t)clip_area->y2) + 1.0f);
VG_LITE_ERR_RETURN_INV(err, "Init path failed.");
+
+ vg_lite_matrix_t matrix;
vg_lite_identity(&matrix);
+ vg_lite_matrix_t * grad_matrix;
+ vg_lite_linear_gradient_t gradient;
+
/*** Init Color/Gradient ***/
if(dsc->bg_grad.dir != (lv_grad_dir_t)LV_GRAD_DIR_NONE) {
uint32_t colors[2];
@@ -154,18 +127,14 @@ lv_res_t lv_gpu_nxp_vglite_draw_bg(lv_draw_ctx_t * draw_ctx, const lv_draw_rect_
lv_color32_t col32[2];
/* Gradient setup */
- uint8_t cnt = MAX(dsc->bg_grad.stops_count, 2);
+ uint8_t cnt = LV_MAX(dsc->bg_grad.stops_count, 2);
for(uint8_t i = 0; i < cnt; i++) {
col32[i].full = lv_color_to32(dsc->bg_grad.stops[i].color); /*Convert color to RGBA8888*/
stops[i] = dsc->bg_grad.stops[i].frac;
-#if LV_COLOR_DEPTH==16
- colors[i] = ((uint32_t)col32[i].ch.alpha << 24) | ((uint32_t)col32[i].ch.blue << 16) |
- ((uint32_t)col32[i].ch.green << 8) | (uint32_t)col32[i].ch.red;
-#else /*LV_COLOR_DEPTH==32*/
- /* watchout: red and blue color components are inverted versus vg_lite_color_t order */
- colors[i] = ((uint32_t)col32[i].ch.alpha << 24) | ((uint32_t)col32[i].ch.red << 16) |
- ((uint32_t)col32[i].ch.green << 8) | (uint32_t)col32[i].ch.blue;
-#endif
+
+ vg_lite_buffer_format_t color_format = LV_COLOR_DEPTH == 16 ? VG_LITE_ABGR8888 : VG_LITE_ARGB8888;
+ if(lv_vglite_premult_and_swizzle(&colors[i], col32[i], dsc->bg_opa, color_format) != LV_RES_OK)
+ VG_LITE_RETURN_INV("Premultiplication and swizzle failed.");
}
lv_memset_00(&gradient, sizeof(vg_lite_linear_gradient_t));
@@ -181,7 +150,7 @@ lv_res_t lv_gpu_nxp_vglite_draw_bg(lv_draw_ctx_t * draw_ctx, const lv_draw_rect_
grad_matrix = vg_lite_get_grad_matrix(&gradient);
vg_lite_identity(grad_matrix);
- vg_lite_translate((float)rel_coords.x1, (float)rel_coords.y1, grad_matrix);
+ vg_lite_translate((float)coords->x1, (float)coords->y1, grad_matrix);
if(dsc->bg_grad.dir == (lv_grad_dir_t)LV_GRAD_DIR_VER) {
vg_lite_scale(1.0f, (float)height / 256.0f, grad_matrix);
@@ -192,39 +161,22 @@ lv_res_t lv_gpu_nxp_vglite_draw_bg(lv_draw_ctx_t * draw_ctx, const lv_draw_rect_
}
}
- lv_opa_t bg_opa = dsc->bg_opa;
lv_color32_t bg_col32 = {.full = lv_color_to32(dsc->bg_color)}; /*Convert color to RGBA8888*/
- if(bg_opa <= (lv_opa_t)LV_OPA_MAX) {
- /* Only pre-multiply color if hardware pre-multiplication is not present */
- if(!vg_lite_query_feature(gcFEATURE_BIT_VG_PE_PREMULTIPLY)) {
- bg_col32.ch.red = (uint8_t)(((uint16_t)bg_col32.ch.red * bg_opa) >> 8);
- bg_col32.ch.green = (uint8_t)(((uint16_t)bg_col32.ch.green * bg_opa) >> 8);
- bg_col32.ch.blue = (uint8_t)(((uint16_t)bg_col32.ch.blue * bg_opa) >> 8);
- }
- bg_col32.ch.alpha = bg_opa;
- }
-
-#if LV_COLOR_DEPTH==16
- vgcol = bg_col32.full;
-#else /*LV_COLOR_DEPTH==32*/
- vgcol = ((uint32_t)bg_col32.ch.alpha << 24) | ((uint32_t)bg_col32.ch.blue << 16) |
- ((uint32_t)bg_col32.ch.green << 8) | (uint32_t)bg_col32.ch.red;
-#endif
-
- /*Clean & invalidate cache*/
- lv_vglite_invalidate_cache();
+ vg_lite_buffer_format_t color_format = LV_COLOR_DEPTH == 16 ? VG_LITE_BGRA8888 : VG_LITE_ABGR8888;
+ if(lv_vglite_premult_and_swizzle(&vgcol, bg_col32, dsc->bg_opa, color_format) != LV_RES_OK)
+ VG_LITE_RETURN_INV("Premultiplication and swizzle failed.");
/*** Draw rectangle ***/
if(dsc->bg_grad.dir == (lv_grad_dir_t)LV_GRAD_DIR_NONE) {
- err = vg_lite_draw(&vgbuf, &path, VG_LITE_FILL_EVEN_ODD, &matrix, VG_LITE_BLEND_SRC_OVER, vgcol);
+ err = vg_lite_draw(vgbuf, &path, VG_LITE_FILL_EVEN_ODD, &matrix, VG_LITE_BLEND_SRC_OVER, vgcol);
}
else {
- err = vg_lite_draw_gradient(&vgbuf, &path, VG_LITE_FILL_EVEN_ODD, &matrix, &gradient, VG_LITE_BLEND_SRC_OVER);
+ err = vg_lite_draw_gradient(vgbuf, &path, VG_LITE_FILL_EVEN_ODD, &matrix, &gradient, VG_LITE_BLEND_SRC_OVER);
}
VG_LITE_ERR_RETURN_INV(err, "Draw gradient failed.");
- err = vg_lite_finish();
- VG_LITE_ERR_RETURN_INV(err, "Finish failed.");
+ if(lv_vglite_run() != LV_RES_OK)
+ VG_LITE_RETURN_INV("Run failed.");
err = vg_lite_clear_path(&path);
VG_LITE_ERR_RETURN_INV(err, "Clear path failed.");
@@ -237,6 +189,261 @@ lv_res_t lv_gpu_nxp_vglite_draw_bg(lv_draw_ctx_t * draw_ctx, const lv_draw_rect_
return LV_RES_OK;
}
+lv_res_t lv_gpu_nxp_vglite_draw_border_generic(const lv_area_t * coords, const lv_area_t * clip_area,
+ const lv_draw_rect_dsc_t * dsc, bool border)
+{
+ vg_lite_error_t err = VG_LITE_SUCCESS;
+ vg_lite_color_t vgcol; /* vglite takes ABGR */
+ lv_coord_t radius = dsc->radius;
+ vg_lite_buffer_t * vgbuf = lv_vglite_get_dest_buf();
+
+ if(radius < 0)
+ return LV_RES_INV;
+
+ if(border) {
+ /* Draw border - only has radius if object has radius*/
+ lv_coord_t border_half = (lv_coord_t)floor(dsc->border_width / 2.0f);
+ if(radius > border_half)
+ radius = radius - border_half;
+ }
+ else {
+ /* Draw outline - always has radius, leave the same radius in the circle case */
+ lv_coord_t outline_half = (lv_coord_t)ceil(dsc->outline_width / 2.0f);
+ if(radius < (lv_coord_t)LV_RADIUS_CIRCLE - outline_half)
+ radius = radius + outline_half;
+ }
+
+ vg_lite_cap_style_t cap_style = (radius) ? VG_LITE_CAP_ROUND : VG_LITE_CAP_BUTT;
+ vg_lite_join_style_t join_style = (radius) ? VG_LITE_JOIN_ROUND : VG_LITE_JOIN_MITER;
+
+ /* Choose vglite blend mode based on given lvgl blend mode */
+ vg_lite_blend_t vglite_blend_mode = lv_vglite_get_blend_mode(dsc->blend_mode);
+
+ /*** Init path ***/
+ int32_t path_data[RECT_PATH_DATA_MAX_SIZE];
+ uint32_t path_data_size;
+ lv_vglite_create_rect_path_data(path_data, &path_data_size, radius, coords);
+ vg_lite_quality_t path_quality = dsc->radius > 0 ? VG_LITE_HIGH : VG_LITE_LOW;
+
+ vg_lite_path_t path;
+ err = vg_lite_init_path(&path, VG_LITE_S32, path_quality, path_data_size, path_data,
+ (vg_lite_float_t)clip_area->x1, (vg_lite_float_t)clip_area->y1,
+ ((vg_lite_float_t)clip_area->x2) + 1.0f, ((vg_lite_float_t)clip_area->y2) + 1.0f);
+ VG_LITE_ERR_RETURN_INV(err, "Init path failed.");
+
+ vg_lite_matrix_t matrix;
+ vg_lite_identity(&matrix);
+
+ lv_opa_t opa;
+ lv_color32_t col32;
+ lv_coord_t line_width;
+
+ if(border) {
+ opa = dsc->border_opa;
+ col32.full = lv_color_to32(dsc->border_color); /*Convert color to RGBA8888*/
+ line_width = dsc->border_width;
+ }
+ else {
+ opa = dsc->outline_opa;
+ col32.full = lv_color_to32(dsc->outline_color); /*Convert color to RGBA8888*/
+ line_width = dsc->outline_width;
+ }
+
+ vg_lite_buffer_format_t color_format = LV_COLOR_DEPTH == 16 ? VG_LITE_BGRA8888 : VG_LITE_ABGR8888;
+ if(lv_vglite_premult_and_swizzle(&vgcol, col32, opa, color_format) != LV_RES_OK)
+ VG_LITE_RETURN_INV("Premultiplication and swizzle failed.");
+
+ /*** Draw border ***/
+ err = vg_lite_set_draw_path_type(&path, VG_LITE_DRAW_STROKE_PATH);
+ VG_LITE_ERR_RETURN_INV(err, "Set draw path type failed.");
+
+ err = vg_lite_set_stroke(&path, cap_style, join_style, line_width, 8, NULL, 0, 0, vgcol);
+ VG_LITE_ERR_RETURN_INV(err, "Set stroke failed.");
+
+ err = vg_lite_update_stroke(&path);
+ VG_LITE_ERR_RETURN_INV(err, "Update stroke failed.");
+
+ err = vg_lite_draw(vgbuf, &path, VG_LITE_FILL_NON_ZERO, &matrix, vglite_blend_mode, vgcol);
+ VG_LITE_ERR_RETURN_INV(err, "Draw border failed.");
+
+ if(lv_vglite_run() != LV_RES_OK)
+ VG_LITE_RETURN_INV("Run failed.");
+
+ err = vg_lite_clear_path(&path);
+ VG_LITE_ERR_RETURN_INV(err, "Clear path failed.");
+
+ return LV_RES_OK;
+
+}
+
+static void lv_vglite_create_rect_path_data(int32_t * path_data, uint32_t * path_data_size,
+ lv_coord_t radius,
+ const lv_area_t * coords)
+{
+ lv_coord_t rect_width = lv_area_get_width(coords);
+ lv_coord_t rect_height = lv_area_get_height(coords);
+
+ /* Get the final radius. Can't be larger than the half of the shortest side */
+ int32_t shortest_side = LV_MIN(rect_width, rect_height);
+ int32_t final_radius = LV_MIN(radius, shortest_side / 2);
+
+ /* Path data element index */
+ uint8_t pidx = 0;
+
+ if((radius == (lv_coord_t)LV_RADIUS_CIRCLE) && (rect_width == rect_height)) {
+
+ /* Get the control point offset for rounded cases */
+ int32_t cpoff = (int32_t)((float)final_radius * BEZIER_OPTIM_CIRCLE);
+
+ /* Circle case */
+ /* Starting point */
+ path_data[pidx++] = VLC_OP_MOVE;
+ path_data[pidx++] = coords->x1 + final_radius;
+ path_data[pidx++] = coords->y1;
+
+ /* Top-right arc */
+ path_data[pidx++] = VLC_OP_CUBIC_REL;
+ path_data[pidx++] = cpoff;
+ path_data[pidx++] = 0;
+ path_data[pidx++] = final_radius;
+ path_data[pidx++] = final_radius - cpoff;
+ path_data[pidx++] = final_radius;
+ path_data[pidx++] = final_radius;
+
+ /* Bottom-right arc*/
+ path_data[pidx++] = VLC_OP_CUBIC_REL;
+ path_data[pidx++] = 0;
+ path_data[pidx++] = cpoff;
+ path_data[pidx++] = cpoff - final_radius;
+ path_data[pidx++] = final_radius;
+ path_data[pidx++] = 0 - final_radius;
+ path_data[pidx++] = final_radius;
+
+ /* Bottom-left arc */
+ path_data[pidx++] = VLC_OP_CUBIC_REL;
+ path_data[pidx++] = 0 - cpoff;
+ path_data[pidx++] = 0;
+ path_data[pidx++] = 0 - final_radius;
+ path_data[pidx++] = cpoff - final_radius;
+ path_data[pidx++] = 0 - final_radius;
+ path_data[pidx++] = 0 - final_radius;
+
+ /* Top-left arc*/
+ path_data[pidx++] = VLC_OP_CUBIC_REL;
+ path_data[pidx++] = 0;
+ path_data[pidx++] = 0 - cpoff;
+ path_data[pidx++] = final_radius - cpoff;
+ path_data[pidx++] = 0 - final_radius;
+ path_data[pidx++] = final_radius;
+ path_data[pidx++] = 0 - final_radius;
+
+ /* Ending point */
+ path_data[pidx++] = VLC_OP_END;
+ }
+ else if(radius > 0) {
+ /* Get the control point offset for rounded cases */
+ int32_t cpoff = (int32_t)((float)final_radius * BEZIER_OPTIM_CIRCLE);
+
+ /* Rounded rectangle case */
+ /* Starting point */
+ path_data[pidx++] = VLC_OP_MOVE;
+ path_data[pidx++] = coords->x1 + final_radius;
+ path_data[pidx++] = coords->y1;
+
+ /* Top side */
+ path_data[pidx++] = VLC_OP_LINE;
+ path_data[pidx++] = coords->x2 - final_radius + 1; // Extended for VGLite
+ path_data[pidx++] = coords->y1;
+
+ /* Top-right corner */
+ path_data[pidx++] = VLC_OP_CUBIC_REL;
+ path_data[pidx++] = cpoff;
+ path_data[pidx++] = 0;
+ path_data[pidx++] = final_radius;
+ path_data[pidx++] = final_radius - cpoff;
+ path_data[pidx++] = final_radius;
+ path_data[pidx++] = final_radius;
+
+ /* Right side */
+ path_data[pidx++] = VLC_OP_LINE;
+ path_data[pidx++] = coords->x2 + 1; // Extended for VGLite
+ path_data[pidx++] = coords->y2 - final_radius + 1; // Extended for VGLite
+
+ /* Bottom-right corner*/
+ path_data[pidx++] = VLC_OP_CUBIC_REL;
+ path_data[pidx++] = 0;
+ path_data[pidx++] = cpoff;
+ path_data[pidx++] = cpoff - final_radius;
+ path_data[pidx++] = final_radius;
+ path_data[pidx++] = 0 - final_radius;
+ path_data[pidx++] = final_radius;
+
+ /* Bottom side */
+ path_data[pidx++] = VLC_OP_LINE;
+ path_data[pidx++] = coords->x1 + final_radius;
+ path_data[pidx++] = coords->y2 + 1; // Extended for VGLite
+
+ /* Bottom-left corner */
+ path_data[pidx++] = VLC_OP_CUBIC_REL;
+ path_data[pidx++] = 0 - cpoff;
+ path_data[pidx++] = 0;
+ path_data[pidx++] = 0 - final_radius;
+ path_data[pidx++] = cpoff - final_radius;
+ path_data[pidx++] = 0 - final_radius;
+ path_data[pidx++] = 0 - final_radius;
+
+ /* Left side*/
+ path_data[pidx++] = VLC_OP_LINE;
+ path_data[pidx++] = coords->x1;
+ path_data[pidx++] = coords->y1 + final_radius;
+
+ /* Top-left corner */
+ path_data[pidx++] = VLC_OP_CUBIC_REL;
+ path_data[pidx++] = 0;
+ path_data[pidx++] = 0 - cpoff;
+ path_data[pidx++] = final_radius - cpoff;
+ path_data[pidx++] = 0 - final_radius;
+ path_data[pidx++] = final_radius;
+ path_data[pidx++] = 0 - final_radius;
+
+ /* Ending point */
+ path_data[pidx++] = VLC_OP_END;
+ }
+ else {
+ /* Non-rounded rectangle case */
+ /* Starting point */
+ path_data[pidx++] = VLC_OP_MOVE;
+ path_data[pidx++] = coords->x1;
+ path_data[pidx++] = coords->y1;
+
+ /* Top side */
+ path_data[pidx++] = VLC_OP_LINE;
+ path_data[pidx++] = coords->x2 + 1; // Extended for VGLite
+ path_data[pidx++] = coords->y1;
+
+ /* Right side */
+ path_data[pidx++] = VLC_OP_LINE;
+ path_data[pidx++] = coords->x2 + 1; // Extended for VGLite
+ path_data[pidx++] = coords->y2 + 1; // Extended for VGLite
+
+ /* Bottom side */
+ path_data[pidx++] = VLC_OP_LINE;
+ path_data[pidx++] = coords->x1;
+ path_data[pidx++] = coords->y2 + 1; // Extended for VGLite
+
+ /* Left side*/
+ path_data[pidx++] = VLC_OP_LINE;
+ path_data[pidx++] = coords->x1;
+ path_data[pidx++] = coords->y1;
+
+ /* Ending point */
+ path_data[pidx++] = VLC_OP_END;
+ }
+
+ /* Resulting path size */
+ *path_data_size = pidx * sizeof(int32_t);
+}
+
/**********************
* STATIC FUNCTIONS
**********************/
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_rect.h b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_rect.h
index d708e7b42..795822746 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_rect.h
+++ b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_draw_vglite_rect.h
@@ -6,7 +6,7 @@
/**
* MIT License
*
- * Copyright 2021, 2022 NXP
+ * Copyright 2021-2023 NXP
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -40,7 +40,7 @@ extern "C" {
#include "../../../lv_conf_internal.h"
#if LV_USE_GPU_NXP_VG_LITE
-#include "lv_gpu_nxp_vglite.h"
+#include "lv_vglite_utils.h"
#include "../../lv_draw_rect.h"
/*********************
@@ -56,13 +56,33 @@ extern "C" {
**********************/
/**
- * Draw rectangle shape with effects (rounded corners, gradient)
+ * Draw rectangle background with effects (rounded corners, gradient)
+ *
+ * @param[in] coords Coordinates of the rectangle background (relative to dest buff)
+ * @param[in] clip_area Clipping area with relative coordinates to dest buff
+ * @param[in] dsc Description of the rectangle background
+ *
+ * @retval LV_RES_OK Draw completed
+ * @retval LV_RES_INV Error occurred (\see LV_GPU_NXP_VG_LITE_LOG_ERRORS)
*
- * @param draw_ctx drawing context
- * @param dsc description of the rectangle
- * @param coords the area where rectangle is clipped
*/
-lv_res_t lv_gpu_nxp_vglite_draw_bg(lv_draw_ctx_t * draw_ctx, const lv_draw_rect_dsc_t * dsc, const lv_area_t * coords);
+lv_res_t lv_gpu_nxp_vglite_draw_bg(const lv_area_t * coords, const lv_area_t * clip_area,
+ const lv_draw_rect_dsc_t * dsc);
+
+/**
+ * Draw rectangle border/outline shape with effects (rounded corners, opacity)
+ *
+ * @param[in] coords Coordinates of the rectangle border/outline (relative to dest buff)
+ * @param[in] clip_area Clipping area with relative coordinates to dest buff
+ * @param[in] dsc Description of the rectangle border/outline
+ * @param[in] border True for border, False for outline
+ *
+ * @retval LV_RES_OK Draw completed
+ * @retval LV_RES_INV Error occurred (\see LV_GPU_NXP_VG_LITE_LOG_ERRORS)
+ *
+ */
+lv_res_t lv_gpu_nxp_vglite_draw_border_generic(const lv_area_t * coords, const lv_area_t * clip_area,
+ const lv_draw_rect_dsc_t * dsc, bool border);
/**********************
* MACROS
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_gpu_nxp_vglite.c b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_gpu_nxp_vglite.c
deleted file mode 100644
index f65ec1d48..000000000
--- a/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_gpu_nxp_vglite.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/**
- * @file lv_gpu_nxp_vglite.c
- *
- */
-
-/**
- * MIT License
- *
- * Copyright 2020-2022 NXP
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next paragraph)
- * shall be included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
- * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
- * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
- * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- */
-
-/*********************
- * INCLUDES
- *********************/
-
-#include "lv_gpu_nxp_vglite.h"
-
-#if LV_USE_GPU_NXP_VG_LITE
-#include "../../../core/lv_refr.h"
-#if BLIT_DBG_AREAS
- #include "lv_draw_vglite_blend.h"
-#endif
-
-/*********************
- * DEFINES
- *********************/
-
-#if LV_COLOR_DEPTH==16
- #define VG_LITE_PX_FMT VG_LITE_RGB565
-#elif LV_COLOR_DEPTH==32
- #define VG_LITE_PX_FMT VG_LITE_BGRA8888
-#else
- #error Only 16bit and 32bit color depth are supported. Set LV_COLOR_DEPTH to 16 or 32.
-#endif
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
-
-lv_res_t lv_vglite_init_buf(vg_lite_buffer_t * vgbuf, uint32_t width, uint32_t height, uint32_t stride,
- const lv_color_t * ptr, bool source)
-{
- /*Test for memory alignment*/
- if((((uintptr_t)ptr) % (uintptr_t)LV_ATTRIBUTE_MEM_ALIGN_SIZE) != (uintptr_t)0x0U)
- VG_LITE_RETURN_INV("%s buffer (0x%x) not aligned to %d.", source ? "Src" : "Dest",
- (size_t) ptr, LV_ATTRIBUTE_MEM_ALIGN_SIZE);
-
- /*Test for stride alignment*/
- if(source && (stride % (LV_GPU_NXP_VG_LITE_STRIDE_ALIGN_PX * sizeof(lv_color_t))) != 0x0U)
- VG_LITE_RETURN_INV("Src buffer stride (%d bytes) not aligned to %d bytes.", stride,
- LV_GPU_NXP_VG_LITE_STRIDE_ALIGN_PX * sizeof(lv_color_t));
-
- vgbuf->format = VG_LITE_PX_FMT;
- vgbuf->tiled = VG_LITE_LINEAR;
- vgbuf->image_mode = VG_LITE_NORMAL_IMAGE_MODE;
- vgbuf->transparency_mode = VG_LITE_IMAGE_OPAQUE;
-
- vgbuf->width = (int32_t)width;
- vgbuf->height = (int32_t)height;
- vgbuf->stride = (int32_t)stride;
-
- lv_memset_00(&vgbuf->yuv, sizeof(vgbuf->yuv));
-
- vgbuf->memory = (void *)ptr;
- vgbuf->address = (uint32_t)vgbuf->memory;
- vgbuf->handle = NULL;
-
- return LV_RES_OK;
-}
-
-#if BLIT_DBG_AREAS
-void lv_vglite_dbg_draw_rectangle(lv_color_t * dest_buf, lv_coord_t dest_width, lv_coord_t dest_height,
- lv_area_t * fill_area, lv_color_t color)
-{
- lv_area_t a;
-
- /* top line */
- a.x1 = fill_area->x1;
- a.x2 = fill_area->x2;
- a.y1 = fill_area->y1;
- a.y2 = fill_area->y1;
- lv_gpu_nxp_vglite_fill(dest_buf, dest_width, dest_height, &a, color, LV_OPA_COVER);
-
-
- /* bottom line */
- a.x1 = fill_area->x1;
- a.x2 = fill_area->x2;
- a.y1 = fill_area->y2;
- a.y2 = fill_area->y2;
- lv_gpu_nxp_vglite_fill(dest_buf, dest_width, dest_height, &a, color, LV_OPA_COVER);
-
- /* left line */
- a.x1 = fill_area->x1;
- a.x2 = fill_area->x1;
- a.y1 = fill_area->y1;
- a.y2 = fill_area->y2;
- lv_gpu_nxp_vglite_fill(dest_buf, dest_width, dest_height, &a, color, LV_OPA_COVER);
-
- /* right line */
- a.x1 = fill_area->x2;
- a.x2 = fill_area->x2;
- a.y1 = fill_area->y1;
- a.y2 = fill_area->y2;
- lv_gpu_nxp_vglite_fill(dest_buf, dest_width, dest_height, &a, color, LV_OPA_COVER);
-}
-#endif /* BLIT_DBG_AREAS */
-
-void lv_vglite_invalidate_cache(void)
-{
- lv_disp_t * disp = _lv_refr_get_disp_refreshing();
- if(disp->driver->clean_dcache_cb)
- disp->driver->clean_dcache_cb(disp->driver);
-}
-
-/**********************
- * STATIC FUNCTIONS
- **********************/
-
-#endif /*LV_USE_GPU_NXP_VG_LITE*/
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_vglite_buf.c b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_vglite_buf.c
new file mode 100644
index 000000000..f6325ab2a
--- /dev/null
+++ b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_vglite_buf.c
@@ -0,0 +1,143 @@
+/**
+ * @file lv_vglite_buf.c
+ *
+ */
+
+/**
+ * MIT License
+ *
+ * Copyright 2023 NXP
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ * the Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next paragraph)
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+ * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+ * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+/*********************
+ * INCLUDES
+ *********************/
+
+#include "lv_vglite_buf.h"
+
+#if LV_USE_GPU_NXP_VG_LITE
+
+/*********************
+ * DEFINES
+ *********************/
+
+#if LV_COLOR_DEPTH == 16
+ #define VG_LITE_PX_FMT VG_LITE_RGB565
+#elif LV_COLOR_DEPTH == 32
+ #define VG_LITE_PX_FMT VG_LITE_BGRA8888
+#else
+ #error Only 16bit and 32bit color depth are supported. Set LV_COLOR_DEPTH to 16 or 32.
+#endif
+
+/**********************
+ * TYPEDEFS
+ **********************/
+
+/**********************
+ * STATIC PROTOTYPES
+ **********************/
+
+static inline void lv_vglite_set_dest_buf(const lv_color_t * buf, const lv_area_t * area, lv_coord_t stride);
+static inline void lv_vglite_set_buf_ptr(vg_lite_buffer_t * vgbuf, const lv_color_t * buf);
+static inline void lv_vglite_set_buf(vg_lite_buffer_t * vgbuf, const lv_color_t * buf,
+ const lv_area_t * area, lv_coord_t stride);
+
+/**********************
+ * STATIC VARIABLES
+ **********************/
+
+static vg_lite_buffer_t dest_vgbuf;
+static vg_lite_buffer_t src_vgbuf;
+
+/**********************
+ * MACROS
+ **********************/
+
+/**********************
+ * GLOBAL FUNCTIONS
+ **********************/
+
+void lv_gpu_nxp_vglite_init_buf(const lv_color_t * buf, const lv_area_t * area, lv_coord_t stride)
+{
+ lv_vglite_set_dest_buf(buf, area, stride);
+}
+
+vg_lite_buffer_t * lv_vglite_get_dest_buf(void)
+{
+ return &dest_vgbuf;
+}
+
+vg_lite_buffer_t * lv_vglite_get_src_buf(void)
+{
+ return &src_vgbuf;
+}
+
+void lv_vglite_set_dest_buf_ptr(const lv_color_t * buf)
+{
+ lv_vglite_set_buf_ptr(&dest_vgbuf, buf);
+}
+
+void lv_vglite_set_src_buf_ptr(const lv_color_t * buf)
+{
+ lv_vglite_set_buf_ptr(&src_vgbuf, buf);
+}
+
+void lv_vglite_set_src_buf(const lv_color_t * buf, const lv_area_t * area, lv_coord_t stride)
+{
+ if(src_vgbuf.memory != (void *)buf)
+ lv_vglite_set_buf(&src_vgbuf, buf, area, stride);
+}
+
+/**********************
+ * STATIC FUNCTIONS
+ **********************/
+
+static inline void lv_vglite_set_dest_buf(const lv_color_t * buf, const lv_area_t * area, lv_coord_t stride)
+{
+ lv_vglite_set_buf(&dest_vgbuf, buf, area, stride);
+}
+
+static inline void lv_vglite_set_buf_ptr(vg_lite_buffer_t * vgbuf, const lv_color_t * buf)
+{
+ vgbuf->memory = (void *)buf;
+ vgbuf->address = (uint32_t)vgbuf->memory;
+}
+
+static inline void lv_vglite_set_buf(vg_lite_buffer_t * vgbuf, const lv_color_t * buf,
+ const lv_area_t * area, lv_coord_t stride)
+{
+ vgbuf->format = VG_LITE_PX_FMT;
+ vgbuf->tiled = VG_LITE_LINEAR;
+ vgbuf->image_mode = VG_LITE_NORMAL_IMAGE_MODE;
+ vgbuf->transparency_mode = VG_LITE_IMAGE_OPAQUE;
+
+ vgbuf->width = (int32_t)lv_area_get_width(area);
+ vgbuf->height = (int32_t)lv_area_get_height(area);
+ vgbuf->stride = (int32_t)(stride) * sizeof(lv_color_t);
+
+ lv_memset_00(&vgbuf->yuv, sizeof(vgbuf->yuv));
+
+ vgbuf->memory = (void *)buf;
+ vgbuf->address = (uint32_t)vgbuf->memory;
+ vgbuf->handle = NULL;
+}
+
+#endif /*LV_USE_GPU_NXP_VG_LITE*/
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_vglite_buf.h b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_vglite_buf.h
new file mode 100644
index 000000000..9219dca05
--- /dev/null
+++ b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_vglite_buf.h
@@ -0,0 +1,113 @@
+/**
+ * @file lv_vglite_buf.h
+ *
+ */
+
+/**
+ * MIT License
+ *
+ * Copyright 2023 NXP
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ * the Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next paragraph)
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+ * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+ * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#ifndef LV_VGLITE_BUF_H
+#define LV_VGLITE_BUF_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ * INCLUDES
+ *********************/
+#include "../../../lv_conf_internal.h"
+
+#if LV_USE_GPU_NXP_VG_LITE
+#include "vg_lite.h"
+#include "../../sw/lv_draw_sw.h"
+
+/*********************
+ * DEFINES
+ *********************/
+
+/**********************
+ * TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+/**
+ * Init vglite destination buffer. It will be done once per frame.
+ *
+ * @param[in] buf Destination buffer address (does not require alignment for VG_LITE_LINEAR mode)
+ * @param[in] area Destination buffer area (for width and height)
+ * @param[in] stride Stride of destination buffer
+ */
+void lv_gpu_nxp_vglite_init_buf(const lv_color_t * buf, const lv_area_t * area, lv_coord_t stride);
+
+/**
+ * Get vglite destination buffer pointer.
+ *
+ * @retval The vglite destination buffer
+ */
+vg_lite_buffer_t * lv_vglite_get_dest_buf(void);
+
+/**
+ * Get vglite source buffer pointer.
+ *
+ * @retval The vglite source buffer
+ */
+vg_lite_buffer_t * lv_vglite_get_src_buf(void);
+
+/**
+ * Set vglite destination buffer address only.
+ *
+ * @param[in] buf Destination buffer address (does not require alignment for VG_LITE_LINEAR mode)
+ */
+void lv_vglite_set_dest_buf_ptr(const lv_color_t * buf);
+
+/**
+ * Set vglite source buffer address only.
+ *
+ * @param[in] buf Source buffer address
+ */
+void lv_vglite_set_src_buf_ptr(const lv_color_t * buf);
+
+/**
+ * Set vglite source buffer. It will be done only if buffer addreess is different.
+ *
+ * @param[in] buf Source buffer address
+ * @param[in] area Source buffer area (for width and height)
+ * @param[in] stride Stride of source buffer
+ */
+void lv_vglite_set_src_buf(const lv_color_t * buf, const lv_area_t * area, lv_coord_t stride);
+
+/**********************
+ * MACROS
+ **********************/
+
+#endif /*LV_USE_GPU_NXP_VG_LITE*/
+
+#ifdef __cplusplus
+} /*extern "C"*/
+#endif
+
+#endif /*LV_VGLITE_BUF_H*/
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_vglite_utils.c b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_vglite_utils.c
new file mode 100644
index 000000000..adc9f7712
--- /dev/null
+++ b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_vglite_utils.c
@@ -0,0 +1,149 @@
+/**
+ * @file lv_vglite_utils.c
+ *
+ */
+
+/**
+ * MIT License
+ *
+ * Copyright 2022, 2023 NXP
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ * the Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next paragraph)
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+ * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+ * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+/*********************
+ * INCLUDES
+ *********************/
+
+#include "lv_vglite_utils.h"
+
+#if LV_USE_GPU_NXP_VG_LITE
+#include "../../../core/lv_refr.h"
+
+/*********************
+ * DEFINES
+ *********************/
+
+/**********************
+ * TYPEDEFS
+ **********************/
+
+/**********************
+ * STATIC PROTOTYPES
+ **********************/
+
+/**
+ * Clean and invalidate cache.
+ */
+static inline void invalidate_cache(void);
+
+/**********************
+ * STATIC VARIABLES
+ **********************/
+
+/**********************
+ * MACROS
+ **********************/
+
+/**********************
+ * GLOBAL FUNCTIONS
+ **********************/
+
+lv_res_t lv_vglite_run(void)
+{
+ invalidate_cache();
+
+ VG_LITE_ERR_RETURN_INV(vg_lite_flush(), "Flush failed.");
+
+ return LV_RES_OK;
+}
+
+lv_res_t lv_vglite_premult_and_swizzle(vg_lite_color_t * vg_col32, lv_color32_t lv_col32, lv_opa_t opa,
+ vg_lite_buffer_format_t vg_col_format)
+{
+
+ lv_color32_t lv_col32_premul = lv_col32;
+ if(opa <= (lv_opa_t)LV_OPA_MAX) {
+ /* Only pre-multiply color if hardware pre-multiplication is not present */
+ if(!vg_lite_query_feature(gcFEATURE_BIT_VG_PE_PREMULTIPLY)) {
+ lv_col32_premul.ch.red = (uint8_t)(((uint16_t)lv_col32.ch.red * opa) >> 8);
+ lv_col32_premul.ch.green = (uint8_t)(((uint16_t)lv_col32.ch.green * opa) >> 8);
+ lv_col32_premul.ch.blue = (uint8_t)(((uint16_t)lv_col32.ch.blue * opa) >> 8);
+ }
+ lv_col32_premul.ch.alpha = opa;
+ }
+
+ switch(vg_col_format) {
+ case VG_LITE_BGRA8888:
+ *vg_col32 = lv_col32_premul.full;
+ break;
+ case VG_LITE_RGBA8888:
+ *vg_col32 = ((uint32_t)lv_col32_premul.ch.red << 24) | ((uint32_t)lv_col32_premul.ch.green << 16) |
+ ((uint32_t)lv_col32_premul.ch.blue << 8) | (uint32_t)lv_col32_premul.ch.alpha;
+ break;
+ case VG_LITE_ABGR8888:
+ *vg_col32 = ((uint32_t)lv_col32_premul.ch.alpha << 24) | ((uint32_t)lv_col32_premul.ch.blue << 16) |
+ ((uint32_t)lv_col32_premul.ch.green << 8) | (uint32_t)lv_col32_premul.ch.red;
+ break;
+ case VG_LITE_ARGB8888:
+ *vg_col32 = ((uint32_t)lv_col32_premul.ch.alpha << 24) | ((uint32_t)lv_col32_premul.ch.red << 16) |
+ ((uint32_t)lv_col32_premul.ch.green << 8) | (uint32_t)lv_col32_premul.ch.blue;
+ break;
+ default:
+ return LV_RES_INV;
+ }
+
+ return LV_RES_OK;
+}
+
+vg_lite_blend_t lv_vglite_get_blend_mode(lv_blend_mode_t lv_blend_mode)
+{
+ vg_lite_blend_t vg_blend_mode;
+ switch(lv_blend_mode) {
+ case LV_BLEND_MODE_ADDITIVE:
+ vg_blend_mode = VG_LITE_BLEND_ADDITIVE;
+ break;
+ case LV_BLEND_MODE_SUBTRACTIVE:
+ vg_blend_mode = VG_LITE_BLEND_SUBTRACT;
+ break;
+ case LV_BLEND_MODE_MULTIPLY:
+ vg_blend_mode = VG_LITE_BLEND_MULTIPLY;
+ break;
+ case LV_BLEND_MODE_REPLACE:
+ vg_blend_mode = VG_LITE_BLEND_NONE;
+ break;
+ default:
+ vg_blend_mode = VG_LITE_BLEND_SRC_OVER;
+ break;
+ }
+ return vg_blend_mode;
+}
+
+/**********************
+ * STATIC FUNCTIONS
+ **********************/
+
+static inline void invalidate_cache(void)
+{
+ lv_disp_t * disp = _lv_refr_get_disp_refreshing();
+ if(disp->driver->clean_dcache_cb)
+ disp->driver->clean_dcache_cb(disp->driver);
+}
+
+#endif /*LV_USE_GPU_NXP_VG_LITE*/
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_gpu_nxp_vglite.h b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_vglite_utils.h
similarity index 65%
rename from lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_gpu_nxp_vglite.h
rename to lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_vglite_utils.h
index c22cae185..9ff4de02f 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_gpu_nxp_vglite.h
+++ b/lib/libesp32_lvgl/lvgl/src/draw/nxp/vglite/lv_vglite_utils.h
@@ -1,12 +1,12 @@
/**
- * @file lv_gpu_nxp_vglite.h
+ * @file lv_vglite_utils.h
*
*/
/**
* MIT License
*
- * Copyright 2020-2022 NXP
+ * Copyright 2022, 2023 NXP
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -27,8 +27,8 @@
*
*/
-#ifndef LV_GPU_NXP_VGLITE_H
-#define LV_GPU_NXP_VGLITE_H
+#ifndef LV_VGLITE_UTILS_H
+#define LV_VGLITE_UTILS_H
#ifdef __cplusplus
extern "C" {
@@ -43,40 +43,21 @@ extern "C" {
#include "vg_lite.h"
#include "../../sw/lv_draw_sw.h"
#include "../../../misc/lv_log.h"
-#include "fsl_debug_console.h"
/*********************
* DEFINES
*********************/
-/** Use this symbol as limit to disable feature (value has to be larger than supported resolution) */
-#define LV_GPU_NXP_VG_LITE_FEATURE_DISABLED (1920*1080+1)
-
-/** Stride in px required by VG-Lite HW. Don't change this. */
-#define LV_GPU_NXP_VG_LITE_STRIDE_ALIGN_PX 16U
-
#ifndef LV_GPU_NXP_VG_LITE_LOG_ERRORS
/** Enable logging of VG-Lite errors (\see LV_LOG_ERROR)*/
#define LV_GPU_NXP_VG_LITE_LOG_ERRORS 1
#endif
#ifndef LV_GPU_NXP_VG_LITE_LOG_TRACES
-/** Enable logging of VG-Lite errors (\see LV_LOG_ERROR)*/
+/** Enable logging of VG-Lite traces (\see LV_LOG_ERROR)*/
#define LV_GPU_NXP_VG_LITE_LOG_TRACES 0
#endif
-/* Draw rectangles around BLIT tiles */
-#define BLIT_DBG_AREAS 0
-
-/* Print detailed info to SDK console (NOT to LVGL log system) */
-#define BLIT_DBG_VERBOSE 0
-
-/* Verbose debug print */
-#if BLIT_DBG_VERBOSE
-#define PRINT_BLT PRINTF
-#else
-#define PRINT_BLT(...)
-#endif
/* The optimal Bezier control point offset for radial unit
* see: https://spencermortensen.com/articles/bezier-circle/
@@ -95,36 +76,35 @@ extern "C" {
**********************/
/**
- * Fills vg_lite_buffer_t structure according given parameters.
+ * Premultiplies and swizzles given LVGL 32bit color to obtain vglite color.
*
- * @param[in/out] vgbuf Buffer structure to be filled
- * @param[in] width Width of buffer in pixels
- * @param[in] height Height of buffer in pixels
- * @param[in] stride Stride of the buffer in bytes
- * @param[in] ptr Pointer to the buffer (must be aligned according VG-Lite requirements)
- * @param[in] source Boolean to check if this is a source buffer
- */
-lv_res_t lv_vglite_init_buf(vg_lite_buffer_t * vgbuf, uint32_t width, uint32_t height, uint32_t stride,
- const lv_color_t * ptr, bool source);
-
-#if BLIT_DBG_AREAS
-/**
- * Draw a simple rectangle, 1 px line width.
+ * @param[in/out] vg_col32 The obtained vglite color
+ * @param[in] lv_col32 The initial LVGL 32bit color
+ * @param[in] opa The opacity to premultiply with
+ * @param[in] vg_col_format The format of the resulting vglite color
*
- * @param dest_buf Destination buffer
- * @param dest_width Destination buffer width (must be aligned on 16px)
- * @param dest_height Destination buffer height
- * @param fill_area Rectangle coordinates
- * @param color Rectangle color
+ * @retval LV_RES_OK Operation completed
+ * @retval LV_RES_INV Error occurred (\see LV_GPU_NXP_VG_LITE_LOG_ERRORS)
*/
-void lv_vglite_dbg_draw_rectangle(lv_color_t * dest_buf, lv_coord_t dest_width, lv_coord_t dest_height,
- lv_area_t * fill_area, lv_color_t color);
-#endif
+lv_res_t lv_vglite_premult_and_swizzle(vg_lite_color_t * vg_col32, lv_color32_t lv_col32, lv_opa_t opa,
+ vg_lite_buffer_format_t vg_col_format);
/**
- * Clean & invalidate cache.
+ * Get vglite blend mode.
+ *
+ * @param[in] lv_blend_mode The LVGL blend mode
+ *
+ * @retval The vglite blend mode
*/
-void lv_vglite_invalidate_cache(void);
+vg_lite_blend_t lv_vglite_get_blend_mode(lv_blend_mode_t lv_blend_mode);
+
+/**
+ * Clear cache and flush command to VG-Lite.
+ *
+ * @retval LV_RES_OK Run completed
+ * @retval LV_RES_INV Error occurred (\see LV_GPU_NXP_VG_LITE_LOG_ERRORS)
+ */
+lv_res_t lv_vglite_run(void);
/**********************
* MACROS
@@ -142,7 +122,8 @@ void lv_vglite_invalidate_cache(void);
#define VG_LITE_ERR_RETURN_INV(err, fmt, ...) \
do { \
if(err != VG_LITE_SUCCESS) { \
- LV_LOG_ERROR(fmt, ##__VA_ARGS__); \
+ LV_LOG_ERROR(fmt" (err = %d)", \
+ err, ##__VA_ARGS__); \
return LV_RES_INV; \
} \
} while (0)
@@ -158,7 +139,7 @@ void lv_vglite_invalidate_cache(void);
#if LV_GPU_NXP_VG_LITE_LOG_TRACES
#define VG_LITE_LOG_TRACE(fmt, ...) \
do { \
- LV_LOG_ERROR(fmt, ##__VA_ARGS__); \
+ LV_LOG(fmt, ##__VA_ARGS__); \
} while (0)
#define VG_LITE_RETURN_INV(fmt, ...) \
@@ -182,4 +163,4 @@ void lv_vglite_invalidate_cache(void);
} /*extern "C"*/
#endif
-#endif /*LV_GPU_NXP_VGLITE_H*/
+#endif /*LV_VGLITE_UTILS_H*/
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl_rect.c b/lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl_rect.c
index a303ac764..6418a0af6 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl_rect.c
+++ b/lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl_rect.c
@@ -27,6 +27,8 @@
* DEFINES
*********************/
+#define FRAG_SPACING 3
+
/**********************
* TYPEDEFS
**********************/
@@ -37,6 +39,23 @@ typedef struct {
lv_coord_t size;
} lv_draw_rect_bg_key_t;
+typedef struct {
+ lv_sdl_cache_key_magic_t magic;
+ lv_gradient_stop_t stops[LV_GRADIENT_MAX_STOPS];
+ uint8_t stops_count;
+ lv_grad_dir_t dir;
+} lv_draw_rect_grad_strip_key_t;
+
+typedef struct {
+ lv_sdl_cache_key_magic_t magic;
+ lv_gradient_stop_t stops[LV_GRADIENT_MAX_STOPS];
+ uint8_t stops_count;
+ lv_grad_dir_t dir;
+ lv_coord_t w;
+ lv_coord_t h;
+ lv_coord_t radius;
+} lv_draw_rect_grad_frag_key_t;
+
typedef struct {
lv_sdl_cache_key_magic_t magic;
lv_coord_t radius;
@@ -57,6 +76,12 @@ typedef struct {
static void draw_bg_color(lv_draw_sdl_ctx_t * ctx, const lv_area_t * coords, const lv_area_t * draw_area,
const lv_draw_rect_dsc_t * dsc);
+static void draw_bg_grad_simple(lv_draw_sdl_ctx_t * ctx, const lv_area_t * coords, const lv_area_t * draw_area,
+ const lv_grad_dsc_t * grad, bool blend_mod);
+
+static void draw_bg_grad_radius(lv_draw_sdl_ctx_t * ctx, const lv_area_t * coords, const lv_area_t * draw_area,
+ const lv_draw_rect_dsc_t * dsc);
+
static void draw_bg_img(lv_draw_sdl_ctx_t * ctx, const lv_area_t * coords, const lv_area_t * draw_area,
const lv_draw_rect_dsc_t * dsc);
@@ -81,6 +106,11 @@ static void frag_render_center(SDL_Renderer * renderer, SDL_Texture * frag, lv_c
static lv_draw_rect_bg_key_t rect_bg_key_create(lv_coord_t radius, lv_coord_t size);
+static lv_draw_rect_grad_frag_key_t rect_grad_frag_key_create(const lv_grad_dsc_t * grad, lv_coord_t w, lv_coord_t h,
+ lv_coord_t radius);
+
+static lv_draw_rect_grad_strip_key_t rect_grad_strip_key_create(const lv_grad_dsc_t * grad);
+
static lv_draw_rect_shadow_key_t rect_shadow_key_create(lv_coord_t radius, lv_coord_t size, lv_coord_t blur);
static lv_draw_rect_border_key_t rect_border_key_create(lv_coord_t rout, lv_coord_t rin, const lv_area_t * outer_area,
@@ -148,16 +178,93 @@ void lv_draw_sdl_draw_rect(lv_draw_ctx_t * draw_ctx, const lv_draw_rect_dsc_t *
SDL_Texture * lv_draw_sdl_rect_bg_frag_obtain(lv_draw_sdl_ctx_t * ctx, lv_coord_t radius)
{
lv_draw_rect_bg_key_t key = rect_bg_key_create(radius, radius);
- lv_area_t coords = {0, 0, radius * 2 - 1, radius * 2 - 1};
- lv_area_t coords_frag = {0, 0, radius - 1, radius - 1};
SDL_Texture * texture = lv_draw_sdl_texture_cache_get(ctx, &key, sizeof(key), NULL);
if(texture == NULL) {
+ lv_area_t coords = {0, 0, radius * 2 - 1, radius * 2 - 1};
+ lv_area_t coords_frag = {0, 0, radius - 1, radius - 1};
lv_draw_mask_radius_param_t mask_rout_param;
lv_draw_mask_radius_init(&mask_rout_param, &coords, radius, false);
int16_t mask_id = lv_draw_mask_add(&mask_rout_param, NULL);
texture = lv_draw_sdl_mask_dump_texture(ctx->renderer, &coords_frag, &mask_id, 1);
+ SDL_assert(texture != NULL);
lv_draw_mask_remove_id(mask_id);
- SDL_assert(texture);
+ lv_draw_sdl_texture_cache_put(ctx, &key, sizeof(key), texture);
+ }
+ return texture;
+}
+
+SDL_Texture * lv_draw_sdl_rect_grad_frag_obtain(lv_draw_sdl_ctx_t * ctx, const lv_grad_dsc_t * grad, lv_coord_t w,
+ lv_coord_t h, lv_coord_t radius)
+{
+ lv_draw_rect_grad_frag_key_t key = rect_grad_frag_key_create(grad, w, h, radius);
+ SDL_Texture * texture = lv_draw_sdl_texture_cache_get(ctx, &key, sizeof(key), NULL);
+ if(texture == NULL) {
+ lv_area_t coords = {0, 0, radius * 2 + FRAG_SPACING - 1, radius * 2 + FRAG_SPACING - 1};
+ texture = SDL_CreateTexture(ctx->renderer, LV_DRAW_SDL_TEXTURE_FORMAT, SDL_TEXTUREACCESS_TARGET,
+ lv_area_get_width(&coords), lv_area_get_height(&coords));
+ SDL_assert(texture != NULL);
+
+ lv_draw_mask_radius_param_t mask_rout_param;
+ lv_draw_mask_radius_init(&mask_rout_param, &coords, radius, false);
+ int16_t mask_id = lv_draw_mask_add(&mask_rout_param, NULL);
+ SDL_Texture * mask = lv_draw_sdl_mask_dump_texture(ctx->renderer, &coords, &mask_id, 1);
+ SDL_assert(mask != NULL);
+ SDL_SetTextureBlendMode(mask, SDL_BLENDMODE_NONE);
+ lv_draw_mask_remove_id(mask_id);
+
+ SDL_Texture * target_backup = SDL_GetRenderTarget(ctx->renderer);
+ SDL_SetRenderTarget(ctx->renderer, texture);
+ SDL_RenderCopy(ctx->renderer, mask, NULL, NULL);
+ SDL_DestroyTexture(mask);
+
+ lv_area_t blend_coords = {.x1 = 0, .y1 = 0, .x2 = w - 1, .y2 = h - 1};
+ lv_area_t draw_area = {.x1 = 0, .y1 = 0, .x2 = radius - 1, .y2 = radius - 1};
+ /* Align to top left */
+ lv_area_align(&coords, &draw_area, LV_ALIGN_TOP_LEFT, 0, 0);
+ lv_area_align(&coords, &blend_coords, LV_ALIGN_TOP_LEFT, 0, 0);
+ draw_bg_grad_simple(ctx, &blend_coords, &draw_area, grad, true);
+
+ /* Align to top right */
+ lv_area_align(&coords, &draw_area, LV_ALIGN_TOP_RIGHT, 0, 0);
+ lv_area_align(&coords, &blend_coords, LV_ALIGN_TOP_RIGHT, 0, 0);
+ draw_bg_grad_simple(ctx, &blend_coords, &draw_area, grad, true);
+
+ /* Align to bottom right */
+ lv_area_align(&coords, &draw_area, LV_ALIGN_BOTTOM_RIGHT, 0, 0);
+ lv_area_align(&coords, &blend_coords, LV_ALIGN_BOTTOM_RIGHT, 0, 0);
+ draw_bg_grad_simple(ctx, &blend_coords, &draw_area, grad, true);
+
+ /* Align to bottom left */
+ lv_area_align(&coords, &draw_area, LV_ALIGN_BOTTOM_LEFT, 0, 0);
+ lv_area_align(&coords, &blend_coords, LV_ALIGN_BOTTOM_LEFT, 0, 0);
+ draw_bg_grad_simple(ctx, &blend_coords, &draw_area, grad, true);
+
+ SDL_SetRenderTarget(ctx->renderer, target_backup);
+ lv_draw_sdl_texture_cache_put(ctx, &key, sizeof(key), texture);
+ }
+ return texture;
+}
+
+SDL_Texture * lv_draw_sdl_rect_grad_strip_obtain(lv_draw_sdl_ctx_t * ctx, const lv_grad_dsc_t * grad)
+{
+ lv_draw_rect_grad_strip_key_t key = rect_grad_strip_key_create(grad);
+ SDL_Texture * texture = lv_draw_sdl_texture_cache_get(ctx, &key, sizeof(key), NULL);
+ if(texture == NULL) {
+ Uint32 amask = 0xFF000000;
+ Uint32 rmask = 0x00FF0000;
+ Uint32 gmask = 0x0000FF00;
+ Uint32 bmask = 0x000000FF;
+ lv_color_t pixels[256];
+ for(int i = 0; i < 256; i++) {
+ pixels[i] = lv_gradient_calculate(grad, 256, i);
+ }
+ int width = grad->dir == LV_GRAD_DIR_VER ? 1 : 256;
+ int height = grad->dir == LV_GRAD_DIR_VER ? 256 : 1;
+ SDL_Surface * surface = SDL_CreateRGBSurfaceFrom(pixels, width, height, LV_COLOR_DEPTH, width * LV_COLOR_DEPTH / 8,
+ rmask, gmask, bmask, amask);
+ texture = SDL_CreateTextureFromSurface(ctx->renderer, surface);
+ SDL_assert(texture != NULL);
+ SDL_FreeSurface(surface);
lv_draw_sdl_texture_cache_put(ctx, &key, sizeof(key), texture);
}
return texture;
@@ -193,7 +300,7 @@ void lv_draw_sdl_rect_bg_frag_draw_corners(lv_draw_sdl_ctx_t * ctx, SDL_Texture
if(full) {
lv_coord_t sx = (lv_coord_t)(dst_area.x1 - corner_area.x1),
sy = (lv_coord_t)(dst_area.y1 - corner_area.y1);
- SDL_Rect src_rect = {frag_size + 3 + sx, sy, dw, dh};
+ SDL_Rect src_rect = {frag_size + FRAG_SPACING + sx, sy, dw, dh};
SDL_RenderCopy(ctx->renderer, frag, &src_rect, &dst_rect);
}
else {
@@ -212,7 +319,7 @@ void lv_draw_sdl_rect_bg_frag_draw_corners(lv_draw_sdl_ctx_t * ctx, SDL_Texture
if(full) {
lv_coord_t sx = (lv_coord_t)(dst_area.x1 - corner_area.x1),
sy = (lv_coord_t)(dst_area.y1 - corner_area.y1);
- SDL_Rect src_rect = {frag_size + 3 + sx, frag_size + 3 + sy, dw, dh};
+ SDL_Rect src_rect = {frag_size + FRAG_SPACING + sx, frag_size + FRAG_SPACING + sy, dw, dh};
SDL_RenderCopy(ctx->renderer, frag, &src_rect, &dst_rect);
}
else {
@@ -220,7 +327,7 @@ void lv_draw_sdl_rect_bg_frag_draw_corners(lv_draw_sdl_ctx_t * ctx, SDL_Texture
SDL_RenderCopyEx(ctx->renderer, frag, &src_rect, &dst_rect, 0, NULL, SDL_FLIP_HORIZONTAL | SDL_FLIP_VERTICAL);
}
}
- /* Lower left, right edge should not be clip */
+ /* Lower left, right edge should not be clipped */
corner_area.x1 = coords->x1;
corner_area.x2 = coords->x1 + frag_size - 1;
if(_lv_area_intersect(&dst_area, &corner_area, clip)) {
@@ -231,7 +338,7 @@ void lv_draw_sdl_rect_bg_frag_draw_corners(lv_draw_sdl_ctx_t * ctx, SDL_Texture
if(full) {
lv_coord_t sx = (lv_coord_t)(dst_area.x1 - corner_area.x1),
sy = (lv_coord_t)(dst_area.y1 - corner_area.y1);
- SDL_Rect src_rect = {sx, frag_size + 3 + sy, dw, dh};
+ SDL_Rect src_rect = {sx, frag_size + FRAG_SPACING + sy, dw, dh};
SDL_RenderCopy(ctx->renderer, frag, &src_rect, &dst_rect);
}
else {
@@ -252,9 +359,23 @@ static void draw_bg_color(lv_draw_sdl_ctx_t * ctx, const lv_area_t * coords, con
if(dsc->bg_opa == 0) {
return;
}
- SDL_Color bg_color;
- lv_color_to_sdl_color(&dsc->bg_color, &bg_color);
lv_coord_t radius = dsc->radius;
+ SDL_Color bg_color;
+ if(dsc->bg_grad.dir == LV_GRAD_DIR_NONE) {
+ lv_color_to_sdl_color(&dsc->bg_color, &bg_color);
+ }
+ else if(dsc->bg_grad.stops_count == 1) {
+ lv_color_to_sdl_color(&dsc->bg_grad.stops[0].color, &bg_color);
+ }
+ else {
+ if(radius <= 0) {
+ draw_bg_grad_simple(ctx, coords, draw_area, &dsc->bg_grad, false);
+ }
+ else {
+ draw_bg_grad_radius(ctx, coords, draw_area, dsc);
+ }
+ return;
+ }
if(radius <= 0) {
SDL_Rect rect;
lv_area_to_sdl_rect(draw_area, &rect);
@@ -277,9 +398,111 @@ static void draw_bg_color(lv_draw_sdl_ctx_t * ctx, const lv_area_t * coords, con
frag_render_center(ctx->renderer, texture, real_radius, coords, draw_area, false);
}
+static void draw_bg_grad_simple(lv_draw_sdl_ctx_t * ctx, const lv_area_t * coords, const lv_area_t * draw_area,
+ const lv_grad_dsc_t * grad, bool blend_mod)
+{
+ SDL_Rect dstrect;
+ lv_area_to_sdl_rect(draw_area, &dstrect);
+ SDL_Rect srcrect;
+ if(grad->dir == LV_GRAD_DIR_VER) {
+ lv_coord_t coords_h = lv_area_get_height(coords);
+ srcrect.x = 0;
+ srcrect.y = (draw_area->y1 - coords->y1) * 255 / coords_h;
+ srcrect.w = 1;
+ srcrect.h = dstrect.h * 256 / coords_h;
+
+ if(srcrect.y < 0 || srcrect.y > 255) {
+ return;
+ }
+ }
+ else {
+ lv_coord_t coords_w = lv_area_get_width(coords);
+ srcrect.x = (draw_area->x1 - coords->x1) * 255 / coords_w;
+ srcrect.y = 0;
+ srcrect.w = dstrect.w * 256 / coords_w;
+ srcrect.h = 1;
+
+ if(srcrect.x < 0 || srcrect.x > 255) {
+ return;
+ }
+ }
+
+ SDL_Texture * grad_texture = lv_draw_sdl_rect_grad_strip_obtain(ctx, grad);
+ if(blend_mod) {
+ SDL_SetTextureBlendMode(grad_texture, SDL_BLENDMODE_MOD);
+ }
+ else {
+ SDL_SetTextureBlendMode(grad_texture, SDL_BLENDMODE_BLEND);
+ }
+
+ SDL_RenderCopy(ctx->renderer, grad_texture, &srcrect, &dstrect);
+}
+
+static void draw_bg_grad_radius(lv_draw_sdl_ctx_t * ctx, const lv_area_t * coords, const lv_area_t * draw_area,
+ const lv_draw_rect_dsc_t * dsc)
+{
+ lv_coord_t radius = dsc->radius;
+ /*A small texture with a quarter of the rect is enough*/
+ lv_coord_t bg_w = lv_area_get_width(coords), bg_h = lv_area_get_height(coords);
+ lv_coord_t real_radius = LV_MIN3(bg_w / 2, bg_h / 2, radius);
+ SDL_Texture * grad_texture = lv_draw_sdl_rect_grad_frag_obtain(ctx, &dsc->bg_grad, bg_w, bg_h, radius);
+ SDL_SetTextureBlendMode(grad_texture, SDL_BLENDMODE_BLEND);
+
+ lv_draw_sdl_rect_bg_frag_draw_corners(ctx, grad_texture, real_radius, coords, draw_area, true);
+ lv_area_t part_coords;
+ lv_area_t part_area;
+ if(bg_w > radius * 2) {
+ /*Draw left, middle, right*/
+ part_coords.x1 = 0;
+ part_coords.x2 = radius - 1;
+ part_coords.y1 = radius;
+ part_coords.y2 = bg_h - radius - 1;
+
+ lv_area_align(coords, &part_coords, LV_ALIGN_LEFT_MID, 0, 0);
+ _lv_area_intersect(&part_area, &part_coords, draw_area);
+ draw_bg_grad_simple(ctx, coords, &part_area, &dsc->bg_grad, false);
+
+ lv_area_align(coords, &part_coords, LV_ALIGN_RIGHT_MID, 0, 0);
+ _lv_area_intersect(&part_area, &part_coords, draw_area);
+ draw_bg_grad_simple(ctx, coords, &part_area, &dsc->bg_grad, false);
+
+ part_coords.x1 = radius;
+ part_coords.x2 = bg_w - radius - 1;
+ part_coords.y1 = 0;
+ part_coords.y2 = bg_h - 1;
+ lv_area_align(coords, &part_coords, LV_ALIGN_CENTER, 0, 0);
+ _lv_area_intersect(&part_area, &part_coords, draw_area);
+ draw_bg_grad_simple(ctx, coords, &part_area, &dsc->bg_grad, false);
+ }
+ else if(bg_h > radius * 2) {
+ /*Draw top, middle, bottom*/
+ part_coords.x1 = radius;
+ part_coords.x2 = bg_w - radius - 1;
+ part_coords.y1 = 0;
+ part_coords.y2 = radius - 1;
+
+ lv_area_align(coords, &part_coords, LV_ALIGN_TOP_MID, 0, 0);
+ _lv_area_intersect(&part_area, &part_coords, draw_area);
+ draw_bg_grad_simple(ctx, coords, &part_area, &dsc->bg_grad, false);
+
+ lv_area_align(coords, &part_coords, LV_ALIGN_BOTTOM_MID, 0, 0);
+ _lv_area_intersect(&part_area, &part_coords, draw_area);
+ draw_bg_grad_simple(ctx, coords, &part_area, &dsc->bg_grad, false);
+
+ part_coords.x1 = 0;
+ part_coords.x2 = bg_w - 1;
+ part_coords.y1 = radius;
+ part_coords.y2 = bg_h - radius - 1;
+ lv_area_align(coords, &part_coords, LV_ALIGN_CENTER, 0, 0);
+ _lv_area_intersect(&part_area, &part_coords, draw_area);
+ draw_bg_grad_simple(ctx, coords, &part_area, &dsc->bg_grad, false);
+ }
+}
+
static void draw_bg_img(lv_draw_sdl_ctx_t * ctx, const lv_area_t * coords, const lv_area_t * draw_area,
const lv_draw_rect_dsc_t * dsc)
{
+ LV_UNUSED(draw_area);
if(SKIP_IMAGE(dsc)) return;
lv_img_src_t src_type = lv_img_src_get_type(dsc->bg_img_src);
@@ -521,8 +744,8 @@ static void draw_border_generic(lv_draw_sdl_ctx_t * ctx, const lv_area_t * outer
lv_coord_t frag_size = LV_MAX(radius, max_side);
SDL_Texture * texture = lv_draw_sdl_texture_cache_get(ctx, &key, sizeof(key), NULL);
if(texture == NULL) {
- /* Create a mask texture with size of (frag_size * 2 + 3) */
- const lv_area_t frag_area = {0, 0, frag_size * 2 + 2, frag_size * 2 + 2};
+ /* Create a mask texture with size of (frag_size * 2 + FRAG_SPACING) */
+ const lv_area_t frag_area = {0, 0, frag_size * 2 + FRAG_SPACING - 1, frag_size * 2 + FRAG_SPACING - 1};
/*Create mask for the outer area*/
int16_t mask_ids[2] = {LV_MASK_ID_INV, LV_MASK_ID_INV};
@@ -595,7 +818,7 @@ static void frag_render_borders(SDL_Renderer * renderer, SDL_Texture * frag, lv_
lv_coord_t dh = lv_area_get_height(&dst_area);
if(full) {
lv_coord_t sy = (lv_coord_t)(dst_area.y1 - border_area.y1);
- SDL_Rect src_rect = {frag_size + 1, frag_size + 3 + sy, 1, dh};
+ SDL_Rect src_rect = {frag_size + 1, frag_size + FRAG_SPACING + sy, 1, dh};
SDL_RenderCopy(renderer, frag, &src_rect, &dst_rect);
}
else {
@@ -634,7 +857,7 @@ static void frag_render_borders(SDL_Renderer * renderer, SDL_Texture * frag, lv_
lv_coord_t dw = lv_area_get_width(&dst_area);
if(full) {
lv_coord_t sx = (lv_coord_t)(dst_area.x1 - border_area.x1);
- SDL_Rect src_rect = {frag_size + 3 + sx, frag_size + 1, dw, 1};
+ SDL_Rect src_rect = {frag_size + FRAG_SPACING + sx, frag_size + 1, dw, 1};
SDL_RenderCopy(renderer, frag, &src_rect, &dst_rect);
}
else {
@@ -682,6 +905,38 @@ static lv_draw_rect_bg_key_t rect_bg_key_create(lv_coord_t radius, lv_coord_t si
return key;
}
+static lv_draw_rect_grad_frag_key_t rect_grad_frag_key_create(const lv_grad_dsc_t * grad, lv_coord_t w, lv_coord_t h,
+ lv_coord_t radius)
+{
+ lv_draw_rect_grad_frag_key_t key;
+ SDL_memset(&key, 0, sizeof(key));
+ key.magic = LV_GPU_CACHE_KEY_MAGIC_RECT_GRAD;
+ key.stops_count = grad->stops_count;
+ key.dir = grad->dir;
+ for(uint8_t i = 0; i < grad->stops_count; i++) {
+ key.stops[i].frac = grad->stops[i].frac;
+ key.stops[i].color = grad->stops[i].color;
+ }
+ key.w = w;
+ key.h = h;
+ key.radius = radius;
+ return key;
+}
+
+static lv_draw_rect_grad_strip_key_t rect_grad_strip_key_create(const lv_grad_dsc_t * grad)
+{
+ lv_draw_rect_grad_strip_key_t key;
+ SDL_memset(&key, 0, sizeof(key));
+ key.magic = LV_GPU_CACHE_KEY_MAGIC_RECT_GRAD;
+ key.stops_count = grad->stops_count;
+ key.dir = grad->dir;
+ for(uint8_t i = 0; i < grad->stops_count; i++) {
+ key.stops[i].frac = grad->stops[i].frac;
+ key.stops[i].color = grad->stops[i].color;
+ }
+ return key;
+}
+
static lv_draw_rect_shadow_key_t rect_shadow_key_create(lv_coord_t radius, lv_coord_t size, lv_coord_t blur)
{
lv_draw_rect_shadow_key_t key;
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl_rect.h b/lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl_rect.h
index 1e9be3445..3472af31b 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl_rect.h
+++ b/lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl_rect.h
@@ -59,6 +59,11 @@ typedef struct lv_draw_sdl_rect_header_t {
SDL_Texture * lv_draw_sdl_rect_bg_frag_obtain(lv_draw_sdl_ctx_t * ctx, lv_coord_t radius);
+SDL_Texture * lv_draw_sdl_rect_grad_frag_obtain(lv_draw_sdl_ctx_t * ctx, const lv_grad_dsc_t * grad, lv_coord_t w,
+ lv_coord_t h, lv_coord_t radius);
+
+SDL_Texture * lv_draw_sdl_rect_grad_strip_obtain(lv_draw_sdl_ctx_t * ctx, const lv_grad_dsc_t * grad);
+
void lv_draw_sdl_rect_bg_frag_draw_corners(lv_draw_sdl_ctx_t * ctx, SDL_Texture * frag, lv_coord_t frag_size,
const lv_area_t * coords, const lv_area_t * clip, bool full);
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl_texture_cache.h b/lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl_texture_cache.h
index dc8b578e6..1bbf17cd8 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl_texture_cache.h
+++ b/lib/libesp32_lvgl/lvgl/src/draw/sdl/lv_draw_sdl_texture_cache.h
@@ -50,6 +50,7 @@ typedef enum {
LV_GPU_CACHE_KEY_MAGIC_RECT_BG = 0x31,
LV_GPU_CACHE_KEY_MAGIC_RECT_SHADOW = 0x32,
LV_GPU_CACHE_KEY_MAGIC_RECT_BORDER = 0x33,
+ LV_GPU_CACHE_KEY_MAGIC_RECT_GRAD = 0x34,
LV_GPU_CACHE_KEY_MAGIC_FONT_GLYPH = 0x41,
LV_GPU_CACHE_KEY_MAGIC_MASK = 0x51,
} lv_sdl_cache_key_magic_t;
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/stm32_dma2d/lv_gpu_stm32_dma2d.c b/lib/libesp32_lvgl/lvgl/src/draw/stm32_dma2d/lv_gpu_stm32_dma2d.c
index 4eb1940ef..908909df8 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/stm32_dma2d/lv_gpu_stm32_dma2d.c
+++ b/lib/libesp32_lvgl/lvgl/src/draw/stm32_dma2d/lv_gpu_stm32_dma2d.c
@@ -11,100 +11,71 @@
#if LV_USE_GPU_STM32_DMA2D
-#include LV_GPU_DMA2D_CMSIS_INCLUDE
-
/*********************
* DEFINES
*********************/
-
#if LV_COLOR_16_SWAP
- // TODO: F7 has red blue swap bit in control register for all layers and output
- #error "Can't use DMA2D with LV_COLOR_16_SWAP 1"
+ // Note: DMA2D red/blue swap (RBS) works for all color modes
+ #define RBS_BIT 1U
+#else
+ #define RBS_BIT 0U
#endif
-#if LV_COLOR_DEPTH == 8
- #error "Can't use DMA2D with LV_COLOR_DEPTH == 8"
-#endif
+#define CACHE_ROW_SIZE 32U // cache row size in Bytes
+
+// For code/implementation discussion refer to https://github.com/lvgl/lvgl/issues/3714#issuecomment-1365187036
+// astyle --options=lvgl/scripts/code-format.cfg --ignore-exclude-errors lvgl/src/draw/stm32_dma2d/*.c lvgl/src/draw/stm32_dma2d/*.h
#if LV_COLOR_DEPTH == 16
- #define LV_DMA2D_COLOR_FORMAT LV_DMA2D_RGB565
+ const dma2d_color_format_t LvglColorFormat = RGB565;
#elif LV_COLOR_DEPTH == 32
- #define LV_DMA2D_COLOR_FORMAT LV_DMA2D_ARGB8888
+ const dma2d_color_format_t LvglColorFormat = ARGB8888;
#else
- /*Can't use GPU with other formats*/
+ #error "Cannot use DMA2D with LV_COLOR_DEPTH other than 16 or 32"
#endif
-/**********************
- * TYPEDEFS
- **********************/
-
-/**********************
- * STATIC PROTOTYPES
- **********************/
-
-static void lv_draw_stm32_dma2d_blend_fill(lv_color_t * dest_buf, lv_coord_t dest_stride, const lv_area_t * fill_area,
- lv_color_t color);
-
-
-static void lv_draw_stm32_dma2d_blend_map(lv_color_t * dest_buf, const lv_area_t * dest_area, lv_coord_t dest_stride,
- const lv_color_t * src_buf, lv_coord_t src_stride, lv_opa_t opa);
-
-static void lv_draw_stm32_dma2d_img_decoded(lv_draw_ctx_t * draw, const lv_draw_img_dsc_t * dsc,
- const lv_area_t * coords, const uint8_t * map_p, lv_img_cf_t color_format);
-
-
-static void invalidate_cache(void);
-
-/**********************
- * STATIC VARIABLES
- **********************/
-
-/**********************
- * MACROS
- **********************/
-
-/**********************
- * GLOBAL FUNCTIONS
- **********************/
+static bool isDma2dInProgess = false; // indicates whether DMA2D transfer *initiated here* is in progress
/**
* Turn on the peripheral and set output color mode, this only needs to be done once
*/
void lv_draw_stm32_dma2d_init(void)
{
- /*Enable DMA2D clock*/
+ // Enable DMA2D clock
#if defined(STM32F4) || defined(STM32F7)
- RCC->AHB1ENR |= RCC_AHB1ENR_DMA2DEN;
+ RCC->AHB1ENR |= RCC_AHB1ENR_DMA2DEN; // enable DMA2D
#elif defined(STM32H7)
RCC->AHB3ENR |= RCC_AHB3ENR_DMA2DEN;
#else
# warning "LVGL can't enable the clock of DMA2D"
#endif
- /*Wait for hardware access to complete*/
+ // Wait for hardware access to complete
__asm volatile("DSB\n");
- /*Delay after setting peripheral clock*/
+ // Delay after setting peripheral clock
volatile uint32_t temp = RCC->AHB1ENR;
LV_UNUSED(temp);
- /*set output colour mode*/
- DMA2D->OPFCCR = LV_DMA2D_COLOR_FORMAT;
+ // AHB master timer configuration
+ DMA2D->AMTCR = 0; // AHB bus guaranteed dead time disabled
+#if defined(LV_STM32_DMA2D_TEST)
+ _lv_gpu_stm32_dwt_init(); // init µs timer
+#endif
}
-
void lv_draw_stm32_dma2d_ctx_init(lv_disp_drv_t * drv, lv_draw_ctx_t * draw_ctx)
{
-
lv_draw_sw_init_ctx(drv, draw_ctx);
lv_draw_stm32_dma2d_ctx_t * dma2d_draw_ctx = (lv_draw_sw_ctx_t *)draw_ctx;
dma2d_draw_ctx->blend = lv_draw_stm32_dma2d_blend;
- // dma2d_draw_ctx->base_draw.draw_img_decoded = lv_draw_stm32_dma2d_img_decoded;
- dma2d_draw_ctx->base_draw.wait_for_finish = lv_gpu_stm32_dma2d_wait_cb;
+ dma2d_draw_ctx->base_draw.draw_img_decoded = lv_draw_stm32_dma2d_img_decoded;
+ //dma2d_draw_ctx->base_draw.draw_img = lv_draw_stm32_dma2d_img;
+ // Note: currently it does not make sense use lv_gpu_stm32_dma2d_wait_cb() since waiting starts right after the dma2d transfer
+ //dma2d_draw_ctx->base_draw.wait_for_finish = lv_gpu_stm32_dma2d_wait_cb;
dma2d_draw_ctx->base_draw.buffer_copy = lv_draw_stm32_dma2d_buffer_copy;
-
}
void lv_draw_stm32_dma2d_ctx_deinit(lv_disp_drv_t * drv, lv_draw_ctx_t * draw_ctx)
@@ -113,153 +84,660 @@ void lv_draw_stm32_dma2d_ctx_deinit(lv_disp_drv_t * drv, lv_draw_ctx_t * draw_ct
LV_UNUSED(draw_ctx);
}
-
-void lv_draw_stm32_dma2d_blend(lv_draw_ctx_t * draw_ctx, const lv_draw_sw_blend_dsc_t * dsc)
+static void lv_draw_stm32_dma2d_blend(lv_draw_ctx_t * draw_ctx, const lv_draw_sw_blend_dsc_t * dsc)
{
- lv_area_t blend_area;
- if(!_lv_area_intersect(&blend_area, dsc->blend_area, draw_ctx->clip_area)) return;
+ if(dsc->blend_mode != LV_BLEND_MODE_NORMAL) {
+ lv_draw_sw_blend_basic(draw_ctx, dsc);
+ return;
+ }
+ // Note: x1 must be zero. Otherwise, there is no way to correctly calculate dest_stride.
+ //LV_ASSERT_MSG(draw_ctx->buf_area->x1 == 0); // critical?
+ // Both draw buffer start address and buffer size *must* be 32-byte aligned since draw buffer cache is being invalidated.
+ //uint32_t drawBufferLength = lv_area_get_size(draw_ctx->buf_area) * sizeof(lv_color_t);
+ //LV_ASSERT_MSG(drawBufferLength % CACHE_ROW_SIZE == 0); // critical, but this is not the way to test it
+ //LV_ASSERT_MSG((uint32_t)draw_ctx->buf % CACHE_ROW_SIZE == 0, "draw_ctx.buf is not 32B aligned"); // critical?
- bool done = false;
-
- if(dsc->mask_buf == NULL && dsc->blend_mode == LV_BLEND_MODE_NORMAL && lv_area_get_size(&blend_area) > 100) {
- lv_coord_t dest_stride = lv_area_get_width(draw_ctx->buf_area);
-
- lv_color_t * dest_buf = draw_ctx->buf;
- dest_buf += dest_stride * (blend_area.y1 - draw_ctx->buf_area->y1) + (blend_area.x1 - draw_ctx->buf_area->x1);
-
- const lv_color_t * src_buf = dsc->src_buf;
- if(src_buf) {
- lv_draw_sw_blend_basic(draw_ctx, dsc);
- lv_coord_t src_stride;
- src_stride = lv_area_get_width(dsc->blend_area);
- src_buf += src_stride * (blend_area.y1 - dsc->blend_area->y1) + (blend_area.x1 - dsc->blend_area->x1);
- lv_area_move(&blend_area, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
- lv_draw_stm32_dma2d_blend_map(dest_buf, &blend_area, dest_stride, src_buf, src_stride, dsc->opa);
- done = true;
- }
- else if(dsc->opa >= LV_OPA_MAX) {
- lv_area_move(&blend_area, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
- lv_draw_stm32_dma2d_blend_fill(dest_buf, dest_stride, &blend_area, dsc->color);
- done = true;
- }
+ if(dsc->src_buf) {
+ // For performance reasons, both source buffer start address and buffer size *should* be 32-byte aligned since source buffer cache is being cleaned.
+ //uint32_t srcBufferLength = lv_area_get_size(dsc->blend_area) * sizeof(lv_color_t);
+ //LV_ASSERT_MSG(srcBufferLength % CACHE_ROW_SIZE == 0); // FIXME: assert fails (performance, non-critical)
+ //LV_ASSERT_MSG((uint32_t)dsc->src_buf % CACHE_ROW_SIZE == 0); // FIXME: assert fails (performance, non-critical)
}
- if(!done) lv_draw_sw_blend_basic(draw_ctx, dsc);
-}
+ lv_area_t draw_area;
+ if(!_lv_area_intersect(&draw_area, dsc->blend_area, draw_ctx->clip_area)) return;
+ // + draw_ctx->buf_area has the entire draw buffer location
+ // + draw_ctx->clip_area has the current draw buffer location
+ // + dsc->blend_area has the location of the area intended to be painted - image etc.
+ // + draw_area has the area actually being painted
+ // All coordinates are relative to the screen.
-void lv_draw_stm32_dma2d_buffer_copy(lv_draw_ctx_t * draw_ctx,
- void * dest_buf, lv_coord_t dest_stride, const lv_area_t * dest_area,
- void * src_buf, lv_coord_t src_stride, const lv_area_t * src_area)
-{
- LV_UNUSED(draw_ctx);
- lv_draw_stm32_dma2d_blend_map(dest_buf, dest_area, dest_stride, src_buf, src_stride, LV_OPA_MAX);
-}
+ const lv_opa_t * mask = dsc->mask_buf;
+ if(dsc->mask_buf && dsc->mask_res == LV_DRAW_MASK_RES_TRANSP) return;
+ else if(dsc->mask_res == LV_DRAW_MASK_RES_FULL_COVER) mask = NULL;
-static void lv_draw_stm32_dma2d_img_decoded(lv_draw_ctx_t * draw_ctx, const lv_draw_img_dsc_t * dsc,
- const lv_area_t * coords, const uint8_t * map_p, lv_img_cf_t color_format)
-{
- /*TODO basic ARGB8888 image can be handles here*/
+ lv_coord_t dest_stride = lv_area_get_width(draw_ctx->buf_area);
+ if(mask != NULL) {
+ // For performance reasons, both mask buffer start address and buffer size *should* be 32-byte aligned since mask buffer cache is being cleaned.
+ //uint32_t srcBufferLength = lv_area_get_size(dsc->mask_area) * sizeof(lv_opa_t);
+ //LV_ASSERT_MSG(srcBufferLength % CACHE_ROW_SIZE == 0); // FIXME: assert fails (performance, non-critical)
+ //LV_ASSERT_MSG((uint32_t)mask % CACHE_ROW_SIZE == 0); // FIXME: assert fails (performance, non-critical)
- lv_draw_sw_img_decoded(draw_ctx, dsc, coords, map_p, color_format);
-}
+ lv_coord_t mask_stride = lv_area_get_width(dsc->mask_area);
+ lv_point_t mask_offset = lv_area_get_offset(dsc->mask_area, &draw_area); // mask offset in relation to draw_area
-static void lv_draw_stm32_dma2d_blend_fill(lv_color_t * dest_buf, lv_coord_t dest_stride, const lv_area_t * fill_area,
- lv_color_t color)
-{
- /*Simply fill an area*/
- int32_t area_w = lv_area_get_width(fill_area);
- int32_t area_h = lv_area_get_height(fill_area);
- invalidate_cache();
+ if(dsc->src_buf == NULL) { // 93.5%
+ lv_area_move(&draw_area, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
+ _lv_draw_stm32_dma2d_blend_paint(draw_ctx->buf, dest_stride, &draw_area, mask, mask_stride, &mask_offset, dsc->color,
+ dsc->opa);
+ }
+ else { // 0.2%
+ // note: (x)RGB dsc->src_buf does not carry alpha channel bytes,
+ // alpha channel bytes are carried in dsc->mask_buf
+#if LV_COLOR_DEPTH == 32
+ lv_coord_t src_stride = lv_area_get_width(dsc->blend_area);
+ lv_point_t src_offset = lv_area_get_offset(dsc->blend_area, &draw_area); // source image offset in relation to draw_area
+ lv_coord_t draw_width = lv_area_get_width(&draw_area);
+ lv_coord_t draw_height = lv_area_get_height(&draw_area);
- DMA2D->CR = 0x30000;
- DMA2D->OMAR = (uint32_t)dest_buf;
- /*as input color mode is same as output we don't need to convert here do we?*/
- DMA2D->OCOLR = color.full;
- DMA2D->OOR = dest_stride - area_w;
- DMA2D->NLR = (area_w << DMA2D_NLR_PL_Pos) | (area_h << DMA2D_NLR_NL_Pos);
+ // merge mask alpha bytes with src RGB bytes
+ // TODO: optimize by reading 4 or 8 mask bytes at a time
+ mask += (mask_stride * mask_offset.y) + mask_offset.x;
+ lv_color_t * src_buf = (lv_color_t *)dsc->src_buf;
+ src_buf += (src_stride * src_offset.y) + src_offset.x;
+ uint16_t mask_buffer_offset = mask_stride - draw_width;
+ uint16_t src_buffer_offset = src_stride - draw_width;
+ while(draw_height > 0) {
+ draw_height--;
+ for(uint16_t x = 0; x < draw_width; x++) {
+ (*src_buf).ch.alpha = *mask;
+ src_buf++;
+ mask++;
+ }
+ mask += mask_buffer_offset;
+ src_buf += src_buffer_offset;
+ }
- /*start transfer*/
- DMA2D->CR |= DMA2D_CR_START_Msk;
+ lv_area_move(&draw_area, -draw_ctx->buf_area->x1,
+ -draw_ctx->buf_area->y1); // translate the screen draw area to the origin of the buffer area
+ _lv_draw_stm32_dma2d_blend_map(draw_ctx->buf, dest_stride, &draw_area, dsc->src_buf, src_stride, &src_offset, dsc->opa,
+ ARGB8888, false);
+#else
+ // Note: 16-bit bitmap hardware blending with mask and background is possible, but requires a temp 24 or 32-bit buffer to combine bitmap with mask first.
-}
-
-
-static void lv_draw_stm32_dma2d_blend_map(lv_color_t * dest_buf, const lv_area_t * dest_area, lv_coord_t dest_stride,
- const lv_color_t * src_buf, lv_coord_t src_stride, lv_opa_t opa)
-{
-
- /*Simple copy*/
- int32_t dest_w = lv_area_get_width(dest_area);
- int32_t dest_h = lv_area_get_height(dest_area);
-
- invalidate_cache();
- if(opa >= LV_OPA_MAX) {
- DMA2D->CR = 0;
- /*copy output colour mode, this register controls both input and output colour format*/
- DMA2D->FGPFCCR = LV_DMA2D_COLOR_FORMAT;
- DMA2D->FGMAR = (uint32_t)src_buf;
- DMA2D->FGOR = src_stride - dest_w;
- DMA2D->OMAR = (uint32_t)dest_buf;
- DMA2D->OOR = dest_stride - dest_w;
- DMA2D->NLR = (dest_w << DMA2D_NLR_PL_Pos) | (dest_h << DMA2D_NLR_NL_Pos);
-
- /*start transfer*/
- DMA2D->CR |= DMA2D_CR_START_Msk;
+ lv_draw_sw_blend_basic(draw_ctx, dsc); // (e.g. Shop Items)
+ // clean cache after software drawing - this does not help since this is not the only place where buffer is written without dma2d
+ // lv_coord_t draw_width = lv_area_get_width(&draw_area);
+ // lv_coord_t draw_height = lv_area_get_height(&draw_area);
+ // uint32_t dest_address = (uint32_t)(draw_ctx->buf + (dest_stride * draw_area.y1) + draw_area.x1);
+ // _lv_gpu_stm32_dma2d_clean_cache(dest_address, dest_stride - draw_width, draw_width, draw_height, sizeof(lv_color_t));
+#endif
+ }
}
else {
- DMA2D->CR = 0x20000;
-
- DMA2D->BGPFCCR = LV_DMA2D_COLOR_FORMAT;
- DMA2D->BGMAR = (uint32_t)dest_buf;
- DMA2D->BGOR = dest_stride - dest_w;
-
- DMA2D->FGPFCCR = (uint32_t)LV_DMA2D_COLOR_FORMAT
- /*alpha mode 2, replace with foreground * alpha value*/
- | (2 << DMA2D_FGPFCCR_AM_Pos)
- /*alpha value*/
- | (opa << DMA2D_FGPFCCR_ALPHA_Pos);
- DMA2D->FGMAR = (uint32_t)src_buf;
- DMA2D->FGOR = src_stride - dest_w;
-
- DMA2D->OMAR = (uint32_t)dest_buf;
- DMA2D->OOR = dest_stride - dest_w;
- DMA2D->NLR = (dest_w << DMA2D_NLR_PL_Pos) | (dest_h << DMA2D_NLR_NL_Pos);
-
- /*start transfer*/
- DMA2D->CR |= DMA2D_CR_START_Msk;
+ if(dsc->src_buf == NULL) { // 6.1%
+ lv_area_move(&draw_area, -draw_ctx->buf_area->x1,
+ -draw_ctx->buf_area->y1); // translate the screen draw area to the origin of the buffer area
+ _lv_draw_stm32_dma2d_blend_fill(draw_ctx->buf, dest_stride, &draw_area, dsc->color, dsc->opa);
+ }
+ else { // 0.2%
+ lv_coord_t src_stride = lv_area_get_width(dsc->blend_area);
+ lv_point_t src_offset = lv_area_get_offset(dsc->blend_area, &draw_area); // source image offset in relation to draw_area
+ lv_area_move(&draw_area, -draw_ctx->buf_area->x1,
+ -draw_ctx->buf_area->y1); // translate the screen draw area to the origin of the buffer area
+ _lv_draw_stm32_dma2d_blend_map(draw_ctx->buf, dest_stride, &draw_area, dsc->src_buf, src_stride, &src_offset, dsc->opa,
+ LvglColorFormat, true);
+ }
}
}
-void lv_gpu_stm32_dma2d_wait_cb(lv_draw_ctx_t * draw_ctx)
+// Does dest_area = intersect(draw_ctx->clip_area, src_area) ?
+// See: https://github.com/lvgl/lvgl/issues/3714#issuecomment-1331710788
+static void lv_draw_stm32_dma2d_buffer_copy(lv_draw_ctx_t * draw_ctx, void * dest_buf, lv_coord_t dest_stride,
+ const lv_area_t * dest_area, void * src_buf, lv_coord_t src_stride, const lv_area_t * src_area)
+{
+ // Both draw buffer start address and buffer size *must* be 32-byte aligned since draw buffer cache is being invalidated.
+ //uint32_t drawBufferLength = lv_area_get_size(draw_ctx->buf_area) * sizeof(lv_color_t);
+ //LV_ASSERT_MSG(drawBufferLength % CACHE_ROW_SIZE == 0); // critical, but this is not the way to test it
+ //LV_ASSERT_MSG((uint32_t)draw_ctx->buf % CACHE_ROW_SIZE == 0, "draw_ctx.buf is not 32B aligned"); // critical?
+ // FIXME:
+ // 1. Both src_buf and dest_buf pixel size *must* be known to use DMA2D.
+ // 2. Verify both buffers start addresses and lengths are 32-byte (cache row size) aligned.
+ LV_UNUSED(draw_ctx);
+ lv_point_t src_offset = lv_area_get_offset(src_area, dest_area);
+ // FIXME: use lv_area_move(dest_area, -dest_area->x1, -dest_area->y1) here ?
+ // TODO: It is assumed that dest_buf and src_buf buffers are of lv_color_t type. Verify it, this assumption may be incorrect.
+ _lv_draw_stm32_dma2d_blend_map((const lv_color_t *)dest_buf, dest_stride, dest_area, (const lv_color_t *)src_buf,
+ src_stride, &src_offset, 0xff, LvglColorFormat, true);
+ // TODO: Investigate if output buffer cache needs to be invalidated. It depends on what the destination buffer is and how it is used next - by dma2d or not.
+ _lv_gpu_stm32_dma2d_await_dma_transfer_finish(NULL); // TODO: is this line needed here?
+}
+
+static void lv_draw_stm32_dma2d_img_decoded(lv_draw_ctx_t * draw_ctx, const lv_draw_img_dsc_t * img_dsc,
+ const lv_area_t * coords, const uint8_t * src_buf, lv_img_cf_t color_format)
+{
+ if(draw_ctx->draw_img_decoded == NULL) return;
+ lv_area_t draw_area;
+ lv_area_copy(&draw_area, draw_ctx->clip_area);
+
+ bool mask_any = lv_draw_mask_is_any(&draw_area);
+ bool transform = img_dsc->angle != 0 || img_dsc->zoom != LV_IMG_ZOOM_NONE;
+ const dma2d_color_format_t bitmapColorFormat = lv_color_format_to_dma2d_color_format(color_format);
+ const bool ignoreBitmapAlpha = (color_format == LV_IMG_CF_RGBX8888);
+
+ if(!mask_any && !transform && bitmapColorFormat != UNSUPPORTED && img_dsc->recolor_opa == LV_OPA_TRANSP) {
+ // simple bitmap blending, optionally with supported color format conversion - handle directly by dma2d
+ lv_coord_t dest_stride = lv_area_get_width(draw_ctx->buf_area);
+ lv_coord_t src_stride = lv_area_get_width(coords);
+ lv_point_t src_offset = lv_area_get_offset(coords, &draw_area); // source image offset in relation to draw_area
+ lv_area_move(&draw_area, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
+ _lv_draw_stm32_dma2d_blend_map(draw_ctx->buf, dest_stride, &draw_area, src_buf, src_stride, &src_offset,
+ img_dsc->opa, bitmapColorFormat, ignoreBitmapAlpha);
+ }
+ else {
+ // all more complex cases which require additional image transformations
+ lv_draw_sw_img_decoded(draw_ctx, img_dsc, coords, src_buf, color_format);
+
+ }
+}
+
+static lv_point_t lv_area_get_offset(const lv_area_t * area1, const lv_area_t * area2)
+{
+ lv_point_t offset = {x: area2->x1 - area1->x1, y: area2->y1 - area1->y1};
+ return offset;
+}
+
+static dma2d_color_format_t lv_color_format_to_dma2d_color_format(lv_img_cf_t color_format)
+{
+ switch(color_format) {
+ case LV_IMG_CF_RGBA8888:
+ // note: LV_IMG_CF_RGBA8888 is actually ARGB8888
+ return ARGB8888;
+ case LV_IMG_CF_RGBX8888:
+ // note: LV_IMG_CF_RGBX8888 is actually XRGB8888
+ return ARGB8888;
+ case LV_IMG_CF_RGB565:
+ return RGB565;
+ case LV_IMG_CF_TRUE_COLOR:
+ return LvglColorFormat;
+ case LV_IMG_CF_TRUE_COLOR_ALPHA:
+#if LV_COLOR_DEPTH == 16
+ // bitmap color format is 24b ARGB8565 - dma2d unsupported
+ return UNSUPPORTED;
+#elif LV_COLOR_DEPTH == 32
+ return ARGB8888;
+#else
+ // unknown bitmap color format
+ return UNSUPPORTED;
+#endif
+ default:
+ return UNSUPPORTED;
+ }
+}
+
+static lv_res_t lv_draw_stm32_dma2d_img(lv_draw_ctx_t * draw_ctx, const lv_draw_img_dsc_t * img_dsc,
+ const lv_area_t * src_area,
+ const void * src)
+{
+ //if(lv_img_src_get_type(src) != LV_IMG_SRC_VARIABLE) return LV_RES_INV;
+ return LV_RES_INV;
+ if(img_dsc->opa <= LV_OPA_MIN) return LV_RES_OK;
+ const lv_img_dsc_t * img = src;
+ const dma2d_color_format_t bitmapColorFormat = lv_color_format_to_dma2d_color_format(img->header.cf);
+ const bool ignoreBitmapAlpha = (img->header.cf == LV_IMG_CF_RGBX8888);
+
+ if(bitmapColorFormat == UNSUPPORTED || img_dsc->angle != 0 || img_dsc->zoom != LV_IMG_ZOOM_NONE) {
+ return LV_RES_INV; // sorry, dma2d can handle this
+ }
+
+ // FIXME: handle dsc.pivot, dsc.recolor, dsc.blend_mode
+ // FIXME: src pixel size *must* be known to use DMA2D
+ // FIXME: If image is drawn by SW, then output cache needs to be cleaned next. Currently it is not possible.
+ // Both draw buffer start address and buffer size *must* be 32-byte aligned since draw buffer cache is being invalidated.
+ //uint32_t drawBufferLength = lv_area_get_size(draw_ctx->buf_area) * sizeof(lv_color_t);
+ //LV_ASSERT_MSG(drawBufferLength % CACHE_ROW_SIZE == 0); // critical, but this is not the way to test it
+ //LV_ASSERT_MSG((uint32_t)draw_ctx->buf % CACHE_ROW_SIZE == 0, "draw_ctx.buf is not 32B aligned"); // critical?
+
+ // For performance reasons, both source buffer start address and buffer size *should* be 32-byte aligned since source buffer cache is being cleaned.
+ //uint32_t srcBufferLength = lv_area_get_size(src_area) * sizeof(lv_color_t); // TODO: verify src pixel size = sizeof(lv_color_t)
+ //LV_ASSERT_MSG(srcBufferLength % CACHE_ROW_SIZE == 0); // FIXME: assert fails (performance, non-critical)
+ //LV_ASSERT_MSG((uint32_t)src % CACHE_ROW_SIZE == 0); // FIXME: assert fails (performance, non-critical)
+
+ lv_area_t draw_area;
+ if(!_lv_area_intersect(&draw_area, src_area, draw_ctx->clip_area)) return LV_RES_OK;
+
+ lv_coord_t dest_stride = lv_area_get_width(draw_ctx->buf_area);
+ lv_point_t src_offset = lv_area_get_offset(src_area, &draw_area); // source image offset in relation to draw_area
+ lv_area_move(&draw_area, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
+ _lv_draw_stm32_dma2d_blend_map(draw_ctx->buf, dest_stride, &draw_area, img->data, img->header.w,
+ &src_offset, img_dsc->opa, bitmapColorFormat, ignoreBitmapAlpha);
+ return LV_RES_OK;
+}
+
+static void lv_gpu_stm32_dma2d_wait_cb(lv_draw_ctx_t * draw_ctx)
{
lv_disp_t * disp = _lv_refr_get_disp_refreshing();
- if(disp->driver && disp->driver->wait_cb) {
- while(DMA2D->CR & DMA2D_CR_START_Msk) {
- disp->driver->wait_cb(disp->driver);
- }
- }
- else {
- while(DMA2D->CR & DMA2D_CR_START_Msk);
- }
+ _lv_gpu_stm32_dma2d_await_dma_transfer_finish(disp->driver);
lv_draw_sw_wait_for_finish(draw_ctx);
-
}
/**********************
* STATIC FUNCTIONS
**********************/
-static void invalidate_cache(void)
+/**
+ * @brief Fills draw_area with specified color.
+ * @param color color to be painted, note: alpha is ignored
+ */
+LV_STM32_DMA2D_STATIC void _lv_draw_stm32_dma2d_blend_fill(const lv_color_t * dest_buf, lv_coord_t dest_stride,
+ const lv_area_t * draw_area, lv_color_t color, lv_opa_t opa)
{
- lv_disp_t * disp = _lv_refr_get_disp_refreshing();
- if(disp->driver->clean_dcache_cb) disp->driver->clean_dcache_cb(disp->driver);
- else {
-#if __CORTEX_M >= 0x07
- if((SCB->CCR) & (uint32_t)SCB_CCR_DC_Msk)
- SCB_CleanInvalidateDCache();
+ LV_ASSERT_MSG(!isDma2dInProgess, "dma2d transfer has not finished"); // critical
+ lv_coord_t draw_width = lv_area_get_width(draw_area);
+ lv_coord_t draw_height = lv_area_get_height(draw_area);
+
+ _lv_gpu_stm32_dma2d_await_dma_transfer_finish(NULL);
+
+ if(opa >= LV_OPA_MAX) {
+ DMA2D->CR = 0x3UL << DMA2D_CR_MODE_Pos; // Register-to-memory (no FG nor BG, only output stage active)
+
+ DMA2D->OPFCCR = LvglColorFormat;
+#if defined(DMA2D_OPFCCR_RBS_Pos)
+ DMA2D->OPFCCR |= (RBS_BIT << DMA2D_OPFCCR_RBS_Pos);
#endif
+ DMA2D->OMAR = (uint32_t)(dest_buf + (dest_stride * draw_area->y1) + draw_area->x1);
+ DMA2D->OOR = dest_stride - draw_width; // out buffer offset
+ // Note: unlike FGCOLR and BGCOLR, OCOLR bits must match DMA2D_OUTPUT_COLOR, alpha can be specified
+#if RBS_BIT
+ // swap red/blue bits
+ DMA2D->OCOLR = (color.ch.blue << 11) | (color.ch.green_l << 5 | color.ch.green_h << 8) | (color.ch.red);
+#else
+ DMA2D->OCOLR = color.full;
+#endif
+ }
+ else {
+ DMA2D->CR = 0x2UL << DMA2D_CR_MODE_Pos; // Memory-to-memory with blending (FG and BG fetch with PFC and blending)
+
+ DMA2D->FGPFCCR = A8;
+ DMA2D->FGPFCCR |= (opa << DMA2D_FGPFCCR_ALPHA_Pos);
+ // Alpha Mode 1: Replace original foreground image alpha channel value by FGPFCCR.ALPHA
+ DMA2D->FGPFCCR |= (0x1UL << DMA2D_FGPFCCR_AM_Pos);
+ //DMA2D->FGPFCCR |= (RBS_BIT << DMA2D_FGPFCCR_RBS_Pos);
+
+ // Note: in Alpha Mode 1 FGMAR and FGOR are not used to supply foreground A8 bytes,
+ // those bytes are replaced by constant ALPHA defined in FGPFCCR
+ DMA2D->FGMAR = (uint32_t)dest_buf;
+ DMA2D->FGOR = dest_stride;
+ DMA2D->FGCOLR = lv_color_to32(color) & 0x00ffffff; // swap FGCOLR R/B bits if FGPFCCR.RBS (RBS_BIT) bit is set
+
+ DMA2D->BGPFCCR = LvglColorFormat;
+#if defined(DMA2D_BGPFCCR_RBS_Pos)
+ DMA2D->BGPFCCR |= (RBS_BIT << DMA2D_BGPFCCR_RBS_Pos);
+#endif
+ DMA2D->BGMAR = (uint32_t)(dest_buf + (dest_stride * draw_area->y1) + draw_area->x1);
+ DMA2D->BGOR = dest_stride - draw_width;
+ DMA2D->BGCOLR = 0; // used in A4 and A8 modes only
+ _lv_gpu_stm32_dma2d_clean_cache(DMA2D->BGMAR, DMA2D->BGOR, draw_width, draw_height, sizeof(lv_color_t));
+
+ DMA2D->OPFCCR = LvglColorFormat;
+#if defined(DMA2D_OPFCCR_RBS_Pos)
+ DMA2D->OPFCCR |= (RBS_BIT << DMA2D_OPFCCR_RBS_Pos);
+#endif
+ DMA2D->OMAR = DMA2D->BGMAR;
+ DMA2D->OOR = DMA2D->BGOR;
+ DMA2D->OCOLR = 0;
+ }
+ // PL - pixel per lines (14 bit), NL - number of lines (16 bit)
+ DMA2D->NLR = (draw_width << DMA2D_NLR_PL_Pos) | (draw_height << DMA2D_NLR_NL_Pos);
+
+ _lv_gpu_stm32_dma2d_start_dma_transfer();
+}
+
+/**
+ * @brief Draws src (foreground) map on dst (background) map.
+ * @param src_offset src offset in relation to dst, useful when src is larger than draw_area
+ * @param opa constant opacity to be applied
+ * @param bitmapColorCode bitmap color type
+ * @param ignoreAlpha if TRUE, bitmap src alpha channel is ignored
+ */
+LV_STM32_DMA2D_STATIC void _lv_draw_stm32_dma2d_blend_map(const lv_color_t * dest_buf, lv_coord_t dest_stride,
+ const lv_area_t * draw_area, const void * src_buf, lv_coord_t src_stride, const lv_point_t * src_offset, lv_opa_t opa,
+ dma2d_color_format_t src_color_format, bool ignore_src_alpha)
+{
+ LV_ASSERT_MSG(!isDma2dInProgess, "dma2d transfer has not finished"); // critical
+ if(opa <= LV_OPA_MIN || src_color_format == UNSUPPORTED) return;
+ lv_coord_t draw_width = lv_area_get_width(draw_area);
+ lv_coord_t draw_height = lv_area_get_height(draw_area);
+ bool bitmapHasOpacity = !ignore_src_alpha && (src_color_format == ARGB8888 || src_color_format == ARGB1555 ||
+ src_color_format == ARGB4444);
+
+ if(opa >= LV_OPA_MAX) opa = 0xff;
+
+ uint8_t srcBpp; // source bytes per pixel
+ switch(src_color_format) {
+ case ARGB8888:
+ srcBpp = 4;
+ break;
+ case RGB888:
+ srcBpp = 3;
+ break;
+ case RGB565:
+ case ARGB1555:
+ case ARGB4444:
+ srcBpp = 2;
+ break;
+ default:
+ LV_LOG_ERROR("unsupported color format");
+ return;
+ }
+
+ _lv_gpu_stm32_dma2d_await_dma_transfer_finish(NULL);
+
+ DMA2D->FGPFCCR = src_color_format;
+
+ if(opa == 0xff && !bitmapHasOpacity) {
+ // no need to blend
+ if(src_color_format == LvglColorFormat) {
+ // no need to convert pixel format (PFC) either
+ DMA2D->CR = 0x0UL;
+ }
+ else {
+ DMA2D->CR = 0x1UL << DMA2D_CR_MODE_Pos; // Memory-to-memory with PFC (FG fetch only with FG PFC active)
+ }
+ // Alpha Mode 0: No modification of the foreground image alpha channel value
+ }
+ else {
+ // blend
+ DMA2D->CR = 0x2UL << DMA2D_CR_MODE_Pos; // Memory-to-memory with blending (FG and BG fetch with PFC and blending)
+ DMA2D->FGPFCCR |= (opa << DMA2D_FGPFCCR_ALPHA_Pos);
+ if(bitmapHasOpacity) {
+ // Alpha Mode 2: Replace original foreground image alpha channel value by FGPFCCR.ALPHA multiplied with original alpha channel value
+ DMA2D->FGPFCCR |= (0x2UL << DMA2D_FGPFCCR_AM_Pos);
+ }
+ else {
+ // Alpha Mode 1: Replace original foreground image alpha channel value by FGPFCCR.ALPHA
+ DMA2D->FGPFCCR |= (0x1UL << DMA2D_FGPFCCR_AM_Pos);
+ }
+ }
+#if defined(DMA2D_FGPFCCR_RBS_Pos)
+ DMA2D->FGPFCCR |= (RBS_BIT << DMA2D_FGPFCCR_RBS_Pos);
+#endif
+ DMA2D->FGMAR = ((uint32_t)src_buf) + srcBpp * ((src_stride * src_offset->y) + src_offset->x);
+ DMA2D->FGOR = src_stride - draw_width;
+ DMA2D->FGCOLR = 0; // used in A4 and A8 modes only
+ _lv_gpu_stm32_dma2d_clean_cache(DMA2D->FGMAR, DMA2D->FGOR, draw_width, draw_height, srcBpp);
+
+ DMA2D->OPFCCR = LvglColorFormat;
+#if defined(DMA2D_OPFCCR_RBS_Pos)
+ DMA2D->OPFCCR |= (RBS_BIT << DMA2D_OPFCCR_RBS_Pos);
+#endif
+ DMA2D->OMAR = (uint32_t)(dest_buf + (dest_stride * draw_area->y1) + draw_area->x1);
+ DMA2D->OOR = dest_stride - draw_width;
+ DMA2D->OCOLR = 0;
+
+ if(opa != 0xff || bitmapHasOpacity) {
+ // use background (BG*) registers
+ DMA2D->BGPFCCR = LvglColorFormat;
+#if defined(DMA2D_BGPFCCR_RBS_Pos)
+ DMA2D->BGPFCCR |= (RBS_BIT << DMA2D_BGPFCCR_RBS_Pos);
+#endif
+ DMA2D->BGMAR = DMA2D->OMAR;
+ DMA2D->BGOR = DMA2D->OOR;
+ DMA2D->BGCOLR = 0; // used in A4 and A8 modes only
+ _lv_gpu_stm32_dma2d_clean_cache(DMA2D->BGMAR, DMA2D->BGOR, draw_width, draw_height, sizeof(lv_color_t));
+ }
+
+ // PL - pixel per lines (14 bit), NL - number of lines (16 bit)
+ DMA2D->NLR = (draw_width << DMA2D_NLR_PL_Pos) | (draw_height << DMA2D_NLR_NL_Pos);
+
+ _lv_gpu_stm32_dma2d_start_dma_transfer();
+}
+
+/**
+ * @brief Paints solid color with alpha mask with additional constant opacity. Useful e.g. for painting anti-aliased fonts.
+ * @param src_offset src offset in relation to dst, useful when src (alpha mask) is larger than draw_area
+ * @param color color to paint, note: alpha is ignored
+ * @param opa constant opacity to be applied
+ */
+LV_STM32_DMA2D_STATIC void _lv_draw_stm32_dma2d_blend_paint(const lv_color_t * dest_buf, lv_coord_t dest_stride,
+ const lv_area_t * draw_area, const lv_opa_t * mask_buf, lv_coord_t mask_stride, const lv_point_t * mask_offset,
+ lv_color_t color, lv_opa_t opa)
+{
+ LV_ASSERT_MSG(!isDma2dInProgess, "dma2d transfer has not finished"); // critical
+ lv_coord_t draw_width = lv_area_get_width(draw_area);
+ lv_coord_t draw_height = lv_area_get_height(draw_area);
+
+ _lv_gpu_stm32_dma2d_await_dma_transfer_finish(NULL);
+
+ DMA2D->CR = 0x2UL << DMA2D_CR_MODE_Pos; // Memory-to-memory with blending (FG and BG fetch with PFC and blending)
+
+ DMA2D->FGPFCCR = A8;
+ if(opa < LV_OPA_MAX) {
+ DMA2D->FGPFCCR |= (opa << DMA2D_FGPFCCR_ALPHA_Pos);
+ DMA2D->FGPFCCR |= (0x2UL <<
+ DMA2D_FGPFCCR_AM_Pos); // Alpha Mode: Replace original foreground image alpha channel value by FGPFCCR.ALPHA multiplied with original alpha channel value
+ }
+ //DMA2D->FGPFCCR |= (RBS_BIT << DMA2D_FGPFCCR_RBS_Pos);
+ DMA2D->FGMAR = (uint32_t)(mask_buf + (mask_stride * mask_offset->y) + mask_offset->x);
+ DMA2D->FGOR = mask_stride - draw_width;
+ DMA2D->FGCOLR = lv_color_to32(color) & 0x00ffffff; // swap FGCOLR R/B bits if FGPFCCR.RBS (RBS_BIT) bit is set
+ _lv_gpu_stm32_dma2d_clean_cache(DMA2D->FGMAR, DMA2D->FGOR, draw_width, draw_height, sizeof(lv_opa_t));
+
+ DMA2D->BGPFCCR = LvglColorFormat;
+#if defined(DMA2D_BGPFCCR_RBS_Pos)
+ DMA2D->BGPFCCR |= (RBS_BIT << DMA2D_BGPFCCR_RBS_Pos);
+#endif
+ DMA2D->BGMAR = (uint32_t)(dest_buf + (dest_stride * draw_area->y1) + draw_area->x1);
+ DMA2D->BGOR = dest_stride - draw_width;
+ DMA2D->BGCOLR = 0; // used in A4 and A8 modes only
+ _lv_gpu_stm32_dma2d_clean_cache(DMA2D->BGMAR, DMA2D->BGOR, draw_width, draw_height, sizeof(lv_color_t));
+
+ DMA2D->OPFCCR = LvglColorFormat;
+#if defined(DMA2D_OPFCCR_RBS_Pos)
+ DMA2D->OPFCCR |= (RBS_BIT << DMA2D_OPFCCR_RBS_Pos);
+#endif
+ DMA2D->OMAR = DMA2D->BGMAR;
+ DMA2D->OOR = DMA2D->BGOR;
+ DMA2D->OCOLR = 0;
+ // PL - pixel per lines (14 bit), NL - number of lines (16 bit)
+ DMA2D->NLR = (draw_width << DMA2D_NLR_PL_Pos) | (draw_height << DMA2D_NLR_NL_Pos);
+
+ _lv_gpu_stm32_dma2d_start_dma_transfer();
+}
+
+/**
+ * @brief Copies src (foreground) map to the dst (background) map.
+ * @param src_offset src offset in relation to dst, useful when src is larger than draw_area
+ */
+LV_STM32_DMA2D_STATIC void _lv_draw_stm32_dma2d_copy_buffer(const lv_color_t * dest_buf, lv_coord_t dest_stride,
+ const lv_area_t * draw_area, const lv_color_t * src_buf, lv_coord_t src_stride, const lv_point_t * src_offset)
+{
+ LV_ASSERT_MSG(!isDma2dInProgess, "dma2d transfer has not finished"); // critical
+ lv_coord_t draw_width = lv_area_get_width(draw_area);
+ lv_coord_t draw_height = lv_area_get_height(draw_area);
+
+ _lv_gpu_stm32_dma2d_await_dma_transfer_finish(NULL);
+
+ DMA2D->CR = 0x0UL; // Memory-to-memory (FG fetch only)
+
+ DMA2D->FGPFCCR = LvglColorFormat;
+#if defined(DMA2D_FGPFCCR_RBS_Pos)
+ DMA2D->FGPFCCR |= (RBS_BIT << DMA2D_FGPFCCR_RBS_Pos);
+#endif
+ DMA2D->FGMAR = (uint32_t)(src_buf + (src_stride * src_offset->y) + src_offset->x);
+ DMA2D->FGOR = src_stride - draw_width;
+ DMA2D->FGCOLR = 0; // used in A4 and A8 modes only
+ _lv_gpu_stm32_dma2d_clean_cache(DMA2D->FGMAR, DMA2D->FGOR, draw_width, draw_height, sizeof(lv_color_t));
+
+ // Note BG* registers do not need to be set up since BG is not used
+
+ DMA2D->OPFCCR = LvglColorFormat;
+#if defined(DMA2D_OPFCCR_RBS_Pos)
+ DMA2D->OPFCCR |= (RBS_BIT << DMA2D_OPFCCR_RBS_Pos);
+#endif
+ DMA2D->OMAR = (uint32_t)(dest_buf + (dest_stride * draw_area->y1) + draw_area->x1);
+ DMA2D->OOR = dest_stride - draw_width;
+ DMA2D->OCOLR = 0;
+
+ // PL - pixel per lines (14 bit), NL - number of lines (16 bit)
+ DMA2D->NLR = (draw_width << DMA2D_NLR_PL_Pos) | (draw_height << DMA2D_NLR_NL_Pos);
+
+ _lv_gpu_stm32_dma2d_start_dma_transfer();
+}
+
+LV_STM32_DMA2D_STATIC void _lv_gpu_stm32_dma2d_start_dma_transfer(void)
+{
+ LV_ASSERT_MSG(!isDma2dInProgess, "dma2d transfer has not finished");
+ isDma2dInProgess = true;
+ DMA2D->IFCR = 0x3FU; // trigger ISR flags reset
+ // Note: cleaning output buffer cache is needed only when buffer may be misaligned or adjacent area may have been drawn in sw-fashion, e.g. using lv_draw_sw_blend_basic()
+#if LV_COLOR_DEPTH == 16
+ _lv_gpu_stm32_dma2d_clean_cache(DMA2D->OMAR, DMA2D->OOR, (DMA2D->NLR & DMA2D_NLR_PL_Msk) >> DMA2D_NLR_PL_Pos,
+ (DMA2D->NLR & DMA2D_NLR_NL_Msk) >> DMA2D_NLR_NL_Pos, sizeof(lv_color_t));
+#endif
+ DMA2D->CR |= DMA2D_CR_START;
+ // Note: for some reason mask buffer gets damaged during transfer if waiting is postponed
+ _lv_gpu_stm32_dma2d_await_dma_transfer_finish(NULL); // FIXME: this line should not be needed here, but it is
+}
+
+LV_STM32_DMA2D_STATIC void _lv_gpu_stm32_dma2d_await_dma_transfer_finish(lv_disp_drv_t * disp_drv)
+{
+ if(disp_drv && disp_drv->wait_cb) {
+ while((DMA2D->CR & DMA2D_CR_START) != 0U) {
+ disp_drv->wait_cb(disp_drv);
+ }
+ }
+ else {
+ while((DMA2D->CR & DMA2D_CR_START) != 0U);
+ }
+
+ __IO uint32_t isrFlags = DMA2D->ISR;
+
+ if(isrFlags & DMA2D_ISR_CEIF) {
+ LV_LOG_ERROR("DMA2D config error");
+ }
+
+ if(isrFlags & DMA2D_ISR_TEIF) {
+ LV_LOG_ERROR("DMA2D transfer error");
+ }
+
+ DMA2D->IFCR = 0x3FU; // trigger ISR flags reset
+
+ if(isDma2dInProgess) {
+ // invalidate output buffer cached memory ONLY after DMA2D transfer
+ //_lv_gpu_stm32_dma2d_invalidate_cache(DMA2D->OMAR, DMA2D->OOR, (DMA2D->NLR & DMA2D_NLR_PL_Msk) >> DMA2D_NLR_PL_Pos, (DMA2D->NLR & DMA2D_NLR_NL_Msk) >> DMA2D_NLR_NL_Pos, sizeof(lv_color_t));
+ isDma2dInProgess = false;
}
}
+LV_STM32_DMA2D_STATIC void _lv_gpu_stm32_dma2d_invalidate_cache(uint32_t address, lv_coord_t offset, lv_coord_t width,
+ lv_coord_t height, uint8_t pixel_size)
+{
+#if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
+ if(((SCB->CCR) & SCB_CCR_DC_Msk) == 0) return; // L1 data cache is disabled
+ uint16_t stride = pixel_size * (width + offset); // in bytes
+ uint16_t ll = pixel_size * width; // line length in bytes
+ uint32_t n = 0; // address of the next cache row after the last invalidated row
+ lv_coord_t h = 0;
+
+ __DSB();
+
+ while(h < height) {
+ uint32_t a = address + (h * stride);
+ uint32_t e = a + ll; // end address, address of the first byte after the current line
+ a &= ~(CACHE_ROW_SIZE - 1U);
+ if(a < n) a = n; // prevent the previous last cache row from being invalidated again
+
+ while(a < e) {
+ SCB->DCIMVAC = a;
+ a += CACHE_ROW_SIZE;
+ }
+
+ n = a;
+ h++;
+ };
+
+ __DSB();
+ __ISB();
+#endif
+}
+
+LV_STM32_DMA2D_STATIC void _lv_gpu_stm32_dma2d_clean_cache(uint32_t address, lv_coord_t offset, lv_coord_t width,
+ lv_coord_t height, uint8_t pixel_size)
+{
+#if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
+ if(((SCB->CCR) & SCB_CCR_DC_Msk) == 0) return; // L1 data cache is disabled
+ uint16_t stride = pixel_size * (width + offset); // in bytes
+ uint16_t ll = pixel_size * width; // line length in bytes
+ uint32_t n = 0; // address of the next cache row after the last cleaned row
+ lv_coord_t h = 0;
+ __DSB();
+
+ while(h < height) {
+ uint32_t a = address + (h * stride);
+ uint32_t e = a + ll; // end address, address of the first byte after the current line
+ a &= ~(CACHE_ROW_SIZE - 1U);
+ if(a < n) a = n; // prevent the previous last cache row from being cleaned again
+
+ while(a < e) {
+ SCB->DCCMVAC = a;
+ a += CACHE_ROW_SIZE;
+ }
+
+ n = a;
+ h++;
+ };
+
+ __DSB();
+ __ISB();
+#endif
+}
+
+// initialize µs timer
+LV_STM32_DMA2D_STATIC bool _lv_gpu_stm32_dwt_init(void)
+{
+ // disable TRC
+ CoreDebug->DEMCR &= ~CoreDebug_DEMCR_TRCENA_Msk;
+ // enable TRC
+ CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
+
+#if defined(__CORTEX_M) && (__CORTEX_M == 7U)
+ DWT->LAR = 0xC5ACCE55;
+#endif
+ // disable clock cycle counter
+ DWT->CTRL &= ~DWT_CTRL_CYCCNTENA_Msk;
+ // enable clock cycle counter
+ DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
+
+ // reset the clock cycle counter value
+ DWT->CYCCNT = 0;
+
+ // 3 NO OPERATION instructions
+ __ASM volatile("NOP");
+ __ASM volatile("NOP");
+ __ASM volatile("NOP");
+
+ // check if clock cycle counter has started
+ if(DWT->CYCCNT) {
+ return true; // clock cycle counter started
+ }
+ else {
+ return false; // clock cycle counter not started
+ }
+}
+
+// get elapsed µs since reset
+LV_STM32_DMA2D_STATIC uint32_t _lv_gpu_stm32_dwt_get_us(void)
+{
+ uint32_t us = (DWT->CYCCNT * 1000000) / HAL_RCC_GetHCLKFreq();
+ return us;
+}
+
+// reset µs timer
+LV_STM32_DMA2D_STATIC void _lv_gpu_stm32_dwt_reset(void)
+{
+ DWT->CYCCNT = 0;
+}
+
#endif
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/stm32_dma2d/lv_gpu_stm32_dma2d.h b/lib/libesp32_lvgl/lvgl/src/draw/stm32_dma2d/lv_gpu_stm32_dma2d.h
index fa7070e2a..5ecce6deb 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/stm32_dma2d/lv_gpu_stm32_dma2d.h
+++ b/lib/libesp32_lvgl/lvgl/src/draw/stm32_dma2d/lv_gpu_stm32_dma2d.h
@@ -10,52 +10,83 @@
extern "C" {
#endif
-/*********************
- * INCLUDES
- *********************/
#include "../../misc/lv_color.h"
#include "../../hal/lv_hal_disp.h"
#include "../sw/lv_draw_sw.h"
#if LV_USE_GPU_STM32_DMA2D
+/*********************
+ * INCLUDES
+ *********************/
+#include LV_GPU_DMA2D_CMSIS_INCLUDE
+
/*********************
* DEFINES
*********************/
-
-#define LV_DMA2D_ARGB8888 0
-#define LV_DMA2D_RGB888 1
-#define LV_DMA2D_RGB565 2
-#define LV_DMA2D_ARGB1555 3
-#define LV_DMA2D_ARGB4444 4
+#if defined(LV_STM32_DMA2D_TEST)
+// removes "static" modifier for some internal methods in order to test them
+#define LV_STM32_DMA2D_STATIC
+#else
+#define LV_STM32_DMA2D_STATIC static
+#endif
/**********************
* TYPEDEFS
**********************/
+enum dma2d_color_format {
+ ARGB8888 = 0x0,
+ RGB888 = 0x01,
+ RGB565 = 0x02,
+ ARGB1555 = 0x03,
+ ARGB4444 = 0x04,
+ A8 = 0x09,
+ UNSUPPORTED = 0xff,
+};
+typedef enum dma2d_color_format dma2d_color_format_t;
typedef lv_draw_sw_ctx_t lv_draw_stm32_dma2d_ctx_t;
-
struct _lv_disp_drv_t;
/**********************
* GLOBAL PROTOTYPES
**********************/
-
-/**
- * Turn on the peripheral and set output color mode, this only needs to be done once
- */
void lv_draw_stm32_dma2d_init(void);
-
void lv_draw_stm32_dma2d_ctx_init(struct _lv_disp_drv_t * drv, lv_draw_ctx_t * draw_ctx);
-
void lv_draw_stm32_dma2d_ctx_deinit(struct _lv_disp_drv_t * drv, lv_draw_ctx_t * draw_ctx);
+static void lv_draw_stm32_dma2d_blend(lv_draw_ctx_t * draw_ctx, const lv_draw_sw_blend_dsc_t * dsc);
+static void lv_draw_stm32_dma2d_buffer_copy(lv_draw_ctx_t * draw_ctx,
+ void * dest_buf, lv_coord_t dest_stride, const lv_area_t * dest_area,
+ void * src_buf, lv_coord_t src_stride, const lv_area_t * src_area);
+static lv_res_t lv_draw_stm32_dma2d_img(lv_draw_ctx_t * draw_ctx, const lv_draw_img_dsc_t * img_dsc,
+ const lv_area_t * src_area, const void * src);
+static void lv_gpu_stm32_dma2d_wait_cb(lv_draw_ctx_t * draw_ctx);
+static void lv_draw_stm32_dma2d_img_decoded(lv_draw_ctx_t * draw_ctx, const lv_draw_img_dsc_t * img_dsc,
+ const lv_area_t * coords, const uint8_t * src_buf, lv_img_cf_t color_format);
+static dma2d_color_format_t lv_color_format_to_dma2d_color_format(lv_img_cf_t color_format);
+static lv_point_t lv_area_get_offset(const lv_area_t * area1, const lv_area_t * area2);
-void lv_draw_stm32_dma2d_blend(lv_draw_ctx_t * draw_ctx, const lv_draw_sw_blend_dsc_t * dsc);
-
-void lv_draw_stm32_dma2d_buffer_copy(lv_draw_ctx_t * draw_ctx,
- void * dest_buf, lv_coord_t dest_stride, const lv_area_t * dest_area,
- void * src_buf, lv_coord_t src_stride, const lv_area_t * src_area);
-
-void lv_gpu_stm32_dma2d_wait_cb(lv_draw_ctx_t * draw_ctx);
+/**********************
+ * STATIC PROTOTYPES
+ **********************/
+LV_STM32_DMA2D_STATIC void _lv_draw_stm32_dma2d_blend_fill(const lv_color_t * dst_buf, lv_coord_t dst_stride,
+ const lv_area_t * draw_area, lv_color_t color, lv_opa_t opa);
+LV_STM32_DMA2D_STATIC void _lv_draw_stm32_dma2d_blend_map(const lv_color_t * dest_buf, lv_coord_t dest_stride,
+ const lv_area_t * draw_area, const void * src_buf, lv_coord_t src_stride, const lv_point_t * src_offset, lv_opa_t opa,
+ dma2d_color_format_t src_color_format, bool ignore_src_alpha);
+LV_STM32_DMA2D_STATIC void _lv_draw_stm32_dma2d_blend_paint(const lv_color_t * dst_buf, lv_coord_t dst_stride,
+ const lv_area_t * draw_area, const lv_opa_t * mask_buf, lv_coord_t mask_stride, const lv_point_t * mask_offset,
+ lv_color_t color, lv_opa_t opa);
+LV_STM32_DMA2D_STATIC void _lv_draw_stm32_dma2d_copy_buffer(const lv_color_t * dest_buf, lv_coord_t dest_stride,
+ const lv_area_t * draw_area, const lv_color_t * src_buf, lv_coord_t src_stride, const lv_point_t * src_offset);
+LV_STM32_DMA2D_STATIC void _lv_gpu_stm32_dma2d_await_dma_transfer_finish(lv_disp_drv_t * disp_drv);
+LV_STM32_DMA2D_STATIC void _lv_gpu_stm32_dma2d_start_dma_transfer(void);
+LV_STM32_DMA2D_STATIC void _lv_gpu_stm32_dma2d_invalidate_cache(uint32_t address, lv_coord_t offset,
+ lv_coord_t width, lv_coord_t height, uint8_t pixel_size);
+LV_STM32_DMA2D_STATIC void _lv_gpu_stm32_dma2d_clean_cache(uint32_t address, lv_coord_t offset, lv_coord_t width,
+ lv_coord_t height, uint8_t pixel_size);
+LV_STM32_DMA2D_STATIC bool _lv_gpu_stm32_dwt_init(void);
+LV_STM32_DMA2D_STATIC void _lv_gpu_stm32_dwt_reset(void);
+LV_STM32_DMA2D_STATIC uint32_t _lv_gpu_stm32_dwt_get_us(void);
/**********************
* MACROS
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw_blend.c b/lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw_blend.c
index 428aba62c..bff0a8f19 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw_blend.c
+++ b/lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw_blend.c
@@ -103,7 +103,7 @@ void lv_draw_sw_blend(lv_draw_ctx_t * draw_ctx, const lv_draw_sw_blend_dsc_t * d
LV_ATTRIBUTE_FAST_MEM void lv_draw_sw_blend_basic(lv_draw_ctx_t * draw_ctx, const lv_draw_sw_blend_dsc_t * dsc)
{
- const lv_opa_t * mask;
+ lv_opa_t * mask;
if(dsc->mask_buf == NULL) mask = NULL;
if(dsc->mask_buf && dsc->mask_res == LV_DRAW_MASK_RES_TRANSP) return;
else if(dsc->mask_res == LV_DRAW_MASK_RES_FULL_COVER) mask = NULL;
@@ -129,7 +129,6 @@ LV_ATTRIBUTE_FAST_MEM void lv_draw_sw_blend_basic(lv_draw_ctx_t * draw_ctx, cons
}
}
-
const lv_color_t * src_buf = dsc->src_buf;
lv_coord_t src_stride;
if(src_buf) {
@@ -142,8 +141,18 @@ LV_ATTRIBUTE_FAST_MEM void lv_draw_sw_blend_basic(lv_draw_ctx_t * draw_ctx, cons
lv_coord_t mask_stride;
if(mask) {
+ /*Round the values in the mask if anti-aliasing is disabled*/
+ if(disp->driver->antialiasing == 0) {
+ int32_t mask_size = lv_area_get_size(dsc->mask_area);
+ int32_t i;
+ for(i = 0; i < mask_size; i++) {
+ mask[i] = mask[i] > 128 ? LV_OPA_COVER : LV_OPA_TRANSP;
+ }
+ }
+
mask_stride = lv_area_get_width(dsc->mask_area);
mask += mask_stride * (blend_area.y1 - dsc->mask_area->y1) + (blend_area.x1 - dsc->mask_area->x1);
+
}
else {
mask_stride = 0;
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw_letter.c b/lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw_letter.c
index 9522888c9..7caa74912 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw_letter.c
+++ b/lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw_letter.c
@@ -489,8 +489,8 @@ static void draw_letter_subpx(lv_draw_ctx_t * draw_ctx, const lv_draw_label_dsc_
#endif
#if LV_FONT_SUBPX_BGR
- res_color.ch.blue = (uint32_t)((uint32_t)txt_rgb[0] * font_rgb[0] + (bg_rgb[0] * (255 - font_rgb[0]))) >> 8;
- res_color.ch.red = (uint32_t)((uint32_t)txt_rgb[2] * font_rgb[2] + (bg_rgb[2] * (255 - font_rgb[2]))) >> 8;
+ res_color.ch.red = (uint32_t)((uint16_t)txt_rgb[0] * font_rgb[2] + (bg_rgb[0] * (255 - font_rgb[2]))) >> 8;
+ res_color.ch.blue = (uint32_t)((uint16_t)txt_rgb[2] * font_rgb[0] + (bg_rgb[2] * (255 - font_rgb[0]))) >> 8;
#else
res_color.ch.red = (uint32_t)((uint16_t)txt_rgb[0] * font_rgb[0] + (bg_rgb[0] * (255 - font_rgb[0]))) >> 8;
res_color.ch.blue = (uint32_t)((uint16_t)txt_rgb[2] * font_rgb[2] + (bg_rgb[2] * (255 - font_rgb[2]))) >> 8;
diff --git a/lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw_transform.c b/lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw_transform.c
index 80b1e6dea..204503a4f 100644
--- a/lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw_transform.c
+++ b/lib/libesp32_lvgl/lvgl/src/draw/sw/lv_draw_sw_transform.c
@@ -122,8 +122,8 @@ void lv_draw_sw_transform(lv_draw_ctx_t * draw_ctx, const lv_area_t * dest_area,
xs_step_256 = (256 * xs_diff) / (dest_w - 1);
ys_step_256 = (256 * ys_diff) / (dest_w - 1);
}
- int32_t xs_ups = xs1_ups;
- int32_t ys_ups = ys1_ups;
+ int32_t xs_ups = xs1_ups + 0x80;
+ int32_t ys_ups = ys1_ups + 0x80;
if(draw_dsc->antialias == 0) {
switch(cf) {
@@ -180,7 +180,7 @@ static void rgb_no_aa(const uint8_t * src, lv_coord_t src_w, lv_coord_t src_h, l
}
else {
-#if LV_COLOR_DEPTH == 8
+#if LV_COLOR_DEPTH == 1 || LV_COLOR_DEPTH == 8
const uint8_t * src_tmp = src;
src_tmp += ys_int * src_stride + xs_int;
cbuf[x].full = src_tmp[0];
@@ -221,7 +221,7 @@ static void argb_no_aa(const uint8_t * src, lv_coord_t src_w, lv_coord_t src_h,
const uint8_t * src_tmp = src;
src_tmp += (ys_int * src_stride * LV_IMG_PX_SIZE_ALPHA_BYTE) + xs_int * LV_IMG_PX_SIZE_ALPHA_BYTE;
-#if LV_COLOR_DEPTH == 8
+#if LV_COLOR_DEPTH == 1 || LV_COLOR_DEPTH == 8
cbuf[x].full = src_tmp[0];
#elif LV_COLOR_DEPTH == 16
cbuf[x].full = src_tmp[0] + (src_tmp[1] << 8);
@@ -396,7 +396,7 @@ static void argb_and_rgb_aa(const uint8_t * src, lv_coord_t src_w, lv_coord_t sr
if(abuf[x] == 0x00) continue;
-#if LV_COLOR_DEPTH == 8
+#if LV_COLOR_DEPTH == 1 || LV_COLOR_DEPTH == 8
c_base.full = px_base[0];
c_ver.full = px_ver[0];
c_hor.full = px_hor[0];
@@ -429,7 +429,7 @@ static void argb_and_rgb_aa(const uint8_t * src, lv_coord_t src_w, lv_coord_t sr
}
/*Partially out of the image*/
else {
-#if LV_COLOR_DEPTH == 8
+#if LV_COLOR_DEPTH == 1 || LV_COLOR_DEPTH == 8
cbuf[x].full = src_tmp[0];
#elif LV_COLOR_DEPTH == 16
cbuf[x].full = src_tmp[0] + (src_tmp[1] << 8);
diff --git a/lib/libesp32_lvgl/lvgl/src/extra/layouts/flex/lv_flex.c b/lib/libesp32_lvgl/lvgl/src/extra/layouts/flex/lv_flex.c
index 405a56b7f..a53c95e88 100644
--- a/lib/libesp32_lvgl/lvgl/src/extra/layouts/flex/lv_flex.c
+++ b/lib/libesp32_lvgl/lvgl/src/extra/layouts/flex/lv_flex.c
@@ -470,8 +470,14 @@ static void children_repos(lv_obj_t * cont, flex_t * f, int32_t item_first_id, i
}
}
- if(f->row) item->w_layout = 1;
- else item->h_layout = 1;
+ if(f->row) {
+ item->w_layout = 1;
+ item->h_layout = 0;
+ }
+ else {
+ item->h_layout = 1;
+ item->w_layout = 0;
+ }
if(s != area_get_main_size(&item->coords)) {
lv_obj_invalidate(item);
diff --git a/lib/libesp32_lvgl/lvgl/src/extra/libs/fsdrv/lv_fs_posix.c b/lib/libesp32_lvgl/lvgl/src/extra/libs/fsdrv/lv_fs_posix.c
index f988daeeb..e656288d3 100644
--- a/lib/libesp32_lvgl/lvgl/src/extra/libs/fsdrv/lv_fs_posix.c
+++ b/lib/libesp32_lvgl/lvgl/src/extra/libs/fsdrv/lv_fs_posix.c
@@ -104,15 +104,15 @@ static void * fs_open(lv_fs_drv_t * drv, const char * path, lv_fs_mode_t mode)
LV_UNUSED(drv);
uint32_t flags = 0;
- if(mode == LV_FS_MODE_WR) flags = O_WRONLY;
+ if(mode == LV_FS_MODE_WR) flags = O_WRONLY | O_CREAT;
else if(mode == LV_FS_MODE_RD) flags = O_RDONLY;
- else if(mode == (LV_FS_MODE_WR | LV_FS_MODE_RD)) flags = O_RDWR;
+ else if(mode == (LV_FS_MODE_WR | LV_FS_MODE_RD)) flags = O_RDWR | O_CREAT;
/*Make the path relative to the current directory (the projects root folder)*/
char buf[256];
lv_snprintf(buf, sizeof(buf), LV_FS_POSIX_PATH "%s", path);
- int f = open(buf, flags);
+ int f = open(buf, flags, 0666);
if(f < 0) return NULL;
return (void *)(lv_uintptr_t)f;
diff --git a/lib/libesp32_lvgl/lvgl/src/extra/libs/gif/gifdec.c b/lib/libesp32_lvgl/lvgl/src/extra/libs/gif/gifdec.c
index 68f50057e..3ee9b7194 100644
--- a/lib/libesp32_lvgl/lvgl/src/extra/libs/gif/gifdec.c
+++ b/lib/libesp32_lvgl/lvgl/src/extra/libs/gif/gifdec.c
@@ -160,6 +160,7 @@ static gd_GIF * gif_open(gd_GIF * gif_base)
#endif
}
gif->anim_start = f_gif_seek(gif, 0, LV_FS_SEEK_CUR);
+ gif->loop_count = -1;
goto ok;
fail:
f_gif_close(gif_base);
@@ -239,6 +240,7 @@ read_application_ext(gd_GIF *gif)
{
char app_id[8];
char app_auth_code[3];
+ uint16_t loop_count;
/* Discard block size (always 0x0B). */
f_gif_seek(gif, 1, LV_FS_SEEK_CUR);
@@ -249,7 +251,15 @@ read_application_ext(gd_GIF *gif)
if (!strncmp(app_id, "NETSCAPE", sizeof(app_id))) {
/* Discard block size (0x03) and constant byte (0x01). */
f_gif_seek(gif, 2, LV_FS_SEEK_CUR);
- gif->loop_count = read_num(gif);
+ loop_count = read_num(gif);
+ if(gif->loop_count < 0) {
+ if(loop_count == 0) {
+ gif->loop_count = 0;
+ }
+ else{
+ gif->loop_count = loop_count + 1;
+ }
+ }
/* Skip block terminator. */
f_gif_seek(gif, 1, LV_FS_SEEK_CUR);
} else if (gif->application) {
@@ -568,9 +578,16 @@ gd_get_frame(gd_GIF *gif)
dispose(gif);
f_gif_read(gif, &sep, 1);
while (sep != ',') {
- if (sep == ';')
- return 0;
- if (sep == '!')
+ if (sep == ';') {
+ f_gif_seek(gif, gif->anim_start, LV_FS_SEEK_SET);
+ if(gif->loop_count == 1 || gif->loop_count < 0) {
+ return 0;
+ }
+ else if(gif->loop_count > 1) {
+ gif->loop_count--;
+ }
+ }
+ else if (sep == '!')
read_ext(gif);
else return -1;
f_gif_read(gif, &sep, 1);
@@ -598,6 +615,7 @@ gd_render_frame(gd_GIF *gif, uint8_t *buffer)
void
gd_rewind(gd_GIF *gif)
{
+ gif->loop_count = -1;
f_gif_seek(gif, gif->anim_start, LV_FS_SEEK_SET);
}
diff --git a/lib/libesp32_lvgl/lvgl/src/extra/libs/gif/gifdec.h b/lib/libesp32_lvgl/lvgl/src/extra/libs/gif/gifdec.h
index 00f17c1da..b68fab5d4 100644
--- a/lib/libesp32_lvgl/lvgl/src/extra/libs/gif/gifdec.h
+++ b/lib/libesp32_lvgl/lvgl/src/extra/libs/gif/gifdec.h
@@ -29,7 +29,7 @@ typedef struct gd_GIF {
int32_t anim_start;
uint16_t width, height;
uint16_t depth;
- uint16_t loop_count;
+ int32_t loop_count;
gd_GCE gce;
gd_Palette *palette;
gd_Palette lct, gct;
diff --git a/lib/libesp32_lvgl/lvgl/src/extra/libs/gif/lv_gif.c b/lib/libesp32_lvgl/lvgl/src/extra/libs/gif/lv_gif.c
index 4cb2955e2..2bd9e013c 100644
--- a/lib/libesp32_lvgl/lvgl/src/extra/libs/gif/lv_gif.c
+++ b/lib/libesp32_lvgl/lvgl/src/extra/libs/gif/lv_gif.c
@@ -99,6 +99,8 @@ void lv_gif_restart(lv_obj_t * obj)
{
lv_gif_t * gifobj = (lv_gif_t *) obj;
gd_rewind(gifobj->gif);
+ lv_timer_resume(gifobj->timer);
+ lv_timer_reset(gifobj->timer);
}
/**********************
@@ -111,6 +113,7 @@ static void lv_gif_constructor(const lv_obj_class_t * class_p, lv_obj_t * obj)
lv_gif_t * gifobj = (lv_gif_t *) obj;
+ gifobj->gif = NULL;
gifobj->timer = lv_timer_create(next_frame_task_cb, 10, obj);
lv_timer_pause(gifobj->timer);
}
@@ -120,7 +123,8 @@ static void lv_gif_destructor(const lv_obj_class_t * class_p, lv_obj_t * obj)
LV_UNUSED(class_p);
lv_gif_t * gifobj = (lv_gif_t *) obj;
lv_img_cache_invalidate_src(&gifobj->imgdsc);
- gd_close_gif(gifobj->gif);
+ if(gifobj->gif)
+ gd_close_gif(gifobj->gif);
lv_timer_del(gifobj->timer);
}
@@ -136,14 +140,9 @@ static void next_frame_task_cb(lv_timer_t * t)
int has_next = gd_get_frame(gifobj->gif);
if(has_next == 0) {
/*It was the last repeat*/
- if(gifobj->gif->loop_count == 1) {
- lv_res_t res = lv_event_send(obj, LV_EVENT_READY, NULL);
- if(res != LV_FS_RES_OK) return;
- }
- else {
- if(gifobj->gif->loop_count > 1) gifobj->gif->loop_count--;
- gd_rewind(gifobj->gif);
- }
+ lv_res_t res = lv_event_send(obj, LV_EVENT_READY, NULL);
+ lv_timer_pause(t);
+ if(res != LV_FS_RES_OK) return;
}
gd_render_frame(gifobj->gif, (uint8_t *)gifobj->imgdsc.data);
diff --git a/lib/libesp32_lvgl/lvgl/src/extra/others/gridnav/lv_gridnav.c b/lib/libesp32_lvgl/lvgl/src/extra/others/gridnav/lv_gridnav.c
index 4eec637bd..505a977b8 100644
--- a/lib/libesp32_lvgl/lvgl/src/extra/others/gridnav/lv_gridnav.c
+++ b/lib/libesp32_lvgl/lvgl/src/extra/others/gridnav/lv_gridnav.c
@@ -217,6 +217,7 @@ static void gridnav_event_cb(lv_event_t * e)
if(dsc->focused_obj == NULL) dsc->focused_obj = find_first_focusable(obj);
if(dsc->focused_obj) {
lv_obj_add_state(dsc->focused_obj, LV_STATE_FOCUSED | LV_STATE_FOCUS_KEY);
+ lv_obj_clear_state(dsc->focused_obj, LV_STATE_PRESSED); /*Be sure the focuses obj is not stuck in pressed state*/
lv_obj_scroll_to_view(dsc->focused_obj, LV_ANIM_OFF);
}
}
diff --git a/lib/libesp32_lvgl/lvgl/src/extra/others/monkey/lv_monkey.c b/lib/libesp32_lvgl/lvgl/src/extra/others/monkey/lv_monkey.c
old mode 100755
new mode 100644
diff --git a/lib/libesp32_lvgl/lvgl/src/extra/others/monkey/lv_monkey.h b/lib/libesp32_lvgl/lvgl/src/extra/others/monkey/lv_monkey.h
old mode 100755
new mode 100644
diff --git a/lib/libesp32_lvgl/lvgl/src/extra/others/msg/lv_msg.c b/lib/libesp32_lvgl/lvgl/src/extra/others/msg/lv_msg.c
index 8fd434d06..d54279c08 100644
--- a/lib/libesp32_lvgl/lvgl/src/extra/others/msg/lv_msg.c
+++ b/lib/libesp32_lvgl/lvgl/src/extra/others/msg/lv_msg.c
@@ -94,6 +94,25 @@ void lv_msg_unsubscribe(void * s)
lv_mem_free(s);
}
+uint32_t lv_msg_unsubscribe_obj(uint32_t msg_id, lv_obj_t * obj)
+{
+ uint32_t cnt = 0;
+ sub_dsc_t * s = _lv_ll_get_head(&subs_ll);
+ while(s) {
+ sub_dsc_t * s_next = _lv_ll_get_next(&subs_ll, s);
+ if(s->callback == obj_notify_cb &&
+ (s->msg_id == LV_MSG_ID_ANY || s->msg_id == msg_id) &&
+ (obj == NULL || s->_priv_data == obj)) {
+ lv_msg_unsubscribe(s);
+ cnt++;
+ }
+
+ s = s_next;
+ }
+
+ return cnt;
+}
+
void lv_msg_send(uint32_t msg_id, const void * payload)
{
lv_msg_t m;
@@ -129,8 +148,6 @@ lv_msg_t * lv_event_get_msg(lv_event_t * e)
}
}
-
-
/**********************
* STATIC FUNCTIONS
**********************/
diff --git a/lib/libesp32_lvgl/lvgl/src/extra/others/msg/lv_msg.h b/lib/libesp32_lvgl/lvgl/src/extra/others/msg/lv_msg.h
index 11a55b5a7..0ac2f77d5 100644
--- a/lib/libesp32_lvgl/lvgl/src/extra/others/msg/lv_msg.h
+++ b/lib/libesp32_lvgl/lvgl/src/extra/others/msg/lv_msg.h
@@ -19,6 +19,8 @@ extern "C" {
/*********************
* DEFINES
*********************/
+#define LV_MSG_ID_ANY UINT32_MAX
+LV_EXPORT_CONST_INT(LV_MSG_ID_ANY);
/**********************
* TYPEDEFS
@@ -70,6 +72,14 @@ void * lv_msg_subsribe_obj(uint32_t msg_id, lv_obj_t * obj, void * user_data);
*/
void lv_msg_unsubscribe(void * s);
+/**
+ * Unsubscribe an object from a message ID
+ * @param msg_id the message ID to unsubcribe from or `LV_MSG_ID_ANY` for any message ID
+ * @param obj the object to unsubscribe or NULL for any object
+ * @return number of unsubscriptions
+ */
+uint32_t lv_msg_unsubscribe_obj(uint32_t msg_id, lv_obj_t * obj);
+
/**
* Send a message with a given ID and payload
* @param msg_id ID of the message to send
@@ -105,6 +115,17 @@ void * lv_msg_get_user_data(lv_msg_t * m);
*/
lv_msg_t * lv_event_get_msg(lv_event_t * e);
+/*Fix typo*/
+static inline void * lv_msg_subscribe(uint32_t msg_id, lv_msg_subscribe_cb_t cb, void * user_data)
+{
+ return lv_msg_subsribe(msg_id, cb, user_data);
+}
+
+static inline void * lv_msg_subscribe_obj(uint32_t msg_id, lv_obj_t * obj, void * user_data)
+{
+ return lv_msg_subsribe_obj(msg_id, obj, user_data);
+}
+
/**********************
* GLOBAL VARIABLES
**********************/
diff --git a/lib/libesp32_lvgl/lvgl/src/extra/widgets/animimg/lv_animimg.c b/lib/libesp32_lvgl/lvgl/src/extra/widgets/animimg/lv_animimg.c
index 135a8a4ba..072d02e05 100644
--- a/lib/libesp32_lvgl/lvgl/src/extra/widgets/animimg/lv_animimg.c
+++ b/lib/libesp32_lvgl/lvgl/src/extra/widgets/animimg/lv_animimg.c
@@ -64,7 +64,7 @@ lv_obj_t * lv_animimg_create(lv_obj_t * parent)
return obj;
}
-void lv_animimg_set_src(lv_obj_t * obj, lv_img_dsc_t * dsc[], uint8_t num)
+void lv_animimg_set_src(lv_obj_t * obj, const void * dsc[], uint8_t num)
{
LV_ASSERT_OBJ(obj, MY_CLASS);
lv_animimg_t * animimg = (lv_animimg_t *)obj;
diff --git a/lib/libesp32_lvgl/lvgl/src/extra/widgets/animimg/lv_animimg.h b/lib/libesp32_lvgl/lvgl/src/extra/widgets/animimg/lv_animimg.h
index 632949477..0ba01f239 100644
--- a/lib/libesp32_lvgl/lvgl/src/extra/widgets/animimg/lv_animimg.h
+++ b/lib/libesp32_lvgl/lvgl/src/extra/widgets/animimg/lv_animimg.h
@@ -37,7 +37,7 @@ typedef struct {
lv_img_t img;
lv_anim_t anim;
/*picture sequence */
- lv_img_dsc_t ** dsc;
+ const void ** dsc;
int8_t pic_count;
} lv_animimg_t;
@@ -69,7 +69,7 @@ lv_obj_t * lv_animimg_create(lv_obj_t * parent);
* @param dsc pointer to a series images
* @param num images' number
*/
-void lv_animimg_set_src(lv_obj_t * img, lv_img_dsc_t * dsc[], uint8_t num);
+void lv_animimg_set_src(lv_obj_t * img, const void * dsc[], uint8_t num);
/**
* Startup the image animation.
diff --git a/lib/libesp32_lvgl/lvgl/src/extra/widgets/chart/lv_chart.c b/lib/libesp32_lvgl/lvgl/src/extra/widgets/chart/lv_chart.c
index da6c18c0e..c5afb8b94 100644
--- a/lib/libesp32_lvgl/lvgl/src/extra/widgets/chart/lv_chart.c
+++ b/lib/libesp32_lvgl/lvgl/src/extra/widgets/chart/lv_chart.c
@@ -1182,7 +1182,6 @@ static void draw_series_bar(lv_obj_t * obj, lv_draw_ctx_t * draw_ctx)
const lv_area_t * clip_area_ori = draw_ctx->clip_area;
draw_ctx->clip_area = &clip_area;
-
lv_chart_t * chart = (lv_chart_t *)obj;
uint16_t i;
@@ -1200,6 +1199,7 @@ static void draw_series_bar(lv_obj_t * obj, lv_draw_ctx_t * draw_ctx)
int32_t ser_gap = ((int32_t)lv_obj_get_style_pad_column(obj,
LV_PART_ITEMS) * chart->zoom_x) >> 8; /*Gap between the columns on the ~same X*/
lv_coord_t col_w = (block_w - (ser_cnt - 1) * ser_gap) / ser_cnt;
+ if(col_w < 1) col_w = 1;
lv_coord_t border_w = lv_obj_get_style_border_width(obj, LV_PART_MAIN);
lv_coord_t x_ofs = pad_left - lv_obj_get_scroll_left(obj) + border_w;
@@ -1531,16 +1531,16 @@ static void draw_x_ticks(lv_obj_t * obj, lv_draw_ctx_t * draw_ctx, lv_chart_axis
lv_coord_t label_gap;
if(axis == LV_CHART_AXIS_PRIMARY_X) {
label_gap = t->label_en ? lv_obj_get_style_pad_bottom(obj, LV_PART_TICKS) : 0;
- y_ofs = obj->coords.y2;
+ y_ofs = obj->coords.y2 + 1;
}
else {
label_gap = t->label_en ? lv_obj_get_style_pad_top(obj, LV_PART_TICKS) : 0;
- y_ofs = obj->coords.y1;
+ y_ofs = obj->coords.y1 - 1;
}
if(axis == LV_CHART_AXIS_PRIMARY_X) {
if(y_ofs > draw_ctx->clip_area->y2) return;
- if(y_ofs + label_gap + label_dsc.font->line_height + t->major_len < draw_ctx->clip_area->y1) return;
+ if(y_ofs + label_gap + label_dsc.font->line_height + t->major_len < draw_ctx->clip_area->y1) return;
}
lv_draw_line_dsc_t line_dsc;
@@ -1634,7 +1634,6 @@ static void draw_x_ticks(lv_obj_t * obj, lv_draw_ctx_t * draw_ctx, lv_chart_axis
lv_event_send(obj, LV_EVENT_DRAW_PART_BEGIN, &part_draw_dsc);
}
-
if(p1.x + line_dsc.width / 2 >= obj->coords.x1 &&
p2.x - line_dsc.width / 2 <= obj->coords.x2) {
lv_draw_line(draw_ctx, &line_dsc, &p1, &p2);
diff --git a/lib/libesp32_lvgl/lvgl/src/extra/widgets/meter/lv_meter.c b/lib/libesp32_lvgl/lvgl/src/extra/widgets/meter/lv_meter.c
index 668ab97e9..1e651b572 100644
--- a/lib/libesp32_lvgl/lvgl/src/extra/widgets/meter/lv_meter.c
+++ b/lib/libesp32_lvgl/lvgl/src/extra/widgets/meter/lv_meter.c
@@ -612,6 +612,7 @@ static void draw_needles(lv_obj_t * obj, lv_draw_ctx_t * draw_ctx, const lv_area
if(angle > 3600) angle -= 3600;
img_dsc.angle = angle;
+ part_draw_dsc.id = LV_METER_DRAW_PART_NEEDLE_IMG;
part_draw_dsc.img_dsc = &img_dsc;
lv_event_send(obj, LV_EVENT_DRAW_PART_BEGIN, &part_draw_dsc);
diff --git a/lib/libesp32_lvgl/lvgl/src/hal/lv_hal_disp.c b/lib/libesp32_lvgl/lvgl/src/hal/lv_hal_disp.c
index 0dd8f6b30..10640a28a 100644
--- a/lib/libesp32_lvgl/lvgl/src/hal/lv_hal_disp.c
+++ b/lib/libesp32_lvgl/lvgl/src/hal/lv_hal_disp.c
@@ -23,9 +23,8 @@
#include "../draw/stm32_dma2d/lv_gpu_stm32_dma2d.h"
#include "../draw/swm341_dma2d/lv_gpu_swm341_dma2d.h"
#include "../draw/arm2d/lv_gpu_arm2d.h"
-#if LV_USE_GPU_NXP_PXP || LV_USE_GPU_NXP_VG_LITE
- #include "../draw/nxp/lv_gpu_nxp.h"
-#endif
+#include "../draw/nxp/vglite/lv_draw_vglite.h"
+#include "../draw/nxp/pxp/lv_draw_pxp.h"
#if LV_USE_THEME_DEFAULT
#include "../extra/themes/default/lv_theme_default.h"
@@ -105,10 +104,14 @@ void lv_disp_drv_init(lv_disp_drv_t * driver)
driver->draw_ctx_init = lv_draw_swm341_dma2d_ctx_init;
driver->draw_ctx_deinit = lv_draw_swm341_dma2d_ctx_init;
driver->draw_ctx_size = sizeof(lv_draw_swm341_dma2d_ctx_t);
-#elif LV_USE_GPU_NXP_PXP || LV_USE_GPU_NXP_VG_LITE
- driver->draw_ctx_init = lv_draw_nxp_ctx_init;
- driver->draw_ctx_deinit = lv_draw_nxp_ctx_deinit;
- driver->draw_ctx_size = sizeof(lv_draw_nxp_ctx_t);
+#elif LV_USE_GPU_NXP_VG_LITE
+ driver->draw_ctx_init = lv_draw_vglite_ctx_init;
+ driver->draw_ctx_deinit = lv_draw_vglite_ctx_deinit;
+ driver->draw_ctx_size = sizeof(lv_draw_vglite_ctx_t);
+#elif LV_USE_GPU_NXP_PXP
+ driver->draw_ctx_init = lv_draw_pxp_ctx_init;
+ driver->draw_ctx_deinit = lv_draw_pxp_ctx_deinit;
+ driver->draw_ctx_size = sizeof(lv_draw_pxp_ctx_t);
#elif LV_USE_GPU_SDL
driver->draw_ctx_init = lv_draw_sdl_init_ctx;
driver->draw_ctx_deinit = lv_draw_sdl_deinit_ctx;
diff --git a/lib/libesp32_lvgl/lvgl/src/hal/lv_hal_indev.h b/lib/libesp32_lvgl/lvgl/src/hal/lv_hal_indev.h
index ca51a08c2..5bbcf530e 100644
--- a/lib/libesp32_lvgl/lvgl/src/hal/lv_hal_indev.h
+++ b/lib/libesp32_lvgl/lvgl/src/hal/lv_hal_indev.h
@@ -141,6 +141,7 @@ typedef struct _lv_indev_proc_t {
struct {
/*Pointer and button data*/
lv_point_t act_point; /**< Current point of input device.*/
+ lv_point_t indev_point;
lv_point_t last_point; /**< Last point of input device.*/
lv_point_t last_raw_point; /**< Last point read from read_cb. */
lv_point_t vect; /**< Difference between `act_point` and `last_point`.*/
diff --git a/lib/libesp32_lvgl/lvgl/src/lv_conf_internal.h b/lib/libesp32_lvgl/lvgl/src/lv_conf_internal.h
index 97807fe37..4cd3895f2 100644
--- a/lib/libesp32_lvgl/lvgl/src/lv_conf_internal.h
+++ b/lib/libesp32_lvgl/lvgl/src/lv_conf_internal.h
@@ -253,6 +253,9 @@
#define LV_TICK_CUSTOM_SYS_TIME_EXPR (millis()) /*Expression evaluating to current system time in ms*/
#endif
#endif
+ /*If using lvgl as ESP32 component*/
+ // #define LV_TICK_CUSTOM_INCLUDE "esp_timer.h"
+ // #define LV_TICK_CUSTOM_SYS_TIME_EXPR ((esp_timer_get_time() / 1000LL))
#endif /*LV_TICK_CUSTOM*/
/*Default Dot Per Inch. Used to initialize default sizes such as widgets sized, style paddings.
@@ -432,7 +435,7 @@
#endif
#if LV_USE_GPU_STM32_DMA2D
/*Must be defined to include path of CMSIS header of target processor
- e.g. "stm32f769xx.h" or "stm32f429xx.h"*/
+ e.g. "stm32f7xx.h" or "stm32f4xx.h"*/
#ifndef LV_GPU_DMA2D_CMSIS_INCLUDE
#ifdef CONFIG_LV_GPU_DMA2D_CMSIS_INCLUDE
#define LV_GPU_DMA2D_CMSIS_INCLUDE CONFIG_LV_GPU_DMA2D_CMSIS_INCLUDE
diff --git a/lib/libesp32_lvgl/lvgl/src/misc/lv_style.h b/lib/libesp32_lvgl/lvgl/src/misc/lv_style.h
index 1792dae88..5cf0b19c1 100644
--- a/lib/libesp32_lvgl/lvgl/src/misc/lv_style.h
+++ b/lib/libesp32_lvgl/lvgl/src/misc/lv_style.h
@@ -70,11 +70,6 @@ LV_EXPORT_CONST_INT(LV_IMG_ZOOM_NONE);
#endif
// *INDENT-ON*
-/** On simple system, don't waste resources on gradients */
-#if !defined(LV_DRAW_COMPLEX) || !defined(LV_GRADIENT_MAX_STOPS)
-#define LV_GRADIENT_MAX_STOPS 2
-#endif
-
#define LV_STYLE_PROP_META_INHERIT 0x8000
#define LV_STYLE_PROP_META_INITIAL 0x4000
#define LV_STYLE_PROP_META_MASK (LV_STYLE_PROP_META_INHERIT | LV_STYLE_PROP_META_INITIAL)
diff --git a/lib/libesp32_lvgl/lvgl/src/widgets/lv_arc.c b/lib/libesp32_lvgl/lvgl/src/widgets/lv_arc.c
index 6cab5f339..848c20a72 100644
--- a/lib/libesp32_lvgl/lvgl/src/widgets/lv_arc.c
+++ b/lib/libesp32_lvgl/lvgl/src/widgets/lv_arc.c
@@ -39,6 +39,7 @@ static void get_center(const lv_obj_t * obj, lv_point_t * center, lv_coord_t * a
static lv_coord_t get_angle(const lv_obj_t * obj);
static void get_knob_area(lv_obj_t * arc, const lv_point_t * center, lv_coord_t r, lv_area_t * knob_area);
static void value_update(lv_obj_t * arc);
+static lv_coord_t knob_get_extra_size(lv_obj_t * obj);
/**********************
* STATIC VARIABLES
@@ -600,8 +601,11 @@ static void lv_arc_event(const lv_obj_class_t * class_p, lv_event_t * e)
lv_coord_t knob_bottom = lv_obj_get_style_pad_bottom(obj, LV_PART_KNOB);
lv_coord_t knob_pad = LV_MAX4(knob_left, knob_right, knob_top, knob_bottom) + 2;
+ lv_coord_t knob_extra_size = knob_pad - bg_pad;
+ knob_extra_size += knob_get_extra_size(obj);
+
lv_coord_t * s = lv_event_get_param(e);
- *s = LV_MAX(*s, knob_pad - bg_pad);
+ *s = LV_MAX(*s, knob_extra_size);
}
else if(code == LV_EVENT_DRAW_MAIN) {
lv_arc_draw(e);
@@ -716,6 +720,7 @@ static void inv_arc_area(lv_obj_t * obj, uint16_t start_angle, uint16_t end_angl
lv_area_t inv_area;
lv_draw_arc_get_area(c.x, c.y, r, start_angle, end_angle, w, rounded, &inv_area);
+
lv_obj_invalidate_area(obj, &inv_area);
}
@@ -727,6 +732,13 @@ static void inv_knob_area(lv_obj_t * obj)
lv_area_t a;
get_knob_area(obj, &c, r, &a);
+
+ lv_coord_t knob_extra_size = knob_get_extra_size(obj);
+
+ if(knob_extra_size > 0) {
+ lv_area_increase(&a, knob_extra_size, knob_extra_size);
+ }
+
lv_obj_invalidate_area(obj, &a);
}
@@ -841,4 +853,19 @@ static void value_update(lv_obj_t * obj)
arc->last_angle = angle; /*Cache angle for slew rate limiting*/
}
+static lv_coord_t knob_get_extra_size(lv_obj_t * obj)
+{
+ lv_coord_t knob_shadow_size = 0;
+ knob_shadow_size += lv_obj_get_style_shadow_width(obj, LV_PART_KNOB);
+ knob_shadow_size += lv_obj_get_style_shadow_spread(obj, LV_PART_KNOB);
+ knob_shadow_size += LV_ABS(lv_obj_get_style_shadow_ofs_x(obj, LV_PART_KNOB));
+ knob_shadow_size += LV_ABS(lv_obj_get_style_shadow_ofs_y(obj, LV_PART_KNOB));
+
+ lv_coord_t knob_outline_size = 0;
+ knob_outline_size += lv_obj_get_style_outline_width(obj, LV_PART_KNOB);
+ knob_outline_size += lv_obj_get_style_outline_pad(obj, LV_PART_KNOB);
+
+ return LV_MAX(knob_shadow_size, knob_outline_size);
+}
+
#endif
diff --git a/lib/libesp32_lvgl/lvgl/src/widgets/lv_bar.c b/lib/libesp32_lvgl/lvgl/src/widgets/lv_bar.c
index 0da2a9875..a057618ec 100644
--- a/lib/libesp32_lvgl/lvgl/src/widgets/lv_bar.c
+++ b/lib/libesp32_lvgl/lvgl/src/widgets/lv_bar.c
@@ -571,6 +571,8 @@ static void lv_bar_set_value_with_anim(lv_obj_t * obj, int32_t new_value, int32_
_lv_bar_anim_t * anim_info, lv_anim_enable_t en)
{
if(en == LV_ANIM_OFF) {
+ lv_anim_del(anim_info, NULL);
+ anim_info->anim_state = LV_BAR_ANIM_STATE_INV;
*value_ptr = new_value;
lv_obj_invalidate((lv_obj_t *)obj);
}
diff --git a/lib/libesp32_lvgl/lvgl/src/widgets/lv_img.c b/lib/libesp32_lvgl/lvgl/src/widgets/lv_img.c
index f47a789e7..3246e4a69 100644
--- a/lib/libesp32_lvgl/lvgl/src/widgets/lv_img.c
+++ b/lib/libesp32_lvgl/lvgl/src/widgets/lv_img.c
@@ -166,8 +166,6 @@ void lv_img_set_offset_x(lv_obj_t * obj, lv_coord_t x)
lv_img_t * img = (lv_img_t *)obj;
- x = x % img->w;
-
img->offset.x = x;
lv_obj_invalidate(obj);
}
@@ -178,15 +176,14 @@ void lv_img_set_offset_y(lv_obj_t * obj, lv_coord_t y)
lv_img_t * img = (lv_img_t *)obj;
- y = y % img->h;
-
img->offset.y = y;
lv_obj_invalidate(obj);
}
void lv_img_set_angle(lv_obj_t * obj, int16_t angle)
{
- if(angle < 0 || angle >= 3600) angle = angle % 3600;
+ while(angle >= 3600) angle -= 3600;
+ while(angle < 0) angle += 3600;
lv_img_t * img = (lv_img_t *)obj;
if(angle == img->angle) return;
@@ -659,12 +656,14 @@ static void draw_img(lv_event_t * e)
draw_ctx->clip_area = &img_clip_area;
lv_area_t coords_tmp;
- coords_tmp.y1 = img_max_area.y1 + img->offset.y;
+ lv_coord_t offset_x = img->offset.x % img->w;
+ lv_coord_t offset_y = img->offset.y % img->h;
+ coords_tmp.y1 = img_max_area.y1 + offset_y;
if(coords_tmp.y1 > img_max_area.y1) coords_tmp.y1 -= img->h;
coords_tmp.y2 = coords_tmp.y1 + img->h - 1;
for(; coords_tmp.y1 < img_max_area.y2; coords_tmp.y1 += img_size_final.y, coords_tmp.y2 += img_size_final.y) {
- coords_tmp.x1 = img_max_area.x1 + img->offset.x;
+ coords_tmp.x1 = img_max_area.x1 + offset_x;
if(coords_tmp.x1 > img_max_area.x1) coords_tmp.x1 -= img->w;
coords_tmp.x2 = coords_tmp.x1 + img->w - 1;
diff --git a/lib/libesp32_lvgl/lvgl/src/widgets/lv_roller.c b/lib/libesp32_lvgl/lvgl/src/widgets/lv_roller.c
index fd9b3948f..f79e88274 100644
--- a/lib/libesp32_lvgl/lvgl/src/widgets/lv_roller.c
+++ b/lib/libesp32_lvgl/lvgl/src/widgets/lv_roller.c
@@ -477,6 +477,7 @@ static void draw_main(lv_event_t * e)
area_ok = _lv_area_intersect(&mask_sel, draw_ctx->clip_area, &sel_area);
if(area_ok) {
lv_obj_t * label = get_label(obj);
+ if(lv_label_get_recolor(label)) label_dsc.flag |= LV_TEXT_FLAG_RECOLOR;
/*Get the size of the "selected text"*/
lv_point_t res_p;
@@ -529,6 +530,8 @@ static void draw_label(lv_event_t * e)
lv_draw_label_dsc_t label_draw_dsc;
lv_draw_label_dsc_init(&label_draw_dsc);
lv_obj_init_draw_label_dsc(roller, LV_PART_MAIN, &label_draw_dsc);
+ if(lv_label_get_recolor(label_obj)) label_draw_dsc.flag |= LV_TEXT_FLAG_RECOLOR;
+
lv_draw_ctx_t * draw_ctx = lv_event_get_draw_ctx(e);
/*If the roller has shadow or outline it has some ext. draw size
diff --git a/lib/libesp32_lvgl/lvgl/src/widgets/lv_slider.c b/lib/libesp32_lvgl/lvgl/src/widgets/lv_slider.c
index 3f85efc28..98711da40 100644
--- a/lib/libesp32_lvgl/lvgl/src/widgets/lv_slider.c
+++ b/lib/libesp32_lvgl/lvgl/src/widgets/lv_slider.c
@@ -239,8 +239,12 @@ static void lv_slider_event(const lv_obj_class_t * class_p, lv_event_t * e)
new_value = LV_CLAMP(real_min_value, new_value, real_max_value);
if(*slider->value_to_set != new_value) {
- *slider->value_to_set = new_value;
- lv_obj_invalidate(obj);
+ if(slider->value_to_set == &slider->bar.start_value) {
+ lv_bar_set_start_value(obj, new_value, LV_ANIM_ON);
+ }
+ else {
+ lv_bar_set_value(obj, new_value, LV_ANIM_ON);
+ }
res = lv_event_send(obj, LV_EVENT_VALUE_CHANGED, NULL);
if(res != LV_RES_OK) return;
}
diff --git a/lib/libesp32_lvgl/lvgl/src/widgets/lv_table.c b/lib/libesp32_lvgl/lvgl/src/widgets/lv_table.c
index 5ff65ab23..f789e8d33 100644
--- a/lib/libesp32_lvgl/lvgl/src/widgets/lv_table.c
+++ b/lib/libesp32_lvgl/lvgl/src/widgets/lv_table.c
@@ -42,6 +42,7 @@ static lv_res_t get_pressed_cell(lv_obj_t * obj, uint16_t * row, uint16_t * col)
static size_t get_cell_txt_len(const char * txt);
static void copy_cell_txt(char * dst, const char * txt);
static void get_cell_area(lv_obj_t * obj, uint16_t row, uint16_t col, lv_area_t * area);
+static void scroll_to_selected_cell(lv_obj_t * obj);
static inline bool is_cell_empty(void * cell)
{
@@ -516,6 +517,7 @@ static void lv_table_event(const lv_obj_class_t * class_p, lv_event_t * e)
if(col == LV_TABLE_CELL_NONE || row == LV_TABLE_CELL_NONE) {
table->col_act = 0;
table->row_act = 0;
+ scroll_to_selected_cell(obj);
lv_obj_invalidate(obj);
return;
}
@@ -560,6 +562,8 @@ static void lv_table_event(const lv_obj_class_t * class_p, lv_event_t * e)
table->row_act = row;
lv_obj_invalidate(obj);
+ scroll_to_selected_cell(obj);
+
res = lv_event_send(obj, LV_EVENT_VALUE_CHANGED, NULL);
if(res != LV_RES_OK) return;
}
@@ -1004,4 +1008,26 @@ static void get_cell_area(lv_obj_t * obj, uint16_t row, uint16_t col, lv_area_t
}
+
+static void scroll_to_selected_cell(lv_obj_t * obj)
+{
+ lv_table_t * table = (lv_table_t *)obj;
+
+ lv_area_t a;
+ get_cell_area(obj, table->row_act, table->col_act, &a);
+ if(a.x1 < 0) {
+ lv_obj_scroll_by_bounded(obj, -a.x1, 0, LV_ANIM_ON);
+ }
+ else if(a.x2 > lv_obj_get_width(obj)) {
+ lv_obj_scroll_by_bounded(obj, lv_obj_get_width(obj) - a.x2, 0, LV_ANIM_ON);
+ }
+
+ if(a.y1 < 0) {
+ lv_obj_scroll_by_bounded(obj, 0, -a.y1, LV_ANIM_ON);
+ }
+ else if(a.y2 > lv_obj_get_height(obj)) {
+ lv_obj_scroll_by_bounded(obj, 0, lv_obj_get_height(obj) - a.y2, LV_ANIM_ON);
+ }
+
+}
#endif
diff --git a/lib/libesp32_ml/mel_freq_extractor/library.properties b/lib/libesp32_ml/mel_freq_extractor/library.properties
new file mode 100644
index 000000000..9b173d75a
--- /dev/null
+++ b/lib/libesp32_ml/mel_freq_extractor/library.properties
@@ -0,0 +1,7 @@
+name=MElFreqencyExtractor
+version=1.0
+author=Christian Baars
+maintainer=Christian Baars
+sentence=Feature Extractor using mel frequencies
+paragraph=Uses ESP-DSP library.
+architectures=esp32
diff --git a/lib/libesp32_ml/mel_freq_extractor/src/mfcc.h b/lib/libesp32_ml/mel_freq_extractor/src/mfcc.h
new file mode 100644
index 000000000..524d3c6e0
--- /dev/null
+++ b/lib/libesp32_ml/mel_freq_extractor/src/mfcc.h
@@ -0,0 +1,315 @@
+/*
+ mfcc.h - mel frequency extractor for ESP32
+
+ Computes features for slizes of audio data similiar to speechpy
+ This is intended to provide a stripped down implementation that can work with Edgempulse trained models
+
+ based on:
+ https://github.com/astorfi/speechpy
+ https://github.com/AIWintermuteAI/Speech-to-Intent-Micro/blob/main/inference_code/Wio_Terminal/wio_speech_to_intent_150_10/mfcc.cpp
+
+ Copyright (C) 2022 Christian Baars
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .@
+*/
+
+
+
+#ifndef MELFREQUENCYEXTRACTOR_H
+#define MELFREQUENCYEXTRACTOR_H
+
+#include
+#include
+#include "float.h"
+#include "esp_dsp.h"
+
+
+class MFCC{
+ private:
+ int num_mfcc_features;
+ int frame_len;
+ int frame_len_padded;
+ int num_bank_bins;
+ float * m_frame;
+ float * m_buffer;
+ float * m_mel_energies;
+ float * m_dct_matrix;
+ float * m_mel_fbank;
+
+ uint8_t m_amplification;
+ float m_preemphasis;
+
+ float * create_dct_matrix(int32_t input_length, int32_t coefficient_count);
+ void create_mel_filterbank(int samp_freq, int low_freq, int high_freq);
+
+ static inline float InverseMelScale(float mel_freq) {
+ return 700.0f * (expf (mel_freq / 1127.0f) - 1.0f);
+ }
+
+ static inline float MelScale(float freq) {
+ return 1127.0f * logf (1.0f + freq / 700.0f);
+ }
+
+
+ public:
+ MFCC(int num_mfcc_features, int frame_len,int num_bank_bins, int samp_freq, int low_freq, int high_freq);
+ ~MFCC();
+ void set_preamp(uint8_t amplification);
+ void set_preemphasis(float preemphasis);
+ void mfcc_compute(const int16_t* data, float* mfcc_out);
+ void log10_normalize(float* out_buf, int out_buf_len, int noise_floor_db);
+};
+
+
+MFCC::MFCC(int num_mfcc_features, int frame_len, int num_bank_bins, int samp_freq, int low_freq, int high_freq)
+:num_mfcc_features(num_mfcc_features),
+ frame_len(frame_len),
+ num_bank_bins(num_bank_bins)
+{
+ // Round-up to nearest power of 2.
+ frame_len_padded = pow(2,ceil((log(frame_len)/log(2))));
+
+ m_frame = new float[frame_len_padded];
+ m_buffer = new float[frame_len_padded * 2];
+ m_mel_energies = new float[num_bank_bins];
+
+ //create window function
+ // window_func = new float[frame_len];
+ // dsps_wind_hann_f32(window_func, frame_len);
+
+ m_amplification = 1;
+ m_preemphasis = 0.0;
+
+ //create mel filterbank
+ create_mel_filterbank(samp_freq, low_freq, high_freq);
+
+ //create DCT matrix for mfcc mode
+ if(num_mfcc_features != 0){
+ m_dct_matrix = create_dct_matrix(num_bank_bins, num_mfcc_features);
+ }
+
+ //initialize FFT
+ int ret = dsps_fft2r_init_fc32(NULL, frame_len_padded);
+ if(ret==0){
+ MicroPrintf("Framelength: %u, (rounded: %u)", frame_len,frame_len_padded);
+ }
+ else{
+ MicroPrintf("dsps_fft2r_init_fc32 error: %d",ret);
+ }
+
+}
+
+MFCC::~MFCC() {
+ delete []m_frame;
+ delete []m_buffer;
+ delete []m_mel_energies;
+ // delete []window_func;
+
+ delete []m_dct_matrix;
+
+ // for(int i=0;i(noise_floor_db * -1);
+ const float noise_scale = 1.0f / (static_cast(noise_floor_db * -1) + 12.0f);
+ for (size_t ix = 0; ix < out_buf_len; ix++) {
+ float f = out_buf[ix];
+ if (f < 1e-30) {
+ out_buf[ix] = 0;
+ return;
+ }
+ f = 10.0f * log10(f); // scale by 10
+ f += noise;
+ f *= noise_scale;
+ // clip again
+ if (f < 0.0f) f = 0.0f;
+ else if (f > 1.0f) f = 1.0f;
+ out_buf[ix] = f;
+ }
+}
+
+void MFCC::set_preamp(uint8_t amplification){
+ m_amplification = amplification;
+}
+
+void MFCC::set_preemphasis(float preemphasis){
+ m_preemphasis = preemphasis;
+ // Speechpy computes this over the window of a sample, here we will compute only over the slize !!
+}
+
+
+void MFCC::mfcc_compute(const int16_t * audio_data, float* mfcc_out) {
+
+ int32_t i, j, bin;
+ int coefficients = frame_len_padded/2 + 1;
+ int data_clipped = 0;
+ int data_clipped_low = 0;
+ float conv_factor = m_amplification;
+ float clip_thres = 0.99f * (float)(1<<15);
+
+ // MicroPrintf("%d %d %d %d %d %d %d %d",audio_data[0],audio_data[1] ,audio_data[2] ,audio_data[3] ,audio_data[4] ,audio_data[5] ,audio_data[6] ,audio_data[7]);
+
+ //TensorFlow way of normalizing .wav data to (-1,1) for speechpy's MFE
+ if(num_mfcc_features == 0){
+ conv_factor /= (float)(1<<15);
+ clip_thres /= (float)(1<<15);
+ }
+
+ for (int i = 0; i < frame_len; i++) {
+ m_buffer[i] = audio_data[i] * conv_factor; //mfe -1..1, mfcc int16_t as float, both with additional pre_amp factor
+ }
+ if(m_buffer[i]> clip_thres){
+ m_buffer[i] /= m_amplification;
+ data_clipped++;
+ }
+ else if( m_buffer[i]< -clip_thres){
+ m_buffer[i] /= m_amplification;
+ data_clipped_low++;
+ }
+
+ if(data_clipped>0)
+ MicroPrintf("Clip: %d __ %d",data_clipped, data_clipped_low);
+
+ // MicroPrintf("%f %f %f %f %f %f %f %f ",m_buffer[0],m_buffer[1] ,m_buffer[2] ,m_buffer[3] ,m_buffer[4] ,m_buffer[5] ,m_buffer[6] ,m_buffer[7]);
+
+ //pre-emphasis
+ if(m_preemphasis!=0.0){
+ m_frame[0] = m_buffer[0] - m_preemphasis * m_buffer[frame_len - 1]; // roll through the frame "back" to the end
+ for (i = 1; i < frame_len; i++){
+ m_frame[i] = m_buffer[i] - m_preemphasis * m_buffer[i - 1];
+ }
+ }
+ else{
+ for (i = 1; i < frame_len; i++){
+ m_frame[i] = m_buffer[i];
+ }
+ }
+
+ // prepare buffer for FFT
+ for (i = 0; i < frame_len_padded; i++) {
+ m_buffer[i * 2] = i
diff --git a/lib/libesp32_ml/tf_lite_esp32/CODEOWNERS b/lib/libesp32_ml/tf_lite_esp32/CODEOWNERS
new file mode 100644
index 000000000..b235a44e8
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/CODEOWNERS
@@ -0,0 +1,4 @@
+* @tensorflow/micro @ddavis-2015
+
+/.github/ @advaitjain
+/ci/ @advaitjain
diff --git a/lib/libesp32_ml/tf_lite_esp32/LICENSE b/lib/libesp32_ml/tf_lite_esp32/LICENSE
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/LICENSE
@@ -0,0 +1,202 @@
+
+ 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/lib/libesp32_ml/tf_lite_esp32/README.md b/lib/libesp32_ml/tf_lite_esp32/README.md
new file mode 100644
index 000000000..a0612ee98
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/README.md
@@ -0,0 +1,80 @@
+# TensorFlow Lite Micro Library for Arduino-Espressif32
+
+This repository has the code (including examples) needed to use Tensorflow Lite Micro on an Arduino.
+
+## Table of contents
+
+* [Table of contents](#table-of-contents)
+* [Build Status](#build-status)
+* [How to Install](#how-to-install)
+ * [GitHub](#github)
+ * [Checking your Installation](#checking-your-installation)
+* [Compatibility](#compatibility)
+* [License](#license)
+* [Contributing](#contributing)
+
+
+## Build Status
+
+Build Type | Status |
+--------------- | ------------- |
+Arduino CLI on Linux | [](https://github.com/tensorflow/tflite-micro-arduino-examples/actions/workflows/ci.yml)
+Sync from tflite-micro | [](https://github.com/tensorflow/tflite-micro-arduino-examples/actions/workflows/sync.yml)
+
+## How to Install
+
+### GitHub
+
+The officially supported TensorFlow Lite Micro library for Arduino resides
+in the [tflite-micro-arduino-examples](https://github.com/tensorflow/tflite-micro-arduino-examples)
+GitHub repository.
+To install the in-development version of this library, you can use the
+latest version directly from the GitHub repository. This requires you clone the
+repo into the folder that holds libraries for the Arduino IDE. The location for
+this folder varies by operating system, but typically it's in
+`~/Arduino/libraries` on Linux, `~/Documents/Arduino/libraries/` on MacOS, and
+`My Documents\Arduino\Libraries` on Windows.
+
+Once you're in that folder in the terminal, you can then grab the code using the
+git command line tool:
+
+```
+git clone https://github.com/tensorflow/tflite-micro-arduino-examples Arduino_TensorFlowLite
+```
+
+To update your clone of the repository to the latest code, use the following terminal commands:
+```
+cd Arduino_TensorFlowLite
+git pull
+```
+
+### Checking your Installation
+
+Once the library has been installed, you should then start the Arduino IDE.
+You will now see an `Arduino_TensorFlowLite`
+entry in the `File -> Examples` menu of the Arduino IDE. This submenu contains a list
+of sample projects you can try out.
+
+
+
+## Compatibility
+
+This library is designed for the `Arduino Nano 33 BLE Sense` board. The framework
+code for running machine learning models should be compatible with most Arm Cortex
+M-based boards, such as the `Raspberry Pi Pico`, but the code to access peripherals
+like microphones, cameras, and accelerometers is specific to the `Nano 33 BLE Sense`.
+
+## License
+
+This code is made available under the Apache 2 license.
+
+## Contributing
+
+Forks of this library are welcome and encouraged. If you have bug reports or
+fixes to contribute, the source of this code is at [https:://github.com/tensorflow/tflite-micro](github.com/tensorflow/tflite-micro)
+and all issues and pull requests should be directed there.
+
+The code here is created through an automatic project generation process
+and may differ from
+that source of truth, since it's cross-platform and needs to be modified to
+work within the Arduino IDE.
\ No newline at end of file
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/README.md b/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/README.md
new file mode 100644
index 000000000..aac6402db
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/README.md
@@ -0,0 +1,59 @@
+
+
+# Hello World Example
+
+This example is designed to demonstrate the absolute basics of using [TensorFlow
+Lite for Microcontrollers](https://www.tensorflow.org/lite/microcontrollers).
+It includes the full end-to-end workflow of training a model, converting it for
+use with TensorFlow Lite for Microcontrollers for running inference on a
+microcontroller.
+
+The model is trained to replicate a `sine` function and generates a pattern of
+data to blink the built-in LED in a fade in/out pattern.
+
+## Table of contents
+
+* [Table of contents](#table-of-contents)
+* [Deploy to Arduino](#deploy-to-arduino)
+ * [Install the Arduino_TensorFlowLite library](#install-the-arduino_tensorflowlite-library)
+ * [Load and run the example](#load-and-run-the-example)
+
+
+## Deploy to Arduino
+
+The following instructions will help you build and deploy this sample
+to [Arduino](https://www.arduino.cc/) devices.
+
+The sample has been tested with the following devices:
+
+- [Arduino Nano 33 BLE Sense](https://store.arduino.cc/usa/nano-33-ble-sense-with-headers)
+- [Arduino Tiny Machine Learning Kit](https://store-usa.arduino.cc/products/arduino-tiny-machine-learning-kit)
+
+The sample will use PWM to fade an LED on and off according to the model's
+output. In the code, the `LED_BUILTIN` constant is used to specify the board's
+built-in LED as the one being controlled. However, on some boards, this built-in
+LED is not attached to a pin with PWM capabilities. In this case, the LED will
+blink instead of fading.
+
+
+
+### Install the Arduino_TensorFlowLite library
+
+To install the TensorFlow Lite Micro for Arduino library, see the
+[how to install](../../README.md#how-to-install) instructions.
+
+### Load and run the example
+
+Once the library has been added, go to `File -> Examples`. You should see an
+entry within the list named `Arduino_TensorFlowLite`. Select
+it and click `hello_world` to load the example.
+
+Use the Arduino IDE to build and upload the example. Once it is running,
+you should see the built-in LED on your device flashing.
+
+The Arduino Desktop IDE includes a plotter that we can use to display the sine
+wave graphically. To view it, go to `Tools -> Serial Plotter`. You will see one
+datapoint being logged for each inference cycle, expressed as a number between 0
+and 255.
+
+
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/arduino_constants.cpp b/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/arduino_constants.cpp
new file mode 100644
index 000000000..927f8d9be
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/arduino_constants.cpp
@@ -0,0 +1,20 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+#include "constants.h"
+
+// This is tuned so that a full cycle takes ~6.6 seconds on an
+// Arduino Nano 33 BLE.
+const int kInferencesPerCycle = 200;
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/arduino_main.cpp b/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/arduino_main.cpp
new file mode 100644
index 000000000..c70a2bcea
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/arduino_main.cpp
@@ -0,0 +1,20 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+#include "main_functions.h"
+
+// Arduino automatically calls the setup() and loop() functions in a sketch, so
+// where other systems need their own main routine in this file, it can be left
+// empty.
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/arduino_output_handler.cpp b/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/arduino_output_handler.cpp
new file mode 100644
index 000000000..d41092549
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/arduino_output_handler.cpp
@@ -0,0 +1,54 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+#include
+
+#include "Arduino.h"
+#include "constants.h"
+#include "output_handler.h"
+
+// The pin of the Arduino's built-in LED
+int led = LED_BUILTIN;
+
+// Track whether the function has run at least once
+bool initialized = false;
+
+// Animates a dot across the screen to represent the current x and y values
+void HandleOutput(tflite::ErrorReporter* error_reporter, float x_value,
+ float y_value) {
+ // Do this only once
+ if (!initialized) {
+ // Set the LED pin to output
+ pinMode(led, OUTPUT);
+ initialized = true;
+ }
+
+ // Calculate the brightness of the LED such that y=-1 is fully off
+ // and y=1 is fully on. The LED's brightness can range from 0-255.
+ int brightness = (int)(127.5f * (y_value + 1));
+
+ // The y value is not actually constrained to the range [-1, 1], so we need to
+ // clamp the brightness value before sending it to the PWM/LED.
+ int brightness_clamped = std::min(255, std::max(0, brightness));
+
+ // Set the brightness of the LED. If the specified pin does not support PWM,
+ // this will result in the LED being on when brightness_clamped > 127, off
+ // otherwise.
+ analogWrite(led, brightness_clamped);
+
+ // Log the current brightness value for display in the Arduino plotter
+ TF_LITE_REPORT_ERROR(error_reporter, "%d\n", brightness);
+ delay(33);
+}
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/constants.h b/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/constants.h
new file mode 100644
index 000000000..f45289320
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/constants.h
@@ -0,0 +1,32 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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 TENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_CONSTANTS_H_
+#define TENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_CONSTANTS_H_
+
+// This constant represents the range of x values our model was trained on,
+// which is from 0 to (2 * Pi). We approximate Pi to avoid requiring additional
+// libraries.
+const float kXrange = 2.f * 3.14159265359f;
+
+// This constant determines the number of inferences to perform across the range
+// of x values defined above. Since each inference takes time, the higher this
+// number, the more time it will take to run through the entire range. The value
+// of this constant can be tuned so that one full cycle takes a desired amount
+// of time. Since different devices take different amounts of time to perform
+// inference, this value should be defined per-device.
+extern const int kInferencesPerCycle;
+
+#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_CONSTANTS_H_
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/hello_world.ino b/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/hello_world.ino
new file mode 100644
index 000000000..ca6536b1e
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/hello_world.ino
@@ -0,0 +1,123 @@
+/* Copyright 2020 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+#include
+
+#include "main_functions.h"
+
+#include "tensorflow/lite/micro/all_ops_resolver.h"
+#include "constants.h"
+#include "model.h"
+#include "output_handler.h"
+#include "tensorflow/lite/micro/micro_error_reporter.h"
+#include "tensorflow/lite/micro/micro_interpreter.h"
+#include "tensorflow/lite/micro/system_setup.h"
+#include "tensorflow/lite/schema/schema_generated.h"
+
+// Globals, used for compatibility with Arduino-style sketches.
+namespace {
+tflite::ErrorReporter* error_reporter = nullptr;
+const tflite::Model* model = nullptr;
+tflite::MicroInterpreter* interpreter = nullptr;
+TfLiteTensor* input = nullptr;
+TfLiteTensor* output = nullptr;
+int inference_count = 0;
+
+constexpr int kTensorArenaSize = 2000;
+uint8_t tensor_arena[kTensorArenaSize];
+} // namespace
+
+// The name of this function is important for Arduino compatibility.
+void setup() {
+ tflite::InitializeTarget();
+
+ // Set up logging. Google style is to avoid globals or statics because of
+ // lifetime uncertainty, but since this has a trivial destructor it's okay.
+ // NOLINTNEXTLINE(runtime-global-variables)
+ static tflite::MicroErrorReporter micro_error_reporter;
+ error_reporter = µ_error_reporter;
+
+ // Map the model into a usable data structure. This doesn't involve any
+ // copying or parsing, it's a very lightweight operation.
+ model = tflite::GetModel(g_model);
+ if (model->version() != TFLITE_SCHEMA_VERSION) {
+ TF_LITE_REPORT_ERROR(error_reporter,
+ "Model provided is schema version %d not equal "
+ "to supported version %d.",
+ model->version(), TFLITE_SCHEMA_VERSION);
+ return;
+ }
+
+ // This pulls in all the operation implementations we need.
+ // NOLINTNEXTLINE(runtime-global-variables)
+ static tflite::AllOpsResolver resolver;
+
+ // Build an interpreter to run the model with.
+ static tflite::MicroInterpreter static_interpreter(
+ model, resolver, tensor_arena, kTensorArenaSize, error_reporter);
+ interpreter = &static_interpreter;
+
+ // Allocate memory from the tensor_arena for the model's tensors.
+ TfLiteStatus allocate_status = interpreter->AllocateTensors();
+ if (allocate_status != kTfLiteOk) {
+ TF_LITE_REPORT_ERROR(error_reporter, "AllocateTensors() failed");
+ return;
+ }
+
+ // Obtain pointers to the model's input and output tensors.
+ input = interpreter->input(0);
+ output = interpreter->output(0);
+
+ // Keep track of how many inferences we have performed.
+ inference_count = 0;
+}
+
+// The name of this function is important for Arduino compatibility.
+void loop() {
+ // Calculate an x value to feed into the model. We compare the current
+ // inference_count to the number of inferences per cycle to determine
+ // our position within the range of possible x values the model was
+ // trained on, and use this to calculate a value.
+ float position = static_cast(inference_count) /
+ static_cast(kInferencesPerCycle);
+ float x = position * kXrange;
+
+ // Quantize the input from floating-point to integer
+ int8_t x_quantized = x / input->params.scale + input->params.zero_point;
+ // Place the quantized input in the model's input tensor
+ input->data.int8[0] = x_quantized;
+
+ // Run inference, and report any error
+ TfLiteStatus invoke_status = interpreter->Invoke();
+ if (invoke_status != kTfLiteOk) {
+ TF_LITE_REPORT_ERROR(error_reporter, "Invoke failed on x: %f\n",
+ static_cast(x));
+ return;
+ }
+
+ // Obtain the quantized output from model's output tensor
+ int8_t y_quantized = output->data.int8[0];
+ // Dequantize the output from integer to floating-point
+ float y = (y_quantized - output->params.zero_point) * output->params.scale;
+
+ // Output the results. A custom HandleOutput function can be implemented
+ // for each supported hardware target.
+ HandleOutput(error_reporter, x, y);
+
+ // Increment the inference_counter, and reset it if we have reached
+ // the total number per cycle
+ inference_count += 1;
+ if (inference_count >= kInferencesPerCycle) inference_count = 0;
+}
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/main_functions.h b/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/main_functions.h
new file mode 100644
index 000000000..a1ea715c6
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/main_functions.h
@@ -0,0 +1,37 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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 TENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_MAIN_FUNCTIONS_H_
+#define TENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_MAIN_FUNCTIONS_H_
+
+// Expose a C friendly interface for main functions.
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Initializes all data needed for the example. The name is important, and needs
+// to be setup() for Arduino compatibility.
+void setup();
+
+// Runs one iteration of data gathering and inference. This should be called
+// repeatedly from the application code. The name needs to be loop() for Arduino
+// compatibility.
+void loop();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_MAIN_FUNCTIONS_H_
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/model.cpp b/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/model.cpp
new file mode 100644
index 000000000..f04a9f661
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/model.cpp
@@ -0,0 +1,237 @@
+/* Copyright 2020 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+// Automatically created from a TensorFlow Lite flatbuffer using the command:
+// xxd -i model.tflite > model.cc
+
+// This is a standard TensorFlow Lite model file that has been converted into a
+// C data array, so it can be easily compiled into a binary for devices that
+// don't have a file system.
+
+// See train/README.md for a full description of the creation process.
+
+#include "model.h"
+
+// Keep model aligned to 8 bytes to guarantee aligned 64-bit accesses.
+alignas(8) const unsigned char g_model[] = {
+ 0x1c, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x14, 0x00, 0x20, 0x00,
+ 0x1c, 0x00, 0x18, 0x00, 0x14, 0x00, 0x10, 0x00, 0x0c, 0x00, 0x00, 0x00,
+ 0x08, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
+ 0x98, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x1c, 0x03, 0x00, 0x00,
+ 0x2c, 0x03, 0x00, 0x00, 0x30, 0x09, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x60, 0xf7, 0xff, 0xff,
+ 0x10, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
+ 0x44, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x73, 0x65, 0x72, 0x76,
+ 0x65, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x73, 0x65, 0x72, 0x76,
+ 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xbc, 0xff, 0xff, 0xff,
+ 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+ 0x64, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x34, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x76, 0xfd, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00,
+ 0x0d, 0x00, 0x00, 0x00, 0x64, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x32, 0x5f,
+ 0x69, 0x6e, 0x70, 0x75, 0x74, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x13, 0x00, 0x00, 0x00, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x75, 0x6e, 0x74,
+ 0x69, 0x6d, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x00,
+ 0x0c, 0x00, 0x00, 0x00, 0x50, 0x02, 0x00, 0x00, 0x48, 0x02, 0x00, 0x00,
+ 0x34, 0x02, 0x00, 0x00, 0xdc, 0x01, 0x00, 0x00, 0x8c, 0x01, 0x00, 0x00,
+ 0x6c, 0x01, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
+ 0x34, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0xfa, 0xfd, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x31, 0x2e, 0x35, 0x2e, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0xfd, 0xff, 0xff,
+ 0x88, 0xfd, 0xff, 0xff, 0x8c, 0xfd, 0xff, 0xff, 0x22, 0xfe, 0xff, 0xff,
+ 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x21, 0xa5, 0x8b, 0xca,
+ 0x5e, 0x1d, 0xce, 0x42, 0x9d, 0xce, 0x1f, 0xb0, 0xdf, 0x54, 0x2f, 0x81,
+ 0x3e, 0xfe, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0xee, 0xfc, 0x00, 0xec, 0x05, 0x17, 0xef, 0xec, 0xe6, 0xf8, 0x03, 0x01,
+ 0x00, 0xfa, 0xf8, 0xf5, 0xdc, 0xeb, 0x27, 0x14, 0xf1, 0xde, 0xe2, 0xdb,
+ 0xf0, 0xde, 0x31, 0x06, 0x02, 0xe6, 0xee, 0xf9, 0x00, 0x16, 0x07, 0xe0,
+ 0xfe, 0xff, 0xe9, 0x06, 0xe7, 0xef, 0x81, 0x1b, 0x18, 0xea, 0xc9, 0x01,
+ 0x0f, 0x00, 0xda, 0xf7, 0x0e, 0xec, 0x13, 0x1f, 0x04, 0x13, 0xb4, 0xe6,
+ 0xfd, 0x06, 0xb9, 0xe0, 0x0d, 0xec, 0xf0, 0xde, 0xeb, 0xf7, 0x05, 0x26,
+ 0x1a, 0xe4, 0x6f, 0x1a, 0xea, 0x1e, 0x35, 0xdf, 0x1a, 0xf3, 0xf1, 0x19,
+ 0x0f, 0x03, 0x1b, 0xe1, 0xde, 0x13, 0xf6, 0x19, 0xff, 0xf6, 0x1b, 0x18,
+ 0xf0, 0x1c, 0xda, 0x1b, 0x1b, 0x20, 0xe5, 0x1a, 0xf5, 0xff, 0x96, 0x0b,
+ 0x00, 0x01, 0xcd, 0xde, 0x0d, 0xf6, 0x16, 0xe3, 0xed, 0xfc, 0x0e, 0xe9,
+ 0xfa, 0xeb, 0x5c, 0xfc, 0x1d, 0x02, 0x5b, 0xe2, 0xe1, 0xf5, 0x15, 0xec,
+ 0xf4, 0x00, 0x13, 0x05, 0xec, 0x0c, 0x1d, 0x14, 0x0e, 0xe7, 0x0b, 0xf4,
+ 0x19, 0x00, 0xd7, 0x05, 0x27, 0x02, 0x15, 0xea, 0xea, 0x02, 0x9b, 0x00,
+ 0x0c, 0xfa, 0xe8, 0xea, 0xfd, 0x00, 0x14, 0xfd, 0x0b, 0x02, 0xef, 0xee,
+ 0x06, 0xee, 0x01, 0x0d, 0x06, 0xe6, 0xf7, 0x11, 0xf7, 0x09, 0xf8, 0xf1,
+ 0x21, 0xff, 0x0e, 0xf3, 0xec, 0x12, 0x26, 0x1d, 0xf2, 0xe9, 0x28, 0x18,
+ 0xe0, 0xfb, 0xf3, 0xf4, 0x05, 0x1d, 0x1d, 0xfb, 0xfd, 0x1e, 0xfc, 0x11,
+ 0xe8, 0x07, 0x09, 0x03, 0x12, 0xf2, 0x36, 0xfb, 0xdc, 0x1c, 0xf9, 0xef,
+ 0xf3, 0xe7, 0x6f, 0x0c, 0x1d, 0x00, 0x45, 0xfd, 0x0e, 0xf0, 0x0b, 0x19,
+ 0x1a, 0xfa, 0xe0, 0x19, 0x1f, 0x13, 0x36, 0x1c, 0x12, 0xeb, 0x3b, 0x0c,
+ 0xb4, 0xcb, 0xe6, 0x13, 0xfa, 0xeb, 0xf1, 0x06, 0x1c, 0xfa, 0x18, 0xe5,
+ 0xeb, 0xcb, 0x0c, 0xf4, 0x4a, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x75, 0x1c, 0x11, 0xe1, 0x0c, 0x81, 0xa5, 0x42,
+ 0xfe, 0xd5, 0xd4, 0xb2, 0x61, 0x78, 0x19, 0xdf, 0x66, 0xff, 0xff, 0xff,
+ 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x77, 0x0b, 0x00, 0x00, 0x53, 0xf6, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x77, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xd3, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x72, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x07, 0x00, 0x00,
+ 0x67, 0xf5, 0xff, 0xff, 0x34, 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0xb2, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xb5, 0x04, 0x00, 0x00, 0x78, 0x0a, 0x00, 0x00,
+ 0x2d, 0x06, 0x00, 0x00, 0x71, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x9a, 0x0a, 0x00, 0x00, 0xfe, 0xf7, 0xff, 0xff, 0x0e, 0x05, 0x00, 0x00,
+ 0xd4, 0x09, 0x00, 0x00, 0x47, 0xfe, 0xff, 0xff, 0xb6, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xac, 0xf7, 0xff, 0xff, 0x4b, 0xf9, 0xff, 0xff,
+ 0x4a, 0x05, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x08, 0x00, 0x04, 0x00,
+ 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x8c, 0xef, 0xff, 0xff, 0x84, 0xff, 0xff, 0xff, 0x88, 0xff, 0xff, 0xff,
+ 0x0f, 0x00, 0x00, 0x00, 0x4d, 0x4c, 0x49, 0x52, 0x20, 0x43, 0x6f, 0x6e,
+ 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, 0x2e, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x18, 0x00, 0x14, 0x00,
+ 0x10, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00,
+ 0x14, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00,
+ 0xe0, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x84, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x96, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
+ 0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0xca, 0xff, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0xba, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00,
+ 0x16, 0x00, 0x00, 0x00, 0x10, 0x00, 0x0c, 0x00, 0x0b, 0x00, 0x04, 0x00,
+ 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
+ 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00,
+ 0x08, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x4c, 0x04, 0x00, 0x00,
+ 0xd0, 0x03, 0x00, 0x00, 0x68, 0x03, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00,
+ 0x98, 0x02, 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00,
+ 0x24, 0x01, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0xf0, 0xfb, 0xff, 0xff, 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x54, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
+ 0x6c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0x01, 0x00, 0x00, 0x00, 0xdc, 0xfb, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00,
+ 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x4a, 0xce, 0x0a, 0x3c, 0x01, 0x00, 0x00, 0x00,
+ 0x34, 0x84, 0x85, 0x3f, 0x01, 0x00, 0x00, 0x00, 0xc5, 0x02, 0x8f, 0xbf,
+ 0x1e, 0x00, 0x00, 0x00, 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c,
+ 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x43,
+ 0x61, 0x6c, 0x6c, 0x3a, 0x30, 0x5f, 0x69, 0x6e, 0x74, 0x38, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x80, 0xfc, 0xff, 0xff, 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x54, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
+ 0x64, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0x10, 0x00, 0x00, 0x00, 0x6c, 0xfc, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00,
+ 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x01, 0x00, 0x00, 0x00, 0x93, 0xd0, 0xc0, 0x3b, 0x01, 0x00, 0x00, 0x00,
+ 0xc2, 0x0f, 0xc0, 0x3f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x14, 0x00, 0x00, 0x00, 0x74, 0x66, 0x6c, 0x2e, 0x66, 0x75, 0x6c, 0x6c,
+ 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x31,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x08, 0xfd, 0xff, 0xff, 0x18, 0x00, 0x00, 0x00,
+ 0x20, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x09, 0x64, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00, 0xf4, 0xfc, 0xff, 0xff,
+ 0x10, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0xe0, 0xdb, 0x47, 0x3c, 0x01, 0x00, 0x00, 0x00, 0x04, 0x14, 0x47, 0x40,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
+ 0x74, 0x66, 0x6c, 0x2e, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x5f, 0x63, 0x6f,
+ 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0xfe, 0xff, 0xff,
+ 0x14, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x09, 0x50, 0x00, 0x00, 0x00, 0x6c, 0xfd, 0xff, 0xff,
+ 0x10, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
+ 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xfb, 0x4b, 0x0b, 0x3c,
+ 0x01, 0x00, 0x00, 0x00, 0x40, 0x84, 0x4b, 0x3f, 0x01, 0x00, 0x00, 0x00,
+ 0x63, 0x35, 0x8a, 0xbf, 0x0d, 0x00, 0x00, 0x00, 0x73, 0x74, 0x64, 0x2e,
+ 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x32, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x72, 0xfe, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
+ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x50, 0x00, 0x00, 0x00,
+ 0xdc, 0xfd, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+ 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x60, 0x01, 0x4f, 0x3c, 0x01, 0x00, 0x00, 0x00, 0x47, 0x6d, 0xb3, 0x3f,
+ 0x01, 0x00, 0x00, 0x00, 0x5d, 0x63, 0xcd, 0xbf, 0x0d, 0x00, 0x00, 0x00,
+ 0x73, 0x74, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74,
+ 0x31, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0xe2, 0xfe, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00,
+ 0x48, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
+ 0x50, 0x00, 0x00, 0x00, 0x4c, 0xfe, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00,
+ 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0xd5, 0x6b, 0x8a, 0x3b, 0x01, 0x00, 0x00, 0x00,
+ 0xab, 0x49, 0x01, 0x3f, 0x01, 0x00, 0x00, 0x00, 0xfd, 0x56, 0x09, 0xbf,
+ 0x0c, 0x00, 0x00, 0x00, 0x73, 0x74, 0x64, 0x2e, 0x63, 0x6f, 0x6e, 0x73,
+ 0x74, 0x61, 0x6e, 0x74, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xff,
+ 0x14, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x3c, 0x00, 0x00, 0x00, 0x44, 0xff, 0xff, 0xff,
+ 0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x28, 0xb3, 0xd9, 0x38, 0x0c, 0x00, 0x00, 0x00,
+ 0x64, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x32, 0x2f, 0x62, 0x69, 0x61, 0x73,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0xaa, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x38, 0x00, 0x00, 0x00,
+ 0x9c, 0xff, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0xdd, 0x9b, 0x21, 0x39, 0x0c, 0x00, 0x00, 0x00,
+ 0x64, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x33, 0x2f, 0x62, 0x69, 0x61, 0x73,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0e, 0x00, 0x18, 0x00, 0x14, 0x00, 0x13, 0x00, 0x0c, 0x00,
+ 0x08, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x48, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+ 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0xf4, 0xd4, 0x51, 0x38, 0x0c, 0x00, 0x00, 0x00, 0x64, 0x65, 0x6e, 0x73,
+ 0x65, 0x5f, 0x34, 0x2f, 0x62, 0x69, 0x61, 0x73, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x1c, 0x00,
+ 0x18, 0x00, 0x17, 0x00, 0x10, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+ 0x2c, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x09, 0x84, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x14, 0x00,
+ 0x10, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x5d, 0x4f, 0xc9, 0x3c, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x86, 0xc8, 0x40,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
+ 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x66, 0x61,
+ 0x75, 0x6c, 0x74, 0x5f, 0x64, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x32, 0x5f,
+ 0x69, 0x6e, 0x70, 0x75, 0x74, 0x3a, 0x30, 0x5f, 0x69, 0x6e, 0x74, 0x38,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
+ 0x24, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xd8, 0xff, 0xff, 0xff,
+ 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
+ 0x0c, 0x00, 0x0c, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
+ 0x0c, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72,
+ 0x0c, 0x00, 0x10, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00,
+ 0x0c, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x09};
+const int g_model_len = 2488;
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/model.h b/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/model.h
new file mode 100644
index 000000000..488f47b3a
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/model.h
@@ -0,0 +1,31 @@
+/* Copyright 2020 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+// Automatically created from a TensorFlow Lite flatbuffer using the command:
+// xxd -i model.tflite > model.cc
+
+// This is a standard TensorFlow Lite model file that has been converted into a
+// C data array, so it can be easily compiled into a binary for devices that
+// don't have a file system.
+
+// See train/README.md for a full description of the creation process.
+
+#ifndef TENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_MODEL_H_
+#define TENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_MODEL_H_
+
+extern const unsigned char g_model[];
+extern const int g_model_len;
+
+#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_MODEL_H_
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/output_handler.h b/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/output_handler.h
new file mode 100644
index 000000000..14e9d7076
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/hello_world/output_handler.h
@@ -0,0 +1,26 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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 TENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_OUTPUT_HANDLER_H_
+#define TENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_OUTPUT_HANDLER_H_
+
+#include "tensorflow/lite/c/common.h"
+#include "tensorflow/lite/micro/micro_error_reporter.h"
+
+// Called by the main loop to produce some output based on the x and y values
+void HandleOutput(tflite::ErrorReporter* error_reporter, float x_value,
+ float y_value);
+
+#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_HELLO_WORLD_OUTPUT_HANDLER_H_
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/LICENSE b/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/LICENSE
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/LICENSE
@@ -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/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/README.md b/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/README.md
new file mode 100644
index 000000000..fd6b7bd96
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/README.md
@@ -0,0 +1,114 @@
+# Magic Wand
+
+Magic Wand example for [TensorFlow Lite Micro](https://www.tensorflow.org/lite/microcontrollers) on the [Arduino Nano 33 BLE Sense](https://store-usa.arduino.cc/products/arduino-nano-33-ble-sense).
+
+## Table of contents
+
+* [Introduction](#introduction)
+* [Hardware Requirements](#hardware-requirements)
+* [Installing the Sketch](#installing-the-sketch)
+ * [Arduino Desktop IDE](#arduino-desktop-ide)
+* [Building the Wand](#building-the-wand)
+* [Using the wand](#using-the-wand)
+* [Viewing Gestures in the Browser](#viewing-gestures-in-the-browser)
+* [Pretrained Model](#pretrained-model)
+* [Recording Gestures](#recording-gestures)
+* [Training](#training)
+* [Deployment](#deployment)
+
+
+## Introduction
+
+This project shows you how to recognize gestures made by waving a magic wand, using machine learning to analyze accelerometer and gyroscope data. It demonstrates the three main stages of an end-to-end machine learning project:
+
+ - **Gathering Data**. Using a Bluetooth connection to a web page, you can capture gestures, label them, and download the results.
+ - **Training**. A Python notebook on the free Colab service shows how to use TensorFlow to train a model to recognize gestures from your data.
+ - **Deployment**. You can deploy your trained model to the Arduino board using TensorFlow Lite Micro and the Arduino IDE.
+
+ ## Hardware Requirements
+
+ You'll need the following:
+
+ - Arduino Nano 33 BLE Sense board. These are available as part of [the TinyML Starter Kit](https://store-usa.arduino.cc/products/arduino-tiny-machine-learning-kit), or separately from Arduino or resellers. Other Arduinos won't work unfortunately, because the Bluetooth and sensor code rely on accessing the particular hardware of the Nano 33 BLE Sense.
+ - MicroUSB cable. This is included in the TinyML Kit, but you'll need a USB-A adaptor too if your computer only has USB-C ports.
+ - Computer. The Arduino toolchain runs on Linux, Windows, and MacOS, so you should be able to use most laptops, desktops, or even a Raspberry Pi. For the training process, you'll also need an up-to-date version of the Chrome web browser so you can use the Web Bluetooth APIs.
+ - Stick. We'll be attaching your Arduino to a 'wand', but this can be practically anything, as long as it's roughly a foot (30 centimeters) long.
+
+## Installing the Sketch
+
+You'll need to ensure you can successfully connect and load sketches onto your Arduino board,
+using the desktop IDE.
+Once you've made sure you can load a simple sketch successfully, you'll follow these steps:
+
+### Arduino Desktop IDE
+
+If you're running using the Arduino IDE application, you'll need to fetch the latest version of this sketch.
+To install the TensorFlow Lite Micro for Arduino library, see the
+[how to install](../../README.md#how-to-install) instructions.
+
+Open up the magic_wand.ino file in the Arduino editor, and make sure the Arduino board is visible and connected to the right port. You'll need to search for the some libraries that the sketch depends on, using `Sketch->Include Library->Manage Libraries` from the main menu. The [Arduino_LSM9DS1](https://github.com/arduino-libraries/Arduino_LSM9DS1) lets us access the accelerometer and gyroscope readings from the board's IMU, and you need at least version 1.1.0. We'll be using Bluetooth to communicate with the web page, so you should also search for [ArduinoBLE](https://www.arduino.cc/en/Reference/ArduinoBLE) and make sure you've got version 1.1.3 or newer.
+
+You should now be able to press the upload button to compile and install the sketch on your board.
+
+## Building the Wand
+
+The 'wand' itself can be as simple as a stick, it doesn't need to do anything other than keep the board at its end as you hold the other end and wave it about. A cheap wand from an online retailer will work. A simple piece of wood or ruler works just as well.
+
+You should place the board at the end of the wand, with the USB socket facing downwards, towards where you hold it, so that the cable can run down the handle. The sketch is designed to compensate for any rotation of the board around the wand's shaft, so as long as it's parallel to the wand's length the board's twist won't matter. Use sticky tape or some other easy-to-remove method to attach the board to the wand, and hold the cable in place along the shaft. The end result should look something like this:
+
+
+
+If an ASCII-art diagram is more helpful, here's what you should aim for:
+
+```
+ ____
+ | |<- Arduino board
+ | |
+ | () | <- Reset button
+ | |
+ -TT- <- USB port
+ ||
+ ||<- Wand
+ ....
+ ||
+ ||
+ ()
+```
+
+## Using the wand
+
+The wand can be used with or without the Nano 33 BLE attached to the Tiny Machine Learning Shield. It is easier to use without, as your hand will not tire as quickly. The wand should be held as you would a pencil or pen, about 8 inches from the USB socket. Use your wrist to make strokes, not your arm. Strokes will need to be made somewhat quickly, without stopping during changes in direction.
+
+## Viewing Gestures in the Browser
+
+To preview and record gestures, we'll be connecting the sketch you've just uploaded to a web page, using Bluetooth and Chrome's WebBLE API. The code for the page is [in this repository](https://github.com/tensorflow/tflite-micro-arduino-examples/tree/main/examples/magic_wand/website), but it's all implemented using browser-side Javascript in a static HTML page, so you don't need to host it on your own server. Just dragging and dropping the `index.html` file into your browser should work.
+
+If the sketch has uploaded successfully, the Arduino should be advertising itself through Bluetooth. On the web page, press the 'Bluetooth' button to connect, and you should see a dialog appear asking you to pair with a device. After a second or two, there should be an entry that looks something like "BLESense-2F00". Click on that to pair, and you should be returned to the web page.
+
+If everything is working as expected, the Bluetooth button should turn blue, with "Connected" next to it. Now try moving the wand and look at the square below the button. As you gesture, you should see tracks appearing as lines in the web page in real time. Try doing small circles, or a 'Z' like Zorro!
+
+## Pretrained Model
+
+The sketch comes with a model that's been trained to recognize the hand-drawn digits zero to nine. This is based on a small dataset recorded by Google, so your accuracy may vary, but if you bring up the Serial Monitor in the Arduino IDE you can see what the model predicts for each gesture you make, with a confidence score between 0% and 100%, as well as ASCII art of the gesture outline.
+
+## Recording Gestures
+
+As you get familiar with the wand, so should notice that the gestures you have performed start to stack on the right side of the web page. This is where the data you'll eventually want to use for training is stored. When you leave or refresh the web page, these gestures will be lost, so make sure you use the "Download Data" link to save them locally if you've generated a number of them.
+
+The gestures are automatically split up by times when the wand is kept still. These pauses act like spaces between words, and so when you've finished a gesture you should stop moving the wand so that it ends cleanly.
+
+To get started, you should pick a couple of easy gestures to perform, like a 'Z' and an 'O'. As you make these gestures, you should see them appear in the right-hand stack of gestures. You can look at the shapes shown there to understand whether the gestures came out cleanly. A good rule of thumb is that if you can't tell what the gesture is by looking at it in the stack, then a model will have a hard time recognizing it too.
+
+Once you have ten or so of each gesture, scroll through the stack to review them. If any don't seem very recognizable, or are too 'sloppy' (which is very subjective unfortunately), then you can press the trash can button on the top right of the image to remove it. If you removed any, try recording some more so you have at least ten of each gesture. If you are happy with a gesture, click on the label at the top left to type in the correct name for it (for example `O` or `Z`).
+
+After you've reviewed and labeled all of your data, you can download it as a JSON text file that can be used for training.
+
+## Training
+
+Once you have data, you should [run the Python training notebook in Colab](https://colab.research.google.com/github/tensorflow/tflite-micro-arduino-examples/blob/main/examples/magic_wand/train/train_magic_wand_model.ipynb) and follow the steps to create and export your own model.
+
+## Deployment
+
+The Python training process should give you a `magic_wand_model_data.cc` file. Replace the file of the same name (but with a `.cpp` suffix) that's in the sketch you're using with this version. You'll also need to update the `labels` and `label_count` variables near the top of the `magic_wand.ino` to reflect any changes you made to the gestures you're trying to recognize.
+
+Upload this modified sketch, and you should be able to perform gestures and see them recognized in the Serial Monitor of your Arduino editor.
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/magic_wand.ino b/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/magic_wand.ino
new file mode 100644
index 000000000..881e2ee96
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/magic_wand.ino
@@ -0,0 +1,708 @@
+/* Copyright 2020 The TensorFlow Authors. All Rights Reserved.
+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.
+==============================================================================*/
+
+#include
+#include
+#include
+
+#include
+
+#include "magic_wand_model_data.h"
+#include "rasterize_stroke.h"
+#include "tensorflow/lite/micro/micro_error_reporter.h"
+#include "tensorflow/lite/micro/micro_interpreter.h"
+#include "tensorflow/lite/micro/micro_mutable_op_resolver.h"
+#include "tensorflow/lite/micro/system_setup.h"
+#include "tensorflow/lite/schema/schema_generated.h"
+
+#define BLE_SENSE_UUID(val) ("4798e0f2-" val "-4d68-af64-8a8f5258404e")
+
+#undef MAGIC_WAND_DEBUG
+
+namespace {
+
+const int VERSION = 0x00000000;
+
+constexpr int stroke_transmit_stride = 2;
+constexpr int stroke_transmit_max_length = 160;
+constexpr int stroke_max_length =
+ stroke_transmit_max_length * stroke_transmit_stride;
+constexpr int stroke_points_byte_count =
+ 2 * sizeof(int8_t) * stroke_transmit_max_length;
+constexpr int stroke_struct_byte_count =
+ (2 * sizeof(int32_t)) + stroke_points_byte_count;
+constexpr int moving_sample_count = 50;
+
+constexpr int raster_width = 32;
+constexpr int raster_height = 32;
+constexpr int raster_channels = 3;
+constexpr int raster_byte_count =
+ raster_height * raster_width * raster_channels;
+int8_t raster_buffer[raster_byte_count];
+
+BLEService service(BLE_SENSE_UUID("0000"));
+BLECharacteristic strokeCharacteristic(BLE_SENSE_UUID("300a"), BLERead,
+ stroke_struct_byte_count);
+
+// String to calculate the local and device name
+String name;
+
+// A buffer holding the last 600 sets of 3-channel values from the
+// accelerometer.
+constexpr int acceleration_data_length = 600 * 3;
+float acceleration_data[acceleration_data_length] = {};
+// The next free entry in the data array.
+int acceleration_data_index = 0;
+float acceleration_sample_rate = 0.0f;
+
+// A buffer holding the last 600 sets of 3-channel values from the gyroscope.
+constexpr int gyroscope_data_length = 600 * 3;
+float gyroscope_data[gyroscope_data_length] = {};
+float orientation_data[gyroscope_data_length] = {};
+// The next free entry in the data array.
+int gyroscope_data_index = 0;
+float gyroscope_sample_rate = 0.0f;
+
+float current_velocity[3] = {0.0f, 0.0f, 0.0f};
+float current_position[3] = {0.0f, 0.0f, 0.0f};
+float current_gravity[3] = {0.0f, 0.0f, 0.0f};
+float current_gyroscope_drift[3] = {0.0f, 0.0f, 0.0f};
+
+int32_t stroke_length = 0;
+uint8_t stroke_struct_buffer[stroke_struct_byte_count] = {};
+int32_t* stroke_state = reinterpret_cast(stroke_struct_buffer);
+int32_t* stroke_transmit_length =
+ reinterpret_cast(stroke_struct_buffer + sizeof(int32_t));
+int8_t* stroke_points =
+ reinterpret_cast(stroke_struct_buffer + (sizeof(int32_t) * 2));
+
+enum {
+ eWaiting = 0,
+ eDrawing = 1,
+ eDone = 2,
+};
+
+// Create an area of memory to use for input, output, and intermediate arrays.
+// The size of this will depend on the model you're using, and may need to be
+// determined by experimentation.
+constexpr int kTensorArenaSize = 30 * 1024;
+uint8_t tensor_arena[kTensorArenaSize];
+
+tflite::ErrorReporter* error_reporter = nullptr;
+const tflite::Model* model = nullptr;
+tflite::MicroInterpreter* interpreter = nullptr;
+
+constexpr int label_count = 10;
+const char* labels[label_count] = {"0", "1", "2", "3", "4",
+ "5", "6", "7", "8", "9"};
+
+void SetupIMU() {
+ // Make sure we are pulling measurements into a FIFO.
+ // If you see an error on this line, make sure you have at least v1.1.0 of the
+ // Arduino_LSM9DS1 library installed.
+ IMU.setContinuousMode();
+
+ acceleration_sample_rate = IMU.accelerationSampleRate();
+ gyroscope_sample_rate = IMU.gyroscopeSampleRate();
+#ifdef MAGIC_WAND_DEBUG
+ float rate_frac;
+ float rate_int;
+ rate_frac = modf(acceleration_sample_rate, &rate_int);
+ TF_LITE_REPORT_ERROR(error_reporter, "Acceleration sample rate %d.%d Hz",
+ static_cast(rate_int),
+ static_cast(rate_frac * 100));
+ rate_frac = modf(gyroscope_sample_rate, &rate_int);
+ TF_LITE_REPORT_ERROR(error_reporter, "Gyroscope sample rate %d.%d Hz",
+ static_cast(rate_int),
+ static_cast(rate_frac * 100));
+#endif // MAGIC_WAND_DEBUG
+}
+
+void ReadAccelerometerAndGyroscope(int* new_accelerometer_samples,
+ int* new_gyroscope_samples) {
+ // Keep track of whether we stored any new data
+ *new_accelerometer_samples = 0;
+ *new_gyroscope_samples = 0;
+ // Loop through new samples and add to buffer
+ while (IMU.accelerationAvailable()) {
+ const int gyroscope_index = (gyroscope_data_index % gyroscope_data_length);
+ gyroscope_data_index += 3;
+ float* current_gyroscope_data = &gyroscope_data[gyroscope_index];
+ // Read each sample, removing it from the device's FIFO buffer
+ if (!IMU.readGyroscope(current_gyroscope_data[0], current_gyroscope_data[1],
+ current_gyroscope_data[2])) {
+ TF_LITE_REPORT_ERROR(error_reporter, "Failed to read gyroscope data");
+ break;
+ }
+ *new_gyroscope_samples += 1;
+
+ const int acceleration_index =
+ (acceleration_data_index % acceleration_data_length);
+ acceleration_data_index += 3;
+ float* current_acceleration_data = &acceleration_data[acceleration_index];
+ // Read each sample, removing it from the device's FIFO buffer
+ if (!IMU.readAcceleration(current_acceleration_data[0],
+ current_acceleration_data[1],
+ current_acceleration_data[2])) {
+ TF_LITE_REPORT_ERROR(error_reporter, "Failed to read acceleration data");
+ break;
+ }
+ *new_accelerometer_samples += 1;
+ }
+}
+
+float VectorMagnitude(const float* vec) {
+ const float x = vec[0];
+ const float y = vec[1];
+ const float z = vec[2];
+ return sqrtf((x * x) + (y * y) + (z * z));
+}
+
+void EstimateGravityDirection(float* gravity) {
+ int samples_to_average = 100;
+ if (samples_to_average >= acceleration_data_index) {
+ samples_to_average = acceleration_data_index;
+ }
+
+ const int start_index =
+ ((acceleration_data_index +
+ (acceleration_data_length - (3 * (samples_to_average + 1)))) %
+ acceleration_data_length);
+
+ float x_total = 0.0f;
+ float y_total = 0.0f;
+ float z_total = 0.0f;
+ for (int i = 0; i < samples_to_average; ++i) {
+ const int index = ((start_index + (i * 3)) % acceleration_data_length);
+ const float* entry = &acceleration_data[index];
+ const float x = entry[0];
+ const float y = entry[1];
+ const float z = entry[2];
+ x_total += x;
+ y_total += y;
+ z_total += z;
+ }
+ gravity[0] = x_total / samples_to_average;
+ gravity[1] = y_total / samples_to_average;
+ gravity[2] = z_total / samples_to_average;
+}
+
+void UpdateVelocity(int new_samples, float* gravity) {
+ const float gravity_x = gravity[0];
+ const float gravity_y = gravity[1];
+ const float gravity_z = gravity[2];
+
+ const int start_index =
+ ((acceleration_data_index +
+ (acceleration_data_length - (3 * (new_samples + 1)))) %
+ acceleration_data_length);
+
+ const float friction_fudge = 0.98f;
+
+ for (int i = 0; i < new_samples; ++i) {
+ const int index = ((start_index + (i * 3)) % acceleration_data_length);
+ const float* entry = &acceleration_data[index];
+ const float ax = entry[0];
+ const float ay = entry[1];
+ const float az = entry[2];
+
+ // Try to remove gravity from the raw acceleration values.
+ const float ax_minus_gravity = ax - gravity_x;
+ const float ay_minus_gravity = ay - gravity_y;
+ const float az_minus_gravity = az - gravity_z;
+
+ // Update velocity based on the normalized acceleration.
+ current_velocity[0] += ax_minus_gravity;
+ current_velocity[1] += ay_minus_gravity;
+ current_velocity[2] += az_minus_gravity;
+
+ // Dampen the velocity slightly with a fudge factor to stop it exploding.
+ current_velocity[0] *= friction_fudge;
+ current_velocity[1] *= friction_fudge;
+ current_velocity[2] *= friction_fudge;
+
+ // Update the position estimate based on the velocity.
+ current_position[0] += current_velocity[0];
+ current_position[1] += current_velocity[1];
+ current_position[2] += current_velocity[2];
+ }
+}
+
+void EstimateGyroscopeDrift(float* drift) {
+ const bool isMoving = VectorMagnitude(current_velocity) > 0.1f;
+ if (isMoving) {
+ return;
+ }
+
+ int samples_to_average = 20;
+ if (samples_to_average >= gyroscope_data_index) {
+ samples_to_average = gyroscope_data_index;
+ }
+
+ const int start_index =
+ ((gyroscope_data_index +
+ (gyroscope_data_length - (3 * (samples_to_average + 1)))) %
+ gyroscope_data_length);
+
+ float x_total = 0.0f;
+ float y_total = 0.0f;
+ float z_total = 0.0f;
+ for (int i = 0; i < samples_to_average; ++i) {
+ const int index = ((start_index + (i * 3)) % gyroscope_data_length);
+ const float* entry = &gyroscope_data[index];
+ const float x = entry[0];
+ const float y = entry[1];
+ const float z = entry[2];
+ x_total += x;
+ y_total += y;
+ z_total += z;
+ }
+ drift[0] = x_total / samples_to_average;
+ drift[1] = y_total / samples_to_average;
+ drift[2] = z_total / samples_to_average;
+}
+
+void UpdateOrientation(int new_samples, float* gravity, float* drift) {
+ const float drift_x = drift[0];
+ const float drift_y = drift[1];
+ const float drift_z = drift[2];
+
+ const int start_index =
+ ((gyroscope_data_index + (gyroscope_data_length - (3 * new_samples))) %
+ gyroscope_data_length);
+
+ // The gyroscope values are in degrees-per-second, so to approximate
+ // degrees in the integrated orientation, we need to divide each value
+ // by the number of samples each second.
+ const float recip_sample_rate = 1.0f / gyroscope_sample_rate;
+
+ for (int i = 0; i < new_samples; ++i) {
+ const int index = ((start_index + (i * 3)) % gyroscope_data_length);
+ const float* entry = &gyroscope_data[index];
+ const float dx = entry[0];
+ const float dy = entry[1];
+ const float dz = entry[2];
+
+ // Try to remove sensor errors from the raw gyroscope values.
+ const float dx_minus_drift = dx - drift_x;
+ const float dy_minus_drift = dy - drift_y;
+ const float dz_minus_drift = dz - drift_z;
+
+ // Convert from degrees-per-second to appropriate units for this
+ // time interval.
+ const float dx_normalized = dx_minus_drift * recip_sample_rate;
+ const float dy_normalized = dy_minus_drift * recip_sample_rate;
+ const float dz_normalized = dz_minus_drift * recip_sample_rate;
+
+ // Update orientation based on the gyroscope data.
+ float* current_orientation = &orientation_data[index];
+ const int previous_index =
+ (index + (gyroscope_data_length - 3)) % gyroscope_data_length;
+ const float* previous_orientation = &orientation_data[previous_index];
+ current_orientation[0] = previous_orientation[0] + dx_normalized;
+ current_orientation[1] = previous_orientation[1] + dy_normalized;
+ current_orientation[2] = previous_orientation[2] + dz_normalized;
+ }
+}
+
+bool IsMoving(int samples_before) {
+ constexpr float moving_threshold = 9.0f;
+
+ if ((gyroscope_data_index - samples_before) < moving_sample_count) {
+ return false;
+ }
+
+ const int start_index =
+ ((gyroscope_data_index + (gyroscope_data_length -
+ (3 * (moving_sample_count + samples_before)))) %
+ gyroscope_data_length);
+
+ float total = 0.0f;
+ for (int i = 0; i < moving_sample_count; ++i) {
+ const int index = ((start_index + (i * 3)) % gyroscope_data_length);
+ float* current_orientation = &orientation_data[index];
+ const int previous_index =
+ (index + (gyroscope_data_length - 3)) % gyroscope_data_length;
+ const float* previous_orientation = &orientation_data[previous_index];
+ const float dx = current_orientation[0] - previous_orientation[0];
+ const float dy = current_orientation[1] - previous_orientation[1];
+ const float dz = current_orientation[2] - previous_orientation[2];
+ const float mag_squared = (dx * dx) + (dy * dy) + (dz * dz);
+ total += mag_squared;
+ }
+ const bool is_moving = (total > moving_threshold);
+ return is_moving;
+}
+
+void UpdateStroke(int new_samples, bool* done_just_triggered) {
+ constexpr int minimum_stroke_length = moving_sample_count + 10;
+ constexpr float minimum_stroke_size = 0.2f;
+
+ *done_just_triggered = false;
+
+ for (int i = 0; i < new_samples; ++i) {
+ const int current_head = (new_samples - (i + 1));
+ const bool is_moving = IsMoving(current_head);
+ const int32_t old_state = *stroke_state;
+ if ((old_state == eWaiting) || (old_state == eDone)) {
+ if (is_moving) {
+ stroke_length = moving_sample_count;
+ *stroke_state = eDrawing;
+ }
+ } else if (old_state == eDrawing) {
+ if (!is_moving) {
+ if (stroke_length > minimum_stroke_length) {
+ *stroke_state = eDone;
+ } else {
+ stroke_length = 0;
+ *stroke_state = eWaiting;
+#ifdef MAGIC_WAND_DEBUG
+ TF_LITE_REPORT_ERROR(error_reporter, "stroke length too small");
+#endif // MAGIC_WAND_DEBUG
+ }
+ }
+ }
+
+ const bool is_waiting = (*stroke_state == eWaiting);
+ if (is_waiting) {
+ continue;
+ }
+
+ stroke_length += 1;
+ if (stroke_length > stroke_max_length) {
+ stroke_length = stroke_max_length;
+ }
+
+ // Only recalculate the full stroke if it's needed.
+ const bool draw_last_point =
+ ((i == (new_samples - 1)) && (*stroke_state == eDrawing));
+ *done_just_triggered = ((old_state != eDone) && (*stroke_state == eDone));
+ if (!(*done_just_triggered || draw_last_point)) {
+ continue;
+ }
+
+ const int start_index =
+ ((gyroscope_data_index +
+ (gyroscope_data_length - (3 * (stroke_length + current_head)))) %
+ gyroscope_data_length);
+
+ float x_total = 0.0f;
+ float y_total = 0.0f;
+ float z_total = 0.0f;
+ for (int j = 0; j < stroke_length; ++j) {
+ const int index = ((start_index + (j * 3)) % gyroscope_data_length);
+ const float* entry = &orientation_data[index];
+ x_total += entry[0];
+ y_total += entry[1];
+ z_total += entry[2];
+ }
+
+ const float y_mean = y_total / stroke_length;
+ const float z_mean = z_total / stroke_length;
+ constexpr float range = 45.0f;
+
+ const float gy = current_gravity[1];
+ const float gz = current_gravity[2];
+ float gmag = sqrtf((gy * gy) + (gz * gz));
+ if (gmag < 0.0001f) {
+ gmag = 0.0001f;
+ }
+ const float ngy = gy / gmag;
+ const float ngz = gz / gmag;
+
+ const float xaxisz = -ngz;
+ const float xaxisy = -ngy;
+
+ const float yaxisz = -ngy;
+ const float yaxisy = ngz;
+
+ *stroke_transmit_length = stroke_length / stroke_transmit_stride;
+
+ float x_min = 0;
+ float y_min = 0;
+ float x_max = 0;
+ float y_max = 0;
+ for (int j = 0; j < *stroke_transmit_length; ++j) {
+ const int orientation_index =
+ ((start_index + ((j * stroke_transmit_stride) * 3)) %
+ gyroscope_data_length);
+ const float* orientation_entry = &orientation_data[orientation_index];
+
+ const float orientation_y = orientation_entry[1];
+ const float orientation_z = orientation_entry[2];
+
+ const float ny = (orientation_y - y_mean) / range;
+ const float nz = (orientation_z - z_mean) / range;
+
+ const float x_axis = (xaxisz * nz) + (xaxisy * ny);
+ const float y_axis = (yaxisz * nz) + (yaxisy * ny);
+
+ const int stroke_index = j * 2;
+ int8_t* stroke_entry = &stroke_points[stroke_index];
+
+ int32_t unchecked_x = static_cast(roundf(x_axis * 128.0f));
+ int8_t stored_x;
+ if (unchecked_x > 127) {
+ stored_x = 127;
+ } else if (unchecked_x < -128) {
+ stored_x = -128;
+ } else {
+ stored_x = unchecked_x;
+ }
+ stroke_entry[0] = stored_x;
+
+ int32_t unchecked_y = static_cast(roundf(y_axis * 128.0f));
+ int8_t stored_y;
+ if (unchecked_y > 127) {
+ stored_y = 127;
+ } else if (unchecked_y < -128) {
+ stored_y = -128;
+ } else {
+ stored_y = unchecked_y;
+ }
+ stroke_entry[1] = stored_y;
+
+ const bool is_first = (j == 0);
+ if (is_first || (x_axis < x_min)) {
+ x_min = x_axis;
+ }
+ if (is_first || (y_axis < y_min)) {
+ y_min = y_axis;
+ }
+ if (is_first || (x_axis > x_max)) {
+ x_max = x_axis;
+ }
+ if (is_first || (y_axis > y_max)) {
+ y_max = y_axis;
+ }
+ }
+
+ // If the stroke is too small, cancel it.
+ if (*done_just_triggered) {
+ const float x_range = (x_max - x_min);
+ const float y_range = (y_max - y_min);
+ if ((x_range < minimum_stroke_size) && (y_range < minimum_stroke_size)) {
+ *done_just_triggered = false;
+ *stroke_state = eWaiting;
+ *stroke_transmit_length = 0;
+ stroke_length = 0;
+#ifdef MAGIC_WAND_DEBUG
+ TF_LITE_REPORT_ERROR(error_reporter, "stroke too small");
+#endif // MAGIC_WAND_DEBUG
+ }
+ }
+ }
+}
+
+} // namespace
+
+void setup() {
+ tflite::InitializeTarget(); // setup serial port
+
+ // Set up logging. Google style is to avoid globals or statics because of
+ // lifetime uncertainty, but since this has a trivial destructor it's okay.
+ static tflite::MicroErrorReporter micro_error_reporter; // NOLINT
+ error_reporter = µ_error_reporter;
+
+ TF_LITE_REPORT_ERROR(error_reporter, "Started");
+
+ if (!IMU.begin()) {
+ TF_LITE_REPORT_ERROR(error_reporter, "Failed to initialized IMU!");
+ while (true) {
+ // NORETURN
+ }
+ }
+
+ SetupIMU();
+
+ if (!BLE.begin()) {
+ TF_LITE_REPORT_ERROR(error_reporter, "Failed to initialized BLE!");
+ while (true) {
+ // NORETURN
+ }
+ }
+
+ String address = BLE.address();
+
+ TF_LITE_REPORT_ERROR(error_reporter, "address = %s", address.c_str());
+
+ address.toUpperCase();
+
+ name = "BLESense-";
+ name += address[address.length() - 5];
+ name += address[address.length() - 4];
+ name += address[address.length() - 2];
+ name += address[address.length() - 1];
+
+ TF_LITE_REPORT_ERROR(error_reporter, "name = %s", name.c_str());
+
+ BLE.setLocalName(name.c_str());
+ BLE.setDeviceName(name.c_str());
+ BLE.setAdvertisedService(service);
+
+ service.addCharacteristic(strokeCharacteristic);
+
+ BLE.addService(service);
+
+ BLE.advertise();
+
+ // Map the model into a usable data structure. This doesn't involve any
+ // copying or parsing, it's a very lightweight operation.
+ model = tflite::GetModel(g_magic_wand_model_data);
+ if (model->version() != TFLITE_SCHEMA_VERSION) {
+ TF_LITE_REPORT_ERROR(error_reporter,
+ "Model provided is schema version %d not equal "
+ "to supported version %d.",
+ model->version(), TFLITE_SCHEMA_VERSION);
+ return;
+ }
+
+ // Pull in only the operation implementations we need.
+ // This relies on a complete list of all the ops needed by this graph.
+ // An easier approach is to just use the AllOpsResolver, but this will
+ // incur some penalty in code space for op implementations that are not
+ // needed by this graph.
+ static tflite::MicroMutableOpResolver<4> micro_op_resolver; // NOLINT
+ micro_op_resolver.AddConv2D();
+ micro_op_resolver.AddMean();
+ micro_op_resolver.AddFullyConnected();
+ micro_op_resolver.AddSoftmax();
+
+ // Build an interpreter to run the model with.
+ static tflite::MicroInterpreter static_interpreter(
+ model, micro_op_resolver, tensor_arena, kTensorArenaSize, error_reporter);
+ interpreter = &static_interpreter;
+
+ // Allocate memory from the tensor_arena for the model's tensors.
+ interpreter->AllocateTensors();
+
+ TfLiteTensor* model_input = interpreter->input(0);
+ if ((model_input->dims->size != 4) || (model_input->dims->data[0] != 1) ||
+ (model_input->dims->data[1] != raster_height) ||
+ (model_input->dims->data[2] != raster_width) ||
+ (model_input->dims->data[3] != raster_channels) ||
+ (model_input->type != kTfLiteInt8) ||
+ (model_input->params.zero_point != -128) ||
+ (model_input->params.scale != 1.0)) {
+ TF_LITE_REPORT_ERROR(error_reporter,
+ "Bad input tensor parameters in model");
+ return;
+ }
+
+ TfLiteTensor* model_output = interpreter->output(0);
+ if ((model_output->dims->size != 2) || (model_output->dims->data[0] != 1) ||
+ (model_output->dims->data[1] != label_count) ||
+ (model_output->type != kTfLiteInt8)) {
+ TF_LITE_REPORT_ERROR(error_reporter,
+ "Bad output tensor parameters in model");
+ return;
+ }
+}
+
+void loop() {
+ BLEDevice central = BLE.central();
+
+ // if a central is connected to the peripheral:
+ static bool was_connected_last = false;
+ if (central && !was_connected_last) {
+ // print the central's BT address:
+ TF_LITE_REPORT_ERROR(error_reporter, "Connected to central: %s",
+ central.address().c_str());
+ }
+ was_connected_last = central;
+
+ const bool data_available =
+ IMU.accelerationAvailable() || IMU.gyroscopeAvailable();
+ if (!data_available) {
+ return;
+ }
+
+ int accelerometer_samples_read;
+ int gyroscope_samples_read;
+ ReadAccelerometerAndGyroscope(&accelerometer_samples_read,
+ &gyroscope_samples_read);
+
+ bool done_just_triggered = false;
+ if (gyroscope_samples_read > 0) {
+ EstimateGyroscopeDrift(current_gyroscope_drift);
+ UpdateOrientation(gyroscope_samples_read, current_gravity,
+ current_gyroscope_drift);
+ UpdateStroke(gyroscope_samples_read, &done_just_triggered);
+ if (central && central.connected()) {
+ strokeCharacteristic.writeValue(stroke_struct_buffer,
+ stroke_struct_byte_count);
+ }
+ }
+
+ if (accelerometer_samples_read > 0) {
+ EstimateGravityDirection(current_gravity);
+ UpdateVelocity(accelerometer_samples_read, current_gravity);
+ }
+
+ if (done_just_triggered) {
+ RasterizeStroke(stroke_points, *stroke_transmit_length, 0.6f, 0.6f,
+ raster_width, raster_height, raster_buffer);
+ for (int y = 0; y < raster_height; ++y) {
+ char line[raster_width + 1];
+ for (int x = 0; x < raster_width; ++x) {
+ const int8_t* pixel =
+ &raster_buffer[(y * raster_width * raster_channels) +
+ (x * raster_channels)];
+ const int8_t red = pixel[0];
+ const int8_t green = pixel[1];
+ const int8_t blue = pixel[2];
+ char output;
+ if ((red > -128) || (green > -128) || (blue > -128)) {
+ output = '#';
+ } else {
+ output = '.';
+ }
+ line[x] = output;
+ }
+ line[raster_width] = 0;
+ TF_LITE_REPORT_ERROR(error_reporter, line);
+ }
+#ifdef MAGIC_WAND_DEBUG
+ TF_LITE_REPORT_ERROR(error_reporter, "tx len: %d", *stroke_transmit_length);
+#endif // MAGIC_WAND_DEBUG
+
+ TfLiteTensor* model_input = interpreter->input(0);
+ for (int i = 0; i < raster_byte_count; ++i) {
+ model_input->data.int8[i] = raster_buffer[i];
+ }
+
+ TfLiteStatus invoke_status = interpreter->Invoke();
+ if (invoke_status != kTfLiteOk) {
+ TF_LITE_REPORT_ERROR(error_reporter, "Invoke failed");
+ return;
+ }
+
+ TfLiteTensor* output = interpreter->output(0);
+
+ int8_t max_score;
+ int max_index;
+ for (int i = 0; i < label_count; ++i) {
+ const int8_t score = output->data.int8[i];
+ if ((i == 0) || (score > max_score)) {
+ max_score = score;
+ max_index = i;
+ }
+ }
+ float max_score_f =
+ (max_score - output->params.zero_point) * output->params.scale;
+ float max_score_int;
+ float max_score_frac = modf(max_score_f * 100, &max_score_int);
+ TF_LITE_REPORT_ERROR(error_reporter, "Found %s (%d.%d%%)",
+ labels[max_index], static_cast(max_score_int),
+ static_cast(max_score_frac * 100));
+ }
+}
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/magic_wand_model_data.cpp b/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/magic_wand_model_data.cpp
new file mode 100644
index 000000000..77c8a05e8
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/magic_wand_model_data.cpp
@@ -0,0 +1,2588 @@
+/* Copyright 2021 The TensorFlow Authors. All Rights Reserved.
+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.
+==============================================================================*/
+
+unsigned char g_magic_wand_model_data[] = {
+ 0x20, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x00, 0x00, 0x00, 0x00,
+ 0x14, 0x00, 0x20, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x10, 0x00,
+ 0x14, 0x00, 0x00, 0x00, 0x18, 0x00, 0x1c, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
+ 0x44, 0x01, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xec, 0x00, 0x00, 0x00,
+ 0x6c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xec, 0x06, 0x00, 0x00,
+ 0xa4, 0x03, 0x00, 0x00, 0xcc, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
+ 0x3c, 0x78, 0x00, 0x00, 0x38, 0x78, 0x00, 0x00, 0x08, 0x77, 0x00, 0x00,
+ 0xc4, 0x73, 0x00, 0x00, 0x04, 0x72, 0x00, 0x00, 0x14, 0x5e, 0x00, 0x00,
+ 0x4c, 0x5b, 0x00, 0x00, 0xdc, 0x0f, 0x00, 0x00, 0x14, 0x0b, 0x00, 0x00,
+ 0x24, 0x08, 0x00, 0x00, 0x9c, 0x07, 0x00, 0x00, 0x10, 0x78, 0x00, 0x00,
+ 0x0c, 0x78, 0x00, 0x00, 0x08, 0x78, 0x00, 0x00, 0x04, 0x78, 0x00, 0x00,
+ 0x00, 0x78, 0x00, 0x00, 0xfc, 0x77, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00,
+ 0x10, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00,
+ 0x0c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x0f, 0x00, 0x00, 0x00, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x5f,
+ 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
+ 0x08, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00,
+ 0x0f, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x64, 0x65, 0x6e, 0x73, 0x65, 0x00, 0x00, 0x00, 0xa6, 0x89, 0xff, 0xff,
+ 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75,
+ 0x74, 0x5f, 0x31, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
+ 0x08, 0x00, 0x0c, 0x00, 0x04, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
+ 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f,
+ 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0xee, 0x89, 0xff, 0xff,
+ 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x31, 0x2e, 0x31, 0x34,
+ 0x2e, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0f, 0x00, 0x00, 0x00, 0x4d, 0x4c, 0x49, 0x52, 0x20, 0x43, 0x6f, 0x6e,
+ 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, 0x2e, 0x00, 0x00, 0x00, 0x0e, 0x00,
+ 0x18, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x14, 0x00,
+ 0x0e, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
+ 0x58, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x54, 0x76, 0x00, 0x00, 0xdc, 0x75, 0x00, 0x00,
+ 0x30, 0x74, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0xd0, 0x6e, 0x00, 0x00,
+ 0x88, 0x5a, 0x00, 0x00, 0x98, 0x56, 0x00, 0x00, 0xd0, 0x0a, 0x00, 0x00,
+ 0x60, 0x09, 0x00, 0x00, 0x80, 0x06, 0x00, 0x00, 0x64, 0x05, 0x00, 0x00,
+ 0xfc, 0x03, 0x00, 0x00, 0xd0, 0x02, 0x00, 0x00, 0x14, 0x02, 0x00, 0x00,
+ 0x3c, 0x01, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
+ 0x06, 0x00, 0x00, 0x00, 0xd4, 0x04, 0x00, 0x00, 0x94, 0x03, 0x00, 0x00,
+ 0x68, 0x02, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e,
+ 0x00, 0x00, 0x00, 0x00, 0x7e, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09,
+ 0x03, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0xda, 0x8a, 0xff, 0xff, 0x00, 0x00, 0x80, 0x3f,
+ 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x0e, 0x00, 0x00, 0x00, 0x38, 0xfb, 0xff, 0xff, 0x19, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x19, 0x02, 0x00, 0x00, 0x00, 0x78, 0x8a, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x09, 0x14, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x18, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
+ 0x19, 0x00, 0x00, 0x00, 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c,
+ 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x43,
+ 0x61, 0x6c, 0x6c, 0x3a, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0x00, 0x00, 0x54, 0x8a, 0xff, 0xff,
+ 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x3b, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x36, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+ 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x64, 0x8a, 0xff, 0xff,
+ 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x0d, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
+ 0xf4, 0xfb, 0xff, 0xff, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
+ 0x04, 0x00, 0x00, 0x00, 0x34, 0x8b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09,
+ 0x14, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+ 0x4c, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00,
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x64, 0x65, 0x6e, 0x73, 0x65, 0x2f,
+ 0x4d, 0x61, 0x74, 0x4d, 0x75, 0x6c, 0x3b, 0x6d, 0x6f, 0x64, 0x65, 0x6c,
+ 0x2f, 0x64, 0x65, 0x6e, 0x73, 0x65, 0x2f, 0x42, 0x69, 0x61, 0x73, 0x41,
+ 0x64, 0x64, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0x0a, 0x00, 0x00, 0x00, 0x1c, 0x8b, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
+ 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x12, 0x0b, 0xe6, 0x3d,
+ 0x01, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x18, 0x00, 0x08, 0x00,
+ 0x0c, 0x00, 0x10, 0x00, 0x07, 0x00, 0x14, 0x00, 0x0e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1b, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+ 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3c, 0x8b, 0xff, 0xff,
+ 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc8, 0xfc, 0xff, 0xff,
+ 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x02, 0x00, 0x00, 0x00,
+ 0x08, 0x8c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x14, 0x00, 0x00, 0x00,
+ 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
+ 0x38, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x40, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x6d, 0x6f, 0x64, 0x65,
+ 0x6c, 0x2f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x61, 0x76, 0x65,
+ 0x72, 0x61, 0x67, 0x65, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x69, 0x6e, 0x67,
+ 0x32, 0x64, 0x2f, 0x4d, 0x65, 0x61, 0x6e, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0x40, 0x00, 0x00, 0x00, 0xec, 0x8b, 0xff, 0xff,
+ 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x0a, 0xc3, 0x18, 0x3c, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xaa, 0xfd, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01,
+ 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x9c, 0xfd, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
+ 0x07, 0x00, 0x00, 0x00, 0xc0, 0x8c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09,
+ 0x14, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0xb8, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x6d, 0x6f, 0x64, 0x65,
+ 0x6c, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x5f, 0x32, 0x2f, 0x52, 0x65, 0x6c, 0x75, 0x3b, 0x6d, 0x6f, 0x64, 0x65,
+ 0x6c, 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x6e, 0x6f, 0x72, 0x6d,
+ 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x32, 0x2f,
+ 0x46, 0x75, 0x73, 0x65, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4e, 0x6f,
+ 0x72, 0x6d, 0x56, 0x33, 0x3b, 0x63, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f,
+ 0x32, 0x2f, 0x62, 0x69, 0x61, 0x73, 0x3b, 0x6d, 0x6f, 0x64, 0x65, 0x6c,
+ 0x2f, 0x63, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x32, 0x2f, 0x42, 0x69,
+ 0x61, 0x73, 0x41, 0x64, 0x64, 0x3b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f,
+ 0x63, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x32, 0x2f, 0x43, 0x6f, 0x6e,
+ 0x76, 0x32, 0x44, 0x31, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x40, 0x00, 0x00, 0x00, 0x14, 0x8d, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
+ 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x9f, 0x0a, 0x50, 0x3d,
+ 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xd2, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x24, 0x00, 0x00, 0x00,
+ 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xc4, 0xfe, 0xff, 0xff,
+ 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0xe8, 0x8d, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x14, 0x00, 0x00, 0x00,
+ 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00,
+ 0xa0, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x80, 0x00, 0x00, 0x00, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x61, 0x63,
+ 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x31, 0x2f, 0x52,
+ 0x65, 0x6c, 0x75, 0x3b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x62, 0x61,
+ 0x74, 0x63, 0x68, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x31, 0x2f, 0x46, 0x75, 0x73, 0x65,
+ 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4e, 0x6f, 0x72, 0x6d, 0x56, 0x33,
+ 0x3b, 0x63, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x31, 0x2f, 0x62, 0x69,
+ 0x61, 0x73, 0x3b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x63, 0x6f, 0x6e,
+ 0x76, 0x32, 0x64, 0x5f, 0x31, 0x2f, 0x42, 0x69, 0x61, 0x73, 0x41, 0x64,
+ 0x64, 0x3b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x63, 0x6f, 0x6e, 0x76,
+ 0x32, 0x64, 0x5f, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x44, 0x31,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x3c, 0x8e, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x07, 0xdf, 0x24, 0x3c, 0x01, 0x00, 0x00, 0x00,
+ 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0e, 0x00, 0x14, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0c, 0x00,
+ 0x07, 0x00, 0x10, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x0c, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0f, 0x00,
+ 0x0c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x0b, 0x00, 0x00, 0x00,
+ 0x0c, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x4c, 0x8f, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x09, 0x14, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00,
+ 0x20, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00,
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x52, 0x65, 0x6c, 0x75, 0x3b, 0x6d, 0x6f,
+ 0x64, 0x65, 0x6c, 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x6e, 0x6f,
+ 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f,
+ 0x46, 0x75, 0x73, 0x65, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4e, 0x6f,
+ 0x72, 0x6d, 0x56, 0x33, 0x3b, 0x63, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x2f,
+ 0x62, 0x69, 0x61, 0x73, 0x3b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x63,
+ 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x2f, 0x42, 0x69, 0x61, 0x73, 0x41, 0x64,
+ 0x64, 0x3b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x63, 0x6f, 0x6e, 0x76,
+ 0x32, 0x64, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x44, 0x32, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x94, 0x8f, 0xff, 0xff,
+ 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x47, 0xb1, 0x5b, 0x3d, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xba, 0x90, 0xff, 0xff,
+ 0x04, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x5a, 0xdf, 0xff, 0xff,
+ 0x44, 0x05, 0x00, 0x00, 0x31, 0xee, 0xff, 0xff, 0x10, 0xf3, 0xff, 0xff,
+ 0x31, 0xec, 0xff, 0xff, 0x86, 0xea, 0xff, 0xff, 0x34, 0x01, 0x00, 0x00,
+ 0x98, 0xfe, 0xff, 0xff, 0xe1, 0xe9, 0xff, 0xff, 0x36, 0xf0, 0xff, 0xff,
+ 0xd2, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x00,
+ 0x0a, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
+ 0x64, 0x65, 0x6e, 0x73, 0x65, 0x2f, 0x62, 0x69, 0x61, 0x73, 0x00, 0x00,
+ 0x1c, 0x90, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x41, 0xaf, 0xe2, 0x38, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x91, 0xff, 0xff,
+ 0x04, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0xfd, 0x11, 0x10, 0x9c,
+ 0x0c, 0x05, 0xf9, 0xfd, 0x09, 0x10, 0x02, 0x1b, 0xee, 0xfc, 0x18, 0x08,
+ 0xc5, 0x0c, 0x12, 0xf8, 0xf8, 0x12, 0x87, 0x08, 0x26, 0x1f, 0x08, 0xdd,
+ 0x14, 0xb7, 0x20, 0x09, 0x18, 0x01, 0x9a, 0xfb, 0xd9, 0xf4, 0xda, 0x8f,
+ 0x02, 0xe6, 0xdd, 0x28, 0x90, 0xeb, 0x10, 0xfe, 0x06, 0x13, 0xae, 0xd7,
+ 0xf7, 0xad, 0xf7, 0xc1, 0xe4, 0xba, 0x01, 0xa4, 0x03, 0x03, 0x01, 0xe1,
+ 0xaf, 0x13, 0x0e, 0xde, 0x14, 0x21, 0xad, 0xc1, 0xab, 0x1b, 0xbf, 0x14,
+ 0x98, 0xb1, 0xe7, 0xa5, 0x20, 0xdf, 0xae, 0x18, 0xbf, 0x29, 0x0b, 0x1c,
+ 0xa6, 0xc9, 0xa1, 0xcf, 0xb3, 0x17, 0x12, 0xcb, 0x9f, 0x9f, 0x07, 0xb3,
+ 0xbf, 0x27, 0xc9, 0x05, 0x1c, 0xdf, 0xac, 0xb5, 0x05, 0xb8, 0xad, 0xb2,
+ 0x16, 0x14, 0xda, 0xfd, 0xa1, 0x15, 0xb1, 0xba, 0x06, 0x01, 0xa4, 0x0f,
+ 0xa3, 0x21, 0x1c, 0x02, 0x22, 0xbe, 0xfc, 0xb0, 0xad, 0x22, 0x0c, 0xac,
+ 0x04, 0x15, 0xbd, 0xd8, 0x09, 0x19, 0x03, 0x0d, 0xb9, 0x0c, 0xdb, 0xba,
+ 0xce, 0x1e, 0x06, 0x21, 0xf7, 0x11, 0xc5, 0x15, 0x15, 0xeb, 0xbc, 0xd3,
+ 0x1b, 0x13, 0x12, 0x08, 0xbc, 0xd0, 0x1a, 0x12, 0xc9, 0x00, 0xbb, 0xad,
+ 0x17, 0xa7, 0x08, 0x14, 0xd5, 0xbe, 0xdc, 0x21, 0xa6, 0xdc, 0x1d, 0xc7,
+ 0xb9, 0xbd, 0xc5, 0xfe, 0xc3, 0xb5, 0xe5, 0xa9, 0xaf, 0x1f, 0x17, 0x1b,
+ 0x1b, 0xc2, 0x08, 0xb1, 0xcd, 0x0b, 0xe4, 0xd0, 0x12, 0xd7, 0x0c, 0x07,
+ 0x2b, 0x03, 0x25, 0xfc, 0xfd, 0xcf, 0xfd, 0xa6, 0x2d, 0xc3, 0xab, 0xf9,
+ 0xfc, 0xde, 0xfc, 0xf3, 0xc7, 0x94, 0x01, 0x13, 0xb3, 0xaf, 0x1e, 0x03,
+ 0xa9, 0x15, 0xc1, 0xea, 0xf8, 0xad, 0x14, 0xa7, 0xbb, 0x9a, 0x0b, 0xd6,
+ 0xcf, 0x11, 0x0d, 0x15, 0x9c, 0xc1, 0x14, 0x07, 0xab, 0xc9, 0xca, 0xd3,
+ 0x22, 0xa2, 0x93, 0x09, 0x13, 0xe2, 0xb6, 0x1a, 0x2a, 0x90, 0x02, 0x13,
+ 0xac, 0xb0, 0xc5, 0xb2, 0x0f, 0xbe, 0xd1, 0xd8, 0xa6, 0x0f, 0xe1, 0x10,
+ 0x26, 0xd4, 0xc8, 0x15, 0x16, 0x06, 0xff, 0xae, 0xee, 0xcd, 0x11, 0xbb,
+ 0xc3, 0xc3, 0x2d, 0xca, 0xd9, 0xc7, 0x16, 0x22, 0xdc, 0x25, 0x14, 0x0f,
+ 0xb7, 0x00, 0x20, 0x0d, 0x2d, 0xf0, 0xa9, 0xfd, 0xcf, 0x0f, 0xbc, 0xf5,
+ 0x0f, 0x10, 0x92, 0x19, 0xcb, 0xcb, 0x8a, 0x0d, 0xc6, 0xaa, 0x0a, 0xc9,
+ 0xbc, 0x97, 0xc8, 0x1d, 0xfa, 0x18, 0x12, 0x87, 0xd8, 0x8c, 0xc5, 0x12,
+ 0x1c, 0xc9, 0x0e, 0xa9, 0xe2, 0xa9, 0xcc, 0x0f, 0x14, 0xff, 0x15, 0x1c,
+ 0xab, 0xb5, 0x07, 0x03, 0x24, 0xbb, 0xec, 0x0d, 0xa3, 0xea, 0x0e, 0x24,
+ 0x15, 0x14, 0xf7, 0xea, 0x11, 0x8c, 0x16, 0xcd, 0xda, 0x00, 0x08, 0x12,
+ 0xee, 0xe7, 0xf7, 0x03, 0xbf, 0xc8, 0x22, 0x1d, 0x07, 0x09, 0xff, 0x9e,
+ 0xe5, 0xc2, 0x11, 0xd2, 0xe2, 0xd3, 0x39, 0x12, 0x12, 0xbe, 0x17, 0xf0,
+ 0xcf, 0x04, 0xf9, 0xa6, 0xda, 0xdf, 0xcd, 0xfc, 0xf2, 0xdb, 0xbf, 0x0f,
+ 0xc0, 0x0f, 0xb6, 0xf6, 0xcd, 0x17, 0xb3, 0x18, 0x18, 0xc6, 0xd3, 0xe7,
+ 0x08, 0x1d, 0x14, 0xbd, 0xa8, 0x12, 0xb8, 0x12, 0x12, 0x01, 0x81, 0x0d,
+ 0xb2, 0xbd, 0xcd, 0xae, 0x1d, 0x35, 0x08, 0xc2, 0xd9, 0xda, 0xf7, 0x02,
+ 0xc7, 0xa7, 0xc9, 0x10, 0x03, 0x14, 0x0f, 0xb5, 0x27, 0xcf, 0x35, 0xc1,
+ 0xb6, 0xca, 0xc0, 0x05, 0xf2, 0x15, 0x1e, 0x17, 0x18, 0xa7, 0x09, 0xa6,
+ 0xdb, 0x21, 0x27, 0xd1, 0xc0, 0x13, 0xb8, 0x24, 0x1d, 0x19, 0x05, 0xc6,
+ 0xd8, 0x17, 0xa8, 0x0b, 0xa9, 0xd2, 0x9d, 0x19, 0x0e, 0xdc, 0xad, 0xaa,
+ 0xae, 0xc4, 0x00, 0xb7, 0x0d, 0xf6, 0xbc, 0xd6, 0xd3, 0xdf, 0xa9, 0x0f,
+ 0xf3, 0x15, 0xd3, 0xc6, 0x16, 0x07, 0x05, 0xfb, 0xbc, 0xc8, 0xc3, 0x1e,
+ 0xf4, 0xfb, 0xe5, 0xb4, 0xf9, 0x1c, 0xb4, 0x0d, 0xfc, 0x0a, 0x04, 0x16,
+ 0x1a, 0xe3, 0xc8, 0x07, 0xd1, 0xe1, 0x12, 0xb0, 0xb5, 0xb0, 0xcc, 0x06,
+ 0xe1, 0x04, 0xa8, 0xd7, 0x1c, 0x1c, 0xda, 0xa8, 0x14, 0xb8, 0x0e, 0xd8,
+ 0xbf, 0x16, 0xd2, 0x04, 0xfd, 0xfe, 0x2a, 0xc5, 0x26, 0xba, 0x21, 0xba,
+ 0x0d, 0xe2, 0x15, 0xb0, 0x17, 0xbf, 0x0e, 0x1a, 0xb8, 0xc2, 0xf4, 0x0b,
+ 0xfc, 0xe7, 0xa3, 0x1e, 0xb9, 0x05, 0xdb, 0xa2, 0x0a, 0x1b, 0x9f, 0x0e,
+ 0xe0, 0x9d, 0xa9, 0xbc, 0xa6, 0xca, 0x15, 0xbc, 0xce, 0x11, 0x2c, 0x90,
+ 0x0b, 0xf1, 0x19, 0xa0, 0x09, 0xfd, 0xfb, 0xb3, 0xa7, 0xbb, 0xc0, 0xfa,
+ 0xd0, 0x1e, 0x04, 0xf2, 0x0d, 0xbe, 0x10, 0x06, 0xbe, 0x21, 0xf6, 0x1a,
+ 0xe6, 0x11, 0xf5, 0x25, 0x2e, 0x1b, 0x19, 0x03, 0x1c, 0xe5, 0x96, 0x92,
+ 0xae, 0x93, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x10, 0x00, 0x00, 0x00,
+ 0x09, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
+ 0x12, 0x00, 0x00, 0x00, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x64, 0x65,
+ 0x6e, 0x73, 0x65, 0x2f, 0x4d, 0x61, 0x74, 0x4d, 0x75, 0x6c, 0x00, 0x00,
+ 0x04, 0x93, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0xb4, 0xf0, 0x3d, 0x3c, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x2a, 0x94, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0xe9, 0x01, 0x00, 0x00, 0xfb, 0x07, 0x00, 0x00, 0x42, 0x05, 0x00, 0x00,
+ 0x3c, 0xe7, 0xff, 0xff, 0x6e, 0xf8, 0xff, 0xff, 0xa8, 0xf0, 0xff, 0xff,
+ 0x13, 0xfa, 0xff, 0xff, 0x06, 0xfe, 0xff, 0xff, 0xca, 0xfd, 0xff, 0xff,
+ 0xcd, 0x02, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0xc1, 0xf8, 0xff, 0xff,
+ 0xfb, 0xfe, 0xff, 0xff, 0x13, 0xfb, 0xff, 0xff, 0x99, 0xff, 0xff, 0xff,
+ 0x75, 0x05, 0x00, 0x00, 0x73, 0xf4, 0xff, 0xff, 0x3e, 0x08, 0x00, 0x00,
+ 0x41, 0x07, 0x00, 0x00, 0xae, 0xee, 0xff, 0xff, 0xc3, 0xf3, 0xff, 0xff,
+ 0xa3, 0xfa, 0xff, 0xff, 0xf1, 0xf5, 0xff, 0xff, 0xdb, 0xfe, 0xff, 0xff,
+ 0xae, 0x03, 0x00, 0x00, 0x25, 0xfe, 0xff, 0xff, 0xb8, 0xfd, 0xff, 0xff,
+ 0xa6, 0xf5, 0xff, 0xff, 0x51, 0xee, 0xff, 0xff, 0xcd, 0xff, 0xff, 0xff,
+ 0xd2, 0xef, 0xff, 0xff, 0x80, 0xf6, 0xff, 0xff, 0x90, 0xfd, 0xff, 0xff,
+ 0x8c, 0xfe, 0xff, 0xff, 0x42, 0xf1, 0xff, 0xff, 0x43, 0x00, 0x00, 0x00,
+ 0xa6, 0xff, 0xff, 0xff, 0x05, 0xfb, 0xff, 0xff, 0x7e, 0xf1, 0xff, 0xff,
+ 0x93, 0xf5, 0xff, 0xff, 0x65, 0x03, 0x00, 0x00, 0x92, 0xf2, 0xff, 0xff,
+ 0x13, 0xfa, 0xff, 0xff, 0xd4, 0xeb, 0xff, 0xff, 0x81, 0xef, 0xff, 0xff,
+ 0x9f, 0xfb, 0xff, 0xff, 0xa5, 0xf6, 0xff, 0xff, 0x14, 0x01, 0x00, 0x00,
+ 0x29, 0xfe, 0xff, 0xff, 0xe2, 0x00, 0x00, 0x00, 0x2b, 0xef, 0xff, 0xff,
+ 0x96, 0xec, 0xff, 0xff, 0xa0, 0x02, 0x00, 0x00, 0xbd, 0xf4, 0xff, 0xff,
+ 0x8e, 0xfb, 0xff, 0xff, 0x23, 0xe7, 0xff, 0xff, 0xa9, 0xf6, 0xff, 0xff,
+ 0xc4, 0xf5, 0xff, 0xff, 0x41, 0x02, 0x00, 0x00, 0xe4, 0xf7, 0xff, 0xff,
+ 0xbc, 0x00, 0x00, 0x00, 0x1d, 0xf4, 0xff, 0xff, 0xea, 0xf9, 0xff, 0xff,
+ 0x59, 0xf7, 0xff, 0xff, 0x1a, 0x95, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02,
+ 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x90, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
+ 0x7f, 0x00, 0x00, 0x00, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x61, 0x63,
+ 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x32, 0x2f, 0x52,
+ 0x65, 0x6c, 0x75, 0x3b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x62, 0x61,
+ 0x74, 0x63, 0x68, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x32, 0x2f, 0x46, 0x75, 0x73, 0x65,
+ 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4e, 0x6f, 0x72, 0x6d, 0x56, 0x33,
+ 0x3b, 0x63, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x32, 0x2f, 0x62, 0x69,
+ 0x61, 0x73, 0x3b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x63, 0x6f, 0x6e,
+ 0x76, 0x32, 0x64, 0x5f, 0x32, 0x2f, 0x42, 0x69, 0x61, 0x73, 0x41, 0x64,
+ 0x64, 0x3b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x63, 0x6f, 0x6e, 0x76,
+ 0x32, 0x64, 0x5f, 0x32, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x44, 0x00,
+ 0xd8, 0x94, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00,
+ 0x40, 0x00, 0x00, 0x00, 0x4c, 0x5d, 0x06, 0x39, 0xf5, 0x73, 0x03, 0x39,
+ 0x79, 0x31, 0x0a, 0x39, 0x60, 0xd6, 0xf8, 0x38, 0x45, 0x5f, 0x24, 0x39,
+ 0x7d, 0xca, 0xfa, 0x38, 0xa6, 0x58, 0xfa, 0x38, 0xb0, 0xa4, 0x0c, 0x39,
+ 0x88, 0xf1, 0x01, 0x39, 0x62, 0xe2, 0xe0, 0x38, 0x08, 0xe8, 0xdd, 0x38,
+ 0x54, 0x03, 0x14, 0x39, 0x6a, 0xad, 0xe7, 0x38, 0xf6, 0xf4, 0xf1, 0x38,
+ 0xe4, 0x84, 0xee, 0x38, 0x80, 0xba, 0x17, 0x39, 0x74, 0xe1, 0x23, 0x39,
+ 0x91, 0x30, 0x1f, 0x39, 0x5d, 0x23, 0x18, 0x39, 0xca, 0x32, 0x0f, 0x39,
+ 0xe6, 0xac, 0xf1, 0x38, 0xcf, 0x67, 0x18, 0x39, 0x83, 0x61, 0xe2, 0x38,
+ 0xec, 0x4b, 0x1e, 0x39, 0x77, 0x65, 0xf6, 0x38, 0xfb, 0xba, 0x0a, 0x39,
+ 0x88, 0x47, 0xdd, 0x38, 0x8e, 0xda, 0x06, 0x39, 0xa1, 0xc4, 0x18, 0x39,
+ 0x1c, 0xcf, 0x13, 0x39, 0x1d, 0x16, 0x0e, 0x39, 0x8f, 0x16, 0x04, 0x39,
+ 0xec, 0x47, 0x0d, 0x39, 0x6c, 0x30, 0xbb, 0x38, 0x46, 0xe5, 0x00, 0x39,
+ 0xe9, 0x16, 0xf9, 0x38, 0x5c, 0x5d, 0xd1, 0x38, 0xb6, 0x54, 0x13, 0x39,
+ 0x2c, 0x83, 0xd3, 0x38, 0x24, 0xe1, 0xce, 0x38, 0x37, 0x2f, 0x1f, 0x39,
+ 0x0d, 0xcd, 0xf9, 0x38, 0x8d, 0x4a, 0x07, 0x39, 0x70, 0xc0, 0xf9, 0x38,
+ 0xa6, 0x21, 0xe0, 0x38, 0x19, 0xf1, 0xe5, 0x38, 0x87, 0x56, 0xf1, 0x38,
+ 0xee, 0x11, 0x16, 0x39, 0x44, 0xc2, 0x0a, 0x39, 0x9d, 0xdc, 0x0c, 0x39,
+ 0x25, 0xf1, 0xd6, 0x38, 0x2c, 0x2e, 0xec, 0x38, 0x6e, 0xee, 0xc6, 0x38,
+ 0x65, 0x77, 0x0f, 0x39, 0xf9, 0x7e, 0x1c, 0x39, 0x51, 0x7b, 0xec, 0x38,
+ 0x0f, 0xac, 0xfd, 0x38, 0x75, 0xef, 0xde, 0x38, 0x13, 0xa4, 0x15, 0x39,
+ 0xcd, 0x7a, 0x21, 0x39, 0x5c, 0x79, 0x0d, 0x39, 0x50, 0x85, 0xf6, 0x38,
+ 0x5e, 0xf5, 0x0f, 0x39, 0x87, 0x0a, 0xd5, 0x38, 0x40, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0x98, 0xff, 0xff,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x43, 0x2b, 0x15, 0x0a,
+ 0xef, 0x23, 0x2f, 0x08, 0xf1, 0x1e, 0xf0, 0x11, 0x20, 0x22, 0x2f, 0xfd,
+ 0x05, 0x25, 0xf8, 0xf8, 0xd0, 0x13, 0xf1, 0xda, 0xfa, 0xc7, 0x11, 0xe4,
+ 0xee, 0xff, 0xea, 0x1f, 0x08, 0x23, 0x35, 0xd1, 0x3d, 0x30, 0xe2, 0xf8,
+ 0x0f, 0xf6, 0xed, 0xe3, 0xdc, 0xf6, 0xe2, 0xbb, 0xe4, 0xe1, 0xb6, 0x38,
+ 0xc1, 0xeb, 0x40, 0xe3, 0x13, 0x04, 0xf2, 0xea, 0x04, 0xe6, 0xfa, 0xe5,
+ 0x18, 0x1e, 0x03, 0xd4, 0xf3, 0x0e, 0x14, 0x21, 0xe9, 0x24, 0xf0, 0xf7,
+ 0xfb, 0x05, 0x00, 0x0f, 0xf9, 0x23, 0xe3, 0x26, 0xda, 0xff, 0x13, 0xce,
+ 0x00, 0xe9, 0x1f, 0xf0, 0xf8, 0xe7, 0xeb, 0x0b, 0xdc, 0xf7, 0xff, 0x33,
+ 0x0f, 0xf8, 0xf1, 0x26, 0x12, 0x07, 0x1a, 0xde, 0xd6, 0x0b, 0x02, 0xfa,
+ 0xd3, 0x41, 0x27, 0x0a, 0x10, 0x18, 0x1e, 0x04, 0x35, 0x13, 0xeb, 0x15,
+ 0x06, 0xe3, 0x24, 0x1a, 0x2b, 0xc5, 0x0c, 0x35, 0xf2, 0xf4, 0x11, 0x13,
+ 0x0d, 0x01, 0xe1, 0xbf, 0x9e, 0x07, 0xdc, 0xdf, 0xde, 0x34, 0x39, 0x18,
+ 0xf6, 0x26, 0x00, 0xdc, 0x04, 0xf7, 0xf2, 0x23, 0x09, 0xe0, 0xf8, 0xce,
+ 0xf7, 0x30, 0xd5, 0x35, 0x23, 0x01, 0xe7, 0x28, 0x02, 0xf9, 0x19, 0xd3,
+ 0x11, 0xff, 0xe4, 0xff, 0xcd, 0x4b, 0x32, 0x35, 0x04, 0x7f, 0x13, 0xd8,
+ 0x48, 0x01, 0xf0, 0xfc, 0x18, 0x06, 0x18, 0x09, 0x3f, 0xfc, 0x19, 0xb2,
+ 0xf6, 0x3a, 0x0b, 0x1c, 0xf1, 0xf5, 0xee, 0xf0, 0xf9, 0x27, 0x09, 0xd0,
+ 0xf3, 0xe6, 0xee, 0x38, 0xa4, 0xef, 0xdc, 0xfd, 0xf2, 0x8d, 0xef, 0xe5,
+ 0xf9, 0xd0, 0xe1, 0x02, 0xe9, 0x31, 0x21, 0x9b, 0x60, 0x39, 0xd5, 0x1d,
+ 0xf8, 0xc2, 0xce, 0xd2, 0xc8, 0xb0, 0xdf, 0xc3, 0x11, 0xca, 0xa9, 0x51,
+ 0xc2, 0xcb, 0x1e, 0xe4, 0xf0, 0xe8, 0xd1, 0xc3, 0xe8, 0xc3, 0xd8, 0xd4,
+ 0x20, 0x1b, 0x29, 0xc0, 0xfc, 0x1a, 0x1c, 0x07, 0xfa, 0x17, 0xee, 0x06,
+ 0xf6, 0x0d, 0x2b, 0xf1, 0xef, 0x34, 0xdd, 0x36, 0xcd, 0x19, 0x0d, 0xb5,
+ 0xf1, 0xc3, 0xff, 0xe6, 0xe5, 0xdf, 0xcf, 0x16, 0xfd, 0x05, 0xe3, 0x0e,
+ 0x19, 0x3a, 0xe1, 0x24, 0x20, 0xe4, 0xe5, 0x23, 0x2f, 0x0a, 0x10, 0x02,
+ 0xeb, 0x07, 0x12, 0x1e, 0xc9, 0x2f, 0xfb, 0xe6, 0xeb, 0x02, 0x13, 0x02,
+ 0x07, 0xfc, 0x0c, 0x1a, 0xfa, 0xf2, 0xe8, 0x53, 0x12, 0x09, 0x07, 0x06,
+ 0x05, 0xb6, 0xfb, 0x0c, 0x13, 0xff, 0x49, 0xec, 0x05, 0x14, 0x57, 0xfe,
+ 0xd9, 0x29, 0xe6, 0xd6, 0x0e, 0x00, 0x04, 0x04, 0xf7, 0x61, 0x1e, 0x7f,
+ 0xe4, 0xef, 0x09, 0x28, 0xe8, 0x15, 0xef, 0x1f, 0xf9, 0xf1, 0xae, 0x0a,
+ 0x27, 0xfe, 0xed, 0x0c, 0x08, 0xe9, 0x1d, 0x04, 0xde, 0x2d, 0xd9, 0xf0,
+ 0xcc, 0xf2, 0x20, 0x15, 0xdc, 0x00, 0xfa, 0x03, 0xde, 0xf5, 0xdf, 0x11,
+ 0xf8, 0xec, 0xf3, 0xfb, 0xfe, 0xeb, 0xd1, 0x25, 0x23, 0x10, 0x1e, 0x0d,
+ 0xda, 0xbd, 0xf3, 0x3c, 0xea, 0xe9, 0xea, 0xf5, 0x2e, 0xef, 0x09, 0xc8,
+ 0x03, 0xe6, 0xd0, 0x2f, 0x11, 0x03, 0x0f, 0xfe, 0x14, 0x08, 0xce, 0x29,
+ 0x31, 0xeb, 0xe5, 0x0d, 0x08, 0x08, 0xfb, 0xfa, 0x03, 0x13, 0x62, 0xe8,
+ 0xe2, 0x19, 0xec, 0xe2, 0x36, 0xf8, 0x0a, 0xf7, 0xf2, 0x31, 0x11, 0x4c,
+ 0xf5, 0xef, 0xde, 0x10, 0xde, 0x01, 0xf8, 0xcb, 0xf7, 0xfa, 0xe1, 0x11,
+ 0xf8, 0xfc, 0x16, 0x06, 0xf3, 0xb9, 0xfc, 0x22, 0xfa, 0xf7, 0xf1, 0xf8,
+ 0x1b, 0x08, 0xfe, 0xe4, 0xfb, 0xf5, 0xcf, 0x13, 0xf1, 0xba, 0xcd, 0x33,
+ 0xda, 0xca, 0xa5, 0xe5, 0xfe, 0x9c, 0xe2, 0xfa, 0x2a, 0xe4, 0x13, 0xfd,
+ 0xdd, 0xbd, 0x27, 0xe4, 0x9e, 0x10, 0xd3, 0xf0, 0x04, 0xfa, 0xee, 0xce,
+ 0xf3, 0xb7, 0xc9, 0xe9, 0xc9, 0xee, 0xdd, 0x41, 0xdc, 0xd7, 0x25, 0x19,
+ 0x09, 0xe2, 0xbc, 0x30, 0xfc, 0x3e, 0x38, 0x17, 0x06, 0xd9, 0x45, 0xdd,
+ 0x1d, 0x16, 0xe9, 0xe3, 0xeb, 0xf4, 0xee, 0xad, 0xf1, 0x73, 0x15, 0x60,
+ 0xe5, 0xf4, 0x03, 0x20, 0xd0, 0xdf, 0xab, 0x14, 0xef, 0xd6, 0xbb, 0xe5,
+ 0x1b, 0x05, 0xde, 0xef, 0xf1, 0xc9, 0x09, 0xf0, 0xa2, 0x0e, 0xc4, 0x08,
+ 0xfe, 0xf1, 0x02, 0xf5, 0xfb, 0xbf, 0xd8, 0xf1, 0x04, 0x1d, 0xe6, 0xfa,
+ 0x0c, 0x12, 0xfc, 0x35, 0x1d, 0xf6, 0xdf, 0x1b, 0x59, 0x13, 0x06, 0x09,
+ 0x00, 0xff, 0x1c, 0x23, 0xc5, 0x2a, 0xee, 0xde, 0xee, 0xfd, 0x14, 0x0e,
+ 0xfb, 0x06, 0x0b, 0xfb, 0xf2, 0x25, 0xeb, 0x0a, 0xe7, 0xf4, 0xf8, 0x13,
+ 0x16, 0xec, 0x00, 0x21, 0x1b, 0x0e, 0x3d, 0xfa, 0xfd, 0x31, 0x2f, 0xf1,
+ 0xea, 0x22, 0xe0, 0xe9, 0x03, 0xed, 0x04, 0xf7, 0xdd, 0x54, 0x36, 0x7f,
+ 0xea, 0x19, 0xf5, 0x18, 0xe4, 0xf9, 0xd1, 0x10, 0xf1, 0x02, 0xbc, 0x12,
+ 0x1c, 0xf3, 0xff, 0x11, 0x0c, 0xda, 0x0a, 0xeb, 0xec, 0x09, 0xd7, 0x04,
+ 0xdf, 0xcb, 0x13, 0x09, 0x07, 0x01, 0xf9, 0xf9, 0x0a, 0x16, 0xdd, 0x3f,
+ 0xd4, 0xe4, 0xf4, 0x07, 0xfa, 0xf3, 0xc4, 0x2b, 0x63, 0xff, 0x39, 0x1b,
+ 0x13, 0xc1, 0xe5, 0x43, 0xed, 0x0d, 0xf4, 0xf2, 0xdf, 0x02, 0x43, 0xc3,
+ 0x03, 0xab, 0xde, 0x1a, 0x2c, 0x04, 0x31, 0x20, 0xff, 0x09, 0xeb, 0x23,
+ 0x19, 0x00, 0xc9, 0x25, 0x32, 0xf2, 0x13, 0x2c, 0x27, 0x01, 0x5e, 0xd3,
+ 0xef, 0x56, 0x04, 0xea, 0xf7, 0xf6, 0x28, 0xf7, 0xfa, 0x03, 0x03, 0x2e,
+ 0xfc, 0x14, 0xf5, 0x33, 0xc2, 0xf0, 0xfb, 0xf9, 0x01, 0xf1, 0xf3, 0x0b,
+ 0x2a, 0xfe, 0x0c, 0x2d, 0x09, 0xc4, 0xf4, 0x15, 0x17, 0x0a, 0xed, 0x10,
+ 0xf0, 0x02, 0x39, 0xbd, 0xec, 0xcd, 0xdf, 0x05, 0x0c, 0xf3, 0xe4, 0x07,
+ 0xdc, 0xdd, 0x8b, 0x03, 0xdf, 0xa2, 0xf0, 0xea, 0x37, 0xe5, 0x00, 0x0a,
+ 0xcf, 0xdc, 0x11, 0x09, 0x9c, 0x17, 0xfc, 0xf0, 0xf1, 0xe2, 0xef, 0x05,
+ 0xc9, 0x9a, 0xd1, 0x05, 0xd4, 0x0b, 0x13, 0x21, 0xea, 0xe2, 0x22, 0xf6,
+ 0x06, 0x13, 0xc9, 0x21, 0xf4, 0x22, 0x35, 0x00, 0x03, 0x1b, 0x23, 0xd6,
+ 0x19, 0xfc, 0x01, 0xda, 0xfe, 0x04, 0xfe, 0xd5, 0xdf, 0x41, 0x26, 0x64,
+ 0xe3, 0x17, 0x06, 0x11, 0xc6, 0xd9, 0xc1, 0x11, 0xdb, 0xd7, 0xb0, 0xf6,
+ 0x24, 0x05, 0xf2, 0x02, 0x00, 0xd7, 0x0b, 0xf5, 0xc9, 0x05, 0xc8, 0x15,
+ 0xcb, 0xec, 0xef, 0x05, 0x05, 0xd7, 0xee, 0x09, 0x33, 0xbd, 0xd5, 0x09,
+ 0xfd, 0xee, 0x52, 0xc4, 0x0b, 0x09, 0x00, 0x19, 0xd3, 0xad, 0x02, 0xdd,
+ 0xdc, 0xfe, 0x0e, 0xd8, 0x0a, 0xfd, 0x1e, 0x06, 0xf6, 0x2f, 0xd9, 0x0b,
+ 0x11, 0x2c, 0x05, 0xe5, 0x12, 0xcb, 0xe4, 0x0b, 0xd2, 0xdd, 0xff, 0xe3,
+ 0xd4, 0xf4, 0x4b, 0x16, 0xf5, 0xd8, 0x23, 0x0b, 0x56, 0x0c, 0xfc, 0xf9,
+ 0x36, 0x0a, 0x1d, 0x03, 0xee, 0xee, 0xff, 0xf4, 0xfe, 0x14, 0xed, 0x0b,
+ 0x17, 0xc6, 0xe6, 0x08, 0xef, 0xe7, 0x20, 0xe5, 0x05, 0x02, 0x24, 0x13,
+ 0xc2, 0xd1, 0x19, 0x1d, 0x05, 0x04, 0x10, 0xef, 0x2d, 0x00, 0x22, 0x04,
+ 0x03, 0x0c, 0x14, 0x21, 0x19, 0x1e, 0xf8, 0xe7, 0x16, 0xe9, 0x0c, 0xa2,
+ 0x10, 0x05, 0x20, 0xc9, 0xf1, 0x0e, 0xfd, 0xe6, 0x12, 0x0e, 0xe6, 0xfd,
+ 0xe6, 0x19, 0xc0, 0xba, 0x0b, 0xb1, 0x23, 0x0a, 0xdb, 0x1e, 0xbe, 0xe8,
+ 0x1b, 0x2e, 0x20, 0xee, 0xf6, 0x17, 0x25, 0xca, 0x29, 0x2a, 0x16, 0x09,
+ 0xc0, 0x0d, 0x16, 0xfe, 0x00, 0xf3, 0xfc, 0x08, 0x26, 0xed, 0x8e, 0x18,
+ 0x16, 0xd6, 0x2b, 0x02, 0xe3, 0x41, 0xb9, 0xdf, 0xe3, 0x12, 0xfe, 0xf6,
+ 0xe4, 0x07, 0x3c, 0xe3, 0x0a, 0xf6, 0x24, 0xd9, 0xf2, 0x31, 0x17, 0x11,
+ 0xe0, 0x2f, 0xb1, 0xf9, 0x26, 0xd4, 0xd5, 0x0b, 0x2e, 0xc3, 0x1a, 0x30,
+ 0xb7, 0x2f, 0xc0, 0xeb, 0x10, 0x24, 0x02, 0xd6, 0xff, 0x03, 0xef, 0xc4,
+ 0xed, 0xdf, 0x1d, 0xc1, 0xf3, 0x15, 0x1a, 0xf4, 0x1a, 0xe8, 0xf8, 0xde,
+ 0xcf, 0x0e, 0xf4, 0xe7, 0x40, 0x00, 0x16, 0x30, 0xe5, 0x10, 0xcf, 0xff,
+ 0x03, 0xf8, 0xd1, 0xfb, 0xf4, 0xd7, 0xe9, 0x0f, 0x02, 0xdb, 0xdd, 0xdb,
+ 0xe0, 0xef, 0x3a, 0xe5, 0xed, 0xc9, 0x24, 0xde, 0x22, 0x0d, 0xff, 0xf6,
+ 0x42, 0xe2, 0x0a, 0x30, 0xe5, 0x0a, 0xe6, 0xf1, 0x00, 0xd5, 0xe2, 0x1c,
+ 0xfb, 0xf8, 0xca, 0x08, 0xfa, 0xdc, 0xec, 0xeb, 0xeb, 0x42, 0x37, 0x03,
+ 0xd3, 0xd7, 0xe6, 0xe8, 0xe4, 0xdb, 0x1a, 0xf5, 0x66, 0xf8, 0x1c, 0x7f,
+ 0xfe, 0x0d, 0xde, 0xdd, 0x24, 0x08, 0x07, 0xfe, 0x17, 0xd4, 0x0d, 0x02,
+ 0xd4, 0xde, 0x13, 0xe0, 0xef, 0xfb, 0xfa, 0x0d, 0xf5, 0x0a, 0x06, 0x08,
+ 0x13, 0x0e, 0x04, 0xce, 0xf7, 0xec, 0xeb, 0x04, 0xe9, 0xd8, 0x0c, 0x0f,
+ 0x1f, 0x10, 0xef, 0xed, 0xf4, 0xed, 0xed, 0xfc, 0x05, 0xeb, 0x18, 0xef,
+ 0x26, 0xe9, 0x08, 0x06, 0xef, 0x2c, 0x33, 0xf3, 0x01, 0xfd, 0x24, 0xec,
+ 0xf2, 0xfa, 0x1c, 0xf4, 0xf4, 0xbb, 0xf8, 0xe2, 0xe5, 0x59, 0x2f, 0x1b,
+ 0x08, 0xec, 0x0c, 0x06, 0xec, 0xc7, 0xe5, 0xeb, 0xf9, 0xed, 0xe8, 0xfc,
+ 0xfe, 0xe0, 0xfb, 0x1e, 0x16, 0x1d, 0x0e, 0xdb, 0x01, 0xf1, 0xf4, 0x16,
+ 0xda, 0xdb, 0x10, 0x39, 0x4c, 0x08, 0xff, 0xdf, 0x47, 0xfe, 0xfc, 0xd5,
+ 0xc6, 0x12, 0x11, 0xe3, 0xd2, 0xe7, 0xed, 0x14, 0xe4, 0x15, 0x07, 0xf0,
+ 0xec, 0xce, 0xd3, 0x19, 0x13, 0xe8, 0xf4, 0xfd, 0x0b, 0xfc, 0xe6, 0xad,
+ 0x34, 0x2d, 0xf2, 0xdd, 0xd4, 0x16, 0x30, 0xf3, 0x25, 0x4a, 0x07, 0x22,
+ 0x3f, 0x01, 0x1b, 0x25, 0xda, 0x12, 0xec, 0x1a, 0x1b, 0xb8, 0x02, 0xee,
+ 0xef, 0x13, 0xf4, 0xf5, 0xed, 0xdf, 0x0a, 0xdb, 0x0d, 0x53, 0x2b, 0x04,
+ 0x37, 0xfb, 0x02, 0xdc, 0xdd, 0x00, 0x01, 0xda, 0xf8, 0x0a, 0xef, 0x1a,
+ 0xeb, 0x01, 0xea, 0xfe, 0xe9, 0xdb, 0xe5, 0x13, 0x11, 0xc7, 0x04, 0x1c,
+ 0x08, 0x13, 0xee, 0xb6, 0x30, 0x3d, 0x05, 0xf0, 0x25, 0xe9, 0x09, 0x0e,
+ 0xdb, 0xd6, 0x14, 0xcc, 0xe8, 0xd1, 0xff, 0x0a, 0xef, 0x1b, 0xec, 0xf4,
+ 0x1a, 0x06, 0x1f, 0xdd, 0xf6, 0xfa, 0xfb, 0x17, 0xfa, 0xc5, 0xd5, 0x0c,
+ 0x5f, 0x10, 0xf8, 0xfb, 0xe6, 0xeb, 0xfa, 0x0b, 0x06, 0x0a, 0x19, 0xf4,
+ 0x03, 0xf6, 0xe9, 0x10, 0xee, 0x2d, 0x33, 0xf1, 0xfa, 0xf6, 0x1d, 0xf1,
+ 0x0b, 0xee, 0x33, 0x01, 0xf2, 0xd2, 0xf4, 0xe9, 0xf2, 0x54, 0x33, 0x26,
+ 0xfc, 0xd1, 0xe0, 0x1b, 0xe7, 0xf5, 0x14, 0xe5, 0x24, 0xe4, 0x00, 0xf8,
+ 0xfe, 0xea, 0xe2, 0x02, 0xf4, 0xe7, 0x17, 0xce, 0x34, 0xe7, 0xf7, 0x7c,
+ 0xf2, 0xea, 0xf5, 0xf9, 0x7f, 0x37, 0x05, 0xca, 0x02, 0x3f, 0x50, 0xb4,
+ 0xd8, 0xde, 0xf6, 0xf3, 0xcb, 0x16, 0xf1, 0xef, 0x24, 0xf9, 0xe3, 0x13,
+ 0x18, 0x04, 0xcd, 0xb1, 0x12, 0xf2, 0xd8, 0xfb, 0xf7, 0x8f, 0x10, 0x07,
+ 0x24, 0xdd, 0x0a, 0xfb, 0x2e, 0x5c, 0x26, 0xd1, 0xab, 0x0b, 0xc6, 0x00,
+ 0xf4, 0xf4, 0xf4, 0x02, 0x0f, 0x7f, 0xee, 0x1a, 0x0a, 0xc9, 0x09, 0xd1,
+ 0xce, 0xea, 0xdb, 0x0c, 0x0f, 0x07, 0x1b, 0x07, 0x09, 0xce, 0x42, 0xfd,
+ 0x06, 0x4b, 0x3b, 0xd0, 0xed, 0xc7, 0x15, 0xfe, 0xf0, 0x11, 0xd6, 0x08,
+ 0x23, 0x06, 0xeb, 0x1a, 0x0c, 0xf7, 0xd5, 0xd3, 0x10, 0x00, 0xd5, 0x0c,
+ 0x05, 0xad, 0x16, 0x23, 0x1c, 0xf6, 0x05, 0xff, 0xf1, 0xfc, 0x16, 0x35,
+ 0xe3, 0xe7, 0x15, 0x1c, 0xe2, 0xfa, 0x3b, 0xd4, 0x56, 0x05, 0xfc, 0x15,
+ 0x0c, 0xfc, 0xfe, 0xc9, 0x10, 0x39, 0x02, 0x02, 0xef, 0x07, 0x07, 0xe8,
+ 0x1f, 0xfd, 0x15, 0xae, 0xe5, 0xec, 0x05, 0x4c, 0xcf, 0xce, 0x32, 0x11,
+ 0xcc, 0x34, 0xd8, 0x05, 0x23, 0x18, 0xe4, 0x21, 0xf5, 0xdc, 0x15, 0xac,
+ 0x29, 0xfb, 0x1b, 0xf5, 0xaa, 0x1d, 0xe8, 0x0e, 0x0d, 0x17, 0x44, 0xfb,
+ 0x13, 0x20, 0xed, 0x3d, 0xea, 0x03, 0xf9, 0x04, 0xea, 0x05, 0x1f, 0xbb,
+ 0x2e, 0x11, 0xa5, 0xe8, 0xed, 0xe8, 0x00, 0xe4, 0x0a, 0x36, 0xfe, 0x04,
+ 0x48, 0x02, 0x28, 0xb5, 0x16, 0x1a, 0x33, 0x9c, 0xf2, 0x48, 0x5b, 0xda,
+ 0xeb, 0xfe, 0x0d, 0xf6, 0xc8, 0x1e, 0x0d, 0x11, 0x0b, 0x0c, 0xec, 0xfd,
+ 0x02, 0x10, 0xcb, 0xdf, 0x29, 0xe7, 0xe8, 0x0c, 0xe3, 0xe1, 0xf5, 0xef,
+ 0x0e, 0x02, 0x08, 0xf8, 0xea, 0x7f, 0x5e, 0xec, 0xcc, 0x14, 0xec, 0xf5,
+ 0xee, 0x16, 0x1e, 0xe9, 0x23, 0x46, 0xb5, 0x1a, 0xf0, 0xec, 0x15, 0xe7,
+ 0xf8, 0xe1, 0xe5, 0x1d, 0xd8, 0x10, 0xfd, 0xef, 0x1f, 0xe4, 0x40, 0x06,
+ 0xe3, 0xfd, 0x2f, 0xd3, 0xeb, 0xdf, 0x10, 0xd8, 0x12, 0x05, 0xee, 0xfa,
+ 0x39, 0xf3, 0xe2, 0xee, 0xfc, 0xfe, 0xb9, 0xe4, 0x57, 0x05, 0xf5, 0x6d,
+ 0xf7, 0xc2, 0xe2, 0xcf, 0x42, 0xde, 0xe7, 0x00, 0xf6, 0xda, 0xf4, 0x0b,
+ 0xed, 0xdc, 0xca, 0x0b, 0x02, 0x0a, 0x05, 0xd1, 0xe8, 0xf1, 0x0e, 0x13,
+ 0x4d, 0xe6, 0x04, 0xdc, 0xdf, 0xdc, 0xd0, 0x00, 0x1a, 0xd1, 0x39, 0x2a,
+ 0x9d, 0xcd, 0x1a, 0xe4, 0x57, 0xf4, 0xd5, 0x30, 0xe0, 0x0d, 0x25, 0xe8,
+ 0x0f, 0x1c, 0x26, 0xfb, 0xfd, 0xcf, 0x32, 0x6b, 0x33, 0xdc, 0xc9, 0xe2,
+ 0xf3, 0x1c, 0xd7, 0xfe, 0x5f, 0xf3, 0x7f, 0x2c, 0xe5, 0xe7, 0xe6, 0xea,
+ 0x05, 0x09, 0xf5, 0x29, 0xc5, 0xda, 0xcd, 0xff, 0xed, 0xbb, 0x20, 0xf2,
+ 0xee, 0xe7, 0xf7, 0x38, 0x4d, 0xf7, 0xe9, 0xe8, 0x05, 0xf3, 0xc7, 0x07,
+ 0x47, 0xae, 0x16, 0xea, 0xda, 0xde, 0x0c, 0xf0, 0xb1, 0x05, 0xed, 0x0c,
+ 0x0a, 0xdb, 0x0f, 0xd7, 0xfd, 0xf6, 0x01, 0xf5, 0xf7, 0xf1, 0xd7, 0x10,
+ 0x3b, 0x0f, 0x19, 0xf2, 0xea, 0x67, 0xb8, 0xea, 0x21, 0xb7, 0xe9, 0x32,
+ 0xd3, 0xfd, 0x00, 0xe7, 0xf0, 0x1d, 0xf4, 0x46, 0xf1, 0xde, 0xee, 0xc7,
+ 0xe4, 0xff, 0xee, 0xf5, 0x20, 0xca, 0xf3, 0x08, 0x1d, 0x03, 0xa0, 0xde,
+ 0xe9, 0x22, 0xf7, 0xfa, 0xbb, 0xce, 0xe9, 0x11, 0xd4, 0xd6, 0xb0, 0xd5,
+ 0xe0, 0xcb, 0xf0, 0x32, 0x1a, 0xe9, 0x15, 0xe3, 0xe6, 0x3a, 0x2a, 0xe2,
+ 0xd9, 0xfe, 0xcf, 0x16, 0x31, 0x11, 0x0e, 0xcd, 0xf9, 0x3b, 0xc7, 0xe4,
+ 0x37, 0xf5, 0x11, 0x3d, 0xbe, 0x1b, 0x16, 0xd1, 0x0a, 0x05, 0x35, 0x39,
+ 0xfc, 0x2c, 0x1d, 0x0f, 0xf5, 0xf4, 0x0e, 0x11, 0xd8, 0x0f, 0x14, 0x26,
+ 0x41, 0xf5, 0xfb, 0xf1, 0x17, 0xe2, 0xf6, 0xe1, 0x13, 0xe9, 0x53, 0x0e,
+ 0xe4, 0x13, 0x0c, 0xe7, 0x24, 0xe5, 0x09, 0x6d, 0xe3, 0x46, 0x40, 0xed,
+ 0x21, 0x3f, 0x23, 0xf2, 0x0f, 0x06, 0x45, 0x5f, 0x28, 0xd9, 0xd6, 0xf1,
+ 0x19, 0x22, 0xe0, 0xf8, 0x72, 0x3a, 0x62, 0xfd, 0x0f, 0xff, 0xdf, 0xd9,
+ 0x17, 0x04, 0x16, 0x25, 0xdb, 0x12, 0x14, 0x0f, 0xfa, 0x06, 0x49, 0x19,
+ 0xd8, 0xff, 0x1e, 0x38, 0x3f, 0x05, 0xf9, 0xdf, 0x51, 0xf7, 0xdb, 0x27,
+ 0x33, 0xdb, 0x37, 0x0f, 0xf9, 0x04, 0x00, 0xe1, 0xed, 0xf8, 0x16, 0xd1,
+ 0x10, 0x1f, 0x15, 0xe9, 0x03, 0x14, 0xbd, 0xfb, 0xf6, 0x05, 0x11, 0xb3,
+ 0xd6, 0xfe, 0x0f, 0x05, 0xf3, 0xeb, 0x23, 0xff, 0xa1, 0x17, 0xad, 0x30,
+ 0x0f, 0xf2, 0xe2, 0x28, 0xee, 0xf9, 0x1e, 0xd5, 0x25, 0xf6, 0xe2, 0x27,
+ 0xaf, 0xd4, 0xe0, 0xee, 0x0a, 0xda, 0xe6, 0xaa, 0xfa, 0x51, 0xd6, 0x21,
+ 0xf5, 0x0c, 0xfb, 0x02, 0x8d, 0xe5, 0x93, 0x42, 0xed, 0xf7, 0x07, 0xe8,
+ 0x1d, 0x09, 0x06, 0xe1, 0x04, 0x11, 0x0d, 0x09, 0x2f, 0xf5, 0xe5, 0x07,
+ 0x02, 0x08, 0xe6, 0xa2, 0xcc, 0x03, 0x1c, 0xfc, 0xf0, 0xf2, 0x1f, 0xfc,
+ 0xb0, 0x0b, 0x98, 0xeb, 0x19, 0x0a, 0x0d, 0x28, 0x3e, 0xe8, 0x1c, 0xf1,
+ 0x1a, 0x0e, 0xf0, 0xfd, 0x43, 0xc9, 0xc9, 0x03, 0xdb, 0x0d, 0x2e, 0x0a,
+ 0xea, 0x01, 0x21, 0x1e, 0xd8, 0xcd, 0x0e, 0x02, 0x9c, 0xe6, 0xe5, 0xea,
+ 0x2c, 0xf5, 0xf1, 0x13, 0x23, 0xe1, 0x14, 0xd4, 0x0c, 0x0e, 0x05, 0x0e,
+ 0x26, 0xe5, 0xdf, 0xf0, 0xcf, 0x3f, 0x0f, 0x01, 0xfd, 0x22, 0xf8, 0x28,
+ 0xfb, 0xdd, 0xf2, 0xf3, 0x29, 0xeb, 0x15, 0x00, 0x16, 0x04, 0x2f, 0xe4,
+ 0x58, 0x16, 0x17, 0x0a, 0x14, 0x1b, 0xfe, 0xfb, 0x2c, 0xea, 0xd1, 0x25,
+ 0xe7, 0xfc, 0x5c, 0xed, 0xd9, 0x0e, 0x1a, 0x11, 0xe5, 0xd8, 0x11, 0x11,
+ 0xb7, 0xfc, 0xe1, 0xef, 0x2c, 0x09, 0x04, 0x0b, 0x16, 0x04, 0xed, 0xb2,
+ 0x34, 0x10, 0x2a, 0x01, 0x17, 0x05, 0xb6, 0x02, 0x11, 0x17, 0x20, 0xdc,
+ 0xf8, 0x1c, 0x01, 0x15, 0xa6, 0xed, 0x43, 0xc8, 0xe3, 0xf3, 0xd8, 0x07,
+ 0x1a, 0x22, 0x03, 0x31, 0x08, 0xef, 0x0d, 0xa3, 0x54, 0xf4, 0xc5, 0x06,
+ 0xe3, 0x94, 0xcf, 0xfb, 0x0a, 0x81, 0xf6, 0xd0, 0xff, 0x38, 0xbf, 0x29,
+ 0xbc, 0xed, 0x2e, 0xeb, 0xc4, 0xc2, 0xbd, 0x2a, 0x02, 0xf5, 0xeb, 0xfb,
+ 0x23, 0x19, 0xe0, 0xbc, 0x25, 0x1e, 0x1e, 0xfa, 0x21, 0xdf, 0xed, 0x15,
+ 0x05, 0xce, 0x11, 0xe6, 0xf5, 0x0a, 0xf8, 0x14, 0xd4, 0xf7, 0x2a, 0xd6,
+ 0xfc, 0xfc, 0xf3, 0x0c, 0x11, 0x27, 0xfe, 0x10, 0x2e, 0x03, 0x35, 0xe1,
+ 0xce, 0xf8, 0x27, 0xdc, 0xc3, 0x22, 0xeb, 0x35, 0xec, 0xee, 0x0e, 0x13,
+ 0x1c, 0x33, 0xd8, 0xdc, 0x1c, 0x2c, 0x04, 0xf8, 0xe2, 0xc7, 0xf8, 0x1a,
+ 0xfb, 0x00, 0xd5, 0xdb, 0x2c, 0x0a, 0x64, 0xdd, 0x53, 0x3c, 0xd5, 0xe2,
+ 0x16, 0xe2, 0xec, 0x1b, 0xfc, 0x16, 0x4c, 0xfe, 0x0e, 0xdb, 0xea, 0x20,
+ 0xd5, 0x1f, 0x43, 0xee, 0xf4, 0xc2, 0x0b, 0xe6, 0x02, 0xe8, 0xe9, 0xd3,
+ 0x2c, 0x18, 0x2e, 0xe8, 0xd4, 0xf1, 0x17, 0xfb, 0xc9, 0x15, 0xef, 0x25,
+ 0xe2, 0xf5, 0x28, 0x0d, 0x1d, 0x23, 0xe1, 0x01, 0x14, 0x05, 0xfc, 0xe3,
+ 0xd0, 0xec, 0x10, 0xfa, 0x0a, 0x04, 0xf6, 0x11, 0x07, 0xf5, 0xe6, 0xdc,
+ 0x04, 0x0f, 0xed, 0x0a, 0xc9, 0xee, 0x16, 0xed, 0xea, 0x17, 0xb7, 0xf2,
+ 0xc2, 0x2d, 0xe9, 0xdf, 0x01, 0x3b, 0xea, 0xf7, 0x16, 0x04, 0xc8, 0xd0,
+ 0x0b, 0x40, 0x19, 0xf6, 0xc0, 0xb2, 0x09, 0xde, 0xe6, 0x28, 0x29, 0xde,
+ 0xfd, 0xf9, 0xfd, 0x04, 0x1f, 0x1a, 0x15, 0x9e, 0xd2, 0xe2, 0xe9, 0x05,
+ 0x06, 0x00, 0x03, 0xf9, 0x97, 0xeb, 0x9c, 0x0a, 0xf5, 0x3d, 0xf9, 0xd7,
+ 0x1a, 0xf3, 0xdf, 0xee, 0xfe, 0x22, 0xff, 0xe3, 0xcf, 0xed, 0x28, 0xe8,
+ 0xd9, 0xfb, 0xf3, 0x00, 0xe5, 0x19, 0xff, 0xf7, 0xfd, 0x39, 0xd1, 0xef,
+ 0x2d, 0xf3, 0xd8, 0x8b, 0x06, 0x54, 0x21, 0x00, 0x40, 0xfa, 0x5e, 0xb7,
+ 0xe7, 0x01, 0x41, 0xe5, 0xe4, 0x28, 0xfb, 0x19, 0xe9, 0xfc, 0x15, 0x12,
+ 0x09, 0x56, 0xe0, 0xe4, 0x19, 0x09, 0x15, 0xed, 0xf3, 0xe4, 0xed, 0x29,
+ 0x18, 0x09, 0xe7, 0x0c, 0x01, 0x2f, 0x7f, 0xd8, 0x3e, 0x43, 0xe9, 0xfb,
+ 0x2e, 0xeb, 0x02, 0xba, 0xc9, 0x20, 0x00, 0xdc, 0xfc, 0xeb, 0xe2, 0x2a,
+ 0xbd, 0xce, 0x42, 0xed, 0xd9, 0xec, 0xed, 0x0b, 0xe8, 0xdf, 0x06, 0xb5,
+ 0x20, 0xf7, 0x39, 0xcf, 0xea, 0xd8, 0x31, 0xee, 0xf2, 0x31, 0x02, 0x21,
+ 0xef, 0xee, 0x1d, 0x0f, 0x22, 0x2a, 0xdd, 0xdf, 0x1c, 0xf0, 0xf7, 0x00,
+ 0x04, 0xdd, 0xfb, 0x0b, 0x2c, 0x25, 0x04, 0x00, 0x02, 0x65, 0x04, 0xe6,
+ 0xf2, 0xfd, 0xf3, 0xfe, 0x06, 0x02, 0xe3, 0x0c, 0x3c, 0xd3, 0x00, 0x18,
+ 0x03, 0xfe, 0xe8, 0xe6, 0xdb, 0x22, 0xf7, 0xed, 0xf5, 0xfc, 0x13, 0x1e,
+ 0xf0, 0xfa, 0x1d, 0x22, 0x15, 0x5c, 0x0e, 0xdf, 0xc3, 0xb9, 0xd0, 0x15,
+ 0xf5, 0xcc, 0x01, 0x1b, 0x2f, 0x07, 0x11, 0x0a, 0xe2, 0x2a, 0x0d, 0xa8,
+ 0xdb, 0xda, 0xd6, 0xef, 0x0c, 0xed, 0x1e, 0x22, 0xd8, 0x13, 0x41, 0x50,
+ 0xfa, 0x2d, 0x0d, 0xed, 0xeb, 0xb5, 0xb4, 0xf5, 0xfd, 0xe2, 0xb4, 0x07,
+ 0x1c, 0xf7, 0xfa, 0x21, 0x03, 0xd9, 0x06, 0xed, 0xdd, 0x0b, 0xc8, 0x05,
+ 0xe5, 0xc6, 0x1f, 0x12, 0xec, 0xdc, 0x0d, 0xfe, 0x13, 0x2e, 0xea, 0x42,
+ 0xd3, 0xd7, 0x01, 0x0a, 0x04, 0x06, 0xe9, 0xf2, 0x67, 0xeb, 0x4f, 0x30,
+ 0x0a, 0xdc, 0xed, 0x0e, 0xf7, 0x20, 0x03, 0xf9, 0xd8, 0x23, 0x52, 0xc8,
+ 0xf3, 0xab, 0xe1, 0x0f, 0x0b, 0x03, 0x20, 0x52, 0xe6, 0xf3, 0x03, 0x34,
+ 0x01, 0x1f, 0xe2, 0xe3, 0x40, 0xf6, 0x23, 0x3b, 0x2a, 0xdc, 0x47, 0xc2,
+ 0x09, 0x35, 0x17, 0xd6, 0xd0, 0x17, 0x3c, 0xdd, 0xf1, 0x10, 0x12, 0x14,
+ 0xf8, 0x22, 0xfc, 0x37, 0xd5, 0xea, 0x24, 0xf0, 0x1a, 0x17, 0xe9, 0xf4,
+ 0x3e, 0xfd, 0xf9, 0x24, 0x0d, 0xc2, 0xee, 0x0a, 0x16, 0xfd, 0x25, 0x0e,
+ 0xe6, 0x12, 0x31, 0xc9, 0xfd, 0xcf, 0xe2, 0xf4, 0x02, 0x44, 0x17, 0x03,
+ 0xe7, 0xe2, 0x81, 0x06, 0xe8, 0x9d, 0xe6, 0xf3, 0x33, 0xf7, 0xff, 0x04,
+ 0xf5, 0xf8, 0x15, 0x08, 0xac, 0x14, 0xee, 0xf8, 0x05, 0xe1, 0x0c, 0x1d,
+ 0xee, 0xab, 0xd1, 0x0a, 0xef, 0x31, 0x0f, 0x07, 0xcf, 0xde, 0x0b, 0x07,
+ 0xf3, 0x27, 0xa5, 0x34, 0xfb, 0x1c, 0x02, 0xf5, 0xf7, 0x42, 0x17, 0xde,
+ 0x00, 0xd7, 0x15, 0xff, 0xd6, 0xf8, 0xf0, 0x3b, 0xf8, 0x47, 0x2b, 0x40,
+ 0xca, 0x2f, 0x06, 0x03, 0xf0, 0xe3, 0xd9, 0x0b, 0x09, 0xda, 0xa6, 0xfc,
+ 0x31, 0x06, 0xe7, 0x0e, 0x00, 0xd0, 0x06, 0xfe, 0xd8, 0x0f, 0xea, 0x17,
+ 0xc9, 0xe4, 0xd9, 0x0c, 0x18, 0xeb, 0x04, 0x0b, 0x0c, 0xf7, 0x17, 0x12,
+ 0xd8, 0x37, 0x2b, 0x14, 0xf0, 0x0d, 0x08, 0x2e, 0xd0, 0x25, 0x03, 0x0e,
+ 0x36, 0x27, 0x06, 0x0d, 0x21, 0x0a, 0xd3, 0xe9, 0x12, 0xb9, 0x05, 0x25,
+ 0x02, 0x30, 0x10, 0xb9, 0x50, 0xe9, 0xff, 0x38, 0xfc, 0x65, 0x10, 0xed,
+ 0xfb, 0xe9, 0xde, 0x10, 0x07, 0xfe, 0x4b, 0x11, 0x1f, 0xdf, 0x31, 0xed,
+ 0xd4, 0x1e, 0xdf, 0xeb, 0x1d, 0xa1, 0x1d, 0x27, 0x00, 0xff, 0xdf, 0xfd,
+ 0x00, 0xd1, 0x00, 0xfc, 0xec, 0x27, 0x10, 0xee, 0xf0, 0xf5, 0x03, 0x29,
+ 0xe9, 0x10, 0x0a, 0x02, 0x38, 0x10, 0x08, 0xd2, 0x23, 0xeb, 0xbc, 0xfc,
+ 0x06, 0xa3, 0xf2, 0x0a, 0x11, 0x44, 0x0e, 0xe4, 0xec, 0xda, 0xe1, 0xed,
+ 0xe0, 0x02, 0xe0, 0xe1, 0xf1, 0xe4, 0xc6, 0x3d, 0xe6, 0xec, 0x07, 0xb8,
+ 0xd0, 0x30, 0x2a, 0x14, 0xef, 0x01, 0x9e, 0xef, 0xd7, 0xc2, 0x93, 0x59,
+ 0xee, 0x68, 0x3b, 0x2a, 0xbe, 0xef, 0xfc, 0xfc, 0x11, 0x53, 0xf0, 0xca,
+ 0xf2, 0xa5, 0xc8, 0x69, 0x01, 0xc3, 0x3f, 0xaf, 0xb5, 0x13, 0xf4, 0xc2,
+ 0xf2, 0x5a, 0x07, 0xe9, 0xca, 0xd3, 0xa4, 0xe8, 0xe4, 0x2e, 0xde, 0x1d,
+ 0x22, 0xc3, 0xeb, 0xd9, 0xd6, 0x04, 0xa8, 0xc2, 0xec, 0xb5, 0xd4, 0x3e,
+ 0xe3, 0xef, 0xed, 0xcc, 0xde, 0x2e, 0x10, 0x09, 0x0e, 0x0c, 0x94, 0x01,
+ 0xd5, 0x92, 0xaf, 0x2e, 0xf6, 0x4c, 0x52, 0x03, 0x1d, 0xaf, 0xe5, 0xe7,
+ 0xcc, 0x1c, 0x1f, 0x3d, 0xf6, 0x11, 0xfb, 0x21, 0xff, 0x2d, 0x10, 0xf0,
+ 0xf5, 0xec, 0x0f, 0x09, 0x2c, 0xfd, 0xaf, 0x00, 0xec, 0xa4, 0xea, 0x37,
+ 0x0d, 0x1c, 0x0e, 0xcc, 0x02, 0x81, 0xf0, 0x00, 0xfe, 0x5c, 0x17, 0x0c,
+ 0x24, 0xf0, 0xf0, 0xaa, 0xdd, 0x45, 0x54, 0xf4, 0xc7, 0x9a, 0x0e, 0xee,
+ 0xe0, 0x11, 0xbe, 0x1c, 0xdc, 0xcb, 0x19, 0xd4, 0xfd, 0xf5, 0xfa, 0xf8,
+ 0x16, 0x83, 0xb9, 0xd2, 0xb7, 0x21, 0x13, 0x3d, 0xf0, 0x12, 0xfa, 0x22,
+ 0xfa, 0x2b, 0xf7, 0xde, 0xde, 0xc1, 0xf8, 0x03, 0x46, 0xfd, 0x8f, 0x25,
+ 0xed, 0x94, 0xec, 0xe3, 0x2a, 0x5c, 0x1f, 0xe2, 0x2b, 0xdd, 0x18, 0xfd,
+ 0x18, 0xee, 0x02, 0xd7, 0xfe, 0xd3, 0x26, 0xf5, 0xef, 0x58, 0xf5, 0x17,
+ 0x04, 0x23, 0xf2, 0xe0, 0x0d, 0xf1, 0x01, 0xf8, 0x3b, 0x08, 0x00, 0x28,
+ 0x0a, 0xfe, 0xfa, 0xe1, 0xe1, 0xf0, 0xd7, 0xe9, 0x31, 0x0d, 0x17, 0x11,
+ 0x3d, 0x1b, 0xeb, 0xe8, 0xe2, 0x4e, 0x9e, 0x13, 0xce, 0xe1, 0x19, 0x0a,
+ 0xc1, 0x0b, 0x20, 0xdd, 0x20, 0xca, 0x20, 0x18, 0xe4, 0x1e, 0x4c, 0x0b,
+ 0xfb, 0xd1, 0x04, 0x07, 0x15, 0xe5, 0xe7, 0xc9, 0x22, 0xdc, 0x39, 0xfb,
+ 0x0f, 0x0f, 0xf9, 0x10, 0x13, 0x1c, 0xe3, 0xe8, 0xed, 0xec, 0x0d, 0xf5,
+ 0x28, 0xf0, 0x1c, 0x11, 0x17, 0xe8, 0xcb, 0xcf, 0x2e, 0xe7, 0x18, 0xea,
+ 0xfb, 0x10, 0xf4, 0x09, 0x03, 0xfb, 0x08, 0xd9, 0xdd, 0x2e, 0xdb, 0xe9,
+ 0xd2, 0x24, 0x14, 0xd9, 0xfb, 0xe3, 0xe8, 0xf1, 0x7f, 0xe8, 0x20, 0xf6,
+ 0x11, 0xfd, 0xfc, 0xe9, 0xc0, 0x14, 0xd8, 0xd1, 0x10, 0xd9, 0xfd, 0xf8,
+ 0x1f, 0xf5, 0x4d, 0xe0, 0xf2, 0x1a, 0xe6, 0xe7, 0xe7, 0xef, 0x53, 0x0b,
+ 0xc0, 0x16, 0xf3, 0xde, 0xf3, 0xc3, 0x0c, 0xe9, 0x13, 0x0b, 0x54, 0x1a,
+ 0x31, 0xcd, 0x05, 0xf0, 0x12, 0x05, 0xf2, 0xdb, 0x12, 0xef, 0xed, 0xe2,
+ 0xfe, 0x04, 0xf8, 0xfe, 0xca, 0x22, 0xd9, 0xdf, 0xfc, 0xca, 0xe1, 0x0e,
+ 0x7c, 0xeb, 0x2d, 0x03, 0x15, 0x02, 0xb7, 0xbc, 0x27, 0xef, 0x06, 0x18,
+ 0x09, 0x0d, 0x02, 0x0d, 0x11, 0xd7, 0x0e, 0x01, 0x1b, 0x53, 0xf8, 0x16,
+ 0xfd, 0x02, 0xf7, 0x06, 0x1a, 0x2c, 0x06, 0xd0, 0x3d, 0x0f, 0xf9, 0xdd,
+ 0x37, 0x00, 0x09, 0xf1, 0xdd, 0xd3, 0xae, 0x0f, 0x03, 0x08, 0x0b, 0x26,
+ 0x39, 0x2e, 0xc6, 0xd7, 0x0f, 0x73, 0xaf, 0x32, 0xde, 0xd3, 0x23, 0xeb,
+ 0xec, 0x03, 0x11, 0xe2, 0x20, 0xdb, 0x20, 0xff, 0xfe, 0xee, 0x33, 0xf9,
+ 0xfa, 0xc9, 0xc6, 0x13, 0x16, 0xf8, 0xd6, 0xf0, 0x27, 0xc8, 0x20, 0xf1,
+ 0xec, 0x1f, 0xfd, 0x11, 0x0d, 0xe5, 0x03, 0xbf, 0x09, 0xe2, 0x00, 0x0e,
+ 0x4d, 0x27, 0x0f, 0xd9, 0x31, 0xff, 0x03, 0xe7, 0xf8, 0x03, 0xac, 0x37,
+ 0xde, 0xdf, 0xc3, 0x2f, 0xe7, 0xf9, 0x05, 0xd0, 0xfb, 0x09, 0x15, 0x09,
+ 0x13, 0xfa, 0x49, 0x0b, 0xdc, 0xf1, 0xe8, 0xdd, 0x11, 0xe5, 0x25, 0x04,
+ 0xb0, 0xf1, 0x2b, 0x22, 0x24, 0xeb, 0xab, 0x4b, 0xd1, 0x21, 0x09, 0xfb,
+ 0x15, 0x05, 0xf2, 0xf3, 0x24, 0xa5, 0x1b, 0x18, 0xf1, 0x06, 0xfa, 0xfc,
+ 0x17, 0x18, 0xb5, 0xfc, 0x44, 0xd5, 0x2b, 0xd2, 0x1c, 0x08, 0xe7, 0x3b,
+ 0xcf, 0xeb, 0xb0, 0x4c, 0xec, 0x1d, 0xce, 0x2b, 0x00, 0x01, 0x10, 0xe4,
+ 0x13, 0xef, 0x17, 0x13, 0x09, 0xe9, 0x38, 0x1f, 0xe3, 0xf0, 0xd4, 0xec,
+ 0x0c, 0xeb, 0x25, 0x08, 0xc9, 0x02, 0x2d, 0x1f, 0x04, 0x15, 0xf3, 0x2f,
+ 0xf5, 0xeb, 0x2a, 0xf9, 0x2e, 0x2a, 0x18, 0x3f, 0xfa, 0x0d, 0x39, 0x2b,
+ 0x32, 0xe7, 0x13, 0x51, 0xda, 0x51, 0x08, 0xc3, 0xda, 0x0e, 0x01, 0x64,
+ 0xb9, 0xba, 0xd7, 0xfb, 0x3f, 0x37, 0x17, 0x50, 0x13, 0xf3, 0xbf, 0x31,
+ 0xb6, 0x05, 0xef, 0x0a, 0x03, 0xcf, 0xc1, 0x27, 0x56, 0xf6, 0xb4, 0xf7,
+ 0x16, 0xfd, 0x04, 0xda, 0x2f, 0xe9, 0x39, 0xf4, 0xa7, 0x95, 0x8c, 0xd6,
+ 0xdd, 0x2a, 0xf7, 0x1e, 0x0a, 0x12, 0x13, 0xe5, 0x31, 0x30, 0x0f, 0x4a,
+ 0xf0, 0xcd, 0x3a, 0x15, 0x2a, 0xcf, 0xee, 0x25, 0x07, 0x23, 0xf2, 0xed,
+ 0xf1, 0xd6, 0x2b, 0x34, 0xd4, 0xc7, 0xd1, 0xe9, 0x03, 0x09, 0xfc, 0x2d,
+ 0x02, 0x38, 0xb7, 0x3a, 0xe5, 0xb3, 0xf9, 0xb9, 0xb4, 0x07, 0x0b, 0x28,
+ 0x1a, 0x13, 0x27, 0x18, 0xc2, 0xcb, 0xf9, 0xe2, 0x12, 0xdf, 0x36, 0x00,
+ 0xb8, 0x0a, 0x1d, 0x25, 0x0e, 0xdb, 0xe9, 0x45, 0xe9, 0x1e, 0x38, 0xbf,
+ 0x23, 0x0b, 0xd7, 0xd7, 0xf6, 0x81, 0x09, 0xd5, 0xcf, 0x2d, 0xf8, 0x04,
+ 0x28, 0xdb, 0xde, 0xfb, 0x71, 0x28, 0xf9, 0x1e, 0x27, 0x19, 0xdd, 0x14,
+ 0xb5, 0x0d, 0xfc, 0x21, 0xf9, 0x35, 0xe7, 0x28, 0x08, 0xb1, 0xdc, 0xdd,
+ 0xe8, 0x0d, 0xfa, 0xf2, 0xff, 0xe7, 0x43, 0x21, 0xd0, 0xda, 0xd4, 0xe2,
+ 0xcc, 0xe5, 0x15, 0xfd, 0xde, 0x02, 0x14, 0x0f, 0xe1, 0x55, 0x00, 0xff,
+ 0x3e, 0x13, 0xfd, 0x0b, 0xf0, 0x1a, 0x00, 0x09, 0x07, 0xec, 0xec, 0xf4,
+ 0x02, 0xef, 0xf6, 0xfe, 0xeb, 0x10, 0x3d, 0xe3, 0x14, 0x4c, 0x01, 0xe5,
+ 0xbe, 0xee, 0x23, 0x23, 0x25, 0x3a, 0xf7, 0x06, 0xf2, 0xc9, 0xd9, 0xfe,
+ 0xf0, 0x33, 0x05, 0xde, 0x15, 0xb8, 0xa3, 0x07, 0xf0, 0x58, 0xa6, 0x0f,
+ 0xfe, 0xc3, 0xe9, 0x06, 0x10, 0x29, 0x0e, 0x2b, 0x3f, 0xc8, 0xb8, 0xa2,
+ 0xce, 0x40, 0xc6, 0x00, 0x48, 0x0f, 0xe6, 0x01, 0x07, 0xe5, 0xb9, 0xe2,
+ 0x39, 0xe3, 0xf4, 0xca, 0xc4, 0xd7, 0xf6, 0xef, 0xd5, 0x09, 0x19, 0x05,
+ 0x9c, 0x71, 0xf8, 0x9f, 0xc4, 0x00, 0x16, 0x2a, 0xef, 0x01, 0xff, 0x55,
+ 0x49, 0xe8, 0x19, 0x23, 0xfa, 0x33, 0x05, 0xdf, 0x01, 0xf5, 0x28, 0xeb,
+ 0xe3, 0xfb, 0x18, 0xe1, 0x0d, 0x15, 0x4b, 0xe4, 0xa2, 0x0e, 0x33, 0x0b,
+ 0xc2, 0xba, 0xee, 0xd2, 0x4b, 0x00, 0xff, 0x2d, 0x0c, 0xf4, 0xf6, 0x13,
+ 0xe9, 0x1e, 0xee, 0xa0, 0x25, 0xe6, 0xea, 0x29, 0x04, 0x3f, 0xd8, 0xfc,
+ 0x1a, 0xf6, 0x1c, 0xdb, 0x3c, 0x3d, 0x51, 0x53, 0xf8, 0xbb, 0xee, 0xd5,
+ 0x06, 0x3b, 0x18, 0x24, 0x2e, 0xef, 0x26, 0x12, 0x17, 0x16, 0x0a, 0x01,
+ 0x11, 0xe2, 0x5b, 0xf0, 0xd9, 0xba, 0x0d, 0xf2, 0x28, 0x3b, 0x46, 0x06,
+ 0x81, 0x00, 0x1b, 0x0c, 0xdd, 0xcc, 0xed, 0xda, 0xde, 0x38, 0x19, 0x02,
+ 0x4e, 0x07, 0x12, 0xd2, 0x0d, 0x2a, 0xd2, 0xaf, 0xfb, 0xdf, 0xf3, 0xda,
+ 0xdc, 0x1b, 0xda, 0xfa, 0xf3, 0xbb, 0x50, 0xf7, 0xd8, 0x4b, 0xdd, 0x13,
+ 0xc9, 0xe8, 0xce, 0xfd, 0x05, 0x3e, 0xfe, 0xce, 0x21, 0xe2, 0xfc, 0xf4,
+ 0xba, 0x0b, 0x02, 0xf4, 0x08, 0x97, 0xd3, 0xe6, 0x1c, 0x48, 0xb6, 0x1e,
+ 0x16, 0xb2, 0xfa, 0xf3, 0xa8, 0x4c, 0xc0, 0x4b, 0x1a, 0xf3, 0xc0, 0xf4,
+ 0xe8, 0x43, 0xef, 0xdd, 0x48, 0x10, 0x1f, 0xe8, 0x04, 0x15, 0xd6, 0xda,
+ 0x11, 0xdc, 0x03, 0xc0, 0xea, 0x15, 0xf7, 0xff, 0xe3, 0xef, 0x17, 0xe6,
+ 0xbb, 0x1a, 0xc9, 0xfa, 0xef, 0x06, 0x03, 0x56, 0x04, 0xde, 0x09, 0x2a,
+ 0x1d, 0xdb, 0xe1, 0xf5, 0x04, 0xcb, 0x06, 0xec, 0xec, 0x0e, 0xf4, 0x21,
+ 0x35, 0x0c, 0x01, 0xbf, 0xd3, 0xf0, 0xf2, 0x01, 0x25, 0x02, 0x2a, 0x4a,
+ 0xe2, 0xe6, 0x0e, 0xf0, 0x16, 0xd8, 0xda, 0x56, 0x19, 0xfa, 0x20, 0xef,
+ 0x2f, 0x14, 0xf0, 0xd7, 0x06, 0xd2, 0xeb, 0x2a, 0xed, 0x0e, 0x16, 0xc3,
+ 0xd5, 0xfb, 0xef, 0xeb, 0x47, 0x0a, 0x4c, 0x56, 0xcd, 0xfa, 0x39, 0x10,
+ 0x01, 0xe2, 0xd3, 0x3e, 0x0d, 0xc6, 0xbd, 0xfc, 0x05, 0xc4, 0x15, 0xc9,
+ 0xfa, 0x0c, 0xfc, 0x39, 0x23, 0x15, 0xe9, 0xd3, 0xde, 0xe0, 0xed, 0x16,
+ 0x2f, 0xe5, 0x31, 0x2e, 0xe7, 0xb2, 0xda, 0xda, 0x08, 0xfa, 0xee, 0xed,
+ 0x13, 0xf8, 0xfe, 0x02, 0x1b, 0xf7, 0xc4, 0x03, 0xdb, 0x0c, 0xf3, 0x0f,
+ 0x1c, 0xed, 0xf9, 0x01, 0xd2, 0x32, 0xe8, 0xdc, 0x68, 0xc3, 0x50, 0x1c,
+ 0xdc, 0xcc, 0xf2, 0xe2, 0xf7, 0x32, 0x0b, 0xea, 0x26, 0xd6, 0xf8, 0xd5,
+ 0x21, 0x00, 0x2c, 0xd9, 0x13, 0xe1, 0xf0, 0x18, 0x17, 0x03, 0xf6, 0xd1,
+ 0xbb, 0x1f, 0x0a, 0xd4, 0xfc, 0xc0, 0x22, 0x1a, 0xe4, 0xf5, 0x13, 0xf4,
+ 0x19, 0xdf, 0xe6, 0x0c, 0xfd, 0xe1, 0xe5, 0xe7, 0x0d, 0x01, 0xfe, 0xc0,
+ 0xd0, 0xfd, 0xe8, 0x08, 0x0d, 0x07, 0xd3, 0xe3, 0xf6, 0x13, 0xe5, 0xf0,
+ 0x7f, 0xd0, 0x4b, 0x1f, 0xca, 0xb2, 0xcc, 0xb6, 0x0f, 0xec, 0xf5, 0x57,
+ 0xf0, 0x15, 0x0c, 0x2a, 0x1b, 0xdb, 0xfb, 0xff, 0x02, 0x35, 0xe9, 0x30,
+ 0x14, 0xe5, 0x18, 0xda, 0xf7, 0x1a, 0xf5, 0xce, 0x40, 0x1e, 0x4f, 0xcf,
+ 0xfe, 0x11, 0x09, 0xf6, 0xed, 0xbb, 0xb7, 0x70, 0xd9, 0x1d, 0x4c, 0x17,
+ 0x2a, 0x63, 0xed, 0xe5, 0xfa, 0x15, 0xf9, 0x2a, 0xdc, 0xe4, 0x24, 0xd9,
+ 0x25, 0x04, 0xda, 0xde, 0x3b, 0xfa, 0x33, 0xc8, 0xf4, 0x22, 0x33, 0x0a,
+ 0x23, 0xeb, 0xfd, 0x36, 0x01, 0x10, 0xd0, 0xfa, 0x17, 0xc1, 0x2c, 0xcb,
+ 0x1a, 0x1d, 0xf9, 0x3c, 0x08, 0x03, 0xfa, 0xea, 0xd7, 0x10, 0xfb, 0xf7,
+ 0x58, 0xf0, 0x55, 0xf0, 0xe0, 0xfb, 0xf7, 0xf2, 0x12, 0x32, 0xf4, 0xf8,
+ 0x06, 0x06, 0x03, 0x28, 0xe5, 0x32, 0xe5, 0x35, 0x11, 0xd0, 0x14, 0x0b,
+ 0x1d, 0x09, 0x1a, 0xfd, 0xdd, 0x16, 0xf1, 0xee, 0xeb, 0xf6, 0x16, 0x33,
+ 0xe7, 0x14, 0x0c, 0x21, 0x24, 0x18, 0x2a, 0x04, 0xfe, 0x02, 0xe4, 0x01,
+ 0xf3, 0xd6, 0xfc, 0x15, 0x4f, 0xb3, 0x54, 0x04, 0x1e, 0x3f, 0xf5, 0x0b,
+ 0xe9, 0xfd, 0xfc, 0xf3, 0xfd, 0xf1, 0x0b, 0x1b, 0x09, 0xe4, 0xe5, 0x1d,
+ 0xe6, 0x24, 0xf6, 0xe1, 0x12, 0x01, 0xf8, 0x04, 0xe1, 0x1b, 0xca, 0x27,
+ 0x1b, 0xd5, 0x05, 0xf2, 0x00, 0xef, 0xfe, 0x08, 0xe9, 0xfa, 0xf4, 0xfc,
+ 0xb5, 0xff, 0xf4, 0xf8, 0xf6, 0x0b, 0xf0, 0x18, 0x0f, 0x09, 0x07, 0x16,
+ 0xe0, 0xe3, 0x2a, 0xfe, 0xde, 0xec, 0xda, 0x1e, 0xf6, 0xfc, 0x3b, 0x23,
+ 0x21, 0xe1, 0x01, 0x0e, 0xd8, 0x48, 0x01, 0xdc, 0xe5, 0xed, 0x34, 0xee,
+ 0xa7, 0xf0, 0x07, 0x0e, 0x51, 0xf5, 0x1e, 0x4c, 0xd3, 0x12, 0xfc, 0x0e,
+ 0x02, 0xfb, 0xd7, 0x1e, 0x63, 0xda, 0x2f, 0x4d, 0x34, 0x00, 0xdf, 0xee,
+ 0x02, 0x2f, 0xda, 0xf6, 0xe6, 0xf9, 0x0f, 0xfc, 0xe1, 0xf6, 0xd4, 0xfb,
+ 0xe3, 0x05, 0xfc, 0x2a, 0xe4, 0xe4, 0x26, 0xf1, 0xe9, 0x00, 0xea, 0x04,
+ 0xfc, 0xf2, 0x64, 0x22, 0x18, 0xc8, 0xf8, 0x0e, 0xfa, 0x12, 0x0c, 0x01,
+ 0x81, 0x04, 0x2d, 0xea, 0xc0, 0xe5, 0x08, 0xee, 0x0c, 0x2e, 0x2b, 0x02,
+ 0xee, 0x05, 0x08, 0x1c, 0xcc, 0x30, 0xd3, 0x1a, 0xf0, 0xc2, 0x14, 0x11,
+ 0x02, 0xfc, 0x0e, 0xea, 0xdc, 0xeb, 0xec, 0xd8, 0xe0, 0xe1, 0x02, 0x4c,
+ 0xf1, 0x00, 0x1a, 0x13, 0x29, 0x29, 0x37, 0xf5, 0xcb, 0x05, 0xfa, 0xd5,
+ 0xf2, 0xe8, 0xd6, 0x40, 0x47, 0xe5, 0x6b, 0xf3, 0x1e, 0x3b, 0xf0, 0xe8,
+ 0xe4, 0xf9, 0xe4, 0xe6, 0xf0, 0x0a, 0x01, 0x45, 0x21, 0xeb, 0xce, 0x11,
+ 0xbe, 0x2b, 0x1b, 0xff, 0xee, 0x03, 0x0b, 0x10, 0xdc, 0x07, 0x8f, 0x15,
+ 0x01, 0xef, 0xee, 0xfb, 0x03, 0xe4, 0xff, 0x07, 0x09, 0xf8, 0xdd, 0xde,
+ 0x94, 0xed, 0xfd, 0x12, 0xf7, 0x11, 0x08, 0x05, 0x18, 0xed, 0xea, 0x06,
+ 0xcd, 0xba, 0xf0, 0xdd, 0x0e, 0xf0, 0x0a, 0xfd, 0x11, 0xb7, 0x02, 0x01,
+ 0xdb, 0x0b, 0x1a, 0xef, 0xdb, 0xff, 0xed, 0xff, 0x0d, 0xdf, 0xe5, 0xf6,
+ 0x21, 0xec, 0xd2, 0xf2, 0xfb, 0xfa, 0xeb, 0xff, 0x06, 0xcb, 0x0a, 0xe3,
+ 0x0a, 0xf1, 0x1e, 0x0c, 0xe1, 0x10, 0x30, 0xef, 0x15, 0xe1, 0x1e, 0x0e,
+ 0x21, 0x07, 0x2e, 0x07, 0x05, 0xfb, 0xf5, 0xb2, 0xee, 0x46, 0x1d, 0x27,
+ 0x0e, 0xfd, 0xfe, 0x00, 0xc3, 0xc7, 0xe0, 0xff, 0x04, 0xd6, 0x1a, 0xf3,
+ 0xf8, 0xd1, 0x10, 0x1b, 0x15, 0x09, 0x16, 0x0b, 0xf2, 0x02, 0xdb, 0x34,
+ 0xf5, 0xbf, 0x10, 0x03, 0x1d, 0xe0, 0xef, 0xdb, 0x0b, 0xe2, 0xfb, 0xc9,
+ 0xf3, 0x01, 0x10, 0xf0, 0xec, 0x04, 0xfa, 0xf3, 0x1b, 0x06, 0xeb, 0xf1,
+ 0xe9, 0x05, 0xc9, 0xec, 0x00, 0xe3, 0x03, 0x05, 0xec, 0x10, 0xc6, 0xd7,
+ 0x2c, 0x2d, 0xfe, 0xee, 0xf1, 0x03, 0x23, 0xf1, 0x25, 0x22, 0x15, 0x21,
+ 0xe5, 0x0c, 0x15, 0x11, 0xf3, 0x10, 0xe0, 0xf3, 0x1d, 0x05, 0x1f, 0x0f,
+ 0x1e, 0xdb, 0x23, 0x03, 0xfb, 0x13, 0xd4, 0x05, 0xe9, 0x18, 0x18, 0x28,
+ 0xea, 0x08, 0xf2, 0xdd, 0xe0, 0xee, 0x28, 0xe0, 0xee, 0x07, 0x00, 0xfd,
+ 0x0b, 0x23, 0xe8, 0xf8, 0x11, 0xea, 0xe0, 0x33, 0x04, 0xc7, 0xf0, 0x10,
+ 0xe7, 0x0a, 0xe4, 0xf2, 0x02, 0x0d, 0x00, 0xf8, 0x13, 0xef, 0xf4, 0xee,
+ 0xe3, 0xc5, 0xea, 0xd6, 0x08, 0x25, 0x0d, 0xfe, 0x11, 0x0d, 0x02, 0xef,
+ 0xdd, 0x0b, 0xfe, 0xe2, 0x05, 0xe8, 0x07, 0x13, 0xfd, 0xf5, 0xdd, 0xf4,
+ 0x14, 0xe2, 0xd3, 0xf3, 0xf7, 0x01, 0xf9, 0x17, 0x0e, 0xf0, 0xec, 0xfd,
+ 0xe7, 0xcb, 0x24, 0xe0, 0xd3, 0xd7, 0x48, 0xec, 0x29, 0x05, 0x26, 0x22,
+ 0x16, 0x08, 0xf3, 0x1f, 0xff, 0xfe, 0xfc, 0xe1, 0xf9, 0x0f, 0x15, 0x2f,
+ 0xf0, 0xd9, 0xd4, 0x15, 0xf8, 0xf8, 0x1c, 0xde, 0x0b, 0x17, 0x02, 0x0b,
+ 0xe7, 0xd6, 0xfb, 0xf7, 0xef, 0xf8, 0x0f, 0xfb, 0x0c, 0x01, 0x0b, 0x7f,
+ 0xf4, 0x0a, 0xfd, 0xf6, 0x16, 0x0f, 0xfd, 0xe4, 0xfc, 0x0d, 0x01, 0x06,
+ 0xff, 0x2f, 0xfc, 0x21, 0xf4, 0xfb, 0xe6, 0x1b, 0x21, 0x02, 0x0c, 0x18,
+ 0x14, 0x11, 0x01, 0x15, 0xc6, 0x0f, 0xec, 0xe9, 0xfc, 0xfc, 0x0f, 0x23,
+ 0xe0, 0x06, 0x02, 0xee, 0x1f, 0x1c, 0x1e, 0x1f, 0xfd, 0x42, 0x03, 0xff,
+ 0xf5, 0xf0, 0xf2, 0x25, 0x0f, 0xc7, 0x65, 0x1c, 0x29, 0xf7, 0x28, 0x05,
+ 0xec, 0x1f, 0xfb, 0xe7, 0x08, 0xfd, 0x34, 0xf5, 0xfa, 0x1c, 0xfb, 0x1f,
+ 0xfe, 0x07, 0x03, 0x0c, 0xf6, 0x0f, 0xfe, 0x1a, 0xe0, 0xfe, 0xbe, 0x13,
+ 0x19, 0xfc, 0xfc, 0x09, 0x18, 0xfd, 0x09, 0xfb, 0xff, 0x03, 0xe9, 0xee,
+ 0xea, 0xe3, 0x0c, 0xff, 0xf3, 0xf6, 0xf0, 0x00, 0xda, 0xf8, 0xfb, 0x1e,
+ 0xee, 0xfd, 0x0a, 0x0d, 0xd0, 0x03, 0xf0, 0x06, 0x2e, 0xfc, 0x06, 0x15,
+ 0xfc, 0xf8, 0x0d, 0x08, 0xf5, 0x5f, 0xef, 0xe7, 0x17, 0xe2, 0x22, 0x06,
+ 0xbd, 0x1a, 0x25, 0x0e, 0xe8, 0xea, 0x04, 0x2e, 0xdd, 0xf8, 0x02, 0xfb,
+ 0x0e, 0x0d, 0xc7, 0x02, 0x46, 0xf0, 0x29, 0x00, 0x05, 0x42, 0x37, 0xd9,
+ 0xf2, 0x42, 0xe8, 0xe8, 0xe1, 0xed, 0xd5, 0x25, 0xe4, 0xe2, 0xd6, 0x13,
+ 0xdb, 0xee, 0xe8, 0x2c, 0xe7, 0xef, 0xfd, 0xf7, 0xa1, 0x02, 0x02, 0xf0,
+ 0x1d, 0xfe, 0xf8, 0x0d, 0x06, 0xd5, 0x01, 0x08, 0x08, 0x32, 0xec, 0xfa,
+ 0x16, 0x04, 0x14, 0xe1, 0xb7, 0x0b, 0x09, 0xed, 0xfb, 0x0d, 0x23, 0x15,
+ 0xbf, 0xe9, 0x05, 0x0f, 0xba, 0x28, 0xe1, 0x1a, 0x0f, 0xd0, 0x1d, 0x1e,
+ 0x0e, 0x06, 0xf3, 0x11, 0x06, 0x0d, 0xce, 0xf5, 0xe4, 0xb7, 0x17, 0x10,
+ 0xe9, 0xe4, 0xc3, 0xf8, 0x17, 0x06, 0x3e, 0x02, 0xc4, 0x30, 0xf1, 0xe5,
+ 0x06, 0xc9, 0xf9, 0x1b, 0x0c, 0x33, 0x7f, 0x14, 0x37, 0xd9, 0x07, 0xdc,
+ 0xcb, 0x18, 0xd1, 0xde, 0xfa, 0xf4, 0x2d, 0xdb, 0xdd, 0x02, 0xd7, 0x0f,
+ 0xbc, 0x0f, 0x44, 0x03, 0xb3, 0x04, 0x06, 0x08, 0xac, 0x17, 0xb9, 0x0e,
+ 0xfc, 0xed, 0x09, 0xfb, 0x15, 0xf2, 0xef, 0x14, 0x0e, 0xf9, 0xb3, 0xea,
+ 0xc8, 0xb9, 0xf1, 0xf9, 0xfc, 0xed, 0xed, 0xfd, 0x00, 0x08, 0x18, 0x06,
+ 0x06, 0x1d, 0x0d, 0x00, 0xf3, 0xef, 0xf9, 0x23, 0x0f, 0xbf, 0x17, 0x1c,
+ 0x2e, 0x0f, 0x07, 0xe7, 0xc6, 0x2b, 0xf6, 0xe8, 0xd2, 0x0f, 0x1d, 0x23,
+ 0x09, 0x08, 0x00, 0xf8, 0x16, 0x00, 0x17, 0x2d, 0x27, 0x2a, 0x09, 0xee,
+ 0xf6, 0xe5, 0xf6, 0x2b, 0x20, 0xe4, 0x74, 0x1a, 0x3d, 0xfe, 0x0d, 0xf2,
+ 0xd8, 0x2a, 0x00, 0xe7, 0xfc, 0xf7, 0x26, 0x18, 0xdb, 0x0a, 0xe3, 0x21,
+ 0xec, 0x07, 0x10, 0x1a, 0xe0, 0xe0, 0xff, 0xfe, 0xae, 0x04, 0xc3, 0x2f,
+ 0x06, 0xf6, 0xf2, 0x17, 0x21, 0x0f, 0x00, 0xf3, 0x05, 0x14, 0xcd, 0x04,
+ 0xb9, 0xe2, 0x12, 0x24, 0x02, 0x00, 0xeb, 0xf3, 0xec, 0xf4, 0xf8, 0xfa,
+ 0x07, 0xeb, 0x12, 0xed, 0xcd, 0xf9, 0xcf, 0xfe, 0xf6, 0x0d, 0xff, 0x0a,
+ 0xf9, 0xd3, 0xce, 0x21, 0xf4, 0xfa, 0xec, 0xf9, 0x01, 0xf8, 0x13, 0xd9,
+ 0xbf, 0x19, 0x1c, 0x21, 0xdd, 0xfc, 0x23, 0x11, 0x0d, 0x27, 0xd7, 0xf6,
+ 0x44, 0xee, 0xcc, 0x10, 0x1a, 0xec, 0x42, 0xfe, 0xfe, 0x1c, 0xf1, 0xea,
+ 0xd7, 0x2f, 0xff, 0xe4, 0xdc, 0xfc, 0xe2, 0x21, 0xca, 0x38, 0xd0, 0xf9,
+ 0xfa, 0xdf, 0xef, 0x0a, 0xde, 0xfe, 0x0c, 0xec, 0xab, 0xf4, 0xec, 0xf7,
+ 0xe7, 0x09, 0x12, 0x09, 0xfe, 0xcb, 0x08, 0x24, 0x11, 0xec, 0xe9, 0xe7,
+ 0x01, 0x0e, 0x04, 0xd2, 0xc6, 0x1a, 0x0b, 0x0e, 0xdb, 0xe8, 0x2c, 0x16,
+ 0xcb, 0xec, 0x38, 0x04, 0xe2, 0x0c, 0xe8, 0x28, 0x09, 0xbb, 0x0c, 0x29,
+ 0x21, 0xeb, 0x0b, 0xdd, 0x04, 0x0f, 0xd5, 0xe8, 0xce, 0xed, 0x1b, 0x0e,
+ 0x07, 0xfc, 0xf0, 0xe5, 0x04, 0xc0, 0x35, 0x46, 0x03, 0x10, 0x3e, 0xe5,
+ 0x12, 0xf8, 0xf5, 0x3d, 0x03, 0x1d, 0x7f, 0x1b, 0x4b, 0xdd, 0x17, 0xba,
+ 0x0d, 0x30, 0xf9, 0xe4, 0xe8, 0xff, 0x13, 0xd7, 0xdf, 0x44, 0xe2, 0x21,
+ 0xe1, 0xd4, 0x0e, 0x18, 0xb3, 0x09, 0x1d, 0xef, 0xcb, 0x14, 0xa8, 0x13,
+ 0xe4, 0xf2, 0xec, 0x25, 0x24, 0xdc, 0xf4, 0xcc, 0x12, 0xf5, 0xc8, 0xde,
+ 0xc5, 0xdd, 0x00, 0x05, 0x01, 0x09, 0xf6, 0xd7, 0xde, 0xc9, 0x04, 0x21,
+ 0x13, 0x06, 0x21, 0xd5, 0xe2, 0x23, 0x1d, 0xef, 0xe6, 0xe7, 0xd1, 0xff,
+ 0x10, 0xdc, 0x0a, 0xdd, 0x19, 0xdf, 0x0d, 0x13, 0xf4, 0x46, 0xdc, 0xdf,
+ 0xfd, 0xd0, 0xc6, 0xca, 0xef, 0xf3, 0xff, 0x11, 0x19, 0xe5, 0x13, 0x0c,
+ 0xdc, 0x0d, 0x35, 0x1d, 0xd4, 0x21, 0x05, 0x14, 0x3f, 0xd6, 0x14, 0x0a,
+ 0x37, 0xe3, 0xf5, 0x07, 0xe9, 0x27, 0xf0, 0xb5, 0x12, 0x39, 0x0a, 0x0e,
+ 0xdf, 0xe8, 0xe8, 0x16, 0xe9, 0xfc, 0x15, 0xd1, 0x14, 0x05, 0x18, 0x0a,
+ 0xf6, 0xd1, 0xf2, 0x09, 0x0b, 0xd0, 0x01, 0xfc, 0x09, 0x0b, 0xf2, 0x29,
+ 0xeb, 0x3d, 0xd6, 0xe4, 0x2f, 0xff, 0xf0, 0xd3, 0xcb, 0xbe, 0xfd, 0xd9,
+ 0x2f, 0xf8, 0xfb, 0xd9, 0xf9, 0xf2, 0xe4, 0xbe, 0xf6, 0x02, 0xf8, 0xec,
+ 0xd8, 0x03, 0xe1, 0xc8, 0x04, 0xc9, 0x2d, 0x00, 0xe2, 0x26, 0xe6, 0x0e,
+ 0xed, 0xf2, 0x11, 0xe5, 0x20, 0xfd, 0x01, 0xe9, 0x14, 0xfa, 0x07, 0xee,
+ 0xf6, 0x04, 0xdd, 0x09, 0xf2, 0xfa, 0xf3, 0x00, 0xfa, 0x2c, 0x17, 0xce,
+ 0x0c, 0xe2, 0x22, 0xf1, 0x19, 0x2f, 0x16, 0x21, 0xf7, 0x30, 0x28, 0x15,
+ 0xe7, 0xe9, 0x04, 0xe6, 0x50, 0xf0, 0x00, 0xe7, 0xf4, 0xf9, 0xea, 0xea,
+ 0x16, 0x19, 0xd3, 0xfb, 0xfd, 0xf1, 0xf0, 0xeb, 0x0b, 0xd3, 0x1a, 0x11,
+ 0xfd, 0x0f, 0xea, 0x05, 0x16, 0x09, 0x1f, 0xed, 0xe5, 0x0e, 0x1b, 0x0f,
+ 0x22, 0x0f, 0x2c, 0xd2, 0xea, 0x1f, 0x0a, 0xf6, 0x29, 0xd9, 0xec, 0xff,
+ 0xfb, 0x0b, 0xe7, 0xf1, 0x1e, 0xca, 0x1b, 0x1e, 0xd0, 0x3f, 0xcc, 0x26,
+ 0xfa, 0xe4, 0xce, 0xe1, 0xf1, 0x21, 0x2e, 0x0f, 0x2e, 0xeb, 0xf7, 0x1a,
+ 0xdd, 0x18, 0x24, 0x2b, 0xe8, 0x25, 0x0e, 0x0b, 0x3f, 0xfb, 0x28, 0xff,
+ 0x46, 0x0e, 0x0c, 0x0b, 0xdd, 0x41, 0xf0, 0xde, 0x1d, 0x3e, 0x13, 0x2a,
+ 0xd4, 0x02, 0x09, 0x01, 0x21, 0x0e, 0x1b, 0xd5, 0x10, 0x3d, 0x04, 0xfe,
+ 0x1f, 0xe4, 0x01, 0xee, 0xd2, 0x0f, 0xee, 0xf3, 0x52, 0x10, 0x19, 0x7f,
+ 0xef, 0x36, 0xe3, 0x05, 0x2b, 0x10, 0x04, 0xe0, 0xd9, 0xbe, 0xc7, 0x2b,
+ 0x29, 0x29, 0xf9, 0xf2, 0xce, 0x3c, 0x15, 0xca, 0xc6, 0xe2, 0xfa, 0x0a,
+ 0x04, 0xde, 0x01, 0xe6, 0x0c, 0xf9, 0xf1, 0x15, 0x18, 0x34, 0xfb, 0xf7,
+ 0xcf, 0xb7, 0xc2, 0xcb, 0xf5, 0xad, 0xfb, 0x42, 0x16, 0xf8, 0x37, 0x1d,
+ 0xd4, 0x21, 0x1c, 0xfb, 0xa8, 0x02, 0xfd, 0x31, 0x65, 0xcf, 0x07, 0x1d,
+ 0x3a, 0xe8, 0xea, 0xde, 0xeb, 0x48, 0x10, 0xd3, 0x19, 0x11, 0xc5, 0xce,
+ 0xee, 0xe8, 0xf7, 0x4a, 0x08, 0x17, 0x2b, 0xee, 0x06, 0x22, 0x0b, 0x37,
+ 0xbe, 0xb8, 0xfe, 0x06, 0x23, 0xe6, 0xee, 0x16, 0x37, 0x11, 0xf0, 0x09,
+ 0xfd, 0x29, 0x06, 0xe1, 0xde, 0x08, 0xd8, 0xe7, 0xb9, 0xd9, 0x05, 0xe1,
+ 0x3f, 0xea, 0x0e, 0xdb, 0xf8, 0x05, 0xe6, 0xb0, 0xe1, 0x1d, 0x02, 0xf0,
+ 0xeb, 0xff, 0xd8, 0xcd, 0xf5, 0xbd, 0x15, 0xf6, 0xc4, 0x1d, 0xe0, 0x51,
+ 0xd7, 0xd4, 0xf3, 0xef, 0x12, 0x0b, 0xe7, 0xe5, 0x05, 0xf2, 0x06, 0xd6,
+ 0x12, 0x01, 0xe0, 0x02, 0xea, 0xaa, 0xe8, 0xe8, 0xc6, 0x47, 0xd2, 0xfd,
+ 0x1e, 0xc8, 0x1c, 0xf9, 0x23, 0x2a, 0xf6, 0x45, 0xeb, 0x0e, 0xf9, 0xcc,
+ 0xc8, 0xdb, 0x10, 0xec, 0x57, 0xef, 0x08, 0xfd, 0xdf, 0x06, 0xe3, 0xfd,
+ 0xe1, 0x0b, 0xb9, 0xf9, 0xf5, 0xf1, 0xf9, 0xee, 0x14, 0xd8, 0x1c, 0xf3,
+ 0xd6, 0x04, 0xec, 0x42, 0xea, 0x03, 0x29, 0xf9, 0xcb, 0x11, 0x08, 0x2b,
+ 0x1e, 0x16, 0x36, 0xc8, 0x09, 0x2e, 0x03, 0xf2, 0x17, 0xd3, 0x02, 0x03,
+ 0x3e, 0xfe, 0x09, 0x08, 0x09, 0x05, 0x08, 0x05, 0xee, 0x47, 0xe1, 0x1d,
+ 0xea, 0xe5, 0xef, 0xef, 0x05, 0xf7, 0x1b, 0x42, 0x20, 0xe7, 0x3b, 0x03,
+ 0xce, 0x0b, 0x3b, 0x2e, 0x08, 0xfc, 0x36, 0x37, 0x7f, 0x08, 0x18, 0xf5,
+ 0x2f, 0x27, 0xea, 0xdd, 0xdc, 0x6a, 0xed, 0x05, 0x2a, 0x18, 0xcc, 0x05,
+ 0xe2, 0x14, 0xf9, 0x45, 0x04, 0x15, 0x23, 0xe2, 0x03, 0x41, 0xf9, 0x0a,
+ 0x1b, 0xec, 0x0e, 0xeb, 0x09, 0xff, 0xf2, 0x03, 0x38, 0x0b, 0x1a, 0x22,
+ 0xb7, 0x45, 0xd9, 0xfd, 0x07, 0xf4, 0xdf, 0x08, 0x31, 0x2e, 0x22, 0xef,
+ 0xed, 0x00, 0x06, 0xf6, 0x05, 0x08, 0xf2, 0xf1, 0xe1, 0x0b, 0xf6, 0x14,
+ 0x02, 0x15, 0xed, 0x0d, 0xed, 0x1c, 0xf6, 0xef, 0x04, 0xe0, 0x0e, 0xeb,
+ 0x04, 0xf3, 0xfc, 0x05, 0x04, 0x3c, 0x0f, 0xdd, 0x30, 0xfb, 0xdd, 0x0a,
+ 0x11, 0x26, 0xd9, 0xf3, 0xed, 0x3c, 0xd9, 0xf2, 0xd3, 0xec, 0x28, 0x15,
+ 0xcc, 0xe5, 0x2a, 0xe2, 0x0c, 0x06, 0xfb, 0xf6, 0x07, 0x0d, 0x32, 0x0f,
+ 0x2c, 0x29, 0x2a, 0xed, 0xfd, 0x02, 0xe2, 0xfb, 0x19, 0xe9, 0xfc, 0xe2,
+ 0x0e, 0x1a, 0xfa, 0x26, 0x03, 0x1a, 0xe2, 0xee, 0xbe, 0x18, 0xe5, 0x02,
+ 0x23, 0xd8, 0x28, 0xe4, 0x09, 0xc6, 0xf9, 0x17, 0x24, 0xfd, 0xbf, 0x36,
+ 0xfe, 0xee, 0xf7, 0x12, 0xfe, 0x02, 0x16, 0xde, 0x46, 0xf7, 0x0a, 0x16,
+ 0xc0, 0x17, 0x11, 0xe7, 0x06, 0x3b, 0x08, 0xfb, 0x52, 0x02, 0x53, 0xbe,
+ 0x11, 0xeb, 0xf6, 0xca, 0xde, 0xef, 0xff, 0x1b, 0xd8, 0xde, 0x0e, 0x1f,
+ 0x07, 0x16, 0x1c, 0xc9, 0xb2, 0x22, 0xf0, 0xf4, 0xfe, 0xe6, 0x7f, 0xe0,
+ 0x0a, 0x08, 0x07, 0xe7, 0xd1, 0x01, 0x0f, 0xe3, 0x0b, 0xf9, 0x44, 0x06,
+ 0x00, 0x2f, 0xf0, 0x42, 0x01, 0xf8, 0xf9, 0x02, 0x27, 0x0e, 0x05, 0xd6,
+ 0x28, 0x10, 0xec, 0x1b, 0xe4, 0x03, 0xfc, 0xfa, 0xf6, 0x46, 0x18, 0x02,
+ 0x63, 0x00, 0x30, 0xbd, 0x20, 0xe2, 0xfc, 0xe8, 0x36, 0x13, 0x27, 0xbf,
+ 0xff, 0x03, 0xd9, 0xe6, 0x14, 0xb4, 0xdc, 0xd0, 0x17, 0x1f, 0xd8, 0xf4,
+ 0xf3, 0xff, 0xde, 0xe6, 0xce, 0xfd, 0xe6, 0x12, 0x0b, 0xd2, 0xf7, 0xef,
+ 0x24, 0xd8, 0xed, 0xdd, 0xcc, 0x3f, 0xf2, 0xd1, 0x10, 0xf2, 0xd3, 0x15,
+ 0xe8, 0xf3, 0xe5, 0xef, 0xe3, 0x32, 0xe6, 0xe5, 0xd4, 0xe0, 0x2d, 0xf3,
+ 0xeb, 0xd8, 0x46, 0x07, 0xf1, 0xde, 0xf3, 0x16, 0xe5, 0x13, 0x30, 0x2c,
+ 0x16, 0x19, 0x20, 0xe2, 0xf5, 0xe8, 0xf2, 0xf1, 0x1c, 0x03, 0xe9, 0xee,
+ 0x18, 0x1f, 0xf6, 0x13, 0xf8, 0x0d, 0xfd, 0xfa, 0xde, 0x08, 0xf6, 0x18,
+ 0x10, 0xd6, 0xf4, 0xeb, 0x1c, 0xcf, 0xea, 0x05, 0xcc, 0x07, 0x02, 0x09,
+ 0xff, 0xd8, 0xf3, 0xf4, 0xdf, 0x1f, 0x1f, 0xe6, 0xf4, 0x0a, 0xca, 0xd8,
+ 0xf5, 0xd4, 0xff, 0xe7, 0x13, 0xd7, 0x05, 0x0a, 0xed, 0x15, 0xca, 0x08,
+ 0x08, 0x13, 0x12, 0xdf, 0xeb, 0x26, 0x02, 0x0e, 0xd2, 0xef, 0x0e, 0xdc,
+ 0xc3, 0x09, 0x32, 0xf3, 0xe0, 0xfb, 0xeb, 0xf8, 0x03, 0x19, 0xec, 0xee,
+ 0x2c, 0xeb, 0xec, 0x10, 0xf5, 0x1c, 0xd7, 0x09, 0xf9, 0xd2, 0xe3, 0xdd,
+ 0xd0, 0x0a, 0x08, 0xfb, 0xfa, 0xf3, 0x12, 0xf1, 0x02, 0x24, 0x64, 0xfa,
+ 0xf7, 0x10, 0xe4, 0xe0, 0xf4, 0xc1, 0xe7, 0xe3, 0x7f, 0xee, 0x1c, 0x5e,
+ 0xd7, 0xff, 0xde, 0xfe, 0x1c, 0x11, 0xf5, 0xee, 0xc8, 0x06, 0x14, 0x1a,
+ 0xf0, 0xe3, 0x44, 0xfa, 0x03, 0x55, 0x2a, 0xdf, 0xfe, 0x0e, 0xea, 0x16,
+ 0x2d, 0xe2, 0xf3, 0xcf, 0x15, 0xed, 0x24, 0x0b, 0xbd, 0x28, 0xc3, 0xf2,
+ 0x0b, 0xdf, 0xd8, 0xe5, 0xd2, 0x08, 0x19, 0x18, 0xf1, 0xff, 0x19, 0x17,
+ 0xdb, 0x43, 0x06, 0xee, 0xe1, 0xd9, 0xe6, 0x17, 0x29, 0xd8, 0xd6, 0xe4,
+ 0x28, 0xc5, 0x37, 0x0d, 0xfb, 0x3e, 0xd5, 0xd4, 0xe8, 0xea, 0xf6, 0xf2,
+ 0xc7, 0x1a, 0x33, 0x22, 0xee, 0x05, 0x0b, 0xfe, 0xfc, 0x38, 0x68, 0xe8,
+ 0xf1, 0x12, 0xcb, 0x11, 0x0b, 0xec, 0xfe, 0xd1, 0x61, 0xf9, 0x14, 0x62,
+ 0xe7, 0x57, 0xce, 0xe1, 0x20, 0xec, 0xfc, 0xf6, 0xba, 0x1d, 0xe0, 0xd9,
+ 0xb9, 0xc6, 0xb1, 0x0e, 0xed, 0xed, 0x18, 0xe8, 0x0b, 0xf7, 0xe0, 0xe4,
+ 0xcd, 0xb0, 0x12, 0xeb, 0x07, 0xe5, 0xde, 0xf0, 0xec, 0xe6, 0xde, 0xc0,
+ 0xf6, 0x00, 0x14, 0x12, 0xda, 0x12, 0xeb, 0xe9, 0xe1, 0xd3, 0xd2, 0xd8,
+ 0xce, 0xf6, 0x47, 0xf2, 0x0b, 0xbd, 0xeb, 0xef, 0xea, 0xea, 0xc2, 0xf2,
+ 0x2b, 0xfe, 0xf7, 0x13, 0xcf, 0xf2, 0xf8, 0xe1, 0xf3, 0xb9, 0xd8, 0xe5,
+ 0xe1, 0x2d, 0xd1, 0xe0, 0xd6, 0xea, 0xce, 0xf8, 0xf5, 0xe9, 0x77, 0xe7,
+ 0xe4, 0xff, 0xec, 0xde, 0xcd, 0xb9, 0xf7, 0xee, 0x52, 0xdf, 0xe5, 0x70,
+ 0x1f, 0xe7, 0xf1, 0x9e, 0x0a, 0xf2, 0x02, 0x0a, 0x24, 0x21, 0x11, 0x06,
+ 0xf1, 0x16, 0xfc, 0x15, 0x05, 0x00, 0xf4, 0x13, 0x2d, 0x1a, 0x09, 0x0b,
+ 0xf0, 0x1a, 0x03, 0x17, 0xe2, 0x1a, 0xe4, 0xe0, 0x1a, 0xe9, 0x08, 0xea,
+ 0xf2, 0x02, 0x0b, 0x0a, 0x02, 0x2f, 0x0f, 0xf2, 0x2d, 0x08, 0xf5, 0x0b,
+ 0x03, 0x0e, 0xe2, 0x0b, 0x12, 0x39, 0xee, 0xd6, 0xdb, 0xe3, 0x19, 0x16,
+ 0xce, 0xf4, 0x1a, 0xe6, 0x0b, 0xf0, 0xf2, 0xd3, 0x0b, 0xfb, 0x23, 0x14,
+ 0x2d, 0x16, 0xfd, 0xee, 0xfa, 0x00, 0xf8, 0x09, 0x09, 0xf5, 0xf2, 0x11,
+ 0x2a, 0x19, 0x1c, 0x07, 0xee, 0x12, 0xe5, 0x15, 0xe4, 0x0f, 0x0f, 0xf3,
+ 0x10, 0xde, 0x0e, 0xef, 0x0c, 0xf9, 0xe4, 0x1b, 0xf8, 0x25, 0xc4, 0x39,
+ 0xec, 0xe4, 0xf6, 0x0d, 0x13, 0x09, 0x03, 0xf4, 0x56, 0x04, 0xf5, 0x08,
+ 0xce, 0x29, 0x1d, 0xee, 0xf7, 0x4b, 0x0a, 0x0a, 0x3a, 0xff, 0x0e, 0xec,
+ 0x15, 0xe5, 0xfe, 0xf4, 0xf2, 0xd6, 0xf1, 0x24, 0xeb, 0xd7, 0xf9, 0x13,
+ 0xf6, 0x09, 0xf7, 0xe6, 0xd7, 0x19, 0xe7, 0xe0, 0xdf, 0xf8, 0x7f, 0xed,
+ 0x00, 0x2b, 0xfc, 0xed, 0xe1, 0x04, 0xf3, 0xfd, 0x01, 0xd9, 0x42, 0x12,
+ 0x06, 0x2e, 0xe3, 0x3b, 0x08, 0xfd, 0xf1, 0x18, 0x02, 0x05, 0x15, 0xcd,
+ 0x38, 0xfc, 0xf7, 0x0a, 0xe2, 0x24, 0xfb, 0x06, 0xfe, 0x44, 0x04, 0xfc,
+ 0x51, 0x0d, 0x0c, 0xd9, 0x31, 0xf4, 0x08, 0xeb, 0x2f, 0x14, 0x25, 0xd4,
+ 0xfc, 0x01, 0xd4, 0xea, 0xe1, 0xd1, 0x0b, 0xc4, 0x3b, 0x14, 0x06, 0xe0,
+ 0xe9, 0x0c, 0xf9, 0x0f, 0xce, 0xe5, 0xe2, 0x0f, 0x11, 0xb2, 0x07, 0xf8,
+ 0xe4, 0xbb, 0xd5, 0xe9, 0xe1, 0x3f, 0x10, 0xcd, 0x4c, 0x01, 0xcf, 0x12,
+ 0xee, 0xd7, 0xca, 0xcd, 0xc6, 0x1c, 0xd6, 0xd0, 0xec, 0xec, 0x14, 0x34,
+ 0xb8, 0xca, 0x1c, 0xf0, 0xdf, 0xd4, 0xd2, 0x10, 0xf4, 0xf1, 0x0b, 0x1c,
+ 0x28, 0x23, 0x26, 0xdf, 0xf1, 0x01, 0xf6, 0xff, 0x07, 0xde, 0xf3, 0xf8,
+ 0x0b, 0x1c, 0x04, 0x0a, 0x0c, 0x19, 0xea, 0x2b, 0xce, 0xf3, 0xf3, 0x06,
+ 0xfd, 0xbd, 0xe1, 0xfa, 0x00, 0xd6, 0xc9, 0xfa, 0x3a, 0xed, 0x3d, 0xf9,
+ 0x25, 0x0d, 0x13, 0xf5, 0xfb, 0xee, 0xcc, 0x1a, 0xe6, 0xd2, 0x24, 0x26,
+ 0x13, 0x37, 0xe9, 0xe6, 0xfe, 0x26, 0x0b, 0xf4, 0xc9, 0x08, 0x1a, 0x2d,
+ 0x0d, 0x00, 0xfa, 0xf6, 0xf0, 0xed, 0x5c, 0x0c, 0x5f, 0x15, 0x18, 0xc3,
+ 0x32, 0x19, 0x10, 0xd7, 0x09, 0xb7, 0x51, 0xf7, 0xf8, 0xf2, 0xfb, 0x00,
+ 0xd4, 0xe8, 0x4e, 0xea, 0xfb, 0xdb, 0x1d, 0x0e, 0xd9, 0x11, 0xdc, 0x26,
+ 0x34, 0xd4, 0x1e, 0x18, 0xf9, 0xfc, 0x07, 0x0e, 0xd6, 0xe7, 0x04, 0xec,
+ 0xac, 0x02, 0x11, 0x4a, 0x4c, 0x43, 0xef, 0xf2, 0xcb, 0x1d, 0xf2, 0xe7,
+ 0x10, 0xf7, 0x40, 0x24, 0xe7, 0xe0, 0xda, 0xd1, 0x4e, 0xfa, 0xf3, 0xf8,
+ 0xf9, 0x10, 0x0f, 0xe1, 0xf6, 0xe2, 0xf0, 0x17, 0xe8, 0x01, 0xfa, 0x21,
+ 0xe8, 0x06, 0x85, 0x40, 0xdd, 0xf0, 0xf5, 0xf5, 0x1d, 0xfb, 0x54, 0x87,
+ 0x0c, 0x15, 0xea, 0xd2, 0x00, 0x11, 0x37, 0xf9, 0x31, 0x39, 0xf1, 0x08,
+ 0x7f, 0xf4, 0x2c, 0x18, 0xe9, 0xee, 0x33, 0x05, 0x18, 0xed, 0xf7, 0xee,
+ 0xc1, 0x01, 0x29, 0xd1, 0xf5, 0xe1, 0x0f, 0xfd, 0xec, 0x1d, 0xe5, 0xdc,
+ 0x0e, 0x01, 0xdd, 0xf7, 0xce, 0xda, 0x08, 0xe7, 0xd5, 0x00, 0xef, 0xf6,
+ 0xcd, 0x04, 0x09, 0x18, 0xf6, 0xe1, 0xe6, 0x37, 0x12, 0xd5, 0xf6, 0xcf,
+ 0x19, 0x18, 0x4e, 0xa8, 0xde, 0xee, 0xe2, 0xef, 0x35, 0xaf, 0xe1, 0x08,
+ 0xeb, 0xff, 0xf0, 0xd8, 0x0c, 0xb2, 0xf3, 0xdf, 0xe9, 0x0b, 0xf6, 0xfb,
+ 0x18, 0x1c, 0x1e, 0xb0, 0xc6, 0xf1, 0x14, 0xee, 0xf5, 0xed, 0xf6, 0x0d,
+ 0x0c, 0xfb, 0x0a, 0xe9, 0x04, 0xc3, 0xe9, 0x14, 0x69, 0xf2, 0x41, 0xf6,
+ 0x3b, 0xf6, 0xe7, 0x11, 0xd4, 0xf1, 0x4f, 0x0a, 0xe2, 0xfb, 0x24, 0xaf,
+ 0xf7, 0xf7, 0x66, 0xed, 0xf4, 0xc6, 0x22, 0xe9, 0xf2, 0x51, 0x0e, 0x17,
+ 0x45, 0x9b, 0xe1, 0x1c, 0xcc, 0x8e, 0xb7, 0xff, 0xd4, 0xb5, 0xc2, 0xb7,
+ 0xed, 0x0a, 0x06, 0x3a, 0x1a, 0xe3, 0x0b, 0xc2, 0xaa, 0xde, 0xb3, 0xee,
+ 0xf1, 0xe1, 0x2a, 0x08, 0xdd, 0xd3, 0xe0, 0xdf, 0xf4, 0x29, 0x1f, 0xdf,
+ 0xea, 0xda, 0xdd, 0xf5, 0xd7, 0xd1, 0xd6, 0xed, 0x09, 0xea, 0xec, 0x1f,
+ 0x32, 0xf9, 0x02, 0xcc, 0xed, 0xc8, 0xf3, 0xf2, 0xe4, 0xed, 0x0a, 0x2a,
+ 0xef, 0xfb, 0x12, 0x18, 0x29, 0x30, 0x4c, 0xd9, 0xfe, 0x10, 0xe0, 0xe5,
+ 0xdd, 0x42, 0xfb, 0x01, 0x2e, 0x03, 0x0b, 0x2f, 0x1a, 0x1d, 0xee, 0xd6,
+ 0xcc, 0x06, 0x27, 0xef, 0xe3, 0x02, 0x23, 0x7f, 0x00, 0xdb, 0x11, 0xde,
+ 0x03, 0x1b, 0x34, 0xfe, 0x2b, 0x0a, 0xfe, 0xf6, 0xcb, 0xf7, 0xcb, 0x10,
+ 0xf9, 0xf8, 0xe5, 0x11, 0x0f, 0x04, 0x02, 0xf5, 0x06, 0x05, 0xfd, 0xfc,
+ 0xbc, 0x0a, 0xdf, 0x39, 0xfd, 0x0a, 0x26, 0x10, 0x39, 0x0c, 0x21, 0x06,
+ 0xd4, 0xfb, 0x0e, 0xfa, 0xf9, 0xff, 0xf4, 0xef, 0x00, 0xdd, 0x27, 0x10,
+ 0xed, 0xf4, 0xf9, 0xca, 0xfd, 0x1b, 0x01, 0x0e, 0x07, 0xdf, 0x34, 0xbb,
+ 0xef, 0x1f, 0x26, 0xf3, 0xd6, 0xef, 0x0f, 0x37, 0xdf, 0xdc, 0x0d, 0xd1,
+ 0xc9, 0x1b, 0x11, 0x0b, 0x59, 0x07, 0x49, 0x1b, 0x15, 0xf1, 0xf6, 0xbe,
+ 0x07, 0x5b, 0x10, 0xf1, 0xb9, 0xf6, 0x0f, 0x02, 0xf9, 0x07, 0xfc, 0xd9,
+ 0x34, 0xeb, 0xfd, 0x1f, 0xf6, 0xfa, 0x06, 0x0a, 0xee, 0x00, 0xf9, 0x15,
+ 0xfc, 0x11, 0x13, 0xd5, 0xdf, 0xc0, 0xee, 0xe0, 0x12, 0x25, 0x06, 0xf9,
+ 0x0b, 0x05, 0x66, 0xba, 0xd2, 0x1e, 0x13, 0xd4, 0xf7, 0x28, 0x4d, 0xca,
+ 0x17, 0xf7, 0x19, 0x05, 0xf2, 0x0c, 0xca, 0x29, 0x14, 0xd2, 0xd9, 0x04,
+ 0x09, 0xf3, 0xd9, 0xc5, 0x30, 0xf0, 0xe7, 0xf9, 0xff, 0xaf, 0xf2, 0x36,
+ 0x23, 0x1d, 0x2f, 0x24, 0xed, 0x2d, 0x33, 0xdc, 0xe0, 0x10, 0xe9, 0xee,
+ 0xd4, 0x19, 0xc4, 0xe8, 0x47, 0x56, 0xec, 0x0f, 0xcf, 0x29, 0x01, 0xa2,
+ 0xbf, 0xf5, 0xf3, 0xeb, 0xdb, 0xcc, 0xed, 0x73, 0x33, 0xd3, 0x1b, 0xe0,
+ 0xeb, 0xdd, 0x17, 0xee, 0x1d, 0xf5, 0x07, 0xe4, 0x1b, 0x0b, 0xd8, 0x14,
+ 0xfe, 0x05, 0xf9, 0x09, 0x18, 0xeb, 0xf4, 0xc2, 0x28, 0x04, 0x08, 0xe6,
+ 0xe4, 0xd7, 0xfe, 0x41, 0x2c, 0x42, 0x30, 0xfd, 0xf1, 0x1f, 0x02, 0xc5,
+ 0x26, 0xde, 0x00, 0xee, 0xe3, 0x09, 0xe3, 0x2a, 0x04, 0xb9, 0xf7, 0xe6,
+ 0x02, 0xf1, 0x04, 0x08, 0x17, 0xbd, 0x19, 0x07, 0xa6, 0x0a, 0xad, 0x46,
+ 0xf2, 0x2a, 0x1d, 0x0d, 0x29, 0x16, 0x29, 0xd7, 0xf5, 0xe0, 0xc5, 0x0a,
+ 0xbb, 0xdf, 0x01, 0x40, 0x31, 0x0a, 0x17, 0x2a, 0x34, 0x5e, 0xf0, 0xe5,
+ 0xdc, 0xeb, 0xf0, 0xff, 0xb3, 0xe1, 0xe3, 0x67, 0x08, 0xb6, 0xda, 0xd8,
+ 0xe0, 0x1f, 0xfa, 0xe9, 0xf8, 0xfd, 0x2b, 0xfe, 0xf8, 0x2c, 0xd1, 0x37,
+ 0xfd, 0xf7, 0xef, 0xfc, 0x0c, 0xc4, 0xf7, 0xe8, 0x22, 0xee, 0xfb, 0xf2,
+ 0x96, 0xeb, 0xba, 0xa0, 0x28, 0x36, 0x1c, 0x11, 0x14, 0x9a, 0x10, 0xef,
+ 0x1b, 0xdc, 0x04, 0xe5, 0xfb, 0xfd, 0xcb, 0x03, 0xa2, 0xf0, 0x4d, 0xbd,
+ 0xde, 0xc8, 0x1c, 0xc7, 0xdd, 0xaa, 0x11, 0x00, 0x9b, 0xf6, 0x2c, 0x1c,
+ 0xd0, 0x0a, 0x2f, 0xfe, 0x28, 0xb3, 0xcd, 0xeb, 0x01, 0x12, 0x1c, 0xd7,
+ 0xe0, 0xf8, 0xcf, 0x1e, 0x2a, 0xf9, 0x7f, 0x13, 0xff, 0x18, 0xce, 0xe4,
+ 0x07, 0xf1, 0x17, 0xf2, 0xf2, 0x36, 0x30, 0x18, 0x1c, 0x43, 0xf3, 0xf9,
+ 0x38, 0xa4, 0xf1, 0xec, 0xd3, 0xf2, 0x23, 0x06, 0xd9, 0xee, 0xd8, 0x22,
+ 0xe8, 0xee, 0x50, 0xa5, 0xd1, 0xd6, 0x18, 0xd6, 0x02, 0xce, 0xfb, 0x0e,
+ 0x82, 0xdd, 0x3b, 0x1b, 0xf5, 0x1c, 0x17, 0xeb, 0xc0, 0xde, 0x24, 0xc4,
+ 0x38, 0x16, 0x44, 0xcd, 0x0a, 0x21, 0xd2, 0x05, 0xfb, 0xc4, 0xda, 0xfa,
+ 0x0a, 0xf9, 0xc8, 0xd1, 0x0e, 0xf3, 0x26, 0xf3, 0xb2, 0x08, 0xbd, 0x5e,
+ 0x09, 0x36, 0x2e, 0xc3, 0x17, 0xbd, 0x4d, 0xdd, 0x23, 0xf9, 0xfe, 0xf7,
+ 0xb4, 0x11, 0xf5, 0x34, 0x1e, 0x3c, 0x17, 0x07, 0x3e, 0x44, 0x01, 0xe4,
+ 0xf9, 0x05, 0xfd, 0xf4, 0xcc, 0x09, 0xbe, 0x59, 0x0f, 0xf4, 0xf1, 0xf4,
+ 0xe1, 0xe6, 0x35, 0xe3, 0x67, 0x18, 0x34, 0xcb, 0x24, 0x39, 0xb4, 0x25,
+ 0xec, 0xd5, 0x03, 0xdb, 0xfd, 0x04, 0xe8, 0xe3, 0x29, 0xfd, 0x23, 0xda,
+ 0x9b, 0x26, 0xc3, 0x43, 0x22, 0x2f, 0x1a, 0xef, 0x2c, 0xf9, 0x18, 0x33,
+ 0xdf, 0xff, 0x07, 0xf3, 0xf3, 0xf9, 0x38, 0xfa, 0xd7, 0x26, 0x03, 0x20,
+ 0x24, 0x31, 0xfb, 0xee, 0xef, 0x01, 0x0a, 0xd3, 0x3e, 0xdb, 0x31, 0xbb,
+ 0xfb, 0xfd, 0x07, 0xfa, 0x06, 0x16, 0xdc, 0x2b, 0xf5, 0x33, 0x0b, 0xf4,
+ 0x30, 0x03, 0xf2, 0xdf, 0xe8, 0xc7, 0xc2, 0x21, 0xe1, 0xb1, 0xe7, 0x1e,
+ 0xec, 0x00, 0x1a, 0xe0, 0x78, 0xcf, 0x4d, 0xb3, 0xf4, 0xdb, 0x08, 0xdf,
+ 0x21, 0x13, 0x02, 0x26, 0xd0, 0xc2, 0x03, 0xfc, 0x08, 0xd7, 0x51, 0xf0,
+ 0xe2, 0x24, 0x03, 0x27, 0x07, 0x1f, 0xf2, 0xed, 0xfc, 0x07, 0xf0, 0xe1,
+ 0x43, 0x01, 0x26, 0xc8, 0xf8, 0xfd, 0xee, 0x0d, 0xee, 0x1d, 0xf8, 0x2f,
+ 0xff, 0xdd, 0x08, 0xe7, 0xfd, 0x16, 0x2d, 0xec, 0xdd, 0x00, 0xe8, 0xf6,
+ 0x1b, 0x2f, 0x19, 0xea, 0xeb, 0x70, 0xc5, 0xe2, 0x0b, 0xf2, 0xd7, 0x0d,
+ 0x03, 0x08, 0x04, 0xff, 0xf2, 0x12, 0xff, 0x3a, 0xe9, 0xba, 0x16, 0xf6,
+ 0xee, 0x2d, 0x12, 0xc6, 0xb8, 0xff, 0x83, 0xf9, 0x06, 0xd7, 0xce, 0x1a,
+ 0x05, 0x09, 0x0a, 0xe4, 0xe5, 0xef, 0xe8, 0xda, 0xdb, 0xc0, 0xd1, 0xca,
+ 0xf7, 0x23, 0xe4, 0x1c, 0x08, 0xf9, 0x04, 0xf7, 0xeb, 0x27, 0x38, 0xf0,
+ 0xf9, 0xea, 0xdb, 0xfe, 0x1b, 0x30, 0xe0, 0xf4, 0x0e, 0x62, 0xfb, 0xea,
+ 0x25, 0x07, 0xee, 0xfc, 0x08, 0x09, 0xe1, 0xd1, 0x33, 0xf6, 0x18, 0x32,
+ 0xe7, 0x12, 0xf3, 0x27, 0xfd, 0xbd, 0x52, 0xcd, 0xa3, 0x36, 0x25, 0x17,
+ 0x08, 0x37, 0x09, 0x05, 0xee, 0x14, 0xfe, 0xeb, 0x5d, 0x01, 0x45, 0xe1,
+ 0xee, 0x06, 0x07, 0xee, 0xf3, 0x16, 0xe2, 0x16, 0x04, 0x3c, 0x08, 0xf9,
+ 0x39, 0x23, 0x12, 0xd7, 0xe1, 0xa4, 0xde, 0x0e, 0xb1, 0xf1, 0xbe, 0x18,
+ 0x16, 0xe5, 0x22, 0x0b, 0x7f, 0xf6, 0x49, 0xea, 0x09, 0xe9, 0xe8, 0xb8,
+ 0x1d, 0x05, 0x1d, 0xed, 0xf2, 0x13, 0xd9, 0xf6, 0x12, 0xe5, 0x68, 0xe6,
+ 0xd5, 0x18, 0x21, 0x17, 0xfd, 0x2a, 0xef, 0xef, 0x08, 0xf8, 0x10, 0x11,
+ 0x4e, 0xfb, 0x37, 0xf5, 0xfc, 0xf0, 0xf5, 0xf9, 0x15, 0xfe, 0x22, 0x23,
+ 0x08, 0xfd, 0xf9, 0x08, 0x00, 0xee, 0x02, 0xf9, 0xe5, 0x15, 0x0c, 0x05,
+ 0x07, 0x05, 0x14, 0x05, 0xf7, 0x0f, 0x31, 0xdf, 0x1b, 0x1c, 0x0c, 0xde,
+ 0xfe, 0xfc, 0x04, 0x02, 0x09, 0x11, 0x16, 0x0d, 0x37, 0xf1, 0xf7, 0xfc,
+ 0x2a, 0x47, 0xf3, 0xe6, 0x04, 0xe4, 0x00, 0x09, 0xe7, 0x1e, 0xf1, 0x11,
+ 0xe2, 0xfd, 0x38, 0xe5, 0xfc, 0xea, 0x0a, 0x2a, 0x19, 0xf2, 0xec, 0xd7,
+ 0x2f, 0x0b, 0xfa, 0x01, 0x23, 0x12, 0xf8, 0x09, 0x00, 0xd5, 0x13, 0xf8,
+ 0xe8, 0xec, 0x0d, 0x3d, 0xfc, 0x0a, 0xfd, 0x15, 0xb3, 0xfb, 0x29, 0xd0,
+ 0x2c, 0x37, 0x23, 0xe8, 0xe6, 0xee, 0x0e, 0x0d, 0x2d, 0x1b, 0x2c, 0x1f,
+ 0xf7, 0x1f, 0x26, 0xfb, 0x04, 0x2f, 0x4f, 0xfb, 0xea, 0x05, 0xd9, 0xee,
+ 0xd7, 0x04, 0xfa, 0xf1, 0x29, 0x1d, 0x14, 0x09, 0x07, 0x35, 0x4c, 0xc6,
+ 0xf2, 0xfd, 0xee, 0xee, 0xdd, 0x18, 0x15, 0x0c, 0xeb, 0xe4, 0xec, 0xfc,
+ 0xea, 0x20, 0x7f, 0xb5, 0xb3, 0xff, 0x36, 0x02, 0x12, 0xbf, 0xf8, 0x19,
+ 0xfd, 0xe7, 0x21, 0x07, 0xc9, 0x19, 0x00, 0xe4, 0xd1, 0xcb, 0x05, 0xd4,
+ 0x3e, 0x1b, 0x01, 0x27, 0xff, 0xfc, 0x1d, 0x0e, 0x30, 0x29, 0x2d, 0x00,
+ 0xee, 0x01, 0x02, 0x09, 0x01, 0x0f, 0xe7, 0xef, 0x19, 0x1a, 0x0b, 0xe9,
+ 0x2c, 0x16, 0x4e, 0xe1, 0xf1, 0xf0, 0xe7, 0xd3, 0x16, 0xed, 0x0d, 0x36,
+ 0xfc, 0xf9, 0xf3, 0xd9, 0xfe, 0xd6, 0x00, 0xf8, 0xed, 0xee, 0xf2, 0x07,
+ 0xfa, 0x0a, 0x04, 0xd2, 0x23, 0x04, 0x0f, 0x24, 0x0b, 0x25, 0x0a, 0xf8,
+ 0x0b, 0x00, 0x12, 0xf6, 0xd9, 0xff, 0xbb, 0x1c, 0x03, 0xca, 0xda, 0xc0,
+ 0xf6, 0x03, 0xf0, 0xc1, 0xe7, 0xfe, 0xe1, 0xe6, 0xa9, 0x3b, 0xf2, 0xca,
+ 0xfd, 0xbf, 0x61, 0x09, 0xdd, 0xdc, 0xf6, 0x37, 0x10, 0xcf, 0x21, 0xe0,
+ 0x15, 0x00, 0x1f, 0x08, 0x1b, 0xe3, 0xed, 0xf6, 0x03, 0xd3, 0xf2, 0xee,
+ 0xda, 0x0d, 0xe2, 0x2f, 0x0f, 0x03, 0xfc, 0xd8, 0xe0, 0xdf, 0x30, 0x02,
+ 0xfe, 0x22, 0x09, 0xfe, 0x0a, 0xfa, 0x0b, 0x0e, 0x0b, 0xe9, 0xf9, 0xd8,
+ 0xe5, 0xdd, 0x02, 0xf8, 0x07, 0x0d, 0x26, 0xf9, 0xf5, 0x08, 0xf4, 0xfc,
+ 0x2a, 0x05, 0xf2, 0xe4, 0x0f, 0xee, 0xe9, 0xe8, 0x24, 0xbc, 0x03, 0x00,
+ 0x19, 0x1c, 0x10, 0xf5, 0x2e, 0x02, 0xf6, 0xea, 0xf3, 0x07, 0xc7, 0xf9,
+ 0xee, 0xc3, 0x13, 0xfa, 0xf4, 0x01, 0xe5, 0x26, 0x06, 0xd4, 0x0c, 0x0f,
+ 0xe4, 0xfb, 0x06, 0xfd, 0x26, 0xd7, 0x18, 0xd1, 0xed, 0xe3, 0x17, 0x05,
+ 0x19, 0x0e, 0xf9, 0xc7, 0xe9, 0xef, 0x12, 0x06, 0x21, 0x0e, 0x57, 0x01,
+ 0x02, 0x2d, 0xf4, 0x0f, 0x23, 0x12, 0xf3, 0x03, 0x56, 0xe8, 0xe0, 0x42,
+ 0x2f, 0xd1, 0x0c, 0xdf, 0x37, 0x1c, 0xf8, 0xe8, 0xef, 0xf5, 0xe3, 0xd6,
+ 0xe2, 0xe3, 0xf4, 0xdf, 0xd5, 0x01, 0xe9, 0x11, 0x06, 0xf5, 0xdf, 0xda,
+ 0xdc, 0x12, 0x1d, 0xe7, 0xfe, 0xf1, 0xd8, 0xf9, 0xe9, 0xe7, 0xab, 0x0a,
+ 0x16, 0x47, 0x27, 0xf8, 0xe4, 0x24, 0xe3, 0xf5, 0xf4, 0xf5, 0x1a, 0xf8,
+ 0xc4, 0x0d, 0x08, 0x11, 0xdf, 0xea, 0xd9, 0xd8, 0x05, 0x04, 0xf7, 0x01,
+ 0x01, 0xf9, 0x13, 0x04, 0xe3, 0x07, 0xba, 0xe5, 0xef, 0x12, 0x06, 0x1e,
+ 0xef, 0xfb, 0xef, 0xf3, 0xd3, 0xe0, 0xea, 0xcd, 0xf1, 0x04, 0x2f, 0x0c,
+ 0x01, 0xf2, 0xd9, 0xe0, 0xe9, 0x15, 0xfb, 0xe6, 0x38, 0xf6, 0xb9, 0x48,
+ 0xfb, 0xf1, 0xe1, 0x00, 0x1f, 0x25, 0x22, 0xea, 0xef, 0xd5, 0xef, 0x00,
+ 0xdf, 0xef, 0xf0, 0x20, 0xed, 0xf1, 0x37, 0xef, 0xe9, 0x2e, 0x09, 0xde,
+ 0xf1, 0xd5, 0x1f, 0x06, 0x30, 0xe5, 0xdd, 0xec, 0x3f, 0xe1, 0x0d, 0xd8,
+ 0x0f, 0x29, 0x0f, 0xe3, 0x04, 0xef, 0xee, 0x13, 0xe7, 0x24, 0xdd, 0xe8,
+ 0xe5, 0xfa, 0x18, 0xe8, 0xc5, 0x00, 0xdc, 0x15, 0x03, 0xe1, 0x02, 0x11,
+ 0x11, 0xf3, 0xf7, 0x27, 0x19, 0xe1, 0x11, 0xe5, 0xf0, 0xf7, 0xfd, 0xfc,
+ 0xf1, 0xcd, 0xe8, 0xef, 0xce, 0x10, 0x24, 0xfe, 0x04, 0xc8, 0x6d, 0xf6,
+ 0xfa, 0x37, 0xe6, 0xf3, 0x0d, 0xe1, 0xd9, 0x00, 0x7f, 0xde, 0xd7, 0x63,
+ 0x2b, 0xed, 0x02, 0xb3, 0x19, 0x27, 0x1b, 0xd8, 0xfc, 0xc3, 0x07, 0x25,
+ 0x23, 0xf2, 0xed, 0xe5, 0xf2, 0xc2, 0xd1, 0xe5, 0x0d, 0xfc, 0xef, 0xee,
+ 0xe7, 0xf6, 0x0b, 0xbb, 0x0d, 0xfb, 0x11, 0x00, 0xfd, 0x32, 0xe5, 0x25,
+ 0x25, 0x05, 0x1e, 0xf3, 0xde, 0xca, 0xc5, 0x0c, 0xfd, 0xcf, 0x08, 0x1c,
+ 0xfa, 0x11, 0xdd, 0xf6, 0xfe, 0x10, 0xe4, 0x04, 0xa3, 0x2a, 0x0c, 0xfd,
+ 0x14, 0xf2, 0x2d, 0x00, 0xb6, 0xe2, 0xf2, 0x11, 0xfa, 0x28, 0x54, 0x07,
+ 0xd3, 0xe5, 0xff, 0x1a, 0x41, 0xf9, 0xcd, 0xe5, 0x4f, 0xcb, 0x09, 0xce,
+ 0x10, 0x02, 0xed, 0x10, 0x0d, 0xf6, 0x0e, 0xe3, 0xaf, 0xfe, 0x1c, 0xe6,
+ 0x12, 0x58, 0x05, 0xfc, 0x43, 0xf8, 0x1d, 0x05, 0x7f, 0xe8, 0x20, 0xb9,
+ 0xff, 0x21, 0x25, 0xf0, 0x12, 0x16, 0xf5, 0xeb, 0xfe, 0x1d, 0x01, 0xd9,
+ 0xcb, 0xda, 0xc4, 0xd4, 0x11, 0xd8, 0x1b, 0x16, 0x00, 0x3a, 0x48, 0xad,
+ 0x16, 0x0c, 0xeb, 0xe4, 0xaa, 0x3f, 0x1f, 0xcf, 0x29, 0x05, 0xe8, 0x05,
+ 0x0f, 0x06, 0x60, 0xd8, 0xd9, 0x32, 0x25, 0x10, 0x15, 0xbd, 0x25, 0xfa,
+ 0xc8, 0xf2, 0x1c, 0xe8, 0xcc, 0x0f, 0x28, 0xe5, 0xce, 0x12, 0x5c, 0x0b,
+ 0x65, 0xf9, 0x1a, 0xf4, 0x06, 0x20, 0x19, 0xef, 0x39, 0x22, 0xe3, 0x05,
+ 0xf4, 0xfb, 0x10, 0x28, 0xf8, 0xe2, 0xed, 0xea, 0x03, 0xaa, 0x1b, 0xf6,
+ 0x06, 0x13, 0x2a, 0xf2, 0x2a, 0xf4, 0xc4, 0xe4, 0x00, 0x09, 0x1f, 0x18,
+ 0x1c, 0xf1, 0x0c, 0xf9, 0x04, 0xc4, 0xf6, 0x30, 0x0d, 0xfb, 0xec, 0xf0,
+ 0x07, 0xff, 0xf8, 0xdb, 0x23, 0x39, 0x02, 0x17, 0xea, 0x1e, 0xf2, 0x20,
+ 0x4f, 0x0e, 0x1b, 0x03, 0xce, 0xfb, 0xe9, 0x04, 0xc8, 0xc8, 0xe0, 0x0a,
+ 0xd7, 0x23, 0xe0, 0xed, 0x0d, 0x46, 0xe1, 0xf9, 0xa7, 0x3d, 0x13, 0xc5,
+ 0x13, 0xfe, 0x49, 0x03, 0xb3, 0xc3, 0xe0, 0x69, 0xee, 0xde, 0x5a, 0xf9,
+ 0xe7, 0xf0, 0xfa, 0x2b, 0x2c, 0xf6, 0xca, 0xf7, 0x3b, 0xcf, 0xe1, 0x13,
+ 0x0a, 0xf2, 0xfa, 0x0e, 0x0b, 0xc8, 0x04, 0xe5, 0xeb, 0x1c, 0x25, 0xfc,
+ 0xf2, 0x4a, 0xf2, 0xf8, 0x57, 0x2c, 0x1a, 0x04, 0xe7, 0xd6, 0xf6, 0x1d,
+ 0x17, 0x10, 0xd8, 0xd4, 0x05, 0x08, 0x0e, 0xf8, 0xe5, 0xe1, 0xf5, 0x20,
+ 0x2d, 0xea, 0xfe, 0xe9, 0x0a, 0xea, 0xfe, 0x0a, 0x16, 0x40, 0x0e, 0x0c,
+ 0xec, 0xc9, 0xde, 0xcb, 0x06, 0xc3, 0x05, 0x3f, 0x0f, 0x04, 0x31, 0xf6,
+ 0xea, 0x37, 0x2e, 0x35, 0xa5, 0x1b, 0x05, 0x64, 0x42, 0xc8, 0x05, 0xfd,
+ 0x0f, 0x22, 0xfc, 0xf2, 0x06, 0x42, 0x30, 0xd8, 0xf5, 0xd4, 0xd2, 0xd2,
+ 0xd9, 0xea, 0x02, 0x20, 0x0c, 0xfc, 0x04, 0xe7, 0xf3, 0x01, 0xfd, 0x2a,
+ 0xf8, 0xe4, 0xe8, 0xfe, 0x1b, 0xe4, 0xeb, 0xff, 0x31, 0x25, 0x06, 0xe7,
+ 0x21, 0x1c, 0xff, 0xee, 0xfb, 0x0f, 0xff, 0xd7, 0xc1, 0xda, 0xfd, 0x17,
+ 0x3e, 0xf8, 0xdd, 0xf5, 0xf2, 0xe3, 0xdd, 0xae, 0xd1, 0x1e, 0xba, 0xd3,
+ 0xd5, 0x19, 0xf6, 0xc9, 0xf5, 0xe3, 0xf1, 0x03, 0x0e, 0x10, 0xc0, 0x50,
+ 0xec, 0xc9, 0x02, 0xe8, 0xb3, 0x0d, 0xed, 0x18, 0x08, 0xf6, 0xfd, 0x96,
+ 0xe1, 0xef, 0xde, 0x10, 0x27, 0xce, 0x3f, 0xd0, 0xb3, 0x36, 0xe7, 0xd0,
+ 0x0e, 0x01, 0xfb, 0xf1, 0xb7, 0x1f, 0xbb, 0x59, 0xde, 0x23, 0xec, 0x06,
+ 0xe2, 0xdf, 0x0c, 0xe4, 0x35, 0x06, 0x06, 0x01, 0xe2, 0xf5, 0xe6, 0xee,
+ 0xf3, 0x06, 0xd5, 0xd4, 0xf2, 0x07, 0xfd, 0xb0, 0x17, 0xe0, 0xea, 0xf9,
+ 0x26, 0xec, 0xd6, 0x55, 0xf4, 0x24, 0x2f, 0xf4, 0xdd, 0xfc, 0x23, 0x2d,
+ 0x33, 0x15, 0x15, 0xe5, 0x10, 0x2f, 0x0d, 0x11, 0x0a, 0xee, 0xe3, 0x0c,
+ 0x2d, 0x02, 0x07, 0xd5, 0x25, 0x2d, 0x13, 0xfa, 0x0a, 0x4d, 0xed, 0x39,
+ 0xed, 0xfa, 0xf8, 0xec, 0x05, 0xea, 0x1b, 0x4a, 0x24, 0x01, 0x42, 0x11,
+ 0xf4, 0x2c, 0x24, 0x52, 0x14, 0x4a, 0x0d, 0x7f, 0x6f, 0xff, 0x1f, 0xc0,
+ 0xfa, 0x3a, 0x07, 0xd7, 0xe8, 0x43, 0x29, 0x30, 0x1a, 0x11, 0xea, 0xcd,
+ 0xf4, 0xf7, 0x08, 0x58, 0x39, 0xf3, 0x25, 0xe5, 0xeb, 0x1d, 0x03, 0x20,
+ 0xec, 0xed, 0xf3, 0x04, 0x21, 0xf8, 0xfb, 0xee, 0x32, 0x19, 0x21, 0x00,
+ 0xc7, 0x39, 0xe0, 0x1c, 0xf8, 0x10, 0x12, 0xee, 0x11, 0x16, 0x3b, 0xd8,
+ 0xee, 0xe7, 0xe8, 0xfe, 0xe6, 0xe8, 0xed, 0xf7, 0xfa, 0xdc, 0xf0, 0x0b,
+ 0x23, 0xfe, 0xfe, 0xd7, 0x01, 0xe7, 0xf0, 0xf9, 0xfb, 0xe9, 0xfd, 0x02,
+ 0x05, 0xf5, 0x15, 0x07, 0x29, 0x30, 0x38, 0xd4, 0xdc, 0xf3, 0xe4, 0xd7,
+ 0xf7, 0x1d, 0xf1, 0x16, 0x34, 0xe4, 0x10, 0x11, 0x0a, 0xf4, 0xd5, 0xde,
+ 0xdc, 0xf8, 0x1a, 0x01, 0x04, 0xce, 0x1c, 0x7f, 0xf1, 0xd7, 0x05, 0xde,
+ 0x17, 0x23, 0x3e, 0xe6, 0x2b, 0xe7, 0xde, 0xfe, 0xa7, 0xe1, 0xca, 0x0c,
+ 0xf7, 0x01, 0xfc, 0x0f, 0x23, 0x19, 0x08, 0xf8, 0xfb, 0xfe, 0x00, 0x02,
+ 0xc9, 0x08, 0x16, 0x25, 0xf4, 0xce, 0x09, 0x10, 0x33, 0x12, 0x22, 0x23,
+ 0xd2, 0x02, 0x1f, 0xf4, 0xe4, 0xf9, 0x17, 0x10, 0x0c, 0xc1, 0x36, 0x06,
+ 0xfe, 0xeb, 0xfc, 0xd9, 0xe5, 0x2a, 0xfd, 0xfa, 0xff, 0xf3, 0x27, 0xc0,
+ 0xe2, 0x1a, 0x1f, 0xea, 0xcc, 0xdd, 0x26, 0x2f, 0xbd, 0xd3, 0x06, 0xe1,
+ 0xc8, 0x1d, 0x0c, 0xed, 0x60, 0xfb, 0x4b, 0x1c, 0x0c, 0xfc, 0xf4, 0xaa,
+ 0x14, 0x25, 0xfb, 0xf4, 0xb8, 0xfc, 0x01, 0x28, 0x01, 0xf4, 0xe3, 0xec,
+ 0x47, 0x00, 0x05, 0x14, 0xe4, 0x12, 0x16, 0x02, 0xd3, 0x06, 0x2e, 0xeb,
+ 0x1c, 0x06, 0xfd, 0xe0, 0x01, 0xda, 0xfe, 0xd5, 0x11, 0x30, 0x1a, 0xee,
+ 0x07, 0x03, 0x5e, 0xaf, 0xc7, 0x35, 0x0f, 0xe2, 0xf3, 0x26, 0x46, 0xc8,
+ 0x16, 0x00, 0x33, 0x00, 0xea, 0x15, 0xe0, 0x25, 0xf9, 0xdf, 0xf9, 0x04,
+ 0x0e, 0x20, 0xd9, 0xcb, 0x22, 0xeb, 0xf9, 0xdb, 0xf3, 0xda, 0xf4, 0x25,
+ 0x09, 0x19, 0x22, 0x3c, 0x07, 0x3e, 0x50, 0xe0, 0xff, 0x21, 0xe9, 0xe4,
+ 0xec, 0x20, 0xc0, 0xfa, 0x44, 0x1d, 0xf9, 0x04, 0xf0, 0x1e, 0xf8, 0xe0,
+ 0x9a, 0x0c, 0x2a, 0xed, 0xf2, 0xe9, 0x06, 0x3a, 0x1a, 0xd5, 0x0b, 0xdb,
+ 0x04, 0x02, 0x23, 0xd2, 0xfc, 0x1a, 0x26, 0xfc, 0xeb, 0x11, 0xbd, 0x22,
+ 0xfc, 0xff, 0xfb, 0xfe, 0x17, 0x09, 0xdd, 0xe4, 0x26, 0xff, 0xee, 0xea,
+ 0xc6, 0xc8, 0xe7, 0x17, 0x26, 0x3f, 0x1f, 0x01, 0xff, 0x1d, 0xe2, 0xd9,
+ 0xea, 0x52, 0x3f, 0x21, 0xc9, 0x62, 0xb6, 0x49, 0xfc, 0xef, 0x04, 0x09,
+ 0x1c, 0xd4, 0x0c, 0x0f, 0xf7, 0xe5, 0xcc, 0xd8, 0xdd, 0xb0, 0xe7, 0x1d,
+ 0xe1, 0x45, 0x17, 0x48, 0x54, 0x38, 0x09, 0xda, 0xc8, 0x75, 0xff, 0xe4,
+ 0xed, 0x04, 0x16, 0x08, 0x48, 0xd5, 0x39, 0x13, 0x39, 0x05, 0xbc, 0xf3,
+ 0xc9, 0xcf, 0xfc, 0x00, 0x07, 0x18, 0x21, 0x51, 0x23, 0xc7, 0xd5, 0xf5,
+ 0x0b, 0x44, 0xfc, 0xad, 0x0d, 0x3b, 0xef, 0x24, 0x14, 0x20, 0x07, 0xf6,
+ 0x07, 0xed, 0xf5, 0x08, 0x1d, 0x06, 0xe4, 0x2d, 0xbc, 0xc9, 0x00, 0xe7,
+ 0x00, 0xcd, 0x1c, 0x1e, 0xe8, 0x02, 0x21, 0x26, 0x07, 0x06, 0x91, 0x10,
+ 0xd1, 0xe9, 0xbc, 0x2b, 0xbb, 0xe4, 0xf5, 0x09, 0x05, 0xeb, 0x37, 0xbc,
+ 0xcc, 0x1f, 0x54, 0xe9, 0x02, 0x5a, 0xd2, 0xef, 0x1a, 0x9c, 0xf6, 0x32,
+ 0xd6, 0x41, 0x60, 0x2a, 0x10, 0xcf, 0xe9, 0x72, 0xe0, 0xd5, 0xf3, 0xf4,
+ 0xa5, 0x17, 0xb2, 0x03, 0x7f, 0xdc, 0x62, 0xe8, 0xef, 0x4f, 0xdf, 0xb7,
+ 0x24, 0x3e, 0xd6, 0xf8, 0xa2, 0xe8, 0xd6, 0x42, 0xdf, 0xc5, 0xaf, 0xee,
+ 0x26, 0xe5, 0xd0, 0x37, 0xe6, 0xef, 0xd7, 0x45, 0xd5, 0xfa, 0x37, 0xfc,
+ 0x0e, 0xea, 0x5f, 0xdb, 0xd4, 0x1a, 0x4b, 0xff, 0x12, 0x72, 0xd6, 0x00,
+ 0x0b, 0xde, 0x44, 0x4a, 0x8d, 0x2b, 0x55, 0xd0, 0xcb, 0x54, 0x2d, 0xca,
+ 0x02, 0x2e, 0x3a, 0x1a, 0xce, 0x5f, 0xab, 0x10, 0x09, 0x1d, 0xff, 0xe5,
+ 0x08, 0x05, 0xda, 0x20, 0x38, 0xf4, 0xc2, 0xef, 0xc1, 0x94, 0xd9, 0x2a,
+ 0xfe, 0x21, 0xf1, 0xda, 0x6d, 0x26, 0x0d, 0xe9, 0x25, 0x59, 0xed, 0xb2,
+ 0xf4, 0xf8, 0xb0, 0xd6, 0xff, 0x25, 0xcd, 0x11, 0x52, 0x10, 0xe7, 0x00,
+ 0x9c, 0xee, 0xab, 0x12, 0xff, 0x0c, 0xef, 0x76, 0x35, 0xa5, 0xd0, 0xd4,
+ 0xbf, 0x2d, 0x19, 0xb9, 0xed, 0x68, 0x17, 0x47, 0x02, 0x1e, 0x9f, 0x0b,
+ 0x21, 0x15, 0xfc, 0xb0, 0x03, 0xe6, 0xdf, 0x38, 0x28, 0xd6, 0xaa, 0x0a,
+ 0xc0, 0x8f, 0xcb, 0x06, 0x0e, 0xf4, 0x40, 0x0b, 0x22, 0x08, 0x1a, 0x0b,
+ 0xde, 0xe3, 0x16, 0xf2, 0xec, 0x02, 0x32, 0xf0, 0xf2, 0x19, 0xfe, 0xfb,
+ 0x09, 0x06, 0x04, 0xe9, 0xfe, 0xe8, 0x0f, 0xf9, 0x0a, 0x08, 0xea, 0xe9,
+ 0x2f, 0x04, 0xfc, 0xf6, 0xe7, 0x2b, 0x04, 0x02, 0xea, 0xfd, 0x1e, 0xfa,
+ 0xff, 0x15, 0x2c, 0xf1, 0xea, 0x02, 0xec, 0x03, 0x01, 0xe1, 0x0a, 0x14,
+ 0x0a, 0xf2, 0x0d, 0xfa, 0xec, 0x16, 0x0b, 0xce, 0x04, 0xff, 0x1d, 0xfd,
+ 0x0e, 0x0c, 0x2c, 0xfb, 0xe9, 0xf2, 0x13, 0xeb, 0x00, 0x09, 0x78, 0xfd,
+ 0xf7, 0x13, 0xff, 0x06, 0x10, 0x0d, 0xf9, 0xf4, 0x3c, 0xf4, 0x23, 0x29,
+ 0x2c, 0xfc, 0x0a, 0x01, 0x28, 0x02, 0xf7, 0xfb, 0x08, 0xfb, 0xf1, 0x1d,
+ 0xe5, 0xe7, 0x34, 0xff, 0xd3, 0x3d, 0x54, 0xe2, 0xb8, 0x09, 0xe1, 0xec,
+ 0xea, 0x1b, 0x0b, 0xe1, 0x36, 0xf7, 0x2f, 0xfa, 0xca, 0x4d, 0xde, 0xd1,
+ 0x15, 0xfb, 0xeb, 0xf9, 0xe0, 0xf7, 0xe4, 0x1c, 0xe1, 0xdc, 0x37, 0xf9,
+ 0xd7, 0x42, 0x1d, 0xe2, 0xc3, 0xe3, 0xbd, 0xfa, 0x19, 0xc4, 0xdf, 0x20,
+ 0x27, 0xd2, 0x2f, 0x08, 0xf9, 0x57, 0xf0, 0xc7, 0xe8, 0x02, 0x0c, 0xcf,
+ 0xde, 0xf1, 0xf9, 0x1a, 0xfe, 0xf7, 0x1b, 0xfd, 0xde, 0x4f, 0x64, 0xe9,
+ 0xdc, 0x11, 0xc1, 0xfa, 0xf3, 0x14, 0xfe, 0xf0, 0x41, 0xf8, 0x2f, 0x39,
+ 0xff, 0x55, 0xd6, 0xd3, 0x2a, 0x12, 0xfd, 0xe5, 0x1e, 0xf5, 0xdc, 0x04,
+ 0xc0, 0xaf, 0xcd, 0xef, 0xb0, 0xf4, 0x28, 0xe8, 0xc0, 0xee, 0x13, 0xdb,
+ 0xc5, 0x03, 0x00, 0xd6, 0x20, 0xeb, 0xfa, 0x14, 0xf4, 0xf5, 0xed, 0xca,
+ 0xf0, 0xdf, 0xdc, 0xf2, 0xc7, 0x0e, 0xf0, 0x0a, 0x03, 0xd9, 0xe9, 0xce,
+ 0xdb, 0xf7, 0x2b, 0xec, 0xc9, 0xbe, 0xf1, 0xeb, 0xe9, 0xef, 0xda, 0x09,
+ 0x20, 0xea, 0x32, 0x08, 0xe1, 0xfc, 0xeb, 0xdf, 0xe0, 0xda, 0xe2, 0xde,
+ 0x2a, 0x01, 0xeb, 0x01, 0xd3, 0xda, 0xe7, 0xd3, 0xe7, 0xe8, 0x7f, 0xf8,
+ 0xdd, 0xd5, 0x0b, 0xf9, 0xe5, 0x0b, 0xd1, 0xe3, 0x73, 0x13, 0xfe, 0x5e,
+ 0x1b, 0xf9, 0xf6, 0xc6, 0x1e, 0x0b, 0xe1, 0xe7, 0x01, 0xe0, 0xd2, 0x7f,
+ 0x0a, 0xdc, 0xda, 0x20, 0xf4, 0xea, 0xf7, 0xcd, 0xf0, 0x0b, 0x14, 0x30,
+ 0x39, 0xf5, 0x1f, 0xda, 0xd8, 0xf5, 0xde, 0xf1, 0x0d, 0xe5, 0x3b, 0x12,
+ 0xa4, 0xd7, 0x0b, 0xf1, 0x3d, 0xd1, 0xa3, 0x76, 0xd7, 0x23, 0x0f, 0xdd,
+ 0x23, 0x0c, 0x06, 0xd2, 0xff, 0xa8, 0x26, 0x29, 0xf9, 0xe6, 0xf3, 0xf4,
+ 0x0a, 0xfd, 0xdb, 0xf1, 0x69, 0xe9, 0x44, 0x05, 0xdd, 0x0c, 0xef, 0x26,
+ 0x07, 0xda, 0xdd, 0x34, 0xdb, 0x00, 0xc5, 0x39, 0xf3, 0xde, 0x0a, 0xc8,
+ 0xdb, 0x15, 0xf8, 0x30, 0x0d, 0x00, 0x02, 0x09, 0xfe, 0xd5, 0xcf, 0x13,
+ 0x18, 0xd9, 0x2a, 0x0e, 0xc3, 0x01, 0x0b, 0xca, 0xcc, 0x03, 0xdd, 0x23,
+ 0x20, 0xd3, 0xfe, 0xe1, 0x17, 0x08, 0xfe, 0x0a, 0xec, 0x0b, 0xed, 0x19,
+ 0x23, 0xfa, 0x0b, 0x1d, 0xd3, 0x5e, 0xe9, 0xe3, 0x31, 0xdf, 0x3b, 0x42,
+ 0xbe, 0xde, 0xfc, 0xf6, 0x1a, 0x27, 0x09, 0x39, 0x22, 0xf6, 0xe0, 0x0c,
+ 0xf9, 0x10, 0xf0, 0x03, 0x17, 0xd1, 0xc1, 0xfe, 0x0f, 0xff, 0xf4, 0xe8,
+ 0xf1, 0x24, 0x07, 0xdd, 0xf1, 0xdd, 0x06, 0x21, 0xc3, 0xd2, 0xd0, 0x0a,
+ 0xd9, 0xf9, 0xc4, 0x3b, 0x0c, 0xde, 0xfd, 0xf0, 0xfc, 0x1a, 0x15, 0x08,
+ 0xf2, 0xfe, 0xed, 0x0f, 0x13, 0xec, 0xf7, 0x13, 0x13, 0x4e, 0xd4, 0xdd,
+ 0x3d, 0xe8, 0x1f, 0x2f, 0xc0, 0xe4, 0xed, 0xe4, 0xff, 0xfc, 0xf8, 0x3f,
+ 0xf4, 0x42, 0xe0, 0x21, 0xf0, 0xb8, 0x09, 0xc4, 0xe9, 0x29, 0x0e, 0x30,
+ 0x19, 0x11, 0x03, 0xf6, 0xa6, 0xeb, 0xf7, 0xeb, 0x32, 0xef, 0x3e, 0xd6,
+ 0xca, 0xfa, 0x0d, 0xf7, 0x03, 0xdd, 0xdb, 0x55, 0xd1, 0x2b, 0x3d, 0xeb,
+ 0x34, 0x47, 0x09, 0xf1, 0xfd, 0xb6, 0x18, 0x10, 0xe9, 0xd2, 0xf5, 0x02,
+ 0x2d, 0x06, 0xdd, 0xec, 0x65, 0x02, 0x1c, 0xc1, 0x19, 0x31, 0xe8, 0x02,
+ 0x05, 0xe5, 0xf1, 0x41, 0xf5, 0x21, 0xde, 0x1a, 0xe9, 0xd2, 0x27, 0xbb,
+ 0xd7, 0x15, 0x09, 0x3a, 0x06, 0x0e, 0x0c, 0x11, 0xde, 0x07, 0xf3, 0x0e,
+ 0x3f, 0x02, 0x35, 0x07, 0xb5, 0xf2, 0xf2, 0xf4, 0xd8, 0xdb, 0xb1, 0x29,
+ 0x10, 0xe4, 0x10, 0xf3, 0x06, 0x18, 0x1a, 0xde, 0xe2, 0x17, 0x02, 0x10,
+ 0xfe, 0x03, 0x0e, 0x11, 0xfb, 0x19, 0x06, 0xe2, 0x3b, 0x20, 0x15, 0xdc,
+ 0xc8, 0xda, 0x04, 0xef, 0xf7, 0xb8, 0xd1, 0x32, 0x20, 0xe9, 0x0b, 0x35,
+ 0x01, 0xf9, 0xf8, 0xef, 0xcd, 0x9c, 0xb4, 0x35, 0x34, 0xe9, 0x05, 0x25,
+ 0xfa, 0x0d, 0x09, 0xef, 0x34, 0x1b, 0x11, 0xfe, 0xde, 0xde, 0xf9, 0xd0,
+ 0xf6, 0xdf, 0xbd, 0xfe, 0x4e, 0x36, 0x1a, 0xcb, 0x3a, 0x22, 0x16, 0xce,
+ 0xee, 0xee, 0x06, 0xf8, 0xf2, 0xf5, 0xe8, 0x14, 0xc6, 0x05, 0x21, 0xf5,
+ 0x22, 0x21, 0x03, 0xfa, 0xb6, 0xf0, 0xfd, 0xdb, 0xd6, 0xfc, 0x06, 0xd5,
+ 0x2b, 0xfd, 0xc1, 0x1b, 0x02, 0xee, 0xb7, 0xd0, 0xd8, 0x16, 0x0c, 0xaf,
+ 0xca, 0x55, 0x4b, 0xcb, 0xdc, 0xe5, 0x08, 0xeb, 0x81, 0xf5, 0x9c, 0x79,
+ 0x02, 0x0b, 0x13, 0x21, 0x1a, 0x1c, 0xe2, 0xc0, 0x01, 0xd2, 0xe8, 0xca,
+ 0xf2, 0xf7, 0xcf, 0xd5, 0xe9, 0xa1, 0x95, 0xd4, 0xec, 0x3f, 0xbf, 0x3b,
+ 0xfa, 0xb5, 0x1b, 0xe2, 0x21, 0xf9, 0x10, 0x1b, 0xee, 0xd1, 0x04, 0x06,
+ 0xb3, 0xed, 0x04, 0xe6, 0x2f, 0x01, 0xf1, 0xe2, 0x1f, 0xf4, 0xc3, 0xd1,
+ 0xd6, 0xe3, 0x06, 0x03, 0xed, 0x31, 0x44, 0xc8, 0xf0, 0xb7, 0xff, 0xf7,
+ 0xe9, 0x00, 0xdf, 0x60, 0xe5, 0x02, 0x1e, 0xed, 0xcf, 0xe8, 0xb3, 0x1e,
+ 0x08, 0x3b, 0x3d, 0x27, 0x1f, 0x0e, 0xa4, 0xe9, 0xe8, 0x38, 0xfb, 0xbf,
+ 0xed, 0xf7, 0x23, 0x1e, 0xf3, 0x0d, 0xfe, 0xc2, 0xb9, 0x35, 0xa3, 0xf7,
+ 0xf0, 0x02, 0x03, 0x05, 0xef, 0xce, 0xe0, 0x15, 0xe9, 0xfd, 0x05, 0x3a,
+ 0xf3, 0xd1, 0xb6, 0x00, 0xf7, 0xa9, 0xc0, 0x54, 0x43, 0xc2, 0xe7, 0x24,
+ 0x1b, 0x37, 0x9b, 0xef, 0xe8, 0x05, 0x12, 0xca, 0x1f, 0xd2, 0xe4, 0xfc,
+ 0xd8, 0xe5, 0x9a, 0xfc, 0x26, 0x15, 0x1a, 0x0c, 0x22, 0x29, 0x11, 0x08,
+ 0x2d, 0x11, 0x01, 0x07, 0xfd, 0xdb, 0xf2, 0x07, 0xcc, 0xe0, 0xfc, 0xe0,
+ 0x2f, 0x0c, 0x16, 0xca, 0xb4, 0x09, 0xe4, 0xef, 0xd5, 0xf0, 0xf5, 0xc9,
+ 0x11, 0x0d, 0x33, 0xc5, 0xf8, 0x30, 0xeb, 0xff, 0x3b, 0xdf, 0xf4, 0xf1,
+ 0x08, 0xfe, 0xc3, 0x02, 0xfa, 0xd2, 0xff, 0xfb, 0xde, 0xfc, 0xda, 0x1e,
+ 0x07, 0xef, 0xb8, 0xc8, 0x0e, 0x1d, 0x1b, 0xe7, 0x21, 0xe7, 0xcb, 0x01,
+ 0xcf, 0xc3, 0x0b, 0x0d, 0xdc, 0x1f, 0x0a, 0x07, 0x34, 0xf1, 0x1a, 0x0a,
+ 0xfb, 0x00, 0xdf, 0xfe, 0xe2, 0x15, 0xf5, 0xef, 0xf2, 0x06, 0x12, 0x13,
+ 0xe1, 0x16, 0xfd, 0xbb, 0xff, 0x14, 0x35, 0xe3, 0x0b, 0x07, 0xfc, 0x10,
+ 0xfc, 0xc0, 0xde, 0x02, 0x13, 0xf5, 0xb3, 0x09, 0x16, 0xe0, 0xec, 0x08,
+ 0xf4, 0x06, 0xe1, 0xff, 0x15, 0x06, 0xea, 0xd3, 0xe4, 0xcd, 0xe2, 0xde,
+ 0x1b, 0xea, 0xd4, 0x04, 0xd7, 0xe3, 0xe5, 0xc1, 0x33, 0x10, 0x23, 0xf7,
+ 0xd9, 0xe3, 0x06, 0xee, 0xee, 0xc9, 0x08, 0x06, 0xe0, 0xf3, 0xe5, 0x05,
+ 0xf1, 0x00, 0x2c, 0xf8, 0x33, 0xe7, 0xd4, 0xee, 0xf6, 0xeb, 0x06, 0x0c,
+ 0xfe, 0xfb, 0xce, 0x14, 0xed, 0xf5, 0xe5, 0xf7, 0xd2, 0x2c, 0x27, 0xec,
+ 0x17, 0xd6, 0x0b, 0xff, 0x0c, 0x15, 0xfe, 0x19, 0x00, 0x26, 0x20, 0x2d,
+ 0xf5, 0xf4, 0xd0, 0xff, 0x1c, 0xd6, 0xe7, 0xf6, 0xf9, 0xd4, 0xf1, 0xe9,
+ 0x23, 0xff, 0xde, 0x06, 0xf3, 0xec, 0x0a, 0xe5, 0xf7, 0xf7, 0xef, 0x20,
+ 0xf5, 0xe4, 0xee, 0xff, 0x29, 0x0a, 0x2d, 0xe5, 0xdd, 0xfd, 0x14, 0xde,
+ 0x07, 0x0b, 0x3b, 0xed, 0xf9, 0x40, 0xe8, 0x0b, 0x42, 0xd4, 0x05, 0xfe,
+ 0xf6, 0xf4, 0xe8, 0x06, 0xfc, 0x15, 0xe9, 0x15, 0xe0, 0xf1, 0xe5, 0x31,
+ 0xfe, 0xf1, 0xd7, 0xed, 0xfb, 0x40, 0x35, 0xf3, 0x13, 0xe8, 0xeb, 0x0e,
+ 0xd0, 0xe6, 0x06, 0x28, 0x01, 0x54, 0xfd, 0xff, 0x39, 0xed, 0x21, 0x02,
+ 0xfd, 0x0e, 0xc8, 0x19, 0xe3, 0x22, 0xe4, 0xdc, 0x0f, 0x14, 0x0d, 0x30,
+ 0xdb, 0x20, 0x1e, 0xc3, 0x23, 0x09, 0x12, 0xe1, 0x18, 0x54, 0xf4, 0xff,
+ 0x29, 0xfa, 0x06, 0xef, 0xce, 0x01, 0xe7, 0x07, 0x1f, 0x14, 0xf1, 0x7f,
+ 0xe2, 0xfc, 0xd9, 0x10, 0x2e, 0xf9, 0xfa, 0xee, 0x3c, 0x16, 0x0f, 0x1d,
+ 0xa4, 0xca, 0x0c, 0x03, 0xe7, 0x0f, 0x21, 0x04, 0xe3, 0xfc, 0x14, 0x40,
+ 0x0a, 0x29, 0x10, 0x00, 0xcd, 0x08, 0x0d, 0xd6, 0x12, 0xba, 0x39, 0xb6,
+ 0xff, 0xf2, 0xeb, 0x09, 0xfc, 0x24, 0x1c, 0xe7, 0x3f, 0x09, 0x03, 0xd5,
+ 0x4a, 0x10, 0xfd, 0xe2, 0xee, 0x87, 0x38, 0xf7, 0xe3, 0xc8, 0xf0, 0x37,
+ 0xee, 0xe5, 0x42, 0xe2, 0x3e, 0xde, 0x34, 0xa2, 0x16, 0x2f, 0x06, 0x0d,
+ 0x5c, 0x0c, 0x39, 0x19, 0x8a, 0x82, 0x01, 0x0f, 0xd5, 0xd4, 0x02, 0xef,
+ 0xe9, 0x0d, 0x1c, 0x26, 0x0b, 0x2c, 0xfc, 0x19, 0xe6, 0xf4, 0xf5, 0xed,
+ 0x1c, 0xc7, 0x36, 0xc0, 0x05, 0xe3, 0xeb, 0x04, 0xe0, 0x3b, 0xf5, 0x13,
+ 0xfc, 0x17, 0x24, 0x0c, 0xdb, 0x36, 0x58, 0xe2, 0xf6, 0x1e, 0xd8, 0x01,
+ 0xef, 0xf7, 0xe8, 0x44, 0x24, 0x3c, 0x1f, 0xfa, 0x02, 0x2a, 0xe8, 0x9e,
+ 0xf6, 0xe3, 0xe0, 0xe2, 0xfc, 0xfd, 0x24, 0x13, 0x03, 0x0d, 0x17, 0x2e,
+ 0x2c, 0x28, 0x1c, 0xdd, 0xd8, 0x19, 0x99, 0xee, 0x37, 0xa1, 0xc8, 0x20,
+ 0x0d, 0xf5, 0x19, 0xf3, 0xbe, 0xee, 0xc7, 0x8f, 0xf5, 0xd2, 0xf5, 0xa7,
+ 0xf4, 0x4e, 0xc6, 0x25, 0x09, 0xea, 0x0a, 0x08, 0xd7, 0x1c, 0x31, 0xde,
+ 0xe9, 0x0b, 0xd8, 0x0a, 0xe8, 0x0e, 0xe8, 0x2c, 0x17, 0x23, 0x17, 0xde,
+ 0x28, 0x23, 0xc4, 0xa6, 0x25, 0xf7, 0xe0, 0xcc, 0x63, 0x15, 0x1b, 0x29,
+ 0xb3, 0xce, 0xe5, 0xb5, 0x9d, 0xba, 0x39, 0xda, 0xcc, 0xde, 0x09, 0xce,
+ 0xcf, 0x44, 0xfc, 0xed, 0xe2, 0x18, 0x01, 0x2e, 0x16, 0xfa, 0xe1, 0xcc,
+ 0xf2, 0xc6, 0xae, 0xff, 0xd8, 0x22, 0x05, 0x18, 0x2a, 0x06, 0x0f, 0xa5,
+ 0x16, 0xfa, 0x0a, 0xfe, 0x98, 0x81, 0x4e, 0xbe, 0xda, 0xfa, 0x14, 0x48,
+ 0x4d, 0xdb, 0x56, 0x0a, 0x0c, 0xff, 0xd1, 0xc6, 0xf2, 0x2e, 0xed, 0x26,
+ 0x46, 0x10, 0x34, 0x04, 0xdb, 0xb3, 0xc0, 0xdb, 0xe8, 0xda, 0x26, 0xc3,
+ 0x84, 0xdc, 0x37, 0x20, 0xf8, 0x43, 0x0a, 0x1c, 0xf6, 0x18, 0x3c, 0x1a,
+ 0x1f, 0xfd, 0x2e, 0xf3, 0x1f, 0xed, 0xba, 0xec, 0xc0, 0x0c, 0x1c, 0x12,
+ 0xd4, 0xd0, 0xd8, 0xf1, 0xb5, 0x06, 0x20, 0xe3, 0xda, 0x11, 0xbf, 0xc8,
+ 0xdc, 0xd5, 0xff, 0xda, 0x1b, 0xdd, 0xf4, 0x0a, 0xdd, 0x12, 0xcd, 0xf3,
+ 0xfe, 0xfc, 0x00, 0xf4, 0xec, 0x2b, 0xec, 0x26, 0xbb, 0x0a, 0x33, 0xf1,
+ 0xa7, 0x25, 0x2e, 0xef, 0xec, 0x00, 0xd8, 0xe4, 0xfc, 0xee, 0x14, 0xe9,
+ 0x33, 0xf1, 0xd2, 0x0a, 0x00, 0x48, 0xed, 0xde, 0xee, 0xd8, 0x18, 0x0c,
+ 0xa7, 0x0f, 0x18, 0xf5, 0xf1, 0x07, 0x1e, 0xf4, 0xe6, 0x14, 0x4f, 0xf6,
+ 0x0c, 0x1a, 0xdb, 0xdb, 0x03, 0xbd, 0xec, 0xf1, 0x73, 0xe3, 0x08, 0x6a,
+ 0xe8, 0x08, 0xda, 0xe1, 0x0e, 0x08, 0x06, 0xf4, 0xb1, 0xf0, 0x16, 0x37,
+ 0xee, 0xe9, 0x47, 0xf1, 0xe4, 0x66, 0x29, 0xd5, 0xda, 0x0a, 0xba, 0x17,
+ 0x40, 0xc0, 0x02, 0xc5, 0x2b, 0x05, 0x08, 0xf6, 0xbf, 0x25, 0xdb, 0x1a,
+ 0xc6, 0xdb, 0xf7, 0xef, 0xd8, 0xf1, 0x0a, 0x47, 0xd4, 0xe9, 0x19, 0x15,
+ 0x9e, 0x52, 0x12, 0xe7, 0xd7, 0xd9, 0xcb, 0x23, 0x4e, 0xe3, 0xe2, 0xd6,
+ 0x26, 0xdf, 0x2c, 0x00, 0xc8, 0x59, 0xf0, 0xed, 0xd7, 0x04, 0xf4, 0xf5,
+ 0xb3, 0xdd, 0x18, 0x36, 0x05, 0x03, 0x30, 0xeb, 0xee, 0x4c, 0x62, 0xea,
+ 0xd3, 0x0a, 0xbe, 0x19, 0x3c, 0xd0, 0xf3, 0xca, 0x4a, 0xf7, 0x30, 0x36,
+ 0xe8, 0x44, 0xfd, 0xe6, 0x0c, 0xf1, 0xf7, 0xe1, 0xc8, 0x0b, 0xf2, 0xe4,
+ 0xb9, 0xd3, 0xbc, 0x13, 0xd7, 0x0a, 0x42, 0xe0, 0xc3, 0x06, 0xf4, 0x05,
+ 0xd6, 0xc6, 0xff, 0xae, 0x05, 0xe3, 0xe3, 0xf0, 0x12, 0xdc, 0x09, 0xc2,
+ 0xb1, 0xe0, 0x29, 0xf3, 0x0f, 0x02, 0xeb, 0x0c, 0xc9, 0xe4, 0xf2, 0xfb,
+ 0xe1, 0x10, 0x43, 0xf0, 0x07, 0xcd, 0x11, 0x41, 0x16, 0xe3, 0xcc, 0xff,
+ 0x2a, 0x0e, 0xee, 0x0a, 0x1b, 0x10, 0x45, 0xbb, 0x0b, 0xbe, 0xc9, 0xd1,
+ 0xf1, 0x1b, 0xf1, 0xfa, 0xcd, 0xc3, 0xfe, 0x05, 0xf7, 0xdc, 0x7f, 0xfc,
+ 0xf9, 0xdf, 0x00, 0x14, 0x03, 0xdd, 0xea, 0xd6, 0x6a, 0xfe, 0xd7, 0x74,
+ 0x32, 0xf1, 0x09, 0xba, 0x01, 0xe1, 0x0e, 0x0a, 0xe5, 0x05, 0xda, 0x08,
+ 0x19, 0x2e, 0xf6, 0x1f, 0x25, 0xf8, 0xe1, 0x0f, 0x38, 0x13, 0x11, 0xd4,
+ 0xd3, 0x10, 0x0e, 0x33, 0xe1, 0x12, 0xf8, 0xed, 0xf0, 0xe6, 0xc2, 0x06,
+ 0x09, 0x04, 0xfc, 0x06, 0xf3, 0xf7, 0xf3, 0x07, 0x3c, 0x1a, 0xe7, 0x20,
+ 0xec, 0xd7, 0xe2, 0x17, 0xff, 0x18, 0xf6, 0xed, 0xf5, 0x08, 0x32, 0x1b,
+ 0xdc, 0x08, 0xf9, 0xf3, 0xcb, 0xff, 0xd4, 0x27, 0xfc, 0x0b, 0x0f, 0x29,
+ 0xe2, 0xfe, 0xe3, 0xee, 0x20, 0x24, 0x05, 0x0b, 0x1e, 0xfa, 0xe8, 0x1a,
+ 0x24, 0x07, 0xfc, 0xe8, 0xe3, 0x17, 0xfb, 0x1d, 0xea, 0x1d, 0xfb, 0xf3,
+ 0xf9, 0xf0, 0xea, 0x17, 0x0d, 0x05, 0xf5, 0x06, 0xdf, 0xd8, 0xde, 0x1a,
+ 0x01, 0xff, 0xda, 0x00, 0x19, 0xe2, 0xd6, 0x06, 0x48, 0xfd, 0x1b, 0xec,
+ 0xc7, 0xf3, 0x12, 0x12, 0xee, 0xfd, 0xde, 0xf5, 0xf6, 0xe0, 0xe9, 0x20,
+ 0x28, 0xf6, 0xf6, 0x16, 0x21, 0xf9, 0xd6, 0xf3, 0x0a, 0xe8, 0xd1, 0x18,
+ 0x17, 0xe0, 0xc6, 0x06, 0x08, 0x04, 0xf4, 0xef, 0xe0, 0x31, 0x7f, 0xf7,
+ 0xe5, 0x10, 0xe1, 0xf0, 0x06, 0xe3, 0x0d, 0x1a, 0x19, 0xfa, 0x41, 0x54,
+ 0xf7, 0xe6, 0xec, 0x15, 0x0e, 0x07, 0xd9, 0x0a, 0x1d, 0xdb, 0xd2, 0x04,
+ 0x27, 0xf9, 0x15, 0x07, 0xe8, 0x10, 0x1e, 0x0a, 0xed, 0x10, 0xe8, 0x08,
+ 0x06, 0xdc, 0xf3, 0x12, 0x1f, 0xeb, 0x07, 0x26, 0x03, 0xf0, 0xe3, 0x00,
+ 0xf2, 0xf7, 0xca, 0x1c, 0x01, 0x01, 0xe7, 0xfc, 0x41, 0x13, 0x09, 0xeb,
+ 0xda, 0xd6, 0x05, 0x10, 0xc1, 0xee, 0xc9, 0x04, 0xfc, 0xd2, 0xf6, 0xf2,
+ 0x07, 0xd1, 0xd5, 0xeb, 0xf0, 0x0b, 0xf0, 0xf2, 0x2c, 0x16, 0xef, 0x27,
+ 0xeb, 0xaa, 0xc9, 0xff, 0x0e, 0x29, 0x03, 0xf8, 0x07, 0xdf, 0x34, 0x1e,
+ 0xbb, 0xfb, 0xbc, 0xe0, 0xeb, 0xdd, 0xf5, 0xcb, 0xe8, 0xf0, 0x16, 0x34,
+ 0xee, 0xfe, 0xe9, 0xe5, 0xf9, 0x05, 0x10, 0x18, 0x0a, 0xf6, 0xc4, 0x01,
+ 0x2e, 0x05, 0xfb, 0xf8, 0xee, 0xeb, 0xf7, 0x1a, 0xbf, 0x1c, 0xbc, 0xf4,
+ 0xf1, 0xd2, 0xe1, 0xf8, 0x07, 0xd8, 0xea, 0x05, 0xec, 0xd3, 0xca, 0x05,
+ 0xed, 0xed, 0xa3, 0x3a, 0xf9, 0xc0, 0x06, 0xd9, 0xec, 0x15, 0xe1, 0xe2,
+ 0xfc, 0xee, 0x23, 0xe5, 0xde, 0xdc, 0xee, 0xf8, 0x1e, 0xf3, 0x1a, 0x17,
+ 0xe0, 0xd4, 0x2e, 0xfd, 0x25, 0xc3, 0x81, 0x1e, 0xa3, 0x4d, 0x06, 0xd2,
+ 0x04, 0x05, 0x17, 0xea, 0x12, 0xaa, 0x1d, 0x05, 0xd3, 0x51, 0xf0, 0xe2,
+ 0x13, 0xeb, 0xc4, 0x08, 0x3a, 0xb9, 0x19, 0x27, 0xf4, 0xbd, 0xe8, 0x0d,
+ 0xdd, 0xf5, 0xaf, 0x18, 0xd2, 0x0b, 0xd3, 0x1b, 0x13, 0xca, 0xfe, 0xeb,
+ 0xe6, 0x25, 0xff, 0x07, 0x23, 0xcb, 0x04, 0x1a, 0xe6, 0xf6, 0xbb, 0x10,
+ 0x09, 0xb6, 0x12, 0xbe, 0x00, 0x36, 0x11, 0x07, 0x19, 0x16, 0xf4, 0xf3,
+ 0xe3, 0xee, 0x27, 0xe3, 0x2e, 0x2d, 0x0f, 0x4f, 0xd6, 0x01, 0x25, 0x23,
+ 0x3e, 0xb7, 0x2d, 0x1d, 0xe9, 0x1e, 0xf0, 0xea, 0xff, 0xe5, 0x08, 0x0e,
+ 0xe2, 0xe4, 0xe8, 0x0a, 0x14, 0x41, 0x2e, 0x4e, 0x30, 0x10, 0xe8, 0x3c,
+ 0xb8, 0x06, 0x1c, 0x36, 0xda, 0xc2, 0x0b, 0x55, 0x72, 0xed, 0xc4, 0xf6,
+ 0xf8, 0x2e, 0x01, 0xfd, 0x12, 0xf2, 0x18, 0xf7, 0xf4, 0xe0, 0x90, 0x06,
+ 0x1a, 0x1b, 0x12, 0xe3, 0xbe, 0xf4, 0x2d, 0xe4, 0x49, 0x20, 0x19, 0x5c,
+ 0xcd, 0xd3, 0xfa, 0x12, 0x36, 0xe5, 0x0c, 0x1d, 0x0a, 0x02, 0xe2, 0x0a,
+ 0xf9, 0xd9, 0x0c, 0x0e, 0xdb, 0xf0, 0xed, 0x01, 0xfa, 0xe3, 0xea, 0x08,
+ 0xf8, 0x0c, 0xcc, 0x41, 0x01, 0xbd, 0xf9, 0xae, 0xd9, 0x17, 0xeb, 0x27,
+ 0x34, 0xf8, 0x47, 0xf3, 0xd6, 0xcf, 0xf6, 0x10, 0x25, 0xf5, 0x25, 0x1d,
+ 0xf4, 0x0c, 0x31, 0x04, 0x21, 0xac, 0xcf, 0x14, 0xcf, 0x2f, 0x01, 0xd6,
+ 0x10, 0xff, 0xf7, 0xce, 0x0e, 0xaa, 0x04, 0xd2, 0xd2, 0x34, 0x0a, 0xdb,
+ 0x3a, 0xce, 0xde, 0x2b, 0x3f, 0xd0, 0xdf, 0x24, 0xf1, 0x0d, 0x15, 0x10,
+ 0xdf, 0xe3, 0xf2, 0x09, 0xf8, 0x1e, 0xeb, 0x17, 0x2d, 0xd9, 0x1c, 0xe1,
+ 0xf1, 0x05, 0xf0, 0xef, 0xf3, 0xe0, 0x1a, 0x16, 0xf2, 0xbd, 0xe6, 0x4d,
+ 0x0e, 0xca, 0xfd, 0xfb, 0x1e, 0x25, 0x3a, 0xea, 0x34, 0xd4, 0xed, 0x04,
+ 0xe2, 0x56, 0xfa, 0x07, 0x3a, 0xf8, 0x1b, 0xf7, 0xd6, 0x14, 0x19, 0xe6,
+ 0xfa, 0x35, 0x44, 0x06, 0xe7, 0xf4, 0x44, 0xd5, 0x24, 0xd9, 0x15, 0xc4,
+ 0xf3, 0x07, 0xed, 0x18, 0xff, 0xd5, 0xe6, 0x0d, 0x17, 0x09, 0xe3, 0x22,
+ 0x09, 0xcb, 0xe9, 0xe2, 0xf0, 0xa6, 0xa3, 0x01, 0xf7, 0x04, 0xcf, 0x43,
+ 0xe7, 0x17, 0x1e, 0xf2, 0x00, 0xcd, 0xfa, 0xda, 0xdd, 0xe3, 0xfb, 0xf0,
+ 0xf4, 0xef, 0xcb, 0xf3, 0x17, 0x22, 0x06, 0xef, 0x67, 0xeb, 0x0b, 0xf3,
+ 0xf2, 0x38, 0xeb, 0xef, 0xe9, 0x0d, 0x13, 0x01, 0xe6, 0xe8, 0x1d, 0xdb,
+ 0x24, 0xfd, 0x15, 0xd0, 0x17, 0x2c, 0xee, 0x18, 0x0c, 0xf5, 0x0f, 0xc5,
+ 0x04, 0x26, 0xf1, 0x0d, 0x3e, 0x0a, 0xec, 0x09, 0xb3, 0x0d, 0x3a, 0xd3,
+ 0xc7, 0x63, 0x3b, 0xf9, 0xe5, 0xdc, 0xfa, 0x07, 0x9b, 0xed, 0xc1, 0x2e,
+ 0x20, 0x03, 0x04, 0x30, 0x00, 0x05, 0xce, 0xd4, 0x18, 0xdf, 0xf4, 0xde,
+ 0xd6, 0xf3, 0x12, 0xef, 0xcf, 0xd9, 0xcd, 0xe6, 0xe0, 0x02, 0xaf, 0x5d,
+ 0xf5, 0xb6, 0xf7, 0x04, 0x3b, 0xf2, 0x1e, 0xea, 0xe0, 0xc7, 0xef, 0xee,
+ 0x21, 0xd8, 0xf3, 0x99, 0x10, 0x2b, 0x1b, 0xce, 0x3c, 0x00, 0xe7, 0x29,
+ 0xcc, 0xfe, 0x11, 0xda, 0xbd, 0x29, 0x79, 0xdc, 0x06, 0xd5, 0xeb, 0xfc,
+ 0xe5, 0xe3, 0xbc, 0x0c, 0x2a, 0xff, 0xfe, 0x18, 0x28, 0xf4, 0xd7, 0x02,
+ 0x0d, 0x20, 0x18, 0x2e, 0x2e, 0xee, 0xcc, 0x0d, 0xe2, 0x1b, 0x1f, 0xb9,
+ 0xdf, 0x14, 0x17, 0x22, 0xe0, 0xfe, 0x2b, 0xf4, 0xf5, 0x1f, 0xbb, 0x05,
+ 0x12, 0x04, 0x0b, 0x1a, 0x04, 0xb7, 0xc6, 0x04, 0x0c, 0x04, 0xf4, 0x0c,
+ 0x03, 0xcb, 0xc1, 0xdd, 0xf0, 0x81, 0xeb, 0xf6, 0x03, 0x38, 0xbb, 0x30,
+ 0x08, 0x12, 0x09, 0x16, 0xcc, 0xcb, 0xef, 0x09, 0x17, 0xc4, 0xd5, 0xdc,
+ 0xfe, 0xd3, 0xb2, 0xfd, 0x23, 0x20, 0x17, 0x11, 0x3a, 0xf1, 0x03, 0xe3,
+ 0xf4, 0x06, 0xfc, 0xf9, 0xf6, 0x0c, 0x21, 0x06, 0xd6, 0xf5, 0x0d, 0xf3,
+ 0x2f, 0x1d, 0xfd, 0xef, 0xfb, 0x1e, 0x17, 0x0d, 0x08, 0xce, 0x20, 0x1a,
+ 0x0f, 0x11, 0xf4, 0xe6, 0xf6, 0xf0, 0x1b, 0x24, 0xdb, 0x26, 0xfd, 0x04,
+ 0x07, 0x07, 0x0c, 0xd3, 0x30, 0x02, 0x22, 0x03, 0x11, 0x37, 0xf7, 0x17,
+ 0x01, 0x0b, 0xe1, 0xf7, 0xfd, 0xb9, 0x2f, 0x19, 0x29, 0x01, 0x23, 0x09,
+ 0x13, 0x25, 0x4b, 0x12, 0x96, 0x2e, 0xba, 0x00, 0xeb, 0xe2, 0xdd, 0x1d,
+ 0x1c, 0x0c, 0x3c, 0xf6, 0xda, 0xe1, 0xfb, 0x29, 0xe4, 0xf7, 0xda, 0xa5,
+ 0xea, 0xdc, 0x05, 0x1a, 0x42, 0x2d, 0x37, 0xdf, 0x0e, 0xfd, 0x08, 0x36,
+ 0xb4, 0xf9, 0xe6, 0x17, 0x06, 0xff, 0xf5, 0xfb, 0x35, 0xec, 0x22, 0xe9,
+ 0xf4, 0x3d, 0xdb, 0x12, 0xfd, 0x17, 0x22, 0xe1, 0x35, 0xd4, 0x3f, 0x99,
+ 0x0b, 0x1d, 0x07, 0xf6, 0xf9, 0x00, 0x10, 0xf2, 0xc9, 0x22, 0x89, 0xe8,
+ 0xc4, 0x0d, 0xbc, 0xe6, 0x1e, 0xeb, 0x0c, 0xf8, 0x0f, 0x02, 0x0c, 0xdc,
+ 0x0b, 0x31, 0xf2, 0xe7, 0xb3, 0xfc, 0x17, 0xcc, 0x1f, 0x1a, 0xf1, 0xce,
+ 0x35, 0xfb, 0x61, 0xdd, 0xc9, 0x26, 0x21, 0x81, 0xd1, 0xe9, 0xe4, 0x0b,
+ 0xd9, 0xcf, 0x17, 0xf4, 0xca, 0x08, 0xd6, 0xfc, 0xe2, 0x39, 0x1f, 0xc7,
+ 0x25, 0xce, 0x16, 0xf3, 0x2f, 0x18, 0x05, 0x01, 0xe6, 0xfd, 0xf6, 0x02,
+ 0xbb, 0xff, 0xfc, 0xe4, 0xde, 0x02, 0xe9, 0x03, 0x04, 0xf4, 0x30, 0xf5,
+ 0xee, 0x25, 0x04, 0xe9, 0x06, 0x26, 0xf3, 0xd5, 0x37, 0xef, 0x3c, 0x2a,
+ 0x15, 0x03, 0xe7, 0xec, 0x04, 0xbb, 0x0a, 0x01, 0xfd, 0x04, 0xfa, 0x13,
+ 0x15, 0x19, 0xf7, 0xce, 0x33, 0xed, 0x2e, 0x07, 0xfb, 0x3c, 0x14, 0x28,
+ 0x28, 0x0b, 0x0f, 0x05, 0xd3, 0xc5, 0x1e, 0x18, 0x18, 0x06, 0x2d, 0xbd,
+ 0x2c, 0x2a, 0x28, 0xdf, 0xf4, 0x4c, 0xba, 0xe4, 0x9c, 0xff, 0x02, 0xdf,
+ 0x0b, 0xbb, 0x47, 0xcb, 0x12, 0xfd, 0xfb, 0x4c, 0xf9, 0x1b, 0x2f, 0xa6,
+ 0x17, 0xdb, 0x10, 0x2a, 0x3a, 0xe5, 0x14, 0xf0, 0x0c, 0xec, 0xf2, 0x14,
+ 0xb8, 0x07, 0xef, 0x10, 0x15, 0x23, 0x0d, 0xcd, 0x3e, 0xda, 0x21, 0xd4,
+ 0xf8, 0x49, 0xfc, 0x20, 0x45, 0x46, 0x25, 0xe4, 0xc5, 0x17, 0x0c, 0x0f,
+ 0xf8, 0xea, 0xfa, 0xe3, 0xce, 0x03, 0x0e, 0xf1, 0xe6, 0x13, 0xc7, 0xf7,
+ 0x04, 0xe3, 0xf2, 0xd7, 0x22, 0xe9, 0xfd, 0x0e, 0xdd, 0x2d, 0xda, 0xf4,
+ 0x18, 0x0e, 0x17, 0xf7, 0xf7, 0x49, 0x00, 0x0e, 0xbc, 0xfe, 0x09, 0xf4,
+ 0xb8, 0x3c, 0x41, 0xe2, 0xee, 0x05, 0x99, 0xfd, 0x05, 0xf9, 0xe8, 0xfd,
+ 0x1e, 0xe9, 0xe9, 0x0a, 0xf9, 0x3d, 0xec, 0xe5, 0x0c, 0xde, 0x12, 0xb4,
+ 0xd0, 0x1f, 0x1b, 0x05, 0x0a, 0xfa, 0x2f, 0xe3, 0xe6, 0x27, 0x51, 0xfe,
+ 0xff, 0x0b, 0xe6, 0xdb, 0xf4, 0xd7, 0xee, 0xe5, 0x6c, 0xf7, 0x0f, 0x2c,
+ 0xea, 0x1f, 0xee, 0xef, 0x18, 0x09, 0x08, 0x03, 0xd3, 0xf9, 0x23, 0x39,
+ 0xfa, 0xe9, 0x40, 0x02, 0xe9, 0x48, 0x43, 0xd5, 0xc0, 0x07, 0xda, 0x23,
+ 0x3c, 0xfa, 0x16, 0xe2, 0x2b, 0xf2, 0x31, 0xf4, 0xb8, 0x4b, 0xcf, 0xed,
+ 0x00, 0xe0, 0xf2, 0xe5, 0xce, 0x04, 0x0a, 0x2f, 0xe3, 0xeb, 0x18, 0x13,
+ 0xcf, 0x4d, 0x0c, 0xd5, 0xd8, 0xeb, 0xa4, 0x2c, 0x18, 0xd0, 0xe0, 0xed,
+ 0x29, 0xc4, 0x3f, 0x07, 0xe7, 0x5e, 0xd2, 0xe3, 0xe0, 0xeb, 0x06, 0xd3,
+ 0xce, 0x1a, 0x0e, 0x3e, 0x03, 0xfc, 0xf1, 0x01, 0x03, 0x43, 0x5e, 0xe5,
+ 0xe3, 0x03, 0xb3, 0x0c, 0xed, 0xe4, 0x02, 0xf7, 0x62, 0xfb, 0x3e, 0x56,
+ 0xea, 0x4c, 0xda, 0xe8, 0x16, 0xeb, 0x04, 0xe8, 0xcd, 0x1f, 0xd2, 0xde,
+ 0xb9, 0xc1, 0xcb, 0x18, 0xbd, 0x02, 0x1a, 0xe7, 0xbd, 0xe7, 0xbc, 0xdc,
+ 0xd6, 0xd6, 0x00, 0xd8, 0x12, 0xc8, 0xd9, 0x04, 0xb1, 0xe8, 0xe1, 0xca,
+ 0xc6, 0xe8, 0x18, 0x0c, 0xe2, 0x31, 0x05, 0x04, 0xe8, 0xe9, 0x02, 0xd5,
+ 0xe0, 0x22, 0x47, 0xed, 0x1a, 0xb8, 0xef, 0x05, 0x01, 0xe6, 0xcc, 0xea,
+ 0x2a, 0x06, 0x05, 0x1e, 0xd5, 0x32, 0xdb, 0xe4, 0x10, 0xba, 0xdc, 0xdb,
+ 0x1d, 0x2f, 0xe1, 0xfe, 0xc2, 0xc6, 0xe2, 0xda, 0xd3, 0x08, 0x7b, 0xeb,
+ 0xe5, 0xe4, 0xc2, 0xe7, 0xc6, 0xdd, 0xd4, 0xf9, 0x7f, 0xe0, 0xeb, 0x60,
+ 0xf2, 0xee, 0xd8, 0xbb, 0x05, 0xd0, 0xf1, 0xea, 0x30, 0xb1, 0x05, 0xf8,
+ 0xfb, 0x20, 0x42, 0xe5, 0x20, 0x06, 0x27, 0x0b, 0xa7, 0x2f, 0x13, 0xfa,
+ 0x0d, 0x2b, 0x04, 0x30, 0xcf, 0x05, 0x2b, 0xe1, 0x2b, 0xf8, 0x03, 0x02,
+ 0xf6, 0xfc, 0xe9, 0xe8, 0xfb, 0xd3, 0xef, 0xf2, 0x40, 0x12, 0xf1, 0x31,
+ 0x0b, 0xe4, 0xf8, 0xda, 0xad, 0xf4, 0x8f, 0x07, 0xf4, 0xcb, 0xde, 0x3d,
+ 0xda, 0x24, 0x39, 0xd0, 0x1a, 0xc6, 0xfe, 0xc8, 0xee, 0xe5, 0x04, 0xd5,
+ 0x18, 0xc7, 0xdd, 0x04, 0x2f, 0x2c, 0x05, 0xaa, 0x44, 0xed, 0x1b, 0x0c,
+ 0xd1, 0x01, 0x0b, 0xfd, 0x09, 0x16, 0xd8, 0xf4, 0xf4, 0xeb, 0x1e, 0xe8,
+ 0x32, 0xf4, 0x20, 0xff, 0x06, 0x16, 0xfb, 0xdb, 0x10, 0xf5, 0x0b, 0xb8,
+ 0x40, 0xf9, 0xcb, 0x17, 0x07, 0xe9, 0xdf, 0xe6, 0xba, 0x31, 0xea, 0xd0,
+ 0xc0, 0x60, 0x41, 0xd1, 0xe7, 0xdd, 0xee, 0xf9, 0xa2, 0xe4, 0x88, 0x4b,
+ 0x19, 0x41, 0x21, 0x26, 0x07, 0x01, 0xe9, 0xae, 0x05, 0xe6, 0x19, 0xe6,
+ 0x02, 0xdf, 0x08, 0xe4, 0xd3, 0xd0, 0xad, 0xb6, 0xc3, 0x39, 0xba, 0x2a,
+ 0xed, 0x81, 0x0b, 0xf9, 0x39, 0xec, 0xf4, 0x18, 0xfd, 0x07, 0x07, 0xea,
+ 0x20, 0xed, 0xff, 0xdd, 0x2e, 0x21, 0xd5, 0xc6, 0x14, 0xf0, 0xeb, 0xea,
+ 0xb2, 0xec, 0xcf, 0xf2, 0xcb, 0x47, 0xfe, 0xe0, 0xff, 0xcf, 0xf0, 0x02,
+ 0x12, 0xea, 0xce, 0x39, 0x39, 0x39, 0x13, 0xd4, 0x2d, 0xef, 0xc3, 0x0e,
+ 0x19, 0x25, 0x50, 0x19, 0x23, 0x29, 0xda, 0x02, 0xe9, 0x3d, 0x30, 0xf3,
+ 0x01, 0x27, 0x07, 0x2b, 0xea, 0x11, 0x21, 0xbc, 0x2b, 0x1d, 0xec, 0xee,
+ 0xf9, 0xff, 0xe1, 0x0a, 0xea, 0xa7, 0xd7, 0x20, 0x4f, 0x11, 0x04, 0x3d,
+ 0x26, 0xd6, 0xd7, 0xd7, 0xf1, 0x97, 0xd2, 0x1e, 0x0e, 0xd6, 0xcf, 0x52,
+ 0xf2, 0x2c, 0x15, 0xe2, 0x10, 0xe1, 0xf0, 0xe0, 0x0b, 0xe9, 0xdd, 0xd0,
+ 0x07, 0xcf, 0x97, 0xfc, 0x2e, 0x11, 0x0f, 0xf4, 0x2c, 0x16, 0x11, 0x0c,
+ 0xf8, 0xcd, 0x01, 0xfd, 0x13, 0x07, 0xe0, 0xfb, 0x27, 0xff, 0x05, 0xf2,
+ 0x16, 0x13, 0x10, 0xf3, 0xff, 0x0f, 0xe3, 0xe0, 0x35, 0x0a, 0x25, 0x06,
+ 0x0c, 0xfc, 0xef, 0xf6, 0x00, 0xd1, 0xf5, 0x16, 0xdf, 0xef, 0x0b, 0x24,
+ 0x0a, 0x23, 0xff, 0xfe, 0xdc, 0x10, 0x37, 0xcf, 0x00, 0x0b, 0x15, 0xf9,
+ 0x05, 0x07, 0x00, 0x01, 0x11, 0xff, 0x22, 0xf9, 0x3a, 0xda, 0x11, 0xdc,
+ 0x29, 0x26, 0xf9, 0xfb, 0x04, 0x8e, 0x21, 0xdd, 0xea, 0x3c, 0xea, 0x18,
+ 0xf0, 0xf5, 0x59, 0xd5, 0xee, 0xc5, 0x0e, 0x28, 0x14, 0x11, 0xe7, 0xfc,
+ 0x3e, 0x08, 0xf0, 0x16, 0xf5, 0xed, 0xcb, 0x08, 0xf7, 0xa4, 0xd9, 0xf5,
+ 0xdc, 0xe6, 0x12, 0x29, 0x23, 0x2d, 0x00, 0x14, 0x95, 0xdd, 0x15, 0xed,
+ 0x16, 0x01, 0x30, 0xcb, 0xf6, 0xf5, 0x0f, 0x0a, 0x4e, 0x28, 0x1a, 0x0f,
+ 0xf3, 0x2d, 0x23, 0xeb, 0xfa, 0x10, 0x3a, 0x06, 0xe2, 0xef, 0x2b, 0x1b,
+ 0xfc, 0xcb, 0xd5, 0x1a, 0x22, 0xfb, 0x31, 0xfa, 0xf5, 0x36, 0x43, 0x90,
+ 0xda, 0xf2, 0xd5, 0xee, 0xf6, 0x06, 0x35, 0x11, 0x03, 0x14, 0xde, 0x2e,
+ 0x38, 0x1d, 0x67, 0xdd, 0xbc, 0x07, 0x54, 0x19, 0x43, 0xcc, 0xe2, 0x11,
+ 0xed, 0x15, 0x35, 0xf9, 0xd7, 0x0c, 0x39, 0xb0, 0xe4, 0x03, 0xdc, 0xaf,
+ 0x79, 0x20, 0x10, 0x25, 0xd9, 0xed, 0x14, 0xfd, 0x1e, 0x17, 0x37, 0x13,
+ 0xe0, 0xef, 0x21, 0x24, 0x05, 0xec, 0xdf, 0x2d, 0x2d, 0xed, 0x2d, 0xe0,
+ 0xc9, 0x27, 0x7f, 0xa1, 0x02, 0xdb, 0xdb, 0xee, 0x37, 0xcf, 0x19, 0x1b,
+ 0x08, 0xd1, 0xd2, 0xc6, 0xf0, 0xa9, 0x01, 0xd2, 0xe9, 0x07, 0x1b, 0x00,
+ 0xf5, 0x30, 0x0b, 0xb8, 0xde, 0xff, 0x32, 0x0b, 0x0e, 0xe8, 0xf4, 0x01,
+ 0x1a, 0xe9, 0x18, 0xfd, 0xc6, 0x14, 0xcf, 0xf9, 0x0a, 0xdb, 0xfe, 0xc4,
+ 0x04, 0xf3, 0xda, 0xec, 0xba, 0xbb, 0x10, 0xe1, 0xa4, 0x3d, 0x08, 0xf1,
+ 0x18, 0xb8, 0x76, 0x0f, 0xb8, 0xb0, 0xe8, 0x47, 0x12, 0x24, 0x36, 0x08,
+ 0x60, 0xfe, 0x1c, 0x09, 0x08, 0xd7, 0xda, 0xf0, 0xea, 0xbd, 0xec, 0xf5,
+ 0xa1, 0x0d, 0xf9, 0x25, 0x15, 0x1d, 0x05, 0xdd, 0xd0, 0xf4, 0x3a, 0xf4,
+ 0xf0, 0xf9, 0x06, 0x0c, 0x22, 0x06, 0xf5, 0xe8, 0x2d, 0xe3, 0x01, 0xdd,
+ 0xfe, 0x4e, 0xfd, 0x13, 0xf0, 0xf7, 0xf5, 0x01, 0x01, 0x3c, 0x0d, 0xf2,
+ 0xfa, 0x0d, 0x0f, 0x07, 0xd9, 0xf2, 0xf8, 0xe2, 0x0f, 0xe1, 0x07, 0x03,
+ 0xf0, 0x05, 0x0d, 0x19, 0x16, 0x07, 0x08, 0xc6, 0x18, 0x33, 0xf1, 0xfd,
+ 0x05, 0xfd, 0xeb, 0xd9, 0x11, 0xda, 0xdb, 0xcf, 0xc2, 0x0d, 0xbf, 0x27,
+ 0xd4, 0xcf, 0x43, 0xed, 0x13, 0xe2, 0x0e, 0x14, 0xf7, 0xea, 0xfd, 0xc7,
+ 0x05, 0x11, 0xcc, 0xef, 0x0e, 0xfd, 0xfa, 0x17, 0x19, 0xfa, 0xfc, 0x00,
+ 0xf5, 0x33, 0xf4, 0xfb, 0xf4, 0x10, 0x0e, 0x40, 0xd0, 0xdf, 0x07, 0xd2,
+ 0x12, 0xc5, 0x03, 0xe2, 0x06, 0x21, 0x17, 0x28, 0x30, 0x2b, 0xdb, 0x23,
+ 0xf7, 0x0f, 0xe4, 0x14, 0x21, 0xf9, 0xe9, 0x09, 0x05, 0x03, 0x40, 0xf0,
+ 0xbd, 0x5e, 0x47, 0xfc, 0x00, 0x4a, 0xd6, 0xfd, 0x05, 0xeb, 0xff, 0x24,
+ 0xec, 0xe7, 0x07, 0x09, 0xf9, 0xe3, 0xf5, 0x2c, 0xf8, 0xe2, 0x0d, 0x0b,
+ 0xdc, 0x0f, 0x09, 0xc6, 0x18, 0x00, 0x02, 0xfa, 0x03, 0x04, 0x05, 0x1b,
+ 0xfc, 0x0d, 0x06, 0xf7, 0xc3, 0xf6, 0xf1, 0x06, 0xfa, 0xbc, 0xdf, 0xfe,
+ 0x43, 0x2a, 0xf1, 0x13, 0xf8, 0x21, 0xf7, 0x1f, 0x29, 0xff, 0x11, 0xfd,
+ 0x11, 0xf8, 0x47, 0xe2, 0xbc, 0x2e, 0x58, 0xf6, 0x0c, 0x30, 0xfc, 0xec,
+ 0x16, 0xf4, 0x1b, 0xf8, 0x16, 0xe6, 0xfa, 0x27, 0x07, 0x18, 0x19, 0xdd,
+ 0x0a, 0x41, 0xf9, 0x1c, 0xdd, 0xc2, 0xe1, 0xd1, 0x02, 0x35, 0x1d, 0xd5,
+ 0xe5, 0x2d, 0xff, 0x26, 0xd0, 0xec, 0x05, 0x08, 0xeb, 0xc2, 0xf4, 0xf9,
+ 0xf5, 0xcc, 0xea, 0x25, 0x11, 0x13, 0xff, 0xc2, 0x41, 0x30, 0xda, 0xf3,
+ 0xfe, 0xd0, 0xd1, 0xb5, 0xf7, 0x81, 0xcb, 0xc6, 0xdd, 0x32, 0xb5, 0x3f,
+ 0xca, 0xc9, 0x1a, 0x02, 0xf6, 0xea, 0xe1, 0x3c, 0x0d, 0xcb, 0xe1, 0xcb,
+ 0x03, 0x2b, 0xf4, 0xeb, 0xf7, 0x21, 0xd9, 0x27, 0x09, 0xca, 0xf9, 0xe7,
+ 0xf5, 0x55, 0x14, 0xf1, 0x0d, 0x15, 0x1c, 0x2a, 0xd1, 0xe1, 0x07, 0xe1,
+ 0x0e, 0xc7, 0xf9, 0xed, 0xed, 0xef, 0xf6, 0x37, 0xea, 0x02, 0xaf, 0x1c,
+ 0x3c, 0x18, 0xe1, 0x13, 0x35, 0xe1, 0x07, 0x0b, 0x3b, 0x30, 0x0f, 0xfc,
+ 0xea, 0xee, 0x04, 0x26, 0xe5, 0x2b, 0xfd, 0xd2, 0x1c, 0xe2, 0x12, 0xd9,
+ 0xe6, 0x00, 0xfa, 0xf9, 0xf3, 0xe7, 0xab, 0x0c, 0x02, 0x14, 0x15, 0x34,
+ 0x0a, 0xed, 0xdf, 0x12, 0xf0, 0x10, 0xcc, 0x0e, 0xda, 0xf3, 0x3e, 0x11,
+ 0xd6, 0x20, 0xcb, 0xf0, 0x2a, 0xed, 0x03, 0xfc, 0xe1, 0x2a, 0x35, 0x3a,
+ 0xe6, 0xfb, 0xca, 0x01, 0x3b, 0x1e, 0xd3, 0x16, 0x36, 0xe6, 0x12, 0x1c,
+ 0x30, 0x0e, 0x0b, 0xf8, 0xfe, 0xf7, 0xf4, 0x00, 0xec, 0x20, 0x08, 0xf7,
+ 0x24, 0xe4, 0x05, 0x07, 0xf4, 0xfa, 0x08, 0x1f, 0xc8, 0xed, 0xe9, 0x41,
+ 0x05, 0xf4, 0xbc, 0x1b, 0x2a, 0xee, 0xad, 0xd9, 0x4e, 0x22, 0x0d, 0xa0,
+ 0xb6, 0x47, 0x39, 0xd5, 0xed, 0xf6, 0xaa, 0x03, 0x15, 0xeb, 0x9c, 0x76,
+ 0x2c, 0xd6, 0x01, 0x0c, 0xea, 0x36, 0xd9, 0x27, 0xfa, 0x9a, 0xce, 0xef,
+ 0x03, 0xf7, 0xda, 0xf5, 0xdf, 0xeb, 0xde, 0xf5, 0xf3, 0x3c, 0x7e, 0xe2,
+ 0xf8, 0xfd, 0xca, 0xf5, 0x15, 0xd1, 0x18, 0x1a, 0x16, 0xef, 0x45, 0x7f,
+ 0xd3, 0xdf, 0x02, 0x0d, 0x02, 0xf1, 0xeb, 0xfb, 0x29, 0xe0, 0xcc, 0xeb,
+ 0x26, 0xfc, 0xf2, 0x0f, 0xf1, 0x12, 0x27, 0xda, 0xe6, 0x12, 0xa5, 0x13,
+ 0x46, 0xb2, 0xef, 0x4d, 0xf7, 0xc4, 0xe1, 0x10, 0xb4, 0xdd, 0xea, 0x27,
+ 0x00, 0x34, 0xf1, 0x2e, 0x0e, 0xeb, 0xac, 0xd3, 0x1e, 0x3a, 0xdc, 0xf9,
+ 0xed, 0xc4, 0x1b, 0x22, 0xeb, 0x19, 0xdd, 0xcf, 0x5b, 0x60, 0xd8, 0xbb,
+ 0xe9, 0xe2, 0xfd, 0xfe, 0xdb, 0xe8, 0xca, 0x24, 0xd1, 0xfc, 0xfc, 0x4e,
+ 0x10, 0xf5, 0xa2, 0xe0, 0x07, 0x7f, 0xa5, 0x3f, 0xe9, 0xb6, 0x46, 0xf0,
+ 0xe8, 0x10, 0x93, 0xd4, 0x16, 0xfd, 0x1a, 0xa6, 0x0b, 0x05, 0x22, 0x1a,
+ 0xe3, 0xe5, 0xca, 0x08, 0x2f, 0x35, 0xe4, 0x1c, 0x2c, 0xd8, 0x24, 0xe7,
+ 0x29, 0x07, 0xf8, 0x0c, 0xf6, 0xc6, 0x01, 0xfa, 0xa4, 0x17, 0xf3, 0xef,
+ 0x4a, 0x1e, 0x1b, 0xd2, 0xf5, 0xeb, 0x11, 0xea, 0xf4, 0x13, 0x22, 0xf8,
+ 0x10, 0x22, 0xf3, 0x35, 0x0f, 0xe7, 0xb8, 0x0c, 0x3f, 0x25, 0xf5, 0xc0,
+ 0xe2, 0xf3, 0x1a, 0x1e, 0xe8, 0x12, 0xf7, 0x02, 0xcd, 0xec, 0x9d, 0x10,
+ 0x0e, 0xfa, 0x10, 0x1b, 0xda, 0xfb, 0xe8, 0xf1, 0x08, 0x1c, 0xf7, 0x26,
+ 0xdc, 0xf4, 0xa2, 0x1c, 0x0a, 0x33, 0xf9, 0xad, 0xb0, 0x4c, 0x22, 0xed,
+ 0xd5, 0x01, 0xf5, 0xeb, 0xa3, 0xdc, 0xa9, 0x5f, 0xea, 0x1c, 0x46, 0x19,
+ 0x00, 0x0f, 0x0d, 0x04, 0x08, 0x14, 0xef, 0x20, 0x39, 0xde, 0xce, 0x02,
+ 0x23, 0x19, 0xed, 0xe9, 0xff, 0xf6, 0x0f, 0xf7, 0xff, 0x0b, 0xe3, 0x07,
+ 0xdf, 0xec, 0xda, 0xf6, 0x4f, 0x25, 0x1c, 0x0f, 0x56, 0xd2, 0xf7, 0x01,
+ 0xec, 0xfd, 0x03, 0x07, 0x31, 0xdb, 0xc6, 0x29, 0x39, 0x0d, 0x44, 0xed,
+ 0xf2, 0xd7, 0x1a, 0xff, 0xd4, 0xd3, 0xd9, 0x0d, 0xe2, 0xc6, 0xf5, 0xd3,
+ 0x40, 0xdf, 0xcd, 0x36, 0xd6, 0x0b, 0x0e, 0xf2, 0xec, 0x06, 0xf4, 0x0c,
+ 0x16, 0xf5, 0x16, 0x1f, 0xe8, 0x26, 0x3f, 0x02, 0x07, 0xd8, 0x44, 0xf9,
+ 0xea, 0x33, 0xd3, 0xee, 0xec, 0xc0, 0x00, 0xd9, 0x45, 0x3d, 0x46, 0x45,
+ 0x71, 0x13, 0x0d, 0xea, 0xc7, 0x24, 0xff, 0xff, 0x1b, 0xdb, 0xc2, 0x2e,
+ 0x1f, 0x01, 0x4f, 0xfd, 0xf7, 0xe2, 0x0e, 0xfc, 0xd3, 0xf3, 0xe4, 0x15,
+ 0xd9, 0xd5, 0xf1, 0xbb, 0x30, 0x15, 0xfa, 0x1f, 0xfd, 0xe8, 0xfb, 0xe1,
+ 0x22, 0x1d, 0xc8, 0x01, 0x39, 0xb9, 0xb3, 0xed, 0x0a, 0x00, 0xf5, 0xe7,
+ 0xf5, 0xfc, 0x0a, 0x0c, 0xac, 0xf1, 0x11, 0xe0, 0xe2, 0xd1, 0xf7, 0x2a,
+ 0x49, 0x34, 0x1a, 0x12, 0x04, 0xfb, 0x04, 0xd6, 0x2b, 0xea, 0xd8, 0x15,
+ 0xe9, 0xc2, 0xb4, 0x1c, 0x18, 0x48, 0xfd, 0xea, 0xe5, 0x32, 0x15, 0xed,
+ 0xaa, 0xf0, 0x1d, 0xdd, 0xe5, 0x81, 0xe9, 0x31, 0xea, 0x07, 0x2e, 0x1a,
+ 0x0d, 0x1a, 0xf1, 0xe8, 0x07, 0x06, 0xfa, 0x11, 0x31, 0xce, 0xd4, 0x12,
+ 0x1a, 0xfd, 0xf4, 0xf3, 0x0b, 0xf8, 0x02, 0x00, 0xc2, 0x08, 0xfa, 0xe5,
+ 0xec, 0xdf, 0xeb, 0x10, 0x2f, 0x0c, 0x09, 0x04, 0x2c, 0xd4, 0xfd, 0x00,
+ 0x03, 0xee, 0x29, 0xeb, 0xf1, 0x3a, 0x0b, 0x02, 0xc8, 0xf6, 0xfc, 0xe8,
+ 0xd9, 0x10, 0x10, 0xf1, 0x0a, 0xf6, 0x2a, 0xf5, 0xe3, 0x3a, 0xcb, 0xec,
+ 0x14, 0x06, 0xdd, 0xfb, 0xe4, 0xd0, 0x02, 0xfd, 0x24, 0xfc, 0x0d, 0x1e,
+ 0xeb, 0xf7, 0x36, 0xf7, 0xd2, 0xca, 0x19, 0xd7, 0x2d, 0xec, 0x08, 0x2f,
+ 0x1b, 0xf3, 0x1f, 0xfc, 0xce, 0x23, 0xda, 0xb7, 0x13, 0x15, 0x0b, 0x00,
+ 0x15, 0xe3, 0xc8, 0xff, 0xee, 0x05, 0x13, 0xec, 0x12, 0xf4, 0x1d, 0xf7,
+ 0xc0, 0xda, 0x1c, 0xe8, 0xc1, 0x13, 0x03, 0x13, 0x11, 0x13, 0x29, 0xe4,
+ 0xf1, 0x24, 0x0a, 0xf2, 0x21, 0xef, 0xea, 0xf1, 0xf5, 0xff, 0x09, 0xb3,
+ 0x09, 0x0e, 0x10, 0xe6, 0xf9, 0x11, 0x11, 0xd0, 0xe7, 0xf6, 0x36, 0xf9,
+ 0xf1, 0x0f, 0x0e, 0xb6, 0x23, 0xb0, 0x4c, 0x02, 0x9f, 0x39, 0xd6, 0xf0,
+ 0x2e, 0x18, 0xfb, 0x1d, 0x3c, 0xf1, 0xf0, 0xbd, 0x17, 0xf7, 0x0e, 0xda,
+ 0xfa, 0x1f, 0xe2, 0xe0, 0xff, 0xb8, 0xb4, 0x1f, 0x0a, 0xff, 0x9d, 0x47,
+ 0x28, 0xa3, 0x3f, 0x04, 0x2b, 0x4f, 0x2c, 0xe4, 0x01, 0x0a, 0xff, 0xee,
+ 0x01, 0xf1, 0x47, 0x00, 0x36, 0x2f, 0x1e, 0xf4, 0x0b, 0x3c, 0x1b, 0xd8,
+ 0xf9, 0x2a, 0x97, 0x0a, 0x0f, 0x0c, 0xf0, 0xe6, 0x35, 0xc3, 0x24, 0x13,
+ 0xdc, 0x4e, 0xa4, 0xf6, 0x23, 0x18, 0x18, 0xe8, 0x12, 0xfb, 0xd6, 0xc2,
+ 0xf1, 0x14, 0x36, 0xce, 0xef, 0x34, 0x1b, 0xdc, 0x99, 0xd9, 0x22, 0xbb,
+ 0xca, 0x1a, 0x02, 0xff, 0x11, 0xee, 0x1c, 0x10, 0xde, 0xf1, 0xc5, 0xea,
+ 0x02, 0xe9, 0xbe, 0x02, 0xf7, 0x25, 0x14, 0x02, 0x1e, 0xcd, 0xe3, 0x05,
+ 0xcc, 0xa7, 0x0b, 0xfa, 0xb1, 0x81, 0xd5, 0xe8, 0x36, 0xe2, 0xaf, 0x23,
+ 0x50, 0xdc, 0xfe, 0x12, 0xc9, 0x18, 0xbe, 0xd3, 0xfe, 0xe4, 0xbb, 0xcb,
+ 0x05, 0xea, 0xe6, 0x31, 0x03, 0x19, 0x16, 0xad, 0x26, 0x36, 0x27, 0xf5,
+ 0xd5, 0xaa, 0xf0, 0xe7, 0xe4, 0xf7, 0xf0, 0xfd, 0x37, 0xde, 0x15, 0x6b,
+ 0xfc, 0x02, 0xf0, 0xd6, 0x1b, 0xdd, 0xda, 0xf9, 0x23, 0xe7, 0xfa, 0xa9,
+ 0xe8, 0x04, 0xd4, 0x0f, 0x13, 0xe4, 0x0e, 0xe4, 0x11, 0x4f, 0x01, 0xfc,
+ 0x1b, 0x27, 0x20, 0x00, 0xca, 0xf0, 0x09, 0xe9, 0x28, 0x89, 0x0f, 0xef,
+ 0x13, 0xf1, 0x16, 0x12, 0x2d, 0x1e, 0xe2, 0x99, 0xcc, 0x33, 0xe1, 0xd0,
+ 0xfd, 0xf6, 0xd9, 0xd1, 0x1b, 0xcd, 0xc6, 0xcc, 0xb3, 0x27, 0xb9, 0x01,
+ 0xcb, 0xdc, 0xfc, 0x19, 0x28, 0x9f, 0xfd, 0x03, 0x13, 0xbf, 0x35, 0xdd,
+ 0x1c, 0x26, 0x28, 0xcc, 0xd7, 0xdb, 0xe5, 0x0a, 0x2e, 0xd4, 0x06, 0xee,
+ 0x12, 0x3f, 0xfc, 0xe7, 0xf4, 0xff, 0xfe, 0x2c, 0xd9, 0xe1, 0xf1, 0xf8,
+ 0x09, 0x81, 0x03, 0xbd, 0x49, 0x13, 0x20, 0x14, 0x30, 0x3a, 0xff, 0x1a,
+ 0xc2, 0xd6, 0xf0, 0xf4, 0x32, 0x15, 0x4f, 0x31, 0x15, 0xec, 0x1a, 0x14,
+ 0x27, 0x19, 0x2c, 0xf3, 0x13, 0x34, 0xd8, 0x04, 0x09, 0xd1, 0x13, 0xf8,
+ 0x29, 0xc8, 0xf2, 0xf4, 0x0c, 0x09, 0x12, 0x5d, 0xef, 0xdc, 0x15, 0x42,
+ 0xa4, 0x2b, 0x1a, 0xe0, 0xb8, 0x15, 0xc6, 0x2e, 0x3d, 0xc5, 0xdf, 0x03,
+ 0x2d, 0xf1, 0xfb, 0x06, 0xef, 0xff, 0x12, 0xaf, 0xe5, 0xb4, 0xed, 0xe3,
+ 0x3d, 0x4e, 0x0e, 0x2c, 0xd7, 0x04, 0x06, 0x0f, 0x39, 0x19, 0x2c, 0x28,
+ 0x24, 0xe8, 0x07, 0x25, 0x22, 0x1d, 0x16, 0xeb, 0x2f, 0x3c, 0xe7, 0x24,
+ 0xbb, 0x0d, 0x0b, 0xe0, 0x57, 0xeb, 0xfa, 0xbf, 0x2e, 0x12, 0x14, 0xad,
+ 0xed, 0x0e, 0xeb, 0x28, 0x0d, 0xc3, 0x08, 0xb9, 0x02, 0x50, 0xeb, 0xd6,
+ 0xee, 0x17, 0x17, 0x1c, 0xd5, 0xcc, 0xef, 0x15, 0x1d, 0xa3, 0xf2, 0x0b,
+ 0x21, 0xff, 0x0d, 0xfc, 0x06, 0x2e, 0x07, 0x8d, 0xf0, 0x56, 0xcb, 0xd0,
+ 0xf9, 0xd2, 0xf6, 0xa4, 0xee, 0x96, 0xcf, 0x99, 0xc1, 0x29, 0xbc, 0x0f,
+ 0xf6, 0xa0, 0x2c, 0x4a, 0x2a, 0xc6, 0xf0, 0x0d, 0x22, 0xd7, 0xed, 0xa2,
+ 0x11, 0x37, 0xf0, 0xc3, 0xf9, 0x06, 0xef, 0x02, 0x1b, 0xf7, 0x24, 0xe3,
+ 0xe1, 0xe6, 0xf7, 0xdf, 0xda, 0x13, 0xeb, 0x2e, 0x11, 0xdc, 0x14, 0x41,
+ 0x03, 0xc5, 0xf8, 0xf2, 0x29, 0x20, 0x20, 0x10, 0x37, 0x9e, 0x2d, 0xb5,
+ 0x0b, 0xfb, 0x65, 0xc7, 0xe1, 0x2c, 0xc7, 0x21, 0x9f, 0xeb, 0x21, 0xbb,
+ 0xcf, 0xf4, 0xcf, 0xe3, 0x0f, 0xf6, 0x26, 0xf4, 0x88, 0xfe, 0xad, 0x35,
+ 0xf5, 0x07, 0x81, 0xd6, 0xec, 0xe6, 0x5b, 0xa8, 0x25, 0xe6, 0xdc, 0xfd,
+ 0xdb, 0xa9, 0xd5, 0xb3, 0xa1, 0x05, 0x28, 0xc5, 0x52, 0x17, 0xcf, 0x3a,
+ 0xd8, 0x15, 0x49, 0xe6, 0x8b, 0xc8, 0x9c, 0xfa, 0x05, 0xf3, 0xd9, 0xbd,
+ 0x4c, 0xc9, 0x1f, 0xe8, 0xf9, 0x21, 0x50, 0xcf, 0x18, 0x19, 0xf0, 0x24,
+ 0xa7, 0xd7, 0xdc, 0xc2, 0xbc, 0x4c, 0xbb, 0x10, 0x30, 0xe5, 0x24, 0xe7,
+ 0xa8, 0xff, 0x88, 0x18, 0x01, 0x18, 0xe4, 0xcb, 0x22, 0xdb, 0x1d, 0xac,
+ 0x37, 0xff, 0x0a, 0xec, 0xc4, 0xcc, 0xc0, 0xd7, 0xbb, 0x12, 0x06, 0xe7,
+ 0xe4, 0x1a, 0x10, 0xf2, 0xe2, 0xb1, 0x0f, 0xf3, 0xc2, 0x2b, 0xa8, 0xf1,
+ 0x2c, 0x65, 0x27, 0x12, 0x3f, 0xab, 0x07, 0xac, 0x16, 0x2d, 0x24, 0x0b,
+ 0x36, 0xc7, 0xa3, 0xf2, 0xf1, 0x05, 0xdd, 0xec, 0xd0, 0x1a, 0xdc, 0x29,
+ 0x0a, 0xc9, 0x1a, 0xd6, 0x1b, 0x22, 0x24, 0x0c, 0xf6, 0x41, 0x04, 0xc8,
+ 0x3d, 0xf3, 0x0e, 0xdc, 0x47, 0x24, 0xe3, 0xe8, 0xf9, 0xbf, 0xdb, 0x15,
+ 0xe2, 0x04, 0xc8, 0xe0, 0xcd, 0x20, 0x09, 0x24, 0xe9, 0xdd, 0x06, 0xfc,
+ 0xca, 0x15, 0xaa, 0xf4, 0x40, 0x40, 0x2b, 0x17, 0x27, 0x0d, 0x34, 0xa3,
+ 0x15, 0x16, 0x5d, 0xd7, 0x02, 0x31, 0xd8, 0x32, 0xf6, 0x02, 0x11, 0xe8,
+ 0x09, 0x47, 0xe9, 0x20, 0xaf, 0xf9, 0x51, 0xd4, 0xed, 0xf5, 0xd1, 0x05,
+ 0x17, 0x21, 0xd6, 0xfe, 0x02, 0x15, 0x3a, 0x84, 0x50, 0xec, 0xda, 0x0f,
+ 0xe5, 0xb8, 0x01, 0x40, 0xf6, 0xa7, 0x28, 0xe3, 0x1c, 0x0e, 0xcc, 0x37,
+ 0xdd, 0x18, 0x40, 0xf1, 0xba, 0x20, 0xb9, 0xd8, 0x1d, 0xf6, 0xe7, 0xef,
+ 0x11, 0x06, 0xf4, 0xb5, 0x30, 0xfb, 0x4e, 0xbf, 0x15, 0x24, 0x00, 0x1d,
+ 0x17, 0xe2, 0xf9, 0x01, 0xd9, 0x2b, 0xd3, 0x31, 0x04, 0xfe, 0x3d, 0xe9,
+ 0xef, 0x23, 0xf4, 0x2d, 0x23, 0x2b, 0xc2, 0xdb, 0xe6, 0xeb, 0xe3, 0xfe,
+ 0x04, 0xc8, 0xbb, 0xe3, 0xfc, 0xe5, 0x1f, 0xfa, 0x03, 0xf4, 0xf5, 0xee,
+ 0xc6, 0xd7, 0x0e, 0xd1, 0x00, 0xf3, 0x13, 0xf8, 0x00, 0x11, 0xda, 0x08,
+ 0x1b, 0x06, 0x0e, 0xea, 0x02, 0xf7, 0xb7, 0x0d, 0xc8, 0xc0, 0x19, 0xee,
+ 0xc6, 0xf9, 0x3f, 0x04, 0xf6, 0x04, 0x02, 0xfd, 0x05, 0x1d, 0x02, 0xe0,
+ 0x2c, 0xff, 0x15, 0x0e, 0xf6, 0xff, 0x05, 0xff, 0xef, 0x28, 0x10, 0x05,
+ 0xfe, 0xf6, 0xf7, 0xfd, 0xfc, 0xef, 0xfe, 0xf4, 0x0e, 0xed, 0x2a, 0xff,
+ 0x03, 0xde, 0xf6, 0x1b, 0x0b, 0xf9, 0x03, 0xec, 0x39, 0xf1, 0x06, 0x4d,
+ 0x05, 0x0d, 0x0b, 0x0a, 0x2f, 0x12, 0x0a, 0xf4, 0x15, 0xfa, 0x12, 0xc7,
+ 0xe6, 0xff, 0x24, 0xdd, 0xfd, 0x27, 0x06, 0xf4, 0x13, 0x16, 0x0e, 0xe9,
+ 0x0a, 0xe5, 0xee, 0xc8, 0x07, 0xd7, 0x1c, 0x12, 0xde, 0x1c, 0xed, 0xca,
+ 0x26, 0xf2, 0xec, 0xf3, 0xe3, 0x24, 0x17, 0xf0, 0x28, 0x0e, 0x0e, 0x1b,
+ 0xaa, 0x2a, 0x17, 0x07, 0xdd, 0xf6, 0xf9, 0x15, 0x43, 0xde, 0xf5, 0x07,
+ 0x10, 0xcc, 0x24, 0x17, 0xfc, 0x30, 0xfc, 0xd6, 0xc2, 0x08, 0x1a, 0x23,
+ 0xec, 0x03, 0x1b, 0xfd, 0xe9, 0xf5, 0x2a, 0xe8, 0x0b, 0x28, 0x17, 0x05,
+ 0x18, 0x23, 0xe1, 0x06, 0x1c, 0xd6, 0xda, 0x0b, 0x26, 0xc9, 0x29, 0x44,
+ 0xe4, 0x22, 0xce, 0xdb, 0x15, 0x01, 0xf6, 0xf7, 0xfc, 0xee, 0xf7, 0xfe,
+ 0xde, 0xce, 0xce, 0xda, 0xf2, 0xee, 0x0f, 0xde, 0x12, 0x03, 0xf9, 0xd1,
+ 0xdf, 0xe8, 0x27, 0xe2, 0x14, 0xe3, 0xf2, 0x10, 0xf8, 0x07, 0xd6, 0xf2,
+ 0x13, 0xe1, 0xf8, 0x09, 0xe7, 0x11, 0xdf, 0x22, 0xce, 0xd1, 0xef, 0xce,
+ 0xb3, 0xe7, 0x0d, 0xe7, 0xda, 0xd4, 0x08, 0xd9, 0xf5, 0x36, 0xfa, 0xf9,
+ 0x3c, 0xe2, 0x02, 0x1a, 0xd3, 0xf0, 0xda, 0x0d, 0xe1, 0xf4, 0x12, 0x10,
+ 0xe6, 0x0c, 0xdb, 0x0c, 0xe7, 0xe6, 0xd5, 0xe1, 0xf8, 0xe1, 0x31, 0xe7,
+ 0xe2, 0xd7, 0xda, 0xeb, 0xd4, 0xcc, 0x07, 0xf2, 0x5a, 0xe0, 0x02, 0x7f,
+ 0xf6, 0x0a, 0xf1, 0xc6, 0x2c, 0x24, 0x1b, 0xe1, 0xf3, 0x2f, 0xf0, 0x1f,
+ 0x0a, 0x04, 0x0c, 0xfa, 0xe2, 0x34, 0x0e, 0x07, 0xff, 0xd8, 0x19, 0x0f,
+ 0xf5, 0xf1, 0x05, 0xfa, 0xe9, 0x05, 0x11, 0xec, 0xfd, 0x1e, 0x14, 0xde,
+ 0xc3, 0xe7, 0xee, 0x16, 0x0f, 0x20, 0x05, 0x01, 0xfd, 0xdc, 0xff, 0x08,
+ 0x04, 0x00, 0xf2, 0x18, 0x04, 0xa1, 0x12, 0x10, 0xff, 0x27, 0xe3, 0x0a,
+ 0x14, 0x02, 0xdf, 0xfe, 0x0f, 0x28, 0x16, 0xce, 0x3b, 0x0d, 0xd2, 0x11,
+ 0xd5, 0x24, 0xd3, 0x1c, 0x0b, 0x06, 0xf2, 0x01, 0xe2, 0x10, 0xd3, 0xbf,
+ 0xf4, 0xe2, 0x0d, 0x05, 0xde, 0xd7, 0x00, 0x09, 0xcb, 0xec, 0x04, 0x15,
+ 0xcb, 0x1e, 0x1e, 0xda, 0x9b, 0xaf, 0xfc, 0x08, 0xd6, 0x1f, 0xee, 0x34,
+ 0x2b, 0xf5, 0x1e, 0x11, 0x0c, 0x36, 0x02, 0xe1, 0x05, 0x05, 0x18, 0x08,
+ 0xfc, 0xfb, 0xf8, 0x19, 0x18, 0x27, 0x26, 0xd9, 0xec, 0x25, 0x0a, 0x11,
+ 0xcf, 0xd3, 0xec, 0xd9, 0x7f, 0xfd, 0x0e, 0x4b, 0x13, 0xdd, 0xfa, 0x1b,
+ 0xfd, 0x1c, 0xcd, 0xd7, 0x19, 0xfa, 0xc5, 0x19, 0x0b, 0x2f, 0xe9, 0x04,
+ 0x27, 0xec, 0x1c, 0xe0, 0x34, 0x37, 0x48, 0x4c, 0xed, 0xde, 0xca, 0xd6,
+ 0xc7, 0x2b, 0xe7, 0x36, 0x31, 0xfc, 0x03, 0x0c, 0x01, 0x07, 0xf9, 0xe6,
+ 0x10, 0xf8, 0x1f, 0x15, 0x17, 0xdc, 0xf7, 0x18, 0x26, 0x1d, 0x31, 0xdc,
+ 0xa8, 0x26, 0x2a, 0xfd, 0xb2, 0xc8, 0xf9, 0xe8, 0xf2, 0x2b, 0x04, 0x2d,
+ 0x1f, 0x27, 0x2a, 0xdc, 0xfb, 0x27, 0xee, 0xe4, 0xf1, 0xe1, 0x1e, 0xdb,
+ 0xf7, 0x08, 0x0d, 0xf7, 0xe2, 0x00, 0x20, 0xf3, 0xff, 0x37, 0xee, 0xf6,
+ 0xd2, 0xd7, 0xbb, 0x1e, 0xf7, 0x24, 0x10, 0x28, 0x20, 0xde, 0x05, 0xf5,
+ 0xd9, 0x19, 0x00, 0x14, 0xc1, 0xab, 0xf9, 0xdc, 0x20, 0x16, 0xf6, 0x1a,
+ 0x34, 0xdf, 0xf1, 0xf3, 0xe6, 0x34, 0xe8, 0xf5, 0x2e, 0x14, 0xd2, 0x05,
+ 0xde, 0x24, 0xe7, 0xe7, 0x12, 0x04, 0x0b, 0xfb, 0xf5, 0x0b, 0xc6, 0xd4,
+ 0xf3, 0xcd, 0x13, 0x04, 0xf2, 0xf8, 0x00, 0x15, 0xd4, 0xe2, 0x0e, 0xe9,
+ 0xbe, 0x2f, 0x15, 0xff, 0xc1, 0xce, 0xeb, 0x11, 0x27, 0xc5, 0xd8, 0x09,
+ 0x0a, 0xe3, 0xea, 0xee, 0x07, 0xcc, 0x06, 0x0f, 0xdd, 0xfd, 0x0f, 0xed,
+ 0xc5, 0x02, 0x2a, 0xce, 0xf6, 0x07, 0x36, 0xe9, 0x05, 0x1c, 0x06, 0xf8,
+ 0x12, 0x18, 0x23, 0x02, 0xfd, 0xce, 0xb8, 0xfe, 0xd9, 0x9b, 0x05, 0xf1,
+ 0x02, 0xf7, 0x00, 0x08, 0x10, 0x84, 0x11, 0x01, 0xe3, 0x33, 0xfa, 0x04,
+ 0x19, 0xfc, 0x36, 0xee, 0xfc, 0xc7, 0x00, 0x0a, 0x12, 0x1d, 0xff, 0xf9,
+ 0x16, 0xfa, 0xf0, 0x17, 0xfb, 0xf5, 0xea, 0x03, 0x0b, 0xdd, 0x01, 0x03,
+ 0xd7, 0xcc, 0x12, 0x18, 0x0c, 0x02, 0x19, 0xfa, 0xf9, 0x06, 0x34, 0xd0,
+ 0x13, 0x35, 0x0b, 0xfd, 0x24, 0x26, 0x16, 0x06, 0x40, 0xf5, 0x23, 0xa9,
+ 0xf5, 0x05, 0x3b, 0xe1, 0xe6, 0x22, 0x19, 0x0e, 0xd3, 0x13, 0x20, 0xd8,
+ 0x09, 0xfb, 0xfe, 0x9c, 0x0f, 0xd2, 0x28, 0x13, 0xaf, 0x37, 0xff, 0xdf,
+ 0x0d, 0x00, 0xe2, 0x05, 0xf9, 0x34, 0x20, 0xe2, 0x2b, 0x25, 0xed, 0x20,
+ 0xbe, 0x15, 0x23, 0xfb, 0xff, 0xfa, 0x2f, 0x13, 0x34, 0xcb, 0x81, 0x32,
+ 0xfc, 0xbb, 0x1d, 0x1d, 0x08, 0x30, 0x14, 0xdb, 0xa8, 0xc6, 0xe3, 0xe7,
+ 0xec, 0x15, 0x39, 0xec, 0xfe, 0xe6, 0x3d, 0xe0, 0x0f, 0x2e, 0x1b, 0x0f,
+ 0xd3, 0x1d, 0xd3, 0x0b, 0x20, 0xee, 0xd4, 0x1a, 0x22, 0xb7, 0x33, 0x23,
+ 0xa6, 0x2e, 0xae, 0xf8, 0x11, 0xfd, 0xd3, 0xd8, 0x02, 0xf3, 0xf8, 0xfe,
+ 0xfb, 0xd5, 0xdb, 0xd4, 0xdb, 0xe2, 0x0d, 0xef, 0xda, 0xf3, 0x03, 0xda,
+ 0xfd, 0x0b, 0x1c, 0xc4, 0x4b, 0x0e, 0x19, 0x20, 0xe7, 0x1d, 0xcc, 0x13,
+ 0x08, 0xf7, 0x0f, 0x22, 0x00, 0xe0, 0xd5, 0x24, 0xe1, 0xc8, 0x12, 0xb7,
+ 0xc5, 0x03, 0x22, 0xd0, 0xf0, 0xab, 0x07, 0xd3, 0xd7, 0x41, 0xef, 0xfa,
+ 0x3c, 0xbe, 0xf1, 0x26, 0xe3, 0xf6, 0xce, 0x28, 0xf5, 0xd0, 0xe5, 0x05,
+ 0x0b, 0xe5, 0xdc, 0x16, 0x03, 0xea, 0xec, 0xe3, 0x10, 0xee, 0x18, 0xdf,
+ 0xad, 0xd2, 0xcd, 0xf5, 0xe7, 0xed, 0x11, 0xeb, 0x49, 0xea, 0x20, 0x3b,
+ 0xf2, 0x2f, 0xef, 0xdf, 0x2f, 0x3a, 0x19, 0xe4, 0xdc, 0x18, 0x86, 0xf1,
+ 0x23, 0x35, 0xf8, 0x29, 0x48, 0x0f, 0x16, 0x00, 0x33, 0x16, 0x04, 0xc6,
+ 0xd7, 0xe6, 0x2c, 0x10, 0xe2, 0xe8, 0xe9, 0xe9, 0x1b, 0xf4, 0xf9, 0xce,
+ 0x0a, 0x19, 0x08, 0x2b, 0x0a, 0xec, 0xb4, 0xef, 0xfc, 0x16, 0xd1, 0x0d,
+ 0xe9, 0xd9, 0xd9, 0xd6, 0x07, 0xd6, 0xdf, 0xe5, 0xee, 0xf5, 0xee, 0x1d,
+ 0xfa, 0xf0, 0xc0, 0x1b, 0xf7, 0x07, 0xeb, 0xd7, 0x15, 0xdd, 0xfa, 0xfb,
+ 0xd5, 0x16, 0x94, 0xda, 0x19, 0x01, 0x02, 0x24, 0x34, 0x21, 0x21, 0xef,
+ 0x1c, 0x21, 0xd7, 0xc8, 0xe2, 0xf0, 0x27, 0x27, 0xf6, 0xcb, 0xe6, 0x1a,
+ 0x22, 0xde, 0xe3, 0xcb, 0x05, 0x0d, 0x01, 0x16, 0x13, 0xb2, 0xf6, 0xee,
+ 0xe5, 0xea, 0x1a, 0xfa, 0x57, 0x00, 0xb7, 0x26, 0x12, 0xf3, 0x43, 0xcb,
+ 0xe7, 0x0f, 0x34, 0xe9, 0xd9, 0xc7, 0xfb, 0x03, 0x81, 0xc6, 0xe7, 0x4c,
+ 0xfe, 0xf1, 0xf6, 0x22, 0x2c, 0x26, 0xf9, 0xeb, 0x09, 0xee, 0xd9, 0x17,
+ 0xe0, 0xda, 0x00, 0x04, 0xd4, 0xc2, 0x0b, 0x10, 0x05, 0x26, 0x1a, 0x06,
+ 0xfc, 0xe1, 0xf0, 0x01, 0x1e, 0xd0, 0x25, 0xf6, 0x14, 0x04, 0x2a, 0x51,
+ 0x21, 0xfa, 0x0d, 0xc9, 0xe3, 0x1f, 0x09, 0xfc, 0x4b, 0xee, 0xb9, 0x23,
+ 0x08, 0xf0, 0x59, 0xcc, 0xde, 0xd2, 0x52, 0x0e, 0xed, 0xf1, 0x05, 0x48,
+ 0xad, 0xa6, 0xdd, 0x48, 0x2f, 0xda, 0x08, 0xf4, 0xc3, 0xec, 0xd3, 0xc6,
+ 0x37, 0x2d, 0x09, 0x0d, 0x48, 0x0a, 0xf3, 0xe6, 0x2d, 0x18, 0xed, 0xba,
+ 0xca, 0xee, 0x0a, 0x1e, 0xd0, 0xd7, 0x0b, 0x07, 0xd3, 0xf2, 0xbf, 0x18,
+ 0x0c, 0x25, 0x27, 0xfb, 0x03, 0xda, 0xce, 0xd0, 0xec, 0xff, 0xf9, 0x02,
+ 0xc3, 0xc5, 0xe8, 0xe5, 0x1c, 0xe4, 0xec, 0xc8, 0x27, 0x2b, 0x0e, 0x00,
+ 0x0a, 0xf4, 0xca, 0x33, 0xc4, 0xca, 0xc0, 0x36, 0x03, 0xdd, 0x22, 0x01,
+ 0xc0, 0x01, 0xbd, 0xed, 0x14, 0x20, 0x11, 0x29, 0x3e, 0x17, 0xe3, 0xf4,
+ 0x1c, 0x29, 0xeb, 0xc6, 0xe0, 0xe8, 0x27, 0x34, 0x1f, 0xc6, 0xde, 0x33,
+ 0xef, 0xe0, 0xd3, 0xfa, 0x39, 0x18, 0x22, 0x03, 0x2e, 0xeb, 0xcb, 0xd5,
+ 0x09, 0x11, 0xdd, 0x1b, 0x33, 0xe5, 0x11, 0xe4, 0x06, 0x25, 0xfb, 0xef,
+ 0xff, 0x1d, 0x26, 0xfd, 0xc4, 0xd7, 0x0d, 0xdf, 0x1c, 0xbe, 0x02, 0x04,
+ 0x0f, 0x37, 0x13, 0xf9, 0x26, 0xb8, 0x9a, 0xcc, 0xfa, 0x32, 0xe9, 0x07,
+ 0x04, 0xce, 0xec, 0xc1, 0xdd, 0x81, 0xdb, 0x01, 0xe8, 0x3e, 0xa2, 0x34,
+ 0xdc, 0xec, 0xef, 0x11, 0x13, 0xb1, 0xf1, 0x22, 0xe6, 0xbd, 0xf1, 0xe9,
+ 0xfc, 0xc9, 0xb9, 0xca, 0xf6, 0x0e, 0xe4, 0x14, 0x21, 0xdd, 0x1d, 0xe2,
+ 0xe1, 0x2b, 0xee, 0xe8, 0x0d, 0xff, 0x02, 0x14, 0x0d, 0xda, 0xff, 0x34,
+ 0x28, 0xb7, 0xff, 0xb2, 0x36, 0x38, 0x0f, 0xef, 0x08, 0xfb, 0xf7, 0xe1,
+ 0xe4, 0xe9, 0x01, 0xe7, 0x2a, 0xff, 0xe9, 0x36, 0x05, 0x0d, 0x11, 0xd8,
+ 0xd8, 0x2d, 0x2c, 0x01, 0xf9, 0x0a, 0xc7, 0x12, 0xb6, 0xe9, 0xae, 0x28,
+ 0x1e, 0x23, 0xf7, 0x12, 0xd8, 0x1f, 0x06, 0x00, 0x11, 0xfa, 0xfa, 0x1c,
+ 0xd3, 0x07, 0x01, 0x0d, 0xe4, 0xdf, 0xda, 0xf9, 0x08, 0x08, 0xca, 0x1d,
+ 0x0e, 0xf8, 0x0f, 0x15, 0xe1, 0xeb, 0xc7, 0xd8, 0xde, 0xb3, 0xf2, 0x10,
+ 0x18, 0xf6, 0x19, 0xca, 0xb6, 0x1c, 0x03, 0xe4, 0x2b, 0xf3, 0xfb, 0x35,
+ 0xf2, 0x01, 0xf4, 0xed, 0xfa, 0x1d, 0x51, 0x10, 0x31, 0xf9, 0xc8, 0x76,
+ 0xcf, 0xdb, 0xb9, 0x22, 0x4c, 0x1e, 0xde, 0x14, 0x09, 0xd3, 0xc5, 0xb4,
+ 0xf2, 0x19, 0xea, 0x2d, 0x20, 0xc6, 0x33, 0xe5, 0xfd, 0x1a, 0x12, 0xc7,
+ 0xe4, 0xd8, 0x15, 0x23, 0xf9, 0xc9, 0xdc, 0x1a, 0x1c, 0x95, 0xda, 0xd9,
+ 0x15, 0x23, 0x07, 0xf3, 0xfc, 0xb5, 0xaf, 0xde, 0x05, 0x2f, 0xea, 0xe5,
+ 0xf9, 0xc2, 0xfa, 0xce, 0x09, 0x9e, 0x01, 0xca, 0xc7, 0xe6, 0xd6, 0x17,
+ 0x22, 0xf3, 0xe4, 0x33, 0xd2, 0x9c, 0xdd, 0xfd, 0x1f, 0xd4, 0xee, 0xf9,
+ 0xf2, 0x0a, 0xc2, 0xb6, 0xe0, 0x17, 0x0e, 0x32, 0x1c, 0xfa, 0xfb, 0xe2,
+ 0xf8, 0x42, 0xd8, 0xe4, 0xe3, 0xe7, 0x12, 0x1b, 0x24, 0xd0, 0xa4, 0x6b,
+ 0x18, 0x9f, 0xdd, 0xba, 0x42, 0x2a, 0x13, 0x22, 0x0f, 0xf8, 0xc8, 0x07,
+ 0x29, 0x17, 0xc1, 0x23, 0x27, 0xe1, 0xff, 0x21, 0x0d, 0x01, 0x0e, 0xf8,
+ 0xdf, 0x13, 0x26, 0x0c, 0xdd, 0x0d, 0x12, 0xf0, 0xf6, 0x01, 0x13, 0x1c,
+ 0xf9, 0x11, 0xf2, 0x2a, 0xf8, 0xee, 0xd6, 0x3e, 0x04, 0x0d, 0x05, 0x08,
+ 0xd4, 0xca, 0xfe, 0x0f, 0x24, 0xa9, 0x4b, 0xce, 0xf0, 0x7e, 0x22, 0x19,
+ 0xf5, 0x1d, 0xf0, 0xf0, 0xfe, 0x08, 0xe9, 0x19, 0xea, 0xec, 0xf3, 0x37,
+ 0xd9, 0x0f, 0xe8, 0x38, 0x07, 0x27, 0xe0, 0x1c, 0x06, 0xee, 0xf0, 0x11,
+ 0x16, 0xfb, 0xf3, 0xf2, 0xfc, 0xdc, 0x26, 0x1f, 0xda, 0x10, 0x02, 0xef,
+ 0xeb, 0x0a, 0xf9, 0xca, 0xd0, 0x16, 0x22, 0x0d, 0x30, 0xdd, 0xfb, 0xf0,
+ 0x08, 0xf4, 0x25, 0xf9, 0x34, 0xda, 0xca, 0x2b, 0xe6, 0x0e, 0x46, 0xed,
+ 0xfc, 0xe1, 0xfc, 0x3a, 0xdb, 0xc8, 0x06, 0xf6, 0x8f, 0xc2, 0x07, 0x4a,
+ 0xd8, 0xda, 0xd7, 0x12, 0x40, 0x0d, 0x20, 0xf4, 0x32, 0x24, 0xd6, 0x14,
+ 0xfc, 0xeb, 0xfb, 0x11, 0xfc, 0xf3, 0x23, 0x04, 0x1a, 0x3f, 0xe7, 0x1f,
+ 0xe3, 0x30, 0x0c, 0xf4, 0x5d, 0xfe, 0x47, 0x2b, 0xe6, 0xf7, 0xb8, 0x04,
+ 0x08, 0x04, 0x21, 0x0a, 0xfc, 0x13, 0x1b, 0xd4, 0x23, 0x12, 0xda, 0x38,
+ 0xd4, 0xed, 0x6e, 0xec, 0xee, 0xb4, 0x15, 0x3b, 0x0c, 0xcd, 0x08, 0x07,
+ 0x84, 0xf9, 0x20, 0x34, 0xdc, 0xe4, 0xe2, 0x33, 0xeb, 0xb7, 0xad, 0x04,
+ 0x37, 0x32, 0x0c, 0xf4, 0x25, 0xe8, 0xa7, 0xe2, 0x0e, 0xf6, 0xfd, 0xec,
+ 0xf7, 0xe7, 0x1e, 0xf9, 0xbc, 0x04, 0x24, 0xe1, 0xc3, 0x0e, 0xc7, 0x01,
+ 0xe1, 0x14, 0x14, 0xf8, 0x04, 0xb4, 0xda, 0x2d, 0x09, 0xdc, 0x1b, 0xe2,
+ 0xd0, 0xb6, 0xd1, 0x17, 0x03, 0x81, 0x4a, 0xe8, 0x19, 0x3b, 0x15, 0xec,
+ 0x20, 0x0f, 0xe9, 0xef, 0xae, 0xd9, 0xc2, 0x27, 0x2d, 0x16, 0xc6, 0x30,
+ 0xe9, 0xd1, 0xd4, 0x15, 0x10, 0x22, 0xfb, 0xfe, 0x07, 0xd2, 0xba, 0xcf,
+ 0x00, 0x0a, 0xfb, 0xda, 0xe6, 0xbf, 0x1a, 0x14, 0x95, 0xe4, 0xe8, 0xd0,
+ 0xd5, 0x10, 0xe2, 0x01, 0xd1, 0xfc, 0xff, 0xce, 0xf8, 0xfa, 0x17, 0x07,
+ 0xd8, 0xd1, 0x04, 0xf2, 0xde, 0xff, 0x0d, 0xf6, 0xec, 0xec, 0xef, 0x08,
+ 0x18, 0xf3, 0x04, 0xe3, 0x01, 0xee, 0xf2, 0xf5, 0xe8, 0xf4, 0x0a, 0x10,
+ 0x22, 0x05, 0x10, 0xf3, 0xe6, 0x14, 0xfe, 0x01, 0xe4, 0xf3, 0xfd, 0xee,
+ 0xe6, 0x02, 0x2b, 0xf4, 0xfb, 0x0d, 0x00, 0x1a, 0x0c, 0xf3, 0x07, 0xfe,
+ 0x10, 0xf7, 0x00, 0x1c, 0xee, 0x0a, 0xf5, 0xe2, 0xf7, 0xfa, 0x10, 0x03,
+ 0xfd, 0x08, 0xfe, 0xf7, 0x00, 0xef, 0x12, 0xfa, 0x0e, 0x13, 0x3e, 0x00,
+ 0x03, 0x04, 0xf2, 0x0a, 0x03, 0x0b, 0xf2, 0xef, 0x3a, 0xf0, 0x27, 0x3b,
+ 0x12, 0x0d, 0x00, 0x15, 0x1e, 0x0c, 0x02, 0xf8, 0xf8, 0x08, 0x0a, 0xfb,
+ 0xe0, 0xed, 0x20, 0xf6, 0xe2, 0x3c, 0x19, 0xf9, 0xd4, 0xfa, 0xe2, 0x01,
+ 0x08, 0xef, 0xeb, 0xef, 0x1c, 0xea, 0x15, 0xf6, 0xce, 0x3a, 0xdc, 0xea,
+ 0x0b, 0x13, 0x07, 0xdc, 0xea, 0x1b, 0x03, 0x09, 0x0c, 0xfd, 0x1b, 0xfb,
+ 0xe7, 0x34, 0xfc, 0x13, 0xf9, 0xfb, 0xf3, 0x05, 0x21, 0xdd, 0xfa, 0xec,
+ 0x1d, 0xde, 0x24, 0x0b, 0xf7, 0x40, 0xd1, 0xe7, 0xee, 0x0b, 0x0b, 0x12,
+ 0xff, 0xe7, 0xff, 0x0e, 0xfe, 0xf6, 0x12, 0xfc, 0xfc, 0x2f, 0x3f, 0xf0,
+ 0x1d, 0x0b, 0xdc, 0xf1, 0x00, 0xe4, 0xee, 0xf3, 0x42, 0xef, 0x20, 0x31,
+ 0x03, 0x31, 0xe6, 0xde, 0x1f, 0x08, 0x02, 0xe3, 0xea, 0xe7, 0x0b, 0x0f,
+ 0xce, 0xce, 0xea, 0xeb, 0xce, 0x0b, 0x1d, 0x02, 0xc3, 0xf1, 0xe2, 0xd3,
+ 0xef, 0xdf, 0x08, 0xe3, 0x21, 0xd4, 0xde, 0xf1, 0xdd, 0xef, 0xf6, 0xc9,
+ 0xf5, 0x1d, 0xee, 0xf5, 0xe3, 0x29, 0x0a, 0x19, 0xed, 0xf9, 0xf5, 0xe3,
+ 0xde, 0x04, 0x2c, 0xf8, 0xd9, 0xde, 0xf1, 0xfa, 0xff, 0xee, 0xf7, 0xf9,
+ 0x31, 0xea, 0x10, 0x10, 0xed, 0x02, 0xde, 0xdd, 0x01, 0xfe, 0xfd, 0xfa,
+ 0x08, 0xff, 0xe1, 0xf0, 0xdb, 0xe6, 0xe1, 0xd5, 0xe1, 0xeb, 0x4c, 0xf0,
+ 0x06, 0xde, 0xf2, 0xe6, 0xdf, 0xe0, 0xf6, 0xf2, 0x74, 0xee, 0xec, 0x7f,
+ 0x05, 0xf9, 0x05, 0xdc, 0x15, 0xf6, 0xfa, 0xdb, 0xf6, 0x11, 0x1d, 0xd9,
+ 0x19, 0xff, 0x20, 0x0a, 0xfa, 0x23, 0xc3, 0x25, 0xf4, 0xef, 0xec, 0xb9,
+ 0xd9, 0xff, 0xfc, 0x00, 0x02, 0xf7, 0x10, 0xf9, 0xa7, 0x01, 0xb4, 0x36,
+ 0xfc, 0x23, 0xde, 0x2a, 0x09, 0x04, 0x28, 0xd6, 0x39, 0xf0, 0xee, 0x09,
+ 0xb3, 0xef, 0xcb, 0x17, 0x1e, 0xf3, 0xfb, 0xaa, 0x11, 0x4f, 0xdf, 0x05,
+ 0xf0, 0xf0, 0xee, 0xf1, 0x81, 0xe5, 0x99, 0x55, 0x09, 0xe1, 0xee, 0xec,
+ 0xe9, 0x0b, 0x03, 0xe7, 0x15, 0x00, 0x1b, 0x05, 0x0d, 0x06, 0xd2, 0x1a,
+ 0x05, 0x00, 0xe8, 0xbf, 0xd3, 0x04, 0x0d, 0x07, 0xfa, 0xde, 0x0b, 0xf2,
+ 0xa8, 0x0b, 0xa2, 0xf6, 0x14, 0x1d, 0x06, 0x01, 0x40, 0xcd, 0xf8, 0xe2,
+ 0x14, 0x08, 0x17, 0xf5, 0x0d, 0xd7, 0xe1, 0x05, 0xc3, 0xf6, 0x3f, 0xd1,
+ 0xe5, 0x06, 0x17, 0xfb, 0xd7, 0xcf, 0x08, 0xf4, 0xb4, 0xda, 0xfa, 0xee,
+ 0xff, 0x18, 0x20, 0x19, 0x19, 0xd8, 0x11, 0xd8, 0xea, 0x21, 0x0f, 0x05,
+ 0xfe, 0xf3, 0xf3, 0xfb, 0xfd, 0x0f, 0x52, 0x04, 0x02, 0x20, 0xda, 0x13,
+ 0xf6, 0xee, 0xfd, 0xee, 0x16, 0x01, 0x14, 0x04, 0x17, 0x28, 0x07, 0xe3,
+ 0x5b, 0x00, 0x19, 0xf3, 0xf0, 0x2e, 0xfd, 0xed, 0x17, 0xe7, 0xd1, 0x14,
+ 0xe9, 0xf9, 0x56, 0xec, 0xe7, 0x1e, 0x12, 0x17, 0xe8, 0xe1, 0xfd, 0x24,
+ 0xa8, 0xeb, 0xe5, 0xe6, 0x23, 0x16, 0x1a, 0x0b, 0x2b, 0xf1, 0x09, 0x9f,
+ 0x44, 0x33, 0x39, 0x01, 0x16, 0x05, 0xba, 0x27, 0xe6, 0x03, 0x00, 0xf4,
+ 0x07, 0x33, 0xfd, 0x00, 0xb6, 0xe7, 0x37, 0xcc, 0xe8, 0xfd, 0xeb, 0x2e,
+ 0x1a, 0x2a, 0x09, 0x34, 0x16, 0xee, 0x3a, 0xa3, 0x53, 0xf6, 0xc9, 0xfa,
+ 0xdf, 0xc8, 0xdd, 0xfd, 0x18, 0xd3, 0x05, 0xd8, 0x0f, 0x44, 0xc9, 0x1d,
+ 0xbd, 0xe3, 0x3c, 0xda, 0xd0, 0xce, 0xd7, 0x3f, 0xfe, 0xf4, 0xef, 0xe2,
+ 0x2f, 0x0e, 0xe6, 0xcb, 0x40, 0x21, 0x2c, 0xec, 0x14, 0xe7, 0xe8, 0x3d,
+ 0xea, 0xdf, 0xf7, 0xe7, 0xe0, 0x20, 0x02, 0x04, 0xe9, 0xe2, 0x33, 0xe1,
+ 0xe8, 0x0c, 0xda, 0x2f, 0x38, 0x26, 0x04, 0xf5, 0x2f, 0xf1, 0x29, 0xe4,
+ 0xe1, 0xd8, 0x10, 0xc3, 0xf5, 0x14, 0xff, 0x13, 0x0b, 0x0b, 0xdd, 0x04,
+ 0x25, 0xe3, 0xcf, 0xd3, 0x15, 0xf9, 0xf3, 0xfe, 0x0a, 0xce, 0xdb, 0x15,
+ 0x56, 0x16, 0x0b, 0xcf, 0xff, 0x0e, 0x0b, 0xec, 0xe2, 0x0d, 0xf5, 0xfc,
+ 0x0a, 0xd0, 0xe8, 0xfc, 0xf9, 0x5d, 0xf0, 0x1a, 0xfb, 0xc7, 0x22, 0xe9,
+ 0xea, 0x0d, 0xf0, 0xf9, 0xd6, 0xc9, 0x00, 0xd4, 0xfa, 0x1d, 0x29, 0x14,
+ 0x14, 0xeb, 0x0f, 0xe3, 0xec, 0xd3, 0x27, 0xda, 0x24, 0xfc, 0xf4, 0x1f,
+ 0x0c, 0xea, 0xe7, 0x0f, 0x22, 0xf1, 0xe5, 0xcc, 0x26, 0xff, 0xea, 0x1f,
+ 0xff, 0xc4, 0xff, 0x22, 0x51, 0x27, 0xfd, 0xdf, 0x24, 0xe1, 0xf3, 0xe3,
+ 0xe6, 0xdd, 0xe2, 0xe8, 0xcb, 0xec, 0xe4, 0xd4, 0x20, 0x1d, 0xd9, 0xc5,
+ 0xd9, 0x1e, 0xf0, 0xd5, 0x03, 0xc0, 0xf3, 0x21, 0x09, 0xf7, 0x9e, 0xd5,
+ 0x45, 0x43, 0x08, 0xe2, 0xdc, 0x03, 0xfe, 0xd8, 0xf3, 0x1a, 0x19, 0x10,
+ 0xfb, 0xf7, 0xf3, 0x34, 0xf9, 0x1b, 0xf2, 0x08, 0xf6, 0xc9, 0x24, 0xd2,
+ 0xf6, 0xed, 0xf3, 0xe8, 0xf2, 0x02, 0xed, 0xe0, 0x04, 0x45, 0x33, 0x1e,
+ 0x31, 0xf2, 0x0e, 0xcf, 0xed, 0x08, 0xfc, 0xd9, 0xf9, 0xe1, 0xfb, 0x14,
+ 0x16, 0xf8, 0xe3, 0xf2, 0xf6, 0xf7, 0xe3, 0xe3, 0xff, 0xde, 0xdd, 0x51,
+ 0x14, 0xde, 0x09, 0xd4, 0x35, 0x3e, 0x1e, 0xe4, 0x33, 0xe9, 0x30, 0xd5,
+ 0xf0, 0xe6, 0x19, 0xee, 0xd2, 0xfa, 0x1e, 0x12, 0xff, 0x20, 0xf3, 0xfa,
+ 0x10, 0xff, 0xe9, 0xe3, 0x38, 0x1c, 0xe4, 0x12, 0xf5, 0xf5, 0xd5, 0x15,
+ 0x51, 0x16, 0xe1, 0xcf, 0xe2, 0x17, 0x1a, 0xd7, 0xf5, 0x20, 0xfa, 0x02,
+ 0xfa, 0xe7, 0x13, 0x06, 0xec, 0x53, 0xef, 0x0b, 0x13, 0xd0, 0x17, 0xff,
+ 0x0b, 0xf3, 0x3d, 0x11, 0xf2, 0xd7, 0xf8, 0xe9, 0xf6, 0x0e, 0x34, 0x0e,
+ 0x02, 0xdf, 0x1b, 0xea, 0xf0, 0xeb, 0x2f, 0xe3, 0x14, 0xe2, 0xfe, 0x14,
+ 0x1d, 0xeb, 0xc7, 0xf6, 0x05, 0xfb, 0x00, 0xd5, 0x6c, 0xf8, 0xd7, 0x7f,
+ 0x01, 0xe3, 0xf2, 0xf4, 0x64, 0x36, 0x0b, 0xdf, 0xe4, 0xf8, 0xc9, 0x21,
+ 0x37, 0x04, 0xf1, 0xf3, 0x1a, 0x1d, 0xfc, 0xfe, 0x40, 0xfc, 0xf4, 0x12,
+ 0x09, 0xff, 0x04, 0x19, 0x03, 0x22, 0xef, 0xf5, 0x2a, 0x37, 0xf3, 0xfb,
+ 0xe9, 0xdb, 0xf2, 0xe6, 0xc2, 0xf4, 0xd2, 0x08, 0x02, 0xcb, 0xff, 0x2a,
+ 0xfe, 0x17, 0xf4, 0x13, 0xc5, 0xf2, 0x86, 0x27, 0x03, 0xec, 0x23, 0x16,
+ 0x04, 0x01, 0xe3, 0xf0, 0x1b, 0x2c, 0x14, 0xf9, 0xfb, 0xfb, 0xfb, 0xf7,
+ 0xf1, 0x01, 0x96, 0x2a, 0x3a, 0x33, 0xf3, 0xeb, 0x16, 0x01, 0x07, 0xd5,
+ 0x38, 0xdd, 0xff, 0x06, 0xe8, 0xed, 0xe9, 0x1e, 0xe6, 0x26, 0x0f, 0x05,
+ 0x19, 0x34, 0x1b, 0xfa, 0xee, 0xd7, 0xd7, 0xd7, 0xc4, 0xef, 0xf6, 0x3f,
+ 0x39, 0xf6, 0xdf, 0xfe, 0x0c, 0xe4, 0xdc, 0xbb, 0x5e, 0x20, 0x00, 0xba,
+ 0xbf, 0x10, 0x19, 0xcf, 0x02, 0xc9, 0x01, 0xf4, 0x06, 0x02, 0xe4, 0x4b,
+ 0x00, 0xe7, 0x00, 0x04, 0xfc, 0x1e, 0xd6, 0xff, 0x00, 0xa9, 0xeb, 0xef,
+ 0xee, 0xff, 0xe9, 0xbc, 0x06, 0x00, 0xdc, 0xf9, 0xe7, 0x51, 0x7c, 0x03,
+ 0xea, 0xfb, 0xfe, 0xdf, 0x22, 0x12, 0x1c, 0x3b, 0x08, 0xd9, 0x28, 0x5e,
+ 0xe0, 0xef, 0xf1, 0xee, 0x1d, 0xeb, 0xfd, 0xf3, 0x36, 0x05, 0xd8, 0xc6,
+ 0x39, 0xf9, 0xf4, 0xf8, 0xf5, 0x05, 0xfb, 0xc6, 0xf8, 0xc1, 0x0f, 0x07,
+ 0x2e, 0x03, 0x16, 0x40, 0xf6, 0xd2, 0x16, 0xe6, 0xcf, 0x05, 0xf7, 0x2f,
+ 0x26, 0x0f, 0x27, 0xee, 0x19, 0x25, 0xb7, 0xde, 0x48, 0x18, 0xef, 0x13,
+ 0xf6, 0xe1, 0x12, 0xfc, 0xfd, 0x21, 0xf5, 0xe0, 0x3d, 0x5c, 0xe9, 0x02,
+ 0xee, 0xea, 0xe9, 0x06, 0xd8, 0x11, 0xf1, 0x3e, 0x23, 0xb6, 0x1e, 0x52,
+ 0xf2, 0x20, 0xcc, 0xfc, 0x00, 0x7f, 0xb0, 0x3d, 0x20, 0xee, 0x2f, 0xf8,
+ 0x20, 0x1e, 0xdd, 0xcb, 0xe2, 0x3b, 0x00, 0xf6, 0x22, 0x11, 0x1f, 0x2f,
+ 0xe8, 0x1a, 0xce, 0x08, 0x1d, 0x0f, 0x10, 0xc7, 0x2b, 0xf8, 0x04, 0xc9,
+ 0x2a, 0xe2, 0x01, 0x16, 0x01, 0xf4, 0xf1, 0x12, 0xbc, 0x00, 0x0c, 0x00,
+ 0x29, 0x29, 0x16, 0x04, 0xf7, 0xdc, 0xe5, 0x03, 0x27, 0xb0, 0xee, 0x06,
+ 0xfd, 0xe2, 0x23, 0xef, 0x18, 0x08, 0x21, 0x00, 0xd2, 0x39, 0x01, 0x16,
+ 0xfb, 0x22, 0x14, 0x01, 0xeb, 0x13, 0x22, 0xf2, 0x48, 0x0a, 0x2a, 0xc9,
+ 0x00, 0xfc, 0xd2, 0xe9, 0xda, 0xd7, 0xe6, 0x38, 0x54, 0xdd, 0xe7, 0x2f,
+ 0x21, 0xe3, 0xfa, 0xde, 0xa9, 0x08, 0xa1, 0x12, 0x27, 0xb4, 0x45, 0x5f,
+ 0xf3, 0x09, 0x2a, 0xdb, 0x33, 0xf5, 0x01, 0xb5, 0xd2, 0xed, 0x14, 0x05,
+ 0x11, 0xd5, 0xd1, 0xed, 0x1f, 0x29, 0x2b, 0xc0, 0x28, 0xee, 0x35, 0xf2,
+ 0x07, 0xd7, 0x13, 0x07, 0xef, 0x22, 0xc6, 0x10, 0xd5, 0xfc, 0x17, 0xf6,
+ 0x23, 0x21, 0x03, 0xf1, 0xfd, 0xfd, 0xdb, 0xd1, 0xcf, 0xfc, 0x02, 0xce,
+ 0x2b, 0xfe, 0xcd, 0x0e, 0xfe, 0x03, 0xdf, 0xd3, 0x02, 0x2e, 0xf3, 0xd5,
+ 0xc3, 0x54, 0x4d, 0xf1, 0xef, 0xd7, 0xfe, 0xf4, 0xb3, 0x02, 0x8f, 0x37,
+ 0x2a, 0x1a, 0x20, 0x01, 0x1a, 0x01, 0xc3, 0xa7, 0x21, 0xdc, 0x01, 0xf5,
+ 0xf9, 0x09, 0xf3, 0xb0, 0xb5, 0xd6, 0x93, 0xc6, 0xce, 0x22, 0x23, 0x48,
+ 0x10, 0x92, 0x16, 0xe1, 0x52, 0xff, 0x09, 0x08, 0xec, 0xe5, 0x4f, 0x34,
+ 0x08, 0xed, 0xdc, 0xdf, 0x43, 0x22, 0xf8, 0xd9, 0x1c, 0xdc, 0xd7, 0xcc,
+ 0x0d, 0xdf, 0xc1, 0xf2, 0xdd, 0x39, 0x08, 0xea, 0xdf, 0xc3, 0xf5, 0xfb,
+ 0xfa, 0x0f, 0xbf, 0x11, 0x33, 0x09, 0x1e, 0xdb, 0x2a, 0xe1, 0xac, 0x27,
+ 0xfc, 0x0c, 0x35, 0x06, 0x20, 0x32, 0x0c, 0x09, 0xdc, 0x29, 0x15, 0x04,
+ 0xec, 0x0d, 0x2b, 0x06, 0xe1, 0x11, 0x18, 0xdb, 0x50, 0x17, 0x02, 0xe3,
+ 0x0c, 0xf7, 0xf2, 0x06, 0xfc, 0xf3, 0xd6, 0x33, 0x3d, 0xd0, 0x00, 0x35,
+ 0x17, 0xc0, 0xd4, 0x0e, 0xd8, 0xb0, 0xc7, 0x1d, 0x25, 0xd6, 0x15, 0x43,
+ 0xfd, 0x2b, 0x00, 0xe1, 0x1d, 0xfb, 0x00, 0xcb, 0x0c, 0xff, 0x0a, 0x32,
+ 0xf2, 0xe3, 0x81, 0x07, 0x1c, 0x1e, 0x0e, 0xce, 0x31, 0x1a, 0x2e, 0xf4,
+ 0x2b, 0x8c, 0x07, 0xf8, 0xef, 0x14, 0xd2, 0x01, 0xe5, 0xf5, 0x1d, 0x0a,
+ 0x36, 0x17, 0x02, 0xef, 0x12, 0xf8, 0xeb, 0xe1, 0xde, 0xe0, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x09, 0x10, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+ 0x1c, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x40, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x20, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x6d, 0x6f, 0x64, 0x65,
+ 0x6c, 0x2f, 0x63, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x32, 0x2f, 0x43,
+ 0x6f, 0x6e, 0x76, 0x32, 0x44, 0x00, 0x00, 0x00, 0x40, 0xe0, 0xff, 0xff,
+ 0x08, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
+ 0x9e, 0xa1, 0x50, 0x3c, 0x50, 0x1c, 0x4c, 0x3c, 0x90, 0x93, 0x56, 0x3c,
+ 0x35, 0x30, 0x41, 0x3c, 0xa1, 0x39, 0x7f, 0x3c, 0x7a, 0xb4, 0x42, 0x3c,
+ 0x18, 0x5c, 0x42, 0x3c, 0x76, 0x61, 0x5a, 0x3c, 0x4b, 0xc4, 0x49, 0x3c,
+ 0x8d, 0x97, 0x2e, 0x3c, 0xb0, 0x47, 0x2c, 0x3c, 0xe6, 0xd2, 0x65, 0x3c,
+ 0xac, 0xdd, 0x33, 0x3c, 0xb5, 0xd8, 0x3b, 0x3c, 0x74, 0x2d, 0x39, 0x3c,
+ 0xce, 0x97, 0x6b, 0x3c, 0x44, 0x76, 0x7e, 0x3c, 0x9e, 0x2d, 0x77, 0x3c,
+ 0xa1, 0x3a, 0x6c, 0x3c, 0x19, 0x59, 0x5e, 0x3c, 0xc3, 0xa0, 0x3b, 0x3c,
+ 0xe8, 0xa4, 0x6c, 0x3c, 0xff, 0xc0, 0x2f, 0x3c, 0x98, 0xca, 0x75, 0x3c,
+ 0x0c, 0x4b, 0x3f, 0x3c, 0x14, 0x69, 0x57, 0x3c, 0x15, 0xcb, 0x2b, 0x3c,
+ 0x1c, 0x64, 0x51, 0x3c, 0x09, 0x35, 0x6d, 0x3c, 0xd0, 0x81, 0x65, 0x3c,
+ 0x13, 0x9f, 0x5c, 0x3c, 0xc9, 0x18, 0x4d, 0x3c, 0xea, 0x5e, 0x5b, 0x3c,
+ 0xac, 0x53, 0x11, 0x3c, 0xc3, 0x23, 0x48, 0x3c, 0x4f, 0x62, 0x41, 0x3c,
+ 0x0a, 0x8b, 0x22, 0x3c, 0xc3, 0xc3, 0x64, 0x3c, 0xe5, 0x35, 0x24, 0x3c,
+ 0x1a, 0x9d, 0x20, 0x3c, 0x85, 0x2b, 0x77, 0x3c, 0xb7, 0xef, 0x41, 0x3c,
+ 0x02, 0x12, 0x52, 0x3c, 0xec, 0xe5, 0x41, 0x3c, 0xeb, 0x01, 0x2e, 0x3c,
+ 0xb8, 0x84, 0x32, 0x3c, 0xb5, 0x5d, 0x3b, 0x3c, 0x91, 0x04, 0x69, 0x3c,
+ 0x63, 0x74, 0x57, 0x3c, 0x4c, 0xb8, 0x5a, 0x3c, 0x85, 0xdf, 0x26, 0x3c,
+ 0xa1, 0x5c, 0x37, 0x3c, 0x6d, 0x71, 0x1a, 0x3c, 0xa0, 0xc3, 0x5e, 0x3c,
+ 0xde, 0xfe, 0x72, 0x3c, 0x86, 0x98, 0x37, 0x3c, 0x19, 0xf1, 0x44, 0x3c,
+ 0x34, 0x14, 0x2d, 0x3c, 0xfe, 0x59, 0x68, 0x3c, 0xe2, 0xbb, 0x7a, 0x3c,
+ 0xae, 0xab, 0x5b, 0x3c, 0xc6, 0x63, 0x3f, 0x3c, 0x3a, 0x87, 0x5f, 0x3c,
+ 0xba, 0x65, 0x25, 0x3c, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0xe4, 0xff, 0xff,
+ 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x10, 0xf6, 0xff, 0xff,
+ 0xf1, 0xf8, 0xff, 0xff, 0x38, 0x00, 0x00, 0x00, 0x3a, 0xff, 0xff, 0xff,
+ 0xf6, 0x01, 0x00, 0x00, 0xac, 0xe7, 0xff, 0xff, 0x7c, 0x01, 0x00, 0x00,
+ 0x71, 0xf6, 0xff, 0xff, 0x29, 0x03, 0x00, 0x00, 0xea, 0x02, 0x00, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0xf2, 0x01, 0x00, 0x00, 0x4b, 0xfe, 0xff, 0xff,
+ 0x55, 0x02, 0x00, 0x00, 0x8a, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00,
+ 0x8b, 0xff, 0xff, 0xff, 0x19, 0xfb, 0xff, 0xff, 0x22, 0x00, 0x00, 0x00,
+ 0x7d, 0x5f, 0xff, 0xff, 0xf6, 0x05, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff,
+ 0xbd, 0x00, 0x00, 0x00, 0x8f, 0x0d, 0x00, 0x00, 0xf5, 0x00, 0x00, 0x00,
+ 0x28, 0x02, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x98, 0x02, 0x00, 0x00,
+ 0x1e, 0x05, 0x00, 0x00, 0x3f, 0xfb, 0xff, 0xff, 0x0a, 0xfe, 0xff, 0xff,
+ 0xb1, 0xfd, 0xff, 0xff, 0xca, 0xe4, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02,
+ 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x90, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x7f, 0x00, 0x00, 0x00, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x61, 0x63,
+ 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x31, 0x2f, 0x52,
+ 0x65, 0x6c, 0x75, 0x3b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x62, 0x61,
+ 0x74, 0x63, 0x68, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x31, 0x2f, 0x46, 0x75, 0x73, 0x65,
+ 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4e, 0x6f, 0x72, 0x6d, 0x56, 0x33,
+ 0x3b, 0x63, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x31, 0x2f, 0x62, 0x69,
+ 0x61, 0x73, 0x3b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x63, 0x6f, 0x6e,
+ 0x76, 0x32, 0x64, 0x5f, 0x31, 0x2f, 0x42, 0x69, 0x61, 0x73, 0x41, 0x64,
+ 0x64, 0x3b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x63, 0x6f, 0x6e, 0x76,
+ 0x32, 0x64, 0x5f, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x44, 0x00,
+ 0x88, 0xe4, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00,
+ 0x20, 0x00, 0x00, 0x00, 0xdb, 0x41, 0x9f, 0x38, 0xf6, 0x51, 0xd5, 0x38,
+ 0x08, 0xc1, 0x94, 0x38, 0x91, 0x9e, 0x9a, 0x38, 0xe4, 0x51, 0x82, 0x38,
+ 0x5f, 0xb3, 0x8b, 0x38, 0x68, 0xf6, 0x99, 0x38, 0xee, 0xff, 0x86, 0x38,
+ 0x30, 0x75, 0x3f, 0x38, 0xa0, 0x86, 0x46, 0x38, 0xc9, 0x2e, 0x59, 0x38,
+ 0xb7, 0xa2, 0x88, 0x38, 0xa5, 0x7e, 0x99, 0x38, 0xe0, 0x8b, 0x8b, 0x38,
+ 0x23, 0x88, 0x8c, 0x38, 0x05, 0x82, 0x7d, 0x38, 0x84, 0xa4, 0x8d, 0x38,
+ 0xed, 0xff, 0x86, 0x38, 0xa7, 0x18, 0x5c, 0x38, 0x3d, 0x7d, 0xe7, 0x37,
+ 0xe0, 0x04, 0x68, 0x38, 0x08, 0x0e, 0x9a, 0x38, 0x87, 0x1d, 0x58, 0x38,
+ 0xb6, 0x3d, 0x54, 0x38, 0xb1, 0x4c, 0x4c, 0x38, 0x8b, 0x42, 0x9d, 0x38,
+ 0xc6, 0x03, 0x62, 0x38, 0x4d, 0xd9, 0x8d, 0x38, 0xb2, 0x5b, 0x2f, 0x38,
+ 0x5a, 0x58, 0x78, 0x38, 0xe0, 0x0b, 0x80, 0x38, 0x26, 0xc3, 0x69, 0x38,
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xe7, 0xff, 0xff,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0xf9, 0xf0, 0x22, 0xca,
+ 0x13, 0x05, 0x05, 0x14, 0x04, 0xe6, 0x10, 0xf4, 0xe2, 0x0f, 0xfa, 0x81,
+ 0x24, 0xfb, 0xde, 0x14, 0x03, 0x01, 0xc0, 0xdc, 0x13, 0xef, 0x0f, 0xc2,
+ 0x1a, 0xcf, 0x1a, 0x22, 0x1b, 0xf4, 0x16, 0x00, 0x08, 0xe3, 0xf8, 0x04,
+ 0x0a, 0xee, 0x09, 0x02, 0x10, 0xfb, 0x0b, 0x1d, 0xff, 0xac, 0x2d, 0xf3,
+ 0x10, 0xf1, 0x02, 0x0a, 0x01, 0xb8, 0x0a, 0xf7, 0xd7, 0x0c, 0x00, 0x8f,
+ 0x16, 0xbd, 0xf6, 0x17, 0x04, 0xe1, 0xda, 0xe4, 0x0b, 0x9f, 0x08, 0xa8,
+ 0x1e, 0xda, 0x17, 0x11, 0x1b, 0xbe, 0xca, 0x00, 0x0d, 0xbb, 0x02, 0x12,
+ 0x0c, 0xb0, 0x07, 0x06, 0x0b, 0x06, 0x0f, 0xfb, 0x07, 0xb6, 0x2d, 0xff,
+ 0x10, 0xe6, 0x06, 0x07, 0x07, 0xa7, 0x0e, 0x11, 0xef, 0x03, 0x09, 0xd5,
+ 0x01, 0xb7, 0xf8, 0x0d, 0x01, 0xb5, 0xf0, 0xff, 0x0a, 0x96, 0x05, 0xe7,
+ 0xf4, 0xfb, 0xe8, 0x07, 0x00, 0x9e, 0xb8, 0x02, 0x0d, 0xd7, 0xfa, 0x0b,
+ 0xe5, 0xc0, 0x02, 0x0a, 0xf1, 0x04, 0xe4, 0xe8, 0x03, 0x02, 0xf3, 0x05,
+ 0xec, 0x02, 0xc2, 0xc0, 0x07, 0x05, 0xfb, 0xd1, 0x02, 0xd7, 0x03, 0xfd,
+ 0x05, 0x07, 0xfe, 0x00, 0xbc, 0xfd, 0xb1, 0xa1, 0x02, 0x04, 0xf2, 0x00,
+ 0x05, 0xc6, 0x03, 0x12, 0x05, 0x06, 0x03, 0xf7, 0xa8, 0xfa, 0x8d, 0x81,
+ 0x06, 0x01, 0xe5, 0x0d, 0xfe, 0xa8, 0x00, 0x05, 0x04, 0x06, 0xfa, 0x00,
+ 0xfa, 0x07, 0x0b, 0x09, 0x07, 0x09, 0x00, 0x0f, 0x06, 0x07, 0x08, 0x03,
+ 0x09, 0x07, 0xf9, 0xf8, 0xe3, 0x06, 0x0a, 0x05, 0x05, 0x06, 0xfa, 0x0f,
+ 0x06, 0x07, 0x06, 0x0d, 0x0c, 0x03, 0x0c, 0xf5, 0xc5, 0x00, 0x00, 0xfa,
+ 0xff, 0x00, 0xdc, 0x07, 0x02, 0xf8, 0xfe, 0x0e, 0x02, 0x05, 0x05, 0xed,
+ 0x08, 0x04, 0x08, 0x04, 0xfb, 0x0b, 0xf5, 0x02, 0x04, 0x04, 0x07, 0xfa,
+ 0x04, 0x05, 0xfc, 0x03, 0x05, 0x09, 0x03, 0x04, 0x06, 0x05, 0xfd, 0x00,
+ 0x07, 0x04, 0x06, 0x01, 0xf8, 0xf8, 0xfa, 0xfe, 0x02, 0x01, 0x03, 0x05,
+ 0xfb, 0x05, 0xe4, 0x07, 0x00, 0x00, 0x05, 0x0a, 0xe9, 0xd8, 0xd3, 0xfd,
+ 0xec, 0xc8, 0xb1, 0xa2, 0xf5, 0xdf, 0xf8, 0xcc, 0xfd, 0xb3, 0xdf, 0xf9,
+ 0xb5, 0xce, 0x96, 0xd3, 0x8b, 0xa1, 0xca, 0xe5, 0xd2, 0xac, 0xb2, 0x12,
+ 0xc4, 0xc1, 0xdc, 0xe1, 0xf0, 0x03, 0xcb, 0x81, 0x8b, 0xee, 0xfd, 0xf4,
+ 0xed, 0x03, 0x93, 0x0f, 0xed, 0xf9, 0x05, 0xbb, 0x0e, 0x0f, 0xf1, 0x02,
+ 0xf2, 0xdd, 0xde, 0xde, 0x0b, 0x00, 0xfc, 0x06, 0x0a, 0xe5, 0x14, 0xd8,
+ 0x16, 0x15, 0xfc, 0x03, 0xde, 0x07, 0x05, 0x09, 0x0d, 0x12, 0xef, 0xfd,
+ 0x14, 0x10, 0x12, 0x0a, 0xf5, 0x04, 0xd9, 0xd1, 0xea, 0x19, 0x10, 0x12,
+ 0x00, 0x11, 0xb4, 0x00, 0x01, 0x11, 0x08, 0xed, 0x12, 0x00, 0x06, 0x01,
+ 0x01, 0x17, 0x04, 0xfd, 0x09, 0x07, 0x03, 0x00, 0x08, 0xf5, 0x0d, 0xfc,
+ 0x0c, 0x04, 0x1b, 0xfb, 0x0b, 0x0b, 0x0a, 0x09, 0x09, 0x04, 0xfc, 0xfe,
+ 0x0a, 0x02, 0x0f, 0xec, 0xf9, 0x02, 0x14, 0xf1, 0xf9, 0x14, 0x0f, 0x0c,
+ 0x0a, 0x10, 0xd7, 0xff, 0x10, 0x0c, 0x19, 0xe4, 0xf7, 0x00, 0xec, 0xca,
+ 0x14, 0x0f, 0x09, 0x08, 0x05, 0x07, 0xd5, 0xef, 0x0c, 0x07, 0x06, 0xe8,
+ 0xf8, 0xfc, 0xe2, 0xbd, 0x0a, 0x14, 0x0b, 0x0a, 0x03, 0x0b, 0xe1, 0xe6,
+ 0x16, 0x0b, 0x15, 0xa3, 0xf9, 0xfa, 0xf3, 0xd6, 0x0c, 0x1c, 0x09, 0x07,
+ 0xf9, 0x10, 0xe9, 0xf8, 0x0f, 0x07, 0x09, 0xb3, 0xee, 0xf9, 0xa6, 0xca,
+ 0xe4, 0xfc, 0xde, 0xe8, 0xcb, 0xff, 0xeb, 0xf0, 0x09, 0xc8, 0xe5, 0xc8,
+ 0xfe, 0xfa, 0xca, 0xdb, 0xf5, 0x0c, 0xfc, 0xfc, 0xc2, 0x06, 0xdf, 0xed,
+ 0x0b, 0xf5, 0xfb, 0x0c, 0xf1, 0xf5, 0xfe, 0xd2, 0x01, 0x0e, 0x00, 0xfe,
+ 0xe7, 0x0e, 0xcd, 0xf2, 0x07, 0x00, 0x0a, 0xf8, 0xc2, 0xbe, 0xc3, 0xc3,
+ 0x0b, 0xe4, 0x08, 0x04, 0x89, 0x9f, 0xd8, 0x0e, 0x97, 0x06, 0xf1, 0xcb,
+ 0xc1, 0xab, 0xd6, 0xde, 0x0b, 0x07, 0x07, 0x05, 0x9c, 0xbe, 0xb8, 0x05,
+ 0xc8, 0x02, 0x05, 0xd2, 0xa5, 0x9e, 0x0b, 0xc0, 0x0a, 0xfa, 0x08, 0x03,
+ 0x81, 0xd7, 0xc4, 0x07, 0xd0, 0x00, 0x02, 0xdb, 0xed, 0xb0, 0xd9, 0x1d,
+ 0x0a, 0xe4, 0xfb, 0xfb, 0x0e, 0xe1, 0x0e, 0xfb, 0xf8, 0x06, 0x02, 0x06,
+ 0x81, 0x8d, 0xf9, 0xf4, 0x05, 0x02, 0x08, 0x07, 0xed, 0xe8, 0x01, 0x08,
+ 0xd7, 0x0f, 0x04, 0x9f, 0xae, 0x9e, 0x13, 0xc2, 0x05, 0xf5, 0x01, 0x02,
+ 0xf2, 0xbe, 0xf8, 0xff, 0x96, 0x06, 0xf2, 0x93, 0xf7, 0xe7, 0xf5, 0xff,
+ 0x08, 0x07, 0x07, 0x03, 0x0d, 0xff, 0xff, 0xf7, 0x04, 0x09, 0x07, 0x12,
+ 0xcf, 0xb8, 0xe2, 0x01, 0x1b, 0x0f, 0x05, 0x05, 0x09, 0x15, 0x0a, 0x06,
+ 0xea, 0x08, 0x0b, 0xf0, 0xce, 0xbf, 0x07, 0x05, 0x0e, 0xff, 0x08, 0x09,
+ 0x06, 0xc1, 0x0a, 0x0c, 0x97, 0x0a, 0xf5, 0xf5, 0xf4, 0xe5, 0xf7, 0xff,
+ 0x0f, 0x06, 0x0c, 0x00, 0x0a, 0x02, 0x07, 0x0a, 0x02, 0x07, 0x0e, 0x07,
+ 0xe1, 0xa4, 0xfe, 0x0a, 0x15, 0x1d, 0x10, 0x0f, 0x0a, 0x02, 0x08, 0x0f,
+ 0xed, 0x0f, 0x18, 0xf6, 0xe7, 0xac, 0x17, 0xff, 0x16, 0x0d, 0x0a, 0x12,
+ 0x0c, 0xd3, 0x08, 0x13, 0xbc, 0x0b, 0x01, 0xf4, 0x81, 0x82, 0xf1, 0xf3,
+ 0x18, 0xfc, 0x0a, 0x10, 0xe7, 0xd5, 0xf8, 0x10, 0xdb, 0x0f, 0x04, 0xdf,
+ 0x9e, 0xbc, 0xf7, 0xaf, 0x02, 0x06, 0x0f, 0x0e, 0xd6, 0xd6, 0x9c, 0xf7,
+ 0xd1, 0x0d, 0x0a, 0x87, 0xe5, 0xf4, 0x06, 0xa3, 0x02, 0x1e, 0x0f, 0x0a,
+ 0xff, 0x07, 0xb4, 0xeb, 0xea, 0x0c, 0x17, 0xca, 0xe8, 0xec, 0xf4, 0x06,
+ 0x0c, 0x13, 0x11, 0x0f, 0x04, 0x09, 0x0a, 0x04, 0x0c, 0x12, 0x0c, 0x0f,
+ 0xe5, 0xf1, 0x0d, 0xc3, 0x07, 0x1f, 0x0d, 0x09, 0x0a, 0x13, 0xcc, 0xf4,
+ 0x0f, 0x11, 0x13, 0xe0, 0xeb, 0xf3, 0x1a, 0xcf, 0xec, 0x15, 0xfc, 0x04,
+ 0xfd, 0x0f, 0xc2, 0xf5, 0xfb, 0x02, 0x07, 0x00, 0x0d, 0x03, 0x27, 0x0b,
+ 0x0b, 0x0c, 0x06, 0x08, 0x15, 0x15, 0xfc, 0x05, 0x12, 0x0b, 0x14, 0x1f,
+ 0x07, 0x0a, 0x1c, 0xf2, 0x0f, 0x16, 0x0d, 0x07, 0x0c, 0x1c, 0xf5, 0xfb,
+ 0x15, 0x1a, 0x16, 0x0d, 0xfb, 0xff, 0x18, 0xe8, 0xfc, 0x15, 0x07, 0x08,
+ 0xf8, 0x09, 0xdc, 0x11, 0x01, 0x0f, 0x17, 0xfe, 0x9d, 0xe2, 0xf4, 0x81,
+ 0x09, 0x06, 0xfe, 0x05, 0xe4, 0x00, 0xbd, 0x03, 0x03, 0x03, 0x0d, 0x9f,
+ 0xef, 0xe2, 0x06, 0xa1, 0x0d, 0x21, 0x0c, 0x0c, 0xe9, 0x13, 0xc0, 0x06,
+ 0x16, 0x0b, 0x1b, 0x11, 0xe5, 0xee, 0x14, 0xd6, 0x09, 0x0f, 0x03, 0x06,
+ 0xb5, 0xf9, 0xb9, 0xde, 0xf7, 0x0a, 0xe8, 0xec, 0xbf, 0xab, 0x0f, 0x23,
+ 0x0e, 0x05, 0x0d, 0x06, 0x02, 0xf8, 0x18, 0x07, 0x08, 0x0e, 0x1f, 0xe4,
+ 0xc7, 0xaa, 0x0c, 0xee, 0x05, 0x05, 0x05, 0x02, 0xdb, 0xff, 0xe9, 0xf1,
+ 0xfc, 0x05, 0xef, 0xf5, 0xcf, 0x13, 0xf4, 0xd8, 0xce, 0xe4, 0xe9, 0xe4,
+ 0xd6, 0xc5, 0xb3, 0x00, 0xec, 0xe3, 0xe9, 0xaf, 0xfc, 0xaa, 0x1b, 0x1d,
+ 0x05, 0xf6, 0xfa, 0xfe, 0x13, 0xf3, 0x1a, 0xd6, 0x11, 0xfa, 0x16, 0xfa,
+ 0x15, 0xf9, 0xfe, 0x05, 0xde, 0xdb, 0x02, 0x01, 0x02, 0xd6, 0x01, 0x06,
+ 0xff, 0xff, 0x09, 0xcd, 0x1e, 0x22, 0xf7, 0xf9, 0x1a, 0x09, 0x08, 0x02,
+ 0x0b, 0xfd, 0xe5, 0x0d, 0x13, 0xff, 0x12, 0xb4, 0x02, 0xfc, 0xf0, 0xff,
+ 0xff, 0x20, 0x0e, 0x12, 0xfb, 0x17, 0xfb, 0xf7, 0xfe, 0x0c, 0x12, 0xf3,
+ 0xfc, 0xf7, 0x0a, 0x0a, 0x04, 0x10, 0x07, 0x0c, 0x08, 0x04, 0x02, 0x09,
+ 0x02, 0x0d, 0x07, 0xfd, 0xf9, 0xe6, 0xf8, 0xff, 0x0b, 0xf6, 0x0e, 0x0a,
+ 0x04, 0xec, 0x01, 0x14, 0xf7, 0x06, 0x06, 0xf2, 0xdd, 0xf7, 0xbc, 0xbf,
+ 0xdd, 0x04, 0xe4, 0xe8, 0xc3, 0x0b, 0xd5, 0xb2, 0xf9, 0xef, 0xea, 0xb1,
+ 0x01, 0xfd, 0x17, 0xfc, 0x19, 0x14, 0x0d, 0x13, 0x0f, 0x0e, 0x04, 0xdc,
+ 0x04, 0x16, 0x0d, 0xfa, 0x08, 0x05, 0x05, 0x0d, 0x03, 0x0a, 0x0e, 0x0c,
+ 0x12, 0xff, 0x04, 0x07, 0x08, 0x15, 0x07, 0x0a, 0xf7, 0x0f, 0xf3, 0xc6,
+ 0xdd, 0x0b, 0xa6, 0x99, 0x01, 0x17, 0xe2, 0x8f, 0x02, 0xb5, 0x02, 0xcc,
+ 0x0d, 0x15, 0x0c, 0x0b, 0x06, 0x11, 0xe7, 0xe4, 0x07, 0x11, 0x0f, 0x81,
+ 0x11, 0xe9, 0x0f, 0x29, 0x04, 0x07, 0x0c, 0x0b, 0xd3, 0x02, 0xef, 0xeb,
+ 0x09, 0x03, 0x02, 0xda, 0x0e, 0xde, 0x08, 0x0f, 0x06, 0xdb, 0xf4, 0x1c,
+ 0x0c, 0x00, 0xfb, 0xfe, 0x06, 0xe7, 0x19, 0xfb, 0x02, 0xfb, 0x02, 0x23,
+ 0xe7, 0xa8, 0xf6, 0x28, 0x08, 0xdf, 0xfc, 0xfa, 0x07, 0xb6, 0x14, 0xff,
+ 0xce, 0x06, 0xfe, 0x03, 0xb1, 0x85, 0x0f, 0x01, 0xfd, 0x00, 0xfc, 0xf6,
+ 0x01, 0xf0, 0xfd, 0xcc, 0xa9, 0xfc, 0xe5, 0xfa, 0x05, 0xe3, 0xed, 0x18,
+ 0x08, 0x1b, 0x03, 0x04, 0x0f, 0x06, 0x16, 0xee, 0x01, 0x04, 0x19, 0x0d,
+ 0xdc, 0xb6, 0x1e, 0xfe, 0x04, 0x10, 0x0b, 0x04, 0xef, 0xe8, 0xfe, 0xf7,
+ 0xee, 0x09, 0x06, 0x07, 0xc4, 0x90, 0x3f, 0x02, 0xfc, 0xcb, 0xd0, 0xcd,
+ 0xfe, 0xec, 0x07, 0x81, 0x8d, 0xb8, 0x87, 0x14, 0x04, 0xfb, 0xf0, 0x0e,
+ 0x0c, 0x14, 0x07, 0x0c, 0x0e, 0x10, 0x0d, 0xf9, 0x13, 0x03, 0x19, 0x10,
+ 0xbb, 0xd3, 0x14, 0xe7, 0x10, 0x35, 0x14, 0x05, 0xff, 0x1f, 0xba, 0x0f,
+ 0x02, 0x17, 0x1e, 0xfd, 0xb3, 0x97, 0x5c, 0xc1, 0xee, 0x85, 0xc6, 0xae,
+ 0xb6, 0x9c, 0xdc, 0xbf, 0x95, 0xb5, 0xa0, 0xca, 0xcb, 0xdd, 0xe2, 0x9d,
+ 0x17, 0x06, 0x07, 0x02, 0xf0, 0x03, 0xf9, 0x08, 0xfd, 0x09, 0x14, 0xb4,
+ 0xe2, 0xe1, 0xfc, 0xf2, 0x10, 0x20, 0x0c, 0x06, 0xee, 0x16, 0xe6, 0x08,
+ 0x14, 0x04, 0x1b, 0x12, 0xd6, 0xe3, 0x01, 0x8c, 0x0a, 0x0e, 0x12, 0x12,
+ 0xe5, 0x09, 0xd1, 0x17, 0x06, 0x0b, 0xfe, 0xf0, 0xb3, 0xb4, 0xf9, 0x12,
+ 0x23, 0x1f, 0x1a, 0x1e, 0xf9, 0x02, 0x1c, 0xd3, 0xef, 0x1e, 0x10, 0xe4,
+ 0xcc, 0xb6, 0x03, 0xe9, 0x0f, 0x03, 0x0e, 0x07, 0xb5, 0x0b, 0xe5, 0xf8,
+ 0xfe, 0xff, 0xe3, 0xe5, 0x9e, 0xb9, 0xed, 0xb1, 0x12, 0xf5, 0x15, 0x0a,
+ 0xe2, 0x01, 0xc7, 0x0a, 0xb8, 0x0c, 0xb3, 0xae, 0xe3, 0xc2, 0x05, 0x13,
+ 0xd7, 0xc5, 0xdf, 0xde, 0xd4, 0xce, 0x00, 0x81, 0x00, 0xd4, 0xd5, 0x0e,
+ 0x96, 0xf7, 0xc3, 0xc9, 0xca, 0xf8, 0x01, 0xff, 0x90, 0xae, 0x91, 0xc6,
+ 0xac, 0xf4, 0xdc, 0xc4, 0x0a, 0xb6, 0xed, 0x0a, 0x29, 0xc2, 0xe3, 0xe6,
+ 0x32, 0xb1, 0x25, 0xf5, 0x93, 0xf5, 0xd9, 0xc9, 0xf8, 0xb8, 0x08, 0x10,
+ 0x19, 0x04, 0x0c, 0x08, 0x09, 0xdf, 0x13, 0xfe, 0xeb, 0x0e, 0xfa, 0x06,
+ 0xf4, 0xd0, 0x2d, 0x1c, 0x28, 0xfb, 0x10, 0x0b, 0x0a, 0xf9, 0x0f, 0x1a,
+ 0xe4, 0x1b, 0xec, 0x02, 0xc4, 0xed, 0x2a, 0x17, 0x11, 0xf2, 0x0b, 0x06,
+ 0x07, 0xee, 0x05, 0x01, 0xc9, 0x0c, 0xeb, 0x21, 0x07, 0xf6, 0xf8, 0x0b,
+ 0xf9, 0xf4, 0xff, 0xfc, 0xfb, 0xda, 0x06, 0xf9, 0xfb, 0xed, 0xed, 0x03,
+ 0x1d, 0xd7, 0xc9, 0x12, 0x1f, 0x03, 0x05, 0xf0, 0x34, 0xc9, 0x0c, 0xf0,
+ 0xe3, 0x03, 0xe2, 0x0f, 0x03, 0xfa, 0x17, 0x07, 0x0a, 0xd7, 0xfb, 0xf0,
+ 0x16, 0xc9, 0x0a, 0x01, 0xc8, 0x01, 0xae, 0x38, 0xbe, 0x10, 0xe8, 0xcf,
+ 0x90, 0xb4, 0xd6, 0xdc, 0x8f, 0xec, 0xa6, 0xf6, 0xc8, 0xec, 0x8c, 0xfd,
+ 0xa3, 0xdb, 0xd0, 0x9e, 0xa6, 0xb5, 0xb4, 0xc6, 0x8d, 0xe6, 0xbf, 0xf5,
+ 0xb2, 0xb4, 0x95, 0xcd, 0x99, 0x2e, 0xd0, 0xcb, 0xa5, 0x81, 0xcd, 0xbb,
+ 0x94, 0xc9, 0xde, 0x0b, 0x95, 0xaf, 0x88, 0x2e, 0xeb, 0xf4, 0xf8, 0xc3,
+ 0xf5, 0x15, 0x07, 0x05, 0x01, 0x0c, 0xe2, 0xdb, 0x0b, 0x04, 0x17, 0xc1,
+ 0xfd, 0xf6, 0x1e, 0xed, 0xf9, 0x12, 0x05, 0x07, 0x08, 0x12, 0xf8, 0x81,
+ 0x10, 0x09, 0x15, 0x15, 0x03, 0xf5, 0x22, 0x08, 0xd1, 0xeb, 0xc3, 0xb8,
+ 0x11, 0xf5, 0xef, 0xc0, 0x06, 0xdb, 0xff, 0x09, 0x05, 0xfb, 0x0b, 0x0b,
+ 0x00, 0x1a, 0x0a, 0x05, 0x15, 0x18, 0x0b, 0xa4, 0x17, 0x0e, 0x2a, 0xe3,
+ 0x09, 0x0b, 0x20, 0x02, 0xfa, 0x09, 0xee, 0xf7, 0x10, 0x07, 0x00, 0x82,
+ 0x11, 0xfa, 0x13, 0xe2, 0x1a, 0x13, 0xfd, 0x08, 0xed, 0x08, 0xa1, 0xa5,
+ 0x18, 0x0c, 0x01, 0xc3, 0x08, 0xd4, 0x09, 0xf1, 0xc2, 0xca, 0x16, 0x00,
+ 0xf5, 0x04, 0xf4, 0x00, 0xb9, 0x04, 0x09, 0x90, 0xf9, 0x00, 0xee, 0xdd,
+ 0xeb, 0xfa, 0xf9, 0xe5, 0xdf, 0xfc, 0xf8, 0xf1, 0xce, 0x0c, 0xd8, 0x8c,
+ 0xfd, 0xf3, 0xfd, 0xdf, 0x00, 0x05, 0xf9, 0xf9, 0xe4, 0x10, 0xa8, 0xa3,
+ 0xbb, 0x0c, 0xfd, 0xbe, 0xff, 0xa6, 0xdf, 0xe8, 0x0e, 0x0c, 0x0f, 0x0d,
+ 0xfc, 0x22, 0xfa, 0xde, 0x07, 0x11, 0x09, 0x1c, 0x18, 0xe9, 0x0c, 0x1a,
+ 0x0e, 0xff, 0x05, 0x03, 0xec, 0x10, 0xd6, 0xba, 0x08, 0x06, 0x0b, 0x0c,
+ 0x0c, 0xd4, 0x03, 0x15, 0x08, 0x0e, 0x2e, 0xf3, 0x88, 0x05, 0xc9, 0xbb,
+ 0x07, 0x04, 0xdb, 0xf8, 0x0e, 0xe4, 0x01, 0xf8, 0x19, 0x0a, 0x10, 0x01,
+ 0xf5, 0x06, 0xc7, 0xaf, 0x03, 0x07, 0xfb, 0x22, 0x0a, 0xbb, 0x0e, 0x0e,
+ 0x0d, 0x08, 0xf8, 0xfd, 0xc6, 0x08, 0x9d, 0xa5, 0x07, 0xfd, 0xf4, 0x16,
+ 0x00, 0xa4, 0x06, 0x09, 0xf6, 0x00, 0xfd, 0xec, 0x9a, 0x00, 0xda, 0xcf,
+ 0xf0, 0xf9, 0xdc, 0xdc, 0x03, 0xce, 0x0e, 0xf9, 0x11, 0x0d, 0x17, 0x07,
+ 0x07, 0x05, 0xdc, 0xd0, 0x15, 0x06, 0xfe, 0x1d, 0x05, 0xd8, 0x0c, 0x09,
+ 0x04, 0xf3, 0xe3, 0xff, 0xb6, 0xe5, 0xba, 0xad, 0xb9, 0xf3, 0xea, 0xff,
+ 0xf4, 0x9e, 0xcb, 0x1b, 0xe4, 0xf7, 0xd5, 0xd4, 0xe8, 0x09, 0xbe, 0xbf,
+ 0xf5, 0x00, 0xf5, 0x81, 0x01, 0xbc, 0xd1, 0xd0, 0x8c, 0xa4, 0xe6, 0x98,
+ 0xf8, 0xfe, 0x0b, 0x04, 0xc3, 0xe4, 0x81, 0xec, 0xd2, 0x05, 0x08, 0xa6,
+ 0xdf, 0xe5, 0xee, 0xbe, 0xe2, 0x0e, 0x05, 0x0a, 0xfd, 0xf9, 0xec, 0x01,
+ 0xfa, 0x07, 0x03, 0xa2, 0xf8, 0xed, 0x0f, 0xf0, 0xfe, 0x0f, 0x07, 0x0b,
+ 0xfd, 0xfa, 0x00, 0xfc, 0x04, 0x04, 0x03, 0x02, 0xa9, 0xd0, 0x02, 0xa0,
+ 0xf9, 0x0f, 0xfd, 0xfb, 0xa3, 0xf7, 0xaa, 0xcc, 0xbf, 0xfe, 0xfd, 0xc1,
+ 0xd9, 0xde, 0xf1, 0xce, 0xed, 0x16, 0x05, 0x05, 0xe1, 0x00, 0xfe, 0xe3,
+ 0x02, 0x08, 0x06, 0xd2, 0xfa, 0xf6, 0x27, 0xfa, 0xfd, 0x09, 0x0d, 0x10,
+ 0x05, 0xfc, 0xff, 0x04, 0x09, 0x0c, 0x12, 0x08, 0xc5, 0xd6, 0x1e, 0xb1,
+ 0xd5, 0xce, 0xe5, 0xe1, 0xbf, 0xe9, 0xa0, 0xe9, 0xc8, 0xcb, 0xc4, 0xef,
+ 0xf0, 0xfd, 0xe5, 0xc1, 0xc7, 0x12, 0xee, 0xf9, 0xd1, 0xfa, 0xe5, 0xcb,
+ 0x0a, 0xea, 0x0d, 0xe2, 0x19, 0x0f, 0x31, 0x06, 0xf9, 0x1c, 0x07, 0x02,
+ 0x11, 0x10, 0xf9, 0xee, 0x1b, 0x06, 0x27, 0x14, 0x00, 0x06, 0x0a, 0xec,
+ 0xff, 0x0a, 0xf8, 0xde, 0xf9, 0x03, 0xf6, 0xe3, 0x06, 0xf6, 0x02, 0xd3,
+ 0x24, 0x14, 0x15, 0x0e, 0x0d, 0x08, 0xd3, 0xd6, 0x03, 0x09, 0x02, 0x09,
+ 0x0f, 0xe6, 0x12, 0x15, 0x14, 0x09, 0xef, 0x14, 0x1b, 0x05, 0xef, 0xf1,
+ 0x15, 0x00, 0x12, 0xf6, 0x0b, 0xf7, 0x07, 0x06, 0xfe, 0x0a, 0xd6, 0xec,
+ 0x02, 0x10, 0xec, 0xe4, 0xfb, 0x0b, 0xef, 0xe0, 0xfa, 0xe6, 0xee, 0xea,
+ 0x13, 0x04, 0xda, 0x09, 0x19, 0x03, 0xd0, 0xd0, 0x02, 0x01, 0x12, 0xf4,
+ 0x0a, 0xc9, 0xfc, 0xf5, 0x14, 0xd1, 0xcd, 0x1b, 0x26, 0xde, 0xe0, 0xf0,
+ 0x0e, 0xd2, 0x18, 0xf1, 0xf3, 0xde, 0xfa, 0x00, 0x86, 0xb4, 0xe1, 0xba,
+ 0xce, 0x9d, 0xfd, 0xfa, 0x81, 0xc0, 0xb4, 0xff, 0x96, 0xfd, 0x81, 0xcb,
+ 0xbd, 0xb3, 0xaf, 0xee, 0xef, 0xcb, 0xff, 0xfd, 0xc0, 0x9e, 0xff, 0x08,
+ 0xb3, 0xfe, 0xc0, 0xc2, 0x00, 0xc7, 0xc9, 0x05, 0x08, 0xf1, 0x06, 0x07,
+ 0x0c, 0xd2, 0x0a, 0x06, 0xfe, 0x09, 0x01, 0xd5, 0x10, 0xe4, 0xeb, 0x04,
+ 0x02, 0xd3, 0xfa, 0xec, 0x04, 0xb3, 0x0b, 0x0b, 0xf9, 0xf0, 0x0d, 0x02,
+ 0x05, 0xb8, 0xbd, 0x08, 0xfb, 0x81, 0xa5, 0xb3, 0x0b, 0x81, 0x07, 0xe1,
+ 0x01, 0xc7, 0x0a, 0xfe, 0xf4, 0xb4, 0xf7, 0x04, 0x09, 0xbf, 0xc7, 0xc9,
+ 0x04, 0xb0, 0x04, 0xcd, 0xec, 0xe8, 0xf2, 0x00, 0x09, 0x02, 0x06, 0x0f,
+ 0x0a, 0xef, 0x0d, 0x09, 0x0a, 0xda, 0x07, 0x08, 0x08, 0x04, 0x0b, 0xff,
+ 0x13, 0x0d, 0xed, 0x02, 0x0d, 0xf4, 0xc9, 0xcd, 0x13, 0x01, 0x0a, 0xc3,
+ 0x0e, 0xed, 0x10, 0x01, 0x09, 0x04, 0xf9, 0x04, 0x07, 0xe3, 0xcb, 0xd7,
+ 0x0c, 0xec, 0x06, 0xd4, 0xf8, 0xee, 0xfd, 0x18, 0x0b, 0x0f, 0xfa, 0x08,
+ 0x0f, 0x10, 0xfc, 0xff, 0x0f, 0xfb, 0x0b, 0xeb, 0x06, 0xff, 0x10, 0xfc,
+ 0x17, 0x08, 0x08, 0x12, 0x21, 0xfd, 0xd5, 0xd5, 0x14, 0x0c, 0x0f, 0xe3,
+ 0x10, 0xe6, 0x0d, 0x07, 0x00, 0x09, 0xe8, 0x06, 0xf9, 0x03, 0xd8, 0xeb,
+ 0x02, 0x00, 0x01, 0xef, 0xfe, 0xdd, 0xff, 0x04, 0x16, 0xbf, 0xc0, 0x0a,
+ 0x02, 0x9f, 0xcf, 0xb2, 0x06, 0x97, 0x09, 0x08, 0x0a, 0xaa, 0xf7, 0x0a,
+ 0xd5, 0xb6, 0x96, 0x0a, 0xcf, 0xab, 0x02, 0xfe, 0xe7, 0x94, 0xec, 0x24,
+ 0xc9, 0x11, 0xe2, 0x14, 0xae, 0xab, 0xd9, 0xaa, 0xf3, 0xf1, 0x01, 0x08,
+ 0xcc, 0xcc, 0xe3, 0xf5, 0xd5, 0x03, 0xea, 0xbf, 0x05, 0xeb, 0xe4, 0x03,
+ 0x00, 0xc3, 0xfc, 0xfb, 0x12, 0xda, 0xff, 0xc9, 0x11, 0xfd, 0x19, 0xcf,
+ 0x19, 0xfc, 0x97, 0x0c, 0x1a, 0xeb, 0xf9, 0xff, 0x1b, 0xef, 0x13, 0xf4,
+ 0x22, 0x03, 0x1c, 0xba, 0x09, 0xfd, 0xba, 0x08, 0xfa, 0xf7, 0x08, 0x05,
+ 0x10, 0xfc, 0xf8, 0xed, 0x05, 0x04, 0x0e, 0xb2, 0x06, 0x03, 0x9e, 0x08,
+ 0x0d, 0x01, 0xee, 0xf4, 0x05, 0x0d, 0x03, 0xb9, 0x0a, 0x00, 0x07, 0xea,
+ 0x12, 0xfe, 0xae, 0x11, 0x27, 0x0a, 0xe5, 0xfa, 0x13, 0xfe, 0x18, 0x81,
+ 0x0b, 0xf8, 0x12, 0xdc, 0x00, 0xfa, 0xe8, 0x0e, 0x01, 0x02, 0xfa, 0xfb,
+ 0x10, 0x05, 0x0b, 0xa7, 0x0c, 0xf4, 0x0a, 0xfb, 0xf7, 0xf9, 0x13, 0xfd,
+ 0x07, 0x06, 0x10, 0x08, 0xf0, 0xf3, 0x02, 0xf7, 0xfc, 0x0c, 0x0a, 0xda,
+ 0x35, 0x11, 0xba, 0x1f, 0x1a, 0xe9, 0x8f, 0xb9, 0x11, 0xfe, 0x1a, 0xcc,
+ 0x05, 0x9c, 0x02, 0x3b, 0xf3, 0xd6, 0xb8, 0x1a, 0x08, 0xa8, 0xe1, 0x0a,
+ 0x00, 0xc7, 0x0d, 0xae, 0x09, 0xdc, 0x0b, 0x31, 0xaa, 0xb2, 0x38, 0xbf,
+ 0x15, 0xe3, 0x0b, 0x0c, 0xfa, 0xc2, 0xff, 0x0e, 0xb5, 0x13, 0xf4, 0xb3,
+ 0xce, 0x9f, 0xe7, 0x05, 0x0c, 0x8c, 0xf7, 0xf1, 0x0e, 0x97, 0x13, 0xf4,
+ 0x9e, 0xec, 0xbe, 0x12, 0x9b, 0xd8, 0xe5, 0xf8, 0xd7, 0x0c, 0x01, 0x0f,
+ 0xe4, 0xfd, 0xf3, 0x03, 0xeb, 0x09, 0xff, 0x01, 0xc1, 0x89, 0x13, 0xe0,
+ 0x06, 0x2b, 0x15, 0x0e, 0xf4, 0x00, 0xfd, 0x05, 0xf6, 0x0b, 0x17, 0x81,
+ 0xdb, 0x8b, 0x0c, 0x09, 0x09, 0x13, 0x0a, 0x05, 0x1c, 0xfd, 0x17, 0x0d,
+ 0xfa, 0x0b, 0x0e, 0x06, 0xb8, 0xbc, 0x1c, 0x0a, 0x0c, 0x12, 0x04, 0x0c,
+ 0xfb, 0xf5, 0x06, 0x11, 0xe5, 0x07, 0x06, 0x14, 0x04, 0x1f, 0xf2, 0xb2,
+ 0xd4, 0x06, 0xfc, 0x02, 0xb6, 0x0f, 0xcf, 0xd3, 0x03, 0xfd, 0xfe, 0xf8,
+ 0x15, 0x0d, 0xd8, 0xea, 0xfa, 0x1a, 0x00, 0x05, 0xfb, 0x1d, 0xf5, 0xeb,
+ 0x12, 0x01, 0x0d, 0xd9, 0x0b, 0xff, 0xff, 0x0c, 0x1c, 0x1b, 0x10, 0x04,
+ 0x15, 0x03, 0x0f, 0x07, 0x0f, 0x06, 0x0f, 0x06, 0x8d, 0xc7, 0x81, 0xa0,
+ 0x9e, 0xca, 0xb7, 0xcb, 0xb6, 0xc5, 0xb1, 0xe4, 0xa0, 0x93, 0xa9, 0xa5,
+ 0x24, 0x03, 0xd8, 0xf7, 0xd8, 0x0f, 0xf7, 0xf4, 0xf7, 0x06, 0xfb, 0xf2,
+ 0x15, 0xfe, 0x10, 0xee, 0x18, 0xfc, 0x1c, 0x07, 0x06, 0x0b, 0xfc, 0x08,
+ 0x0d, 0x00, 0x0d, 0xfd, 0x0d, 0xfa, 0x0d, 0x10, 0x96, 0xa8, 0xdc, 0x8b,
+ 0x04, 0xda, 0x0a, 0xfe, 0xbc, 0x9c, 0xae, 0x01, 0x99, 0xff, 0xe7, 0xc1,
+ 0x0a, 0xf1, 0x1e, 0xec, 0xf5, 0x02, 0x07, 0x00, 0xf3, 0xe7, 0xf8, 0xfe,
+ 0x00, 0xf9, 0x01, 0x95, 0x08, 0xfb, 0x13, 0x03, 0x08, 0xfe, 0x05, 0x0d,
+ 0x10, 0xfa, 0x0b, 0x0f, 0x04, 0x09, 0x09, 0x00, 0x1b, 0x09, 0x33, 0xe5,
+ 0x31, 0x12, 0x2b, 0x1b, 0xf5, 0xf0, 0x09, 0xf7, 0x02, 0x2f, 0x0c, 0x18,
+ 0x11, 0xec, 0x0d, 0x0f, 0x29, 0x0d, 0x2c, 0x36, 0x04, 0xfe, 0x13, 0x00,
+ 0x07, 0x23, 0x21, 0x15, 0x04, 0xcd, 0xf8, 0x10, 0x75, 0x08, 0x32, 0x2d,
+ 0x15, 0xdc, 0x29, 0x38, 0x06, 0x37, 0x27, 0x08, 0x35, 0x21, 0xd5, 0xfd,
+ 0x23, 0x45, 0x1a, 0x16, 0x23, 0x31, 0x1b, 0xc0, 0x2a, 0x19, 0x3f, 0x1b,
+ 0x02, 0xf9, 0xee, 0x1c, 0x2a, 0x2d, 0x16, 0x32, 0x1e, 0x12, 0x16, 0xfc,
+ 0x2f, 0x11, 0x36, 0xec, 0xd3, 0xa9, 0xf7, 0x1b, 0x41, 0x07, 0x15, 0x25,
+ 0x33, 0xe6, 0x39, 0x3e, 0x08, 0x1d, 0x27, 0xde, 0x21, 0x2a, 0x04, 0xf1,
+ 0x19, 0x33, 0xd0, 0xd9, 0x43, 0x37, 0x03, 0x81, 0x29, 0xdd, 0x24, 0x00,
+ 0xf1, 0xe9, 0xfc, 0x30, 0x12, 0x20, 0x11, 0x1a, 0x3a, 0x19, 0x48, 0xe5,
+ 0x37, 0x1e, 0x2d, 0x08, 0xc7, 0xbd, 0x12, 0xff, 0x1f, 0x40, 0x2c, 0x34,
+ 0x26, 0x14, 0x0b, 0x30, 0x1f, 0x27, 0x3f, 0xec, 0xa9, 0xcf, 0x0a, 0x8c,
+ 0x0f, 0x11, 0x07, 0x09, 0xec, 0xf7, 0x8f, 0xfb, 0xfa, 0x04, 0x12, 0xd0,
+ 0xf9, 0x00, 0x24, 0xa0, 0x1e, 0x14, 0x16, 0x12, 0x04, 0x16, 0xb9, 0x03,
+ 0x18, 0x09, 0x0d, 0x1e, 0xe8, 0xf0, 0x04, 0xaa, 0x0f, 0xfc, 0x08, 0x0e,
+ 0xe2, 0xf7, 0xa5, 0x08, 0xf8, 0x13, 0xf2, 0x01, 0xb0, 0xcc, 0x17, 0x85,
+ 0x17, 0x15, 0x10, 0x05, 0xcc, 0x00, 0xc0, 0xf4, 0xfa, 0x03, 0x01, 0xdf,
+ 0x0b, 0xe4, 0x13, 0xd6, 0x07, 0x07, 0xf4, 0xfb, 0xef, 0x19, 0xda, 0xea,
+ 0x0d, 0xf8, 0xda, 0x2e, 0xd1, 0xf1, 0x0d, 0xb0, 0xfd, 0xec, 0xf8, 0xf0,
+ 0xbc, 0xf0, 0x9c, 0x10, 0xdf, 0xef, 0xde, 0x45, 0x90, 0x9b, 0x03, 0xa6,
+ 0x01, 0x14, 0x02, 0xfb, 0xa0, 0xfd, 0xba, 0xf8, 0xe5, 0xfe, 0xe6, 0xc9,
+ 0xc6, 0xce, 0xa8, 0xeb, 0xce, 0xb2, 0x0a, 0x16, 0x81, 0xb9, 0xe6, 0x29,
+ 0xb0, 0x02, 0xb0, 0x06, 0xa9, 0x18, 0xb8, 0xad, 0xf6, 0xfe, 0x06, 0x07,
+ 0xb3, 0xc6, 0x92, 0x1a, 0xdf, 0x09, 0x00, 0x4d, 0xf0, 0x03, 0x01, 0xd3,
+ 0x04, 0x07, 0x02, 0x02, 0xf5, 0x06, 0xf1, 0xe8, 0xfd, 0xff, 0x00, 0xd7,
+ 0x05, 0x07, 0x0a, 0x07, 0x0a, 0x11, 0x02, 0x03, 0x0b, 0x13, 0x00, 0xdc,
+ 0x02, 0x09, 0x0b, 0x00, 0xf5, 0x00, 0x1b, 0xfd, 0x0f, 0x14, 0x05, 0x04,
+ 0x08, 0x0e, 0x02, 0xf6, 0x05, 0x00, 0x02, 0x0a, 0x05, 0x08, 0xe5, 0xe6,
+ 0xe9, 0x03, 0xec, 0xe7, 0x06, 0x04, 0xf4, 0xe7, 0x02, 0xdd, 0x09, 0xaf,
+ 0x10, 0x0d, 0x0f, 0x17, 0x05, 0xff, 0xde, 0xd5, 0x15, 0x04, 0xfe, 0x08,
+ 0x0e, 0xdc, 0x07, 0x20, 0x10, 0x0b, 0x10, 0x07, 0xf4, 0x0b, 0xde, 0xea,
+ 0xf6, 0x0d, 0x02, 0xfa, 0xfe, 0xda, 0xf6, 0x28, 0x0d, 0x0d, 0x00, 0xda,
+ 0xe1, 0x01, 0xe1, 0xd8, 0xf7, 0x11, 0xd1, 0xf7, 0x06, 0xe7, 0x01, 0xf9,
+ 0xfb, 0xfa, 0xe0, 0xeb, 0xce, 0xfe, 0xba, 0xdd, 0xa4, 0xfa, 0xda, 0x0b,
+ 0xf4, 0xac, 0xb1, 0x17, 0xca, 0xf8, 0xb1, 0xcb, 0xb7, 0xb8, 0xf1, 0xe8,
+ 0x9d, 0xd8, 0xca, 0x13, 0xb9, 0xd9, 0x81, 0xff, 0xfb, 0xe7, 0x0a, 0x09,
+ 0x17, 0x0c, 0x01, 0x08, 0x13, 0xfb, 0x0b, 0xfa, 0x02, 0x08, 0x12, 0x06,
+ 0xcc, 0xd4, 0x09, 0x06, 0x06, 0x17, 0x06, 0x04, 0xfd, 0xe7, 0x00, 0xf6,
+ 0x05, 0x0a, 0x24, 0xd2, 0x02, 0x02, 0x1b, 0xee, 0x09, 0xfa, 0x06, 0x01,
+ 0x00, 0xe9, 0x09, 0x05, 0xd7, 0x0b, 0xf8, 0xf7, 0x03, 0xd8, 0x06, 0x12,
+ 0x06, 0x02, 0x06, 0x05, 0x0d, 0xe9, 0x0e, 0xf5, 0xfb, 0x02, 0x13, 0xf3,
+ 0xda, 0xb3, 0x22, 0x00, 0x1e, 0x1a, 0x10, 0x13, 0x03, 0xfc, 0x06, 0x0d,
+ 0xfb, 0x18, 0x20, 0xf8, 0xfe, 0xc0, 0x1a, 0x07, 0x0f, 0xe6, 0x05, 0x07,
+ 0xfb, 0xb0, 0x08, 0x13, 0x9f, 0x06, 0xde, 0x04, 0xd6, 0xc3, 0x18, 0x14,
+ 0x05, 0xeb, 0xfc, 0x03, 0xa8, 0xba, 0x0d, 0x0b, 0xb5, 0x03, 0xee, 0xfc,
+ 0x84, 0x99, 0x10, 0xd3, 0x17, 0xfc, 0x0d, 0x07, 0x81, 0xb8, 0xc7, 0x12,
+ 0xb6, 0x12, 0xe0, 0x8d, 0xf8, 0xad, 0xfd, 0x06, 0x01, 0xe8, 0x03, 0xff,
+ 0xf6, 0x8e, 0x1d, 0x0b, 0x8d, 0x03, 0xd8, 0xb1, 0xe3, 0xc7, 0x10, 0xf1,
+ 0x1d, 0xf5, 0x07, 0x0b, 0xfa, 0xc9, 0xf0, 0x07, 0xcb, 0x0c, 0xe3, 0xce,
+ 0xc9, 0xc7, 0x11, 0xeb, 0xdb, 0xd8, 0x01, 0x08, 0xc9, 0xe0, 0xdc, 0x00,
+ 0xdb, 0x13, 0xbd, 0xe2, 0xd7, 0xd4, 0x2b, 0xf1, 0x07, 0xf5, 0x0b, 0x0e,
+ 0x10, 0xcd, 0x02, 0x01, 0xcc, 0x0d, 0xf0, 0xfe, 0x1e, 0x23, 0xfa, 0xfe,
+ 0x00, 0xdf, 0xc6, 0xd3, 0x06, 0x11, 0xbb, 0x1d, 0xf1, 0xec, 0x05, 0xed,
+ 0xee, 0xfb, 0x14, 0xc8, 0xf1, 0xc0, 0xe4, 0xeb, 0xe5, 0xe5, 0xdf, 0x07,
+ 0xc4, 0xd9, 0xe0, 0xc7, 0x0c, 0xde, 0x1b, 0x13, 0x17, 0xf6, 0x0b, 0x09,
+ 0x05, 0xc7, 0x17, 0x03, 0xc9, 0x10, 0xd0, 0xf3, 0x11, 0x21, 0xf4, 0xdb,
+ 0xa2, 0x17, 0xb8, 0xae, 0x00, 0x2b, 0xbd, 0x10, 0x0c, 0xaf, 0x11, 0x15,
+ 0x00, 0x2a, 0xf8, 0xd5, 0xa2, 0x0c, 0xbd, 0xd6, 0xfe, 0x24, 0xb0, 0x04,
+ 0x18, 0xa9, 0x0a, 0x09, 0x81, 0xfb, 0x11, 0x8d, 0xce, 0xab, 0xe3, 0xe0,
+ 0xa3, 0xd2, 0xad, 0x0e, 0xa3, 0xc5, 0x9a, 0x19, 0x19, 0xa7, 0xe6, 0x1c,
+ 0x0e, 0xd1, 0xf4, 0xf6, 0x0d, 0xbc, 0x12, 0xc3, 0xf9, 0xf7, 0x08, 0x14,
+ 0x0e, 0xad, 0x9d, 0x15, 0x19, 0x8d, 0xb0, 0xc9, 0x1b, 0x9b, 0x17, 0x98,
+ 0xe6, 0xcb, 0x03, 0x31, 0x00, 0xcc, 0xc1, 0x08, 0xfb, 0xc5, 0xa7, 0xb3,
+ 0xfc, 0xde, 0x05, 0xbb, 0xf1, 0xb0, 0xfb, 0x1d, 0x1c, 0xea, 0xf6, 0x0c,
+ 0x1d, 0xcc, 0xf8, 0xe0, 0x1b, 0xe2, 0x0c, 0xf6, 0x06, 0xfc, 0x12, 0x20,
+ 0x04, 0xa5, 0x92, 0x10, 0x13, 0xb0, 0xb8, 0xf2, 0x16, 0x98, 0x09, 0xb3,
+ 0xe3, 0xea, 0xeb, 0x2f, 0xdc, 0xe7, 0xc2, 0x03, 0x07, 0xeb, 0xb7, 0xc6,
+ 0xf8, 0xf3, 0x07, 0xbb, 0xab, 0xcd, 0xaa, 0x1e, 0x0c, 0xea, 0xee, 0x21,
+ 0x13, 0xe4, 0xf6, 0xf3, 0x04, 0xf5, 0x18, 0xff, 0xfe, 0xdd, 0xfe, 0x23,
+ 0xd0, 0xa3, 0xa7, 0x14, 0x0a, 0x9a, 0xe4, 0xd0, 0xd4, 0xd3, 0x07, 0xe3,
+ 0x9b, 0xce, 0x8b, 0x30, 0xc0, 0xa4, 0xc6, 0x0b, 0x10, 0xd1, 0xd0, 0xeb,
+ 0xed, 0xee, 0xfe, 0xcd, 0x81, 0xc2, 0xb2, 0x2d, 0x9f, 0xc1, 0x06, 0x81,
+ 0x0e, 0x03, 0x0c, 0x04, 0x01, 0x05, 0xc2, 0x05, 0xf7, 0x0c, 0xff, 0x9f,
+ 0xde, 0x01, 0xfd, 0xab, 0x09, 0x0f, 0x03, 0x03, 0xfa, 0x02, 0xc6, 0x09,
+ 0xfe, 0x06, 0x11, 0x9c, 0x00, 0x02, 0x04, 0xbf, 0x03, 0x04, 0x0b, 0x06,
+ 0xf2, 0x07, 0xc2, 0x09, 0x06, 0x05, 0x01, 0xd3, 0xbf, 0xc2, 0xfd, 0xf0,
+ 0x08, 0xfb, 0x02, 0x07, 0xe8, 0xf1, 0xf3, 0x0d, 0xec, 0x07, 0xf6, 0xbf,
+ 0xfb, 0x0e, 0x01, 0xea, 0x08, 0x11, 0x0a, 0x0d, 0xdc, 0x0b, 0xf6, 0x07,
+ 0xfe, 0x08, 0x07, 0xa8, 0x10, 0x0e, 0x13, 0xdc, 0x01, 0x03, 0x03, 0x04,
+ 0xd5, 0x01, 0xd7, 0x08, 0x09, 0x05, 0x01, 0x1f, 0xf7, 0xcd, 0xea, 0x01,
+ 0x0b, 0xf7, 0x03, 0x08, 0xf8, 0xb6, 0x00, 0x01, 0xaa, 0x09, 0xfb, 0x00,
+ 0xfd, 0xb5, 0x04, 0x0c, 0x0d, 0xfa, 0x00, 0x06, 0xe3, 0xbb, 0x0d, 0xff,
+ 0xaf, 0x05, 0xf1, 0x01, 0xaa, 0xb3, 0x05, 0x00, 0x04, 0xf8, 0x02, 0x06,
+ 0xaf, 0xaf, 0xc7, 0x0a, 0xac, 0x06, 0xea, 0xdd, 0x21, 0xec, 0xcd, 0x16,
+ 0x1a, 0xd4, 0xf4, 0xfa, 0x0d, 0xc7, 0x1a, 0xfa, 0x0d, 0xe7, 0x09, 0x0b,
+ 0x06, 0xcd, 0xd6, 0x15, 0x0f, 0xd5, 0xcc, 0xc1, 0x11, 0xe1, 0x10, 0xfa,
+ 0x16, 0xdc, 0x12, 0x1d, 0x04, 0xb3, 0xfe, 0x04, 0x03, 0x93, 0xee, 0xf1,
+ 0x10, 0x87, 0x01, 0xeb, 0x09, 0xf9, 0x04, 0x10, 0x0f, 0xd5, 0xa3, 0x09,
+ 0x23, 0xb9, 0xc3, 0xb7, 0x0e, 0x9c, 0x0b, 0xbd, 0x11, 0xc7, 0x04, 0x0c,
+ 0x17, 0xd9, 0x08, 0x11, 0x0e, 0xd9, 0xc3, 0xc9, 0x08, 0xd8, 0x09, 0xdc,
+ 0x0c, 0xd7, 0x14, 0x09, 0x09, 0xe0, 0x01, 0x05, 0x09, 0xc8, 0xa4, 0xc7,
+ 0x05, 0xbc, 0x06, 0xa9, 0x0d, 0x9e, 0x07, 0x0a, 0xff, 0xe4, 0x84, 0x04,
+ 0x09, 0xe7, 0x9d, 0x8f, 0xfe, 0xbb, 0x07, 0xca, 0xfd, 0xae, 0x0c, 0xfc,
+ 0x0a, 0x03, 0x10, 0x01, 0xff, 0xeb, 0x93, 0x9c, 0x0f, 0xf5, 0x07, 0x0c,
+ 0x11, 0xa4, 0x0d, 0x19, 0x02, 0xfd, 0x0e, 0x02, 0x02, 0xe3, 0x89, 0x81,
+ 0xef, 0xe1, 0x00, 0xd6, 0x00, 0x8f, 0xf9, 0x12, 0xe9, 0xbc, 0x98, 0x03,
+ 0xf6, 0x9e, 0xb4, 0xb6, 0xcc, 0xa8, 0x02, 0xeb, 0xd3, 0xac, 0xa6, 0xf3,
+ 0xf7, 0xb5, 0xcc, 0x12, 0x0a, 0xa6, 0xb6, 0xce, 0xfe, 0xb3, 0x08, 0xd4,
+ 0xd4, 0xc1, 0xbd, 0x17, 0x02, 0xad, 0xd9, 0x0a, 0x10, 0xae, 0xdc, 0xef,
+ 0x08, 0x9c, 0x07, 0xd3, 0xf9, 0xd4, 0xf1, 0x0d, 0xc9, 0xcf, 0xf5, 0xf2,
+ 0xff, 0xbe, 0xfd, 0x01, 0x05, 0xce, 0x03, 0x11, 0xc2, 0xfe, 0xfe, 0xd2,
+ 0xdf, 0xc1, 0x06, 0xfa, 0xfa, 0xd6, 0x04, 0x07, 0xfe, 0xde, 0xf6, 0xff,
+ 0xc9, 0xf7, 0xfc, 0xe8, 0xf9, 0xc4, 0xf7, 0xff, 0x0d, 0x04, 0x00, 0x09,
+ 0x0c, 0xe0, 0x0c, 0x02, 0xf6, 0x03, 0x08, 0x06, 0x00, 0xb7, 0xeb, 0x11,
+ 0x09, 0x1a, 0x0a, 0x0e, 0x0f, 0xfc, 0x09, 0x05, 0x0a, 0x0d, 0x12, 0xf1,
+ 0xf9, 0x81, 0x0f, 0x00, 0x10, 0x0d, 0x0d, 0x13, 0x07, 0xe4, 0x0b, 0x1c,
+ 0xf8, 0x17, 0x14, 0xec, 0xf7, 0x8d, 0x19, 0x08, 0x1b, 0x00, 0x15, 0x18,
+ 0x05, 0xde, 0x0e, 0x0e, 0xf8, 0x1a, 0x11, 0xee, 0xf3, 0x0a, 0x16, 0xfd,
+ 0x0a, 0xfb, 0x0b, 0x0f, 0x00, 0x04, 0x01, 0x0c, 0xf8, 0x0b, 0x00, 0xf7,
+ 0xd0, 0xdc, 0x0f, 0x07, 0x07, 0xf4, 0xf4, 0xff, 0xfe, 0x01, 0x03, 0x9d,
+ 0x01, 0xfa, 0xd0, 0x00, 0xb9, 0xbe, 0xb7, 0x0d, 0xd8, 0xa7, 0x95, 0xa7,
+ 0xfc, 0x97, 0xfe, 0xfc, 0x81, 0xc0, 0xba, 0xfc, 0x03, 0x1c, 0x38, 0xf4,
+ 0x1a, 0x19, 0x19, 0x1b, 0x00, 0x1b, 0xff, 0x1a, 0x11, 0x15, 0x02, 0xf7,
+ 0xe4, 0xc4, 0x02, 0x00, 0x0a, 0xd0, 0xe6, 0xe7, 0xfc, 0xbe, 0x05, 0x95,
+ 0xb6, 0xf4, 0xb3, 0xf2, 0xbc, 0xcc, 0xc9, 0x06, 0xdd, 0xc5, 0xb5, 0xb9,
+ 0xe7, 0xc6, 0x00, 0xd2, 0xa0, 0xb7, 0xbc, 0x14, 0x10, 0x3c, 0x27, 0xe8,
+ 0x19, 0x14, 0x12, 0x19, 0x09, 0x21, 0xf6, 0x17, 0xfd, 0x18, 0x07, 0x0e,
+ 0xf9, 0x05, 0xe4, 0x0e, 0x07, 0xb1, 0xda, 0xd7, 0x0b, 0xfe, 0x03, 0xf7,
+ 0xcf, 0xd6, 0xca, 0x12, 0xc8, 0xec, 0xdc, 0x01, 0xef, 0xcc, 0xa1, 0xc7,
+ 0xf7, 0xd7, 0xff, 0xf1, 0xae, 0xbf, 0xcc, 0x0e, 0xd8, 0xda, 0x13, 0x26,
+ 0x04, 0x09, 0xff, 0x03, 0xea, 0xf6, 0x1c, 0xec, 0x0b, 0x07, 0x13, 0xfd,
+ 0xe4, 0xf4, 0x25, 0xfb, 0xfd, 0x15, 0x02, 0x03, 0xed, 0x11, 0xf1, 0x90,
+ 0x17, 0x06, 0x21, 0x1c, 0xf6, 0xf8, 0x47, 0xe0, 0xde, 0x0d, 0xf2, 0xea,
+ 0xde, 0x09, 0xed, 0x9c, 0x00, 0xe5, 0xf1, 0x2d, 0x85, 0xd4, 0x33, 0x81,
+ 0x16, 0x1d, 0x0b, 0x10, 0xd3, 0x0c, 0xaa, 0xe9, 0x12, 0x06, 0x1e, 0xae,
+ 0xcf, 0xef, 0x17, 0xd9, 0x13, 0x1e, 0x05, 0xfe, 0x0d, 0x1a, 0xf2, 0x8a,
+ 0x10, 0x0b, 0x2e, 0x0c, 0xd7, 0xe0, 0xfa, 0xfb, 0xb3, 0xe3, 0xae, 0xaf,
+ 0xdf, 0x0d, 0xf8, 0x8f, 0xf7, 0xc1, 0x9d, 0x13, 0xa7, 0xd5, 0x22, 0x9e,
+ 0x1b, 0x1e, 0x08, 0x02, 0xe2, 0x07, 0xec, 0xfb, 0x0c, 0x0d, 0x0f, 0xb4,
+ 0xdf, 0xd6, 0x0f, 0x09, 0x1a, 0x16, 0x03, 0x03, 0xfc, 0x19, 0x14, 0x82,
+ 0x14, 0x02, 0xff, 0x01, 0xbf, 0xfc, 0x9a, 0x17, 0xf0, 0xac, 0xa2, 0xa7,
+ 0x02, 0xb7, 0x12, 0x9c, 0xbe, 0xc4, 0xab, 0x08, 0xf0, 0xe0, 0x81, 0x2d,
+ 0x09, 0xe1, 0xdc, 0xf0, 0xeb, 0xd5, 0x1f, 0x98, 0xed, 0xd2, 0xe6, 0x2d,
+ 0x0b, 0x03, 0x53, 0x0f, 0x0d, 0x16, 0x10, 0x08, 0x0c, 0x0c, 0x09, 0xdb,
+ 0x11, 0x0f, 0x1e, 0x1a, 0x07, 0x04, 0x17, 0xf0, 0xc7, 0x02, 0x00, 0xea,
+ 0xd9, 0x09, 0xd5, 0x10, 0x05, 0xf0, 0xf9, 0x0a, 0xb0, 0xc4, 0x9f, 0xbd,
+ 0xde, 0xfd, 0xdf, 0xe9, 0x9f, 0xdb, 0xda, 0xd5, 0xdf, 0xca, 0xea, 0xb1,
+ 0x0c, 0x07, 0x45, 0xfc, 0x13, 0x28, 0x10, 0x03, 0x1c, 0x1c, 0xff, 0xde,
+ 0x1d, 0x0c, 0x27, 0x31, 0xed, 0xd4, 0x23, 0xdc, 0xd7, 0xcf, 0x05, 0xfc,
+ 0xc3, 0xfd, 0x9c, 0x0c, 0xcf, 0xf9, 0xb8, 0x27, 0xa3, 0xd3, 0xfd, 0xc9,
+ 0x05, 0x0a, 0x04, 0x00, 0xc9, 0xd7, 0xff, 0xfc, 0xe4, 0x00, 0xf5, 0xea,
+ 0x0f, 0x0d, 0x33, 0x16, 0x0f, 0x19, 0x0d, 0x04, 0x1d, 0x18, 0x07, 0xec,
+ 0x21, 0x06, 0x24, 0x1d, 0xdb, 0xe0, 0x2a, 0xd8, 0xe4, 0xca, 0xe4, 0xf3,
+ 0xed, 0xf9, 0x98, 0xed, 0xe2, 0xe6, 0xd1, 0x42, 0x12, 0x14, 0xf6, 0xf1,
+ 0xb8, 0x0e, 0xc1, 0xa0, 0x0a, 0x0d, 0xee, 0xe6, 0x0f, 0xc6, 0x11, 0xe6,
+ 0x22, 0x1f, 0x19, 0x05, 0xf6, 0x15, 0xdf, 0xdf, 0xfb, 0x15, 0xf3, 0x19,
+ 0x12, 0xec, 0x0b, 0x0e, 0x08, 0x01, 0x00, 0x0e, 0x0f, 0x12, 0xca, 0xc6,
+ 0xfc, 0x04, 0x0a, 0x05, 0x02, 0xdb, 0xfc, 0x11, 0x03, 0x1d, 0x93, 0xca,
+ 0xa9, 0x05, 0xc0, 0xb5, 0xce, 0xf2, 0xea, 0x0f, 0x09, 0xb9, 0xe5, 0xc9,
+ 0x22, 0x19, 0x16, 0xee, 0xf5, 0x0c, 0x0d, 0xec, 0x13, 0x0a, 0xf9, 0x12,
+ 0x0d, 0x14, 0x0c, 0xf6, 0x09, 0x03, 0x11, 0x01, 0xeb, 0xff, 0xc1, 0xa4,
+ 0x07, 0x00, 0xfe, 0xfe, 0x01, 0xb6, 0x04, 0x03, 0x8f, 0x97, 0xdf, 0xae,
+ 0x16, 0xba, 0xfe, 0x04, 0xc6, 0x90, 0xfe, 0xf8, 0x81, 0xfe, 0x96, 0x87,
+ 0x11, 0xfe, 0xe4, 0x05, 0x0b, 0x00, 0x0f, 0x10, 0xfd, 0xf2, 0x10, 0x10,
+ 0xfd, 0x06, 0xff, 0xc6, 0x04, 0xff, 0x1b, 0x0f, 0xf7, 0x00, 0x07, 0x09,
+ 0x10, 0x05, 0x06, 0x0e, 0x04, 0xf6, 0x06, 0x1c, 0x0e, 0xf9, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x09, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x1c, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x20, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x6d, 0x6f, 0x64, 0x65,
+ 0x6c, 0x2f, 0x63, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x31, 0x2f, 0x43,
+ 0x6f, 0x6e, 0x76, 0x32, 0x44, 0x00, 0x00, 0x00, 0x70, 0xf8, 0xff, 0xff,
+ 0x08, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0xb1, 0x93, 0xb9, 0x3a, 0x15, 0x93, 0xf8, 0x3a, 0x80, 0x56, 0xad, 0x3a,
+ 0x2f, 0x2c, 0xb4, 0x3a, 0x73, 0xdb, 0x97, 0x3a, 0xcf, 0xc9, 0xa2, 0x3a,
+ 0x3c, 0x68, 0xb3, 0x3a, 0x7b, 0x4f, 0x9d, 0x3a, 0x5c, 0x19, 0x5f, 0x3a,
+ 0xd5, 0x55, 0x67, 0x3a, 0x53, 0x13, 0x7d, 0x3a, 0x7a, 0x37, 0x9f, 0x3a,
+ 0xae, 0xdc, 0xb2, 0x3a, 0xc9, 0x9b, 0xa2, 0x3a, 0xbd, 0xc1, 0xa3, 0x3a,
+ 0xb3, 0xb3, 0x93, 0x3a, 0x1d, 0x0d, 0xa5, 0x3a, 0x7a, 0x4f, 0x9d, 0x3a,
+ 0x3b, 0x3c, 0x80, 0x3a, 0x87, 0xdf, 0x06, 0x3a, 0x8e, 0x2e, 0x87, 0x3a,
+ 0xc3, 0x83, 0xb3, 0x3a, 0xe8, 0xd4, 0x7b, 0x3a, 0x2e, 0x51, 0x77, 0x3a,
+ 0x2c, 0x10, 0x6e, 0x3a, 0xe1, 0x3f, 0xb7, 0x3a, 0xfd, 0xae, 0x83, 0x3a,
+ 0xa0, 0x4a, 0xa5, 0x3a, 0xba, 0x56, 0x4c, 0x3a, 0xa7, 0xb1, 0x90, 0x3a,
+ 0x3f, 0x35, 0x95, 0x3a, 0x91, 0x32, 0x88, 0x3a, 0x20, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xfb, 0xff, 0xff,
+ 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x30, 0xff, 0xff, 0xff,
+ 0x40, 0x04, 0x00, 0x00, 0xa2, 0xfc, 0xff, 0xff, 0xd4, 0xff, 0xff, 0xff,
+ 0x4c, 0xff, 0xff, 0xff, 0x66, 0xff, 0xff, 0xff, 0x96, 0xfc, 0xff, 0xff,
+ 0xf9, 0xf3, 0xff, 0xff, 0x06, 0xfe, 0xff, 0xff, 0x9b, 0xfe, 0xff, 0xff,
+ 0xe8, 0xfe, 0xff, 0xff, 0x59, 0x02, 0x00, 0x00, 0xf6, 0xff, 0xff, 0xff,
+ 0xc3, 0xfc, 0xff, 0xff, 0x62, 0x0b, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00,
+ 0x3a, 0xfb, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00,
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x52, 0x65, 0x6c, 0x75, 0x3b, 0x6d, 0x6f,
+ 0x64, 0x65, 0x6c, 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x6e, 0x6f,
+ 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f,
+ 0x46, 0x75, 0x73, 0x65, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4e, 0x6f,
+ 0x72, 0x6d, 0x56, 0x33, 0x3b, 0x63, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x2f,
+ 0x62, 0x69, 0x61, 0x73, 0x3b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x63,
+ 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x2f, 0x42, 0x69, 0x61, 0x73, 0x41, 0x64,
+ 0x64, 0x3b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x63, 0x6f, 0x6e, 0x76,
+ 0x32, 0x64, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x44, 0x00, 0x00, 0x00,
+ 0xf0, 0xfa, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x93, 0xc8, 0x52, 0x39, 0x5c, 0x36, 0x73, 0x39,
+ 0x26, 0x92, 0x02, 0x39, 0x39, 0xfd, 0x48, 0x39, 0x64, 0x2b, 0x46, 0x39,
+ 0x76, 0xae, 0x86, 0x39, 0x90, 0x52, 0xbc, 0x38, 0xd0, 0xc2, 0xe2, 0x38,
+ 0x2c, 0x13, 0xd6, 0x38, 0x55, 0x74, 0x41, 0x39, 0xee, 0xe5, 0xf0, 0x38,
+ 0x51, 0x0a, 0xb9, 0x39, 0x61, 0xfc, 0xef, 0x38, 0x01, 0xed, 0xc1, 0x38,
+ 0x1f, 0x36, 0x7a, 0x38, 0xac, 0x4c, 0x0e, 0x39, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xfc, 0xff, 0xff,
+ 0x04, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0xe4, 0x1e, 0xab, 0xfc,
+ 0x1b, 0xa1, 0xfe, 0x0f, 0x9c, 0xf3, 0x22, 0x98, 0xf2, 0x1b, 0x81, 0x02,
+ 0x11, 0x8a, 0xf3, 0x11, 0xd2, 0xf3, 0x19, 0xa4, 0x02, 0x0d, 0xcb, 0xcf,
+ 0x20, 0x87, 0xd7, 0x16, 0xc0, 0xd3, 0x13, 0xc0, 0xbe, 0x23, 0x81, 0xb9,
+ 0x26, 0x90, 0xad, 0x1d, 0x84, 0xc7, 0x1d, 0xa3, 0xd2, 0x1f, 0xb1, 0xc1,
+ 0x19, 0xa5, 0xd4, 0x17, 0x33, 0xf5, 0xfc, 0xdc, 0x17, 0xaa, 0x81, 0xcc,
+ 0x29, 0x17, 0x0a, 0xf7, 0x0d, 0x32, 0xab, 0x8a, 0x87, 0x4a, 0xf7, 0x12,
+ 0xe4, 0xdd, 0x28, 0xba, 0xb6, 0x48, 0x09, 0x81, 0x39, 0x04, 0xf1, 0x26,
+ 0xfd, 0x02, 0x49, 0x0f, 0xb3, 0x25, 0x10, 0xba, 0xf8, 0xfe, 0xff, 0x42,
+ 0xf9, 0xf1, 0x20, 0x03, 0xfe, 0x06, 0x01, 0xff, 0xf3, 0x01, 0x18, 0x22,
+ 0x02, 0x22, 0x23, 0x01, 0x1f, 0x0c, 0x00, 0x19, 0x1d, 0xfd, 0x2d, 0x3f,
+ 0x00, 0x13, 0xf2, 0x00, 0x14, 0x20, 0xfb, 0x0e, 0x57, 0xe1, 0x81, 0x81,
+ 0x10, 0xf1, 0xc7, 0x1e, 0xf4, 0xe6, 0x15, 0xf5, 0xad, 0x14, 0x03, 0xcd,
+ 0x1b, 0xf7, 0xda, 0x16, 0xf9, 0x0b, 0xf8, 0xf8, 0xec, 0x0c, 0xfe, 0xf5,
+ 0x06, 0x03, 0x9f, 0x07, 0x48, 0xf3, 0x06, 0x57, 0xf7, 0xff, 0x50, 0xf7,
+ 0xfe, 0x6b, 0xfe, 0xfb, 0x7f, 0xf7, 0x01, 0x52, 0xfb, 0x00, 0x44, 0xf7,
+ 0x03, 0x68, 0x05, 0x00, 0x6b, 0xf3, 0x08, 0x3f, 0xff, 0x04, 0x58, 0xf7,
+ 0x05, 0x3c, 0x08, 0x02, 0x57, 0x03, 0x01, 0x63, 0xf0, 0x09, 0x57, 0x0c,
+ 0x04, 0x2f, 0x0d, 0xfe, 0x53, 0x0c, 0x04, 0x7f, 0x20, 0xe7, 0x1b, 0x23,
+ 0xc3, 0x2f, 0x3b, 0xb4, 0x19, 0x0a, 0x3c, 0xbb, 0x4a, 0x64, 0x81, 0x67,
+ 0xec, 0xfd, 0xe7, 0x37, 0x85, 0x13, 0x4f, 0x9d, 0x43, 0x19, 0xe9, 0x8b,
+ 0x32, 0xc2, 0xa5, 0x2b, 0xcf, 0xcc, 0x14, 0xf1, 0x81, 0x34, 0x9e, 0x97,
+ 0x2b, 0xc9, 0xa7, 0x1d, 0xdf, 0xa5, 0x24, 0xae, 0xcb, 0x25, 0xb9, 0xc8,
+ 0x05, 0xf6, 0x4a, 0xff, 0x05, 0x7f, 0x1a, 0xc4, 0x4a, 0x08, 0xfb, 0x64,
+ 0xed, 0x20, 0x68, 0xf4, 0x0a, 0x6d, 0x01, 0x00, 0x50, 0xe8, 0x0e, 0x59,
+ 0xfa, 0x01, 0x53, 0x01, 0x01, 0xde, 0x13, 0x81, 0x04, 0xf2, 0x0b, 0x05,
+ 0xed, 0x1c, 0xfe, 0x07, 0xf0, 0xfe, 0xeb, 0x34, 0xfb, 0xf6, 0x20, 0xfd,
+ 0x00, 0x1d, 0xf8, 0xf8, 0x28, 0x02, 0xfa, 0x22, 0xdf, 0x33, 0xb7, 0xcb,
+ 0x40, 0xba, 0xee, 0x1b, 0xf2, 0xe1, 0x41, 0x91, 0xc5, 0x58, 0x81, 0xc1,
+ 0x38, 0xab, 0x04, 0x04, 0xf5, 0xe6, 0x29, 0xbd, 0xd3, 0x2c, 0xc4, 0xa5,
+ 0x0f, 0x4e, 0xdf, 0xfe, 0x57, 0xfc, 0xf8, 0x21, 0xfc, 0x09, 0x63, 0xfc,
+ 0x00, 0x7f, 0x03, 0xfa, 0x66, 0x09, 0x08, 0x16, 0xf8, 0x09, 0x4f, 0x14,
+ 0x05, 0x4b, 0xfc, 0x00, 0xfb, 0xe8, 0x20, 0xef, 0xf1, 0x0c, 0xef, 0xfa,
+ 0x25, 0xce, 0xba, 0x73, 0xd3, 0xbd, 0x4e, 0xdc, 0xf0, 0x49, 0xb1, 0xe4,
+ 0x7f, 0xc6, 0xc1, 0x79, 0xdf, 0x05, 0x31, 0x82, 0x2f, 0xf9, 0xe1, 0x5c,
+ 0xa3, 0xd4, 0x00, 0x53, 0x81, 0x45, 0xb6, 0xfc, 0x37, 0xac, 0xff, 0x06,
+ 0x10, 0xdb, 0x22, 0xca, 0x04, 0x30, 0xb5, 0x04, 0x66, 0xfe, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x09, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x1c, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x6d, 0x6f, 0x64, 0x65,
+ 0x6c, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2f, 0x52, 0x65, 0x6c, 0x75, 0x3b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f,
+ 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c,
+ 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x46, 0x75, 0x73, 0x65,
+ 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4e, 0x6f, 0x72, 0x6d, 0x56, 0x33,
+ 0x3b, 0x63, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x2f, 0x62, 0x69, 0x61, 0x73,
+ 0x3b, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x63, 0x6f, 0x6e, 0x76, 0x32,
+ 0x64, 0x2f, 0x42, 0x69, 0x61, 0x73, 0x41, 0x64, 0x64, 0x3b, 0x6d, 0x6f,
+ 0x64, 0x65, 0x6c, 0x2f, 0x63, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x2f, 0x43,
+ 0x6f, 0x6e, 0x76, 0x32, 0x44, 0x31, 0x00, 0x00, 0x28, 0xfe, 0xff, 0xff,
+ 0x08, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x93, 0xc8, 0x52, 0x39, 0x5c, 0x36, 0x73, 0x39, 0x26, 0x92, 0x02, 0x39,
+ 0x39, 0xfd, 0x48, 0x39, 0x64, 0x2b, 0x46, 0x39, 0x76, 0xae, 0x86, 0x39,
+ 0x90, 0x52, 0xbc, 0x38, 0xd0, 0xc2, 0xe2, 0x38, 0x2c, 0x13, 0xd6, 0x38,
+ 0x55, 0x74, 0x41, 0x39, 0xee, 0xe5, 0xf0, 0x38, 0x51, 0x0a, 0xb9, 0x39,
+ 0x61, 0xfc, 0xef, 0x38, 0x01, 0xed, 0xc1, 0x38, 0x1f, 0x36, 0x7a, 0x38,
+ 0xac, 0x4c, 0x0e, 0x39, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x08, 0x00, 0x04, 0x00,
+ 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00,
+ 0x18, 0x00, 0x08, 0x00, 0x07, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x14, 0x00,
+ 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00,
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
+ 0x5f, 0x61, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x70, 0x6f, 0x6f,
+ 0x6c, 0x69, 0x6e, 0x67, 0x32, 0x64, 0x2f, 0x4d, 0x65, 0x61, 0x6e, 0x2f,
+ 0x72, 0x65, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e,
+ 0x64, 0x69, 0x63, 0x65, 0x73, 0x00, 0x00, 0x00, 0x58, 0xff, 0xff, 0xff,
+ 0x14, 0x00, 0x1c, 0x00, 0x08, 0x00, 0x07, 0x00, 0x0c, 0x00, 0x10, 0x00,
+ 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x09, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x20, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x20, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
+ 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x66, 0x61,
+ 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x31, 0x3a,
+ 0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x0c, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00,
+ 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x01, 0x00, 0x00, 0x00,
+ 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x04, 0x00,
+ 0x04, 0x00, 0x00, 0x00};
+unsigned int g_magic_wand_model_data_len = 30880;
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/magic_wand_model_data.h b/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/magic_wand_model_data.h
new file mode 100644
index 000000000..9a7b9a814
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/magic_wand_model_data.h
@@ -0,0 +1,24 @@
+/* Copyright 2020 The TensorFlow Authors. All Rights Reserved.
+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.
+==============================================================================*/
+
+// This is a standard TensorFlow Lite model file that has been converted into a
+// C data array, so it can be easily compiled into a binary for devices that
+// don't have a file system. It was created using the command:
+// xxd -i magic_wand_model.tflite > magic_wand_model_data.cc
+
+#ifndef TENSORFLOW_LITE_MICRO_EXAMPLES_MAGIC_WAND_MAGIC_WAND_MODEL_DATA_H_
+#define TENSORFLOW_LITE_MICRO_EXAMPLES_MAGIC_WAND_MAGIC_WAND_MODEL_DATA_H_
+
+extern const unsigned char g_magic_wand_model_data[];
+extern const int g_magic_wand_model_data_len;
+
+#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_MAGIC_WAND_MAGIC_WAND_MODEL_DATA_H_
\ No newline at end of file
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/rasterize_stroke.cpp b/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/rasterize_stroke.cpp
new file mode 100644
index 000000000..839a85db0
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/rasterize_stroke.cpp
@@ -0,0 +1,157 @@
+/* Copyright 2020 The TensorFlow Authors. All Rights Reserved.
+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.
+==============================================================================*/
+
+#include "rasterize_stroke.h"
+
+namespace {
+constexpr int kFixedPoint = 4096;
+
+int32_t MulFP(int32_t a, int32_t b) { return (a * b) / kFixedPoint; }
+
+int32_t DivFP(int32_t a, int32_t b) {
+ if (b == 0) {
+ b = 1;
+ }
+ return (a * kFixedPoint) / b;
+}
+
+int32_t FloatToFP(float a) { return static_cast(a * kFixedPoint); }
+
+int32_t NormToCoordFP(int32_t a_fp, int32_t range_fp, int32_t half_size_fp) {
+ const int32_t norm_fp = DivFP(a_fp, range_fp);
+ return MulFP(norm_fp, half_size_fp) + half_size_fp;
+}
+
+int32_t RoundFPToInt(int32_t a) {
+ return static_cast((a + (kFixedPoint / 2)) / kFixedPoint);
+}
+
+int32_t Gate(int32_t a, int32_t min, int32_t max) {
+ if (a < min) {
+ return min;
+ } else if (a > max) {
+ return max;
+ } else {
+ return a;
+ }
+}
+
+int32_t Abs(int32_t a) {
+ if (a > 0) {
+ return a;
+ } else {
+ return -a;
+ }
+}
+
+} // namespace
+
+void RasterizeStroke(int8_t* stroke_points, int stroke_points_count,
+ float x_range, float y_range, int width, int height,
+ int8_t* out_buffer) {
+ constexpr int num_channels = 3;
+ const int buffer_byte_count = height * width * num_channels;
+
+ for (int i = 0; i < buffer_byte_count; ++i) {
+ out_buffer[i] = -128;
+ }
+
+ const int32_t width_fp = width * kFixedPoint;
+ const int32_t height_fp = height * kFixedPoint;
+ const int32_t half_width_fp = width_fp / 2;
+ const int32_t half_height_fp = height_fp / 2;
+ const int32_t x_range_fp = FloatToFP(x_range);
+ const int32_t y_range_fp = FloatToFP(y_range);
+
+ const int t_inc_fp = kFixedPoint / stroke_points_count;
+
+ const int one_half_fp = (kFixedPoint / 2);
+
+ for (int point_index = 0; point_index < (stroke_points_count - 1);
+ ++point_index) {
+ const int8_t* start_point = &stroke_points[point_index * 2];
+ const int32_t start_point_x_fp = (start_point[0] * kFixedPoint) / 128;
+ const int32_t start_point_y_fp = (start_point[1] * kFixedPoint) / 128;
+
+ const int8_t* end_point = &stroke_points[(point_index + 1) * 2];
+ const int32_t end_point_x_fp = (end_point[0] * kFixedPoint) / 128;
+ const int32_t end_point_y_fp = (end_point[1] * kFixedPoint) / 128;
+
+ const int32_t start_x_fp =
+ NormToCoordFP(start_point_x_fp, x_range_fp, half_width_fp);
+ const int32_t start_y_fp =
+ NormToCoordFP(-start_point_y_fp, y_range_fp, half_height_fp);
+ const int32_t end_x_fp =
+ NormToCoordFP(end_point_x_fp, x_range_fp, half_width_fp);
+ const int32_t end_y_fp =
+ NormToCoordFP(-end_point_y_fp, y_range_fp, half_height_fp);
+ const int32_t delta_x_fp = end_x_fp - start_x_fp;
+ const int32_t delta_y_fp = end_y_fp - start_y_fp;
+
+ const int32_t t_fp = point_index * t_inc_fp;
+ int32_t red_i32;
+ int32_t green_i32;
+ int32_t blue_i32;
+ if (t_fp < one_half_fp) {
+ const int32_t local_t_fp = DivFP(t_fp, one_half_fp);
+ const int32_t one_minus_t_fp = kFixedPoint - local_t_fp;
+ red_i32 = RoundFPToInt(one_minus_t_fp * 255) - 128;
+ green_i32 = RoundFPToInt(local_t_fp * 255) - 128;
+ blue_i32 = -128;
+ } else {
+ const int32_t local_t_fp = DivFP(t_fp - one_half_fp, one_half_fp);
+ const int32_t one_minus_t_fp = kFixedPoint - local_t_fp;
+ red_i32 = -128;
+ green_i32 = RoundFPToInt(one_minus_t_fp * 255) - 128;
+ blue_i32 = RoundFPToInt(local_t_fp * 255) - 128;
+ }
+ const int8_t red_i8 = Gate(red_i32, -128, 127);
+ const int8_t green_i8 = Gate(green_i32, -128, 127);
+ const int8_t blue_i8 = Gate(blue_i32, -128, 127);
+
+ int line_length;
+ int32_t x_inc_fp;
+ int32_t y_inc_fp;
+ if (Abs(delta_x_fp) > Abs(delta_y_fp)) {
+ line_length = Abs(RoundFPToInt(delta_x_fp));
+ if (delta_x_fp > 0) {
+ x_inc_fp = 1 * kFixedPoint;
+ y_inc_fp = DivFP(delta_y_fp, delta_x_fp);
+ } else {
+ x_inc_fp = -1 * kFixedPoint;
+ y_inc_fp = -DivFP(delta_y_fp, delta_x_fp);
+ }
+ } else {
+ line_length = Abs(RoundFPToInt(delta_y_fp));
+ if (delta_y_fp > 0) {
+ y_inc_fp = 1 * kFixedPoint;
+ x_inc_fp = DivFP(delta_x_fp, delta_y_fp);
+ } else {
+ y_inc_fp = -1 * kFixedPoint;
+ x_inc_fp = -DivFP(delta_x_fp, delta_y_fp);
+ }
+ }
+ for (int i = 0; i < (line_length + 1); ++i) {
+ const int32_t x_fp = start_x_fp + (i * x_inc_fp);
+ const int32_t y_fp = start_y_fp + (i * y_inc_fp);
+ const int x = RoundFPToInt(x_fp);
+ const int y = RoundFPToInt(y_fp);
+ if ((x < 0) or (x >= width) or (y < 0) or (y >= height)) {
+ continue;
+ }
+ const int buffer_index = (y * width * num_channels) + (x * num_channels);
+ out_buffer[buffer_index + 0] = red_i8;
+ out_buffer[buffer_index + 1] = green_i8;
+ out_buffer[buffer_index + 2] = blue_i8;
+ }
+ }
+}
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/rasterize_stroke.h b/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/rasterize_stroke.h
new file mode 100644
index 000000000..a9c118a32
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/rasterize_stroke.h
@@ -0,0 +1,22 @@
+/* Copyright 2020 The TensorFlow Authors. All Rights Reserved.
+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 TENSORFLOW_LITE_MICRO_EXAMPLES_MAGIC_WAND_RASTERIZE_STROKE_H
+#define TENSORFLOW_LITE_MICRO_EXAMPLES_MAGIC_WAND_RASTERIZE_STROKE_H
+
+#include
+
+void RasterizeStroke(int8_t* stroke_points, int stroke_points_count,
+ float x_range, float y_range, int width, int height,
+ int8_t* out_buffer);
+
+#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_MAGIC_WAND_RASTERIZE_STROKE_H
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/train/train_magic_wand_model.ipynb b/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/train/train_magic_wand_model.ipynb
new file mode 100644
index 000000000..63379fdc6
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/train/train_magic_wand_model.ipynb
@@ -0,0 +1 @@
+{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"Copy of Magic Wand Training","provenance":[{"file_id":"https://github.com/petewarden/magic_wand/blob/main/train/train_magic_wand_model.ipynb","timestamp":1638386707719}],"collapsed_sections":[]},"kernelspec":{"name":"python3","display_name":"Python 3"}},"cells":[{"cell_type":"code","metadata":{"id":"0g1pF6RfViPr","executionInfo":{"status":"ok","timestamp":1638745473565,"user_tz":480,"elapsed":179,"user":{"displayName":"David Davis","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"03716636181783186066"}}},"source":["SAVED_MODEL_FILENAME = \"saved_model\"\n","FLOAT_TFL_MODEL_FILENAME = \"float_model.tfl\"\n","QUANTIZED_TFL_MODEL_FILENAME = \"quantized_model.tfl\"\n","TFL_CC_MODEL_FILENAME = \"magic_wand_model_data.cc\""],"execution_count":1,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"xvPo0OP0TFDq","executionInfo":{"status":"ok","timestamp":1638745477856,"user_tz":480,"elapsed":2072,"user":{"displayName":"David Davis","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"03716636181783186066"}},"outputId":"2b44a027-1c9a-46aa-9660-57db546c8f75"},"source":["!curl -L https://github.com/petewarden/magic_wand_digit_data/archive/8170591863f9addca27b1a963263f7c7bed33f41.zip -o magic_wand_digit_data.zip\n","!unzip magic_wand_digit_data.zip\n","!rm -rf magic_wand_digit_data\n","!mv magic_wand_digit_data-* magic_wand_digit_data\n","!rm -rf magic_wand_digit_data.zip\n","!rm -rf sample_data\n","!mkdir -p checkpoints"],"execution_count":2,"outputs":[{"output_type":"stream","name":"stdout","text":[" % Total % Received % Xferd Average Speed Time Time Time Current\n"," Dload Upload Total Spent Left Speed\n","100 171 0 171 0 0 228 0 --:--:-- --:--:-- --:--:-- 228\n","100 238k 0 238k 0 0 250k 0 --:--:-- --:--:-- --:--:-- 1667k\n","Archive: magic_wand_digit_data.zip\n","8170591863f9addca27b1a963263f7c7bed33f41\n"," creating: magic_wand_digit_data-8170591863f9addca27b1a963263f7c7bed33f41/\n"," inflating: magic_wand_digit_data-8170591863f9addca27b1a963263f7c7bed33f41/LICENSE \n"," inflating: magic_wand_digit_data-8170591863f9addca27b1a963263f7c7bed33f41/petewarden_0.json \n"," inflating: magic_wand_digit_data-8170591863f9addca27b1a963263f7c7bed33f41/petewarden_1.json \n"," inflating: magic_wand_digit_data-8170591863f9addca27b1a963263f7c7bed33f41/petewarden_2.json \n"," inflating: magic_wand_digit_data-8170591863f9addca27b1a963263f7c7bed33f41/petewarden_3.json \n"," inflating: magic_wand_digit_data-8170591863f9addca27b1a963263f7c7bed33f41/petewarden_4.json \n"," inflating: magic_wand_digit_data-8170591863f9addca27b1a963263f7c7bed33f41/petewarden_5.json \n"," inflating: magic_wand_digit_data-8170591863f9addca27b1a963263f7c7bed33f41/petewarden_6.json \n"," inflating: magic_wand_digit_data-8170591863f9addca27b1a963263f7c7bed33f41/petewarden_7.json \n"," inflating: magic_wand_digit_data-8170591863f9addca27b1a963263f7c7bed33f41/petewarden_8.json \n"," inflating: magic_wand_digit_data-8170591863f9addca27b1a963263f7c7bed33f41/petewarden_9.json \n"]}]},{"cell_type":"code","metadata":{"id":"mWO58-igVFSd","executionInfo":{"status":"ok","timestamp":1638745496968,"user_tz":480,"elapsed":166,"user":{"displayName":"David Davis","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"03716636181783186066"}}},"source":["import glob\n","import json\n","\n","strokes = []\n","for filename in glob.glob(\"magic_wand_digit_data/*.json\"):\n"," with open(filename, \"r\") as file:\n"," file_contents = file.read()\n"," file_data = json.loads(file_contents)\n"," for stroke in file_data[\"strokes\"]:\n"," stroke[\"filename\"] = filename\n"," strokes.append(stroke)"],"execution_count":3,"outputs":[]},{"cell_type":"code","metadata":{"id":"xfLzrpyLVJ5S","executionInfo":{"status":"ok","timestamp":1638745501162,"user_tz":480,"elapsed":171,"user":{"displayName":"David Davis","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"03716636181783186066"}}},"source":["import matplotlib.pyplot as plt\n","\n","def plot_stroke(stroke):\n","\n"," x_array = []\n"," y_array = []\n"," for coords in stroke[\"strokePoints\"]:\n"," x_array.append(coords[\"x\"])\n"," y_array.append(coords[\"y\"])\n","\n"," fig = plt.figure(figsize=(12.8, 4.8))\n"," fig.suptitle(stroke[\"label\"])\n","\n"," ax = fig.add_subplot(131)\n"," ax.set_xlabel('x')\n"," ax.set_ylabel('y')\n"," ax.set_xlim(-0.4, 0.4)\n"," ax.set_ylim(-0.4, 0.4)\n"," ax.plot(x_array, y_array)\n","\n"," plt.show()"],"execution_count":4,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":391},"id":"dveZd2ZuW-jl","executionInfo":{"status":"ok","timestamp":1638746177871,"user_tz":480,"elapsed":466,"user":{"displayName":"David Davis","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"03716636181783186066"}},"outputId":"ab8d5f8e-d753-49eb-fc06-607944f55e86"},"source":["import numpy as np\n","\n","shuffled_strokes = list(strokes)\n","np.random.shuffle(shuffled_strokes)\n","plot_stroke(shuffled_strokes[0])\n","print(f\"This stroke: {len(shuffled_strokes[0]['strokePoints'])}\")\n","func = lambda x: len(x[\"strokePoints\"])\n","values = list(map(func, strokes))\n","print(f\"All strokes: min {np.min(values)} max {np.max(values)} avg {np.average(values)}\")"],"execution_count":8,"outputs":[{"output_type":"display_data","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAZkAAAFUCAYAAAD200GkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deXhV9b3v8fc3CQlzICRASMIgRCmTIhGsQj0WnFuwilWs06ktta3Wc3tsj/fY2/bae0611rZPj/Yo1T51wqHcqtTZUquiMgSkDAokoISEIWEKc0KS7/0jW2/AkIRkr72y9/68noeHvfb+Ze3Pegj5ZK3fWmubuyMiIhKElLADiIhI4lLJiIhIYFQyIiISGJWMiIgERiUjIiKBUcmIiEhgVDIiIhIYlYyIiLSJmX3OzP5mZtVmVmpmX2nta1QyIiLSKjNLA54HXgCygNnA42Z2cotfpyv+RUSkNWY2BlgE9PJIcZjZa8Bid/9fx/s67cmIiEh7GTCmpQEqGRERaYt1QCXwAzPrYmbnA+cA3Vv6Ih0uExGRNjGzccB/0bj3UgxUATXufuNxv0YlIyIi7WFm7wKPuPuDxxujw2UiItImZjbOzLqaWXczuw3IBf7Y0teoZEREpK2uBbbSODczFTjP3Wta+gIdLhMRkcBoT0ZERAKjkhERkcCoZEREJDAqGRERCYxKRkREAqOSERGRwKhkREQkMCoZEREJjEpGREQCo5IREZHAqGRERCQwKhkREQmMSkZERAKjkhERkcCoZEREJDAqGRERCYxKRkREAqOSERGRwKhkREQkMCoZEREJTKglY2YXmtk6Mys1s9tbGHe5mbmZFcUyn4iIdExoJWNmqcD9wEXAKGCWmY1qZlwv4FZgcWwTiohIR4W5JzMRKHX3je5eCzwFzGhm3M+Au4HDsQwnIiIdlxbie+cBm5sslwOTmg4ws9OBAnd/0cx+cLwVmdlsYDZAjx49JowcOTKAuCLJZdmyZTvcPSfsHBLfwiyZFplZCvAr4IbWxrr7HGAOQFFRkRcXFwcbTiQJmNmmsDNI/AvzcFkFUNBkOT/y3Cd6AWOAv5vZx8CZwHxN/ouIxI8wS2YpUGhmw8wsHbgKmP/Ji+5e7e7Z7j7U3YcCi4Dp7q7dFBGROBFaybh7HXAz8CrwIfCMu68xszvNbHpYuUREJHpCnZNx95eAl4557sfHGftPscgkIiLRoyv+RUQkMCoZEREJjEpGREQCo5IREZHAqGRERCQwKhkREQmMSkZERAKjkhERkcCoZEREJDAqGRERCYxKRkREAqOSERGRwKhkREQkMCoZEREJjEpGREQCo5IREZHAqGRERCQwKhkREQmMSkZERAKjkhERkcCoZEREJDAqGRERCYxKRkREAhNqyZjZhWa2zsxKzez2Zl6/ycxWmdkKM1toZqPCyCkiIu2TFtYbm1kqcD9wHlAOLDWz+e7+QZNhc939gcj46cCvgAtjHlZiZlV5Nfe+vo7dB2pbHHfmSf343tRCemSE9i0sIm0Q5v/QiUCpu28EMLOngBnApyXj7nubjO8BeEwTSszsO3yEe19bz6PvfUxWjwzG5PU+7tiaIw08+NZG/vKPLfx0+mjOHz0wdkFF5ISEWTJ5wOYmy+XApGMHmdl3ge8D6cAXm1uRmc0GZgMMHjw46kElOO7OK6u38dO/rKFyXw3XTBrCbRecQma3Li1+3bJNu/j3P69m9mPLOG/UAO6cMZrczG4xSi0ibdXpJ/7d/X53Hw78G/Cj44yZ4+5F7l6Uk5MT24DSbpt3HeTrf1zKt59YTr8eGfz522fxs0vHtFowABOGZPHC9yZz+0Ujebukipn//R4799fEILWInIgwS6YCKGiynB957nieAi4NNJHExJH6Bh54cwPn/fpNFn+0ix9d8jnm33w24wf3PaH1dElN4aZzhvPMtz7Pjv01fHfuco7UNwSUWkTaI8ySWQoUmtkwM0sHrgLmNx1gZoVNFi8BSmKYTwKwbNMuvvxfC7nr5bVMKczh9e+fwzemnERaavu/Fcfl9+Hnl41l0cZd/MeLH0YxrYh0VGhzMu5eZ2Y3A68CqcAf3H2Nmd0JFLv7fOBmM5sGHAF2A9eHlVc6Zs/BWu5+ZR1PLiljUGZX5lw7IaoT9pedns+aLXt5eOFHjB7UmyuKClr/IhEJnLkn1glbRUVFXlxcHHYMiXB3nl+xhZ+98AF7Dh3h62cP5V+mnRzIqcd19Q1c94clFG/azTPf+jynFfSJ+nskEzNb5u5FYeeQ+NbpJ/4lfh0+Us//eHoF//L0CvKzujP/5rO545JRgV3bkpaawn1Xn07/Xhl867FiKvcdDuR9RKTtVDISiMq9h7lyziKeW7GFfz3vZP787bMYPSgz8PfN6pHOnGuLqD50hO88vpzaOp0IIBImlYxE3aryaqbf9w4l2/fxwDUTuGVqIakpFrP3HzWoN/fMPJXiTbv5339ZE7P3FZHP0j05JKpeWLmF2/70D/r1yGDeTWcxatDxr9wP0pdPHcSaLXt54M0NjB6UydWTdJGuSBhUMhIVDQ3ObxaU8NsFJRQN6csD104gu2dGqJl+cMEpfLh1Lz+Zv5pTBvZkwpCsUPOIJCMdLpOouPOFD/jtghJmTsjniW9OCr1gAFJTjN9eNZ68Pt347hPva35GJAQqGemwZ5Zu5o/vfszXzx7GPTPHkZGWGnakT2V278JPpo9m297DvPbBtrDjiCQdlYx0yPKy3fzoudVMKczm3y8eiVnsJvjb6guFOeT16cbcxWVhRxFJOioZabfKvYe56bFlDMzsyn/NGt+hW8MEKTXFmDWxgHc37OSjHQfCjiOSVDrnTwXp9Grq6vnW48vYd7iOOddNoE/39LAjteirRQWkpRhPLtHejEgsqWSkXX79egnvl+3h3q+eysiB4ZymfCL69+7KtM8NYN6ycmrq6sOOI5I0VDJywg7V1jN38Sa+NC6Xi8fmhh2nza6eNJhdB2p5ZbVOABCJFZWMnLAXVm5h7+E6rjlzSNhRTsjkEdkMzuquEwBEYkglIyds7pIyhuf0YNKw+Lq4MSXFmDVxMIs/2kVp5f6w44gkBZWMnJAPt+7l/bI9zJo4uFOertyaK4ry6ZKqEwBEYkUlIyfk929vJD0thZkT8sOO0i7ZPTM4f/RA5i0r5/ARnQAgEjSVjLTZ00vL+PPyCr5+9rBOf8pyS742cTDVh47w8uqtYUcRSXgqGWmT5WW7+V/PrWFKYTa3nX9y2HE65PPD+zEsuwdPLNIhM5GgqWSkVfFyZX9bmTXeAaB4027Wb98XdhyRhBbfPy0kcDV19dwUR1f2t9XMCQWkp6bodGaRgKlkpEV3vbyW5XF0ZX9bZfVI58IxA/m/y8s5VKsTAESCopKR46pvcOYtK+fS0wbF1ZX9bXX1pMHsO1zHCyu3hB1FJGGpZOS4VpbvYd/hOqZ+bkDYUQIxaVgWw3N6MFfXzIgERiUjx7WwZAcAZ4/IDjlJMBpPABjM+2V7+HDr3rDjiCSkUEvGzC40s3VmVmpmtzfz+vfN7AMzW2lmC8wsvm6WFecWlu5g9KDeZPVIjMn+5syckE96mk4AEAlKaCVjZqnA/cBFwChglpmNOmbY+0CRu48D5gG/iG3K5HWgpo7lZbuZXJiYezGf6NM9nUvG5vLs+xUcrK0LO45IwglzT2YiUOruG929FngKmNF0gLu/4e4HI4uLgPi8l0kcWvLRLo7UO5MT9FBZUzNOG8T+mjreL9sTdhSRhBNmyeQBm5ssl0eeO54bgZebe8HMZptZsZkVV1VVRTFi8lpYuoP0tBTOGBpfd1puj1Pz+wCwqqI65CQiiScuJv7N7BqgCLinudfdfY67F7l7UU5OTmzDJaiFJTs4Y2hfunZJDTtK4Pr2SKcgqxurylUyItEWZslUAAVNlvMjzx3FzKYBdwDT3b0mRtmSWuXew6zbvo/JI5KnsMfmZWpPRiQAYZbMUqDQzIaZWTpwFTC/6QAzGw88SGPBVIaQMSm9s6Hx1OUpCT7p39TYvD6U7TrInoO1YUcRSSihlYy71wE3A68CHwLPuPsaM7vTzKZHht0D9AT+ZGYrzGz+cVYnUfR2yQ6yeqQzKjdxbiPTmrF5mQCsrtD1MiLRlBbmm7v7S8BLxzz34yaPp8U8VJJzdxaW7OCs4f1ISYm/T75sr09KZmXFnoQ/bVskluJi4l9ip6RyP5X7apLi1OWmMrt3YXBWd1ZrXkYkqlQycpRPbiWTjL/Nj83PZKXOMBOJKpWMHGVh6Q6GZfcgv2/3sKPE3Ni8TMp3H2L3AU3+i0SLSkaOsm7bPk4r6BN2jFCMGdQ4L/OBbpYpEjUqGTmKu5OWRBP+TRUO6AlAaeX+kJOIJA6VjEhE/14Z9MpIU8mIRJFKRiTCzBjev6dKRiSKVDIiTRT270lplUpGJFpUMiJNjOjfk6p9NVQfPBJ2FJGEoJIRaWJE/8jkf9W+kJOIJAaVjHxGg4edIDyflozmZUSiQiUjR8nP6s767cn7W3x+3+6kp6WoZESiRCUjR5k8IpvVW6qT9qr31BRjeI7OMBOJFpWMHGVyYTbu//8zZZLRCJ1hJhI1Khk5yri8THp1Tfv0RpnJaEROT8p3H+JQbX3YUUTinkpGjpKWmsLnT+rH2yU7cE/OMwBG9O+JO2zQ3oxIh6lk5DOmFGZTsecQm3YeDDtKKHJ6ZQCwR9fKiHSYSkY+Y3JhDgBvlybnITNLzvuDigRCJSOfMbRfd/L6dGNhSVXYUUQkzqlk5DPMjMkjsnl3w07qk/nKTBHpMJWMNGtyYTb7DtexsnxP2FFEJI6pZKRZZw3vB5DUpzKLSMepZKRZ/XpmMHpQbxYm6eS/iESHSkaOa3JhNsvLdnOgpi7sKCISp0ItGTO70MzWmVmpmd3ezOtfMLPlZlZnZjPDyJjMJo/I5ki9s+SjXWFHEZE4FVrJmFkqcD9wETAKmGVmo44ZVgbcAMyNbToBOGNoFulpKTpkJiLtlhbie08ESt19I4CZPQXMAD74ZIC7fxx5rSGMgMmua5dUJg7N0uS/iLRbmIfL8oDNTZbLI8+dMDObbWbFZlZcVaULCKPp7BHZrNu+j8q9h8OOIiJxKCEm/t19jrsXuXtRTk5O2HESypTCbAAdMhORdgmzZCqAgibL+ZHnpBMZldubvt27qGREpF3CLJmlQKGZDTOzdOAqYH6IeaQZKSnGWSOyWZjEt/4XkfYLrWTcvQ64GXgV+BB4xt3XmNmdZjYdwMzOMLNy4ArgQTNbE1beZDZlRDaV+2oo0UcSi8gJCvPsMtz9JeClY577cZPHS2k8jCYhmhyZl3m7ZAcnD+gVchoRiScJMfEvwcrv252h/brz8qqtNOiuzCJyAlQy0ibfmHISxZt285sFJWFHEZE4opKRNvnapMFcMSGf3y4o4ZXV28KOIyJxQiUjbWJm/OzSMZxa0Id/fWYF67fvCzuSiMQBlYy0WdcuqTx4zQS6pacx+9Fiqg8eCTuSiHRyKhk5IQMzu/LANadTsecQ335iGfsOJ17R6HIgkehRycgJKxqaxd2Xj2PJR7u47HfvUrbzYNiRoqp8d+P29O+dEXISkfinkpF2uez0fB69cSJV+2uYfv9C3tuwM+xIUbOyvJpuXVIZntMz7CgicU8lI+121vBsnvvO2WT3zODahxczd3FZ2JGiYnVFNaMH9SY1xcKOIhL3VDLSIUOze/Dn75zF5MJs/v3ZVfx0/hrq6uP343/qG5w1W/YyJi8z7CgiCUElIx3Wu2sXHr7+DL45ZRh/fPdjrvvDEjbvis95mg1V+zl0pJ5x+SoZkWhQyUhUpKYYd1wyintmjmPF5j2c/+u3ePDNDRyJs72aleXVAIzVnoxIVIR6g0xJPFcUFXDWiGx+On8NP395Lc++X8F/fGUME4ZkRf29Dh+pp3z3oaOey0hLoSCre7vXubqimu7pqZykSX+RqFDJSNTl9enG768r4tU12/jp/DVc/t/vMXFYFteeOYQLRg8kPa3jO9C7D9Ry6e/eYdMxp0+PyevNC7dMafd6V5bv0aS/SBSpZCQwF4weyNkjsnli0SYeX7yJW558n+yeGcyaWMCsiYMZ1Kdbu9ZbV9/AzU8uZ+uew/zHV8bQq2uXT1/L7Nalha9sfb0fbN3L1ROHtHsdInI0lYwEqmdGGt86ZzjfnHISb5ZU8fh7m7jvjVLuf6OUc07OYUDvrp+OTU0xZk7IZ/zgvp8+5+48vPAjSpt8YFrFnkO8U7qTX8wcx1eLCoiW0qr9HD7SwNj83lFbp0iyU8lITKSkGOee0p9zT+nP5l0HeXJJGS+u2soHW/d+Omb/4TrmLinja5MG84MLRpLZrQtz3trIz19eS3bPDFKbHGX73tTCqBYMaNJfJAgqGYm5gqzu/PDCkfzwwpFHPb+/po57X1vHI+9+zKtrtnNlUQG/+3spl4zN5b6rx2MW7DzJ6opqeqSnclK2Jv1FokWnMEun0TMjjZ98eTTzb55MbmZX7nujlJMH9OKeK8YFXjDQuCczOi+TFE36i0SN9mSk0xmTl8mz3zmbV9dso2hIX7qnB/9teqS+gQ+37uWaMzXpLxJNKhnplFJTjIvH5sbs/Uq276emrkFX+otEmQ6XidA4HwPonmUiUaaSEQFWVuyhZ0Yaw/r1CDuKSEIJtWTM7EIzW2dmpWZ2ezOvZ5jZ05HXF5vZ0NinlGSwqmIvY/J6a9JfJMpCKxkzSwXuBy4CRgGzzGzUMcNuBHa7+wjg18DdsU0pyeCTSX9dHyMSfa2WjJndYmZ9WxvXDhOBUnff6O61wFPAjGPGzAAeiTyeB0y1WJzLKkll/fZ91NY1MDa/T9hRRBJOW/ZkBgBLzeyZyOGtaP2QzwM2N1kujzzX7Bh3rwOqgX7HrsjMZptZsZkVV1VVRSmeJItVutJfJDCtloy7/wgoBB4GbgBKzOw/zWx4wNnazN3nuHuRuxfl5OSEHUfizKqKanp1TWNIBz4iQESa16Y5GXd3YFvkTx3QF5hnZr/owHtXAE1vPpUfea7ZMWaWBmQCOzvwniKfsaqimjGDdKW/SBDaMidzq5ktA34BvAOMdfdvAxOAyzvw3kuBQjMbZmbpwFXA/GPGzAeujzyeCfwtUngiUVFb18Darft0EaZIQNpyxX8WcJm7b2r6pLs3mNmX2vvG7l5nZjcDrwKpwB/cfY2Z3QkUu/t8Gg/RPWZmpcAuGotIJGrWb99HbX0DY1UyIoFotWTc/SctvPZhR97c3V8CXjrmuR83eXwYuKIj7yHSklUVmvQXCZKu+JektrK8mt5d0xisSX+RQKhkJKmtrqhmbH5mTD5KQCQZqWQkadXU1bN2217G5ukiTJGgqGQkaa3ftp8j9a4zy0QCpJKRpLX4o8ZLrjTpLxIclYwkJXfnySVljB/chwJN+osERiUjSWnJR7vYUHWAqycODjuKSEJTyUhSemJxGb26pvGlcYPCjiKS0FQyknR2HajlldXbuPz0fLqlp4YdRyShqWQk6cxbtpna+gaunqRDZSJBU8lIUmmc8N9M0ZC+nDygV9hxRBKeSkaSynsbdvLRjgPaixGJEZWMJJUnlpSR2a0LF4/NDTuKSFJQyUjS2LG/htfWbGPmhHy6dtGEv0gsqGQkaTy/YgtH6p1ZujZGJGZUMpI01lRUM7B3V0b07xl2FJGkoZKRpFFatV8FIxJjKhlJCu7OhkqVjEisqWQkKWytPsyB2nqVjEiMqWQkKZRU7gdQyYjEmEpGkkKpSkYkFCoZSQqllfvp070L/Xqkhx1FJKmoZCQpbKjcT2H/nphZ2FFEkopKRpKCTl8WCUcoJWNmWWb2upmVRP7ue5xxr5jZHjN7IdYZJXHs3F/DrgO1DM9RyYjEWlh7MrcDC9y9EFgQWW7OPcC1MUslCUmT/iLhCatkZgCPRB4/Alza3CB3XwDsi1UoSUylVY0lU6jPjxGJubBKZoC7b4083gYM6MjKzGy2mRWbWXFVVVXH00lCWbZpN70y0sjt3TXsKCJJJy2oFZvZX4GBzbx0R9MFd3cz8468l7vPAeYAFBUVdWhdkliqDx3hpVVb+cr4fFJSdGaZSKwFVjLuPu14r5nZdjPLdfetZpYLVAaVQ5Lbs8vLOXykga/pkzBFQhHW4bL5wPWRx9cDz4eUQxKYuzN3SRnj8jMZk5cZdhyRpBRWydwFnGdmJcC0yDJmVmRmD30yyMzeBv4ETDWzcjO7IJS0EpeWbdrN+u37tRcjEqLADpe1xN13AlObeb4Y+EaT5SmxzCWJZe7iMnplpPHlUweFHUUkaemKf0lIew7W8sKqrVw6Po/u6aH8LiUiqGQkQc1bVk5tXQNX61CZSKhUMpJwPpnwHz+4D5/L7R12HJGkppKRhLP4o11srDrA1RO1FyMSNpWMJJw/vvMxvbqm8aVxmvAXCZtKRhLKis17eGXNNv757GF0S08NO45I0lPJSMJwd+5+eS39eqQz+wsnhR1HRFDJSAJ5q2QH723cyS1fHEHPDJ22LNIZqGQkITQ0OHe9vJaCrG5cPWlI2HFEJEIlIwnhLyu38OHWvdx2/imkp+nbWqSz0P9GiXu1dQ388rV1jMrtzZd1RplIp6KSSXK/f2sjSz/eFXaMDpm7eBObdx3i3y4aqc+MEelkVDJJ7q5X1vLmuvj9NNH6BmfOWxuZOCyLLxRmhx1HRI6hkpG49vd1lWypPsw/nzUUM+3FiHQ2KpkkVn3wCA3uxPPP5rmLy8jplcG0UQPCjiIizVDJJKn6BueWp94nLcU4L05/QG/Zc4g31lXy1aJ8uqTqW1mkM9IVa0nqnlfX8db6Kn5+2VjG5fcJO067PLV0Mw5cdYZuhCnSWenXvyRUW9fAnLc2cOlpg5gVp3cqrqtv4OmlZXyhMIeCrO5hxxGR41DJJKEGdxocThkYv5+18re1lWzfW6MPJRPp5HS4LIHtPXyE2Y8Ws/dQ3VHPN7iHlCh65i4pY0DvDKaO7B92FBFpgUomgXVJSWHzrkNU7DnEhCF96ds9/dPXhvbrwbkjc0JM136bdx3kzfVV3HLuCNI04S/SqalkEli39FQevHYCMx94l1Qzfve10xPivl5PLS3DgCvjdD5JJJnE/08cadGYvEzuvnwcSz7exfT7FrJsU3zfQmZ/TR1PLtnMuaf0J69Pt7DjiEgrQikZM8sys9fNrCTyd99mxpxmZu+Z2RozW2lmV4aRNRHMOC2Ph64rYu+hI1z+3+/xP/+8ij0Ha8OO1S6/f2sjuw7UcsvUwrCjiEgbhLUnczuwwN0LgQWR5WMdBK5z99HAhcBvzCw+L+joBKaNGsDr3z+Hb04ZxjPFm5l675ss3rgz7FgnpGpfDQ+9vZGLxw7ktAJ9K4jEg7BKZgbwSOTxI8Clxw5w9/XuXhJ5vAWoBOJzprqT6JGRxh2XjGL+zWeT2b0LNz2+jM27DoYdq83u+1sJh+sauO38U8KOIiJtFFbJDHD3rZHH24AW72tiZhOBdGBD0MGSwehBmfzh+jOob3BmP7aMQ7X1YUdqVdnOg8xdUsaVZxRwUk7PsOOISBsFVjJm9lczW93MnxlNx7m7A8e9cMPMcoHHgH9294bjjJltZsVmVlxVFb+3rY+lodk9+O2s8azdtpcfzPsH3smvnbn39XWkphi3ai5GJK4Edgqzu0873mtmtt3Mct19a6REKo8zrjfwInCHuy9q4b3mAHMAioqKOvdPy07kn07pzw8vGMndr6xlTF4mN50zPOxIzVpdUc3zK7bw3XOHM6B317DjiMgJCOtw2Xzg+sjj64Hnjx1gZunAs8Cj7j4vhtmSyk3nnMQl43K5+5W1PPd+Rafbo6mta+A/X/qQPt278K1OWoIicnxhlcxdwHlmVgJMiyxjZkVm9lBkzFeBLwA3mNmKyJ/TwombuMyMe2aO47SCPvzL0yu48ZHiTnMywK4DtVz78GLe3bCTH14wkt5du4QdSUROkHW231w7qqioyIuLi8OOEXfq6hv447sf86vX1+MOt04r5MbJw0L7nJb12/dx4yNL2b63hl9cPo5Lx+eFkiOZmdkydy8KO4fEN5WMHKVizyF+On8Nr3+wnbw+3bh60mCuPKOA7J4ZMcuw4MPt3PrUCrqlpzLn2gmMH/yZa3UlBlQyEg0qGWnWG2sreWjhRt4p3UmXVOPisblce+YQJgzpiwX0ec3uzpy3NnLXK2sZMyiTOddNIDdTt44Ji0pGokE3yJRmnTuyP+eO7E9p5X6eWLyJecvKeX7FFkYO7MU1Zw7h0vF59MyI3rdP+e6D/PLVdTy3YguXjMvllzNPpVt6atTWLyLh0J6MtMnB2jrmr9jCo+9t4oOte+mZkcZlp+dxzZlDOHlAr3ats6HBeaukiscXbWLB2koMuHXqyXxv6ojA9pak7bQnI9GgkpET4u4sL9vD44s28eLKrdTWN3DmSVlce+ZQzh89oE0nCuw+UMuflm3m8UVllO06SHbPDGZNLOCqiYN1Z+VORCUj0aCSkXbbub+GPy0r5/FFmyjffYi0FCMlpfU9kCP1DbjDxGFZXHvmEC4YPTAhPucm0ahkJBpUMtJh9Q3Om+srWfrxbtry7ZSRlsLFY3M5ZWD7DrNJbKhkJBo08S8dlppifHHkAL44ssX7nIpIEtIxChERCYxKRkREAqOSERGRwKhkREQkMCoZEREJjEpGREQCo5IREZHAqGRERCQwKhkREQmMSkZERAKjkhERkcCoZEREJDAqGRERCYxKRkREAqOSERGRwKhkREQkMKGUjJllmdnrZlYS+btvM2OGmNlyM1thZmvM7KYwsoqISPuFtSdzO7DA3QuBBZHlY20FPu/upwGTgNvNbFAMM4qISAeFVTIzgEcijx8BLj12gLvXuntNZDEDHdoTEYk7Yf3gHuDuWyOPtwHNfji8mRWY2UpgM3C3u285zrjZZlZsZsVVVVXBJBYRkROWFtSKzeyvwMBmXrqj6YK7u5l5c+tw983AuMhhsufMbJ67b29m3BxgDkBRUVGz6xIRkdgLrGTcfdrxXjOz7WaW6+5bzSwXqGxlXVvMbDUwBZgX5agiIhKQsA6XzQeujzy+HibW76wAAAWcSURBVHj+2AFmlm9m3SKP+wKTgXUxSygiIh0WVsncBZxnZiXAtMgyZlZkZg9FxnwOWGxm/wDeBH7p7qtCSSsiIu0S2OGylrj7TmBqM88XA9+IPH4dGBfjaCIiEkU6LVhERAKjkhERkcCoZEREJDAqGRERCYxKRkREAqOSERGRwKhkREQkMCoZEREJjEpGREQCo5IREZHAqGRERCQwKhkREQmMSkZERAKjkhERkcCoZEREJDAqGRERCYxKRkREAqOSERGRwKhkREQkMCoZEREJjEpGREQCo5IREZHAqGRERCQwKhkREQlMKCVjZllm9rqZlUT+7tvC2N5mVm5m98Uyo4iIdFxYezK3AwvcvRBYEFk+np8Bb8UklYiIRFVYJTMDeCTy+BHg0uYGmdkEYADwWoxyiYhIFKWF9L4D3H1r5PE2GovkKGaWAtwLXANMa2llZjYbmB1ZrDGz1VHM2hlkAzvCDhFFibY9kJjbdErYAST+BVYyZvZXYGAzL93RdMHd3cy8mXHfAV5y93Iza/G93H0OMCfyvsXuXtS+1J1Tom1Tom0PJO42hZ1B4l9gJePux937MLPtZpbr7lvNLBeobGbY54EpZvYdoCeQbmb73b2l+RsREelEwjpcNh+4Hrgr8vfzxw5w96998tjMbgCKVDAiIvElrIn/u4DzzKyExvmWuwDMrMjMHurguud0NFwnlGjblGjbA9omkWaZe3PTISIiIh2nK/5FRCQwKhkREQlM3JdMIt6ipi3bZGanmdl7ZrbGzFaa2ZVhZG2JmV1oZuvMrNTMPnPShpllmNnTkdcXm9nQ2Kc8MW3Ypu+b2QeRf5MFZjYkjJxt1dr2NBl3uZm5mSXUadoSvLgvGRLzFjVt2aaDwHXuPhq4EPiNmfWJYcYWmVkqcD9wETAKmGVmo44ZdiOw291HAL8G7o5tyhPTxm16n8YzIccB84BfxDZl27VxezCzXsCtwOLYJpREkAglk4i3qGl1m9x9vbuXRB5vofFao5yYJWzdRKDU3Te6ey3wFI3b1VTT7ZwHTLXWrrwNV6vb5O5vuPvByOIiID/GGU9EW/6NoPGXs7uBw7EMJ4khEUrmRG5Rc1ssg3VAq9vUlJlNBNKBDUEHOwF5wOYmy+WR55od4+51QDXQLybp2qct29TUjcDLgSbqmFa3x8xOBwrc/cVYBpPEEdbFmCcklreoiZUobNMn68kFHgOud/eG6KaU9jKza4Ai4Jyws7RX5JezXwE3hBxF4lhclEwi3qImCtuEmfUGXgTucPdFAUVtrwqgoMlyfuS55saUm1kakAnsjE28dmnLNmFm02j8ZeEcd6+JUbb2aG17egFjgL9HfjkbCMw3s+nurvuaSZskwuGyT25RAy3cosbdB7v7UBoPmT3ayW9R0+o2mVk68CyN2zIvhtnaailQaGbDIlmvonG7mmq6nTOBv3nnvjq41W0ys/HAg8B0d2/2l4NOpMXtcfdqd89296GR/zuLaNwuFYy0WSKUTJC3qAlLW7bpq8AXgBvMbEXkz2nhxP2syBzLzcCrwIfAM+6+xszuNLPpkWEPA/3MrBT4Pi2fGRi6Nm7TPTTuLf8p8m9ybLF2Gm3cHpEO0W1lREQkMImwJyMiIp2USkZERAKjkhERkcCoZEREJDAqGRERCYxKRkREAqOSERGRwKhkJGbM7IzI56x0NbMekc/CGRN2LhEJji7GlJgys/8DdAW6AeXu/vOQI4lIgFQyElORe2QtpfGzSc5y9/qQI4lIgHS4TGKtH4339upF4x6NiCQw7clITEVuGPkUMAzIdfebQ44kIgGKi8+TkcRgZtcBR9x9buTz5d81sy+6+9/CziYiwdCejIiIBEZzMiIiEhiVjIiIBEYlIyIigVHJiIhIYFQyIiISGJWMiIgERiUjIiKB+X8z34BsjWwClwAAAABJRU5ErkJggg==\n","text/plain":[""]},"metadata":{"needs_background":"light"}},{"output_type":"stream","name":"stdout","text":["This stroke: 89\n","All strokes: min 32 max 145 avg 94.526\n"]}]},{"cell_type":"code","metadata":{"id":"3FVPj-eqjvoB","executionInfo":{"status":"ok","timestamp":1638746658017,"user_tz":480,"elapsed":192,"user":{"displayName":"David Davis","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"03716636181783186066"}}},"source":["import math\n","import numpy as np\n","import PIL\n","\n","FIXED_POINT = 4096\n","\n","def mul_fp(a, b):\n"," return (a * b) // FIXED_POINT\n","\n","def div_fp(a, b):\n"," if b == 0:\n"," b = 1\n"," return (a * FIXED_POINT) // b\n","\n","def float_to_fp(a):\n"," return math.floor(a * FIXED_POINT)\n","\n","def norm_to_coord_fp(a, range_fp, half_size_fp):\n"," a_fp = float_to_fp(a)\n"," norm_fp = div_fp(a_fp, range_fp)\n"," return mul_fp(norm_fp, half_size_fp) + half_size_fp\n","\n","def round_fp_to_int(a):\n"," return math.floor((a + (FIXED_POINT / 2)) / FIXED_POINT)\n","\n","def gate(a, min, max):\n"," if a < min:\n"," return min\n"," elif a > max:\n"," return max\n"," else:\n"," return a\n","\n","def rasterize_stroke(stroke_points, x_range, y_range, width, height):\n"," num_channels = 3\n"," buffer_byte_count = height * width * num_channels\n"," buffer = bytearray(buffer_byte_count)\n","\n"," width_fp = width * FIXED_POINT\n"," height_fp = height * FIXED_POINT\n"," half_width_fp = width_fp / 2\n"," half_height_fp = height_fp / 2\n"," x_range_fp = float_to_fp(x_range)\n"," y_range_fp = float_to_fp(y_range)\n","\n"," t_inc_fp = FIXED_POINT // len(stroke_points)\n","\n"," one_half_fp = (FIXED_POINT / 2)\n","\n"," for point_index in range(len(stroke_points) - 1):\n"," start_point = stroke_points[point_index]\n"," end_point = stroke_points[point_index + 1]\n"," start_x_fp = norm_to_coord_fp(start_point[\"x\"], x_range_fp, half_width_fp)\n"," start_y_fp = norm_to_coord_fp(-start_point[\"y\"], y_range_fp, half_height_fp)\n"," end_x_fp = norm_to_coord_fp(end_point[\"x\"], x_range_fp, half_width_fp)\n"," end_y_fp = norm_to_coord_fp(-end_point[\"y\"], y_range_fp, half_height_fp)\n"," delta_x_fp = end_x_fp - start_x_fp\n"," delta_y_fp = end_y_fp - start_y_fp\n","\n"," t_fp = point_index * t_inc_fp\n"," if t_fp < one_half_fp:\n"," local_t_fp = div_fp(t_fp, one_half_fp)\n"," one_minus_t_fp = FIXED_POINT - local_t_fp\n"," red = round_fp_to_int(one_minus_t_fp * 255)\n"," green = round_fp_to_int(local_t_fp * 255)\n"," blue = 0\n"," else:\n"," local_t_fp = div_fp(t_fp - one_half_fp, one_half_fp)\n"," one_minus_t_fp = FIXED_POINT - local_t_fp\n"," red = 0\n"," green = round_fp_to_int(one_minus_t_fp * 255)\n"," blue = round_fp_to_int(local_t_fp * 255)\n"," red = gate(red, 0, 255)\n"," green = gate(green, 0, 255)\n"," blue = gate(blue, 0, 255)\n","\n"," if abs(delta_x_fp) > abs(delta_y_fp):\n"," line_length = abs(round_fp_to_int(delta_x_fp))\n"," if delta_x_fp > 0:\n"," x_inc_fp = 1 * FIXED_POINT\n"," y_inc_fp = div_fp(delta_y_fp, delta_x_fp)\n"," else:\n"," x_inc_fp = -1 * FIXED_POINT\n"," y_inc_fp = -div_fp(delta_y_fp, delta_x_fp)\n"," else:\n"," line_length = abs(round_fp_to_int(delta_y_fp))\n"," if delta_y_fp > 0:\n"," y_inc_fp = 1 * FIXED_POINT\n"," x_inc_fp = div_fp(delta_x_fp, delta_y_fp)\n"," else:\n"," y_inc_fp = -1 * FIXED_POINT\n"," x_inc_fp = -div_fp(delta_x_fp, delta_y_fp)\n"," for i in range(line_length + 1):\n"," x_fp = start_x_fp + (i * x_inc_fp)\n"," y_fp = start_y_fp + (i * y_inc_fp)\n"," x = round_fp_to_int(x_fp)\n"," y = round_fp_to_int(y_fp)\n"," if (x < 0) or (x >= width) or (y < 0) or (y >= height):\n"," continue\n"," buffer_index = (y * width * num_channels) + (x * num_channels)\n"," buffer[buffer_index + 0] = red\n"," buffer[buffer_index + 1] = green\n"," buffer[buffer_index + 2] = blue\n"," \n"," np_buffer = np.frombuffer(buffer, dtype=np.uint8).reshape(height, width, num_channels)\n","\n"," return np_buffer"],"execution_count":9,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":529},"id":"sOaxOIjRskJg","executionInfo":{"status":"ok","timestamp":1638746717413,"user_tz":480,"elapsed":165,"user":{"displayName":"David Davis","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"03716636181783186066"}},"outputId":"9f3e55ad-2c1e-4441-cdc8-fabc272e3b50"},"source":["raster = rasterize_stroke(shuffled_strokes[0][\"strokePoints\"], 0.5, 0.5, 32, 32)\n","img = PIL.Image.fromarray(raster).resize((512, 512), PIL.Image.NEAREST)\n","display(img)"],"execution_count":10,"outputs":[{"output_type":"display_data","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAIAAAB7GkOtAAAHHUlEQVR4nO3dIWydZRSA4ZatDUuLRJERDJjN4BDMgIYEiWdmKAwGi8FhhmEaTZgGAwYDZhgQJDSZwtECuWUJimRiITlp7/3v3fs8+tzc494c8397ewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAxf7SC8AueenX2fzp8Wz+cDWbf/jCbB4e98zSCwCwDAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgKirSy8AS7rxYDa/Op/N//78bP7an7N5uAgXAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBA1P7SC8D/ef3b2fz5wWz++9dm89vmyj+z+UdeAOExLgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgChfB2erHa5m89/dWs8e2+rR3pXxL+A/LgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCjvAbBRb301m7//5nr2eGpcHX7f/69nZ/PX/p7Ns1NcAABRAgAQJQAAUQIAECUAAFECABAlAABRAgAQJQAAUQIAECUAAFECABAlAABRAgAQJQAAUd4DYKMOV0tvELc6HP7AewBPMxcAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECU9wDYqOPTpTeIG78HwNPMBQAQJQAAUQIAECUAAFECABAlAABRAgAQJQAAUQIAECUAAFECABAlAABRAgAQJQAAUQIAEOU9ADbq6Gw2/97ns/l7t2fzOd4D4DEuAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKAEAiBIAgCgBAIgSAIAoAQCIEgCAKO8BsFGfvT+bv3N3PXtknR8svQFbxAUAECUAAFECABAlAABRAgAQJQAAUQIAECUAAFECABAlAABRAgAQJQAAUQIAECUAAFECABC1v/QCcJk+/GQ2f3A+mz8+nc0fnc3mr5/M5t/5cja/9/PLs/lXfhn+AbvEBQAQJQAAUQIAECUAAFECABAlAABRAgAQJQAAUQIAECUAAFECABAlAABRAgAQJQAAUQIAEOU9ACh5cGM2f/On9ezBVnABAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABEXV16AeACfnh1Nn/zx/XswU5yAQBECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARHkPAHbZ+cHSG7DDXAAAUQIAECUAAFECABAlAABRAgAQJQAAUQIAECUAAFECABAlAABRAgAQJQAAUQIAECUAAFHeA4BdtjpcegN2mAsAIEoAAKIEACBKAACiBAAgSgAAogQAIEoAAKIEACBKAACiBAAgSgAAogQAIEoAAKIEACDKewCwTb5+YzZ/65v17EGCCwAgSgAAogQAIEoAAKIEACBKAACiBAAgSgAAogQAIEoAAKIEACBKAACiBAAgSgAAogQAIMp7AGzW8R+z+dPn1rPHpky/739+sJ494AlcAABRAgAQJQAAUQIAECUAAFECABAlAABRAgAQJQAAUQIAECUAAFECABAlAABRAgAQJQAAUd4D4GKu/zabP9nx7/tPnR3N5t++v5494AlcAABRAgAQJQAAUQIAECUAAFECABAlAABRAgAQJQAAUQIAECUAAFECABAlAABRAgAQJQAAUd4D4GJOXpzNf/zRbP7obDb/waez+akv3p3Nr1br2QMugQsAIEoAAKIEACBKAACiBAAgSgAAogQAIEoAAKIEACBKAACiBAAgSgAAogQAIEoAAKIEACBqf+kF4FLdvTObPxx+r//2vdk8bDEXAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQBAlAAARAkAQJQAAEQJAECUAABECQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDQv3ZkRy9r0+kjAAAAAElFTkSuQmCC\n","text/plain":[""]},"metadata":{}}]},{"cell_type":"code","metadata":{"id":"o-FOVdFpgkdf","executionInfo":{"status":"ok","timestamp":1638746921132,"user_tz":480,"elapsed":150,"user":{"displayName":"David Davis","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"03716636181783186066"}}},"source":["from pathlib import Path\n","import shutil\n","\n","X_RANGE = 0.6\n","Y_RANGE = 0.6\n","\n","def ensure_empty_dir(dirname):\n"," dirpath = Path(dirname)\n"," if dirpath.exists() and dirpath.is_dir():\n"," shutil.rmtree(dirpath)\n"," dirpath.mkdir()\n","\n","def augment_points(points, move_range, scale_range, rotate_range):\n"," move_x = np.random.uniform(low=-move_range, high=move_range)\n"," move_y = np.random.uniform(low=-move_range, high=move_range)\n"," scale = np.random.uniform(low=1.0-scale_range, high=1.0+scale_range)\n"," rotate = np.random.uniform(low=-rotate_range, high=rotate_range)\n","\n"," x_axis_x = math.cos(rotate) * scale\n"," x_axis_y = math.sin(rotate) * scale\n","\n"," y_axis_x = -math.sin(rotate) * scale\n"," y_axis_y = math.cos(rotate) * scale\n","\n"," new_points = []\n"," for point in points:\n"," old_x = point[\"x\"]\n"," old_y = point[\"y\"]\n"," new_x = (x_axis_x * old_x) + (x_axis_y * old_y) + move_x\n"," new_y = (y_axis_x * old_x) + (y_axis_y * old_y) + move_y\n"," new_points.append({\"x\": new_x, \"y\": new_y})\n","\n"," return new_points\n","\n","def save_strokes_as_images(strokes, root_folder, width, height, augment_count):\n"," ensure_empty_dir(root_folder)\n"," labels = set()\n"," for stroke in strokes:\n"," labels.add(stroke[\"label\"].lower())\n"," for label in labels:\n"," label_path = Path(root_folder, label)\n"," ensure_empty_dir(label_path)\n","\n"," label_counts = {}\n"," for stroke in strokes:\n"," points = stroke[\"strokePoints\"]\n"," label = stroke[\"label\"].lower()\n"," if label == \"\":\n"," raise Exception(\"Missing label for %s:%d\" % (stroke[\"filename\"], stroke[\"index\"]))\n"," if label not in label_counts:\n"," label_counts[label] = 0\n"," label_count = label_counts[label]\n"," label_counts[label] += 1\n"," raster = rasterize_stroke(points, X_RANGE, Y_RANGE, width, height)\n"," image = PIL.Image.fromarray(raster)\n"," image.save(Path(root_folder, label, str(label_count) + \".png\"))\n"," for i in range(augment_count):\n"," # Note: no move augmentation as the stroke should be more or less\n"," # centered within the raster\n"," augmented_points = augment_points(points, 0.0, 0.1, 0.3)\n"," raster = rasterize_stroke(augmented_points, X_RANGE, Y_RANGE, width, height)\n"," image = PIL.Image.fromarray(raster)\n"," image.save(Path(root_folder, label, str(label_count) + \"_a\" + str(i) + \".png\"))\n"],"execution_count":11,"outputs":[]},{"cell_type":"code","metadata":{"id":"2cmmhBwW9d_p","executionInfo":{"status":"ok","timestamp":1638747505532,"user_tz":480,"elapsed":13446,"user":{"displayName":"David Davis","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"03716636181783186066"}}},"source":["IMAGE_WIDTH = 32\n","IMAGE_HEIGHT = 32\n","\n","shuffled_strokes = list(strokes)\n","np.random.shuffle(shuffled_strokes)\n","\n","test_percentage = 10\n","validation_percentage = 10\n","train_percentage = 100 - (test_percentage + validation_percentage)\n","\n","test_count = math.floor((len(shuffled_strokes) * test_percentage) / 100)\n","validation_count = math.floor((len(shuffled_strokes) * validation_percentage) / 100)\n","test_strokes = shuffled_strokes[0:test_count]\n","validation_strokes = shuffled_strokes[test_count:(test_count + validation_count)]\n","train_strokes = shuffled_strokes[(test_count + validation_count):]\n","\n","save_strokes_as_images(test_strokes, \"test\", IMAGE_WIDTH, IMAGE_HEIGHT, 10)\n","save_strokes_as_images(validation_strokes, \"validation\", IMAGE_WIDTH, IMAGE_HEIGHT, 0)\n","save_strokes_as_images(train_strokes, \"train\", IMAGE_WIDTH, IMAGE_HEIGHT, 10)"],"execution_count":12,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"9-Ttfz7LlPil","executionInfo":{"status":"ok","timestamp":1638747530290,"user_tz":480,"elapsed":3475,"user":{"displayName":"David Davis","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"03716636181783186066"}},"outputId":"2e9daa0f-acea-4c5e-c4c3-89a7060f388a"},"source":["\n","import tensorflow as tf\n","from tensorflow import keras\n","from tensorflow.keras.utils import image_dataset_from_directory\n","\n","validation_ds = image_dataset_from_directory(\n"," directory='validation',\n"," labels='inferred',\n"," label_mode='categorical',\n"," batch_size=32,\n"," image_size=(IMAGE_WIDTH, IMAGE_HEIGHT)).prefetch(buffer_size=32)\n","\n","train_ds = image_dataset_from_directory(\n"," directory='train',\n"," labels='inferred',\n"," label_mode='categorical',\n"," batch_size=32,\n"," image_size=(IMAGE_WIDTH, IMAGE_HEIGHT)).prefetch(buffer_size=32)\n"],"execution_count":13,"outputs":[{"output_type":"stream","name":"stdout","text":["Found 100 files belonging to 10 classes.\n","Found 8800 files belonging to 10 classes.\n"]}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":591},"id":"Q_vUMVmQn400","executionInfo":{"status":"ok","timestamp":1638747597760,"user_tz":480,"elapsed":1017,"user":{"displayName":"David Davis","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"03716636181783186066"}},"outputId":"07159ba4-ee1b-4364-8776-3726db2e0595"},"source":["import matplotlib.pyplot as plt\n","\n","plt.figure(figsize=(10, 10))\n","for images, labels in train_ds.take(1):\n"," for i in range(9):\n"," ax = plt.subplot(3, 3, i + 1)\n"," ax.set_title(f\"{np.argmax(labels[i])}\")\n"," plt.imshow(images[i].numpy().astype(\"uint8\"))\n"," plt.axis(\"off\")"],"execution_count":15,"outputs":[{"output_type":"display_data","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAjgAAAI+CAYAAACxLHDrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAaBklEQVR4nO3df7CmZXkf8Otyz7IHWAhYY0JJLYbakGgi1djEGtSJRqKJTDUkJUXFtFgFNyoJUdNi1cqUqFgx8kODCqYkHX9RRg21GDKp4qiBph2NlaipJmWAiLJ2Wdhz2MW7f+xSd/d+dvcs+77v857rfD4zOwPf9xyeaxwf9svNdW6ytRYAAJU8bOwBAAAmTcEBAMpRcACAchQcAKAcBQcAKEfBAQDKUXAAgHIUnCnKzMdk5lJmXjP2LDCmzDwhM6/PzM2ZeWdmXpqZC2PPBWPJzE2ZeUtmLmfm1WPPU5GCM12XRcTNYw8Bc+DyiPhmRBwXESdHxNMi4txRJ4Jx3R4RF0bE+8YepCoFZ0oy84yI+E5E3Dj2LDAHHh0RH2ytLbXW7oyIT0TEY0eeCUbTWru2tXZdRHx77FmqUnCmIDOPjoh/FxG/MfYsMCcuiYgzMvOIzDw+Ip4dO0sOwFQoONPxpoh4b2vttrEHgTnxqdh5YrMlIm6LiFsi4rpRJwJKU3AmLDNPjohnRsTbx54F5kFmPix2ntZcGxFHRsQjIuLYiHjzmHMBtfkphsl7ekScEBF/k5kRERsjYl1m/lhr7QkjzgVjeXhEPCoiLm2tLUfEcmZeFTsXLF896mRAWU5wJu/3IuLE2PmTIidHxLsi4o8i4tQxh4KxtNa+FRFfj4hzMnMhM4+JiLMi4gvjTgbj2fUuLEbEutj5D8GLrk6YLAVnwlpr97XW7nzwV0RsjYil1tpdY88GI3p+RPx8RNwVEV+LiO0Rcd6oE8G4LoiIbRHx2oh4wa4/vmDUiYrJ1trYMwAATJQTHACgHAUHAChHwQEAylFwAIByFBwAoJz9/sx9ZvoRK0bTWsuxZ9ibd4IxeSdgT/t7J5zgAADlKDgAQDkKDgBQjoIDAJSj4AAA5Sg4AEA5Cg4AUI6CAwCUo+AAAOUoOABAOQoOAFCOggMAlKPgAADlKDgAQDkKDgBQjoIDAJSj4AAA5Sg4AEA5Cg4AUI6CAwCUo+AAAOUoOABAOQoOAFCOggMAlKPgAADlKDgAQDkKDgBQjoIDAJSj4AAA5Sg4AEA5Cg4AUI6CAwCUo+AAAOUoOABAOQtjD8A+/Ndn9dmpN8x+DgBYhZzgAADlKDgAQDkKDgBQjoIDAJRjyXge3HZ8n918xOzngGn7mU/32THf6bOPP3f6swClOcEBAMpRcACAchQcAKAcBQcAKMeS8azdfWyfbd8+kK2f/iwwa7f8ZJ/94sf77AX/sc+ueeHk5wHKcoIDAJSj4AAA5Sg4AEA5Cg4AUE621vb9Yea+P+ShuWdjn330tD478w+nP8uca63l2DPszTsxIy++qs8WdvTZe14y/VnmiHeinudd22cblvvs6C0r+7p3vuLQZ1pN9vdOOMEBAMpRcACAchQcAKAcBQcAKMdNxtO0tKHP1t/XZ24thj1d/Wt99rIrZj8HTNkNz+qzoeXhu//O9GepxgkOAFCOggMAlKPgAADlKDgAQDmWjCfkYQ/02Xdjex9eNbA8OXRDK6xyV57dZ0P/V19cWln2vKEQVrl7F9f12caB31A4aE5wAIByFBwAoBwFBwAoR8EBAMqxZDwh6wf2iZcXv9uHVwzcWnz2eyc/EMzQW8/vs6WBneBfv/RQnnJeH53/1j67+LcO5SEwW1uOHgg3z3yMipzgAADlKDgAQDkKDgBQjoIDAJRjyfgh2HhPn21dnP0cMIY3XdBnOwZuKD60heIBF7xpZQ+G1WR5w9gTlOUEBwAoR8EBAMpRcACAchQcAKAcS8YH8Mi/7bPtA7cWD7riZQPfPHCTMawiQzuRr7twBg++8HV9NrR4DPPqG3+/z47769nPsUY4wQEAylFwAIByFBwAoBwFBwAox5Lxbv7BV/ts28BC8Td/YIV/waGF4le886BmgnmzNE+3dm9YHnsCWDm3Fs+UExwAoBwFBwAoR8EBAMpRcACAciwZ72b9wELxs/9Ln614TditxRS0Y+DvGi+7os/edc6EH/z2V/XZ0o4JPwSowgkOAFCOggMAlKPgAADlKDgAQDmWjHfz5R8byAa+7jW/02dvvviuPtx+8SHPBPPmkvP67Owr+2zii8cLAwvFvz3wMsK8cpPxTDnBAQDKUXAAgHIUHACgHAUHACgnW2v7/jBz3x+yp6f9aZ897i+66C1HbOqyI+7rv3XTZROYaZVrreXYM+xtzb0TN/9kny0t9tnQ9cZDXzeUbd24sq97yXv6bI3xTqwiQ+/Ok26Z/RzF7e+dcIIDAJSj4AAA5Sg4AEA5Cg4AUI6bjCflvz29z/7R27vo1W+d/ijwkHzxcX3245Ndijz9Q3324RdO9BEAEeEEBwAoSMEBAMpRcACAchQcAKAcS8bTdMl5Y08Aw75+Qp/tWJr6Y4cuPP7Fj/XZx5879VFgupY3jD3BmucEBwAoR8EBAMpRcACAchQcAKAcS8awFi3s6LNHf2Pqj73ueX32zE9O/bEwe5aMR+cEBwAoR8EBAMpRcACAchQcAKAcS8awFi1O/9bilRq63Xho8fiPf276s8DEWDIenRMcAKAcBQcAKEfBAQDKUXAAgHIsGcNaNLRkvH3gbwfrB248nrClxT773JOn/liYnPe/qM9e/NaBL/yBqY/C9zjBAQDKUXAAgHIUHACgHAUHACjHkjGsRUdt7bPWRwvb+2zH+smOMnSTMawqW47us1e/pc/On/4ofI8THACgHAUHAChHwQEAylFwAIBysrWBzcIHP8zc94cwZa21HHuGva21d2JxW58tDFxuvPWoh/6Mk77cZ7f+6EP/61XmnYA97e+dcIIDAJSj4AAA5Sg4AEA5Cg4AUI4lY+aWhcr5dMzmPhtaPB7KFpf67BuPPvSZ1grvBOzJkjEAsKYoOABAOQoOAFCOggMAlGPJmLlloRL25J2APVkyBgDWFAUHAChHwQEAylFwAIByFBwAoBwFBwAoR8EBAMpRcACAchQcAKAcBQcAKEfBAQDKUXAAgHIUHACgHAUHAChHwQEAylFwAIByFBwAoBwFBwAoR8EBAMrJ1trYMwAATJQTHACgHAUHAChHwQEAylFwAIByFBwAoBwFBwAoR8EBAMpRcACAchQcAKAcBQcAKEfBAQDKUXAAgHIUHACgHAUHAChHwQEAylFwAIByFJwpyMxrMvOOzNySmV/JzLPHngnGlJmbMvOWzFzOzKvHngfGlpknZOb1mbk5M+/MzEszc2HsuSpRcKbjoog4obV2dEScFhEXZuYTR54JxnR7RFwYEe8bexCYE5dHxDcj4riIODkinhYR5446UTEKzhS01r7UWlt+8E93/TpxxJFgVK21a1tr10XEt8eeBebEoyPig621pdbanRHxiYh47MgzlaLgTElmXp6Z90XErRFxR0RcP/JIAMyPSyLijMw8IjOPj4hnx86Sw4QoOFPSWjs3Io6KiFMi4tqIWN7/dwCwhnwqdp7YbImI2yLiloi4btSJilFwpqi19kBr7aaI+KGIOGfseQAYX2Y+LHae1lwbEUdGxCMi4tiIePOYc1Wj4MzGQtjBAWCnh0fEoyLi0tbacmvt2xFxVUQ8Z9yxalFwJiwzH5mZZ2Tmxsxcl5mnRsSvRsSNY88GY8nMhcxcjIh1EbEuMxf9SCxrVWvtWxHx9Yg4Z9e7cUxEnBURXxh3sloUnMlrsfNfR90WEZsj4uKIeFVr7aOjTgXjuiAitkXEayPiBbv++IJRJ4JxPT8ifj4i7oqIr0XE9og4b9SJisnW2tgzAABMlBMcAKAcBQcAKEfBAQDKUXAAgHIUHACgnP3eQ5GZfsSK0bTWcuwZ9uadYEzeCdjT/t4JJzgAQDkKDgBQjoIDAJSj4AAA5Sg4AEA5Cg4AUI6CAwCUo+AAAOUoOABAOQoOAFCOggMAlKPgAADlKDgAQDkKDgBQjoIDAJSj4AAA5Sg4AEA5Cg4AUI6CAwCUo+AAAOUoOABAOQoOAFCOggMAlKPgAADlKDgAQDkKDgBQjoIDAJSj4AAA5Sg4AEA5Cg4AUI6CAwCUo+AAAOUoOABAOQoOAFCOggMAlKPgAADlKDgAQDkKDgBQjoIDAJSj4AAA5Sg4AEA5Cg4AUI6CAwCUo+AAAOUsjD1AZcuH9dmG+2c/B8yzs6/ss5e+u8/+7u19dvxABqvKmdf02eLSyrLLNk1+nkKc4AAA5Sg4AEA5Cg4AUI6CAwCUk621fX+Yue8P2cPv/nqfbT62z+49ss/uH1hGvuS8Q59ptWut5dgz7M07MXk/e2Of/ckzZj/HauCdWOWOvbvPnnVDn33gjD575SV9tn57n138Wwc/1yq2v3fCCQ4AUI6CAwCUo+AAAOUoOABAOW4ynpBXvHOyf71zL+uzoWXklS4tf+T0Q58JpmFoGR9K2vzwLnrPxv7Lzh763ne8qs9ee9Ehj1SZExwAoBwFBwAoR8EBAMpRcACActxkXNBzP9pnHztt9nMcKre21nPSl/vs2M199tl/Mv1ZViPvxOp26cv7bNPAD5Qckje8fiB744QfMj/cZAwArCkKDgBQjoIDAJSj4AAA5bjJeJX72Rv77GPPmP0csBJLi31moZiKLnllny0szeDBi7N4yOrgBAcAKEfBAQDKUXAAgHIUHACgHEvGc+qnPtdn67f32WFbpz8LTMq2w8eeAGZjaKH+Ve+YwYOHlowv/s0+O/9t059lZE5wAIByFBwAoBwFBwAoR8EBAMqxZDwpO9b12b1H9tn9h60o+/z29Sv73lO+uoLhYD5YMmat2DHW765Dm8xD1yqvAU5wAIByFBwAoBwFBwAoR8EBAMqxZHwAh9/XZ0O7vj/8vx/osq/+wy1TmGgvf/HYPhsa8An/Y/qzwG4OW+6zLRtmPweMYbQl43f/qz576SyuUJ4/TnAAgHIUHACgHAUHAChHwQEAyrFkfADbjljZ1412n/DjvtRnn//Hffbpn+mzU26a/Dywy/3rBm73jn4ZHyqaya3d739Rn+3YMYMHrw5OcACAchQcAKAcBQcAKEfBAQDKsWRc0daNfbZx6+znYO3YemSfLdw7+zlgTkz8JuMP/MrAQwYWis/6/Qk/ePVyggMAlKPgAADlKDgAQDkKDgBQjiXjiu4dWPh8xp/Mfg7WjsFrWy0Zs3a97alP6sNPLfbZ0LuzNPB1QwvF/+yDBz/YGuIEBwAoR8EBAMpRcACAchQcAKAcS8ar3Yd/qc9O+8js52BtG1wyhjXiK4/ps6WlLnr5n93cZZdtmsZARDjBAQAKUnAAgHIUHACgHAUHACjHkvE8eP+L+mz99pV97+n/abKzwEMxdPMqrBULA7cM/8QXu+iygW996bv67N0vO/SRcIIDABSk4AAA5Sg4AEA5Cg4AUI4l49393A199slnTfYZV57dZ2e9Z7LPgFnbfGyfPeKuPvvW909/FpimO36wz7YPLBmv0NBC8b8c+C3hvQO/dbB/TnAAgHIUHACgHAUHAChHwQEAyrFkvLvPPrnP/sV7++ykW/ts6Obhw+7vs5dcfvBzwbz7qxP7zEIxFQ3dWnzcnRN9xA6/M0+EExwAoBwFBwAoR8EBAMpRcACAcrK1tu8PM/f9IUxZay3HnmFv3gnG5J2YA/ds7LOjtk79sWde02dDy8gfOGPqo8yV/b0TTnAAgHIUHACgHAUHAChHwQEAyrFkzNyyUAl78k7MgW2LfXb40uzniIjnf6TPhi7Vr7x4bMkYAFhTFBwAoBwFBwAoR8EBAMqxZMzcslAJe/JOjG9hYIn38G19ds/R059lyHP+qM+u/4XZzzErlowBgDVFwQEAylFwAIByFBwAoJyB/9g6ADBkx/o+W7i7z467vc8WBy48HsqGlpYXdqwsWxrnUuW55AQHAChHwQEAylFwAIByFBwAoBw3GTO33NoKe/JOrG4/+r/6bMfAj/oMLR5/8ScmP08FbjIGANYUBQcAKEfBAQDKUXAAgHIsGTO3LFTCnrwTsCdLxgDAmqLgAADlKDgAQDkKDgBQjoIDAJSj4AAA5Sg4AEA5Cg4AUI6CAwCUo+AAAOUoOABAOQoOAFCOggMAlKPgAADlZGv+S/cAQC1OcACAchQcAKAcBQcAKEfBAQDKUXAAgHIUHACgHAUHAChHwQEAylFwAIByFBwAoBwFBwAoR8EBAMpRcACAchQcAKAcBQcAKEfBAQDKUXCmIDP/NDOXMnPrrl9/OfZMMKbM3JSZt2TmcmZePfY8MLbMvCYz78jMLZn5lcw8e+yZqlFwpmdTa23jrl8/MvYwMLLbI+LCiHjf2IPAnLgoIk5orR0dEadFxIWZ+cSRZypFwQGmrrV2bWvtuoj49tizwDxorX2ptbb84J/u+nXiiCOVo+BMz0WZ+a3M/ExmPn3sYQCYL5l5eWbeFxG3RsQdEXH9yCOVouBMx2si4ocj4viI+L2I+FhmauYA/H+ttXMj4qiIOCUiro2I5f1/BwdDwZmC1trnW2v3tNaWW2vvj4jPRMRzxp4LgPnSWnugtXZTRPxQRJwz9jyVKDiz0SIixx4CgLm1EHZwJkrBmbDMPCYzT83MxcxcyMwzI+KpEfGJsWeDsex6FxYjYl1ErHvw/Rh7LhhDZj4yM8/IzI2ZuS4zT42IX42IG8eerZJsrY09QymZ+f2xc1HspIh4IHYuj72utfbJUQeDEWXmGyLi9XvFb2ytvWH208C4dv0+8eGIeHzsPGj464j43dbalaMOVoyCAwCU419RAQDlKDgAQDkKDgBQjoIDAJSj4AAA5ez3HorM9CNWjKa1NneXI3onGJN3Ava0v3fCCQ4AUI6CAwCUo+AAAOUoOABAOQoOAFCOggMAlKPgAADlKDgAQDkKDgBQjoIDAJSj4AAA5Sg4AEA5Cg4AUI6CAwCUo+AAAOUoOABAOQoOAFCOggMAlKPgAADlKDgAQDkKDgBQjoIDAJSj4AAA5Sg4AEA5Cg4AUI6CAwCUo+AAAOUoOABAOQoOAFDOwtgDAGvHsXf32eaHz34OoD4nOABAOQoOAFCOggMAlKPgAADlWDIGZmbz9w39M9V3Zz4HUJ8THACgHAUHAChHwQEAylFwAIByLBkDs7Pl6IHwOzMfA6jPCQ4AUI6CAwCUo+AAAOUoOABAOZaMgenYfEyf3X/Y7OcA1iQnOABAOQoOAFCOggMAlKPgAADlZGtt3x9m7vtDZu7Ks/tscanPXnjN9GeZhdZajj3D3rwTh+hv/l4X/dKf/Z8u+8jpsxhm9fFOwJ729044wQEAylFwAIByFBwAoBwFBwAox03GB/CUm/rslE/32eHb+mxoAXj99j5b2LGy7CVX9NnQdt8LBzKYua+d2GeP+qsu2vAHM5gF5sC/fWOf3Xtknw1d+L3SbOvGlT3j+l/os2qc4AAA5Sg4AEA5Cg4AUI6CAwCUY8n4ALYd3me/89uzn2Nf5u5aU3jQ8oYVfdmG5SnPAXPiKZ/ps1NvmP5zn/nJ6T9jHjnBAQDKUXAAgHIUHACgHAUHACjHkvEBDC0ZA5Nz2P1jTwCzMYuF4p/+bJ/98ZOn/9x55AQHAChHwQEAylFwAIByFBwAoBxLxgeww/9C8NC4yRim6gn/vc8O2zr7OeaVExwAoBwFBwAoR8EBAMpRcACAcqzQHsAh3WR801P6bGhreeghQ1+3fX2fPf8/H/xcMEeedPPYE8D8e9wX++zPf3z2c6wmTnAAgHIUHACgHAUHAChHwQEAysnW2r4/zNz3hwX94B19duc9j+nDlS4FP/HPD32o3X3wl1c2y1m/P9nnjqS1lmPPsLe19k4cks/9VJ/99OdnP0ch3on5tG5Hnz2wfbEP7z9sstm9R67s67Zu7LOnfrrPVqH9vRNOcACAchQcAKAcBQcAKEfBAQDKcZPxbu45aiDcNrA99vgvTH2WQb/yoZV93aUv77NNl012FgAiIuKBod9JH7i/zw5fmvosg65/dp+tgR8CcIIDAJSj4AAA5Sg4AEA5Cg4AUI4l493ce/hA3zvqntkPcjAueWWfbXrH7OeAvS1vGHsCGM+67449wfcM3W5cbKF4iBMcAKAcBQcAKEfBAQDKUXAAgHIsGe9ucCnsWzMfY58uem2f7dg++zlgJYYWG4Hp+tDpffZPPzz7OeaAExwAoBwFBwAoR8EBAMpRcACAciwZz6s3XdBn67f12flvm/4s8FC4yZi17KgtfXbP0ZN9xh/88z775T+c7DNWMSc4AEA5Cg4AUI6CAwCUo+AAAOVYMp4HQwvFr7tw9nMAMBnrJ3zL/FUv7rMzr57sM4pxggMAlKPgAADlKDgAQDkKDgBQjiXjWXv9G/psx8yngOm756ixJ4DZeNtv9NmXr+2zx2/qs8PuX1n2a1cf9FhrnRMcAKAcBQcAKEfBAQDKUXAAgHIsGR/II/+2z4aWJ7cdsbK/3vb1ffbv/83BzQSrwfKGsSeA2fjN/zD2BAxwggMAlKPgAADlKDgAQDkKDgBQTrbW9v1h5r4/XCt+5NY++8uTVva9r35zn73lNYc2zxrSWsuxZ9ibd+IgfN93+uzcy/vson89/VmK8E7Anvb3TjjBAQDKUXAAgHIUHACgHAUHACjHTcYHcvL/7LMnX9Vnh2/rs+1Lk58HVov/e0yfXTT7MYC1yQkOAFCOggMAlKPgAADlKDgAQDluMmZuubUV9uSdgD25yRgAWFMUHACgHAUHAChHwQEAylFwAIByFBwAoBwFBwAoR8EBAMpRcACAchQcAKAcBQcAKEfBAQDKUXAAgHIUHACgHAUHAChHwQEAylFwAIByFBwAoBwFBwAoR8EBAMpRcACAchQcAKAcBQcAKEfBAQDKUXAAgHIUHACgHAUHAChHwQEAylFwAIBysrU29gwAABPlBAcAKEfBAQDKUXAAgHIUHACgHAUHAChHwQEAyvl/2VZxmSyeGCkAAAAASUVORK5CYII=\n","text/plain":[""]},"metadata":{"needs_background":"light"}}]},{"cell_type":"code","metadata":{"id":"21qi3bLAo80t","executionInfo":{"status":"ok","timestamp":1638747856480,"user_tz":480,"elapsed":184,"user":{"displayName":"David Davis","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"03716636181783186066"}}},"source":["from keras import layers\n","\n","def make_model(input_shape, num_classes):\n"," inputs = keras.Input(shape=input_shape)\n","\n"," # Entry block\n"," x = layers.Rescaling(1.0 / 255)(inputs)\n"," x = layers.Conv2D(16, 3, strides=2, padding=\"same\")(x)\n"," x = layers.BatchNormalization()(x)\n"," x = layers.Activation(\"relu\")(x)\n"," x = layers.Dropout(0.5)(x)\n","\n"," x = layers.Conv2D(32, 3, strides=2, padding=\"same\")(x)\n"," x = layers.BatchNormalization()(x)\n"," x = layers.Activation(\"relu\")(x)\n"," x = layers.Dropout(0.5)(x)\n","\n"," x = layers.Conv2D(64, 3, strides=2, padding=\"same\")(x)\n"," x = layers.BatchNormalization()(x)\n"," x = layers.Activation(\"relu\")(x)\n"," x = layers.Dropout(0.5)(x)\n","\n"," x = layers.GlobalAveragePooling2D()(x)\n"," activation = \"softmax\"\n"," units = num_classes\n","\n"," x = layers.Dropout(0.5)(x)\n"," outputs = layers.Dense(units, activation=activation)(x)\n"," return keras.Model(inputs, outputs)"],"execution_count":16,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":1000},"id":"7DjpCkt0qZiy","executionInfo":{"status":"ok","timestamp":1638747862714,"user_tz":480,"elapsed":822,"user":{"displayName":"David Davis","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"03716636181783186066"}},"outputId":"eb7158b8-b866-455f-e5fb-7dee1fa25e70"},"source":["model = make_model(input_shape=(IMAGE_WIDTH, IMAGE_HEIGHT, 3), num_classes=10)\n","keras.utils.plot_model(model, show_shapes=True)"],"execution_count":17,"outputs":[{"output_type":"execute_result","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAq0AAAc0CAIAAADqb6jQAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdeVxTV9o48HOBkIQQCLvIIpKIiELVSgewDLVOqZURREBwa62jg9oWWXxFUBQBUdAX+IBQx2UYR6wsSsGqqC+ljLUuPztipbG1EUUE1LCH1YRwf3/c6X3zIktYb+A+37+ac26ePPdcbJ7c5RwMx3EEAAAAAFpSozoBAAAAAFAG6gAAAACAvqAOAAAAAOgL6gAAAACAvjSoToCObt26lZSURHUWAACgWpydnUNDQ6nOgnbgfAAFnj9/fu7cOaqzoMDt27dv375NdRYT2Llz56qrq6nOYszB3wk93b59+9atW1RnQUdwPoAyeXl5VKcw3vz8/BAtd3y0YBgWEhKycuVKqhMZW/B3Qk/EcQfjD84HAAAAAPQFdQAAAABAX1AHAAAAAPQFdQAAAABAX1AHAAAAAPQFdQAAk9zly5d1dXW/+eYbqhMZZZs3b8Z+t3btWsWu4uLiiIiI8+fPW1tbExusW7dOcQN3d3cul6uurj579ux79+6Nb+L/kZCQYGtry2azORyOra1tVFSURCIhe2NiYuzs7HR0dJhMpkAg2LFjR1tbmypHvnDhQkJCglwuJzcuKCggD5ChoaGSHwHGH9QBAExyk3hNUX19/aKiokePHp08eZJs3Lt3b2pqamRkpI+Pz5MnT/h8voGBQVZW1qVLl8htrl27lpeXt2zZMqFQOH/+fCpyR99///2mTZuqqqpevXoVGxubkJDg6+tL9paUlHz++eeVlZX19fXx8fEpKSnKP1ZHSWRPT08Wi7V48eLm5maixcvLq7q6+vr160uXLlUyPqAGDsZdTk4OPUfe19fX19eX6iwmMIRQTk4O1Vn0q6Ojw9nZeeRxlPw7CQwMNDMz69V44MABGxubzs5OsoXP5585c0ZNTc3MzKy5uZlsLyoq8vLyGnm2w+bt7a2YJ/FlXFtbS7z08PDo7u4me4lJI6qqqlQ5Mo7jQUFBzs7OMplM8V3btm0zMDAYNDj8/4EqcD4AADA6Tp48KRaLKUzg8ePHUVFR+/btY7FYiu0uLi7BwcE1NTXbt2+nKrc35efnK+ZpZmaGECJP0V+8eFFdXZ3sJc6rd3R0qHJkhFB0dPT9+/dTUlKUiQZUBNQBAExmN27csLS0xDDsyJEjCKGMjAwOh6OlpVVYWPjRRx/p6OiYm5ufPXuW2Dg1NZXFYhkbG2/evNnU1JTFYrm4uNy5c4foDQoK0tTUnDJlCvHys88+43A4GIbV19cjhIKDg8PCwioqKjAMEwgECKErV67o6Ojs379/3HY2NTUVx3FPT883u+Li4mxsbE6cOFFcXNzne3EcT0pKmjVrFpPJ1NPTW758+a+//kp0DTxoCCG5XL5nzx5LS0s2m+3g4ECc8BsqkUjE4/GmTZvWZ29NTQ2bzZ4+fbqKR9bT03Nzc0tJScEn79WoyQfqAAAms3fffffmzZvky61bt4aEhHR2dnK53JycnIqKCmtr602bNslkMoRQUFDQ+vXrOzo6tm3bVllZee/eve7u7g8++OD58+cIodTUVMUpjdPT0/ft20e+TElJWbZsGZ/Px3H88ePHCCHilrGenp5x29lLly7NnDlTS0vrzS42m/2Pf/xDTU1t06ZN7e3tb24QHR0dERGxa9cusVh8/fr158+fu7q6vnr1Cg02aAihnTt3JiYmJicnv3jxYtmyZatXr/7xxx+VzFkmk9XU1Bw5cqS4uDgtLU1TU/PNbTo6OkpKSjZt2tRnr6pFnjdvXk1NzU8//aR8QEAtqAMAoCMXFxcdHR0jI6OAgID29vaqqiqyS0NDg/hZbGdnl5GR0drampmZOYyP8PDwkEgkUVFRo5f1QNrb258+fcrn8/vbwNnZOSQkpLKycufOnb26Ojs7k5KSVqxYsXbtWl1dXXt7+6NHj9bX1x87dkxxsz4HraurKyMjw9vb28fHh8fj7d69m8FgKD9iFhYW5ubm0dHRiYmJ/v7+fW4THx9vamoaFxenZExqI8+YMQMhVF5ePqSYgEJQBwBAa8SPOfKnbS8LFizQ0tIiz5CrMrFYjON4nycDSHFxcTNnzkxPT79x44Ziu1AobGtrW7BgAdni6OioqalJXhPpRXHQHj161NHRMWfOHKKLzWZPmTJF+RF7/vy5WCz+6quvTp06NW/evDdvsMjPz8/Nzb169SqXy1UyJrWRiUNAnEoBEwLUAQCAgTCZzLq6OqqzGFxXVxdCiMlkDrANi8XKzMzEMGzDhg2dnZ1kO/Gom7a2tuLGPB6vtbV10M8lrjLs3r2bfFb+2bNnSt52hxBiMBhGRkbu7u7Z2dlCoTA+Pl6xNzs7++DBg6WlpVZWVkoGpDwym81Gvx8OMCFAHQAA6JdMJmtubjY3N6c6kcERXz+K89j0ydnZOTQ0VCQSxcbGko08Hg8h1OtbX8kdNzIyQgglJycrPoh169atoeYvEAjU1dWFQiHZkpaWlpWVVVJSMnXq1KFGoyoyQkgqlaLfDweYEKAOAAD0q7S0FMdxJycn4qWGhkZ/VxAoZ2xsjGFYS0vLoFvGxsba2tqWlZWRLXPmzNHW1la8ue/OnTtSqfTtt98eNJqFhQWLxbp///6Qsm1oaFi9erVii0gkksvlFhYWCCEcx8PDw8vLywsKCnqdpVDZyCTiEJiYmAwpOKAQ1AEAgP+jp6enqampu7v7wYMHwcHBlpaW69evJ7oEAkFjY2NBQYFMJqurq3v27JniG/X19WtraysrK1tbW2UyWVFR0Xg+N6ilpWVtbV1dXT3olsTVAcVn6FksVlhYWH5+flZWlkQiKS8v37Jli6mpaWBgoDLRPv3007Nnz2ZkZEgkErlcXl1d/eLFC4RQQECAiYlJn/MWczica9eulZSUSCQSmUxWVlb2ySefcDic0NBQhNDDhw8TExOPHz/OYDAwBYcPHyberoKRScQhsLe3H3TogIqAOgCAyezIkSOOjo4IofDwcC8vr4yMjOTkZISQg4PDkydPjh8/HhYWhhBasmSJSCQi3tLV1WVvb89ms11dXW1sbL777jvyovvWrVsXLVq0atWqmTNnxsbGEud+nZ2diQcLt2zZYmxsbGdnt3Tp0sbGxvHfWQ8PD6FQSF74//rrrwUCQUVFhaOj4xdffKG4pZOTU69vr71798bHx8fExBgaGrq5uVlZWZWWlnI4HITQoIOWkpISEhKSkJBgYGBgamoaHBzc1NSEEJJKpWKxuLCw8M1UWSzWwoULN27caGZmxuVy/fz8rKysbt++TdxvOOjD9yoYmXT37l0zMzMHB4eBPwiokPGdvhDgOMwrDIYLjf28woGBgfr6+mP6EYMa9rzCIpFIQ0Pj9OnTY5ba0MjlcldX15MnT9Incn19PYvFOnz4sGIjzCus4uB8AADg/xj0VjvV0dnZefXqVZFIRNybJhAIYmJiYmJilF9Ab+zI5fKCgoLW1taAgAD6RI6Ojp47d25QUBBCCMfx2traGzduEPNKAZUFdQAAYKJqbGxcsmSJjY3Nhg0biJaIiAg/P7+AgABlbhgcU6WlpefPny8qKhp4SoPJFDkpKen+/fuXL19mMBgIocLCQjMzM1dXV8WVHoEKgjpAdanysvE9PT3JyckuLi6jHvn27duzZs1SU1PDMMzExGSoM52NhOJy9VOmTOm1pD0dREZGZmZmtrS0TJ8+/dy5c1SnM4ijR4+SJzazsrLI9v379wcFBR04cIDC3BBCixcvPnPmDLkcw6SPXFhY+Pr169LSUj09PaJl+fLl5AEiFqEAqkmD6gRAv3BVXahDJBJ9+umnP/zww1tvvTXqwZ2cnH755ZclS5ZcvXr10aNHxIPd48PHx8fHx0cgENTX1798+XLcPld1xMfH95oTZoJyd3d3d3enOgt68fLy8vLyojoLMBxwPkB1eXh4tLS0LFu2bKw/qLOzU/lf9j/99NPOnTu3bNkyd+7cMc1qfAxp3wEAYPKBOgAMbdn4t9566/z582vWrBl4AteJYkj7DgAAkw/UASqKwmXjVY2q7fv3339vZ2enq6vLYrHs7e2vXr2KENq4cSNxYwGfzycmqvv000+1tLR0dXUvXLiA+lmiPjExUUtLi8vlisXisLAwMzOzR48ejebYAQDAoMb/UUWg5PwBxNwsaWlpxMtdu3YhhL799tuWlhaxWOzq6srhcKRSKdEbGBjI4XAePnzY1dUlFAodHR25XG5VVRXRu2bNGhMTEzLyoUOHEEJ1dXXESx8fH2LZ+CH5wx/+8NZbbw3pLco/H/zhhx8ihJqamoiX47nvfD5fV1d3gNzy8vKio6MbGxsbGhqcnJzIB6N9fHzU1dVramrILVevXn3hwgXiv7dv385kMs+dO9fU1BQZGammpnb37l1y17Zt25aWlrZixYpffvllgI9GYz9/gCqA58jpCY47VeB8wAQzDsvGqywV2XdfX9+9e/fq6enp6+t7eno2NDQQy/Ft2bJFLpeTnyuRSO7evbt06VKkxBL1Bw8e/Pzzz8+fP29raztGaQMAQJ/geYGJatIsGz8MqrPvxHPSxMQ777//vo2Nzd///vfIyEgMw7KzswMCAohJ7Ee4RL0if39/f3//0dsD1YVhGNUpgPHm6+tLdQp0BHXApDVRlo0fC2O675cuXTp06JBQKCRWWyHbMQzbvHlzaGjot99++6c//emf//znmTNniC5yifrdu3eT25uamg7j04ODg52dnUe2B6qOmMw/JCSE6kTAuCKOOxh/UAdMThNo2fhRNxb7fv369X//+98hISFVVVXe3t4rVqz4+9//PnXq1LS0tB07dpCbrV+/PjIy8sSJExYWFjo6OtOmTSPaySXqg4ODR5iJs7PzypUrRxhExeXl5SGEJv1ugl6I4w7GH9QBk9MEWjZ+1I3Fvv/73/8mlp4rLy+XyWRbt261trZGb5y71tPT8/f3z87O5nK5mzZtItuHt0Q9AACMA7hPcPIYrWXjKUh9xMZu32Uy2atXr8glaC0tLRFCxcXFXV1dIpGIfECRtGXLltevX1+8eFFxAqgBlqgHAACKUf3AAh0p89xgWloa8dS7lpaWp6dneno6sfLHjBkzKioqjh07pqOjgxCaNm3ab7/9huN4YGAgg8EwMzPT0NDQ0dFZvnx5RUUFGa2hoWHRokUsFmv69OlffPHFf/3XfyGEBAIB8XDdvXv3pk2bxmaz33333ZcvXw6c2K1btxYuXEhe254yZYqLi8u//vUvZXZcmeeCbt++PXv2bDU1NSL4/v37x23fv/zySz6f39+/lPz8fCJgeHi4vr4+j8fz8/MjZnfg8/nkY4o4js+bNy8iIqLXfr1+/To8PNzS0lJDQ8PIyMjHx0coFCYkJLDZbISQhYWFMqvlInhuEExecNypguGqOon9JJabm+vv7z+6I7958+a8vLyGhoZRjDnq/Pz80BhcBVS1fffw8Dhy5Mj06dNHPTKGYTk5OZP+wvkY/Z0AFQfHnSpwXWDymEDLxo86yvedvKbw4MED4twDtfkAAICSoA4A/+vXX3/F+hcQEEB1gqorPDxcJBL99ttvn376aWxsLNXp0MLmzZvJP85ei0QXFxdHREQoLiS9bt06xQ3c3d25XK66uvrs2bPv3bs3von/R0JCgq2tLZvN5nA4tra2UVFREomE7I2JibGzs9PR0WEymQKBYMeOHW1tbaoc+cKFCwkJCYoVeUFBAXmADA0NlfwIQAGqL0zQkZLzCisvIiKCmFrHysoqLy9vFCOPrrG4/qci+75r1y41NTULCwtyIuGxgOD+AAWBgYH6+vpFRUWPHj3q6uoi2/fs2bNs2TKJREK85PP5BgYGCKGLFy8qvr2oqMjLy2t0Mx8SDw+Pw4cPi8Xi1tbW3NxcBoPxwQcfkL1ubm7p6ekNDQ0SiSQnJ4fBYCxZskTFI6ekpLi5uZHTgff09FRXV1+/fn3p0qXk9NsDgPsDqAJ1AAVGvQ6YKODf+QiNdR3Q0dHh7OxMeSjl6wAzM7NejQcOHLCxsens7CRb+Hz+mTNn1NTUzMzMmpubyXbK6wBvb2/FPImr47W1tcRLDw+P7u5uspe4KUTxdlQVjIzjeFBQkLOzs0wmU3zXtm3boA5QZXBdAADwH6O4CjMlCzo/fvw4Kipq3759LBZLsd3FxSU4OLimpmb79u3jnNIA8vPzFfM0MzNDCJGn6C9evEhMSk0gzqt3dHSocmSEUHR09P3791NSUpSJBlQE1AEATCo4jiclJRGrLunp6S1fvpxcyGBIqzCP7oLOV65c0dHR2b9//5jue2pqKo7jnp6eb3bFxcXZ2NicOHGiuLi4z/cOMG4Dr3yN+llUeqhEIhGPxyPnoOylpqaGzWYP7/7T8Yysp6fn5uaWkpKCw5NoEwi1pyPoCa4LgOFBSlwX2LNnj6am5unTp5ubmx88eDB//nxDQ0NyWoghrcI8igs6X7x4kcvlxsTEKLObw74uYG1tbWdn12szPp//9OlTHMdv3ryppqZmZWXV1taGv3FdYOBxG3jl6/4WlVaGVCqtrq5OS0tjMpn9zSHR3t7O5XKDgoKUjElt5IiICIRQWVkZ2QLXBVQcnA8AYPLo7OxMSkpasWLF2rVrdXV17e3tjx49Wl9ff+zYseEFHK0FnT08PCQSSVRU1PDSUEZ7e/vTp08HmAnK2dk5JCSksrJy586dvbqUHLc+V74edFHpgVlYWJibm0dHRycmJva3kmR8fLypqWlcXJySMamNPGPGDIRQeXn5kGICCkEdAMDkIRQK29raFixYQLY4Ojpqamq+Of/xMKj4YtZisRjHcWLqyf7ExcXNnDkzPT39xo0biu1DHTfFla9HuKj08+fPxWLxV199derUqXnz5r15U0V+fn5ubu7Vq1e5XK6SMamNTByCV69eDSkmoBDUAQBMHs3NzQghbW1txUYej9fa2joq8VV5Meuuri6EEJPJHGAbFouVmZmJYdiGDRs6OzvJ9pGMG7moNPms/LNnz5S87Q4hxGAwjIyM3N3ds7OzhUJhfHy8Ym92dvbBgwdLS0utrKyUDEh5ZGKqbOJwgAkB6gAAJg8ej4cQ6vXtNVqrMKv4YtbE18+gM0s6OzuHhoaKRCLF6Z5GMm7kotKKF1xv3bo11PwFAoG6urpQKCRb0tLSsrKySkpKpk6dOtRoVEVGCEmlUvT74QATAtQBAEwec+bM0dbW/vHHH8mWO3fuSKXSt99+m3g5klWYVXwxa2NjYwzDWlpaBt0yNjbW1ta2rKyMbBl03AYwvEWlGxoaVq9erdgiEonkcrmFhQVCCMfx8PDw8vLygoKCXmcpVDYyiTgEJiYmQwoOKAR1AACTB4vFCgsLy8/Pz8rKkkgk5eXlW7ZsMTU1DQwMJDYY6irMo7Wgc1FR0Vg/N6ilpWVtbV1dXT3olsTVAcVn6Acdt4Gj9beodEBAgImJSZ/zFnM4nGvXrpWUlEgkEplMVlZW9sknn3A4nNDQUITQw4cPExMTjx8/zmAwFOf2Pnz4MPF2FYxMIg6Bvb39oEMHVATUAQBMKnv37o2Pj4+JiTE0NHRzc7OysiotLeVwOETv1q1bFy1atGrVqpkzZ8bGxhInb52dnZ8/f44Q2rJli7GxsZ2d3dKlSxsbGxFCXV1d9vb2bDbb1dXVxsbmu+++Iy/ADzXUOPDw8BAKheSF/6+//logEFRUVDg6On7xxReKWzo5OfX69hpg3DIyMpKTkxFCDg4OT548OX78eFhYGEJoyZIlIpEIIZSSkhISEpKQkGBgYGBqahocHNzU1IQQkkqlYrG4sLDwzVRZLNbChQs3btxoZmbG5XL9/PysrKxu375N3G+ID/bwvQpGJt29e9fMzMzBwWHgDwIqZPwfVQQwfwAYHjS+6wsQE/iP28eRhj1/gEgk0tDQ6O9Z+fEnl8tdXV1PnjxJn8j19fUsFuvw4cOKjTB/gIqD8wEAgH5RvqDzwDo7O69evSoSiYh70wQCQUxMTExMjPIL6I0duVxeUFDQ2to66gt1qnLk6OjouXPnBgUFIYRwHK+trb1x48bjx49HNU0wyqAOAABMVI2NjUuWLLGxsdmwYQPREhER4efnFxAQoMwNg2OqtLT0/PnzRUVFA09pMJkiJyUl3b9///LlywwGAyFUWFhoZmbm6up66dKl0c0TjC6oAwAAfYiMjMzMzGxpaZk+ffq5c+eoTqcPR48eJU9sZmVlke379+8PCgo6cOAAhbkhhBYvXnzmzBlyCYZJH7mwsPD169elpaV6enpEy/Lly8kDRCw8AVSTBtUJAABUUXx8fK/5YSYQd3d3d3d3qrOgFy8vLy8vL6qzAMMB5wMAAAAA+oI6AAAAAKAvqAMAAAAA+oI6AAAAAKAvuE+QMrm5uVSnMN6ICUdpuOOjaBgL2Ew48HdCT9XV1Sq7itXkhuGDTTMJRl1ubq6/vz/VWQAAgGrx9fXNy8ujOgvagToAAFrDMCwnJ2flypVUJwIAoAbcHwAAAADQF9QBAAAAAH1BHQAAAADQF9QBAAAAAH1BHQAAAADQF9QBAAAAAH1BHQAAAADQF9QBAAAAAH1BHQAAAADQF9QBAAAAAH1BHQAAAADQF9QBAAAAAH1BHQAAAADQF9QBAAAAAH1BHQAAAADQF9QBAAAAAH1BHQAAAADQF9QBAAAAAH1BHQAAAADQF9QBAAAAAH1BHQAAAADQF9QBAAAAAH1BHQAAAADQF9QBAAAAAH1BHQAAAADQF9QBAAAAAH1BHQAAAADQF9QBAAAAAH1BHQAAAADQF9QBAAAAAH1BHQAAAADQF9QBAAAAAH1BHQAAAADQF4bjONU5AADGT2Bg4KNHj8iX9+7dmz59up6eHvFSXV391KlT5ubmFGUHABhvGlQnAAAYVyYmJseOHVNsefDgAfnf1tbWUAQAQCtwXQAAelm9enV/XZqamuvXrx/HXAAA1IPrAgDQzpw5cx4+fNjnv/1Hjx7Z2NiMf0oAAKrA+QAAaOfjjz9WV1fv1Yhh2FtvvQVFAAB0A3UAALSzatUquVzeq1FdXf2TTz6hJB8AAIXgugAAdOTi4nLnzp2enh6yBcOw58+fm5mZUZgVAGD8wfkAAOho3bp1GIaRL9XU1N59910oAgCgIagDAKAjPz8/xZcYhn388cdUJQMAoBDUAQDQkaGh4eLFi8m7BTEM8/b2pjYlAAAloA4AgKbWrl1L3B6krq7+4YcfGhgYUJ0RAIACUAcAQFMrVqzQ1NRECOE4vnbtWqrTAQBQA+oAAGiKw+H8+c9/RghpamouW7aM6nQAANSAOgAA+lqzZg1CyNvbm8PhUJ0LAIAaMH+ACsnNzfX396c6CwAAGFu+vr55eXlUZwH+A9YbVDk5OTlUp6AS/P39g4ODnZ2dqU5ERY3W+GRlZQUEBGhoqOj/CpKTkxFCISEhVCcCRg1xTIHqgPMBKoQ4HwBHhIBhWE5OzsqVK6lOREWN1vh0dXWxWKxRSWksEPMcwG/HyQSOqaqB+wMAoDVVLgIAAOMA6gAAAACAvqAOAAAAAOgL6gAAAACAvqAOAAAAAOgL6gAAaOTy5cu6urrffPMN1YmMleLi4oiIiPPnz1tbW2MYhmHYunXrFDdwd3fncrnq6uqzZ8++d+8eJUkmJCTY2tqy2WwOh2NraxsVFSWRSMjemJgYOzs7HR0dJpMpEAh27NjR1tamypEvXLiQkJAgl8uVDAVUDdQBANDI5H4qde/evampqZGRkT4+Pk+ePOHz+QYGBllZWZcuXSK3uXbtWl5e3rJly4RC4fz58ynJ8/vvv9+0aVNVVdWrV69iY2MTEhJ8fX3J3pKSks8//7yysrK+vj4+Pj4lJaXXItGqFtnT05PFYi1evLi5uVnJaEC14EBlEDMIUZ2FqkAI5eTkUJ2F6lLx8eno6HB2dh55HF9fX19fX2W2PHDggI2NTWdnJ9nC5/PPnDmjpqZmZmbW3NxMthcVFXl5eY08t2Hz9vZWzJP4Mq6trSVeenh4dHd3k73EFBFVVVWqHBnH8aCgIGdnZ5lMNmgo5Y8pGB9wPgAAMPpOnjwpFovH7eMeP34cFRW1b9++XtMhuLi4BAcH19TUbN++fdySGVR+fr5inmZmZggh8hT9xYsX1dXVyV5DQ0OEUEdHhypHRghFR0ffv38/JSVFmWhApUAdAABd3Lhxw9LSEsOwI0eOIIQyMjI4HI6WllZhYeFHH32ko6Njbm5+9uxZYuPU1FQWi2VsbLx582ZTU1MWi+Xi4nLnzh2iNygoSFNTc8qUKcTLzz77jMPhYBhWX1+PEAoODg4LC6uoqMAwTCAQIISuXLmio6Ozf//+Mdq11NRUHMc9PT3f7IqLi7OxsTlx4kRxcXGf78VxPCkpadasWUwmU09Pb/ny5b/++ivRNfAQIYTkcvmePXssLS3ZbLaDg8PwJgUXiUQ8Hm/atGl99tbU1LDZ7OnTp6t4ZD09PTc3t5SUFHxSX3uanCg+HwEUwHUBRUi1z3tTbnjj8/z5c4RQWloa8XLXrl0IoW+//balpUUsFru6unI4HKlUSvQGBgZyOJyHDx92dXUJhUJHR0cul0ueRl6zZo2JiQkZ+dChQwihuro64qWPjw+fzyd7L168yOVyY2JihpqwkueQra2t7ezsejXy+fynT5/iOH7z5k01NTUrK6u2tjb8jesCe/bs0dTUPH36dHNz84MHD+bPn29oaPjy5Uuid+Ah2r59O5PJPHfuXFNTU2RkpJqa2t27d5XcNalUWl1dnZaWxmQyT58+3ec27e3tXC43KChIyZjURo6IiEAIlZWVDRwErguoGjgfAADdubi46OjoGBkZBQQEtLe3V1VVkV0aGhrED2U7O7uMjIzW1tbMzMxhfISHh4dEIomKihq9rP9Xe3v706dP+Xx+fxs4OzuHhIRUVlbu3LmzV1dnZ2dSUtKKFSvWrl2rq6trb29/9OjR+vr6Y8eOKW7W5y/VCKYAACAASURBVBB1dXVlZGR4e3v7+PjweLzdu3czGAzlx8fCwsLc3Dw6OjoxMbG/hUbj4+NNTU3j4uKUjElt5BkzZiCEysvLhxQTUA7qAADAf2hqaiKEZDJZn70LFizQ0tIiz5mrDrFYjOO4lpbWANvExcXNnDkzPT39xo0biu1CobCtrW3BggVki6Ojo6amJnkFpBfFIXr06FFHR8ecOXOILjabPWXKFOXH5/nz52Kx+Kuvvjp16tS8efPevJ0iPz8/Nzf36tWrXC5XyZjURiYOwatXr4YUE1AO6gAAgLKYTGZdXR3VWfTW1dWFEGIymQNsw2KxMjMzMQzbsGFDZ2cn2U486qatra24MY/Ha21tHfRz29vbEUK7d+/Gfvfs2TMlb7tDCDEYDCMjI3d39+zsbKFQGB8fr9ibnZ198ODB0tJSKysrJQNSHpnNZqPfDweYQKAOAAAoRSaTNTc3m5ubU51Ib8TXz6Dz2Dg7O4eGhopEotjYWLKRx+MhhHp96yu5m0ZGRgih5ORkxUutt27dGmr+AoFAXV1dKBSSLWlpaVlZWSUlJVOnTh1qNKoiI4SkUin6/XCACQTqAACAUkpLS3Ecd3JyIl5qaGj0dwVhnBkbG2MY1tLSMuiWsbGxtra2ZWVlZMucOXO0tbV//PFHsuXOnTtSqfTtt98eNJqFhQWLxbp///6Qsm1oaFi9erVii0gkksvlFhYWCCEcx8PDw8vLywsKCnqdpVDZyCTiEJiYmAwpOKAc1AEAgH719PQ0NTV1d3c/ePAgODjY0tJy/fr1RJdAIGhsbCwoKJDJZHV1dc+ePVN8o76+fm1tbWVlZWtrq0wmKyoqGrvnBrW0tKytraurqwfdkrg6oPgMPYvFCgsLy8/Pz8rKkkgk5eXlW7ZsMTU1DQwMVCbap59+evbs2YyMDIlEIpfLq6urX7x4gRAKCAgwMTHpc95iDodz7dq1kpISiUQik8nKyso++eQTDocTGhqKEHr48GFiYuLx48cZDAam4PDhw8TbVTAyiTgE9vb2gw4dUClQBwBAF0eOHHF0dEQIhYeHe3l5ZWRkJCcnI4QcHByePHly/PjxsLAwhNCSJUtEIhHxlq6uLnt7ezab7erqamNj891335GX4bdu3bpo0aJVq1bNnDkzNjaWOBvs7OxMPJq4ZcsWY2NjOzu7pUuXNjY2jvWueXh4CIVC8sL/119/LRAIKioqHB0dv/jiC8UtnZycen177d27Nz4+PiYmxtDQ0M3NzcrKqrS0lMPhIIQGHaKUlJSQkJCEhAQDAwNTU9Pg4OCmpiaEkFQqFYvFhYWFb6bKYrEWLly4ceNGMzMzLpfr5+dnZWV1+/Zt4n5DfLCH71UwMunu3btmZmYODg4DfxBQOeP/qCLoD8wfoAjB/AEDGofxCQwM1NfXH9OPGJSSz5qLRCINDY3+npUff3K53NXV9eTJk/SJXF9fz2KxDh8+POiWMH+AqoHzAQCAfk2UReQEAkFMTExMTIzyC+iNHblcXlBQ0NraGhAQQJ/I0dHRc+fODQoKGt3EwDiAOgAM5PDhw8RNWEePHiVaVGfhWsW1ZQksFmv69OkbNmx4+vTp+OSgyuNDNxEREX5+fgEBAcrcMDimSktLz58/X1RUNPCUBpMpclJS0v379y9fvsxgMEY3MTAOoA4AA9m+ffvNmzcVW3CVmTycXFtWV1cXx3G5XF5VVRUTE5OTk+Pk5NTQ0DAOOajy+IxQZGRkZmZmS0vL9OnTz507R3U6Stm/f39QUNCBAweoTWPx4sVnzpwhF1+Y9JELCwtfv35dWlqqp6c36omBcaBBdQJggvHw8KD891af1NTUjI2N161b9/PPPycmJhYXF/c3o+qYUtnxGar4+Phes8RMCO7u7u7u7lRnQS9eXl5eXl5UZwGGD84HgPGD43heXl6vmdtHHbHA3cuXL8f0U8bC+IwPAAAogjpggklMTNTS0uJyuWKxOCwszMzM7NGjR/0tfvqvf/3rnXfe0dLS0tHRsbe3l0gkRPvp06cXLFjAYrE4HI6VlRUxvdr3339vZ2enq6vLYrHs7e2vXr365qcPaeFahJBcLo+Pj585cyabzTY0NJw+fXp8fPzKlSvHdIiIB7reeustxTRgfAAAoE9QB0wwO3bsCA0NbWtri4+Pnz59upOTE47jO3fuTExMTE5OfvHixbJly1avXv3jjz+2t7d7enr6+vo2NjaKRCIbGxti1s+UlJSPP/7Y19e3tra2uro6MjLy0aNHCKFXr175+/tXVlbW1tZqa2uvWbPmzU9/9913FS+Hb926NSQkpLOzk8vl5uTkVFRUWFtbb9q0iZxmLiEhYc+ePYcOHWpsbLx27VpXVxePxyNmch0Lzc3Np06dSk9P9/DweO+998h2GB8AAOgXlQ8tgv9LyfkDiAXROzs7iZednZ1aWloBAQHEy46ODiaTuXXr1p9//hkhdPHiRcX3SqVSHo+3aNEisqW7uzslJaXXRxAXholl3Iif119++SXR1ecC9mQy6enpCKHHjx8TLx0dHd955x0y7F//+lc1NbXXr18rMxpIuefje602i2FYXFwcuTw8TvvxmejgWfPJB46pqoH7BCe8/hY/tba2NjY2Xrt27bZt29avX0+sLfbgwYPm5uYPP/yQfLu6uvq2bdt6xSQe/hnGs+O9Fq7t6upisVhkr1wuZzAYirO6jgpdXV1i1bgdO3YcOnRIV1dX8eGlSTw+w1jSZsIhpqrNzc2lOhEwaqqrq1VwtSpao7oQAf9reOcDfvjhhzcPK3G94Oeff/7zn/+soaGBYZi/v39HR0dJSQlC6OjRo2+GvXjxopubm6GhoaamJoZhCKEXL17gQ/y9e/z4cYTQL7/8QrwMDw9XU1MrKCjo6Oi4e/eugYGBj4+PkqOBlD4fQDw3iOO4RCKZMmUKl8utqqoiN5jE4wPABAXnA1QK3B8w4Q2w+Ons2bO/+eab2tra8PDwnJycw4cPE4uN1tfX9wpSVVXl7e09ZcqUO3futLS0JCQkjEpu0dHR77///vr163V0dFasWLFy5Urii3CMcLncgwcPtra2bt26lWycxOMD1wXAROTr6zsq/3zAaIE6YMLrb/HT2trahw8fIoSMjIwOHDgwf/78hw8fWllZ6evrX7t2rdfG5eXlMpls69at1tbWLBaL+L07ckKhsKKioq6uTiaTVVVVZWRkjPVMIx9//PEf/vCHixcvkmeSYXwAAGAAUAdMeP0tflpbW7t58+Zff/1VKpWWlZU9e/bMycmJyWRGRkZev349KCiopqamp6entbX14cOHlpaWCKHi4uKuri6RSHTnzp1Rye3zzz+3tLQczynfMQxLTU3FMCwoKIhY+Q3GBwAABkL1KSLwv5S5PyAhIYFY4NXCwoJcXe3169fh4eGWlpYaGhpGRkY+Pj5CobCystLFxUVPT09dXX3q1Km7du3q7u4mtj9y5Ii9vT2LxWKxWPPmzUtPT8dxPDw8XF9fn8fj+fn5EY+/8/n84OBgExMThBCHw1mxYkVaWhox86iWlpanp2d6ejoxG/mMGTMqKiqOHTumo6ODEJo2bdpvv/2G43hJSYmBgQH5x8ZgMGbNmnX+/HllRgMNdt77hx9+sLGxISJPnTp18+bNZNf69esRQjwe78CBA7Qdn8kBrgtMPnBMVQ2Gww1HKiM3N9ff338yHZGMjAyRSESs4I4QkkqlO3fuzMjIaGpqIqqZAWAYlpOTM7kn1YHxGZSfnx9CKC8vj+pEwKiBY6pq4LlBMFZevnwZFBSkeGFeU1PT0tJSJpPJZLJBv+cmPRgfAIAqgPsDwFhhs9kMBuPkyZOvXr2SyWS1tbUnTpzYs2dPQEAAcXqc5mB8AACqAOoAMFZ0dXWvXbv2888/29jYsNlsOzu7zMzMgwcPnjp1iurUVAKMz1goLi6OiIg4f/68tbU1hmEYhq1bt05xA3d3dy6Xq66uPnv27Hv37lGSZEJCgq2tLZvN5nA4tra2UVFR5NoWCKGYmBg7OzsdHR0mkykQCHbs2KH8naSURL5w4UJCQsIwptUCqoLqGxTA/1JyHiGaQPS4D27YaDI+Q7qnbM+ePcuWLZNIJMRLPp9P3IbZa/booqIiLy+vUU50KDw8PA4fPiwWi1tbW3NzcxkMxgcffED2urm5paenNzQ0SCSSnJwcBoOxZMkSFY+ckpLi5ubW1NSkTCi4T1DVwPkAAEAfOjs7XVxcVC3UAA4ePJidnZ2bm8vlcsnG1NRUNTW1wMDAlpaWsU5AeZqamp999pmRkZG2trafn9/y5cv/53/+58WLF0SvtrZ2YGCgvr4+l8tduXKlt7f3lStXiHkqVTbytm3b3nrrraVLl3Z3dw99PADFoA4AAPTh5MmTYrFY1UL15/Hjx1FRUfv27VNcrwEh5OLiEhwcXFNTs3379jFNYEjy8/MV8zQzM0MIkafoL168qLjGhKGhIUKoo6NDlSMjhKKjo+/fv5+SkqJMNKBSoA4AYNLCcTwpKWnWrFlMJlNPT2/58uW//vor0RUUFKSpqUnMdoAQ+uyzzzgcDoZhxJzKwcHBYWFhFRUVGIYJBILU1FQWi2VsbLx582ZTU1MWi+Xi4kJOpjSkUAihK1eu6Ojo7N+/fxT3NDU1FcdxT0/PN7vi4uJsbGxOnDhRXFw81FHKyMjgcDhaWlqFhYUfffSRjo6Oubn52bNnyffK5fI9e/ZYWlqy2WwHBwfi0t5QiUQiHo83bdq0PntramrYbPb06dNVPLKenp6bmxuxOOcwAgIqUXtZAiiC+wMUIXpc/x42ZcZnz549mpqap0+fbm5ufvDgwfz58w0NDV++fEn0rlmzxsTEhNz40KFDCKG6ujripY+PD5/PJ3sDAwM5HM7Dhw+7urqEQqGjo6Piek5DCnXx4kUulxsTE6PMbip5Ldna2trOzq5XI5/Pf/r0KY7jN2/eVFNTs7Kyamtrw9+4P2DgUSJWivr2229bWlrEYrGrqyuHwyEXtt6+fTuTyTx37lxTU1NkZKSamtrdu3eV2S8cx6VSaXV1dVpaGpPJJOcE66W9vZ3L5QYFBSkZk9rIERERCKGysrKBg8D9AaoGzgcAMDl1dnYmJSWtWLFi7dq1urq69vb2R48era+vP3bs2PACamhoED+a7ezsMjIyWltbMzMzhxHHw8NDIpFERUUNL403tbe3P336lM/n97eBs7NzSEhIZWXlzp07e3UpOUouLi46OjpGRkYBAQHt7e1VVVUIoa6uroyMDG9vbx8fHx6Pt3v3bgaDofyYWFhYmJubR0dHJyYm+vv797lNfHy8qalpXFyckjGpjTxjxgyEUHl5+ZBiAspBHQDA5CQUCtva2hYsWEC2ODo6ampqjsriCAsWLNDS0iLPn1NLLBbjOE5M4dyfuLi4mTNnpqen37hxQ7F9qKOkqamJEJLJZAihR48edXR0zJkzh+his9lTpkxRfkyeP38uFou/+uqrU6dOzZs3781bKPLz83Nzc69evap456MqRyYOwatXr4YUE1AO6gAAJqfm5maEkLa2tmIjj8drbW0dlfhMJrOurm5UQo1QV1cXQojJZA6wDYvFyszMxDBsw4YNnZ2dZPtIRqm9vR0htHv3bux3z549U/K2O4QQg8EwMjJyd3fPzs4WCoXx8fGKvdnZ2QcPHiwtLbWyslIyIOWRiUkwicMBJhCoAwCYnHg8HkKo1/dZc3Ozubn5yIPLZLLRCjVyxNfPoPPYODs7h4aGikSi2NhYsnEko2RkZIQQSk5OVrzUeuvWraHmLxAI1NXVhUIh2ZKWlpaVlVVSUjJ16tShRqMqMkJIKpWi3w8HmECgDgBgcpozZ462tvaPP/5Itty5c0cqlb799tvESw0NDeL89jCUlpbiOO7k5DTyUCNnbGyMYZgyMwTExsba2tqWlZWRLYOO0gAsLCxYLJbiChHKaGhoWL16tWKLSCSSy+UWFhYIIRzHw8PDy8vLCwoKep2lUNnIJOIQECtwggkE6gAAJicWixUWFpafn5+VlSWRSMrLy7ds2WJqahoYGEhsIBAIGhsbCwoKZDJZXV3ds2fPFN+ur69fW1tbWVnZ2tpKfMf39PQ0NTV1d3c/ePAgODjY0tKSWN95qKGKiopG97lBLS0ta2vr6urqQbckrg4oPkM/6CgNHO3TTz89e/ZsRkaGRCKRy+XV1dXE1DoBAQEmJiZ9zlvM4XCuXbtWUlIikUhkMllZWdknn3zC4XBCQ0MRQg8fPkxMTDx+/DiDwcAUHD58mHi7CkYmEYfA3t5+0KEDKgXqAAAmrb1798bHx8fExBgaGrq5uVlZWZWWlnI4HKJ369atixYtWrVq1cyZM2NjY4nTuc7OzsQEc1u2bDE2Nrazs1u6dGljYyNCqKury97ens1mu7q62tjYfPfdd+Ql+aGGGnUeHh5CoZC88P/1118LBIKKigpHR8cvvvhCcUsnJ6de314DjFJGRgaxKrSDg8OTJ0+OHz8eFhaGEFqyZIlIJEIIpaSkhISEJCQkGBgYmJqaBgcHNzU1IYSkUqlYLC4sLHwzVRaLtXDhwo0bN5qZmXG5XD8/Pysrq9u3bxP3G+KDPXyvgpFJd+/eNTMzc3BwGPiDgMoZ/0cVQX9g/gBFCOYPGNA4jw8xH+24fRxJyWfNRSKRhoZGf8/Kjz+5XO7q6nry5En6RK6vr2exWIcPHx50S5g/QNXA+QAAgFJUeUE5gUAQExMTExOj/AJ6Y0culxcUFLS2tgYEBNAncnR09Ny5c4OCgkY3MTAOoA4AAEwGERERfn5+AQEBlC8pVFpaev78+aKiooGnNJhMkZOSku7fv3/58mUGgzG6iYFxAHUAAGAQkZGRmZmZLS0t06dPP3fuHNXp9Gv//v1BQUEHDhygNo3FixefOXOGXHBh0kcuLCx8/fp1aWmpnp7eqCcGxoEG1QkAAFRdfHx8rxljVJa7u7u7uzvVWdCLl5eXl5cX1VmA4YPzAQAAAAB9QR0AAAAA0BfUAQAAAAB9QR0AAAAA0BfcJ6hy/Pz8qE5BVSQnJ+fl5VGdheqiw/jcvn0bwT+KyeX27dvkyhRAFWD4YJNNgnFz69atpKQkqrMA9FJUVDRv3ryxeBQNgP4Qaz9SnQX4D6gDAKA1DMNycnJWrlxJdSIAAGrA/QEAAAAAfUEdAAAAANAX1AEAAAAAfUEdAAAAANAX1AEAAAAAfUEdAAAAANAX1AEAAAAAfUEdAAAAANAX1AEAAAAAfUEdAAAAANAX1AEAAAAAfUEdAAAAANAX1AEAAAAAfUEdAAAAANAX1AEAAAAAfUEdAAAAANAX1AEAAAAAfUEdAAAAANAX1AEAAAAAfUEdAAAAANAX1AEAAAAAfUEdAAAAANAX1AEAAAAAfUEdAAAAANAX1AEAAAAAfUEdAAAAANAX1AEAAAAAfUEdAAAAANAX1AEAAAAAfUEdAAAAANAX1AEAAAAAfUEdAAAAANCXBtUJAADGVXNzM47jii3t7e1NTU3kS21tbQaDMe55AQCogfX6PwIAYHJ7//33v/vuu/561dXVa2pqTExMxjMlAACF4LoAAPSyatUqDMP67FJTU/vjH/8IRQAAtAJ1AAD04uvrq6HR9wVBDMM+/vjjcc4HAEAtqAMAoBc9PT13d3d1dfU3u9TU1Ly9vcc/JQAAhaAOAIB21q5d29PT06tRQ0PDw8NDV1eXkpQAAFSBOgAA2vH09GQymb0a5XL52rVrKckHAEAhqAMAoB0tLS1vb+9eDwey2eylS5dSlRIAgCpQBwBAR6tXr5bJZORLBoPh6+vLZrMpTAkAQAmoAwCgow8//FDxVgCZTLZ69WoK8wEAUAXqAADoiMFgBAQEaGpqEi95PN7ixYupTQkAQAmoAwCgqVWrVkmlUoQQg8FYu3Ztf5MKAAAmN5hXGACa6unpmTp16qtXrxBCN27cWLhwIdUZAQAoAOcDAKApNTW1devWIYRMTU1dXFyoTgcAQA04E6iKbt269fz5c6qzAJOfoaEhQugPf/hDXl4e1bkAWli5ciXVKYDe4LqAKvLz8zt37hzVWQAAwCiDbxwVBNcFVJSvry9OG76+vrTa3wHk5OQghMbzE/Py8sbz40gIoZycHEo+GlCC+NsGKgjqAABozdfXl+oUAABUgjoAAAAAoC+oAwAAAAD6gjoAAAAAoC+oAwAAAAD6gjoAAAAAoC+oAwCY8C5fvqyrq/vNN99Qncj4KS4ujoiIOH/+vLW1NYZhGIYRcyOS3N3duVyuurr67Nmz7927R0mSCQkJtra2bDabw+HY2tpGRUVJJBKyNyYmxs7OTkdHh8lkCgSCHTt2tLW1qXLkCxcuJCQkyOVyJUOBiQLqAAAmPJxmc7Ps3bs3NTU1MjLSx8fnyZMnfD7fwMAgKyvr0qVL5DbXrl3Ly8tbtmyZUCicP38+JXl+//33mzZtqqqqevXqVWxsbEJCguJTmiUlJZ9//nllZWV9fX18fHxKSoqfn58qR/b09GSxWIsXL25ublYyGpgYqJ5bAvSBbvPq0G1/BzD+8wgNSUdHh7Oz86iEQsOdR+jAgQM2NjadnZ1kC5/PP3PmjJqampmZWXNzM9leVFTk5eU1CrkOl7e3t2KexJdxbW0t8dLDw6O7u5vsJSbcraqqUuXIOI4HBQU5OzvLZDJloilS8b9tOoPzAQAAZZ08eVIsFlOYwOPHj6Oiovbt28disRTbXVxcgoODa2pqtm/fTlVub8rPz1fM08zMDCFEnqK/ePGiuro62Uus9dDR0aHKkRFC0dHR9+/fT0lJUSYamBCgDgBgYrtx44alpSWGYUeOHEEIZWRkcDgcLS2twsLCjz76SEdHx9zc/OzZs8TGqampLBbL2Nh48+bNpqamLBbLxcXlzp07RG9QUJCmpuaUKVOIl5999hmHw8EwrL6+HiEUHBwcFhZWUVGBYZhAIEAIXblyRUdHZ//+/eO2s6mpqTiOe3p6vtkVFxdnY2Nz4sSJ4uLiPt+L43hSUtKsWbOYTKaent7y5ct//fVXomvgQUMIyeXyPXv2WFpastlsBweH4U2RKxKJeDzetGnT+uytqalhs9nTp09X8ch6enpubm4pKSk4za5GTWYUn48AfaHbeXK67e8AhnfulFidMi0tjXi5a9cuhNC3337b0tIiFotdXV05HI5UKiV6AwMDORzOw4cPu7q6hEKho6Mjl8slTxqvWbPGxMSEjHzo0CGEUF1dHfHSx8eHz+eTvRcvXuRyuTExMcPYUzSs6wLW1tZ2dna9Gvl8/tOnT3Ecv3nzppqampWVVVtbG/7GdYE9e/ZoamqePn26ubn5wYMH8+fPNzQ0fPnyJdE78KBt376dyWSeO3euqakpMjJSTU3t7t27SuYslUqrq6vT0tKYTObp06f73Ka9vZ3L5QYFBQ1hLKiLHBERgRAqKysbUky4LqCy4HwAAJOTi4uLjo6OkZFRQEBAe3t7VVUV2aWhoUH8LLazs8vIyGhtbc3MzBzGR3h4eEgkkqioqNHLeiDt7e1Pnz7l8/n9beDs7BwSElJZWblz585eXZ2dnUlJSStWrFi7dq2urq69vf3Ro0fr6+uPHTumuFmfg9bV1ZWRkeHt7e3j48Pj8Xbv3s1gMJQfMQsLC3Nz8+jo6MTERH9//z63iY+PNzU1jYuLUzImtZFnzJiBECovLx9STKCyoA4AYJLT1NRECMlksj57FyxYoKWlRZ4hV2VisRjHcS0trQG2iYuLmzlzZnp6+o0bNxTbhUJhW1vbggULyBZHR0dNTU3ymkgvioP26NGjjo6OOXPmEF1sNnvKlCnKj9jz58/FYvFXX3116tSpefPmvXmDRX5+fm5u7tWrV7lcrpIxqY1MHIJXr14NKSZQWVAHAEB3TCazrq6O6iwG19XVhRBiMpkDbMNisTIzMzEM27BhQ2dnJ9lOPOqmra2tuDGPx2ttbR30c9vb2xFCu3fvxn737NkzJW+7QwgxGAwjIyN3d/fs7GyhUBgfH6/Ym52dffDgwdLSUisrKyUDUh6ZzWaj3w8HmASgDgCA1mQyWXNzs7m5OdWJDI74+hl0HhtnZ+fQ0FCRSBQbG0s28ng8hFCvb30ld9zIyAghlJycrHhJ9datW0PNXyAQqKurC4VCsiUtLS0rK6ukpGTq1KlDjUZVZISQVCpFvx8OMAlAHQAArZWWluI47uTkRLzU0NDo7woC5YyNjTEMa2lpGXTL2NhYW1vbsrIysmXOnDna2to//vgj2XLnzh2pVPr2228PGs3CwoLFYt2/f39I2TY0NKxevVqxRSQSyeVyCwsLhBCO4+Hh4eXl5QUFBb3OUqhsZBJxCExMTIYUHKgsqAMAoJ2enp6mpqbu7u4HDx4EBwdbWlquX7+e6BIIBI2NjQUFBTKZrK6u7tmzZ4pv1NfXr62traysbG1tlclkRUVF4/ncoJaWlrW1dXV19aBbElcHFJ+hZ7FYYWFh+fn5WVlZEomkvLx8y5YtpqamgYGBykT79NNPz549m5GRIZFI5HJ5dXX1ixcvEEIBAQEmJiZ9zlvM4XCuXbtWUlIikUhkMllZWdknn3zC4XBCQ0MRQg8fPkxMTDx+/DiDwcAUHD58mHi7CkYmEYfA3t5+0KEDEwLUAQBMbEeOHHF0dEQIhYeHe3l5ZWRkJCcnI4QcHByePHly/PjxsLAwhNCSJUtEIhHxlq6uLnt7ezab7erqamNj891335EX3bdu3bpo0aJVq1bNnDkzNjaWOPfr7OxMPJq4ZcsWY2NjOzu7pUuXNjY2jv/Oenh4CIVC8sL/119/LRAIKioqHB0dv/jiC8UtnZycen177d27Nz4+PiYmxtDQ0M3NzcrKqrS0lMPhIIQGHbSUlJSQkJCEhAQDAwNTU9Pg4OCmpiaEkFQqFYvFhYWFb6bKYrEWLly4ceNGMzMzLpfr5+dnZWV16pxo+gAAIABJREFU+/Zt4n5DfLCH71UwMunu3btmZmYODg4DfxCYMMb/UUUwKLo9T0+3/R3AODxjHRgYqK+vP6YfoQw0rPkDRCKRhoZGf8/Kjz+5XO7q6nry5En6RK6vr2exWIcPHx7qG2H+AJUF5wMAoJ2Ju2ScQCCIiYmJiYlRfgG9sSOXywsKClpbWwMCAugTOTo6eu7cuUFBQaObGKAQ1AFgCJRfz3Tjxo1cLhfDsKHeXTWoR48effHFF7Nnz+ZyuRoaGrq6ujY2Nh4eHsO4f3uoBth9xQVwCZqamsbGxu+9996hQ4eIc8hgVERERPj5+QUEBChzw+CYKi0tPX/+fFFR0cBTGkymyElJSffv3798+TKDwRjdxACVqD4hAfqgsufJ3dzc0tPTGxoaJBJJTk4Og8FYsmRJfxsT07MrM/mo8vt74sQJBoPxxz/+8cqVK01NTV1dXRUVFdnZ2S4uLn/729+GsCfDMuju8/l8XV1dHMeJG/G+++679evXYxhmamqq5DS0Y33uNCIigpghx8rKKi8vb+w+aFBouOsNEq5evRoeHj6K+YBBFRQUxMfHK65kOCRwXUBlaVBahIAJRltbOzAwkLgNe+XKlefPn8/NzX3+/Hmvx4rGyO3btwMDA93c3K5evaqh8Z8/XWtra2trax6PR94EN3aU330Mw3g83nvvvffee+95eHj4+/t7eHj89ttvurq6Y53kwOLj43vNCTNBubu7u7u7U50FvXh5eXl5eVGdBRh9cF0ADMGQ1jPFMGx0Pz0uLk4ulx84cIAsAkgffvjh559/Prof96bhLefq6+u7fv16sVh89OjRsc0PAACGDuqAie306dMLFixgsVgcDsfKyoqYQA0f7vqqs2bNwjBMTU3t7bffJr7eduzYoaury2Kx/vGPf7z56b3WM8Vx/NChQzNnzmQymbq6uv/1X/81insqlUq//fZbAwODd955Z+Atqdr9ARBP5xcVFQ1hhwEAYHxQfF0C9EXJ6+XEE88HDhxoaGhobGz829/+tmbNGnwE66t2d3dbWVlZWloqXgIMCQnpNaMq4c31THft2oVh2H//9383NTV1dHSkp6ej0bs/4LfffkMIOTk5DRqNqt3HFe4P6EUikSCELCwsBk2ePtdQ0cjuDwATDn3+ticcOCqqSJnvRalUyuPxFi1aRLZ0d3enpKR0dHRoa2sHBASQ7f/v//0/hBC5SDzxRdjZ2Um8JL6tHz9+TLwkaovc3FziZXt7u6WlZUtLy5sJ7Nq1y8bGRiKREC87Ojq0tLQ++OADcoPRvU+QmBH2T3/608CbUbX7hP7qABzHiTsGBk4ep9P/K6EOoBv6/G1POHCf4ET14MGD5ubmDz/8kGxRV1fftm3bjz/+OOz1VRFCGzdujI6OTklJ8fPzQwhlZWUtX75cR0en17uI9UyvXbtGrmf6+PHjjo6OxYsXj94u/h/ETOmDXowfyfKyaAS7P7D29nYcx9+M0x/i0ye95OTkvLw8qrMA40SZCaEBJeD+gImKONVMrKKmaCTrqxJv/Otf/3rz5k3iZ/SXX3755oQhfa5nSvwjJ1ZmGwtWVlYsFou4OjAAqnZ/YETatra2Sm4PAADjBs4HTFTEcqL19fW92keyviohKCgoJSUlOTl5y5YtFhYWfD5fsTctLe3q1aslJSW9vmtZLBZC6PXr10PcD2UxmcwPP/ywsLDwhx9+WLhwYa/exsbGHTt2nDhxgqrdH9iVK1cQQh999JGS29PhVzKGYSEhIStXrqQ6ETBOcnNz/f39qc4C9AHOB0xUVlZW+vr6165d69U+kvVVCebm5itXrjx37lxUVFRwcDDZjg+4numcOXPU1NT+9a9/DWtvlBIdHc1kMkNDQ8llZkg///wz8TAhVbs/gJcvXyYnJ5ubm2/YsEH5dwEAwPiAOmCiYjKZkZGR169fDwoKqqmp6enpaW1tffjw4UjWVyWFhYV1d3c3NTW9//77ZOPA65kaGRn5+PicO3fu5MmTEonkwYMHx44dG91dnjt37pkzZ37++WdXV9fLly+3tLTIZLKnT58eP378L3/5CzHRKVW7T8JxvK2traenB8fxurq6nJychQsXqqurFxQUKH9/AAAAjB9K71IEfVN+nt0jR47Y29uzWCwWizVv3rz09HQcx3t6eg4dOjRjxgwGg6Gnp+ft7f3o0SNi+/T0dGJe8RkzZlRUVBw7doz4cpo2bdpvv/2mGHnRokUnTpxQbCkvL+/zT+jQoUPEBq2trRs3bjQwMNDW1n733Xf37NmDEDI3N//pp59Ga39xHK+qqtq+fbu9vb22tra6ujqPx5s3b95f/vKXH374gdiAkt2/cOGCg4ODlpaWpqammpoa+n1KwXfeeScmJqahoUHJvaPPPdUInhegGfr8bU84GD7YYtVg/BG3i9PhIjGBbvs7AOIaKh3+VWIYlpOTA/cH0Ad9/rYnHLguAAAAANAX1AEAAFVXXFwcERGhuLjzunXrFDdwd3fncrnq6uqzZ8++d+8eVXkihHp6epKTk11cXN7skslk8fHxAoFAU1OTx+PNmTOnsrJygka+cOFCQkKCXC5X/lOAyoI6AACg0vbu3ZuamhoZGenj4/PkyRM+n29gYJCVlXXp0iVym2vXruXl5S1btkwoFM6fP5+qVEUi0R//+MfQ0NA+J7zy9/f/5z//eebMmY6Ojl9++YXP57e1tU3QyJ6eniwWa/HixcSMHWBCg/kDAKCXzs7OxYsX37x5U6VC9efgwYPZ2dk//fQTMUEFITU1dd26dYGBgUKhkPKlnEk//fRTTEzMli1biOkje/VmZ2cXFBT89NNP9vb2CCFTU9PCwsIJHXnbtm1PnjxZunTp9evX31wCFEwgcD4AAHo5efKkWCxWtVB9evz4cVRU1L59+xSLAISQi4tLcHBwTU3N9u3bx+7Th+qtt946f/78mjVrmEzmm71ffvnl/PnziS/USRM5Ojr6/v37KSkpw/hooDqgDgBg4sH7X1s5KChIU1NzypQpxMvPPvuMw+FgGEZMPRkcHBwWFlZRUYFhmEAgSE1NZbFYxsbGmzdvNjU1ZbFYLi4u5FoMQwqFELpy5YqOjs7+/ftHazdTU1NxHPf09HyzKy4uzsbG5sSJE8XFxUMdooGXn0YIyeXyPXv2WFpastlsBwcH4oG3kZBKpbdv3547d+4I46haZD09PTc3t5SUFHgKYEKDOgCAiSc6OjoiImLXrl1isfj69evPnz93dXV99eoVQig1NVXxYbz09PR9+/aRL1NSUpYtW8bn83Ecf/z4cVBQ0Pr16zs6OrZt21ZZWXnv3r3u7u4PPvjg+fPnQw2FECLuGuvp6Rmt3bx06dLMmTOJKR96YbPZ//jHP9TU1DZt2tTe3v7mBgMM0datW0NCQjo7O7lcbk5OTkVFhbW19aZNm8jlpnbu3JmYmJicnPzixYtly5atXr1acYbKYaitrZVKpf/+978XLVpE1FuzZs0iZvsYSVhViDxv3ryampqffvpphB8HKAR1AAATTGdnZ1JS0ooVK9auXaurq2tvb3/06NH6+vphT+CooaFB/G62s7PLyMhobW3NzMwcRhwPDw+JRBIVFTW8NHppb29/+vRpr/UdFDk7O4eEhFRWVu7cubNXl5JD5OLioqOjY2RkFBAQ0N7eXlVVhRDq6urKyMjw9vb28fHh8Xi7d+9mMBjDGxAScW+dkZHR/v37hULhq1evli9f/vnnn3/11VcjCasKkWfMmIEQ6m+WLTAhQB0AwAQz1LWVh2TBggVaWlrkKXQKicViHMf7PBlAiouLmzlzZnp6+o0bNxTbR7L89KNHjzo6OubMmUN0sdnsKVOmjHBAiKvvs2fPdnFx0dfX19XV3bdvn66u7sjn3qY8MnGAiBMtYIKCOgCACWaEaysPislk1tXVjUqokejq6kK/fxv1h8ViZWZmYhi2YcMGxdWnRjJExFWG3bt3k0tIPHv2rM9n6pRnamqK/u/qoJqamtOmTauoqBhJWFWIzGaz0e8HC0xQUAcAMMGMfG3lAchkstEKNULEF8ygM9U4OzuHhoaKRKLY2FiycSRDZGRkhBBKTk5WnID91q1bw9gFkra29owZMx4+fKjY2N3dPfKHHimPLJVK0e8HC0xQUAcAMMEMurayhoYGecvbUJWWluI47uTkNPJQI2RsbIxhWEtLy6BbxsbG2tralpWVkS0jWX7awsKCxWLdv39/eGn3x9/fv6ys7MmTJ8TLjo6OZ8+eDe9hP5WKTBwgExOTkX8coArUAQBMMIOurSwQCBobGwsK/j97dx7X1JnvD/w5kISELQRFoCgoS92wLtVOiVqHYUpvZUAQENw66Iw/qrURsY7iCgi4DnCxYMdbh9YdFS+0V+l4nTvU+io6tyJoqbWAsrkhKIIkbMn5/XFeZnJZA4GchPN5/+VZ8j3Pec4x+XKW55vT3t7+9OnTyspKzY/b2to+fPiwoqKiqamJ+Y1XqVTPnz/v6Oi4detWVFSUs7NzRETEAELl5eUN4nuD5ubmrq6uNTU12nRIZmamqamp5pwBl58WCoUrVqw4depURkZGY2OjUqmsqal59OgRISQ8PNze3n5g4xZHR0e7uLhERERUVVXV19dv2rRJoVCon3A0xsgM5gANStoBrNFTXUPoj37V4R0GuLa/vdCyNmsvtZVpmq6vr/f29hYKhePGjfv44483btxICHF3d6+qqqJpurCw0MXFRSQSzZkz5/Hjx5GRkXw+38nJicfjWVtbBwYGlpeXDyzUxYsXraysEhIStNlTokXdYZlMxufz5XI5M3n+/Hnm9YGRI0euXbu208obN25csGCBNl3UZ/np1tbWTZs2OTs783g8Ozu74ODgkpISmqaDgoIIITt27Oi2tQUFBbNnz2ZuqxNCHBwcpFLpt99+q16hurp68eLFEonEzMzsrbfeysvLUy8yxsgMPz8/JycnlUrVbXxNqDtssHBUDBHXfhe5tr+90P93ZWRkpK2trT63yNAmDygtLeXxeMeOHdNPk/qkVCrnzp175MgRRGbU1dUJhcIDBw5oszLyAIOF+wIAXGewVePc3d3j4+Pj4+O1r5ozdJRKZU5OTlNTU3h4OCIzYmNjp02bJpPJhiI46A3yAAAwXDExMaGhoeHh4do8MDik8vPzs7Oz8/Lyeh/SgCORCSHJyclFRUUXL17k8/mDHhz0CXkAAHdt2bIlMzPzxYsX48aNO3fuHNvN6V5iYqJMJtu9eze7zfDx8Tlx4oS62gLHI+fm5ra2tubn50skkkEPDnqGYpEA3JWUlJSUlMR2K/rm6+vr6+vLdivgXxYsWLBgwQK2WwGDA9cDAAAAuAt5AAAAAHchDwAAAOAu5AEAAADchTwAAACAuyiaptluA3QWGhpqsC9xAQAMGH5xDBDyAENUUFBQXV3NdiuAE8LCwqKiory8vNhuCHDCokWL2G4CdIY8AIDTKIrKysrCtzMAZ+H5AAAAAO5CHgAAAMBdyAMAAAC4C3kAAAAAdyEPAAAA4C7kAQAAANyFPAAAAIC7kAcAAABwF/IAAAAA7kIeAAAAwF3IAwAAALgLeQAAAAB3IQ8AAADgLuQBAAAA3IU8AAAAgLuQBwAAAHAX8gAAAADuQh4AAADAXcgDAAAAuAt5AAAAAHchDwAAAOAu5AEAAADchTwAAACAu5AHAAAAcBfyAAAAAO5CHgAAAMBdyAMAAAC4C3kAAAAAdyEPAAAA4C7kAQAAANyFPAAAAIC7kAcAAABwF4/tBgCAXp06daqpqUlzzuXLlxsaGtSTQUFBdnZ2em8XALCDomma7TYAgP5ERER8+eWXfD6fmWS+ASiKIoQolUpLS8va2lozMzM2mwgAeoT7AgDcsnjxYkJI+ysdHR0dHR3Mv01NTUNDQ5EEAHAKrgcAcEtHR4e9vf2zZ8+6Xfr3v//9N7/5jZ6bBAAswvUAAG7h8XiLFy9W3xfQNHLkyHnz5um/SQDAIuQBAJyzePHi9vb2TjP5fP7y5ctNTU1ZaRIAsAX3BQA4h6ZpZ2fnmpqaTvP/+c9/zpo1i5UmAQBbcD0AgHMoilq2bFmnWwNjxoyZOXMmW00CALYgDwDgok63Bvh8fkREBPP2IABwCu4LAHDUhAkT7t69q5788ccfJ0+ezGJ7AIAVuB4AwFHLly9X3xqYNGkSkgAAbkIeAMBRy5Yt6+joIITw+fzf//73bDcHANiB+wIA3DVz5swbN25QFFVRUeHs7Mx2cwCABbgeAMBdH3zwASHkV7/6FZIAAM5iv95gcnJyQUEB260A4KKWlhaKolpbW0NDQ9luCwBHnT17lt0GsH89oKCg4Nq1a2y3AgzOuXPnug50A4NLKBTa29uPHj2a7Yb0pqam5ty5c2y3Qh9wznONgZzb7D8fwPwhwnpCBIaGoqisrKxFixax3ZBhrqyszN3dne1W9ObMmTNhYWGsf1PpAc55rjGQc5v96wEAwCIDTwIAYKghDwAAAOAu5AEAAADchTwAAACAu5AHAAAAcBfyAAAYhi5evCgWi7/++mu2GzJULl++HBMTk52d7erqSlEURVHLly/XXMHX19fKysrU1HTy5MmFhYVstZMQolKpUlJSpFJp10Xt7e1JSUnu7u4CgcDGxsbT07OiosJII3/11Vd79+5VKpXab8VAIA8AgGGI9XexhtTOnTvT0tK2bNkSHBx87949Nze3ESNGHD9+/MKFC+p1Ll26dPbsWX9//5KSkhkzZrDV1NLS0nfeeSc6Oloul3ddGhYWdvTo0RMnTsjl8jt37ri5ub18+dJIIwcEBAiFQh8fn4aGBi03ZCDYH08QAGDQ+fn5vXjxQg8bUigUPj4+33//vR62xdizZ8/p06eLi4uFQqF6Zlpa2vLlyyMjI0tKSsRisd4a07vi4uL4+PjVq1c3Nzd3zcxOnz6dk5NTXFw8ZcoUQoijo2Nubq5RR163bt29e/fmz59/5coVHs9ofl5xPQAAYOCOHDlSW1urt82VlZVt3749Li5OMwkghEil0qioqAcPHnzyySd6a0yfpk6dmp2dvXTpUjMzs65LDx06NGPGDOYHddhEjo2NLSoqSk1NHcCm2YI8AACGm6tXrzo7O1MU9emnnxJCMjIyLCwszM3Nc3Nz33//fWtr69GjR586dYpZOS0tTSgUjho16sMPP3R0dBQKhVKp9Pr168xSmUwmEAgcHByYyY8++sjCwoKiqLq6OkJIVFTUhg0bysvLKYpiRmT65ptvrK2tExMTh2jX0tLSaJoOCAjouighIeH111///PPPL1++3O1naZpOTk6eOHGimZmZRCIJDAz8+eefmUW9dxEhRKlU7tixw9nZWSQSvfHGG1lZWTruSFtb27Vr16ZNm6ZjHEOLLJFI5s2bl5qaakR3ppAHAMBwM2fOHM0L9WvWrFm/fr1CobCyssrKyiovL3d1dV21alV7ezshRCaTRUREyOXydevWVVRUFBYWdnR0vPvuu9XV1YSQtLQ0zYF+09PT4+Li1JOpqan+/v5ubm40TZeVlRFCmMfEVCrVEO3ahQsXxo8fb25u3nWRSCT64osvTExMVq1a1dzc3HWF2NjYmJiYrVu31tbWXrlypbq6eu7cuU+ePCF9dREhZPPmzfv27UtJSXn06JG/v/+SJUt++OEHXXbk4cOHbW1tN27c8Pb2ZtKviRMnpqen6/7zyXrk6dOnP3jwoLi4WMfN6Q3yAADgCqlUam1tbWdnFx4e3tzcXFVVpV7E4/GYP5QnTZqUkZHR1NSUmZk5gE34+fk1NjZu37598Fr9L83Nzffv33dzc+tpBS8vr/Xr11dUVGzevLnTIoVCkZycvHDhwmXLlonF4ilTpnz22Wd1dXWHDx/WXK3bLmppacnIyAgKCgoODraxsdm2bRufzx9Y/6gxz9bZ2dklJiaWlJQ8efIkMDBw7dq1J0+e1CWsIUT28PAghNy+fVvHzekN8gAA4ByBQEAIUf+x28nMmTPNzc3V18wNR21tLU3T3V4MUEtISBg/fnx6evrVq1c155eUlLx8+XLmzJnqObNmzRIIBOo7IJ1odtHdu3flcrmnpyezSCQSOTg46Ng/zN33yZMnS6VSW1tbsVgcFxcnFos75SXGGJk5QMyFFqOAPAAAoDMzM7OnT5+y3YrOWlpayKtfo54IhcLMzEyKolauXKlQKNTzmZfZLC0tNVe2sbFpamrqc7vMXYZt27ZRr1RWVnb7Tp32HB0dCSHMYxYMgUDg4uJSXl6uS1hDiCwSicirg2UUkAcAAPwf7e3tDQ0No0ePZrshnTE/MH2OVOPl5RUdHV1aWrpr1y71TBsbG0JIp199LXfTzs6OEJKSkkJrKCgoGMAuqFlaWnp4ePz000+aMzs6OnR/6ZH1yG1tbeTVwTIKyAMAAP6P/Px8mqbffvttZpLH4/V0B0HPRo0aRVGUNuMi7Nq1a8KECTdv3lTP8fT0tLS01Hy47/r1621tbW+++Waf0caMGSMUCouKigbW7J6EhYXdvHnz3r17zKRcLq+srBzYy34GFZk5QPb29rpvTj+QBwAAEJVK9fz5846Ojlu3bkVFRTk7O0dERDCL3N3dnz17lpOT097e/vTp08rKSs0P2traPnz4sKKioqmpqb29PS8vb+jeGzQ3N3d1da2pqelzTebugKmpqeacDRs2nD9//vjx442Njbdv3169erWjo2NkZKQ20VasWHHq1KmMjIzGxkalUllTU/Po0SNCSHh4uL29/cDGLY6OjnZxcYmIiKiqqqqvr9+0aZNCoVA/4WiMkRnMARqUtENPaLaFhISEhISw3QowOISQrKwstlsB7GNeVe/XRw4ePMi88W9ubh4QEJCens48uuXh4VFeXn748GFra2tCiIuLyy+//ELTdGRkJJ/Pd3Jy4vF41tbWgYGB5eXl6mj19fXe3t5CoXDcuHEff/zxxo0bCSHu7u5VVVU0TRcWFrq4uIhEojlz5jx+/PjixYtWVlYJCQkD2FNtznmZTMbn8+VyOTN5/vx55vWBkSNHrl27ttPKGzduXLBggXpSpVLt37/fw8ODz+dLJJKgoKC7d+8yi/rsotbW1k2bNjk7O/N4PDs7u+Dg4JKSEpqmg4KCCCE7duzotrUFBQWzZ89mbqsTQhwcHKRS6bfffqteobq6evHixRKJxMzM7K233srLy1MvMsbIDD8/PycnJ5VK1W18TQM4t4cC+y1AHgDdQh4ADD18V0ZGRtra2g7pJrShzTlfWlrK4/GOHTumnyb1SalUzp0798iRI4jMqKurEwqFBw4c0GZlA8kDcF8AAKDvh+8MhLu7e3x8fHx8vPZVc4aOUqnMyclpamoKDw9HZEZsbOy0adNkMtlQBB8iyAMAAIxJTExMaGhoeHi4fgop9SI/Pz87OzsvL6/3IQ04EpkQkpycXFRUdPHiRT6fP+jBh45x5AGzZs0yNTUdivGiCSErVqwQCoUURRnR6569OHDgAPNQ8WeffcbMGdxC7IZT1l2z8jqDx+ONHDnyt7/97fnz5wdrK72fHgZe/Z07J4MutmzZkpmZ+eLFi3Hjxp07d47t5mglMTFRJpPt3r2b3Wb4+PicOHFCXXyB45Fzc3NbW1vz8/MlEsmgBx9SxpEH/O///q+3t/cQBc/MzDSoCl06+uSTTzqVQKUHtdzF4EbThbryulgsZu5yPX36NCsr68GDB8HBwbrXQWH0fnoYePV37pwMukhKSmptbaVp+v79+yEhIWw3R1u+vr579uxhuxXwLwsWLIiJidF8R8NYGEcewKAoqr8fUSgUUql0KBpjRJhC7P7+/gP7eKc+1DHakJJIJD4+Pv/+7/9OCDlz5kyf6w/i6ZGWlmZiYhIZGcn6pdrecedkAAAtGVMeMIA7Lv0qDT6APIML9FxeXXdjx44lr0ZR7d0gnh6GWf190BndyQAAfTKmPKCsrGzChAkWFhYikWju3LmaVTS+++67SZMmicVioVA4ZcqUv/3tb6S70uCEkGPHjs2cOVMoFFpYWIwdO1Y97qaJicmFCxfef/99sVjs6Oj417/+VZsm9Vm0m+654Pe+ffvMzc2trKxqa2s3bNjg5OS0evVqCwsLExOTN998097ens/nW1hYzJgxY+7cucx4XjY2Nn/605963+tOOhViLysro7r47//+by37sFO03newz84ZIrdu3SKEzJs3Tz1HP6eHLtXfcTIAAGtYeVtRk5bjB/j4+Li6ut6/f7+9vf3HH3/81a9+JRQKmQEuaJo+e/ZsbGzss2fP6uvr33777REjRjDzg4ODmdLgjJSUFELI7t276+vrnz179pe//GXp0qU0TW/dupUQ8ve//72hoeHZs2fz5883MzNrbm7Wpv3qz7548aK2tnbu3LkWFhZtbW3M0h07dggEgmPHjjU0NNy6dWvGjBkjR458/Pix5mfXrVt38ODBhQsX3rlzZ+fOnYSQ69evNzc319XV/du//Rsh5MKFC0+fPm1ubmbeRSkqKup9r0tLSwkhhw4dYiaZMuoHDx5kFm3evJnZtUePHkkkEqlUqlQqte9DzWha7mBPndM7ot34AZrPB8jl8ry8PBcXF19f35cvX6rXGerTw83N7f79+zRNf//99yYmJmPHjmW2npeXpzmKC06GgZ0MBvKOtR5oec7DsGEg5zb7LdA+D5g6dap6kvmb75NPPum6ZlJSEnlVoFPza6utrc3Gxsbb21u9ZkdHR2pqKv3qG0qhUDDzjx49Sgj58ccftWl/p8+mp6cTQsrKymialsvllpaW4eHh6pX/+c9/EkLi4+O7/SxN08xXf1NTEzP55ZdfEkJu376t+fHTp0/3vte9fPVrCgoKEgqFP//8c+/Revnq7+8OanZOn7TPAzqltlOmTPnyyy+ZJ7+03zVdTg91HkDT9IYNGwghzMhumnkAToYBnwwG8l2pB8gDuMYoNJVvAAAgAElEQVRAzm3eQK4hGIApU6aIxWImG+iEeYyg66ggt27damhoeO+999RzTE1N161b11OEgVUW0Sza3d+C3z1F6+jo6LNhPe11T86cOfOf//mfe/fuHT9+/ICj6VLRfBCJxWLmaYCOjo4nT55cunRJJpMlJSVdvXp15MiRnVYe6tMjISHhv/7rv9LT08PCwjTn42TopL8nA0ce3wkLC+t05gAMNWPNAwghfD5f/SVy4cKF/fv3l5SUNDY29vTN0tjYSF4V39QPXQp+a0Obve5WfX39xx9/PGvWLOaP1wFHG+od7C8ej+fk5LRixQqlUrlq1ardu3f/+c9/Jvo9PZj6LnPmzFm5cuXevXvV83Ey6GiwXgQ1ZGFhYVFRUV5eXmw3BPSkoKAgNTWV7VYYbR7Q0dHx7NkzZ2dnQkhVVVVQUNDChQv/+te/vvbaawcPHtR8fkrttddeI4TU1dXprZG6FPzuk5Z73a1169Y1NDT8z//8j/pV14FFG9Id1AVT6YspE67/04Op/n7gwIFdu3YxpyjByaCzRYsWDUocQxYWFubl5cWFPQU1Q8gDjOl9AU3/+Mc/VCoVMzzL7du329vb16xZ4+rqygz91u1Hxo4da2tre+nSJb01UpeC333Scq+7unDhwokTJ7Zv3z558mRmzsaNGwcWbUh3UBc3btwghDBXuVk5PQa3+nufcDIAwIAZUx7Q1tb24sWLjo6OwsJCmUzGFIEmhDB/cl2+fLmlpaW0tFTzfqRmaXATE5MtW7ZcuXJFJpM9ePBApVI1NTUxfzIOEV0Kfvepl73uRWNj44cffjht2jSmYHZLS8sPP/xQVFSkZR92ukQ8pDvYLwqFgqny+fDhw8zMzG3bto0cOXL9+vWEpdNjcKu/9wknAwAMHNsPKmr7vkBmZqa3t/eoUaN4PN6IESMWL15cWVmpXrpp0yZbW1sbG5vQ0FDmbWY3N7eqqqpOpcFpmv7000+nTJkiFAqFQuH06dPT09P37t0rEonIq8Lbx48fZ0aHHj16dJ+vDPRZtLuXgt/q7Y4ZM4apIpqamspEGzt27Hfffbdnzx6xWEwIsbe3P3HixOnTp+3t7QkhEonk1KlTPe11VFQUs5qFhcXChQs7FWI/cOBA13Ng/vz5Wvbhtm3bNKP1voN9dk7vSF/PTqsrr2syMzPz8PBYs2YNUxt+qE+Pwar+jpOhFwbyTLUe9HnOwzBjIOc2RbM9QnhoaCgh5OzZs+w2AwwNRVFZWVm4VwpnzpwJCwtj/ZtKD3DOc42BnNvGdF8AAAAABhfygN78/PPPXQdeVQsPD2e7gQDAUZcvX46JiTHwytcMlUqVkpLSbU2v9vb2pKQkd3d3gUBgY2Pj6elZUVFhpJG/+uqrvXv3aj9uh+FAHtCbCRMm9HJP5fTp02w3EAC4aOfOnWlpaVu2bDHwyteEkNLS0nfeeSc6Oloul3ddGhYWdvTo0RMnTsjl8jt37ri5ub18+dJIIwcEBAiFQh8fH22KnBkUYx0/AABgsCgUCh8fn++//96gQvVkz549p0+fLi4uFgqF6plpaWnLly+PjIwsKSlhHik1BMXFxfHx8atXr2bKWHRaevr06ZycnOLiYmbAD0dHx9zcXKOOvG7dunv37s2fP//KlSs8ntH8vOJ6AABw3SDWUx7q0sxlZWXbt2+Pi4vTTAKIoVa+njp1anZ29tKlS83MzLouPXTo0IwZM5gf1GETOTY2tqioyBBGB9Ie8gAAGA7onqsey2QygUDAvOVICPnoo48sLCwoimKGj+xUTzktLU0oFI4aNerDDz90dHQUCoVSqVQ9iEK/QhFCvvnmG2tr68TExMHazbS0NJqmAwICui7SpfJ1n4WhlUrljh07nJ2dRSLRG2+8ofswz21tbdeuXZs2bZqOcQwtskQimTdvHlOibNAbMESQBwDAcBAbGxsTE7N169ba2torV65UV1fPnTv3yZMnhJC0tDTNl/HS09Pj4uLUk6mpqf7+/kwdxbKyMplMFhERIZfL161bV1FRUVhY2NHR8e677zLFFfsViryqz6RSqQZrNy9cuDB+/HhmMIZORCLRF198YWJismrVqubm5q4r9NJFa9asWb9+vUKhsLKyysrKKi8vd3V1XbVqlXq0qM2bN+/bty8lJeXRo0f+/v5LlizRHDtyAB4+fNjW1nbjxg1vb28m35o4cWJ6erruP5+sR54+ffqDBw+Ki4t13JzeIA8AAKOnUCiSk5MXLly4bNkysVg8ZcqUzz77rK6u7vDhwwMLyOPxmL+bJ02alJGR0dTUlJmZOYA4fn5+jY2N27dvH1gzOmlubr5//37X4bPUvLy81q9fX1FRwYwRqUnLLpJKpdbW1nZ2duHh4c3NzVVVVYSQlpaWjIyMoKCg4OBgGxubbdu28fn8gXWIGvNsnZ2dXWJiYklJyZMnTwIDA9euXXvy5EldwhpCZA8PD0LI7du3ddyc3iAPAACjp3tZ517MnDnT3NxcfQmdRbW1tTRNd3sxQC0hIWH8+PHp6elXr17VnK9LYei7d+/K5XJPT09mkUgkcnBw0LFDmLvvkydPlkqltra2YrE4Li5OLBYPOHUznMjMAWIutBgF5AEAYPSGuuqxmZnZ06dPByWULlpaWsirX6OeMLUtKIpauXKlQqFQz9eli5i7DNu2bVOPnlJZWdntO3Xac3R0JP+3wqdAIHBxcSkvL9clrCFEZsYIZw6WUUAeAABGb0irHre3txtCNW3y6gemz5FqmMrXpaWlu3btUs/UpYvs7OwIISkpKZoDqBQUFAxgF9QsLS09PDw6lfLq6OjQ/aVH1iO3tbWRVwfLKCAPAACj12fVYx6P16lAovby8/Npmn777bd1D6WjUaNGURT14sWLPtcc3MrXY8aMEQqFRUVFA2t2T8LCwm7evHnv3j1mUi6XV1ZWDuxlP4OKzBwgpsSXUUAeAABGr8+qx+7u7s+ePcvJyWlvb3/69GllZaXmx7vWU1apVM+fP+/o6Lh161ZUVJSzszNT5by/ofLy8gbxvUFzc3NXV9eamhptOmQQK18LhcIVK1acOnUqIyOjsbFRqVTW1NQ8evSIEBIeHm5vbz+wcYujo6OZ8vFVVVX19fWbNm1SKBTqJxyNMTKDOUCDknboyeCWLxwALesOA9cQ1GAFmqa1rs3aS9Vjmqbr6+u9vb2FQuG4ceM+/vjjjRs3EkLc3d2Z+tSdKlBHRkby+XwnJycej2dtbR0YGFheXj6wUBcvXrSyskpISNBmT7U552UyGZ/Pl8vlzORgVb7uszB0a2vrpk2bnJ2deTyenZ1dcHBwSUkJTdNBQUGEkB07dnTb2oKCgtmzZzO31QkhDg4OUqn022+/Va9QXV29ePFiiURiZmb21ltv5eXlqRcZY2SGn5+fk5OTSqXqNr4mA6k7zH4LkAdAt5AHAEP/35WRkZG2trb63CJDm3O+tLSUx+MdO3ZMP03qk1KpnDt37pEjRxCZUVdXJxQKDxw4oM3KBpIH4L4AAEBnBls1zt3dPT4+Pj4+XvuqOUNHqVTm5OQ0NTUNevFVY4zMiI2NnTZtmkwmG4rgQwR5AACAMYmJiQkNDQ0PD9fmgcEhlZ+fn52dnZeX1/uQBhyJTAhJTk4uKiq6ePEin88f9OBDB3kAAMC/bNmyJTMz88WLF+PGjTt37hzbzeleYmKiTCbbvXs3u83w8fE5ceKEutoCxyPn5ua2trbm5+dLJJJBDz6kjKYwIgCAHiQlJSUlJbHdir75+vr6+vqy3Qr4lwULFixYsIDtVgwErgcAAABwF/IAAAAA7kIeAAAAwF3IAwAAALjLIJ4TrKmpOXPmDNutAIOjYyETGB6Y04AjXxE45znFUA432wMZ0SEhIWz3AQAAADvY/hGmKZqm2e4EAGANRVFZWVmLFi1iuyEAwA48HwAAAMBdyAMAAAC4C3kAAAAAdyEPAAAA4C7kAQAAANyFPAAAAIC7kAcAAABwF/IAAAAA7kIeAAAAwF3IAwAAALgLeQAAAAB3IQ8AAADgLuQBAAAA3IU8AAAAgLuQBwAAAHAX8gAAAADuQh4AAADAXcgDAAAAuAt5AAAAAHchDwAAAOAu5AEAAADchTwAAACAu5AHAAAAcBfyAAAAAO5CHgAAAMBdyAMAAAC4C3kAAAAAdyEPAAAA4C7kAQAAANyFPAAAAIC7kAcAAABwF/IAAAAA7kIeAAAAwF0UTdNstwEA9CcyMvLu3bvqycLCwnHjxkkkEmbS1NT0yy+/HD16NEutAwB947HdAADQK3t7+8OHD2vOuXXrlvrfrq6uSAIAOAX3BQC4ZcmSJT0tEggEERERemwLALAP9wUAOMfT0/Onn37q9v/+3bt3X3/9df03CQDYgusBAJzzwQcfmJqadppJUdTUqVORBABwDfIAAM5ZvHixUqnsNNPU1PT3v/89K+0BABbhvgAAF0ml0uvXr6tUKvUciqKqq6udnJxYbBUA6B+uBwBw0fLlyymKUk+amJjMmTMHSQAAByEPAOCi0NBQzUmKoj744AO2GgMALEIeAMBFI0eO9PHxUT8tSFFUUFAQu00CAFYgDwDgqGXLljGPB5mamr733nsjRoxgu0UAwALkAQActXDhQoFAQAihaXrZsmVsNwcA2IE8AICjLCwsfve73xFCBAKBv78/280BAHYgDwDgrqVLlxJCgoKCLCws2G4LALAD4wfoyZkzZ8LCwthuBQCAcQgJCTl79izbreAE1BvUq6ysLLabYKAKCgpSU1PRP/2SkpJCCFm/fr0uQY4fPx4eHs7jGe5XAc4NDmLObdAPw/3PPywtWrSI7SYYrtTUVPRPvzB/LenYaQEBAUKhcJBaNFRwbnANrgToE54PAOA0w08CAGBIIQ8AAADgLuQBAAAA3IU8AAAAgLuQBwAAAHAX8gAAbrl48aJYLP7666/ZbshQuXz5ckxMTHZ2tqurK0VRFEUtX75ccwVfX18rKytTU9PJkycXFhay1U5CiEqlSklJkUqlXRe1t7cnJSW5u7sLBAIbGxtPT8+KigojjfzVV1/t3btXqVRqvxXQJ+QBANwyvIcO27lzZ1pa2pYtW4KDg+/du+fm5jZixIjjx49fuHBBvc6lS5fOnj3r7+9fUlIyY8YMtppaWlr6zjvvREdHy+XyrkvDwsKOHj164sQJuVx+584dNze3ly9fGmlk5t1UHx+fhoYGLTcE+oTxAwC4xc/P78WLF3rYkEKh8PHx+f777/WwLcaePXtOnz5dXFys+TJkWlra8uXLIyMjS0pKxGKx3hrTu+Li4vj4+NWrVzc3N3fNzE6fPp2Tk1NcXDxlyhRCiKOjY25urlFHXrdu3b179+bPn3/lyhVDHrSKm3A9AACGxJEjR2pra/W2ubKysu3bt8fFxXUaEUEqlUZFRT148OCTTz7RW2P6NHXq1Ozs7KVLl5qZmXVdeujQoRkzZjA/qMMmcmxsbFFRUWpq6gA2DUMKeQAAh1y9etXZ2ZmiqE8//ZQQkpGRYWFhYW5unpub+/7771tbW48ePfrUqVPMymlpaUKhcNSoUR9++KGjo6NQKJRKpdevX2eWymQygUDg4ODATH700UcWFhYURdXV1RFCoqKiNmzYUF5eTlGUu7s7IeSbb76xtrZOTEwcol1LS0ujaTogIKDrooSEhNdff/3zzz+/fPlyt5+laTo5OXnixIlmZmYSiSQwMPDnn39mFvXeRYQQpVK5Y8cOZ2dnkUj0xhtv6D7+cVtb27Vr16ZNm6ZjHEOLLJFI5s2bl5qaOrzvTBkj5AEAHDJnzhzNC/Vr1qxZv369QqGwsrLKysoqLy93dXVdtWpVe3s7IUQmk0VERMjl8nXr1lVUVBQWFnZ0dLz77rvV1dWEkLS0NM2xftPT0+Pi4tSTqamp/v7+bm5uNE2XlZURQpjHxFQq1RDt2oULF8aPH29ubt51kUgk+uKLL0xMTFatWtXc3Nx1hdjY2JiYmK1bt9bW1l65cqW6unru3LlPnjwhfXURIWTz5s379u1LSUl59OiRv7//kiVLfvjhB1125OHDh21tbTdu3PD29mbSr4kTJ6anp+v+88l65OnTpz948KC4uFjHzcHgQh4AAEQqlVpbW9vZ2YWHhzc3N1dVVakX8Xg85g/lSZMmZWRkNDU1ZWZmDmATfn5+jY2N27dvH7xW/0tzc/P9+/fd3Nx6WsHLy2v9+vUVFRWbN2/utEihUCQnJy9cuHDZsmVisXjKlCmfffZZXV3d4cOHNVfrtotaWloyMjKCgoKCg4NtbGy2bdvG5/MH1j9qzLN1dnZ2iYmJJSUlT548CQwMXLt27cmTJ3UJawiRPTw8CCG3b9/WcXMwuJAHAMC/CAQCQoj6j91OZs6caW5urr5mbjhqa2tpmu72YoBaQkLC+PHj09PTr169qjm/pKTk5cuXM2fOVM+ZNWuWQCBQ3wHpRLOL7t69K5fLPT09mUUikcjBwUHH/mHuvk+ePFkqldra2orF4ri4OLFY3CkvMcbIzAFiLrSA4UAeAAD9YGZm9vTpU7Zb0VlLSwt59WvUE6FQmJmZSVHUypUrFQqFej7zMpulpaXmyjY2Nk1NTX1ul7nLsG3bNuqVysrKbt+p056joyMhhHnMgiEQCFxcXMrLy3UJawiRRSIReXWwwHAgDwAAbbW3tzc0NIwePZrthnTG/MD0OVKNl5dXdHR0aWnprl271DNtbGwIIZ1+9bXcTTs7O0JISkoKraGgoGAAu6BmaWnp4eHx008/ac7s6OjQ/aVH1iO3tbWRVwcLDAfyAADQVn5+Pk3Tb7/9NjPJ4/F6uoOgZ6NGjaIoSptxEXbt2jVhwoSbN2+q53h6elpaWmo+3Hf9+vW2trY333yzz2hjxowRCoVFRUUDa3ZPwsLCbt68ee/ePWZSLpdXVlYO7GU/g4rMHCB7e3vdNweDCHkAAPRGpVI9f/68o6Pj1q1bUVFRzs7OERERzCJ3d/dnz57l5OS0t7c/ffq0srJS84O2trYPHz6sqKhoampqb2/Py8sbuvcGzc3NXV1da2pq+lyTuTtgamqqOWfDhg3nz58/fvx4Y2Pj7du3V69e7ejoGBkZqU20FStWnDp1KiMjo7GxUalU1tTUPHr0iBASHh5ub28/sHGLo6OjXVxcIiIiqqqq6uvrN23apFAo1E84GmNkBnOABiXtgMFEg14wbxWz3QrDhf4ZgJCQkJCQkH595ODBg8wb/+bm5gEBAenp6cyjWx4eHuXl5YcPH7a2tiaEuLi4/PLLLzRNR0ZG8vl8JycnHo9nbW0dGBhYXl6ujlZfX+/t7S0UCseNG/fxxx9v3LiREOLu7l5VVUXTdGFhoYuLi0gkmjNnzuPHjy9evGhlZZWQkNDf3dTy3JDJZHw+Xy6XM5Pnz59nXh8YOXLk2rVrO628cePGBQsWqCdVKtX+/fs9PDz4fL5EIgkKCrp79y6zqM8uam1t3bRpk7OzM4/Hs7OzCw4OLikpoWk6KCiIELJjx45uW1tQUDB79mzmtjohxMHBQSqVfvvtt+oVqqurFy9eLJFIzMzM3nrrrby8PPUiY4zM8PPzc3JyUqlU3cbXNIBzGwYM37x6gt+53qF/BkAP35WRkZG2trZDuok+aXlulJaW8ni8Y8eO6aFJ2lAqlXPnzj1y5AgiM+rq6oRC4YEDB7RZGXmAPuG+AAD0xljKxLm7u8fHx8fHx2tfNWfoKJXKnJycpqam8PBwRGbExsZOmzZNJpMNRXDQBfKAYWUoSsoabJnakydPUhTVbf1T7XGqx4a9mJiY0NDQ8PBw/RRS6kV+fn52dnZeXl7vQxpwJDIhJDk5uaio6OLFi3w+f9CDg46QBwwr9BAM3D0UMQfFyZMn3dzcCgoKmGFrB4ZTPdZfW7ZsyczMfPHixbhx486dO8d2c7SSmJgok8l2797NbjN8fHxOnDihLr7A8ci5ubmtra35+fkSiWTQg8MgYPe2BHcM0f1vuVzu5eVl+DH71N/+qaurGzdu3PHjxwkh27dv1/6Dw6bHaM7cQ8WzIxzEkXPbQOB6gHEbitKuei4XOzBnzpzx8/MLCAgQCoXMo2FafpCzPQYA0C3kAYblu+++mzRpklgsFgqFU6ZM+dvf/qZedOzYsZkzZwqFQgsLi7Fjx+7atatTaddOJWUnTpxIUZSJicmbb77JDHT6pz/9iYn8xRdf9LSt3mMS3Sq0DqKTJ08uXLjQysrK19e3oqLiu+++67oOegwAoG8sX4/gDC2vbZ49ezY2NvbZs2f19fVvv/32iBEjmPkpKSmEkN27d9fX1z979uwvf/nL0qVLaZoODg5mSrsymIKwBw8epGm6o6Nj7Nixzs7OHR0d6hXWr1+vHgO1p231EpOm6R07dggEgmPHjjU0NNy6dWvGjBkjR458/Pgxs3Tr1q2EkL///e8vXryora2dO3euhYVFW1vbYPUPo7Ky0s7OjtmvY8eOEUL+8Ic/dFpn2PcYzZlrp7gvwEEcObcNBK4HGJaQkJCdO3dKJBJbW9uAgID6+vqnT5+2t7fHxcV5e3tv3rzZ1tZWIpH84Q9/mDVrVu+hTE1N161bV1VVdf78eWaOXC7Pzs5euXJlL9vqPaYuFVoH0cmTJ3/3u98xQ8IFBASYmZmdPXtWs3IMegwAQEs8thsAPWJesFEqlbdu3WpoaHjvvffUi5hfrD4j/PGPf4yNjU1NTQ0NDSWEHD9+PDAwkBkNradt9R5Qlwqtg+jkyZNJSUnMv62trX19fb/++uvc3Fz1e8/c6bGampozZ85oubKRYsr2DPvdBE01NTUGWM5quEIeYFguXLiwf//+kpKSxsZG9Y9BY2MjeVUVrV8sLS3/3//7f/v37//nP//51ltvHTp0SPPtr2631TtdKrQOlh9//PH27dv+/v6d5h89elSdB3Cnx65duxYWFjYooQwcR3YT1EJCQthuAlfgvoABqaqqCgoKcnBwuH79+osXL/bu3cvMf+2118j/re2tPWbQ9ZSUlCtXrowZM4YZcb2XbfVOlwqtg+XEiROLFy/WvLn17NkzkUh06dKlx48fM+twp8e4cA8VzwdwEJIAfUIeYEBu377d3t6+Zs0aV1dXoVBIURQzf+zYsba2tpcuXRpAzNGjRy9atOjcuXPbt2+Piorqc1u906VC66Cgafr06dMfffSR5kyJRBIaGqpUKk+ePMnMQY8BAGgJeYABcXZ2JoRcvny5paWltLRUfQvZzMxsy5YtV65ckclkDx48UKlUTU1NP/30E+lS2rXbsBs2bOjo6Hj+/PlvfvObPrfVe0xdKrQOiu+//97a2nr27Nmd5q9evZoQcvToUWYSPQYAoC22L/9whZbXNjdt2mRra2tjYxMaGsq8gO7m5sZUcf3000+nTJkiFAqFQuH06dPT09Pp/1vaddu2bZolZTXDent7f/7551puq/eYulRo1bF//vCHP1hYWPB4vKlTpxYWFqrn79q1S10L1cnJiemZYd9jNGfercJ9AQ7iyLltICh6uIyFbuDOnDkTFhaG3u4J+mcAmJcazp49y3ZDhhbODQ7iyLltIHBfAAAAgLuQBwAAAHAX8gAAGFYuX74cExOTnZ3t6upKURRFUcuXL9dcwdfX18rKytTUdPLkyYWFhWy1kxCiUqlSUlKkUmnXRe3t7UlJSe7u7gKBwMbGxtPTs6Kiwkgjf/XVV3v37u1z0C1gC/IAABg+du7cmZaWtmXLluDg4Hv37rm5uY0YMeL48eMXLlxQr3Pp0qWzZ8/6+/uXlJTMmDGDraaWlpa+88470dHRTFGrTsLCwo4ePXrixAm5XH7nzh03N7eXL18aaWSmLqiPjw8zrBYYGownCAA9UigUPj4+33//vUGF6smePXtOnz5dXFwsFArVM9PS0pYvXx4ZGVlSUiIWi4du6/1SXFwcHx+/evXq5ubmro9Anj59Oicnp7i4eMqUKYQQR0fH3Nxco468bt26e/fuzZ8//8qVKzwefncMC64HAECPjhw5Ultba2ihulVWVrZ9+/a4uDjNJIAQIpVKo6KiHjx48Mknnwzd1vtr6tSp2dnZS5cuNTMz67r00KFDM2bMYH5Qh03k2NjYoqKi1NTUAWwahhTyAIBhjqbp5OTkiRMnmpmZSSSSwMDAn3/+mVkkk8kEAgEz4AEh5KOPPrKwsKAoihmSOSoqasOGDeXl5RRFubu7p6WlCYXCUaNGffjhh46OjkKhUCqVqsdT6lcoQsg333xjbW2dmJg4WLuZlpZG03RAQEDXRQkJCa+//vrnn39++fLl/nZRRkaGhYWFubl5bm7u+++/b21tPXr06FOnTqk/q1Qqd+zY4ezsLBKJ3njjDWa0A120tbVdu3Zt2rRpOsYxtMgSiWTevHmpqal4BdTQIA8AGOZiY2NjYmK2bt1aW1t75cqV6urquXPnPnnyhBCSlpa2aNEi9Zrp6elxcXHqydTUVH9/fzc3N5qmy8rKZDJZRESEXC5ft25dRUVFYWFhR0fHu+++W11d3d9Q5FWpRpVKNVi7eeHChfHjxzPjMnUiEom++OILExOTVatWNTc3d12hly5as2bN+vXrFQqFlZVVVlZWeXm5q6vrqlWr1ANHbt68ed++fSkpKY8ePfL391+yZInmMNID8PDhw7a2ths3bnh7ezP51sSJE5lRsHQJawiRp0+f/uDBg+LiYh03B4MLeQDAcKZQKJKTkxcuXLhs2TKxWDxlypTPPvusrq7u8OHDAwvI4/GYv5snTZqUkZHR1NSUmZk5gDh+fn6NjY3bt28fWDM6aW5uvn//vrooVFdeXl7r16+vqKjYvHlzp0VadpFUKrW2trazswsPD29ubq6qqiKEtLS0ZGRkBAUFBQcH29jYbNu2jc/nD6xD1Jhn6+zs7BITE0tKSp48eRIYGLh27Vp1+Qzjjezh4UEIuX37to6bg8GFPABgOLYBp2QAACAASURBVCspKXn58uXMmTPVc2bNmiUQCDTrIwzYzJkzzc3N1ZfQWVRbW0vTdLcXA9QSEhLGjx+fnp5+9epVzfn97SKBQEAIYa4H3L17Vy6Xe3p6MotEIpGDg4OOHcLcfZ88ebJUKrW1tRWLxXFxcWKxeMCpm+FEZg4Qc6EFDAfyAIDhjHlTy9LSUnOmjY1Np1LIA2ZmZvb06dNBCaWLlpYW8urXqCdCoTAzM5OiqJUrVyoUCvV8XbqIucuwbds26pXKyspu36nTHlMsQ7NqtkAgcHFxKS8v1yWsIUQWiUTk1cECw4E8AGA4s7GxIYR0+klraGgYPXq07sHb29sHK5SOmB+YPkeq8fLyio6OLi0t3bVrl3qmLl1kZ2dHCElJSdGs2lJQUDCAXVCztLT08PBgymOqdXR06P7SI+uR29rayKuDBYYDeQDAcObp6Wlpaan55Nr169fb2trefPNNZpLH4/VUf7lP+fn5NE2//fbbuofS0ahRoyiKevHiRZ9r7tq1a8KECTdv3lTP6bOLejFmzBihUFhUVDSwZvckLCzs5s2b9+7dYyblcnllZeXAXvYzqMjMAbK3t9d9czCIkAcADGdCoXDDhg3nz58/fvx4Y2Pj7du3V69e7ejoGBkZyazg7u7+7NmznJyc9vb2p0+fVlZWan7c1tb24cOHFRUVTU1NzG+8SqV6/vx5R0fHrVu3oqKinJ2dIyIiBhAqLy9vEN8bNDc3d3V1ramp0aZDMjMzTU1NNef03kW9R1uxYsWpU6cyMjIaGxuVSmVNTc2jR48IIeHh4fb29gMbtzg6OtrFxSUiIqKqqqq+vn7Tpk0KhUL9hKMxRmYwB2hQ0g4YTPopbwyood479M8AaFmjXaVS7d+/38PDg8/nSySSoKCgu3fvqpfW19d7e3sLhcJx48Z9/PHHGzduJIS4u7tXVVXRNF1YWOji4iISiebMmfP48ePIyEg+n+/k5MTj8aytrQMDA8vLywcW6uLFi1ZWVgkJCX22X8tzQyaT8fl8uVzOTJ4/f555fWDkyJFr167ttPLGjRsXLFigTRelp6czT7d5eHiUl5cfPnzY2tqaEOLi4vLLL7/QNN3a2rpp0yZnZ2cej2dnZxccHFxSUkLTdFBQECFkx44d3ba2oKBg9uzZzG11QoiDg4NUKv3222/VK1RXVy9evFgikZiZmb311lt5eXnqRcYYmeHn5+fk5KRSqbqNr0nLcxsGBb559QS/c71D/wyA/r8rIyMjbW1t9blFWutzo7S0lMfjHTt2TA9N0oZSqZw7d+6RI0cQmVFXVycUCg8cOKDNysgD9An3BQCgHwy2apy7u3t8fHx8fLz2VXOGjlKpzMnJaWpqCg8PR2RGbGzstGnTZDLZUAQHXSAPAIBhIiYmJjQ0NDw8XJsHBodUfn5+dnZ2Xl5e70MacCQyISQ5ObmoqOjixYt8Pn/Qg4OOkAcAgFa2bNmSmZn54sWLcePGnTt3ju3mdC8xMVEmk+3evZvdZvj4+Jw4cUJdbYHjkXNzc1tbW/Pz8yUSyaAHB92h/iMAaCUpKSkpKYntVvTN19fX19eX7VbAvyxYsGDBggVstwJ6hOsBAAAA3IU8AAAAgLuQBwAAAHAX8gAAAADuwnOCehUaGsp2EwwUM+Ao+qdfrl27RjjQaTg3OOjatWvquhUw1CiaptluAycUFBQkJyez3QqAzvLy8qZPnz4Ub4sB6IIpDsl2KzgBeQAAp1EUlZWVtWjRIrYbAgDswPMBAAAA3IU8AAAAgLuQBwAAAHAX8gAAAADuQh4AAADAXcgDAAAAuAt5AAAAAHchDwAAAOAu5AEAAADchTwAAACAu5AHAAAAcBfyAAAAAO5CHgAAAMBdyAMAAAC4C3kAAAAAdyEPAAAA4C7kAQAAANyFPAAAAIC7kAcAAABwF/IAAAAA7kIeAAAAwF3IAwAAALgLeQAAAAB3IQ8AAADgLuQBAAAA3IU8AAAAgLuQBwAAAHAX8gAAAADuQh4AAADAXcgDAAAAuAt5AAAAAHchDwAAAOAuHtsNAAC9amhooGlac05zc/Pz58/Vk5aWlnw+X+/tAgB2UJ2+EQBgePvNb37zj3/8o6elpqamDx48sLe312eTAIBFuC8AwC2LFy+mKKrbRSYmJu+88w6SAABOQR4AwC0hISE8Xvc3BCmK+uCDD/TcHgBgF/IAAG6RSCS+vr6mpqZdF5mYmAQFBem/SQDAIuQBAJyzbNkylUrVaSaPx/Pz8xOLxaw0CQDYgjwAgHMCAgLMzMw6zVQqlcuWLWOlPQDAIuQBAJxjbm4eFBTU6eVAkUg0f/58tpoEAGxBHgDARUuWLGlvb1dP8vn8kJAQkUjEYpMAgBXIAwC46L333tN8FKC9vX3JkiUstgcA2II8AICL+Hx+eHi4QCBgJm1sbHx8fNhtEgCwAnkAAEctXry4ra2NEMLn85ctW9bToAIAMLxhXGEAjlKpVK+99tqTJ08IIVevXp09ezbbLQIAFuB6AABHmZiYLF++nBDi6OgolUrZbg4AsANXAg1RQUFBdXU1262A4W/kyJGEkF/96ldnz55luy3ACYsWLWK7CdAZ7gsYotDQ0HPnzrHdCgCAQYZfHAOE+wIGKiQkhOYeQkhWVhbbrWBTVlYWIUSfWzx79qw+N6eGY801zLkNBgh5AACnhYSEsN0EAGAT8gAAAADuQh4AAADAXcgDAAAAuAt5AAAAAHchDwAAAOAu5AEARu/ixYtisfjrr79muyFD5fLlyzExMdnZ2a6urhRFURTFjISo5uvra2VlZWpqOnny5MLCQrbaSQhRqVQpKSndjs/Y3t6elJTk7u4uEAhsbGw8PT0rKiqMNPJXX321d+9epVKp/VbAYCEPADB69LAem2Xnzp1paWlbtmwJDg6+d++em5vbiBEjjh8/fuHCBfU6ly5dOnv2rL+/f0lJyYwZM9hqamlp6TvvvBMdHS2Xy7suDQsLO3r06IkTJ+Ry+Z07d9zc3F6+fGmkkQMCAoRCoY+PT0NDg5YbAoOFcYUBjJ6fn9+LFy/0sCGFQuHj4/P999/rYVuMPXv2nD59uri4WCgUqmempaUtX748MjKypKRELBbrrTG9Ky4ujo+PX716dXNzc9fM7PTp0zk5OcXFxVOmTCGEODo65ubmGnXkdevW3bt3b/78+VeuXEGxSqOG6wEAoK0jR47U1tbqbXNlZWXbt2+Pi4vTTAIIIVKpNCoq6sGDB5988oneGtOnqVOnZmdnL1261MzMrOvSQ4cOzZgxg/lBHTaRY2Nji4qKUlNTB7BpMBzIAwCM29WrV52dnSmK+vTTTwkhGRkZFhYW5ubmubm577//vrW19ejRo0+dOsWsnJaWJhQKR40a9eGHHzo6OgqFQqlUev36dWapTCYTCAQODg7M5EcffWRhYUFRVF1dHSEkKipqw4YN5eXlFEW5u7sTQr755htra+vExMQh2rW0tDSapgMCArouSkhIeP311z///PPLly93+1mappOTkydOnGhmZiaRSAIDA3/++WdmUe9dRAhRKpU7duxwdnYWiURvvPGG7gPitrW1Xbt2bdq0aTrGMbTIEolk3rx5qampw/vO1LCHPADAuM2ZM0fzQv2aNWvWr1+vUCisrKyysrLKy8tdXV1XrVrV3t5OCJHJZBEREXK5fN26dRUVFYWFhR0dHe+++y5T3zItLU2zHFx6enpcXJx6MjU11d/f383NjabpsrIyQgjzmJhKpRqiXbtw4cL48ePNzc27LhKJRF988YWJicmqVauam5u7rhAbGxsTE7N169ba2torV65UV1fPnTv3yZMnpK8uIoRs3rx53759KSkpjx498vf3X7JkyQ8//KDLjjx8+LCtre3GjRve3t5M+jVx4sT09HTdfz5Zjzx9+vQHDx4UFxfruDlgEfIAgOFJKpVaW1vb2dmFh4c3NzdXVVWpF/F4POYP5UmTJmVkZDQ1NWVmZg5gE35+fo2Njdu3bx+8Vv9Lc3Pz/fv33dzcelrBy8tr/fr1FRUVmzdv7rRIoVAkJycvXLhw2bJlYrF4ypQpn332WV1d3eHDhzVX67aLWlpaMjIygoKCgoODbWxstm3bxufzB9Y/asyzdXZ2domJiSUlJU+ePAkMDFy7du3Jkyd1CWsIkT08PAght2/f1nFzwCLkAQDDnEAgIISo/9jtZObMmebm5upr5oajtraWpuluLwaoJSQkjB8/Pj09/erVq5rzS0pKXr58OXPmTPWcWbNmCQQC9R2QTjS76O7du3K53NPTk1kkEokcHBx07B/m7vvkyZOlUqmtra1YLI6LixOLxZ3yEmOMzBwg5kILGCnkAQBcZ2Zm9vTpU7Zb0VlLSwt59WvUE6FQmJmZSVHUypUrFQqFej7zMpulpaXmyjY2Nk1NTX1ul7nLsG3bNuqVysrKbt+p056joyMhhHnMgiEQCFxcXMrLy3UJawiRRSIReXWwwEghDwDgtPb29oaGhtGjR7PdkM6YH5g+R6rx8vKKjo4uLS3dtWuXeqaNjQ0hpNOvvpa7aWdnRwhJSUmhNRQUFAxgF9QsLS09PDx++uknzZkdHR26v/TIeuS2tjby6mCBkUIeAMBp+fn5NE2//fbbzCSPx+vpDoKejRo1iqIobcZF2LVr14QJE27evKme4+npaWlpqflw3/Xr19va2t58880+o40ZM0YoFBYVFQ2s2T0JCwu7efPmvXv3mEm5XF5ZWTmwl/0MKjJzgOzt7XXfHLAFeQAA56hUqufPn3d0dNy6dSsqKsrZ2TkiIoJZ5O7u/uzZs5ycnPb29qdPn1ZWVmp+0NbW9uHDhxUVFU1NTe3t7Xl5eUP33qC5ubmrq2tNTU2fazJ3B0xNTTXnbNiw4fz588ePH29sbLx9+/bq1asdHR0jIyO1ibZixYpTp05lZGQ0NjYqlcqamppHjx4RQsLDw+3t7Qc2bnF0dLSLi0tERERVVVV9ff2mTZsUCoX6CUdjjMxgDtCgpB3AGhoMT0hISEhICNutYAEhJCsri+1WsIl5Vb1fHzl48CDzxr+5uXlAQEB6ejrz6JaHh0d5efnhw4etra0JIS4uLr/88gtN05GRkXw+38nJicfjWVtbBwYGlpeXq6PV19d7e3sLhcJx48Z9/PHHGzduJIS4u7tXVVXRNF1YWOji4iISiebMmfP48eOLFy9aWVklJCQMYE+1OdYymYzP58vlcmby/PnzzOsDI0eOXLt2baeVN27cuGDBAvWkSqXav3+/h4cHn8+XSCRBQUF3795lFvXZRa2trZs2bXJ2dubxeHZ2dsHBwSUlJTRNBwUFEUJ27NjRbWsLCgpmz57N3FYnhDg4OEil0m+//Va9QnV19eLFiyUSiZmZ2VtvvZWXl6deZIyRGX5+fk5OTiqVqtv4mgZwboN+4KgYIuQBnKWH78rIyEhbW9sh3YQ2tDnWpaWlPB7v2LFj+mlSn5RK5dy5c48cOYLIjLq6OqFQeODAAW1WRh5gsHBfAIBzjKVMnLu7e3x8fHx8vPZVc4aOUqnMyclpamoKDw9HZEZsbOy0adNkMtlQBAe9QR4wTPzxj3+0srKiKGrQn28yKJqVZxkCgWDUqFG//vWv9+/f//z5c7YbCIMsJiYmNDQ0PDxcP4WUepGfn5+dnZ2Xl9f7kAYciUwISU5OLioqunjxIp/PH/TgoE/IA4aJzz///D/+4z/YbsWQU1eeFYvFNE2rVKra2tozZ86MGzdu06ZNkydP1nH812Fvy5YtmZmZL168GDdu3Llz59hujlYSExNlMtnu3bvZbYaPj8+JEyfUxRc4Hjk3N7e1tTU/P18ikQx6cNAz5AEw5BQKhVQqHYrIFEXZ2Nj8+te/zszMPHPmzJMnT/RWgbdfhq4H+ispKam1tZWm6fv374eEhLDdHG35+vru2bOH7VbAvyxYsCAmJkbzHQ0wXsgDhg+KothuQvf0U6w2JCQkIiKitrb2s88+G+pt9Zeey/UCAGgPeYARo2l6//7948ePNzMzE4vFzCtejH379pmbm1tZWdXW1m7YsMHJyYl5aaqnSqy9l6MlvVZx7W+x2qHDvASfl5fH2R4AAOg3Ft9VgJ5o+d7g1q1bKYr685///Pz5c7lcnp6eTgi5efOmeikhZN26dQcPHly4cOGdO3d27NghEAiOHTvW0NBw69atGTNmjBw58vHjx8z6kZGRFhYWP/30U0tLS0lJyaxZs6ysrJi3xmma7v2zS5cutbe3Vzds//79hJCnT58yk8HBwUyx2j4R7d4bVD8f0EljYyMhZMyYMcbbA9x5t0rLYw3DBnfObaOD6wHGSqFQpKSk/Pa3v42OjraxsRGJRLa2tl1X27Nnz9q1a7Ozs11cXPqsxNpTOVotq7iyjnljotOo8pzqAQCA/uKx3QAYoLKyMrlc7uPjo+X6/a3EqlmOtr+fZUtzczNN08zYcF0ZUQ+EhoYORVhDk5KScvbsWbZbAXqizRDRwApcDzBWzH8qpjaaNgZQiVVdjlaXKq769MsvvxBCJkyY0O1SLvQAAEB/4XqAsRIKhYSQ1tZWLdfvbyVWzXK0ulRx1advvvmGEPL+++93u9SIeoALfyVTFLV+/fpFixax3RDQkzNnzoSFhbHdCugGrgcYK09PTxMTk2+//Vb79ftViVWzHG2fnzWEYrWPHz9OSUkZPXr0ypUru11h2PcAAMAAIA8wVkwZtHPnzh05cqSxsfHWrVu9P7OmTSXWnsrR9vnZfhWrHZTdp2n65cuXTJWzp0+fZmVlzZ4929TUNCcnp6fnA4ZZDwAADA5W31aA7mn53mBTU9Mf//jHESNGWFpazpkzZ8eOHYSQ0aNHFxcX7927VyQSEULGjBmjLtfWSyVWuq9ytL1/tl/FanvZI9LXu2RfffXVG2+8YW5uLhAITExMyKshBd966634+Pj6+nr1mkbaA9x5t6rPYw3DDHfObaND0TTNVgoCPWEeF9fzTeIPP/zw7Nmz9fX1+txoJxRFZWVlsXXP2BB6gLmHyoX/lewea9A/7pzbRgf3BeBfjKUc7dBBDwAA1yAPAABDd/ny5ZiYGM2q08uXL9dcwdfX18rKytTUdPLkyYWFhWy1kxCiUqlSUlK6LSvV3t6elJTk7u4uEAhsbGw8PT0rKiqMNPJXX321d+9e5M3DA/IAIMQ4y9EOLvSAwdq5c2daWtqWLVvUVadHjBhx/PjxCxcuqNe5dOnS2bNn/f39S0pKZsyYwVZTS0tL33nnnejoaLlc3nVpWFjY0aNHT5w4IZfL79y54+bm9vLlSyONHBAQIBQKfXx8mKE1wLix/HwCdEfL5wSHH8L5Z8f08CyVXC738vJiPZSWx3r37t2vv/66QqFQz3Fzcztx4oSJiYmTk1NDQ4N6fl5e3oIFCwbWmEFRVFS0cOHC48ePT5s2berUqZ2Wnjp1iqKoW7duDafIMpnMy8urvb1dm23hOUGDhesBANwyiEWQh7qecllZ2fbt2+Pi4phRs9SkUmlUVNSDBw8++eSTodt6f02dOjU7O3vp0qVmZmZdlx46dGjGjBlTpkwZTpFjY2OLiopSU1MHsGkwHMgDAIwPPUhFkHuvttzfesrffPONtbV1YmLiYO1mWloaTdMBAQFdFyUkJLz++uuff/755cuX+9tFGRkZFhYW5ubmubm577//vrW19ejRo0+dOqX+rFKp3LFjh7Ozs0gkeuONN5g/ZHXR1tZ27dq1adOm6RjH0CJLJJJ58+alpqbSeAvAmCEPADA+sbGxMTExW7dura2tvXLlSnV19dy5c588eUIISUtL03wZLz09PS4uTj2Zmprq7+/PFEEuKyuTyWQRERFyuXzdunUVFRWFhYUdHR3vvvtudXV1f0ORV29bqFSqwdrNCxcujB8/3tzcvOsikUj0xRdfmJiYrFq1qrm5uesKvXTRmjVr1q9fr1AorKyssrKyysvLXV1dV61apR7iafPmzfv27UtJSXn06JG/v/+SJUs0h5IcgIcPH7a1td24ccPb25vJtyZOnJienq77zyfrkadPn/7gwYPi4mIdNwcsQh4AYGQGvQhyT9WW+8vPz6+xsXH79u0Da0Ynzc3N9+/fd3Nz62kFLy+v9evXV1RUbN68udMiLbtIKpVaW1vb2dmFh4c3NzdXVVURQlpaWjIyMoKCgoKDg21sbLZt28bn8wfWIWrMs3V2dnaJiYklJSVPnjwJDAxcu3btyZMndQlrCJE9PDwIIbdv39Zxc8Ai5AEARmZIiyBrVltmV21tLU3T3V4MUEtISBg/fnx6evrVq1c15/e3iwQCASGEuR5w9+5duVzu6enJLBKJRA4ODjp2CHP3ffLkyVKp1NbWViwWx8XFicXiAaduhhOZOUDMhRYwUsgDAIzMUBdBVldbZldLSwt59WvUE6FQmJmZSVHUypUrFQqFer4uXcTcZdi2bRv1SmVlZbfv1GnP0dGREMI8V8EQCAQuLi7l5eW6hDWEyMzo3czBAiOFPADAyAxpEWTNasvsYn5g+hypxsvLKzo6urS0dNeuXeqZunSRnZ0dISQlJUXzxaqCgoIB7IKapaWlh4fHTz/9pDmzo6NDLBbrEtYQIre1tZFXBwuMFPIAACMzpEWQNast6xhKR6NGjaIo6sWLF32uuWvXrgkTJty8eVM9p781pjWNGTNGKBQWFRUNrNk9CQsLu3nz5r1795hJuVxeWVk5sJf9DCoyc4Ds7e113xywBXkAgJEZ9CLIPVVb/v/s3XtcE1feP/AzkJCEkHARROQOURHFW7UV1LrUXVzl8YKI4q3V2pZabUS8ICoWEVHURR4sbOvlx7qiAgrFropatdS6tW67SkV8ahEvgDdABMJNIMzvj3k1m40IEUgmOJ/3X82ZOWfOHKfJl5k55/uqTeXk5HTjvEFTU1M3N7fS0lJtBiQlJcXY2Fi9pMMc0+20tmjRoiNHjiQnJ9fU1CiVytLS0kePHhFCgoODbW1tO7ducVhYmLOz88KFC4uLi58+fRoeHt7Q0KB6w7Entsxg/oG6JewA1uh11SLQDtYT5Cwt11zrxiTI7WdbfqWmTp06JZFIYmJitDlTbf6t5XI5n8+vr69nPmZlZTHTB6ytrZctW6ax8+rVq9XXE2xniJKSkpi32/r161dUVLRnzx6pVEoIcXZ2/u2332iafv78eXh4uJOTE4/Hs7GxCQwMLCgooGk6ICCAELJx48Y2e3v58uUxY8Ywj9UJIX369PHx8fnuu+9UO5SUlMyZM8fS0lIgELz55ps5OTmqTT2xZYa/v7+9vX1ra2ub7avDeoIGC/8qhghxAGfp/7syJCTEyspKn0dkaPNvXVhYyOPxDh48qJ8udUipVI4bN27//v1omVFRUSEUCnfu3KnNzogDDBaeCwBwncFmjZPJZNHR0dHR0dpnzdEdpVKZnZ2tUCiCg4PRMiMqKmrYsGFyuVwXjYPeIA4AAMMVERERFBQUHByszQuDOpWbm5uZmZmTk9P+kgYcaZkQEh8fn5eXd+rUKT6f3+2Ngz4hDgDgrh6RbXnLli1yuXzr1q3sdmPChAmHDh1SZVvgeMvHjx9//vx5bm6upaVltzcOesZjuwMAwJrY2NjY2Fi2e9ExPz8/Pz8/tnsB/zFt2rRp06ax3QvoHrgfAAAAwF2IAwAAALgLcQAAAAB3IQ4AAADgLsQBAAAA3EXRNM12H0BTUFCQwU7iAgDoNPziGCDEAYbo8uXLJSUlbPcCOGH27NmhoaHe3t5sdwQ4YdasWWx3ATQhDgDgNIqi0tPT8e0MwFl4PwAAAIC7EAcAAABwF+IAAAAA7kIcAAAAwF2IAwAAALgLcQAAAAB3IQ4AAADgLsQBAAAA3IU4AAAAgLsQBwAAAHAX4gAAAADuQhwAAADAXYgDAAAAuAtxAAAAAHchDgAAAOAuxAEAAADchTgAAACAuxAHAAAAcBfiAAAAAO5CHAAAAMBdiAMAAAC4C3EAAAAAdyEOAAAA4C7EAQAAANyFOAAAAIC7EAcAAABwF+IAAAAA7kIcAAAAwF2IAwAAALgLcQAAAAB3IQ4AAADgLsQBAAAA3MVjuwMAoFdHjhxRKBTqJefOnauqqlJ9DAgIsLGx0Xu/AIAdFE3TbPcBAPRn4cKFBw4c4PP5zEfmG4CiKEKIUqk0MzMrKysTCARsdhEA9AjPBQC4Zc6cOYSQ5t+1tLS0tLQw/21sbBwUFIQgAIBTcD8AgFtaWlpsbW0rKyvb3Hr+/Pl33nlHz10CABbhfgAAt/B4vDlz5qieC6iztrYeP368/rsEACxCHADAOXPmzGlubtYo5PP5CxYsMDY2ZqVLAMAWPBcA4Byapp2cnEpLSzXK//Wvf40aNYqVLgEAW3A/AIBzKIqaP3++xqMBR0fHkSNHstUlAGAL4gAALtJ4NMDn8xcuXMjMHgQATsFzAQCO8vDwuHXrlurjjRs3Bg0axGJ/AIAVuB8AwFELFixQPRrw9PREEADATYgDADhq/vz5LS0thBA+n//ee++x3R0AYAeeCwBw18iRI//9739TFHXv3j0nJye2uwMALMD9AADuevfddwkhb731FoIAAM5CvkF2xMfHX758me1eANc1NjZSFPX8+fOgoCC2+wJAjh49ynYXuAj3A9hx+fLlH3/8ke1e9Aw//vgjxopRWlp67NixbmxQKBTa2to6ODh0Y5vd4tixYy8ucwSvsW6/tkF7eD+AHcyfXwh+tYGxUsnIyJg9e3b3/j97+/ZtmUzWjQ12C4qi0tPTZ82axXZHQE90cW2DlnA/AIDTDDAIAAB9QhwAAADAXYgDAAAAuAtxAAAAAHchDgAAAOAuxAEAr7lTp06Zm5v/4x//YLsjunLu3LmIiIjMzEw3NzeKoiiKWrBggfoOfn5+EonE2Nh40KBBV69eZaufhJDW1tZdu3b5+Pi8uKm5uTk2NlYmk5mYmFhYpiS+QAAAIABJREFUWAwePPjevXs9tOWvv/46Li5OqVRqfxRgEeIAgNfc6z0X67PPPktMTFy3bl1gYOCdO3fc3d179eqVmpp68uRJ1T5nz549evTolClTCgoKRowYwVZXCwsL33777bCwsPr6+he3zp49++9///uhQ4fq6+v/7//+z93dvba2toe2PHXqVKFQOGHChKqqKi0PBCzCeoIArzl/f//q6mo9HKihoWHChAk//PCDHo7F2LZtW1pa2i+//CIUClWFiYmJCxYsCAkJKSgoMDc311tn2vfLL79ER0cvWbKkrq7uxcgsLS0tOzv7l19+8fLyIoTY2dkdP368R7e8fPnyO3fuTJ48+eLFizwefmgMGu4HAED32L9/f1lZmd4Od/v27cjIyE2bNqkHAYQQHx+f0NDQBw8erFq1Sm+d6dDQoUMzMzPnzZsnEAhe3PrXv/51xIgRzA/qa9NyVFRUXl5eQkJCJw4N+oQ4AOB1dunSJScnJ4qiPv/8c0JIcnKyWCw2NTU9fvz4pEmTpFKpg4PDkSNHmJ0TExOFQmHv3r0//vhjOzs7oVDo4+Nz5coVZqtcLjcxMenTpw/zcenSpWKxmKKoiooKQkhoaOjKlSuLioooimLWJjp9+rRUKt2yZYuOTi0xMZGm6alTp764KSYmpn///vv27Tt37lybdWmajo+PHzhwoEAgsLS0nD59+q+//spsan+ICCFKpXLjxo1OTk4ikWjIkCHp6eldPJGmpqYff/xx2LBhXWzH0Fq2tLQcP358QkLC6/1k6jWAOADgdTZ27Fj1G/WffPLJihUrGhoaJBJJenp6UVGRm5vbhx9+2NzcTAiRy+ULFy6sr69fvnz5vXv3rl692tLS8qc//amkpIQQkpiYqL7Qb1JS0qZNm1QfExISpkyZ4u7uTtP07du3CSHMa2Ktra06OrWTJ08OGDDA1NT0xU0ikehvf/ubkZHRhx9+WFdX9+IOUVFRERER69evLysru3jxYklJybhx4548eUI6GiJCyNq1a7dv375r165Hjx5NmTJl7ty5P//8c1dO5OHDh01NTf/+9799fX2Z8GvgwIFJSUld//lkveXhw4c/ePDgl19+6eLhQKcQBwBwkY+Pj1QqtbGxCQ4OrqurKy4uVm3i8XjMH8qenp7JyckKhSIlJaUTh/D396+pqYmMjOy+Xv9HXV3d3bt33d3dX7aDt7f3ihUr7t27t3btWo1NDQ0N8fHxM2bMmD9/vrm5uZeX1xdffFFRUbFnzx713docosbGxuTk5ICAgMDAQAsLiw0bNvD5/M6Njwrzbp2Njc2WLVsKCgqePHkyffr0ZcuWHT58uCvNGkLL/fr1I4Tk5+d38XCgU4gDADjNxMSEEKL6Y1fDyJEjTU1NVffMDUdZWRlN023eDFCJiYkZMGBAUlLSpUuX1MsLCgpqa2tHjhypKhk1apSJiYnqCYgG9SG6detWfX394MGDmU0ikahPnz5dHB/m6fugQYN8fHysrKzMzc03bdpkbm6uEZf0xJaZfyDmRgsYLMQBANAegUBQXl7Odi80NTY2kt9/jV5GKBSmpKRQFPX+++83NDSoypnJbGZmZuo7W1hYKBSKDo/LPGXYsGED9bv79++3OadOe3Z2doQQ5jULhomJibOzc1FRUVeaNYSWRSIR+f0fCwwW4gAAeKnm5uaqqioHBwe2O6KJ+YHpcKUab2/vsLCwwsLCzZs3qwotLCwIIRq/+lqepo2NDSFk165dtJrLly934hRUzMzM+vXrd/PmTfXClpaWrk96ZL3lpqYm8vs/FhgsxAEA8FK5ubk0TY8ePZr5yOPxXvYEQc969+5NUZQ26yJs3rzZw8Pj2rVrqpLBgwebmZmpv9x35cqVpqamN954o8PWHB0dhUJhXl5e57r9MrNnz7527dqdO3eYj/X19ffv3+/cZD+Dapn5B7K1te364UB3EAcAwH9pbW199uxZS0vL9evXQ0NDnZycFi5cyGySyWSVlZXZ2dnNzc3l5eX3799Xr2hlZfXw4cN79+4pFIrm5uacnBzdzRs0NTV1c3MrLS3tcE/m6YCxsbF6ycqVK7OyslJTU2tqavLz85csWWJnZxcSEqJNa4sWLTpy5EhycnJNTY1SqSwtLX306BEhJDg42NbWtnPrFoeFhTk7Oy9cuLC4uPjp06fh4eENDQ2qNxx7YssM5h+oW8IO0CEa2DBz5syZM2ey3YueAWOlwkxVf6Uqu3fvZmb8m5qaTp06NSkpiXl1q1+/fkVFRXv27JFKpYQQZ2fn3377jabpkJAQPp9vb2/P4/GkUun06dOLiopUrT19+tTX11coFLq6un766aerV68mhMhksuLiYpqmr1696uzsLBKJxo4d+/jx41OnTkkkkpiYmE6cKSEkPT29/X3kcjmfz6+vr2c+ZmVlMdMHrK2tly1bprHz6tWrp02bpvrY2tq6Y8eOfv368fl8S0vLgICAW7duMZs6HKLnz5+Hh4c7OTnxeDwbG5vAwMCCggKapgMCAgghGzdubLO3ly9fHjNmDPNYnRDSp08fHx+f7777TrVDSUnJnDlzLC0tBQLBm2++mZOTo9rUE1tm+Pv729vbt7a2ttm+uk5c29BdMO7swG+b9jBWKnr4rgwJCbGystLpIbShTRxQWFjI4/EOHjyony51SKlUjhs3bv/+/WiZUVFRIRQKd+7cqc3OiANYhOcCAPBfekqaOJlMFh0dHR0drX3WHN1RKpXZ2dkKhSI4OBgtM6KiooYNGyaXy3XROHQjxAEA0FNFREQEBQUFBwfrJ5FSO3JzczMzM3Nyctpf0oAjLRNC4uPj8/LyTp06xefzu71x6F6IA+C/REdHe3p6SqVSgUAgk8nWrFnzsj+2PvjgA4lEQlHUK7073U4u825x69atTz/9dNCgQRKJhMfjmZub9+/f39/fv4szu7TRztBlZma6ublRakxMTHr37v2HP/xhx44dz54903XftLRu3bqUlJTq6mpXV9djx46x3R2tbNmyRS6Xb926ld1uTJgw4dChQ6rkCxxv+fjx48+fP8/NzbW0tOz2xqH7sf1ggqMM9pn3+PHjk5KSnj59WlNTk56ezufz//znP79sZyb5yrVr17Rs/LfffhszZgwhZOjQodp3Sfux2rdvH5/Pf/vtt0+fPv3s2bPGxsaioqK0tDQfH58vv/xS+yN2TodD5+7ubm5uTtM080L+t99+u3DhQoqi7OzsfvrpJ20OwZ1nqESL9wPgdcKda9sAIS00/BczM7OQkBBmktWsWbMyMzMzMjJKSkocHR272HL7ucy77scffwwJCRk/fvyZM2dU+c7d3Nzc3NwsLCwKCwu7/YgatB86iqIsLCz+8Ic//OEPf/D39589e7a/v/9vv/3W9dVdAABeFZ4LwH85ceKE+kxra2trQsjLlk2lKEr7ltvPZd51MTExSqVy69atqiBAZeLEicuWLdPFQdW90tCpzJw5c+HChWVlZV988YVu+wcA0BbEAYbu4MGDI0eOFAqFYrHYxcWFWR6V7mz29IEDB1IUZWRk9MYbbzA/UWvWrDE3NxcKhX/7299ePPqDBw9EIpGrqyvzkabpHTt2DBgwQCAQmJubM9PHDUFTU9P58+d79er15ptvtr8nW0PXDmaVnpycnFc4YQCA7sLuYwnO0vKZ965duwghW7duffr0aWVl5Zdffjlv3jyapjdu3GhiYnLw4MGqqqrr16+PGDHC2tr68ePHTK3169cTQs6fP19dXV1WVjZu3DixWNzU1ETTdEtLi4uLi5OTU0tLi+ooK1as0FgvnVFXVyeRSORyuapk/fr1FEX95S9/efbsWX19fVJSEnmV9wMYb731Vre/H/Dbb78RQkaPHt1ha2wNHa32foCGmpoaQoijo2OHnefOM1SC9wM4hjvXtgHC/QDD1dzcvGnTJl9f37Vr11pZWVlaWi5evHjUqFFdyZ5ubGy8fPny4uLirKwsZrf6+vrMzMz333//xQ7Exsba2dnFxMQwHxsaGnbt2vXHP/4xLCzMwsJCJBJZWVnpeAy0xfyUamSQexFbQ9c+ZtqFNsnuAAC6HeIAw3X9+vWqqqqJEyeqSpifoq5kTyeEfPDBB+bm5gkJCczH1NTU6dOnMyunqsvKysrIyDhz5oxEImFKbt++XV9fP2HChG46v+7ERAAdPoxna+jax7w4+WI7L0NxACFk9uzZbPcC9Gf27NlaXv/Q7TBfwHAxf+MyOVLVdSV7OlPxo48+2rFjx7/+9a8333zzr3/964szxdPS0uLj43Nzc/v27asqZFKGMHlXDY2Li4tQKGSeDrSDraFrH9NtDw8PLfdn7qC+3mbPnh0aGurt7c12R0BPLl++rIqwQc8QBxgu5oekoqJCo7wr2dMZcrk8ISFh165dS5YscXR0ZLKzqOzevfvMmTMXLlzQ+L0UCoWEkOfPn7/ieeiDQCCYOHHi8ePH//nPfzJLFKirrKxcs2bNvn372Bq69p0+fZoQMmnSJC33nzVrlvaN91CzZ8/29vbmwpmCCuIAtuC5gOFycXGxsrI6e/asRnlXsqczHBwcZs2adezYscjIyNDQUFU5TdPh4eH5+fnZ2dkv/pINHjzYyMjou+++69TZ6FxUVJRAIAgLC2toaNDYdOPGDWYyIVtD147Hjx/v2rXLwcGhzfcMAAB0DXGA4RIIBOvWrbt48aJcLn/w4EFra6tCobh582ZXsqerrFy5sqWl5dmzZ++8846q8ObNm9u3b9+7dy+fz1d/dLdz505CCJNi9dixY/v376+pqbl+/brG63XsGjZs2KFDh27cuDFu3LhTp05VV1c3NzffvXt37969ixcvZhY5Z2voVGiarq2tZdKwlpeXp6enjxkzxtjYODs7W/v3AwAAuhOrsxW4S/u1cj///HMvLy+hUCgUCocPH56UlER3LXu6iq+v7759+9RL8vPz27xIduzYweygUCg++OCDXr16mZmZjR07duPGjYQQBweHX375pcMT6TCXedfHiqbp4uLiVatWeXl5mZmZGRsbW1hYDB8+fPHixf/85z+ZHVgZuq+//nrIkCGmpqYmJiZGRkbk9yUF33zzzejo6KdPn2p5dtyZW0Uwb5BjuHNtGyCK1sEKr9ChoKAgQsjRo0fZ7kgPgLFSycjImD17Nhf+n6UoKj09He8HcAd3rm0DhOcCAAAA3IU4ALrBr7/+2s7M4ODgYLY7CNx17ty5iIgI9dTPCxYsUN/Bz89PIpEYGxsPGjTo6tWrbPXz8OHDo0aNkkgkzs7OixYtevz4sR7qxsXFeXh4iEQisVjs4eERGRnJTFdmtJNK++uvv46Li1Mqldp3EgwXy88luMpg8w4bIIyVCneeoZJuej9g48aNU6ZMqampYT66u7v36tWLEHLixAn13XJycqZNm9b1w3VaWloaISQuLq6qquratWtubm7Dhg1rbm7WdV1/f/+dO3eWlZUpFIqMjAw+n/+nP/1JtbX9VNoJCQnjx49/9uzZq55sm7hzbRsg3A8AgP9oaGjw8fExtKY6Z9u2bWlpaRkZGeoLOyYmJhoZGYWEhFRXV7PYNw1ffvll3759V69ebW5uPmzYsLCwsLy8vJctc9mNdU1MTJYuXWpjY2NmZhYUFDR9+vRvvvnm0aNHzFYmlbaVlZVEIpk1a1ZAQMDp06dLSkqYrcuXLx86dOjkyZNbWlo6d9ZgIBAHAMB/7N+/v6yszNCa6oTbt29HRkZu2rSJWf9KxcfHJzQ09MGDB6tWrWKrby8qKSmxs7Ojfk/k7ejoSAi5f/++rutmZWWpj4+9vT0hRHXzv8NU2lFRUXl5eVj/p6dDHADwuqFfnltZLpebmJj06dOH+bh06VKxWExRFLNsZWho6MqVK4uKiiiKkslkiYmJQqGwd+/eH3/8sZ2dnVAo9PHxUf2h+UpNEUJOnz4tlUq3bNmin0FITEykaXrq1KkvboqJienfv/++ffvOnTvXZt12BrD95NSEEKVSuXHjRicnJ5FINGTIEC0XgXZzc1OPmZgH/G5ubrquq6GwsNDCwsLZ2bnNrS+m0ra0tBw/fnxCQgKN9/x7NHYfS3AWnnlrD2OlouUz1PZzK8+bN8/W1la1844dOwgh5eXlzMfAwEB3d3fV1pCQELFYfPPmzcbGxoKCAuZltOLi4k40deLECYlEEh0drc2Zki6/H+Dm5ubp6alR6O7ufvfuXZqmf/jhByMjIxcXl9raWvqF9wM6nZyapulVq1YJBIJjx449e/Zs3bp1RkZGP/30U4e9zc3N5fP5iYmJNTU1N27cGDhw4MSJE7U8067UZTQ1NZWWlu7evVsgEBw8eLDNfdpMpU3TdEREBHn15OMvwvsBLML9AIDXipa5lbXH4/GYv4w9PT2Tk5MVCkVKSkon2vH396+pqYmMjOxcN15JXV3d3bt3NbI/qPP29l6xYsW9e/fWrl2rsakryakbGxuTk5MDAgICAwMtLCw2bNjA5/O1Ga7x48eHh4fL5XKpVDp48GCFQrFv3z4tT7YrdRmOjo4ODg5RUVHbt29/Wd6/l6XS7tevHyHkZetoQY+AOADgtfKquZVfyciRI01NTVU3yQ1WWVkZTdPM6pAvExMTM2DAgKSkpEuXLqmXdyU59a1bt+rr6wcPHsxsEolEffr00Wa41q9fv2fPnvPnz9fW1t65c8fHx8fb21v1Rp7u6jJKSkrKysoOHz584MCB4cOHv/hWRzuptJlBfvLkifaHA0ODOADgtdLF3ModEggE5eXl3dKU7jQ2NhJCBAJBO/sIhcKUlBSKot5//3313FRdGcC6ujpCyIYNG1SLZ9y/f1/9xbo2PXr0KC4u7qOPPnrnnXfEYrGrq+vevXsfPnzIPGfRXV0VPp9vY2Pj5+eXlpZWUFAQGxurvjUtLW3btm25ubkuLi4v1hWJROT3AYceCnEAwGul67mV29Hc3NxdTekU8+PU4So33t7eYWFhhYWFmzdvVhV2ZQBtbGwIIbt27VJ/+Hr58uX2axUWFiqVSibPOEMqlVpZWRUUFHR4xK7UfZFMJjM2Nlavu3v37tTU1AsXLqgfQl1TUxP5fcChh0IcAPBa6TC3Mo/HY25id0Jubi5N06NHj+56UzrVu3dviqK0WSFg8+bNHh4e165dU5V0JTm1o6OjUCjMy8t7pd4yEYZq1j4hRKFQVFZWMjMAdVf36dOnc+fOVS9hogqmLq1dKm1mkG1tbTs8HBgsxAEAr5UOcyvLZLLKysrs7Ozm5uby8nKNieZWVlYPHz68d++eQqFgfuNbW1ufPXvW0tJy/fr10NBQJyenhQsXdqKpnJwcvc0bNDU1dXNzKy0t7XBP5umA+iz5riSnFgqFixYtOnLkSHJyck1NjVKpLC0tZX6kg4ODbW1t21y32NXV1dfXd+/evRcvXmxoaCgpKWGOtXjxYmYHHdUVi8Vnz569cOFCTU1Nc3PztWvX3nvvPbFYHBYWRrROpc0MspeXV4eDA4aLlVkKgLlw2sNYqWg5t6qd3Mo0TT99+tTX11coFLq6un766aerV68mhMhkMmY24NWrV52dnUUi0dixYx8/fhwSEsLn8+3t7Xk8nlQqnT59elFRUeeaOnXqlEQiiYmJ0eZMSZfnDcrlcj6fX19fz3zMyspipg9YW1svW7ZMY+fVq1erzxvsSnLq58+fh4eHOzk58Xg8GxubwMDAgoICmqYDAgIIIRs3bmyztxUVFaGhoTKZTCAQmJmZjRkz5quvvlJt1V3dqVOnurq6mpmZCQQCd3f34ODg/Px8ZlOHWcgZ/v7+9vb2ra2tbbavPcwbZBHGnR34bdMexkpF/9+VzLKy+jwio+txQGFhIY/He9lseP1TKpXjxo3bv39/D6rboYqKCqFQuHPnzq43hTiARXguAADt6aE55WQyWXR0dHR0tGqVXBYplcrs7GyFQtGJ3Jts1dVGVFTUsGHD5HK5LhoHvUEcAACvp4iIiKCgoODgYNZTCuXm5mZmZubk5LS/pIFB1e1QfHx8Xl7eqVOn+Hx+tzcO+oQ4AADatm7dupSUlOrqaldX12PHjrHdnc7YsmWLXC7funUru92YMGHCoUOHVLkYekTd9h0/fvz58+e5ubmWlpbd3jjoGY/tDgCAgYqNjdVYUqYn8vPz8/PzY7sXr5tp06ZNmzaN7V5A98D9AAAAAO5CHAAAAMBdiAMAAAC4C3EAAAAAd+E9QdaUlpZmZGSw3YsegFm4FGNFCGEy1nBkKDpMzwOvE/xzs4iiaZrtPnBRUFBQD52IBQCgI/g9YgXiAABOoygqPT191qxZbHcEANiB9wMAAAC4C3EAAAAAdyEOAAAA4C7EAQAAANyFOAAAAIC7EAcAAABwF+IAAAAA7kIcAAAAwF2IAwAAALgLcQAAAAB3IQ4AAADgLsQBAAAA3IU4AAAAgLsQBwAAAHAX4gAAAADuQhwAAADAXYgDAAAAuAtxAAAAAHchDgAAAOAuxAEAAADchTgAAACAuxAHAAAAcBfiAAAAAO5CHAAAAMBdiAMAAAC4C3EAAAAAdyEOAAAA4C7EAQAAANyFOAAAAIC7EAcAAABwF+IAAAAA7kIcAAAAwF2IAwAAALiLomma7T4AgP6EhITcunVL9fHq1auurq6WlpbMR2Nj4wMHDjg4OLDUOwDQNx7bHQAAvbK1td2zZ496yfXr11X/7ebmhiAAgFPwXACAW+bOnfuyTSYmJgsXLtRjXwCAfXguAMA5gwcPvnnzZpv/79+6dat///767xIAsAX3AwA459133zU2NtYopChq6NChCAIAuAZxAADnzJkzR6lUahQaGxu/9957rPQHAFiE5wIAXOTj43PlypXW1lZVCUVRJSUl9vb2LPYKAPQP9wMAuGjBggUURak+GhkZjR07FkEAAAchDgDgoqCgIPWPFEW9++67bHUGAFiEOACAi6ytrSdMmKB6W5CiqICAAHa7BACsQBwAwFHz589nXg8yNjaeOHFir1692O4RALAAcQAAR82YMcPExIQQQtP0/Pnz2e4OALADcQAAR4nF4v/5n/8hhJiYmEyZMoXt7gAAOxAHAHDXvHnzCCEBAQFisZjtvgAAS2i2zZw5k+0xAAAAYAfbP8K0QeQbHD169IoVK9juBbw+Zs+eHRoa6u3tzXZHeoDU1NTg4GAezyC+Crrd5cuXExIS0tPT2e6IzuGa74mY65PtXhjAeoLMPOajR4+y2w14nVAUlZ6ePmvWLLY70gM0NjYKhUK2e6ErGRkZs2fPZv1bTg9wzfdEBnJ94v0AAE57jYMAANAG4gAAAADuQhwAAADAXYgDAAAAuAtxAAAAAHchDgAA+C+nTp0yNzf/xz/+wXZHdOXcuXMRERGZmZlubm4URVEUtWDBAvUd/Pz8JBKJsbHxoEGDrl69ylY/Dx8+PGrUKIlE4uzsvGjRosePH+uhblxcnIeHh0gkEovFHh4ekZGRNTU1qq3R0dGenp5SqVQgEMhksjVr1tTW1jKbvv7667i4OKVSqX0nDQTiAACA/8L6PC6d+uyzzxITE9etWxcYGHjnzh13d/devXqlpqaePHlStc/Zs2ePHj06ZcqUgoKCESNGsNLP9PT0efPmBQUFlZaWHj9+/OLFi5MmTWppadF13e+///7DDz8sLi5+8uTJ5s2b4+Li1Be7u3DhwrJly+7du1dRUREbG5uQkKBK4T116lShUDhhwoSqqqpOnC+b2F3GiKbpmTNnzpw5k+1ewGuFEJKens52L4B9zApCbPfiperr6729vbulKS2v+a1bt/bv37+hoUFV4u7ufujQISMjI3t7+6qqKlV5Tk7OtGnTuqVvnePr69u3b9/W1lbm4+eff04IuXTpkq7rBgQEqI8P8zP/8OFD5qO/v39LS4tqK7NgQ3FxsapELpd7e3s3NzdrcywDuT5xPwAAgB379+8vKyvT2+Fu374dGRm5adMmjUUjfHx8QkNDHzx4sGrVKr11pkMlJSV2dnYURTEfHR0dCSH379/Xdd2srCz18bG3tyeEqG7+nzhxwtjYWLXV2tqaEFJfX68qiYqKysvLM4RVArWHOAAA4D8uXbrk5OREURTzR2RycrJYLDY1NT1+/PikSZOkUqmDg8ORI0eYnRMTE4VCYe/evT/++GM7OzuhUOjj43PlyhVmq1wuNzEx6dOnD/Nx6dKlYrGYoqiKigpCSGho6MqVK4uKiiiKkslkhJDTp09LpdItW7bo6NQSExNpmp46deqLm2JiYvr3779v375z5861WZem6fj4+IEDBwoEAktLy+nTp//666/MpvaHiBCiVCo3btzo5OQkEomGDBmi5TLPbm5u6kES84Dfzc1N13U1FBYWWlhYODs7t7n1wYMHIpHI1dVVVWJpaTl+/PiEhAS6Bz1dYvl+BJ4LgA4QPBcAmqY7e9+1pKSEELJ7927m4/r16wkh58+fr66uLisrGzdunFgsbmpqYraGhISIxeKbN282NjYWFBQw76apbhTPmzfP1tZW1fKOHTsIIeXl5czHwMBAd3d31dYTJ05IJJLo6OhOnKk217ybm5unp6dGobu7+927d2ma/uGHH4yMjFxcXGpra+kXngts3LjRxMTk4MGDVVVV169fHzFihLW19ePHj5mt7Q/RqlWrBALBsWPHnj17tm7dOiMjo59++qnDM8rNzeXz+YmJiTU1NTdu3Bg4cODEiRO1HI2u1GU0NTWVlpbu3r1bIBAcPHiwzX3q6uokEolcLtcoj4iIIIRcu3atw6PguQAAQI/h4+MjlUptbGyCg4Pr6uqKi4tVm3g8HvOHsqenZ3JyskKhSElJ6cQh/P39a2pqIiMju6/X/1FXV3f37l13d/eX7eDt7b1ixYp79+6tXbtWY1NDQ0N8fPyMGTPmz59vbm7u5eX1xRdfVFRU7NmzR323NoeosbExOTk5ICAgMDDQwsJiw4YZI2ctAAAgAElEQVQNfD5fm/EZP358eHi4XC6XSqWDBw9WKBT79u3T8mS7Upfh6Ojo4OAQFRW1ffv22bNnt7lPbGysnZ1dTEyMRnm/fv0IIfn5+a90RBYhDgAAeAUmJiaEkObm5ja3jhw50tTUVHXP3HCUlZXRNG1qatrOPjExMQMGDEhKSrp06ZJ6eUFBQW1t7ciRI1Ulo0aNMjExUT0B0aA+RLdu3aqvrx88eDCzSSQS9enTR5vxWb9+/Z49e86fP19bW3vnzh0fHx9vb2/mVo1O6zJKSkrKysoOHz584MCB4cOHv/gaR1ZWVkZGxpkzZyQSicYmZpCfPHmi/eHYhTgAAKA7CQSC8vJytnuhqbGxkRAiEAja2UcoFKakpFAU9f777zc0NKjKmYlwZmZm6jtbWFgoFIoOj1tXV0cI2bBhA/W7+/fvq79Y16ZHjx7FxcV99NFH77zzjlgsdnV13bt378OHD5kHK7qrq8Ln821sbPz8/NLS0goKCmJjY9W3pqWlbdu2LTc318XF5cW6IpGI/D7gPQLiAACAbtPc3FxVVeXg4MB2RzQxP04drnLj7e0dFhZWWFi4efNmVaGFhQUhRONXX8vTtLGxIYTs2rVL/YH05cuX269VWFioVCr79u2rKpFKpVZWVgUFBR0esSt1XySTyYyNjdXr7t69OzU19cKFC+qHUNfU1ER+H/AeAXEAAEC3yc3NpWl69OjRzEcej/eyJwh61rt3b4qiqqurO9xz8+bNHh4e165dU5UMHjzYzMzs559/VpVcuXKlqanpjTfe6LA1R0dHoVCYl5f3Sr1lIoxHjx6pShQKRWVlJTMDUHd1nz59OnfuXPUSJqpg6tI0HR4enp+fn52drXF3RB0zyLa2th0ezkAgDgAA6JLW1tZnz561tLRcv349NDTUyclp4cKFzCaZTFZZWZmdnd3c3FxeXq4xhd3Kyurhw4f37t1TKBTNzc05OTm6mzdoamrq5uZWWlra4Z7M0wH1WfJCoXDlypVZWVmpqak1NTX5+flLliyxs7MLCQnRprVFixYdOXIkOTm5pqZGqVSWlpYyP9LBwcG2trZtrlvs6urq6+u7d+/eixcvNjQ0lJSUMMdavHgxs4OO6orF4rNnz164cKGmpqa5ufnatWvvvfeeWCwOCwsjhNy8eXP79u179+7l8/mUmp07d6o3wgyyl5dXh4NjKFiZpaAO8wah2xHMGwSapjs1L2v37t3MjH9TU9OpU6cmJSUxr33169evqKhoz549UqmUEOLs7Pzbb7/RNB0SEsLn8+3t7Xk8nlQqnT59elFRkaq1p0+f+vr6CoVCV1fXTz/9dPXq1YQQmUzGTCy8evWqs7OzSCQaO3bs48ePT506JZFIYmJiOnGm2lzzcrmcz+fX19czH7OyspjpA9bW1suWLdPYefXq1erzBltbW3fs2NGvXz8+n29paRkQEHDr1i1mU4dD9Pz58/DwcCcnJx6PZ2NjExgYWFBQQNN0QEAAIWTjxo1t9raioiI0NFQmkwkEAjMzszFjxnz11VeqrbqrO3XqVFdXVzMzM4FA4O7uHhwcnJ+fz2x62RSAHTt2qLfg7+9vb2+vWs2wHQYyb5D9HiAOgG6HOAAYevieDQkJsbKy0ukhtKHNNV9YWMjj8V42G17/lErluHHj9u/f34PqdqiiokIoFO7cuVObnQ0kDsBzAQCALukpKeZkMll0dHR0dLRqlVwWKZXK7OxshUIRHBzcU+pqIyoqatiwYXK5XBeN60jPiANGjRplbGw8bNgwXTS+aNEioVBIUVQPmubRjp07dzIvBH3xxRdMSfcmUdVzStbW1tZdu3b5+Ph0b7PqGVcZPB7P2tr6j3/8Y1ZWVncdpf1Ly8Czvr5mFxIwIiIigoKCgoODtXlhUKdyc3MzMzNzcnLaX9LAoOp2KD4+Pi8v79SpU3w+v9sb152eEQf89NNPvr6+Omo8JSXFoLJrdNGqVat++OEH9RK6W5e57t7W2ldYWPj222+HhYV1ONv4VakyrpqbmzN3xsrLy9PT0x88eBAYGKjl+ucdav/SMvCsr6/ThaQ769atS0lJqa6udnV1PXbsGNvd0cqWLVvkcvnWrVvZ7caECRMOHTqkSr7QI+q27/jx48+fP8/NzbW0tOz2xnWqZ8QBDFXyKO01NDR0+5+SPY6/v391dfWUKVM6V11jDLvYmvZ++eWXtWvXLlmyREf3gTRYWlpOmDDhf//3fwkhGRkZHe7fjZdWYmKikZFRSEgI63+ita+HXkg6FRsb+/z5c5qm7969q56l3sD5+flt27aN7V68bqZNmxYREaE+z6Kn6ElxQCfutLxSWs9OxBlcoOfUqCpDhw7NzMycN29e+yugdS9mdTBm9bT2deOlZZhZX7sdWxcSALSvJ8UBt2/f9vDwEIvFIpFo3Lhx6itgf//9956enubm5kKh0MvL68yZM6SttJ6EkIMHD44cOVIoFIrFYhcXF9WaWUZGRidPnpw0aZK5ubmdnd3/+3//T5sudZhwk355ss7t27ebmppKJJKysrKVK1fa29svWbJELBYbGRm98cYbtra2fD5fLBaPGDFi3LhxzFocFhYWa9asaf+sNWgkUb19+zb1gm+++UbLMdRorf0T7HBwDND169cJIePHj1eV6OfS6krWV1xIANAlrMxSUKflvMEJEya4ubndvXu3ubn5xo0bb731llAoZCan0jR99OjRqKioysrKp0+fjh49ulevXky5RlrPXbt2EUK2bt369OnTysrKL7/8ct68ebRa0syqqqrKysrJkycLBIK6ujpt+t9+wk1tknUuX7589+7dM2bM+L//+7/PPvuMEHLlypW6urqKioo///nPhJCTJ0+Wl5fX1dUx76Dm5eW1f9aFhYWEkL/+9a/MR/UkqoWFhWvXrmVO7dGjR5aWlj4+PkqlUvsx1EjJ2pVspFp66623hg4d+kpViHbzBtXfD6ivr8/JyXF2dvbz82PyrjJ0fWl1Y9ZXXEgvMpB5WXqg5TUPBsVArk/2e6B9HKD+Y8D83bZq1aoX92QSQjDJtdS/epqamiwsLHx9fVV7trS0JCQk0L9/yzQ0NDDlf//73wkhN27c0Kb/GnWTkpIIIbdv36Zpur6+3szMLDg4WLXzv/71L0KIKr+4Rl2appmvb4VCwXw8cOAAIUS1igVTPS0trf2zbufrW11AQIBQKPz111/bb62dr+9XPUH1wdGeTuMAjbDYy8vrwIEDzBPfF+ni0lLFATRNr1y5khDCrOiiHgfgQur0hWQg37N6gDigJzKQ65PXmXsIBsDLy8vc3JyJBjQwrxG8OKP3+vXrVVVVEydOVJUYGxsvX778ZS10blVw9YSbr5qs82WttbS0dNixl531y2RkZHz11VdxcXEDBgzodGtdyUZqIMzNzZm3AVpaWp48eXL27Fm5XB4bG3vp0iVra2uNnXV9acXExJw4cSIpKUkj3zkuJA2veiFp8+Lna6DD5D1gaAzkn6ynxgGEED6fr/oiOHny5I4dOwoKCphFodvcv6amhvyeOEs/upKsUxvanHWbnj59+umnn44aNYr5A7TTren6BPWJx+PZ29svWrRIqVR++OGHW7du/ctf/kL0e2kx67qPHTv2/fffj4uLU5XjQuoijbjqdZWQkJCQkMB2L6Dn6UnvCapraWmprKx0cnIihBQXFwcEBPTp0+fKlSvV1dXqX6DqmByRFRUVeutkV5J1dkjLs27T8uXLq6qq1FOJdK41nZ4gW5jsIDdv3iRsXFrdnvW1Q1y4kNi+7aoPBM8FeqDuWqqki3pqHPDtt9+2trYyS6zk5+c3Nzd/8sknbm5uzPJtbVZxcXGxsrI6e/as3jrZlWSdHdLyrF908uTJQ4cORUZGDho0iClZvXp151rT6Qmy5d///jchhLnLzcql1b1ZXzuECwmA43pSHNDU1FRdXd3S0nL16lW5XO7s7Mwk92TuCpw7d66xsbGwsFD9maJ6Wk8jI6N169ZdvHhRLpc/ePCgtbVVoVAwf/bpSFeSdXaonbNuR01Nzccffzxs2LC1a9cSQhobG3/++ee8vDwtx1DjNq9OT1BvGhoamMxgDx8+TElJ2bBhg7W19YoVKwhLl1b3Zn3tEC4kAK5j+76ItvMFUlJSfH19e/fuzePxevXqNWfOnPv376u2hoeHW1lZWVhYBAUFMTOS3d3di4uLNdJ60jT9+eefe3l5CYVCoVA4fPjwpKSkuLg4kUhEfk+amZqayqwK6eDg0OGUgQ4TbraTrFN1XEdHRyYDWEJCAtOai4vL999/v23bNnNzc0KIra3toUOH0tLSbG1tCSGWlpZHjhx52VmHhoYyu4nF4hkzZmgkUdXIk82YPHmylmO4YcMG9dbaP8EOB6d9ly9fHjNmjJ2dHdPJPn36+Pj4fPfddx1WpLW4R6rKuKpOIBD069fvk08+YXLCMnR3aXVX1ldcSO0wkPex9aDDax4MkIFcnxTN9irfQUFBhJCjR4+y2w14nVAUlZ6ePmvWLLY7AizLyMiYPXs2699yeoBrvicykOuzJz0XAAAAgO6FOKA9v/7664uLp6roKH01F2BgAQAMBOKA9nh4eLTzTCUtLY3tDvZUGFgAFp07dy4iIiIzM9PNzY0JvhcsWKC+g5+fn0QiMTY2HjRo0NWrV9nq5+HDh0eNGiWRSJydnRctWvT48WM91I2Li/Pw8BCJRGKx2MPDIzIyklkghBEdHe3p6SmVSgUCgUwmW7NmTW1tLbPp66+/jouL034NLsOBOAAAgEM+++yzxMTEdevWBQYG3rlzx93dvVevXqmpqSdPnlTtc/bs2aNHj06ZMqWgoICZnq1/6enp8+bNCwoKKi0tPX78+MWLFydNmqRaE1N3db///vsPP/ywuLj4yZMnmzdvjouLU88ofeHChWXLlt27d6+ioiI2NjYhIYF5xY0QMnXqVKFQOGHCBG0SlhoUxAEAAJ3X0NDg4+NjaE29zLZt29LS0jIyMiQSiaowMTHRyMgoJCSkurpap0d/JV9++WXfvn1Xr15tbm4+bNiwsLCwvLw8Lee1dqWuiYnJ0qVLbWxszMzMgoKCpk+f/s033zx69IjZamZmFhISYmVlJZFIZs2aFRAQcPr0aSZZBiFk+fLlQ4cOnTx5spYxh4FAHAAA0Hn79+8vKysztKbadPv27cjIyE2bNgmFQvVyHx+f0NDQBw8erFq1SndHf1UlJSV2dnaqpagcHR0JIffv39d13aysLPXxsbe3J4Sobv6fOHFCfW0PJgtJfX29qiQqKiovL69nLfCMOAAAuI6m6fj4+IEDBwoEAktLy+nTp//666/MJrlcbmJiwqx2QAhZunSpWCymKIpZRjo0NHTlypVFRUUURclkssTERKFQ2Lt3748//tjOzk4oFPr4+Kj+DH2lpgghp0+flkqlW7Zs6a7TTExMpGl66tSpL26KiYnp37//vn37zp0796pDlJycLBaLTU1Njx8/PmnSJKlU6uDgcOTIEVVdpVK5ceNGJycnkUg0ZMgQLRfTdXNzU4+KmAf8bm5uuq6robCw0MLCwtnZuc2tDx48EIlErq6uqhJLS8vx48cz6UY7cTh2dNtKBJ2l5TpCANojWFMFaJrWep2WjRs3mpiYHDx4sKqq6vr16yNGjLC2tmaWh6Jpet68eba2tqqdd+zYQQgpLy9nPmrkUw4JCRGLxTdv3mxsbCwoKGBeVVOtTPVKTZ04cUIikaiSL7dPm2vezc3N09NTo1CV+fqHH34wMjJycXGpra2l/zvzNd3REDGJoc+fP19dXV1WVjZu3DixWNzU1MRsXbVqlUAgOHbs2LNnz9atW2dkZPTTTz91eEa5ubl8Pj8xMbGmpubGjRsDBw6cOHGiNkPRxbqMpqam0tLS3bt3CwQCZnmuF9XV1UkkErlcrlEeERFBCLl27VqHRzGQdYRwPwAAOK2hoSE+Pn7GjBnz5883Nzf38vL64osvKioq9uzZ07kGeTwe83ezp6dncnKyQqFISUnpRDv+/v41NTWRkZGd64aGurq6u3fvvriMpoq3t/eKFSvu3bvHrBWtTssh8vHxkUqlNjY2wcHBdXV1xcXFhJDGxsbk5OSAgIDAwEALC4sNGzbw+XxtBmT8+PHh4eFyuVwqlQ4ePFihUOzbt0/Lk+1KXYajo6ODg0NUVNT27dtflq8yNjbWzs4uJiZGo7xfv36EkPz8/Fc6IosQBwAApxUUFNTW1o4cOVJVMmrUKBMTEy1fK2vfyJEjTU1NVbfQWVRWVkbTNLNC88vExMQMGDAgKSnp0qVL6uWvOkQmJiaEECaLxK1bt+rr6wcPHsxsEolEffr00WZA1q9fv2fPnvPnz9fW1t65c8fHx8fb21v1Rp7u6jJKSkrKysoOHz584MCB4cOHv/jeRlZWVkZGxpkzZ9TfuGQwg/zkyRPtD8cuxAEAwGnMLC8zMzP1QgsLC408yJ0mEAjKy8u7pamuaGxsZDrTzj5MjiuKot5///2GhgZVeVeGqK6ujhCyYcMG1UJh9+/fV3+xrk2PHj2Ki4v76KOP3nnnHbFY7Orqunfv3ocPHzJPUnRXV4XP59vY2Pj5+aWlpRUUFMTGxqpvTUtL27ZtW25urouLy4t1mXwfzID3CIgDAIDTLCwsCCEaP2lVVVUODg5db7y5ubm7muoi5sepw1VuvL29w8LCCgsLN2/erCrsyhDZ2NgQQnbt2qX+QPry5cvt1yosLFQqlX379lWVSKVSKyurgoKCDo/YlbovkslkxsbG6nV3796dmpp64cIF9UOoa2pqIr8PeI+AOAAAOG3w4MFmZmY///yzquTKlStNTU1vvPEG85HH42kkStZebm4uTdOjR4/uelNd1Lt3b4qitFkhYPPmzR4eHteuXVOVdDhE7XB0dBQKhXl5ea/UWybCUM3aJ4QoFIrKykpmBqDu6j59+nTu3LnqJUxUwdSlaTo8PDw/Pz87O1vj7og6ZpCZdJ09AuIAAOA0oVC4cuXKrKys1NTUmpqa/Pz8JUuW2NnZhYSEMDvIZLLKysrs7Ozm5uby8nKNaehWVlYPHz68d++eQqFgfuNbW1ufPXvW0tJy/fr10NBQJyenhQsXdqKpnJycbpw3aGpq6ubmVlpaqs2ApKSkqM+S73CI2m9t0aJFR44cSU5OrqmpUSqVpaWlzI90cHCwra1tm+sWu7q6+vr67t279+LFiw0NDSUlJcyxFi9ezOygo7pisfjs2bMXLlyoqalpbm6+du3ae++9JxaLw8LCCCE3b97cvn373r17+Xy+ekoUjTTczCB7eXl1ODiGgpVZCuowbxC6HcG8QaBpWut5Wa2trTt27OjXrx+fz7e0tAwICLh165Zq69OnT319fYVCoaur66effrp69WpCiEwmY2YDXr161dnZWSQSjR079vHjxyEhIXw+397ensfjSaXS6dOnFxUVda6pU6dOSSSSmJgYbc5Um2teLpfz+fz6+nrmY1ZWFjN9wNraetmyZRo7r169Wn3eYDtDlJSUxLwZ169fv6Kioj179kilUkKIs7Pzb7/9RtP08+fPw8PDnZyceDyejY1NYGBgQUEBTdMBAQGEkI0bN7bZ24qKitDQUJlMJhAIzMzMxowZ89VXX6m26q7u1KlTXV1dzczMBAKBu7t7cHBwfn4+s+llUwB27Nih3oK/v7+9vX1ra2ub7aszkHmD7PcAcQB0O8QBwND/9yyz6Kw+j8jQ5povLCzk8Xgvmw2vf0qlcty4cfv37+9BdTtUUVEhFAp37typzc4GEgfguQAAQHcy2IxzMpksOjo6OjpatUoui5RKZXZ2tkKh6ESecbbqaiMqKmrYsGFyuVwXjesI4gAAAK6IiIgICgoKDg5mPaVQbm5uZmZmTk5O+0saGFTdDsXHx+fl5Z06dYrP53d747qDOAAAoHusW7cuJSWlurra1dX12LFjbHenbVu2bJHL5Vu3bmW3GxMmTDh06JAq20KPqNu+48ePP3/+PDc319LSstsb1yke2x0AAHhNxMbGaiw4Y5j8/Pz8/PzY7sXrZtq0adOmTWO7F52B+wEAAADchTgAAACAuxAHAAAAcBfiAAAAAO4yiPcEf/zxx6CgILZ7Aa+VXbt2HT16lO1eAMuYFV458vWCa77H0WaZZz2gaJpmtwfx8fEd5p4CAB3JyckZPny4LqZRAYA2WI/e2I8DAIBFFEWlp6fPmjWL7Y4AADvwfgAAAAB3IQ4AAADgLsQBAAAA3IU4AAAAgLsQBwAAAHAX4gAAAADuQhwAAADAXYgDAAAAuAtxAAAAAHchDgAAAOAuxAEAAADchTgAAACAuxAHAAAAcBfiAAAAAO5CHAAAAMBdiAMAAAC4C3EAAAAAdyEOAAAA4C7EAQAAANyFOAAAAIC7EAcAAABwF+IAAAAA7kIcAAAAwF2IAwAAALgLcQAAAAB3IQ4AAADgLsQBAAAA3IU4AAAAgLsQBwAAAHAX4gAAAADuQhwAAADAXYgDAAAAuIvHdgcAQK+qqqpomlYvqaure/bsmeqjmZkZn8/Xe78AgB2UxjcCALze3nnnnW+//fZlW42NjR88eGBra6vPLgEAi/BcAIBb5syZQ1FUm5uMjIzefvttBAEAnII4AIBbZs6cyeO1/UCQoqh3331Xz/0BAHYhDgDgFktLSz8/P2Nj4xc3GRkZBQQE6L9LAMAixAEAnDN//vzW1laNQh6P5+/vb25uzkqXAIAtiAMAOGfq1KkCgUCjUKlUzp8/n5X+AACLEAcAcI6pqWlAQIDG5ECRSDR58mS2ugQAbEEcAMBFc+fObW5uVn3k8/kzZ84UiUQsdgkAWIE4AICLJk6cqP4qQHNz89y5c1nsDwCwBXEAABfx+fzg4GATExPmo4WFxYQJE9jtEgCwAnEAAEfNmTOnqamJEMLn8+fPn/+yRQUA4PWGdYUBOKq1tbVv375PnjwhhFy6dGnMmDFs9wgAWID7AQAcZWRktGDBAkKInZ2dj48P290BAHbgTqCelJaW/vDDD2z3AuC/WFtbE0Leeuuto0ePst0XgP/i6Ojo7e3Ndi84Ac8F9CQjI2P27Nls9wIAoGeYOXMmwlP9wP0AvULUpQtMjIWxfSVBQUGEkKNHjx47dmzmzJlsd0dXcG30UMz1CfqB9wMAOO01DgIAQBuIAwAAALgLcQAAAAB3IQ4AAADgLsQBAAAA3IU4AAAAgLsQBwCAtk6dOmVubv6Pf/yD7Y7oyrlz5yIiIjIzM93c3CiKoiiKWXJRxc/PTyKRGBsbDxo06OrVq2z18/Dhw6NGjZJIJM7OzosWLXr8+LEe6sbFxXl4eIhEIrFY7OHhERkZWVNTo9oaHR3t6ekplUoFAoFMJluzZk1tbS2z6euvv46Li1Mqldp3EvQJcQAAaOv1noj/2WefJSYmrlu3LjAw8M6dO+7u7r169UpNTT158qRqn7Nnzx49enTKlCkFBQUjRoxgpZ/p6enz5s0LCgoqLS09fvz4xYsXJ02a1NLSouu633///YcfflhcXPzkyZPNmzfHxcWpTzq9cOHCsmXL7t27V1FRERsbm5CQoFoDYOrUqUKhcMKECVVVVZ04X9A1xAEAoC1/f//q6uopU6bo+kANDQ16Tnmwbdu2tLS0jIwMiUSiKkxMTDQyMgoJCamurtZnZ9r35Zdf9u3bd/Xq1ebm5sOGDQsLC8vLy7ty5Yqu65qYmCxdutTGxsbMzCwoKGj69OnffPPNo0ePmK1mZmYhISFWVlYSiWTWrFkBAQGnT58uKSlhti5fvnzo0KGTJ0/WMuYAfUIcAAAGZ//+/WVlZXo73O3btyMjIzdt2iQUCtXLfXx8QkNDHzx4sGrVKr11pkMlJSV2dnYURTEfHR0dCSH379/Xdd2srCz18bG3tyeEqG7+nzhxwtjYWLWVSV1RX1+vKomKisrLy0tISNDmWKBPiAMAQCuXLl1ycnKiKOrzzz8nhCQnJ4vFYlNT0+PHj0+aNEkqlTo4OBw5coTZOTExUSgU9u7d++OPP7azsxMKhT4+Pqq/O+VyuYmJSZ8+fZiPS5cuFYvFFEVVVFQQQkJDQ1euXFlUVERRlEwmI4ScPn1aKpVu2bJFR6eWmJhI0/TUqVNf3BQTE9O/f/99+/adO3euzbo0TcfHxw8cOFAgEFhaWk6fPv3XX39lNrU/RIQQpVK5ceNGJycnkUg0ZMiQ9PR0bXrr5uamHiQxD/jd3Nx0XVdDYWGhhYWFs7Nzm1sfPHggEolcXV1VJZaWluPHj09ISHi9ny71SDToBfN/ONu9eD1hbDth5syZM2fOfNVazG3e3bt3Mx/Xr19PCDl//nx1dXVZWdm4cePEYnFTUxOzNSQkRCwW37x5s7GxsaCggHk3rbi4mNk6b948W1tbVcs7duwghJSXlzMfAwMD3d3dVVtPnDghkUiio6NftcNaXhtubm6enp4ahe7u7nfv3qVp+ocffjAyMnJxcamtraVpOicnZ9q0aardNm7caGJicvDgwaqqquvXr48YMcLa2vrx48fM1vaHaNWqVQKB4NixY8+ePVu3bp2RkdFPP/3UYW9zc3P5fH5iYmJNTc2NGzcGDhw4ceJErYaja3UZTU1NpaWlu3fvFggEBw8ebHOfuro6iUQil8s1yiMiIggh165d6/Aonbs+oXNwPwAAusTHx0cqldrY2AQHB9fV1RUXF6s28Xg85g9lT0/P5ORkhUKRkpLSiUP4+/vX1NRERkZ2X6//o66u7u7du+7u7i/bwdvbe8WKFffu3Vu7dq3GpoaGhvj4+BkzZsyfP9/c3NzLy+uLL76oqKjYs2eP+m5tDlFjY2NycnJAQEBgYKCFhcWGDRv4fL424zN+/Pjw8HC5XC6VSgcPHqxQKPbt26flyXalLsPR0dHBwSEqKmr79u0vy6EaGxtrZ2cXExOjUd6vXz9CSH5+/gKottkAACAASURBVCsdEXQNcQAAdA8TExNCSHNzc5tbR44caWpqqrpnbjjKyspomjY1NW1nn5iYmAEDBiQlJV26dEm9vKCgoLa2duTIkaqSUaNGmZiYvOzNO/UhunXrVn19/eDBg5lNIpGoT58+2ozP+vXr9+zZc/78+dra2jt37vj4+Hh7e6veyNNdXUZJSUlZWdnhw4cPHDgwfPjwF1/jyMrKysjIOHPmjPoblwxmkJ88eaL94UAPEAcAgJ4IBILy8nK2e6GpsbGRECIQCNrZRygUpqSkUBT1/vvvNzQ0qMqZiXBmZmbqO1tYWCgUig6PW1dXRwjZsGED9bv79++rv1jXpkePHsXFxX300UfvvPOOWCx2dXXdu3fvw4cPmQcruqurwufzbWxs/Pz80tLSCgoKYmNj1bempaVt27YtNzfXxcXlxboikYj8PuBgOBAHAIA+NDc3V1VVOTg4sN0RTcyPU4er3Hh7e4eFhRUWFm7evFlVaGFhQQjR+NXX8jRtbGwIIbt27VJ/Unv58uX2axUWFiqVyr59+6pKpFKplZVVQUFBh0fsSt0XyWQyY2Nj9bq7d+9OTU29cOGC+iHUNTU1kd8HHAwH4gAA0Ifc3FyapkePHs185PF4L3uCoGe9e/emKEqbFQI2b97s4eFx7do1VcngwYPNzMx+/vlnVcmVK1eampreeOONDltzdHQUCoV5eXmv1FsmwlDN2ieEKBSKyspKZgag7uo+ffp07ty56iVMVMHUpWk6PDw8Pz8/Oztb4+6IOmaQbW1tOzwc6BPiAADQldbW1mfPnrW0tFy/fj00NNTJyWnhwoXMJplMVllZmZ2d3dzcXF5erjGF3crK6uHDh/fu3VMoFM3NzTk5ObqbN2hqaurm5lZaWtrhnszTAfVZ8kKhcOXKlVlZWampqTU1Nfn5+UuWLLGzswsJCdGmtUWLFh05ciQ5ObmmpkapVJaWljI/0sHBwba2tm2uW+zq6urr67t3796LFy82NDSUlJQwx1q8eDGzg47qisXis2fPXrhwoaamprm5+dq1a++9955YLA4LCyOE3Lx5c/v27Xv37uXz+ZSanTt3qjfCDLKXl1eHgwP6hDgAALTy+eefjxo1ihASHh4+bdq05OTkXbt2EUKGDBly586dvXv3rly5khDy5z//ubCwkKnS2Njo5eUlEonGjRvXv3//b7/9VvUY/pNPPvH19Z0zZ86AAQM2b97M3CtWvbO2ZMmS3r17e3p6Tp48ubKyUten5u/vX1BQoHrw/9VXX8lksqKiolGjRn366afqe44ePZr55VP57LPPYmNjo6Ojra2tx48f7+LikpubKxaLCSEdDlFCQsKKFSvi4uJ69eplZ2cXGhr67NkzQkhTU1NZWdnx48df7CpFUUePHg0ODl68eLGlpaWnp2dxcXFmZua4ceOYHXRUVygUjhkz5oMPPrC3t5dIJEFBQS4uLj/++CPzniOt3ZIAP/30k729/ZAhQ7TZGfSHjcmKXIQ57rqDse0EPczPZlaZ1ekhOqTltVFYWMjj8V42G17/lErluHHj9u/f34PqdqiiokIoFO7cuVObnbF+gD7hfgAA6EpPSTEnk8mio6Ojo6NVq+SySKlUZmdnKxSK4ODgnlJXG1FRUcOGDZPL5bpoHLoCccBrRRdpYfWcara1tXXXrl26zjFz+PBhiqK6eJTXYLRBJSIiIigoKDg4mPWUQrm5uZmZmTk5Oe0vaWBQdTsUHx+fl5d36tQpPp/f7Y1DFyEOeK3QOli4WxdtvkxhYeHbb78dFhbW4SzqLjp8+LC7u/vly5dv377d6UZ6+mjr1Lp161JSUqqrq11dXY8dO8Z2d7SyZcsWuVy+detWdrsxYcKEQ4cOqZIv9Ii67Tt+/Pjz589zc3MtLS27vXHoBuw+luAOHT3Drq+v9/b2Nvw2tZGXlzdjxozU1NRhw4YNHTpU+4qvOrYVFRWurq6pqamEkMjISO0rvk6jzZHnr3h3pIfiyPVpIHA/oGfTRXpWPad8VRk6dGhmZua8efPaX9mt6zIyMvz9/adOnSoUCplXw7Ss+DqNNgAAA3GAYfn+++89PT3Nzc2FQqGXl9eZM2dUmw4ePDhy5EihUCgWi11cXDZv3qyRnlUjLezAgQMpijIyMnrjjTeY2+xr1qxhWv7b3/72/9m787gojvR/4NXAMDMMMxyKiNyHiohndCMYl6AbjGFFERC8Eq+EGM2IqFFEDCKiqAu8MJBE9Mdmvbg0YFSMq4YYo+ZYJSJuDKIoeCEIDKfA0L8/+pXZ+SLHcAw92J/3X+nqrurqmonz0N1VT3vn6rhN0rMsqxriyJEjc+bMEYvFHh4eRUVFP/zww8vHYLQBgCtYvh/BGSren0xPTw8PD3/+/Hl5efmkSZMGDBjAlDOzkHfs2FFeXv78+fMvv/xywYIF9EvpWZXTwjY3N9vY2FhZWTU3NysOWLNmjWId0/bO1UGbdM+yrKro9ddfV99zgfv375uYmDBjcvDgQULIsmXLWh3DhdHmyH1XPBfopzjy/dQQuB+gWXx9fT/99FMjIyNjY2MvL6/y8vJnz541NTVt3brV3d1948aNxsbGRkZGy5YtY1Z06YC2tvbq1asfPHhw/PhxpqSuru7YsWNLly7t4Fwdt9mTLKsa4siRI3//+9+ZJeG8vLz4fH56erpy5hiMNgBwig7bHYB2MRNs5HL5jRs3Kisrp0+frtjF/Op02sLy5cvDw8Pj4uL8/PwIIYcOHZo9e7ZEIungXB032JMsqxriyJEjigxpEonEw8Pjm2++ycrKUsyZ5s5oX716lenqK4xZyPaVv8xXz9WrVxWpKEDdcD9As5w6derNN980MTHh8/mffPIJUyiTycifmc26RF9f/4MPPrh8+fLPP/9MCPn888+VF/Fo81wd60mWVU1w8+bNvLy8mTNnKtY/Z2bq/+tf/1Icg9EGAE7B/QAN8uDBA29v7zlz5vy///f/hgwZsnfvXuYHg0niWVZW1o02pVJpXFxcbGzsihUrLC0t7e3tOz5Xx3qSZVUTHD58eN68eUeOHFGUVFRUmJubnz179smTJ8zMae6M9qRJk9LT03ulKY2Vlpbm7+//yl/mqwe3cPoS7gdokLy8vKampo8++sjOzk4gEFAUxZTb2NgYGxufPXu2G21aWFjMnTs3IyMjLCwsKCio03N1rCdZVllH03RKSsrKlSuVC42MjPz8/ORyuSI4wGgDAKcgDtAgVlZWhJBz5841NDQUFBQoHgPz+fxNmzZdvHhRKpU+fPiwpaWlurr61q1b5KX0rG02u3bt2ubm5oqKiqlTp3Z6ro7b7EmWVdZdvnxZIpFMnjy5VfmKFSuI0qMBjDYAcAvbExa4QsX5Sxs2bDA2NjY0NPTz82Mmkdvb2z948ICm6c8++2zUqFECgUAgEIwbNy4hIYGm6WvXrllbWwuFwjfeeGPz5s3MnW09PT0vLy/lZt3d3ffv36/iuTpus6WlZffu3UOHDuXxeEZGRt7e3rdv32YaTEhIYFYmHzp0aGFh4b59+5i35Kytrf/4449Or/3KlSuTJ082MzNjvpmDBw92dXX9/vvve2Vsly1bJhKJdHR0xowZc+3aNUX5tm3bFGc0NzdnRpXmwGhzZF4W5g32Uxz5fmoIin5V1jPXcMxzSoy2OmBsu4F5/vrKPzjHd6Of4sj3U0PguQAAAAB3IQ6AvvD7779T7VNTvnOArjp37lxISMixY8fs7OyYL+eiRYuUD/Dw8BCLxdra2iNHjrx27Rpb/Txy5MjEiRPFYrG1tfWSJUuePHnSB3Wjo6MdHR2FQqFIJHJ0dAwLC2Mm2TIiIiKcnJwkEgmfz3dwcPjkk09qamqYXSdOnIiOju50wQxgDbuPJbgDzynVB2PbDRx5/tql78aWLVtmzpwpk8mYTXt7+wEDBhBCTp48qXxYdnb2rFmzermjXZGSkkIIiY6OrqysvH79up2d3dixY5uamtRd19PTc8+ePaWlpdXV1WlpaTwe76233lLsdXNzS0hIKC8vl8lkqampPB7v7bffVuyNi4tzc3OrqKhQ8Ro58v3UELgfAABqUV9f7+rqqmlNtWfnzp0pKSlpaWlisVhRGB8fr6WlFRgYWFVVpdazd8mXX345ZMiQ9evXGxgYjB07Njg4ODc3t71VJnuxrq6u7sqVK01MTPT19f38/GbPnv3vf//78ePHzF59ff3AwEBjY2OxWDx37lxvb+8zZ84w+TIIIatXrx4zZsw777zT3NzcvasG9UEcAABq0YspldWdnfnOnTthYWFbt24VCATK5a6urkFBQQ8fPly3bp36zt5VxcXFZmZmilUoLC0tCSH3799Xd93jx48rj4+5uTkhRHHz/+TJk0zaDsbAgQMJIUzuTUZ4eHhubm5cXJwq54K+hDgAANpFt5/4WCqV6urqMhMdCSErV64UiUQURTFLMbZKqRwfHy8QCAYNGvThhx+amZkJBAJXV1fFn6FdaooQcubMGYlEsn379t66zPj4eJqmvby8Xt4VGRk5bNiw/fv3nzt3rqtD1GluaLlcvmXLFisrK6FQOHr0aOYpRqfs7OyUoyLmAb+dnZ2667ZSUFBgaGhobW3d5t6HDx8KhUJbW1tFiZGRkZubW1xcHI3pG5qG3ccS3IFn2OqDse0GFZ+/dpz4eMGCBaampoqDd+/eTQh59uwZs9kqpXJgYKBIJLp161ZDQ0N+fj7zqhqzNkZXmzp58qRYLI6IiOi0/yp+N+zs7JycnFoV2tvb37t3j6bpy5cva2lp2djY1NTU0C+9H9CT3NDr1q3j8/kZGRkVFRWbNm3S0tL65ZdfOu1tTk4Oj8eLj4+XyWQ3b94cMWLE9OnTO63V87qMxsbGkpKSvXv38vn8gwcPtnlMbW2tWCyWSqWtykNCQggh169f7/QseD+gL+F+AAC0TcXEx6rT0dFh/m52cnJKTEysrq5OTk7uRjuenp4ymSwsLKx73Wiltrb23r17imQQL3NxcVmzZk1RUdHGjRtb7epJbuiGhobExERvb28fHx9DQ8PNmzfzeDxVBsTNzW3Dhg1SqVQikTg7O1dXV+/fv1/Fi+1JXYalpaWFhUV4ePiuXbv8/f3bPCYqKsrMzCwyMrJV+dChQwkheXl5XTojqBviAABoW1cTH3fJhAkT9PT0FLfQWVRaWkrTNLM4Y3siIyOHDx+ekJBw6dIl5fKe5Ia+fft2XV2ds7Mzs0soFA4ePFiVAQkNDd23b9/58+dramru3r3r6urq4uKieCNPfXUZxcXFpaWlR44c+eqrr8aNG/fyexvHjx9PS0v79ttvld+4ZDCD/PTpU9VPB30AcQAAtE3diY/5fP6zZ896pameaGhoYDrTwTECgSA5OZmiqKVLl9bX1yvKezJEtbW1hJDNmzcrFtK4f/++8ot1bXr8+HF0dPQHH3wwdepUkUhka2ublJT06NEj5kmK+uoq8Hg8ExMTDw+PlJSU/Pz8qKgo5b0pKSk7d+7MycmxsbF5ua5QKCR/DjhoDsQBANA2tSY+bmpq0pCM1cyPU6er3Li4uAQHBxcUFGzbtk1R2JMhMjExIYTExsYqP6m9cuVKx7UKCgrkcjmTHZshkUiMjY3z8/M7PWNP6r7MwcFBW1tbue7evXsPHTp04cIF5VMoa2xsJH8OOGgOxAEA0LZOEx/r6Oi0l3exUzk5OTRNT5o0qedN9dCgQYMoilJlhYBt27Y5Ojpev35dUdKT3NCWlpYCgSA3N7dLvWUiDMWsfUJIdXX18+fPmRmA6qtbXl4+f/585RImqmDq0jS9YcOGvLy8zMzMVndHlDGDbGpq2unpoC8hDgCAtnWa+NjBweH58+eZmZlNTU3Pnj1rNQ395ZTKLS0tFRUVzc3NN27cCAoKsrKyWrx4cTeays7O7sV5g3p6enZ2diUlJaoMSHJysvIs+Z7khhYIBEuWLDl69GhiYqJMJpPL5SUlJcyPdEBAgKmpaZvrFtva2rq7uyclJV28eLG+vr64uJg517Jly5gD1FRXJBKdPXv2woULMpmsqanp+vXr7733nkgkCg4OJoTcunVr165dSUlJPB5PecnwPXv2KDfCDPKoUaM6HRzoU6zMUuAgzG1TH4xtN6g4L6uDxMc0TZeXl7u7uwsEAltb248//nj9+vWEEAcHB2Y2oHJK5SdPngQGBvJ4PHNzcx0dHYlEMnv27MLCwu41dfr0abFYHBkZ2Wn/VfxuSKVSHo9XV1fHbB4/fpyZPjBw4MBVq1a1Onj9+vXK8wZ7khv6xYsXGzZssLKy0tHRMTEx8fHxyc/Pp2na29ubELJly5Y2e1tWVhYUFOTg4MDn8/X19SdPnvz1118r9qqvrpeXl62trb6+Pp/Pt7e3DwgIyMvLY3a1NwVg9+7dyi14enqam5u3tLS02b4yzBvsS/jXs4/gt0p9MLbd0Pf/zjKLzvblGWmVvxsFBQU6OjrtzYbve3K5fMqUKQcOHOhHdTtVVlYmEAj27NmjysGIA/oSngsAQB/R2IxzDg4OERERERERilVyWSSXyzMzM6urq7uRh5OtuqoIDw8fO3asVCpVR+PQE4gDAABISEiIn59fQEAA6ymFcnJyjh07lp2d3fGSBhpVt1MxMTG5ubmnT5/m8Xi93jj0EOIAAFC7TZs2JScnV1VV2draZmRksN2dtm3fvl0qle7YsYPdbkybNu3w4cOKbAv9om7HsrKyXrx4kZOTY2Rk1OuNQ8/psN0BAHj1RUVFtVpwRjN5eHh4eHiw3YtXzaxZs2bNmsV2L6BduB8AAADAXYgDAAAAuAtxAAAAAHchDgAAAOAuxAEAAADchfkCfYqiKLa78MrC2HYDRwaNI5f5ivH19WW7C1xB0TTNdh84oaSk5PLly2z3AqA1f3//oKAgFxcXtjsC8H9YWlria9k3EAcAcBpFUampqXPnzmW7IwDADrwfAAAAwF2IAwAAALgLcQAAAAB3IQ4AAADgLsQBAAAA3IU4AAAAgLsQBwAAAHAX4gAAAADuQhwAAADAXYgDAAAAuAtxAAAAAHchDgAAAOAuxAEAAADchTgAAACAuxAHAAAAcBfiAAAAAO5CHAAAAMBdiAMAAAC4C3EAAAAAdyEOAAAA4C7EAQAAANyFOAAAAIC7EAcAAABwF+IAAAAA7kIcAAAAwF2IAwAAALgLcQAAAAB3IQ4AAADgLsQBAAAA3IU4AAAAgLsQBwAAAHAX4gAAAADu0mG7AwDQp44ePVpdXa1ccu7cucrKSsWmt7e3iYlJn/cLANhB0TTNdh8AoO8sXrz4q6++4vF4zCbzLwBFUYQQuVyur69fWlrK5/PZ7CIA9CE8FwDglnnz5hFCmv7U3Nzc3NzM/Le2trafnx+CAABOwf0AAG5pbm42NTV9/vx5m3vPnz8/derUPu4SALAI9wMAuEVHR2fevHmK5wLKBg4c6Obm1vddAgAWIQ4A4Jx58+Y1NTW1KuTxeIsWLdLW1malSwDAFjwXAOAcmqatrKxKSkpalf/8888TJ05kpUsAwBbcDwDgHIqiFi5c2OrRgKWl5YQJE9jqEgCwBXEAABe1ejTA4/EWL17MzB4EAE7BcwEAjnJ0dLx9+7Zi8+bNmyNHjmSxPwDACtwPAOCoRYsWKR4NODk5IQgA4CbEAQActXDhwubmZkIIj8d777332O4OALADzwUAuGvChAn/+c9/KIoqKiqysrJiuzsAwALcDwDgrnfffZcQ8vrrryMIAOAs5BvURDExMVeuXGG7F/Dqa2hooCjqxYsXfn5+bPcFOCE9PZ3tLkBruB+gia5cuXL16lW2e9HPZGRkvLwwDqeUlJRkZGR0qYpAIDA1NbWwsFBTl9QEn3V/1I3vJ/QNvB+giZg/zhA4dwlFUampqXPnzmW7I6xJS0vz9/fv6v/Rd+7ccXBwUFOX1ASfdX/Uve8n9AHcDwDgtH4XBABA70IcAAAAwF2IAwAAALgLcQAAAAB3IQ4AAADgLsQBAJx2+vRpAwODb775hu2OqMu5c+dCQkKOHTtmZ2dHURRFUYsWLVI+wMPDQywWa2trjxw58tq1a2z188iRIxMnThSLxdbW1kuWLHny5Ekf1I2OjnZ0dBQKhSKRyNHRMSwsTCaTKfZGREQ4OTlJJBI+n+/g4PDJJ5/U1NQwu06cOBEdHS2Xy1XvJGgsxAEAnPZqz+P69NNP4+PjN23a5OPjc/fuXXt7+wEDBhw6dOjUqVOKY86ePZuenj5z5sz8/Pzx48ez0s/U1NQFCxb4+fmVlJRkZWVdvHhxxowZTPYHtdb94Ycf3n///QcPHjx9+nTbtm3R0dG+vr6KvRcuXFi1alVRUVFZWVlUVFRcXJxivSkvLy+BQDBt2rTKyspuXC9oFho0j6+vr6+vL9u96GcIIampqWz3gk2pqama/H90XV2di4tLrzSl4me9Y8eOYcOG1dfXK0rs7e0PHz6spaVlbm5eWVmpKM/Ozp41a1av9K173N3dhwwZ0tLSwmx+9tlnhJBLly6pu663t7fy+DA/848ePWI2PT09m5ubFXuZBRsePHigKJFKpS4uLk1NTaqcS8O/n1yG+wEA0BcOHDhQWlraZ6e7c+dOWFjY1q1bBQKBcrmrq2tQUNDDhw/XrVvXZ53pVHFxsZmZGUVRzKalpSUh5P79++que/z4ceXxMTc3J4Qobv6fPHlSW1tbsXfgwIGEkLq6OkVJeHh4bm5uXFycKucCjYU4AIC7Ll26ZGVlRVEU80dkYmKiSCTS09PLysqaMWOGRCKxsLA4evQoc3B8fLxAIBg0aNCHH35oZmYmEAhcXV1/+uknZq9UKtXV1R08eDCzuXLlSpFIRFFUWVkZISQoKGjt2rWFhYUURTErF505c0YikWzfvl1NlxYfH0/TtJeX18u7IiMjhw0btn///nPnzrVZl6bpmJiYESNG8Pl8IyOj2bNn//7778yujoeIECKXy7ds2WJlZSUUCkePHs38EdwpOzs75SCJecBvZ2en7rqtFBQUGBoaWltbt7n34cOHQqHQ1tZWUWJkZOTm5hYXF0e/0k+XXn0s34+AtuC5QDcQPBfo1n3X4uJiQsjevXuZzdDQUELI+fPnq6qqSktLp0yZIhKJGhsbmb2BgYEikejWrVsNDQ35+fnMu2mKG8ULFiwwNTVVtLx7925CyLNnz5hNHx8fe3t7xd6TJ0+KxeKIiIhuXKkqn7WdnZ2Tk1OrQnt7+3v37tE0ffnyZS0tLRsbm5qaGvql5wJbtmzR1dU9ePBgZWXljRs3xo8fP3DgwCdPnjB7Ox6idevW8fn8jIyMioqKTZs2aWlp/fLLL51eUU5ODo/Hi4+Pl8lkN2/eHDFixPTp01UcjZ7UZTQ2NpaUlOzdu5fP5x88eLDNY2pra8VisVQqbVUeEhJCCLl+/XqnZ8FzAY2F+wEA0Jqrq6tEIjExMQkICKitrX3w4IFil46ODvOHspOTU2JiYnV1dXJycjdO4enpKZPJwsLCeq/X/1NbW3vv3j17e/v2DnBxcVmzZk1RUdHGjRtb7aqvr4+JiZkzZ87ChQsNDAxGjRr1xRdflJWV7du3T/mwNoeooaEhMTHR29vbx8fH0NBw8+bNPB5PlfFxc3PbsGGDVCqVSCTOzs7V1dX79+9X8WJ7UpdhaWlpYWERHh6+a9cuf3//No+JiooyMzOLjIxsVT506FBCSF5eXpfOCBoFcQAAtEtXV5cQ0tTU1ObeCRMm6OnpKe6Za47S0lKapvX09Do4JjIycvjw4QkJCZcuXVIuz8/Pr6mpmTBhgqJk4sSJurq6iicgrSgP0e3bt+vq6pydnZldQqFw8ODBqoxPaGjovn37zp8/X1NTc/fuXVdXVxcXF+ZWjVrrMoqLi0tLS48cOfLVV1+NGzfu5dc4jh8/npaW9u2334rF4la7mEF++vSp6qcDTYM4AAC6j8/nP3v2jO1etNbQ0EAI4fP5HRwjEAiSk5Mpilq6dGl9fb2inJkIp6+vr3ywoaFhdXV1p+etra0lhGzevJn60/3795VfrGvT48ePo6OjP/jgg6lTp4pEIltb26SkpEePHjEPVtRXV4HH45mYmHh4eKSkpOTn50dFRSnvTUlJ2blzZ05Ojo2Nzct1hUIh+XPAoZ9CHAAA3dTU1FRZWWlhYcF2R1pjfpw6XeXGxcUlODi4oKBg27ZtikJDQ0NCSKtffRUv08TEhBASGxur/PD1ypUrHdcqKCiQy+VDhgxRlEgkEmNj4/z8/E7P2JO6L3NwcNDW1lauu3fv3kOHDl24cEH5FMoaGxvJnwMO/RTiAADoppycHJqmJ02axGzq6Oi09wShjw0aNIiiqKqqqk6P3LZtm6Oj4/Xr1xUlzs7O+vr6v/76q6Lkp59+amxsfO211zptzdLSUiAQ5Obmdqm3TITx+PFjRUl1dfXz58+ZGYDqq1teXj5//nzlEiaqYOrSNL1hw4a8vLzMzMxWd0eUMYNsamra6elAYyEOAIAuaGlpqaioaG5uvnHjRlBQkJWV1eLFi5ldDg4Oz58/z8zMbGpqevbsWasp7MbGxo8ePSoqKqqurm5qasrOzlbfvEE9PT07O7uSkpJOj2SeDijPkhcIBGvXrj1+/PihQ4dkMlleXt6KFSvMzMwCAwNVaW3JkiVHjx5NTEyUyWRyubykpIT5kQ4ICDA1NW1z3WJbW1t3d/ekpKSLFy/W19cXFxcz51q2bBlzgJrqikSis2fPXrhwQSaTNTU1Xb9+/b333hOJRMHBwYSQW7du7dq1KykpicfjUUr27Nmj3AgzyKNGjep0cEBzsTJLATqGeYPdQDBvsOvzsvbu3cvM+NfT0/Py8kpISGBe+xo6dGhhYeG+ffskEgkhxNra+o8//qBpOjAwkMfjmZub6+joSCSS2bNnFxYWKlorLy93d3cXCAS2trYff/zx+vXrCSEODg7M7JO8IgAAIABJREFUxMJr165ZW1sLhcI33njjyZMnp0+fFovFkZGR3bhSVT5rqVTK4/Hq6uqYzePHjzPTBwYOHLhq1apWB69fv1553mBLS8vu3buHDh3K4/GMjIy8vb1v377N7Op0iF68eLFhwwYrKysdHR0TExMfH5/8/Hyapr29vQkhW7ZsabO3ZWVlQUFBDg4OfD5fX19/8uTJX3/9tWKv+up6eXnZ2trq6+vz+Xx7e/uAgIC8vDxmV3tTAHbv3q3cgqenp7m5uWI1ww5g3qDGwqeiiRAHdAPigD74dzYwMNDY2Fitp1CFKp91QUGBjo5Oe7Ph+55cLp8yZcqBAwf6Ud1OlZWVCQSCPXv2qHIw4gCNhecCANAF/SXFnIODQ0REREREhGKVXBbJ5fLMzMzq6uqAgID+UlcV4eHhY8eOlUql6mgc+gziAAB4NYWEhPj5+QUEBKjywqBa5eTkHDt2LDs7u+MlDTSqbqdiYmJyc3NPnz7N4/F6vXHoS4gDXhHLly8Xi8UURXX1XWXN1NLSEhsb6+rq2ottKmegZ+jq6g4aNOjNN9/cvXt3RUVFL57rlbRp06bk5OSqqipbW9uMjAy2u6OS7du3S6XSHTt2sNuNadOmHT58WJF8oV/U7VhWVtaLFy9ycnKMjIx6vXHoY4gDXhH79+9PSkpiuxe9o6Cg4K9//WtwcHCnC7B0iSIDvYGBAU3TLS0tpaWlaWlptra2GzZsGDlypPJUMXhZVFTUixcvaJq+d++ecpZ6Defh4bFz5062e/GqmTVrVkhIiPI8C+i/EAeA2tXX16v+l/1vv/22cePGFStWjB07Vq29oijK0NDwzTffTE5OTktLe/r0qaenJ+s3kF/WpdEDAOgqxAGvDkUCck3TpcTzY8aMOXbs2IIFCzpeFLZ3+fr6Ll68uLS09Isvvuizk6qoS6MHANBViAP6MZqmd+/ePXz4cD6fb2BgwEzXZuzatUtPT08sFpeWlq5du9bc3JyZAN1eVvWOU8uTDjOydzXxvGZiFsPJzs4mGD0A4BQW5yxCe1RcPyA0NJSiqH/84x8VFRV1dXUJCQlEKRE4kyV99erVe/funTNnzn//+9+Os6p3nFq+47pdSjyvotdff33MmDGqH09UWz9A8X5AKzKZjBBiaWnJbPbH0ePO/GwVP2vQKNz5fvY7uB/QX9XX18fGxv7tb38LDg42NDQUCoXGxsYvH7Zz585Vq1YdO3bM2tq606zq7aWWVzEje7/GzLZolV0GowcArzwdtjsA3XTnzp26urpp06apeHxXs6orp5bvat3+qLa2lqZpZo3Yl/Wj0dPY10R6l7+/v7+/P9u9AHgVIA7or5j0HkyeU1V0I6u6IrV8TzKy9xd//PEHIcTR0bHNvf1o9Ji7r682f3//oKAgFxcXtjsCXXDlypW4uDi2ewFtQBzQXwkEAkLIixcvVDy+q1nVlVPL9yQje39x5swZQsiMGTPa3NuPRm/u3LnqaFaj+Pv7u7i4cOFKXzGIAzQT3g/or5ydnbW0tL7//nvVj+9SVnXl1PKd1tWcxPPd8+TJk9jYWAsLi6VLl7Z5AEYPAF5ViAP6KyalaUZGxoEDB2Qy2Y0bNzp+70yVrOrtpZbvtG6XEs/3/lh0EU3TNTU1TKbUZ8+epaamTp48WVtbOzMzs733AzB6APDKYnW2ArRNxXmD1dXVy5cvHzBggL6+/htvvLFlyxZCiIWFxW+//RYdHS0UCgkhlpaWitSrHWRVpztLLd9x3S4lnu/4oq5cuTJ58mQzMzPm+zl48GBXV9fvv/++09Egnc0lO3HixOjRo/X09HR1dbW0tMifSwr+5S9/iYiIKC8vVxzZT0ePO/OyOv2sQQNx5/vZ71A0TbMRfkBH/Pz8CCHp6el9edIPP/wwPT29vLy8L0/aiyiKSk1NZeuZsSaMXlpamr+/Pxf+j2b3s4bu4c73s9/BcwH4n/6SWl4zYfQAoD9CHAB95/fff6faFxAQwHYH4RV07ty5kJAQ5azTixYtUj7Aw8NDLBZra2uPHDny2rVrbPXzyJEjzDKU1tbWS5YsefLkSR/UjY6OdnR0FAqFIpHI0dExLCyMWViTERER4eTkJJFI+Hy+g4PDJ598UlNTw+w6ceJEdHQ0Yt9XBMvPJaAtKr4f0ItCQkJ0dXUJITY2Nunp6X156t5C2HtmrCGjx53nr6p/1lu2bJk5c6ZMJmM27e3tBwwYQAg5efKk8mHZ2dmzZs3q/Y6qLCUlhRASHR1dWVl5/fp1Ozu7sWPHNjU1qbuup6fnnj17SktLq6ur09LSeDzeW2+9pdjr5uaWkJBQXl4uk8lSU1N5PN7bb7+t2BsXF+fm5lZRUaHiNXLn+9nv4FPRRH0fB7wCWIwDNEQf/DtbV1fn4uLCelMqftY7duwYNmxYfX29osTe3v7w4cNaWlrm5uaVlZWKctbjAHd39yFDhjBzWGia/uyzzwghly5dUnddb29v5fFh3kx69OgRs+np6dnc3KzYy7yQociaQdO0VCp1cXFRMeZAHKCx8FwAAFTVi0mQ1Z1P+c6dO2FhYVu3bmVW3FJwdXUNCgp6+PDhunXr1Hf2riouLjYzM1OsCW1paUkIaTWDVB11jx8/rjw+5ubmhBDFzf+TJ09qa2sr9g4cOJAQUldXpygJDw/Pzc3F6kD9HeIAAG6heykJcsfZlruaT/nMmTMSiWT79u29dZnx8fE0TXt5eb28KzIyctiwYfv37z937lxXhygxMVEkEunp6WVlZc2YMUMikVhYWBw9elRRVy6Xb9myxcrKSigUjh49WsVlnu3s7JSjIuYBv52dnbrrtlJQUGBoaGhtbd3m3ocPHwqFQltbW0WJkZGRm5tbXFwcjVkA/Rq7tyOgTXgu0A0EzwVUu+/ai0mQO8623KWmTp48KRaLIyIiVLlSVT5rOzs7JyenVoX29vb37t2jafry5ctaWlo2NjY1NTX0S88FOh4iJif1+fPnq6qqSktLp0yZIhKJGhsbmb3r1q3j8/kZGRkVFRWbNm3S0tL65ZdfOr2inJwcHo8XHx8vk8lu3rw5YsSI6dOnqzIUPazLaGxsLCkp2bt3L5/PVyyY0Uptba1YLJZKpa3KQ0JCiFK68w7guYDGwv0AAA7p9STI7WVb7ipPT0+ZTBYWFta9brRSW1t77949e3v79g5wcXFZs2ZNUVHRxo0bW+1ScYhcXV0lEomJiUlAQEBtbe2DBw8IIQ0NDYmJid7e3j4+PoaGhps3b+bxeKoMiJub24YNG6RSqUQicXZ2rq6u3r9/v4oX25O6DEtLSwsLi/Dw8F27drWXxTEqKsrMzCwyMrJV+dChQwkheXl5XTojaBTEAQAcotYkyMrZltlVWlpK07Senl4Hx0RGRg4fPjwhIeHSpUvK5V0dImaqCLPk8+3bt+vq6pydnZldQqFw8ODBqgxIaGjovn37zp8/X1NTc/fuXVdXVxcXl+Li4k4r9rAuo7i4uLS09MiRI1999dW4ceNefm/j+PHjaWlp3377rVgsbrWLGeSnT5+qfjrQNIgDADhE3UmQFdmW2dXQ0MB0poNjBAJBcnIyRVFLly6tr69XlPdkiGprawkhmzdvVqyKcf/+feUX69r0+PHj6OjoDz74YOrUqSKRyNbWNikp6dGjR8yTFPXVVeDxeCYmJh4eHikpKfn5+VFRUcp7U1JSdu7cmZOTY2Nj83JdZgVuZsChn0IcAMAhak2CrJxtmV3Mj1Onq9y4uLgEBwcXFBRs27ZNUdiTITIxMSGExMbGKj98vXLlSse1CgoK5HL5kCFDFCUSicTY2Dg/P7/TM/ak7sscHBy0tbWV6+7du/fQoUMXLlxQPoWyxsZG8ueAQz+FOACAQ9SaBFk523IPm+qhQYMGURRVVVXV6ZHbtm1zdHS8fv26oqSrOaaVWVpaCgSC3NzcLvWWiTAeP36sKKmurn7+/DkzA1B9dcvLy+fPn69cwkQVTF2apjds2JCXl5eZmdnq7ogyZpBNTU07PR1oLMQBABzS60mQ28u23NWmsrOze3HeoJ6enp2dXUlJiSoDkpycrDxLXpUc0x20tmTJkqNHjyYmJspkMrlcXlJSwvxIBwQEmJqatrlusa2trbu7e1JS0sWLF+vr64uLi5lzLVu2jDlATXVFItHZs2cvXLggk8mampquX7/+3nvviUSi4OBgQsitW7d27dqVlJTE4/GU1//es2ePciPMII8aNarTwQHNxcosBegY5g12A8G8QdXmZfViEuSOsy13qanTp0+LxeLIyEhVrlSVz1oqlfJ4vLq6Ombz+PHjzPSBgQMHrlq1qtXB69evV5432MEQJSQkMG/GDR06tLCwcN++fRKJhBBibW39xx9/0DT94sWLDRs2WFlZ6ejomJiY+Pj45Ofn0zTt7e1NCNmyZUubvS0rKwsKCnJwcODz+fr6+pMnT/76668Ve9VX18vLy9bWVl9fn8/n29vbBwQE5OXlMbvamwKwe/du5RY8PT3Nzc0Vqxl2APMGNRY+FU2EOKAbEAf0/b+zgYGBxsbGfXlGhiqfdUFBgY6OTnuz4fueXC6fMmXKgQMH+lHdTpWVlQkEgj179qhyMOIAjYXnAgDQfRqbcc7BwSEiIiIiIkKxSi6L5HJ5ZmZmdXV1N5JqslVXFeHh4WPHjpVKpepoHPoM4gAAeDWFhIT4+fkFBASo8sKgWuXk5Bw7diw7O7vjJQ00qm6nYmJicnNzT58+zePxer1x6EuIAwCgOzZt2pScnFxVVWVra5uRkcF2d9q2fft2qVS6Y8cOdrsxbdq0w4cPK7It9Iu6HcvKynrx4kVOTo6RkVGvNw59TIftDgBAvxQVFdVqwRnN5OHh4eHhwXYvXjWzZs2aNWsW272A3oH7AQAAANyFOAAAAIC7EAcAAABwF+IAAAAA7sJ7ghqqpKQkLS2N7V70M50mdHm1MZfPka8Nxz/r/ggfmcaiaJpmuw/Qmp+fn8ZOxAIA6Db84mggxAEAnEZRVGpq6ty5c9nuCACwA+8HAAAAcBfiAAAAAO5CHAAAAMBdiAMAAAC4C3EAAAAAdyEOAAAA4C7EAQAAANyFOAAAAIC7EAcAAABwF+IAAAAA7kIcAAAAwF2IAwAAALgLcQAAAAB3IQ4AAADgLsQBAAAA3IU4AAAAgLsQBwAAAHAX4gAAAADuQhwAAADAXYgDAAAAuAtxAAAAAHchDgAAAOAuxAEAAADchTgAAACAuxAHAAAAcBfiAAAAAO5CHAAAAMBdiAMAAAC4C3EAAAAAdyEOAAAA4C7EAQAAANyFOAAAAIC7EAcAAABwF0XTNNt9AIC+ExgYePv2bcXmtWvXbG1tjYyMmE1tbe2vvvrKwsKCpd4BQF/TYbsDANCnTE1N9+3bp1xy48YNxX/b2dkhCADgFDwXAOCW+fPnt7dLV1d38eLFfdgXAGAfngsAcI6zs/OtW7fa/H//9u3bw4YN6/suAQBbcD8AgHPeffddbW3tVoUURY0ZMwZBAADXIA4A4Jx58+bJ5fJWhdra2u+99x4r/QEAFuG5AAAXubq6/vTTTy0tLYoSiqKKi4vNzc1Z7BUA9D3cDwDgokWLFlEUpdjU0tJ64403EAQAcBDiAAAu8vPzU96kKOrdd99lqzMAwCLEAQBcNHDgwGnTpineFqQoytvbm90uAQArEAcAcNTChQuZ14O0tbWnT58+YMAAtnsEACxAHADAUXPmzNHV1SWE0DS9cOFCtrsDAOxAHADAUSKR6O9//zshRFdXd+bMmWx3BwDYgTgAgLsWLFhACPH29haJRGz3BQDYgfUDNJGfn19GRgbbvQAA6GX4xdFAyDeooSZNmrRmzRq2e9EPxMbGEkIwVoSQK1euxMXFpaamdqnWoUOHAgICdHT60z8F/v7+QUFBLi4ubHcEuoD5frLdC2gD7gdoImZud3p6Otsd6QcwVgppaWn+/v5d/T+6oaFBIBCoqUtqQlFUamrq3Llz2e4IdEH3vp/QB/B+AACn9bsgAAB6F+IAAAAA7kIcAAAAwF2IAwAAALgLcQAAAAB3IQ4A4LTTp08bGBh88803bHdEXc6dOxcSEnLs2DE7OzuKoiiKWrRokfIBHh4eYrFYW1t75MiR165dY6ufR44cmThxolgstra2XrJkyZMnT/qgbnR0tKOjo1AoFIlEjo6OYWFhMplMsTciIsLJyUkikfD5fAcHh08++aSmpobZdeLEiejoaLlcrnonQWMhDgDgtFd7Htenn34aHx+/adMmHx+fu3fv2tvbDxgw4NChQ6dOnVIcc/bs2fT09JkzZ+bn548fP56Vfqampi5YsMDPz6+kpCQrK+vixYszZsxobm5Wd90ffvjh/ffff/DgwdOnT7dt2xYdHe3r66vYe+HChVWrVhUVFZWVlUVFRcXFxSnSVXt5eQkEgmnTplVWVnbjekGjIA4A4DRPT8+qqqo+yC9QX1/v6uqq7rMo27lzZ0pKSlpamlgsVhTGx8draWkFBgZWVVX1ZWc69uWXXw4ZMmT9+vUGBgZjx44NDg7Ozc396aef1F1XV1d35cqVJiYm+vr6fn5+s2fP/ve///348WNmr76+fmBgoLGxsVgsnjt3rre395kzZ4qLi5m9q1evHjNmzDvvvKNizAEaC3EAAPSFAwcOlJaW9tnp7ty5ExYWtnXr1lYLJLi6ugYFBT18+HDdunV91plOFRcXm5mZURTFbFpaWhJC7t+/r+66x48fVx4fc3NzQoji5v/Jkye1tbUVewcOHEgIqaurU5SEh4fn5uZilcD+DnEAAHddunTJysqKoqjPPvuMEJKYmCgSifT09LKysmbMmCGRSCwsLI4ePcocHB8fLxAIBg0a9OGHH5qZmQkEAldXV8XfnVKpVFdXd/DgwczmypUrRSIRRVFlZWWEkKCgoLVr1xYWFlIU5eDgQAg5c+aMRCLZvn27mi4tPj6epmkvL6+Xd0VGRg4bNmz//v3nzp1rsy5N0zExMSNGjODz+UZGRrNnz/7999+ZXR0PESFELpdv2bLFyspKKBSOHj1axWWe7ezslIMk5gG/nZ2duuu2UlBQYGhoaG1t3ebehw8fCoVCW1tbRYmRkZGbm1tcXNyr/XTp1UeD5vH19fX19WW7F/0DxkqB+cnpai3mNu/evXuZzdDQUELI+fPnq6qqSktLp0yZIhKJGhsbmb2BgYEikejWrVsNDQ35+fnMu2kPHjxg9i5YsMDU1FTR8u7duwkhz549YzZ9fHzs7e0Ve0+ePCkWiyMiIrpxpYSQ1NTUjo+xs7NzcnJqVWhvb3/v3j2api9fvqylpWVjY1NTU0PTdHZ29qxZsxSHbdmyRVdX9+DBg5WVlTdu3Bg/fvzAgQOfPHnC7O14iNatW8fn8zMyMioqKjZt2qSlpfXLL790ekU5OTk8Hi8+Pl4mk928eXPEiBHTp09XcTR6UpfR2NhYUlKyd+9ePp9/8ODBNo+pra0Vi8VSqbRVeUhICCHk+vXrnZ6le99P6AO4HwAArbm6ukokEhMTk4CAgNra2gcPHih26ejoMH8oOzk5JSYmVldXJycnd+MUnp6eMpksLCys93r9P7W1tffu3bO3t2/vABcXlzVr1hQVFW3cuLHVrvr6+piYmDlz5ixcuNDAwGDUqFFffPFFWVnZvn37lA9rc4gaGhoSExO9vb19fHwMDQ03b97M4/FUGR83N7cNGzZIpVKJROLs7FxdXb1//34VL7YndRmWlpYWFhbh4eG7du3y9/dv85ioqCgzM7PIyMhW5UOHDiWE5OXldemMoFEQBwBAu3R1dQkhTU1Nbe6dMGGCnp6e4p655igtLaVpWk9Pr4NjIiMjhw8fnpCQcOnSJeXy/Pz8mpqaCRMmKEomTpyoq6vb3pt3ykN0+/bturo6Z2dnZpdQKBw8eLAq4xMaGrpv377z58/X1NTcvXvX1dXVxcVF8Uae+uoyiouLS0tLjxw58tVXX40bN+7l1ziOHz+elpb27bffKr9xyWAG+enTp6qfDjQN4gAA6D4+n//s2TO2e9FaQ0MDIYTP53dwjEAgSE5Opihq6dKl9fX1inJmIpy+vr7ywYaGhtXV1Z2et7a2lhCyefNm6k/3799XfrGuTY8fP46Ojv7ggw+mTp0qEolsbW2TkpIePXrEPFhRX10FHo9nYmLi4eGRkpKSn58fFRWlvDclJWXnzp05OTk2NjYv1xUKheTPAYd+CnEAAHRTU1NTZWWlhYUF2x1pjflx6nSVGxcXl+Dg4IKCgm3btikKDQ0NCSGtfvVVvEwTExNCSGxsrPLD1ytXrnRcq6CgQC6XDxkyRFEikUiMjY3z8/M7PWNP6r7MwcFBW1tbue7evXsPHTp04cIF5VMoa2xsJH8OOPRTiAMAoJtycnJomp40aRKzqaOj094ThD42aNAgiqJUWSFg27Ztjo6O169fV5Q4Ozvr6+v/+uuvipKffvqpsbHxtdde67Q1S0tLgUCQm5vbpd4yEYZi1j4hpLq6+vnz58wMQPXVLS8vnz9/vnIJE1UwdWma3rBhQ15eXmZmZqu7I8qYQTY1Ne30dKCxEAcAQBe0tLRUVFQ0NzffuHEjKCjIyspq8eLFzC4HB4fnz59nZmY2NTU9e/as1RR2Y2PjR48eFRUVVVdXNzU1ZWdnq2/eoJ6enp2dXUlJSadHMk8HlGfJCwSCtWvXHj9+/NChQzKZLC8vb8WKFWZmZoGBgaq0tmTJkqNHjyYmJspkMrlcXlJSwvxIBwQEmJqatrlusa2trbu7e1JS0sWLF+vr64uLi5lzLVu2jDlATXVFItHZs2cvXLggk8mampquX7/+3nvviUSi4OBgQsitW7d27dqVlJTE4/EoJXv27FFuhBnkUaNGdTo4oLEQBwBw12effTZx4kRCyIYNG2bNmpWYmBgbG0sIGT169N27d5OSktauXUsIefvttwsKCpgqDQ0No0aNEgqFU6ZMGTZs2Hfffad4DP/RRx+5u7vPmzdv+PDh27ZtY+4VK95ZW7FixaBBg5ycnN55553nz5+r+9I8PT3z8/MVD/6//vprBweHwsLCiRMnfvzxx8pHTpo0ifnlU/j000+joqIiIiIGDhzo5uZmY2OTk5MjEokIIZ0OUVxc3Jo1a6KjowcMGGBmZhYUFFRRUUEIaWxsLC0tzcrKermrFEWlp6cHBAQsW7bMyMjIycnpwYMHx44dmzJlCnOAmuoKBILJkycvX77c3NxcLBb7+fnZ2NhcvXqVec+RVm1JgF9++cXc3Hz06NGqHAwaio3JitAJzIlXHcZKoQ/mZzOrzKr1FKogKqwfUFBQoKOj095s+L4nl8unTJly4MCBflS3U2VlZQKBYM+ePaocjPUDNBbuBwBAF/SXFHMODg4RERERERGKVXJZJJfLMzMzq6urAwIC+ktdVYSHh48dO1YqlaqjcegziAOgCzrIQ9rK8uXLxWIxRVEqvjOless9cfv27Y8//njkyJFisVhHR8fAwGDYsGGenp6dvtHdcx1coHJKXIauru6gQYPefPPN3bt3M3eVoRtCQkL8/PwCAgJYTymUk5Nz7Nix7Ozsjpc00Ki6nYqJicnNzT19+jSPx+v1xqFPsX1DAtqgsfe63dzcEhISysvLZTJZamoqj8d7++232zuYWXRdlQVHu9qyMtXHav/+/Twe769//euZM2cqKioaGhoKCwtTUlJcXV2//PJLVVroiU4v0N7e3sDAgKZp5kW87777bvHixRRFmZmZqbIwLa3++64hISHMmjk2Njbp6enqO1GniArPBRS+/fbbDRs2qLU/HJSZmRkVFdXc3Kx6FTwX0Fj4VDSRxsYBnp6eyv/nz507lxCiWF6+lS7FAV1qWZmKY3XlyhVtbe2pU6c2NTW12nXmzBnF6vrq0+kFKuIAZenp6VpaWoMGDaqsrOz0FNz5d7ZLcQBoCO58P/sdPBeALug0D6kyRSLUXm+5GyIjI+Vy+Y4dO3R0dFrtmj59+qpVq3rrRO3p3gX6+vouXry4tLT0iy++UG//AICrEAf0bwcPHpwwYYJAIBCJRDY2NsyyaHR3s6aOGDGCoigtLa3XXnuN+Yn65JNPDAwMBALBP//5z5fP3ioPKU3Tu3fvHj58OJ/PNzAwWL9+fbev6+UMpz3R2Nh4/vz5AQMG/OUvf+n4SLaGrgPM7Pzs7OwuXDAAgOpYvh8BbVHxXjczj3nHjh3l5eXPnz//8ssvFyxYQPcga2pzc7ONjY2VlZXyHew1a9a0WieV8XIe0tDQUIqi/vGPf1RUVNTV1SUkJBCVnwt03HIHVBmrP/74gxAyadKkTltja+jodp4L0DQtk8kIIZaWlp12njv3XQmeC/RD3Pl+9jv4VDSRKr9tjY2NhoaG7u7uipLm5ua4uLi6ujp9ff2AgABF+c8//0wIUSR6Z37M6uvrmU3m1/rOnTvMJhNbpKWlMZu1tbVWVlZVVVUvdyA0NHTYsGEymYzZrKur09PTe+uttxQHdOn9gA5a7pgqY8WsEfu3v/2t48PYGjpGe3EATdMURRkaGnbceZpL/84iDuiPuPP97HdaPyuF/uLGjRuVlZXTp09XlGhra69evfrXX3/tdtZUQsjy5cvDw8Pj4uL8/PwIIYcOHZo9e7ZEImlVi8lDevbsWUUe0jt37tTV1U2bNq2H1/Vyyz3HrI7e6cP4niScJT0Yuo7V1tbSNP1yO+1JS0tT8ch+rQ+mekLvwkemsRAH9FfM7WImN5qynmRNZSp+8MEHu3fv/vnnn//yl798/vnnGRkZrY5JSUmJiYnJyclRTkHGLDPO5FvrtjZb7jkbGxuBQMA8HegAW0PXMabbjo6OKh7v7++v4pH9WlxcXFxcHNu9AHgV4D3B/or5ISkrK2tV3pOsqQypVMrj8WJjYy9evGhpaWlvb6+8t708pAKBgBDy4sWLLl5H5y33HJ/Pnz6bKYanAAAgAElEQVR9ellZ2Y8//vjy3ufPny9fvpywN3QdO3PmDCFkxowZKh7P9i3GvkDwXKAfYp4LgAZCHNBf2djYGBsbnz17tlV5T7KmMiwsLObOnZuRkREWFhYUFKQopzvMQ+rs7KylpfX9999341o6brlXhIeH8/n84OBgReIZhZs3bzKTCdkaug48efIkNjbWwsJi6dKlqtcCAFAd4oD+is/nb9q06eLFi1Kp9OHDhy0tLdXV1bdu3epJ1lSFtWvXNjc3V1RUTJ06VVHYcR5SExMTHx+fjIyMAwcOyGSyGzdu7Nu3T8XTqZjhtCfGjh17+PDhmzdvTpky5fTp01VVVU1NTffu3UtKSlq2bBmzMCpbQ6dA03RNTU1LSwtN08+ePUtNTZ08ebK2tnZmZqbq7wcAAHQNqzeKoG2qryf42WefjRo1SiAQCASCcePGJSQk0DTd0tKye/fuoUOH8ng8IyMjb2/v27dvM8cnJCQwK40PHTq0sLBw3759zA+MtbX1H3/8odyyu7v7/v37lUvy8vLa/Art3r2bOaC6unr58uUDBgzQ19d/4403tmzZQgixsLD47bffOr6KTlvulbGiafrBgwfr1q0bNWqUvr6+tra2oaHhuHHjli1b9uOPPzIHsDJ0J06cGD16tJ6enq6urpaWFiGEmSDwl7/8JSIiory8XMWr48772ATPBfoh7nw/+x2KVi3JNPQl5oXz9PR0tjvSD2CsFNLS0vz9/bnwfzRFUampqczazNBfcOf72e/guQAAAAB3IQ4Atfv999+p9qkpMzoAAKgCcQConaOjYwePplJSUtjuILzKzp07FxIScuzYMTs7Oyb0XLRokfIBHh4eYrFYW1t75MiR165dY6ufCg0NDY6Ojps3b+6buk1NTVFRUQ4ODrq6uoaGhs7OzkVFRZ22fOLEiejoaLlc3o1OgqZBHAAAr6xPP/00Pj5+06ZNPj4+d+/etbe3HzBgwKFDh06dOqU45uzZs+np6TNnzszPzx8/fjyLvWWEhobevn27z+r6+/v/61//Onz4cF1d3X//+197e/uamppOW/by8hIIBNOmTWNW34J+DXEAAKiqvr7e1dVV05pqz86dO1NSUtLS0pSXcI6Pj9fS0goMDKyqqlLr2bvn8uXLN2/e7LO6KSkpmZmZ6enpr7/+uo6OjpmZWVZWlrOzsyotr169esyYMe+8805zc3P3OgwaAnEAAKjqwIEDpaWlmtZUm+7cuRMWFrZ161ZmpUsFV1fXoKCghw8frlu3Tn1n7576+vr169d3b73k7tX9/PPPx48fP2rUqO61HB4enpubiwWe+zvEAQDcQtN0TEzMiBEj+Hy+kZHR7Nmzf//9d2aXVCrV1dUdPHgws7ly5UqRSERRFLN8dVBQ0Nq1awsLCymKcnBwiI+PFwgEgwYN+vDDD83MzAQCgaurqyInU5eaIoScOXNGIpFs3769ty4zPj6epmkvL6+Xd0VGRg4bNmz//v3nzp3r6hAlJiaKRCI9Pb2srKwZM2ZIJBILCwsmtSZDLpdv2bLFyspKKBSOHj26S4vphoaGrly5sntJOrpRt7Gx8erVq2PHju12y0ZGRm5ubnFxcZgN2K8hDgDglvDw8JCQkNDQ0NLS0osXLxYXF0+ZMuXp06eEkPj4eOVJ+QkJCVu3blVsxsXFzZw5097enqbpO3fuSKXSxYsX19XVrV69uqio6Nq1a83NzW+99VZxcXFXmyKEMG+ctbS09NZlnjp1avjw4czST60IhcJ//vOfWlpa77//fm1t7csHdDBEH3300Zo1a+rr68VicWpqamFhoZ2d3fvvv69IO7lx48Zdu3bFxsY+fvx45syZ8+fPV16pugM//vhjYWHh/Pnzu3Gx3av76NGjxsbG//znP+7u7kwkN2LECGYtMtVbHjdu3MOHD3/77bdudBs0BOIAAA6pr6+PiYmZM2fOwoULDQwMRo0a9cUXX5SVlam+CHQrOjo6zN/NTk5OiYmJ1dXVycnJ3WjH09NTJpOFhYV1rxut1NbW3rt3r1WeJ2UuLi5r1qwpKirauHFjq10qDpGrq6tEIjExMQkICKitrX3w4AEhpKGhITEx0dvb28fHx9DQcPPmzTweT5UBqa+vDwoKSkxM7MbFdrsu8z6giYnJ9u3b8/Pznz59Onv27FWrVh05ckT1locOHUoIaW/FTOgXEAcAcEh+fn5NTc2ECRMUJRMnTtTV1VXcz++JCRMm6OnpKW6hs6i0tJSm6TZvBihERkYOHz48ISHh0qVLyuVdHSJdXV1CCHM/4Pbt23V1dYr37IRC4eDBg1UZkE2bNn3wwQfm5uadHtmLdfl8PiFk5MiRrq6uxsbGBgYGW7duNTAwUEQ8qrTMDDJzswT6KcQBABzCzPJqlfPQ0NCwVbblbuPz+c+ePeuVpnqioaGB/Pk71x6BQJCcnExR1NKlS5WzUPZkiJinDJs3b1Ysk3X//v26urqOa126dCkvL49Jft1VPalrZmZG/m/ucl1dXWtr68LCQtVbFgqF5M8Bh34KcQAAhxgaGhJCWv2kVVZWWlhY9Lzxpqam3mqqh5gfp05XuXFxcQkODi4oKNi2bZuisCdDxLxMFxsbq7xS1pUrVzqudeDAgfPnz2tpaTGhA9PI9u3bKYrq9N2CntTV19cfOnTorVu3lAubm5sNDAxUb7mxsZH8OeDQTyEOAOAQZ2dnfX195X/Hf/rpp8bGxtdee43Z1NHRUbzy1lU5OTk0TU+aNKnnTfXQoEGDKIpSZYWAbdu2OTo6Xr9+XVHS6RB1wNLSUiAQ5Obmdqm3ycnJynEDc0MlNDSUpmnlxxO9XpcQ4u/vf/369bt37zKbdXV19+/fZ6YRqtgyM8impqZdumTQKIgDADhEIBCsXbv2+PHjhw4dkslkeXl5K1asMDMzCwwMZA5wcHB4/vx5ZmZmU1PTs2fP7t+/r1zd2Nj40aNHRUVF1dXVzG98S0tLRUVFc3PzjRs3goKCrKysFi9e3I2msrOze3HeoJ6enp2dXUlJiSoDkpycrK2trVzS8RB13NqSJUuOHj2amJgok8nkcnlJScnjx48JIQEBAaampt1bt1h9dYODg62trRcvXvzgwYPy8vINGzbU19e//O5kB5hB7ngFAtBwiAMAuOXTTz+NioqKiIgYOHCgm5ubjY1NTk6OSCRi9n700Ufu7u7z5s0bPnz4tm3bmPu9Li4uzGzAFStWDBo0yMnJ6Z133nn+/DkhpKGhYdSoUUKhcMqUKcOGDfvuu+8UT+W72lTv8vT0zM/PVzz4//rrrx0cHAoLCydOnPjxxx8rHzlp0qTg4GAVhygxMTE2NpYQMnr06Lt37yYlJa1du5YQ8vbbbxcUFBBC4uLi1qxZEx0dPWDAADMzs6CgoIqKCkJIY2NjaWlpVlZWN65FfXWNjIx++OEHCwuLsWPHmpub//zzz6dOnep0RQFlv/zyi7m5+ejRo7vRN9AUHSSAAbb4+vr6+vqy3Yv+AWOlwCxZ05dnDAwMNDY27sszMgghqampHR9TUFCgo6Nz8ODBvulSp+Ry+ZQpUw4cONCP6naqrKxMIBDs2bNHlYP7/vsJKsL9AADoPo3NOOfg4BAREREREdFm1pw+JpfLMzMzq6uru5Flm626qggPDx87dqxUKlVH49BnEAcAwKspJCTEz88vICCA9ZRCOTk5x44dy87O7nhJA42q26mYmJjc3NzTp0/zeLxebxz6EuIAAOiOTZs2JScnV1VV2draZmRksN2dtm3fvl0qle7YsYPdbkybNu3w4cOKbAv9om7HsrKyXrx4kZOTY2Rk1OuNQx/TYbsDANAvRUVFRUVFsd2Lznl4eHh4eLDdi1fNrFmzZs2axXYvoHfgfgAAAAB3IQ4AAADgLsQBAAAA3IU4AAAAgLvwnqCGunr1qp+fH9u96AeuXr1KCMFYkT9XeOXIUMTGxqanp7PdC+gCVZZ5BlZQNE2z3QdoLSYmptMcZQC9Ijs7e9y4ceqYWgbwMkRvGghxAACnURSVmpo6d+5ctjsCAOzA+wEAAADchTgAAACAuxAHAAAAcBfiAAAAAO5CHAAAAMBdiAMAAAC4C3EAAAAAdyEOAAAA4C7EAQAAANyFOAAAAIC7EAcAAABwF+IAAAAA7kIcAAAAwF2IAwAAALgLcQAAAAB3IQ4AAADgLsQBAAAA3IU4AAAAgLsQBwAAAHAX4gAAAADuQhwAAADAXYgDAAAAuAtxAAAAAHchDgAAAOAuxAEAAADchTgAAACAuxAHAAAAcBfiAAAAAO5CHAAAAMBdiAMAAAC4C3EAAAAAdyEOAAAA4C4dtjsAAH2qsrKSpmnlktra2oqKCsWmvr4+j8fr834BADuoVv8iAMCrberUqd999117e7W1tR8+fGhqatqXXQIAFuG5AAC3zJs3j6KoNndpaWn99a9/RRAAwCmIAwC4xdfXV0en7QeCFEW9++67fdwfAGAX4gAAbjEyMvLw8NDW1n55l5aWlre3d993CQBYhDgAgHMWLlzY0tLSqlBHR8fT09PAwICVLgEAWxAHAHCOl5cXn89vVSiXyxcuXMhKfwCARYgDADhHT0/P29u71eRAoVD4zjvvsNUlAGAL4gAALpo/f35TU5Nik8fj+fr6CoVCFrsEAKxAHADARdOnT1d+FaCpqWn+/Pks9gcA2II4AICLeDxeQECArq4us2loaDht2jR2uwQArEAcAMBR8+bNa2xsJITweLyFCxe2t6gAALzasK4wAEe1tLQMGTLk6dOnhJBLly5NnjyZ7R4BAAtwPwCAo7S0tBYtWkQIMTMzc3V1Zbs7AMAO9u8EXrlypbi4mO1eAHDRwIEDCSGvv/56eno6230B4Ki5c+ey3AOabb6+viwPAQAAAEvY/hGm2b8fQAjx9fXFnyPQiyiKSk1NZT/K7g8yMjJe4Vg8LS3N39+f5sBbUPjO90fM95PtXuD9AABue4WDAABQBeIAAAAA7kIcAAAAwF2IAwAAALgLcQAAAAB3IQ4AAADgLsQBAAD/x+nTpw0MDL755hu2O6Iu586dCwkJOXbsmJ2dHUVRFEUxK0sqeHh4iMVibW3tkSNHXrt2ja1+KjQ0NDg6Om7evLlv6jY1NUVFRTk4OOjq6hoaGjo7OxcVFXXa8okTJ6Kjo+VyeTc6yS7EAQAA/8ervd7Ap59+Gh8fv2nTJh8fn7t379rb2w8YMODQoUOnTp1SHHP27Nn09PSZM2fm5+ePHz+exd4yQkNDb9++3Wd1/f39//Wvfx0+fLiuru6///2vvb19TU1Npy17eXkJBIJp06ZVVlZ2r6tsQRwAAPB/eHp6VlVVzZw5U90nqq+v7+PMDjt37kxJSUlLSxOLxYrC+Ph4LS2twMDAqqqqvuyMii5fvnzz5s0+q5uSkpKZmZmenv7666/r6OiYmZllZWU5Ozur0vLq1avHjBnzzjvvNDc3d6/DrEAcAADAjgMHDpSWlvbZ6e7cuRMWFrZ161aBQKBc7urqGhQU9PDhw3Xr1vVZZ1RUX1+/fv36uLi4Pqv7+eefjx8/ftSoUd1rOTw8PDc3t3sdZgviAACA/7l06ZKVlRVFUZ999hkhJDExUSQS6enpZWVlzZgxQyKRWFhYHD16lDk4Pj5eIBAMGjToww8/NDMzEwgErq6uP/30E7NXKpXq6uoOHjyY2Vy5cqVIJKIoqqysjBASFBS0du3awsJCiqIcHBwIIWfOnJFIJNu3b1fTpcXHx9M07eXl9fKuyMjIYcOG7d+//9y5c23WpWk6JiZmxIgRfD7fyMho9uzZv//+O7Or4yEihMjl8i1btlhZWQmFwtGjR6empqre59DQ0JUrV5qYmHTlQrtft7Gx8erVq2PHju12y0ZGRm5ubnFxcf3o6RLiAACA/3njjTcuX76s2Pzoo4/WrFlTX18vFotTU1MLCwvt7Ozef//9pqYmQohUKl28eHFdXd3q1auLioquXbvW3Nz81ltvMTlU4+PjlRf8T0hI2Lp1q2IzLi5u5syZ9vb2NE3fuXOHEMK8YtbS0qKmSzt16tTw4cP19PRe3iUUCv/5z39qaWm9//77tbW1Lx8QHh4eEhISGhpaWlp68eLF4uLiKVOmPH36lHQ2RISQjRs37tq1KzY29vHjxzNnzpw/f/6vv/6qSod//PHHwsLC+fPnd+Niu1f30aNHjY2N//nPf9zd3ZnAbsSIEQkJCco/6p22PG7cuIcPH/7222/d6DYrEAcAAHTO1dVVIpGYmJgEBATU1tY+ePBAsUtHR4f5Q9nJySkxMbG6ujo5Obkbp/D09JTJZGFhYb3X6/+pra29d++evb19ewe4uLisWbOmqKho48aNrXbV19fHxMTMmTNn4cKFBgYGo0aN+uKLL8rKyvbt26d8WJtD1NDQkJiY6O3t7ePjY2houHnzZh6Pp8r41NfXBwUFJSYmduNiu12XeR/QxMRk+/bt+fn5T58+nT179qpVq44cOaJ6y0OHDiWE5OXldaPnrEAcAADQBbq6uoQQxR+7rUyYMEFPT09xz1xzlJaW0jTd5s0AhcjIyOHDhyckJFy6dEm5PD8/v6amZsKECYqSiRP/P3t3HhfFle4N/DQ00M3WgCwSEJRFEAHRyESY8DqME2L0oqIgaEwGMxpcETCJsqgsgusFLgbixDAkcWNRA5kgxquRG43rRImICQMooGgERBbpRmio94/62LcvIt00dBdt/b5/pavqnHrqWOl+qOU8ntra2pI7IP1ID1FlZaVQKJQ8Z8fn88eOHSvP+MTExHz44YdWVlYytxzBtjo6OoSQyZMne3t7m5iYCASChIQEgUAgyXjk6ZkeZPpiiVpAHgAAMJJ0dHSampqYjqK/rq4u8vx37mV4PF5OTg6Hw/nggw9EIpFkOf0inL6+vvTGRkZGHR0dMvdL32WIi4vjPFdXVycUCgdvdeHChfLy8hUrVsjsf2TbWlpaEkLoBzho2tratra2NTU18vfM5/PJ8wFXC8gDAABGTE9PT2trq7W1NdOB9Ef/OMmc5cbLyysqKqqqqiopKUmy0MjIiBDS71dfzsOkH6ZLS0ujpFy6dGnwVtnZ2WfPntXQ0KBTB7qT5ORkDocj89mC4bTV19d3dHS8ffu29EKxWCwQCOTvubu7mzwfcLWAPAAAYMSUlpZSFDVjxgz6I5fLfdkdBBUzNzfncDjyzBCQlJTk7Ox848YNyRJXV1d9fX3pn7orV650d3e//vrrMnsbN24cj8crKysbUrQ5OTnSeQN9fSU2NpaiKOnbEyPelhASHBx848aNO3fu0B+FQmFdXR39GqGcPdODbGFhMaRDZhDyAACAYenr63vy5IlYLL5582ZERISNjU1oaCi9ysHBoaWlpbCwsKenp6mpqa6uTrqhiYnJgwcPamtrOzo6enp6SkpKlPfeoK6urp2d3f3792VuSd8d0NTUlF6ycePGEydOHDp0qL29vby8fPXq1ZaWlmFhYfL0tnz58qNHj2ZlZbW3t/f29t6/f//hw4eEkJCQEAsLC8XmLVZe26ioKFtb29DQ0Pr6+sePH2/atEkkEr347OQg6EEefAaCUQV5AADA//r00089PT0JIZs2bZo/f35WVlZaWhohxN3d/c6dOwcOHNi4cSMhZPbs2VVVVXSTrq4uNzc3Pp/v4+MzceLEc+fOSW7Dr1mzxtfXd8mSJU5OTklJSfS1Yi8vL/rFwtWrV5ubm7u4uMyZM6elpUXZhzZ37tyKigrJjf9vvvnGwcGhpqbG09Nz/fr10lvOmDEjKipKesm2bdtSUlISExNNTU1nzpw5fvz40tJSPT09QojMIUpPT4+MjNy1a9eYMWMsLS0jIiKePHlCCOnu7m5sbCwqKlLgWJTX1tjY+Pz589bW1h4eHlZWVlevXi0uLpY5o4C0a9euWVlZubu7KxAbMyimBQYGBgYGMh0FvFIIIXl5eUxHAcyjp6xR6i7CwsJMTEyUugt5yHPOV1VVcbncgwcPqiYkmXp7e318fLKzs9WorUzNzc08Hm/v3r3ybKyC81MeuB4AADAs6lJizsHBITExMTExccCqOSrW29tbWFjY0dEREhKiLm3lER8f7+HhER4erozOlUQ98gBPT09NTc0hXZmR3/Lly3k8HofDUaPXPAaxd+9e+oGg/fv300tGtoiqykqyJiYmuri4GBoa6ujoODg4fPLJJyP45SVdcZXG5XJNTU3/8pe/nDhxYqT2MvipNcqrvr4yJxJIi46ODgoKCgkJYbykUGlp6fHjx0tKSgaf0mBUtZUpNTW1rKzs5MmTWlpaI9658qhHHnDt2jVfX18ldZ6TkzMKq2so7KOPPpKeFZWMdBHVke1tED/88MO6detqa2ubm5tTUlLS09ODgoJGqnNJxVWBQEBfGWtqasrLy2toaFi0aNGQ5j8fxOCn1iiv+vrKnEhKFRMTk5OT09bWNmHChGPHjjEdjlySk5PDw8N37NjBbBizZs06fPiwpPiCWrQdXFFR0bNnz0pLS42NjUe8c6VSjzyAxuFwhtpE9WU9R6FhFlHtN4YqK8mqr69P33k1MDBYvHhxQEDAqVOn6KerlMHY2HjWrFn/9V//RQjJz8+Xuf0InlqjvOqrhJqeSEqVkpLy7NkziqLu3r0bGBjIdDjy8vPz27lzJ9NRvGrmz58fHR0t/Z6FulCnPECBKy1DKuupQJ7BBioujSrx3XffSf8fZWpqSgiROQ3ZMI0fP548nz1tcCN4ao3mqq8jiKkTCQAGp055QHV1tbOzs56eHv1+jvQM2OfPn3dxcREIBDwez83N7fvvvycDlfUkhBw8eHD69Ok8Hk9PT2/8+PGSObM0NDSKi4vfeecdgUBgaWn5j3/8Q56QZBbcpF5erHP37t26uroGBgaNjY0bN260srJavXq1np6ehobG66+/bmFhoaWlpaenN23aNB8fH3ouDiMjo08++WTwo+6nXxHV6upqzgv++7//W84x7Nfb4Acoc3CGpKGhgc/nT5gwQbHmcrp58yYhZObMmZIlqjm1hlP1FScSAAwLI28pSJPzvcFZs2bZ2dndvXu3p6fn1q1bb7zxBo/H+/e//02vLSgoiI+Pb2lpefz48YwZM8aMGUMvX7RoEV3Wk0a/5Lpjx47Hjx+3tLT8/e9/f/fddymKio2NJYScPXu2tbW1paVlzpw5Ojo6nZ2d8sQvadvW1tbY2Ojj46Onp9fd3U2v3bp1q7a29sGDB1tbW2/evDlt2jRTU9Pff/9duu2GDRv27du3cOHCX3/9ddu2bYSQK1eudHZ2Njc3z549mxBSXFzc1NTU2dlJP4NaVlY2+FHT7+x+9tln9Ef6Wvq+ffvoVZs3b6YP7eHDh8bGxt7e3r29vfKPoXRvch7gywZHfp2dnQYGBuHh4XJuT+R7b1D6+QChUFhSUmJra+vn5/f06VPJNso+tezt7e/evUtR1MWLFzU0NMaPH0/vvaSkZP78+ZLNcCIpdiKNkveyVEDOcx5GlVFyfjIfgfx5wJQpUyQf6b/bPvrooxe3TElJIc+La0l/9XR3dxsZGfn6+kq2FIvF6enp1PNvGZFIRC//+uuvCSG3bt2SJ/5+bTMzMwkh1dXVFEUJhUJ9ff2QkBDJxlevXiWEJCYmDtiWoij667ujo4P++NVXXxFCysvLpZvn5uYOftSDfH1LCwgI4PF4v/322+C9DfL1PdQDlB6cIYmNjZ04cWJ7e7uc28ufB/RLi93c3L766iv6ju+LlHFqSfIAiqLo2VfWrVtH/d88ACeSwifSKPmeVQHkAepolJyfXEWuIYwCbm5uAoGAzgb6oR8jePGN3ps3b7a2tr799tuSJZqamhs2bHhZD4rNCi5dcHOoxTpf1ptYLJYZ2MuO+mXy8/O/+eabXbt2OTk5KdzbcKqRyu/EiRP5+fmnT582MDAYUkN5CAQC+mkAsVj86NGj06dPh4eHp6SkXLhwgX4iQZqyT63t27d/9913mZmZwcHB0stxIvUz1BNpBN80Gc3S0tIKCgqYjgKGQJ5pnlVAnZ4P6EdLS0vyRVBcXPynP/3JzMxMR0dH+santPb2dvK8cJZqDKdYpzzkOeoBPX78eP369Z6envQfoAr3puwDJITk5ubu3LmztLSUfoJPebhcrpWV1fLly/fu3VtZWSl5q0qVp5Yyqr7Kgw0nEgC8jLpeDxCLxS0tLTY2NoSQ+vr6gICAhQsX/uMf/3jttdf27ds34LfPa6+9Rv5vYWllG06xTpnkPOoBbdiwobW19YcffpA8kK9Yb0o9QELIvn37vv/++x9++KHfL4RS0dVB6MKjqj+16Kqve/fuTUpKok9vghNp2NjwVzKHw4mMjFy8eDHTgcAQ5Ofn97v4xwh1vR5w7ty5vr4+eoqV8vLynp6eNWvW2NnZ0dO3Ddhk/PjxJiYmp0+fVlmQwynWKZOcR/2i4uLiw4cPb9myZfLkyfSSjz/+WLHelHeAFEVt2rSpvLy8sLBQlUkAIeTnn38mhNBXuRk5tUa26qtMr/aJBAAyqVMe0N3d3dbWJhaLr1+/Hh4eTpeGJITQfzadOXOmq6urqqpK+p6idFlPDQ2NmJiYH3/8MTw8vKGhoa+vr6Ojg/6zT0mGU6xTpkGOehDt7e2rVq3y8PCgy2h2dXX961//Kisrk3MM+92RVd4B3r59e/fu3QcOHNDS0pJ+M23v3r3D7PlFIpGor6+PoqgHDx7k5OTExcWZmppGRkYShk6tka36KtOrfSIBgGxMP6go7/sCOTk5vr6+5ubmXC53zJgxS5Ysqaurk6zdtGmTiYmJkZFRUFAQ/Uayvb19fX399evXbW1t+Xz+m2++Sb+D9Omnn7q5ufF4PB6PN3Xq1MzMzF27dtHFQB0dHWtqag4dOkTPCmltbS3zlYHMzEx6kmq67eeff25oaEgIsbW1pd9p7Ovr27Nnj6Ojo5aWlrv4CX4AACAASURBVLGxcUBAQGVlJd1Wst9x48bRFcDS09Pp3saPH3/+/PmdO3cKBAJCiIWFxeHDh3Nzcy0sLAghxsbGR48efdlRR0RE0Jvp6ektXLhw37599Ayaurq68+bNG/B3dM6cOXKOYVxcnHRvgx+gzMEZRHl5+YCn6549e2SeKpQcz06fOHHixZcFdHR0HB0d16xZU19fL9lSeaeWJAZTU1P6HQFpH3/8sfR7gziRFDuRRsnz2Cog85yHUWiUnJ8ciulZvulHedlwAw9UhsPh5OXl4V4p0PdfGf+WUwGc8+polJyf6nRfAAAAAEYW8oDB/Pbbby9OniqhpPLVbICBBWDQmTNnoqOjR3nla2ldXV3Ozs5xcXGqadvT05OSkuLg4KCtrW1kZOTq6lpbWyuz52+//XbXrl3yz70xeqjre4Oq4ezszPgVm1cSBhaAKdu2bbtx48bhw4cNDAwWLVrk4ODQ2tp66NChkJCQuXPn0tucPn361KlT+/fvLywsZDZaWmxsbGVlpcraBgcH3759+/Dhw6+//npTU9OqVauePn0qs+d58+bdvXt31qxZhYWFqpyoZvhwPQAAQHEjWIFaBXXSd+7cmZubm5+fLz075yivfH3x4sVbt26prG1ubm5hYWFBQcEbb7zB5XItLS2LiopcXV3l6XnDhg1TpkyZM2eOZO5OtYA8AABAcSNYT1nZpZmrq6u3bNmSkJDA4/Gkl4/mytcikejjjz9OT09XWdvPPvts2rRp9HxiCvQcHx9fVlamWMBMQR4AAGxHvbzqcXh4uLa2Nv2WIyFk7dq1enp6HA6Hnj6yXz3ljIwMHo9nbm6+atUqS0tLHo/n7e0tmURhSF0RQk6dOmVoaJicnDxSh5mRkUFR1Lx5815cNZzK1zILQ/f29m7dutXGxobP57u7u9Mvy8kpNjZ27dq1ZmZmQzlQxdt2d3dfvnzZw8ND4Z6NjY1nzpxJlxkbWrjMQR4AAGwXHx8fHR0dGxvb2Nj4448/3rt3z8fH59GjR4SQjIwM6ZfxMjMzExISJB/T09P9/f3pOorV1dXh4eGhoaFCoXDDhg21tbXXr18Xi8VvvfUWXVxxSF2R5/WZ+vr6Ruowi4uLnZyc6MkY+uHz+V9++aWGhsbKlSs7Oztf3GCQIVqzZk1kZKRIJDIwMMjLy6upqbGzs1u5cqVktqjNmzfv3r07LS3t4cOH/v7+S5culZ47chA//fRTTU3N0qVLFThYxdo+ePCgu7v7559/9vX1pTO5SZMmZWZmSv+oy+x56tSpDQ0Nv/zyiwJhMwJ5AACwmkgkSk1NXbhw4bJlywQCgZub2/79+5ubmz///HPFOuRyufTfzS4uLllZWR0dHTk5OQr0M3fu3Pb29i1btigWRj+dnZ137959cfosCS8vr8jIyNraWnqOSGlyDpG3t7ehoaGZmVlISEhnZ2d9fT0hpKurKysrKyAgYNGiRUZGRnFxcVpaWvIMiEgkioiIyMrKUuBgFW5LPw9oZmaWnJxcUVHx6NGjBQsWrFu37siRI/L37OjoSAh52WRooxDyAABgteGXdR7E9OnTdXV1JZfQGdTY2EhR1IAXAyS2b9/u5OSUmZl54cIF6eXDKQxdWVkpFAolz9nx+fyxY8fKMyAxMTEffvihlZWVzC1HsK2Ojg4hZPLkyd7e3iYmJgKBICEhQSAQSDIeeXqmB5m+WKIWkAcAAKspu+qxjo5OU1PTiHQ1HF1dXeT579zLKKPyNX2XIS4uTjJBSF1dnVAoHLzVhQsXysvLV6xYIbP/kW1raWlJ/m/tUG1tbVtb25qaGvl7puf5pgdcLSAPAABWU2rV456enhEsoDwc9I+TzFlu6MrXVVVVSUlJkoXDGSL6Ybq0tDTpCe0vXbo0eKvs7OyzZ89qaGjQqQPdSXJyMofDkflswXDa6uvrOzo69isSJhaL6Qodcvbc3d1Nng+4WkAeAACsJrPqMZfL7VcgUX6lpaUURc2YMWP4XQ2Tubk5h8ORZ4aAka18PW7cOB6PV1ZWNqRoc3JypPMG+oJKbGwsRVHStydGvC0hJDg4+MaNG3fu3KE/CoXCuro6+jVCOXumB5ku06UWkAcAAKvJrHrs4ODQ0tJSWFjY09PT1NRUV1cn3fzFesp9fX1PnjwRi8U3b96MiIiwsbGhK6QPtauSkpIRfG9QV1fXzs7u/v378gzICFa+5vF4y5cvP3r0aFZWVnt7e29v7/379x8+fEgICQkJsbCwUGzeYuW1jYqKoova19fXP378eNOmTSKR6MVnJwdBD/LgMxCMKsgDAIDttm3blpKSkpiYaGpqOnPmzPHjx5eWlurp6dFr16xZ4+vru2TJEicnp6SkJPp6r5eXF/024OrVq83NzV1cXObMmdPS0kII6erqcnNz4/P5Pj4+EydOPHfunOSu/FC7Gllz586tqKiQ3Pj/5ptvHBwcampqPD09169fL73ljBkzoqKi5ByirKystLQ0Qoi7u/udO3cOHDiwceNGQsjs2bOrqqoIIenp6ZGRkbt27RozZoylpWVERMSTJ08IId3d3Y2NjUVFRQoci/LaGhsbnz9/3tra2sPDw8rK6urVq8XFxTJnFJB27do1Kysrd3d3BWJjxsiULx6GwMDAwMBApqOAVwpBLXagKIqJ+u5hYWEmJiaq3CNNnnO+qqqKy+UePHhQNSHJ1Nvb6+Pjk52drUZtZWpububxeHv37pVnY9WfnwPC9QAAgJE0aivOOTg4JCYmJiYmDlg1R8V6e3sLCws7OjoUqC/KVFt5xMfHe3h4hIeHK6NzJUEeAADAFtHR0UFBQSEhIYyXFCotLT1+/HhJScngUxqMqrYypaamlpWVnTx5UktLa8Q7Vx7kAQAAIyMmJiYnJ6etrW3ChAnHjh1jOpyBJScnh4eH79ixg9kwZs2adfjwYUm1BbVoO7iioqJnz56VlpYaGxuPeOdKxWU6AACAV0RKSkpKSgrTUcjm5+fn5+fHdBSvmvnz58+fP5/pKBSB6wEAAADshTwAAACAvZAHAAAAsBfyAAAAAPZCHgAAAMBiTE9kRAUGBjI9BgAAAMxg+keY4lAUxewQXLp0iZ5bGwBULzg4OCIiwsvLi+lAAFhq8eLFzAbAfB4AAAzicDh5eXmMfxMBAFPwfAAAAAB7IQ8AAABgL+QBAAAA7IU8AAAAgL2QBwAAALAX8gAAAAD2Qh4AAADAXsgDAAAA2At5AAAAAHshDwAAAGAv5AEAAADshTwAAACAvZAHAAAAsBfyAAAAAPZCHgAAAMBeyAMAAADYC3kAAAAAeyEPAAAAYC/kAQAAAOyFPAAAAIC9kAcAAACwF/IAAAAA9kIeAAAAwF7IAwAAANgLeQAAAAB7IQ8AAABgL+QBAAAA7IU8AAAAgL2QBwAAALAX8gAAAAD2Qh4AAADAXsgDAAAA2IvLdAAAoFJHjx7t6OiQXnLmzJnW1lbJx4CAADMzM5XHBQDM4FAUxXQMAKA6oaGhX331lZaWFv2R/gbgcDiEkN7eXn19/cbGRh0dHSZDBAAVwn0BAHZZsmQJIaTnObFYLBaL6f/W1NQMCgpCEgDAKrgeAMAuYrHYwsKipaVlwLVnz57985//rOKQAIBBuB4AwC5cLnfJkiWS+wLSTE1NZ86cqfqQAIBByAMAWGfJkiU9PT39Fmppab333nuampqMhAQATMF9AQDWoSjKxsbm/v37/ZZfvXrV09OTkZAAgCm4HgDAOhwOZ9myZf1uDYwbN2769OlMhQQATEEeAMBG/W4NaGlphYaG0m8PAgCr4L4AAEs5OztXVlZKPt66dWvy5MkMxgMAjMD1AACWeu+99yS3BlxcXJAEALAT8gAAllq2bJlYLCaEaGlp/fWvf2U6HABgBu4LALDX9OnTf/75Zw6HU1tba2Njw3Q4AMAAXA8AYK/333+fEPLGG28gCQBgLdQbVJFLly6lpqYyHQXA/9HV1cXhcJ49exYUFMR0LAD/h5eXV1RUFNNRsAKuB6jIvXv3jh07xnQUr6b79+9jbIfq8uXLly9f5vF4FhYW1tbWTIejLDg31NTly5cvXbrEdBRsgesBKlVQUMB0CK+g/Pz84OBgjO2Q0BcACgoKqqurHRwcmA5HWXBuqClcoFIlXA8AYLVXOAkAAHkgDwAAAGAv5AEAAADshTwAAACAvZAHAAAAsBfyAACQ18mTJwUCwT//+U+mA1GWM2fOREdHHz9+3M7OjsPhcDic9957T3oDPz8/AwMDTU3NyZMnX79+nak4Jbq6upydnePi4lTTtqenJyUlxcHBQVtb28jIyNXVtba2VmbP33777a5du3p7exUIElQAeQAAyOvVnoZ827ZtGRkZMTExixYtunPnjr29/ZgxYw4dOlRcXCzZ5vTp0wUFBf7+/hUVFdOmTWMwWlpsbKx00Uhltw0ODv76668PHz4sFAp//fVXe3v7p0+fyux53rx5PB5v1qxZra2tioUKSoU8AADkNXfu3La2Nn9/f2XvSCQSeXt7K3sv0nbu3Jmbm5ufn29gYCBZmJGRoaGhERYW1tbWpspg5HTx4sVbt26prG1ubm5hYWFBQcEbb7zB5XItLS2LiopcXV3l6XnDhg1TpkyZM2cOXdoKRhXkAQAw6mRnZzc2Nqpsd9XV1Vu2bElISODxeNLLvb29IyIiGhoaPvroI5UFIyeRSPTxxx+np6errO1nn302bdo0Nzc3xXqOj48vKytTLGBQKuQBACCXCxcu2NjYcDicTz/9lBCSlZWlp6enq6tbVFT0zjvvGBoaWltbHz16lN44IyODx+OZm5uvWrXK0tKSx+N5e3tfuXKFXhseHq6trT127Fj649q1a/X09DgcTnNzMyEkIiJi48aNNTU1HA6Hnubo1KlThoaGycnJSjq0jIwMiqLmzZv34qrt27dPnDjxiy++OHPmzIBtKYpKTU2dNGmSjo6OsbHxggULfvvtN3rV4ENECOnt7d26dauNjQ2fz3d3d8/Ly5M/5tjY2LVr15qZmQ3lQBVv293dffnyZQ8PD4V7NjY2njlzZnp6+qt9d0kdIQ8AALm8+eabFy9elHxcs2ZNZGSkSCQyMDDIy8urqamxs7NbuXJlT08PISQ8PDw0NFQoFG7YsKG2tvb69etisfitt966d+8eISQjI2Px4sWSrjIzMxMSEiQf09PT/f397e3tKYqqrq4mhNCPmPX19Snp0IqLi52cnHR1dV9cxefzv/zySw0NjZUrV3Z2dr64QXx8fHR0dGxsbGNj448//njv3j0fH59Hjx4RWUNECNm8efPu3bvT0tIePnzo7++/dOnSf/3rX/IE/NNPP9XU1CxdulSBg1Ws7YMHD7q7u3/++WdfX186sZs0aVJmZqb0j7rMnqdOndrQ0PDLL78oEDYoD/IAABgWb29vQ0NDMzOzkJCQzs7O+vp6ySoul0v/oezi4pKVldXR0ZGTk6PALubOndve3r5ly5aRi/p/dXZ23r17197e/mUbeHl5RUZG1tbWbt68ud8qkUiUmpq6cOHCZcuWCQQCNze3/fv3Nzc3f/7559KbDThEXV1dWVlZAQEBixYtMjIyiouL09LSkmd8RCJRREREVlaWAgercFv6eUAzM7Pk5OSKiopHjx4tWLBg3bp1R44ckb9nR0dHQkh5ebkCkYPyIA8AgJGhra1NCJH8sdvP9OnTdXV1JdfMR4/GxkaKoga8GCCxfft2JyenzMzMCxcuSC+vqKh4+vTp9OnTJUs8PT21tbUld0D6kR6iyspKoVAoec6Oz+ePHTtWnvGJiYn58MMPraysZG45gm11dHQIIZMnT/b29jYxMREIBAkJCQKBQJLxyNMzPcj0xRIYPZAHAICK6OjoNDU1MR1Ff11dXeT579zL8Hi8nJwcDofzwQcfiEQiyXL6RTh9fX3pjY2MjDo6OmTul77LEBcXx3murq5OKBQO3urChQvl5eUrVqyQ2f/ItrW0tCSE0A9w0LS1tW1tbWtqauTvmc/nk+cDDqMH8gAAUIWenp7W1lZra2umA+mP/nGSOcuNl5dXVFRUVVVVUlKSZKGRkREhpN+vvpyHST9Ml5aWRkm5dOnS4K2ys7PPnj2roaFBpw50J8nJyRwOR+azBcNpq6+v7+joePv2bemFYrFYIBDI33N3dzd5PuAweiAPAABVKC0tpShqxowZ9Ecul/uyOwgqZm5uzuFw5JkhICkpydnZ+caNG5Ilrq6u+vr60j91V65c6e7ufv3112X2Nm7cOB6PV1ZWNqRoc3JypPMG+vpKbGwsRVHStydGvC0hJDg4+MaNG3fu3KE/CoXCuro6+jVCOXumB9nCwmJIhwzKhjwAAJSlr6/vyZMnYrH45s2bERERNjY2oaGh9CoHB4eWlpbCwsKenp6mpqa6ujrphiYmJg8ePKitre3o6Ojp6SkpKVHee4O6urp2dnb379+XuSV9d0BTU1N6ycaNG0+cOHHo0KH29vby8vLVq1dbWlqGhYXJ09vy5cuPHj2alZXV3t7e29t7//79hw8fEkJCQkIsLCwUm7dYeW2joqJsbW1DQ0Pr6+sfP368adMmkUj04rOTg6AHefAZCED1kAcAgFw+/fRTT09PQsimTZvmz5+flZWVlpZGCHF3d79z586BAwc2btxICJk9e3ZVVRXdpKury83Njc/n+/j4TJw48dy5c5Lb8GvWrPH19V2yZImTk1NSUhJ9rdjLy4t+sXD16tXm5uYuLi5z5sxpaWlR9qHNnTu3oqJCcuP/m2++cXBwqKmp8fT0XL9+vfSWM2bMiIqKkl6ybdu2lJSUxMREU1PTmTNnjh8/vrS0VE9PjxAic4jS09MjIyN37do1ZswYS0vLiIiIJ0+eEEK6u7sbGxuLiooUOBbltTU2Nj5//ry1tbWHh4eVldXVq1eLi4tlzigg7dq1a1ZWVu7u7grEBkpEgUrQM4QwHcWrCWOrgMDAwMDAQKXuIiwszMTERKm7kEnOc6OqqorL5R48eFAFIcmjt7fXx8cnOztbjdrK1NzczOPx9u7dK8/GKjg/QQLXAwBAWdSlxJyDg0NiYmJiYuKAVXNUrLe3t7CwsKOjIyQkRF3ayiM+Pt7DwyM8PFwZncNwIA8AACDR0dFBQUEhISGMlxQqLS09fvx4SUnJ4FMajKq2MqWmppaVlZ08eVJLS2vEO4dhQh7wSlFGeXiVlZxPTEx0cXExNDTU0dFxcHD45JNPlPfH2ZEjRzgczjAr2qn1aCtbTExMTk5OW1vbhAkTjh07xnQ4cklOTg4PD9+xYwezYcyaNevw4cOS4gtq0XZwRUVFz549Ky0tNTY2HvHOYfi4TAcAI4lSQgEPZfQ5oB9++GHdunUhISFaWlolJSXLli0rLy8vKSlRxr6OHDlib29/6dKl6upqupKNAtR6tJUtJSUlJSWF6SiGzM/Pz8/Pj+koXjXz58+fP38+01HAS+F6gHrrV6Z9RMrDK6NPeejr69NPlhkYGCxevDggIODUqVP00+Mj6/Hjx7dv36YL23z99dfyN3yVRhsAgIY8QL0po0y7iku/S3z33XfSb2abmpoSQmROs6qA/Pz8uXPnzps3j8fj0Y+Iy9nwVRptAAAa8oDR5fz58y4uLgKBgMfjubm5ff/995JVBw8enD59Oo/H09PTGz9+fFJSUr8y7f3Kw0+aNInD4WhoaLz++uv0r+knn3xC9/zll1++bF+D90mGV219SBoaGvh8/oQJExQfzZc4cuTIwoULDQwM/Pz8amtrz58//+I2bBttAGAvBt9ZZBU532MuKCiIj49vaWl5/PjxjBkzxowZQy+nZyPZsWPH48ePW1pa/v73v7/77rsURS1atIgu006jr6Lv27ePoiixWDx+/HgbGxuxWCzZIDIyUjKf+cv2NUifFEVt3bpVW1v74MGDra2tN2/enDZtmqmp6e+//06vjY2NJYScPXu2ra2tsbHRx8dHT0+vu7t7qMPV2dlpYGAQHh4uz8ZDmj+grq7OzMyMHpODBw8SQv72t7/124YNo82S97Mxt4SaYsn5OUrg/xAVUeD7iH7MqrGxsbu728jIyNfXV7JKLBanp6dTsn5F6N+z/Px8+mNnZ6eNjU1bW9sg+xq8T6FQqK+vHxISIll79epVQkhiYiL9kf5lEolE9MfMzExCSHV19ZAOnO5n4sSJ7e3t8mw8pLHdsWPH8uXL6f9ua2vT0dExNDQUCoWSDVgy2iz5nkUeoKZYcn6OErgvMHrRL9r29vbevHmztbX17bfflqzS1NTcsGGDzB5WrFghEAjS09Ppj4cOHVqwYIGhoeEg+xq8w+FUW5ffiRMn8vPzv//+ewMDgyE1lAd9U4D+b0NDQz8/v/b2dumJVNkz2seOHeO86oKDgwkhTEcBQ6Yu75q+GvDe4OhSXFy8Z8+eioqK9vZ2yRd6e3s7eV7hdEj09fU//PDDPXv2XL169Q9/+MNnn30m/X/XgPsa3HCqrcspNzc3NTW1tLT0tddeG6k+JW7dulVeXv7i0/hff/21ZA419oz2jBkzIiMjR6SrUevSpUvp6en0VQFQI/TVNVAN5AGjSH19fUBAwMKFC//xj3+89tpr+/bt++STTwgh9C9ic3OzAn2Gh4enp6enpaWtXr163Lhx9vb2g+9rcMOpti6Pffv2ff/99z/88EO/H7+Rcvjw4SVLlhw5ckSy5MmTJ1ZWVqdPn/7999/pGVTYM9rW1taLFy8eka5Gs/T0dDYc5iumoKCA6RBYBPcFRpHy8vKenp41a9bY2dnxeDwOh0MvHz9+vImJyenTpxXok/6uP3bs2JYtWyIiImTua3DDqbY+OIqiNm3aVF5eXlhYqKQkgKKo3NzctWvXSi80NjYOCgrq7e2VJAdsGG0AAAnkAaOIjY0NIeTMmTNdXV1VVVWS28A6OjoxMTE//vhjeHh4Q0NDX19fR0fH7du3yQtl2gfsduPGjWKx+MmTJ3/+859l7mvwPodTbX1wt2/f3r1794EDB7S0tKRvE+7du3eYPUtcvHjR0NDwj3/8Y7/lq1evJlITCrFhtAEA/hfTDyqyhZzPLW/atMnExMTIyCgoKIh+idze3r6+vp6iqE8//dTNzY3H4/F4vKlTp2ZmZlIUdf36dVtbWz6f/+abb8bFxdFXtnV1defNmyfdra+v7xdffCHnvgbvs6+vb8+ePY6OjlpaWsbGxgEBAZWVlXSHmZmZdIUSR0fHmpqazz//nH5KztbW9t///vfgB15eXj7g+blnz54RGdu//e1venp6XC53ypQp169flyxPSkqytLSk92VlZUWP6is/2hRrnsfG+wJqiiXn5yjBoV6V+cxHufz8/ODgYIy2MmBsFRAUFERYcBcW54aaYsn5OUrgvgAAAAB7IQ8AVfjtt98GeVdY8s4eALPOnDkTHR19/PhxOzs7+uR87733pDfw8/MzMDDQ1NScPHny9evXmYpToqury9nZOS4uTjVte3p6UlJSHBwctLW1jYyMXF1da2trZfb87bff7tq1S+aEGcAU5AGgCs7OzoPcncrNzWU6QACybdu2jIyMmJiYRYsW3blzx97efsyYMYcOHSouLpZsc/r06YKCAn9//4qKimnTpjEYLS02NrayslJlbYODg7/++uvDhw8LhcJff/3V3t7+6dOnMnuma3rNmjWLnhIDRhvkAQCgFP1KKo+Srl5m586dubm5+fn50rNYZmRkaGhohIWFtbW1KXXvirl48eKtW7dU1jY3N7ewsLCgoOCNN97gcrmWlpZFRUWurq7y9Lxhw4YpU6bMmTNHLBYrFjAoD/IAAFCKESyprOzqzNXV1Vu2bElISODxeNLLvb29IyIiGhoaPvroI+XtXTEikejjjz+WzGOtgrafffbZtGnT3NzcFOs5Pj6+rKxMsYBBqZAHAMBLUS8vfBweHq6trU2/6EgIWbt2rZ6eHofDoadi7FdSOSMjg8fjmZubr1q1ytLSksfjeXt7S+ZRGFJXhJBTp04ZGhomJyeP1GFmZGRQFDVv3rwXV23fvn3ixIlffPHFmTNnhjpEMmtD9/b2bt261cbGhs/nu7u7D2n+49jY2LVr15qZmQ3lQBVv293dffnyZQ8PD4V7NjY2njlzJl2ya2jhgpIhDwCAl4qPj4+Ojo6NjW1sbPzxxx/v3bvn4+Pz6NEjQkhGRob0fL2ZmZkJCQmSj+np6f7+/nQpxerq6vDw8NDQUKFQuGHDhtra2uvXr4vF4rfeeouurzikrsjzEk19fX0jdZjFxcVOTk70fAz98Pn8L7/8UkNDY+XKlZ2dnS9uMMgQrVmzJjIyUiQSGRgY5OXl1dTU2NnZrVy5UjJh1ObNm3fv3p2Wlvbw4UN/f/+lS5dKTx85iJ9++qmmpmbp0qUKHKxibR88eNDd3f3zzz/7+vrSmdykSZPoeTXk73nq1KkNDQ2//PKLAmGD8iAPAICBiUSi1NTUhQsXLlu2TCAQuLm57d+/v7m5+fPPP1esQy6XS//d7OLikpWV1dHRkZOTo0A/c+fObW9v37Jli2Jh9NPZ2Xn37l1JMYgXeXl5RUZG1tbWbt68ud8qOYfI29vb0NDQzMwsJCSks7Ozvr6eENLV1ZWVlRUQELBo0SIjI6O4uDgtLS15BkQkEkVERGRlZSlwsAq3pZ8HNDMzS05OrqioePTo0YIFC9atWyeZkFuenh0dHQkhL5s0DJiCPAAABjbUwsdDMn36dF1dXckldAY1NjZSFDXgxQCJ7du3Ozk5ZWZmXrhwQXr5cGpDV1ZWCoVCyXN2fD5/7Nix8gxITEzMhx9+aGVlJXPLEWyro6NDCJk8ebK3t7eJiYlAIEhISBAIBJKMR56e6UGmL5bA6IE8AAAGpuzCxzo6Ok1NTSPS1XB0dXWR579zL8Pj8XJycjgczgcffCASiSTLhzNE9F2GuLg4yUQadXV1QqFw8FYXLlwoj35nxgAAIABJREFULy9fsWKFzP5Hti09/bZ0HU5tbW1bW9uamhr5e+bz+eT5gMPogTwAAAam1MLHPT09I1hDeTjoHyeZs9x4eXlFRUVVVVUlJSVJFg5niOiH6dLS0qTn0rh06dLgrbKzs8+ePauhoUGnDnQnycnJHA5H5rMFw2mrr6/v6OhIF9ySEIvFAoFA/p67u7vJ8wGH0QN5AAAMTGbhYy6X+7K6izKVlpZSFDVjxozhdzVM5ubmHA5HnhkCkpKSnJ2db9y4IVkynNrQ48aN4/F4ZWVlQ4o2JydHOm+gL6jExsZSFCV9e2LE2xJCgoODb9y4cefOHfqjUCisq6ujXyOUs2d6kC0sLIZ0yKBsyAMAYGAyCx87ODi0tLQUFhb29PQ0NTXV1dVJN3+xpHJfX9+TJ0/EYvHNmzcjIiJsbGxCQ0MV6KqkpGQE3xvU1dW1s7O7f/++PAOSk5OjqakpvUTh2tA8Hm/58uVHjx7Nyspqb2/v7e29f//+w4cPCSEhISEWFhaKzVusvLZRUVG2trahoaH19fWPHz/etGmTSCR68dnJQdCDPPgMBKB6yAMA4KW2bduWkpKSmJhoamo6c+bM8ePHl5aW6unp0WvXrFnj6+u7ZMkSJyenpKQk+nqvl5cX/Tbg6tWrzc3NXVxc5syZ09LSQgjp6upyc3Pj8/k+Pj4TJ048d+6c5K78ULsaWXPnzq2oqJDc+P/mm28cHBxqamo8PT3Xr18vveWMGTOioqLkHKKsrKy0tDRCiLu7+507dw4cOLBx40ZCyOzZs6uqqggh6enpkZGRu3btGjNmjKWlZURExJMnTwgh3d3djY2NRUVFChyL8toaGxufP3/e2traw8PDysrq6tWrxcXFMmcUkHbt2jUrKyt3d3cFYgMlGlqZYlAU6qArD8ZWAaqv7x4WFmZiYqLKPVJynxtVVVVcLvfgwYMqCEkevb29Pj4+2dnZatRWpubmZh6Pt3fvXnk2Vv35yWa4HgAAKjJqK845ODgkJiYmJiYOWDVHxXp7ewsLCzs6OhSow8lUW3nEx8d7eHiEh4cro3MYDuQBAAAkOjo6KCgoJCSE8ZJCpaWlx48fLykpGXxKg1HVVqbU1NSysrKTJ09qaWmNeOcwTMgDAEDpYmJicnJy2traJkyYcOzYMabDGVhycnJ4ePiOHTuYDWPWrFmHDx+WVFtQi7aDKyoqevbsWWlpqbGx8Yh3DsPHZToAAHj1paSkpKSkMB2FbH5+fn5+fkxH8aqZP3/+/PnzmY4CXgrXAwAAANgLeQAAAAB7IQ8AAABgL+QBAAAA7IXnBFUqPz+f6RBeQXRpFoztkNAzvL7yg4ZzQ03dv39/NNSgYgkORVFMx8AK+fn5wcHBTEcBAKAeAgMDCwoKmI6CFZAHALAah8PJy8tbvHgx04EAADPwfAAAAAB7IQ8AAABgL+QBAAAA7IU8AAAAgL2QBwAAALAX8gAAAAD2Qh4AAADAXsgDAAAA2At5AAAAAHshDwAAAGAv5AEAAADshTwAAACAvZAHAAAAsBfyAAAAAPZCHgAAAMBeyAMAAADYC3kAAAAAeyEPAAAAYC/kAQAAAOyFPAAAAIC9kAcAAACwF/IAAAAA9kIeAAAAwF7IAwAAANgLeQAAAAB7IQ8AAABgL+QBAAAA7IU8AAAAgL2QBwAAALAX8gAAAAD2Qh4AAADAXsgDAAAA2At5AAAAAHtxKIpiOgYAUJ2wsLDKykrJx+vXr0+YMMHY2Jj+qKmp+dVXX1lbWzMUHQCoGpfpAABApSwsLD7//HPpJTdv3pT8t52dHZIAAFbBfQEAdlm6dOnLVmlra4eGhqowFgBgHu4LALCOq6vr7du3B/x/v7KycuLEiaoPCQCYgusBAKzz/vvva2pq9lvI4XCmTJmCJACAbZAHALDOkiVLent7+y3U1NT861//ykg8AMAg3BcAYCNvb+8rV6709fVJlnA4nHv37llZWTEYFQCoHq4HALDRe++9x+FwJB81NDTefPNNJAEALIQ8AICNgoKCpD9yOJz333+fqWAAgEHIAwDYyNTUdNasWZKnBTkcTkBAALMhAQAjkAcAsNSyZcvox4M0NTXffvvtMWPGMB0RADAAeQAASy1cuFBbW5sQQlHUsmXLmA4HAJiBPACApfT09P7jP/6DEKKtre3v7890OADADOQBAOz17rvvEkICAgL09PSYjgUAmIH5A0ajoKCgY8eOMR0FAMAIwy/OKIR6g6PUjBkzIiMjmY5CnQQHB0dERHh5eTEdCGMuXbqUnp6el5c3pFaHDh0KCQnhctXpqwD/1uqIPj+ZjgIGgOsBoxH9bndBQQHTgagTDoeTl5e3ePFipgNhTH5+fnBw8FD/j+7q6uLxeEoKSUnwb62OFDs/QQXwfAAAq6ldEgAAIwt5AAAAAHshDwAAAGAv5AEAAADshTwAAACAvZAHALDayZMnBQLBP//5T6YDUZYzZ85ER0cfP37czs6Ow+FwOJz33ntPegM/Pz8DAwNNTc3Jkydfv36dqTglurq6nJ2d4+LiVNO2p6cnJSXFwcFBW1vbyMjI1dW1trZWZs/ffvvtrl27ent7FQgSRhvkAQCs9mq/x7Vt27aMjIyYmJhFixbduXPH3t5+zJgxhw4dKi4ulmxz+vTpgoICf3//ioqKadOmMRgtLTY2trKyUmVtg4ODv/7668OHDwuFwl9//dXe3v7p06cye543bx6Px5s1a1Zra6tiocLogTwAgNXmzp3b1tamgvoCIpHI29tb2XuRtnPnztzc3Pz8fAMDA8nCjIwMDQ2NsLCwtrY2VQYjp4sXL966dUtlbXNzcwsLCwsKCt544w0ul2tpaVlUVOTq6ipPzxs2bJgyZcqcOXPEYrFiAcMogTwAAFQhOzu7sbFRZburrq7esmVLQkJCvwkSvL29IyIiGhoaPvroI5UFIyeRSPTxxx8rNumeYm0/++yzadOmubm5KdZzfHx8WVkZZglUd8gDANjrwoULNjY2HA7n008/JYRkZWXp6enp6uoWFRW98847hoaG1tbWR48epTfOyMjg8Xjm5uarVq2ytLTk8Xje3t5Xrlyh14aHh2tra48dO5b+uHbtWj09PQ6H09zcTAiJiIjYuHFjTU0Nh8NxcHAghJw6dcrQ0DA5OVlJh5aRkUFR1Lx5815ctX379okTJ37xxRdnzpwZsC1FUampqZMmTdLR0TE2Nl6wYMFvv/1Grxp8iAghvb29W7dutbGx4fP57u7uQ5rmOTY2du3atWZmZkM5UMXbdnd3X7582cPDQ+GejY2NZ86cmZ6e/mrfXXrlIQ8AYK8333zz4sWLko9r1qyJjIwUiUQGBgZ5eXk1NTV2dnYrV67s6ekhhISHh4eGhgqFwg0bNtTW1l6/fl0sFr/11lv37t0jhGRkZEhP9JuZmZmQkCD5mJ6e7u/vb29vT1FUdXU1IYR+xKyvr09Jh1ZcXOzk5KSrq/viKj6f/+WXX2poaKxcubKzs/PFDeLj46Ojo2NjYxsbG3/88cd79+75+Pg8evSIyBoiQsjmzZt3796dlpb28OFDf3//pUuX/utf/5In4J9++qmmpmbp0qUKHKxibR88eNDd3f3zzz/7+vrSid2kSZMyMzOlf9Rl9jx16tSGhoZffvlFgbBhlEAeAAD9eXt7GxoampmZhYSEdHZ21tfXS1ZxuVz6D2UXF5esrKyOjo6cnBwFdjF37tz29vYtW7aMXNT/q7Oz8+7du/b29i/bwMvLKzIysra2dvPmzf1WiUSi1NTUhQsXLlu2TCAQuLm57d+/v7m5+fPPP5febMAh6urqysrKCggIWLRokZGRUVxcnJaWljzjIxKJIiIisrKyFDhYhdvSzwOamZklJydXVFQ8evRowYIF69atO3LkiPw9Ozo6EkLKy8sViBxGCeQBAPBS2trahBDJH7v9TJ8+XVdXV3LNfPRobGykKGrAiwES27dvd3JyyszMvHDhgvTyioqKp0+fTp8+XbLE09NTW1tbcgekH+khqqysFAqFkufs+Hz+2LFj5RmfmJiYDz/80MrKSuaWI9hWR0eHEDJ58mRvb28TExOBQJCQkCAQCCQZjzw904NMXywBNYU8AAAUp6Oj09TUxHQU/XV1dZHnv3Mvw+PxcnJyOBzOBx98IBKJJMvpF+H09fWlNzYyMuro6JC5X/ouQ1xcHOe5uro6oVA4eKsLFy6Ul5evWLFCZv8j29bS0pIQQj/AQdPW1ra1ta2pqZG/Zz6fT54POKgp5AEAoKCenp7W1lZra2umA+mP/nGSOcuNl5dXVFRUVVVVUlKSZKGRkREhpN+vvpyHST9Ml5aWRkm5dOnS4K2ys7PPnj2roaFBpw50J8nJyRwOR+azBcNpq6+v7+joePv2bemFYrFYIBDI33N3dzd5PuCgppAHAICCSktLKYqaMWMG/ZHL5b7sDoKKmZubczgceWYISEpKcnZ2vnHjhmSJq6urvr6+9E/dlStXuru7X3/9dZm9jRs3jsfjlZWVDSnanJwc6byBvr4SGxtLUZT07YkRb0sICQ4OvnHjxp07d+iPQqGwrq6Ofo1Qzp7pQbawsBjSIcOogjwAAIagr6/vyZMnYrH45s2bERERNjY2oaGh9CoHB4eWlpbCwsKenp6mpqa6ujrphiYmJg8ePKitre3o6Ojp6SkpKVHee4O6urp2dnb379+XuSV9d0BTU1N6ycaNG0+cOHHo0KH29vby8vLVq1dbWlqGhYXJ09vy5cuPHj2alZXV3t7e29t7//79hw8fEkJCQkIsLCwUm7dYeW2joqJsbW1DQ0Pr6+sfP368adMmkUj04rOTg6AHefAZCGCUQx4AwF6ffvqpp6cnIWTTpk3z58/PyspKS0sjhLi7u9+5c+fAgQMbN24khMyePbuqqopu0tXV5ebmxufzfXx8Jk6ceO7cOclt+DVr1vj6+i5ZssTJySkpKYm+Vuzl5UW/WLh69Wpzc3MXF5c5c+a0tLQo+9Dmzp1bUVEhufH/zTffODg41NTUeHp6rl+/XnrLGTNmREVFSS/Ztm1bSkpKYmKiqanpzJkzx48fX1paqqenRwiROUTp6emRkZG7du0aM2aMpaVlRETEkydPCCHd3d2NjY1FRUUKHIvy2hobG58/f97a2trDw8PKyurq1avFxcUyZxSQdu3aNSsrK3d3dwVig9GCgtEnMDAwMDCQ6SjUDCEkLy+P6SiYRE9Zo9RdhIWFmZiYKHUX8pDn37qqqorL5R48eFA1IcnU29vr4+OTnZ2tRm1lam5u5vF4e/fulWdjFZyfoBhcDwCAIVCXEnMODg6JiYmJiYkDVs1Rsd7e3sLCwo6OjpCQEHVpK4/4+HgPD4/w8HBldA4qgzzgFbFixQoDAwMOhzPUZ5RGm8TERBcXF0NDQx0dHQcHh08++WSkvselK8/StLW1zc3N//SnP+3Zs4e+eAuvkujo6KCgoJCQEMZLCpWWlh4/frykpGTwKQ1GVVuZUlNTy8rKTp48qaWlNeKdg0oxfUECBqDYfQF6kvMbN24oIySVmTlzZmZm5uPHj9vb2/Py8rS0tGbPni1PQyLffQF7e3uBQEBRFP2827lz50JDQzkcjqWl5bVr14YbPaOUfd01OjqanjNn/PjxBQUFytuRTHL+W9O+//77TZs2KTUeFiosLExJSRGLxfI3wX2BUQvXA0DphlRwVl9fn74JbWBgsHjx4oCAgFOnTtEPmo0sDodjZGT0pz/9KScnJz8//9GjR3QF3hHf0TCpvlzvy6SkpDx79oyiqLt37wYGBjIdjrz8/Px27tzJdBSvmvnz50dHR0u/ZwHqC3nAq4PD4TAdwsCGVHD2u+++k/5yMTU1JYTInJFtmAIDA0NDQxsbG/fv36/UHSlAxeV6AYBtkAeoMYqi9uzZ4+TkpKOjIxAIPv74Y8mq3bt36+rqGhgYNDY2bty40crKqrKyknp5NdXBS8qSQSuxDrXg7JA0NDTw+fwJEyYoPEpyol+CLykpIa/Q6AEAyMbkTQl4CTmfD4iNjeVwOP/5n//55MkToVCYmZlJpJ4PiI2NJYRs2LBh3759Cxcu/PXXX7du3aqtrX3w4MHW1tabN29OmzbN1NT0999/p7cPCwvT09O7fft2V1dXRUWFp6engYFBfX09vXbwtu+++66FhYUksD179hBCmpqa6I+LFi2iC84OVWdnp4GBQXh4uDwbkyE+H9BPe3s7IWTcuHH0R3UcPfbcf5Xz3xpGFfacn2oH1wPUlUgkSktL+8tf/hIVFWVkZMTn801MTF7cbOfOnevWrTt+/Litra3MaqovKykrZyXWEZeSkmJpabl9+3al7oVGv23Rb1Z5tR49AAB5cJkOABRUXV0tFApnzZol5/ZDraYqXVJ2qG1HxIkTJ/Lz80+fPm1gYKC8vUh0dnZSFGVoaDjgWjUavfz8fGV0O9rILN4Dow3+yUYt5AHqip7Wmy4CJg8FqqlKSsoOpxKrYnJzc1NTU0tLS1977TUl7aKff//734QQZ2fnAdeq0egFBwcro9vRJj09PT09nekoAF4FyAPUFY/HI4Q8e/ZMzu2HWk1VuqTscCqxKmDfvn3ff//9Dz/80O+3U6lOnTpFCHnnnXcGXKtGo0dRlDK6HVU4HE5eXt7ixYuZDgSGID8/nyVJqtrB8wHqytXVVUND43/+53/k335I1VSlS8rKbDtSBWcpitq0aVN5eXlhYaEqk4Dff/89LS3N2tr6gw8+GHADtRg9AAAFIA9QV2ZmZosWLTp27Fh2dnZ7e/vNmzcHf+5MnmqqLyspK7PtkArODhLk7du3d+/efeDAAS0tLekJgPfu3avwQL2IoqinT5/29fVRFNXU1JSXl/fHP/5RU1OzsLDwZc8HqMXoAQAogsF3FeBl5HxvsKOjY8WKFWPGjNHX13/zzTe3bt1KCLG2tv7ll1927dpFV30dN26cpORaX1/fnj17HB0dtbS0jI2NAwIC6NfiaWFhYVpaWlZWVlwu19DQcMGCBTU1NZK1g7d9/Pixr68vj8ebMGHC+vXr6ZkMHBwc6Bfnrl+/bmtry+fz33zzTcnLcgMqLy8f8Czds2ePzNEgst4l+/bbb93d3XV1dbW1tTU0NMjzKQX/8Ic/JCYmPn78WLKlmo4ee97LkvlvDaMQe85PtcOhWHA3Ue0EBQURQgoKClS501WrVhUUFDx+/FiVOx1BzN4zHg2jR99/ZcP/0Xg+QB2x5/xUO7gvAP9LXUrKjk4YPQBQR8gDQHV+++03zsspqUQ6AAAMAnkAEEJITExMTk5OW1vbhAkTjh07pqS9ODs7D3KPKjc3V0n7VTbVjB4o5syZM9HR0cePH7ezs6Mzzvfee096Az8/PwMDA01NzcmTJ1+/fp2pOCW6urqcnZ3j4uJU07anpyclJcXBwUFbW9vIyMjV1bW2tlZmz99+++2uXbtwDezVgDwACFHbkrKjBEZv1Nq2bVtGRkZMTMyiRYvu3Lljb28/ZsyYQ4cOFRcXS7Y5ffp0QUGBv79/RUXFtGnTGIyWFhsbW1lZqbK2wcHBX3/99eHDh4VC4a+//mpvb//06VOZPc+bN4/H482aNYueJgvUGvIAAJCXSCTy9vYebV29zM6dO3Nzc/Pz86Wnps7IyNDQ0AgLC2tra1Pq3hVz8eLFW7duqaxtbm5uYWFhQUHBG2+8weVyLS0ti4qKXF1d5el5w4YNU6ZMmTNnjlgsVixgGCWQBwCAvLKzsxsbG0dbVwOqrq7esmVLQkICPfOmhLe3d0RERENDw0cffaS8vStGJBJ9/PHHis2XrFjbzz77bNq0aW5ubor1HB8fX1ZWhgme1R3yAAB2oSgqNTWVLo1obGy8YMECuh4SISQ8PFxbW3vs2LH0x7Vr1+rp6XE4nObmZkJIRETExo0ba2pqOByOg4NDRkYGj8czNzdftWqVpaUlj8fz9vaWFE8aUleEkFOnThkaGiYnJ4/UYWZkZFAUNW/evBdXbd++feLEiV988cWZM2eGOkRZWVl6enq6urpFRUXvvPOOoaGhtbX10aNHJW17e3u3bt1qY2PD5/Pd3d3pl+blFBsbu3btWvmLhgyzbXd39+XLlz08PBTu2djYeObMmenp6XgbUK0hDwBgl/j4+Ojo6NjY2MbGxh9//PHevXs+Pj6PHj0ihGRkZEi/lJ+ZmZmQkCD5mJ6e7u/vb29vT1FUdXV1eHh4aGioUCjcsGFDbW3t9evXxWLxW2+9de/evaF2RZ6/ddnX1zdSh1lcXOzk5KSrq/viKj6f/+WXX2poaKxcubKzs/PFDQYZojVr1kRGRopEIgMDg7y8vJqaGjs7u5UrV0qmety8efPu3bvT0tIePnzo7++/dOlS6SmlB/HTTz/V1NQsXbpUgYNVrO2DBw+6u7t//vlnX19fOpObNGlSZmam9I+6zJ6nTp3a0NDwyy+/KBA2jBLIAwBYRCQSpaamLly4cNmyZQKBwM3Nbf/+/c3NzYNPSj0ILpdL/93s4uKSlZXV0dGRk5OjQD9z585tb2/fsmWLYmH009nZeffuXXt7+5dt4OXlFRkZWVtbu3nz5n6r5Bwib29vQ0NDMzOzkJCQzs7O+vp6QkhXV1dWVlZAQMCiRYuMjIzi4uK0tLTkGRCRSBQREZGVlaXAwSrcln4e0MzMLDk5uaKi4tGjRwsWLFi3bt2RI0fk79nR0ZEQ8rKZQEEtIA8AYJGKioqnT59Onz5dssTT01NbW1tyPX84pk+frqurK7mEzqDGxkaKoga8GCCxfft2JyenzMzMCxcuSC8f6hBpa2sTQujrAZWVlUKhUPKcHZ/PHzt2rDwDEhMT8+GHH1pZWcnccgTb6ujoEEImT57s7e1tYmIiEAgSEhIEAoEk45GnZ3qQ6YsloKaQBwCwCP2WV79ajkZGRv3KIitMR0enqalpRLoajq6uLvL8d+5leDxeTk4Oh8P54IMPRCKRZPlwhoi+yxAXFyeZHauurk4oFA7e6sKFC+Xl5StWrJDZ/8i2tbS0JITQT2zQtLW1bW1ta2pq5O+ZrsRBDzioKeQBACxiZGRECOn3k9ba2mptbT38znt6ekaqq2Gif5xkznLj5eUVFRVVVVWVlJQkWTicIaIfpktLS5OeIOvSpUuDt8rOzj579qyGhgadOtCdJCcnczgcmc8WDKetvr6+o6Pj7du3pReKxWKBQCB/z93d3eT5gIOaQh4AwCKurq76+vrS3+NXrlzp7u5+/fXX6Y9cLlfh6salpaUURc2YMWP4XQ2Tubk5h8ORZ4aApKQkZ2fnGzduSJbIHKJBjBs3jsfjlZWVDSnanJwc6byBvqASGxtLUZT07YkRb0sICQ4OvnHjxp07d+iPQqGwrq6Ofo1Qzp7pQbawsBjSIcOogjwAgEV4PN7GjRtPnDhx6NCh9vb28vLy1atXW1pahoWF0Rs4ODi0tLQUFhb29PQ0NTXV1dVJNzcxMXnw4EFtbW1HRwf9G9/X1/fkyROxWHzz5s2IiAgbG5vQ0FAFuiopKRnB9wZ1dXXt7Ozu378vz4Dk5ORoampKLxl8iAbvbfny5UePHs3Kympvb+/t7b1///7Dhw8JISEhIRYWForNW6y8tlFRUba2tqGhofX19Y8fP960aZNIJHrx2clB0IM8+AwEMMohDwBgl23btqWkpCQmJpqams6cOXP8+PGlpaV6enr02jVr1vj6+i5ZssTJySkpKYm+3uvl5UW/Dbh69Wpzc3MXF5c5c+a0tLQQQrq6utzc3Ph8vo+Pz8SJE8+dOye5Kz/UrkbW3LlzKyoqJDf+v/nmGwcHh5qaGk9Pz/Xr10tvOWPGjKioKDmHKCsrKy0tjRDi7u5+586dAwcObNy4kRAye/bsqqoqQkh6enpkZOSuXbvGjBljaWkZERHx5MkTQkh3d3djY2NRUZECx6K8tsbGxufPn7e2tvbw8LCysrp69WpxcbHMGQWkXbt2zcrKyt3dXYHYYLQYpO4LMCUwMDAwMJDpKNQMISQvL4/pKJhET1mjyj2GhYWZmJioco80ef6tq6qquFzuwYMHVROSTL29vT4+PtnZ2WrUVqbm5mYej7d37155Nlb9+QlywvUAAFDcqK045+DgkJiYmJiYOGDVHBXr7e0tLCzs6OhQoLg2U23lER8f7+HhER4erozOQWWQBwDAqyk6OjooKCgkJITxkkKlpaXHjx8vKSkZfEqDUdVWptTU1LKyspMnT2ppaY1456BKyAMAQBExMTE5OTltbW0TJkw4duwY0+EMLDk5OTw8fMeOHcyGMWvWrMOHD0uqLahF28EVFRU9e/astLTU2Nh4xDsHFeMyHQAAqKWUlJSUlBSmo5DNz8/Pz8+P6SheNfPnz58/fz7TUcDIwPUAAAAA9kIeAAAAwF7IAwAAANgLeQAAAAB74TnBUery5ctBQUFMR6Fm0tLSCgoKmI6CMfQMryw5bVj+b62O5JnmGRjBoSiK6Rigv9TUVJk1ygBGRElJydSpU5XxahnAi5C9jULIAwBYjcPh5OXlLV68mOlAAIAZeD4AAACAvZAHAAAAsBfyAAAAAPZCHgAAAMBeyAMAAADYC3kAAAAAeyEPAAAAYC/kAQAAAOyFPAAAAIC9kAcAAACwF/IAAAAA9kIeAAAAwF7IAwAAANgLeQAAAAB7IQ8AAABgL+QBAAAA7IU8AAAAgL2QBwAAALAX8gAAAAD2Qh4AAADAXsgDAAAA2At5AAAAAHshDwAAAGAv5AEAAADshTwAAACAvZAHAAAAsBfyAAAAAPZCHgAAAMBeyAMAAADYC3kAAAAAeyEPAAAAYC/kAQAAAOzFZToAAFCp1tZWiqKkl3R2dj558kTyUV9fX0tLS+VxAQAzOP2+EQDg1fbnP//53LlzL1urqanZ0NBgYWGhypAAgEG4LwDALkuWLOFwOAOu0tDQ+H//7/8hCQBgFeSe8kvyAAAgAElEQVQBAOwSGBjI5Q58Q5DD4bz//vsqjgcAmIU8AIBdjI2N/fz8NDU1X1yloaEREBCg+pAAgEHIAwBYZ9myZX19ff0WcrncuXPnCgQCRkICAKYgDwBgnXnz5uno6PRb2Nvbu2zZMkbiAQAGIQ8AYB1dXd2AgIB+Lwfy+fw5c+YwFRIAMAV5AAAbLV26tKenR/JRS0srMDCQz+czGBIAMAJ5AAAbvf3229KPAvT09CxdupTBeACAKcgDANhIS0srJCREW1ub/mhkZDRr1ixmQwIARiAPAGCpJUuWdHd3E0K0tLSWLVv2skkFAODVhnmF4f+zd+9xTVxp48DPQEhCAgmIgCwICgjITWqlFSo/dNmyVQpeAEGru9TVUrXFALrIReUiKNUCi5L6UVm69QpoC7aI64uVVuq1CopoLaCgeCGgyC3BcJnfH/PpvHm5JCGEBJjn+xczc+bMmcNAnsycOQ+gqL6+vj/96U+NjY0IobKysvfee0/dLQIAqAHcDwCAojQ0NFavXo0QMjExcXd3V3dzAADq8X/uBDY0NFy+fFldTQEAqNjkyZMRQu+++25+fr662wIAUJGpU6e6ubn97zIuITc3V30NAwAAAMCoCwgIkPzoH2RkEIwYAGNfXl5eUFAQXKsjd+rUqYCAAHW3YkIJDAxECE34WyzwNzhOEdenJBgfAAClQRAAAMVBHAAAAABQF8QBAAAAAHVBHAAAAABQF8QBAAAAAHVBHAAAAABQF8QBAACgfmfPnuVyud9//726GzJaSkpKoqOjT58+bWlpiWEYhmHEdJYkb29vXV1dTU1NBweHW7duqaudpK6uLjs7u7i4ONXs293dnZKSYm1tTafT9fT0HB0d6+rqZNZ85syZ1NTU3t5eBRpJgjgAAADUb2K/iL9jx47MzMyYmBh/f/+HDx9aWVkZGBgcPXq0qKiILHP+/Pn8/HxfX9+qqqrZs2ersbWE2NjYBw8eqGzfoKCgb7755tixY0Kh8P79+1ZWVh0dHTJr9vPzYzKZXl5er1+/VqypCOIAAAAYC3x8fFpbW319fUf7QCKRSMXpJHbv3n3y5Mm8vDxdXV1yZWZmpoaGRmhoaGtrqyobI6fLly/fvXtXZfuePHmyoKAgPz//3XffpdFoJiYmhYWFjo6O8tS8adOmWbNmLVq0qKenR7EGQxwAAAAUkp2dLRAIVHa4mpqabdu2JSQkMJlMyfXu7u48Hu/p06ebN29WWWPkJBKJtmzZkpGRobJ9v/rqq9mzZzs5OSlWc3x8fEVFhWINRhAHAACA2pWVlZmbm2MYtn//foQQn89ns9ksFquwsHDhwoUcDsfMzOzEiRNE4czMTCaTaWRk9Omnn5qYmDCZTHd392vXrhFbw8LC6HT6lClTiMWNGzey2WwMw5qbmxFCPB4vMjKytrYWwzBra2uE0Llz5zgcTnJy8iidWmZmJo7jfn5+Azft3LnTxsbm8OHDJSUlg+6L43haWtrMmTMZDIa+vv6SJUt+++03YpP0LkII9fb2bt++3dzcXFtb29nZeVjZc2JjYzdu3GhoaDicE1V8X7FYfPXqVRcXF4Vr1tfX9/T0zMjIUOzpEsQBAACgZvPmzZPM9bphw4bw8HCRSKSrq5ubm1tbW2tpablu3bru7m6EUFhYWEhIiFAo3LRpU11d3a1bt3p6et5///0nT54ghDIzM5cvX05WlZWVlZCQQC5mZGT4+vpaWVnhOF5TU4MQIoaY9fX1jdKpFRUV2draslisgZu0tbW//vprDQ2NdevWdXZ2DiwQHx8fHR0dGxsrEAh+/vnnJ0+eeHh4NDY2IlldhBDaunXrF198kZ6e/vz5c19f35UrV/7666/yNPiXX36pra1duXKlAier2L7Pnj0Ti8U3b95csGABEdjNnDkzKytL8kNdZs1vvfXW06dPb9++rUCzIQ4AAIAxyt3dncPhGBoaBgcHd3Z2Pn78mNxEo9GIL8r29vZ8Pr+9vT0nJ0eBQ/j4+LS1tW3btk15rf5fnZ2djx49srKyGqqAm5tbeHh4XV3d1q1b+20SiURpaWnLli1btWoVl8t1cnI6cOBAc3PzwYMHJYsN2kVdXV18Pn/p0qX+/v56enpxcXFaWlry9I9IJOLxeHw+X4GTVXhfYjygoaFhcnJyVVVVY2PjkiVLPvvss+PHj8tf84wZMxBClZWVCrQc4gAAABjr6HQ6Qoj8stvPnDlzWCwWec987BAIBDiOD3ozgLRz505bW9usrKyysjLJ9VVVVR0dHXPmzCHXuLq60ul08glIP5Jd9ODBA6FQSI6z09bWnjJlijz9ExMT88knn5iamsosqcR9GQwGQsjBwcHd3X3SpElcLjchIYHL5ZIRjzw1E51M3CwZLogDAABg3GMwGE1NTepuRX9dXV3oj8+5oTCZzJycHAzD1qxZIxKJyPXEi3A6OjqShfX09Nrb22Uel3jKEBcXh/2hvr5eKBRK36usrKyysnLt2rUy61fuviYmJgghYgAHgU6nW1hY1NbWyl+ztrY2+qPDhwviAAAAGN+6u7tfv35tZmam7ob0R3w4yZzlxs3NLSIiorq6OikpiVypp6eHEOr3qS/naRKD6dLT03EJV65ckb5Xdnb2hQsXNDQ0iNCBqCQ5ORnDMJljC0ayr46OzowZM+7duye5sqenh8vlyl+zWCxGf3T4cEEcAAAA41tpaSmO43PnziUWaTTaUE8QVMzIyAjDMHlmCEhKSrKzsysvLyfXODo66ujoSH7UXbt2TSwWv/322zJrmzp1KpPJrKioGFZrc3JyJOMG4v5KbGwsjuOSjyeUvi9CKCgoqLy8/OHDh8SiUCisr68nXiOUs2aik42NjYd1ygSIAwAAYPzp6+traWnp6em5c+cOj8czNzcPCQkhNllbW7969aqgoKC7u7upqam+vl5yx0mTJj179qyurq69vb27u7u4uHj03htksViWlpYNDQ0ySxJPBzQ1NSXXREZGfvvtt0ePHm1ra6usrFy/fr2JiUloaKg8tX388ccnTpzg8/ltbW29vb0NDQ3Pnz9HCAUHBxsbGys2b/Ho7RsREWFhYRESEvL48eOXL19GRUWJRKKBYyelIDpZ+gwEQ4E4AAAA1Gz//v2urq4IoaioqMWLF/P5/PT0dISQs7Pzw4cPDx06FBkZiRD64IMPqquriV26urqcnJy0tbU9PDxsbGwuXrxIPobfsGHDggULVqxYYWtrm5SURNwrdnNzI14sXL9+vZGRkb29/aJFi169ejXap+bj41NVVUU++P/uu++sra1ra2tdXV0///xzyZJz586NiIiQXLNjx46UlJTExMTJkyd7enpOmzattLSUzWYjhGR2UUZGRnh4eGpqqoGBgYmJCY/Ha2lpQQiJxWKBQFBYWKjAuYzevvr6+pcuXTIzM3NxcTE1Nb1+/XpRUZHMGQUk3bhxw9TU1NnZWYG2IckbDsRMCzgAYx5cq2DMCggICAgIGNVDhIaGTpo0aVQPIZOcf4PV1dU0Gu3IkSMqaJI8ent7PTw8srOzx9G+MjU3NzOZzL1798pTeOD1CfcDAABg/BlhijmVsba2TkxMTExMHDRrjor19vYWFBS0t7cHBwePl33lER8f7+LiEhYWptjuSo4D9u7dSwwMOXDggMzCrq6umpqaw7r1MdxDAHkM7FIlpkBNTEy0t7fncDgMBsPa2vqf//znUP8O1q5dq6uri2HYcEf3yPT7779//vnnDg4OHA6HTqcbGhra2dktW7bsu+++Iwqo/bo9fvw4hmEqzv6iMMnUsRiGaWlpmZqafvTRR/fv3x955eq6GvudFIZhdDrdyMho/vz5e/bsIW4pA8VER0cHBgYGBwerPaVQaWnp6dOni4uLpU9pMKb2lSktLa2iouLs2bNaWloKViF5c0Ap91qJZzNfffWVPIW9vLxmzZo1qocA8ujXpT/88AOHwzlz5szIa/b09MzKynr58mVbW1tubq6WltYHH3wwVGFievDy8nKZ1cp/rebk5NDp9Hnz5p07d66lpaWrq6u2tvb777/38fEJDQ0li6n3uvXx8SHmXKuurh5utepiZWXF5XJxHO/o6Dhz5oy5ubmOjs5vv/028prVeDWSJ0WMwrt48WJISAiGYSYmJjdu3JDzKKP9XCA6OpqYM2fatGn5+fmjdyDphvt58d///jcqKmr02kNNBQUFKSkpPT098u8yFp8LYBim7iaA/pSYAlVHR4d4lqmrq7t8+fKlS5eeO3eOGK+kAlevXl27dq27u/vFixf/+te/6unpMRgMS0vLDz/8MDMzcyQ1K/G6ffny5b1794hJ4L/55htlVasybDbb19f3X//6V0dHx759+5Rev1quRgzD9PT05s+fn5OTk5eX19jYSDRj5G0YuZSUlDdv3uA4/ujRo4CAAHU3R17e3t67d+9WdysmmsWLF0dHR0u+Z6EAJcQBOI7n5+f3m/NZforfyhhXRthL40i/M/3hhx8kr9HJkycjhIaa2EvpQWFycnJvb++uXbtoNFq/TZaWliN5tKTE6zYvL8/Hx8fPz4/JZBLDqZRVswIUvlDfeecdhJDCKdtHyUiuRlJAQEBISIhAIIBnkWBCUiQO6O3tTUlJsbW11dbWnjx58vTp01NSUiQzXEnCh04cSaipqbGzs2Oz2cQLMJJTTF+6dMne3p7L5TKZTCcnp//+978KtHbQSmbOnIlhmIaGxttvv038F/jnP/9JlPn666/REDkrv/jiCxaLpaurKxAIIiMjTU1NHzx4MFQjpfeSAjkxpScbldnVMn8RpGGlQJV5pv08ffpUW1t7+vTpZKv27Nlja2vLYDC4XO6WLVtk9oP8xGJxSUnJpEmTyPlV5KfK6/b48ePLli3T1dX19vauq6u7dOkSuWkcXag9PT1IYgbZ8Xg1SkG8ml9cXCyzJADjj+RDAjmf9yQnJ2tqahYWFgqFwps3bxobG8+fP5/c2u/Z3vbt2+l0+pEjR16/fn3nzp3Zs2dPnjz5xYsXxFYvLy9LS8tHjx51d3ffvXv33XffZTKZv//+O7E1Pz8/Pj7+1atXL1++nDt3roGBwaCHkG7QSnp6eqZNm2Zubi75WCU8PJych3Lz5s0MBuPUqVMtLS0xMTEaGhrE08HY2FiE0KZNm/bt27ds2bL79+8P1UjpvTRU/dKFhoay2ex79+51dXVVVVW5urrq6uo+fvxYnq6WvrVflxJ3Svft20csEmd94cKF1tZWgUDg4eHBZrPFYrE8Zyqps7NTV1c3LCyMXBMbG4th2JdfftnS0iIUCrOyspDyxgf8/vvvCKG5c+fKrA1X33VbX19vaGhIXIdHjhxBCP3jH/8gt47lC5V8lE4gGr9lyxZ5OnBsXo0DT4rU1taGEJo6deqgVfWjgvcGxwJ4d3ecGnh9KhIHuLq6vvPOO+TiJ598oqGhQTyvwv/v37BQKNTR0QkODiYLX79+HSGUmJhILPYbb3Xnzh2E0ObNmwceNCUlBf2RvUrhcYKSlRBzUOTl5RGbOjs7zc3NW1tbcRwXiUQsFotstlAoZDAYGzZswP/4HyQSiWTWL6WXpNQvXWhoqOQ/qRs3biCEEhIScFldLfMXIc9/XvKsiU/rmpoaYlH69SApNjbWxsamra2NPHEWi/X++++TBZQ7TpCYkfQvf/mLzNpw9V23u3bt+vjjj4mfW1tbGQwGh8MRCoVkgTF7oUqOEzx16pSxsbGRkVFDQ4PMDhybV2O/kxqIGDEw6KZ+IA4AY9nA67P/Q1N5dHV1MZlMcrG3t1dLS2vQcQrDTRzp5OTE5XKJ/6r9EI9jR/jKrGQla9eujY+Pz8jICAwMRAgdPXp0yZIlHA4HjSBnpWT9UnpJ4fr7kUw2Kr2rh/uLkK5fClQ5r4dvv/02Ly/v/Pnzurq6xJqamhqhUOjl5aVAG+RBZCojMo9JysvLi4qKqqurQwjZ2dn99NNPRkZGkgVUed0eP36c+FRGCHE4HG9v7++//76wsJB8z3gsX6itra0Yhmlqak6ZMmXRokU7duwgUqOOx6tRus7OThzHiW6Xx9WrV4nf1wRGTGQ74U9z4rl69Wq/R6WKjA9YtGjRzZs3CwsLRSLRr7/+WlBQ8OGHHw4aByiQOFJLS4v8ky4qKpo/f76hoSGDwfjnP/+pQFOlVKKjo/PJJ59cvnyZ+C7y1VdfkZMwDCtn5VD1S+klxXJiDopMNiq9q0eSwVMmea6HkydP7t69u7S0dNq0aeRK4v8IkT5rNFhYWDAYjJqamn7rly9f/ujRIwsLC2Nj4/v37/cLApAKr9u7d+9WVlb6+vqSVwLxlrzkWwNj+UIlvjr39PQ0NDT8+9//trCwkKcDx+bVKB3xjMnOzm7kLQRgrFHkfkB8fPzNmzdDQkI6OjpMTEyWL18+VI6K4SaO7OnpefXqlbm5OULo8ePHS5cuXbZs2b///e8//elP+/btUyAUkF5JWFhYRkZGenr6+vXrp06dSrzAjSRyVvJ4PIXrl9JL8tcvnWSyUeldPZIMnjLJvB727dv33//+98cff+z3r5/43vbmzZuRt2FQTCbzL3/5S1FR0cD4VzqVXbfHjh1bsWLF8ePHyTUtLS2mpqbnz59/8eLFlClTiJXj7kIdj1ejdOfOnUMILVy4UM7yc+fOzc/Pl7/+8SgvLy8oKGjCn+bEM/AWjiJxQFVVVW1tbVNT08B3sfoZbuLIixcv9vX1zZ49GyFUWVnZ3d29YcMGS0tLpOgbZdIrMTMzW758eW5u7rNnz3bs2EGulz9npZT6pfSSYjkxB5JMNiq9q0eSwVMmKWeK4/jWrVtbWloKCgoGbnV0dNTQ0Pjpp5/Wr18/8mYMKiEh4fz581u2bPnxxx/lf9NPNdctjuMnT548evSo5Ep9ff3AwMBvvvnm+PHjZM6VcXehjserUYoXL16kp6ebmZmtWbNm5C0EYKxR5LnAZ599Zm5uLs9k0fIkjhSLxa2trT09Pbdu3QoLCyNyLyKEiG9XJSUlXV1d1dXVij07lFlJZGRkT09PS0vLn//8Z8lmD5WzUv76pfSS/PUPNFSyUeldPZIMnjJJOdN79+598cUXhw4d0tLSkpyxde/evQghQ0NDf3//U6dOZWdnt7W13blzR+nzK7z99ttHjhy5efPm/Pnzz5079/z5856envr6+iNHjkjJtKaa6/by5cscDue9997rt56IivpNKDS+LtTxeDWScBzv6Ojo6+vDcbypqSk3N/e9997T1NQsKCiQf3wAAOOJ5KBBOcd//vjjjwYGBmQNWlpaM2fOPH36NI7jX375pbGxMUKIzWYvW7YMx/G+vr49e/bMmDFDS0tLX19/6dKlDx48IKvKyclZsGCBkZERjUYzMDBYsWJFfX09uTUqKmrSpEl6enqBgYHE28NWVlY8Hq/fIaQbtBLyXTscxxcsWHD48OF+e7158yYqKsrc3JxGoxEfV1VVVampqUQGz6lTp5Lps4aqX0ovDVW/zHMJDQ0l5nKn0WgcDmfJkiW1tbXkVuldLWVrv9/avn37iDvSLBbLz88vKyuLmBN7xowZtbW1Bw8eJP4bWlhYEG/KSTnTysrKQa+6PXv2EIdub29fu3atgYGBjo7OvHnztm/fjhAyMzO7ffu29K4Y1ljlR48e8Xg8BwcHNpvNZDKnT5/u4eGxdevWn3/+edAekNmZI79u//GPf7DZbBqNNmvWrFu3bpH7JiUlmZiYEL1kamqalZVFbho7F+ovv/xiY2NDlDcxMQkMDBzY5+Puajxz5oyzszOLxaLT6RoaGuiPKQXfeeedxMTEly9fynmx4fC+ABjblPPeYFZWFo/HIxffvHkTHh7OYDAkX3YCo9FLYyHZ6EBquR7gf5CyTLA/57FwOhAHgLFMCe8NvnjxIiwsTPKRIZ1ONzc37+7u7u7uJr6FgNHrpbGWbBSuh3Ftgv36JtjpAKAawx4foK2traWllZ2d3djY2N3d/ezZs8OHD2/fvj04OFj1D89+++03bGijlOlZHgr00pg9F+nG1PUAhmuC/fom2OkAUklJSXR0tGRu6NWrV0sW8Pb21tXV1dTUdHBwuHXrlrra2d3dnZKSYm1tTafT9fT0HB0diXlK+unq6rKzs4uLiyMWz5w5k5qaqs7veJI3B+S8z/Pzzz//5S9/4XA4mpqaXC7X3d09Kyuru7tbyTcvxjml99IYSTY6kFquB7gnqSwT7M95LJwOPBdQru3bt/v6+pIzP1pZWRFDQH744QfJYsXFxYsXL1ZBe6RYunSpra3t1atXiTDUz8+vsrJyYDHiVaDY2FhyTUZGhqenZ0tLiwoaqZzxAQCoHVyrYMxSQRwgFArd3NzUW5Vq/gZ37dplY2MjOUO2lZXVsWPHNDQ0TE1NX79+Ta5Xexxw4sQJDMPu3Lkjvdgvv/zi7e3dLw7AcTwsLMzNzU0FMevA61MJeYcBAACoUnZ2tkAgGGtVKV1NTc22bdsSEhIk54pGCLm7u/N4vKdPn27evFldbRvoq6++mj17tpOTk5QyIpFoy5YtGRkZAzfFx8dXVFQMumm0QRwAAABqgA+dfDksLIxOp5MTSm7cuJHNZmMY1tzcjBDi8XiRkZG1tbUYhllbW0vPSD6sqhBC586d43A4Q00Rq2KZmZk4jvv5+Q3ctHPnThsbm8OHD5eUlAy6r5TulSd79XDzwovF4qtXr7q4uEgvFhsbu3HjxkEnU9fX1/f09MzIyMBxXObhlEzy5gDcawXjBVyrYMyS87mA9OTLH330kbGxMVl4z549CKGmpiZi0d/f38rKitwqPSP5sKr64YcfdHV1ydyPUqjgb9DS0tLe3r7fSisrq0ePHuE4fvnyZQ0NjWnTpnV0dOADngtI717p2asVyAv/6NEjhJCLi8v8+fOnTJnCYDDs7Oz2799PTEhFKCsr8/Pzw3GcSArT77kAjuPR0dFIvoSrIwHPBQAAQP1EIlFaWtqyZctWrVrF5XKdnJwOHDjQ3Nys8JSaNBqN+O5rb2/P5/Pb29tzcnIUqMfHx6etrW3btm2KNUOJOjs7Hz16RGbTGMjNzS08PLyurm7r1q39NsnZve7u7hwOx9DQMDg4uLOz8/Hjxwihrq4uPp+/dOlSf39/PT29uLg4LS0tmZ1JTGFpaGiYnJxcVVXV2Ni4ZMmSzz77jMweIhKJeDwen8+XUsmMGTMQQkNNeDV6IA4AAABVU27y5X4kM5KPXwKBAMdxYvrIoezcudPW1jYrK6usrExy/XC7VzJ7tWLpvBkMBkLIwcHB3d190qRJXC43ISGBy+WSkUdMTMwnn3xCJOYeCnGyjY2N0o+ldBAHAACAqo1q8mUkkZF8/Orq6kJ/fL4Ohclk5uTkYBi2Zs0akUhErh9J9yqWF56YDpwYdUGg0+kWFha1tbUIobKyssrKyrVr10qvhJjqijhxVYI4AAAAVG1Uky9LZiQfv4gPRZmz67i5uUVERFRXVyclJZErR9K9ZLptySfoV65ckb6Xjo7OjBkz7t27J7myp6eHy+UihLKzsy9cuKChoUEEFsQhkpOTMQyTTLwpFovJE1cliAMAAEDVZCZfptFoxG1qBUhmJB9hVWpkZGSEYVhra6vMkklJSXZ2duXl5eSakeS2VjjddlBQUHl5+cOHD4lFoVBYX19PvEaYk5MjGVVIjhOUfHhBnCyRZ0uVIA4AAABVk5l82dra+tWrVwUFBd3d3U1NTfX19ZK7T5o06dmzZ3V1de3t7cRn/FAZyYdbVXFx8Rh5b5DFYllaWjY0NMgsSTwd0NTUlFyjcG5rKem2g4ODjY2Nh5q3OCIigsg//vjx45cvX0ZFRYlEooFjGKUgTlb6DASjAeIAAABQgx07dqSkpCQmJk6ePNnT03PatGmlpaVsNpvYumHDhgULFqxYscLW1jYpKYm4V+zm5vbkyROE0Pr1642MjOzt7RctWvTq1SuEUFdXl5OTk7a2toeHh42NzcWLF8kn68Otauzw8fGpqqoiH/x/99131tbWtbW1rq6un3/+uWTJuXPnEpP1kqR0L5/PT09PRwg5Ozs/fPjw0KFDkZGRCKEPPviguroaIZSRkREeHp6ammpgYGBiYsLj8VpaWhBCYrFYIBAUFhYO2lp9ff1Lly6ZmZm5uLiYmppev369qKhI5owCkm7cuGFqaurs7Cz/LsohebMC3skG4wVcq2DMUn1+AbVkJFfB32B1dTWNRjty5MioHkV+vb29Hh4e2dnZo1F5c3Mzk8ncu3fvaFQuCeYPAACACWisZSRXCmtr68TExMTEROLtfPXq7e0tKChob28fpeyv8fHxLi4uYWFho1G5dBAHAAAAGKOio6MDAwODg4PlGTA4qkpLS0+fPl1cXCx9SgPFpKWlVVRUnD17VktLS+mVywRxAAAAjGMxMTE5OTmtra3Tp08/deqUupujfMnJyWFhYbt27VJvM7y8vI4dO0ZmalCiwsLCN2/elJaW6uvrK71yedDUclQAAABKkZKSkpKSou5WjC5vb28iV++EtHjx4sWLF6uxAXA/AAAAAKAuiAMAAAAA6oI4AAAAAKAuiAMAAAAA6oI4AAAAAKCuQd4XwDBM9e0AQAFwrYIxiyIXJ0VOc4IJCAiQXMRwHCcXGhoaLl++rPImAQDUJigoiMfjubm5qbshAAAVmTp1quSf/P+JAwAAVINhWG5u7vLly9XdEACAesD4AAAAAIC6IA4AAAAAqAviAAAAAIC6IA4AAAAAqAviAAAAAIC6IA4AAAAAqAviAAAAAIC6IA4AAAAAqAviAAAAAIC6IA4AAAAAqAviAAAAAIC6IA4AAAAAqAviAAAAAIC6IA4AAAAAqAviAAAAAIC6IA4AAAAAqAviAAAAAIC6IA4AAAAAqAviAAAAAIC6IA4AAAAAqAviAAAAAIC6IA4AAAAAqAviAAAAAIC6IA4AAAAAqAviANow6CgAACAASURBVAAAAIC6IA4AAAAAqAviAAAAAIC6IA4AAAAAqAviAAAAAIC6IA4AAAAAqAviAAAAAIC6IA4AAAAAqIum7gYAAFTqxIkT7e3tkmtKSkpev35NLi5dutTQ0FDl7QIAqAeG47i62wAAUJ2QkJD//Oc/WlpaxCLxHwDDMIRQb2+vjo6OQCBgMBjqbCIAQIXguQAA1LJixQqEUPcfenp6enp6iJ81NTUDAwMhCACAUuB+AADU0tPTY2xs/OrVq0G3Xrhw4c9//rOKmwQAUCO4HwAAtdBotBUrVpDPBSRNnjzZ09NT9U0CAKgRxAEAUM6KFSu6u7v7rdTS0lq9erWmpqZamgQAUBd4LgAA5eA4bm5u3tDQ0G/99evXXV1d1dIkAIC6wP0AACgHw7BVq1b1ezQwderUOXPmqKtJAAB1gTgAACrq92hAS0srJCSEeHsQAEAp8FwAAIqys7N78OABuXj37l0HBwc1tgcAoBZwPwAAilq9ejX5aMDe3h6CAACoCeIAAChq1apVPT09CCEtLa2///3v6m4OAEA94LkAANQ1Z86cmzdvYhhWV1dnbm6u7uYAANQA7gcAQF1/+9vfEELvvvsuBAEAUBbkG5xo0tLSrly5ou5WgPGhq6sLw7A3b94EBgaquy1g3MjPz1d3E4Aywf2AiebKlStXr15VdyvGmVOnTg2cVIcKmEymsbGxmZlZQ0PDqVOn1N0cVaDs71opqHOdUAqMD5hoiC92ELAPC4Zhubm5y5cvV3dD1KCmpsba2jovLy8oKIgK/w2o/LseOepcJ5QC9wMAoDRra2t1NwEAoE4QBwAAAADUBXEAAAAAQF0QBwAAAADUBXEAAAAAQF0QBwAAFHT27Fkul/v999+ruyGjpaSkJDo6+vTp05aWlhiGYRi2evVqyQLe3t66urqampoODg63bt1SVzu7u7tTUlKsra3pdLqenp6jo2NdXd3AYl1dXXZ2dnFxccTimTNnUlNTe3t7VdpWMPZAHAAAUNDEfn9sx44dmZmZMTEx/v7+Dx8+tLKyMjAwOHr0aFFREVnm/Pnz+fn5vr6+VVVVs2fPVldTg4KCvvnmm2PHjgmFwvv371tZWXV0dAwsFhsbK5lh0s/Pj8lkenl5vX79WoWNBWMOxAEAAAX5+Pi0trb6+vqO9oFEIpG7u/toH0XS7t27T548mZeXp6urS67MzMzU0NAIDQ1tbW1VZWOkO3nyZEFBQX5+/rvvvkuj0UxMTAoLCx0dHfsVu3z58t27d/ut3LRp06xZsxYtWkRknALUBHEAAGCsy87OFggEKjtcTU3Ntm3bEhISmEym5Hp3d3cej/f06dPNmzerrDEyffXVV7Nnz3ZycpJSRiQSbdmyJSMjY+Cm+Pj4ioqKQTcBioA4AACgiLKyMnNzcwzD9u/fjxDi8/lsNpvFYhUWFi5cuJDD4ZiZmZ04cYIonJmZyWQyjYyMPv30UxMTEyaT6e7ufu3aNWJrWFgYnU6fMmUKsbhx40Y2m41hWHNzM0KIx+NFRkbW1tZiGEbMenTu3DkOh5OcnDxKp5aZmYnjuJ+f38BNO3futLGxOXz4cElJyaD74jielpY2c+ZMBoOhr6+/ZMmS3377jdgkvYsQQr29vdu3bzc3N9fW1nZ2ds7NzZXZVLFYfPXqVRcXF+nFYmNjN27caGhoOHCTvr6+p6dnRkbGxH7KA6SAOAAAoIh58+ZdvnyZXNywYUN4eLhIJNLV1c3Nza2trbW0tFy3bl13dzdCKCwsLCQkRCgUbtq0qa6u7tatWz09Pe+///6TJ08QQpmZmZIT/WZlZSUkJJCLGRkZvr6+VlZWOI7X1NQghIihbX19faN0akVFRba2tiwWa+AmbW3tr7/+WkNDY926dZ2dnQMLxMfHR0dHx8bGCgSCn3/++cmTJx4eHo2NjUhWFyGEtm7d+sUXX6Snpz9//tzX13flypW//vqr9KY+e/ZMLBbfvHlzwYIFRIA1c+bMrKwsyQ/1X375pba2duXKlUNV8tZbbz19+vT27dvydA6YeCAOAAAok7u7O4fDMTQ0DA4O7uzsfPz4MbmJRqMRX5Tt7e35fH57e3tOTo4Ch/Dx8Wlra9u2bZvyWv2/Ojs7Hz16ZGVlNVQBNze38PDwurq6rVu39tskEonS0tKWLVu2atUqLpfr5OR04MCB5ubmgwcPShYbtIu6urr4fP7SpUv9/f319PTi4uK0tLRk9g8xHtDQ0DA5ObmqqqqxsXHJkiWfffbZ8ePHySbxeDw+ny+lkhkzZiCEKisrpR8LTFQQBwAARgWdTkcIkV92+5kzZw6LxSLvmY8dAoEAx/FBbwaQdu7caWtrm5WVVVZWJrm+qqqqo6Njzpw55BpXV1c6nU4+AelHsosePHggFArJ8X3a2tpTpkyR2T8MBgMh5ODg4O7uPmnSJC6Xm5CQwOVyycgjJibmk08+MTU1lVIJcbLETQtAQRAHAADUg8FgNDU1qbsV/XV1daE/Pl+HwmQyc3JyMAxbs2aNSCQi1xMv4Ono6EgW1tPTa29vl3lc4ilDXFwc9of6+nqhUCh9LxMTE4QQMZCCQKfTLSwsamtrEUJlZWWVlZVr166VXom2tjb648QBBUEcAABQg+7u7tevX5uZmam7If0RH4oyZ9dxc3OLiIiorq5OSkoiV+rp6SGE+n3qy3maxCC+9PR0XMKVK1ek76WjozNjxox79+5Jruzp6eFyuQih7OzsCxcuaGhoEIEFcYjk5GQMwyRHHojFYvLEAQVBHAAAUIPS0lIcx+fOnUss0mi0oZ4gqJiRkRGGYfLMEJCUlGRnZ1deXk6ucXR01NHRkfyIvXbtmlgsfvvtt2XWNnXqVCaTWVFRMdwGBwUFlZeXP3z4kFgUCoX19fXEa4Q5OTmSUQVx9yU2NhbHccmHF8TJGhsbD/fQYGKAOAAAoCJ9fX0tLS09PT137tzh8Xjm5uYhISHEJmtr61evXhUUFHR3dzc1NdXX10vuOGnSpGfPntXV1bW3t3d3dxcXF4/ee4MsFsvS0rKhoUFmSeLpgKampuSayMjIb7/99ujRo21tbZWVlevXrzcxMQkNDZWnto8//vjEiRN8Pr+tra23t7ehoeH58+cIoeDgYGNj46HmLY6IiLCwsAgJCXn8+PHLly+joqJEItHAMYxSECcrfQYCMIFBHAAAUMT+/ftdXV0RQlFRUYsXL+bz+enp6QghZ2fnhw8fHjp0KDIyEiH0wQcfVFdXE7t0dXU5OTlpa2t7eHjY2NhcvHiRfAy/YcOGBQsWrFixwtbWNikpibhH7ebmRrxYuH79eiMjI3t7+0WLFr169Wq0T83Hx6eqqop88P/dd99ZW1vX1ta6urp+/vnnkiXnzp0bEREhuWbHjh0pKSmJiYmTJ0/29PScNm1aaWkpm81GCMnsooyMjPDw8NTUVAMDAxMTEx6P19LSghASi8UCgaCwsHDQ1urr61+6dMnMzMzFxcXU1PT69etFRUUyZxSQdOPGDVNTU2dnZ/l3ARMKDiaWgICAgIAAdbdinEEI5ebmqrsV6kRMWTOqhwgNDZ00adKoHkIe8vyuq6uraTTakSNHVNMkmXp7ez08PLKzs0ej8ubmZiaTuXfvXnkKq+A6AaoH9wMAACoyXlLbWVtbJyYmJiYmDpqtR8V6e3sLCgra29uDg4NHo/74+HgXF5ewsLDRqByMCxAHAABAf9HR0YGBgcHBwWpPKVRaWnr69Oni4mLpUxooJi0traKi4uzZs1paWkqvHIwXEAcAtHbtWl1dXQzDFBirPKakpqba2dlpa2uz2Ww7O7tt27a1tbUppWbJDPQEOp1uZGQ0f/78PXv2EA9xgRQxMTE5OTmtra3Tp08/deqUupsjl+Tk5LCwsF27dqm3GV5eXseOHSOTLyhRYWHhmzdvSktL9fX1lV45GEcgDgDo8OHDhw4dUncrlODSpUvr1q17/PhxY2NjUlJSampqQECAUmomM9BzuVwcx/v6+gQCQV5e3vTp06OiohwcHGTOA09xKSkpb968wXH80aNHyvqlqIC3t/fu3bvV3YrRsnjx4ujoaMn3HQA1QRwAxrRhJZ6n0+lEUjUdHZ3AwMAlS5b8z//8D/HmlXJhGKanpzd//vycnJy8vLzGxkYfHx+130AeaFi9BwCgJogDAEIIYRim7iYMbliJ57/99lvJhPHEnOqjPdQrICAgJCREIBAcOHBgVA+kgGH1HgCAmiAOoCgcx/fs2WNra8tgMLhc7pYtW8hNX3zxBYvF0tXVFQgEkZGRpqamDx48wIfOqi49tTySmpF9uInnh6W6ulpPT8/CwkLhXpITMRlOcXExmkC9BwCgCjW+swhGg5zzB8TGxmIY9uWXX7a0tAiFwqysLIRQeXk5uRUhtGnTpn379i1btuz+/fvbt2+n0+lHjhx5/fr1nTt3Zs+ePXny5BcvXhDlQ0ND2Wz2vXv3urq6qqqqXF1ddXV1Hz9+TGyVvu9HH31kbGxMNmzPnj0IoaamJmLR39+fSDwvP7FY3NDQsG/fPgaDIecr4Ei++QPI8QH9EKMRp06dSiyOx96jznvhcv6uwaCoc51QCvxGJxp54gChUMhisd5//31yzYkTJwbGASKRiCyvo6MTHBxMlr9+/TpCKDExkVgMDQ2V/IC8ceMGQighIUGefZUeBxDTpBsYGPzrX/8Si8Xy7DLCOADHcWLEAPHzeOw96vx/hzhgJKhznVAKTVX3HcAYUlNTIxQKvby85Cw/3Kzqkqnlh7vvyD158uT169fl5eXR0dEHDx788ccfjYyMRulYhM7OThzHORzOoFvHUe+N2WEiyhUUFBQUFKTuVgAwVkAcQEVEWhEiCak8FMiqTqaWH0lGdsVoaWkZGhp6e3tPnz7dxsYmJSUlIyNjlI5F+P333xFCdnZ2g24dR71HfNub2IKCgng8npubm7obMi5duXJltP+agOpBHEBFxKD6N2/eyFl+uFnVJVPLjyQj+whZW1trampWVVWN9oHOnTuHEFq4cOGgW8dR7y1fvnw0qh1TgoKC3NzcqHCmowTigIkH3hegIkdHRw0NjZ9++kn+8sPKqi6ZWl7mvspKPP/y5cuVK1dKrqmuru7t7Z06derIK5fixYsX6enpZmZma9asGbTAuOg9AABlQRxARYaGhv7+/qdOncrOzm5ra7tz587BgwellJcnq/pQqeVl7jusxPNSGslms8+fP//jjz+2tbV1d3eXl5f//e9/Z7PZ/dLCjhCO4x0dHX19fTiONzU15ebmvvfee5qamgUFBUONDxgXvQcAoC61jlIEyifne4Pt7e1r1641MDDQ0dGZN2/e9u3bEUJmZma3b99OTU0lsr9PnTqVfO+ur69vz549M2bM0NLS0tfXX7p0KfFaPCE0NFRLS8vU1JRGo3E4nCVLltTW1pJbpe/78uXLBQsWMJnM6dOnf/7558RMBtbW1sSLc7du3bKwsNDW1p43bx75stxQ/Pz8pk+frqOjw2AwrKysgoODKysr5ek0JGsM+ZkzZ5ydnVksFp1O19DQQH9MKfjOO+8kJia+fPmSLDlOe48648Bl/q6BFNS5TigFw3FcXSEIGA2BgYEIofz8fFUe9NNPP83Pz3/58qUqD6pEGIbl5uaq65nxWOi9vLy8oKAgKvw3UO/veryjznVCKfBcACjHeEktPzZB7wEA1AXiADA+/Pbbb9jQgoOD1d1AMAGVlJRER0dLZp1evXq1ZAFvb29dXV1NTU0HB4dbt26pq53d3d0pKSnW1tZ0Ol1PT8/R0bGurm5gsa6uLjs7u7i4OGLxzJkzqampEIMCiAPASKkmtbydnZ2U51snT54cpeOONtX0HlDAjh07MjMzY2JiyKzTBgYGR48eLSoqIsucP38+Pz/f19e3qqpq9uzZ6mpqUFDQN998c+zYMaFQeP/+fSsrq0HTa8XGxj548IBc9PPzYzKZXl5exDQVgLIgDgAjNU5Ty48R1Ok9JSZBVkE+5d27d588eTIvL09XV5dcmZmZqaGhERoaOqZyTJ88ebKgoCA/P//dd9+l0WgmJiaFhYWOjo79il2+fPnu3bv9Vm7atGnWrFmLFi3q6elRVXvBmANxAABAFZSYBHm08ynX1NRs27YtISFBMo01Qsjd3Z3H4z19+nTz5s2jd/Th+uqrr2bPnu3k5CSljEgk2rJly6BTAMXHx1dUVMDsQFQGcQAAQF64kpIgS8+2PNx8yufOneNwOMnJyco6zczMTBzH/fz8Bm7auXOnjY3N4cOHS0pKhttFfD6fzWazWKzCwsKFCxdyOBwzMzMixReht7d3+/bt5ubm2trazs7O8kzzLBaLr1696uLiIr1YbGzsxo0bB51KXF9f39PTMyMjA94CoK7RfjERqJic8wcASYjy75TL+V64EpMgS8+2PKyqfvjhB11dXTIHo3Ty/K4tLS3t7e37rbSysnr06BGO45cvX9bQ0Jg2bVpHRweO48XFxYsXLyaLSe8iIhflhQsXWltbBQKBh4cHm80ms2Ju3ryZwWCcOnWqpaUlJiZGQ0Pjxo0b0pv66NEjhJCLi8v8+fOnTJnCYDDs7Oz2799PTHVFKCsr8/Pzw3GcSFoRGxvbr5Lo6GgkkW5UCpg/YEKC+wEAALmIRKK0tLRly5atWrWKy+U6OTkdOHCgublZ+mSUUtBoNOJ7s729PZ/Pb29vz8nJUaAeHx+ftra2bdu2KdaMfjo7Ox89emRlZTVUATc3t/Dw8Lq6uq1bt/bbJGcXubu7czgcQ0PD4ODgzs7Ox48fI4S6urr4fP7SpUv9/f319PTi4uK0tLRkdggxHtDQ0DA5ObmqqqqxsXHJkiWfffbZ8ePHySbxeDw+ny+lkhkzZiCEKisrpR8LTFQQBwAA5DKqSZAlsy2rl0AgwHGcxWJJKbNz505bW9usrKyysjLJ9cPtIjqdjhAipnx+8OCBUCgkx/dpa2tPmTJFZocwGAyEkIODg7u7+6RJk7hcbkJCApfLJSOPmJiYTz75xNTUVEolxMk2NjZKPxaYqCAOAADIZbSTIJPZltWrq6sL/fH5OhQmk5mTk4Nh2Jo1a0QiEbl+JF3U2dmJEIqLiyNnxaivrxcKhdL3MjExQQgRIycIdDrdwsKitrYWIVRWVlZZWbl27VrplRAzYRMnDigI4gAAgFxGNQmyZLZl9SI+FGXOruPm5hYREVFdXZ2UlESuHEkXEYP40tPTJR/cXrlyRfpeOjo6M2bMuHfvnuTKnp4eLpeLEMrOzr5w4YKGhgYRWBCHSE5OxjBMMomlWCwmTxxQEMQBAAC5jGoSZMlsyyOsaoSMjIwwDJNnhoCkpCQ7O7vy8nJyzXBzTEuaOnUqk8msqKgYboODgoLKy8sfPnxILAqFwvr6euI1wpycHMmoQnKcoOTDC+JkjY2Nh3toMDFAHAAAkIvSkyAPlW15uFUVFxcr8b1BFotlaWnZ0NAgT4fk5ORoampKrpGZY1pKbR9//PGJEyf4fH5bW1tvb29DQ8Pz588RQsHBwcbGxkPNWxwREWFhYRESEvL48eOXL19GRUWJRKKBYxilIE5W+gwEYAKDOAAAIK8dO3akpKQkJiZOnjzZ09Nz2rRppaWlbDab2Lphw4YFCxasWLHC1tY2KSmJuM/s5ub25MkThND69euNjIzs7e0XLVr06tUrhFBXV5eTk5O2traHh4eNjc3FixfJp/LDrUq5fHx8qqqqyAf/3333nbW1dW1traur6+effy5Zcu7cuREREXJ2EZ/PT09PRwg5Ozs/fPjw0KFDkZGRCKEPPviguroaIZSRkREeHp6ammpgYGBiYsLj8VpaWhBCYrFYIBAUFhYO2lp9ff1Lly6ZmZm5uLiYmppev369qKhI5owCkm7cuGFqaurs7Cz/LmBCUd0rikAlYP4ABSCYP0Dl74WHhoZOmjRJlUckyPO7rq6uptFoR44cUU2TZOrt7fXw8MjOzh6Nypubm5lM5t69e+UpDPMHTEhwPwAAoB5jNtOdtbV1YmJiYmLioNl6VKy3t7egoKC9vX2UkmrGx8e7uLiEhYWNRuVgXIA4AAAA+ouOjg4MDAwODlZ7SqHS0tLTp08XFxdLn9JAMWlpaRUVFWfPntXS0lJ65WC8gDgAAKBq4yLbcnJyclhY2K5du9TbDC8vr2PHjpHZFpSosLDwzZs3paWl+vr6Sq8cjCM0dTcAAEA5KSkpKSkp6m6FbN7e3t7e3upuxWhZvHjx4sWL1d0KoH5wPwAAAACgLogDAAAAAOqCOAAAAACgLogDAAAAAOqCcYITUENDQ15enrpbMc7ITOgysRGnT5HLhuK/65GArpuQMBzH1d0GoEyBgYFj9kUsAMAEAJ8aEwzEAQBQGoZhubm5y5cvV3dDAADqAeMDAAAAAOqCOAAAAACgLogDAAAAAOqCOAAAAACgLogDAAAAAOqCOAAAAACgLogDAAAAAOqCOAAAAACgLogDAAAAAOqCOAAAAACgLogDAAAAAOqCOAAAAACgLogDAAAAAOqCOAAAAACgLogDAAAAAOqCOAAAAACgLogDAAAAAOqCOAAAAACgLogDAAAAAOqCOAAAAACgLogDAAAAAOqCOAAAAACgLogDAAAAAOqCOAAAAACgLogDAAAAAOqCOAAAAACgLogDAAAAAOqCOAAAAACgLogDAAAAAOqCOAAAAACgLogDAAAAAOqCOAAAAACgLogDAAAAAOrCcBxXdxsAAKoTGhr64MEDcvHWrVvTp0/X19cnFjU1Nf/zn/+YmZmpqXUAAFWjqbsBAACVMjY2PnjwoOSaO3fukD9bWlpCEAAApcBzAQCoZeXKlUNtotPpISEhKmwLAED94LkAAJTj6Oh47969Qf/2Hzx4YGNjo/omAQDUBe4HAEA5f/vb3zQ1NfutxDBs1qxZEAQAQDUQBwBAOStWrOjt7e23UlNT8+9//7ta2gMAUCN4LgAAFbm7u1+7dq2vr49cg2HYkydPTE1N1dgqAIDqwf0AAKho9erVGIaRixoaGvPmzYMgAAAKgjgAACoKDAyUXMQw7G9/+5u6GgMAUCOIAwCgosmTJ3t5eZGjBTEMW7p0qXqbBABQC4gDAKCoVatWEcODNDU1//rXvxoYGKi7RQAANYA4AACKWrZsGZ1ORwjhOL5q1Sp1NwcAoB4QBwBAUWw2+8MPP0QI0el0X19fdTcHAKAeEAcAQF0fffQRQmjp0qVsNlvdbQEAqAfMHwBkyMvLCwoKUncrAACKCAgIyM/PV3crwJgG+QaBXHJzc9XdhBEJCgri8Xhubm7qbohypKenI4TCw8NHXtXRo0eDg4NptLH4r+DKlSsZGRnj/dpTI+I6AUC6sfjHD8ag5cuXq7sJIxIUFOTm5jbez4JEfMNTyun4+fkxmcyR1zNKMjIyJsxvTfXgTgCQB4wPAIDSxnIQAABQAYgDAAAAAOqCOAAAAACgLogDAAAAAOqCOAAAAACgLogDAKCKs2fPcrnc77//Xt0NGS0lJSXR0dGnT5+2tLTEMAzDsNWrV0sW8Pb21tXV1dTUdHBwuHXrlrra2d3dnZKSYm1tTafT9fT0HB0d6+rqBhbr6uqys7OLi4sjFs+cOZOamtrb26vStgIKgDgAAKqY2JOG7dixIzMzMyYmxt/f/+HDh1ZWVgYGBkePHi0qKiLLnD9/Pj8/39fXt6qqavbs2epqalBQ0DfffHPs2DGhUHj//n0rK6uOjo6BxWJjYx88eEAuEm94enl5vX79WoWNBRMfxAEAUIWPj09ra6sKUgmIRCJ3d/fRPoqk3bt3nzx5Mi8vT1dXl1yZmZmpoaERGhra2tqqysZId/LkyYKCgvz8/HfffZdGo5mYmBQWFjo6OvYrdvny5bt37/ZbuWnTplmzZi1atKinp0dV7QUTH8QBAAAly87OFggEKjtcTU3Ntm3bEhIS+s2F4O7uzuPxnj59unnzZpU1Rqavvvpq9uzZTk5OUsqIRKItW7ZkZGQM3BQfH19RUTHoJgAUA3EAAJRQVlZmbm6OYdj+/fsRQnw+n81ms1iswsLChQsXcjgcMzOzEydOEIUzMzOZTKaRkdGnn35qYmLCZDLd3d2vXbtGbA0LC6PT6VOmTCEWN27cyGazMQxrbm5GCPF4vMjIyNraWgzDrK2tEULnzp3jcDjJycmjdGqZmZk4jvv5+Q3ctHPnThsbm8OHD5eUlAy6L47jaWlpM2fOZDAY+vr6S5Ys+e2334hN0rsIIdTb27t9+3Zzc3NtbW1nZ2d55j8Wi8VXr151cXGRXiw2Nnbjxo2GhoYDN+nr63t6emZkZEzspzxAlSAOAIAS5s2bd/nyZXJxw4YN4eHhIpFIV1c3Nze3trbW0tJy3bp13d3dCKGwsLCQkBChULhp06a6urpbt2719PS8//77T548QQhlZmZKzvWblZWVkJBALmZkZPj6+lpZWeE4XlNTgxAihrb19fWN0qkVFRXZ2tqyWKyBm7S1tb/++msNDY1169Z1dnYOLBAfHx8dHR0bGysQCH7++ecnT554eHg0NjYiWV2EENq6desXX3yRnp7+/PlzX1/flStX/vrrr9Kb+uzZM7FYfPPmzQULFhAB1syZM7OysiQ/1H/55Zfa2tqVK1cOVclbb7319OnT27dvy9M5AMgEcQAAlObu7s7hcAwNDYODgzs7Ox8/fkxuotFoxBdle3t7Pp/f3t6ek5OjwCF8fHza2tq2bdumvFb/r87OzkePHllZWQ1VwM3NLTw8vK6ubuvWrf02iUSitLS0ZcuWrVq1isvlOjk5HThwoLm5+eDBg5LFBu2irq4uPp+/dOlSf39/PT29uLg4LS0tmf1DjAc0NDRMTk6uqqpqbGxcsmTJZ599dvz4cbJJPB6Pz+dLqWTGjBkIocrKSunHAkBOEAcAABBCiE6nI4TIL7v9zJkzh8VikffM094QCwAAEfhJREFUxw6BQIDj+KA3A0g7d+60tbXNysoqKyuTXF9VVdXR0TFnzhxyjaurK51OJ5+A9CPZRQ8ePBAKheT4Pm1t7SlTpsjsHwaDgRBycHBwd3efNGkSl8tNSEjgcrlk5BETE/PJJ5+YmppKqYQ4WeKmBQAjB3EAAEAuDAajqalJ3a3or6urC/3x+ToUJpOZk5ODYdiaNWtEIhG5nngBT0dHR7Kwnp5ee3u7zOMSTxni4uKwP9TX1wuFQul7mZiYIISIgRQEOp1uYWFRW1uLECorK6usrFy7dq30SrS1tdEfJw7AyEEcAACQrbu7+/Xr12ZmZupuSH/Eh6LM2XXc3NwiIiKqq6uTkpLIlXp6egihfp/6cp4mMYgvPT0dl3DlyhXpe+no6MyYMePevXuSK3t6erhcLkIoOzv7woULGhoaRGBBHCI5ORnDMMmRB2KxmDxxAEYO4gAAgGylpaU4js+dO5dYpNFoQz1BUDEjIyMMw+SZISApKcnOzq68vJxc4+joqKOjI/kRe+3aNbFY/Pbbb8usberUqUwms6KiYrgNDgoKKi8vf/jwIbEoFArr6+uJ1whzcnIkowri7ktsbCyO45IPL4iTNTY2Hu6hARgUxAEAgMH19fW1tLT09PTcuXOHx+OZm5uHhIQQm6ytrV+9elVQUNDd3d3U1FRfXy+546RJk549e1ZXV9fe3t7d3V1cXDx67w2yWCxLS8uGhgaZJYmnA5qampJrIiMjv/3226NHj7a1tVVWVq5fv97ExCQ0NFSe2j7++OMTJ07w+fy2trbe3t6Ghobnz58jhIKDg42NjYeatzgiIsLCwiIkJOTx48cvX76MiooSiUQDxzBKQZys9BkIAJAfxAEAUML+/ftdXV0RQlFRUYsXL+bz+enp6QghZ2fnhw8fHjp0KDIyEiH0wQcfVFdXE7t0dXU5OTlpa2t7eHjY2NhcvHiRfAy/YcOGBQsWrFixwtbWNikpibhH7ebmRrxYuH79eiMjI3t7+0WLFr169Wq0T83Hx6eqqop88P/dd99ZW1vX1ta6urp+/vnnkiXnzp0bEREhuWbHjh0pKSmJiYmTJ0/29PScNm1aaWkpm81GCMnsooyMjPDw8NTUVAMDAxMTEx6P19LSghASi8UCgaCwsHDQ1urr61+6dMnMzMzFxcXU1PT69etFRUUyZxSQdOPGDVNTU2dnZ/l3AUAaHACpiNlR1N2KkUII5ebmqrsVShMQEBAQEDCqhwgNDZ00adKoHkImOa+96upqGo125MgRFTRJHr29vR4eHtnZ2aNReXNzM5PJ3Lt3rzyFVXCdgAkA7gcAAAY3XlLbWVtbJyYmJiYmDpqtR8V6e3sLCgra29uDg4NHo/74+HgXF5ewsLDRqBxQE8QBQPnWrl2rq6uLYZgCo6jURTJZLYFOpxsZGc2fP3/Pnj3E/V4wZkVHRwcGBgYHB6s9pVBpaenp06eLi4ulT2mgmLS0tIqKirNnz2ppaSm9ckBZEAcA5Tt8+PChQ4fU3YrhIZPVcrlcHMf7+voEAkFeXt706dOjoqIcHBxkThk7kcTExOTk5LS2tk6fPv3UqVPqbo5ckpOTw8LCdu3apd5meHl5HTt2jEy+oESFhYVv3rwpLS3V19dXeuWAymjqbgAAYxGGYXp6evPnz58/f76Pj09QUJCPj8/vv/9OvOc94aWkpKSkpKi7FcPm7e3t7e2t7laMlsWLFy9evFjdrQATENwPAKMCwzB1N0FpAgICQkJCBALBgQMH1N0WAABQMogDgHLgOL5nzx5bW1sGg8Hlcrds2SK5ddAMrTLzuv7000/vvPMOi8XicDhOTk5tbW1DVTXaiPfmi4uLJ8bpAADA/1L3CwtgrJPz3a3Y2FgMw7788suWlhahUJiVlYUQKi8vJ7Zu3ryZwWCcOnWqpaUlJiZGQ0Pjxo0bxF4IoQsXLrS2tgoEAg8PDzabLRaLcRzv6OjgcDipqakikejFixfLli1ramqSUpV0SL73BsnxAf0Qn9lTp04dI6dDkffBJsY7q2pEkesEjBD8jQEZ5PlfLBQKWSzW+++/T64hvgcTcYBIJGKxWMHBwWRhBoOxYcMG/I8PTpFIRGwiooeamhocx+/evYsQ+uGHHyQPJKUq6UYYB+A4TowYGCOnQ5H/7xAHjBBFrhMwQjBOEChBTU2NUCj08vIadKv8GVol87paWloaGRmtWrVq06ZNISEh06ZNG1ZVytXZ2YnjOIfDGTun09DQkJeXp4RzG8OItD0T/jRHT0NDwxhMDQXGHHUHImCsk+c72dmzZxFCkhOoSd4P+OWXXwZeeHPnzsUHfIEm3ja8f/8+sXj37t0PP/yQRqNhGBYUFCQUCqVUJR0a2f0AYq54b2/vMXI6AQEBCv/JA0qB+wFAJhgnCJSAyWQihN68eTPoVsUytCKEHBwcvv/++2fPnkVFReXm5u7du1fhqkbo3LlzCKGFCxeiMXM6VPj/Ds8FRgjiRSAPiAOAEjg6OmpoaPz000+DblUsQ+uzZ8+INO2Ghoa7du2aPXv2vXv3FE72OhIvXrxIT083MzNbs2YNGv+nAwAAkiAOAEpgaGjo7+9/6tSp7Ozstra2O3fuHDx4kNwqJUOrFM+ePfv0009/++03sVhcXl5eX18/d+5cxaoaFhzHOzo6+vr6cBxvamrKzc197733NDU1CwoKiPEB4+t0AABABnXfuAJjnZz3Ztvb29euXWtgYKCjozNv3rzt27cjhMzMzG7fvo3j+Js3b6KioszNzWk0GhE0VFVVZWVlEXOwz5gxo7a29uDBg8QHrYWFxe+//15XV+fu7q6vr6+pqfmnP/0pNja2p6dnqKpkNg/JGh9w5swZZ2dnFotFp9M1NDTQH1MKvvPOO4mJiS9fvpQsrPbTocg4cHguMEIUuU7ACGE4jqstBgHjQV5eXlBQ0Hi/TjAMy83NXb58ubobohyBgYEIofz8fHU3ZHRNjGtPjShynYARgucCAAAAAHVBHAAAAABQF8QBAIAJoqSkJDo6+vTp05aWlhiGYRi2evVqyQLe3t66urqampoODg7EnBDq0tfXl56e7u7uPnBTWVnZe++9x2KxTExMoqKiyNdxz5w5k5qa2tvbq9qWgokP4gAAwESwY8eOzMzMmJgYf3//hw8fWllZGRgYHD16tKioiCxz/vz5/Px8X1/fqqqq2bNnq6up1dXV/+///b+IiAihUNhvU1VVlbe3t5eXV1NT07fffvvvf/97/fr1xCY/Pz8mk+nl5fX69WuVNxlMZBAHAAAGIRKJBv22qt6qhrJ79+6TJ0/m5eXp6uqSKzMzMzU0NEJDQ1tbW0f16MNy+/btrVu3rl+/3sXFZeDWpKSkKVOmJCQksNlsNze3qKior7/+mpxqetOmTbNmzVq0aFFPT49qWw0mMogDAACDyM7OFggEY62qQdXU1Gzbti0hIYGY15Lk7u7O4/GePn26efPm0Tv6cM2aNev06dMfffQRg8Hot6mnp6eoqMjT0xPDMGLNwoULcRwvLCwky8THx1dUVGRkZKiuxWCigzgAgAkLx/G0tLSZM2cyGAx9ff0lS5aQ3yzDwsLodPqUKVOIxY0bN7LZbAzDmpubEUI8Hi8yMrK2thbDMGtr68zMTCaTaWRk9Omnn5qYmDCZTHd392vXrilQFULo3LlzHA4nOTlZWaeZmZmJ47ifn9/ATTt37rSxsTl8+HBJSclwu4jP57PZbBaLVVhYuHDhQg6HY2ZmRiTOIPT29m7fvt3c3FxbW9vZ2ZmY7WAkHj582NHRYW5uTq6xsrJCCN25c4dco6+v7+npmZGRAa9TAmWBOACACSs+Pj46Ojo2NlYgEPz8889Pnjzx8PBobGxECGVmZkrOppCVlZWQkEAuZmRk+Pr6WllZ4TheU1MTFhYWEhIiFAo3bdpUV1d369atnp6e999//8mTJ8OtCiFEjHTr6+tT1mkWFRXZ2toSkzj1o62t/fXXX2toaKxbt66zs3NgASldtGHDhvDwcJFIpKurm5ubW1tba2lpuW7dOiKBJEJo69atX3zxRXp6+vPnz319fVeuXPnrr7+O5ERevHiBEJJ8tMFkMrW1tYn2kN56662nT5/evn17JMcCgARxAAATk0gkSktLW7Zs2apVq7hcrpOT04EDB5qbmyWnfB4WGo1GfG+2t7fn8/nt7e05OTkK1OPj49PW1rZt2zbFmtFPZ2fno0ePiO/Ng3JzcwsPD6+rq9u6dWu/TXJ2kbu7O4fDMTQ0DA4O7uzsfPz4MUKoq6uLz+cvXbrU399fT08vLi5OS0tLsQ4hEa8GaGpqSq7U0tISiUSSa2bMmIEQqqysHMmxACBBHADAxFRVVdXR0TFnzhxyjaurK51OJ+/nj8ScOXNYLBZ5C12NBAIBjuOD3gwg7dy509bWNisrq6ysTHL9cLuITqcjhIj7AQ8ePBAKhY6OjsQmbW3tKVOmjLBDiPEN/cYAisVibW1tyTXEyfa7SQCAwiAOAGBiIt4u09HRkVypp6fX3t6ulPoZDEZTU5NSqhqJrq4uojFSyjCZzJycHAzD1qxZI/ndeiRdRDxliIuLw/5QX18/8D3AYSHGWLS1tZFrhEJhV1eXiYmJZDEiLCBOHICRgzgAgIlJT08PIdTvI+3169dmZmYjr7y7u1tZVY0Q8aEoc3YdNze3iIiI6urqpKQkcuVIusjQ0BAhlJ6eLpmv5cqVKwqcAmn69Om6urr19fXkGmJEhbOzs2QxsViM/jhxAEYO4gAAJiZHR0cdHR3JkWvXrl0Ti8Vvv/02sUij0cghb8NVWlqK4/jcuXNHXtUIGRkZYRgmzwwBSUlJdnZ25eXl5BqZXSTF1KlTmUxmRUWFYs0eFI1GW7Ro0c8//0wOoiwuLsYwrN+rEMTJGhsbK/HQgMogDgBgYmIymZGRkf+/vbsHSeeP4wD+/cEdWZCgFCWCYihNQVNDD0MELg2XhHCjTRLU0XJEQQ9I2WDYVEMQDhURldiiq07nFFE0VAgR0gM9kVYkdd5vECR+9M/Dv3bWvV+b+OXj+74e+tF7+AaDwbW1tVQqdXh4ODg4aDAY3G53boDVar2/vw+FQm9vbzc3Nx9/hhJC9Hr9xcXF2dlZOp3Ofcdns9mHh4f39/eDg4ORkRGTyeRyuYooFYlESnjdYE1NTVNTUzKZlDMhgUDg41l4Bafo62oDAwMbGxtLS0upVEoUxWQyeXl5SQhhWbahoaG4+xZPTExcX19PTU09Pz8LguDz+VwuV3Nz88cxuY1taWkpoj7AJ75zkWP4iX7HGvCEkM3NTaVTlIzMdeWz2azP57PZbDRN63Q6h8NxfHycf/bu7q67u1uj0VgsluHhYZ7nCSFWq/X8/FySpL29PbPZXF1d3dnZeXV15Xa7aZo2Go0URWm12r6+vkQiUVypcDhcW1s7MzNTML/MfY/jOJqmX15ecg+DwWDu8oG6urqhoaF/BvM8zzCMnClaXFzMnZFns9kSicTy8rJWqyWEmM3mk5MTSZIymczo6KjJZKIoqr6+vr+//+joSJIkh8NBCJmcnPw0rSAIHR0d+UP+jY2N7e3tsVgsPyAWi7W1tVVVVRkMBp7nX19f/6nQ29trNBqz2WzBmZG5n4DK/fjPdyg39AEV6Ps/391ut16v/85XlGTve6enpxRFra6ufkMkOURR7OrqWllZKUfx29tbjUYzPz8vZzD6AJADxwUAQJaKXenOarV6PB6Px/P09KR0FiKKYigUSqfTLMuWo/709HRrayvHceUoDuqEPgAAfryxsTGn08myrOJLCkWj0Z2dnUgk8vUtDYrj9/v39/fD4TBN0yUvDqqFPgAAChgfHw8EAo+PjxaLZXt7W+k4n5udneU4bm5uTtkYPT096+vr+dUWSmh3dzeTyUSjUZ1OV/LioGaU0gEAoNJ5vV6v16t0isLsdrvdblc6RbkwDMMwjNIp4BfC/wEAAADqhT4AAABAvdAHAAAAqBf6AAAAAPXCeYIgi9PpVDrC/7WwsLC1taV0itKIx+PkV7wpX8vdQPfXb2b5xOPx/BoQAP/ljyRJSmeAiiYIgt/vVzoFABQjt9Ci0imgoqEPAAAAUC+cHwAAAKBe6AMAAADUC30AAACAeqEPAAAAUK+/SEPUCTMyGBQAAAAASUVORK5CYII=\n","text/plain":[""]},"metadata":{},"execution_count":17}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"287Am2coqkQC","executionInfo":{"status":"ok","timestamp":1638748150465,"user_tz":480,"elapsed":277815,"user":{"displayName":"David Davis","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"03716636181783186066"}},"outputId":"85c947d2-d4d2-47ea-c278-5487002ddf45"},"source":["epochs = 30\n","\n","callbacks = [\n"," keras.callbacks.ModelCheckpoint(\"checkpoints/save_at_{epoch}.h5\"),\n","]\n","model.compile(\n"," optimizer=keras.optimizers.Adam(1e-3),\n"," loss=\"binary_crossentropy\",\n"," metrics=[\"accuracy\"],\n",")\n","model.fit(\n"," train_ds, epochs=epochs, callbacks=callbacks, validation_data=validation_ds,\n",")"],"execution_count":18,"outputs":[{"output_type":"stream","name":"stdout","text":["Epoch 1/30\n","275/275 [==============================] - 9s 29ms/step - loss: 0.3763 - accuracy: 0.1932 - val_loss: 0.3480 - val_accuracy: 0.0800\n","Epoch 2/30\n","275/275 [==============================] - 8s 28ms/step - loss: 0.2665 - accuracy: 0.4103 - val_loss: 0.2391 - val_accuracy: 0.5800\n","Epoch 3/30\n","275/275 [==============================] - 8s 27ms/step - loss: 0.2268 - accuracy: 0.5433 - val_loss: 0.1719 - val_accuracy: 0.8400\n","Epoch 4/30\n","275/275 [==============================] - 7s 27ms/step - loss: 0.1998 - accuracy: 0.6261 - val_loss: 0.1379 - val_accuracy: 0.9000\n","Epoch 5/30\n","275/275 [==============================] - 7s 27ms/step - loss: 0.1794 - accuracy: 0.6794 - val_loss: 0.1251 - val_accuracy: 0.9300\n","Epoch 6/30\n","275/275 [==============================] - 8s 27ms/step - loss: 0.1657 - accuracy: 0.7163 - val_loss: 0.1016 - val_accuracy: 0.9200\n","Epoch 7/30\n","275/275 [==============================] - 7s 27ms/step - loss: 0.1532 - accuracy: 0.7484 - val_loss: 0.0936 - val_accuracy: 0.9600\n","Epoch 8/30\n","275/275 [==============================] - 8s 27ms/step - loss: 0.1436 - accuracy: 0.7665 - val_loss: 0.0766 - val_accuracy: 0.9700\n","Epoch 9/30\n","275/275 [==============================] - 8s 29ms/step - loss: 0.1361 - accuracy: 0.7812 - val_loss: 0.0657 - val_accuracy: 0.9800\n","Epoch 10/30\n","275/275 [==============================] - 9s 32ms/step - loss: 0.1270 - accuracy: 0.8081 - val_loss: 0.0548 - val_accuracy: 0.9700\n","Epoch 11/30\n","275/275 [==============================] - 8s 30ms/step - loss: 0.1230 - accuracy: 0.8209 - val_loss: 0.0554 - val_accuracy: 0.9900\n","Epoch 12/30\n","275/275 [==============================] - 8s 29ms/step - loss: 0.1163 - accuracy: 0.8323 - val_loss: 0.0468 - val_accuracy: 0.9700\n","Epoch 13/30\n","275/275 [==============================] - 8s 30ms/step - loss: 0.1110 - accuracy: 0.8399 - val_loss: 0.0465 - val_accuracy: 0.9900\n","Epoch 14/30\n","275/275 [==============================] - 8s 29ms/step - loss: 0.1089 - accuracy: 0.8405 - val_loss: 0.0511 - val_accuracy: 0.9800\n","Epoch 15/30\n","275/275 [==============================] - 8s 29ms/step - loss: 0.1047 - accuracy: 0.8505 - val_loss: 0.0376 - val_accuracy: 0.9800\n","Epoch 16/30\n","275/275 [==============================] - 8s 28ms/step - loss: 0.1047 - accuracy: 0.8523 - val_loss: 0.0360 - val_accuracy: 0.9800\n","Epoch 17/30\n","275/275 [==============================] - 8s 29ms/step - loss: 0.0993 - accuracy: 0.8637 - val_loss: 0.0337 - val_accuracy: 0.9800\n","Epoch 18/30\n","275/275 [==============================] - 8s 30ms/step - loss: 0.0972 - accuracy: 0.8669 - val_loss: 0.0301 - val_accuracy: 0.9900\n","Epoch 19/30\n","275/275 [==============================] - 8s 28ms/step - loss: 0.0963 - accuracy: 0.8686 - val_loss: 0.0334 - val_accuracy: 0.9800\n","Epoch 20/30\n","275/275 [==============================] - 8s 29ms/step - loss: 0.0929 - accuracy: 0.8790 - val_loss: 0.0333 - val_accuracy: 0.9800\n","Epoch 21/30\n","275/275 [==============================] - 9s 31ms/step - loss: 0.0913 - accuracy: 0.8805 - val_loss: 0.0323 - val_accuracy: 0.9700\n","Epoch 22/30\n","275/275 [==============================] - 9s 30ms/step - loss: 0.0912 - accuracy: 0.8773 - val_loss: 0.0335 - val_accuracy: 0.9800\n","Epoch 23/30\n","275/275 [==============================] - 8s 30ms/step - loss: 0.0863 - accuracy: 0.8865 - val_loss: 0.0326 - val_accuracy: 0.9800\n","Epoch 24/30\n","275/275 [==============================] - 8s 28ms/step - loss: 0.0850 - accuracy: 0.8884 - val_loss: 0.0216 - val_accuracy: 0.9900\n","Epoch 25/30\n","275/275 [==============================] - 8s 28ms/step - loss: 0.0842 - accuracy: 0.8940 - val_loss: 0.0212 - val_accuracy: 0.9800\n","Epoch 26/30\n","275/275 [==============================] - 8s 27ms/step - loss: 0.0835 - accuracy: 0.8914 - val_loss: 0.0194 - val_accuracy: 0.9900\n","Epoch 27/30\n","275/275 [==============================] - 8s 28ms/step - loss: 0.0818 - accuracy: 0.8917 - val_loss: 0.0214 - val_accuracy: 0.9700\n","Epoch 28/30\n","275/275 [==============================] - 8s 28ms/step - loss: 0.0811 - accuracy: 0.8917 - val_loss: 0.0214 - val_accuracy: 0.9700\n","Epoch 29/30\n","275/275 [==============================] - 8s 28ms/step - loss: 0.0794 - accuracy: 0.8950 - val_loss: 0.0201 - val_accuracy: 0.9800\n","Epoch 30/30\n","275/275 [==============================] - 8s 28ms/step - loss: 0.0790 - accuracy: 0.8947 - val_loss: 0.0267 - val_accuracy: 0.9700\n"]},{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":18}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"ocE3kudZq24U","executionInfo":{"status":"ok","timestamp":1638748338964,"user_tz":480,"elapsed":367,"user":{"displayName":"David Davis","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"03716636181783186066"}},"outputId":"cc43a234-3bd4-460d-ef82-806889fc9d38"},"source":["def predict_image(model, filename):\n"," img = keras.preprocessing.image.load_img(filename, target_size=(IMAGE_WIDTH, IMAGE_HEIGHT))\n"," img_array = keras.preprocessing.image.img_to_array(img)\n"," img_array = tf.expand_dims(img_array, 0) # Create batch axis\n"," predictions = model.predict(img_array).flatten()\n"," predicted_label_index = np.argmax(predictions)\n"," predicted_score = predictions[predicted_label_index]\n"," return (predicted_label_index, predicted_score)\n"," \n","index, score = predict_image(model, \"test/7/2.png\")\n","\n","print(index, score)\n"],"execution_count":19,"outputs":[{"output_type":"stream","name":"stdout","text":["7 0.9931043\n"]}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":83},"id":"MYyLaqOYtxTH","executionInfo":{"status":"ok","timestamp":1638748404260,"user_tz":480,"elapsed":54380,"user":{"displayName":"David Davis","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"03716636181783186066"}},"outputId":"8c6b1cfc-e51a-461b-d8d6-4064a7f30e61"},"source":["from IPython.display import Image, display\n","\n","SCORE_THRESHOLD = 0.75\n","\n","correct_count = 0\n","wrong_count = 0\n","discarded_count = 0\n","for label_dir in glob.glob(\"test/*\"):\n"," label = int(label_dir.replace(\"test/\", \"\"))\n"," for filename in glob.glob(label_dir + \"/*.png\"):\n"," index, score = predict_image(model, filename)\n"," if score < SCORE_THRESHOLD:\n"," discarded_count += 1\n"," continue\n"," if index == label:\n"," correct_count += 1\n"," else:\n"," wrong_count += 1\n"," print(\"%d expected, %d found with score %f\" % (label, index, score))\n"," display(Image(filename=filename))\n","\n","correct_percentage = (correct_count / (correct_count + wrong_count)) * 100\n","print(\"%.1f%% correct (N=%d, %d unknown)\" % (correct_percentage, (correct_count + wrong_count), discarded_count))"],"execution_count":20,"outputs":[{"output_type":"stream","name":"stdout","text":["9 expected, 7 found with score 0.807747\n"]},{"output_type":"display_data","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAA8ElEQVR4nGNgGAWjYBTQHDCSocfoLMMvNoav3AxfeBheixFQzEKS0f4bGN4LMvz6xXDOGCrC+Y3hOxc+LUwkWfCblYHtF8MJS4TILzYCWkiwIH0GA/dXhj2uKIJ/f3MQbwJhkDgPlf+dg+EjH34tpAURzxdU/jshBv5P+LWQnIoq2hmE3jGIv2SIb5di+MXGoPiAVBOIBjfViFFFWhChmP6blUy9RIET5kQqJM4HKrdRuIdsGdh+UdUCtl8MvEip5Rcbg9F5Ii0grqiIWMHA+puhkoGBgYFhgz+Dy0YiTScRTM5hWBpFG6NHwSgYBRQBAJY6MnCXjHpLAAAAAElFTkSuQmCC\n","text/plain":[""]},"metadata":{}},{"output_type":"stream","name":"stdout","text":["99.9% correct (N=1027, 73 unknown)\n"]}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"d26wGJn0t20g","executionInfo":{"status":"ok","timestamp":1638748436167,"user_tz":480,"elapsed":2605,"user":{"displayName":"David Davis","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"03716636181783186066"}},"outputId":"5d525abe-97bc-4a71-c757-79d8db945d4f"},"source":["model.save(SAVED_MODEL_FILENAME)"],"execution_count":21,"outputs":[{"output_type":"stream","name":"stdout","text":["INFO:tensorflow:Assets written to: saved_model/assets\n"]}]},{"cell_type":"code","metadata":{"id":"ki3E7lM_Kr0C"},"source":["#!curl -L https://storage.googleapis.com/download.tensorflow.org/models/tflite/micro/magic_wand_saved_model_2021_01_02.tgz -o saved_model.tgz\n","#!tar -xzf saved_model.tgz"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"t-hU8aU24gbL","executionInfo":{"status":"ok","timestamp":1638748457118,"user_tz":480,"elapsed":3003,"user":{"displayName":"David Davis","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"03716636181783186066"}},"outputId":"8b57dc82-3d72-4bd1-988b-b3a8b85cb101"},"source":["converter = tf.lite.TFLiteConverter.from_saved_model(SAVED_MODEL_FILENAME)\n","model_no_quant_tflite = converter.convert()\n","\n","# Save the model to disk\n","open(FLOAT_TFL_MODEL_FILENAME, \"wb\").write(model_no_quant_tflite)\n","\n","def representative_dataset():\n"," for filename in glob.glob(\"test/*/*.png\"):\n"," img = keras.preprocessing.image.load_img(filename, target_size=(IMAGE_WIDTH, IMAGE_HEIGHT))\n"," img_array = keras.preprocessing.image.img_to_array(img)\n"," img_array = tf.expand_dims(img_array, 0) # Create batch axis for images, labels in train_ds.take(1):\n"," yield([img_array])\n","# Set the optimization flag.\n","converter.optimizations = [tf.lite.Optimize.DEFAULT]\n","# Enforce integer only quantization\n","converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]\n","converter.inference_input_type = tf.int8\n","converter.inference_output_type = tf.int8\n","# Provide a representative dataset to ensure we quantize correctly.\n","converter.representative_dataset = representative_dataset\n","model_tflite = converter.convert()\n","\n","# Save the model to disk\n","open(QUANTIZED_TFL_MODEL_FILENAME, \"wb\").write(model_tflite)"],"execution_count":22,"outputs":[{"output_type":"stream","name":"stderr","text":["WARNING:absl:Buffer deduplication procedure will be skipped when flatbuffer library is not properly loaded\n","WARNING:absl:Buffer deduplication procedure will be skipped when flatbuffer library is not properly loaded\n"]},{"output_type":"execute_result","data":{"text/plain":["30880"]},"metadata":{},"execution_count":22}]},{"cell_type":"code","metadata":{"id":"w5QZTfwRLFAi","executionInfo":{"status":"ok","timestamp":1638748759830,"user_tz":480,"elapsed":192,"user":{"displayName":"David Davis","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"03716636181783186066"}}},"source":["def predict_tflite(tflite_model, filename):\n"," img = keras.preprocessing.image.load_img(filename, target_size=(IMAGE_WIDTH, IMAGE_HEIGHT))\n"," img_array = keras.preprocessing.image.img_to_array(img)\n"," img_array = tf.expand_dims(img_array, 0)\n","\n"," # Initialize the TFLite interpreter\n"," interpreter = tf.lite.Interpreter(model_content=tflite_model)\n"," interpreter.allocate_tensors()\n","\n"," input_details = interpreter.get_input_details()[0]\n"," output_details = interpreter.get_output_details()[0]\n","\n"," # If required, quantize the input layer (from float to integer)\n"," input_scale, input_zero_point = input_details[\"quantization\"]\n"," if (input_scale, input_zero_point) != (0.0, 0):\n"," img_array = np.multiply(img_array, 1.0 / input_scale) + input_zero_point\n"," img_array = img_array.astype(input_details[\"dtype\"])\n"," \n"," # Invoke the interpreter\n"," interpreter.set_tensor(input_details[\"index\"], img_array)\n"," interpreter.invoke()\n"," pred = interpreter.get_tensor(output_details[\"index\"])[0]\n"," \n"," # If required, dequantized the output layer (from integer to float)\n"," output_scale, output_zero_point = output_details[\"quantization\"]\n"," if (output_scale, output_zero_point) != (0.0, 0):\n"," pred = pred.astype(np.float32)\n"," pred = np.multiply((pred - output_zero_point), output_scale)\n"," \n"," predicted_label_index = np.argmax(pred)\n"," predicted_score = pred[predicted_label_index]\n"," return (predicted_label_index, predicted_score)"],"execution_count":27,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"vtee_WxPMgup","executionInfo":{"status":"ok","timestamp":1638748762171,"user_tz":480,"elapsed":137,"user":{"displayName":"David Davis","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"03716636181783186066"}},"outputId":"0008362b-c68d-408b-efec-b64136898b4a"},"source":["predict_tflite(model_no_quant_tflite, \"test/7/2.png\")"],"execution_count":28,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(7, 0.9931043)"]},"metadata":{},"execution_count":28}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"0rp0LirfN9vB","executionInfo":{"status":"ok","timestamp":1638748770247,"user_tz":480,"elapsed":165,"user":{"displayName":"David Davis","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"03716636181783186066"}},"outputId":"c63b8114-3f8a-45d2-d72b-585a058cb875"},"source":["predict_tflite(model_tflite, \"test/7/2.png\")"],"execution_count":29,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(7, 0.9921875)"]},"metadata":{},"execution_count":29}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":83},"id":"jdNgTO19PRqO","executionInfo":{"status":"ok","timestamp":1638748783929,"user_tz":480,"elapsed":3912,"user":{"displayName":"David Davis","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"03716636181783186066"}},"outputId":"8e6c5f8a-9236-4446-ff31-d5f95e170cee"},"source":["from IPython.display import Image, display\n","\n","correct_count = 0\n","wrong_count = 0\n","discarded_count = 0\n","for label_dir in glob.glob(\"test/*\"):\n"," label = int(label_dir.replace(\"test/\", \"\"))\n"," for filename in glob.glob(label_dir + \"/*.png\"):\n"," index, score = predict_tflite(model_tflite, filename)\n"," if score < 0.75:\n"," discarded_count += 1\n"," continue\n"," if index == label:\n"," correct_count += 1\n"," else:\n"," wrong_count += 1\n"," print(\"%d expected, %d found with score %f\" % (label, index, score))\n"," display(Image(filename=filename))\n","\n","correct_percentage = (correct_count / (correct_count + wrong_count)) * 100\n","\n","print(\"%.1f%% correct (N=%d, %d unknown)\" % (correct_percentage, (correct_count + wrong_count), discarded_count))"],"execution_count":30,"outputs":[{"output_type":"stream","name":"stdout","text":["9 expected, 7 found with score 0.816406\n"]},{"output_type":"display_data","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAA8ElEQVR4nGNgGAWjYBTQHDCSocfoLMMvNoav3AxfeBheixFQzEKS0f4bGN4LMvz6xXDOGCrC+Y3hOxc+LUwkWfCblYHtF8MJS4TILzYCWkiwIH0GA/dXhj2uKIJ/f3MQbwJhkDgPlf+dg+EjH34tpAURzxdU/jshBv5P+LWQnIoq2hmE3jGIv2SIb5di+MXGoPiAVBOIBjfViFFFWhChmP6blUy9RIET5kQqJM4HKrdRuIdsGdh+UdUCtl8MvEip5Rcbg9F5Ii0grqiIWMHA+puhkoGBgYFhgz+Dy0YiTScRTM5hWBpFG6NHwSgYBRQBAJY6MnCXjHpLAAAAAElFTkSuQmCC\n","text/plain":[""]},"metadata":{}},{"output_type":"stream","name":"stdout","text":["99.9% correct (N=1027, 73 unknown)\n"]}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":173},"id":"NTjGMU8BPpoz","executionInfo":{"status":"ok","timestamp":1638748792684,"user_tz":480,"elapsed":135,"user":{"displayName":"David Davis","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"03716636181783186066"}},"outputId":"ea56df39-9336-495c-e214-e39f9fcef78e"},"source":["import os\n","import pandas as pd\n","\n","def get_dir_size(dir):\n"," size = 0\n"," for f in os.scandir(dir):\n"," if f.is_file():\n"," size += f.stat().st_size\n"," elif f.is_dir():\n"," size += get_dir_size(f.path)\n"," return size\n","\n","# Calculate size\n","size_tf = get_dir_size(SAVED_MODEL_FILENAME)\n","size_no_quant_tflite = os.path.getsize(FLOAT_TFL_MODEL_FILENAME)\n","size_tflite = os.path.getsize(QUANTIZED_TFL_MODEL_FILENAME)\n","\n","# Compare size\n","pd.DataFrame.from_records(\n"," [[\"TensorFlow\", f\"{size_tf} bytes\", \"\"],\n"," [\"TensorFlow Lite\", f\"{size_no_quant_tflite} bytes \", f\"(reduced by {size_tf - size_no_quant_tflite} bytes)\"],\n"," [\"TensorFlow Lite Quantized\", f\"{size_tflite} bytes\", f\"(reduced by {size_no_quant_tflite - size_tflite} bytes)\"]],\n"," columns = [\"Model\", \"Size\", \"\"], index=\"Model\")\n"],"execution_count":31,"outputs":[{"output_type":"execute_result","data":{"text/html":["\n","\n","
\n"," \n"," \n"," \n"," Size \n"," \n"," \n"," \n"," Model \n"," \n"," \n"," \n"," \n"," \n"," \n"," TensorFlow \n"," 668171 bytes \n"," \n"," \n"," \n"," TensorFlow Lite \n"," 100096 bytes \n"," (reduced by 568075 bytes) \n"," \n"," \n"," TensorFlow Lite Quantized \n"," 30880 bytes \n"," (reduced by 69216 bytes) \n"," \n"," \n","
\n","
"],"text/plain":[" Size \n","Model \n","TensorFlow 668171 bytes \n","TensorFlow Lite 100096 bytes (reduced by 568075 bytes)\n","TensorFlow Lite Quantized 30880 bytes (reduced by 69216 bytes)"]},"metadata":{},"execution_count":31}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"mrvnEJLfR8KU","executionInfo":{"status":"ok","timestamp":1638748913062,"user_tz":480,"elapsed":12258,"user":{"displayName":"David Davis","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"03716636181783186066"}},"outputId":"fa3461ec-a27f-45c5-f6d0-555d339415cf"},"source":["# Install xxd if it is not available\n","!apt-get update && apt-get -qq install xxd\n","# Convert to a C source file, i.e, a TensorFlow Lite for Microcontrollers model\n","!xxd -i {QUANTIZED_TFL_MODEL_FILENAME} > {TFL_CC_MODEL_FILENAME}\n","# Update variable names\n","REPLACE_TEXT = QUANTIZED_TFL_MODEL_FILENAME.replace('/', '_').replace('.', '_')\n","!sed -i 's/'{REPLACE_TEXT}'/g_magic_wand_model_data/g' {TFL_CC_MODEL_FILENAME}"],"execution_count":32,"outputs":[{"output_type":"stream","name":"stdout","text":["\r0% [Working]\r \rGet:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]\n","Ign:2 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 InRelease\n","Get:3 https://cloud.r-project.org/bin/linux/ubuntu bionic-cran40/ InRelease [3,626 B]\n","Ign:4 https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64 InRelease\n","Hit:5 http://archive.ubuntu.com/ubuntu bionic InRelease\n","Get:6 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 Release [696 B]\n","Hit:7 https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64 Release\n","Get:8 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 Release.gpg [836 B]\n","Get:9 http://ppa.launchpad.net/c2d4u.team/c2d4u4.0+/ubuntu bionic InRelease [15.9 kB]\n","Get:10 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]\n","Get:11 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [1,444 kB]\n","Hit:12 http://ppa.launchpad.net/cran/libgit2/ubuntu bionic InRelease\n","Get:13 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [2,461 kB]\n","Get:14 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]\n","Get:15 http://security.ubuntu.com/ubuntu bionic-security/restricted amd64 Packages [691 kB]\n","Hit:16 http://ppa.launchpad.net/deadsnakes/ppa/ubuntu bionic InRelease\n","Get:17 http://ppa.launchpad.net/graphics-drivers/ppa/ubuntu bionic InRelease [21.3 kB]\n","Get:19 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 Packages [829 kB]\n","Get:20 http://ppa.launchpad.net/c2d4u.team/c2d4u4.0+/ubuntu bionic/main Sources [1,814 kB]\n","Get:21 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [2,898 kB]\n","Get:22 http://ppa.launchpad.net/c2d4u.team/c2d4u4.0+/ubuntu bionic/main amd64 Packages [931 kB]\n","Get:23 http://archive.ubuntu.com/ubuntu bionic-updates/restricted amd64 Packages [725 kB]\n","Get:24 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [2,225 kB]\n","Get:25 http://ppa.launchpad.net/graphics-drivers/ppa/ubuntu bionic/main amd64 Packages [44.7 kB]\n","Fetched 14.4 MB in 4s (3,767 kB/s)\n","Reading package lists... Done\n","Selecting previously unselected package xxd.\n","(Reading database ... 155222 files and directories currently installed.)\n","Preparing to unpack .../xxd_2%3a8.0.1453-1ubuntu1.7_amd64.deb ...\n","Unpacking xxd (2:8.0.1453-1ubuntu1.7) ...\n","Setting up xxd (2:8.0.1453-1ubuntu1.7) ...\n","Processing triggers for man-db (2.8.3-2ubuntu0.1) ...\n"]}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"oazLUtBqWzdJ","executionInfo":{"status":"ok","timestamp":1638748916580,"user_tz":480,"elapsed":339,"user":{"displayName":"David Davis","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"03716636181783186066"}},"outputId":"b6b57fbb-02e9-4972-8bb2-bedc856f0eaa"},"source":["# Print the C source file\n","!tail {TFL_CC_MODEL_FILENAME}"],"execution_count":33,"outputs":[{"output_type":"stream","name":"stdout","text":[" 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x31, 0x3a,\n"," 0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,\n"," 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,\n"," 0x0c, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00,\n"," 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,\n"," 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x01, 0x00, 0x00, 0x00,\n"," 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x04, 0x00,\n"," 0x04, 0x00, 0x00, 0x00\n","};\n","unsigned int g_magic_wand_model_data_len = 30880;\n"]}]},{"cell_type":"code","metadata":{"id":"VqN2F42PW-uv"},"source":[""],"execution_count":null,"outputs":[]}]}
\ No newline at end of file
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/website/index.html b/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/website/index.html
new file mode 100644
index 000000000..12e0e284a
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/magic_wand/website/index.html
@@ -0,0 +1,474 @@
+
+
+
+ Magic Wand Gesture Recorder
+
+
+
+
+
+
+
+ To get started recording magic wand gestures:
+
+ Upload the Magic Wand Capture sketch to an Arduino Nano BLE Sense board
+ Connect to the board using the Bluetooth button below.
+ Wave the wand to make gestures. They'll be recorded and displayed on the right.
+ Review the gestures, add labels by clicking on the '?', and remove mistakes.
+ Download the gestures as a JSON data file, ready for model training.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/README.md b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/README.md
new file mode 100644
index 000000000..b7a1b468a
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/README.md
@@ -0,0 +1,84 @@
+
+
+# Micro Speech Example
+
+This example shows how to run a 20 kB model that can recognize 2 keywords,
+"yes" and "no", from speech data.
+
+The application listens to its surroundings with a microphone and indicates
+when it has detected a word by lighting an LED or displaying data on a
+screen, depending on the capabilities of the device.
+
+
+
+The code has a small footprint (for example, around 166 kilobytes on a Cortex
+M4) and only uses about 54 kilobytes of additional RAM for working memory.
+
+## Table of contents
+
+* [Table of contents](#table-of-contents)
+* [Deploy to Arduino](#deploy-to-arduino)
+ * [Install the Arduino_TensorFlowLite library](#install-the-arduino_tensorflowlite-library)
+ * [Load and run the example](#load-and-run-the-example)
+
+
+## Deploy to Arduino
+
+The following instructions will help you build and deploy this example to
+[Arduino](https://www.arduino.cc/) devices.
+
+The example has been tested with the following devices:
+
+- [Arduino Nano 33 BLE Sense](https://store.arduino.cc/usa/nano-33-ble-sense-with-headers)
+
+The Arduino Nano 33 BLE Sense is currently the only Arduino with a built-in
+microphone. If you're using a different Arduino board and attaching your own
+microphone, you'll need to implement your own `audio_provider.cpp` code. It also has a
+set of LEDs, which are used to indicate that a word has been recognized.
+
+### Install the Arduino_TensorFlowLite library
+
+This example application is included as part of the official TensorFlow Lite Micro
+Arduino library.
+To install the TensorFlow Lite Micro for Arduino library, see the
+[how to install](../../README.md#how-to-install) instructions.
+
+### Load and run the example
+
+Once the library has been added, go to `File -> Examples`. You should see an
+entry within the list named `Arduino_TensorFlowLite`. Select
+it and click `micro_speech` to load the example.
+
+Use the Arduino IDE to build and upload the example. Once it is running, you
+should see the built-in LED on your device flashing. The built-in LED will flash on/off for each inference cycle. Saying the word "yes" will
+cause the green LED to remain on for 3 seconds. The current model has fairly low
+accuracy, so you may have to repeat "yes" a few times. Saying the word "no" will cause the red LED to light up. The blue LED will be lit for certain "unknown" sounds.
+
+Word recognition should occur at a distance of approximately 1.5 feet in a low-noise environment.
+
+The program also outputs inference results to the serial port, which appear as
+follows:
+
+```
+Heard yes (201) @4056ms
+Heard no (205) @6448ms
+Heard unknown (201) @13696ms
+Heard yes (205) @15000ms
+```
+
+The number after each detected word is its score. By default, the program only
+considers matches as valid if their score is over 200, so all of the scores you
+see will be at least 200.
+
+When the program is run, it waits several seconds for a USB-serial connection to be
+available. If there is no connection available, it will not output data. To see
+the serial output in the Arduino desktop IDE, do the following:
+
+1. Open the Arduino IDE
+1. Connect the Arduino board to your computer via USB
+1. Press the reset button on the Arduino board
+1. Within 5 seconds, go to `Tools -> Serial Monitor` in the Arduino IDE. You may
+ have to try several times, since the board will take a moment to connect.
+
+If you don't see any output, repeat the process again.
+
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/arduino_audio_provider.cpp b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/arduino_audio_provider.cpp
new file mode 100644
index 000000000..2c5594c9b
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/arduino_audio_provider.cpp
@@ -0,0 +1,194 @@
+/* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+#if defined(ARDUINO) && !defined(ARDUINO_ARDUINO_NANO33BLE)
+#define ARDUINO_EXCLUDE_CODE
+#endif // defined(ARDUINO) && !defined(ARDUINO_ARDUINO_NANO33BLE)
+
+#ifndef ARDUINO_EXCLUDE_CODE
+
+#include
+#include
+
+#include "PDM.h"
+#include "audio_provider.h"
+#include "micro_features_micro_model_settings.h"
+#include "test_over_serial/test_over_serial.h"
+
+using namespace test_over_serial;
+
+namespace {
+bool g_is_audio_initialized = false;
+// An internal buffer able to fit 16x our sample size
+constexpr int kAudioCaptureBufferSize = DEFAULT_PDM_BUFFER_SIZE * 16;
+int16_t g_audio_capture_buffer[kAudioCaptureBufferSize];
+// A buffer that holds our output
+int16_t g_audio_output_buffer[kMaxAudioSampleSize];
+// Mark as volatile so we can check in a while loop to see if
+// any samples have arrived yet.
+volatile int32_t g_latest_audio_timestamp = 0;
+// error reporter
+tflite::ErrorReporter* g_error_reporter;
+// test_over_serial sample index
+uint32_t g_test_sample_index;
+// test_over_serial silence insertion flag
+bool g_test_insert_silence = true;
+} // namespace
+
+void CaptureSamples() {
+ // This is how many bytes of new data we have each time this is called
+ const int number_of_samples = DEFAULT_PDM_BUFFER_SIZE / 2;
+ // Calculate what timestamp the last audio sample represents
+ const int32_t time_in_ms =
+ g_latest_audio_timestamp +
+ (number_of_samples / (kAudioSampleFrequency / 1000));
+ // Determine the index, in the history of all samples, of the last sample
+ const int32_t start_sample_offset =
+ g_latest_audio_timestamp * (kAudioSampleFrequency / 1000);
+ // Determine the index of this sample in our ring buffer
+ const int capture_index = start_sample_offset % kAudioCaptureBufferSize;
+ // Read the data to the correct place in our buffer
+ int num_read =
+ PDM.read(g_audio_capture_buffer + capture_index, DEFAULT_PDM_BUFFER_SIZE);
+ if (num_read != DEFAULT_PDM_BUFFER_SIZE) {
+ TF_LITE_REPORT_ERROR(g_error_reporter, "### short read (%d/%d) @%dms",
+ num_read, DEFAULT_PDM_BUFFER_SIZE, time_in_ms);
+ while (true) {
+ // NORETURN
+ }
+ }
+ // This is how we let the outside world know that new audio data has arrived.
+ g_latest_audio_timestamp = time_in_ms;
+}
+
+TfLiteStatus InitAudioRecording(tflite::ErrorReporter* error_reporter) {
+ if (!g_is_audio_initialized) {
+ g_error_reporter = error_reporter;
+ // Hook up the callback that will be called with each sample
+ PDM.onReceive(CaptureSamples);
+ // Start listening for audio: MONO @ 16KHz
+ PDM.begin(1, kAudioSampleFrequency);
+ // gain: -20db (min) + 6.5db (13) + 3.2db (builtin) = -10.3db
+ PDM.setGain(13);
+ // Block until we have our first audio sample
+ while (!g_latest_audio_timestamp) {
+ }
+ g_is_audio_initialized = true;
+ }
+
+ return kTfLiteOk;
+}
+
+TfLiteStatus GetAudioSamples(tflite::ErrorReporter* error_reporter,
+ int start_ms, int duration_ms,
+ int* audio_samples_size, int16_t** audio_samples) {
+ // This next part should only be called when the main thread notices that the
+ // latest audio sample data timestamp has changed, so that there's new data
+ // in the capture ring buffer. The ring buffer will eventually wrap around and
+ // overwrite the data, but the assumption is that the main thread is checking
+ // often enough and the buffer is large enough that this call will be made
+ // before that happens.
+
+ // Determine the index, in the history of all samples, of the first
+ // sample we want
+ const int start_offset = start_ms * (kAudioSampleFrequency / 1000);
+ // Determine how many samples we want in total
+ const int duration_sample_count =
+ duration_ms * (kAudioSampleFrequency / 1000);
+ for (int i = 0; i < duration_sample_count; ++i) {
+ // For each sample, transform its index in the history of all samples into
+ // its index in g_audio_capture_buffer
+ const int capture_index = (start_offset + i) % kAudioCaptureBufferSize;
+ // Write the sample to the output buffer
+ g_audio_output_buffer[i] = g_audio_capture_buffer[capture_index];
+ }
+
+ // Set pointers to provide access to the audio
+ *audio_samples_size = duration_sample_count;
+ *audio_samples = g_audio_output_buffer;
+
+ return kTfLiteOk;
+}
+
+namespace {
+
+void InsertSilence(const size_t len, int16_t value) {
+ for (size_t i = 0; i < len; i++) {
+ const size_t index = (g_test_sample_index + i) % kAudioCaptureBufferSize;
+ g_audio_capture_buffer[index] = value;
+ }
+ g_test_sample_index += len;
+}
+
+int32_t ProcessTestInput(TestOverSerial& test) {
+ constexpr size_t samples_16ms = ((kAudioSampleFrequency / 1000) * 16);
+
+ InputHandler handler = [](const InputBuffer* const input) {
+ if (0 == input->offset) {
+ // don't insert silence
+ g_test_insert_silence = false;
+ }
+
+ for (size_t i = 0; i < input->length; i++) {
+ const size_t index = (g_test_sample_index + i) % kAudioCaptureBufferSize;
+ g_audio_capture_buffer[index] = input->data.int16[i];
+ }
+ g_test_sample_index += input->length;
+
+ if (input->total == (input->offset + input->length)) {
+ // allow silence insertion again
+ g_test_insert_silence = true;
+ }
+ return true;
+ };
+
+ test.ProcessInput(&handler);
+
+ if (g_test_insert_silence) {
+ // add 16ms of silence just like the PDM interface
+ InsertSilence(samples_16ms, 0);
+ }
+
+ // Round the timestamp to a multiple of 64ms,
+ // This emulates the PDM interface during inference processing.
+ g_latest_audio_timestamp = (g_test_sample_index / (samples_16ms * 4)) * 64;
+ return g_latest_audio_timestamp;
+}
+
+} // namespace
+
+int32_t LatestAudioTimestamp() {
+ TestOverSerial& test = TestOverSerial::Instance(kAUDIO_PCM_16KHZ_MONO_S16);
+ if (!test.IsTestMode()) {
+ // check serial port for test mode command
+ test.ProcessInput(nullptr);
+ }
+ if (test.IsTestMode()) {
+ if (g_is_audio_initialized) {
+ // stop capture from hardware
+ PDM.end();
+ g_is_audio_initialized = false;
+ g_test_sample_index =
+ g_latest_audio_timestamp * (kAudioSampleFrequency / 1000);
+ }
+ return ProcessTestInput(test);
+ } else {
+ // CaptureSamples() updated the timestamp
+ return g_latest_audio_timestamp;
+ }
+ // NOTREACHED
+}
+
+#endif // ARDUINO_EXCLUDE_CODE
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/arduino_command_responder.cpp b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/arduino_command_responder.cpp
new file mode 100644
index 000000000..7fedc6964
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/arduino_command_responder.cpp
@@ -0,0 +1,89 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+#if defined(ARDUINO) && !defined(ARDUINO_ARDUINO_NANO33BLE)
+#define ARDUINO_EXCLUDE_CODE
+#endif // defined(ARDUINO) && !defined(ARDUINO_ARDUINO_NANO33BLE)
+
+#ifndef ARDUINO_EXCLUDE_CODE
+
+#include "Arduino.h"
+#include "command_responder.h"
+
+// Toggles the built-in LED every inference, and lights a colored LED depending
+// on which word was detected.
+void RespondToCommand(tflite::ErrorReporter* error_reporter,
+ int32_t current_time, const char* found_command,
+ uint8_t score, bool is_new_command) {
+ static bool is_initialized = false;
+ if (!is_initialized) {
+ pinMode(LED_BUILTIN, OUTPUT);
+ // Pins for the built-in RGB LEDs on the Arduino Nano 33 BLE Sense
+ pinMode(LEDR, OUTPUT);
+ pinMode(LEDG, OUTPUT);
+ pinMode(LEDB, OUTPUT);
+ // Ensure the LED is off by default.
+ // Note: The RGB LEDs on the Arduino Nano 33 BLE
+ // Sense are on when the pin is LOW, off when HIGH.
+ digitalWrite(LEDR, HIGH);
+ digitalWrite(LEDG, HIGH);
+ digitalWrite(LEDB, HIGH);
+ is_initialized = true;
+ }
+ static int32_t last_command_time = 0;
+ static int count = 0;
+
+ if (is_new_command) {
+ TF_LITE_REPORT_ERROR(error_reporter, "Heard %s (%d) @%dms", found_command,
+ score, current_time);
+ // If we hear a command, light up the appropriate LED
+ digitalWrite(LEDR, HIGH);
+ digitalWrite(LEDG, HIGH);
+ digitalWrite(LEDB, HIGH);
+
+ if (found_command[0] == 'y') {
+ digitalWrite(LEDG, LOW); // Green for yes
+ } else if (found_command[0] == 'n') {
+ digitalWrite(LEDR, LOW); // Red for no
+ } else if (found_command[0] == 'u') {
+ digitalWrite(LEDB, LOW); // Blue for unknown
+ } else {
+ // silence
+ }
+
+ last_command_time = current_time;
+ }
+
+ // If last_command_time is non-zero but was >3 seconds ago, zero it
+ // and switch off the LED.
+ if (last_command_time != 0) {
+ if (last_command_time < (current_time - 3000)) {
+ last_command_time = 0;
+ digitalWrite(LEDR, HIGH);
+ digitalWrite(LEDG, HIGH);
+ digitalWrite(LEDB, HIGH);
+ }
+ }
+
+ // Otherwise, toggle the LED every time an inference is performed.
+ ++count;
+ if (count & 1) {
+ digitalWrite(LED_BUILTIN, HIGH);
+ } else {
+ digitalWrite(LED_BUILTIN, LOW);
+ }
+}
+
+#endif // ARDUINO_EXCLUDE_CODE
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/arduino_main.cpp b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/arduino_main.cpp
new file mode 100644
index 000000000..c70a2bcea
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/arduino_main.cpp
@@ -0,0 +1,20 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+#include "main_functions.h"
+
+// Arduino automatically calls the setup() and loop() functions in a sketch, so
+// where other systems need their own main routine in this file, it can be left
+// empty.
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/audio_provider.h b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/audio_provider.h
new file mode 100644
index 000000000..88988ba1f
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/audio_provider.h
@@ -0,0 +1,49 @@
+/* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
+
+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 TENSORFLOW_LITE_MICRO_EXAMPLES_MICRO_SPEECH_AUDIO_PROVIDER_H_
+#define TENSORFLOW_LITE_MICRO_EXAMPLES_MICRO_SPEECH_AUDIO_PROVIDER_H_
+
+#include "tensorflow/lite/c/common.h"
+#include "tensorflow/lite/micro/micro_error_reporter.h"
+
+// This is an abstraction around an audio source like a microphone, and is
+// expected to return 16-bit PCM sample data for a given point in time. The
+// sample data itself should be used as quickly as possible by the caller, since
+// to allow memory optimizations there are no guarantees that the samples won't
+// be overwritten by new data in the future. In practice, implementations should
+// ensure that there's a reasonable time allowed for clients to access the data
+// before any reuse.
+// The reference implementation can have no platform-specific dependencies, so
+// it just returns an array filled with zeros. For real applications, you should
+// ensure there's a specialized implementation that accesses hardware APIs.
+TfLiteStatus GetAudioSamples(tflite::ErrorReporter* error_reporter,
+ int start_ms, int duration_ms,
+ int* audio_samples_size, int16_t** audio_samples);
+
+// Returns the time that audio data was last captured in milliseconds. There's
+// no contract about what time zero represents, the accuracy, or the granularity
+// of the result. Subsequent calls will generally not return a lower value, but
+// even that's not guaranteed if there's an overflow wraparound.
+// The reference implementation of this function just returns a constantly
+// incrementing value for each call, since it would need a non-portable platform
+// call to access time information. For real applications, you'll need to write
+// your own platform-specific implementation.
+int32_t LatestAudioTimestamp();
+
+// Starts audio capture
+TfLiteStatus InitAudioRecording(tflite::ErrorReporter* error_reporter);
+
+#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_MICRO_SPEECH_AUDIO_PROVIDER_H_
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/command_responder.h b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/command_responder.h
new file mode 100644
index 000000000..ac3f448ee
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/command_responder.h
@@ -0,0 +1,32 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+// Provides an interface to take an action based on an audio command.
+
+#ifndef TENSORFLOW_LITE_MICRO_EXAMPLES_MICRO_SPEECH_COMMAND_RESPONDER_H_
+#define TENSORFLOW_LITE_MICRO_EXAMPLES_MICRO_SPEECH_COMMAND_RESPONDER_H_
+
+#include "tensorflow/lite/c/common.h"
+#include "tensorflow/lite/micro/micro_error_reporter.h"
+
+// Called every time the results of an audio recognition run are available. The
+// human-readable name of any recognized command is in the `found_command`
+// argument, `score` has the numerical confidence, and `is_new_command` is set
+// if the previous command was different to this one.
+void RespondToCommand(tflite::ErrorReporter* error_reporter,
+ int32_t current_time, const char* found_command,
+ uint8_t score, bool is_new_command);
+
+#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_MICRO_SPEECH_COMMAND_RESPONDER_H_
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/feature_provider.cpp b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/feature_provider.cpp
new file mode 100644
index 000000000..a9142f7d4
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/feature_provider.cpp
@@ -0,0 +1,127 @@
+/* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+#include "feature_provider.h"
+
+#include "audio_provider.h"
+#include "micro_features_micro_features_generator.h"
+#include "micro_features_micro_model_settings.h"
+
+FeatureProvider::FeatureProvider(int feature_size, int8_t* feature_data)
+ : feature_size_(feature_size),
+ feature_data_(feature_data),
+ is_first_run_(true) {
+ // Initialize the feature data to default values.
+ for (int n = 0; n < feature_size_; ++n) {
+ feature_data_[n] = 0;
+ }
+}
+
+FeatureProvider::~FeatureProvider() {}
+
+TfLiteStatus FeatureProvider::PopulateFeatureData(
+ tflite::ErrorReporter* error_reporter, int32_t last_time_in_ms,
+ int32_t time_in_ms, int* how_many_new_slices) {
+ if (feature_size_ != kFeatureElementCount) {
+ TF_LITE_REPORT_ERROR(error_reporter,
+ "Requested feature_data_ size %d doesn't match %d",
+ feature_size_, kFeatureElementCount);
+ return kTfLiteError;
+ }
+
+ // Quantize the time into steps as long as each window stride, so we can
+ // figure out which audio data we need to fetch.
+ const int last_step = (last_time_in_ms / kFeatureSliceStrideMs);
+ // Number of new 20ms slices from which we can take 30ms samples
+ int slices_needed =
+ ((((time_in_ms - last_time_in_ms) - kFeatureSliceDurationMs) *
+ kFeatureSliceStrideMs) /
+ kFeatureSliceStrideMs +
+ kFeatureSliceStrideMs) /
+ kFeatureSliceStrideMs;
+ // If this is the first call, make sure we don't use any cached information.
+ if (is_first_run_) {
+ TfLiteStatus init_status = InitializeMicroFeatures(error_reporter);
+ if (init_status != kTfLiteOk) {
+ return init_status;
+ }
+ is_first_run_ = false;
+ return kTfLiteOk;
+ }
+ if (slices_needed > kFeatureSliceCount) {
+ slices_needed = kFeatureSliceCount;
+ }
+ if (slices_needed == 0) {
+ return kTfLiteOk;
+ }
+ *how_many_new_slices = slices_needed;
+
+ const int slices_to_keep = kFeatureSliceCount - slices_needed;
+ const int slices_to_drop = kFeatureSliceCount - slices_to_keep;
+ // If we can avoid recalculating some slices, just move the existing data
+ // up in the spectrogram, to perform something like this:
+ // last time = 80ms current time = 120ms
+ // +-----------+ +-----------+
+ // | data@20ms | --> | data@60ms |
+ // +-----------+ -- +-----------+
+ // | data@40ms | -- --> | data@80ms |
+ // +-----------+ -- -- +-----------+
+ // | data@60ms | -- -- | |
+ // +-----------+ -- +-----------+
+ // | data@80ms | -- | |
+ // +-----------+ +-----------+
+ if (slices_to_keep > 0) {
+ for (int dest_slice = 0; dest_slice < slices_to_keep; ++dest_slice) {
+ int8_t* dest_slice_data =
+ feature_data_ + (dest_slice * kFeatureSliceSize);
+ const int src_slice = dest_slice + slices_to_drop;
+ const int8_t* src_slice_data =
+ feature_data_ + (src_slice * kFeatureSliceSize);
+ for (int i = 0; i < kFeatureSliceSize; ++i) {
+ dest_slice_data[i] = src_slice_data[i];
+ }
+ }
+ }
+ // Any slices that need to be filled in with feature data have their
+ // appropriate audio data pulled, and features calculated for that slice.
+ if (slices_needed > 0) {
+ for (int new_slice = slices_to_keep; new_slice < kFeatureSliceCount;
+ ++new_slice) {
+ const int new_step = last_step + (new_slice - slices_to_keep);
+ const int32_t slice_start_ms = (new_step * kFeatureSliceStrideMs);
+ int16_t* audio_samples = nullptr;
+ int audio_samples_size = 0;
+ GetAudioSamples(error_reporter, slice_start_ms, kFeatureSliceDurationMs,
+ &audio_samples_size, &audio_samples);
+ constexpr int wanted =
+ kFeatureSliceDurationMs * (kAudioSampleFrequency / 1000);
+ if (audio_samples_size != wanted) {
+ TF_LITE_REPORT_ERROR(error_reporter,
+ "Audio data size %d too small, want %d",
+ audio_samples_size, wanted);
+ return kTfLiteError;
+ }
+ int8_t* new_slice_data = feature_data_ + (new_slice * kFeatureSliceSize);
+ size_t num_samples_read;
+ TfLiteStatus generate_status = GenerateMicroFeatures(
+ error_reporter, audio_samples, audio_samples_size, kFeatureSliceSize,
+ new_slice_data, &num_samples_read);
+ if (generate_status != kTfLiteOk) {
+ return generate_status;
+ }
+ }
+ }
+ return kTfLiteOk;
+}
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/feature_provider.h b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/feature_provider.h
new file mode 100644
index 000000000..d086e013d
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/feature_provider.h
@@ -0,0 +1,52 @@
+/* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
+
+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 TENSORFLOW_LITE_MICRO_EXAMPLES_MICRO_SPEECH_FEATURE_PROVIDER_H_
+#define TENSORFLOW_LITE_MICRO_EXAMPLES_MICRO_SPEECH_FEATURE_PROVIDER_H_
+
+#include "tensorflow/lite/c/common.h"
+#include "tensorflow/lite/micro/micro_error_reporter.h"
+
+// Binds itself to an area of memory intended to hold the input features for an
+// audio-recognition neural network model, and fills that data area with the
+// features representing the current audio input, for example from a microphone.
+// The audio features themselves are a two-dimensional array, made up of
+// horizontal slices representing the frequencies at one point in time, stacked
+// on top of each other to form a spectrogram showing how those frequencies
+// changed over time.
+class FeatureProvider {
+ public:
+ // Create the provider, and bind it to an area of memory. This memory should
+ // remain accessible for the lifetime of the provider object, since subsequent
+ // calls will fill it with feature data. The provider does no memory
+ // management of this data.
+ FeatureProvider(int feature_size, int8_t* feature_data);
+ ~FeatureProvider();
+
+ // Fills the feature data with information from audio inputs, and returns how
+ // many feature slices were updated.
+ TfLiteStatus PopulateFeatureData(tflite::ErrorReporter* error_reporter,
+ int32_t last_time_in_ms, int32_t time_in_ms,
+ int* how_many_new_slices);
+
+ private:
+ int feature_size_;
+ int8_t* feature_data_;
+ // Make sure we don't try to use cached information if this is the first call
+ // into the provider.
+ bool is_first_run_;
+};
+
+#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_MICRO_SPEECH_FEATURE_PROVIDER_H_
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/main_functions.h b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/main_functions.h
new file mode 100644
index 000000000..0ac067710
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/main_functions.h
@@ -0,0 +1,37 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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 TENSORFLOW_LITE_MICRO_EXAMPLES_MICRO_SPEECH_MAIN_FUNCTIONS_H_
+#define TENSORFLOW_LITE_MICRO_EXAMPLES_MICRO_SPEECH_MAIN_FUNCTIONS_H_
+
+// Expose a C friendly interface for main functions.
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Initializes all data needed for the example. The name is important, and needs
+// to be setup() for Arduino compatibility.
+void setup();
+
+// Runs one iteration of data gathering and inference. This should be called
+// repeatedly from the application code. The name needs to be loop() for Arduino
+// compatibility.
+void loop();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_MICRO_SPEECH_MAIN_FUNCTIONS_H_
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/micro_features_micro_features_generator.cpp b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/micro_features_micro_features_generator.cpp
new file mode 100644
index 000000000..2776b2fc8
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/micro_features_micro_features_generator.cpp
@@ -0,0 +1,116 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+#include "micro_features_micro_features_generator.h"
+
+#include
+#include
+
+#include "micro_features_micro_model_settings.h"
+#include "tensorflow/lite/experimental/microfrontend/lib/frontend.h"
+#include "tensorflow/lite/experimental/microfrontend/lib/frontend_util.h"
+
+// Configure FFT to output 16 bit fixed point.
+#define FIXED_POINT 16
+
+namespace {
+
+FrontendState g_micro_features_state;
+bool g_is_first_time = true;
+
+} // namespace
+
+TfLiteStatus InitializeMicroFeatures(tflite::ErrorReporter* error_reporter) {
+ FrontendConfig config;
+ config.window.size_ms = kFeatureSliceDurationMs;
+ config.window.step_size_ms = kFeatureSliceStrideMs;
+ config.noise_reduction.smoothing_bits = 10;
+ config.filterbank.num_channels = kFeatureSliceSize;
+ config.filterbank.lower_band_limit = 125.0;
+ config.filterbank.upper_band_limit = 7500.0;
+ config.noise_reduction.smoothing_bits = 10;
+ config.noise_reduction.even_smoothing = 0.025;
+ config.noise_reduction.odd_smoothing = 0.06;
+ config.noise_reduction.min_signal_remaining = 0.05;
+ config.pcan_gain_control.enable_pcan = 1;
+ config.pcan_gain_control.strength = 0.95;
+ config.pcan_gain_control.offset = 80.0;
+ config.pcan_gain_control.gain_bits = 21;
+ config.log_scale.enable_log = 1;
+ config.log_scale.scale_shift = 6;
+ if (!FrontendPopulateState(&config, &g_micro_features_state,
+ kAudioSampleFrequency)) {
+ TF_LITE_REPORT_ERROR(error_reporter, "FrontendPopulateState() failed");
+ return kTfLiteError;
+ }
+ g_is_first_time = true;
+ return kTfLiteOk;
+}
+
+// This is not exposed in any header, and is only used for testing, to ensure
+// that the state is correctly set up before generating results.
+void SetMicroFeaturesNoiseEstimates(const uint32_t* estimate_presets) {
+ for (int i = 0; i < g_micro_features_state.filterbank.num_channels; ++i) {
+ g_micro_features_state.noise_reduction.estimate[i] = estimate_presets[i];
+ }
+}
+
+TfLiteStatus GenerateMicroFeatures(tflite::ErrorReporter* error_reporter,
+ const int16_t* input, int input_size,
+ int output_size, int8_t* output,
+ size_t* num_samples_read) {
+ const int16_t* frontend_input;
+ if (g_is_first_time) {
+ frontend_input = input;
+ g_is_first_time = false;
+ } else {
+ frontend_input = input;
+ }
+ FrontendOutput frontend_output = FrontendProcessSamples(
+ &g_micro_features_state, frontend_input, input_size, num_samples_read);
+
+ for (size_t i = 0; i < frontend_output.size; ++i) {
+ // These scaling values are derived from those used in input_data.py in the
+ // training pipeline.
+ // The feature pipeline outputs 16-bit signed integers in roughly a 0 to 670
+ // range. In training, these are then arbitrarily divided by 25.6 to get
+ // float values in the rough range of 0.0 to 26.0. This scaling is performed
+ // for historical reasons, to match up with the output of other feature
+ // generators.
+ // The process is then further complicated when we quantize the model. This
+ // means we have to scale the 0.0 to 26.0 real values to the -128 to 127
+ // signed integer numbers.
+ // All this means that to get matching values from our integer feature
+ // output into the tensor input, we have to perform:
+ // input = (((feature / 25.6) / 26.0) * 256) - 128
+ // To simplify this and perform it in 32-bit integer math, we rearrange to:
+ // input = (feature * 256) / (25.6 * 26.0) - 128
+ constexpr int32_t value_scale = 256;
+ constexpr int32_t value_div = static_cast((25.6f * 26.0f) + 0.5f);
+ int32_t value =
+ ((frontend_output.values[i] * value_scale) + (value_div / 2)) /
+ value_div;
+ value -= 128;
+ if (value < -128) {
+ value = -128;
+ }
+ if (value > 127) {
+ value = 127;
+ }
+ output[i] = value;
+ }
+
+ return kTfLiteOk;
+}
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/micro_features_micro_features_generator.h b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/micro_features_micro_features_generator.h
new file mode 100644
index 000000000..293042393
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/micro_features_micro_features_generator.h
@@ -0,0 +1,32 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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 TENSORFLOW_LITE_MICRO_EXAMPLES_MICRO_SPEECH_MICRO_FEATURES_MICRO_FEATURES_GENERATOR_H_
+#define TENSORFLOW_LITE_MICRO_EXAMPLES_MICRO_SPEECH_MICRO_FEATURES_MICRO_FEATURES_GENERATOR_H_
+
+#include "tensorflow/lite/c/common.h"
+#include "tensorflow/lite/micro/micro_error_reporter.h"
+
+// Sets up any resources needed for the feature generation pipeline.
+TfLiteStatus InitializeMicroFeatures(tflite::ErrorReporter* error_reporter);
+
+// Converts audio sample data into a more compact form that's appropriate for
+// feeding into a neural network.
+TfLiteStatus GenerateMicroFeatures(tflite::ErrorReporter* error_reporter,
+ const int16_t* input, int input_size,
+ int output_size, int8_t* output,
+ size_t* num_samples_read);
+
+#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_MICRO_SPEECH_MICRO_FEATURES_MICRO_FEATURES_GENERATOR_H_
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/micro_features_micro_model_settings.cpp b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/micro_features_micro_model_settings.cpp
new file mode 100644
index 000000000..f772cef9b
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/micro_features_micro_model_settings.cpp
@@ -0,0 +1,23 @@
+/* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+#include "micro_features_micro_model_settings.h"
+
+const char* kCategoryLabels[kCategoryCount] = {
+ "silence",
+ "unknown",
+ "yes",
+ "no",
+};
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/micro_features_micro_model_settings.h b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/micro_features_micro_model_settings.h
new file mode 100644
index 000000000..e542213e8
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/micro_features_micro_model_settings.h
@@ -0,0 +1,43 @@
+/* Copyright 2020 The TensorFlow Authors. All Rights Reserved.
+
+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 TENSORFLOW_LITE_MICRO_EXAMPLES_MICRO_SPEECH_MICRO_FEATURES_MICRO_MODEL_SETTINGS_H_
+#define TENSORFLOW_LITE_MICRO_EXAMPLES_MICRO_SPEECH_MICRO_FEATURES_MICRO_MODEL_SETTINGS_H_
+
+// Keeping these as constant expressions allow us to allocate fixed-sized arrays
+// on the stack for our working memory.
+
+// The size of the input time series data we pass to the FFT to produce the
+// frequency information. This has to be a power of two, and since we're dealing
+// with 30ms of 16KHz inputs, which means 480 samples, this is the next value.
+constexpr int kMaxAudioSampleSize = 512;
+constexpr int kAudioSampleFrequency = 16000;
+
+// The following values are derived from values used during model training.
+// If you change the way you preprocess the input, update all these constants.
+constexpr int kFeatureSliceSize = 40;
+constexpr int kFeatureSliceCount = 49;
+constexpr int kFeatureElementCount = (kFeatureSliceSize * kFeatureSliceCount);
+constexpr int kFeatureSliceStrideMs = 20;
+constexpr int kFeatureSliceDurationMs = 30;
+
+// Variables for the model's output categories.
+constexpr int kSilenceIndex = 0;
+constexpr int kUnknownIndex = 1;
+// If you modify the output categories, you need to update the following values.
+constexpr int kCategoryCount = 4;
+extern const char* kCategoryLabels[kCategoryCount];
+
+#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_MICRO_SPEECH_MICRO_FEATURES_MICRO_MODEL_SETTINGS_H_
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/micro_features_model.cpp b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/micro_features_model.cpp
new file mode 100644
index 000000000..428616ec5
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/micro_features_model.cpp
@@ -0,0 +1,1596 @@
+/* Copyright 2020 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+// This is a standard TensorFlow Lite FlatBuffer model file that has been
+// converted into a C data array, so it can be easily compiled into a binary
+// for devices that don't have a file system. It was created using the command:
+// xxd -i model.tflite > model.cc
+
+#include "micro_features_model.h"
+
+// We need to keep the data array aligned on some architectures.
+#ifdef __has_attribute
+#define HAVE_ATTRIBUTE(x) __has_attribute(x)
+#else
+#define HAVE_ATTRIBUTE(x) 0
+#endif
+#if HAVE_ATTRIBUTE(aligned) || (defined(__GNUC__) && !defined(__clang__))
+#define DATA_ALIGN_ATTRIBUTE __attribute__((aligned(4)))
+#else
+#define DATA_ALIGN_ATTRIBUTE
+#endif
+
+const unsigned char g_model[] DATA_ALIGN_ATTRIBUTE = {
+ 0x20, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0c, 0x00,
+ 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x18, 0x00, 0x12, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x94, 0x48, 0x00, 0x00, 0x34, 0x42, 0x00, 0x00,
+ 0x1c, 0x42, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0c, 0x00,
+ 0x04, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+ 0x0b, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x6d, 0x69, 0x6e, 0x5f,
+ 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73,
+ 0x69, 0x6f, 0x6e, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xd4, 0x41, 0x00, 0x00,
+ 0xb4, 0x41, 0x00, 0x00, 0x24, 0x03, 0x00, 0x00, 0xf4, 0x02, 0x00, 0x00,
+ 0xec, 0x02, 0x00, 0x00, 0xe4, 0x02, 0x00, 0x00, 0xc4, 0x02, 0x00, 0x00,
+ 0xbc, 0x02, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
+ 0x1c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x16, 0xbd, 0xff, 0xff,
+ 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x31, 0x2e, 0x35, 0x2e,
+ 0x30, 0x00, 0x00, 0x00, 0x94, 0xba, 0xff, 0xff, 0x98, 0xba, 0xff, 0xff,
+ 0x32, 0xbd, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00,
+ 0xfa, 0xee, 0x28, 0xc4, 0xee, 0xfe, 0xcf, 0x0f, 0x1e, 0xf7, 0x1f, 0x06,
+ 0x0d, 0xed, 0xe9, 0x83, 0x5c, 0xc9, 0x18, 0xe3, 0xf9, 0x14, 0x28, 0x2a,
+ 0x09, 0xf2, 0x18, 0x34, 0x62, 0xea, 0xef, 0xd6, 0x36, 0xb7, 0x1e, 0xf7,
+ 0x3b, 0x22, 0x28, 0x39, 0xc2, 0x9d, 0xf1, 0x07, 0x5e, 0x0b, 0x1e, 0x2c,
+ 0x07, 0xdd, 0xfd, 0xc3, 0xd8, 0x4a, 0xf3, 0x28, 0xa7, 0x16, 0xd5, 0xf1,
+ 0xc3, 0x05, 0xfd, 0x27, 0xcc, 0xba, 0x1e, 0xcb, 0xd7, 0x3d, 0xd4, 0x29,
+ 0x00, 0xfd, 0x28, 0x44, 0xfb, 0xf2, 0xf3, 0xb6, 0x4f, 0xcf, 0x09, 0xf0,
+ 0xfa, 0x45, 0x41, 0x49, 0x05, 0xc5, 0x17, 0x5d, 0x64, 0x00, 0xf8, 0xee,
+ 0x48, 0x17, 0xf4, 0xe9, 0x2e, 0x4b, 0x2e, 0x3f, 0xdf, 0xee, 0xe4, 0x08,
+ 0x38, 0xf1, 0x16, 0x13, 0x2f, 0x2a, 0xed, 0xc2, 0xbf, 0x36, 0xf4, 0x02,
+ 0xcf, 0xaa, 0xd2, 0xfa, 0xac, 0x13, 0xf6, 0xe8, 0xb5, 0x68, 0x12, 0xb6,
+ 0xce, 0x0e, 0xdf, 0x58, 0xe4, 0x49, 0x14, 0x15, 0x03, 0xed, 0xfa, 0xd4,
+ 0x40, 0xa7, 0xf6, 0xca, 0xfb, 0x00, 0x4d, 0x5e, 0xe4, 0x55, 0x1d, 0x30,
+ 0x45, 0xe2, 0xfc, 0x01, 0x48, 0x81, 0xe9, 0xf1, 0x1e, 0xfc, 0x21, 0x32,
+ 0xed, 0x4b, 0xed, 0xfa, 0x2f, 0xd2, 0xfa, 0xfb, 0x4d, 0xa7, 0xed, 0xc7,
+ 0x92, 0xdf, 0xe6, 0xdb, 0xf8, 0x1f, 0xd9, 0xfa, 0x91, 0xf5, 0xe5, 0xc5,
+ 0x8c, 0x17, 0x0f, 0xb9, 0xd2, 0xc7, 0xfe, 0x68, 0xd3, 0x51, 0x2e, 0x49,
+ 0x1f, 0xbd, 0x01, 0xeb, 0x31, 0x17, 0xf0, 0xef, 0xff, 0xb8, 0x5d, 0x62,
+ 0x02, 0x0f, 0x1f, 0x78, 0x6a, 0xb0, 0xf9, 0xfe, 0x4f, 0xcc, 0xd3, 0xff,
+ 0x0a, 0x96, 0x1e, 0x2c, 0xed, 0xbc, 0xf4, 0x0b, 0x42, 0xc8, 0xf1, 0xea,
+ 0x6e, 0x58, 0xec, 0xc4, 0x99, 0xae, 0xdc, 0xd7, 0x12, 0x87, 0xd8, 0x06,
+ 0xa2, 0xc2, 0xe6, 0xa2, 0x81, 0x24, 0xe9, 0xac, 0xce, 0xb6, 0x15, 0x6b,
+ 0xba, 0x00, 0x19, 0x58, 0x29, 0xb6, 0xfe, 0x01, 0x25, 0x96, 0xd2, 0xec,
+ 0x0e, 0x9c, 0x60, 0x5f, 0xe9, 0xf4, 0xf5, 0x69, 0x6b, 0xb5, 0xe1, 0xf6,
+ 0x5e, 0xb7, 0xb1, 0xe5, 0x11, 0x9b, 0x18, 0x10, 0xe3, 0xe1, 0xe0, 0x0d,
+ 0x4f, 0xa5, 0xde, 0xe5, 0x6f, 0xe2, 0xfb, 0x99, 0x82, 0xa5, 0xc9, 0xb6,
+ 0x1f, 0x46, 0xf3, 0x04, 0xc6, 0xca, 0xd6, 0x97, 0x90, 0x1d, 0xc0, 0x95,
+ 0xf0, 0x19, 0x30, 0x77, 0xc2, 0x3c, 0xfa, 0x24, 0x02, 0x4d, 0x06, 0x07,
+ 0x15, 0x02, 0xb0, 0xe7, 0x27, 0x22, 0x67, 0x4d, 0xf1, 0xc2, 0xf4, 0x64,
+ 0x38, 0x40, 0xdf, 0xf6, 0x3a, 0x43, 0xb8, 0xe1, 0x0d, 0x15, 0x11, 0xfe,
+ 0xf5, 0xec, 0xf9, 0xe5, 0x22, 0x36, 0xe4, 0xfd, 0x6d, 0xbf, 0x0d, 0x8e,
+ 0xb7, 0x15, 0xbf, 0x9f, 0x16, 0xad, 0x0a, 0x02, 0x8e, 0x14, 0xda, 0x9b,
+ 0x8e, 0xc3, 0xa6, 0xca, 0xf5, 0x7f, 0x51, 0x56, 0xc1, 0xb3, 0xd9, 0x35,
+ 0xf8, 0x7f, 0x04, 0x0a, 0x03, 0x3f, 0xbe, 0xee, 0x19, 0x68, 0x78, 0x50,
+ 0xf9, 0xa7, 0xf7, 0x7f, 0x1d, 0x76, 0xdb, 0xe8, 0x33, 0xb9, 0xd7, 0xe7,
+ 0xe8, 0x69, 0x15, 0xf7, 0xf5, 0xb2, 0xfe, 0xe8, 0xf3, 0x5b, 0xe2, 0x06,
+ 0x6e, 0x09, 0x36, 0xb7, 0xcc, 0x38, 0xbf, 0x8a, 0x28, 0x14, 0x2e, 0x18,
+ 0xa7, 0x26, 0xcb, 0xb2, 0x95, 0x37, 0xac, 0xcd, 0xd7, 0x51, 0x67, 0x44,
+ 0xcd, 0x31, 0xde, 0x04, 0xe9, 0x6a, 0x00, 0x13, 0x0a, 0x0c, 0xdd, 0x16,
+ 0xe0, 0x24, 0x7e, 0x49, 0xf1, 0xb5, 0x04, 0x52, 0x01, 0x50, 0xdd, 0xf5,
+ 0x26, 0xc9, 0xf4, 0xf8, 0xd6, 0x31, 0x1b, 0xd0, 0xef, 0x03, 0x0a, 0xc0,
+ 0xd4, 0x4f, 0xe2, 0xfd, 0x72, 0xf4, 0x5a, 0xc9, 0xd7, 0x31, 0xc0, 0x8e,
+ 0x17, 0x5e, 0x57, 0x00, 0xb4, 0x3a, 0xc8, 0xd2, 0x92, 0x32, 0xcb, 0xd8,
+ 0xc3, 0xa6, 0x63, 0x26, 0xcf, 0xbc, 0xe8, 0x57, 0x9b, 0xe9, 0xf7, 0x1c,
+ 0xea, 0x12, 0xf1, 0xf7, 0xdb, 0xb9, 0x7f, 0x16, 0xf6, 0xe0, 0x08, 0x70,
+ 0xa2, 0xed, 0xcc, 0xf1, 0x1e, 0x10, 0x04, 0xf7, 0xa9, 0xb7, 0x34, 0xaa,
+ 0x0a, 0xdb, 0x2a, 0xa6, 0xb6, 0x10, 0xea, 0xf8, 0x5e, 0x06, 0x72, 0xdd,
+ 0xd0, 0xb9, 0xd6, 0xa0, 0x10, 0x9f, 0x5a, 0x17, 0xb1, 0xe7, 0xc0, 0x01,
+ 0x9d, 0x01, 0xe0, 0xe0, 0xaf, 0x9c, 0x46, 0xd8, 0xaf, 0xe8, 0xce, 0x02,
+ 0x8a, 0xbb, 0xe4, 0xf6, 0xf3, 0x36, 0x07, 0xca, 0xcb, 0x87, 0x6e, 0xcc,
+ 0xd6, 0x9e, 0x0a, 0x2a, 0x81, 0xd7, 0xcf, 0xc0, 0x04, 0xeb, 0x24, 0xcc,
+ 0xc9, 0x95, 0x33, 0x81, 0xf7, 0xad, 0x1c, 0x9c, 0xa4, 0xd6, 0xf9, 0xe6,
+ 0x3d, 0x84, 0x7f, 0xcc, 0xd4, 0xb0, 0xf4, 0xa2, 0xe9, 0x3c, 0x36, 0xee,
+ 0xd5, 0xcf, 0xcd, 0x2d, 0x28, 0xbd, 0xff, 0xff, 0xc2, 0xbf, 0xff, 0xff,
+ 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0x31, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x48, 0xbd, 0xff, 0xff, 0x4c, 0xbd, 0xff, 0xff, 0xe6, 0xbf, 0xff, 0xff,
+ 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x8a, 0xfe, 0xff, 0xff,
+ 0xa9, 0x00, 0x00, 0x00, 0xd0, 0xff, 0xff, 0xff, 0xd0, 0x00, 0x00, 0x00,
+ 0x52, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x4f, 0xfb, 0xff, 0xff,
+ 0x4a, 0xfd, 0xff, 0xff, 0x12, 0xc0, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00,
+ 0x80, 0x3e, 0x00, 0x00, 0xff, 0xf9, 0xfd, 0x0a, 0x07, 0x08, 0x07, 0x03,
+ 0x07, 0xf2, 0xd1, 0x09, 0xf0, 0xe9, 0x28, 0x09, 0xdf, 0x05, 0xfa, 0xf0,
+ 0xe8, 0xe3, 0x13, 0x0e, 0x08, 0xef, 0xd3, 0xee, 0x0f, 0xe8, 0xeb, 0x14,
+ 0xf7, 0xed, 0xfd, 0x1f, 0xe8, 0xd5, 0xeb, 0xfc, 0x0e, 0xf4, 0xf7, 0x07,
+ 0x05, 0xea, 0xf6, 0x1f, 0xf8, 0xdb, 0xdc, 0x0b, 0x03, 0xdd, 0xd8, 0xf3,
+ 0x0f, 0x19, 0xe1, 0x09, 0xfc, 0xe4, 0x02, 0x04, 0xf1, 0x04, 0xeb, 0xf3,
+ 0x1e, 0x06, 0xfd, 0x11, 0xfc, 0xfa, 0xf6, 0x1f, 0x0f, 0x02, 0xf5, 0xf7,
+ 0xff, 0x24, 0xdf, 0xf7, 0xf8, 0xf3, 0xf6, 0xe9, 0xef, 0x03, 0xdd, 0xf2,
+ 0x28, 0xe1, 0xf2, 0x22, 0xf4, 0x09, 0xf7, 0xf9, 0xf0, 0xd4, 0xf9, 0xee,
+ 0xff, 0x14, 0xda, 0xf3, 0x11, 0xe2, 0xf6, 0x0c, 0xf2, 0xeb, 0xf8, 0xe8,
+ 0xe3, 0x08, 0x02, 0x17, 0xf4, 0x0b, 0x0c, 0x27, 0xe6, 0x02, 0x03, 0xf9,
+ 0x14, 0x18, 0xf6, 0xeb, 0x1f, 0x0c, 0xf1, 0xee, 0xfc, 0x08, 0xf0, 0xfe,
+ 0xfd, 0xee, 0x17, 0xfd, 0x1c, 0xef, 0xfd, 0xde, 0x04, 0x05, 0xf0, 0x31,
+ 0xfa, 0x0b, 0xdc, 0x0d, 0xed, 0xf5, 0xfa, 0xf4, 0x08, 0x0c, 0xd7, 0x1e,
+ 0x15, 0x03, 0xf5, 0x02, 0xf4, 0xfb, 0xed, 0x01, 0xfe, 0xd6, 0x1f, 0xfd,
+ 0xfd, 0x0e, 0xfa, 0x06, 0xf1, 0xf9, 0xe2, 0x16, 0xe9, 0xf1, 0x03, 0x0d,
+ 0x0d, 0xdf, 0xf9, 0x1a, 0x0e, 0xf6, 0xfc, 0x0a, 0x19, 0xe2, 0xe0, 0x09,
+ 0x15, 0xf0, 0xf1, 0x06, 0xf1, 0xe1, 0xef, 0x1a, 0x08, 0xe8, 0xfd, 0x12,
+ 0x14, 0x06, 0xf1, 0xfc, 0xea, 0xfb, 0xf7, 0xea, 0x1d, 0x09, 0xfa, 0xf6,
+ 0x08, 0xf2, 0xe7, 0xf8, 0xfc, 0x16, 0xf5, 0x0e, 0x08, 0xf9, 0x0a, 0x03,
+ 0x26, 0xd8, 0x02, 0xf5, 0xf6, 0xf6, 0xef, 0x1f, 0xe4, 0xe2, 0xfb, 0x02,
+ 0x1b, 0xe6, 0xde, 0x00, 0xf2, 0xed, 0xfb, 0x18, 0xe4, 0x16, 0x1a, 0x1d,
+ 0xf1, 0xf6, 0xea, 0x16, 0x05, 0xde, 0xfb, 0x18, 0xf5, 0xe4, 0xfe, 0xe2,
+ 0x1b, 0x1c, 0x0c, 0xe8, 0x02, 0xee, 0xfb, 0x07, 0x24, 0xf2, 0xe9, 0xfa,
+ 0x0d, 0x05, 0xf1, 0x03, 0xfe, 0xf6, 0x19, 0x06, 0xff, 0xf9, 0x04, 0xfb,
+ 0x15, 0xef, 0xf1, 0xf8, 0xe9, 0xe1, 0x10, 0x04, 0xfc, 0xe6, 0x1f, 0xed,
+ 0x0b, 0xef, 0x00, 0x1e, 0xe6, 0x16, 0xf3, 0x09, 0xfd, 0x08, 0x08, 0x06,
+ 0x06, 0x23, 0xdf, 0xfc, 0x08, 0xf4, 0xea, 0x0c, 0xf2, 0xe6, 0x18, 0xf5,
+ 0x02, 0xf9, 0x50, 0x09, 0x01, 0xda, 0x0b, 0x05, 0x12, 0x18, 0xef, 0x04,
+ 0x0e, 0xd9, 0xff, 0xdc, 0xf6, 0x16, 0xf9, 0xf4, 0xec, 0xff, 0xea, 0xe6,
+ 0xfa, 0x0a, 0xed, 0xef, 0x02, 0xf0, 0x25, 0x21, 0xf1, 0x26, 0xf5, 0xed,
+ 0x09, 0xea, 0xea, 0x24, 0xfa, 0x11, 0xfc, 0xdf, 0xf3, 0x0a, 0x28, 0x0c,
+ 0x19, 0xff, 0xf5, 0xd6, 0x0e, 0xe2, 0x2a, 0x06, 0xfa, 0x03, 0xf9, 0xe6,
+ 0xef, 0x23, 0xf9, 0xfa, 0xe6, 0xfe, 0xfc, 0x03, 0x06, 0x1a, 0xf9, 0x08,
+ 0xe0, 0xe5, 0xff, 0x05, 0x01, 0xe7, 0x12, 0x02, 0x1d, 0x05, 0x03, 0x05,
+ 0x0b, 0xee, 0xed, 0xfc, 0x0f, 0xf3, 0x02, 0xe0, 0x15, 0xdf, 0x02, 0xed,
+ 0x10, 0x26, 0xef, 0x0d, 0x06, 0xee, 0xef, 0xf6, 0xeb, 0x11, 0x09, 0xf4,
+ 0xf7, 0x06, 0x0f, 0x01, 0x2a, 0x0b, 0x01, 0xdd, 0xfc, 0xf4, 0xf1, 0x17,
+ 0x03, 0x04, 0x07, 0xfc, 0x22, 0xfc, 0xde, 0xfe, 0x0b, 0x03, 0xf3, 0xfb,
+ 0x0c, 0x25, 0x04, 0x19, 0x04, 0x03, 0x01, 0xfa, 0xfb, 0xf7, 0xf6, 0x0e,
+ 0x15, 0x0e, 0x09, 0xff, 0x06, 0xfa, 0xfb, 0x1e, 0xfb, 0x05, 0x22, 0xf9,
+ 0xfe, 0xf7, 0x1d, 0xed, 0xdf, 0x18, 0x09, 0xeb, 0xef, 0x04, 0x12, 0xea,
+ 0xdf, 0xfb, 0xda, 0xf6, 0xdf, 0x17, 0xef, 0xef, 0xe1, 0x1a, 0xd9, 0xe2,
+ 0xe2, 0xfc, 0x05, 0x11, 0xf6, 0xee, 0xe8, 0xf2, 0xe1, 0x08, 0x26, 0x04,
+ 0xed, 0x03, 0xe0, 0xfb, 0xee, 0x0c, 0xee, 0xf6, 0x04, 0x2d, 0xf2, 0xd3,
+ 0xf4, 0xe0, 0xf8, 0x0c, 0xfe, 0x11, 0x0b, 0xd7, 0xfd, 0x18, 0x07, 0x0d,
+ 0x07, 0x08, 0xf4, 0xc6, 0x0a, 0x0a, 0x1f, 0x0c, 0xf4, 0x1d, 0x02, 0x0b,
+ 0x09, 0x0e, 0x21, 0xff, 0x17, 0x0b, 0x0d, 0xf2, 0xed, 0xd7, 0x0a, 0xf8,
+ 0x03, 0x06, 0xfa, 0xe5, 0xfd, 0x03, 0x14, 0x0f, 0xe9, 0x1a, 0xf4, 0xda,
+ 0x01, 0xe6, 0x09, 0x06, 0x11, 0x0d, 0xfd, 0xeb, 0x16, 0x23, 0xfa, 0x00,
+ 0x0b, 0x17, 0xf7, 0xda, 0xd7, 0x1b, 0xfa, 0x01, 0x03, 0x05, 0xfe, 0xd6,
+ 0x02, 0xee, 0xee, 0x02, 0xf3, 0x06, 0xed, 0x03, 0xec, 0x01, 0xf2, 0x0f,
+ 0x05, 0x17, 0x0b, 0xfb, 0x0f, 0x05, 0x03, 0x13, 0xff, 0x06, 0x02, 0xf5,
+ 0xf4, 0x18, 0x2b, 0xf0, 0x00, 0x17, 0xfc, 0xfd, 0x05, 0x0b, 0x0e, 0x14,
+ 0xe1, 0x24, 0x08, 0x24, 0xe6, 0xeb, 0x21, 0x12, 0xfb, 0x12, 0xe7, 0xf4,
+ 0xe8, 0x0e, 0x18, 0xee, 0xf5, 0xf3, 0xd9, 0xf3, 0xdb, 0xec, 0x0c, 0x1e,
+ 0xcf, 0x14, 0xdb, 0xe3, 0xdc, 0x02, 0x0c, 0xfb, 0xdb, 0x1b, 0xd0, 0xfe,
+ 0xf9, 0xfe, 0x2a, 0xf5, 0x00, 0x0b, 0xcd, 0xe0, 0xe2, 0x0e, 0x04, 0xf8,
+ 0xda, 0x1c, 0xe5, 0x0f, 0xe8, 0xf4, 0xf7, 0x15, 0x06, 0xf8, 0x02, 0xf7,
+ 0x0f, 0xfb, 0x17, 0xf9, 0xda, 0x01, 0xda, 0xd1, 0xf6, 0x02, 0xfd, 0x16,
+ 0xf1, 0xe4, 0xfa, 0x07, 0xee, 0x0a, 0xf3, 0xfd, 0xf2, 0x23, 0xf0, 0xe1,
+ 0x0a, 0x1a, 0x12, 0x1f, 0xef, 0x27, 0x09, 0xf1, 0x0c, 0x13, 0x23, 0xfd,
+ 0xf5, 0x03, 0xfe, 0x09, 0xfd, 0x16, 0xf8, 0x07, 0x08, 0x25, 0x08, 0xf8,
+ 0xf6, 0x0a, 0xf1, 0xf5, 0x07, 0x09, 0x05, 0xcc, 0xf8, 0x08, 0x13, 0xf9,
+ 0x1d, 0x11, 0x0f, 0xdc, 0xee, 0xf3, 0x27, 0xf9, 0xf9, 0x22, 0xfa, 0x0d,
+ 0xe2, 0x13, 0xfb, 0x11, 0x03, 0x1e, 0xff, 0xfb, 0xed, 0xf1, 0x0e, 0x0b,
+ 0x0f, 0x00, 0x06, 0xe0, 0x15, 0xf3, 0x13, 0xfc, 0x18, 0xf9, 0xff, 0x09,
+ 0xfa, 0x1f, 0x12, 0xe5, 0xe2, 0x06, 0xf9, 0xf4, 0x07, 0x15, 0x0b, 0x04,
+ 0xdb, 0x0d, 0xeb, 0xf3, 0xe6, 0x06, 0xe5, 0xee, 0xd8, 0x22, 0xd8, 0x10,
+ 0xea, 0xf9, 0x1c, 0xf7, 0xd3, 0x11, 0xc3, 0xf8, 0xde, 0x05, 0x00, 0xe6,
+ 0x07, 0xfd, 0xd3, 0x03, 0xea, 0xe0, 0x13, 0x14, 0xcf, 0xeb, 0xcd, 0xd3,
+ 0xde, 0xf5, 0xf0, 0x0c, 0x0c, 0xfa, 0xeb, 0xd3, 0xfb, 0xfd, 0x08, 0xf9,
+ 0xf4, 0x10, 0xfa, 0xd3, 0xf4, 0x11, 0x11, 0xf8, 0xef, 0xf8, 0xf8, 0xf1,
+ 0xfc, 0xe1, 0xf7, 0x12, 0x04, 0xf4, 0xfb, 0xed, 0xef, 0x0c, 0xfd, 0x1c,
+ 0xfe, 0x0e, 0xfd, 0xe2, 0xfe, 0x0a, 0x02, 0xfe, 0xe6, 0x1f, 0xef, 0xe5,
+ 0xe6, 0xf8, 0x16, 0x27, 0xe8, 0x20, 0x05, 0xe3, 0xf1, 0xef, 0xee, 0xed,
+ 0x0d, 0x11, 0x16, 0xfb, 0xf3, 0xff, 0x14, 0x01, 0xff, 0x15, 0x10, 0x02,
+ 0xe5, 0x28, 0x29, 0x13, 0x13, 0x16, 0xe6, 0x00, 0xd2, 0x26, 0xfd, 0x03,
+ 0x04, 0x05, 0x07, 0x06, 0xf1, 0x0e, 0x05, 0x0d, 0xe2, 0x0f, 0x02, 0xe1,
+ 0x07, 0xf7, 0x1c, 0xfa, 0x14, 0x30, 0xf7, 0xee, 0x00, 0xfa, 0x3d, 0x06,
+ 0x1c, 0x04, 0x06, 0x07, 0x05, 0x1a, 0x10, 0xf6, 0xee, 0x0a, 0xeb, 0x04,
+ 0xeb, 0xdf, 0x1d, 0x09, 0xd5, 0xe8, 0xd6, 0xf4, 0xf0, 0x0f, 0x1d, 0xea,
+ 0xf2, 0xf8, 0xa6, 0x0b, 0xdc, 0x09, 0x08, 0x24, 0xee, 0x24, 0xaa, 0xe4,
+ 0xcb, 0x15, 0xef, 0xe7, 0xe9, 0x0c, 0xcf, 0x06, 0xe3, 0x12, 0x11, 0x00,
+ 0x07, 0x14, 0xd7, 0xde, 0xf6, 0x0f, 0x0b, 0x04, 0xfb, 0x0d, 0xf8, 0x0d,
+ 0xf6, 0x1b, 0xf1, 0x21, 0xdd, 0xfc, 0xf4, 0xe9, 0xf8, 0xe8, 0xf7, 0x06,
+ 0x03, 0x1e, 0xce, 0xe1, 0xea, 0xf6, 0x05, 0xf9, 0x16, 0x15, 0x04, 0xe0,
+ 0x14, 0xf7, 0x1e, 0x1c, 0x0a, 0x27, 0xef, 0xf3, 0x0f, 0xf3, 0xee, 0x04,
+ 0xf8, 0xf1, 0x07, 0xe3, 0x05, 0x0b, 0x00, 0x1c, 0x15, 0x27, 0x07, 0xf7,
+ 0xfa, 0x0b, 0xfa, 0xfa, 0x17, 0x13, 0xe1, 0xf5, 0xfb, 0x0c, 0x21, 0x2f,
+ 0xd7, 0xfb, 0xf5, 0xfd, 0xd3, 0xf4, 0x07, 0x0e, 0xfd, 0x0b, 0xfc, 0xfa,
+ 0xf5, 0x0e, 0x02, 0xfa, 0xfa, 0x19, 0xfd, 0xfa, 0xfc, 0x13, 0x24, 0x0c,
+ 0xe4, 0x31, 0xf8, 0x12, 0xf4, 0x04, 0x18, 0x29, 0x27, 0x19, 0xfc, 0x08,
+ 0x11, 0xe3, 0x07, 0xfe, 0x26, 0x40, 0x05, 0x02, 0x04, 0x02, 0x0f, 0xee,
+ 0xf4, 0x27, 0xea, 0xf4, 0xf5, 0x11, 0x26, 0x0b, 0xe7, 0x05, 0xd2, 0xf6,
+ 0xea, 0xfa, 0x0b, 0xf9, 0xfa, 0x16, 0xba, 0x00, 0xfb, 0x0d, 0x0b, 0xf9,
+ 0xe6, 0xf6, 0xc5, 0xf8, 0xf6, 0x01, 0x0f, 0xed, 0xed, 0x13, 0xcd, 0x0d,
+ 0xda, 0x06, 0x17, 0xee, 0x07, 0x1d, 0xb8, 0xfa, 0xe2, 0xea, 0xf2, 0xee,
+ 0x04, 0x00, 0xdc, 0xd0, 0xfb, 0xf5, 0xec, 0xfe, 0xf1, 0x0d, 0xf0, 0xdb,
+ 0xf9, 0x0d, 0x03, 0x03, 0x0e, 0x0a, 0xda, 0xd6, 0x01, 0xf2, 0x06, 0x14,
+ 0x1c, 0x1f, 0xe8, 0xe8, 0x0e, 0xfd, 0x0c, 0xf5, 0xf3, 0x3d, 0xf3, 0x05,
+ 0x10, 0xfa, 0x1b, 0x18, 0x08, 0x36, 0x09, 0xf1, 0xeb, 0xf9, 0x22, 0x01,
+ 0xf3, 0xf7, 0xff, 0xf0, 0x0c, 0xe9, 0x01, 0x29, 0x21, 0x15, 0x03, 0xee,
+ 0xe9, 0x1a, 0xf7, 0x15, 0x06, 0x25, 0xfa, 0xf0, 0xe4, 0xf1, 0x1f, 0x01,
+ 0xdc, 0x2d, 0xce, 0xe9, 0xea, 0x0b, 0x06, 0x2c, 0x0a, 0x30, 0xe7, 0x09,
+ 0xf4, 0xf0, 0x10, 0x29, 0xf9, 0x3d, 0xe7, 0xdc, 0xe4, 0xf7, 0x3b, 0x27,
+ 0x23, 0x3a, 0x0a, 0x06, 0x0e, 0xfd, 0x2c, 0x07, 0x2b, 0x1c, 0xfa, 0x00,
+ 0xf9, 0x11, 0xea, 0x14, 0xeb, 0xfc, 0x18, 0x03, 0xf1, 0x16, 0x12, 0x04,
+ 0xcf, 0x12, 0xdd, 0xe4, 0x0e, 0xf0, 0x09, 0xe8, 0xf3, 0xfb, 0xa8, 0xf9,
+ 0xee, 0xfb, 0x1e, 0x1d, 0xfd, 0x05, 0xab, 0xe5, 0xff, 0x01, 0xfe, 0x04,
+ 0xf9, 0x02, 0xb9, 0xdc, 0xdf, 0x05, 0xf1, 0xef, 0xf1, 0x1e, 0xc7, 0xee,
+ 0xf7, 0x1e, 0x00, 0x00, 0xf8, 0x10, 0xec, 0xe8, 0x04, 0x0f, 0xf6, 0xff,
+ 0x04, 0x09, 0xe0, 0x0a, 0x0e, 0xe4, 0xf0, 0xf1, 0x16, 0x2b, 0xd3, 0xe1,
+ 0x0a, 0xef, 0xf9, 0xfe, 0x0b, 0x22, 0xf5, 0x01, 0x0a, 0xf8, 0x02, 0x00,
+ 0x17, 0x19, 0xf3, 0x05, 0x21, 0xfa, 0xee, 0xee, 0x12, 0xf2, 0xfa, 0xf5,
+ 0x05, 0x12, 0xee, 0xe4, 0x28, 0xfa, 0xf1, 0x03, 0x15, 0x16, 0x18, 0xfd,
+ 0x0f, 0x21, 0x04, 0xf4, 0xe5, 0x0c, 0x06, 0x13, 0xde, 0x36, 0xe8, 0xfb,
+ 0xe7, 0xfd, 0xf6, 0x12, 0x0e, 0x1d, 0xea, 0xf8, 0xd4, 0xe8, 0x19, 0x07,
+ 0xe5, 0x1c, 0xf7, 0x0c, 0xef, 0x05, 0x0f, 0x09, 0xdd, 0x1a, 0xea, 0xd7,
+ 0xf9, 0xf9, 0x12, 0x17, 0x2e, 0x10, 0x08, 0xfe, 0x14, 0xf5, 0x1d, 0xfa,
+ 0x06, 0x33, 0xed, 0xfe, 0xf7, 0x11, 0xf0, 0x15, 0xe2, 0x24, 0xf6, 0x0a,
+ 0xe2, 0xfc, 0x23, 0x12, 0xdd, 0x11, 0xfd, 0xe5, 0x08, 0xff, 0x15, 0xf6,
+ 0xf1, 0x1b, 0xae, 0xfe, 0xe6, 0x15, 0x2c, 0x2d, 0x15, 0x15, 0xc5, 0xf8,
+ 0xea, 0xe7, 0x07, 0x04, 0xfe, 0x28, 0xa1, 0xf2, 0xe1, 0xf9, 0xf8, 0xff,
+ 0xf4, 0x22, 0xb4, 0xdb, 0x03, 0x20, 0xe6, 0xf3, 0x0e, 0x19, 0xe3, 0x0a,
+ 0xfa, 0xee, 0xf3, 0xe5, 0xd8, 0xf9, 0xf1, 0xde, 0x06, 0x05, 0xf2, 0xf5,
+ 0xe7, 0x16, 0xd8, 0xfe, 0x07, 0xea, 0xee, 0x0e, 0xfa, 0xff, 0xdb, 0xe7,
+ 0x03, 0xed, 0x01, 0xfd, 0x09, 0x1a, 0xfa, 0xe6, 0x05, 0x10, 0xe9, 0x01,
+ 0x1f, 0x13, 0xf7, 0xf6, 0xfb, 0x13, 0xff, 0xdb, 0xed, 0xfe, 0x0a, 0x10,
+ 0x09, 0x29, 0xf5, 0x04, 0xf5, 0x26, 0x0d, 0x0c, 0xf9, 0x16, 0xfa, 0x02,
+ 0xf4, 0x2e, 0xde, 0xf5, 0xe1, 0x1d, 0xfb, 0x02, 0x0b, 0x23, 0x07, 0xea,
+ 0xd9, 0x0a, 0xf3, 0x0a, 0x0f, 0x1e, 0xe7, 0xf1, 0xd7, 0x0b, 0xf6, 0xff,
+ 0x0d, 0x24, 0xcc, 0x0a, 0xee, 0xda, 0x14, 0x12, 0x11, 0x29, 0xf4, 0x1a,
+ 0xef, 0x0b, 0xfa, 0xec, 0x0c, 0x1b, 0xf4, 0xff, 0xf5, 0xef, 0x0f, 0x10,
+ 0xd4, 0x04, 0xf9, 0xf8, 0xec, 0xf9, 0x21, 0x05, 0xd3, 0x27, 0xf3, 0x17,
+ 0xff, 0xf6, 0x15, 0xf9, 0xed, 0x0a, 0xac, 0x02, 0xfd, 0xfb, 0x04, 0x29,
+ 0x06, 0x03, 0xb8, 0xe6, 0xd5, 0x17, 0x09, 0x1b, 0xf6, 0x1b, 0xab, 0xdc,
+ 0xdf, 0xfd, 0x06, 0x09, 0x09, 0x37, 0xbb, 0xed, 0x19, 0xd7, 0xe2, 0xdd,
+ 0x05, 0x01, 0xec, 0xfb, 0xe4, 0x0e, 0xeb, 0xf0, 0x03, 0x17, 0x04, 0xeb,
+ 0x09, 0xee, 0xeb, 0xe7, 0x0c, 0x16, 0xcb, 0x0e, 0x17, 0xd8, 0xe1, 0xf8,
+ 0x2b, 0x19, 0xde, 0xeb, 0x10, 0xf2, 0xff, 0xf8, 0xee, 0x0e, 0xe7, 0xf0,
+ 0x15, 0x08, 0xf8, 0xdf, 0x06, 0x0d, 0xf9, 0x14, 0xfa, 0x0b, 0x04, 0xfd,
+ 0x15, 0x23, 0x20, 0xff, 0xfd, 0x1d, 0x0c, 0xf1, 0xfe, 0x15, 0x0a, 0x02,
+ 0xed, 0xfe, 0xfb, 0x04, 0xfb, 0x1e, 0xdd, 0x05, 0xe0, 0x16, 0xf9, 0xf6,
+ 0xfd, 0x32, 0xdc, 0xf2, 0xd3, 0x08, 0xf4, 0xec, 0x17, 0x25, 0xe2, 0xf0,
+ 0xee, 0xf1, 0x0d, 0xfe, 0x13, 0x2d, 0x01, 0x11, 0xd4, 0xe4, 0x07, 0xfb,
+ 0x32, 0x11, 0x14, 0x07, 0xd7, 0x02, 0x10, 0xeb, 0x2b, 0x1d, 0x01, 0xfc,
+ 0xf3, 0xf0, 0x13, 0x1a, 0xdb, 0x20, 0x00, 0xf0, 0xf0, 0x05, 0x16, 0x03,
+ 0xd4, 0xe3, 0xc2, 0xf0, 0x06, 0x02, 0x1e, 0x0a, 0xec, 0x1f, 0xab, 0xea,
+ 0xfa, 0xe3, 0x20, 0x22, 0x03, 0x1b, 0xb3, 0x0e, 0xe3, 0xf3, 0x1d, 0x27,
+ 0xe3, 0x10, 0xa7, 0xda, 0xf3, 0x00, 0x0a, 0x0a, 0x04, 0xfb, 0xb2, 0x0f,
+ 0x0c, 0xf5, 0x07, 0xff, 0x13, 0x1e, 0xdb, 0xf6, 0xf9, 0xef, 0xe8, 0xe7,
+ 0xfb, 0x18, 0xeb, 0xec, 0x09, 0xda, 0xf1, 0xf0, 0x0b, 0x04, 0xe1, 0xfa,
+ 0x1c, 0x25, 0xee, 0x01, 0x0b, 0x29, 0xd7, 0x0c, 0x04, 0x0b, 0xef, 0xfd,
+ 0x1c, 0xfc, 0xf1, 0xfb, 0x0b, 0x0f, 0xdf, 0xed, 0x17, 0x38, 0x0c, 0xd7,
+ 0xff, 0xfd, 0x01, 0xfc, 0xfb, 0xfb, 0x18, 0x1a, 0x18, 0xe3, 0xf9, 0xf4,
+ 0xfa, 0x20, 0x06, 0x09, 0x11, 0x08, 0x1d, 0xf8, 0xfa, 0x1d, 0xf5, 0x1c,
+ 0xf5, 0xfe, 0x03, 0x07, 0xe4, 0x33, 0xc8, 0x0c, 0xe1, 0x13, 0xff, 0xe5,
+ 0x10, 0x2c, 0xd3, 0xf0, 0xed, 0x04, 0x07, 0x01, 0xf1, 0x16, 0xe0, 0x13,
+ 0xfa, 0x11, 0x07, 0xfa, 0x19, 0x16, 0x01, 0x00, 0x07, 0x26, 0x00, 0xec,
+ 0x1d, 0x23, 0x05, 0xf4, 0x07, 0x17, 0x2c, 0x1d, 0xee, 0xf0, 0x0c, 0x09,
+ 0xe3, 0x1a, 0x24, 0x0b, 0xf3, 0x1e, 0xce, 0xfe, 0xfe, 0x12, 0x21, 0x1a,
+ 0xf6, 0x23, 0xc3, 0x03, 0xf4, 0x10, 0x1a, 0x2a, 0xf4, 0x08, 0xbf, 0xff,
+ 0x04, 0xf4, 0x0b, 0x1d, 0x1a, 0xf8, 0xcc, 0x00, 0xf7, 0x13, 0xf4, 0xfd,
+ 0xf4, 0x19, 0xbd, 0xef, 0x0c, 0x0d, 0x02, 0xfc, 0x12, 0x13, 0xe9, 0xe7,
+ 0xf5, 0xfa, 0xfa, 0xf6, 0x1a, 0x2e, 0xce, 0xd4, 0x01, 0x12, 0xfd, 0xfc,
+ 0x26, 0x10, 0xcc, 0xe7, 0xee, 0x13, 0xee, 0xff, 0xef, 0xea, 0x00, 0x0e,
+ 0x1a, 0x17, 0x04, 0x0c, 0x04, 0x0c, 0xe6, 0xf3, 0xf6, 0xdb, 0xdd, 0x04,
+ 0xf4, 0x22, 0x11, 0x16, 0xf3, 0x07, 0xec, 0xf8, 0xf2, 0x07, 0x03, 0x02,
+ 0xf5, 0x0a, 0xf6, 0x02, 0x1d, 0x1b, 0x11, 0x06, 0xf8, 0x06, 0x02, 0xea,
+ 0xf3, 0x1d, 0xce, 0x00, 0xed, 0xf9, 0xef, 0xf6, 0xec, 0x22, 0xc7, 0xf0,
+ 0xed, 0xdb, 0xe0, 0x02, 0x11, 0x07, 0xe8, 0xf0, 0xd1, 0xed, 0xff, 0xfd,
+ 0x0c, 0x2e, 0xd4, 0xed, 0xec, 0x0e, 0xf1, 0x07, 0x01, 0x0e, 0x0e, 0xfe,
+ 0xda, 0x0b, 0x0a, 0x0a, 0x1f, 0x2e, 0x13, 0x07, 0x00, 0x07, 0x14, 0x21,
+ 0xe9, 0xfc, 0xf0, 0x1e, 0xd7, 0xea, 0x34, 0x07, 0xc6, 0x0c, 0xd4, 0xec,
+ 0xfd, 0x06, 0x24, 0x0a, 0xf3, 0x15, 0xaf, 0xff, 0xe9, 0xf1, 0x0d, 0x3e,
+ 0xe9, 0x18, 0xba, 0x13, 0xed, 0xd7, 0x0b, 0x31, 0x05, 0x0e, 0xaf, 0x13,
+ 0xd6, 0x0e, 0x10, 0x02, 0x02, 0x14, 0xcb, 0xd5, 0xf9, 0x0c, 0xf9, 0x0e,
+ 0x1f, 0x24, 0xd5, 0xeb, 0xff, 0xf1, 0xf5, 0x0c, 0x08, 0x07, 0xf4, 0xd7,
+ 0x06, 0x10, 0xe8, 0xef, 0xfc, 0x2f, 0xee, 0xf1, 0x18, 0xf8, 0xf4, 0x02,
+ 0x11, 0x21, 0xd3, 0x12, 0x14, 0xe4, 0xf4, 0x02, 0x05, 0x24, 0xca, 0xf2,
+ 0xf3, 0xeb, 0xe7, 0xf8, 0x16, 0x1a, 0xeb, 0x0d, 0x05, 0x16, 0xf1, 0xec,
+ 0x11, 0x1c, 0x09, 0x1e, 0xe0, 0xe6, 0xfa, 0x0e, 0x0d, 0x2a, 0xea, 0x2e,
+ 0xed, 0xf9, 0xf7, 0x16, 0x09, 0x05, 0xdd, 0xd6, 0x02, 0xeb, 0xf5, 0xf3,
+ 0xe4, 0x3b, 0xed, 0x04, 0xe0, 0x0e, 0xfd, 0x09, 0xfd, 0x35, 0xdc, 0x18,
+ 0xf3, 0x04, 0xfa, 0x05, 0x15, 0x34, 0xe5, 0xe1, 0xe4, 0xf4, 0xe0, 0xf9,
+ 0x08, 0x32, 0x04, 0x08, 0xf4, 0x0f, 0xff, 0x08, 0x09, 0x2f, 0x06, 0x02,
+ 0xfd, 0x05, 0x0c, 0x24, 0xe3, 0x1e, 0xf5, 0x0c, 0xdd, 0xf8, 0x18, 0x20,
+ 0xd8, 0x14, 0xef, 0xf4, 0x17, 0x08, 0x25, 0x14, 0x04, 0x06, 0xb0, 0xf5,
+ 0xf5, 0x09, 0x0f, 0x3e, 0xff, 0x28, 0xb3, 0xf5, 0x19, 0xd8, 0x14, 0x21,
+ 0xd9, 0xf7, 0xb7, 0xe5, 0xfe, 0xe7, 0x07, 0x1e, 0x04, 0x15, 0xc5, 0xf9,
+ 0x14, 0x20, 0xeb, 0x01, 0x01, 0x18, 0xce, 0x00, 0xe6, 0xe2, 0xf7, 0xfb,
+ 0xf3, 0x0d, 0xd3, 0xf3, 0x04, 0xf8, 0xf0, 0x03, 0xf1, 0x25, 0xb5, 0xef,
+ 0x05, 0xe0, 0x01, 0xf6, 0x04, 0x16, 0xd1, 0x01, 0x0a, 0x21, 0x01, 0x05,
+ 0x0e, 0x01, 0xf0, 0x0a, 0xf3, 0x00, 0x03, 0xf8, 0xfa, 0x03, 0x0b, 0xde,
+ 0xfe, 0xff, 0xfb, 0xea, 0x09, 0x02, 0xf5, 0xe8, 0xe7, 0x08, 0x00, 0xf5,
+ 0xf8, 0x0f, 0x13, 0xfa, 0xeb, 0xe8, 0xfb, 0x1f, 0x08, 0x16, 0xe6, 0xfa,
+ 0xe1, 0x00, 0x03, 0xdd, 0xf1, 0x26, 0xe5, 0x1d, 0xd9, 0xff, 0xf2, 0xf8,
+ 0xff, 0x33, 0xea, 0xe5, 0x03, 0x0c, 0x07, 0xf9, 0xf8, 0x0f, 0xe1, 0x1e,
+ 0xdd, 0x0f, 0x00, 0xf1, 0x06, 0x21, 0x09, 0x05, 0xf3, 0xec, 0xe6, 0x04,
+ 0x07, 0x32, 0xf1, 0xf9, 0xf2, 0x01, 0x18, 0x1f, 0xd2, 0xe2, 0x0a, 0xf4,
+ 0xca, 0xfc, 0x28, 0x16, 0xc2, 0x10, 0xf2, 0xfc, 0x08, 0xe9, 0x2a, 0x0f,
+ 0xfa, 0xf5, 0xa9, 0x07, 0xec, 0xe9, 0x19, 0x43, 0x0b, 0x1c, 0xa6, 0xe9,
+ 0xf4, 0x16, 0x0d, 0x2b, 0xfc, 0x11, 0x9a, 0xe1, 0xf1, 0x1c, 0xf5, 0x0f,
+ 0xe4, 0x18, 0xc0, 0xd9, 0x14, 0x26, 0xe6, 0xf8, 0x0a, 0x17, 0xec, 0xfb,
+ 0xe1, 0x22, 0xdf, 0xf2, 0xfe, 0x1e, 0xd4, 0xeb, 0xd7, 0x0e, 0x08, 0xf6,
+ 0xef, 0xfc, 0xe6, 0xd4, 0xf7, 0x0b, 0xfb, 0xf5, 0x01, 0x25, 0xd7, 0xfb,
+ 0x0d, 0xfe, 0xff, 0xf3, 0x1d, 0x32, 0xfe, 0xee, 0x12, 0xf2, 0x0c, 0xec,
+ 0x02, 0x10, 0xef, 0x01, 0xf2, 0x0b, 0xf3, 0xf7, 0xfa, 0x25, 0xfb, 0x0d,
+ 0x11, 0x15, 0x04, 0xfc, 0x0c, 0x21, 0x12, 0x29, 0x00, 0xfa, 0xf6, 0xf5,
+ 0x06, 0x22, 0xea, 0xe2, 0xee, 0x00, 0xfd, 0xf0, 0x0b, 0x1d, 0xd3, 0xe4,
+ 0xe4, 0x0a, 0xfc, 0xe8, 0xea, 0x2c, 0xed, 0xed, 0xef, 0xe8, 0xf2, 0x05,
+ 0xfd, 0x15, 0xd8, 0xda, 0xca, 0xee, 0xfa, 0x00, 0xfe, 0x0e, 0xf2, 0xf0,
+ 0x0e, 0xf5, 0x04, 0x03, 0x1d, 0x2b, 0xee, 0x05, 0x0f, 0x10, 0x13, 0x35,
+ 0xe2, 0x04, 0x10, 0xdf, 0xcf, 0xeb, 0x40, 0x26, 0xe4, 0x03, 0xf3, 0xf9,
+ 0xf5, 0x14, 0x24, 0x2a, 0xdf, 0xfe, 0xab, 0xe5, 0xfe, 0x1c, 0x27, 0x35,
+ 0xdb, 0xff, 0xac, 0x01, 0xf6, 0xfc, 0x19, 0x1a, 0x11, 0x1f, 0xa8, 0xf5,
+ 0x02, 0x0f, 0x1a, 0x1f, 0xf7, 0xf2, 0xa2, 0x00, 0x15, 0x22, 0xe4, 0x13,
+ 0x00, 0x09, 0xd9, 0xd5, 0x02, 0x19, 0xfd, 0xf8, 0xe7, 0xff, 0xfb, 0xe0,
+ 0xef, 0xf7, 0xee, 0xf3, 0xf3, 0x19, 0xb0, 0xdf, 0x00, 0x0f, 0x08, 0xf3,
+ 0x15, 0x17, 0xec, 0x0f, 0x11, 0x14, 0x02, 0x08, 0x10, 0x17, 0xe6, 0x08,
+ 0xf7, 0x00, 0xed, 0xf7, 0x29, 0x07, 0x10, 0x05, 0x05, 0xe7, 0xed, 0xf4,
+ 0xf9, 0x15, 0xf9, 0xf0, 0x08, 0x00, 0x03, 0x09, 0x21, 0x28, 0xf6, 0x0e,
+ 0xfb, 0xf3, 0x03, 0xf7, 0x0f, 0x0c, 0xf0, 0xf5, 0xe3, 0xd8, 0xf8, 0xf2,
+ 0x09, 0x1c, 0xe7, 0xfb, 0xe4, 0xf6, 0xfa, 0xf8, 0xf1, 0x42, 0xf6, 0xda,
+ 0xdd, 0xd7, 0xfa, 0xff, 0x2f, 0x2c, 0xda, 0x0a, 0xde, 0xec, 0xf1, 0x14,
+ 0xfb, 0x1d, 0xeb, 0xee, 0xf2, 0xeb, 0xf3, 0xed, 0x0e, 0x35, 0xf0, 0x06,
+ 0x19, 0x04, 0x2f, 0x23, 0xe2, 0x07, 0x13, 0x0f, 0xe9, 0xf0, 0x22, 0x2e,
+ 0xd9, 0x1a, 0xcb, 0xed, 0xfd, 0x04, 0x27, 0x1e, 0xf6, 0x07, 0x96, 0xd6,
+ 0xd8, 0x11, 0x18, 0x56, 0xd2, 0xfb, 0x92, 0xfc, 0x0b, 0x0a, 0x17, 0x2c,
+ 0xe5, 0x04, 0xa2, 0xf8, 0xe2, 0x04, 0x1a, 0x0d, 0xeb, 0x11, 0xa2, 0xe5,
+ 0xe5, 0xf8, 0x02, 0xf7, 0x17, 0x03, 0xca, 0xe9, 0x0c, 0x1f, 0xfe, 0xf5,
+ 0x18, 0x12, 0xdd, 0x08, 0x15, 0xff, 0xfc, 0xf6, 0xe1, 0x1d, 0xe2, 0xe1,
+ 0xfe, 0xfc, 0x03, 0xff, 0xf2, 0x23, 0xd2, 0x01, 0x13, 0xdd, 0xf3, 0xf4,
+ 0xf2, 0x07, 0xef, 0x03, 0x15, 0x21, 0xd8, 0xf8, 0x09, 0xf3, 0xe8, 0xea,
+ 0xe8, 0xf2, 0x08, 0xf0, 0x04, 0x1a, 0xf2, 0x19, 0xfb, 0x1b, 0x15, 0xfc,
+ 0x1d, 0x30, 0xe5, 0x1e, 0x09, 0xe8, 0xe9, 0x09, 0xf7, 0x2a, 0xe1, 0x0e,
+ 0x00, 0x21, 0xf3, 0xff, 0xfb, 0x01, 0xdf, 0xf2, 0xfe, 0xf4, 0xfc, 0xf0,
+ 0x0b, 0x0b, 0xdd, 0xe4, 0xd2, 0x14, 0xf7, 0xfe, 0x0b, 0x39, 0x01, 0xe6,
+ 0xe4, 0x27, 0xfa, 0xe4, 0x04, 0x2c, 0xe2, 0x04, 0xf5, 0x07, 0xf2, 0x03,
+ 0xf0, 0x10, 0xf5, 0xf6, 0xfc, 0x16, 0x22, 0x1b, 0xf8, 0x11, 0xe4, 0x09,
+ 0xf6, 0xf0, 0x41, 0x1e, 0xcf, 0x04, 0xea, 0xee, 0x0e, 0xf6, 0x1b, 0x2f,
+ 0xc7, 0xf1, 0xba, 0xef, 0x0f, 0x16, 0x1e, 0x39, 0x05, 0x1e, 0x90, 0xe6,
+ 0x0d, 0xfa, 0x22, 0x3f, 0xe3, 0x23, 0xa5, 0xe3, 0xe9, 0x0f, 0x05, 0x27,
+ 0x02, 0x11, 0x99, 0x05, 0xfa, 0x05, 0x03, 0x01, 0xff, 0x26, 0xd3, 0xf7,
+ 0xf7, 0xf9, 0x05, 0xf4, 0xef, 0x23, 0xd2, 0xdd, 0x05, 0x08, 0xfa, 0xff,
+ 0x03, 0x04, 0xbd, 0xd7, 0x14, 0x06, 0xef, 0x06, 0xe5, 0x05, 0xea, 0xea,
+ 0x02, 0xfd, 0x0d, 0x00, 0x08, 0xff, 0xe7, 0xfb, 0xfe, 0x13, 0xfe, 0xec,
+ 0xf9, 0x02, 0xf3, 0xff, 0xff, 0x08, 0x04, 0xed, 0x19, 0x1d, 0xfa, 0x0a,
+ 0x0d, 0xf2, 0x0f, 0xec, 0x25, 0x1c, 0xec, 0x0b, 0x01, 0xff, 0x01, 0xf6,
+ 0x08, 0x09, 0xe8, 0xe2, 0xec, 0x23, 0xe5, 0xe9, 0xf0, 0x2e, 0xbd, 0xe1,
+ 0xef, 0x14, 0xe9, 0xf6, 0xf5, 0x1d, 0xdc, 0xe3, 0xd7, 0xfc, 0xf9, 0xf2,
+ 0xfe, 0x24, 0xf2, 0x05, 0xd5, 0xed, 0xe9, 0xf9, 0xfa, 0x2d, 0xf0, 0xfe,
+ 0xee, 0xf2, 0xe8, 0xf7, 0x06, 0x14, 0x01, 0x10, 0x06, 0xf3, 0x0e, 0x0e,
+ 0xc2, 0x1d, 0xf2, 0x1c, 0xed, 0xe3, 0x53, 0x21, 0xb8, 0x0c, 0xde, 0x03,
+ 0x15, 0xeb, 0x46, 0x39, 0xdf, 0xf6, 0xa3, 0xee, 0xf6, 0xe0, 0x33, 0x50,
+ 0xdd, 0x27, 0x9f, 0x07, 0x13, 0xe2, 0x1f, 0x35, 0xed, 0x1f, 0xb7, 0x07,
+ 0x11, 0xed, 0x17, 0x28, 0xf4, 0x20, 0xc1, 0xec, 0xef, 0x16, 0x02, 0xfa,
+ 0xe0, 0x1b, 0xf7, 0xdb, 0xfd, 0x0a, 0xe7, 0xfb, 0xe7, 0x25, 0xe2, 0xe7,
+ 0xf8, 0xf0, 0xee, 0xe9, 0x02, 0x06, 0xc9, 0xe4, 0x14, 0xe3, 0xe2, 0xf7,
+ 0xf8, 0xfd, 0xdd, 0xe2, 0x08, 0x0a, 0xe4, 0x05, 0xf5, 0x16, 0xe7, 0x01,
+ 0x00, 0x1c, 0xe7, 0xf0, 0xf6, 0x19, 0xfe, 0x0c, 0xf2, 0x06, 0x03, 0xe8,
+ 0x0b, 0xfe, 0xe3, 0x19, 0x08, 0x1a, 0x10, 0xfd, 0x00, 0x21, 0xf0, 0xeb,
+ 0x18, 0x02, 0xf3, 0x04, 0xf0, 0x18, 0xdb, 0x05, 0x01, 0xde, 0xed, 0xe9,
+ 0x23, 0x15, 0xaf, 0xe6, 0xf1, 0x0a, 0xe6, 0xea, 0x01, 0x18, 0xd8, 0xfd,
+ 0xf1, 0xe6, 0xec, 0xf5, 0x0e, 0x1e, 0xcc, 0xfc, 0xe7, 0x00, 0xe9, 0x11,
+ 0x00, 0x30, 0xf9, 0x14, 0xf4, 0x19, 0xdd, 0xf7, 0xf7, 0x2f, 0xf4, 0xf2,
+ 0xff, 0x27, 0x15, 0x1c, 0xbc, 0x2f, 0xe9, 0x14, 0xf5, 0xe8, 0x44, 0x30,
+ 0xe8, 0x1d, 0xe4, 0x18, 0x11, 0x00, 0x0c, 0x2b, 0xf3, 0x29, 0x96, 0xe0,
+ 0x06, 0xee, 0x3e, 0x55, 0xdc, 0x13, 0x98, 0xdf, 0xf0, 0xfe, 0x17, 0x33,
+ 0xe8, 0x09, 0xa3, 0x07, 0xef, 0x0e, 0x1d, 0x37, 0xdd, 0xfe, 0xb5, 0x00,
+ 0xf7, 0xe0, 0xea, 0xfd, 0xfd, 0x19, 0xbc, 0xfd, 0x15, 0xfe, 0x01, 0xf3,
+ 0xd5, 0x20, 0xbf, 0xe3, 0x15, 0x0e, 0xf0, 0xf6, 0xf2, 0x14, 0xcc, 0xf0,
+ 0xf7, 0x04, 0xf2, 0xff, 0x0b, 0x02, 0xd2, 0xd8, 0xfa, 0xfc, 0xe5, 0x02,
+ 0x00, 0xfb, 0xf0, 0xdc, 0x1e, 0x10, 0x02, 0x01, 0x00, 0x18, 0xe9, 0xdb,
+ 0x1e, 0xf6, 0xfc, 0x03, 0xef, 0x0a, 0x00, 0x16, 0x00, 0x0f, 0xf4, 0x16,
+ 0xfa, 0x0b, 0xe2, 0xfa, 0xe0, 0x07, 0xfb, 0x02, 0x21, 0x0e, 0xdd, 0x0b,
+ 0xea, 0xf0, 0xeb, 0xfb, 0x19, 0x09, 0xd4, 0xf2, 0xef, 0x0b, 0x00, 0xeb,
+ 0x1a, 0x2f, 0xea, 0x06, 0x03, 0xf6, 0xf8, 0xfb, 0xfe, 0x1d, 0xea, 0xdd,
+ 0xed, 0xfd, 0xfb, 0xe7, 0xfe, 0x18, 0xf4, 0xfc, 0x0b, 0xf6, 0xfc, 0x0b,
+ 0xfb, 0x28, 0x07, 0xff, 0x07, 0x1e, 0x03, 0x21, 0xcf, 0x22, 0x05, 0xe6,
+ 0xea, 0xe7, 0x43, 0x2e, 0xe7, 0x14, 0xfb, 0x0a, 0x1e, 0xfe, 0x2c, 0x24,
+ 0xd5, 0xfd, 0x9e, 0xd1, 0xf2, 0x1c, 0x32, 0x51, 0x01, 0xf3, 0xac, 0xe1,
+ 0xf4, 0xe5, 0x1c, 0x37, 0xf1, 0x0f, 0xa7, 0xdb, 0x00, 0xf6, 0x0f, 0x18,
+ 0xe1, 0x10, 0xc9, 0xc5, 0xe8, 0xeb, 0xf2, 0xfd, 0xf6, 0x02, 0xc2, 0xff,
+ 0x00, 0x19, 0x03, 0x0f, 0x02, 0x22, 0xd4, 0xe7, 0x07, 0x0f, 0xe5, 0x1a,
+ 0x09, 0x0b, 0xdc, 0xd2, 0x00, 0x05, 0xee, 0xf8, 0xdc, 0x14, 0xd0, 0x0a,
+ 0x0a, 0xfa, 0xeb, 0x04, 0xf3, 0x06, 0xde, 0x05, 0xfb, 0xfd, 0xe3, 0xec,
+ 0xfd, 0x14, 0xd7, 0x11, 0x0e, 0xe6, 0x06, 0xec, 0xde, 0x22, 0xd7, 0x00,
+ 0x03, 0xf5, 0xf5, 0x0d, 0x01, 0x05, 0xea, 0x0b, 0x16, 0x04, 0xff, 0x13,
+ 0xf3, 0x12, 0xd2, 0xdf, 0x0b, 0xe4, 0x06, 0xf6, 0x08, 0x2d, 0xd3, 0xd6,
+ 0xe7, 0x0a, 0xec, 0xff, 0xfe, 0x01, 0xdf, 0xf4, 0xdf, 0x1c, 0xfe, 0xf9,
+ 0xf7, 0x13, 0xca, 0xff, 0x03, 0x06, 0xe9, 0xf7, 0x06, 0x08, 0xd7, 0xf3,
+ 0xed, 0x08, 0xe3, 0xfd, 0x0c, 0x11, 0x15, 0xfb, 0x15, 0x08, 0x28, 0x40,
+ 0xe7, 0x0d, 0x08, 0xec, 0xe8, 0x16, 0x67, 0x46, 0xc8, 0x16, 0xf1, 0x02,
+ 0x24, 0x00, 0x3a, 0x43, 0xd6, 0x12, 0xae, 0xe7, 0xf4, 0xf8, 0x3a, 0x65,
+ 0xe4, 0x0c, 0xb2, 0xef, 0x1f, 0xe8, 0x29, 0x59, 0xf8, 0x11, 0xc4, 0xe1,
+ 0xfe, 0xfa, 0x27, 0x43, 0xc9, 0x1e, 0xbb, 0xfb, 0xf3, 0x13, 0x15, 0x0d,
+ 0xf1, 0x13, 0xcd, 0xf0, 0x07, 0x19, 0x07, 0x00, 0xd8, 0xeb, 0xbf, 0xf0,
+ 0xfc, 0xf6, 0xef, 0x16, 0x01, 0x02, 0xc1, 0xdf, 0xfd, 0xe9, 0x06, 0x06,
+ 0xf1, 0x08, 0xd7, 0xcc, 0xfb, 0x0e, 0xfc, 0x14, 0xf2, 0x1a, 0xe2, 0x0d,
+ 0xeb, 0x09, 0x07, 0x10, 0xe6, 0x13, 0xeb, 0xf5, 0x15, 0x14, 0xeb, 0xfe,
+ 0xf9, 0x17, 0xd2, 0xe3, 0x1e, 0xf5, 0x04, 0x0a, 0xf1, 0x0e, 0xde, 0xe7,
+ 0x01, 0x20, 0x0c, 0xfc, 0xdc, 0xf9, 0xe5, 0xe9, 0xff, 0x1d, 0x0a, 0xfe,
+ 0xec, 0x25, 0xaf, 0xd2, 0x01, 0x16, 0xfc, 0x17, 0xe8, 0x1e, 0xcd, 0xd9,
+ 0xe2, 0xf1, 0xeb, 0x08, 0xff, 0x33, 0xe5, 0xfb, 0xeb, 0x04, 0xfe, 0xf7,
+ 0xfd, 0x1f, 0xee, 0xff, 0xed, 0xf8, 0xe0, 0xff, 0xfd, 0x2b, 0x0a, 0xf5,
+ 0x15, 0x1d, 0xf3, 0x3f, 0x16, 0xf6, 0xf2, 0xee, 0xf4, 0xef, 0xf0, 0x56,
+ 0x0a, 0x1a, 0xbc, 0xfc, 0x2f, 0xfb, 0xf0, 0x56, 0x1e, 0x0e, 0xc6, 0xe8,
+ 0x06, 0x0b, 0x11, 0x62, 0x3e, 0xf9, 0xb8, 0xc9, 0xed, 0xeb, 0x02, 0x63,
+ 0x2c, 0xfd, 0xc5, 0xe9, 0x00, 0x17, 0x0f, 0x37, 0xfe, 0x20, 0xcc, 0xe0,
+ 0xe0, 0x0e, 0xe6, 0x20, 0x0a, 0xfd, 0xdf, 0xee, 0x0b, 0x02, 0xee, 0x1f,
+ 0xfb, 0x06, 0xd2, 0xed, 0xfe, 0xeb, 0xfc, 0x12, 0xfd, 0x14, 0x00, 0xd8,
+ 0x08, 0xf6, 0xec, 0x17, 0xf9, 0x10, 0x00, 0xd9, 0x18, 0xf1, 0xee, 0x0f,
+ 0xf4, 0x03, 0xee, 0xeb, 0xf0, 0xef, 0xf2, 0x06, 0x04, 0x00, 0xf4, 0x0f,
+ 0x09, 0x06, 0xf7, 0x0b, 0xfd, 0x01, 0x03, 0x03, 0xf4, 0xf6, 0xdd, 0x14,
+ 0x1c, 0xef, 0xf1, 0xdd, 0xf7, 0x13, 0xd9, 0x15, 0xef, 0x02, 0xd2, 0xe7,
+ 0x05, 0x05, 0xe2, 0x09, 0xf2, 0x11, 0xf5, 0xba, 0xf0, 0x04, 0xe0, 0x01,
+ 0x06, 0x10, 0xe6, 0xef, 0xfc, 0x12, 0xf9, 0xf4, 0x1b, 0x2f, 0xe3, 0x0f,
+ 0xd7, 0xf6, 0x0b, 0x11, 0xf7, 0x0c, 0x00, 0x06, 0x18, 0xef, 0x06, 0x03,
+ 0x0a, 0x09, 0xf6, 0x1a, 0x0d, 0xed, 0xfe, 0x2c, 0x43, 0xf4, 0xe5, 0xde,
+ 0xf5, 0x02, 0x25, 0x5a, 0x49, 0xd4, 0xe6, 0x24, 0x1e, 0xf7, 0x0e, 0x5c,
+ 0x5d, 0xf0, 0xf9, 0xe4, 0x1c, 0xeb, 0x28, 0x7f, 0x5b, 0xec, 0xfa, 0xdb,
+ 0x0c, 0xf5, 0x20, 0x49, 0x51, 0xe1, 0xed, 0xe6, 0x0e, 0x26, 0x28, 0x33,
+ 0x35, 0x05, 0xe1, 0xe4, 0x1f, 0xfc, 0xf9, 0x39, 0x18, 0x04, 0xed, 0xed,
+ 0x01, 0xe7, 0xe6, 0x08, 0x09, 0x03, 0xe7, 0xf9, 0x0e, 0x06, 0xec, 0x08,
+ 0x12, 0x1a, 0xda, 0xef, 0xdf, 0xf9, 0xe2, 0x1e, 0x1c, 0x00, 0x12, 0xd7,
+ 0x01, 0xf7, 0x21, 0x17, 0x13, 0x19, 0xde, 0xe0, 0xec, 0x16, 0x01, 0x1b,
+ 0x06, 0x0c, 0xf0, 0xe8, 0x18, 0x03, 0x06, 0x0e, 0x09, 0xfa, 0x03, 0xf3,
+ 0xdd, 0x01, 0xfb, 0x0a, 0x2a, 0xf4, 0xf6, 0xda, 0xe9, 0xfe, 0xe9, 0x12,
+ 0x19, 0xe9, 0x05, 0xdf, 0x00, 0xeb, 0xf2, 0x10, 0x0c, 0xe1, 0xcd, 0xcb,
+ 0xf2, 0x1f, 0xd9, 0x0c, 0xfa, 0xfb, 0xe8, 0xde, 0x00, 0xfc, 0xe5, 0x00,
+ 0x11, 0x02, 0xe6, 0x17, 0x14, 0x00, 0xf2, 0xfd, 0x00, 0xe1, 0x10, 0x24,
+ 0x12, 0xec, 0xed, 0x1e, 0x09, 0x18, 0x03, 0x0c, 0x04, 0xf4, 0x15, 0x0f,
+ 0x10, 0x18, 0xd6, 0x29, 0x10, 0x04, 0x1c, 0xef, 0x0f, 0x0c, 0xc7, 0x04,
+ 0xfe, 0xeb, 0xff, 0xf5, 0xe3, 0x15, 0xfe, 0xcb, 0x10, 0xff, 0x12, 0xfb,
+ 0xe4, 0xeb, 0xf9, 0x00, 0x02, 0xf1, 0x14, 0x13, 0x01, 0x02, 0xf9, 0x01,
+ 0x06, 0x0c, 0xf5, 0x0a, 0x1e, 0x01, 0x19, 0x0e, 0x05, 0xf5, 0x0a, 0xff,
+ 0xff, 0xf2, 0xfb, 0xdb, 0xf8, 0x06, 0x17, 0xf2, 0xf7, 0x0d, 0x0e, 0xf4,
+ 0xfa, 0xf7, 0x14, 0xdb, 0xe0, 0xfd, 0x08, 0x16, 0xf7, 0x16, 0xfc, 0x09,
+ 0x27, 0x07, 0x09, 0xfb, 0x0a, 0xfc, 0x0c, 0xe4, 0xdb, 0xee, 0xff, 0x10,
+ 0xf3, 0x09, 0xfa, 0xf4, 0x23, 0xf3, 0xf4, 0x19, 0xff, 0xfa, 0xff, 0x19,
+ 0x0f, 0x11, 0xed, 0xec, 0xf8, 0x0f, 0x10, 0xf3, 0xff, 0x0b, 0xf7, 0x06,
+ 0x0b, 0x0e, 0x07, 0xe4, 0x18, 0x0a, 0x08, 0x0e, 0x02, 0x0a, 0x05, 0x19,
+ 0x02, 0xf3, 0xfe, 0xfe, 0x0b, 0x0f, 0xfc, 0xfa, 0x05, 0xf9, 0xe2, 0xf9,
+ 0x1b, 0xf7, 0x0f, 0x07, 0xfc, 0x12, 0xfe, 0x01, 0xfd, 0xf0, 0x04, 0xf4,
+ 0xfd, 0x07, 0xf2, 0x04, 0x04, 0x07, 0xef, 0x0c, 0xed, 0x0e, 0xf6, 0xef,
+ 0x08, 0x07, 0x04, 0xe9, 0xf3, 0x20, 0xda, 0x15, 0xf8, 0xff, 0xec, 0xe0,
+ 0xf6, 0xff, 0xe9, 0x08, 0x01, 0x10, 0xf0, 0xfc, 0xe9, 0x08, 0xe8, 0xf5,
+ 0xf8, 0xe5, 0x17, 0xe6, 0x03, 0xfc, 0x09, 0xf5, 0xdd, 0xf2, 0xff, 0x05,
+ 0xf6, 0xf8, 0xf5, 0x07, 0xfc, 0xf1, 0x04, 0xf3, 0x13, 0xe1, 0x0f, 0xf2,
+ 0x0a, 0xf9, 0xfd, 0x1c, 0xe0, 0x11, 0x1b, 0xe6, 0xef, 0x05, 0x05, 0x0c,
+ 0x23, 0x10, 0x09, 0xfe, 0xf7, 0x1a, 0xf1, 0xfc, 0x11, 0x1d, 0xff, 0x03,
+ 0x03, 0xe6, 0x07, 0x11, 0x0c, 0x0d, 0x16, 0x05, 0x05, 0x25, 0xf3, 0x10,
+ 0x10, 0x06, 0x09, 0xe8, 0x1a, 0xf0, 0xee, 0x09, 0xff, 0x24, 0xf7, 0xfb,
+ 0xe6, 0x06, 0xfa, 0x08, 0x03, 0x00, 0xf2, 0x04, 0xf0, 0xeb, 0x14, 0x1c,
+ 0x03, 0x21, 0x14, 0x1d, 0xfe, 0x03, 0xf6, 0x02, 0x09, 0xff, 0x00, 0x13,
+ 0xef, 0x10, 0x1e, 0x0b, 0x1d, 0x1c, 0xf1, 0xf6, 0xe7, 0xfd, 0x14, 0x01,
+ 0xff, 0x13, 0xf7, 0xfc, 0x00, 0x21, 0xe3, 0xeb, 0x07, 0x0e, 0x09, 0xf1,
+ 0xf8, 0xfd, 0x03, 0xee, 0x19, 0xfd, 0xff, 0xfb, 0xff, 0xea, 0xfb, 0x07,
+ 0xf0, 0x0a, 0x04, 0x04, 0x0b, 0x12, 0xfe, 0x0b, 0xe0, 0xff, 0xf6, 0xe5,
+ 0xfc, 0x11, 0xed, 0xfd, 0x15, 0x03, 0xdd, 0xdb, 0x04, 0xfe, 0xff, 0x0e,
+ 0xff, 0xfa, 0xfb, 0xe5, 0xef, 0xf6, 0xfe, 0x22, 0x0f, 0xe8, 0xfe, 0xf4,
+ 0xfd, 0xd9, 0x03, 0x0a, 0xdf, 0xcf, 0xf1, 0x14, 0x05, 0xfd, 0xfb, 0xf3,
+ 0xfb, 0xfb, 0x0f, 0xf8, 0x05, 0x09, 0x03, 0xf7, 0x05, 0x05, 0x13, 0xfb,
+ 0xeb, 0x23, 0xe7, 0x18, 0xfb, 0x00, 0xfe, 0xdd, 0xe9, 0xea, 0xd3, 0xe8,
+ 0x1a, 0xef, 0x01, 0xf1, 0x09, 0x1d, 0xd8, 0xfc, 0xda, 0x19, 0x03, 0xec,
+ 0xe5, 0xf3, 0xed, 0x0a, 0xf4, 0x13, 0x0b, 0xf7, 0x0c, 0x00, 0xf9, 0xea,
+ 0xe3, 0xfe, 0xff, 0x0d, 0x0a, 0x1b, 0xd7, 0x17, 0xeb, 0xe9, 0x00, 0x0e,
+ 0xee, 0x24, 0xef, 0x09, 0x07, 0xf0, 0xf5, 0x07, 0xf5, 0xf5, 0x10, 0x17,
+ 0x06, 0xf7, 0xfc, 0x02, 0xfb, 0xf9, 0xe7, 0x0a, 0x26, 0xf3, 0x01, 0x01,
+ 0x09, 0x0b, 0x02, 0x27, 0xf8, 0xee, 0xfd, 0x1c, 0xf8, 0xf2, 0x0f, 0xfc,
+ 0x0d, 0xe0, 0xea, 0x02, 0x0b, 0x00, 0xe0, 0x08, 0xfe, 0x10, 0x04, 0xfe,
+ 0xeb, 0x13, 0x01, 0x0c, 0x0e, 0xed, 0x09, 0x01, 0x0c, 0xe3, 0x10, 0xdf,
+ 0xd1, 0x14, 0xf3, 0xef, 0x09, 0xf0, 0xee, 0xe5, 0x11, 0xf4, 0xf6, 0x00,
+ 0xe8, 0x20, 0x0a, 0xfc, 0xea, 0xf7, 0x02, 0x16, 0xe7, 0xf3, 0x0d, 0xe4,
+ 0x04, 0xe6, 0xef, 0xf8, 0x0f, 0x23, 0x02, 0xe0, 0x01, 0x01, 0x01, 0x05,
+ 0xf5, 0x0d, 0xf5, 0xf5, 0xe1, 0xff, 0x04, 0x00, 0xf4, 0x0d, 0xee, 0xf1,
+ 0xef, 0xf7, 0x0b, 0xff, 0x1b, 0xec, 0x05, 0xe7, 0xf3, 0x13, 0x12, 0xf2,
+ 0xf3, 0xfc, 0xea, 0x06, 0xfe, 0x13, 0x12, 0xdb, 0x11, 0xe2, 0xfc, 0x0d,
+ 0x1c, 0xe8, 0x1d, 0xfc, 0xf2, 0xe2, 0x13, 0x1d, 0xda, 0xf6, 0x1c, 0x18,
+ 0x1e, 0xf4, 0xfa, 0x03, 0xdc, 0x0f, 0xff, 0xff, 0x18, 0x0b, 0xed, 0xf1,
+ 0xf8, 0x02, 0xf4, 0x10, 0xf9, 0xeb, 0x0b, 0x0e, 0x0f, 0x01, 0x02, 0x1b,
+ 0x06, 0x10, 0x00, 0xe7, 0x23, 0x0d, 0xf6, 0x11, 0x08, 0xf5, 0x0f, 0x05,
+ 0x13, 0xf7, 0x01, 0x01, 0x0c, 0xf6, 0xf9, 0xf0, 0x29, 0x01, 0xe9, 0x11,
+ 0x02, 0xfa, 0xeb, 0x16, 0x0e, 0x10, 0x09, 0x0e, 0x1c, 0x0a, 0xe3, 0xd3,
+ 0x01, 0xe3, 0x00, 0x06, 0xe2, 0xe9, 0x19, 0xef, 0x12, 0xf3, 0xfc, 0x02,
+ 0x0b, 0x0c, 0x0d, 0xed, 0xfd, 0xf6, 0xf9, 0xe9, 0xf2, 0x28, 0xfe, 0x03,
+ 0xec, 0x03, 0x00, 0xf8, 0xde, 0x0d, 0x25, 0x07, 0x1a, 0xe7, 0xfd, 0x29,
+ 0xd8, 0xf7, 0xfb, 0xde, 0x0c, 0x08, 0x06, 0x22, 0xee, 0x1d, 0x05, 0x07,
+ 0xf0, 0xfb, 0xfe, 0x07, 0xf1, 0x04, 0xe9, 0x01, 0xfc, 0xf1, 0x00, 0xeb,
+ 0xe3, 0x08, 0xec, 0xfe, 0x04, 0xeb, 0xfc, 0x01, 0xf6, 0x0e, 0xdf, 0xf8,
+ 0x12, 0xe3, 0x16, 0xdc, 0x21, 0x0a, 0xe6, 0x06, 0xe5, 0x10, 0x07, 0xf7,
+ 0x1e, 0xde, 0xe3, 0x07, 0x16, 0xed, 0x23, 0xf2, 0x12, 0x0d, 0xe9, 0xf9,
+ 0xe8, 0xfe, 0x0e, 0x02, 0x18, 0x0a, 0xea, 0xec, 0xfb, 0xfe, 0x0c, 0x1b,
+ 0x19, 0x20, 0xfa, 0x07, 0xe5, 0x0c, 0x04, 0x27, 0xdb, 0xe6, 0xfe, 0x0d,
+ 0x0a, 0x0a, 0xfe, 0x39, 0xdd, 0xde, 0x05, 0xec, 0x09, 0x05, 0x0a, 0x2c,
+ 0xf4, 0x02, 0x1f, 0xd3, 0x24, 0xee, 0x0f, 0x3c, 0xf5, 0xfd, 0xf8, 0xf8,
+ 0x12, 0xf5, 0xf3, 0x19, 0xf9, 0xda, 0xf6, 0x0a, 0x0a, 0xf4, 0x09, 0x0f,
+ 0xfc, 0x00, 0x01, 0x01, 0xf3, 0xf8, 0x05, 0xf3, 0x0c, 0x19, 0x0e, 0xfd,
+ 0xfa, 0xe1, 0xfc, 0x0c, 0x03, 0xfb, 0x1b, 0x06, 0xcc, 0xe4, 0x08, 0xf9,
+ 0x10, 0xe9, 0x06, 0x00, 0x17, 0xe8, 0x0d, 0x12, 0xca, 0xf5, 0x23, 0xe4,
+ 0x21, 0xf6, 0x19, 0x33, 0xdd, 0xfa, 0x0c, 0x01, 0x14, 0x07, 0x00, 0x34,
+ 0xda, 0x05, 0x07, 0x01, 0x07, 0xe4, 0x06, 0x24, 0x02, 0xff, 0xf0, 0x09,
+ 0xfc, 0xf4, 0x03, 0x06, 0xee, 0x08, 0xe2, 0x1d, 0xfa, 0x0c, 0xfc, 0x02,
+ 0x03, 0xe5, 0xf0, 0xe2, 0x0a, 0x18, 0x12, 0x0c, 0x1e, 0x20, 0xed, 0x20,
+ 0xe4, 0x01, 0x2a, 0x09, 0x0d, 0x0e, 0xd0, 0xf4, 0xdd, 0xfd, 0x2b, 0xf2,
+ 0x08, 0x0c, 0xf8, 0xf7, 0xfc, 0xf9, 0x15, 0xef, 0x19, 0x1c, 0x01, 0xff,
+ 0xe2, 0x01, 0xf3, 0x30, 0x0e, 0xfb, 0x15, 0xe8, 0x1c, 0x00, 0xfa, 0x16,
+ 0xef, 0xea, 0xfb, 0x05, 0xf0, 0x0e, 0x02, 0x13, 0xf4, 0x01, 0x03, 0xe5,
+ 0x29, 0x07, 0x09, 0x24, 0xf9, 0xe3, 0xf8, 0xde, 0x2d, 0xf4, 0xf5, 0x40,
+ 0xed, 0xdf, 0x07, 0xef, 0x0f, 0x0a, 0x0b, 0x32, 0x0d, 0xe8, 0x00, 0xe6,
+ 0xf6, 0xfc, 0xfd, 0x19, 0x11, 0x09, 0xf3, 0x03, 0xea, 0xf1, 0xfb, 0x02,
+ 0xfd, 0x06, 0xff, 0xfe, 0x09, 0xec, 0x06, 0x0c, 0x15, 0xf9, 0x06, 0xd7,
+ 0xe3, 0xf7, 0xed, 0x01, 0x03, 0xfd, 0x14, 0x01, 0x0e, 0xe0, 0x37, 0x0d,
+ 0xd2, 0x18, 0x2f, 0xea, 0x12, 0x0d, 0x05, 0x3a, 0xd5, 0x07, 0x1e, 0xf2,
+ 0x21, 0x11, 0xf9, 0x36, 0xd3, 0xf5, 0x12, 0xf6, 0xfb, 0xf6, 0x06, 0x0f,
+ 0xde, 0xf9, 0x06, 0x09, 0xdf, 0xff, 0x0b, 0xf3, 0xf5, 0x01, 0xf1, 0xea,
+ 0xf2, 0x02, 0x12, 0xfc, 0x0e, 0xee, 0xf8, 0xeb, 0x00, 0xef, 0x21, 0x0f,
+ 0x09, 0xef, 0xeb, 0x1e, 0xef, 0xf2, 0x26, 0xf9, 0x17, 0xf1, 0xf1, 0xf0,
+ 0x0c, 0x10, 0x1d, 0xff, 0x1d, 0x06, 0x03, 0xf6, 0xfb, 0x14, 0x1b, 0x03,
+ 0x22, 0xfd, 0xec, 0x03, 0xfa, 0xf8, 0x01, 0x2b, 0x1e, 0x1b, 0x09, 0x09,
+ 0x07, 0xff, 0xf0, 0x20, 0xee, 0x14, 0xfb, 0xf6, 0xf8, 0x11, 0xd9, 0x29,
+ 0xf4, 0xfa, 0x07, 0xef, 0x20, 0xf9, 0xf2, 0x30, 0xee, 0xf0, 0xf3, 0xd6,
+ 0x0d, 0xfe, 0x03, 0x36, 0xf5, 0xd7, 0x01, 0xe6, 0x04, 0xf0, 0x05, 0x1f,
+ 0x0f, 0xdd, 0xff, 0xf8, 0x1f, 0xf2, 0x04, 0x37, 0xfa, 0x00, 0xfd, 0xf8,
+ 0x10, 0xe1, 0xfb, 0x0d, 0xed, 0xf6, 0xe2, 0xfe, 0x08, 0xfe, 0x07, 0x08,
+ 0x08, 0x11, 0x0a, 0xf0, 0xf8, 0xf5, 0x04, 0xea, 0x08, 0x12, 0x06, 0x0d,
+ 0x0f, 0x10, 0x40, 0x28, 0xc0, 0xfb, 0x3f, 0x08, 0x1d, 0x09, 0x1b, 0x3d,
+ 0xee, 0xf4, 0x29, 0x13, 0x20, 0xfc, 0x11, 0x4c, 0xdb, 0x02, 0x15, 0x05,
+ 0xec, 0xeb, 0x0a, 0x22, 0xe7, 0x00, 0x02, 0x01, 0xd4, 0xea, 0x0a, 0xf3,
+ 0xe3, 0xf8, 0xf5, 0xfa, 0x01, 0x0d, 0x19, 0x06, 0x24, 0x13, 0x02, 0xf5,
+ 0xf1, 0xf1, 0x1b, 0x0f, 0x19, 0x04, 0xe3, 0xf9, 0xe7, 0x02, 0x29, 0xfc,
+ 0x29, 0xec, 0xe9, 0x04, 0xdc, 0x22, 0x1d, 0xfd, 0x1f, 0x01, 0xec, 0xe8,
+ 0xf5, 0x14, 0x1b, 0x19, 0x06, 0x0e, 0x02, 0x0d, 0xf9, 0x06, 0xfc, 0x15,
+ 0x07, 0xfa, 0x0c, 0xe1, 0x18, 0x1a, 0xe8, 0x1b, 0xe9, 0xef, 0x0a, 0x18,
+ 0xfc, 0x05, 0xf9, 0x14, 0xdc, 0x04, 0x01, 0xff, 0x07, 0xfd, 0xf0, 0x2c,
+ 0xf2, 0xec, 0x0e, 0xe7, 0x1a, 0x05, 0xe8, 0x35, 0x13, 0x09, 0xf9, 0x07,
+ 0xfe, 0xfa, 0x0d, 0x40, 0x0c, 0xea, 0xf4, 0x04, 0x01, 0x11, 0xfc, 0x23,
+ 0xeb, 0xf4, 0xe9, 0x04, 0xeb, 0xe7, 0x07, 0x09, 0xfb, 0xf1, 0xf6, 0xfd,
+ 0x02, 0xfa, 0x02, 0xff, 0x00, 0xff, 0xf1, 0xf1, 0x1a, 0xe9, 0x10, 0xe3,
+ 0x0b, 0x0c, 0x08, 0x04, 0x1b, 0x0a, 0x2b, 0x10, 0xe1, 0x01, 0x1f, 0x06,
+ 0x04, 0xec, 0x19, 0x49, 0xee, 0xf8, 0x22, 0x0c, 0x20, 0x02, 0x07, 0x31,
+ 0xe7, 0xff, 0x0f, 0xf0, 0xfd, 0xea, 0x13, 0x26, 0xce, 0xfa, 0xff, 0xee,
+ 0xe9, 0xfe, 0x15, 0x08, 0x04, 0x05, 0x0d, 0xfa, 0xdd, 0xf8, 0x07, 0x0b,
+ 0x33, 0xef, 0xec, 0xf9, 0xd9, 0xe6, 0x1d, 0x10, 0x41, 0xf6, 0xdf, 0x11,
+ 0xe3, 0x14, 0x1d, 0xfb, 0x2b, 0x15, 0xdc, 0x09, 0xf6, 0x05, 0x16, 0x00,
+ 0x1c, 0x27, 0xe4, 0xfc, 0xf7, 0x16, 0x08, 0x08, 0x2f, 0xdd, 0xf8, 0xfa,
+ 0xe9, 0x0e, 0x0b, 0x0b, 0x02, 0x12, 0x02, 0xfd, 0x19, 0x03, 0xeb, 0x11,
+ 0xf4, 0x09, 0x09, 0x15, 0x12, 0x0d, 0xef, 0x1c, 0xe4, 0xfe, 0x17, 0x0c,
+ 0x09, 0x04, 0xea, 0x2f, 0xf2, 0x1e, 0x02, 0xfb, 0xfe, 0xe3, 0x00, 0x2e,
+ 0x04, 0xf9, 0x0c, 0x05, 0x27, 0x0c, 0x07, 0x2d, 0xf7, 0x0b, 0xfb, 0xf9,
+ 0x1c, 0xdf, 0x11, 0x36, 0x05, 0xf2, 0x02, 0xf8, 0x0b, 0x07, 0x05, 0xfb,
+ 0xfc, 0x0e, 0x13, 0xfa, 0xfb, 0x09, 0xf5, 0xfd, 0x06, 0x15, 0xf9, 0x03,
+ 0x18, 0xfd, 0x1a, 0x0a, 0x03, 0xe2, 0xfb, 0x00, 0x1e, 0xfe, 0x4f, 0x27,
+ 0xe1, 0xf7, 0x31, 0xf0, 0x1b, 0xec, 0x07, 0x5f, 0xe2, 0xf8, 0x40, 0x05,
+ 0x17, 0x24, 0x0c, 0x3c, 0xf3, 0x10, 0x13, 0xf8, 0x0b, 0xf3, 0xf9, 0x36,
+ 0xe1, 0xf3, 0xf4, 0xe8, 0xef, 0xf8, 0xfc, 0xeb, 0xe3, 0xfb, 0xf0, 0xee,
+ 0xdb, 0x06, 0x0c, 0x11, 0x1e, 0x10, 0xe2, 0xe9, 0xeb, 0x0d, 0x34, 0x0f,
+ 0x43, 0xd9, 0xef, 0x08, 0xec, 0x05, 0x1d, 0x02, 0x33, 0xef, 0xf4, 0xf7,
+ 0xe6, 0xf9, 0x22, 0x07, 0x04, 0x06, 0xe9, 0x02, 0xf0, 0xfc, 0x24, 0x20,
+ 0x24, 0x17, 0xe6, 0x0f, 0x05, 0xf6, 0xfc, 0x1f, 0xf2, 0x01, 0x0d, 0xe7,
+ 0xff, 0x1d, 0xf0, 0xfa, 0xd0, 0x00, 0xff, 0x0e, 0x23, 0xf9, 0xf3, 0x11,
+ 0xde, 0x0d, 0x05, 0x04, 0x0b, 0x0b, 0xfb, 0x26, 0x0d, 0x0d, 0xff, 0xe8,
+ 0x16, 0xe8, 0x0b, 0x3c, 0x18, 0xe4, 0x04, 0xff, 0xfa, 0xf3, 0xff, 0x40,
+ 0xee, 0x06, 0xfc, 0x0d, 0x00, 0xf7, 0x13, 0x3f, 0xf7, 0x13, 0x06, 0x08,
+ 0xf9, 0x13, 0xf2, 0x19, 0xfd, 0xf9, 0xf3, 0xe6, 0xfc, 0x07, 0xf6, 0xfd,
+ 0x0a, 0x22, 0x00, 0x01, 0x19, 0xff, 0xe7, 0xff, 0x08, 0xfd, 0x03, 0xfd,
+ 0x1f, 0xe7, 0x28, 0x08, 0xde, 0xf3, 0x43, 0xf6, 0x0c, 0xfe, 0x1e, 0x52,
+ 0xf2, 0x04, 0x17, 0xf2, 0x08, 0x0d, 0x04, 0x38, 0xde, 0x0c, 0x10, 0xef,
+ 0xdf, 0x0f, 0x01, 0x24, 0xde, 0xe1, 0x0d, 0xfd, 0xd4, 0xf6, 0x12, 0x0e,
+ 0xed, 0x01, 0xf0, 0xf3, 0xfd, 0xff, 0x18, 0xf3, 0x36, 0xda, 0xf6, 0xef,
+ 0xe8, 0xef, 0x37, 0x27, 0x4e, 0xf8, 0xf4, 0xff, 0xe5, 0xf3, 0x32, 0x0b,
+ 0x36, 0x08, 0xe9, 0xf6, 0xe2, 0x13, 0x21, 0xfe, 0x12, 0xed, 0xdd, 0xfb,
+ 0xf8, 0x05, 0x0f, 0x03, 0x1c, 0x04, 0xfc, 0xf2, 0x23, 0x0e, 0x03, 0xfc,
+ 0xf9, 0x18, 0xf7, 0x01, 0x1b, 0x03, 0xf5, 0xfd, 0xde, 0xf3, 0x19, 0xfc,
+ 0x11, 0x02, 0xe7, 0x13, 0xde, 0xd8, 0xf2, 0x05, 0x28, 0x02, 0x02, 0x27,
+ 0x07, 0x08, 0xff, 0x07, 0x27, 0x0e, 0x19, 0x40, 0xfb, 0x02, 0x0c, 0xf6,
+ 0x0d, 0x07, 0x0f, 0x47, 0xf8, 0x05, 0x0e, 0xfd, 0x03, 0x1e, 0x07, 0x32,
+ 0xe7, 0xf6, 0x24, 0x01, 0x01, 0x02, 0x0a, 0xff, 0xf6, 0x26, 0x15, 0xf0,
+ 0x04, 0x13, 0x03, 0xfa, 0xfe, 0xf6, 0xf1, 0x09, 0x2a, 0xe6, 0xea, 0xf6,
+ 0x17, 0x13, 0xeb, 0xff, 0x15, 0xeb, 0x23, 0x06, 0xc8, 0xf6, 0x33, 0xeb,
+ 0xf4, 0xe7, 0x12, 0x2a, 0xe3, 0xe6, 0x32, 0xfa, 0x16, 0x15, 0x17, 0x40,
+ 0xf1, 0x08, 0x1a, 0xf3, 0xf6, 0x0c, 0x0c, 0x11, 0xd0, 0x22, 0x02, 0xee,
+ 0xea, 0xf4, 0xf8, 0xf9, 0x13, 0x10, 0x17, 0xf5, 0xf1, 0x0a, 0x0e, 0xfd,
+ 0x32, 0xda, 0xf1, 0xe2, 0xdb, 0xf2, 0x34, 0x1f, 0x53, 0xfc, 0xe4, 0xf2,
+ 0xf6, 0xf2, 0x1d, 0x04, 0x4a, 0xec, 0xee, 0x06, 0xdf, 0x01, 0x1a, 0x04,
+ 0x27, 0xfc, 0xe6, 0xfd, 0xd9, 0xfd, 0x0e, 0x00, 0x0c, 0x16, 0xf3, 0x03,
+ 0xf7, 0xfc, 0x0e, 0x0f, 0x09, 0x06, 0x06, 0x04, 0x08, 0x02, 0xed, 0xf5,
+ 0xe4, 0xe6, 0x07, 0x06, 0x03, 0x18, 0xea, 0x13, 0xe2, 0xfa, 0x10, 0xf2,
+ 0x02, 0xec, 0x03, 0x3c, 0xf6, 0xf6, 0x0a, 0x10, 0x09, 0xf8, 0x15, 0x24,
+ 0xfd, 0x0d, 0x09, 0x01, 0x00, 0xff, 0x00, 0x1a, 0xf0, 0xee, 0x08, 0x03,
+ 0x1d, 0x05, 0x16, 0x46, 0xe6, 0xf8, 0x08, 0x00, 0x09, 0x09, 0xff, 0x01,
+ 0xfc, 0x20, 0xfc, 0xec, 0x05, 0x1b, 0x03, 0xf1, 0x12, 0xe4, 0xfa, 0x24,
+ 0x1c, 0xf5, 0xf2, 0x05, 0x11, 0xe7, 0xfa, 0x02, 0x20, 0xea, 0x31, 0x10,
+ 0xcf, 0xd8, 0x33, 0xee, 0xff, 0x09, 0x20, 0x3f, 0xe2, 0x0a, 0x29, 0xee,
+ 0x3a, 0xf2, 0x1e, 0x39, 0x02, 0x1e, 0xfe, 0xf2, 0xef, 0xe2, 0x0d, 0x0f,
+ 0xf1, 0x19, 0x02, 0xe7, 0xec, 0xff, 0xfe, 0xe4, 0xfe, 0xfb, 0x02, 0xf6,
+ 0xf1, 0xf4, 0x07, 0x1a, 0x2a, 0xf9, 0x06, 0xf9, 0xda, 0xf4, 0x22, 0x02,
+ 0x4f, 0x0a, 0xf3, 0xfc, 0xf3, 0xf6, 0x25, 0x0a, 0x28, 0x01, 0xf7, 0x09,
+ 0xe6, 0x05, 0x28, 0xf7, 0x1e, 0xf2, 0xee, 0x13, 0xee, 0x05, 0x0f, 0x0a,
+ 0x09, 0xe8, 0xe8, 0x0e, 0x05, 0x12, 0x0f, 0x15, 0x02, 0xec, 0xf8, 0x02,
+ 0xf7, 0x05, 0xf8, 0xff, 0xdc, 0x00, 0x01, 0x00, 0x12, 0x17, 0xec, 0x19,
+ 0xfa, 0x09, 0xfa, 0xf3, 0x1d, 0x0b, 0x07, 0x25, 0xea, 0x0c, 0xf5, 0xfa,
+ 0x04, 0xf7, 0xfe, 0x33, 0xfe, 0x14, 0xef, 0x04, 0xf0, 0x00, 0x00, 0x3a,
+ 0xea, 0xfa, 0x10, 0x01, 0xe4, 0x00, 0xff, 0x23, 0xe9, 0x26, 0x15, 0x10,
+ 0x04, 0x14, 0x0d, 0x08, 0xf8, 0xfd, 0x10, 0xfb, 0x00, 0x21, 0x06, 0xfa,
+ 0x0f, 0x08, 0xf1, 0x09, 0x28, 0xf0, 0xd8, 0x0d, 0x08, 0x09, 0x02, 0xfb,
+ 0x12, 0x03, 0x0e, 0xfb, 0xce, 0xf0, 0x39, 0xe5, 0x09, 0xf6, 0x1f, 0x35,
+ 0xdd, 0x1c, 0x25, 0xef, 0x17, 0x0c, 0xf6, 0x3e, 0xf0, 0x21, 0x08, 0xff,
+ 0xd7, 0xfc, 0xfd, 0x1f, 0xe5, 0x18, 0x12, 0xe9, 0xf5, 0xe9, 0x12, 0xf6,
+ 0x02, 0x13, 0xf4, 0x0a, 0xfd, 0x03, 0x09, 0x08, 0x2f, 0x07, 0xee, 0xfd,
+ 0xd7, 0x00, 0x2b, 0x29, 0x3b, 0xdb, 0xde, 0xf1, 0xe1, 0xf7, 0x47, 0x12,
+ 0x35, 0x0c, 0xe4, 0x09, 0xef, 0x17, 0x2b, 0xea, 0x2d, 0xf8, 0xe8, 0x18,
+ 0xef, 0x03, 0x11, 0x0a, 0x10, 0xff, 0xe8, 0x07, 0x0c, 0x07, 0x03, 0x18,
+ 0x05, 0x08, 0xf8, 0xf8, 0x06, 0x18, 0xe9, 0xf9, 0xe0, 0x0f, 0x0d, 0x18,
+ 0x04, 0x01, 0xf0, 0x1c, 0xf6, 0x14, 0xfd, 0x12, 0x0c, 0x0c, 0x02, 0x34,
+ 0xf6, 0xe6, 0xfd, 0xf9, 0xf9, 0xfd, 0x00, 0x2a, 0xfc, 0xf9, 0xff, 0x0a,
+ 0xfe, 0x1b, 0xf5, 0x34, 0xdc, 0xf9, 0x15, 0x13, 0xe7, 0x1b, 0xf7, 0x25,
+ 0xfd, 0x09, 0x08, 0x0a, 0xf0, 0x17, 0x0f, 0x04, 0xf4, 0xe9, 0x06, 0x07,
+ 0xf5, 0x02, 0xfc, 0xf5, 0x09, 0xee, 0xf1, 0x07, 0x38, 0x03, 0x05, 0x0f,
+ 0x16, 0x0f, 0xed, 0xff, 0x21, 0xf8, 0x34, 0x07, 0xd1, 0xf9, 0x27, 0x00,
+ 0x0c, 0x21, 0x18, 0x42, 0xe6, 0x02, 0x1a, 0xf1, 0x2f, 0xf1, 0x0e, 0x3b,
+ 0xee, 0xf8, 0x08, 0xea, 0xfe, 0xf9, 0x03, 0x18, 0xf5, 0xf8, 0x0d, 0xeb,
+ 0x01, 0x10, 0x09, 0x02, 0x15, 0xfb, 0xf1, 0x0b, 0xf2, 0x06, 0x08, 0x09,
+ 0x2f, 0x19, 0x02, 0xfe, 0xe4, 0x06, 0x1f, 0x17, 0x49, 0xf2, 0xe2, 0x02,
+ 0xef, 0x04, 0x26, 0x16, 0x3f, 0x08, 0xf1, 0x0a, 0xfd, 0xf9, 0x28, 0x01,
+ 0x15, 0x0b, 0xf9, 0x10, 0xdc, 0x02, 0x20, 0xf7, 0x16, 0xe6, 0x09, 0x03,
+ 0xf1, 0xf5, 0x12, 0x1c, 0xfb, 0x2a, 0x08, 0xfa, 0x0a, 0x16, 0xf6, 0x15,
+ 0xf0, 0x06, 0x11, 0xfd, 0x0e, 0xf9, 0xf6, 0x12, 0xed, 0xf3, 0xfd, 0x1f,
+ 0x0b, 0xfa, 0x08, 0x30, 0xf8, 0xff, 0x0b, 0xeb, 0x10, 0xff, 0x07, 0x22,
+ 0x0d, 0x07, 0x09, 0x03, 0xf6, 0xf8, 0xfc, 0x26, 0xf8, 0xee, 0x11, 0x02,
+ 0x03, 0x0a, 0xef, 0x38, 0xfe, 0x13, 0x1b, 0x09, 0xfe, 0x06, 0x05, 0xf3,
+ 0x04, 0xdf, 0xfc, 0x00, 0xe7, 0x15, 0xec, 0xf1, 0xf8, 0xfc, 0xed, 0x05,
+ 0x0e, 0xf3, 0x15, 0x09, 0x01, 0x0d, 0xfd, 0x00, 0x24, 0xe2, 0x31, 0x13,
+ 0xd5, 0x1b, 0x2b, 0xe8, 0x03, 0x08, 0x1d, 0x33, 0xdc, 0xfd, 0x24, 0xe4,
+ 0x20, 0xfa, 0x07, 0x33, 0x01, 0x12, 0x06, 0xf5, 0xef, 0xf7, 0xfa, 0x13,
+ 0x01, 0xec, 0xee, 0xe0, 0xfd, 0x0d, 0xff, 0x09, 0xf6, 0x00, 0xed, 0x07,
+ 0xea, 0x0e, 0xff, 0x0e, 0x26, 0xfc, 0xf0, 0xe7, 0xe7, 0xfe, 0x30, 0xff,
+ 0x24, 0x04, 0x06, 0xf4, 0xf5, 0xf8, 0x23, 0x0e, 0x3d, 0xf2, 0xfd, 0x04,
+ 0xe8, 0xfb, 0x23, 0xfe, 0x33, 0xe1, 0x01, 0xfd, 0xdc, 0xfb, 0x0e, 0xfa,
+ 0x22, 0xfb, 0x11, 0xfa, 0xff, 0x08, 0x21, 0x30, 0x13, 0x03, 0xf2, 0x03,
+ 0xf8, 0x0f, 0xec, 0x0d, 0xef, 0x0f, 0x10, 0x10, 0x0f, 0xf6, 0xf9, 0x1e,
+ 0xf7, 0xe5, 0x08, 0xfa, 0x09, 0xff, 0x00, 0x15, 0x02, 0x00, 0x08, 0xfe,
+ 0xfb, 0x0e, 0x15, 0x28, 0xfa, 0xfb, 0x13, 0x06, 0xfb, 0x05, 0xf6, 0x11,
+ 0xf6, 0x0b, 0x06, 0x15, 0xe1, 0x00, 0xe9, 0x0f, 0xe1, 0x1d, 0x18, 0xfd,
+ 0x0b, 0x0f, 0xff, 0xf2, 0xf5, 0xfd, 0x14, 0xff, 0xf4, 0xfe, 0xe2, 0xf8,
+ 0x14, 0x0b, 0xeb, 0x07, 0x35, 0xe2, 0xeb, 0x0b, 0x04, 0x22, 0xfe, 0x0e,
+ 0x1d, 0xf2, 0x24, 0x11, 0xcc, 0xec, 0x25, 0xf7, 0xff, 0xf9, 0x06, 0x29,
+ 0xe4, 0x07, 0x1c, 0xdb, 0xf8, 0x1d, 0xfa, 0x44, 0xf2, 0x01, 0x0f, 0xe6,
+ 0x11, 0x03, 0xee, 0x17, 0x06, 0xe0, 0x0c, 0xd8, 0xe9, 0xfd, 0x11, 0xfe,
+ 0x07, 0xdd, 0xea, 0xff, 0xde, 0xdd, 0x0a, 0x09, 0x30, 0xf2, 0x01, 0xe4,
+ 0xe0, 0xeb, 0x2d, 0x12, 0x2d, 0xeb, 0xfc, 0xf0, 0xe8, 0xf9, 0x1f, 0x08,
+ 0x3f, 0xeb, 0x0e, 0x13, 0xf9, 0x0c, 0x1c, 0x02, 0x25, 0xec, 0xf6, 0x05,
+ 0xf3, 0xf4, 0x18, 0x08, 0x12, 0xe9, 0xfb, 0xfd, 0xf9, 0x08, 0x13, 0x1c,
+ 0x08, 0xec, 0xfe, 0x02, 0xf1, 0x19, 0xf3, 0x1d, 0xf1, 0x07, 0x11, 0x12,
+ 0xfa, 0xf2, 0xf6, 0x0d, 0xff, 0x17, 0x0a, 0xfb, 0x1f, 0xf8, 0x11, 0x24,
+ 0xf6, 0xfc, 0xfe, 0x07, 0xed, 0x05, 0x1c, 0x21, 0xfe, 0xfe, 0x16, 0x0d,
+ 0x08, 0x0f, 0x09, 0x33, 0xf4, 0x1f, 0x14, 0x0c, 0xfe, 0xf5, 0xeb, 0x2a,
+ 0xee, 0xf3, 0x12, 0x19, 0xec, 0x01, 0x06, 0xf7, 0x05, 0x22, 0x0b, 0xeb,
+ 0xeb, 0x06, 0xe1, 0xf5, 0x0d, 0xee, 0xfb, 0x0a, 0x31, 0xff, 0xe3, 0xea,
+ 0x18, 0x09, 0xe3, 0x07, 0x1a, 0xf8, 0x15, 0xfc, 0xcc, 0xf2, 0x2a, 0xe5,
+ 0x01, 0xea, 0x10, 0x1f, 0xd9, 0x02, 0x13, 0xf6, 0x16, 0x01, 0x0e, 0x3c,
+ 0x02, 0x17, 0x04, 0xf1, 0xf7, 0x02, 0x07, 0x0c, 0x02, 0x1f, 0xf4, 0xe6,
+ 0xf0, 0xe9, 0x05, 0xf4, 0xfd, 0xe4, 0xf7, 0xe9, 0xfc, 0xef, 0x06, 0x02,
+ 0x26, 0xf1, 0xf1, 0xeb, 0xe9, 0xe6, 0x30, 0x1c, 0x38, 0x0f, 0x03, 0xf1,
+ 0x10, 0x04, 0x30, 0x19, 0x1f, 0xfb, 0xfc, 0x05, 0xe2, 0xfe, 0x18, 0xf2,
+ 0x1c, 0xf2, 0xf5, 0x0e, 0xf2, 0x05, 0x1d, 0x28, 0x12, 0xf0, 0xf0, 0x0f,
+ 0x0a, 0x03, 0x1a, 0x1a, 0xf3, 0x08, 0x13, 0xef, 0xf5, 0x1c, 0x06, 0x00,
+ 0xee, 0x12, 0x1d, 0x03, 0x18, 0x06, 0x0a, 0x0e, 0xf0, 0xeb, 0xfa, 0x0d,
+ 0x08, 0xff, 0x06, 0x24, 0x0f, 0x03, 0x0a, 0x0f, 0x0e, 0xff, 0x08, 0x33,
+ 0xfc, 0x00, 0x0e, 0xfb, 0xfb, 0x05, 0x07, 0x19, 0xe8, 0xe7, 0x12, 0x11,
+ 0x15, 0xf7, 0x0c, 0x1a, 0xf6, 0x28, 0x08, 0xeb, 0xf2, 0x25, 0xee, 0x01,
+ 0x03, 0xec, 0xed, 0xfa, 0xf0, 0xf2, 0xef, 0xf1, 0x02, 0x23, 0xef, 0x01,
+ 0x41, 0xfa, 0xf4, 0xf4, 0x15, 0xf5, 0xf5, 0xf9, 0x28, 0xde, 0x20, 0xf6,
+ 0xc7, 0xde, 0x21, 0xe4, 0xfe, 0xec, 0x0d, 0x2c, 0xee, 0x24, 0x10, 0xf0,
+ 0x1d, 0x12, 0x0e, 0x2b, 0x06, 0xf8, 0xfd, 0x01, 0x08, 0xef, 0xfd, 0x0f,
+ 0xeb, 0xed, 0xe1, 0xdf, 0xf1, 0xe5, 0x16, 0xe3, 0x08, 0xfc, 0xf6, 0xf6,
+ 0xd8, 0xf0, 0x23, 0xfc, 0x2b, 0xf5, 0xff, 0xe7, 0xf4, 0xe9, 0x29, 0x09,
+ 0x2b, 0x0c, 0xff, 0x08, 0x0b, 0xed, 0x29, 0x14, 0x3c, 0xf5, 0xeb, 0x18,
+ 0xf6, 0x10, 0x22, 0xf9, 0x17, 0x23, 0x02, 0x0c, 0xf6, 0xfa, 0x2f, 0xfe,
+ 0x1e, 0xeb, 0xfd, 0x03, 0xf0, 0x07, 0x1c, 0x09, 0xfa, 0xe1, 0x0d, 0x0f,
+ 0x18, 0x03, 0xfe, 0xf0, 0xec, 0x0b, 0x10, 0x02, 0x14, 0x06, 0xef, 0xf7,
+ 0xea, 0x0b, 0x05, 0xfe, 0x1f, 0x06, 0x0e, 0x07, 0x00, 0xe1, 0x01, 0x01,
+ 0x07, 0x05, 0x09, 0xf7, 0xef, 0x15, 0xf7, 0x12, 0x05, 0x03, 0x04, 0x1d,
+ 0x04, 0x10, 0x12, 0x06, 0x05, 0x00, 0x08, 0x18, 0xd6, 0xf2, 0xfa, 0x07,
+ 0xf8, 0x12, 0x07, 0xfd, 0xdd, 0x00, 0x04, 0xfb, 0xf8, 0x09, 0xf3, 0x09,
+ 0xfb, 0xf0, 0xe8, 0x09, 0x27, 0xf5, 0xf8, 0x06, 0x01, 0x02, 0x0e, 0xf6,
+ 0x1f, 0xfa, 0x29, 0xf8, 0xd6, 0x01, 0x22, 0xf8, 0x1d, 0xe3, 0x1a, 0x39,
+ 0x0a, 0x0d, 0x19, 0xf5, 0x12, 0xfb, 0x1d, 0x2a, 0x03, 0xf6, 0x0c, 0xf2,
+ 0xfd, 0xec, 0x18, 0x13, 0xfe, 0x1a, 0xe8, 0xdd, 0x01, 0xf8, 0x30, 0x01,
+ 0xf8, 0xfe, 0xe4, 0xe7, 0xff, 0xeb, 0x23, 0xfa, 0x2c, 0xf0, 0xfc, 0xe7,
+ 0x0a, 0xf8, 0x18, 0x10, 0x23, 0x01, 0xfa, 0xe8, 0xf1, 0xfa, 0x1d, 0x0e,
+ 0x17, 0xe7, 0xe4, 0xf5, 0xf9, 0x0c, 0x17, 0x0c, 0x13, 0xe8, 0xe1, 0x17,
+ 0x19, 0x05, 0x0b, 0x0f, 0x23, 0xed, 0xff, 0xfe, 0xe0, 0x14, 0x16, 0x00,
+ 0x0d, 0x1c, 0x0b, 0xf5, 0xfb, 0x18, 0xee, 0xff, 0xff, 0xf3, 0x18, 0x0c,
+ 0x05, 0xfa, 0xf6, 0xfe, 0xfe, 0xf8, 0xf8, 0x09, 0xef, 0xf8, 0x0e, 0xf0,
+ 0x00, 0xf8, 0x0c, 0xf8, 0xf6, 0x07, 0x16, 0x11, 0xf8, 0xea, 0xff, 0xff,
+ 0x01, 0x20, 0x07, 0x08, 0xfd, 0x1c, 0xfc, 0x06, 0xed, 0x0d, 0x08, 0x15,
+ 0xf0, 0x25, 0x01, 0x1b, 0x00, 0x02, 0xfe, 0x01, 0x05, 0x01, 0xfd, 0xf1,
+ 0xe5, 0x0c, 0xe4, 0xe1, 0xf0, 0xfa, 0xee, 0x0e, 0x35, 0xee, 0x15, 0xef,
+ 0x0a, 0xf9, 0x01, 0xf5, 0x1f, 0x05, 0x1f, 0x0d, 0xe1, 0xf4, 0xff, 0xf5,
+ 0x23, 0x02, 0x18, 0x30, 0xfc, 0xf0, 0x0d, 0x04, 0x0d, 0x06, 0x29, 0x1d,
+ 0xf9, 0x08, 0x06, 0xe5, 0x13, 0xfd, 0x0d, 0x26, 0xef, 0x09, 0xdc, 0xf2,
+ 0x05, 0xdf, 0x0c, 0xf6, 0xf3, 0xd9, 0xf8, 0x08, 0xef, 0xeb, 0x0f, 0xf9,
+ 0x3a, 0x03, 0xff, 0xe0, 0xf7, 0xf0, 0x15, 0x12, 0x41, 0x0b, 0xf1, 0x04,
+ 0x04, 0xe2, 0x0e, 0x0b, 0x2c, 0x03, 0xea, 0x02, 0xfb, 0xe7, 0x08, 0xe9,
+ 0x22, 0xf3, 0xf2, 0x1c, 0xfa, 0xf3, 0x11, 0x04, 0x1f, 0xf5, 0x02, 0x0f,
+ 0x1a, 0x1f, 0x24, 0x0b, 0x06, 0x1f, 0xf3, 0x06, 0x00, 0x02, 0xe8, 0xf6,
+ 0xf4, 0xe8, 0x07, 0x2e, 0xfb, 0xf8, 0x10, 0x09, 0xf0, 0x0e, 0xff, 0xfe,
+ 0x1c, 0x14, 0x17, 0x06, 0xe2, 0xf1, 0xfa, 0x01, 0x11, 0x13, 0x12, 0x29,
+ 0xf1, 0x0f, 0x1f, 0xfa, 0xfd, 0xfd, 0x02, 0x07, 0x0e, 0xfb, 0x0e, 0x04,
+ 0x01, 0x01, 0xed, 0xfe, 0xde, 0xfd, 0x08, 0xef, 0xf6, 0x0a, 0xff, 0x0f,
+ 0xe7, 0xf2, 0x0f, 0x02, 0xea, 0x10, 0xf9, 0xec, 0xfd, 0x09, 0xea, 0x1f,
+ 0x46, 0xdd, 0xe2, 0xf7, 0x08, 0xf5, 0xf7, 0xe9, 0x33, 0xfb, 0x2f, 0xf6,
+ 0xb5, 0x1d, 0x15, 0xeb, 0x11, 0xf7, 0x2a, 0x2e, 0x08, 0x1d, 0xf4, 0xfb,
+ 0x15, 0xfa, 0x22, 0x34, 0xff, 0x06, 0xf6, 0xfd, 0xfa, 0xf9, 0x03, 0xf5,
+ 0xf4, 0xf4, 0xd5, 0xea, 0x01, 0x08, 0x22, 0xf1, 0xf2, 0x06, 0xd1, 0xe5,
+ 0x0c, 0xef, 0x12, 0x03, 0x08, 0x02, 0xf7, 0x05, 0x1b, 0x07, 0x39, 0x34,
+ 0x21, 0xe2, 0xe3, 0x0b, 0x0c, 0xf6, 0x29, 0xf7, 0x24, 0x0a, 0xfc, 0xff,
+ 0x1a, 0xfd, 0x05, 0xff, 0xff, 0x0e, 0x0a, 0x1a, 0x09, 0xfb, 0x15, 0x04,
+ 0x03, 0xf7, 0xfe, 0x00, 0xfc, 0xfb, 0x11, 0xfa, 0x1d, 0x0e, 0x06, 0xed,
+ 0xfc, 0x23, 0xd8, 0xf2, 0x04, 0xe5, 0x0f, 0x16, 0x29, 0xfe, 0xf5, 0xec,
+ 0xe2, 0x0e, 0xeb, 0x09, 0x1d, 0x11, 0x05, 0x11, 0xe4, 0x29, 0x12, 0x02,
+ 0x12, 0x19, 0x0e, 0x1a, 0xee, 0xf9, 0x05, 0x09, 0xf5, 0xfd, 0x05, 0x04,
+ 0xe4, 0xf1, 0x17, 0x01, 0xf2, 0xfe, 0x0b, 0xf4, 0x0d, 0x04, 0x06, 0xfe,
+ 0xff, 0xec, 0xe9, 0x00, 0xff, 0x03, 0x03, 0xfd, 0xf1, 0x15, 0xfc, 0xf3,
+ 0xff, 0xfe, 0x09, 0xee, 0x3c, 0x01, 0xec, 0x02, 0xf0, 0xf6, 0x20, 0xeb,
+ 0x16, 0x07, 0x32, 0xf3, 0xce, 0xf0, 0x02, 0xd4, 0x11, 0xe6, 0x28, 0x0e,
+ 0xe3, 0x21, 0xee, 0xce, 0x1e, 0xd9, 0x23, 0x26, 0x06, 0xfa, 0xf9, 0xf1,
+ 0x01, 0xe6, 0x0b, 0x07, 0xdc, 0x21, 0xbc, 0xe3, 0xef, 0xf8, 0x12, 0xfc,
+ 0xe6, 0xfe, 0xf5, 0xd4, 0x15, 0x0a, 0x00, 0x13, 0xfc, 0xec, 0xf3, 0xd6,
+ 0x1a, 0xe3, 0x21, 0x36, 0x2a, 0x03, 0xe9, 0xe3, 0xff, 0x00, 0x13, 0x1c,
+ 0x0e, 0x20, 0xe5, 0xf5, 0x24, 0x0b, 0x20, 0x14, 0x13, 0xf8, 0x04, 0x1b,
+ 0x2f, 0x0a, 0x15, 0x00, 0xf4, 0x1a, 0x11, 0x0d, 0x03, 0x18, 0x0f, 0x18,
+ 0x04, 0x1f, 0xfb, 0xf2, 0x1f, 0x15, 0x03, 0xfb, 0x0b, 0x17, 0xfb, 0x0b,
+ 0x1b, 0x1f, 0xf4, 0x07, 0xf9, 0xf9, 0xf8, 0xf4, 0x14, 0x0f, 0xf6, 0xfe,
+ 0xdd, 0x0b, 0xff, 0x01, 0x18, 0x04, 0x1b, 0x0a, 0xed, 0xe7, 0xf9, 0x16,
+ 0x02, 0x01, 0x00, 0xf7, 0xf1, 0x07, 0xf0, 0x06, 0xf8, 0x0b, 0x02, 0xf3,
+ 0xff, 0x20, 0xfd, 0x01, 0x04, 0xf5, 0xd9, 0xf4, 0xf4, 0xf2, 0xe8, 0xff,
+ 0x04, 0x00, 0xf0, 0xe2, 0xfe, 0xed, 0x1b, 0xef, 0x20, 0xfa, 0xfb, 0xf4,
+ 0x02, 0x18, 0x07, 0xfb, 0xef, 0xe4, 0x08, 0x0d, 0xe1, 0x0e, 0x25, 0xc6,
+ 0xfd, 0x0c, 0x1c, 0x0b, 0xf0, 0x01, 0x1c, 0xd4, 0x11, 0xf5, 0x1b, 0x09,
+ 0xfb, 0xda, 0x13, 0xe3, 0xf9, 0x10, 0x14, 0xf0, 0xf0, 0xfd, 0x1f, 0xcf,
+ 0xf4, 0xe4, 0xfb, 0x0e, 0x0a, 0x11, 0xed, 0xdc, 0xfc, 0xe6, 0xf7, 0xfc,
+ 0x13, 0xe1, 0x0b, 0xe4, 0x04, 0x11, 0xee, 0x21, 0x14, 0xe1, 0x07, 0xe4,
+ 0xfb, 0x08, 0x03, 0x2b, 0x27, 0xf6, 0x0d, 0x02, 0x1b, 0x09, 0x09, 0xf8,
+ 0x14, 0x19, 0x0f, 0x0b, 0x01, 0x10, 0x09, 0x12, 0x03, 0xf5, 0x18, 0xf3,
+ 0xfb, 0xf5, 0x02, 0x0e, 0x0d, 0x00, 0x07, 0xfc, 0x18, 0x25, 0x0b, 0xf0,
+ 0xf9, 0xe6, 0x08, 0x01, 0x24, 0x14, 0xfa, 0xed, 0xe5, 0x1f, 0x09, 0xfe,
+ 0x08, 0xee, 0x1a, 0x1a, 0x05, 0x00, 0xff, 0x0c, 0xfe, 0xf9, 0x11, 0x11,
+ 0xea, 0xfe, 0x08, 0xf9, 0xf0, 0xe4, 0x01, 0x0d, 0xf1, 0x00, 0x0b, 0xea,
+ 0x19, 0xea, 0xf3, 0xf8, 0x08, 0x12, 0x1c, 0x1f, 0xfb, 0xef, 0xf0, 0xf2,
+ 0x14, 0xe1, 0x03, 0xfa, 0xf9, 0xda, 0xe9, 0xfc, 0xf3, 0xff, 0x12, 0x04,
+ 0xf7, 0xfc, 0x17, 0x0f, 0xfc, 0x29, 0x03, 0xe5, 0xf2, 0xee, 0x1e, 0xfa,
+ 0x04, 0xed, 0x25, 0xf4, 0xe1, 0x15, 0x10, 0x1e, 0xef, 0x1c, 0x04, 0xde,
+ 0xe5, 0x08, 0x21, 0xfd, 0xfd, 0xea, 0x03, 0xca, 0xda, 0x26, 0x00, 0x0a,
+ 0xfd, 0x05, 0xf0, 0xd4, 0xe1, 0x1a, 0xe4, 0xf5, 0x07, 0xe7, 0xfa, 0xdf,
+ 0xd4, 0x03, 0xf0, 0x10, 0x15, 0x0c, 0xf4, 0xed, 0xe3, 0xfb, 0x0f, 0x1e,
+ 0x16, 0x09, 0x00, 0xec, 0xea, 0x13, 0x16, 0x0b, 0x01, 0xfb, 0xff, 0x00,
+ 0xfb, 0x07, 0x13, 0x08, 0xf4, 0xe4, 0x12, 0x00, 0xfb, 0xfa, 0xfc, 0x08,
+ 0xeb, 0x19, 0x02, 0x1c, 0xe8, 0x26, 0xf3, 0x10, 0x09, 0x0f, 0x19, 0x02,
+ 0xfb, 0xec, 0xf7, 0xe2, 0xfb, 0xfa, 0x11, 0xf3, 0x0b, 0x08, 0xff, 0xd9,
+ 0xf8, 0x12, 0x18, 0x06, 0x07, 0x22, 0xff, 0x19, 0xf5, 0x0b, 0x0a, 0x13,
+ 0xf2, 0xfa, 0x02, 0x21, 0xeb, 0x11, 0x17, 0x17, 0xec, 0xe1, 0x0e, 0xf7,
+ 0xe8, 0xd8, 0x0e, 0x01, 0xf1, 0xed, 0xed, 0xf0, 0x09, 0xf7, 0xe7, 0xfd,
+ 0xf0, 0xf9, 0xdb, 0xee, 0xdc, 0xfb, 0xf8, 0x0a, 0xf5, 0x0b, 0xd4, 0xd7,
+ 0x08, 0x06, 0x18, 0x06, 0x0c, 0x13, 0xfd, 0x09, 0x13, 0x26, 0x12, 0xf4,
+ 0xef, 0x00, 0xf5, 0x28, 0x18, 0xfe, 0x04, 0x0e, 0x21, 0x1a, 0x0a, 0x1e,
+ 0x09, 0xf0, 0x0d, 0x0f, 0xec, 0xf3, 0x17, 0x22, 0x00, 0xec, 0x0e, 0x01,
+ 0xe9, 0x08, 0x09, 0xf2, 0xf2, 0x08, 0xf0, 0x0b, 0xd9, 0x09, 0x14, 0xf5,
+ 0xf6, 0x04, 0x19, 0xf4, 0x11, 0xe9, 0xf2, 0x0d, 0x20, 0x17, 0x0a, 0x05,
+ 0x0c, 0x04, 0x01, 0xfd, 0xf4, 0xfb, 0x1b, 0x0c, 0xf2, 0x0b, 0xff, 0xfe,
+ 0x01, 0xd8, 0xfa, 0x0e, 0xf5, 0x14, 0xf9, 0x01, 0x04, 0xf8, 0xfa, 0x02,
+ 0xe8, 0xf9, 0xf9, 0xea, 0xf1, 0x07, 0xff, 0x1e, 0x01, 0x0b, 0xf7, 0x0a,
+ 0xf7, 0x0c, 0xfd, 0xec, 0xf3, 0x05, 0xf8, 0xda, 0x0b, 0x15, 0xf6, 0xee,
+ 0xf9, 0x10, 0xfa, 0xfe, 0x08, 0xf0, 0xe6, 0xec, 0x05, 0xff, 0x15, 0x19,
+ 0x1f, 0x11, 0xfc, 0x09, 0x08, 0x01, 0x06, 0xfe, 0x04, 0x08, 0xfb, 0xfb,
+ 0x08, 0xf4, 0xf6, 0x28, 0x10, 0xf9, 0x28, 0x0b, 0xf8, 0x0d, 0x01, 0x00,
+ 0xff, 0x02, 0x05, 0x08, 0xea, 0xe9, 0xf4, 0xf6, 0x01, 0xea, 0xdf, 0x1f,
+ 0xfe, 0x0a, 0xf9, 0xf7, 0x0c, 0x1b, 0x06, 0xed, 0xf6, 0xf2, 0x03, 0x03,
+ 0xfd, 0x04, 0xf5, 0x10, 0x0a, 0x0b, 0xf4, 0xf8, 0xf1, 0xe7, 0x05, 0xfe,
+ 0xe7, 0x0b, 0xf1, 0xec, 0xf4, 0xec, 0x06, 0xee, 0xde, 0x05, 0x1b, 0xfe,
+ 0x13, 0xf3, 0xd9, 0xea, 0x04, 0x10, 0x05, 0xed, 0x15, 0x02, 0x0b, 0x10,
+ 0xfa, 0x02, 0x05, 0x0b, 0x02, 0x07, 0xfc, 0xf5, 0x15, 0x14, 0x05, 0xf7,
+ 0x0c, 0xfe, 0xf6, 0xf4, 0xfa, 0x06, 0xfc, 0x13, 0xdc, 0xe4, 0x09, 0xfa,
+ 0x02, 0x23, 0xec, 0x06, 0x11, 0x13, 0xf8, 0xfa, 0x27, 0x28, 0x0b, 0x23,
+ 0xec, 0xf1, 0x09, 0x17, 0x0f, 0x13, 0xff, 0xf2, 0xfc, 0x0a, 0xf5, 0x0d,
+ 0x03, 0x26, 0x01, 0x0f, 0xfe, 0xf1, 0xfb, 0xe6, 0xf0, 0x02, 0xf2, 0xff,
+ 0x02, 0x11, 0xff, 0xfd, 0x1c, 0x02, 0x0b, 0xf6, 0x14, 0x0c, 0x0b, 0x21,
+ 0x28, 0xf0, 0x11, 0x05, 0x06, 0xed, 0xf9, 0x0a, 0xf2, 0xef, 0xf8, 0xf1,
+ 0xfe, 0x0d, 0xf9, 0xf7, 0xea, 0x00, 0x08, 0xdb, 0x02, 0x0f, 0xfe, 0x04,
+ 0xef, 0x20, 0x16, 0x01, 0xe8, 0xed, 0xe4, 0x22, 0xf6, 0x19, 0x00, 0x04,
+ 0x01, 0x13, 0xeb, 0x0d, 0xec, 0x01, 0x08, 0x05, 0x0c, 0x0e, 0xfe, 0x02,
+ 0x12, 0xf7, 0x27, 0xf9, 0xfd, 0x18, 0xfe, 0x24, 0xf7, 0x13, 0xed, 0x1e,
+ 0x09, 0xff, 0xd8, 0xf4, 0x12, 0xf8, 0x04, 0x0c, 0x1c, 0x11, 0xfd, 0x17,
+ 0x1d, 0x01, 0x13, 0xee, 0x11, 0xf3, 0xf8, 0x06, 0xf6, 0x16, 0xfe, 0x15,
+ 0x16, 0xdc, 0x1f, 0x00, 0x25, 0xee, 0xff, 0xf7, 0xf6, 0x02, 0xdd, 0x15,
+ 0xf1, 0x14, 0x08, 0xe8, 0xe5, 0x21, 0xea, 0xf0, 0x1a, 0x07, 0xea, 0x08,
+ 0xea, 0xe4, 0x1e, 0x00, 0x13, 0x17, 0xec, 0x11, 0xd6, 0x11, 0x18, 0x17,
+ 0x04, 0x15, 0x03, 0x3a, 0xd6, 0x02, 0x07, 0x04, 0xe6, 0xe5, 0xfe, 0x0e,
+ 0xff, 0xed, 0xfc, 0xfb, 0xff, 0x1c, 0x06, 0x0a, 0xfb, 0xf9, 0xea, 0x1a,
+ 0x21, 0xf5, 0x04, 0x06, 0x0a, 0xe3, 0x16, 0xea, 0x04, 0xe2, 0xf9, 0xf9,
+ 0xe6, 0xfb, 0x0f, 0xfc, 0x06, 0xfb, 0x10, 0x07, 0x07, 0x13, 0x07, 0xfc,
+ 0x16, 0xef, 0x07, 0xdc, 0x12, 0x1f, 0x08, 0xf4, 0xe9, 0x14, 0x06, 0xf7,
+ 0xf1, 0x0c, 0x01, 0x0c, 0xe6, 0x04, 0xf3, 0xf2, 0xe5, 0xf3, 0xef, 0x1d,
+ 0xf6, 0x20, 0x07, 0xfe, 0xf4, 0x05, 0xee, 0x10, 0xfd, 0x0e, 0x0b, 0x02,
+ 0x0d, 0xd8, 0x07, 0xfb, 0x26, 0x0a, 0x1c, 0x21, 0x06, 0x1f, 0xf4, 0x06,
+ 0x37, 0x18, 0xfa, 0x16, 0x1e, 0x24, 0xfb, 0xf0, 0x12, 0xf9, 0x02, 0x09,
+ 0x17, 0x16, 0xf3, 0xf9, 0x17, 0xf2, 0x02, 0x0a, 0x2d, 0xe7, 0xe3, 0x25,
+ 0xf0, 0xf9, 0x0f, 0xdd, 0x15, 0xe6, 0x04, 0xfc, 0xf1, 0x17, 0x0a, 0xea,
+ 0x24, 0x07, 0xf1, 0x11, 0x13, 0x29, 0xf4, 0xc5, 0xfb, 0x07, 0xef, 0x13,
+ 0x0b, 0xe1, 0xf1, 0xeb, 0xf8, 0x1b, 0x09, 0x08, 0x1f, 0x15, 0xf2, 0x05,
+ 0x02, 0xdd, 0x09, 0x0f, 0x16, 0x10, 0x01, 0x30, 0xf2, 0xe0, 0x27, 0xfe,
+ 0xf1, 0x0e, 0x0e, 0x07, 0xe6, 0x07, 0x0b, 0x18, 0xfe, 0x0f, 0x01, 0x07,
+ 0xf4, 0x07, 0x10, 0xe7, 0xfb, 0xf3, 0xf7, 0x0b, 0xf9, 0x15, 0x18, 0x25,
+ 0x0c, 0x14, 0x02, 0x08, 0x0a, 0x0f, 0x10, 0xec, 0xee, 0x1a, 0x03, 0x14,
+ 0x0f, 0xfa, 0x25, 0xff, 0x18, 0x0d, 0x0b, 0xea, 0x1f, 0x28, 0x10, 0x0c,
+ 0xe7, 0xee, 0xf7, 0xfa, 0x03, 0x15, 0x0c, 0x1d, 0x01, 0x00, 0x12, 0xee,
+ 0x01, 0xf1, 0xf8, 0x0b, 0xf3, 0xfd, 0x04, 0xf8, 0x02, 0x1e, 0x0e, 0xf3,
+ 0x02, 0x10, 0xfd, 0x07, 0x0b, 0x09, 0x03, 0x10, 0x3e, 0x08, 0x0e, 0x0c,
+ 0xf4, 0xe7, 0xfd, 0x1c, 0x27, 0x1a, 0xed, 0xe1, 0x08, 0xdc, 0xd9, 0xf1,
+ 0x1e, 0x07, 0x12, 0xf1, 0x10, 0xfb, 0xc8, 0x08, 0x0f, 0x03, 0x1d, 0xdc,
+ 0x23, 0x04, 0xf9, 0x0a, 0xff, 0x08, 0x0e, 0xc9, 0x39, 0x0a, 0x01, 0x07,
+ 0xec, 0xe0, 0x05, 0xe8, 0x14, 0xd8, 0xe1, 0xfa, 0xd6, 0xf8, 0xed, 0xdb,
+ 0xff, 0x1d, 0xf5, 0x17, 0x0f, 0x1c, 0xdc, 0xed, 0xff, 0xff, 0x04, 0x13,
+ 0xf5, 0xe7, 0xd2, 0x12, 0xdb, 0xe1, 0x13, 0x11, 0x23, 0x0e, 0xf9, 0x31,
+ 0xdc, 0xef, 0x07, 0x0a, 0x20, 0xf2, 0xf9, 0x13, 0xff, 0x1c, 0x2a, 0xdf,
+ 0xdb, 0xe7, 0x11, 0xf2, 0xfd, 0xfb, 0x28, 0x00, 0x15, 0x03, 0x02, 0x20,
+ 0x07, 0xf7, 0x19, 0x13, 0x13, 0xf6, 0x09, 0xfe, 0xfd, 0x20, 0x14, 0xf5,
+ 0xf5, 0xfc, 0x14, 0x0e, 0x17, 0xfe, 0x15, 0x04, 0xf9, 0xf6, 0x1d, 0xf6,
+ 0x1b, 0xe4, 0xee, 0xfd, 0x00, 0xe9, 0xee, 0xce, 0x0f, 0x20, 0x05, 0x02,
+ 0x0d, 0x06, 0x05, 0xf8, 0xef, 0xdf, 0x16, 0x17, 0xe6, 0xf1, 0x10, 0xf3,
+ 0x06, 0x04, 0xdb, 0xfb, 0xe7, 0xf8, 0x02, 0x11, 0xff, 0x0d, 0x0a, 0xfa,
+ 0x27, 0x0a, 0xfc, 0xe8, 0x11, 0x17, 0xf0, 0x0d, 0x0d, 0xee, 0xdf, 0xdd,
+ 0xf1, 0x15, 0xd6, 0xf7, 0x00, 0xef, 0x2e, 0xe6, 0x24, 0xfd, 0xd5, 0x04,
+ 0xf0, 0x08, 0x08, 0xed, 0x22, 0x07, 0xe1, 0x09, 0xd0, 0x0b, 0x18, 0xe6,
+ 0x3f, 0x0a, 0xe5, 0xe2, 0xf9, 0x08, 0x02, 0xd6, 0x13, 0x15, 0xbd, 0x00,
+ 0x0e, 0xf8, 0xe2, 0xca, 0xec, 0x0e, 0xe6, 0xef, 0x15, 0x11, 0xcb, 0xdf,
+ 0xf9, 0x03, 0x22, 0x10, 0xfb, 0xf9, 0xe5, 0x08, 0xe1, 0x11, 0x10, 0xfc,
+ 0xfa, 0x00, 0xf8, 0x30, 0xe5, 0x08, 0x14, 0xe8, 0x12, 0xe2, 0x04, 0x19,
+ 0x0b, 0xfa, 0x33, 0xf3, 0xec, 0xfe, 0xf8, 0x25, 0xf8, 0x21, 0x28, 0xef,
+ 0x00, 0xde, 0xff, 0x2b, 0x03, 0xfc, 0x10, 0x0c, 0xcf, 0xfd, 0x19, 0x0a,
+ 0x0c, 0xf2, 0xf7, 0x0c, 0xfd, 0x02, 0x1c, 0xdf, 0x26, 0x0d, 0xf0, 0x0b,
+ 0xce, 0x15, 0xfb, 0xec, 0x27, 0xf6, 0xf9, 0xe5, 0xe2, 0xfb, 0xfd, 0xd8,
+ 0x28, 0xec, 0xe9, 0xf2, 0xca, 0x09, 0x02, 0x06, 0x0c, 0xfa, 0x05, 0x01,
+ 0xd5, 0x0a, 0x02, 0xfb, 0x04, 0x17, 0xdd, 0xfe, 0xeb, 0xf1, 0x09, 0x10,
+ 0x12, 0xff, 0x00, 0xe0, 0x26, 0xf7, 0xed, 0xf4, 0x00, 0xf2, 0xfa, 0x07,
+ 0x02, 0xf5, 0x06, 0xe8, 0x03, 0xfd, 0xdc, 0xf2, 0xc2, 0xff, 0x0b, 0xd6,
+ 0x25, 0x04, 0xe9, 0xf0, 0xd9, 0x08, 0x09, 0xc5, 0x23, 0x12, 0xf6, 0x13,
+ 0x11, 0xf3, 0x18, 0xf0, 0x34, 0xfe, 0xfe, 0xed, 0xea, 0x02, 0x17, 0xdc,
+ 0x1b, 0x1b, 0xea, 0xfe, 0xea, 0xfe, 0xf2, 0xc4, 0xfd, 0x04, 0xe9, 0x0d,
+ 0x0d, 0x09, 0xca, 0xd4, 0xe1, 0x04, 0x1e, 0xff, 0x0f, 0xef, 0xd6, 0x0f,
+ 0xd5, 0xf8, 0x26, 0xd6, 0x33, 0xe8, 0xf5, 0x3b, 0xf1, 0xe8, 0x39, 0xe8,
+ 0x08, 0xe5, 0x01, 0x02, 0x04, 0xf6, 0x19, 0x0a, 0xd0, 0xeb, 0x0b, 0x15,
+ 0xf7, 0x0e, 0x23, 0xf6, 0xf4, 0xd8, 0xf4, 0x17, 0x23, 0x25, 0x14, 0x01,
+ 0xd7, 0xfd, 0xf9, 0x1f, 0x1b, 0x11, 0x0a, 0x18, 0xf5, 0xf5, 0x0f, 0xe0,
+ 0x2e, 0x01, 0xe5, 0xdb, 0xe2, 0xf2, 0x14, 0xfa, 0x2a, 0x00, 0xe2, 0xea,
+ 0xfd, 0x0e, 0xfc, 0xc1, 0x35, 0x08, 0xf6, 0xf9, 0xec, 0x00, 0x06, 0x00,
+ 0x0b, 0xf6, 0x01, 0xfe, 0xea, 0x0b, 0x08, 0x05, 0xe4, 0xea, 0xd7, 0xfd,
+ 0xee, 0xf3, 0x0c, 0x0c, 0x0d, 0x02, 0xfd, 0xee, 0x17, 0x10, 0x13, 0xfd,
+ 0x07, 0x03, 0xf8, 0x0c, 0xd4, 0xed, 0xfe, 0x07, 0xf4, 0xee, 0xf4, 0x03,
+ 0xc2, 0x18, 0x2c, 0xd1, 0x33, 0xd8, 0xdb, 0xfa, 0xed, 0x10, 0x1c, 0xe3,
+ 0x37, 0x0a, 0xea, 0xfe, 0xf6, 0xef, 0x20, 0xed, 0x32, 0xf7, 0xf5, 0xf3,
+ 0xca, 0xfd, 0x0a, 0xcf, 0x0d, 0x10, 0xde, 0x07, 0x18, 0x10, 0xf0, 0xd6,
+ 0x0c, 0x04, 0xeb, 0x1a, 0xf9, 0x08, 0xc4, 0xcb, 0xe4, 0x0b, 0x19, 0xfc,
+ 0x29, 0xf6, 0xec, 0x07, 0xf3, 0xed, 0x2b, 0xe9, 0xfa, 0x02, 0xec, 0x2b,
+ 0xf0, 0xf2, 0x2d, 0xe8, 0xed, 0x00, 0x12, 0x13, 0xed, 0x1a, 0x3d, 0xf0,
+ 0x05, 0x04, 0xfc, 0x13, 0x10, 0x01, 0x40, 0xf2, 0x06, 0x02, 0xf9, 0x22,
+ 0x24, 0xff, 0x18, 0x00, 0xeb, 0xe8, 0x14, 0xf9, 0x25, 0xe0, 0xff, 0x03,
+ 0xe5, 0xfd, 0x08, 0xea, 0x2e, 0x0b, 0x05, 0xe7, 0xde, 0xe4, 0xf5, 0xea,
+ 0x3a, 0xf4, 0xf4, 0xe7, 0xed, 0xec, 0xf8, 0xee, 0x30, 0x0a, 0xdb, 0x05,
+ 0xf7, 0x16, 0xff, 0xf7, 0xfa, 0x1f, 0xef, 0xe4, 0xce, 0xf8, 0x13, 0x04,
+ 0xf9, 0x01, 0xe1, 0x03, 0xf9, 0xf9, 0x08, 0x04, 0xfa, 0xe4, 0xe7, 0xf7,
+ 0x28, 0xfd, 0xfd, 0x00, 0xfc, 0xfb, 0xef, 0x0a, 0xec, 0x0c, 0x0a, 0xd2,
+ 0x05, 0xfb, 0xcd, 0xfb, 0x9d, 0xea, 0x1c, 0xe5, 0x25, 0xe8, 0xea, 0x0b,
+ 0xf0, 0xf3, 0x0d, 0xab, 0x49, 0x0e, 0xeb, 0x00, 0xe2, 0x03, 0x29, 0xe0,
+ 0x3d, 0x06, 0xf7, 0xf8, 0xcf, 0x0c, 0x1a, 0xd6, 0x1f, 0xef, 0xfd, 0xff,
+ 0xef, 0x0c, 0xdb, 0xe0, 0x20, 0x06, 0xdf, 0x1a, 0xe7, 0xfc, 0xb2, 0xd1,
+ 0xdf, 0x13, 0x07, 0x1f, 0x0c, 0xf7, 0xde, 0x0a, 0xdb, 0xdf, 0x1a, 0xf5,
+ 0x29, 0x0d, 0xeb, 0x2c, 0xcf, 0x0e, 0x26, 0xfe, 0xef, 0x04, 0xf5, 0x14,
+ 0x09, 0x13, 0x34, 0xff, 0xfe, 0x0e, 0x06, 0x0e, 0x10, 0xf9, 0x2a, 0x0b,
+ 0xe6, 0xfe, 0xf1, 0x1a, 0x36, 0x29, 0x29, 0x05, 0x05, 0xd8, 0x14, 0x12,
+ 0x26, 0x0b, 0x18, 0xff, 0xd7, 0xdf, 0x0f, 0xed, 0x31, 0xf7, 0xfc, 0xec,
+ 0x0b, 0xef, 0x0c, 0xd2, 0x30, 0xf9, 0x04, 0xfe, 0xef, 0xe4, 0xfb, 0xd1,
+ 0x32, 0xe5, 0xee, 0xf0, 0x0c, 0xe6, 0x13, 0xed, 0x1e, 0x0b, 0xe4, 0xe0,
+ 0xfa, 0xf4, 0x14, 0xf4, 0x18, 0xf7, 0xd9, 0xf6, 0xed, 0xea, 0xfc, 0x06,
+ 0xfc, 0xf5, 0xed, 0xeb, 0x05, 0x03, 0x1b, 0x0b, 0xff, 0x0b, 0xef, 0x01,
+ 0xf1, 0x16, 0x05, 0x00, 0xee, 0x0a, 0xdb, 0x10, 0xb4, 0x14, 0x0f, 0xe1,
+ 0x1c, 0xfd, 0xf0, 0xf8, 0xc3, 0x11, 0x17, 0xba, 0x47, 0x15, 0xe6, 0x01,
+ 0xea, 0xf1, 0x0c, 0x08, 0x4a, 0x15, 0xf0, 0xf7, 0xea, 0x00, 0xf5, 0xd4,
+ 0xf1, 0xff, 0xe0, 0x0c, 0xf4, 0x17, 0xd8, 0xea, 0x03, 0xff, 0xd5, 0x18,
+ 0xfb, 0x07, 0xc7, 0xc9, 0xdd, 0xf3, 0x15, 0x0d, 0x22, 0xea, 0xdb, 0x0a,
+ 0xd6, 0x09, 0x1d, 0xe5, 0x2d, 0x04, 0xfc, 0x35, 0xc6, 0x0e, 0x33, 0xf1,
+ 0xd7, 0xea, 0x01, 0x1b, 0x0e, 0x01, 0x2a, 0xff, 0xef, 0xf1, 0xf7, 0x0f,
+ 0xff, 0x00, 0x3b, 0xe8, 0x0a, 0xff, 0xf4, 0x0d, 0x1f, 0x04, 0x17, 0xf7,
+ 0xdf, 0xec, 0x12, 0x26, 0x36, 0x07, 0x0c, 0x06, 0xe7, 0xd6, 0x13, 0xe3,
+ 0x30, 0x09, 0x00, 0xf5, 0xe0, 0xf3, 0x11, 0xe2, 0x38, 0x0d, 0xf6, 0x05,
+ 0xec, 0x05, 0x00, 0xe5, 0x24, 0xef, 0xfe, 0xf8, 0x00, 0xd8, 0x18, 0xf1,
+ 0x26, 0x0b, 0xf2, 0xfc, 0xe0, 0xe4, 0x06, 0x0b, 0x1a, 0x05, 0xc6, 0xf6,
+ 0xe8, 0xde, 0xfe, 0x0c, 0x03, 0x09, 0xfe, 0xe2, 0x18, 0x1b, 0xfb, 0xf7,
+ 0x06, 0xf1, 0xfe, 0xf6, 0xef, 0x1b, 0x07, 0x0d, 0x01, 0x0a, 0xed, 0xf0,
+ 0xad, 0x1a, 0x17, 0xd6, 0x37, 0xfd, 0xd8, 0xec, 0xca, 0xf1, 0x15, 0xc4,
+ 0x33, 0xf1, 0xed, 0xf0, 0xe9, 0x15, 0x0d, 0xf2, 0x36, 0xde, 0xfd, 0x0e,
+ 0xfb, 0x10, 0x0f, 0xf6, 0xf9, 0x0c, 0xea, 0xf0, 0xe5, 0x0b, 0xee, 0xc1,
+ 0x10, 0xf4, 0xe8, 0x1f, 0xee, 0x00, 0xd0, 0xe4, 0xe7, 0x13, 0x07, 0x27,
+ 0x12, 0xea, 0xea, 0x0f, 0xea, 0xf4, 0x14, 0xee, 0xfe, 0x09, 0xfb, 0x31,
+ 0xdb, 0x1b, 0x1c, 0xe7, 0xef, 0xf5, 0xf7, 0x1a, 0x06, 0x01, 0x2c, 0xed,
+ 0xfb, 0x04, 0xfa, 0x07, 0x19, 0xec, 0x2b, 0x0d, 0xfc, 0xd8, 0xfc, 0x0f,
+ 0x1f, 0xfc, 0x2d, 0xf3, 0xc9, 0xda, 0x0a, 0xfe, 0x29, 0x00, 0xfa, 0x09,
+ 0xe8, 0xf6, 0x21, 0xf3, 0x4a, 0x1a, 0xf8, 0x00, 0xe7, 0xf0, 0x21, 0x01,
+ 0x22, 0xf3, 0x00, 0xe9, 0x06, 0xe3, 0x15, 0xd7, 0x3d, 0x0c, 0x07, 0xf1,
+ 0xf3, 0xec, 0x17, 0xdf, 0x29, 0x1b, 0xfd, 0xfe, 0xeb, 0xed, 0x17, 0xf6,
+ 0x23, 0x0a, 0xea, 0xee, 0xf9, 0xf3, 0x0f, 0x0c, 0xf8, 0xf5, 0xed, 0xe8,
+ 0x1c, 0x14, 0x07, 0x17, 0x0b, 0x0d, 0xed, 0xf7, 0xed, 0x10, 0x07, 0xd5,
+ 0xf2, 0x09, 0xd6, 0xf7, 0xb5, 0xf6, 0x19, 0xc9, 0x25, 0x15, 0xe8, 0xf5,
+ 0xc4, 0xf9, 0x2a, 0xb0, 0x39, 0x0e, 0x02, 0x11, 0xf0, 0xf7, 0x1d, 0xeb,
+ 0x39, 0x10, 0x02, 0x15, 0xe0, 0x08, 0x01, 0xee, 0x1c, 0x1e, 0x08, 0x04,
+ 0xf2, 0x02, 0xe8, 0xda, 0xfa, 0xfb, 0xe0, 0xfe, 0x05, 0x02, 0xd3, 0xca,
+ 0xf4, 0xec, 0x10, 0x16, 0x05, 0x0d, 0xd7, 0x09, 0xdc, 0xf6, 0x1e, 0xf8,
+ 0x10, 0xed, 0xf7, 0x27, 0xf5, 0x08, 0x28, 0xee, 0xec, 0xe0, 0xf8, 0x17,
+ 0xfb, 0x23, 0x2e, 0xf1, 0xfa, 0xf5, 0xfc, 0x1a, 0x10, 0xf7, 0x32, 0xfb,
+ 0xfb, 0xe8, 0xf1, 0x03, 0x24, 0xeb, 0x25, 0xf9, 0xca, 0xf1, 0xfe, 0x01,
+ 0x2e, 0x07, 0x18, 0x03, 0xe5, 0xea, 0x10, 0xfa, 0x3b, 0x07, 0x0f, 0x11,
+ 0x04, 0xf7, 0x1d, 0xf1, 0x24, 0xd9, 0x08, 0xef, 0x02, 0xdd, 0x07, 0xc8,
+ 0x2c, 0x0d, 0x06, 0xec, 0x17, 0xda, 0x21, 0xdf, 0x34, 0xd9, 0xfb, 0xf2,
+ 0xf4, 0xec, 0x0e, 0x0a, 0x0f, 0x0f, 0xdb, 0xf0, 0xfb, 0xe6, 0x0f, 0x00,
+ 0x04, 0xf9, 0x01, 0x05, 0x05, 0xfe, 0x08, 0xf3, 0x0e, 0xf2, 0xfb, 0x01,
+ 0xfd, 0x18, 0x1d, 0xf6, 0xee, 0x06, 0xcf, 0xfc, 0xae, 0x27, 0x21, 0xd2,
+ 0x33, 0x03, 0xe0, 0xe0, 0xc9, 0xfb, 0x3a, 0xbd, 0x4d, 0x04, 0xe8, 0xf5,
+ 0xe6, 0xeb, 0x19, 0xf2, 0x4b, 0x1d, 0xfc, 0xf7, 0xd9, 0xff, 0xfe, 0xea,
+ 0x0f, 0x04, 0x0e, 0x00, 0xed, 0x19, 0xe9, 0xe9, 0xff, 0x11, 0xef, 0x14,
+ 0x01, 0x17, 0xbc, 0xb5, 0xef, 0x0c, 0x22, 0x27, 0x0f, 0x01, 0xd4, 0x03,
+ 0xce, 0x01, 0x25, 0xff, 0xf9, 0xf0, 0x0a, 0x1c, 0xe5, 0x0f, 0x1c, 0xee,
+ 0xf4, 0xf1, 0xf4, 0x0c, 0x00, 0x08, 0x1c, 0xf4, 0xd5, 0xf1, 0xfc, 0x1f,
+ 0x11, 0x00, 0x18, 0x03, 0xf7, 0xe4, 0xff, 0x07, 0x09, 0x1a, 0x18, 0xff,
+ 0xea, 0xec, 0xfd, 0x13, 0x2b, 0xf8, 0x0c, 0xfa, 0xdf, 0xf6, 0x11, 0xda,
+ 0x2a, 0xdc, 0xfc, 0xff, 0xff, 0xec, 0x12, 0xe1, 0x37, 0xfd, 0xeb, 0xfe,
+ 0xea, 0xd1, 0x12, 0xfa, 0x28, 0x1a, 0x0d, 0xf0, 0xf7, 0xe0, 0x0c, 0xeb,
+ 0x35, 0x14, 0xeb, 0x00, 0xeb, 0xe7, 0x1b, 0xfc, 0x09, 0x00, 0xf2, 0x04,
+ 0xf9, 0xe5, 0x1a, 0x0e, 0x08, 0x12, 0xf8, 0xfe, 0x09, 0x0f, 0x0d, 0xea,
+ 0x03, 0xe1, 0xfe, 0xf2, 0xec, 0x0d, 0x02, 0xdb, 0x04, 0x1d, 0xd4, 0x01,
+ 0xca, 0x13, 0x29, 0xca, 0x28, 0x04, 0xe2, 0xf1, 0xdb, 0x0b, 0x2c, 0xcd,
+ 0x44, 0x00, 0xe7, 0xf4, 0xd0, 0x12, 0x15, 0xff, 0x42, 0x11, 0x05, 0xfd,
+ 0xd9, 0x11, 0x1c, 0xf4, 0x15, 0xec, 0xf2, 0x24, 0xd6, 0x1d, 0xec, 0xda,
+ 0xf5, 0xec, 0xe5, 0x22, 0xf2, 0x0b, 0xbd, 0xd0, 0xeb, 0x05, 0x07, 0x1b,
+ 0x01, 0xed, 0xf5, 0x02, 0xcf, 0x08, 0x15, 0xfd, 0x1c, 0xe5, 0x04, 0x19,
+ 0xc7, 0x25, 0x22, 0xf3, 0xde, 0xfb, 0xfb, 0x20, 0xf6, 0xeb, 0x25, 0xfe,
+ 0xf5, 0x08, 0xf5, 0x17, 0x0e, 0x04, 0x1c, 0xf9, 0xee, 0xec, 0xe1, 0x06,
+ 0x12, 0xff, 0x2a, 0x13, 0xed, 0xfe, 0x05, 0x18, 0x25, 0x20, 0x09, 0x13,
+ 0xea, 0xd7, 0x05, 0x06, 0x33, 0x25, 0xff, 0x0a, 0xf0, 0xea, 0x17, 0xe1,
+ 0x30, 0xfa, 0x0d, 0x0a, 0x04, 0x00, 0x0e, 0xe9, 0x16, 0x20, 0x0d, 0x02,
+ 0xe8, 0xed, 0x07, 0xe8, 0x3c, 0xf1, 0xd9, 0xfa, 0xe1, 0xed, 0x18, 0xfc,
+ 0xf0, 0x09, 0xe3, 0x05, 0xfe, 0xd1, 0x0b, 0x0e, 0xf5, 0x25, 0xfd, 0xfb,
+ 0x30, 0x1e, 0x08, 0xfc, 0x0c, 0x21, 0xea, 0xfc, 0xe5, 0x1e, 0x16, 0xf5,
+ 0xf4, 0xfc, 0xf0, 0xea, 0xc4, 0x21, 0x27, 0xe9, 0x2b, 0xdb, 0xdb, 0xec,
+ 0xe5, 0xfe, 0x37, 0xe2, 0x46, 0x25, 0xfa, 0xec, 0xe4, 0xf3, 0x19, 0xf2,
+ 0x4c, 0x06, 0x00, 0xfb, 0xeb, 0x10, 0x10, 0xf7, 0x2a, 0xf8, 0xe9, 0x18,
+ 0xee, 0x21, 0xe8, 0xd5, 0xf4, 0x0a, 0xed, 0x24, 0xfe, 0xf9, 0xb2, 0xbc,
+ 0xf3, 0x1d, 0x00, 0x2f, 0x07, 0x08, 0xe1, 0xf1, 0xed, 0x27, 0x27, 0xfe,
+ 0x22, 0xfd, 0x02, 0x20, 0xd8, 0x05, 0x25, 0xec, 0xf1, 0xff, 0x0a, 0x0f,
+ 0xe6, 0xfe, 0x46, 0xfd, 0xe1, 0xca, 0xf7, 0x22, 0x03, 0x08, 0x21, 0xf5,
+ 0x0f, 0xf7, 0xfb, 0x0c, 0xfb, 0x14, 0x2d, 0x03, 0xe5, 0xe4, 0x09, 0x0b,
+ 0x1a, 0xe6, 0x01, 0x28, 0xe9, 0xd6, 0x0b, 0xf7, 0x2c, 0xfb, 0x11, 0xee,
+ 0x0b, 0xed, 0x17, 0xf0, 0x3c, 0xf5, 0x08, 0xfa, 0xf8, 0xcd, 0x17, 0xfa,
+ 0x39, 0xea, 0x11, 0xf5, 0xed, 0xee, 0x0a, 0xec, 0x41, 0xd6, 0xe7, 0xf9,
+ 0xfa, 0xc8, 0x15, 0xf7, 0x08, 0x0e, 0xe3, 0x08, 0xe8, 0xec, 0xfd, 0xfe,
+ 0xf1, 0x00, 0xe9, 0xf4, 0x09, 0x26, 0x02, 0x16, 0xf0, 0x01, 0xef, 0x01,
+ 0xff, 0x03, 0x22, 0xdb, 0xfc, 0xf5, 0xde, 0xe5, 0xc4, 0x01, 0x28, 0xd4,
+ 0x38, 0x08, 0xd0, 0xec, 0xd5, 0x04, 0x2f, 0xce, 0x4e, 0xeb, 0xf9, 0xe7,
+ 0xdf, 0xf0, 0x1b, 0xf5, 0x42, 0xf1, 0xf6, 0x09, 0xd5, 0x0a, 0x0d, 0x08,
+ 0x04, 0x05, 0xe2, 0x0e, 0xd7, 0x19, 0xdb, 0xda, 0xe1, 0x25, 0xde, 0x15,
+ 0x0e, 0x14, 0xbd, 0xb0, 0xe3, 0xe5, 0x24, 0x1e, 0xf8, 0x0d, 0xd8, 0xf7,
+ 0xf2, 0xff, 0x18, 0xf5, 0x07, 0xf0, 0x02, 0x25, 0xd5, 0x1e, 0x2e, 0xdf,
+ 0xe7, 0x05, 0xef, 0x11, 0xe8, 0xe7, 0x47, 0xf4, 0xe1, 0xde, 0x09, 0x36,
+ 0x1a, 0x11, 0x11, 0xf5, 0x12, 0xe5, 0xe7, 0x18, 0x01, 0x17, 0x2a, 0x03,
+ 0x05, 0xea, 0x09, 0x0b, 0x12, 0x04, 0x17, 0xf0, 0xee, 0xd7, 0x11, 0xed,
+ 0x3c, 0x17, 0x16, 0xff, 0x02, 0xdc, 0x21, 0xf3, 0x2e, 0xe5, 0x13, 0xef,
+ 0xec, 0xe2, 0x10, 0xd0, 0x2e, 0xee, 0xff, 0x01, 0xe0, 0xe5, 0x0b, 0xda,
+ 0x1f, 0xf8, 0xf6, 0xfb, 0x07, 0xdb, 0x05, 0xf6, 0x0c, 0xf3, 0xf0, 0x10,
+ 0xf9, 0xf5, 0xf2, 0x0d, 0x10, 0xf7, 0xf6, 0xff, 0x2b, 0x0d, 0x06, 0x1e,
+ 0xf3, 0x0c, 0xe9, 0x01, 0xf2, 0x23, 0xfe, 0xe9, 0xdd, 0x12, 0xdd, 0xf7,
+ 0xbb, 0x22, 0x1b, 0xd4, 0x38, 0x29, 0xd4, 0xcf, 0xf5, 0xf9, 0x27, 0xdd,
+ 0x47, 0x00, 0xf2, 0xe5, 0x09, 0xfc, 0x0e, 0xf9, 0x34, 0x0a, 0x02, 0xfd,
+ 0xec, 0x25, 0x1d, 0x03, 0x15, 0x09, 0xf1, 0x1b, 0xd0, 0x17, 0xda, 0xda,
+ 0xe7, 0x07, 0xe3, 0x15, 0xf1, 0x02, 0xb9, 0xce, 0xe6, 0x0c, 0x10, 0x31,
+ 0xfe, 0xf7, 0xd9, 0xfa, 0xed, 0xed, 0x33, 0xf4, 0x19, 0xe7, 0xfe, 0x3f,
+ 0xe5, 0x06, 0x2e, 0xe6, 0xf2, 0xdc, 0xf5, 0x18, 0xe6, 0x01, 0x2f, 0xee,
+ 0xe7, 0xe4, 0xfe, 0x2c, 0x03, 0xf7, 0x20, 0x05, 0x07, 0xe2, 0x06, 0x1e,
+ 0x05, 0xed, 0x2f, 0x03, 0xea, 0xf8, 0x0e, 0x0c, 0x1f, 0xff, 0x20, 0xf4,
+ 0xe8, 0xe1, 0x1c, 0xec, 0x22, 0x1e, 0x05, 0xfd, 0xf5, 0xca, 0x30, 0xe9,
+ 0x30, 0xe4, 0x14, 0xff, 0xf2, 0xdc, 0x17, 0xf8, 0x26, 0xe1, 0x0b, 0x01,
+ 0x11, 0xc2, 0x02, 0xf1, 0x36, 0x10, 0x02, 0x05, 0xed, 0xf1, 0x15, 0xfa,
+ 0x17, 0xf8, 0xf7, 0xf1, 0xe8, 0xd3, 0xfd, 0x08, 0xfb, 0x27, 0xf5, 0xf5,
+ 0x13, 0x06, 0x0b, 0xf0, 0x01, 0xf9, 0xd7, 0x0e, 0xec, 0x12, 0xfe, 0xfd,
+ 0xee, 0x25, 0xd8, 0xf1, 0xb2, 0x09, 0x1c, 0xbf, 0x34, 0xea, 0xc8, 0xea,
+ 0xdb, 0x0e, 0x24, 0xde, 0x47, 0xfe, 0xdc, 0xe0, 0xf3, 0x06, 0x20, 0xfe,
+ 0x2b, 0xf6, 0x18, 0x14, 0xcd, 0x19, 0x16, 0xfe, 0x1a, 0x15, 0xf8, 0x11,
+ 0xf4, 0x22, 0xd7, 0xcc, 0xdd, 0x15, 0xdc, 0x14, 0xf9, 0x02, 0xbb, 0xca,
+ 0xe3, 0xf3, 0x0d, 0x1e, 0x2a, 0x0c, 0xe4, 0x05, 0xe0, 0x18, 0x2a, 0x07,
+ 0x20, 0xed, 0xf6, 0x17, 0xcf, 0xf4, 0x2a, 0xd6, 0xfb, 0xce, 0x03, 0x37,
+ 0xe2, 0xfd, 0x1d, 0xfb, 0xe5, 0xe0, 0x05, 0x29, 0xef, 0x16, 0x23, 0xf7,
+ 0x01, 0xf4, 0x0c, 0x14, 0xff, 0xee, 0x31, 0xf9, 0x12, 0xf9, 0x14, 0xf6,
+ 0x0c, 0xf6, 0x0b, 0x0f, 0xd8, 0xdc, 0xfe, 0x0f, 0x37, 0xfa, 0x01, 0x09,
+ 0x04, 0xd1, 0x0b, 0x0c, 0x29, 0xf3, 0x0a, 0xf9, 0xed, 0xc2, 0x18, 0xf4,
+ 0x25, 0x18, 0x0f, 0x08, 0xf7, 0xed, 0x1f, 0xf7, 0x4f, 0x0e, 0xf0, 0xe4,
+ 0x00, 0xeb, 0xfa, 0x1a, 0x0c, 0x03, 0xe9, 0xfc, 0xf0, 0xcc, 0x06, 0x05,
+ 0xf2, 0x12, 0x04, 0xe2, 0x16, 0x0a, 0x0a, 0xf3, 0x0b, 0xf3, 0xdc, 0xfd,
+ 0x10, 0xfc, 0x0e, 0xe2, 0xe0, 0xfe, 0xf0, 0xff, 0xb1, 0x06, 0x1b, 0xe4,
+ 0x30, 0x13, 0xc6, 0xc3, 0xfa, 0x0c, 0x1e, 0xd9, 0x57, 0x11, 0xe1, 0xd6,
+ 0xfa, 0xee, 0x1d, 0xf7, 0x37, 0xea, 0xf0, 0x05, 0xef, 0x24, 0x1e, 0xf1,
+ 0x10, 0xe8, 0xeb, 0x19, 0xd1, 0x18, 0xf5, 0xc8, 0xf8, 0xec, 0xf5, 0x1f,
+ 0xf2, 0xff, 0xb3, 0xd2, 0xe6, 0x0e, 0x06, 0x2e, 0x07, 0x17, 0xe0, 0xf5,
+ 0x02, 0xf9, 0x20, 0x07, 0x16, 0x08, 0xe8, 0x1d, 0xd3, 0x08, 0x34, 0xda,
+ 0xf2, 0xce, 0xfb, 0x1f, 0xe1, 0x00, 0x2d, 0xdb, 0xdf, 0xcc, 0x05, 0xfb,
+ 0xf7, 0x00, 0x33, 0xf9, 0x0b, 0x01, 0x13, 0x28, 0xf8, 0x07, 0x24, 0xf8,
+ 0x0f, 0x03, 0x0d, 0xe9, 0x06, 0xfe, 0x18, 0xf9, 0xed, 0xf5, 0x0c, 0xe0,
+ 0x2c, 0x0e, 0xf9, 0x06, 0xfb, 0xce, 0x27, 0xe8, 0x29, 0x19, 0xf9, 0x01,
+ 0x0e, 0xc8, 0x25, 0xed, 0x30, 0xeb, 0x01, 0xfe, 0x10, 0xdc, 0x1e, 0x00,
+ 0x1e, 0x10, 0xf9, 0x00, 0xfc, 0xc8, 0x0e, 0x04, 0x13, 0x04, 0xf0, 0x02,
+ 0xfe, 0xd8, 0x0f, 0x1b, 0xf7, 0xe1, 0xf8, 0xde, 0x12, 0xe2, 0xef, 0x0a,
+ 0x02, 0xe0, 0xdd, 0xf1, 0x0e, 0x2a, 0x25, 0x15, 0xeb, 0x02, 0xf4, 0xf0,
+ 0xbf, 0xfc, 0x27, 0xdc, 0x42, 0x0f, 0xe9, 0xbf, 0xe8, 0x20, 0x33, 0xc9,
+ 0x3f, 0x10, 0xec, 0xf3, 0x03, 0x02, 0x2c, 0x04, 0x38, 0x06, 0x0a, 0xf9,
+ 0xe5, 0x1c, 0x3f, 0x0f, 0x0c, 0x25, 0xe2, 0x06, 0xe6, 0x03, 0xf4, 0xd7,
+ 0xfe, 0xf6, 0xe7, 0x2f, 0xfa, 0x03, 0xb6, 0xcb, 0xf1, 0x11, 0x0a, 0x2c,
+ 0xfc, 0x1e, 0xe0, 0xff, 0xc2, 0xdd, 0x1d, 0xf3, 0x10, 0xfa, 0x07, 0x1e,
+ 0xf6, 0x20, 0x07, 0xe6, 0xf1, 0x0a, 0xe8, 0x27, 0xf1, 0xf5, 0x24, 0xed,
+ 0xfd, 0xee, 0x13, 0x15, 0xe9, 0xe2, 0x22, 0xe5, 0xf9, 0xdd, 0x1d, 0x32,
+ 0x04, 0xfa, 0x25, 0x00, 0xee, 0xfd, 0x0b, 0x0e, 0x23, 0xfa, 0x0f, 0x01,
+ 0xf8, 0xf0, 0x15, 0xe4, 0x21, 0xf7, 0x10, 0xf9, 0xe7, 0xc3, 0x19, 0xe1,
+ 0x34, 0xff, 0xed, 0xf4, 0xef, 0xd7, 0x21, 0x01, 0x31, 0xee, 0xf7, 0xf2,
+ 0xf3, 0xe5, 0x0a, 0xee, 0x2e, 0x1e, 0xf2, 0x0c, 0x07, 0xc2, 0x08, 0x0a,
+ 0x14, 0x14, 0x00, 0xfc, 0xf9, 0xd6, 0xfb, 0xf8, 0xe5, 0xf1, 0xfa, 0xe0,
+ 0x15, 0x21, 0xef, 0x06, 0xf9, 0x00, 0xf5, 0xf4, 0x0b, 0x0b, 0x18, 0x02,
+ 0xf5, 0x04, 0xdb, 0xfd, 0xcc, 0x32, 0x1d, 0xc9, 0x3b, 0x12, 0xd9, 0xaf,
+ 0xcf, 0x0f, 0x26, 0xde, 0x35, 0xe4, 0xdb, 0xd3, 0x22, 0x11, 0x2e, 0xfb,
+ 0x36, 0xfa, 0xfd, 0x02, 0xeb, 0x0f, 0x37, 0x0b, 0x14, 0x1d, 0xdd, 0x18,
+ 0xe0, 0x10, 0xe0, 0xdf, 0x14, 0xf9, 0xf0, 0x19, 0xf7, 0xfb, 0xc4, 0xe5,
+ 0xe7, 0x11, 0x01, 0x31, 0x1a, 0xf7, 0xd8, 0xf1, 0xe9, 0xf3, 0x21, 0xf9,
+ 0xfe, 0xe4, 0xe9, 0x02, 0xd0, 0x06, 0x14, 0xd7, 0xfc, 0xec, 0x06, 0x10,
+ 0xfc, 0xf0, 0x1c, 0xe7, 0xec, 0xe3, 0x03, 0x21, 0xe4, 0x04, 0x12, 0xf0,
+ 0xf3, 0xed, 0x16, 0x36, 0x02, 0xfd, 0x13, 0x11, 0xdf, 0xeb, 0x19, 0x07,
+ 0x10, 0x0c, 0xf9, 0x08, 0xf8, 0xf4, 0x1d, 0xfd, 0x1d, 0x16, 0xf4, 0x0a,
+ 0x08, 0xec, 0x0c, 0x09, 0x3d, 0xe0, 0x0b, 0xee, 0x10, 0xd1, 0x1e, 0x15,
+ 0x43, 0xeb, 0xfa, 0xf3, 0x05, 0xc7, 0xf2, 0xd9, 0x25, 0x20, 0xee, 0xe9,
+ 0xfd, 0xce, 0x16, 0x0c, 0x27, 0x06, 0x0a, 0x06, 0xf9, 0xd6, 0x0b, 0x05,
+ 0xe8, 0x02, 0xe8, 0xd2, 0x10, 0x01, 0xf2, 0x15, 0x09, 0x04, 0xd3, 0xe2,
+ 0xfe, 0xf0, 0x32, 0x1b, 0xd9, 0xf5, 0xea, 0xcc, 0xcb, 0x10, 0x1c, 0xf1,
+ 0x3b, 0x02, 0xd4, 0xbf, 0xca, 0xfe, 0x12, 0xdb, 0x3b, 0xf8, 0xd5, 0xe7,
+ 0x13, 0x10, 0x1a, 0xf4, 0x38, 0x09, 0x08, 0xee, 0xf4, 0xf4, 0x3c, 0xf7,
+ 0x15, 0x04, 0xe4, 0xfa, 0xf4, 0x04, 0xee, 0xf4, 0x07, 0xf8, 0xe9, 0x3b,
+ 0xe2, 0x1f, 0xd5, 0xed, 0xe6, 0xfd, 0x18, 0x49, 0x21, 0x06, 0xd8, 0xde,
+ 0xfa, 0xf0, 0x1b, 0xfe, 0xde, 0x08, 0xf7, 0x14, 0xc7, 0x0f, 0x1d, 0xcf,
+ 0x00, 0xea, 0xff, 0x1b, 0xd5, 0x08, 0x0d, 0xd9, 0xf1, 0xf4, 0x16, 0x23,
+ 0xd8, 0x0c, 0x29, 0xdc, 0xf1, 0xf2, 0x21, 0x49, 0xfc, 0xe2, 0x08, 0x01,
+ 0xf0, 0xf8, 0x17, 0xf9, 0x0f, 0xf5, 0xfa, 0x1a, 0xef, 0xec, 0x09, 0xeb,
+ 0x1a, 0x0c, 0x17, 0x09, 0x11, 0xe9, 0x1a, 0xf7, 0x29, 0xf9, 0xfd, 0x07,
+ 0x01, 0xdd, 0x0a, 0xec, 0x22, 0x15, 0x03, 0xfd, 0xe2, 0xd2, 0x15, 0xec,
+ 0x4d, 0xd7, 0xfc, 0xf6, 0x0b, 0xcc, 0x0e, 0x04, 0x03, 0xf7, 0xfb, 0xfb,
+ 0x0d, 0xeb, 0x19, 0x07, 0xf4, 0xf4, 0xe5, 0xde, 0x22, 0x07, 0xea, 0xf7,
+ 0xeb, 0x23, 0xc8, 0xee, 0x03, 0x04, 0x0f, 0x19, 0xc3, 0xf8, 0x06, 0xd0,
+ 0xf7, 0xfe, 0x0e, 0xe7, 0x0a, 0x02, 0xb0, 0xb8, 0x00, 0xfb, 0x18, 0x0f,
+ 0x22, 0xf7, 0xe9, 0xdc, 0x09, 0x15, 0x23, 0x0d, 0x22, 0x13, 0xe2, 0xed,
+ 0xeb, 0x18, 0x20, 0x0b, 0x12, 0xfc, 0x02, 0xf1, 0xdb, 0x0e, 0xe1, 0x04,
+ 0xdb, 0x0f, 0xf3, 0x1a, 0x06, 0xef, 0xdb, 0xdc, 0xdd, 0xfb, 0x00, 0x2a,
+ 0x20, 0xfd, 0xc1, 0xe3, 0xef, 0x01, 0x14, 0xf2, 0x14, 0x00, 0x0f, 0x28,
+ 0xd9, 0xff, 0xf4, 0xdc, 0x09, 0xfa, 0x1c, 0x08, 0xd1, 0x03, 0x0a, 0xf4,
+ 0xe4, 0xdb, 0x20, 0x30, 0xea, 0x06, 0x11, 0xe2, 0x26, 0xf7, 0x16, 0x22,
+ 0xf9, 0x07, 0x02, 0xf5, 0xf6, 0xfb, 0x1d, 0x0c, 0x16, 0x0a, 0x07, 0xf9,
+ 0x11, 0xde, 0x20, 0x08, 0x19, 0x04, 0x0a, 0x0b, 0x0c, 0xf7, 0xf4, 0xfc,
+ 0x41, 0xf1, 0xf8, 0x16, 0x09, 0xdc, 0x0e, 0x1a, 0x2b, 0x1f, 0xe7, 0xfe,
+ 0x01, 0xe0, 0xfd, 0xe2, 0x34, 0xec, 0xf3, 0xf5, 0x03, 0xec, 0x0b, 0xfb,
+ 0x04, 0xf6, 0xdd, 0xfd, 0x06, 0x14, 0x0d, 0xfa, 0xfc, 0xf1, 0x0a, 0xca,
+ 0x01, 0xec, 0x0e, 0x0e, 0xec, 0xd7, 0xee, 0xd4, 0xf2, 0xfe, 0x16, 0xfa,
+ 0xbd, 0x0d, 0xef, 0xcb, 0xc4, 0xee, 0xed, 0x13, 0x10, 0x19, 0xf8, 0xb1,
+ 0xf1, 0xe3, 0x00, 0xf3, 0x0c, 0xf6, 0xde, 0xc6, 0x15, 0x27, 0x14, 0x29,
+ 0x15, 0xf6, 0xf4, 0xf5, 0xe7, 0x00, 0x0b, 0x2f, 0x0c, 0xef, 0x03, 0x0f,
+ 0xfd, 0x08, 0xf3, 0xf9, 0xf9, 0x05, 0x0d, 0x34, 0x15, 0x1b, 0xc8, 0xd1,
+ 0xf2, 0x1b, 0x0a, 0x22, 0x12, 0x11, 0xe9, 0xf4, 0xe1, 0x2a, 0x20, 0x03,
+ 0xf2, 0xf8, 0x14, 0x0b, 0xd0, 0xf4, 0x0e, 0xbf, 0xc6, 0xd8, 0x04, 0x05,
+ 0xf8, 0xf4, 0x04, 0xc9, 0xea, 0xfd, 0xf7, 0xfa, 0xe3, 0x1b, 0x11, 0xde,
+ 0x0c, 0x11, 0x25, 0x29, 0xe5, 0x02, 0xef, 0xef, 0x02, 0xfa, 0x1a, 0x21,
+ 0x19, 0x09, 0x08, 0x05, 0x04, 0xe5, 0xfa, 0xed, 0x2d, 0x26, 0xfa, 0x17,
+ 0xf6, 0xe8, 0x12, 0x12, 0x31, 0xfc, 0x0d, 0x00, 0xf7, 0xeb, 0x19, 0xf1,
+ 0x2a, 0x06, 0x14, 0xec, 0x08, 0xd3, 0x21, 0x07, 0x32, 0xe3, 0x02, 0x0b,
+ 0xfb, 0xd8, 0x27, 0x07, 0x05, 0xe6, 0xf5, 0xf5, 0x0a, 0xf7, 0x2c, 0x2a,
+ 0xd8, 0x1b, 0xda, 0xf7, 0xea, 0xf6, 0xf9, 0x0e, 0xf8, 0x0c, 0x05, 0xc7,
+ 0xd6, 0x06, 0x12, 0xe3, 0xe1, 0xe1, 0xd8, 0xdb, 0xc6, 0xf8, 0xe6, 0xfa,
+ 0x0c, 0x07, 0xf8, 0xe7, 0xe1, 0x0f, 0x00, 0xf3, 0x03, 0xf0, 0xde, 0xcc,
+ 0xf5, 0xfc, 0xef, 0x1e, 0x16, 0x13, 0xfb, 0xf4, 0x03, 0xe9, 0xfc, 0xfa,
+ 0x15, 0xe8, 0x15, 0x09, 0xf1, 0x0d, 0xdb, 0x0a, 0xe8, 0x09, 0xf5, 0x1a,
+ 0x04, 0xf8, 0xd8, 0xd4, 0x04, 0xee, 0x25, 0x29, 0x09, 0xfe, 0xf3, 0xf5,
+ 0xd4, 0x0a, 0x15, 0x19, 0xf5, 0x12, 0xfe, 0x04, 0xe7, 0x01, 0xeb, 0xde,
+ 0xbe, 0xfe, 0x09, 0x12, 0xdf, 0x13, 0xe0, 0xef, 0xc7, 0xff, 0x03, 0x08,
+ 0xfe, 0xf2, 0x19, 0xe0, 0xe4, 0x0c, 0x22, 0x1e, 0x05, 0xf7, 0x16, 0xf2,
+ 0xf9, 0x06, 0x17, 0xf6, 0x0c, 0x1e, 0x23, 0x08, 0xfe, 0xdc, 0xfd, 0x17,
+ 0x11, 0xdf, 0xf5, 0x0f, 0x01, 0x03, 0x08, 0xee, 0x1b, 0x02, 0x0b, 0x1b,
+ 0x0c, 0x16, 0x1a, 0x00, 0x0f, 0x26, 0x14, 0xf8, 0xf4, 0xf3, 0x19, 0x16,
+ 0x22, 0x0a, 0xd0, 0xf9, 0xf1, 0x05, 0x2b, 0x1e, 0x1e, 0xef, 0xf5, 0x06,
+ 0x05, 0xe7, 0x3f, 0x2a, 0x06, 0xf0, 0x15, 0x14, 0x13, 0x20, 0x1b, 0xde,
+ 0x10, 0x05, 0x33, 0xf8, 0x08, 0x04, 0x17, 0x0d, 0x0f, 0xf6, 0x01, 0xed,
+ 0x28, 0x25, 0x1c, 0x13, 0xfb, 0xea, 0xfb, 0xf3, 0x1c, 0xf9, 0x1f, 0xf0,
+ 0xfb, 0x17, 0xf8, 0xff, 0x10, 0xf7, 0x0b, 0x24, 0x04, 0x00, 0x0d, 0x0c,
+ 0xf7, 0x0a, 0x16, 0x13, 0xf8, 0x05, 0x0a, 0xf1, 0xf5, 0xee, 0xf8, 0x14,
+ 0x0e, 0xed, 0xfe, 0x1b, 0xfe, 0x17, 0x13, 0x10, 0x12, 0x21, 0x1c, 0xfa,
+ 0xe5, 0x0b, 0x08, 0x0c, 0x10, 0x1b, 0x03, 0xef, 0x0d, 0x05, 0x0a, 0xf0,
+ 0x04, 0x11, 0x15, 0x00, 0xfd, 0xef, 0x02, 0x18, 0xf4, 0x09, 0xfa, 0xf6,
+ 0x02, 0xf7, 0xfd, 0x13, 0xef, 0x13, 0xf7, 0xf9, 0x17, 0x0f, 0xfa, 0xf8,
+ 0x15, 0xff, 0x04, 0xef, 0xf0, 0x15, 0xfa, 0xfe, 0xf0, 0xf4, 0xed, 0x06,
+ 0x1c, 0x02, 0xfb, 0xf7, 0x05, 0xfb, 0x0c, 0xef, 0xf4, 0xf0, 0xf6, 0xec,
+ 0x17, 0xf3, 0xf5, 0xef, 0x02, 0xfd, 0xe5, 0x21, 0x0c, 0xf1, 0x1e, 0x08,
+ 0xf1, 0x0b, 0xf7, 0x09, 0x1d, 0xf2, 0xf9, 0xf2, 0xfb, 0x0e, 0xed, 0xf8,
+ 0xfa, 0xdd, 0xf0, 0xfd, 0xdb, 0x1a, 0xf4, 0xef, 0x0c, 0x06, 0x0f, 0xdf,
+ 0xe2, 0x06, 0x06, 0xee, 0xfa, 0x0d, 0x17, 0xfc, 0xf9, 0x15, 0x1a, 0xe4,
+ 0xfb, 0x0c, 0x1a, 0xfc, 0x1b, 0x04, 0x07, 0x20, 0xff, 0x09, 0x0f, 0xf2,
+ 0x26, 0x19, 0x1f, 0x0d, 0x02, 0x16, 0x03, 0x03, 0xfd, 0x05, 0x01, 0x1b,
+ 0x0a, 0x11, 0xfa, 0x21, 0x13, 0xfb, 0x0c, 0x05, 0xf3, 0xdd, 0xe4, 0xdc,
+ 0x22, 0x1b, 0x15, 0x14, 0x0e, 0xe8, 0x00, 0xf7, 0xf8, 0xf4, 0x0b, 0x0b,
+ 0xfd, 0x21, 0xe3, 0x0f, 0xe1, 0x22, 0x01, 0x21, 0x0b, 0x1f, 0x09, 0x10,
+ 0xe2, 0x18, 0x11, 0x0e, 0xed, 0x01, 0x14, 0x12, 0xfd, 0x11, 0xf6, 0xe9,
+ 0x20, 0xe1, 0xf5, 0x1b, 0x27, 0x22, 0xfa, 0xf7, 0xfe, 0x13, 0xf6, 0xdc,
+ 0x06, 0x0d, 0xf4, 0x05, 0x20, 0x0d, 0x0b, 0xe4, 0x15, 0x28, 0x0c, 0x00,
+ 0xf5, 0x07, 0x0c, 0x0a, 0x06, 0x0e, 0xf3, 0xfb, 0xfe, 0x04, 0x08, 0xf4,
+ 0xef, 0x03, 0xe4, 0xeb, 0x06, 0xee, 0xed, 0xdb, 0xeb, 0x1d, 0xf4, 0xfa,
+ 0x0c, 0xfc, 0xfe, 0x11, 0xf7, 0xf8, 0xf5, 0xef, 0xe7, 0xfc, 0x1b, 0xdc,
+ 0x17, 0xfd, 0xfe, 0x00, 0xea, 0xf4, 0xf1, 0xf7, 0x0f, 0x21, 0x04, 0xfd,
+ 0x0d, 0x0c, 0x0a, 0x14, 0xfd, 0x19, 0x09, 0x01, 0xfd, 0xe2, 0x0c, 0x0c,
+ 0xe0, 0x25, 0xfb, 0xff, 0x0d, 0x18, 0xf6, 0x0b, 0x19, 0x12, 0x10, 0x09,
+ 0x0b, 0x06, 0x12, 0x1c, 0x10, 0x03, 0x13, 0x0a, 0x05, 0x0f, 0x09, 0x01,
+ 0x21, 0xe4, 0x01, 0x26, 0xf9, 0xf4, 0x05, 0x19, 0x00, 0xff, 0x0b, 0xff,
+ 0x16, 0x09, 0xe7, 0xee, 0xed, 0xf5, 0x0f, 0x2f, 0xee, 0x19, 0x03, 0x0a,
+ 0x10, 0xee, 0xf7, 0x2e, 0xf4, 0x08, 0xf7, 0xee, 0x07, 0x00, 0xfc, 0x0e,
+ 0xf0, 0x12, 0x08, 0x05, 0xed, 0x11, 0xfc, 0xfb, 0xf7, 0x25, 0xf1, 0x05,
+ 0x0c, 0xf9, 0xfa, 0x03, 0x0c, 0x16, 0x04, 0x25, 0xf8, 0xe7, 0xfc, 0x11,
+ 0x0d, 0x19, 0xd8, 0xfa, 0x0b, 0x06, 0xfd, 0xef, 0x13, 0xf6, 0xff, 0x0e,
+ 0xf9, 0x04, 0xf1, 0xdc, 0xfb, 0xe1, 0xf6, 0x0b, 0x15, 0x07, 0xf7, 0x02,
+ 0x0e, 0xf1, 0xfd, 0xe3, 0xeb, 0x07, 0xf1, 0xef, 0x03, 0xfe, 0xf8, 0x07,
+ 0x10, 0xf7, 0x00, 0xf9, 0xf2, 0x0e, 0xf9, 0xf2, 0x1d, 0xf5, 0xd8, 0xff,
+ 0xe6, 0x18, 0x2a, 0x1b, 0x03, 0x16, 0xfe, 0xf4, 0xf5, 0xfd, 0x04, 0x01,
+ 0xfe, 0xfe, 0x07, 0xfc, 0x0e, 0xfa, 0x15, 0xeb, 0x02, 0x15, 0xea, 0xfd,
+ 0x04, 0xe5, 0xfe, 0xed, 0xfe, 0x1a, 0x09, 0x2a, 0x1b, 0xdf, 0xfb, 0xf8,
+ 0xf1, 0x04, 0x1a, 0x34, 0x07, 0xf9, 0x0d, 0xf5, 0xef, 0xec, 0x10, 0x1a,
+ 0x0b, 0x0f, 0x13, 0xfe, 0x10, 0x22, 0x1e, 0x02, 0xe6, 0xf7, 0x11, 0xfa,
+ 0x11, 0xfc, 0x1b, 0x21, 0x12, 0xf4, 0x18, 0x16, 0x29, 0xe4, 0x0c, 0x2e,
+ 0x12, 0x07, 0x20, 0xf6, 0x1d, 0xf4, 0x12, 0x33, 0xf4, 0xee, 0xfe, 0x05,
+ 0x06, 0xfb, 0x13, 0x0c, 0x0e, 0xf0, 0x00, 0xf8, 0xee, 0xf3, 0x17, 0x00,
+ 0xf7, 0xfb, 0xfc, 0x0f, 0xf4, 0xd5, 0x0a, 0xed, 0xeb, 0xf5, 0xe9, 0xef,
+ 0xd8, 0xf0, 0xf8, 0xe2, 0x19, 0xf7, 0xf8, 0x0a, 0x0b, 0x09, 0xfa, 0xe7,
+ 0x0f, 0xfc, 0xe8, 0x02, 0x00, 0x1a, 0xfe, 0xfd, 0x1b, 0xe6, 0xef, 0x0f,
+ 0xe3, 0x10, 0xf1, 0xe2, 0x0b, 0x0e, 0x06, 0x29, 0x00, 0x01, 0xf3, 0x00,
+ 0x11, 0x04, 0xf2, 0xf7, 0xea, 0xf8, 0xe0, 0x09, 0x0e, 0x13, 0xf4, 0x00,
+ 0x09, 0xfa, 0xf5, 0x0c, 0xff, 0x18, 0x08, 0x0d, 0xfa, 0xde, 0xfa, 0x03,
+ 0xf2, 0xf3, 0x1b, 0xeb, 0x06, 0xea, 0xfb, 0xff, 0x0d, 0xf5, 0x10, 0x17,
+ 0xf8, 0xe8, 0xf1, 0xf1, 0xf5, 0x00, 0x03, 0x0a, 0x09, 0x0a, 0xf3, 0xfb,
+ 0x33, 0x26, 0xe7, 0x17, 0xe3, 0xfa, 0x1f, 0x24, 0xfc, 0x07, 0x02, 0xe2,
+ 0xeb, 0x08, 0x2c, 0xf8, 0x02, 0x1f, 0x04, 0xeb, 0x0b, 0x04, 0x17, 0xf7,
+ 0xff, 0x1c, 0xed, 0x00, 0x3f, 0xd5, 0x17, 0x1d, 0xfe, 0x03, 0xf1, 0x1c,
+ 0x17, 0xec, 0x0e, 0x54, 0xee, 0xf5, 0x25, 0xfa, 0x08, 0xee, 0x13, 0x32,
+ 0x0e, 0xd8, 0x09, 0x0f, 0xee, 0xe5, 0x06, 0x10, 0xf4, 0xfb, 0xe4, 0xfb,
+ 0x09, 0xde, 0x13, 0xff, 0x02, 0xf9, 0xec, 0x0a, 0x00, 0xe9, 0xfd, 0xdc,
+ 0x06, 0x04, 0xdb, 0x06, 0x01, 0xf8, 0x09, 0xe2, 0x0c, 0x14, 0xda, 0xfe,
+ 0x20, 0xe3, 0x09, 0xda, 0x14, 0x12, 0xe1, 0x05, 0xff, 0xf3, 0x00, 0x08,
+ 0xfb, 0xf1, 0xfd, 0xf3, 0x04, 0xfa, 0x08, 0xff, 0x01, 0x1d, 0x0b, 0xfd,
+ 0x0a, 0xf4, 0xfb, 0xfc, 0xf9, 0x19, 0xed, 0xfc, 0xf2, 0x06, 0xe7, 0x02,
+ 0xf6, 0x0c, 0xfc, 0xfb, 0x01, 0x0c, 0xeb, 0x1b, 0xff, 0xff, 0x08, 0x1d,
+ 0xf7, 0xe8, 0xfc, 0xf4, 0x0c, 0xfa, 0xf1, 0xee, 0xed, 0xdd, 0xfc, 0x06,
+ 0x05, 0xdc, 0x1a, 0xfc, 0xf9, 0x07, 0xdf, 0x1b, 0x14, 0x0c, 0xfc, 0x01,
+ 0x16, 0xe1, 0xed, 0x09, 0x34, 0xee, 0xe4, 0x1c, 0x1b, 0xfc, 0x3b, 0x03,
+ 0x15, 0xf2, 0xeb, 0x14, 0x00, 0xdd, 0x24, 0x04, 0xf1, 0xed, 0xfd, 0xe6,
+ 0x32, 0xf9, 0x24, 0x04, 0x0e, 0x22, 0x03, 0x14, 0x2f, 0xf5, 0x1a, 0x37,
+ 0xf4, 0x18, 0x03, 0x0f, 0x4b, 0xe6, 0x0d, 0x5c, 0xf7, 0x1f, 0x1c, 0xe6,
+ 0x23, 0x0c, 0x15, 0x4e, 0xe0, 0x05, 0x1c, 0xec, 0xff, 0x04, 0x13, 0x15,
+ 0xee, 0x07, 0xec, 0x0c, 0xdd, 0xf8, 0x0e, 0x03, 0x0c, 0x1f, 0xe8, 0x0e,
+ 0xf5, 0xec, 0xfc, 0xe2, 0xe8, 0xfb, 0xf6, 0x00, 0xe5, 0xea, 0xf3, 0xd3,
+ 0xf5, 0xfd, 0xd2, 0xfd, 0x1b, 0xed, 0x09, 0xd1, 0x23, 0xfa, 0xd4, 0xf7,
+ 0xe9, 0xf0, 0x0a, 0xd6, 0x14, 0x03, 0xe6, 0x10, 0xf4, 0x18, 0xfe, 0xe1,
+ 0x0b, 0x25, 0xf5, 0xfc, 0xe9, 0xf2, 0xe9, 0xf4, 0x0d, 0xf5, 0x00, 0xf9,
+ 0x17, 0x02, 0xfd, 0x03, 0x04, 0xf8, 0xf5, 0x14, 0xe3, 0xd3, 0xeb, 0xe7,
+ 0x09, 0xf3, 0x14, 0x17, 0xee, 0xe6, 0xf6, 0xff, 0x11, 0x26, 0xf4, 0xf7,
+ 0x02, 0xfa, 0x05, 0x08, 0x16, 0xff, 0x0d, 0xf7, 0xf1, 0xf7, 0xe6, 0xfb,
+ 0x04, 0x04, 0x07, 0x02, 0x04, 0x09, 0xf5, 0xfc, 0x5f, 0xd6, 0xe7, 0x2a,
+ 0x23, 0xf4, 0x1b, 0x06, 0x01, 0xea, 0xe7, 0x05, 0x25, 0xe3, 0x25, 0x07,
+ 0xea, 0xfb, 0xfb, 0x09, 0x25, 0xde, 0x37, 0x04, 0x07, 0xe5, 0xff, 0x14,
+ 0x2f, 0x0a, 0x30, 0x23, 0x04, 0xf0, 0x23, 0xfe, 0x1c, 0xd2, 0x2b, 0x55,
+ 0x01, 0xe5, 0x26, 0xfe, 0x14, 0xed, 0x24, 0x46, 0xe6, 0xee, 0x0f, 0xfd,
+ 0xed, 0xef, 0x0e, 0x1e, 0x05, 0x0a, 0x12, 0xff, 0xe4, 0xf5, 0x0c, 0xed,
+ 0xfd, 0xea, 0x0d, 0x13, 0x1a, 0xe5, 0xfc, 0xc2, 0xef, 0x0a, 0xe2, 0x0f,
+ 0xfe, 0xff, 0x0c, 0xf0, 0xff, 0xdf, 0xea, 0x00, 0xf6, 0xe1, 0x04, 0xd8,
+ 0x26, 0x20, 0xdc, 0xf4, 0x19, 0x06, 0xe8, 0xd2, 0x10, 0x04, 0xf1, 0x02,
+ 0x0c, 0x06, 0xf0, 0xf0, 0x04, 0x1f, 0xf4, 0xf5, 0xed, 0xf1, 0xfa, 0xf1,
+ 0x04, 0x02, 0xf8, 0xfb, 0x04, 0xf1, 0xe5, 0xe4, 0x0a, 0xf0, 0xfe, 0xef,
+ 0x1c, 0xe3, 0xeb, 0xf3, 0x00, 0x17, 0x01, 0x13, 0x19, 0xda, 0xf8, 0x06,
+ 0xde, 0x11, 0xea, 0xf7, 0xf4, 0xef, 0x03, 0x04, 0x0b, 0xe8, 0x08, 0x0e,
+ 0xe2, 0xee, 0xde, 0x06, 0x0e, 0x29, 0xfb, 0xfa, 0x00, 0x02, 0xec, 0x1b,
+ 0x52, 0xff, 0xde, 0x3a, 0x2f, 0x13, 0x30, 0xe9, 0xff, 0xf6, 0xe7, 0x15,
+ 0x1d, 0xd9, 0x3c, 0x0f, 0xe6, 0x14, 0xee, 0x13, 0x1f, 0xe7, 0x33, 0x08,
+ 0xfc, 0x06, 0x0c, 0x08, 0x19, 0xd9, 0x2b, 0x1f, 0x07, 0x10, 0x24, 0x16,
+ 0x29, 0xfc, 0x31, 0x4d, 0xf0, 0xd9, 0x3f, 0xf2, 0x20, 0xe2, 0x25, 0x49,
+ 0xe5, 0xec, 0x0a, 0xf5, 0xf2, 0xd9, 0x22, 0x1f, 0xed, 0x22, 0x02, 0x0a,
+ 0x16, 0x08, 0xf7, 0xfb, 0x0e, 0xfb, 0xfb, 0x1d, 0xf3, 0x1c, 0xf6, 0xe1,
+ 0xcf, 0x19, 0xf4, 0x0f, 0xee, 0xf9, 0x04, 0xd1, 0xf9, 0xe2, 0xda, 0xf1,
+ 0x24, 0xf5, 0x07, 0xdf, 0x1d, 0xf9, 0xdb, 0x18, 0x0b, 0xea, 0x08, 0xca,
+ 0xf2, 0xfa, 0xec, 0x04, 0x0e, 0x17, 0xed, 0xf1, 0x06, 0x15, 0xfc, 0xfd,
+ 0x08, 0xfa, 0xe3, 0xe4, 0x0a, 0xfc, 0xee, 0x08, 0xf5, 0x09, 0xef, 0xee,
+ 0x06, 0xef, 0xe1, 0x19, 0x07, 0xe8, 0xe6, 0xdf, 0xea, 0x0d, 0xf1, 0x16,
+ 0xee, 0xed, 0xf8, 0x09, 0xfa, 0xfb, 0x0c, 0xf8, 0xeb, 0xda, 0x00, 0xfc,
+ 0x04, 0xfe, 0xf5, 0xff, 0xf6, 0xe1, 0x0c, 0x0a, 0x13, 0x0d, 0xf6, 0xf5,
+ 0x15, 0x07, 0xca, 0xec, 0x50, 0x0e, 0xd0, 0x26, 0x4c, 0xf8, 0x23, 0xeb,
+ 0xff, 0x08, 0xe3, 0x11, 0x2c, 0xf9, 0x2a, 0xf1, 0xe9, 0x0b, 0xe9, 0x0f,
+ 0x15, 0xec, 0x33, 0x11, 0x0c, 0x0d, 0x01, 0x01, 0x32, 0xe3, 0x41, 0x27,
+ 0x11, 0x02, 0x2e, 0x07, 0x09, 0xe3, 0x22, 0x4d, 0xf1, 0x05, 0x27, 0x03,
+ 0x25, 0xf5, 0x2c, 0x3b, 0xf4, 0x00, 0x16, 0x0b, 0xec, 0xfe, 0x17, 0x0d,
+ 0xff, 0xe7, 0xfe, 0x24, 0x06, 0xee, 0xf0, 0xe9, 0xfa, 0x1c, 0xf2, 0x19,
+ 0x08, 0xfa, 0xff, 0xd2, 0x01, 0x02, 0xea, 0x05, 0xf2, 0xf4, 0x0b, 0xd2,
+ 0xf9, 0x0d, 0xcd, 0x0d, 0x12, 0xf2, 0x0e, 0xe1, 0x1f, 0x00, 0xe7, 0x14,
+ 0x04, 0xff, 0x09, 0xdb, 0xfc, 0xd9, 0x06, 0xf9, 0xeb, 0x01, 0xef, 0xfa,
+ 0xfb, 0xf5, 0xfc, 0xfb, 0x14, 0xe2, 0xf9, 0xf5, 0x02, 0xfd, 0xfc, 0x01,
+ 0xf7, 0xf3, 0x00, 0xec, 0xe7, 0xf2, 0x00, 0xf1, 0x11, 0xec, 0xf0, 0xe9,
+ 0x11, 0x0a, 0x07, 0x04, 0x01, 0xee, 0xfb, 0xf2, 0x14, 0x01, 0x12, 0xf0,
+ 0xf2, 0xf1, 0xf0, 0xfb, 0x08, 0x03, 0xf8, 0x01, 0xe8, 0xf9, 0x17, 0x26,
+ 0x0f, 0xea, 0xf7, 0xf8, 0x1e, 0xfe, 0xf2, 0xf8, 0x3f, 0x00, 0xd4, 0x1c,
+ 0x53, 0xfe, 0x1e, 0x0f, 0xef, 0xdd, 0xed, 0x10, 0x19, 0xe7, 0x34, 0x0e,
+ 0xde, 0xdf, 0xfa, 0x0e, 0x29, 0xe3, 0x16, 0x09, 0x06, 0x12, 0xeb, 0xf9,
+ 0x32, 0xe0, 0x1a, 0x1d, 0xf3, 0xed, 0x10, 0x07, 0x31, 0xf2, 0x12, 0x52,
+ 0xeb, 0xf7, 0x1e, 0xf7, 0x1a, 0xdc, 0x3e, 0x33, 0xe3, 0xfb, 0x1f, 0x0b,
+ 0x08, 0xfe, 0x13, 0x1a, 0xf4, 0xf8, 0xfe, 0x08, 0xfc, 0xe9, 0xfe, 0xeb,
+ 0xe6, 0xf6, 0x02, 0x18, 0x02, 0xe8, 0xfb, 0xf3, 0x01, 0x08, 0xd7, 0x13,
+ 0x04, 0xe6, 0x02, 0xe6, 0xd7, 0x01, 0xd4, 0xf0, 0x0e, 0x05, 0x18, 0xe5,
+ 0x08, 0xe5, 0xd2, 0x16, 0x12, 0xfe, 0x0e, 0xd3, 0xfc, 0x1f, 0xe9, 0xf8,
+ 0x11, 0x06, 0xf3, 0xd5, 0xf8, 0xff, 0xf0, 0x04, 0x0a, 0xd9, 0xf8, 0xfd,
+ 0xf5, 0x12, 0xff, 0x06, 0x1b, 0xe6, 0xfe, 0xfe, 0xde, 0xee, 0xf6, 0x18,
+ 0xf1, 0xf8, 0x06, 0xf3, 0x02, 0xea, 0x04, 0x14, 0xfc, 0xee, 0xe6, 0x09,
+ 0xf9, 0xee, 0xe3, 0xe7, 0xfc, 0xd9, 0xef, 0xfc, 0x0a, 0x0c, 0x03, 0xf6,
+ 0xe2, 0x11, 0x0f, 0x19, 0x18, 0x10, 0xef, 0xe5, 0x22, 0xf5, 0xe5, 0xe9,
+ 0x4b, 0xf7, 0xdb, 0x0c, 0x4f, 0xde, 0x22, 0x16, 0x09, 0x16, 0xd1, 0xf8,
+ 0x19, 0xe0, 0x24, 0xfe, 0xb8, 0xfb, 0xe5, 0x12, 0x1c, 0xe3, 0x22, 0x09,
+ 0x05, 0x29, 0xf7, 0x10, 0x31, 0xe1, 0x33, 0x3f, 0xfd, 0xed, 0x04, 0x03,
+ 0x2e, 0xed, 0x30, 0x36, 0xee, 0x16, 0x2f, 0xf5, 0x1b, 0xdc, 0x3a, 0x56,
+ 0xe5, 0xef, 0x26, 0xff, 0x03, 0xd7, 0x31, 0x16, 0xef, 0xf1, 0x08, 0x13,
+ 0x01, 0x02, 0x03, 0xf1, 0xf2, 0x08, 0xff, 0x05, 0x12, 0xf2, 0xee, 0xda,
+ 0xed, 0xec, 0xea, 0xf7, 0x0c, 0xf1, 0x09, 0xe6, 0xe6, 0x00, 0xcc, 0x10,
+ 0x0d, 0x0d, 0x20, 0xf4, 0x18, 0x23, 0xec, 0xf9, 0x00, 0xe4, 0x07, 0xd4,
+ 0xfb, 0x16, 0xd2, 0x01, 0xe6, 0x01, 0x06, 0xf0, 0xfe, 0x03, 0xf3, 0x09,
+ 0x01, 0x0d, 0x05, 0xf7, 0xd4, 0x02, 0xfb, 0xfb, 0x08, 0xf0, 0x1f, 0xf3,
+ 0xfe, 0xeb, 0x02, 0x0e, 0x1b, 0x0f, 0x04, 0xf5, 0xf0, 0x1f, 0x14, 0xf7,
+ 0x06, 0xdc, 0xf9, 0xe9, 0x01, 0xff, 0x08, 0xf2, 0x06, 0xff, 0xff, 0xf3,
+ 0x05, 0x1a, 0xfc, 0xfa, 0xeb, 0xfb, 0xfa, 0x12, 0x20, 0xf6, 0xe0, 0xe8,
+ 0x1c, 0xfa, 0xd6, 0x0d, 0x2c, 0x04, 0xe1, 0x09, 0x3b, 0xd3, 0x2a, 0xee,
+ 0xf7, 0xed, 0xf1, 0xf7, 0x0d, 0xf0, 0x32, 0x0f, 0xc9, 0x0e, 0x00, 0x10,
+ 0x24, 0xfb, 0x31, 0xf0, 0xf4, 0xdd, 0xf5, 0x04, 0x25, 0xc7, 0x27, 0x25,
+ 0x16, 0x11, 0x2e, 0x09, 0x30, 0xd1, 0x2c, 0x34, 0xe6, 0xf0, 0x21, 0xf5,
+ 0x21, 0xc8, 0x40, 0x39, 0xde, 0xf0, 0x12, 0xf3, 0x10, 0xe8, 0x1f, 0x18,
+ 0xfa, 0xea, 0x07, 0x11, 0xdf, 0xed, 0xfa, 0xf0, 0x07, 0xef, 0xf3, 0x05,
+ 0x10, 0xe5, 0xf3, 0xe9, 0xe9, 0xe8, 0xd6, 0x01, 0xf9, 0x05, 0x0b, 0xee,
+ 0xf9, 0x12, 0xe3, 0x05, 0xfd, 0xe6, 0x16, 0xe2, 0x1b, 0x12, 0xc5, 0x00,
+ 0xfd, 0x02, 0x04, 0xd2, 0xff, 0xec, 0xf6, 0xfd, 0x00, 0xe4, 0xf7, 0xf3,
+ 0xeb, 0xfa, 0xf8, 0x0d, 0x03, 0xfa, 0xfe, 0xe4, 0xdb, 0xe3, 0x06, 0xff,
+ 0xf4, 0xf2, 0x1b, 0xf1, 0xf7, 0x02, 0x01, 0x04, 0x13, 0xe5, 0x0c, 0x05,
+ 0xf7, 0x0a, 0x03, 0x03, 0x0b, 0x03, 0xee, 0xf7, 0x21, 0x20, 0xff, 0xf3,
+ 0x09, 0xe5, 0xff, 0xec, 0x17, 0x00, 0x06, 0x14, 0xeb, 0xf2, 0x18, 0x16,
+ 0x1f, 0xec, 0xee, 0xe1, 0x1e, 0x03, 0xfa, 0xfe, 0x28, 0x03, 0xc9, 0x0c,
+ 0x3f, 0xd8, 0x30, 0x16, 0x03, 0xf8, 0xe9, 0xfb, 0x28, 0xe1, 0x36, 0x0a,
+ 0xdf, 0xe5, 0xeb, 0x08, 0x1c, 0xcd, 0x29, 0xf2, 0xfc, 0x0a, 0xed, 0x01,
+ 0x29, 0xf1, 0x20, 0x13, 0x04, 0xec, 0x17, 0x0a, 0x35, 0xc3, 0x1a, 0x46,
+ 0xe0, 0xd7, 0x3c, 0x09, 0x28, 0xd1, 0x22, 0x20, 0xd5, 0xfa, 0x28, 0xfa,
+ 0xff, 0xea, 0x1d, 0x23, 0xe0, 0x07, 0x07, 0x0f, 0xf1, 0xf1, 0x08, 0xf0,
+ 0xf8, 0xff, 0x05, 0x1b, 0x05, 0xfa, 0xf0, 0xfb, 0xe3, 0xe4, 0xcc, 0x1a,
+ 0xf9, 0x09, 0x06, 0xee, 0xf4, 0x03, 0xd0, 0x14, 0xf4, 0xff, 0x1d, 0xe8,
+ 0x11, 0xf4, 0xd1, 0xf4, 0x04, 0x0b, 0xfb, 0xdc, 0x0a, 0x0c, 0xeb, 0xed,
+ 0x06, 0xf3, 0x04, 0xdd, 0xdf, 0xf9, 0xea, 0xfc, 0xf5, 0xf2, 0xfb, 0xea,
+ 0xe3, 0x03, 0xee, 0x0e, 0xff, 0xdb, 0x1e, 0x04, 0xf7, 0x1a, 0x04, 0x0c,
+ 0x0d, 0xda, 0x04, 0xe9, 0xff, 0x04, 0x00, 0x0c, 0xf9, 0xe4, 0xfb, 0xf6,
+ 0x14, 0xde, 0x1b, 0x00, 0x0b, 0xfe, 0x06, 0xf8, 0x0f, 0xdc, 0x01, 0xef,
+ 0xef, 0x0d, 0xf8, 0xf1, 0x0f, 0xf9, 0xf9, 0xdf, 0x0d, 0xe4, 0xd9, 0xf9,
+ 0x2b, 0xee, 0xe8, 0x09, 0x40, 0xf9, 0x2f, 0x0a, 0xfa, 0xe8, 0xe9, 0x01,
+ 0x0e, 0xe7, 0x23, 0x0a, 0xd0, 0x19, 0xd3, 0x0e, 0x04, 0xda, 0x2b, 0x0f,
+ 0xe7, 0xe6, 0xf3, 0xfb, 0x2c, 0xd3, 0x36, 0x19, 0x0e, 0xfe, 0x03, 0x1a,
+ 0x2e, 0xd0, 0x23, 0x32, 0xf1, 0xe1, 0x2a, 0x09, 0x1b, 0xf6, 0x29, 0x3e,
+ 0xce, 0x15, 0x0a, 0xe8, 0xec, 0xdf, 0x44, 0x28, 0xd9, 0xfd, 0xfa, 0x09,
+ 0xff, 0xe7, 0x08, 0xec, 0xf4, 0xef, 0x01, 0x19, 0x11, 0xf3, 0xeb, 0xeb,
+ 0xed, 0x1a, 0xdd, 0x15, 0x0f, 0x07, 0xfe, 0xeb, 0xff, 0xd6, 0xd5, 0x04,
+ 0xf5, 0x07, 0x10, 0xe6, 0x0c, 0xe4, 0xda, 0x0c, 0x08, 0xee, 0x06, 0xd8,
+ 0xf8, 0xf1, 0xe0, 0x01, 0x08, 0xfe, 0xf9, 0xf3, 0xdf, 0x03, 0xe6, 0xf4,
+ 0x0a, 0xff, 0xf2, 0xe0, 0xd9, 0xeb, 0x01, 0x10, 0x02, 0xfc, 0x0d, 0x14,
+ 0xea, 0xf8, 0x03, 0x18, 0xf3, 0x09, 0xfc, 0x0c, 0x0b, 0x1f, 0xf5, 0x05,
+ 0xf7, 0xf9, 0x00, 0xfd, 0x04, 0xfc, 0x16, 0x07, 0x00, 0xdf, 0xf9, 0xfa,
+ 0x0c, 0xfb, 0xf4, 0xf7, 0xf0, 0xeb, 0x07, 0x17, 0x20, 0xfb, 0xf0, 0xec,
+ 0x04, 0x00, 0xf8, 0xf2, 0x2d, 0xf9, 0xd9, 0x0b, 0x55, 0xec, 0x33, 0x26,
+ 0xf8, 0x0a, 0xf2, 0x0b, 0x25, 0xdf, 0x29, 0x05, 0xd1, 0x14, 0xe2, 0xf2,
+ 0x12, 0xdd, 0x28, 0xfc, 0xec, 0x08, 0xfd, 0x02, 0x3a, 0xe6, 0x29, 0x25,
+ 0x0d, 0x10, 0x09, 0x0a, 0x32, 0xf5, 0x17, 0x2d, 0xea, 0xfb, 0x35, 0xfc,
+ 0x28, 0xd0, 0x29, 0x2f, 0xcb, 0x06, 0x0f, 0x04, 0xf2, 0xf3, 0x34, 0x1c,
+ 0xf4, 0x08, 0x05, 0xfc, 0xfd, 0xed, 0x0f, 0xf8, 0xe9, 0xf0, 0x09, 0x16,
+ 0xfe, 0x02, 0xff, 0xd4, 0xea, 0x0a, 0xeb, 0x0c, 0xf8, 0xf4, 0x09, 0xf4,
+ 0xf2, 0x07, 0xd9, 0x0b, 0xfd, 0xe4, 0x1a, 0xef, 0x14, 0x08, 0xd8, 0xfc,
+ 0xf5, 0xe1, 0x03, 0xcf, 0xf1, 0x11, 0xdb, 0x15, 0x07, 0x10, 0xf8, 0xfc,
+ 0xe2, 0xf1, 0xf5, 0xde, 0xff, 0xe7, 0x01, 0xea, 0xee, 0xe9, 0x02, 0x0a,
+ 0x18, 0xec, 0xfe, 0xf9, 0x09, 0xf3, 0x0e, 0x02, 0xf1, 0xfc, 0xf9, 0x16,
+ 0x05, 0x07, 0x09, 0x0d, 0x0e, 0xf7, 0x04, 0xed, 0x04, 0xdb, 0x04, 0x04,
+ 0xf6, 0xdc, 0xee, 0xec, 0xf5, 0xfe, 0xf4, 0x02, 0xe4, 0x0b, 0xe0, 0x17,
+ 0x0a, 0xe0, 0xf7, 0xdc, 0x11, 0xd6, 0xfe, 0xfa, 0x35, 0xde, 0xe6, 0x06,
+ 0x44, 0xf9, 0x35, 0x0a, 0xfb, 0xff, 0xec, 0xfb, 0x16, 0xd9, 0x23, 0x0f,
+ 0xd4, 0xef, 0xdf, 0x06, 0x0b, 0xd9, 0x25, 0xff, 0xf8, 0xeb, 0xf4, 0x0a,
+ 0x20, 0xe5, 0x22, 0x1c, 0xeb, 0xf4, 0x0d, 0x0c, 0x19, 0xe1, 0x1e, 0x31,
+ 0xe9, 0xfb, 0x20, 0xf0, 0x23, 0xfe, 0x35, 0x28, 0xb4, 0x06, 0x28, 0xe7,
+ 0xfb, 0xe9, 0x2a, 0x1a, 0xef, 0x15, 0x0c, 0xed, 0xf1, 0x04, 0x0e, 0x0a,
+ 0xff, 0x16, 0x01, 0x04, 0x17, 0xea, 0xec, 0xdc, 0xf4, 0xf7, 0x04, 0x16,
+ 0x1f, 0x0a, 0x11, 0xef, 0x12, 0xdf, 0xd9, 0x0c, 0xf5, 0x10, 0x02, 0xf3,
+ 0x10, 0x03, 0xd3, 0xf5, 0x0b, 0x02, 0x00, 0xcb, 0xf6, 0x23, 0xf6, 0xf1,
+ 0x1f, 0xf9, 0xfc, 0xf0, 0xf6, 0xfe, 0xfa, 0xf8, 0xf9, 0xf4, 0xfb, 0x0a,
+ 0xd6, 0x29, 0x09, 0x02, 0x00, 0xfc, 0xfc, 0xee, 0xf5, 0x05, 0xfb, 0x1e,
+ 0xf1, 0xf1, 0xf3, 0x02, 0xec, 0x1c, 0x0c, 0x0e, 0x0b, 0x04, 0xf6, 0xe7,
+ 0x14, 0x08, 0x27, 0x01, 0xfe, 0xe5, 0xe7, 0x01, 0x1b, 0xf0, 0xf6, 0xff,
+ 0xf4, 0xe7, 0xee, 0x18, 0x0d, 0x08, 0xf8, 0xd6, 0x07, 0xf4, 0x08, 0xff,
+ 0x1d, 0x13, 0xe7, 0x0b, 0x42, 0xef, 0x28, 0x00, 0xf9, 0xf0, 0xf3, 0x00,
+ 0x15, 0xfd, 0x1a, 0x22, 0xc1, 0xf5, 0xe0, 0xf8, 0x09, 0xe6, 0x0e, 0x05,
+ 0xf9, 0xf6, 0x01, 0x01, 0x13, 0xdc, 0x1f, 0x0d, 0xfb, 0x04, 0x08, 0x0b,
+ 0x15, 0xdb, 0x28, 0x34, 0xed, 0x0b, 0x3a, 0xed, 0x16, 0xe3, 0x39, 0x32,
+ 0xc4, 0x0b, 0x20, 0xe7, 0xf7, 0x02, 0x35, 0x24, 0xfc, 0xe8, 0x1c, 0xf8,
+ 0xf1, 0xfa, 0x0c, 0x1d, 0xf2, 0x05, 0xff, 0x12, 0x0f, 0x01, 0xec, 0xea,
+ 0xf0, 0x03, 0xe7, 0x15, 0xfd, 0x05, 0x08, 0xe0, 0x1b, 0xf8, 0xe1, 0x1e,
+ 0xed, 0xdc, 0x11, 0xeb, 0xfd, 0x1a, 0xeb, 0x09, 0xf9, 0xf3, 0x00, 0xe8,
+ 0xe6, 0x08, 0xf7, 0xde, 0x1e, 0x00, 0x00, 0x00, 0xe4, 0x09, 0xf2, 0xf8,
+ 0xe7, 0xf2, 0x0d, 0xfa, 0xe2, 0x0f, 0x04, 0x08, 0xf2, 0x13, 0xf8, 0xf9,
+ 0xf1, 0xff, 0x03, 0x11, 0x12, 0xe9, 0xf4, 0x13, 0x07, 0x0c, 0x13, 0x2b,
+ 0xf7, 0xdd, 0xf9, 0xe9, 0xfa, 0xdb, 0x1d, 0xf6, 0xf6, 0xf9, 0xe4, 0xf6,
+ 0x0d, 0xeb, 0x0d, 0x08, 0xe7, 0xe7, 0xf2, 0x03, 0x1d, 0xd9, 0xd8, 0xe4,
+ 0xf7, 0xea, 0xdc, 0xdc, 0x26, 0x02, 0xee, 0xfa, 0x38, 0xfc, 0x1a, 0xef,
+ 0xda, 0xf1, 0xdf, 0x0b, 0x1a, 0xe0, 0x16, 0x16, 0xdc, 0x04, 0xfa, 0xf7,
+ 0xee, 0x02, 0x25, 0x02, 0xf5, 0xfb, 0x08, 0xf6, 0x11, 0xf5, 0x12, 0x08,
+ 0xf4, 0xe3, 0x1b, 0xf5, 0x3a, 0xdc, 0x20, 0x2e, 0xe0, 0xf5, 0x30, 0xe4,
+ 0x09, 0xf8, 0x3c, 0x45, 0xd3, 0x08, 0x23, 0xd8, 0x09, 0xe4, 0x35, 0x30,
+ 0xe4, 0xfe, 0x07, 0xf6, 0x05, 0x01, 0x05, 0xff, 0xf6, 0x0d, 0x02, 0xfd,
+ 0x03, 0x05, 0x0d, 0x00, 0xf5, 0xd6, 0xcf, 0x19, 0x06, 0xee, 0x0d, 0xf2,
+ 0x01, 0x18, 0xef, 0x12, 0x04, 0x02, 0x21, 0xd9, 0x02, 0x0d, 0xeb, 0xe9,
+ 0x13, 0x08, 0x15, 0xf0, 0xee, 0x03, 0xec, 0x06, 0x17, 0xed, 0x00, 0x1a,
+ 0xee, 0xf2, 0xfc, 0x09, 0xec, 0xf8, 0xf8, 0x18, 0xf4, 0x13, 0x04, 0xf6,
+ 0x02, 0xf0, 0xfc, 0xfe, 0xe3, 0x01, 0x0a, 0x1c, 0x1b, 0xec, 0x0e, 0x01,
+ 0xfb, 0x08, 0x11, 0xf5, 0x00, 0x14, 0xe6, 0x12, 0x07, 0xf4, 0x15, 0x07,
+ 0xfc, 0xfb, 0xf5, 0xf1, 0x01, 0x21, 0x01, 0xe9, 0xe8, 0xef, 0xdb, 0xdf,
+ 0x1f, 0x0a, 0xdd, 0xd1, 0x16, 0x04, 0xfd, 0xe1, 0x24, 0xf0, 0xec, 0xf4,
+ 0x38, 0xe1, 0x16, 0xfd, 0xe0, 0xec, 0xe7, 0x0c, 0x2a, 0x04, 0x0c, 0x17,
+ 0xdc, 0xe8, 0xf2, 0x03, 0xec, 0xfd, 0x19, 0xfe, 0xf3, 0xf0, 0xf3, 0xfb,
+ 0x18, 0xdf, 0x1c, 0x00, 0x09, 0xf4, 0x18, 0x0b, 0x1f, 0xf6, 0x34, 0x22,
+ 0xf4, 0x22, 0x45, 0xeb, 0x23, 0xcf, 0x32, 0x34, 0xf2, 0xf9, 0x29, 0xd4,
+ 0xf7, 0x0b, 0x38, 0x2a, 0x09, 0xe6, 0x05, 0x01, 0x0b, 0xfe, 0x17, 0xfb,
+ 0x00, 0xeb, 0x08, 0xfd, 0x0c, 0x02, 0x1d, 0xea, 0xfa, 0x0b, 0xeb, 0x09,
+ 0xfe, 0xfe, 0x10, 0xe0, 0xf6, 0x06, 0xf0, 0x15, 0xf3, 0x09, 0x11, 0xe4,
+ 0xf9, 0x07, 0xe1, 0xed, 0x17, 0x05, 0x0c, 0xe1, 0xdb, 0xf2, 0xf8, 0xea,
+ 0x22, 0xe9, 0x02, 0x00, 0xfd, 0xe7, 0xf2, 0xf8, 0xf9, 0xfc, 0xfa, 0xe8,
+ 0xe8, 0xeb, 0xe9, 0x0d, 0x04, 0xf8, 0xf8, 0xf7, 0xf8, 0x0d, 0x03, 0x0c,
+ 0x13, 0xf2, 0x0f, 0xf9, 0xe6, 0xfd, 0x0f, 0x19, 0x08, 0xf7, 0xfa, 0x01,
+ 0xf3, 0x12, 0x1e, 0x05, 0x0a, 0x09, 0xfd, 0x0b, 0x07, 0x08, 0x02, 0xfc,
+ 0xd6, 0xe8, 0x14, 0x01, 0x13, 0x19, 0xef, 0xda, 0x0e, 0x0a, 0x07, 0xef,
+ 0x34, 0xe0, 0x05, 0x1e, 0x4e, 0xe9, 0x19, 0xff, 0xe1, 0x04, 0xfb, 0x0e,
+ 0x11, 0x05, 0x1f, 0x15, 0xd4, 0xec, 0xf9, 0xe7, 0xf9, 0xfc, 0x25, 0xff,
+ 0x06, 0xf2, 0x01, 0xf6, 0x2a, 0x17, 0x24, 0x11, 0xf3, 0x1a, 0x1f, 0xfb,
+ 0x32, 0xeb, 0x33, 0x2f, 0x00, 0x08, 0x2c, 0xf0, 0x26, 0xf4, 0x25, 0x36,
+ 0xd9, 0xf1, 0x1a, 0xd5, 0xec, 0xf9, 0x32, 0x27, 0xfc, 0xf4, 0xf0, 0xe3,
+ 0xfa, 0x0c, 0x16, 0x17, 0xfa, 0xf9, 0xe5, 0x1f, 0x1f, 0xfa, 0xff, 0xfd,
+ 0x0d, 0x02, 0xe9, 0x0e, 0xf0, 0x12, 0x09, 0xda, 0x02, 0xea, 0xe5, 0x0a,
+ 0xff, 0x03, 0x13, 0xf0, 0x0a, 0xf9, 0xe9, 0xff, 0x10, 0xfc, 0x1a, 0xf3,
+ 0xf7, 0x0f, 0xf4, 0xfa, 0xf4, 0x05, 0x10, 0x0a, 0xdd, 0x09, 0xf7, 0xf0,
+ 0xe5, 0x07, 0x07, 0xfa, 0x02, 0xd7, 0xf8, 0xf7, 0x01, 0xfb, 0x0e, 0xf8,
+ 0x07, 0x0f, 0xfe, 0x03, 0x12, 0x05, 0x09, 0x13, 0xf8, 0xdc, 0xfd, 0x27,
+ 0x0f, 0xec, 0xf7, 0x07, 0x00, 0xfc, 0x12, 0xf8, 0xfb, 0xea, 0xe4, 0xe9,
+ 0xe9, 0xe0, 0xff, 0xdc, 0xd6, 0xeb, 0xf2, 0xf7, 0x0d, 0x1b, 0xe9, 0xc4,
+ 0x06, 0x00, 0xfd, 0x04, 0x46, 0xf9, 0xe9, 0x13, 0x2d, 0x0c, 0x1f, 0xf8,
+ 0xd3, 0x0c, 0x14, 0x11, 0x05, 0xe5, 0x27, 0x08, 0xc5, 0xef, 0xdf, 0xdd,
+ 0x04, 0xf8, 0x11, 0x10, 0xf0, 0xe7, 0xfb, 0x03, 0x3c, 0xe7, 0x14, 0x0c,
+ 0xf4, 0xf6, 0x1b, 0x0a, 0x23, 0xf2, 0x2d, 0x1a, 0x08, 0xff, 0x32, 0xe7,
+ 0x1a, 0x05, 0x2b, 0x34, 0xf1, 0x0a, 0x00, 0xe8, 0x02, 0xdf, 0x2c, 0x2a,
+ 0x03, 0xe6, 0xfc, 0xef, 0xfc, 0xe4, 0x03, 0x01, 0x03, 0xee, 0xe9, 0x15,
+ 0x05, 0x03, 0x13, 0x11, 0x0e, 0xee, 0xf5, 0x22, 0x1b, 0x0e, 0xfd, 0xf3,
+ 0x0a, 0x02, 0xdd, 0x20, 0xeb, 0x06, 0xf8, 0xe2, 0x06, 0x0e, 0xde, 0x0d,
+ 0xf9, 0x16, 0x1c, 0x0c, 0xe0, 0xf0, 0xec, 0x0c, 0x0f, 0xf2, 0x27, 0x1d,
+ 0xde, 0xe6, 0xf0, 0xf9, 0xf0, 0x02, 0x0a, 0x07, 0x06, 0xf9, 0x0f, 0xfa,
+ 0xf0, 0xee, 0xf1, 0xf7, 0xff, 0x02, 0x0b, 0x0d, 0x1b, 0xee, 0xf6, 0x05,
+ 0xff, 0x1c, 0x17, 0x04, 0x05, 0x17, 0x00, 0xff, 0x0d, 0xf3, 0x23, 0x10,
+ 0xfd, 0x05, 0xfb, 0xea, 0x03, 0x10, 0x07, 0xd7, 0xf7, 0xff, 0xf3, 0xf1,
+ 0x17, 0xed, 0xd3, 0xcb, 0x14, 0x1c, 0xf5, 0x03, 0x47, 0xf6, 0xf7, 0xf2,
+ 0x3e, 0xf2, 0x22, 0xf4, 0xed, 0xfc, 0xee, 0x0b, 0xf4, 0xf1, 0x25, 0x10,
+ 0xd0, 0xf6, 0x00, 0xef, 0x10, 0xfc, 0x15, 0xe5, 0xdb, 0xf3, 0xea, 0x10,
+ 0x22, 0xf2, 0x2b, 0x11, 0xf9, 0x0a, 0xfc, 0xf5, 0x53, 0x16, 0x25, 0x43,
+ 0xe0, 0x0e, 0x13, 0xfc, 0x2d, 0xe2, 0x55, 0x65, 0xf4, 0x08, 0x01, 0xdf,
+ 0x0a, 0x00, 0x49, 0x1c, 0xfe, 0xdf, 0xef, 0xf2, 0xf9, 0xf6, 0xfd, 0xff,
+ 0xf3, 0x02, 0xf6, 0x14, 0x0b, 0xe8, 0x09, 0xfc, 0xfc, 0xe2, 0xe5, 0x11,
+ 0x03, 0x09, 0xfb, 0x06, 0x10, 0x1a, 0xf3, 0x0d, 0xfa, 0x0a, 0xd5, 0xf5,
+ 0x1a, 0x11, 0xf2, 0xfc, 0x1f, 0xfe, 0x0e, 0xe4, 0xef, 0xd7, 0xee, 0x06,
+ 0x1e, 0x04, 0x12, 0x28, 0xf7, 0x0e, 0x06, 0xf8, 0xee, 0xf0, 0x1a, 0x01,
+ 0xf7, 0xfd, 0x03, 0x11, 0x19, 0x10, 0x04, 0xfb, 0xd7, 0xfa, 0x16, 0x06,
+ 0x07, 0x23, 0xfa, 0x14, 0x11, 0xf1, 0x12, 0x10, 0x04, 0xe1, 0xee, 0xf7,
+ 0x21, 0x0e, 0x0a, 0x0a, 0xf8, 0x07, 0x0a, 0xee, 0x03, 0x1f, 0xfa, 0xc4,
+ 0xec, 0x12, 0x01, 0x1e, 0xfd, 0xf1, 0xe8, 0xcc, 0xf4, 0x17, 0xff, 0xdd,
+ 0x45, 0x10, 0xee, 0xfa, 0x3d, 0xe7, 0x27, 0xdd, 0xd7, 0xf9, 0xf4, 0xf6,
+ 0x06, 0xf8, 0x1e, 0x13, 0xe7, 0xe2, 0xf1, 0xe3, 0xf3, 0xf7, 0x18, 0x12,
+ 0xe4, 0x0a, 0xdb, 0xff, 0xff, 0xfe, 0x20, 0x09, 0x00, 0xf7, 0x23, 0xf6,
+ 0x2d, 0x14, 0x26, 0x28, 0xe5, 0xff, 0x0f, 0xe3, 0x1d, 0xe8, 0x56, 0x43,
+ 0xe7, 0xfb, 0xf9, 0xe6, 0xe9, 0xe2, 0x19, 0x19, 0x08, 0xfa, 0xf3, 0xe5,
+ 0x23, 0x07, 0x0f, 0xf8, 0xf8, 0xf3, 0xfc, 0x11, 0x2a, 0x05, 0xf4, 0xf1,
+ 0xfa, 0xfb, 0xf1, 0x1e, 0x13, 0x0f, 0xf9, 0xf5, 0xfa, 0x09, 0xf9, 0x03,
+ 0xf0, 0xf0, 0xe7, 0xec, 0xf1, 0x0c, 0xe6, 0xee, 0xf6, 0x20, 0x0f, 0xe9,
+ 0x00, 0xf4, 0xfe, 0xf0, 0x13, 0x0a, 0x17, 0x13, 0xee, 0x13, 0xfb, 0xff,
+ 0xf8, 0xfd, 0xf4, 0xe2, 0xe8, 0x06, 0xfc, 0x14, 0x03, 0x17, 0x00, 0x03,
+ 0xe6, 0xfd, 0xf2, 0x12, 0x12, 0x20, 0xeb, 0x10, 0x02, 0xf7, 0x13, 0x0d,
+ 0x11, 0xfd, 0xde, 0xf5, 0x07, 0xf3, 0x04, 0xff, 0x06, 0x05, 0xfb, 0xea,
+ 0xf0, 0x0a, 0x00, 0xb5, 0xe8, 0x1a, 0x03, 0xfe, 0x0d, 0x1a, 0xe7, 0xc0,
+ 0xd6, 0xdc, 0xf6, 0xf8, 0x39, 0xf5, 0xd5, 0xf8, 0x22, 0xfa, 0x22, 0x05,
+ 0xd0, 0xf4, 0x2d, 0xfc, 0x00, 0x0a, 0x1b, 0xfc, 0xe6, 0x09, 0x14, 0xfa,
+ 0x00, 0x1d, 0x1a, 0xfd, 0xf3, 0x18, 0xfc, 0xeb, 0x15, 0xf5, 0x0e, 0x0a,
+ 0xf3, 0xf1, 0x1b, 0x05, 0x14, 0x03, 0x2d, 0x27, 0xfb, 0x18, 0x22, 0xef,
+ 0xf6, 0x06, 0x28, 0x2b, 0xde, 0xec, 0xef, 0xe8, 0xd3, 0xfe, 0x17, 0x12,
+ 0x01, 0x13, 0x05, 0xf7, 0x00, 0xde, 0xf3, 0xe5, 0x03, 0xfb, 0x07, 0x0b,
+ 0xfd, 0xdc, 0xdf, 0x03, 0x0c, 0x00, 0xfa, 0x06, 0x0e, 0x02, 0x05, 0xfa,
+ 0xfd, 0xed, 0x09, 0x0c, 0xfd, 0xfb, 0x0c, 0xf0, 0xe4, 0x04, 0xd6, 0xf3,
+ 0x09, 0x0a, 0xf9, 0xf8, 0xe2, 0xef, 0xdf, 0xf0, 0xf8, 0x03, 0x0f, 0x20,
+ 0xf4, 0xe3, 0xf8, 0x02, 0xe2, 0xe5, 0x25, 0x0f, 0xeb, 0xf8, 0xe9, 0xfd,
+ 0x04, 0x0c, 0x0c, 0xfe, 0x01, 0x08, 0xfc, 0xfc, 0x1b, 0x01, 0xe5, 0x13,
+ 0xf9, 0xe8, 0x07, 0x20, 0xfe, 0x06, 0xec, 0xfe, 0x09, 0xef, 0x14, 0x04,
+ 0x0b, 0xf5, 0xe7, 0xff, 0x0a, 0x02, 0x09, 0xe9, 0xc4, 0x16, 0x0d, 0xe7,
+ 0x15, 0x14, 0xf1, 0xd0, 0xec, 0xe7, 0xf0, 0xf0, 0x33, 0x05, 0xda, 0xf2,
+ 0x0b, 0x08, 0x38, 0x01, 0x07, 0xfd, 0xd8, 0x06, 0xd9, 0xf0, 0x16, 0x1f,
+ 0xff, 0xf7, 0xe0, 0xd8, 0xf3, 0xf7, 0x12, 0x08, 0x0e, 0x05, 0xf6, 0x03,
+ 0xef, 0x1b, 0x12, 0xf4, 0xe8, 0x0f, 0x02, 0xfd, 0xf2, 0x16, 0x26, 0x22,
+ 0xe0, 0x07, 0xf7, 0xe6, 0xeb, 0x16, 0x22, 0x1a, 0x0b, 0x01, 0xf5, 0xea,
+ 0xd2, 0x22, 0x0f, 0x13, 0x15, 0x08, 0xf0, 0xfb, 0xed, 0x11, 0xf3, 0xe9,
+ 0xff, 0xde, 0x0a, 0x18, 0x0f, 0x02, 0xfb, 0xf9, 0xfb, 0xe8, 0x12, 0x18,
+ 0x01, 0xf4, 0xf6, 0xf8, 0xf0, 0x1f, 0x24, 0x15, 0xf5, 0x00, 0x1c, 0xf9,
+ 0x01, 0x0a, 0x11, 0xd5, 0x01, 0x12, 0x02, 0xec, 0xfd, 0x07, 0xf2, 0xea,
+ 0xf9, 0xff, 0xf7, 0xfb, 0x15, 0xec, 0xe5, 0x01, 0xeb, 0x05, 0xf9, 0x10,
+ 0xfe, 0x28, 0xe5, 0x0a, 0xeb, 0x1b, 0x0e, 0xf9, 0xde, 0x02, 0x15, 0x0a,
+ 0xff, 0xfe, 0x11, 0x24, 0x03, 0xf8, 0x00, 0x08, 0xfd, 0x0e, 0xeb, 0xf3,
+ 0xf6, 0xf7, 0x14, 0x0e, 0xfc, 0xf5, 0xde, 0xf5, 0x9e, 0xfe, 0xff, 0xff,
+ 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xab, 0x01, 0x00, 0x00,
+ 0xfa, 0xfd, 0xff, 0xff, 0xa2, 0xff, 0xff, 0xff, 0xba, 0x00, 0x00, 0x00,
+ 0x24, 0xfc, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x54, 0x4f, 0x43, 0x4f,
+ 0x20, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, 0x2e, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x24, 0xfb, 0xff, 0xff,
+ 0x68, 0x01, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00,
+ 0x90, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0xce, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x03, 0x00, 0x00, 0x00,
+ 0x1c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x1a, 0xff, 0xff, 0xff, 0x00, 0x00, 0x80, 0x3f, 0x01, 0x00, 0x00, 0x00,
+ 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0e, 0x00, 0x18, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x10, 0x00,
+ 0x07, 0x00, 0x14, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
+ 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0xc4, 0xfc, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,
+ 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00,
+ 0x16, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x10, 0x00,
+ 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x38, 0x00, 0x00, 0x00,
+ 0x2c, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00,
+ 0x14, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x07, 0x00,
+ 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00,
+ 0x1a, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x07, 0x00, 0x14, 0x00,
+ 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x02, 0x00, 0x00, 0x00,
+ 0x38, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x00, 0x08, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0x31, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x0a, 0x00, 0x00, 0x00, 0x34, 0x04, 0x00, 0x00, 0xcc, 0x03, 0x00, 0x00,
+ 0x4c, 0x03, 0x00, 0x00, 0xdc, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00,
+ 0x20, 0x02, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00,
+ 0x70, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0xfc, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x09, 0x44, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+ 0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xf4, 0xfb, 0xff, 0xff,
+ 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x3b, 0x0e, 0x00, 0x00, 0x00, 0x6c, 0x61, 0x62, 0x65,
+ 0x6c, 0x73, 0x5f, 0x73, 0x6f, 0x66, 0x74, 0x6d, 0x61, 0x78, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0e, 0x00, 0x1a, 0x00, 0x08, 0x00, 0x07, 0x00, 0x0c, 0x00,
+ 0x10, 0x00, 0x14, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
+ 0xb4, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00,
+ 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00,
+ 0x12, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0x11, 0x1e, 0x23, 0x3a, 0x9e, 0xa1, 0x15, 0x39,
+ 0x23, 0x69, 0x45, 0x3a, 0x09, 0xe4, 0xe4, 0x39, 0x65, 0xd7, 0x13, 0x3a,
+ 0xe0, 0xb2, 0xfd, 0x39, 0x1b, 0xc1, 0x53, 0x3a, 0xc2, 0x50, 0x2d, 0x3a,
+ 0x12, 0x00, 0x00, 0x00, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x77, 0x65,
+ 0x69, 0x67, 0x68, 0x74, 0x73, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x3a, 0xfd, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x09, 0x54, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2c, 0xfd, 0xff, 0xff,
+ 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0xb5, 0xfa, 0xfa, 0x39, 0x1f, 0x00, 0x00, 0x00, 0x66, 0x69, 0x6e, 0x61,
+ 0x6c, 0x5f, 0x66, 0x63, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73,
+ 0x2f, 0x72, 0x65, 0x61, 0x64, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70,
+ 0x6f, 0x73, 0x65, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0xa0, 0x0f, 0x00, 0x00, 0xa2, 0xfd, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09,
+ 0x58, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x74, 0xfe, 0xff, 0xff, 0x30, 0x00, 0x00, 0x00,
+ 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf2, 0xdd, 0xbb, 0x3d,
+ 0x01, 0x00, 0x00, 0x00, 0x32, 0xa3, 0x25, 0x41, 0x01, 0x00, 0x00, 0x00,
+ 0xf6, 0xa0, 0x50, 0xc1, 0x05, 0x00, 0x00, 0x00, 0x61, 0x64, 0x64, 0x5f,
+ 0x31, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x0e, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02,
+ 0x2c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x0f, 0x00, 0x00, 0x00, 0x52, 0x65, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f,
+ 0x32, 0x2f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x4a, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09,
+ 0x5c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x1c, 0xff, 0xff, 0xff, 0x30, 0x00, 0x00, 0x00,
+ 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x50, 0xd0, 0x3d,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xcf, 0x41, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x52, 0x65, 0x73, 0x68,
+ 0x61, 0x70, 0x65, 0x5f, 0x32, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0xc2, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09,
+ 0x58, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x94, 0xff, 0xff, 0xff, 0x2c, 0x00, 0x00, 0x00,
+ 0x20, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x01, 0x00, 0x00, 0x00, 0x50, 0x50, 0xd0, 0x3d, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0xcf, 0x41, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x09, 0x00, 0x00, 0x00, 0x52, 0x65, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f,
+ 0x31, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0xa8, 0x07, 0x00, 0x00, 0x2e, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09,
+ 0x60, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x14, 0x00, 0x04, 0x00, 0x08, 0x00,
+ 0x0c, 0x00, 0x10, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00,
+ 0x20, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x01, 0x00, 0x00, 0x00, 0x3a, 0x6a, 0xac, 0x3d, 0x01, 0x00, 0x00, 0x00,
+ 0xd0, 0xbd, 0xab, 0x41, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x52, 0x65, 0x6c, 0x75, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
+ 0x14, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xaa, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x02, 0x44, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x2c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x9c, 0xff, 0xff, 0xff,
+ 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x96, 0x08, 0x29, 0x38, 0x0b, 0x00, 0x00, 0x00,
+ 0x4d, 0x61, 0x74, 0x4d, 0x75, 0x6c, 0x5f, 0x62, 0x69, 0x61, 0x73, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00,
+ 0x18, 0x00, 0x08, 0x00, 0x07, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x14, 0x00,
+ 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xa0, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x0c, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00,
+ 0x0c, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+ 0x9a, 0xbb, 0x84, 0x38, 0x83, 0x84, 0x73, 0x37, 0x5b, 0xa3, 0xa0, 0x38,
+ 0x16, 0x41, 0x3a, 0x38, 0xc7, 0x9a, 0x70, 0x38, 0xed, 0x70, 0x4e, 0x38,
+ 0x54, 0x4f, 0xac, 0x38, 0xfd, 0x07, 0x8d, 0x38, 0x0b, 0x00, 0x00, 0x00,
+ 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x44, 0x5f, 0x62, 0x69, 0x61, 0x73, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0xe6, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x19,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x05, 0x00,
+ 0x06, 0x00, 0x00, 0x00, 0x00, 0x16, 0x0a, 0x00, 0x0e, 0x00, 0x07, 0x00,
+ 0x00, 0x00, 0x08, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x0c, 0x00, 0x07, 0x00,
+ 0x00, 0x00, 0x08, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x00, 0x00};
+const int g_model_len = 18712;
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/micro_features_model.h b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/micro_features_model.h
new file mode 100644
index 000000000..deec2d646
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/micro_features_model.h
@@ -0,0 +1,27 @@
+/* Copyright 2020 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+// This is a standard TensorFlow Lite FlatBuffer model file that has been
+// converted into a C data array, so it can be easily compiled into a binary
+// for devices that don't have a file system. It was created using the command:
+// xxd -i model.tflite > model.cc
+
+#ifndef TENSORFLOW_LITE_MICRO_EXAMPLES_MICRO_SPEECH_MICRO_FEATURES_MODEL_H_
+#define TENSORFLOW_LITE_MICRO_EXAMPLES_MICRO_SPEECH_MICRO_FEATURES_MODEL_H_
+
+extern const unsigned char g_model[];
+extern const int g_model_len;
+
+#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_MICRO_SPEECH_MICRO_FEATURES_MODEL_H_
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/micro_speech.ino b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/micro_speech.ino
new file mode 100644
index 000000000..b995289b6
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/micro_speech.ino
@@ -0,0 +1,216 @@
+/* Copyright 2020 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+#include
+
+#include "audio_provider.h"
+#include "command_responder.h"
+#include "feature_provider.h"
+#include "main_functions.h"
+#include "micro_features_micro_model_settings.h"
+#include "micro_features_model.h"
+#include "recognize_commands.h"
+#include "tensorflow/lite/micro/micro_error_reporter.h"
+#include "tensorflow/lite/micro/micro_interpreter.h"
+#include "tensorflow/lite/micro/micro_mutable_op_resolver.h"
+#include "tensorflow/lite/micro/system_setup.h"
+#include "tensorflow/lite/schema/schema_generated.h"
+
+#undef PROFILE_MICRO_SPEECH
+
+// Globals, used for compatibility with Arduino-style sketches.
+namespace {
+tflite::ErrorReporter* error_reporter = nullptr;
+const tflite::Model* model = nullptr;
+tflite::MicroInterpreter* interpreter = nullptr;
+TfLiteTensor* model_input = nullptr;
+FeatureProvider* feature_provider = nullptr;
+RecognizeCommands* recognizer = nullptr;
+int32_t previous_time = 0;
+
+// Create an area of memory to use for input, output, and intermediate arrays.
+// The size of this will depend on the model you're using, and may need to be
+// determined by experimentation.
+constexpr int kTensorArenaSize = 10 * 1024;
+uint8_t tensor_arena[kTensorArenaSize];
+int8_t feature_buffer[kFeatureElementCount];
+int8_t* model_input_buffer = nullptr;
+} // namespace
+
+// The name of this function is important for Arduino compatibility.
+void setup() {
+ tflite::InitializeTarget();
+
+ // Set up logging. Google style is to avoid globals or statics because of
+ // lifetime uncertainty, but since this has a trivial destructor it's okay.
+ // NOLINTNEXTLINE(runtime-global-variables)
+ static tflite::MicroErrorReporter micro_error_reporter;
+ error_reporter = µ_error_reporter;
+
+ // Map the model into a usable data structure. This doesn't involve any
+ // copying or parsing, it's a very lightweight operation.
+ model = tflite::GetModel(g_model);
+ if (model->version() != TFLITE_SCHEMA_VERSION) {
+ TF_LITE_REPORT_ERROR(error_reporter,
+ "Model provided is schema version %d not equal "
+ "to supported version %d.",
+ model->version(), TFLITE_SCHEMA_VERSION);
+ return;
+ }
+
+ // Pull in only the operation implementations we need.
+ // This relies on a complete list of all the ops needed by this graph.
+ // An easier approach is to just use the AllOpsResolver, but this will
+ // incur some penalty in code space for op implementations that are not
+ // needed by this graph.
+ //
+ // tflite::AllOpsResolver resolver;
+ // NOLINTNEXTLINE(runtime-global-variables)
+ static tflite::MicroMutableOpResolver<4> micro_op_resolver(error_reporter);
+ if (micro_op_resolver.AddDepthwiseConv2D() != kTfLiteOk) {
+ return;
+ }
+ if (micro_op_resolver.AddFullyConnected() != kTfLiteOk) {
+ return;
+ }
+ if (micro_op_resolver.AddSoftmax() != kTfLiteOk) {
+ return;
+ }
+ if (micro_op_resolver.AddReshape() != kTfLiteOk) {
+ return;
+ }
+
+ // Build an interpreter to run the model with.
+ static tflite::MicroInterpreter static_interpreter(
+ model, micro_op_resolver, tensor_arena, kTensorArenaSize, error_reporter);
+ interpreter = &static_interpreter;
+
+ // Allocate memory from the tensor_arena for the model's tensors.
+ TfLiteStatus allocate_status = interpreter->AllocateTensors();
+ if (allocate_status != kTfLiteOk) {
+ TF_LITE_REPORT_ERROR(error_reporter, "AllocateTensors() failed");
+ return;
+ }
+
+ // Get information about the memory area to use for the model's input.
+ model_input = interpreter->input(0);
+ if ((model_input->dims->size != 2) || (model_input->dims->data[0] != 1) ||
+ (model_input->dims->data[1] !=
+ (kFeatureSliceCount * kFeatureSliceSize)) ||
+ (model_input->type != kTfLiteInt8)) {
+ TF_LITE_REPORT_ERROR(error_reporter,
+ "Bad input tensor parameters in model");
+ return;
+ }
+ model_input_buffer = model_input->data.int8;
+
+ // Prepare to access the audio spectrograms from a microphone or other source
+ // that will provide the inputs to the neural network.
+ // NOLINTNEXTLINE(runtime-global-variables)
+ static FeatureProvider static_feature_provider(kFeatureElementCount,
+ feature_buffer);
+ feature_provider = &static_feature_provider;
+
+ static RecognizeCommands static_recognizer(error_reporter);
+ recognizer = &static_recognizer;
+
+ previous_time = 0;
+
+ // start the audio
+ TfLiteStatus init_status = InitAudioRecording(error_reporter);
+ if (init_status != kTfLiteOk) {
+ TF_LITE_REPORT_ERROR(error_reporter, "Unable to initialize audio");
+ return;
+ }
+
+ TF_LITE_REPORT_ERROR(error_reporter, "Initialization complete");
+}
+
+// The name of this function is important for Arduino compatibility.
+void loop() {
+#ifdef PROFILE_MICRO_SPEECH
+ const uint32_t prof_start = millis();
+ static uint32_t prof_count = 0;
+ static uint32_t prof_sum = 0;
+ static uint32_t prof_min = std::numeric_limits::max();
+ static uint32_t prof_max = 0;
+#endif // PROFILE_MICRO_SPEECH
+
+ // Fetch the spectrogram for the current time.
+ const int32_t current_time = LatestAudioTimestamp();
+ int how_many_new_slices = 0;
+ TfLiteStatus feature_status = feature_provider->PopulateFeatureData(
+ error_reporter, previous_time, current_time, &how_many_new_slices);
+ if (feature_status != kTfLiteOk) {
+ TF_LITE_REPORT_ERROR(error_reporter, "Feature generation failed");
+ return;
+ }
+ previous_time += how_many_new_slices * kFeatureSliceStrideMs;
+ // If no new audio samples have been received since last time, don't bother
+ // running the network model.
+ if (how_many_new_slices == 0) {
+ return;
+ }
+
+ // Copy feature buffer to input tensor
+ for (int i = 0; i < kFeatureElementCount; i++) {
+ model_input_buffer[i] = feature_buffer[i];
+ }
+
+ // Run the model on the spectrogram input and make sure it succeeds.
+ TfLiteStatus invoke_status = interpreter->Invoke();
+ if (invoke_status != kTfLiteOk) {
+ TF_LITE_REPORT_ERROR(error_reporter, "Invoke failed");
+ return;
+ }
+
+ // Obtain a pointer to the output tensor
+ TfLiteTensor* output = interpreter->output(0);
+ // Determine whether a command was recognized based on the output of inference
+ const char* found_command = nullptr;
+ uint8_t score = 0;
+ bool is_new_command = false;
+ TfLiteStatus process_status = recognizer->ProcessLatestResults(
+ output, current_time, &found_command, &score, &is_new_command);
+ if (process_status != kTfLiteOk) {
+ TF_LITE_REPORT_ERROR(error_reporter,
+ "RecognizeCommands::ProcessLatestResults() failed");
+ return;
+ }
+ // Do something based on the recognized command. The default implementation
+ // just prints to the error console, but you should replace this with your
+ // own function for a real application.
+ RespondToCommand(error_reporter, current_time, found_command, score,
+ is_new_command);
+
+#ifdef PROFILE_MICRO_SPEECH
+ const uint32_t prof_end = millis();
+ if (++prof_count > 10) {
+ uint32_t elapsed = prof_end - prof_start;
+ prof_sum += elapsed;
+ if (elapsed < prof_min) {
+ prof_min = elapsed;
+ }
+ if (elapsed > prof_max) {
+ prof_max = elapsed;
+ }
+ if (prof_count % 300 == 0) {
+ TF_LITE_REPORT_ERROR(error_reporter,
+ "## time: min %dms max %dms avg %dms", prof_min,
+ prof_max, prof_sum / prof_count);
+ }
+ }
+#endif // PROFILE_MICRO_SPEECH
+}
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/recognize_commands.cpp b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/recognize_commands.cpp
new file mode 100644
index 000000000..552cf58d3
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/recognize_commands.cpp
@@ -0,0 +1,159 @@
+/* Copyright 2017 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+#include "recognize_commands.h"
+
+#include
+
+#undef DEBUG_MICRO_SPEECH
+
+RecognizeCommands::RecognizeCommands(tflite::ErrorReporter* error_reporter,
+ int32_t average_window_duration_ms,
+ uint8_t detection_threshold,
+ int32_t suppression_ms,
+ int32_t minimum_count)
+ : error_reporter_(error_reporter),
+ average_window_duration_ms_(average_window_duration_ms),
+ detection_threshold_(detection_threshold),
+ suppression_ms_(suppression_ms),
+ minimum_count_(minimum_count),
+ previous_results_(error_reporter) {
+ previous_top_label_ = kCategoryLabels[0]; // silence
+ previous_top_label_time_ = std::numeric_limits::min();
+}
+
+TfLiteStatus RecognizeCommands::ProcessLatestResults(
+ const TfLiteTensor* latest_results, const int32_t current_time_ms,
+ const char** found_command, uint8_t* score, bool* is_new_command) {
+ if ((latest_results->dims->size != 2) ||
+ (latest_results->dims->data[0] != 1) ||
+ (latest_results->dims->data[1] != kCategoryCount)) {
+ TF_LITE_REPORT_ERROR(
+ error_reporter_,
+ "The results for recognition should contain %d elements, but there are "
+ "%d in an %d-dimensional shape",
+ kCategoryCount, latest_results->dims->data[1],
+ latest_results->dims->size);
+ return kTfLiteError;
+ }
+
+ if (latest_results->type != kTfLiteInt8) {
+ TF_LITE_REPORT_ERROR(
+ error_reporter_,
+ "The results for recognition should be int8_t elements, but are %d",
+ latest_results->type);
+ return kTfLiteError;
+ }
+
+ if ((!previous_results_.empty()) &&
+ (current_time_ms < previous_results_.front().time_)) {
+ TF_LITE_REPORT_ERROR(
+ error_reporter_,
+ "Results must be fed in increasing time order, but received a "
+ "timestamp of %d that was earlier than the previous one of %d",
+ current_time_ms, previous_results_.front().time_);
+ return kTfLiteError;
+ }
+
+ // Prune any earlier results that are too old for the averaging window.
+ const int64_t time_limit = current_time_ms - average_window_duration_ms_;
+ while ((!previous_results_.empty()) &&
+ previous_results_.front().time_ < time_limit) {
+ previous_results_.pop_front();
+ }
+
+ // Add the latest results to the head of the queue.
+ previous_results_.push_back({current_time_ms, latest_results->data.int8});
+
+ // If there are too few results, assume the result will be unreliable and
+ // bail.
+ const int64_t how_many_results = previous_results_.size();
+ const int64_t earliest_time = previous_results_.front().time_;
+ const int64_t samples_duration = current_time_ms - earliest_time;
+ if ((how_many_results < minimum_count_) ||
+ (samples_duration < (average_window_duration_ms_ / 4))) {
+ *found_command = previous_top_label_;
+ *score = 0;
+ *is_new_command = false;
+ return kTfLiteOk;
+ }
+
+ // Calculate the average score across all the results in the window.
+ int32_t average_scores[kCategoryCount];
+ for (int offset = 0; offset < previous_results_.size(); ++offset) {
+ PreviousResultsQueue::Result previous_result =
+ previous_results_.from_front(offset);
+ const int8_t* scores = previous_result.scores;
+ for (int i = 0; i < kCategoryCount; ++i) {
+ if (offset == 0) {
+ average_scores[i] = scores[i] + 128;
+ } else {
+ average_scores[i] += scores[i] + 128;
+ }
+ }
+ }
+ for (int i = 0; i < kCategoryCount; ++i) {
+ average_scores[i] /= how_many_results;
+ }
+
+ // Find the current highest scoring category.
+ int current_top_index = 0;
+ int32_t current_top_score = 0;
+ for (int i = 0; i < kCategoryCount; ++i) {
+ if (average_scores[i] > current_top_score) {
+ current_top_score = average_scores[i];
+ current_top_index = i;
+ }
+ }
+ const char* current_top_label = kCategoryLabels[current_top_index];
+
+ // If we've recently had another label trigger, assume one that occurs too
+ // soon afterwards is a bad result.
+ int64_t time_since_last_top;
+ if ((previous_top_label_ == kCategoryLabels[0]) ||
+ (previous_top_label_time_ == std::numeric_limits::min())) {
+ time_since_last_top = std::numeric_limits::max();
+ } else {
+ time_since_last_top = current_time_ms - previous_top_label_time_;
+ }
+ if ((current_top_score > detection_threshold_) &&
+ ((current_top_label != previous_top_label_) ||
+ (time_since_last_top > suppression_ms_))) {
+#ifdef DEBUG_MICRO_SPEECH
+ TF_LITE_REPORT_ERROR(
+ error_reporter_, "Scores: s %d u %d y %d n %d %s -> %s",
+ average_scores[0], average_scores[1], average_scores[2],
+ average_scores[3], previous_top_label_, current_top_label);
+#endif // DEBUG_MICRO_SPEECH
+ previous_top_label_ = current_top_label;
+ previous_top_label_time_ = current_time_ms;
+ *is_new_command = true;
+ } else {
+#ifdef DEBUG_MICRO_SPEECH
+ if (current_top_label != previous_top_label_) {
+ TF_LITE_REPORT_ERROR(
+ error_reporter_, "#Scores: s %d u %d y %d n %d %s -> %s",
+ average_scores[0], average_scores[1], average_scores[2],
+ average_scores[3], previous_top_label_, current_top_label);
+ previous_top_label_ = current_top_label;
+ }
+#endif // DEBUG_MICRO_SPEECH
+ *is_new_command = false;
+ }
+ *found_command = current_top_label;
+ *score = current_top_score;
+
+ return kTfLiteOk;
+}
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/recognize_commands.h b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/recognize_commands.h
new file mode 100644
index 000000000..fa29d7dde
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/micro_speech/recognize_commands.h
@@ -0,0 +1,159 @@
+/* Copyright 2017 The TensorFlow Authors. All Rights Reserved.
+
+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 TENSORFLOW_LITE_MICRO_EXAMPLES_MICRO_SPEECH_RECOGNIZE_COMMANDS_H_
+#define TENSORFLOW_LITE_MICRO_EXAMPLES_MICRO_SPEECH_RECOGNIZE_COMMANDS_H_
+
+#include
+
+#include "micro_features_micro_model_settings.h"
+#include "tensorflow/lite/c/common.h"
+#include "tensorflow/lite/micro/micro_error_reporter.h"
+
+// Partial implementation of std::dequeue, just providing the functionality
+// that's needed to keep a record of previous neural network results over a
+// short time period, so they can be averaged together to produce a more
+// accurate overall prediction. This doesn't use any dynamic memory allocation
+// so it's a better fit for microcontroller applications, but this does mean
+// there are hard limits on the number of results it can store.
+class PreviousResultsQueue {
+ public:
+ PreviousResultsQueue(tflite::ErrorReporter* error_reporter)
+ : error_reporter_(error_reporter), front_index_(0), size_(0) {}
+
+ // Data structure that holds an inference result, and the time when it
+ // was recorded.
+ struct Result {
+ Result() : time_(0), scores() {}
+ Result(int32_t time, int8_t* input_scores) : time_(time) {
+ for (int i = 0; i < kCategoryCount; ++i) {
+ scores[i] = input_scores[i];
+ }
+ }
+ int32_t time_;
+ int8_t scores[kCategoryCount];
+ };
+
+ int size() { return size_; }
+ bool empty() { return size_ == 0; }
+ Result& front() { return results_[front_index_]; }
+ Result& back() {
+ int back_index = front_index_ + (size_ - 1);
+ if (back_index >= kMaxResults) {
+ back_index -= kMaxResults;
+ }
+ return results_[back_index];
+ }
+
+ void push_back(const Result& entry) {
+ if (size() >= kMaxResults) {
+ TF_LITE_REPORT_ERROR(
+ error_reporter_,
+ "Couldn't push_back latest result, too many already!");
+ return;
+ }
+ size_ += 1;
+ back() = entry;
+ }
+
+ Result pop_front() {
+ if (size() <= 0) {
+ TF_LITE_REPORT_ERROR(error_reporter_,
+ "Couldn't pop_front result, none present!");
+ return Result();
+ }
+ Result result = front();
+ front_index_ += 1;
+ if (front_index_ >= kMaxResults) {
+ front_index_ = 0;
+ }
+ size_ -= 1;
+ return result;
+ }
+
+ // Most of the functions are duplicates of dequeue containers, but this
+ // is a helper that makes it easy to iterate through the contents of the
+ // queue.
+ Result& from_front(int offset) {
+ if ((offset < 0) || (offset >= size_)) {
+ TF_LITE_REPORT_ERROR(error_reporter_,
+ "Attempt to read beyond the end of the queue!");
+ offset = size_ - 1;
+ }
+ int index = front_index_ + offset;
+ if (index >= kMaxResults) {
+ index -= kMaxResults;
+ }
+ return results_[index];
+ }
+
+ private:
+ tflite::ErrorReporter* error_reporter_;
+ static constexpr int kMaxResults = 50;
+ Result results_[kMaxResults];
+
+ int front_index_;
+ int size_;
+};
+
+// This class is designed to apply a very primitive decoding model on top of the
+// instantaneous results from running an audio recognition model on a single
+// window of samples. It applies smoothing over time so that noisy individual
+// label scores are averaged, increasing the confidence that apparent matches
+// are real.
+// To use it, you should create a class object with the configuration you
+// want, and then feed results from running a TensorFlow model into the
+// processing method. The timestamp for each subsequent call should be
+// increasing from the previous, since the class is designed to process a stream
+// of data over time.
+class RecognizeCommands {
+ public:
+ // labels should be a list of the strings associated with each one-hot score.
+ // The window duration controls the smoothing. Longer durations will give a
+ // higher confidence that the results are correct, but may miss some commands.
+ // The detection threshold has a similar effect, with high values increasing
+ // the precision at the cost of recall. The minimum count controls how many
+ // results need to be in the averaging window before it's seen as a reliable
+ // average. This prevents erroneous results when the averaging window is
+ // initially being populated for example. The suppression argument disables
+ // further recognitions for a set time after one has been triggered, which can
+ // help reduce spurious recognitions.
+ explicit RecognizeCommands(tflite::ErrorReporter* error_reporter,
+ int32_t average_window_duration_ms = 1000,
+ uint8_t detection_threshold = 200,
+ int32_t suppression_ms = 1500,
+ int32_t minimum_count = 3);
+
+ // Call this with the results of running a model on sample data.
+ TfLiteStatus ProcessLatestResults(const TfLiteTensor* latest_results,
+ const int32_t current_time_ms,
+ const char** found_command, uint8_t* score,
+ bool* is_new_command);
+
+ private:
+ // Configuration
+ tflite::ErrorReporter* error_reporter_;
+ int32_t average_window_duration_ms_;
+ uint8_t detection_threshold_;
+ int32_t suppression_ms_;
+ int32_t minimum_count_;
+
+ // Working variables
+ PreviousResultsQueue previous_results_;
+ const char* previous_top_label_;
+ int32_t previous_top_label_time_;
+};
+
+#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_MICRO_SPEECH_RECOGNIZE_COMMANDS_H_
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/README.md b/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/README.md
new file mode 100644
index 000000000..cfde53712
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/README.md
@@ -0,0 +1,69 @@
+# Person detection example
+
+This example shows how you can use [Tensorflow Lite Micro](https://www.tensorflow.org/lite/microcontrollers) to run a 300.5 kilobyte neural
+network to recognize people in images.
+
+## Table of contents
+
+ * [Deploy to Arduino](#deploy-to-arduino)
+ * [Install the Arduino_TensorFlowLite library](#install-the-arduino_tensorflowlite-library)
+ * [Load and run the example](#load-and-run-the-example)
+ * [Training your own model](#training-your-own-model)
+
+
+## Deploy to Arduino
+
+The following instructions will help you build and deploy this example to
+[Arduino](https://www.arduino.cc/) devices.
+
+The example has been tested with the following devices:
+
+- [Tiny Machine Learning Kit](https://store.arduino.cc/products/arduino-tiny-machine-learning-kit)
+
+The Arduino Tiny Machine Learning Kit uses the OV7675 camera attachment. The OV7675 is currently not supported, and the code will simply generate a blank image (support coming _**soon**_). If you're using a different Arduino board and attaching your own
+camera, you'll need to implement your own `arduino_image_provider.cpp` code. It also has a
+set of LEDs, which are used to indicate whether a person has been recognized.
+
+### Install the Arduino_TensorFlowLite library
+
+This example application is included as part of the official TensorFlow Lite Micro
+Arduino library.
+To install the TensorFlow Lite Micro for Arduino library, see the
+[how to install](../../README.md#how-to-install) instructions.
+
+### Load and run the example
+
+Once the library has been added, go to `File -> Examples`. You should see an
+entry within the list named `Arduino_TensorFlowLite`. Select
+it and click `person_detection` to load the example.
+
+Use the Arduino IDE to build and upload the example. Once it is running, you
+should see the built-in LED on your device flashing. The built-in LED will flash on/off for each inference cycle. The green LED will be lit if a person is predicted,
+The blue LED will be lit if the prediction is not-a-person.
+
+The program also outputs inference results to the serial port, which appear as
+follows:
+
+```
+Cropping image and quantizing
+Image cropped and quantized
+Person score: 39.6% No person score: 60.93%
+```
+
+When the program is run, it waits several seconds for a USB-serial connection to be
+available. If there is no connection available, it will not output data. To see
+the serial output in the Arduino desktop IDE, do the following:
+
+1. Open the Arduino IDE
+1. Connect the Arduino board to your computer via USB
+1. Press the reset button on the Arduino board
+1. Within 5 seconds, go to `Tools -> Serial Monitor` in the Arduino IDE. You may
+ have to try several times, since the board will take a moment to connect.
+
+If you don't see any output, repeat the process again.
+
+## Training your own model
+
+You can train your own model with some easy-to-use scripts. See
+[training_a_model.md](https://github.com/tensorflow/tflite-micro/blob/main/tensorflow/lite/micro/examples/person_detection/training_a_model.md) for instructions.
+
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/arduino_detection_responder.cpp b/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/arduino_detection_responder.cpp
new file mode 100644
index 000000000..7de122422
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/arduino_detection_responder.cpp
@@ -0,0 +1,76 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+#if defined(ARDUINO) && !defined(ARDUINO_ARDUINO_NANO33BLE)
+#define ARDUINO_EXCLUDE_CODE
+#endif // defined(ARDUINO) && !defined(ARDUINO_ARDUINO_NANO33BLE)
+
+#ifndef ARDUINO_EXCLUDE_CODE
+
+#include
+
+#include "Arduino.h"
+#include "detection_responder.h"
+
+// Flash the yellow (builtin) LED after each inference
+void RespondToDetection(tflite::ErrorReporter* error_reporter,
+ float person_score, float no_person_score) {
+ static bool is_initialized = false;
+ if (!is_initialized) {
+ pinMode(LED_BUILTIN, OUTPUT);
+ digitalWrite(LED_BUILTIN, HIGH);
+ // Pins for the built-in RGB LEDs on the Arduino Nano 33 BLE Sense
+ pinMode(LEDR, OUTPUT);
+ pinMode(LEDG, OUTPUT);
+ pinMode(LEDB, OUTPUT);
+ // Switch the LEDs off
+ digitalWrite(LEDG, HIGH);
+ digitalWrite(LEDB, HIGH);
+ digitalWrite(LEDR, HIGH);
+ is_initialized = true;
+ }
+
+ // Note: The RGB LEDs on the Arduino Nano 33 BLE
+ // Sense are on when the pin is LOW, off when HIGH.
+
+ // Switch on the green LED when a person is detected,
+ // the blue when no person is detected
+ if (person_score > no_person_score) {
+ digitalWrite(LEDG, LOW);
+ digitalWrite(LEDB, HIGH);
+ } else {
+ digitalWrite(LEDG, HIGH);
+ digitalWrite(LEDB, LOW);
+ }
+
+ // Flash the yellow LED after every inference.
+ // The builtin LED is on when the pin is HIGH
+ digitalWrite(LED_BUILTIN, LOW);
+ delay(100);
+ digitalWrite(LED_BUILTIN, HIGH);
+
+ float person_score_frac, person_score_int;
+ float no_person_score_frac, no_person_score_int;
+ person_score_frac = std::modf(person_score * 100, &person_score_int);
+ no_person_score_frac = std::modf(no_person_score * 100, &no_person_score_int);
+ TF_LITE_REPORT_ERROR(error_reporter,
+ "Person score: %d.%d%% No person score: %d.%d%%",
+ static_cast(person_score_int),
+ static_cast(person_score_frac * 100),
+ static_cast(no_person_score_int),
+ static_cast(no_person_score_frac * 100));
+}
+
+#endif // ARDUINO_EXCLUDE_CODE
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/arduino_image_provider.cpp b/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/arduino_image_provider.cpp
new file mode 100644
index 000000000..515f55e4c
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/arduino_image_provider.cpp
@@ -0,0 +1,199 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+#include
+#include
+
+#include "image_provider.h"
+#include "model_settings.h"
+#include "tensorflow/lite/micro/micro_utils.h"
+#include "test_over_serial/test_over_serial.h"
+
+using namespace test_over_serial;
+
+#if defined(ARDUINO) && !defined(ARDUINO_ARDUINO_NANO33BLE)
+#define ARDUINO_EXCLUDE_CODE
+#endif // defined(ARDUINO) && !defined(ARDUINO_ARDUINO_NANO33BLE)
+
+#ifndef ARDUINO_EXCLUDE_CODE
+
+#include "Arduino.h"
+
+namespace {
+
+constexpr size_t kQQVGA_width = 160; // pixels
+constexpr size_t kQQVGA_height = 120; // pixels
+
+uint8_t image_buffer[kQQVGA_height * kQQVGA_width];
+constexpr size_t kImageBufferLength =
+ std::extent::value;
+
+// Get the camera module ready
+TfLiteStatus InitCamera(tflite::ErrorReporter* error_reporter) {
+ // This function kept for future implementation
+ TF_LITE_REPORT_ERROR(
+ error_reporter,
+ "OV7675 not yet supported. Blank image will be substituted.");
+ return kTfLiteOk;
+}
+
+// Begin the capture and wait for it to finish
+TfLiteStatus PerformCapture(tflite::ErrorReporter* error_reporter) {
+ // This function kept for future implementation
+ TF_LITE_REPORT_ERROR(error_reporter, "Starting capture");
+ delay(50);
+ TF_LITE_REPORT_ERROR(error_reporter, "Image captured");
+ return kTfLiteOk;
+}
+
+// Read data from the camera module into a local buffer
+TfLiteStatus ReadData(tflite::ErrorReporter* error_reporter) {
+ // This function kept for future implementation
+ // until OV7675 supported, just fill with zeros (black image)
+ std::fill_n(image_buffer, kImageBufferLength, 0);
+ return kTfLiteOk;
+}
+
+// Decode the image, crop it, and convert it to grayscale
+TfLiteStatus CropAndQuantizeImage(tflite::ErrorReporter* error_reporter,
+ size_t image_width, size_t image_height,
+ const TfLiteTensor* tensor) {
+ TF_LITE_REPORT_ERROR(error_reporter, "Cropping image and quantizing");
+
+ // cropping parameters
+ const size_t vert_top = (image_height - kNumRows) / 2;
+ const size_t vert_bottom = vert_top + kNumRows - 1;
+ const size_t horz_left = (image_width - kNumCols) / 2;
+ const size_t horz_right = horz_left + kNumCols - 1;
+
+ const uint8_t* p = image_buffer + (vert_top * image_width);
+ p += horz_left;
+ int8_t* image_data = tensor->data.int8;
+ for (size_t line = vert_top; line <= vert_bottom; line++) {
+ for (size_t row = horz_left; row <= horz_right; row++, p++) {
+ *image_data++ = tflite::FloatToQuantizedType(
+ p[0] / 255.0f, tensor->params.scale, tensor->params.zero_point);
+ }
+ // move to next line
+ p += ((image_width - 1) - horz_right) + horz_left;
+ }
+
+ TF_LITE_REPORT_ERROR(error_reporter, "Image cropped and quantized");
+ return kTfLiteOk;
+}
+
+// Get an image from the camera module
+TfLiteStatus GetCameraImage(tflite::ErrorReporter* error_reporter,
+ const TfLiteTensor* tensor) {
+ static bool g_is_camera_initialized = false;
+ if (!g_is_camera_initialized) {
+ TfLiteStatus init_status = InitCamera(error_reporter);
+ if (init_status != kTfLiteOk) {
+ TF_LITE_REPORT_ERROR(error_reporter, "InitCamera failed");
+ return init_status;
+ }
+ g_is_camera_initialized = true;
+ }
+
+ TfLiteStatus capture_status = PerformCapture(error_reporter);
+ if (capture_status != kTfLiteOk) {
+ TF_LITE_REPORT_ERROR(error_reporter, "PerformCapture failed");
+ return capture_status;
+ }
+
+ TfLiteStatus read_data_status = ReadData(error_reporter);
+ if (read_data_status != kTfLiteOk) {
+ TF_LITE_REPORT_ERROR(error_reporter, "ReadData failed");
+ return read_data_status;
+ }
+
+ TfLiteStatus decode_status =
+ CropAndQuantizeImage(error_reporter, kQQVGA_width, kQQVGA_height, tensor);
+ if (decode_status != kTfLiteOk) {
+ TF_LITE_REPORT_ERROR(error_reporter, "CropAndQuantizeImage failed");
+ return decode_status;
+ }
+
+ return kTfLiteOk;
+}
+
+TfLiteStatus GetTestImage(tflite::ErrorReporter* error_reporter,
+ TestOverSerial& test, const TfLiteTensor* tensor) {
+ volatile bool done = false;
+ volatile bool aborted = false;
+ volatile size_t image_width = 0, image_height = 0;
+
+ InputHandler handler = [&aborted, &done, &image_width,
+ &image_height](const InputBuffer* const input) {
+ if (0 == input->offset) {
+ if ((kQQVGA_height * kQQVGA_width) == input->total) {
+ image_width = kQQVGA_width;
+ image_height = kQQVGA_height;
+ } else if ((kNumCols * kNumRows) == input->total) {
+ image_width = kNumCols;
+ image_height = kNumRows;
+ } else {
+ // image dimensions are not supported, abort input processing
+ aborted = true;
+ return false;
+ }
+ }
+
+ std::copy_n(input->data.uint8, input->length, &image_buffer[input->offset]);
+ if (input->total == (input->offset + input->length)) {
+ done = true;
+ }
+ return true;
+ };
+
+ while (!done) {
+ test.ProcessInput(&handler);
+ if (aborted) {
+ TF_LITE_REPORT_ERROR(error_reporter, "Input processing aborted");
+ return kTfLiteError;
+ }
+ // wait for a full image from serial port before processing
+ if (done) {
+ TfLiteStatus decode_status = CropAndQuantizeImage(
+ error_reporter, image_width, image_height, tensor);
+ if (decode_status != kTfLiteOk) {
+ TF_LITE_REPORT_ERROR(error_reporter, "CropAndQuantizeImage failed");
+ return decode_status;
+ }
+ }
+ }
+
+ return kTfLiteOk;
+}
+
+} // namespace
+
+TfLiteStatus GetImage(tflite::ErrorReporter* error_reporter,
+ const TfLiteTensor* tensor) {
+ TestOverSerial& test = TestOverSerial::Instance(kIMAGE_GRAYSCALE);
+ if (!test.IsTestMode()) {
+ // check serial port for test mode command
+ test.ProcessInput(nullptr);
+ }
+ if (test.IsTestMode()) {
+ return GetTestImage(error_reporter, test, tensor);
+ } else {
+ // get an image from the camera
+ return GetCameraImage(error_reporter, tensor);
+ }
+ // NOTREACHED
+}
+
+#endif // ARDUINO_EXCLUDE_CODE
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/arduino_main.cpp b/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/arduino_main.cpp
new file mode 100644
index 000000000..c70a2bcea
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/arduino_main.cpp
@@ -0,0 +1,20 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+#include "main_functions.h"
+
+// Arduino automatically calls the setup() and loop() functions in a sketch, so
+// where other systems need their own main routine in this file, it can be left
+// empty.
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/detection_responder.h b/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/detection_responder.h
new file mode 100644
index 000000000..1d9cabcb2
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/detection_responder.h
@@ -0,0 +1,34 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+// Provides an interface to take an action based on the output from the person
+// detection model.
+
+#ifndef TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_DETECTION_RESPONDER_H_
+#define TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_DETECTION_RESPONDER_H_
+
+#include "tensorflow/lite/c/common.h"
+#include "tensorflow/lite/micro/micro_error_reporter.h"
+
+// Called every time the results of a person detection run are available. The
+// `person_score` has the numerical confidence that the captured image contains
+// a person, and `no_person_score` has the numerical confidence that the image
+// does not contain a person. Typically if person_score > no person score, the
+// image is considered to contain a person. This threshold may be adjusted for
+// particular applications.
+void RespondToDetection(tflite::ErrorReporter* error_reporter,
+ float person_score, float no_person_score);
+
+#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_DETECTION_RESPONDER_H_
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/image_provider.h b/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/image_provider.h
new file mode 100644
index 000000000..3fc18bb31
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/image_provider.h
@@ -0,0 +1,40 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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 TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_IMAGE_PROVIDER_H_
+#define TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_IMAGE_PROVIDER_H_
+
+#include "tensorflow/lite/c/common.h"
+#include "tensorflow/lite/micro/micro_error_reporter.h"
+
+// This is an abstraction around an image source like a camera, and is
+// expected to place 8-bit quantized sample data into the tensor.
+//
+// The assumption is that this will be
+// called in a low duty-cycle fashion in a low-power application. In these
+// cases, the imaging sensor need not be run in a streaming mode, but rather can
+// be idled in a relatively low-power mode between calls to GetImage(). The
+// assumption is that the overhead and time of bringing the low-power sensor out
+// of this standby mode is commensurate with the expected duty cycle of the
+// application. The underlying sensor may actually be put into a streaming
+// configuration, but the tensor provided to GetImage should not be
+// overwritten by the driver code until the next call to GetImage();
+//
+// For real applications, you should
+// ensure there's a specialized implementation that accesses hardware APIs.
+TfLiteStatus GetImage(tflite::ErrorReporter* error_reporter,
+ const TfLiteTensor* tensor);
+
+#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_IMAGE_PROVIDER_H_
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/main_functions.h b/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/main_functions.h
new file mode 100644
index 000000000..2620097a8
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/main_functions.h
@@ -0,0 +1,37 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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 TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_MAIN_FUNCTIONS_H_
+#define TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_MAIN_FUNCTIONS_H_
+
+// Expose a C friendly interface for main functions.
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Initializes all data needed for the example. The name is important, and needs
+// to be setup() for Arduino compatibility.
+void setup();
+
+// Runs one iteration of data gathering and inference. This should be called
+// repeatedly from the application code. The name needs to be loop() for Arduino
+// compatibility.
+void loop();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_MAIN_FUNCTIONS_H_
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/model_settings.cpp b/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/model_settings.cpp
new file mode 100644
index 000000000..2d4ad1e28
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/model_settings.cpp
@@ -0,0 +1,21 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+#include "model_settings.h"
+
+const char* kCategoryLabels[kCategoryCount] = {
+ "notperson",
+ "person",
+};
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/model_settings.h b/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/model_settings.h
new file mode 100644
index 000000000..f94d58ed6
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/model_settings.h
@@ -0,0 +1,35 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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 TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_MODEL_SETTINGS_H_
+#define TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_MODEL_SETTINGS_H_
+
+// Keeping these as constant expressions allow us to allocate fixed-sized arrays
+// on the stack for our working memory.
+
+// All of these values are derived from the values used during model training,
+// if you change your model you'll need to update these constants.
+constexpr int kNumCols = 96;
+constexpr int kNumRows = 96;
+constexpr int kNumChannels = 1;
+
+constexpr int kMaxImageSize = kNumCols * kNumRows * kNumChannels;
+
+constexpr int kCategoryCount = 2;
+constexpr int kPersonIndex = 1;
+constexpr int kNotAPersonIndex = 0;
+extern const char* kCategoryLabels[kCategoryCount];
+
+#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_MODEL_SETTINGS_H_
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/person_detect_model_data.cpp b/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/person_detect_model_data.cpp
new file mode 100644
index 000000000..7e2c73fc1
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/person_detect_model_data.cpp
@@ -0,0 +1,23148 @@
+
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+// This is a TensorFlow Lite model file that has been converted into a C data
+// array using the tensorflow.lite.util.convert_bytes_to_c_source() function.
+// This form is useful for compiling into a binary for devices that don't have a
+// file system.
+
+#include "person_detect_model_data.h"
+
+// Keep model aligned to 8 bytes to guarantee aligned 64-bit accesses.
+alignas(8) const unsigned char g_person_detect_model_data[] = {
+ 0x1c, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0e, 0x00, 0x18, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x10, 0x00,
+ 0x14, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x84, 0x95, 0x04,
+ 0x00, 0xec, 0x5b, 0x03, 0x00, 0xd4, 0x5b, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x5a, 0x00, 0x00, 0x00, 0xc4, 0x5b, 0x03, 0x00, 0xac, 0x5b, 0x03, 0x00, 0x94,
+ 0x5b, 0x03, 0x00, 0x84, 0x59, 0x03, 0x00, 0x74, 0x55, 0x03, 0x00, 0x64, 0x55,
+ 0x02, 0x00, 0x54, 0x51, 0x02, 0x00, 0x44, 0x48, 0x02, 0x00, 0x34, 0x44, 0x02,
+ 0x00, 0x24, 0x42, 0x02, 0x00, 0x94, 0x3d, 0x02, 0x00, 0x84, 0x3b, 0x02, 0x00,
+ 0x74, 0xfb, 0x01, 0x00, 0xe4, 0xf6, 0x01, 0x00, 0xd4, 0xb6, 0x01, 0x00, 0xc4,
+ 0xb4, 0x01, 0x00, 0xb4, 0x74, 0x01, 0x00, 0xa4, 0x72, 0x01, 0x00, 0x94, 0x70,
+ 0x01, 0x00, 0x84, 0x6e, 0x01, 0x00, 0x74, 0x2e, 0x01, 0x00, 0x64, 0xee, 0x00,
+ 0x00, 0x54, 0xec, 0x00, 0x00, 0xc4, 0xe7, 0x00, 0x00, 0xb4, 0xe5, 0x00, 0x00,
+ 0xa4, 0xc5, 0x00, 0x00, 0x94, 0xc4, 0x00, 0x00, 0x44, 0xc2, 0x00, 0x00, 0x34,
+ 0xb2, 0x00, 0x00, 0x24, 0xb1, 0x00, 0x00, 0x14, 0xa9, 0x00, 0x00, 0x84, 0xa8,
+ 0x00, 0x00, 0x54, 0xa7, 0x00, 0x00, 0x44, 0xa3, 0x00, 0x00, 0xb4, 0xa2, 0x00,
+ 0x00, 0x84, 0xa1, 0x00, 0x00, 0x34, 0xa1, 0x00, 0x00, 0x2c, 0xa1, 0x00, 0x00,
+ 0x24, 0xa1, 0x00, 0x00, 0x1c, 0xa1, 0x00, 0x00, 0x14, 0xa1, 0x00, 0x00, 0x0c,
+ 0xa1, 0x00, 0x00, 0x04, 0xa1, 0x00, 0x00, 0xfc, 0xa0, 0x00, 0x00, 0xf4, 0xa0,
+ 0x00, 0x00, 0xec, 0xa0, 0x00, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0xdc, 0xa0, 0x00,
+ 0x00, 0x8c, 0xa0, 0x00, 0x00, 0x84, 0xa0, 0x00, 0x00, 0x7c, 0xa0, 0x00, 0x00,
+ 0x74, 0xa0, 0x00, 0x00, 0x6c, 0xa0, 0x00, 0x00, 0x64, 0xa0, 0x00, 0x00, 0x5c,
+ 0xa0, 0x00, 0x00, 0x4c, 0x9e, 0x00, 0x00, 0x1c, 0x9e, 0x00, 0x00, 0x14, 0x9e,
+ 0x00, 0x00, 0x74, 0x9d, 0x00, 0x00, 0xe4, 0x9c, 0x00, 0x00, 0x8c, 0x9c, 0x00,
+ 0x00, 0x7c, 0x9a, 0x00, 0x00, 0xec, 0x99, 0x00, 0x00, 0x5c, 0x99, 0x00, 0x00,
+ 0x54, 0x99, 0x00, 0x00, 0x4c, 0x99, 0x00, 0x00, 0x44, 0x99, 0x00, 0x00, 0x3c,
+ 0x99, 0x00, 0x00, 0xe4, 0x98, 0x00, 0x00, 0xd4, 0x18, 0x00, 0x00, 0xc4, 0x16,
+ 0x00, 0x00, 0x34, 0x12, 0x00, 0x00, 0xa4, 0x0d, 0x00, 0x00, 0x9c, 0x0d, 0x00,
+ 0x00, 0x94, 0x0d, 0x00, 0x00, 0x8c, 0x0d, 0x00, 0x00, 0x7c, 0x0c, 0x00, 0x00,
+ 0x2c, 0x0a, 0x00, 0x00, 0x1c, 0x08, 0x00, 0x00, 0x14, 0x08, 0x00, 0x00, 0x84,
+ 0x03, 0x00, 0x00, 0x7c, 0x03, 0x00, 0x00, 0x4c, 0x03, 0x00, 0x00, 0x3c, 0x01,
+ 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00,
+ 0x00, 0x14, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x7c, 0xfc, 0xfb, 0xff, 0x80, 0xfc, 0xfb, 0xff, 0x84, 0xfc, 0xfb, 0xff, 0x88,
+ 0xfc, 0xfb, 0xff, 0x8c, 0xfc, 0xfb, 0xff, 0xba, 0xa4, 0xfc, 0xff, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x37, 0x0f, 0x00, 0x00, 0x5d, 0xe6, 0xff,
+ 0xff, 0x75, 0xdd, 0xff, 0xff, 0xee, 0xf7, 0xff, 0xff, 0xa4, 0xfa, 0xff, 0xff,
+ 0xc7, 0xf5, 0xff, 0xff, 0x0a, 0x0c, 0x00, 0x00, 0xdb, 0x16, 0x00, 0x00, 0x06,
+ 0x09, 0x00, 0x00, 0x81, 0x1b, 0x00, 0x00, 0xc1, 0x29, 0x00, 0x00, 0xd2, 0x18,
+ 0x00, 0x00, 0xd0, 0xf6, 0xff, 0xff, 0x93, 0x5c, 0x00, 0x00, 0xf3, 0xb9, 0xff,
+ 0xff, 0x0a, 0x28, 0x00, 0x00, 0xed, 0xe9, 0xff, 0xff, 0x86, 0xc9, 0xff, 0xff,
+ 0x28, 0x27, 0x00, 0x00, 0x77, 0x04, 0x00, 0x00, 0x7a, 0xd0, 0xff, 0xff, 0xad,
+ 0x58, 0x00, 0x00, 0x1c, 0x4b, 0x00, 0x00, 0xb0, 0x9b, 0xff, 0xff, 0xb5, 0xce,
+ 0xff, 0xff, 0xfc, 0x12, 0x00, 0x00, 0x3e, 0xfd, 0xff, 0xff, 0x4b, 0xf5, 0xff,
+ 0xff, 0xae, 0xcb, 0xff, 0xff, 0xc3, 0x39, 0x00, 0x00, 0x56, 0xd1, 0xff, 0xff,
+ 0x3d, 0x19, 0x00, 0x00, 0x4b, 0x18, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0xc6,
+ 0x6a, 0x00, 0x00, 0xca, 0xb0, 0xff, 0xff, 0xb4, 0x08, 0x00, 0x00, 0x3b, 0x4b,
+ 0x00, 0x00, 0xc9, 0xbe, 0xff, 0xff, 0xd4, 0x12, 0x00, 0x00, 0xe2, 0xf4, 0xff,
+ 0xff, 0x36, 0xff, 0xff, 0xff, 0xd0, 0xef, 0xff, 0xff, 0x08, 0xcc, 0xff, 0xff,
+ 0xa7, 0xd3, 0xff, 0xff, 0x9c, 0x08, 0x00, 0x00, 0x03, 0x1b, 0x00, 0x00, 0xaf,
+ 0xa2, 0xff, 0xff, 0x71, 0x13, 0x00, 0x00, 0x0c, 0x7b, 0x00, 0x00, 0xf2, 0x03,
+ 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x1e, 0x29, 0x00, 0x00, 0x0c, 0x04, 0x00,
+ 0x00, 0x92, 0x59, 0x00, 0x00, 0x27, 0xd4, 0xff, 0xff, 0x30, 0x0c, 0x00, 0x00,
+ 0xfa, 0xfb, 0xff, 0xff, 0x17, 0xca, 0xff, 0xff, 0x92, 0xd3, 0xff, 0xff, 0x6c,
+ 0x11, 0x00, 0x00, 0xc9, 0xff, 0xff, 0xff, 0x78, 0x00, 0x00, 0x00, 0x4f, 0x43,
+ 0x00, 0x00, 0xc6, 0xa5, 0xfc, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x6e, 0xcc, 0xff, 0xff, 0x69, 0x36, 0x00, 0x00, 0xfb, 0xee, 0xff, 0xff,
+ 0x24, 0x4c, 0x00, 0x00, 0xb3, 0x07, 0x00, 0x00, 0x96, 0x3f, 0x00, 0x00, 0xe1,
+ 0xd2, 0xff, 0xff, 0xf7, 0xfd, 0xff, 0xff, 0x01, 0x4f, 0x00, 0x00, 0x9b, 0xea,
+ 0xff, 0xff, 0xcc, 0xe4, 0xff, 0xff, 0xb2, 0x00, 0x00, 0x00, 0x52, 0xed, 0xff,
+ 0xff, 0xef, 0xad, 0xff, 0xff, 0xef, 0x34, 0x00, 0x00, 0x37, 0x0c, 0x00, 0x00,
+ 0xea, 0x47, 0x00, 0x00, 0xf8, 0xed, 0xff, 0xff, 0xa0, 0xef, 0xff, 0xff, 0xea,
+ 0x43, 0x00, 0x00, 0x17, 0xed, 0xff, 0xff, 0xab, 0xfd, 0xff, 0xff, 0x0b, 0xf8,
+ 0xff, 0xff, 0x37, 0x26, 0x00, 0x00, 0x33, 0xea, 0xff, 0xff, 0x0e, 0x1e, 0x00,
+ 0x00, 0xc4, 0x09, 0x00, 0x00, 0x6f, 0x1f, 0x00, 0x00, 0xfc, 0x69, 0xff, 0xff,
+ 0x9c, 0xd9, 0xff, 0xff, 0xc1, 0xf0, 0xff, 0xff, 0x89, 0x19, 0x00, 0x00, 0x9c,
+ 0x29, 0x00, 0x00, 0x10, 0xb7, 0xff, 0xff, 0x2f, 0xd9, 0xff, 0xff, 0x23, 0xe9,
+ 0xff, 0xff, 0xaf, 0x57, 0x00, 0x00, 0x05, 0x48, 0x00, 0x00, 0x30, 0xf7, 0xff,
+ 0xff, 0x1c, 0x12, 0x00, 0x00, 0xa7, 0xcc, 0xff, 0xff, 0xd0, 0xc6, 0xff, 0xff,
+ 0x9d, 0xea, 0xff, 0xff, 0x9a, 0xfc, 0xff, 0xff, 0xc1, 0xcc, 0xff, 0xff, 0x63,
+ 0xcf, 0xff, 0xff, 0xa8, 0x11, 0x00, 0x00, 0x1d, 0xfd, 0xff, 0xff, 0xfc, 0xfa,
+ 0xff, 0xff, 0x14, 0xe9, 0xff, 0xff, 0xb5, 0x37, 0x00, 0x00, 0x46, 0x21, 0x00,
+ 0x00, 0x3e, 0x02, 0x00, 0x00, 0x77, 0xd2, 0xff, 0xff, 0x0e, 0xe5, 0xff, 0xff,
+ 0xde, 0x24, 0x00, 0x00, 0xe9, 0x28, 0x00, 0x00, 0xdc, 0x6d, 0xff, 0xff, 0x59,
+ 0xb6, 0xff, 0xff, 0xb8, 0x0d, 0x00, 0x00, 0x89, 0xf5, 0xff, 0xff, 0xf5, 0x25,
+ 0x00, 0x00, 0xd6, 0x1e, 0x00, 0x00, 0x03, 0x32, 0x00, 0x00, 0x2f, 0x1f, 0x00,
+ 0x00, 0xe1, 0xfa, 0xff, 0xff, 0x59, 0xd8, 0xff, 0xff, 0x85, 0x3e, 0x00, 0x00,
+ 0xae, 0xea, 0xff, 0xff, 0x72, 0x3e, 0x00, 0x00, 0x87, 0xfd, 0xff, 0xff, 0x27,
+ 0x57, 0x00, 0x00, 0x0b, 0xf2, 0xff, 0xff, 0xc2, 0x1c, 0x00, 0x00, 0xd9, 0x20,
+ 0x00, 0x00, 0xf9, 0x2e, 0x00, 0x00, 0x84, 0xfd, 0xff, 0xff, 0x6b, 0x22, 0x00,
+ 0x00, 0x2b, 0x94, 0xff, 0xff, 0xdf, 0xfd, 0xff, 0xff, 0x80, 0xee, 0xff, 0xff,
+ 0x4d, 0xe6, 0xff, 0xff, 0x71, 0xd4, 0xff, 0xff, 0xd6, 0xd8, 0xff, 0xff, 0xdc,
+ 0x4d, 0x00, 0x00, 0xfc, 0xb8, 0xff, 0xff, 0xa6, 0x45, 0x00, 0x00, 0xa5, 0xf1,
+ 0xff, 0xff, 0x63, 0x31, 0x00, 0x00, 0x3c, 0xd8, 0xff, 0xff, 0x12, 0x29, 0x00,
+ 0x00, 0x34, 0xdb, 0xff, 0xff, 0xae, 0x57, 0x00, 0x00, 0x6c, 0xc9, 0xff, 0xff,
+ 0x1b, 0x2f, 0x00, 0x00, 0x44, 0x28, 0x00, 0x00, 0x34, 0xf3, 0xff, 0xff, 0xdd,
+ 0x1c, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0xaa, 0x02, 0x00, 0x00, 0x23, 0x41,
+ 0x00, 0x00, 0x97, 0x0e, 0x00, 0x00, 0xcf, 0x1b, 0x00, 0x00, 0x50, 0x17, 0x00,
+ 0x00, 0x67, 0x8b, 0xff, 0xff, 0x22, 0x0b, 0x00, 0x00, 0x56, 0xd1, 0xff, 0xff,
+ 0xfe, 0xe8, 0xff, 0xff, 0x8d, 0x31, 0x00, 0x00, 0xc9, 0xd1, 0xff, 0xff, 0x98,
+ 0x10, 0x00, 0x00, 0x9c, 0x44, 0x00, 0x00, 0x0f, 0x0b, 0x00, 0x00, 0xd4, 0x3e,
+ 0x00, 0x00, 0x64, 0x19, 0x00, 0x00, 0x0c, 0xe8, 0xff, 0xff, 0xcc, 0x04, 0x00,
+ 0x00, 0xcc, 0xb7, 0xff, 0xff, 0xea, 0x3d, 0x00, 0x00, 0x30, 0x19, 0x00, 0x00,
+ 0x70, 0x06, 0x00, 0x00, 0x14, 0x2f, 0x00, 0x00, 0xcb, 0xd4, 0xff, 0xff, 0xd2,
+ 0xee, 0xff, 0xff, 0x4e, 0x26, 0x00, 0x00, 0xd4, 0x23, 0x00, 0x00, 0xa0, 0x55,
+ 0x00, 0x00, 0x2e, 0x15, 0x00, 0x00, 0xd2, 0xa7, 0xfc, 0xff, 0x04, 0x00, 0x00,
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0xbe, 0x0e, 0x00, 0x00, 0x95, 0xff, 0xff, 0xff,
+ 0x56, 0xb6, 0xfe, 0xff, 0xac, 0xc9, 0xff, 0xff, 0xd9, 0x50, 0x00, 0x00, 0xfa,
+ 0xff, 0xff, 0xff, 0xdf, 0x2c, 0x00, 0x00, 0x9a, 0xcb, 0xfd, 0xff, 0xd4, 0xff,
+ 0xfb, 0xff, 0x02, 0xa8, 0xfc, 0xff, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00,
+ 0x00, 0x5e, 0xac, 0x7e, 0x7f, 0xdc, 0xf2, 0xcc, 0x39, 0x8c, 0x81, 0x5e, 0xa5,
+ 0xa7, 0x7f, 0xbd, 0x37, 0x45, 0x1b, 0xf3, 0x74, 0x7f, 0x1e, 0xc4, 0xfb, 0x00,
+ 0xbe, 0xfc, 0xfa, 0x03, 0x22, 0x7f, 0x59, 0x38, 0xac, 0x75, 0xeb, 0x56, 0xa8,
+ 0x9e, 0x00, 0x9a, 0x99, 0xf4, 0xa2, 0x5f, 0x08, 0x7f, 0x44, 0xc9, 0x01, 0x36,
+ 0x0d, 0xde, 0xc2, 0xbf, 0xa4, 0x01, 0x7f, 0xf8, 0x1a, 0xd2, 0xec, 0x01, 0x41,
+ 0x41, 0x0f, 0x0c, 0xd8, 0x05, 0xd6, 0x4f, 0x81, 0x37, 0x2e, 0x63, 0x7f, 0x2e,
+ 0x1c, 0xd1, 0xab, 0xbe, 0x52, 0xb3, 0x7f, 0x7f, 0x14, 0xa3, 0xe0, 0xad, 0x7f,
+ 0xc1, 0x69, 0xc3, 0xc7, 0xf7, 0x71, 0xc6, 0xaf, 0x81, 0x25, 0x7f, 0x75, 0x18,
+ 0xc4, 0xcf, 0xdd, 0x4f, 0x1d, 0x9b, 0x04, 0xa4, 0xe9, 0x81, 0xb0, 0x31, 0x89,
+ 0x4f, 0x1f, 0x14, 0x4d, 0x78, 0x24, 0x81, 0x7f, 0xfb, 0x81, 0xf5, 0xe8, 0x4f,
+ 0xc5, 0x7f, 0x10, 0x26, 0x50, 0xce, 0xe5, 0xf4, 0x00, 0x0c, 0xac, 0xd6, 0x4f,
+ 0x50, 0x42, 0x7f, 0x0d, 0xe7, 0x35, 0x3c, 0xfd, 0x4b, 0xf1, 0xae, 0x18, 0xfb,
+ 0xc9, 0x1f, 0xe3, 0x52, 0x3d, 0x7f, 0xe8, 0x44, 0x7f, 0x3a, 0xd7, 0xe1, 0x3d,
+ 0x8b, 0xba, 0xc4, 0x57, 0x3b, 0x1d, 0x1b, 0x26, 0x8e, 0x45, 0x3b, 0xcd, 0x4d,
+ 0xcc, 0x14, 0xb0, 0x2e, 0x60, 0xed, 0xf8, 0xb0, 0xfe, 0xf9, 0x30, 0xfc, 0x22,
+ 0x7c, 0xc0, 0x15, 0x70, 0x70, 0x20, 0x7f, 0x9c, 0x4d, 0x06, 0x11, 0xc8, 0xb5,
+ 0xc7, 0xc1, 0x2a, 0xb8, 0x51, 0x1b, 0x4e, 0xbd, 0x9d, 0x5e, 0x30, 0xd3, 0x47,
+ 0xc5, 0x49, 0xe9, 0x20, 0xc7, 0x2c, 0xf0, 0x59, 0xdf, 0x47, 0x2e, 0xd5, 0x9e,
+ 0x9e, 0xa7, 0xd1, 0x81, 0xf9, 0xd7, 0x15, 0x9c, 0xa6, 0x6d, 0xfe, 0x7f, 0x79,
+ 0x7f, 0xd7, 0x7f, 0x4f, 0xdf, 0x7a, 0x00, 0xbf, 0x7f, 0xd6, 0x48, 0x93, 0x3d,
+ 0x5a, 0x7f, 0xca, 0x81, 0x42, 0xbc, 0xb6, 0x67, 0xb7, 0xae, 0x40, 0xc0, 0x7f,
+ 0x2f, 0x12, 0x3a, 0x7f, 0x22, 0x43, 0x42, 0xec, 0xc1, 0x21, 0x07, 0xf0, 0x18,
+ 0xc9, 0x11, 0x30, 0x21, 0xef, 0x26, 0x44, 0xdd, 0xc0, 0xaf, 0x9d, 0xa9, 0x20,
+ 0xb5, 0x00, 0xbd, 0x0d, 0x54, 0x45, 0x7f, 0x0d, 0x3b, 0x03, 0x1a, 0xaa, 0x21,
+ 0xc4, 0xec, 0x63, 0xf9, 0x09, 0x08, 0x0b, 0x20, 0x2e, 0xd4, 0x56, 0x73, 0x13,
+ 0xed, 0x76, 0x81, 0xd7, 0x4d, 0xfb, 0x14, 0xf4, 0xf7, 0x23, 0xc4, 0x99, 0xbc,
+ 0x1c, 0x14, 0x6a, 0x05, 0xe0, 0x8a, 0x5c, 0x8a, 0xf7, 0xb1, 0x30, 0xf4, 0xf3,
+ 0x08, 0x0b, 0xfb, 0x7f, 0xaf, 0x39, 0x78, 0x77, 0x25, 0xda, 0xbd, 0x9e, 0xcf,
+ 0x26, 0xf3, 0x1e, 0xd8, 0x08, 0x5c, 0xcc, 0x77, 0xaa, 0x07, 0xfa, 0x08, 0x14,
+ 0xce, 0x11, 0xa1, 0x71, 0xa8, 0x8c, 0x5a, 0xf2, 0xd5, 0x9f, 0x60, 0x54, 0xd5,
+ 0x21, 0xbe, 0x7f, 0xa4, 0xa3, 0x7f, 0x74, 0x81, 0x5c, 0x81, 0xd4, 0x15, 0x13,
+ 0x7f, 0x68, 0x19, 0x7f, 0xda, 0x68, 0xf9, 0x20, 0x64, 0x1e, 0xcd, 0xe3, 0x03,
+ 0x16, 0x4f, 0xbe, 0x45, 0xe8, 0xfd, 0x8d, 0xd9, 0xf3, 0xd1, 0xa0, 0x90, 0x81,
+ 0xfc, 0x81, 0x2c, 0x68, 0xca, 0x21, 0x0a, 0x17, 0xff, 0x81, 0xe5, 0x81, 0x39,
+ 0x04, 0x00, 0xc6, 0xb3, 0x7f, 0x2a, 0xd7, 0x1b, 0xd8, 0x35, 0xa4, 0x7f, 0x47,
+ 0x5c, 0xf7, 0x76, 0x67, 0x24, 0xef, 0x4e, 0x41, 0xab, 0xcc, 0xd2, 0x7f, 0x81,
+ 0x4f, 0x35, 0x7f, 0xb8, 0x99, 0xf9, 0x25, 0x98, 0x7f, 0x81, 0x6f, 0xf5, 0x7f,
+ 0xd5, 0xc3, 0xc9, 0xd7, 0x59, 0x92, 0x2b, 0xcd, 0x99, 0x94, 0x7f, 0x1e, 0xb1,
+ 0x40, 0xcc, 0x15, 0x8d, 0x77, 0x63, 0xba, 0x24, 0x2b, 0x28, 0x46, 0xd1, 0x7f,
+ 0xa2, 0xc3, 0xd2, 0xa1, 0x3b, 0x05, 0x26, 0xd1, 0x1c, 0x19, 0xe1, 0x04, 0x9a,
+ 0x15, 0x81, 0xb9, 0x41, 0x05, 0x9f, 0xe8, 0x49, 0x18, 0x1b, 0x05, 0x30, 0x71,
+ 0xe4, 0x17, 0x7f, 0x7f, 0x02, 0x6f, 0x64, 0xee, 0x30, 0xcd, 0x04, 0x27, 0x4b,
+ 0xeb, 0x7f, 0x7f, 0xf4, 0xca, 0xc5, 0x7f, 0xb9, 0x08, 0x84, 0x3c, 0x43, 0x8b,
+ 0x6f, 0x6b, 0x1c, 0x42, 0x28, 0x81, 0xeb, 0xae, 0xcf, 0x9f, 0x04, 0x00, 0x7f,
+ 0xf8, 0xc1, 0x0c, 0xd8, 0x1e, 0x49, 0x9a, 0x50, 0xaf, 0xed, 0x26, 0xb0, 0x49,
+ 0x45, 0x21, 0xe4, 0xf8, 0x7f, 0x7f, 0xd7, 0xd1, 0xa9, 0x41, 0x38, 0xc6, 0x38,
+ 0x7f, 0xfd, 0xf8, 0x7f, 0x12, 0xa8, 0xfb, 0xae, 0x7f, 0x07, 0x65, 0x81, 0x59,
+ 0x94, 0xff, 0xaf, 0xc0, 0x7f, 0xdf, 0xa3, 0x17, 0x05, 0x7f, 0x03, 0xe9, 0xb5,
+ 0x6c, 0xd5, 0x35, 0x15, 0xf7, 0x56, 0x7f, 0x54, 0xe8, 0x3b, 0x34, 0x06, 0xd6,
+ 0x81, 0x20, 0x18, 0x25, 0x7f, 0xc6, 0x4f, 0x5a, 0xd2, 0x1b, 0xf4, 0x56, 0xb4,
+ 0xa3, 0xee, 0x19, 0x89, 0x5c, 0x58, 0x25, 0x11, 0x27, 0x6e, 0x1a, 0x0f, 0x36,
+ 0x33, 0xee, 0x03, 0x7f, 0x28, 0xbc, 0x42, 0x01, 0xdd, 0x3f, 0x38, 0x05, 0x69,
+ 0xc8, 0xfa, 0xe0, 0xd3, 0xd1, 0xbb, 0x55, 0x81, 0x70, 0xc9, 0xab, 0x1a, 0x7f,
+ 0x6c, 0x51, 0x09, 0x00, 0xf5, 0x9e, 0x57, 0xab, 0x2a, 0x08, 0xcf, 0xb5, 0xe5,
+ 0x3b, 0x13, 0x7f, 0x04, 0x7f, 0x7f, 0x61, 0xfa, 0x7f, 0xb7, 0x31, 0x2d, 0x48,
+ 0x3f, 0xf0, 0xf1, 0x37, 0xde, 0x9a, 0xc1, 0xf0, 0x5f, 0x30, 0x2e, 0xd9, 0xb9,
+ 0x53, 0xe4, 0x02, 0x07, 0x09, 0xad, 0x3d, 0x01, 0x3c, 0x31, 0x12, 0xdf, 0x6d,
+ 0x2f, 0xd4, 0x54, 0x9b, 0x81, 0x81, 0xcd, 0x28, 0xa8, 0x01, 0x81, 0x7f, 0x03,
+ 0x5a, 0x12, 0x8e, 0x1e, 0x3f, 0x0d, 0x7f, 0x99, 0x2a, 0xa1, 0xe8, 0xac, 0xae,
+ 0x74, 0xf2, 0xb8, 0xb9, 0x31, 0xf0, 0xe9, 0x76, 0xfd, 0x15, 0xc4, 0x8f, 0x28,
+ 0x7f, 0x0a, 0xfa, 0xaf, 0xd5, 0x02, 0x56, 0x28, 0x6b, 0xeb, 0x6d, 0x0f, 0x03,
+ 0x7f, 0x1a, 0x7f, 0x7f, 0x06, 0xb7, 0xd0, 0xc7, 0xa0, 0xbd, 0xd2, 0xfa, 0x58,
+ 0x7f, 0x89, 0xbe, 0x81, 0x81, 0xeb, 0x82, 0x90, 0x8b, 0xf9, 0xe3, 0xca, 0xca,
+ 0x42, 0x6a, 0x50, 0xd8, 0x56, 0x45, 0x79, 0xe5, 0x0f, 0x7f, 0xea, 0xdb, 0x7f,
+ 0x2b, 0x7f, 0xf9, 0x9b, 0xb0, 0x29, 0x5e, 0xfa, 0x59, 0xff, 0x7f, 0x7f, 0xe3,
+ 0x7a, 0x04, 0xb1, 0x95, 0xe0, 0x60, 0xd8, 0xff, 0xe9, 0x47, 0x8f, 0x5b, 0xa2,
+ 0x01, 0x81, 0x53, 0xed, 0x51, 0x34, 0x57, 0x0d, 0xcd, 0x9b, 0x2e, 0x09, 0xa9,
+ 0x13, 0xa4, 0xa1, 0xa6, 0x40, 0x16, 0xdc, 0x61, 0xa0, 0xee, 0xb5, 0x76, 0x8b,
+ 0xbc, 0xeb, 0xda, 0x00, 0x31, 0x0c, 0x2f, 0xe3, 0x8d, 0x9e, 0x93, 0x16, 0x5f,
+ 0x86, 0x81, 0x02, 0xa7, 0xba, 0x6a, 0xb8, 0xc7, 0xc9, 0x87, 0xa6, 0xfd, 0xe0,
+ 0x73, 0xf0, 0xb1, 0x26, 0x2c, 0xef, 0x71, 0xe7, 0x3f, 0x09, 0x6b, 0x1b, 0xad,
+ 0x53, 0x1e, 0x25, 0xfc, 0x1d, 0x99, 0x1d, 0xcf, 0xbc, 0x15, 0x7f, 0x65, 0xdc,
+ 0x1b, 0xd2, 0x6e, 0xe0, 0x1e, 0x81, 0xad, 0x0c, 0xdf, 0xe0, 0x81, 0xf7, 0x43,
+ 0x7f, 0xab, 0x7e, 0xfc, 0x3a, 0xde, 0xfd, 0x10, 0xba, 0xdd, 0x5c, 0x6b, 0x5c,
+ 0xd3, 0x2e, 0x77, 0xfb, 0x5a, 0xd1, 0x6e, 0x3c, 0x3a, 0x4b, 0xe4, 0x0f, 0x4d,
+ 0xb0, 0xf3, 0x81, 0x11, 0x2c, 0xbc, 0xc4, 0x51, 0xaa, 0x7f, 0x40, 0x49, 0xbe,
+ 0xf9, 0x10, 0x64, 0x7f, 0x0a, 0x9f, 0x2b, 0xcb, 0x49, 0xd0, 0x81, 0x38, 0x89,
+ 0xdb, 0x9a, 0xf7, 0x3b, 0xe8, 0x24, 0x9c, 0x21, 0x8d, 0x60, 0xcf, 0xd2, 0xdd,
+ 0x10, 0x1e, 0xc0, 0xf5, 0x79, 0xad, 0x8e, 0xbe, 0xce, 0x36, 0x61, 0xae, 0xc2,
+ 0x1a, 0x32, 0xf2, 0x7f, 0xd1, 0xef, 0x8b, 0xca, 0x08, 0xef, 0x20, 0x2c, 0x4c,
+ 0xc0, 0xf6, 0x7f, 0x76, 0x56, 0xdf, 0x44, 0xcf, 0xec, 0x5d, 0xe0, 0x0b, 0xad,
+ 0x7f, 0x7f, 0xe8, 0x81, 0x42, 0x81, 0x2f, 0xfa, 0x0c, 0x32, 0x81, 0xc8, 0xca,
+ 0x3b, 0xfd, 0x3f, 0xa9, 0x1c, 0x0d, 0x16, 0xf7, 0xda, 0x7f, 0x67, 0x21, 0xe6,
+ 0x7f, 0x77, 0x7f, 0xb1, 0xd1, 0x69, 0x81, 0x54, 0x5a, 0xef, 0x34, 0xde, 0xc1,
+ 0x7f, 0xd3, 0x52, 0xdf, 0x66, 0xec, 0x41, 0x21, 0xe0, 0x04, 0xf6, 0x81, 0x81,
+ 0xfd, 0x48, 0x10, 0xf9, 0xbf, 0xb0, 0x81, 0x60, 0xc0, 0xdc, 0xa3, 0xc3, 0xec,
+ 0x6d, 0x0c, 0x1d, 0x05, 0x08, 0xbd, 0x7f, 0x0b, 0x8f, 0x06, 0x81, 0xea, 0xcf,
+ 0xac, 0x11, 0xc6, 0x7f, 0xe9, 0x1c, 0xd7, 0x7f, 0x81, 0x81, 0xd7, 0xdc, 0xf2,
+ 0x38, 0x13, 0x6a, 0x9f, 0xad, 0xb5, 0x83, 0x02, 0x7f, 0x64, 0x04, 0xfc, 0xff,
+ 0x92, 0xac, 0xfc, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x7f,
+ 0xf0, 0xff, 0xff, 0x8a, 0xf8, 0xff, 0xff, 0x87, 0xf6, 0xff, 0xff, 0x8e, 0xff,
+ 0xff, 0xff, 0x68, 0x11, 0x00, 0x00, 0x24, 0xea, 0xff, 0xff, 0x95, 0x27, 0x00,
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x58, 0xe5, 0xff, 0xff, 0x96, 0xef, 0xff, 0xff,
+ 0xe7, 0xf7, 0xff, 0xff, 0x63, 0x00, 0x00, 0x00, 0x4f, 0xf8, 0xff, 0xff, 0xac,
+ 0xff, 0xff, 0xff, 0x5d, 0x25, 0x00, 0x00, 0x5a, 0xff, 0xff, 0xff, 0xc1, 0xff,
+ 0xff, 0xff, 0xe0, 0x07, 0x00, 0x00, 0x1b, 0x03, 0x00, 0x00, 0x9a, 0xfd, 0xff,
+ 0xff, 0xf8, 0x04, 0x00, 0x00, 0xe0, 0xfc, 0xff, 0xff, 0xa2, 0xfd, 0xff, 0xff,
+ 0xf5, 0xee, 0xff, 0xff, 0x02, 0xfb, 0xff, 0xff, 0x19, 0x20, 0x00, 0x00, 0xd6,
+ 0x26, 0x00, 0x00, 0xc9, 0xfc, 0xff, 0xff, 0x8e, 0x22, 0x00, 0x00, 0x21, 0xff,
+ 0xff, 0xff, 0xbf, 0x31, 0x00, 0x00, 0x6b, 0x27, 0x00, 0x00, 0xce, 0xe7, 0xff,
+ 0xff, 0x52, 0xfd, 0xff, 0xff, 0xfc, 0xfc, 0xff, 0xff, 0x0f, 0xfc, 0xff, 0xff,
+ 0x8e, 0x20, 0x00, 0x00, 0xd8, 0x04, 0x00, 0x00, 0x2f, 0xfc, 0xff, 0xff, 0xc2,
+ 0x29, 0x00, 0x00, 0x34, 0xf3, 0xff, 0xff, 0xfd, 0xec, 0xff, 0xff, 0x52, 0xf9,
+ 0xff, 0xff, 0x66, 0xeb, 0xff, 0xff, 0x90, 0x21, 0x00, 0x00, 0xef, 0x39, 0x00,
+ 0x00, 0xb4, 0x03, 0x00, 0x00, 0xe5, 0x01, 0x00, 0x00, 0x37, 0xfb, 0xff, 0xff,
+ 0xf5, 0xf8, 0xff, 0xff, 0xac, 0xf9, 0xff, 0xff, 0x05, 0xf5, 0xff, 0xff, 0x74,
+ 0xff, 0xff, 0xff, 0xd7, 0xf8, 0xff, 0xff, 0x3a, 0x1e, 0x00, 0x00, 0x43, 0x2e,
+ 0x00, 0x00, 0xf0, 0xf2, 0xff, 0xff, 0x1f, 0xfd, 0xff, 0xff, 0x4d, 0x1c, 0x00,
+ 0x00, 0xe9, 0xff, 0xff, 0xff, 0xb6, 0xfc, 0xff, 0xff, 0x45, 0x2c, 0x00, 0x00,
+ 0xf4, 0x08, 0x00, 0x00, 0xbe, 0xff, 0xff, 0xff, 0x92, 0x29, 0x00, 0x00, 0xf6,
+ 0x32, 0x00, 0x00, 0x01, 0xf7, 0xff, 0xff, 0xe3, 0xf6, 0xff, 0xff, 0xf2, 0xfd,
+ 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0x1a, 0xf4, 0xff, 0xff, 0x22, 0x00, 0x00,
+ 0x00, 0x32, 0xeb, 0xff, 0xff, 0xed, 0x22, 0x00, 0x00, 0x3c, 0xfc, 0xff, 0xff,
+ 0x95, 0x00, 0x00, 0x00, 0xcb, 0x0b, 0x00, 0x00, 0xc6, 0x32, 0x00, 0x00, 0xf8,
+ 0xf8, 0xff, 0xff, 0x28, 0x27, 0x00, 0x00, 0x1b, 0x05, 0x00, 0x00, 0xfb, 0xfe,
+ 0xff, 0xff, 0x05, 0xf9, 0xff, 0xff, 0xb3, 0x27, 0x00, 0x00, 0xb7, 0x2d, 0x00,
+ 0x00, 0x78, 0x0e, 0x00, 0x00, 0x0e, 0xf7, 0xff, 0xff, 0xe2, 0xf3, 0xff, 0xff,
+ 0xc4, 0xfe, 0xff, 0xff, 0x35, 0xff, 0xff, 0xff, 0x1b, 0xf6, 0xff, 0xff, 0xa4,
+ 0xfd, 0xff, 0xff, 0x1d, 0xfd, 0xff, 0xff, 0xe7, 0x28, 0x00, 0x00, 0x1e, 0xf6,
+ 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x12, 0xf8, 0xff, 0xff, 0x04, 0xf8, 0xff,
+ 0xff, 0x51, 0xf8, 0xff, 0xff, 0xde, 0xff, 0xff, 0xff, 0x15, 0x07, 0x00, 0x00,
+ 0xa4, 0xfa, 0xff, 0xff, 0xb4, 0xf8, 0xff, 0xff, 0x8b, 0x2d, 0x00, 0x00, 0xd5,
+ 0x2f, 0x00, 0x00, 0x47, 0xf9, 0xff, 0xff, 0xbb, 0xf8, 0xff, 0xff, 0xda, 0x39,
+ 0x00, 0x00, 0xa0, 0x14, 0x00, 0x00, 0x2c, 0xfb, 0xff, 0xff, 0x20, 0x01, 0x00,
+ 0x00, 0xf5, 0xfc, 0xff, 0xff, 0x4b, 0x29, 0x00, 0x00, 0x80, 0xfd, 0xff, 0xff,
+ 0x4c, 0x22, 0x00, 0x00, 0xd7, 0x07, 0x00, 0x00, 0xb3, 0x28, 0x00, 0x00, 0x21,
+ 0xff, 0xff, 0xff, 0xf3, 0xf7, 0xff, 0xff, 0x17, 0xfe, 0xff, 0xff, 0xa3, 0xf4,
+ 0xff, 0xff, 0x4d, 0x38, 0x00, 0x00, 0x2a, 0xfd, 0xff, 0xff, 0x3b, 0x38, 0x00,
+ 0x00, 0x7a, 0xfc, 0xff, 0xff, 0x78, 0xfd, 0xff, 0xff, 0x5e, 0x01, 0x00, 0x00,
+ 0xb6, 0x43, 0x00, 0x00, 0x9e, 0xae, 0xfc, 0xff, 0x04, 0x00, 0x00, 0x00, 0x40,
+ 0x02, 0x00, 0x00, 0x47, 0xc3, 0xfe, 0xec, 0xfe, 0x7f, 0xd6, 0x81, 0x3d, 0x37,
+ 0x29, 0x0b, 0xb8, 0x1b, 0x0c, 0x3a, 0x13, 0xc8, 0xde, 0x81, 0xd3, 0x01, 0xf4,
+ 0xbc, 0x3c, 0xf7, 0x44, 0xac, 0x0b, 0xf6, 0x81, 0xc9, 0x30, 0x13, 0xe8, 0x31,
+ 0x0f, 0x2c, 0x8d, 0xc6, 0x7f, 0x28, 0x0d, 0xf9, 0xb9, 0xa3, 0x4d, 0x81, 0x0b,
+ 0xed, 0x7f, 0xfb, 0xe2, 0x7f, 0xbf, 0x91, 0x7f, 0xc9, 0xa9, 0x72, 0x30, 0xfb,
+ 0xe1, 0x42, 0x48, 0x81, 0x1f, 0x3c, 0x7f, 0x7c, 0xac, 0x93, 0x51, 0x7f, 0xdd,
+ 0x15, 0xf1, 0x13, 0x47, 0x7f, 0x34, 0x90, 0x63, 0xb4, 0xfd, 0x89, 0x7f, 0xb9,
+ 0x7f, 0x17, 0x31, 0xb5, 0x5f, 0xa1, 0x3d, 0x4c, 0x60, 0x9c, 0x38, 0x81, 0xe9,
+ 0xf7, 0x82, 0xb6, 0xfd, 0xcf, 0xed, 0x39, 0x81, 0x89, 0xba, 0x8a, 0x19, 0x27,
+ 0xe8, 0xde, 0x81, 0x44, 0x86, 0xb3, 0x5b, 0xa5, 0x81, 0x37, 0x8b, 0xd5, 0xab,
+ 0xac, 0x0c, 0xc4, 0x03, 0xfb, 0xea, 0xb8, 0xd5, 0xa4, 0xe3, 0xcd, 0xeb, 0xea,
+ 0xec, 0x24, 0xce, 0x10, 0xdc, 0xee, 0xdb, 0xe8, 0xe0, 0x35, 0x08, 0xcc, 0xea,
+ 0xf1, 0x3e, 0xf8, 0xc7, 0xf9, 0x9a, 0xfe, 0x4a, 0x30, 0xf9, 0xdd, 0x1a, 0xec,
+ 0x0b, 0xd9, 0xd0, 0xd7, 0xf9, 0xd0, 0xfb, 0x9e, 0xf0, 0xbb, 0xdf, 0xf5, 0x0a,
+ 0xdd, 0xfd, 0xdf, 0xd2, 0x07, 0xe0, 0xfe, 0x05, 0x96, 0x42, 0xf2, 0xec, 0xb9,
+ 0x3d, 0xf1, 0x66, 0x81, 0x18, 0x77, 0xf4, 0x89, 0x7f, 0xbe, 0x7f, 0x20, 0xf1,
+ 0x7f, 0xeb, 0xf5, 0x55, 0x81, 0x42, 0xbb, 0xdf, 0xba, 0x00, 0xef, 0x47, 0x03,
+ 0x8b, 0x81, 0xd6, 0xe0, 0xac, 0xab, 0x70, 0xa4, 0x81, 0xb3, 0x93, 0xa3, 0x75,
+ 0x7f, 0x4c, 0x24, 0x7f, 0x2d, 0x9b, 0x81, 0x7f, 0x8a, 0x4f, 0x02, 0x5f, 0xa6,
+ 0xfd, 0x4f, 0x8d, 0x81, 0xe0, 0xcf, 0xcd, 0x7f, 0xf6, 0x81, 0xca, 0xc7, 0x7f,
+ 0x0a, 0x6b, 0x5d, 0x2c, 0x28, 0x81, 0xbe, 0xa6, 0xdf, 0xba, 0x7f, 0x2c, 0x7e,
+ 0x7f, 0xf4, 0x7f, 0x94, 0x7f, 0x93, 0x81, 0x81, 0xb1, 0x81, 0x4c, 0x7f, 0x81,
+ 0x98, 0x7f, 0x81, 0xc2, 0x7f, 0x7f, 0x81, 0x6b, 0x82, 0xe3, 0x81, 0x7f, 0x22,
+ 0x3b, 0x7f, 0x89, 0x7f, 0x81, 0xab, 0xdb, 0x1e, 0x7f, 0x7f, 0x1b, 0x22, 0x65,
+ 0x4f, 0x81, 0x99, 0xaa, 0x81, 0x8b, 0x7f, 0x81, 0xef, 0x81, 0x81, 0x08, 0x23,
+ 0xf6, 0x7d, 0xab, 0xaf, 0xd9, 0x83, 0xc5, 0xfc, 0x0a, 0xf1, 0xea, 0x00, 0x3e,
+ 0xf3, 0x07, 0xdd, 0x16, 0x17, 0xd4, 0x54, 0x03, 0xfb, 0xec, 0x05, 0xde, 0xb3,
+ 0x32, 0x13, 0x9d, 0x34, 0xfc, 0xdc, 0x72, 0xdb, 0x7f, 0xc5, 0xfc, 0x1e, 0xf8,
+ 0xcd, 0xea, 0x02, 0xa3, 0xb8, 0xbf, 0xb4, 0x05, 0x0d, 0x11, 0x7f, 0x08, 0x13,
+ 0xcf, 0xf2, 0xf7, 0xcf, 0xef, 0xb7, 0x0f, 0xbe, 0xdf, 0x2c, 0xe1, 0x11, 0xad,
+ 0xb7, 0xf7, 0xbc, 0x58, 0x14, 0xeb, 0x02, 0xfe, 0x01, 0xfa, 0x12, 0xea, 0x07,
+ 0xf0, 0xd0, 0xf8, 0xfe, 0xe0, 0xee, 0x0c, 0x36, 0x16, 0xf1, 0x17, 0xc2, 0xea,
+ 0xd2, 0xfb, 0xdc, 0xe0, 0xef, 0x00, 0xc5, 0xd6, 0x32, 0x46, 0x77, 0x01, 0xcf,
+ 0x2f, 0x0f, 0xc0, 0xd8, 0xec, 0x8b, 0xe7, 0xdb, 0xaa, 0xb9, 0x0a, 0xe6, 0x1d,
+ 0x22, 0xa5, 0x36, 0xd8, 0xb0, 0x30, 0x8a, 0xf3, 0xf3, 0x14, 0x0e, 0x81, 0xea,
+ 0xf3, 0xd0, 0xfc, 0xb0, 0xd1, 0xed, 0xea, 0x21, 0x7f, 0x61, 0x01, 0xb2, 0x07,
+ 0xa0, 0x0e, 0xfd, 0x98, 0x08, 0xd3, 0xe9, 0x07, 0xf0, 0xf2, 0xb4, 0x33, 0xdc,
+ 0x96, 0xd9, 0x10, 0xcc, 0xd5, 0xb5, 0x02, 0x63, 0x56, 0x1d, 0x2a, 0x5a, 0xea,
+ 0x2d, 0xba, 0xbd, 0x1c, 0x0d, 0x1f, 0x1e, 0x3a, 0x3f, 0x2e, 0xe4, 0xfc, 0xe4,
+ 0xb9, 0xd2, 0xb4, 0xd0, 0xb2, 0xc9, 0xd8, 0x2b, 0xe6, 0xf6, 0xe7, 0x2e, 0xef,
+ 0xf5, 0x28, 0xf0, 0xfd, 0x0b, 0xec, 0xfd, 0x15, 0xcd, 0xee, 0xee, 0xf1, 0x0f,
+ 0xa1, 0x0b, 0xce, 0xea, 0xf6, 0x07, 0xea, 0xf8, 0xf0, 0x22, 0xfe, 0x0b, 0xe0,
+ 0x0f, 0x01, 0xf2, 0xed, 0x22, 0x1b, 0x48, 0xd7, 0xf9, 0x05, 0xf5, 0xd1, 0xe1,
+ 0xe2, 0xf0, 0xf2, 0xb1, 0xf3, 0xee, 0x0c, 0x4d, 0xf4, 0xe9, 0x2d, 0x1d, 0x0e,
+ 0xd2, 0x08, 0x1e, 0x2c, 0x11, 0x40, 0x28, 0xea, 0xb0, 0xfc, 0xff, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x8b, 0x31, 0x00, 0x00, 0xe5, 0x8e, 0x00,
+ 0x00, 0x3e, 0x18, 0x00, 0x00, 0xd4, 0x04, 0x00, 0x00, 0xda, 0x3d, 0x00, 0x00,
+ 0x9d, 0xf1, 0xff, 0xff, 0x5e, 0x56, 0x00, 0x00, 0xe2, 0x3c, 0x00, 0x00, 0xef,
+ 0xde, 0xff, 0xff, 0x58, 0x35, 0x00, 0x00, 0x4a, 0x14, 0x00, 0x00, 0x9f, 0xf0,
+ 0xff, 0xff, 0x0e, 0x10, 0x00, 0x00, 0x1f, 0xdc, 0xff, 0xff, 0xf1, 0x08, 0x00,
+ 0x00, 0x47, 0x32, 0x00, 0x00, 0x12, 0x43, 0x00, 0x00, 0x6d, 0x1c, 0x00, 0x00,
+ 0x44, 0x7d, 0xff, 0xff, 0x96, 0x0b, 0x00, 0x00, 0xd3, 0x11, 0x00, 0x00, 0x13,
+ 0x1b, 0x00, 0x00, 0xb4, 0xa8, 0xff, 0xff, 0x1e, 0x1c, 0x00, 0x00, 0x2b, 0xd2,
+ 0xff, 0xff, 0x4b, 0x8b, 0x00, 0x00, 0x20, 0x27, 0x00, 0x00, 0xcd, 0xff, 0xff,
+ 0xff, 0x50, 0xce, 0xff, 0xff, 0x02, 0x39, 0x00, 0x00, 0x08, 0x30, 0x00, 0x00,
+ 0x91, 0xf1, 0xff, 0xff, 0x61, 0x12, 0x00, 0x00, 0xa9, 0x50, 0x00, 0x00, 0x28,
+ 0x1a, 0x00, 0x00, 0x4a, 0x0d, 0x00, 0x00, 0x60, 0x3b, 0x00, 0x00, 0x07, 0x37,
+ 0x00, 0x00, 0x15, 0x63, 0x00, 0x00, 0xac, 0x0f, 0x00, 0x00, 0xbe, 0x37, 0x00,
+ 0x00, 0xfd, 0x2d, 0x00, 0x00, 0x1a, 0x3c, 0x00, 0x00, 0x08, 0x4b, 0x00, 0x00,
+ 0x05, 0x17, 0x00, 0x00, 0x0a, 0x70, 0x00, 0x00, 0xde, 0xec, 0x00, 0x00, 0x12,
+ 0xef, 0xff, 0xff, 0xa8, 0xa0, 0xff, 0xff, 0x5d, 0x4b, 0x00, 0x00, 0x62, 0x1f,
+ 0x00, 0x00, 0x27, 0xfe, 0xff, 0xff, 0x8b, 0x23, 0x00, 0x00, 0xc5, 0xfe, 0xff,
+ 0xff, 0xc4, 0x02, 0x00, 0x00, 0xfc, 0x6a, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00,
+ 0xf9, 0x44, 0x00, 0x00, 0x15, 0x65, 0x00, 0x00, 0xae, 0x0c, 0x00, 0x00, 0x0d,
+ 0x6d, 0x00, 0x00, 0x37, 0x14, 0x00, 0x00, 0x86, 0x39, 0x00, 0x00, 0xfd, 0x60,
+ 0x00, 0x00, 0xcc, 0x09, 0xfc, 0xff, 0xd0, 0x09, 0xfc, 0xff, 0xd4, 0x09, 0xfc,
+ 0xff, 0x02, 0xb2, 0xfc, 0xff, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00,
+ 0x57, 0xc3, 0x64, 0x7f, 0x09, 0x99, 0x87, 0xf8, 0x13, 0x56, 0x0d, 0xbb, 0xe5,
+ 0x1d, 0xec, 0x1c, 0x72, 0xd5, 0x92, 0xc5, 0xa9, 0x79, 0x1a, 0xb3, 0xfc, 0x07,
+ 0xed, 0x44, 0x0f, 0x7f, 0x67, 0x4b, 0xee, 0x81, 0xd9, 0xd1, 0x2f, 0x7b, 0x81,
+ 0x81, 0xb8, 0xa1, 0x81, 0x7f, 0xc1, 0xf0, 0xc3, 0x7f, 0xc8, 0xc6, 0x63, 0x24,
+ 0x25, 0x26, 0x81, 0x9d, 0x4d, 0x81, 0x57, 0x81, 0xba, 0x12, 0xe7, 0x55, 0xed,
+ 0x95, 0x5c, 0x22, 0xe0, 0x14, 0x38, 0x33, 0xf9, 0x73, 0xf8, 0x19, 0xaf, 0xb6,
+ 0x7f, 0x76, 0xa7, 0xd2, 0xca, 0xb2, 0x98, 0xad, 0x40, 0x23, 0x56, 0xdd, 0x59,
+ 0xd4, 0x23, 0x50, 0xf4, 0xf0, 0xcd, 0x40, 0x56, 0xb8, 0x81, 0xc0, 0x94, 0xd0,
+ 0xca, 0xb9, 0x2f, 0xf3, 0xf1, 0x0a, 0x3a, 0x7f, 0xbe, 0x6e, 0x7f, 0x73, 0xda,
+ 0x81, 0x58, 0x87, 0x49, 0x9f, 0xd5, 0x7f, 0x09, 0x5f, 0x1b, 0x16, 0x3e, 0xc1,
+ 0xb0, 0x26, 0xd9, 0x0c, 0x8c, 0x00, 0xde, 0x25, 0x2e, 0xe7, 0xb7, 0x7f, 0xd7,
+ 0x65, 0xef, 0x0f, 0x81, 0x8b, 0x9a, 0xf4, 0x5b, 0x0c, 0xd1, 0xaf, 0xdc, 0x05,
+ 0x10, 0xf8, 0xbf, 0x7d, 0xd9, 0xc6, 0xe2, 0xe2, 0xe5, 0x7f, 0xe3, 0x0d, 0xab,
+ 0x99, 0x28, 0x22, 0xce, 0x4c, 0xdf, 0x63, 0x0f, 0x9d, 0x7f, 0x7f, 0x19, 0x31,
+ 0xe7, 0xd4, 0x7f, 0xc5, 0x29, 0x88, 0xe5, 0x06, 0xd2, 0x4e, 0xc7, 0x3b, 0x2b,
+ 0xf5, 0x7f, 0xd6, 0x2d, 0x02, 0x8c, 0x50, 0xdc, 0xa3, 0xb2, 0x99, 0x32, 0x7f,
+ 0x56, 0xc7, 0x2a, 0x36, 0xcb, 0xfa, 0xba, 0x40, 0x3e, 0x05, 0x7f, 0xdc, 0x29,
+ 0x2c, 0xec, 0xfb, 0xc9, 0x7f, 0x08, 0x4a, 0x04, 0xdc, 0xa1, 0x50, 0xdb, 0xe7,
+ 0xf8, 0x91, 0xe9, 0xfc, 0x67, 0x3b, 0x99, 0x32, 0x69, 0x10, 0xeb, 0x17, 0xa6,
+ 0xae, 0xf2, 0x78, 0xf3, 0x5d, 0x08, 0x72, 0x35, 0x09, 0x16, 0x83, 0xa1, 0x41,
+ 0x44, 0x34, 0x55, 0x28, 0x23, 0xd8, 0x44, 0xb6, 0x2b, 0x65, 0xe3, 0xcd, 0x7f,
+ 0xeb, 0xf3, 0x25, 0xb2, 0x81, 0x7f, 0x15, 0xb4, 0xae, 0x9a, 0x1a, 0x0d, 0xca,
+ 0x81, 0x1f, 0x81, 0xb7, 0xf8, 0xb6, 0x78, 0x27, 0xa7, 0xab, 0xab, 0xae, 0xdc,
+ 0xfe, 0xaa, 0x1b, 0x34, 0xf9, 0x38, 0x97, 0x2c, 0x14, 0x37, 0x3e, 0xb8, 0x9a,
+ 0x4c, 0xc0, 0x7f, 0xdf, 0x9d, 0xca, 0x1d, 0x8f, 0xdd, 0x7f, 0x7f, 0x1a, 0xf2,
+ 0xef, 0x7f, 0x7f, 0xca, 0x4b, 0xea, 0xd7, 0xb1, 0xfd, 0x61, 0x74, 0x1c, 0xa6,
+ 0x7f, 0x1b, 0x81, 0x7f, 0xe4, 0x07, 0x7f, 0xee, 0x40, 0xbd, 0x28, 0xf4, 0xe2,
+ 0x7f, 0xcc, 0x64, 0x2f, 0xf3, 0x92, 0x9b, 0x8c, 0xf5, 0xa0, 0xdc, 0x0d, 0xc2,
+ 0x03, 0x22, 0x4f, 0x47, 0xbc, 0x17, 0x1d, 0x2e, 0xd5, 0x3a, 0xbd, 0xbd, 0x22,
+ 0x72, 0xf8, 0x25, 0xfe, 0x7e, 0x7f, 0x04, 0x10, 0xe0, 0x7f, 0x10, 0x46, 0xf1,
+ 0xad, 0x46, 0x7f, 0x35, 0xff, 0xde, 0xe7, 0xcf, 0xf5, 0x7f, 0x55, 0xf0, 0xbc,
+ 0xc2, 0xda, 0x7b, 0x51, 0x34, 0x0c, 0xb0, 0x1c, 0x0e, 0x08, 0x26, 0x79, 0x35,
+ 0x8b, 0x35, 0x0d, 0xe2, 0x6d, 0x14, 0x28, 0x81, 0xa9, 0x81, 0x41, 0x26, 0xf1,
+ 0x3a, 0xa9, 0x55, 0x81, 0x8f, 0xcc, 0x5f, 0x7f, 0x7f, 0xd2, 0x13, 0xd9, 0xbc,
+ 0x00, 0x86, 0xc6, 0x7f, 0x25, 0xf6, 0x9b, 0xc2, 0x43, 0x7f, 0xf2, 0x1f, 0x23,
+ 0x37, 0x53, 0x3f, 0x3e, 0x1a, 0xbb, 0x08, 0x61, 0xdc, 0xf9, 0x9a, 0x22, 0xcf,
+ 0x9d, 0x2d, 0x7f, 0x35, 0xac, 0xe8, 0xf6, 0x9b, 0x7f, 0x03, 0xdc, 0xe5, 0xfa,
+ 0xfe, 0x7f, 0x96, 0xc0, 0x81, 0xbf, 0x39, 0xae, 0x4b, 0x29, 0x3d, 0x1e, 0xf0,
+ 0xaf, 0xe6, 0xc3, 0x7f, 0x8f, 0x22, 0xf3, 0x92, 0x7f, 0xaf, 0x79, 0x83, 0x22,
+ 0x27, 0x20, 0x7f, 0xb1, 0xdb, 0x54, 0x1b, 0x0a, 0xd2, 0x7f, 0x7f, 0xd1, 0x22,
+ 0xff, 0x21, 0x29, 0xf1, 0xc6, 0x20, 0x3d, 0x7a, 0xc1, 0xd2, 0xb7, 0xca, 0x7f,
+ 0x14, 0x2b, 0x7f, 0xf7, 0xa8, 0x4c, 0x1f, 0x08, 0x08, 0x5d, 0x7f, 0xbd, 0x31,
+ 0x02, 0x32, 0xf6, 0xbf, 0xa5, 0x90, 0x7f, 0x11, 0x9e, 0xf6, 0x28, 0x2d, 0x3d,
+ 0xfe, 0xda, 0x31, 0x2f, 0x01, 0x15, 0x0b, 0xcc, 0x26, 0x54, 0xb2, 0xf5, 0xd8,
+ 0x9d, 0x3b, 0xfd, 0x81, 0xca, 0x28, 0x69, 0xef, 0x52, 0x41, 0xd3, 0xec, 0x23,
+ 0x7f, 0x30, 0x53, 0x81, 0x3d, 0x23, 0xe0, 0x7f, 0xc2, 0xe7, 0x54, 0x68, 0x2a,
+ 0xd2, 0x11, 0x1e, 0xcf, 0xe0, 0xcd, 0x38, 0x7f, 0x7f, 0x37, 0x7f, 0xf1, 0x75,
+ 0x57, 0xf9, 0x0c, 0xf3, 0x17, 0xfa, 0x6a, 0x22, 0x11, 0x7f, 0xe2, 0x08, 0x36,
+ 0x14, 0x5f, 0xbb, 0x0e, 0xf7, 0x78, 0x59, 0x33, 0x78, 0x6c, 0xf9, 0x64, 0x0e,
+ 0x02, 0xc2, 0x02, 0x7f, 0xe7, 0x82, 0x1f, 0x31, 0x2e, 0x7f, 0x7f, 0x69, 0x16,
+ 0x7f, 0x20, 0xb3, 0x02, 0x3c, 0xeb, 0x5c, 0xd3, 0x07, 0x81, 0x54, 0x9a, 0x20,
+ 0xd1, 0xa8, 0x81, 0xdf, 0x33, 0x09, 0xc5, 0xf5, 0x7c, 0xe9, 0xf7, 0x18, 0x13,
+ 0x7f, 0xf0, 0xd8, 0xcf, 0xc8, 0xcf, 0xcb, 0xf4, 0xd1, 0x1c, 0x35, 0xc9, 0x26,
+ 0xba, 0xae, 0x3f, 0x31, 0x45, 0xf2, 0x26, 0xf6, 0xca, 0x10, 0xca, 0x94, 0x03,
+ 0x22, 0xd3, 0x81, 0x29, 0x4b, 0x73, 0x65, 0xea, 0x26, 0x3b, 0x42, 0x78, 0x29,
+ 0x0f, 0xc6, 0x1e, 0x5c, 0x85, 0x39, 0x81, 0x05, 0x7f, 0x89, 0x28, 0x52, 0x2c,
+ 0xda, 0x18, 0xdc, 0x1a, 0x43, 0x07, 0x29, 0x5a, 0xee, 0xf4, 0x14, 0x7f, 0xed,
+ 0xff, 0xbf, 0xe7, 0xa2, 0x3e, 0x7f, 0xb6, 0x1a, 0xf8, 0x2d, 0xfc, 0x97, 0xd9,
+ 0x12, 0x3f, 0x63, 0xff, 0x2e, 0x81, 0x2b, 0x39, 0x43, 0xf5, 0xfa, 0x77, 0x44,
+ 0x4e, 0x12, 0x7f, 0x3c, 0x74, 0x15, 0xb7, 0xd2, 0x3a, 0x4a, 0x72, 0xf4, 0x04,
+ 0x81, 0xad, 0xd9, 0x5a, 0xd8, 0x7f, 0xc2, 0x95, 0xeb, 0x2d, 0xde, 0x52, 0x7f,
+ 0xe8, 0xa0, 0x01, 0x0e, 0x1c, 0x39, 0x57, 0x01, 0x49, 0x7f, 0xf0, 0xfc, 0x24,
+ 0x24, 0xfe, 0xe6, 0x8b, 0xd0, 0x02, 0xba, 0x60, 0x10, 0x23, 0xc0, 0xac, 0xa5,
+ 0xa5, 0x2e, 0x1d, 0x8a, 0x7f, 0xfb, 0xca, 0xf9, 0xe7, 0xec, 0x29, 0x12, 0x94,
+ 0xab, 0xb6, 0x39, 0x3f, 0xe2, 0x7f, 0xf4, 0x24, 0x48, 0x51, 0x7f, 0x6f, 0x9c,
+ 0x3a, 0x33, 0xc8, 0x03, 0xe3, 0xb0, 0xf5, 0xad, 0x1d, 0x4b, 0xec, 0xd6, 0x01,
+ 0xc0, 0x7f, 0xb0, 0x3e, 0xe6, 0xf0, 0xe6, 0x97, 0x7c, 0x8b, 0xb7, 0x1a, 0x81,
+ 0x37, 0x81, 0x29, 0x33, 0x33, 0xc0, 0x7f, 0x81, 0x96, 0x81, 0xc3, 0x92, 0x62,
+ 0x30, 0xba, 0xb1, 0xc6, 0x6f, 0xc9, 0x32, 0xc1, 0x7f, 0x0e, 0xe6, 0x25, 0xde,
+ 0x4c, 0xc8, 0xff, 0x16, 0x37, 0xd7, 0xe8, 0xf3, 0x7f, 0xfc, 0x3a, 0xf3, 0xe2,
+ 0x81, 0xff, 0xd4, 0x5f, 0xaf, 0xea, 0xe4, 0xe8, 0x52, 0x60, 0x1c, 0x9c, 0x81,
+ 0x30, 0x7f, 0xaa, 0xa5, 0xb4, 0x54, 0x1f, 0x5b, 0x7f, 0x1c, 0x0f, 0xfc, 0xab,
+ 0x9e, 0xb0, 0xc6, 0xc9, 0x81, 0x7f, 0x20, 0x8d, 0xd4, 0xa1, 0x93, 0xb2, 0xe9,
+ 0xf9, 0xe5, 0x34, 0x5a, 0x86, 0xaa, 0x8a, 0x81, 0x2d, 0x03, 0xc6, 0xc0, 0x26,
+ 0x0e, 0xd4, 0xe3, 0x4f, 0xf3, 0x4c, 0x60, 0xd2, 0x61, 0x1c, 0x1e, 0x7f, 0xdc,
+ 0xba, 0x25, 0xcb, 0x9a, 0x50, 0xbd, 0x7f, 0xaa, 0x81, 0xc1, 0xeb, 0xb9, 0x52,
+ 0xe5, 0x1d, 0xff, 0xdd, 0xba, 0xdc, 0x18, 0x5e, 0xd1, 0x9f, 0xac, 0x7f, 0xe9,
+ 0x7f, 0xf3, 0x7f, 0x2d, 0x7e, 0xed, 0xb5, 0x15, 0xda, 0x9d, 0x23, 0x56, 0x6b,
+ 0xa2, 0xcc, 0x2f, 0x81, 0x36, 0xb8, 0x07, 0x45, 0xaf, 0x01, 0x0d, 0x73, 0x2f,
+ 0x45, 0xf3, 0x19, 0xd8, 0x21, 0x4f, 0x31, 0xe4, 0x7f, 0xdb, 0xb9, 0xdf, 0xa5,
+ 0x0c, 0x10, 0xad, 0xa0, 0x5c, 0xd0, 0x6d, 0xc1, 0xe9, 0x20, 0xa4, 0x7f, 0x35,
+ 0xfe, 0xc3, 0x23, 0x7e, 0x43, 0x42, 0x13, 0x07, 0x21, 0xcc, 0x15, 0xac, 0x8e,
+ 0xca, 0xcc, 0x47, 0x5c, 0x7f, 0xc7, 0x2f, 0x81, 0x09, 0x37, 0xda, 0xee, 0x96,
+ 0x4a, 0x03, 0x93, 0xcf, 0xc4, 0xd7, 0xe2, 0x7f, 0xca, 0xba, 0x2d, 0x1a, 0xf6,
+ 0x1c, 0xec, 0xf7, 0xc9, 0x7f, 0x40, 0x48, 0x7f, 0x97, 0x74, 0x43, 0xda, 0x74,
+ 0x14, 0xe1, 0x3e, 0x96, 0x32, 0x25, 0xd9, 0x21, 0x7f, 0xba, 0x53, 0xd3, 0x76,
+ 0xd2, 0x14, 0xc2, 0xa9, 0xd5, 0x2c, 0xa3, 0x9d, 0x9e, 0x45, 0x87, 0x14, 0x0a,
+ 0xae, 0xdc, 0x1a, 0x1c, 0xe1, 0xbb, 0xc1, 0x83, 0x7f, 0x7f, 0xe6, 0xba, 0xcd,
+ 0x7f, 0x4b, 0x7f, 0xcc, 0x49, 0xd8, 0x36, 0x7f, 0x8e, 0xb6, 0xfc, 0xff, 0x04,
+ 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x81, 0xd9, 0xb1, 0x81, 0x51, 0x0d,
+ 0x56, 0x42, 0xa4, 0x72, 0xe6, 0xd3, 0x0e, 0x5e, 0xae, 0x23, 0xd1, 0x7f, 0x4a,
+ 0xe6, 0x0b, 0x0f, 0x24, 0xb8, 0x60, 0x38, 0xf1, 0x3c, 0xf2, 0xeb, 0xed, 0xf8,
+ 0xe3, 0x37, 0xd9, 0x14, 0x40, 0x35, 0xa9, 0x1c, 0x98, 0x2c, 0x7f, 0x7f, 0xbe,
+ 0x27, 0x22, 0x37, 0xe3, 0xdd, 0x54, 0xce, 0x9d, 0x11, 0xf6, 0xf4, 0x2b, 0xf3,
+ 0x40, 0x6d, 0x0b, 0xf5, 0x7f, 0xab, 0xac, 0x0b, 0xaf, 0x81, 0xf5, 0x6e, 0xf4,
+ 0xd1, 0xd0, 0x81, 0xdb, 0x44, 0x91, 0x99, 0x27, 0xbc, 0x46, 0xa7, 0xd6, 0x20,
+ 0x0c, 0xa1, 0x81, 0x2e, 0xba, 0xda, 0xc8, 0x2b, 0xd6, 0xa1, 0xdd, 0x15, 0x12,
+ 0xdf, 0x26, 0x4d, 0xe2, 0xe8, 0xeb, 0xe7, 0x08, 0xd4, 0xb5, 0xd2, 0xa0, 0x7f,
+ 0xb0, 0x4b, 0xe0, 0x95, 0xb9, 0xc3, 0xb6, 0xcf, 0xc3, 0xc5, 0xad, 0xeb, 0x12,
+ 0xd4, 0x2f, 0x0a, 0xb1, 0x5e, 0x5d, 0x7f, 0x1e, 0xbb, 0x49, 0xc0, 0x10, 0x7f,
+ 0xea, 0x8a, 0xa7, 0x4b, 0x47, 0x7f, 0x40, 0x7f, 0xa5, 0x46, 0xf6, 0xda, 0x27,
+ 0x2f, 0x3a, 0xdc, 0xb6, 0x7f, 0x59, 0x6e, 0xf0, 0x1b, 0x2b, 0x76, 0x1b, 0x72,
+ 0x8f, 0x77, 0x7f, 0xf3, 0xeb, 0x06, 0xb2, 0xdc, 0x22, 0x38, 0x40, 0x5e, 0x59,
+ 0x1e, 0x49, 0x6d, 0xe0, 0xe8, 0x09, 0x7f, 0x34, 0x7f, 0x7f, 0x3f, 0x52, 0x34,
+ 0x7f, 0x99, 0x39, 0xf0, 0xd0, 0x2b, 0xb6, 0x96, 0x87, 0x62, 0xd9, 0x91, 0x93,
+ 0x8a, 0x3d, 0x0a, 0x8b, 0xf9, 0x97, 0x7f, 0x7f, 0xb0, 0x04, 0x72, 0x4d, 0xb1,
+ 0x22, 0x7f, 0xae, 0x34, 0xf1, 0x3a, 0xd1, 0x81, 0xac, 0xa0, 0x27, 0x7f, 0x26,
+ 0x7f, 0xa1, 0xc0, 0xa7, 0x7f, 0x81, 0xc8, 0x81, 0x18, 0xad, 0xdc, 0x9d, 0x0c,
+ 0x51, 0xd5, 0xb4, 0xf0, 0xb0, 0xdf, 0x16, 0xf0, 0x87, 0x92, 0xf3, 0x1a, 0x7f,
+ 0x8c, 0x83, 0x55, 0x7c, 0x43, 0xe8, 0x9d, 0x07, 0xf3, 0x7f, 0x24, 0x81, 0xbb,
+ 0x19, 0x20, 0x2a, 0x1a, 0xa2, 0x61, 0xcb, 0xa2, 0x24, 0xde, 0xc2, 0x39, 0x16,
+ 0xa4, 0xa6, 0x57, 0xfe, 0x61, 0xd6, 0x46, 0xf0, 0xec, 0x7f, 0x24, 0xcf, 0xe1,
+ 0x4c, 0xe6, 0x0f, 0xfb, 0xeb, 0xc2, 0x60, 0x7c, 0x53, 0x55, 0xcd, 0x7f, 0xd9,
+ 0x06, 0xe5, 0xd4, 0xde, 0x1b, 0x0e, 0x38, 0x35, 0x22, 0x27, 0x17, 0x19, 0x29,
+ 0x59, 0xe0, 0xce, 0xf3, 0x81, 0x9f, 0xd6, 0x74, 0xf2, 0x65, 0xe4, 0x9a, 0x7f,
+ 0xd5, 0xd1, 0xc3, 0xb8, 0xe2, 0x50, 0x9e, 0x4b, 0x35, 0xfb, 0xab, 0x46, 0x0b,
+ 0xd1, 0xdc, 0xdb, 0x22, 0xc6, 0xbf, 0xce, 0xe7, 0x08, 0x51, 0xfa, 0xcf, 0x9a,
+ 0x99, 0xad, 0x30, 0x9c, 0xa9, 0x8b, 0xef, 0x9e, 0xec, 0x98, 0x7f, 0x7f, 0xd5,
+ 0x7f, 0x35, 0xb1, 0xdb, 0x22, 0xba, 0xe9, 0xc2, 0xf2, 0xdf, 0x89, 0x24, 0xe7,
+ 0x23, 0xfb, 0xdd, 0x23, 0xd3, 0x12, 0x94, 0x2a, 0x13, 0xd8, 0x8f, 0x81, 0xc8,
+ 0x3d, 0xca, 0xbc, 0x55, 0xd4, 0x71, 0xe2, 0xc3, 0x01, 0x34, 0xb2, 0xf4, 0x5c,
+ 0xa8, 0x13, 0xe8, 0x7c, 0x97, 0xe9, 0xeb, 0x9c, 0x7f, 0xb1, 0x32, 0x2b, 0x7f,
+ 0xcb, 0x1b, 0xb0, 0x7f, 0x24, 0x33, 0x49, 0x7f, 0x34, 0xe3, 0x13, 0xb8, 0x61,
+ 0xb8, 0x7f, 0x3a, 0x37, 0xd1, 0x27, 0x65, 0xeb, 0x0f, 0x0c, 0xc7, 0x5e, 0x6b,
+ 0xc6, 0x22, 0x03, 0x8a, 0xf3, 0x81, 0xc6, 0xeb, 0x14, 0xd7, 0x14, 0xf7, 0xb3,
+ 0xd3, 0x51, 0x0e, 0x41, 0x92, 0x03, 0x7f, 0x45, 0xd8, 0x8d, 0xe6, 0x18, 0x07,
+ 0x00, 0x69, 0xd1, 0x98, 0xa1, 0x8d, 0x23, 0xd1, 0xe7, 0x2e, 0xe3, 0x72, 0xe0,
+ 0xf2, 0xdf, 0x93, 0x21, 0xf6, 0xf6, 0x2d, 0x81, 0xf7, 0xe2, 0xfd, 0xa8, 0x14,
+ 0xad, 0xa6, 0x94, 0x99, 0xcc, 0xcd, 0x7f, 0xfe, 0x35, 0x89, 0x8e, 0x2b, 0x4c,
+ 0x2e, 0xdf, 0xb3, 0x36, 0x81, 0xbc, 0x32, 0xa4, 0x81, 0xa6, 0x7f, 0x47, 0x43,
+ 0x8e, 0x68, 0x7f, 0x26, 0x7f, 0xbb, 0x7f, 0x7f, 0xa1, 0xcb, 0x0f, 0x17, 0x7f,
+ 0x77, 0x4f, 0x57, 0xb2, 0xef, 0x0a, 0x28, 0xb6, 0x2f, 0x19, 0xf7, 0x89, 0x23,
+ 0xbd, 0xdc, 0x10, 0x26, 0x7f, 0x3e, 0x7f, 0x07, 0x7f, 0x47, 0x9b, 0x81, 0x68,
+ 0x1f, 0x7f, 0x10, 0x2f, 0x7f, 0x7f, 0xfc, 0x58, 0x81, 0xfa, 0x7f, 0xb6, 0x7f,
+ 0xcb, 0x8e, 0x40, 0xcb, 0x67, 0xd9, 0x7f, 0x9d, 0xfe, 0xbf, 0xd8, 0xa6, 0x7f,
+ 0x3e, 0x5f, 0xd2, 0xaf, 0x00, 0x7f, 0x81, 0xd6, 0x18, 0x07, 0x52, 0x2b, 0x79,
+ 0xeb, 0xaf, 0xcd, 0xb0, 0x4d, 0x4b, 0x4a, 0x6d, 0xe6, 0x7f, 0xaf, 0x5e, 0x9c,
+ 0xc6, 0x46, 0x38, 0x18, 0xd2, 0xc0, 0xff, 0x4a, 0xf3, 0xb7, 0xe1, 0xe5, 0x81,
+ 0x7f, 0xb4, 0xbb, 0x7f, 0x7f, 0x7f, 0xdc, 0x81, 0xdb, 0x4f, 0x3b, 0x09, 0x02,
+ 0xc1, 0x19, 0xfb, 0xff, 0x23, 0xdc, 0xa5, 0x00, 0x52, 0x7f, 0xfe, 0x9d, 0x4d,
+ 0xe9, 0xed, 0xe5, 0xd5, 0x05, 0x37, 0xd5, 0xeb, 0xdd, 0xe9, 0x22, 0x7f, 0x04,
+ 0x7f, 0xc5, 0x7f, 0x68, 0x5c, 0x81, 0xc8, 0x27, 0x29, 0x8f, 0xe8, 0x81, 0xa3,
+ 0x03, 0x35, 0x40, 0x61, 0x26, 0x0a, 0x4d, 0xcd, 0xf6, 0xac, 0x07, 0x0d, 0xf8,
+ 0x72, 0x03, 0x17, 0x34, 0x14, 0x01, 0xb7, 0x3c, 0xa9, 0xd4, 0x0b, 0xcd, 0xb3,
+ 0xfa, 0x86, 0x40, 0x7f, 0x16, 0x8b, 0x4f, 0x98, 0x42, 0xc0, 0x37, 0x03, 0xc4,
+ 0xc4, 0x94, 0x43, 0x02, 0xd2, 0x23, 0xf9, 0xf3, 0xde, 0xd1, 0x7f, 0xe8, 0x8b,
+ 0x81, 0x81, 0x05, 0x0a, 0x5b, 0x0c, 0x81, 0x43, 0xf7, 0x3c, 0x9a, 0xcc, 0x5b,
+ 0xfd, 0xf6, 0xc7, 0x98, 0x0b, 0x0e, 0xf0, 0x58, 0x77, 0x81, 0x98, 0xff, 0xa0,
+ 0xb4, 0x2d, 0x7a, 0xdd, 0xaf, 0xa5, 0x78, 0x2e, 0x7d, 0xc6, 0x7f, 0xb3, 0x22,
+ 0x43, 0xc3, 0x09, 0xb6, 0x8b, 0xe9, 0xe9, 0x37, 0x5d, 0x81, 0xcc, 0xde, 0x94,
+ 0xcb, 0x9c, 0x1f, 0xd8, 0xac, 0x81, 0x6e, 0xb3, 0xb5, 0xc7, 0x4e, 0xb3, 0x40,
+ 0x0e, 0xf2, 0xe9, 0x82, 0x16, 0xe8, 0x4b, 0x81, 0x7f, 0xdc, 0x40, 0xd4, 0xfb,
+ 0x7c, 0xbe, 0xeb, 0xec, 0x48, 0xe8, 0x7f, 0xaa, 0x3b, 0x2c, 0x1d, 0xbd, 0xc5,
+ 0xc1, 0xc4, 0x7f, 0xec, 0xfe, 0xda, 0x33, 0x81, 0x0f, 0x8c, 0xe7, 0x07, 0x13,
+ 0xb6, 0xf6, 0x33, 0x3b, 0x36, 0x81, 0xc5, 0x81, 0xf9, 0xf7, 0xcf, 0xb8, 0x07,
+ 0x1b, 0x25, 0x8c, 0xeb, 0x0a, 0x61, 0x24, 0xe7, 0xe5, 0x64, 0xd8, 0x8c, 0xb5,
+ 0x89, 0xad, 0x14, 0xa5, 0xa7, 0x5f, 0x9f, 0xec, 0x9d, 0xdb, 0x1f, 0xeb, 0x38,
+ 0x12, 0x50, 0x04, 0x05, 0x7f, 0xd5, 0x0d, 0xdf, 0xaf, 0x07, 0xaa, 0x88, 0xe9,
+ 0x22, 0x03, 0x42, 0xbb, 0x81, 0xb6, 0x5f, 0xb5, 0x74, 0x92, 0x7f, 0x4b, 0x89,
+ 0xe2, 0x95, 0x9e, 0x85, 0xfd, 0x11, 0x32, 0xb3, 0x58, 0x2e, 0xe0, 0xc8, 0xa2,
+ 0x1a, 0x6f, 0x81, 0x97, 0x7f, 0x97, 0xc6, 0x28, 0x41, 0x5a, 0x7f, 0xdc, 0xec,
+ 0x98, 0xba, 0x7f, 0x00, 0x1b, 0xa0, 0x6e, 0xc7, 0xc6, 0xd2, 0x1c, 0x33, 0xcf,
+ 0x3b, 0xe3, 0x5b, 0x68, 0x04, 0xb6, 0x39, 0x4d, 0x3d, 0xb0, 0x8c, 0x51, 0x26,
+ 0x5e, 0xd6, 0x9d, 0xeb, 0x1a, 0x05, 0xf7, 0xbe, 0xc8, 0x7f, 0x67, 0x7f, 0xc1,
+ 0x70, 0x3d, 0xf9, 0xb8, 0x6e, 0xbc, 0x37, 0xd4, 0xf9, 0xe2, 0x7f, 0x23, 0x33,
+ 0xe7, 0x9a, 0xf9, 0x7f, 0x7f, 0x7f, 0x61, 0x7f, 0xa7, 0xc2, 0xcc, 0x81, 0x01,
+ 0x7f, 0xd7, 0xa5, 0x6a, 0x81, 0xca, 0x88, 0x81, 0x4d, 0x59, 0x75, 0xb6, 0xc3,
+ 0xfd, 0x0c, 0x17, 0xcc, 0x7f, 0xab, 0xb6, 0x01, 0x89, 0x09, 0x22, 0x70, 0xf5,
+ 0xc1, 0xba, 0xf8, 0xfb, 0xd6, 0xfc, 0x65, 0x8c, 0x32, 0x63, 0xfd, 0xf1, 0xce,
+ 0x15, 0xbe, 0x13, 0x25, 0x73, 0xa2, 0xbf, 0xe6, 0xbe, 0xbb, 0x81, 0x2c, 0x53,
+ 0xe7, 0xa1, 0x48, 0x8d, 0xeb, 0xf5, 0x7f, 0x05, 0x13, 0x2f, 0x23, 0x02, 0xbd,
+ 0xf1, 0xff, 0xf5, 0xec, 0x4c, 0xd4, 0xe9, 0xca, 0xd4, 0x30, 0xf1, 0xb0, 0xe9,
+ 0x29, 0x7f, 0x42, 0x02, 0x30, 0x5b, 0x61, 0xa1, 0xed, 0x32, 0x31, 0x33, 0x0d,
+ 0x00, 0xda, 0xae, 0x91, 0x1f, 0x8e, 0x01, 0x2e, 0x46, 0x55, 0x36, 0x1c, 0x17,
+ 0x1e, 0xe2, 0x7f, 0xa1, 0x0f, 0xff, 0x6d, 0x81, 0x19, 0x28, 0xf6, 0xb1, 0xe9,
+ 0x0b, 0xb0, 0x4c, 0xb7, 0xa9, 0x3b, 0xe7, 0x84, 0x98, 0xc7, 0x26, 0xda, 0xa6,
+ 0x95, 0x27, 0xb7, 0x07, 0x20, 0xde, 0x4a, 0x7f, 0x7f, 0xcc, 0xf6, 0x01, 0x32,
+ 0xea, 0x31, 0x74, 0x93, 0x9e, 0xf0, 0x81, 0x81, 0xee, 0xf6, 0xfe, 0xae, 0xd6,
+ 0x55, 0x81, 0x1a, 0xbb, 0xfc, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0xcc, 0x1b, 0x00, 0x00, 0x82, 0x1f, 0x00, 0x00, 0xeb, 0x2d, 0x00, 0x00,
+ 0x9a, 0x2d, 0x00, 0x00, 0xff, 0x26, 0x00, 0x00, 0x2f, 0x35, 0x00, 0x00, 0x95,
+ 0xd4, 0xff, 0xff, 0xef, 0x14, 0x00, 0x00, 0xf3, 0x2f, 0x00, 0x00, 0xad, 0xe7,
+ 0xff, 0xff, 0x14, 0xd3, 0xff, 0xff, 0xcf, 0x0b, 0x00, 0x00, 0xb5, 0x19, 0x00,
+ 0x00, 0x22, 0x01, 0x00, 0x00, 0x2c, 0x18, 0x00, 0x00, 0xe6, 0xea, 0xff, 0xff,
+ 0xbf, 0x0a, 0x00, 0x00, 0x03, 0x0e, 0x00, 0x00, 0x15, 0xcc, 0xff, 0xff, 0xf9,
+ 0xf0, 0xff, 0xff, 0xfc, 0xea, 0xff, 0xff, 0x04, 0xe3, 0xff, 0xff, 0x68, 0x9d,
+ 0xff, 0xff, 0x8a, 0xdd, 0xff, 0xff, 0x7f, 0x15, 0x00, 0x00, 0x14, 0xee, 0xff,
+ 0xff, 0x7e, 0x12, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0xe3, 0x42, 0x00, 0x00,
+ 0xb2, 0xee, 0xff, 0xff, 0x2a, 0xed, 0xff, 0xff, 0x67, 0x1a, 0x00, 0x00, 0xbf,
+ 0xff, 0xff, 0xff, 0xdd, 0x3a, 0x00, 0x00, 0xff, 0xc9, 0xff, 0xff, 0x0a, 0xf7,
+ 0xff, 0xff, 0x89, 0xdb, 0xff, 0xff, 0x97, 0xf0, 0xff, 0xff, 0x30, 0x16, 0x00,
+ 0x00, 0x15, 0xfd, 0xff, 0xff, 0x52, 0x18, 0x00, 0x00, 0xbb, 0xf5, 0xff, 0xff,
+ 0xf4, 0xff, 0xff, 0xff, 0xb8, 0x23, 0x00, 0x00, 0x58, 0x2d, 0x00, 0x00, 0xc3,
+ 0xfe, 0xff, 0xff, 0xe7, 0x34, 0x00, 0x00, 0x8d, 0xcf, 0xff, 0xff, 0x3c, 0x34,
+ 0x00, 0x00, 0x21, 0x52, 0x00, 0x00, 0x98, 0x26, 0x00, 0x00, 0xc3, 0xef, 0xff,
+ 0xff, 0x40, 0xf3, 0xff, 0xff, 0xd8, 0x1f, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff,
+ 0x6e, 0xf8, 0xff, 0xff, 0x67, 0x13, 0x00, 0x00, 0x53, 0x17, 0x00, 0x00, 0xcd,
+ 0xb2, 0xff, 0xff, 0xaf, 0xe6, 0xff, 0xff, 0x6a, 0x1d, 0x00, 0x00, 0xda, 0x27,
+ 0x00, 0x00, 0xf1, 0x1c, 0x00, 0x00, 0x99, 0x15, 0x00, 0x00, 0x40, 0x08, 0x00,
+ 0x00, 0x75, 0xd8, 0xff, 0xff, 0x19, 0xdf, 0xff, 0xff, 0x49, 0xfa, 0xff, 0xff,
+ 0xc0, 0x26, 0x00, 0x00, 0x61, 0x26, 0x00, 0x00, 0xa6, 0x41, 0x00, 0x00, 0x1b,
+ 0xf3, 0xff, 0xff, 0x64, 0x05, 0x00, 0x00, 0x38, 0x17, 0x00, 0x00, 0x80, 0x3e,
+ 0x00, 0x00, 0x7e, 0xe7, 0xff, 0xff, 0xd2, 0xd5, 0xff, 0xff, 0xd6, 0xcd, 0xff,
+ 0xff, 0xe7, 0xde, 0xff, 0xff, 0xad, 0xf9, 0xff, 0xff, 0xc2, 0xe6, 0xff, 0xff,
+ 0xaf, 0xe5, 0xff, 0xff, 0x35, 0x43, 0x00, 0x00, 0xc1, 0x02, 0x00, 0x00, 0xcf,
+ 0xfe, 0xff, 0xff, 0x29, 0x1d, 0x00, 0x00, 0x7c, 0xef, 0xff, 0xff, 0x37, 0x0e,
+ 0x00, 0x00, 0x81, 0x13, 0x00, 0x00, 0x15, 0x31, 0x00, 0x00, 0xb6, 0x26, 0x00,
+ 0x00, 0x2b, 0x21, 0x00, 0x00, 0x1b, 0xf9, 0xff, 0xff, 0x1d, 0x03, 0x00, 0x00,
+ 0x71, 0xfd, 0xff, 0xff, 0xf0, 0x1e, 0x00, 0x00, 0x33, 0x21, 0x00, 0x00, 0x03,
+ 0xfd, 0xff, 0xff, 0x1f, 0xe7, 0xff, 0xff, 0x92, 0xea, 0xff, 0xff, 0x33, 0x08,
+ 0x00, 0x00, 0x3e, 0xe2, 0xff, 0xff, 0x7e, 0xe2, 0xff, 0xff, 0xc3, 0x12, 0x00,
+ 0x00, 0x3b, 0xda, 0xff, 0xff, 0x81, 0xf0, 0xff, 0xff, 0x5f, 0x28, 0x00, 0x00,
+ 0x6f, 0x2c, 0x00, 0x00, 0x8e, 0xf4, 0xff, 0xff, 0xe4, 0xd7, 0xff, 0xff, 0xa7,
+ 0x23, 0x00, 0x00, 0xe5, 0xe8, 0xff, 0xff, 0xc9, 0xee, 0xff, 0xff, 0xdf, 0x15,
+ 0x00, 0x00, 0x10, 0x2e, 0x00, 0x00, 0xf9, 0x14, 0x00, 0x00, 0x99, 0xc5, 0xff,
+ 0xff, 0x47, 0x17, 0x00, 0x00, 0x25, 0x1e, 0x00, 0x00, 0x31, 0x40, 0x00, 0x00,
+ 0x01, 0xfd, 0xff, 0xff, 0x9e, 0x0c, 0x00, 0x00, 0x50, 0x20, 0x00, 0x00, 0xba,
+ 0x50, 0x00, 0x00, 0x3e, 0xf3, 0xff, 0xff, 0x5b, 0xfe, 0xff, 0xff, 0x16, 0xe2,
+ 0xff, 0xff, 0x45, 0xfc, 0xff, 0xff, 0x26, 0xbd, 0xfc, 0xff, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x00, 0x00, 0x2f, 0xf6, 0xb9, 0xd7, 0x23, 0xf5, 0x3b, 0xe2,
+ 0x24, 0xbf, 0x2c, 0xf9, 0x38, 0x0f, 0x25, 0xc9, 0x00, 0x27, 0xe0, 0xd5, 0x10,
+ 0x9f, 0xf4, 0x11, 0xd1, 0x25, 0xf0, 0x28, 0x73, 0xc2, 0x11, 0xd8, 0xfc, 0x1f,
+ 0x3b, 0x1a, 0xed, 0x16, 0xf3, 0xcc, 0x01, 0xdd, 0xce, 0x45, 0x1d, 0xd9, 0x3a,
+ 0x3c, 0xfc, 0xa9, 0x3c, 0x31, 0xe4, 0xb8, 0xc3, 0x7f, 0xfd, 0x63, 0x00, 0x12,
+ 0xdf, 0xfd, 0x56, 0xe6, 0x38, 0xf7, 0x0d, 0x27, 0xee, 0xef, 0x1a, 0xe2, 0xc2,
+ 0xf7, 0x06, 0x01, 0xe1, 0xa3, 0x6a, 0x00, 0xc4, 0x02, 0x24, 0x34, 0xfc, 0xeb,
+ 0xd5, 0x10, 0xcf, 0xc8, 0x10, 0xeb, 0x49, 0xf9, 0x04, 0x14, 0xf7, 0xc7, 0xff,
+ 0x23, 0x4b, 0x3c, 0x4f, 0x0c, 0x21, 0x22, 0xb5, 0xf6, 0xd4, 0xd4, 0xde, 0x02,
+ 0xe6, 0x39, 0x16, 0xfe, 0x73, 0xb6, 0x04, 0x16, 0x12, 0xee, 0xf4, 0x66, 0xe3,
+ 0x00, 0x0c, 0xd6, 0xbf, 0x2e, 0xd9, 0x02, 0xd9, 0xc6, 0x35, 0x25, 0xdb, 0x3e,
+ 0x04, 0xc1, 0x17, 0xe5, 0x40, 0x9c, 0x0e, 0xf6, 0xc8, 0xa8, 0x00, 0x54, 0x4a,
+ 0x2d, 0xd2, 0xb7, 0xb5, 0xfe, 0xe2, 0x4c, 0x30, 0x34, 0xfe, 0xfc, 0x05, 0x32,
+ 0x46, 0x19, 0xca, 0xe6, 0x77, 0x17, 0x81, 0x62, 0xf0, 0xc7, 0x04, 0x4a, 0x51,
+ 0x18, 0x0f, 0x07, 0xa3, 0x1b, 0xe3, 0xc0, 0x63, 0x03, 0x01, 0x33, 0x14, 0x17,
+ 0x35, 0x2e, 0x78, 0x2f, 0x03, 0xdd, 0xf6, 0x53, 0x1c, 0x11, 0x59, 0x23, 0x14,
+ 0xdc, 0xd7, 0x04, 0xcb, 0x3c, 0x46, 0x0c, 0x2c, 0xa5, 0xf5, 0xf1, 0xef, 0xd8,
+ 0x4a, 0xcd, 0x3f, 0xb5, 0x37, 0x46, 0xef, 0x56, 0x07, 0x39, 0x19, 0xe7, 0x64,
+ 0xf1, 0x37, 0x28, 0xe5, 0x24, 0x18, 0x36, 0xe3, 0xc9, 0x64, 0x4c, 0x25, 0x76,
+ 0xd8, 0x00, 0xfd, 0x83, 0xfd, 0x4c, 0x0c, 0x3a, 0xe9, 0xc3, 0x17, 0x6c, 0xeb,
+ 0xe0, 0x48, 0x36, 0x07, 0xd7, 0xe2, 0x15, 0xd5, 0xf9, 0xff, 0x05, 0x0a, 0xee,
+ 0xae, 0x15, 0x09, 0x34, 0xb7, 0x0f, 0xc5, 0xbb, 0xf9, 0xca, 0xbe, 0x13, 0xa9,
+ 0xa8, 0xd5, 0x60, 0x81, 0xfb, 0x0c, 0x33, 0xf4, 0xd9, 0xf8, 0x31, 0xff, 0x23,
+ 0x13, 0x13, 0xda, 0x95, 0xfa, 0xe7, 0x4c, 0xc5, 0xe7, 0x5e, 0xf3, 0xc6, 0x1f,
+ 0x3e, 0xbd, 0x32, 0xe7, 0xe6, 0x35, 0xd5, 0x02, 0x42, 0x3d, 0x05, 0x08, 0xde,
+ 0xc0, 0x2d, 0x31, 0x94, 0xf4, 0x2c, 0x05, 0xd2, 0xf3, 0xd2, 0xf9, 0xc5, 0x13,
+ 0x63, 0x22, 0x1e, 0xfa, 0xea, 0x12, 0xc4, 0xb4, 0x22, 0xdf, 0xf0, 0xf9, 0x0d,
+ 0xfb, 0x35, 0xdd, 0xe9, 0xe4, 0xdb, 0x46, 0xe1, 0x91, 0x1b, 0x2b, 0x10, 0xc4,
+ 0xc6, 0x16, 0xff, 0xfe, 0xe2, 0x12, 0xfa, 0xbf, 0x18, 0x0d, 0xe0, 0xf1, 0xc6,
+ 0x1a, 0x49, 0x14, 0xf2, 0x04, 0xf3, 0xe1, 0x1a, 0xbd, 0x0e, 0x5b, 0xa7, 0x41,
+ 0x2a, 0xed, 0xf0, 0x00, 0x35, 0xe8, 0x1c, 0xe5, 0x2a, 0x35, 0x0b, 0x73, 0x23,
+ 0xe6, 0x00, 0x0d, 0xf8, 0x09, 0x1e, 0xe4, 0x26, 0x0e, 0x2b, 0xc3, 0x3e, 0x08,
+ 0x17, 0x15, 0xb7, 0xd5, 0xfe, 0xb7, 0xd1, 0x1a, 0x0e, 0xbd, 0x56, 0x13, 0xcd,
+ 0x2b, 0x19, 0x06, 0xca, 0xd2, 0x31, 0xcf, 0x0c, 0x3a, 0x0b, 0x19, 0x44, 0xe3,
+ 0x10, 0xe1, 0x15, 0x18, 0x00, 0x0c, 0x1c, 0x0d, 0xe9, 0x05, 0xdb, 0x3e, 0x40,
+ 0xeb, 0xb1, 0x08, 0x72, 0xe5, 0x31, 0x56, 0xd7, 0xde, 0xfb, 0x31, 0x00, 0x55,
+ 0x10, 0xc3, 0x12, 0xfa, 0xf1, 0x15, 0x7b, 0xef, 0xdd, 0x04, 0x20, 0xc7, 0x15,
+ 0x13, 0xf9, 0x35, 0x0b, 0xe8, 0x2a, 0xff, 0xf8, 0x7f, 0xdd, 0x47, 0xf7, 0xd1,
+ 0x19, 0x02, 0xfb, 0x02, 0x55, 0xd5, 0x15, 0xe5, 0x43, 0x21, 0xbf, 0x0b, 0xd8,
+ 0x14, 0x28, 0x0a, 0xd9, 0x12, 0x36, 0x40, 0xf4, 0xfc, 0x22, 0xf2, 0x25, 0x7f,
+ 0x06, 0x23, 0x01, 0x39, 0xfb, 0xeb, 0xfb, 0xff, 0xdd, 0x1f, 0xee, 0xcd, 0xd0,
+ 0x10, 0x07, 0xed, 0x17, 0x3e, 0x09, 0xdf, 0x1a, 0xfa, 0x07, 0x36, 0xd5, 0x31,
+ 0xdf, 0xf3, 0x06, 0xe7, 0x00, 0x1b, 0x10, 0x13, 0x01, 0xee, 0xf5, 0xdc, 0xe9,
+ 0xe6, 0x24, 0x13, 0x03, 0x00, 0x07, 0xde, 0xe7, 0xdc, 0x02, 0x32, 0xeb, 0xf7,
+ 0xcf, 0x06, 0xc1, 0xde, 0xba, 0xf4, 0x07, 0x2a, 0x06, 0xf2, 0xeb, 0xce, 0x1e,
+ 0xe7, 0xcf, 0xfa, 0x01, 0xce, 0xdb, 0x08, 0x24, 0x42, 0xe2, 0x1b, 0x0e, 0xd8,
+ 0xe8, 0xde, 0xeb, 0xa9, 0xe9, 0xe5, 0x1b, 0x33, 0xe7, 0xe7, 0xde, 0x30, 0x33,
+ 0x6f, 0xfd, 0xc5, 0x1c, 0xe7, 0x0a, 0xf3, 0xdb, 0xf0, 0x11, 0xf4, 0x07, 0x30,
+ 0xe8, 0x00, 0x04, 0xc8, 0x13, 0x3e, 0x0a, 0x52, 0x2a, 0xba, 0x31, 0x13, 0xee,
+ 0x1e, 0x07, 0x1e, 0x10, 0xe8, 0xe6, 0xf8, 0xe6, 0xd5, 0x2a, 0x06, 0x0b, 0xc5,
+ 0xdb, 0xff, 0x45, 0xf8, 0x0d, 0x25, 0x26, 0x1b, 0xe4, 0xc6, 0x1c, 0xe5, 0x07,
+ 0xfc, 0x12, 0x70, 0xfe, 0xd3, 0x1c, 0x00, 0xc5, 0xcf, 0xbd, 0x11, 0x01, 0x1e,
+ 0xe7, 0xe5, 0x25, 0x06, 0x02, 0xfc, 0xbc, 0x01, 0x4b, 0xc3, 0xe8, 0xf1, 0xa9,
+ 0x54, 0x1d, 0x03, 0x32, 0xaf, 0xd1, 0x0e, 0xdd, 0xf6, 0x37, 0xe9, 0x81, 0x0b,
+ 0x41, 0x29, 0x92, 0x0a, 0x56, 0x0d, 0xd2, 0xe0, 0x08, 0xfb, 0xf6, 0xa3, 0xf3,
+ 0x1f, 0xe6, 0xd9, 0xcb, 0x28, 0x4d, 0x34, 0x43, 0x75, 0xdd, 0x1f, 0x47, 0xf8,
+ 0xea, 0xfd, 0xd7, 0x0e, 0xf8, 0xd8, 0x09, 0xf8, 0x3c, 0x03, 0xee, 0x1c, 0xe1,
+ 0x2b, 0xdd, 0x06, 0xdc, 0x07, 0xc9, 0xc4, 0xc1, 0xe0, 0xca, 0x2c, 0xe3, 0x30,
+ 0xfc, 0x2e, 0xe6, 0xf3, 0xff, 0x0f, 0x78, 0x18, 0x60, 0x15, 0x06, 0xf5, 0xbf,
+ 0x01, 0x00, 0xf0, 0x39, 0x01, 0xfd, 0xcb, 0x03, 0xff, 0xbb, 0xca, 0x09, 0xe9,
+ 0xe7, 0x81, 0xf5, 0x28, 0xb2, 0x4d, 0x05, 0xc4, 0xe0, 0x27, 0x14, 0x02, 0x0e,
+ 0x30, 0xf4, 0xee, 0x13, 0xd4, 0x58, 0x0f, 0x07, 0x16, 0x13, 0x48, 0x05, 0x17,
+ 0xc1, 0x13, 0xf0, 0xdf, 0x00, 0xcd, 0xe6, 0xf3, 0x0c, 0x05, 0x00, 0x2c, 0x0d,
+ 0xfe, 0x0a, 0x25, 0x03, 0xf8, 0x09, 0xf9, 0x2d, 0x08, 0xf8, 0x00, 0xf4, 0x20,
+ 0x0c, 0xf3, 0x34, 0x16, 0x0e, 0xee, 0xe7, 0x0a, 0xce, 0xeb, 0x0d, 0xe6, 0xff,
+ 0x52, 0xe3, 0xdb, 0xff, 0x17, 0x9d, 0x32, 0xd5, 0xe2, 0x0e, 0xd3, 0xec, 0x2a,
+ 0x4d, 0xf8, 0xe7, 0x47, 0x12, 0x1e, 0x20, 0x01, 0xfe, 0x01, 0xdf, 0x1a, 0xf4,
+ 0xfe, 0xea, 0xfa, 0xbd, 0x24, 0x3c, 0x0a, 0x2b, 0xef, 0xe8, 0x31, 0x1c, 0xe8,
+ 0xf9, 0xec, 0xf6, 0x07, 0xf1, 0x1e, 0xdb, 0x0c, 0x35, 0x0f, 0x0b, 0xf6, 0x01,
+ 0x76, 0x22, 0x1a, 0xc8, 0x07, 0x0f, 0x07, 0xd7, 0x12, 0x1f, 0x1f, 0x04, 0xef,
+ 0xfa, 0xf7, 0x22, 0x1d, 0x3e, 0x1b, 0x98, 0x0e, 0x0b, 0xf8, 0x0e, 0x1a, 0x06,
+ 0xff, 0xf8, 0xbf, 0x3f, 0x0f, 0xd3, 0x49, 0xff, 0xdf, 0x7f, 0xd8, 0xcd, 0xe7,
+ 0x1d, 0xd8, 0x26, 0x2a, 0xdb, 0xed, 0x14, 0x5f, 0xe3, 0xdd, 0x20, 0xe8, 0x0d,
+ 0xfe, 0x45, 0xfc, 0x39, 0xf8, 0x07, 0xda, 0xfc, 0xff, 0xd9, 0xf0, 0x38, 0x1b,
+ 0xed, 0x08, 0xf6, 0x05, 0xfc, 0x23, 0xeb, 0xfc, 0x31, 0x19, 0xe3, 0x5c, 0x42,
+ 0x11, 0xa9, 0x58, 0xcd, 0x1e, 0x20, 0x16, 0xc5, 0x23, 0xe6, 0xf3, 0x06, 0xfd,
+ 0xea, 0x0a, 0x07, 0x29, 0xe9, 0xee, 0xc4, 0x1d, 0x0f, 0x30, 0x3f, 0xc9, 0x0f,
+ 0x18, 0xd6, 0x3d, 0x06, 0x0c, 0x10, 0xbf, 0xdd, 0xfa, 0xf6, 0xdd, 0x1f, 0x1a,
+ 0x0f, 0xd4, 0xe0, 0x2a, 0x26, 0x19, 0x36, 0x0e, 0xec, 0x07, 0xf5, 0x33, 0x28,
+ 0xc3, 0xae, 0x1e, 0xe5, 0xeb, 0x29, 0xfb, 0x11, 0xeb, 0x34, 0x06, 0x06, 0x1e,
+ 0x7f, 0x11, 0xfb, 0xe6, 0xf8, 0x0d, 0x0f, 0x34, 0x30, 0x10, 0xc0, 0x0f, 0xf0,
+ 0x22, 0x65, 0x29, 0xed, 0x1c, 0xbd, 0x21, 0x15, 0x09, 0xde, 0x1c, 0x20, 0xdc,
+ 0xff, 0x12, 0x22, 0x0b, 0x38, 0x34, 0xf4, 0xc6, 0x37, 0xff, 0x18, 0x49, 0x11,
+ 0x08, 0xc9, 0x24, 0x12, 0x11, 0x51, 0x09, 0x25, 0xfd, 0xff, 0xd6, 0xff, 0xde,
+ 0x1b, 0x2d, 0xcc, 0xef, 0xd6, 0xef, 0xfb, 0x18, 0x30, 0x05, 0x35, 0xf3, 0xe7,
+ 0x2e, 0xfd, 0x08, 0xee, 0x22, 0xda, 0x0e, 0x1e, 0x5c, 0x2a, 0xda, 0x09, 0x04,
+ 0x07, 0x2f, 0xdb, 0xfd, 0x31, 0xf6, 0x04, 0x24, 0x02, 0xea, 0x1b, 0xed, 0x4f,
+ 0xfd, 0xd3, 0x1a, 0xf6, 0xd4, 0x04, 0x0c, 0x38, 0x0d, 0xdf, 0xdb, 0x26, 0x04,
+ 0x26, 0xdb, 0x4c, 0x22, 0x1b, 0xfc, 0xda, 0x19, 0x09, 0x28, 0x17, 0x1f, 0x58,
+ 0xe5, 0xe1, 0xda, 0x7f, 0xdc, 0x04, 0x16, 0x1d, 0x5b, 0x0b, 0x0f, 0xea, 0xdd,
+ 0xe1, 0xbc, 0xfa, 0x0e, 0x1c, 0xf8, 0x11, 0x1c, 0xcb, 0x2c, 0xad, 0x3c, 0x23,
+ 0x06, 0x2d, 0x42, 0xbc, 0xfe, 0xf9, 0x06, 0x5e, 0xee, 0xe2, 0xe6, 0xce, 0x12,
+ 0x24, 0xec, 0x53, 0xd7, 0x17, 0xd7, 0xdb, 0xe0, 0x04, 0x43, 0xeb, 0x1a, 0xff,
+ 0x65, 0xd0, 0x00, 0x3c, 0x58, 0xe3, 0xc6, 0xbe, 0x24, 0xc9, 0xde, 0xe3, 0xfa,
+ 0x1a, 0x38, 0xe8, 0x0f, 0xd8, 0x33, 0xf7, 0x3f, 0x32, 0x19, 0xbe, 0x11, 0xf0,
+ 0x19, 0x0e, 0x15, 0xed, 0x23, 0xc8, 0x08, 0xc9, 0xec, 0x0b, 0x1a, 0xd1, 0xb9,
+ 0x15, 0xdf, 0x23, 0x1e, 0x11, 0xf1, 0xf7, 0x35, 0x23, 0x28, 0xff, 0xcf, 0xf6,
+ 0x2d, 0xc8, 0xeb, 0x2b, 0xd9, 0x45, 0xcf, 0x14, 0x33, 0x69, 0x0d, 0x16, 0xcb,
+ 0x25, 0x33, 0x40, 0x20, 0xbd, 0x26, 0x19, 0x2d, 0x2a, 0x0e, 0x20, 0xc7, 0xd4,
+ 0xda, 0x03, 0xd0, 0xfe, 0x13, 0xfa, 0xb9, 0xf2, 0x29, 0x1d, 0x25, 0x04, 0xe8,
+ 0xd0, 0xf4, 0x21, 0x1b, 0x20, 0x03, 0x60, 0xfc, 0x10, 0xee, 0x6a, 0xf8, 0xfd,
+ 0x2a, 0xe8, 0xf8, 0xef, 0xf6, 0xbe, 0x28, 0xf9, 0xec, 0xff, 0xd3, 0x0e, 0xca,
+ 0xf6, 0x00, 0xe2, 0xda, 0x5a, 0xe1, 0x08, 0x15, 0x65, 0xe9, 0xfc, 0x19, 0x19,
+ 0x20, 0xf2, 0xf6, 0xdf, 0xf6, 0x2a, 0x10, 0xfa, 0x0f, 0xee, 0x08, 0xef, 0x1e,
+ 0xf5, 0xd5, 0xec, 0x00, 0xf6, 0x2b, 0xcc, 0xea, 0xb5, 0x77, 0x81, 0xfc, 0xc1,
+ 0xdb, 0xe2, 0xfd, 0xcf, 0x66, 0x53, 0xc2, 0x1b, 0xe0, 0x02, 0x1b, 0x02, 0xe2,
+ 0x01, 0xee, 0x09, 0x08, 0xc6, 0xfc, 0x0a, 0x16, 0xe6, 0xe9, 0x11, 0x05, 0x34,
+ 0x0a, 0xfe, 0x11, 0x17, 0x1f, 0xd9, 0xd6, 0xf9, 0x04, 0x21, 0xd8, 0x1a, 0x1f,
+ 0xfd, 0x13, 0xf6, 0x21, 0x07, 0xeb, 0x06, 0xeb, 0xc8, 0xa4, 0x2a, 0xae, 0x4d,
+ 0xb9, 0x3f, 0x60, 0x9e, 0x19, 0xe7, 0x11, 0x73, 0xff, 0xec, 0x3c, 0xe4, 0x33,
+ 0x4f, 0x02, 0xd1, 0xf5, 0xd0, 0xe9, 0x97, 0xb2, 0xa3, 0x46, 0xf9, 0x02, 0xe1,
+ 0x2a, 0xd0, 0x16, 0xe3, 0x08, 0xf3, 0xf1, 0x32, 0xfe, 0xd4, 0xf3, 0x3a, 0xc8,
+ 0x20, 0x85, 0xd2, 0x19, 0x73, 0x40, 0x5e, 0xcc, 0xdd, 0x07, 0xa5, 0xba, 0xcf,
+ 0x60, 0xfe, 0xe7, 0x1e, 0x01, 0xf5, 0xd1, 0x1c, 0x3a, 0xd0, 0x18, 0x19, 0xbe,
+ 0x1a, 0x2b, 0x7f, 0x4c, 0xef, 0x2f, 0x8b, 0x39, 0xf2, 0x30, 0xb5, 0x59, 0xf1,
+ 0x6f, 0x02, 0xcc, 0xd4, 0xdf, 0x2e, 0x05, 0xd5, 0x47, 0xd9, 0xec, 0xea, 0xaf,
+ 0xd2, 0x20, 0x5b, 0x49, 0xd7, 0x30, 0xc3, 0xad, 0xba, 0x05, 0x0b, 0xd9, 0xf4,
+ 0x3d, 0x72, 0xec, 0x30, 0xb5, 0x48, 0x2e, 0xc7, 0xe7, 0xde, 0xe2, 0xc4, 0x50,
+ 0xdc, 0x43, 0xf4, 0xe4, 0x2f, 0x14, 0x47, 0xca, 0x04, 0x33, 0x16, 0xf3, 0xae,
+ 0x0a, 0x66, 0x23, 0x35, 0x21, 0x37, 0xd8, 0x10, 0x12, 0xf5, 0x7f, 0x08, 0x58,
+ 0x6b, 0x3d, 0xb0, 0xd7, 0x08, 0x18, 0xf4, 0x00, 0x41, 0x29, 0x89, 0x07, 0xfd,
+ 0xe3, 0x1d, 0x15, 0xee, 0x09, 0x0e, 0x18, 0x07, 0x21, 0x01, 0xd2, 0x23, 0x3f,
+ 0x30, 0xc5, 0x1e, 0x51, 0x31, 0xbe, 0xd7, 0x5c, 0x1c, 0x11, 0x50, 0xcb, 0xd6,
+ 0x3c, 0xfc, 0xbd, 0x1a, 0x5d, 0xe9, 0xde, 0x2d, 0xed, 0xae, 0x09, 0x44, 0x4a,
+ 0x7b, 0x5f, 0x05, 0x22, 0x4c, 0x4f, 0x04, 0x36, 0xf8, 0x07, 0x17, 0xaf, 0xea,
+ 0x3d, 0xd3, 0x3c, 0xee, 0x21, 0xe4, 0x30, 0x59, 0xf3, 0xce, 0x3f, 0x03, 0x1e,
+ 0xc4, 0x05, 0x35, 0xd0, 0x12, 0x17, 0xfa, 0x22, 0xfa, 0xf0, 0x24, 0x24, 0xe3,
+ 0xe9, 0xf9, 0x2d, 0x6a, 0xf6, 0x2e, 0xe4, 0x3b, 0x25, 0xc5, 0xf6, 0x3a, 0xc6,
+ 0xf2, 0x29, 0xca, 0x2c, 0x7c, 0xf9, 0xeb, 0x00, 0xde, 0xd7, 0x27, 0xd3, 0x22,
+ 0x21, 0x73, 0x38, 0xec, 0x05, 0xfb, 0xdb, 0xfa, 0xf9, 0x3a, 0xa1, 0xf0, 0xdb,
+ 0x7f, 0xec, 0xe7, 0x12, 0x1a, 0x3a, 0xfb, 0xc7, 0x10, 0x0e, 0x11, 0x09, 0xf5,
+ 0xdf, 0xf7, 0xe5, 0xe9, 0x1b, 0x38, 0x12, 0x1e, 0xf3, 0xfa, 0xde, 0x17, 0x04,
+ 0x06, 0xe3, 0x1e, 0x03, 0xe7, 0xa9, 0xca, 0xb2, 0xdb, 0x0a, 0xde, 0x24, 0x11,
+ 0x02, 0x19, 0xd3, 0xf7, 0xef, 0xdc, 0x03, 0xfb, 0xe5, 0x22, 0x39, 0x13, 0x3a,
+ 0x04, 0xe7, 0xf3, 0x41, 0xed, 0xf2, 0xc1, 0x52, 0x03, 0xd4, 0xe9, 0xf9, 0xbb,
+ 0xc0, 0xee, 0x0f, 0xf0, 0xe1, 0xd4, 0xc4, 0x0e, 0x0d, 0x2b, 0x41, 0xc4, 0xea,
+ 0xf6, 0x3e, 0xe6, 0xfc, 0xdf, 0x35, 0x15, 0x08, 0x1d, 0x01, 0xd1, 0xe3, 0xf7,
+ 0xf6, 0xea, 0x1a, 0x1b, 0xfd, 0x1b, 0x08, 0x00, 0xcb, 0x05, 0x12, 0xfb, 0x43,
+ 0xe1, 0xff, 0x22, 0x0a, 0x02, 0x08, 0xf7, 0xea, 0x13, 0xf3, 0x1a, 0xd8, 0xe4,
+ 0x25, 0xed, 0x0d, 0x0f, 0xf6, 0x00, 0x0f, 0x12, 0xe1, 0xdd, 0x0c, 0xd3, 0x0b,
+ 0x03, 0xef, 0x1d, 0xdb, 0xe9, 0x16, 0xe4, 0x3c, 0x25, 0x02, 0xbe, 0x44, 0xe5,
+ 0x11, 0x39, 0x5b, 0x0c, 0xda, 0x1f, 0x11, 0xee, 0x2c, 0x2d, 0xea, 0x1b, 0x00,
+ 0x16, 0x1c, 0x0e, 0x07, 0x00, 0xe5, 0x15, 0x1b, 0xfb, 0x16, 0x13, 0xf3, 0x1a,
+ 0x0e, 0x0b, 0x2d, 0x15, 0xf4, 0xed, 0xfb, 0x22, 0x1f, 0x0a, 0x21, 0xfa, 0x03,
+ 0xcc, 0x21, 0x0a, 0x03, 0xf5, 0x42, 0xf0, 0xee, 0xfe, 0xf1, 0x0a, 0x7f, 0xdb,
+ 0x03, 0x14, 0x30, 0x2d, 0x1b, 0xf7, 0x02, 0x11, 0x1f, 0x0b, 0x01, 0x14, 0x3f,
+ 0xf1, 0x04, 0x08, 0x21, 0xf7, 0x03, 0xe7, 0xf1, 0x18, 0xf3, 0x11, 0x02, 0x41,
+ 0xee, 0x2b, 0xf3, 0xf1, 0x29, 0x10, 0xe2, 0x17, 0x04, 0xed, 0x2d, 0x02, 0xfb,
+ 0xc9, 0x09, 0xf9, 0xec, 0x0f, 0x16, 0xdf, 0xf4, 0x0e, 0x1a, 0x07, 0x28, 0x14,
+ 0x2b, 0xf5, 0x09, 0xe5, 0xfa, 0x0d, 0x31, 0x35, 0x4f, 0x11, 0xfd, 0x10, 0xf5,
+ 0x7f, 0xf8, 0xee, 0x36, 0xf8, 0x0f, 0xe0, 0xfc, 0xf8, 0x29, 0xe4, 0x0d, 0x02,
+ 0x10, 0x18, 0xeb, 0x08, 0x11, 0xe6, 0xfe, 0x0c, 0x0e, 0x01, 0x0f, 0xf6, 0xf0,
+ 0xf3, 0xed, 0xfa, 0xe6, 0x0e, 0x0f, 0xe7, 0xfd, 0xf4, 0x05, 0xfa, 0x05, 0xf5,
+ 0xe2, 0xed, 0xfe, 0x10, 0xf2, 0x0a, 0x00, 0xc4, 0x42, 0xec, 0xef, 0xfa, 0x1d,
+ 0xd4, 0x1f, 0xe6, 0xfd, 0x1d, 0xe9, 0xf0, 0x00, 0x0a, 0x02, 0x12, 0xec, 0x05,
+ 0xfb, 0x03, 0xf6, 0xf8, 0xea, 0x1e, 0x2a, 0x17, 0x15, 0xf5, 0x02, 0xfa, 0x1c,
+ 0xe8, 0x19, 0xf9, 0x23, 0xdc, 0xea, 0x00, 0x2e, 0x29, 0xee, 0xe8, 0xf8, 0x27,
+ 0xf4, 0xf6, 0x01, 0xbe, 0xe0, 0x0c, 0x21, 0x0f, 0x65, 0x24, 0xf6, 0xda, 0xf3,
+ 0x14, 0x39, 0xfa, 0x09, 0xe3, 0xe2, 0x1e, 0xdc, 0x75, 0xcf, 0x2e, 0x31, 0xeb,
+ 0xf2, 0xe0, 0x24, 0x55, 0xeb, 0xb4, 0xe7, 0x7f, 0xc0, 0x25, 0xea, 0xe5, 0xf9,
+ 0x23, 0xed, 0x47, 0xf7, 0x01, 0xd3, 0x48, 0xe1, 0x2d, 0xe3, 0xe0, 0xa2, 0xf6,
+ 0x3b, 0xee, 0xc8, 0x18, 0x08, 0x06, 0x28, 0x2d, 0x26, 0xc9, 0x06, 0xfd, 0x9a,
+ 0x11, 0x1d, 0xe1, 0x10, 0xd9, 0xdf, 0x1a, 0x0d, 0xf8, 0xe6, 0x04, 0x23, 0x26,
+ 0xe4, 0xee, 0x0a, 0x4b, 0xeb, 0x3c, 0xbf, 0xfe, 0xe7, 0x4a, 0xf7, 0xec, 0xe7,
+ 0x28, 0x2f, 0xfa, 0x09, 0xef, 0x06, 0xdf, 0x11, 0x40, 0xdb, 0xfe, 0x18, 0xee,
+ 0xdf, 0x34, 0x00, 0x09, 0x15, 0xf5, 0x57, 0xe8, 0x4d, 0xeb, 0xd5, 0x15, 0x39,
+ 0x45, 0x28, 0x14, 0x16, 0x13, 0xd8, 0xca, 0xea, 0x27, 0xe0, 0x21, 0x1d, 0xd3,
+ 0xf8, 0x26, 0x02, 0x38, 0xff, 0x43, 0xd6, 0x10, 0x42, 0xb5, 0xec, 0xfb, 0xca,
+ 0x37, 0xe3, 0x10, 0x23, 0x2b, 0xf6, 0x28, 0x47, 0x4c, 0xe0, 0xc9, 0x16, 0x28,
+ 0xf2, 0xeb, 0x28, 0x7d, 0x7f, 0xe3, 0xf2, 0xf3, 0x04, 0xe5, 0xf6, 0x19, 0x35,
+ 0xe1, 0x31, 0x4e, 0x00, 0xdc, 0x36, 0xd6, 0xa5, 0x27, 0x4f, 0xe7, 0x2a, 0x1c,
+ 0x1e, 0x05, 0xfb, 0x33, 0x11, 0x04, 0x30, 0xe4, 0xf4, 0xe6, 0x1e, 0xd6, 0xd7,
+ 0x12, 0x0b, 0x19, 0x4b, 0xe5, 0xda, 0x4c, 0x26, 0x20, 0x24, 0xe9, 0x0d, 0xdf,
+ 0xe1, 0x23, 0x33, 0x36, 0x16, 0xd0, 0xbe, 0x4b, 0x6a, 0x48, 0x49, 0xf1, 0x49,
+ 0xfa, 0xf5, 0x33, 0x21, 0x30, 0xe3, 0xef, 0xef, 0xe4, 0x45, 0xfe, 0xd7, 0x01,
+ 0x2f, 0x00, 0x10, 0xcf, 0xfe, 0x15, 0x36, 0x15, 0xe6, 0xec, 0x00, 0x28, 0x13,
+ 0x13, 0xe4, 0x3b, 0xd0, 0xdb, 0xdd, 0x19, 0x0c, 0xfc, 0x0a, 0x59, 0x26, 0xcb,
+ 0xc8, 0xf1, 0x0a, 0x19, 0x34, 0x06, 0x40, 0x1e, 0x4a, 0x0a, 0x12, 0x07, 0xce,
+ 0xb9, 0xb5, 0xc8, 0xee, 0x3d, 0x3b, 0x0f, 0x35, 0xc7, 0xf6, 0xda, 0xf2, 0x19,
+ 0x4b, 0xed, 0xf1, 0x1c, 0x92, 0xd6, 0xbc, 0xda, 0x22, 0x52, 0xf2, 0x57, 0xe0,
+ 0xea, 0x0d, 0xde, 0xff, 0xe2, 0x54, 0xef, 0xcb, 0xf1, 0xae, 0xee, 0xff, 0xc0,
+ 0xae, 0xe9, 0x6d, 0xd1, 0xf0, 0x35, 0xd8, 0xfc, 0x0d, 0x60, 0xe9, 0x3a, 0xec,
+ 0xd0, 0x2a, 0x1f, 0x19, 0x48, 0x33, 0xea, 0xb7, 0xde, 0xbd, 0x48, 0x8e, 0x13,
+ 0xff, 0x0a, 0x18, 0x17, 0xea, 0xfc, 0xda, 0xbc, 0x7f, 0xf1, 0x2e, 0xdf, 0xfd,
+ 0xe7, 0x26, 0xce, 0x1d, 0x02, 0x2a, 0xf9, 0xd3, 0x13, 0xfc, 0xe6, 0xd9, 0xb3,
+ 0xf5, 0x03, 0xfb, 0xd1, 0x34, 0xcc, 0xcf, 0xe8, 0x45, 0xd1, 0x0a, 0xdc, 0x0f,
+ 0xfa, 0x9d, 0xe7, 0xc2, 0x06, 0xe6, 0x58, 0x35, 0xd0, 0x24, 0xef, 0x04, 0xea,
+ 0x4b, 0x3c, 0x16, 0x09, 0xaf, 0x24, 0x0d, 0x23, 0x25, 0x1a, 0xf4, 0x2a, 0x39,
+ 0xcf, 0xd3, 0x0f, 0xaf, 0xe0, 0x1b, 0x39, 0x08, 0x08, 0xb7, 0x38, 0xb1, 0xfb,
+ 0x01, 0xd1, 0x35, 0x00, 0x17, 0xe8, 0xdc, 0xc7, 0x11, 0xd4, 0xff, 0x4a, 0xa9,
+ 0x54, 0xd5, 0xdd, 0x31, 0xfd, 0x23, 0xf9, 0xf3, 0xb2, 0xbb, 0x23, 0xe0, 0xef,
+ 0xfd, 0x02, 0x5a, 0xd4, 0xf6, 0x19, 0xdd, 0xe0, 0x0f, 0xaf, 0xe0, 0x0f, 0xb5,
+ 0x1c, 0x16, 0xcc, 0xda, 0x10, 0x78, 0xcc, 0x40, 0x0d, 0xd1, 0xe6, 0xf8, 0x51,
+ 0xef, 0x1f, 0x47, 0x54, 0xef, 0x45, 0xcd, 0xdd, 0x06, 0x36, 0x48, 0xf9, 0xd3,
+ 0xc5, 0x9d, 0xbb, 0xc7, 0xbd, 0xf2, 0xae, 0x1f, 0x43, 0x39, 0xf8, 0xf2, 0x0a,
+ 0xea, 0xd1, 0x04, 0x0b, 0xfe, 0xb8, 0xb3, 0x7f, 0x0f, 0x16, 0x1d, 0x5a, 0x00,
+ 0x12, 0xef, 0x01, 0x55, 0x2a, 0x23, 0xe4, 0xec, 0xf1, 0xb9, 0x5c, 0x08, 0x05,
+ 0xf8, 0x19, 0x1b, 0xc1, 0x11, 0x1a, 0xe7, 0xe4, 0xc4, 0x02, 0xeb, 0xcc, 0xea,
+ 0x0e, 0xe9, 0xb3, 0x0c, 0xf4, 0xdb, 0x58, 0xdc, 0x1d, 0xbf, 0x03, 0x19, 0x30,
+ 0x10, 0xea, 0xf4, 0xf2, 0xe8, 0x5f, 0xf3, 0xe9, 0x13, 0x11, 0xd2, 0x28, 0x34,
+ 0xeb, 0x2a, 0x04, 0xe0, 0x1f, 0xd8, 0xc6, 0x7f, 0xef, 0x2b, 0xe7, 0xca, 0x0a,
+ 0xee, 0x31, 0x31, 0xd1, 0x94, 0xf5, 0x11, 0xd6, 0x57, 0xf8, 0x33, 0x12, 0x23,
+ 0x0e, 0x1c, 0x07, 0x01, 0xeb, 0x16, 0xfb, 0x08, 0xf9, 0x1c, 0xe6, 0x0c, 0x14,
+ 0xdc, 0xe5, 0xd9, 0xfe, 0xcc, 0xf8, 0xfa, 0xfd, 0x28, 0x01, 0xc6, 0x50, 0xec,
+ 0x22, 0x61, 0xe2, 0xed, 0x1d, 0x63, 0x17, 0xac, 0x05, 0x5b, 0xbf, 0xc1, 0xe4,
+ 0xf2, 0xf9, 0xcf, 0xf1, 0xfc, 0x68, 0x0e, 0x31, 0x30, 0x01, 0xe9, 0x1f, 0x05,
+ 0xfc, 0x0a, 0x17, 0xc3, 0x54, 0xbb, 0x06, 0x5b, 0xec, 0xc3, 0x0d, 0x15, 0x38,
+ 0x16, 0xbd, 0xce, 0xda, 0xff, 0x30, 0xc9, 0xfa, 0xfb, 0x00, 0xf8, 0xe2, 0x4e,
+ 0xee, 0x01, 0x0f, 0x1c, 0x1c, 0x1a, 0x49, 0x3b, 0xdc, 0x2a, 0xc9, 0xcd, 0xef,
+ 0xeb, 0x20, 0x1e, 0xd3, 0xe7, 0xe1, 0x3a, 0x19, 0xe0, 0x05, 0x04, 0xf2, 0x09,
+ 0xf9, 0x5d, 0x11, 0x5a, 0x18, 0x14, 0xe6, 0xcf, 0x01, 0xfb, 0xfd, 0x27, 0x5d,
+ 0xfd, 0x27, 0xf8, 0x10, 0x07, 0x0a, 0x09, 0xf2, 0x29, 0x08, 0xda, 0x11, 0xf8,
+ 0xd2, 0x16, 0x26, 0xe3, 0xfe, 0x2a, 0x7a, 0xe1, 0x07, 0x54, 0x27, 0xf2, 0xce,
+ 0x38, 0x0f, 0x0d, 0x38, 0xe4, 0xce, 0x4a, 0x3d, 0xee, 0x10, 0x3a, 0xf8, 0x1d,
+ 0x1b, 0x2c, 0xea, 0x05, 0x2e, 0xef, 0x01, 0x0a, 0xec, 0xda, 0xee, 0x6c, 0xed,
+ 0xfd, 0x16, 0xf2, 0x2a, 0xe7, 0xce, 0x05, 0x39, 0xf1, 0xf3, 0x44, 0x7f, 0x04,
+ 0xeb, 0x0b, 0xfc, 0x14, 0x1d, 0x0a, 0x15, 0x21, 0x0c, 0x34, 0x16, 0x15, 0xf8,
+ 0x34, 0x0e, 0xda, 0xbf, 0xe7, 0x01, 0x04, 0xe2, 0x0e, 0xdd, 0x34, 0x07, 0x03,
+ 0x03, 0x09, 0xa6, 0x44, 0x1f, 0xc8, 0xfe, 0x06, 0x49, 0x22, 0x29, 0xe2, 0x32,
+ 0xeb, 0xd7, 0xf0, 0xe3, 0x2c, 0x46, 0xf2, 0xba, 0xd3, 0x1c, 0xc9, 0xe1, 0x47,
+ 0x01, 0xe6, 0x09, 0x7f, 0xa5, 0xd4, 0x48, 0xff, 0x7a, 0xf3, 0x33, 0xfb, 0x2b,
+ 0xfc, 0x4a, 0xef, 0xf0, 0x05, 0xd0, 0x27, 0x15, 0x2a, 0x0f, 0xe9, 0xf9, 0xed,
+ 0xff, 0xfc, 0xc7, 0xcb, 0x25, 0xdb, 0xe3, 0x63, 0x16, 0xe4, 0xab, 0x73, 0xd7,
+ 0x32, 0xff, 0x10, 0xf7, 0xfd, 0xcb, 0x26, 0xda, 0xeb, 0xfe, 0xf0, 0x26, 0xee,
+ 0x1c, 0x08, 0xbc, 0x48, 0x28, 0x10, 0x1f, 0x06, 0xf8, 0xfc, 0xe9, 0x3f, 0x17,
+ 0x14, 0xd5, 0xfd, 0xd2, 0xe3, 0x3f, 0x14, 0x30, 0x27, 0xcc, 0xda, 0xe1, 0x03,
+ 0xfe, 0x07, 0x20, 0x12, 0xd3, 0x07, 0x1d, 0xfb, 0x0c, 0xc5, 0xda, 0xf9, 0xa8,
+ 0xcd, 0xce, 0xef, 0x35, 0xef, 0xc8, 0x0a, 0x47, 0xc4, 0xc9, 0x09, 0x06, 0x4d,
+ 0x09, 0xf3, 0x11, 0xdf, 0xea, 0x0d, 0x0a, 0x0c, 0xc2, 0xd0, 0xcd, 0xec, 0xe7,
+ 0xf6, 0x3c, 0x04, 0xd9, 0x04, 0xea, 0xe4, 0x09, 0x20, 0x3b, 0xdb, 0xd6, 0x4e,
+ 0x9f, 0xb1, 0x23, 0xca, 0x81, 0x13, 0xc0, 0x21, 0xab, 0x10, 0x3a, 0x8d, 0xfb,
+ 0xd4, 0x07, 0xe1, 0x15, 0x26, 0x4f, 0xe1, 0x06, 0xce, 0x34, 0x1f, 0x0d, 0x53,
+ 0x0e, 0x23, 0x00, 0xf0, 0xb5, 0x09, 0x44, 0xfb, 0xf8, 0xef, 0xde, 0xc8, 0x08,
+ 0xea, 0x56, 0xf4, 0x47, 0x40, 0x19, 0x4f, 0xe2, 0x96, 0x27, 0xff, 0x03, 0xb2,
+ 0xf3, 0xc4, 0xdf, 0xdd, 0x06, 0xfc, 0xf7, 0xf7, 0x40, 0xaf, 0xc4, 0x10, 0x2b,
+ 0xfa, 0xdd, 0xf3, 0xe4, 0xc7, 0x20, 0xa3, 0xfb, 0xe2, 0x0a, 0xc3, 0x11, 0xd7,
+ 0xf5, 0xff, 0x38, 0xf2, 0x0d, 0xdc, 0x55, 0x2b, 0x2e, 0x34, 0xf8, 0x46, 0xc8,
+ 0xca, 0x20, 0x0c, 0x15, 0xdf, 0x30, 0x31, 0x0f, 0x25, 0x51, 0xf3, 0xde, 0xdc,
+ 0xea, 0xcf, 0xa0, 0x9a, 0xd0, 0x28, 0xfc, 0xee, 0xf4, 0x26, 0x0d, 0x09, 0x09,
+ 0x27, 0xef, 0x13, 0xbf, 0x1a, 0x0d, 0xd4, 0xfe, 0x18, 0xd2, 0x04, 0x4d, 0xde,
+ 0x21, 0x10, 0x08, 0xcf, 0xfc, 0x0b, 0x12, 0x29, 0xd9, 0xf4, 0xd6, 0xeb, 0x3b,
+ 0x1e, 0xf3, 0xf0, 0x5a, 0xd3, 0x10, 0x2c, 0x04, 0xfe, 0x20, 0x44, 0x05, 0x12,
+ 0x6f, 0xfd, 0x08, 0x5b, 0x1f, 0xf5, 0xc2, 0x0c, 0x3d, 0x2c, 0xfc, 0xf6, 0x0a,
+ 0x7f, 0x2a, 0xe7, 0x62, 0x3e, 0xf1, 0x0c, 0xec, 0x03, 0x18, 0x12, 0xc2, 0xf8,
+ 0x1d, 0x12, 0x02, 0x04, 0xd2, 0x44, 0x38, 0xd9, 0x17, 0x09, 0xb6, 0x46, 0x1d,
+ 0x17, 0x6a, 0xf1, 0xe6, 0xd5, 0x2d, 0x0e, 0xd3, 0xfe, 0xee, 0xe9, 0x1c, 0x11,
+ 0x3e, 0xb8, 0x1a, 0x29, 0x01, 0xcd, 0xb6, 0xfb, 0x1c, 0x05, 0xe6, 0xfd, 0xdd,
+ 0xd0, 0xea, 0x1e, 0xec, 0xfb, 0xeb, 0x00, 0xe1, 0x0d, 0x19, 0xbd, 0xfa, 0xf8,
+ 0x34, 0x7f, 0x0b, 0xf8, 0xf3, 0x01, 0x1f, 0xdf, 0xdf, 0xec, 0x02, 0x00, 0xf6,
+ 0xef, 0x1f, 0xe0, 0xe1, 0x00, 0xec, 0x44, 0x17, 0xda, 0xd6, 0xf3, 0xe9, 0x08,
+ 0xda, 0x3c, 0x1a, 0xbc, 0x1e, 0x06, 0x05, 0xe1, 0x06, 0xde, 0xe2, 0x23, 0xd4,
+ 0x28, 0xef, 0x18, 0x08, 0x0b, 0xdc, 0xd1, 0xf4, 0x11, 0xe9, 0xe9, 0xf8, 0xf0,
+ 0xca, 0x19, 0xeb, 0x07, 0x0e, 0x1e, 0xe6, 0x51, 0x13, 0xe2, 0x18, 0xfb, 0x24,
+ 0x27, 0x30, 0x13, 0x04, 0xf3, 0xe4, 0xd9, 0x08, 0x07, 0x13, 0x2e, 0xca, 0x4c,
+ 0x1d, 0xd8, 0x09, 0xcc, 0xbf, 0x02, 0xf2, 0xe6, 0xf6, 0x40, 0xd7, 0x05, 0xd0,
+ 0xec, 0xe0, 0xd7, 0xd2, 0x02, 0x19, 0x29, 0x32, 0xfd, 0xeb, 0x1c, 0x03, 0x3d,
+ 0xf1, 0xde, 0x1e, 0x1f, 0x0b, 0xdc, 0x1f, 0xea, 0xf3, 0x44, 0x2c, 0x45, 0xf8,
+ 0xf8, 0xed, 0xde, 0xc6, 0x0e, 0xdf, 0x17, 0x04, 0x05, 0x52, 0xa5, 0xe7, 0xd3,
+ 0x62, 0xcd, 0x28, 0x2e, 0x2e, 0xab, 0x12, 0x7f, 0x00, 0x1d, 0xab, 0xcc, 0xfa,
+ 0xde, 0x1f, 0x5e, 0x55, 0x0f, 0xdd, 0x37, 0x4a, 0xf1, 0x30, 0x29, 0x18, 0xda,
+ 0x09, 0x23, 0xdc, 0x25, 0xdf, 0x61, 0x09, 0x21, 0x4c, 0xa0, 0x2c, 0xbd, 0x16,
+ 0xef, 0x1f, 0xe2, 0xff, 0x51, 0x44, 0x08, 0x19, 0xe6, 0xb7, 0xd4, 0x29, 0x2c,
+ 0xf8, 0x21, 0xdd, 0x2e, 0x08, 0x03, 0x4a, 0xde, 0x05, 0x92, 0xe8, 0xe7, 0xe6,
+ 0x73, 0x07, 0x3a, 0xa3, 0x02, 0xcf, 0xea, 0x0f, 0x3c, 0x12, 0xd4, 0x00, 0x40,
+ 0x07, 0xfe, 0x3f, 0xd4, 0xbc, 0x21, 0xe8, 0xbc, 0xd3, 0x5f, 0xf3, 0x45, 0x1a,
+ 0x29, 0x07, 0xff, 0x1d, 0xb4, 0x2d, 0xfa, 0xfa, 0x27, 0xc9, 0xc0, 0x11, 0x42,
+ 0xcf, 0xb4, 0xcb, 0xf7, 0xce, 0x0f, 0x00, 0x11, 0x54, 0xc4, 0xd8, 0xc6, 0x04,
+ 0x10, 0x23, 0x33, 0xd5, 0xf9, 0xe4, 0xc5, 0x19, 0x22, 0xe6, 0xe3, 0x0f, 0x2b,
+ 0x05, 0x40, 0x23, 0x18, 0x28, 0xc2, 0x49, 0x10, 0xb1, 0xfd, 0xd9, 0xf3, 0x29,
+ 0x14, 0x21, 0xdb, 0xf7, 0x1d, 0x1c, 0x2f, 0x37, 0xe4, 0x12, 0xd2, 0x15, 0xe4,
+ 0xfc, 0x02, 0x3d, 0xad, 0xbc, 0xbd, 0xd9, 0xeb, 0x3b, 0xdb, 0xd0, 0x35, 0xf4,
+ 0xf7, 0x11, 0xee, 0x32, 0x3d, 0x59, 0x2d, 0x1c, 0xe7, 0x05, 0xdb, 0x15, 0x18,
+ 0x1f, 0xd2, 0xe0, 0x0c, 0x5a, 0xca, 0x08, 0xda, 0x20, 0xbe, 0xf3, 0xf3, 0xb5,
+ 0x56, 0x08, 0x07, 0xfd, 0x65, 0x16, 0xe9, 0x12, 0x2b, 0x07, 0xbc, 0xdd, 0xf1,
+ 0xdb, 0xdf, 0xea, 0xde, 0x4c, 0xfc, 0xc5, 0xfb, 0xbc, 0xf8, 0x08, 0x07, 0xde,
+ 0xea, 0x2c, 0x20, 0x2a, 0x0a, 0x2c, 0x0f, 0x0e, 0xc3, 0x01, 0x24, 0xcf, 0x81,
+ 0xc2, 0x48, 0xb6, 0xf3, 0xba, 0xda, 0xe0, 0xd2, 0xea, 0x0b, 0xdf, 0x4a, 0x42,
+ 0x1b, 0xd0, 0xd6, 0xd4, 0x2d, 0x1f, 0xd7, 0x8f, 0xcc, 0x41, 0xda, 0xfc, 0xe1,
+ 0x36, 0x15, 0xfe, 0x4e, 0xaa, 0x08, 0xe5, 0x0d, 0x8f, 0x11, 0xc3, 0xed, 0xfb,
+ 0xec, 0x37, 0xa9, 0x65, 0xc2, 0x0d, 0xe4, 0x1a, 0x1c, 0x45, 0x03, 0x08, 0xf4,
+ 0xf7, 0xbb, 0x23, 0xe4, 0xeb, 0x0e, 0xed, 0x29, 0xfd, 0xff, 0xe9, 0xd5, 0xe8,
+ 0xb5, 0x0b, 0x0a, 0xdb, 0xb1, 0x3b, 0x2d, 0xf5, 0x42, 0xc1, 0x12, 0x84, 0x10,
+ 0xe9, 0xe9, 0xe7, 0x3c, 0xa3, 0xd0, 0xe2, 0x11, 0xbc, 0x94, 0x4d, 0xba, 0x00,
+ 0x0e, 0x53, 0xe8, 0xef, 0xf0, 0xd9, 0xf9, 0xcf, 0xf3, 0xed, 0x5e, 0xe4, 0xf1,
+ 0x14, 0x2a, 0xfd, 0x0d, 0xea, 0xee, 0x1a, 0xcb, 0xea, 0x2b, 0xa8, 0x48, 0x3e,
+ 0xf0, 0x0c, 0x18, 0xec, 0x1e, 0xaa, 0x16, 0xb9, 0x75, 0x61, 0x7f, 0xcb, 0xfd,
+ 0x40, 0x14, 0x3b, 0x41, 0xd5, 0xf7, 0x2b, 0x27, 0x00, 0x10, 0x3b, 0x0a, 0xb9,
+ 0x31, 0x03, 0x1f, 0xf5, 0x55, 0x12, 0x13, 0x4b, 0x04, 0x0c, 0x25, 0x07, 0xf5,
+ 0x96, 0x1f, 0x5f, 0xe4, 0x43, 0x11, 0x32, 0xe1, 0xe7, 0x39, 0xfb, 0x1b, 0x0c,
+ 0x36, 0xfe, 0x0b, 0x08, 0xff, 0x3e, 0x03, 0x1e, 0xe7, 0x0a, 0xf0, 0xe1, 0x34,
+ 0x18, 0x0e, 0xe1, 0x02, 0xe5, 0xbf, 0xe3, 0x13, 0x05, 0x0e, 0xeb, 0x7f, 0x06,
+ 0xce, 0x0c, 0x14, 0xcd, 0x09, 0x2f, 0xde, 0x1c, 0x00, 0x09, 0x4b, 0x17, 0x45,
+ 0xe8, 0x32, 0x28, 0xf5, 0xc4, 0x17, 0xeb, 0xe1, 0xda, 0xdf, 0x03, 0x18, 0x0a,
+ 0x07, 0x24, 0x21, 0x0d, 0xd4, 0x11, 0xdb, 0x0b, 0xf4, 0xba, 0x10, 0xd0, 0xf6,
+ 0xd4, 0x0f, 0xec, 0x1f, 0x0b, 0x27, 0xe4, 0x4f, 0xee, 0x4e, 0x3b, 0x32, 0x11,
+ 0xe0, 0xe8, 0xb8, 0x11, 0xdd, 0x22, 0x27, 0x1d, 0xeb, 0xef, 0xec, 0xe8, 0x21,
+ 0xee, 0xff, 0xd6, 0xb9, 0xf6, 0x08, 0xc9, 0x30, 0xef, 0x06, 0xb6, 0x9b, 0xe3,
+ 0x05, 0x21, 0xfd, 0x01, 0x4f, 0xe6, 0xe5, 0xf2, 0x1d, 0xbd, 0xfe, 0xa4, 0x41,
+ 0x1f, 0xdf, 0xd3, 0xdd, 0xb7, 0x1c, 0xd8, 0xfc, 0xdd, 0xee, 0xfb, 0xd5, 0xc8,
+ 0xb8, 0x96, 0xdd, 0xb8, 0x11, 0x02, 0xe7, 0xee, 0xbb, 0xd6, 0x19, 0xda, 0xde,
+ 0x07, 0x19, 0x16, 0x27, 0x0e, 0xfd, 0x17, 0xa9, 0xc4, 0xd2, 0xec, 0xd2, 0x04,
+ 0xa0, 0xe2, 0x08, 0xb1, 0x08, 0xab, 0xd5, 0x0a, 0xf4, 0xe5, 0xea, 0xcf, 0x06,
+ 0x1f, 0x8f, 0xd4, 0x0b, 0x02, 0xf5, 0x47, 0xca, 0x05, 0xf3, 0xf2, 0x10, 0x1c,
+ 0xfb, 0xea, 0x1c, 0xfc, 0x02, 0x08, 0xc5, 0x81, 0xa1, 0xc3, 0x59, 0xb2, 0x59,
+ 0xfe, 0x29, 0xd2, 0xbf, 0x1f, 0xce, 0xb2, 0x08, 0x27, 0xf1, 0x0a, 0x11, 0xc4,
+ 0x13, 0xa3, 0x19, 0xfe, 0xee, 0xe5, 0xe5, 0x0f, 0xec, 0x28, 0xe3, 0x1d, 0xc0,
+ 0xeb, 0xf6, 0xe1, 0x31, 0x0c, 0xd3, 0xea, 0xf6, 0xf6, 0xdc, 0x12, 0x48, 0xd4,
+ 0xdf, 0xf1, 0x6b, 0xdf, 0xd6, 0xfb, 0x04, 0x4d, 0xec, 0x09, 0x1c, 0xa7, 0xf0,
+ 0x6d, 0x09, 0xdd, 0x1f, 0x1b, 0xe1, 0xe2, 0xf2, 0xf6, 0xe2, 0xef, 0xeb, 0xfc,
+ 0xd6, 0xfb, 0x2d, 0xe8, 0x19, 0x0e, 0x0d, 0x07, 0x35, 0xdd, 0xab, 0x29, 0x49,
+ 0x25, 0xdd, 0xee, 0xed, 0x1a, 0x3c, 0xe0, 0x22, 0x11, 0xde, 0x20, 0x0d, 0x2f,
+ 0xcc, 0x45, 0x12, 0xf2, 0xd3, 0x40, 0xde, 0xb8, 0xe5, 0x13, 0x17, 0xd5, 0xf3,
+ 0xd9, 0xe7, 0xe7, 0xeb, 0x03, 0x03, 0x32, 0xf6, 0xd1, 0xf6, 0xe8, 0x22, 0xd7,
+ 0x1d, 0x06, 0x2b, 0x2a, 0x28, 0x33, 0xe1, 0xdf, 0x21, 0x2c, 0x10, 0xd0, 0xcf,
+ 0x7f, 0xc9, 0x31, 0x35, 0x21, 0x1b, 0x01, 0x17, 0x3b, 0x09, 0xce, 0x2f, 0xc3,
+ 0x1a, 0xbb, 0xf6, 0xed, 0x33, 0x0f, 0xec, 0xfa, 0xf4, 0x42, 0xe3, 0xf9, 0x17,
+ 0x0b, 0x21, 0xdd, 0x57, 0x06, 0xff, 0x2b, 0xec, 0xce, 0x0b, 0x1a, 0x00, 0x1d,
+ 0xd3, 0xdb, 0x03, 0x12, 0x2f, 0x0f, 0xf2, 0x0b, 0xbe, 0xd7, 0xd7, 0xbd, 0x33,
+ 0xda, 0x1a, 0xf5, 0xbb, 0x02, 0x66, 0xfd, 0xf6, 0x53, 0x3d, 0x16, 0xcf, 0xfb,
+ 0x02, 0x4e, 0xf9, 0x51, 0x0b, 0xfa, 0xa4, 0x1b, 0xfe, 0xe6, 0x9a, 0x4f, 0x1f,
+ 0xf8, 0x0e, 0xd9, 0x7f, 0xbd, 0xfb, 0xd9, 0x05, 0xbd, 0x36, 0x20, 0x12, 0xc6,
+ 0xec, 0xd4, 0x14, 0xc7, 0x5e, 0xae, 0xe1, 0x31, 0xf4, 0x37, 0x1d, 0xca, 0x13,
+ 0x0e, 0xbb, 0xda, 0x19, 0x27, 0xf2, 0x01, 0xf4, 0x02, 0x41, 0xeb, 0x0d, 0x02,
+ 0x11, 0x0c, 0xf9, 0xcd, 0x13, 0x08, 0x19, 0xf2, 0x01, 0x5a, 0x34, 0x06, 0xcf,
+ 0xff, 0xa1, 0xf9, 0xd6, 0x21, 0xea, 0x25, 0xd6, 0x0e, 0xd0, 0x11, 0x08, 0xc2,
+ 0xfb, 0xc6, 0xf4, 0x74, 0x7f, 0x17, 0x3a, 0x0e, 0xf9, 0x0b, 0xcd, 0xe0, 0xe3,
+ 0x17, 0xf4, 0xfa, 0x2d, 0xe0, 0xec, 0xd7, 0x06, 0xe6, 0xff, 0xf8, 0xd6, 0xdd,
+ 0xfe, 0xea, 0xfb, 0xff, 0xda, 0xfc, 0x2b, 0x63, 0xeb, 0xec, 0xce, 0x61, 0xf9,
+ 0xdc, 0xf9, 0xfc, 0xe8, 0x01, 0xe0, 0x73, 0x29, 0x08, 0x75, 0xf0, 0x12, 0x6f,
+ 0x38, 0x07, 0x22, 0x07, 0x20, 0xdc, 0xe2, 0x2e, 0xea, 0xe2, 0x01, 0x2e, 0xde,
+ 0xff, 0x29, 0x13, 0x11, 0x27, 0xec, 0x08, 0xfc, 0x21, 0x2a, 0x1d, 0x5d, 0xe0,
+ 0x78, 0x35, 0x07, 0xc8, 0x2f, 0xd9, 0xf6, 0xfb, 0x0b, 0x3a, 0xf8, 0xf8, 0xe1,
+ 0xfa, 0xce, 0xef, 0x40, 0xcf, 0x3c, 0xeb, 0x67, 0x2e, 0xff, 0x01, 0x1d, 0xdf,
+ 0xfe, 0xfd, 0x07, 0x0b, 0xfe, 0x27, 0x0d, 0x70, 0x08, 0xfd, 0xf3, 0xf7, 0xfa,
+ 0xc7, 0xde, 0x0e, 0x53, 0xfc, 0x12, 0x0f, 0xe3, 0xe6, 0x01, 0xe6, 0x12, 0xb3,
+ 0xad, 0x25, 0x4c, 0xc2, 0x20, 0x1a, 0x28, 0xba, 0x12, 0x31, 0x44, 0x1a, 0x41,
+ 0x3a, 0x13, 0x06, 0xeb, 0xfd, 0xf4, 0x37, 0x78, 0x0e, 0x31, 0x4b, 0x02, 0xf7,
+ 0x08, 0x2e, 0x3e, 0xed, 0x03, 0xd3, 0x0f, 0xcf, 0x3a, 0xeb, 0xfb, 0x96, 0xe9,
+ 0xdb, 0x0f, 0x53, 0x00, 0x2f, 0xec, 0xda, 0x0d, 0x52, 0xf6, 0x6f, 0xd7, 0x3c,
+ 0x14, 0xa5, 0xe9, 0x81, 0xcd, 0x36, 0x18, 0xee, 0xcb, 0xda, 0xd6, 0xf1, 0xec,
+ 0x17, 0x27, 0xeb, 0xff, 0x21, 0x1c, 0x0b, 0x7c, 0x34, 0x1c, 0xe7, 0x03, 0x0f,
+ 0x00, 0xe9, 0x00, 0x19, 0x3e, 0x01, 0xa2, 0xc3, 0x74, 0xe8, 0x31, 0xed, 0xf1,
+ 0x09, 0xeb, 0xdd, 0xe5, 0x42, 0x52, 0xff, 0xf4, 0xdf, 0xf0, 0xf3, 0x62, 0x01,
+ 0xfc, 0x12, 0x2c, 0xde, 0xf8, 0xe2, 0x19, 0x1c, 0x1d, 0x15, 0x34, 0x1d, 0xf1,
+ 0xf0, 0x09, 0x1c, 0xd8, 0x1e, 0xee, 0xfa, 0x30, 0xdf, 0xec, 0x0c, 0x03, 0x1f,
+ 0x28, 0x20, 0x0a, 0x09, 0xff, 0xf3, 0x43, 0x68, 0xe7, 0x21, 0xe8, 0xfd, 0x7f,
+ 0xc0, 0xd2, 0xf0, 0x1f, 0xf9, 0x1b, 0x04, 0x25, 0x3b, 0x4a, 0xfc, 0xb2, 0x2c,
+ 0xf0, 0xcb, 0x42, 0xf7, 0xc6, 0x31, 0x21, 0x35, 0x2b, 0x0a, 0xfa, 0xd3, 0xe6,
+ 0x35, 0xd2, 0x0f, 0xdc, 0x97, 0x02, 0xc5, 0x19, 0x51, 0xd5, 0xdb, 0xd9, 0xbe,
+ 0xcc, 0xd8, 0xdd, 0xc8, 0x3b, 0xe6, 0x0b, 0xee, 0xf1, 0x28, 0xc7, 0xdd, 0xec,
+ 0x11, 0xf2, 0x0d, 0xa5, 0xd9, 0x03, 0x1f, 0xbc, 0xe1, 0x19, 0x3d, 0xf7, 0x00,
+ 0x60, 0xf4, 0xe9, 0x22, 0x13, 0xd2, 0x02, 0x1a, 0xf3, 0xfe, 0xea, 0xb3, 0xc5,
+ 0x06, 0xf7, 0xb8, 0x45, 0xc5, 0x27, 0x00, 0x0d, 0xfb, 0x03, 0x3d, 0xd2, 0xf4,
+ 0x22, 0xcd, 0x23, 0xf7, 0x29, 0x06, 0x9d, 0x26, 0xfd, 0x0f, 0x1a, 0x30, 0x14,
+ 0x3e, 0xcc, 0xee, 0xe2, 0xba, 0x0d, 0x07, 0x02, 0x68, 0x30, 0xf8, 0x24, 0xe7,
+ 0x06, 0xdd, 0xed, 0xf2, 0xf2, 0x7f, 0x0f, 0x1c, 0xec, 0x3a, 0xfa, 0x01, 0x18,
+ 0x03, 0x1e, 0xf4, 0x01, 0xde, 0xfd, 0xe1, 0xf4, 0x08, 0x0a, 0x09, 0xf9, 0x19,
+ 0x23, 0xff, 0x2e, 0x00, 0xf3, 0xee, 0xf3, 0xf9, 0x03, 0xe4, 0x23, 0xfe, 0x29,
+ 0x0c, 0x12, 0xec, 0x21, 0x04, 0x03, 0x0c, 0x20, 0x08, 0x23, 0x1e, 0x40, 0xee,
+ 0x1e, 0x14, 0x08, 0x08, 0x03, 0x0a, 0xfe, 0xdf, 0x00, 0x19, 0xff, 0xf3, 0x04,
+ 0x0a, 0xf2, 0x01, 0x1e, 0x19, 0x0a, 0x23, 0x09, 0x21, 0xee, 0xff, 0x00, 0x01,
+ 0x03, 0xfa, 0x1a, 0xfd, 0xf3, 0x0c, 0xee, 0x14, 0x08, 0x0e, 0x03, 0x15, 0xf3,
+ 0xfe, 0xe9, 0x01, 0xd7, 0x03, 0x03, 0xf0, 0x2c, 0x3a, 0x03, 0x03, 0x04, 0x0b,
+ 0xe4, 0x05, 0xeb, 0x34, 0xff, 0x00, 0x25, 0x21, 0xdb, 0xd4, 0x0b, 0xd8, 0x06,
+ 0xec, 0xfe, 0x05, 0x04, 0x04, 0x1c, 0xf2, 0xd9, 0xfb, 0x09, 0xc1, 0xaa, 0x13,
+ 0x1c, 0x54, 0x8d, 0xcb, 0xd9, 0xc4, 0x1e, 0xc4, 0x21, 0x1f, 0xd4, 0xd7, 0x00,
+ 0x1a, 0xef, 0xfc, 0x0f, 0x4e, 0x02, 0x10, 0xe8, 0xcf, 0xb2, 0xdd, 0x21, 0x2f,
+ 0xf4, 0xbe, 0xe3, 0xfb, 0xea, 0xdf, 0x98, 0x03, 0xf0, 0x7f, 0x7c, 0x57, 0x15,
+ 0xfb, 0x0e, 0xda, 0xd0, 0x5a, 0x20, 0xf6, 0x3a, 0xfb, 0x4a, 0xec, 0xf5, 0xee,
+ 0x0c, 0xf8, 0xeb, 0xc8, 0xed, 0x03, 0xee, 0x27, 0x28, 0x08, 0xe9, 0xfd, 0x6b,
+ 0xcf, 0xf3, 0x48, 0x06, 0xba, 0xc5, 0x9d, 0xf3, 0xc6, 0x19, 0xd7, 0xa5, 0x27,
+ 0x40, 0x27, 0x2b, 0x16, 0x2c, 0xc5, 0x11, 0xe6, 0x23, 0x13, 0xf7, 0xe9, 0x21,
+ 0x77, 0xab, 0xcd, 0xed, 0x44, 0xfa, 0xeb, 0xca, 0x04, 0xf3, 0xdb, 0xb4, 0xd2,
+ 0xd5, 0xe0, 0xf4, 0xd4, 0xfa, 0xa4, 0x1c, 0xd7, 0xd1, 0x88, 0xd2, 0x14, 0xcf,
+ 0x10, 0x0c, 0x05, 0x3d, 0x26, 0x0b, 0x1e, 0xd9, 0xcf, 0x0e, 0xca, 0x01, 0x36,
+ 0xfe, 0x22, 0xd5, 0x37, 0xd6, 0xd0, 0xbf, 0x19, 0xc9, 0xc9, 0xde, 0x08, 0xb8,
+ 0x07, 0xf6, 0x2e, 0xdd, 0x10, 0x2e, 0xf8, 0x0e, 0xcb, 0x93, 0xbb, 0xbf, 0x2a,
+ 0x1d, 0x50, 0x01, 0x0a, 0xdc, 0x2c, 0xed, 0x08, 0xcc, 0x87, 0x5d, 0x1d, 0xee,
+ 0xed, 0xd0, 0xfb, 0x7f, 0xd5, 0x47, 0x24, 0xa5, 0xd3, 0xe7, 0x02, 0x25, 0xd3,
+ 0x17, 0xe2, 0xf5, 0xf5, 0xe6, 0xf3, 0x40, 0xca, 0x18, 0xda, 0x4c, 0x01, 0xdf,
+ 0x67, 0xf2, 0xdf, 0x18, 0x39, 0xf6, 0x12, 0xa3, 0x21, 0xcd, 0x21, 0x62, 0x55,
+ 0x07, 0x7b, 0xde, 0xea, 0x08, 0xe3, 0xce, 0x00, 0xfe, 0xf6, 0xc4, 0x4f, 0xf3,
+ 0x39, 0xff, 0xea, 0x31, 0x7e, 0x24, 0xf3, 0xc2, 0x47, 0xaf, 0x10, 0x09, 0x34,
+ 0xd0, 0xc9, 0xf0, 0x4e, 0xf1, 0x06, 0x1d, 0x58, 0x07, 0x4b, 0x01, 0x0b, 0xd1,
+ 0x25, 0xe8, 0x0a, 0x40, 0xc4, 0x2f, 0xfd, 0xf9, 0xe5, 0xcf, 0xea, 0x09, 0x00,
+ 0x1e, 0x07, 0xdd, 0x50, 0x0c, 0xfa, 0xd8, 0x64, 0xe7, 0xdd, 0x0d, 0x1b, 0x06,
+ 0xcb, 0x7f, 0xf4, 0x18, 0x11, 0x15, 0xe8, 0xdf, 0xeb, 0x03, 0xe0, 0x30, 0x0d,
+ 0x00, 0xba, 0xe9, 0xe1, 0xb5, 0x05, 0xfb, 0xce, 0xea, 0x3d, 0xc7, 0xd0, 0xd7,
+ 0x26, 0xde, 0xcc, 0xfb, 0x32, 0xed, 0xdb, 0xec, 0x16, 0x0e, 0x4e, 0x27, 0xfe,
+ 0x1a, 0x25, 0x15, 0x24, 0xde, 0x0c, 0x20, 0xe3, 0x38, 0xde, 0x0d, 0xf2, 0x22,
+ 0xd9, 0x2d, 0x47, 0xb7, 0x08, 0xf7, 0xcc, 0x12, 0x13, 0xd6, 0x3a, 0x1b, 0xc4,
+ 0xaa, 0x06, 0xf7, 0xf2, 0xf0, 0x14, 0xeb, 0x0a, 0xfe, 0x2b, 0xf1, 0x0a, 0x07,
+ 0x1c, 0xf1, 0xf4, 0x36, 0xba, 0xe2, 0x5c, 0x1a, 0x36, 0xd7, 0xf8, 0xfd, 0x35,
+ 0xf2, 0xf1, 0x2f, 0x08, 0x07, 0xde, 0x00, 0x39, 0x08, 0xe0, 0xe5, 0x1b, 0xc8,
+ 0xe9, 0x40, 0xc1, 0xe8, 0x17, 0x18, 0x07, 0x28, 0xd0, 0xc5, 0xd7, 0xf0, 0xc3,
+ 0x0a, 0xb7, 0xe3, 0x49, 0x2c, 0x15, 0xdb, 0xd8, 0xed, 0x11, 0xc4, 0x96, 0xf5,
+ 0x19, 0x22, 0x23, 0x05, 0xd7, 0xfa, 0x5e, 0xd6, 0xcc, 0xb0, 0xf5, 0xd4, 0xc0,
+ 0xff, 0x06, 0x5c, 0xef, 0x0d, 0xe2, 0x29, 0x0b, 0xc1, 0xe1, 0x0d, 0x2d, 0xe6,
+ 0x04, 0xd3, 0xd8, 0xc0, 0x2c, 0x0b, 0x43, 0x15, 0x09, 0x1b, 0xd5, 0x29, 0xde,
+ 0xf4, 0x0f, 0x01, 0xf1, 0x04, 0xfb, 0x05, 0x0f, 0xad, 0x26, 0xe7, 0xf1, 0x34,
+ 0x08, 0xfc, 0xf8, 0x1c, 0xcb, 0xf9, 0x3d, 0x04, 0xf0, 0xf1, 0xd4, 0x02, 0x42,
+ 0x3b, 0x31, 0x39, 0x1d, 0xe3, 0x30, 0xfc, 0x1f, 0xd5, 0xfd, 0x36, 0x34, 0x00,
+ 0x3a, 0x0f, 0x0c, 0xd8, 0x53, 0x0a, 0xef, 0x11, 0x1c, 0x7f, 0xaf, 0xd0, 0xfe,
+ 0x06, 0x05, 0x66, 0xd2, 0xe3, 0xe0, 0xe0, 0x2b, 0xf1, 0xe0, 0xe1, 0x45, 0x56,
+ 0x12, 0xde, 0xf8, 0x1a, 0xfc, 0x07, 0xcd, 0x0e, 0x03, 0x16, 0x70, 0x2e, 0x30,
+ 0x35, 0xac, 0x8e, 0x10, 0x14, 0xdd, 0x35, 0x4f, 0x16, 0xfa, 0xeb, 0x0c, 0xf3,
+ 0xe2, 0x26, 0xbd, 0xfc, 0xd6, 0x2b, 0x92, 0x4d, 0xfa, 0xfa, 0x03, 0xf9, 0xd6,
+ 0xf2, 0x3a, 0xcc, 0xcc, 0xe0, 0xe9, 0xe7, 0x0f, 0x04, 0xfa, 0xd9, 0xea, 0xe2,
+ 0xd9, 0x0d, 0xf4, 0xbb, 0xfd, 0x17, 0xfa, 0x29, 0xee, 0xf1, 0x7f, 0xc5, 0xd0,
+ 0x04, 0x08, 0xeb, 0x14, 0x18, 0xe2, 0x01, 0xca, 0xfc, 0xe2, 0xfc, 0x47, 0x4b,
+ 0x1c, 0x46, 0xcc, 0x19, 0x08, 0xb8, 0xe4, 0xff, 0x28, 0x3c, 0xfc, 0x25, 0xfe,
+ 0xc9, 0x03, 0xd9, 0x27, 0xe8, 0x0c, 0x14, 0xda, 0xf7, 0x20, 0xf3, 0x0a, 0x2e,
+ 0x1d, 0x28, 0xeb, 0x1c, 0x03, 0x18, 0xde, 0xec, 0x42, 0x67, 0x09, 0x16, 0x43,
+ 0xc6, 0xfe, 0xeb, 0x0e, 0x01, 0xce, 0xe6, 0xe5, 0x01, 0x46, 0x05, 0xef, 0x0c,
+ 0xe2, 0xe5, 0xe1, 0x9a, 0x27, 0xe8, 0xdf, 0xe6, 0x35, 0xc1, 0x10, 0xf7, 0xcd,
+ 0x2e, 0x00, 0xda, 0xfd, 0xd8, 0xf8, 0xea, 0x7f, 0xb8, 0xdf, 0xd9, 0xa9, 0x2e,
+ 0x03, 0xfa, 0xfb, 0xf3, 0x20, 0x1a, 0x64, 0xe2, 0x2c, 0xf7, 0xf7, 0xf8, 0xef,
+ 0x65, 0xee, 0xe3, 0xc9, 0xf3, 0xf4, 0xdb, 0xf6, 0x65, 0xe3, 0x1d, 0xb0, 0xc7,
+ 0xdf, 0x00, 0xc7, 0xf8, 0xde, 0x2d, 0xe9, 0x08, 0x3b, 0xde, 0x38, 0x54, 0x06,
+ 0x22, 0x10, 0xf3, 0x62, 0x0e, 0x43, 0x20, 0x22, 0xe7, 0xd2, 0xfa, 0x3c, 0xe0,
+ 0xef, 0xe4, 0x39, 0x42, 0x2b, 0xe5, 0x31, 0xf4, 0xe9, 0xfa, 0xcf, 0x37, 0x0c,
+ 0xf7, 0x18, 0x11, 0xc2, 0x15, 0x3e, 0x24, 0x25, 0x2a, 0xef, 0xf3, 0xe0, 0xd4,
+ 0x44, 0xff, 0xf8, 0xc4, 0x20, 0xff, 0x0f, 0x07, 0x68, 0xf7, 0x1c, 0x16, 0xa4,
+ 0x22, 0x0f, 0xda, 0xf4, 0x42, 0xea, 0xee, 0x79, 0x4c, 0x07, 0x1f, 0xe1, 0xd8,
+ 0x03, 0xfb, 0xf2, 0xf7, 0x05, 0xea, 0x40, 0xf4, 0x1c, 0x3d, 0x1b, 0x11, 0x12,
+ 0x13, 0x20, 0x47, 0x34, 0x40, 0x19, 0xdf, 0xd1, 0xe1, 0x3e, 0x07, 0x1e, 0x34,
+ 0xf3, 0x2b, 0x0d, 0xd8, 0x22, 0xea, 0x11, 0x23, 0x03, 0x19, 0xda, 0xf6, 0xf9,
+ 0x38, 0xcd, 0x06, 0x48, 0xe6, 0x37, 0x46, 0x1a, 0x1b, 0x01, 0x28, 0xf9, 0xed,
+ 0xfd, 0xea, 0xf2, 0x30, 0x01, 0xe7, 0x0a, 0x0a, 0x22, 0x32, 0xe4, 0x47, 0xdd,
+ 0x02, 0x23, 0x29, 0x58, 0x22, 0x22, 0xcf, 0xd8, 0x55, 0x44, 0xc2, 0x07, 0x20,
+ 0xe1, 0x3c, 0xf0, 0x79, 0x13, 0x06, 0x04, 0xfd, 0x01, 0xf3, 0xf0, 0x13, 0xf3,
+ 0xdb, 0x10, 0xee, 0x29, 0xf7, 0x2e, 0x42, 0x1a, 0xdb, 0xea, 0xeb, 0x02, 0xed,
+ 0x02, 0xe5, 0x51, 0x0e, 0xf0, 0x12, 0x7f, 0xd8, 0x14, 0xef, 0x45, 0xf7, 0xe9,
+ 0xce, 0x23, 0x16, 0x16, 0x43, 0x00, 0xec, 0xf2, 0xda, 0xcc, 0x4b, 0xf3, 0x3b,
+ 0xd5, 0xe8, 0x32, 0xe5, 0x39, 0xe0, 0xc1, 0x56, 0xdb, 0x11, 0xf1, 0xe8, 0x35,
+ 0x07, 0x1a, 0xd6, 0x25, 0xa4, 0x30, 0xf2, 0xf4, 0xc7, 0x19, 0x69, 0x54, 0xfc,
+ 0xa8, 0x23, 0xfd, 0xee, 0x07, 0x01, 0xd0, 0xaf, 0x28, 0xfd, 0xdf, 0x20, 0x81,
+ 0x19, 0x36, 0x03, 0xf2, 0x0f, 0x0d, 0x28, 0xce, 0xc4, 0xc1, 0xc6, 0x26, 0xc9,
+ 0xe8, 0xa0, 0xe4, 0x8e, 0xd2, 0x24, 0xda, 0xf7, 0xfd, 0xa3, 0xf8, 0xfc, 0xb0,
+ 0x08, 0x2b, 0x2c, 0x0d, 0x19, 0x17, 0x1b, 0xa3, 0x77, 0x76, 0xfc, 0xdd, 0x2e,
+ 0x0e, 0xf3, 0xc0, 0x6c, 0x1f, 0xd5, 0x06, 0xb9, 0xe5, 0xd7, 0x00, 0x03, 0xc7,
+ 0xbd, 0x13, 0x3e, 0xe0, 0x34, 0x0a, 0x36, 0xed, 0x2c, 0xd0, 0xe4, 0xa3, 0x16,
+ 0xdd, 0xc0, 0x1f, 0xfa, 0xbc, 0xb2, 0x14, 0xf3, 0xea, 0xf7, 0xd6, 0xe9, 0xe6,
+ 0xf6, 0x23, 0x2d, 0x00, 0xb8, 0xeb, 0x40, 0x17, 0x12, 0x77, 0xd1, 0xc4, 0x01,
+ 0x11, 0x46, 0xd1, 0x52, 0x36, 0x4c, 0xef, 0x05, 0xe0, 0x29, 0xc1, 0x6b, 0x14,
+ 0x04, 0x1d, 0x07, 0x2a, 0x41, 0x04, 0x15, 0x1e, 0x25, 0x04, 0x0d, 0x41, 0xe0,
+ 0xf6, 0xfc, 0xf5, 0xe6, 0xe7, 0x07, 0x37, 0x30, 0x30, 0x27, 0x47, 0xe7, 0xec,
+ 0x33, 0x00, 0x22, 0x08, 0x02, 0x1c, 0x26, 0x6a, 0xf9, 0x1c, 0xb8, 0xc9, 0xda,
+ 0xe0, 0xfc, 0xfa, 0x1c, 0xeb, 0x31, 0xf3, 0xc6, 0x22, 0x1b, 0xf6, 0x04, 0xd0,
+ 0x10, 0xe7, 0x36, 0x0f, 0x7f, 0x08, 0x1d, 0x03, 0xde, 0xc1, 0x30, 0x30, 0x1e,
+ 0x08, 0xbd, 0xcc, 0x29, 0xe2, 0x06, 0x21, 0xe3, 0xd7, 0x59, 0xe9, 0xcd, 0xf0,
+ 0x17, 0x07, 0x31, 0xc3, 0xbb, 0xcf, 0xfa, 0x14, 0xe1, 0x67, 0xea, 0x15, 0x0b,
+ 0x08, 0x23, 0x37, 0x33, 0xdb, 0x29, 0xc0, 0x0e, 0x1f, 0xef, 0xfd, 0x0c, 0x59,
+ 0x13, 0x1d, 0x71, 0xfa, 0x1b, 0x02, 0xe3, 0xe7, 0xde, 0xcf, 0x54, 0xff, 0x2b,
+ 0xdd, 0x33, 0x3d, 0xd6, 0xed, 0xb0, 0xd8, 0xe3, 0x0b, 0x0c, 0xfe, 0x3c, 0x0a,
+ 0x10, 0xf7, 0xd5, 0x48, 0x20, 0xc4, 0xdf, 0x04, 0xe6, 0x12, 0x20, 0x01, 0x38,
+ 0xfe, 0xd8, 0xea, 0x57, 0xde, 0x9a, 0x45, 0xe4, 0x16, 0x1f, 0x59, 0x17, 0x23,
+ 0xda, 0x0c, 0xfb, 0xe1, 0x33, 0xe5, 0xcd, 0xd7, 0x17, 0xe6, 0xe1, 0xc5, 0xff,
+ 0x9a, 0xd3, 0xc8, 0xe6, 0xf5, 0xdf, 0xd5, 0xd5, 0xfc, 0x19, 0xe3, 0x27, 0xb5,
+ 0xf5, 0xed, 0x27, 0xff, 0xe0, 0xd7, 0x34, 0x0f, 0xe2, 0xd2, 0xfa, 0x08, 0x00,
+ 0x57, 0xcf, 0xe7, 0xf4, 0x20, 0x09, 0x0f, 0x7f, 0x07, 0x42, 0xda, 0xfc, 0xf9,
+ 0x0a, 0xdf, 0xda, 0xf7, 0x23, 0xd3, 0x2a, 0x04, 0x04, 0x0b, 0xc2, 0x0e, 0x0d,
+ 0xf4, 0x13, 0x06, 0xf4, 0x25, 0xe6, 0xf5, 0xed, 0xd3, 0x0e, 0xa7, 0xee, 0xed,
+ 0x1b, 0x05, 0x3f, 0x4c, 0x1c, 0xd0, 0x34, 0xb3, 0x3a, 0xf8, 0xf4, 0x45, 0x3f,
+ 0x24, 0xc4, 0xaa, 0xf1, 0xc1, 0x16, 0x0d, 0xf0, 0x5d, 0x2d, 0x2d, 0xeb, 0xfc,
+ 0xe8, 0xf1, 0x18, 0x0e, 0x22, 0x28, 0xd1, 0xb4, 0x3c, 0x0b, 0xfc, 0x18, 0x11,
+ 0xe0, 0xfc, 0xe2, 0x3e, 0x01, 0x43, 0xdf, 0x02, 0x72, 0x05, 0x20, 0xec, 0xd3,
+ 0xc3, 0xfa, 0x35, 0xe5, 0xf7, 0xf7, 0xd9, 0xde, 0xf2, 0xf0, 0xc3, 0xfb, 0xfa,
+ 0xb7, 0x04, 0x01, 0xc2, 0x55, 0xb4, 0xfa, 0x04, 0xf0, 0x02, 0xa5, 0x2d, 0xe6,
+ 0x37, 0xb7, 0x16, 0xb1, 0xca, 0x1e, 0xc9, 0xd0, 0x47, 0x1b, 0x2e, 0x52, 0x2f,
+ 0xbf, 0xd7, 0x06, 0xa3, 0xde, 0x33, 0xef, 0xa4, 0x01, 0x5f, 0xd8, 0xe9, 0xb3,
+ 0x3d, 0xf8, 0x35, 0x2e, 0xf7, 0x13, 0x27, 0xde, 0xd2, 0x70, 0x1b, 0xd0, 0x12,
+ 0xfb, 0xac, 0xf0, 0xed, 0xd9, 0xc2, 0xe7, 0x15, 0x05, 0xc8, 0x0e, 0x81, 0x08,
+ 0x07, 0x12, 0xbc, 0xcb, 0x4a, 0x00, 0xee, 0xd5, 0xdd, 0xd8, 0x2b, 0x2b, 0x0c,
+ 0x39, 0xc7, 0xf7, 0xc2, 0x30, 0xd1, 0x1c, 0x0c, 0x20, 0x30, 0x0d, 0x26, 0x3e,
+ 0x2a, 0x28, 0xcf, 0x0e, 0x01, 0x7f, 0xe2, 0xf5, 0xc3, 0x28, 0x05, 0x20, 0x08,
+ 0xf2, 0x10, 0x04, 0xf7, 0xed, 0xd8, 0x43, 0xf3, 0xf7, 0xd4, 0x2b, 0x26, 0xdd,
+ 0xe1, 0x51, 0xf2, 0x3f, 0x39, 0xaa, 0xf6, 0x24, 0xd6, 0x2c, 0x15, 0xde, 0xf4,
+ 0xf9, 0xf6, 0x17, 0xdd, 0x1d, 0xe7, 0xf8, 0x02, 0xd2, 0xbd, 0xe4, 0x13, 0x0c,
+ 0x42, 0x12, 0x1e, 0x09, 0xfb, 0x40, 0x3c, 0x1f, 0xe2, 0xdc, 0x09, 0x1c, 0x12,
+ 0x4d, 0x3e, 0x16, 0x37, 0x0a, 0x37, 0x15, 0xf0, 0x24, 0xd1, 0xbb, 0xe7, 0x07,
+ 0xe3, 0xd8, 0xc9, 0x4f, 0xc1, 0x04, 0x05, 0xd4, 0x1d, 0xae, 0xc1, 0xcc, 0x15,
+ 0x0d, 0x07, 0x0e, 0x13, 0xcf, 0x0b, 0x07, 0x01, 0x0e, 0xf7, 0xc4, 0x1a, 0x36,
+ 0xea, 0x15, 0xed, 0xe3, 0x15, 0x7f, 0x2d, 0x2d, 0xf6, 0x10, 0xdd, 0xe4, 0xdf,
+ 0xf8, 0xf2, 0xe7, 0x06, 0x5d, 0xff, 0xc0, 0x04, 0x06, 0xdb, 0x2e, 0xf5, 0xc1,
+ 0x52, 0xd1, 0x04, 0xe1, 0x28, 0xdb, 0x15, 0x03, 0x17, 0xda, 0x10, 0xe6, 0x35,
+ 0xe6, 0xcc, 0xea, 0x33, 0x46, 0x04, 0xc9, 0xd0, 0x4c, 0xf4, 0xfc, 0x64, 0x30,
+ 0xe0, 0x48, 0xc0, 0x17, 0xd0, 0x1c, 0xdb, 0xfa, 0xe4, 0xf4, 0x1d, 0xe1, 0xb4,
+ 0x17, 0x13, 0xe0, 0xff, 0xf6, 0xc2, 0x24, 0xea, 0x61, 0x34, 0xf7, 0xfe, 0x1f,
+ 0xf3, 0xfd, 0xb0, 0x3a, 0xe1, 0xeb, 0x6c, 0x1d, 0x17, 0xf3, 0xec, 0x17, 0xda,
+ 0xf0, 0x21, 0xf4, 0x00, 0xe5, 0x3d, 0xe3, 0x16, 0x03, 0x07, 0xd3, 0xec, 0x11,
+ 0x26, 0xde, 0xe1, 0xbb, 0xd8, 0x04, 0x2a, 0x24, 0x11, 0xeb, 0x3c, 0x25, 0x1f,
+ 0xf3, 0x10, 0xed, 0x2e, 0x3f, 0xff, 0xa3, 0xdf, 0x3a, 0x49, 0xe4, 0xdd, 0x1f,
+ 0xf1, 0xc8, 0x60, 0xec, 0xe7, 0xe9, 0x36, 0xe9, 0x08, 0xf9, 0xcf, 0xeb, 0x03,
+ 0x04, 0x17, 0x38, 0xdb, 0xe1, 0x10, 0x11, 0xdf, 0xfe, 0xe9, 0x2f, 0xe0, 0xed,
+ 0xfc, 0xc0, 0xfd, 0xff, 0xea, 0xdd, 0xd9, 0xdb, 0x25, 0xf9, 0x2a, 0x2f, 0xe7,
+ 0x1f, 0x31, 0xec, 0xef, 0x71, 0x16, 0x54, 0xe5, 0x03, 0x1d, 0xf8, 0x22, 0xf8,
+ 0x0e, 0x00, 0x18, 0xf4, 0x03, 0x05, 0x0c, 0x02, 0x29, 0xfb, 0xe3, 0xe3, 0x27,
+ 0x1c, 0x30, 0x15, 0x35, 0xe6, 0x1d, 0x42, 0xf9, 0xe3, 0xfe, 0xeb, 0xec, 0x19,
+ 0xb7, 0xf9, 0x02, 0x1c, 0xd3, 0xff, 0xf5, 0xf3, 0x17, 0x0a, 0xfd, 0x08, 0x7f,
+ 0xf9, 0xfd, 0x06, 0x30, 0xdd, 0x1e, 0xf0, 0x0c, 0x1e, 0x3b, 0xff, 0xf2, 0x2a,
+ 0xfe, 0x15, 0xde, 0xcf, 0x2c, 0xf9, 0x0d, 0xff, 0x02, 0x01, 0xeb, 0xe9, 0x19,
+ 0xfe, 0x39, 0x31, 0x03, 0xe1, 0x00, 0x15, 0xea, 0xda, 0x00, 0xca, 0xf7, 0x3f,
+ 0xfc, 0xfe, 0x13, 0x03, 0xf2, 0xe5, 0x3e, 0x14, 0x44, 0xdf, 0x07, 0x38, 0x05,
+ 0xda, 0xe0, 0x15, 0x3b, 0x1b, 0x02, 0xe0, 0x06, 0x7f, 0x46, 0x29, 0xf3, 0x0f,
+ 0xeb, 0x14, 0xf6, 0x0f, 0x07, 0x1a, 0xd8, 0x09, 0xff, 0xee, 0xd4, 0x1e, 0x41,
+ 0xeb, 0xdf, 0xdb, 0x01, 0xae, 0x1c, 0x35, 0xe0, 0xea, 0xe4, 0xcd, 0xfe, 0x08,
+ 0xeb, 0xfa, 0x2f, 0x00, 0x09, 0x24, 0x0b, 0x02, 0x15, 0xed, 0x5d, 0xe6, 0x00,
+ 0x11, 0xfa, 0x34, 0x12, 0xd6, 0xca, 0xc3, 0xd2, 0x31, 0xde, 0xce, 0x29, 0x15,
+ 0xdc, 0xd0, 0xfc, 0xc8, 0x3b, 0x0f, 0xf9, 0xd5, 0xe4, 0x06, 0xc8, 0x31, 0xfd,
+ 0x13, 0xf3, 0xf6, 0x1e, 0xf9, 0xec, 0x39, 0xbd, 0x77, 0xdf, 0xde, 0xd3, 0xb6,
+ 0x51, 0xf0, 0xb0, 0x07, 0xf0, 0xde, 0x11, 0xb8, 0xda, 0x24, 0xe6, 0x23, 0xd4,
+ 0xec, 0x21, 0x56, 0xb5, 0xbc, 0x13, 0x2c, 0x21, 0x06, 0x03, 0x06, 0xf8, 0x2b,
+ 0x14, 0x31, 0xc5, 0x65, 0x40, 0xbc, 0xe9, 0x9b, 0x18, 0xe6, 0x0d, 0xf8, 0xf2,
+ 0x07, 0xf4, 0xea, 0x01, 0x26, 0x46, 0xe4, 0x1b, 0xfb, 0x0e, 0xd0, 0x43, 0x40,
+ 0xe1, 0xe8, 0x33, 0xc5, 0x44, 0xe9, 0x81, 0xf5, 0xe3, 0xe2, 0x08, 0x0a, 0x40,
+ 0x14, 0x2c, 0xd6, 0xd9, 0xed, 0xee, 0x54, 0x02, 0xcf, 0xfe, 0x1a, 0xcf, 0xf5,
+ 0x1d, 0x26, 0xfe, 0xca, 0x30, 0xc5, 0xd8, 0x33, 0x9c, 0xed, 0x1f, 0xf2, 0xdf,
+ 0xd4, 0x63, 0xdf, 0x20, 0xbf, 0xf8, 0x3c, 0x27, 0xd1, 0xde, 0x00, 0x32, 0xdf,
+ 0xc2, 0xb4, 0x09, 0xdd, 0x03, 0x0f, 0x0c, 0x08, 0x9c, 0xd2, 0xe0, 0x5a, 0xf8,
+ 0xb3, 0xe6, 0x15, 0x14, 0xf0, 0x0f, 0x29, 0x11, 0xd8, 0x15, 0x32, 0xda, 0x04,
+ 0xba, 0xe4, 0xee, 0x44, 0xf2, 0xae, 0x22, 0x25, 0xe0, 0xc2, 0xe7, 0x54, 0xfd,
+ 0x2d, 0x93, 0x30, 0x1c, 0xf3, 0x49, 0x37, 0xbe, 0x1a, 0xb9, 0x68, 0xec, 0x06,
+ 0x0b, 0x33, 0xb7, 0xc4, 0xd0, 0x1a, 0xf4, 0x09, 0x13, 0x0c, 0x27, 0xe5, 0x07,
+ 0xae, 0xf4, 0x20, 0xea, 0xf1, 0xfc, 0xd4, 0x03, 0x3b, 0x35, 0xc4, 0xdd, 0xc4,
+ 0xf4, 0xea, 0x2f, 0xfb, 0x85, 0x66, 0x02, 0xce, 0x1c, 0xf1, 0xa5, 0x2b, 0xe6,
+ 0xf8, 0xd7, 0xde, 0xd7, 0xc6, 0x02, 0x81, 0x22, 0x3b, 0xd7, 0x9c, 0x37, 0x20,
+ 0xe2, 0xee, 0xfe, 0xee, 0x21, 0x0a, 0xe6, 0x0e, 0x18, 0xf7, 0x50, 0x11, 0xe7,
+ 0x45, 0xa7, 0xd6, 0x07, 0xe8, 0x1b, 0xe1, 0x38, 0xac, 0x04, 0xf6, 0xba, 0x01,
+ 0xec, 0xec, 0xea, 0xfd, 0xfc, 0x00, 0x51, 0x32, 0xf9, 0xa5, 0xc8, 0xe5, 0xd4,
+ 0x05, 0x31, 0x04, 0x1e, 0xe0, 0xf0, 0xeb, 0x0e, 0x55, 0xf5, 0x3c, 0x13, 0xe3,
+ 0x43, 0x1b, 0xb0, 0x30, 0xec, 0x58, 0xda, 0x3f, 0x01, 0x06, 0xc5, 0x1e, 0x58,
+ 0x27, 0xcb, 0x13, 0x22, 0x67, 0x25, 0xf6, 0x03, 0x0e, 0xeb, 0xcb, 0x10, 0x2f,
+ 0xdd, 0x0a, 0x06, 0xf8, 0x0e, 0x01, 0x32, 0xf2, 0xdc, 0xf3, 0xc2, 0x4e, 0xfd,
+ 0xae, 0xc7, 0x5a, 0x13, 0xfb, 0xc4, 0xd0, 0x35, 0x41, 0x15, 0xf6, 0xdf, 0xef,
+ 0x17, 0x52, 0xc8, 0xdc, 0xf9, 0xc7, 0x51, 0xf8, 0xc2, 0xd2, 0x45, 0x49, 0xde,
+ 0xe4, 0x58, 0xad, 0x08, 0x0d, 0x26, 0xf4, 0xc8, 0xd3, 0xe6, 0xb3, 0xf7, 0xfa,
+ 0x16, 0x0f, 0xcf, 0xdf, 0xf5, 0x0e, 0x0f, 0xe4, 0x14, 0xeb, 0x2c, 0x81, 0xfd,
+ 0xef, 0xf9, 0x4a, 0xf9, 0xfa, 0x01, 0x9a, 0xe2, 0xa3, 0x5b, 0x14, 0x63, 0xe2,
+ 0xd9, 0xe0, 0xe8, 0xfc, 0x00, 0xf5, 0xdf, 0x07, 0x65, 0xd4, 0x14, 0x10, 0x21,
+ 0xd9, 0x00, 0xa9, 0x14, 0x2d, 0x05, 0x13, 0xdb, 0x05, 0x27, 0x39, 0xe2, 0x17,
+ 0xcd, 0xf3, 0xf5, 0xeb, 0xc2, 0xd0, 0xe3, 0x1d, 0xd8, 0x06, 0xfd, 0xc9, 0xcb,
+ 0x4c, 0xf7, 0xd6, 0xff, 0x0c, 0x28, 0x02, 0x08, 0xbc, 0x31, 0xdb, 0x37, 0xe3,
+ 0xf7, 0x81, 0x2e, 0xd1, 0xc7, 0x00, 0x41, 0xd2, 0xc4, 0x13, 0x12, 0x04, 0x0e,
+ 0x19, 0xee, 0xd6, 0x3c, 0x4d, 0xe4, 0xe2, 0x1f, 0x28, 0x04, 0xd7, 0x3d, 0xf5,
+ 0xcb, 0xeb, 0xb1, 0x1e, 0xbb, 0x17, 0xee, 0x36, 0x2c, 0xf8, 0x15, 0x09, 0xfd,
+ 0x33, 0xc4, 0xc2, 0xf2, 0xd5, 0xf9, 0xbe, 0x0c, 0xbc, 0x50, 0xb9, 0xed, 0xc4,
+ 0xd6, 0xdd, 0xed, 0x13, 0x06, 0xfe, 0x1d, 0x0d, 0xf5, 0xa3, 0x0d, 0xd3, 0x6b,
+ 0xe6, 0xff, 0x65, 0x29, 0xb4, 0x0e, 0xf0, 0xec, 0xe1, 0x1b, 0xee, 0xe4, 0xeb,
+ 0xf5, 0xec, 0x7b, 0x24, 0x2b, 0x26, 0x06, 0xc8, 0x27, 0x04, 0xfe, 0x2d, 0x12,
+ 0xa1, 0xe0, 0xe2, 0x18, 0x43, 0x24, 0x57, 0x1f, 0x0a, 0x1c, 0xfc, 0x1b, 0xe5,
+ 0xdd, 0x1d, 0xe0, 0xf5, 0x16, 0xe0, 0xf0, 0xef, 0xb0, 0x26, 0xdd, 0x17, 0xcf,
+ 0xe7, 0x0e, 0x11, 0xf7, 0xdf, 0x34, 0x21, 0xfd, 0xbc, 0xd4, 0x07, 0x0b, 0x10,
+ 0x3a, 0xbb, 0xdb, 0xdc, 0x31, 0x56, 0xfb, 0xf8, 0xff, 0x60, 0x04, 0xb5, 0x7f,
+ 0xdf, 0xfd, 0x06, 0x2c, 0xd8, 0xea, 0x16, 0xbd, 0xe1, 0x2a, 0x0c, 0xd4, 0xf6,
+ 0x44, 0x05, 0xd4, 0x19, 0xe1, 0xb8, 0xe8, 0x04, 0x06, 0xd6, 0xcc, 0x53, 0xdb,
+ 0xef, 0xfe, 0xd1, 0xf0, 0xe5, 0xfa, 0xc1, 0xc1, 0x1a, 0xbf, 0xea, 0x07, 0x08,
+ 0x52, 0x0d, 0xb8, 0x0d, 0x07, 0x26, 0x4e, 0xe0, 0x02, 0x06, 0x08, 0xe8, 0xfe,
+ 0xc3, 0xea, 0x50, 0x21, 0x05, 0xe5, 0x10, 0xc3, 0x1c, 0xfd, 0xf9, 0x06, 0x1e,
+ 0xdb, 0x49, 0x22, 0x1c, 0x07, 0xfd, 0xfe, 0x14, 0xea, 0x0e, 0xdf, 0xfb, 0xed,
+ 0x12, 0xef, 0x0b, 0x79, 0x1c, 0x2d, 0xc7, 0x11, 0x06, 0x1b, 0x0c, 0xf6, 0x07,
+ 0x21, 0x0d, 0x0f, 0xf6, 0x39, 0xc0, 0x1c, 0x23, 0xfa, 0xe3, 0x1a, 0x1f, 0x1c,
+ 0x01, 0xcc, 0xd6, 0x3a, 0x12, 0x3d, 0x97, 0x1e, 0x0d, 0x34, 0x16, 0x39, 0x33,
+ 0x23, 0xe1, 0xd4, 0x2b, 0x11, 0xfd, 0x1e, 0xd2, 0x2c, 0x9f, 0x01, 0x65, 0x10,
+ 0xca, 0x1f, 0xca, 0xfb, 0xce, 0x06, 0xbe, 0x29, 0x28, 0xea, 0x7f, 0x06, 0xa3,
+ 0x15, 0xdc, 0x18, 0x1e, 0xe4, 0x61, 0x0c, 0x0d, 0xeb, 0xcf, 0xf9, 0xb4, 0xe1,
+ 0x12, 0xb3, 0xff, 0x14, 0xe4, 0xc2, 0xe7, 0x02, 0xe7, 0x03, 0x0e, 0x34, 0x7c,
+ 0x46, 0x3c, 0x3f, 0x05, 0x06, 0x87, 0xba, 0xdf, 0xdb, 0x28, 0x01, 0x1b, 0xdf,
+ 0xf9, 0xf1, 0xba, 0x0d, 0xe3, 0xe2, 0xc2, 0xf3, 0x0a, 0xf7, 0xd2, 0x39, 0xea,
+ 0xb4, 0x11, 0x3b, 0xcb, 0x3d, 0xe9, 0xcd, 0xad, 0xcd, 0xac, 0x46, 0xf3, 0x5c,
+ 0x14, 0x56, 0xd0, 0xcb, 0xee, 0xc3, 0x12, 0x4c, 0x9d, 0xfa, 0xde, 0x03, 0x30,
+ 0xe7, 0xd0, 0x00, 0x2c, 0x2f, 0x3d, 0xe9, 0x15, 0x51, 0x18, 0x17, 0xe4, 0xf9,
+ 0x7f, 0x22, 0xd7, 0xfa, 0x1e, 0x10, 0xfc, 0xea, 0x64, 0x4b, 0xff, 0x2e, 0x12,
+ 0xda, 0xd0, 0xdb, 0x0a, 0x2c, 0x7a, 0xf3, 0x2d, 0x99, 0xab, 0x23, 0x22, 0x16,
+ 0x45, 0xcb, 0x1d, 0x0b, 0xfe, 0x0f, 0x00, 0x1c, 0xe2, 0xd1, 0xf4, 0xac, 0x73,
+ 0xec, 0x01, 0x27, 0xf8, 0x50, 0x3b, 0xd5, 0xdb, 0xef, 0x15, 0xfd, 0x19, 0x14,
+ 0xe4, 0x49, 0xe4, 0x2f, 0xf2, 0x10, 0x0f, 0x0e, 0x01, 0x23, 0x51, 0x1e, 0x23,
+ 0x46, 0x14, 0xde, 0xf9, 0x23, 0x2f, 0x03, 0xf4, 0x12, 0x18, 0x63, 0xdb, 0xf7,
+ 0xf7, 0x07, 0xb7, 0xed, 0x2d, 0xbd, 0xea, 0xdb, 0xdd, 0x2f, 0xfe, 0xe8, 0xff,
+ 0xf5, 0xf3, 0x08, 0xe7, 0x2d, 0x2e, 0xe9, 0x07, 0xdd, 0xca, 0x1d, 0x4b, 0xf8,
+ 0xd6, 0x0e, 0x6e, 0xce, 0xc3, 0x17, 0x18, 0xe7, 0xf5, 0xde, 0xf9, 0xcd, 0x31,
+ 0x78, 0xfd, 0x1b, 0x7c, 0x32, 0x40, 0x43, 0x05, 0xdd, 0x03, 0xf6, 0xe7, 0x0a,
+ 0xc9, 0x27, 0x26, 0xe8, 0x12, 0xd7, 0xf2, 0xc9, 0x07, 0xf6, 0xe1, 0xea, 0xf3,
+ 0xfd, 0xd9, 0x05, 0xd8, 0x2a, 0x17, 0x18, 0xe6, 0x1b, 0x25, 0x11, 0x12, 0x35,
+ 0xe1, 0x32, 0x06, 0xfb, 0x12, 0x2b, 0x3b, 0x14, 0xed, 0xd4, 0xe8, 0x09, 0x02,
+ 0x10, 0x7f, 0xe2, 0xf8, 0xbd, 0xe4, 0xe7, 0xc3, 0xeb, 0xff, 0x13, 0x04, 0xf8,
+ 0xdd, 0x11, 0xba, 0x27, 0xf4, 0xc7, 0x00, 0xd8, 0x5b, 0x24, 0x60, 0x44, 0xd7,
+ 0xfe, 0xc8, 0xce, 0x41, 0xe4, 0x27, 0xd5, 0x1b, 0x36, 0xca, 0xe8, 0x4f, 0xdf,
+ 0x22, 0x15, 0x18, 0x2e, 0x01, 0x06, 0x27, 0xed, 0xe8, 0xff, 0x29, 0x08, 0xd3,
+ 0x2b, 0xfe, 0xf1, 0xee, 0xfc, 0xe3, 0x15, 0xb6, 0xe8, 0x6d, 0x05, 0xf3, 0x1b,
+ 0x4f, 0x4f, 0x0c, 0x0b, 0x6c, 0x1c, 0xda, 0xfa, 0xd4, 0xf9, 0x0e, 0x11, 0xf8,
+ 0xf1, 0x25, 0x32, 0xfc, 0xfc, 0xef, 0x13, 0xf7, 0xf4, 0x23, 0x40, 0xde, 0x2b,
+ 0x3e, 0x19, 0xe4, 0xf1, 0x2d, 0xf3, 0xf3, 0x0e, 0x2a, 0x3c, 0x1e, 0x20, 0x09,
+ 0x12, 0x7a, 0x1d, 0x0d, 0x1f, 0x15, 0x35, 0x0e, 0xfd, 0x1e, 0xf0, 0xff, 0x0e,
+ 0xde, 0x1f, 0x19, 0xe5, 0x20, 0x1d, 0xee, 0xe5, 0x7f, 0x0b, 0x0e, 0xfa, 0xea,
+ 0xfd, 0xe9, 0xdf, 0x02, 0xe1, 0xec, 0x01, 0x12, 0x00, 0xe7, 0x11, 0x35, 0xf2,
+ 0xe2, 0xf9, 0xfb, 0xec, 0x08, 0xd9, 0x0f, 0xea, 0xf4, 0xf0, 0xee, 0x02, 0xf3,
+ 0xf1, 0x38, 0x1d, 0x1c, 0x37, 0xdf, 0x0b, 0xe2, 0x16, 0xf9, 0xfd, 0x09, 0xe8,
+ 0xed, 0xef, 0x00, 0x0d, 0x17, 0xf7, 0xeb, 0x0c, 0xf2, 0x12, 0xf3, 0xef, 0x39,
+ 0xfa, 0xd9, 0x02, 0xdf, 0x0a, 0xe5, 0xf2, 0x1c, 0xf7, 0x0e, 0x19, 0x05, 0x21,
+ 0x04, 0xf9, 0x24, 0xd9, 0xdf, 0xfc, 0xfa, 0x02, 0x34, 0x16, 0x34, 0x21, 0xff,
+ 0xd7, 0xf2, 0x1f, 0xf1, 0xec, 0x0d, 0xfe, 0xfd, 0xfe, 0x2a, 0x2f, 0xf7, 0x33,
+ 0xef, 0x4b, 0xce, 0x36, 0xef, 0xd4, 0xee, 0xf5, 0x5c, 0xee, 0x1a, 0xd5, 0xe9,
+ 0xe0, 0x51, 0xe4, 0xcb, 0x09, 0x43, 0xd4, 0xfb, 0x12, 0x27, 0xe5, 0x17, 0x21,
+ 0x05, 0x7f, 0x1e, 0x0c, 0xfe, 0xf0, 0xea, 0xda, 0xe9, 0x47, 0xfc, 0x07, 0x0d,
+ 0xed, 0xdb, 0xd2, 0xdb, 0xfa, 0xe5, 0x13, 0x08, 0x09, 0xf8, 0x15, 0x15, 0x16,
+ 0xe7, 0xe7, 0x46, 0x24, 0x18, 0xf2, 0x2d, 0xf8, 0xfc, 0x11, 0x02, 0x2c, 0x13,
+ 0xce, 0xe5, 0xef, 0x1a, 0x49, 0x21, 0xcd, 0xe7, 0xe9, 0xf6, 0x17, 0x2f, 0xfc,
+ 0xc3, 0x20, 0xf0, 0x07, 0x06, 0xf3, 0x12, 0x0f, 0x1c, 0xf3, 0xd9, 0xfc, 0xf7,
+ 0x0b, 0xfd, 0xf9, 0x00, 0x0f, 0x1e, 0xf4, 0xd2, 0xdb, 0x0d, 0xdc, 0x07, 0xee,
+ 0xf6, 0xe8, 0x22, 0xff, 0x30, 0xd3, 0x19, 0x27, 0x2c, 0xfa, 0xfa, 0x4a, 0xf3,
+ 0x2a, 0xe8, 0xd6, 0x39, 0xe9, 0x04, 0x0b, 0x1b, 0x34, 0xec, 0xf7, 0x3d, 0xa3,
+ 0x08, 0x5b, 0x26, 0xdc, 0xc2, 0x48, 0xdd, 0x2f, 0x2d, 0xf6, 0x60, 0x02, 0x37,
+ 0x59, 0xa4, 0x3a, 0x06, 0x02, 0x36, 0xff, 0x16, 0x1e, 0xf2, 0x68, 0x0b, 0x01,
+ 0x0e, 0xe8, 0xea, 0x30, 0x6a, 0x4d, 0x37, 0x38, 0xfb, 0xdb, 0xf4, 0x2a, 0x0d,
+ 0xfb, 0x14, 0xef, 0xe7, 0xce, 0x00, 0xeb, 0x0b, 0x05, 0xb8, 0x10, 0xcb, 0x2c,
+ 0xf5, 0xbf, 0x2f, 0x27, 0x65, 0x6d, 0x0b, 0x9f, 0x27, 0x4b, 0xfe, 0xe3, 0xee,
+ 0x24, 0xdd, 0x6a, 0xf1, 0xf3, 0xd5, 0x9d, 0x14, 0xdc, 0xf7, 0xfe, 0x15, 0xca,
+ 0xaa, 0x52, 0xf5, 0x16, 0xdb, 0xdb, 0x47, 0x10, 0x30, 0xcb, 0x0c, 0xf4, 0x00,
+ 0x0c, 0xf4, 0xb6, 0x7f, 0xc8, 0xe8, 0xe9, 0x23, 0x37, 0x00, 0x09, 0xf0, 0x0b,
+ 0xf6, 0xe6, 0xf3, 0x30, 0xe7, 0x37, 0x56, 0x45, 0xd3, 0x10, 0xc1, 0xfc, 0xbb,
+ 0x8c, 0x32, 0x0d, 0x11, 0xb7, 0x6d, 0xdd, 0x18, 0x5b, 0x46, 0x14, 0xc5, 0x17,
+ 0x2e, 0xf3, 0x2b, 0x02, 0x45, 0xdb, 0x3c, 0x03, 0xbe, 0xf0, 0x3a, 0x7d, 0x37,
+ 0xdd, 0xb1, 0xb5, 0x2c, 0x06, 0x3c, 0xb6, 0x66, 0xaf, 0x5d, 0x09, 0xdb, 0xf4,
+ 0xfb, 0x1f, 0xe7, 0xe7, 0x01, 0x21, 0xe9, 0x34, 0xfd, 0x3d, 0xc6, 0xef, 0xe7,
+ 0x0a, 0x3d, 0x20, 0x54, 0xdf, 0x0b, 0x07, 0x34, 0x96, 0x01, 0x65, 0x24, 0x63,
+ 0x28, 0x7f, 0x4e, 0x0b, 0x0e, 0xcb, 0x20, 0x46, 0xc5, 0xa7, 0x55, 0x02, 0xc1,
+ 0x18, 0x0c, 0xda, 0xe3, 0x3b, 0xbd, 0x3a, 0x22, 0x47, 0x10, 0xe5, 0x21, 0xdf,
+ 0x3b, 0xdd, 0x0f, 0x0e, 0x05, 0xc6, 0x9b, 0x06, 0x66, 0xf0, 0x3a, 0xd6, 0x20,
+ 0xba, 0xf3, 0x0a, 0xd1, 0xe6, 0x40, 0xe1, 0xe7, 0xf4, 0x1d, 0x05, 0xf1, 0x2c,
+ 0xef, 0xd0, 0xe1, 0x18, 0x11, 0x1c, 0x5e, 0x27, 0xfd, 0xff, 0xfb, 0xe9, 0xfb,
+ 0xf1, 0x1a, 0x40, 0x0d, 0x1d, 0x30, 0x3a, 0xdd, 0xde, 0xd2, 0x13, 0xdf, 0x35,
+ 0xfe, 0xe8, 0xeb, 0x1c, 0x02, 0x24, 0x10, 0x25, 0x00, 0x0a, 0x0d, 0x04, 0xf7,
+ 0xfb, 0xfd, 0xee, 0xc9, 0x14, 0xd1, 0x27, 0xd4, 0xdd, 0x21, 0xbd, 0xc6, 0x53,
+ 0xfd, 0xf2, 0x0d, 0xef, 0x0a, 0xf2, 0xe7, 0x0a, 0x1e, 0x1c, 0xe5, 0xff, 0xf5,
+ 0xed, 0xd9, 0xf8, 0x1e, 0xe2, 0xfd, 0x04, 0xfd, 0xe3, 0x14, 0xe6, 0x1a, 0x7f,
+ 0x05, 0x2a, 0xf0, 0xf8, 0xf2, 0x07, 0xfa, 0x11, 0xe4, 0xf8, 0xed, 0xe7, 0xfe,
+ 0xfc, 0xf9, 0xcf, 0x08, 0xe2, 0xf6, 0xea, 0xec, 0x07, 0x13, 0x0f, 0x25, 0x06,
+ 0xee, 0xdf, 0xf2, 0x19, 0x1e, 0xd5, 0x18, 0x0b, 0xe5, 0xf5, 0x11, 0xfc, 0x0e,
+ 0x19, 0xf4, 0xf7, 0xf5, 0xf5, 0x0c, 0x00, 0xf5, 0xfe, 0xfd, 0x04, 0xdf, 0xf0,
+ 0x0f, 0x43, 0xf2, 0xf9, 0x0a, 0xe1, 0x29, 0xea, 0xdf, 0x63, 0xf5, 0x21, 0xc6,
+ 0xf2, 0xf5, 0x2c, 0xd1, 0x3b, 0x2e, 0xee, 0x12, 0xc1, 0xe8, 0x0b, 0x05, 0x0a,
+ 0x1d, 0xbf, 0x57, 0xb8, 0xc4, 0xb4, 0xcc, 0x2c, 0x36, 0xda, 0x2a, 0x9e, 0x46,
+ 0x05, 0x18, 0xe3, 0x0d, 0x18, 0x03, 0x0f, 0xe6, 0x05, 0xe3, 0xd9, 0xd0, 0x2a,
+ 0xf6, 0x4c, 0x45, 0xe3, 0x25, 0xec, 0xfa, 0x18, 0xef, 0xfb, 0x9f, 0x10, 0xf5,
+ 0xfc, 0xd6, 0x08, 0x1e, 0x1b, 0xdf, 0x5a, 0x29, 0xf6, 0xe8, 0xfd, 0x3a, 0xfd,
+ 0x13, 0x0d, 0xfa, 0xa6, 0xf4, 0x32, 0x5a, 0xd4, 0xfa, 0xf9, 0xbe, 0xa4, 0x17,
+ 0xae, 0xa6, 0xe7, 0x0c, 0xe7, 0x02, 0x75, 0x05, 0x13, 0xc6, 0x48, 0x42, 0xb6,
+ 0xf0, 0x10, 0xd3, 0x81, 0xd5, 0xd4, 0xc7, 0x09, 0xea, 0x02, 0x6a, 0xd7, 0xdd,
+ 0xff, 0x2f, 0x17, 0x00, 0x34, 0xfd, 0xfc, 0x0b, 0xf5, 0x1d, 0xf0, 0x7e, 0xf6,
+ 0xfc, 0xa9, 0xf6, 0x1e, 0x39, 0x3e, 0x05, 0xd6, 0xfe, 0xf1, 0x62, 0x56, 0xba,
+ 0x79, 0x58, 0x11, 0x07, 0x05, 0x08, 0x14, 0xd8, 0x24, 0xe0, 0xe6, 0x2c, 0x5f,
+ 0x18, 0x26, 0x3a, 0x24, 0x0f, 0x4c, 0x5e, 0x5a, 0xb0, 0x31, 0x32, 0x24, 0xb8,
+ 0x11, 0xba, 0x12, 0x26, 0xc2, 0x3a, 0x11, 0x36, 0xea, 0xfd, 0x21, 0xca, 0xe6,
+ 0x14, 0x0b, 0xe7, 0x37, 0x4d, 0x05, 0x00, 0xea, 0xbb, 0xd5, 0xfc, 0xdb, 0x27,
+ 0x24, 0xbc, 0xf5, 0xfd, 0x12, 0xef, 0x0b, 0x59, 0xff, 0xdf, 0x03, 0xf0, 0x14,
+ 0x9e, 0x08, 0x1e, 0xcf, 0xf4, 0x10, 0xdf, 0xd0, 0xc2, 0x8d, 0x29, 0x2e, 0x1b,
+ 0xf1, 0xdb, 0xee, 0x46, 0xf3, 0x0f, 0xfc, 0xf4, 0xe7, 0xe6, 0x11, 0x9a, 0x2c,
+ 0xd1, 0xf3, 0xe3, 0xd3, 0x29, 0x16, 0x05, 0x00, 0xed, 0x75, 0xbb, 0x50, 0x4c,
+ 0x31, 0x2b, 0x67, 0xd7, 0xd8, 0xd0, 0xe5, 0x0e, 0x00, 0x08, 0xea, 0x7f, 0xb1,
+ 0xc8, 0x0f, 0xfa, 0xf0, 0x12, 0x2b, 0xfe, 0x7f, 0xe1, 0x29, 0x0a, 0x2f, 0x18,
+ 0xe1, 0xf3, 0xd3, 0x0f, 0x12, 0x08, 0x1d, 0xf4, 0x10, 0x1c, 0xfd, 0x16, 0xc9,
+ 0x11, 0xa5, 0x1f, 0xce, 0xbd, 0x11, 0xc4, 0xec, 0xeb, 0x09, 0x09, 0x24, 0xdd,
+ 0x72, 0xf2, 0xf2, 0x30, 0xea, 0x5a, 0x17, 0x17, 0x18, 0x61, 0xd3, 0x21, 0xe0,
+ 0xe8, 0xd0, 0x47, 0xf1, 0x2b, 0xb4, 0x2d, 0xf2, 0xf0, 0xcf, 0xcc, 0x34, 0xe2,
+ 0xf7, 0xf8, 0xdc, 0xc5, 0xe7, 0xd1, 0xed, 0x27, 0x2c, 0xa2, 0x0a, 0x6c, 0x51,
+ 0x0f, 0x48, 0x1b, 0x15, 0x06, 0xc6, 0xce, 0x0f, 0x1b, 0xdb, 0x1c, 0x49, 0x07,
+ 0xde, 0x16, 0xfb, 0x21, 0x29, 0xec, 0xf1, 0x2c, 0x4c, 0x18, 0xef, 0xe4, 0x01,
+ 0xdf, 0xfa, 0x29, 0x1b, 0x43, 0x12, 0xde, 0xd0, 0x06, 0x49, 0x42, 0x2a, 0x21,
+ 0x14, 0x01, 0x19, 0xf5, 0xf6, 0xe1, 0x1f, 0xc2, 0xfa, 0xcd, 0xe0, 0xf1, 0x3e,
+ 0xe4, 0x4f, 0x56, 0xcb, 0xc2, 0x0d, 0x79, 0x2d, 0x04, 0x32, 0xf3, 0x0d, 0xe2,
+ 0xb3, 0xf2, 0xab, 0x29, 0x06, 0xe8, 0x0a, 0xdf, 0xc3, 0x10, 0x1d, 0x26, 0xb1,
+ 0x17, 0x08, 0x13, 0xfc, 0x03, 0x30, 0x33, 0x2e, 0x0a, 0x24, 0xcf, 0x05, 0x36,
+ 0x00, 0xea, 0x04, 0xcf, 0x44, 0x21, 0x06, 0x6e, 0xd2, 0xd3, 0xe2, 0xc3, 0x2c,
+ 0x3c, 0x20, 0x0e, 0x26, 0xb2, 0xbd, 0xf4, 0xfa, 0xe7, 0xc8, 0xbe, 0x15, 0xf1,
+ 0xc0, 0x3e, 0xe4, 0x0f, 0x6d, 0xdf, 0x1a, 0xe7, 0x0a, 0x3f, 0x22, 0x43, 0x3d,
+ 0xd1, 0x02, 0x4d, 0xf5, 0xcb, 0x7f, 0x32, 0x43, 0x0e, 0xeb, 0xd6, 0xf1, 0xb5,
+ 0xf6, 0x2b, 0x02, 0x10, 0x14, 0xef, 0x01, 0xf7, 0x62, 0xec, 0x07, 0x05, 0x62,
+ 0xad, 0x1c, 0xee, 0xea, 0x2e, 0xed, 0x1e, 0xfa, 0x37, 0xfc, 0x40, 0x0c, 0xfb,
+ 0x26, 0xf5, 0x0e, 0xa6, 0x07, 0x5a, 0x19, 0x0e, 0xd7, 0x42, 0xd0, 0xe4, 0xe3,
+ 0x31, 0xc0, 0x21, 0xe4, 0x29, 0xac, 0xdc, 0xf8, 0xee, 0xbe, 0xd7, 0x37, 0xdc,
+ 0x47, 0xed, 0xfe, 0x20, 0xcc, 0xc6, 0x7f, 0x09, 0xed, 0x08, 0xcb, 0x16, 0xf7,
+ 0xdf, 0xd8, 0xfa, 0x21, 0x28, 0x3f, 0xc1, 0x95, 0x02, 0xcd, 0xd9, 0xf7, 0xa8,
+ 0xe6, 0xb9, 0x01, 0xce, 0xe2, 0x06, 0x19, 0x14, 0x31, 0x45, 0x23, 0xe1, 0xd1,
+ 0x0b, 0xec, 0xed, 0xeb, 0xbe, 0xc6, 0xba, 0xd1, 0xf3, 0xfe, 0x08, 0xf6, 0x3b,
+ 0x1a, 0xcc, 0xa5, 0xc6, 0x0e, 0x38, 0xd1, 0x00, 0xd5, 0xd6, 0x0e, 0x13, 0xd2,
+ 0x20, 0x4a, 0xad, 0x1b, 0xb9, 0x4d, 0xe7, 0x0d, 0xf7, 0x13, 0x67, 0xb4, 0xf8,
+ 0xf3, 0x39, 0x48, 0xf4, 0xf9, 0xe2, 0xe1, 0x22, 0x42, 0x2f, 0x11, 0x37, 0xc8,
+ 0x01, 0x17, 0xd1, 0xc6, 0x00, 0xc8, 0x29, 0x00, 0x2c, 0xa5, 0xce, 0xd7, 0x66,
+ 0x2b, 0x00, 0xb7, 0xf8, 0x03, 0x2f, 0x3b, 0x16, 0xf7, 0xf9, 0xf8, 0x49, 0x17,
+ 0x19, 0xda, 0x08, 0xf3, 0x04, 0xf6, 0x28, 0x15, 0x16, 0x03, 0x0a, 0xf3, 0x04,
+ 0x30, 0x51, 0x2f, 0xfa, 0xe0, 0xfa, 0x31, 0x10, 0xde, 0xea, 0xe8, 0x1e, 0x27,
+ 0x6d, 0xde, 0x11, 0x0f, 0x2e, 0xef, 0xd7, 0x2a, 0x0b, 0x5b, 0x18, 0x3f, 0xfb,
+ 0xd9, 0x49, 0x1d, 0x10, 0xeb, 0x0a, 0x38, 0xfe, 0x34, 0x27, 0x30, 0x20, 0x07,
+ 0xf5, 0x29, 0x0c, 0x18, 0x23, 0x1d, 0xd7, 0xec, 0x07, 0xff, 0x05, 0xfc, 0x10,
+ 0xec, 0x56, 0xfd, 0xd8, 0xef, 0xe8, 0x56, 0x29, 0x4c, 0xed, 0x11, 0xcb, 0x04,
+ 0xdf, 0x1f, 0x32, 0xec, 0xf9, 0xe4, 0xc8, 0x0b, 0xf8, 0x23, 0xed, 0x16, 0xf1,
+ 0x19, 0x17, 0xe3, 0xeb, 0x0e, 0xf3, 0x18, 0xd3, 0x04, 0x19, 0xed, 0xd3, 0x32,
+ 0x37, 0x0b, 0xba, 0x7f, 0x3d, 0x3e, 0x3c, 0x2d, 0x70, 0xd6, 0x04, 0x07, 0xfb,
+ 0xf5, 0xe8, 0x24, 0x4c, 0x60, 0x27, 0xe2, 0xd5, 0xe5, 0xf5, 0xcd, 0x15, 0xc4,
+ 0xd9, 0xeb, 0x08, 0x0f, 0xe5, 0xc2, 0xf1, 0x36, 0xd3, 0x0e, 0x2b, 0xe0, 0xdb,
+ 0xed, 0xd2, 0x4b, 0xc7, 0x02, 0xce, 0xfa, 0x55, 0x0f, 0x14, 0xf2, 0xf7, 0x1b,
+ 0x51, 0xeb, 0x31, 0x9f, 0x3e, 0xcb, 0xed, 0xa2, 0xfb, 0x16, 0xea, 0x33, 0xf3,
+ 0xd2, 0xf9, 0x4c, 0xdf, 0x28, 0x06, 0x47, 0xa5, 0x1e, 0x17, 0x30, 0xd7, 0x07,
+ 0x07, 0x02, 0xf0, 0xdf, 0x33, 0xf4, 0x1c, 0x2d, 0xe3, 0xd7, 0x06, 0xed, 0x12,
+ 0x01, 0xee, 0xc4, 0xba, 0xbf, 0xe2, 0xc6, 0x19, 0x04, 0x0c, 0x47, 0xf3, 0xf5,
+ 0xe0, 0x7f, 0xd7, 0x2a, 0x0d, 0xee, 0xb7, 0xe5, 0xd3, 0xc2, 0x1b, 0x0b, 0x0e,
+ 0x05, 0xc7, 0x30, 0x42, 0x02, 0x5b, 0x03, 0xd0, 0xe0, 0xd0, 0xf9, 0xe5, 0xf8,
+ 0xe1, 0x0f, 0x3e, 0xfa, 0x08, 0x0c, 0xe6, 0x03, 0xdd, 0x11, 0x1e, 0x0b, 0x11,
+ 0x41, 0x10, 0x15, 0xa3, 0xfb, 0xf3, 0xe1, 0xc3, 0x05, 0x23, 0xef, 0x17, 0x17,
+ 0x0b, 0x12, 0x19, 0xf3, 0x2f, 0xda, 0xec, 0xed, 0xf5, 0xc7, 0xe8, 0x4d, 0x0b,
+ 0x6d, 0x07, 0xf8, 0x00, 0x1c, 0x2c, 0xf7, 0x1a, 0xff, 0xdc, 0xf0, 0x42, 0x00,
+ 0xee, 0xd0, 0xeb, 0xfe, 0x13, 0xee, 0x4a, 0xf1, 0xe0, 0x07, 0x25, 0xda, 0xd8,
+ 0x12, 0xf0, 0xff, 0xe2, 0xdc, 0x22, 0xb3, 0x7f, 0x18, 0x05, 0xec, 0xe5, 0xe9,
+ 0xd8, 0xcd, 0x13, 0xd3, 0x0d, 0x01, 0xd7, 0x52, 0xfa, 0xc0, 0xf1, 0xf1, 0xe3,
+ 0xef, 0x03, 0x19, 0x09, 0xd9, 0xfc, 0x0b, 0xce, 0xdb, 0x21, 0x2e, 0x10, 0xf1,
+ 0xe8, 0xd8, 0xf3, 0x1a, 0x41, 0xd2, 0x0c, 0xeb, 0x21, 0x39, 0x14, 0x00, 0xfa,
+ 0xf2, 0x3a, 0x0d, 0xf9, 0x02, 0xb3, 0x04, 0x47, 0xfc, 0xd5, 0x2b, 0xe0, 0x1a,
+ 0xd2, 0x25, 0xf9, 0xcc, 0x1f, 0x07, 0xe5, 0x28, 0xe4, 0xfb, 0x06, 0x0e, 0x03,
+ 0x08, 0xfb, 0xf8, 0xed, 0x01, 0xc5, 0xea, 0x1f, 0x03, 0x19, 0x00, 0x11, 0x62,
+ 0x23, 0x4e, 0xff, 0x06, 0xc2, 0x36, 0x0f, 0xef, 0xee, 0x24, 0x49, 0xf4, 0xef,
+ 0xd3, 0x05, 0xd2, 0x10, 0x06, 0xdb, 0x3e, 0x1b, 0x03, 0x01, 0xfe, 0x13, 0x0c,
+ 0x01, 0x7a, 0x23, 0xf5, 0x60, 0x34, 0xc2, 0xfa, 0xfa, 0x0c, 0x44, 0x02, 0x2d,
+ 0xe0, 0x14, 0xe8, 0x2d, 0xd8, 0xee, 0xde, 0x1e, 0x06, 0xf4, 0xf5, 0xef, 0xf5,
+ 0xee, 0xfc, 0xf4, 0xde, 0xb7, 0xed, 0x2d, 0x11, 0x0f, 0x31, 0x02, 0xb8, 0xb7,
+ 0x7f, 0xe6, 0x2b, 0xec, 0x44, 0x0f, 0x01, 0xe8, 0x12, 0xf8, 0x0a, 0xcb, 0x3a,
+ 0x04, 0x03, 0x13, 0xeb, 0xf2, 0x1f, 0x35, 0xf6, 0xfa, 0x0f, 0x37, 0x26, 0xd2,
+ 0xf3, 0x24, 0xeb, 0x03, 0xfa, 0x14, 0xeb, 0x22, 0x38, 0xe7, 0xed, 0xd3, 0xe0,
+ 0xfa, 0x07, 0x22, 0x11, 0xdb, 0x0c, 0xf4, 0x22, 0xec, 0x32, 0x06, 0xfd, 0xe4,
+ 0x42, 0x01, 0xfa, 0x25, 0x1a, 0x0c, 0x04, 0x19, 0x33, 0xdf, 0x01, 0xe3, 0xd4,
+ 0xe1, 0x1b, 0x2c, 0x18, 0xdf, 0xbc, 0xcc, 0x06, 0xdf, 0x7c, 0x12, 0x18, 0xd6,
+ 0xc7, 0xee, 0xd0, 0x0e, 0xea, 0x06, 0xb1, 0xda, 0x1a, 0xf9, 0x94, 0xe6, 0xfe,
+ 0x05, 0xd0, 0xe3, 0xcc, 0xbb, 0xf2, 0xca, 0xe6, 0x27, 0xf8, 0xd7, 0x04, 0xe2,
+ 0xbc, 0x7f, 0xe3, 0xfe, 0x5a, 0xea, 0xc6, 0xc3, 0xe4, 0xc3, 0xf0, 0x16, 0xe5,
+ 0xf2, 0x19, 0xeb, 0x0c, 0x06, 0xaf, 0xf3, 0x06, 0x16, 0xe5, 0xf9, 0xd2, 0x08,
+ 0x10, 0x0b, 0x18, 0x03, 0xec, 0xd7, 0x27, 0xe0, 0xc6, 0xea, 0x40, 0x08, 0x3e,
+ 0x46, 0xa8, 0xff, 0x4b, 0x65, 0x70, 0xfc, 0x3d, 0x03, 0x04, 0x67, 0x08, 0x19,
+ 0xdc, 0xe1, 0xeb, 0x11, 0x12, 0xf2, 0x32, 0xf1, 0xfb, 0xdb, 0x0c, 0xd2, 0x16,
+ 0x85, 0xcf, 0xef, 0x2b, 0x09, 0xdf, 0x75, 0xce, 0x14, 0x73, 0xeb, 0xe8, 0x47,
+ 0xee, 0x2b, 0x11, 0xab, 0x3b, 0xef, 0x37, 0xed, 0x10, 0x06, 0xb2, 0xdd, 0xa3,
+ 0xb6, 0x3f, 0xfc, 0x34, 0x5e, 0x3d, 0xe9, 0x43, 0xf9, 0x03, 0x21, 0xee, 0xd0,
+ 0xfb, 0xf5, 0x23, 0x06, 0x45, 0xfc, 0xff, 0xc9, 0x25, 0xa2, 0x6d, 0xfb, 0xdc,
+ 0x11, 0x25, 0x07, 0x18, 0x58, 0x2e, 0x1d, 0xfa, 0x00, 0xe2, 0x28, 0xf8, 0xdb,
+ 0xc4, 0x12, 0xeb, 0xbf, 0xed, 0xc8, 0xf3, 0xdf, 0xa9, 0xc0, 0xf1, 0x10, 0xce,
+ 0x01, 0xc5, 0x0c, 0xd2, 0x0f, 0xf9, 0xb8, 0x1f, 0x3d, 0x52, 0x1c, 0x4a, 0xee,
+ 0x12, 0xe4, 0xef, 0xd7, 0xe0, 0x23, 0xd7, 0x47, 0x05, 0xf6, 0xc3, 0xfd, 0xfc,
+ 0xf7, 0x7f, 0xfa, 0x1d, 0xe6, 0x04, 0xdd, 0x02, 0xe2, 0x81, 0xca, 0x0f, 0xd0,
+ 0x2a, 0xca, 0xe7, 0x21, 0xf9, 0x1a, 0x57, 0x1d, 0x1b, 0xf8, 0x2f, 0x2d, 0xba,
+ 0xc8, 0xc7, 0xf1, 0x22, 0x20, 0x10, 0x30, 0x3e, 0xfd, 0x33, 0x16, 0x13, 0xcf,
+ 0xe6, 0x21, 0x1b, 0xe3, 0xf0, 0x07, 0x5c, 0xfe, 0x3a, 0x3d, 0x20, 0xbc, 0x44,
+ 0xf8, 0x09, 0xe8, 0xf8, 0xf5, 0x3b, 0x12, 0xea, 0x1c, 0xf2, 0x13, 0x5a, 0xf0,
+ 0xfb, 0x18, 0x13, 0xc8, 0x21, 0x31, 0xe7, 0x4b, 0x25, 0xb7, 0x5b, 0x52, 0x18,
+ 0x2a, 0xd9, 0x17, 0x17, 0x29, 0x33, 0x19, 0x0f, 0x0c, 0xd3, 0x27, 0xf3, 0x27,
+ 0xf7, 0xe7, 0xdb, 0x18, 0x05, 0x04, 0x17, 0x36, 0x28, 0xf0, 0xe8, 0xcc, 0xef,
+ 0x22, 0x44, 0xe4, 0x4c, 0x15, 0xfe, 0x02, 0x4b, 0xd9, 0x33, 0x1f, 0xe8, 0xd2,
+ 0x26, 0x29, 0x22, 0xfe, 0x7f, 0x0e, 0x32, 0xfc, 0x15, 0xf5, 0x1c, 0x10, 0x4b,
+ 0x04, 0x10, 0x3a, 0xed, 0x24, 0x31, 0xf6, 0x1a, 0x15, 0x48, 0x59, 0x0f, 0x01,
+ 0x08, 0xed, 0x33, 0x0a, 0x1f, 0x15, 0xfd, 0xe4, 0xde, 0xed, 0xfe, 0x12, 0x14,
+ 0x0b, 0x18, 0x09, 0x47, 0x11, 0x0a, 0xd9, 0x01, 0xb6, 0xf9, 0x10, 0x23, 0x00,
+ 0x70, 0x01, 0xfc, 0xe6, 0xec, 0xf7, 0xad, 0x19, 0x47, 0x3d, 0x27, 0x06, 0xe6,
+ 0xf7, 0x02, 0x1a, 0x16, 0xd4, 0x36, 0x03, 0xcf, 0xe7, 0x4a, 0x0f, 0xd5, 0x0d,
+ 0x02, 0x25, 0x96, 0x3f, 0x0b, 0xe6, 0xcd, 0x2f, 0x40, 0xce, 0x02, 0xdf, 0xe6,
+ 0xc0, 0x0e, 0x1e, 0x3e, 0x10, 0x39, 0xed, 0xef, 0x32, 0xed, 0xb3, 0xe2, 0xfa,
+ 0xd0, 0xf9, 0x0b, 0xf8, 0xfc, 0x07, 0x65, 0x18, 0x0a, 0x49, 0x38, 0x00, 0xe8,
+ 0x34, 0xe4, 0x06, 0x0d, 0xab, 0xa7, 0xd2, 0x14, 0xfd, 0xdd, 0x06, 0x10, 0x2b,
+ 0xd2, 0x52, 0x7f, 0xfc, 0xeb, 0xdf, 0x29, 0xc1, 0xf0, 0xdb, 0x05, 0xe2, 0xdc,
+ 0x24, 0x0e, 0xe3, 0x16, 0x3d, 0xf3, 0xee, 0x0e, 0xf8, 0xea, 0xd1, 0xea, 0x26,
+ 0x74, 0x1a, 0x3d, 0x1c, 0xd4, 0xb0, 0xf4, 0x09, 0xf5, 0xe7, 0x03, 0xf6, 0xcb,
+ 0xe5, 0xe6, 0xbf, 0x1d, 0xd1, 0xfd, 0x08, 0xd9, 0x3b, 0xfb, 0xff, 0x1a, 0x00,
+ 0x0a, 0x00, 0x7a, 0x3b, 0xf1, 0x3a, 0x01, 0xa7, 0xf7, 0x08, 0x22, 0xff, 0xf9,
+ 0x00, 0xe5, 0x13, 0xf0, 0x35, 0x07, 0x18, 0x50, 0x81, 0x0d, 0x45, 0x08, 0xb0,
+ 0x2b, 0xdc, 0xc0, 0x34, 0x03, 0x04, 0x6e, 0x38, 0x9d, 0xf5, 0x1a, 0x3c, 0xf0,
+ 0x26, 0x36, 0x15, 0xf2, 0x0d, 0xd6, 0xf9, 0x39, 0x2d, 0x04, 0xe9, 0xea, 0x14,
+ 0x15, 0xd2, 0x3b, 0x14, 0x69, 0xee, 0x1b, 0xe4, 0x23, 0x4f, 0x1f, 0xd6, 0x36,
+ 0xf1, 0xee, 0xc7, 0x2c, 0xda, 0xc1, 0x03, 0xd5, 0xb3, 0x15, 0x19, 0x59, 0xed,
+ 0x51, 0x05, 0x0b, 0xf7, 0xf9, 0x05, 0x08, 0xe4, 0x14, 0x31, 0x06, 0x22, 0x10,
+ 0x14, 0x44, 0xc1, 0xdc, 0x1a, 0xc0, 0x0a, 0x0a, 0x06, 0x19, 0xfb, 0x08, 0x08,
+ 0x05, 0x34, 0xfb, 0xe8, 0xfb, 0x06, 0x20, 0xee, 0x3a, 0x0f, 0x10, 0xed, 0x2b,
+ 0x14, 0x00, 0xd7, 0xfb, 0xfb, 0xd8, 0x04, 0xe2, 0xfc, 0xfb, 0xff, 0xeb, 0xf3,
+ 0x13, 0x1b, 0xfa, 0x09, 0x18, 0xb3, 0xf5, 0xf0, 0x14, 0x04, 0xff, 0xea, 0xef,
+ 0x03, 0xf2, 0x1c, 0xfa, 0xfb, 0x23, 0xce, 0xf6, 0xfd, 0x18, 0xe5, 0x25, 0xf5,
+ 0xee, 0x11, 0x05, 0xf8, 0x20, 0x04, 0x07, 0xef, 0x02, 0x22, 0xed, 0x04, 0x13,
+ 0xfb, 0x0a, 0xee, 0x07, 0xf4, 0x09, 0x18, 0xf6, 0xe9, 0x03, 0x05, 0xfc, 0xe5,
+ 0xd3, 0x04, 0x26, 0x02, 0x13, 0x25, 0x1e, 0xf8, 0x0d, 0xf9, 0x29, 0xea, 0xeb,
+ 0xf2, 0x33, 0xd2, 0xeb, 0x0e, 0x15, 0xee, 0x08, 0x0f, 0x3d, 0x1b, 0x7f, 0x03,
+ 0x05, 0xee, 0x23, 0xfa, 0xfb, 0x17, 0x06, 0x1f, 0x23, 0x06, 0x0e, 0xf5, 0x1a,
+ 0xfd, 0xfe, 0x08, 0x0c, 0xfc, 0x17, 0x19, 0x0f, 0xed, 0x06, 0x07, 0xde, 0x27,
+ 0xec, 0x00, 0xe8, 0x2d, 0x12, 0x13, 0xfd, 0x12, 0x09, 0xf2, 0x04, 0xd4, 0x0c,
+ 0xf9, 0x19, 0xca, 0xe8, 0x1f, 0xe7, 0x21, 0xe7, 0x09, 0x05, 0xf5, 0x1d, 0x00,
+ 0xfd, 0xec, 0x01, 0xe6, 0xf3, 0xf6, 0x26, 0xb6, 0xe9, 0xec, 0xf9, 0xee, 0xf1,
+ 0xe6, 0x01, 0xda, 0xda, 0xfd, 0xf6, 0xdb, 0x09, 0xf2, 0x0a, 0x1d, 0xef, 0xf6,
+ 0xdc, 0x27, 0x00, 0x09, 0xb8, 0xb7, 0xf5, 0xba, 0xdf, 0x18, 0xfd, 0xba, 0x0f,
+ 0x42, 0xdb, 0xff, 0xf9, 0xfc, 0x3a, 0x57, 0x06, 0x00, 0xfb, 0x1d, 0x81, 0x13,
+ 0x50, 0x32, 0x2c, 0x43, 0x09, 0x02, 0x17, 0x19, 0x0c, 0x1d, 0x28, 0xe9, 0xb2,
+ 0x32, 0xfb, 0xf4, 0x19, 0xfe, 0xd5, 0xe9, 0x20, 0xbd, 0x07, 0xd0, 0xbc, 0xa9,
+ 0x06, 0x03, 0xc2, 0xe2, 0xca, 0x27, 0xdb, 0xe5, 0x23, 0x3d, 0x13, 0xf6, 0xec,
+ 0xc6, 0x06, 0x0e, 0x21, 0x24, 0xef, 0xed, 0xad, 0x35, 0xc7, 0x1c, 0x15, 0x12,
+ 0x9e, 0xb8, 0xf0, 0xfb, 0x07, 0xe7, 0x07, 0x21, 0xfd, 0x10, 0x23, 0x15, 0x10,
+ 0x02, 0x28, 0xf2, 0xb0, 0x0d, 0xe1, 0xa9, 0xe7, 0xf9, 0x60, 0x28, 0x77, 0xb4,
+ 0xfe, 0xf5, 0x16, 0xf9, 0xed, 0xba, 0xd2, 0x46, 0x00, 0xfc, 0xef, 0x71, 0xca,
+ 0xe9, 0x0d, 0xf3, 0x1f, 0xed, 0x1a, 0x8c, 0xcc, 0x13, 0x2c, 0xb4, 0x4b, 0x0d,
+ 0xca, 0x3c, 0x38, 0xf2, 0xe3, 0x3b, 0x05, 0xf4, 0x1b, 0xd6, 0xef, 0xd5, 0x22,
+ 0x40, 0x0b, 0xf2, 0xeb, 0x24, 0xde, 0xc9, 0x0a, 0x22, 0xe8, 0xf6, 0x1a, 0x48,
+ 0x07, 0xfd, 0xe0, 0x33, 0x44, 0xd9, 0x3e, 0x10, 0xf8, 0x81, 0x0f, 0xc8, 0x09,
+ 0xe2, 0x1b, 0x97, 0xe5, 0xe1, 0x6a, 0xea, 0xce, 0x21, 0xed, 0xef, 0xd7, 0x08,
+ 0xf5, 0x46, 0xf5, 0x26, 0x17, 0xd2, 0xf2, 0x11, 0xfd, 0xec, 0x23, 0xfb, 0x3b,
+ 0xa3, 0x51, 0x03, 0x0a, 0x02, 0x05, 0x02, 0xe2, 0xd9, 0x31, 0x77, 0x20, 0x47,
+ 0xe5, 0xfa, 0x00, 0xfa, 0x21, 0xd8, 0x67, 0x27, 0x2f, 0x06, 0x5c, 0x02, 0x03,
+ 0x9d, 0x3f, 0x19, 0xd8, 0xde, 0x04, 0x37, 0xcb, 0x14, 0x15, 0x33, 0x08, 0x20,
+ 0x29, 0x4e, 0xc9, 0xe5, 0xf3, 0x5c, 0xba, 0x1e, 0xf9, 0xd9, 0x00, 0xed, 0x29,
+ 0x27, 0xb2, 0xe2, 0xc1, 0x43, 0x14, 0xf2, 0xcf, 0x00, 0xf6, 0x37, 0x47, 0x28,
+ 0x06, 0x17, 0x03, 0x0b, 0x22, 0x48, 0x11, 0xb2, 0x44, 0x1f, 0x3e, 0xe4, 0x9f,
+ 0x69, 0xf5, 0xfb, 0xe7, 0x3a, 0xce, 0x0b, 0xdc, 0xd5, 0x2c, 0xda, 0xbd, 0x50,
+ 0x1b, 0xb1, 0x50, 0x01, 0xc6, 0x03, 0x01, 0x14, 0x55, 0x27, 0x37, 0xc7, 0x0b,
+ 0x2c, 0xb1, 0xdb, 0x0e, 0xb9, 0x1c, 0x25, 0x8e, 0x00, 0xf2, 0x10, 0xdc, 0x1b,
+ 0x40, 0x03, 0x04, 0xd6, 0xff, 0xec, 0x26, 0x09, 0xbd, 0xca, 0xf2, 0xee, 0xeb,
+ 0x1c, 0xe8, 0xab, 0x81, 0x07, 0x20, 0x15, 0x39, 0xb8, 0x0a, 0xe5, 0xdb, 0xf3,
+ 0x03, 0xe6, 0x06, 0x07, 0xfc, 0xdf, 0x30, 0x1a, 0x32, 0x0b, 0xd2, 0x22, 0xe0,
+ 0x9d, 0xae, 0x21, 0x33, 0xc7, 0x7d, 0x38, 0x13, 0xc2, 0xdc, 0x27, 0x09, 0xb5,
+ 0xfe, 0xfe, 0x1a, 0x29, 0x0c, 0xe0, 0xf7, 0x79, 0xf9, 0x04, 0x30, 0xec, 0x5a,
+ 0xb5, 0x3a, 0x28, 0xf0, 0xe1, 0x2d, 0xba, 0x1a, 0x3d, 0xdd, 0x50, 0x5d, 0xb9,
+ 0xd7, 0x57, 0x1e, 0x07, 0xbc, 0x4b, 0xdc, 0xe3, 0xb1, 0xf0, 0xd9, 0xf4, 0x1b,
+ 0x69, 0xe9, 0xdf, 0xf4, 0xe0, 0xe1, 0xd2, 0xcf, 0xec, 0x01, 0xfa, 0xde, 0x5a,
+ 0xdd, 0xdf, 0x54, 0xcb, 0xf6, 0x81, 0x46, 0xef, 0x39, 0x0e, 0x1a, 0xe3, 0x0c,
+ 0x2e, 0x09, 0xe3, 0xd7, 0x04, 0xa0, 0xe7, 0xe1, 0x32, 0xfa, 0x02, 0x00, 0x0d,
+ 0xef, 0xaa, 0x20, 0xf3, 0xfd, 0xe5, 0xf2, 0xe6, 0x48, 0xc0, 0xfc, 0xf4, 0x34,
+ 0xfd, 0xd0, 0x28, 0x12, 0xf5, 0x32, 0x13, 0x35, 0xf0, 0xd3, 0xd5, 0x0a, 0xdb,
+ 0x19, 0x36, 0x4a, 0x50, 0x58, 0xcf, 0x37, 0x1f, 0x3e, 0xda, 0x32, 0xef, 0xcb,
+ 0x4d, 0xce, 0xfc, 0x2f, 0x19, 0xf1, 0xfe, 0xdb, 0x1d, 0x28, 0x1f, 0xfb, 0x4d,
+ 0xdd, 0xde, 0xc2, 0x3a, 0x0b, 0xf5, 0xb3, 0xe0, 0x68, 0x33, 0x09, 0xd7, 0x11,
+ 0xeb, 0x3e, 0xb6, 0x39, 0x2c, 0x1d, 0xfe, 0xd5, 0x30, 0xde, 0xe1, 0xc3, 0x0e,
+ 0xec, 0x1c, 0x64, 0x32, 0xf4, 0x41, 0x2f, 0xee, 0xcb, 0xfe, 0x31, 0x2e, 0xd1,
+ 0x9e, 0x89, 0xb2, 0x2d, 0x13, 0x17, 0x24, 0xf9, 0xdf, 0xec, 0x0b, 0x3a, 0x6f,
+ 0x2c, 0xd1, 0x0f, 0xf7, 0x00, 0xea, 0xc7, 0xf3, 0xe6, 0x6c, 0x2d, 0xb9, 0xc6,
+ 0x26, 0x7f, 0x25, 0x91, 0x07, 0xce, 0xf1, 0xa8, 0xed, 0x7c, 0x09, 0xc6, 0x01,
+ 0x4b, 0x0c, 0xdc, 0xd4, 0x69, 0x15, 0x0b, 0xdf, 0xf9, 0x2b, 0x0d, 0x62, 0x0a,
+ 0xc7, 0xf6, 0x28, 0x14, 0xaa, 0xef, 0xb6, 0xef, 0x26, 0xc0, 0xa4, 0x2b, 0xf3,
+ 0x15, 0xf2, 0x37, 0x1e, 0xdb, 0xc3, 0x34, 0xb6, 0x34, 0x38, 0xf6, 0xe5, 0xf6,
+ 0x26, 0xd2, 0xe4, 0x1b, 0x4b, 0x3a, 0xb5, 0x15, 0x2b, 0xeb, 0xb6, 0xba, 0x31,
+ 0xc4, 0x36, 0xfa, 0xdd, 0xec, 0x60, 0xdd, 0x7f, 0xb5, 0x2e, 0xe8, 0x6c, 0xfc,
+ 0x23, 0x0d, 0x07, 0xd2, 0x14, 0x62, 0xd2, 0x12, 0x36, 0x03, 0x10, 0xb7, 0xd4,
+ 0xe7, 0xa9, 0x3b, 0x25, 0xb2, 0xce, 0xd1, 0x9b, 0xc0, 0xe5, 0xdb, 0x1d, 0x24,
+ 0xb3, 0x5b, 0xec, 0x2b, 0x1e, 0x59, 0x35, 0x54, 0xef, 0xef, 0x20, 0x06, 0x70,
+ 0x20, 0xc7, 0xc5, 0xb7, 0xee, 0x3b, 0xe5, 0x1d, 0x46, 0xe6, 0xde, 0xfb, 0xf5,
+ 0xb5, 0x19, 0x34, 0x07, 0xe5, 0xfa, 0x18, 0xfa, 0x13, 0xa9, 0x33, 0xb6, 0xfa,
+ 0x08, 0xdd, 0x0d, 0x22, 0x8e, 0x57, 0xcd, 0x07, 0xd9, 0xec, 0x48, 0xe0, 0xd5,
+ 0x04, 0xf8, 0xc6, 0xd2, 0xd7, 0xf8, 0x08, 0xf1, 0x48, 0xac, 0x3e, 0x1f, 0x1d,
+ 0xe7, 0xc9, 0xc5, 0xd9, 0x38, 0x4a, 0xc6, 0x2d, 0x35, 0x3e, 0x1a, 0x1b, 0xf6,
+ 0x2d, 0xd1, 0x08, 0xe3, 0xa9, 0xc3, 0x2a, 0x6a, 0x17, 0xfd, 0xd9, 0xdb, 0x23,
+ 0xda, 0xde, 0x1d, 0x1d, 0x06, 0xf5, 0xaa, 0x85, 0xf3, 0x07, 0x30, 0xfb, 0x04,
+ 0xde, 0xe3, 0x51, 0xea, 0x0d, 0xfc, 0x17, 0x1e, 0x18, 0xd0, 0xdc, 0x28, 0x00,
+ 0x16, 0x1d, 0x51, 0x81, 0xd4, 0xc6, 0x22, 0xe0, 0x01, 0x02, 0x15, 0x0f, 0x4a,
+ 0x1e, 0x1e, 0xc4, 0x10, 0x03, 0xf8, 0x19, 0x0d, 0xbd, 0x16, 0x02, 0x1b, 0xf1,
+ 0x4a, 0xe5, 0x97, 0x39, 0x15, 0xcf, 0x25, 0xb8, 0xfa, 0xf0, 0x2c, 0x19, 0x17,
+ 0xd4, 0x03, 0x1c, 0x33, 0xde, 0xf3, 0xdc, 0xe9, 0x0c, 0xe3, 0xeb, 0xd2, 0x22,
+ 0x98, 0x2b, 0xf4, 0xea, 0xd7, 0x11, 0x15, 0xee, 0xd8, 0xf9, 0x0f, 0xfd, 0xd9,
+ 0xfc, 0xed, 0xed, 0x3d, 0xe2, 0xdf, 0xef, 0x2e, 0x24, 0xf8, 0x1d, 0xd6, 0x37,
+ 0x52, 0xd0, 0xa6, 0xea, 0x25, 0x07, 0x7f, 0x47, 0x1c, 0xff, 0x1f, 0x05, 0xfa,
+ 0x4b, 0x1e, 0x44, 0xee, 0x0e, 0x0e, 0xf5, 0xec, 0x1d, 0x10, 0x28, 0xe0, 0x28,
+ 0xe5, 0xe5, 0x38, 0x02, 0x1b, 0xb0, 0x10, 0xd8, 0x15, 0x2b, 0x00, 0xfb, 0xe2,
+ 0x26, 0x3d, 0x35, 0xeb, 0x13, 0x3a, 0x13, 0x02, 0x25, 0x39, 0x33, 0xe7, 0x06,
+ 0x1f, 0xdf, 0x06, 0x2e, 0xf8, 0x25, 0xe5, 0x33, 0xd5, 0xea, 0x17, 0x44, 0xb5,
+ 0xe3, 0xe6, 0xec, 0x67, 0xeb, 0xcd, 0xcf, 0x05, 0x45, 0x15, 0xec, 0xf8, 0x20,
+ 0xf9, 0x0f, 0x55, 0xe1, 0xc3, 0x2b, 0xef, 0xc0, 0x0f, 0xf4, 0x84, 0x0b, 0x04,
+ 0x09, 0xeb, 0xcc, 0xff, 0x40, 0xea, 0x03, 0x5f, 0xeb, 0xee, 0x44, 0xfa, 0xc3,
+ 0xef, 0x42, 0x09, 0xb4, 0xde, 0xde, 0x30, 0x46, 0x13, 0x45, 0xf7, 0x0a, 0x26,
+ 0xfc, 0xba, 0x26, 0xfb, 0x3e, 0x11, 0x1e, 0xfd, 0xc5, 0x54, 0xc1, 0xec, 0x37,
+ 0x08, 0x51, 0xf5, 0x5c, 0xcb, 0x1b, 0xb6, 0x6f, 0x02, 0x1b, 0xdf, 0x2e, 0xf5,
+ 0x1d, 0x18, 0xe7, 0x23, 0x0c, 0xd0, 0xb8, 0x04, 0xf5, 0x0d, 0x0a, 0x03, 0x3d,
+ 0x18, 0xc2, 0x3e, 0x2a, 0x10, 0xf1, 0x1c, 0x43, 0xdb, 0x2f, 0x18, 0x07, 0xfd,
+ 0x1a, 0xf6, 0x01, 0xf1, 0x03, 0xda, 0x1c, 0x69, 0x36, 0x01, 0x05, 0x2a, 0xf3,
+ 0x34, 0x0f, 0x1f, 0x07, 0x47, 0x40, 0xc3, 0x55, 0x08, 0x14, 0x44, 0x27, 0xeb,
+ 0x09, 0x05, 0x22, 0x0d, 0x5a, 0x66, 0x2d, 0x04, 0xa5, 0x23, 0x13, 0xf0, 0xe6,
+ 0xc0, 0x02, 0x7f, 0x1c, 0x54, 0x5a, 0x51, 0xd8, 0xdb, 0xf3, 0x01, 0x26, 0xe9,
+ 0xe6, 0xc6, 0x18, 0x20, 0x2a, 0x13, 0xfe, 0x48, 0x22, 0xf4, 0x4b, 0x07, 0x27,
+ 0xec, 0xd7, 0x0f, 0x4c, 0xd9, 0xff, 0xe1, 0x58, 0xcc, 0xbd, 0x04, 0x57, 0x1d,
+ 0x58, 0x17, 0xf2, 0xea, 0xc8, 0x41, 0x1b, 0x69, 0x41, 0x3a, 0x2c, 0x35, 0x3a,
+ 0xef, 0xe2, 0xeb, 0x07, 0xc2, 0x46, 0xf3, 0x06, 0x27, 0x0d, 0xfe, 0xc9, 0x0b,
+ 0x03, 0xff, 0x02, 0x03, 0xf1, 0xc7, 0x10, 0xe9, 0xc7, 0xe1, 0x03, 0x55, 0x7f,
+ 0xe1, 0xc3, 0x1b, 0x15, 0x05, 0xa2, 0x06, 0xe1, 0xf1, 0xf4, 0xcf, 0x40, 0x07,
+ 0x10, 0x44, 0x13, 0xf1, 0x51, 0xfd, 0x12, 0xfd, 0x24, 0xe2, 0xdb, 0x06, 0x34,
+ 0xd2, 0x2c, 0xd0, 0x1b, 0xc6, 0x1a, 0x0f, 0xce, 0x07, 0xf8, 0xe3, 0x28, 0xd8,
+ 0x11, 0x59, 0xf1, 0x02, 0x19, 0x2a, 0xec, 0xd5, 0xff, 0x59, 0xd3, 0x01, 0x19,
+ 0xf9, 0xfa, 0x15, 0xdc, 0x2a, 0x27, 0xc9, 0x00, 0xdc, 0x1c, 0x06, 0xfc, 0xec,
+ 0x37, 0x0b, 0xcd, 0xe8, 0xf3, 0xf1, 0x24, 0xcc, 0x32, 0x04, 0x05, 0x01, 0x0e,
+ 0x24, 0x03, 0xf1, 0x4a, 0xe9, 0x0e, 0x2c, 0x47, 0xee, 0x94, 0x25, 0x03, 0xfc,
+ 0xde, 0xfb, 0xbc, 0x20, 0xd2, 0xfb, 0x27, 0xdb, 0xf7, 0xfe, 0x0b, 0x11, 0x04,
+ 0x2b, 0xf4, 0x35, 0xef, 0x39, 0x0a, 0x0d, 0xcf, 0x0c, 0x06, 0x34, 0xe1, 0x1a,
+ 0x01, 0x0d, 0x7f, 0x1d, 0x08, 0x0a, 0x46, 0xf8, 0xdd, 0x1c, 0x2c, 0xda, 0x37,
+ 0x08, 0x40, 0xdd, 0x06, 0x21, 0xc6, 0xeb, 0x09, 0x07, 0x26, 0x4f, 0x34, 0x28,
+ 0x2e, 0x17, 0xe2, 0x3b, 0xed, 0xd6, 0xbc, 0xf1, 0x44, 0x1b, 0xe8, 0xe7, 0x0e,
+ 0xeb, 0xe1, 0x24, 0x12, 0x11, 0xed, 0x32, 0xcc, 0xec, 0x12, 0x19, 0xfc, 0x18,
+ 0x01, 0x2d, 0xe5, 0x12, 0xb0, 0x0d, 0xf5, 0xe3, 0xf7, 0x35, 0xe6, 0xf1, 0xf3,
+ 0x26, 0x02, 0xf0, 0x02, 0x33, 0x55, 0xe6, 0x28, 0x3a, 0x0b, 0xf8, 0x0f, 0xf9,
+ 0x1d, 0xce, 0xfd, 0xe1, 0xda, 0xfb, 0x16, 0x04, 0x3a, 0xc8, 0x1b, 0x26, 0x0d,
+ 0x3e, 0xd8, 0x1c, 0x34, 0x0c, 0xf3, 0x0d, 0x5d, 0xf0, 0xfa, 0x05, 0x13, 0xec,
+ 0x0f, 0x05, 0x1c, 0xed, 0xeb, 0x0c, 0xef, 0xfd, 0x10, 0x22, 0xfb, 0xee, 0x1e,
+ 0x3c, 0xfa, 0x32, 0x32, 0x04, 0xea, 0x18, 0xf3, 0x08, 0x07, 0x08, 0x2c, 0x44,
+ 0x40, 0x10, 0x20, 0x13, 0x7f, 0x1a, 0xf6, 0x11, 0x45, 0x16, 0xda, 0x0f, 0x12,
+ 0xf4, 0x09, 0x0c, 0xf6, 0x12, 0xfb, 0xed, 0x18, 0x1d, 0x01, 0xe5, 0x1d, 0xe9,
+ 0xf9, 0xeb, 0xfe, 0x00, 0x00, 0x06, 0x14, 0x11, 0xf1, 0x05, 0x14, 0x05, 0xfb,
+ 0x03, 0xf4, 0x0e, 0xf5, 0xf9, 0xf7, 0xf8, 0xfc, 0xf0, 0x05, 0x0a, 0xe5, 0x1f,
+ 0x03, 0xf3, 0xf9, 0x1b, 0xe1, 0x07, 0x28, 0x07, 0xca, 0x09, 0xed, 0x09, 0xf8,
+ 0xf8, 0xf7, 0xfa, 0x09, 0x1e, 0x09, 0x21, 0xf7, 0xfb, 0x21, 0xf1, 0x0c, 0xf8,
+ 0xf7, 0x04, 0x0f, 0x00, 0xe4, 0xee, 0xfd, 0xf0, 0xee, 0xf2, 0x04, 0x2b, 0x30,
+ 0xf3, 0x01, 0x0a, 0xe9, 0xfe, 0x1d, 0x00, 0xf5, 0x05, 0x10, 0xda, 0x12, 0x3a,
+ 0x13, 0x00, 0xf8, 0x07, 0xfe, 0x03, 0xd6, 0xf6, 0x0a, 0xfa, 0x51, 0xfc, 0x1c,
+ 0xcb, 0xfa, 0xec, 0xe0, 0x1c, 0x1e, 0xe0, 0x00, 0xfb, 0x37, 0x5c, 0x0b, 0xc5,
+ 0xf7, 0xe5, 0x20, 0xe5, 0x1a, 0x56, 0x2e, 0xf7, 0xd0, 0x71, 0x7f, 0xc4, 0x38,
+ 0x1a, 0xd0, 0xc6, 0x5f, 0x2c, 0xc5, 0x26, 0x1b, 0x24, 0xfd, 0xe3, 0x00, 0x40,
+ 0xe3, 0x20, 0x10, 0x25, 0xec, 0xfc, 0x07, 0xaf, 0xfd, 0x20, 0x9e, 0x0a, 0x4a,
+ 0xa2, 0xc4, 0x68, 0xdf, 0x28, 0xf3, 0x15, 0x0a, 0xc3, 0x44, 0xc3, 0xe0, 0xce,
+ 0xb9, 0x2c, 0x2a, 0xeb, 0x1b, 0x75, 0x56, 0x1d, 0xf6, 0xbd, 0x36, 0xa9, 0x08,
+ 0x67, 0x1a, 0xff, 0x1e, 0xdd, 0x05, 0xb3, 0xfd, 0xc2, 0x0c, 0xe3, 0xe5, 0xe3,
+ 0xda, 0xdc, 0xd6, 0x13, 0x62, 0x00, 0x31, 0xc6, 0x0c, 0x8e, 0xfa, 0x5c, 0xec,
+ 0xd8, 0x40, 0xbd, 0xdc, 0xbf, 0x0e, 0xc8, 0x3f, 0xc7, 0x15, 0x10, 0x55, 0xe2,
+ 0xf7, 0xc3, 0x39, 0x42, 0x1f, 0x08, 0x0f, 0x40, 0xf4, 0xd3, 0x07, 0x15, 0xd4,
+ 0x5c, 0xfe, 0xe9, 0xda, 0x59, 0x1f, 0xdd, 0x35, 0x5a, 0x9f, 0x04, 0x32, 0xe0,
+ 0x13, 0xcb, 0xe6, 0xe6, 0xb5, 0x1b, 0x12, 0xcb, 0xdc, 0xc7, 0x1d, 0x0f, 0xf6,
+ 0x48, 0xe8, 0x16, 0xdb, 0xfe, 0x1a, 0xe7, 0x0f, 0x27, 0xf5, 0x3c, 0xe6, 0xd8,
+ 0x0f, 0x06, 0x49, 0x09, 0xe8, 0x21, 0xf8, 0x17, 0x06, 0x22, 0x14, 0x50, 0x06,
+ 0x67, 0xe1, 0xc5, 0xa6, 0xca, 0x04, 0xf4, 0x22, 0xf5, 0xd9, 0xff, 0xf3, 0x67,
+ 0xef, 0x48, 0xf5, 0x57, 0xcd, 0xb1, 0xf7, 0x09, 0xfb, 0x30, 0x24, 0x10, 0x0a,
+ 0x3d, 0x0f, 0x15, 0x24, 0x35, 0x0e, 0x10, 0xeb, 0x48, 0xf8, 0x1b, 0xcd, 0x14,
+ 0xd2, 0x2d, 0x01, 0xe9, 0x51, 0x07, 0xe4, 0x46, 0xff, 0x2d, 0x7f, 0xeb, 0x18,
+ 0x1b, 0x4f, 0x0e, 0x27, 0x03, 0xdb, 0x42, 0xc1, 0x3c, 0x3b, 0x05, 0xd7, 0x29,
+ 0x16, 0xec, 0x5a, 0xa4, 0x04, 0xa0, 0x04, 0x1d, 0x1a, 0x08, 0x4a, 0x3b, 0x0d,
+ 0xf5, 0xf2, 0xdd, 0xd1, 0x34, 0xe9, 0x18, 0xf5, 0x0c, 0xfe, 0x39, 0xd4, 0x41,
+ 0xeb, 0x09, 0xdb, 0x02, 0x29, 0x35, 0xe9, 0x07, 0xe3, 0xfb, 0xe3, 0xef, 0x0d,
+ 0xd4, 0x33, 0xfa, 0x1b, 0xe1, 0x13, 0xfc, 0xf8, 0x0b, 0x00, 0xff, 0xee, 0xc8,
+ 0xdc, 0x31, 0x31, 0x41, 0xe5, 0xff, 0xef, 0x14, 0x4f, 0xee, 0x01, 0xe7, 0xf9,
+ 0xe7, 0xf1, 0xef, 0x16, 0xfa, 0x00, 0x07, 0xee, 0xf0, 0x1d, 0xd3, 0x1d, 0x04,
+ 0xf7, 0x7f, 0xbc, 0xf7, 0xd6, 0xfb, 0xd5, 0xe7, 0x31, 0x12, 0xf4, 0x13, 0xe1,
+ 0xea, 0xfc, 0xdf, 0x15, 0x45, 0xcf, 0xe3, 0x06, 0xed, 0x07, 0xf4, 0x04, 0x1b,
+ 0xe3, 0xf3, 0x1d, 0x11, 0xf1, 0xf6, 0xf6, 0xfb, 0x24, 0x32, 0x45, 0xf1, 0xeb,
+ 0xeb, 0x19, 0x26, 0xc0, 0x10, 0x12, 0x04, 0x26, 0x55, 0xe6, 0x25, 0xe1, 0x04,
+ 0x0e, 0xf1, 0x45, 0x00, 0xda, 0xc1, 0xbb, 0x65, 0x0e, 0x20, 0x18, 0xe3, 0xde,
+ 0xf3, 0x1b, 0xd1, 0x11, 0xc8, 0xe0, 0xed, 0x04, 0xda, 0xfc, 0x07, 0xe2, 0xe2,
+ 0xd5, 0xeb, 0xbb, 0xe0, 0xfc, 0x12, 0xf7, 0x1d, 0x16, 0x3d, 0xe9, 0x10, 0x53,
+ 0x03, 0x02, 0xe7, 0xd4, 0xfc, 0x7f, 0x39, 0x24, 0x2f, 0x22, 0xd8, 0x16, 0xf1,
+ 0xec, 0xfe, 0x20, 0xf4, 0xdd, 0x0c, 0x04, 0x07, 0x02, 0xb8, 0x0d, 0x03, 0x58,
+ 0x24, 0x21, 0xd1, 0x28, 0x35, 0xfd, 0x15, 0x05, 0x08, 0xdd, 0x10, 0x0a, 0xdb,
+ 0x58, 0x06, 0x31, 0x07, 0xfe, 0x22, 0xd4, 0x4b, 0xfe, 0x04, 0xf6, 0x06, 0x15,
+ 0x3f, 0x24, 0x0b, 0x12, 0x0e, 0x11, 0x10, 0x05, 0xee, 0x14, 0x06, 0xfc, 0xda,
+ 0x21, 0x22, 0x48, 0xec, 0xff, 0xb5, 0xee, 0xc3, 0xec, 0xbe, 0x0f, 0xfa, 0x23,
+ 0x11, 0x2f, 0x04, 0xf0, 0x23, 0x0c, 0x14, 0x5e, 0xe2, 0x02, 0xd9, 0x2c, 0xf4,
+ 0xe7, 0xdd, 0xef, 0xf3, 0x0f, 0x40, 0x35, 0x26, 0x0a, 0xe6, 0x81, 0x23, 0x18,
+ 0x4d, 0x18, 0x48, 0x0c, 0xf7, 0xf9, 0x2a, 0x5c, 0x17, 0x4d, 0xff, 0xe7, 0xfa,
+ 0x47, 0xeb, 0xda, 0x0b, 0x09, 0xe2, 0x22, 0x0b, 0xfb, 0x41, 0x20, 0xe1, 0xee,
+ 0x14, 0x18, 0x1a, 0x4b, 0x3b, 0x1b, 0xf0, 0x13, 0xfb, 0xf0, 0x10, 0x11, 0x13,
+ 0xee, 0xea, 0x0e, 0x08, 0xde, 0x0f, 0xe9, 0xfa, 0x0e, 0x27, 0xfc, 0xf5, 0x4a,
+ 0x36, 0x1f, 0x5b, 0x20, 0xf8, 0x10, 0x4f, 0xb4, 0x17, 0x19, 0x26, 0xdf, 0xf3,
+ 0x0c, 0x6d, 0x24, 0x2b, 0xf4, 0xed, 0x0f, 0x12, 0xe8, 0x0e, 0x1d, 0x12, 0xf8,
+ 0x08, 0xf1, 0x12, 0x14, 0x58, 0xd5, 0xf4, 0x05, 0x0a, 0xfe, 0xfe, 0x3a, 0x0c,
+ 0x2d, 0x09, 0xbb, 0x0f, 0x5c, 0x05, 0x33, 0x25, 0x3f, 0x22, 0xe9, 0xef, 0x0b,
+ 0xf3, 0xf9, 0xf6, 0x01, 0x01, 0xc6, 0x2b, 0x49, 0xac, 0x4e, 0x05, 0x2e, 0x09,
+ 0x28, 0xb4, 0x26, 0xfe, 0x3a, 0x28, 0xfa, 0xf5, 0x0e, 0x35, 0x11, 0x6a, 0x52,
+ 0x12, 0x8e, 0x02, 0x3e, 0xec, 0x3f, 0x31, 0x31, 0x3a, 0x9e, 0xe6, 0x5c, 0x00,
+ 0xbb, 0x00, 0xd7, 0xda, 0x41, 0x19, 0xaa, 0xd9, 0xcd, 0xe7, 0x08, 0xb2, 0xe0,
+ 0x09, 0x25, 0x46, 0x5d, 0x05, 0x36, 0x20, 0xdb, 0xf6, 0x24, 0xe4, 0x1f, 0x21,
+ 0x00, 0x26, 0x22, 0x28, 0x52, 0x13, 0x14, 0xe7, 0xe0, 0x17, 0x33, 0xe8, 0x0c,
+ 0x5d, 0x33, 0xdc, 0xb6, 0x10, 0x0f, 0xb0, 0xe3, 0xae, 0xf6, 0x39, 0xa9, 0x52,
+ 0x25, 0xf8, 0xc9, 0xf2, 0x2f, 0xf1, 0xe8, 0x44, 0x2e, 0x08, 0xda, 0x35, 0x46,
+ 0x0f, 0x02, 0x7f, 0xfe, 0xba, 0x04, 0xe8, 0x74, 0x00, 0xe1, 0xe8, 0x2f, 0xee,
+ 0xe2, 0x27, 0x59, 0x3b, 0x38, 0x33, 0x02, 0x01, 0x0f, 0xb6, 0x11, 0x18, 0x05,
+ 0x0c, 0xfb, 0x53, 0xeb, 0x0f, 0x18, 0x2b, 0xda, 0x14, 0xe3, 0x5a, 0x0d, 0xff,
+ 0xef, 0xff, 0xf3, 0x13, 0xdb, 0x28, 0x08, 0xdf, 0xe8, 0xf2, 0xc9, 0xfc, 0x42,
+ 0xd5, 0x10, 0x09, 0xe0, 0x4b, 0x3b, 0xdc, 0x13, 0xe4, 0xd6, 0x32, 0x45, 0x08,
+ 0xfb, 0x36, 0xcb, 0x04, 0x59, 0xf6, 0x17, 0xd2, 0x07, 0x46, 0x25, 0xd6, 0xe9,
+ 0xdb, 0xfc, 0xfd, 0xe2, 0xf3, 0xe6, 0xde, 0xf5, 0xae, 0x04, 0x13, 0xda, 0x55,
+ 0xd9, 0x4a, 0xde, 0x0f, 0x07, 0x0d, 0xa5, 0xc6, 0xe9, 0xd4, 0xbb, 0xda, 0xf3,
+ 0x45, 0x81, 0x18, 0xaf, 0xfc, 0x08, 0xfd, 0xb0, 0xe5, 0xcb, 0xda, 0x01, 0x01,
+ 0xf8, 0x59, 0xf0, 0x02, 0x17, 0x39, 0x0a, 0xdb, 0xac, 0x06, 0x16, 0xdc, 0xf4,
+ 0xf7, 0xf8, 0x1d, 0x10, 0xc2, 0x0b, 0xcc, 0x21, 0xdb, 0xc9, 0xde, 0x02, 0x11,
+ 0x57, 0x0c, 0x31, 0xec, 0x29, 0x40, 0x27, 0xe3, 0xe9, 0xed, 0x1e, 0xc0, 0x43,
+ 0xcf, 0xc0, 0x37, 0x3c, 0xbf, 0xfb, 0xd4, 0x1d, 0xef, 0xd1, 0x64, 0xe8, 0xf3,
+ 0x18, 0xf4, 0xee, 0x05, 0xeb, 0x03, 0xe0, 0xfb, 0xc2, 0xe7, 0xab, 0x24, 0xc5,
+ 0xf8, 0x7f, 0x2a, 0x00, 0xc4, 0xe9, 0xf0, 0x04, 0xfc, 0x1c, 0xf1, 0x05, 0xff,
+ 0xc7, 0x35, 0x15, 0xcd, 0xea, 0xfb, 0x0a, 0xb8, 0x6c, 0x2c, 0x0a, 0x10, 0xde,
+ 0xf3, 0xfa, 0x9a, 0x33, 0xda, 0x08, 0x24, 0xda, 0x0d, 0x18, 0x4e, 0x11, 0xf2,
+ 0xfe, 0x1c, 0xe6, 0xd2, 0xe3, 0xf1, 0x3a, 0xdc, 0x01, 0x2f, 0xe2, 0xf1, 0xdb,
+ 0xfa, 0x28, 0xbc, 0xef, 0x5e, 0xed, 0x05, 0xcf, 0xe9, 0xf2, 0xcb, 0xfa, 0x3a,
+ 0x2f, 0xf8, 0x28, 0xfa, 0xdf, 0xe9, 0xd7, 0x29, 0x07, 0x02, 0xf0, 0x3a, 0xf0,
+ 0xd3, 0x08, 0x15, 0x0d, 0x2d, 0xe4, 0x2a, 0x30, 0xe3, 0xc1, 0x1d, 0x2f, 0x17,
+ 0x14, 0xf9, 0x31, 0x11, 0xff, 0xfd, 0xc9, 0x1b, 0x1c, 0x0e, 0x55, 0xf3, 0xe2,
+ 0x16, 0xd7, 0xc7, 0xd8, 0x2f, 0xfc, 0xe1, 0x1f, 0x03, 0xcc, 0x32, 0x33, 0x30,
+ 0xeb, 0xe3, 0xbf, 0x13, 0xf9, 0x06, 0xe7, 0x03, 0x0e, 0xee, 0xf9, 0x3d, 0x51,
+ 0x05, 0xef, 0x22, 0xef, 0x02, 0xf4, 0x17, 0xdc, 0xbb, 0xf0, 0x0b, 0xcd, 0x48,
+ 0xf2, 0xd4, 0x32, 0x01, 0xef, 0xd6, 0x15, 0x12, 0x1c, 0xff, 0x2c, 0xf9, 0xca,
+ 0xd4, 0x15, 0x08, 0xdc, 0x03, 0x0a, 0xf0, 0xe1, 0x1b, 0xf4, 0xd4, 0xbd, 0xed,
+ 0xdc, 0xff, 0xeb, 0xce, 0x09, 0x25, 0xef, 0x31, 0xee, 0xee, 0x81, 0xfd, 0xf1,
+ 0xfb, 0xf7, 0x50, 0xaf, 0xd7, 0xcd, 0xec, 0xe3, 0x0a, 0x0c, 0x0c, 0xd7, 0x18,
+ 0x02, 0x18, 0xf2, 0xe2, 0x0d, 0x21, 0xd1, 0x0b, 0x00, 0x0c, 0x14, 0x41, 0xf3,
+ 0x14, 0xbc, 0x26, 0xe4, 0x26, 0x37, 0xfc, 0x0a, 0xe3, 0xd4, 0x06, 0x2a, 0xe3,
+ 0x27, 0x0a, 0xd4, 0xf6, 0xfd, 0xf1, 0xe8, 0x5b, 0xfa, 0xd2, 0xc6, 0x42, 0xdd,
+ 0x07, 0xe8, 0xed, 0x09, 0x32, 0x5b, 0xf8, 0xfb, 0x2a, 0x0d, 0x3f, 0xd4, 0x16,
+ 0xd4, 0x23, 0x06, 0xd3, 0x2c, 0xbb, 0x24, 0xd2, 0x14, 0x09, 0xed, 0x01, 0x5d,
+ 0x7f, 0xbb, 0xfb, 0xd5, 0x14, 0x2d, 0xfe, 0x13, 0xbe, 0x0c, 0xe5, 0x1a, 0x05,
+ 0x24, 0xd9, 0xbc, 0xef, 0x05, 0xfc, 0x16, 0x32, 0x31, 0x14, 0xd6, 0x33, 0xfc,
+ 0xe6, 0xe1, 0x1c, 0xe3, 0xef, 0xd8, 0xa7, 0xce, 0xd8, 0x11, 0xca, 0xf8, 0xf8,
+ 0xdd, 0x1b, 0xf5, 0x51, 0x08, 0x34, 0x09, 0xfb, 0xb7, 0x2f, 0xbf, 0x3e, 0xf2,
+ 0xda, 0x4a, 0xdc, 0xe2, 0x14, 0xf5, 0x7f, 0x37, 0x42, 0xd3, 0x10, 0xeb, 0xe0,
+ 0xf8, 0xd8, 0x10, 0xf4, 0xee, 0x48, 0x32, 0x0a, 0xcb, 0x1b, 0xc0, 0xf9, 0x19,
+ 0x01, 0x1c, 0xd1, 0x04, 0xe9, 0xd6, 0xb9, 0x5a, 0xe8, 0x0a, 0xe1, 0x25, 0x21,
+ 0x0d, 0xc6, 0xf8, 0xfa, 0xcc, 0x36, 0xe9, 0x22, 0x69, 0x2d, 0xec, 0x4d, 0x36,
+ 0xc1, 0xee, 0xcb, 0xe1, 0x4b, 0xfe, 0xd5, 0x31, 0xe0, 0xf9, 0x1d, 0xf3, 0xab,
+ 0x2b, 0x24, 0x4b, 0x15, 0x66, 0xd9, 0x29, 0x14, 0x40, 0x6d, 0xa1, 0xe4, 0xca,
+ 0x21, 0xb7, 0x07, 0xfb, 0xff, 0xc0, 0x2b, 0xf8, 0xe9, 0xfe, 0xe2, 0xe8, 0xad,
+ 0x23, 0xc0, 0x3e, 0x17, 0x09, 0xbc, 0x30, 0xcf, 0xd0, 0xf4, 0xd8, 0x1c, 0x5d,
+ 0xf6, 0x3c, 0x0f, 0xd9, 0x1c, 0x24, 0x0d, 0xd0, 0xc1, 0xd4, 0xd7, 0x00, 0xfd,
+ 0xe3, 0xa1, 0xde, 0xe1, 0x11, 0x0d, 0x36, 0x29, 0x48, 0x27, 0xf6, 0x3e, 0xf1,
+ 0x2b, 0x2b, 0x21, 0xc3, 0xe6, 0xf8, 0x10, 0xe3, 0xd8, 0x02, 0xf2, 0x45, 0x4f,
+ 0xd8, 0xfc, 0xf4, 0x6b, 0xf7, 0xfe, 0xac, 0x18, 0xe8, 0x12, 0xfd, 0x14, 0x1f,
+ 0x2a, 0xd1, 0x26, 0x56, 0xb8, 0xae, 0x0f, 0x36, 0xac, 0x16, 0xd7, 0x06, 0x0d,
+ 0x1d, 0x3f, 0xfa, 0x18, 0x40, 0x01, 0x7f, 0xfe, 0x35, 0xed, 0xc8, 0xcc, 0x04,
+ 0x3a, 0x2f, 0xdd, 0x32, 0x2c, 0xfb, 0x17, 0xf0, 0x0c, 0x17, 0x0e, 0x11, 0xd6,
+ 0xa7, 0x75, 0xd0, 0xf6, 0x23, 0xd8, 0x46, 0x01, 0x10, 0x06, 0xd1, 0x38, 0xc9,
+ 0xb7, 0xb0, 0xea, 0xf8, 0xe9, 0x10, 0x55, 0xcd, 0x17, 0x3c, 0x99, 0x0e, 0x81,
+ 0x27, 0xd5, 0xd3, 0x05, 0x2f, 0x2d, 0xab, 0xfa, 0x41, 0xc5, 0x7a, 0x44, 0xe9,
+ 0xca, 0xd8, 0xce, 0x0e, 0xc1, 0x23, 0x29, 0xdb, 0xda, 0x32, 0x09, 0x2a, 0xcd,
+ 0x2b, 0x61, 0xf4, 0x09, 0xf2, 0xe8, 0x18, 0x29, 0x03, 0x47, 0xee, 0xe5, 0xab,
+ 0xd3, 0xe6, 0x3a, 0x23, 0xe0, 0xb0, 0xcd, 0x2d, 0xce, 0xfd, 0x25, 0x95, 0x24,
+ 0x46, 0x27, 0x20, 0x49, 0x97, 0xb6, 0xe1, 0x2f, 0x8c, 0xf1, 0x11, 0x08, 0x1a,
+ 0xa8, 0x0f, 0x2d, 0x11, 0x20, 0x3a, 0xfd, 0x20, 0xfd, 0x20, 0xcc, 0x20, 0x31,
+ 0x5f, 0x1b, 0x47, 0x24, 0xd8, 0xf1, 0xc5, 0xb3, 0xe5, 0x25, 0xd5, 0x4f, 0x42,
+ 0x01, 0xbd, 0x27, 0x09, 0xac, 0x37, 0x3f, 0xd4, 0x50, 0xcc, 0xb6, 0x38, 0x1e,
+ 0xe6, 0x0d, 0x19, 0x0f, 0xd0, 0x1d, 0x0f, 0xf2, 0xa3, 0xf9, 0xe9, 0x07, 0xf4,
+ 0x09, 0x0c, 0xf6, 0xe8, 0x48, 0x18, 0xdd, 0x47, 0xaa, 0x17, 0x02, 0x00, 0x06,
+ 0x4b, 0xec, 0x2e, 0xf0, 0xe4, 0x28, 0xea, 0x31, 0x54, 0xa3, 0xe9, 0xb8, 0xee,
+ 0x2e, 0xa5, 0x9f, 0x00, 0xfa, 0xd0, 0x06, 0x13, 0x0f, 0x24, 0x16, 0x19, 0x58,
+ 0x1e, 0x07, 0x2e, 0x2f, 0xef, 0xfb, 0xcf, 0xeb, 0x3b, 0xa5, 0xf4, 0xcd, 0xb4,
+ 0x4e, 0x08, 0x7f, 0x06, 0xee, 0x2d, 0xcc, 0x04, 0x69, 0xe7, 0xe2, 0x1f, 0x00,
+ 0xe7, 0x00, 0xe5, 0xdb, 0xfb, 0x19, 0xb8, 0x00, 0x42, 0xd2, 0x3d, 0xb0, 0xd0,
+ 0x1a, 0x07, 0x24, 0xe9, 0xfc, 0x20, 0xec, 0x1a, 0xb8, 0x28, 0xc5, 0x24, 0x14,
+ 0xc9, 0x9e, 0x11, 0x00, 0xdf, 0xbd, 0x1d, 0xea, 0x19, 0xd5, 0xb0, 0x52, 0xf2,
+ 0xf3, 0x1d, 0xbe, 0xe9, 0xad, 0x3b, 0xe2, 0xff, 0xaa, 0xd6, 0xf1, 0xfe, 0x1f,
+ 0xda, 0xfa, 0x0f, 0x06, 0xb1, 0xf8, 0x20, 0x22, 0x67, 0x12, 0xea, 0xda, 0xa1,
+ 0xc3, 0xd6, 0x25, 0x57, 0xcb, 0xea, 0x1c, 0xf4, 0xcb, 0xb9, 0x44, 0xf7, 0x1f,
+ 0x3b, 0xe6, 0xb9, 0x9e, 0xd4, 0xd3, 0x2d, 0x4e, 0xe6, 0x09, 0xd8, 0x04, 0x58,
+ 0xf8, 0xc3, 0x9b, 0xe8, 0x14, 0xec, 0x41, 0xec, 0x01, 0xfe, 0x03, 0x19, 0xcd,
+ 0xc1, 0x90, 0x0b, 0xef, 0xda, 0x1d, 0xfa, 0x3d, 0xf5, 0x09, 0x11, 0xaa, 0x1d,
+ 0xe4, 0x10, 0x05, 0x14, 0xff, 0x1d, 0xe7, 0x36, 0x69, 0xee, 0x01, 0xfc, 0xd9,
+ 0x48, 0xe0, 0x06, 0x40, 0xfa, 0xcb, 0xf8, 0x65, 0x53, 0xfb, 0x0b, 0x7f, 0x53,
+ 0x2b, 0xed, 0x89, 0x50, 0x07, 0x03, 0x06, 0xf3, 0x12, 0x1c, 0xca, 0x1f, 0x72,
+ 0xd0, 0xce, 0x1e, 0x99, 0x20, 0x10, 0xbd, 0xf0, 0xd1, 0x48, 0xe1, 0x2b, 0xb6,
+ 0x38, 0xd0, 0x06, 0x05, 0xf6, 0x04, 0x19, 0x53, 0x1b, 0xbf, 0xaa, 0xd0, 0x06,
+ 0x26, 0xc4, 0x57, 0x46, 0xff, 0x0f, 0xa3, 0xfb, 0xf1, 0x0c, 0x2b, 0x33, 0xdc,
+ 0x10, 0x0f, 0x0e, 0xbd, 0x05, 0xbf, 0x2f, 0xe7, 0x2b, 0x0a, 0x00, 0x15, 0xfc,
+ 0xb1, 0x22, 0x01, 0x1e, 0x17, 0x08, 0x53, 0xfa, 0xcd, 0xf4, 0x39, 0xf7, 0xd6,
+ 0xe9, 0xd4, 0x01, 0xce, 0xcd, 0x27, 0x48, 0x91, 0xff, 0xd7, 0xaf, 0xbc, 0x32,
+ 0xb2, 0x26, 0xd4, 0xf6, 0x33, 0xc5, 0x29, 0x0d, 0xc3, 0x5a, 0xfd, 0x7c, 0x24,
+ 0xfc, 0xf8, 0xc3, 0x31, 0xba, 0xb5, 0x3d, 0xc7, 0xf0, 0x3f, 0xbf, 0x51, 0x17,
+ 0xd9, 0x79, 0xce, 0x17, 0xba, 0x29, 0xc4, 0x94, 0x33, 0xf9, 0xe9, 0xcb, 0x21,
+ 0xf7, 0x2e, 0x1e, 0xab, 0xeb, 0xc3, 0xfa, 0x0c, 0x0a, 0xc6, 0x81, 0x40, 0x00,
+ 0xfb, 0x0a, 0x0c, 0x01, 0xe3, 0x81, 0x00, 0x7e, 0xee, 0x48, 0x23, 0xd7, 0xde,
+ 0x42, 0x5e, 0xea, 0x11, 0xca, 0x47, 0xe9, 0x02, 0xf7, 0xd2, 0x28, 0x03, 0xf7,
+ 0xfa, 0x13, 0xc1, 0x2a, 0xdf, 0x01, 0xe7, 0xc8, 0x0b, 0xf6, 0xce, 0x42, 0x38,
+ 0x0c, 0x23, 0xc8, 0xd8, 0xed, 0x10, 0x22, 0xea, 0xfc, 0x28, 0xf9, 0xc7, 0x00,
+ 0xd6, 0xeb, 0x7a, 0x31, 0x33, 0xf2, 0xf6, 0xf4, 0x0c, 0x98, 0xe9, 0xd3, 0x2a,
+ 0xdf, 0x09, 0x1a, 0xf9, 0xf8, 0xfd, 0xe0, 0x1d, 0xec, 0x41, 0x28, 0x72, 0xf9,
+ 0xa4, 0xe1, 0xbf, 0xf1, 0xd7, 0xde, 0xf3, 0x05, 0x43, 0xf2, 0xcf, 0xc3, 0x1a,
+ 0xef, 0x05, 0x20, 0xef, 0xff, 0xeb, 0xfb, 0x16, 0x30, 0xc9, 0xe4, 0xcc, 0x1f,
+ 0xf4, 0xfb, 0xc3, 0x19, 0xf4, 0xa5, 0x32, 0x11, 0x07, 0x13, 0xec, 0x23, 0x50,
+ 0x0d, 0x02, 0xe1, 0xb0, 0x5c, 0xf8, 0x20, 0xd2, 0x44, 0x2e, 0xd0, 0x19, 0xc8,
+ 0xf8, 0xe1, 0x0f, 0xed, 0xed, 0xd3, 0x3d, 0xe5, 0x63, 0x4d, 0x3a, 0x32, 0xdb,
+ 0x31, 0x08, 0x3b, 0x56, 0x2c, 0xc2, 0x05, 0x2f, 0xfe, 0x16, 0xff, 0x17, 0x10,
+ 0xa0, 0xb7, 0x2a, 0x49, 0xb2, 0xf7, 0x0b, 0xbf, 0x33, 0xf8, 0xb9, 0x46, 0xfd,
+ 0x1a, 0x27, 0xd4, 0x12, 0x12, 0xe7, 0x25, 0x23, 0xf1, 0x1c, 0xda, 0x23, 0x47,
+ 0x22, 0xf4, 0x13, 0xda, 0x2d, 0xdc, 0xf1, 0xea, 0xda, 0x21, 0x35, 0xfc, 0x24,
+ 0xf2, 0xe3, 0x20, 0x0d, 0x39, 0xe8, 0x18, 0xe8, 0x7f, 0xde, 0xd8, 0x11, 0x33,
+ 0xcb, 0x20, 0xf4, 0x6f, 0x4a, 0xfe, 0x05, 0xf9, 0x2b, 0xff, 0x04, 0xe2, 0x28,
+ 0xec, 0x32, 0xdc, 0xf2, 0x07, 0x09, 0x43, 0xec, 0x11, 0xef, 0xdf, 0x11, 0xf0,
+ 0xfa, 0x10, 0xeb, 0xdb, 0x13, 0xc7, 0x19, 0xea, 0xd8, 0x06, 0x32, 0x19, 0x14,
+ 0x3c, 0x28, 0x09, 0xe4, 0x5b, 0x41, 0x1f, 0xfb, 0x57, 0x61, 0x57, 0x2d, 0x13,
+ 0xbd, 0x25, 0x38, 0x1b, 0x27, 0x2e, 0x34, 0x11, 0xbe, 0xda, 0x2a, 0x2a, 0xbe,
+ 0x0c, 0x02, 0x43, 0xe5, 0x1b, 0xf7, 0x08, 0xd8, 0x69, 0xd4, 0x27, 0x19, 0x4b,
+ 0xc6, 0x04, 0xc0, 0xf2, 0xe9, 0x3a, 0x25, 0xda, 0xc7, 0xf1, 0xd3, 0xae, 0x9e,
+ 0xc5, 0x2a, 0xea, 0x07, 0xd2, 0x04, 0xb9, 0x05, 0x5e, 0xda, 0x47, 0x81, 0xf6,
+ 0xf8, 0x01, 0x0a, 0x08, 0xe8, 0x11, 0xcb, 0xe2, 0xd7, 0xbe, 0x02, 0xb5, 0x2e,
+ 0x15, 0xf4, 0xce, 0xd6, 0x26, 0xf5, 0x28, 0x28, 0x39, 0xcb, 0xf1, 0x2f, 0xac,
+ 0xcc, 0x91, 0xed, 0x15, 0x0f, 0xd3, 0xd0, 0xed, 0xb8, 0x05, 0x0d, 0x47, 0xe9,
+ 0x18, 0x03, 0x1e, 0xdf, 0x18, 0xe0, 0xcf, 0xda, 0x5e, 0x99, 0x29, 0xc1, 0x3e,
+ 0xed, 0xf9, 0x4b, 0x9e, 0x06, 0xf6, 0x68, 0x27, 0xf2, 0xe2, 0xca, 0xf6, 0xc8,
+ 0xe6, 0xd7, 0xe7, 0xf7, 0xc3, 0xdd, 0x07, 0xf7, 0x17, 0xdb, 0xff, 0x05, 0x09,
+ 0x02, 0x01, 0xec, 0x0d, 0x01, 0x1d, 0xdf, 0x18, 0xb8, 0x15, 0xff, 0x35, 0xcf,
+ 0x06, 0x5f, 0x26, 0x1c, 0xdf, 0x05, 0xeb, 0x16, 0x42, 0x4d, 0xf8, 0x1f, 0xcd,
+ 0x20, 0xc4, 0xd5, 0x11, 0xf6, 0xea, 0x00, 0x23, 0x0b, 0xee, 0x37, 0x12, 0xe2,
+ 0xf2, 0x41, 0xea, 0x04, 0x0d, 0xd6, 0xd1, 0xd8, 0x18, 0xd5, 0xf1, 0x0f, 0xc1,
+ 0x01, 0x4a, 0x29, 0xeb, 0xd0, 0xfe, 0x00, 0x27, 0xf8, 0x11, 0x6d, 0x18, 0x5f,
+ 0x55, 0x47, 0x01, 0xe3, 0xf9, 0x09, 0xee, 0xdd, 0xdc, 0x2a, 0xbc, 0xaf, 0xd5,
+ 0xe1, 0xbd, 0x12, 0xe8, 0x0e, 0xf7, 0xec, 0xf7, 0xf3, 0x20, 0x1e, 0xc1, 0x19,
+ 0xfe, 0xe3, 0x1b, 0xff, 0xc1, 0xdc, 0xc3, 0xf0, 0xf7, 0x0b, 0x01, 0x35, 0x7f,
+ 0xeb, 0x2c, 0x3c, 0x0c, 0x0e, 0x43, 0xd6, 0xf2, 0xec, 0xf1, 0x10, 0xc7, 0xf1,
+ 0x13, 0x5a, 0x28, 0x0b, 0x0a, 0xf8, 0xe7, 0x2f, 0x02, 0x00, 0xf5, 0x0c, 0xeb,
+ 0x1b, 0xf8, 0x11, 0xfc, 0xfd, 0x12, 0x06, 0x0c, 0xdc, 0xcf, 0xbc, 0xeb, 0xde,
+ 0x41, 0x0a, 0xd7, 0x2a, 0xe4, 0x1b, 0x2d, 0x00, 0x0f, 0x39, 0xea, 0xf0, 0x02,
+ 0xe7, 0xdc, 0x1a, 0x2b, 0xf1, 0xe1, 0x3e, 0x05, 0x17, 0x00, 0x05, 0xe5, 0xef,
+ 0x32, 0x47, 0xe1, 0x17, 0x2e, 0x08, 0xe3, 0x25, 0x49, 0xfb, 0xff, 0x04, 0xf8,
+ 0x2b, 0x1e, 0x08, 0x46, 0x3e, 0xeb, 0x0b, 0xeb, 0x5b, 0x1d, 0x65, 0x39, 0xec,
+ 0x07, 0xb4, 0x15, 0xf9, 0xf5, 0x22, 0xfc, 0xcd, 0x79, 0x02, 0xed, 0xf7, 0x26,
+ 0xf3, 0xce, 0xc8, 0x21, 0x0e, 0x1e, 0xf1, 0x0f, 0x10, 0x1c, 0x1f, 0xf0, 0x11,
+ 0x2f, 0xda, 0xfc, 0xfb, 0xf8, 0x13, 0xd2, 0xca, 0xf2, 0x4b, 0xf0, 0x07, 0x31,
+ 0x7f, 0x05, 0x15, 0xe2, 0x1f, 0x04, 0x4f, 0x1e, 0x1b, 0x07, 0xd9, 0x4c, 0x48,
+ 0x3d, 0xf9, 0xfa, 0x05, 0xea, 0xe6, 0x14, 0x2b, 0xff, 0xef, 0x29, 0x04, 0xff,
+ 0xeb, 0x0d, 0x04, 0xeb, 0x16, 0x09, 0x06, 0xd3, 0xec, 0xfd, 0xdc, 0x3b, 0xd7,
+ 0x31, 0x10, 0x22, 0x7f, 0x3e, 0xc5, 0x24, 0x10, 0x14, 0x49, 0xfa, 0xf0, 0xcb,
+ 0xcc, 0xcb, 0x2a, 0xe0, 0x18, 0x18, 0xdc, 0xf5, 0xff, 0xed, 0xb0, 0x50, 0xf9,
+ 0x1a, 0xb7, 0xb4, 0x18, 0xd7, 0x0a, 0x35, 0xfc, 0x06, 0xc7, 0x0f, 0x62, 0xf6,
+ 0xdf, 0x06, 0xcc, 0x23, 0xbc, 0x45, 0x23, 0x14, 0x2a, 0xe7, 0x3e, 0xe0, 0x09,
+ 0xf3, 0xf0, 0x10, 0x00, 0xf3, 0x33, 0x3d, 0x37, 0x1d, 0xba, 0x1f, 0xf8, 0xf1,
+ 0x38, 0x01, 0xd3, 0x9f, 0x19, 0xc8, 0x1f, 0xe0, 0xc3, 0x12, 0xf6, 0x20, 0x57,
+ 0x24, 0x18, 0x01, 0xf0, 0x08, 0xd0, 0xed, 0x40, 0x0c, 0xdd, 0x17, 0x39, 0x2a,
+ 0xff, 0x85, 0xfa, 0x22, 0xf7, 0x09, 0xec, 0x02, 0x0f, 0x16, 0xb7, 0xc0, 0xc4,
+ 0xbd, 0xf0, 0xc4, 0x07, 0xc4, 0xea, 0x00, 0x13, 0xff, 0xd2, 0xf0, 0xf4, 0x0b,
+ 0xe3, 0xf6, 0xea, 0x0f, 0x36, 0xc2, 0xf9, 0xa8, 0xe1, 0xee, 0xd9, 0x1e, 0x0c,
+ 0xea, 0xd0, 0x1f, 0xd6, 0xf9, 0x18, 0x46, 0xdb, 0x22, 0xf2, 0xf5, 0x06, 0xda,
+ 0x39, 0x41, 0xfc, 0x48, 0xe8, 0xf9, 0xf7, 0x48, 0x27, 0x1e, 0x33, 0x0e, 0xd3,
+ 0xc5, 0xd3, 0x17, 0x7f, 0x05, 0x01, 0x2b, 0x21, 0xef, 0xef, 0x27, 0xf3, 0x12,
+ 0xfa, 0x01, 0x06, 0x0b, 0x26, 0x08, 0x25, 0x12, 0xf3, 0xf2, 0xc5, 0x0e, 0x07,
+ 0xd9, 0x07, 0x00, 0x25, 0xeb, 0x1e, 0x0c, 0x18, 0x1e, 0x03, 0xc6, 0x29, 0x20,
+ 0xfc, 0x04, 0xf0, 0xfa, 0xfe, 0x07, 0xf6, 0x1a, 0x18, 0x51, 0xf0, 0x17, 0xb8,
+ 0xfc, 0x03, 0x18, 0xe6, 0x0f, 0x36, 0xb9, 0xef, 0x1f, 0x3e, 0x34, 0x01, 0xe2,
+ 0x4e, 0x0d, 0xf4, 0x21, 0xfb, 0x2c, 0x0b, 0x28, 0x53, 0xef, 0xf7, 0x7b, 0x25,
+ 0xdb, 0xc9, 0xea, 0xe1, 0xf2, 0x45, 0x4a, 0xe8, 0x0a, 0xdc, 0x5b, 0xb3, 0xb8,
+ 0x9e, 0xb0, 0xe3, 0xf9, 0x5c, 0xc4, 0x05, 0xf4, 0xf5, 0x09, 0x0d, 0x24, 0xb0,
+ 0x42, 0x25, 0x22, 0xca, 0x3f, 0xd7, 0xfb, 0x81, 0x23, 0xd2, 0xea, 0x26, 0xf1,
+ 0xfc, 0x1c, 0x02, 0x0e, 0x4d, 0x06, 0xff, 0xc8, 0x78, 0xb6, 0xdf, 0xb7, 0x11,
+ 0xf3, 0x15, 0xf9, 0xf9, 0xe8, 0xec, 0x00, 0x67, 0xea, 0xd8, 0xc7, 0xfe, 0xb8,
+ 0x08, 0xd5, 0xed, 0x5a, 0xd7, 0x30, 0xe5, 0x0c, 0x14, 0x5f, 0xee, 0x23, 0x2b,
+ 0x32, 0x6c, 0xe8, 0x11, 0x30, 0xc4, 0x32, 0xdb, 0xfe, 0xd9, 0xd5, 0x51, 0xd9,
+ 0xda, 0x1d, 0x49, 0xdc, 0xe1, 0x04, 0xe1, 0x24, 0x16, 0xbd, 0xe6, 0x1d, 0xf0,
+ 0x34, 0x20, 0x0b, 0xfa, 0xf2, 0xc7, 0xcd, 0xd2, 0x36, 0x3e, 0xfa, 0x58, 0xf6,
+ 0xd0, 0x00, 0x0c, 0xde, 0x06, 0x40, 0x14, 0x96, 0x3b, 0xe9, 0x31, 0xe5, 0x34,
+ 0x0c, 0xf8, 0xf8, 0x63, 0x44, 0x0d, 0x1e, 0x4c, 0xf8, 0x0d, 0xfe, 0xe2, 0xe4,
+ 0x07, 0x2f, 0x09, 0x41, 0x16, 0xd8, 0x0d, 0x01, 0x36, 0x17, 0xe3, 0x28, 0xd7,
+ 0xf8, 0x5b, 0xde, 0x33, 0xf5, 0x2e, 0xea, 0x17, 0x07, 0x0f, 0x27, 0xfe, 0x31,
+ 0xe7, 0xea, 0x4a, 0xfa, 0xfa, 0x32, 0x0c, 0x06, 0xf4, 0x22, 0xfd, 0x5e, 0x3c,
+ 0x0f, 0x12, 0xfb, 0x1c, 0x23, 0x03, 0xdf, 0xe7, 0x1a, 0x0f, 0xfd, 0xff, 0xd9,
+ 0x20, 0xdd, 0x30, 0x12, 0xf7, 0xcc, 0xc8, 0x34, 0xfe, 0x19, 0xf6, 0x33, 0x0f,
+ 0x3d, 0x09, 0x50, 0x53, 0xcc, 0x03, 0x03, 0xd2, 0x10, 0x32, 0x00, 0xeb, 0x02,
+ 0xf4, 0x25, 0xd1, 0xf3, 0xf1, 0x45, 0xfe, 0xf6, 0x04, 0xee, 0x05, 0xfb, 0x0c,
+ 0xfb, 0x3d, 0xe8, 0xd9, 0xff, 0x7f, 0xdc, 0xd9, 0xe2, 0x42, 0x02, 0x1a, 0x17,
+ 0xe8, 0xff, 0x2e, 0x01, 0xfb, 0x0e, 0xfa, 0xff, 0xf4, 0x29, 0x2c, 0x20, 0xf1,
+ 0xd8, 0xfe, 0x05, 0xf9, 0xf6, 0xcf, 0x15, 0x0f, 0x0d, 0xd3, 0xdc, 0x25, 0x02,
+ 0xfa, 0xa1, 0xd1, 0xb7, 0xf6, 0x04, 0xe6, 0x19, 0x4d, 0x10, 0x1d, 0xc7, 0xe9,
+ 0x1d, 0x03, 0x18, 0xf5, 0x0a, 0x09, 0x09, 0x02, 0x12, 0x03, 0xc1, 0xf6, 0x1a,
+ 0xe0, 0x1b, 0x11, 0xd4, 0xc2, 0xf9, 0xf5, 0x54, 0xeb, 0x52, 0xeb, 0x0e, 0x19,
+ 0x1f, 0x06, 0xf6, 0x19, 0xf4, 0xf9, 0x1d, 0x10, 0x07, 0x18, 0xfa, 0xe1, 0x7f,
+ 0x0f, 0xf3, 0xf9, 0x2f, 0x10, 0xd7, 0xf9, 0xe7, 0x1c, 0xed, 0x0b, 0xd2, 0xce,
+ 0x24, 0x11, 0x50, 0xf3, 0x01, 0x36, 0xec, 0x08, 0xf2, 0x13, 0xc4, 0xfb, 0xdc,
+ 0x30, 0xf4, 0x0e, 0x14, 0xfa, 0xe6, 0x1f, 0xf5, 0xf4, 0x0a, 0xe6, 0x29, 0xea,
+ 0x1f, 0x36, 0xd2, 0xd9, 0x0a, 0xfb, 0xe8, 0xfd, 0x2a, 0x20, 0xed, 0xe1, 0x07,
+ 0x1b, 0xf6, 0xe9, 0xfc, 0x60, 0x01, 0x14, 0xde, 0x04, 0xb5, 0x13, 0x00, 0x1c,
+ 0x29, 0x27, 0xf9, 0x2c, 0x12, 0x33, 0xee, 0x26, 0xcb, 0x18, 0x01, 0xe6, 0xeb,
+ 0x27, 0xc1, 0x24, 0x03, 0xb9, 0x12, 0x0a, 0xe4, 0x3a, 0x12, 0x48, 0xeb, 0x22,
+ 0xef, 0xd6, 0xd1, 0x0d, 0xb7, 0x05, 0x72, 0xfa, 0xf4, 0xf4, 0x28, 0xb3, 0xce,
+ 0xdc, 0xf1, 0xb9, 0x05, 0x06, 0xd5, 0xfe, 0xf2, 0xaa, 0x23, 0xff, 0x1e, 0x18,
+ 0xf8, 0x25, 0xd3, 0xf4, 0x06, 0xf1, 0xff, 0x17, 0x0a, 0xef, 0xdc, 0xef, 0x11,
+ 0xf3, 0xf0, 0xae, 0x11, 0x47, 0xf4, 0xbc, 0xf3, 0xe2, 0x0b, 0xbd, 0xbd, 0x39,
+ 0xbb, 0x2b, 0x81, 0xe6, 0x04, 0xaa, 0xd1, 0x1b, 0xd2, 0x1f, 0x36, 0xc0, 0xd4,
+ 0xe0, 0x32, 0xf7, 0xb3, 0xba, 0x17, 0xa5, 0x02, 0xe9, 0x36, 0xf0, 0xcf, 0x2b,
+ 0xe3, 0x13, 0x05, 0x30, 0x20, 0x14, 0xe6, 0x13, 0x1d, 0xda, 0xfd, 0x58, 0x14,
+ 0x21, 0x48, 0xc8, 0x13, 0xe8, 0xd4, 0xcd, 0x0a, 0xf3, 0xce, 0xf2, 0xde, 0xff,
+ 0xe7, 0x03, 0x01, 0x06, 0xff, 0x14, 0xf2, 0x1d, 0xb2, 0xc5, 0x02, 0xd3, 0xf2,
+ 0x37, 0xc9, 0xf7, 0xfa, 0x36, 0x3d, 0xd5, 0x0c, 0xed, 0xe0, 0xdc, 0x13, 0x16,
+ 0xf1, 0x0e, 0xd5, 0xd3, 0x03, 0x47, 0x2e, 0xc1, 0x35, 0xe4, 0xd8, 0x1b, 0x04,
+ 0xce, 0x1c, 0x4e, 0xcd, 0xf3, 0xf8, 0xf5, 0x19, 0x3f, 0xfa, 0x00, 0xda, 0x1b,
+ 0xe9, 0x36, 0xfe, 0x1e, 0x17, 0x30, 0xf0, 0x0c, 0x3f, 0x10, 0x23, 0xe1, 0x01,
+ 0xbf, 0xf3, 0x15, 0x1c, 0x0e, 0xf4, 0xf2, 0x51, 0xfe, 0xf0, 0x46, 0x2e, 0x17,
+ 0xf6, 0x23, 0x05, 0xf8, 0xed, 0xfe, 0xd5, 0xf5, 0xd9, 0xed, 0xce, 0x33, 0x7f,
+ 0x03, 0x0f, 0xfd, 0x2b, 0x13, 0x0c, 0xff, 0x1b, 0xf9, 0xf3, 0x2d, 0x01, 0x32,
+ 0xfe, 0xfe, 0xee, 0x06, 0x1c, 0x20, 0x22, 0xeb, 0x24, 0xcd, 0x37, 0x02, 0x3d,
+ 0x1b, 0x20, 0x20, 0xfa, 0xb2, 0xf0, 0x32, 0xb9, 0xda, 0xf3, 0xdd, 0xf3, 0x19,
+ 0xe3, 0x0f, 0x17, 0x17, 0xe0, 0xe6, 0xd5, 0x14, 0x38, 0x24, 0xdf, 0x05, 0xce,
+ 0x28, 0xc7, 0xfa, 0x39, 0x57, 0x34, 0x08, 0xbc, 0x21, 0xcd, 0xf8, 0x1d, 0xee,
+ 0x21, 0x1a, 0x21, 0x0d, 0xea, 0x3a, 0xda, 0x43, 0xda, 0xf2, 0xe6, 0xf8, 0xd2,
+ 0xe1, 0x1a, 0xd6, 0xf6, 0xc4, 0x21, 0x3f, 0xd9, 0x1f, 0x02, 0x01, 0xe5, 0xf1,
+ 0x55, 0x0f, 0xd7, 0x24, 0x18, 0x1c, 0xff, 0xed, 0x0b, 0xef, 0xe2, 0xc8, 0x11,
+ 0xec, 0xd3, 0x1a, 0x01, 0x7f, 0x64, 0xee, 0x29, 0xde, 0x33, 0x2b, 0xb1, 0x06,
+ 0x18, 0x21, 0xf0, 0x01, 0x04, 0x1c, 0xc1, 0x07, 0x17, 0x3f, 0x17, 0xce, 0xe3,
+ 0xce, 0xf9, 0x26, 0x06, 0xdf, 0x21, 0xd4, 0x0c, 0xdd, 0x08, 0x05, 0x2b, 0xf9,
+ 0x15, 0xd0, 0xdb, 0xde, 0xc6, 0x00, 0xcb, 0xd5, 0x08, 0x1d, 0x09, 0xc9, 0x1f,
+ 0xdd, 0x1c, 0x57, 0xc6, 0xc9, 0xe7, 0x3b, 0xe7, 0xdb, 0xf8, 0x28, 0xfd, 0xdd,
+ 0xae, 0xe6, 0xf9, 0x0b, 0x37, 0xe5, 0x1a, 0x06, 0x00, 0x04, 0xd5, 0x18, 0xf4,
+ 0x1b, 0xc7, 0xd4, 0x06, 0xcc, 0x14, 0x1c, 0x13, 0xd3, 0xc0, 0xe4, 0xc9, 0x5e,
+ 0xfb, 0xe6, 0xbc, 0xf2, 0x13, 0x15, 0xf2, 0x0f, 0xfd, 0x00, 0xfe, 0xc9, 0xd7,
+ 0xf3, 0x3f, 0x24, 0x2a, 0xdb, 0xdc, 0xd7, 0xd7, 0x2f, 0xf5, 0xd8, 0xfe, 0x12,
+ 0x06, 0xdb, 0xf3, 0x08, 0x00, 0xe0, 0xd4, 0xf2, 0xf9, 0xf6, 0xbd, 0xf9, 0x0f,
+ 0x13, 0xef, 0xfb, 0xfd, 0x47, 0x7f, 0xdc, 0xe6, 0x3a, 0x05, 0xdc, 0xe3, 0xf1,
+ 0x0f, 0xe9, 0xdc, 0x37, 0x04, 0xd2, 0xe5, 0x0b, 0xe0, 0xf9, 0xc3, 0x19, 0xe9,
+ 0xe9, 0x02, 0xdc, 0x01, 0xd3, 0xad, 0xea, 0xed, 0xd8, 0x2f, 0x1b, 0xfa, 0x08,
+ 0x0b, 0x0c, 0xff, 0xc3, 0x0d, 0xf2, 0xe6, 0x22, 0x30, 0x27, 0x10, 0x40, 0x3e,
+ 0xed, 0xe3, 0xff, 0x44, 0x14, 0x15, 0x1d, 0xff, 0x5e, 0xf6, 0xf0, 0x06, 0x00,
+ 0x23, 0xe7, 0xe4, 0xcc, 0xf1, 0xa5, 0xd1, 0xde, 0x18, 0x12, 0x1f, 0x0b, 0xf9,
+ 0xbd, 0xe5, 0xfd, 0xd3, 0xba, 0x29, 0x01, 0xc7, 0x22, 0x6d, 0x39, 0x3d, 0x06,
+ 0xcc, 0xd2, 0xc6, 0xe9, 0xfd, 0x0e, 0xcf, 0x08, 0x0a, 0x0e, 0xe3, 0xea, 0xd3,
+ 0xdb, 0x18, 0xc9, 0x3c, 0xfc, 0x08, 0x38, 0xf4, 0x04, 0x14, 0xea, 0x0d, 0x12,
+ 0xfd, 0x5a, 0xed, 0x44, 0x7f, 0x34, 0x42, 0xb8, 0xd2, 0xf4, 0xc7, 0x0d, 0xc5,
+ 0x01, 0x17, 0xf4, 0xec, 0xc9, 0x44, 0xad, 0x6f, 0x39, 0x1a, 0xd6, 0xfa, 0xfa,
+ 0x17, 0xd5, 0x31, 0xf9, 0x1a, 0xdf, 0x25, 0x2b, 0xea, 0xd1, 0x08, 0xe8, 0x13,
+ 0xd8, 0xef, 0x6d, 0xcd, 0x40, 0xd6, 0x51, 0xe3, 0x55, 0x19, 0x21, 0xde, 0x1d,
+ 0x57, 0x21, 0x34, 0xd8, 0x3f, 0x46, 0x44, 0x97, 0x1f, 0xe7, 0x09, 0x19, 0x35,
+ 0x17, 0x1d, 0x3c, 0x5b, 0x23, 0xbb, 0x60, 0x13, 0xc6, 0xeb, 0x6b, 0x1d, 0xe2,
+ 0x7f, 0x4b, 0xd8, 0xd2, 0xeb, 0x1e, 0xd1, 0x39, 0x10, 0x27, 0x42, 0xfa, 0x1f,
+ 0xdd, 0xf1, 0xf1, 0xd5, 0xcf, 0x32, 0xe2, 0xf0, 0x31, 0xfd, 0x3d, 0xb8, 0x0f,
+ 0x32, 0x5e, 0x2e, 0x2e, 0x75, 0x40, 0x08, 0x1c, 0x48, 0x50, 0xe2, 0xf1, 0xe2,
+ 0xc2, 0x25, 0xf5, 0x21, 0x68, 0xfa, 0xd3, 0x17, 0xeb, 0xdb, 0x0a, 0x0a, 0x0c,
+ 0x27, 0xed, 0x0e, 0xd6, 0x40, 0x3c, 0x39, 0x0d, 0xb2, 0xed, 0x18, 0xd9, 0xf6,
+ 0x06, 0x4b, 0x2b, 0xcc, 0x05, 0xdd, 0xd0, 0x35, 0x23, 0x02, 0x4f, 0x4e, 0x05,
+ 0xdd, 0xe8, 0x18, 0xf5, 0x03, 0x07, 0xdb, 0xe9, 0xe8, 0x46, 0x24, 0x27, 0x1d,
+ 0xfb, 0xbe, 0xff, 0xfb, 0xab, 0x55, 0xd1, 0x40, 0x06, 0xf7, 0x09, 0x32, 0xf0,
+ 0x08, 0xe6, 0xeb, 0x53, 0xe6, 0xf0, 0x67, 0x0f, 0x05, 0x11, 0xd6, 0xe1, 0xbf,
+ 0xd4, 0x24, 0xe9, 0x25, 0xfe, 0xed, 0xce, 0x00, 0x16, 0x21, 0xf8, 0x10, 0x71,
+ 0xcb, 0xeb, 0xdc, 0xf1, 0xef, 0xfd, 0x06, 0xe2, 0x24, 0xd4, 0xe9, 0xf4, 0x23,
+ 0x10, 0xff, 0xf8, 0x28, 0xf5, 0xee, 0xf0, 0xe2, 0xe6, 0xe1, 0xab, 0xcf, 0x39,
+ 0x2a, 0xad, 0xe2, 0xd9, 0xbf, 0xf4, 0x62, 0xa9, 0xcf, 0x2a, 0x24, 0x1c, 0x0d,
+ 0xd7, 0x1a, 0xd0, 0xa2, 0xfb, 0x14, 0x08, 0xe0, 0xda, 0xd7, 0xf4, 0xd6, 0xec,
+ 0x16, 0xf1, 0xf7, 0xcd, 0x2e, 0xf4, 0x81, 0xd3, 0x31, 0x89, 0x9d, 0xae, 0x04,
+ 0xe6, 0x5e, 0x17, 0xd3, 0xf0, 0xd2, 0x2e, 0x19, 0x06, 0x0e, 0xf1, 0x13, 0x14,
+ 0xf4, 0xda, 0xc4, 0xf6, 0xa9, 0xba, 0x3b, 0xdf, 0xf3, 0xbb, 0x11, 0xee, 0xf4,
+ 0x20, 0xef, 0x04, 0x1a, 0x02, 0x06, 0x32, 0x06, 0x0e, 0x12, 0xba, 0x14, 0x14,
+ 0x39, 0xf2, 0xcc, 0x05, 0xf3, 0x03, 0xd6, 0xfc, 0x03, 0xf2, 0x36, 0xee, 0xfe,
+ 0x2f, 0x42, 0xe1, 0x35, 0xc8, 0x10, 0xed, 0xe6, 0x1b, 0xf0, 0xcc, 0x05, 0x77,
+ 0xf8, 0x13, 0x0e, 0xc3, 0xcc, 0x19, 0x6c, 0x7f, 0xd9, 0xdd, 0xdc, 0xf9, 0xc8,
+ 0xf0, 0x08, 0xce, 0xd1, 0x4f, 0xee, 0x4c, 0xf7, 0x22, 0x22, 0xfb, 0x0d, 0x5d,
+ 0xcb, 0xfc, 0x16, 0xf7, 0xef, 0xfd, 0xe4, 0xf6, 0xe2, 0x27, 0x9d, 0xe0, 0xc4,
+ 0xec, 0xf9, 0xe7, 0xef, 0xf8, 0xf2, 0x21, 0x10, 0xf9, 0x02, 0x34, 0x15, 0x33,
+ 0xe2, 0xe9, 0xf5, 0xa7, 0x61, 0x27, 0xcd, 0x16, 0x0a, 0xcf, 0xed, 0xb9, 0xf0,
+ 0xed, 0x05, 0xf0, 0xb1, 0xf5, 0xb4, 0x00, 0x1e, 0xe9, 0xa4, 0xd5, 0x2c, 0x0d,
+ 0x3d, 0xd3, 0xc5, 0xd5, 0x0f, 0xd1, 0xea, 0xc0, 0x01, 0xea, 0xbb, 0xf3, 0xee,
+ 0xd7, 0x0c, 0x0e, 0xf1, 0xa8, 0x05, 0x17, 0xe9, 0x17, 0xfa, 0xfb, 0xfb, 0x1d,
+ 0xdd, 0xc3, 0x0f, 0x02, 0xe8, 0x1a, 0x0c, 0xdf, 0x48, 0x4c, 0x41, 0xca, 0x27,
+ 0x12, 0xd2, 0x93, 0xf6, 0xd5, 0xd7, 0xf0, 0x4c, 0x51, 0xeb, 0xf3, 0x56, 0x1b,
+ 0xa9, 0x39, 0x03, 0x04, 0x7f, 0xd8, 0x26, 0x0e, 0x23, 0xdc, 0x06, 0xeb, 0xce,
+ 0xb8, 0x2f, 0xe3, 0xec, 0x37, 0x07, 0x26, 0x23, 0x4f, 0x32, 0x09, 0xd4, 0x2f,
+ 0xff, 0xa4, 0x7d, 0x19, 0x32, 0x67, 0x07, 0xe3, 0x00, 0xab, 0xde, 0xc9, 0xf3,
+ 0xe5, 0x0f, 0xee, 0xbe, 0x29, 0xf1, 0xd8, 0x1b, 0xcb, 0x12, 0xe2, 0xf8, 0xe2,
+ 0xe8, 0x20, 0x26, 0xda, 0x63, 0x0c, 0xd6, 0x28, 0xff, 0xc1, 0x49, 0x5f, 0x20,
+ 0xde, 0xed, 0xf7, 0xee, 0x02, 0x3c, 0x10, 0x22, 0x06, 0x1a, 0xe4, 0xe9, 0x0d,
+ 0xf6, 0xe8, 0xff, 0xef, 0xe7, 0x00, 0x2b, 0xf3, 0x33, 0xfb, 0x16, 0xd8, 0x52,
+ 0xfe, 0x2e, 0x07, 0x01, 0x25, 0x06, 0x20, 0x35, 0x25, 0x02, 0x2e, 0x0f, 0xfe,
+ 0x2f, 0xdb, 0x45, 0x0e, 0x43, 0x2e, 0xe5, 0x02, 0xe5, 0x01, 0x1f, 0xe7, 0x18,
+ 0xf4, 0x22, 0x06, 0x1d, 0x18, 0xf7, 0x2d, 0xe3, 0xbb, 0xc9, 0x12, 0xce, 0x10,
+ 0x1e, 0x67, 0xf2, 0x9d, 0xfa, 0x09, 0xd3, 0xca, 0x38, 0x56, 0xed, 0x3f, 0x0e,
+ 0xb3, 0x71, 0x34, 0xe0, 0xbb, 0xde, 0xd8, 0xad, 0x20, 0x3b, 0x23, 0x2a, 0x01,
+ 0xdd, 0xc4, 0xcd, 0xec, 0xec, 0x01, 0x37, 0xfe, 0x06, 0xb6, 0xbe, 0x3e, 0xd9,
+ 0xfb, 0x09, 0xc9, 0x58, 0x2e, 0xf2, 0x29, 0x7c, 0x3d, 0xe1, 0xa0, 0x26, 0xdc,
+ 0xf5, 0x34, 0xa1, 0x1f, 0x19, 0xb1, 0xe0, 0x1f, 0x7c, 0xfa, 0xde, 0xf2, 0x0d,
+ 0x10, 0xdb, 0x30, 0xf5, 0x0e, 0x9d, 0xdf, 0xfd, 0xed, 0x52, 0x20, 0x06, 0x0a,
+ 0xe3, 0xc9, 0x24, 0xe9, 0x0d, 0x52, 0xe1, 0xdf, 0x37, 0x48, 0xb3, 0xa4, 0x23,
+ 0xac, 0x37, 0x09, 0xd4, 0x24, 0xfa, 0x28, 0x7f, 0xcb, 0x0e, 0x17, 0x29, 0x0c,
+ 0xc4, 0xcf, 0xfa, 0xdb, 0xb5, 0xe9, 0xb8, 0x0e, 0x15, 0xb1, 0xfd, 0xe1, 0xd8,
+ 0x0b, 0xf3, 0x20, 0xe9, 0xff, 0xcc, 0x1f, 0xc4, 0xde, 0x08, 0x22, 0x38, 0xe0,
+ 0x00, 0xf4, 0x1a, 0x36, 0xaa, 0x34, 0x1d, 0x29, 0xcf, 0x2f, 0xea, 0x05, 0x30,
+ 0x4e, 0x03, 0xdf, 0x07, 0xc9, 0xba, 0x52, 0xf3, 0x39, 0x1f, 0xfa, 0xc2, 0x47,
+ 0xba, 0xc5, 0xef, 0xf9, 0xf9, 0x2c, 0xfd, 0xf4, 0xf9, 0xe2, 0x24, 0xf8, 0x15,
+ 0x10, 0xf5, 0x4d, 0xf5, 0x08, 0x3c, 0xe9, 0xf9, 0xc2, 0x0f, 0xba, 0x3f, 0xe3,
+ 0x81, 0x37, 0xf5, 0x21, 0xb9, 0x3d, 0x10, 0x0a, 0xb9, 0x08, 0x11, 0xf8, 0x15,
+ 0x12, 0x4b, 0x27, 0xe1, 0xe4, 0xdd, 0xe1, 0x30, 0xd9, 0x76, 0xfd, 0xf2, 0x0f,
+ 0x09, 0xf5, 0xef, 0x27, 0xfc, 0x90, 0x0a, 0xf5, 0x12, 0xd0, 0x39, 0xf4, 0x0b,
+ 0xfa, 0x11, 0x06, 0xfa, 0x0b, 0x51, 0x38, 0xe3, 0x36, 0xdd, 0x9c, 0xe8, 0xff,
+ 0x22, 0x28, 0xaf, 0x26, 0x11, 0xd0, 0xc6, 0xf1, 0x0d, 0xeb, 0x25, 0xce, 0xac,
+ 0x33, 0x0b, 0xd3, 0x0f, 0xc0, 0xd8, 0xe5, 0x47, 0xcd, 0xb4, 0x59, 0xa6, 0x5b,
+ 0xff, 0xdb, 0xf8, 0xed, 0xb7, 0x24, 0x37, 0x07, 0x96, 0xee, 0x7f, 0xb8, 0xe6,
+ 0x1e, 0xa0, 0xc6, 0x3f, 0xc2, 0x48, 0x8c, 0x33, 0x23, 0xe3, 0xea, 0xc5, 0xf1,
+ 0xf0, 0x28, 0x07, 0x3b, 0x2c, 0xbc, 0x10, 0xc3, 0x3a, 0xf5, 0xdf, 0x35, 0x17,
+ 0x92, 0x58, 0xc3, 0xf7, 0x50, 0xdf, 0xc0, 0xaf, 0x02, 0xfd, 0x1b, 0xed, 0x05,
+ 0x3c, 0xf3, 0x08, 0x19, 0x67, 0xd3, 0xe9, 0x39, 0xbf, 0xc1, 0xc2, 0x24, 0xe1,
+ 0xbc, 0xb0, 0x17, 0xd6, 0xe1, 0x3d, 0x26, 0xc6, 0x34, 0x23, 0xcd, 0xf5, 0xfd,
+ 0x0c, 0x0f, 0x33, 0x03, 0x09, 0xeb, 0xb3, 0x08, 0x12, 0xfc, 0xfa, 0x00, 0xe9,
+ 0x39, 0xc3, 0xf3, 0xf3, 0xfe, 0xb7, 0x19, 0x25, 0x17, 0xee, 0xe4, 0xe9, 0xdd,
+ 0xd4, 0xd0, 0xd4, 0x1c, 0xd8, 0x22, 0x36, 0x1e, 0x1e, 0x7f, 0x2e, 0x18, 0x29,
+ 0x2e, 0x14, 0x41, 0xed, 0xed, 0x3c, 0x01, 0xd1, 0x1b, 0x14, 0xc5, 0x30, 0xdb,
+ 0xf9, 0x22, 0xc5, 0x14, 0x10, 0x0f, 0x31, 0x03, 0x3e, 0xca, 0xe3, 0xff, 0x1e,
+ 0xf7, 0xe7, 0x2d, 0x33, 0x24, 0x17, 0xe6, 0x11, 0x0f, 0xd4, 0xd1, 0x21, 0x0c,
+ 0x18, 0xfa, 0x1a, 0x52, 0x24, 0x18, 0x49, 0xf6, 0x1e, 0xf4, 0xe7, 0x18, 0x25,
+ 0x38, 0xf7, 0xf2, 0xdd, 0x44, 0x46, 0x62, 0x51, 0xd5, 0x3d, 0x12, 0x14, 0x19,
+ 0x1e, 0x5a, 0x03, 0xe5, 0x18, 0x03, 0x11, 0x11, 0x17, 0xe8, 0xfa, 0x1c, 0x3a,
+ 0xfc, 0x05, 0x2a, 0xf5, 0x06, 0xf4, 0xd2, 0x28, 0x1f, 0xe8, 0xd3, 0x16, 0x21,
+ 0x32, 0xfa, 0x07, 0x54, 0xfc, 0x00, 0xe4, 0x53, 0x17, 0xf1, 0xf3, 0xf6, 0x25,
+ 0x17, 0x25, 0x4c, 0xfa, 0x1a, 0x07, 0x0e, 0xca, 0xe1, 0xea, 0x08, 0xde, 0xc8,
+ 0xdf, 0xc9, 0x13, 0x0a, 0x26, 0x02, 0x23, 0xf9, 0x1c, 0xff, 0xcb, 0xa1, 0xfc,
+ 0x29, 0xdd, 0x06, 0xcf, 0x49, 0x23, 0x5e, 0x29, 0xfd, 0x7a, 0xf3, 0x03, 0x0f,
+ 0x1f, 0xe1, 0xe7, 0xb5, 0x26, 0x31, 0xc4, 0x2f, 0x97, 0xbf, 0x20, 0x1d, 0x18,
+ 0x23, 0xf7, 0x09, 0x15, 0x11, 0x81, 0x2f, 0x3e, 0x66, 0xf4, 0xe9, 0xc3, 0xfb,
+ 0xe9, 0x49, 0xcb, 0xce, 0x0a, 0xf9, 0xa4, 0xf3, 0xc8, 0x44, 0x14, 0xec, 0x21,
+ 0x06, 0xff, 0xa9, 0xea, 0x16, 0xfb, 0xd0, 0x17, 0x14, 0xc8, 0x36, 0x1b, 0xbd,
+ 0xe3, 0x2e, 0xe7, 0xf4, 0x0c, 0x2b, 0x05, 0xa9, 0xcf, 0x45, 0xf0, 0x9e, 0x13,
+ 0x19, 0x60, 0xbc, 0xea, 0x1a, 0x5a, 0xd9, 0x41, 0x72, 0x31, 0x02, 0x67, 0xfd,
+ 0x1e, 0xdf, 0x15, 0x2c, 0x41, 0x0f, 0x08, 0x14, 0x10, 0xdb, 0xfc, 0xda, 0x50,
+ 0x0f, 0x19, 0x02, 0x08, 0xf9, 0x31, 0x04, 0xce, 0xb8, 0x23, 0xc6, 0x08, 0x07,
+ 0x26, 0xfd, 0xee, 0x05, 0xf9, 0xd2, 0xeb, 0x1e, 0xbd, 0x01, 0xe4, 0xa2, 0xcd,
+ 0xd4, 0xd3, 0xe8, 0x70, 0xec, 0x0e, 0x06, 0xd8, 0xd5, 0xcb, 0x02, 0x1f, 0xc8,
+ 0xfc, 0xc1, 0x16, 0x0e, 0x18, 0x2e, 0x05, 0xf2, 0xf4, 0xec, 0xfe, 0x3a, 0xfb,
+ 0x02, 0x0b, 0xfa, 0x36, 0x92, 0x01, 0x20, 0xef, 0xed, 0xec, 0x23, 0x3b, 0x11,
+ 0x1f, 0xd3, 0xfa, 0x11, 0xa6, 0xe2, 0x9b, 0xda, 0x28, 0xf0, 0x08, 0xa9, 0x73,
+ 0xf4, 0xd7, 0xd3, 0xbf, 0xe6, 0xef, 0x33, 0xad, 0xc9, 0x1f, 0x25, 0x19, 0x3f,
+ 0x0d, 0x25, 0xe2, 0xee, 0x13, 0xf8, 0x2f, 0xbf, 0x04, 0x09, 0x7f, 0xf1, 0x2a,
+ 0xfa, 0xd2, 0x2a, 0x20, 0x04, 0x47, 0xfe, 0x10, 0x09, 0xae, 0x17, 0x41, 0xd6,
+ 0x46, 0x2f, 0xea, 0x16, 0x34, 0x12, 0xea, 0x0d, 0x4c, 0x27, 0xf6, 0x05, 0x87,
+ 0x2b, 0x01, 0x10, 0xe8, 0x1a, 0xdc, 0x0d, 0xf8, 0x03, 0xee, 0x26, 0x44, 0x18,
+ 0xce, 0x14, 0xf1, 0x35, 0x1c, 0x11, 0xe8, 0x31, 0xfa, 0xdc, 0x03, 0x05, 0x33,
+ 0x01, 0xd0, 0x03, 0x21, 0xc7, 0x26, 0x2f, 0x1a, 0x0e, 0x23, 0x2b, 0xee, 0x39,
+ 0x1c, 0xe9, 0xda, 0x55, 0x10, 0x01, 0x09, 0x13, 0x09, 0xf6, 0x25, 0x08, 0x0e,
+ 0x27, 0x19, 0xbd, 0x06, 0x12, 0x30, 0xee, 0xe7, 0x38, 0x05, 0x27, 0x20, 0x0f,
+ 0x41, 0xd1, 0x08, 0x33, 0x51, 0x51, 0x17, 0x0f, 0x2b, 0x3f, 0x0b, 0xcb, 0x01,
+ 0xeb, 0x28, 0x1c, 0xde, 0xf7, 0x4b, 0x14, 0x01, 0x10, 0x45, 0x0e, 0xe6, 0x0f,
+ 0x00, 0xf1, 0xf3, 0xff, 0x13, 0x16, 0x06, 0x29, 0xc4, 0xdf, 0x4d, 0x5f, 0xe7,
+ 0x0e, 0xf9, 0xff, 0xeb, 0x19, 0x27, 0x59, 0xe6, 0x0c, 0x04, 0x7f, 0x13, 0xe0,
+ 0x09, 0x28, 0x23, 0x61, 0xf6, 0xe7, 0x16, 0xc8, 0x36, 0x19, 0x43, 0x02, 0xfe,
+ 0xb9, 0xe2, 0x05, 0xe8, 0xf5, 0x26, 0x05, 0xcd, 0x31, 0x28, 0xfc, 0x21, 0x18,
+ 0xfc, 0xd1, 0x23, 0xe7, 0x14, 0xc8, 0x25, 0xea, 0xd3, 0xf6, 0xee, 0x24, 0x1f,
+ 0x0d, 0xe8, 0xb8, 0x01, 0x30, 0xe1, 0xe6, 0x0c, 0x0a, 0x03, 0x3d, 0x3d, 0x15,
+ 0x3d, 0xf9, 0x19, 0xff, 0xc4, 0xf2, 0x13, 0xea, 0xe6, 0x3a, 0xf9, 0x29, 0xdb,
+ 0x5a, 0xe6, 0xdc, 0x18, 0xff, 0xe2, 0x44, 0x15, 0x1d, 0xf6, 0xf6, 0x24, 0xcf,
+ 0xf1, 0x08, 0xe0, 0x54, 0x0d, 0x1b, 0x3a, 0xf9, 0x04, 0xd5, 0x35, 0xfd, 0x3a,
+ 0x5b, 0xd4, 0xf7, 0x51, 0xe4, 0xd8, 0x1c, 0xf6, 0x11, 0xdf, 0xd9, 0x07, 0xd1,
+ 0xfe, 0xff, 0x04, 0xff, 0xfd, 0x02, 0xff, 0x0f, 0x7f, 0xe9, 0xe6, 0x1b, 0x0c,
+ 0x0b, 0x35, 0xf9, 0x12, 0x66, 0xe8, 0x2e, 0xe8, 0x6a, 0x15, 0x09, 0xfb, 0xfc,
+ 0xd7, 0xec, 0xf3, 0x05, 0x0b, 0xfb, 0x4a, 0x0c, 0x32, 0xe7, 0x10, 0xe7, 0x01,
+ 0xe3, 0xca, 0x0c, 0xd6, 0xf1, 0xed, 0x37, 0x13, 0xea, 0xff, 0x01, 0xbd, 0x1b,
+ 0x00, 0x15, 0xf3, 0xf4, 0xee, 0xff, 0x17, 0xf7, 0x34, 0x01, 0xff, 0x2a, 0x0c,
+ 0x1f, 0x10, 0xe0, 0xfc, 0x16, 0xfe, 0x06, 0xee, 0x08, 0xe2, 0xcd, 0x06, 0xf2,
+ 0xf6, 0xe4, 0xea, 0xeb, 0xd6, 0xbe, 0x1f, 0x16, 0xe4, 0xf0, 0xce, 0xfd, 0x05,
+ 0x0b, 0x0c, 0x03, 0xf3, 0x03, 0x18, 0x06, 0xf6, 0xe2, 0x1e, 0x00, 0x07, 0xe5,
+ 0x13, 0xf7, 0xea, 0x18, 0xf8, 0x27, 0xcf, 0xd3, 0xda, 0xe4, 0x0b, 0x20, 0xd4,
+ 0x03, 0x33, 0xf5, 0x18, 0x16, 0x7f, 0xe2, 0xf9, 0x18, 0xcb, 0x2e, 0xe4, 0x05,
+ 0xed, 0x19, 0xf7, 0x15, 0x14, 0xea, 0x34, 0xe8, 0x19, 0xf6, 0x09, 0x0a, 0xfb,
+ 0xbd, 0xfe, 0xeb, 0x01, 0x03, 0x44, 0x1a, 0x11, 0xc7, 0xb3, 0xf6, 0x19, 0x35,
+ 0xf7, 0x07, 0xeb, 0x20, 0x1f, 0x12, 0xf4, 0xf7, 0xdf, 0x12, 0xff, 0xda, 0x2d,
+ 0xfb, 0xc2, 0xbc, 0x2d, 0x07, 0x33, 0xdd, 0xfa, 0xf8, 0x33, 0xef, 0x10, 0x2b,
+ 0xe4, 0x1b, 0xc5, 0x65, 0xb2, 0x4a, 0x06, 0x0f, 0xb7, 0x6a, 0x56, 0x55, 0xe2,
+ 0xf7, 0xbd, 0x16, 0xdd, 0x10, 0xf2, 0xd3, 0xe9, 0x55, 0x53, 0x03, 0x7f, 0xc0,
+ 0xe1, 0xf6, 0xf8, 0x22, 0x13, 0x06, 0x4d, 0xdc, 0x1a, 0xe9, 0xfa, 0x37, 0xf0,
+ 0xaa, 0xc3, 0xe9, 0x08, 0xd3, 0x27, 0xcc, 0x06, 0x1e, 0xd9, 0xef, 0xf3, 0x15,
+ 0xdc, 0x18, 0x27, 0x32, 0xdd, 0x03, 0xfb, 0xed, 0x0e, 0x19, 0xc3, 0xd6, 0xed,
+ 0xca, 0xf7, 0xb1, 0x08, 0xf2, 0x04, 0xf8, 0xd4, 0x1b, 0xe4, 0x15, 0x5b, 0xd0,
+ 0xab, 0xd1, 0x41, 0xe4, 0x12, 0xcb, 0xc9, 0x0d, 0xf4, 0xf6, 0xc2, 0x0f, 0xcc,
+ 0xdd, 0x9e, 0x02, 0x2b, 0xdd, 0x1d, 0xf6, 0xf8, 0xec, 0xcb, 0xea, 0xef, 0xf3,
+ 0x0d, 0x2b, 0x1b, 0x0f, 0xfe, 0xfd, 0xe9, 0x55, 0x32, 0x49, 0xca, 0x04, 0x29,
+ 0xe9, 0x3f, 0xca, 0x09, 0x59, 0x05, 0xd7, 0xf5, 0x14, 0xe0, 0xfd, 0x7f, 0x02,
+ 0xd6, 0x08, 0xf0, 0xd8, 0xfc, 0xae, 0xea, 0xce, 0xeb, 0x04, 0xfa, 0x55, 0xe0,
+ 0x19, 0x0b, 0xd3, 0xc7, 0xaf, 0x0a, 0xf3, 0xcc, 0xff, 0x2e, 0x0d, 0x16, 0x10,
+ 0x00, 0xe0, 0xb5, 0xe4, 0xae, 0xba, 0x20, 0x02, 0xe6, 0x19, 0xd9, 0xfd, 0xd6,
+ 0xf8, 0x02, 0x32, 0xeb, 0xfa, 0xc4, 0xe4, 0xaf, 0x17, 0xcd, 0xfe, 0x02, 0x1d,
+ 0x11, 0xd8, 0x53, 0x28, 0x6a, 0x44, 0x10, 0xfa, 0xde, 0xee, 0xef, 0x2d, 0x30,
+ 0xc8, 0xa9, 0x49, 0xdc, 0x14, 0xf9, 0xee, 0xff, 0xf1, 0x3e, 0xf5, 0xec, 0x51,
+ 0xf6, 0xea, 0xde, 0xc4, 0x28, 0xb0, 0x33, 0x2e, 0x4a, 0xf3, 0x08, 0x01, 0x36,
+ 0x10, 0x42, 0x01, 0x09, 0xf7, 0xfd, 0x73, 0xbb, 0x33, 0xd0, 0xbf, 0x0e, 0x30,
+ 0x08, 0xf5, 0xf6, 0x64, 0xd4, 0x1d, 0xc0, 0x3b, 0x13, 0xbb, 0x1b, 0xe7, 0x70,
+ 0xec, 0x36, 0x20, 0xb3, 0xc1, 0x50, 0x09, 0xb9, 0xf9, 0x4f, 0x72, 0x62, 0x76,
+ 0x1c, 0x09, 0x22, 0x3c, 0xf1, 0x11, 0xb4, 0x26, 0xe5, 0x26, 0xff, 0xbd, 0x09,
+ 0xb1, 0x06, 0xe8, 0x31, 0x43, 0xed, 0xf4, 0x33, 0xae, 0xc8, 0x40, 0x46, 0xde,
+ 0xa9, 0x1e, 0x07, 0xc2, 0x7e, 0xe0, 0x33, 0x5b, 0xa9, 0xee, 0xd7, 0xd5, 0x12,
+ 0xa8, 0xb4, 0x96, 0xbb, 0xd7, 0xff, 0x2d, 0xbe, 0xae, 0xd4, 0x82, 0xdd, 0x14,
+ 0xf7, 0xd8, 0x50, 0x00, 0x35, 0x27, 0xbc, 0xd6, 0xef, 0x0f, 0x04, 0x97, 0x1d,
+ 0x13, 0x09, 0xfd, 0xf8, 0xc4, 0xd6, 0xee, 0x09, 0xbc, 0x12, 0x19, 0x16, 0xdf,
+ 0x9a, 0xcd, 0x01, 0xfc, 0x0c, 0x9f, 0x34, 0xbe, 0x5a, 0xa0, 0x1b, 0x2a, 0xfd,
+ 0xd3, 0x2b, 0x3b, 0xb3, 0x7f, 0x05, 0xc6, 0xec, 0x33, 0x00, 0xb2, 0xf9, 0xe6,
+ 0x38, 0xf9, 0xcd, 0xe7, 0x6c, 0x74, 0xd7, 0xcc, 0x76, 0x27, 0x19, 0x0a, 0x0f,
+ 0x54, 0x1f, 0xc4, 0xb4, 0x09, 0xbf, 0xd0, 0x5b, 0x54, 0x07, 0x1a, 0x11, 0xd9,
+ 0x15, 0x23, 0x17, 0xc2, 0x1f, 0x20, 0xdd, 0xf3, 0xe5, 0xdb, 0xf2, 0xbf, 0x06,
+ 0xdc, 0xbe, 0xe4, 0xe8, 0x3a, 0xab, 0xbd, 0xf4, 0x67, 0x1b, 0x4a, 0xc7, 0x17,
+ 0xd9, 0xc2, 0x4d, 0xa9, 0xd6, 0xd8, 0x03, 0xfb, 0xf0, 0xdf, 0xea, 0x1e, 0xb6,
+ 0xdd, 0xd3, 0xd0, 0xa6, 0x00, 0xca, 0x12, 0xfe, 0x13, 0xf8, 0x0b, 0x17, 0xf1,
+ 0x31, 0xe1, 0x46, 0xe7, 0x09, 0xc4, 0xec, 0xc1, 0xc9, 0x4a, 0xf0, 0x0e, 0x31,
+ 0xcf, 0xe1, 0x45, 0xc0, 0x37, 0x53, 0x1d, 0xc5, 0x0e, 0x32, 0xe6, 0xff, 0x1e,
+ 0x81, 0x02, 0x34, 0xba, 0xff, 0xf9, 0x1c, 0x30, 0xb2, 0x40, 0x59, 0x0c, 0x09,
+ 0x26, 0xa5, 0xee, 0x0f, 0xfc, 0x13, 0xb5, 0x12, 0xfb, 0x2a, 0xdd, 0xf7, 0x42,
+ 0xe4, 0xe3, 0xd0, 0xe8, 0xda, 0xd3, 0xda, 0x08, 0xe5, 0xbf, 0x3a, 0xdf, 0xc2,
+ 0x06, 0xe7, 0xc6, 0x2f, 0x00, 0xe8, 0xef, 0xec, 0xd7, 0xf0, 0xae, 0x4e, 0xdd,
+ 0x0d, 0xe2, 0xb2, 0xc2, 0xdf, 0x5c, 0x16, 0xc0, 0x59, 0xfc, 0xbe, 0xdc, 0x16,
+ 0x64, 0xf1, 0xef, 0x1c, 0xf6, 0x08, 0xc6, 0x16, 0x7f, 0xe4, 0x5b, 0x0b, 0xf9,
+ 0xf0, 0xeb, 0xd5, 0xf6, 0x2d, 0x05, 0x19, 0xf1, 0x10, 0xb3, 0xe9, 0xd2, 0xed,
+ 0xfd, 0x20, 0x07, 0xe5, 0x38, 0xf3, 0x0b, 0x64, 0xbf, 0xf5, 0xf8, 0xc5, 0x08,
+ 0x25, 0xeb, 0xfb, 0x6a, 0xc9, 0xbb, 0xe9, 0x30, 0xeb, 0x39, 0xc3, 0xff, 0x13,
+ 0xe8, 0x11, 0xe5, 0x39, 0xc1, 0x64, 0xc9, 0x0d, 0x32, 0x07, 0xd1, 0xdd, 0x00,
+ 0x39, 0xf0, 0x00, 0x1f, 0x13, 0x27, 0xe3, 0x02, 0x4a, 0xbe, 0x12, 0xfc, 0xfd,
+ 0x15, 0xf1, 0xe1, 0x11, 0x26, 0x3c, 0xe1, 0x10, 0x4b, 0x6a, 0xf0, 0xc8, 0xe8,
+ 0x47, 0xfa, 0x31, 0x1c, 0xcd, 0xd5, 0xce, 0x59, 0xe5, 0xf3, 0xd5, 0x35, 0xcf,
+ 0xd9, 0xe4, 0xfd, 0xc1, 0xd2, 0xbf, 0x4e, 0xe9, 0x0f, 0xe5, 0xcc, 0x10, 0xe2,
+ 0xab, 0x17, 0xd9, 0xfa, 0xd4, 0x4d, 0x19, 0x04, 0x02, 0x03, 0xad, 0xf5, 0x3b,
+ 0xd8, 0xed, 0x4c, 0xc4, 0xe5, 0xd7, 0x0b, 0xec, 0xeb, 0x28, 0x4b, 0xed, 0xcf,
+ 0x45, 0xca, 0xc3, 0x04, 0x1e, 0x39, 0x25, 0xc0, 0x39, 0xfb, 0x21, 0x20, 0x05,
+ 0x1e, 0x35, 0xfd, 0xcc, 0x2f, 0xdd, 0x15, 0x44, 0xfb, 0xf5, 0xe5, 0xbe, 0x0f,
+ 0xe1, 0x23, 0x19, 0xdd, 0x11, 0x20, 0xd9, 0xe3, 0x08, 0xfb, 0x0f, 0x07, 0x2a,
+ 0x15, 0xf2, 0x13, 0xbd, 0x2b, 0xf3, 0x19, 0xf5, 0x81, 0xe5, 0x16, 0xd1, 0x3d,
+ 0xbf, 0x09, 0x1c, 0x16, 0xfe, 0xd6, 0xd8, 0x3f, 0x2c, 0xff, 0x16, 0xf8, 0xfa,
+ 0x5a, 0xe0, 0x05, 0xb9, 0x00, 0xcb, 0xb1, 0xf1, 0x1e, 0xcf, 0x3b, 0xf7, 0xb9,
+ 0xe6, 0xfb, 0x0c, 0xef, 0x24, 0x19, 0xd3, 0xd8, 0xbf, 0x36, 0x5b, 0x04, 0xf6,
+ 0xc8, 0xdf, 0x19, 0x06, 0xd5, 0x1c, 0x08, 0x0d, 0xe7, 0xdd, 0xea, 0xbf, 0xec,
+ 0xea, 0x70, 0xe3, 0xcd, 0xba, 0x26, 0xe5, 0x08, 0x7f, 0xd1, 0x0d, 0x09, 0x12,
+ 0x0a, 0xc1, 0xed, 0xf8, 0xfd, 0xf5, 0x33, 0x01, 0x0f, 0xde, 0xcc, 0xf6, 0xb5,
+ 0x2c, 0xea, 0xfa, 0xe3, 0x07, 0x0e, 0x4e, 0x28, 0x04, 0xd2, 0xda, 0xfe, 0xdf,
+ 0x21, 0xdd, 0xe7, 0x4a, 0x00, 0xcb, 0x99, 0x10, 0x28, 0xed, 0x0e, 0xee, 0xef,
+ 0x0a, 0xeb, 0xd9, 0x50, 0xf8, 0xcb, 0x3f, 0x01, 0xfe, 0x0c, 0xd6, 0x00, 0x16,
+ 0x30, 0x0b, 0xeb, 0xf3, 0x20, 0x12, 0x07, 0x50, 0x1e, 0x05, 0xc0, 0x20, 0xdf,
+ 0xdb, 0x23, 0xce, 0xe5, 0xeb, 0x25, 0xdf, 0xe9, 0xe9, 0xcc, 0xf3, 0x2e, 0x1d,
+ 0xf1, 0x1b, 0x04, 0x4a, 0x41, 0x73, 0xa9, 0x65, 0x01, 0x2d, 0xbb, 0xee, 0x0f,
+ 0xd4, 0xb7, 0x4c, 0xb2, 0x34, 0xeb, 0x05, 0xa4, 0xc1, 0x10, 0xd3, 0xe2, 0x9e,
+ 0x90, 0x27, 0x29, 0xf9, 0xc5, 0x2b, 0xee, 0xc2, 0xe6, 0xff, 0xe6, 0x35, 0xfe,
+ 0xcf, 0x3a, 0xe0, 0xea, 0x37, 0xd9, 0x06, 0xf4, 0xbe, 0x42, 0x42, 0xe0, 0xe4,
+ 0xe7, 0x3f, 0x35, 0x4c, 0x0c, 0xe4, 0xb3, 0xaf, 0x1f, 0xbc, 0xcb, 0x4d, 0x05,
+ 0x10, 0xf9, 0xf4, 0x7f, 0x1b, 0x0e, 0x26, 0xef, 0x16, 0x02, 0xfb, 0x2a, 0x12,
+ 0x48, 0x1d, 0x07, 0xde, 0x95, 0xda, 0x37, 0x3f, 0xdd, 0x1f, 0x2a, 0x0e, 0xfe,
+ 0xd9, 0xf6, 0xd3, 0x00, 0x13, 0xf2, 0xd6, 0x43, 0x0a, 0x0c, 0xbf, 0xcf, 0x3f,
+ 0xf5, 0xe6, 0xfb, 0xec, 0x01, 0xf5, 0xd2, 0x18, 0x1c, 0x44, 0xcf, 0xfd, 0x31,
+ 0xcc, 0x3f, 0x12, 0x10, 0x1e, 0x04, 0xa2, 0x4f, 0xcd, 0x12, 0x10, 0xb6, 0xc8,
+ 0x40, 0x1b, 0x25, 0x17, 0xb9, 0xff, 0xdd, 0x0c, 0xfc, 0xe1, 0x1b, 0x0f, 0xd7,
+ 0xd7, 0x3b, 0xfe, 0x02, 0xbc, 0xda, 0xdf, 0xaf, 0xd7, 0xd8, 0xe8, 0x44, 0xd1,
+ 0x7b, 0xee, 0x27, 0xca, 0xd1, 0x10, 0xce, 0x8f, 0x3f, 0xcc, 0x36, 0x0f, 0x23,
+ 0xf1, 0xff, 0x0e, 0xd3, 0xc3, 0x1f, 0xfe, 0x35, 0x09, 0x64, 0xbd, 0xf9, 0x0c,
+ 0x49, 0xcc, 0x0e, 0x26, 0x07, 0x1e, 0xd8, 0x10, 0xd8, 0xef, 0x2f, 0xda, 0x40,
+ 0x02, 0xa9, 0xf9, 0xd2, 0xf7, 0xf8, 0xf5, 0x1c, 0x4f, 0x0b, 0x0e, 0x2b, 0x26,
+ 0xf3, 0x78, 0x4b, 0x35, 0x2d, 0xf7, 0x3b, 0xe1, 0x48, 0x8c, 0x00, 0x12, 0x01,
+ 0x81, 0xf9, 0xe9, 0x2e, 0x2d, 0xe5, 0x40, 0x15, 0x55, 0x12, 0xe0, 0x17, 0x0b,
+ 0x28, 0xd3, 0xab, 0xf7, 0x04, 0xaf, 0x67, 0x02, 0x69, 0xef, 0x25, 0x10, 0xfa,
+ 0xec, 0xcb, 0x2a, 0x03, 0x1b, 0xef, 0xe7, 0x0d, 0x04, 0x55, 0xfc, 0x2b, 0x20,
+ 0xbc, 0xaa, 0x2e, 0xde, 0xd5, 0x59, 0x1e, 0x19, 0xd8, 0x04, 0xdd, 0xeb, 0x54,
+ 0x01, 0x04, 0x4a, 0x1c, 0xe1, 0x15, 0x27, 0x35, 0xdd, 0xc1, 0xe3, 0x2e, 0x04,
+ 0x2d, 0x0e, 0xd2, 0xfa, 0xd0, 0x38, 0xf0, 0xd7, 0xaf, 0x4c, 0xf5, 0x08, 0x14,
+ 0x03, 0x2a, 0xcf, 0x07, 0x1a, 0x08, 0xf9, 0xc1, 0x13, 0xb4, 0xde, 0x27, 0x7f,
+ 0xc9, 0x34, 0x37, 0x24, 0xe6, 0x3c, 0xd8, 0xaf, 0x06, 0x0c, 0x19, 0xbe, 0x2a,
+ 0xf4, 0xbe, 0x54, 0x17, 0xdf, 0xfe, 0x33, 0xda, 0x53, 0x0e, 0x4b, 0xe8, 0xf0,
+ 0xaf, 0x1a, 0x0b, 0x00, 0xc8, 0xcd, 0x56, 0x10, 0xe6, 0x51, 0x1b, 0x4c, 0xe8,
+ 0xd6, 0x14, 0xd8, 0x31, 0x18, 0xd0, 0x07, 0xde, 0xe5, 0xea, 0x11, 0xdb, 0xe3,
+ 0x5d, 0x26, 0x5f, 0x09, 0xc5, 0x28, 0x31, 0x15, 0x0e, 0x59, 0x09, 0xf6, 0x5a,
+ 0xee, 0xab, 0x26, 0x29, 0x3b, 0x31, 0xd7, 0x21, 0xea, 0x1c, 0x52, 0xe5, 0x25,
+ 0x18, 0xc1, 0xe0, 0xf0, 0x18, 0x30, 0xf8, 0xdb, 0xd2, 0x34, 0x08, 0x29, 0xff,
+ 0xe0, 0xec, 0x0c, 0x44, 0xf3, 0xde, 0xec, 0x16, 0xbd, 0x06, 0xf3, 0x0f, 0x04,
+ 0xe4, 0x15, 0x28, 0xf2, 0xea, 0x3a, 0xb9, 0x16, 0xf7, 0x49, 0x10, 0x01, 0xca,
+ 0x44, 0x14, 0xe9, 0x2e, 0x17, 0xea, 0x37, 0xdb, 0x05, 0x30, 0x06, 0x7f, 0xfe,
+ 0xff, 0x24, 0xfb, 0xeb, 0x2c, 0x2a, 0xe5, 0x20, 0xf9, 0xf4, 0xe9, 0x09, 0xf4,
+ 0xdc, 0xe0, 0x36, 0xed, 0xef, 0xfe, 0x08, 0xfb, 0x58, 0xe5, 0xee, 0x11, 0xb6,
+ 0x17, 0x49, 0xfa, 0xfd, 0x27, 0xc5, 0x01, 0xdb, 0xa4, 0xef, 0x1a, 0xe5, 0x21,
+ 0x39, 0x0b, 0xf9, 0xf1, 0x2e, 0xf6, 0x10, 0x2e, 0x08, 0xf9, 0x22, 0xd7, 0xc4,
+ 0x16, 0x0f, 0xfb, 0xf7, 0x2c, 0x0c, 0x09, 0xdc, 0xdf, 0xff, 0xe9, 0xe2, 0xf9,
+ 0x09, 0x13, 0x10, 0xc9, 0xe5, 0x25, 0x0a, 0xd0, 0x26, 0xfd, 0xff, 0xee, 0xef,
+ 0x0d, 0x29, 0x10, 0xec, 0x0d, 0xc8, 0xfb, 0x09, 0xed, 0xfe, 0xe6, 0xfc, 0x20,
+ 0xf4, 0xfb, 0x09, 0xce, 0x08, 0xf9, 0xdc, 0xe7, 0x6b, 0xe1, 0xf0, 0x02, 0x03,
+ 0xa8, 0x25, 0x22, 0x13, 0x63, 0x1f, 0x65, 0xf3, 0xf6, 0xff, 0x15, 0x08, 0xdb,
+ 0x09, 0xed, 0x78, 0xf4, 0x03, 0x11, 0x12, 0xec, 0xfe, 0xea, 0xe8, 0xe6, 0x09,
+ 0x7f, 0x39, 0xfc, 0x00, 0x0c, 0xf0, 0x0f, 0x20, 0xff, 0x05, 0x09, 0xe4, 0x08,
+ 0xf2, 0x0b, 0x02, 0xde, 0x1a, 0x32, 0xf3, 0x10, 0x0f, 0xde, 0xdb, 0xd7, 0xf3,
+ 0x2a, 0xf4, 0x29, 0x34, 0x1d, 0xe2, 0x2c, 0xd4, 0xf5, 0x14, 0x09, 0x0f, 0x35,
+ 0x00, 0xba, 0x04, 0x0c, 0x0d, 0xe0, 0x41, 0x01, 0xe0, 0x55, 0x58, 0x1d, 0xf3,
+ 0x4f, 0xfb, 0xdc, 0xfc, 0xf5, 0x41, 0x0f, 0x0f, 0x2e, 0xeb, 0x2a, 0xff, 0x22,
+ 0xb9, 0xe3, 0xe8, 0xfa, 0xe6, 0x26, 0xee, 0x3a, 0x17, 0x2b, 0xf4, 0x21, 0x07,
+ 0x28, 0xb9, 0x28, 0x81, 0xad, 0xf8, 0xf2, 0xc5, 0xb2, 0x1c, 0x36, 0x4f, 0xe2,
+ 0x41, 0x2e, 0xd3, 0xc6, 0xf3, 0x6a, 0xc0, 0x02, 0x96, 0x09, 0xd5, 0x04, 0xb4,
+ 0x3f, 0xe8, 0x17, 0x09, 0x23, 0xff, 0xf0, 0xf9, 0xe0, 0x04, 0x0e, 0x2d, 0xc8,
+ 0x23, 0x56, 0xd5, 0x15, 0x09, 0xe0, 0xcb, 0xc5, 0x36, 0x4d, 0xcb, 0xcd, 0x0f,
+ 0x3f, 0xfa, 0x69, 0x0d, 0x5f, 0x29, 0x27, 0xf2, 0xae, 0x38, 0xeb, 0x1f, 0x34,
+ 0xde, 0x3e, 0x24, 0x13, 0xf5, 0xf0, 0x06, 0xb5, 0xe8, 0xf6, 0xf4, 0x18, 0xbd,
+ 0x12, 0xe9, 0x22, 0x22, 0xf2, 0xcf, 0x2b, 0xe0, 0x74, 0x06, 0xd5, 0xc9, 0xea,
+ 0xe6, 0xbf, 0xfe, 0xec, 0xf7, 0xf5, 0xe6, 0xcb, 0x03, 0xfe, 0xfc, 0x67, 0xfd,
+ 0xae, 0x2b, 0x25, 0xd2, 0x64, 0x0d, 0xc3, 0x0e, 0x4d, 0x15, 0xf7, 0xcc, 0xea,
+ 0x0b, 0x16, 0x12, 0x1c, 0xec, 0xa2, 0x5f, 0x4b, 0x3b, 0x3c, 0xdf, 0x32, 0xe6,
+ 0xd8, 0xfe, 0x3b, 0xdf, 0x1d, 0x14, 0x60, 0x5b, 0x09, 0xd1, 0xb2, 0xf2, 0xbf,
+ 0x39, 0x2e, 0xf4, 0xe4, 0xf7, 0x28, 0x22, 0xf5, 0x01, 0xc0, 0x40, 0xc6, 0xe4,
+ 0xa3, 0x59, 0xd0, 0x07, 0xb9, 0xd6, 0x09, 0x05, 0xe8, 0xf7, 0x7f, 0x97, 0x18,
+ 0x28, 0x3c, 0xfe, 0x32, 0x54, 0x49, 0xec, 0xf9, 0x3f, 0x03, 0x0d, 0xbf, 0x0a,
+ 0xe3, 0xf9, 0xc8, 0xe0, 0xe9, 0xe9, 0xd2, 0x2d, 0xd8, 0x9b, 0x15, 0xeb, 0x29,
+ 0x78, 0x4d, 0x20, 0xc0, 0x07, 0x0c, 0x2c, 0xc5, 0xe7, 0xf1, 0xfc, 0x2d, 0x2f,
+ 0x02, 0xff, 0xfe, 0x39, 0x2c, 0x0d, 0xfa, 0x03, 0x00, 0x1b, 0x15, 0x49, 0x03,
+ 0xf6, 0x1f, 0x17, 0xee, 0x4b, 0x13, 0x9e, 0xe7, 0x04, 0xfe, 0x1e, 0x30, 0xf2,
+ 0x1c, 0xe0, 0xf3, 0xea, 0x63, 0xfa, 0x2a, 0x26, 0xec, 0xfb, 0xec, 0xfa, 0xcc,
+ 0xde, 0xb8, 0xf4, 0x16, 0xc1, 0x27, 0xf0, 0xf3, 0x12, 0x1a, 0x4d, 0xd2, 0x26,
+ 0x23, 0x1c, 0x08, 0x43, 0x08, 0x7f, 0xf5, 0xc7, 0xc6, 0xeb, 0xd9, 0x2b, 0x3a,
+ 0xe7, 0xfe, 0x10, 0xf6, 0xda, 0xfa, 0x07, 0xdf, 0x1c, 0x15, 0x13, 0xfe, 0x19,
+ 0xfe, 0x20, 0xf0, 0xd6, 0xf0, 0x02, 0xfa, 0x0f, 0x50, 0xe9, 0xf7, 0x1f, 0xeb,
+ 0xf7, 0x4c, 0x17, 0x23, 0x03, 0x10, 0x32, 0x26, 0xf8, 0xd5, 0x1e, 0x12, 0xf8,
+ 0xcd, 0xe9, 0xef, 0xe9, 0xe8, 0xf7, 0x12, 0xf6, 0xcd, 0x01, 0x04, 0x32, 0x1b,
+ 0x23, 0x00, 0x0a, 0x44, 0xee, 0xd7, 0x50, 0xff, 0xf3, 0x31, 0xe6, 0xe4, 0xde,
+ 0xf8, 0xd5, 0xe0, 0x10, 0xfe, 0x11, 0xfd, 0xe9, 0xe4, 0x53, 0x07, 0x0d, 0xea,
+ 0x2f, 0xd5, 0x09, 0xf4, 0x01, 0x03, 0x2d, 0xc1, 0x12, 0x1c, 0xf8, 0xf7, 0xe7,
+ 0x1c, 0xf7, 0xf1, 0x10, 0x00, 0x25, 0xb9, 0xee, 0xf0, 0x15, 0xec, 0xea, 0x42,
+ 0x18, 0xa7, 0x09, 0x37, 0x0c, 0xc7, 0x0f, 0xd6, 0xd7, 0x08, 0x79, 0x6e, 0xd7,
+ 0xf9, 0x25, 0x0c, 0xcb, 0x41, 0xdb, 0xe0, 0x73, 0x12, 0x0a, 0xd7, 0xd0, 0xc9,
+ 0x25, 0x39, 0x0f, 0x07, 0x21, 0xd4, 0xc9, 0xaf, 0x20, 0x07, 0xfc, 0xcc, 0xed,
+ 0x2f, 0xde, 0xf0, 0x66, 0x0f, 0x3b, 0x1d, 0xb0, 0xf4, 0x89, 0x33, 0xeb, 0x43,
+ 0x1e, 0xfe, 0xd0, 0x3c, 0x73, 0x26, 0xe9, 0x0e, 0x25, 0xf0, 0x25, 0xfa, 0xf2,
+ 0xd8, 0x7d, 0xf3, 0x1f, 0x06, 0x03, 0xf7, 0xc3, 0x1c, 0xfa, 0x47, 0x53, 0xd4,
+ 0x01, 0xb1, 0xd7, 0x30, 0x11, 0xd6, 0xcd, 0x39, 0x08, 0xa0, 0xe9, 0x3d, 0xf5,
+ 0xe6, 0xa9, 0x08, 0x3e, 0x2b, 0x0d, 0x30, 0x67, 0xac, 0x4e, 0x47, 0xfb, 0xd5,
+ 0xf3, 0xdb, 0x93, 0xff, 0x42, 0xd9, 0xfa, 0x2e, 0x01, 0x1f, 0x81, 0x1d, 0x06,
+ 0x51, 0xca, 0x51, 0xe4, 0x30, 0xe7, 0x1d, 0xf1, 0x13, 0x3b, 0xda, 0x20, 0x13,
+ 0x3d, 0x36, 0x30, 0xf8, 0xe6, 0xf2, 0x0d, 0x1b, 0x0b, 0x3a, 0xf9, 0xc9, 0x23,
+ 0x7f, 0x2d, 0xbb, 0xed, 0x04, 0xe5, 0x06, 0x2e, 0x19, 0x42, 0xc6, 0x40, 0xed,
+ 0x0b, 0xf9, 0x05, 0x07, 0xf7, 0x05, 0x08, 0x38, 0xcb, 0xed, 0xf0, 0xe2, 0xfc,
+ 0xb1, 0x59, 0xef, 0x20, 0x03, 0xde, 0x21, 0xf8, 0x3d, 0xe8, 0x15, 0xdd, 0x15,
+ 0x2a, 0xe8, 0xd8, 0x4a, 0x1d, 0x10, 0x28, 0xed, 0x0f, 0xcc, 0x04, 0x39, 0x40,
+ 0xd0, 0x04, 0xf0, 0xee, 0x0f, 0x04, 0x18, 0xe7, 0xc4, 0x16, 0x0b, 0xe5, 0x14,
+ 0x62, 0x13, 0x22, 0xec, 0x62, 0xd0, 0xfd, 0x1d, 0x78, 0xf1, 0xf7, 0xde, 0x3d,
+ 0xfc, 0xd8, 0x1f, 0xeb, 0x51, 0x07, 0xf8, 0x55, 0xf2, 0x42, 0xc7, 0xcb, 0xd4,
+ 0xf1, 0x02, 0xec, 0x28, 0xf9, 0xc7, 0x6d, 0xca, 0x23, 0xee, 0xd7, 0x0a, 0x38,
+ 0x0c, 0x08, 0xe2, 0xea, 0x08, 0xde, 0xfc, 0x26, 0x09, 0xea, 0x24, 0x1d, 0xe9,
+ 0x26, 0x15, 0x03, 0xf6, 0xfe, 0xf7, 0x01, 0x03, 0xde, 0x04, 0xea, 0xec, 0xe7,
+ 0x2f, 0xf7, 0x37, 0x02, 0x15, 0xc5, 0xe7, 0xd4, 0x30, 0x5c, 0xae, 0xf9, 0xef,
+ 0xf1, 0xb8, 0x02, 0x1b, 0xa5, 0x0f, 0xe4, 0xf8, 0xdf, 0xfd, 0xd4, 0x2f, 0xba,
+ 0x32, 0xa7, 0xdb, 0xf7, 0xca, 0x11, 0xb8, 0xd9, 0xe8, 0x16, 0xf2, 0xfa, 0x08,
+ 0xda, 0xfd, 0xf4, 0xb7, 0x40, 0xbf, 0xcb, 0x0b, 0x34, 0xf5, 0xcd, 0xf7, 0x9e,
+ 0x16, 0x07, 0x07, 0x0e, 0xf0, 0xc6, 0x27, 0x26, 0x33, 0x01, 0xd3, 0xc0, 0xaf,
+ 0xdf, 0xe0, 0x15, 0x04, 0x0b, 0xbe, 0xc0, 0xce, 0xc6, 0x1f, 0xdc, 0xd3, 0x0b,
+ 0xfa, 0xa9, 0x03, 0xf4, 0x4e, 0x0f, 0xb7, 0xed, 0x0a, 0xf6, 0x71, 0x81, 0x05,
+ 0xe5, 0xf0, 0x06, 0xd9, 0x06, 0x35, 0x1a, 0xaf, 0x05, 0x49, 0x08, 0xf1, 0xe5,
+ 0xdf, 0xf6, 0xb7, 0x56, 0xfd, 0xe4, 0x05, 0xe3, 0xc4, 0x30, 0xf0, 0x2a, 0xfc,
+ 0x1a, 0x8d, 0xb1, 0x16, 0x9b, 0x00, 0x48, 0xe2, 0x15, 0xf9, 0x04, 0xe8, 0xc8,
+ 0x30, 0xce, 0xe9, 0xf3, 0x03, 0x3f, 0xd1, 0x99, 0x15, 0x05, 0x77, 0x28, 0xc7,
+ 0xd4, 0xc0, 0x5a, 0xed, 0x07, 0xdf, 0xe3, 0xf2, 0xf0, 0xca, 0x74, 0x18, 0xc6,
+ 0x0d, 0xd1, 0xee, 0x93, 0x0f, 0x2a, 0x6a, 0xc3, 0x02, 0x1c, 0xff, 0xd3, 0x0b,
+ 0xc0, 0xa0, 0x35, 0x05, 0x37, 0xf2, 0x4a, 0x21, 0xe3, 0xbb, 0xb9, 0xcd, 0x1b,
+ 0x1f, 0xcb, 0x44, 0x14, 0xc5, 0x2d, 0x07, 0x09, 0xfc, 0x03, 0x10, 0xfd, 0xe9,
+ 0xe4, 0x17, 0xe7, 0xa8, 0x87, 0xe5, 0xee, 0x30, 0xe9, 0x05, 0x07, 0xca, 0x02,
+ 0x04, 0x25, 0x08, 0x49, 0xcc, 0xfd, 0xf2, 0x51, 0xe9, 0xdc, 0xbf, 0x31, 0xd2,
+ 0xf1, 0xf7, 0x29, 0x4f, 0xb4, 0x31, 0x5b, 0xcd, 0xf5, 0x50, 0x20, 0x5f, 0xe6,
+ 0x01, 0x13, 0x03, 0x03, 0xd2, 0x22, 0x7f, 0x43, 0x8b, 0x2a, 0xe0, 0xed, 0xd2,
+ 0x1d, 0xe2, 0xec, 0xdb, 0x05, 0x06, 0x66, 0xfe, 0x27, 0x03, 0xf4, 0xf2, 0x09,
+ 0x16, 0xca, 0xfa, 0xde, 0x05, 0xc9, 0xef, 0x07, 0x1f, 0x12, 0xe8, 0x41, 0x01,
+ 0x0a, 0xdd, 0xb2, 0xf3, 0xe7, 0x0e, 0x16, 0xfa, 0x0f, 0xdf, 0x2e, 0x31, 0xcd,
+ 0xf7, 0xbb, 0x03, 0x14, 0x1f, 0xed, 0x36, 0x34, 0xf4, 0xba, 0x7f, 0xd2, 0xba,
+ 0x16, 0x0b, 0x05, 0xf2, 0x1d, 0x36, 0xfc, 0xff, 0xee, 0xf5, 0x0f, 0x1a, 0xeb,
+ 0x0a, 0xfa, 0xe7, 0x27, 0x17, 0xf8, 0xec, 0x27, 0x15, 0x2d, 0xea, 0x06, 0xd8,
+ 0xdb, 0xad, 0xfb, 0xe4, 0x14, 0xeb, 0x08, 0x21, 0x01, 0xd4, 0x05, 0x0b, 0x3f,
+ 0xd7, 0xc7, 0x20, 0x0a, 0xf7, 0xd6, 0x0b, 0x67, 0xc1, 0x03, 0x05, 0x20, 0x0a,
+ 0xb5, 0xe0, 0x2d, 0xc1, 0xf6, 0xd2, 0xfb, 0xf0, 0x2e, 0xfd, 0x0d, 0x0d, 0x07,
+ 0x1e, 0xf4, 0x07, 0x3f, 0xfa, 0x09, 0x27, 0x0d, 0x17, 0xfa, 0xfe, 0x05, 0xfd,
+ 0x17, 0x0d, 0xf9, 0x15, 0x20, 0xe9, 0x25, 0x03, 0xf3, 0xdc, 0x0a, 0x03, 0xf5,
+ 0x2a, 0xef, 0x0a, 0x05, 0x0a, 0xdc, 0x02, 0x1a, 0xe9, 0x04, 0xe1, 0xf6, 0xf3,
+ 0xee, 0x03, 0x09, 0x07, 0xce, 0x1d, 0xed, 0x1c, 0x01, 0x22, 0x22, 0x03, 0x03,
+ 0x07, 0x17, 0x7f, 0x16, 0x1b, 0xf7, 0x08, 0xe5, 0x05, 0xf6, 0xed, 0x1c, 0xf7,
+ 0x02, 0xe9, 0xec, 0xed, 0x27, 0xfd, 0x00, 0xe1, 0xf7, 0xed, 0x07, 0x05, 0x0d,
+ 0x1a, 0x24, 0x04, 0xef, 0x21, 0x16, 0xf9, 0x0b, 0x05, 0xf8, 0x25, 0xf0, 0x01,
+ 0xec, 0x0f, 0xeb, 0x06, 0x0e, 0x03, 0xf7, 0xee, 0xf2, 0x04, 0x45, 0xe7, 0x0e,
+ 0xee, 0x1a, 0xf5, 0x11, 0x14, 0x0c, 0xfe, 0xfa, 0x0f, 0xf4, 0x12, 0xf7, 0x0a,
+ 0xfc, 0xf9, 0x00, 0xff, 0xec, 0xe8, 0x09, 0xee, 0xf6, 0x12, 0xea, 0xf4, 0x01,
+ 0x17, 0xfd, 0xe0, 0x15, 0x13, 0x37, 0x5c, 0xfb, 0xea, 0xae, 0xe3, 0xeb, 0xfe,
+ 0x95, 0xee, 0x54, 0xf1, 0x14, 0xe2, 0x2f, 0xd9, 0xf8, 0xc5, 0xea, 0xb0, 0xbb,
+ 0xac, 0x10, 0xfc, 0xd6, 0xfa, 0x2b, 0xff, 0xdd, 0xdb, 0x28, 0x05, 0xbd, 0xc5,
+ 0x48, 0x0c, 0x08, 0x10, 0xe5, 0xf6, 0x7f, 0xfe, 0x03, 0x1d, 0xed, 0x02, 0x02,
+ 0x06, 0x16, 0x34, 0x01, 0x35, 0x9e, 0x03, 0x12, 0xd3, 0x3d, 0x0d, 0x0f, 0x3f,
+ 0xee, 0x30, 0x4b, 0x1e, 0xfa, 0x1a, 0xe7, 0xea, 0x05, 0x50, 0x0b, 0x5e, 0x78,
+ 0xfb, 0x2f, 0xbf, 0x17, 0xf7, 0xf2, 0x50, 0xf6, 0x24, 0x52, 0xf3, 0xe5, 0x76,
+ 0x43, 0x37, 0xec, 0x3e, 0xea, 0xf2, 0x2e, 0x21, 0xef, 0x0f, 0xcf, 0x2c, 0x11,
+ 0xf1, 0x1c, 0xf4, 0xff, 0x1f, 0x57, 0xe7, 0x07, 0xbe, 0x05, 0x70, 0xdf, 0x22,
+ 0xef, 0x63, 0x41, 0x69, 0xae, 0x07, 0x2d, 0x4e, 0xd6, 0x08, 0xe8, 0xfb, 0x29,
+ 0x24, 0x11, 0x16, 0xe9, 0x20, 0x2f, 0xf4, 0x12, 0x24, 0xef, 0x02, 0xf5, 0xe6,
+ 0x2f, 0xef, 0x07, 0xb4, 0xd0, 0xf2, 0x2f, 0xf9, 0x28, 0x00, 0xec, 0xa0, 0x39,
+ 0xd9, 0x23, 0x06, 0x11, 0xda, 0x1c, 0xea, 0x07, 0x32, 0x0d, 0x1f, 0x0b, 0x20,
+ 0xee, 0x0d, 0x76, 0x1d, 0xb1, 0xed, 0xde, 0x02, 0x28, 0xeb, 0x53, 0x11, 0xe9,
+ 0x26, 0xde, 0xf5, 0x3c, 0x1f, 0x21, 0xb4, 0xf3, 0xe3, 0x06, 0xfc, 0xe0, 0x4b,
+ 0xcf, 0x2f, 0x49, 0xfe, 0xf9, 0x03, 0xab, 0x1f, 0x62, 0xa0, 0x1e, 0x20, 0xfb,
+ 0x27, 0xd4, 0xda, 0x01, 0x2b, 0x14, 0x0e, 0x09, 0x45, 0xbb, 0x33, 0x16, 0xf8,
+ 0x16, 0x3e, 0xfa, 0x15, 0x0c, 0xfd, 0x10, 0x21, 0x19, 0x16, 0xed, 0x2e, 0x5e,
+ 0x7f, 0x10, 0x53, 0xca, 0x4b, 0x22, 0x49, 0x06, 0x32, 0xc3, 0x2a, 0x1f, 0x26,
+ 0xef, 0x37, 0x13, 0x16, 0x16, 0xd1, 0x40, 0x04, 0x23, 0xe6, 0x41, 0xe2, 0x33,
+ 0xcf, 0x24, 0x03, 0x0b, 0x18, 0xf1, 0xfa, 0xfa, 0xb5, 0x32, 0x0c, 0x1b, 0x07,
+ 0x28, 0xea, 0xb8, 0x81, 0xfa, 0x06, 0x34, 0x16, 0x26, 0x02, 0x1b, 0x04, 0xfe,
+ 0x16, 0x18, 0xe2, 0x0b, 0xf4, 0xbf, 0xfc, 0xff, 0xdf, 0x24, 0xc9, 0xf4, 0xfa,
+ 0x0b, 0xfb, 0xcf, 0x02, 0x08, 0xda, 0x0f, 0x15, 0x03, 0xf8, 0xdd, 0x18, 0x02,
+ 0xf5, 0x1b, 0x25, 0x0c, 0x39, 0x1b, 0xda, 0xef, 0xe9, 0x0c, 0x08, 0xec, 0xd2,
+ 0xf8, 0xe5, 0xe1, 0x1c, 0xed, 0xe4, 0x0d, 0xc4, 0x10, 0xec, 0x22, 0x23, 0x1c,
+ 0xbc, 0x0d, 0xf0, 0x05, 0xe7, 0xf7, 0xe3, 0x56, 0xde, 0x1d, 0xf6, 0x01, 0xe8,
+ 0xf7, 0xf7, 0x0e, 0x22, 0xef, 0x02, 0x0f, 0xe1, 0x1e, 0xda, 0xd7, 0xee, 0xe6,
+ 0x03, 0x2b, 0xd0, 0x17, 0xf0, 0x2b, 0xea, 0x04, 0x08, 0xf7, 0xdd, 0x14, 0x0d,
+ 0x1d, 0xd0, 0x1e, 0xdc, 0xf2, 0xbe, 0x20, 0xeb, 0x1c, 0x23, 0x0c, 0x1c, 0x37,
+ 0x02, 0x04, 0x3a, 0x05, 0x01, 0xc3, 0x43, 0xf9, 0xc6, 0x10, 0x54, 0x2c, 0xf4,
+ 0xd2, 0xfc, 0x04, 0x06, 0x11, 0xb5, 0xe6, 0x00, 0x10, 0xf9, 0x0d, 0x25, 0x17,
+ 0x08, 0xf7, 0x32, 0x57, 0xbd, 0xf1, 0x42, 0xfc, 0xe7, 0x00, 0xf4, 0x17, 0x1a,
+ 0xe0, 0x30, 0xf9, 0x15, 0x2a, 0x45, 0x24, 0x21, 0xfa, 0xed, 0xef, 0xe6, 0x11,
+ 0xf0, 0x69, 0x39, 0x23, 0x12, 0xc8, 0xf8, 0x08, 0xfd, 0xd9, 0xf3, 0x08, 0x01,
+ 0x0f, 0x22, 0xd4, 0xf2, 0x3a, 0xe2, 0xec, 0xf2, 0xf8, 0x62, 0xe5, 0x68, 0x23,
+ 0x01, 0x50, 0xef, 0xe2, 0xd2, 0x1d, 0xee, 0x19, 0x0c, 0x01, 0x01, 0x07, 0xdd,
+ 0xdd, 0xfc, 0x10, 0x06, 0x26, 0xf5, 0xe9, 0x0d, 0xc6, 0x08, 0xf1, 0x02, 0xfe,
+ 0x1e, 0xf7, 0x2f, 0xd7, 0xee, 0xe7, 0xff, 0x02, 0x0c, 0x04, 0xfa, 0x2b, 0xd1,
+ 0x0b, 0xf2, 0xfe, 0x06, 0x19, 0xf9, 0x02, 0x7f, 0x0f, 0x03, 0xf9, 0xdd, 0xf4,
+ 0x4f, 0xfc, 0x31, 0xf0, 0x37, 0xdd, 0x1c, 0x5d, 0x0e, 0x3a, 0xe4, 0xa5, 0xe2,
+ 0xfd, 0xe4, 0xc4, 0x7f, 0x19, 0x26, 0xf7, 0x20, 0xca, 0xfa, 0x02, 0x46, 0x5a,
+ 0xe2, 0x00, 0x1b, 0xff, 0x36, 0x2d, 0x12, 0x0c, 0xd1, 0xf5, 0x32, 0xc7, 0x01,
+ 0xf4, 0xd7, 0x66, 0x14, 0xd9, 0x08, 0xdf, 0xf1, 0xd8, 0xdc, 0x01, 0x36, 0x25,
+ 0xff, 0x3f, 0xf8, 0xf5, 0xae, 0xdc, 0x1c, 0xd9, 0x0a, 0x7d, 0xde, 0xe6, 0x1d,
+ 0x27, 0x1c, 0x27, 0x02, 0xea, 0x98, 0xdb, 0xdb, 0x08, 0xdd, 0xf2, 0x10, 0xe8,
+ 0xfc, 0x26, 0x11, 0x14, 0xf7, 0x3e, 0x07, 0x07, 0x3c, 0x27, 0xff, 0xfa, 0x24,
+ 0xe0, 0x45, 0x05, 0x2e, 0xce, 0x01, 0xfd, 0x56, 0xed, 0xe9, 0x4e, 0x2f, 0xfe,
+ 0x0d, 0xe1, 0xe6, 0x1b, 0x06, 0xea, 0x3b, 0x15, 0xea, 0xa9, 0x00, 0x05, 0x15,
+ 0xde, 0x82, 0x36, 0xdb, 0x11, 0xbe, 0xe1, 0x2b, 0x09, 0x28, 0x46, 0x5d, 0xde,
+ 0x36, 0x27, 0xfc, 0x50, 0xd0, 0x33, 0x0d, 0x10, 0x3b, 0xfd, 0xe3, 0xdf, 0x01,
+ 0xf6, 0xbc, 0x48, 0x2e, 0xfe, 0x1b, 0x2f, 0x20, 0xed, 0xf8, 0xfb, 0x8e, 0xf5,
+ 0xc3, 0x2e, 0x48, 0x68, 0xef, 0x3b, 0x40, 0xf1, 0xe8, 0xaf, 0x23, 0xeb, 0x16,
+ 0x37, 0x44, 0x93, 0x12, 0x07, 0x1c, 0x9a, 0xfb, 0xf5, 0xff, 0x78, 0x15, 0x18,
+ 0xf9, 0x42, 0xbc, 0xe2, 0x07, 0x2b, 0xc8, 0xdd, 0xa1, 0xbe, 0xc4, 0x0a, 0x1d,
+ 0xd6, 0xc1, 0xe9, 0xa4, 0xf3, 0x15, 0x3b, 0xe3, 0xf7, 0x0a, 0x1a, 0xee, 0xd8,
+ 0xe3, 0x6a, 0xf7, 0xd2, 0xf6, 0xdf, 0xf3, 0xdd, 0xd4, 0x9d, 0x22, 0x0b, 0xc2,
+ 0x16, 0x42, 0x58, 0x23, 0xf0, 0x03, 0xee, 0x1d, 0x1b, 0xf4, 0x18, 0xea, 0x2b,
+ 0xc2, 0x62, 0x2a, 0x9a, 0xfb, 0x2d, 0x28, 0xcf, 0x9f, 0xdb, 0xfa, 0xe9, 0xd5,
+ 0xcf, 0xef, 0xda, 0x0b, 0x9f, 0x7f, 0xec, 0x10, 0xca, 0x4d, 0xc4, 0x05, 0x09,
+ 0x33, 0x2b, 0x0f, 0x08, 0x0f, 0x27, 0x33, 0x0e, 0xec, 0xf3, 0x20, 0x19, 0xdf,
+ 0x31, 0xda, 0x10, 0x06, 0xf1, 0xcc, 0x08, 0xd9, 0x0a, 0x01, 0x14, 0x31, 0x0b,
+ 0x26, 0x14, 0x03, 0xf6, 0xcd, 0xd2, 0x0e, 0x1a, 0x39, 0x1a, 0x2c, 0xab, 0x1f,
+ 0xfb, 0x2f, 0x37, 0x25, 0x2c, 0xe8, 0x07, 0xec, 0x4d, 0xdf, 0x1c, 0x09, 0x0c,
+ 0x09, 0x06, 0xe4, 0xf2, 0x27, 0x05, 0x08, 0x1a, 0xfe, 0x06, 0x29, 0xce, 0x5e,
+ 0x21, 0xe6, 0xf9, 0xf6, 0x00, 0x49, 0x20, 0x14, 0xeb, 0xe6, 0x70, 0xd7, 0x32,
+ 0x77, 0xb3, 0xef, 0x07, 0xc4, 0x0b, 0x12, 0x05, 0x06, 0xc3, 0xdd, 0x45, 0x00,
+ 0xcf, 0x00, 0x22, 0x3d, 0xd0, 0xe1, 0xf7, 0xde, 0xe7, 0xe2, 0x03, 0x7f, 0xdf,
+ 0x13, 0x4b, 0x76, 0xe7, 0x23, 0x16, 0x5a, 0x21, 0xf8, 0xeb, 0xcc, 0xdf, 0xbc,
+ 0x1d, 0x0f, 0x28, 0x25, 0x33, 0x29, 0x1e, 0x15, 0xf7, 0x07, 0x19, 0x36, 0x40,
+ 0xbe, 0x56, 0x25, 0x41, 0xe4, 0xe4, 0xd1, 0x6f, 0xea, 0x04, 0x32, 0x41, 0x7f,
+ 0x1a, 0x3b, 0xe3, 0x43, 0x15, 0x02, 0x2f, 0x3e, 0x64, 0x63, 0xbc, 0xff, 0xc2,
+ 0x0b, 0x05, 0x31, 0x05, 0x11, 0x38, 0x22, 0x78, 0xff, 0xf6, 0x38, 0xb2, 0x19,
+ 0x00, 0x54, 0x10, 0x31, 0xde, 0x49, 0x19, 0x37, 0x2b, 0x41, 0xe2, 0x08, 0x1a,
+ 0x39, 0x0a, 0x20, 0xd4, 0x04, 0x35, 0x22, 0x06, 0x21, 0x57, 0x41, 0x66, 0xb6,
+ 0xfd, 0x0e, 0x3f, 0xd1, 0x58, 0x1e, 0x2d, 0x2f, 0x68, 0x14, 0xfd, 0x18, 0x9e,
+ 0xe5, 0x36, 0xf9, 0x15, 0xe4, 0x22, 0x13, 0x4b, 0xdd, 0x3c, 0x4f, 0xf0, 0xfa,
+ 0x03, 0x03, 0x19, 0xe5, 0x0d, 0x05, 0x1c, 0x58, 0xfa, 0x2c, 0x35, 0x07, 0x22,
+ 0x2f, 0x3a, 0x22, 0xe9, 0xf2, 0x37, 0x11, 0x3e, 0x23, 0x50, 0x23, 0x1b, 0x45,
+ 0x1d, 0xed, 0xce, 0x1b, 0xef, 0x28, 0x3e, 0xe5, 0x34, 0x17, 0xbf, 0x92, 0x4f,
+ 0xfb, 0xd7, 0xd0, 0x07, 0xeb, 0xf1, 0x2e, 0xce, 0xf3, 0xd2, 0xfa, 0x14, 0x33,
+ 0x02, 0x07, 0xee, 0xc7, 0xda, 0xd8, 0xd9, 0x0e, 0xf3, 0xdf, 0xfe, 0xf1, 0x19,
+ 0x0d, 0x1f, 0x0f, 0xe1, 0x5a, 0x74, 0x1b, 0xd3, 0xe1, 0xd2, 0x24, 0x43, 0x73,
+ 0x33, 0xdd, 0xd6, 0x25, 0xce, 0xec, 0x30, 0x05, 0x0f, 0xe1, 0xef, 0xd5, 0xea,
+ 0xbf, 0x02, 0xe0, 0xea, 0xf7, 0x0c, 0x66, 0xc9, 0x7f, 0x51, 0xf2, 0xc8, 0x02,
+ 0xec, 0x0e, 0x73, 0x0c, 0x02, 0x0a, 0xec, 0xd8, 0xd0, 0xeb, 0xe5, 0xe7, 0xdc,
+ 0x13, 0x00, 0xf9, 0xef, 0xc2, 0x5e, 0xd9, 0x17, 0x0e, 0xf0, 0x0a, 0x2d, 0x13,
+ 0xd8, 0x01, 0x26, 0xbb, 0x21, 0x2d, 0xec, 0x32, 0x08, 0x15, 0x10, 0x1c, 0x38,
+ 0xd8, 0xf7, 0x39, 0xe3, 0x1c, 0x2a, 0x1c, 0x21, 0x79, 0xd9, 0xeb, 0x43, 0xfa,
+ 0x20, 0xca, 0xec, 0x21, 0xd2, 0xea, 0xfa, 0x10, 0xdd, 0x3a, 0xf8, 0x14, 0xd3,
+ 0xdd, 0xc4, 0xda, 0xce, 0x02, 0x16, 0x05, 0x0c, 0x04, 0xd8, 0x0c, 0xf7, 0x16,
+ 0xe1, 0x45, 0x17, 0xe7, 0xb9, 0xeb, 0xfa, 0x11, 0x0b, 0x15, 0x9f, 0x49, 0xec,
+ 0x14, 0xe4, 0xde, 0xc0, 0xd3, 0x0b, 0xb7, 0x08, 0x12, 0xfe, 0x26, 0x17, 0x29,
+ 0x48, 0xe4, 0x0a, 0x22, 0x51, 0x21, 0x16, 0x12, 0xf0, 0x0e, 0xd6, 0xf2, 0x32,
+ 0x1b, 0x0c, 0xf4, 0x31, 0x12, 0x4b, 0xf0, 0x06, 0x0e, 0x03, 0xfe, 0x81, 0xcb,
+ 0x0d, 0x1d, 0xe9, 0x17, 0xff, 0xf5, 0x27, 0x05, 0x75, 0x01, 0xf7, 0x07, 0x15,
+ 0xec, 0xb4, 0xba, 0xf4, 0xe4, 0x04, 0x16, 0x09, 0x47, 0x30, 0xe9, 0xa5, 0x43,
+ 0x0e, 0x93, 0x05, 0xfa, 0xe8, 0x09, 0xfa, 0x53, 0xc5, 0x11, 0x0e, 0xf5, 0xb4,
+ 0xd3, 0x4e, 0xf8, 0x02, 0xd7, 0x10, 0xdd, 0xbb, 0xa7, 0xdd, 0x26, 0xd1, 0xdc,
+ 0xfc, 0x11, 0x3a, 0x13, 0x27, 0x10, 0x05, 0xaa, 0x13, 0x00, 0xe1, 0x25, 0xea,
+ 0xf7, 0xed, 0x0a, 0xa3, 0x0b, 0xe8, 0xec, 0x16, 0xfa, 0x12, 0xf8, 0xdc, 0xed,
+ 0x14, 0x23, 0xd1, 0x0a, 0x10, 0x03, 0xed, 0xf5, 0x26, 0xef, 0x08, 0x13, 0xb9,
+ 0xf6, 0x7f, 0x05, 0x25, 0xf9, 0xe0, 0x4a, 0x06, 0x68, 0x18, 0xf6, 0xef, 0xf6,
+ 0xf9, 0x0c, 0xee, 0x0d, 0xf1, 0xe9, 0x05, 0xb5, 0x12, 0xe4, 0xee, 0xde, 0x10,
+ 0x10, 0xfc, 0x23, 0xea, 0x1c, 0x3b, 0x10, 0xf9, 0x3c, 0x17, 0x09, 0xf4, 0x4b,
+ 0xbd, 0x12, 0xf7, 0xf7, 0x0b, 0xfb, 0xdf, 0xf9, 0xf8, 0xfb, 0x30, 0x1c, 0xff,
+ 0x19, 0x54, 0x15, 0xf6, 0x09, 0x27, 0x04, 0x1e, 0xef, 0x14, 0xe5, 0x07, 0xfd,
+ 0x13, 0x40, 0xcf, 0x67, 0xec, 0xe4, 0x21, 0xe1, 0x05, 0x02, 0xfd, 0xf9, 0x07,
+ 0xf9, 0xe5, 0x20, 0xeb, 0xf7, 0xe1, 0x31, 0xe2, 0x27, 0xe0, 0xe3, 0xf4, 0xea,
+ 0x0a, 0xe7, 0xd4, 0xc8, 0x14, 0x1c, 0x07, 0x1a, 0x44, 0xed, 0xe1, 0x1b, 0x19,
+ 0x19, 0x10, 0xe3, 0xe5, 0xe7, 0xe7, 0xd9, 0xe2, 0xf9, 0x3b, 0x0b, 0x37, 0xf2,
+ 0x5f, 0xfe, 0x2c, 0xed, 0xf5, 0xfa, 0xf1, 0xf0, 0x26, 0x13, 0xfc, 0x20, 0xec,
+ 0x27, 0xd8, 0xf7, 0xf7, 0xd0, 0xe5, 0xfd, 0xe5, 0xee, 0xe0, 0xf8, 0xf9, 0xfa,
+ 0x16, 0x2f, 0x33, 0xf2, 0x1d, 0x7f, 0xc5, 0xe7, 0xfd, 0xdc, 0x21, 0x03, 0xf6,
+ 0x0b, 0x06, 0x1b, 0xe5, 0x2a, 0xda, 0x4e, 0xe9, 0x39, 0xd0, 0x0f, 0x76, 0xfe,
+ 0x10, 0x20, 0xcc, 0xff, 0xf9, 0x0f, 0x0c, 0x14, 0x19, 0xfb, 0x23, 0xd1, 0xcf,
+ 0xed, 0xfd, 0xf6, 0xd9, 0xfe, 0x12, 0x0c, 0xd3, 0x25, 0xf2, 0x1a, 0x2a, 0x10,
+ 0xfa, 0x23, 0xd2, 0xe8, 0xe4, 0x0c, 0xff, 0x12, 0xfb, 0x1a, 0x0f, 0x05, 0xf9,
+ 0xf9, 0x2c, 0x14, 0x03, 0xca, 0x39, 0x19, 0x21, 0xef, 0x07, 0x1b, 0x38, 0x09,
+ 0xe6, 0xff, 0x38, 0xfc, 0x4f, 0x52, 0x17, 0x03, 0xd4, 0xb5, 0xfd, 0xbd, 0x46,
+ 0x6a, 0xef, 0x19, 0x04, 0x38, 0xf4, 0x38, 0xfb, 0x52, 0x51, 0x00, 0xb5, 0x22,
+ 0x07, 0x18, 0xe7, 0x17, 0x20, 0xf0, 0x03, 0xe5, 0x05, 0x4f, 0x2a, 0x12, 0x35,
+ 0x4b, 0x21, 0x11, 0xd7, 0x39, 0x0d, 0xe8, 0x01, 0x7f, 0xe3, 0x57, 0xe8, 0xe4,
+ 0xd4, 0xe5, 0xe9, 0xfb, 0x21, 0xe5, 0xf3, 0x1a, 0xb3, 0xde, 0xfe, 0x11, 0xe2,
+ 0xd6, 0xf5, 0x08, 0xed, 0x43, 0x31, 0xe8, 0x40, 0x44, 0x1f, 0xde, 0x0d, 0x0b,
+ 0x68, 0xd7, 0xf1, 0xb8, 0x2a, 0xe9, 0xdd, 0x4d, 0x23, 0x07, 0x33, 0x26, 0xe0,
+ 0x05, 0x16, 0xec, 0xf5, 0xc0, 0x0b, 0xfd, 0xff, 0xca, 0x01, 0xfd, 0xfe, 0xe9,
+ 0x18, 0xbd, 0x08, 0xf2, 0x1a, 0xfe, 0x3f, 0xd1, 0xf6, 0xcf, 0x1d, 0xfc, 0xe8,
+ 0x2a, 0x23, 0xa6, 0x02, 0x3a, 0xe9, 0xd9, 0xd6, 0xdc, 0x18, 0x0a, 0x1f, 0xbe,
+ 0xfd, 0xef, 0xf6, 0x15, 0x18, 0x15, 0xf8, 0x0e, 0x23, 0x2b, 0x1d, 0xda, 0xf0,
+ 0x26, 0xf9, 0xef, 0x2c, 0x25, 0x0c, 0xeb, 0x13, 0x53, 0xf5, 0x09, 0x1a, 0x5f,
+ 0xbc, 0xe9, 0x3a, 0xca, 0xf6, 0xfa, 0x03, 0xd9, 0xc1, 0x2d, 0x03, 0xf3, 0xfc,
+ 0x26, 0x2f, 0x07, 0x22, 0x20, 0x0e, 0xd5, 0xed, 0xcf, 0xfb, 0x17, 0xfa, 0x2c,
+ 0xe9, 0x5e, 0x18, 0xba, 0x3c, 0xd9, 0xff, 0x21, 0x1c, 0xff, 0x18, 0x13, 0x1c,
+ 0xc7, 0xe7, 0xa4, 0x19, 0x1a, 0x0b, 0x46, 0xdf, 0x17, 0xcf, 0xa3, 0xd0, 0x78,
+ 0xca, 0xfb, 0xc8, 0xcc, 0x01, 0xf8, 0xfa, 0x41, 0x0b, 0x38, 0xfe, 0x34, 0xf6,
+ 0xb1, 0x29, 0x1e, 0xd5, 0x0b, 0xff, 0xc4, 0x01, 0x3d, 0xf9, 0x2b, 0xf2, 0x04,
+ 0x7f, 0xde, 0xfd, 0xf7, 0xc2, 0x3c, 0x34, 0x22, 0x1b, 0x20, 0x10, 0x35, 0x06,
+ 0x0b, 0x00, 0xd0, 0xe3, 0x0f, 0x41, 0x59, 0xbe, 0x20, 0x45, 0xf9, 0xe3, 0xe8,
+ 0xec, 0xee, 0xd8, 0x1d, 0x04, 0xeb, 0x48, 0xf9, 0xdc, 0xe9, 0x08, 0xbf, 0xe7,
+ 0x22, 0xe7, 0x37, 0x0b, 0xcd, 0xd1, 0x05, 0xd4, 0x28, 0x33, 0xc3, 0xed, 0x2c,
+ 0x01, 0xfe, 0x42, 0xf5, 0xc1, 0x4a, 0x3a, 0x03, 0x05, 0xd0, 0xe5, 0xf2, 0xfb,
+ 0x0a, 0xd2, 0x30, 0x09, 0xf8, 0xff, 0x1f, 0x25, 0xe5, 0xf4, 0x10, 0x26, 0x1b,
+ 0x4c, 0x07, 0x00, 0xf2, 0xe6, 0xe5, 0xe4, 0x09, 0xdf, 0x16, 0x4d, 0xf4, 0x35,
+ 0x81, 0x0e, 0x18, 0x24, 0x06, 0xf6, 0xe4, 0xf6, 0xe8, 0xee, 0x79, 0x0b, 0x16,
+ 0xf7, 0xdc, 0xe5, 0x2d, 0x28, 0xeb, 0x2b, 0xfa, 0x0a, 0x21, 0xff, 0xf4, 0x00,
+ 0x1a, 0x36, 0x1e, 0x17, 0xda, 0xcd, 0xed, 0xc9, 0x43, 0xe5, 0x08, 0x0e, 0x33,
+ 0xf6, 0xdf, 0xdb, 0x1e, 0xc8, 0x11, 0xe3, 0x00, 0xfe, 0x21, 0xf7, 0x1b, 0xe5,
+ 0xd0, 0x08, 0xe0, 0x1a, 0x1a, 0x2e, 0xf7, 0xb5, 0x16, 0x2f, 0x28, 0x1f, 0xdf,
+ 0xe3, 0xcf, 0x34, 0xf8, 0xe0, 0xf7, 0x2b, 0xeb, 0x11, 0xd0, 0x1c, 0xe8, 0x03,
+ 0x03, 0xe5, 0x06, 0x54, 0xbf, 0xcf, 0xea, 0x3a, 0xe0, 0xff, 0xcf, 0x2c, 0x02,
+ 0xd4, 0xf4, 0xf9, 0xcf, 0x7f, 0xf2, 0x0d, 0x23, 0x2e, 0xe0, 0xc6, 0x38, 0xe7,
+ 0xe8, 0x1c, 0xbd, 0x30, 0xeb, 0x10, 0x10, 0xe8, 0x24, 0x0b, 0xf1, 0xfd, 0x23,
+ 0x07, 0x0e, 0xe4, 0x12, 0xcd, 0x50, 0x33, 0xfe, 0xf6, 0x0a, 0x03, 0x38, 0x00,
+ 0xf2, 0xec, 0x0b, 0xe2, 0xdd, 0xf2, 0x38, 0xd6, 0xdc, 0xf8, 0x40, 0x39, 0xe0,
+ 0x12, 0x03, 0x04, 0xe6, 0x0c, 0x00, 0xd1, 0x1a, 0xff, 0xd3, 0x40, 0x05, 0x50,
+ 0xf7, 0x0f, 0xfe, 0xcc, 0xee, 0xf0, 0x1d, 0x16, 0x2b, 0xec, 0xf4, 0xf4, 0xf8,
+ 0x25, 0xee, 0x09, 0xd3, 0x2f, 0x02, 0x07, 0xde, 0xa7, 0xeb, 0xd3, 0x3a, 0xdf,
+ 0x2d, 0x2f, 0xf0, 0x49, 0xfe, 0x0c, 0x81, 0xf8, 0xb3, 0xe8, 0xfb, 0x18, 0x24,
+ 0xd0, 0xc1, 0xef, 0x44, 0x9d, 0x0c, 0x15, 0xc4, 0xc0, 0xe1, 0xd6, 0x09, 0x1f,
+ 0x04, 0x0b, 0x0e, 0x19, 0xab, 0xac, 0x32, 0x10, 0x11, 0xb7, 0x02, 0xfe, 0x70,
+ 0x48, 0xe7, 0xcb, 0xd3, 0x9f, 0x2a, 0x28, 0x69, 0xe6, 0x97, 0xfe, 0xab, 0x14,
+ 0x3e, 0xd6, 0x26, 0xd1, 0x44, 0xf3, 0x0c, 0xf7, 0x18, 0xec, 0xcc, 0xe4, 0xf3,
+ 0xbe, 0x26, 0x1a, 0xa6, 0x0a, 0xdd, 0xa2, 0x87, 0x07, 0x43, 0x50, 0xd8, 0x46,
+ 0xa9, 0xf7, 0x36, 0xb1, 0xb4, 0x23, 0x14, 0x10, 0x4a, 0x2a, 0xfc, 0x35, 0xef,
+ 0xd5, 0x1e, 0x36, 0x40, 0x1c, 0xac, 0x23, 0x37, 0x03, 0xaa, 0xc0, 0xb5, 0x2b,
+ 0x3f, 0x54, 0x62, 0x0a, 0xaa, 0x92, 0xf0, 0x1a, 0xe9, 0x02, 0x31, 0xdc, 0x13,
+ 0x2e, 0xee, 0x15, 0x13, 0x13, 0x07, 0x3c, 0xcc, 0x05, 0x37, 0x5a, 0x02, 0x32,
+ 0x0f, 0x1d, 0x3a, 0x39, 0x0f, 0x2c, 0x0b, 0x3f, 0x6e, 0x51, 0xfc, 0x44, 0xcc,
+ 0xf9, 0xed, 0x23, 0xbf, 0x63, 0x0d, 0xd9, 0xdf, 0x16, 0x43, 0x0f, 0xbc, 0xf8,
+ 0xc1, 0x29, 0x26, 0xff, 0xb3, 0x11, 0xdd, 0x3d, 0x12, 0x2d, 0x0b, 0x7f, 0xfb,
+ 0x05, 0x01, 0xd6, 0x38, 0xea, 0xff, 0xf6, 0x37, 0xcd, 0x29, 0xa9, 0xde, 0x1a,
+ 0xce, 0xf7, 0x1f, 0xfb, 0x26, 0x17, 0x16, 0x45, 0x22, 0xde, 0x21, 0x0f, 0xeb,
+ 0xe3, 0x05, 0x0b, 0xee, 0x2b, 0x37, 0x2e, 0xd9, 0x7c, 0xf4, 0x18, 0x15, 0x1a,
+ 0xd1, 0xf9, 0xe1, 0x58, 0x1f, 0x20, 0x0f, 0x35, 0x17, 0x0f, 0xde, 0x52, 0x03,
+ 0xf9, 0xf6, 0xfa, 0x3a, 0x07, 0x22, 0x52, 0xc2, 0x21, 0x1a, 0x1d, 0xb0, 0xe5,
+ 0xfd, 0x0a, 0x1f, 0xc0, 0x3e, 0x4d, 0x53, 0x08, 0xf8, 0xd1, 0xf2, 0x0d, 0xf8,
+ 0x18, 0x2d, 0x21, 0xe8, 0x56, 0xe9, 0x06, 0x03, 0x1d, 0x16, 0x0e, 0x16, 0xf4,
+ 0x0d, 0xe6, 0xfc, 0x3a, 0x0d, 0x25, 0x19, 0x20, 0x03, 0x29, 0x13, 0x2a, 0xf3,
+ 0x4d, 0xc3, 0xc9, 0x10, 0x1e, 0x15, 0xcc, 0x56, 0x24, 0xb7, 0xea, 0xf8, 0x00,
+ 0x72, 0xe9, 0x0a, 0x51, 0x00, 0xc6, 0xda, 0x18, 0x1e, 0x15, 0xab, 0xf7, 0xe4,
+ 0xa4, 0xfb, 0x2d, 0x4f, 0x03, 0x9b, 0x17, 0x04, 0x3e, 0xc1, 0xcc, 0xe7, 0x0f,
+ 0x92, 0xfe, 0x22, 0x07, 0x20, 0xe7, 0xcf, 0xe2, 0xdf, 0xfa, 0x18, 0xda, 0x0e,
+ 0xe0, 0xe0, 0xe6, 0xb4, 0x2e, 0x38, 0x35, 0x28, 0x23, 0xd6, 0x02, 0x1d, 0xfc,
+ 0xed, 0x83, 0xe6, 0xfd, 0x1a, 0xad, 0xb4, 0xf9, 0x0a, 0x1a, 0xcb, 0x16, 0xd1,
+ 0x11, 0xc9, 0x24, 0xef, 0x0c, 0xfd, 0xf5, 0x00, 0x17, 0x02, 0x11, 0x14, 0x28,
+ 0x0a, 0x91, 0xf2, 0x2d, 0xf2, 0xf7, 0x3f, 0x25, 0xee, 0xe7, 0xd3, 0xf8, 0xdd,
+ 0x25, 0x20, 0x11, 0x7f, 0x42, 0xb3, 0x08, 0xe4, 0x2f, 0xda, 0xf7, 0xf3, 0x92,
+ 0x1f, 0x1c, 0x12, 0xae, 0xdc, 0xc3, 0xe1, 0x17, 0xef, 0xf5, 0x05, 0xcd, 0x15,
+ 0xf2, 0xf5, 0x21, 0xff, 0x26, 0xc2, 0x1b, 0xce, 0xfa, 0x03, 0xea, 0x02, 0xfc,
+ 0xe1, 0xca, 0xda, 0x1a, 0x02, 0x61, 0x20, 0xeb, 0xc7, 0xe2, 0x84, 0xfc, 0x00,
+ 0x1b, 0xca, 0xa8, 0xd0, 0x29, 0xef, 0x20, 0xcf, 0x2b, 0xfe, 0x40, 0x17, 0xff,
+ 0xf8, 0xf1, 0x29, 0x91, 0x07, 0xa8, 0xfe, 0xc0, 0xff, 0xff, 0x07, 0xfc, 0xd5,
+ 0xe2, 0x00, 0xed, 0xd7, 0x09, 0x29, 0xbc, 0x07, 0x68, 0xb1, 0xc3, 0x81, 0x10,
+ 0xf1, 0x00, 0x1d, 0xf8, 0xd1, 0x0d, 0xf5, 0xe8, 0xf1, 0xe3, 0xd4, 0x47, 0xf7,
+ 0xec, 0xe0, 0xe7, 0xde, 0x24, 0xf4, 0x61, 0xe3, 0xfe, 0xcb, 0x26, 0xe9, 0xb7,
+ 0x03, 0xd7, 0xb5, 0xe9, 0x2b, 0xec, 0xef, 0x17, 0xde, 0x29, 0xcf, 0x08, 0xf1,
+ 0xe5, 0xd0, 0xa9, 0x00, 0x1f, 0xee, 0x1e, 0xe9, 0x4f, 0x03, 0x18, 0xe0, 0x20,
+ 0xfc, 0x13, 0x6b, 0x0a, 0x01, 0xb8, 0xd3, 0x13, 0xf4, 0x09, 0x1e, 0x33, 0x44,
+ 0xec, 0x02, 0xff, 0x50, 0x5b, 0x00, 0xc7, 0x34, 0xea, 0xe1, 0x1e, 0x45, 0xde,
+ 0xf2, 0x29, 0xd1, 0xe2, 0x14, 0xd4, 0x36, 0x61, 0x7f, 0x12, 0x49, 0xdd, 0xec,
+ 0xe9, 0xf8, 0xc2, 0xf9, 0xc7, 0x05, 0x1d, 0xf9, 0xe2, 0x20, 0x04, 0xf4, 0xe2,
+ 0xe9, 0x2f, 0xeb, 0x0b, 0xef, 0x1f, 0xc0, 0xb8, 0xe8, 0xdd, 0xf9, 0xf3, 0xb4,
+ 0x39, 0x41, 0x18, 0xf8, 0xf0, 0xf3, 0x45, 0xd1, 0xc8, 0xd6, 0x3d, 0xf3, 0xee,
+ 0xec, 0x00, 0x2f, 0x03, 0xf7, 0x1d, 0x20, 0xf5, 0xe8, 0xfd, 0x24, 0xe2, 0x17,
+ 0xf3, 0x07, 0xee, 0xed, 0xd8, 0x2b, 0x3d, 0x18, 0x08, 0xf5, 0x24, 0x0e, 0xf7,
+ 0xed, 0x35, 0x22, 0x0e, 0x30, 0xf4, 0xc6, 0xb9, 0x21, 0xfc, 0x09, 0x06, 0x10,
+ 0xed, 0xfc, 0x38, 0x2b, 0x21, 0x96, 0x05, 0xdb, 0x09, 0xbe, 0x2e, 0xba, 0x52,
+ 0xfc, 0x3d, 0xd4, 0xd0, 0x04, 0x27, 0xae, 0x9d, 0x13, 0x57, 0x34, 0x0c, 0x11,
+ 0xe6, 0x3f, 0x1f, 0xb8, 0x2c, 0xf8, 0x2e, 0xe8, 0xe6, 0x06, 0x32, 0xe6, 0x23,
+ 0xc6, 0x29, 0x11, 0xcd, 0x06, 0xe6, 0xf8, 0x1a, 0x2f, 0x0e, 0x18, 0xc0, 0x11,
+ 0xeb, 0xdb, 0xec, 0x7f, 0xfe, 0xe4, 0xfe, 0xe0, 0xf2, 0xc8, 0x1b, 0x19, 0x0d,
+ 0xe3, 0xcb, 0xdd, 0xc8, 0xd9, 0xde, 0x09, 0xb5, 0xfc, 0x03, 0xef, 0xe9, 0xf0,
+ 0x3e, 0xfc, 0x12, 0xe9, 0xdf, 0xe7, 0xe8, 0xf9, 0xfd, 0xea, 0xff, 0x25, 0x03,
+ 0xd3, 0xd8, 0x14, 0x28, 0x0b, 0x31, 0x52, 0xd9, 0xfd, 0x0a, 0xe0, 0xe0, 0x02,
+ 0xec, 0xc5, 0x12, 0xf0, 0x17, 0xc8, 0x2a, 0xf0, 0x34, 0xd0, 0x1e, 0xea, 0xd5,
+ 0x47, 0x34, 0x29, 0xd0, 0xeb, 0xd4, 0x04, 0x0c, 0x38, 0x0d, 0xc7, 0x10, 0xd1,
+ 0x1d, 0x05, 0xdc, 0xe8, 0xeb, 0x0e, 0xe6, 0x17, 0xf3, 0x30, 0x26, 0xee, 0xf9,
+ 0x50, 0x25, 0xc7, 0x2e, 0x11, 0xd5, 0xbe, 0xfa, 0xca, 0xe5, 0xec, 0xa8, 0x05,
+ 0x00, 0x01, 0xd9, 0xb2, 0x1e, 0x37, 0xee, 0x81, 0x22, 0x0a, 0xb5, 0x26, 0x2e,
+ 0xbf, 0x56, 0x26, 0xfb, 0xe9, 0xbf, 0xee, 0xff, 0x21, 0x02, 0x18, 0xfc, 0x52,
+ 0xe8, 0x20, 0x28, 0xf7, 0xfe, 0xfe, 0xf2, 0x0c, 0x3f, 0xfe, 0xf8, 0x30, 0xfd,
+ 0x1f, 0xdc, 0xfb, 0x20, 0x77, 0x3e, 0xca, 0x3d, 0x2e, 0xf7, 0xca, 0xef, 0xfc,
+ 0x04, 0xec, 0xf6, 0xf4, 0x55, 0x11, 0xfd, 0xef, 0x0e, 0xed, 0xd4, 0x01, 0x09,
+ 0xf6, 0xe5, 0x01, 0x20, 0x04, 0x1a, 0xf2, 0xdf, 0x00, 0x44, 0x9e, 0xfc, 0x0a,
+ 0xe6, 0xff, 0xe8, 0xc8, 0x28, 0x5d, 0x26, 0x04, 0xeb, 0xd5, 0xf9, 0x04, 0xf9,
+ 0xb4, 0xd1, 0x14, 0x1d, 0x38, 0xf4, 0xf0, 0x33, 0x2e, 0x19, 0xd7, 0xe8, 0x13,
+ 0xe7, 0x15, 0x2f, 0x07, 0x00, 0x10, 0x00, 0x6f, 0x31, 0x31, 0x13, 0x3d, 0x28,
+ 0xda, 0x2d, 0xf0, 0x14, 0x2d, 0x13, 0x81, 0xd6, 0xe7, 0x2a, 0x1e, 0x34, 0x2b,
+ 0x0f, 0xc1, 0x1c, 0xcb, 0x21, 0xb7, 0x2f, 0x28, 0xe1, 0x3f, 0x23, 0xf6, 0x3b,
+ 0x20, 0xad, 0x41, 0xe4, 0xe4, 0x11, 0x3c, 0x27, 0x4c, 0x3a, 0x26, 0x23, 0x1f,
+ 0xec, 0x35, 0xe6, 0x1f, 0xf5, 0x3e, 0xfa, 0x07, 0x38, 0x28, 0x20, 0x03, 0x14,
+ 0x31, 0xfa, 0x4b, 0xf5, 0x1a, 0x47, 0x07, 0x32, 0xdc, 0x3d, 0x11, 0xd2, 0x05,
+ 0xf9, 0xd8, 0x08, 0x41, 0x33, 0x01, 0x11, 0x2b, 0x1c, 0x0a, 0x0b, 0xe7, 0x03,
+ 0x0a, 0xdc, 0x39, 0x39, 0x10, 0x24, 0xe5, 0x34, 0xfe, 0xf8, 0xe9, 0xec, 0xd9,
+ 0xd6, 0x07, 0x1b, 0x30, 0x3b, 0xf6, 0xcc, 0x53, 0xd1, 0xf6, 0x09, 0x1e, 0x20,
+ 0xee, 0x13, 0x14, 0xe8, 0xa4, 0x63, 0xc6, 0x1f, 0x0f, 0x0f, 0xd0, 0xe1, 0x5a,
+ 0x13, 0x0c, 0xb3, 0x1a, 0x21, 0x37, 0xc3, 0x58, 0xbf, 0x43, 0xcc, 0x09, 0xe9,
+ 0xc0, 0x63, 0xd6, 0xe0, 0xd9, 0x03, 0xbd, 0x10, 0x19, 0xe9, 0xc1, 0x13, 0xbc,
+ 0xd0, 0x51, 0x0a, 0xa9, 0x39, 0x0b, 0xca, 0x3c, 0xdf, 0xd2, 0x12, 0xbf, 0xcc,
+ 0x15, 0xe5, 0x1d, 0x08, 0xcb, 0xe5, 0x0e, 0xcb, 0x3c, 0xf2, 0xb1, 0x3b, 0xcc,
+ 0xb2, 0x0e, 0x12, 0x35, 0xfa, 0xff, 0xc8, 0x2d, 0xed, 0xfa, 0x3b, 0x04, 0xfc,
+ 0x09, 0xfd, 0xf4, 0xff, 0xf6, 0xe4, 0x02, 0xd4, 0x00, 0x92, 0x26, 0x17, 0xd2,
+ 0xe2, 0xad, 0x27, 0xef, 0xd9, 0x06, 0x64, 0xfe, 0x2d, 0x18, 0x2e, 0xe1, 0xb7,
+ 0x45, 0x30, 0x43, 0xde, 0xdc, 0xff, 0xaf, 0x18, 0xdb, 0xc9, 0xee, 0xf2, 0xd3,
+ 0x3c, 0x13, 0x06, 0x00, 0xf7, 0x13, 0x08, 0xdc, 0xf9, 0xf9, 0xfd, 0x2a, 0xf9,
+ 0xdb, 0xc5, 0x05, 0x23, 0x1c, 0x7f, 0x31, 0xe3, 0xdd, 0x51, 0xe8, 0x05, 0xf5,
+ 0x51, 0xbf, 0xa1, 0x2a, 0x46, 0xdf, 0x73, 0xec, 0xdb, 0xd6, 0xc7, 0x1a, 0xc8,
+ 0xfa, 0xcc, 0x08, 0xbe, 0x05, 0xe6, 0xf8, 0x04, 0x2e, 0x43, 0x08, 0x0f, 0x90,
+ 0x12, 0xe1, 0x25, 0xbb, 0xdd, 0xd8, 0x16, 0x3e, 0xda, 0x5f, 0x12, 0x19, 0xe5,
+ 0xf0, 0xf7, 0x2b, 0x02, 0x1e, 0xf4, 0xef, 0xaf, 0x2e, 0xcf, 0x49, 0xc2, 0xdc,
+ 0xea, 0x1f, 0xc1, 0xee, 0x09, 0x08, 0xf9, 0x36, 0x2a, 0xf0, 0x0d, 0x2b, 0xf0,
+ 0x11, 0x28, 0x28, 0x2a, 0x36, 0xda, 0xb5, 0x7f, 0xe7, 0xdd, 0x32, 0x03, 0x06,
+ 0xfe, 0x07, 0xfc, 0xf6, 0x4a, 0xfc, 0xe9, 0x04, 0x0f, 0xff, 0x0d, 0x4f, 0x1b,
+ 0x07, 0xf7, 0x1f, 0x04, 0xcf, 0xdc, 0x15, 0x0b, 0x2d, 0x47, 0x18, 0xf6, 0xb9,
+ 0xb4, 0xc4, 0xd8, 0x0c, 0x76, 0xe0, 0x06, 0xa8, 0xf5, 0xe0, 0x17, 0x1e, 0x07,
+ 0xe2, 0x5a, 0xec, 0xd7, 0x03, 0xdf, 0xf5, 0x01, 0x04, 0xeb, 0x05, 0xea, 0xdf,
+ 0x42, 0xe6, 0xe4, 0xce, 0x09, 0xfa, 0x38, 0x53, 0x02, 0xda, 0x16, 0xe7, 0x19,
+ 0x41, 0x14, 0xf2, 0xf9, 0xf6, 0x17, 0x03, 0x2d, 0x24, 0x20, 0x6b, 0xf3, 0x55,
+ 0x23, 0xf5, 0xe2, 0x0e, 0x4c, 0xe0, 0x0f, 0xd2, 0x7f, 0xba, 0x1e, 0xd3, 0x1a,
+ 0xd8, 0x3b, 0x18, 0x01, 0x0b, 0xe6, 0xfd, 0x20, 0xde, 0x14, 0xe0, 0x15, 0xf8,
+ 0x0c, 0xfd, 0xd1, 0x0c, 0x3c, 0x04, 0x09, 0x1f, 0xfa, 0xc3, 0x2e, 0x06, 0xf2,
+ 0xf5, 0x0d, 0xa2, 0x19, 0x37, 0xe7, 0xe3, 0xcb, 0xfd, 0x18, 0xdf, 0xf9, 0x02,
+ 0xf0, 0x0c, 0x2e, 0xd7, 0xff, 0xf5, 0x0c, 0xfa, 0xf5, 0x2b, 0x17, 0xe8, 0xb4,
+ 0xfd, 0xe4, 0x25, 0x2e, 0x0b, 0x31, 0x27, 0x1c, 0x03, 0x04, 0x06, 0xdb, 0xd1,
+ 0xff, 0x23, 0x15, 0x21, 0x43, 0xab, 0x20, 0xfb, 0x24, 0x02, 0xf6, 0x28, 0x03,
+ 0xfc, 0xcd, 0x2f, 0xed, 0x34, 0x21, 0x2f, 0x3c, 0xfa, 0xf9, 0x1b, 0xd3, 0xe6,
+ 0x13, 0x4d, 0xe2, 0x1d, 0x7a, 0x01, 0xc6, 0xd7, 0x14, 0xdf, 0x57, 0x4f, 0xdc,
+ 0xd1, 0xaf, 0x97, 0xc7, 0x52, 0xa2, 0x4d, 0x38, 0x6f, 0xe4, 0xe2, 0x60, 0x4b,
+ 0xcb, 0xf8, 0xd5, 0xbd, 0x33, 0x1d, 0xfa, 0x6a, 0x14, 0xf8, 0xed, 0x1e, 0x57,
+ 0x5f, 0xdb, 0xcf, 0xc5, 0xbf, 0xf2, 0xe4, 0x3c, 0xc5, 0xf2, 0x12, 0xee, 0x15,
+ 0x0e, 0x44, 0x3c, 0xde, 0x20, 0x23, 0x21, 0x48, 0xd5, 0x32, 0x5d, 0x07, 0xf7,
+ 0xe3, 0x26, 0x7f, 0xe2, 0xe3, 0xe7, 0xcd, 0x27, 0x5f, 0xe4, 0x37, 0x49, 0x21,
+ 0x2c, 0xd7, 0x39, 0xd5, 0x39, 0x2f, 0x00, 0xad, 0x24, 0x2f, 0xfb, 0xef, 0xf7,
+ 0x24, 0x2f, 0xe8, 0x02, 0x17, 0xb8, 0xdd, 0xf5, 0x41, 0x8f, 0x06, 0x34, 0x65,
+ 0xfe, 0xf5, 0x8b, 0x5b, 0x22, 0xfa, 0x24, 0x13, 0x0d, 0xdf, 0xec, 0x5f, 0xd9,
+ 0xca, 0x0e, 0xd0, 0xf1, 0x0e, 0xeb, 0x4b, 0xc4, 0xcf, 0xda, 0xce, 0xea, 0xec,
+ 0xd9, 0x1c, 0xc6, 0xc8, 0xf3, 0x05, 0xbd, 0x04, 0xf9, 0xea, 0x06, 0xd8, 0x26,
+ 0xaa, 0x08, 0x31, 0xc3, 0xe1, 0xef, 0xec, 0xfe, 0x55, 0x1e, 0x15, 0x03, 0xfe,
+ 0x06, 0x15, 0xf1, 0xdd, 0x0e, 0xe2, 0xf3, 0x9e, 0xb7, 0x30, 0x2a, 0x9c, 0x47,
+ 0xfb, 0xe6, 0xdb, 0xff, 0xcb, 0x2e, 0xce, 0x0a, 0xfd, 0x05, 0xde, 0xb3, 0xd8,
+ 0xe4, 0x34, 0x34, 0xed, 0x10, 0xb7, 0xf3, 0x37, 0xcf, 0xd4, 0xb5, 0xdc, 0xf4,
+ 0xe7, 0xca, 0xff, 0xcb, 0x2e, 0x31, 0xff, 0x25, 0xf7, 0x29, 0xb9, 0xc4, 0xf5,
+ 0x2f, 0x0d, 0x16, 0x04, 0xe0, 0x11, 0x10, 0x17, 0x08, 0x1e, 0xed, 0xef, 0x0e,
+ 0xf0, 0x06, 0xdf, 0xc6, 0xcf, 0xfa, 0xff, 0x08, 0x2d, 0xca, 0xe1, 0x15, 0xc5,
+ 0xa9, 0xfb, 0xea, 0xf8, 0xa8, 0x08, 0xf3, 0xdd, 0xc0, 0x7f, 0x34, 0x20, 0x01,
+ 0x19, 0xde, 0xd3, 0x96, 0x11, 0x27, 0xea, 0xd5, 0xfc, 0x02, 0xcb, 0xac, 0x16,
+ 0xbe, 0x62, 0xe5, 0x3e, 0xf6, 0xdd, 0x1a, 0xd5, 0x24, 0xd8, 0x37, 0xf9, 0xe1,
+ 0xcc, 0x8e, 0xe8, 0x4e, 0x04, 0x1b, 0xe3, 0xe0, 0xdf, 0x08, 0xe6, 0x6c, 0x02,
+ 0x97, 0xf2, 0x1c, 0x2d, 0xed, 0xc1, 0xc9, 0x29, 0x1b, 0x0f, 0xfb, 0x15, 0xb3,
+ 0xf1, 0xd4, 0xcd, 0x7a, 0xce, 0x01, 0xf9, 0x56, 0x02, 0xf6, 0x06, 0xe4, 0x46,
+ 0x71, 0xf4, 0xb4, 0x5b, 0x14, 0x2b, 0x34, 0x10, 0x17, 0xd1, 0xea, 0x1a, 0xe9,
+ 0xe5, 0xbe, 0xc0, 0xf4, 0xb0, 0xb1, 0x3a, 0x8d, 0x47, 0xc0, 0xfb, 0x20, 0xdf,
+ 0xff, 0xf0, 0xf7, 0x15, 0x64, 0x2a, 0xe2, 0x42, 0x49, 0xf2, 0xcf, 0xfa, 0x1f,
+ 0x22, 0x00, 0x2d, 0x03, 0x2d, 0xbb, 0xfc, 0x7f, 0x31, 0x15, 0xdf, 0xd3, 0x0b,
+ 0xfb, 0xf4, 0x1e, 0x20, 0xc4, 0xdd, 0x0c, 0xef, 0xe4, 0xc4, 0xfd, 0x14, 0x2e,
+ 0xe1, 0xd0, 0xec, 0x03, 0x01, 0xf0, 0x31, 0x2b, 0x13, 0xd7, 0x1f, 0xf7, 0x08,
+ 0x24, 0x35, 0xe8, 0x18, 0x00, 0xfc, 0x0d, 0xf6, 0x15, 0xf8, 0x24, 0x1b, 0xc0,
+ 0xd2, 0xf8, 0x0e, 0xee, 0xd1, 0xee, 0x0d, 0xd0, 0xfb, 0x42, 0xfd, 0x42, 0x39,
+ 0x18, 0x26, 0xbb, 0x09, 0x02, 0x2c, 0x2c, 0x37, 0x01, 0x31, 0xe5, 0xe9, 0x16,
+ 0xdb, 0x1f, 0x02, 0x31, 0x04, 0xec, 0x3d, 0x1a, 0xe3, 0x21, 0xf8, 0x0a, 0x1b,
+ 0xf3, 0x7f, 0x0e, 0x3c, 0x3b, 0x0f, 0x0e, 0x15, 0x12, 0x35, 0xee, 0x17, 0x09,
+ 0xf3, 0x36, 0x2f, 0xdd, 0x06, 0x40, 0x0c, 0x2f, 0x08, 0x23, 0xe8, 0xe1, 0x10,
+ 0x49, 0xeb, 0x03, 0x03, 0xd5, 0x10, 0x44, 0xf0, 0x5d, 0xf8, 0xf3, 0x00, 0xda,
+ 0x4a, 0xe4, 0x2a, 0xf4, 0xdb, 0x0d, 0x49, 0xee, 0x1b, 0x12, 0xf4, 0xed, 0x0d,
+ 0x12, 0xf9, 0xec, 0xbe, 0x05, 0xf4, 0x19, 0x49, 0xf7, 0x07, 0xb6, 0xfa, 0xc2,
+ 0x06, 0xd0, 0xa0, 0x0d, 0x45, 0x03, 0x8e, 0x34, 0x40, 0xe3, 0xc7, 0x19, 0x17,
+ 0xfc, 0xa3, 0x15, 0xea, 0xf1, 0x9f, 0xe4, 0xaa, 0x11, 0xbc, 0x30, 0xdb, 0xad,
+ 0x7f, 0x41, 0xf5, 0x34, 0x3e, 0xec, 0xfd, 0xf0, 0xfe, 0xa0, 0x13, 0x28, 0xf6,
+ 0xdf, 0xc4, 0xfd, 0xe8, 0x2a, 0xc0, 0xed, 0x54, 0x93, 0x4e, 0xfd, 0xd4, 0xec,
+ 0xf3, 0x24, 0xd1, 0x39, 0xd3, 0xd1, 0xe6, 0xd5, 0xe6, 0xd9, 0xef, 0xb6, 0xd3,
+ 0x2a, 0x04, 0xd8, 0x33, 0xd6, 0xc9, 0xd3, 0xb6, 0xdc, 0xbb, 0x19, 0x16, 0xfe,
+ 0xfa, 0xe1, 0x09, 0x9b, 0xb0, 0xa0, 0x44, 0x17, 0xfc, 0xd1, 0xcf, 0xd6, 0xdb,
+ 0x51, 0x0e, 0xec, 0x37, 0xc3, 0xe0, 0x0d, 0xbb, 0xda, 0xfa, 0xe2, 0xf0, 0xcf,
+ 0x2c, 0xa2, 0x25, 0xf8, 0xc1, 0xde, 0x42, 0x27, 0x09, 0xd7, 0x27, 0x9a, 0x53,
+ 0xf5, 0x14, 0x43, 0x69, 0x6f, 0x14, 0x23, 0x0d, 0xda, 0x4b, 0xf4, 0xf2, 0x0b,
+ 0x4c, 0x7f, 0x19, 0x36, 0x33, 0x1b, 0xca, 0xe9, 0x1e, 0x0c, 0x04, 0x48, 0x04,
+ 0xdb, 0xe1, 0xf2, 0xf2, 0x1f, 0xf4, 0x24, 0xec, 0x29, 0xf2, 0x16, 0x0f, 0xfb,
+ 0xdf, 0xb9, 0xe1, 0x41, 0xfa, 0x2c, 0x0d, 0xe7, 0xdf, 0xd4, 0xb9, 0xf4, 0x37,
+ 0x16, 0x25, 0xf8, 0xfd, 0xc9, 0x29, 0x02, 0x2a, 0xea, 0x40, 0xf1, 0x04, 0x1b,
+ 0x12, 0x02, 0x5b, 0xbb, 0xd4, 0x23, 0x0c, 0xd4, 0xe5, 0xd0, 0x02, 0x13, 0xec,
+ 0x0d, 0x0e, 0xeb, 0x01, 0x1c, 0x41, 0x04, 0xfa, 0x21, 0x1e, 0xf3, 0x14, 0x1b,
+ 0xc8, 0x15, 0xf2, 0xe1, 0xd8, 0xf2, 0xfa, 0x21, 0xe8, 0xd5, 0x5e, 0xfa, 0x02,
+ 0x00, 0xeb, 0x13, 0xdb, 0xa7, 0xf3, 0x16, 0x26, 0x18, 0xf5, 0x29, 0x0b, 0xd2,
+ 0x18, 0x1f, 0x3c, 0x18, 0x2f, 0x1c, 0x0b, 0x00, 0x25, 0xed, 0xb2, 0xe0, 0x47,
+ 0x3a, 0x05, 0x55, 0x12, 0xe4, 0x08, 0x7f, 0xe7, 0xbc, 0x53, 0xc3, 0xab, 0x2a,
+ 0x37, 0x05, 0x03, 0x1e, 0xed, 0xdf, 0xbf, 0x0d, 0x2b, 0xea, 0xd2, 0xee, 0xde,
+ 0x01, 0xbb, 0x07, 0xf6, 0x22, 0x2e, 0x69, 0x08, 0x30, 0xf6, 0xe6, 0x0e, 0xe9,
+ 0xc0, 0xf5, 0xf7, 0xf5, 0x09, 0x0d, 0x26, 0xf6, 0xbf, 0xd6, 0xa7, 0x00, 0x07,
+ 0x0f, 0x32, 0xb5, 0x17, 0x98, 0x22, 0x1c, 0x0b, 0x51, 0x32, 0xf3, 0xdb, 0x13,
+ 0x41, 0x94, 0x1a, 0x0a, 0x1e, 0x25, 0xf5, 0x19, 0x6f, 0x3d, 0x00, 0x3b, 0x19,
+ 0x33, 0xc7, 0xc3, 0xff, 0xee, 0xe8, 0x20, 0xc6, 0xe8, 0xf3, 0xe2, 0xfe, 0xf1,
+ 0xd9, 0xfd, 0x37, 0x22, 0xfc, 0xea, 0xf4, 0xfe, 0x75, 0xef, 0x16, 0xef, 0x4e,
+ 0x2f, 0xfe, 0xd0, 0xca, 0x09, 0xfa, 0xee, 0x01, 0x1e, 0x1b, 0xfe, 0x13, 0x0a,
+ 0x12, 0x07, 0x01, 0xf7, 0x03, 0xee, 0x31, 0x41, 0xa8, 0x09, 0xef, 0x3b, 0x13,
+ 0x05, 0xfc, 0x09, 0x20, 0x30, 0x18, 0xf3, 0x19, 0xf9, 0x42, 0x30, 0x74, 0xdb,
+ 0x07, 0xc7, 0xb7, 0xef, 0xde, 0xee, 0x18, 0xd2, 0xb3, 0xb9, 0x01, 0x04, 0x11,
+ 0xff, 0xb9, 0xc3, 0x01, 0xd4, 0x24, 0xd2, 0xcc, 0x1a, 0x4a, 0xd2, 0xe4, 0x2d,
+ 0xa8, 0xad, 0xa9, 0xe7, 0xaf, 0x2d, 0xe0, 0x69, 0x07, 0xfc, 0xb7, 0x40, 0xe2,
+ 0xe8, 0xf3, 0xb1, 0xfd, 0x1c, 0xfd, 0x51, 0x03, 0xe1, 0xeb, 0xf1, 0x9f, 0xca,
+ 0xe1, 0x46, 0xd6, 0xce, 0xe5, 0x27, 0x34, 0xdf, 0x4a, 0xeb, 0x09, 0x09, 0xb3,
+ 0xdc, 0xf5, 0xb2, 0xd9, 0x44, 0x34, 0x0c, 0xf0, 0xf2, 0xcf, 0xe7, 0xc1, 0x90,
+ 0xbf, 0x0a, 0x10, 0xc0, 0x23, 0xf7, 0x67, 0xbd, 0xca, 0x28, 0xd7, 0x14, 0xc3,
+ 0x54, 0xea, 0xb6, 0x7f, 0xd3, 0xc8, 0xd3, 0x10, 0xe4, 0xe5, 0x3a, 0x43, 0x0b,
+ 0xdb, 0xc8, 0xb5, 0xec, 0x53, 0x34, 0x26, 0xc9, 0x1d, 0xcc, 0xc7, 0xf0, 0x1c,
+ 0x25, 0x0a, 0x27, 0xe1, 0x08, 0xec, 0xd4, 0x15, 0xb4, 0x49, 0xe5, 0x60, 0x6c,
+ 0xf9, 0xd0, 0xa3, 0x41, 0xea, 0x2a, 0xf3, 0xfa, 0x29, 0xc0, 0x06, 0xe3, 0xe3,
+ 0x39, 0x29, 0xd8, 0x61, 0x16, 0xf4, 0x27, 0x42, 0x07, 0xb8, 0x15, 0x27, 0xd2,
+ 0xe9, 0xc2, 0x7f, 0x07, 0xe1, 0x6d, 0x2a, 0xec, 0x35, 0xf3, 0x09, 0xf3, 0x3d,
+ 0xf1, 0xeb, 0x34, 0x01, 0x07, 0xf4, 0xfd, 0x00, 0xd8, 0x1f, 0x1d, 0xfd, 0xe5,
+ 0x07, 0xe5, 0xfc, 0xfe, 0x24, 0x3f, 0xe3, 0x3e, 0x19, 0x09, 0x4a, 0xe3, 0xe7,
+ 0x6d, 0xdd, 0x17, 0xee, 0x16, 0x38, 0x13, 0xea, 0xb1, 0xf5, 0xf4, 0xd2, 0x0d,
+ 0x10, 0x01, 0xdb, 0x11, 0xfb, 0xef, 0xd3, 0x27, 0xe9, 0x22, 0x31, 0xe6, 0x47,
+ 0x14, 0x24, 0xc8, 0x14, 0xd1, 0xeb, 0x04, 0x11, 0x0d, 0xee, 0xf6, 0xe2, 0x14,
+ 0xdf, 0xfe, 0xdd, 0x0a, 0xf8, 0xf6, 0x27, 0x75, 0xe1, 0xa7, 0xde, 0x5c, 0x0f,
+ 0xcc, 0xd7, 0xe9, 0xf9, 0xcd, 0x0d, 0x91, 0xef, 0xf1, 0xf2, 0x7f, 0xd7, 0xd4,
+ 0x12, 0xf5, 0x0e, 0xd4, 0xdb, 0x3f, 0x4c, 0xcd, 0x10, 0xf9, 0x4d, 0x05, 0xe9,
+ 0x3d, 0x1b, 0x4e, 0xdc, 0x13, 0x33, 0x0a, 0x16, 0xf0, 0xeb, 0xa6, 0xe0, 0xdf,
+ 0x12, 0x08, 0xd6, 0x12, 0x00, 0x1b, 0x1b, 0xf6, 0x06, 0x38, 0xf5, 0xd2, 0x57,
+ 0xf5, 0xfa, 0x0b, 0xf3, 0x2f, 0x14, 0xfe, 0x26, 0xf2, 0xd3, 0xe5, 0x1e, 0xfb,
+ 0xdb, 0xea, 0xbe, 0x0b, 0x52, 0x0f, 0x16, 0xec, 0xef, 0x04, 0x0f, 0x34, 0x08,
+ 0xfa, 0x20, 0xc4, 0x01, 0x41, 0x18, 0xdf, 0xd0, 0xd0, 0x07, 0xf0, 0xf0, 0x11,
+ 0xf6, 0xc8, 0xee, 0x28, 0x14, 0xc6, 0xbf, 0xf6, 0xf4, 0x0f, 0x29, 0xf5, 0x1b,
+ 0x09, 0x09, 0x01, 0xe1, 0xf4, 0xc0, 0xe2, 0xe2, 0x13, 0x1a, 0xf8, 0x07, 0x07,
+ 0x08, 0xf2, 0xd0, 0xea, 0x0d, 0x4c, 0x01, 0xa6, 0x48, 0x04, 0x0a, 0x14, 0x90,
+ 0xfe, 0x0f, 0x2b, 0xa6, 0x7f, 0x84, 0x2d, 0x37, 0x07, 0xb2, 0xeb, 0x63, 0x0b,
+ 0xc9, 0xa5, 0xef, 0x35, 0x0c, 0xe3, 0x13, 0xf6, 0x20, 0xe5, 0xec, 0x09, 0x21,
+ 0x6b, 0xe2, 0x02, 0xc2, 0xd3, 0xe5, 0x13, 0xe6, 0x4a, 0x19, 0x9c, 0x24, 0x3b,
+ 0xba, 0xcb, 0xda, 0x00, 0x55, 0xee, 0x35, 0xad, 0xf2, 0x9a, 0x75, 0xe8, 0xf0,
+ 0x03, 0x0b, 0x17, 0xed, 0xd5, 0x18, 0xc9, 0xfe, 0xe0, 0xf6, 0xbd, 0xe8, 0xb8,
+ 0x53, 0xd8, 0xe8, 0x1f, 0x16, 0xd2, 0xdd, 0x1f, 0x50, 0x37, 0xf7, 0x54, 0x23,
+ 0x17, 0xd4, 0xd7, 0xd7, 0xf7, 0xd3, 0xd9, 0x08, 0x37, 0x21, 0xcf, 0xf5, 0x17,
+ 0xe3, 0xd9, 0xb6, 0xe5, 0x25, 0xd0, 0xee, 0x27, 0xd3, 0x46, 0x8b, 0x12, 0x21,
+ 0x26, 0x74, 0xaa, 0x10, 0x02, 0xff, 0x46, 0x31, 0x16, 0x30, 0xb2, 0x0b, 0x3e,
+ 0xc4, 0x30, 0x61, 0xfe, 0xf8, 0x4c, 0xb8, 0xfc, 0xee, 0x19, 0xf0, 0xcd, 0x1b,
+ 0x26, 0x35, 0x38, 0x0c, 0xe7, 0xf0, 0xfd, 0xec, 0xe5, 0x3d, 0xf0, 0x08, 0xd1,
+ 0x16, 0x16, 0x14, 0xce, 0x08, 0xfa, 0x25, 0xfb, 0xe6, 0x26, 0xd2, 0xfa, 0xff,
+ 0x04, 0xf4, 0x19, 0x0b, 0x01, 0x07, 0x17, 0xf4, 0x08, 0xdc, 0xc5, 0x08, 0xe0,
+ 0x4f, 0x24, 0xe6, 0xd5, 0x16, 0x19, 0xf9, 0xe8, 0xc6, 0xc9, 0xeb, 0x21, 0x06,
+ 0x2d, 0x15, 0xf2, 0x1a, 0xfa, 0xff, 0x0a, 0xf2, 0xfa, 0xeb, 0xa8, 0x03, 0xbe,
+ 0xd8, 0xf4, 0xf1, 0xfa, 0x35, 0x33, 0x46, 0xc1, 0xf7, 0x2b, 0xc3, 0xcb, 0xf6,
+ 0xd7, 0xf5, 0xf5, 0x34, 0x06, 0xde, 0x1c, 0x2c, 0xd7, 0xbf, 0xe8, 0xca, 0x22,
+ 0xff, 0x58, 0x14, 0xe0, 0xd9, 0xef, 0xd4, 0x33, 0x13, 0xff, 0x08, 0x19, 0xd7,
+ 0x81, 0x01, 0xf8, 0xea, 0xfb, 0x2b, 0x05, 0x16, 0x1b, 0x0e, 0xd8, 0xdf, 0x0f,
+ 0x1a, 0xfe, 0x15, 0x03, 0x2c, 0x07, 0x1c, 0xf4, 0xe5, 0xe0, 0xd9, 0x03, 0x03,
+ 0xff, 0xc4, 0x2f, 0x49, 0x12, 0xde, 0xd7, 0xc9, 0xf5, 0xfb, 0xfd, 0x23, 0x1e,
+ 0xf1, 0x20, 0xd7, 0xd1, 0x34, 0x1e, 0x29, 0xf3, 0x16, 0xf7, 0x34, 0x21, 0xd4,
+ 0x0c, 0xe0, 0xf8, 0xec, 0x2c, 0x06, 0xd0, 0x2d, 0x22, 0x09, 0x33, 0x64, 0xf2,
+ 0x32, 0xef, 0x1f, 0xea, 0xfd, 0xaf, 0xfd, 0xf7, 0xf0, 0x02, 0x2e, 0xfa, 0xcd,
+ 0xf0, 0xec, 0xea, 0xf8, 0xe7, 0x07, 0xe7, 0xe1, 0xde, 0xfb, 0x04, 0xe6, 0x00,
+ 0x00, 0xe9, 0x2a, 0x51, 0xdd, 0x2d, 0xf9, 0xfe, 0xdf, 0xed, 0xf3, 0x12, 0xba,
+ 0x81, 0x1f, 0x07, 0xe2, 0xe2, 0x08, 0xff, 0x00, 0x20, 0xe3, 0x28, 0xf9, 0xee,
+ 0xf2, 0x01, 0xfa, 0x3c, 0x1a, 0x11, 0xec, 0xff, 0x25, 0x1e, 0x29, 0xfb, 0x17,
+ 0xcb, 0xcd, 0x40, 0xf2, 0x03, 0xeb, 0xdf, 0xce, 0x07, 0x0f, 0x2d, 0xec, 0xe2,
+ 0x03, 0x17, 0x10, 0xf8, 0x16, 0xf3, 0xf2, 0x0a, 0xd4, 0xee, 0x3f, 0xfd, 0x1e,
+ 0x10, 0x46, 0xe7, 0xe5, 0xd5, 0xba, 0xed, 0xff, 0xf6, 0x58, 0x13, 0xda, 0x35,
+ 0xba, 0xe2, 0x1b, 0x25, 0xe7, 0xf1, 0xcc, 0xb3, 0x1e, 0x44, 0xed, 0x0e, 0xcc,
+ 0xe7, 0xe5, 0xeb, 0x36, 0xcb, 0x57, 0x0b, 0xc7, 0x32, 0x1d, 0x3c, 0x18, 0xd1,
+ 0xfd, 0x06, 0xdf, 0x07, 0xcf, 0xe0, 0x02, 0x1d, 0xed, 0x2e, 0xbf, 0x0d, 0xff,
+ 0x07, 0xc7, 0xf5, 0xe6, 0xd0, 0xf5, 0x00, 0xf8, 0x17, 0xfe, 0xfd, 0xe8, 0x3a,
+ 0xe7, 0x2b, 0x18, 0x4f, 0xf8, 0x2e, 0xfb, 0x2d, 0xa1, 0x01, 0xe9, 0x81, 0xe2,
+ 0xbb, 0x00, 0xcf, 0xf3, 0xc8, 0xf9, 0x57, 0xc9, 0x16, 0xd2, 0x22, 0xe9, 0x06,
+ 0xf2, 0x14, 0x15, 0x4a, 0xe9, 0xf4, 0x09, 0xef, 0x1a, 0x97, 0x20, 0xdf, 0xde,
+ 0x21, 0xfc, 0x0a, 0xdb, 0xd9, 0x02, 0xe9, 0xf5, 0xf9, 0xf4, 0x0f, 0x2b, 0x25,
+ 0x39, 0x0a, 0x36, 0x20, 0xf0, 0xef, 0x27, 0xfd, 0xeb, 0x5d, 0x08, 0xe1, 0xfe,
+ 0x46, 0xea, 0x50, 0x11, 0x0f, 0x23, 0xf2, 0xd1, 0x2d, 0x0c, 0x32, 0xed, 0x0b,
+ 0xd6, 0x25, 0xbc, 0x7f, 0x0e, 0xe6, 0xfc, 0x17, 0x47, 0xe7, 0x13, 0x3e, 0x15,
+ 0x1a, 0x13, 0xde, 0x12, 0x1d, 0x31, 0xee, 0xe9, 0x36, 0xe8, 0x24, 0xe7, 0x15,
+ 0x03, 0x03, 0x48, 0x24, 0xe3, 0xeb, 0x08, 0x09, 0xf9, 0x20, 0x17, 0xe5, 0xf7,
+ 0xec, 0xf7, 0x3b, 0x17, 0xaf, 0xfd, 0x02, 0x77, 0x22, 0x14, 0xe2, 0xe8, 0x1b,
+ 0xf0, 0xe4, 0x21, 0xb1, 0xcc, 0xfe, 0xec, 0xac, 0xc4, 0xc7, 0xc9, 0x03, 0xf8,
+ 0xde, 0xd9, 0xf3, 0xc3, 0xea, 0xed, 0xfb, 0x0c, 0x35, 0x22, 0x00, 0x64, 0x3b,
+ 0x09, 0x0b, 0x4e, 0x16, 0x22, 0x06, 0xf7, 0x6d, 0x09, 0xab, 0xed, 0xf6, 0x00,
+ 0x11, 0xb4, 0x0c, 0xf6, 0xf1, 0x26, 0xb2, 0x2b, 0x05, 0x04, 0x01, 0xa3, 0xd6,
+ 0x0c, 0x57, 0xe5, 0x07, 0x32, 0xf2, 0xf1, 0x00, 0xed, 0x24, 0xc1, 0xed, 0x12,
+ 0x45, 0xce, 0x35, 0xfd, 0xec, 0x2f, 0xd0, 0xed, 0xe8, 0xe5, 0x21, 0x0e, 0x0d,
+ 0x6c, 0x68, 0xcb, 0xdd, 0x20, 0x23, 0x30, 0xea, 0x20, 0x18, 0x1a, 0xee, 0xf1,
+ 0xaf, 0xef, 0xfb, 0xe2, 0xa3, 0xc0, 0xee, 0xf2, 0x7f, 0x82, 0x28, 0x36, 0x2e,
+ 0xf7, 0x12, 0x07, 0xc3, 0xee, 0xe2, 0x16, 0xea, 0x2f, 0x0a, 0xfc, 0x0b, 0xef,
+ 0x11, 0xb6, 0xcb, 0x18, 0xdc, 0x0c, 0x30, 0x3c, 0x0b, 0x39, 0x41, 0xe3, 0xe3,
+ 0x08, 0xff, 0x4c, 0xbb, 0xaf, 0x09, 0x6a, 0x0a, 0xd0, 0xe6, 0x1a, 0x1b, 0xea,
+ 0x29, 0x27, 0xdc, 0xe2, 0xc0, 0x1e, 0xff, 0xcf, 0x2c, 0x37, 0x3b, 0x05, 0xe8,
+ 0xb9, 0x33, 0xd0, 0x00, 0xdb, 0x20, 0xc7, 0x41, 0xc3, 0x0a, 0xf0, 0x20, 0x54,
+ 0x01, 0x0b, 0xd6, 0xef, 0x07, 0x18, 0x42, 0xcf, 0x26, 0x5b, 0xce, 0xf2, 0xea,
+ 0xfb, 0x0a, 0x2d, 0xf8, 0x02, 0xe2, 0xcd, 0xd2, 0x36, 0x02, 0x10, 0x27, 0x1b,
+ 0xca, 0x33, 0x34, 0xdb, 0xf5, 0x33, 0xdd, 0x1a, 0x0e, 0x3c, 0xd5, 0xd9, 0x16,
+ 0x15, 0x15, 0x0c, 0xe4, 0x15, 0x1d, 0x21, 0x20, 0x02, 0xf0, 0xe2, 0x3f, 0xd2,
+ 0x28, 0x16, 0xf7, 0x3d, 0xca, 0xca, 0x1e, 0xc9, 0xdf, 0x2d, 0xe4, 0x21, 0xe8,
+ 0xbe, 0x21, 0x2d, 0x06, 0xe5, 0xfc, 0x11, 0xf9, 0xfb, 0x2c, 0xeb, 0x39, 0x33,
+ 0x07, 0x06, 0x08, 0xc0, 0xee, 0xe9, 0xe5, 0x81, 0xf7, 0x04, 0x1c, 0x39, 0xff,
+ 0xf2, 0x13, 0x13, 0xf7, 0xc6, 0x46, 0xdc, 0xad, 0x04, 0xf7, 0x0b, 0x09, 0x04,
+ 0xde, 0x20, 0xdc, 0x00, 0xe3, 0x16, 0xd4, 0xde, 0xbf, 0xba, 0xe5, 0x62, 0xe7,
+ 0xf6, 0xde, 0xde, 0xd9, 0x30, 0xee, 0xf8, 0x00, 0x01, 0xdf, 0x05, 0xdf, 0xef,
+ 0x31, 0xec, 0xda, 0x1c, 0xf0, 0x00, 0x1b, 0xbf, 0xdc, 0xc1, 0x19, 0xe4, 0x2e,
+ 0xef, 0x15, 0x03, 0xd8, 0x1d, 0xdd, 0x02, 0x2b, 0x2b, 0xf1, 0xf8, 0x3d, 0x1d,
+ 0xfe, 0x1f, 0xce, 0x37, 0x35, 0xd6, 0x0f, 0xfb, 0x20, 0xb3, 0xe3, 0x33, 0xf7,
+ 0xc9, 0xd3, 0x0e, 0xe8, 0x07, 0x1a, 0xea, 0x04, 0xf4, 0xf7, 0x0c, 0x13, 0x4c,
+ 0x04, 0xe2, 0xd5, 0x0e, 0xbb, 0x1f, 0xde, 0xfb, 0x9e, 0x99, 0x12, 0x8c, 0xeb,
+ 0x43, 0xe3, 0xf8, 0x09, 0xe0, 0x1a, 0xe1, 0xdc, 0x16, 0x0d, 0x15, 0x09, 0x0b,
+ 0xbc, 0xf5, 0xfe, 0x23, 0x2f, 0xe6, 0x27, 0xed, 0xe1, 0x21, 0xd5, 0x44, 0xf1,
+ 0xe3, 0xed, 0xff, 0xb1, 0xeb, 0xf6, 0xe0, 0x13, 0xfe, 0x41, 0x08, 0xf9, 0x12,
+ 0xfb, 0x1a, 0xf7, 0x3c, 0x01, 0xdf, 0x7f, 0x12, 0xe2, 0x76, 0x24, 0x19, 0xf0,
+ 0xd3, 0x5e, 0xe8, 0xeb, 0x13, 0xda, 0x07, 0x17, 0xe6, 0x0a, 0x05, 0xf6, 0x17,
+ 0xd5, 0xcf, 0xe5, 0x0e, 0xc6, 0x3e, 0xd9, 0x00, 0xb1, 0x16, 0xec, 0xce, 0x23,
+ 0x6e, 0xdd, 0xdc, 0x3c, 0xd9, 0xd8, 0x13, 0xde, 0xf8, 0x19, 0xf8, 0x63, 0xca,
+ 0x11, 0xa3, 0xf3, 0x86, 0x0c, 0x31, 0x12, 0x16, 0x9f, 0xe1, 0xf0, 0xb9, 0x04,
+ 0xa3, 0xea, 0x01, 0x12, 0x19, 0x38, 0xd1, 0x2e, 0x44, 0x01, 0xfa, 0xb8, 0xcd,
+ 0xf1, 0x02, 0xd8, 0x66, 0xeb, 0x45, 0xea, 0xca, 0xf1, 0xb7, 0xe9, 0xf2, 0xe4,
+ 0xc5, 0x08, 0x02, 0xf9, 0x14, 0xfe, 0x11, 0x33, 0x2e, 0xe1, 0x21, 0x34, 0x13,
+ 0x2a, 0xf0, 0x24, 0xcc, 0xb9, 0x36, 0xd1, 0xbf, 0xbf, 0xcf, 0x59, 0xc7, 0x81,
+ 0x13, 0xa2, 0xfb, 0x0d, 0xf3, 0xdc, 0x0d, 0xc7, 0xf5, 0xd8, 0xbe, 0x05, 0xd5,
+ 0xe6, 0x23, 0x76, 0xda, 0xf3, 0x19, 0x26, 0xfb, 0x34, 0xd9, 0x13, 0x40, 0x0d,
+ 0x9f, 0x41, 0x7b, 0xfb, 0x04, 0x1b, 0xcc, 0x32, 0x21, 0x1c, 0x15, 0x1b, 0xee,
+ 0x4e, 0xe5, 0x0c, 0x04, 0x46, 0xe4, 0xfd, 0xd8, 0xf1, 0xf3, 0xe8, 0x14, 0x21,
+ 0xed, 0xfc, 0x0f, 0x2e, 0xf3, 0xf1, 0xcc, 0xd5, 0xfa, 0xeb, 0xe6, 0x25, 0x7f,
+ 0x0f, 0x15, 0xf5, 0x1a, 0x24, 0x53, 0x1a, 0x5b, 0xee, 0xde, 0x00, 0x55, 0xf4,
+ 0xf9, 0xe1, 0xd9, 0x05, 0x27, 0xd3, 0x46, 0x22, 0x0a, 0x05, 0x39, 0xe0, 0x0c,
+ 0x2f, 0xdb, 0xfd, 0xfe, 0x13, 0xcf, 0xb3, 0xc1, 0x0c, 0xe3, 0x08, 0xde, 0xe5,
+ 0x24, 0xe7, 0xd3, 0x34, 0xfa, 0x0b, 0x10, 0x33, 0xe3, 0xd9, 0x01, 0x09, 0x14,
+ 0xed, 0x21, 0xdc, 0xf4, 0xc0, 0x1f, 0x54, 0xcc, 0x2b, 0x15, 0xf3, 0xf4, 0xc1,
+ 0x12, 0x14, 0xfd, 0xe0, 0xee, 0x08, 0x0c, 0xdc, 0xdf, 0xe0, 0x03, 0x04, 0x0e,
+ 0xe9, 0xd7, 0xfd, 0xfc, 0xee, 0x00, 0xf3, 0xfc, 0xfb, 0xf6, 0x07, 0xee, 0x16,
+ 0xf4, 0xfa, 0xfc, 0xff, 0xf2, 0xda, 0x03, 0x03, 0x05, 0xdf, 0xfa, 0xef, 0x66,
+ 0x26, 0xb2, 0x14, 0x0a, 0x13, 0x05, 0xff, 0x0b, 0x3e, 0x19, 0x1a, 0x13, 0x0f,
+ 0x4a, 0x18, 0x0d, 0x33, 0x0e, 0x04, 0x01, 0x42, 0x3b, 0x35, 0x1d, 0xeb, 0x18,
+ 0x16, 0x1f, 0x0d, 0x0b, 0x36, 0x16, 0x21, 0x15, 0x19, 0xcd, 0x13, 0x23, 0xf8,
+ 0x14, 0x02, 0x19, 0x3e, 0x1e, 0x10, 0x2a, 0x0d, 0x41, 0xfa, 0x0c, 0x00, 0x07,
+ 0x21, 0x19, 0x2f, 0x18, 0x04, 0x24, 0xf4, 0x06, 0x11, 0x1e, 0x02, 0x25, 0x3b,
+ 0x16, 0x08, 0x0c, 0xfc, 0xd6, 0x07, 0xe8, 0x1e, 0xea, 0x08, 0x10, 0xf6, 0x10,
+ 0x7f, 0x1a, 0x01, 0x1b, 0x2f, 0xf9, 0x26, 0xf6, 0x13, 0xe7, 0xe6, 0xef, 0x33,
+ 0xfa, 0x22, 0xe3, 0x19, 0xf9, 0x14, 0x20, 0x11, 0x24, 0xee, 0xf9, 0xfa, 0xeb,
+ 0xec, 0xf6, 0xf8, 0x23, 0xdc, 0x05, 0x15, 0x0c, 0xf3, 0xfd, 0xde, 0x3c, 0xfb,
+ 0xe0, 0xf3, 0x2c, 0x1e, 0x08, 0xf7, 0x0e, 0xe9, 0xeb, 0x06, 0x3c, 0x11, 0xf3,
+ 0x39, 0xf7, 0xf2, 0x16, 0xe8, 0xdc, 0xe5, 0x18, 0x3b, 0xbc, 0x07, 0x24, 0x06,
+ 0xed, 0xe6, 0xcb, 0x12, 0x06, 0xef, 0x25, 0x1e, 0x0b, 0x1f, 0xb3, 0x08, 0x50,
+ 0x1b, 0x14, 0x02, 0x1e, 0x11, 0x8b, 0x13, 0xf2, 0x18, 0xbe, 0xba, 0xda, 0x20,
+ 0x3f, 0xdc, 0x38, 0xe7, 0xea, 0x2a, 0x69, 0xd3, 0x26, 0x07, 0x11, 0x04, 0xd2,
+ 0x10, 0xdd, 0xe8, 0x3c, 0x0c, 0x0c, 0xec, 0xe7, 0x19, 0x02, 0xbe, 0xbc, 0xf8,
+ 0xed, 0xe7, 0xfd, 0xf4, 0xdb, 0x33, 0x18, 0x00, 0xda, 0xd6, 0x7f, 0x3c, 0x17,
+ 0xb1, 0xcb, 0x67, 0x2f, 0xc0, 0x28, 0x48, 0xaf, 0xe2, 0x1e, 0xf7, 0xe7, 0xdd,
+ 0x1f, 0xdf, 0x27, 0x09, 0x09, 0xf8, 0xd0, 0x3e, 0x19, 0x32, 0x13, 0xd5, 0xe7,
+ 0xdb, 0x1b, 0x28, 0x95, 0x17, 0xf1, 0xcf, 0xb5, 0x20, 0x00, 0xf5, 0xf6, 0xd3,
+ 0x3f, 0xdc, 0xe1, 0x0d, 0xfb, 0x32, 0xe0, 0x09, 0x1e, 0xe2, 0x31, 0xdd, 0x02,
+ 0x1c, 0xc7, 0x0b, 0xf2, 0xdb, 0x48, 0xf4, 0x20, 0xf0, 0x14, 0x3a, 0x1b, 0xcd,
+ 0xd4, 0xf5, 0xf0, 0xc1, 0x81, 0xef, 0xf1, 0xd8, 0xf3, 0xac, 0xce, 0x01, 0xa9,
+ 0x39, 0x24, 0xea, 0xe0, 0x13, 0xf1, 0x3d, 0xc0, 0xe2, 0xd8, 0xce, 0x2d, 0x21,
+ 0xe9, 0xde, 0xc0, 0x70, 0xd3, 0xd8, 0x03, 0xf6, 0xc2, 0x24, 0x04, 0xd1, 0x07,
+ 0x1b, 0x06, 0xfb, 0x06, 0xfb, 0x15, 0xb9, 0x1d, 0xd4, 0xd3, 0xce, 0x0a, 0x0e,
+ 0x0b, 0x35, 0xc5, 0x1a, 0x11, 0xd7, 0xf4, 0xfd, 0xfe, 0xe1, 0xec, 0x2b, 0x26,
+ 0xac, 0x76, 0x25, 0x40, 0xe4, 0x03, 0xa9, 0xb6, 0xf6, 0xf1, 0x07, 0x2e, 0x1f,
+ 0xf2, 0xf7, 0x28, 0x07, 0xf2, 0x37, 0xd6, 0xef, 0xf2, 0x21, 0xe8, 0xe9, 0xed,
+ 0x3e, 0xfb, 0x2b, 0x01, 0xf2, 0x06, 0xe3, 0xb2, 0xed, 0x08, 0xe1, 0xee, 0xd8,
+ 0x0d, 0xe8, 0xd9, 0x17, 0x3c, 0xfd, 0xd4, 0xb2, 0x24, 0x27, 0x18, 0x18, 0xf6,
+ 0xdf, 0xf4, 0xd9, 0xf7, 0xfa, 0x18, 0x66, 0x13, 0x22, 0xf9, 0xd8, 0xcc, 0x3b,
+ 0x22, 0xc8, 0x03, 0xe1, 0x71, 0x4a, 0x09, 0xf5, 0x12, 0x03, 0x0d, 0x26, 0x0d,
+ 0xea, 0xf5, 0xcc, 0xe4, 0xf4, 0x22, 0xab, 0x08, 0x1b, 0x5d, 0xbf, 0x6b, 0xe4,
+ 0xfb, 0x21, 0xde, 0xe2, 0x53, 0x24, 0x33, 0x06, 0x11, 0xc8, 0x0c, 0x0f, 0x12,
+ 0x05, 0xfd, 0xe3, 0xf5, 0x1e, 0xdd, 0x41, 0x07, 0xd0, 0xe1, 0xcd, 0xbf, 0x17,
+ 0x24, 0x2e, 0xe8, 0x20, 0x08, 0x01, 0xb9, 0x4b, 0xd1, 0x2e, 0xf8, 0xf5, 0x2a,
+ 0xf6, 0xfd, 0x1d, 0x10, 0xc0, 0xd9, 0xda, 0x1d, 0x2d, 0x18, 0x28, 0xfb, 0x5d,
+ 0x32, 0xbc, 0xf7, 0x41, 0x03, 0xe6, 0xdc, 0x3a, 0x1d, 0x14, 0xb2, 0x04, 0x7f,
+ 0xec, 0xf1, 0x26, 0xea, 0x2b, 0xe4, 0xed, 0x13, 0x0e, 0xe0, 0x04, 0x08, 0x0a,
+ 0x1a, 0xf7, 0xf4, 0x2c, 0xcc, 0x27, 0x3c, 0xe8, 0x37, 0xbb, 0x2f, 0x35, 0x18,
+ 0x32, 0x11, 0x41, 0xa4, 0xe4, 0xff, 0xeb, 0xea, 0xfc, 0xde, 0x00, 0xda, 0xc1,
+ 0x4a, 0xd4, 0xd7, 0xc4, 0x33, 0xcf, 0x27, 0x20, 0xcb, 0x34, 0x06, 0x08, 0xca,
+ 0xcb, 0x47, 0xdc, 0xea, 0x28, 0xd0, 0xdd, 0xe1, 0x24, 0xd6, 0x04, 0xbf, 0x0a,
+ 0x30, 0x23, 0x00, 0xdb, 0x14, 0xf9, 0xf3, 0xf3, 0x52, 0xdd, 0xd5, 0xc7, 0xa9,
+ 0x19, 0xc8, 0xff, 0x19, 0x20, 0xdc, 0x43, 0xf4, 0xd2, 0x0b, 0xcf, 0x20, 0xd0,
+ 0x22, 0x3b, 0x17, 0x31, 0xa6, 0x7f, 0xe0, 0x57, 0x08, 0x61, 0x1a, 0x25, 0xe7,
+ 0x27, 0x27, 0x20, 0x0d, 0xc0, 0x0e, 0xe2, 0x2e, 0xf0, 0x06, 0xf1, 0x0f, 0xe5,
+ 0x09, 0x11, 0xd9, 0xdd, 0x25, 0x96, 0x27, 0xde, 0x03, 0x1f, 0xff, 0x1d, 0xfa,
+ 0xe6, 0x02, 0x35, 0xf9, 0xfa, 0x43, 0x29, 0x33, 0xf8, 0xf1, 0xc1, 0x3e, 0xe6,
+ 0x26, 0x2a, 0x1b, 0xd4, 0x1c, 0x2d, 0x00, 0x8f, 0xe5, 0xdb, 0x14, 0xfc, 0x96,
+ 0x41, 0xf7, 0x04, 0x16, 0x1a, 0xc3, 0xfb, 0xec, 0x4b, 0x01, 0xa3, 0x07, 0xe3,
+ 0xca, 0x15, 0xa4, 0x2f, 0x01, 0x25, 0x7f, 0xee, 0xe6, 0x21, 0x53, 0xde, 0x35,
+ 0x01, 0x08, 0x13, 0x05, 0xd2, 0x3f, 0xd5, 0xf8, 0x2b, 0x18, 0xaf, 0xe5, 0xd0,
+ 0xfc, 0x66, 0xf2, 0xd8, 0xfc, 0x14, 0xbf, 0x0c, 0xe6, 0x53, 0x17, 0x26, 0x24,
+ 0x46, 0x2b, 0xe5, 0x14, 0xf5, 0xde, 0x1a, 0xdf, 0xe2, 0xf9, 0x46, 0x22, 0x02,
+ 0xf2, 0xc7, 0xa6, 0xcb, 0xbc, 0xf9, 0xe9, 0x4c, 0xc6, 0x33, 0xe7, 0xab, 0xd8,
+ 0x07, 0x09, 0x4f, 0x0c, 0x1e, 0xe6, 0xd2, 0x2c, 0xca, 0xf1, 0x41, 0xca, 0xf8,
+ 0x17, 0xf6, 0x31, 0x34, 0x01, 0xdd, 0x2a, 0xed, 0xf1, 0xb9, 0xe1, 0xfe, 0x26,
+ 0x42, 0x2d, 0x1b, 0x3f, 0xf7, 0x14, 0xec, 0x08, 0xf1, 0xea, 0x12, 0xcc, 0xd3,
+ 0x24, 0xf9, 0xc0, 0xe0, 0xea, 0xfb, 0x26, 0xfb, 0x1c, 0x20, 0x1b, 0xc4, 0x37,
+ 0xfc, 0x1e, 0x15, 0xfb, 0x09, 0x2d, 0x14, 0x0d, 0x3d, 0x1e, 0x03, 0xf2, 0xf2,
+ 0xd4, 0xf4, 0x35, 0xf7, 0x0f, 0xf2, 0xe7, 0x35, 0x21, 0xf2, 0xc6, 0x0a, 0x31,
+ 0xee, 0xf4, 0x2d, 0x0a, 0x14, 0x15, 0x0a, 0x1d, 0x01, 0x14, 0xf6, 0xfb, 0x2a,
+ 0x2e, 0x3d, 0x30, 0x03, 0x0c, 0x2a, 0x2d, 0x04, 0xf0, 0x1e, 0x0f, 0xee, 0x05,
+ 0x3e, 0xe5, 0x4d, 0xfe, 0xe1, 0xea, 0x2c, 0x47, 0xe8, 0x4d, 0x7f, 0xd4, 0x2d,
+ 0xae, 0xe6, 0x00, 0x0a, 0x28, 0xf2, 0xe9, 0x34, 0x0b, 0xd8, 0x59, 0x2b, 0xfe,
+ 0x23, 0x14, 0x3c, 0x01, 0x28, 0xe2, 0xfd, 0x0c, 0x21, 0xef, 0x21, 0xc3, 0x35,
+ 0x2e, 0x32, 0xe5, 0x0d, 0xf7, 0xf2, 0x3c, 0xfd, 0x68, 0xc8, 0x23, 0x19, 0x73,
+ 0x06, 0xe2, 0x23, 0x24, 0x2f, 0xf2, 0xff, 0x1d, 0x0b, 0x24, 0x31, 0x1b, 0x1a,
+ 0x14, 0x07, 0xe8, 0xeb, 0x34, 0x00, 0xf7, 0x2b, 0xea, 0x12, 0x35, 0x58, 0xc8,
+ 0xfe, 0xf5, 0x24, 0xfa, 0x23, 0x15, 0x0d, 0xde, 0xfe, 0x52, 0xf5, 0xfd, 0x21,
+ 0x32, 0x11, 0x18, 0xd2, 0x0b, 0x0d, 0x3a, 0xd2, 0xba, 0xb1, 0x04, 0xe7, 0x02,
+ 0x29, 0x64, 0xa5, 0x2d, 0x4e, 0x0f, 0x99, 0xfe, 0x0f, 0xc2, 0x00, 0xdd, 0xec,
+ 0xf6, 0xab, 0x15, 0x0a, 0xd1, 0xe3, 0x4d, 0xe5, 0xda, 0x16, 0x0c, 0x12, 0xe9,
+ 0x93, 0x29, 0xe4, 0xf1, 0x09, 0x55, 0xfb, 0xe3, 0x07, 0x10, 0xea, 0xcf, 0x28,
+ 0xde, 0x00, 0x41, 0xeb, 0x26, 0xd4, 0xcb, 0xfc, 0x35, 0xe7, 0xb8, 0xce, 0xeb,
+ 0xd0, 0xf8, 0x01, 0x00, 0x07, 0xfe, 0xc4, 0xea, 0x39, 0x07, 0x21, 0x28, 0x24,
+ 0x0d, 0xe9, 0xb9, 0xfc, 0x23, 0x0e, 0xe2, 0x5f, 0x11, 0x21, 0xc7, 0xee, 0xcd,
+ 0x36, 0x03, 0xf9, 0xe7, 0xf5, 0xee, 0xec, 0xf9, 0x7f, 0xcf, 0xfc, 0xed, 0xff,
+ 0xea, 0x0a, 0xd9, 0x01, 0x28, 0xda, 0xff, 0x0a, 0xff, 0xdc, 0xcf, 0x2e, 0x03,
+ 0x40, 0x01, 0x1c, 0x16, 0xdb, 0xd8, 0xe1, 0x1a, 0x23, 0x1d, 0xf0, 0xf3, 0xe3,
+ 0x7f, 0x33, 0xea, 0xed, 0xfd, 0x05, 0x2f, 0xe7, 0x09, 0x09, 0xf1, 0xe0, 0x1c,
+ 0xf7, 0x27, 0xf3, 0xb3, 0x70, 0xd2, 0xee, 0x1c, 0x4b, 0xdd, 0x3d, 0x05, 0xd0,
+ 0xf1, 0xe6, 0xe2, 0x0c, 0x03, 0xd3, 0xe7, 0x09, 0x17, 0xfd, 0x0f, 0x22, 0x07,
+ 0x22, 0xbf, 0x40, 0x0d, 0xe7, 0x3b, 0x39, 0x1d, 0xf8, 0xc5, 0xcd, 0xb0, 0xf6,
+ 0x30, 0xc2, 0x12, 0x2d, 0xf7, 0xd8, 0xf9, 0xd8, 0xdc, 0x01, 0xee, 0xd4, 0xd7,
+ 0xdc, 0xff, 0xe8, 0x05, 0xf2, 0xe1, 0x0a, 0xf4, 0x64, 0x1f, 0xf1, 0xf3, 0xd4,
+ 0x2a, 0xda, 0x29, 0xde, 0x04, 0x40, 0x15, 0x0b, 0x2a, 0xf8, 0xea, 0x02, 0x9a,
+ 0xf6, 0x22, 0x01, 0x12, 0xc4, 0x1d, 0x2d, 0x41, 0x1c, 0xcd, 0x77, 0xaf, 0xeb,
+ 0xee, 0xf0, 0x04, 0xf5, 0x20, 0x35, 0x12, 0xe8, 0x7f, 0xf6, 0x1e, 0xc4, 0xca,
+ 0x1e, 0x15, 0x4c, 0xd1, 0xf2, 0xea, 0x73, 0x00, 0xe7, 0xfd, 0x07, 0x1b, 0xea,
+ 0xb2, 0xdf, 0xf9, 0x0d, 0xd6, 0x3e, 0xa3, 0xc8, 0x0b, 0x20, 0xe7, 0xfa, 0xf7,
+ 0x0a, 0x22, 0x69, 0xc4, 0xc7, 0xd2, 0x22, 0xc0, 0xcc, 0x29, 0xad, 0xef, 0xe7,
+ 0x35, 0x27, 0x3b, 0x1a, 0x07, 0xd2, 0x0d, 0xd3, 0xc9, 0x1d, 0x31, 0x02, 0x0d,
+ 0x22, 0x31, 0x06, 0xfd, 0x14, 0x2c, 0x0c, 0x20, 0x93, 0xf0, 0xaa, 0xe8, 0xfb,
+ 0x01, 0x07, 0x2a, 0x1c, 0x1a, 0x06, 0xec, 0xff, 0xe5, 0x4a, 0x14, 0xba, 0x08,
+ 0xbd, 0x79, 0xd2, 0xf9, 0x0a, 0x24, 0x14, 0x12, 0xe1, 0xa9, 0x24, 0xc9, 0xdc,
+ 0xe3, 0x27, 0x28, 0x20, 0x18, 0x34, 0x25, 0x27, 0xb7, 0x93, 0x12, 0xf7, 0x06,
+ 0x15, 0xf0, 0x20, 0x30, 0x00, 0xf2, 0x6c, 0xd9, 0xfd, 0x14, 0x3c, 0x03, 0xf6,
+ 0x09, 0xe3, 0xfc, 0xe5, 0xd3, 0x02, 0xde, 0xc4, 0xe3, 0xe2, 0x2b, 0x27, 0x38,
+ 0xe1, 0xe8, 0x16, 0x26, 0xd8, 0xd0, 0xdf, 0xcd, 0xc9, 0x1e, 0xc4, 0x33, 0xf8,
+ 0x58, 0xd4, 0x2e, 0x2e, 0xfd, 0xd2, 0x02, 0x41, 0xd6, 0x09, 0xf0, 0x0c, 0x5e,
+ 0xf0, 0xf4, 0xed, 0xea, 0xf8, 0x41, 0x09, 0xe6, 0xd0, 0xfe, 0xf4, 0xda, 0x32,
+ 0xda, 0x3d, 0xe6, 0xfc, 0x36, 0x37, 0xea, 0x12, 0xf7, 0x0b, 0x33, 0x08, 0x1b,
+ 0x01, 0x2a, 0xe1, 0xda, 0xf5, 0x1d, 0x11, 0x11, 0xfe, 0xff, 0xef, 0xcf, 0x3d,
+ 0x7f, 0xe3, 0xf1, 0xdc, 0x06, 0xe0, 0x1d, 0xe2, 0x09, 0x23, 0x18, 0xf0, 0x2e,
+ 0x0e, 0xfb, 0xfd, 0x0b, 0x29, 0xf1, 0xf2, 0x18, 0xf2, 0x09, 0xf3, 0x09, 0x20,
+ 0x3f, 0xd2, 0xce, 0x29, 0x54, 0xe3, 0x31, 0xd2, 0x1a, 0x1d, 0x0b, 0x17, 0x0e,
+ 0xd2, 0xe9, 0x08, 0x39, 0x16, 0xde, 0x09, 0x1d, 0x22, 0x0c, 0xd0, 0x17, 0xf1,
+ 0xea, 0x19, 0x3d, 0x60, 0x16, 0x45, 0x23, 0x0b, 0xc9, 0xce, 0xdc, 0xce, 0xf7,
+ 0x1b, 0xe4, 0x15, 0xf3, 0x02, 0x11, 0x04, 0x5b, 0x2a, 0x0d, 0x52, 0x55, 0xf4,
+ 0xc4, 0x26, 0x07, 0xef, 0x2d, 0x7a, 0x0b, 0x31, 0x6f, 0x15, 0xf3, 0xf0, 0x38,
+ 0x28, 0xfa, 0x26, 0xd3, 0x08, 0xf0, 0xe1, 0x02, 0xe5, 0x23, 0x0e, 0xfc, 0xdf,
+ 0xfa, 0x23, 0xff, 0x7e, 0x04, 0x2c, 0x08, 0xe8, 0xe9, 0x11, 0x51, 0x61, 0x1e,
+ 0x24, 0x21, 0x57, 0xcf, 0x29, 0xfc, 0x1c, 0xdb, 0x23, 0x3f, 0x25, 0xf5, 0x07,
+ 0xfd, 0xf7, 0xeb, 0x0e, 0xf8, 0x0e, 0x20, 0xe9, 0xf6, 0x04, 0x25, 0xe5, 0x1a,
+ 0xe8, 0x23, 0x60, 0xe6, 0x32, 0xf0, 0xec, 0xf8, 0xec, 0x7f, 0x00, 0x20, 0x6b,
+ 0xd7, 0xf6, 0x6f, 0x10, 0x05, 0x3d, 0xec, 0xf0, 0x24, 0x21, 0xdb, 0xe0, 0xcd,
+ 0x38, 0x15, 0x31, 0x46, 0xd3, 0xf4, 0x0f, 0x12, 0x00, 0x1e, 0x12, 0x17, 0xdd,
+ 0xfa, 0x10, 0xf0, 0xfb, 0x28, 0xda, 0x1b, 0xfb, 0x27, 0x01, 0x04, 0xe4, 0xcc,
+ 0xec, 0x0b, 0x18, 0x26, 0xe0, 0x48, 0xe5, 0xcd, 0x16, 0x12, 0x0c, 0x24, 0xea,
+ 0x1a, 0xee, 0x25, 0x38, 0x1a, 0x0e, 0x29, 0x0c, 0x26, 0x02, 0x28, 0xf4, 0x06,
+ 0x3a, 0x11, 0xf4, 0xfb, 0x00, 0x08, 0x02, 0x15, 0xe4, 0xf0, 0xf9, 0x0b, 0xfc,
+ 0x36, 0x33, 0x0f, 0x04, 0xf9, 0x20, 0x19, 0x01, 0x5a, 0x10, 0x25, 0x43, 0x11,
+ 0x08, 0xe3, 0x22, 0x2e, 0xf2, 0x26, 0xfc, 0xd6, 0x34, 0x16, 0x00, 0x2e, 0x19,
+ 0xdb, 0x01, 0x21, 0xf1, 0xdf, 0x1d, 0x16, 0xfa, 0x26, 0xce, 0xe9, 0xe3, 0xd6,
+ 0x22, 0x35, 0x06, 0xf4, 0x1d, 0x06, 0x2c, 0xfd, 0x1e, 0x52, 0x0e, 0x0f, 0x19,
+ 0x7f, 0xfc, 0xe5, 0x07, 0x20, 0xe3, 0x22, 0x01, 0x03, 0x1c, 0x0a, 0x2a, 0x0d,
+ 0x32, 0x26, 0x01, 0xdd, 0xf1, 0xb2, 0xfb, 0x05, 0xc6, 0xf4, 0xc9, 0x03, 0x0c,
+ 0xf5, 0xf0, 0xdc, 0xf2, 0xf6, 0xef, 0x0d, 0xb7, 0xf0, 0x11, 0xc2, 0x36, 0xd2,
+ 0x15, 0xd9, 0xd2, 0x7f, 0xdf, 0xd2, 0x1d, 0xec, 0x18, 0x01, 0xc3, 0x0a, 0xfe,
+ 0xfc, 0xda, 0x17, 0x37, 0xeb, 0x56, 0xd7, 0x0f, 0xa8, 0xfb, 0xb4, 0x35, 0xde,
+ 0x38, 0x2a, 0xa3, 0xf1, 0xd7, 0xe5, 0x2b, 0x0b, 0x02, 0xcd, 0x2a, 0x42, 0xd5,
+ 0xf0, 0xed, 0xfc, 0x10, 0x2c, 0x0f, 0x0a, 0x18, 0xe0, 0x45, 0x27, 0xde, 0xfd,
+ 0xe6, 0xdf, 0xf1, 0xfd, 0xea, 0xaf, 0x26, 0xfe, 0x0f, 0x09, 0x4c, 0xbc, 0x33,
+ 0x0f, 0xf6, 0x13, 0xec, 0x2e, 0xf3, 0xf8, 0xe7, 0xf9, 0xea, 0x04, 0x42, 0x10,
+ 0x09, 0xdf, 0xdf, 0xfe, 0xfb, 0xac, 0xe9, 0xb3, 0xc9, 0x18, 0xe9, 0x07, 0xf4,
+ 0xdd, 0xeb, 0x0a, 0xf3, 0x1f, 0xde, 0xad, 0xf5, 0x19, 0x60, 0x1a, 0xdc, 0xb6,
+ 0xe1, 0x14, 0xf2, 0xba, 0x3c, 0x0c, 0x20, 0x0f, 0x38, 0xe5, 0xe5, 0xe9, 0x34,
+ 0xfa, 0xbf, 0x48, 0xa3, 0xc3, 0x0a, 0x28, 0x13, 0xfe, 0x17, 0xf6, 0x3a, 0x59,
+ 0x34, 0xf1, 0x0a, 0x1e, 0xe8, 0x9d, 0xf8, 0x1c, 0xdb, 0xdb, 0x50, 0xc6, 0xdd,
+ 0x31, 0xcc, 0xc4, 0x0d, 0xb1, 0xb3, 0x48, 0x1b, 0x35, 0xca, 0x30, 0xce, 0xd1,
+ 0x81, 0x64, 0x95, 0x4f, 0x31, 0xd1, 0xe5, 0xe1, 0xf2, 0x05, 0xda, 0xc1, 0x20,
+ 0xf6, 0xa4, 0x02, 0x12, 0xe5, 0xa1, 0xd0, 0xf6, 0x2f, 0x23, 0xdc, 0x28, 0x35,
+ 0x4c, 0x28, 0xe0, 0x05, 0x07, 0xc7, 0x18, 0xc3, 0x01, 0xc4, 0xf3, 0xdc, 0xec,
+ 0x2d, 0x02, 0x12, 0x0e, 0x18, 0xe0, 0x08, 0xe1, 0x0b, 0xcf, 0x0d, 0xe1, 0xb5,
+ 0x34, 0xbb, 0xf3, 0x07, 0x2f, 0x11, 0xfc, 0xfc, 0x42, 0xf2, 0x15, 0x3a, 0x55,
+ 0xf2, 0xf2, 0xd9, 0xfb, 0xcc, 0xdc, 0x35, 0x13, 0x11, 0x0a, 0x03, 0xe9, 0xf7,
+ 0xf9, 0x5c, 0xe3, 0xee, 0xd4, 0x19, 0x34, 0xec, 0x49, 0x16, 0x29, 0x0e, 0xd7,
+ 0xe0, 0xcf, 0xef, 0x21, 0xfc, 0xf2, 0x11, 0x0c, 0xf5, 0x14, 0x1b, 0x17, 0xbd,
+ 0x08, 0x2c, 0xfa, 0xf3, 0x41, 0xc2, 0x00, 0xef, 0xd7, 0x25, 0xf6, 0x03, 0x00,
+ 0xd6, 0x10, 0xfc, 0x59, 0x08, 0xeb, 0x32, 0xbf, 0x1a, 0xb9, 0x22, 0x40, 0x2f,
+ 0x6a, 0x1f, 0xff, 0x11, 0xf8, 0xe9, 0xf0, 0xd9, 0xcd, 0x00, 0xdd, 0xe1, 0xcd,
+ 0x58, 0x06, 0xd2, 0xf2, 0xa8, 0xf3, 0x06, 0x21, 0x18, 0x1a, 0x06, 0x14, 0xe0,
+ 0xf5, 0x2c, 0x1f, 0x24, 0x0f, 0xc5, 0xf9, 0x05, 0x28, 0xcd, 0x06, 0xe0, 0xc3,
+ 0x22, 0x16, 0x16, 0x0f, 0x32, 0x2d, 0xfe, 0x1a, 0xf8, 0xf7, 0x29, 0x28, 0xd7,
+ 0x19, 0xeb, 0x4b, 0xe6, 0x07, 0x19, 0xd9, 0xf6, 0x05, 0x03, 0x08, 0xc3, 0xea,
+ 0xfb, 0x2d, 0xb6, 0xe8, 0x02, 0x31, 0xcd, 0xdf, 0x7f, 0xf3, 0xfc, 0x17, 0x04,
+ 0x12, 0x3c, 0xf3, 0x6b, 0x05, 0x02, 0xeb, 0x4a, 0xf8, 0x33, 0xe8, 0x23, 0x3b,
+ 0x07, 0x35, 0x4a, 0xf3, 0x81, 0xf7, 0x21, 0x0e, 0x49, 0x1b, 0x05, 0x30, 0xb7,
+ 0x37, 0x21, 0xf1, 0xee, 0x16, 0x2b, 0x10, 0x0c, 0x0c, 0xdc, 0x30, 0x02, 0xe9,
+ 0x29, 0xcc, 0x2d, 0xea, 0xfd, 0x21, 0x02, 0x15, 0x2a, 0x10, 0xff, 0xf4, 0x0b,
+ 0x10, 0xf8, 0x21, 0x35, 0xfc, 0x0c, 0xef, 0xed, 0x18, 0xfb, 0x02, 0x22, 0x02,
+ 0x2e, 0xda, 0x35, 0x00, 0x11, 0xe1, 0x26, 0x09, 0x4b, 0x12, 0x00, 0x03, 0x13,
+ 0x1d, 0x2c, 0x25, 0x36, 0xf5, 0x0f, 0xf6, 0xfe, 0x05, 0x0e, 0x31, 0x06, 0xe4,
+ 0x0f, 0xe9, 0x2a, 0x1e, 0x09, 0x35, 0x07, 0xfb, 0xd1, 0xd3, 0x04, 0x2a, 0xfc,
+ 0xfc, 0x28, 0xfd, 0x20, 0x34, 0x27, 0x03, 0xef, 0x1e, 0x2b, 0x0c, 0xfc, 0x13,
+ 0x2f, 0xdc, 0xfc, 0x0a, 0xe0, 0x1b, 0x6d, 0x08, 0xfe, 0x35, 0xd3, 0xec, 0xd8,
+ 0xf2, 0xd7, 0x07, 0x1e, 0xd5, 0x06, 0xf4, 0xe8, 0xec, 0x0e, 0xf9, 0xdc, 0xec,
+ 0x0c, 0xf8, 0xfc, 0x64, 0x2c, 0xd0, 0xf8, 0x1a, 0x2b, 0xcf, 0xaf, 0x1d, 0x3c,
+ 0x04, 0x22, 0x0b, 0x2a, 0xe4, 0x3d, 0x09, 0xf8, 0xcf, 0xde, 0xf9, 0xb8, 0xae,
+ 0xc9, 0xea, 0xd7, 0xd4, 0x1a, 0xec, 0x40, 0x20, 0xe4, 0xdc, 0x22, 0xda, 0x0a,
+ 0xe4, 0x5b, 0xaf, 0xd6, 0xf2, 0x1f, 0x1a, 0x1a, 0x04, 0xf0, 0xf2, 0x0f, 0x1f,
+ 0xfe, 0x22, 0x4d, 0xea, 0xcb, 0xec, 0xfe, 0xef, 0x3a, 0xf2, 0x2c, 0x26, 0xd5,
+ 0xfc, 0x7f, 0x79, 0xd4, 0xb3, 0xf9, 0x0b, 0x05, 0x32, 0xdf, 0xd5, 0xce, 0xbe,
+ 0x12, 0xe1, 0xfc, 0xfe, 0xf2, 0xe8, 0x2f, 0x24, 0xfa, 0xf3, 0xfd, 0x1a, 0xc8,
+ 0xfe, 0xea, 0x18, 0x09, 0x12, 0xca, 0xe7, 0x62, 0xf8, 0xe6, 0xfc, 0xf6, 0xce,
+ 0xe6, 0x16, 0xf4, 0x7b, 0x20, 0x08, 0xf4, 0xf3, 0xf3, 0xdf, 0xfa, 0xfa, 0x22,
+ 0x01, 0x30, 0x42, 0x2d, 0x0f, 0x3c, 0xe7, 0xdf, 0x1b, 0xfb, 0xe7, 0x05, 0x2b,
+ 0xd2, 0xe2, 0x07, 0xd2, 0x0b, 0x0d, 0x16, 0x3f, 0x9a, 0x14, 0x0b, 0xf6, 0xd4,
+ 0xfa, 0xfc, 0xc8, 0x47, 0x1f, 0xe1, 0x7f, 0x3e, 0xd5, 0x02, 0xec, 0x19, 0xf6,
+ 0x23, 0x13, 0x1c, 0xf7, 0xea, 0xe9, 0x19, 0x1b, 0x57, 0xe0, 0xe8, 0x16, 0x2e,
+ 0x10, 0x0a, 0x1e, 0x24, 0x1d, 0x1f, 0x23, 0xe4, 0x26, 0x20, 0x2f, 0xf9, 0x3f,
+ 0xe2, 0xe2, 0xca, 0x2e, 0xfe, 0xfe, 0xfe, 0x07, 0xbb, 0x07, 0x0f, 0x01, 0xf9,
+ 0x62, 0xf0, 0x09, 0x19, 0xfd, 0xee, 0x16, 0xfa, 0x26, 0x28, 0x01, 0x24, 0x05,
+ 0x10, 0x4a, 0xeb, 0xf2, 0xf1, 0x02, 0x17, 0xfc, 0xf8, 0xfe, 0x05, 0xe7, 0xff,
+ 0x31, 0x32, 0x03, 0xfc, 0x01, 0xfb, 0xfb, 0x19, 0x15, 0x21, 0x03, 0x11, 0x57,
+ 0x22, 0xf5, 0xde, 0xe3, 0xc1, 0x35, 0x06, 0x25, 0x37, 0x27, 0xe9, 0x81, 0x19,
+ 0xfc, 0xed, 0x16, 0xee, 0xe4, 0xd2, 0x5b, 0x36, 0xbc, 0xe1, 0xf3, 0x42, 0x0d,
+ 0x10, 0xf5, 0xf3, 0xf6, 0x06, 0x3a, 0xfc, 0xe1, 0x0e, 0xc4, 0xfc, 0xf9, 0x49,
+ 0xc0, 0x24, 0x09, 0x0a, 0x35, 0xfb, 0xb7, 0x2d, 0x20, 0xd0, 0xc6, 0xe0, 0xfd,
+ 0xc2, 0x28, 0x04, 0x07, 0xc3, 0xd8, 0xfa, 0x07, 0x32, 0x25, 0xbd, 0x26, 0xda,
+ 0x13, 0x2c, 0x1f, 0x06, 0x2d, 0x12, 0x07, 0x2d, 0xea, 0x04, 0xef, 0xc5, 0xb2,
+ 0xed, 0x03, 0xaa, 0xd7, 0x14, 0xf0, 0xf5, 0x0f, 0xde, 0x00, 0x19, 0x3a, 0xf1,
+ 0x1b, 0x20, 0x16, 0xf5, 0xc4, 0xe5, 0xb3, 0xd3, 0xb0, 0xf3, 0xec, 0x10, 0x0f,
+ 0xd4, 0x14, 0x13, 0xea, 0x19, 0xe6, 0x0d, 0xef, 0xe5, 0xf1, 0x14, 0xfd, 0x31,
+ 0xeb, 0xce, 0xaa, 0xb7, 0x0e, 0x1f, 0x02, 0xfc, 0x21, 0xbd, 0xf6, 0xf3, 0x0a,
+ 0xfb, 0x1d, 0xdb, 0xb8, 0xef, 0xd2, 0x28, 0xee, 0x0f, 0x29, 0xf1, 0x14, 0x23,
+ 0x0e, 0xf7, 0x4b, 0x2b, 0xfa, 0x1f, 0x0b, 0x21, 0x01, 0x11, 0xfc, 0x14, 0x3a,
+ 0x60, 0x16, 0xe5, 0xf4, 0x19, 0x06, 0x14, 0x55, 0x5d, 0xd5, 0xf7, 0xfe, 0x11,
+ 0x6a, 0xe9, 0x2a, 0xe8, 0x36, 0x67, 0x04, 0x24, 0xef, 0x13, 0x39, 0xe7, 0xf7,
+ 0xf6, 0xea, 0xf3, 0xfc, 0xfd, 0xe6, 0xf9, 0xe0, 0x53, 0x1d, 0xf2, 0x13, 0x25,
+ 0x69, 0xf0, 0x3c, 0x10, 0x3a, 0xf2, 0xff, 0x40, 0x1c, 0x17, 0x08, 0x28, 0x3a,
+ 0x18, 0x00, 0x27, 0xd6, 0xbf, 0xff, 0xb3, 0x23, 0xd0, 0xd3, 0xdb, 0x12, 0xff,
+ 0xf0, 0xe8, 0x21, 0xe7, 0xcd, 0x33, 0xff, 0x20, 0x06, 0x03, 0xef, 0x25, 0x52,
+ 0x01, 0xcb, 0x4a, 0x05, 0x0f, 0xd4, 0x09, 0xec, 0xfc, 0x36, 0x33, 0x05, 0xfc,
+ 0xcc, 0x2e, 0xe4, 0xe3, 0xc5, 0x39, 0xd1, 0x40, 0x7f, 0x23, 0xd3, 0xc5, 0xdd,
+ 0x12, 0x3e, 0x2b, 0xe3, 0xef, 0x56, 0xaa, 0xc7, 0x24, 0x06, 0xe6, 0xc3, 0xed,
+ 0xb1, 0xb2, 0x4a, 0x50, 0xf1, 0x2c, 0xd1, 0xdf, 0xc9, 0xf0, 0xdf, 0xe6, 0x02,
+ 0x03, 0x08, 0xe3, 0xd0, 0x40, 0xf0, 0xd6, 0x2d, 0x0c, 0xcc, 0xde, 0x49, 0x4a,
+ 0xd7, 0x1d, 0x81, 0x39, 0xdd, 0xb3, 0x33, 0xdd, 0xde, 0xc8, 0xd6, 0xda, 0xfe,
+ 0xfd, 0xcd, 0x1b, 0x12, 0x34, 0xfa, 0xf6, 0x17, 0x13, 0x0c, 0xfe, 0xba, 0xe4,
+ 0x08, 0x47, 0xee, 0xf7, 0xf1, 0xe0, 0x16, 0x9e, 0x13, 0x68, 0x39, 0xb1, 0x07,
+ 0xb5, 0x0e, 0xda, 0xc7, 0xcb, 0x0e, 0x11, 0xfa, 0x6b, 0x10, 0xf5, 0xd9, 0xfc,
+ 0xcf, 0xea, 0x08, 0xf7, 0xe6, 0xf7, 0x4f, 0xde, 0x1f, 0x19, 0x0c, 0xb9, 0x2a,
+ 0xf9, 0x1e, 0xe4, 0xf6, 0xc1, 0xb8, 0xea, 0x32, 0xd1, 0xff, 0x14, 0xd4, 0x67,
+ 0x10, 0x06, 0xe3, 0xd8, 0x5c, 0x1b, 0xd5, 0x0b, 0x65, 0xf6, 0x3b, 0x24, 0xd8,
+ 0x1b, 0xfc, 0x0b, 0xed, 0xde, 0x71, 0xb2, 0x3b, 0x46, 0x1e, 0xfa, 0xe3, 0x10,
+ 0x15, 0xf0, 0x3e, 0xfb, 0xb8, 0xf4, 0x07, 0xcd, 0x4e, 0x5c, 0xed, 0xc7, 0x38,
+ 0x02, 0x55, 0xfd, 0xe5, 0xae, 0xcb, 0xd6, 0xfb, 0xac, 0x6f, 0xf7, 0xcd, 0x14,
+ 0xea, 0x16, 0x03, 0x25, 0x15, 0x3e, 0xe0, 0x20, 0x17, 0xa8, 0xe9, 0xf1, 0x26,
+ 0xe3, 0x0d, 0x27, 0x02, 0xb8, 0x3d, 0x4b, 0xd6, 0xdc, 0x02, 0xe0, 0xd4, 0xfb,
+ 0xd2, 0x3b, 0x51, 0xd5, 0x28, 0xdd, 0x1e, 0xc5, 0xb6, 0x72, 0xed, 0x0b, 0x3a,
+ 0xba, 0x0c, 0xd1, 0x02, 0xdf, 0xf1, 0x02, 0xe1, 0xe4, 0xe4, 0xe4, 0xf3, 0x26,
+ 0xf7, 0x40, 0x09, 0x05, 0xe4, 0x23, 0x19, 0xc1, 0xf3, 0xc4, 0x0f, 0xc6, 0x21,
+ 0x0f, 0x39, 0x4b, 0x17, 0xce, 0x5f, 0xfd, 0x12, 0x0d, 0xd2, 0x7f, 0xf6, 0xfd,
+ 0x2a, 0xe2, 0x17, 0xc2, 0x41, 0x0d, 0x29, 0xed, 0x10, 0x38, 0xf0, 0xf8, 0xd2,
+ 0x15, 0x1c, 0x39, 0x4e, 0xed, 0x0d, 0xaa, 0xd5, 0xe2, 0x17, 0x7f, 0xa5, 0x14,
+ 0xde, 0x3b, 0x69, 0x06, 0x0a, 0xfc, 0xff, 0x2e, 0x12, 0x39, 0x05, 0xee, 0x6f,
+ 0xee, 0x26, 0x06, 0xbb, 0x01, 0xf5, 0xaa, 0x3c, 0xe7, 0xb9, 0x1b, 0xe7, 0x90,
+ 0xd2, 0x41, 0x37, 0x0e, 0x38, 0xf2, 0x2e, 0x16, 0xdb, 0x0f, 0x03, 0xc2, 0x05,
+ 0x12, 0xe1, 0xe0, 0x25, 0x23, 0xd7, 0xd6, 0xef, 0xf8, 0xf7, 0xf9, 0xb6, 0x0a,
+ 0x2a, 0x0c, 0x05, 0xe9, 0xd9, 0xdf, 0x25, 0x08, 0x2a, 0x24, 0x30, 0xdb, 0x2e,
+ 0xf4, 0x2a, 0x0a, 0xd0, 0xc5, 0x32, 0xd8, 0xf3, 0xef, 0x11, 0xf1, 0x25, 0xc8,
+ 0x2d, 0x02, 0x1f, 0xca, 0x12, 0x1f, 0x14, 0xe9, 0x26, 0xec, 0x0e, 0x09, 0x06,
+ 0x07, 0xf3, 0x18, 0x24, 0x1d, 0xfc, 0x1c, 0xf8, 0xe5, 0xd1, 0xde, 0xea, 0xa5,
+ 0x14, 0x34, 0xd1, 0x6a, 0x1a, 0xbf, 0xfe, 0xdf, 0xe7, 0xda, 0xf4, 0xe9, 0x03,
+ 0x04, 0x81, 0x1f, 0xdd, 0xdb, 0xf5, 0x19, 0xbe, 0xdd, 0x0a, 0x1b, 0xfa, 0xee,
+ 0xde, 0xef, 0x04, 0x16, 0x1e, 0xe6, 0xf2, 0xc9, 0xaf, 0xf6, 0xe7, 0x43, 0xe7,
+ 0xfe, 0x3b, 0x1b, 0x0a, 0x10, 0xce, 0x00, 0xf8, 0xf8, 0xc6, 0x24, 0x21, 0xce,
+ 0xe0, 0x02, 0xb6, 0xd2, 0xe0, 0xe6, 0xe8, 0xfd, 0x24, 0x21, 0x14, 0xe5, 0xf4,
+ 0x07, 0xfb, 0xd6, 0xda, 0x10, 0xe9, 0x0e, 0x4c, 0x0a, 0xee, 0x19, 0x0d, 0x03,
+ 0xcf, 0xe9, 0x0b, 0x0d, 0xd4, 0xd9, 0x06, 0xc6, 0xd1, 0x08, 0xef, 0xc2, 0xe6,
+ 0x24, 0xf0, 0x4a, 0xfa, 0x0d, 0x0c, 0xf4, 0x13, 0x38, 0xf0, 0x27, 0x28, 0xfb,
+ 0xdb, 0x34, 0xf2, 0xc5, 0x14, 0x0e, 0xfd, 0x44, 0xef, 0x17, 0xfd, 0xf6, 0x0b,
+ 0xc8, 0xe2, 0x09, 0xf9, 0x22, 0xde, 0xd4, 0x10, 0x27, 0xdc, 0x05, 0xea, 0xc8,
+ 0x08, 0x01, 0xfc, 0xfa, 0xef, 0x23, 0x71, 0xd6, 0xda, 0x15, 0x08, 0xeb, 0x22,
+ 0xcb, 0xf3, 0xea, 0x4f, 0xff, 0xf5, 0x5d, 0xc5, 0xfa, 0x15, 0x5b, 0x0b, 0x03,
+ 0xbe, 0xfe, 0x38, 0xeb, 0x04, 0xb7, 0x2a, 0xe9, 0x7f, 0xe5, 0x1d, 0xda, 0xb0,
+ 0x0a, 0x20, 0xb8, 0x51, 0x00, 0xd7, 0xce, 0x3a, 0xe0, 0xab, 0xe7, 0xd5, 0xed,
+ 0xd6, 0xf4, 0xef, 0xda, 0xbe, 0xe6, 0xde, 0xb9, 0xe8, 0x6b, 0x21, 0xd1, 0x12,
+ 0x2f, 0x0e, 0xd1, 0xc1, 0x19, 0x15, 0xe1, 0xc9, 0xea, 0x40, 0xdc, 0xcd, 0x09,
+ 0x0a, 0x7f, 0xfb, 0xed, 0xa5, 0x00, 0xe2, 0xe2, 0xe5, 0x8a, 0xb3, 0xf8, 0x3c,
+ 0x17, 0xfc, 0x25, 0xe1, 0x10, 0x05, 0x14, 0xf5, 0xa2, 0x31, 0xed, 0xff, 0x06,
+ 0xd0, 0x10, 0x0f, 0xc3, 0x20, 0x07, 0x1c, 0x1d, 0x36, 0x00, 0xaf, 0x18, 0x4e,
+ 0xdd, 0xd3, 0x51, 0x1a, 0x09, 0x06, 0x12, 0xf1, 0xa5, 0xc9, 0xf6, 0xdf, 0xfa,
+ 0xfc, 0xe7, 0x11, 0x2c, 0x03, 0xe4, 0x1f, 0x05, 0x27, 0x28, 0xf6, 0x27, 0x35,
+ 0xf4, 0x3d, 0x2a, 0x1b, 0xea, 0x25, 0x49, 0xe5, 0xa6, 0x0c, 0xc2, 0xd6, 0xe1,
+ 0x22, 0x0f, 0x38, 0x59, 0xfb, 0xda, 0xdf, 0x28, 0xde, 0xec, 0xf6, 0xd0, 0x25,
+ 0x1d, 0x47, 0xf9, 0xed, 0x5f, 0xb0, 0x5c, 0xc0, 0xeb, 0x18, 0x2c, 0x10, 0x39,
+ 0x1f, 0x5a, 0xe8, 0xbf, 0x10, 0xf3, 0xf1, 0xf9, 0x02, 0x1c, 0x17, 0xf9, 0xfa,
+ 0xf8, 0x37, 0xe5, 0xfb, 0xfd, 0xcb, 0x77, 0xfd, 0x52, 0x41, 0x62, 0xac, 0xbb,
+ 0x2c, 0x21, 0x3d, 0xea, 0xd4, 0xb8, 0x12, 0x05, 0x03, 0xcc, 0xf9, 0x0a, 0xfc,
+ 0xc7, 0x1e, 0xea, 0x6b, 0xf5, 0x0c, 0xf9, 0xcc, 0x0e, 0xbf, 0xea, 0x2a, 0x31,
+ 0x26, 0xe8, 0xf9, 0x52, 0xee, 0x0c, 0xf0, 0x7f, 0x28, 0x4f, 0x14, 0x67, 0x07,
+ 0xb4, 0x52, 0x05, 0xda, 0x22, 0xf0, 0x05, 0x0c, 0x2b, 0x6c, 0x19, 0x07, 0x23,
+ 0x2c, 0xde, 0xed, 0x26, 0xdc, 0x40, 0x42, 0xbf, 0xc2, 0x05, 0x53, 0xe1, 0xf5,
+ 0x18, 0xb0, 0xaf, 0x30, 0x0b, 0xf9, 0xbe, 0x03, 0xeb, 0xf6, 0x01, 0xf9, 0x09,
+ 0x2a, 0x11, 0xd6, 0xae, 0x27, 0x47, 0x12, 0xdc, 0x40, 0xdd, 0x04, 0x2d, 0xe5,
+ 0xcb, 0xca, 0x73, 0xa3, 0x3a, 0x06, 0xd7, 0xde, 0x3b, 0xeb, 0xed, 0x0e, 0x40,
+ 0xf8, 0xdf, 0x09, 0x19, 0xd9, 0x52, 0xd9, 0x25, 0xfa, 0xd9, 0x00, 0x29, 0xfa,
+ 0x0f, 0x24, 0xdf, 0xee, 0x7f, 0xd2, 0x2e, 0x34, 0x1f, 0xf1, 0xea, 0xb6, 0xe7,
+ 0xd4, 0x1e, 0xd6, 0xd3, 0xd4, 0xb9, 0xa8, 0xea, 0xba, 0xd6, 0xa2, 0x31, 0x3f,
+ 0x10, 0xf2, 0x23, 0x13, 0x31, 0xda, 0x23, 0x0b, 0x16, 0x4c, 0xe6, 0x04, 0x03,
+ 0x22, 0xf2, 0x2f, 0x25, 0xbb, 0xe8, 0x15, 0xef, 0xed, 0x07, 0x2b, 0xb4, 0xfa,
+ 0xe4, 0x23, 0x18, 0x25, 0x03, 0x3b, 0xb3, 0x68, 0xf3, 0x4e, 0xe9, 0xed, 0xf0,
+ 0x4a, 0xfb, 0x10, 0x0a, 0x1d, 0x20, 0xef, 0x1f, 0x06, 0xfa, 0xe8, 0xf7, 0x1e,
+ 0xb6, 0xd3, 0x0e, 0x02, 0xf9, 0x19, 0x2c, 0x2b, 0x1e, 0x10, 0x62, 0xc8, 0xc7,
+ 0xe8, 0xd8, 0xb9, 0x0a, 0xf3, 0x10, 0x16, 0x07, 0x1a, 0x15, 0xf0, 0x15, 0x24,
+ 0x37, 0xdb, 0xfc, 0x1c, 0x30, 0x07, 0x14, 0xec, 0x26, 0xee, 0xd4, 0xea, 0xd8,
+ 0xf9, 0x0d, 0x2c, 0x04, 0x12, 0x33, 0xda, 0xe0, 0xff, 0x3f, 0x42, 0xec, 0xe3,
+ 0x25, 0xd9, 0xf1, 0x22, 0xc9, 0xe8, 0xf1, 0x27, 0x7f, 0x34, 0xa1, 0x0d, 0x25,
+ 0xfd, 0xd8, 0xce, 0xfe, 0xcd, 0x9e, 0xc8, 0x36, 0xa6, 0xc7, 0xf3, 0xd5, 0xc5,
+ 0x20, 0x36, 0xea, 0xa7, 0x2e, 0x27, 0x3a, 0x33, 0xdd, 0xa0, 0xd4, 0xf3, 0xff,
+ 0xfd, 0x16, 0x0a, 0xf8, 0xb2, 0x06, 0xf5, 0xcb, 0x2d, 0x20, 0x03, 0x31, 0x0a,
+ 0xe9, 0xde, 0x4c, 0x17, 0xf7, 0xe0, 0xe8, 0xe3, 0xb9, 0xf2, 0xe9, 0xd5, 0xf0,
+ 0xe5, 0xdc, 0x0c, 0xd6, 0xb2, 0xbc, 0x7f, 0x44, 0x79, 0xca, 0xc9, 0xa6, 0x2a,
+ 0x36, 0xd0, 0xc0, 0x19, 0x4d, 0xf0, 0xf9, 0x04, 0x43, 0xf9, 0xf2, 0xd8, 0x49,
+ 0x55, 0xd2, 0xeb, 0xb5, 0xf6, 0xda, 0x10, 0xd7, 0xfc, 0x41, 0xbf, 0x1f, 0x34,
+ 0xf7, 0xf3, 0x1e, 0xfb, 0xf8, 0xf7, 0xf0, 0x0c, 0xde, 0xe7, 0x6b, 0xe8, 0xf4,
+ 0xee, 0xf0, 0xd5, 0xfd, 0x0d, 0x44, 0xe5, 0xd8, 0xf1, 0xfe, 0x07, 0xd1, 0xd7,
+ 0x15, 0x01, 0xf1, 0x50, 0xfc, 0x27, 0xe5, 0x51, 0xcc, 0x4c, 0xd9, 0xf1, 0x0b,
+ 0xcf, 0x14, 0xf9, 0xd7, 0xf7, 0xe2, 0xe7, 0x15, 0x22, 0xf3, 0xd2, 0xed, 0xe1,
+ 0x0b, 0x1c, 0xc9, 0x07, 0x23, 0x0e, 0xce, 0xf1, 0x26, 0x0d, 0xc8, 0x09, 0x27,
+ 0xef, 0x06, 0x1c, 0xee, 0xc4, 0xe4, 0x4c, 0xf2, 0x2d, 0xf9, 0xdc, 0x23, 0x34,
+ 0x06, 0xf6, 0xf1, 0x3e, 0x0e, 0xea, 0xeb, 0x54, 0x00, 0x18, 0x12, 0x0c, 0xe9,
+ 0x14, 0x0f, 0xef, 0x09, 0x02, 0x37, 0xd2, 0xf3, 0xe1, 0x2e, 0x15, 0x08, 0xa6,
+ 0x0e, 0x23, 0xe3, 0xf7, 0x13, 0xf7, 0xf0, 0x21, 0x45, 0xd2, 0xf7, 0x03, 0x17,
+ 0x1a, 0x3d, 0xe6, 0x24, 0x42, 0xd4, 0x09, 0x2f, 0xfe, 0x2a, 0xd2, 0x11, 0x2a,
+ 0x2f, 0xdb, 0xe0, 0xbc, 0x12, 0xe1, 0xd7, 0x57, 0x04, 0x11, 0x07, 0x2d, 0x2a,
+ 0x37, 0xce, 0xd8, 0x3a, 0xf1, 0xb9, 0x1b, 0x13, 0xe8, 0xba, 0xe7, 0x7f, 0x01,
+ 0xe9, 0xf6, 0xd3, 0xb8, 0x3b, 0xbf, 0x12, 0x0c, 0xdb, 0x2f, 0xf2, 0xdf, 0xa3,
+ 0x0a, 0x5a, 0x7c, 0x21, 0xdf, 0x0d, 0xca, 0x4d, 0xdf, 0x13, 0xd9, 0xd0, 0x14,
+ 0xf8, 0x14, 0x0c, 0xe5, 0x24, 0xfb, 0xaa, 0xee, 0x8f, 0x0e, 0xe4, 0x06, 0x05,
+ 0xbf, 0x25, 0x65, 0x33, 0xd8, 0xf1, 0xfd, 0x65, 0x0e, 0xdf, 0x26, 0xd5, 0xf4,
+ 0xdd, 0x05, 0xd4, 0x15, 0x0e, 0x25, 0xf3, 0xed, 0xce, 0xdf, 0x19, 0x20, 0x38,
+ 0x13, 0xda, 0x05, 0x1a, 0x00, 0xdb, 0x21, 0x14, 0xff, 0xf9, 0x16, 0x1c, 0x04,
+ 0xec, 0x07, 0xe9, 0xe5, 0x1d, 0x14, 0xf6, 0xff, 0x35, 0x3b, 0x24, 0x25, 0xea,
+ 0xee, 0xee, 0x2b, 0xd1, 0x35, 0xff, 0x15, 0x1e, 0x0b, 0xef, 0xfe, 0x34, 0xf8,
+ 0xf6, 0xe9, 0x0c, 0x19, 0xe9, 0x11, 0x20, 0xdb, 0xaa, 0xda, 0xee, 0x05, 0xba,
+ 0x19, 0xe8, 0x22, 0xe4, 0xd4, 0xfa, 0x02, 0xe8, 0xf2, 0x5d, 0xe8, 0xd3, 0x12,
+ 0xf3, 0x0d, 0x0a, 0x2e, 0xe8, 0xd3, 0xc6, 0x64, 0xd2, 0xd8, 0xb5, 0xf1, 0x07,
+ 0xf3, 0xd8, 0xe7, 0xf5, 0x08, 0x12, 0x04, 0xe0, 0xee, 0xf6, 0x0c, 0xe5, 0xea,
+ 0x19, 0x21, 0xbe, 0x7f, 0x00, 0xef, 0xbf, 0x09, 0xcd, 0xdf, 0x16, 0x00, 0xd6,
+ 0x0d, 0xe8, 0x2e, 0xf1, 0xdc, 0x17, 0x18, 0xe4, 0xf4, 0xf5, 0xf3, 0x2e, 0x2f,
+ 0x16, 0xe2, 0xdd, 0x4d, 0x27, 0xf3, 0xba, 0xfe, 0x2d, 0x31, 0x03, 0xfb, 0xc6,
+ 0x3c, 0x19, 0x4b, 0xe3, 0xbc, 0x08, 0xeb, 0x26, 0xd1, 0x03, 0x3a, 0x01, 0xf1,
+ 0xe6, 0xb6, 0x37, 0x26, 0x14, 0x3c, 0x2a, 0x4a, 0xe1, 0xe2, 0x2a, 0xf1, 0xff,
+ 0x34, 0xb8, 0xf9, 0xe6, 0xba, 0x2a, 0xf9, 0x0a, 0xe4, 0x6f, 0xf0, 0x4b, 0xcc,
+ 0x1f, 0xd2, 0xd1, 0xc6, 0x5e, 0xba, 0xe9, 0xd6, 0xc3, 0xf7, 0xf1, 0xf4, 0x0c,
+ 0xe7, 0xc8, 0xce, 0xe7, 0x2b, 0xdc, 0xfa, 0xe9, 0xd3, 0xf2, 0x02, 0x2f, 0x11,
+ 0x2a, 0x51, 0xba, 0x2b, 0xec, 0x49, 0x06, 0xfb, 0xbf, 0xf4, 0xe4, 0xa0, 0xdf,
+ 0xab, 0x81, 0xe9, 0x22, 0x0b, 0x1a, 0x78, 0x24, 0xf2, 0x0d, 0x0f, 0xe4, 0xe4,
+ 0xea, 0xdd, 0x1c, 0x13, 0xd2, 0xe2, 0x04, 0x10, 0x22, 0x14, 0xc6, 0xc3, 0xe3,
+ 0x2c, 0xef, 0x64, 0xbe, 0x03, 0x02, 0x0f, 0x01, 0x25, 0x3e, 0xf3, 0xf9, 0xdd,
+ 0x32, 0x1e, 0x3d, 0x1c, 0x1e, 0x10, 0x02, 0x3e, 0x1d, 0x3f, 0xa6, 0x28, 0x68,
+ 0x08, 0xeb, 0xfb, 0x56, 0xe6, 0xdf, 0x25, 0x46, 0xcf, 0xa5, 0xf4, 0xf6, 0x15,
+ 0x2f, 0x1b, 0xdc, 0x4a, 0x10, 0x28, 0xd9, 0xfd, 0xd7, 0xdb, 0x0f, 0xe7, 0xed,
+ 0xff, 0xdb, 0x14, 0x2b, 0xe8, 0xa2, 0x92, 0x35, 0x46, 0xda, 0xb7, 0x0e, 0xf2,
+ 0x16, 0x51, 0x16, 0xf2, 0xff, 0x06, 0x1f, 0x04, 0xf0, 0x0c, 0xd4, 0xfa, 0x08,
+ 0xbb, 0xed, 0x06, 0xfc, 0xd8, 0xfc, 0x26, 0xd9, 0x09, 0xf6, 0xe2, 0x7f, 0x11,
+ 0x73, 0xd9, 0x09, 0x43, 0xa9, 0xe2, 0xb6, 0xf4, 0xeb, 0x5a, 0x1a, 0xf3, 0x12,
+ 0xfe, 0xf8, 0x0f, 0x14, 0x14, 0xe9, 0x2e, 0xee, 0x2c, 0xe8, 0xff, 0x0c, 0xb0,
+ 0xe0, 0x18, 0xba, 0x1d, 0xe9, 0x12, 0xec, 0xeb, 0xe2, 0xe2, 0xe4, 0x27, 0x1b,
+ 0xd1, 0xc5, 0xe3, 0xeb, 0x1a, 0xf1, 0x06, 0xe2, 0xf6, 0xe2, 0x30, 0xf2, 0xdd,
+ 0x0b, 0xb5, 0x6e, 0x07, 0xdf, 0xbc, 0x5f, 0x0c, 0x4f, 0xc7, 0xbd, 0xf1, 0xe1,
+ 0x18, 0xdd, 0x67, 0x29, 0x3a, 0xf9, 0xce, 0x39, 0x06, 0xba, 0xf6, 0xdb, 0xf7,
+ 0x21, 0xa4, 0xf9, 0xd6, 0x25, 0xdb, 0x1c, 0xe6, 0x03, 0xd4, 0x00, 0x2b, 0x02,
+ 0x2d, 0x02, 0xd5, 0x43, 0xb0, 0x8f, 0x12, 0xf7, 0x18, 0x15, 0x2f, 0x25, 0x19,
+ 0xfe, 0x1a, 0x27, 0xf6, 0x04, 0x0d, 0xd7, 0xe1, 0xf7, 0x3d, 0x02, 0xde, 0x27,
+ 0xf6, 0x27, 0x25, 0x1a, 0x48, 0xf4, 0xfb, 0xe7, 0x52, 0xf2, 0x24, 0x4c, 0xea,
+ 0x10, 0x02, 0x48, 0x6d, 0xea, 0xda, 0x6c, 0xb6, 0xb7, 0x7f, 0x12, 0xef, 0x38,
+ 0xc6, 0xf7, 0xf4, 0xc6, 0x1b, 0x0b, 0x0c, 0x05, 0x12, 0xf1, 0xe5, 0x18, 0x2e,
+ 0x96, 0xec, 0x0f, 0xea, 0x3a, 0x33, 0xf6, 0xd9, 0x77, 0xd9, 0xf4, 0xd2, 0x03,
+ 0xf6, 0x5d, 0x05, 0xb2, 0x25, 0x18, 0xf4, 0xfc, 0xdb, 0x61, 0x12, 0x0d, 0xd7,
+ 0xcd, 0xe9, 0xdb, 0x19, 0xf7, 0x36, 0x02, 0x90, 0xdc, 0xfe, 0x21, 0x3e, 0xfb,
+ 0xf2, 0x35, 0xf4, 0xf9, 0xf0, 0x50, 0xe9, 0xd2, 0xee, 0x3c, 0xfd, 0x4d, 0x31,
+ 0x59, 0x02, 0x23, 0x45, 0x10, 0x02, 0xc1, 0x2b, 0xd4, 0xfd, 0x2d, 0x18, 0xc9,
+ 0x00, 0x38, 0xda, 0xd6, 0x02, 0x61, 0x0e, 0xe1, 0x1b, 0xde, 0xcc, 0xf7, 0xf6,
+ 0x82, 0x0b, 0x34, 0x03, 0xdf, 0xfd, 0xbc, 0xd4, 0xc7, 0xe6, 0xd0, 0xf5, 0x1c,
+ 0xfa, 0xf3, 0x1e, 0xda, 0x30, 0x17, 0x24, 0xa3, 0xe6, 0xe6, 0x4c, 0xd3, 0xa8,
+ 0x7f, 0x02, 0xf5, 0xc9, 0x33, 0xc6, 0x26, 0x82, 0x0c, 0x20, 0xf0, 0xdb, 0x40,
+ 0xe9, 0x18, 0x96, 0xb5, 0xcb, 0x3f, 0xfd, 0x00, 0x67, 0xea, 0x26, 0x53, 0xcf,
+ 0x0f, 0x1f, 0x11, 0x07, 0x08, 0xff, 0xc7, 0xfe, 0xec, 0x85, 0x45, 0xe8, 0x0f,
+ 0xe9, 0xf6, 0xf6, 0x42, 0x2b, 0x2a, 0x55, 0xde, 0x00, 0xf5, 0x4f, 0x00, 0x40,
+ 0x0b, 0x10, 0xf6, 0x97, 0x14, 0xc0, 0xe8, 0xcc, 0xf7, 0xf6, 0x11, 0x27, 0x07,
+ 0xda, 0xf0, 0x0f, 0xe9, 0xf9, 0x58, 0xc4, 0x1a, 0xde, 0x37, 0xa8, 0x03, 0x13,
+ 0xe9, 0xcd, 0x01, 0xd3, 0x12, 0xff, 0x0d, 0xc8, 0xf1, 0x7f, 0xf2, 0xf4, 0x0c,
+ 0x31, 0x17, 0xc9, 0xbb, 0x1c, 0x9f, 0xf8, 0x10, 0x23, 0xe5, 0xce, 0x00, 0xf6,
+ 0xf1, 0xff, 0x00, 0x00, 0xc4, 0x22, 0x1e, 0x0d, 0x37, 0xf8, 0x12, 0xfd, 0x1f,
+ 0xc0, 0x0b, 0xd6, 0xd9, 0xf7, 0x1d, 0x33, 0xcf, 0xfd, 0x37, 0x10, 0x10, 0x1e,
+ 0xd7, 0xeb, 0x10, 0x6a, 0x1e, 0x46, 0xf0, 0xfe, 0xc5, 0xe8, 0x4a, 0xf9, 0xe2,
+ 0xc4, 0xe9, 0x08, 0xf1, 0x35, 0xf2, 0xec, 0xd9, 0xfe, 0x10, 0xf3, 0x22, 0x13,
+ 0xec, 0xd1, 0xf1, 0x21, 0x18, 0xe0, 0x2d, 0xee, 0x06, 0x1b, 0x27, 0xec, 0x00,
+ 0xf4, 0xf2, 0xdb, 0xd2, 0x03, 0xc4, 0xf0, 0xe6, 0xc0, 0x74, 0xd5, 0x0b, 0x1e,
+ 0x31, 0x21, 0x04, 0x15, 0x18, 0x30, 0xc3, 0xe4, 0xbc, 0xcd, 0x39, 0x38, 0x2e,
+ 0xba, 0x0b, 0x2b, 0x11, 0x1a, 0x30, 0x54, 0x0b, 0x44, 0xd2, 0xf3, 0xfd, 0x43,
+ 0x48, 0xfd, 0x02, 0xc8, 0xd9, 0xc6, 0xda, 0xfb, 0x19, 0xd1, 0xd4, 0x0b, 0xee,
+ 0xd1, 0x22, 0x2c, 0x6f, 0x2f, 0xde, 0x34, 0xdc, 0x3f, 0xf5, 0x2a, 0xf5, 0xed,
+ 0xff, 0xd8, 0xa9, 0x08, 0xc8, 0x1b, 0xde, 0xca, 0xdd, 0xfc, 0xae, 0x78, 0x59,
+ 0xf7, 0xd0, 0xf4, 0xe9, 0x2c, 0x81, 0x05, 0xed, 0x1d, 0x14, 0xdc, 0x03, 0x5f,
+ 0x53, 0x04, 0x17, 0x09, 0x12, 0x34, 0xce, 0xe7, 0x26, 0x32, 0x1d, 0x10, 0xd2,
+ 0xd3, 0x0d, 0x2f, 0xec, 0xfe, 0x38, 0x1f, 0x1e, 0xfd, 0x69, 0x14, 0x45, 0xf9,
+ 0xef, 0xe4, 0x14, 0xfe, 0x09, 0xa8, 0x27, 0xdf, 0xce, 0xed, 0xe6, 0x09, 0xea,
+ 0xb8, 0xb4, 0xef, 0x6c, 0x49, 0x02, 0x17, 0x4f, 0xb0, 0xd7, 0x0a, 0x2c, 0x13,
+ 0xeb, 0x40, 0x77, 0x15, 0xf4, 0x9e, 0xad, 0xff, 0x31, 0x1a, 0x5f, 0xed, 0xee,
+ 0x34, 0xe0, 0xfc, 0xf2, 0x34, 0xa0, 0x27, 0xef, 0x07, 0x08, 0x18, 0x0c, 0x3f,
+ 0xa5, 0xe0, 0xda, 0xfd, 0x13, 0xd2, 0xf3, 0xc4, 0x25, 0xe2, 0x0d, 0x09, 0x15,
+ 0xa1, 0xef, 0xdf, 0xf4, 0x40, 0xde, 0x1d, 0x5f, 0xfe, 0x16, 0x31, 0xf6, 0x0f,
+ 0x64, 0xd8, 0xd4, 0xda, 0xd7, 0xce, 0x4b, 0xd2, 0xd5, 0xe0, 0xdd, 0x03, 0xd0,
+ 0x1f, 0x20, 0x3d, 0x04, 0x06, 0xeb, 0x7f, 0x39, 0xfe, 0x46, 0x7a, 0x03, 0x33,
+ 0x01, 0x12, 0xc2, 0xbe, 0xd3, 0xe2, 0xcf, 0xef, 0x13, 0x25, 0xf1, 0x04, 0xd2,
+ 0xe9, 0xc5, 0xd0, 0x00, 0x33, 0x00, 0x4e, 0x0d, 0x59, 0xbc, 0x07, 0xf3, 0xea,
+ 0xe0, 0x56, 0x40, 0xf9, 0x3f, 0x14, 0x28, 0x4a, 0xd2, 0x15, 0x15, 0x0c, 0x36,
+ 0x0c, 0x22, 0xe4, 0x2d, 0xff, 0x09, 0xdd, 0x20, 0xfd, 0x3d, 0x7f, 0xc0, 0x07,
+ 0x47, 0x1f, 0x40, 0x0e, 0x33, 0x0f, 0xe9, 0x2f, 0x01, 0xdd, 0xdd, 0xfb, 0xe0,
+ 0x47, 0xea, 0xf7, 0xc8, 0x1e, 0x0d, 0x27, 0xe8, 0xe0, 0x0d, 0x0a, 0x10, 0x66,
+ 0x08, 0x2d, 0x2e, 0x02, 0xee, 0x09, 0xee, 0x14, 0x52, 0x0e, 0xef, 0xfd, 0xd9,
+ 0xf2, 0x21, 0xea, 0xf0, 0xe7, 0x10, 0xeb, 0xc8, 0x05, 0xed, 0xfb, 0x16, 0xbd,
+ 0xfa, 0xdf, 0xe0, 0xe2, 0xf2, 0xa6, 0xfe, 0x23, 0xfb, 0xff, 0xd2, 0xd8, 0x07,
+ 0x73, 0x32, 0xc2, 0x1e, 0x30, 0x11, 0x0b, 0xa1, 0x0e, 0x04, 0x1a, 0x27, 0x1a,
+ 0xd6, 0xf5, 0x00, 0xf7, 0xf6, 0xed, 0x04, 0xf3, 0x1c, 0x3d, 0x14, 0xe4, 0xcd,
+ 0x0f, 0x9a, 0x0e, 0x0d, 0x15, 0xd9, 0x06, 0xe8, 0x07, 0xdf, 0x0c, 0xf4, 0x17,
+ 0x12, 0xe6, 0x18, 0x1e, 0xf0, 0xf4, 0x2c, 0x2f, 0xc3, 0xed, 0x1c, 0xef, 0x0f,
+ 0xca, 0x13, 0xfd, 0x0b, 0xfc, 0x12, 0x2f, 0x0a, 0x55, 0x09, 0x25, 0x36, 0xf9,
+ 0xf0, 0x02, 0xad, 0xd4, 0x17, 0x04, 0xda, 0x22, 0x7f, 0x11, 0xd7, 0x12, 0x1d,
+ 0xf8, 0xfa, 0xf5, 0x6a, 0x3c, 0xf7, 0xec, 0xe5, 0x0a, 0xd8, 0x0d, 0xd7, 0xea,
+ 0x04, 0x06, 0x19, 0x0f, 0x40, 0x28, 0x16, 0x07, 0xf7, 0xde, 0xf5, 0x1a, 0xc7,
+ 0xd9, 0x23, 0xfe, 0xc0, 0x22, 0xf5, 0xf8, 0xe8, 0x12, 0xdc, 0xdc, 0xf9, 0xf9,
+ 0x1d, 0xc8, 0x1a, 0x11, 0x07, 0xf4, 0x08, 0xf6, 0xf9, 0x10, 0xf2, 0x12, 0x00,
+ 0x41, 0xf9, 0x2e, 0xf1, 0xd2, 0xc3, 0xc5, 0xf6, 0xdc, 0x06, 0x09, 0x16, 0xf1,
+ 0x22, 0x22, 0x14, 0x11, 0xff, 0x01, 0x02, 0x16, 0x14, 0x12, 0xf1, 0xdd, 0x2e,
+ 0xf6, 0x1d, 0xf0, 0xef, 0x07, 0xe7, 0x48, 0x0b, 0x20, 0x1d, 0x11, 0x3a, 0x01,
+ 0xd4, 0xcb, 0xd3, 0xf0, 0x0b, 0x03, 0x2e, 0xd5, 0x42, 0x0c, 0xeb, 0x17, 0x09,
+ 0x0e, 0x07, 0xc7, 0x01, 0x2d, 0x02, 0x43, 0x9e, 0xeb, 0x1d, 0xf5, 0xca, 0xa5,
+ 0x7f, 0xbc, 0x2d, 0xf3, 0x35, 0xe5, 0x33, 0x08, 0xf8, 0xf9, 0x42, 0xcc, 0x10,
+ 0x35, 0xce, 0x54, 0x00, 0x30, 0xef, 0x9e, 0xf4, 0xfd, 0xe8, 0x49, 0xef, 0xa3,
+ 0x3a, 0x2d, 0xd4, 0xe3, 0x13, 0xdb, 0xe0, 0xcf, 0x15, 0xe7, 0xf3, 0xd7, 0x28,
+ 0xe1, 0xfb, 0x15, 0x03, 0xf6, 0xde, 0x3c, 0xe5, 0xd9, 0xbb, 0xf4, 0xec, 0xda,
+ 0x0f, 0x04, 0x3a, 0x16, 0xf0, 0x33, 0x07, 0xd7, 0x09, 0xde, 0x25, 0xf0, 0xdd,
+ 0x11, 0x94, 0x1b, 0xcf, 0xda, 0x31, 0xa7, 0x0a, 0xde, 0x09, 0x21, 0x17, 0x0a,
+ 0x0c, 0x19, 0xf3, 0x2a, 0xdb, 0xdb, 0xec, 0x0b, 0x2b, 0xf2, 0xd4, 0x2c, 0xa8,
+ 0xed, 0xeb, 0x38, 0xec, 0xd8, 0x3a, 0x5f, 0xcd, 0xec, 0x1b, 0xe6, 0x38, 0xeb,
+ 0x18, 0x1e, 0x83, 0xe6, 0xcd, 0x00, 0x63, 0x0b, 0x95, 0xcc, 0xf6, 0xd1, 0x2d,
+ 0xd5, 0x35, 0xea, 0x17, 0xf5, 0x01, 0xe5, 0x1c, 0x13, 0xef, 0xe2, 0x1d, 0x3a,
+ 0x0a, 0x06, 0x08, 0xd8, 0xf2, 0x44, 0xf7, 0x1e, 0x15, 0x42, 0x16, 0xe6, 0xe5,
+ 0xfc, 0xd5, 0xe6, 0x34, 0x10, 0x02, 0x1f, 0x19, 0xeb, 0xff, 0xc4, 0xe9, 0x01,
+ 0xe3, 0xda, 0xcb, 0xea, 0x04, 0xf7, 0xc7, 0x24, 0xf6, 0x19, 0x1f, 0x55, 0xdd,
+ 0x3e, 0x0d, 0x1b, 0xf7, 0xf1, 0xfc, 0xe7, 0x3a, 0x17, 0xff, 0xeb, 0xf3, 0x00,
+ 0xed, 0x0a, 0xd0, 0xd6, 0x0d, 0xb2, 0xdf, 0xf2, 0xe2, 0x11, 0x24, 0xd4, 0x23,
+ 0x08, 0x1d, 0xb9, 0x32, 0x2b, 0xde, 0x29, 0x1e, 0xff, 0x08, 0xf5, 0x1b, 0x00,
+ 0x36, 0x28, 0xe8, 0xd5, 0xfd, 0xce, 0x7f, 0xe7, 0x23, 0xf8, 0x59, 0x23, 0x3c,
+ 0xea, 0xcf, 0x2e, 0x03, 0x95, 0xdf, 0x16, 0xf3, 0xb2, 0xda, 0xda, 0x1e, 0x3b,
+ 0x4b, 0x08, 0xe5, 0xea, 0xbe, 0xe9, 0xe5, 0x0e, 0x25, 0x60, 0xf5, 0xab, 0xbc,
+ 0x0f, 0x22, 0x59, 0x0f, 0x0b, 0x02, 0xed, 0xdd, 0x01, 0x57, 0x09, 0x0d, 0xff,
+ 0x26, 0x1b, 0x35, 0xd8, 0x17, 0xfb, 0xd2, 0x1b, 0xc9, 0xff, 0x0b, 0x7f, 0xaf,
+ 0x07, 0x31, 0xd9, 0xef, 0x35, 0xbf, 0x05, 0x29, 0xea, 0xb6, 0xde, 0xac, 0xe4,
+ 0x05, 0xe5, 0x08, 0xfd, 0xe8, 0xf2, 0xb7, 0xad, 0xb4, 0xc7, 0xe8, 0xea, 0x1b,
+ 0x02, 0x31, 0xd8, 0x33, 0xbb, 0xe1, 0xbd, 0xfd, 0x8f, 0xd4, 0xeb, 0x46, 0x30,
+ 0xd0, 0x05, 0xbc, 0xfb, 0x0c, 0xf5, 0x58, 0xba, 0xd1, 0x53, 0x24, 0xf0, 0xca,
+ 0xc8, 0xe9, 0x46, 0x1d, 0xf2, 0x02, 0x0a, 0xeb, 0xd3, 0x19, 0x44, 0xfa, 0x07,
+ 0xef, 0xe1, 0x13, 0x33, 0xb5, 0x0b, 0xdc, 0x3f, 0x2d, 0xd0, 0x1c, 0xfd, 0x1c,
+ 0xcd, 0x15, 0x3d, 0xd7, 0xf9, 0x5e, 0x12, 0x15, 0xf8, 0xfc, 0x0a, 0xfc, 0x19,
+ 0xe0, 0xce, 0x28, 0xfc, 0xe7, 0xee, 0xec, 0xc7, 0xf5, 0xf0, 0x49, 0x23, 0xd8,
+ 0x03, 0x52, 0x66, 0x3a, 0xe9, 0x25, 0x3c, 0xf9, 0x14, 0xcb, 0xe8, 0x20, 0xe9,
+ 0x8f, 0xeb, 0xe1, 0x3a, 0xf1, 0xdb, 0x14, 0x15, 0x8c, 0x14, 0x58, 0x3e, 0x90,
+ 0x20, 0x22, 0xed, 0xef, 0x21, 0xce, 0x25, 0x29, 0xd2, 0x0c, 0xe8, 0x9a, 0xc8,
+ 0x39, 0x06, 0x2e, 0xf9, 0xea, 0xa3, 0xca, 0xdc, 0xd5, 0xfa, 0x20, 0x44, 0x27,
+ 0x02, 0x45, 0xdf, 0x1d, 0x15, 0x32, 0x1c, 0xe5, 0x2c, 0x3a, 0x55, 0xe6, 0x39,
+ 0xfe, 0x25, 0xf3, 0x26, 0x08, 0xec, 0xec, 0x00, 0xef, 0xfe, 0xee, 0xed, 0x26,
+ 0x36, 0xef, 0xb0, 0xf5, 0x1d, 0x18, 0x1b, 0x1c, 0xed, 0xf3, 0x1c, 0xe8, 0x01,
+ 0x21, 0x68, 0xd5, 0x45, 0xc7, 0xd7, 0x10, 0x3d, 0xcf, 0x09, 0x10, 0xee, 0x4b,
+ 0xfd, 0x45, 0xda, 0x19, 0xd1, 0x78, 0x08, 0xe9, 0xe0, 0x2a, 0xeb, 0xc8, 0x7f,
+ 0x36, 0x22, 0x27, 0xc2, 0xe9, 0xf7, 0x01, 0x0e, 0xec, 0x37, 0xfb, 0xd6, 0x5b,
+ 0x38, 0xec, 0x1c, 0xf8, 0x2b, 0xce, 0x29, 0x07, 0x32, 0xeb, 0x0c, 0xc4, 0xff,
+ 0xe4, 0xfe, 0xce, 0xf7, 0xf1, 0x01, 0xe0, 0x11, 0xdd, 0x1e, 0xde, 0x20, 0x1e,
+ 0xe6, 0x10, 0x11, 0x0e, 0x7f, 0x2f, 0xc3, 0x5d, 0x02, 0x13, 0xf5, 0x1e, 0x4e,
+ 0x45, 0xfe, 0x20, 0x26, 0xe3, 0x1d, 0x02, 0xfa, 0x1f, 0x14, 0x3d, 0xc6, 0xef,
+ 0x42, 0xf6, 0x20, 0x10, 0x18, 0x27, 0x0c, 0x15, 0x3b, 0x1c, 0x34, 0x46, 0x11,
+ 0xa3, 0x2c, 0x29, 0x06, 0x13, 0x0e, 0xdb, 0x16, 0x4c, 0x28, 0x4c, 0xd1, 0xe3,
+ 0x4e, 0x1a, 0xf1, 0xf7, 0x10, 0xf1, 0xf0, 0x14, 0xf4, 0x02, 0x1f, 0xec, 0x41,
+ 0x2e, 0x26, 0xf6, 0xea, 0x35, 0x15, 0xf2, 0xf2, 0xe3, 0xc3, 0xfc, 0x03, 0x21,
+ 0xe9, 0xf4, 0xda, 0x2e, 0xf2, 0x11, 0xd0, 0x33, 0x12, 0xd7, 0x41, 0x01, 0x14,
+ 0x15, 0xf0, 0x10, 0xeb, 0x1c, 0x05, 0x15, 0x03, 0xf6, 0xe2, 0xef, 0x62, 0x26,
+ 0x0b, 0xeb, 0x08, 0xff, 0x1b, 0xed, 0xcf, 0x15, 0xd0, 0xd2, 0xfa, 0xf8, 0xe6,
+ 0xff, 0x19, 0x1d, 0x01, 0xd3, 0x18, 0xfd, 0xfd, 0xcd, 0x04, 0xdb, 0xdd, 0x14,
+ 0x12, 0xe4, 0x6d, 0x7f, 0xc8, 0xfc, 0x1b, 0xe5, 0x0d, 0x18, 0x10, 0x34, 0x38,
+ 0xfb, 0x02, 0x12, 0x11, 0x12, 0x01, 0x33, 0x0d, 0xc3, 0x07, 0x18, 0x0b, 0xce,
+ 0x0a, 0x1f, 0x00, 0xfa, 0x3d, 0x40, 0x27, 0x30, 0x19, 0xed, 0xef, 0xfe, 0xfc,
+ 0xe7, 0xde, 0xe7, 0xff, 0xf9, 0xcf, 0xe2, 0xfa, 0x28, 0x35, 0xd5, 0x17, 0x17,
+ 0x17, 0x1b, 0x1c, 0x11, 0x07, 0x17, 0xf2, 0xf1, 0xfc, 0x0f, 0x16, 0xdb, 0x05,
+ 0xf4, 0xec, 0xe6, 0xdf, 0x47, 0xd7, 0xe8, 0x10, 0xd1, 0x4c, 0x40, 0x0b, 0xe4,
+ 0xe0, 0xd9, 0xe7, 0xff, 0x14, 0xfa, 0xe9, 0xdc, 0x1a, 0xdf, 0x17, 0x33, 0x0c,
+ 0x29, 0xa9, 0x53, 0x1c, 0xd6, 0xc4, 0x13, 0x74, 0xf8, 0xf8, 0x1d, 0xfd, 0x2f,
+ 0x09, 0xb0, 0x2d, 0x15, 0x1a, 0xcc, 0xcd, 0x2c, 0xdd, 0x19, 0x4d, 0xeb, 0x04,
+ 0x89, 0xe1, 0x28, 0xff, 0xf6, 0xf8, 0x1e, 0xd9, 0x00, 0x1f, 0xf3, 0xfb, 0xe3,
+ 0x56, 0x06, 0xfd, 0xe3, 0xfb, 0x0d, 0x1e, 0xc5, 0xdc, 0xe6, 0x09, 0x39, 0xdf,
+ 0x2f, 0x1e, 0xb8, 0x09, 0x36, 0xfb, 0x43, 0x41, 0xa4, 0xfa, 0xd9, 0xd7, 0x1c,
+ 0xda, 0x24, 0xcf, 0x14, 0x1a, 0xc3, 0xce, 0xb3, 0xc5, 0x9a, 0x8a, 0x04, 0xc5,
+ 0xdf, 0x6c, 0xef, 0x16, 0xe7, 0xe9, 0xfe, 0xd1, 0xee, 0xd4, 0x25, 0xf1, 0x0b,
+ 0xf3, 0xe5, 0xc2, 0xa7, 0xdd, 0xef, 0x44, 0x0d, 0x0d, 0xf5, 0xe0, 0x11, 0x20,
+ 0xc8, 0xbe, 0xf8, 0x1a, 0xe7, 0x49, 0x13, 0xd0, 0xe6, 0x03, 0x32, 0x4c, 0x81,
+ 0x06, 0xea, 0xcf, 0x17, 0x01, 0x44, 0xd8, 0x39, 0xf5, 0xcd, 0x52, 0x11, 0xfe,
+ 0x03, 0xd3, 0x0a, 0xe8, 0x18, 0xe2, 0x08, 0x18, 0xf8, 0x54, 0x26, 0xea, 0xc1,
+ 0xf8, 0xf5, 0xd4, 0xe1, 0x37, 0x66, 0x0c, 0x1c, 0xf4, 0x32, 0x0d, 0x6c, 0x12,
+ 0xf8, 0xe5, 0x11, 0xd7, 0x02, 0x5b, 0x0a, 0xe3, 0x23, 0x41, 0xa5, 0x57, 0x1b,
+ 0x47, 0xf3, 0xf9, 0x58, 0xe3, 0x3d, 0x24, 0x15, 0x1d, 0xfd, 0xb3, 0xc4, 0xfd,
+ 0xf4, 0xdf, 0x16, 0xf0, 0x38, 0xf7, 0x18, 0x19, 0x19, 0x63, 0x0e, 0x36, 0x40,
+ 0x2d, 0x17, 0xed, 0x30, 0x4c, 0x04, 0xf0, 0xb5, 0x42, 0x16, 0x04, 0x07, 0xfe,
+ 0x37, 0x70, 0x24, 0xe6, 0xfe, 0x7f, 0x03, 0xd4, 0x29, 0x41, 0x09, 0xe0, 0x0b,
+ 0x31, 0xda, 0x35, 0x02, 0xe9, 0xee, 0x0b, 0x02, 0xfb, 0x01, 0xfc, 0x12, 0x08,
+ 0xec, 0xdd, 0x40, 0xea, 0xea, 0xd4, 0x4a, 0xf7, 0xde, 0xf4, 0xe6, 0x23, 0x57,
+ 0x0a, 0x31, 0xe2, 0x09, 0x07, 0x2f, 0xe2, 0xca, 0x50, 0x12, 0x37, 0x19, 0x28,
+ 0xe2, 0x04, 0x7f, 0x4d, 0x3c, 0xad, 0x28, 0xf0, 0xea, 0xe0, 0xac, 0x01, 0x06,
+ 0x37, 0x5c, 0x08, 0xb8, 0xe9, 0x09, 0xd1, 0x35, 0x16, 0xdf, 0x22, 0xf9, 0x10,
+ 0x18, 0x22, 0x1b, 0xec, 0x00, 0xf6, 0xd4, 0x41, 0x16, 0x1f, 0xf9, 0xf9, 0x19,
+ 0x40, 0x45, 0x52, 0xf9, 0x1c, 0x17, 0xed, 0xd9, 0x2f, 0x1f, 0x71, 0x61, 0xca,
+ 0x0c, 0xfc, 0xf6, 0xf8, 0x29, 0x02, 0xd8, 0x16, 0xfa, 0xc5, 0x18, 0x28, 0x14,
+ 0x26, 0x03, 0xcd, 0xc0, 0x2e, 0x1b, 0x15, 0x31, 0xec, 0xf5, 0xda, 0x30, 0x0c,
+ 0x54, 0x5e, 0x18, 0x30, 0x1e, 0xeb, 0xe4, 0x08, 0x17, 0x29, 0x15, 0xfc, 0xdd,
+ 0xd8, 0x1b, 0x3e, 0xc8, 0x28, 0x31, 0x0e, 0xe6, 0x11, 0x06, 0x3a, 0xa8, 0xe6,
+ 0x1c, 0xe7, 0xd9, 0x66, 0x3d, 0x0b, 0xda, 0x30, 0x37, 0x0e, 0xc6, 0x22, 0xe6,
+ 0x1e, 0x28, 0xeb, 0xe9, 0x9a, 0x29, 0x37, 0x19, 0xec, 0xd4, 0xfd, 0xe5, 0xed,
+ 0xfb, 0x59, 0xde, 0x29, 0xce, 0x25, 0xfd, 0xe2, 0xea, 0x13, 0xde, 0xcd, 0xee,
+ 0x3d, 0x38, 0xef, 0x1f, 0x1b, 0x7f, 0xee, 0xef, 0x37, 0xca, 0x29, 0x0a, 0xff,
+ 0xe5, 0xec, 0x0c, 0xf7, 0xdb, 0x2a, 0x12, 0xd2, 0x29, 0x16, 0xbc, 0xef, 0x19,
+ 0xf9, 0x34, 0xee, 0x07, 0xec, 0xe4, 0xee, 0x42, 0xd6, 0xfa, 0x17, 0xd6, 0xdd,
+ 0xc7, 0x02, 0xdc, 0xe8, 0xcc, 0xd8, 0xe3, 0xd8, 0x0a, 0x0a, 0x20, 0x08, 0xeb,
+ 0x2d, 0xfe, 0x1f, 0xee, 0x05, 0xe2, 0x3a, 0xe7, 0xe9, 0xe4, 0xe2, 0xfd, 0xc3,
+ 0xbe, 0xec, 0xd6, 0xdc, 0xe1, 0xee, 0xee, 0x17, 0x16, 0x3e, 0xee, 0x32, 0xf4,
+ 0x02, 0xf8, 0x25, 0xdc, 0x05, 0xf5, 0x1b, 0xf0, 0xfe, 0xe7, 0x00, 0x15, 0xd9,
+ 0x0d, 0x05, 0xe6, 0xd7, 0x1f, 0x1d, 0x02, 0xe5, 0xcb, 0xeb, 0xd8, 0x13, 0xee,
+ 0x46, 0xe6, 0x10, 0xc1, 0xee, 0x11, 0xef, 0xec, 0xfe, 0x1a, 0xd6, 0x27, 0xf9,
+ 0xf9, 0x07, 0x06, 0xee, 0x30, 0x0c, 0x3a, 0x1b, 0x1a, 0x31, 0x0b, 0xf1, 0x20,
+ 0x10, 0x25, 0x2b, 0x15, 0xd3, 0xf7, 0x1e, 0x38, 0xe8, 0x7f, 0x04, 0x29, 0x18,
+ 0x0b, 0xe9, 0xf7, 0xea, 0x16, 0xe8, 0xe9, 0x06, 0xfa, 0xe1, 0x0b, 0xdd, 0xdb,
+ 0x02, 0x0e, 0xfc, 0x01, 0x50, 0xe6, 0x01, 0xca, 0xea, 0x08, 0x05, 0x38, 0x05,
+ 0xe0, 0x0e, 0x13, 0x1d, 0xd2, 0x02, 0xe8, 0x00, 0xf8, 0xe9, 0x13, 0x07, 0x0e,
+ 0x2e, 0x10, 0x4a, 0x0c, 0x07, 0x41, 0x18, 0x07, 0x34, 0x03, 0xf1, 0x27, 0xde,
+ 0xff, 0xc5, 0x16, 0xe7, 0xd8, 0x0b, 0xf9, 0xd2, 0x3a, 0x24, 0x21, 0x15, 0xf3,
+ 0xed, 0xf5, 0xf6, 0x2d, 0xe5, 0x4a, 0xc9, 0xe0, 0x0f, 0x20, 0xf2, 0x1a, 0x28,
+ 0x3c, 0x1a, 0xf6, 0xfa, 0x3a, 0xe4, 0x3f, 0x0d, 0x05, 0xde, 0xe9, 0x1e, 0x17,
+ 0x3a, 0x21, 0xbf, 0xbb, 0x0b, 0xed, 0xfc, 0x15, 0xe8, 0xfe, 0x81, 0x2b, 0xd8,
+ 0x2e, 0x14, 0x2f, 0xd9, 0xeb, 0x22, 0x0f, 0x0a, 0xf4, 0xf1, 0x01, 0x17, 0x0a,
+ 0x20, 0xe9, 0x29, 0xf7, 0xea, 0xfb, 0xf9, 0xfb, 0xd0, 0x48, 0xef, 0x05, 0xce,
+ 0xf5, 0xf8, 0xc7, 0x52, 0xd5, 0x07, 0xd3, 0xfc, 0xf4, 0xa8, 0x2d, 0x14, 0xdb,
+ 0x3b, 0xdd, 0xd1, 0xfb, 0x1e, 0xd3, 0x09, 0xc4, 0xce, 0x12, 0xcd, 0xce, 0xe2,
+ 0x07, 0x43, 0xfb, 0xf2, 0xd7, 0x1a, 0xe8, 0x1c, 0xf4, 0x16, 0x1a, 0xb7, 0xe8,
+ 0xec, 0xe7, 0xe6, 0x04, 0xfc, 0x3c, 0x3c, 0xf7, 0xc3, 0xec, 0x58, 0xe0, 0x24,
+ 0xdf, 0x1a, 0x40, 0x41, 0xfa, 0x25, 0xf5, 0x00, 0xc5, 0x3f, 0xfc, 0xd5, 0x24,
+ 0x1a, 0xfc, 0xf6, 0xd6, 0xb2, 0x10, 0x0c, 0xeb, 0x02, 0x01, 0x33, 0xd7, 0x06,
+ 0xe2, 0x13, 0xff, 0x11, 0x38, 0xc9, 0xd7, 0xd7, 0xeb, 0xf4, 0x15, 0xfa, 0xda,
+ 0x32, 0x3d, 0xfd, 0xff, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0xb5,
+ 0x79, 0x9c, 0x67, 0xe0, 0x3a, 0x57, 0xa7, 0x81, 0x58, 0x81, 0x7f, 0x5f, 0xe6,
+ 0xfe, 0xb2, 0xc5, 0xdb, 0x8a, 0x3c, 0xec, 0xc7, 0xaf, 0xa8, 0xf2, 0x09, 0x08,
+ 0x2f, 0xdd, 0x81, 0x7b, 0xb7, 0x0a, 0x0e, 0x24, 0x6b, 0x7f, 0xa3, 0x01, 0xdd,
+ 0x10, 0x04, 0x8c, 0x26, 0xe6, 0x4e, 0x81, 0x81, 0x39, 0x81, 0x04, 0x4f, 0xf1,
+ 0x46, 0x28, 0xc0, 0x6a, 0x9c, 0x3e, 0xb7, 0x2e, 0x77, 0x06, 0xfa, 0x46, 0x1d,
+ 0x63, 0x4c, 0xf2, 0xec, 0xd1, 0x91, 0x5c, 0x95, 0xfc, 0xff, 0x60, 0x95, 0xfc,
+ 0xff, 0x64, 0x95, 0xfc, 0xff, 0x68, 0x95, 0xfc, 0xff, 0x96, 0x3d, 0xfd, 0xff,
+ 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0xf9, 0xf0, 0x0f, 0x05,
+ 0x06, 0x81, 0x04, 0xff, 0x74, 0xef, 0xfe, 0xf9, 0x81, 0x18, 0x16, 0x7f, 0xeb,
+ 0xf7, 0x04, 0x00, 0x12, 0xf5, 0xf7, 0x20, 0xec, 0x06, 0xf4, 0x7f, 0x5a, 0x7a,
+ 0xf7, 0x07, 0xfa, 0x2a, 0xef, 0x60, 0x0a, 0x7f, 0xee, 0x81, 0x55, 0x0a, 0xfa,
+ 0xfc, 0xbb, 0x0b, 0xfe, 0xdf, 0x19, 0xec, 0xfb, 0x1f, 0x04, 0x81, 0xef, 0x7f,
+ 0x3e, 0xea, 0xf8, 0xce, 0x31, 0x4d, 0x11, 0xfc, 0x81, 0x0b, 0x00, 0xfd, 0x15,
+ 0xf9, 0xf8, 0x01, 0x0d, 0x0f, 0x01, 0x03, 0xe6, 0x81, 0x03, 0x81, 0xdb, 0x0c,
+ 0xfa, 0x0a, 0x0d, 0xc9, 0xf8, 0x49, 0x5a, 0x15, 0xf1, 0xfd, 0x60, 0x81, 0xfd,
+ 0x04, 0xf1, 0x01, 0x07, 0xa2, 0x0b, 0x81, 0xf9, 0xb4, 0xc8, 0x07, 0x02, 0xaa,
+ 0x17, 0x7f, 0x02, 0x05, 0xd9, 0xd7, 0xf0, 0x7f, 0x23, 0xd8, 0x1d, 0x0d, 0x0a,
+ 0x09, 0xf1, 0xf5, 0xea, 0x7f, 0x00, 0x22, 0x3e, 0xfd, 0xff, 0x04, 0x00, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0x1f, 0xe2, 0xff, 0xff, 0xff, 0x2f, 0x00, 0x00,
+ 0xaf, 0xee, 0xff, 0xff, 0xdb, 0x16, 0x00, 0x00, 0x44, 0xff, 0xff, 0xff, 0x16,
+ 0x54, 0x00, 0x00, 0x34, 0x17, 0x00, 0x00, 0xd5, 0x0c, 0x00, 0x00, 0xf6, 0x22,
+ 0x00, 0x00, 0xcd, 0x20, 0x00, 0x00, 0xdf, 0x8f, 0x00, 0x00, 0x64, 0x25, 0x00,
+ 0x00, 0x83, 0x1d, 0x00, 0x00, 0x53, 0x42, 0x00, 0x00, 0xe6, 0x19, 0x00, 0x00,
+ 0x9f, 0x0d, 0x00, 0x00, 0x03, 0xde, 0xff, 0xff, 0x52, 0x23, 0x00, 0x00, 0x71,
+ 0x3f, 0x00, 0x00, 0x92, 0x19, 0x00, 0x00, 0xb0, 0xd9, 0xff, 0xff, 0xa0, 0x23,
+ 0x00, 0x00, 0xaf, 0x03, 0x00, 0x00, 0x30, 0xf9, 0xff, 0xff, 0x2b, 0x28, 0x00,
+ 0x00, 0xfc, 0x97, 0x00, 0x00, 0xcc, 0x09, 0x00, 0x00, 0xb9, 0x24, 0x00, 0x00,
+ 0x6b, 0xb9, 0xff, 0xff, 0x68, 0x56, 0x00, 0x00, 0x43, 0x2c, 0x00, 0x00, 0xce,
+ 0xef, 0xff, 0xff, 0xae, 0x3e, 0xfd, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x03, 0x34, 0xee, 0xd9, 0x38, 0x14, 0x0d, 0xc6, 0xdc, 0x0d, 0x1d,
+ 0xf3, 0x7f, 0x3a, 0x01, 0x13, 0x0f, 0x3c, 0xfd, 0x0d, 0xe3, 0xd9, 0xc3, 0xaf,
+ 0xad, 0xfc, 0x1a, 0xff, 0xf2, 0x7f, 0xe4, 0xdc, 0x0d, 0x74, 0x0d, 0x0a, 0xdb,
+ 0xdb, 0xd6, 0xac, 0xe4, 0x1f, 0xfc, 0x43, 0xff, 0x7f, 0xf9, 0x04, 0xf8, 0x48,
+ 0xf0, 0x85, 0x56, 0x81, 0xbc, 0xc9, 0xd4, 0x04, 0x31, 0xf8, 0x64, 0xe4, 0x16,
+ 0xec, 0x40, 0xed, 0xbe, 0xf2, 0x0c, 0x0b, 0x19, 0x0c, 0x38, 0x07, 0xc8, 0xe4,
+ 0x2d, 0x81, 0xe4, 0x77, 0xab, 0xf6, 0x2a, 0xe2, 0x27, 0xe8, 0x0a, 0xa3, 0x49,
+ 0xad, 0x7f, 0x1c, 0xf4, 0x39, 0x17, 0xa1, 0xa7, 0x1b, 0x0b, 0xef, 0x17, 0xd9,
+ 0xff, 0xf1, 0x02, 0x49, 0x2b, 0xe3, 0xcf, 0x2f, 0x7f, 0xa2, 0xff, 0xe4, 0x0f,
+ 0xe8, 0xe4, 0x01, 0x7f, 0xa3, 0xfa, 0xdd, 0xff, 0xce, 0x0d, 0xf6, 0xea, 0x0d,
+ 0xaa, 0xf6, 0xc2, 0x32, 0x02, 0xeb, 0x29, 0x1b, 0x7f, 0xe6, 0xee, 0x0c, 0xf3,
+ 0xc2, 0x25, 0x35, 0xde, 0xfc, 0xdc, 0xc9, 0x7f, 0x2b, 0xd7, 0x17, 0x20, 0x22,
+ 0x2b, 0x09, 0x59, 0xba, 0x38, 0x35, 0x16, 0x5d, 0x4d, 0x3c, 0xad, 0x95, 0x09,
+ 0xbd, 0x81, 0xe2, 0x22, 0xc8, 0x9f, 0x33, 0xec, 0xab, 0x70, 0x16, 0xeb, 0x24,
+ 0x20, 0xce, 0x2f, 0xc2, 0xb8, 0xe5, 0xf7, 0x14, 0x1e, 0x22, 0x81, 0x2f, 0xda,
+ 0x7f, 0xc3, 0xce, 0x5a, 0xcc, 0x70, 0xfa, 0x4d, 0x06, 0xa7, 0x8e, 0x06, 0xbc,
+ 0x1d, 0x35, 0x15, 0x0b, 0xd6, 0xed, 0x1f, 0xef, 0xc2, 0xca, 0xd1, 0xe1, 0xf7,
+ 0x23, 0xff, 0x81, 0xd2, 0x39, 0xe3, 0xee, 0x15, 0x06, 0xe2, 0xf6, 0x48, 0xc0,
+ 0x13, 0xeb, 0x81, 0xbd, 0x13, 0x37, 0xf5, 0x38, 0x29, 0xfc, 0x7f, 0xf4, 0xee,
+ 0x0a, 0x08, 0x1e, 0xac, 0x1f, 0xd0, 0x43, 0xe4, 0xd3, 0xf1, 0xfd, 0x2e, 0xe6,
+ 0xd4, 0x2f, 0x2b, 0x3e, 0x0a, 0x5a, 0x7f, 0x08, 0xd4, 0xe3, 0x18, 0x24, 0xb1,
+ 0x00, 0x11, 0x85, 0xed, 0xfc, 0x22, 0x3c, 0x0e, 0x19, 0xc7, 0x78, 0xfa, 0xbc,
+ 0x27, 0xfb, 0x2f, 0x81, 0x5f, 0x35, 0x0c, 0x1a, 0xe8, 0x96, 0xbd, 0x7f, 0x95,
+ 0x0e, 0x32, 0x62, 0xe7, 0xf6, 0xcf, 0xb3, 0xb3, 0xef, 0x55, 0xf5, 0xf2, 0xf2,
+ 0x24, 0xbf, 0x55, 0x79, 0xfe, 0xcc, 0xf4, 0x61, 0x58, 0x81, 0x69, 0x81, 0x11,
+ 0xb0, 0x4d, 0xee, 0x2d, 0x7f, 0x39, 0xdc, 0xde, 0xf7, 0x76, 0x52, 0xb6, 0xdf,
+ 0x7f, 0x0e, 0x68, 0x18, 0x1d, 0xe3, 0xc7, 0xb9, 0x25, 0xb6, 0x48, 0x15, 0x2b,
+ 0xe8, 0xc5, 0x0b, 0x11, 0x03, 0xe4, 0xc9, 0xf5, 0x19, 0xe1, 0x7f, 0x05, 0x25,
+ 0xd7, 0x3f, 0x08, 0x0b, 0x00, 0xba, 0x29, 0x7f, 0x1f, 0xe7, 0x18, 0xf3, 0x04,
+ 0x26, 0xf1, 0x1a, 0xe6, 0x11, 0x19, 0xe7, 0xfa, 0xf0, 0xa7, 0x0c, 0xf6, 0x7f,
+ 0xc3, 0x09, 0xec, 0xe0, 0x14, 0xe2, 0x23, 0xf0, 0x97, 0x04, 0x38, 0x10, 0x7f,
+ 0xd3, 0x08, 0x5d, 0xb5, 0x25, 0x20, 0x46, 0x95, 0x30, 0xa6, 0x09, 0xde, 0x64,
+ 0xcc, 0xf6, 0xa8, 0x03, 0xfe, 0x01, 0x10, 0xf1, 0x38, 0xfb, 0xeb, 0xfc, 0x7f,
+ 0x06, 0x00, 0x06, 0xf1, 0x1a, 0x3d, 0xf4, 0xf1, 0xec, 0xef, 0x7f, 0xdf, 0x2d,
+ 0x99, 0x12, 0xa9, 0x40, 0xef, 0x94, 0xf3, 0x0f, 0x7f, 0xe8, 0x29, 0x07, 0xf8,
+ 0xd9, 0xca, 0x23, 0x71, 0x36, 0x06, 0x0b, 0x2c, 0x1a, 0xdb, 0xf4, 0xec, 0x7f,
+ 0xe4, 0xdf, 0x03, 0xa3, 0xde, 0xb6, 0xa8, 0x08, 0x0f, 0xda, 0xfe, 0xc5, 0x1a,
+ 0xd2, 0xe4, 0x3a, 0xca, 0xf3, 0xfa, 0x81, 0xd0, 0xd3, 0xf2, 0x08, 0x10, 0xda,
+ 0x17, 0x02, 0x1a, 0x11, 0x81, 0x81, 0x76, 0xf9, 0xd7, 0xe3, 0xda, 0xbc, 0x51,
+ 0x3e, 0x65, 0xbe, 0x37, 0x71, 0x43, 0xca, 0xba, 0x40, 0xfd, 0xff, 0x04, 0x00,
+ 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x14, 0xfd, 0x8d, 0x2e, 0x0c, 0x0c, 0xff,
+ 0x1a, 0x0e, 0x00, 0x85, 0xbe, 0xff, 0x00, 0xf9, 0xf0, 0x11, 0xf9, 0x81, 0x90,
+ 0xf7, 0x01, 0x00, 0x01, 0xe0, 0xf0, 0xf2, 0x9f, 0xe1, 0xe9, 0x00, 0x22, 0x81,
+ 0x1b, 0x0c, 0x18, 0xfe, 0xcb, 0x13, 0x5e, 0xd9, 0xeb, 0x42, 0x3e, 0x0a, 0xec,
+ 0x00, 0x7f, 0x24, 0xf9, 0xdf, 0xcc, 0x81, 0xbc, 0x01, 0x66, 0xb4, 0x7f, 0xfe,
+ 0x81, 0x1c, 0x81, 0x7f, 0x63, 0x25, 0x3b, 0xc3, 0xa5, 0x78, 0x8f, 0x01, 0x03,
+ 0x0e, 0x41, 0xfd, 0xff, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x7a,
+ 0xed, 0xff, 0xff, 0xc0, 0xef, 0xff, 0xff, 0x49, 0x1b, 0x00, 0x00, 0xc7, 0x21,
+ 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x26, 0x7a, 0x00, 0x00, 0x85, 0xc4, 0xff,
+ 0xff, 0x41, 0x95, 0xff, 0xff, 0x1b, 0xf2, 0xff, 0xff, 0x05, 0x33, 0x00, 0x00,
+ 0xcb, 0xf5, 0xff, 0xff, 0x4d, 0x6c, 0x00, 0x00, 0xb1, 0x08, 0x00, 0x00, 0x01,
+ 0xd2, 0xff, 0xff, 0x47, 0x05, 0x00, 0x00, 0x59, 0x3e, 0x00, 0x00, 0x13, 0xd9,
+ 0xff, 0xff, 0x62, 0x2f, 0x00, 0x00, 0x79, 0xcd, 0xff, 0xff, 0x86, 0xd7, 0xff,
+ 0xff, 0x99, 0x0a, 0x00, 0x00, 0x7f, 0x21, 0x00, 0x00, 0x27, 0xf4, 0xff, 0xff,
+ 0xc2, 0xec, 0xff, 0xff, 0xc1, 0xf3, 0xff, 0xff, 0x04, 0xff, 0xff, 0xff, 0x0f,
+ 0xf5, 0xff, 0xff, 0x51, 0xed, 0xff, 0xff, 0x3c, 0x2a, 0x00, 0x00, 0xec, 0xe8,
+ 0xff, 0xff, 0x24, 0xc3, 0xff, 0xff, 0x99, 0x32, 0x00, 0x00, 0x9a, 0x41, 0xfd,
+ 0xff, 0x04, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x4f, 0x2a, 0xde, 0x21,
+ 0xa6, 0xcc, 0x33, 0x25, 0x47, 0xe7, 0x16, 0xe6, 0xc7, 0x59, 0xb9, 0x94, 0x7f,
+ 0x3d, 0xd7, 0x5e, 0x81, 0x9f, 0x61, 0x50, 0x6a, 0xb5, 0x40, 0xa7, 0xa3, 0x7f,
+ 0xa2, 0xac, 0x4f, 0x1a, 0xde, 0x32, 0xbb, 0xe6, 0x3d, 0x37, 0x2e, 0xd2, 0x37,
+ 0x88, 0xcc, 0x3a, 0xda, 0xe7, 0x4e, 0x52, 0xbd, 0x30, 0xa1, 0x98, 0x3d, 0x7f,
+ 0x53, 0xdb, 0x53, 0xb1, 0xb7, 0x3b, 0xa0, 0xc6, 0x69, 0x7f, 0x81, 0x7f, 0x83,
+ 0x81, 0x7f, 0x7f, 0x7f, 0x81, 0x7f, 0x81, 0x81, 0x69, 0x81, 0x81, 0x38, 0x40,
+ 0xc8, 0x43, 0xb5, 0xe8, 0x56, 0x2f, 0x3d, 0xd3, 0x4b, 0xa6, 0xb8, 0x4f, 0xbb,
+ 0xc4, 0x16, 0x20, 0xd6, 0x01, 0xe1, 0xe3, 0x18, 0x63, 0x1d, 0xf3, 0x41, 0xdf,
+ 0xeb, 0x04, 0xe9, 0x18, 0x1d, 0x4c, 0xa4, 0x23, 0xc5, 0xd1, 0x2d, 0x58, 0x2b,
+ 0xeb, 0x53, 0xc8, 0xc9, 0x07, 0xe0, 0xfd, 0x13, 0x26, 0xeb, 0x24, 0xf9, 0x01,
+ 0x1c, 0x12, 0x12, 0x00, 0x23, 0xf0, 0xe3, 0x0e, 0xf8, 0xfc, 0x0c, 0x9a, 0xfc,
+ 0xff, 0x3a, 0x42, 0xfd, 0xff, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x9c, 0x79, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x11, 0x01, 0x00, 0x00, 0x7c,
+ 0xf5, 0xff, 0xff, 0xf1, 0x1c, 0x00, 0x00, 0xcc, 0x3d, 0x00, 0x00, 0xdb, 0x02,
+ 0x00, 0x00, 0xc2, 0xff, 0xff, 0xff, 0x66, 0x42, 0xfd, 0xff, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0xe7, 0xe7, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xff,
+ 0x1c, 0xf5, 0xff, 0xff, 0x54, 0x38, 0x00, 0x00, 0xdf, 0xe2, 0xff, 0xff, 0xbe,
+ 0x0b, 0x00, 0x00, 0xbe, 0x02, 0x00, 0x00, 0xc9, 0xed, 0xff, 0xff, 0xa7, 0x31,
+ 0x00, 0x00, 0x86, 0x2a, 0x00, 0x00, 0x48, 0x2b, 0x00, 0x00, 0x9d, 0xf3, 0xff,
+ 0xff, 0x00, 0xec, 0xff, 0xff, 0x2f, 0xe0, 0xff, 0xff, 0x94, 0x39, 0x00, 0x00,
+ 0x83, 0xd9, 0xff, 0xff, 0x50, 0x06, 0x00, 0x00, 0xd1, 0xfc, 0xff, 0xff, 0x1f,
+ 0xfd, 0xff, 0xff, 0x33, 0x2b, 0x00, 0x00, 0xa6, 0xf8, 0xff, 0xff, 0x8e, 0xde,
+ 0xff, 0xff, 0x78, 0x1c, 0x00, 0x00, 0xcc, 0x24, 0x00, 0x00, 0xfd, 0xed, 0xff,
+ 0xff, 0x55, 0x06, 0x00, 0x00, 0xe5, 0x00, 0x00, 0x00, 0xb6, 0xe8, 0xff, 0xff,
+ 0x06, 0xf2, 0xff, 0xff, 0x6b, 0xf5, 0xff, 0xff, 0x83, 0xfc, 0xff, 0xff, 0x6b,
+ 0xf6, 0xff, 0xff, 0x99, 0xf9, 0xff, 0xff, 0xdd, 0xf0, 0xff, 0xff, 0x68, 0x38,
+ 0x00, 0x00, 0x22, 0xf1, 0xff, 0xff, 0xe3, 0xeb, 0xff, 0xff, 0x2a, 0xf3, 0xff,
+ 0xff, 0xc1, 0x32, 0x00, 0x00, 0xe5, 0xe5, 0xff, 0xff, 0x26, 0x26, 0x00, 0x00,
+ 0xfb, 0x08, 0x00, 0x00, 0x31, 0xf9, 0xff, 0xff, 0x56, 0xe6, 0xff, 0xff, 0xd5,
+ 0xe0, 0xff, 0xff, 0x40, 0xe8, 0xff, 0xff, 0xdf, 0xf1, 0xff, 0xff, 0x76, 0xf5,
+ 0xff, 0xff, 0x2e, 0xe4, 0xff, 0xff, 0xec, 0xf1, 0xff, 0xff, 0x19, 0xf5, 0xff,
+ 0xff, 0x03, 0x2c, 0x00, 0x00, 0xb4, 0xec, 0xff, 0xff, 0x57, 0xe2, 0xff, 0xff,
+ 0x26, 0xe7, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff, 0x2a, 0xf9, 0xff, 0xff, 0x91,
+ 0xf3, 0xff, 0xff, 0x2a, 0xec, 0xff, 0xff, 0xb1, 0xe3, 0xff, 0xff, 0xa0, 0xf7,
+ 0xff, 0xff, 0x0a, 0x28, 0x00, 0x00, 0xfb, 0xeb, 0xff, 0xff, 0xa2, 0xfb, 0xff,
+ 0xff, 0x62, 0x26, 0x00, 0x00, 0x82, 0xf0, 0xff, 0xff, 0x5e, 0x29, 0x00, 0x00,
+ 0xe7, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0xf7, 0xff, 0xff, 0x40,
+ 0xfa, 0xff, 0xff, 0x70, 0x0a, 0x00, 0x00, 0xeb, 0xf5, 0xff, 0xff, 0x15, 0x2b,
+ 0x00, 0x00, 0xf0, 0xf2, 0xff, 0xff, 0x6f, 0x24, 0x00, 0x00, 0xd8, 0x11, 0x00,
+ 0x00, 0x79, 0x28, 0x00, 0x00, 0x1e, 0xf8, 0xff, 0xff, 0x76, 0xf9, 0xff, 0xff,
+ 0x12, 0xe8, 0xff, 0xff, 0xa4, 0x31, 0x00, 0x00, 0x2a, 0xfd, 0xff, 0xff, 0x89,
+ 0xea, 0xff, 0xff, 0xfe, 0xe3, 0xff, 0xff, 0xf5, 0x28, 0x00, 0x00, 0xf9, 0x1b,
+ 0x00, 0x00, 0xdd, 0xf8, 0xff, 0xff, 0xb1, 0x04, 0x00, 0x00, 0xb8, 0xf3, 0xff,
+ 0xff, 0x9f, 0x03, 0x00, 0x00, 0x92, 0xe7, 0xff, 0xff, 0x93, 0xfe, 0xff, 0xff,
+ 0xe6, 0x2d, 0x00, 0x00, 0xf7, 0x30, 0x00, 0x00, 0x6c, 0x36, 0x00, 0x00, 0x4a,
+ 0x0c, 0x00, 0x00, 0x4c, 0xf8, 0xff, 0xff, 0x12, 0xed, 0xff, 0xff, 0x67, 0xf8,
+ 0xff, 0xff, 0x29, 0x33, 0x00, 0x00, 0x08, 0xef, 0xff, 0xff, 0x72, 0x2b, 0x00,
+ 0x00, 0xed, 0xf4, 0xff, 0xff, 0x0b, 0x29, 0x00, 0x00, 0xf4, 0x2e, 0x00, 0x00,
+ 0x48, 0xfe, 0xff, 0xff, 0xd3, 0xf2, 0xff, 0xff, 0xde, 0xfd, 0xff, 0xff, 0xd9,
+ 0x08, 0x00, 0x00, 0x6e, 0x25, 0x00, 0x00, 0x9b, 0xf6, 0xff, 0xff, 0xf7, 0xea,
+ 0xff, 0xff, 0x82, 0x0a, 0x00, 0x00, 0x7d, 0x0e, 0x00, 0x00, 0x68, 0xee, 0xff,
+ 0xff, 0x0c, 0x27, 0x00, 0x00, 0xeb, 0x2e, 0x00, 0x00, 0xc9, 0xfe, 0xff, 0xff,
+ 0xda, 0x39, 0x00, 0x00, 0xd4, 0x32, 0x00, 0x00, 0x1e, 0x03, 0x00, 0x00, 0x1d,
+ 0xdf, 0xff, 0xff, 0xe8, 0xfb, 0xff, 0xff, 0x89, 0x07, 0x00, 0x00, 0xcd, 0x28,
+ 0x00, 0x00, 0x22, 0x1e, 0x00, 0x00, 0xe5, 0xf8, 0xff, 0xff, 0x48, 0x9c, 0xfc,
+ 0xff, 0x4c, 0x9c, 0xfc, 0xff, 0x50, 0x9c, 0xfc, 0xff, 0x54, 0x9c, 0xfc, 0xff,
+ 0x58, 0x9c, 0xfc, 0xff, 0x5c, 0x9c, 0xfc, 0xff, 0x8a, 0x44, 0xfd, 0xff, 0x04,
+ 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x32, 0x01, 0x00, 0x00, 0x62, 0xff,
+ 0xff, 0xff, 0xed, 0x4a, 0x00, 0x00, 0x94, 0xfe, 0xff, 0xff, 0x5d, 0x18, 0x00,
+ 0x00, 0x82, 0x2f, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0x1b, 0x01, 0x00, 0x00,
+ 0x79, 0x01, 0x00, 0x00, 0x7d, 0x2c, 0x00, 0x00, 0xc2, 0x15, 0x00, 0x00, 0x74,
+ 0x36, 0x00, 0x00, 0x1a, 0x56, 0x00, 0x00, 0xa2, 0x11, 0x00, 0x00, 0x6c, 0x1d,
+ 0x00, 0x00, 0x29, 0x1e, 0x00, 0x00, 0xac, 0x9c, 0xfc, 0xff, 0xb0, 0x9c, 0xfc,
+ 0xff, 0xb4, 0x9c, 0xfc, 0xff, 0xb8, 0x9c, 0xfc, 0xff, 0xbc, 0x9c, 0xfc, 0xff,
+ 0xc0, 0x9c, 0xfc, 0xff, 0xc4, 0x9c, 0xfc, 0xff, 0xc8, 0x9c, 0xfc, 0xff, 0xcc,
+ 0x9c, 0xfc, 0xff, 0xd0, 0x9c, 0xfc, 0xff, 0xd4, 0x9c, 0xfc, 0xff, 0x02, 0x45,
+ 0xfd, 0xff, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x50, 0x27, 0x00,
+ 0x00, 0x6a, 0x04, 0x00, 0x00, 0x00, 0xcd, 0xff, 0xff, 0xb4, 0x89, 0xff, 0xff,
+ 0xcb, 0xa4, 0xff, 0xff, 0x2a, 0x40, 0x00, 0x00, 0x76, 0x19, 0x00, 0x00, 0xd1,
+ 0xbd, 0xff, 0xff, 0x57, 0x0b, 0x00, 0x00, 0x4e, 0x32, 0x00, 0x00, 0x17, 0x46,
+ 0x00, 0x00, 0x15, 0xed, 0xff, 0xff, 0x10, 0x4a, 0x00, 0x00, 0x2c, 0x21, 0x00,
+ 0x00, 0xd1, 0xd7, 0xff, 0xff, 0x07, 0xdc, 0xff, 0xff, 0x4e, 0x45, 0xfd, 0xff,
+ 0x04, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x1b, 0x31, 0x3b, 0x4d, 0x2e,
+ 0xfe, 0xe7, 0xae, 0xcf, 0x14, 0x7f, 0xfc, 0xe6, 0x08, 0x36, 0xa9, 0x01, 0x7a,
+ 0xdf, 0xf7, 0xf8, 0x0b, 0xed, 0x0e, 0xfe, 0xfc, 0xd3, 0x81, 0xf5, 0xbc, 0x02,
+ 0xf4, 0xa4, 0x81, 0x9a, 0xfa, 0xcd, 0xf0, 0x46, 0xd4, 0xd4, 0xcd, 0xa8, 0x37,
+ 0xb3, 0xb8, 0x2e, 0xe1, 0x51, 0x4e, 0xfa, 0x1f, 0xf2, 0xc3, 0xd9, 0x7f, 0x3c,
+ 0x0f, 0x4e, 0xe4, 0x7f, 0x81, 0x81, 0xb8, 0x16, 0x0a, 0x06, 0xb1, 0xbe, 0xf5,
+ 0x2a, 0xd4, 0x2f, 0x25, 0xd5, 0xac, 0x57, 0x29, 0xd3, 0xa5, 0xf0, 0x8d, 0x19,
+ 0x07, 0x81, 0x1b, 0xbe, 0x01, 0xe1, 0xea, 0xf6, 0xcc, 0xe9, 0x31, 0x2a, 0x12,
+ 0xf1, 0x46, 0x7f, 0x7f, 0x7f, 0xe0, 0x61, 0xbb, 0xdd, 0x0a, 0xe8, 0x04, 0xb7,
+ 0x11, 0x0c, 0xcd, 0x0a, 0x7f, 0xf6, 0x1e, 0xfe, 0xa6, 0xa4, 0x01, 0x64, 0xc9,
+ 0x4a, 0xa8, 0x43, 0xba, 0xc3, 0x7f, 0x81, 0x63, 0xbb, 0x00, 0xc6, 0x81, 0x7f,
+ 0x9e, 0x81, 0x81, 0xf7, 0x7f, 0x81, 0x81, 0x7f, 0x1d, 0x7f, 0xed, 0x7f, 0x81,
+ 0xe3, 0x7f, 0x9f, 0x3c, 0x7f, 0x81, 0x7f, 0x49, 0x61, 0x9f, 0xa2, 0x00, 0x13,
+ 0xa9, 0x55, 0xa7, 0xcf, 0xfa, 0x7e, 0x81, 0xf9, 0x16, 0x07, 0xac, 0xe6, 0x42,
+ 0xfa, 0xf0, 0x13, 0xa0, 0xbb, 0x30, 0x81, 0xf9, 0x81, 0xe7, 0xfc, 0xe6, 0xc0,
+ 0xc1, 0x2c, 0x78, 0xdf, 0xca, 0x0b, 0x97, 0x0f, 0x1e, 0xe8, 0x0e, 0xc8, 0xf6,
+ 0xf6, 0x14, 0x99, 0x09, 0xd9, 0x19, 0xd9, 0x81, 0xce, 0x24, 0x16, 0xf6, 0x42,
+ 0x40, 0xd6, 0xd9, 0xe4, 0x2b, 0x06, 0x9b, 0xea, 0xf5, 0x19, 0x0d, 0xfd, 0x68,
+ 0xc6, 0xef, 0xed, 0xee, 0xf7, 0x08, 0xe4, 0x09, 0x3b, 0x11, 0xaa, 0xe4, 0x08,
+ 0xff, 0x08, 0xb8, 0xde, 0x58, 0xed, 0xe2, 0x06, 0x07, 0x15, 0x62, 0x08, 0x83,
+ 0xe5, 0x14, 0xc7, 0x26, 0x16, 0x12, 0xc4, 0xf2, 0xf8, 0xf5, 0x03, 0x17, 0xee,
+ 0x0c, 0x28, 0x01, 0x1e, 0x15, 0x17, 0xd5, 0xc6, 0xb6, 0x00, 0xcf, 0xae, 0xed,
+ 0xdb, 0xfc, 0xe2, 0x2d, 0xf9, 0xdb, 0xe3, 0x37, 0xe7, 0x10, 0x7a, 0x46, 0xfd,
+ 0xff, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x81, 0x1c, 0x00, 0x00,
+ 0x0e, 0xfe, 0xff, 0xff, 0x07, 0x01, 0x00, 0x00, 0x49, 0xf8, 0xff, 0xff, 0xd4,
+ 0x08, 0x00, 0x00, 0x93, 0x25, 0x00, 0x00, 0x1f, 0xe7, 0xff, 0xff, 0xa9, 0x1c,
+ 0x00, 0x00, 0xc2, 0x3a, 0x00, 0x00, 0xe4, 0x1b, 0x00, 0x00, 0x9f, 0x06, 0x00,
+ 0x00, 0x37, 0xf8, 0xff, 0xff, 0x90, 0x5b, 0x00, 0x00, 0x57, 0x08, 0x00, 0x00,
+ 0x72, 0xfb, 0xff, 0xff, 0xc9, 0x7e, 0x00, 0x00, 0x19, 0x07, 0x00, 0x00, 0x67,
+ 0xff, 0xff, 0xff, 0x74, 0xff, 0xff, 0xff, 0x37, 0xff, 0xff, 0xff, 0x96, 0x30,
+ 0x00, 0x00, 0xb3, 0xfc, 0xff, 0xff, 0x52, 0x5d, 0x00, 0x00, 0x32, 0x03, 0x00,
+ 0x00, 0xdb, 0x04, 0x00, 0x00, 0x3f, 0x05, 0x00, 0x00, 0xa4, 0xfe, 0xff, 0xff,
+ 0xc1, 0x36, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x24, 0x1b, 0x00, 0x00, 0x83,
+ 0x32, 0x00, 0x00, 0x09, 0xfa, 0xff, 0xff, 0x06, 0x47, 0xfd, 0xff, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x13, 0xe9, 0xd2, 0x14, 0x97, 0x41, 0xa4,
+ 0xeb, 0x07, 0x1d, 0x32, 0xfb, 0xf7, 0x0a, 0xe6, 0xfe, 0xbd, 0x6c, 0x2d, 0x1c,
+ 0xd1, 0x3a, 0x16, 0x2d, 0x1e, 0xf8, 0x7f, 0x13, 0x1b, 0xc3, 0x50, 0x2b, 0xf9,
+ 0x17, 0xfd, 0xe6, 0x16, 0xea, 0xe0, 0x98, 0xcd, 0x32, 0xeb, 0x3c, 0x10, 0xf8,
+ 0x1b, 0xef, 0xf1, 0x10, 0x35, 0x00, 0x0b, 0x13, 0x03, 0xb3, 0xdf, 0x05, 0x7f,
+ 0xdd, 0xae, 0x3d, 0x3b, 0xf7, 0x62, 0xbe, 0xf2, 0xba, 0x28, 0x10, 0xfb, 0x98,
+ 0xa5, 0x21, 0x31, 0x27, 0xec, 0xfd, 0xe4, 0x1c, 0x09, 0xe2, 0x44, 0x0d, 0x28,
+ 0x28, 0xf9, 0xd5, 0x43, 0xe8, 0xcc, 0x27, 0xbe, 0x81, 0xa7, 0xd8, 0x1d, 0xe1,
+ 0x00, 0xe9, 0x33, 0x5a, 0x59, 0xf8, 0x81, 0xa4, 0x12, 0x00, 0xa1, 0x01, 0x26,
+ 0x29, 0x37, 0x27, 0xe7, 0xfd, 0x12, 0xcc, 0xe1, 0xd7, 0x01, 0x5f, 0x1b, 0xf5,
+ 0x5c, 0x1c, 0xc2, 0xb4, 0xe3, 0xed, 0xee, 0x03, 0xdc, 0xbb, 0xdc, 0x71, 0xb4,
+ 0xb9, 0xf2, 0xf3, 0xba, 0xc9, 0x18, 0x25, 0xd3, 0xe0, 0x89, 0xdd, 0x30, 0xc3,
+ 0x7f, 0xfb, 0x3e, 0x58, 0xca, 0x55, 0xa7, 0xec, 0xcc, 0xf0, 0xfb, 0x01, 0xf4,
+ 0xb8, 0xe8, 0x09, 0x04, 0x39, 0x02, 0x81, 0xcc, 0xbe, 0xc9, 0x06, 0xd1, 0x11,
+ 0xbe, 0xde, 0xe4, 0xf7, 0x2f, 0xf2, 0x38, 0x04, 0xd2, 0x52, 0xf2, 0x07, 0x24,
+ 0xd5, 0xbf, 0x06, 0x14, 0xf7, 0x49, 0x08, 0xd8, 0xc9, 0xae, 0x1b, 0x6e, 0x40,
+ 0xca, 0x7f, 0x51, 0x1f, 0xf0, 0xf8, 0x2b, 0x2b, 0xff, 0xf9, 0x0a, 0xe4, 0x1e,
+ 0x14, 0xc6, 0xf9, 0x27, 0x42, 0x0e, 0x38, 0x14, 0x01, 0xde, 0xea, 0x3b, 0x35,
+ 0x60, 0xf5, 0x2d, 0xea, 0xab, 0x4e, 0x33, 0x73, 0x58, 0x6f, 0x02, 0x20, 0x7d,
+ 0x30, 0x1e, 0x0d, 0xd6, 0x1a, 0xe9, 0x60, 0xb7, 0x0f, 0x11, 0x8e, 0x26, 0x29,
+ 0x1f, 0x7f, 0x16, 0xe3, 0x23, 0x75, 0x11, 0x81, 0xf0, 0xc4, 0xef, 0x13, 0x0b,
+ 0x43, 0xaf, 0x20, 0x1a, 0x01, 0x49, 0xa6, 0xff, 0x0f, 0x24, 0xfe, 0x05, 0x2f,
+ 0x4b, 0xbb, 0xce, 0x4a, 0x12, 0x50, 0x22, 0xf4, 0xc5, 0x08, 0x0c, 0x1f, 0x2a,
+ 0x58, 0xfa, 0xf7, 0x30, 0x30, 0xde, 0x4a, 0xa8, 0xf3, 0x21, 0x59, 0x19, 0x1e,
+ 0xdb, 0x0c, 0x17, 0x03, 0xb5, 0x91, 0xdc, 0xed, 0x09, 0xbe, 0x81, 0xfb, 0xe6,
+ 0xcc, 0x2b, 0x76, 0x55, 0xca, 0xf0, 0xe6, 0xef, 0xee, 0x19, 0xc7, 0xba, 0xb4,
+ 0x28, 0x20, 0xd1, 0x7f, 0x0a, 0xf4, 0x10, 0xf9, 0xe4, 0x01, 0xfe, 0xdb, 0x1e,
+ 0x36, 0x28, 0xd4, 0x21, 0xef, 0xdc, 0x00, 0xe7, 0x3e, 0x52, 0x12, 0xa5, 0x29,
+ 0x09, 0xad, 0x87, 0x81, 0x10, 0x9f, 0x49, 0xca, 0x1c, 0xb0, 0xe4, 0x23, 0xbe,
+ 0xde, 0x28, 0x0e, 0x22, 0xcf, 0xe9, 0xaf, 0x10, 0xf7, 0xdf, 0x10, 0x0a, 0xf6,
+ 0x04, 0xe5, 0xfd, 0x00, 0xe5, 0xfe, 0x81, 0x09, 0xc6, 0x1f, 0x10, 0x15, 0xcf,
+ 0xe7, 0x05, 0xc2, 0xd2, 0x09, 0x04, 0x15, 0xf6, 0x37, 0x65, 0x18, 0xd5, 0x06,
+ 0x4a, 0xcf, 0x1d, 0xfe, 0x0b, 0xe0, 0xed, 0x02, 0x15, 0x09, 0x03, 0xd4, 0xd7,
+ 0xec, 0x53, 0xe0, 0x03, 0x21, 0x7f, 0xfa, 0xf9, 0xf8, 0xed, 0x1a, 0x11, 0xf6,
+ 0xeb, 0xfe, 0x46, 0x2a, 0x3a, 0xd3, 0x5b, 0x1b, 0x0d, 0x08, 0x3d, 0x14, 0x3a,
+ 0xdf, 0x14, 0x16, 0xea, 0x25, 0xf7, 0x14, 0xfa, 0x3a, 0xe7, 0x05, 0x0f, 0x0b,
+ 0xe1, 0xeb, 0x13, 0x1a, 0xf4, 0xe1, 0x0d, 0xe9, 0x0f, 0xde, 0x7f, 0xfd, 0xfc,
+ 0xe9, 0x0d, 0x0d, 0x03, 0xf9, 0xc0, 0x28, 0xdd, 0x07, 0x04, 0xe5, 0xf9, 0x0c,
+ 0xe8, 0x87, 0x07, 0x06, 0xe7, 0xb2, 0x10, 0x1c, 0x81, 0xf1, 0x12, 0xf9, 0x12,
+ 0xf6, 0x11, 0x70, 0x24, 0x2e, 0x55, 0xda, 0xe4, 0xe8, 0x9e, 0x00, 0xf1, 0x60,
+ 0x0f, 0x03, 0xb9, 0xa3, 0x2f, 0x29, 0x34, 0xe5, 0xf8, 0x0f, 0x22, 0xec, 0x31,
+ 0xec, 0xea, 0xf1, 0xf5, 0xfd, 0x05, 0x18, 0x65, 0xda, 0x2e, 0x14, 0x3d, 0xcc,
+ 0x4e, 0x1f, 0x1f, 0x7f, 0xba, 0xc6, 0xfb, 0x22, 0x23, 0x61, 0x48, 0x32, 0x73,
+ 0x81, 0xf5, 0xfc, 0x50, 0xdd, 0xd7, 0x05, 0xe4, 0x0a, 0xa0, 0xf5, 0xe7, 0xce,
+ 0x3b, 0xce, 0xaa, 0xc1, 0xda, 0xd1, 0x2d, 0x08, 0xcb, 0xea, 0xfd, 0x07, 0xfd,
+ 0x02, 0x06, 0xf4, 0xed, 0xfb, 0xcc, 0x7f, 0xf1, 0x29, 0x01, 0x2a, 0xd5, 0x2b,
+ 0x4b, 0x01, 0x2f, 0x01, 0xde, 0x12, 0xf7, 0xe6, 0x13, 0xea, 0x06, 0x1c, 0xe8,
+ 0x05, 0x0a, 0x13, 0xf7, 0xfa, 0x07, 0x0a, 0xf0, 0xf8, 0xcf, 0x0c, 0x57, 0x3d,
+ 0x29, 0x2c, 0x06, 0x13, 0x7f, 0xbd, 0xe2, 0xf8, 0x09, 0x19, 0xf6, 0x13, 0x44,
+ 0x24, 0xf5, 0xed, 0xc4, 0x3c, 0xa0, 0xff, 0x22, 0x50, 0x04, 0xf7, 0xf5, 0xf0,
+ 0x03, 0x07, 0xc1, 0x04, 0x12, 0x07, 0x17, 0x08, 0x09, 0xff, 0xf3, 0xfd, 0xeb,
+ 0xff, 0xf4, 0xf9, 0xd8, 0x7f, 0xdb, 0xed, 0xec, 0x3d, 0x32, 0xf9, 0xea, 0x0b,
+ 0xe4, 0xfa, 0x28, 0xb0, 0xb8, 0xeb, 0x08, 0x3d, 0xda, 0x41, 0x34, 0xcf, 0x27,
+ 0xf3, 0x21, 0x03, 0xba, 0x17, 0xe2, 0xc6, 0xa2, 0xe1, 0x4d, 0xdd, 0xd6, 0x81,
+ 0x17, 0xfd, 0xf5, 0xf0, 0x19, 0xe9, 0x58, 0xd3, 0x30, 0xfa, 0x31, 0xe1, 0xfe,
+ 0x35, 0x6e, 0xfd, 0x6d, 0x04, 0x9e, 0xec, 0x58, 0x2f, 0xa4, 0x1d, 0x81, 0x01,
+ 0x0b, 0xf1, 0x01, 0xfb, 0xff, 0x25, 0xed, 0xc6, 0xe4, 0x5c, 0xde, 0xfb, 0xd1,
+ 0x40, 0xea, 0x7f, 0x2a, 0xe3, 0x05, 0xd8, 0xf4, 0x07, 0xf9, 0x33, 0x60, 0xdf,
+ 0x16, 0x02, 0x05, 0xf0, 0xe8, 0xe0, 0x41, 0x14, 0x01, 0x06, 0xda, 0x08, 0x0c,
+ 0x01, 0x21, 0xef, 0xdd, 0x00, 0x20, 0xf4, 0x0a, 0xed, 0xde, 0x20, 0xf2, 0xdf,
+ 0xe7, 0x0b, 0xfd, 0x06, 0xf9, 0x04, 0xe5, 0xfa, 0xf6, 0x1d, 0x0b, 0xfc, 0x22,
+ 0x7f, 0x07, 0x71, 0x02, 0x03, 0x18, 0x02, 0xd6, 0x06, 0xe4, 0x02, 0x02, 0xfe,
+ 0x1f, 0xd1, 0xf9, 0x0f, 0xfe, 0xf2, 0xf2, 0x0a, 0xe0, 0xf9, 0x11, 0xfa, 0x34,
+ 0xf5, 0xe4, 0xbd, 0xf8, 0x0c, 0x7f, 0xeb, 0xe0, 0x2f, 0xc5, 0x14, 0xd2, 0xf9,
+ 0x11, 0x09, 0xd8, 0x14, 0x34, 0xf2, 0xf3, 0xfe, 0xe8, 0xff, 0xea, 0xf2, 0x3b,
+ 0x18, 0x0b, 0xdd, 0x0d, 0xfe, 0xd0, 0x03, 0x1c, 0xe3, 0x7f, 0x18, 0xcc, 0xd5,
+ 0x23, 0x25, 0x20, 0xb8, 0x0a, 0x36, 0xef, 0x2e, 0x2c, 0x03, 0xf8, 0x03, 0xff,
+ 0xf4, 0xd6, 0xf2, 0x1b, 0x7f, 0x39, 0x1f, 0xe1, 0x1a, 0x03, 0x17, 0x02, 0xd5,
+ 0xe2, 0xff, 0xdb, 0xbf, 0x1b, 0xff, 0x09, 0xdc, 0xf5, 0x65, 0xf4, 0x12, 0x02,
+ 0xe0, 0x3a, 0x0c, 0xee, 0xd2, 0xfe, 0xf7, 0x12, 0x1b, 0x01, 0xb8, 0xe0, 0xee,
+ 0xc6, 0x1c, 0x07, 0x06, 0x9d, 0xfd, 0xcc, 0x53, 0x1c, 0xff, 0x1a, 0xe4, 0x1c,
+ 0xf2, 0xf1, 0x48, 0x21, 0x1c, 0x7f, 0x20, 0xf0, 0xe2, 0x9c, 0x0b, 0x22, 0xda,
+ 0x13, 0x41, 0x3d, 0x1b, 0xfc, 0xf5, 0xf2, 0x19, 0x09, 0x7f, 0x15, 0x5a, 0xfc,
+ 0x20, 0x3b, 0x63, 0x1a, 0xf6, 0xe2, 0x00, 0xe8, 0xed, 0xd0, 0xf4, 0xbb, 0x03,
+ 0x41, 0x2c, 0x32, 0x39, 0xf8, 0x62, 0xf7, 0xfb, 0xda, 0x16, 0x21, 0xfe, 0x35,
+ 0x2b, 0x41, 0x13, 0xd1, 0x0f, 0x78, 0x50, 0xfe, 0x04, 0x2f, 0x1e, 0xe1, 0x09,
+ 0x31, 0x0d, 0xf2, 0xf5, 0x0b, 0xee, 0x08, 0xe8, 0xf8, 0x7f, 0x95, 0xb5, 0x00,
+ 0x29, 0x04, 0x12, 0x01, 0x20, 0x42, 0x81, 0x19, 0x09, 0xeb, 0xe6, 0xe6, 0xe1,
+ 0x1a, 0xca, 0xf8, 0x01, 0xf5, 0xc9, 0xec, 0xa8, 0xe7, 0xba, 0xd2, 0x27, 0x00,
+ 0x3f, 0x22, 0xba, 0x12, 0x4b, 0xfd, 0xff, 0x04, 0x00, 0x00, 0x00, 0x20, 0x01,
+ 0x00, 0x00, 0xb2, 0x3b, 0xbe, 0xc6, 0x7f, 0xe4, 0x20, 0x29, 0xa7, 0x18, 0xe5,
+ 0xfe, 0x3c, 0xcf, 0x64, 0x43, 0x27, 0xa0, 0xd5, 0x52, 0xbb, 0x59, 0xc8, 0x39,
+ 0xcc, 0x50, 0x68, 0x54, 0xaa, 0x81, 0x05, 0x15, 0xab, 0x52, 0x9e, 0x96, 0x1f,
+ 0xae, 0x36, 0x31, 0x81, 0xd7, 0xa7, 0xe6, 0x64, 0x81, 0x7f, 0x5a, 0x5c, 0x93,
+ 0xaa, 0x64, 0xb4, 0x7f, 0xb9, 0x5b, 0xac, 0x67, 0x7f, 0x52, 0x88, 0x96, 0xb5,
+ 0x41, 0xf3, 0x33, 0xe1, 0xbf, 0xb8, 0xc5, 0x19, 0x0e, 0xb8, 0xcc, 0xcf, 0xe2,
+ 0x47, 0xaf, 0x27, 0x28, 0x33, 0xc4, 0xc8, 0x2a, 0xf0, 0x36, 0xf7, 0x2b, 0xd4,
+ 0x35, 0x21, 0x07, 0xd1, 0xe5, 0xb1, 0x2c, 0xca, 0x70, 0xbc, 0xa3, 0x6a, 0xb9,
+ 0x50, 0x53, 0xaf, 0xc1, 0xad, 0xb4, 0x65, 0x23, 0x60, 0x63, 0x3d, 0x8e, 0x9e,
+ 0x66, 0xba, 0x58, 0xa4, 0x46, 0xa6, 0x5f, 0x73, 0x71, 0xaf, 0xcd, 0xaf, 0x43,
+ 0x81, 0x7f, 0x81, 0x81, 0xfe, 0x81, 0x7f, 0x7f, 0xa7, 0x81, 0x81, 0x81, 0x7f,
+ 0x2c, 0x7c, 0x7f, 0x7f, 0x81, 0x81, 0x7f, 0x81, 0x66, 0x81, 0x7f, 0x81, 0x7f,
+ 0x7d, 0x7f, 0x81, 0xa4, 0x81, 0x7f, 0xb5, 0x37, 0xba, 0xb4, 0xad, 0xb3, 0x47,
+ 0x4a, 0xe3, 0xb2, 0xc5, 0xaf, 0x3c, 0xfe, 0x2f, 0x2a, 0x36, 0xc8, 0xcf, 0x3a,
+ 0xc6, 0x0f, 0xc2, 0x41, 0xca, 0x3d, 0x1f, 0x21, 0xcc, 0xc2, 0xc1, 0x44, 0x04,
+ 0x45, 0xdc, 0xd5, 0x23, 0xc8, 0x38, 0x49, 0xfd, 0xc0, 0xd2, 0xa9, 0x47, 0x2e,
+ 0x11, 0x28, 0x23, 0xd1, 0xc6, 0x23, 0xef, 0xf9, 0xc9, 0x18, 0xd6, 0x2d, 0x1f,
+ 0x2f, 0xdf, 0xf8, 0xa8, 0x2e, 0xab, 0x3b, 0xbb, 0xc5, 0xdf, 0xbf, 0x59, 0x63,
+ 0xfc, 0xaa, 0xc6, 0x84, 0x46, 0x59, 0x10, 0x36, 0x39, 0xd8, 0xc2, 0x32, 0xcd,
+ 0xcc, 0xb2, 0x32, 0xcc, 0x31, 0x1b, 0x46, 0xd6, 0xd7, 0xcb, 0x46, 0xa7, 0x09,
+ 0xc8, 0xe3, 0xd8, 0xe8, 0x3b, 0x23, 0x0d, 0xd3, 0xe3, 0xd3, 0xfe, 0x30, 0x0b,
+ 0x13, 0x16, 0x03, 0x02, 0x13, 0xdd, 0xd5, 0xd6, 0x19, 0xf0, 0x0b, 0x04, 0x2d,
+ 0xed, 0xd0, 0x08, 0x1f, 0x3e, 0x4c, 0xfd, 0xff, 0x04, 0x00, 0x00, 0x00, 0x80,
+ 0x00, 0x00, 0x00, 0xac, 0x6f, 0x00, 0x00, 0x6b, 0x01, 0x00, 0x00, 0xc8, 0x6b,
+ 0x00, 0x00, 0x16, 0x57, 0x00, 0x00, 0x08, 0xef, 0xff, 0xff, 0xb3, 0x6a, 0x00,
+ 0x00, 0x5d, 0x04, 0x00, 0x00, 0xef, 0xfb, 0xff, 0xff, 0x67, 0x65, 0x00, 0x00,
+ 0x6a, 0xa4, 0x00, 0x00, 0xb1, 0x56, 0x00, 0x00, 0x6b, 0x6f, 0x00, 0x00, 0xde,
+ 0xf9, 0xff, 0xff, 0xa9, 0xff, 0xff, 0xff, 0xb7, 0xe7, 0xff, 0xff, 0xe4, 0xff,
+ 0xff, 0xff, 0xd3, 0x00, 0x00, 0x00, 0x87, 0x91, 0x00, 0x00, 0x8e, 0x43, 0x00,
+ 0x00, 0x32, 0xff, 0xff, 0xff, 0xd6, 0x42, 0x00, 0x00, 0xe5, 0xfd, 0xff, 0xff,
+ 0xf1, 0xa7, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0xcf, 0x2b, 0x00, 0x00, 0x24,
+ 0xff, 0xff, 0xff, 0x0e, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xf8, 0x74,
+ 0x00, 0x00, 0x5c, 0x6c, 0x00, 0x00, 0xd0, 0x3f, 0x00, 0x00, 0xdb, 0x03, 0x00,
+ 0x00, 0xca, 0x4c, 0xfd, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+ 0xf7, 0xee, 0xf3, 0x35, 0xfa, 0xb2, 0xf7, 0x5f, 0x50, 0xfe, 0xd6, 0xfc, 0x11,
+ 0x20, 0xd5, 0x97, 0x20, 0x00, 0xe1, 0xf7, 0xb7, 0x33, 0xec, 0xf1, 0xd1, 0x13,
+ 0xfb, 0x4f, 0x7f, 0xa5, 0xfa, 0x8e, 0xe5, 0xe7, 0xfa, 0x34, 0x03, 0xf4, 0xee,
+ 0x21, 0x01, 0x95, 0x0f, 0x8b, 0x07, 0x03, 0xa3, 0xc8, 0xf1, 0xd3, 0x0e, 0xd7,
+ 0x1a, 0xeb, 0xe4, 0x0d, 0x28, 0xf5, 0xa1, 0x7f, 0x36, 0xfb, 0x10, 0x1d, 0x0e,
+ 0x7f, 0x0b, 0xf1, 0x39, 0x04, 0x1e, 0xdb, 0xb1, 0xf6, 0xd4, 0x13, 0xf3, 0x35,
+ 0xef, 0x0d, 0x2a, 0xb5, 0x0e, 0xc8, 0xf0, 0xdf, 0x25, 0x6e, 0xe2, 0xf7, 0x10,
+ 0x3c, 0xcf, 0x07, 0x0f, 0xe6, 0x45, 0xdd, 0x17, 0xef, 0x33, 0xcf, 0xe1, 0x34,
+ 0x08, 0x34, 0xf6, 0x0e, 0xfa, 0xfb, 0xfc, 0x7f, 0xf7, 0xe5, 0x1a, 0xea, 0x11,
+ 0x1b, 0xfb, 0x95, 0x17, 0xfe, 0xc7, 0xb3, 0xde, 0x22, 0xe7, 0xea, 0xdc, 0x53,
+ 0x2a, 0x12, 0xdb, 0x6c, 0x16, 0xbc, 0x01, 0x46, 0xef, 0xdc, 0x27, 0xf8, 0xbe,
+ 0x99, 0x43, 0xe8, 0x9a, 0xc0, 0x93, 0xc0, 0xfe, 0xf6, 0xc8, 0x7f, 0xfd, 0x07,
+ 0xd8, 0xe8, 0x20, 0x35, 0xe5, 0xd2, 0x71, 0xf5, 0xdf, 0xc7, 0xb0, 0x1d, 0x12,
+ 0xde, 0xef, 0x17, 0x01, 0x3a, 0x11, 0x6d, 0x04, 0x1b, 0x68, 0x7f, 0x1b, 0xce,
+ 0x1d, 0xef, 0xe8, 0xd5, 0xeb, 0x35, 0xda, 0x11, 0xb5, 0xfb, 0xf9, 0xe4, 0xe3,
+ 0x24, 0x17, 0x02, 0x20, 0xac, 0xf2, 0x48, 0x11, 0xe2, 0xfe, 0xbe, 0xd4, 0x81,
+ 0x67, 0xbd, 0x2d, 0xea, 0xe8, 0xec, 0xcf, 0xf7, 0xd9, 0x44, 0x95, 0xea, 0x01,
+ 0xd2, 0x08, 0xf5, 0x1a, 0xb5, 0x4d, 0xe1, 0x15, 0xe9, 0x01, 0xea, 0xaa, 0xda,
+ 0x1f, 0xd1, 0xf8, 0x11, 0xbd, 0x3b, 0x81, 0xdb, 0xf5, 0xfb, 0xe0, 0xf8, 0xe5,
+ 0x1e, 0xf7, 0xf7, 0x6d, 0x0d, 0xf3, 0xeb, 0x00, 0x7d, 0x2e, 0xf5, 0x20, 0xe6,
+ 0xcb, 0xf3, 0x09, 0x09, 0x13, 0x1f, 0xeb, 0xfb, 0xc0, 0x02, 0x27, 0x7f, 0xff,
+ 0x2b, 0x26, 0x27, 0xea, 0x30, 0x73, 0xbd, 0xfa, 0xc7, 0x16, 0xb0, 0x2c, 0xfd,
+ 0x20, 0xf0, 0xce, 0x1c, 0x16, 0xe7, 0xf2, 0xd9, 0x00, 0xf9, 0x19, 0xe4, 0xe5,
+ 0xf1, 0x11, 0x3b, 0xbd, 0xf0, 0x2e, 0x0c, 0x2c, 0xe3, 0xd5, 0x01, 0xf3, 0xfc,
+ 0xef, 0x7f, 0x08, 0x10, 0xf3, 0xff, 0xff, 0xf9, 0x20, 0xff, 0x09, 0x81, 0x51,
+ 0x0d, 0xc6, 0x32, 0xf5, 0x07, 0x12, 0xc4, 0xe4, 0xf4, 0x24, 0x22, 0x06, 0x1d,
+ 0xe8, 0x0b, 0xf3, 0xf5, 0x61, 0x00, 0x1b, 0x4f, 0x13, 0xd9, 0x0f, 0x16, 0x03,
+ 0x4f, 0xc6, 0x35, 0x5b, 0x38, 0xd7, 0x0d, 0xf9, 0xce, 0xd0, 0xad, 0x1b, 0xfb,
+ 0xf8, 0xd4, 0x0f, 0xf6, 0xfb, 0x13, 0x23, 0x3a, 0x52, 0x6a, 0x09, 0x81, 0xfe,
+ 0x36, 0x0d, 0xf8, 0x29, 0xc6, 0xec, 0xf8, 0xf6, 0x54, 0x31, 0x02, 0x09, 0x5d,
+ 0x7f, 0x1d, 0xed, 0xed, 0xcf, 0xe5, 0xb1, 0xe4, 0x40, 0x17, 0x90, 0xab, 0xa0,
+ 0xc9, 0x13, 0xd2, 0x3b, 0x13, 0x0a, 0x18, 0x55, 0xfc, 0x6b, 0x95, 0x2a, 0xfb,
+ 0xa0, 0x16, 0x0b, 0xa7, 0x01, 0x09, 0x1e, 0x0f, 0x22, 0x61, 0x24, 0x51, 0xdc,
+ 0x27, 0x38, 0xdc, 0xd8, 0xdf, 0xce, 0x56, 0xe3, 0xf1, 0x7f, 0x66, 0xbb, 0x31,
+ 0xf8, 0xba, 0xe9, 0x02, 0xbb, 0x45, 0x0c, 0x23, 0x32, 0xef, 0x0e, 0x1a, 0xd6,
+ 0x00, 0xf0, 0xd7, 0xb9, 0xe0, 0xd7, 0x07, 0xd6, 0xf9, 0x25, 0xee, 0xe8, 0x43,
+ 0x35, 0xe0, 0x7f, 0x4f, 0xde, 0xf0, 0xe3, 0xda, 0x32, 0xfe, 0xa4, 0x23, 0x0c,
+ 0xf7, 0xd2, 0x04, 0xf4, 0x0d, 0xe3, 0x10, 0xef, 0xd9, 0xe9, 0xc3, 0xf8, 0xe2,
+ 0xf5, 0xd1, 0xf9, 0xe7, 0x00, 0xdb, 0x09, 0xbd, 0x2d, 0x16, 0x0f, 0x05, 0xf4,
+ 0x7f, 0x04, 0xe4, 0x09, 0xf5, 0xf8, 0xda, 0x0f, 0xd9, 0xef, 0x10, 0x0c, 0x12,
+ 0xc4, 0xec, 0xa7, 0x16, 0xb6, 0x00, 0x3f, 0x6c, 0xf2, 0x11, 0xab, 0x81, 0x14,
+ 0xc3, 0x52, 0xa4, 0x09, 0x93, 0x36, 0x0b, 0xc8, 0xa9, 0xf4, 0xf0, 0xe3, 0xf4,
+ 0x00, 0x20, 0x11, 0xec, 0x71, 0x15, 0x0b, 0x28, 0x13, 0xfd, 0xc4, 0x11, 0x7f,
+ 0x0d, 0x14, 0xad, 0x98, 0xf5, 0xdc, 0x43, 0x0b, 0xb6, 0xf4, 0xe1, 0xe9, 0xb8,
+ 0xdf, 0x82, 0xb4, 0x17, 0xd9, 0xd6, 0x06, 0x28, 0xfa, 0x1d, 0x46, 0x98, 0x28,
+ 0x7f, 0x34, 0x47, 0x34, 0x06, 0x53, 0xfb, 0xeb, 0x25, 0x23, 0x51, 0xea, 0x16,
+ 0xc8, 0xf9, 0xfc, 0x14, 0xf5, 0x57, 0x1c, 0x46, 0x60, 0xda, 0x0f, 0x39, 0xc2,
+ 0x9a, 0xc3, 0xa9, 0x1d, 0xda, 0x68, 0xe6, 0xdc, 0xec, 0x08, 0xc6, 0x9a, 0x3d,
+ 0x07, 0x1c, 0xd7, 0xf0, 0xfc, 0x7f, 0x43, 0x54, 0x31, 0x09, 0x6e, 0x1d, 0xd3,
+ 0x5e, 0x22, 0xb7, 0xda, 0x46, 0x1a, 0x55, 0x14, 0xf4, 0x0a, 0x3f, 0xdf, 0xf6,
+ 0x24, 0xd7, 0x00, 0x01, 0x0a, 0x4a, 0xed, 0x81, 0x36, 0x27, 0x06, 0x5f, 0xf2,
+ 0x01, 0xf2, 0x0d, 0xac, 0xf0, 0xf2, 0x12, 0xe2, 0xeb, 0xcd, 0xb4, 0xdf, 0x36,
+ 0xc6, 0xd1, 0x47, 0xe2, 0xe3, 0xe7, 0xf6, 0x7f, 0x04, 0x0d, 0xef, 0x51, 0xe0,
+ 0x0c, 0xdf, 0x14, 0xf8, 0xad, 0xfc, 0x17, 0xf8, 0xbd, 0xe1, 0x49, 0xf1, 0x2a,
+ 0x07, 0xe4, 0xf7, 0xf3, 0x05, 0x07, 0xe7, 0x4c, 0x55, 0xef, 0x10, 0x21, 0x05,
+ 0x1f, 0xdf, 0xfa, 0x72, 0xf8, 0xd8, 0x33, 0xf3, 0xc4, 0x08, 0x19, 0x59, 0xe3,
+ 0xfb, 0x14, 0x33, 0xff, 0x7f, 0xe5, 0x1a, 0x08, 0xd3, 0xca, 0x3b, 0xdd, 0x0f,
+ 0x22, 0xd1, 0x28, 0x0f, 0x06, 0xf3, 0xd6, 0x14, 0x12, 0x3b, 0x24, 0x7f, 0xab,
+ 0xd6, 0xf2, 0xef, 0xd2, 0xb9, 0x41, 0x16, 0xfc, 0xd8, 0xfe, 0xfa, 0xe0, 0x11,
+ 0x30, 0x4c, 0x34, 0xff, 0xf8, 0x1d, 0x47, 0x7f, 0xe0, 0xee, 0xd6, 0x20, 0xe0,
+ 0xbb, 0xee, 0x3c, 0x15, 0xd8, 0xcd, 0x04, 0x17, 0x1b, 0xbd, 0x4c, 0x39, 0x47,
+ 0x50, 0xcb, 0xe2, 0xfa, 0xd0, 0x28, 0xf3, 0xb9, 0xcb, 0xd4, 0x1c, 0xe8, 0x7e,
+ 0x60, 0xcb, 0xc7, 0xd3, 0xdf, 0x3c, 0x06, 0xff, 0xaf, 0xcc, 0x02, 0x4a, 0xe4,
+ 0x1e, 0xd9, 0xe2, 0x81, 0x2e, 0xdf, 0x24, 0xeb, 0x50, 0xd3, 0x00, 0xb3, 0xd1,
+ 0xc5, 0x20, 0xda, 0x18, 0x13, 0x37, 0x7f, 0x1e, 0x12, 0x12, 0x14, 0xdf, 0x03,
+ 0xed, 0x31, 0xc1, 0xd4, 0x29, 0xc1, 0xdf, 0xeb, 0xd1, 0xea, 0x1b, 0x1a, 0x01,
+ 0xf4, 0x08, 0x03, 0xed, 0xf7, 0x23, 0xea, 0x16, 0xf8, 0xf8, 0xfb, 0x08, 0xc9,
+ 0xc7, 0xf8, 0x12, 0x25, 0x0b, 0x0f, 0xf5, 0x7f, 0x19, 0x1f, 0xd8, 0xaf, 0x19,
+ 0x06, 0x12, 0xff, 0x21, 0xe3, 0xfd, 0xee, 0xf8, 0xed, 0x00, 0xea, 0x30, 0x11,
+ 0xfb, 0x41, 0x41, 0x04, 0xf5, 0xad, 0xe3, 0xe4, 0x11, 0x33, 0x05, 0xd5, 0xfe,
+ 0x5a, 0x59, 0x1a, 0x0a, 0xdd, 0x72, 0x20, 0xbc, 0x07, 0xe3, 0xf5, 0xf6, 0xd7,
+ 0x2e, 0x7f, 0x0c, 0xba, 0xe6, 0xb0, 0x15, 0x32, 0x12, 0x8e, 0xee, 0xc4, 0x16,
+ 0x29, 0xf5, 0xc7, 0x3a, 0xd3, 0x7f, 0xfd, 0xea, 0x74, 0xbd, 0xbf, 0xe8, 0xcf,
+ 0x00, 0x1c, 0xff, 0xf9, 0xde, 0x7d, 0xfe, 0xfe, 0xfa, 0xdd, 0xee, 0xd4, 0xa6,
+ 0x24, 0xc6, 0xe9, 0x99, 0x81, 0xfa, 0x4d, 0xa9, 0x4e, 0x4f, 0xd7, 0x30, 0xe8,
+ 0xe4, 0x19, 0x00, 0x0f, 0x2a, 0x1e, 0x08, 0xa3, 0x05, 0xb9, 0x10, 0x59, 0x54,
+ 0xf2, 0xdc, 0xaf, 0xe0, 0x17, 0x7f, 0xba, 0xfd, 0x13, 0xe6, 0x2e, 0xdd, 0xce,
+ 0x13, 0xed, 0xd4, 0xef, 0x1a, 0xe8, 0xf4, 0x17, 0x3a, 0x01, 0x4c, 0xe8, 0xf7,
+ 0x77, 0xc0, 0x15, 0xbb, 0x04, 0x51, 0x06, 0xe6, 0xf1, 0xee, 0xfa, 0x18, 0x3e,
+ 0x24, 0xd3, 0x07, 0xcd, 0xd0, 0xf1, 0xf3, 0x21, 0xd9, 0x0f, 0xdf, 0x9e, 0x16,
+ 0xea, 0xde, 0x31, 0x32, 0xed, 0xf4, 0x03, 0x1a, 0xd2, 0x7f, 0xdc, 0x0b, 0xee,
+ 0x1c, 0x0c, 0x0d, 0x22, 0xdd, 0xbc, 0x96, 0x46, 0xde, 0xc5, 0x4c, 0x22, 0xbc,
+ 0x0e, 0x57, 0x1c, 0x23, 0x74, 0xf8, 0x81, 0x87, 0x22, 0x2a, 0x28, 0x31, 0xc8,
+ 0xdb, 0x12, 0x47, 0x13, 0xf1, 0x35, 0x37, 0xb7, 0xd6, 0xb7, 0x15, 0x01, 0xf2,
+ 0x0d, 0x60, 0xdf, 0x04, 0x06, 0x27, 0x77, 0x04, 0x5f, 0xf5, 0xcd, 0xea, 0xf3,
+ 0xb1, 0x56, 0xae, 0x81, 0xef, 0xeb, 0x12, 0x1a, 0x74, 0x4a, 0x25, 0x14, 0x8e,
+ 0x46, 0x22, 0x13, 0xfc, 0x23, 0xee, 0xf1, 0x0c, 0xd2, 0xf0, 0xfb, 0xf3, 0xeb,
+ 0xf4, 0x09, 0xdf, 0xcc, 0xdf, 0xf9, 0x2e, 0x03, 0x7f, 0x21, 0xf0, 0x1f, 0xfc,
+ 0x9a, 0x2f, 0xd9, 0x03, 0xfa, 0x0a, 0xbf, 0x56, 0x1b, 0x0e, 0xfd, 0xda, 0xf8,
+ 0x19, 0xb6, 0x36, 0xdc, 0xa4, 0xda, 0xe2, 0xf1, 0x33, 0xe8, 0xa1, 0x29, 0xe9,
+ 0xf8, 0xcd, 0x1e, 0x6a, 0x7f, 0x0a, 0xfe, 0xee, 0x35, 0xed, 0x51, 0x0a, 0xec,
+ 0xf2, 0xed, 0xfc, 0xf9, 0xe4, 0xff, 0x19, 0x1f, 0x12, 0xb0, 0x24, 0xfb, 0xe6,
+ 0xe4, 0x03, 0x24, 0xbc, 0x01, 0xf3, 0xdd, 0xea, 0x03, 0xd5, 0x1a, 0x0c, 0x10,
+ 0xd4, 0x4c, 0x02, 0x7f, 0xc3, 0x05, 0x21, 0xdd, 0x00, 0x1d, 0xc9, 0x01, 0x02,
+ 0x14, 0xfa, 0x21, 0x4c, 0xeb, 0xa4, 0xe0, 0x20, 0x81, 0x12, 0x45, 0x8f, 0x11,
+ 0xc2, 0xf0, 0xe9, 0x23, 0xb2, 0x01, 0x12, 0x45, 0xf6, 0x09, 0x82, 0x2b, 0xec,
+ 0x2e, 0x27, 0x8d, 0x2f, 0x93, 0xb8, 0x3c, 0xa5, 0x45, 0x41, 0xdc, 0x5f, 0x1a,
+ 0x1f, 0xd3, 0x7f, 0x66, 0xdd, 0xfe, 0xfa, 0x37, 0x3e, 0xdb, 0x04, 0xd7, 0xfa,
+ 0xdf, 0xc2, 0x99, 0x17, 0x0a, 0xba, 0x55, 0xdd, 0xe2, 0x6e, 0xc0, 0xce, 0xd5,
+ 0xbf, 0x13, 0xc3, 0xbb, 0x4f, 0xb3, 0xfb, 0xb8, 0xbc, 0x0b, 0x42, 0x2d, 0x53,
+ 0x23, 0x92, 0x0a, 0xc3, 0xe6, 0xb7, 0xaf, 0xf1, 0x25, 0x32, 0x0e, 0x81, 0x38,
+ 0xf1, 0x0c, 0xff, 0xd0, 0x46, 0x33, 0xc4, 0xf7, 0xb8, 0xb2, 0xfb, 0x0e, 0x0f,
+ 0xf2, 0xd7, 0x5e, 0xcc, 0x11, 0xc0, 0x1c, 0xeb, 0x09, 0x7f, 0xf8, 0xf6, 0xf3,
+ 0xff, 0x2c, 0x0d, 0xc7, 0xf3, 0x27, 0xd0, 0x11, 0x2e, 0x47, 0x4b, 0xba, 0xd7,
+ 0x05, 0xe5, 0xfd, 0x59, 0xe5, 0x1d, 0xdc, 0x19, 0xd0, 0x2d, 0xb9, 0xa4, 0xe1,
+ 0xc4, 0x97, 0x28, 0xee, 0x0f, 0xf1, 0x7f, 0xdb, 0x07, 0xf3, 0xdf, 0xc4, 0xcd,
+ 0x34, 0xfa, 0xce, 0xb3, 0xd8, 0x13, 0xe4, 0xad, 0xef, 0x7f, 0xe6, 0x1c, 0x44,
+ 0xea, 0xe2, 0x19, 0x71, 0x93, 0xd5, 0x5a, 0xe2, 0x82, 0xb5, 0xac, 0x8d, 0x09,
+ 0xef, 0xbf, 0xdd, 0xef, 0xfd, 0xd9, 0xe3, 0xcf, 0xfc, 0xe0, 0xf1, 0x42, 0xfa,
+ 0x4a, 0xe9, 0x0c, 0xf3, 0x14, 0x02, 0x7f, 0x07, 0xc0, 0xf6, 0x06, 0xdc, 0xd8,
+ 0x23, 0xef, 0xfb, 0x15, 0xd6, 0xe0, 0xd6, 0xf6, 0xdf, 0x24, 0xed, 0xe6, 0xd6,
+ 0x2a, 0x08, 0x2e, 0xed, 0xf9, 0x61, 0xbd, 0xf3, 0x03, 0x23, 0xf6, 0x0e, 0xb2,
+ 0xea, 0x81, 0xfb, 0xcc, 0xe1, 0xe8, 0x9c, 0xe4, 0xf5, 0xfc, 0xe3, 0xf7, 0x20,
+ 0xd8, 0xe2, 0x01, 0xa7, 0x2f, 0x8a, 0x15, 0xd4, 0x3f, 0x4c, 0x81, 0x8c, 0x97,
+ 0xd7, 0xdb, 0x3f, 0x52, 0x84, 0xee, 0xfa, 0xd4, 0x04, 0x14, 0x07, 0xca, 0xc7,
+ 0xec, 0xe9, 0xce, 0xd8, 0x3b, 0x04, 0xee, 0x92, 0xe9, 0x04, 0xd2, 0x40, 0x66,
+ 0xcd, 0xc8, 0xff, 0xe5, 0xf3, 0xad, 0xbf, 0x46, 0xc4, 0xf4, 0x47, 0xf6, 0x00,
+ 0x58, 0x7f, 0xd9, 0xe8, 0x25, 0xf2, 0x04, 0xe4, 0xc1, 0xc3, 0xff, 0x10, 0xe8,
+ 0x55, 0x07, 0x2b, 0xf6, 0x13, 0x3b, 0xf9, 0xe9, 0xfd, 0x21, 0xd4, 0x1d, 0xf8,
+ 0x04, 0xcd, 0xff, 0x7f, 0x1d, 0x14, 0x01, 0x14, 0x1f, 0x0c, 0x5d, 0x17, 0xa9,
+ 0x49, 0x08, 0xfa, 0x16, 0x03, 0x50, 0x19, 0x04, 0xdb, 0xde, 0x31, 0x2c, 0xe3,
+ 0xfd, 0x1c, 0x18, 0x00, 0xf2, 0x13, 0x2f, 0xf5, 0xef, 0xb4, 0xde, 0xdb, 0x81,
+ 0x14, 0xe9, 0xdf, 0xeb, 0xf2, 0xf7, 0xe4, 0xfe, 0xfc, 0xec, 0xf7, 0x04, 0xf5,
+ 0x27, 0xd2, 0x7f, 0x0d, 0x1c, 0x2e, 0x0d, 0xee, 0xda, 0xfc, 0xec, 0x12, 0xfc,
+ 0x22, 0xf2, 0xf1, 0xe1, 0xde, 0xdf, 0x0c, 0xe9, 0xce, 0xf5, 0xe6, 0xfe, 0xe8,
+ 0xc2, 0x0c, 0x15, 0xeb, 0x07, 0x09, 0xf5, 0xc2, 0x1d, 0x07, 0x21, 0x10, 0xee,
+ 0x29, 0xc1, 0x00, 0x62, 0xf3, 0xe5, 0xd1, 0x06, 0xf3, 0x13, 0x7f, 0x2a, 0x12,
+ 0x01, 0xe5, 0x00, 0xf0, 0xf5, 0x06, 0x09, 0xc3, 0xb9, 0xd5, 0x03, 0x0e, 0xf9,
+ 0x01, 0x39, 0x0d, 0x10, 0x05, 0x46, 0x7f, 0xc6, 0xee, 0x25, 0xe3, 0x4d, 0xeb,
+ 0xfd, 0xf4, 0x09, 0x28, 0xb0, 0xea, 0xb0, 0xdf, 0xd4, 0x03, 0x04, 0xed, 0xdf,
+ 0xe0, 0x01, 0x18, 0xdd, 0x08, 0xfa, 0x14, 0x08, 0xf4, 0xff, 0x1e, 0xc8, 0x7f,
+ 0x1c, 0xdc, 0x02, 0x1b, 0xbd, 0x46, 0xea, 0x10, 0x1a, 0x2d, 0x0b, 0x21, 0x08,
+ 0x1d, 0x10, 0xaf, 0xc3, 0x2c, 0xd8, 0xc2, 0x1d, 0x03, 0xcf, 0xe8, 0x17, 0x20,
+ 0x09, 0xe5, 0x26, 0x3d, 0x1a, 0xdc, 0xf4, 0xfd, 0xcc, 0xdc, 0xb1, 0xc9, 0x02,
+ 0xff, 0x12, 0xda, 0x36, 0xd2, 0xcc, 0x01, 0xfe, 0x20, 0x7f, 0x11, 0x21, 0x0a,
+ 0x6c, 0xef, 0x1b, 0xd9, 0x20, 0x19, 0x18, 0x05, 0x23, 0x0d, 0xbe, 0x3c, 0xf6,
+ 0xcc, 0xec, 0xc4, 0xd6, 0xd5, 0xd0, 0x81, 0xd2, 0xd4, 0x37, 0xca, 0x1d, 0xc3,
+ 0xd4, 0x0e, 0x23, 0xee, 0x4f, 0xd4, 0x09, 0xe1, 0x92, 0xfc, 0xf4, 0x0f, 0x18,
+ 0xfc, 0xf4, 0x07, 0x28, 0x3a, 0xfd, 0xee, 0xd9, 0xc8, 0x02, 0xb7, 0x05, 0x1a,
+ 0xd7, 0x2c, 0xb8, 0xd5, 0x52, 0x1c, 0xc7, 0x1a, 0xe0, 0x01, 0x81, 0xe1, 0xd9,
+ 0x3c, 0xdb, 0xde, 0x10, 0x2d, 0xd2, 0xed, 0x00, 0xfe, 0xf9, 0xec, 0xec, 0xf6,
+ 0xa6, 0x01, 0x1f, 0x11, 0x03, 0x81, 0xde, 0x4d, 0xe3, 0x18, 0x34, 0xe0, 0xe9,
+ 0x14, 0x0c, 0xfa, 0xdb, 0x0e, 0xe1, 0x0a, 0xf6, 0xe2, 0xb9, 0xb2, 0x45, 0x5b,
+ 0xa8, 0x98, 0x2a, 0x43, 0x81, 0x54, 0x84, 0xd9, 0x06, 0xdf, 0x05, 0xec, 0xc9,
+ 0xc6, 0xd8, 0xd0, 0x3f, 0x24, 0x5e, 0xeb, 0xf9, 0x01, 0x0c, 0xa4, 0xa1, 0x12,
+ 0xd3, 0xd6, 0x3f, 0x3b, 0x01, 0x03, 0xdd, 0xf6, 0xc7, 0xc0, 0xdf, 0x01, 0xf1,
+ 0xfe, 0xeb, 0x28, 0x1d, 0xf1, 0x07, 0x3c, 0xc6, 0x16, 0x5c, 0x7f, 0xe3, 0x1f,
+ 0x26, 0xf8, 0xd6, 0x33, 0xe7, 0x6f, 0xe7, 0x9a, 0xbb, 0xe8, 0xf6, 0x01, 0xcc,
+ 0xf8, 0x03, 0xcd, 0x1c, 0x16, 0xda, 0xe1, 0xed, 0x17, 0x27, 0xc3, 0x2b, 0x26,
+ 0xf8, 0x18, 0xf6, 0x02, 0xf5, 0xe6, 0xfa, 0x09, 0xf5, 0xeb, 0x26, 0x81, 0x27,
+ 0xf2, 0xe2, 0x00, 0x0f, 0xe6, 0xce, 0xef, 0xf0, 0xfb, 0x25, 0x18, 0xe0, 0xee,
+ 0xf1, 0x7f, 0x1e, 0x11, 0xd9, 0xd8, 0xfa, 0x15, 0xd3, 0x02, 0xee, 0xfc, 0xe8,
+ 0x2d, 0x06, 0x0f, 0x4f, 0x02, 0xe9, 0xf6, 0x04, 0x0d, 0xdd, 0xed, 0x05, 0xe3,
+ 0xe7, 0xca, 0x02, 0xfa, 0xe8, 0x22, 0x1b, 0x55, 0xf0, 0xc9, 0xe2, 0x0f, 0x0e,
+ 0xf1, 0xa2, 0xc1, 0xbd, 0xcf, 0x16, 0xc9, 0x7f, 0x24, 0xfc, 0xf1, 0xda, 0x18,
+ 0x10, 0x18, 0xfa, 0x11, 0x33, 0x03, 0xdc, 0xe6, 0xe1, 0x1b, 0xa2, 0xd5, 0x23,
+ 0xdb, 0xf6, 0xdf, 0xcf, 0x24, 0xff, 0xdf, 0x7f, 0x16, 0xd3, 0xf7, 0xf5, 0xd0,
+ 0xb0, 0x05, 0x0d, 0x0b, 0x15, 0xb2, 0xed, 0xd6, 0x54, 0xfd, 0xff, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x2f, 0xe7, 0xff, 0xff, 0x82, 0x23, 0x00,
+ 0x00, 0xe2, 0xff, 0xff, 0xff, 0x05, 0xfc, 0xff, 0xff, 0x10, 0xfe, 0xff, 0xff,
+ 0xcb, 0x05, 0x00, 0x00, 0x3c, 0x2d, 0x00, 0x00, 0x97, 0x48, 0x00, 0x00, 0xb1,
+ 0xfb, 0xff, 0xff, 0x0d, 0xfc, 0xff, 0xff, 0xc7, 0xfe, 0xff, 0xff, 0x9c, 0xfa,
+ 0xff, 0xff, 0x73, 0xff, 0xff, 0xff, 0x5d, 0xf4, 0xff, 0xff, 0xe8, 0xfb, 0xff,
+ 0xff, 0xe8, 0xfc, 0xff, 0xff, 0x06, 0x00, 0x00, 0x00, 0x68, 0x30, 0x00, 0x00,
+ 0x88, 0xfc, 0xff, 0xff, 0x88, 0x3f, 0x00, 0x00, 0x2f, 0x35, 0x00, 0x00, 0x29,
+ 0x2b, 0x00, 0x00, 0x37, 0xff, 0xff, 0xff, 0xf2, 0x27, 0x00, 0x00, 0xae, 0xf3,
+ 0xff, 0xff, 0x8c, 0xfd, 0xff, 0xff, 0xdf, 0x16, 0x00, 0x00, 0x5d, 0x42, 0x00,
+ 0x00, 0x87, 0xec, 0xff, 0xff, 0xb2, 0x29, 0x00, 0x00, 0x7d, 0x23, 0x00, 0x00,
+ 0x5e, 0xfb, 0xff, 0xff, 0x31, 0xfb, 0xff, 0xff, 0x11, 0x3d, 0x00, 0x00, 0x69,
+ 0x05, 0x00, 0x00, 0xd5, 0x41, 0x00, 0x00, 0x35, 0xff, 0xff, 0xff, 0xca, 0x0c,
+ 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x19, 0xe9, 0xff,
+ 0xff, 0xc0, 0xf7, 0xff, 0xff, 0x11, 0x07, 0x00, 0x00, 0x05, 0xfe, 0xff, 0xff,
+ 0x3c, 0x34, 0x00, 0x00, 0x48, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x58,
+ 0x4a, 0x00, 0x00, 0xe3, 0xf2, 0xff, 0xff, 0x61, 0xf7, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf2, 0xf4, 0xff, 0xff, 0xd6, 0xff, 0xff, 0xff, 0x66, 0xef, 0xff,
+ 0xff, 0x7b, 0x3c, 0x00, 0x00, 0xa2, 0x2e, 0x00, 0x00, 0xb3, 0x12, 0x00, 0x00,
+ 0x59, 0x1f, 0x00, 0x00, 0x3f, 0x33, 0x00, 0x00, 0x3c, 0xfe, 0xff, 0xff, 0x1c,
+ 0x15, 0x00, 0x00, 0x14, 0x34, 0x00, 0x00, 0x09, 0x26, 0x00, 0x00, 0x64, 0x20,
+ 0x00, 0x00, 0xe2, 0x55, 0xfd, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
+ 0x00, 0xf3, 0x32, 0x0b, 0x24, 0xff, 0x39, 0x14, 0xfe, 0x1c, 0x2f, 0xe1, 0x1e,
+ 0x0b, 0xd4, 0xb6, 0xcf, 0x31, 0xf6, 0x7f, 0xec, 0x48, 0xd7, 0x4a, 0xdd, 0x34,
+ 0x48, 0xe2, 0xcb, 0x26, 0x1f, 0x01, 0xbb, 0xe2, 0x1a, 0x1e, 0xd3, 0xfd, 0xc7,
+ 0xa4, 0xe3, 0x10, 0x12, 0xdf, 0x45, 0xf6, 0xe0, 0x29, 0xe0, 0x71, 0xa6, 0x03,
+ 0x18, 0xb5, 0x21, 0xac, 0xf5, 0x12, 0x1e, 0x0e, 0x00, 0xf1, 0x0b, 0x0d, 0x25,
+ 0x7f, 0xe0, 0x2d, 0x0b, 0xc3, 0xf7, 0xd3, 0x48, 0x06, 0x07, 0xda, 0x09, 0xf3,
+ 0xc9, 0xba, 0x10, 0xcf, 0x00, 0xfc, 0x1c, 0x13, 0x1e, 0x08, 0x47, 0xe2, 0xd3,
+ 0xee, 0x11, 0x3a, 0xbd, 0x10, 0x43, 0xd7, 0x5d, 0x11, 0x15, 0xe7, 0x0d, 0x17,
+ 0xf9, 0x17, 0x23, 0x18, 0xf1, 0x1e, 0xfd, 0xe2, 0xcc, 0xf6, 0xf6, 0x1c, 0x01,
+ 0x26, 0xec, 0xf0, 0xec, 0xeb, 0xe2, 0x56, 0xf5, 0x21, 0x00, 0xf6, 0xc5, 0xf3,
+ 0x03, 0xf2, 0x19, 0xf4, 0x01, 0x0f, 0x31, 0xdc, 0xf4, 0x01, 0xdb, 0x3a, 0x81,
+ 0xd6, 0x17, 0x79, 0xec, 0xee, 0xfd, 0xe7, 0xe8, 0xfa, 0xf5, 0x06, 0xf7, 0x16,
+ 0x37, 0x04, 0xed, 0x1f, 0x21, 0xbd, 0x24, 0xf3, 0x44, 0xe6, 0x0d, 0x09, 0x24,
+ 0x01, 0xdc, 0x1a, 0x2a, 0xe3, 0xef, 0xee, 0x38, 0x10, 0x25, 0xed, 0x02, 0xe7,
+ 0x11, 0x08, 0xfd, 0xf1, 0x18, 0xf5, 0xe3, 0x26, 0x14, 0x2d, 0xf0, 0xe8, 0xfb,
+ 0x21, 0xff, 0x02, 0xf0, 0xf0, 0xfc, 0xe4, 0x07, 0x02, 0x1f, 0x17, 0xfd, 0x15,
+ 0x29, 0xd9, 0x1a, 0x16, 0x09, 0x09, 0x1f, 0x24, 0x19, 0xe8, 0x81, 0xed, 0xcd,
+ 0x29, 0x34, 0x12, 0xfb, 0x40, 0xd8, 0x11, 0x07, 0xd6, 0xf3, 0xfa, 0x06, 0xfe,
+ 0x3d, 0x2c, 0xdc, 0x1f, 0xee, 0xdc, 0x12, 0x38, 0x2f, 0x2a, 0xee, 0x02, 0xf5,
+ 0x05, 0x2e, 0x0d, 0x20, 0xf6, 0x0c, 0xe2, 0x20, 0x14, 0x00, 0xce, 0x12, 0xf3,
+ 0x1f, 0xd8, 0xc5, 0xce, 0x34, 0xfb, 0xe7, 0x0d, 0x1d, 0xa0, 0xe5, 0x4b, 0xf0,
+ 0x0c, 0x3c, 0xdf, 0x39, 0xfd, 0x28, 0x04, 0x0a, 0xff, 0x0b, 0x43, 0xf7, 0x40,
+ 0xe2, 0x17, 0x24, 0x48, 0xc6, 0x2f, 0xbd, 0x01, 0xdf, 0xe5, 0xee, 0x12, 0x52,
+ 0xc7, 0xab, 0x0b, 0x0d, 0x2b, 0x1a, 0xf2, 0x03, 0xd8, 0xe7, 0xfe, 0x27, 0xf4,
+ 0x2d, 0xfa, 0xc7, 0x25, 0x7f, 0xe7, 0x01, 0x2b, 0x9a, 0xfb, 0x5d, 0x32, 0xed,
+ 0xf9, 0xff, 0x7f, 0xf9, 0xf0, 0x2d, 0xd4, 0x07, 0xe5, 0x06, 0x15, 0x69, 0xf5,
+ 0xe1, 0xfe, 0x98, 0x95, 0x85, 0x75, 0xfc, 0xe9, 0x29, 0x7c, 0xe6, 0x0b, 0xd5,
+ 0x14, 0xfa, 0xd4, 0x12, 0x61, 0x39, 0xe9, 0x10, 0x24, 0x19, 0xcc, 0x1c, 0xf3,
+ 0xee, 0xa7, 0x59, 0xf1, 0x49, 0xe8, 0x15, 0xe5, 0x0a, 0x12, 0xca, 0x9f, 0x0a,
+ 0x0f, 0x23, 0x16, 0x24, 0xc3, 0x00, 0x17, 0xe4, 0xd0, 0xc4, 0x0f, 0x16, 0xf7,
+ 0xda, 0x13, 0xdf, 0x2e, 0xf4, 0x1e, 0xe7, 0xf3, 0x12, 0xe0, 0x27, 0xf4, 0xe8,
+ 0xff, 0x1c, 0x06, 0xf0, 0x04, 0x03, 0xf8, 0x7f, 0xe7, 0x51, 0xe3, 0xee, 0x08,
+ 0x20, 0xca, 0x05, 0xd1, 0xfd, 0xf0, 0xfa, 0xdb, 0xae, 0xca, 0x2a, 0x28, 0x0f,
+ 0x00, 0x92, 0x35, 0x2c, 0xe2, 0xfe, 0x02, 0xb0, 0x0d, 0x05, 0xce, 0xe7, 0xdb,
+ 0x02, 0xcf, 0xd9, 0xf1, 0xf9, 0x07, 0xf4, 0xe5, 0x1b, 0x40, 0xed, 0xd9, 0x21,
+ 0xce, 0xa6, 0xd3, 0x22, 0xf0, 0xf2, 0x1a, 0x40, 0xf7, 0x49, 0xdf, 0x17, 0xe3,
+ 0x28, 0x0a, 0x0f, 0xfa, 0xc6, 0xd0, 0x97, 0x12, 0x1d, 0xae, 0xd4, 0x37, 0x5e,
+ 0xa2, 0x03, 0x53, 0xc6, 0xdf, 0x9f, 0x3e, 0xe8, 0xb5, 0xf4, 0x14, 0x49, 0xf7,
+ 0x01, 0xe6, 0xec, 0xc4, 0x7f, 0x02, 0xee, 0x44, 0x4c, 0x2c, 0x25, 0xe5, 0xd2,
+ 0x20, 0x16, 0xeb, 0xee, 0xe1, 0xc3, 0x42, 0xde, 0x09, 0x27, 0xec, 0xf4, 0xf2,
+ 0xf0, 0x22, 0x13, 0x03, 0xfb, 0xd5, 0xca, 0x27, 0x28, 0xc9, 0x29, 0xf4, 0x06,
+ 0xf0, 0x11, 0xe4, 0xed, 0x01, 0x21, 0x06, 0xfe, 0xe4, 0xfa, 0x0c, 0x1f, 0xb6,
+ 0xf5, 0xda, 0x03, 0x02, 0x00, 0x05, 0xfc, 0xf4, 0x7f, 0x1e, 0xff, 0x0b, 0xfd,
+ 0xe4, 0xb8, 0xde, 0xbc, 0xe0, 0x4a, 0x2e, 0x01, 0xbf, 0x15, 0x20, 0x10, 0x20,
+ 0x11, 0x20, 0x1b, 0x28, 0xb9, 0x0b, 0xe9, 0xf1, 0xcf, 0x2c, 0x00, 0xdc, 0x4a,
+ 0x3e, 0x33, 0x0b, 0xdf, 0xa4, 0xe6, 0x14, 0xf4, 0xc4, 0xd1, 0xd4, 0x17, 0xec,
+ 0x16, 0x06, 0xda, 0xca, 0x7f, 0x15, 0xf9, 0xc8, 0xba, 0x33, 0xee, 0xae, 0xfc,
+ 0xe8, 0xbb, 0xfc, 0xe6, 0x24, 0x12, 0xe6, 0x05, 0xf5, 0xfb, 0x05, 0x0e, 0xc5,
+ 0x32, 0xe8, 0x04, 0xd1, 0x0a, 0xf2, 0xbc, 0x1b, 0x14, 0x15, 0xc5, 0xf9, 0xce,
+ 0xfd, 0x38, 0xfd, 0xeb, 0xe6, 0x7f, 0x23, 0x45, 0x08, 0xeb, 0xee, 0x3e, 0x26,
+ 0xf6, 0xd9, 0xbb, 0x0a, 0xa6, 0x1e, 0xd3, 0xea, 0x08, 0xf6, 0xcc, 0x0c, 0xe9,
+ 0x39, 0xea, 0x08, 0xe4, 0x04, 0x13, 0xfc, 0xf5, 0xe8, 0xe4, 0x05, 0xeb, 0x91,
+ 0xea, 0x19, 0x3c, 0xd0, 0xdd, 0xe0, 0x13, 0xfb, 0xf0, 0xe6, 0xc8, 0x3e, 0xef,
+ 0xeb, 0x13, 0x42, 0xc2, 0xf0, 0xdf, 0xe1, 0xe0, 0x0f, 0xf8, 0xfa, 0xc8, 0xc5,
+ 0xfb, 0x2a, 0x14, 0xee, 0x36, 0xdd, 0x0d, 0x01, 0xd2, 0xe5, 0xb1, 0x11, 0x09,
+ 0x59, 0x03, 0x16, 0xeb, 0x81, 0x24, 0xb4, 0xd6, 0x27, 0x02, 0x1d, 0x29, 0x66,
+ 0x0f, 0xa9, 0x35, 0x36, 0x99, 0x2a, 0x33, 0xfa, 0xce, 0xd7, 0xe1, 0xff, 0x06,
+ 0xfa, 0x2b, 0x05, 0xe9, 0xc4, 0xdf, 0x19, 0xee, 0xd1, 0xca, 0x0a, 0x44, 0x9e,
+ 0x09, 0xd4, 0x5d, 0x26, 0x26, 0xec, 0x6a, 0x32, 0x00, 0xf7, 0x59, 0xf9, 0x37,
+ 0xfb, 0xc9, 0x93, 0xe0, 0xf6, 0x03, 0xdd, 0x3f, 0x17, 0xf6, 0x10, 0xed, 0x00,
+ 0xcd, 0xf6, 0x90, 0xcb, 0x12, 0xe3, 0x3f, 0x01, 0x7f, 0x20, 0xfa, 0xfc, 0x15,
+ 0x02, 0x7d, 0xce, 0xe4, 0x04, 0x12, 0x04, 0x13, 0xcf, 0x1a, 0x21, 0xdf, 0x70,
+ 0xef, 0xf4, 0x12, 0xe1, 0x01, 0x29, 0x04, 0x37, 0xf1, 0x42, 0xf1, 0x9a, 0x0d,
+ 0x1e, 0x14, 0x05, 0x1d, 0x18, 0xde, 0x03, 0x06, 0xef, 0xed, 0xb3, 0xdf, 0x0d,
+ 0xec, 0x08, 0xb4, 0x01, 0x12, 0x0a, 0x48, 0xec, 0xd7, 0x7f, 0x04, 0x37, 0xde,
+ 0x4f, 0xd7, 0xd9, 0x21, 0xa5, 0x19, 0x0f, 0x0d, 0x16, 0xde, 0xe3, 0x3f, 0xcd,
+ 0x36, 0x2f, 0x34, 0x05, 0x4a, 0xb7, 0x22, 0x47, 0xf0, 0xeb, 0x07, 0x0a, 0x25,
+ 0xcc, 0x8d, 0xd5, 0xed, 0xc6, 0xce, 0xf1, 0xf9, 0x37, 0xbc, 0xed, 0x32, 0x08,
+ 0xbf, 0xe9, 0x0e, 0x9a, 0xe3, 0x0e, 0xe5, 0xe0, 0xd4, 0xca, 0xc8, 0xd5, 0xb2,
+ 0x3c, 0xd6, 0xe0, 0x0f, 0x19, 0x01, 0x02, 0xf1, 0xfc, 0xef, 0x22, 0xff, 0x1f,
+ 0xdf, 0x05, 0x23, 0x2a, 0xf2, 0x00, 0x48, 0xf9, 0x00, 0xf4, 0x69, 0x27, 0xef,
+ 0x00, 0x7f, 0x04, 0x2e, 0x2a, 0x2b, 0x0d, 0x35, 0xfa, 0xf1, 0x0b, 0xdd, 0x14,
+ 0x24, 0x17, 0x03, 0xfe, 0x27, 0x1f, 0x07, 0xe9, 0x13, 0xea, 0x5e, 0x05, 0xd5,
+ 0x04, 0xf1, 0x16, 0xf0, 0xf9, 0xd6, 0xe8, 0xe0, 0x00, 0x53, 0xec, 0xf7, 0x22,
+ 0xeb, 0xfd, 0x0a, 0xd3, 0x05, 0xf2, 0x43, 0x9c, 0xdf, 0xcc, 0x01, 0x00, 0x14,
+ 0xe4, 0xfa, 0xe3, 0x40, 0x0b, 0xa5, 0x05, 0xdb, 0x11, 0x26, 0x8b, 0x8f, 0x1d,
+ 0x6d, 0x01, 0xc9, 0xdb, 0xc0, 0x44, 0x19, 0x81, 0x14, 0xd1, 0x44, 0xfe, 0xcf,
+ 0x36, 0xed, 0xde, 0x19, 0xeb, 0xeb, 0xf8, 0x05, 0x3d, 0xf7, 0xd4, 0xcd, 0x3e,
+ 0x1b, 0x65, 0x72, 0x13, 0xd1, 0x59, 0x1a, 0x11, 0x28, 0x00, 0xd9, 0xd3, 0x12,
+ 0x08, 0x20, 0xd4, 0xf2, 0x17, 0x02, 0xf8, 0xf1, 0x06, 0x03, 0x36, 0xe4, 0xc5,
+ 0x16, 0x7d, 0xaf, 0x35, 0x2e, 0x19, 0xf2, 0x7f, 0x0e, 0x0e, 0xe4, 0xf8, 0xd9,
+ 0xf9, 0xf2, 0x0f, 0xfe, 0xc4, 0x41, 0x08, 0x07, 0xde, 0x42, 0xfe, 0xdd, 0x00,
+ 0x04, 0xfd, 0xe5, 0xda, 0x04, 0xea, 0x0b, 0x0f, 0x48, 0xf9, 0x07, 0x1c, 0x0e,
+ 0x16, 0xfc, 0xfb, 0x25, 0xf0, 0xcd, 0xfa, 0x03, 0x22, 0xec, 0x1b, 0xee, 0x20,
+ 0x13, 0xea, 0x00, 0xfc, 0xf8, 0x1d, 0x08, 0x1c, 0x7f, 0x37, 0x2f, 0x11, 0x03,
+ 0x36, 0xc8, 0xe2, 0xe8, 0x1b, 0x66, 0x12, 0x0c, 0x26, 0x91, 0x20, 0xe6, 0xff,
+ 0x2b, 0x5c, 0x02, 0xcb, 0x06, 0x28, 0x21, 0xfc, 0xee, 0x17, 0x18, 0xfd, 0xf6,
+ 0xde, 0x17, 0x44, 0x61, 0xfb, 0xf8, 0x20, 0xc2, 0x07, 0x1a, 0xfe, 0xe5, 0xd4,
+ 0x0b, 0x16, 0x29, 0x04, 0xec, 0x6b, 0x42, 0x1a, 0x22, 0x7f, 0x90, 0x00, 0xca,
+ 0x33, 0xd1, 0xa4, 0x09, 0xe9, 0x59, 0xbe, 0x01, 0x1b, 0xf3, 0x7d, 0x1a, 0xd2,
+ 0x2b, 0x0c, 0x04, 0x38, 0xca, 0x26, 0x38, 0x30, 0xc9, 0x2a, 0x7c, 0x12, 0xe5,
+ 0x02, 0x1e, 0x03, 0xe2, 0x07, 0xfd, 0xca, 0xf4, 0xd3, 0xc2, 0x4c, 0xeb, 0xca,
+ 0x47, 0x64, 0xe7, 0x0e, 0xfa, 0xc2, 0xf0, 0xfd, 0x9f, 0x3f, 0xca, 0x0c, 0xa7,
+ 0x47, 0x05, 0xee, 0x17, 0x0a, 0x0f, 0xf7, 0xcb, 0xfc, 0x3c, 0x58, 0x07, 0x18,
+ 0x36, 0xf6, 0x24, 0xeb, 0xf7, 0x17, 0xfc, 0xf4, 0xe9, 0xfb, 0x7f, 0x13, 0xf2,
+ 0xf9, 0xee, 0x06, 0xe6, 0xf9, 0xe9, 0xdb, 0xdb, 0x3a, 0xda, 0xd8, 0x0e, 0x0e,
+ 0x44, 0xd9, 0x10, 0x02, 0xfc, 0xfd, 0x2e, 0x15, 0xc2, 0x0e, 0x00, 0xf1, 0xdb,
+ 0xfe, 0x15, 0xfd, 0x0a, 0x00, 0xe7, 0x2d, 0x04, 0x19, 0xeb, 0xd1, 0xee, 0x28,
+ 0x22, 0xe3, 0xd9, 0xbc, 0xe1, 0x27, 0x05, 0xf4, 0x25, 0x2c, 0x0f, 0x31, 0x45,
+ 0x0d, 0x00, 0x13, 0xe6, 0x05, 0x0c, 0xe9, 0x16, 0xe3, 0xde, 0xaa, 0xfe, 0x76,
+ 0x1c, 0x26, 0xdb, 0x12, 0xf9, 0x18, 0xa3, 0x1d, 0x14, 0xdb, 0x0d, 0x03, 0xed,
+ 0x0c, 0x0a, 0x4c, 0x18, 0x2a, 0x38, 0x52, 0x33, 0xd3, 0xfe, 0xff, 0xd8, 0xfa,
+ 0xf2, 0x0f, 0x06, 0xee, 0x22, 0xee, 0x5b, 0x22, 0x07, 0xf8, 0x02, 0x63, 0x08,
+ 0xe0, 0x4e, 0xf6, 0xd7, 0x81, 0x59, 0xde, 0x08, 0x40, 0x0d, 0xd9, 0xf2, 0xf0,
+ 0x26, 0x81, 0x4c, 0x24, 0x34, 0xd1, 0x10, 0xd9, 0x13, 0x96, 0xda, 0xdb, 0x2e,
+ 0x07, 0xd4, 0xfd, 0x36, 0xcf, 0xcd, 0xd1, 0xd9, 0x06, 0xb7, 0xf1, 0x00, 0xeb,
+ 0x18, 0xd5, 0xdf, 0xf0, 0xd9, 0x3d, 0xd3, 0xaa, 0x10, 0x47, 0xf5, 0xfb, 0xde,
+ 0x59, 0xd3, 0x0c, 0x42, 0x1a, 0xf1, 0x28, 0xf7, 0x1e, 0xb8, 0xfc, 0xc0, 0xf0,
+ 0xea, 0xe2, 0x1e, 0xf4, 0xd4, 0xf2, 0x1b, 0xd6, 0xf5, 0xdd, 0xcf, 0x35, 0xd2,
+ 0xf8, 0x17, 0xf3, 0xd8, 0x3b, 0x25, 0x11, 0x0c, 0xb2, 0x2f, 0x07, 0xad, 0xff,
+ 0x28, 0xd2, 0x40, 0xf2, 0x99, 0xfe, 0xef, 0x22, 0xd5, 0x93, 0xca, 0x05, 0xe8,
+ 0xf9, 0x0d, 0x21, 0x0b, 0x0a, 0xdf, 0xde, 0xcc, 0x04, 0x81, 0x46, 0x25, 0x18,
+ 0x34, 0x0b, 0xfe, 0xe9, 0xec, 0xdd, 0xef, 0xe0, 0x3e, 0xf8, 0xcb, 0x1c, 0xe8,
+ 0xd0, 0xab, 0xcf, 0x29, 0xdd, 0x00, 0x12, 0x53, 0x03, 0x02, 0x1e, 0x14, 0x08,
+ 0x0a, 0x09, 0x75, 0x01, 0x21, 0x21, 0x34, 0x05, 0xce, 0x1e, 0xf8, 0xcf, 0x44,
+ 0x4c, 0x14, 0xed, 0xe0, 0x25, 0x26, 0x13, 0xfb, 0xd9, 0xf5, 0x0e, 0xf7, 0x47,
+ 0x3d, 0x27, 0x24, 0x3e, 0x07, 0x15, 0x27, 0x52, 0xfe, 0xfc, 0x0d, 0xee, 0xd1,
+ 0xea, 0xca, 0xc4, 0x4b, 0xee, 0xfb, 0x0f, 0x3a, 0x37, 0xa9, 0x0a, 0x55, 0x57,
+ 0xee, 0xec, 0x7f, 0x1e, 0x19, 0x32, 0x97, 0xdb, 0x1f, 0xb2, 0x3b, 0xe4, 0x7f,
+ 0x03, 0xe7, 0xec, 0xc4, 0xf6, 0xfc, 0x27, 0x51, 0x43, 0x02, 0xd0, 0xbb, 0x0b,
+ 0x2b, 0x9a, 0xf5, 0x44, 0xfe, 0xb5, 0x23, 0x35, 0xd2, 0x47, 0xca, 0x7b, 0xda,
+ 0xee, 0x0a, 0x35, 0x65, 0xb9, 0xb6, 0xdc, 0x41, 0xef, 0x1c, 0xed, 0x13, 0x50,
+ 0x03, 0xe8, 0x18, 0xef, 0xfe, 0x04, 0x16, 0xfc, 0x1f, 0x00, 0xf1, 0xbb, 0xf8,
+ 0x0f, 0x59, 0xc8, 0x09, 0xf0, 0x5a, 0x10, 0xbe, 0xf5, 0x16, 0x2c, 0xc7, 0x4d,
+ 0x15, 0x2b, 0xd6, 0xf2, 0x28, 0x38, 0xc9, 0x09, 0x27, 0xff, 0x26, 0xfa, 0xde,
+ 0x3c, 0x22, 0xf2, 0x07, 0xec, 0x0c, 0x43, 0x1a, 0x02, 0x1e, 0x3c, 0x03, 0xca,
+ 0xe3, 0xf2, 0xbe, 0xdc, 0x29, 0x0d, 0x81, 0x27, 0x02, 0x5b, 0x3d, 0xd6, 0xff,
+ 0x46, 0x47, 0xe8, 0x2b, 0xc3, 0xd7, 0xfd, 0xee, 0x5c, 0xe9, 0x3a, 0x12, 0x04,
+ 0xfb, 0xf1, 0x1b, 0x39, 0xf2, 0x20, 0xfe, 0xd7, 0xef, 0x0d, 0xf9, 0x13, 0xed,
+ 0x06, 0xf0, 0x31, 0xef, 0x0e, 0x0d, 0xdc, 0xe8, 0x12, 0x31, 0x02, 0xc5, 0xe7,
+ 0xda, 0x14, 0x10, 0xc5, 0xcb, 0xf3, 0xfb, 0xe3, 0x26, 0xf1, 0x03, 0xfe, 0x14,
+ 0xd0, 0xef, 0xe7, 0x7f, 0x0e, 0x03, 0x10, 0xd5, 0x01, 0xf6, 0xef, 0x02, 0x00,
+ 0x04, 0x36, 0xef, 0xd4, 0x0c, 0x16, 0x1f, 0xfe, 0xe7, 0xf2, 0xef, 0x0b, 0x07,
+ 0xef, 0xfa, 0xd9, 0x49, 0x11, 0x4c, 0xf3, 0x4e, 0x7f, 0xe9, 0xb6, 0xcc, 0xf8,
+ 0xe1, 0x19, 0xc1, 0x15, 0xbf, 0xc4, 0x14, 0xc0, 0x07, 0xcb, 0xbe, 0x70, 0xc2,
+ 0x3c, 0x12, 0xdd, 0x4f, 0x04, 0x06, 0xe1, 0xd2, 0x23, 0xdb, 0x22, 0xf9, 0xb4,
+ 0x00, 0x12, 0xd1, 0xae, 0x57, 0xf8, 0xf4, 0x37, 0x32, 0xea, 0xcd, 0xd6, 0xdd,
+ 0xd8, 0x1b, 0x0b, 0xbd, 0x41, 0x42, 0x35, 0xda, 0xd6, 0x10, 0x26, 0x22, 0xf5,
+ 0x0c, 0xe7, 0x02, 0x0a, 0xfc, 0xea, 0xfe, 0x56, 0xf8, 0x3b, 0xe6, 0x16, 0xbc,
+ 0x0c, 0x12, 0x08, 0x4a, 0xf7, 0x2e, 0xd5, 0x4c, 0x1c, 0xdc, 0xeb, 0x7f, 0xe7,
+ 0x1a, 0x05, 0x0b, 0xff, 0x0c, 0xf8, 0xab, 0x1b, 0xee, 0xcd, 0x00, 0x06, 0xd7,
+ 0x21, 0x1e, 0x50, 0xf0, 0x0f, 0x0b, 0xb7, 0x21, 0x12, 0xec, 0x0e, 0x19, 0x2e,
+ 0xf4, 0xd4, 0xe0, 0x4c, 0xfc, 0x26, 0xeb, 0xf0, 0x44, 0xb0, 0x43, 0xe3, 0xfc,
+ 0xf2, 0xf9, 0x19, 0xb7, 0xc9, 0x39, 0xd5, 0x1e, 0x06, 0x07, 0xeb, 0x02, 0xf3,
+ 0x1f, 0x81, 0x05, 0xb9, 0x30, 0xe4, 0xf2, 0xd3, 0x02, 0xdf, 0x10, 0x0e, 0xf9,
+ 0xf1, 0xd6, 0x05, 0x24, 0xe3, 0x03, 0xfa, 0xc7, 0x0f, 0xed, 0xff, 0xd0, 0xc3,
+ 0x05, 0x2b, 0xfa, 0x0b, 0xd4, 0x19, 0x4a, 0xe6, 0x4c, 0x16, 0xee, 0x14, 0xe9,
+ 0x0c, 0xae, 0xe9, 0xd8, 0xd1, 0xdc, 0xd4, 0x1a, 0xdf, 0xf5, 0xd5, 0x0e, 0xde,
+ 0xf6, 0xf7, 0xea, 0x05, 0x18, 0xef, 0xd5, 0x03, 0xce, 0xf3, 0x1b, 0xdb, 0x2d,
+ 0x10, 0x21, 0x3f, 0xf9, 0xdd, 0xd8, 0xe6, 0x0e, 0x12, 0x09, 0x07, 0xed, 0x0f,
+ 0x2c, 0x1b, 0x12, 0xee, 0x00, 0x05, 0x7f, 0xd6, 0x39, 0xd5, 0x4d, 0x38, 0x05,
+ 0xfe, 0x39, 0x21, 0x05, 0xfc, 0x48, 0x27, 0x04, 0xfc, 0xec, 0xf4, 0x0c, 0xce,
+ 0x26, 0xf6, 0xf8, 0xf7, 0x2b, 0x49, 0x18, 0x25, 0x1e, 0xff, 0xda, 0x2f, 0x56,
+ 0x0f, 0x2a, 0x4a, 0x24, 0xf0, 0xe4, 0x37, 0xe8, 0x0a, 0xa0, 0x21, 0xe5, 0x93,
+ 0xaa, 0x08, 0x0b, 0xa5, 0xff, 0xf1, 0x0f, 0xd4, 0x64, 0xe0, 0xd2, 0xbd, 0xf9,
+ 0x44, 0x43, 0xeb, 0xe5, 0x0e, 0x08, 0xdd, 0xe1, 0x2c, 0xee, 0x81, 0x45, 0xe6,
+ 0xdf, 0xd1, 0xa5, 0x65, 0xe1, 0x03, 0xeb, 0xfc, 0xf8, 0xe6, 0x0a, 0xed, 0xb5,
+ 0x20, 0xd5, 0xca, 0x3a, 0x2d, 0xf3, 0x1a, 0xf1, 0x3b, 0xd9, 0x9e, 0x0d, 0x4a,
+ 0xe3, 0xa9, 0xc8, 0x0c, 0x85, 0x25, 0xf0, 0x2b, 0xb5, 0xb7, 0xf3, 0xad, 0x2c,
+ 0x45, 0x57, 0xf8, 0x4a, 0xa0, 0xe3, 0x32, 0x22, 0xfc, 0x10, 0x03, 0x40, 0xe2,
+ 0xd4, 0xea, 0x05, 0xf2, 0x2f, 0x34, 0x81, 0xba, 0xbf, 0xef, 0xe8, 0x2b, 0x0e,
+ 0x3e, 0xb0, 0x44, 0x04, 0xa7, 0x2f, 0x20, 0x33, 0xfe, 0x3c, 0x41, 0x21, 0xbe,
+ 0xdc, 0xf9, 0x10, 0x15, 0xd8, 0x19, 0x47, 0xad, 0x2c, 0x0d, 0x2b, 0xf4, 0xfc,
+ 0x35, 0xbd, 0x2d, 0x0d, 0x36, 0x58, 0x22, 0x07, 0xee, 0x05, 0x7f, 0x15, 0xc5,
+ 0x17, 0x0c, 0xfd, 0xf6, 0xe3, 0x1d, 0x2f, 0xcc, 0x9a, 0x5a, 0x0d, 0x31, 0xc9,
+ 0x65, 0x0c, 0xdc, 0x2c, 0x3b, 0xe4, 0xfd, 0xe1, 0xa4, 0xf4, 0xfc, 0xeb, 0xc4,
+ 0xcc, 0xf3, 0x0c, 0x32, 0x33, 0x12, 0xf0, 0x27, 0xaf, 0xfa, 0xd6, 0xdd, 0x1b,
+ 0xcc, 0xcf, 0x41, 0x32, 0xef, 0xde, 0x18, 0x08, 0xe9, 0xc2, 0xaa, 0xbc, 0xf3,
+ 0xaa, 0x03, 0x2f, 0xf3, 0xc9, 0x81, 0xbb, 0x91, 0x19, 0x26, 0xfe, 0x07, 0xfc,
+ 0x17, 0xcb, 0xb3, 0x0d, 0xd6, 0x15, 0xa5, 0xf0, 0xc2, 0xbd, 0x34, 0x1e, 0xcf,
+ 0xf8, 0xdf, 0x19, 0xdc, 0xb4, 0xe8, 0xde, 0x8c, 0x10, 0xfa, 0x05, 0x3a, 0xe5,
+ 0xe5, 0x04, 0xce, 0x0e, 0xf2, 0xf5, 0x2d, 0x12, 0xf3, 0x00, 0x8a, 0x37, 0x15,
+ 0xd8, 0xa3, 0x35, 0x0a, 0x81, 0xbe, 0xfd, 0xfe, 0x2c, 0x35, 0xdd, 0xed, 0x32,
+ 0xb5, 0xed, 0x0d, 0x14, 0xe8, 0xd9, 0x3c, 0x31, 0x18, 0x09, 0xfe, 0x3a, 0x0b,
+ 0x1b, 0xfa, 0xe5, 0x22, 0x07, 0xcd, 0x38, 0xc6, 0xeb, 0x08, 0x7f, 0x0c, 0x5c,
+ 0xf5, 0x1a, 0xe5, 0xd2, 0xcf, 0xdb, 0x04, 0x5a, 0x0e, 0xe9, 0x35, 0x1b, 0xd1,
+ 0x23, 0xe6, 0xf8, 0xfc, 0xeb, 0x34, 0xdd, 0x49, 0xd6, 0x00, 0x47, 0xd4, 0x11,
+ 0x0b, 0xfa, 0x1d, 0x37, 0x18, 0xe8, 0x28, 0xeb, 0x47, 0xb3, 0xe4, 0x4c, 0x28,
+ 0xf9, 0x28, 0x3c, 0xea, 0xf9, 0xf2, 0xda, 0x1e, 0xc4, 0xfd, 0xc1, 0xd8, 0xf8,
+ 0xfd, 0x7f, 0xf1, 0x2d, 0xaf, 0xe2, 0x08, 0xe1, 0x33, 0x34, 0xe8, 0x1a, 0x3b,
+ 0xd5, 0xf7, 0xbd, 0x3b, 0x0e, 0x31, 0x03, 0x01, 0xbf, 0xe1, 0x51, 0x07, 0x08,
+ 0x49, 0xf8, 0x4b, 0xa5, 0x4b, 0x25, 0x27, 0xfe, 0xee, 0x07, 0xd7, 0xb5, 0xf3,
+ 0xd4, 0x51, 0xc3, 0x34, 0xd8, 0x29, 0xe4, 0x1a, 0xca, 0xbe, 0x1d, 0x14, 0x55,
+ 0x0f, 0xa0, 0xd0, 0xd7, 0x14, 0xa1, 0xc4, 0x61, 0xb4, 0xf0, 0xbd, 0xf3, 0xd6,
+ 0xf0, 0x81, 0x43, 0x2b, 0x20, 0xdf, 0xfc, 0x52, 0x2d, 0x35, 0xec, 0xd5, 0xe2,
+ 0x51, 0x4b, 0x29, 0xfc, 0x1c, 0xd7, 0x36, 0x12, 0xcc, 0x04, 0xee, 0xd5, 0xac,
+ 0x30, 0xd5, 0xe8, 0xfb, 0x18, 0xf1, 0xf2, 0x1a, 0xc2, 0x2b, 0x18, 0xae, 0xe0,
+ 0x9f, 0xcd, 0xbb, 0xec, 0x4d, 0x18, 0xc3, 0x7a, 0x3e, 0xba, 0x20, 0xf8, 0xe7,
+ 0xde, 0xd9, 0xbd, 0xe1, 0xc6, 0x73, 0x5b, 0x7e, 0xd5, 0x1e, 0xe9, 0xcd, 0xcd,
+ 0xd4, 0xc7, 0x00, 0x0e, 0x6a, 0xf7, 0x3d, 0xff, 0x11, 0x7f, 0x0e, 0x18, 0xcd,
+ 0x0b, 0x31, 0x3a, 0x49, 0x0a, 0xed, 0xdd, 0xf5, 0x1d, 0xbd, 0x3f, 0x29, 0x0b,
+ 0x0c, 0x07, 0xf6, 0x46, 0x15, 0xb6, 0xd2, 0x40, 0x4b, 0xc9, 0xee, 0x67, 0x40,
+ 0x44, 0x56, 0x4d, 0x0e, 0xda, 0xfc, 0xf3, 0xea, 0xf6, 0xfd, 0xff, 0x17, 0xf9,
+ 0xf9, 0x05, 0xd8, 0xf9, 0x05, 0x07, 0xee, 0xe0, 0x13, 0xf3, 0xc8, 0xf0, 0xab,
+ 0x0a, 0x41, 0x3d, 0xda, 0x9f, 0xf5, 0x04, 0x81, 0x14, 0x07, 0x09, 0xff, 0x24,
+ 0x0b, 0x0d, 0xee, 0xce, 0xf3, 0x0b, 0xfb, 0x02, 0x2d, 0xf0, 0x18, 0x1e, 0xf8,
+ 0xfb, 0xf4, 0xf5, 0x3c, 0x06, 0x15, 0xfd, 0xfb, 0xbe, 0x12, 0x01, 0x06, 0x10,
+ 0x0c, 0x29, 0xea, 0xf2, 0xf6, 0xfd, 0x1e, 0x2a, 0x15, 0xf7, 0xed, 0xbd, 0xd6,
+ 0x34, 0xe9, 0xfe, 0xc4, 0x43, 0x3a, 0xb2, 0x4f, 0xe7, 0xeb, 0x3d, 0xbc, 0x7f,
+ 0xe0, 0x33, 0x0e, 0x28, 0x27, 0xe5, 0xf0, 0x35, 0x19, 0xca, 0x10, 0xdc, 0xdc,
+ 0xb3, 0xf2, 0x06, 0x0a, 0xdf, 0x45, 0x31, 0x15, 0xf4, 0xb7, 0xf7, 0x10, 0xff,
+ 0xff, 0xd9, 0xe1, 0xe1, 0xd0, 0x0f, 0x03, 0x03, 0xfc, 0xfe, 0x0e, 0xc9, 0x17,
+ 0x21, 0xc9, 0xe4, 0xf8, 0x98, 0x08, 0xfe, 0x20, 0x5a, 0x1c, 0x3b, 0xfd, 0x00,
+ 0xe5, 0x27, 0x13, 0xc0, 0x45, 0x1f, 0xeb, 0xfb, 0xe2, 0x23, 0x0d, 0xd4, 0xeb,
+ 0xf4, 0x1a, 0x1b, 0x06, 0xe4, 0x1a, 0x2e, 0x4c, 0x1d, 0xea, 0x1e, 0xd8, 0x8f,
+ 0xfa, 0x3b, 0xdd, 0xe4, 0x2a, 0x0d, 0xf9, 0x02, 0xce, 0x07, 0x11, 0x18, 0xeb,
+ 0x1b, 0x21, 0xfd, 0x81, 0x09, 0x02, 0xf3, 0x0e, 0x19, 0xf0, 0x3d, 0xd0, 0xc9,
+ 0xfb, 0x72, 0x36, 0x24, 0x32, 0x15, 0x04, 0x12, 0x7f, 0x3a, 0x0d, 0x1a, 0x1d,
+ 0xe4, 0xf0, 0x07, 0x09, 0x0a, 0xff, 0x59, 0x18, 0xbf, 0xe9, 0x2b, 0xf2, 0xf0,
+ 0x29, 0x1e, 0xf1, 0x31, 0xc8, 0xe2, 0x4c, 0xf7, 0x6c, 0xf6, 0x51, 0x1c, 0xec,
+ 0x1b, 0x3a, 0x17, 0x08, 0xf7, 0x43, 0xec, 0xc4, 0xeb, 0x20, 0x2f, 0xe4, 0x26,
+ 0xf1, 0xfe, 0xd1, 0xfe, 0xe4, 0x69, 0xfb, 0x03, 0xd4, 0xf3, 0xbf, 0x44, 0xed,
+ 0x4c, 0xec, 0x10, 0x52, 0x0f, 0xc6, 0xf5, 0x24, 0x1c, 0xe7, 0xf3, 0xbc, 0x19,
+ 0x7f, 0xe4, 0x4c, 0x0d, 0x11, 0xf4, 0xeb, 0x14, 0xbb, 0x45, 0xe9, 0xce, 0x0d,
+ 0x0f, 0xc7, 0x1c, 0x12, 0xf0, 0x18, 0x06, 0x0f, 0xc2, 0xd6, 0xd0, 0xb9, 0x03,
+ 0x15, 0xe2, 0x18, 0x4f, 0x4d, 0x3b, 0x02, 0xd4, 0xe2, 0xfb, 0x2c, 0xe0, 0x1d,
+ 0x18, 0xc8, 0xf6, 0x29, 0x1c, 0xf1, 0xea, 0x20, 0x24, 0x8c, 0x1e, 0x05, 0x22,
+ 0x2a, 0x00, 0x11, 0xe4, 0x00, 0x17, 0x1d, 0xc5, 0x0e, 0x7f, 0xe6, 0xd0, 0xd4,
+ 0xee, 0x45, 0xd5, 0x26, 0xd7, 0xe4, 0xeb, 0x47, 0xf1, 0x6a, 0x1c, 0x26, 0x45,
+ 0x42, 0xeb, 0x06, 0x2e, 0xfc, 0xd5, 0xfa, 0xcb, 0x01, 0xf4, 0xc2, 0xe3, 0x0b,
+ 0x0a, 0xcd, 0x49, 0x01, 0x28, 0x19, 0xde, 0x86, 0xd8, 0x11, 0xfd, 0x1c, 0x25,
+ 0x2a, 0x1a, 0x05, 0x1c, 0xf5, 0x78, 0x34, 0x1e, 0xe7, 0x06, 0x1d, 0xe7, 0xcc,
+ 0xde, 0xfb, 0x02, 0xf2, 0x7f, 0x26, 0x08, 0xb7, 0xd6, 0xaa, 0x0c, 0xe8, 0x23,
+ 0x28, 0xfb, 0xef, 0x04, 0x0b, 0xd8, 0x02, 0xc1, 0xf0, 0x31, 0x2b, 0xe6, 0x1b,
+ 0xfe, 0x0c, 0x1a, 0xbe, 0xf9, 0x14, 0xef, 0xe2, 0xc8, 0xe0, 0xf2, 0x2a, 0x6d,
+ 0x0d, 0x15, 0xc3, 0xfe, 0x43, 0x2c, 0x12, 0xf4, 0x6a, 0x10, 0x1c, 0x28, 0xdf,
+ 0xf5, 0x15, 0xb1, 0xd7, 0x03, 0xea, 0xf3, 0x42, 0x9a, 0xec, 0xcb, 0x3e, 0xf3,
+ 0xc6, 0x69, 0x10, 0xf0, 0x14, 0xea, 0x17, 0x00, 0x6f, 0xe7, 0x81, 0xe9, 0x8b,
+ 0x0a, 0xd5, 0x62, 0x4c, 0x38, 0x57, 0x92, 0xb6, 0xeb, 0xe9, 0xe4, 0x63, 0xb3,
+ 0xfd, 0x00, 0x2e, 0x3f, 0x11, 0xee, 0xf3, 0x05, 0xdc, 0x88, 0x0c, 0x2c, 0x4c,
+ 0xd6, 0xf2, 0x06, 0x1c, 0xdc, 0x55, 0xeb, 0xfe, 0xb5, 0x0d, 0xa3, 0x07, 0x22,
+ 0xae, 0x3a, 0xd2, 0x79, 0x26, 0xf8, 0x3f, 0x26, 0x31, 0x2c, 0x29, 0x45, 0xfb,
+ 0x34, 0xfa, 0x6a, 0x38, 0xbc, 0xe0, 0x55, 0xfe, 0xf8, 0x21, 0xfb, 0xe9, 0xec,
+ 0x0b, 0xca, 0xd7, 0xbb, 0xff, 0x7f, 0xfc, 0x1b, 0xcf, 0xd5, 0x33, 0x54, 0xfc,
+ 0x0e, 0xd3, 0x25, 0xfc, 0x31, 0xc0, 0x4d, 0xe9, 0x09, 0x39, 0xc9, 0xe5, 0xf3,
+ 0xe3, 0x22, 0xf9, 0xf1, 0xb5, 0xff, 0x7f, 0xec, 0x46, 0x09, 0xfb, 0xdf, 0xc8,
+ 0xcf, 0x37, 0x35, 0x56, 0x17, 0xf2, 0xf9, 0xee, 0xe1, 0x04, 0xf6, 0xf9, 0xf0,
+ 0xc6, 0x1e, 0x04, 0xd9, 0x04, 0x31, 0x1d, 0xc3, 0x75, 0x58, 0x8a, 0x31, 0x2d,
+ 0x10, 0xa5, 0xd6, 0xee, 0x29, 0x8b, 0x39, 0xef, 0x24, 0x39, 0x01, 0x02, 0x44,
+ 0x21, 0xfa, 0xb2, 0x8a, 0x95, 0xe4, 0xde, 0xdd, 0xf4, 0xc8, 0xf1, 0x28, 0x23,
+ 0x64, 0xff, 0x3f, 0xcf, 0x81, 0x32, 0x01, 0x0f, 0xc6, 0xef, 0xc4, 0x0e, 0x01,
+ 0x3a, 0x29, 0xb0, 0xf4, 0xf9, 0x22, 0x16, 0xb9, 0x00, 0xd0, 0xf3, 0x1e, 0x57,
+ 0x03, 0x10, 0xea, 0x56, 0x22, 0xf1, 0x3d, 0x0a, 0x06, 0xd2, 0x9a, 0x67, 0x14,
+ 0xd6, 0x3e, 0xd7, 0xbf, 0xea, 0xf0, 0xd5, 0x32, 0xbe, 0x24, 0x01, 0x9e, 0x11,
+ 0xd0, 0x1e, 0x8e, 0xaa, 0xd1, 0xfa, 0xe8, 0xf4, 0x1d, 0x3b, 0x7f, 0x14, 0xe8,
+ 0xe0, 0xba, 0x06, 0xc1, 0xf7, 0x14, 0x98, 0x18, 0xa5, 0x0e, 0x48, 0x2f, 0xf5,
+ 0xc3, 0xca, 0xce, 0xf9, 0x3f, 0x28, 0xd5, 0x27, 0x2e, 0x19, 0xdd, 0x68, 0x1e,
+ 0x44, 0x03, 0x07, 0xe4, 0xe0, 0xf5, 0x40, 0xf7, 0x5f, 0xfc, 0xbf, 0x41, 0xf7,
+ 0x0a, 0x9e, 0x18, 0xda, 0xc8, 0x19, 0xdf, 0xfa, 0x2f, 0xe8, 0x07, 0xfa, 0xf0,
+ 0xee, 0xfa, 0xb9, 0x29, 0x06, 0xb1, 0xae, 0x08, 0x2f, 0xec, 0xf9, 0xfc, 0xdf,
+ 0xbe, 0x7f, 0xc3, 0x1b, 0x0f, 0x11, 0xd8, 0x32, 0xfd, 0xe8, 0xed, 0x0d, 0xbf,
+ 0xef, 0xee, 0x48, 0xf7, 0x02, 0xf8, 0xd9, 0xef, 0xf2, 0x2e, 0xee, 0x11, 0xea,
+ 0xfe, 0xd8, 0xf6, 0xc0, 0x30, 0xb4, 0x20, 0x12, 0x09, 0xf9, 0xcf, 0xe9, 0x09,
+ 0xca, 0xd6, 0x4e, 0x30, 0xf8, 0xea, 0xeb, 0x03, 0x81, 0xee, 0x34, 0xf6, 0xf8,
+ 0xf5, 0xda, 0x30, 0x05, 0x04, 0xf6, 0x11, 0x40, 0xee, 0xfc, 0x0a, 0xda, 0xea,
+ 0x13, 0x0d, 0x1e, 0x3e, 0x11, 0x2a, 0x0e, 0x09, 0x18, 0x31, 0xd9, 0xd1, 0x0a,
+ 0xe5, 0xd1, 0x53, 0x3a, 0xd5, 0xd5, 0x4c, 0x6d, 0x03, 0xde, 0x3a, 0xd3, 0x21,
+ 0x11, 0x81, 0x15, 0x40, 0x5b, 0xfc, 0x15, 0xb3, 0x14, 0x8e, 0x47, 0x3e, 0x8a,
+ 0xb0, 0x2a, 0x57, 0x40, 0xee, 0xc1, 0xf4, 0x2a, 0x0c, 0xef, 0xc0, 0xb6, 0x2e,
+ 0x74, 0x73, 0x1e, 0xf8, 0xe7, 0x1d, 0x8c, 0x6d, 0xf6, 0xec, 0x35, 0xc6, 0xf2,
+ 0xde, 0x0a, 0xc9, 0xcb, 0x07, 0x15, 0xe1, 0x1b, 0x47, 0x0f, 0xf0, 0xf1, 0xf9,
+ 0x0d, 0x1a, 0x41, 0x08, 0x58, 0x29, 0xf7, 0x0e, 0x1f, 0x50, 0xeb, 0xe7, 0x19,
+ 0x47, 0xf3, 0x3d, 0x0c, 0x21, 0xfd, 0x08, 0x09, 0xde, 0x7f, 0x15, 0xfd, 0xe5,
+ 0x29, 0x0c, 0x15, 0x02, 0xfa, 0xdd, 0xeb, 0x07, 0x26, 0x01, 0x16, 0x3e, 0x3d,
+ 0xda, 0xe0, 0xda, 0x1c, 0xde, 0xe1, 0x2b, 0xe7, 0xf8, 0x04, 0xc3, 0x21, 0xf7,
+ 0x6f, 0xd2, 0xf7, 0xd2, 0x55, 0xb7, 0xe6, 0x20, 0xf6, 0xf8, 0xd4, 0x3e, 0xe7,
+ 0x2e, 0x3b, 0xd7, 0xd8, 0xb3, 0x9e, 0xc1, 0xde, 0x37, 0x2f, 0xcb, 0xb9, 0x25,
+ 0xb1, 0xb7, 0xc9, 0x0a, 0xa2, 0x5f, 0x17, 0x82, 0xb1, 0xce, 0x19, 0x36, 0x26,
+ 0xba, 0x0c, 0x09, 0xea, 0xf1, 0xea, 0xda, 0x04, 0xf9, 0x18, 0xee, 0xb5, 0x9f,
+ 0xb4, 0xfc, 0xc9, 0x7f, 0x15, 0xe8, 0x05, 0xe4, 0x24, 0x22, 0xf0, 0xd7, 0xda,
+ 0x14, 0xde, 0x2b, 0x0e, 0x08, 0x9c, 0x4a, 0x03, 0xec, 0xea, 0xe4, 0xd1, 0x2f,
+ 0xc6, 0x4b, 0xd1, 0x7f, 0xf9, 0x0e, 0xe6, 0xd8, 0x2f, 0xe2, 0x7a, 0xb0, 0x2c,
+ 0xdf, 0xd2, 0xd2, 0xe3, 0x17, 0x21, 0xd4, 0x35, 0x1b, 0xf9, 0x26, 0xfb, 0x13,
+ 0x4e, 0xff, 0x01, 0x42, 0x07, 0xea, 0xc9, 0xe5, 0x34, 0x30, 0x20, 0xf6, 0xd2,
+ 0x13, 0x2c, 0xcb, 0x3d, 0xf8, 0x42, 0xcc, 0x1a, 0xf3, 0xeb, 0xe9, 0x37, 0x1c,
+ 0x17, 0x41, 0x03, 0xa7, 0x1a, 0x31, 0x35, 0xd2, 0xf7, 0xdb, 0xa2, 0x2b, 0x09,
+ 0xcd, 0xdc, 0x20, 0xfa, 0x0f, 0xed, 0x39, 0x11, 0x27, 0x12, 0xeb, 0x1b, 0x20,
+ 0xad, 0x19, 0xa5, 0x0c, 0xff, 0x64, 0xd3, 0xc7, 0xef, 0x1f, 0xe5, 0x44, 0xc1,
+ 0xdc, 0x10, 0x2e, 0xa8, 0x2e, 0xdf, 0xc7, 0xd2, 0xfb, 0x26, 0xc0, 0xe2, 0xf2,
+ 0x52, 0x28, 0xea, 0xfc, 0x8b, 0x3c, 0x29, 0x4b, 0x38, 0xaa, 0x7f, 0x0a, 0x3f,
+ 0x4b, 0xf3, 0xe0, 0xc9, 0xe4, 0x06, 0x16, 0xdf, 0xaa, 0xd1, 0xec, 0xf2, 0x28,
+ 0x23, 0x00, 0x1a, 0xeb, 0xe3, 0xb3, 0x3d, 0x49, 0x2a, 0xac, 0x1e, 0xea, 0x29,
+ 0xcb, 0xbe, 0x52, 0xe2, 0x07, 0xd8, 0xf1, 0x20, 0x32, 0xc4, 0x39, 0x12, 0x02,
+ 0xd5, 0xd2, 0xf3, 0xeb, 0xe9, 0x13, 0x3d, 0xec, 0x6c, 0x13, 0xf9, 0x10, 0x73,
+ 0xe0, 0xd9, 0xe0, 0xf7, 0x19, 0xec, 0xfd, 0xe7, 0x08, 0xca, 0x37, 0xe9, 0xfd,
+ 0xf5, 0x03, 0x23, 0x05, 0x7f, 0xd2, 0xf1, 0x02, 0xdd, 0xf8, 0xc4, 0xce, 0xd6,
+ 0xeb, 0xb1, 0x1e, 0x21, 0xfe, 0x1a, 0xfd, 0xd9, 0x0d, 0x0f, 0x7f, 0xcc, 0x51,
+ 0x0a, 0xfb, 0xf3, 0x21, 0xdf, 0x41, 0xf8, 0x04, 0x18, 0x08, 0x03, 0x05, 0x31,
+ 0x39, 0x1c, 0x74, 0xf5, 0x1a, 0x03, 0xe6, 0x35, 0x5c, 0x03, 0xee, 0x55, 0xbf,
+ 0xff, 0x3c, 0xe1, 0x1f, 0x0e, 0xf7, 0x2c, 0xec, 0x51, 0xbe, 0xc2, 0xee, 0xf3,
+ 0x15, 0x11, 0xeb, 0xf1, 0x37, 0x1d, 0x21, 0x7f, 0x01, 0x69, 0xe8, 0x0f, 0x20,
+ 0x1e, 0x57, 0x10, 0x54, 0xbf, 0xf8, 0xe4, 0x27, 0x22, 0x0e, 0xe2, 0xc7, 0x42,
+ 0x09, 0x07, 0xe7, 0x01, 0xbe, 0x10, 0x41, 0xdb, 0xdf, 0x39, 0xc9, 0x11, 0xde,
+ 0xd7, 0xf7, 0x0c, 0x1b, 0xd9, 0x1b, 0xe7, 0xde, 0xf9, 0xf6, 0xe8, 0x22, 0x3d,
+ 0xf8, 0x15, 0xfb, 0x79, 0xf3, 0x1c, 0xfc, 0x06, 0xcb, 0x09, 0x52, 0xfe, 0x2d,
+ 0x16, 0xf7, 0x09, 0xe5, 0x43, 0xe0, 0x48, 0xce, 0xed, 0x0e, 0xc1, 0xea, 0x32,
+ 0xc0, 0xe0, 0xd7, 0xf2, 0x77, 0x0d, 0x76, 0x18, 0xd6, 0xb5, 0x2a, 0xca, 0x61,
+ 0xe4, 0xe0, 0x01, 0xd9, 0xd1, 0xec, 0x19, 0xc4, 0x0d, 0x22, 0x00, 0xac, 0x25,
+ 0xb8, 0xe0, 0xea, 0x37, 0xc5, 0x07, 0xc5, 0xe0, 0xe1, 0x19, 0x7f, 0xaf, 0x23,
+ 0xf5, 0xed, 0xb7, 0x69, 0x26, 0xf1, 0x07, 0x32, 0xe8, 0x2d, 0xf1, 0x3e, 0x0b,
+ 0xdc, 0xf3, 0xff, 0x1b, 0x10, 0xee, 0x2f, 0x16, 0x2b, 0xc9, 0x37, 0xff, 0xec,
+ 0xcc, 0xcb, 0xf2, 0x23, 0xeb, 0x06, 0x1c, 0xc9, 0xf1, 0x33, 0xf2, 0x0a, 0x06,
+ 0xaf, 0xf6, 0x27, 0x09, 0x98, 0x06, 0xeb, 0xfa, 0x11, 0x02, 0xf6, 0x03, 0x24,
+ 0x66, 0xe1, 0x43, 0xcf, 0xdd, 0xf9, 0xd2, 0x1d, 0x49, 0xdc, 0xf9, 0x05, 0x7f,
+ 0xe6, 0x22, 0x0e, 0xe5, 0x10, 0xfa, 0xcc, 0x16, 0xda, 0x03, 0xcd, 0x05, 0x0a,
+ 0xdc, 0x0d, 0x1e, 0x0b, 0x00, 0x15, 0x08, 0x24, 0xf8, 0xfb, 0x2e, 0xac, 0x08,
+ 0xed, 0xd5, 0x4e, 0x2b, 0xd2, 0x20, 0x38, 0x31, 0x2b, 0xb9, 0xc9, 0xf1, 0x56,
+ 0xd2, 0xa7, 0xfd, 0x95, 0x55, 0x4d, 0xef, 0xe4, 0xce, 0xb3, 0xd6, 0xd2, 0x2b,
+ 0x19, 0xd2, 0xe8, 0x29, 0x1c, 0x05, 0xad, 0xd8, 0x81, 0x34, 0x2a, 0x39, 0x6e,
+ 0x7a, 0x30, 0x04, 0x05, 0xd5, 0x2c, 0xac, 0x0d, 0x1b, 0xb2, 0x06, 0x11, 0x06,
+ 0xc8, 0xe5, 0x3c, 0x29, 0x2c, 0xc9, 0xfb, 0x2d, 0x97, 0x2f, 0xc6, 0x40, 0x25,
+ 0x16, 0x2c, 0x1b, 0x1e, 0xd1, 0x1d, 0xdf, 0xf8, 0x6c, 0xd9, 0x16, 0x4a, 0x1c,
+ 0x1a, 0xea, 0xd5, 0xcb, 0xdd, 0x00, 0x04, 0xf0, 0xc0, 0x02, 0xfe, 0xf4, 0x2e,
+ 0x02, 0x46, 0xe0, 0xdf, 0xb2, 0x29, 0x17, 0xd4, 0xd7, 0x44, 0xdf, 0xfc, 0x07,
+ 0xee, 0x23, 0xff, 0x14, 0x1f, 0xdb, 0xb9, 0xa1, 0x04, 0xf1, 0x93, 0x01, 0xd9,
+ 0x82, 0x7f, 0xee, 0x65, 0xfd, 0xff, 0x04, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00,
+ 0x00, 0xd8, 0x31, 0x7a, 0xbf, 0x55, 0x3c, 0x49, 0x68, 0xb3, 0xbd, 0x56, 0xe8,
+ 0xa8, 0xeb, 0x48, 0x81, 0xac, 0xd2, 0xdd, 0xbe, 0x4c, 0x93, 0x67, 0x4d, 0x48,
+ 0x95, 0x3b, 0x17, 0x3d, 0x7f, 0xe3, 0x22, 0x48, 0xe3, 0xbd, 0x52, 0xf6, 0x08,
+ 0x4e, 0xb2, 0x48, 0x36, 0xd1, 0x5b, 0x67, 0xab, 0xdd, 0xd9, 0x44, 0xdd, 0xe4,
+ 0x41, 0x29, 0xa9, 0x1b, 0x46, 0x81, 0x43, 0x60, 0x4a, 0x0f, 0x50, 0x61, 0x7f,
+ 0xcf, 0x5b, 0x7f, 0xb6, 0x74, 0x5b, 0x5e, 0x7f, 0x9b, 0x8e, 0x46, 0xb3, 0x91,
+ 0xe5, 0x7f, 0xca, 0xb0, 0x81, 0xc4, 0xbb, 0x73, 0xe7, 0x7f, 0x69, 0x6e, 0x81,
+ 0x5b, 0x32, 0x6f, 0x7e, 0xa6, 0x7f, 0x68, 0x97, 0xac, 0x61, 0xc6, 0xd1, 0x65,
+ 0xae, 0x66, 0xe8, 0x96, 0x7f, 0x72, 0x91, 0xb5, 0xd9, 0x4e, 0xb4, 0x43, 0x4c,
+ 0x7f, 0xd2, 0xe1, 0x5d, 0x12, 0x7f, 0x6b, 0x65, 0x27, 0x68, 0x74, 0xfa, 0xf6,
+ 0x35, 0x1f, 0xd8, 0x41, 0x13, 0x2c, 0x37, 0xf4, 0xb7, 0x0e, 0xc6, 0xd9, 0x1a,
+ 0x4b, 0x1a, 0xe9, 0xaf, 0xea, 0xd4, 0x3b, 0x52, 0x1b, 0x2c, 0x2b, 0xbd, 0x1c,
+ 0x2f, 0x2e, 0x18, 0xc1, 0x6d, 0x3a, 0xa3, 0xe3, 0x27, 0xc7, 0xca, 0x32, 0xd3,
+ 0x25, 0xdc, 0xad, 0x20, 0x17, 0xc9, 0xd4, 0xf8, 0x19, 0xea, 0x6b, 0x18, 0x40,
+ 0x0a, 0xd4, 0x23, 0x59, 0x51, 0x22, 0x2c, 0x20, 0x20, 0x29, 0x85, 0xaa, 0x60,
+ 0x73, 0x9e, 0x4d, 0x72, 0x5f, 0x6a, 0x86, 0xbe, 0x70, 0xc0, 0xb4, 0xa3, 0x5c,
+ 0xa7, 0x81, 0x25, 0x95, 0x81, 0x51, 0x99, 0x26, 0x5e, 0x7f, 0xb7, 0x48, 0x53,
+ 0x46, 0x6e, 0xbf, 0x35, 0x6c, 0xba, 0xa7, 0x7d, 0xbf, 0xc4, 0x51, 0x8d, 0x5e,
+ 0x7f, 0x97, 0x12, 0x6e, 0x87, 0xa1, 0x43, 0x59, 0xa7, 0x25, 0x59, 0xbe, 0x9a,
+ 0x60, 0x63, 0xb9, 0x0a, 0x5d, 0x4e, 0x46, 0x51, 0x69, 0x2e, 0x81, 0x7f, 0x7d,
+ 0x81, 0x7f, 0x7f, 0x7f, 0x64, 0x81, 0x81, 0x7f, 0x81, 0x81, 0x81, 0x69, 0x14,
+ 0x81, 0x27, 0x81, 0x91, 0x7f, 0x78, 0x1e, 0x7f, 0x5e, 0x91, 0x7f, 0x7f, 0x7f,
+ 0x58, 0x81, 0x77, 0x7f, 0x81, 0x81, 0x7f, 0x81, 0x9a, 0x7f, 0x81, 0x7f, 0x41,
+ 0x81, 0x63, 0x7f, 0x81, 0x81, 0x6a, 0x7f, 0x81, 0x78, 0x7f, 0x22, 0x81, 0x5b,
+ 0x7f, 0x48, 0x4c, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0xd3, 0xcd, 0x40, 0x3d, 0xc6,
+ 0x4c, 0x1c, 0x3e, 0x20, 0xbe, 0xb5, 0x1a, 0xad, 0xb5, 0xda, 0x37, 0x4d, 0xda,
+ 0x07, 0xc3, 0xdd, 0x44, 0x7f, 0x0a, 0x3e, 0x19, 0xb3, 0x44, 0x45, 0x3c, 0xff,
+ 0xab, 0x4f, 0x3b, 0x91, 0xb1, 0x32, 0xba, 0xbc, 0x35, 0xc8, 0x2e, 0xab, 0xc9,
+ 0x46, 0x26, 0xbb, 0xcb, 0x3e, 0x39, 0xd5, 0x7f, 0x2c, 0xf4, 0xd5, 0x10, 0x2f,
+ 0x4f, 0x43, 0x3e, 0x43, 0x51, 0x33, 0x1f, 0xd4, 0xc5, 0x59, 0x16, 0xd0, 0x20,
+ 0x48, 0x18, 0x1b, 0xc6, 0xd8, 0x3c, 0xc2, 0xf8, 0xc6, 0x41, 0xfd, 0xc6, 0x2b,
+ 0xb9, 0xc5, 0x13, 0x95, 0xe2, 0x22, 0x32, 0x10, 0x1c, 0x3f, 0x1c, 0x09, 0xc3,
+ 0x12, 0x36, 0xf2, 0xcc, 0x4d, 0xaa, 0x81, 0x23, 0xbb, 0x28, 0x51, 0xc2, 0xbd,
+ 0xfe, 0xb7, 0xa6, 0x5c, 0x28, 0xcd, 0x3c, 0x24, 0xa7, 0xdd, 0x57, 0x25, 0xe8,
+ 0xbf, 0x23, 0x1c, 0x53, 0x18, 0x11, 0xc7, 0xaf, 0x57, 0x25, 0xb5, 0x2a, 0x35,
+ 0x2e, 0x02, 0xa9, 0xb4, 0x56, 0xaa, 0xaf, 0xa6, 0x2d, 0x2e, 0xb6, 0x43, 0xa7,
+ 0xd8, 0x1f, 0x65, 0xd6, 0x39, 0xf5, 0xf6, 0x36, 0x58, 0x25, 0xe9, 0xb1, 0x07,
+ 0x44, 0xb8, 0xae, 0x4c, 0xaa, 0xbe, 0x3e, 0xb4, 0x33, 0x40, 0xdd, 0xdb, 0xf1,
+ 0xc6, 0xb0, 0x7f, 0x39, 0xbf, 0x59, 0x40, 0xb8, 0x9e, 0x7f, 0x3e, 0x2d, 0xe4,
+ 0x3e, 0x4b, 0x61, 0x29, 0x19, 0xc7, 0xe3, 0x22, 0x0b, 0xeb, 0x12, 0x06, 0x1a,
+ 0x06, 0xca, 0xec, 0x1e, 0xea, 0xca, 0xc7, 0xf9, 0x30, 0xe7, 0x20, 0xc9, 0xfa,
+ 0x15, 0x28, 0x08, 0x20, 0xcc, 0x03, 0x23, 0x2e, 0x13, 0xfc, 0xe0, 0x06, 0x16,
+ 0xe1, 0xce, 0x2a, 0xe1, 0xdf, 0x2b, 0xf1, 0x14, 0xc8, 0x06, 0xf6, 0xf2, 0xe7,
+ 0xde, 0x44, 0x2b, 0xec, 0x38, 0x15, 0xcc, 0xda, 0x28, 0x1d, 0x0a, 0x07, 0x2e,
+ 0x26, 0x29, 0x14, 0x05, 0x22, 0x3a, 0x68, 0xfd, 0xff, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0xd5, 0x4f, 0x00, 0x00, 0x93, 0xfe, 0xff, 0xff, 0x2a,
+ 0xf6, 0xff, 0xff, 0x5b, 0x51, 0x00, 0x00, 0x78, 0xfc, 0xff, 0xff, 0x1e, 0x01,
+ 0x00, 0x00, 0x43, 0xfe, 0xff, 0xff, 0xd9, 0xff, 0xff, 0xff, 0x2b, 0x3c, 0x00,
+ 0x00, 0xac, 0x31, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x43, 0x57, 0x00, 0x00,
+ 0xdf, 0x40, 0x00, 0x00, 0xe9, 0x56, 0x00, 0x00, 0x52, 0xe8, 0xff, 0xff, 0x43,
+ 0x14, 0x00, 0x00, 0xc8, 0x57, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x2f, 0x59,
+ 0x00, 0x00, 0xd4, 0x3f, 0x00, 0x00, 0x9f, 0xfe, 0xff, 0xff, 0x3c, 0xf5, 0xff,
+ 0xff, 0x2b, 0xf0, 0xff, 0xff, 0xac, 0xfb, 0xff, 0xff, 0x72, 0xea, 0xff, 0xff,
+ 0xeb, 0x65, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xc3, 0xff, 0xff, 0xff, 0x2a,
+ 0x01, 0x00, 0x00, 0x2b, 0x0f, 0x00, 0x00, 0x7f, 0x53, 0x00, 0x00, 0x43, 0x01,
+ 0x00, 0x00, 0x4f, 0xee, 0xff, 0xff, 0x26, 0x46, 0x00, 0x00, 0x18, 0x26, 0x00,
+ 0x00, 0x11, 0x02, 0x00, 0x00, 0xb7, 0x3c, 0x00, 0x00, 0xea, 0x34, 0x00, 0x00,
+ 0xcb, 0xfe, 0xff, 0xff, 0x20, 0x6c, 0x00, 0x00, 0x7a, 0xff, 0xff, 0xff, 0xdb,
+ 0xf7, 0xff, 0xff, 0xc3, 0x57, 0x00, 0x00, 0xde, 0xff, 0xff, 0xff, 0x46, 0xfd,
+ 0xff, 0xff, 0xd4, 0x40, 0x00, 0x00, 0xbf, 0x58, 0x00, 0x00, 0x62, 0x00, 0x00,
+ 0x00, 0x55, 0xf7, 0xff, 0xff, 0xe7, 0x65, 0x00, 0x00, 0x0b, 0xe4, 0xff, 0xff,
+ 0x36, 0x00, 0x00, 0x00, 0x95, 0x08, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x0c,
+ 0xf5, 0xff, 0xff, 0xac, 0xff, 0xff, 0xff, 0x58, 0xfb, 0xff, 0xff, 0xec, 0xf8,
+ 0xff, 0xff, 0x83, 0xf0, 0xff, 0xff, 0xa1, 0xe1, 0xff, 0xff, 0x43, 0xf8, 0xff,
+ 0xff, 0xfa, 0xff, 0xff, 0xff, 0x14, 0x02, 0x00, 0x00, 0x9f, 0x11, 0x00, 0x00,
+ 0x46, 0x69, 0xfd, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x35,
+ 0x0c, 0xc2, 0x04, 0x56, 0x1a, 0x14, 0x2f, 0x49, 0xe0, 0x11, 0x00, 0x14, 0xdf,
+ 0xfb, 0x14, 0x07, 0xed, 0x61, 0x4f, 0x08, 0x00, 0x29, 0xf1, 0xd7, 0x0d, 0x9d,
+ 0xb3, 0x0a, 0x36, 0x00, 0x81, 0x95, 0x0e, 0x01, 0x08, 0x18, 0xda, 0xeb, 0x46,
+ 0x21, 0x46, 0xc0, 0xe6, 0x35, 0x28, 0x2c, 0x00, 0x1d, 0xe5, 0xc1, 0xfa, 0x3f,
+ 0xd3, 0x0a, 0x12, 0x04, 0xf0, 0xd8, 0xe6, 0xce, 0x42, 0xfa, 0x0f, 0xe3, 0x04,
+ 0x7f, 0x1c, 0xea, 0xda, 0xbb, 0xde, 0xdb, 0xe1, 0x41, 0x33, 0xfd, 0x27, 0x42,
+ 0xd1, 0xc6, 0xe0, 0xe1, 0xed, 0x25, 0x0e, 0xf0, 0xfb, 0x13, 0x0c, 0x41, 0x15,
+ 0x4b, 0x20, 0x16, 0xae, 0x1a, 0xe9, 0xee, 0xf8, 0x17, 0xfc, 0x24, 0xb2, 0x0d,
+ 0xfd, 0x2a, 0x12, 0xbf, 0xf4, 0xe6, 0x41, 0xba, 0xe8, 0x4d, 0x0c, 0x61, 0xdd,
+ 0xff, 0xb4, 0xe5, 0xc5, 0x1f, 0xeb, 0xf8, 0xe1, 0xaf, 0x01, 0xf7, 0x15, 0xee,
+ 0xeb, 0xec, 0x08, 0xf5, 0xe4, 0xfe, 0xe1, 0xe8, 0xf2, 0x06, 0xd9, 0x11, 0xfa,
+ 0x17, 0x03, 0xea, 0x14, 0xef, 0x1b, 0xeb, 0x0b, 0xdb, 0xd0, 0x1b, 0x0d, 0x7f,
+ 0x13, 0x16, 0xf7, 0xcb, 0xe0, 0x16, 0x0d, 0xcb, 0xd6, 0x04, 0xdf, 0x31, 0x24,
+ 0xf8, 0x16, 0x51, 0xd1, 0xf5, 0x13, 0x09, 0xd7, 0xea, 0xf4, 0x10, 0x09, 0x12,
+ 0x21, 0x0d, 0xf7, 0xcd, 0xe8, 0xd6, 0x23, 0x1d, 0x2b, 0xd9, 0x01, 0x1d, 0x11,
+ 0xf3, 0x7f, 0x08, 0xf4, 0x06, 0x0d, 0x02, 0x09, 0xd8, 0xf1, 0x1b, 0x02, 0xe7,
+ 0x26, 0x14, 0xe3, 0xe3, 0xfd, 0x03, 0xf1, 0xf0, 0x1a, 0x25, 0xec, 0x07, 0xe7,
+ 0x1f, 0xf4, 0xd1, 0xb1, 0xea, 0x12, 0x06, 0x19, 0x30, 0xd5, 0x1e, 0xf5, 0xef,
+ 0x22, 0x09, 0xea, 0x1f, 0xff, 0xf4, 0xf7, 0x01, 0xf2, 0x1b, 0x0c, 0x16, 0x17,
+ 0x0e, 0xf7, 0xe2, 0xd4, 0x0e, 0xda, 0xd4, 0x1c, 0x01, 0x30, 0xe8, 0x14, 0xfb,
+ 0x1f, 0xc0, 0x2f, 0x2b, 0xf7, 0xd4, 0x4e, 0x81, 0x3d, 0x9f, 0x3d, 0x0f, 0x5c,
+ 0x0a, 0xdb, 0x28, 0xf6, 0xd3, 0x10, 0xd5, 0x03, 0x07, 0x8f, 0xba, 0x4b, 0x12,
+ 0xd6, 0xed, 0xdb, 0xfa, 0xe6, 0xea, 0xbf, 0x17, 0xd0, 0xde, 0x2a, 0x03, 0x10,
+ 0xeb, 0xea, 0x35, 0xeb, 0x1b, 0x08, 0x0a, 0x26, 0x23, 0xb9, 0x3c, 0x21, 0x0c,
+ 0xee, 0x00, 0x39, 0x09, 0x22, 0x92, 0xc8, 0xe7, 0xfe, 0x3d, 0xf7, 0x13, 0xf5,
+ 0xf1, 0x19, 0xfd, 0x16, 0xeb, 0x07, 0x0e, 0xdc, 0x24, 0x0f, 0xa6, 0x1d, 0xeb,
+ 0xd2, 0x39, 0x03, 0xd4, 0xf2, 0xdb, 0xdf, 0x1f, 0xd6, 0xf6, 0xf8, 0x0c, 0xb0,
+ 0xee, 0xfc, 0xee, 0xb3, 0xf3, 0xd4, 0xd4, 0xe5, 0xeb, 0x23, 0x19, 0xf4, 0x02,
+ 0xc4, 0x64, 0xee, 0x7f, 0x20, 0x0e, 0xf6, 0xfc, 0x0d, 0xde, 0x54, 0x13, 0x1c,
+ 0xf5, 0x05, 0x07, 0xe1, 0xf9, 0xfe, 0x1d, 0xeb, 0xb1, 0x31, 0xd3, 0x12, 0xbc,
+ 0x72, 0xe3, 0xd9, 0xbc, 0x2b, 0x04, 0x03, 0x69, 0x23, 0x38, 0xf5, 0xb1, 0x40,
+ 0x1b, 0x0c, 0xa8, 0xf9, 0xe6, 0xc6, 0xe6, 0x08, 0xe4, 0x74, 0x42, 0x1b, 0xcb,
+ 0xf0, 0x26, 0xf4, 0xed, 0x19, 0xf8, 0x0c, 0x12, 0x1d, 0xbf, 0xfa, 0x12, 0x50,
+ 0xeb, 0x22, 0x2e, 0x1e, 0x02, 0xeb, 0x7f, 0x91, 0xd6, 0xe6, 0xff, 0x15, 0x08,
+ 0xe2, 0xf7, 0x0a, 0x09, 0xfa, 0x12, 0x19, 0x02, 0xd3, 0xb4, 0xd9, 0xeb, 0xba,
+ 0x22, 0xe0, 0x05, 0x25, 0xec, 0xd9, 0xc4, 0xe7, 0xce, 0xea, 0xf0, 0x03, 0x42,
+ 0x58, 0x3a, 0xfb, 0xf9, 0x12, 0x2c, 0xdd, 0x4d, 0x5c, 0x2d, 0x32, 0xde, 0xe8,
+ 0x01, 0xfb, 0xcf, 0x14, 0xd1, 0xec, 0xe4, 0xf7, 0x23, 0xbc, 0xb4, 0xd6, 0xe7,
+ 0xef, 0x7f, 0xef, 0xa2, 0xc0, 0x2c, 0xe4, 0x07, 0xf7, 0x3e, 0xc0, 0x42, 0x3f,
+ 0x7b, 0xc6, 0xd4, 0x43, 0x15, 0x06, 0x30, 0xf4, 0x58, 0x16, 0x14, 0xd0, 0x28,
+ 0x16, 0xd1, 0x22, 0x0a, 0x1a, 0xfa, 0x08, 0xf0, 0x2c, 0x18, 0xee, 0xc7, 0xf5,
+ 0xe1, 0xfa, 0xfa, 0xfb, 0xfa, 0xbe, 0xe9, 0x0d, 0x15, 0xe7, 0xc6, 0xfc, 0xfd,
+ 0x09, 0xee, 0xe3, 0xf7, 0x2a, 0x1a, 0x03, 0x23, 0x19, 0x00, 0xea, 0x13, 0xec,
+ 0x3f, 0x10, 0xf6, 0x1f, 0x48, 0x7f, 0x10, 0x11, 0xf4, 0x21, 0x04, 0x0d, 0x13,
+ 0x04, 0xd8, 0xf5, 0x21, 0x2c, 0xb6, 0x28, 0x3a, 0xe9, 0xeb, 0x57, 0x2a, 0x59,
+ 0x28, 0x19, 0x29, 0xb5, 0x4c, 0xd1, 0xf8, 0xd5, 0xfa, 0x01, 0xff, 0xeb, 0x18,
+ 0x81, 0xfc, 0xe2, 0xfd, 0xea, 0xde, 0x16, 0x1c, 0xed, 0x5e, 0x27, 0x07, 0xd2,
+ 0x2e, 0xe4, 0x0e, 0x24, 0xf9, 0xc5, 0x3b, 0xde, 0xfc, 0x13, 0x37, 0x9f, 0xfc,
+ 0xe1, 0xee, 0x12, 0x0f, 0x07, 0x1a, 0xe1, 0xe7, 0xf8, 0x33, 0xda, 0x23, 0xb6,
+ 0xcd, 0xde, 0xdf, 0x01, 0x65, 0xab, 0x15, 0xf5, 0x26, 0xff, 0xe5, 0xbd, 0x1d,
+ 0x39, 0x23, 0x11, 0xd5, 0xb3, 0x27, 0xed, 0x17, 0x21, 0xd9, 0x22, 0xd5, 0x01,
+ 0x3c, 0xf8, 0xf7, 0x2a, 0x7f, 0xf7, 0xdd, 0xeb, 0x23, 0x0f, 0x0e, 0x45, 0xd2,
+ 0x25, 0x75, 0xe2, 0xb0, 0xe7, 0x04, 0x14, 0x1a, 0xe0, 0x95, 0xec, 0xef, 0xad,
+ 0xde, 0x4c, 0x03, 0x05, 0x3a, 0xce, 0x21, 0xdc, 0xbc, 0x4c, 0x9b, 0xf2, 0x23,
+ 0x02, 0x15, 0x17, 0xfd, 0xea, 0x0e, 0x0e, 0xc0, 0x54, 0xfb, 0x05, 0x02, 0xd2,
+ 0xdc, 0xf3, 0x25, 0xe1, 0x1e, 0x22, 0xf3, 0x04, 0x9d, 0xe7, 0xfd, 0x19, 0x05,
+ 0x37, 0x05, 0xd4, 0xc2, 0xc3, 0x1a, 0x40, 0xee, 0xe0, 0xfb, 0xdb, 0xe3, 0x11,
+ 0x4e, 0x2c, 0x26, 0x10, 0xdc, 0x2e, 0xfb, 0xed, 0x06, 0x17, 0xeb, 0xda, 0x11,
+ 0xd1, 0xef, 0x37, 0x10, 0x7f, 0x01, 0x12, 0x09, 0xde, 0xe0, 0x14, 0x04, 0x0d,
+ 0x21, 0xea, 0x2e, 0xb7, 0x1b, 0x00, 0xeb, 0xf0, 0xe7, 0x2c, 0x24, 0x79, 0x1f,
+ 0xf0, 0xe0, 0xdc, 0x18, 0xd3, 0xdd, 0x03, 0x1c, 0x05, 0xd7, 0xe9, 0x21, 0xd4,
+ 0xe0, 0x43, 0x2e, 0x0a, 0xf3, 0x09, 0x1a, 0x30, 0x65, 0xe8, 0x3c, 0x20, 0x1d,
+ 0x0f, 0xf2, 0xb7, 0xfc, 0xd5, 0x7f, 0xbb, 0xff, 0xa9, 0xe9, 0xd4, 0x3b, 0x36,
+ 0x18, 0x30, 0xd7, 0xe2, 0xfd, 0x01, 0x9d, 0x39, 0x08, 0xfb, 0xa9, 0x32, 0xb6,
+ 0xff, 0xe8, 0x2f, 0xb9, 0x58, 0x5c, 0x15, 0xd3, 0xb9, 0x02, 0x19, 0x81, 0xe9,
+ 0xc3, 0x18, 0x4e, 0xeb, 0x57, 0xbf, 0xb5, 0x2a, 0xdc, 0xc6, 0xe6, 0xff, 0xe6,
+ 0xed, 0x67, 0x30, 0xa6, 0x5f, 0xad, 0x09, 0xce, 0xd8, 0x17, 0xc7, 0x0e, 0x06,
+ 0xc2, 0xff, 0x0f, 0x1e, 0x01, 0xb0, 0x37, 0xff, 0xdd, 0x29, 0xec, 0xf2, 0x06,
+ 0xd4, 0x0c, 0xe1, 0xfb, 0xda, 0x24, 0xfd, 0x08, 0x5a, 0xfd, 0x14, 0xff, 0x0c,
+ 0xf4, 0xe7, 0xa4, 0xe4, 0x07, 0xed, 0xed, 0xbe, 0x2d, 0x2f, 0xad, 0xeb, 0x11,
+ 0xde, 0x0d, 0x2d, 0x58, 0x0d, 0xa2, 0x01, 0xf9, 0x06, 0xb7, 0xd6, 0xcf, 0x99,
+ 0xfd, 0x62, 0xfb, 0x38, 0xbe, 0x88, 0x35, 0x39, 0xf5, 0xf6, 0xec, 0xff, 0xfa,
+ 0xfb, 0xbd, 0x36, 0xba, 0x0d, 0x30, 0x50, 0x12, 0x28, 0x22, 0x81, 0x00, 0xd7,
+ 0xff, 0xfd, 0xf1, 0xb6, 0xf1, 0xb1, 0xf3, 0x38, 0xdb, 0x30, 0x48, 0x1b, 0x1a,
+ 0xd4, 0xd8, 0x22, 0xfb, 0x13, 0xdd, 0xec, 0xe6, 0xf0, 0xf6, 0x56, 0x08, 0xc8,
+ 0x0a, 0x1e, 0x4e, 0x1e, 0xac, 0x07, 0x02, 0x52, 0xf6, 0xd6, 0x59, 0xb5, 0x01,
+ 0xf0, 0x18, 0xcf, 0xfa, 0x1f, 0x22, 0x7f, 0x1b, 0xee, 0x79, 0x00, 0x00, 0x03,
+ 0xe8, 0xca, 0x14, 0xf7, 0xf4, 0xc5, 0xf7, 0x2e, 0x31, 0xd8, 0x03, 0xe9, 0x0c,
+ 0xf9, 0x1a, 0x32, 0x7c, 0xc5, 0xd7, 0x1c, 0xf7, 0x1c, 0xa8, 0x19, 0xbc, 0x0f,
+ 0x08, 0x3b, 0x0a, 0xa6, 0x2a, 0x0a, 0x0d, 0xd0, 0xb0, 0xf6, 0xfc, 0x14, 0xa7,
+ 0xe4, 0x1b, 0x34, 0x1d, 0x00, 0x06, 0x5f, 0xb6, 0x13, 0x38, 0xfc, 0x16, 0xed,
+ 0xff, 0xb3, 0x81, 0xf4, 0x2e, 0x2f, 0xc1, 0xeb, 0x03, 0x36, 0x2c, 0xd6, 0xf4,
+ 0x64, 0x5c, 0xe2, 0x48, 0xb6, 0xe3, 0x2d, 0xf9, 0xce, 0xe0, 0x11, 0x1f, 0x1f,
+ 0xaf, 0xe9, 0x1b, 0x43, 0xe3, 0x35, 0x4c, 0xf9, 0x68, 0xda, 0x24, 0xfa, 0x0b,
+ 0x50, 0xf9, 0xca, 0x16, 0xdd, 0x28, 0x0b, 0xf6, 0x49, 0x10, 0x0d, 0xdb, 0x0e,
+ 0x0c, 0x0c, 0xec, 0xfb, 0xfc, 0x0c, 0x1e, 0xef, 0xd7, 0xca, 0xb8, 0xea, 0x0b,
+ 0x0e, 0xc1, 0xed, 0xf5, 0xc6, 0xeb, 0x04, 0x7f, 0x01, 0xcb, 0x17, 0xff, 0xe1,
+ 0x7e, 0xfd, 0xed, 0x19, 0x0e, 0x17, 0x1c, 0x09, 0x2a, 0xe7, 0xe9, 0x10, 0xe5,
+ 0xe6, 0x25, 0xc7, 0xe6, 0xeb, 0xd0, 0xe4, 0xec, 0xdb, 0xd7, 0xf4, 0xfb, 0xd2,
+ 0x08, 0xfa, 0xf0, 0xe9, 0xf6, 0xd9, 0xf0, 0x12, 0xea, 0x1a, 0x11, 0x04, 0xef,
+ 0xed, 0x08, 0xfe, 0x00, 0xca, 0xe5, 0xd5, 0x1f, 0xef, 0x18, 0x7f, 0x2e, 0x13,
+ 0x10, 0x13, 0xf8, 0xf5, 0xed, 0x0c, 0xf6, 0xd8, 0xe7, 0x02, 0xd0, 0x12, 0xdd,
+ 0xf1, 0xda, 0xfc, 0xe8, 0xfa, 0xd4, 0xeb, 0xe8, 0xd8, 0xe3, 0xe2, 0x16, 0xed,
+ 0x2f, 0x07, 0x22, 0xfd, 0xfa, 0xf3, 0xee, 0xfb, 0xfe, 0xed, 0x47, 0xac, 0xe7,
+ 0xc6, 0x05, 0x01, 0xcc, 0x1e, 0x03, 0x09, 0x1a, 0x4a, 0xea, 0xef, 0xe5, 0xf4,
+ 0xe6, 0x19, 0x2c, 0x36, 0x07, 0x81, 0x34, 0xde, 0x1e, 0xfa, 0x2f, 0xe7, 0xfb,
+ 0xeb, 0x0d, 0x18, 0x1c, 0xee, 0xcf, 0xec, 0xe6, 0x20, 0xca, 0x12, 0xf3, 0xea,
+ 0x22, 0xe7, 0xee, 0xdb, 0x0e, 0xec, 0xfb, 0x0a, 0xf1, 0x0a, 0xdd, 0x3b, 0xe9,
+ 0xf2, 0x15, 0xf3, 0x29, 0xfd, 0xe7, 0x14, 0xf8, 0xfe, 0xe9, 0xd7, 0x1c, 0x7f,
+ 0xe6, 0xe1, 0xfa, 0xf3, 0x17, 0xff, 0xf5, 0xda, 0xe6, 0x21, 0xe9, 0x22, 0xd3,
+ 0xb4, 0x0f, 0xff, 0x04, 0x07, 0xff, 0xf0, 0xe3, 0xf1, 0x26, 0x45, 0xf0, 0xf9,
+ 0xf8, 0xe6, 0x0c, 0x26, 0xc4, 0xcb, 0xd5, 0xfe, 0xf3, 0x0b, 0xcd, 0xf7, 0xea,
+ 0xf2, 0x04, 0x15, 0xde, 0xf1, 0x1b, 0xfb, 0x26, 0x18, 0x12, 0xff, 0xfa, 0x10,
+ 0x38, 0x14, 0xf4, 0x0b, 0xc0, 0xe8, 0xf8, 0x30, 0xbd, 0x28, 0xc0, 0x3f, 0xde,
+ 0xe2, 0xec, 0x13, 0xde, 0x32, 0xd7, 0xf4, 0x1c, 0xd7, 0xf2, 0xf7, 0xf2, 0xdc,
+ 0xd5, 0xc1, 0xef, 0xaa, 0x3f, 0x0b, 0x13, 0x1b, 0xbb, 0x19, 0xd1, 0x04, 0xf5,
+ 0x7f, 0xd3, 0x03, 0x03, 0x3c, 0x1b, 0x12, 0x1e, 0x14, 0xcd, 0x0a, 0xd9, 0x31,
+ 0x3e, 0x47, 0xf1, 0xfe, 0x04, 0x04, 0xe2, 0x23, 0x00, 0xe8, 0x41, 0x08, 0xbf,
+ 0xa7, 0xf1, 0xe7, 0x12, 0xc9, 0x33, 0xe3, 0x0e, 0xeb, 0x98, 0xaa, 0xec, 0xf5,
+ 0x7f, 0x01, 0x01, 0xdc, 0xed, 0xee, 0x36, 0x20, 0xfd, 0xe4, 0xf6, 0x05, 0xed,
+ 0x14, 0xe2, 0xec, 0xe9, 0xec, 0xf4, 0x3b, 0xee, 0x22, 0x00, 0x1f, 0xe5, 0xed,
+ 0xe2, 0x03, 0x08, 0xdd, 0x00, 0x56, 0x28, 0xdc, 0x09, 0xc0, 0xef, 0xdd, 0xec,
+ 0xf8, 0xe2, 0xdb, 0x10, 0xf6, 0x05, 0xfe, 0x18, 0xdd, 0x1a, 0x02, 0xf8, 0x93,
+ 0xbc, 0x0e, 0x3e, 0x0d, 0xe4, 0xaa, 0x03, 0xdd, 0xe3, 0x44, 0xe4, 0x39, 0x07,
+ 0xdd, 0xe8, 0xfc, 0x33, 0x12, 0xfd, 0xf4, 0x2c, 0xda, 0xf7, 0x02, 0xe9, 0x1c,
+ 0x0c, 0x31, 0x22, 0x1d, 0x15, 0x30, 0xf1, 0xc6, 0xfc, 0xe7, 0x7f, 0xf3, 0x02,
+ 0xef, 0x1d, 0x31, 0xf9, 0xe2, 0xc3, 0xf9, 0x1f, 0x0f, 0x22, 0x12, 0xf5, 0x3a,
+ 0xe4, 0x07, 0x0b, 0xea, 0xdf, 0xe3, 0x1b, 0xe2, 0x24, 0x04, 0x74, 0x22, 0xb9,
+ 0x34, 0x18, 0xe2, 0xcd, 0xf4, 0x46, 0xd4, 0xf2, 0x1d, 0xf7, 0xe6, 0xea, 0x1a,
+ 0xfd, 0x17, 0xfb, 0x28, 0xee, 0xf7, 0x03, 0xfa, 0xea, 0x0b, 0xde, 0xef, 0xf1,
+ 0xdf, 0xf7, 0x0e, 0xff, 0x00, 0x0e, 0x1f, 0x02, 0x36, 0x1b, 0x7f, 0x14, 0xf3,
+ 0x1e, 0xf7, 0xd7, 0x26, 0xe5, 0xfc, 0xfb, 0xea, 0xce, 0xd8, 0xe9, 0x00, 0xc5,
+ 0x2e, 0xea, 0x30, 0xe3, 0xfc, 0xf9, 0xfc, 0xa2, 0xfa, 0xcb, 0x3f, 0xfa, 0x0f,
+ 0x08, 0xa1, 0x20, 0x05, 0x21, 0x81, 0x2d, 0xd4, 0x04, 0x82, 0xc1, 0xa9, 0xa6,
+ 0xbd, 0xfe, 0xcb, 0xf9, 0x01, 0x18, 0x2b, 0x17, 0x0a, 0xc1, 0xf2, 0x37, 0xdc,
+ 0xb3, 0xf0, 0xd2, 0x4a, 0x37, 0xfe, 0xa4, 0xc1, 0xe1, 0xc6, 0x36, 0xed, 0x04,
+ 0xdf, 0x18, 0x01, 0xc4, 0x13, 0xfd, 0x39, 0x1f, 0xb5, 0xe0, 0x44, 0x07, 0x9f,
+ 0xe2, 0x81, 0x60, 0xbe, 0xd5, 0x15, 0xd6, 0xb5, 0xf0, 0x3b, 0xbb, 0x00, 0x06,
+ 0x03, 0x57, 0x08, 0x13, 0x10, 0x1f, 0x2d, 0x09, 0x13, 0x17, 0xd8, 0xac, 0xd4,
+ 0x0f, 0xf8, 0x0a, 0xdf, 0xc0, 0x14, 0xc3, 0xf6, 0xcd, 0xfb, 0x25, 0xf2, 0x0f,
+ 0xf4, 0x03, 0xf2, 0xc0, 0xf0, 0xeb, 0x24, 0xf6, 0xf8, 0x2c, 0xdb, 0x16, 0xf9,
+ 0x23, 0x15, 0x36, 0x05, 0xbf, 0x06, 0x58, 0xb3, 0x05, 0x65, 0x28, 0x7f, 0xfa,
+ 0xe0, 0x1b, 0xe2, 0xf8, 0x35, 0x1d, 0x62, 0x29, 0xc8, 0x0f, 0x06, 0x06, 0xfa,
+ 0x22, 0x07, 0xb3, 0xe0, 0x1b, 0xcc, 0x14, 0xe3, 0xdd, 0xfa, 0xf6, 0x0a, 0xe8,
+ 0xe5, 0xec, 0xfa, 0x2a, 0x17, 0xd2, 0x47, 0x11, 0xf2, 0x13, 0xe8, 0x1d, 0x3c,
+ 0x7c, 0xc6, 0xbc, 0x0f, 0xfb, 0xec, 0xfd, 0x18, 0x81, 0xc9, 0xe9, 0x0e, 0xee,
+ 0x06, 0xf3, 0x1f, 0x25, 0xfc, 0x11, 0x74, 0x06, 0xe4, 0xd7, 0x04, 0x0b, 0x1e,
+ 0x0a, 0xfc, 0x55, 0xc9, 0xdc, 0x12, 0xe1, 0xfe, 0x19, 0xd2, 0xda, 0xd2, 0xa2,
+ 0xea, 0x34, 0x20, 0x0d, 0x42, 0x05, 0x0a, 0xc1, 0xb1, 0xce, 0x11, 0xb6, 0x02,
+ 0x01, 0x29, 0x1f, 0xd8, 0x40, 0xe3, 0x62, 0xc7, 0x14, 0x09, 0xd1, 0xef, 0x11,
+ 0x3d, 0xed, 0xc0, 0xc1, 0xe9, 0xe9, 0x13, 0x3f, 0x23, 0x81, 0x16, 0xd3, 0x0c,
+ 0xde, 0x40, 0xf2, 0x1e, 0x3e, 0x13, 0xfe, 0xd2, 0xeb, 0xdf, 0x10, 0xda, 0xdb,
+ 0x13, 0x03, 0x11, 0xad, 0xdf, 0xf6, 0x06, 0x56, 0x10, 0x10, 0xd7, 0xfa, 0xbe,
+ 0xf9, 0x12, 0xfb, 0x31, 0xe0, 0x0b, 0x30, 0xd9, 0xe9, 0x08, 0xea, 0x0d, 0xce,
+ 0x0f, 0x23, 0xf1, 0x03, 0xf8, 0xe8, 0xfe, 0xdf, 0xce, 0x29, 0xfb, 0xec, 0xcc,
+ 0x2c, 0xc0, 0xcd, 0xec, 0x13, 0x7f, 0xf4, 0x18, 0xd1, 0x0a, 0xc1, 0xfb, 0xfe,
+ 0x05, 0xe6, 0x0f, 0x0c, 0xfb, 0x0f, 0x30, 0x13, 0xe1, 0xd4, 0xf2, 0xea, 0xde,
+ 0xfe, 0x2c, 0xf9, 0xde, 0x18, 0x16, 0xf9, 0xea, 0xe1, 0x2e, 0x1e, 0xdc, 0xed,
+ 0x3c, 0x07, 0xfa, 0x06, 0x13, 0xfd, 0xcf, 0x04, 0xf3, 0x15, 0x0d, 0x81, 0xe5,
+ 0x08, 0xb8, 0xc8, 0xf6, 0xea, 0x14, 0xf7, 0xef, 0xea, 0x43, 0x19, 0xeb, 0x3d,
+ 0xf9, 0x1b, 0xb7, 0x0b, 0x14, 0x0e, 0xed, 0xd5, 0xf9, 0xb7, 0x10, 0xe5, 0x4b,
+ 0xee, 0xd2, 0x17, 0xf2, 0x14, 0x25, 0xfa, 0xd8, 0x05, 0x06, 0xd1, 0x17, 0xf8,
+ 0xf7, 0xc6, 0xc9, 0xbc, 0xfd, 0xe5, 0xf9, 0xd3, 0xd2, 0xcb, 0xd4, 0xce, 0x0a,
+ 0xc9, 0xd3, 0xfe, 0xb3, 0x5e, 0x0d, 0xf5, 0x0c, 0xcd, 0x1c, 0x7f, 0xe8, 0x9a,
+ 0x15, 0x63, 0x30, 0x08, 0x3b, 0x0a, 0x26, 0x9e, 0x26, 0x5c, 0x6e, 0xe5, 0x6a,
+ 0xcd, 0xdc, 0x04, 0xf0, 0xe9, 0xeb, 0xf8, 0x20, 0xbe, 0x2e, 0xdc, 0x11, 0x01,
+ 0xb0, 0xce, 0x2f, 0x1f, 0xe0, 0xf6, 0xa3, 0xf2, 0xb4, 0xe2, 0x1a, 0x32, 0x16,
+ 0xdf, 0x42, 0xe7, 0x07, 0xd6, 0x38, 0xda, 0xc7, 0xcd, 0xeb, 0xf5, 0xdc, 0xff,
+ 0xed, 0x2d, 0x15, 0x17, 0x17, 0x27, 0x02, 0x03, 0x2e, 0x04, 0xea, 0x2e, 0xf4,
+ 0x7f, 0xdd, 0x04, 0x1c, 0x5d, 0xce, 0xd0, 0x00, 0x1f, 0xf5, 0xf2, 0x16, 0x72,
+ 0x07, 0xe0, 0x11, 0x30, 0x1d, 0xd6, 0x0e, 0x2d, 0x22, 0x7d, 0x0e, 0x00, 0xf0,
+ 0xff, 0xcc, 0x5a, 0xcb, 0x19, 0xfc, 0xd2, 0x9d, 0xe3, 0xce, 0x14, 0xfb, 0x4b,
+ 0x0e, 0xd4, 0xd9, 0xde, 0x1b, 0xa2, 0x00, 0xbc, 0xcf, 0xbf, 0x0a, 0xfc, 0xef,
+ 0x3f, 0x46, 0x40, 0x41, 0x10, 0x1e, 0xfe, 0x46, 0xe7, 0xce, 0xf8, 0xc3, 0x54,
+ 0x12, 0x60, 0xd2, 0xf3, 0xeb, 0xc2, 0xfb, 0x32, 0x63, 0x42, 0xd4, 0x41, 0xbf,
+ 0x41, 0x38, 0xe5, 0x38, 0xea, 0xdf, 0xf8, 0x07, 0x84, 0xb9, 0xf3, 0xe3, 0xcf,
+ 0xef, 0xcd, 0xc6, 0x34, 0xbd, 0x2c, 0x97, 0xc9, 0x81, 0x07, 0xd0, 0x2e, 0x10,
+ 0x13, 0xc3, 0xb0, 0x07, 0x05, 0xcb, 0xf0, 0xf8, 0x17, 0x19, 0x15, 0xe9, 0xfe,
+ 0xe2, 0x29, 0xfa, 0x3d, 0xb8, 0x01, 0xcd, 0x2f, 0xee, 0x04, 0xd8, 0xf6, 0xf8,
+ 0x5f, 0x98, 0xff, 0xd8, 0xd4, 0x54, 0x6a, 0xe9, 0x2c, 0x39, 0xee, 0x10, 0x19,
+ 0x19, 0xf8, 0xe8, 0xce, 0xf7, 0xfc, 0xb8, 0x14, 0xd8, 0x6c, 0x19, 0x30, 0x2c,
+ 0xf5, 0xbe, 0x24, 0xf2, 0xfb, 0xf2, 0xfc, 0xe3, 0xe2, 0xc3, 0xc1, 0xba, 0xaa,
+ 0x7f, 0x53, 0x08, 0x47, 0xf5, 0x2f, 0xfe, 0x54, 0x14, 0xba, 0x17, 0xea, 0x1c,
+ 0xff, 0xb6, 0x0e, 0xec, 0x1c, 0xf8, 0x32, 0xd8, 0xce, 0x24, 0x51, 0xe7, 0x1b,
+ 0x62, 0x60, 0x00, 0xc4, 0xd1, 0xc5, 0xcb, 0xca, 0xba, 0xc0, 0x00, 0x02, 0xfc,
+ 0x25, 0x9e, 0xff, 0x3f, 0xf6, 0x11, 0x41, 0xf0, 0xf4, 0x26, 0x10, 0x0b, 0xd2,
+ 0xfc, 0x00, 0x7f, 0x5b, 0x1d, 0xc3, 0x36, 0xc5, 0x3d, 0xfe, 0x10, 0x49, 0x48,
+ 0xdb, 0xc0, 0x0f, 0xa4, 0x42, 0x96, 0x31, 0xbc, 0xd2, 0x2d, 0x2e, 0x59, 0x24,
+ 0xe4, 0x0c, 0x22, 0x4d, 0x0b, 0xae, 0xf6, 0xeb, 0xc8, 0x09, 0x02, 0xde, 0x30,
+ 0x08, 0xbb, 0x3f, 0x3e, 0xbe, 0x0f, 0x09, 0x1b, 0xe8, 0x01, 0x3a, 0x73, 0xe9,
+ 0x2b, 0xe4, 0x25, 0xec, 0x05, 0x1a, 0x20, 0x13, 0xe9, 0xf8, 0xca, 0xfb, 0x0e,
+ 0xe7, 0x30, 0xe7, 0x22, 0x1b, 0xd6, 0xe7, 0x5d, 0x7f, 0xce, 0xc2, 0xcf, 0xc8,
+ 0xfd, 0xe9, 0x6e, 0x00, 0xe9, 0x4b, 0x2b, 0x91, 0xd6, 0xf4, 0xf4, 0x21, 0xbd,
+ 0xa6, 0x2c, 0xe6, 0xf3, 0xea, 0x1c, 0x0e, 0x07, 0x69, 0xee, 0xd7, 0xf4, 0xf3,
+ 0xed, 0x14, 0xc5, 0xf0, 0xea, 0xf5, 0xed, 0x0b, 0x35, 0x22, 0xd6, 0x0b, 0xd6,
+ 0xcc, 0x1c, 0x21, 0x37, 0x05, 0x1c, 0xdd, 0xd0, 0x18, 0xe8, 0x9d, 0x6b, 0x12,
+ 0x1c, 0x13, 0x4c, 0xdb, 0x3a, 0xee, 0xcb, 0x7f, 0x07, 0xf6, 0xe0, 0x98, 0x01,
+ 0x0d, 0x31, 0xdb, 0x1c, 0xb9, 0x0c, 0xe0, 0x14, 0xd0, 0x00, 0xe4, 0xda, 0xe8,
+ 0x3b, 0xcc, 0x04, 0xe3, 0x0d, 0x38, 0xf3, 0xfe, 0xf5, 0xe5, 0x3f, 0xc6, 0xcc,
+ 0x1c, 0x35, 0xe2, 0xf9, 0x14, 0x1e, 0xb7, 0x03, 0xd5, 0x7f, 0x0a, 0x25, 0x21,
+ 0x41, 0x32, 0x1d, 0xed, 0x24, 0xfc, 0x22, 0x3a, 0x19, 0xef, 0x11, 0xf5, 0xf7,
+ 0x0e, 0x30, 0xf6, 0xed, 0x25, 0x1d, 0x77, 0x00, 0xf0, 0xe2, 0x08, 0xf5, 0x28,
+ 0x7f, 0x16, 0x3d, 0xc9, 0x1b, 0xf3, 0xf0, 0xf1, 0x16, 0x82, 0x10, 0xcb, 0xf2,
+ 0x2f, 0xef, 0xd9, 0xdd, 0x02, 0xfd, 0xeb, 0x08, 0xf7, 0x21, 0xfd, 0xf6, 0xf1,
+ 0x0f, 0xd2, 0xd8, 0x10, 0xf0, 0xe1, 0xe5, 0xd3, 0xf1, 0x0a, 0xfd, 0x19, 0x58,
+ 0xf5, 0x27, 0xf5, 0x32, 0xd2, 0xe5, 0x34, 0xeb, 0x23, 0x5a, 0xf8, 0x23, 0x03,
+ 0xda, 0x00, 0x15, 0x15, 0x27, 0x33, 0xf7, 0x04, 0xe7, 0xe5, 0x10, 0xf1, 0x2f,
+ 0x06, 0x0e, 0xcc, 0xd9, 0x09, 0x0d, 0xb7, 0x26, 0x20, 0xfb, 0x0e, 0xc6, 0x01,
+ 0xf2, 0xe2, 0xee, 0xc6, 0x2b, 0x9f, 0xd2, 0x20, 0x02, 0xed, 0xda, 0x2f, 0xe0,
+ 0xf1, 0xf8, 0x11, 0x4e, 0xb8, 0x1d, 0xea, 0xf2, 0xee, 0xf8, 0x05, 0x23, 0xf8,
+ 0xdc, 0xa0, 0x59, 0x24, 0xe1, 0xe9, 0xd9, 0x0e, 0xf8, 0xe7, 0xe4, 0x4e, 0x35,
+ 0x0c, 0x7f, 0xdd, 0xba, 0xe0, 0xc6, 0xb6, 0x44, 0x16, 0xe1, 0x13, 0xe3, 0x38,
+ 0xf8, 0xe7, 0x16, 0xae, 0xdc, 0xdf, 0xcd, 0x45, 0xde, 0xfb, 0x3f, 0xd3, 0x06,
+ 0x22, 0xeb, 0x16, 0x06, 0xe3, 0xf6, 0xd0, 0x08, 0x08, 0xf0, 0x08, 0x1d, 0xda,
+ 0xba, 0xdd, 0xf7, 0x08, 0xf5, 0xf4, 0x17, 0xec, 0xef, 0x81, 0x37, 0xbd, 0x06,
+ 0x2a, 0x1f, 0xca, 0xfc, 0xf8, 0xef, 0x12, 0x69, 0x09, 0xfe, 0x06, 0x04, 0xde,
+ 0x0c, 0xe4, 0x12, 0xe4, 0x0d, 0xec, 0xdb, 0x88, 0xf4, 0xf0, 0x28, 0xeb, 0xe0,
+ 0x3a, 0xa3, 0xf1, 0xa5, 0x15, 0x0e, 0xea, 0xf9, 0x0a, 0x16, 0x15, 0x19, 0x10,
+ 0xad, 0x06, 0xf1, 0x06, 0xae, 0x08, 0x24, 0x35, 0xe1, 0xc4, 0x9f, 0xd7, 0xa2,
+ 0xda, 0xdd, 0x45, 0x19, 0x39, 0x14, 0xf3, 0x3c, 0xf1, 0xdb, 0x34, 0xf2, 0x07,
+ 0x27, 0xc1, 0x11, 0xdf, 0xd9, 0xb0, 0x1d, 0x5c, 0xfe, 0xe4, 0x0b, 0xe7, 0xf4,
+ 0x32, 0x1c, 0x7f, 0x35, 0x05, 0xef, 0xf5, 0x03, 0xeb, 0xa3, 0xdd, 0x20, 0x07,
+ 0x11, 0x2a, 0x13, 0xd8, 0xd9, 0xd3, 0xc0, 0xe3, 0xcc, 0xed, 0xcd, 0xfc, 0xcd,
+ 0xde, 0x31, 0xda, 0x07, 0xe9, 0xe9, 0xf9, 0x25, 0x42, 0xcb, 0x1b, 0x43, 0xec,
+ 0x39, 0xd7, 0x32, 0x17, 0xdb, 0xf3, 0x10, 0xf1, 0x3c, 0xc0, 0x07, 0xd6, 0x1d,
+ 0x81, 0xfa, 0xc3, 0x0d, 0xfc, 0x1c, 0xff, 0xc8, 0x05, 0xf0, 0xc9, 0x1c, 0x18,
+ 0xe5, 0x3b, 0xf3, 0xe9, 0xf6, 0xc8, 0xdd, 0x3b, 0xd4, 0x46, 0xe5, 0x0c, 0x10,
+ 0x03, 0x0b, 0x1b, 0x07, 0x44, 0x31, 0x34, 0x03, 0xe9, 0x44, 0xcf, 0x22, 0xe5,
+ 0xb5, 0x0e, 0x21, 0x66, 0xd7, 0x0c, 0xbd, 0xae, 0xf5, 0xe0, 0x63, 0xef, 0x7f,
+ 0xec, 0xf1, 0x21, 0xd1, 0xbd, 0x00, 0x32, 0xdf, 0xe6, 0xe0, 0xd3, 0xfc, 0xfa,
+ 0x2e, 0xe7, 0xf4, 0xf0, 0xaa, 0xde, 0xf5, 0x3a, 0xf8, 0xd8, 0x19, 0xfd, 0xe6,
+ 0xd1, 0xee, 0xe9, 0xf4, 0xe5, 0xf4, 0x42, 0x20, 0xc3, 0x4f, 0xd5, 0x49, 0x3b,
+ 0x5c, 0xe2, 0x0d, 0x69, 0x2b, 0x10, 0xea, 0x44, 0x06, 0x7f, 0x17, 0xe7, 0xcc,
+ 0xcb, 0x21, 0x4a, 0x45, 0xdf, 0x6e, 0x2c, 0xe2, 0x18, 0xc2, 0xd7, 0x3b, 0xa5,
+ 0x5b, 0x1f, 0x00, 0xfc, 0x1c, 0xa9, 0x9c, 0x9a, 0xee, 0xe3, 0xc1, 0xdd, 0xe3,
+ 0x4c, 0x45, 0x92, 0xba, 0xfe, 0x08, 0x32, 0xb5, 0x16, 0xf2, 0x0c, 0x2a, 0xce,
+ 0xad, 0xda, 0xa0, 0x60, 0x12, 0xc0, 0xec, 0x12, 0x06, 0x1e, 0x7f, 0x1c, 0xf3,
+ 0x10, 0xdc, 0xed, 0xcb, 0xec, 0x0e, 0xff, 0x08, 0xde, 0x0f, 0xf6, 0xf6, 0x0b,
+ 0xe9, 0x11, 0x0b, 0xf2, 0xf7, 0xce, 0x09, 0x06, 0xe8, 0xe3, 0xf1, 0x22, 0xd7,
+ 0xff, 0x0b, 0x04, 0x32, 0xe7, 0xe8, 0xed, 0xcf, 0x0a, 0x3b, 0xf5, 0xe9, 0x28,
+ 0x00, 0x08, 0xda, 0x05, 0x1c, 0xee, 0x01, 0x0b, 0x07, 0xf4, 0xfd, 0xb6, 0x14,
+ 0x2b, 0xd6, 0xb2, 0x08, 0xe8, 0x2e, 0xff, 0x17, 0x5a, 0x3b, 0x09, 0x24, 0xe0,
+ 0xdd, 0x55, 0x3b, 0xde, 0x05, 0x11, 0xbe, 0x12, 0x02, 0xe6, 0xde, 0x81, 0x0b,
+ 0x03, 0xf2, 0xf2, 0x5b, 0x08, 0xce, 0xef, 0x3b, 0xdb, 0x73, 0x08, 0x2c, 0x04,
+ 0x34, 0x0c, 0x29, 0xf7, 0xea, 0xf9, 0x02, 0xe8, 0x52, 0x02, 0x03, 0xf0, 0x40,
+ 0xec, 0xe6, 0xf8, 0xb6, 0x48, 0xf1, 0x22, 0x35, 0x12, 0xd7, 0x09, 0x0e, 0xc0,
+ 0xfd, 0x3c, 0x1b, 0x35, 0x46, 0x6c, 0xdc, 0x22, 0x8d, 0x39, 0xc0, 0x15, 0x2b,
+ 0x84, 0x29, 0x38, 0x69, 0x07, 0x08, 0x20, 0xff, 0x2f, 0xf4, 0x12, 0xe4, 0xfe,
+ 0x33, 0xed, 0xe9, 0xe3, 0x04, 0xd9, 0xe0, 0xa1, 0xae, 0x7f, 0x10, 0x12, 0x38,
+ 0xf0, 0xb3, 0xcd, 0x4d, 0xd5, 0x04, 0xdc, 0x18, 0x23, 0x16, 0x1d, 0x93, 0x0e,
+ 0xcf, 0x07, 0x1c, 0xa7, 0x61, 0x02, 0x29, 0x14, 0xdd, 0xdc, 0x31, 0xe8, 0xf8,
+ 0x0e, 0xbc, 0xf2, 0x3f, 0xa7, 0xa2, 0xe2, 0x81, 0x0e, 0xce, 0xf8, 0xfb, 0x08,
+ 0xe3, 0x1e, 0x13, 0xdf, 0xde, 0xef, 0xe5, 0xd0, 0x1a, 0xee, 0xf8, 0xee, 0x17,
+ 0xee, 0xe5, 0x3e, 0xf3, 0xde, 0x03, 0x19, 0x2b, 0x54, 0xcb, 0x22, 0x05, 0xf1,
+ 0x42, 0x22, 0x32, 0x40, 0x39, 0xe2, 0xe4, 0xb9, 0x30, 0xcb, 0x16, 0x2d, 0x19,
+ 0xf8, 0x89, 0x14, 0x0f, 0x14, 0xe8, 0xe0, 0x0e, 0xc7, 0x50, 0x1e, 0x1e, 0xaa,
+ 0xf0, 0x1a, 0x0b, 0xc5, 0x17, 0x91, 0xe6, 0x4d, 0xf5, 0xbf, 0xd0, 0xe7, 0xf7,
+ 0xe9, 0x09, 0x19, 0xef, 0xc6, 0x05, 0x2d, 0xec, 0xab, 0x16, 0x13, 0x01, 0xfd,
+ 0x10, 0xfd, 0x2c, 0xed, 0x48, 0x12, 0x12, 0x9e, 0x09, 0xf1, 0xfe, 0xd9, 0x1e,
+ 0xb2, 0xe4, 0x7f, 0x03, 0x0f, 0x2f, 0xd8, 0x3e, 0x19, 0x0e, 0xa6, 0x11, 0x00,
+ 0x02, 0x1d, 0xfb, 0xc3, 0xb2, 0x0b, 0xf5, 0xfa, 0x30, 0xdd, 0xe4, 0x51, 0xe3,
+ 0xe4, 0xe4, 0x2a, 0x14, 0xd8, 0x81, 0x60, 0x03, 0x17, 0xa9, 0xef, 0x08, 0x03,
+ 0xc9, 0xeb, 0xb6, 0xe2, 0xa8, 0x0d, 0x26, 0xcc, 0x0f, 0xf8, 0x77, 0xf8, 0x20,
+ 0x0b, 0xf9, 0x1d, 0x3b, 0xcd, 0x13, 0xc3, 0x00, 0xa9, 0x36, 0x94, 0x07, 0x24,
+ 0x1e, 0x1b, 0x11, 0x07, 0x0f, 0xf5, 0xba, 0xfb, 0xf7, 0x7d, 0xf0, 0x0b, 0xc2,
+ 0x4f, 0x10, 0x23, 0xfc, 0x1c, 0x1e, 0x05, 0xdf, 0xea, 0x10, 0xef, 0x2f, 0xf5,
+ 0xdd, 0xd2, 0x23, 0x00, 0x40, 0x0f, 0xd6, 0xec, 0x1e, 0x07, 0x05, 0xf9, 0xe6,
+ 0xd4, 0xeb, 0xfb, 0x14, 0x48, 0x00, 0x32, 0xf3, 0xe4, 0xdc, 0x12, 0xfd, 0xcc,
+ 0xf4, 0x43, 0x3f, 0x14, 0x1b, 0xeb, 0xd8, 0x0d, 0x02, 0xed, 0xe4, 0xfb, 0x24,
+ 0x33, 0x1f, 0xf1, 0xf6, 0x3a, 0xf9, 0x09, 0x7f, 0xf9, 0x2c, 0x17, 0xe2, 0x21,
+ 0xf8, 0xea, 0x03, 0x09, 0xc7, 0x38, 0x3b, 0xef, 0x08, 0xfa, 0x07, 0xa3, 0xd2,
+ 0xc9, 0xa0, 0x28, 0x57, 0xf1, 0x16, 0x06, 0xd7, 0x34, 0xe5, 0xec, 0xe7, 0x37,
+ 0x0d, 0xf5, 0x56, 0x2c, 0xcc, 0x2b, 0xf3, 0xf5, 0x0e, 0xc7, 0xde, 0x4d, 0x0a,
+ 0xe0, 0x47, 0x14, 0x17, 0x11, 0x0f, 0x15, 0xf6, 0x11, 0x0f, 0x27, 0xf9, 0x7f,
+ 0xe6, 0x22, 0x29, 0x4a, 0xfa, 0xe8, 0xd8, 0x0b, 0x31, 0x02, 0xd0, 0x0a, 0xfb,
+ 0x29, 0x17, 0x09, 0xd4, 0x3c, 0x51, 0x51, 0x0e, 0xcd, 0xff, 0x0d, 0x19, 0xf8,
+ 0xd4, 0x7f, 0x0d, 0xb9, 0xca, 0xff, 0xe4, 0xff, 0x28, 0xfd, 0xd2, 0xf7, 0x02,
+ 0x0f, 0xd9, 0xde, 0xf3, 0x2a, 0x29, 0xd5, 0x05, 0x3b, 0xf1, 0x0a, 0xd5, 0x46,
+ 0x20, 0xdc, 0x48, 0xd8, 0xe4, 0xf5, 0x42, 0xd2, 0x18, 0xfd, 0x51, 0x32, 0x39,
+ 0xde, 0xd7, 0x08, 0xe1, 0xb9, 0xe9, 0x4d, 0xeb, 0xf3, 0xde, 0xf7, 0xed, 0xc9,
+ 0x4b, 0x25, 0xe5, 0xf5, 0x13, 0xe3, 0x0e, 0x0f, 0xd6, 0xe7, 0x37, 0xd2, 0x26,
+ 0xf9, 0xed, 0xf6, 0x0c, 0x06, 0xf8, 0xed, 0x41, 0x11, 0xe6, 0x33, 0xcb, 0x01,
+ 0xf6, 0xea, 0x12, 0xeb, 0x08, 0xcd, 0xb1, 0x00, 0x22, 0x4d, 0x7e, 0x10, 0x4d,
+ 0x45, 0x26, 0xf4, 0x29, 0x43, 0xe3, 0xf1, 0x24, 0x81, 0xd0, 0xa5, 0xe4, 0xed,
+ 0xf2, 0x1d, 0xcc, 0xdf, 0xfe, 0xe5, 0x09, 0xd8, 0xec, 0x0d, 0x27, 0xf2, 0xd4,
+ 0x0c, 0xfe, 0x13, 0xd4, 0x51, 0xc4, 0xa3, 0xf5, 0x48, 0xc8, 0x32, 0xa3, 0x8f,
+ 0x30, 0x0b, 0x15, 0xd4, 0xc1, 0x02, 0xca, 0x02, 0x2f, 0xce, 0xbe, 0x71, 0x0e,
+ 0x1b, 0xb1, 0xf9, 0x13, 0x4b, 0x1a, 0x29, 0xc6, 0xe9, 0x40, 0xcb, 0xfa, 0xa8,
+ 0x67, 0xc8, 0xd0, 0x81, 0xf5, 0xf8, 0x29, 0xd7, 0x1c, 0xe1, 0x3b, 0x02, 0xfc,
+ 0x50, 0x16, 0xc8, 0x09, 0x95, 0x0f, 0x9f, 0x64, 0xf4, 0xf0, 0xdf, 0xfc, 0xf8,
+ 0x38, 0xa6, 0xfe, 0x1b, 0x0f, 0x67, 0x21, 0x5c, 0x19, 0xda, 0x29, 0xea, 0x05,
+ 0xec, 0x32, 0x04, 0xd7, 0x81, 0x00, 0xd2, 0x03, 0xe6, 0xef, 0x0a, 0xbe, 0x2d,
+ 0x24, 0xec, 0x55, 0xf0, 0x4a, 0x1c, 0xd4, 0x09, 0x06, 0x5d, 0x37, 0x2a, 0x31,
+ 0xc8, 0xf3, 0xbc, 0x1b, 0x05, 0xe8, 0x05, 0x04, 0xd1, 0xe4, 0xd2, 0x13, 0xf5,
+ 0x93, 0x0f, 0xc5, 0x16, 0x56, 0xfa, 0x14, 0x0d, 0xff, 0x10, 0x10, 0x39, 0xf8,
+ 0xdf, 0xd1, 0xbe, 0x1c, 0xcd, 0x32, 0x16, 0x28, 0xc8, 0x55, 0x0b, 0xfe, 0x25,
+ 0x2a, 0xef, 0xdc, 0x9a, 0xd4, 0xf7, 0x05, 0x17, 0xe0, 0xc1, 0x1c, 0x0d, 0x23,
+ 0x13, 0x07, 0x28, 0xf5, 0x06, 0xc8, 0xc2, 0xbd, 0xf4, 0xc7, 0xfa, 0x2b, 0x7f,
+ 0x14, 0x24, 0x4e, 0x09, 0x5f, 0x26, 0x08, 0x36, 0x46, 0x24, 0xd7, 0xc2, 0x1f,
+ 0xf8, 0x11, 0x23, 0x07, 0xbb, 0xdb, 0x11, 0xda, 0xc5, 0x45, 0xde, 0x32, 0x09,
+ 0x32, 0xbe, 0xc2, 0xf2, 0xd2, 0x5a, 0xb6, 0xfe, 0xe4, 0x47, 0xa0, 0xef, 0xf4,
+ 0x16, 0x33, 0xf2, 0x23, 0x3d, 0xea, 0xde, 0xe2, 0x52, 0x07, 0xb4, 0x18, 0x31,
+ 0xe5, 0xff, 0x50, 0x05, 0xe7, 0xf8, 0xf3, 0xe7, 0xd4, 0x41, 0xd0, 0x4e, 0x44,
+ 0x27, 0xff, 0x2a, 0xd4, 0x41, 0xf3, 0xe1, 0xc8, 0xeb, 0xd7, 0x31, 0x2e, 0x20,
+ 0xb9, 0xe5, 0x05, 0xf2, 0x36, 0xe3, 0x10, 0xb5, 0xda, 0xff, 0x1c, 0xb1, 0xf0,
+ 0x27, 0x02, 0x7f, 0xe1, 0xb9, 0x3b, 0xab, 0x25, 0x37, 0x75, 0xa6, 0x46, 0xe8,
+ 0xcf, 0xb7, 0xf8, 0x1c, 0x48, 0xec, 0x06, 0x2c, 0xf2, 0x9b, 0x18, 0x48, 0xcd,
+ 0xde, 0x0f, 0xf2, 0xe1, 0x5c, 0xfa, 0xdf, 0xf7, 0xe9, 0x29, 0xd0, 0x13, 0xe5,
+ 0xe2, 0xe6, 0x0e, 0xd4, 0xf4, 0xf8, 0x1f, 0xc6, 0xe3, 0x40, 0x26, 0xed, 0x33,
+ 0xfa, 0xce, 0x24, 0x7f, 0xe4, 0xcf, 0x0a, 0xef, 0xe7, 0x02, 0x28, 0x4f, 0xd2,
+ 0x00, 0x2f, 0x13, 0xfb, 0xe7, 0x22, 0x1b, 0x9f, 0x65, 0xc4, 0x0f, 0xe8, 0x04,
+ 0x1c, 0x2a, 0x36, 0xe9, 0x6a, 0xbc, 0x27, 0xc4, 0xb6, 0xd3, 0x85, 0xe9, 0xc3,
+ 0x29, 0xe3, 0x35, 0x00, 0x79, 0x0f, 0x06, 0xb8, 0x0b, 0x2b, 0x25, 0xe4, 0xc7,
+ 0x1c, 0x02, 0x47, 0xe1, 0x5e, 0xf9, 0x0f, 0xd3, 0x29, 0xdf, 0xcb, 0x20, 0x1d,
+ 0xaf, 0x2d, 0x7f, 0x1a, 0x18, 0x3f, 0xf9, 0xe8, 0x7c, 0x04, 0x08, 0xfc, 0xd0,
+ 0xb1, 0x49, 0xf5, 0xc5, 0x09, 0x0f, 0x6b, 0x18, 0xda, 0xef, 0x2c, 0x97, 0xc2,
+ 0xc6, 0xea, 0xdf, 0xb7, 0xc6, 0x44, 0x23, 0xd2, 0xf6, 0x99, 0x2f, 0x4e, 0x8e,
+ 0x1f, 0xde, 0x3b, 0x47, 0x33, 0xbb, 0x16, 0x65, 0xca, 0xac, 0x0d, 0xf0, 0xee,
+ 0xe5, 0x1b, 0xe4, 0xfb, 0x81, 0xa3, 0x05, 0x03, 0xe1, 0x11, 0x0d, 0xfb, 0xa6,
+ 0x10, 0xf0, 0xd1, 0x2e, 0x0d, 0x2e, 0xe5, 0x2b, 0xd6, 0xd3, 0xf9, 0xee, 0x68,
+ 0xe9, 0x0a, 0xc8, 0x6c, 0xe3, 0xfa, 0x00, 0x04, 0xfc, 0x0c, 0x01, 0xe1, 0xff,
+ 0xe5, 0xf3, 0x14, 0xfb, 0xdf, 0x2d, 0x28, 0xde, 0x12, 0xcd, 0xa8, 0xe1, 0xff,
+ 0x1a, 0xff, 0x4d, 0xc8, 0xf3, 0x0a, 0x05, 0x0c, 0x4e, 0xf2, 0x0b, 0xea, 0xec,
+ 0x0c, 0xdd, 0x4f, 0xcd, 0x5a, 0x0d, 0x1f, 0x36, 0x37, 0xea, 0xf3, 0x7f, 0x2e,
+ 0x46, 0xfa, 0xda, 0xd4, 0xc6, 0xf7, 0xd9, 0xf9, 0xf3, 0xd5, 0xca, 0xf4, 0x05,
+ 0x81, 0x25, 0xd3, 0xf1, 0x78, 0xcc, 0xc8, 0xd4, 0x04, 0x00, 0x35, 0xd0, 0xdc,
+ 0xbd, 0x17, 0xf0, 0x16, 0x19, 0xa5, 0xee, 0xf3, 0xdd, 0xf4, 0x0b, 0xdd, 0x0c,
+ 0x01, 0x03, 0xeb, 0x16, 0x27, 0xf7, 0xd6, 0x0b, 0x0e, 0x40, 0x15, 0x20, 0xf7,
+ 0x14, 0x60, 0x01, 0x09, 0x0d, 0xed, 0x15, 0x1c, 0xbf, 0xe3, 0x13, 0x0f, 0xef,
+ 0x16, 0xfb, 0x10, 0x12, 0xf4, 0xef, 0x21, 0x1d, 0xf7, 0x17, 0xc4, 0x01, 0xf2,
+ 0xdc, 0xcf, 0xe6, 0x2d, 0xd0, 0xda, 0x14, 0x32, 0xe9, 0xd1, 0xed, 0x1c, 0x39,
+ 0x81, 0x0f, 0xd8, 0xef, 0x24, 0xda, 0x18, 0x1c, 0x11, 0xfc, 0x02, 0x9f, 0xed,
+ 0x2b, 0xfe, 0x12, 0xfa, 0xf6, 0x3b, 0x15, 0x04, 0xf0, 0x0e, 0x1a, 0xc3, 0x09,
+ 0xc2, 0x0b, 0xcc, 0x4f, 0x04, 0xeb, 0x16, 0xe6, 0x0c, 0xc6, 0xe3, 0x54, 0xfc,
+ 0xfa, 0xf3, 0x3a, 0xe1, 0x2e, 0xcf, 0x48, 0x36, 0xf4, 0xed, 0x10, 0xd0, 0xc1,
+ 0xff, 0x09, 0x04, 0x38, 0xfa, 0xef, 0x0c, 0x03, 0xd2, 0xe0, 0x13, 0xf3, 0xf1,
+ 0xda, 0xd6, 0xec, 0xf9, 0xe7, 0x02, 0xfb, 0x43, 0x49, 0x00, 0x2f, 0x09, 0xf5,
+ 0xf7, 0x81, 0xcd, 0x98, 0x2f, 0xff, 0xfc, 0x08, 0xd6, 0x05, 0x81, 0xb4, 0x03,
+ 0xf1, 0x22, 0x26, 0x3c, 0xef, 0x0b, 0x13, 0xf5, 0xde, 0xf9, 0x76, 0xf6, 0xe6,
+ 0xf2, 0x3b, 0xfd, 0xe4, 0xd5, 0xd6, 0xc2, 0x15, 0x60, 0xe1, 0x02, 0xc3, 0x04,
+ 0x3b, 0xa8, 0xd6, 0x04, 0x2c, 0x1b, 0x03, 0xf0, 0x24, 0x98, 0xd6, 0xf9, 0x07,
+ 0x18, 0x29, 0x0e, 0x17, 0x0c, 0x0a, 0x05, 0xec, 0xfb, 0x0a, 0xfd, 0xfe, 0x00,
+ 0x26, 0x2e, 0x04, 0x11, 0xe8, 0x13, 0xf8, 0x39, 0xf5, 0xfa, 0xcf, 0xe6, 0xdf,
+ 0xae, 0x08, 0x36, 0xfe, 0x0d, 0xfb, 0xf1, 0x07, 0x3e, 0x18, 0xeb, 0xfa, 0x13,
+ 0xf5, 0x03, 0x0f, 0x0d, 0xd9, 0x06, 0x7f, 0xe8, 0x17, 0xf4, 0x14, 0x89, 0xd0,
+ 0xa2, 0xe1, 0xac, 0xfc, 0xff, 0x6b, 0x17, 0x99, 0xfb, 0xdb, 0xf9, 0xe8, 0xca,
+ 0xe3, 0x14, 0xf5, 0x3b, 0x10, 0x63, 0x57, 0xc5, 0x0f, 0xf1, 0xcd, 0x1c, 0x0e,
+ 0x0c, 0xd9, 0x0a, 0x04, 0xfb, 0xfb, 0x4e, 0x24, 0xed, 0x0d, 0x12, 0x3e, 0xd5,
+ 0x1e, 0xd6, 0x81, 0x3f, 0x08, 0xac, 0x13, 0x3c, 0xec, 0x35, 0xb7, 0xe0, 0x1d,
+ 0x37, 0xdc, 0x10, 0x62, 0x1c, 0xb2, 0xef, 0x41, 0x2a, 0x3c, 0x17, 0x10, 0xe8,
+ 0xb9, 0x3c, 0x72, 0xdd, 0xdf, 0x2c, 0xe3, 0x1a, 0x0b, 0x6f, 0xc6, 0xd6, 0xef,
+ 0xde, 0x3f, 0xe8, 0xe6, 0xb6, 0x19, 0xd9, 0xd4, 0xef, 0x15, 0xcc, 0x0a, 0x55,
+ 0xdd, 0xfa, 0x24, 0xe8, 0xce, 0x08, 0x2e, 0xf1, 0xbb, 0x4e, 0xfb, 0x1d, 0xfd,
+ 0xfd, 0x06, 0xe8, 0x18, 0x10, 0x7f, 0xd6, 0x31, 0xf8, 0xc6, 0xe9, 0xc7, 0xf2,
+ 0x47, 0xe7, 0xfd, 0xe3, 0xc1, 0xdd, 0x0f, 0x3a, 0xb7, 0xba, 0x28, 0xe7, 0x16,
+ 0x8b, 0xf9, 0x1f, 0x9d, 0xfa, 0x0a, 0x28, 0xe5, 0xca, 0xec, 0x3d, 0x29, 0xb6,
+ 0x16, 0x0a, 0xfb, 0x17, 0xbf, 0x02, 0x24, 0xce, 0xde, 0x36, 0x7f, 0x13, 0xf0,
+ 0x83, 0x35, 0x25, 0xe6, 0xfb, 0xf1, 0xd0, 0x05, 0x39, 0x26, 0x02, 0xc8, 0xd6,
+ 0x5f, 0xde, 0xb9, 0x3c, 0x13, 0xbc, 0x2a, 0x10, 0xd5, 0xad, 0xf2, 0xef, 0x0a,
+ 0xf6, 0x35, 0xd2, 0xad, 0xd5, 0x0a, 0xf6, 0x0c, 0xb6, 0x7f, 0xd4, 0x24, 0x5a,
+ 0x93, 0xa6, 0xf7, 0x11, 0x00, 0xf1, 0x35, 0x57, 0x17, 0xc7, 0x3b, 0xc9, 0xdb,
+ 0x1f, 0xbd, 0xc7, 0x81, 0xf9, 0xb1, 0xd2, 0x2c, 0xec, 0x5b, 0xf0, 0xed, 0x83,
+ 0x27, 0x26, 0x7d, 0xd5, 0x12, 0xab, 0xd5, 0x36, 0xdf, 0x60, 0x44, 0x3a, 0x47,
+ 0xdc, 0x25, 0x1b, 0x48, 0xc1, 0xec, 0x02, 0xdd, 0x30, 0x06, 0xfd, 0xf4, 0x1f,
+ 0x2c, 0xc1, 0xe9, 0xfe, 0xf8, 0x15, 0x12, 0x16, 0x44, 0x11, 0xa5, 0x39, 0xb3,
+ 0x23, 0x0f, 0xde, 0x1f, 0x25, 0xeb, 0x05, 0xfb, 0x15, 0xe1, 0x71, 0x3b, 0xdc,
+ 0xf0, 0x32, 0xc9, 0xf4, 0xe1, 0xb3, 0x02, 0x46, 0x36, 0x07, 0x40, 0x6b, 0x1b,
+ 0xd0, 0x36, 0x1a, 0xe3, 0xa8, 0xc9, 0x77, 0x03, 0xd0, 0xe5, 0x2a, 0x36, 0x31,
+ 0xc5, 0x0e, 0xe5, 0xf1, 0xc7, 0xfa, 0x7f, 0x2e, 0xe6, 0x0a, 0x16, 0x32, 0xd7,
+ 0x17, 0x2d, 0xd4, 0xf3, 0xee, 0xe1, 0xc3, 0x29, 0x3e, 0x04, 0xc7, 0xe8, 0xe8,
+ 0xf8, 0xee, 0xfa, 0xf5, 0xd0, 0xfd, 0xfa, 0xf7, 0xe1, 0x93, 0x16, 0x7f, 0xd8,
+ 0xcf, 0x06, 0x1a, 0x06, 0xdf, 0xfc, 0x08, 0xfe, 0x22, 0x0a, 0xdd, 0xdf, 0xfe,
+ 0x19, 0xf5, 0x14, 0x13, 0x5c, 0x08, 0x2c, 0xd3, 0x02, 0xe2, 0x0e, 0xec, 0x23,
+ 0x0a, 0x19, 0xed, 0xcc, 0x33, 0xe0, 0xff, 0x50, 0xeb, 0x3d, 0x06, 0xe1, 0x06,
+ 0xad, 0xd5, 0x10, 0x12, 0xec, 0xcf, 0x06, 0x12, 0x5e, 0x1c, 0xd5, 0x1d, 0x0d,
+ 0x07, 0x12, 0xa6, 0xb9, 0xf4, 0xf8, 0xf6, 0x3f, 0xfd, 0xdd, 0x3a, 0x1a, 0x12,
+ 0xbc, 0x1b, 0xe6, 0xd7, 0x0f, 0xfb, 0x1f, 0x27, 0x1f, 0xd6, 0xee, 0x27, 0xbb,
+ 0x42, 0xec, 0x3a, 0x0b, 0xc0, 0xfd, 0x04, 0xe0, 0xe4, 0x22, 0x27, 0xe8, 0x06,
+ 0x39, 0xdf, 0xfb, 0x17, 0xda, 0xfb, 0xed, 0xea, 0xf6, 0xcb, 0xce, 0x7f, 0x21,
+ 0xdb, 0x10, 0xf6, 0x47, 0xba, 0xbf, 0x08, 0xc6, 0xdc, 0x2c, 0xeb, 0xdd, 0x03,
+ 0xdb, 0x27, 0x22, 0x1a, 0xe4, 0x49, 0x23, 0xe8, 0xf5, 0xeb, 0x12, 0xfd, 0x21,
+ 0xf3, 0xf4, 0xe8, 0xdd, 0xdb, 0x3c, 0xf2, 0x26, 0x30, 0xfd, 0xd5, 0xcc, 0x00,
+ 0x2b, 0xb9, 0xf0, 0x25, 0x0f, 0xeb, 0xe6, 0xc9, 0x01, 0xf4, 0x07, 0xa1, 0x0e,
+ 0xfb, 0xe7, 0x11, 0xef, 0x0e, 0xdf, 0x19, 0xec, 0x26, 0x3d, 0x18, 0xd5, 0x81,
+ 0x28, 0xae, 0x29, 0xa8, 0xf9, 0x4d, 0x0e, 0x0f, 0x21, 0x0b, 0x12, 0xdd, 0xb1,
+ 0xf1, 0x0e, 0x1e, 0x0e, 0x81, 0xd7, 0xbc, 0x10, 0x0a, 0xf6, 0xe9, 0x05, 0xdd,
+ 0xe9, 0xe6, 0xf1, 0xfb, 0x55, 0x04, 0xd0, 0xfd, 0xd3, 0xe2, 0x21, 0xc2, 0x19,
+ 0x13, 0xe1, 0x56, 0xe1, 0x27, 0x0e, 0xf0, 0x09, 0xf8, 0x13, 0x23, 0x58, 0xf7,
+ 0x1d, 0x08, 0xde, 0x08, 0xfa, 0xfd, 0xbf, 0x1e, 0x51, 0x0a, 0x10, 0xa6, 0xfe,
+ 0x7f, 0x2d, 0x4c, 0x1c, 0xe6, 0xa3, 0xcf, 0xa5, 0x30, 0xe9, 0xc8, 0xf5, 0x30,
+ 0xfd, 0x3f, 0xad, 0xcc, 0x12, 0xdb, 0x33, 0xfd, 0xe5, 0xfc, 0x4a, 0x1f, 0x12,
+ 0x9b, 0xe8, 0xcc, 0xcd, 0x06, 0xd6, 0x0a, 0x42, 0x2e, 0x24, 0xe4, 0xcb, 0x58,
+ 0xb7, 0x15, 0x2f, 0x01, 0x29, 0xf9, 0xe0, 0x0a, 0x08, 0xeb, 0x1c, 0xa5, 0xf7,
+ 0xee, 0x9e, 0xd5, 0x43, 0x17, 0x78, 0xfe, 0xf1, 0xa8, 0xd8, 0xdd, 0xed, 0x47,
+ 0xca, 0xb2, 0xd9, 0x02, 0x7f, 0x08, 0x36, 0xd5, 0xe5, 0x45, 0x13, 0xcf, 0x12,
+ 0x07, 0xe1, 0x5e, 0x35, 0x48, 0xb5, 0xf8, 0x06, 0xed, 0x63, 0x36, 0x6d, 0x27,
+ 0xd1, 0xb8, 0x21, 0xde, 0xbd, 0xcd, 0xc9, 0x00, 0xd5, 0x12, 0xf6, 0x17, 0x2e,
+ 0x8f, 0x21, 0xad, 0x0f, 0xa8, 0xef, 0x20, 0x2f, 0xe2, 0x5d, 0x16, 0x31, 0x51,
+ 0xcb, 0x19, 0xdd, 0x0b, 0x52, 0xf9, 0xe8, 0xae, 0xdf, 0x4e, 0xd7, 0xe5, 0xd5,
+ 0x71, 0x68, 0x07, 0x64, 0xd0, 0xfc, 0x27, 0xbe, 0x6a, 0xce, 0x1a, 0xef, 0xe0,
+ 0x04, 0x15, 0xb1, 0x1e, 0x48, 0x1f, 0xfe, 0xd2, 0x3f, 0x22, 0xb0, 0xb5, 0xd8,
+ 0x35, 0x2d, 0x81, 0x07, 0xa6, 0xfd, 0x0d, 0x1a, 0xbb, 0xd2, 0x17, 0xec, 0xd7,
+ 0xf5, 0x12, 0x33, 0x50, 0x58, 0xfe, 0xc7, 0x2b, 0x41, 0xb3, 0x39, 0x27, 0x05,
+ 0xd3, 0x27, 0xe7, 0x30, 0xb6, 0xb6, 0xe8, 0xb3, 0xe9, 0xd9, 0x22, 0xfb, 0xdb,
+ 0x05, 0x9c, 0xe0, 0xfd, 0x24, 0x16, 0x1f, 0x05, 0xfe, 0x02, 0x11, 0xe7, 0x09,
+ 0x09, 0x13, 0x19, 0xfe, 0x7f, 0x11, 0x32, 0xf4, 0xc2, 0x3f, 0x15, 0xff, 0xfb,
+ 0x3e, 0x0c, 0x13, 0xff, 0x0d, 0xfe, 0xbc, 0x17, 0xe2, 0x05, 0xc2, 0xe7, 0x57,
+ 0x16, 0xed, 0x19, 0xdd, 0xe6, 0xfb, 0xfb, 0x06, 0x2c, 0xc3, 0x3a, 0xc1, 0xf4,
+ 0xc8, 0xf4, 0xbe, 0x11, 0xdd, 0x1a, 0xff, 0x02, 0xff, 0x77, 0xb5, 0x1e, 0xef,
+ 0xfd, 0xa1, 0x4f, 0x5e, 0x23, 0x08, 0xb4, 0xf8, 0xef, 0xbd, 0x01, 0xc9, 0xe8,
+ 0xe2, 0xfd, 0x4a, 0x1c, 0xfe, 0x1b, 0x06, 0x00, 0xfb, 0x07, 0x0f, 0x00, 0x2d,
+ 0x46, 0xd3, 0xe9, 0xda, 0xf6, 0xea, 0x30, 0xf4, 0x13, 0x15, 0xce, 0xe2, 0xd5,
+ 0xba, 0xfb, 0x27, 0xf6, 0xe8, 0x05, 0x7f, 0x0f, 0xd7, 0x03, 0xed, 0xe3, 0xa9,
+ 0xec, 0xea, 0xc8, 0xce, 0x30, 0x56, 0xc4, 0x0a, 0x35, 0xde, 0xd5, 0x04, 0xd2,
+ 0x23, 0xee, 0x3d, 0x27, 0xeb, 0xb2, 0x15, 0xf7, 0xf8, 0x91, 0x02, 0xfd, 0x16,
+ 0x14, 0xd6, 0x22, 0x14, 0xf6, 0xe0, 0xf6, 0xb4, 0x20, 0x0e, 0x0f, 0x38, 0x15,
+ 0x2e, 0xc3, 0x24, 0xf9, 0xba, 0x21, 0x13, 0x29, 0xe4, 0x1e, 0xf0, 0xd8, 0x23,
+ 0xe8, 0x23, 0x43, 0xf5, 0xe3, 0x19, 0xc9, 0x45, 0xe1, 0xe4, 0xeb, 0xfa, 0xd8,
+ 0xfd, 0xae, 0xfd, 0x1d, 0xf5, 0x7f, 0xed, 0x00, 0xd6, 0xd9, 0x3d, 0xc4, 0xb9,
+ 0x1c, 0x56, 0xe8, 0xbb, 0x40, 0xde, 0xf5, 0x50, 0xfa, 0xf5, 0x04, 0xe4, 0xfe,
+ 0xfb, 0xfe, 0x3b, 0x20, 0xe0, 0xca, 0x1f, 0xb5, 0xf3, 0xcf, 0xfb, 0xe2, 0x0e,
+ 0xba, 0xd9, 0x81, 0xbe, 0xf9, 0xcf, 0xc7, 0xb5, 0x4a, 0x19, 0xf9, 0x14, 0xf3,
+ 0x02, 0x17, 0xf8, 0xfd, 0x34, 0x07, 0xdd, 0xff, 0xf1, 0x0f, 0xfa, 0x01, 0x01,
+ 0x24, 0x25, 0xc3, 0xf5, 0xd3, 0x06, 0xd5, 0x73, 0x07, 0xb8, 0x23, 0x0b, 0x0f,
+ 0x1d, 0xc5, 0xef, 0x64, 0x24, 0xde, 0xcc, 0x36, 0xd2, 0x7f, 0x1c, 0x09, 0x9a,
+ 0xe1, 0xf8, 0xbe, 0xb7, 0xe0, 0x8e, 0x70, 0xde, 0x2c, 0xf8, 0x27, 0xc3, 0xe4,
+ 0x27, 0xf6, 0x7b, 0x10, 0x02, 0x01, 0x23, 0x52, 0xe8, 0xfc, 0xf5, 0x02, 0x25,
+ 0x0f, 0xc4, 0xba, 0xd3, 0x3d, 0x15, 0xe0, 0xd6, 0xf8, 0x93, 0x14, 0x0c, 0x4d,
+ 0x40, 0xf2, 0x2b, 0x19, 0xcd, 0x47, 0x08, 0x08, 0x18, 0x7f, 0x0c, 0xbb, 0x3f,
+ 0xfa, 0xdf, 0xbc, 0x18, 0x05, 0x3f, 0x1c, 0xc0, 0xea, 0x0d, 0x01, 0xcf, 0xd7,
+ 0x29, 0xf6, 0x12, 0x13, 0xec, 0x24, 0xc9, 0xc5, 0xf9, 0x15, 0x1e, 0x12, 0xe9,
+ 0x21, 0x2d, 0xfc, 0x02, 0xfd, 0xf7, 0x07, 0x12, 0xb1, 0xe9, 0xc6, 0x34, 0x2b,
+ 0x01, 0x0c, 0xb2, 0xf6, 0xfc, 0x0a, 0x11, 0xc6, 0xfc, 0xf3, 0xfd, 0xf5, 0xc6,
+ 0xe6, 0x39, 0x1c, 0xe3, 0x81, 0xc8, 0xd1, 0x0a, 0xb2, 0xf0, 0xd4, 0xdd, 0x01,
+ 0xd9, 0x0c, 0xd8, 0xb1, 0x13, 0x0c, 0xcc, 0x29, 0x41, 0x2d, 0x18, 0x09, 0x1c,
+ 0xfa, 0xdd, 0x15, 0x65, 0xff, 0xf5, 0x0c, 0x4d, 0xa9, 0x32, 0x54, 0x6d, 0x0f,
+ 0xdd, 0xf9, 0xd4, 0xe0, 0xe5, 0x06, 0xca, 0x0f, 0x38, 0xec, 0xb8, 0x4c, 0x6d,
+ 0xa4, 0x72, 0x27, 0x5f, 0xfb, 0x2c, 0x28, 0x4d, 0xfa, 0x0d, 0xc2, 0x16, 0xf3,
+ 0xf6, 0xc8, 0x1b, 0x11, 0xde, 0x18, 0xee, 0x91, 0x98, 0x1e, 0xda, 0x0f, 0x7f,
+ 0xf6, 0xd3, 0x0d, 0xbd, 0xd8, 0x12, 0xaf, 0x0c, 0x05, 0xf9, 0x3a, 0x30, 0x45,
+ 0x08, 0xd9, 0xcf, 0xee, 0x1f, 0x7e, 0xe2, 0x18, 0xbd, 0x26, 0xde, 0xf6, 0xfb,
+ 0x24, 0x1a, 0xdd, 0x0d, 0xe9, 0x08, 0xe5, 0xee, 0x08, 0xd7, 0xd0, 0xc6, 0x14,
+ 0xf6, 0x19, 0xfc, 0xf4, 0xed, 0x12, 0xfc, 0x0b, 0x02, 0x12, 0xce, 0x1a, 0xca,
+ 0xd4, 0xe4, 0xcc, 0xdc, 0xb7, 0xfa, 0xa1, 0xb0, 0xca, 0x22, 0x26, 0x3e, 0xe8,
+ 0xd7, 0x14, 0xe9, 0xeb, 0x16, 0xb0, 0xf9, 0x1e, 0x34, 0xf8, 0xe1, 0x0c, 0x08,
+ 0xd5, 0x01, 0xf6, 0x47, 0xda, 0x1d, 0x9b, 0xf4, 0x37, 0xe0, 0xf8, 0xbd, 0x0f,
+ 0x30, 0x44, 0x18, 0x3f, 0x13, 0xfd, 0x0e, 0x1e, 0x09, 0x2e, 0x1b, 0x5d, 0x2b,
+ 0x04, 0x95, 0xc9, 0x43, 0xfd, 0x34, 0xfa, 0xf8, 0xfe, 0x7f, 0xfa, 0xef, 0xaa,
+ 0x19, 0xeb, 0xe6, 0xc4, 0xfd, 0xdf, 0xde, 0x2f, 0x43, 0xce, 0x3f, 0xfc, 0xf0,
+ 0xe0, 0xe2, 0xcd, 0x27, 0xfd, 0xfb, 0x40, 0xe5, 0x04, 0xf0, 0xee, 0xe0, 0x17,
+ 0x89, 0x0c, 0x2f, 0x19, 0x17, 0xc8, 0x26, 0x0b, 0xfa, 0xfd, 0x7f, 0x06, 0x0b,
+ 0xe4, 0x47, 0x4c, 0x00, 0x8e, 0xf9, 0xe9, 0x0a, 0x39, 0x1a, 0xe5, 0xea, 0x20,
+ 0xf2, 0x23, 0x4c, 0x01, 0x0c, 0x09, 0x27, 0xe2, 0xfc, 0x08, 0x15, 0x19, 0x16,
+ 0x1e, 0xe5, 0xf0, 0xd0, 0xa7, 0xf5, 0xdd, 0x3e, 0x04, 0xf5, 0x3d, 0x24, 0x15,
+ 0x1b, 0xbf, 0xf4, 0x32, 0x02, 0xed, 0xf3, 0xd5, 0x32, 0xfc, 0x59, 0x81, 0xaa,
+ 0x3e, 0xf6, 0x21, 0x23, 0xf3, 0x24, 0xcf, 0x33, 0x97, 0xe9, 0x0e, 0xf5, 0xd4,
+ 0x03, 0xca, 0x49, 0xf9, 0x46, 0xc3, 0xcb, 0xed, 0xef, 0x19, 0xc2, 0x00, 0xff,
+ 0x01, 0xb3, 0x10, 0x20, 0x17, 0x03, 0xf6, 0xd0, 0xcc, 0x12, 0xf7, 0x26, 0x2f,
+ 0xd4, 0x66, 0xea, 0x01, 0xba, 0xd7, 0x5f, 0x0d, 0xff, 0x31, 0xe9, 0x20, 0xf6,
+ 0x7f, 0xe5, 0x15, 0x26, 0xf2, 0xef, 0x05, 0x0f, 0xf8, 0xd9, 0xf7, 0x5e, 0x34,
+ 0xcb, 0xae, 0x92, 0x5d, 0xe1, 0x0c, 0x16, 0x3b, 0xa1, 0x0f, 0x04, 0xce, 0xb8,
+ 0x28, 0xd8, 0x54, 0xe1, 0x49, 0x01, 0xed, 0x09, 0xe0, 0x1e, 0xf7, 0xe2, 0x0b,
+ 0xf3, 0xf3, 0xe1, 0x27, 0xb9, 0x39, 0x17, 0x3e, 0xf1, 0x02, 0x1d, 0x0e, 0x67,
+ 0x19, 0xbc, 0x17, 0xb3, 0x0d, 0xb4, 0xe0, 0x36, 0xc9, 0x1f, 0x11, 0xe3, 0x2f,
+ 0xd3, 0xdb, 0xf4, 0x26, 0x0b, 0x13, 0xf1, 0x01, 0xd5, 0x04, 0xd0, 0xdf, 0x26,
+ 0xc4, 0xb2, 0x2b, 0x33, 0x38, 0xde, 0x41, 0xc2, 0xb6, 0xf4, 0x7f, 0x4f, 0xf0,
+ 0x00, 0x04, 0xfc, 0x00, 0xbd, 0xed, 0xfc, 0xdb, 0x3b, 0xf9, 0x16, 0xf3, 0xff,
+ 0x02, 0xfb, 0xf0, 0x1d, 0x2f, 0x10, 0xdf, 0x5f, 0xd9, 0x01, 0xfb, 0xe5, 0x29,
+ 0x38, 0xde, 0x05, 0xd9, 0xc1, 0xf8, 0xe9, 0x1e, 0xa7, 0x13, 0x01, 0xb8, 0xeb,
+ 0xb5, 0x2b, 0x29, 0xa7, 0xad, 0xf2, 0xdd, 0xe5, 0x0c, 0x1b, 0xee, 0x58, 0xae,
+ 0x05, 0x62, 0xd9, 0x12, 0xf2, 0x0f, 0x03, 0x27, 0x00, 0x39, 0xac, 0xb8, 0xef,
+ 0xcd, 0x02, 0x5f, 0x11, 0x1f, 0xfe, 0xa6, 0x02, 0x13, 0xde, 0x35, 0x18, 0x04,
+ 0xd0, 0xeb, 0x14, 0xdf, 0x81, 0xed, 0xfb, 0x8c, 0x14, 0xfa, 0xe9, 0x1f, 0x01,
+ 0x12, 0xe7, 0xc2, 0xd2, 0xea, 0xf0, 0xde, 0xf1, 0xfd, 0x01, 0x14, 0xd7, 0x0d,
+ 0x08, 0x16, 0x1e, 0xab, 0x3a, 0x0e, 0xe0, 0xf6, 0xf5, 0x1c, 0x50, 0x7f, 0xea,
+ 0x20, 0x0c, 0xdd, 0xc9, 0xfc, 0xe3, 0x0d, 0xee, 0x15, 0xc7, 0xde, 0x0a, 0x0c,
+ 0xf9, 0x20, 0xe8, 0xff, 0xda, 0xf9, 0xf0, 0x6a, 0xf2, 0xf7, 0x1d, 0xf6, 0xee,
+ 0xf0, 0x23, 0xe5, 0x0c, 0xde, 0xd6, 0x4c, 0xe8, 0x0e, 0x91, 0xdf, 0xc9, 0x7f,
+ 0x3c, 0xa9, 0x3b, 0xcb, 0x38, 0xe2, 0x38, 0x5a, 0xea, 0x16, 0xec, 0x2a, 0x5a,
+ 0xe1, 0x04, 0x00, 0x13, 0xf8, 0xce, 0x15, 0x38, 0x1a, 0xc8, 0x10, 0x4c, 0x2d,
+ 0x0c, 0xfa, 0xdb, 0x59, 0x2a, 0xee, 0x0c, 0x9d, 0x47, 0x13, 0x22, 0xa1, 0x5c,
+ 0xdf, 0xff, 0x97, 0xcb, 0x3d, 0xcc, 0x85, 0xd0, 0x76, 0xf2, 0x9f, 0xe7, 0x04,
+ 0xd4, 0x32, 0x14, 0x1c, 0x0a, 0x14, 0xe9, 0x2b, 0x9d, 0x66, 0xc4, 0xd5, 0xf0,
+ 0xda, 0x40, 0x4d, 0x0a, 0xb1, 0x51, 0xf9, 0x29, 0x19, 0x03, 0xb1, 0x1b, 0x4f,
+ 0xcd, 0x0c, 0xe1, 0x1d, 0x3c, 0x0b, 0x96, 0x43, 0xf6, 0xe4, 0xe3, 0x57, 0xa0,
+ 0xf8, 0xdd, 0x2d, 0x00, 0xa9, 0x35, 0xdb, 0x5a, 0x56, 0xe2, 0xfb, 0x0a, 0xd6,
+ 0x23, 0x3b, 0xc5, 0x06, 0xf9, 0xe8, 0x03, 0x01, 0x21, 0xee, 0xe7, 0x0b, 0x7f,
+ 0xf5, 0x2f, 0x11, 0xf7, 0x7d, 0x0c, 0x53, 0xb4, 0xd4, 0xcd, 0xe6, 0x11, 0x2a,
+ 0x0d, 0xdc, 0xc6, 0x7f, 0x2a, 0x1a, 0xd6, 0xe8, 0xba, 0xe5, 0x03, 0x14, 0xfc,
+ 0x00, 0x17, 0x0e, 0x16, 0xed, 0x47, 0x6e, 0xbd, 0xd4, 0xfd, 0x10, 0xfe, 0xcb,
+ 0xd6, 0x09, 0xeb, 0xe8, 0xea, 0xd9, 0xdb, 0x25, 0x20, 0xcf, 0x15, 0x2e, 0x32,
+ 0xbf, 0x03, 0xe2, 0xf2, 0xe9, 0xdb, 0x2c, 0xd3, 0xe1, 0xe1, 0xf4, 0xd9, 0xee,
+ 0x12, 0x18, 0xdf, 0xd8, 0xd8, 0x38, 0xf0, 0x13, 0x59, 0xc6, 0x1a, 0xc6, 0x0f,
+ 0x0a, 0xe6, 0x04, 0x0b, 0xc4, 0x89, 0xb0, 0xcb, 0x45, 0x1a, 0xf6, 0xfa, 0xd7,
+ 0x12, 0x19, 0x27, 0xad, 0x33, 0xb0, 0x25, 0x41, 0x33, 0xfc, 0x09, 0x0f, 0x3b,
+ 0xc1, 0xf2, 0x58, 0xd3, 0xfa, 0xcc, 0xf8, 0x7f, 0x0b, 0xd1, 0xe6, 0x94, 0x12,
+ 0x1d, 0x78, 0xfe, 0xb6, 0x3c, 0x45, 0xe5, 0x5a, 0x22, 0x2d, 0x05, 0x32, 0xd8,
+ 0xdc, 0xc5, 0x18, 0x65, 0x0f, 0xc7, 0xdb, 0xf3, 0xa0, 0xdd, 0xf9, 0x31, 0xfe,
+ 0xe9, 0x08, 0xd0, 0x25, 0xdc, 0x07, 0x1d, 0x1d, 0x00, 0x24, 0x26, 0x7f, 0xf6,
+ 0x10, 0xdf, 0x3c, 0xf9, 0x0f, 0x13, 0x2e, 0xe4, 0x12, 0xf3, 0xfe, 0x19, 0x00,
+ 0xf1, 0x43, 0xea, 0x02, 0xd8, 0x1a, 0x08, 0x0f, 0xdd, 0x1c, 0xe1, 0x14, 0xe0,
+ 0xe2, 0x0f, 0x06, 0xea, 0x05, 0xd7, 0xce, 0xbd, 0xe8, 0x3b, 0xea, 0x22, 0xcc,
+ 0xf0, 0x18, 0x1a, 0xfd, 0xed, 0xfd, 0xee, 0x81, 0xbe, 0xf7, 0x13, 0xfa, 0xfb,
+ 0xf5, 0xe8, 0x02, 0xf8, 0x1c, 0x0f, 0x01, 0xf2, 0x13, 0x18, 0x42, 0x08, 0x13,
+ 0x22, 0x3a, 0xc7, 0xef, 0x07, 0x20, 0xdb, 0xea, 0x0a, 0x19, 0xf9, 0x09, 0x01,
+ 0x13, 0xfd, 0xe9, 0xdb, 0xf2, 0xfc, 0x0a, 0xf6, 0x04, 0xfd, 0xdf, 0x19, 0xca,
+ 0xee, 0x1c, 0x05, 0xf2, 0xbb, 0xe8, 0xc1, 0xef, 0x18, 0x16, 0xfe, 0xef, 0x01,
+ 0xe1, 0xff, 0x19, 0xe4, 0x3e, 0x34, 0xe6, 0x1a, 0xe9, 0x29, 0xe5, 0xdf, 0x1c,
+ 0x2c, 0xf5, 0x0b, 0x13, 0x20, 0x0a, 0x2c, 0xd9, 0xc7, 0xbb, 0x0b, 0xd6, 0x03,
+ 0x01, 0xc5, 0xea, 0x57, 0xcd, 0xe7, 0x6b, 0x27, 0xf6, 0x3c, 0x29, 0xf4, 0x30,
+ 0xf1, 0xd8, 0xc1, 0x02, 0xf7, 0x35, 0xde, 0x7f, 0xec, 0x1f, 0xd0, 0xf5, 0x15,
+ 0xca, 0x05, 0xdb, 0xd0, 0xf7, 0x16, 0xf1, 0x0a, 0x06, 0x25, 0x07, 0x08, 0xff,
+ 0x35, 0xce, 0xd1, 0x2c, 0xf5, 0x0c, 0x13, 0xf1, 0x97, 0xe2, 0x13, 0xd9, 0x1b,
+ 0xf0, 0xf8, 0x18, 0xe6, 0xac, 0x24, 0xf0, 0xa1, 0x37, 0x0c, 0x09, 0x02, 0x31,
+ 0x40, 0xf5, 0xf9, 0xfa, 0x0e, 0xcd, 0x13, 0xc8, 0x09, 0xeb, 0xd9, 0xe5, 0xe0,
+ 0x34, 0xf9, 0x81, 0xed, 0xd9, 0xf3, 0xf4, 0x1c, 0x47, 0xf6, 0x08, 0xda, 0xff,
+ 0x00, 0x19, 0xb9, 0xf7, 0x30, 0xe8, 0xc6, 0xd8, 0xda, 0x01, 0xf5, 0x2b, 0xb1,
+ 0x57, 0x09, 0xce, 0x09, 0x3f, 0xdb, 0xad, 0xf5, 0xf6, 0xf9, 0x02, 0xdd, 0x21,
+ 0x3a, 0x81, 0xdf, 0x0d, 0x06, 0x2f, 0xd4, 0x34, 0xdd, 0xf5, 0x45, 0x02, 0xd6,
+ 0xf5, 0xd8, 0xfa, 0xe1, 0x10, 0xcd, 0x10, 0x2b, 0x09, 0x02, 0xff, 0x07, 0x00,
+ 0xd7, 0x0d, 0x22, 0xe9, 0x1c, 0xfb, 0x1a, 0xf3, 0x0b, 0xed, 0xa2, 0x1d, 0xd9,
+ 0xea, 0xfb, 0x33, 0x1d, 0xe3, 0x12, 0x66, 0x98, 0xee, 0x1e, 0x97, 0x10, 0xfb,
+ 0xc2, 0xef, 0x21, 0x03, 0x57, 0xbc, 0x06, 0x1d, 0x15, 0xee, 0xec, 0xf1, 0xe0,
+ 0xef, 0xe7, 0x08, 0x10, 0xf8, 0xe7, 0x2c, 0xfa, 0xff, 0x03, 0x37, 0x43, 0x14,
+ 0x22, 0x09, 0x01, 0xe9, 0x18, 0xd9, 0xf4, 0x0a, 0x1e, 0x13, 0xdf, 0x08, 0x2e,
+ 0xfa, 0x1e, 0x12, 0x1d, 0xe4, 0xc5, 0x2a, 0x5d, 0xed, 0xff, 0x22, 0xe7, 0x3b,
+ 0x0b, 0x3b, 0xf8, 0x12, 0x21, 0xf5, 0x0f, 0x31, 0xf0, 0x81, 0xfd, 0xbf, 0x0a,
+ 0x07, 0x3e, 0x03, 0x25, 0x35, 0xdf, 0xe4, 0xd8, 0xf0, 0xda, 0xa5, 0xc2, 0xc5,
+ 0xe8, 0xe5, 0x15, 0x2b, 0x0c, 0xf1, 0x0a, 0x22, 0xe6, 0xe2, 0xe5, 0x31, 0xef,
+ 0x17, 0x40, 0xfa, 0x3b, 0xf6, 0x3e, 0xc1, 0xd1, 0xdf, 0x00, 0x6e, 0x04, 0x7f,
+ 0xde, 0x13, 0xf7, 0x0e, 0x11, 0x37, 0xed, 0xa8, 0x23, 0x3e, 0x13, 0xe2, 0xec,
+ 0xfb, 0xf1, 0xef, 0xee, 0x0e, 0x0a, 0xfd, 0x02, 0xfd, 0x1b, 0x8d, 0x81, 0xf8,
+ 0x42, 0xf8, 0x30, 0x0a, 0xc8, 0xe0, 0x35, 0xe3, 0x20, 0x91, 0xc1, 0x03, 0x16,
+ 0x12, 0xec, 0xf5, 0xdd, 0x10, 0x04, 0xf4, 0x03, 0xf6, 0x2e, 0x29, 0xfc, 0x0f,
+ 0x15, 0x3d, 0x27, 0xe5, 0xd1, 0xd8, 0xdc, 0x70, 0xde, 0x12, 0x2e, 0x23, 0x05,
+ 0x09, 0xe2, 0xb8, 0x1b, 0x62, 0x18, 0x4f, 0x14, 0xfb, 0xd4, 0x12, 0x0c, 0x03,
+ 0xf3, 0xce, 0x43, 0xef, 0xed, 0x50, 0x3d, 0xb5, 0x1b, 0x09, 0x05, 0x00, 0x81,
+ 0xfd, 0x13, 0x42, 0xdc, 0xc5, 0x34, 0x1f, 0xf5, 0xe5, 0xc0, 0x47, 0x3f, 0xb7,
+ 0x29, 0x25, 0xb3, 0xed, 0x1c, 0x34, 0xc2, 0xdf, 0x97, 0xfd, 0xcd, 0xea, 0x2c,
+ 0x22, 0x1d, 0xc2, 0xd7, 0x95, 0x88, 0x26, 0xe0, 0xe3, 0x31, 0x32, 0x17, 0xe1,
+ 0x72, 0xcc, 0xfc, 0x93, 0xa9, 0xbf, 0xca, 0xc3, 0xcb, 0xf6, 0x29, 0x85, 0xfe,
+ 0x36, 0x15, 0x24, 0xac, 0x10, 0x28, 0xdf, 0x01, 0x10, 0x05, 0x0b, 0x0c, 0x74,
+ 0x2b, 0x09, 0x5d, 0xe9, 0xc6, 0xb5, 0xe7, 0x0f, 0xd5, 0xd9, 0x06, 0x01, 0xfd,
+ 0xc5, 0x1f, 0xc1, 0x03, 0xc4, 0x0b, 0xb4, 0x59, 0x3a, 0xe2, 0x09, 0xdf, 0xb6,
+ 0xe7, 0x81, 0xff, 0xdb, 0xcb, 0x4c, 0xdf, 0x0b, 0x28, 0x18, 0xfb, 0xf8, 0x13,
+ 0xdc, 0x02, 0xfe, 0xee, 0xde, 0xfe, 0xea, 0x19, 0x36, 0xe8, 0xe8, 0x02, 0x0d,
+ 0xa4, 0xa9, 0x27, 0x0f, 0x01, 0xe3, 0xd9, 0x1f, 0x26, 0xee, 0x17, 0xaa, 0xf9,
+ 0xff, 0x47, 0xf7, 0x23, 0xde, 0xbe, 0xfb, 0x11, 0xeb, 0xc8, 0x15, 0xce, 0xd5,
+ 0x0d, 0xe6, 0xe8, 0x15, 0x1b, 0xe7, 0x29, 0x59, 0xbb, 0xc0, 0xef, 0x3c, 0xfb,
+ 0x28, 0x15, 0x03, 0x27, 0x05, 0x7f, 0xf6, 0xb5, 0xcb, 0x05, 0xae, 0xe4, 0xb7,
+ 0x0f, 0x0b, 0x5f, 0x4c, 0xcd, 0xd6, 0x36, 0x27, 0x00, 0xc5, 0xfe, 0x13, 0xeb,
+ 0x07, 0x36, 0x4a, 0xb0, 0xdf, 0xfb, 0xef, 0xff, 0x03, 0x38, 0xb3, 0xaf, 0x0b,
+ 0x20, 0x0f, 0x01, 0x02, 0xea, 0xe9, 0x2d, 0xc7, 0x17, 0xd7, 0xe3, 0xfe, 0xe8,
+ 0xc2, 0x06, 0xfc, 0x3f, 0xf9, 0xc2, 0xf4, 0x1a, 0x12, 0x17, 0xf3, 0xe2, 0x32,
+ 0x07, 0xf5, 0x2d, 0xe3, 0xe5, 0xdc, 0x0a, 0x81, 0x03, 0xf7, 0x17, 0x09, 0xb9,
+ 0x08, 0x39, 0x6d, 0x2d, 0xe9, 0xef, 0x22, 0xec, 0x2f, 0x52, 0x28, 0xf8, 0xb8,
+ 0xfe, 0xe2, 0xfc, 0xf7, 0x07, 0x05, 0xff, 0x08, 0x41, 0x30, 0x0f, 0xc8, 0x2e,
+ 0x05, 0xcf, 0xdb, 0xf2, 0x06, 0xaf, 0xd4, 0xb2, 0x56, 0x30, 0xcd, 0xf5, 0x75,
+ 0xc5, 0xbc, 0x2a, 0x3f, 0xf9, 0xf9, 0xf4, 0x00, 0x6e, 0x16, 0xec, 0xea, 0x12,
+ 0xfd, 0x02, 0xf9, 0x93, 0x16, 0xd3, 0xf1, 0xbc, 0x9b, 0xe8, 0xdb, 0x29, 0xea,
+ 0x2b, 0x13, 0x07, 0xdb, 0x4f, 0xd4, 0x83, 0x0e, 0xdf, 0xfd, 0x7f, 0xd8, 0x1d,
+ 0xab, 0x08, 0xee, 0xc8, 0xe3, 0x28, 0xc3, 0x25, 0x0a, 0x48, 0x81, 0xf1, 0x02,
+ 0xcd, 0xea, 0xba, 0xd3, 0xde, 0x02, 0xe2, 0x0d, 0xe8, 0x3e, 0x03, 0x1a, 0xec,
+ 0x37, 0xcd, 0x03, 0x0f, 0xe8, 0xc5, 0x16, 0x34, 0xc8, 0xf8, 0xf9, 0x1b, 0x92,
+ 0x1b, 0xfa, 0xca, 0xe6, 0xda, 0x52, 0x08, 0x23, 0x3d, 0x03, 0x30, 0x2b, 0xfd,
+ 0xe8, 0x5c, 0xe5, 0x22, 0x0d, 0x18, 0xdb, 0x0e, 0x15, 0xb8, 0x1b, 0xe0, 0xd5,
+ 0xf1, 0xda, 0x15, 0xf4, 0xd2, 0x25, 0xe1, 0xde, 0xbd, 0xcd, 0xd1, 0x0f, 0x1a,
+ 0x5d, 0x40, 0xd7, 0xf2, 0xe8, 0x45, 0x2a, 0xe8, 0x21, 0x97, 0xe5, 0x22, 0x32,
+ 0xcd, 0x16, 0xce, 0xb9, 0x2d, 0x12, 0x23, 0x2c, 0x30, 0xc7, 0x4b, 0x33, 0x10,
+ 0xc1, 0xe5, 0x02, 0xeb, 0xdf, 0xf3, 0xff, 0xf1, 0x2c, 0xff, 0xe6, 0x09, 0x3e,
+ 0xc6, 0x2c, 0x06, 0xf7, 0x12, 0xdb, 0xe1, 0x04, 0xe0, 0xda, 0xc2, 0xd6, 0xfc,
+ 0x7f, 0x30, 0xf1, 0x34, 0x05, 0xec, 0x25, 0xdc, 0x2c, 0xf3, 0x2a, 0xf1, 0xf4,
+ 0xe6, 0xf5, 0x1f, 0xeb, 0x07, 0xd3, 0xf5, 0x11, 0x19, 0x17, 0xef, 0xc3, 0x7f,
+ 0xf8, 0xd6, 0xf5, 0xf0, 0xd0, 0xe4, 0x19, 0xb8, 0xe6, 0xbb, 0x1b, 0x34, 0xff,
+ 0xf5, 0xc6, 0xf8, 0x35, 0x46, 0x89, 0x52, 0xe6, 0xf5, 0x08, 0x05, 0x0a, 0x41,
+ 0x3a, 0xe2, 0xd8, 0xb5, 0xdc, 0xf2, 0xf6, 0x44, 0xc8, 0xca, 0x4e, 0x13, 0xa8,
+ 0x2f, 0x14, 0x26, 0xef, 0xf1, 0x14, 0x3a, 0xc4, 0x19, 0xef, 0x03, 0x01, 0x2f,
+ 0x03, 0x13, 0xcf, 0xd1, 0xbb, 0x22, 0xe2, 0xfc, 0x56, 0xee, 0x3d, 0xe9, 0x03,
+ 0x37, 0x4c, 0xb5, 0xc8, 0x22, 0x22, 0x00, 0xe0, 0xf7, 0x07, 0xcd, 0xcf, 0x14,
+ 0x01, 0x13, 0xcf, 0x15, 0x1e, 0xd4, 0xf8, 0xdd, 0xfc, 0x27, 0x32, 0x2a, 0xf0,
+ 0xcb, 0x2b, 0xcc, 0xdd, 0x13, 0x29, 0x09, 0x7f, 0x0f, 0x5d, 0xd7, 0xd5, 0x38,
+ 0xe0, 0x08, 0xfb, 0x24, 0x88, 0x81, 0xfd, 0xdf, 0x01, 0x00, 0x2e, 0xd8, 0xde,
+ 0xe9, 0xfa, 0x38, 0xd4, 0x9a, 0x4a, 0x32, 0xfc, 0xf7, 0xe1, 0x10, 0xab, 0xdd,
+ 0xdb, 0xd8, 0x5f, 0x33, 0xd9, 0x03, 0x1f, 0x1f, 0x25, 0x35, 0xd7, 0xcd, 0xea,
+ 0x39, 0xf1, 0xd5, 0xc3, 0x2a, 0xa6, 0xf7, 0x38, 0x06, 0xda, 0x19, 0xfc, 0xda,
+ 0x1b, 0xe1, 0x0b, 0x9b, 0x0b, 0x16, 0x26, 0xa1, 0xb2, 0x0f, 0x02, 0x04, 0x08,
+ 0x0d, 0x2a, 0x1d, 0xbc, 0x7f, 0xea, 0x14, 0x01, 0x19, 0x0b, 0x2e, 0xd5, 0xf7,
+ 0xe5, 0x1d, 0xc8, 0x3b, 0x25, 0xfa, 0x5d, 0x17, 0xf2, 0x2e, 0xfe, 0x12, 0xeb,
+ 0xca, 0xdb, 0xe2, 0x03, 0x2e, 0xcd, 0xfd, 0xfb, 0x11, 0x1a, 0xf2, 0x5b, 0xff,
+ 0x06, 0xfe, 0xd1, 0x36, 0xe4, 0xf6, 0x14, 0xe8, 0x22, 0x2c, 0x47, 0x21, 0x1f,
+ 0xd4, 0x26, 0xda, 0x09, 0xf4, 0x58, 0xf3, 0xd5, 0xf4, 0xdb, 0x2a, 0x36, 0x3b,
+ 0xe5, 0x0a, 0xdf, 0xd5, 0xe8, 0xed, 0x2e, 0x06, 0xc6, 0xd8, 0xf2, 0xfb, 0xfa,
+ 0xf0, 0xbb, 0x03, 0xf2, 0x02, 0xf7, 0xe3, 0xaa, 0x9f, 0x01, 0x17, 0xf4, 0xb7,
+ 0xbb, 0x55, 0xe1, 0xba, 0xc4, 0xf7, 0x07, 0xb7, 0x09, 0x08, 0xc7, 0xf6, 0x56,
+ 0xde, 0x7f, 0x09, 0xd3, 0x5f, 0x48, 0x1d, 0x59, 0x4b, 0xc4, 0x11, 0x03, 0xe7,
+ 0xb1, 0xab, 0xed, 0xed, 0x48, 0xe1, 0x05, 0xb6, 0x9f, 0xde, 0x1a, 0xac, 0xc9,
+ 0xeb, 0x04, 0xb4, 0xbd, 0xeb, 0x03, 0xe5, 0xc0, 0x20, 0x1c, 0xe9, 0x46, 0xf6,
+ 0x37, 0x60, 0xb2, 0x09, 0xc9, 0x2d, 0x1d, 0x79, 0x1a, 0xe4, 0x5d, 0xae, 0x30,
+ 0x41, 0x26, 0xe9, 0x09, 0xd5, 0x34, 0xe7, 0x15, 0xf3, 0x81, 0xbf, 0x26, 0xb5,
+ 0x93, 0x5b, 0xdb, 0x1d, 0x0c, 0xd9, 0xf8, 0xac, 0xeb, 0xa9, 0x45, 0x91, 0xa3,
+ 0x63, 0x01, 0x36, 0xb0, 0xc9, 0x33, 0x15, 0x4e, 0xfd, 0x21, 0xd0, 0x9e, 0xca,
+ 0xea, 0x44, 0xd9, 0x0b, 0x41, 0xe8, 0x1d, 0xe9, 0xdc, 0x28, 0x1b, 0xe2, 0xc5,
+ 0x10, 0x33, 0xc9, 0x08, 0x1b, 0x1f, 0x81, 0xed, 0xd8, 0x69, 0xd6, 0x08, 0xbd,
+ 0x3b, 0x07, 0x98, 0xf8, 0xd6, 0x63, 0x00, 0x1f, 0x0a, 0xbd, 0xf1, 0xf7, 0x00,
+ 0x21, 0x36, 0x10, 0xc1, 0x21, 0x22, 0x10, 0x5c, 0xd0, 0xf8, 0xbf, 0xd9, 0xf2,
+ 0x07, 0xe3, 0xf6, 0xca, 0xd6, 0x04, 0x05, 0xe3, 0xdd, 0x4e, 0xf8, 0xb4, 0xef,
+ 0x9d, 0xfc, 0x31, 0xd1, 0xdc, 0xe7, 0xd0, 0xc9, 0x7f, 0xea, 0xde, 0x21, 0x28,
+ 0x32, 0x10, 0xff, 0xe8, 0xc1, 0x1c, 0x1a, 0x0f, 0x51, 0xae, 0xcf, 0x0d, 0xbe,
+ 0x0a, 0xf2, 0x28, 0x02, 0xfe, 0xfb, 0xca, 0xb8, 0xdb, 0x9c, 0x0a, 0xcc, 0xdc,
+ 0x9a, 0xfb, 0x8d, 0x8c, 0xef, 0x0b, 0x1f, 0x48, 0xc8, 0x27, 0x10, 0xaf, 0x26,
+ 0x1a, 0x31, 0x88, 0xae, 0x1f, 0x1a, 0x07, 0x09, 0xbb, 0xc0, 0xd5, 0x7f, 0x02,
+ 0xdd, 0xac, 0x6b, 0x10, 0xfc, 0x2a, 0x2a, 0xf2, 0x21, 0xe2, 0xc7, 0x9c, 0x1d,
+ 0x15, 0xfd, 0xf1, 0x37, 0xa4, 0x41, 0xe6, 0x1e, 0xf5, 0x42, 0x03, 0xf9, 0x14,
+ 0xee, 0xb9, 0x44, 0x7c, 0xfa, 0x16, 0xf8, 0x78, 0xff, 0x10, 0xa1, 0xd1, 0x40,
+ 0x11, 0xc6, 0xd2, 0x08, 0x10, 0xe3, 0xef, 0x16, 0x26, 0xe1, 0x1e, 0x1c, 0x46,
+ 0x31, 0x0b, 0x3a, 0x10, 0x93, 0x0a, 0xe6, 0x33, 0x26, 0x10, 0xef, 0x07, 0xf5,
+ 0xf1, 0x03, 0x12, 0xc1, 0xcc, 0x25, 0x0a, 0x1f, 0xe8, 0x1b, 0xce, 0x17, 0x28,
+ 0x0f, 0x0a, 0x33, 0xd0, 0x06, 0x2f, 0xf2, 0x01, 0xf2, 0xe8, 0xdd, 0xd8, 0xff,
+ 0x02, 0xfe, 0xd2, 0x09, 0xf3, 0x81, 0xe5, 0xf8, 0xf8, 0x1e, 0x35, 0xd4, 0xf5,
+ 0xf0, 0x42, 0xed, 0xc3, 0x04, 0x00, 0x17, 0xef, 0x2d, 0x1d, 0xdf, 0xc6, 0xfe,
+ 0xf4, 0xf7, 0x46, 0x08, 0xe2, 0xee, 0xf1, 0xd2, 0x04, 0xf7, 0x24, 0xd5, 0xdf,
+ 0xf6, 0xd8, 0xeb, 0xd6, 0x08, 0xec, 0x0e, 0xc8, 0x1e, 0xe8, 0x09, 0x05, 0xb3,
+ 0xf9, 0xfe, 0xe8, 0xe8, 0xe5, 0xe5, 0x39, 0x7f, 0xa4, 0x34, 0x45, 0xc3, 0xcc,
+ 0xfc, 0xec, 0xe5, 0xf0, 0xf7, 0xf2, 0x05, 0x00, 0x29, 0x0a, 0x09, 0x01, 0x38,
+ 0x02, 0xdd, 0xdc, 0x32, 0xe1, 0xd3, 0xe7, 0xf5, 0xbc, 0xf3, 0xf9, 0xe5, 0x2e,
+ 0xeb, 0xeb, 0xee, 0xe9, 0x34, 0xd5, 0x01, 0xda, 0xe3, 0xc3, 0xae, 0x38, 0xbf,
+ 0xde, 0xeb, 0x0a, 0x6c, 0x23, 0x72, 0x01, 0xfd, 0xc5, 0x41, 0x35, 0x18, 0x01,
+ 0x7f, 0x15, 0xe5, 0xbb, 0x3d, 0xd6, 0xe9, 0xd2, 0x26, 0xc1, 0xef, 0xf9, 0x37,
+ 0xbc, 0xb8, 0x31, 0x4d, 0x0e, 0x42, 0xef, 0x46, 0x0d, 0x3f, 0x23, 0xfd, 0xc0,
+ 0xd6, 0xeb, 0x24, 0xf3, 0x45, 0x63, 0x15, 0xdc, 0xe5, 0x1a, 0xe4, 0x17, 0xfe,
+ 0x15, 0x0f, 0x03, 0xf1, 0xee, 0xfd, 0xec, 0x1b, 0x3a, 0xbc, 0xb4, 0xfd, 0x23,
+ 0x25, 0x01, 0xe5, 0x81, 0x10, 0xf0, 0xe9, 0x32, 0xf4, 0x15, 0x0e, 0xd9, 0x23,
+ 0xbb, 0xfd, 0x3d, 0x06, 0x0e, 0x12, 0xa4, 0x0f, 0xcb, 0xfd, 0x0c, 0x0a, 0x0c,
+ 0xee, 0x06, 0xa3, 0x00, 0x08, 0x20, 0x2e, 0x4f, 0xee, 0x0f, 0x41, 0x38, 0xe6,
+ 0xcc, 0x16, 0x42, 0xc0, 0xcc, 0x20, 0x1c, 0x0b, 0x00, 0x1b, 0xde, 0x47, 0xd8,
+ 0x08, 0xe3, 0x37, 0xfb, 0xfd, 0xdb, 0xc9, 0x08, 0xe9, 0x06, 0xc4, 0x10, 0xf2,
+ 0xe9, 0xe0, 0xcd, 0xda, 0x04, 0x01, 0x1e, 0x11, 0xd1, 0xb9, 0xff, 0x1c, 0xde,
+ 0x14, 0xdd, 0xe7, 0x4e, 0x01, 0xeb, 0xb2, 0x61, 0x2c, 0x4b, 0x02, 0xd9, 0x09,
+ 0xde, 0xc8, 0x06, 0x22, 0x0e, 0x03, 0xe2, 0xf7, 0x18, 0xf0, 0xfe, 0xd2, 0xf7,
+ 0xe2, 0x2c, 0x1b, 0x2e, 0xf9, 0xf1, 0xdc, 0x18, 0x02, 0x81, 0xe9, 0x06, 0xc5,
+ 0x22, 0x52, 0x89, 0xfd, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x78, 0xd8, 0xff, 0xff, 0x28, 0x26, 0x00, 0x00, 0xc4, 0x0d, 0x00, 0x00, 0xd4,
+ 0x0e, 0x00, 0x00, 0xf0, 0x1a, 0x00, 0x00, 0x24, 0x27, 0x00, 0x00, 0x00, 0xd6,
+ 0xff, 0xff, 0x08, 0x24, 0x00, 0x00, 0xbd, 0xd6, 0xff, 0xff, 0x0c, 0xf2, 0xff,
+ 0xff, 0xbd, 0x01, 0x00, 0x00, 0xb6, 0x03, 0x00, 0x00, 0xce, 0xe2, 0xff, 0xff,
+ 0x78, 0x5d, 0x00, 0x00, 0x93, 0x50, 0x00, 0x00, 0xb4, 0xd4, 0xff, 0xff, 0x18,
+ 0xfb, 0xff, 0xff, 0x2c, 0x06, 0x00, 0x00, 0xa4, 0x4b, 0x00, 0x00, 0x3e, 0x59,
+ 0x00, 0x00, 0x9f, 0x3f, 0x00, 0x00, 0x71, 0x21, 0x00, 0x00, 0xc5, 0x3e, 0x00,
+ 0x00, 0xc6, 0xc0, 0xff, 0xff, 0x21, 0x18, 0x00, 0x00, 0xd1, 0x7a, 0x00, 0x00,
+ 0xe1, 0xe7, 0xff, 0xff, 0x83, 0x29, 0x00, 0x00, 0xb5, 0x26, 0x00, 0x00, 0xf0,
+ 0x33, 0x00, 0x00, 0x96, 0x5a, 0x00, 0x00, 0x15, 0x1d, 0x00, 0x00, 0x21, 0xf2,
+ 0xff, 0xff, 0xd9, 0x3e, 0x00, 0x00, 0xec, 0x04, 0x00, 0x00, 0x8c, 0xe4, 0xff,
+ 0xff, 0xa8, 0xf6, 0xff, 0xff, 0x16, 0x43, 0x00, 0x00, 0xdf, 0xd2, 0xff, 0xff,
+ 0xf7, 0x06, 0x00, 0x00, 0x3a, 0x2d, 0x00, 0x00, 0x3f, 0x34, 0x00, 0x00, 0x1d,
+ 0x27, 0x00, 0x00, 0x16, 0x4e, 0x00, 0x00, 0x28, 0x11, 0x00, 0x00, 0x8c, 0x03,
+ 0x00, 0x00, 0x1f, 0x43, 0x00, 0x00, 0x1c, 0xd5, 0xff, 0xff, 0x3a, 0x11, 0x00,
+ 0x00, 0x4b, 0x3e, 0x00, 0x00, 0x43, 0x1d, 0x00, 0x00, 0xcf, 0x27, 0x00, 0x00,
+ 0x60, 0xc6, 0xff, 0xff, 0xc1, 0xcd, 0xff, 0xff, 0x97, 0x18, 0x00, 0x00, 0x57,
+ 0x22, 0x00, 0x00, 0x05, 0x24, 0x00, 0x00, 0x85, 0x15, 0x00, 0x00, 0x16, 0x10,
+ 0x00, 0x00, 0x50, 0xd2, 0xff, 0xff, 0x04, 0xff, 0xff, 0xff, 0x9f, 0xf9, 0xff,
+ 0xff, 0x9a, 0x58, 0x00, 0x00, 0x1c, 0xed, 0xff, 0xff, 0x8d, 0x21, 0x00, 0x00,
+ 0xd1, 0x34, 0x00, 0x00, 0x54, 0x5c, 0x00, 0x00, 0x29, 0xf5, 0xff, 0xff, 0x91,
+ 0x2b, 0x00, 0x00, 0x27, 0x0d, 0x00, 0x00, 0x72, 0x15, 0x00, 0x00, 0xc2, 0x15,
+ 0x00, 0x00, 0xcf, 0xce, 0xff, 0xff, 0x34, 0x20, 0x00, 0x00, 0xb3, 0x07, 0x00,
+ 0x00, 0x02, 0x6c, 0x00, 0x00, 0x86, 0x41, 0x00, 0x00, 0xf2, 0x2e, 0x00, 0x00,
+ 0x32, 0xc9, 0xff, 0xff, 0x1d, 0xf4, 0xff, 0xff, 0x1d, 0xfc, 0xff, 0xff, 0xf9,
+ 0x1c, 0x00, 0x00, 0x40, 0xfa, 0xff, 0xff, 0x1d, 0x59, 0x00, 0x00, 0x26, 0x0e,
+ 0x00, 0x00, 0x5b, 0x0e, 0x00, 0x00, 0x68, 0x08, 0x00, 0x00, 0xed, 0x54, 0x00,
+ 0x00, 0x83, 0x07, 0x00, 0x00, 0xf2, 0x1f, 0x00, 0x00, 0x1b, 0x32, 0x00, 0x00,
+ 0xd0, 0xf1, 0xff, 0xff, 0x33, 0x0f, 0x00, 0x00, 0x37, 0x54, 0x00, 0x00, 0x66,
+ 0x15, 0x00, 0x00, 0x0d, 0xea, 0xff, 0xff, 0x82, 0xdc, 0xff, 0xff, 0xd7, 0x34,
+ 0x00, 0x00, 0x98, 0xf7, 0xff, 0xff, 0x6c, 0x13, 0x00, 0x00, 0xfd, 0x46, 0x00,
+ 0x00, 0x82, 0xe1, 0xff, 0xff, 0xca, 0x54, 0x00, 0x00, 0xaf, 0x29, 0x00, 0x00,
+ 0x22, 0xf5, 0xff, 0xff, 0x89, 0x13, 0x00, 0x00, 0x9c, 0xf1, 0xff, 0xff, 0xcd,
+ 0x8d, 0x00, 0x00, 0x2a, 0x41, 0x00, 0x00, 0x86, 0x0d, 0x00, 0x00, 0x44, 0x2a,
+ 0x00, 0x00, 0x7d, 0x3f, 0x00, 0x00, 0x6c, 0x25, 0x00, 0x00, 0x7f, 0x0e, 0x00,
+ 0x00, 0xbd, 0x2b, 0x00, 0x00, 0x3c, 0x04, 0x00, 0x00, 0xf2, 0x4b, 0x00, 0x00,
+ 0x11, 0xee, 0xff, 0xff, 0x0c, 0x3c, 0x00, 0x00, 0x42, 0x45, 0x00, 0x00, 0x10,
+ 0x45, 0x00, 0x00, 0xa7, 0x7f, 0x00, 0x00, 0x3b, 0xf5, 0xff, 0xff, 0x19, 0x2e,
+ 0x00, 0x00, 0xbd, 0x41, 0x00, 0x00, 0xd7, 0xd8, 0xff, 0xff, 0xbd, 0x30, 0x00,
+ 0x00, 0x77, 0x55, 0x00, 0x00, 0x5e, 0x8b, 0xfd, 0xff, 0x04, 0x00, 0x00, 0x00,
+ 0x80, 0x04, 0x00, 0x00, 0xa6, 0xde, 0xf3, 0xa5, 0xde, 0xdb, 0xc4, 0xf3, 0x2a,
+ 0xd5, 0xdf, 0x81, 0x02, 0xe1, 0xd8, 0x0c, 0xc8, 0x19, 0xca, 0x11, 0xc6, 0xd7,
+ 0x37, 0x7f, 0x23, 0xd5, 0x0a, 0x10, 0x81, 0x15, 0xab, 0x9c, 0xef, 0x9b, 0x94,
+ 0xe8, 0xb2, 0x3f, 0x51, 0xe5, 0x0c, 0x23, 0xed, 0x32, 0xb7, 0x81, 0x85, 0x17,
+ 0x03, 0x0c, 0xb9, 0xba, 0x81, 0xfb, 0x0d, 0xeb, 0x10, 0x7f, 0x35, 0xee, 0x00,
+ 0xbb, 0x08, 0xe8, 0xe6, 0xe3, 0xe4, 0xd9, 0x32, 0x7f, 0x36, 0xe2, 0x28, 0x48,
+ 0xdc, 0xe6, 0x8c, 0xc4, 0x49, 0xae, 0xc9, 0xf4, 0xf2, 0xe8, 0xee, 0x7f, 0xf3,
+ 0xa1, 0xa6, 0xec, 0x07, 0x56, 0x7f, 0xf8, 0x39, 0xb6, 0xdf, 0x05, 0x64, 0xdd,
+ 0x63, 0x18, 0xea, 0xba, 0xea, 0x73, 0x32, 0x99, 0x41, 0x02, 0x09, 0xee, 0xe2,
+ 0x05, 0xeb, 0xde, 0xed, 0xfe, 0x04, 0xcd, 0xf8, 0x99, 0x5a, 0xe1, 0xcb, 0x32,
+ 0x33, 0xae, 0x3b, 0x41, 0x03, 0x3a, 0x84, 0x42, 0x81, 0xb6, 0x57, 0x0e, 0xa6,
+ 0x4a, 0x0d, 0xcd, 0x34, 0x8e, 0x7f, 0x7f, 0x57, 0xe8, 0x16, 0xcb, 0x7f, 0x35,
+ 0xd5, 0xb4, 0x27, 0x5d, 0xad, 0x8f, 0xe4, 0xb9, 0x35, 0xcd, 0xc9, 0xfb, 0x9f,
+ 0x7f, 0x7f, 0xb4, 0x69, 0xd2, 0x62, 0x7f, 0xb1, 0xd6, 0xd4, 0xd0, 0x7f, 0x29,
+ 0xed, 0xd9, 0x70, 0x03, 0xad, 0xc7, 0x17, 0x5a, 0x2e, 0xe1, 0x01, 0x24, 0xb8,
+ 0x17, 0xd1, 0xf4, 0xe5, 0x61, 0x59, 0xed, 0xf0, 0x11, 0x7f, 0xe5, 0x1d, 0xb7,
+ 0xf9, 0x91, 0x43, 0xf8, 0xe9, 0xac, 0xf4, 0x9c, 0xab, 0x65, 0x23, 0x53, 0xd4,
+ 0xfb, 0x4c, 0xdc, 0x65, 0xa5, 0x49, 0xd6, 0x22, 0x7f, 0x7f, 0xd0, 0xbb, 0xd4,
+ 0x0f, 0x81, 0x81, 0x7f, 0xe2, 0x81, 0x26, 0xcc, 0x7f, 0x10, 0xc4, 0xf9, 0x8c,
+ 0xff, 0xd2, 0xd8, 0x7f, 0xcf, 0xd3, 0x81, 0x7f, 0x81, 0xcb, 0x7f, 0x7f, 0x81,
+ 0x0a, 0x18, 0xe2, 0x17, 0x81, 0x14, 0xb5, 0x44, 0xe3, 0xc4, 0xdd, 0x4b, 0xf0,
+ 0xe7, 0xd3, 0x83, 0x39, 0x20, 0x20, 0xf1, 0x04, 0xf3, 0x11, 0x2d, 0xe8, 0x81,
+ 0xd5, 0xf4, 0xa0, 0x04, 0xb1, 0x0a, 0x10, 0xc4, 0x9d, 0xfe, 0xbc, 0x24, 0x65,
+ 0xe8, 0x8a, 0x15, 0xc9, 0xa4, 0xbc, 0x81, 0x81, 0xe7, 0xcc, 0xe1, 0xda, 0xc3,
+ 0x56, 0x0c, 0x9b, 0xd8, 0xfa, 0xc3, 0x03, 0xe7, 0x07, 0x28, 0xff, 0xf1, 0xfd,
+ 0xc1, 0xf0, 0x3a, 0xae, 0x7c, 0xff, 0xe0, 0x0f, 0xd8, 0x08, 0xdc, 0x6e, 0xd4,
+ 0x26, 0xe0, 0x7f, 0xf7, 0x00, 0x2e, 0xdf, 0x00, 0xf8, 0x48, 0xa4, 0xf8, 0xea,
+ 0xbd, 0x2b, 0xd6, 0x11, 0xe0, 0xe1, 0x1a, 0x03, 0x0d, 0xba, 0x23, 0xe7, 0xc3,
+ 0xe9, 0x5a, 0xd0, 0xa2, 0x2b, 0xff, 0xe8, 0xee, 0xdb, 0x01, 0xe1, 0xc1, 0xe9,
+ 0x13, 0xfd, 0x53, 0x67, 0xb2, 0xe2, 0xe3, 0x38, 0x5b, 0x04, 0xb9, 0xbb, 0x17,
+ 0x17, 0x81, 0xce, 0x32, 0xe6, 0x48, 0x19, 0x3b, 0x35, 0xb7, 0x0b, 0x00, 0xa9,
+ 0xb2, 0xe5, 0xcb, 0xec, 0x7f, 0xe1, 0xd6, 0xd3, 0x37, 0xe1, 0xc0, 0xa5, 0xbd,
+ 0xc6, 0x0b, 0xbd, 0xaa, 0x6a, 0x7f, 0x35, 0xe2, 0xaf, 0xf1, 0xea, 0xb1, 0xf9,
+ 0x7f, 0x7f, 0x4d, 0xbc, 0xa7, 0x29, 0x7f, 0xd4, 0xff, 0x20, 0x32, 0x8b, 0x78,
+ 0xa7, 0xc6, 0x17, 0xe8, 0xa8, 0xcf, 0xbf, 0xbb, 0x7f, 0x7f, 0xc3, 0xaa, 0x35,
+ 0xf2, 0x54, 0xda, 0x7f, 0xfb, 0x15, 0xdc, 0xaf, 0xff, 0x91, 0xb2, 0x08, 0xf1,
+ 0xf1, 0x1f, 0xe3, 0xa2, 0xbc, 0xdc, 0x01, 0xec, 0x07, 0xf1, 0x33, 0x7a, 0x28,
+ 0xeb, 0x7f, 0x32, 0x0b, 0xe4, 0xe3, 0x7f, 0x98, 0xc8, 0xda, 0x90, 0xce, 0xde,
+ 0x3d, 0x92, 0x85, 0xf8, 0xe6, 0x0d, 0xcd, 0xcb, 0xb7, 0xeb, 0xb8, 0x7f, 0x24,
+ 0xe8, 0xfb, 0x92, 0x11, 0x96, 0x47, 0xca, 0xe0, 0xac, 0x7f, 0x7f, 0x4e, 0x11,
+ 0xdc, 0x7f, 0xa4, 0x81, 0x7f, 0x7f, 0xf2, 0x3f, 0x7f, 0x7f, 0x81, 0x01, 0xdd,
+ 0xe3, 0x7f, 0xd5, 0x7f, 0xca, 0xed, 0x4c, 0x07, 0xaa, 0x06, 0x7f, 0xd2, 0x7f,
+ 0x81, 0x81, 0x7f, 0x30, 0x7f, 0xaf, 0xca, 0xc9, 0xfd, 0x81, 0x7f, 0x2c, 0x1d,
+ 0x7e, 0x81, 0x95, 0x48, 0xe3, 0x1f, 0x58, 0x7f, 0x7f, 0x24, 0x7f, 0x81, 0x81,
+ 0x7f, 0xdd, 0xf1, 0x93, 0xef, 0x8e, 0xb0, 0xfb, 0x81, 0x81, 0x7f, 0x7f, 0x7f,
+ 0xe9, 0x1d, 0x7f, 0x36, 0x81, 0x7f, 0x7f, 0xa6, 0x81, 0x7f, 0x81, 0xa2, 0x7f,
+ 0x22, 0x81, 0x81, 0xa3, 0x7f, 0x7f, 0x6e, 0x7f, 0x7f, 0xe4, 0x04, 0x81, 0xfb,
+ 0xff, 0x7f, 0x02, 0x72, 0xdb, 0x16, 0xc2, 0xed, 0xdf, 0x9d, 0xb4, 0x34, 0xaa,
+ 0x81, 0x7f, 0xea, 0x7f, 0x81, 0xcc, 0x81, 0x7f, 0x81, 0xfd, 0x5c, 0xd2, 0x7f,
+ 0x15, 0x55, 0xbc, 0x04, 0xf4, 0xe7, 0xb3, 0x67, 0x1e, 0x1e, 0x6f, 0x4c, 0x39,
+ 0xe6, 0x56, 0x39, 0x1c, 0x51, 0xf4, 0x09, 0xe8, 0xa8, 0x53, 0x29, 0xc6, 0xfa,
+ 0x13, 0xe3, 0xf6, 0xbd, 0xf6, 0x75, 0xa9, 0x81, 0xc9, 0xbf, 0xf3, 0xc1, 0x17,
+ 0xd3, 0x1c, 0x2a, 0x03, 0xd2, 0x1c, 0xc8, 0xd2, 0x0f, 0x6c, 0xa7, 0xea, 0x33,
+ 0xab, 0x3a, 0xe6, 0xe3, 0xe4, 0xf9, 0x26, 0x65, 0x19, 0xb2, 0xd0, 0x23, 0xfe,
+ 0x1c, 0x11, 0xe2, 0xee, 0xf4, 0xcb, 0xb0, 0xd2, 0x0f, 0x23, 0xc3, 0xfd, 0x63,
+ 0x0e, 0x04, 0xb7, 0x35, 0xfe, 0x7f, 0x84, 0x4d, 0x05, 0x64, 0xe2, 0xf0, 0x26,
+ 0xa9, 0xbc, 0x2f, 0xf6, 0xe8, 0xef, 0x1c, 0xcd, 0xc6, 0xc0, 0xab, 0x8f, 0x16,
+ 0xec, 0xe6, 0xe3, 0x7f, 0x40, 0xe9, 0x9d, 0xb6, 0xdb, 0xaa, 0xad, 0x83, 0xf8,
+ 0x08, 0xf3, 0xd9, 0x7f, 0xd4, 0xc4, 0x19, 0x8c, 0x0f, 0x7f, 0xb9, 0x92, 0x10,
+ 0x97, 0x7f, 0xce, 0xd6, 0x9d, 0x06, 0x0c, 0xfb, 0xd9, 0xf2, 0x1b, 0xe2, 0xf0,
+ 0xcc, 0x34, 0x7f, 0xd6, 0xe1, 0x03, 0xf2, 0xb1, 0xf0, 0xdf, 0x09, 0x21, 0xf7,
+ 0x4e, 0xff, 0x24, 0xfa, 0xe1, 0xcb, 0xf5, 0xcc, 0xdc, 0xc4, 0xf7, 0xf5, 0x4b,
+ 0xfb, 0x3f, 0xef, 0xab, 0xe4, 0xf8, 0x08, 0xea, 0x64, 0xfc, 0x2d, 0x17, 0x0c,
+ 0x19, 0xdd, 0xa7, 0x35, 0x08, 0xa6, 0x09, 0xfa, 0xfc, 0x02, 0xef, 0xb2, 0x72,
+ 0x31, 0xc9, 0xff, 0x1c, 0xde, 0xa8, 0x05, 0xfe, 0xb5, 0xc9, 0x0a, 0xdd, 0xfd,
+ 0x17, 0x2d, 0xfd, 0xe4, 0xe0, 0xe9, 0x06, 0xf2, 0xf8, 0x10, 0xc2, 0xed, 0xde,
+ 0xc7, 0x0d, 0x4c, 0xf1, 0xf3, 0x7f, 0xd2, 0x08, 0x23, 0x1e, 0xdc, 0xf6, 0xfb,
+ 0x5c, 0x95, 0x2a, 0x16, 0xe4, 0xc9, 0xdb, 0x7f, 0xed, 0x55, 0xff, 0x06, 0xdb,
+ 0xe3, 0xe6, 0xda, 0xe9, 0xb2, 0x3d, 0xc9, 0xef, 0x43, 0x9d, 0xf5, 0xdc, 0x12,
+ 0x06, 0xd8, 0xc7, 0x5f, 0xf4, 0x7f, 0x29, 0x43, 0x4e, 0xd3, 0x12, 0x4a, 0x5a,
+ 0x06, 0xe9, 0x31, 0xf3, 0x90, 0x7f, 0xac, 0xf8, 0xd1, 0xce, 0xf4, 0x7f, 0xe1,
+ 0x34, 0x7f, 0xdf, 0xa9, 0xfc, 0x01, 0x39, 0xc5, 0xff, 0x52, 0x06, 0x57, 0x7f,
+ 0x81, 0xb5, 0x92, 0xae, 0xed, 0x0a, 0x03, 0xeb, 0xb7, 0xbb, 0x63, 0x0f, 0x52,
+ 0x7f, 0x46, 0x46, 0xe1, 0xd7, 0x5f, 0xb4, 0x10, 0xee, 0x81, 0x52, 0x7f, 0x81,
+ 0xeb, 0xc3, 0xa3, 0xc2, 0xfd, 0xfc, 0x9d, 0x00, 0x5a, 0x0f, 0x20, 0xae, 0xae,
+ 0xfa, 0xdb, 0x2e, 0xd2, 0xa4, 0x0c, 0x1d, 0x7f, 0xb3, 0xd5, 0xc3, 0x0c, 0xef,
+ 0x7f, 0xf2, 0xf4, 0xd1, 0xbb, 0xab, 0x23, 0x7f, 0x43, 0x0d, 0xf8, 0xec, 0x40,
+ 0x7f, 0x7f, 0xdf, 0xf0, 0xf3, 0x1b, 0xd9, 0xe3, 0x59, 0xbc, 0xe5, 0xc4, 0xed,
+ 0x0b, 0x08, 0xc4, 0x02, 0xf3, 0xe3, 0x3f, 0xbd, 0xc8, 0xf1, 0xbf, 0xc5, 0xdb,
+ 0xdf, 0x4d, 0xd9, 0x05, 0xf1, 0x29, 0x3e, 0xe3, 0xf7, 0xfe, 0x19, 0x15, 0x0c,
+ 0xe2, 0x02, 0x00, 0x63, 0xda, 0xd6, 0xf9, 0xe7, 0x01, 0x2a, 0x0d, 0xe7, 0x77,
+ 0xee, 0xae, 0xeb, 0xcb, 0xf3, 0xe0, 0xfc, 0x2d, 0xfb, 0xfe, 0x04, 0x1a, 0xc5,
+ 0xbd, 0xf0, 0x46, 0xfa, 0x93, 0x02, 0x1d, 0xfd, 0xfe, 0xf4, 0xd2, 0x0c, 0x23,
+ 0x01, 0x0b, 0xc9, 0x20, 0xf0, 0xfe, 0xff, 0x99, 0x7f, 0xfb, 0xeb, 0xea, 0xef,
+ 0xfe, 0xb6, 0xf9, 0x11, 0xca, 0xa1, 0xd9, 0xe6, 0xf2, 0xc4, 0xd9, 0xf8, 0x12,
+ 0xa3, 0xfc, 0x1c, 0x03, 0xdf, 0x1e, 0xc5, 0xe3, 0xce, 0xd6, 0xf8, 0x23, 0xe9,
+ 0x02, 0x91, 0xd2, 0xee, 0xee, 0x3c, 0x0b, 0xec, 0xde, 0xd5, 0x4d, 0x13, 0x25,
+ 0xf7, 0xa1, 0xd1, 0xca, 0xfb, 0xd1, 0xf6, 0x07, 0xea, 0xd6, 0x28, 0xf0, 0xd6,
+ 0x0b, 0xca, 0xc3, 0xfd, 0xb4, 0xb1, 0xf7, 0xc8, 0xda, 0x05, 0xf6, 0xd0, 0xea,
+ 0x8f, 0xfd, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xab, 0xe6,
+ 0xff, 0xff, 0x26, 0x01, 0x00, 0x00, 0xae, 0x02, 0x00, 0x00, 0x85, 0xe8, 0xff,
+ 0xff, 0xb4, 0xeb, 0xff, 0xff, 0xd0, 0xf5, 0xff, 0xff, 0x1e, 0x0f, 0x00, 0x00,
+ 0x6b, 0xeb, 0xff, 0xff, 0x4b, 0xe6, 0xff, 0xff, 0xe5, 0xe6, 0xff, 0xff, 0x2e,
+ 0xf1, 0xff, 0xff, 0x46, 0x01, 0x00, 0x00, 0xa6, 0x15, 0x00, 0x00, 0x32, 0xfe,
+ 0xff, 0xff, 0x8a, 0x09, 0x00, 0x00, 0xf4, 0xeb, 0xff, 0xff, 0xa7, 0xf8, 0xff,
+ 0xff, 0xeb, 0xfa, 0xff, 0xff, 0xd0, 0x1f, 0x00, 0x00, 0x0c, 0x24, 0x00, 0x00,
+ 0x9b, 0xfc, 0xff, 0xff, 0x0c, 0xff, 0xff, 0xff, 0x77, 0xe0, 0xff, 0xff, 0x9a,
+ 0xef, 0xff, 0xff, 0x19, 0x08, 0x00, 0x00, 0x67, 0x22, 0x00, 0x00, 0xe0, 0x17,
+ 0x00, 0x00, 0xb6, 0xe9, 0xff, 0xff, 0xbc, 0xef, 0xff, 0xff, 0x33, 0xff, 0xff,
+ 0xff, 0x8b, 0xf9, 0xff, 0xff, 0x52, 0xdb, 0xff, 0xff, 0x91, 0x0c, 0x00, 0x00,
+ 0x14, 0xff, 0xff, 0xff, 0x1e, 0xf4, 0xff, 0xff, 0xbf, 0xfd, 0xff, 0xff, 0xf3,
+ 0xe5, 0xff, 0xff, 0x29, 0xf1, 0xff, 0xff, 0x15, 0x14, 0x00, 0x00, 0x10, 0x23,
+ 0x00, 0x00, 0xd7, 0x17, 0x00, 0x00, 0xfc, 0x29, 0x00, 0x00, 0x12, 0x15, 0x00,
+ 0x00, 0x92, 0xf9, 0xff, 0xff, 0xbb, 0x13, 0x00, 0x00, 0x45, 0xe5, 0xff, 0xff,
+ 0x26, 0xf6, 0xff, 0xff, 0x32, 0xf9, 0xff, 0xff, 0x46, 0x0c, 0x00, 0x00, 0x0e,
+ 0x2a, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x78, 0xf5, 0xff, 0xff, 0xaa, 0xf0,
+ 0xff, 0xff, 0x22, 0xec, 0xff, 0xff, 0xbe, 0x21, 0x00, 0x00, 0x5d, 0xf9, 0xff,
+ 0xff, 0xea, 0xe7, 0xff, 0xff, 0xb7, 0x2f, 0x00, 0x00, 0xce, 0xf8, 0xff, 0xff,
+ 0x90, 0x2e, 0x00, 0x00, 0xe5, 0x26, 0x00, 0x00, 0xe1, 0xf2, 0xff, 0xff, 0x33,
+ 0xf9, 0xff, 0xff, 0x9f, 0x14, 0x00, 0x00, 0x99, 0x1e, 0x00, 0x00, 0x9d, 0xf9,
+ 0xff, 0xff, 0xef, 0xdb, 0xff, 0xff, 0x45, 0xf0, 0xff, 0xff, 0x08, 0xf4, 0xff,
+ 0xff, 0x3f, 0xf2, 0xff, 0xff, 0x12, 0xf1, 0xff, 0xff, 0x69, 0xf0, 0xff, 0xff,
+ 0xd7, 0xeb, 0xff, 0xff, 0xac, 0xcf, 0xff, 0xff, 0xca, 0xe7, 0xff, 0xff, 0x89,
+ 0xf2, 0xff, 0xff, 0xe6, 0x26, 0x00, 0x00, 0x6d, 0xf1, 0xff, 0xff, 0xee, 0xd4,
+ 0xff, 0xff, 0xca, 0xfa, 0xff, 0xff, 0x42, 0xec, 0xff, 0xff, 0x20, 0x22, 0x00,
+ 0x00, 0x71, 0x03, 0x00, 0x00, 0xcd, 0xeb, 0xff, 0xff, 0x15, 0x2a, 0x00, 0x00,
+ 0xe0, 0xec, 0xff, 0xff, 0x3f, 0xf9, 0xff, 0xff, 0x2c, 0xff, 0xff, 0xff, 0x06,
+ 0xfa, 0xff, 0xff, 0x72, 0xfe, 0xff, 0xff, 0xf7, 0xfd, 0xff, 0xff, 0xe9, 0xfd,
+ 0xff, 0xff, 0xcb, 0xf1, 0xff, 0xff, 0xe7, 0xe4, 0xff, 0xff, 0xef, 0xfd, 0xff,
+ 0xff, 0x80, 0xf6, 0xff, 0xff, 0x1e, 0x06, 0x00, 0x00, 0xdb, 0xfa, 0xff, 0xff,
+ 0x1c, 0xe5, 0xff, 0xff, 0x24, 0xf5, 0xff, 0xff, 0xfb, 0x1a, 0x00, 0x00, 0xb4,
+ 0x1c, 0x00, 0x00, 0x18, 0x3a, 0x00, 0x00, 0x02, 0xef, 0xff, 0xff, 0x71, 0x22,
+ 0x00, 0x00, 0xe1, 0xf2, 0xff, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xd6, 0x02, 0x00,
+ 0x00, 0x16, 0xf8, 0xff, 0xff, 0x87, 0xf5, 0xff, 0xff, 0x33, 0xff, 0xff, 0xff,
+ 0x62, 0xfb, 0xff, 0xff, 0x1d, 0x22, 0x00, 0x00, 0x5d, 0xf4, 0xff, 0xff, 0x09,
+ 0x0b, 0x00, 0x00, 0xd5, 0xd6, 0xff, 0xff, 0x5a, 0xf3, 0xff, 0xff, 0x6c, 0xfe,
+ 0xff, 0xff, 0x7c, 0xff, 0xff, 0xff, 0x6b, 0x25, 0x00, 0x00, 0x0a, 0xda, 0xff,
+ 0xff, 0x7d, 0xf8, 0xff, 0xff, 0xac, 0xf3, 0xff, 0xff, 0x71, 0xf9, 0xff, 0xff,
+ 0x39, 0xf3, 0xff, 0xff, 0x2d, 0xd4, 0xff, 0xff, 0x33, 0xfc, 0xff, 0xff, 0xff,
+ 0xf2, 0xff, 0xff, 0xf6, 0x91, 0xfd, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x40,
+ 0x00, 0x00, 0xba, 0xcf, 0x85, 0xce, 0x0c, 0x9f, 0xff, 0xeb, 0x0c, 0xa5, 0xda,
+ 0xeb, 0x12, 0xda, 0xf0, 0x60, 0xf8, 0x00, 0xf0, 0x9f, 0xe6, 0x09, 0xef, 0xed,
+ 0x02, 0xf9, 0x4f, 0xe9, 0x44, 0xae, 0x5c, 0x4d, 0xf2, 0xe7, 0xd9, 0x31, 0xf8,
+ 0xd0, 0xd3, 0x2d, 0x03, 0xdc, 0x00, 0x36, 0x0e, 0xff, 0xfb, 0x1a, 0x5d, 0x7c,
+ 0xbe, 0xf5, 0xd1, 0x1e, 0x32, 0x50, 0x2b, 0x1c, 0x02, 0xdf, 0x49, 0x3c, 0x21,
+ 0x1a, 0xf7, 0xfc, 0x48, 0x03, 0xda, 0xfd, 0x01, 0xf7, 0x58, 0x19, 0x22, 0x2e,
+ 0x0f, 0xd8, 0xb0, 0x3f, 0x25, 0x06, 0x81, 0xf7, 0xcf, 0x22, 0x28, 0x34, 0xc8,
+ 0xf4, 0xe5, 0xff, 0xc1, 0x32, 0xfa, 0x0c, 0x62, 0x20, 0x0a, 0xf5, 0x4c, 0xcc,
+ 0xcc, 0xd5, 0xe9, 0x05, 0x45, 0x41, 0x17, 0x3c, 0xe1, 0xfe, 0x1a, 0x25, 0x2c,
+ 0x03, 0xfa, 0x21, 0xdb, 0xdc, 0x02, 0xec, 0xf9, 0x14, 0x09, 0x0d, 0x23, 0xbe,
+ 0xe5, 0x00, 0x23, 0x2b, 0x02, 0x0c, 0xf6, 0x1c, 0xc5, 0xec, 0x36, 0x5e, 0x1e,
+ 0x09, 0x00, 0xff, 0xb3, 0x43, 0xa2, 0x04, 0x3b, 0xf5, 0xd3, 0xd4, 0x39, 0x0a,
+ 0xdd, 0x00, 0xf1, 0xfe, 0x0d, 0xd2, 0xf5, 0xf1, 0x24, 0xcd, 0xe7, 0x62, 0x03,
+ 0x07, 0xec, 0x04, 0xcf, 0x16, 0xf0, 0xbd, 0x37, 0xf4, 0xf5, 0xdf, 0x81, 0x15,
+ 0xf7, 0xf8, 0xbe, 0xda, 0xd2, 0xdd, 0xd6, 0xd5, 0xe2, 0xfa, 0xf6, 0x10, 0x21,
+ 0xe0, 0x30, 0xd1, 0x18, 0xfd, 0x0b, 0xd7, 0xde, 0xd9, 0xde, 0xc3, 0x2e, 0xf8,
+ 0xdd, 0xcd, 0x13, 0x12, 0x0b, 0x0f, 0xed, 0x0e, 0xe6, 0xe4, 0xd3, 0x32, 0x02,
+ 0x29, 0x1e, 0xd8, 0xe6, 0xca, 0xf4, 0x07, 0x2b, 0x1e, 0x11, 0x0a, 0xf9, 0xce,
+ 0x4c, 0xd1, 0x1c, 0x24, 0xea, 0x11, 0xf1, 0x0f, 0xc4, 0x12, 0xf8, 0x49, 0x06,
+ 0x41, 0x01, 0x1c, 0xec, 0xe5, 0xe5, 0x1d, 0xfd, 0x2c, 0xde, 0xdb, 0x2f, 0x10,
+ 0x78, 0x68, 0x04, 0x45, 0xd0, 0xf3, 0xfb, 0x1e, 0x2e, 0xf5, 0xad, 0xd1, 0xf3,
+ 0xf8, 0x05, 0x0b, 0x19, 0xee, 0xf7, 0xec, 0x14, 0xee, 0xf0, 0x17, 0x2f, 0x16,
+ 0xa7, 0xe1, 0xb8, 0x11, 0x32, 0xf5, 0x26, 0x1d, 0x26, 0x18, 0xd9, 0x03, 0xfc,
+ 0x05, 0x45, 0x24, 0xe0, 0xff, 0x0d, 0xfe, 0xf6, 0x19, 0xe5, 0x07, 0x05, 0x10,
+ 0x0f, 0x2b, 0x29, 0x2b, 0x0c, 0x12, 0xdf, 0x56, 0x00, 0x38, 0x14, 0xe4, 0x0f,
+ 0xdc, 0x16, 0x58, 0x09, 0x14, 0x01, 0xf9, 0x0f, 0xd2, 0x25, 0x02, 0x13, 0xfc,
+ 0xe7, 0x1d, 0x27, 0xf8, 0x0c, 0xee, 0xae, 0xe0, 0x07, 0x10, 0xc3, 0x16, 0x04,
+ 0xd0, 0x11, 0x13, 0xcf, 0x7f, 0xe4, 0x0b, 0xda, 0x05, 0x0f, 0xe6, 0xdc, 0xba,
+ 0xe4, 0x0f, 0xf3, 0x16, 0xdc, 0x0f, 0xb2, 0x3c, 0xee, 0xf2, 0x21, 0x1c, 0xf1,
+ 0x1a, 0x39, 0xd6, 0xfc, 0xfe, 0x11, 0xf2, 0x2c, 0x36, 0xfc, 0x9c, 0xfd, 0x3a,
+ 0x01, 0x90, 0x36, 0xef, 0xf4, 0xc5, 0xfd, 0xfd, 0xa5, 0x35, 0x0f, 0x36, 0x0f,
+ 0xba, 0xd1, 0x17, 0xe0, 0x4d, 0xb6, 0xbd, 0x1a, 0x15, 0xf5, 0x20, 0xd0, 0x23,
+ 0x1f, 0xff, 0xe5, 0xfd, 0xae, 0x7f, 0x12, 0xa0, 0xef, 0xf6, 0xed, 0xf2, 0x20,
+ 0xe4, 0x25, 0xab, 0x23, 0xee, 0x15, 0xe2, 0xbf, 0x03, 0xf2, 0xbd, 0x1a, 0xfe,
+ 0xed, 0xd3, 0x24, 0x26, 0x22, 0xd6, 0x11, 0xfc, 0x19, 0x10, 0x11, 0xfb, 0xff,
+ 0xdf, 0xe6, 0x2e, 0xee, 0xf4, 0x1b, 0xf2, 0xf2, 0xf5, 0x4d, 0xbf, 0xfc, 0xf2,
+ 0xe7, 0xd1, 0x41, 0xe8, 0x45, 0xf2, 0x07, 0x0c, 0x19, 0x01, 0xf3, 0xe2, 0xe9,
+ 0xfa, 0xe3, 0xfd, 0xfb, 0x3b, 0x42, 0xc7, 0xaa, 0xef, 0x01, 0x27, 0xdf, 0xec,
+ 0xf6, 0x1b, 0xf7, 0x1c, 0xd9, 0x22, 0x0a, 0x0a, 0xe6, 0x4d, 0xb6, 0x24, 0x03,
+ 0xd6, 0x08, 0xb6, 0xeb, 0xf6, 0x48, 0x9e, 0xbb, 0x9a, 0x26, 0xd4, 0x2b, 0x9d,
+ 0xd0, 0xc1, 0xe7, 0xfc, 0x17, 0x06, 0xab, 0x1a, 0x5e, 0x2e, 0x53, 0xc5, 0x08,
+ 0x3e, 0x20, 0x24, 0xe3, 0xb6, 0xcf, 0x2b, 0x1a, 0x08, 0xe9, 0xc6, 0x19, 0x16,
+ 0xd4, 0xc7, 0x51, 0x0c, 0x01, 0xf3, 0x4f, 0x2d, 0x07, 0xa5, 0x1c, 0x26, 0x13,
+ 0xd4, 0xc1, 0xe3, 0xe0, 0xd7, 0x06, 0xb7, 0xef, 0xc1, 0xfe, 0x11, 0xfc, 0x00,
+ 0x0b, 0x21, 0x62, 0x02, 0x0a, 0x06, 0xf6, 0x15, 0xea, 0xe0, 0x22, 0xcb, 0xe4,
+ 0x43, 0xf9, 0xf0, 0x11, 0x45, 0xfc, 0xb8, 0x9e, 0x1d, 0xd6, 0x0b, 0x45, 0x15,
+ 0x35, 0xe2, 0x4c, 0xd7, 0xdd, 0x14, 0x01, 0xe0, 0x2b, 0x49, 0xf4, 0xe0, 0xbb,
+ 0x18, 0x10, 0xfc, 0x72, 0x30, 0x62, 0xcc, 0xe9, 0x09, 0xd3, 0xe1, 0x30, 0x53,
+ 0xe7, 0x54, 0xd1, 0x23, 0x1b, 0xd6, 0x09, 0x0f, 0xd9, 0x29, 0xef, 0xd8, 0xaf,
+ 0xeb, 0xec, 0x11, 0x68, 0x81, 0x3f, 0xef, 0x29, 0x2d, 0x35, 0xc3, 0x69, 0xd0,
+ 0x05, 0x05, 0x23, 0xe7, 0x0b, 0x2a, 0xf7, 0x34, 0xcc, 0x2a, 0x0c, 0xd7, 0xdb,
+ 0xdf, 0x35, 0x12, 0xf8, 0xd9, 0x1a, 0x2f, 0xa5, 0xc2, 0x29, 0x10, 0xe6, 0x17,
+ 0xf2, 0x31, 0x36, 0x23, 0xfa, 0x2c, 0xcd, 0xdc, 0xa6, 0xa6, 0x12, 0x49, 0xff,
+ 0x16, 0xc6, 0xd8, 0xc3, 0x0f, 0xf4, 0xd8, 0xfe, 0xe3, 0xf0, 0xdd, 0x4c, 0xd9,
+ 0xe2, 0xe0, 0x0e, 0xfd, 0xfa, 0xe7, 0x3d, 0xdf, 0xb6, 0xf2, 0xf5, 0x83, 0xdb,
+ 0xff, 0x1c, 0x3d, 0x21, 0x20, 0x96, 0xc6, 0xc8, 0x42, 0x3a, 0x1b, 0x3c, 0x27,
+ 0xcf, 0x57, 0x0f, 0x1c, 0xc4, 0x3c, 0xc7, 0xe2, 0xda, 0xe8, 0xc5, 0xfb, 0xf7,
+ 0xd7, 0x03, 0x08, 0xd0, 0xfe, 0xf4, 0xfa, 0x11, 0xaa, 0xe5, 0xdd, 0xa4, 0xdc,
+ 0x81, 0x19, 0x44, 0x0e, 0xea, 0xfc, 0xf5, 0xd4, 0xe3, 0x13, 0x2c, 0x9c, 0xef,
+ 0x04, 0x10, 0xa1, 0x51, 0x41, 0xd4, 0xec, 0x23, 0x67, 0x22, 0x0d, 0x0d, 0x34,
+ 0xca, 0xd2, 0xb6, 0xca, 0x3a, 0xf9, 0xc0, 0x16, 0xa6, 0x22, 0xeb, 0xc3, 0x10,
+ 0xd4, 0xa1, 0x35, 0xc4, 0x23, 0x52, 0xe6, 0x30, 0x30, 0xe2, 0xc8, 0x26, 0x21,
+ 0x20, 0x00, 0x66, 0x46, 0xfe, 0x00, 0xdd, 0xaf, 0x4f, 0x4a, 0xdf, 0x16, 0x05,
+ 0x02, 0xe2, 0x0b, 0xf5, 0xf5, 0x0c, 0xe6, 0x45, 0xeb, 0x46, 0x0a, 0x3d, 0x81,
+ 0x2a, 0xf6, 0xdb, 0x38, 0xb8, 0xe9, 0x06, 0x1a, 0x27, 0xf3, 0x1d, 0x13, 0xda,
+ 0x25, 0x07, 0x37, 0xa4, 0x23, 0x0d, 0x1f, 0xd4, 0xf1, 0xdc, 0x43, 0x28, 0x4f,
+ 0x36, 0xa6, 0x0b, 0x13, 0xf4, 0xf3, 0xe4, 0xe8, 0xe3, 0x01, 0x35, 0x98, 0x2b,
+ 0x00, 0xc9, 0x26, 0x20, 0xd4, 0x5a, 0x3b, 0x0d, 0xfb, 0x03, 0x28, 0xe6, 0xfe,
+ 0x12, 0xe1, 0x0c, 0xef, 0x72, 0x1c, 0xd6, 0xa1, 0x51, 0xcf, 0x1e, 0x0c, 0xed,
+ 0x5c, 0xe2, 0xd1, 0x13, 0xf7, 0xe4, 0xff, 0xf2, 0xe5, 0xf2, 0x10, 0xf9, 0xd2,
+ 0xdf, 0x1f, 0xff, 0xee, 0x1d, 0x51, 0x02, 0xcc, 0xf0, 0xe3, 0x0f, 0xc4, 0x45,
+ 0x02, 0x2e, 0x3e, 0x13, 0x34, 0x00, 0xf4, 0xdc, 0x3b, 0x13, 0x0f, 0xe0, 0x4e,
+ 0x02, 0x55, 0x17, 0xfa, 0xf7, 0x07, 0xcd, 0x04, 0xf6, 0x9f, 0x03, 0xf4, 0xf0,
+ 0xe4, 0xdf, 0xce, 0x1c, 0x0e, 0x14, 0x03, 0x0c, 0xf8, 0x0d, 0xe4, 0xe1, 0xea,
+ 0x2f, 0xd8, 0xdf, 0x15, 0xf1, 0xcf, 0xfc, 0x16, 0x3e, 0x08, 0x0c, 0x00, 0xfc,
+ 0xf0, 0xc6, 0xd6, 0xf1, 0x20, 0x7f, 0x07, 0x43, 0xce, 0x00, 0x06, 0x12, 0x18,
+ 0x11, 0x11, 0x1b, 0xdb, 0x13, 0x1e, 0xb5, 0x49, 0xdf, 0xee, 0xd4, 0x39, 0xd7,
+ 0x0e, 0xfe, 0x25, 0xe8, 0x18, 0xc4, 0xf2, 0xd8, 0x07, 0x4d, 0xe6, 0xf6, 0xf9,
+ 0xf7, 0x05, 0x31, 0xda, 0xea, 0xfe, 0xfd, 0x15, 0xfc, 0x10, 0xea, 0x0f, 0xc8,
+ 0x35, 0xcb, 0xc9, 0x27, 0xd5, 0x33, 0x24, 0xf9, 0x12, 0x1b, 0xc6, 0x81, 0x1c,
+ 0xfa, 0x35, 0xee, 0xb0, 0x01, 0xd9, 0x06, 0x20, 0x06, 0x0b, 0x14, 0xb8, 0xf6,
+ 0x1e, 0x17, 0xf3, 0xf3, 0x1c, 0xbb, 0xcb, 0xa7, 0xc0, 0x35, 0x04, 0xfa, 0x11,
+ 0x21, 0x7a, 0xaa, 0xe1, 0x12, 0x14, 0x12, 0xd5, 0x0c, 0x11, 0xc2, 0x2c, 0xfb,
+ 0xb6, 0x2e, 0x3a, 0xfb, 0xd3, 0xed, 0xf4, 0xd0, 0x1d, 0x1c, 0x04, 0xd1, 0x1d,
+ 0xb7, 0xdd, 0xd6, 0xf1, 0xf4, 0xf0, 0x09, 0x0e, 0xee, 0x39, 0x0a, 0x16, 0xe3,
+ 0xcb, 0x27, 0x1f, 0xc8, 0xf0, 0x21, 0x49, 0x27, 0x48, 0xfb, 0xe5, 0xee, 0xff,
+ 0x14, 0xe6, 0xf4, 0xc9, 0xdb, 0x56, 0xff, 0xda, 0xe9, 0xee, 0x1f, 0x1b, 0x0b,
+ 0xb5, 0xe5, 0x99, 0xdc, 0xdf, 0xdb, 0xdf, 0xc1, 0x07, 0x52, 0x18, 0xd8, 0xfc,
+ 0x00, 0x0b, 0xcd, 0xe4, 0x0f, 0x38, 0xf0, 0xe5, 0x28, 0x93, 0x26, 0x10, 0x49,
+ 0x16, 0xf9, 0x18, 0x37, 0xc8, 0x9e, 0x25, 0xf0, 0x16, 0xb2, 0xf5, 0xed, 0xdc,
+ 0xe4, 0x20, 0xf7, 0x35, 0x1b, 0x40, 0x22, 0xd0, 0xa4, 0xdf, 0x03, 0xd0, 0x39,
+ 0xd3, 0x5e, 0x10, 0xb8, 0xd8, 0x47, 0x41, 0x1e, 0xf3, 0xe9, 0x29, 0xcd, 0xee,
+ 0x0a, 0xab, 0x05, 0xd3, 0xe3, 0x07, 0xc9, 0xd2, 0x11, 0xf2, 0x36, 0xef, 0x62,
+ 0x10, 0xd1, 0xf2, 0xea, 0xb6, 0x14, 0xc8, 0x24, 0x03, 0x1a, 0xce, 0x7f, 0x43,
+ 0x39, 0x0c, 0xd3, 0xb0, 0x2e, 0x1a, 0x00, 0xf9, 0xed, 0x00, 0xf4, 0xd7, 0xad,
+ 0x03, 0x01, 0xaf, 0x5a, 0x16, 0x10, 0x30, 0x16, 0x04, 0x3c, 0x19, 0x17, 0x10,
+ 0xe8, 0xdb, 0xc9, 0xe5, 0x3e, 0xf4, 0x06, 0xe2, 0x16, 0xe5, 0x36, 0x06, 0xdb,
+ 0x2f, 0xe0, 0xf2, 0x01, 0xee, 0xdf, 0x08, 0x15, 0x5e, 0x0d, 0x5b, 0x25, 0x1a,
+ 0x41, 0x09, 0xac, 0xe7, 0x02, 0x01, 0xc2, 0xed, 0xf9, 0x1b, 0x7f, 0xd5, 0xfe,
+ 0x28, 0x12, 0xed, 0xf8, 0x2c, 0x12, 0x04, 0x1b, 0xf8, 0x13, 0xd2, 0x0b, 0xe0,
+ 0x04, 0xf0, 0x02, 0xc9, 0xc7, 0xdb, 0xd5, 0xfe, 0xe0, 0xfa, 0x13, 0xdd, 0xfa,
+ 0x12, 0x1c, 0xe2, 0xfa, 0xfd, 0xf2, 0x22, 0xe5, 0x0b, 0x2a, 0x4f, 0xe2, 0xfc,
+ 0xf3, 0xdd, 0x1d, 0x2c, 0x23, 0xe1, 0x2c, 0xd5, 0x10, 0x05, 0xf5, 0x15, 0x07,
+ 0x0f, 0x0c, 0x1e, 0x1e, 0xfa, 0x17, 0xf0, 0xfa, 0x03, 0x22, 0x1f, 0x11, 0x03,
+ 0xe8, 0xf9, 0x14, 0x15, 0x1d, 0xfe, 0x16, 0xe8, 0xd3, 0x0d, 0x19, 0xdd, 0x26,
+ 0xfa, 0xc7, 0x2e, 0x1e, 0x15, 0xdc, 0xeb, 0xf8, 0x14, 0xfd, 0x15, 0x18, 0xf5,
+ 0x2e, 0x0b, 0x20, 0xf1, 0x1a, 0x1a, 0x07, 0x0e, 0x18, 0x2f, 0x13, 0xfe, 0xf2,
+ 0xc7, 0xd1, 0xfe, 0x00, 0xfd, 0x0f, 0x1e, 0x1c, 0x04, 0x28, 0x12, 0xec, 0x0c,
+ 0xe4, 0xe1, 0xf6, 0xfd, 0xd5, 0x2e, 0x0f, 0x13, 0x19, 0xf6, 0x0a, 0xd9, 0xfa,
+ 0x01, 0xeb, 0xdc, 0xef, 0x22, 0xfc, 0x24, 0x08, 0x0b, 0xbe, 0xe6, 0xcc, 0x2c,
+ 0x2a, 0xec, 0x0c, 0x3a, 0xf5, 0xd5, 0xf1, 0xf1, 0x07, 0xec, 0x0c, 0x2b, 0xdf,
+ 0xdd, 0x01, 0x0e, 0x1e, 0x21, 0x0c, 0xf6, 0xb8, 0x05, 0x20, 0xea, 0x53, 0x1b,
+ 0xfb, 0xf1, 0x16, 0xe8, 0x06, 0x2d, 0x0f, 0xdc, 0x01, 0xba, 0x0b, 0xc8, 0x05,
+ 0x15, 0x0f, 0xf2, 0x07, 0xdb, 0x24, 0xd2, 0x3e, 0x30, 0x22, 0xfd, 0xc5, 0x02,
+ 0xca, 0x18, 0xf1, 0xea, 0x11, 0x1a, 0xef, 0x1e, 0xdd, 0x7f, 0xdf, 0x08, 0x11,
+ 0xe1, 0xe0, 0xd7, 0xed, 0xcd, 0xcf, 0xf4, 0x0a, 0x1b, 0xd8, 0xdd, 0xfe, 0xef,
+ 0x3f, 0xf7, 0x34, 0xef, 0x05, 0xdf, 0xe7, 0xe7, 0x21, 0x38, 0xef, 0xfd, 0xec,
+ 0xe8, 0x12, 0xd9, 0xe0, 0xf3, 0x2c, 0xc3, 0xe0, 0xeb, 0xe6, 0x1e, 0x1f, 0x1b,
+ 0xf2, 0xbb, 0xfb, 0xf1, 0x44, 0xe4, 0x0e, 0x08, 0x08, 0xd9, 0x3d, 0x39, 0x16,
+ 0x09, 0x30, 0xd1, 0x4f, 0x33, 0x15, 0xdf, 0x07, 0xf6, 0xf0, 0x20, 0x14, 0x39,
+ 0x0d, 0xc2, 0xef, 0x81, 0xf4, 0x13, 0x1b, 0xee, 0xc3, 0xba, 0xd7, 0xe6, 0x55,
+ 0xfa, 0xeb, 0xe0, 0x3a, 0x43, 0x03, 0x01, 0xcc, 0x11, 0xa8, 0x4d, 0x33, 0xe1,
+ 0x00, 0x00, 0x4a, 0x58, 0xd6, 0xc1, 0xdf, 0x42, 0xf2, 0xb9, 0x33, 0xb7, 0xd0,
+ 0x20, 0x41, 0xd8, 0x3d, 0xe2, 0x5e, 0x17, 0xcd, 0xe1, 0xd6, 0x14, 0xee, 0x1b,
+ 0xff, 0xf0, 0xd9, 0xfc, 0xb2, 0xdb, 0xcf, 0xf8, 0xba, 0x3b, 0xfd, 0x1c, 0xc7,
+ 0xd6, 0x34, 0x29, 0xe2, 0xe1, 0xf8, 0xab, 0xdc, 0x62, 0x4f, 0x17, 0xdf, 0xc7,
+ 0xef, 0xda, 0x44, 0xfe, 0xd3, 0x4f, 0x45, 0xe1, 0x3c, 0x08, 0xec, 0xdb, 0x3d,
+ 0xfc, 0x1f, 0xc8, 0xec, 0xb2, 0x2b, 0x20, 0x22, 0x1a, 0xf7, 0xcc, 0xfb, 0x03,
+ 0x15, 0x58, 0x20, 0xf3, 0xe4, 0x19, 0xf1, 0xce, 0x11, 0xbd, 0x1c, 0x05, 0xcd,
+ 0x1b, 0xc0, 0xfe, 0x20, 0xf4, 0xf1, 0x18, 0x58, 0xd5, 0x28, 0xec, 0x29, 0x0d,
+ 0x2b, 0x1f, 0xb3, 0xf1, 0x23, 0xfe, 0x7f, 0x6a, 0x47, 0x2d, 0xdf, 0x04, 0xf2,
+ 0xc3, 0x01, 0x1e, 0x22, 0x8e, 0x08, 0xfb, 0x44, 0x0f, 0x5b, 0xf7, 0xe0, 0x0c,
+ 0xf6, 0xb6, 0x34, 0x0b, 0x3e, 0x0d, 0xdd, 0x41, 0xf5, 0xd7, 0xf4, 0x2b, 0x14,
+ 0xec, 0x0c, 0xca, 0x37, 0x14, 0x2f, 0xda, 0x3d, 0x12, 0x04, 0x12, 0x08, 0xef,
+ 0xfc, 0x71, 0x21, 0x4d, 0xf6, 0xe0, 0xec, 0xf3, 0xcb, 0x2c, 0x23, 0x11, 0x91,
+ 0x06, 0xf7, 0x01, 0xd7, 0x2c, 0x16, 0xfe, 0x1b, 0xc8, 0x1b, 0x15, 0xd6, 0x04,
+ 0x2d, 0x82, 0x44, 0x0e, 0x08, 0xff, 0x3d, 0x06, 0x62, 0x17, 0xb2, 0xee, 0x4b,
+ 0x19, 0x26, 0x07, 0x86, 0xc7, 0xff, 0xf0, 0x55, 0xd6, 0x04, 0x4a, 0xef, 0xe6,
+ 0x33, 0x15, 0xe4, 0x03, 0x10, 0xc1, 0xc0, 0xf5, 0xed, 0x1f, 0x09, 0x1d, 0x21,
+ 0xaf, 0xf9, 0xd5, 0x02, 0x59, 0x06, 0xcc, 0xfd, 0xab, 0xec, 0x27, 0x49, 0xf1,
+ 0x10, 0xe8, 0xd1, 0x1a, 0xae, 0xf7, 0x14, 0x2a, 0x12, 0x1f, 0xfc, 0xc3, 0x3f,
+ 0xf3, 0x08, 0xe2, 0xea, 0xb3, 0xef, 0x10, 0xed, 0x04, 0xf8, 0x2b, 0xce, 0xeb,
+ 0xf4, 0xf9, 0x16, 0xf0, 0xf5, 0x29, 0x2c, 0xcf, 0xf3, 0x15, 0xf6, 0x22, 0xea,
+ 0x0d, 0xf7, 0xcd, 0xf7, 0x6e, 0x0e, 0xb9, 0xea, 0xd9, 0xf0, 0x1b, 0x01, 0xc9,
+ 0x0e, 0xd5, 0xf1, 0x1a, 0x00, 0x1e, 0xfb, 0x0e, 0xe4, 0x05, 0x4d, 0xea, 0x81,
+ 0xee, 0x0e, 0xcc, 0x01, 0x19, 0xc6, 0xfb, 0xe3, 0x14, 0x34, 0xec, 0xe5, 0x39,
+ 0x13, 0x09, 0x2c, 0xc6, 0xfe, 0xa7, 0xe5, 0x20, 0xd1, 0x0c, 0x0a, 0x0c, 0x43,
+ 0xe9, 0xb0, 0xf7, 0xf3, 0x02, 0x60, 0x29, 0x1c, 0xd9, 0x28, 0x3f, 0x0d, 0x35,
+ 0xc2, 0x37, 0x1b, 0x0b, 0x2d, 0xe4, 0xf4, 0xa7, 0xde, 0xf0, 0xbd, 0x1d, 0x22,
+ 0x21, 0xc5, 0x1f, 0xe7, 0x4e, 0x28, 0xcf, 0xc2, 0xf9, 0xc3, 0xb8, 0xc9, 0xec,
+ 0xe2, 0xf0, 0x0a, 0x11, 0xd0, 0xc0, 0xb0, 0x25, 0x0d, 0xca, 0xbe, 0x2a, 0xf8,
+ 0xd7, 0x0f, 0xe5, 0xf7, 0xfa, 0xde, 0xe5, 0xe8, 0xf6, 0x42, 0x2f, 0xe3, 0xdd,
+ 0x2e, 0xb1, 0xb8, 0xcf, 0xf6, 0x08, 0xc6, 0x2d, 0xd4, 0xe0, 0xee, 0x34, 0xd7,
+ 0x21, 0x12, 0xb3, 0x48, 0x3c, 0x12, 0xd5, 0x04, 0xcf, 0xdc, 0x25, 0x05, 0x03,
+ 0xcf, 0x0b, 0x30, 0x9d, 0x1c, 0x30, 0x23, 0x5b, 0x36, 0x27, 0x3d, 0xdf, 0xe0,
+ 0xfd, 0xde, 0xdb, 0xfd, 0x41, 0x0c, 0xdb, 0xe5, 0x08, 0x1b, 0xef, 0x5c, 0x81,
+ 0x1d, 0x2a, 0xcb, 0x0e, 0x0b, 0x35, 0x2a, 0xcc, 0x24, 0xe8, 0x2c, 0x2e, 0x18,
+ 0x18, 0xe8, 0x52, 0xb7, 0x32, 0x16, 0xd7, 0xf6, 0x51, 0xdb, 0xaf, 0x39, 0xfe,
+ 0xec, 0xf0, 0x8c, 0xee, 0xd5, 0xc5, 0x32, 0x0e, 0xc6, 0xc9, 0xab, 0x06, 0x35,
+ 0xdb, 0x4d, 0x33, 0x02, 0x1d, 0x05, 0xe9, 0x27, 0xcd, 0x13, 0x00, 0xcb, 0x48,
+ 0x0b, 0xe1, 0x0d, 0xb3, 0xfc, 0xd9, 0x10, 0x24, 0x07, 0xf9, 0xf3, 0x1c, 0xb3,
+ 0xba, 0xf4, 0xdf, 0xf7, 0xf3, 0xc9, 0x2e, 0xd2, 0xf6, 0xfa, 0x2a, 0xca, 0xec,
+ 0xb1, 0xfd, 0xf8, 0xca, 0xc8, 0xea, 0x04, 0x38, 0x25, 0x09, 0xb3, 0xce, 0x27,
+ 0x1a, 0x4f, 0x11, 0x1a, 0xe3, 0x22, 0x27, 0xfd, 0x03, 0x41, 0xd7, 0x05, 0xe5,
+ 0x9e, 0x04, 0x0c, 0x04, 0xf5, 0xe3, 0xdf, 0x55, 0xed, 0xea, 0xd0, 0x2b, 0x16,
+ 0xe2, 0xf3, 0x29, 0xf4, 0x44, 0x27, 0x65, 0xda, 0x45, 0x16, 0xd5, 0xed, 0x04,
+ 0xf3, 0x13, 0xb9, 0xc8, 0xe6, 0xf8, 0xbc, 0x7f, 0xdc, 0xea, 0xfd, 0xed, 0x10,
+ 0x10, 0x29, 0x3e, 0xea, 0xf8, 0x9e, 0x11, 0xd2, 0x0d, 0x28, 0x44, 0x30, 0x2a,
+ 0x49, 0x2b, 0xba, 0xd4, 0x18, 0x07, 0x48, 0x12, 0x21, 0x59, 0x36, 0xea, 0x13,
+ 0x58, 0xe4, 0xc3, 0x37, 0xdb, 0xcb, 0x19, 0xdf, 0x21, 0x17, 0x50, 0x0d, 0xcd,
+ 0xbf, 0x2b, 0x0e, 0xd2, 0x06, 0xb9, 0xfe, 0x3b, 0x1d, 0xe9, 0xd8, 0x0d, 0x41,
+ 0xdd, 0xfe, 0xeb, 0xd5, 0x37, 0xad, 0xf3, 0x00, 0x21, 0x0f, 0xcc, 0xf0, 0xd6,
+ 0x5e, 0x0b, 0xf2, 0x09, 0x2b, 0x39, 0xd3, 0x1b, 0xe3, 0xb7, 0xed, 0xfb, 0xe3,
+ 0xd7, 0x40, 0xe3, 0x09, 0x44, 0x0f, 0x26, 0xf5, 0xf9, 0x4b, 0x98, 0xf1, 0x09,
+ 0x81, 0xe8, 0xcd, 0x34, 0xdc, 0x19, 0x2a, 0x5b, 0xe8, 0xf5, 0xfd, 0x2c, 0xc2,
+ 0xd4, 0xe1, 0x0c, 0xda, 0xe7, 0xfe, 0xcd, 0x1d, 0xf8, 0x00, 0x08, 0xe5, 0xf1,
+ 0x51, 0x10, 0x11, 0xa9, 0xc9, 0x28, 0x10, 0xfd, 0x4e, 0x0c, 0x1e, 0x21, 0x28,
+ 0x0b, 0x0e, 0xe8, 0xcd, 0xff, 0xe3, 0x20, 0xbd, 0xe6, 0x05, 0xef, 0x31, 0xf6,
+ 0xe4, 0x25, 0x0d, 0xf0, 0xf0, 0x1f, 0x14, 0xe0, 0xf5, 0x15, 0x19, 0xeb, 0x0a,
+ 0x02, 0xe9, 0xbd, 0x24, 0x0c, 0x0d, 0x44, 0xe9, 0xf7, 0xdf, 0x42, 0xce, 0xf6,
+ 0x16, 0x12, 0x02, 0xca, 0x28, 0x0f, 0x1c, 0x1c, 0xf5, 0x32, 0xfd, 0x24, 0x43,
+ 0xdf, 0xe6, 0xea, 0x1c, 0x0a, 0x11, 0xfe, 0xfd, 0x12, 0x19, 0xf5, 0xd2, 0x47,
+ 0xc4, 0x1f, 0x0c, 0xfe, 0x07, 0xf4, 0x0c, 0xd3, 0xe6, 0xd8, 0x81, 0x6d, 0xff,
+ 0xf6, 0x05, 0x29, 0xe1, 0x04, 0xd9, 0xf7, 0xf7, 0xea, 0xec, 0xf5, 0xbd, 0x10,
+ 0x08, 0xf5, 0xd1, 0x47, 0x17, 0x36, 0xe0, 0xf5, 0xf2, 0xe2, 0xd9, 0x10, 0xd9,
+ 0xdb, 0xe8, 0x47, 0xfd, 0x30, 0x41, 0xfc, 0xdf, 0x10, 0xf4, 0x27, 0x05, 0xea,
+ 0xed, 0xdb, 0x1b, 0x12, 0x0f, 0xd3, 0x09, 0xfe, 0xf4, 0x08, 0xea, 0xf4, 0x0e,
+ 0x4e, 0x0f, 0xf3, 0x53, 0x35, 0xc1, 0xd3, 0x06, 0x39, 0xed, 0xc4, 0xe4, 0xd1,
+ 0xfb, 0xcc, 0x28, 0xeb, 0xb9, 0xfe, 0xd2, 0xfb, 0xf0, 0xc5, 0xf6, 0x48, 0xdf,
+ 0xb8, 0x16, 0xf4, 0x20, 0x04, 0x32, 0x3e, 0xc8, 0xe0, 0xe5, 0x0e, 0x18, 0x1c,
+ 0x30, 0x1d, 0xf7, 0x1f, 0x22, 0x0f, 0xb9, 0x3a, 0xa8, 0x2c, 0x55, 0x01, 0x0c,
+ 0xfb, 0xb5, 0xf1, 0xf5, 0xe6, 0xe5, 0x3a, 0x7f, 0xe0, 0xba, 0xcc, 0xf4, 0xfd,
+ 0xee, 0xde, 0x61, 0xcd, 0xf8, 0xb7, 0xd6, 0xb1, 0x10, 0x03, 0x10, 0xe6, 0xe4,
+ 0xf2, 0xe0, 0x2d, 0x96, 0x01, 0x0e, 0xde, 0xc2, 0x0d, 0x22, 0x06, 0xd0, 0x39,
+ 0xe3, 0xfc, 0x2b, 0xb5, 0xeb, 0xc6, 0xc7, 0xac, 0xe6, 0x1f, 0xf6, 0xf9, 0xbb,
+ 0x37, 0xec, 0xe9, 0x2d, 0xdf, 0xb9, 0x1a, 0xe4, 0xd5, 0xdb, 0xc3, 0x07, 0x19,
+ 0xef, 0xf5, 0xd2, 0x1d, 0x03, 0xda, 0x0e, 0x33, 0x42, 0x30, 0x19, 0x09, 0x3c,
+ 0xb6, 0x03, 0xea, 0x1f, 0xe7, 0xf1, 0xd4, 0x0f, 0xe5, 0xe4, 0x16, 0x05, 0xf5,
+ 0x05, 0x7f, 0xf3, 0xd2, 0x16, 0xe7, 0x23, 0xda, 0xd7, 0xd0, 0xfe, 0xeb, 0x2d,
+ 0xf4, 0x47, 0x05, 0x0c, 0xed, 0x08, 0x00, 0x11, 0x0d, 0xe6, 0xb4, 0x24, 0x13,
+ 0x10, 0x17, 0xf4, 0x17, 0xf5, 0x23, 0xd7, 0x3d, 0x0f, 0xef, 0xee, 0xdf, 0xf2,
+ 0xde, 0x1b, 0xfb, 0xe3, 0x11, 0x11, 0x1a, 0x21, 0x5a, 0xb5, 0x21, 0x05, 0xd8,
+ 0xed, 0x36, 0xde, 0xfb, 0xe8, 0xe4, 0xe8, 0x39, 0xd1, 0x08, 0x56, 0xc6, 0xf3,
+ 0x02, 0x26, 0xde, 0x14, 0xff, 0x38, 0x0a, 0xea, 0x0a, 0xc1, 0xfa, 0xf2, 0xd7,
+ 0xc8, 0x22, 0xcf, 0xb8, 0x28, 0x10, 0xc6, 0xf0, 0xec, 0xff, 0xdb, 0x2e, 0xf9,
+ 0x0d, 0x39, 0x02, 0xf0, 0xf9, 0xf9, 0x15, 0x4a, 0x02, 0xd3, 0x11, 0xfe, 0x15,
+ 0xdd, 0xc7, 0x19, 0xe5, 0x13, 0x08, 0x15, 0x3c, 0x05, 0xcd, 0x1a, 0xf4, 0x10,
+ 0x07, 0xff, 0xee, 0xed, 0x0f, 0xfc, 0x1b, 0x0a, 0xba, 0xe0, 0xf5, 0xe2, 0xb3,
+ 0x0c, 0x9f, 0x4d, 0xfd, 0xcd, 0x1a, 0xd8, 0xf9, 0xe3, 0x34, 0xef, 0xf3, 0xfd,
+ 0x40, 0x47, 0x0e, 0x20, 0x14, 0xec, 0x11, 0xe8, 0x38, 0xfb, 0x45, 0xbf, 0xed,
+ 0x6a, 0xcf, 0xd4, 0x3c, 0x0e, 0x40, 0x0b, 0x2d, 0x3d, 0x30, 0xd8, 0x32, 0x03,
+ 0xe5, 0xc5, 0x07, 0x0f, 0x03, 0xfb, 0x92, 0xe6, 0xe3, 0x3c, 0xfd, 0x39, 0xfd,
+ 0x12, 0x99, 0xdb, 0x0e, 0x3b, 0x31, 0x06, 0xc0, 0xc5, 0x02, 0x49, 0xe3, 0x3a,
+ 0xcc, 0x38, 0xef, 0xa1, 0x1e, 0x09, 0x01, 0xc4, 0x3b, 0x28, 0x41, 0xb9, 0x12,
+ 0xeb, 0x10, 0x43, 0xdf, 0x1e, 0xb0, 0xc8, 0x7f, 0x18, 0x05, 0x0e, 0x0e, 0xfe,
+ 0xde, 0x34, 0xe5, 0x29, 0xe9, 0x06, 0x00, 0x0b, 0x10, 0xd6, 0xeb, 0x1e, 0x14,
+ 0xe2, 0xd9, 0xba, 0x1e, 0xec, 0x26, 0x09, 0xd0, 0xc0, 0xf7, 0x8e, 0x09, 0xb6,
+ 0x44, 0x22, 0x29, 0xf6, 0x05, 0xc7, 0x91, 0x09, 0xd2, 0x81, 0x50, 0xdd, 0x10,
+ 0xf2, 0x05, 0x6b, 0x10, 0x0b, 0x26, 0xe1, 0x79, 0xd5, 0x33, 0xdc, 0x1d, 0xc8,
+ 0xed, 0xc3, 0x41, 0x8f, 0xca, 0xde, 0x10, 0xec, 0x01, 0xe0, 0xe5, 0xe7, 0x18,
+ 0x97, 0xe0, 0x09, 0xfd, 0x1b, 0x09, 0xfa, 0x05, 0x0f, 0xf2, 0xbd, 0xeb, 0x39,
+ 0xf5, 0xe0, 0xd9, 0xe7, 0xda, 0x22, 0x21, 0x2b, 0xf9, 0xdb, 0xf8, 0x19, 0x34,
+ 0xf2, 0x38, 0xdd, 0xf0, 0xfb, 0xe5, 0x04, 0xf5, 0xbd, 0x59, 0x01, 0x0f, 0x79,
+ 0x1c, 0xda, 0xcd, 0x1e, 0x30, 0x27, 0x0d, 0x11, 0x0a, 0x0b, 0xf0, 0x4d, 0xb3,
+ 0x5e, 0xf5, 0x23, 0xf6, 0xfc, 0x2f, 0xd7, 0x5b, 0xc2, 0x5f, 0x21, 0xfd, 0xdf,
+ 0x06, 0x3e, 0xef, 0x78, 0x5b, 0x9a, 0x3e, 0x18, 0xf0, 0xf2, 0xc4, 0xf4, 0xec,
+ 0xff, 0x09, 0xe7, 0x23, 0x07, 0x22, 0x1b, 0xe9, 0xdf, 0x3c, 0xe7, 0x0b, 0x01,
+ 0xc1, 0x07, 0xec, 0xa0, 0x0b, 0xce, 0xf9, 0x02, 0x0a, 0x57, 0x5d, 0xbc, 0x18,
+ 0xdb, 0x24, 0x08, 0x07, 0x37, 0xfc, 0xd2, 0x3d, 0xe0, 0x12, 0x14, 0x32, 0xe7,
+ 0x31, 0xf9, 0xe1, 0x5d, 0xf5, 0xc7, 0x25, 0xf8, 0xe5, 0x0a, 0x12, 0x0b, 0x29,
+ 0xfe, 0xd5, 0x3c, 0x32, 0xf8, 0x02, 0xed, 0x1a, 0x38, 0xdb, 0xee, 0x12, 0xdc,
+ 0x05, 0x1c, 0xa6, 0xff, 0xde, 0xf3, 0x07, 0x06, 0x1d, 0xb2, 0xd9, 0x03, 0x2b,
+ 0xa0, 0x10, 0x29, 0xee, 0x27, 0x3d, 0x2b, 0xb4, 0xdb, 0x2a, 0xca, 0xf6, 0xd4,
+ 0x10, 0x81, 0xff, 0xe7, 0x20, 0xb3, 0x04, 0xbb, 0xe5, 0x0c, 0xd7, 0xbe, 0xde,
+ 0xa9, 0xed, 0xe0, 0x02, 0xed, 0x19, 0x01, 0x0e, 0xc9, 0xee, 0x3f, 0x4a, 0x63,
+ 0xfa, 0xfc, 0xf8, 0x12, 0xdf, 0xbf, 0x12, 0x1f, 0x26, 0xd7, 0xfd, 0x08, 0x2d,
+ 0xc6, 0x38, 0xa5, 0xba, 0x42, 0xed, 0xe2, 0x04, 0x02, 0x22, 0xd2, 0x34, 0x25,
+ 0x29, 0xfd, 0x05, 0xe4, 0xfe, 0x9f, 0x12, 0x36, 0xb6, 0xf1, 0x3e, 0x02, 0xcf,
+ 0x54, 0xa5, 0x19, 0xe6, 0x59, 0xfa, 0xf9, 0x1c, 0x15, 0x02, 0xfb, 0x3c, 0x11,
+ 0x38, 0xed, 0x14, 0xf1, 0x0a, 0x1a, 0x14, 0x03, 0xd0, 0x4c, 0xcc, 0x1a, 0x1c,
+ 0x1e, 0xe8, 0xd6, 0x2e, 0xd7, 0xef, 0x60, 0xd3, 0x23, 0xfb, 0x0d, 0xe8, 0x35,
+ 0x7f, 0xf8, 0xde, 0xf7, 0x1b, 0xf2, 0xc9, 0x1a, 0xda, 0xe1, 0xc6, 0x33, 0xc9,
+ 0x37, 0xce, 0x02, 0x43, 0x05, 0x07, 0xeb, 0x12, 0xf9, 0x32, 0xea, 0xf5, 0x18,
+ 0x0f, 0x51, 0xd9, 0xd1, 0xdd, 0xd1, 0x02, 0x18, 0xef, 0xc1, 0x29, 0x51, 0xed,
+ 0xc2, 0x37, 0xee, 0x45, 0x02, 0xdc, 0xff, 0x35, 0xc4, 0x03, 0x0d, 0xc8, 0xdd,
+ 0x27, 0xeb, 0xb8, 0xd4, 0xdd, 0x2d, 0x2e, 0xe7, 0x26, 0xf2, 0xce, 0xe7, 0x04,
+ 0x1d, 0x2d, 0x05, 0x0f, 0x06, 0xfd, 0xc0, 0xff, 0xf5, 0x09, 0x21, 0xec, 0xf5,
+ 0xfe, 0xee, 0xf2, 0x0e, 0xea, 0x16, 0xec, 0x01, 0x14, 0x2c, 0x13, 0xfd, 0xdf,
+ 0x04, 0xe0, 0x0a, 0xe2, 0x9d, 0xe4, 0x54, 0xd9, 0x06, 0x0b, 0xda, 0x0b, 0xc3,
+ 0x0e, 0x14, 0xca, 0x13, 0xc7, 0x46, 0xfd, 0x28, 0xea, 0x2d, 0x14, 0x16, 0xd5,
+ 0x07, 0x0c, 0x27, 0x27, 0x07, 0x10, 0xde, 0x46, 0x02, 0x0c, 0x06, 0x1f, 0xd0,
+ 0x32, 0xec, 0xf9, 0xb0, 0xfe, 0xcd, 0xea, 0x18, 0x1b, 0x09, 0xcf, 0x3d, 0x01,
+ 0xee, 0x07, 0xeb, 0xe9, 0xe7, 0xf5, 0x00, 0x2c, 0x48, 0xf8, 0xe5, 0x25, 0xf3,
+ 0x0e, 0x7f, 0x0b, 0x05, 0xd5, 0xcd, 0x21, 0x0a, 0xdd, 0xc6, 0xef, 0xf0, 0xf1,
+ 0xfc, 0xc9, 0x29, 0xf2, 0xf9, 0x04, 0xee, 0xe6, 0x19, 0xf7, 0x1f, 0x48, 0x01,
+ 0xfb, 0xc3, 0xea, 0xb0, 0x0a, 0x23, 0xe5, 0xfa, 0xbc, 0x12, 0xfe, 0xec, 0x0a,
+ 0xdb, 0x01, 0xc1, 0xed, 0xdd, 0xfe, 0x08, 0xee, 0x8a, 0x01, 0xa4, 0x11, 0xf1,
+ 0x22, 0xbc, 0x00, 0x08, 0x16, 0x23, 0x02, 0x7c, 0x37, 0xf8, 0xff, 0xfb, 0xe9,
+ 0xcd, 0xee, 0x55, 0x15, 0x38, 0x42, 0x14, 0xac, 0xb2, 0x5d, 0x21, 0xe5, 0xfc,
+ 0x1a, 0xd9, 0xf9, 0xc9, 0xd3, 0xd0, 0x0d, 0xe0, 0x29, 0x4f, 0xfd, 0xd1, 0x4f,
+ 0xca, 0xc8, 0x05, 0xed, 0xe0, 0xfa, 0xf5, 0x36, 0x17, 0x19, 0xd6, 0x4b, 0xd5,
+ 0x14, 0xda, 0x51, 0xe5, 0xd6, 0xfa, 0x0f, 0xd1, 0x09, 0xe8, 0x93, 0x24, 0x75,
+ 0x19, 0x2a, 0x11, 0x2e, 0x30, 0x0f, 0x4d, 0xfa, 0xb9, 0xda, 0x94, 0xbe, 0xa0,
+ 0xf4, 0xee, 0x28, 0xe8, 0x2c, 0x44, 0xdd, 0xb4, 0x7f, 0x9e, 0xee, 0xee, 0xfd,
+ 0xf0, 0x12, 0xde, 0x28, 0x17, 0xc4, 0x1c, 0x27, 0x95, 0x0f, 0x18, 0x09, 0x33,
+ 0x3b, 0x0d, 0xe4, 0xd4, 0x14, 0x37, 0x39, 0xc3, 0x4f, 0xc6, 0x0f, 0xe8, 0x03,
+ 0xdb, 0x01, 0xf9, 0xf2, 0xe6, 0xe3, 0xb6, 0x07, 0xe9, 0x8a, 0x2b, 0x57, 0x10,
+ 0x2b, 0x21, 0x0a, 0xec, 0x06, 0xad, 0x65, 0xcc, 0x22, 0x1f, 0x35, 0x01, 0x8e,
+ 0x13, 0x1e, 0x19, 0xc7, 0xfd, 0xfa, 0x32, 0xc9, 0xe2, 0x4b, 0x5f, 0x36, 0xde,
+ 0xb5, 0xea, 0x4b, 0x1d, 0xdf, 0xf5, 0x13, 0xe4, 0xe1, 0xf7, 0x98, 0xd9, 0xef,
+ 0xfb, 0x13, 0x08, 0x2b, 0x08, 0xd3, 0xdf, 0xfe, 0x2d, 0x01, 0xbf, 0xef, 0x4d,
+ 0xe3, 0x11, 0x34, 0xf4, 0x2f, 0xcf, 0x09, 0xbc, 0xfa, 0x63, 0xdb, 0x0f, 0x3e,
+ 0x0f, 0xc9, 0xdb, 0x12, 0x0b, 0xf3, 0x2b, 0xf2, 0xf8, 0xf0, 0xbb, 0xd2, 0xb5,
+ 0xe8, 0x49, 0xef, 0x91, 0xdf, 0x07, 0x13, 0x48, 0xdd, 0x46, 0xfc, 0xf5, 0xfa,
+ 0xdb, 0xdf, 0x23, 0x7f, 0xe5, 0x03, 0xf2, 0x2e, 0x0e, 0xb2, 0xd8, 0x10, 0x48,
+ 0x03, 0x03, 0xd9, 0xe4, 0x2b, 0xc0, 0x17, 0xfe, 0xa2, 0xfb, 0xde, 0xf7, 0x05,
+ 0x26, 0x5b, 0xf7, 0x51, 0x0e, 0xe2, 0xcf, 0xcc, 0x58, 0xc1, 0x46, 0x41, 0xfe,
+ 0xf6, 0x43, 0xc8, 0x48, 0xf6, 0x0c, 0x1c, 0xb3, 0xf4, 0x45, 0xde, 0x3b, 0x38,
+ 0x2a, 0x5f, 0x90, 0x3e, 0xb5, 0x24, 0x73, 0x1d, 0x17, 0x1c, 0x0b, 0xe7, 0x0e,
+ 0xdd, 0xfa, 0x22, 0x29, 0x3f, 0x02, 0xf9, 0xe2, 0xf8, 0x59, 0xc9, 0xe7, 0xe8,
+ 0x14, 0x11, 0x7f, 0x10, 0xf0, 0x4c, 0xc2, 0x39, 0x67, 0x1e, 0x3b, 0x29, 0xa2,
+ 0x14, 0xc1, 0x45, 0xc4, 0x5a, 0x97, 0x3c, 0x61, 0x13, 0x2e, 0xb4, 0xe8, 0x2b,
+ 0x26, 0x19, 0xe9, 0xc2, 0xcf, 0xf7, 0xdb, 0xee, 0xfe, 0x61, 0xd7, 0x34, 0xed,
+ 0xcc, 0xdf, 0x4b, 0x54, 0x02, 0x23, 0x55, 0xff, 0xfd, 0xc2, 0x50, 0x28, 0x31,
+ 0x03, 0xac, 0x0c, 0x44, 0xe0, 0xdb, 0x20, 0x16, 0x23, 0x10, 0xd5, 0x41, 0x0a,
+ 0x2c, 0x0b, 0xe5, 0xe7, 0x65, 0xfe, 0xea, 0xe9, 0x4d, 0xad, 0x70, 0xee, 0x19,
+ 0xab, 0xcb, 0x22, 0x20, 0xc7, 0xf7, 0xe1, 0x2a, 0xa5, 0xf3, 0x20, 0xf8, 0x19,
+ 0x1c, 0x0b, 0x33, 0x50, 0x1e, 0x3d, 0xf3, 0xce, 0xf3, 0x16, 0x36, 0x19, 0xdb,
+ 0xf8, 0xdf, 0x1f, 0xe4, 0xe0, 0x19, 0x30, 0x0a, 0xa1, 0xeb, 0xba, 0x0e, 0xf8,
+ 0xa4, 0xf6, 0x22, 0xdd, 0xb3, 0xf8, 0xeb, 0xbc, 0x22, 0xfa, 0xff, 0xe5, 0x51,
+ 0xef, 0xf7, 0x08, 0xe3, 0x7f, 0x0a, 0x0a, 0xd5, 0x29, 0xf0, 0x02, 0xc9, 0x28,
+ 0x30, 0xc3, 0x19, 0xd2, 0x23, 0x0f, 0x6a, 0xd3, 0xb4, 0xf1, 0x12, 0xd5, 0xf3,
+ 0x19, 0xc8, 0xc6, 0xcd, 0xcd, 0xf5, 0xf9, 0x10, 0x36, 0xf6, 0x26, 0x2b, 0x50,
+ 0xe4, 0x9b, 0x47, 0x43, 0xee, 0x2f, 0x0a, 0x19, 0xf6, 0x15, 0xff, 0x0b, 0x14,
+ 0x13, 0x37, 0x27, 0x18, 0x23, 0xfc, 0x13, 0x36, 0x3a, 0xf3, 0xf5, 0xfe, 0xff,
+ 0x1f, 0xdb, 0x01, 0x15, 0xf2, 0x5f, 0x0e, 0x12, 0xd4, 0xe9, 0x07, 0xdf, 0x32,
+ 0xc5, 0xcf, 0xf5, 0x28, 0xf8, 0x2e, 0x2d, 0xf0, 0x7f, 0xf1, 0xf0, 0xd9, 0x04,
+ 0xd2, 0x39, 0x2d, 0xb6, 0xcf, 0xd9, 0x0d, 0x08, 0x6f, 0xfd, 0x2d, 0xfb, 0xd3,
+ 0xf8, 0x0b, 0x02, 0xdf, 0xf0, 0xc7, 0x52, 0x34, 0xf6, 0x1f, 0xf1, 0xcf, 0xec,
+ 0x48, 0x1e, 0xfd, 0xed, 0xe2, 0xb4, 0x20, 0x3e, 0xe2, 0xfc, 0xb4, 0xfa, 0xea,
+ 0x16, 0xf4, 0xd1, 0x04, 0xea, 0x17, 0x51, 0x18, 0x6e, 0x23, 0xec, 0x06, 0xec,
+ 0x62, 0x04, 0x5f, 0xe4, 0xbd, 0x20, 0x1a, 0xa6, 0xea, 0x19, 0xdf, 0xf1, 0xbf,
+ 0xf9, 0xfe, 0x8f, 0x05, 0xf7, 0xe9, 0xdd, 0xfb, 0x07, 0xec, 0x12, 0x00, 0x1b,
+ 0x49, 0x14, 0x2f, 0xd4, 0x06, 0x15, 0x12, 0x19, 0xeb, 0x12, 0xdf, 0xea, 0x44,
+ 0x07, 0xe1, 0x47, 0xfe, 0x46, 0xe0, 0x39, 0xe5, 0xe2, 0xcd, 0xee, 0x24, 0xde,
+ 0xe9, 0xfd, 0xb6, 0x2c, 0xc1, 0xed, 0xde, 0xc9, 0x28, 0xef, 0xdf, 0x06, 0x01,
+ 0xc7, 0xf4, 0xf3, 0x22, 0xde, 0x14, 0x0e, 0x00, 0x0f, 0x0f, 0xf2, 0xcf, 0x55,
+ 0xe2, 0xf4, 0xe5, 0x0a, 0x05, 0xeb, 0xd2, 0x28, 0xdf, 0x14, 0xc8, 0xcd, 0xda,
+ 0xfb, 0xf8, 0xed, 0xf3, 0x05, 0xd9, 0x7f, 0xfd, 0x2c, 0x20, 0xf0, 0x10, 0x0f,
+ 0xc8, 0xd8, 0x23, 0xba, 0xdb, 0xfb, 0x0f, 0x04, 0xca, 0xe8, 0x30, 0xff, 0xea,
+ 0x03, 0x4f, 0x03, 0xd3, 0xda, 0x20, 0xf0, 0xbe, 0xfd, 0x26, 0xca, 0x03, 0xc9,
+ 0xdf, 0x03, 0x48, 0xf9, 0x37, 0xf6, 0x13, 0x01, 0x21, 0xf3, 0x21, 0xc7, 0xd8,
+ 0xff, 0xaa, 0x36, 0x39, 0xef, 0x36, 0x03, 0x00, 0xe5, 0x3b, 0xe4, 0xf8, 0x32,
+ 0x3d, 0x17, 0x10, 0xe7, 0x28, 0x32, 0xbb, 0x10, 0xd0, 0xc3, 0x1b, 0x0a, 0xed,
+ 0xed, 0x11, 0x2d, 0x01, 0xd0, 0xf4, 0xf7, 0x03, 0x01, 0x12, 0xb5, 0x0a, 0xf5,
+ 0x04, 0x02, 0xf6, 0x17, 0x15, 0xf6, 0xaa, 0xea, 0xb3, 0x3a, 0x0d, 0x19, 0x43,
+ 0xdf, 0xf3, 0xdb, 0xcd, 0x4c, 0xd0, 0xf8, 0x0a, 0xeb, 0x36, 0xd6, 0x8e, 0x65,
+ 0x3c, 0xc1, 0x0e, 0x04, 0x1d, 0x40, 0xdb, 0x04, 0x27, 0x27, 0xbb, 0x2b, 0xc2,
+ 0xca, 0x0f, 0xf8, 0x1b, 0x27, 0xe2, 0x12, 0x8f, 0x15, 0xfe, 0xbc, 0xea, 0x4b,
+ 0xef, 0xe7, 0xfe, 0xbb, 0xc2, 0xe6, 0x08, 0xe3, 0xcc, 0x38, 0x36, 0xdb, 0x10,
+ 0x1a, 0x11, 0xe1, 0x10, 0xd3, 0xe5, 0xc1, 0xec, 0xd6, 0xe8, 0x30, 0xce, 0x2e,
+ 0x3b, 0xe7, 0xb9, 0xce, 0x01, 0x39, 0x3a, 0x04, 0x0c, 0x3b, 0xbe, 0xec, 0x2d,
+ 0xff, 0x07, 0x02, 0xf4, 0x61, 0x81, 0xf0, 0x39, 0x0c, 0xf3, 0xe4, 0xca, 0xc5,
+ 0xea, 0x21, 0xe5, 0x12, 0xef, 0xe2, 0xef, 0xeb, 0x13, 0xde, 0x21, 0x18, 0xf5,
+ 0xee, 0x02, 0x04, 0x43, 0xf4, 0xd7, 0xe9, 0x25, 0xd6, 0x4b, 0xff, 0x4e, 0xe1,
+ 0xe8, 0xd4, 0xfd, 0xe5, 0xfd, 0xf0, 0xde, 0xe7, 0x0e, 0xe9, 0xd3, 0xd0, 0x2f,
+ 0x25, 0xe1, 0x06, 0xfc, 0x21, 0xd7, 0xdf, 0x25, 0x7f, 0x1b, 0xee, 0x01, 0xed,
+ 0xf4, 0x29, 0xf3, 0x3e, 0x09, 0x22, 0xd8, 0xd9, 0x0e, 0xc5, 0x2e, 0xe5, 0x16,
+ 0x15, 0x3d, 0xb9, 0x0d, 0xff, 0xc5, 0xe0, 0xff, 0xfe, 0x33, 0xe3, 0x19, 0x61,
+ 0xe4, 0xfb, 0xfc, 0x32, 0xbf, 0xea, 0x00, 0x38, 0x45, 0x2b, 0xc5, 0x25, 0xec,
+ 0xd7, 0x0c, 0xf0, 0x30, 0xd0, 0xc1, 0x02, 0x20, 0xd9, 0xf4, 0x23, 0x5e, 0x21,
+ 0x45, 0x0f, 0x28, 0xe6, 0x4d, 0x02, 0x39, 0x08, 0xf1, 0xe4, 0xbd, 0x16, 0xff,
+ 0x02, 0xfe, 0xee, 0xe2, 0xd3, 0xcb, 0x35, 0x6c, 0x65, 0xfe, 0x03, 0x00, 0xf3,
+ 0xf0, 0xb9, 0x51, 0x0a, 0x4d, 0x01, 0x48, 0xd7, 0x12, 0x17, 0x1a, 0x0a, 0xf2,
+ 0x2f, 0x07, 0xf8, 0x02, 0xf5, 0x47, 0xca, 0x17, 0x09, 0xd3, 0x57, 0xfd, 0xe1,
+ 0xec, 0x05, 0xf9, 0x03, 0xfa, 0xdd, 0xf4, 0x3f, 0xb6, 0x00, 0x1c, 0xd9, 0x4a,
+ 0xea, 0x23, 0x03, 0xf8, 0xf5, 0x11, 0xfc, 0x13, 0x2f, 0x09, 0xb3, 0x0b, 0xeb,
+ 0x0d, 0x19, 0xf3, 0x27, 0xff, 0x03, 0xcb, 0x18, 0x56, 0xd9, 0x1d, 0xec, 0xbb,
+ 0xe5, 0x22, 0xf9, 0xf6, 0x14, 0x13, 0x7f, 0x0c, 0x1b, 0xb0, 0x0e, 0x19, 0x2c,
+ 0x2e, 0x03, 0x31, 0x0c, 0xff, 0x31, 0x11, 0x18, 0x03, 0x28, 0xde, 0x1b, 0xe4,
+ 0x1e, 0x1b, 0xfb, 0x10, 0xed, 0x0f, 0xff, 0x18, 0xd9, 0x1a, 0xde, 0xfa, 0xe7,
+ 0xb4, 0x30, 0xbe, 0x4f, 0x01, 0x20, 0x1a, 0x02, 0xfe, 0x61, 0x0e, 0x22, 0x1d,
+ 0x0e, 0x30, 0x38, 0xc0, 0xdd, 0x2c, 0xf5, 0xd1, 0x03, 0x2f, 0x51, 0x3f, 0xdd,
+ 0xdb, 0xfc, 0x13, 0x23, 0xc5, 0x07, 0x02, 0xa5, 0x20, 0x35, 0xf9, 0x0b, 0xdd,
+ 0xf9, 0x1a, 0xfc, 0x0e, 0xfb, 0x23, 0x20, 0x3f, 0x12, 0x1c, 0xe2, 0xff, 0xec,
+ 0xdf, 0xe5, 0xdb, 0x0a, 0x03, 0x16, 0xc1, 0x0e, 0xe0, 0xf3, 0x09, 0xfc, 0x0a,
+ 0xd9, 0x03, 0x7f, 0x06, 0x26, 0xfe, 0xfb, 0x06, 0xcd, 0xe9, 0x0f, 0x1e, 0xfa,
+ 0xe8, 0x18, 0xd5, 0xdf, 0x1b, 0x12, 0xe0, 0x1c, 0xe7, 0x16, 0x15, 0xb4, 0x03,
+ 0xf5, 0xca, 0xd4, 0x33, 0x0a, 0xf7, 0xfc, 0x31, 0xb2, 0xef, 0xf2, 0xf1, 0xf2,
+ 0xfe, 0xf3, 0xf9, 0xfd, 0xf6, 0xd4, 0x05, 0x10, 0x60, 0x48, 0x11, 0xd8, 0xf4,
+ 0x23, 0x08, 0xf4, 0xee, 0xe4, 0xc6, 0x22, 0x14, 0xdc, 0xfc, 0x06, 0xff, 0x18,
+ 0x0f, 0x1c, 0xf2, 0xdd, 0x30, 0x35, 0x53, 0x01, 0xd0, 0xfa, 0xdd, 0x1a, 0x0d,
+ 0x54, 0x09, 0xcf, 0x1e, 0xf4, 0x0d, 0xef, 0x02, 0x1a, 0xf0, 0x10, 0xef, 0x18,
+ 0xfc, 0x0a, 0x1a, 0xfc, 0x0a, 0xec, 0x0f, 0x2e, 0x01, 0xfa, 0x27, 0x19, 0xfd,
+ 0xef, 0x0f, 0xef, 0x3f, 0xf3, 0x04, 0xf7, 0x0b, 0x3d, 0x2e, 0xef, 0x02, 0xea,
+ 0xf8, 0xf1, 0xb5, 0x02, 0x3d, 0xb7, 0x0c, 0xc2, 0xf2, 0x24, 0x02, 0xc8, 0x4d,
+ 0xd7, 0x16, 0xee, 0x2c, 0x22, 0xa4, 0x21, 0x00, 0x0d, 0xe4, 0xc1, 0xff, 0x3b,
+ 0xf2, 0x18, 0x10, 0x7f, 0x27, 0xd9, 0xfd, 0x0b, 0x11, 0xfa, 0xac, 0xd7, 0x0e,
+ 0xd2, 0xc8, 0xbd, 0xf9, 0xd4, 0x1c, 0x4f, 0x48, 0xe4, 0xf1, 0x02, 0x2c, 0xab,
+ 0x3c, 0x0d, 0x97, 0xc9, 0xc2, 0xdb, 0xeb, 0xf6, 0x17, 0x36, 0xb7, 0x09, 0xfb,
+ 0xea, 0xfa, 0xad, 0xcf, 0xf9, 0xee, 0x2c, 0x38, 0x64, 0xb2, 0xb7, 0xe7, 0xf7,
+ 0xe4, 0xf6, 0x1b, 0x0f, 0xfb, 0x0a, 0xf4, 0x11, 0xc6, 0x0c, 0xfa, 0xa0, 0xec,
+ 0xf7, 0xe6, 0xc3, 0x21, 0xd7, 0xe1, 0xfe, 0x9e, 0xc9, 0x01, 0xef, 0x05, 0xbc,
+ 0xb4, 0x2a, 0x46, 0x42, 0xbc, 0xd7, 0xe9, 0xec, 0x17, 0xfc, 0x24, 0xff, 0x47,
+ 0x8f, 0x4f, 0xfc, 0xeb, 0xcd, 0xdc, 0xea, 0xec, 0x91, 0xe6, 0xee, 0x26, 0x9f,
+ 0xf3, 0x0e, 0xe2, 0x1e, 0x18, 0xa9, 0x56, 0xe2, 0x96, 0x3a, 0x02, 0xf9, 0xa0,
+ 0x21, 0x47, 0x51, 0x28, 0xd2, 0x0f, 0xa6, 0x86, 0x16, 0xf7, 0xec, 0xea, 0xa5,
+ 0xcf, 0x4b, 0x24, 0x4f, 0xfb, 0xc4, 0x43, 0x47, 0xf2, 0xd5, 0x31, 0xa4, 0x48,
+ 0xc0, 0xe5, 0xc5, 0xe9, 0x97, 0xa3, 0xbf, 0xe6, 0xed, 0x66, 0xf1, 0xff, 0x0e,
+ 0x6c, 0x42, 0x5c, 0xef, 0xe3, 0x25, 0x4e, 0xd3, 0xac, 0xc3, 0xf7, 0x25, 0x09,
+ 0xd3, 0x13, 0x02, 0xea, 0xd6, 0x29, 0x4e, 0xd5, 0x23, 0x35, 0xd0, 0xd8, 0xe8,
+ 0xc5, 0x3c, 0x81, 0xad, 0x38, 0x02, 0xa9, 0x98, 0xe8, 0xcd, 0x2e, 0xd7, 0xd5,
+ 0xb7, 0x0e, 0x48, 0x2b, 0x5a, 0x41, 0x57, 0x14, 0xc4, 0x10, 0xeb, 0x61, 0x16,
+ 0x1b, 0xa3, 0xfc, 0x33, 0xf7, 0xeb, 0x96, 0x24, 0xe9, 0xdf, 0x26, 0x05, 0x19,
+ 0xe3, 0xf2, 0x08, 0x4a, 0xdb, 0xbc, 0x08, 0x13, 0x0b, 0x81, 0x09, 0xf1, 0x04,
+ 0x05, 0x09, 0x1c, 0x56, 0xe2, 0x11, 0x0a, 0x0f, 0xc6, 0x54, 0xfd, 0x15, 0xcc,
+ 0x20, 0xfc, 0x18, 0xfb, 0x0a, 0xee, 0x39, 0x21, 0x35, 0xd4, 0xeb, 0x2b, 0xe1,
+ 0x2b, 0x11, 0x2e, 0xd9, 0x26, 0xdd, 0xc0, 0x11, 0xf3, 0x31, 0xe2, 0xeb, 0xf0,
+ 0xf1, 0xf9, 0xe7, 0xfa, 0x14, 0xd2, 0xe7, 0xf3, 0x1f, 0x28, 0x46, 0xf5, 0x36,
+ 0xcf, 0x14, 0xea, 0x01, 0x10, 0xb8, 0xcb, 0x0b, 0x17, 0xc6, 0xf2, 0xf0, 0xe2,
+ 0xf4, 0x31, 0xdf, 0x2d, 0x23, 0xf2, 0x02, 0x12, 0x0f, 0x44, 0x1f, 0xfa, 0x2f,
+ 0x08, 0x39, 0x22, 0xc6, 0xe3, 0xc5, 0x0b, 0x13, 0x02, 0xcf, 0xd8, 0x09, 0x12,
+ 0xc9, 0xd3, 0xec, 0x0c, 0xe3, 0xe7, 0x17, 0x39, 0x10, 0x27, 0x05, 0x1b, 0x1b,
+ 0x1c, 0xe8, 0x12, 0x13, 0x2a, 0xde, 0xec, 0xfb, 0xe5, 0xfd, 0x37, 0xe3, 0xcb,
+ 0x20, 0xe1, 0x2f, 0xc5, 0x20, 0xc2, 0x06, 0x29, 0x0e, 0xdf, 0x5b, 0xf6, 0xfc,
+ 0xcf, 0x55, 0xf3, 0x7e, 0xca, 0x0d, 0xfd, 0xd3, 0xbd, 0xd0, 0x04, 0x09, 0x99,
+ 0x30, 0xd9, 0x24, 0xc0, 0xf1, 0xe7, 0x4a, 0xfc, 0x6c, 0xf3, 0x01, 0xd4, 0xfa,
+ 0x1c, 0x5e, 0x20, 0xea, 0xc3, 0x06, 0xc9, 0x0a, 0x8a, 0x32, 0xe2, 0x2f, 0xf3,
+ 0x1f, 0x12, 0x39, 0x12, 0x12, 0xaa, 0x02, 0x3f, 0x51, 0xb5, 0x59, 0x1f, 0x32,
+ 0x13, 0x1a, 0x22, 0xc9, 0xf0, 0xff, 0xef, 0xb1, 0xd9, 0xc6, 0xdd, 0xf2, 0xfa,
+ 0x2e, 0x3a, 0x4f, 0xd4, 0x02, 0xc7, 0xcf, 0xf7, 0xcb, 0x12, 0x8f, 0x0a, 0x14,
+ 0xe5, 0x85, 0x0d, 0xbe, 0xd1, 0xa3, 0x22, 0x50, 0xa7, 0x4d, 0xec, 0xe0, 0x0b,
+ 0x24, 0xb0, 0x31, 0x4c, 0x17, 0xf7, 0x00, 0x8c, 0xe0, 0x7f, 0x1b, 0xe6, 0xdd,
+ 0xf5, 0x36, 0x04, 0xf7, 0x93, 0xef, 0x38, 0x4c, 0x03, 0x1b, 0x5f, 0xe9, 0x26,
+ 0x20, 0x14, 0xfb, 0xf1, 0x0a, 0xcf, 0xfe, 0x09, 0x05, 0xaa, 0x34, 0x21, 0xc4,
+ 0xcb, 0x09, 0xf3, 0xdc, 0xff, 0x7f, 0x0f, 0xda, 0x0e, 0x22, 0x23, 0x2f, 0xf7,
+ 0x11, 0xf9, 0x13, 0x18, 0x2d, 0xe0, 0x34, 0x34, 0x19, 0xe4, 0x0c, 0x27, 0xbd,
+ 0x08, 0xe0, 0xe8, 0xeb, 0x19, 0xff, 0x1e, 0x0c, 0xe9, 0xfc, 0x49, 0x07, 0x0c,
+ 0x10, 0x15, 0xdb, 0x20, 0x02, 0x26, 0x07, 0x1c, 0x25, 0x23, 0xd0, 0x10, 0x12,
+ 0x46, 0xe4, 0xc8, 0x02, 0xdf, 0x0e, 0x14, 0xfb, 0xe9, 0xf7, 0x1a, 0x0b, 0x0b,
+ 0x22, 0x02, 0xf9, 0x0f, 0xf9, 0x24, 0x0a, 0x27, 0x10, 0x0f, 0x23, 0x1a, 0x87,
+ 0x01, 0xf4, 0xde, 0x10, 0x06, 0x04, 0x1b, 0xe9, 0xdd, 0xe2, 0x0c, 0x19, 0xc5,
+ 0x0a, 0x0b, 0x19, 0xe6, 0x20, 0x35, 0xf3, 0x22, 0xf7, 0xff, 0x39, 0x1a, 0x06,
+ 0xed, 0x21, 0xf7, 0xd3, 0x09, 0x22, 0x05, 0xe5, 0xf0, 0x0a, 0xf6, 0xfe, 0x0a,
+ 0x13, 0x05, 0x51, 0x19, 0x10, 0x34, 0xfd, 0x44, 0xf4, 0xe3, 0xf8, 0xf2, 0xf4,
+ 0x30, 0xe9, 0xf8, 0x19, 0xfa, 0x0a, 0xdb, 0x0e, 0x0a, 0xc9, 0xff, 0xe7, 0xdd,
+ 0x28, 0xf3, 0x05, 0x42, 0xe6, 0xf3, 0x18, 0xf9, 0xe9, 0xf4, 0x08, 0x20, 0x1d,
+ 0x20, 0x39, 0xe8, 0x11, 0x07, 0xf7, 0xd1, 0x3a, 0xee, 0xdc, 0xfa, 0x35, 0xf3,
+ 0x0d, 0x17, 0x12, 0xf9, 0x1c, 0xfa, 0x09, 0x06, 0x05, 0x17, 0x27, 0x00, 0x21,
+ 0xcb, 0x0c, 0xff, 0x20, 0xc7, 0x03, 0xf4, 0x0a, 0x20, 0x15, 0xe1, 0x26, 0x02,
+ 0xd9, 0x12, 0x0e, 0x41, 0xfc, 0x24, 0x01, 0xe9, 0x24, 0xeb, 0x05, 0x19, 0x1b,
+ 0x11, 0xd4, 0x27, 0xe1, 0x08, 0x07, 0xfb, 0xe3, 0xe1, 0x20, 0x1e, 0xfd, 0xe6,
+ 0xc1, 0x1d, 0xda, 0xe9, 0xd8, 0x03, 0x08, 0xc1, 0x19, 0x0f, 0x33, 0xde, 0xf3,
+ 0x17, 0xe9, 0x0b, 0x0d, 0x04, 0x7f, 0x1d, 0xfd, 0x05, 0x36, 0xb6, 0xd1, 0x22,
+ 0x07, 0x5e, 0x1e, 0xeb, 0xfc, 0x3c, 0xd1, 0x15, 0x0a, 0x1b, 0x11, 0xd7, 0x29,
+ 0x19, 0x3d, 0xa9, 0x20, 0xda, 0xc0, 0xeb, 0xa3, 0x20, 0xdf, 0xe0, 0x8f, 0xee,
+ 0x0e, 0xf8, 0xf0, 0xfb, 0x16, 0xed, 0x43, 0x0b, 0xb0, 0x1c, 0x06, 0x85, 0x26,
+ 0xe8, 0x23, 0xc4, 0x65, 0x11, 0x26, 0xf4, 0x2d, 0xfa, 0x11, 0xd1, 0xc9, 0x42,
+ 0xdd, 0x1f, 0xbe, 0xae, 0x0b, 0x03, 0x52, 0x07, 0xc1, 0xd7, 0x25, 0x23, 0x07,
+ 0x2c, 0xd5, 0x0b, 0x1a, 0x14, 0x3b, 0xd8, 0x13, 0x31, 0x37, 0x0d, 0x1d, 0x25,
+ 0xda, 0xe8, 0x03, 0x17, 0xf9, 0x7f, 0x03, 0x01, 0x30, 0x29, 0x53, 0x56, 0xf6,
+ 0x18, 0x9b, 0xde, 0xe9, 0xc3, 0xed, 0xe6, 0x1a, 0x9e, 0x37, 0xda, 0x0f, 0xcb,
+ 0x2c, 0x21, 0xd8, 0x42, 0x16, 0x00, 0x22, 0x36, 0x45, 0x18, 0xbf, 0xff, 0x0d,
+ 0x25, 0xff, 0xaf, 0xf8, 0xef, 0xdc, 0x1c, 0x9f, 0x05, 0xeb, 0x26, 0xe2, 0xdd,
+ 0x3c, 0x02, 0x06, 0xfa, 0xe9, 0xf7, 0xa9, 0x15, 0x07, 0xf8, 0xf7, 0x0c, 0xfe,
+ 0xe1, 0xff, 0x24, 0x9e, 0xd7, 0xbe, 0xdf, 0x0a, 0xf6, 0xca, 0x05, 0xf6, 0x15,
+ 0xe7, 0xf2, 0x3b, 0x0f, 0xdb, 0x2c, 0x27, 0x98, 0x13, 0x74, 0xff, 0xf7, 0x11,
+ 0xde, 0x40, 0x2d, 0xeb, 0x02, 0xe2, 0xe7, 0xea, 0xdf, 0x00, 0x32, 0xea, 0xd9,
+ 0xfc, 0xc6, 0xfc, 0xf5, 0xdd, 0x02, 0xd7, 0xd7, 0xe1, 0x23, 0xe5, 0xbf, 0xcd,
+ 0x64, 0x4a, 0xe4, 0xf3, 0x7f, 0x1d, 0x05, 0x96, 0x53, 0x22, 0xe8, 0xb6, 0xc2,
+ 0x18, 0x23, 0x1a, 0x64, 0xec, 0x03, 0xe5, 0xcc, 0x4e, 0x6d, 0xf5, 0x5f, 0xf0,
+ 0x86, 0x00, 0xc0, 0xdd, 0x28, 0x15, 0x47, 0x1a, 0x21, 0x00, 0xdf, 0x0c, 0xd2,
+ 0xf5, 0x0b, 0xd8, 0xd5, 0x37, 0x2c, 0xf6, 0x1a, 0x15, 0xce, 0xe4, 0xef, 0xf9,
+ 0x1f, 0x08, 0xd1, 0x41, 0x0f, 0xd1, 0x44, 0xe5, 0x25, 0x36, 0x0e, 0x0c, 0xf6,
+ 0xf6, 0xf2, 0x2c, 0x22, 0xb1, 0x1d, 0x15, 0x21, 0x5b, 0x25, 0x11, 0x75, 0xba,
+ 0xd9, 0x10, 0x1e, 0xf7, 0x01, 0xdd, 0xf6, 0x7f, 0xb7, 0xfc, 0x12, 0x1e, 0x02,
+ 0xcb, 0xeb, 0xf0, 0x00, 0xea, 0xbd, 0x35, 0xbc, 0x1f, 0x10, 0x14, 0xd2, 0x07,
+ 0xdc, 0xce, 0xc6, 0x02, 0x01, 0x21, 0x50, 0xc8, 0xb7, 0xf2, 0x23, 0xcd, 0xce,
+ 0x02, 0xb8, 0x4c, 0x01, 0xbf, 0x2e, 0xea, 0x1e, 0x52, 0x3e, 0xc5, 0xfd, 0x37,
+ 0x07, 0x2b, 0x0f, 0x14, 0xaf, 0xfd, 0x26, 0xdc, 0xe4, 0xf8, 0x1a, 0x0b, 0xff,
+ 0x65, 0x02, 0x00, 0x35, 0xaf, 0x33, 0xd5, 0x30, 0x62, 0x11, 0x04, 0xe2, 0xe3,
+ 0xda, 0x39, 0x3b, 0x2e, 0x1f, 0x47, 0x55, 0x39, 0x0c, 0xf8, 0x22, 0x1e, 0x2d,
+ 0xce, 0x75, 0x07, 0x02, 0x0a, 0xfa, 0x43, 0x58, 0x15, 0xcb, 0xf9, 0x3f, 0xcb,
+ 0xdc, 0xe0, 0xf0, 0x04, 0x46, 0xbc, 0xca, 0x0f, 0xf9, 0x04, 0xe7, 0x25, 0x15,
+ 0xb8, 0xe1, 0xd8, 0x14, 0x24, 0x49, 0x0e, 0x2c, 0xe1, 0x98, 0x1c, 0xdb, 0xfe,
+ 0x34, 0xe8, 0xe7, 0xea, 0x16, 0x0f, 0x00, 0x49, 0x7f, 0x34, 0x41, 0xe3, 0x0b,
+ 0x0e, 0x49, 0x63, 0x45, 0xf3, 0xe8, 0xe1, 0xcc, 0xcc, 0xbd, 0x49, 0x07, 0xcc,
+ 0xee, 0xf4, 0x53, 0x02, 0x5e, 0x23, 0x31, 0xe0, 0xf8, 0xfb, 0xf5, 0xe1, 0xeb,
+ 0xd7, 0xe8, 0x02, 0x2c, 0x30, 0xcd, 0x27, 0x31, 0xcb, 0xf0, 0xe6, 0x03, 0xf9,
+ 0x67, 0xee, 0xd8, 0x36, 0xb9, 0x02, 0x4c, 0xdf, 0xae, 0xd0, 0xfc, 0xf8, 0xc5,
+ 0x50, 0xde, 0x46, 0x00, 0xf9, 0xdd, 0xc5, 0x68, 0x12, 0xfc, 0xe2, 0xff, 0xee,
+ 0xe4, 0xf2, 0xec, 0xf9, 0x77, 0xc7, 0x7f, 0x2a, 0x1e, 0xf2, 0xd0, 0x45, 0x9b,
+ 0x61, 0xff, 0x33, 0xdd, 0x20, 0xaf, 0xed, 0x6a, 0x03, 0x1a, 0xe2, 0x5a, 0x08,
+ 0x07, 0x50, 0xc6, 0xd8, 0x1f, 0x02, 0xc5, 0xe6, 0xe4, 0xb3, 0xfe, 0x0f, 0x1f,
+ 0xe0, 0x02, 0xf5, 0xd1, 0x1e, 0xfb, 0xa4, 0x07, 0x1a, 0xcb, 0x34, 0xcf, 0xf6,
+ 0x16, 0x38, 0x1b, 0x19, 0x2e, 0x2d, 0xe7, 0xc5, 0xca, 0xe3, 0x19, 0x10, 0x03,
+ 0xdc, 0xd1, 0xfd, 0x35, 0x0e, 0x0c, 0xb0, 0xe2, 0x5a, 0xdd, 0xf3, 0x81, 0xee,
+ 0xe0, 0x18, 0xea, 0xe5, 0x42, 0x6f, 0x07, 0xf9, 0xa2, 0x6e, 0xd4, 0x36, 0x14,
+ 0x49, 0xd0, 0x4f, 0x0b, 0xe6, 0xd6, 0xbf, 0x0b, 0xea, 0x13, 0x1a, 0xc6, 0x08,
+ 0x1c, 0x1d, 0xb3, 0xfe, 0x0a, 0xe7, 0x23, 0xe6, 0xd0, 0xc7, 0xc9, 0xe7, 0xf3,
+ 0x43, 0x1b, 0x02, 0x66, 0xee, 0x02, 0x5b, 0xf3, 0x31, 0x0a, 0x5b, 0xc6, 0xef,
+ 0xdb, 0xd5, 0x35, 0xec, 0xf8, 0x3a, 0xb5, 0xf9, 0x25, 0xfc, 0x40, 0xa3, 0x24,
+ 0x0f, 0xfb, 0xd4, 0x13, 0xf6, 0xee, 0xb2, 0x2f, 0xef, 0x8b, 0xf5, 0x28, 0x69,
+ 0xef, 0xc4, 0xdb, 0x03, 0xfe, 0xe8, 0x00, 0x01, 0x3e, 0x1b, 0x2a, 0x3f, 0x2a,
+ 0x11, 0x0b, 0x03, 0xfa, 0xdc, 0xef, 0x1d, 0x47, 0xd1, 0xfe, 0x23, 0x14, 0x0b,
+ 0x0e, 0x2c, 0xd5, 0x4d, 0x0e, 0xcc, 0xd0, 0xed, 0x2e, 0x1d, 0x0e, 0x11, 0xfa,
+ 0xfb, 0xc4, 0xea, 0x33, 0x02, 0x36, 0x1e, 0xd4, 0xc5, 0x0c, 0xdf, 0xd8, 0x25,
+ 0xc3, 0xfa, 0xcc, 0x2c, 0x39, 0xc0, 0xea, 0xee, 0x06, 0xda, 0x27, 0x31, 0x1e,
+ 0x19, 0xff, 0x00, 0x0c, 0xf5, 0x12, 0xbe, 0x06, 0xd1, 0x5d, 0x13, 0xe6, 0xcc,
+ 0xc9, 0xf9, 0x6c, 0xf7, 0xe7, 0x57, 0xcc, 0x03, 0xd8, 0x3a, 0xb4, 0x7f, 0x1b,
+ 0xf7, 0xd3, 0x1f, 0xfe, 0xcc, 0xeb, 0xf6, 0x34, 0x12, 0xd0, 0xcd, 0x4b, 0xd8,
+ 0xeb, 0x11, 0x0d, 0xfd, 0x21, 0xf9, 0xd2, 0x90, 0x25, 0x03, 0xe8, 0x01, 0x1a,
+ 0x0c, 0x22, 0x29, 0x5e, 0xdd, 0xf0, 0xc4, 0x3e, 0xe1, 0xaf, 0x09, 0x1c, 0x03,
+ 0x4a, 0x1e, 0x27, 0x17, 0xe9, 0x35, 0xe4, 0xfb, 0xe9, 0x11, 0xc6, 0xcf, 0x02,
+ 0xb8, 0x35, 0x4d, 0x5f, 0xe2, 0xd9, 0x13, 0xff, 0x5a, 0x14, 0x15, 0x0f, 0xd3,
+ 0xca, 0xdc, 0xf9, 0x21, 0x1d, 0x48, 0xe4, 0x40, 0x20, 0xda, 0xce, 0xf0, 0x38,
+ 0xfe, 0xc9, 0x08, 0xdf, 0x13, 0x16, 0x27, 0xfe, 0xb1, 0xf0, 0xde, 0xa1, 0x1c,
+ 0xd9, 0x04, 0xf2, 0xe0, 0xf7, 0xe9, 0xd9, 0x30, 0x1b, 0x01, 0xde, 0xc4, 0xf8,
+ 0xe2, 0xd2, 0x13, 0xf5, 0x47, 0x07, 0xec, 0x57, 0xe7, 0xd2, 0xf6, 0xe3, 0xb5,
+ 0xfc, 0xbc, 0x00, 0x36, 0xef, 0x7f, 0x27, 0x43, 0xc8, 0xb1, 0x3a, 0xed, 0xd8,
+ 0xf0, 0x1b, 0x2e, 0xe4, 0x34, 0x4c, 0xfd, 0xf0, 0x0e, 0x48, 0xd9, 0x18, 0x26,
+ 0x2d, 0x04, 0xbd, 0xad, 0xd7, 0xbf, 0x08, 0xe4, 0x1e, 0x0c, 0xff, 0x6b, 0x39,
+ 0xe9, 0x25, 0x25, 0xf6, 0xf2, 0xe2, 0x00, 0x1f, 0xce, 0x53, 0xf6, 0x02, 0xf5,
+ 0xd2, 0x0b, 0xf9, 0x19, 0xfb, 0x10, 0xfa, 0xdc, 0xd7, 0xfa, 0xf9, 0x0e, 0xf8,
+ 0xdc, 0x05, 0x0a, 0x20, 0x12, 0x12, 0xf8, 0x1b, 0x39, 0x36, 0x0b, 0xc5, 0xf9,
+ 0x12, 0x01, 0xb0, 0xa3, 0xd3, 0xcc, 0x03, 0xef, 0x3e, 0x10, 0x28, 0x35, 0x14,
+ 0x34, 0x17, 0x10, 0xe5, 0x59, 0x2b, 0xfb, 0xcb, 0xe8, 0x06, 0xe6, 0xf9, 0xd8,
+ 0xd2, 0xf9, 0xa0, 0xe6, 0x99, 0x16, 0xf5, 0x59, 0x47, 0xbd, 0x3c, 0xd6, 0xda,
+ 0x02, 0xf9, 0x7f, 0xe0, 0xc6, 0xfe, 0xe4, 0x11, 0xc8, 0x0b, 0x19, 0xeb, 0x27,
+ 0x0a, 0x1e, 0xdd, 0x1a, 0x06, 0x0c, 0x0a, 0x10, 0xfa, 0x36, 0x1e, 0xbe, 0xb8,
+ 0x9b, 0x16, 0x0f, 0xcc, 0x0c, 0x00, 0x41, 0x1d, 0x44, 0x1a, 0x10, 0xf4, 0xff,
+ 0x51, 0xfc, 0x23, 0x37, 0xfd, 0xe0, 0x20, 0x2a, 0xe5, 0x2b, 0x4e, 0xf6, 0x09,
+ 0x3f, 0x1f, 0xeb, 0x0b, 0xe5, 0xe3, 0xcd, 0xd5, 0xb3, 0x15, 0x39, 0x22, 0x95,
+ 0xd7, 0x32, 0xb2, 0xcc, 0x19, 0xe2, 0x28, 0xd2, 0x55, 0xd7, 0x41, 0x81, 0x44,
+ 0x0c, 0xfa, 0x22, 0xf5, 0xd9, 0xdd, 0xe9, 0xd9, 0x1b, 0x17, 0x79, 0x96, 0x24,
+ 0x04, 0x16, 0x19, 0x19, 0xd2, 0x0b, 0xde, 0xce, 0xbb, 0xc9, 0xc2, 0x05, 0x20,
+ 0x20, 0x0b, 0xce, 0xe6, 0xe4, 0x0c, 0xdd, 0x06, 0xd1, 0x18, 0x0b, 0xfe, 0xf3,
+ 0xe6, 0x08, 0xf6, 0xeb, 0x92, 0x09, 0xd4, 0x01, 0x14, 0x54, 0x4c, 0x4b, 0x0f,
+ 0x27, 0x21, 0x32, 0xea, 0xb4, 0xc3, 0x11, 0xcc, 0xc9, 0xf9, 0x19, 0xd3, 0x6a,
+ 0x09, 0x2b, 0xe2, 0xf7, 0x0f, 0x09, 0x84, 0xc8, 0x64, 0xb1, 0xdb, 0xf7, 0x51,
+ 0x1e, 0xe5, 0x6a, 0xdf, 0x1e, 0xf4, 0xad, 0x0f, 0xb6, 0x00, 0xea, 0xde, 0x12,
+ 0x7b, 0xab, 0xdd, 0x39, 0x19, 0xf2, 0x90, 0x30, 0x1b, 0xe4, 0x3d, 0x39, 0x3b,
+ 0x3b, 0x08, 0x0a, 0xe6, 0xd0, 0x47, 0x01, 0xcf, 0xf7, 0x04, 0xd7, 0x22, 0x9f,
+ 0xb9, 0x34, 0xdd, 0x81, 0x33, 0x16, 0xda, 0x18, 0x2e, 0x2d, 0xec, 0x1b, 0xf3,
+ 0xf2, 0xfe, 0xd4, 0x00, 0xf9, 0xc1, 0x4f, 0xd7, 0xff, 0xfe, 0xa4, 0x1a, 0x05,
+ 0x19, 0xfb, 0xfc, 0x04, 0x15, 0xff, 0xf9, 0xe9, 0x12, 0xfe, 0x02, 0x0e, 0x0f,
+ 0x06, 0x2f, 0xc1, 0xe7, 0xbb, 0xbe, 0xbf, 0xd7, 0xfa, 0xff, 0xd9, 0xd9, 0xf9,
+ 0xfa, 0xfd, 0xf9, 0xcd, 0x09, 0xe4, 0xfc, 0xf2, 0x2a, 0x23, 0x20, 0xf6, 0xf2,
+ 0xb2, 0x55, 0xe5, 0xeb, 0x29, 0xf3, 0xef, 0x17, 0x08, 0xf9, 0x0a, 0x20, 0xfe,
+ 0x05, 0x3a, 0x43, 0x1b, 0xe0, 0x2b, 0x23, 0x00, 0x16, 0xf4, 0x2d, 0x31, 0x00,
+ 0x0e, 0xf7, 0x31, 0x39, 0x39, 0x39, 0xef, 0x14, 0x08, 0x32, 0x2e, 0x37, 0xf6,
+ 0xf9, 0xe3, 0xcb, 0xef, 0xa9, 0xcf, 0x0f, 0xd8, 0xea, 0x97, 0xfa, 0xf4, 0x14,
+ 0x1d, 0xd5, 0xd9, 0xef, 0xda, 0x38, 0xed, 0x0d, 0xf9, 0x2d, 0xd7, 0xf5, 0xd8,
+ 0x2b, 0xd4, 0x08, 0xe2, 0x32, 0xfa, 0x4a, 0x7f, 0x2a, 0x3f, 0xe1, 0x19, 0xd9,
+ 0xef, 0xc0, 0x02, 0x3a, 0x25, 0x2b, 0xe8, 0xc1, 0xa6, 0x30, 0x06, 0xc7, 0x22,
+ 0xf4, 0x07, 0xea, 0x19, 0x1c, 0x0c, 0x16, 0xe1, 0x30, 0x43, 0x1e, 0xf2, 0xfb,
+ 0xe2, 0xed, 0x4d, 0x49, 0xb9, 0xb9, 0x9d, 0xd2, 0x27, 0xf7, 0xfb, 0x20, 0xba,
+ 0x19, 0xdb, 0x22, 0xe6, 0x1f, 0x2b, 0xf2, 0x35, 0x2f, 0xd2, 0x05, 0xd3, 0x27,
+ 0xef, 0x12, 0xe5, 0x1b, 0xdd, 0x0e, 0xdf, 0xd6, 0xd0, 0xf6, 0xf8, 0xe4, 0xc6,
+ 0xd0, 0x62, 0x16, 0xd7, 0xc9, 0x1e, 0x17, 0xc9, 0x04, 0x30, 0xd7, 0x04, 0x0e,
+ 0x02, 0xf1, 0x06, 0x09, 0x01, 0x0d, 0x3c, 0xed, 0x05, 0x0b, 0xaf, 0xca, 0x04,
+ 0x09, 0xe1, 0x19, 0x06, 0x36, 0x19, 0xe0, 0xe8, 0x06, 0xcb, 0xc4, 0xf2, 0x40,
+ 0x08, 0xba, 0x4e, 0xfa, 0x93, 0xd6, 0x9d, 0x05, 0x24, 0xa4, 0x04, 0x50, 0x1c,
+ 0xe0, 0x54, 0x23, 0xd6, 0xbc, 0x66, 0xc7, 0x57, 0x71, 0xfb, 0x59, 0x1e, 0x59,
+ 0x0d, 0xec, 0xd3, 0xe6, 0x0a, 0x01, 0x57, 0xb5, 0x30, 0xe4, 0xd8, 0x40, 0x1a,
+ 0x39, 0xd8, 0x50, 0xf3, 0xe6, 0x12, 0x20, 0xea, 0x4b, 0xf9, 0x2a, 0x0a, 0xfc,
+ 0x29, 0xe1, 0xa1, 0x4d, 0x2b, 0x6e, 0x19, 0x22, 0x46, 0x1a, 0xc4, 0xe5, 0xf6,
+ 0xce, 0x43, 0xed, 0x2e, 0xe1, 0xe0, 0x2a, 0x41, 0xd4, 0xb4, 0xef, 0xe1, 0x13,
+ 0x2c, 0x36, 0xd4, 0xef, 0xdc, 0x46, 0x30, 0x4a, 0x03, 0xec, 0x2a, 0xdc, 0xaa,
+ 0xc6, 0x64, 0x4d, 0xf9, 0xa1, 0x15, 0xbb, 0x1f, 0x93, 0x01, 0x17, 0x07, 0xf7,
+ 0xab, 0x81, 0x65, 0x23, 0xf6, 0x58, 0x0b, 0x3e, 0x28, 0xc7, 0x92, 0x18, 0x32,
+ 0x4e, 0xec, 0xf1, 0x20, 0xe5, 0xb8, 0xae, 0xff, 0x5d, 0xd4, 0x57, 0x59, 0x46,
+ 0xca, 0x15, 0x42, 0xe5, 0x6f, 0x02, 0x40, 0xc2, 0xd1, 0xe1, 0xc7, 0xdc, 0x00,
+ 0x00, 0xed, 0xaf, 0xea, 0x2f, 0xc7, 0xdb, 0x37, 0xcd, 0x1a, 0x05, 0xd1, 0xe9,
+ 0xf5, 0x0a, 0xd1, 0x11, 0x6a, 0x2a, 0x30, 0x1e, 0xc8, 0x5c, 0xab, 0x1e, 0x6c,
+ 0xd1, 0x7a, 0x22, 0xfb, 0xea, 0x58, 0x08, 0x1c, 0x7f, 0x11, 0xe8, 0xdc, 0xc6,
+ 0xb8, 0x22, 0x98, 0x17, 0xc0, 0xd9, 0xb3, 0x07, 0x02, 0x57, 0xe0, 0xf4, 0x1b,
+ 0xa9, 0xfa, 0x39, 0xf4, 0xef, 0x23, 0xa9, 0x2d, 0x4e, 0x20, 0xb9, 0x0b, 0xda,
+ 0x38, 0xbb, 0x99, 0xf7, 0x18, 0xd7, 0xd4, 0x6a, 0x1d, 0x53, 0x89, 0x2c, 0xa7,
+ 0xcb, 0xf1, 0x04, 0xd9, 0x65, 0xfb, 0x64, 0x18, 0x08, 0xfc, 0xb5, 0x1e, 0x1b,
+ 0xda, 0x15, 0xb7, 0xe2, 0x18, 0x2f, 0x01, 0x22, 0xc8, 0x20, 0x3e, 0x5c, 0x8e,
+ 0x1f, 0xea, 0xcd, 0x4a, 0x3b, 0xe3, 0x74, 0x7b, 0x04, 0x93, 0xe1, 0x20, 0xf1,
+ 0x3a, 0xe5, 0xe8, 0xf5, 0xa6, 0x16, 0x60, 0xde, 0x27, 0xe5, 0xed, 0xf9, 0xbb,
+ 0x19, 0x20, 0xc6, 0x0f, 0x7c, 0x23, 0xd2, 0xe5, 0x0f, 0x03, 0xd9, 0xda, 0xf2,
+ 0xdc, 0xde, 0xcc, 0x26, 0x0b, 0x27, 0xdf, 0x19, 0x05, 0xff, 0x49, 0xc9, 0x10,
+ 0x28, 0x0b, 0xdd, 0xdd, 0x02, 0x01, 0xff, 0xbe, 0xd4, 0x34, 0x09, 0x0a, 0xd8,
+ 0xe3, 0x00, 0xc6, 0xf6, 0x0a, 0x1f, 0xee, 0xd9, 0xe5, 0x2c, 0x43, 0xe5, 0x14,
+ 0xec, 0x05, 0x9c, 0x0a, 0xd3, 0xfc, 0x0a, 0xd7, 0x26, 0x3e, 0x24, 0xda, 0xd0,
+ 0xe2, 0x4f, 0x0c, 0xd8, 0xb7, 0x60, 0x9e, 0xf8, 0xf9, 0xe5, 0x4a, 0xd0, 0xd1,
+ 0x69, 0x00, 0x9d, 0xb9, 0xb9, 0x28, 0xec, 0xd9, 0x1c, 0x19, 0xda, 0x71, 0xab,
+ 0x33, 0x7e, 0x41, 0x05, 0xeb, 0x03, 0x0c, 0x5c, 0xf7, 0x14, 0xa1, 0xd5, 0x7f,
+ 0xe6, 0xd2, 0x2b, 0x5f, 0xfe, 0xc0, 0xc7, 0xf6, 0xe9, 0xdc, 0xf8, 0x18, 0xd6,
+ 0x62, 0xe2, 0xd6, 0x2d, 0xcc, 0xd7, 0xc3, 0x7f, 0xf5, 0xd1, 0x0c, 0xee, 0x57,
+ 0xde, 0xbd, 0x09, 0xff, 0xcc, 0xb0, 0xc6, 0xfd, 0xad, 0xf8, 0x4a, 0xf8, 0xf4,
+ 0xe2, 0xd4, 0x73, 0x39, 0x45, 0xf4, 0x17, 0x11, 0xf4, 0x03, 0xfd, 0x3b, 0x02,
+ 0xf9, 0x15, 0xde, 0x9b, 0xeb, 0xe6, 0xeb, 0xdd, 0xe1, 0x4a, 0x17, 0xd7, 0x0b,
+ 0x2b, 0xe3, 0x08, 0xfc, 0x04, 0x36, 0xfe, 0x55, 0xa9, 0x16, 0x0f, 0x18, 0xfb,
+ 0x0a, 0xf6, 0x07, 0x3d, 0xec, 0x1b, 0x19, 0xfa, 0xbe, 0xf3, 0x2d, 0x36, 0x01,
+ 0x9a, 0x09, 0x33, 0xc2, 0xe8, 0xc6, 0x28, 0xec, 0x32, 0xac, 0xde, 0x1c, 0xbe,
+ 0x29, 0xcd, 0xde, 0x2d, 0x2a, 0x43, 0xe2, 0x3f, 0xe7, 0xc9, 0xf1, 0xf1, 0xcf,
+ 0x32, 0x00, 0x0b, 0xea, 0x39, 0x27, 0xeb, 0xd8, 0xef, 0x06, 0x32, 0xd6, 0xcc,
+ 0x08, 0xe6, 0xe1, 0xe8, 0xc4, 0x11, 0xe7, 0x0c, 0x0d, 0x1d, 0xe0, 0x0b, 0xe0,
+ 0x1f, 0x12, 0xf3, 0x47, 0xf5, 0xc2, 0x22, 0xd0, 0xea, 0x0f, 0xbd, 0x76, 0xdf,
+ 0x31, 0x1e, 0x00, 0xca, 0x26, 0x5c, 0xc1, 0x1f, 0x1b, 0x34, 0x08, 0x22, 0x15,
+ 0x00, 0x41, 0x2b, 0xb8, 0xf6, 0x42, 0xf9, 0x2b, 0xee, 0xcb, 0x03, 0x6f, 0x1d,
+ 0xc2, 0xd5, 0x0c, 0xe0, 0x28, 0xc1, 0x26, 0xc1, 0x2a, 0x4a, 0xc9, 0x35, 0xfe,
+ 0x09, 0xe2, 0xdf, 0xff, 0xe6, 0x2a, 0x08, 0xde, 0x42, 0xf1, 0x1b, 0x2b, 0x2a,
+ 0x19, 0xc0, 0x23, 0x08, 0x10, 0xbd, 0xe1, 0x88, 0x16, 0xee, 0xfa, 0x21, 0xce,
+ 0x40, 0xd0, 0xc3, 0xf2, 0x46, 0xd5, 0x05, 0x13, 0xed, 0x0b, 0x00, 0x67, 0x76,
+ 0xa6, 0x67, 0xfc, 0x64, 0x10, 0x23, 0xdf, 0xf7, 0x11, 0x36, 0x11, 0x0c, 0x2e,
+ 0xf5, 0xd7, 0x3c, 0xf6, 0x49, 0xdd, 0x58, 0x6b, 0x11, 0x7f, 0x29, 0x7c, 0xbf,
+ 0xe3, 0x3d, 0x27, 0xff, 0xbb, 0x1f, 0x00, 0xbb, 0xff, 0xdd, 0xdf, 0x0b, 0x7f,
+ 0x0c, 0x0d, 0x44, 0xfe, 0x67, 0x39, 0xec, 0xb7, 0x53, 0x54, 0xee, 0xcc, 0xde,
+ 0x39, 0xe9, 0x14, 0xfe, 0x69, 0x3c, 0xc0, 0xc0, 0x33, 0x26, 0xf6, 0x17, 0x11,
+ 0xcc, 0xcd, 0x66, 0xdd, 0xdf, 0x3f, 0x15, 0xf3, 0x02, 0x44, 0x29, 0x1d, 0x2c,
+ 0xa1, 0xd0, 0xc6, 0x03, 0x00, 0x0e, 0x66, 0x39, 0x13, 0x32, 0x68, 0xe5, 0x30,
+ 0x01, 0xfd, 0x56, 0xce, 0xfd, 0x08, 0x01, 0x18, 0x1b, 0x20, 0x08, 0x11, 0x4c,
+ 0xb2, 0x32, 0x01, 0xda, 0x0a, 0x00, 0x07, 0xbd, 0x2c, 0xdf, 0xe6, 0x35, 0xc7,
+ 0x22, 0xbd, 0xe7, 0x1c, 0xec, 0xc7, 0xe3, 0x56, 0x18, 0xd5, 0xfc, 0xe4, 0xe4,
+ 0xde, 0x45, 0x1f, 0x42, 0x00, 0x22, 0xf5, 0xf8, 0x9a, 0x64, 0x5c, 0x16, 0xf2,
+ 0xe2, 0xe4, 0x22, 0xf1, 0x23, 0x0a, 0x00, 0x31, 0x45, 0x21, 0xb8, 0x95, 0x1b,
+ 0xdb, 0x42, 0xf3, 0x4c, 0xa7, 0xc8, 0x16, 0xe2, 0xf6, 0xfc, 0xfa, 0xe6, 0xf7,
+ 0xd2, 0xe8, 0x0f, 0xcd, 0xe8, 0xff, 0x02, 0x09, 0xec, 0xe7, 0xf3, 0xe7, 0xc1,
+ 0xbd, 0xf6, 0xf7, 0xe0, 0xbd, 0x33, 0xf1, 0xfa, 0xc4, 0x16, 0x3e, 0x38, 0x1c,
+ 0x06, 0x11, 0xef, 0xd5, 0x37, 0xd5, 0x0a, 0x29, 0xd2, 0x06, 0x22, 0x3d, 0x0d,
+ 0x08, 0x44, 0x1e, 0x10, 0x14, 0x0f, 0xd4, 0x0e, 0x28, 0xec, 0x41, 0x0f, 0xdc,
+ 0xf0, 0xec, 0x0d, 0x08, 0xe8, 0xb0, 0x62, 0x0e, 0x25, 0x00, 0x1a, 0x00, 0x24,
+ 0xcc, 0xd7, 0xfb, 0xe6, 0x22, 0xfe, 0xd0, 0x1c, 0xde, 0xf3, 0xf5, 0xf6, 0x14,
+ 0xda, 0xe3, 0xfb, 0x06, 0xe4, 0x0b, 0x1d, 0x21, 0x21, 0x22, 0x3d, 0xe4, 0x15,
+ 0xf5, 0x34, 0x29, 0xca, 0x1a, 0xeb, 0x0b, 0xe2, 0x1b, 0xeb, 0x21, 0xd9, 0x0a,
+ 0x1c, 0xf7, 0x12, 0xfd, 0xe8, 0xcb, 0x15, 0xe1, 0xd3, 0x81, 0x02, 0x56, 0xe8,
+ 0xd4, 0x06, 0xd3, 0xf1, 0xf7, 0x09, 0xf2, 0xd6, 0xb8, 0x12, 0x43, 0x9b, 0x0d,
+ 0xf3, 0x04, 0x16, 0xca, 0xaf, 0xf8, 0x44, 0x23, 0x35, 0xf8, 0xe8, 0xea, 0x3d,
+ 0x00, 0x07, 0xf7, 0xe5, 0xed, 0xd4, 0xf7, 0xf8, 0x13, 0x0f, 0x2f, 0x0e, 0xd8,
+ 0x14, 0xe7, 0x0d, 0xd6, 0x2f, 0x3d, 0x37, 0xe8, 0xec, 0xe8, 0xb2, 0x0e, 0xf5,
+ 0x24, 0xe0, 0x07, 0x08, 0xe8, 0x18, 0x01, 0x10, 0x51, 0x23, 0xde, 0xe8, 0xf9,
+ 0x02, 0x12, 0x69, 0x05, 0x96, 0xdd, 0xda, 0xdf, 0xe2, 0x1e, 0xc4, 0xd3, 0xf1,
+ 0xe0, 0xd9, 0x7f, 0x23, 0x07, 0xf2, 0x14, 0x16, 0x28, 0x3d, 0x28, 0xff, 0x01,
+ 0x19, 0xef, 0x32, 0xf2, 0xd8, 0xde, 0x30, 0xd3, 0x08, 0x2f, 0xf2, 0xd6, 0x2f,
+ 0xdc, 0xfa, 0xef, 0x05, 0x18, 0xcc, 0xf1, 0x09, 0x43, 0x0f, 0x38, 0xfe, 0xe3,
+ 0xd5, 0xec, 0x07, 0x11, 0x0b, 0x1c, 0xed, 0x07, 0x1d, 0xdf, 0x07, 0x4d, 0xc9,
+ 0x21, 0xf7, 0xad, 0x4f, 0x05, 0x20, 0x0f, 0x25, 0xe5, 0xee, 0xf4, 0x1b, 0xe4,
+ 0x27, 0x5a, 0xd0, 0x09, 0xe0, 0xe5, 0xfd, 0xb3, 0xf8, 0x02, 0x47, 0xad, 0xf7,
+ 0xd2, 0x55, 0x28, 0x26, 0xd5, 0x3a, 0x12, 0xd7, 0xd0, 0x02, 0x00, 0x51, 0x81,
+ 0xec, 0xe5, 0xc4, 0xe4, 0xf8, 0x2f, 0x3c, 0xc9, 0xf7, 0x2b, 0xf9, 0xed, 0x30,
+ 0xf1, 0x6b, 0x06, 0x47, 0xee, 0xbc, 0x27, 0xc5, 0x0e, 0x1e, 0xf9, 0x6c, 0x14,
+ 0xf6, 0xee, 0x00, 0xd1, 0xde, 0x27, 0xf7, 0x17, 0xec, 0xee, 0x17, 0xfc, 0xe8,
+ 0xdf, 0xd0, 0xf6, 0xe6, 0x17, 0x0d, 0x09, 0xf5, 0xc5, 0xce, 0xe5, 0xd6, 0xc5,
+ 0xf3, 0x53, 0xff, 0xd4, 0x13, 0xb4, 0x0b, 0xd4, 0xec, 0xd4, 0x5d, 0x11, 0xe6,
+ 0xd8, 0x1b, 0xe8, 0xda, 0xab, 0xa3, 0xbb, 0x51, 0x1d, 0xf8, 0x1e, 0xd2, 0x13,
+ 0xca, 0x01, 0xea, 0xcc, 0xfc, 0xe8, 0x0d, 0xed, 0xa6, 0x16, 0x03, 0x2a, 0xf2,
+ 0xe1, 0x19, 0x15, 0xe9, 0x0a, 0x0d, 0xe7, 0x1e, 0x20, 0x22, 0xf7, 0xd2, 0x5f,
+ 0x17, 0x41, 0x07, 0x57, 0xdc, 0xf0, 0xe9, 0xfe, 0xbb, 0xef, 0x0e, 0x26, 0x81,
+ 0x25, 0x94, 0x95, 0xff, 0x0f, 0xe5, 0xfe, 0xe2, 0xef, 0xf6, 0x02, 0xb2, 0x10,
+ 0xc8, 0x4e, 0x6f, 0xe0, 0xec, 0xf9, 0x5c, 0x47, 0xe7, 0xa6, 0x45, 0xd7, 0xfb,
+ 0xfb, 0xc9, 0xf7, 0x1a, 0xd3, 0x17, 0x06, 0xfd, 0xcd, 0xf9, 0x02, 0xf6, 0xed,
+ 0xa7, 0x15, 0xea, 0xf2, 0x2c, 0xf1, 0xf4, 0x0c, 0x20, 0xf7, 0x38, 0xae, 0x09,
+ 0xf8, 0x0c, 0x30, 0xe7, 0x45, 0x38, 0x09, 0x16, 0xf2, 0x15, 0x24, 0xa3, 0x0c,
+ 0x13, 0x42, 0x0a, 0xeb, 0xfd, 0xf1, 0x0f, 0xdd, 0xdf, 0xc7, 0xe2, 0xb4, 0x08,
+ 0x46, 0x6e, 0xd8, 0x0a, 0xeb, 0xf5, 0x1e, 0xf5, 0x38, 0x04, 0x20, 0x19, 0xdd,
+ 0xf6, 0xd5, 0xfb, 0x8a, 0xc8, 0x1d, 0xd9, 0xa5, 0xdf, 0xf3, 0xf5, 0xcc, 0xc5,
+ 0x11, 0xba, 0xa1, 0x10, 0x36, 0xe4, 0xf1, 0xe1, 0xd2, 0x1b, 0x28, 0x93, 0xd2,
+ 0x50, 0x15, 0x6c, 0x10, 0x2e, 0x5a, 0x12, 0xc4, 0xe9, 0x2c, 0xf6, 0xff, 0xc4,
+ 0x3f, 0x10, 0xc6, 0xd1, 0x07, 0x0a, 0x15, 0xf7, 0x15, 0xf9, 0x07, 0xb6, 0x16,
+ 0xd8, 0x02, 0xe9, 0x45, 0xd0, 0x30, 0xbf, 0x1f, 0x39, 0x9f, 0xda, 0xf2, 0x14,
+ 0xe9, 0xe9, 0x1b, 0xf8, 0x60, 0xc7, 0xce, 0xe9, 0xce, 0x3d, 0x14, 0xc0, 0xad,
+ 0xd2, 0xa3, 0x2c, 0x4d, 0xd6, 0xf6, 0xcc, 0xf8, 0x11, 0x2d, 0x28, 0x26, 0x01,
+ 0xdd, 0xcd, 0x7f, 0xc9, 0xfe, 0xf0, 0xf6, 0xff, 0x0d, 0x4a, 0xd5, 0x1d, 0x2a,
+ 0x14, 0xe4, 0xda, 0xa3, 0xdc, 0xe0, 0xf8, 0xe7, 0xd1, 0xee, 0x2d, 0x3a, 0x09,
+ 0xbe, 0x52, 0x1b, 0xfa, 0x45, 0xfb, 0x2a, 0xae, 0x1f, 0x35, 0x1d, 0xf7, 0x41,
+ 0x08, 0xe7, 0x1d, 0x08, 0xd9, 0x04, 0xe0, 0xe3, 0x1f, 0xfb, 0xe8, 0x22, 0xfa,
+ 0x03, 0xc4, 0x28, 0xa5, 0xee, 0x26, 0x4c, 0x21, 0x36, 0xea, 0x2c, 0x28, 0xee,
+ 0x1a, 0x0a, 0xd4, 0xea, 0xdc, 0x36, 0x1d, 0xfe, 0xe8, 0xf7, 0xcd, 0xf5, 0xbf,
+ 0x0b, 0xba, 0xe6, 0xcb, 0xd7, 0x13, 0xee, 0xff, 0xe8, 0xef, 0xf3, 0x0e, 0x0d,
+ 0xfd, 0xf8, 0xd5, 0x1a, 0x2a, 0x05, 0xf6, 0x1f, 0xa4, 0xde, 0x02, 0x36, 0xfb,
+ 0xbe, 0x04, 0x23, 0xe7, 0x24, 0xca, 0x11, 0x50, 0x11, 0x18, 0x65, 0x11, 0xdb,
+ 0xdb, 0x5c, 0xf6, 0xe0, 0xd3, 0xd3, 0x07, 0x0d, 0x04, 0x01, 0x31, 0x10, 0x06,
+ 0xf8, 0xfa, 0xef, 0xbd, 0x29, 0x05, 0xea, 0xe0, 0xef, 0x20, 0x10, 0x51, 0xd4,
+ 0x43, 0x05, 0x48, 0x2a, 0xfd, 0x81, 0xfa, 0x2f, 0x23, 0xfb, 0x0f, 0xd0, 0x04,
+ 0xee, 0xbf, 0x0a, 0xf0, 0x16, 0xf5, 0x18, 0xf3, 0xee, 0xc8, 0xdc, 0x20, 0x12,
+ 0x40, 0xba, 0x1a, 0xf3, 0xfe, 0x3d, 0xe2, 0xdc, 0xdf, 0xec, 0x00, 0xfc, 0x08,
+ 0x0e, 0x0e, 0xc4, 0x24, 0xc4, 0x03, 0x24, 0x3f, 0x11, 0x60, 0xcd, 0xd0, 0xbf,
+ 0xfa, 0xda, 0xac, 0xe9, 0x08, 0xed, 0x0d, 0x19, 0xd8, 0x3b, 0xe1, 0xfe, 0x36,
+ 0x32, 0x16, 0xf3, 0x26, 0xd7, 0x2f, 0x12, 0x08, 0xd9, 0xf8, 0xf6, 0x0a, 0x11,
+ 0xbe, 0xfd, 0xfd, 0xdd, 0xf8, 0xc9, 0x9b, 0x6e, 0xfa, 0xe8, 0x04, 0x14, 0x36,
+ 0x0f, 0xcf, 0xf7, 0xf3, 0x42, 0x07, 0x13, 0xcb, 0xf8, 0xdb, 0x1d, 0x16, 0x1b,
+ 0xc7, 0xf7, 0xbe, 0x2b, 0xef, 0x25, 0x03, 0xf4, 0xcf, 0xd7, 0xf9, 0x06, 0x2c,
+ 0x22, 0x08, 0x0a, 0x14, 0x16, 0x1c, 0x47, 0xbf, 0xaf, 0x3c, 0x26, 0x3b, 0xe6,
+ 0xde, 0xfc, 0x12, 0x1f, 0x11, 0x01, 0xc6, 0x1c, 0x35, 0x51, 0x1b, 0x22, 0xfd,
+ 0xfc, 0x1a, 0xf9, 0xf8, 0x18, 0xc9, 0xfb, 0x81, 0x08, 0xd1, 0xf2, 0xc7, 0x2c,
+ 0x2b, 0x1f, 0xc7, 0x15, 0x0e, 0x26, 0xf1, 0xfc, 0xf5, 0xe1, 0x0e, 0xf3, 0xfe,
+ 0x53, 0x01, 0x13, 0x02, 0xdb, 0x26, 0xf1, 0x03, 0xfa, 0x06, 0xf1, 0xd3, 0x03,
+ 0xde, 0xe6, 0x28, 0xb6, 0x1d, 0xed, 0xfa, 0xf6, 0xfa, 0xcc, 0xea, 0x13, 0xe6,
+ 0xe5, 0x0c, 0x2e, 0xfb, 0xf3, 0x0e, 0x25, 0x49, 0x08, 0x08, 0x08, 0x2d, 0xc9,
+ 0xe8, 0x19, 0x0b, 0xe4, 0x27, 0xec, 0xdd, 0x14, 0x15, 0x1c, 0x2a, 0xed, 0xe0,
+ 0x26, 0x00, 0x45, 0x15, 0x2a, 0x30, 0xeb, 0x31, 0xf0, 0x01, 0x16, 0xcf, 0x1d,
+ 0xe1, 0x16, 0x0e, 0x1d, 0xfb, 0xf1, 0x3f, 0x07, 0x1f, 0x26, 0x13, 0xf9, 0x81,
+ 0xfe, 0xef, 0xf5, 0x1b, 0x08, 0x02, 0xd8, 0x42, 0xe7, 0xbd, 0x0f, 0x25, 0x5a,
+ 0x18, 0x0d, 0x00, 0x03, 0x14, 0xd7, 0x3b, 0x36, 0xe3, 0x42, 0x17, 0xfe, 0x11,
+ 0xd5, 0x02, 0x11, 0xb5, 0x1e, 0x14, 0x19, 0xf8, 0x07, 0x34, 0xc2, 0xd7, 0xd7,
+ 0xe3, 0x27, 0x12, 0xcc, 0xd1, 0xef, 0x13, 0xdb, 0xf7, 0x06, 0xf9, 0x17, 0x0c,
+ 0xeb, 0x5d, 0x3c, 0x1b, 0x0b, 0x3e, 0x28, 0x01, 0x1e, 0x20, 0xcd, 0xf7, 0xcf,
+ 0xd0, 0x39, 0xd3, 0xd7, 0x00, 0xea, 0xda, 0xe8, 0x2c, 0xf1, 0xf8, 0x81, 0xf8,
+ 0xc4, 0x1c, 0xeb, 0x2a, 0xbf, 0xd9, 0xc0, 0xed, 0xe1, 0x01, 0x04, 0xab, 0xdd,
+ 0xf3, 0x1a, 0xe4, 0x3b, 0xdd, 0x05, 0x3c, 0xf5, 0xf9, 0x19, 0x13, 0xae, 0xcc,
+ 0xcf, 0x45, 0xd4, 0x21, 0x0c, 0xa7, 0xa9, 0x46, 0xe1, 0xcf, 0x60, 0x28, 0xe6,
+ 0xf7, 0xe9, 0x45, 0xec, 0x10, 0xc5, 0x43, 0xea, 0x10, 0x08, 0x44, 0xd9, 0xe8,
+ 0xe4, 0xff, 0x34, 0x04, 0xcb, 0xc7, 0x05, 0x1c, 0x1c, 0xd5, 0x0e, 0x0a, 0xf3,
+ 0x06, 0xd4, 0xe4, 0x50, 0x0e, 0x2c, 0xfe, 0x4b, 0x91, 0x2e, 0xe8, 0x34, 0xf9,
+ 0x16, 0xe4, 0xf2, 0xfa, 0x4c, 0x00, 0xbf, 0x09, 0x08, 0xe9, 0x04, 0xf5, 0xb0,
+ 0x45, 0x1b, 0x1a, 0xef, 0x9e, 0x49, 0x38, 0xf2, 0x02, 0xb6, 0x01, 0xb5, 0xe2,
+ 0xe1, 0x0b, 0xab, 0x33, 0x7f, 0x0a, 0xec, 0x04, 0xf8, 0x01, 0x0e, 0x35, 0x4a,
+ 0xd5, 0x4f, 0xcb, 0xd9, 0xbe, 0xea, 0xec, 0x0f, 0x14, 0xb3, 0xfb, 0x0b, 0xfc,
+ 0x32, 0x1c, 0x0b, 0xf1, 0xe9, 0x05, 0x05, 0xcb, 0xe7, 0x15, 0xd5, 0x15, 0x0b,
+ 0x11, 0xf0, 0xd6, 0xec, 0x02, 0x0f, 0x3f, 0xf0, 0x29, 0x19, 0xd2, 0xcb, 0xb9,
+ 0x0b, 0x4e, 0x34, 0x2a, 0x18, 0x0c, 0xca, 0xe4, 0x00, 0x23, 0xec, 0xfe, 0x2e,
+ 0xc1, 0x48, 0x03, 0xfd, 0xe3, 0xef, 0x12, 0x37, 0xff, 0xf5, 0xdd, 0x2a, 0x03,
+ 0x12, 0xec, 0xed, 0xe4, 0x20, 0x06, 0x33, 0xb5, 0x49, 0x21, 0xf7, 0xf8, 0xe8,
+ 0x1a, 0x68, 0xe9, 0xd3, 0x5c, 0x27, 0xc4, 0x37, 0xf2, 0xc7, 0xff, 0xd1, 0x21,
+ 0x2c, 0x04, 0x55, 0xf0, 0x03, 0xc7, 0x24, 0xe3, 0xd3, 0xc3, 0xcf, 0x2f, 0x0c,
+ 0xe7, 0xc1, 0xc7, 0x0b, 0x81, 0x39, 0x1f, 0xfd, 0x28, 0xf0, 0xe0, 0x15, 0x0c,
+ 0xf2, 0xfb, 0x03, 0x3d, 0x0b, 0xc7, 0xea, 0xfc, 0xe1, 0xee, 0x3d, 0x14, 0x30,
+ 0xba, 0xfc, 0x28, 0xfd, 0x30, 0x2c, 0xfb, 0x16, 0xe9, 0x3e, 0xd1, 0xd1, 0x05,
+ 0xe6, 0xc2, 0xde, 0x09, 0xdb, 0xee, 0xac, 0xe7, 0xec, 0x5f, 0x21, 0xe1, 0x12,
+ 0x12, 0xf4, 0x24, 0x14, 0x09, 0x13, 0x03, 0xfa, 0xf5, 0xe1, 0xff, 0x2d, 0xc0,
+ 0x09, 0x5a, 0xcf, 0xd2, 0x04, 0xfc, 0x42, 0xbd, 0xe2, 0x09, 0xf3, 0x02, 0xd6,
+ 0x2b, 0x17, 0x21, 0xf4, 0xa0, 0xc9, 0xc4, 0xf2, 0x35, 0x01, 0xc8, 0x5b, 0xb5,
+ 0xe2, 0x47, 0x0b, 0x16, 0xc4, 0xa6, 0xfe, 0xe1, 0x05, 0xfa, 0xce, 0xd0, 0xf3,
+ 0x33, 0x23, 0x03, 0xc9, 0xea, 0xd2, 0x1a, 0x04, 0x16, 0xd6, 0xbe, 0x41, 0xd8,
+ 0xe1, 0x18, 0xae, 0xc7, 0xed, 0x03, 0xe7, 0xd7, 0x0b, 0x17, 0x0b, 0xf2, 0x1b,
+ 0xb8, 0x10, 0x19, 0xd8, 0xb0, 0x30, 0xcb, 0xfa, 0xfc, 0xef, 0xbf, 0xfa, 0x39,
+ 0x30, 0x27, 0x1e, 0x24, 0xd9, 0x2b, 0xf4, 0xfe, 0x07, 0x14, 0x1c, 0x08, 0xec,
+ 0xd1, 0xdd, 0x0f, 0xd5, 0x10, 0xf2, 0xec, 0x3b, 0xc0, 0x41, 0x0c, 0x3b, 0xd9,
+ 0x9e, 0xd4, 0x16, 0xe4, 0x0f, 0x25, 0x31, 0x10, 0xe1, 0xcd, 0xe2, 0xf1, 0xdf,
+ 0xe2, 0x67, 0xe3, 0xbb, 0x31, 0xea, 0x03, 0x0d, 0x1f, 0xd5, 0xbd, 0xea, 0xf3,
+ 0xca, 0x13, 0x03, 0x07, 0x0d, 0x09, 0x27, 0xd0, 0x7f, 0xf9, 0x5b, 0x33, 0x00,
+ 0xf3, 0xff, 0xfc, 0xf7, 0xb8, 0x24, 0x0f, 0xe3, 0xde, 0xfb, 0xf0, 0x0e, 0x02,
+ 0x10, 0xf1, 0xef, 0x18, 0xde, 0xea, 0xff, 0xd1, 0xe7, 0x0b, 0x4c, 0xaf, 0xf6,
+ 0xe3, 0x11, 0x36, 0x33, 0x42, 0x03, 0xfa, 0xfe, 0x41, 0x0e, 0x4f, 0x29, 0x1f,
+ 0xfa, 0x15, 0xd6, 0x2b, 0xd0, 0xf8, 0x03, 0xf0, 0xdb, 0xc6, 0xd7, 0xf8, 0x0f,
+ 0xf5, 0x39, 0xfc, 0x07, 0x0c, 0xec, 0xf4, 0xf0, 0xfc, 0xb3, 0x05, 0xf9, 0xd8,
+ 0xe1, 0x29, 0xdb, 0x31, 0x03, 0xf0, 0x00, 0x03, 0xdb, 0x22, 0xe0, 0xfe, 0xed,
+ 0xfc, 0xe6, 0xe9, 0xfc, 0x0c, 0xdf, 0x1a, 0x2d, 0x2f, 0x07, 0xe3, 0xd4, 0x06,
+ 0x10, 0xfe, 0xee, 0x2a, 0x21, 0xcc, 0xf6, 0xf5, 0xd4, 0xe0, 0xf1, 0x01, 0x02,
+ 0xf1, 0x25, 0xeb, 0xd3, 0xf6, 0x32, 0xe8, 0xe8, 0xf4, 0x13, 0x1c, 0xa7, 0xf3,
+ 0x1b, 0x21, 0xfd, 0xe4, 0x09, 0xdd, 0x04, 0xe9, 0x27, 0xf2, 0xed, 0xee, 0xea,
+ 0xef, 0x11, 0xda, 0xf7, 0xf3, 0x26, 0x81, 0xf2, 0xe2, 0x0d, 0x0c, 0xde, 0x0e,
+ 0x10, 0x00, 0xd3, 0xf1, 0xe4, 0xe7, 0x0c, 0x23, 0x00, 0xfa, 0x27, 0xff, 0x33,
+ 0xfa, 0x17, 0x11, 0x12, 0xf7, 0x37, 0x3a, 0xd6, 0xc2, 0x0f, 0xd5, 0x0d, 0x0f,
+ 0x06, 0x28, 0xd4, 0xfc, 0x2a, 0x64, 0xc5, 0xf8, 0xf1, 0xc8, 0xe5, 0x2f, 0x18,
+ 0x05, 0x46, 0xbe, 0x12, 0xc1, 0x2a, 0xbc, 0xf8, 0x26, 0x61, 0x2c, 0xeb, 0x0b,
+ 0xf3, 0x29, 0x38, 0x4f, 0xfd, 0x17, 0xd8, 0xc2, 0x0f, 0xff, 0xfd, 0xe1, 0x03,
+ 0xed, 0xf1, 0x20, 0xfa, 0xdf, 0xd7, 0xe6, 0xca, 0x13, 0xcf, 0xd4, 0x09, 0x17,
+ 0xf6, 0xea, 0xe3, 0x02, 0x21, 0x27, 0x08, 0xca, 0xe7, 0xe9, 0x29, 0x13, 0xe6,
+ 0x47, 0xdf, 0xfe, 0xf9, 0x16, 0x5c, 0xd6, 0x33, 0xce, 0x0e, 0x3d, 0x2e, 0xd4,
+ 0x01, 0x11, 0xc9, 0xbe, 0xe6, 0xf2, 0xd1, 0xe0, 0xfd, 0x2e, 0xe0, 0xfc, 0x60,
+ 0x3e, 0x33, 0x02, 0x52, 0x0f, 0x0c, 0xe9, 0x2b, 0x7f, 0x25, 0xff, 0x0d, 0xf0,
+ 0xf2, 0xc0, 0xf2, 0xdc, 0xd7, 0xf1, 0xf0, 0xf1, 0xc1, 0xd9, 0x0d, 0x38, 0x1e,
+ 0x16, 0xf0, 0x0c, 0x02, 0x0a, 0x5a, 0xea, 0xab, 0xfb, 0x1e, 0x0f, 0xec, 0xf3,
+ 0xba, 0x1d, 0xed, 0xf3, 0xe4, 0xf3, 0xf0, 0x1e, 0xcb, 0x38, 0x00, 0xae, 0xf4,
+ 0x56, 0x56, 0x37, 0x08, 0xab, 0xfe, 0x1d, 0xef, 0x25, 0x06, 0xdc, 0x14, 0xef,
+ 0x0b, 0xc9, 0xf8, 0xf2, 0x02, 0xef, 0x0a, 0x35, 0x34, 0xe8, 0x93, 0xe8, 0xf7,
+ 0xf7, 0x69, 0xf7, 0x05, 0x5b, 0x0b, 0x43, 0xf0, 0xe4, 0x7f, 0x16, 0xeb, 0x15,
+ 0xdf, 0xa5, 0x09, 0x4d, 0x31, 0xea, 0xf1, 0x13, 0xe0, 0xe7, 0x0f, 0xdc, 0x2c,
+ 0xa2, 0xfc, 0x0a, 0x57, 0x4b, 0x1e, 0x61, 0x25, 0xd2, 0x39, 0x0a, 0x0e, 0xac,
+ 0xe5, 0x09, 0xfe, 0x76, 0xe4, 0xc8, 0xd8, 0x4d, 0xa7, 0xfb, 0xf6, 0xdc, 0x04,
+ 0xfa, 0x19, 0x05, 0x94, 0xc8, 0x28, 0x1f, 0xcc, 0xfb, 0xad, 0x0b, 0x22, 0xf5,
+ 0xdb, 0x26, 0x13, 0x0d, 0x0a, 0xf4, 0x09, 0xe1, 0x0b, 0x17, 0x11, 0x48, 0x1c,
+ 0xd1, 0xbb, 0xe3, 0xdc, 0x73, 0xe7, 0xe0, 0xed, 0x35, 0xe0, 0x09, 0x14, 0xdb,
+ 0x0d, 0xfb, 0xb4, 0xea, 0x09, 0xe1, 0xf1, 0x20, 0x00, 0x2d, 0xd5, 0xf9, 0xd8,
+ 0xe3, 0xf6, 0xc7, 0xa3, 0x40, 0xcc, 0xdf, 0x0c, 0x13, 0x02, 0xcf, 0xe3, 0x27,
+ 0x19, 0x00, 0x2c, 0xd3, 0x31, 0x15, 0x00, 0xdf, 0xc6, 0x26, 0xde, 0x79, 0xd6,
+ 0x0e, 0xff, 0x1e, 0xf3, 0xdc, 0x44, 0xf2, 0x13, 0xf2, 0x16, 0xf8, 0x17, 0xb7,
+ 0xbe, 0xeb, 0xd6, 0x1d, 0xaf, 0xe2, 0xc5, 0xa2, 0x39, 0x24, 0xf3, 0xf2, 0x5b,
+ 0xe4, 0x00, 0x9c, 0xd5, 0xe9, 0x1d, 0x04, 0xf6, 0x2a, 0x0d, 0x06, 0xf7, 0x33,
+ 0xdd, 0x1a, 0x16, 0xfa, 0xae, 0xe2, 0xf4, 0x23, 0x7f, 0x0b, 0x40, 0xe7, 0x1d,
+ 0x0c, 0xee, 0xf7, 0xe5, 0xd3, 0xfc, 0xe0, 0xff, 0xda, 0xd2, 0x07, 0xf9, 0x0b,
+ 0x0f, 0xde, 0xce, 0x20, 0x0c, 0x0a, 0x3a, 0xfe, 0x0d, 0x2b, 0x62, 0xda, 0x1a,
+ 0xda, 0x0b, 0x21, 0xff, 0xe8, 0xfe, 0xeb, 0xf4, 0x19, 0x20, 0x2b, 0x0d, 0x0a,
+ 0x20, 0xca, 0x0f, 0x3b, 0xfc, 0x0d, 0x1b, 0x7f, 0xe6, 0x1c, 0xdd, 0xb4, 0x00,
+ 0x18, 0x48, 0xe5, 0x0f, 0x1e, 0xfa, 0x1d, 0xec, 0xfa, 0x1a, 0x03, 0xea, 0x10,
+ 0xe4, 0xdc, 0xd5, 0xe2, 0xec, 0x1f, 0xea, 0xeb, 0xfa, 0xf0, 0xff, 0xe4, 0xc6,
+ 0x10, 0x21, 0x06, 0xf5, 0x1f, 0xe2, 0x01, 0x23, 0x11, 0x0a, 0x0e, 0xfe, 0xf4,
+ 0x0a, 0xee, 0xd8, 0xfb, 0x0b, 0x11, 0xf6, 0xfc, 0xe2, 0xd0, 0xb0, 0xcf, 0x1d,
+ 0xd8, 0xc2, 0x10, 0xdd, 0xb9, 0xca, 0xef, 0x16, 0x08, 0xe3, 0x27, 0xfa, 0x44,
+ 0x28, 0x00, 0xe8, 0x20, 0x2b, 0x49, 0xed, 0x20, 0xf5, 0xf1, 0xd8, 0x50, 0xdd,
+ 0xf8, 0x15, 0xed, 0x07, 0x21, 0xdb, 0xfb, 0xf2, 0xff, 0x00, 0xf5, 0xf3, 0xf2,
+ 0x0f, 0xe4, 0xd8, 0x03, 0xd8, 0x04, 0xe4, 0x05, 0xc9, 0x2d, 0xd7, 0x04, 0x1e,
+ 0x22, 0xea, 0x13, 0x0f, 0xef, 0xd2, 0xf0, 0xfd, 0xe1, 0xda, 0xd6, 0x06, 0x22,
+ 0xf6, 0xe9, 0x2d, 0xd8, 0x01, 0xf2, 0x1f, 0x3c, 0xe6, 0xf0, 0xf0, 0x14, 0xce,
+ 0x0e, 0xe0, 0x14, 0xf0, 0xf3, 0x2c, 0x01, 0xe7, 0x23, 0xd1, 0x22, 0xde, 0x7f,
+ 0xcb, 0xed, 0xfc, 0x16, 0xda, 0xca, 0x03, 0x00, 0xf1, 0xd9, 0xe0, 0xf7, 0xca,
+ 0xd8, 0xf6, 0xf9, 0x01, 0x21, 0x1d, 0xae, 0xdd, 0x03, 0xee, 0xfd, 0x03, 0x09,
+ 0x03, 0x09, 0xd7, 0xe0, 0x27, 0xdf, 0x10, 0x5a, 0x10, 0x26, 0xe1, 0xf7, 0xf6,
+ 0x2b, 0x0d, 0xfe, 0x20, 0xd1, 0x01, 0x16, 0x2e, 0xc7, 0x0e, 0xfc, 0x10, 0x29,
+ 0x18, 0xdf, 0xfc, 0x1a, 0xf4, 0xe1, 0xf4, 0xd6, 0x24, 0xc8, 0xcc, 0x16, 0x3a,
+ 0xec, 0x14, 0x04, 0x55, 0xfe, 0xf1, 0x1a, 0xf9, 0x10, 0xf8, 0x0d, 0x14, 0xf5,
+ 0x2b, 0x15, 0x04, 0x17, 0xfc, 0x1d, 0xe3, 0xe9, 0xe0, 0xe6, 0xf8, 0xfe, 0xf6,
+ 0xc0, 0x20, 0x09, 0x21, 0x1e, 0xe2, 0x0d, 0x2a, 0x21, 0x96, 0xcc, 0xfc, 0xb5,
+ 0xf3, 0x46, 0xc7, 0xee, 0xe0, 0x4a, 0xf9, 0x2e, 0x1f, 0x2b, 0x07, 0x07, 0xb9,
+ 0xab, 0xe0, 0x08, 0xf7, 0x1b, 0x08, 0x8f, 0x20, 0x2c, 0x1f, 0xb3, 0xf3, 0x18,
+ 0xde, 0xe5, 0x0b, 0x19, 0xfe, 0xe5, 0xe7, 0x2f, 0xcb, 0xec, 0xac, 0xe1, 0x18,
+ 0x21, 0xd4, 0x0b, 0xa1, 0xce, 0xcb, 0xfd, 0x14, 0x2e, 0x29, 0x14, 0x4a, 0xd9,
+ 0x59, 0x22, 0x05, 0x02, 0xd8, 0x19, 0xf0, 0xbf, 0xf6, 0xcd, 0xf0, 0xe1, 0x15,
+ 0x26, 0xe7, 0xf6, 0xa2, 0x3b, 0xdc, 0x12, 0x58, 0x21, 0xee, 0xf8, 0xe2, 0xe5,
+ 0x09, 0xf2, 0x1f, 0x0a, 0xda, 0xd6, 0x32, 0xde, 0x28, 0x23, 0xfb, 0xac, 0x6f,
+ 0x13, 0xe5, 0xe6, 0xf7, 0x38, 0x27, 0xd7, 0x02, 0xdd, 0x17, 0xaf, 0x2f, 0xa8,
+ 0xfd, 0xed, 0x29, 0xe9, 0x3c, 0x7f, 0xef, 0xfb, 0x8f, 0xda, 0xe5, 0x01, 0xef,
+ 0xfd, 0x12, 0xed, 0xc4, 0x13, 0xa5, 0x45, 0xbb, 0xf7, 0x0f, 0xb6, 0xfe, 0xdd,
+ 0x04, 0xd2, 0x03, 0x19, 0x1b, 0xf6, 0x07, 0x2c, 0x14, 0x0a, 0x3b, 0xf3, 0xca,
+ 0x79, 0x12, 0x18, 0x56, 0xe9, 0x3a, 0xe2, 0x39, 0xed, 0xff, 0x6f, 0x1b, 0x13,
+ 0x37, 0x3a, 0x13, 0xd6, 0xb0, 0xf9, 0x31, 0x5d, 0xec, 0x21, 0xf8, 0xcf, 0xbe,
+ 0xf5, 0x31, 0xe9, 0xf6, 0xc0, 0xf0, 0x25, 0xe9, 0x4c, 0xcf, 0x0b, 0xf3, 0x22,
+ 0x1c, 0x0b, 0x05, 0x7f, 0xf1, 0x0c, 0x23, 0x22, 0x64, 0xf7, 0xc9, 0x16, 0x14,
+ 0x1c, 0x1b, 0xf6, 0xe2, 0x0a, 0xe2, 0xeb, 0x3f, 0x21, 0x22, 0x04, 0x21, 0xf2,
+ 0x71, 0x10, 0xf5, 0xef, 0x0b, 0xd8, 0xf0, 0xd5, 0xe4, 0x1f, 0x38, 0x4f, 0x07,
+ 0x0a, 0x1e, 0x2a, 0x3c, 0xe6, 0x1d, 0xf2, 0x20, 0x17, 0x09, 0xf2, 0x27, 0x07,
+ 0xe0, 0x1e, 0x8f, 0x3e, 0x1f, 0x22, 0x03, 0x1a, 0x2d, 0xe9, 0xf4, 0xe6, 0xe3,
+ 0xe6, 0xf3, 0xf9, 0xc3, 0x00, 0xfa, 0x26, 0xd6, 0xff, 0x03, 0x2a, 0xca, 0xd5,
+ 0x7f, 0xe1, 0x01, 0x1c, 0x10, 0xa3, 0xdf, 0x1e, 0x3f, 0x24, 0xfe, 0x0c, 0x38,
+ 0x21, 0x71, 0x0b, 0xb0, 0x08, 0xc6, 0xb5, 0xeb, 0x43, 0xc0, 0xe8, 0x1c, 0x15,
+ 0x0c, 0xda, 0x2d, 0x0a, 0xf3, 0xf3, 0x51, 0xb8, 0xea, 0xf7, 0xf8, 0x3a, 0x6f,
+ 0xe8, 0x01, 0xdc, 0xf2, 0xea, 0xc3, 0x1c, 0xbc, 0xee, 0xf7, 0xf3, 0x34, 0x4c,
+ 0x21, 0x3a, 0x01, 0xd3, 0x05, 0xd2, 0xd1, 0xfe, 0xf6, 0xe7, 0x24, 0xd1, 0x07,
+ 0x44, 0x37, 0xf7, 0x0c, 0xf5, 0xa8, 0x2c, 0x22, 0x19, 0xf4, 0xcc, 0xdb, 0x4b,
+ 0x02, 0x24, 0xee, 0xa9, 0xbc, 0xad, 0xf4, 0x6e, 0xfe, 0xe8, 0xd7, 0xd3, 0xf3,
+ 0xc2, 0x30, 0xe3, 0x1c, 0x15, 0xe5, 0x08, 0xdb, 0xf5, 0xd8, 0x4e, 0x0d, 0xe2,
+ 0xb8, 0x0d, 0xc5, 0xe6, 0x19, 0x08, 0xd0, 0x28, 0x27, 0x34, 0x31, 0xe5, 0x26,
+ 0xfe, 0x1d, 0x3f, 0xdb, 0xb0, 0x19, 0xe0, 0xfe, 0x22, 0xd7, 0xdf, 0x2b, 0x0a,
+ 0x07, 0x09, 0x32, 0xe6, 0xe6, 0xee, 0x1d, 0xea, 0xda, 0x4e, 0x7f, 0x59, 0x2a,
+ 0xd8, 0xee, 0x06, 0x0e, 0xed, 0x1c, 0x30, 0xfe, 0x2c, 0x25, 0xf7, 0xc5, 0xfb,
+ 0x48, 0xe5, 0xd0, 0xe4, 0xd0, 0xe1, 0x27, 0xfc, 0x12, 0x14, 0xd2, 0x0d, 0xb9,
+ 0x00, 0xc0, 0xfb, 0x1b, 0xd5, 0x06, 0xfb, 0x16, 0xd3, 0xe4, 0x28, 0x1a, 0x2e,
+ 0xd4, 0x19, 0x0e, 0xf2, 0x10, 0xe2, 0xfa, 0x08, 0x23, 0xf4, 0xfd, 0x14, 0xd3,
+ 0xe1, 0xbe, 0x1d, 0x16, 0x39, 0x16, 0x1c, 0x09, 0xfb, 0xe4, 0xe9, 0xe3, 0xf3,
+ 0x1a, 0x16, 0x05, 0xe6, 0xd8, 0xcb, 0x2e, 0xd2, 0x0c, 0xf7, 0x44, 0xc5, 0xe7,
+ 0xe7, 0x28, 0xe4, 0x27, 0xe7, 0x23, 0xe5, 0xf9, 0xfe, 0x25, 0x1a, 0x13, 0xc8,
+ 0xe2, 0x3b, 0xf3, 0x37, 0xe7, 0xf6, 0xdf, 0x4c, 0x26, 0x36, 0xf0, 0x17, 0x25,
+ 0x27, 0x08, 0x50, 0xfc, 0x02, 0xdc, 0x12, 0x16, 0xf9, 0x24, 0x81, 0x00, 0x26,
+ 0x14, 0xd1, 0xef, 0x06, 0xe1, 0xeb, 0x09, 0x0a, 0xd5, 0x2b, 0x1e, 0xd5, 0x0c,
+ 0xdf, 0xfe, 0x0d, 0x0d, 0x30, 0xdc, 0xfd, 0xd8, 0xde, 0x2f, 0x1e, 0x12, 0x22,
+ 0xee, 0xf2, 0xef, 0x47, 0xd4, 0xd8, 0x35, 0x70, 0xf9, 0x1e, 0x44, 0x10, 0xe8,
+ 0x42, 0xfc, 0xeb, 0xee, 0xb5, 0x29, 0xf7, 0xfb, 0xe4, 0x28, 0x0b, 0x2e, 0x27,
+ 0xda, 0x23, 0x29, 0xed, 0x2a, 0x19, 0xd7, 0x37, 0xeb, 0xf9, 0x09, 0xfc, 0x58,
+ 0xef, 0xd1, 0xfa, 0xe9, 0xe2, 0xf9, 0x01, 0x14, 0xfe, 0x1c, 0x1d, 0x21, 0x35,
+ 0x28, 0x9d, 0x4b, 0xff, 0x43, 0xfe, 0xe9, 0xdf, 0x2e, 0x29, 0x54, 0x1a, 0xd7,
+ 0xbe, 0x2f, 0xbb, 0xbb, 0xeb, 0x31, 0x1c, 0x3e, 0xf5, 0xee, 0x16, 0x0e, 0xef,
+ 0xe1, 0xac, 0xc7, 0x0a, 0xfc, 0x1e, 0x37, 0xf5, 0xca, 0x02, 0x54, 0x2e, 0xed,
+ 0xd1, 0xfb, 0xcc, 0x4f, 0x0e, 0xee, 0xa3, 0xe8, 0xdf, 0x01, 0x14, 0xf0, 0x00,
+ 0x2c, 0xfe, 0x0a, 0x8c, 0x38, 0x2a, 0xa7, 0xfc, 0xf3, 0xdc, 0xe4, 0x4e, 0xc7,
+ 0x31, 0x3a, 0xe4, 0xdd, 0x0c, 0xd4, 0xdd, 0x59, 0xea, 0x06, 0x06, 0x49, 0xe7,
+ 0x20, 0xf3, 0x15, 0xe1, 0xe9, 0xb6, 0xf8, 0xf1, 0x35, 0xda, 0xea, 0x12, 0x7f,
+ 0x20, 0xec, 0x91, 0x2c, 0xda, 0xf1, 0xfb, 0x52, 0xf2, 0x16, 0xe4, 0x30, 0x3e,
+ 0x0f, 0x0b, 0x40, 0xfc, 0x10, 0xf1, 0x13, 0xd1, 0x39, 0xf0, 0x11, 0x22, 0x3a,
+ 0xf9, 0x3c, 0xd7, 0xd9, 0x24, 0x00, 0x19, 0x0a, 0xdf, 0x3a, 0x0b, 0xb4, 0x2d,
+ 0x07, 0xbc, 0xe0, 0x12, 0xee, 0xe5, 0x17, 0x32, 0xf6, 0x16, 0x35, 0x23, 0xcf,
+ 0x6d, 0x1f, 0x0b, 0xd5, 0x00, 0x35, 0x05, 0x38, 0xc7, 0x38, 0x0a, 0x1c, 0x03,
+ 0x18, 0x11, 0x00, 0xef, 0x36, 0xd6, 0x9b, 0xd5, 0x08, 0x06, 0xf2, 0xdb, 0xf8,
+ 0xf1, 0x81, 0x56, 0xf0, 0xec, 0xe0, 0xf1, 0xe9, 0xcf, 0xf3, 0x6f, 0xff, 0x0f,
+ 0x0a, 0x01, 0x4a, 0xe4, 0x22, 0xee, 0xf3, 0xe1, 0x2e, 0x05, 0xeb, 0xd6, 0xf9,
+ 0xcb, 0xe3, 0x2e, 0xc4, 0xc9, 0xfe, 0x03, 0x13, 0xd7, 0x1d, 0xd4, 0x34, 0x1e,
+ 0x13, 0xc9, 0xf4, 0x07, 0xd5, 0x56, 0x2f, 0x28, 0x07, 0xf1, 0x16, 0x11, 0xcf,
+ 0x20, 0xeb, 0x13, 0x27, 0xe7, 0x04, 0xe3, 0xdf, 0x25, 0xf1, 0xf6, 0xd6, 0xd4,
+ 0xb2, 0x50, 0x11, 0xdb, 0x04, 0xf4, 0x0e, 0x3f, 0x6f, 0x56, 0x03, 0x3e, 0x0c,
+ 0x11, 0x3f, 0x12, 0x24, 0x39, 0xec, 0x0d, 0x16, 0x0f, 0x4a, 0x34, 0x36, 0xe0,
+ 0xd5, 0x02, 0xe2, 0x23, 0x47, 0x0a, 0x43, 0x0c, 0xd3, 0x0d, 0xcb, 0x24, 0x1f,
+ 0xe5, 0xfd, 0x15, 0x2f, 0x02, 0xf7, 0xcc, 0xfc, 0xe1, 0x0e, 0x26, 0x2c, 0xf7,
+ 0xd4, 0x0b, 0x10, 0x14, 0x36, 0x3b, 0x30, 0x04, 0x4b, 0x2a, 0xe7, 0xc7, 0xda,
+ 0xd4, 0x38, 0xc8, 0xe2, 0xae, 0xde, 0x0f, 0x53, 0xbb, 0xe3, 0xd7, 0xd7, 0xf1,
+ 0x15, 0x1f, 0x21, 0x4e, 0xdc, 0x04, 0xe2, 0x81, 0x06, 0x2c, 0xd1, 0xd1, 0x1b,
+ 0xff, 0x3a, 0xc1, 0xd9, 0x03, 0xbf, 0xfd, 0xdb, 0x4a, 0x10, 0x5d, 0xd4, 0xf5,
+ 0xf1, 0xbc, 0x13, 0x14, 0x6e, 0xdd, 0x19, 0xc0, 0xf2, 0xde, 0xfd, 0xf3, 0x0c,
+ 0x20, 0xe1, 0xc5, 0xe4, 0x3a, 0x22, 0x1c, 0x09, 0xd4, 0x0b, 0xdb, 0xcf, 0xd4,
+ 0xfc, 0xda, 0x19, 0xc4, 0xa7, 0x14, 0xd0, 0xbd, 0xd6, 0xe4, 0x03, 0xd4, 0x19,
+ 0xf3, 0x21, 0xe1, 0x29, 0xcd, 0xfc, 0xf9, 0xf4, 0xe3, 0xe9, 0x35, 0x03, 0xe1,
+ 0xb1, 0x1a, 0xf1, 0xf6, 0xe3, 0x13, 0xbc, 0x19, 0xde, 0xe2, 0xfa, 0xa5, 0x0e,
+ 0xef, 0x2a, 0x1c, 0x18, 0xe4, 0xdf, 0xeb, 0xe8, 0x12, 0x02, 0xea, 0xbf, 0xfb,
+ 0x32, 0xf4, 0x12, 0x11, 0x2c, 0x17, 0x1c, 0xf0, 0xf5, 0xeb, 0xe1, 0x31, 0x25,
+ 0xf2, 0x05, 0x12, 0x46, 0xdf, 0xbc, 0x00, 0xf5, 0xee, 0x10, 0xe9, 0x09, 0xf9,
+ 0x15, 0xeb, 0x00, 0x1a, 0x23, 0x07, 0xef, 0x0b, 0x0b, 0x08, 0xfc, 0xfa, 0xc7,
+ 0x0f, 0xf7, 0x0b, 0x28, 0x25, 0x15, 0x02, 0x2b, 0xe3, 0xf8, 0x1a, 0x33, 0x1e,
+ 0x27, 0x26, 0x34, 0xdc, 0x24, 0xe7, 0xc1, 0x37, 0x21, 0xe9, 0x11, 0x18, 0x20,
+ 0xd6, 0x0e, 0xde, 0xd8, 0x0e, 0xf3, 0xfe, 0x24, 0xd0, 0xf5, 0x4c, 0xcd, 0xd4,
+ 0xfc, 0x1d, 0x15, 0xee, 0xf5, 0x1e, 0x23, 0xe0, 0x41, 0xb8, 0xd8, 0xd9, 0x1c,
+ 0x14, 0x01, 0xcc, 0x35, 0xca, 0x18, 0xf1, 0x31, 0xf8, 0xf1, 0x13, 0x04, 0xec,
+ 0x18, 0x0b, 0x1e, 0x59, 0x01, 0xff, 0xd3, 0xcf, 0x29, 0x41, 0xd7, 0xf2, 0x2b,
+ 0x3a, 0x0c, 0x18, 0xff, 0x27, 0x53, 0x24, 0x14, 0x24, 0xe5, 0x10, 0x7f, 0x03,
+ 0x4b, 0x0b, 0xc4, 0x07, 0x4f, 0xe7, 0x29, 0x46, 0x3d, 0x5d, 0x0b, 0x06, 0x0c,
+ 0xb1, 0xa9, 0x23, 0xf0, 0x1d, 0x85, 0x09, 0x18, 0xcd, 0x1b, 0xc8, 0xc3, 0xc5,
+ 0x51, 0x30, 0x9c, 0xda, 0x48, 0xed, 0xe3, 0x20, 0x12, 0xfa, 0x0d, 0x15, 0xbc,
+ 0x02, 0xe0, 0xc7, 0xea, 0x28, 0x2a, 0x7f, 0xab, 0xed, 0xaa, 0x50, 0x52, 0x4e,
+ 0xa8, 0x3d, 0x3d, 0x03, 0xe5, 0xf0, 0x02, 0x01, 0xd9, 0xa9, 0x42, 0x13, 0xf1,
+ 0xc8, 0x4e, 0xfd, 0x43, 0x0f, 0x20, 0xa7, 0xa7, 0xbd, 0x3c, 0xd1, 0xe7, 0x1b,
+ 0xb8, 0x01, 0xda, 0xc8, 0xca, 0xce, 0x5f, 0x4a, 0xf9, 0xdc, 0x16, 0xc7, 0x4e,
+ 0xda, 0xd8, 0x32, 0xd7, 0xd1, 0xd7, 0x06, 0xb6, 0x04, 0x07, 0xdf, 0xe9, 0x00,
+ 0x21, 0xae, 0xcd, 0x1f, 0x54, 0x3a, 0xfb, 0xc0, 0x01, 0xd5, 0xc2, 0x06, 0x1a,
+ 0x0d, 0x67, 0xbc, 0xf6, 0x09, 0x17, 0x34, 0xd1, 0x09, 0xdf, 0x27, 0xb2, 0x87,
+ 0x29, 0x1c, 0xd3, 0xe1, 0xbc, 0xc4, 0xa5, 0x48, 0x24, 0xf5, 0xfd, 0xd5, 0x56,
+ 0xfa, 0x03, 0xbf, 0x46, 0x3b, 0x13, 0xc7, 0x0d, 0xbc, 0xfd, 0xdf, 0x00, 0x36,
+ 0x6e, 0x86, 0x77, 0xe7, 0xf8, 0xb8, 0xbe, 0x00, 0x44, 0x00, 0x15, 0xdb, 0xda,
+ 0x19, 0xcd, 0x07, 0xae, 0xb3, 0xc6, 0x1a, 0x3a, 0x36, 0x97, 0xcf, 0xde, 0x6c,
+ 0xd7, 0xc8, 0x20, 0xe3, 0x08, 0xef, 0xd6, 0x1a, 0x25, 0x34, 0xd2, 0x41, 0x29,
+ 0x23, 0xf1, 0xea, 0xd3, 0xcf, 0xfa, 0x54, 0xd1, 0x26, 0xc6, 0x33, 0x45, 0xdb,
+ 0x18, 0x38, 0x52, 0x4f, 0xcf, 0xdc, 0xe9, 0xc5, 0x3b, 0x0f, 0x17, 0x0f, 0xe5,
+ 0xf1, 0x41, 0x43, 0xf3, 0x25, 0x3a, 0xf4, 0x28, 0x1a, 0xfe, 0x12, 0xad, 0x25,
+ 0x42, 0xe4, 0x2a, 0x22, 0x1c, 0x7f, 0x39, 0x83, 0x11, 0x23, 0x0e, 0xab, 0x08,
+ 0x16, 0x2a, 0xe5, 0xf4, 0xf3, 0x01, 0xbc, 0x45, 0x50, 0xb0, 0xd7, 0xb3, 0xdb,
+ 0x12, 0xd6, 0xf6, 0xe3, 0xec, 0xd1, 0x08, 0xdd, 0xce, 0xe8, 0x11, 0x09, 0xe3,
+ 0x7f, 0xf9, 0x0d, 0xff, 0xc8, 0xc4, 0xf8, 0xf1, 0x08, 0xd9, 0xc8, 0x53, 0x1f,
+ 0xc2, 0x31, 0x6c, 0x35, 0xf2, 0xe9, 0x08, 0x4a, 0x1d, 0x8f, 0x26, 0x43, 0xc1,
+ 0xe0, 0x13, 0x36, 0xe5, 0x03, 0x01, 0xe4, 0x0b, 0xc9, 0xfd, 0xe5, 0xf2, 0xd5,
+ 0xfa, 0x2a, 0x03, 0x29, 0xe1, 0xb9, 0x48, 0xbd, 0xf2, 0xc9, 0x48, 0x0f, 0x30,
+ 0xf6, 0xef, 0x41, 0xf9, 0xd6, 0xe1, 0xfe, 0x43, 0x06, 0x03, 0xbc, 0x04, 0x1a,
+ 0x85, 0xe2, 0x2b, 0xbf, 0x9f, 0x1c, 0x24, 0xf8, 0xf8, 0x0f, 0x30, 0x1a, 0xe4,
+ 0x26, 0xb6, 0xaf, 0x32, 0x16, 0x0d, 0xc6, 0xce, 0xf3, 0x05, 0x59, 0xd6, 0xdd,
+ 0xc1, 0x08, 0xf3, 0x40, 0x63, 0xd9, 0x2b, 0x2d, 0x15, 0xe2, 0x50, 0xc6, 0xf4,
+ 0x3c, 0xfa, 0xd8, 0xe6, 0xf8, 0x1a, 0x48, 0x52, 0x02, 0xee, 0x29, 0x20, 0x21,
+ 0x26, 0xfb, 0xe1, 0xf1, 0x0a, 0x29, 0x14, 0xfa, 0xa0, 0xed, 0x4c, 0xde, 0xe2,
+ 0xf0, 0x65, 0xeb, 0xc7, 0xca, 0x0d, 0x05, 0xa9, 0x11, 0xf1, 0x02, 0x11, 0xe0,
+ 0x01, 0x43, 0x16, 0xf4, 0x45, 0x08, 0x69, 0x01, 0xfa, 0xdb, 0x2a, 0xb2, 0x07,
+ 0x15, 0x42, 0xd2, 0xe9, 0xb5, 0x53, 0x1b, 0xf1, 0xda, 0x18, 0x0d, 0xea, 0xf2,
+ 0x42, 0xec, 0x0b, 0x5f, 0xf0, 0xce, 0x0d, 0xb4, 0x55, 0x0c, 0xf7, 0xc2, 0x43,
+ 0xe9, 0x52, 0xb2, 0xdc, 0xe3, 0x04, 0x81, 0xf4, 0x24, 0xe4, 0x11, 0x1a, 0xff,
+ 0x08, 0xe6, 0x10, 0xf4, 0x75, 0xd0, 0x56, 0x2c, 0xf4, 0xe9, 0xfb, 0xfc, 0x1a,
+ 0xcc, 0xd7, 0x11, 0x5e, 0x06, 0x13, 0x5c, 0x29, 0x04, 0xea, 0x0e, 0x0a, 0x02,
+ 0xef, 0x21, 0x02, 0x0c, 0xe4, 0x07, 0x81, 0xd1, 0xe0, 0x1a, 0x44, 0xd3, 0xd6,
+ 0x24, 0x30, 0xd1, 0xe2, 0xff, 0xa7, 0x30, 0xb7, 0x28, 0xd2, 0x2a, 0xc3, 0x24,
+ 0x11, 0x03, 0x2f, 0xe9, 0x4b, 0xe5, 0xee, 0x32, 0xb8, 0xb0, 0xe4, 0xa0, 0xfd,
+ 0x34, 0xaa, 0x3c, 0xd2, 0x32, 0x01, 0x08, 0xd2, 0xd1, 0xf7, 0xd1, 0xed, 0x36,
+ 0x00, 0x1b, 0xf5, 0xd7, 0xb1, 0x47, 0x1b, 0x0a, 0x0b, 0x39, 0x3c, 0x31, 0x25,
+ 0x03, 0xe7, 0x0b, 0xec, 0xf3, 0x8b, 0xed, 0xcc, 0x62, 0xcd, 0x05, 0xf9, 0xd7,
+ 0xa8, 0x17, 0xc1, 0xd8, 0xa4, 0x37, 0x5f, 0x34, 0xe7, 0xc5, 0xed, 0x4d, 0xce,
+ 0xf8, 0xd6, 0x1a, 0xff, 0xab, 0xd3, 0x0c, 0x3d, 0xda, 0xe6, 0x23, 0xcc, 0x1b,
+ 0x36, 0xc2, 0xf3, 0xf4, 0xf2, 0x5c, 0x26, 0xeb, 0xc8, 0x28, 0xdf, 0x5b, 0xc7,
+ 0x59, 0x1c, 0x7f, 0xfd, 0x07, 0x8a, 0x09, 0xd2, 0xf3, 0x2b, 0xe3, 0x47, 0xe2,
+ 0x61, 0xd5, 0x33, 0x37, 0xd9, 0xf4, 0x5d, 0xda, 0xf7, 0x10, 0xfd, 0xde, 0xef,
+ 0xb6, 0xcc, 0xfb, 0xec, 0x1a, 0x11, 0xf1, 0xc3, 0xe9, 0xcf, 0xca, 0xc7, 0xee,
+ 0xf1, 0xd1, 0xf2, 0x0b, 0xca, 0xdc, 0xdb, 0x0a, 0xc7, 0x28, 0xe5, 0x03, 0xfc,
+ 0x0b, 0x07, 0x74, 0xf1, 0xbe, 0x1a, 0xe5, 0x22, 0xd7, 0xf2, 0x1a, 0x00, 0x12,
+ 0x16, 0x1b, 0x27, 0xcd, 0xdd, 0xe4, 0xc6, 0x0c, 0x26, 0x2e, 0x02, 0x05, 0x12,
+ 0x49, 0x04, 0xe6, 0x31, 0x34, 0xce, 0x51, 0xfe, 0xec, 0xfe, 0xda, 0x1f, 0x10,
+ 0xf6, 0xf6, 0x42, 0x00, 0xe7, 0x10, 0x16, 0x07, 0x7f, 0xb4, 0x05, 0xd1, 0x33,
+ 0xfc, 0x09, 0xe4, 0x16, 0x1b, 0x0a, 0xbb, 0xa4, 0x3d, 0x36, 0x26, 0xde, 0x29,
+ 0x09, 0xce, 0xe5, 0xfb, 0xed, 0xfe, 0xe4, 0xbb, 0x0c, 0x15, 0xe4, 0x06, 0x40,
+ 0xcb, 0xf5, 0x33, 0x10, 0xee, 0x24, 0x1f, 0x62, 0xef, 0xcb, 0x08, 0xfa, 0x1d,
+ 0xf4, 0x37, 0xc2, 0x4d, 0xe4, 0xea, 0x2a, 0x05, 0xf2, 0x11, 0xda, 0x23, 0x2d,
+ 0xf8, 0xea, 0x16, 0xf0, 0x2d, 0x99, 0xb7, 0xe7, 0x22, 0x04, 0xb8, 0xe7, 0x46,
+ 0x29, 0x7f, 0x28, 0x37, 0xff, 0x0b, 0xab, 0xe3, 0xe8, 0xf9, 0x10, 0x20, 0x11,
+ 0xe2, 0xef, 0x45, 0xf8, 0x5c, 0x08, 0x51, 0x0d, 0xb2, 0xf3, 0x12, 0xd7, 0xfe,
+ 0xca, 0xe1, 0x1d, 0x04, 0xcc, 0x37, 0x52, 0xe7, 0xe4, 0xa8, 0xaf, 0xdd, 0xd1,
+ 0xd9, 0x06, 0xff, 0xd2, 0x04, 0x16, 0xe9, 0xac, 0x0f, 0x1c, 0x05, 0xec, 0xef,
+ 0x45, 0x00, 0xfe, 0xbf, 0x1a, 0xc6, 0xca, 0xc9, 0xe7, 0x10, 0x26, 0x0f, 0x31,
+ 0xda, 0xe9, 0xdd, 0xf2, 0x2f, 0x09, 0xe7, 0xf7, 0x1d, 0xd0, 0xcb, 0xc8, 0xd9,
+ 0xd6, 0xb7, 0xef, 0xcc, 0x1d, 0x86, 0xb0, 0xa8, 0x1f, 0xcc, 0xc6, 0xdf, 0xf4,
+ 0x1f, 0xd2, 0xfc, 0xfc, 0x0f, 0xe1, 0x29, 0xf9, 0xa8, 0x14, 0x0b, 0x28, 0x49,
+ 0x08, 0xfa, 0xef, 0x19, 0xe8, 0xe8, 0x37, 0xc2, 0x09, 0xed, 0xe2, 0x0b, 0x0f,
+ 0x18, 0x40, 0xff, 0xd2, 0x6c, 0x3a, 0xd8, 0x8a, 0x5d, 0xf5, 0x5f, 0xc4, 0xb7,
+ 0xf4, 0x1c, 0xf5, 0xde, 0x23, 0x21, 0x0c, 0xb7, 0x27, 0xcc, 0x81, 0xe1, 0xd0,
+ 0x19, 0x6b, 0xc8, 0x47, 0xa8, 0xea, 0xea, 0xdb, 0xc5, 0xb0, 0xf3, 0x4e, 0xe8,
+ 0x27, 0x3b, 0x3b, 0x3a, 0xe7, 0x98, 0x09, 0x31, 0x14, 0x36, 0x1c, 0x35, 0x2f,
+ 0xfe, 0x1f, 0xf1, 0xf1, 0x4f, 0xa6, 0x25, 0x29, 0x34, 0xfa, 0xb3, 0x0d, 0x26,
+ 0x41, 0xf4, 0xd2, 0xe3, 0xc1, 0xd8, 0x3f, 0xdc, 0x12, 0x13, 0xbb, 0x98, 0x55,
+ 0x41, 0x64, 0xe0, 0xc2, 0xfe, 0x03, 0xf2, 0x5a, 0x27, 0x3b, 0x3d, 0x11, 0xfd,
+ 0x34, 0x40, 0x1b, 0x13, 0xe1, 0x23, 0xc5, 0x2e, 0x02, 0xe0, 0x16, 0x21, 0x27,
+ 0x65, 0x0a, 0x11, 0xb7, 0x26, 0x18, 0xf3, 0x45, 0xb6, 0x07, 0xed, 0x19, 0xc8,
+ 0xe6, 0x1d, 0xc1, 0xfd, 0x35, 0x24, 0xfd, 0xb6, 0x73, 0x08, 0xfb, 0x15, 0x1a,
+ 0xec, 0xf3, 0x1c, 0x00, 0xef, 0xf9, 0x0c, 0x0c, 0xd6, 0xf4, 0xc9, 0x24, 0xeb,
+ 0xf3, 0xea, 0x0e, 0xeb, 0xdd, 0x14, 0x03, 0x08, 0xe5, 0x10, 0x00, 0xca, 0xf3,
+ 0xcb, 0xfc, 0xeb, 0x13, 0xf1, 0xf5, 0x02, 0x3b, 0xec, 0xf2, 0x28, 0xb2, 0x0d,
+ 0xf6, 0x38, 0x39, 0x2f, 0xef, 0xd6, 0xf1, 0xda, 0x12, 0x1b, 0x1b, 0xe6, 0x16,
+ 0xcd, 0x14, 0x21, 0x26, 0xf0, 0x2b, 0xec, 0xe1, 0xdf, 0xef, 0xc7, 0x23, 0x22,
+ 0xd1, 0xaa, 0x1c, 0xfd, 0xeb, 0xff, 0x22, 0xf4, 0x21, 0xf4, 0x11, 0xea, 0x1c,
+ 0x41, 0x0a, 0x0e, 0xc7, 0x05, 0xcb, 0xe2, 0x09, 0xb3, 0xe3, 0xff, 0x01, 0x32,
+ 0x10, 0xfc, 0xde, 0x1d, 0xda, 0x1d, 0x00, 0x08, 0x1d, 0xd9, 0xeb, 0x19, 0x09,
+ 0x0d, 0x81, 0xf8, 0x07, 0xd8, 0xfc, 0xcf, 0x12, 0xc6, 0x34, 0x1e, 0xeb, 0x0b,
+ 0xfe, 0x02, 0xfb, 0xfb, 0xeb, 0xe7, 0x23, 0xcf, 0x08, 0x25, 0xe3, 0x2e, 0xd4,
+ 0xbd, 0x06, 0xe0, 0xb7, 0x1c, 0xf7, 0xcb, 0xe7, 0xde, 0xf3, 0xf1, 0xfb, 0xf2,
+ 0x32, 0xe9, 0x00, 0xf4, 0xd8, 0x20, 0xe2, 0x2f, 0x35, 0xe1, 0x1d, 0xd2, 0x06,
+ 0xdc, 0xf4, 0x11, 0x35, 0x04, 0xe0, 0xf6, 0x07, 0x14, 0xcc, 0xf7, 0xdc, 0x08,
+ 0x1c, 0xc1, 0xf8, 0x0c, 0x1f, 0x9a, 0x07, 0x1d, 0xf1, 0xb5, 0xc9, 0x04, 0x2f,
+ 0x24, 0xdc, 0xe8, 0x0c, 0x2c, 0x11, 0x01, 0x19, 0xf7, 0xcf, 0xe5, 0xeb, 0x09,
+ 0x72, 0x23, 0x9f, 0x28, 0xf4, 0xf8, 0x08, 0xf2, 0xeb, 0xfb, 0x09, 0x3b, 0x1e,
+ 0x3f, 0xc6, 0xdc, 0x21, 0x81, 0x24, 0xec, 0xe6, 0x0b, 0xea, 0x01, 0xfb, 0xd0,
+ 0xca, 0x06, 0x12, 0x37, 0xed, 0x52, 0x18, 0xff, 0xf7, 0xf4, 0x1e, 0x03, 0x14,
+ 0x16, 0x43, 0xf9, 0x3d, 0xe6, 0xe9, 0x1e, 0xe9, 0xec, 0xfe, 0xfa, 0x21, 0x64,
+ 0xf0, 0x0f, 0x01, 0x0c, 0x0d, 0x38, 0x15, 0x23, 0x3e, 0xf3, 0x0e, 0xdc, 0xf5,
+ 0xe9, 0xe7, 0x47, 0x00, 0xe3, 0xdd, 0xd6, 0xce, 0x15, 0xf2, 0x6f, 0x41, 0xeb,
+ 0x15, 0xe6, 0x0f, 0x3c, 0xf1, 0x47, 0x2f, 0x00, 0x0d, 0xe3, 0xb2, 0xb0, 0xd9,
+ 0x13, 0xc1, 0xc9, 0xe5, 0x08, 0x16, 0xd4, 0x0c, 0xd7, 0x65, 0x0e, 0x42, 0xbc,
+ 0xf1, 0xfb, 0x43, 0xf4, 0x26, 0xfd, 0xfb, 0x2b, 0xf6, 0xf7, 0x25, 0x81, 0x02,
+ 0x03, 0x52, 0x29, 0x0d, 0xea, 0xf4, 0xbd, 0x0d, 0x3d, 0x1e, 0x0e, 0x66, 0xd5,
+ 0xd1, 0xda, 0xc9, 0xf1, 0xfb, 0xce, 0x1e, 0xee, 0xd1, 0xe2, 0x1d, 0xf9, 0x23,
+ 0xec, 0x38, 0xf4, 0x7b, 0x45, 0x16, 0x4f, 0x56, 0x06, 0x16, 0x42, 0xeb, 0x24,
+ 0x04, 0xed, 0x10, 0xc8, 0x5a, 0x03, 0x07, 0x19, 0xbb, 0xe6, 0xf1, 0xd2, 0xcd,
+ 0x1b, 0x45, 0xd2, 0x0b, 0xcf, 0xf4, 0x0b, 0x05, 0xe2, 0x0f, 0x07, 0xfb, 0xb8,
+ 0xfe, 0x3c, 0xc0, 0xf0, 0xf2, 0xf7, 0xb5, 0xfb, 0xd4, 0xe7, 0x3a, 0xe4, 0xf6,
+ 0x03, 0x09, 0xc8, 0x22, 0xc6, 0xdb, 0xc8, 0x33, 0xf3, 0xf9, 0xf5, 0x0f, 0xc5,
+ 0x48, 0x25, 0x23, 0x27, 0x0b, 0x0a, 0x0e, 0x50, 0xee, 0x92, 0xf8, 0x08, 0xef,
+ 0x11, 0xd8, 0x00, 0xf4, 0x01, 0x08, 0x05, 0x3c, 0x16, 0x37, 0xf5, 0xcd, 0x28,
+ 0xb9, 0x01, 0xdc, 0xf9, 0x32, 0x00, 0x11, 0x03, 0x2e, 0xc9, 0xf9, 0xb8, 0x2a,
+ 0x23, 0xc9, 0x07, 0x24, 0xd0, 0x1a, 0xed, 0xf7, 0x0b, 0x6e, 0xe2, 0x1d, 0xca,
+ 0xf2, 0xb9, 0x16, 0xb6, 0xf2, 0x20, 0xda, 0x1a, 0xd9, 0xd4, 0xf6, 0x20, 0xcc,
+ 0xf0, 0x7e, 0x1c, 0xe7, 0xe0, 0x6c, 0xfe, 0xfd, 0xe5, 0xfc, 0xd1, 0x44, 0xed,
+ 0x0f, 0xf8, 0x30, 0x0c, 0x37, 0x05, 0x9d, 0x11, 0xf0, 0xee, 0xb8, 0xe7, 0x4d,
+ 0xea, 0x33, 0x81, 0xb4, 0x44, 0x1b, 0xfc, 0xdc, 0xe9, 0x31, 0x01, 0xd7, 0xdd,
+ 0xfa, 0x10, 0xdf, 0x08, 0x7f, 0xfd, 0x14, 0x1f, 0xeb, 0xf1, 0x1d, 0x00, 0x16,
+ 0xe7, 0xf8, 0xff, 0x03, 0x20, 0xd1, 0x1e, 0x0c, 0x0c, 0x02, 0xe2, 0x00, 0xc5,
+ 0x18, 0xb0, 0xf9, 0xda, 0x03, 0xd7, 0x2c, 0xea, 0xe2, 0xd7, 0x0d, 0xfd, 0xdd,
+ 0xe7, 0x16, 0xfb, 0xee, 0x09, 0xfa, 0xff, 0x0e, 0x0d, 0x02, 0xe2, 0xf8, 0x0a,
+ 0xea, 0x08, 0x04, 0xee, 0x06, 0xcb, 0xfc, 0x0e, 0xf1, 0xeb, 0x12, 0x1d, 0xf4,
+ 0x0c, 0x05, 0xd8, 0xc6, 0xea, 0x12, 0x2d, 0x00, 0x19, 0x21, 0xef, 0xfb, 0x31,
+ 0xf1, 0xc2, 0x2a, 0x06, 0x12, 0x29, 0x0a, 0xf1, 0xf7, 0xf5, 0x0f, 0x05, 0x45,
+ 0x32, 0x31, 0x1f, 0x06, 0x07, 0xff, 0x1c, 0x06, 0xef, 0x06, 0xe3, 0xd7, 0xf3,
+ 0xd0, 0x29, 0xdf, 0x14, 0xef, 0xf2, 0xde, 0x0e, 0xf9, 0xdb, 0xe4, 0xfe, 0xfa,
+ 0x05, 0x25, 0xfe, 0xf3, 0x13, 0xc0, 0x0a, 0xf0, 0x00, 0x1e, 0xe2, 0x0c, 0xc8,
+ 0x6a, 0xeb, 0x0d, 0x49, 0x1d, 0x49, 0x32, 0x20, 0x01, 0xd8, 0x0e, 0xfc, 0x64,
+ 0xdd, 0xd8, 0x21, 0x08, 0xf3, 0xfd, 0xfa, 0x9c, 0xaf, 0x09, 0xd6, 0x0e, 0xb8,
+ 0xeb, 0xd1, 0x31, 0xc8, 0x3e, 0x04, 0xed, 0xea, 0x38, 0x16, 0xd1, 0x3c, 0x42,
+ 0x08, 0xed, 0xe5, 0xe0, 0xea, 0x05, 0x59, 0x16, 0x03, 0xf5, 0xab, 0xd9, 0x19,
+ 0x49, 0x3b, 0x32, 0xcb, 0xfa, 0x44, 0xdb, 0xf1, 0x10, 0xf4, 0xee, 0x10, 0x1a,
+ 0xe5, 0xf0, 0xef, 0xc6, 0xee, 0x24, 0xe7, 0x1a, 0x1b, 0xf8, 0xf3, 0x17, 0xaa,
+ 0xd9, 0x0f, 0x0f, 0x54, 0xef, 0xd0, 0x0c, 0x7d, 0xeb, 0xba, 0xbc, 0x09, 0x03,
+ 0x0e, 0x81, 0xd8, 0x42, 0xc5, 0xf5, 0x85, 0xe7, 0x03, 0x2b, 0xe9, 0x34, 0xd6,
+ 0x32, 0x0f, 0x2c, 0xe8, 0xf9, 0xe5, 0x0a, 0xc1, 0xde, 0x0b, 0xfe, 0x22, 0xe1,
+ 0xbe, 0xe4, 0x15, 0x2b, 0x28, 0x00, 0x22, 0x1c, 0xe0, 0x1b, 0x09, 0x05, 0xb6,
+ 0x36, 0x00, 0x0a, 0x05, 0xfa, 0xb5, 0x21, 0x29, 0x1e, 0xba, 0xd2, 0x10, 0xf6,
+ 0xad, 0x08, 0x41, 0x17, 0x0b, 0xfd, 0x07, 0x02, 0x10, 0x88, 0x3c, 0xee, 0x8a,
+ 0x29, 0x2b, 0xf1, 0xe2, 0xf5, 0x04, 0xea, 0x29, 0xfa, 0xe2, 0xec, 0x00, 0x1d,
+ 0x11, 0xe9, 0x25, 0x19, 0x1c, 0xe1, 0xf5, 0x07, 0xef, 0x25, 0xae, 0xbc, 0xe2,
+ 0x50, 0xca, 0x05, 0xf4, 0xf8, 0x01, 0x43, 0x0b, 0xe9, 0xdd, 0xe2, 0x04, 0x83,
+ 0xfb, 0xfa, 0x17, 0xfc, 0xe0, 0xf0, 0x05, 0xeb, 0xd7, 0xe9, 0x17, 0x05, 0x17,
+ 0x10, 0x1e, 0xdd, 0x44, 0xee, 0xcf, 0x00, 0xcf, 0xe6, 0xe9, 0x02, 0xeb, 0x38,
+ 0xf4, 0xc4, 0x0e, 0x10, 0x0b, 0x04, 0x21, 0x81, 0xda, 0xbc, 0x40, 0x03, 0xc5,
+ 0x27, 0x0a, 0xab, 0xd8, 0x01, 0xc7, 0xeb, 0xdc, 0x1a, 0xe6, 0x22, 0xd6, 0x3c,
+ 0xfa, 0x0d, 0xde, 0xfb, 0xc4, 0xe6, 0x12, 0x26, 0xc3, 0x40, 0xb1, 0x59, 0x05,
+ 0x0f, 0x1e, 0x00, 0xcc, 0x9d, 0x20, 0x46, 0xe7, 0x38, 0xfb, 0x1e, 0x11, 0x1a,
+ 0x18, 0x71, 0xff, 0x33, 0x1a, 0x27, 0xe6, 0x17, 0x19, 0xec, 0xd9, 0xd2, 0xf5,
+ 0x16, 0xf5, 0xd0, 0x00, 0x1a, 0x35, 0xce, 0xdb, 0xad, 0xf3, 0xbb, 0x24, 0xf3,
+ 0x31, 0x3b, 0xf7, 0x21, 0xf9, 0xd0, 0x0b, 0xe2, 0xcd, 0x93, 0x09, 0x67, 0x56,
+ 0xd9, 0xdf, 0xf7, 0xee, 0xf2, 0xce, 0xe9, 0xea, 0x5c, 0x32, 0xe8, 0x54, 0xc2,
+ 0xce, 0x01, 0xe9, 0x67, 0x0d, 0x14, 0xc9, 0x13, 0x1d, 0xd2, 0xd8, 0xe9, 0xce,
+ 0x9c, 0x08, 0x00, 0xdd, 0xc6, 0xb5, 0x13, 0x42, 0xd5, 0x06, 0xaf, 0x55, 0xc6,
+ 0xdd, 0xf1, 0xc6, 0xd0, 0x2e, 0x45, 0xfe, 0x21, 0x55, 0xc6, 0xf9, 0xef, 0x06,
+ 0x05, 0xbd, 0xdc, 0x81, 0x01, 0x19, 0x2d, 0xfb, 0x23, 0xed, 0x37, 0xd6, 0xe4,
+ 0xfa, 0xec, 0x19, 0xcf, 0x09, 0x13, 0xe4, 0x02, 0xe8, 0xd8, 0xde, 0x0d, 0xe5,
+ 0xf2, 0x05, 0xf7, 0xe3, 0x44, 0xd1, 0xfd, 0x38, 0x0f, 0x36, 0x6b, 0xeb, 0x28,
+ 0x0d, 0x14, 0xbe, 0xf0, 0xf2, 0xf8, 0x0d, 0xff, 0xc3, 0xf8, 0xe9, 0xf8, 0x39,
+ 0xc7, 0x04, 0x0b, 0x09, 0x38, 0x06, 0x4a, 0xdb, 0xa0, 0x13, 0xee, 0x1d, 0xf6,
+ 0x32, 0xeb, 0x1e, 0xfb, 0xc8, 0xde, 0x1d, 0x2a, 0xf0, 0x05, 0xf7, 0x20, 0x08,
+ 0xb3, 0xfd, 0xf7, 0xfb, 0xc7, 0xac, 0x81, 0x26, 0xee, 0x45, 0xfb, 0xe0, 0xe2,
+ 0x4f, 0x22, 0xaf, 0x3b, 0xe5, 0x1b, 0xec, 0x31, 0x04, 0xe7, 0x06, 0xf5, 0x18,
+ 0xf7, 0x34, 0xf5, 0x4b, 0x14, 0xc1, 0xda, 0x0e, 0xe4, 0x23, 0xf7, 0x12, 0xf9,
+ 0x1c, 0x0d, 0x10, 0xd6, 0xf5, 0xdc, 0xff, 0x26, 0xe4, 0x02, 0x10, 0x36, 0x0f,
+ 0x12, 0x03, 0xfd, 0xbb, 0x03, 0x02, 0x0b, 0x19, 0x28, 0x04, 0xee, 0xf6, 0xaf,
+ 0xdf, 0x51, 0xb3, 0xc9, 0xfb, 0xdc, 0x10, 0xe5, 0xe0, 0x0a, 0x07, 0xf0, 0xe9,
+ 0xdc, 0x08, 0xf2, 0xce, 0xb8, 0xdd, 0xad, 0x06, 0xed, 0x07, 0xe5, 0x37, 0xfb,
+ 0xf3, 0xec, 0x4b, 0xdd, 0xf7, 0x39, 0xe9, 0x62, 0xf9, 0x17, 0x20, 0x1f, 0xfb,
+ 0xf1, 0x0a, 0x39, 0x0d, 0x16, 0xe7, 0x16, 0x09, 0xff, 0xfd, 0x39, 0xfd, 0xc8,
+ 0xf4, 0x1d, 0xe4, 0xd0, 0x20, 0xa4, 0xd5, 0x41, 0xdb, 0x06, 0xf7, 0xf8, 0x81,
+ 0x25, 0x18, 0x1a, 0x19, 0x08, 0x20, 0xff, 0x00, 0xad, 0xd5, 0x55, 0xff, 0xe1,
+ 0xd8, 0xe7, 0xef, 0x39, 0xf0, 0x01, 0xe4, 0xf1, 0xf7, 0xf6, 0xda, 0x09, 0x01,
+ 0x06, 0xff, 0x36, 0xed, 0xdf, 0xe0, 0xf1, 0xd2, 0xdc, 0x32, 0xcb, 0xff, 0x25,
+ 0xe3, 0xe8, 0xe6, 0x03, 0x16, 0x2d, 0xb4, 0xf0, 0x01, 0x5f, 0xd6, 0xde, 0x26,
+ 0xdb, 0xdf, 0x1f, 0xfd, 0xe3, 0x12, 0xca, 0xf6, 0x1b, 0x03, 0x11, 0xf5, 0xb4,
+ 0x13, 0x01, 0xd0, 0x07, 0xf4, 0x0a, 0xcf, 0x31, 0x46, 0x04, 0x68, 0xce, 0xf7,
+ 0x13, 0xe4, 0x09, 0xf1, 0x51, 0xd7, 0xce, 0x13, 0xbf, 0x51, 0xe5, 0x1c, 0xeb,
+ 0xfa, 0x14, 0x2f, 0xc6, 0xe3, 0x03, 0xe8, 0x1b, 0x3b, 0x4f, 0x3d, 0xe3, 0xfa,
+ 0x0f, 0xf0, 0x09, 0x7f, 0x46, 0x3c, 0x21, 0xdb, 0x08, 0x45, 0x73, 0x2c, 0x8e,
+ 0x3a, 0x29, 0x09, 0xec, 0xe1, 0xea, 0xf9, 0xd1, 0x49, 0xed, 0x2c, 0x1d, 0x25,
+ 0x40, 0x55, 0xf1, 0xea, 0x13, 0xe5, 0xe7, 0xfe, 0x4a, 0x46, 0x17, 0xc7, 0xf3,
+ 0xbc, 0x00, 0xe5, 0x4c, 0xe0, 0xff, 0x20, 0xd7, 0x18, 0x21, 0x3a, 0x1f, 0xa8,
+ 0x4f, 0xd9, 0x43, 0x44, 0x39, 0x08, 0x30, 0x59, 0x33, 0x15, 0xbe, 0xf1, 0x0d,
+ 0x11, 0xf8, 0x0b, 0xdb, 0xd5, 0xb1, 0x36, 0xe3, 0x0b, 0x2e, 0x22, 0x30, 0xe6,
+ 0x00, 0x3c, 0xcc, 0x04, 0xce, 0x3c, 0x10, 0x27, 0xf8, 0xff, 0x29, 0x44, 0x02,
+ 0xa8, 0x21, 0x23, 0x05, 0x29, 0xd1, 0xf5, 0x02, 0xe4, 0x78, 0xd4, 0xda, 0xea,
+ 0x12, 0x27, 0xe4, 0xf4, 0xfa, 0x21, 0xf2, 0x0e, 0x06, 0xee, 0xde, 0x05, 0xe4,
+ 0xfb, 0x45, 0xc2, 0xb0, 0xaa, 0x29, 0xd5, 0x07, 0x52, 0xe3, 0x25, 0xe5, 0x04,
+ 0x21, 0x0d, 0x91, 0xdf, 0xfc, 0xe2, 0x04, 0x36, 0x58, 0x20, 0xf7, 0x16, 0xf6,
+ 0x2d, 0xbd, 0x06, 0x0f, 0x16, 0xda, 0x1f, 0x01, 0xf3, 0xf9, 0x14, 0x04, 0x5f,
+ 0x49, 0x20, 0x15, 0xbf, 0x04, 0xf8, 0xb8, 0x1e, 0x29, 0x0b, 0x1d, 0xfb, 0xb9,
+ 0xd9, 0xb8, 0xfe, 0x20, 0xf4, 0xfe, 0xdc, 0x06, 0xe2, 0x35, 0x25, 0xd5, 0x81,
+ 0x19, 0xf3, 0xb5, 0xe0, 0x01, 0xfa, 0xe8, 0x45, 0xf7, 0xe6, 0x19, 0xef, 0x2c,
+ 0x45, 0xe7, 0xf6, 0x01, 0x12, 0x15, 0x09, 0xf7, 0xfa, 0xef, 0x63, 0x06, 0x22,
+ 0x01, 0x0f, 0xdb, 0xd4, 0xee, 0xe7, 0x10, 0xd9, 0x05, 0x28, 0xe7, 0xc4, 0xdc,
+ 0xd5, 0xf4, 0xe7, 0xba, 0x03, 0xf0, 0xeb, 0xc7, 0xf8, 0x24, 0xac, 0x03, 0x56,
+ 0x13, 0xfc, 0xff, 0xe9, 0x2c, 0x13, 0xaf, 0x13, 0x05, 0xe6, 0x19, 0x26, 0xef,
+ 0x13, 0x17, 0xf6, 0x21, 0xb9, 0x0e, 0x29, 0xe6, 0xcf, 0x2e, 0xea, 0x1e, 0x2c,
+ 0x1a, 0x1e, 0xef, 0x0c, 0xb7, 0x19, 0xe9, 0x1f, 0x2a, 0xea, 0x2c, 0x00, 0xc5,
+ 0x17, 0x24, 0x05, 0xe3, 0x14, 0x2b, 0x15, 0x11, 0xf2, 0x05, 0xf3, 0xd1, 0x36,
+ 0xcf, 0x16, 0x02, 0xf6, 0xf2, 0x1c, 0x3b, 0xb8, 0x02, 0xe3, 0xcc, 0xe1, 0x42,
+ 0x41, 0xf9, 0xfa, 0xfe, 0xe5, 0x0e, 0x38, 0x47, 0xfa, 0x12, 0xc1, 0x0d, 0x0e,
+ 0x60, 0x13, 0xf4, 0x7f, 0x15, 0x1c, 0x25, 0x09, 0x0c, 0xd1, 0x07, 0x26, 0x28,
+ 0xd5, 0x1d, 0x23, 0xd7, 0x28, 0xcb, 0x52, 0x10, 0x00, 0x21, 0x1a, 0xdd, 0xda,
+ 0x1a, 0xfd, 0xc9, 0xf2, 0xc1, 0xf7, 0x1c, 0x3c, 0xeb, 0xad, 0x28, 0xe1, 0xcd,
+ 0xe0, 0x31, 0x0b, 0x13, 0x16, 0xb2, 0xfa, 0xf5, 0xfd, 0xf8, 0x23, 0x1f, 0xfb,
+ 0x00, 0x1a, 0xae, 0xd2, 0xba, 0x1e, 0x1e, 0xc4, 0xca, 0x42, 0xf9, 0xdf, 0xd7,
+ 0xd5, 0xef, 0x45, 0x1c, 0x29, 0xf5, 0x00, 0xda, 0x16, 0x36, 0xf8, 0xf2, 0x11,
+ 0x7f, 0xdd, 0x3a, 0xf3, 0x2f, 0x1f, 0xe1, 0x5c, 0xf7, 0xd7, 0xea, 0x00, 0x1e,
+ 0xf0, 0x05, 0x11, 0xe5, 0xee, 0xf7, 0x0f, 0x6c, 0x0c, 0xcc, 0xcb, 0x23, 0xdc,
+ 0x05, 0x40, 0x1d, 0x03, 0x0a, 0x05, 0xfc, 0xd5, 0xb4, 0xc3, 0x0e, 0xe9, 0x37,
+ 0x2e, 0xe4, 0x26, 0x4f, 0xe6, 0x32, 0xb0, 0xf8, 0xda, 0x15, 0x61, 0xfa, 0xf4,
+ 0xe1, 0x59, 0xf1, 0x0d, 0xfe, 0x0e, 0xc9, 0x6f, 0x0f, 0x14, 0xe2, 0x0a, 0x0a,
+ 0xdb, 0x0a, 0xff, 0x5e, 0x97, 0x2e, 0x1e, 0x14, 0x1a, 0xe5, 0x3f, 0x0b, 0xee,
+ 0x0a, 0xfd, 0xe7, 0xdc, 0x15, 0x0a, 0x40, 0xcd, 0x1c, 0xcf, 0x0b, 0x25, 0xf9,
+ 0xdb, 0x03, 0xf7, 0xea, 0x1b, 0x0e, 0x99, 0x62, 0xe3, 0x41, 0xf3, 0xd1, 0x4f,
+ 0x0a, 0x05, 0x2b, 0x13, 0xc1, 0x9f, 0xc3, 0xb8, 0x2a, 0x38, 0x01, 0x11, 0xf5,
+ 0x1f, 0x06, 0x17, 0x32, 0xd5, 0xce, 0xba, 0x1f, 0x1b, 0x13, 0x0b, 0xfb, 0xab,
+ 0xcf, 0x5c, 0x26, 0xf6, 0x22, 0xd8, 0x31, 0x2b, 0x2b, 0x82, 0x2c, 0xf9, 0x2b,
+ 0x61, 0xff, 0x0b, 0xe9, 0xf3, 0x1c, 0xdb, 0x3e, 0xf6, 0xec, 0xe4, 0x53, 0x14,
+ 0x31, 0xb3, 0xf4, 0xe3, 0x00, 0xb8, 0xed, 0x98, 0xe8, 0x04, 0xd6, 0xe2, 0xcb,
+ 0xd7, 0x0c, 0x12, 0xf3, 0x28, 0x23, 0xc4, 0x13, 0xdf, 0xed, 0x54, 0x9a, 0xf9,
+ 0x0f, 0xb7, 0xc7, 0x4a, 0x3c, 0xfc, 0xaf, 0xf4, 0x0c, 0x28, 0x1e, 0xe6, 0x12,
+ 0x2c, 0x35, 0xa1, 0x39, 0xe0, 0x55, 0x3a, 0xf5, 0x81, 0xc8, 0x2e, 0xe7, 0x18,
+ 0xae, 0x1a, 0xf0, 0x45, 0xd9, 0xf2, 0x15, 0xf5, 0x0f, 0x3c, 0x07, 0xb1, 0x3f,
+ 0xd4, 0x97, 0x45, 0xa6, 0x19, 0x0f, 0xde, 0xca, 0xdd, 0xef, 0xda, 0xfb, 0xd5,
+ 0xfc, 0x39, 0xf2, 0x7f, 0xeb, 0x0a, 0x3d, 0x46, 0x41, 0xdd, 0x98, 0x0f, 0xe9,
+ 0xf0, 0xb6, 0xef, 0x06, 0xf1, 0x54, 0xe9, 0x1d, 0x2a, 0x48, 0xee, 0x28, 0x18,
+ 0x2b, 0x09, 0x2f, 0xfe, 0x69, 0x3e, 0xe8, 0xf3, 0x3d, 0xe7, 0x31, 0xdc, 0xe1,
+ 0x04, 0xfa, 0x28, 0x08, 0x36, 0xbf, 0x34, 0xe3, 0x2a, 0x30, 0xd1, 0x43, 0xaa,
+ 0x63, 0x2f, 0x1d, 0xdb, 0x35, 0xf6, 0x13, 0xfe, 0xcd, 0xbd, 0x0e, 0xe1, 0xe6,
+ 0xec, 0x7e, 0x33, 0x4e, 0xcc, 0x2e, 0xfa, 0xe3, 0xc1, 0x18, 0x10, 0xe1, 0xc2,
+ 0x4e, 0xd8, 0x01, 0x00, 0x27, 0x03, 0x26, 0xcc, 0xff, 0xee, 0xe5, 0xf5, 0x2f,
+ 0x2e, 0xda, 0xcf, 0x1d, 0xdd, 0xff, 0x36, 0x11, 0x2a, 0x28, 0x1d, 0x14, 0xd1,
+ 0x0a, 0x3e, 0xf6, 0xb0, 0x05, 0x35, 0x4d, 0xf9, 0x37, 0x5e, 0x31, 0x14, 0x5c,
+ 0xdb, 0xf5, 0x05, 0x9b, 0xd9, 0xf5, 0x0f, 0x11, 0xc5, 0xb7, 0xa4, 0xf0, 0xe6,
+ 0x1a, 0xe4, 0xde, 0x05, 0x19, 0xe6, 0xcb, 0xe7, 0x1f, 0x37, 0xfc, 0xe9, 0xdd,
+ 0x1c, 0xb1, 0xf0, 0x20, 0x12, 0xdd, 0x1f, 0xe4, 0x06, 0x25, 0xa7, 0x3a, 0x43,
+ 0x20, 0x34, 0x14, 0xe6, 0xd6, 0x25, 0x70, 0x29, 0xc9, 0x18, 0xc1, 0x2d, 0xf2,
+ 0xe0, 0x06, 0x56, 0x0f, 0x0e, 0x00, 0xd4, 0x85, 0xdd, 0x01, 0x16, 0x43, 0x17,
+ 0xe3, 0x22, 0x18, 0x19, 0xb9, 0xef, 0xe5, 0x35, 0xb9, 0x37, 0x0a, 0xdd, 0x19,
+ 0xd4, 0xe1, 0x0e, 0x05, 0xbb, 0x13, 0xfc, 0xff, 0x20, 0xf9, 0xb2, 0xa2, 0xf8,
+ 0xe1, 0xc5, 0x43, 0x2f, 0x14, 0x09, 0xbb, 0xf1, 0x1a, 0xe8, 0xa2, 0xf1, 0xf3,
+ 0x09, 0x02, 0x22, 0x24, 0x25, 0xf4, 0xf8, 0x35, 0xf5, 0x13, 0x1f, 0x81, 0xd3,
+ 0x1a, 0xfa, 0xcc, 0x24, 0xf2, 0xf5, 0xdc, 0xf5, 0x0d, 0xf7, 0x2f, 0x01, 0x12,
+ 0xe9, 0xde, 0xe0, 0xe2, 0xe1, 0x16, 0xca, 0x29, 0xfb, 0xe4, 0xde, 0xf8, 0x2f,
+ 0x22, 0x38, 0xdb, 0xed, 0xbe, 0x15, 0xd3, 0x12, 0x1d, 0x3a, 0x04, 0x1b, 0xe8,
+ 0xc4, 0x00, 0x13, 0xdc, 0xd9, 0xfd, 0x13, 0x0b, 0xbd, 0xe9, 0x17, 0xad, 0x2f,
+ 0x12, 0x09, 0xd8, 0xf3, 0xe8, 0xa8, 0x08, 0xf5, 0xd8, 0x0a, 0xe4, 0xe5, 0xc8,
+ 0xc6, 0x1b, 0x00, 0x2c, 0xd5, 0x14, 0x3e, 0xdc, 0x01, 0xff, 0x0a, 0xeb, 0x1e,
+ 0x1a, 0x02, 0x24, 0xe4, 0xf4, 0xfc, 0x3c, 0x16, 0x0d, 0xc6, 0xf5, 0xf2, 0xf3,
+ 0xca, 0x0b, 0xc6, 0x21, 0xe6, 0xd8, 0x3f, 0x05, 0x1a, 0xfe, 0xe9, 0xd0, 0x5d,
+ 0x2d, 0xf2, 0xea, 0xf9, 0xe3, 0xf9, 0xcb, 0xd5, 0xeb, 0x00, 0xe7, 0x37, 0x02,
+ 0xcf, 0x1b, 0xf6, 0x18, 0xf1, 0x30, 0xf8, 0x2c, 0xfc, 0xcd, 0x81, 0x08, 0x27,
+ 0xff, 0x2e, 0x02, 0xfb, 0xe1, 0xf9, 0x06, 0x2e, 0xe9, 0x26, 0x13, 0xde, 0x02,
+ 0x17, 0x04, 0x03, 0x09, 0x37, 0x7f, 0x02, 0xdf, 0x29, 0xd9, 0xf3, 0xe8, 0xe5,
+ 0x0f, 0x03, 0xdc, 0x1c, 0x2a, 0xd3, 0xac, 0xf0, 0x44, 0x06, 0xf4, 0xe1, 0xe0,
+ 0x17, 0x00, 0xfd, 0xcf, 0xfa, 0x21, 0xfe, 0xb3, 0xe1, 0xe9, 0x2e, 0x14, 0xf9,
+ 0xe3, 0x02, 0xf3, 0x02, 0x11, 0x23, 0x29, 0x18, 0x13, 0x02, 0xf0, 0x12, 0xe9,
+ 0x13, 0xf7, 0x0f, 0xce, 0xcc, 0xf5, 0x06, 0x1a, 0x07, 0x0f, 0xf2, 0x15, 0xf2,
+ 0xe6, 0x08, 0xf3, 0xf2, 0xeb, 0xf8, 0xd6, 0x23, 0x08, 0xe5, 0x09, 0x2f, 0xe3,
+ 0xe5, 0xfc, 0x37, 0x00, 0x08, 0xea, 0x05, 0x31, 0xfa, 0xe9, 0x35, 0xf6, 0x1f,
+ 0x02, 0xfd, 0xde, 0xcf, 0xea, 0xd0, 0x30, 0xea, 0x07, 0xf3, 0x06, 0xfe, 0x2b,
+ 0xc4, 0x1c, 0xe4, 0xd2, 0xe6, 0x10, 0xf9, 0xdd, 0x11, 0xcb, 0x15, 0xb1, 0xfb,
+ 0x48, 0xf4, 0x23, 0x02, 0x15, 0x42, 0x1c, 0xef, 0x38, 0xc0, 0xe6, 0x04, 0x17,
+ 0x05, 0xef, 0xe8, 0x47, 0x24, 0xf6, 0x2d, 0x1b, 0xf4, 0x55, 0x3a, 0x37, 0xb9,
+ 0x10, 0xda, 0x96, 0xd4, 0x34, 0xba, 0xff, 0x09, 0x02, 0xf9, 0x1f, 0xcc, 0xf1,
+ 0x40, 0xbc, 0xeb, 0xe0, 0x47, 0xee, 0xef, 0xfc, 0x3c, 0x11, 0x7a, 0x08, 0xd7,
+ 0xf5, 0xf3, 0xd6, 0xb6, 0xf5, 0xf1, 0x25, 0xe8, 0xac, 0xfb, 0xc2, 0xce, 0x81,
+ 0x74, 0xcd, 0xf0, 0x43, 0xb2, 0xbd, 0xc2, 0xff, 0x04, 0x2e, 0x61, 0xbf, 0xec,
+ 0x03, 0xf8, 0xf7, 0xf1, 0x9d, 0xee, 0x1a, 0x1f, 0xd8, 0x4a, 0xe1, 0xdb, 0x4a,
+ 0x3c, 0xed, 0xee, 0x23, 0x4a, 0xcb, 0xce, 0x16, 0x3c, 0x3d, 0xf1, 0x05, 0xde,
+ 0x50, 0x01, 0x11, 0xcc, 0x92, 0xf9, 0x14, 0xd1, 0xd6, 0x08, 0xd9, 0x8d, 0x9c,
+ 0xcd, 0x2e, 0xc3, 0xed, 0x04, 0x05, 0x7a, 0x2b, 0x02, 0x1d, 0xa1, 0x26, 0xd4,
+ 0x32, 0x26, 0x96, 0x64, 0xe8, 0xdb, 0x0b, 0x2a, 0xd5, 0x04, 0x13, 0x2c, 0x5e,
+ 0xf1, 0x06, 0x0e, 0x9d, 0xdd, 0xd8, 0xe8, 0x2f, 0x23, 0x2f, 0xcd, 0xc5, 0xee,
+ 0x30, 0xed, 0x5e, 0xdb, 0xf4, 0xe9, 0x20, 0xe3, 0x1b, 0xe1, 0xf4, 0xd4, 0xed,
+ 0x2e, 0xd2, 0xb7, 0x5a, 0x0f, 0xc9, 0xca, 0xce, 0x9e, 0x53, 0x2f, 0x4b, 0x18,
+ 0x82, 0x00, 0xda, 0xe3, 0xbc, 0x1b, 0xc6, 0xfe, 0xde, 0x4b, 0x32, 0xbc, 0xef,
+ 0xb3, 0xf3, 0xfc, 0x61, 0x2f, 0xfa, 0xa1, 0x86, 0x5c, 0xd0, 0xdc, 0x02, 0x4b,
+ 0xeb, 0x1f, 0x5a, 0x24, 0x16, 0x0f, 0xd1, 0xd1, 0xbf, 0xd9, 0x8f, 0xa8, 0x11,
+ 0x3b, 0xd8, 0x32, 0xda, 0xe6, 0x59, 0x7f, 0x11, 0x40, 0xe4, 0x34, 0xf0, 0x06,
+ 0xd4, 0xf4, 0xd5, 0xc3, 0x1e, 0x2e, 0x1b, 0xe9, 0xf6, 0x12, 0xe5, 0x0b, 0xe4,
+ 0x3b, 0x14, 0xd0, 0x45, 0x0c, 0xdb, 0xdb, 0xf5, 0xfa, 0x06, 0x1a, 0xc8, 0xe3,
+ 0xe5, 0x06, 0x14, 0x28, 0xf6, 0xbf, 0xc9, 0x09, 0xb1, 0x35, 0xd8, 0x10, 0xf5,
+ 0x35, 0x09, 0x0c, 0x18, 0xfd, 0xfa, 0x16, 0xfc, 0x41, 0xd5, 0x27, 0xc1, 0xa4,
+ 0x0e, 0xdc, 0xdc, 0x48, 0x38, 0xff, 0x0e, 0x4b, 0x0a, 0xa5, 0xee, 0x30, 0x1b,
+ 0x0b, 0x01, 0x0f, 0x53, 0xf7, 0xd7, 0xed, 0xec, 0xf9, 0xd1, 0x2a, 0x26, 0x2d,
+ 0xfa, 0x35, 0x22, 0x36, 0xed, 0xfc, 0x14, 0x8e, 0xef, 0xdd, 0x0b, 0x3b, 0x29,
+ 0xd6, 0xf4, 0xd0, 0x51, 0x00, 0xf5, 0xc8, 0x35, 0x09, 0xf1, 0x11, 0xd2, 0x5a,
+ 0xf9, 0x4f, 0xdd, 0x05, 0xc8, 0x0b, 0xe8, 0xf6, 0x2a, 0x2b, 0xfe, 0x81, 0x07,
+ 0x45, 0xce, 0x16, 0x1b, 0xe8, 0x46, 0xef, 0x4e, 0x0e, 0x21, 0xfa, 0x2b, 0xce,
+ 0x18, 0xfc, 0x2e, 0x09, 0x04, 0x5b, 0xd6, 0x27, 0x0f, 0xc9, 0x21, 0x14, 0xf3,
+ 0xfc, 0xe3, 0x02, 0xf4, 0xec, 0xff, 0xff, 0x2c, 0x12, 0x1c, 0x03, 0x02, 0xdd,
+ 0xe5, 0x19, 0x0a, 0x0e, 0x2c, 0xf5, 0x23, 0xfa, 0xd0, 0x08, 0x1f, 0xe0, 0xdb,
+ 0x14, 0xf9, 0xe9, 0x00, 0x1c, 0x16, 0xd5, 0xf9, 0xc5, 0xfb, 0x26, 0x15, 0xfe,
+ 0x05, 0x07, 0xd5, 0x25, 0x1a, 0xe4, 0xf9, 0xf9, 0xea, 0x0d, 0x0b, 0x23, 0x14,
+ 0xf0, 0xef, 0xdb, 0xe8, 0x1f, 0x2e, 0x0f, 0x09, 0xdd, 0x22, 0x0e, 0x05, 0xee,
+ 0xfd, 0x03, 0xc6, 0x0b, 0x05, 0xf1, 0xd6, 0x04, 0xdd, 0xe0, 0xfb, 0xfa, 0x01,
+ 0x17, 0xf0, 0xf1, 0x1e, 0x09, 0xfe, 0x00, 0x11, 0x02, 0x00, 0xc7, 0x04, 0xd2,
+ 0xf5, 0xdd, 0xfa, 0x09, 0xdc, 0x0f, 0xe4, 0xe1, 0xfa, 0xcb, 0x27, 0xed, 0xef,
+ 0xfc, 0xd4, 0xea, 0x04, 0xd3, 0xe8, 0x23, 0x02, 0x08, 0xce, 0x0a, 0x19, 0xf7,
+ 0xe7, 0xf9, 0x15, 0x2c, 0x03, 0xf0, 0xf5, 0x3f, 0x0b, 0x7f, 0x16, 0x18, 0x21,
+ 0xf6, 0x38, 0xd5, 0xfe, 0x01, 0xeb, 0x3b, 0xbe, 0xdb, 0xba, 0xa2, 0xae, 0x01,
+ 0x2d, 0x6a, 0x46, 0x29, 0x2b, 0x29, 0x81, 0x04, 0xff, 0x23, 0x1b, 0xfd, 0xab,
+ 0x26, 0x37, 0x3f, 0x21, 0x20, 0x23, 0x9d, 0xc1, 0xc6, 0xcf, 0x7a, 0x49, 0xea,
+ 0xf4, 0xd5, 0x2f, 0xcc, 0x48, 0xd7, 0x13, 0xfd, 0x3e, 0x0f, 0xef, 0x50, 0xe0,
+ 0x11, 0xd2, 0x37, 0x2e, 0x3d, 0x20, 0x55, 0xe5, 0x3a, 0xe4, 0x12, 0x2a, 0x27,
+ 0x04, 0x57, 0x4d, 0xf4, 0x0f, 0x29, 0x27, 0xf8, 0x2c, 0xfd, 0x69, 0x2d, 0xfe,
+ 0x32, 0xfd, 0xa6, 0xc8, 0xe2, 0xf6, 0x31, 0xbf, 0x52, 0xf8, 0xff, 0xe1, 0xdb,
+ 0x50, 0xdc, 0xea, 0xf0, 0xdb, 0x18, 0x93, 0xca, 0x65, 0x8f, 0x09, 0x10, 0x62,
+ 0xe5, 0x3c, 0x4c, 0x03, 0xe7, 0x0d, 0xff, 0x9c, 0x4d, 0xe3, 0xe1, 0xf9, 0xce,
+ 0x36, 0xe7, 0x1d, 0x9f, 0x19, 0x13, 0x2f, 0x4d, 0xf5, 0xeb, 0xe4, 0x68, 0x10,
+ 0x2d, 0xe5, 0x17, 0xe3, 0xd0, 0xd5, 0xec, 0x13, 0x1b, 0x10, 0xd6, 0x39, 0xd4,
+ 0x24, 0xe3, 0xc3, 0x14, 0xee, 0xfd, 0xee, 0x45, 0x0e, 0x23, 0xf0, 0x32, 0x03,
+ 0xe7, 0xdc, 0x26, 0x3e, 0xec, 0xbe, 0xd9, 0x7f, 0xda, 0x0c, 0x23, 0x19, 0x17,
+ 0xf2, 0x52, 0x37, 0xce, 0xfd, 0xec, 0x25, 0x19, 0xf5, 0x01, 0xf1, 0xf0, 0x02,
+ 0xe8, 0x1b, 0xf7, 0xe1, 0xf2, 0x01, 0xd5, 0xdf, 0xe6, 0xff, 0x0d, 0xeb, 0xdc,
+ 0x18, 0xdc, 0xf1, 0x1f, 0xf8, 0xe7, 0xff, 0xf1, 0xe0, 0xd6, 0x2e, 0x0e, 0x09,
+ 0xdc, 0x25, 0xfc, 0x05, 0xdb, 0x1c, 0xdf, 0xca, 0xf3, 0xec, 0x27, 0x1c, 0x3e,
+ 0xc2, 0xde, 0x26, 0x37, 0xf6, 0xfe, 0x2f, 0x1a, 0x0b, 0xd9, 0xf5, 0xca, 0xf6,
+ 0xca, 0x1d, 0x10, 0x01, 0xfc, 0x08, 0xfd, 0xcf, 0x03, 0x1f, 0x1e, 0x32, 0xa4,
+ 0xe6, 0xed, 0x00, 0xd2, 0x27, 0xd7, 0xeb, 0x10, 0xe6, 0x1d, 0xe3, 0x00, 0xcf,
+ 0xff, 0x16, 0xdd, 0xcb, 0x09, 0x12, 0xe0, 0xf0, 0xee, 0x08, 0xf7, 0xc6, 0x24,
+ 0x44, 0x04, 0xaf, 0x22, 0xd7, 0x39, 0xef, 0x2c, 0xf8, 0x2b, 0xd9, 0x2b, 0xf8,
+ 0x0b, 0x4d, 0xca, 0xf8, 0xcb, 0x19, 0x1e, 0xfb, 0xd7, 0xf3, 0x1a, 0xf8, 0x4c,
+ 0x23, 0xe7, 0xf3, 0x00, 0x1d, 0x13, 0xe7, 0xf5, 0x39, 0xb3, 0x1c, 0xe8, 0x0b,
+ 0x27, 0xf0, 0xe6, 0x06, 0x40, 0x14, 0xd9, 0xe4, 0xce, 0x24, 0xd8, 0xc2, 0x16,
+ 0xdb, 0xf7, 0x29, 0xbb, 0x38, 0xf1, 0x01, 0xf9, 0x2a, 0x05, 0x07, 0xac, 0x13,
+ 0x0c, 0x04, 0xe9, 0xf6, 0x02, 0x04, 0x0c, 0x51, 0x07, 0xfa, 0xe0, 0x25, 0x2d,
+ 0x81, 0xe7, 0x0a, 0x02, 0x0c, 0xe8, 0x59, 0xd3, 0xf3, 0xf4, 0xec, 0xeb, 0x4e,
+ 0xef, 0xdb, 0x04, 0xf8, 0x0c, 0x13, 0x20, 0xde, 0xd4, 0x0b, 0xe1, 0x32, 0xd6,
+ 0xfa, 0x08, 0x02, 0xe2, 0x20, 0x2a, 0x28, 0x3a, 0xdd, 0xb2, 0x61, 0x5c, 0x21,
+ 0x1e, 0xf4, 0xb4, 0x0a, 0x30, 0xf2, 0x15, 0xd9, 0xd5, 0x25, 0x06, 0xbe, 0xca,
+ 0x04, 0xd4, 0xd6, 0x26, 0x5f, 0x02, 0xcd, 0x37, 0x54, 0x14, 0xd1, 0x35, 0x08,
+ 0x0e, 0x53, 0x17, 0x20, 0x35, 0x2d, 0x16, 0x61, 0x0f, 0xdb, 0xfb, 0xcd, 0xd0,
+ 0xee, 0x00, 0x47, 0x1c, 0x39, 0x14, 0x08, 0xe7, 0x2d, 0xcf, 0xfb, 0x13, 0x26,
+ 0xf5, 0xe6, 0xc4, 0xce, 0x3c, 0xe5, 0x11, 0x07, 0x37, 0x1b, 0xf6, 0x3f, 0x16,
+ 0x60, 0x07, 0xdf, 0x93, 0xcf, 0xd3, 0x9d, 0xbd, 0xda, 0x2d, 0x05, 0x01, 0xa1,
+ 0xe7, 0xe2, 0xcd, 0x1a, 0x20, 0xc5, 0xf0, 0x08, 0xd1, 0xc3, 0xa7, 0xd2, 0xbb,
+ 0x34, 0xf1, 0xe3, 0x7f, 0xe4, 0xe7, 0x18, 0xec, 0xf4, 0x59, 0xd9, 0xa3, 0x1c,
+ 0x0f, 0x41, 0xde, 0xe0, 0x09, 0xe6, 0x4d, 0xf2, 0x2c, 0xc2, 0x6a, 0x06, 0xbe,
+ 0xab, 0xbe, 0x36, 0x33, 0xd1, 0x1a, 0xba, 0xe1, 0xe5, 0x29, 0x37, 0x12, 0xb4,
+ 0xe2, 0xea, 0xd5, 0xd5, 0xfd, 0xcf, 0xde, 0xd0, 0xd0, 0x09, 0xf8, 0x19, 0x31,
+ 0x26, 0xcd, 0x3d, 0xcb, 0xfa, 0x00, 0x13, 0x07, 0xf4, 0x1a, 0xeb, 0x08, 0xde,
+ 0x04, 0xd9, 0x05, 0x3d, 0x0a, 0x0f, 0x0f, 0x37, 0x3f, 0xfe, 0xe5, 0x29, 0x16,
+ 0x1b, 0x15, 0xe2, 0xee, 0xfa, 0xf7, 0xb4, 0x0a, 0x12, 0x09, 0xf1, 0xf9, 0x6f,
+ 0xf0, 0xe5, 0x0c, 0x13, 0xe1, 0xac, 0xd0, 0xdd, 0xc1, 0x3f, 0xe8, 0xe1, 0x17,
+ 0x70, 0xf8, 0xb2, 0xf2, 0xf5, 0xdd, 0x45, 0xf7, 0x1e, 0xf1, 0x1c, 0x05, 0xe4,
+ 0x1f, 0xcb, 0x07, 0x10, 0x3a, 0xe3, 0xf6, 0xfe, 0x14, 0xed, 0x27, 0xcb, 0xdf,
+ 0xd4, 0x19, 0xe3, 0xdd, 0x15, 0xe6, 0x17, 0x13, 0xfe, 0xe7, 0x09, 0x0f, 0xcc,
+ 0x48, 0x6b, 0xfc, 0xfd, 0x17, 0xf7, 0x02, 0x11, 0xea, 0x19, 0xe9, 0xf0, 0x81,
+ 0xdd, 0x06, 0xea, 0x06, 0x03, 0xd8, 0x46, 0x24, 0x18, 0xb9, 0xd7, 0x1c, 0x0e,
+ 0x0d, 0x0a, 0xe1, 0x20, 0x26, 0x2c, 0x12, 0x94, 0x5f, 0x2c, 0x22, 0xcd, 0xe7,
+ 0x09, 0x1c, 0x1b, 0xd8, 0xea, 0x1e, 0x00, 0x56, 0xcf, 0x22, 0xef, 0xe3, 0xe5,
+ 0x31, 0x1a, 0xbe, 0xd5, 0x28, 0x2b, 0xfe, 0x27, 0xda, 0x17, 0x25, 0xdf, 0x51,
+ 0x22, 0xdb, 0x4d, 0x18, 0x2a, 0x4e, 0x3e, 0xec, 0xaf, 0x2f, 0x1d, 0x46, 0xcf,
+ 0x1f, 0x00, 0xe8, 0xfc, 0xd9, 0x04, 0x1f, 0x57, 0x72, 0x38, 0x05, 0x2f, 0xf6,
+ 0xfc, 0xe1, 0xf2, 0x2a, 0x0f, 0x32, 0xc7, 0x15, 0xf0, 0x0c, 0xea, 0x19, 0x7f,
+ 0x37, 0x0a, 0x2e, 0x47, 0xcd, 0x17, 0xee, 0x0c, 0x24, 0xf5, 0xb3, 0xfd, 0xd3,
+ 0xd3, 0xba, 0x11, 0xc8, 0xf2, 0xd4, 0xdb, 0x2c, 0x2f, 0xc9, 0xd3, 0x43, 0x0b,
+ 0xf8, 0xf6, 0x0c, 0xe7, 0x16, 0x0a, 0x84, 0xc7, 0xfc, 0xbd, 0x04, 0xe8, 0x06,
+ 0xf8, 0xea, 0x16, 0xf1, 0xc5, 0x02, 0x05, 0xee, 0xbf, 0xce, 0x1a, 0xe3, 0x82,
+ 0x01, 0x13, 0xeb, 0x57, 0xed, 0x15, 0x1e, 0xec, 0x38, 0x4b, 0x76, 0x10, 0x26,
+ 0xd4, 0xee, 0xf7, 0x2b, 0xe8, 0x02, 0x1b, 0x04, 0xbf, 0xcc, 0x17, 0x0a, 0x1d,
+ 0x13, 0x30, 0xf6, 0x19, 0x2b, 0x0a, 0xc7, 0x04, 0x47, 0x4c, 0x04, 0xdf, 0x26,
+ 0xd9, 0x00, 0xf7, 0xe4, 0xf5, 0x02, 0xe6, 0xc7, 0x09, 0x10, 0x96, 0x04, 0xfe,
+ 0x0c, 0xf3, 0xbe, 0x15, 0xba, 0x1c, 0x03, 0x10, 0xda, 0xf2, 0x81, 0xf5, 0xff,
+ 0x18, 0xa7, 0x1f, 0xff, 0x26, 0xd6, 0x45, 0xf3, 0x30, 0xea, 0xe2, 0xb1, 0xfe,
+ 0x36, 0x2f, 0x31, 0xb0, 0xfe, 0x33, 0x69, 0x1b, 0x0c, 0xe0, 0x3b, 0xbb, 0x13,
+ 0xfd, 0x2d, 0x25, 0x07, 0x0b, 0xd1, 0xf0, 0xc5, 0xdf, 0x4d, 0x63, 0x1e, 0x1c,
+ 0xf8, 0xd6, 0x15, 0xd4, 0xf8, 0x2c, 0xf9, 0x4e, 0xb4, 0x29, 0x15, 0xd0, 0x05,
+ 0x38, 0x2f, 0x12, 0xfe, 0x1a, 0x05, 0xee, 0xb5, 0xf9, 0xd6, 0xbd, 0x31, 0xfd,
+ 0xe8, 0x13, 0xc2, 0xf4, 0xad, 0xf4, 0x09, 0x12, 0xfa, 0x34, 0xf2, 0xe5, 0x0f,
+ 0xe8, 0xc0, 0x01, 0xc8, 0x2b, 0x01, 0xac, 0xda, 0x10, 0x35, 0x23, 0xf6, 0xfe,
+ 0x32, 0xe5, 0x09, 0x02, 0x1e, 0x7f, 0xbc, 0x21, 0x4b, 0x33, 0xff, 0xf7, 0xe7,
+ 0xe9, 0x08, 0x10, 0xed, 0x26, 0x32, 0x9f, 0xbf, 0x06, 0xf3, 0x50, 0x21, 0x1a,
+ 0x1b, 0x19, 0xf4, 0xbf, 0xe6, 0xf7, 0x1c, 0x12, 0xe6, 0xc0, 0x47, 0xe3, 0x13,
+ 0x27, 0xea, 0x0a, 0x35, 0xf8, 0x20, 0xcd, 0x92, 0x0b, 0x2c, 0xe5, 0xde, 0x11,
+ 0x04, 0x03, 0x0c, 0x42, 0xe0, 0xce, 0xd4, 0x20, 0xff, 0x22, 0x1f, 0xe8, 0xd2,
+ 0x03, 0xbd, 0x31, 0x6d, 0xf4, 0x0f, 0x06, 0x52, 0xcd, 0xc3, 0xf1, 0xc3, 0xe2,
+ 0x20, 0x0d, 0x10, 0x01, 0x15, 0xd1, 0x1f, 0xdc, 0x22, 0xf3, 0x2f, 0xe7, 0xf7,
+ 0x00, 0x0b, 0x0b, 0x12, 0x17, 0x44, 0xf5, 0xa2, 0xe5, 0x14, 0xf4, 0x0f, 0x3b,
+ 0xc6, 0x31, 0xf4, 0xcf, 0x2b, 0x08, 0xdf, 0xe1, 0xa3, 0x09, 0xfd, 0xf4, 0xc3,
+ 0xf0, 0xf0, 0x18, 0x3c, 0xf2, 0xb8, 0xf5, 0xe5, 0xe5, 0x05, 0x3a, 0xe6, 0x28,
+ 0xed, 0xe5, 0x2d, 0x2b, 0x17, 0xcf, 0x0e, 0xe4, 0xbd, 0x27, 0x09, 0xf8, 0x0c,
+ 0x15, 0xe2, 0xe9, 0xde, 0x24, 0x02, 0x08, 0xe8, 0x02, 0x04, 0x07, 0xcd, 0xf7,
+ 0x9a, 0xf3, 0x01, 0xec, 0xcf, 0xe1, 0xd5, 0xf8, 0x4f, 0x06, 0x1f, 0x15, 0xf5,
+ 0x2a, 0x0b, 0xea, 0xfc, 0x18, 0xd4, 0xf9, 0x33, 0x16, 0xf8, 0x7f, 0x39, 0x21,
+ 0x00, 0x13, 0x5f, 0xe3, 0xd7, 0xd6, 0xc4, 0x30, 0xf2, 0x08, 0xfd, 0xba, 0xf7,
+ 0x22, 0x0d, 0x1d, 0xf3, 0x31, 0xe7, 0xed, 0xd1, 0x39, 0xf5, 0x08, 0xce, 0xfa,
+ 0x1b, 0x01, 0x54, 0xfa, 0xb3, 0xf0, 0xc5, 0x3d, 0xfb, 0x01, 0x39, 0xd9, 0x02,
+ 0x1e, 0x25, 0xd1, 0xbd, 0x0a, 0x10, 0xd7, 0x24, 0x1b, 0xdd, 0xf1, 0xf7, 0xf8,
+ 0xf4, 0xea, 0x81, 0x27, 0x11, 0x2d, 0xfb, 0x64, 0x2c, 0x10, 0x16, 0x11, 0xed,
+ 0x0a, 0x09, 0xc1, 0x1b, 0x0c, 0xf3, 0x24, 0x0d, 0x39, 0x1d, 0x05, 0x18, 0xc8,
+ 0xde, 0x00, 0x1d, 0xf4, 0xf7, 0xea, 0xf8, 0x11, 0xcb, 0xfe, 0x11, 0x19, 0xed,
+ 0xea, 0xfc, 0x0f, 0xf0, 0xe3, 0xcc, 0xe0, 0xea, 0xa4, 0x25, 0x10, 0x04, 0xef,
+ 0x15, 0xeb, 0xc4, 0x01, 0xfe, 0x01, 0xd1, 0x01, 0xfe, 0xf9, 0x6f, 0x09, 0x17,
+ 0xdc, 0xe6, 0x2d, 0x08, 0xcd, 0xbe, 0x99, 0x30, 0xe4, 0x10, 0xb2, 0xaa, 0x22,
+ 0xc5, 0x00, 0x00, 0x06, 0xfd, 0xe3, 0xef, 0xc8, 0xf0, 0xe8, 0xb4, 0xf0, 0xf2,
+ 0x05, 0xe8, 0x11, 0xf9, 0x13, 0x1f, 0xf1, 0xf7, 0xe3, 0xe1, 0xc6, 0xc8, 0x00,
+ 0xf8, 0xf7, 0x42, 0x15, 0x19, 0xf7, 0xf5, 0xea, 0xf0, 0xbf, 0x19, 0x05, 0x13,
+ 0xe0, 0xc0, 0xdd, 0xd7, 0xcb, 0x13, 0xe7, 0x1d, 0x2e, 0xec, 0x08, 0xfe, 0xfc,
+ 0x18, 0x18, 0xdd, 0x10, 0x0b, 0xe3, 0x27, 0xe6, 0xf9, 0x11, 0x67, 0xfc, 0x1e,
+ 0xd4, 0x0b, 0xee, 0xf2, 0x1f, 0xfd, 0xb2, 0x02, 0x32, 0xcd, 0xc8, 0xf9, 0x0d,
+ 0x0c, 0xe6, 0xfd, 0x11, 0xe2, 0x0b, 0xee, 0xcd, 0x3a, 0xf3, 0xd8, 0x11, 0x10,
+ 0x05, 0x10, 0xf4, 0xdc, 0x0d, 0x36, 0x0a, 0xda, 0xf2, 0x38, 0x2f, 0x0c, 0x0c,
+ 0x05, 0x2a, 0xe4, 0xca, 0xfb, 0xd9, 0xfc, 0x05, 0xfc, 0xe1, 0xf7, 0xed, 0xcb,
+ 0x52, 0xfe, 0x00, 0x7f, 0xd9, 0x39, 0x32, 0xb1, 0x0d, 0xc0, 0x08, 0xfb, 0x16,
+ 0xb5, 0x10, 0x0e, 0x12, 0x31, 0xdb, 0x43, 0xc8, 0xca, 0xf0, 0xd1, 0xff, 0xf6,
+ 0x0f, 0xfe, 0x5f, 0xc2, 0x36, 0xe7, 0x0c, 0x1d, 0x15, 0xeb, 0x10, 0xf1, 0xc7,
+ 0x0a, 0x2b, 0xed, 0xd6, 0x2c, 0xc2, 0x02, 0xd2, 0xfd, 0xff, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0xc0, 0x32, 0xf7, 0x38, 0xec, 0xf3, 0xe0,
+ 0x99, 0xc8, 0x0a, 0x05, 0xb2, 0x2f, 0x1c, 0xc9, 0x08, 0xe5, 0x0b, 0x19, 0x05,
+ 0x12, 0x05, 0x29, 0xcc, 0x12, 0xef, 0xf6, 0x37, 0xe9, 0xc1, 0xe6, 0xf2, 0xef,
+ 0x28, 0xe8, 0xd4, 0xf8, 0x14, 0xc6, 0x41, 0x23, 0x06, 0x59, 0x26, 0x09, 0xf3,
+ 0xeb, 0xdc, 0x44, 0xfa, 0xdc, 0xca, 0xd0, 0x12, 0x31, 0x37, 0xe9, 0xf5, 0x0d,
+ 0x03, 0x07, 0xb4, 0xe7, 0xfe, 0xf1, 0xa4, 0x62, 0xf5, 0x3c, 0x36, 0xf1, 0x27,
+ 0x06, 0xc6, 0x0f, 0x2c, 0xd8, 0xdd, 0xf9, 0x03, 0x4c, 0x0b, 0xb0, 0xa9, 0x24,
+ 0xfd, 0x81, 0x31, 0x96, 0xce, 0x63, 0xca, 0x17, 0x58, 0x33, 0x0d, 0x12, 0xca,
+ 0xc6, 0x48, 0xae, 0xeb, 0x49, 0xe8, 0xe0, 0x43, 0x08, 0x40, 0xb6, 0xc8, 0x8f,
+ 0x3d, 0x5b, 0xcc, 0xf6, 0x56, 0x63, 0xf5, 0x0a, 0x0d, 0xd9, 0x99, 0xe4, 0x06,
+ 0xde, 0x24, 0xd3, 0x0d, 0x21, 0x39, 0x2f, 0x81, 0x12, 0x41, 0xaf, 0x0a, 0xf2,
+ 0xd3, 0xcf, 0xdb, 0x1f, 0x04, 0xf1, 0x04, 0x3c, 0x1a, 0x53, 0x31, 0x16, 0xe9,
+ 0x1c, 0xe3, 0x26, 0x32, 0xbb, 0xf1, 0x01, 0x01, 0x34, 0xc2, 0x08, 0x12, 0x1b,
+ 0x67, 0xfb, 0x40, 0xde, 0xc6, 0xdd, 0x6b, 0xc5, 0x0f, 0x01, 0xb9, 0xd6, 0xfa,
+ 0xf5, 0x28, 0xe4, 0x15, 0xe9, 0x08, 0x35, 0x5f, 0x29, 0xbe, 0xf6, 0x03, 0x02,
+ 0xaa, 0x3a, 0x06, 0x09, 0xc6, 0x2c, 0xf5, 0xc7, 0x09, 0x25, 0xdf, 0xee, 0x06,
+ 0x3f, 0x25, 0x08, 0x20, 0xf0, 0xe6, 0x9c, 0xfc, 0xa8, 0xdf, 0x07, 0x48, 0xdd,
+ 0xad, 0xed, 0xfa, 0x06, 0xe5, 0xd6, 0xb6, 0x27, 0xb8, 0x1c, 0x1f, 0x40, 0x29,
+ 0xf5, 0x19, 0x14, 0xe8, 0xe5, 0x33, 0x9a, 0x26, 0x0e, 0x47, 0xe2, 0xcf, 0x0c,
+ 0x00, 0x39, 0xe8, 0x2a, 0x2b, 0x0e, 0xe1, 0x29, 0x66, 0xf5, 0xf9, 0xc3, 0xde,
+ 0xcf, 0x0f, 0xde, 0xdb, 0xd8, 0x22, 0x10, 0x01, 0xf2, 0xc7, 0xca, 0x10, 0x15,
+ 0xcf, 0xeb, 0x08, 0xf0, 0xe5, 0x23, 0x0d, 0x20, 0x05, 0x06, 0x31, 0xe7, 0x03,
+ 0xdd, 0x4e, 0xd5, 0xf8, 0x4c, 0x5e, 0x17, 0x40, 0x7f, 0xca, 0x46, 0xbc, 0xb7,
+ 0xbe, 0x25, 0x14, 0x1b, 0xc6, 0x08, 0xea, 0x22, 0x98, 0xef, 0xe9, 0x18, 0xd0,
+ 0xe1, 0x1d, 0x3e, 0xd8, 0x06, 0x18, 0xd8, 0x38, 0xe8, 0xef, 0x36, 0xfa, 0x06,
+ 0xff, 0x14, 0xe5, 0xae, 0x33, 0x68, 0xdc, 0x00, 0x41, 0xe4, 0x2e, 0x0b, 0x26,
+ 0x19, 0xfb, 0xfc, 0x27, 0x53, 0xcd, 0xf9, 0x97, 0xdc, 0x21, 0x00, 0xd3, 0x32,
+ 0xd0, 0x13, 0x33, 0xee, 0x65, 0x48, 0x13, 0x9d, 0x00, 0x19, 0x28, 0xb1, 0x2a,
+ 0xdd, 0xd5, 0xfa, 0x1c, 0xd2, 0x09, 0xd6, 0x18, 0x28, 0xe4, 0xf3, 0x07, 0x0a,
+ 0xfa, 0x16, 0x12, 0xfd, 0xd2, 0xcc, 0x15, 0xf7, 0x1a, 0xe9, 0xed, 0xdd, 0xea,
+ 0x18, 0x03, 0xd8, 0x12, 0x0c, 0x15, 0xf9, 0x00, 0x6a, 0x41, 0xd8, 0xf4, 0xf8,
+ 0x0c, 0x1a, 0x37, 0x1e, 0x01, 0xf8, 0xd8, 0xe6, 0xf8, 0xe2, 0xdf, 0xb7, 0x09,
+ 0xe3, 0x3a, 0x08, 0x1b, 0xb3, 0xeb, 0xd0, 0x2b, 0xd8, 0x00, 0xf1, 0x5e, 0x31,
+ 0xcb, 0xc8, 0x7c, 0xf9, 0x81, 0xd4, 0x2f, 0xfe, 0x97, 0xcc, 0x1c, 0x75, 0xee,
+ 0xed, 0x4e, 0xf8, 0x14, 0xde, 0x49, 0x02, 0xe0, 0xe3, 0x58, 0xfd, 0xfb, 0xdf,
+ 0xfb, 0x14, 0x72, 0x19, 0x1f, 0xe8, 0x55, 0xd5, 0x0a, 0x4a, 0xd7, 0xbb, 0x1e,
+ 0x11, 0xe0, 0xcc, 0xe6, 0xf2, 0x27, 0xc8, 0x15, 0xf0, 0xf4, 0xfd, 0xdd, 0x42,
+ 0x1b, 0x2f, 0xcb, 0x13, 0xe5, 0xb1, 0x09, 0x1a, 0xcb, 0x23, 0x02, 0xe7, 0xe1,
+ 0x0b, 0xf2, 0x02, 0xcc, 0xeb, 0x12, 0x20, 0x24, 0xe3, 0xe1, 0xb9, 0xff, 0xbd,
+ 0x1a, 0x89, 0xfc, 0x1e, 0x38, 0xec, 0x04, 0x1b, 0x22, 0xf8, 0x0e, 0xf4, 0x41,
+ 0x0d, 0xf9, 0xf5, 0xfe, 0xe3, 0xf4, 0xfa, 0x10, 0x0b, 0xec, 0xc4, 0x24, 0x11,
+ 0x15, 0x05, 0x26, 0x10, 0xf0, 0xeb, 0x10, 0x04, 0xd4, 0x00, 0x29, 0xf8, 0x14,
+ 0x11, 0x18, 0xf8, 0x23, 0xe4, 0x10, 0x7f, 0x02, 0x13, 0x3e, 0xf8, 0xfb, 0x2e,
+ 0xd4, 0x0d, 0xfc, 0xdc, 0xfb, 0x52, 0xe2, 0x1d, 0xfb, 0x05, 0x07, 0xe7, 0xed,
+ 0x24, 0xff, 0xf0, 0xd9, 0xe4, 0xf8, 0x3b, 0x46, 0x05, 0xec, 0xea, 0xd7, 0x0b,
+ 0xec, 0x08, 0xf1, 0x3a, 0x22, 0xfa, 0xe5, 0x06, 0xfb, 0xf8, 0x12, 0x11, 0xee,
+ 0x0d, 0xee, 0xea, 0x0b, 0xf0, 0xed, 0x12, 0xe6, 0xe0, 0x05, 0xe2, 0xf6, 0x07,
+ 0xe2, 0xd9, 0x05, 0xe6, 0xf2, 0x3e, 0x02, 0xce, 0x19, 0x02, 0x31, 0xfe, 0xda,
+ 0xfa, 0x3b, 0x19, 0xf6, 0x04, 0x07, 0x14, 0xfc, 0x52, 0xf6, 0xf9, 0x2f, 0x16,
+ 0x0b, 0x15, 0x04, 0x1d, 0xf3, 0xdf, 0x29, 0xbf, 0xeb, 0xf2, 0xae, 0x12, 0xe3,
+ 0x2a, 0x0a, 0xe1, 0xcc, 0x13, 0x34, 0x0d, 0xf1, 0xe2, 0x2e, 0xcb, 0x00, 0x1a,
+ 0x24, 0x0c, 0xe0, 0x08, 0x0a, 0xeb, 0xed, 0x2a, 0x0b, 0x26, 0x07, 0x27, 0xf3,
+ 0xee, 0xf2, 0x09, 0xf3, 0x19, 0xc8, 0x27, 0x26, 0xef, 0xef, 0xcb, 0x08, 0x25,
+ 0xf2, 0xdb, 0xc4, 0x05, 0xd8, 0xf5, 0x09, 0xde, 0x07, 0xe2, 0xe3, 0x11, 0xbe,
+ 0xce, 0xc1, 0xa0, 0x58, 0x0b, 0x09, 0x35, 0xf1, 0x81, 0xed, 0xe2, 0x2e, 0x07,
+ 0x34, 0xd0, 0xe5, 0x20, 0x1a, 0x01, 0x0e, 0x41, 0xd6, 0xea, 0x26, 0x3c, 0xf8,
+ 0xd3, 0x12, 0x1e, 0x02, 0x4e, 0x02, 0x01, 0xe0, 0x0e, 0x05, 0xfc, 0x0c, 0x07,
+ 0x27, 0xd9, 0x00, 0x08, 0x11, 0xfe, 0xe1, 0x11, 0xf1, 0x16, 0xe6, 0x04, 0x05,
+ 0xf3, 0x51, 0x3e, 0xeb, 0xfa, 0xd5, 0x0e, 0xd7, 0x00, 0xfe, 0xfa, 0xd7, 0xe9,
+ 0x42, 0x03, 0xdf, 0x04, 0xe6, 0x16, 0xfa, 0xb6, 0x06, 0x06, 0xd6, 0xf8, 0xa2,
+ 0xce, 0x2c, 0xfb, 0xb7, 0x1c, 0xef, 0xe4, 0x1e, 0x33, 0xf7, 0xa9, 0x03, 0x60,
+ 0x2e, 0x5e, 0x1d, 0x08, 0x28, 0x44, 0xdd, 0xf3, 0xfd, 0xd1, 0x0b, 0xbd, 0xed,
+ 0xfc, 0x31, 0x26, 0x20, 0x52, 0xe7, 0x07, 0xa3, 0x12, 0xfe, 0x5c, 0x01, 0xbc,
+ 0xd8, 0x2f, 0xfd, 0x0e, 0xc9, 0xdc, 0x28, 0xfd, 0xf1, 0xd0, 0x10, 0xa2, 0xd0,
+ 0x0c, 0xda, 0x0d, 0xc9, 0xea, 0x02, 0x14, 0xc6, 0xed, 0xde, 0xde, 0xc1, 0xc9,
+ 0xcd, 0xe2, 0xd1, 0xf6, 0xd4, 0x38, 0x08, 0x20, 0xf3, 0xb5, 0xf8, 0xbb, 0x17,
+ 0xc0, 0x1d, 0xd3, 0x26, 0x3f, 0xe0, 0xfc, 0x9c, 0x15, 0xec, 0x3f, 0xdf, 0x3b,
+ 0xd9, 0x1b, 0x56, 0x9f, 0x35, 0xfd, 0xdc, 0x18, 0xfc, 0x9e, 0xe7, 0x29, 0x01,
+ 0x23, 0xb7, 0xf8, 0xf0, 0x54, 0xe4, 0x05, 0x00, 0x7f, 0xd9, 0xf7, 0x5b, 0xdf,
+ 0x13, 0xbf, 0xe5, 0xed, 0xe6, 0xff, 0x30, 0x16, 0x5f, 0x2f, 0xde, 0x5e, 0x08,
+ 0x28, 0xbd, 0x1e, 0x09, 0x53, 0xb5, 0x32, 0xf6, 0xd1, 0xe2, 0x04, 0xd7, 0x64,
+ 0xfb, 0xe2, 0xf9, 0xfc, 0x50, 0x1a, 0x23, 0xc1, 0x09, 0x31, 0x15, 0x50, 0x29,
+ 0xf9, 0x38, 0xe8, 0xbe, 0x7c, 0xbc, 0xe8, 0x3c, 0x2a, 0xdb, 0x09, 0xe2, 0xd5,
+ 0x3a, 0x52, 0x3d, 0xb6, 0xda, 0xdd, 0x22, 0xfc, 0xfc, 0xec, 0xed, 0x40, 0xd8,
+ 0x17, 0xae, 0xef, 0xf6, 0xdb, 0xe6, 0x7f, 0xfa, 0x16, 0x09, 0x11, 0x04, 0xfc,
+ 0x22, 0xbc, 0xde, 0x4d, 0xf9, 0x15, 0x52, 0xf9, 0x0b, 0xf4, 0x38, 0x23, 0xfb,
+ 0xa7, 0x29, 0xde, 0x2e, 0x34, 0x0c, 0x45, 0xff, 0x2a, 0x05, 0xb8, 0xed, 0xf9,
+ 0x22, 0x9d, 0x02, 0x36, 0x02, 0xd6, 0xad, 0x17, 0xe0, 0x2e, 0x38, 0x7e, 0x09,
+ 0x1b, 0xd4, 0x41, 0xfd, 0xe5, 0x0d, 0x2c, 0xe6, 0x0b, 0xf7, 0x00, 0xb3, 0x0e,
+ 0xff, 0xae, 0x21, 0xad, 0xd4, 0x28, 0xc1, 0x16, 0x48, 0x75, 0x01, 0xfe, 0xe6,
+ 0x49, 0xf0, 0xad, 0xcf, 0xd6, 0x02, 0xee, 0xdb, 0x16, 0xa4, 0xbc, 0x01, 0xe2,
+ 0x22, 0x17, 0xf1, 0x0e, 0xf2, 0xdb, 0xe1, 0xe2, 0x44, 0xe4, 0x19, 0xe6, 0x2f,
+ 0xe2, 0xf1, 0x2e, 0x36, 0x06, 0xa8, 0x2d, 0x22, 0xef, 0xeb, 0xd4, 0x69, 0x35,
+ 0xc1, 0x09, 0xd4, 0xc6, 0xc3, 0xd4, 0x7f, 0x37, 0xdf, 0xd5, 0xff, 0xf1, 0x89,
+ 0x22, 0x49, 0xba, 0x29, 0x28, 0x09, 0x0e, 0x48, 0x00, 0xec, 0xf1, 0x08, 0xeb,
+ 0x32, 0xe3, 0xf4, 0x04, 0xff, 0x24, 0xff, 0x70, 0xe0, 0xea, 0x17, 0xf2, 0x22,
+ 0xa5, 0x0a, 0x2b, 0x02, 0x06, 0x10, 0x18, 0x0a, 0x5d, 0xef, 0x58, 0x0a, 0xd2,
+ 0xe3, 0xa7, 0x24, 0x5f, 0x18, 0xd3, 0x16, 0x08, 0x36, 0xd9, 0xf5, 0x0c, 0xde,
+ 0xbd, 0xf5, 0x0e, 0xe0, 0xae, 0x21, 0x22, 0x6e, 0x24, 0xf9, 0xdd, 0x09, 0x29,
+ 0x5b, 0x0f, 0xdb, 0x1a, 0xa7, 0xd8, 0x13, 0xfa, 0xf1, 0x38, 0xef, 0x1b, 0x18,
+ 0x37, 0x11, 0x05, 0xf5, 0x13, 0x21, 0x30, 0x11, 0xcb, 0xe5, 0xf0, 0xdd, 0xf3,
+ 0x09, 0x08, 0x34, 0xfa, 0xee, 0xfe, 0x0f, 0x00, 0x7f, 0xed, 0x1b, 0x98, 0xce,
+ 0xcd, 0xc5, 0xec, 0x23, 0xf2, 0xe0, 0xe0, 0xdb, 0xea, 0xd0, 0xf7, 0xeb, 0x1d,
+ 0xd2, 0x47, 0x24, 0xfe, 0x13, 0xd1, 0xfd, 0xd3, 0x31, 0xc4, 0xd9, 0x28, 0x2d,
+ 0x1f, 0xe8, 0x1f, 0xfe, 0xe2, 0x06, 0xcf, 0xea, 0x1b, 0xc5, 0xed, 0xe3, 0xc0,
+ 0x1f, 0xe8, 0x04, 0xf5, 0xde, 0xda, 0xcc, 0x03, 0x1b, 0xf8, 0x15, 0x14, 0x09,
+ 0xf0, 0xcb, 0xbe, 0xfb, 0xc8, 0xef, 0x0e, 0xfa, 0x1b, 0x34, 0xe1, 0x14, 0x0d,
+ 0xfd, 0x0c, 0x07, 0xe9, 0x52, 0xb1, 0xec, 0xf6, 0xe7, 0xcc, 0xf1, 0xb4, 0xed,
+ 0xdc, 0xe7, 0xd9, 0x2a, 0x14, 0xec, 0xf5, 0x0c, 0xbf, 0xef, 0xf8, 0xd6, 0xb0,
+ 0x46, 0xda, 0xee, 0xd9, 0x11, 0x2b, 0x48, 0x2b, 0xd3, 0xc9, 0xcd, 0x0e, 0xa7,
+ 0x08, 0x05, 0xe4, 0x30, 0x14, 0xcc, 0xf0, 0x61, 0x16, 0xfb, 0x87, 0x01, 0x1e,
+ 0x68, 0x0b, 0x38, 0xe7, 0xad, 0x0e, 0x27, 0xe1, 0xc8, 0x37, 0xe3, 0x32, 0x46,
+ 0xf6, 0xdd, 0x32, 0xcd, 0xbd, 0xfd, 0xd4, 0xc7, 0x0b, 0xff, 0x19, 0xb9, 0xf6,
+ 0x53, 0x1b, 0xf1, 0xda, 0xfb, 0xa9, 0x17, 0xce, 0x35, 0x27, 0x2f, 0xa7, 0x33,
+ 0xf6, 0x0c, 0x0c, 0xec, 0xcb, 0xd3, 0x22, 0xe7, 0x81, 0x2a, 0x01, 0xd6, 0x29,
+ 0xf6, 0xf9, 0x0d, 0xfc, 0xf5, 0xc8, 0xf0, 0x07, 0xf9, 0xdd, 0x12, 0xd4, 0x33,
+ 0xfc, 0x1c, 0xfc, 0xcc, 0xcb, 0xa5, 0xfa, 0x64, 0xdd, 0x44, 0xe2, 0xfc, 0xf2,
+ 0xd4, 0x31, 0x66, 0x05, 0x2c, 0xe2, 0x1f, 0xd4, 0x49, 0xd8, 0xf7, 0xad, 0x4c,
+ 0xf2, 0xe2, 0x06, 0x1a, 0x00, 0x22, 0x21, 0x10, 0xa9, 0xec, 0xdd, 0xe4, 0x11,
+ 0x09, 0xf2, 0xf4, 0xf3, 0xcb, 0x26, 0x55, 0xf9, 0xdd, 0xd8, 0x23, 0x2a, 0x33,
+ 0x2c, 0x04, 0x17, 0xb4, 0xb8, 0x0e, 0xcc, 0xf4, 0x37, 0x2f, 0xe5, 0x40, 0x04,
+ 0x07, 0xe3, 0x0d, 0x18, 0x17, 0x0d, 0x18, 0x39, 0x2d, 0xd8, 0xf1, 0xb5, 0xea,
+ 0x1a, 0xfc, 0xd3, 0xe2, 0x00, 0x13, 0xf2, 0xc5, 0xe2, 0xe6, 0xae, 0xd6, 0x13,
+ 0xdf, 0xc0, 0xb2, 0xd2, 0x00, 0x39, 0x09, 0x27, 0xfb, 0x81, 0x01, 0xde, 0x2b,
+ 0xfe, 0x33, 0x39, 0xfb, 0xfe, 0xfe, 0xf1, 0x06, 0xc3, 0xe4, 0x00, 0xd3, 0xc6,
+ 0x1f, 0x4b, 0x0e, 0xaf, 0x03, 0x36, 0xe7, 0xdd, 0xe4, 0xfd, 0xc8, 0xf4, 0xcb,
+ 0x1a, 0xf4, 0x0f, 0x03, 0x2f, 0xe5, 0xcd, 0x30, 0xbc, 0x2a, 0x2a, 0xf0, 0xfb,
+ 0xd7, 0x4c, 0x30, 0xdf, 0xcc, 0xcb, 0xe8, 0xe4, 0xf9, 0x07, 0x17, 0xf2, 0x02,
+ 0xc6, 0xf2, 0x39, 0x37, 0xfa, 0x21, 0xe5, 0xe6, 0x1d, 0xfe, 0xfc, 0x31, 0xef,
+ 0xd0, 0x19, 0x28, 0x0e, 0x4e, 0x1d, 0x1b, 0x46, 0xef, 0xef, 0x40, 0xd7, 0xf9,
+ 0x05, 0x15, 0x16, 0xf4, 0x01, 0x15, 0xa0, 0x04, 0x06, 0xaf, 0xc8, 0xe0, 0x08,
+ 0x00, 0xd5, 0x0d, 0x35, 0x03, 0x15, 0xdd, 0xdc, 0xe6, 0x33, 0xa0, 0xe6, 0xdf,
+ 0x37, 0xc6, 0x25, 0xdb, 0xde, 0xff, 0xfe, 0xfc, 0xc1, 0x24, 0x03, 0x5e, 0xe5,
+ 0xd7, 0xc7, 0xb2, 0xdc, 0x9c, 0x30, 0x12, 0xe9, 0xef, 0xde, 0x30, 0x11, 0xfb,
+ 0xff, 0xd7, 0x26, 0xfa, 0xd2, 0x52, 0x25, 0xe4, 0x24, 0x31, 0x1c, 0xf9, 0x14,
+ 0xec, 0x98, 0x1c, 0xeb, 0x20, 0xc5, 0xed, 0x81, 0xed, 0x08, 0xf7, 0x85, 0x0b,
+ 0xee, 0xb2, 0xf6, 0x1a, 0xf1, 0x04, 0x11, 0xcf, 0xea, 0xe9, 0x02, 0xf1, 0x01,
+ 0x29, 0x4d, 0xc9, 0xf6, 0x57, 0xdf, 0xc6, 0x3c, 0x39, 0x1c, 0xee, 0x04, 0xbd,
+ 0x43, 0xe5, 0xc8, 0xec, 0x03, 0xb5, 0xd1, 0x4a, 0x01, 0x51, 0x02, 0xe1, 0xb6,
+ 0xfb, 0x03, 0xfa, 0xde, 0xae, 0xa2, 0xff, 0xda, 0x01, 0xf5, 0xfa, 0xf1, 0x21,
+ 0x55, 0x28, 0x05, 0xf1, 0xe7, 0x20, 0x06, 0x15, 0x12, 0xf3, 0xe6, 0xf7, 0x6b,
+ 0x22, 0xfb, 0xf1, 0xef, 0x4e, 0x64, 0x28, 0x1f, 0x81, 0xc2, 0xfe, 0xbc, 0x1c,
+ 0xce, 0xac, 0x14, 0x99, 0x13, 0x0f, 0xd6, 0x07, 0x08, 0x1d, 0x30, 0x2c, 0xfd,
+ 0x1e, 0x0e, 0xda, 0xcc, 0xdc, 0xcf, 0x0d, 0xbf, 0xf7, 0x25, 0xaf, 0x3e, 0xad,
+ 0xe0, 0x01, 0x26, 0x0c, 0xae, 0x1f, 0x04, 0xf3, 0xbe, 0xf4, 0xc8, 0x4e, 0x02,
+ 0xcb, 0xf7, 0xec, 0xbb, 0x18, 0x3a, 0x44, 0xe1, 0xea, 0x05, 0xf7, 0x6f, 0x2a,
+ 0xa5, 0x3c, 0xf1, 0xfd, 0x7c, 0x22, 0xfa, 0xed, 0x23, 0xce, 0x0e, 0xd8, 0xee,
+ 0x29, 0x0f, 0xfc, 0x2d, 0x14, 0xd4, 0xe8, 0xed, 0xe6, 0xfb, 0x0d, 0xf4, 0xf9,
+ 0xff, 0xfc, 0x0a, 0xef, 0x2e, 0x14, 0x19, 0xe9, 0xbe, 0x7e, 0x30, 0x25, 0x6f,
+ 0x22, 0xd2, 0x11, 0xee, 0x10, 0xbe, 0xec, 0xdf, 0xa4, 0x28, 0xe3, 0xd0, 0xfe,
+ 0xe0, 0x07, 0x1d, 0x18, 0x91, 0x20, 0xf4, 0xac, 0x06, 0x0d, 0x36, 0x3f, 0x0b,
+ 0x15, 0x03, 0xb7, 0xce, 0x14, 0xec, 0x0f, 0xe1, 0xe1, 0x14, 0xaa, 0xda, 0x0e,
+ 0xeb, 0x0b, 0x06, 0xe8, 0x2b, 0x34, 0x0d, 0x2c, 0x38, 0x27, 0xb9, 0x70, 0x1d,
+ 0xfe, 0x4e, 0xf8, 0x16, 0x3a, 0x07, 0x4c, 0x27, 0x10, 0x45, 0xe2, 0xd9, 0x4b,
+ 0xec, 0xab, 0xa2, 0x02, 0xcb, 0x5d, 0xe2, 0x4d, 0x5b, 0x94, 0xf1, 0x6c, 0x20,
+ 0xc9, 0x00, 0xf6, 0x03, 0xfa, 0xef, 0x3a, 0x06, 0xe9, 0x30, 0xed, 0x11, 0xdd,
+ 0xdb, 0x15, 0xc3, 0x08, 0x4f, 0x59, 0x8e, 0xaf, 0x30, 0x29, 0x81, 0xdf, 0xe9,
+ 0xe6, 0xdb, 0xf8, 0x38, 0x40, 0x99, 0x5d, 0xeb, 0xc9, 0x0a, 0x17, 0x51, 0xc8,
+ 0x1b, 0xfb, 0x0a, 0xc1, 0xf0, 0x28, 0xf7, 0xa2, 0xf0, 0xc9, 0x34, 0xe6, 0xc0,
+ 0x8a, 0xf9, 0x06, 0x3c, 0xe3, 0xb9, 0xf7, 0x09, 0xec, 0xcd, 0x39, 0xd8, 0x03,
+ 0xc3, 0xf6, 0x0c, 0xe1, 0x04, 0xa2, 0x12, 0xc3, 0xe9, 0xd3, 0x05, 0x7f, 0x55,
+ 0xd0, 0xdb, 0x5c, 0x15, 0xef, 0xfc, 0x16, 0xcf, 0xc8, 0xd5, 0x1f, 0xfe, 0x5f,
+ 0x02, 0x51, 0x0c, 0x22, 0xff, 0xd7, 0x2c, 0xeb, 0x34, 0x19, 0x51, 0xfc, 0xe5,
+ 0xed, 0x37, 0xfd, 0xc5, 0x1c, 0xde, 0xd3, 0xf0, 0xd4, 0xf1, 0x07, 0xee, 0x3c,
+ 0xf2, 0xdc, 0xf0, 0xe3, 0x0f, 0x06, 0x32, 0x6d, 0xef, 0xc5, 0xe4, 0xda, 0x96,
+ 0xfe, 0xe1, 0x56, 0x00, 0xda, 0xf0, 0x2f, 0xd4, 0xe6, 0xe2, 0x15, 0xee, 0xfc,
+ 0xec, 0x3c, 0x25, 0xed, 0x2e, 0xcc, 0xd5, 0xe9, 0x91, 0xf8, 0xff, 0xf1, 0x59,
+ 0xd8, 0x0e, 0xe4, 0x18, 0xd1, 0xb6, 0x42, 0xef, 0x06, 0x02, 0x02, 0xce, 0xe3,
+ 0xf9, 0xe9, 0xd7, 0xe3, 0xfb, 0xd1, 0x2d, 0xf3, 0x17, 0xd5, 0x37, 0xd5, 0x2b,
+ 0xf4, 0xc7, 0x00, 0x1a, 0x2e, 0xff, 0xff, 0x0e, 0xce, 0x15, 0x00, 0x19, 0x2f,
+ 0x12, 0xf9, 0x25, 0x4a, 0xd3, 0xd6, 0xed, 0xa9, 0xe0, 0xd6, 0xff, 0x33, 0xfb,
+ 0x51, 0x0b, 0xe5, 0x4f, 0xda, 0x39, 0x42, 0xb4, 0x34, 0xee, 0xd2, 0x20, 0xf9,
+ 0x50, 0xd9, 0xff, 0xf2, 0x77, 0x12, 0xf6, 0x66, 0x1e, 0xe0, 0xb9, 0xfb, 0xb7,
+ 0x2a, 0xec, 0x03, 0x24, 0xdc, 0xed, 0xfa, 0xf4, 0xd2, 0xd6, 0xd6, 0xec, 0xfb,
+ 0xf9, 0x27, 0x54, 0xd9, 0x43, 0x0f, 0xfb, 0xfa, 0x01, 0xcf, 0xf1, 0x03, 0x0b,
+ 0x3b, 0xcd, 0x56, 0x14, 0x29, 0x00, 0xb6, 0x01, 0x48, 0xf9, 0xf8, 0x02, 0xf4,
+ 0x44, 0x7f, 0xf1, 0x1c, 0xeb, 0xac, 0x18, 0x14, 0xd0, 0x12, 0xef, 0x22, 0xf1,
+ 0x04, 0x09, 0xf4, 0xfa, 0xc2, 0x54, 0xdf, 0x31, 0xe1, 0x0a, 0xf3, 0xaf, 0x18,
+ 0x06, 0x36, 0xd8, 0x2d, 0x14, 0xbe, 0xe9, 0xe6, 0xe4, 0xfb, 0x0f, 0x2c, 0x18,
+ 0x01, 0x33, 0xf8, 0xeb, 0xed, 0xb8, 0xf0, 0x05, 0x05, 0xd7, 0xe3, 0xf5, 0xf6,
+ 0x09, 0x13, 0x0e, 0x02, 0xfb, 0xff, 0xe4, 0x08, 0x17, 0xf9, 0x1f, 0x13, 0xe6,
+ 0xf3, 0x7f, 0x0c, 0xae, 0xe5, 0x07, 0xf4, 0x27, 0x25, 0x45, 0x08, 0xc0, 0xa9,
+ 0x0f, 0x12, 0x2b, 0xe5, 0x6f, 0x26, 0x28, 0xe0, 0x1f, 0xee, 0x39, 0xeb, 0x32,
+ 0x0a, 0x12, 0x28, 0x16, 0x05, 0xe9, 0xe8, 0x16, 0xe9, 0x0a, 0xfc, 0x22, 0xe9,
+ 0x06, 0x00, 0x3d, 0x1a, 0x2b, 0x16, 0xaa, 0x0f, 0xfe, 0x01, 0x11, 0xda, 0x2b,
+ 0xea, 0xf3, 0xc7, 0x37, 0xea, 0xd7, 0xef, 0x2a, 0xd1, 0x26, 0x3b, 0xfa, 0xbe,
+ 0x04, 0xc3, 0xd5, 0xe6, 0x65, 0x4b, 0x0c, 0xfc, 0x1e, 0x32, 0x1c, 0x47, 0xe8,
+ 0x19, 0x05, 0xd9, 0x0e, 0xe7, 0xfc, 0xff, 0xb6, 0xe4, 0x1f, 0x15, 0x3a, 0x0d,
+ 0xbf, 0x07, 0xf1, 0x74, 0xef, 0x81, 0xe6, 0x38, 0x23, 0xe5, 0x24, 0xcc, 0x11,
+ 0x38, 0xec, 0x3d, 0xd1, 0x02, 0xdc, 0xd2, 0x0c, 0x14, 0x17, 0xff, 0xfc, 0xe7,
+ 0x13, 0xe1, 0x0a, 0xed, 0x28, 0x23, 0x14, 0xe5, 0x5d, 0xdd, 0x02, 0x46, 0xe0,
+ 0xe2, 0x2d, 0xf6, 0xfe, 0xc9, 0x0a, 0xc4, 0xe9, 0xba, 0xb2, 0x27, 0xc7, 0xfc,
+ 0x45, 0xc4, 0x92, 0xd0, 0xaf, 0x0e, 0xc3, 0x1a, 0xfd, 0xfa, 0x00, 0xc8, 0xfa,
+ 0xb0, 0xfb, 0x10, 0xd9, 0x23, 0x2a, 0xe2, 0x2c, 0x50, 0xf9, 0x2a, 0xe1, 0xf9,
+ 0x1a, 0xd0, 0xe5, 0xe2, 0xfe, 0xe9, 0x3e, 0x13, 0x28, 0xee, 0xe1, 0x29, 0xff,
+ 0xc2, 0x0d, 0xe7, 0x21, 0x47, 0xe5, 0x51, 0x0a, 0xdb, 0x8c, 0xef, 0x0e, 0x2c,
+ 0xf1, 0xeb, 0x15, 0x0e, 0xf2, 0x0f, 0xfa, 0xdd, 0xaf, 0x23, 0x33, 0xf0, 0x10,
+ 0x3d, 0x16, 0x0b, 0xff, 0x46, 0xdb, 0xe7, 0x12, 0xa4, 0x17, 0x1e, 0xbf, 0xdc,
+ 0x20, 0x12, 0xea, 0x1c, 0x19, 0x5d, 0x71, 0x32, 0xe2, 0xfe, 0x01, 0x35, 0x3b,
+ 0xf8, 0x8e, 0xfe, 0x3e, 0x4b, 0xd2, 0xfb, 0xcc, 0xd9, 0xc9, 0xf2, 0xf5, 0x04,
+ 0x30, 0x22, 0xe0, 0xf2, 0xc0, 0x05, 0x05, 0xd5, 0xee, 0x40, 0xa6, 0x91, 0x40,
+ 0x58, 0x20, 0xce, 0xa8, 0xd6, 0x61, 0xec, 0x1b, 0xec, 0xf3, 0x42, 0xb1, 0xfd,
+ 0xd9, 0xc3, 0x92, 0xd6, 0xcf, 0x1f, 0xfc, 0xd8, 0x59, 0x23, 0x0b, 0xc2, 0xf1,
+ 0x55, 0x05, 0xf0, 0x27, 0x32, 0x49, 0x62, 0x06, 0x26, 0x0d, 0xfc, 0xe0, 0xcf,
+ 0x1f, 0xcd, 0x81, 0xc1, 0x05, 0xeb, 0x15, 0xce, 0x54, 0x10, 0xd3, 0x57, 0xd4,
+ 0xf4, 0x29, 0x10, 0xe5, 0x2c, 0x3f, 0xf4, 0xa6, 0xf5, 0xed, 0x06, 0xf5, 0x0d,
+ 0xcc, 0xff, 0x2b, 0x0a, 0xe5, 0xe3, 0x0c, 0xe2, 0x28, 0x50, 0x22, 0x18, 0xe0,
+ 0x0b, 0xbf, 0x0d, 0x0e, 0xec, 0xdf, 0xf9, 0x10, 0xf6, 0x1c, 0x0a, 0xf3, 0x17,
+ 0xe9, 0xd2, 0x3c, 0x1c, 0x16, 0x06, 0xe7, 0x38, 0xd0, 0xed, 0x05, 0x1c, 0xc5,
+ 0xf8, 0xec, 0x10, 0xf7, 0xc1, 0xda, 0x1b, 0xda, 0x0d, 0xf5, 0xe3, 0x15, 0xf8,
+ 0xea, 0xdb, 0xd4, 0x21, 0x07, 0x10, 0x19, 0x45, 0x66, 0xd1, 0x15, 0x09, 0x1f,
+ 0xec, 0x19, 0xd6, 0x18, 0x0a, 0xe3, 0xee, 0xf5, 0xf9, 0xfb, 0xdd, 0x01, 0xec,
+ 0x33, 0xfe, 0xed, 0xd3, 0xe0, 0xf0, 0x78, 0x07, 0xe9, 0xf8, 0xc9, 0x7f, 0x2d,
+ 0xbe, 0xf5, 0xf0, 0x10, 0x23, 0x20, 0x08, 0xea, 0xe9, 0xb3, 0xe7, 0x0d, 0xea,
+ 0x2f, 0xef, 0x1d, 0xfd, 0xff, 0x01, 0x0a, 0x1c, 0x09, 0xd7, 0x0f, 0xf9, 0x00,
+ 0xed, 0xd0, 0xf6, 0xd4, 0xdc, 0x1b, 0x0a, 0xe9, 0x38, 0x06, 0xed, 0x32, 0xf8,
+ 0xee, 0x15, 0xe1, 0x13, 0x1c, 0x13, 0x0b, 0xbb, 0x21, 0x05, 0x0b, 0xcb, 0xfe,
+ 0xf3, 0xdb, 0xf7, 0xf5, 0xd7, 0x25, 0xfb, 0xd1, 0x07, 0x00, 0xa8, 0x12, 0x1f,
+ 0x0b, 0xd3, 0x41, 0x17, 0xe7, 0xfe, 0xea, 0x14, 0xfc, 0xf3, 0x45, 0xf8, 0xcd,
+ 0x09, 0x5b, 0xc9, 0xdb, 0x9e, 0xfd, 0x2c, 0x10, 0x04, 0x27, 0x4c, 0x08, 0x0a,
+ 0xb6, 0xe8, 0xc1, 0xda, 0x03, 0xaa, 0x7f, 0xfc, 0xde, 0xc1, 0x2d, 0xd9, 0x13,
+ 0xe6, 0x18, 0x05, 0xe8, 0xee, 0xfc, 0x4c, 0xcf, 0xe4, 0x1d, 0xcd, 0xbd, 0xaf,
+ 0x04, 0xda, 0xf5, 0xcc, 0xfa, 0x1e, 0xea, 0xdf, 0xb7, 0x03, 0x43, 0xfb, 0xf7,
+ 0x42, 0x53, 0xac, 0x09, 0x02, 0x41, 0x42, 0x04, 0x05, 0x26, 0x82, 0x98, 0xe7,
+ 0x2e, 0x28, 0x16, 0x01, 0x43, 0xe0, 0xd4, 0x34, 0xf2, 0xd9, 0x20, 0x60, 0x00,
+ 0x15, 0x1f, 0x27, 0xa9, 0x33, 0xcb, 0x08, 0x19, 0xde, 0xaf, 0x21, 0x24, 0x06,
+ 0xec, 0xfc, 0x05, 0x1b, 0xcf, 0xe4, 0x3d, 0x22, 0xec, 0xfa, 0xd6, 0x0b, 0xf6,
+ 0x15, 0xf8, 0xf4, 0x05, 0xec, 0xe9, 0x32, 0xe3, 0x19, 0x30, 0x29, 0xf8, 0x15,
+ 0xf4, 0xeb, 0xae, 0x4d, 0x15, 0x32, 0xf8, 0xf9, 0xe5, 0x19, 0x08, 0x2f, 0xe1,
+ 0x31, 0xf9, 0x17, 0xbf, 0xee, 0x11, 0x14, 0xb6, 0x08, 0x08, 0xf2, 0xd4, 0x17,
+ 0xfb, 0x2e, 0x7f, 0x09, 0xea, 0xdf, 0xf9, 0xff, 0x0e, 0xef, 0xbc, 0xe3, 0xc4,
+ 0x37, 0xf9, 0xcf, 0xca, 0x03, 0xcf, 0x06, 0x2c, 0xc0, 0x16, 0xd6, 0xc9, 0x0e,
+ 0xe5, 0x3c, 0x02, 0x5e, 0x02, 0x19, 0x33, 0x1c, 0x02, 0xf0, 0xf0, 0xf4, 0x03,
+ 0x0a, 0x6b, 0x1f, 0xf9, 0xfa, 0x06, 0xe6, 0x11, 0x10, 0x0d, 0xde, 0x22, 0x10,
+ 0xb5, 0x26, 0xf7, 0xfa, 0xfd, 0x16, 0x7b, 0xc1, 0xf8, 0x1c, 0x10, 0x0e, 0xf4,
+ 0xfb, 0xf8, 0x0b, 0xfa, 0xf9, 0x0a, 0x45, 0xcb, 0xff, 0x14, 0x42, 0xf6, 0xec,
+ 0xdb, 0x54, 0x09, 0x1b, 0x35, 0xd1, 0x62, 0xdf, 0xdd, 0xb4, 0x2a, 0x0b, 0x41,
+ 0x19, 0x2c, 0xde, 0xf1, 0xf6, 0xd6, 0x5f, 0xc0, 0xd8, 0x49, 0xeb, 0xe6, 0x2e,
+ 0x0b, 0xff, 0x57, 0x26, 0x3e, 0x0f, 0xfd, 0x21, 0xe0, 0x1e, 0xc9, 0x93, 0x7f,
+ 0x18, 0xfd, 0xe8, 0x1c, 0x23, 0x1f, 0x51, 0x17, 0xc5, 0xf1, 0x16, 0x03, 0x24,
+ 0xf6, 0xfa, 0x1d, 0xf1, 0xea, 0xf7, 0x38, 0x00, 0xfc, 0xc0, 0xe7, 0xfb, 0x10,
+ 0x11, 0xe2, 0x01, 0xe5, 0xb7, 0xfe, 0x23, 0xc7, 0x0f, 0x35, 0x0f, 0x63, 0x05,
+ 0x31, 0x04, 0x0d, 0xd9, 0x06, 0xdc, 0x16, 0x09, 0x36, 0x11, 0x01, 0x00, 0x3d,
+ 0x15, 0x11, 0xdf, 0xef, 0xd1, 0xf1, 0xf5, 0x04, 0x28, 0xd4, 0x14, 0xe5, 0x0d,
+ 0xd7, 0x14, 0x47, 0xfb, 0xf8, 0xd4, 0xf7, 0x39, 0x05, 0x14, 0x26, 0x19, 0x1d,
+ 0xff, 0x09, 0x0e, 0x02, 0xfd, 0xf9, 0xc3, 0x6f, 0xcf, 0xf7, 0x50, 0x00, 0x3d,
+ 0x1e, 0xed, 0x11, 0xeb, 0x31, 0x03, 0x1e, 0xf8, 0xc3, 0xe9, 0x37, 0xa6, 0x2a,
+ 0x81, 0xfd, 0x11, 0x1e, 0xa5, 0xbd, 0xe6, 0x06, 0xe2, 0xb9, 0x0f, 0x24, 0xf2,
+ 0x13, 0xca, 0xb1, 0xc8, 0x17, 0xa2, 0xc3, 0xe1, 0x30, 0xe6, 0x1c, 0x13, 0x14,
+ 0xf8, 0x1e, 0x25, 0x1f, 0xd6, 0x3c, 0x02, 0x04, 0x44, 0xea, 0x22, 0x22, 0xd2,
+ 0xee, 0xe8, 0xfa, 0x56, 0x4f, 0x6b, 0xfb, 0xf3, 0x09, 0x9a, 0xdb, 0x23, 0x02,
+ 0xcb, 0xc3, 0x1d, 0xd4, 0x1c, 0x02, 0xfa, 0x0a, 0xff, 0x13, 0xe8, 0x29, 0x04,
+ 0x1c, 0x48, 0xe8, 0x35, 0x18, 0x28, 0xfa, 0x16, 0xed, 0xeb, 0x05, 0xa0, 0xca,
+ 0x11, 0x4a, 0xe1, 0x25, 0xd9, 0x04, 0x10, 0x00, 0x15, 0x3c, 0x1e, 0x14, 0xc0,
+ 0x3a, 0x15, 0x3e, 0x1c, 0xf4, 0x0e, 0x26, 0xbe, 0x23, 0xff, 0x07, 0x24, 0xd6,
+ 0xee, 0xf1, 0xdf, 0x2c, 0x07, 0xe0, 0xcd, 0xee, 0x0e, 0xec, 0x02, 0xdf, 0x28,
+ 0xff, 0xc2, 0x20, 0x2b, 0xcc, 0x1e, 0xdd, 0xfe, 0xf3, 0x4e, 0x07, 0x1b, 0x1a,
+ 0xea, 0x44, 0x16, 0xc7, 0xff, 0x3c, 0xb6, 0xf4, 0xef, 0x58, 0xe0, 0xdc, 0x36,
+ 0x15, 0xcb, 0xfd, 0x63, 0x08, 0x04, 0x68, 0xd9, 0x94, 0xb1, 0xee, 0x49, 0xf6,
+ 0xb5, 0xf1, 0x28, 0xfc, 0x37, 0x84, 0x07, 0x35, 0xdd, 0x14, 0x23, 0x06, 0xff,
+ 0x30, 0x22, 0x48, 0xb8, 0x41, 0x0f, 0x15, 0x18, 0xef, 0xbe, 0xa2, 0xa5, 0x7d,
+ 0xec, 0xb9, 0xf5, 0xdd, 0x72, 0xfc, 0x06, 0x01, 0x1b, 0xda, 0xc3, 0xdb, 0x15,
+ 0x0b, 0x04, 0xd1, 0x05, 0xe9, 0xe2, 0xd5, 0x4a, 0xe9, 0x56, 0x47, 0x25, 0xd3,
+ 0x7b, 0x15, 0xf5, 0xf2, 0x32, 0x07, 0xe9, 0x7f, 0x57, 0xd5, 0x29, 0xf7, 0x45,
+ 0x1a, 0x17, 0x00, 0x14, 0xae, 0xd3, 0x0c, 0x19, 0x10, 0x3d, 0xdf, 0xf7, 0x15,
+ 0xe2, 0x0f, 0xf5, 0x02, 0xe4, 0xb3, 0xf1, 0xe4, 0xb1, 0xd7, 0x2c, 0x09, 0x38,
+ 0x01, 0x15, 0xfc, 0xcb, 0x06, 0x08, 0x08, 0xee, 0x1b, 0xd9, 0xb7, 0x10, 0xfc,
+ 0x4f, 0xc0, 0xe1, 0x1a, 0x5f, 0xad, 0x52, 0x42, 0xe8, 0xdf, 0xd8, 0xcc, 0x7f,
+ 0x5a, 0x3e, 0x2e, 0x14, 0x3d, 0xfd, 0x38, 0xd1, 0xd9, 0x13, 0xfe, 0x03, 0xf8,
+ 0x4c, 0xea, 0x31, 0x1b, 0xef, 0x16, 0x3b, 0xfc, 0xc0, 0xcc, 0x67, 0xff, 0xde,
+ 0x1d, 0x41, 0x52, 0xd3, 0x26, 0x10, 0x0a, 0x46, 0x08, 0x34, 0x46, 0xf1, 0x4a,
+ 0x07, 0x06, 0xd8, 0xdb, 0x3d, 0xf4, 0xc8, 0x65, 0xbb, 0xee, 0xe1, 0x18, 0xe3,
+ 0xf3, 0x11, 0x4e, 0x33, 0x4e, 0x07, 0xfc, 0xbd, 0x0c, 0x28, 0xbd, 0xfb, 0xe2,
+ 0xe4, 0xc4, 0x01, 0x24, 0x0a, 0xec, 0xc7, 0x09, 0xab, 0x41, 0x06, 0x0b, 0x57,
+ 0xed, 0x20, 0xad, 0x70, 0xab, 0x47, 0xf1, 0xb7, 0xf8, 0xab, 0x47, 0x19, 0x37,
+ 0xdf, 0x01, 0x21, 0x01, 0x2e, 0x2f, 0xdb, 0x1c, 0x1d, 0xce, 0xd1, 0x19, 0x21,
+ 0xd2, 0xfc, 0x5c, 0x52, 0xee, 0x1f, 0xfe, 0x3e, 0x1f, 0x23, 0xd2, 0xf2, 0x03,
+ 0x0e, 0xcc, 0xfa, 0x16, 0x06, 0x0b, 0x07, 0x0e, 0x06, 0x08, 0x16, 0xdc, 0x17,
+ 0x01, 0xc6, 0x01, 0x2a, 0xb5, 0xfe, 0x25, 0xe9, 0x7f, 0xe9, 0xee, 0xde, 0xad,
+ 0x16, 0x0d, 0x04, 0xbd, 0xf2, 0x24, 0x1d, 0x11, 0xfe, 0xb8, 0xfa, 0xd0, 0xf2,
+ 0xdd, 0x20, 0xe2, 0x12, 0x12, 0x0f, 0x31, 0x2d, 0xc3, 0xd3, 0x0d, 0x23, 0x24,
+ 0xcb, 0x19, 0x07, 0x20, 0x21, 0xdf, 0x00, 0x01, 0x3f, 0x26, 0x1e, 0x03, 0x10,
+ 0xff, 0x3a, 0xf0, 0xb4, 0x32, 0x11, 0xe0, 0x01, 0x07, 0xfe, 0xde, 0xeb, 0xff,
+ 0xd0, 0x07, 0x0f, 0xea, 0x3a, 0x02, 0xf0, 0x22, 0x1c, 0xf8, 0x0a, 0x10, 0xea,
+ 0xf5, 0x3b, 0xed, 0x0a, 0x24, 0xfd, 0x01, 0xd1, 0xf5, 0x07, 0xfd, 0x16, 0xa7,
+ 0x21, 0xd1, 0xef, 0x0d, 0x19, 0x13, 0xd6, 0x21, 0x5e, 0x10, 0xe3, 0xed, 0x07,
+ 0x38, 0xcf, 0x43, 0xd8, 0x0c, 0x0a, 0x31, 0xdb, 0x52, 0xc0, 0xf9, 0xcc, 0xfc,
+ 0xe5, 0xcc, 0xd6, 0x06, 0xfb, 0xad, 0x24, 0x2e, 0xdc, 0x9b, 0xfb, 0x35, 0xf4,
+ 0xf1, 0xe6, 0x10, 0xbe, 0xe4, 0x13, 0xef, 0x95, 0xc5, 0x45, 0xdb, 0x1e, 0x5a,
+ 0x24, 0xf5, 0x0c, 0xfa, 0xfa, 0xdf, 0x3b, 0xfe, 0x41, 0x35, 0x00, 0xd7, 0xe8,
+ 0xf0, 0xf1, 0xae, 0xc8, 0xe7, 0x5c, 0x7a, 0xa8, 0x0f, 0x34, 0x57, 0x29, 0xe6,
+ 0x2a, 0x23, 0x47, 0x25, 0x04, 0x24, 0xc9, 0x7f, 0xee, 0x29, 0xfb, 0xcd, 0x3d,
+ 0x2a, 0x32, 0x2b, 0xed, 0x2f, 0xe2, 0x12, 0x30, 0x23, 0xda, 0x15, 0x13, 0xed,
+ 0x60, 0x2e, 0xdf, 0x0d, 0xef, 0xa9, 0x08, 0xd1, 0xe4, 0x37, 0xc1, 0xfa, 0x06,
+ 0x41, 0x3f, 0xe2, 0x1b, 0x59, 0xdb, 0xa1, 0x20, 0xae, 0xf2, 0xdc, 0xa3, 0xd6,
+ 0x0f, 0xfa, 0xfb, 0xe7, 0x33, 0xff, 0xf3, 0x56, 0x01, 0x2a, 0xd8, 0x48, 0x93,
+ 0xc1, 0xc7, 0x00, 0xe7, 0x37, 0x06, 0x00, 0xf3, 0xa3, 0x50, 0xc0, 0xeb, 0x23,
+ 0xc3, 0x1f, 0xc6, 0xf9, 0xfd, 0xb8, 0xf3, 0xe3, 0xc7, 0xdc, 0xe3, 0xea, 0xdb,
+ 0xd4, 0xcd, 0xb2, 0x06, 0xd5, 0x22, 0xd5, 0x28, 0xee, 0x2a, 0x7f, 0x3f, 0xdb,
+ 0xf1, 0xea, 0xf2, 0x2a, 0xb3, 0x10, 0x1a, 0x19, 0x4d, 0xe5, 0xe5, 0xd9, 0xb9,
+ 0x9e, 0x12, 0xe6, 0x3e, 0xd4, 0x1c, 0xf9, 0xd2, 0xed, 0x32, 0x2e, 0x3e, 0xdc,
+ 0x17, 0xd5, 0xd1, 0x08, 0x02, 0x12, 0x2a, 0xeb, 0xec, 0x0c, 0x08, 0x1f, 0x1e,
+ 0x03, 0xd0, 0x23, 0x17, 0x9c, 0x09, 0x1d, 0xf1, 0xd7, 0x05, 0x27, 0x1e, 0x04,
+ 0xd9, 0xf9, 0xde, 0xe7, 0x3a, 0x37, 0xc8, 0x09, 0x50, 0x14, 0x0a, 0x05, 0x17,
+ 0x09, 0xb3, 0xcc, 0x20, 0x1b, 0x26, 0x11, 0x5d, 0x15, 0xf0, 0xff, 0x0d, 0x05,
+ 0xc7, 0xde, 0xe5, 0x09, 0xde, 0x27, 0x23, 0x0a, 0xf3, 0xb3, 0xff, 0x00, 0x42,
+ 0xd0, 0xe6, 0x0a, 0xee, 0xe2, 0x42, 0xc7, 0xd7, 0x37, 0x4d, 0xca, 0x03, 0x0d,
+ 0x12, 0xcf, 0x0f, 0xb7, 0x15, 0xf4, 0xbf, 0xea, 0x3a, 0xf3, 0x19, 0xf0, 0x28,
+ 0xe7, 0x0e, 0x04, 0xd4, 0xe0, 0x05, 0x02, 0xd6, 0xf9, 0x36, 0xfc, 0xe4, 0xf4,
+ 0x09, 0x1d, 0xbf, 0xcb, 0x06, 0xe0, 0xca, 0x00, 0xee, 0xd6, 0xea, 0xf4, 0xce,
+ 0x18, 0xfb, 0x32, 0x1d, 0x02, 0xf5, 0xe3, 0xe6, 0x16, 0x41, 0xe5, 0x4f, 0x38,
+ 0x05, 0xe4, 0xda, 0xf8, 0x81, 0x01, 0xaf, 0xfc, 0x06, 0xb4, 0x2c, 0x0c, 0x1a,
+ 0xda, 0xfc, 0xaf, 0x26, 0xec, 0xe6, 0xed, 0x16, 0x02, 0xf9, 0x29, 0x13, 0xda,
+ 0xbb, 0xe1, 0x20, 0xcf, 0x0a, 0xfc, 0x01, 0x36, 0xcd, 0x47, 0x00, 0xdb, 0xff,
+ 0x08, 0xf4, 0xfc, 0x2a, 0x52, 0xfb, 0xf1, 0x03, 0xd3, 0xee, 0xd3, 0xdf, 0xe0,
+ 0x07, 0x2e, 0xe7, 0xda, 0xfd, 0x0a, 0x27, 0xcf, 0x09, 0xf0, 0xbd, 0xec, 0xf8,
+ 0xea, 0x03, 0x22, 0x3f, 0xda, 0x07, 0xe8, 0x28, 0xd7, 0x12, 0x0c, 0x03, 0x11,
+ 0xf3, 0x2e, 0xd2, 0xe3, 0xe1, 0x4d, 0xe6, 0x06, 0xe8, 0xde, 0xed, 0xc1, 0x36,
+ 0xe6, 0x17, 0xd6, 0xf4, 0xd0, 0x04, 0xfe, 0xfb, 0xea, 0x02, 0x45, 0xc8, 0xb5,
+ 0x54, 0xfe, 0xde, 0xf6, 0xf9, 0xec, 0x0d, 0xd7, 0xf5, 0xc4, 0x81, 0xc8, 0x29,
+ 0x11, 0xc4, 0x1a, 0x1c, 0x19, 0x32, 0xd1, 0xbe, 0x0f, 0xfc, 0xf6, 0x50, 0xe5,
+ 0x4a, 0x31, 0x03, 0x06, 0xee, 0x1d, 0x54, 0x0c, 0xf6, 0x3a, 0xc2, 0xe7, 0x25,
+ 0x2d, 0x18, 0xf9, 0xfe, 0x07, 0xe5, 0x0d, 0xc0, 0xac, 0x4b, 0xe7, 0xa0, 0xad,
+ 0x34, 0x50, 0x45, 0xdc, 0xe9, 0xe3, 0x18, 0xcc, 0xb9, 0xfe, 0xc2, 0xf2, 0xf8,
+ 0xe7, 0x07, 0x4c, 0xea, 0x53, 0xfe, 0x14, 0xed, 0x08, 0xd2, 0x5d, 0x31, 0x0f,
+ 0x15, 0x05, 0x01, 0xc7, 0x03, 0x0b, 0xc6, 0xff, 0xde, 0xf5, 0x9c, 0xc5, 0x19,
+ 0x41, 0xf9, 0xf0, 0x0d, 0xdd, 0xdf, 0x24, 0x0c, 0x90, 0x17, 0x4e, 0xd9, 0xce,
+ 0xd9, 0xc8, 0xd7, 0x0e, 0x09, 0x3c, 0x0b, 0xb7, 0xea, 0xf2, 0x3f, 0xc4, 0xa8,
+ 0xd5, 0x02, 0xdf, 0xda, 0xe5, 0xf9, 0xfe, 0x19, 0x0c, 0xd2, 0x07, 0x0d, 0xb7,
+ 0x4b, 0x1e, 0x10, 0x08, 0xf5, 0x45, 0xf3, 0x04, 0x3c, 0xdc, 0xe9, 0xde, 0xec,
+ 0xc1, 0x05, 0x1a, 0xd4, 0xff, 0x10, 0xbf, 0x3f, 0xf7, 0x2b, 0x17, 0xea, 0xe6,
+ 0xdc, 0x16, 0x24, 0x0d, 0x07, 0x0e, 0x3c, 0xf4, 0x21, 0xcc, 0x09, 0xcc, 0x42,
+ 0x26, 0xc8, 0xcc, 0xfd, 0x19, 0xef, 0xef, 0x07, 0xf6, 0xfe, 0x0e, 0x2f, 0x31,
+ 0x43, 0xfe, 0x29, 0xc1, 0xcf, 0x35, 0xc1, 0x10, 0xff, 0xce, 0x22, 0x07, 0x0d,
+ 0x13, 0xee, 0x7f, 0x13, 0x00, 0x02, 0xef, 0x06, 0xf0, 0xde, 0x1a, 0x1c, 0xe7,
+ 0xfa, 0xcd, 0x17, 0x23, 0xc3, 0xba, 0xfe, 0xba, 0xea, 0x21, 0x09, 0x20, 0x00,
+ 0x22, 0xf7, 0x15, 0x46, 0xbd, 0xce, 0xc2, 0xfb, 0x12, 0xf2, 0xf0, 0x52, 0xd3,
+ 0x0f, 0x45, 0xde, 0xe9, 0xe8, 0x1f, 0x0b, 0x02, 0x2c, 0xe1, 0xea, 0x54, 0x03,
+ 0x0f, 0x0d, 0xd7, 0xf3, 0x13, 0x36, 0xfc, 0xd2, 0xc2, 0xe6, 0xed, 0xa1, 0x81,
+ 0xdd, 0x22, 0xd0, 0x31, 0xa8, 0xd2, 0xcb, 0x39, 0x10, 0xb7, 0xea, 0x99, 0xb6,
+ 0xde, 0xe7, 0x1c, 0x28, 0xf7, 0x07, 0x27, 0xe2, 0xf3, 0x60, 0xe9, 0x11, 0x22,
+ 0xfa, 0x0f, 0xe5, 0xd8, 0xe4, 0x19, 0xeb, 0x04, 0xcd, 0x0c, 0x8e, 0x63, 0x07,
+ 0xf0, 0xe4, 0xc6, 0xda, 0x3e, 0x31, 0xe0, 0x30, 0xcf, 0xe2, 0x04, 0xec, 0x69,
+ 0x4b, 0xa9, 0x0d, 0xc2, 0xf3, 0xc9, 0x25, 0xec, 0xe4, 0x25, 0x18, 0x64, 0xf4,
+ 0x2c, 0xea, 0xe1, 0x18, 0x33, 0x07, 0xd9, 0x22, 0x08, 0x0c, 0x26, 0x03, 0x2c,
+ 0x0f, 0x15, 0x0f, 0x3b, 0xc2, 0xe2, 0xf6, 0x52, 0x12, 0xcd, 0xd3, 0xda, 0x1d,
+ 0x35, 0x41, 0xd9, 0x2d, 0xfe, 0xe4, 0x0b, 0x0d, 0xa8, 0x15, 0x03, 0xce, 0x14,
+ 0xbe, 0x2c, 0x81, 0xd7, 0xfa, 0x2e, 0xaa, 0x4f, 0xe0, 0xc9, 0x0f, 0x0f, 0xde,
+ 0x17, 0x2f, 0x37, 0x4b, 0xf7, 0xfc, 0x07, 0xe8, 0x0c, 0x06, 0x02, 0xeb, 0xbd,
+ 0xb5, 0x0c, 0x2d, 0xd3, 0xc4, 0xf0, 0xd8, 0xf4, 0xe0, 0xcf, 0x1c, 0xfc, 0x3e,
+ 0xc6, 0xf1, 0x43, 0x30, 0xca, 0x0e, 0x0d, 0xd2, 0xdb, 0xbe, 0x4e, 0xce, 0xfb,
+ 0xe1, 0xed, 0x0d, 0x71, 0xe5, 0xe7, 0x42, 0xb9, 0x0a, 0x42, 0x05, 0xef, 0x27,
+ 0xc9, 0xe1, 0x07, 0x24, 0xff, 0x2f, 0xe9, 0xf2, 0x0e, 0xfb, 0x2a, 0xba, 0x3e,
+ 0xe8, 0x1e, 0xcc, 0xfd, 0xe7, 0x0f, 0x29, 0x1c, 0xba, 0xda, 0xe0, 0xea, 0xea,
+ 0xd6, 0x24, 0xe2, 0x2f, 0xb6, 0x1d, 0x62, 0xe9, 0x6c, 0xea, 0x05, 0xd8, 0xd9,
+ 0x26, 0x12, 0x0a, 0x21, 0xd7, 0xf6, 0xe2, 0x0a, 0xee, 0x0a, 0xf7, 0x0d, 0x51,
+ 0xdb, 0x01, 0xcc, 0xee, 0x05, 0xf6, 0xf8, 0x2c, 0x1c, 0xea, 0xdf, 0x28, 0xc8,
+ 0xa6, 0xa5, 0x21, 0xf9, 0xa6, 0x49, 0x1c, 0xb8, 0x2f, 0x0a, 0x81, 0xd4, 0xeb,
+ 0xe3, 0x17, 0x02, 0xd4, 0x0d, 0x25, 0xb0, 0x00, 0x19, 0x56, 0x7f, 0xff, 0xf9,
+ 0xe4, 0x33, 0x2e, 0xf3, 0x1c, 0xe3, 0xfa, 0xf3, 0xf9, 0xed, 0xe6, 0xed, 0xfb,
+ 0x3b, 0x29, 0x21, 0xdf, 0x0f, 0xc8, 0x1b, 0x06, 0xd1, 0x01, 0x01, 0xbb, 0x0c,
+ 0x25, 0x55, 0x14, 0xe0, 0x35, 0xdb, 0xd8, 0x29, 0x09, 0xd8, 0x56, 0x08, 0xfa,
+ 0xdd, 0xfa, 0xeb, 0xf4, 0xe9, 0xe1, 0xab, 0x08, 0xf2, 0xfc, 0xd3, 0xf8, 0x0d,
+ 0xf0, 0xcf, 0xe4, 0xe3, 0xf8, 0xf4, 0xba, 0x22, 0x15, 0x00, 0xe6, 0xdf, 0xf9,
+ 0x1a, 0x55, 0xff, 0xef, 0x41, 0xc9, 0x79, 0x19, 0xcd, 0x29, 0xc1, 0x16, 0xf1,
+ 0x27, 0x23, 0xe5, 0xf8, 0xf2, 0x0b, 0x43, 0xfa, 0xe1, 0x10, 0xf9, 0xed, 0x0c,
+ 0x27, 0x06, 0xd9, 0xd9, 0x0c, 0xde, 0xf6, 0x24, 0x0e, 0xe7, 0x21, 0x0b, 0xe6,
+ 0xfe, 0x2f, 0xe9, 0x0e, 0xf9, 0x3f, 0xf7, 0x26, 0xdc, 0x21, 0xe9, 0xcc, 0xf7,
+ 0xda, 0xda, 0xec, 0x20, 0x21, 0xe3, 0xf0, 0x3c, 0x1e, 0xcb, 0xf7, 0xf6, 0x47,
+ 0x15, 0xa9, 0xb9, 0xd7, 0x1a, 0xea, 0xe0, 0xd7, 0xdc, 0x30, 0xe8, 0x22, 0x12,
+ 0x39, 0x0f, 0x1b, 0xff, 0xf6, 0x02, 0xc5, 0x3f, 0x27, 0xdf, 0xcd, 0xe0, 0x06,
+ 0x36, 0x00, 0xef, 0x0f, 0xe8, 0xe2, 0x2e, 0x18, 0x24, 0xe5, 0xc6, 0x0b, 0xdf,
+ 0xf6, 0x0d, 0xde, 0xd6, 0xc9, 0x3f, 0xf1, 0x26, 0x0d, 0x10, 0xf2, 0x06, 0xe9,
+ 0xd2, 0x10, 0xe1, 0x37, 0xd8, 0x26, 0x21, 0x03, 0x0b, 0x7f, 0xfc, 0xe6, 0x0e,
+ 0x20, 0x19, 0xf0, 0x0e, 0x07, 0x07, 0x1f, 0x0c, 0xcb, 0xdd, 0x03, 0xa2, 0xea,
+ 0x23, 0xd1, 0x21, 0x07, 0xf4, 0xd0, 0xfd, 0xff, 0x22, 0x23, 0x0c, 0x28, 0xe1,
+ 0x03, 0x75, 0x24, 0x41, 0xd3, 0xef, 0x34, 0xfc, 0x48, 0x2a, 0xd5, 0xd8, 0xe0,
+ 0xe4, 0xda, 0xdd, 0xf6, 0x27, 0xc7, 0x07, 0x13, 0x17, 0x08, 0x27, 0x22, 0x19,
+ 0xf5, 0xf9, 0x16, 0xf8, 0xe7, 0x20, 0xdf, 0x10, 0x18, 0xe1, 0xba, 0xc5, 0xf4,
+ 0xee, 0x3e, 0xe1, 0x0d, 0xd7, 0xfe, 0x17, 0x01, 0x48, 0x25, 0xd3, 0x0d, 0xd4,
+ 0x39, 0x07, 0x0d, 0xff, 0xf5, 0xf4, 0x37, 0xf3, 0x0f, 0x36, 0x10, 0xbc, 0xea,
+ 0xe5, 0x22, 0xed, 0x1a, 0x0f, 0x18, 0xfa, 0xdf, 0x30, 0x04, 0x11, 0xea, 0xba,
+ 0xb0, 0x7f, 0x35, 0xe2, 0xea, 0x20, 0xdc, 0x10, 0x0f, 0x01, 0xcc, 0xc6, 0x31,
+ 0xc3, 0x07, 0x28, 0x1d, 0xfd, 0xf0, 0x03, 0x13, 0x1b, 0xc1, 0xff, 0x3c, 0xe2,
+ 0x01, 0xcb, 0x25, 0x2b, 0xe0, 0xf7, 0x04, 0xcf, 0xea, 0x08, 0xfb, 0x0d, 0xf3,
+ 0x3a, 0xea, 0x11, 0x3b, 0xe5, 0x1d, 0x1b, 0xdd, 0x23, 0x0b, 0x11, 0xe8, 0x07,
+ 0x01, 0x1b, 0x87, 0xfc, 0x23, 0xd7, 0x10, 0xed, 0x31, 0x0e, 0x03, 0x01, 0x0c,
+ 0xfe, 0xcf, 0xeb, 0x13, 0xdc, 0x22, 0x2c, 0x09, 0xd4, 0x2c, 0x04, 0xff, 0xe3,
+ 0xec, 0x45, 0xfb, 0xab, 0xed, 0xfb, 0xf1, 0x06, 0xf0, 0x8e, 0x13, 0x1c, 0xb2,
+ 0xd6, 0x7f, 0x0d, 0x25, 0xc3, 0x07, 0x6c, 0xd3, 0x4d, 0xe4, 0xf7, 0xbf, 0x5d,
+ 0xfb, 0xd7, 0x14, 0xde, 0x18, 0x1c, 0xd6, 0x30, 0x45, 0xb3, 0xca, 0xde, 0x56,
+ 0xe9, 0x20, 0x21, 0xf0, 0xea, 0xeb, 0xe7, 0xf7, 0xf2, 0xc0, 0xe7, 0x15, 0xdf,
+ 0x48, 0x21, 0x1a, 0xf8, 0x2c, 0x2c, 0xf3, 0xd4, 0x3e, 0x00, 0x32, 0xdb, 0xdc,
+ 0xea, 0xd1, 0xf6, 0xe6, 0xed, 0xef, 0x0d, 0xde, 0x17, 0x5d, 0x20, 0x19, 0xa4,
+ 0x00, 0xf7, 0xa6, 0x04, 0xab, 0xf2, 0xe6, 0xf7, 0x59, 0xdc, 0x1e, 0x4e, 0x32,
+ 0x26, 0x38, 0x3a, 0xe8, 0xe7, 0x31, 0x3e, 0xfe, 0x36, 0x04, 0x31, 0x3a, 0xe4,
+ 0xd8, 0xea, 0xbf, 0x21, 0x20, 0xdb, 0x01, 0x69, 0x9d, 0x3f, 0xd1, 0x4f, 0xbe,
+ 0x07, 0xef, 0x20, 0xa6, 0x24, 0xf6, 0x04, 0xff, 0x07, 0x11, 0xd1, 0x0d, 0xe0,
+ 0xfa, 0x0c, 0xaf, 0xe7, 0x00, 0x02, 0x82, 0xe2, 0xd1, 0xf3, 0x22, 0xab, 0x00,
+ 0xae, 0xb6, 0x19, 0x09, 0xdc, 0xce, 0xf4, 0x40, 0x3e, 0x06, 0x02, 0xac, 0xc2,
+ 0x40, 0x13, 0x09, 0x1f, 0x1f, 0x54, 0xe3, 0xe3, 0x0c, 0xff, 0x0c, 0xf6, 0xb3,
+ 0x19, 0xd5, 0x00, 0x6a, 0xd8, 0x1e, 0xf5, 0x1b, 0xf0, 0x0d, 0xfe, 0xdf, 0x0c,
+ 0x20, 0x7f, 0x50, 0x41, 0x0a, 0xf8, 0xed, 0xe2, 0x1c, 0xe5, 0x0d, 0xed, 0xe4,
+ 0xbc, 0x11, 0x4e, 0xc4, 0xd9, 0x11, 0xfa, 0x16, 0xe4, 0x1a, 0x15, 0x45, 0x1c,
+ 0xdb, 0x06, 0x03, 0xc3, 0xcf, 0xf5, 0xfd, 0x7f, 0xf2, 0xfa, 0x03, 0x3a, 0xe4,
+ 0xd2, 0x23, 0x43, 0x37, 0x16, 0x20, 0x0b, 0x1e, 0xd3, 0x2b, 0xde, 0xce, 0xc9,
+ 0xe7, 0x2d, 0xe7, 0x18, 0xbb, 0x09, 0x0f, 0x18, 0x08, 0xd1, 0x3c, 0xff, 0x6c,
+ 0xc4, 0x17, 0xa7, 0xff, 0xb4, 0x58, 0x28, 0x00, 0xfe, 0xfc, 0xc5, 0xfa, 0x07,
+ 0x32, 0xb1, 0xe3, 0x0c, 0x31, 0xde, 0x4d, 0xc3, 0xf1, 0xf0, 0xe0, 0xe1, 0x21,
+ 0x1c, 0x02, 0x0e, 0x38, 0xe8, 0x09, 0x21, 0xf2, 0x36, 0x47, 0x06, 0xd6, 0x2d,
+ 0x18, 0xd2, 0x12, 0x0d, 0x35, 0x13, 0x2e, 0x05, 0xcb, 0x16, 0xfc, 0x05, 0xd7,
+ 0xff, 0xd3, 0xe9, 0xdd, 0x01, 0x11, 0x05, 0xff, 0x03, 0xbf, 0x10, 0x26, 0x1d,
+ 0x59, 0xd4, 0x03, 0xca, 0xea, 0xa5, 0x3a, 0x2b, 0x07, 0x09, 0x20, 0x08, 0xd9,
+ 0x0a, 0x25, 0x01, 0x00, 0x26, 0x1a, 0xf2, 0xfa, 0xea, 0x1d, 0xdc, 0xe1, 0xf0,
+ 0xc1, 0x26, 0x18, 0xf0, 0xe1, 0x14, 0xfd, 0xe4, 0x10, 0x35, 0x00, 0x48, 0xce,
+ 0xeb, 0xeb, 0xe6, 0x1f, 0xfd, 0xe2, 0xfa, 0x0b, 0xd8, 0xcd, 0x08, 0x2b, 0x14,
+ 0xda, 0x2c, 0xdb, 0xdd, 0x05, 0xe4, 0x40, 0xc2, 0x04, 0xf1, 0xe0, 0x2a, 0x39,
+ 0x20, 0xe3, 0xf2, 0x12, 0xe5, 0xf5, 0xf7, 0xc2, 0xd6, 0xb5, 0x23, 0x0f, 0x1a,
+ 0xef, 0x1b, 0x05, 0xf6, 0xe8, 0x07, 0xd3, 0x1b, 0x34, 0x92, 0x2c, 0xec, 0xa4,
+ 0x09, 0xd5, 0xcc, 0x07, 0x41, 0x06, 0x1d, 0x28, 0xd0, 0x0d, 0x65, 0x01, 0xfc,
+ 0xfd, 0x1b, 0x0f, 0x18, 0x81, 0x2c, 0x6a, 0xf6, 0xfb, 0x04, 0x63, 0xd7, 0x24,
+ 0xcd, 0xa0, 0xfc, 0xd4, 0x01, 0xdb, 0x20, 0x25, 0xc8, 0xf2, 0xea, 0xb8, 0x04,
+ 0xe3, 0xe7, 0x27, 0xce, 0x1e, 0x30, 0x08, 0xfe, 0x04, 0x09, 0xdf, 0x1a, 0x2b,
+ 0xe5, 0x01, 0xe6, 0x1d, 0x1f, 0xfd, 0x34, 0x1b, 0xdd, 0xf0, 0xb8, 0x5e, 0xe3,
+ 0xe7, 0xb6, 0xc8, 0xe8, 0x12, 0x14, 0xa4, 0x44, 0xf8, 0xf1, 0x2c, 0xb0, 0xf7,
+ 0x3e, 0x2b, 0xf7, 0xf7, 0xe9, 0x59, 0xc1, 0xda, 0xbe, 0xca, 0xb3, 0xf4, 0xdb,
+ 0xc8, 0x8b, 0xbb, 0xc1, 0x48, 0xe7, 0xab, 0xfd, 0x9d, 0x44, 0x34, 0xef, 0x1c,
+ 0x33, 0xdd, 0x2c, 0x0c, 0xdf, 0x62, 0xac, 0xe2, 0xe2, 0xc8, 0x39, 0x9f, 0x38,
+ 0x47, 0xf8, 0x17, 0x81, 0x26, 0x46, 0x9f, 0xd6, 0x51, 0xc6, 0x11, 0xed, 0x63,
+ 0xc1, 0xf3, 0xe8, 0x14, 0xf3, 0x14, 0x2e, 0x23, 0x1c, 0xec, 0x41, 0x65, 0xf3,
+ 0xff, 0xc5, 0x36, 0x20, 0x0c, 0xd9, 0x09, 0xe7, 0xfb, 0xfc, 0xe9, 0x39, 0x8f,
+ 0xe1, 0xbf, 0x40, 0x1c, 0x19, 0x07, 0x0c, 0x02, 0x0f, 0xff, 0x2f, 0xac, 0x30,
+ 0x45, 0x1d, 0x35, 0xb1, 0xd5, 0x0d, 0xc5, 0xe3, 0x2e, 0x01, 0x28, 0x14, 0x67,
+ 0x29, 0x10, 0x41, 0xee, 0x01, 0x56, 0xd0, 0xd6, 0x48, 0x1a, 0xd7, 0x1d, 0xe0,
+ 0x07, 0x0a, 0x16, 0xe5, 0x01, 0xf6, 0xe8, 0xee, 0xf4, 0x00, 0x20, 0x02, 0xf7,
+ 0x03, 0x07, 0xdb, 0x07, 0xc7, 0x2d, 0x1d, 0x03, 0xf9, 0x03, 0x09, 0xf5, 0xd7,
+ 0xf5, 0xd6, 0xed, 0x19, 0x21, 0xfa, 0xec, 0xe4, 0xef, 0xb0, 0xcf, 0x1c, 0xc4,
+ 0x09, 0x0d, 0xbb, 0x23, 0x26, 0x0f, 0x0d, 0xec, 0x2f, 0x0c, 0xf0, 0xc1, 0x14,
+ 0xbc, 0x13, 0x45, 0x17, 0xdc, 0xf9, 0xeb, 0x14, 0x05, 0xef, 0xfe, 0xd2, 0x45,
+ 0x03, 0x15, 0x09, 0xd8, 0xda, 0x29, 0xe6, 0x07, 0xef, 0x12, 0xe0, 0x01, 0x2f,
+ 0x7f, 0xec, 0xfd, 0xd1, 0x03, 0x2f, 0xeb, 0xff, 0xba, 0xe0, 0x08, 0x12, 0x0f,
+ 0x4f, 0x47, 0xed, 0xc4, 0xc4, 0xdc, 0x2f, 0x09, 0x2b, 0x08, 0x1e, 0xdd, 0x35,
+ 0xd8, 0x09, 0xfa, 0xe6, 0x1c, 0xd8, 0xff, 0xd0, 0x04, 0xda, 0x1a, 0x37, 0x1d,
+ 0x2a, 0xe6, 0xc6, 0xf7, 0x32, 0x41, 0x1d, 0xd5, 0x3a, 0xde, 0x43, 0x07, 0x3d,
+ 0xfb, 0x0b, 0xd4, 0x22, 0xc9, 0x2f, 0xe5, 0xd5, 0x0f, 0x24, 0x0b, 0xc8, 0xe8,
+ 0x1f, 0x1f, 0x57, 0x9e, 0x2f, 0x30, 0x88, 0xf9, 0x2d, 0xd7, 0xb3, 0x1c, 0x84,
+ 0x2c, 0xc3, 0x07, 0x32, 0x3a, 0xb6, 0xd6, 0xca, 0x13, 0x02, 0xcf, 0xe1, 0xaa,
+ 0xd0, 0xd9, 0xed, 0xc7, 0xfe, 0x09, 0x09, 0xd0, 0x1e, 0x6d, 0x56, 0x37, 0xef,
+ 0xd9, 0xed, 0x1a, 0xe7, 0xbe, 0x56, 0xf3, 0x0a, 0x48, 0xda, 0xf0, 0xd3, 0x2a,
+ 0xe6, 0x12, 0x7b, 0xe0, 0xbe, 0x25, 0x0f, 0x1e, 0xdb, 0x58, 0xed, 0xec, 0x12,
+ 0xc4, 0xf4, 0xc0, 0x29, 0xee, 0x11, 0xdc, 0xd2, 0x19, 0x37, 0x1e, 0xf1, 0x4d,
+ 0xdd, 0xf4, 0x88, 0xa3, 0x32, 0xd8, 0xab, 0xc1, 0x0e, 0x27, 0x6c, 0x20, 0x36,
+ 0x29, 0x06, 0x08, 0x31, 0x1d, 0x35, 0x7f, 0xfe, 0x24, 0x4b, 0x17, 0xcb, 0x19,
+ 0x03, 0x21, 0x05, 0x0c, 0x34, 0x60, 0x18, 0x02, 0xd4, 0xf6, 0x0e, 0xfe, 0xdd,
+ 0x4f, 0x1c, 0x83, 0xe8, 0xbe, 0xba, 0x48, 0x30, 0xfa, 0xf3, 0x0d, 0x13, 0x47,
+ 0x36, 0x13, 0x34, 0x1c, 0x3e, 0xb4, 0x4b, 0xa1, 0xb9, 0xf4, 0xf9, 0x0a, 0xe3,
+ 0x2b, 0x36, 0xa2, 0xce, 0x32, 0x29, 0x11, 0x10, 0x3a, 0xa0, 0x28, 0x6f, 0xca,
+ 0xfc, 0xf0, 0xb0, 0xdb, 0xe9, 0x10, 0xfb, 0xf4, 0xef, 0x53, 0xc2, 0xf6, 0x45,
+ 0x2d, 0x14, 0xf8, 0xdf, 0xce, 0x17, 0xa7, 0xf3, 0x12, 0x81, 0x38, 0xac, 0x10,
+ 0xd6, 0xf9, 0xef, 0x43, 0x0d, 0x0c, 0x1c, 0xea, 0x1d, 0x3f, 0x1f, 0xc2, 0xe2,
+ 0xf6, 0x00, 0x1a, 0xe9, 0x2a, 0x02, 0x1c, 0xec, 0xf5, 0x04, 0xd1, 0x18, 0x21,
+ 0x11, 0xe7, 0x32, 0xb1, 0x1d, 0x21, 0x1c, 0xf5, 0xdc, 0xf8, 0xe7, 0xe9, 0x38,
+ 0x5a, 0x08, 0xf1, 0x2d, 0xbb, 0x08, 0xe6, 0x08, 0x13, 0x2e, 0x07, 0x35, 0x34,
+ 0xff, 0x11, 0xfb, 0x09, 0xf3, 0x0d, 0x5b, 0xef, 0x37, 0x38, 0x0c, 0xe5, 0x2b,
+ 0xcd, 0x11, 0x4a, 0x03, 0xf5, 0xf6, 0x01, 0xfc, 0x22, 0xc2, 0x0a, 0xd7, 0xdb,
+ 0xee, 0xf9, 0xe8, 0x07, 0xfa, 0xdf, 0xf9, 0xe5, 0x36, 0x1a, 0x07, 0xd9, 0xe7,
+ 0xd4, 0xff, 0xde, 0x02, 0x60, 0xf8, 0xeb, 0xe8, 0xc7, 0x3d, 0xf3, 0xf8, 0x0c,
+ 0xc9, 0xe8, 0x28, 0x2e, 0x1e, 0x15, 0xf0, 0xec, 0x32, 0x06, 0x39, 0x4c, 0x0a,
+ 0x36, 0xc7, 0xd8, 0xeb, 0x52, 0xe2, 0xda, 0xaf, 0xfe, 0x23, 0x0b, 0x02, 0x43,
+ 0x19, 0xda, 0x09, 0xed, 0x05, 0x0f, 0x0d, 0x29, 0xeb, 0xd8, 0x40, 0x0e, 0xd5,
+ 0x30, 0xf8, 0x46, 0x0b, 0xfe, 0x1e, 0x03, 0xe5, 0xef, 0x38, 0xd5, 0x05, 0xbd,
+ 0x07, 0xb0, 0xe2, 0x4a, 0xc5, 0x06, 0xa3, 0xeb, 0x7f, 0x28, 0x02, 0xba, 0x2c,
+ 0x1b, 0xeb, 0xe8, 0xdd, 0xfa, 0xf8, 0x1a, 0x03, 0x69, 0xfe, 0x0b, 0xcb, 0x26,
+ 0xf5, 0xfb, 0x33, 0xb2, 0xd9, 0x18, 0xcc, 0xe6, 0x4d, 0xde, 0x11, 0x0f, 0x10,
+ 0x0d, 0x26, 0xa3, 0xfc, 0x10, 0x22, 0xd9, 0xdb, 0x11, 0xec, 0x06, 0x36, 0x42,
+ 0x14, 0x33, 0xe8, 0x1a, 0xe2, 0xcd, 0xeb, 0x1d, 0xbc, 0xcb, 0x37, 0xc3, 0xf7,
+ 0xbb, 0x1c, 0x0b, 0x0c, 0x05, 0xb7, 0xb4, 0x6c, 0xc0, 0x0f, 0xf3, 0xe7, 0xf2,
+ 0x05, 0xff, 0xde, 0xde, 0xc9, 0xe8, 0xd2, 0xdd, 0x1a, 0x18, 0x36, 0x25, 0x27,
+ 0x24, 0x08, 0x18, 0xed, 0x19, 0x05, 0xdc, 0x1f, 0x19, 0xed, 0x16, 0xe5, 0x3e,
+ 0x04, 0xef, 0x07, 0xfa, 0xf7, 0xcf, 0x0f, 0x04, 0x7f, 0xf9, 0x1a, 0x0d, 0x23,
+ 0xd7, 0x33, 0xdc, 0xdf, 0xd5, 0x06, 0x05, 0xe5, 0xb1, 0x48, 0xe9, 0xfa, 0x1a,
+ 0x1c, 0xbe, 0x51, 0x03, 0x15, 0xf0, 0xfe, 0xfd, 0xdf, 0xb0, 0xe5, 0x0b, 0xf8,
+ 0xfb, 0x44, 0xac, 0xf2, 0xe0, 0x5b, 0x07, 0x6f, 0xdb, 0xfd, 0x21, 0x06, 0x24,
+ 0xee, 0x42, 0xe1, 0x0f, 0xb2, 0xb8, 0xea, 0xb3, 0xf7, 0xf9, 0xf7, 0x2f, 0xd2,
+ 0xab, 0x0c, 0x0d, 0x09, 0x21, 0x9d, 0x59, 0xc7, 0x07, 0xdb, 0x15, 0xfd, 0x21,
+ 0xf2, 0x49, 0xc8, 0x12, 0xdb, 0x70, 0xdb, 0x09, 0x2f, 0x6e, 0xbe, 0xc7, 0xb1,
+ 0xf2, 0xfd, 0x1e, 0xef, 0x0a, 0xe8, 0xcb, 0xeb, 0x39, 0xf7, 0x06, 0x9d, 0x1b,
+ 0x3e, 0xb0, 0xe5, 0xed, 0xe5, 0xf7, 0x13, 0x01, 0x43, 0x7f, 0xcd, 0xfd, 0xf5,
+ 0x6a, 0x35, 0x08, 0xdd, 0xf8, 0xf5, 0x1b, 0xe6, 0xd9, 0xd5, 0xf5, 0xef, 0xdc,
+ 0x12, 0x61, 0x41, 0x4b, 0x09, 0x04, 0xcb, 0x03, 0xfd, 0xc2, 0xe0, 0x85, 0xea,
+ 0xba, 0xf7, 0xfd, 0x6b, 0xc0, 0x26, 0xc8, 0x0a, 0xce, 0xe2, 0xfe, 0xfe, 0xb2,
+ 0x59, 0x08, 0xc9, 0x31, 0x2d, 0xef, 0x57, 0x06, 0xe0, 0x48, 0x95, 0x73, 0x29,
+ 0x49, 0xea, 0x77, 0x31, 0x3b, 0x24, 0x55, 0x34, 0x2e, 0xc1, 0x23, 0x26, 0xe7,
+ 0x1d, 0x50, 0x1a, 0xb7, 0xe9, 0xbd, 0x49, 0x20, 0x29, 0xe3, 0x0f, 0x7b, 0x0f,
+ 0xed, 0x2c, 0x64, 0xa7, 0xda, 0xfa, 0xef, 0x21, 0xbf, 0x05, 0xff, 0x99, 0xe1,
+ 0x5c, 0xcc, 0xd8, 0xd6, 0xea, 0xc0, 0x34, 0x1f, 0xad, 0xe1, 0xe6, 0xc9, 0xdc,
+ 0xbb, 0x19, 0xec, 0x31, 0x11, 0x04, 0xd8, 0x50, 0xf1, 0xdf, 0x68, 0x06, 0xca,
+ 0x5d, 0x1d, 0x68, 0xd5, 0x2c, 0x2f, 0xcf, 0x91, 0xbc, 0xc4, 0x0f, 0xb4, 0x5c,
+ 0x68, 0xd0, 0x14, 0x46, 0x42, 0x85, 0x21, 0x12, 0xf5, 0x24, 0xf6, 0xda, 0x2b,
+ 0xd7, 0x69, 0xc7, 0xd9, 0x42, 0xe9, 0x1e, 0x9f, 0xfd, 0x4f, 0x05, 0x0f, 0xe8,
+ 0x0f, 0x4e, 0x21, 0xd2, 0xc7, 0x87, 0x6e, 0x64, 0x5d, 0x3e, 0x23, 0xd9, 0xc7,
+ 0x05, 0xda, 0x0f, 0xec, 0xfc, 0x88, 0xb5, 0x0c, 0xec, 0xe2, 0xb1, 0x09, 0xbf,
+ 0x21, 0x0f, 0xfc, 0x3d, 0xb6, 0xf9, 0x29, 0x05, 0x7f, 0x28, 0xe9, 0x03, 0xf7,
+ 0xf1, 0x0f, 0xfa, 0xcc, 0xec, 0x01, 0xda, 0xf1, 0xc1, 0xe0, 0x5d, 0x47, 0x05,
+ 0xfb, 0x16, 0xe7, 0x16, 0x20, 0x1d, 0xdd, 0xdd, 0x2b, 0x5a, 0x1b, 0x45, 0x67,
+ 0xfb, 0x00, 0xe7, 0xd9, 0x1b, 0xed, 0xe3, 0x17, 0x1d, 0x59, 0x1c, 0xd2, 0x56,
+ 0x7f, 0xeb, 0xfe, 0xcc, 0xe9, 0xfc, 0x1a, 0xcc, 0x37, 0x27, 0xec, 0x30, 0x16,
+ 0x41, 0xc1, 0x29, 0x8c, 0xe4, 0x01, 0x36, 0xe0, 0xfe, 0x16, 0x1b, 0x17, 0xb5,
+ 0xfb, 0xe6, 0x8b, 0xed, 0xf9, 0xe6, 0x11, 0xe5, 0x2a, 0xec, 0xd3, 0xf1, 0xdd,
+ 0x0f, 0xc9, 0x38, 0xc4, 0xdf, 0xc7, 0x0a, 0xcb, 0x12, 0x32, 0x59, 0x17, 0x4b,
+ 0x1f, 0xe6, 0x03, 0x1a, 0xda, 0xe6, 0x3d, 0x36, 0x11, 0x14, 0xc1, 0xa6, 0x2e,
+ 0xd2, 0xf8, 0x1e, 0x06, 0x37, 0x16, 0xca, 0xdd, 0x3a, 0x25, 0xee, 0x42, 0xb7,
+ 0xe3, 0xdf, 0xfd, 0xdf, 0x29, 0xed, 0xa3, 0x20, 0xc2, 0x37, 0x95, 0x57, 0xea,
+ 0x0c, 0x0e, 0x08, 0xf3, 0xf9, 0xf9, 0x9a, 0x1c, 0xb6, 0x04, 0xdd, 0x14, 0xea,
+ 0x06, 0x96, 0xeb, 0x60, 0x26, 0xc6, 0x7f, 0x01, 0xe2, 0xb4, 0x21, 0xb9, 0x38,
+ 0x41, 0x1d, 0x3b, 0x22, 0x6e, 0xe0, 0xc4, 0xa3, 0x1e, 0xd5, 0xf5, 0xa8, 0x46,
+ 0xb8, 0xf5, 0x1f, 0x20, 0xfa, 0x73, 0xe5, 0x9a, 0xcb, 0x68, 0x06, 0x79, 0x59,
+ 0xf9, 0x37, 0x2f, 0x0b, 0xa9, 0xbf, 0xb9, 0x3f, 0x0b, 0xca, 0xaa, 0x1f, 0x05,
+ 0x1e, 0x41, 0x05, 0x08, 0x0f, 0xfb, 0xc5, 0x32, 0xb4, 0xc8, 0xf4, 0x05, 0xf1,
+ 0x93, 0x0a, 0x4c, 0x46, 0xfe, 0xbd, 0x3a, 0xc2, 0xc3, 0x4e, 0xbe, 0xcb, 0xd7,
+ 0xa9, 0xc6, 0xe5, 0xed, 0x95, 0xdf, 0xfa, 0x32, 0xf2, 0xc6, 0xfd, 0x95, 0xe9,
+ 0x45, 0x0c, 0x13, 0x17, 0x01, 0xcf, 0x23, 0x23, 0xd8, 0xc9, 0x05, 0xac, 0x21,
+ 0xac, 0xc0, 0x2e, 0xec, 0xe7, 0x3c, 0xf9, 0xdc, 0xde, 0x0f, 0xe8, 0xf9, 0x27,
+ 0xbe, 0xd7, 0x06, 0xfe, 0xdb, 0xa6, 0xd4, 0xc1, 0x0e, 0x07, 0xd9, 0x2b, 0xe4,
+ 0x07, 0xff, 0xef, 0xe5, 0xdd, 0xb6, 0x4d, 0x81, 0x06, 0xeb, 0x48, 0xe3, 0xea,
+ 0xd0, 0xee, 0x5f, 0x3f, 0xb8, 0x21, 0xf1, 0xb7, 0x0b, 0x2c, 0x17, 0x07, 0xcd,
+ 0xe7, 0xfe, 0x34, 0x0b, 0xfd, 0xc8, 0x0e, 0x66, 0x1b, 0x4a, 0xfa, 0xb1, 0xfc,
+ 0xee, 0x5c, 0xd1, 0xd4, 0x1e, 0x12, 0xb0, 0xcb, 0x22, 0x15, 0x03, 0x02, 0xf3,
+ 0x0f, 0x91, 0x0a, 0x03, 0x2f, 0xbf, 0xd4, 0x0a, 0xc3, 0xef, 0xa3, 0x0b, 0xf9,
+ 0xf0, 0x46, 0x06, 0xcc, 0xfd, 0x04, 0x11, 0xec, 0xd6, 0x61, 0xee, 0xd3, 0x20,
+ 0x60, 0xe5, 0xff, 0xc7, 0xfc, 0xf4, 0x63, 0x29, 0xd8, 0x2f, 0xff, 0xe9, 0xfd,
+ 0x15, 0xff, 0x0c, 0x25, 0x1a, 0x36, 0x11, 0xd3, 0xc5, 0xf1, 0x47, 0xec, 0xf4,
+ 0xd8, 0x11, 0x41, 0xe5, 0xf2, 0xa8, 0xea, 0x1a, 0x0e, 0xf8, 0x2b, 0xf9, 0x1d,
+ 0xc6, 0x3f, 0x3b, 0xb6, 0xd5, 0x95, 0x05, 0x0e, 0xe2, 0xf2, 0xb1, 0x03, 0xf2,
+ 0x36, 0xb3, 0x3b, 0x24, 0x1a, 0x2c, 0xe2, 0x5c, 0x37, 0xe4, 0xcb, 0x01, 0x2d,
+ 0xe6, 0xee, 0xe9, 0x23, 0xe5, 0x08, 0xa6, 0xb4, 0xfe, 0x90, 0xdf, 0xf0, 0x36,
+ 0x21, 0xbd, 0xb6, 0x08, 0x07, 0x2d, 0xe7, 0x99, 0xff, 0x29, 0xe9, 0xd2, 0xe9,
+ 0xc5, 0x22, 0x18, 0x4b, 0x0a, 0x01, 0x26, 0x06, 0x20, 0xed, 0xde, 0xe5, 0x0d,
+ 0xfd, 0xf7, 0xb3, 0x0a, 0x12, 0x3e, 0xed, 0x00, 0x0d, 0xb6, 0x3f, 0xff, 0x1a,
+ 0x17, 0x1d, 0xee, 0x06, 0x01, 0x04, 0x68, 0xf2, 0xd7, 0xc4, 0xf1, 0x15, 0xe6,
+ 0x17, 0xf2, 0x0e, 0x2b, 0xd8, 0x39, 0xf5, 0xdf, 0x18, 0x44, 0x00, 0x23, 0xf8,
+ 0x35, 0x21, 0x7f, 0x86, 0x37, 0xdc, 0x13, 0xdd, 0xd1, 0x14, 0x0a, 0x25, 0x14,
+ 0x28, 0x19, 0xed, 0xd9, 0xfd, 0xcb, 0xe8, 0x36, 0xf6, 0x3a, 0x10, 0xda, 0xe5,
+ 0xc6, 0x4b, 0x94, 0x04, 0x32, 0xa1, 0x57, 0xbb, 0x14, 0x21, 0x36, 0x28, 0x0f,
+ 0x39, 0x93, 0xd0, 0xd7, 0xc8, 0x14, 0xdc, 0x34, 0xe9, 0x43, 0x24, 0xfe, 0xda,
+ 0xaf, 0x10, 0x19, 0xf5, 0x1a, 0xd9, 0xeb, 0x23, 0x05, 0xe4, 0x35, 0x0d, 0x30,
+ 0x13, 0xc7, 0xc1, 0x19, 0xc3, 0x32, 0x8a, 0x48, 0x2c, 0xad, 0x15, 0xf8, 0x09,
+ 0x52, 0x0e, 0xe2, 0x03, 0xea, 0x1b, 0xa4, 0xc4, 0xc4, 0x5d, 0xca, 0x17, 0x09,
+ 0xca, 0x1e, 0x33, 0xab, 0x2b, 0xe6, 0x9d, 0xa9, 0xb9, 0x0e, 0x3b, 0xfa, 0xb3,
+ 0x21, 0xcd, 0x29, 0x52, 0x32, 0x63, 0x0c, 0xfa, 0xd0, 0x11, 0xfd, 0x81, 0x15,
+ 0x2b, 0xd0, 0xec, 0x09, 0xee, 0xb3, 0x3e, 0x06, 0x25, 0x30, 0xe2, 0x0e, 0x18,
+ 0x1c, 0xe6, 0x01, 0xf2, 0x66, 0xef, 0x33, 0xca, 0x41, 0xf1, 0x33, 0xdd, 0xfa,
+ 0xf3, 0x5c, 0xc8, 0x7f, 0xe3, 0x14, 0x31, 0x3f, 0xc9, 0xff, 0xf7, 0xfc, 0x20,
+ 0xfc, 0x0b, 0x10, 0x20, 0xf2, 0x36, 0xea, 0xd1, 0xf7, 0x2c, 0x1b, 0xfb, 0x25,
+ 0x0f, 0xfb, 0xdf, 0x17, 0x4e, 0xf6, 0x5e, 0xcb, 0xe3, 0xcc, 0xe1, 0xe2, 0xb3,
+ 0x0b, 0xf0, 0x36, 0xc0, 0xd9, 0x12, 0xe7, 0xfd, 0xfc, 0xf6, 0xdc, 0x1a, 0x0a,
+ 0xf1, 0x16, 0xfb, 0x1b, 0x0e, 0xfd, 0x3f, 0xf5, 0xe3, 0xb8, 0x23, 0xec, 0x46,
+ 0x1f, 0x28, 0xf1, 0xe1, 0xfb, 0x10, 0xfc, 0x09, 0xf4, 0x23, 0x0c, 0xf7, 0x17,
+ 0x2d, 0x12, 0xc3, 0xf9, 0xf7, 0xe6, 0x0d, 0x22, 0x03, 0x3b, 0xf9, 0x0b, 0xeb,
+ 0xb9, 0x13, 0x15, 0x2a, 0x0f, 0xc7, 0x1a, 0x1b, 0xee, 0x40, 0xe9, 0x01, 0x06,
+ 0xf9, 0x45, 0x06, 0xf4, 0x1c, 0x0e, 0x33, 0xcb, 0x56, 0x0f, 0x07, 0x15, 0xf5,
+ 0x46, 0x22, 0xe8, 0x08, 0xd5, 0x12, 0xe4, 0xe3, 0x13, 0x2b, 0x19, 0x1b, 0x73,
+ 0x14, 0xff, 0xd8, 0x57, 0xe7, 0x32, 0x1b, 0x02, 0x3c, 0xc9, 0x19, 0x00, 0xc7,
+ 0x19, 0xff, 0x12, 0xfc, 0x38, 0xfe, 0xf3, 0x11, 0xb2, 0x30, 0xe3, 0x07, 0x30,
+ 0xde, 0x42, 0x07, 0xd2, 0xc5, 0xe4, 0xf4, 0xd3, 0x0d, 0x9b, 0xcd, 0xcd, 0x1e,
+ 0x2b, 0xf9, 0xe4, 0x2d, 0x1c, 0x26, 0xe3, 0x40, 0xd2, 0x0f, 0xa4, 0x26, 0x0b,
+ 0xeb, 0x2a, 0xdf, 0xf2, 0xd7, 0x36, 0xd0, 0xad, 0xbe, 0x36, 0x0e, 0x21, 0xf7,
+ 0x1b, 0xc0, 0x1c, 0x27, 0x01, 0xe8, 0xdc, 0x18, 0x17, 0xe0, 0xf5, 0x1a, 0xf5,
+ 0x02, 0x02, 0xe9, 0x20, 0x07, 0x06, 0x81, 0xec, 0x42, 0x18, 0x1d, 0xd7, 0x47,
+ 0xaf, 0xca, 0xea, 0xfa, 0xbe, 0x35, 0x2a, 0xc7, 0x03, 0xd5, 0xf6, 0xe6, 0x20,
+ 0xb9, 0xb4, 0xc1, 0xec, 0x01, 0xc6, 0xc5, 0x00, 0xd0, 0x01, 0xf3, 0xd4, 0x66,
+ 0x08, 0x03, 0x1f, 0xeb, 0x00, 0x19, 0xb1, 0x38, 0xca, 0x0e, 0x3c, 0x81, 0xa9,
+ 0xe8, 0x35, 0xbb, 0x07, 0xf3, 0x3c, 0xea, 0x2a, 0x4a, 0xd3, 0x0a, 0xc7, 0xed,
+ 0xe4, 0x08, 0x1e, 0xd7, 0xe1, 0x42, 0x29, 0xcc, 0xda, 0x23, 0x01, 0xbb, 0x26,
+ 0xbf, 0x1c, 0xc3, 0xef, 0xdd, 0xd4, 0x38, 0xff, 0x0d, 0x47, 0x37, 0x44, 0xd2,
+ 0xe6, 0x8d, 0x47, 0x28, 0x2a, 0xf5, 0xd6, 0x4d, 0xac, 0xca, 0xe0, 0xb9, 0x2a,
+ 0x2d, 0x4f, 0xe1, 0x29, 0xf2, 0xe2, 0x14, 0xf4, 0xb8, 0x43, 0x2e, 0x24, 0xeb,
+ 0x40, 0x2f, 0xe4, 0x21, 0xf5, 0xd4, 0x21, 0x3f, 0xd4, 0x1c, 0x29, 0x25, 0x1a,
+ 0x93, 0x30, 0xab, 0x55, 0xf3, 0xc0, 0x14, 0xe0, 0x7f, 0xe7, 0x1a, 0xe6, 0xd5,
+ 0xeb, 0xe0, 0x36, 0x0d, 0x21, 0x2c, 0x58, 0xc7, 0xfa, 0x18, 0xe4, 0x4f, 0xb6,
+ 0x27, 0xd3, 0xe3, 0xd6, 0xff, 0xde, 0xd2, 0xe9, 0xdf, 0x00, 0x39, 0x02, 0xe7,
+ 0x84, 0xbb, 0x01, 0x1b, 0xd9, 0x04, 0xfb, 0x24, 0x05, 0x1d, 0xdb, 0x20, 0x1c,
+ 0xea, 0x3a, 0xf9, 0x1e, 0xf3, 0xe4, 0xea, 0x35, 0x04, 0x16, 0x28, 0x26, 0x3f,
+ 0x1e, 0xf4, 0xf2, 0x06, 0x28, 0xfa, 0x27, 0x01, 0x45, 0x02, 0xea, 0xec, 0x0e,
+ 0x20, 0x1f, 0xdb, 0xed, 0xdd, 0x10, 0x24, 0xfe, 0x5a, 0x0c, 0xda, 0xf2, 0xe8,
+ 0xda, 0xd0, 0xf9, 0xa5, 0x15, 0xdc, 0x0a, 0xe7, 0xd3, 0x3e, 0xd7, 0xfe, 0xf5,
+ 0x35, 0x28, 0xe5, 0xe3, 0x1b, 0xfe, 0xcd, 0x09, 0x1c, 0xcb, 0x4a, 0x0e, 0xdf,
+ 0xdf, 0x08, 0x18, 0x19, 0x39, 0x28, 0x2b, 0x12, 0x02, 0x14, 0x08, 0x4a, 0xcf,
+ 0xb3, 0xf7, 0xf8, 0x9c, 0x3e, 0x05, 0xaf, 0x6c, 0x12, 0x03, 0xeb, 0x7f, 0x31,
+ 0xad, 0x04, 0x4d, 0x00, 0x39, 0x31, 0x00, 0xe6, 0xe9, 0x38, 0xd8, 0xbb, 0x25,
+ 0xfe, 0xce, 0xd9, 0x3b, 0xe1, 0x0b, 0xfb, 0xe6, 0x06, 0xfa, 0x2d, 0x26, 0x3f,
+ 0xed, 0xac, 0xd7, 0x0b, 0xcc, 0xbc, 0xf9, 0xec, 0xc6, 0x1f, 0x22, 0xd9, 0x0d,
+ 0xef, 0xe5, 0xf6, 0x4d, 0x17, 0x7f, 0x2d, 0xbc, 0xec, 0x01, 0xf9, 0x6f, 0xb6,
+ 0xfb, 0x11, 0xd5, 0x0f, 0xe5, 0xdf, 0xe9, 0xd7, 0xe5, 0x23, 0xf8, 0xdf, 0x08,
+ 0xfd, 0xf3, 0xdf, 0x50, 0xd6, 0x2a, 0x01, 0xe8, 0x0b, 0xca, 0xfc, 0xd4, 0xe5,
+ 0xdf, 0xdd, 0xfc, 0x02, 0x42, 0xf0, 0xde, 0x25, 0xf3, 0xbb, 0x01, 0xd0, 0xdb,
+ 0xb6, 0x59, 0xeb, 0xe5, 0xdd, 0xdf, 0x20, 0xdb, 0xb4, 0xe1, 0xc3, 0xf0, 0x1f,
+ 0xcf, 0x01, 0xf3, 0x2a, 0x53, 0xf3, 0xb4, 0x47, 0xf1, 0x14, 0xd3, 0x33, 0xcb,
+ 0x16, 0xcb, 0xfc, 0x05, 0x01, 0xfb, 0xe8, 0xb1, 0x18, 0x20, 0xcf, 0xcd, 0xde,
+ 0x23, 0x8f, 0x32, 0x04, 0xfc, 0xba, 0x3a, 0xf5, 0x4d, 0xef, 0xd0, 0xdb, 0xd4,
+ 0xe0, 0xf8, 0x18, 0x28, 0x1e, 0xd7, 0x24, 0xe8, 0xd6, 0x0b, 0x5a, 0xcd, 0x40,
+ 0xfe, 0xb3, 0x16, 0xcb, 0xde, 0x4b, 0xe8, 0x25, 0xe0, 0x03, 0x2c, 0x20, 0x22,
+ 0xaa, 0xda, 0xc8, 0xf6, 0xf2, 0xe2, 0xe7, 0x17, 0xb2, 0x13, 0x6f, 0x30, 0xd3,
+ 0xe1, 0x2d, 0x0d, 0x00, 0x5b, 0xb1, 0x1c, 0x03, 0xfa, 0xa0, 0x0d, 0xfd, 0xb6,
+ 0xbf, 0xf9, 0x55, 0x3e, 0x22, 0xe3, 0x8f, 0xdb, 0x5e, 0xb3, 0xe5, 0x13, 0x14,
+ 0x2c, 0x33, 0xf3, 0xb6, 0xe1, 0x8a, 0x09, 0x16, 0x04, 0x15, 0x00, 0x62, 0xf8,
+ 0x1c, 0x36, 0x6f, 0xd6, 0xca, 0x02, 0xcd, 0x87, 0x4c, 0x85, 0x22, 0x2f, 0xbc,
+ 0x0a, 0x23, 0x41, 0x10, 0x08, 0x50, 0xd8, 0xa3, 0x13, 0x0d, 0xe1, 0x1f, 0x02,
+ 0xee, 0x26, 0xe3, 0xf4, 0x21, 0x0f, 0xe6, 0x13, 0x04, 0xff, 0x45, 0x4f, 0x89,
+ 0xc4, 0x7f, 0xfd, 0x29, 0xfc, 0x5b, 0xc2, 0x30, 0xe6, 0xb2, 0xee, 0xc0, 0x30,
+ 0xc8, 0xfb, 0xf3, 0xd8, 0xc3, 0x74, 0x0f, 0xf2, 0x41, 0x1a, 0xfe, 0x18, 0xd2,
+ 0xdd, 0xbc, 0xda, 0x3f, 0xfd, 0xc6, 0xb3, 0xdf, 0x0e, 0x27, 0xe1, 0xfb, 0x27,
+ 0x0e, 0x43, 0xaa, 0x66, 0x16, 0x29, 0x1a, 0x0c, 0x0c, 0xe7, 0x14, 0x10, 0x22,
+ 0x64, 0xa9, 0x16, 0xff, 0x11, 0x14, 0xdd, 0x2a, 0x42, 0x0f, 0xf0, 0x11, 0xbb,
+ 0xf3, 0xe9, 0x4e, 0xe2, 0x16, 0x92, 0xe0, 0xce, 0x11, 0xf2, 0xf4, 0xc6, 0xfe,
+ 0x7f, 0xfc, 0xbc, 0xf8, 0xd1, 0xe9, 0xe1, 0xe6, 0xe2, 0x13, 0x45, 0x1e, 0xe7,
+ 0xc8, 0xf8, 0x08, 0x31, 0xae, 0x13, 0xf4, 0xc2, 0xfc, 0xf5, 0x27, 0x0c, 0x2c,
+ 0x63, 0x3d, 0xda, 0x3b, 0xcc, 0xe4, 0xd1, 0xf8, 0x0c, 0xe0, 0xe2, 0xa5, 0xe5,
+ 0xf5, 0xe5, 0xff, 0x2f, 0xe9, 0x28, 0xca, 0x0e, 0xe7, 0x24, 0xb4, 0x3f, 0xdb,
+ 0x05, 0xc6, 0x25, 0xf2, 0x43, 0x05, 0xc5, 0xde, 0xd9, 0x26, 0xd5, 0xfe, 0xf4,
+ 0x1b, 0x3c, 0x25, 0x17, 0x23, 0xf2, 0xe2, 0x00, 0xe2, 0x20, 0xba, 0xdb, 0xff,
+ 0xdd, 0xc0, 0x11, 0xfe, 0x14, 0x03, 0x31, 0x00, 0x0c, 0x7f, 0xf8, 0x0d, 0x1c,
+ 0x05, 0xfe, 0x2b, 0xbe, 0x32, 0x04, 0xfd, 0xad, 0x38, 0xe9, 0x25, 0x19, 0xca,
+ 0xe5, 0x19, 0xe3, 0x69, 0xf3, 0x45, 0xfb, 0x42, 0x17, 0xe1, 0xe8, 0xf4, 0xf6,
+ 0xe2, 0xe5, 0xb1, 0xbf, 0x14, 0xd6, 0x2b, 0x3b, 0x04, 0xf1, 0xce, 0xfb, 0xbb,
+ 0xcd, 0xfb, 0xec, 0xfc, 0xd5, 0xf6, 0x11, 0x5e, 0xf0, 0x34, 0xc0, 0x1f, 0xbc,
+ 0xdb, 0x23, 0xe9, 0x21, 0x22, 0xe1, 0x04, 0x35, 0xdf, 0x0a, 0x26, 0xed, 0x05,
+ 0x60, 0xe9, 0x1f, 0xdf, 0x47, 0x67, 0x03, 0xf3, 0xf7, 0x4e, 0x27, 0xee, 0x01,
+ 0x01, 0xe6, 0x37, 0x0d, 0x0e, 0x1e, 0xfb, 0xf1, 0xfb, 0xcc, 0xb5, 0x44, 0xf8,
+ 0xb5, 0xee, 0x23, 0x31, 0x09, 0xce, 0xfb, 0xdc, 0x02, 0x17, 0x01, 0x6d, 0x26,
+ 0xe4, 0x31, 0x33, 0xc8, 0x27, 0xea, 0xfe, 0x05, 0xfc, 0x25, 0x08, 0x47, 0xe8,
+ 0x2b, 0xdc, 0xfb, 0xe8, 0xf3, 0x10, 0x31, 0x08, 0x23, 0x22, 0x03, 0xcb, 0x05,
+ 0xf9, 0x0f, 0x0e, 0x02, 0x09, 0xc9, 0x00, 0x36, 0x12, 0x05, 0xca, 0xec, 0xbd,
+ 0xd8, 0xf0, 0x25, 0x1c, 0x0f, 0x21, 0xdf, 0x25, 0xdc, 0x04, 0xd8, 0x1c, 0x01,
+ 0xde, 0xe8, 0x42, 0x04, 0xce, 0xd0, 0xe7, 0xc8, 0xb2, 0x53, 0x07, 0xfa, 0xd5,
+ 0x17, 0xe0, 0xe6, 0x02, 0xf6, 0xd2, 0xfc, 0x07, 0xdf, 0x05, 0x1f, 0xfd, 0xe3,
+ 0xdb, 0xc7, 0x22, 0x06, 0x0a, 0xfe, 0x30, 0x3a, 0x02, 0xed, 0x29, 0x2e, 0xfb,
+ 0x22, 0x0d, 0xee, 0x1b, 0xf6, 0xc9, 0xe9, 0xfa, 0xc0, 0xa6, 0xac, 0x09, 0xcc,
+ 0xd2, 0x50, 0xea, 0xdc, 0x76, 0xf6, 0x46, 0x32, 0xef, 0xd7, 0x24, 0x07, 0x7f,
+ 0x22, 0xda, 0xf9, 0x15, 0x0a, 0x4b, 0xc8, 0xc2, 0xc1, 0xca, 0x1c, 0x13, 0xf5,
+ 0x1d, 0x45, 0x25, 0x2e, 0xf0, 0xf2, 0x30, 0x07, 0x36, 0xce, 0x28, 0xeb, 0x33,
+ 0xde, 0xe5, 0x0b, 0x0e, 0xe6, 0xe4, 0xdc, 0x30, 0xfa, 0x8f, 0xdf, 0xd0, 0x58,
+ 0xcd, 0x5c, 0xf4, 0xee, 0x25, 0xdf, 0x1a, 0x36, 0x05, 0xcc, 0x24, 0xfb, 0xea,
+ 0xb2, 0x00, 0x53, 0x2a, 0xde, 0xa7, 0x20, 0xe2, 0x1a, 0x4b, 0xe0, 0x56, 0x24,
+ 0x06, 0xc8, 0x00, 0x09, 0x05, 0xf1, 0xc3, 0xa2, 0x8e, 0xfa, 0x6d, 0x12, 0xf4,
+ 0x22, 0xe4, 0xeb, 0x32, 0x6b, 0x19, 0x60, 0x0f, 0xa0, 0xf2, 0x88, 0xf3, 0x99,
+ 0xdf, 0x0f, 0xdc, 0xdc, 0x20, 0xe7, 0x41, 0x54, 0xdb, 0xf3, 0x27, 0xde, 0xcc,
+ 0x45, 0xe0, 0xe5, 0x21, 0xbe, 0xcc, 0x0c, 0xe8, 0x35, 0x3e, 0x3c, 0xd2, 0x76,
+ 0xe7, 0xc4, 0xed, 0x31, 0x00, 0x4c, 0x7f, 0xd8, 0xb2, 0xe6, 0x1b, 0x29, 0x0b,
+ 0x2c, 0x0b, 0x92, 0x43, 0x1b, 0x26, 0xfe, 0xce, 0x1b, 0x17, 0xb9, 0xff, 0xf7,
+ 0x17, 0x16, 0x2a, 0xc1, 0x06, 0xc6, 0xde, 0xd1, 0x07, 0x08, 0x18, 0x00, 0xf7,
+ 0xf9, 0x3a, 0x14, 0x02, 0x0f, 0x1d, 0xc8, 0xd4, 0x48, 0xf7, 0xf4, 0xe9, 0xf6,
+ 0x06, 0x45, 0xf0, 0xee, 0x00, 0x1f, 0x27, 0x46, 0x17, 0x41, 0x7f, 0xfd, 0xe5,
+ 0x06, 0x19, 0x05, 0xea, 0xf4, 0x11, 0x01, 0x15, 0xb8, 0xe0, 0xd6, 0xdd, 0xeb,
+ 0x30, 0xcc, 0xe8, 0x1b, 0x01, 0x0f, 0xf1, 0xd7, 0x20, 0xef, 0x04, 0x09, 0xbf,
+ 0x3a, 0x21, 0x01, 0xd2, 0xe3, 0x18, 0x15, 0xbe, 0x48, 0xf3, 0x1a, 0x10, 0xe0,
+ 0xe2, 0xed, 0x48, 0x2b, 0xe7, 0x53, 0x64, 0xd3, 0xe6, 0xdb, 0xef, 0xf5, 0xb8,
+ 0xfc, 0xc2, 0x4c, 0x23, 0x0d, 0x12, 0x1b, 0x04, 0x09, 0xca, 0x2c, 0xc3, 0x91,
+ 0xcb, 0x12, 0xd3, 0x3d, 0xc2, 0xfc, 0xf4, 0x1b, 0x04, 0x10, 0xbe, 0xf6, 0xcb,
+ 0xcd, 0xd9, 0x03, 0xe9, 0xf4, 0xec, 0x34, 0x05, 0xf0, 0x0d, 0x2b, 0x06, 0x2d,
+ 0xe4, 0xf5, 0xb9, 0xe4, 0xc1, 0x43, 0xd6, 0xd5, 0x14, 0x13, 0xe8, 0x05, 0x2f,
+ 0xf6, 0x2a, 0xed, 0xb8, 0xc9, 0x05, 0x0d, 0xec, 0x4d, 0x49, 0x42, 0xef, 0xce,
+ 0xcf, 0x27, 0x3d, 0x71, 0x02, 0x61, 0x24, 0xe5, 0xb6, 0xf5, 0xeb, 0xd3, 0x3a,
+ 0xca, 0x43, 0xd8, 0x47, 0x04, 0x2d, 0x1f, 0x3f, 0xc4, 0xba, 0xb1, 0xf3, 0x36,
+ 0xec, 0xeb, 0xdd, 0x04, 0x1c, 0xda, 0x50, 0x34, 0x95, 0x2a, 0x96, 0xf9, 0x62,
+ 0xd9, 0x08, 0xa2, 0xc1, 0x03, 0x9e, 0xa9, 0xe0, 0xf8, 0xd2, 0x1c, 0xf1, 0xbd,
+ 0x52, 0xa0, 0xc9, 0xdf, 0xfc, 0x11, 0xdf, 0x03, 0xfd, 0xd2, 0x81, 0x04, 0x03,
+ 0x0a, 0x8f, 0x3b, 0x0b, 0x93, 0xd5, 0x22, 0x06, 0x25, 0xc3, 0x19, 0x5c, 0xc9,
+ 0xed, 0x2e, 0x24, 0xda, 0xd2, 0xf5, 0xf6, 0xfc, 0xcb, 0x1a, 0xa3, 0xdd, 0x18,
+ 0xa0, 0x9a, 0xce, 0xec, 0x27, 0x04, 0xfc, 0xf9, 0x04, 0x50, 0x0b, 0xcd, 0x2f,
+ 0xc3, 0xba, 0xe0, 0x1d, 0x28, 0x37, 0x3c, 0x6f, 0xc8, 0x11, 0xb0, 0xf5, 0xb5,
+ 0x12, 0x6c, 0x13, 0x35, 0x92, 0x3b, 0x06, 0xff, 0x06, 0xc2, 0xa6, 0xc1, 0xaf,
+ 0xfa, 0xdf, 0xdc, 0x2f, 0x00, 0xc3, 0x0b, 0xf3, 0xf4, 0xd4, 0xb5, 0xd6, 0x22,
+ 0x1e, 0x1d, 0xe4, 0x30, 0xe9, 0xff, 0x44, 0xb9, 0xab, 0x10, 0xff, 0xee, 0xdf,
+ 0x07, 0x0a, 0xe8, 0xdf, 0x15, 0xbc, 0xe1, 0x03, 0xf3, 0x2d, 0x24, 0xf6, 0x51,
+ 0xfc, 0x81, 0xf5, 0xf9, 0xd7, 0x23, 0x2a, 0xa1, 0xd0, 0x2c, 0x11, 0xfd, 0xfc,
+ 0xf4, 0xfd, 0xd6, 0x30, 0x26, 0x06, 0xe8, 0xd3, 0xca, 0x79, 0x19, 0xef, 0x37,
+ 0xfc, 0x3d, 0xd2, 0xc5, 0xc8, 0x10, 0xc2, 0xec, 0x4c, 0xfc, 0x37, 0x11, 0xf8,
+ 0x12, 0x08, 0x13, 0xb6, 0x13, 0x01, 0xb4, 0x15, 0xf7, 0xca, 0x25, 0x29, 0xc6,
+ 0xab, 0xc0, 0xe1, 0x9f, 0x07, 0x27, 0x3c, 0xd1, 0x3f, 0xd9, 0xb1, 0xff, 0xce,
+ 0xee, 0xd3, 0x0b, 0x25, 0x02, 0x07, 0x27, 0x0f, 0xfb, 0x5e, 0xf7, 0x20, 0x27,
+ 0x10, 0xce, 0x3c, 0xf9, 0x2c, 0xc6, 0xb6, 0xa4, 0xd6, 0x9a, 0x30, 0xe4, 0x20,
+ 0xbe, 0x1b, 0xa2, 0xdb, 0x0f, 0x88, 0xf7, 0x0f, 0x03, 0x43, 0xc7, 0xfe, 0xd0,
+ 0xd2, 0x11, 0xce, 0x31, 0x25, 0xf9, 0x2f, 0xfc, 0xd4, 0xe2, 0xab, 0xc1, 0x6d,
+ 0x00, 0xda, 0xb0, 0xd9, 0xe2, 0x57, 0x4b, 0xe6, 0x05, 0xfe, 0xc0, 0x07, 0x40,
+ 0xf9, 0x22, 0x66, 0xf7, 0xe5, 0xf7, 0x11, 0x1b, 0x9a, 0xfe, 0x1e, 0x02, 0x2c,
+ 0x66, 0x1e, 0xf1, 0xd0, 0x2e, 0xe1, 0x11, 0x66, 0xcd, 0xe5, 0x2d, 0xf7, 0x12,
+ 0xe8, 0xf4, 0xd2, 0xd6, 0x30, 0x5a, 0x20, 0xc4, 0x26, 0x46, 0x27, 0x4c, 0x0f,
+ 0xd3, 0xe7, 0xee, 0x10, 0x1d, 0xfc, 0x81, 0xf9, 0xce, 0x06, 0xfd, 0x08, 0xf9,
+ 0xc3, 0xe4, 0xc4, 0x1b, 0x01, 0x01, 0x27, 0xba, 0xea, 0x3f, 0x7f, 0x74, 0x04,
+ 0xe9, 0xe7, 0xe5, 0x13, 0x2a, 0x34, 0x0b, 0xf4, 0x47, 0xf1, 0xd9, 0xdc, 0x10,
+ 0x3f, 0x40, 0x2a, 0xff, 0xbb, 0xd8, 0x4c, 0x08, 0x16, 0xbe, 0xff, 0xfd, 0xd2,
+ 0xfc, 0x0e, 0xd1, 0xbd, 0xfd, 0x3f, 0xd0, 0x08, 0xdc, 0xff, 0x14, 0x0a, 0xe7,
+ 0x1b, 0xdb, 0x08, 0xbf, 0xf2, 0x0e, 0xc8, 0xfa, 0x7c, 0x0f, 0x13, 0xc9, 0xe7,
+ 0xfd, 0x6a, 0x20, 0xe9, 0x59, 0x4a, 0xfa, 0x29, 0x30, 0x11, 0x37, 0x08, 0xfd,
+ 0xda, 0x32, 0x05, 0x04, 0x32, 0x2e, 0x10, 0x0e, 0xf5, 0xd3, 0xf8, 0xde, 0xf1,
+ 0xae, 0x25, 0x1d, 0x98, 0xe6, 0x43, 0x14, 0x11, 0xba, 0xd9, 0xb6, 0x06, 0xe3,
+ 0xf4, 0xfa, 0xce, 0xe2, 0xe5, 0xb8, 0xaa, 0x24, 0xfc, 0x1a, 0xea, 0x6b, 0xc0,
+ 0x8f, 0xf5, 0xb0, 0x2d, 0xe0, 0xed, 0x5b, 0x99, 0xbe, 0x12, 0xc2, 0xeb, 0xf1,
+ 0x6e, 0x5a, 0x20, 0x20, 0x1d, 0xdb, 0x25, 0xec, 0x03, 0x18, 0x13, 0xe2, 0xf8,
+ 0xfa, 0x0d, 0x08, 0x1a, 0x26, 0x09, 0x46, 0xd7, 0xdf, 0xe9, 0xaa, 0xe4, 0x08,
+ 0xf7, 0x36, 0xe3, 0xe6, 0xff, 0x05, 0xfe, 0x0f, 0xcf, 0xe3, 0xe1, 0xcd, 0xf7,
+ 0x1a, 0x00, 0x2f, 0x10, 0xd5, 0x1c, 0x02, 0xaf, 0x21, 0xea, 0xd3, 0x00, 0xef,
+ 0xe7, 0xf7, 0xe2, 0xed, 0xc9, 0xf3, 0x04, 0xdd, 0x21, 0x38, 0xda, 0x00, 0x20,
+ 0xed, 0x3c, 0xfe, 0x3f, 0x06, 0xd2, 0xdd, 0xce, 0x4e, 0xe3, 0x05, 0x0c, 0x05,
+ 0xdb, 0x29, 0x08, 0xf2, 0xda, 0x16, 0x23, 0xf2, 0x18, 0x28, 0xe8, 0x31, 0x0c,
+ 0x21, 0xd6, 0xe6, 0x04, 0xf3, 0x07, 0x25, 0xef, 0xf7, 0xfb, 0x03, 0x28, 0xf7,
+ 0xe0, 0xef, 0x05, 0xe5, 0xf6, 0x03, 0xf9, 0x04, 0xe6, 0xfd, 0xf8, 0xe9, 0x0e,
+ 0xe7, 0x03, 0x0b, 0xbe, 0x44, 0x21, 0xcd, 0x2a, 0x27, 0xdf, 0x14, 0x31, 0x7f,
+ 0x03, 0x63, 0x2a, 0x31, 0x17, 0x0b, 0xbc, 0xf6, 0x34, 0x25, 0x01, 0xd0, 0xd5,
+ 0x13, 0x0d, 0xf3, 0x1b, 0xf9, 0xfb, 0xbc, 0x18, 0x16, 0x07, 0xf4, 0x2c, 0x2c,
+ 0x01, 0xe5, 0xf2, 0x06, 0x34, 0x49, 0x27, 0xc8, 0x1d, 0xde, 0x57, 0xff, 0x12,
+ 0xbe, 0x10, 0x07, 0xe5, 0xf2, 0x1d, 0xc8, 0xce, 0x17, 0xb7, 0x03, 0xfb, 0x29,
+ 0xd2, 0xc5, 0xa4, 0x10, 0xd8, 0x24, 0xde, 0xfa, 0x0f, 0x27, 0xcb, 0xf8, 0x00,
+ 0x23, 0xfb, 0xfb, 0xe0, 0xdd, 0x2f, 0xeb, 0x47, 0x7f, 0x0e, 0x04, 0xc7, 0xfe,
+ 0x1e, 0xc9, 0xd4, 0x06, 0x01, 0x04, 0x3d, 0x2a, 0xf2, 0xf8, 0x36, 0xca, 0x16,
+ 0x28, 0x1a, 0x13, 0x0c, 0x3d, 0x04, 0x3a, 0x0e, 0x03, 0xd9, 0x3c, 0x2c, 0x14,
+ 0xd6, 0xe9, 0x05, 0xf2, 0xc5, 0x05, 0xe2, 0xd8, 0x1a, 0x0d, 0x04, 0xf5, 0x17,
+ 0xef, 0x01, 0x39, 0xff, 0x0e, 0x5b, 0xd1, 0xfd, 0xdc, 0x13, 0xf7, 0x0f, 0xd2,
+ 0x27, 0xde, 0x11, 0xe1, 0xdd, 0x10, 0x29, 0x46, 0xdb, 0x1c, 0xef, 0x02, 0x65,
+ 0xd8, 0xef, 0xd4, 0x34, 0xa8, 0xe7, 0x36, 0xf7, 0x11, 0x1d, 0xf5, 0x06, 0xdf,
+ 0xde, 0xeb, 0x07, 0x5c, 0x7f, 0x0d, 0xe6, 0x1f, 0xee, 0x05, 0x0f, 0x20, 0xd0,
+ 0x1d, 0x11, 0x29, 0x4f, 0x14, 0xfa, 0xfb, 0x9e, 0xa0, 0x4a, 0x08, 0xff, 0x15,
+ 0x20, 0x64, 0x02, 0xe5, 0xd7, 0x1b, 0xd2, 0x14, 0xe1, 0x2a, 0x50, 0x9b, 0x21,
+ 0x1d, 0x17, 0x1d, 0x28, 0x9f, 0xdb, 0x31, 0xd4, 0x14, 0xfc, 0xf8, 0xfc, 0xd7,
+ 0xd9, 0x46, 0x1c, 0x45, 0xdb, 0xe0, 0xa9, 0x2d, 0x0f, 0x43, 0x35, 0x46, 0x0d,
+ 0x2d, 0xdc, 0xef, 0xd6, 0x01, 0xb4, 0xf9, 0x22, 0x20, 0x35, 0x12, 0xf4, 0xf4,
+ 0x0f, 0xbb, 0x29, 0xe0, 0xfc, 0xc8, 0x08, 0xf6, 0x48, 0xaf, 0xf2, 0xbc, 0xe4,
+ 0x1f, 0xba, 0xc3, 0xb5, 0xdb, 0xde, 0xdc, 0xea, 0x02, 0x29, 0xf6, 0x0f, 0x12,
+ 0xfe, 0x3f, 0x36, 0xe3, 0xeb, 0xea, 0x0d, 0x1d, 0x1f, 0xdd, 0xf0, 0xfa, 0x15,
+ 0x0a, 0xfe, 0xd8, 0x06, 0x21, 0x0f, 0xf5, 0x24, 0xe0, 0xbb, 0xf7, 0x1a, 0xd8,
+ 0x02, 0x18, 0x20, 0xef, 0xe5, 0x02, 0x0e, 0x06, 0xf9, 0x12, 0xc4, 0x07, 0x44,
+ 0x07, 0xdb, 0xe0, 0xcf, 0x09, 0xce, 0x16, 0xec, 0xec, 0xe0, 0xf5, 0xec, 0x0b,
+ 0x1d, 0x08, 0x3a, 0xd8, 0x0b, 0xd8, 0xf9, 0x03, 0x03, 0xed, 0x0a, 0x19, 0xe9,
+ 0xe8, 0xe1, 0xd7, 0xe6, 0x0a, 0x40, 0xe1, 0xf2, 0x2b, 0x4c, 0xe6, 0x06, 0xf5,
+ 0x07, 0x1c, 0xda, 0xf5, 0x27, 0xde, 0xe3, 0xbb, 0xe3, 0xfe, 0xf4, 0xfb, 0x12,
+ 0xe6, 0x19, 0x7f, 0x4a, 0xf9, 0x1d, 0x2b, 0xf3, 0x19, 0x09, 0x00, 0x12, 0xd2,
+ 0x0d, 0x0d, 0xed, 0xf5, 0xe0, 0xed, 0x0e, 0x05, 0x06, 0x06, 0xe5, 0x19, 0x23,
+ 0x31, 0x33, 0x03, 0x20, 0xf5, 0xde, 0x06, 0xfa, 0xfc, 0xdd, 0xdf, 0xd6, 0x14,
+ 0x0e, 0xed, 0xff, 0x2c, 0x10, 0xef, 0x42, 0x25, 0xd0, 0x0f, 0x13, 0x05, 0xc4,
+ 0xf1, 0x28, 0xfd, 0x0f, 0xf2, 0xed, 0xd6, 0xc7, 0x1a, 0xf3, 0xfd, 0xdf, 0xd1,
+ 0xc9, 0xfd, 0x11, 0x08, 0x01, 0xee, 0x29, 0x3e, 0x05, 0xf8, 0xc0, 0x23, 0x27,
+ 0xce, 0x1c, 0x0b, 0x55, 0xe5, 0xa1, 0x09, 0x08, 0x70, 0xef, 0x22, 0xe6, 0x14,
+ 0x1f, 0xc7, 0x28, 0xd1, 0xf0, 0x10, 0xd2, 0x29, 0x16, 0x3a, 0xed, 0x0c, 0x29,
+ 0x08, 0xf6, 0x2a, 0xd9, 0xe8, 0xce, 0x04, 0xf3, 0xde, 0x20, 0x27, 0xfd, 0x0c,
+ 0x08, 0x01, 0xd9, 0xf0, 0xe1, 0x18, 0x4c, 0x0b, 0xf6, 0xd8, 0xfa, 0x36, 0x20,
+ 0x0c, 0xe1, 0xfe, 0x00, 0x4b, 0xfe, 0x7f, 0x2f, 0x0d, 0xf6, 0x25, 0xfb, 0x36,
+ 0x11, 0x12, 0x48, 0xf1, 0x1a, 0x26, 0xfb, 0x20, 0x08, 0x19, 0xe0, 0xd5, 0xf5,
+ 0x04, 0xd8, 0x06, 0x06, 0xe6, 0xac, 0x19, 0xed, 0xe5, 0x21, 0x23, 0xe1, 0xd5,
+ 0x29, 0x32, 0xf7, 0x0c, 0xc0, 0xf0, 0x40, 0x0c, 0xee, 0x25, 0x17, 0xec, 0xef,
+ 0x26, 0xe5, 0x16, 0xff, 0x19, 0x00, 0x34, 0x27, 0xfb, 0x05, 0x2f, 0x10, 0x7f,
+ 0x67, 0xf3, 0xf6, 0xcf, 0x42, 0x11, 0x10, 0xb4, 0x2d, 0xb9, 0xfb, 0x4d, 0xa4,
+ 0x12, 0x49, 0xef, 0xc5, 0x48, 0xf9, 0xe8, 0x18, 0xf9, 0x00, 0x23, 0xb2, 0xf6,
+ 0xcf, 0xd6, 0xfe, 0x1f, 0x22, 0x25, 0xf0, 0xb8, 0x34, 0x1c, 0x0f, 0xe2, 0x39,
+ 0xea, 0xf8, 0xd2, 0x37, 0xf7, 0xd1, 0x1d, 0xb0, 0x15, 0xed, 0x95, 0xfc, 0xd8,
+ 0x06, 0xdd, 0xb9, 0x07, 0x48, 0xd1, 0x2c, 0xdd, 0x27, 0x32, 0xe2, 0x31, 0x0a,
+ 0xdb, 0x0c, 0xde, 0xd0, 0x22, 0x1d, 0x17, 0x37, 0xd0, 0x04, 0x00, 0xe6, 0x11,
+ 0xae, 0x47, 0x19, 0xc6, 0xea, 0xc1, 0x0e, 0xdb, 0x18, 0xd4, 0xe1, 0x01, 0xec,
+ 0x53, 0x17, 0xd8, 0xdd, 0xff, 0xff, 0x1a, 0xa3, 0xdc, 0x08, 0xf2, 0xf0, 0xed,
+ 0x22, 0xee, 0xf2, 0xb4, 0xd7, 0x20, 0x09, 0x0a, 0xd1, 0xc6, 0xe5, 0xb3, 0xfc,
+ 0x15, 0x2c, 0xd0, 0x23, 0xc6, 0x10, 0xfa, 0x0e, 0xd8, 0xd4, 0x21, 0xf7, 0x7f,
+ 0x05, 0x06, 0xc1, 0x09, 0xbf, 0x16, 0xeb, 0x07, 0x0d, 0x04, 0xed, 0xd9, 0x2f,
+ 0x31, 0xec, 0xf8, 0x31, 0x24, 0x13, 0xdc, 0xf4, 0x26, 0x15, 0x0d, 0xf2, 0x1d,
+ 0x4f, 0x25, 0x09, 0x05, 0x39, 0xf2, 0xfb, 0xfa, 0xc8, 0x01, 0x15, 0xe8, 0x12,
+ 0x2a, 0xf2, 0x64, 0xbc, 0x0a, 0x2d, 0xe8, 0x37, 0x29, 0x01, 0xf0, 0x1e, 0x4e,
+ 0xc8, 0xe6, 0xec, 0xe9, 0x0d, 0xd1, 0x0b, 0xfd, 0x0a, 0xe8, 0x06, 0x31, 0x12,
+ 0x1b, 0x2d, 0xd0, 0x06, 0xf7, 0xf8, 0x18, 0xfc, 0xd9, 0xf8, 0xf9, 0x26, 0x23,
+ 0x0b, 0xf1, 0xf1, 0x1c, 0xbc, 0xbe, 0x31, 0xfa, 0xd7, 0x15, 0x10, 0xf1, 0xeb,
+ 0x09, 0xef, 0x0d, 0x2c, 0x08, 0xf1, 0xd8, 0xfa, 0xe4, 0xb4, 0x05, 0xac, 0xc6,
+ 0x95, 0xf0, 0x3a, 0x56, 0x06, 0x58, 0x12, 0x81, 0x13, 0xac, 0xf3, 0xb0, 0x14,
+ 0x26, 0xdb, 0x1d, 0x38, 0xf7, 0x1c, 0x5a, 0x02, 0x0a, 0x19, 0x0f, 0xf6, 0x30,
+ 0x14, 0x69, 0x42, 0xe0, 0xec, 0xcf, 0xae, 0xdd, 0xec, 0xd7, 0x3c, 0xc5, 0xd2,
+ 0x19, 0xdc, 0xc3, 0x09, 0x1d, 0xf2, 0x48, 0xee, 0x7c, 0xe9, 0x13, 0xe7, 0x58,
+ 0x43, 0x33, 0x13, 0x0e, 0xbc, 0xf3, 0xd5, 0xa0, 0x41, 0x50, 0x1f, 0xfe, 0xfd,
+ 0x28, 0xd7, 0xde, 0xc0, 0xe1, 0x12, 0x18, 0x40, 0xca, 0xf1, 0x10, 0xed, 0xcc,
+ 0xf9, 0xe2, 0x34, 0xa3, 0x0a, 0xe6, 0xfd, 0x14, 0xc6, 0x0a, 0xcd, 0x10, 0x25,
+ 0xf1, 0x0c, 0x03, 0xda, 0xfa, 0xa9, 0xd4, 0xfc, 0x2f, 0x34, 0x15, 0xfc, 0x13,
+ 0x0b, 0x05, 0xcf, 0xe2, 0xb2, 0xb0, 0xf6, 0x22, 0x00, 0xc5, 0x26, 0xeb, 0x09,
+ 0x02, 0x3c, 0x35, 0x0b, 0x6a, 0xe3, 0xe9, 0xf9, 0xca, 0x51, 0xe8, 0xf7, 0xe4,
+ 0x1b, 0x3c, 0x16, 0xcc, 0x02, 0xe1, 0x1c, 0x2c, 0x12, 0x2d, 0x1e, 0x58, 0x24,
+ 0xe6, 0xe7, 0xd6, 0xf5, 0x0d, 0xe7, 0xf9, 0xe7, 0xfd, 0xd5, 0xe1, 0x15, 0x0a,
+ 0x3e, 0x19, 0xc4, 0x11, 0x27, 0x9e, 0x12, 0x1c, 0xd6, 0xb6, 0x1a, 0xf2, 0xf1,
+ 0x45, 0x3f, 0x29, 0xbf, 0xc7, 0x21, 0xd3, 0xa1, 0x33, 0xf6, 0x06, 0x3c, 0x04,
+ 0x95, 0x10, 0x3d, 0x55, 0xee, 0x24, 0xf7, 0xe8, 0xf3, 0x17, 0xfa, 0x1b, 0xbc,
+ 0xf2, 0x0d, 0x30, 0x36, 0xff, 0x1e, 0xeb, 0xf8, 0x21, 0xff, 0x08, 0xc5, 0x26,
+ 0x00, 0xb0, 0xf3, 0xfe, 0xf6, 0xeb, 0xc5, 0xac, 0xcf, 0xf7, 0x3a, 0x42, 0x1c,
+ 0x27, 0x18, 0xe9, 0xf7, 0xd6, 0xf9, 0x2c, 0xec, 0x29, 0x25, 0xe3, 0xde, 0x3b,
+ 0xe1, 0xf3, 0x34, 0x05, 0x1e, 0x7f, 0x05, 0xf2, 0x1c, 0x12, 0xf1, 0x13, 0x16,
+ 0xbb, 0x32, 0x68, 0xb3, 0x2c, 0xda, 0xf6, 0x4a, 0xdf, 0x06, 0x3c, 0xca, 0xab,
+ 0x7c, 0xd8, 0xe0, 0x40, 0x18, 0xb8, 0xfc, 0xf2, 0x54, 0x38, 0xfe, 0x2f, 0x0a,
+ 0xbe, 0x41, 0xbf, 0xeb, 0x10, 0xab, 0x32, 0xbe, 0xe4, 0x00, 0x2c, 0x04, 0xf6,
+ 0x33, 0xcf, 0x07, 0x38, 0x18, 0x06, 0x88, 0xe1, 0x27, 0x70, 0x2f, 0x4d, 0x2a,
+ 0x15, 0xf1, 0x0a, 0xc6, 0xca, 0x35, 0xf4, 0xec, 0x45, 0xd2, 0x48, 0xb7, 0x25,
+ 0x48, 0xd4, 0x85, 0xd7, 0xe8, 0x22, 0x59, 0x13, 0xd7, 0x00, 0xc7, 0xf9, 0x12,
+ 0x3c, 0x51, 0x1c, 0x5b, 0xca, 0x06, 0x37, 0xed, 0xaf, 0xd7, 0x44, 0xd7, 0xb6,
+ 0x1e, 0xea, 0x01, 0x62, 0xe8, 0x2e, 0xd6, 0x16, 0x4d, 0x9c, 0x19, 0x48, 0xf3,
+ 0x18, 0xfa, 0x1d, 0x28, 0xe4, 0xb3, 0xcb, 0xed, 0x7f, 0x49, 0xfe, 0xce, 0xd8,
+ 0x12, 0x31, 0x25, 0x13, 0x04, 0x09, 0xac, 0x1c, 0x31, 0x0d, 0x4b, 0xfc, 0x12,
+ 0xc4, 0x0f, 0x60, 0xc1, 0x03, 0x04, 0x56, 0xc8, 0x40, 0x18, 0xfc, 0x14, 0xc2,
+ 0xeb, 0xc3, 0x98, 0xfb, 0x17, 0xf8, 0x22, 0xf8, 0xf8, 0x02, 0x27, 0x04, 0xc0,
+ 0x0b, 0x33, 0x4e, 0xf5, 0xef, 0x47, 0x02, 0xf7, 0xf2, 0xe1, 0x18, 0x36, 0x16,
+ 0x1e, 0x54, 0x3b, 0xfe, 0xd7, 0xec, 0xc1, 0x0d, 0x25, 0xd2, 0xad, 0xec, 0x2e,
+ 0x08, 0xfe, 0xec, 0x00, 0xd5, 0x36, 0x07, 0x39, 0x07, 0xe3, 0x04, 0xce, 0xeb,
+ 0x28, 0x23, 0x37, 0xee, 0x10, 0xf6, 0xf2, 0x12, 0xe8, 0x15, 0x00, 0x36, 0xd7,
+ 0x14, 0x10, 0x02, 0xff, 0xbc, 0xea, 0xcd, 0x1d, 0xf1, 0xf5, 0xe5, 0x37, 0xf9,
+ 0xf0, 0x0f, 0x32, 0x29, 0x11, 0x06, 0x06, 0x0a, 0xca, 0xea, 0x15, 0x4f, 0x16,
+ 0x4b, 0xff, 0xe0, 0xef, 0xe1, 0xfa, 0x32, 0xd9, 0xee, 0x7f, 0x06, 0x17, 0xe9,
+ 0xf0, 0xdc, 0x0b, 0xde, 0x5d, 0x0e, 0x35, 0x2c, 0x23, 0x29, 0x18, 0xe6, 0x23,
+ 0x1c, 0xe0, 0x2c, 0xf4, 0x06, 0xef, 0xec, 0x11, 0xdd, 0x07, 0xfc, 0x38, 0x35,
+ 0x40, 0x3d, 0xf1, 0xe4, 0xf1, 0x05, 0xfd, 0x18, 0x21, 0xd0, 0x05, 0x2c, 0xfc,
+ 0x26, 0xd6, 0xdb, 0xd5, 0x17, 0xeb, 0x43, 0x08, 0x2c, 0x21, 0xfb, 0xe4, 0xeb,
+ 0xea, 0xb9, 0xf4, 0xba, 0xe9, 0x4a, 0xf3, 0x30, 0x0c, 0xe8, 0x10, 0x5f, 0x1a,
+ 0x04, 0xec, 0x2b, 0xf5, 0x07, 0xcf, 0xfa, 0xd7, 0x81, 0x09, 0xf3, 0x06, 0xe7,
+ 0xfa, 0x13, 0xf3, 0x2a, 0xff, 0x33, 0xf3, 0x02, 0x1c, 0xe7, 0x05, 0x2d, 0x34,
+ 0xce, 0x10, 0x2c, 0xfc, 0x2b, 0x17, 0xfd, 0x3a, 0xdb, 0x22, 0xf1, 0x0a, 0xea,
+ 0xf2, 0x32, 0xf1, 0xec, 0xef, 0xf5, 0xf6, 0x1a, 0x14, 0x02, 0x07, 0x0b, 0x12,
+ 0xc1, 0x34, 0x38, 0xe0, 0x19, 0x4d, 0xf5, 0xfa, 0xec, 0xea, 0xd5, 0xf3, 0x54,
+ 0xe6, 0x1b, 0x08, 0x17, 0x14, 0xd6, 0x06, 0x00, 0xea, 0x1b, 0x2d, 0x27, 0xf4,
+ 0xf5, 0x07, 0xdd, 0x07, 0x1d, 0xe9, 0xde, 0x04, 0x61, 0xf2, 0xf3, 0xf4, 0xbe,
+ 0xba, 0xe6, 0x12, 0x14, 0x1e, 0x0c, 0xdf, 0xee, 0x0f, 0x0b, 0xd4, 0x14, 0x29,
+ 0xf1, 0xd8, 0x11, 0x39, 0xfd, 0x4c, 0x2b, 0xc6, 0x2e, 0xe1, 0xe9, 0x14, 0x27,
+ 0xc2, 0x04, 0xf3, 0xe0, 0xc5, 0x16, 0xec, 0xea, 0xfc, 0x1a, 0x18, 0xc7, 0xff,
+ 0xfc, 0xfa, 0xef, 0xd2, 0x01, 0x21, 0x33, 0x00, 0x7f, 0xe9, 0x2b, 0x08, 0x49,
+ 0xe0, 0x27, 0x2a, 0xf4, 0xdd, 0xfa, 0x21, 0x1c, 0x62, 0xd9, 0xf5, 0xcc, 0xf1,
+ 0x29, 0xe3, 0x8e, 0xe9, 0x19, 0x31, 0xb2, 0x67, 0xff, 0x37, 0x1a, 0xf6, 0x0c,
+ 0xe6, 0x0c, 0xcb, 0x08, 0x04, 0x10, 0xfb, 0xfc, 0x09, 0xde, 0x01, 0x03, 0xee,
+ 0xfd, 0xd1, 0x0d, 0x4a, 0xcd, 0xd0, 0x1d, 0x2d, 0xd4, 0x09, 0x2a, 0x30, 0x02,
+ 0x1a, 0x10, 0x0d, 0xf9, 0x4b, 0xdd, 0xf3, 0x24, 0x14, 0xe9, 0x01, 0xef, 0x17,
+ 0x4c, 0x1a, 0x26, 0xf3, 0x06, 0xee, 0xe3, 0x26, 0xd5, 0x36, 0x4a, 0x00, 0x08,
+ 0x02, 0xfb, 0xad, 0x24, 0x04, 0xf4, 0xdb, 0x0d, 0x2b, 0xe1, 0xf8, 0xe1, 0xc7,
+ 0x1a, 0xd0, 0x0d, 0xcb, 0x1b, 0xeb, 0x07, 0xdb, 0xe9, 0xd3, 0xdc, 0xb7, 0x41,
+ 0xf9, 0x0b, 0x1e, 0x17, 0xfc, 0x17, 0x09, 0xc7, 0x1b, 0x1d, 0xd9, 0xda, 0xf9,
+ 0x15, 0x04, 0xe7, 0xc8, 0x5a, 0xe3, 0xec, 0xfb, 0x4c, 0xe8, 0xf5, 0x49, 0x04,
+ 0xd5, 0x2c, 0xb8, 0x81, 0xde, 0xef, 0x0c, 0x30, 0xe8, 0xe7, 0x02, 0x1c, 0xfb,
+ 0x03, 0x20, 0x19, 0x07, 0xef, 0x07, 0xd7, 0x0a, 0x3c, 0xeb, 0x1d, 0x1b, 0x0c,
+ 0xf5, 0x05, 0xf0, 0x2d, 0x21, 0xce, 0xdf, 0xf9, 0xfb, 0x5a, 0x14, 0xf0, 0x2a,
+ 0x01, 0x4d, 0xf0, 0xeb, 0xf3, 0x14, 0xca, 0x0d, 0x34, 0xfb, 0x22, 0xfa, 0xe4,
+ 0x08, 0x16, 0xd3, 0xf1, 0x0b, 0x32, 0x18, 0x15, 0xf8, 0xe2, 0x33, 0xe1, 0x0c,
+ 0x1a, 0xfe, 0x03, 0xfb, 0xe6, 0xd4, 0x16, 0xe7, 0xca, 0x19, 0x1b, 0x16, 0x1a,
+ 0xfc, 0x1e, 0xfa, 0xcc, 0xc0, 0x44, 0xd8, 0x12, 0x30, 0xfe, 0xfd, 0xd6, 0xdb,
+ 0xfc, 0xf5, 0xf6, 0x2f, 0xfe, 0xcc, 0xd8, 0x12, 0x16, 0xcc, 0x81, 0x1c, 0x9a,
+ 0x29, 0x20, 0x13, 0x0e, 0x2e, 0x00, 0xfa, 0xfb, 0xca, 0x1d, 0x12, 0xfa, 0x15,
+ 0xdc, 0xe7, 0xd4, 0x03, 0xe5, 0xf7, 0x45, 0x00, 0xb9, 0x22, 0xf3, 0xde, 0x09,
+ 0x39, 0x0a, 0xdb, 0x00, 0xf8, 0xda, 0xe9, 0x0c, 0x15, 0x11, 0x12, 0xc7, 0x1a,
+ 0xff, 0x12, 0xdb, 0xfb, 0xef, 0xd7, 0xad, 0xfc, 0xff, 0xf6, 0xdc, 0x01, 0xf3,
+ 0x0b, 0x24, 0xf1, 0xed, 0xd1, 0xd6, 0x43, 0xd3, 0xff, 0xdd, 0x23, 0xf2, 0x28,
+ 0xc9, 0x03, 0x13, 0x0a, 0xee, 0xdf, 0x02, 0xcf, 0x02, 0xda, 0x0d, 0x29, 0xfc,
+ 0x21, 0xe5, 0xe8, 0x41, 0xef, 0xc7, 0xd3, 0xf4, 0xcd, 0x0a, 0x03, 0x06, 0xf9,
+ 0x26, 0xe3, 0x28, 0x20, 0x3f, 0xe2, 0xd6, 0x25, 0x44, 0x06, 0x45, 0x67, 0x21,
+ 0xdd, 0x21, 0x16, 0x0c, 0x2c, 0xf0, 0x1a, 0xcc, 0xc1, 0x10, 0x17, 0xf6, 0x05,
+ 0x2f, 0xe2, 0xe9, 0xec, 0xf3, 0xb5, 0xf2, 0x20, 0x0d, 0x11, 0xca, 0xa0, 0xff,
+ 0xe4, 0xe1, 0x97, 0x26, 0xc8, 0xc4, 0xe0, 0x43, 0x21, 0xd5, 0xc9, 0xca, 0x00,
+ 0x33, 0x32, 0x26, 0x0f, 0xef, 0xae, 0xda, 0x3c, 0xe0, 0x3f, 0x1c, 0xc3, 0x1a,
+ 0xf8, 0xd5, 0x11, 0x21, 0x58, 0xc8, 0x08, 0x2e, 0x23, 0x21, 0xd7, 0x08, 0xf2,
+ 0x31, 0xe6, 0xe7, 0xef, 0xe7, 0xca, 0xee, 0xdd, 0xe1, 0x47, 0x0b, 0x1a, 0x04,
+ 0xfe, 0xf2, 0xf2, 0xc9, 0xf5, 0x1d, 0xe7, 0x03, 0x11, 0x02, 0x32, 0x14, 0xf9,
+ 0xe2, 0xc5, 0xea, 0xdc, 0x0e, 0x45, 0xf2, 0x2d, 0xd6, 0xf2, 0x04, 0x2c, 0xe3,
+ 0x7f, 0x2f, 0x29, 0x59, 0xf8, 0x24, 0x52, 0x46, 0xef, 0x59, 0x73, 0x8d, 0x15,
+ 0xfc, 0xcc, 0x7e, 0xec, 0x0e, 0xc6, 0xe2, 0x4f, 0x15, 0x2c, 0xeb, 0x3c, 0xfa,
+ 0x04, 0x03, 0x5c, 0xda, 0x15, 0x35, 0xe4, 0xdf, 0xbc, 0x07, 0x1d, 0xfd, 0xfa,
+ 0x51, 0x3a, 0xf6, 0x54, 0x09, 0x91, 0x04, 0xe4, 0xec, 0x27, 0x15, 0xe1, 0xae,
+ 0x3c, 0x08, 0xf0, 0xea, 0x01, 0xe3, 0xf5, 0x7f, 0x35, 0x3f, 0x04, 0xc4, 0xdd,
+ 0x75, 0x28, 0x10, 0x50, 0xf4, 0xdc, 0xaa, 0x42, 0xd2, 0x9b, 0x09, 0xf4, 0x47,
+ 0x57, 0xf1, 0x3f, 0xe6, 0xdb, 0xec, 0x30, 0x72, 0x90, 0x96, 0x4f, 0xe6, 0xd2,
+ 0xf4, 0x01, 0x22, 0xea, 0x21, 0x0c, 0xa4, 0xfe, 0xf6, 0x3b, 0x6d, 0xc0, 0xf0,
+ 0xf5, 0xf0, 0xf5, 0x00, 0x5e, 0xce, 0x38, 0xb3, 0x27, 0x96, 0x97, 0xf9, 0xec,
+ 0xb8, 0xc5, 0x10, 0xf8, 0x12, 0xc5, 0xf3, 0x97, 0x20, 0xe7, 0xf3, 0xe5, 0xb4,
+ 0x23, 0xe4, 0x0d, 0x3f, 0xa8, 0x17, 0xcf, 0x0d, 0x4c, 0x18, 0xdd, 0x10, 0xf8,
+ 0x81, 0x28, 0x00, 0xeb, 0xd8, 0xfa, 0x36, 0x49, 0xfa, 0x2b, 0xdc, 0xea, 0x24,
+ 0xdb, 0xb8, 0x09, 0x20, 0x67, 0x12, 0x0f, 0x12, 0x07, 0x01, 0x9b, 0xba, 0x0d,
+ 0xc0, 0x6f, 0x07, 0xec, 0xc0, 0x20, 0x27, 0x11, 0xe1, 0x22, 0x1b, 0x0f, 0x2f,
+ 0xe9, 0x34, 0xc1, 0x11, 0xbf, 0xd6, 0xce, 0xad, 0x02, 0x1a, 0x2d, 0x1f, 0xe1,
+ 0x06, 0x2e, 0x06, 0xe6, 0x02, 0x34, 0xd2, 0xab, 0x1b, 0x71, 0x08, 0xec, 0xd7,
+ 0xd4, 0x2b, 0xe2, 0x26, 0xf7, 0x01, 0xfc, 0x30, 0x00, 0x57, 0xea, 0xc0, 0x0b,
+ 0x0a, 0xc0, 0x1b, 0xdd, 0x51, 0x1d, 0xda, 0x6d, 0xc6, 0x29, 0xfe, 0x04, 0x38,
+ 0xf4, 0x0f, 0x1b, 0xfc, 0xbb, 0x51, 0xd6, 0x2c, 0xf4, 0x2e, 0xa5, 0xc7, 0xe9,
+ 0x23, 0xec, 0x51, 0x12, 0xfb, 0xcc, 0x0c, 0xed, 0x75, 0xac, 0xe9, 0x31, 0x37,
+ 0x21, 0x5b, 0xcc, 0xcf, 0xde, 0xd0, 0x6c, 0x63, 0x0d, 0xc9, 0x2b, 0x4c, 0xe8,
+ 0xb8, 0x27, 0xe2, 0xa3, 0x47, 0xef, 0x1b, 0x26, 0xec, 0xc6, 0xfb, 0x64, 0x14,
+ 0xcd, 0xf3, 0x08, 0x30, 0x19, 0xbf, 0x28, 0xe4, 0x06, 0xd7, 0x84, 0xd4, 0x45,
+ 0x8b, 0x06, 0xe8, 0xab, 0xdc, 0x39, 0x17, 0x2c, 0xd2, 0xa8, 0x4e, 0x10, 0xd9,
+ 0xb0, 0xe4, 0x3d, 0xb7, 0x01, 0xce, 0xe3, 0xd5, 0x03, 0x10, 0xed, 0xe5, 0x32,
+ 0x4c, 0xbb, 0x1d, 0x2f, 0xbf, 0xba, 0x22, 0x08, 0x2e, 0x6f, 0x28, 0xa5, 0xbc,
+ 0xfa, 0xe8, 0xad, 0x8f, 0x92, 0xe3, 0xe4, 0x29, 0x14, 0xe4, 0xdd, 0xd2, 0xf6,
+ 0xd1, 0xd2, 0x29, 0x06, 0xc9, 0xe7, 0xe8, 0x0c, 0x6d, 0x5d, 0x27, 0x20, 0xc4,
+ 0xaf, 0x0b, 0xeb, 0x26, 0x91, 0xe2, 0xf2, 0x14, 0x0f, 0x81, 0x21, 0x04, 0xd0,
+ 0x17, 0x5e, 0x07, 0x1b, 0x62, 0x26, 0x15, 0x23, 0xfb, 0xe3, 0x2f, 0x00, 0xe3,
+ 0xe4, 0xcc, 0xf7, 0x9f, 0x18, 0x0b, 0x08, 0x2b, 0xf3, 0xd6, 0xfc, 0xf0, 0xf5,
+ 0xc2, 0xba, 0xd6, 0xa3, 0xb3, 0x0f, 0x10, 0xfb, 0x11, 0x26, 0xde, 0x18, 0x12,
+ 0xfa, 0x13, 0xfe, 0xb6, 0xf4, 0xf5, 0x30, 0xd1, 0xcf, 0xfc, 0xfe, 0x19, 0xd4,
+ 0xbf, 0x24, 0xc1, 0xc4, 0xdc, 0x2f, 0xec, 0x47, 0x49, 0xa8, 0xe4, 0x19, 0x11,
+ 0xfb, 0x9b, 0x1f, 0xe1, 0xd2, 0x38, 0xe3, 0xf1, 0x32, 0xff, 0xd8, 0x0a, 0x14,
+ 0xd6, 0x1c, 0xb9, 0x54, 0xdd, 0x37, 0xce, 0xd1, 0xfd, 0xde, 0x09, 0xbb, 0xe8,
+ 0x12, 0xfc, 0xf2, 0x10, 0x1e, 0xfb, 0xe5, 0xe5, 0x1d, 0xd0, 0x0a, 0xdb, 0x81,
+ 0xe3, 0xe8, 0xe8, 0x3f, 0xa6, 0xd9, 0xf3, 0xf3, 0x20, 0x2b, 0xf8, 0x3b, 0x19,
+ 0x40, 0xf1, 0xc0, 0x1d, 0x7d, 0x0e, 0x55, 0x46, 0xc1, 0xf5, 0xe3, 0x14, 0x62,
+ 0xf0, 0x13, 0xe5, 0x05, 0xe5, 0x0b, 0xca, 0x10, 0xf9, 0xe0, 0xde, 0x45, 0xd2,
+ 0x28, 0x2c, 0x3f, 0xef, 0x47, 0xd3, 0x1d, 0xd6, 0xe1, 0xb4, 0x10, 0xff, 0x29,
+ 0x36, 0x5d, 0xe8, 0x1b, 0x02, 0xe4, 0x0f, 0x04, 0x0e, 0xf5, 0xdd, 0x09, 0x28,
+ 0x0c, 0x1a, 0x26, 0x0e, 0xe6, 0xab, 0x81, 0xda, 0xdc, 0x38, 0xcc, 0xef, 0xc6,
+ 0xb3, 0x12, 0x01, 0xc4, 0xd1, 0xe8, 0xf2, 0xfa, 0x38, 0x0f, 0x53, 0x42, 0xfd,
+ 0xfc, 0xc4, 0xc0, 0x19, 0xd9, 0x30, 0x12, 0xf8, 0x23, 0xad, 0xfa, 0x19, 0xf0,
+ 0x27, 0x14, 0xf3, 0xb3, 0xdd, 0xf9, 0xbf, 0x42, 0xdc, 0x1f, 0x2c, 0x35, 0xe6,
+ 0xd3, 0xc3, 0xee, 0x0b, 0x03, 0xe1, 0x1b, 0xa0, 0x07, 0x09, 0x04, 0x8d, 0xfe,
+ 0x0c, 0xda, 0x34, 0xc0, 0xfa, 0x25, 0x0a, 0x2f, 0x1e, 0xe4, 0xf3, 0x13, 0xe6,
+ 0xf1, 0xbd, 0xd0, 0xf8, 0x43, 0xe2, 0x04, 0xce, 0x33, 0x00, 0x1e, 0xbb, 0xb3,
+ 0xe5, 0xf2, 0xe7, 0xed, 0xea, 0x11, 0x19, 0xfe, 0xfc, 0x19, 0x27, 0xd8, 0xc0,
+ 0x09, 0x75, 0xfe, 0xf2, 0xf9, 0xcf, 0xf8, 0xf7, 0x03, 0xeb, 0x10, 0x19, 0x3f,
+ 0x3d, 0xe0, 0x3d, 0x22, 0x23, 0xef, 0x02, 0x42, 0xe5, 0xd6, 0x32, 0xfa, 0x08,
+ 0x38, 0xe3, 0xca, 0x5f, 0x16, 0xc3, 0xc4, 0x02, 0x4c, 0xd5, 0x08, 0xa4, 0xfa,
+ 0x29, 0xf9, 0xe6, 0x37, 0xfe, 0xfd, 0xdc, 0xbd, 0x48, 0x12, 0x3c, 0xf4, 0xed,
+ 0x0d, 0x04, 0x04, 0xe5, 0x12, 0x04, 0xe2, 0xc7, 0x17, 0xdc, 0x40, 0x2c, 0xe5,
+ 0xe5, 0x31, 0x0b, 0xd3, 0xcb, 0x25, 0xf0, 0xfd, 0xff, 0x12, 0x25, 0xda, 0x18,
+ 0x1c, 0x0c, 0xf7, 0xd3, 0x11, 0x4c, 0xd9, 0x05, 0xd2, 0x08, 0xee, 0x3f, 0x19,
+ 0xd3, 0xf5, 0xd9, 0xe4, 0x12, 0x0f, 0x25, 0x30, 0xeb, 0x11, 0xe9, 0x22, 0x12,
+ 0x81, 0x04, 0xd9, 0xe1, 0x1a, 0x22, 0x07, 0x35, 0x01, 0xb6, 0xdf, 0xef, 0x06,
+ 0x15, 0xdb, 0x3e, 0x0b, 0xcb, 0x0b, 0x01, 0x3e, 0x0f, 0xbc, 0xe7, 0xf3, 0x2f,
+ 0x08, 0x27, 0x3a, 0xb6, 0xd3, 0x4d, 0xf8, 0xe7, 0x2e, 0x77, 0x8f, 0xed, 0x21,
+ 0x28, 0xe9, 0xfb, 0xee, 0x0c, 0xd1, 0xfc, 0xec, 0xfa, 0xfa, 0xf5, 0xf1, 0x1f,
+ 0x1d, 0xce, 0x04, 0x22, 0xb6, 0x1d, 0x1a, 0xd5, 0x72, 0x9f, 0x34, 0x01, 0xc9,
+ 0x03, 0x08, 0xe4, 0x39, 0xff, 0xcf, 0x13, 0xf6, 0xf0, 0x35, 0xfb, 0x79, 0xa8,
+ 0xe8, 0xf3, 0xee, 0x0b, 0xe9, 0x15, 0x3c, 0xf8, 0xc0, 0x44, 0xb8, 0xe2, 0xec,
+ 0x08, 0x24, 0xbf, 0x14, 0x2b, 0xe5, 0xe6, 0x22, 0xfc, 0x12, 0x0d, 0x1d, 0xc8,
+ 0xf6, 0x0c, 0xdb, 0x46, 0xfe, 0xc5, 0x8b, 0x83, 0x0e, 0x25, 0x32, 0x46, 0xbe,
+ 0x8f, 0xd8, 0xc4, 0xd9, 0xf6, 0x3d, 0x41, 0xed, 0x20, 0xf2, 0xd5, 0x42, 0xe0,
+ 0x2e, 0x20, 0xfe, 0x0e, 0x2e, 0xe3, 0xed, 0x0b, 0x7f, 0x24, 0x5b, 0xdf, 0xed,
+ 0xfa, 0xd1, 0xf2, 0x69, 0x29, 0x72, 0x13, 0xd0, 0x60, 0xee, 0xf9, 0xc3, 0x2d,
+ 0xff, 0xf8, 0xfd, 0x1b, 0xf8, 0x07, 0x3d, 0x1b, 0xbe, 0xe6, 0x02, 0xd6, 0x2f,
+ 0x29, 0x15, 0xe3, 0x26, 0xc7, 0xde, 0x30, 0x2f, 0xf6, 0xe9, 0x2a, 0x8f, 0x1c,
+ 0x0b, 0xd9, 0x1c, 0x01, 0xc8, 0x06, 0xf3, 0x31, 0xc0, 0x00, 0xf4, 0x33, 0x11,
+ 0xe9, 0x23, 0xdd, 0xf2, 0xfc, 0x11, 0xfb, 0x4f, 0x1f, 0xb7, 0x19, 0xc0, 0x19,
+ 0xf4, 0x22, 0x26, 0x0a, 0x1e, 0xd9, 0xfb, 0x18, 0x12, 0x12, 0xf5, 0x10, 0x08,
+ 0xf9, 0x12, 0x4e, 0x37, 0x38, 0xeb, 0xfd, 0xf0, 0x24, 0xdb, 0xc6, 0xfc, 0xeb,
+ 0x1f, 0xfd, 0xc6, 0x10, 0xf1, 0x36, 0xe9, 0x16, 0xfa, 0x4a, 0xf1, 0x0a, 0xf4,
+ 0xee, 0xe2, 0x81, 0x33, 0x47, 0xef, 0x0c, 0x30, 0xcb, 0xe4, 0x15, 0x2d, 0x3d,
+ 0xf6, 0x1e, 0x32, 0xfd, 0x23, 0x04, 0xbe, 0x22, 0xfe, 0x0e, 0x30, 0xff, 0x57,
+ 0x19, 0xf3, 0xf5, 0x12, 0xe7, 0x21, 0x0c, 0xd4, 0xf9, 0x32, 0x1f, 0x46, 0xe1,
+ 0x36, 0x06, 0x4f, 0xdc, 0x02, 0x4a, 0xe5, 0x29, 0xd1, 0x41, 0xfc, 0x2e, 0x58,
+ 0xdb, 0xee, 0xfd, 0x11, 0x34, 0xf3, 0x0e, 0xeb, 0x51, 0xd6, 0xb8, 0x12, 0xe5,
+ 0x1c, 0x17, 0x3e, 0x38, 0x0a, 0xd6, 0xf1, 0x28, 0x09, 0xf1, 0x1c, 0xee, 0xaf,
+ 0xb0, 0x10, 0xc1, 0xe9, 0x2c, 0xc8, 0xaa, 0xb0, 0x52, 0xf0, 0x4c, 0x37, 0xd1,
+ 0x21, 0xff, 0x24, 0xbf, 0x38, 0x0a, 0xf4, 0xa2, 0xdc, 0x28, 0xb7, 0xf5, 0xf6,
+ 0xf0, 0xbd, 0x09, 0xf5, 0xe6, 0x02, 0x08, 0xfe, 0xa2, 0xdb, 0x28, 0x26, 0x26,
+ 0xdd, 0x15, 0x38, 0xfd, 0xe6, 0xdd, 0x00, 0xdb, 0xea, 0xc7, 0x08, 0xa0, 0x08,
+ 0x30, 0x07, 0xf6, 0xb4, 0xf2, 0x1f, 0xf1, 0xcb, 0x91, 0x4b, 0xe4, 0x37, 0xf1,
+ 0x7f, 0x2f, 0x53, 0x03, 0xeb, 0x65, 0x05, 0xbe, 0xb3, 0xdb, 0xd3, 0x1c, 0xcb,
+ 0x4a, 0xf4, 0x23, 0xd8, 0x1a, 0x33, 0xc8, 0xd5, 0xfe, 0x21, 0x17, 0x35, 0x3f,
+ 0xfb, 0xcb, 0x06, 0xc8, 0x07, 0xf6, 0xde, 0xd3, 0xdc, 0x07, 0x02, 0x23, 0x4f,
+ 0x30, 0x08, 0xe5, 0xfb, 0x1c, 0xf8, 0xc6, 0xce, 0x07, 0x1d, 0x1f, 0x41, 0xea,
+ 0xf0, 0xce, 0x44, 0xee, 0x0c, 0xd6, 0xc6, 0x08, 0xe4, 0xd8, 0x2f, 0xf7, 0xf7,
+ 0xbc, 0xad, 0xe0, 0x32, 0xbf, 0xed, 0x86, 0x1b, 0xe4, 0xfc, 0xfc, 0x42, 0x16,
+ 0x2a, 0xc6, 0xca, 0xe8, 0xf8, 0x42, 0xf7, 0x0b, 0xf5, 0xfd, 0xf8, 0xe2, 0xe3,
+ 0x20, 0xfb, 0xee, 0x14, 0x25, 0x12, 0x3a, 0xe6, 0xd9, 0x16, 0xef, 0xbb, 0xed,
+ 0x3d, 0xe9, 0xe4, 0x1e, 0xe5, 0x17, 0x45, 0xa1, 0x32, 0xe2, 0xc0, 0x90, 0x17,
+ 0x29, 0x2a, 0xe5, 0x1f, 0x0a, 0x36, 0x1c, 0xd0, 0xed, 0x2f, 0x1b, 0xe9, 0x18,
+ 0x82, 0x0b, 0x81, 0x00, 0x15, 0x32, 0xd6, 0xe5, 0x2b, 0x24, 0xf2, 0xf1, 0xe6,
+ 0xc5, 0xf9, 0x0a, 0xec, 0x25, 0xd6, 0xe8, 0xdb, 0x21, 0xff, 0xc0, 0xee, 0xe7,
+ 0xee, 0x29, 0xe2, 0x40, 0x1b, 0x1f, 0xf9, 0x48, 0x10, 0xe1, 0x0b, 0xf9, 0xdd,
+ 0x20, 0xf5, 0x28, 0xdf, 0x02, 0xdf, 0xdb, 0xc5, 0x02, 0xfd, 0x45, 0x28, 0x38,
+ 0x1f, 0xf0, 0x40, 0xc7, 0xf0, 0xf5, 0x16, 0x18, 0xf7, 0xba, 0x36, 0xe7, 0xcf,
+ 0xd0, 0xf3, 0xeb, 0xc9, 0x14, 0x00, 0xee, 0xfc, 0x1c, 0xee, 0xe4, 0x0e, 0xdc,
+ 0x1d, 0xdb, 0x35, 0xe2, 0x05, 0x19, 0xc0, 0x4d, 0xe8, 0x16, 0xd9, 0x0c, 0xe5,
+ 0xe5, 0x1e, 0x03, 0xce, 0x19, 0x14, 0x81, 0x1f, 0xfb, 0x47, 0x0b, 0x03, 0x15,
+ 0xe8, 0x01, 0xf8, 0x13, 0xfc, 0x08, 0x02, 0x02, 0xf5, 0x0d, 0xf4, 0x28, 0x04,
+ 0xfd, 0xfd, 0xc2, 0x09, 0x15, 0xf9, 0xaa, 0x06, 0x0a, 0x0e, 0x00, 0x10, 0x04,
+ 0xb7, 0xb2, 0xc3, 0xee, 0xc9, 0x30, 0x48, 0x10, 0x5a, 0xd2, 0xe2, 0x08, 0xee,
+ 0xef, 0xdb, 0x00, 0x06, 0x53, 0xfe, 0x28, 0xeb, 0xf4, 0xb6, 0xfe, 0x0d, 0x25,
+ 0xe1, 0x17, 0x06, 0x00, 0xfc, 0x04, 0xdc, 0x3a, 0x33, 0x11, 0x41, 0x1b, 0xee,
+ 0x1b, 0x06, 0xd6, 0xdd, 0x2a, 0x03, 0x3e, 0xe4, 0xe7, 0x46, 0xf5, 0xec, 0x2d,
+ 0x1b, 0xe0, 0xe9, 0x02, 0xed, 0xfc, 0xd7, 0xfe, 0xe3, 0xf5, 0xbd, 0x27, 0xc5,
+ 0x2c, 0x07, 0x02, 0x38, 0x27, 0xd7, 0x37, 0xe3, 0x32, 0x81, 0xff, 0xf2, 0xd8,
+ 0x13, 0x52, 0xc4, 0x4e, 0x19, 0xe6, 0x30, 0xc2, 0xe5, 0xc6, 0x02, 0x9c, 0xf7,
+ 0xd9, 0xee, 0x02, 0x14, 0x98, 0xe2, 0x18, 0xee, 0x1a, 0xf8, 0x30, 0xdc, 0x0f,
+ 0x5e, 0x15, 0xe9, 0x09, 0xcf, 0xd2, 0xee, 0xe7, 0xdc, 0x2b, 0x1f, 0x62, 0x3b,
+ 0x00, 0x32, 0xd7, 0x1f, 0xcb, 0xe2, 0x13, 0x9b, 0x18, 0xd4, 0xde, 0x1a, 0xd7,
+ 0x69, 0x22, 0xeb, 0xc9, 0xaf, 0x1e, 0x1a, 0xff, 0xdb, 0xcd, 0xc7, 0xfe, 0xe7,
+ 0xce, 0xea, 0xb7, 0xf1, 0x16, 0xe1, 0xd8, 0xf0, 0xdf, 0x38, 0xe4, 0x4c, 0xdf,
+ 0x18, 0xd9, 0x3e, 0xc3, 0xca, 0x30, 0x27, 0x03, 0xf6, 0xec, 0x04, 0xc3, 0x16,
+ 0xb9, 0x2f, 0x16, 0x0d, 0x11, 0x31, 0xec, 0xc9, 0xf0, 0x1d, 0x02, 0xdf, 0xb5,
+ 0x4b, 0x3a, 0xaf, 0x22, 0xa0, 0xe2, 0x10, 0xf2, 0x52, 0x54, 0xe8, 0xb7, 0xe7,
+ 0x28, 0x3f, 0xcb, 0x06, 0xaa, 0x1e, 0xda, 0xd0, 0xcd, 0x1d, 0xf0, 0xc8, 0x05,
+ 0x03, 0x26, 0x0a, 0x11, 0xf5, 0xed, 0xf8, 0x5b, 0xed, 0x9e, 0xdd, 0xbd, 0xf7,
+ 0x7e, 0xba, 0xa1, 0x1b, 0x81, 0xd0, 0xe7, 0xa1, 0xfb, 0xed, 0xf6, 0xf3, 0x3c,
+ 0xc6, 0xc1, 0xfd, 0x2b, 0x28, 0x0d, 0xd9, 0xce, 0xf9, 0xf4, 0x44, 0xf0, 0x05,
+ 0x28, 0x06, 0x99, 0xba, 0x9c, 0xf4, 0x99, 0x06, 0xf0, 0x1f, 0xea, 0xe0, 0xd7,
+ 0xd4, 0xe6, 0x05, 0x3f, 0xab, 0x1d, 0x0c, 0xaa, 0xa2, 0xce, 0x48, 0xd1, 0xbb,
+ 0xc6, 0x1b, 0xe0, 0xfe, 0xd2, 0xcf, 0xc8, 0xff, 0xd5, 0xf2, 0xdd, 0x3a, 0xac,
+ 0x59, 0x11, 0x06, 0xb1, 0x3f, 0xfb, 0xe5, 0xbc, 0x50, 0x35, 0x20, 0x18, 0xea,
+ 0x6a, 0x26, 0xdd, 0x38, 0xdb, 0x36, 0xf3, 0x1c, 0xe3, 0x48, 0xf8, 0x60, 0x67,
+ 0x1e, 0xd9, 0xeb, 0xe0, 0xf2, 0xdd, 0xce, 0x1c, 0x3e, 0x18, 0x0e, 0xa6, 0xfe,
+ 0xdf, 0x0c, 0xd1, 0xcc, 0x2c, 0xdb, 0x0e, 0xec, 0xc0, 0x17, 0x2b, 0xe5, 0xfa,
+ 0x41, 0x21, 0xb0, 0xfb, 0xc2, 0x42, 0x24, 0x2b, 0x2f, 0xdb, 0xe4, 0xc8, 0x40,
+ 0x3f, 0x17, 0xb5, 0xd2, 0xf7, 0x15, 0x2e, 0x18, 0xc0, 0xa2, 0x3f, 0x6d, 0xe3,
+ 0xe1, 0xb8, 0xc3, 0xba, 0xfb, 0x2c, 0x0d, 0xea, 0x15, 0xc7, 0x06, 0xdf, 0xe0,
+ 0x55, 0xc5, 0xbf, 0x0a, 0xf1, 0xe3, 0xe3, 0xef, 0x1d, 0x7f, 0xef, 0xef, 0x4a,
+ 0xfd, 0x1a, 0x25, 0x04, 0xfe, 0x03, 0xd9, 0xf2, 0xef, 0x12, 0x28, 0xef, 0x36,
+ 0xcf, 0x21, 0x14, 0x0d, 0x21, 0xf6, 0xfa, 0xfc, 0xf3, 0xe7, 0xed, 0xd6, 0xdd,
+ 0xe2, 0xed, 0xb8, 0xf0, 0xe6, 0x1d, 0x17, 0xf3, 0x13, 0xf0, 0xd6, 0x00, 0xcc,
+ 0xe6, 0x00, 0x09, 0xff, 0xe5, 0xb7, 0xd8, 0xf8, 0x04, 0x07, 0xe2, 0xf6, 0xe3,
+ 0xf5, 0x06, 0xfd, 0xde, 0xfb, 0xb8, 0x18, 0xff, 0x02, 0xf1, 0x6d, 0xfe, 0x0d,
+ 0xfc, 0x21, 0xbb, 0x0b, 0xdf, 0xe1, 0xf8, 0xde, 0x27, 0xe6, 0xfa, 0x3c, 0xbb,
+ 0xfe, 0x17, 0x00, 0xdb, 0x1d, 0xf0, 0xd9, 0xbe, 0x12, 0x7f, 0xe9, 0xd1, 0xf7,
+ 0xe4, 0x08, 0xcc, 0xe6, 0xfb, 0xda, 0xe6, 0xf9, 0xf3, 0xeb, 0xf1, 0xec, 0xef,
+ 0x17, 0x11, 0xf0, 0xfc, 0x2d, 0xf7, 0xf9, 0xc6, 0xec, 0x43, 0xf6, 0x01, 0xfb,
+ 0xcc, 0xe4, 0xdb, 0x3c, 0x3e, 0xff, 0x0f, 0x15, 0xe4, 0xfb, 0xdd, 0xfe, 0x02,
+ 0xfa, 0xe3, 0x11, 0x24, 0x0f, 0x0a, 0x0f, 0xe4, 0x05, 0xcd, 0xa7, 0x0d, 0x8a,
+ 0x33, 0xe8, 0x2d, 0xfc, 0x49, 0x06, 0xb4, 0xe7, 0xe1, 0x1f, 0x0c, 0xf3, 0x3c,
+ 0xfc, 0xc4, 0xf7, 0xf8, 0x27, 0x2c, 0xe8, 0xcc, 0xe7, 0xa3, 0xb8, 0x44, 0xdc,
+ 0xf8, 0x2a, 0x54, 0x92, 0xd7, 0x04, 0xca, 0x81, 0xc5, 0xdd, 0xf7, 0xc9, 0x63,
+ 0x07, 0xfc, 0x00, 0x0a, 0x34, 0x2b, 0x43, 0xd8, 0xca, 0xe0, 0xc3, 0xb0, 0x12,
+ 0xfa, 0xf9, 0xa5, 0xd6, 0xc4, 0xe3, 0xff, 0xe7, 0xf9, 0x23, 0xbf, 0x4c, 0xbb,
+ 0xc5, 0xfe, 0x2b, 0x43, 0xf6, 0xbb, 0xfe, 0x39, 0xdc, 0x09, 0xc1, 0x99, 0x4f,
+ 0xf8, 0xe1, 0xe6, 0x38, 0xd8, 0x16, 0x11, 0xf7, 0x41, 0xd5, 0x1c, 0x02, 0x00,
+ 0xa9, 0x13, 0x02, 0xf1, 0x3f, 0x3a, 0x52, 0xba, 0xa1, 0x85, 0x8d, 0x25, 0xc9,
+ 0xdf, 0xdf, 0x01, 0x1f, 0x38, 0xea, 0x16, 0x26, 0x2c, 0x12, 0x26, 0xfd, 0x2c,
+ 0x13, 0xf6, 0x1e, 0x1f, 0x1c, 0xdd, 0xc9, 0x7f, 0x03, 0xcd, 0x04, 0x0a, 0xf3,
+ 0x15, 0xe2, 0x48, 0x0e, 0x38, 0xd6, 0x24, 0x11, 0x36, 0x05, 0x32, 0x17, 0x00,
+ 0x24, 0xf9, 0xd1, 0x24, 0x2b, 0xc2, 0xc0, 0xf9, 0xff, 0xcc, 0x0b, 0x34, 0xf0,
+ 0x27, 0xfb, 0xe4, 0x2c, 0x0a, 0xf7, 0xf3, 0xe1, 0xac, 0xfd, 0xe2, 0xf5, 0xdc,
+ 0xd8, 0x05, 0xa0, 0x0d, 0x5d, 0x04, 0xe5, 0xca, 0xfd, 0x35, 0xef, 0xd4, 0x1f,
+ 0x04, 0xb9, 0x0b, 0xd7, 0xed, 0xd8, 0x09, 0x05, 0xf4, 0x0e, 0xdd, 0xf2, 0xd5,
+ 0xf9, 0x37, 0xdf, 0x25, 0x20, 0xdb, 0xf5, 0x14, 0xf1, 0x12, 0xec, 0xcd, 0xd9,
+ 0xca, 0x2c, 0x2c, 0xe1, 0xfa, 0x5f, 0xb8, 0xf5, 0x01, 0x09, 0x26, 0x0f, 0xd5,
+ 0xf1, 0x14, 0x3c, 0xec, 0xd3, 0xdf, 0x41, 0x11, 0x3a, 0xf6, 0xce, 0x11, 0xd7,
+ 0x2a, 0x4d, 0x01, 0x0b, 0xec, 0xfb, 0x0a, 0x55, 0xd7, 0x01, 0xbc, 0x38, 0xe4,
+ 0xd3, 0xf6, 0xef, 0x34, 0xb8, 0xf2, 0x92, 0x2d, 0x91, 0xb8, 0x22, 0xf5, 0x2b,
+ 0xce, 0x1a, 0xbf, 0x70, 0x07, 0x36, 0xe9, 0x99, 0x1d, 0x0a, 0x08, 0x29, 0xce,
+ 0xee, 0xfc, 0x5d, 0xb7, 0xf2, 0xa2, 0xd3, 0x38, 0x2f, 0x6a, 0x31, 0x34, 0x41,
+ 0xc4, 0x0e, 0x1d, 0x20, 0x5d, 0x94, 0x1a, 0xbd, 0xb5, 0xc6, 0xd0, 0x43, 0xdb,
+ 0x3d, 0x44, 0xf8, 0xba, 0x0a, 0xe5, 0x2d, 0xf2, 0xd8, 0x03, 0xf7, 0x33, 0xbe,
+ 0x1d, 0x4b, 0x09, 0xd6, 0x09, 0x1c, 0xe9, 0x46, 0x0c, 0x17, 0xf5, 0xf0, 0xc9,
+ 0x34, 0x56, 0xb1, 0xba, 0x31, 0xcf, 0x0e, 0x22, 0x0b, 0x47, 0x4e, 0x1d, 0x05,
+ 0x38, 0x81, 0x73, 0x2a, 0xce, 0x01, 0x4f, 0xe4, 0xb0, 0x4e, 0x94, 0xf5, 0xac,
+ 0xd1, 0xe8, 0x16, 0x10, 0x0c, 0xf8, 0x3b, 0xb8, 0x12, 0xe3, 0xf5, 0x59, 0x64,
+ 0x1c, 0x38, 0xe6, 0x10, 0xd0, 0xcc, 0xc9, 0x23, 0xd6, 0xf8, 0xf9, 0xf8, 0xf1,
+ 0x19, 0x0b, 0x0f, 0x0f, 0x05, 0xc7, 0xe7, 0x0c, 0xdd, 0x0c, 0x0f, 0x17, 0xf8,
+ 0xf8, 0xf6, 0x09, 0xf9, 0xd6, 0x1b, 0x53, 0x5b, 0xf0, 0xde, 0xe9, 0x1b, 0x33,
+ 0x05, 0x37, 0xbd, 0x2d, 0x24, 0xde, 0x19, 0xac, 0x21, 0x4c, 0x0b, 0x1b, 0x14,
+ 0xd5, 0x36, 0x23, 0xe6, 0x20, 0x26, 0x22, 0xf7, 0xad, 0xe6, 0xd1, 0xdc, 0x97,
+ 0xca, 0x20, 0x3e, 0x12, 0xb4, 0x2d, 0x34, 0xe7, 0x35, 0x1c, 0x39, 0xc1, 0xb5,
+ 0x08, 0xc0, 0x21, 0x1d, 0xec, 0x31, 0x0a, 0x1d, 0x17, 0xd4, 0xe2, 0xff, 0xf4,
+ 0xdf, 0x3d, 0xf5, 0xdf, 0x02, 0x48, 0xe8, 0x06, 0xd7, 0x15, 0x17, 0xf7, 0xee,
+ 0x7f, 0x24, 0x07, 0xe2, 0x01, 0xc9, 0x18, 0x2e, 0xfc, 0xfe, 0x12, 0xda, 0xd8,
+ 0x07, 0x08, 0xfb, 0xea, 0xfa, 0x01, 0x07, 0xe5, 0x1b, 0x00, 0xd9, 0xcf, 0x32,
+ 0xf2, 0xef, 0xb4, 0xeb, 0xfd, 0xf9, 0x33, 0xd7, 0x07, 0xbb, 0xf4, 0x0f, 0xe9,
+ 0xf9, 0x66, 0xf7, 0x2c, 0x24, 0xa3, 0xef, 0xf8, 0x2a, 0x1c, 0x3e, 0x8e, 0xf0,
+ 0xaa, 0xd1, 0x05, 0x12, 0x9e, 0x14, 0xec, 0x47, 0x20, 0x27, 0x56, 0xe8, 0x36,
+ 0xa0, 0x81, 0xa5, 0xa2, 0xf7, 0x0b, 0x1b, 0xdc, 0xb0, 0xb6, 0xf6, 0xff, 0xf4,
+ 0x26, 0xe7, 0xce, 0xc3, 0x02, 0x95, 0x5e, 0x8f, 0xd4, 0xb3, 0xb9, 0xe2, 0x28,
+ 0xfa, 0x00, 0x0f, 0x1a, 0xee, 0x2a, 0x02, 0xcf, 0xb9, 0xea, 0xa8, 0x03, 0x3a,
+ 0xff, 0xcf, 0x07, 0xe5, 0x2d, 0x3f, 0x32, 0xc0, 0x0f, 0xdf, 0xd3, 0xd5, 0x0d,
+ 0xe6, 0x10, 0xe4, 0x11, 0xbd, 0xb0, 0x09, 0x12, 0x00, 0xd6, 0x37, 0x22, 0x36,
+ 0xd3, 0xf6, 0x8a, 0xeb, 0xd9, 0x20, 0xe2, 0xfb, 0xde, 0x14, 0x8c, 0xc0, 0xd0,
+ 0xe8, 0x21, 0xe9, 0xab, 0xd6, 0x0c, 0x1c, 0x03, 0x4e, 0xf7, 0x14, 0xbf, 0x0e,
+ 0xab, 0x03, 0x3f, 0x22, 0xcf, 0x52, 0xc6, 0x33, 0x7f, 0xc7, 0xd2, 0x14, 0x10,
+ 0x1d, 0x0d, 0x02, 0xae, 0xcd, 0xc8, 0xd8, 0xff, 0xfc, 0xd7, 0x1e, 0x13, 0xe0,
+ 0x2d, 0xff, 0x28, 0x1f, 0x00, 0x22, 0x21, 0x10, 0x0e, 0xf9, 0xc0, 0x1c, 0x28,
+ 0x26, 0x9d, 0x20, 0x1a, 0xd6, 0x21, 0x2a, 0x2d, 0x1a, 0xe4, 0xf3, 0xea, 0x14,
+ 0x0d, 0x0c, 0x19, 0x09, 0xcb, 0x4f, 0x51, 0xd0, 0x09, 0x2f, 0xdc, 0x8c, 0x23,
+ 0x12, 0xae, 0x29, 0xe2, 0xf6, 0x21, 0x29, 0x32, 0x22, 0x18, 0x23, 0xf9, 0x47,
+ 0xd0, 0x44, 0x23, 0x05, 0xe6, 0x17, 0x04, 0x07, 0x05, 0xf8, 0xff, 0x49, 0x0a,
+ 0x1f, 0x0b, 0xf0, 0x54, 0x23, 0x0a, 0x0a, 0x05, 0x0c, 0x01, 0x1b, 0xde, 0xf7,
+ 0xde, 0xe1, 0xd5, 0x08, 0x4f, 0x1b, 0xf1, 0x22, 0x27, 0xb5, 0x1e, 0x14, 0xdb,
+ 0x23, 0xc8, 0xfa, 0xd9, 0xf2, 0xf0, 0xd6, 0x17, 0xee, 0x38, 0xec, 0x29, 0xe2,
+ 0x26, 0xcf, 0xbc, 0xe3, 0xf9, 0x1b, 0xdd, 0xcf, 0x0b, 0xe8, 0xea, 0xea, 0x3d,
+ 0xea, 0x2c, 0xfa, 0xc5, 0x1c, 0xfa, 0xe4, 0xea, 0xfb, 0xd4, 0x31, 0xef, 0xe6,
+ 0xf9, 0xcd, 0xd3, 0xe4, 0xf0, 0xc2, 0xec, 0xe9, 0x08, 0xbb, 0x01, 0x4a, 0x19,
+ 0x1a, 0xfc, 0x22, 0x81, 0xee, 0x44, 0xf6, 0x2e, 0x2a, 0xf3, 0x04, 0x1a, 0xde,
+ 0xef, 0xf5, 0x22, 0x03, 0xe2, 0xf9, 0xf9, 0x0b, 0x0d, 0x4f, 0xf6, 0xd1, 0xe2,
+ 0xb6, 0x2e, 0x17, 0xf3, 0x0b, 0xd7, 0x47, 0xed, 0xb8, 0xf2, 0xfa, 0x29, 0xee,
+ 0x00, 0xf9, 0x19, 0xe2, 0xf0, 0xf6, 0xde, 0xe7, 0x2d, 0x29, 0x14, 0x0b, 0x18,
+ 0x37, 0xf8, 0x05, 0x1e, 0xeb, 0xe6, 0x22, 0xf7, 0x08, 0xfb, 0x05, 0x0a, 0x02,
+ 0x2f, 0xef, 0x0e, 0x00, 0xea, 0xfa, 0xe2, 0x07, 0x07, 0xee, 0xd1, 0xfc, 0xc9,
+ 0xf3, 0x19, 0x21, 0x28, 0xe5, 0x0c, 0xf0, 0xe1, 0x11, 0x3e, 0xe6, 0x4b, 0xd4,
+ 0x24, 0x1d, 0x1a, 0xc3, 0x94, 0x34, 0x3c, 0x1e, 0xfe, 0x3e, 0xb6, 0x43, 0x5b,
+ 0x33, 0xe1, 0xdc, 0x01, 0x2d, 0x25, 0x30, 0x38, 0xc6, 0xd3, 0xa1, 0x50, 0xcb,
+ 0x11, 0x0c, 0xc3, 0xe7, 0x2b, 0x44, 0x07, 0x11, 0x18, 0x14, 0x00, 0xf2, 0xc0,
+ 0x57, 0xb4, 0xae, 0xea, 0x06, 0xed, 0xb9, 0xf4, 0xe5, 0xe4, 0x36, 0x39, 0x0c,
+ 0xfa, 0xba, 0x05, 0x31, 0x2a, 0xc8, 0x50, 0x38, 0xde, 0xee, 0x2d, 0x3c, 0xfd,
+ 0x31, 0xd1, 0xff, 0x33, 0xa9, 0x2c, 0x21, 0x6d, 0x31, 0xdb, 0xd3, 0x04, 0x55,
+ 0x1f, 0xbe, 0x09, 0x28, 0x90, 0x0e, 0x79, 0xf5, 0xdb, 0x3a, 0xc0, 0xd9, 0x33,
+ 0xb5, 0xda, 0xd2, 0xb2, 0x17, 0x0a, 0xe8, 0xf9, 0x20, 0x24, 0x04, 0xf8, 0x11,
+ 0x1f, 0x12, 0xf5, 0x32, 0xa9, 0xfb, 0xe6, 0x08, 0xf2, 0xe7, 0x10, 0x12, 0x42,
+ 0x2a, 0xd3, 0xdb, 0x21, 0xd0, 0x7f, 0xab, 0x1b, 0x1f, 0x27, 0xd5, 0xad, 0x27,
+ 0x1c, 0xed, 0x0c, 0x31, 0xcd, 0x10, 0x17, 0xa7, 0x26, 0x56, 0x16, 0xee, 0x0f,
+ 0x68, 0x41, 0x1c, 0xdd, 0x0d, 0xdc, 0x19, 0x3c, 0xeb, 0x04, 0xae, 0x35, 0xe6,
+ 0x2f, 0xf8, 0x12, 0x08, 0xff, 0xc5, 0xd6, 0xac, 0xf1, 0x2f, 0xdd, 0xb5, 0xd5,
+ 0xfa, 0x37, 0x71, 0xeb, 0xf6, 0xa5, 0xe8, 0xfa, 0xda, 0x00, 0xd9, 0xf5, 0xc2,
+ 0xd0, 0x37, 0xee, 0x1c, 0xdd, 0x1a, 0xdb, 0xd9, 0x2a, 0x0b, 0xe3, 0xbe, 0x10,
+ 0xe6, 0xdf, 0xd2, 0x14, 0xcf, 0x7f, 0x4a, 0xde, 0xc8, 0xf9, 0xe1, 0x32, 0xf0,
+ 0x9f, 0xe2, 0xd8, 0xf8, 0x12, 0xc9, 0xf4, 0x04, 0x1b, 0x05, 0x27, 0x2f, 0x0d,
+ 0x21, 0x03, 0x20, 0x2f, 0xf9, 0xf5, 0xec, 0x29, 0x07, 0xd4, 0x2f, 0xea, 0xc7,
+ 0x02, 0x04, 0xa6, 0x16, 0xcc, 0xc5, 0xc5, 0xf9, 0xe5, 0xf8, 0xba, 0xfd, 0x1c,
+ 0x2e, 0xf6, 0x19, 0x10, 0xf1, 0x4c, 0x26, 0x09, 0xf1, 0xed, 0xc4, 0xc4, 0x75,
+ 0xde, 0xfe, 0xd7, 0x20, 0x50, 0xf3, 0xb1, 0xe1, 0xea, 0x28, 0x12, 0x05, 0xe7,
+ 0xe6, 0x1c, 0xe5, 0xd3, 0xea, 0xf0, 0xd8, 0x3f, 0xef, 0x09, 0xd5, 0xe4, 0x1a,
+ 0x40, 0xf2, 0x5f, 0xfc, 0x30, 0xd9, 0x82, 0xea, 0x29, 0xc5, 0x1b, 0xfa, 0xaf,
+ 0xd2, 0xf4, 0xd8, 0xec, 0x53, 0xdd, 0x2e, 0x37, 0xef, 0xf9, 0xe7, 0x1d, 0xff,
+ 0x16, 0x38, 0x18, 0x7f, 0xd8, 0xe0, 0xbc, 0xf8, 0x9a, 0xe0, 0xf5, 0x2a, 0x05,
+ 0x22, 0x15, 0x51, 0xef, 0xd0, 0x70, 0x22, 0x6b, 0x1a, 0xcd, 0xbb, 0x60, 0xc2,
+ 0xf3, 0xd8, 0x5f, 0x5f, 0xdd, 0x0c, 0xc1, 0xe0, 0xb9, 0x12, 0x0b, 0xed, 0x03,
+ 0x2b, 0x39, 0x1e, 0x4e, 0x2e, 0xfa, 0x3e, 0x18, 0xad, 0xca, 0x74, 0xcc, 0xe9,
+ 0x1b, 0x1e, 0xf6, 0x13, 0xe1, 0x14, 0x9f, 0x46, 0xcd, 0x05, 0x35, 0x47, 0x57,
+ 0xdf, 0xf0, 0x2c, 0x25, 0xde, 0x28, 0xc7, 0x11, 0xfe, 0x19, 0xe2, 0xfd, 0xfe,
+ 0xd8, 0x5d, 0xd5, 0xca, 0x97, 0x59, 0x21, 0x1e, 0x04, 0xff, 0x09, 0x4b, 0x17,
+ 0xc4, 0x1d, 0xc9, 0xda, 0x0a, 0xf5, 0xd0, 0x01, 0x30, 0xff, 0xb8, 0x3d, 0x20,
+ 0x38, 0xb9, 0x40, 0xf9, 0x2d, 0xf0, 0xe2, 0xbd, 0xcc, 0xc4, 0x07, 0xde, 0xf7,
+ 0xea, 0xfc, 0x46, 0xd4, 0xfb, 0x09, 0xc6, 0xf9, 0x43, 0x6b, 0xdd, 0xe2, 0xd3,
+ 0x18, 0xdc, 0x0b, 0x39, 0x93, 0x32, 0xfd, 0x22, 0x4c, 0x06, 0x72, 0xfd, 0xd0,
+ 0x18, 0x14, 0xeb, 0x43, 0x22, 0x08, 0xb6, 0x29, 0x00, 0x32, 0x7f, 0x13, 0x42,
+ 0xdc, 0xd5, 0x0d, 0x53, 0x10, 0x09, 0xfa, 0x5a, 0x0e, 0x13, 0xff, 0xc0, 0x18,
+ 0x34, 0x1f, 0x38, 0x38, 0x27, 0xc4, 0xf6, 0x19, 0x40, 0xdc, 0x30, 0xc5, 0xd7,
+ 0xad, 0xf2, 0xf5, 0x06, 0x07, 0xdc, 0x30, 0x01, 0x1c, 0xe8, 0x34, 0xb8, 0x3c,
+ 0xd1, 0xdd, 0x0c, 0xf9, 0x04, 0xc0, 0xb1, 0xf5, 0x35, 0xbb, 0x18, 0x26, 0xd4,
+ 0x00, 0x30, 0xf4, 0xde, 0xb9, 0xba, 0x0a, 0x13, 0xaa, 0x0c, 0xd6, 0xe7, 0x42,
+ 0x17, 0xe3, 0x19, 0xc8, 0x74, 0xe8, 0x13, 0xf8, 0x34, 0xd2, 0x1f, 0xee, 0xe9,
+ 0xef, 0xdd, 0x03, 0xc8, 0x4a, 0x48, 0x0a, 0xaf, 0xda, 0xe1, 0xee, 0xca, 0x75,
+ 0xaf, 0x31, 0xf6, 0x0a, 0x2a, 0x2a, 0xfc, 0xf1, 0x07, 0xc4, 0x9f, 0xf9, 0xba,
+ 0x1e, 0x2d, 0x15, 0x12, 0x5a, 0xfe, 0x16, 0xec, 0x0a, 0x36, 0xe7, 0xbf, 0xd0,
+ 0xe4, 0xc5, 0x0e, 0x18, 0xf7, 0x0e, 0xfe, 0x4b, 0x10, 0xb3, 0x35, 0xd7, 0x0d,
+ 0xe4, 0x01, 0xba, 0xe6, 0x22, 0xd4, 0x81, 0x05, 0x47, 0x3f, 0x05, 0xd7, 0xd7,
+ 0x12, 0xfe, 0x09, 0x0d, 0x1f, 0xd8, 0xff, 0xc2, 0xf5, 0x1a, 0x0f, 0xe9, 0xec,
+ 0x65, 0xb3, 0xc9, 0x06, 0xea, 0x3b, 0xe5, 0xf1, 0xf4, 0xe5, 0xd1, 0x57, 0xc0,
+ 0xc4, 0x34, 0x07, 0xb5, 0x05, 0x07, 0x12, 0x3a, 0xdf, 0xe6, 0xce, 0xc7, 0x1c,
+ 0x33, 0xe4, 0x95, 0xf7, 0x09, 0x20, 0x40, 0x54, 0xc0, 0xde, 0x17, 0x4c, 0xfa,
+ 0xff, 0xc0, 0x02, 0x24, 0x3a, 0xf5, 0xee, 0x0d, 0x91, 0x2c, 0x25, 0x53, 0xcf,
+ 0xdb, 0x4f, 0x4e, 0xfa, 0xd3, 0xff, 0xd2, 0x2c, 0xf0, 0x12, 0x18, 0xf1, 0x1e,
+ 0xcd, 0xee, 0xe6, 0x03, 0xe9, 0x01, 0xca, 0xed, 0xdb, 0x1d, 0x04, 0xb1, 0x7e,
+ 0xe6, 0xf9, 0xce, 0xcd, 0xf0, 0x01, 0xf0, 0x3e, 0x19, 0x05, 0x0e, 0x3d, 0x0a,
+ 0xe6, 0x2a, 0x20, 0xd4, 0xe0, 0x1e, 0x26, 0x1e, 0xbe, 0x42, 0x24, 0xc8, 0x31,
+ 0x22, 0x39, 0x23, 0xc2, 0x6a, 0xe7, 0x22, 0x11, 0x37, 0x26, 0x1e, 0x08, 0xb9,
+ 0x1f, 0x01, 0xef, 0x02, 0xef, 0xfa, 0x1d, 0x1b, 0x0e, 0x1c, 0x09, 0x22, 0xfc,
+ 0xdd, 0xba, 0x7f, 0xdb, 0x0f, 0xe3, 0x4f, 0x0b, 0xd9, 0x0d, 0xc6, 0xee, 0x29,
+ 0xfe, 0x9d, 0x10, 0xbc, 0x02, 0xe6, 0x17, 0x26, 0x20, 0x39, 0xe1, 0x1f, 0x07,
+ 0xdf, 0xe8, 0x16, 0x18, 0xdd, 0x26, 0xe1, 0xb2, 0x46, 0x1d, 0x04, 0xe3, 0xf8,
+ 0x0e, 0x38, 0x1e, 0xea, 0x0a, 0x30, 0x2a, 0x36, 0x31, 0x2d, 0x16, 0xd1, 0xd0,
+ 0xda, 0x03, 0x11, 0xb7, 0xc0, 0xf7, 0xd9, 0xd3, 0x2e, 0x02, 0xd7, 0x2b, 0xf9,
+ 0x94, 0xf6, 0xee, 0xfe, 0xdd, 0x3f, 0x61, 0xf5, 0x98, 0xf7, 0x02, 0xe9, 0x16,
+ 0xdb, 0x44, 0x2d, 0x4c, 0xf9, 0x0c, 0x09, 0x6b, 0x2e, 0x27, 0xba, 0x04, 0xf0,
+ 0xcb, 0x01, 0xd3, 0xe4, 0xbe, 0xe6, 0x22, 0xcc, 0x05, 0xe0, 0xec, 0x13, 0x0c,
+ 0xcd, 0xba, 0xe8, 0x16, 0xfd, 0x66, 0x7f, 0xfe, 0x49, 0xc3, 0x39, 0xd8, 0xce,
+ 0xe2, 0xfc, 0x0a, 0x12, 0xfd, 0xd2, 0x01, 0xb2, 0x11, 0xfa, 0xf0, 0xff, 0x06,
+ 0x3d, 0xde, 0xed, 0x9b, 0x08, 0xf8, 0xca, 0xd1, 0xca, 0xbe, 0xe8, 0x08, 0x63,
+ 0xc2, 0xa8, 0x1f, 0x5b, 0x4c, 0x11, 0xd0, 0x31, 0x19, 0x2d, 0xf5, 0xab, 0xe1,
+ 0xef, 0xe2, 0xfd, 0xf5, 0x1d, 0xe6, 0x38, 0x07, 0x2d, 0xf4, 0xcb, 0x0d, 0xc5,
+ 0x17, 0x02, 0x34, 0xb0, 0x55, 0xec, 0xca, 0xef, 0x1e, 0xd8, 0x17, 0x03, 0xd6,
+ 0xf1, 0x49, 0x06, 0xdc, 0xf8, 0x2f, 0xf6, 0x00, 0xeb, 0x81, 0x1e, 0xb7, 0xe4,
+ 0xe4, 0xc3, 0x22, 0x28, 0x03, 0x08, 0xbb, 0x56, 0x2e, 0xf4, 0xda, 0x00, 0xff,
+ 0xfc, 0x69, 0x14, 0x09, 0x06, 0xc9, 0x0f, 0x3f, 0x0f, 0xef, 0xbd, 0xe4, 0x58,
+ 0xe8, 0x1f, 0x5f, 0x14, 0xf5, 0xec, 0xe7, 0xfb, 0x1e, 0xa7, 0xd7, 0xfa, 0xf2,
+ 0x11, 0x27, 0x00, 0xe4, 0xed, 0x14, 0xf2, 0x04, 0x1d, 0xaf, 0x53, 0x04, 0x43,
+ 0x2c, 0xe5, 0xd9, 0x1f, 0xbe, 0x1c, 0xc8, 0xcf, 0xe4, 0x04, 0xa2, 0x1a, 0xdf,
+ 0xff, 0x20, 0xfe, 0xd9, 0xf9, 0x11, 0xf4, 0xeb, 0xe4, 0xc5, 0x95, 0x19, 0x2f,
+ 0x09, 0xcc, 0xc7, 0xda, 0x11, 0xd9, 0x36, 0x01, 0x67, 0xf3, 0xde, 0xfc, 0x2c,
+ 0xbe, 0x6e, 0xfa, 0xfa, 0x34, 0xb5, 0xf8, 0xb1, 0xac, 0x15, 0xdb, 0x12, 0xec,
+ 0x1a, 0xed, 0x2d, 0x31, 0xd2, 0xff, 0x70, 0x12, 0x0d, 0x0c, 0x08, 0xa9, 0x4d,
+ 0xf3, 0xf1, 0x1f, 0x45, 0x6c, 0xff, 0x5b, 0xc2, 0x8c, 0x0b, 0xff, 0x14, 0xce,
+ 0x45, 0x55, 0x0d, 0x66, 0x66, 0x13, 0x3d, 0x02, 0xf1, 0x0b, 0xe8, 0xe5, 0x54,
+ 0xf2, 0xc7, 0xd9, 0xda, 0x01, 0xda, 0xcc, 0xce, 0x29, 0xd0, 0x17, 0xdf, 0xbd,
+ 0xa6, 0x0c, 0x23, 0x19, 0x22, 0xf6, 0xf4, 0x1a, 0xec, 0xcb, 0x18, 0x57, 0xec,
+ 0x71, 0x18, 0x34, 0x1c, 0x0e, 0xf8, 0x19, 0xe2, 0x51, 0xa2, 0x3e, 0x90, 0xda,
+ 0x0d, 0xc8, 0x10, 0x0a, 0x28, 0xa7, 0x72, 0x81, 0xbd, 0x1f, 0x40, 0x1f, 0x9d,
+ 0x26, 0x0a, 0xdf, 0x0e, 0x1b, 0xde, 0xcf, 0xe1, 0xfe, 0xdb, 0xea, 0x09, 0xf9,
+ 0x30, 0x45, 0x1c, 0x0d, 0x05, 0xf1, 0xc5, 0xd5, 0x46, 0x04, 0x02, 0x3b, 0xe0,
+ 0xd5, 0x08, 0x1c, 0x3b, 0x07, 0x54, 0xec, 0x3c, 0xf1, 0xed, 0x7f, 0x15, 0x1d,
+ 0xf6, 0x2f, 0xd8, 0xc2, 0xfa, 0xd0, 0xd2, 0x34, 0x20, 0x3d, 0x04, 0xe6, 0xde,
+ 0xf4, 0xef, 0xe2, 0xee, 0x0b, 0xe7, 0xbb, 0xcd, 0x33, 0xf7, 0xca, 0xfd, 0xe9,
+ 0x42, 0x43, 0x25, 0x7e, 0xdb, 0x4e, 0x16, 0xde, 0xfb, 0xf3, 0x75, 0xfd, 0x8f,
+ 0xff, 0x13, 0x18, 0x2b, 0x17, 0xdc, 0x0d, 0xd6, 0x0f, 0x37, 0x73, 0xbe, 0x14,
+ 0xe0, 0x26, 0x38, 0x0f, 0x16, 0x11, 0x02, 0xe3, 0xed, 0x01, 0x23, 0x10, 0x26,
+ 0x0d, 0xe2, 0x20, 0xff, 0xfb, 0xe2, 0x3d, 0x00, 0x13, 0x01, 0xb4, 0xf3, 0xc0,
+ 0xfb, 0x4f, 0x56, 0xc7, 0x0a, 0xea, 0x22, 0xd7, 0x15, 0x71, 0xfb, 0x2a, 0x4c,
+ 0xd9, 0xf8, 0xd7, 0x2c, 0x1e, 0x06, 0xc7, 0xe6, 0xe5, 0xe8, 0x24, 0x20, 0xd6,
+ 0xbf, 0x1f, 0xf3, 0x08, 0x1e, 0xfb, 0xcd, 0xad, 0xf6, 0x16, 0x6a, 0x31, 0x3e,
+ 0x32, 0xa6, 0x0a, 0xe3, 0x90, 0x4b, 0xf8, 0x31, 0xcf, 0xc3, 0x10, 0xdf, 0xb8,
+ 0xfe, 0xb5, 0x0d, 0x9f, 0x2a, 0x1d, 0xf0, 0x0e, 0xd0, 0x5c, 0x0c, 0x0e, 0xd6,
+ 0x1a, 0xd6, 0x2a, 0xbc, 0xf7, 0x44, 0x22, 0xc4, 0xe2, 0xe4, 0x27, 0x9f, 0xda,
+ 0x13, 0x38, 0x20, 0x17, 0x44, 0x16, 0xb8, 0xcd, 0x0a, 0x0e, 0x09, 0x53, 0xf0,
+ 0x2e, 0x0b, 0xb6, 0x7f, 0xfc, 0x41, 0xe6, 0xe2, 0x34, 0xd0, 0x0c, 0x47, 0x19,
+ 0x4c, 0xa5, 0x0a, 0x04, 0xc5, 0x01, 0xb7, 0xed, 0x3d, 0x35, 0x63, 0xe5, 0x43,
+ 0xce, 0x22, 0xd1, 0x07, 0x20, 0x6e, 0xe7, 0x29, 0x16, 0x0f, 0x07, 0xf6, 0xd7,
+ 0xfd, 0x24, 0xf7, 0xd6, 0x16, 0x52, 0xe1, 0xe6, 0xa1, 0xe5, 0x13, 0xf2, 0xb7,
+ 0x0e, 0xe7, 0x05, 0xe4, 0xe0, 0x20, 0x0e, 0xf4, 0xd5, 0x1a, 0x0e, 0xea, 0xea,
+ 0xfe, 0xdc, 0x29, 0x30, 0xd6, 0xb7, 0xdd, 0x38, 0xea, 0x2e, 0x18, 0x62, 0x30,
+ 0xe4, 0xe6, 0xe5, 0xef, 0x1e, 0xf4, 0x03, 0x0e, 0x09, 0xdc, 0x4f, 0x4c, 0x17,
+ 0xe2, 0x33, 0xf4, 0xfd, 0xe6, 0xf2, 0x24, 0xff, 0x22, 0x50, 0x1d, 0xdd, 0xfd,
+ 0xc5, 0x21, 0x42, 0x11, 0xce, 0xdf, 0x3c, 0xc2, 0xc6, 0xcd, 0xea, 0xd7, 0x14,
+ 0x53, 0xc5, 0x02, 0xb8, 0x2b, 0x0b, 0xfc, 0x32, 0xe7, 0xe7, 0x28, 0xc8, 0xd3,
+ 0x8b, 0x13, 0x0a, 0x50, 0x70, 0xf5, 0x7d, 0x92, 0x45, 0x29, 0xea, 0xf8, 0xdb,
+ 0xdb, 0xee, 0x17, 0x56, 0x6b, 0x25, 0x08, 0xd8, 0xd7, 0xb5, 0xff, 0xb5, 0x05,
+ 0x0e, 0x25, 0x13, 0x4f, 0x6a, 0x81, 0x48, 0x24, 0x37, 0x72, 0xc2, 0x25, 0xf8,
+ 0x59, 0x19, 0xf8, 0x3c, 0xe8, 0x02, 0xff, 0x47, 0xef, 0x59, 0xeb, 0xf9, 0xe9,
+ 0xf9, 0x35, 0xe2, 0xb8, 0x10, 0xed, 0xb9, 0xfa, 0x2b, 0x1b, 0x0a, 0xf6, 0xb7,
+ 0xf2, 0xb0, 0x40, 0x1c, 0x15, 0x07, 0xd4, 0xe1, 0x2a, 0x08, 0xf0, 0x20, 0x39,
+ 0xd8, 0x13, 0x2b, 0x22, 0x2d, 0xdf, 0xe5, 0xf6, 0x13, 0x14, 0x99, 0xc4, 0xc5,
+ 0x17, 0x2e, 0xeb, 0x0e, 0xd1, 0x1e, 0x17, 0x14, 0xad, 0xdf, 0xbd, 0xf4, 0x24,
+ 0xef, 0xe8, 0xfa, 0xf6, 0x1c, 0xec, 0xe0, 0x15, 0x08, 0xdc, 0xcc, 0xf1, 0x26,
+ 0x07, 0xf0, 0x34, 0xdd, 0x21, 0x1f, 0x8f, 0x4c, 0xf3, 0xec, 0x4c, 0x2e, 0xc5,
+ 0x64, 0x27, 0x37, 0x04, 0xd8, 0xec, 0xe2, 0xeb, 0xa3, 0x21, 0xfa, 0x11, 0x07,
+ 0x0f, 0x1d, 0x57, 0x40, 0x06, 0xc3, 0xd8, 0x38, 0xd1, 0x08, 0x02, 0x22, 0x18,
+ 0x19, 0xcd, 0xe8, 0xf3, 0x44, 0xe9, 0xb5, 0xe4, 0xfc, 0x41, 0xd1, 0x1a, 0xf4,
+ 0x48, 0xe8, 0x0e, 0x6e, 0x2a, 0x7f, 0xec, 0xe3, 0x03, 0xe8, 0x17, 0xf1, 0xe6,
+ 0x12, 0x4f, 0xeb, 0xe6, 0x20, 0x2b, 0xea, 0x97, 0xfa, 0xda, 0xdd, 0x1c, 0x21,
+ 0x1c, 0x01, 0x11, 0x12, 0x03, 0xaf, 0x13, 0xd9, 0x2f, 0x10, 0xfc, 0xc4, 0x31,
+ 0x16, 0xbf, 0xfb, 0x30, 0x03, 0xb4, 0xeb, 0xd9, 0xc6, 0x0b, 0x50, 0x2c, 0x54,
+ 0xe5, 0xbf, 0x70, 0xba, 0x10, 0xe6, 0xe8, 0x23, 0x17, 0x24, 0x46, 0x18, 0xc9,
+ 0x2a, 0xb5, 0xec, 0xf4, 0x81, 0x85, 0x21, 0x8e, 0x1a, 0x79, 0xe8, 0x22, 0xf4,
+ 0xf1, 0xd1, 0xa8, 0xf9, 0x98, 0xba, 0xfe, 0xcc, 0xfb, 0xe7, 0x33, 0x1d, 0x3c,
+ 0x0a, 0xe5, 0x10, 0x05, 0x30, 0x17, 0xbd, 0x59, 0xe6, 0x49, 0xe2, 0xd0, 0xcf,
+ 0xb4, 0x35, 0x0d, 0x6e, 0x58, 0xe4, 0x58, 0xac, 0xbe, 0x07, 0x13, 0xd3, 0xf5,
+ 0xf5, 0x13, 0xfb, 0x35, 0xc0, 0x2d, 0xca, 0x36, 0xa2, 0xff, 0x40, 0x38, 0xef,
+ 0xf2, 0x1c, 0x1c, 0x05, 0x42, 0xaf, 0x45, 0x25, 0xca, 0x00, 0xdf, 0x3f, 0xb0,
+ 0xec, 0xd0, 0xe4, 0x1e, 0xec, 0x15, 0x15, 0xf0, 0x2b, 0xef, 0xbc, 0xfc, 0x14,
+ 0xfd, 0xe0, 0x36, 0x05, 0xad, 0xe2, 0xbd, 0xdc, 0x08, 0x0d, 0xfd, 0xdd, 0xdc,
+ 0x11, 0xf4, 0xcc, 0x1a, 0xef, 0xe2, 0x07, 0x25, 0x20, 0xd1, 0xe8, 0xd0, 0x45,
+ 0x7b, 0xdc, 0xee, 0x01, 0xfb, 0xfa, 0xf6, 0x11, 0xc9, 0xa5, 0xda, 0xde, 0x13,
+ 0xfc, 0xfe, 0xc7, 0x49, 0x08, 0xdb, 0x16, 0x2d, 0xd5, 0xe5, 0xdc, 0xc8, 0x0e,
+ 0xfd, 0xff, 0xe3, 0x31, 0x48, 0x9f, 0xde, 0x46, 0xdb, 0xf6, 0x0d, 0x3a, 0xf7,
+ 0xb5, 0x7f, 0x02, 0xc7, 0xa6, 0xdf, 0x04, 0xdc, 0x0c, 0xcb, 0x0b, 0xbb, 0xf7,
+ 0x4f, 0xf7, 0x46, 0x11, 0x2a, 0x64, 0x1e, 0x37, 0xec, 0xd5, 0x8c, 0xef, 0x3a,
+ 0x1f, 0x1d, 0x46, 0xdd, 0xeb, 0xcc, 0x1d, 0xe7, 0x99, 0x17, 0x10, 0x12, 0xb8,
+ 0x17, 0x00, 0xcb, 0x0f, 0x02, 0xcb, 0x10, 0x3e, 0x31, 0x04, 0x51, 0x26, 0x2d,
+ 0xf9, 0xfe, 0xe0, 0xd0, 0x18, 0xc9, 0x71, 0x32, 0x2a, 0x12, 0xd1, 0xed, 0x2b,
+ 0x43, 0xb1, 0xe2, 0xf8, 0x28, 0xc6, 0xf7, 0xd8, 0x04, 0x2c, 0xc5, 0x09, 0xf9,
+ 0x0c, 0xe6, 0x0b, 0xdc, 0x45, 0x31, 0x31, 0xe1, 0x15, 0x40, 0xef, 0x0c, 0x03,
+ 0xf9, 0xf5, 0xc5, 0x15, 0x1b, 0x05, 0x35, 0xe8, 0xc2, 0xf8, 0xe6, 0x24, 0xcf,
+ 0x40, 0x37, 0xfc, 0x7f, 0xf1, 0xdd, 0x02, 0x0a, 0xbb, 0xe1, 0x1e, 0x12, 0xd3,
+ 0xe3, 0x12, 0xd5, 0xec, 0x21, 0xf1, 0xd2, 0x2d, 0xc1, 0xe3, 0xec, 0xf5, 0xfa,
+ 0xf9, 0xd0, 0x96, 0x2e, 0xfb, 0xcd, 0x20, 0xd6, 0xd2, 0xe5, 0x05, 0x23, 0x23,
+ 0x2d, 0xff, 0x13, 0x53, 0xec, 0xc7, 0xdb, 0x03, 0xff, 0xf4, 0x2c, 0x04, 0xe6,
+ 0xea, 0xf2, 0xee, 0xed, 0x5f, 0x12, 0xe0, 0xf4, 0x27, 0xbb, 0xf9, 0xff, 0x14,
+ 0x0e, 0xcd, 0x00, 0x16, 0xc5, 0xc5, 0x4f, 0x0a, 0xb9, 0x15, 0xfc, 0xca, 0x0f,
+ 0xf8, 0x0f, 0xde, 0xdc, 0xdd, 0x23, 0x01, 0xf8, 0xf2, 0x2e, 0xe0, 0xf9, 0xf0,
+ 0x40, 0xe5, 0xf5, 0x2b, 0x1f, 0xc1, 0x02, 0x6b, 0xf4, 0xf2, 0xde, 0xcb, 0x41,
+ 0x1a, 0x01, 0x52, 0xf3, 0xe5, 0x06, 0xc4, 0x26, 0x21, 0xb3, 0x19, 0xd5, 0xed,
+ 0x0e, 0xe8, 0xe7, 0xf4, 0xef, 0x1e, 0xdc, 0xef, 0xe8, 0x0d, 0xf9, 0x06, 0xe8,
+ 0xe9, 0xd2, 0xbd, 0xff, 0x19, 0x1c, 0x14, 0x14, 0x00, 0xfd, 0xdc, 0x04, 0xe8,
+ 0x81, 0x35, 0x0b, 0x05, 0xcb, 0x00, 0xe7, 0x14, 0xea, 0xd6, 0x0f, 0xe2, 0x03,
+ 0xbb, 0x00, 0xc3, 0xf7, 0x01, 0xf9, 0x17, 0x0c, 0x1a, 0xe0, 0xe0, 0xcc, 0x63,
+ 0xf1, 0x22, 0x17, 0xfa, 0xea, 0x2e, 0xea, 0x1b, 0xf5, 0xde, 0x0f, 0xc8, 0xe9,
+ 0xcc, 0xe3, 0xe7, 0xf1, 0x18, 0x1a, 0x01, 0xe9, 0x15, 0xf9, 0xe2, 0xd2, 0x33,
+ 0x0d, 0xed, 0x1e, 0x25, 0xf8, 0xb0, 0x13, 0x0d, 0xf2, 0xdf, 0xf3, 0xcf, 0x2e,
+ 0x24, 0xa0, 0xe6, 0xd2, 0xf7, 0xf7, 0x1f, 0x24, 0x02, 0x2e, 0xde, 0x22, 0xa4,
+ 0x15, 0xcf, 0xec, 0x05, 0xc8, 0xf9, 0x25, 0x1d, 0x2e, 0x0f, 0xee, 0xc4, 0x64,
+ 0xaf, 0xcc, 0x38, 0x07, 0x26, 0xba, 0x36, 0x95, 0xfb, 0xbc, 0xfb, 0xf5, 0xb7,
+ 0xf2, 0xc1, 0x33, 0xc8, 0x44, 0xf9, 0x08, 0xc4, 0x0a, 0xd7, 0x05, 0xd7, 0x58,
+ 0x44, 0xdc, 0xeb, 0xd8, 0xca, 0xd1, 0x18, 0x18, 0xc3, 0x3a, 0x3c, 0x1c, 0x3f,
+ 0x0b, 0x1c, 0xec, 0x38, 0xf8, 0xa7, 0xec, 0xef, 0xc5, 0xda, 0xf9, 0xe1, 0x09,
+ 0x3c, 0x1c, 0x43, 0xfe, 0xc8, 0xef, 0xe1, 0xc1, 0x03, 0xaf, 0x60, 0x2a, 0x9f,
+ 0xf6, 0x0e, 0xeb, 0x1b, 0xaf, 0x04, 0x38, 0xe6, 0x3e, 0xc1, 0xb7, 0x2a, 0x0b,
+ 0x04, 0xd0, 0xce, 0x43, 0x81, 0xf7, 0xfc, 0x7c, 0x10, 0xe3, 0xf6, 0xdc, 0xfc,
+ 0x22, 0xf5, 0x0a, 0x15, 0xdc, 0xed, 0x06, 0xe5, 0xf7, 0x1d, 0x0f, 0x20, 0x51,
+ 0xe5, 0xe1, 0x0e, 0x3b, 0xef, 0xf4, 0xf0, 0x2f, 0xdc, 0xf1, 0xe7, 0xb6, 0xda,
+ 0x27, 0xf7, 0xfc, 0xe0, 0xfb, 0x38, 0xfe, 0xb5, 0x01, 0x37, 0x32, 0xf3, 0xfe,
+ 0xc9, 0xf4, 0x18, 0xd6, 0x39, 0xcd, 0x1b, 0xb1, 0x28, 0xd0, 0x07, 0xee, 0x11,
+ 0x7f, 0x18, 0xd8, 0xe9, 0xec, 0xd3, 0xd7, 0xd4, 0xdd, 0x05, 0x1e, 0xfd, 0xfb,
+ 0x54, 0x10, 0xf8, 0x49, 0xe4, 0x08, 0xc2, 0x24, 0x27, 0xb3, 0xe1, 0xdf, 0x47,
+ 0x0f, 0x3a, 0xd4, 0x02, 0x49, 0x17, 0x1b, 0x04, 0xc7, 0x9e, 0x0a, 0x11, 0x01,
+ 0x2d, 0x2d, 0x01, 0xf6, 0xfb, 0xfb, 0xff, 0xd8, 0xd6, 0x16, 0x06, 0x42, 0xde,
+ 0xf4, 0xf3, 0xd8, 0xda, 0x2c, 0xf7, 0xf2, 0xf4, 0x08, 0xc6, 0x1e, 0x2d, 0x30,
+ 0x05, 0x45, 0x13, 0xee, 0x32, 0xe0, 0x38, 0xfe, 0xd6, 0xdf, 0xd3, 0x19, 0x1b,
+ 0xd6, 0xfe, 0xe9, 0x06, 0x18, 0x3b, 0xf7, 0xa2, 0x1a, 0x19, 0x39, 0x3c, 0x1e,
+ 0xec, 0xf1, 0xfd, 0x20, 0xec, 0xd4, 0x52, 0xe8, 0xc7, 0xe9, 0x11, 0xfe, 0xd4,
+ 0xb2, 0x3e, 0xd5, 0xc1, 0xe3, 0xf4, 0xff, 0xfc, 0x5a, 0xd2, 0x30, 0xb9, 0x01,
+ 0x0b, 0x51, 0x3c, 0xd2, 0x49, 0x50, 0x11, 0xeb, 0x12, 0x2e, 0xed, 0x0d, 0x39,
+ 0xf9, 0xf1, 0xa4, 0x58, 0x81, 0xbd, 0x36, 0x30, 0x01, 0xe0, 0xf4, 0xdb, 0xdc,
+ 0x0e, 0xd4, 0x3a, 0xfc, 0x0c, 0x10, 0x1e, 0x79, 0xb4, 0xd2, 0x25, 0x33, 0x07,
+ 0xfd, 0xfc, 0x26, 0x2b, 0x00, 0xee, 0x12, 0xd8, 0x37, 0x0c, 0x3a, 0xa4, 0xf4,
+ 0xcc, 0x22, 0xf6, 0x18, 0x06, 0xde, 0xd8, 0xf7, 0x22, 0xc0, 0x24, 0x1b, 0x2d,
+ 0x52, 0x00, 0xb8, 0x46, 0xc7, 0xdd, 0x37, 0xbb, 0x18, 0xe8, 0x1c, 0x2b, 0xc4,
+ 0xde, 0xcd, 0x3f, 0xf9, 0x5e, 0xf5, 0x16, 0xcd, 0x0a, 0x0e, 0x12, 0xfe, 0xff,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x37, 0x1e, 0x00, 0x00, 0x73,
+ 0x14, 0x00, 0x00, 0xee, 0x10, 0x00, 0x00, 0xab, 0xe6, 0xff, 0xff, 0xb5, 0x24,
+ 0x00, 0x00, 0xbc, 0x1e, 0x00, 0x00, 0x49, 0xf0, 0xff, 0xff, 0xd7, 0xfd, 0xff,
+ 0xff, 0x94, 0x13, 0x00, 0x00, 0x18, 0x06, 0x00, 0x00, 0xf8, 0xfe, 0xff, 0xff,
+ 0xe0, 0x04, 0x00, 0x00, 0x45, 0xfd, 0xff, 0xff, 0x28, 0xf7, 0xff, 0xff, 0x4a,
+ 0x16, 0x00, 0x00, 0x13, 0xe3, 0xff, 0xff, 0x3d, 0x06, 0x00, 0x00, 0xc9, 0x1a,
+ 0x00, 0x00, 0x2b, 0xf5, 0xff, 0xff, 0x5c, 0x31, 0x00, 0x00, 0x3d, 0x10, 0x00,
+ 0x00, 0xe8, 0xef, 0xff, 0xff, 0x88, 0x2e, 0x00, 0x00, 0xe6, 0x01, 0x00, 0x00,
+ 0x0f, 0xfe, 0xff, 0xff, 0x9c, 0xec, 0xff, 0xff, 0x7c, 0xf9, 0xff, 0xff, 0x49,
+ 0x03, 0x00, 0x00, 0x96, 0xf4, 0xff, 0xff, 0x87, 0xf7, 0xff, 0xff, 0x37, 0xdb,
+ 0xff, 0xff, 0x52, 0x10, 0x00, 0x00, 0xd3, 0xfb, 0xff, 0xff, 0x15, 0xf7, 0xff,
+ 0xff, 0xfa, 0xe9, 0xff, 0xff, 0x54, 0xf6, 0xff, 0xff, 0x16, 0x22, 0x00, 0x00,
+ 0xb7, 0xf1, 0xff, 0xff, 0x3a, 0xfe, 0xff, 0xff, 0x67, 0xe4, 0xff, 0xff, 0x84,
+ 0xfd, 0xff, 0xff, 0x5c, 0x09, 0x00, 0x00, 0x5d, 0xfb, 0xff, 0xff, 0x4d, 0x1c,
+ 0x00, 0x00, 0x40, 0x28, 0x00, 0x00, 0x5a, 0xe0, 0xff, 0xff, 0x6f, 0xf3, 0xff,
+ 0xff, 0xdd, 0xf8, 0xff, 0xff, 0xc4, 0x03, 0x00, 0x00, 0x71, 0x23, 0x00, 0x00,
+ 0xe8, 0x21, 0x00, 0x00, 0xce, 0xf2, 0xff, 0xff, 0x42, 0xed, 0xff, 0xff, 0xe7,
+ 0xf1, 0xff, 0xff, 0xb6, 0xf2, 0xff, 0xff, 0x66, 0xfd, 0xff, 0xff, 0xc8, 0xf0,
+ 0xff, 0xff, 0xba, 0xfd, 0xff, 0xff, 0xc6, 0xff, 0xff, 0xff, 0x2e, 0xfb, 0xff,
+ 0xff, 0x1b, 0x1b, 0x00, 0x00, 0x41, 0xe0, 0xff, 0xff, 0xfe, 0xfd, 0xff, 0xff,
+ 0x61, 0xf0, 0xff, 0xff, 0x50, 0xf0, 0xff, 0xff, 0x8a, 0xea, 0xff, 0xff, 0x04,
+ 0xe3, 0xff, 0xff, 0x5b, 0xe1, 0xff, 0xff, 0xb5, 0xeb, 0xff, 0xff, 0x90, 0xf8,
+ 0xff, 0xff, 0x89, 0xe8, 0xff, 0xff, 0x83, 0xfa, 0xff, 0xff, 0x0e, 0xef, 0xff,
+ 0xff, 0x19, 0x22, 0x00, 0x00, 0xe8, 0xf9, 0xff, 0xff, 0xfc, 0xf4, 0xff, 0xff,
+ 0x2f, 0xff, 0xff, 0xff, 0x62, 0x05, 0x00, 0x00, 0x93, 0xf9, 0xff, 0xff, 0x00,
+ 0xfc, 0xff, 0xff, 0xcb, 0x1a, 0x00, 0x00, 0x2c, 0xea, 0xff, 0xff, 0x53, 0x17,
+ 0x00, 0x00, 0xbb, 0xdc, 0xff, 0xff, 0x77, 0x01, 0x00, 0x00, 0x5f, 0xf2, 0xff,
+ 0xff, 0x95, 0x03, 0x00, 0x00, 0x29, 0x04, 0x00, 0x00, 0xfe, 0x0f, 0x00, 0x00,
+ 0x4a, 0x25, 0x00, 0x00, 0xfc, 0xfd, 0xff, 0xff, 0xfd, 0x01, 0x00, 0x00, 0x49,
+ 0xf4, 0xff, 0xff, 0xba, 0xf9, 0xff, 0xff, 0xc2, 0xf8, 0xff, 0xff, 0xf9, 0x0d,
+ 0x00, 0x00, 0x88, 0x06, 0x00, 0x00, 0xbd, 0x0d, 0x00, 0x00, 0x79, 0xec, 0xff,
+ 0xff, 0x71, 0xed, 0xff, 0xff, 0x90, 0x15, 0x00, 0x00, 0x56, 0xeb, 0xff, 0xff,
+ 0x32, 0x2c, 0x00, 0x00, 0xda, 0xfd, 0xff, 0xff, 0x87, 0xf9, 0xff, 0xff, 0x0d,
+ 0x07, 0x00, 0x00, 0xe0, 0x12, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x7c, 0xfb,
+ 0xff, 0xff, 0xbb, 0x04, 0x00, 0x00, 0xdf, 0xdf, 0xff, 0xff, 0x98, 0xeb, 0xff,
+ 0xff, 0x2d, 0xf4, 0xff, 0xff, 0xfc, 0x09, 0x00, 0x00, 0xa9, 0x17, 0x00, 0x00,
+ 0x5a, 0x04, 0x00, 0x00, 0x98, 0xef, 0xff, 0xff, 0xb4, 0xec, 0xff, 0xff, 0x80,
+ 0x02, 0x00, 0x00, 0xc4, 0xfe, 0xff, 0xff, 0x04, 0x05, 0x00, 0x00, 0xb3, 0x09,
+ 0x00, 0x00, 0xc1, 0x1e, 0x00, 0x00, 0x19, 0x12, 0x00, 0x00, 0x75, 0xf7, 0xff,
+ 0xff, 0x02, 0x03, 0x00, 0x00, 0x1b, 0x0a, 0x00, 0x00, 0x94, 0x0b, 0x00, 0x00,
+ 0x1a, 0x14, 0xfe, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x9b,
+ 0x00, 0x00, 0x00, 0xff, 0xf3, 0xff, 0xff, 0x23, 0x01, 0x00, 0x00, 0x7a, 0xfc,
+ 0xff, 0xff, 0x2a, 0xd9, 0xff, 0xff, 0x8c, 0x05, 0x00, 0x00, 0xda, 0x38, 0x00,
+ 0x00, 0xc8, 0xdb, 0xff, 0xff, 0x19, 0xe9, 0xff, 0xff, 0xc0, 0x3e, 0x00, 0x00,
+ 0x17, 0x20, 0x00, 0x00, 0x22, 0x24, 0x00, 0x00, 0x66, 0x31, 0x00, 0x00, 0x73,
+ 0x21, 0x00, 0x00, 0x22, 0xe6, 0xff, 0xff, 0xfb, 0x3b, 0x00, 0x00, 0xfa, 0xe4,
+ 0xff, 0xff, 0x63, 0xf2, 0xff, 0xff, 0xef, 0x27, 0x00, 0x00, 0x55, 0xfe, 0xff,
+ 0xff, 0x92, 0x09, 0x00, 0x00, 0xa7, 0x24, 0x00, 0x00, 0x6f, 0xc0, 0xff, 0xff,
+ 0xe4, 0xad, 0xff, 0xff, 0x64, 0x13, 0x00, 0x00, 0xe8, 0xf3, 0xff, 0xff, 0x64,
+ 0xb3, 0xff, 0xff, 0xee, 0xea, 0xff, 0xff, 0xe8, 0xde, 0xff, 0xff, 0x59, 0x2a,
+ 0x00, 0x00, 0xaa, 0x3f, 0x00, 0x00, 0xf8, 0x12, 0x00, 0x00, 0x25, 0x0f, 0x00,
+ 0x00, 0x7b, 0x15, 0x00, 0x00, 0xfe, 0x0a, 0x00, 0x00, 0x1c, 0x24, 0x00, 0x00,
+ 0xa9, 0x05, 0x00, 0x00, 0xb3, 0xef, 0xff, 0xff, 0x75, 0xfc, 0xff, 0xff, 0x5f,
+ 0xec, 0xff, 0xff, 0x35, 0x06, 0x00, 0x00, 0xe6, 0x13, 0x00, 0x00, 0x33, 0xf6,
+ 0xff, 0xff, 0x46, 0xfe, 0xff, 0xff, 0x60, 0xef, 0xff, 0xff, 0x53, 0xee, 0xff,
+ 0xff, 0x80, 0xf4, 0xff, 0xff, 0xe9, 0xf3, 0xff, 0xff, 0xe5, 0xdf, 0xff, 0xff,
+ 0x68, 0xf8, 0xff, 0xff, 0x0f, 0xfc, 0xff, 0xff, 0x01, 0x3e, 0x00, 0x00, 0xb2,
+ 0x28, 0x00, 0x00, 0x56, 0x14, 0x00, 0x00, 0x13, 0x09, 0x00, 0x00, 0x32, 0xd7,
+ 0xff, 0xff, 0x7c, 0x27, 0x00, 0x00, 0x61, 0x0d, 0x00, 0x00, 0x26, 0xd1, 0xff,
+ 0xff, 0xa2, 0x39, 0x00, 0x00, 0x69, 0xf4, 0xff, 0xff, 0x60, 0xf9, 0xff, 0xff,
+ 0x99, 0xe1, 0xff, 0xff, 0xd2, 0x02, 0x00, 0x00, 0x33, 0xe6, 0xff, 0xff, 0x1f,
+ 0x17, 0x00, 0x00, 0x71, 0x51, 0x00, 0x00, 0xed, 0x41, 0x00, 0x00, 0x9d, 0x26,
+ 0x00, 0x00, 0xa0, 0xf2, 0xff, 0xff, 0xe1, 0xf2, 0xff, 0xff, 0xee, 0xe8, 0xff,
+ 0xff, 0x0d, 0xe7, 0xff, 0xff, 0xef, 0x01, 0x00, 0x00, 0x11, 0xd0, 0xff, 0xff,
+ 0xee, 0x0e, 0x00, 0x00, 0xdc, 0xf4, 0xff, 0xff, 0xa1, 0xff, 0xff, 0xff, 0x67,
+ 0xdf, 0xff, 0xff, 0x4a, 0xd0, 0xff, 0xff, 0xcd, 0xd2, 0xff, 0xff, 0x10, 0xdd,
+ 0xff, 0xff, 0xcc, 0xdd, 0xff, 0xff, 0xd7, 0xf8, 0xff, 0xff, 0x61, 0x37, 0x00,
+ 0x00, 0xcb, 0xed, 0xff, 0xff, 0xb4, 0xe5, 0xff, 0xff, 0xc6, 0xe4, 0xff, 0xff,
+ 0x32, 0x0c, 0x00, 0x00, 0x8c, 0x3d, 0x00, 0x00, 0x03, 0x3d, 0x00, 0x00, 0x69,
+ 0xe8, 0xff, 0xff, 0xd6, 0x20, 0x00, 0x00, 0xc0, 0xd5, 0xff, 0xff, 0x56, 0xe8,
+ 0xff, 0xff, 0x41, 0x2f, 0x00, 0x00, 0xbf, 0x21, 0x00, 0x00, 0xbb, 0x02, 0x00,
+ 0x00, 0x4a, 0x71, 0x00, 0x00, 0x73, 0x18, 0x00, 0x00, 0x7e, 0x3b, 0x00, 0x00,
+ 0xc2, 0x6d, 0x00, 0x00, 0x83, 0xfc, 0xff, 0xff, 0x65, 0xfe, 0xff, 0xff, 0x67,
+ 0xfc, 0xff, 0xff, 0xcc, 0x8d, 0x00, 0x00, 0xf9, 0xd0, 0xff, 0xff, 0x2a, 0x14,
+ 0x00, 0x00, 0x33, 0xe4, 0xff, 0xff, 0x1b, 0x1e, 0x00, 0x00, 0x75, 0xf8, 0xff,
+ 0xff, 0xb9, 0xc9, 0xff, 0xff, 0x8a, 0x34, 0x00, 0x00, 0x78, 0xe6, 0xff, 0xff,
+ 0xa9, 0x27, 0x00, 0x00, 0xab, 0x04, 0x00, 0x00, 0x66, 0xe5, 0xff, 0xff, 0x70,
+ 0xa2, 0xff, 0xff, 0x23, 0xe8, 0xff, 0xff, 0x5f, 0xe5, 0xff, 0xff, 0x48, 0xe7,
+ 0xff, 0xff, 0x3e, 0x08, 0x00, 0x00, 0xa6, 0x3d, 0x00, 0x00, 0x0d, 0x11, 0x00,
+ 0x00, 0xe5, 0x2f, 0x00, 0x00, 0x3c, 0x55, 0x00, 0x00, 0xd9, 0xf8, 0xff, 0xff,
+ 0xc8, 0x00, 0x00, 0x00, 0x26, 0x16, 0xfe, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0xf1, 0xf7, 0xff, 0xff, 0x03, 0x2a, 0x00, 0x00, 0xfb, 0xd0,
+ 0xff, 0xff, 0xef, 0xe6, 0xff, 0xff, 0x63, 0x08, 0x00, 0x00, 0x6c, 0xe5, 0xff,
+ 0xff, 0x15, 0x20, 0x00, 0x00, 0x25, 0xf0, 0xff, 0xff, 0x94, 0x2a, 0x00, 0x00,
+ 0x2b, 0x29, 0x00, 0x00, 0xa3, 0xee, 0xff, 0xff, 0xb1, 0x01, 0x00, 0x00, 0xa4,
+ 0x27, 0x00, 0x00, 0xde, 0xdd, 0xff, 0xff, 0x9b, 0xfd, 0xff, 0xff, 0x54, 0xfb,
+ 0xff, 0xff, 0x8b, 0xed, 0xff, 0xff, 0x4d, 0xe5, 0xff, 0xff, 0x4b, 0xe5, 0xff,
+ 0xff, 0x0f, 0xc8, 0xff, 0xff, 0x31, 0xf6, 0xff, 0xff, 0xdc, 0xdb, 0xff, 0xff,
+ 0x92, 0xf7, 0xff, 0xff, 0xdb, 0xef, 0xff, 0xff, 0x49, 0xfe, 0xff, 0xff, 0x8d,
+ 0xf2, 0xff, 0xff, 0x56, 0xe5, 0xff, 0xff, 0xa5, 0x00, 0x00, 0x00, 0xbb, 0xf1,
+ 0xff, 0xff, 0xe3, 0x05, 0x00, 0x00, 0x51, 0xf5, 0xff, 0xff, 0x0a, 0xfb, 0xff,
+ 0xff, 0x6e, 0xe7, 0xff, 0xff, 0x42, 0x1c, 0x00, 0x00, 0x89, 0xeb, 0xff, 0xff,
+ 0x71, 0xf0, 0xff, 0xff, 0x53, 0xeb, 0xff, 0xff, 0x24, 0x05, 0x00, 0x00, 0x0b,
+ 0x20, 0x00, 0x00, 0x28, 0xfe, 0xff, 0xff, 0xd0, 0x2d, 0x00, 0x00, 0x49, 0x07,
+ 0x00, 0x00, 0xef, 0x24, 0x00, 0x00, 0xf1, 0xfb, 0xff, 0xff, 0x44, 0x0e, 0x00,
+ 0x00, 0x9c, 0x22, 0x00, 0x00, 0x5f, 0xe6, 0xff, 0xff, 0x39, 0xe5, 0xff, 0xff,
+ 0xc1, 0xff, 0xff, 0xff, 0xa8, 0xfa, 0xff, 0xff, 0x90, 0xe7, 0xff, 0xff, 0xdd,
+ 0xf9, 0xff, 0xff, 0x81, 0xee, 0xff, 0xff, 0xa5, 0x26, 0x00, 0x00, 0xe4, 0xeb,
+ 0xff, 0xff, 0xb7, 0x23, 0x00, 0x00, 0xcf, 0xe4, 0xff, 0xff, 0x39, 0xf6, 0xff,
+ 0xff, 0x07, 0xfd, 0xff, 0xff, 0x14, 0xfe, 0xff, 0xff, 0xf5, 0x1e, 0x00, 0x00,
+ 0xde, 0xf7, 0xff, 0xff, 0xad, 0xef, 0xff, 0xff, 0x2a, 0xe7, 0xff, 0xff, 0x5b,
+ 0xec, 0xff, 0xff, 0xba, 0xfe, 0xff, 0xff, 0x63, 0xee, 0xff, 0xff, 0x92, 0xff,
+ 0xff, 0xff, 0xd5, 0xf8, 0xff, 0xff, 0xda, 0xdb, 0xff, 0xff, 0x79, 0x05, 0x00,
+ 0x00, 0xed, 0xf2, 0xff, 0xff, 0x8c, 0xe2, 0xff, 0xff, 0x5c, 0xee, 0xff, 0xff,
+ 0x07, 0xe5, 0xff, 0xff, 0xee, 0x01, 0x00, 0x00, 0xe2, 0xe6, 0xff, 0xff, 0xf7,
+ 0xed, 0xff, 0xff, 0x8f, 0x2a, 0x00, 0x00, 0x2e, 0x28, 0x00, 0x00, 0xc1, 0x26,
+ 0x00, 0x00, 0x9f, 0xe5, 0xff, 0xff, 0x6a, 0x03, 0x00, 0x00, 0xc1, 0xef, 0xff,
+ 0xff, 0x37, 0xf8, 0xff, 0xff, 0x47, 0xf0, 0xff, 0xff, 0xfa, 0x22, 0x00, 0x00,
+ 0xb5, 0xf5, 0xff, 0xff, 0xd0, 0xfd, 0xff, 0xff, 0x11, 0xef, 0xff, 0xff, 0x1f,
+ 0x2e, 0x00, 0x00, 0x65, 0xe9, 0xff, 0xff, 0x08, 0x1d, 0x00, 0x00, 0x77, 0xdb,
+ 0xff, 0xff, 0x36, 0xf9, 0xff, 0xff, 0xab, 0xe2, 0xff, 0xff, 0xfb, 0x16, 0x00,
+ 0x00, 0x53, 0xf5, 0xff, 0xff, 0x96, 0x2c, 0x00, 0x00, 0x10, 0xe1, 0xff, 0xff,
+ 0xb4, 0xf8, 0xff, 0xff, 0x20, 0x1a, 0x00, 0x00, 0x98, 0xe4, 0xff, 0xff, 0x9b,
+ 0x27, 0x00, 0x00, 0x23, 0x2c, 0x00, 0x00, 0x07, 0x2e, 0x00, 0x00, 0xd2, 0xfb,
+ 0xff, 0xff, 0x15, 0xec, 0xff, 0xff, 0x52, 0x20, 0x00, 0x00, 0x9a, 0xf0, 0xff,
+ 0xff, 0xcc, 0x2c, 0x00, 0x00, 0x58, 0xee, 0xff, 0xff, 0x79, 0x25, 0x00, 0x00,
+ 0xaf, 0xea, 0xff, 0xff, 0x90, 0xf4, 0xff, 0xff, 0x4c, 0x21, 0x00, 0x00, 0x3d,
+ 0xf0, 0xff, 0xff, 0x56, 0xf9, 0xff, 0xff, 0x36, 0xef, 0xff, 0xff, 0x77, 0xea,
+ 0xff, 0xff, 0x77, 0xfc, 0xff, 0xff, 0xf0, 0xd8, 0xff, 0xff, 0x18, 0x29, 0x00,
+ 0x00, 0x9d, 0x0c, 0x00, 0x00, 0x0f, 0x26, 0x00, 0x00, 0xa1, 0x30, 0x00, 0x00,
+ 0x74, 0xea, 0xff, 0xff, 0x47, 0xf1, 0xff, 0xff, 0x32, 0x18, 0xfe, 0xff, 0x04,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0xdb, 0x02, 0x20, 0x9a, 0x25, 0x14,
+ 0x19, 0x7f, 0xc5, 0x6c, 0xfe, 0xd7, 0x27, 0xd0, 0x05, 0xef, 0x21, 0xdb, 0x5c,
+ 0xc6, 0x0f, 0x08, 0xf8, 0x01, 0x2a, 0xff, 0xcb, 0xf5, 0xe1, 0x28, 0xa5, 0x94,
+ 0x45, 0xfd, 0xdd, 0xf7, 0xd6, 0xfb, 0x18, 0xda, 0x0a, 0xf8, 0xec, 0x23, 0xe2,
+ 0x28, 0xd7, 0x3a, 0x11, 0x15, 0x15, 0x0d, 0xe2, 0xb6, 0x0a, 0xf1, 0x9f, 0xab,
+ 0xf4, 0xed, 0x18, 0x0e, 0x0f, 0xef, 0xf1, 0xea, 0xeb, 0x11, 0xf5, 0xbd, 0xfd,
+ 0xf0, 0x52, 0x1f, 0xdd, 0xe3, 0xcd, 0xc3, 0x10, 0xc0, 0xdd, 0xe6, 0x01, 0x33,
+ 0xfa, 0x1b, 0x6a, 0xb7, 0x1a, 0xeb, 0x43, 0x0e, 0x32, 0x07, 0xed, 0xe0, 0xdd,
+ 0x2c, 0x2c, 0xe9, 0xc9, 0x17, 0xfa, 0x1e, 0x4b, 0x7f, 0x28, 0xef, 0x51, 0xed,
+ 0x9d, 0x57, 0x6a, 0xe6, 0xcb, 0x1d, 0xba, 0x20, 0xb6, 0x7c, 0x1c, 0x06, 0xf2,
+ 0xb2, 0xfb, 0x2b, 0x13, 0x1a, 0xcd, 0x03, 0xce, 0xda, 0xb9, 0x27, 0x38, 0x05,
+ 0xe9, 0x33, 0x2b, 0xf9, 0x4e, 0x32, 0xbb, 0xe8, 0x15, 0xae, 0x31, 0x18, 0xce,
+ 0x47, 0x1e, 0xf7, 0x3b, 0xe2, 0x02, 0x23, 0xcf, 0x08, 0xf4, 0xe4, 0xf7, 0x23,
+ 0xe9, 0x2f, 0xbb, 0xde, 0xe9, 0xe4, 0xf7, 0x1b, 0x01, 0x19, 0xf5, 0x58, 0x42,
+ 0x06, 0x04, 0x12, 0x08, 0x7f, 0x0d, 0x2c, 0x06, 0x0e, 0x06, 0xee, 0xe2, 0x20,
+ 0xb7, 0xe0, 0xf4, 0x1e, 0xf6, 0xc9, 0x1b, 0x10, 0xf6, 0x64, 0xe0, 0xcc, 0xdc,
+ 0x14, 0x2d, 0x30, 0xfd, 0xc3, 0x21, 0x21, 0xcd, 0xc6, 0xf3, 0x10, 0x12, 0xec,
+ 0x01, 0xdc, 0xe9, 0xde, 0x23, 0xe0, 0x1a, 0x23, 0xfa, 0x24, 0xe7, 0x1b, 0x0f,
+ 0x11, 0x0f, 0x37, 0xdc, 0xee, 0x11, 0x0a, 0x16, 0x73, 0xf1, 0xcf, 0xd4, 0x20,
+ 0xf6, 0x4d, 0x1d, 0x0d, 0x25, 0x09, 0x0e, 0xc4, 0xf6, 0xd0, 0xe2, 0x34, 0xe4,
+ 0xf1, 0xf9, 0xe1, 0x42, 0xf6, 0xef, 0x0c, 0x67, 0x35, 0xf9, 0xe8, 0xc7, 0x03,
+ 0x23, 0x1e, 0x20, 0x3b, 0x3e, 0xd8, 0xf5, 0x47, 0xcb, 0xb1, 0xac, 0xcf, 0xe4,
+ 0xfa, 0x14, 0x07, 0x07, 0x76, 0xc3, 0xeb, 0x66, 0x1f, 0x52, 0xe5, 0xbb, 0xc5,
+ 0x59, 0x1a, 0xd8, 0xf7, 0x02, 0xdd, 0x2c, 0x4d, 0x96, 0x44, 0x00, 0x1a, 0x2e,
+ 0xd8, 0x08, 0x44, 0x1b, 0xfd, 0xfb, 0x39, 0xc1, 0xf1, 0xde, 0x4c, 0xed, 0x56,
+ 0x19, 0x48, 0xc3, 0xeb, 0xec, 0x08, 0xb8, 0x0d, 0x16, 0xdf, 0xdd, 0xce, 0x0b,
+ 0x59, 0xde, 0x99, 0xe6, 0x0c, 0xac, 0xd0, 0x43, 0x1d, 0xb2, 0xd9, 0x03, 0xd9,
+ 0xfc, 0xde, 0xf7, 0xa9, 0xf9, 0x33, 0xf6, 0xde, 0x1d, 0xd8, 0x3a, 0xe8, 0x43,
+ 0xaa, 0x8f, 0xd6, 0xb5, 0x11, 0x4f, 0x24, 0x15, 0xa2, 0xb2, 0xf6, 0xce, 0xfa,
+ 0xc4, 0x0b, 0x1c, 0x84, 0x65, 0xf9, 0xb1, 0x15, 0x0c, 0xf7, 0xc8, 0xca, 0x81,
+ 0xf0, 0xe2, 0x4c, 0xba, 0x0e, 0x23, 0xc0, 0x36, 0x11, 0xe9, 0x11, 0xf9, 0xb4,
+ 0xe8, 0xe8, 0xf5, 0x30, 0xb6, 0x0d, 0xc1, 0x08, 0xb6, 0xb3, 0x23, 0x9e, 0xf3,
+ 0xe2, 0xb0, 0x00, 0x37, 0xf5, 0xf9, 0x0b, 0xb1, 0x22, 0xc0, 0xed, 0x01, 0x23,
+ 0xeb, 0xec, 0x24, 0xee, 0xe2, 0x1d, 0xfb, 0xe0, 0xf9, 0xc5, 0x2a, 0xf9, 0x81,
+ 0x19, 0xb9, 0xf7, 0x4b, 0x28, 0x10, 0xe1, 0x34, 0x02, 0x1f, 0xd2, 0x05, 0xf9,
+ 0xdf, 0xf6, 0x27, 0x06, 0x16, 0xfe, 0xcf, 0xf6, 0xff, 0xfc, 0xce, 0xe8, 0xe8,
+ 0xf4, 0xd9, 0x13, 0xb4, 0x1b, 0x08, 0x0a, 0x40, 0xf4, 0x27, 0x0a, 0x21, 0x1e,
+ 0xf4, 0xdc, 0x17, 0x50, 0x0f, 0xe5, 0x36, 0xf6, 0xe8, 0xe0, 0x41, 0x22, 0xe9,
+ 0x24, 0x2c, 0x40, 0x18, 0xe5, 0xfa, 0xf2, 0x16, 0xf6, 0x34, 0x09, 0xfa, 0x46,
+ 0x01, 0xf2, 0x9d, 0x2b, 0x38, 0x2e, 0x1f, 0xd4, 0x25, 0x17, 0xf8, 0x05, 0x39,
+ 0xb2, 0xf3, 0x2b, 0xd6, 0xfe, 0xc6, 0xb4, 0xf0, 0x0f, 0x90, 0x45, 0xc0, 0xa4,
+ 0x24, 0x44, 0x13, 0x08, 0x14, 0x03, 0xa6, 0xca, 0x98, 0xa5, 0x0f, 0x47, 0xd4,
+ 0xef, 0x36, 0x0d, 0x9a, 0x6f, 0xbb, 0xf7, 0x0a, 0x1b, 0xd6, 0xe4, 0x07, 0x00,
+ 0x02, 0x27, 0xb3, 0xff, 0x6c, 0x1b, 0xd9, 0x00, 0x2e, 0xa9, 0x7f, 0xdc, 0x28,
+ 0x9c, 0x97, 0xc2, 0xdb, 0x30, 0xeb, 0x1c, 0x2d, 0x3b, 0x09, 0x15, 0xe9, 0x39,
+ 0x41, 0x63, 0xe4, 0x9a, 0x3f, 0x08, 0xf0, 0x59, 0x00, 0xf8, 0x38, 0x17, 0xdc,
+ 0x24, 0x31, 0xb7, 0x58, 0xe9, 0x00, 0xf7, 0xf5, 0x2a, 0x28, 0x01, 0xf5, 0xf2,
+ 0xf4, 0x0d, 0x49, 0xfc, 0x12, 0xd4, 0x64, 0xae, 0x35, 0x34, 0xb7, 0x2d, 0xf8,
+ 0x03, 0xd2, 0x06, 0x23, 0xcb, 0x09, 0xd9, 0xee, 0x54, 0xb5, 0x0a, 0xc4, 0x66,
+ 0x14, 0xc7, 0x17, 0xd7, 0xde, 0x23, 0xd8, 0x11, 0x16, 0x22, 0xfc, 0xff, 0xce,
+ 0x3f, 0x10, 0xf5, 0xf9, 0x3e, 0x13, 0xf8, 0xfc, 0xdb, 0xe3, 0x55, 0x09, 0xec,
+ 0xdc, 0x11, 0x04, 0x15, 0x13, 0x19, 0xfc, 0x7f, 0xef, 0x02, 0x0a, 0xee, 0xed,
+ 0x28, 0xe4, 0x13, 0x2d, 0x08, 0x0b, 0x21, 0xfd, 0xe4, 0x09, 0xc6, 0xc1, 0x34,
+ 0x04, 0x04, 0x0a, 0xe5, 0xfa, 0xd1, 0x22, 0x04, 0x0f, 0x03, 0xdc, 0xf9, 0x2c,
+ 0xe1, 0xd1, 0xfa, 0xdc, 0xed, 0x2a, 0x65, 0x06, 0x2e, 0xf9, 0x2f, 0x02, 0x9b,
+ 0xeb, 0x2f, 0xe8, 0x02, 0xe3, 0x0c, 0x10, 0x10, 0xe9, 0x02, 0xfa, 0xfe, 0x13,
+ 0x12, 0xd4, 0xcb, 0xd4, 0xfd, 0xe8, 0xe1, 0xf2, 0x25, 0x05, 0xc8, 0xec, 0xf7,
+ 0xce, 0x01, 0x3c, 0xda, 0xfb, 0xcf, 0xfd, 0xf0, 0x44, 0xf9, 0x11, 0x0a, 0xf3,
+ 0x04, 0x26, 0xf8, 0xdf, 0xed, 0x0e, 0xdd, 0x1c, 0x02, 0xc9, 0xd8, 0xfb, 0xdb,
+ 0x0d, 0xf5, 0x10, 0xd5, 0xf5, 0xea, 0x3a, 0xea, 0x03, 0xfd, 0x17, 0xf5, 0x04,
+ 0x16, 0xff, 0xf8, 0x09, 0xe2, 0xe9, 0x4c, 0xf8, 0x4f, 0xd5, 0x27, 0xd4, 0x4a,
+ 0x20, 0x40, 0x7f, 0xeb, 0xcf, 0xe4, 0x26, 0xfd, 0x18, 0x08, 0xce, 0x0c, 0x13,
+ 0x08, 0xda, 0x12, 0x24, 0xe2, 0x25, 0x3f, 0xeb, 0x08, 0x24, 0xb4, 0x1e, 0x03,
+ 0xf1, 0xcc, 0x00, 0xbe, 0xb6, 0x0d, 0x21, 0x10, 0x1a, 0xf5, 0xf7, 0x05, 0xfa,
+ 0x03, 0x14, 0x00, 0xe7, 0x3c, 0x28, 0xe8, 0x58, 0x1e, 0xbf, 0x12, 0x62, 0xcb,
+ 0x7a, 0xfb, 0x1e, 0xf5, 0x1d, 0xf1, 0xe7, 0xf7, 0xd8, 0x06, 0xcc, 0xda, 0xfc,
+ 0x19, 0xc5, 0xf6, 0xdd, 0x10, 0xd5, 0x24, 0xfd, 0x26, 0xf1, 0xbd, 0xbf, 0x40,
+ 0xf6, 0x41, 0x3e, 0x1f, 0x51, 0xdc, 0xbe, 0x39, 0x19, 0x20, 0xe0, 0xbe, 0x04,
+ 0x1e, 0x08, 0xfb, 0xf6, 0x26, 0x0b, 0xc2, 0xc9, 0x13, 0x2c, 0x34, 0x37, 0xfe,
+ 0xf2, 0x1a, 0xe6, 0xe8, 0x29, 0x1a, 0x18, 0x15, 0xe7, 0x75, 0xd2, 0xdd, 0x13,
+ 0xde, 0x0b, 0xec, 0x24, 0xd8, 0xd9, 0xd2, 0x06, 0x2a, 0x10, 0xbe, 0xc6, 0xf9,
+ 0x19, 0x22, 0x57, 0xb9, 0xef, 0x1a, 0xd2, 0xe7, 0xfe, 0x07, 0x22, 0x0c, 0x2c,
+ 0x26, 0x81, 0xb0, 0xcb, 0xf6, 0x34, 0x15, 0x43, 0xf2, 0x0a, 0x42, 0xdf, 0xdc,
+ 0xc8, 0xe7, 0xd2, 0xef, 0xf9, 0x17, 0xee, 0x0e, 0xe1, 0x19, 0x0c, 0xb0, 0x36,
+ 0x0e, 0x24, 0xee, 0x37, 0x24, 0x09, 0xf8, 0xb4, 0x0c, 0x38, 0xfc, 0xf5, 0x4c,
+ 0xc0, 0x27, 0xff, 0x19, 0xf1, 0x23, 0x0a, 0xba, 0x4a, 0x54, 0x46, 0xae, 0x00,
+ 0xcf, 0xe4, 0xd7, 0xd6, 0xc6, 0x05, 0x13, 0xbb, 0x08, 0xed, 0xd0, 0x05, 0x5f,
+ 0xcd, 0xf2, 0xdf, 0xff, 0xca, 0xc1, 0xc6, 0xfc, 0x0f, 0x7c, 0xd2, 0x17, 0x40,
+ 0x00, 0xed, 0x98, 0xcd, 0x23, 0xbd, 0xf2, 0xce, 0xf8, 0x07, 0x35, 0x4f, 0xed,
+ 0x02, 0xee, 0x14, 0x46, 0x25, 0xe9, 0xe7, 0x90, 0x38, 0x24, 0xec, 0x09, 0xa8,
+ 0xf5, 0x59, 0x15, 0x28, 0xf7, 0x05, 0xee, 0x0e, 0x1b, 0xe5, 0x64, 0xfe, 0x36,
+ 0xd4, 0x2f, 0x72, 0xe8, 0x37, 0xda, 0xd7, 0x15, 0xc1, 0x92, 0x19, 0x01, 0x21,
+ 0xa9, 0xb1, 0xdf, 0x46, 0x1c, 0x2e, 0x08, 0xd1, 0x48, 0xe8, 0xe3, 0x37, 0x5d,
+ 0x0d, 0x3c, 0xf6, 0xa3, 0xeb, 0xa5, 0xce, 0x07, 0xf5, 0xae, 0x1c, 0x0f, 0x5d,
+ 0x5b, 0x2d, 0xa3, 0x24, 0x4e, 0x50, 0x10, 0xe1, 0x1d, 0x2a, 0x26, 0x18, 0x4b,
+ 0xdc, 0x32, 0xcd, 0x20, 0xf9, 0xe0, 0xfe, 0x9a, 0xe3, 0xe2, 0xb5, 0x3f, 0xfe,
+ 0x35, 0xe6, 0xa9, 0x37, 0xb6, 0xf0, 0x40, 0x0a, 0xc4, 0xd7, 0xf0, 0x72, 0x03,
+ 0xe8, 0xeb, 0x11, 0xf3, 0xf1, 0xcd, 0x1c, 0xe2, 0x29, 0x1b, 0xe1, 0x21, 0x1b,
+ 0xe4, 0x25, 0x09, 0xc7, 0x37, 0xbf, 0x81, 0x33, 0x86, 0x0d, 0xcc, 0xe7, 0xce,
+ 0x32, 0xf7, 0x11, 0x03, 0x1c, 0xed, 0xe8, 0xea, 0x42, 0x96, 0x00, 0x3f, 0x07,
+ 0xf2, 0xfd, 0x19, 0x2a, 0xc7, 0x0a, 0x0e, 0x62, 0xb3, 0x1a, 0xab, 0x0f, 0xb2,
+ 0x28, 0x19, 0xf3, 0xdb, 0x1c, 0x26, 0xf0, 0xf5, 0x2a, 0x19, 0xad, 0xcc, 0xcf,
+ 0x26, 0x3a, 0x34, 0xc1, 0xff, 0x07, 0x1d, 0xec, 0x21, 0xcc, 0x1a, 0xbf, 0x11,
+ 0xcb, 0x0c, 0x2d, 0x3a, 0x0a, 0xcd, 0x10, 0x4c, 0x12, 0xfa, 0xd0, 0xf9, 0xe6,
+ 0x1b, 0xb1, 0xe5, 0xd8, 0x2b, 0x13, 0xf5, 0xe4, 0x22, 0x21, 0x01, 0x45, 0xf9,
+ 0x1d, 0xfb, 0x25, 0xf8, 0x35, 0x4d, 0xca, 0x19, 0x30, 0xcf, 0xee, 0x02, 0xe3,
+ 0xf1, 0x1b, 0x0d, 0xe2, 0x23, 0x3f, 0x26, 0x34, 0x00, 0x5a, 0x0a, 0x7f, 0xed,
+ 0x39, 0x1b, 0x09, 0xdd, 0x0e, 0xca, 0xbf, 0xc1, 0x1b, 0x54, 0x3c, 0x38, 0xb0,
+ 0xf8, 0x32, 0x24, 0x24, 0x0a, 0xe7, 0x25, 0x5c, 0xca, 0x33, 0x18, 0xdc, 0x3c,
+ 0xc9, 0xfa, 0x06, 0x47, 0x08, 0xfc, 0x17, 0x07, 0x10, 0xfe, 0xbe, 0xe1, 0xe5,
+ 0x31, 0x49, 0xdb, 0xdc, 0xab, 0x2b, 0x04, 0xe2, 0xe2, 0xc6, 0x40, 0xff, 0x02,
+ 0xdc, 0xe2, 0xe8, 0x21, 0x07, 0xf0, 0xf7, 0xe8, 0x32, 0xf0, 0x46, 0x36, 0x0a,
+ 0xe6, 0xd4, 0x04, 0xd2, 0xc1, 0x52, 0xe1, 0x13, 0x17, 0x0c, 0xca, 0x2d, 0xe3,
+ 0x28, 0xdc, 0xc8, 0x06, 0xf0, 0xb5, 0x0c, 0xc9, 0x47, 0x43, 0xde, 0x2b, 0x3f,
+ 0x23, 0x37, 0xb9, 0x09, 0x1a, 0x25, 0x57, 0x74, 0xec, 0xbe, 0x09, 0xe7, 0x54,
+ 0xd0, 0xf1, 0x19, 0x07, 0x3e, 0x81, 0xca, 0x21, 0xe4, 0x07, 0x10, 0x1a, 0xca,
+ 0x2c, 0xe9, 0xc3, 0xce, 0x4c, 0xf8, 0x1b, 0x33, 0x12, 0x26, 0x12, 0x1b, 0x09,
+ 0xdd, 0xe3, 0xef, 0x00, 0xdc, 0xed, 0xbb, 0xef, 0x13, 0xf9, 0x07, 0xf0, 0x14,
+ 0xf8, 0x1a, 0xf2, 0xf0, 0x32, 0x13, 0xf1, 0x16, 0x01, 0x25, 0xef, 0x9a, 0xc3,
+ 0xfa, 0x02, 0x03, 0x0e, 0xe4, 0xb7, 0x11, 0x10, 0xd3, 0xec, 0x11, 0x3c, 0x30,
+ 0xe5, 0xe3, 0x37, 0x0a, 0xd3, 0xf0, 0xfb, 0xf8, 0x20, 0x06, 0x14, 0xfc, 0x1d,
+ 0x18, 0x24, 0xfa, 0x3e, 0x6c, 0x0c, 0xce, 0xe4, 0x36, 0x38, 0xb6, 0x1b, 0xe4,
+ 0xf8, 0x23, 0xe8, 0x00, 0xe8, 0x06, 0x0a, 0xcf, 0xeb, 0xfb, 0xde, 0xf7, 0x44,
+ 0xef, 0xde, 0xee, 0x98, 0x11, 0xfe, 0x35, 0xef, 0xde, 0x23, 0x07, 0xbf, 0x35,
+ 0x0e, 0x02, 0xfc, 0x7f, 0xd5, 0x09, 0xd7, 0x1e, 0xf6, 0x09, 0xcb, 0xef, 0x09,
+ 0x24, 0xf0, 0xec, 0xf3, 0xa7, 0xea, 0x22, 0x26, 0x1b, 0x39, 0x13, 0x4d, 0xf7,
+ 0xc4, 0xd7, 0xe7, 0xf4, 0x07, 0xf6, 0xf8, 0x08, 0xe3, 0xd6, 0x1c, 0x60, 0xb3,
+ 0xbc, 0x0c, 0xf5, 0xd0, 0x05, 0x31, 0xf0, 0x60, 0xbf, 0x00, 0xbc, 0xcd, 0x4b,
+ 0xbc, 0xdb, 0x0d, 0xf4, 0xec, 0xf2, 0x26, 0xc9, 0x1c, 0x25, 0xae, 0x5f, 0x4f,
+ 0xf6, 0xea, 0xd3, 0xb9, 0x96, 0xe6, 0x3a, 0x2f, 0xff, 0x05, 0x2d, 0xa4, 0x12,
+ 0x56, 0x5b, 0xec, 0xcb, 0xd1, 0x29, 0x9a, 0xb9, 0x27, 0x02, 0x22, 0x3c, 0x0f,
+ 0x1f, 0xec, 0x9f, 0xfc, 0x97, 0xf5, 0x0c, 0xfb, 0x10, 0x03, 0xf0, 0x27, 0xb6,
+ 0x67, 0xe9, 0xd9, 0xa3, 0xbd, 0x3a, 0xe2, 0xe1, 0xa0, 0xcb, 0x40, 0x2f, 0x3f,
+ 0x01, 0xf1, 0xfe, 0x81, 0xf8, 0x4e, 0x8b, 0x06, 0x09, 0x2f, 0x46, 0x12, 0xc5,
+ 0x15, 0xd0, 0x14, 0x8f, 0x1a, 0xea, 0x1d, 0x14, 0x3b, 0x0c, 0x74, 0x1c, 0x87,
+ 0x31, 0xd4, 0xd6, 0x39, 0xac, 0xc2, 0x32, 0x3d, 0x04, 0xcd, 0xd2, 0x16, 0x6d,
+ 0xc3, 0x3d, 0xf7, 0x02, 0xe4, 0x02, 0xd6, 0xac, 0x2a, 0x66, 0x02, 0xa3, 0xb8,
+ 0xec, 0xe3, 0xea, 0x4a, 0xeb, 0xec, 0x2c, 0xf8, 0x42, 0xec, 0x2b, 0xe0, 0x2f,
+ 0x30, 0xfb, 0x1d, 0xe3, 0xed, 0x2a, 0x5a, 0xd7, 0x5d, 0x12, 0x9f, 0x06, 0xdd,
+ 0x09, 0xce, 0x09, 0xc6, 0x09, 0xf1, 0xfd, 0xe5, 0x1e, 0xe4, 0xe6, 0xab, 0x17,
+ 0x97, 0xe4, 0xcb, 0xdc, 0x32, 0xd6, 0xc4, 0xb6, 0x0e, 0xfe, 0x38, 0x2d, 0xc1,
+ 0x03, 0xe1, 0x0f, 0xf8, 0xaf, 0xf2, 0x02, 0xba, 0xfc, 0x16, 0xaf, 0xc1, 0x26,
+ 0x0b, 0xe7, 0x3e, 0x35, 0x0a, 0x59, 0x0e, 0x7a, 0xc4, 0x55, 0xf8, 0xe2, 0xce,
+ 0x7c, 0xc7, 0xb9, 0xff, 0xcb, 0xf1, 0xed, 0xf5, 0x06, 0xe3, 0xa7, 0x81, 0xec,
+ 0xcb, 0x04, 0xc0, 0x16, 0xf6, 0x3d, 0xcc, 0x2d, 0xe6, 0xe5, 0x09, 0x12, 0x58,
+ 0x24, 0x21, 0x17, 0xc7, 0xeb, 0xe8, 0xcb, 0x08, 0xd8, 0x09, 0x83, 0xdc, 0xb5,
+ 0x16, 0xf5, 0xf2, 0xc8, 0xa6, 0x2a, 0xe1, 0xf7, 0x37, 0xf0, 0x2a, 0xe9, 0xf5,
+ 0x19, 0xe8, 0x19, 0xc8, 0x2c, 0x13, 0xdb, 0x57, 0x2b, 0xd1, 0x49, 0xff, 0x0d,
+ 0xff, 0x0e, 0x15, 0xd9, 0x14, 0x1d, 0x05, 0x24, 0xb6, 0x6d, 0xed, 0x03, 0xaf,
+ 0x3d, 0x2f, 0x9b, 0xfe, 0x00, 0xed, 0xf8, 0xd9, 0x3d, 0xfc, 0x2c, 0x1f, 0xdc,
+ 0xa4, 0xcc, 0x1e, 0xd0, 0x32, 0x10, 0xbb, 0x09, 0xff, 0xea, 0x94, 0xf3, 0x1b,
+ 0xf7, 0xeb, 0xea, 0xfa, 0x30, 0xc8, 0xdf, 0xdb, 0x08, 0xea, 0x18, 0xd1, 0x41,
+ 0x30, 0xf6, 0xf5, 0xd3, 0xdf, 0xad, 0x1b, 0xb0, 0x0b, 0x14, 0xf9, 0xf6, 0xf3,
+ 0x11, 0xe7, 0xed, 0xfb, 0x35, 0x1c, 0xcf, 0x1e, 0xb9, 0xfd, 0x4b, 0xe4, 0xd8,
+ 0x23, 0x12, 0x05, 0x0d, 0xf5, 0x43, 0x08, 0x11, 0xed, 0x03, 0xde, 0xe7, 0x34,
+ 0xfe, 0xc9, 0xfa, 0xdb, 0x2a, 0x16, 0x28, 0x87, 0x1f, 0x09, 0xe2, 0x25, 0x27,
+ 0xdd, 0x4d, 0x1a, 0xff, 0xd9, 0x4f, 0x1e, 0x36, 0xe3, 0xde, 0x81, 0x4f, 0x53,
+ 0x43, 0xf3, 0x3b, 0x03, 0xeb, 0xc4, 0xe7, 0x21, 0x4b, 0x02, 0x17, 0x19, 0xff,
+ 0x04, 0xdb, 0xbb, 0x0d, 0xf0, 0xe3, 0x74, 0xc0, 0x15, 0xef, 0x06, 0x0a, 0xfb,
+ 0xfd, 0x0b, 0xc9, 0xd5, 0x28, 0x09, 0xc9, 0x2d, 0x19, 0x01, 0x27, 0x2f, 0x1d,
+ 0x7b, 0xde, 0xe4, 0xd9, 0xfa, 0x09, 0x2d, 0xed, 0xfd, 0xe2, 0x3d, 0x02, 0xde,
+ 0xaf, 0x02, 0xe5, 0x2f, 0xca, 0x66, 0xc4, 0xcd, 0x0d, 0x06, 0x06, 0xa5, 0x2b,
+ 0xc9, 0xe6, 0x02, 0x1f, 0xbc, 0x35, 0x04, 0xf7, 0xd8, 0x2c, 0xec, 0x20, 0x1c,
+ 0x0f, 0x13, 0x75, 0xed, 0x1a, 0x21, 0x23, 0x38, 0x22, 0x12, 0x08, 0xed, 0xc3,
+ 0xe7, 0xff, 0x32, 0xa1, 0x18, 0x46, 0xf0, 0x4c, 0xe8, 0x08, 0x7a, 0xe0, 0xe2,
+ 0x15, 0x81, 0xa2, 0x0f, 0xdb, 0xac, 0x1f, 0xf5, 0x14, 0x4a, 0x24, 0x3c, 0x05,
+ 0xe6, 0x5e, 0x3f, 0x05, 0x36, 0xef, 0xb3, 0x0d, 0x2d, 0xe4, 0xb3, 0xe7, 0x02,
+ 0x29, 0xf4, 0xf1, 0x6b, 0xe0, 0x02, 0x3f, 0xe3, 0x3e, 0x33, 0x21, 0xef, 0x4e,
+ 0xfd, 0xe9, 0x4e, 0x30, 0xe1, 0x09, 0xa6, 0xf5, 0xf3, 0xc2, 0x04, 0x9c, 0xe2,
+ 0xd9, 0x0d, 0xdf, 0x06, 0x9c, 0xbd, 0xf7, 0xd6, 0x0b, 0xf8, 0xda, 0xf3, 0x26,
+ 0xf9, 0x15, 0xeb, 0x2c, 0xc1, 0xa8, 0xcf, 0xed, 0x20, 0x92, 0x21, 0xde, 0xd0,
+ 0xf4, 0xc5, 0x28, 0x0c, 0x0f, 0xe1, 0x3b, 0xf9, 0xd7, 0xe4, 0x04, 0xe9, 0x84,
+ 0x00, 0x3a, 0xeb, 0xea, 0x04, 0x0d, 0xb2, 0xd7, 0xfb, 0x2f, 0xf8, 0x06, 0xeb,
+ 0xf2, 0xf9, 0x06, 0xf1, 0xc2, 0x0e, 0xf7, 0x00, 0x89, 0xd3, 0x62, 0xda, 0xed,
+ 0x19, 0x1a, 0xf5, 0x07, 0x15, 0xe6, 0xf5, 0x7f, 0xeb, 0x36, 0xe2, 0x5b, 0x16,
+ 0xdc, 0x0a, 0x00, 0xcc, 0xfd, 0xf5, 0x01, 0xe9, 0x02, 0xc7, 0x25, 0x40, 0xac,
+ 0xd0, 0x4a, 0xf5, 0xeb, 0xf8, 0xfb, 0x8c, 0x3d, 0x1f, 0x0b, 0x11, 0x2f, 0x3d,
+ 0x21, 0xb2, 0xfc, 0x36, 0xfa, 0x2f, 0x20, 0x0d, 0x26, 0x1d, 0xec, 0xca, 0x12,
+ 0x0d, 0x3d, 0x11, 0x2c, 0x9c, 0x1c, 0x3b, 0x25, 0x15, 0x16, 0xd4, 0x3b, 0xce,
+ 0x63, 0x7f, 0x50, 0xe2, 0x18, 0xdc, 0xbd, 0xd5, 0xe8, 0x42, 0xdd, 0x7c, 0xd6,
+ 0xce, 0x0c, 0x16, 0xf6, 0x05, 0xf7, 0x19, 0xde, 0xf8, 0xff, 0xe8, 0xf4, 0xef,
+ 0xd7, 0xee, 0xee, 0x02, 0x6a, 0x49, 0x57, 0xd2, 0x09, 0xdc, 0xb6, 0x4d, 0x00,
+ 0xfd, 0x4b, 0xf5, 0x3d, 0x01, 0x35, 0xf5, 0x1e, 0x10, 0xef, 0x35, 0x05, 0x71,
+ 0x23, 0x1e, 0x03, 0xfe, 0xd3, 0xe2, 0x48, 0xfa, 0x1a, 0xc5, 0x48, 0xda, 0x44,
+ 0xe2, 0xc3, 0x08, 0xc0, 0x16, 0xd9, 0xaa, 0x36, 0xdd, 0x1b, 0xe2, 0x40, 0xf5,
+ 0x09, 0x3c, 0x88, 0x1c, 0x3e, 0x15, 0x1f, 0xd2, 0x04, 0xde, 0xfd, 0xc9, 0xe4,
+ 0x29, 0x02, 0x0d, 0xd0, 0x1f, 0x20, 0xff, 0x7a, 0xd9, 0xd2, 0x0f, 0xed, 0x05,
+ 0x43, 0x38, 0x18, 0xd1, 0xf6, 0x0e, 0x18, 0x0c, 0xb4, 0xef, 0xc0, 0xfd, 0xdb,
+ 0x41, 0x33, 0xa3, 0x2a, 0x10, 0x57, 0x52, 0x27, 0x54, 0x06, 0x0b, 0xe6, 0xf9,
+ 0xf6, 0xff, 0xef, 0xa6, 0x20, 0xbc, 0x34, 0xda, 0xfa, 0x20, 0xcf, 0x1a, 0x02,
+ 0xd0, 0xc4, 0xc3, 0xdd, 0x47, 0xe0, 0xb6, 0xbd, 0xe5, 0x48, 0x1a, 0x38, 0xa8,
+ 0x26, 0x14, 0x25, 0x08, 0xdc, 0xc8, 0xa5, 0xbe, 0x71, 0xc6, 0x81, 0x13, 0xb3,
+ 0xee, 0xcf, 0x19, 0xe4, 0x07, 0x08, 0x19, 0xae, 0xa0, 0x92, 0xab, 0x55, 0xc0,
+ 0xc6, 0xf3, 0xbf, 0x0d, 0xe3, 0x6b, 0xb3, 0xe4, 0xfa, 0x82, 0x58, 0x3b, 0xd9,
+ 0xb7, 0xef, 0xbb, 0x22, 0xdb, 0x1c, 0xc1, 0x14, 0xec, 0x08, 0xc7, 0x29, 0xca,
+ 0x71, 0x8c, 0xcf, 0xef, 0x69, 0xde, 0x4a, 0x68, 0xeb, 0x13, 0x07, 0xf9, 0x19,
+ 0x0a, 0xa4, 0x11, 0xf8, 0x1b, 0x28, 0x25, 0xea, 0x68, 0xea, 0xb8, 0xd2, 0x12,
+ 0xc4, 0xff, 0x27, 0xa4, 0xf1, 0xf6, 0x26, 0x4f, 0x43, 0xf8, 0xca, 0xf1, 0xf9,
+ 0xcf, 0xe7, 0xec, 0xe5, 0xfd, 0xc9, 0xdf, 0x41, 0x04, 0xe5, 0xef, 0xf8, 0xa7,
+ 0xf0, 0x00, 0xfd, 0x1c, 0xd0, 0xa7, 0xcc, 0x05, 0xc5, 0x03, 0x18, 0x15, 0xf5,
+ 0x03, 0xc2, 0x7f, 0xc2, 0x25, 0xf6, 0xcf, 0x1a, 0xe5, 0xf4, 0xda, 0x2b, 0x11,
+ 0x09, 0x21, 0xa8, 0x09, 0xde, 0x54, 0xcf, 0xc5, 0x05, 0x48, 0xf9, 0x06, 0x36,
+ 0xc5, 0xde, 0xdb, 0xc2, 0xd2, 0x3e, 0x17, 0x35, 0xee, 0x00, 0x17, 0xe7, 0xf8,
+ 0xf5, 0x1c, 0x03, 0x48, 0x2a, 0xff, 0x35, 0x32, 0x16, 0xfb, 0x1c, 0xf8, 0xea,
+ 0x07, 0xdf, 0x02, 0x47, 0x33, 0x16, 0x02, 0x11, 0xda, 0xef, 0x3c, 0x04, 0x1b,
+ 0xd0, 0xb7, 0x03, 0xf9, 0x04, 0x57, 0x45, 0xc8, 0xae, 0xf1, 0x1b, 0xfd, 0x40,
+ 0xf3, 0x24, 0xae, 0x11, 0xd4, 0x1a, 0x31, 0x16, 0x0f, 0x2a, 0x9d, 0xef, 0x26,
+ 0x0d, 0x07, 0x10, 0xfd, 0xc0, 0x4e, 0xfd, 0xe4, 0xb0, 0x28, 0xd3, 0xc0, 0xdc,
+ 0xf1, 0xed, 0xe9, 0x2d, 0x04, 0xd2, 0x13, 0x65, 0xfa, 0xd8, 0xe8, 0x30, 0x7f,
+ 0xdd, 0xf9, 0xfb, 0x63, 0x11, 0xcd, 0x1e, 0xf1, 0xc2, 0xc9, 0x3e, 0x8f, 0xf0,
+ 0x32, 0xd4, 0xf4, 0xaf, 0x03, 0xe7, 0x71, 0x20, 0x32, 0xe9, 0xb6, 0xfd, 0xed,
+ 0x42, 0x01, 0xb2, 0xef, 0xc2, 0xf8, 0xe8, 0xe4, 0xc9, 0x1a, 0xc1, 0x27, 0x6d,
+ 0xe9, 0x17, 0x24, 0xd0, 0x03, 0x24, 0xca, 0xd8, 0xd3, 0xf1, 0x0a, 0x09, 0xd9,
+ 0xfa, 0x0b, 0xe1, 0x20, 0xce, 0xe9, 0x29, 0x3a, 0xf7, 0xe9, 0xe8, 0xec, 0xfd,
+ 0x16, 0xf9, 0xee, 0xf1, 0xf4, 0xee, 0xd3, 0xda, 0x9f, 0xe2, 0xbb, 0xf4, 0x06,
+ 0x12, 0xf5, 0x04, 0xf4, 0x1a, 0xda, 0x4c, 0x25, 0x1a, 0xdd, 0x0d, 0x18, 0xc1,
+ 0xc4, 0x26, 0x1a, 0xdb, 0x13, 0xf9, 0x21, 0xf8, 0xf5, 0x51, 0xd3, 0x2f, 0xf2,
+ 0x4b, 0xb7, 0xfb, 0x2a, 0x1e, 0x1c, 0xdd, 0xea, 0x00, 0xce, 0x33, 0x2e, 0x02,
+ 0xde, 0x22, 0xf0, 0xe4, 0x0b, 0x2c, 0xf2, 0x7f, 0xaa, 0x20, 0x1b, 0x0a, 0x2d,
+ 0xe4, 0xfe, 0x36, 0xea, 0xe8, 0x1f, 0x1e, 0xe2, 0x3c, 0x0e, 0xcc, 0xf4, 0x05,
+ 0x2a, 0xd9, 0x11, 0x03, 0xda, 0xf9, 0xf9, 0x24, 0x00, 0x18, 0x10, 0x22, 0x2d,
+ 0xcf, 0x16, 0x24, 0x0f, 0x22, 0x2a, 0x02, 0xee, 0xe3, 0xd6, 0xf5, 0x5b, 0xf5,
+ 0x44, 0x09, 0xc3, 0xb4, 0xf0, 0x36, 0xe2, 0xb4, 0x0a, 0xea, 0x9b, 0xbf, 0xea,
+ 0x07, 0xd5, 0x53, 0xf4, 0x2a, 0x06, 0x1c, 0x1c, 0xe5, 0xf2, 0xdc, 0x0b, 0x0d,
+ 0x5d, 0x03, 0xf7, 0xcb, 0xe6, 0x16, 0xee, 0xe1, 0x17, 0x07, 0xb8, 0xe5, 0xe5,
+ 0x01, 0xeb, 0xe2, 0xec, 0xd8, 0x1a, 0xe7, 0x47, 0xd0, 0x11, 0x04, 0xf7, 0x29,
+ 0xe1, 0xfb, 0x0f, 0x45, 0xc7, 0x19, 0x36, 0xd1, 0xc3, 0xed, 0x2f, 0xd3, 0xee,
+ 0xbc, 0x00, 0xf0, 0xe6, 0xc6, 0x09, 0xe1, 0x17, 0x01, 0x2d, 0x10, 0xb4, 0x39,
+ 0x04, 0xc0, 0xda, 0x18, 0xde, 0xc9, 0xbf, 0x7f, 0x28, 0x05, 0x0e, 0x02, 0x35,
+ 0xfc, 0xf4, 0x39, 0xfa, 0xea, 0x22, 0x2e, 0xee, 0x29, 0xf8, 0x3e, 0x18, 0xe7,
+ 0x36, 0xe0, 0xf4, 0xbd, 0x0c, 0x33, 0x04, 0x0e, 0xfd, 0x39, 0x16, 0x0f, 0x13,
+ 0xc8, 0xc6, 0x13, 0xd6, 0x21, 0x4e, 0x0d, 0x0c, 0x0f, 0x35, 0x2d, 0x2e, 0x11,
+ 0x3c, 0x4c, 0x2d, 0x9a, 0x05, 0x10, 0x1f, 0xf2, 0xb7, 0xc2, 0xca, 0xe5, 0x02,
+ 0xc9, 0x19, 0xec, 0x34, 0x02, 0xd5, 0x4b, 0x15, 0xe9, 0x6e, 0xea, 0xda, 0xed,
+ 0x04, 0xd7, 0x20, 0xfa, 0xdd, 0xde, 0x17, 0x01, 0x13, 0x05, 0x18, 0x25, 0xc9,
+ 0x43, 0x19, 0x09, 0xbe, 0xe6, 0xfd, 0xda, 0xc4, 0xf1, 0xe8, 0xb7, 0x21, 0x5e,
+ 0x2b, 0x02, 0x34, 0x1c, 0x0c, 0x39, 0xb0, 0xff, 0xe3, 0x05, 0x00, 0x60, 0xf0,
+ 0x16, 0xf8, 0x0e, 0x2a, 0x9f, 0x31, 0x19, 0xc8, 0xcd, 0xd6, 0xd9, 0x28, 0x23,
+ 0xdb, 0x4d, 0x4e, 0xd8, 0xeb, 0xec, 0xc7, 0xcf, 0x37, 0xbc, 0x51, 0x64, 0x79,
+ 0xf5, 0x38, 0xfa, 0xeb, 0xf8, 0xd1, 0x5a, 0xc9, 0x00, 0x50, 0xe8, 0xe9, 0x0c,
+ 0xec, 0x30, 0x54, 0xdf, 0xfb, 0x5e, 0x17, 0xe9, 0x6d, 0x25, 0x53, 0xe2, 0xba,
+ 0xfb, 0xb0, 0xee, 0xda, 0xfb, 0x33, 0xaa, 0xcc, 0xe9, 0xd1, 0xeb, 0x0a, 0xbf,
+ 0x10, 0xd1, 0xdd, 0x08, 0x14, 0x12, 0x91, 0x3c, 0xd3, 0x14, 0xc2, 0xf4, 0x69,
+ 0xc9, 0xeb, 0x22, 0xfd, 0xfd, 0xe6, 0x19, 0x52, 0xfa, 0xd5, 0xe8, 0x06, 0xe2,
+ 0x04, 0xce, 0x81, 0x07, 0xa0, 0x37, 0x24, 0x1a, 0x03, 0xce, 0x18, 0x21, 0x44,
+ 0x1d, 0x37, 0xc1, 0xce, 0x3e, 0x38, 0xc7, 0xb7, 0xe6, 0xd5, 0x1e, 0xa5, 0xf1,
+ 0x5b, 0xdf, 0xf0, 0x50, 0x4e, 0xf6, 0x0a, 0x2d, 0x09, 0xec, 0xf6, 0x01, 0xab,
+ 0xde, 0xb5, 0x1f, 0xfc, 0xfc, 0x98, 0x05, 0x32, 0xcf, 0xd3, 0xd0, 0xcd, 0xc7,
+ 0x02, 0xc6, 0x01, 0x17, 0x05, 0x01, 0xe6, 0xd9, 0x10, 0xc5, 0x15, 0x17, 0x72,
+ 0x15, 0xe8, 0xdb, 0x41, 0x43, 0xff, 0xcf, 0xc9, 0xbf, 0xce, 0xf2, 0x08, 0x1c,
+ 0xd8, 0xf9, 0xc8, 0x2a, 0xc3, 0xf5, 0x26, 0xd1, 0x0a, 0xae, 0x55, 0x38, 0x6c,
+ 0xbc, 0xd6, 0xf7, 0x83, 0x0b, 0x51, 0x69, 0xed, 0x6e, 0x50, 0xb2, 0x28, 0xbf,
+ 0x5c, 0x1d, 0x37, 0x1c, 0x85, 0xec, 0x18, 0xf0, 0xba, 0x65, 0xdd, 0x05, 0xfd,
+ 0x18, 0xd8, 0x28, 0xdc, 0x26, 0xce, 0xce, 0xe6, 0x7f, 0x29, 0xbc, 0x51, 0x2d,
+ 0xff, 0x04, 0xbd, 0x01, 0xa9, 0xea, 0x24, 0xca, 0x0b, 0xf7, 0xe7, 0x19, 0x5b,
+ 0x1f, 0x12, 0x0a, 0xb5, 0xde, 0x20, 0x30, 0x39, 0xe4, 0xec, 0xb2, 0x30, 0xd3,
+ 0xc2, 0xc9, 0xb0, 0x03, 0xe6, 0x30, 0xe0, 0xed, 0x43, 0xd2, 0xd8, 0xfd, 0xfd,
+ 0xdd, 0x14, 0xfc, 0xfc, 0xf9, 0xee, 0x16, 0x15, 0x28, 0x07, 0x16, 0x1e, 0x19,
+ 0x40, 0x19, 0x28, 0xf9, 0x0c, 0xeb, 0x09, 0x1e, 0xf5, 0xec, 0xdd, 0x33, 0x15,
+ 0xf8, 0xe9, 0x0b, 0xd9, 0x16, 0x02, 0x00, 0x24, 0xdc, 0xe8, 0xda, 0x31, 0x08,
+ 0xe5, 0x0f, 0x1d, 0xf0, 0xf3, 0xd9, 0xe5, 0x0b, 0x0a, 0x16, 0x02, 0x0c, 0x9b,
+ 0xff, 0xf5, 0xf6, 0xe6, 0x31, 0x06, 0xf4, 0xf9, 0xca, 0xe0, 0x1e, 0xfc, 0xec,
+ 0x27, 0x3e, 0xd1, 0xd1, 0xf0, 0xda, 0x24, 0x1d, 0xd7, 0x15, 0xf5, 0xf2, 0xfe,
+ 0xfd, 0xdf, 0xf1, 0xdc, 0xc5, 0xec, 0xf4, 0x02, 0xe7, 0xea, 0x04, 0xda, 0x1c,
+ 0x14, 0x0a, 0xf9, 0x27, 0x13, 0xee, 0xf2, 0x12, 0x03, 0x12, 0x05, 0x7f, 0x0a,
+ 0xf4, 0xf9, 0xe0, 0x10, 0x09, 0x20, 0xf3, 0x14, 0xe5, 0x0c, 0x17, 0x15, 0xf5,
+ 0xd8, 0xf1, 0x38, 0x0e, 0x00, 0xf0, 0x34, 0x06, 0x15, 0x6c, 0x55, 0x16, 0xfa,
+ 0xeb, 0xd9, 0xb6, 0x28, 0x2b, 0xb9, 0x1b, 0x32, 0xd1, 0x50, 0x45, 0x81, 0x05,
+ 0x09, 0x02, 0xb6, 0xfb, 0xa8, 0x19, 0x62, 0xe4, 0xe0, 0x0f, 0xef, 0x4e, 0x37,
+ 0xd0, 0xeb, 0xd5, 0xb0, 0xa6, 0x54, 0xb7, 0xf8, 0xe9, 0xfd, 0x17, 0xdd, 0x3a,
+ 0x0c, 0x5a, 0xf2, 0x44, 0x01, 0xe6, 0xa6, 0x9d, 0x12, 0xb3, 0x20, 0xec, 0xb8,
+ 0xbb, 0x02, 0xdf, 0x0b, 0x16, 0x09, 0x02, 0x38, 0x3f, 0x04, 0x28, 0x49, 0x39,
+ 0x1c, 0x05, 0xff, 0xe1, 0x22, 0xcd, 0x1d, 0x09, 0xea, 0xca, 0xc2, 0xf2, 0xf8,
+ 0x1e, 0xf9, 0x93, 0x13, 0xe4, 0x46, 0x26, 0x08, 0xac, 0xe0, 0xcb, 0x96, 0x09,
+ 0x01, 0xff, 0xae, 0x10, 0xf8, 0x46, 0x22, 0x2b, 0xda, 0x1a, 0xd7, 0xef, 0xf2,
+ 0xc0, 0x33, 0xed, 0xa4, 0x20, 0xf8, 0xd9, 0x08, 0xc8, 0xec, 0x65, 0x13, 0x1c,
+ 0x05, 0x1c, 0xdc, 0x1b, 0xe5, 0x0b, 0x0d, 0x02, 0x0e, 0xca, 0x2d, 0xff, 0x24,
+ 0x00, 0x15, 0xfc, 0xea, 0x00, 0xf4, 0xfc, 0xfa, 0xe0, 0x04, 0x3c, 0xe1, 0x0c,
+ 0xfa, 0x42, 0xf9, 0xf5, 0x25, 0xeb, 0xb5, 0xfa, 0x0c, 0x32, 0x35, 0xcf, 0xf2,
+ 0xcc, 0xf5, 0x12, 0x1f, 0x0d, 0x1b, 0xc6, 0x25, 0xdb, 0xe6, 0xfb, 0xff, 0xcc,
+ 0xd9, 0xe3, 0xe9, 0xd4, 0xcf, 0x3e, 0xd5, 0x2c, 0x1c, 0x12, 0xfa, 0x39, 0xde,
+ 0xe1, 0xd3, 0x0d, 0xe9, 0x7f, 0x0b, 0xd5, 0x0e, 0xfc, 0xdf, 0xcc, 0xef, 0xf9,
+ 0x5a, 0xe2, 0xfc, 0xd9, 0xe2, 0xce, 0xe6, 0xf4, 0xa5, 0x12, 0x32, 0x13, 0xf4,
+ 0x29, 0x04, 0xec, 0xfd, 0x24, 0x1b, 0x01, 0xd8, 0x25, 0x18, 0x1e, 0xec, 0xef,
+ 0xa7, 0x20, 0x10, 0xe5, 0xf7, 0x02, 0xc0, 0xe0, 0x33, 0x10, 0x20, 0x2e, 0x3e,
+ 0xf6, 0x0d, 0xf3, 0x2f, 0xe4, 0xe3, 0x13, 0x2f, 0xcf, 0xd3, 0x29, 0xf1, 0xf6,
+ 0x02, 0x3b, 0xf7, 0xf5, 0xf8, 0xfa, 0xea, 0x0e, 0x46, 0x0e, 0xfe, 0xed, 0xe1,
+ 0x0a, 0x09, 0xea, 0x11, 0x16, 0xe3, 0xd6, 0xfc, 0x7f, 0xf6, 0xce, 0x26, 0xe7,
+ 0xef, 0xf4, 0xec, 0xff, 0xf0, 0xfe, 0x25, 0x28, 0x28, 0xdc, 0xd4, 0x15, 0x04,
+ 0xdd, 0x40, 0xce, 0x0e, 0xf8, 0x03, 0x20, 0x0a, 0xf9, 0x01, 0x15, 0x2d, 0xeb,
+ 0x08, 0x03, 0xd9, 0xe4, 0xc7, 0xfb, 0x24, 0x20, 0x14, 0xe4, 0x13, 0xfd, 0xd9,
+ 0xfb, 0xf7, 0x20, 0xd8, 0xdf, 0x11, 0xe7, 0x0e, 0xe1, 0xf6, 0xbe, 0xfd, 0xe8,
+ 0xef, 0x0b, 0xee, 0x02, 0x1b, 0x11, 0x06, 0x05, 0xf5, 0x14, 0x23, 0xf5, 0xf2,
+ 0xe9, 0x13, 0xca, 0x2c, 0x1c, 0xeb, 0xc8, 0x02, 0x04, 0xf3, 0xcd, 0x19, 0x25,
+ 0xbf, 0xe4, 0xed, 0x07, 0x0b, 0xea, 0x1a, 0x09, 0xec, 0xef, 0x1c, 0xd7, 0x0b,
+ 0x0a, 0xef, 0x22, 0x19, 0x02, 0x1c, 0xd2, 0xf6, 0xd1, 0xed, 0x4c, 0xfb, 0xf7,
+ 0x28, 0x20, 0x2e, 0x0b, 0xea, 0x03, 0x2b, 0x05, 0xde, 0xed, 0x00, 0x18, 0x73,
+ 0x26, 0xc4, 0x1e, 0x0e, 0xd5, 0xe2, 0x05, 0x15, 0xf8, 0x40, 0xd7, 0xe9, 0x45,
+ 0xdb, 0x01, 0xcf, 0x06, 0xfd, 0x09, 0xff, 0x0a, 0x17, 0xec, 0x81, 0xae, 0x0e,
+ 0xfd, 0x04, 0x20, 0xff, 0xe8, 0x7e, 0x25, 0x4d, 0xc3, 0xe9, 0x12, 0xfa, 0x16,
+ 0x12, 0x07, 0x0d, 0x42, 0x98, 0x00, 0x05, 0xdd, 0x00, 0x33, 0x0d, 0xe0, 0xfe,
+ 0xe8, 0xab, 0xa1, 0xf4, 0x10, 0x25, 0xd4, 0xf3, 0x1b, 0x03, 0x1a, 0x07, 0xff,
+ 0xc8, 0xf5, 0xf1, 0xf5, 0x8d, 0xea, 0xe2, 0x12, 0xc5, 0xe9, 0x5f, 0x2c, 0xd0,
+ 0x0c, 0xf2, 0x23, 0x2f, 0xf7, 0x0f, 0x21, 0x13, 0x1a, 0x15, 0x5b, 0x11, 0xf8,
+ 0xf3, 0xfa, 0xf7, 0xf8, 0x06, 0xf2, 0x36, 0xcc, 0x3e, 0x2c, 0xff, 0x12, 0x0c,
+ 0xf4, 0xfa, 0xf3, 0xfd, 0xf6, 0xdd, 0x06, 0x22, 0x0a, 0xa4, 0xdf, 0x1f, 0x28,
+ 0xf8, 0x42, 0xdf, 0xe9, 0x36, 0x19, 0xc6, 0x14, 0x27, 0xc6, 0x00, 0xeb, 0x04,
+ 0x0f, 0x2e, 0x41, 0xc0, 0xea, 0xab, 0xf4, 0xc9, 0x0e, 0xf5, 0xbb, 0x7d, 0xdd,
+ 0xdf, 0x48, 0x0e, 0x12, 0xe3, 0x2c, 0x4e, 0xe6, 0xd6, 0xfc, 0xd8, 0x44, 0xfe,
+ 0x17, 0x53, 0x0b, 0x0b, 0xfa, 0x2c, 0x37, 0x38, 0xea, 0x7f, 0x9d, 0x21, 0x24,
+ 0x13, 0x9f, 0x0b, 0xe0, 0xff, 0xc7, 0xbf, 0x21, 0xe3, 0x05, 0x1f, 0xff, 0xeb,
+ 0x8e, 0x2c, 0x30, 0xb6, 0xe5, 0x0c, 0xf7, 0x3f, 0x49, 0x07, 0x0d, 0xd2, 0xf1,
+ 0xd4, 0xfb, 0x0d, 0x0e, 0x06, 0x1b, 0xb5, 0x21, 0xcd, 0xfa, 0xe7, 0x00, 0x2a,
+ 0xea, 0x50, 0x40, 0x10, 0x36, 0x04, 0x40, 0xea, 0x28, 0x08, 0xf7, 0xfd, 0x08,
+ 0x18, 0xec, 0x07, 0xdb, 0x04, 0x2b, 0x48, 0x45, 0xd9, 0xc9, 0xf3, 0xf7, 0x03,
+ 0xdc, 0xc5, 0xf1, 0x1c, 0x37, 0xde, 0x02, 0x13, 0xf7, 0xa7, 0xc1, 0xfc, 0x07,
+ 0x20, 0xe0, 0xdb, 0x00, 0x02, 0x0b, 0xf0, 0x08, 0x3b, 0x11, 0x00, 0x03, 0x01,
+ 0x2d, 0x39, 0x0a, 0x3a, 0x07, 0x33, 0xfb, 0xd5, 0xca, 0xd3, 0x05, 0xfa, 0xe9,
+ 0x05, 0x1e, 0xea, 0xce, 0x20, 0x1a, 0xca, 0xbf, 0xed, 0xf8, 0xfb, 0xda, 0xfb,
+ 0x35, 0xef, 0x08, 0x22, 0xc5, 0x15, 0xe5, 0x34, 0xcf, 0x24, 0x0c, 0xe5, 0x08,
+ 0x8f, 0xf3, 0xec, 0xfb, 0xdb, 0x4b, 0xf3, 0xa4, 0x2b, 0xf6, 0xde, 0xfe, 0x07,
+ 0xcd, 0x26, 0x2d, 0x62, 0xf6, 0xd6, 0xde, 0xf7, 0x28, 0xe1, 0x7f, 0x39, 0xf1,
+ 0xe6, 0x08, 0x13, 0x08, 0x37, 0xf4, 0xf5, 0x06, 0x09, 0xf4, 0x4a, 0x1e, 0xed,
+ 0x3b, 0xd5, 0xf9, 0xec, 0x0e, 0xda, 0x17, 0xf8, 0x39, 0xf3, 0xff, 0xf7, 0xf2,
+ 0x38, 0x1a, 0xe2, 0x27, 0xb6, 0x03, 0x05, 0x0e, 0x2d, 0x17, 0x06, 0x28, 0x59,
+ 0xe1, 0xce, 0x53, 0x19, 0x1d, 0x5e, 0xc6, 0x01, 0xe4, 0x27, 0xfb, 0xf8, 0xeb,
+ 0xc9, 0xfc, 0xfa, 0x04, 0x02, 0xfe, 0x13, 0xef, 0x81, 0xf8, 0xed, 0x60, 0xf7,
+ 0x0d, 0x18, 0xb6, 0x05, 0x24, 0x1f, 0xfa, 0x19, 0xd9, 0xef, 0xcf, 0x17, 0xc8,
+ 0xeb, 0xd0, 0xf8, 0x03, 0x08, 0x17, 0x15, 0x17, 0xfa, 0x09, 0xdd, 0xc7, 0xc8,
+ 0x3d, 0x1f, 0x46, 0xda, 0xe7, 0x38, 0xdd, 0xf7, 0x0c, 0xcf, 0x02, 0xed, 0x01,
+ 0xc9, 0x02, 0x0a, 0x3f, 0xf2, 0xff, 0x19, 0xe2, 0x0f, 0x12, 0x09, 0xe1, 0xee,
+ 0x25, 0x1a, 0xae, 0xed, 0xf4, 0xe3, 0xea, 0x43, 0x06, 0xd7, 0x25, 0xe1, 0x45,
+ 0x23, 0x45, 0xee, 0x06, 0x02, 0x2e, 0x38, 0x24, 0xfb, 0xf8, 0x30, 0x23, 0xe3,
+ 0xeb, 0xf8, 0x28, 0x11, 0xe0, 0xf0, 0x07, 0xf7, 0x06, 0xf7, 0xe1, 0xf8, 0x00,
+ 0x52, 0x47, 0xeb, 0xf8, 0x0c, 0x0e, 0xfe, 0xd4, 0x17, 0xd4, 0xfb, 0x4b, 0xdc,
+ 0x1f, 0xf4, 0x05, 0x18, 0x0f, 0x9f, 0x16, 0xf2, 0xac, 0x81, 0xaf, 0x56, 0x57,
+ 0x11, 0xd1, 0x0b, 0x01, 0x3b, 0x0f, 0x1b, 0xe3, 0xe2, 0x16, 0x0b, 0xe0, 0xe4,
+ 0x0b, 0x32, 0x05, 0xd7, 0xe4, 0xdd, 0x03, 0x05, 0xf2, 0x01, 0xfd, 0xfe, 0x5a,
+ 0x1a, 0xd2, 0x10, 0x14, 0x25, 0x14, 0xe7, 0xce, 0xe4, 0x1f, 0x40, 0x07, 0xe0,
+ 0xb5, 0xd0, 0xfb, 0x0d, 0x22, 0x10, 0x42, 0x05, 0xdd, 0xaf, 0x9b, 0x3a, 0x07,
+ 0xff, 0xf4, 0x1a, 0xff, 0x1c, 0xc2, 0xd1, 0x83, 0x0c, 0xe5, 0x14, 0xf2, 0xb1,
+ 0x3a, 0x4a, 0xee, 0x0d, 0xeb, 0xd4, 0xb5, 0xcf, 0x1e, 0xd3, 0xdd, 0x0d, 0xe5,
+ 0xfa, 0x5c, 0x96, 0xf6, 0xe8, 0x40, 0xf1, 0x16, 0x00, 0x33, 0xd9, 0x03, 0xd6,
+ 0xee, 0x2b, 0x0c, 0x4d, 0x78, 0xea, 0xe0, 0xe9, 0xdc, 0x6d, 0x5c, 0xfc, 0xac,
+ 0xf9, 0x0b, 0x0b, 0x8f, 0x25, 0xaf, 0xdf, 0xf3, 0x3b, 0x0c, 0xd5, 0xcd, 0xfe,
+ 0x1f, 0xa3, 0x8d, 0xd7, 0x2c, 0x11, 0x03, 0x69, 0xd8, 0xf0, 0x03, 0x2a, 0x13,
+ 0x17, 0x29, 0xfb, 0xfa, 0xfc, 0xee, 0xc9, 0x12, 0xed, 0xe3, 0x1e, 0x7f, 0xf2,
+ 0x5d, 0xe5, 0x4f, 0xee, 0xb7, 0xce, 0x07, 0x0f, 0xea, 0x04, 0xfc, 0x08, 0x49,
+ 0x54, 0x06, 0x0d, 0xf4, 0x38, 0xef, 0x11, 0x1c, 0x26, 0xe8, 0x13, 0xae, 0xf6,
+ 0x10, 0xfa, 0x36, 0xfe, 0xbb, 0x2b, 0x26, 0xef, 0x00, 0xfb, 0xf8, 0xf8, 0x12,
+ 0x0b, 0x02, 0xff, 0xe3, 0x32, 0x03, 0xef, 0x45, 0xc6, 0xf5, 0xff, 0xf5, 0x0c,
+ 0x1c, 0xc3, 0x01, 0xdb, 0x05, 0xe4, 0xf4, 0x25, 0x13, 0x43, 0x0c, 0x03, 0x03,
+ 0x0c, 0xf2, 0x0d, 0x24, 0xdc, 0xcf, 0xf1, 0x14, 0x03, 0x0d, 0x18, 0x16, 0xbe,
+ 0x42, 0x21, 0xe9, 0x18, 0xce, 0xc8, 0x26, 0x12, 0x1e, 0xcb, 0xfe, 0xf0, 0xf4,
+ 0x05, 0xb8, 0x41, 0x02, 0xf7, 0xe9, 0xe1, 0xe7, 0xf8, 0xe9, 0x54, 0x0e, 0xbe,
+ 0x4c, 0xfe, 0xe2, 0x0b, 0xf0, 0xd9, 0xdf, 0x1d, 0x15, 0xe2, 0xfc, 0x5b, 0xf3,
+ 0xde, 0x35, 0x3e, 0xf9, 0x34, 0xf7, 0xee, 0xb3, 0x81, 0xc1, 0xc8, 0xef, 0x60,
+ 0xda, 0x34, 0xc9, 0xf5, 0xed, 0x18, 0xcf, 0xcc, 0xed, 0x0d, 0xf0, 0x2d, 0x34,
+ 0xbf, 0x0a, 0x00, 0x11, 0x14, 0xe4, 0x49, 0xea, 0x52, 0x23, 0xd7, 0x1d, 0xd2,
+ 0x03, 0x25, 0x2f, 0x2e, 0x57, 0x1f, 0xdf, 0xf7, 0x03, 0xda, 0xc4, 0xce, 0x33,
+ 0xe2, 0xc8, 0xf7, 0xcc, 0x1c, 0x06, 0x28, 0x22, 0x9f, 0xe4, 0xb1, 0x10, 0xea,
+ 0x1f, 0xef, 0x12, 0xd7, 0x05, 0xd9, 0x28, 0x52, 0x08, 0x06, 0x15, 0x42, 0x1d,
+ 0x12, 0x2f, 0x37, 0xee, 0xbb, 0xe1, 0xf1, 0xc0, 0x1d, 0xe6, 0xce, 0x0e, 0xb7,
+ 0x1d, 0x2f, 0xd4, 0x2a, 0xf5, 0xe6, 0xd9, 0xe2, 0x41, 0xd1, 0xe9, 0xa0, 0xe5,
+ 0xb2, 0xc8, 0x40, 0x85, 0xe5, 0x6d, 0x5d, 0x03, 0xd8, 0xf8, 0x01, 0xd7, 0x12,
+ 0xce, 0xdf, 0x0f, 0xbf, 0x28, 0x1d, 0xd1, 0xdd, 0x18, 0xc2, 0xcc, 0xe9, 0xaf,
+ 0xf4, 0x54, 0xee, 0xed, 0x10, 0x14, 0xe2, 0x2c, 0xb9, 0x03, 0xd5, 0xdb, 0xe3,
+ 0x70, 0xdb, 0xbc, 0x06, 0xc1, 0xe9, 0xf1, 0xf4, 0xd0, 0x21, 0x4c, 0x04, 0xed,
+ 0x1d, 0xe5, 0x1d, 0xda, 0xf7, 0x10, 0x14, 0xb4, 0xea, 0x51, 0xd8, 0xf4, 0x48,
+ 0x35, 0xdf, 0xf0, 0x04, 0x46, 0x0b, 0xff, 0x0d, 0x1d, 0x36, 0xbe, 0x19, 0xbd,
+ 0xfb, 0x4b, 0xed, 0x2d, 0xf4, 0x0d, 0xc1, 0xff, 0x17, 0xed, 0x2e, 0xdb, 0x3c,
+ 0xfe, 0x07, 0x47, 0x53, 0x2b, 0xf5, 0xc8, 0x2a, 0x1c, 0x21, 0x0c, 0x1d, 0xcd,
+ 0xe7, 0xdc, 0xf4, 0xf6, 0xf7, 0x2f, 0xd1, 0xd4, 0xf5, 0x1b, 0x18, 0xc4, 0x4d,
+ 0x17, 0xaf, 0xd5, 0xe0, 0xfc, 0xab, 0xb4, 0x17, 0x0c, 0x5a, 0x4f, 0xe7, 0x08,
+ 0x01, 0x7f, 0x0b, 0xcb, 0xeb, 0xff, 0xba, 0xf3, 0xe3, 0xf1, 0xed, 0xe7, 0xfe,
+ 0xf6, 0x10, 0x1c, 0x2c, 0x4b, 0x00, 0xab, 0xee, 0xf8, 0x07, 0xc9, 0x1c, 0x2e,
+ 0x0d, 0xd1, 0x18, 0x68, 0xb9, 0xca, 0xfa, 0xbb, 0xf9, 0xe7, 0x1d, 0x44, 0xd0,
+ 0x01, 0xf4, 0xfb, 0x01, 0xf3, 0xae, 0xb3, 0xb8, 0x04, 0x01, 0xf7, 0xfc, 0x13,
+ 0x0c, 0x14, 0x1c, 0x4f, 0xef, 0xd9, 0xfc, 0xdb, 0x00, 0x1a, 0xf3, 0xbc, 0xdd,
+ 0x09, 0x0a, 0xf5, 0x0b, 0xd8, 0xe8, 0xbf, 0xf0, 0xce, 0xda, 0x10, 0x01, 0xe6,
+ 0x0d, 0xe3, 0x25, 0xfd, 0x33, 0x41, 0xf2, 0xff, 0xce, 0xd8, 0x5f, 0x29, 0x25,
+ 0x33, 0xe3, 0xfd, 0xf0, 0xe9, 0x3f, 0xdd, 0x20, 0x31, 0x0e, 0x2f, 0x25, 0xf6,
+ 0xf8, 0xf1, 0xf9, 0x44, 0xc5, 0xd7, 0x22, 0xf7, 0x08, 0x81, 0xee, 0xfc, 0x30,
+ 0xf7, 0xdc, 0x17, 0xea, 0x21, 0x19, 0xaf, 0xf2, 0x4d, 0xbf, 0xd6, 0x40, 0xe0,
+ 0xd4, 0x27, 0x49, 0xc8, 0xe4, 0x5f, 0x33, 0xd1, 0x20, 0xe0, 0x09, 0xf7, 0xcd,
+ 0xd4, 0x1a, 0x1d, 0x30, 0x3b, 0xf1, 0x17, 0x0f, 0x4c, 0x50, 0xe5, 0xe1, 0xdd,
+ 0xf9, 0xd7, 0xbf, 0x35, 0xb9, 0xc0, 0x0e, 0x93, 0xfd, 0x00, 0x67, 0xd1, 0x0c,
+ 0x8d, 0xb9, 0x2a, 0x35, 0xd9, 0x15, 0x29, 0x3a, 0x2c, 0xeb, 0x3a, 0xf2, 0x15,
+ 0xee, 0x29, 0xfe, 0xd9, 0x22, 0xb0, 0xd7, 0x21, 0x16, 0x0d, 0x2a, 0xbd, 0x0a,
+ 0x0a, 0xfc, 0xad, 0xbd, 0xdb, 0xef, 0xc1, 0xe5, 0x22, 0xc7, 0xe1, 0x2f, 0xd2,
+ 0xf8, 0x2a, 0xfe, 0xdb, 0x54, 0x81, 0xc4, 0xfd, 0x00, 0x41, 0xf5, 0xe5, 0x22,
+ 0xdf, 0xcb, 0x09, 0xe2, 0x2b, 0xf6, 0x53, 0xe5, 0x19, 0xd8, 0x3b, 0xb2, 0x13,
+ 0x0f, 0xd0, 0xc8, 0x1c, 0xe0, 0x4d, 0x0d, 0xb9, 0x04, 0x06, 0x99, 0xb4, 0xe0,
+ 0xe8, 0xee, 0xf0, 0xe9, 0x4e, 0x79, 0x19, 0x1a, 0x02, 0x9a, 0x18, 0xfa, 0xf2,
+ 0xed, 0x11, 0xaa, 0xd6, 0xa9, 0xcd, 0xc8, 0xd1, 0x17, 0x37, 0x18, 0x2a, 0x18,
+ 0x15, 0xf9, 0xf4, 0x3f, 0xc5, 0x0d, 0x04, 0x35, 0x0e, 0xf9, 0xef, 0x04, 0x0b,
+ 0xd5, 0xf9, 0xf4, 0x03, 0x0a, 0xf2, 0x2a, 0xb5, 0xde, 0x2d, 0xff, 0xb5, 0xe2,
+ 0x4f, 0xfa, 0xdf, 0x11, 0x05, 0xda, 0xf7, 0xeb, 0xdc, 0x2d, 0xfc, 0xee, 0x00,
+ 0x1a, 0xfd, 0xf8, 0x0d, 0xfd, 0x07, 0x09, 0x1c, 0xad, 0x22, 0xd2, 0x12, 0xb3,
+ 0x02, 0x04, 0x0b, 0x0a, 0xc5, 0x16, 0x36, 0xff, 0xf1, 0x05, 0x10, 0xe3, 0xd8,
+ 0xab, 0xf3, 0xee, 0xf0, 0x0a, 0xf2, 0x0c, 0x23, 0x20, 0xfd, 0xbc, 0x09, 0x0e,
+ 0x0c, 0x43, 0x35, 0x00, 0xef, 0x19, 0xe9, 0xf4, 0xd1, 0xfb, 0xe7, 0xab, 0x1b,
+ 0xe8, 0x02, 0x08, 0x1d, 0xc7, 0x2e, 0x08, 0xf2, 0x12, 0xd8, 0x7f, 0xd9, 0x13,
+ 0xe4, 0x17, 0x03, 0xfa, 0xff, 0x47, 0xde, 0x38, 0xd6, 0x16, 0x11, 0x06, 0x0e,
+ 0x0c, 0x0f, 0x2e, 0x20, 0xdb, 0xeb, 0x02, 0xfa, 0xdf, 0x01, 0x29, 0x01, 0xf3,
+ 0x4d, 0xf0, 0xdc, 0x1c, 0xe9, 0x3e, 0xf3, 0x1e, 0xc6, 0xc1, 0xc5, 0xbf, 0xda,
+ 0x3b, 0xf8, 0x3f, 0x24, 0x22, 0xe7, 0xbb, 0xc5, 0x21, 0xfd, 0xf3, 0x12, 0x01,
+ 0xd0, 0xa4, 0x08, 0xb7, 0x1e, 0xe7, 0x0b, 0xea, 0x07, 0x05, 0xe1, 0xf0, 0xd2,
+ 0x12, 0xc6, 0xf4, 0xe1, 0x17, 0x2e, 0x24, 0xb0, 0x38, 0xf6, 0x4e, 0xe6, 0x03,
+ 0xbc, 0x17, 0x3f, 0xe0, 0xca, 0x33, 0x10, 0xf7, 0x1d, 0xf1, 0xfb, 0x0f, 0xc4,
+ 0x0e, 0x3a, 0xfb, 0xf0, 0xfa, 0x25, 0xfb, 0x10, 0x7f, 0xf1, 0x03, 0x41, 0xcb,
+ 0x29, 0xf8, 0x14, 0x35, 0x2f, 0x25, 0xfa, 0x23, 0xc8, 0xfb, 0xc3, 0x2c, 0xf3,
+ 0xf8, 0xdd, 0xf3, 0x1d, 0x0a, 0xfb, 0x0a, 0x09, 0xd2, 0x06, 0x18, 0x30, 0xfb,
+ 0x1a, 0xfe, 0xdf, 0xfa, 0xe0, 0xe4, 0x2b, 0xfb, 0xd8, 0x75, 0xfa, 0xe3, 0x1a,
+ 0x04, 0xb7, 0x3a, 0xde, 0xd1, 0xd9, 0xe6, 0xfd, 0xec, 0xf5, 0xc3, 0xf9, 0xe8,
+ 0xcb, 0x2d, 0x19, 0x47, 0x11, 0x2b, 0x2b, 0xf9, 0xf1, 0xb0, 0xa8, 0x35, 0x28,
+ 0x47, 0xf4, 0xf7, 0xe6, 0x11, 0xde, 0xfd, 0xf8, 0x0e, 0xed, 0xbb, 0x42, 0xf7,
+ 0x24, 0xd3, 0x10, 0xd2, 0x1c, 0x09, 0xe6, 0xf3, 0x0c, 0xfe, 0x1c, 0xfd, 0x11,
+ 0x0d, 0x3e, 0x0c, 0x2d, 0x13, 0x12, 0x05, 0x29, 0x03, 0x00, 0xbb, 0x15, 0x0c,
+ 0xd0, 0xce, 0xca, 0xef, 0xf8, 0x0c, 0xfd, 0xf2, 0x10, 0xcb, 0xc9, 0xfc, 0xc6,
+ 0x0b, 0xf3, 0x22, 0xd5, 0xd0, 0x11, 0xe4, 0x14, 0x0b, 0xc5, 0xbe, 0xdc, 0xf4,
+ 0x0b, 0xc6, 0xe0, 0xe9, 0x14, 0x98, 0x29, 0x0f, 0xb6, 0x05, 0xf8, 0xfe, 0xf0,
+ 0x0d, 0xf5, 0x25, 0xe7, 0x1e, 0xe7, 0xd9, 0xff, 0xe8, 0xe3, 0xf3, 0x05, 0x1e,
+ 0xe4, 0xed, 0x31, 0x08, 0xd7, 0x29, 0x24, 0xdd, 0x29, 0x25, 0x81, 0xff, 0x01,
+ 0xbb, 0x36, 0x30, 0x11, 0xc7, 0xfd, 0x57, 0x1a, 0x1c, 0x4b, 0x1b, 0x8a, 0xfb,
+ 0xfa, 0xd9, 0xef, 0x0e, 0x23, 0xe8, 0xf6, 0x58, 0x2b, 0x19, 0xa6, 0xe4, 0x1e,
+ 0xca, 0x3d, 0x0d, 0x47, 0xec, 0xe1, 0xcf, 0xe3, 0x29, 0xdd, 0xb5, 0xf7, 0xfe,
+ 0x25, 0xeb, 0x03, 0x09, 0xfa, 0xbb, 0xf2, 0xcb, 0x90, 0x2a, 0x2c, 0x63, 0x25,
+ 0xf7, 0xed, 0x46, 0x9b, 0xea, 0x1e, 0xfe, 0xe9, 0x00, 0x47, 0x24, 0xfc, 0x05,
+ 0xf0, 0xe3, 0x4b, 0xd9, 0xeb, 0xd3, 0x2b, 0xe6, 0x21, 0xf9, 0xe1, 0xec, 0xe6,
+ 0x8e, 0x16, 0xe2, 0x08, 0xe8, 0xf2, 0xe5, 0xef, 0x23, 0x2e, 0x90, 0x1b, 0xc7,
+ 0x09, 0xe5, 0x51, 0x09, 0x26, 0xd5, 0xd6, 0xf9, 0xfe, 0x81, 0x12, 0x48, 0x08,
+ 0xf5, 0x04, 0xda, 0xb4, 0x0f, 0xdb, 0xdb, 0x02, 0x48, 0x12, 0x06, 0x31, 0x29,
+ 0xdc, 0xad, 0xee, 0xf2, 0x3c, 0xa2, 0x13, 0xbb, 0xb1, 0x16, 0x94, 0x0e, 0x98,
+ 0xee, 0xdc, 0xca, 0xcd, 0xfb, 0x1f, 0x21, 0x35, 0xdb, 0xe1, 0x03, 0x10, 0xc5,
+ 0x3d, 0xdf, 0xe1, 0xee, 0xea, 0xad, 0x25, 0x10, 0xda, 0xc7, 0x37, 0xef, 0xcc,
+ 0xcb, 0xe9, 0x51, 0x35, 0x92, 0x9c, 0x02, 0xec, 0x55, 0x24, 0xf8, 0x1d, 0x00,
+ 0x03, 0x00, 0x46, 0x13, 0x20, 0x04, 0xcf, 0x1e, 0x28, 0xfe, 0x29, 0xf1, 0x3a,
+ 0x27, 0x18, 0x42, 0x64, 0x81, 0xf7, 0x1a, 0xd2, 0x4a, 0xbd, 0x54, 0xe5, 0xb9,
+ 0xbf, 0x11, 0xbb, 0xb5, 0x0b, 0xd1, 0x1b, 0x06, 0xef, 0x0e, 0x1b, 0xfd, 0x5e,
+ 0xe8, 0xfe, 0x06, 0x01, 0xeb, 0xa7, 0xe5, 0xc4, 0xcb, 0xf8, 0x02, 0xf6, 0xbc,
+ 0xfb, 0x24, 0x26, 0xc5, 0x36, 0x2f, 0xe2, 0xc0, 0xe9, 0xd3, 0xe5, 0x6c, 0x2e,
+ 0x02, 0xf0, 0xd1, 0xda, 0xe3, 0xdf, 0x1a, 0x1f, 0xcf, 0x15, 0x09, 0xee, 0xc8,
+ 0x6d, 0x09, 0xec, 0xeb, 0x26, 0xca, 0x0b, 0x18, 0xb9, 0x23, 0xea, 0x97, 0xe9,
+ 0x2b, 0xda, 0xf9, 0xf4, 0x89, 0xcd, 0xa5, 0xaa, 0xe4, 0xd0, 0xfd, 0x1e, 0xda,
+ 0xf2, 0x1a, 0xff, 0x59, 0x11, 0x16, 0xf8, 0xaf, 0x05, 0xca, 0x37, 0x32, 0xf0,
+ 0xe2, 0xcb, 0x0a, 0xca, 0xad, 0xbe, 0xbb, 0xb7, 0x54, 0xc2, 0x23, 0x06, 0xdc,
+ 0x0d, 0xed, 0x0c, 0xea, 0xbf, 0xc4, 0xb5, 0xd3, 0x8d, 0x60, 0xb6, 0x03, 0xc8,
+ 0x1e, 0x54, 0xcf, 0xec, 0xfd, 0x0d, 0x1e, 0x2e, 0x04, 0x18, 0xfc, 0x45, 0x02,
+ 0xd5, 0x55, 0xd8, 0x10, 0x46, 0x45, 0xe6, 0xc8, 0xd2, 0x21, 0x23, 0x67, 0x14,
+ 0x4d, 0xb8, 0xc0, 0x4e, 0x14, 0xf5, 0xd2, 0xfa, 0xfe, 0xdf, 0x19, 0x1b, 0x3f,
+ 0x17, 0xac, 0x0a, 0x09, 0xee, 0x0b, 0xb9, 0xea, 0xe1, 0xc8, 0x6f, 0x81, 0xda,
+ 0xfb, 0x42, 0xdb, 0x25, 0xd2, 0xe9, 0x31, 0x45, 0xf7, 0x15, 0x51, 0x96, 0xe8,
+ 0x27, 0x0b, 0x54, 0x2b, 0x9c, 0x15, 0xed, 0xc9, 0xdf, 0xc8, 0xc7, 0xe9, 0xf7,
+ 0xf8, 0xdd, 0x2e, 0xd4, 0xf3, 0x1d, 0x4d, 0xdf, 0xf1, 0x04, 0xf2, 0xce, 0x14,
+ 0x45, 0xf9, 0x1a, 0xd6, 0x01, 0xdc, 0xf3, 0xf5, 0xf9, 0xed, 0xd4, 0x02, 0x20,
+ 0x25, 0xe0, 0x02, 0xf4, 0x24, 0xb7, 0x3a, 0xb5, 0x38, 0xf6, 0x13, 0xfe, 0xc6,
+ 0x17, 0x27, 0xe7, 0xdc, 0x3d, 0xec, 0x07, 0xe1, 0xf9, 0x04, 0xca, 0xfc, 0x12,
+ 0xff, 0xf2, 0x05, 0x0e, 0x00, 0xdb, 0x22, 0xf0, 0x15, 0x5d, 0x1f, 0x0f, 0xeb,
+ 0x64, 0x1a, 0x7f, 0x1e, 0x01, 0xee, 0xb6, 0x0f, 0x09, 0x50, 0x15, 0x90, 0x1d,
+ 0x1d, 0xff, 0x0a, 0x03, 0xe6, 0x12, 0x58, 0xe6, 0x12, 0xdc, 0x1a, 0x4d, 0x07,
+ 0xe6, 0xcd, 0xce, 0x2d, 0xd5, 0xe8, 0xd9, 0x2b, 0x04, 0x1a, 0x28, 0xd5, 0x2b,
+ 0x95, 0xa7, 0x01, 0xd2, 0x28, 0xa2, 0x1b, 0xe7, 0x25, 0xc6, 0xe6, 0x2d, 0x09,
+ 0xa9, 0x20, 0x28, 0xac, 0x5e, 0xea, 0xf0, 0xe5, 0xeb, 0x09, 0xf6, 0xfe, 0x27,
+ 0xcc, 0x12, 0xe5, 0x05, 0x14, 0xde, 0x14, 0xe8, 0xe0, 0xf2, 0x0c, 0x20, 0x30,
+ 0x2e, 0xfc, 0x0a, 0xfc, 0xfb, 0xdb, 0xbd, 0xca, 0xe5, 0x0e, 0x26, 0x24, 0x1d,
+ 0xfb, 0xcd, 0xa2, 0x18, 0x19, 0x09, 0xf4, 0xa3, 0x14, 0xc2, 0xec, 0x9d, 0xe5,
+ 0x1a, 0xdb, 0x7c, 0xec, 0xe3, 0xd7, 0x00, 0xe4, 0x22, 0x0a, 0x02, 0xb1, 0x0e,
+ 0xd1, 0x1d, 0x10, 0x18, 0xd0, 0x51, 0x00, 0x2e, 0x02, 0x28, 0xda, 0xe0, 0xe6,
+ 0xc3, 0x5c, 0xb3, 0x26, 0xde, 0x0b, 0xab, 0xf5, 0x3d, 0x97, 0xf7, 0xd6, 0xeb,
+ 0xc2, 0xf4, 0xca, 0xd9, 0x1e, 0x17, 0x3f, 0xde, 0xb7, 0xdb, 0x46, 0x15, 0xd1,
+ 0x19, 0xb4, 0xe0, 0xe9, 0xf6, 0xee, 0xf8, 0xe3, 0xdc, 0xe3, 0xfc, 0x4d, 0x01,
+ 0x10, 0xf1, 0x17, 0x11, 0x0a, 0xc6, 0x9f, 0x23, 0x7f, 0xf7, 0x0c, 0x25, 0xfa,
+ 0xe6, 0x28, 0xff, 0x0c, 0xd5, 0x01, 0x5b, 0xb7, 0x0d, 0xe3, 0x19, 0x31, 0x1d,
+ 0x0e, 0x04, 0xd9, 0x13, 0xd7, 0xcf, 0xc0, 0x1c, 0x01, 0x06, 0xe1, 0x56, 0x03,
+ 0x60, 0x61, 0xa9, 0xf5, 0xec, 0x16, 0x0c, 0xe2, 0x09, 0xfe, 0x41, 0x1b, 0x3d,
+ 0x2c, 0xcd, 0xb6, 0x24, 0x1c, 0xcd, 0x4b, 0xdf, 0x5d, 0xe2, 0x37, 0x3a, 0xfd,
+ 0x25, 0xe3, 0xa2, 0xcd, 0x22, 0xff, 0x7f, 0xb5, 0xfd, 0xfb, 0x00, 0xdf, 0x30,
+ 0xdd, 0x4b, 0x4e, 0x26, 0xfe, 0xda, 0x23, 0xe3, 0x37, 0x19, 0xd9, 0x1e, 0xe0,
+ 0x05, 0xe2, 0xda, 0xee, 0xd6, 0xef, 0xf7, 0xb7, 0x07, 0x05, 0xfa, 0xc9, 0x1e,
+ 0x00, 0xeb, 0xf3, 0x11, 0x12, 0xe7, 0xda, 0x28, 0x83, 0xd7, 0xf5, 0x04, 0xf8,
+ 0xa8, 0x14, 0x4b, 0xe6, 0x09, 0xfe, 0x34, 0xb9, 0x18, 0x49, 0xd8, 0xcf, 0xf3,
+ 0xdf, 0x0c, 0x07, 0xef, 0x21, 0xd3, 0xd5, 0x66, 0xd9, 0x08, 0xdc, 0x0e, 0x0c,
+ 0x21, 0xf2, 0xd6, 0x0c, 0xc5, 0xdd, 0x13, 0xd0, 0xff, 0x57, 0xba, 0xe5, 0x24,
+ 0xc3, 0xd0, 0x2e, 0x07, 0xfe, 0x5d, 0x0f, 0x14, 0x5b, 0xde, 0x11, 0x4b, 0xee,
+ 0xf1, 0xd5, 0xd0, 0xf9, 0x14, 0x05, 0x88, 0xf9, 0x08, 0x0d, 0xbe, 0x0f, 0xf0,
+ 0x17, 0x1c, 0x08, 0xf4, 0x32, 0x14, 0x93, 0xd3, 0xda, 0x94, 0x0f, 0xf6, 0x38,
+ 0x07, 0x1e, 0x11, 0xc1, 0xdc, 0xdb, 0xd7, 0xf3, 0x31, 0xfb, 0x22, 0x06, 0xe2,
+ 0x01, 0xc1, 0xf6, 0x10, 0x17, 0xb9, 0x27, 0xf8, 0xfa, 0x0c, 0xdc, 0xb7, 0xe5,
+ 0x05, 0x28, 0x2b, 0xce, 0xeb, 0x3b, 0x2c, 0xb7, 0xfd, 0x27, 0xf8, 0xfe, 0x9e,
+ 0x31, 0xf2, 0x81, 0x05, 0xf3, 0xef, 0x1e, 0x05, 0x19, 0x07, 0xb3, 0xd2, 0xf9,
+ 0xfe, 0xa3, 0x16, 0x07, 0xdf, 0xf7, 0x62, 0xec, 0x20, 0xee, 0xe2, 0x0f, 0xf8,
+ 0x12, 0xe4, 0x06, 0xd3, 0xd7, 0x44, 0x17, 0x03, 0xbb, 0x0b, 0xee, 0xff, 0xf0,
+ 0xfb, 0x26, 0xe8, 0x39, 0xdd, 0x0e, 0x02, 0xe1, 0x07, 0x27, 0x09, 0x03, 0x28,
+ 0x01, 0xe3, 0xb0, 0xf8, 0xf5, 0x30, 0x0c, 0x57, 0x02, 0x01, 0xbe, 0xb8, 0x1b,
+ 0x25, 0x0b, 0x53, 0x17, 0x1c, 0xeb, 0x22, 0x1a, 0xaf, 0xdf, 0xd3, 0x3f, 0x07,
+ 0x04, 0x2c, 0xe0, 0x15, 0x29, 0x02, 0xc4, 0xf8, 0xbc, 0xaa, 0x16, 0xf7, 0xce,
+ 0xfa, 0x01, 0x53, 0x0a, 0x15, 0xdb, 0x27, 0xa8, 0xfc, 0x03, 0x08, 0xc5, 0x22,
+ 0xeb, 0xf1, 0xfe, 0x2a, 0xf5, 0xaa, 0x41, 0xcb, 0x4a, 0x22, 0xfb, 0x38, 0xc3,
+ 0x2c, 0xd4, 0xec, 0xfc, 0x25, 0xfe, 0xfe, 0x32, 0xe3, 0xd4, 0x12, 0x06, 0xf7,
+ 0xec, 0x19, 0x63, 0x3a, 0x81, 0xf5, 0x30, 0xfe, 0xe9, 0xe5, 0x04, 0xeb, 0xd2,
+ 0x13, 0x3a, 0x36, 0xeb, 0x13, 0x18, 0x16, 0x16, 0x0d, 0xe4, 0xfa, 0x1e, 0xe3,
+ 0xe9, 0x10, 0xfd, 0x22, 0x25, 0xf2, 0xe1, 0x1d, 0xf9, 0x04, 0x10, 0xc2, 0x01,
+ 0x0f, 0x1a, 0x15, 0xc0, 0x04, 0x81, 0xe5, 0x44, 0x02, 0xa2, 0xe6, 0x40, 0xf3,
+ 0x84, 0x21, 0xff, 0xb4, 0x30, 0xde, 0x4c, 0x26, 0x12, 0x1b, 0x4b, 0xe7, 0x11,
+ 0x6f, 0xb5, 0x6d, 0x1e, 0xe4, 0x06, 0xf3, 0x12, 0x0a, 0xf5, 0x0a, 0xd8, 0x17,
+ 0x5c, 0xcd, 0x7d, 0xd5, 0xc7, 0x94, 0xf4, 0x30, 0x31, 0x02, 0x28, 0xd6, 0x22,
+ 0xf5, 0x07, 0xc0, 0xd6, 0x29, 0xdb, 0x2b, 0x4d, 0x3b, 0xf6, 0xf7, 0x72, 0x46,
+ 0xe2, 0xec, 0xd8, 0xc5, 0x3f, 0xbc, 0x30, 0xfd, 0xdd, 0x22, 0xaa, 0x15, 0xf9,
+ 0xb3, 0xd6, 0x3f, 0xf2, 0x07, 0x44, 0xf5, 0xf7, 0x22, 0xe5, 0x28, 0xf4, 0xf9,
+ 0xc9, 0x93, 0x40, 0x4b, 0xf6, 0x19, 0x54, 0xc2, 0x18, 0xde, 0xe1, 0xde, 0x7e,
+ 0x34, 0xbe, 0x09, 0xdf, 0x11, 0x06, 0x1b, 0xbc, 0xf8, 0x2f, 0xde, 0x50, 0xd6,
+ 0xa9, 0x2b, 0x17, 0x03, 0xab, 0x23, 0x3d, 0x11, 0x54, 0xd5, 0xdd, 0xb7, 0x08,
+ 0x23, 0x23, 0x16, 0xf4, 0x13, 0xe6, 0x39, 0xd8, 0xf7, 0x0e, 0x3b, 0xf6, 0xb0,
+ 0xa9, 0xfc, 0x12, 0xa6, 0xf0, 0xfe, 0x3f, 0x07, 0xfd, 0xcf, 0xd5, 0xbc, 0x18,
+ 0xef, 0x2b, 0x43, 0x19, 0x04, 0xb3, 0xb2, 0xf9, 0x05, 0xff, 0x0f, 0x0f, 0x01,
+ 0xfe, 0xeb, 0xfa, 0x1b, 0xd3, 0x0b, 0x0b, 0x02, 0xe8, 0x1d, 0x29, 0xdf, 0xfb,
+ 0xc4, 0x25, 0xf5, 0x02, 0x14, 0xe2, 0x0f, 0x46, 0x11, 0x0c, 0x15, 0x09, 0xf7,
+ 0x08, 0x0c, 0x99, 0x17, 0xe9, 0xd4, 0x1a, 0x17, 0xef, 0x02, 0x37, 0x01, 0x01,
+ 0xd9, 0x81, 0x0c, 0x40, 0x28, 0xeb, 0x1a, 0xf6, 0xff, 0xdb, 0xf5, 0xce, 0xd2,
+ 0x24, 0xc9, 0x1a, 0x17, 0x08, 0x44, 0xee, 0x2e, 0x4e, 0x0d, 0x19, 0x0d, 0xb7,
+ 0xfa, 0xd0, 0xda, 0xe2, 0xdb, 0x12, 0x4f, 0xe1, 0x40, 0x2d, 0x33, 0x03, 0xe2,
+ 0xd2, 0xe1, 0xd4, 0x2b, 0xe3, 0xc1, 0x00, 0x75, 0x02, 0x30, 0x31, 0xf9, 0x07,
+ 0x07, 0xe6, 0x3d, 0x3a, 0xc4, 0x13, 0x0c, 0xe1, 0x0d, 0xc2, 0xf7, 0xb5, 0xf7,
+ 0xc1, 0xce, 0xbb, 0x15, 0xed, 0xa3, 0xf4, 0x12, 0xd9, 0x0c, 0xeb, 0x17, 0x8d,
+ 0xe5, 0x2a, 0x87, 0x01, 0xae, 0xe5, 0x1a, 0xf0, 0xf1, 0x05, 0xff, 0x04, 0xfd,
+ 0x2d, 0xee, 0x3f, 0x04, 0x4c, 0x2b, 0xc2, 0xd3, 0x03, 0xc4, 0x20, 0x7f, 0x2b,
+ 0xd5, 0x1f, 0x04, 0xf6, 0x02, 0x21, 0xfc, 0xd2, 0xd8, 0xf6, 0xec, 0xeb, 0x12,
+ 0xcd, 0xed, 0x10, 0xd7, 0xf7, 0x24, 0xf4, 0x22, 0x0b, 0xea, 0x07, 0xf5, 0x0d,
+ 0x1c, 0x28, 0x0b, 0xbc, 0xe0, 0xca, 0x00, 0x39, 0x1b, 0xf8, 0x32, 0x08, 0xfd,
+ 0x18, 0xf4, 0xeb, 0xf0, 0xfb, 0x0d, 0xfd, 0xeb, 0x11, 0x0a, 0xd4, 0xe7, 0xc8,
+ 0xd1, 0x47, 0x23, 0xe7, 0x1f, 0x24, 0xaf, 0xf7, 0xff, 0xe0, 0xf8, 0xef, 0x30,
+ 0xbe, 0xe7, 0x05, 0x03, 0x09, 0x37, 0xef, 0xe0, 0x19, 0xd3, 0x06, 0x12, 0xa2,
+ 0x19, 0xf4, 0xe0, 0xe4, 0x24, 0xe9, 0x4d, 0xec, 0xfb, 0xf8, 0xe0, 0x19, 0xf4,
+ 0x61, 0xe3, 0x65, 0x03, 0x0d, 0x82, 0x10, 0x14, 0x16, 0x7f, 0xa3, 0x08, 0x1f,
+ 0x29, 0x32, 0x1f, 0x13, 0xe0, 0x08, 0xf1, 0x03, 0x14, 0x20, 0xfa, 0x1f, 0xe8,
+ 0xca, 0x28, 0x07, 0xdd, 0x01, 0xc2, 0x16, 0xd9, 0x0b, 0xe8, 0x43, 0x10, 0x01,
+ 0x24, 0x21, 0x31, 0x48, 0xd3, 0x0d, 0x07, 0xd7, 0x42, 0xfe, 0xe5, 0x41, 0xd2,
+ 0x04, 0x02, 0x1c, 0xb4, 0xd8, 0xb2, 0xde, 0xeb, 0x51, 0x50, 0xc5, 0xcf, 0x00,
+ 0xd4, 0x01, 0x2f, 0xc3, 0xdf, 0xbc, 0xfc, 0xe2, 0xf3, 0x26, 0xfc, 0x40, 0x42,
+ 0x2d, 0xc0, 0xbb, 0xef, 0xe1, 0xeb, 0x13, 0x15, 0xa0, 0x15, 0x5a, 0xee, 0x09,
+ 0xfe, 0xe6, 0x38, 0x0c, 0x97, 0xe2, 0x3b, 0xca, 0xc2, 0xf6, 0x2e, 0x17, 0xf2,
+ 0xf6, 0x29, 0x00, 0xe7, 0x34, 0x58, 0x26, 0xe2, 0x1f, 0x21, 0x1c, 0x14, 0x0a,
+ 0xe6, 0x06, 0xe6, 0xd0, 0xf4, 0x05, 0x1a, 0x1a, 0xf0, 0xc8, 0x25, 0x0e, 0xf3,
+ 0xee, 0xb3, 0xc7, 0xee, 0xf7, 0xe2, 0xf5, 0xfe, 0xea, 0xbb, 0x39, 0x0d, 0xf4,
+ 0x1f, 0x09, 0x29, 0xff, 0xde, 0xd4, 0xd1, 0x06, 0xdd, 0xf7, 0x10, 0xf3, 0x3b,
+ 0x21, 0xd5, 0x03, 0xf2, 0xf9, 0x00, 0xe0, 0xdc, 0xec, 0x1c, 0xf4, 0x08, 0x34,
+ 0x7f, 0x17, 0xee, 0x0c, 0xdd, 0x2b, 0x18, 0xb1, 0x33, 0xe1, 0xc9, 0xf4, 0xe0,
+ 0x07, 0xef, 0xd3, 0xd5, 0x11, 0x3d, 0x15, 0x0c, 0x3c, 0x02, 0x00, 0x25, 0xf9,
+ 0xf1, 0xe2, 0xd6, 0xf2, 0xff, 0x50, 0x23, 0x24, 0x0d, 0xea, 0xf0, 0x3f, 0x08,
+ 0xf7, 0xeb, 0x38, 0xec, 0xfe, 0xe2, 0xce, 0xdf, 0xf1, 0x10, 0x14, 0x31, 0x01,
+ 0xea, 0xed, 0xeb, 0x07, 0xf1, 0x3f, 0x0f, 0x0b, 0x0b, 0xea, 0x26, 0x02, 0x19,
+ 0x0e, 0x1d, 0x27, 0xbd, 0x39, 0x03, 0x02, 0xd4, 0xc4, 0xe0, 0x2a, 0x19, 0x08,
+ 0x04, 0x2e, 0xde, 0x0d, 0x2c, 0x0e, 0x01, 0x33, 0xdf, 0x1e, 0xfc, 0xeb, 0xfb,
+ 0x09, 0xbf, 0xf0, 0xf9, 0x1a, 0xe4, 0xd8, 0x16, 0x01, 0xc1, 0x98, 0xec, 0xeb,
+ 0xe7, 0x37, 0x19, 0xd3, 0x15, 0x0b, 0x11, 0x23, 0x02, 0x04, 0xef, 0x1a, 0x52,
+ 0xfa, 0x2a, 0x34, 0xf9, 0x0b, 0x14, 0xc0, 0xf8, 0xd9, 0xfb, 0x24, 0xba, 0x2c,
+ 0x09, 0x2a, 0xb0, 0xef, 0x45, 0xb4, 0x1f, 0xff, 0x3c, 0x0a, 0x08, 0xfe, 0xf7,
+ 0x0f, 0x32, 0xcc, 0xbd, 0xc1, 0xf0, 0x0c, 0xd0, 0x08, 0x06, 0xfe, 0xf6, 0xde,
+ 0x3c, 0x01, 0xb9, 0x1a, 0x35, 0x0e, 0x26, 0x00, 0xdc, 0xe9, 0xcd, 0x1d, 0xe1,
+ 0x11, 0x81, 0x2d, 0x20, 0xcd, 0x24, 0xc5, 0xfc, 0xe5, 0x00, 0xed, 0xe1, 0x3e,
+ 0xf4, 0x1c, 0x0c, 0xe0, 0xe7, 0x12, 0x17, 0x1d, 0xed, 0xe9, 0x18, 0xa9, 0xe2,
+ 0xe8, 0xea, 0x44, 0x49, 0x13, 0x13, 0xc1, 0x12, 0xcb, 0x2b, 0xea, 0x1a, 0x22,
+ 0x35, 0x28, 0x27, 0xd5, 0x2d, 0xfb, 0xfd, 0x42, 0x5c, 0xee, 0x68, 0x0e, 0xeb,
+ 0xea, 0x2d, 0x46, 0xee, 0x3d, 0x7d, 0x07, 0x02, 0xf8, 0xe8, 0xf1, 0xe5, 0x02,
+ 0x0a, 0xe5, 0xf4, 0x09, 0xed, 0x6d, 0x31, 0x89, 0xf0, 0xea, 0xf2, 0xce, 0x0e,
+ 0x18, 0x09, 0x10, 0x41, 0xd8, 0x12, 0x0c, 0xd4, 0x08, 0x2e, 0x81, 0x33, 0x0d,
+ 0x54, 0xf5, 0x25, 0xb9, 0xc2, 0x12, 0xf7, 0xe1, 0x2c, 0x0f, 0x36, 0xea, 0x28,
+ 0x28, 0x10, 0x19, 0xfc, 0x07, 0x2a, 0xff, 0xf5, 0x0f, 0xed, 0x04, 0x1c, 0x0c,
+ 0xf5, 0x2d, 0xca, 0x18, 0x14, 0x19, 0x0d, 0x39, 0xaf, 0x05, 0x0f, 0xe9, 0xf7,
+ 0xd6, 0xef, 0xc8, 0x4a, 0xe8, 0x55, 0x03, 0xbb, 0xff, 0xe3, 0xda, 0xf8, 0xe3,
+ 0x28, 0x8c, 0x1a, 0x0e, 0x15, 0x7c, 0x04, 0x0f, 0xfe, 0x34, 0xe5, 0xe9, 0xf5,
+ 0xfc, 0xbd, 0xe3, 0x24, 0x2a, 0x44, 0xf1, 0xb5, 0xe5, 0x10, 0xde, 0x0c, 0xe6,
+ 0xd7, 0xe4, 0xdc, 0x83, 0xa2, 0xe5, 0xc3, 0x41, 0xeb, 0x13, 0xc3, 0xf4, 0x1e,
+ 0xff, 0x25, 0xb9, 0x11, 0x54, 0x53, 0xf9, 0x36, 0xd5, 0xf6, 0xf8, 0xe7, 0x1b,
+ 0xe0, 0x0b, 0xeb, 0xef, 0x27, 0x16, 0x40, 0x0b, 0x11, 0x4a, 0x00, 0x2a, 0xb8,
+ 0x02, 0x4a, 0x71, 0x05, 0xaf, 0x01, 0x30, 0x07, 0xda, 0xe8, 0xd4, 0xd9, 0xbb,
+ 0xff, 0x36, 0xe5, 0xe0, 0x0c, 0xcb, 0x4e, 0x2d, 0xe5, 0xd5, 0x19, 0x0e, 0x2f,
+ 0x28, 0xe2, 0x3a, 0xbd, 0xbd, 0xe9, 0x13, 0xed, 0x15, 0x17, 0xdf, 0x03, 0x67,
+ 0xfb, 0x28, 0xd3, 0x3f, 0x1e, 0xce, 0x59, 0xf0, 0x56, 0x58, 0xdc, 0x28, 0x1a,
+ 0xcc, 0xb4, 0xce, 0x36, 0xf3, 0x31, 0xde, 0xe5, 0xd8, 0xf3, 0x0c, 0x1f, 0x54,
+ 0xe3, 0xf1, 0x7f, 0x23, 0x0a, 0x62, 0x08, 0x34, 0xd0, 0xf9, 0xc2, 0x0a, 0xf4,
+ 0x53, 0x0a, 0x17, 0x20, 0xf7, 0x05, 0xfa, 0x78, 0xd8, 0xc1, 0xfd, 0x1b, 0xf4,
+ 0x81, 0xa5, 0xe4, 0x16, 0xdc, 0xec, 0xf1, 0xff, 0x02, 0xf4, 0x1e, 0xe7, 0xc8,
+ 0x00, 0x13, 0x0d, 0x26, 0x24, 0xf0, 0xdd, 0x22, 0xfc, 0x2f, 0x12, 0x08, 0xe9,
+ 0x04, 0x02, 0xee, 0xf4, 0xe2, 0x1d, 0x24, 0xdb, 0xfc, 0x2e, 0xb7, 0x15, 0xb3,
+ 0x1f, 0xf6, 0x5b, 0x14, 0xc7, 0xbc, 0xcb, 0x65, 0x00, 0xd4, 0x37, 0xde, 0x1b,
+ 0xe3, 0x07, 0x33, 0xb6, 0x25, 0x11, 0x36, 0x48, 0x0c, 0x1f, 0x11, 0xfa, 0xf9,
+ 0xd2, 0xdd, 0xdc, 0x14, 0x05, 0xff, 0x3a, 0x3f, 0x18, 0x4b, 0xf3, 0xed, 0xd0,
+ 0xb4, 0x01, 0xde, 0xdc, 0xfb, 0x07, 0x00, 0xf6, 0x27, 0xf7, 0xd1, 0x38, 0x0b,
+ 0xf3, 0xbb, 0x1d, 0x1c, 0x23, 0x0e, 0xf9, 0xb9, 0xa5, 0x20, 0x0c, 0x00, 0xcb,
+ 0x02, 0xfe, 0xf7, 0xf7, 0xfc, 0x55, 0xd6, 0xd7, 0x4d, 0xeb, 0xfc, 0xee, 0x0c,
+ 0x02, 0x20, 0x05, 0xcc, 0xfb, 0xfa, 0xed, 0x23, 0xd8, 0xca, 0x08, 0xfa, 0x81,
+ 0xfb, 0xc2, 0xf2, 0x1f, 0xa1, 0xe1, 0x3a, 0xe7, 0x0e, 0xf9, 0xfa, 0xd2, 0xec,
+ 0x04, 0x37, 0x40, 0x18, 0x46, 0x13, 0xd4, 0x0e, 0x24, 0xe7, 0xfc, 0x26, 0xe1,
+ 0x17, 0x33, 0x21, 0x0f, 0xc4, 0xef, 0xf1, 0xde, 0xda, 0xb9, 0x2f, 0x11, 0x2c,
+ 0xd5, 0xef, 0xec, 0x26, 0x1a, 0xf0, 0xd9, 0xe9, 0xeb, 0xf1, 0x00, 0x05, 0xd9,
+ 0xdd, 0xc6, 0xaa, 0xdb, 0x0b, 0x23, 0xd8, 0x22, 0x12, 0x04, 0x0e, 0x0e, 0x10,
+ 0xfb, 0xd6, 0xf4, 0xd3, 0x19, 0xe4, 0x31, 0xcd, 0xeb, 0xba, 0xd9, 0xfa, 0xe0,
+ 0xcb, 0x0e, 0x1c, 0x11, 0x0e, 0x2f, 0xf9, 0xe9, 0xed, 0xc4, 0xcb, 0xec, 0xd9,
+ 0x01, 0xf3, 0x3f, 0x1d, 0x11, 0xfa, 0x52, 0x14, 0x35, 0x33, 0xee, 0x29, 0xda,
+ 0x18, 0x14, 0xf3, 0xcc, 0xe3, 0x10, 0x81, 0xc6, 0xd0, 0x31, 0x47, 0xe0, 0xe6,
+ 0xf1, 0x02, 0x54, 0x02, 0x76, 0x09, 0x05, 0x29, 0x23, 0xd3, 0xd4, 0xfb, 0x1c,
+ 0x4f, 0xdc, 0x45, 0xd6, 0x1b, 0xf4, 0x50, 0x17, 0x63, 0x0e, 0x40, 0x44, 0xe0,
+ 0xe3, 0x09, 0x1c, 0xeb, 0x2b, 0x16, 0x09, 0xc6, 0xd8, 0x31, 0x11, 0x06, 0x37,
+ 0x34, 0x3f, 0xde, 0x27, 0x3e, 0xd8, 0xd1, 0xd1, 0xb0, 0x9d, 0x3a, 0xed, 0x0d,
+ 0x23, 0x10, 0xc6, 0x0e, 0xc6, 0xf9, 0x39, 0x17, 0x65, 0x02, 0xff, 0x14, 0xd5,
+ 0x02, 0xff, 0x28, 0x2c, 0x0a, 0x2c, 0xf9, 0xf1, 0x0c, 0x1c, 0x13, 0xe6, 0x06,
+ 0x00, 0x11, 0x13, 0xf7, 0x3a, 0xc9, 0xc0, 0x1b, 0xd7, 0x10, 0x18, 0xf5, 0x1d,
+ 0x78, 0xfe, 0x1a, 0x26, 0x19, 0xdf, 0xf3, 0xcd, 0x02, 0xe2, 0xfa, 0x26, 0x07,
+ 0x13, 0x07, 0x42, 0xe8, 0x0f, 0xe2, 0xf7, 0xca, 0xdd, 0x4d, 0x49, 0x40, 0x11,
+ 0xc6, 0x42, 0xb8, 0xe8, 0x03, 0xdd, 0x0b, 0x14, 0x2a, 0x2a, 0x3e, 0x18, 0xac,
+ 0xb3, 0xef, 0x1c, 0xef, 0xfc, 0xed, 0x0e, 0xfb, 0xf8, 0x14, 0x7f, 0x39, 0x8a,
+ 0x03, 0xe8, 0x5e, 0xdb, 0xd4, 0x5c, 0x02, 0x02, 0x39, 0xf6, 0xa4, 0xc7, 0xd4,
+ 0x28, 0xf3, 0xd2, 0xf9, 0xf8, 0xf9, 0x9f, 0xff, 0xb0, 0x28, 0xdb, 0x11, 0xe3,
+ 0xd1, 0xf6, 0xd0, 0x0f, 0x41, 0x26, 0x11, 0xe4, 0x1b, 0xed, 0xac, 0x33, 0x42,
+ 0x14, 0x45, 0x16, 0x0f, 0x09, 0x3b, 0xb3, 0x45, 0xeb, 0xb3, 0x3a, 0x00, 0xe9,
+ 0xcc, 0x37, 0xd4, 0x26, 0x10, 0xf7, 0xfd, 0xc1, 0x0d, 0x2d, 0xe4, 0x01, 0xbb,
+ 0x1b, 0x2e, 0x23, 0xe5, 0xf9, 0xec, 0xda, 0xc7, 0x0c, 0xee, 0xf9, 0xd6, 0xf9,
+ 0xd9, 0xf4, 0x4a, 0x30, 0xd6, 0xf3, 0xe7, 0x4c, 0x3b, 0x4b, 0x02, 0x05, 0x19,
+ 0x24, 0x0b, 0xa8, 0x02, 0x44, 0xff, 0x22, 0x25, 0xb8, 0x3b, 0x59, 0x9c, 0x1e,
+ 0xc4, 0x17, 0x20, 0xff, 0x0e, 0xdf, 0xd7, 0xfb, 0x0b, 0x0d, 0x05, 0xf6, 0x4e,
+ 0x00, 0xeb, 0x99, 0x1a, 0x3a, 0x26, 0xa6, 0x23, 0x1b, 0x0c, 0xbb, 0x13, 0x47,
+ 0x27, 0xdc, 0xe6, 0xfc, 0x37, 0x18, 0xbb, 0xfa, 0xb1, 0xdb, 0x65, 0xfa, 0x16,
+ 0xb6, 0xf7, 0x0a, 0xd8, 0x1d, 0xb0, 0xf4, 0xf4, 0xee, 0xdf, 0xf8, 0x2c, 0xd2,
+ 0x31, 0xe0, 0xf9, 0xdd, 0xa5, 0xbc, 0xb0, 0x1c, 0x3f, 0xdd, 0x2f, 0xf5, 0xc2,
+ 0xf6, 0xe1, 0xf8, 0xf2, 0xca, 0x1b, 0xbb, 0x94, 0xf6, 0x92, 0xed, 0xd9, 0xe4,
+ 0x3b, 0xb0, 0xda, 0xfe, 0xf2, 0x20, 0x8e, 0xf0, 0x5b, 0xd8, 0x0a, 0xf3, 0x3d,
+ 0xab, 0x16, 0xf7, 0xf8, 0x21, 0x00, 0xe9, 0x39, 0x09, 0xc7, 0x78, 0x3c, 0x08,
+ 0x1f, 0x1f, 0x1c, 0x4e, 0x53, 0x81, 0xc8, 0x13, 0x20, 0x3b, 0xdd, 0x22, 0x21,
+ 0x30, 0xaa, 0x05, 0xd8, 0x6f, 0xf4, 0xe5, 0xd3, 0xd7, 0x28, 0x78, 0xbc, 0xd7,
+ 0xea, 0xb2, 0x15, 0x1d, 0xbf, 0x91, 0xef, 0xe0, 0x2d, 0xed, 0x0f, 0x9a, 0xbf,
+ 0x38, 0xf1, 0xef, 0xe8, 0x17, 0xa0, 0xff, 0x81, 0x17, 0x63, 0xfa, 0xb9, 0x19,
+ 0x42, 0x08, 0xd4, 0x9c, 0xfc, 0x29, 0x23, 0x5f, 0x00, 0x37, 0xf8, 0x18, 0x16,
+ 0xb7, 0xd7, 0xdc, 0x30, 0xd3, 0x34, 0xac, 0x04, 0xe3, 0xab, 0xd1, 0x23, 0xe1,
+ 0xe4, 0x2b, 0xf2, 0x44, 0xc6, 0xf0, 0x3d, 0x20, 0xab, 0x3d, 0xde, 0xde, 0x40,
+ 0xf8, 0xe6, 0x63, 0x4f, 0x3d, 0x2a, 0x03, 0xe0, 0x14, 0x04, 0xf7, 0x08, 0xf1,
+ 0xab, 0x34, 0xe2, 0xd8, 0x05, 0xee, 0xea, 0xd2, 0x1c, 0xfa, 0xe6, 0xf9, 0x00,
+ 0xbf, 0x05, 0xe9, 0x1b, 0x1c, 0x2a, 0xd9, 0xbf, 0x1f, 0x2d, 0x22, 0xee, 0xe6,
+ 0x2e, 0xc1, 0xfb, 0xed, 0xc0, 0x3a, 0xfa, 0xe0, 0xdc, 0x0e, 0xb6, 0xac, 0xe7,
+ 0xea, 0x11, 0x37, 0x16, 0x47, 0xff, 0x1c, 0xdc, 0x70, 0x1d, 0xce, 0xfe, 0xce,
+ 0xef, 0x0f, 0xfc, 0xdc, 0xd5, 0x02, 0xff, 0x13, 0xcb, 0xc0, 0x2a, 0xf4, 0x2b,
+ 0xf4, 0x4c, 0x28, 0xd6, 0x0f, 0x12, 0x28, 0xd2, 0xf5, 0x14, 0x0e, 0x22, 0xd5,
+ 0x1f, 0xfe, 0x28, 0xd2, 0xdd, 0xe3, 0xe8, 0x0c, 0x12, 0xec, 0xee, 0x0c, 0xbd,
+ 0xdf, 0xe4, 0xbf, 0x81, 0x53, 0xf7, 0xce, 0x37, 0x1b, 0x30, 0x04, 0xd5, 0x1d,
+ 0xde, 0xf7, 0x10, 0x05, 0x11, 0x32, 0x03, 0xc6, 0xfc, 0xe8, 0xda, 0xea, 0xd4,
+ 0x3e, 0x0b, 0xfc, 0x17, 0x34, 0xd6, 0x56, 0x96, 0x25, 0xf0, 0xfc, 0x30, 0xe0,
+ 0xe7, 0x16, 0xe8, 0xcf, 0xe7, 0xe6, 0xfe, 0x97, 0xe4, 0xc1, 0x09, 0xe9, 0x6c,
+ 0x0e, 0xf8, 0xec, 0x2a, 0x04, 0x00, 0xe4, 0x23, 0x3c, 0xea, 0xb1, 0xf8, 0xcd,
+ 0x25, 0xdf, 0xcf, 0xfb, 0x05, 0x01, 0xf2, 0xf2, 0xb8, 0x0e, 0xcf, 0xf0, 0xec,
+ 0xf2, 0x19, 0xec, 0xea, 0xda, 0xe6, 0xef, 0xee, 0xe0, 0x81, 0xfc, 0xc5, 0x46,
+ 0xec, 0xca, 0x00, 0xf8, 0xe6, 0x07, 0xd6, 0x07, 0x3f, 0x03, 0x01, 0x25, 0x26,
+ 0xf1, 0xd0, 0xea, 0x0a, 0x0f, 0xeb, 0xe4, 0xec, 0xbc, 0xe0, 0x46, 0xe7, 0xf7,
+ 0xf1, 0x02, 0xdf, 0xe4, 0xdc, 0x51, 0xd0, 0xd7, 0xda, 0x38, 0xf0, 0x05, 0xf9,
+ 0x15, 0xf7, 0x01, 0x1a, 0xe9, 0xf2, 0x07, 0x19, 0xd7, 0xee, 0xd6, 0x2c, 0x24,
+ 0xa4, 0x33, 0xfd, 0x22, 0x13, 0x17, 0x59, 0xf0, 0x07, 0x25, 0xd8, 0xd9, 0xdf,
+ 0x35, 0xd7, 0xeb, 0x06, 0x00, 0xde, 0xf9, 0xe3, 0x0f, 0x54, 0xc6, 0x01, 0xfc,
+ 0x1f, 0x2d, 0x20, 0xcd, 0xc1, 0xfb, 0xc3, 0xb1, 0xc8, 0xf3, 0x49, 0xd4, 0x0a,
+ 0xf2, 0xfc, 0xe1, 0xd7, 0x19, 0xa0, 0x4d, 0x14, 0x33, 0x25, 0xf3, 0x0f, 0xa6,
+ 0xe8, 0x32, 0xf2, 0xde, 0xee, 0xd3, 0xf7, 0x38, 0xf7, 0x04, 0x43, 0x0a, 0xe5,
+ 0x17, 0xf2, 0x15, 0x0d, 0x46, 0x0a, 0x18, 0xb3, 0xf2, 0xe9, 0xaf, 0x03, 0xe0,
+ 0x0d, 0x42, 0xf3, 0xef, 0x36, 0xeb, 0xdf, 0xe7, 0xeb, 0xff, 0x13, 0x30, 0xb7,
+ 0xeb, 0xe9, 0xf9, 0xe6, 0x12, 0x11, 0x09, 0x25, 0xef, 0xf8, 0xf8, 0xf4, 0x03,
+ 0xf2, 0xdb, 0x10, 0x25, 0x06, 0xe6, 0x1f, 0x24, 0x16, 0xd3, 0xde, 0x0d, 0xb1,
+ 0xec, 0x30, 0x06, 0xf5, 0xd9, 0xb6, 0x11, 0x03, 0x11, 0xd8, 0xc3, 0xe1, 0x0b,
+ 0x04, 0x13, 0x37, 0xec, 0xd5, 0xda, 0xe6, 0xed, 0xf7, 0x16, 0x0f, 0x40, 0x29,
+ 0xd5, 0x20, 0xf9, 0x0c, 0xe8, 0x36, 0x3a, 0xe6, 0x26, 0xfe, 0xea, 0x22, 0xd6,
+ 0x0a, 0xc0, 0xee, 0x14, 0x44, 0x38, 0x2e, 0xe4, 0x0c, 0xd7, 0x27, 0xd0, 0x53,
+ 0xdd, 0xb1, 0x35, 0xf4, 0xdf, 0xd6, 0x7f, 0xf1, 0xcb, 0x33, 0xf2, 0x0d, 0x3c,
+ 0xee, 0x2e, 0x11, 0x2a, 0x38, 0x0d, 0xec, 0x6d, 0xe8, 0x2e, 0x28, 0xa4, 0xd7,
+ 0x44, 0x0e, 0x58, 0xfd, 0xd4, 0xfb, 0x2e, 0x0c, 0xf3, 0x04, 0x4f, 0x12, 0xf3,
+ 0x33, 0xf2, 0xf6, 0xc5, 0xd7, 0xfe, 0xf9, 0x2a, 0xef, 0xd0, 0x02, 0xb2, 0xfd,
+ 0x49, 0xae, 0xd9, 0x38, 0xf4, 0x1d, 0xf2, 0x42, 0x19, 0x10, 0x43, 0xb2, 0x15,
+ 0x03, 0x0c, 0xcb, 0x0d, 0x02, 0xde, 0x05, 0xd4, 0x05, 0x43, 0xcd, 0xa7, 0xe7,
+ 0xfd, 0xf5, 0x5f, 0x81, 0x5a, 0xd3, 0x0e, 0x00, 0x21, 0x00, 0xfa, 0xbc, 0x0a,
+ 0xd9, 0xdb, 0x00, 0xc5, 0x14, 0xef, 0xf4, 0x1f, 0xee, 0x4d, 0x5f, 0xaa, 0x19,
+ 0xd5, 0x04, 0x2c, 0xde, 0xd1, 0x21, 0xf9, 0xee, 0x6e, 0xc9, 0xbb, 0x15, 0xf0,
+ 0x10, 0xc4, 0x7c, 0xe3, 0xe3, 0x27, 0xe0, 0x4d, 0x16, 0x27, 0xaf, 0x0f, 0xbf,
+ 0xf1, 0x53, 0xfb, 0xa1, 0xde, 0x04, 0xcc, 0x36, 0xf3, 0x65, 0xf3, 0x01, 0xcd,
+ 0xea, 0x12, 0xe2, 0xd6, 0xa1, 0xa8, 0xf1, 0x04, 0x13, 0x41, 0xc5, 0xdc, 0x65,
+ 0xc9, 0x21, 0xfc, 0xf9, 0xfa, 0x18, 0xba, 0x3b, 0xd0, 0x81, 0xf4, 0x30, 0x25,
+ 0xff, 0xe2, 0x28, 0xff, 0xe8, 0xd2, 0xc2, 0x94, 0xc2, 0xe7, 0x1d, 0x48, 0xdf,
+ 0xbe, 0xe1, 0xce, 0xca, 0xfa, 0x12, 0x1e, 0xe3, 0xd6, 0x20, 0x44, 0xae, 0xcc,
+ 0xf8, 0xec, 0xe7, 0x22, 0x10, 0xa4, 0x4f, 0x21, 0x2a, 0x0a, 0xcf, 0x1b, 0xb6,
+ 0xec, 0xe8, 0x02, 0x0b, 0xe6, 0x1a, 0xe4, 0xcb, 0xa6, 0x13, 0xe1, 0xbf, 0xc7,
+ 0x96, 0xc0, 0xee, 0xd8, 0x00, 0x2c, 0x3d, 0xda, 0xe6, 0xc0, 0xf7, 0x13, 0xf8,
+ 0x1a, 0x30, 0xf0, 0xe5, 0x4d, 0x07, 0x18, 0x22, 0xa1, 0x04, 0xd1, 0xbe, 0x19,
+ 0xff, 0xef, 0xe0, 0xaa, 0x5b, 0xe0, 0xb9, 0xf3, 0x27, 0xc5, 0xd0, 0x04, 0x62,
+ 0xee, 0xda, 0x7b, 0x3a, 0xf8, 0x56, 0xbf, 0x26, 0x04, 0x09, 0xcb, 0x25, 0xf9,
+ 0xfd, 0x68, 0x04, 0xcf, 0x4e, 0x40, 0x32, 0x72, 0x18, 0x2b, 0xf1, 0xfd, 0x16,
+ 0x0a, 0xe3, 0xa4, 0x3b, 0x58, 0xf3, 0xba, 0x26, 0x41, 0xc8, 0x5a, 0x07, 0x6a,
+ 0x22, 0x4e, 0x2e, 0xaa, 0x37, 0x3f, 0x31, 0x14, 0x03, 0xf4, 0x10, 0xef, 0x31,
+ 0xce, 0x1e, 0xfe, 0xdf, 0x18, 0xe8, 0x18, 0x1a, 0x1b, 0xfb, 0xc5, 0xd1, 0x1f,
+ 0xdb, 0x1a, 0x31, 0xdd, 0x14, 0xb5, 0x6c, 0x74, 0x6d, 0xfe, 0x32, 0xec, 0xb0,
+ 0x24, 0x15, 0xfb, 0xd3, 0xca, 0xc4, 0x04, 0x02, 0xf2, 0x45, 0xcd, 0xfc, 0x0c,
+ 0x27, 0xe4, 0xf6, 0x29, 0x18, 0xd7, 0x35, 0xda, 0x01, 0x1b, 0x52, 0x13, 0x0b,
+ 0xef, 0xf0, 0x9a, 0x12, 0xbb, 0xc5, 0xdb, 0xda, 0xf5, 0xd3, 0x31, 0xcf, 0x49,
+ 0x23, 0x9a, 0xe4, 0xea, 0xd1, 0xe5, 0x05, 0xc9, 0xd3, 0x0b, 0xf2, 0x02, 0x36,
+ 0x13, 0xb2, 0x18, 0x1f, 0x33, 0xca, 0x0a, 0xe7, 0xfa, 0x41, 0xe9, 0xa3, 0xc1,
+ 0x7f, 0x98, 0x1a, 0x0f, 0x91, 0xe6, 0xe8, 0x1e, 0x40, 0xd4, 0xc4, 0xf6, 0x27,
+ 0xfe, 0x0b, 0x32, 0x1b, 0xfe, 0x19, 0x31, 0xfd, 0x14, 0xc2, 0xbe, 0xc0, 0xc9,
+ 0x26, 0xe3, 0xa3, 0xeb, 0x73, 0x5a, 0x44, 0xe4, 0xe3, 0xf2, 0x25, 0xed, 0xee,
+ 0x22, 0x1f, 0x08, 0xfb, 0x2b, 0xf3, 0x2a, 0xd3, 0xbc, 0xd2, 0xeb, 0x1d, 0xdc,
+ 0x02, 0x39, 0x04, 0x1b, 0x1b, 0xc2, 0xd3, 0x14, 0xeb, 0x1f, 0x05, 0x43, 0x10,
+ 0xec, 0xcb, 0xcb, 0x00, 0x15, 0x24, 0xf2, 0x00, 0x2b, 0xda, 0xf9, 0x02, 0xf0,
+ 0xfc, 0xce, 0x13, 0xfa, 0x11, 0xe4, 0xea, 0xc5, 0x61, 0xee, 0xd4, 0x1d, 0x08,
+ 0x7f, 0x1a, 0x44, 0x12, 0xef, 0x0a, 0xe2, 0xed, 0x08, 0x02, 0x21, 0x04, 0x4f,
+ 0x1c, 0x21, 0x04, 0x14, 0x10, 0xf7, 0xdb, 0xc8, 0x18, 0xde, 0x0a, 0x50, 0xac,
+ 0x25, 0x0e, 0xc4, 0x26, 0xeb, 0x28, 0x02, 0xed, 0x17, 0x2d, 0xf5, 0x0c, 0xf9,
+ 0xe1, 0x72, 0xe6, 0xbc, 0x23, 0x06, 0x01, 0xda, 0x1a, 0x15, 0xb4, 0x33, 0x02,
+ 0xe2, 0x1c, 0xcd, 0x0d, 0xd6, 0x19, 0x72, 0x17, 0xa9, 0x0e, 0x8e, 0xc6, 0xfa,
+ 0xd5, 0x29, 0x03, 0xd0, 0x26, 0x7f, 0x42, 0x18, 0xa7, 0x2a, 0x0c, 0x01, 0x00,
+ 0xfb, 0xe1, 0x23, 0x6e, 0x2c, 0xeb, 0x2f, 0x06, 0x1b, 0xf7, 0x16, 0x16, 0x5b,
+ 0xf8, 0x2f, 0x0c, 0x37, 0xde, 0xfc, 0xec, 0xff, 0x58, 0x18, 0x01, 0xc4, 0x9d,
+ 0xe5, 0xfc, 0x05, 0x37, 0x14, 0x12, 0xb5, 0xc4, 0xe8, 0xdf, 0x21, 0x33, 0x29,
+ 0x2b, 0x02, 0xa4, 0x3c, 0xd6, 0xfa, 0x20, 0xf5, 0x11, 0x03, 0x07, 0xb7, 0xd8,
+ 0xd0, 0xc0, 0xd5, 0x0f, 0xe3, 0xf4, 0xeb, 0xf0, 0xd7, 0x0e, 0x0b, 0x39, 0x29,
+ 0xdc, 0x0a, 0xfc, 0xf0, 0xec, 0x4c, 0x46, 0xf2, 0xfd, 0x33, 0x19, 0x13, 0x2c,
+ 0xe6, 0xc3, 0xdc, 0xfe, 0x1e, 0x23, 0x3a, 0x09, 0xfe, 0xfe, 0xce, 0x0e, 0xad,
+ 0x37, 0x4b, 0xc5, 0xec, 0xfa, 0xc4, 0x1b, 0x09, 0xf7, 0x1d, 0xef, 0xc1, 0x11,
+ 0x11, 0xfc, 0xe6, 0xc4, 0x0b, 0x15, 0x1d, 0x0b, 0xc8, 0xd2, 0xf9, 0x08, 0xb2,
+ 0x21, 0xf5, 0xf6, 0x2d, 0x30, 0xc4, 0x04, 0x0a, 0xe4, 0xc6, 0x09, 0x0b, 0xb0,
+ 0xf5, 0x06, 0x2b, 0x09, 0xcb, 0xc4, 0xf1, 0xf7, 0x41, 0x05, 0x08, 0xee, 0x41,
+ 0xeb, 0x34, 0x19, 0x28, 0x13, 0x03, 0xc4, 0xda, 0x1a, 0x27, 0x04, 0xf3, 0xda,
+ 0xf7, 0x02, 0xbe, 0x00, 0x36, 0xda, 0xb2, 0x60, 0xf9, 0xbf, 0x02, 0xe2, 0xce,
+ 0xf3, 0xd4, 0x11, 0x20, 0xe3, 0xc2, 0xac, 0x0f, 0x02, 0xf5, 0xef, 0x33, 0x38,
+ 0xe8, 0x1c, 0x12, 0x0e, 0x46, 0xc0, 0xe1, 0xf8, 0xda, 0x20, 0x21, 0xf2, 0x50,
+ 0xd7, 0x0e, 0x20, 0x04, 0x01, 0xfe, 0xb8, 0x35, 0xfb, 0x30, 0xc5, 0xe1, 0xe9,
+ 0xe2, 0xdc, 0x81, 0x70, 0xe7, 0x15, 0xfc, 0x6c, 0x05, 0xf9, 0x1b, 0x28, 0x29,
+ 0x06, 0x1b, 0xed, 0x86, 0x07, 0x17, 0xd7, 0x1c, 0xff, 0xb1, 0x18, 0xcd, 0xc1,
+ 0xeb, 0x31, 0xfe, 0xf8, 0xda, 0xf7, 0x02, 0x20, 0x09, 0xd6, 0x15, 0xd7, 0xe4,
+ 0x06, 0xdb, 0x11, 0xdb, 0xf4, 0x11, 0x15, 0xcc, 0x19, 0xed, 0xe4, 0x41, 0x2f,
+ 0xef, 0xfa, 0x0c, 0xe2, 0x07, 0x31, 0xf1, 0x30, 0xee, 0xf5, 0x09, 0x10, 0xe0,
+ 0xcb, 0x36, 0x20, 0x0d, 0xe4, 0x27, 0x3b, 0x1c, 0x1c, 0x3f, 0x0f, 0xd6, 0xef,
+ 0xee, 0x81, 0x30, 0x0d, 0xd5, 0x36, 0xf9, 0xd8, 0x12, 0xe5, 0x99, 0xf9, 0xb5,
+ 0x00, 0x0c, 0x3c, 0x18, 0x36, 0x30, 0xc0, 0x13, 0x06, 0xd7, 0xf6, 0x19, 0xbf,
+ 0xd5, 0x05, 0xfb, 0xbe, 0xf5, 0x20, 0xc8, 0x01, 0xe5, 0xd7, 0xf8, 0xe7, 0xe7,
+ 0xf4, 0xcc, 0xbc, 0xb8, 0x08, 0x1d, 0x24, 0x2d, 0x09, 0xf6, 0x1f, 0xef, 0xf0,
+ 0xff, 0x16, 0xef, 0x24, 0x0f, 0xf4, 0xed, 0xe9, 0x11, 0x16, 0x0e, 0xe6, 0x27,
+ 0x12, 0xe1, 0x0b, 0xdd, 0x2c, 0x12, 0x4e, 0xf0, 0x01, 0x08, 0xf5, 0x27, 0xcc,
+ 0xeb, 0xfc, 0x20, 0xf5, 0x23, 0xff, 0x2b, 0xaf, 0x0a, 0x6a, 0x57, 0xd8, 0xd1,
+ 0xec, 0xe3, 0xfc, 0x1b, 0xd9, 0x0e, 0xf7, 0x05, 0x05, 0x08, 0xbf, 0x05, 0xc6,
+ 0x0b, 0xf5, 0xdd, 0x0b, 0x1a, 0x00, 0x03, 0xdf, 0xc6, 0xf6, 0x0a, 0xfa, 0x05,
+ 0x19, 0xcf, 0xe1, 0x36, 0xd7, 0xb5, 0xf9, 0xe8, 0x14, 0x00, 0x08, 0xe3, 0x00,
+ 0x32, 0xda, 0xf6, 0x0f, 0x01, 0xec, 0x0a, 0x13, 0x04, 0xe4, 0xf3, 0x3e, 0xed,
+ 0x48, 0xf3, 0xf6, 0x03, 0x1a, 0x10, 0x02, 0xe7, 0xf0, 0xf9, 0xe1, 0xc8, 0xe8,
+ 0xec, 0x36, 0x19, 0x1f, 0x06, 0xdd, 0xe2, 0x05, 0xfb, 0x1b, 0x07, 0xec, 0xdc,
+ 0x00, 0xe1, 0x2b, 0xf7, 0x0b, 0xf7, 0x00, 0x03, 0x12, 0x15, 0x24, 0x0b, 0x00,
+ 0x00, 0x1d, 0xe6, 0xd6, 0x0f, 0x25, 0x7f, 0xe9, 0xd0, 0x44, 0x14, 0xcc, 0xe4,
+ 0xd8, 0xe4, 0xd6, 0xf2, 0x24, 0xf3, 0xfc, 0xc0, 0x05, 0xf9, 0x09, 0xe3, 0x03,
+ 0x46, 0xf3, 0xd3, 0xea, 0xe6, 0xea, 0xe6, 0xed, 0x02, 0xe7, 0xf5, 0xb4, 0x42,
+ 0x2e, 0xf5, 0xe2, 0x18, 0x36, 0xf2, 0x20, 0x12, 0xd7, 0xb3, 0x02, 0x0f, 0xfe,
+ 0x32, 0x08, 0xee, 0xde, 0xcf, 0xe7, 0xf9, 0xbd, 0x2a, 0x17, 0xf1, 0x0f, 0xdf,
+ 0x42, 0xe8, 0x24, 0x0c, 0xc7, 0xf3, 0x20, 0xfe, 0xec, 0x07, 0x31, 0xd9, 0xef,
+ 0x1b, 0x29, 0x0a, 0x32, 0xfa, 0xf8, 0x7f, 0xd4, 0x6f, 0x16, 0x1b, 0xae, 0xf6,
+ 0x25, 0x11, 0x04, 0xed, 0x07, 0xbf, 0x20, 0x06, 0xfd, 0xe1, 0xf7, 0xcd, 0xec,
+ 0x1e, 0xeb, 0x0a, 0xe0, 0xc2, 0xee, 0x17, 0x24, 0xc9, 0xdc, 0x17, 0x1f, 0x08,
+ 0xe7, 0x1c, 0xf3, 0x0a, 0x22, 0x09, 0xc3, 0xf2, 0x10, 0x27, 0xed, 0x07, 0x1e,
+ 0x36, 0x02, 0x12, 0x0e, 0x19, 0x12, 0x09, 0xe9, 0xfc, 0x20, 0xf5, 0xf0, 0x30,
+ 0xfb, 0x11, 0x45, 0x7f, 0xe6, 0x23, 0xb3, 0xfe, 0xe9, 0xff, 0x02, 0x1a, 0x1b,
+ 0x39, 0x01, 0xe7, 0xdf, 0xd3, 0x34, 0xce, 0xe3, 0x17, 0xed, 0xe4, 0x27, 0x2b,
+ 0xf7, 0x25, 0xc7, 0xf2, 0x2a, 0xbd, 0x28, 0xe7, 0xfd, 0xe4, 0x11, 0x27, 0x25,
+ 0x11, 0xf5, 0x0d, 0x21, 0xfc, 0xec, 0x09, 0xef, 0xdc, 0xd0, 0x05, 0x0b, 0xef,
+ 0x4e, 0x0f, 0x21, 0x0f, 0x42, 0xfa, 0xd5, 0x25, 0xd7, 0x2f, 0x24, 0x1d, 0x50,
+ 0xf6, 0x04, 0x1f, 0x27, 0x0a, 0x52, 0xca, 0xfb, 0xc1, 0x14, 0x1c, 0x2d, 0x3c,
+ 0x06, 0x0d, 0x33, 0x1c, 0x03, 0x02, 0xf9, 0xfa, 0x21, 0xeb, 0xeb, 0xf9, 0x06,
+ 0xe2, 0xf0, 0x1a, 0xe7, 0x01, 0xb2, 0x15, 0x0f, 0xb8, 0x2a, 0x04, 0xfb, 0x14,
+ 0xda, 0xe7, 0xff, 0x5f, 0xe1, 0xf2, 0x0d, 0xd8, 0xff, 0xf7, 0xbc, 0xe8, 0xa4,
+ 0x28, 0x1b, 0xee, 0xeb, 0x50, 0xef, 0x06, 0x04, 0xd0, 0xfa, 0xcd, 0x00, 0xc8,
+ 0xe7, 0x81, 0xf0, 0xdc, 0xee, 0xfb, 0xc1, 0xa8, 0xf9, 0x38, 0x12, 0x4c, 0x14,
+ 0x76, 0xe3, 0xf8, 0xf2, 0x50, 0xf9, 0xe5, 0x1c, 0xd8, 0x39, 0xf5, 0x76, 0x00,
+ 0x32, 0xca, 0x1b, 0xfd, 0xf9, 0x00, 0xf8, 0x12, 0x10, 0xed, 0x3b, 0x0c, 0x10,
+ 0xe9, 0x06, 0xee, 0xe9, 0xfc, 0xf0, 0x0c, 0x13, 0x1b, 0x06, 0x14, 0x15, 0xc4,
+ 0xc1, 0xbf, 0xfb, 0x34, 0xfc, 0xe4, 0x3b, 0x02, 0xcd, 0x35, 0x35, 0xed, 0x33,
+ 0x03, 0xef, 0x04, 0x36, 0xcc, 0xf6, 0xf2, 0x21, 0xe9, 0x15, 0xe1, 0xed, 0xdb,
+ 0x27, 0xf7, 0xbc, 0xb4, 0x20, 0xee, 0x01, 0xac, 0x4f, 0xc2, 0xbd, 0xfe, 0xc7,
+ 0xe5, 0x0a, 0x08, 0xbb, 0xf3, 0xf8, 0x47, 0xeb, 0xd6, 0x19, 0xf2, 0x65, 0x21,
+ 0x17, 0xb6, 0x0a, 0x11, 0x0f, 0xf0, 0xf4, 0x26, 0x19, 0xce, 0xd2, 0x4d, 0x2b,
+ 0xfa, 0x06, 0x10, 0x06, 0xe2, 0x37, 0x20, 0x3f, 0xef, 0x44, 0x4e, 0x1a, 0x57,
+ 0x43, 0x81, 0xae, 0x1e, 0x46, 0x1f, 0x0b, 0x3a, 0x03, 0xae, 0x0d, 0xeb, 0xd8,
+ 0xcc, 0x25, 0xe2, 0x32, 0xc8, 0xe5, 0x18, 0xcd, 0x1a, 0x1e, 0xe1, 0xde, 0x20,
+ 0x12, 0x30, 0xcf, 0xe5, 0xe8, 0x16, 0x31, 0x0e, 0x25, 0xfe, 0x17, 0x05, 0xe9,
+ 0xb7, 0xa1, 0x2e, 0xc2, 0x0d, 0xb8, 0x4a, 0xf7, 0xdf, 0xd8, 0xf9, 0xcf, 0xaa,
+ 0x36, 0x08, 0x2f, 0x0c, 0xca, 0x99, 0x02, 0xf8, 0x04, 0x22, 0xdd, 0x2c, 0xcb,
+ 0xf6, 0x13, 0x20, 0xef, 0x0f, 0xe4, 0x39, 0x32, 0x17, 0xef, 0xc3, 0xe6, 0x04,
+ 0xc3, 0xf0, 0xde, 0xcf, 0xdc, 0x4d, 0xf8, 0xbc, 0x12, 0xd4, 0x2b, 0xbe, 0xf7,
+ 0xb5, 0x12, 0x05, 0x02, 0xcb, 0x2e, 0xcc, 0x03, 0xbd, 0x5c, 0x11, 0xde, 0x2a,
+ 0xca, 0x33, 0xfb, 0xe9, 0xd8, 0x11, 0x64, 0xf6, 0xf7, 0x2f, 0xeb, 0x09, 0x47,
+ 0xf5, 0x29, 0x05, 0xfc, 0x27, 0xf2, 0xe0, 0xc3, 0x3e, 0x09, 0xf7, 0xec, 0xb5,
+ 0x11, 0xf8, 0x0d, 0x7f, 0xfa, 0xc4, 0x0c, 0xec, 0xf0, 0xea, 0x22, 0xe7, 0xd5,
+ 0xb4, 0xf5, 0xac, 0x14, 0xd8, 0xfb, 0xe0, 0xee, 0x22, 0xc7, 0x1c, 0xd8, 0x02,
+ 0xaa, 0xd9, 0xe2, 0x1f, 0x1f, 0xff, 0x25, 0x25, 0x1a, 0x20, 0xcd, 0xfa, 0x01,
+ 0xee, 0xec, 0xbf, 0x2e, 0x35, 0x07, 0x25, 0x16, 0x2d, 0x01, 0xcd, 0x19, 0x49,
+ 0xe4, 0x57, 0xff, 0xfb, 0xf2, 0xef, 0x09, 0x28, 0xf5, 0xa9, 0xd6, 0x00, 0xcf,
+ 0xf3, 0xe5, 0xc2, 0xfc, 0xca, 0xfd, 0x0d, 0x18, 0xde, 0x1d, 0xf4, 0xd7, 0x27,
+ 0x02, 0x33, 0x1e, 0xd7, 0x0c, 0x18, 0x41, 0x03, 0x1b, 0xee, 0x05, 0x26, 0x30,
+ 0x09, 0xd7, 0x14, 0xbd, 0xdf, 0x0e, 0xff, 0xe5, 0xfb, 0x28, 0xf8, 0x38, 0x17,
+ 0x08, 0xdd, 0xda, 0x15, 0xce, 0x08, 0xe6, 0xc4, 0xdc, 0x19, 0xe9, 0xd8, 0xc4,
+ 0x03, 0xe6, 0xcc, 0x4b, 0x0f, 0x1f, 0xc0, 0xfe, 0x15, 0xf1, 0x04, 0xec, 0x24,
+ 0xf7, 0xe8, 0x1f, 0x3c, 0xe9, 0x39, 0x23, 0x81, 0xac, 0xbf, 0x35, 0x2c, 0x14,
+ 0x00, 0xd5, 0x3b, 0xd0, 0x09, 0x03, 0xc3, 0xd6, 0x01, 0x01, 0xa9, 0xc0, 0x07,
+ 0x39, 0xa9, 0x2e, 0x0f, 0x44, 0xfb, 0x0a, 0x22, 0xe2, 0xc5, 0x21, 0x02, 0x21,
+ 0x08, 0x88, 0x10, 0xbc, 0xec, 0x9f, 0x27, 0x0e, 0xf8, 0xcd, 0xc6, 0x33, 0xf4,
+ 0x28, 0xc6, 0x07, 0x0f, 0x0c, 0x03, 0xc8, 0xde, 0xb4, 0xe9, 0x30, 0x1b, 0x37,
+ 0xe2, 0xcb, 0xef, 0x03, 0xc8, 0xdb, 0xcc, 0x0b, 0xf1, 0xc4, 0x34, 0x16, 0xb8,
+ 0x24, 0x40, 0x47, 0xe2, 0x10, 0x22, 0x0d, 0xaf, 0x01, 0x00, 0x18, 0x9a, 0x08,
+ 0xfd, 0x12, 0xd7, 0x0c, 0x37, 0x93, 0xdc, 0xcd, 0x20, 0xf0, 0x49, 0x14, 0x11,
+ 0xe3, 0x0c, 0xb8, 0xf0, 0x25, 0xd3, 0x30, 0x2d, 0x16, 0x47, 0x1f, 0x3e, 0xf6,
+ 0xc3, 0xfa, 0xb4, 0x41, 0x1d, 0xd1, 0x11, 0xff, 0xd5, 0xf3, 0xd6, 0x00, 0xef,
+ 0xcd, 0xb5, 0x13, 0xd4, 0xf8, 0xbb, 0xf0, 0x34, 0x6f, 0xb7, 0x1a, 0x05, 0xde,
+ 0xef, 0xf0, 0x2e, 0xd1, 0x10, 0xf0, 0xf2, 0xfb, 0x04, 0x04, 0xf3, 0xfe, 0x2a,
+ 0x23, 0x1d, 0xfa, 0x05, 0xc8, 0xcf, 0xb8, 0xcd, 0xb2, 0xf3, 0xe1, 0xd2, 0xc9,
+ 0x46, 0x26, 0x15, 0x0b, 0xea, 0x0d, 0x03, 0x0e, 0xa8, 0x00, 0xf7, 0x34, 0x1e,
+ 0x14, 0xe9, 0xed, 0x0f, 0x06, 0x12, 0xfb, 0xbe, 0x9f, 0x4d, 0xa7, 0x14, 0xd3,
+ 0x2f, 0xb5, 0xf7, 0x4b, 0x06, 0x2a, 0xdb, 0x23, 0x12, 0xaf, 0x05, 0xeb, 0x1c,
+ 0xad, 0xf4, 0xe9, 0xfd, 0x7f, 0xe1, 0xd3, 0xf7, 0x0f, 0x31, 0x28, 0xe0, 0xd3,
+ 0x2c, 0x16, 0xee, 0xcb, 0xfe, 0x12, 0xf0, 0xe8, 0xe9, 0xfa, 0x02, 0xc3, 0xcc,
+ 0xdd, 0xe8, 0xcc, 0xe2, 0xec, 0xf2, 0x00, 0x1f, 0xf9, 0xfc, 0xe7, 0xe3, 0xc6,
+ 0xb9, 0xdb, 0x58, 0x19, 0x2e, 0x04, 0x2e, 0x31, 0x39, 0x2c, 0xc8, 0xd4, 0xdd,
+ 0x1b, 0xf7, 0x22, 0xad, 0xd8, 0x13, 0x07, 0xc2, 0x27, 0xe6, 0x04, 0xee, 0xd2,
+ 0x0f, 0xd8, 0x16, 0x0a, 0x1b, 0x03, 0x09, 0xe9, 0xe0, 0x0d, 0xd2, 0x04, 0x09,
+ 0xc8, 0x29, 0x16, 0xe3, 0xe9, 0x23, 0xf5, 0x03, 0x40, 0xda, 0x58, 0x0e, 0x13,
+ 0x11, 0x01, 0x0d, 0x1d, 0x0a, 0x18, 0xa1, 0x3b, 0x7f, 0x7f, 0x1b, 0x3f, 0x06,
+ 0xd2, 0xee, 0xf8, 0x0f, 0x18, 0xf3, 0xca, 0xed, 0xe9, 0xef, 0x03, 0x2d, 0xe6,
+ 0xf6, 0x3e, 0x07, 0xf9, 0xe5, 0xf5, 0x2b, 0xee, 0xed, 0x1c, 0xfa, 0xfe, 0x14,
+ 0x1d, 0x12, 0x2d, 0xe8, 0xd1, 0xe7, 0x59, 0x9d, 0x0f, 0x02, 0xb8, 0xf9, 0x10,
+ 0x19, 0x10, 0xc5, 0x08, 0x5a, 0x19, 0xe2, 0x3c, 0xeb, 0x19, 0x0c, 0xc0, 0xe3,
+ 0x01, 0xed, 0xed, 0xc8, 0x08, 0xfc, 0xee, 0x29, 0xfc, 0x0c, 0x1a, 0xe3, 0x01,
+ 0xfe, 0xe1, 0x53, 0x0d, 0xd8, 0x01, 0xe6, 0x23, 0xfc, 0xfc, 0xbf, 0xfd, 0x14,
+ 0x4f, 0x08, 0xf8, 0x23, 0x05, 0xe1, 0xd3, 0xd6, 0xe1, 0x56, 0xb4, 0x01, 0xff,
+ 0xd6, 0xe6, 0xdd, 0x14, 0x0f, 0x2a, 0xf1, 0x00, 0xca, 0x21, 0xdf, 0x16, 0x0a,
+ 0x1f, 0xcf, 0x2a, 0x02, 0x56, 0xf8, 0x19, 0x1e, 0x10, 0xde, 0xf9, 0x0f, 0xdd,
+ 0xb2, 0x3c, 0x25, 0x1a, 0x30, 0xf8, 0x12, 0xf5, 0xbc, 0x5e, 0x0c, 0x1b, 0xfe,
+ 0x02, 0xec, 0x58, 0x29, 0x2e, 0xda, 0x07, 0xc8, 0x16, 0x1b, 0x1a, 0x2e, 0xd9,
+ 0xbb, 0x03, 0x24, 0xf5, 0x2c, 0x0f, 0xcf, 0x06, 0x7f, 0xf8, 0xc7, 0x14, 0xe2,
+ 0xd9, 0x05, 0xe5, 0x12, 0xf8, 0xd6, 0x01, 0xf0, 0xd4, 0x0e, 0x18, 0x1b, 0xd0,
+ 0x4c, 0xe3, 0xf5, 0xf9, 0xf6, 0xd5, 0xe4, 0xe9, 0x1a, 0xd1, 0x0b, 0x2d, 0xea,
+ 0x40, 0xf7, 0x29, 0xfb, 0xfa, 0x1f, 0xf8, 0xe0, 0xff, 0x05, 0x62, 0xf8, 0x08,
+ 0x7f, 0xaf, 0xdb, 0xe7, 0xe2, 0x39, 0xd6, 0xf7, 0xf7, 0xff, 0xce, 0xfc, 0x24,
+ 0x45, 0x0e, 0xfd, 0x58, 0xf7, 0xe0, 0x25, 0xdb, 0x1b, 0x19, 0xb7, 0x17, 0x1f,
+ 0x21, 0x11, 0xdd, 0x29, 0x26, 0x4a, 0x0a, 0x3a, 0x26, 0x07, 0x44, 0xcc, 0xe3,
+ 0x22, 0x3f, 0xb9, 0xe3, 0xf5, 0xcf, 0x30, 0xec, 0x27, 0xd7, 0x2f, 0x25, 0x04,
+ 0x13, 0x07, 0x1c, 0x05, 0x11, 0xef, 0xd2, 0x2c, 0xd5, 0x66, 0xf3, 0xea, 0xe1,
+ 0xff, 0xe3, 0xd3, 0x26, 0xc0, 0xd6, 0x2a, 0x40, 0x2d, 0xeb, 0x08, 0xed, 0x18,
+ 0x20, 0xf0, 0xe1, 0x13, 0x04, 0x12, 0x13, 0x27, 0x03, 0x0b, 0x04, 0x11, 0xf4,
+ 0xfe, 0x08, 0xdf, 0x2e, 0xd3, 0x17, 0xd1, 0xcd, 0xe9, 0xf0, 0x13, 0x08, 0x22,
+ 0x33, 0xda, 0xd9, 0xf9, 0xe9, 0x17, 0xfd, 0xe8, 0x05, 0x8f, 0xc6, 0xeb, 0xf9,
+ 0xc8, 0x31, 0xce, 0xa6, 0xde, 0xb9, 0xfb, 0xe1, 0x1d, 0xff, 0x0c, 0x78, 0xff,
+ 0xca, 0xf2, 0xb3, 0xfa, 0x0f, 0x23, 0xcb, 0x11, 0xbb, 0x3a, 0xe9, 0xda, 0xe6,
+ 0x12, 0xee, 0xeb, 0x01, 0xd7, 0xf8, 0xbb, 0xe7, 0xea, 0x23, 0x30, 0xff, 0xdb,
+ 0x0d, 0xc2, 0x33, 0x24, 0xcf, 0x56, 0xe1, 0xb0, 0xed, 0xe4, 0xfc, 0xdf, 0x2b,
+ 0x8e, 0x03, 0x1e, 0xeb, 0x05, 0xc0, 0xea, 0xbc, 0x2b, 0xce, 0x34, 0xd6, 0xdd,
+ 0xeb, 0x08, 0xeb, 0xd8, 0xc3, 0x5a, 0xc9, 0x05, 0x26, 0xc5, 0xd4, 0x0f, 0x65,
+ 0x26, 0x36, 0xde, 0xdf, 0xf1, 0x37, 0x27, 0x3e, 0xf3, 0xac, 0xbf, 0xfa, 0xd6,
+ 0x27, 0x0a, 0xda, 0x2d, 0xbf, 0x24, 0xc4, 0xe9, 0x63, 0xd8, 0xc0, 0x10, 0xe6,
+ 0x4f, 0xfc, 0x91, 0xb9, 0x1b, 0xec, 0xeb, 0x96, 0xf3, 0xd7, 0x5b, 0xe8, 0x74,
+ 0x1b, 0xdc, 0x07, 0x1d, 0x20, 0xf8, 0xef, 0xf9, 0xe2, 0x2d, 0x07, 0x3f, 0x28,
+ 0xf5, 0x7f, 0xdf, 0xc7, 0x1a, 0x18, 0x16, 0xcc, 0xd4, 0xf1, 0xf4, 0x19, 0xfc,
+ 0x22, 0xcf, 0xe4, 0xd8, 0x20, 0xf8, 0xaa, 0x3c, 0xde, 0x73, 0x0c, 0x25, 0x04,
+ 0x30, 0x19, 0xb3, 0x09, 0x4c, 0x46, 0x15, 0xfc, 0xd6, 0xe6, 0xcb, 0xef, 0xd6,
+ 0xfd, 0x26, 0x7f, 0x40, 0xcd, 0xd9, 0xfe, 0xfd, 0x1e, 0x19, 0xb9, 0xe2, 0x4d,
+ 0xfe, 0xf4, 0x05, 0xcb, 0x1f, 0xd2, 0x0d, 0xcc, 0xf6, 0xaf, 0x13, 0xf8, 0x0b,
+ 0x68, 0xcc, 0xd2, 0x6f, 0xac, 0x04, 0x36, 0x52, 0xf7, 0xef, 0xce, 0x00, 0x3c,
+ 0xb9, 0xd4, 0x0f, 0xf1, 0xe3, 0xf3, 0x33, 0x34, 0xef, 0x0c, 0xce, 0x59, 0x26,
+ 0x1f, 0xd9, 0xe3, 0x21, 0x16, 0x15, 0xf4, 0x08, 0x24, 0x20, 0x0a, 0x29, 0x02,
+ 0xe5, 0xcb, 0xf9, 0xe1, 0x32, 0x01, 0xf7, 0x05, 0x16, 0xe7, 0x28, 0xfd, 0x2f,
+ 0xce, 0xcf, 0x15, 0xdd, 0x55, 0xdd, 0xf3, 0x4b, 0x2e, 0xf9, 0xd4, 0x1d, 0x2f,
+ 0x43, 0x19, 0x99, 0xde, 0x81, 0xd3, 0xcd, 0xfa, 0x26, 0xcd, 0xcf, 0xcd, 0x10,
+ 0xe4, 0x0d, 0x44, 0xe9, 0x14, 0x6f, 0xcb, 0x46, 0xec, 0xf8, 0x11, 0xb7, 0xc6,
+ 0xf1, 0xee, 0xb8, 0x06, 0x83, 0xe2, 0xf1, 0xad, 0xec, 0x2e, 0x4a, 0xbe, 0x0b,
+ 0xf7, 0xf9, 0x03, 0x16, 0x0a, 0x16, 0xc7, 0x21, 0xe3, 0xc0, 0xd4, 0xf7, 0x49,
+ 0x17, 0xb5, 0x76, 0x03, 0x26, 0xc7, 0xe0, 0x2a, 0x1e, 0xd2, 0x28, 0x0f, 0xb2,
+ 0xf9, 0xf6, 0xbe, 0x60, 0x06, 0x15, 0xcf, 0xbc, 0x2c, 0xef, 0x08, 0xd7, 0x0d,
+ 0x02, 0xe6, 0x39, 0xb1, 0xc7, 0x0b, 0x0a, 0x40, 0x51, 0xe7, 0xe6, 0xcf, 0x11,
+ 0xa0, 0xce, 0xf7, 0x0f, 0xac, 0x14, 0xdd, 0x22, 0xe5, 0x01, 0xd0, 0xd6, 0x33,
+ 0xff, 0xa2, 0x1c, 0x02, 0xee, 0x24, 0x17, 0x46, 0xf3, 0x03, 0xf4, 0x17, 0xf8,
+ 0x01, 0xee, 0x47, 0x78, 0xf3, 0x24, 0x95, 0x16, 0xf0, 0x18, 0xc1, 0x21, 0xe9,
+ 0x45, 0x02, 0xf4, 0x21, 0x03, 0x2a, 0xe1, 0x27, 0x43, 0xdb, 0x2f, 0xf4, 0x1c,
+ 0xf1, 0xd3, 0x2a, 0xde, 0x45, 0xbd, 0x25, 0x65, 0xea, 0x09, 0x03, 0x0a, 0x43,
+ 0xec, 0x27, 0x2b, 0xe1, 0x9b, 0x0e, 0xf9, 0xe4, 0xda, 0x05, 0xc1, 0xe8, 0xe4,
+ 0x00, 0x05, 0x0e, 0xec, 0x02, 0xf3, 0xd8, 0x40, 0x33, 0x13, 0xc7, 0x04, 0xf7,
+ 0x3f, 0xf5, 0xe8, 0x16, 0x1e, 0xd1, 0xec, 0x0a, 0x15, 0x11, 0xd1, 0x09, 0x0e,
+ 0xd7, 0xf4, 0x0b, 0xd2, 0x28, 0xdf, 0xc2, 0x29, 0xe7, 0x43, 0x31, 0xeb, 0x52,
+ 0x0c, 0x20, 0xf2, 0xe2, 0xea, 0x00, 0xd3, 0x02, 0x61, 0x61, 0x0c, 0xed, 0xe7,
+ 0x1d, 0x06, 0xa3, 0xf7, 0xf0, 0xd8, 0xd3, 0x41, 0xe0, 0xe9, 0xc0, 0xf7, 0x07,
+ 0x35, 0x25, 0xf5, 0xb9, 0x05, 0xd5, 0xf2, 0x12, 0x16, 0x37, 0xdc, 0x00, 0x1d,
+ 0xba, 0xc4, 0x13, 0xe2, 0x37, 0x10, 0x09, 0x27, 0x7f, 0x01, 0xb9, 0x0b, 0xf7,
+ 0xf1, 0x1f, 0xe6, 0x13, 0xbc, 0xf2, 0xd4, 0x25, 0x31, 0x30, 0xff, 0xf3, 0xcb,
+ 0xc9, 0xd4, 0xe9, 0xe0, 0x00, 0xcb, 0x2d, 0xcd, 0xdb, 0xfc, 0xfd, 0x05, 0xdb,
+ 0xe0, 0xe6, 0x7f, 0xf5, 0x27, 0x19, 0xbf, 0xce, 0xed, 0xe5, 0x19, 0x11, 0xd4,
+ 0xc0, 0x11, 0x1b, 0x0f, 0x00, 0xcd, 0xe8, 0x08, 0x15, 0x05, 0xd0, 0x1c, 0xe1,
+ 0xf6, 0x28, 0x13, 0x1d, 0xf7, 0xef, 0xe9, 0xcc, 0x13, 0x54, 0x6e, 0x18, 0xe0,
+ 0xfe, 0x08, 0xc1, 0xc9, 0xfd, 0xee, 0xef, 0x03, 0x30, 0x3b, 0xd9, 0x01, 0xe9,
+ 0x11, 0xca, 0xc1, 0xe7, 0xfd, 0x49, 0x16, 0x0d, 0xb3, 0x0d, 0xfe, 0x3c, 0xfd,
+ 0xec, 0x15, 0xd5, 0x1c, 0x38, 0x0e, 0x37, 0xd9, 0x00, 0x33, 0xda, 0xfd, 0x19,
+ 0xfc, 0x21, 0xef, 0xe4, 0x3d, 0xfb, 0xd3, 0xf4, 0xfe, 0x1f, 0x17, 0x0b, 0x0e,
+ 0xd6, 0xae, 0xd1, 0xf7, 0x33, 0x0a, 0xf3, 0x1d, 0x07, 0xd8, 0xef, 0x27, 0xf7,
+ 0xe3, 0xec, 0xeb, 0x10, 0x37, 0x32, 0xe2, 0x06, 0xe9, 0xdb, 0x02, 0xd7, 0xd6,
+ 0xf3, 0xf2, 0x0f, 0x18, 0xf6, 0x26, 0xda, 0x20, 0x22, 0x1e, 0x01, 0xff, 0xef,
+ 0x25, 0x23, 0x25, 0x7f, 0x4f, 0x18, 0xd5, 0x1c, 0x01, 0x0b, 0xe7, 0xef, 0xe4,
+ 0xe5, 0x0c, 0xf0, 0xf8, 0xe3, 0x28, 0xbb, 0x35, 0xea, 0xec, 0x35, 0xf3, 0xc8,
+ 0xf2, 0xc4, 0xe7, 0x10, 0x00, 0x10, 0x01, 0x19, 0xf2, 0x0e, 0xff, 0x07, 0x0c,
+ 0xce, 0x40, 0x22, 0x3d, 0x0d, 0x07, 0xee, 0xcb, 0x30, 0xf8, 0x0b, 0xd6, 0xdb,
+ 0x01, 0xed, 0xed, 0xd0, 0xea, 0x32, 0x05, 0xe1, 0xf2, 0x1a, 0x1d, 0xec, 0x33,
+ 0xd0, 0x2a, 0x08, 0x20, 0xe3, 0x30, 0x03, 0xb1, 0x0c, 0x04, 0x30, 0xe7, 0xde,
+ 0xf8, 0xe5, 0x1b, 0x14, 0x05, 0xe0, 0x08, 0x1a, 0xee, 0xe1, 0x10, 0x12, 0x22,
+ 0x19, 0x1f, 0xfa, 0xc3, 0x14, 0x1b, 0x41, 0xd5, 0x46, 0x1b, 0xea, 0xde, 0x31,
+ 0x18, 0xfc, 0x39, 0xf6, 0xfd, 0x02, 0x1f, 0x5e, 0xed, 0x47, 0x0d, 0x81, 0xe8,
+ 0xc6, 0x35, 0x04, 0x2e, 0x10, 0x0d, 0xb4, 0x17, 0xf3, 0x19, 0x0e, 0x0c, 0x0e,
+ 0x14, 0x01, 0x60, 0x45, 0xda, 0x09, 0xd2, 0x10, 0xe8, 0xf7, 0x12, 0x53, 0xf1,
+ 0xff, 0x4f, 0x01, 0xe7, 0xd2, 0x00, 0xc2, 0xb3, 0xed, 0x2b, 0xf1, 0x28, 0xc1,
+ 0xfe, 0x3a, 0xf9, 0x1b, 0x16, 0xeb, 0x19, 0xf9, 0xff, 0x08, 0x43, 0x25, 0xf3,
+ 0x1a, 0x34, 0xb5, 0x33, 0xf8, 0xea, 0x87, 0x18, 0x18, 0xec, 0xe8, 0x13, 0xd1,
+ 0x24, 0xea, 0x00, 0xed, 0x13, 0xf2, 0xd0, 0x02, 0x01, 0x18, 0x17, 0xf9, 0x0e,
+ 0x23, 0x23, 0xf2, 0x13, 0x21, 0x1e, 0x01, 0xe8, 0x22, 0xd6, 0xc9, 0xee, 0xd9,
+ 0x1f, 0xfd, 0x08, 0xc4, 0x56, 0x2f, 0x2d, 0x8b, 0x15, 0x1b, 0xef, 0xf8, 0x0d,
+ 0xe2, 0x22, 0xeb, 0x15, 0x07, 0x55, 0xf4, 0x24, 0xf6, 0xd8, 0x06, 0xd7, 0x56,
+ 0x2b, 0x3a, 0xe1, 0x0a, 0x10, 0xa1, 0xfd, 0x7f, 0x22, 0xc6, 0xf9, 0x0c, 0xd3,
+ 0xdd, 0xd6, 0x15, 0x23, 0xfe, 0x6d, 0xdf, 0xe1, 0x21, 0xe1, 0xef, 0xed, 0xf6,
+ 0xcc, 0x1b, 0xdb, 0xf8, 0xfa, 0xeb, 0xf6, 0xef, 0xe5, 0xf4, 0x04, 0x24, 0x30,
+ 0x01, 0x2d, 0xf9, 0xfc, 0xfc, 0xf8, 0x06, 0x13, 0x31, 0x2f, 0xc8, 0xc5, 0xe8,
+ 0x61, 0xf2, 0x03, 0x00, 0xf4, 0xcd, 0xfb, 0xf5, 0x01, 0xf1, 0x0f, 0x26, 0x06,
+ 0xf5, 0xe8, 0xea, 0xc6, 0x00, 0x0a, 0xf5, 0xff, 0x2e, 0x08, 0xfa, 0xdb, 0xb7,
+ 0x24, 0x12, 0x1d, 0xf5, 0x1c, 0xd1, 0x3c, 0x0b, 0xef, 0x10, 0xea, 0x06, 0x16,
+ 0xe0, 0xa8, 0xd5, 0xdb, 0x19, 0xfe, 0x18, 0xe8, 0x08, 0x1c, 0x2b, 0x25, 0x27,
+ 0x0b, 0x38, 0x22, 0xf8, 0x17, 0xb1, 0x5f, 0xea, 0xe0, 0xa0, 0x53, 0x60, 0xe8,
+ 0x17, 0x12, 0x2d, 0x10, 0x49, 0x2b, 0xc0, 0xf4, 0xf0, 0xdc, 0x08, 0xb8, 0x0c,
+ 0x10, 0x16, 0x2a, 0xf7, 0xe7, 0xe4, 0x06, 0xfe, 0xc5, 0x31, 0x03, 0xef, 0xf6,
+ 0x4a, 0x1a, 0x27, 0x4b, 0x54, 0xd8, 0xcc, 0x00, 0xfa, 0xe0, 0xf0, 0x30, 0x0f,
+ 0x40, 0xdf, 0x00, 0x33, 0xf4, 0xd0, 0x13, 0x15, 0xfb, 0x29, 0xc6, 0x48, 0x0d,
+ 0x13, 0x06, 0x43, 0xcc, 0xe7, 0x7f, 0xe9, 0xed, 0x0b, 0x1c, 0x25, 0xfe, 0xf9,
+ 0xf9, 0xbd, 0xc4, 0xea, 0x2c, 0xdf, 0x0d, 0xc7, 0x20, 0x20, 0xe1, 0xde, 0x68,
+ 0xf2, 0x22, 0xcf, 0xef, 0x13, 0xff, 0xe8, 0x27, 0x0a, 0x48, 0xd4, 0x08, 0x68,
+ 0x1f, 0x14, 0xff, 0x0b, 0x1b, 0x49, 0xc7, 0xea, 0x04, 0xce, 0x0d, 0xd2, 0x99,
+ 0xe1, 0xd4, 0xff, 0xf6, 0x0c, 0x25, 0x30, 0x03, 0x43, 0x15, 0x35, 0xfa, 0xe9,
+ 0x21, 0x05, 0x1f, 0x27, 0x33, 0x1b, 0xd1, 0xdc, 0xf2, 0x29, 0xd0, 0xee, 0xfa,
+ 0xc1, 0x06, 0x13, 0xf0, 0x4b, 0x05, 0x17, 0xcf, 0xf8, 0x08, 0x0d, 0xf9, 0x36,
+ 0x11, 0xdf, 0xfe, 0xc7, 0xb0, 0xda, 0xea, 0x33, 0x5f, 0x3c, 0x20, 0xff, 0xff,
+ 0x17, 0x08, 0xd8, 0xf5, 0x22, 0xfa, 0xd6, 0xe6, 0x43, 0x17, 0xe2, 0x91, 0xfe,
+ 0xf6, 0x7a, 0xe3, 0xf2, 0xf1, 0x04, 0xff, 0xda, 0xf8, 0xee, 0x0d, 0xc8, 0xea,
+ 0xc5, 0xeb, 0x17, 0x06, 0x11, 0xd2, 0xfd, 0x7f, 0x1b, 0x0c, 0x37, 0xe1, 0x0d,
+ 0x3d, 0x3c, 0x3c, 0x35, 0x15, 0xe0, 0x32, 0x03, 0x1d, 0xe3, 0x0e, 0x13, 0xdd,
+ 0xd9, 0x14, 0x12, 0x08, 0xc5, 0x25, 0x1b, 0xd3, 0xfd, 0xe9, 0x05, 0x22, 0x18,
+ 0x29, 0x0c, 0xbc, 0xe0, 0x01, 0xdb, 0xdb, 0xe8, 0x39, 0x1b, 0x2d, 0x1c, 0xdf,
+ 0xf0, 0xfe, 0x2c, 0xec, 0xf5, 0x3f, 0x0f, 0xed, 0xf2, 0x2f, 0xf3, 0xf7, 0x23,
+ 0xff, 0x4e, 0xd2, 0xe6, 0x6b, 0x0b, 0x05, 0x11, 0xf4, 0xfb, 0x15, 0xe9, 0xed,
+ 0x16, 0x25, 0xa5, 0xfe, 0x47, 0x2a, 0xd7, 0xf6, 0x4c, 0x0b, 0xd7, 0xc7, 0xd6,
+ 0xe6, 0xcb, 0xcd, 0xfb, 0xec, 0xe7, 0x00, 0xd4, 0xda, 0x52, 0xe0, 0x21, 0xbf,
+ 0xcf, 0x3b, 0xe3, 0x1e, 0xbb, 0xab, 0x44, 0x56, 0x7e, 0xac, 0x26, 0x25, 0xfc,
+ 0xdb, 0xec, 0x01, 0xe9, 0xea, 0xf9, 0x49, 0x36, 0x03, 0x32, 0x04, 0x18, 0xfe,
+ 0xc3, 0xb2, 0xba, 0x7f, 0xec, 0xe6, 0xbf, 0x34, 0x01, 0x25, 0x0e, 0xde, 0xe6,
+ 0x0e, 0x8d, 0xcc, 0x28, 0x0c, 0x1a, 0x24, 0x1f, 0xd2, 0x1f, 0x01, 0x0b, 0x28,
+ 0xd7, 0xc9, 0x38, 0xf3, 0xc4, 0x5f, 0xf3, 0xcb, 0xea, 0xf3, 0xcf, 0xd0, 0xdc,
+ 0xe6, 0xd5, 0x1f, 0xc1, 0x1d, 0xfe, 0xfd, 0x88, 0x1e, 0xf1, 0x11, 0x05, 0x1b,
+ 0xec, 0xb0, 0xa4, 0xf1, 0x1c, 0xb8, 0x7b, 0x29, 0x10, 0x5d, 0x16, 0xf5, 0xb4,
+ 0xb7, 0x0a, 0x2b, 0x1d, 0x3c, 0xc0, 0xfd, 0xde, 0xe7, 0x32, 0xc6, 0x1a, 0xd4,
+ 0xc6, 0x17, 0x02, 0x06, 0xc4, 0xe0, 0x35, 0xaf, 0xd9, 0x02, 0xbf, 0x22, 0x59,
+ 0xc8, 0x14, 0xed, 0xb6, 0xd3, 0x5b, 0xf3, 0xb3, 0xd4, 0x19, 0xfd, 0x7f, 0xde,
+ 0x2d, 0xd5, 0xfe, 0xe5, 0x1e, 0xf5, 0xd5, 0xf0, 0x36, 0x07, 0xe1, 0x25, 0xc9,
+ 0x11, 0x29, 0x8b, 0xed, 0xbd, 0x19, 0x14, 0x74, 0xb3, 0xd9, 0xf0, 0x2d, 0x11,
+ 0x1e, 0xd4, 0x30, 0xb6, 0xe0, 0xff, 0xc4, 0x5d, 0xf5, 0x30, 0xc0, 0x96, 0x0c,
+ 0x03, 0x06, 0x11, 0xe5, 0xf3, 0xa1, 0x03, 0xe6, 0xe3, 0x31, 0xb7, 0x1b, 0x3c,
+ 0xec, 0xff, 0xef, 0x21, 0x10, 0x21, 0xdf, 0x18, 0xf2, 0x2e, 0xdf, 0xbc, 0x23,
+ 0x73, 0x0f, 0x05, 0xd4, 0x26, 0x0d, 0xf3, 0x02, 0xc9, 0x0d, 0x33, 0x3e, 0xd3,
+ 0xda, 0x21, 0xd8, 0xe9, 0x24, 0x18, 0x03, 0xd1, 0xf1, 0xdd, 0xec, 0xf0, 0x15,
+ 0x29, 0x12, 0x18, 0x00, 0xf4, 0x1c, 0xc1, 0x14, 0x47, 0xf6, 0xba, 0x5e, 0x0d,
+ 0x46, 0x17, 0x1e, 0x15, 0x05, 0x04, 0xd5, 0x1e, 0x6b, 0xea, 0x2e, 0x21, 0xab,
+ 0xf7, 0xc5, 0x4c, 0xdb, 0x31, 0x0a, 0x15, 0x07, 0x4d, 0x1a, 0xcf, 0xf3, 0x24,
+ 0xbf, 0x0e, 0x0d, 0xdf, 0xdb, 0x14, 0x01, 0x01, 0x38, 0x2d, 0x34, 0x2f, 0x1c,
+ 0x09, 0xde, 0x2c, 0x0c, 0xc0, 0xf0, 0x23, 0x02, 0xb5, 0x04, 0x3c, 0xd7, 0x1c,
+ 0xfb, 0x20, 0xc5, 0x04, 0xdf, 0x48, 0x15, 0x3d, 0x12, 0xeb, 0xe6, 0x12, 0xd1,
+ 0xde, 0x39, 0x33, 0x33, 0x05, 0xfb, 0xdb, 0xf3, 0x24, 0xd4, 0x1b, 0xd1, 0x30,
+ 0xe8, 0xff, 0x0e, 0xea, 0xfc, 0xf9, 0xcc, 0x4b, 0xd8, 0x36, 0xcd, 0x3e, 0xdd,
+ 0xf9, 0x03, 0xe2, 0xf9, 0x0a, 0xd2, 0xae, 0xf0, 0x1c, 0xe9, 0xf0, 0x28, 0x15,
+ 0x28, 0xac, 0x63, 0x33, 0x7f, 0xc7, 0xe9, 0xc8, 0x15, 0x34, 0xcd, 0xf4, 0xbe,
+ 0x08, 0x23, 0x39, 0xfc, 0x22, 0xf2, 0x02, 0xf9, 0x15, 0xb2, 0x21, 0xc6, 0x24,
+ 0x02, 0x93, 0xf1, 0xc3, 0x1d, 0x18, 0x1e, 0xde, 0xae, 0x01, 0xee, 0xb6, 0x67,
+ 0xe1, 0x26, 0xc2, 0x05, 0x01, 0x06, 0x28, 0x33, 0xfe, 0xe2, 0xe5, 0xd0, 0xbc,
+ 0x1b, 0xcf, 0x1b, 0xdb, 0x3f, 0xe4, 0x16, 0x15, 0x2d, 0x52, 0x5e, 0xfb, 0x22,
+ 0xd2, 0x46, 0xec, 0x15, 0xe9, 0x2c, 0xcd, 0x24, 0x22, 0xed, 0xea, 0xfa, 0xf5,
+ 0xc3, 0xf5, 0xb3, 0x81, 0x04, 0xf3, 0x90, 0xcc, 0x4f, 0xcd, 0x43, 0xe5, 0xfd,
+ 0x22, 0x9b, 0x15, 0x01, 0xc4, 0x2a, 0x3b, 0xe5, 0x04, 0x09, 0xe5, 0xaa, 0xf8,
+ 0xc2, 0xcc, 0x13, 0x11, 0x8b, 0x39, 0xaf, 0x0d, 0xfc, 0xee, 0xff, 0xfd, 0x1c,
+ 0xfe, 0xd6, 0x5f, 0xec, 0xcf, 0xc2, 0xc1, 0x0f, 0x68, 0x22, 0xf2, 0x3c, 0xd3,
+ 0xba, 0x12, 0x06, 0xfe, 0x11, 0x7d, 0xd1, 0xca, 0xdd, 0xcc, 0x15, 0x10, 0xed,
+ 0x05, 0xb8, 0xad, 0xbf, 0x16, 0x58, 0x2b, 0xed, 0x21, 0x1b, 0xf4, 0x27, 0xe7,
+ 0x00, 0xe0, 0x5f, 0x12, 0xc0, 0xc1, 0x0f, 0x45, 0xfa, 0xd1, 0x44, 0xed, 0x16,
+ 0x22, 0x02, 0xdc, 0xca, 0x4a, 0xca, 0xfb, 0xe7, 0xd9, 0xea, 0x2b, 0x12, 0xbb,
+ 0xcf, 0x21, 0xca, 0x1c, 0x1d, 0x39, 0xeb, 0xc8, 0xab, 0x21, 0xd5, 0xd0, 0x03,
+ 0xca, 0xf6, 0xcb, 0xe4, 0xf0, 0x3e, 0xd9, 0x2d, 0x03, 0x16, 0xfb, 0xfe, 0x08,
+ 0xeb, 0x36, 0x12, 0x16, 0x23, 0x17, 0x1d, 0x34, 0xe4, 0xfa, 0x19, 0x1a, 0xb1,
+ 0xfb, 0xea, 0x2b, 0x9a, 0xfe, 0xfb, 0x3d, 0x40, 0xd1, 0x5d, 0x5b, 0xe4, 0x2d,
+ 0xac, 0xd0, 0xc7, 0xfd, 0xca, 0x11, 0x7e, 0x2c, 0x01, 0xf9, 0xd2, 0x2b, 0xe4,
+ 0x7f, 0x20, 0xdd, 0xfc, 0xe6, 0x0c, 0x8c, 0x17, 0xff, 0xf5, 0x50, 0x23, 0x10,
+ 0xc7, 0x0f, 0x09, 0x20, 0xb1, 0xfe, 0xfa, 0xf9, 0x3e, 0x0a, 0xf6, 0xfa, 0x36,
+ 0xe2, 0xca, 0xf5, 0x26, 0x97, 0x3f, 0x0a, 0xcb, 0x17, 0xf6, 0x05, 0xdd, 0x41,
+ 0x00, 0xdc, 0xcc, 0x28, 0xed, 0xe7, 0xcd, 0xf4, 0xe9, 0xba, 0x81, 0xcb, 0xc1,
+ 0xc1, 0xfc, 0xde, 0x18, 0x11, 0xfc, 0xe8, 0x02, 0xf4, 0x05, 0x22, 0xd0, 0x06,
+ 0x0f, 0xed, 0x2c, 0x33, 0xfc, 0xf4, 0xf7, 0xd3, 0xf5, 0xb1, 0xcf, 0x01, 0xe3,
+ 0xf8, 0x05, 0xc9, 0xe7, 0xfb, 0x47, 0xad, 0xfc, 0x08, 0x0e, 0xb2, 0x20, 0xcb,
+ 0x16, 0xf9, 0x1e, 0x22, 0xec, 0xe4, 0x46, 0xf9, 0xf2, 0x5a, 0x01, 0xc7, 0xeb,
+ 0xfa, 0x25, 0xf2, 0xf5, 0x06, 0x26, 0xdc, 0x09, 0x05, 0xe1, 0xbd, 0xdc, 0x15,
+ 0x08, 0xa9, 0x10, 0x1d, 0xf9, 0x02, 0x28, 0xe1, 0xf9, 0x19, 0x0e, 0xf0, 0xed,
+ 0xe1, 0xef, 0x20, 0x44, 0x43, 0xd1, 0xf1, 0xfd, 0xc0, 0x1e, 0xda, 0x95, 0xd4,
+ 0xe8, 0x49, 0xed, 0xb3, 0xee, 0x2f, 0xc8, 0x03, 0xe9, 0x0c, 0x14, 0xde, 0xd9,
+ 0x2a, 0x75, 0xe6, 0xfd, 0x0d, 0x2e, 0x47, 0xd1, 0x33, 0x16, 0x12, 0xd0, 0x3a,
+ 0x7e, 0x12, 0xc5, 0xc4, 0xf8, 0xa0, 0xc1, 0x3e, 0x1e, 0xe6, 0x99, 0x3d, 0x06,
+ 0x00, 0xf5, 0xe8, 0xea, 0x73, 0xe3, 0x18, 0x07, 0x63, 0x26, 0xf2, 0xcf, 0xcc,
+ 0x0a, 0x1d, 0xcc, 0x35, 0x54, 0xd6, 0x3d, 0xcc, 0x44, 0xd2, 0xf2, 0x38, 0x09,
+ 0x07, 0xc2, 0x7f, 0xd3, 0xfb, 0x31, 0xfa, 0xdb, 0x07, 0xf8, 0x43, 0xab, 0x63,
+ 0x0f, 0xd5, 0x01, 0xff, 0xfb, 0xdb, 0x08, 0xfa, 0x1b, 0x38, 0xf9, 0x0f, 0x0c,
+ 0x40, 0xe6, 0xa5, 0xe0, 0xc5, 0x4f, 0x20, 0xe8, 0x3c, 0x2d, 0x21, 0xe6, 0xd9,
+ 0xef, 0x0a, 0xd1, 0xfd, 0xc7, 0xb6, 0x08, 0xb9, 0x95, 0x39, 0x60, 0x14, 0x0f,
+ 0xee, 0xdd, 0x12, 0x47, 0xe7, 0xaf, 0xdb, 0x10, 0xf9, 0x5d, 0x2b, 0x16, 0x0f,
+ 0xf8, 0x29, 0xda, 0x12, 0x00, 0x0f, 0xdf, 0xe0, 0x00, 0x0e, 0xdb, 0x0a, 0xc1,
+ 0x7f, 0x07, 0xf7, 0x47, 0xa1, 0xf5, 0xcc, 0xd9, 0xf8, 0x2b, 0xed, 0xf8, 0x1b,
+ 0xa4, 0xd2, 0xd2, 0x6b, 0x38, 0x26, 0x49, 0xee, 0x2e, 0x21, 0x0f, 0xee, 0xfe,
+ 0xe9, 0x40, 0xd5, 0xee, 0xe8, 0xd6, 0x3a, 0xbc, 0xd4, 0x1c, 0xf9, 0x10, 0xfa,
+ 0xde, 0xd3, 0x11, 0x2a, 0x00, 0x2c, 0x00, 0x25, 0xe1, 0x2d, 0xff, 0x1a, 0xfa,
+ 0x23, 0xf0, 0x26, 0xd7, 0xfd, 0xe7, 0x21, 0x3e, 0x02, 0xfa, 0x05, 0x08, 0x63,
+ 0x15, 0xc4, 0xcd, 0x1c, 0x34, 0xd3, 0x1d, 0xee, 0xea, 0x05, 0xa7, 0xed, 0xf8,
+ 0xed, 0xe9, 0xd7, 0xd7, 0x00, 0x0f, 0xcd, 0xdd, 0xfc, 0xd1, 0x09, 0xcf, 0xfe,
+ 0x3c, 0x00, 0xf5, 0xee, 0xf3, 0x04, 0x00, 0x44, 0xcf, 0x24, 0xe8, 0xf0, 0xcc,
+ 0xe1, 0x08, 0x14, 0x33, 0x18, 0xf0, 0x0b, 0x48, 0x64, 0xed, 0x0c, 0x2e, 0xe1,
+ 0xce, 0x27, 0xef, 0xee, 0x41, 0xf7, 0xba, 0xce, 0xce, 0xfa, 0x1d, 0xda, 0x90,
+ 0x11, 0xb5, 0xfb, 0xf7, 0xbd, 0xfa, 0xfb, 0x1b, 0x2d, 0xc1, 0xfa, 0x4c, 0x7f,
+ 0x0e, 0x9f, 0xc0, 0xce, 0x0f, 0xe9, 0xcb, 0xd1, 0x2f, 0x28, 0x03, 0xc9, 0xd5,
+ 0x39, 0x00, 0xec, 0xfa, 0x17, 0xef, 0xcf, 0xd9, 0xee, 0x1c, 0x65, 0xf8, 0x38,
+ 0x02, 0xfa, 0x2f, 0x1c, 0x23, 0xed, 0x3a, 0xde, 0x0b, 0x36, 0xf3, 0x50, 0x04,
+ 0x05, 0x13, 0xe5, 0x13, 0xec, 0xcd, 0xc8, 0xef, 0x09, 0xa9, 0xfd, 0x00, 0x0c,
+ 0x26, 0xe9, 0x04, 0x98, 0x05, 0xdf, 0x25, 0x38, 0x2f, 0xfb, 0x28, 0x90, 0x11,
+ 0x23, 0xbf, 0xc7, 0x0d, 0xe2, 0xce, 0x09, 0x21, 0x29, 0xe8, 0xeb, 0xc1, 0x15,
+ 0x40, 0xd3, 0x08, 0x12, 0xe2, 0x26, 0x36, 0x15, 0xab, 0x0b, 0x70, 0x05, 0x3d,
+ 0xf9, 0xcb, 0x52, 0xf5, 0xfb, 0xab, 0xdf, 0x0b, 0x2b, 0xd5, 0x1a, 0xde, 0x31,
+ 0xaa, 0x5e, 0x33, 0x01, 0x29, 0x0c, 0xad, 0x00, 0x07, 0x3c, 0x14, 0xd2, 0x22,
+ 0x07, 0xd6, 0x01, 0xed, 0xef, 0x26, 0x13, 0xf8, 0xe2, 0x28, 0xd8, 0xe8, 0x0f,
+ 0xf9, 0x34, 0xc2, 0xbc, 0xf3, 0xb5, 0x29, 0xe1, 0xd6, 0x39, 0x24, 0x3c, 0xff,
+ 0x09, 0x29, 0xc7, 0x25, 0x10, 0x08, 0xfe, 0x12, 0x02, 0xf0, 0x3e, 0xd5, 0x29,
+ 0x10, 0xb4, 0xe3, 0xda, 0xe8, 0x4a, 0xeb, 0x21, 0x1a, 0xe9, 0xfa, 0x3b, 0xe0,
+ 0xd1, 0xf2, 0xd5, 0x00, 0xc0, 0x22, 0x0d, 0xe2, 0x16, 0xe3, 0xe0, 0xa9, 0x03,
+ 0x7f, 0x02, 0x1d, 0x1d, 0xc7, 0x1b, 0x0c, 0x2d, 0xda, 0xf3, 0xde, 0xf8, 0x50,
+ 0x0e, 0xea, 0x0a, 0xb1, 0x15, 0x25, 0xdf, 0xff, 0x14, 0x03, 0xfc, 0xa3, 0xf7,
+ 0xd5, 0x3e, 0xa1, 0xc6, 0xe8, 0x56, 0xf0, 0xde, 0xd7, 0xe5, 0xe9, 0x1b, 0x27,
+ 0x17, 0x40, 0xf9, 0xd6, 0xde, 0x47, 0x4a, 0xd2, 0x1b, 0x15, 0xe9, 0xd4, 0x15,
+ 0x1b, 0xfa, 0x0a, 0xea, 0xe9, 0xfb, 0xd5, 0xd5, 0xcf, 0xf5, 0x36, 0xfb, 0x3a,
+ 0xf6, 0xf8, 0xf1, 0xec, 0x05, 0xe9, 0xf2, 0xfa, 0x14, 0xba, 0xec, 0xeb, 0x7f,
+ 0x4a, 0xfe, 0x16, 0x46, 0xd4, 0x09, 0xfe, 0xda, 0x08, 0xf7, 0xf1, 0x19, 0x38,
+ 0xf7, 0x33, 0xdf, 0xd7, 0x1b, 0x15, 0x28, 0xe7, 0x1b, 0xed, 0xeb, 0xed, 0x20,
+ 0x1a, 0xc0, 0x4c, 0xf7, 0x45, 0x59, 0xdc, 0x02, 0xcb, 0x07, 0x42, 0xd7, 0xd1,
+ 0xf8, 0xfc, 0x27, 0xea, 0x0d, 0xd9, 0xd3, 0xf1, 0xcc, 0x36, 0x10, 0x49, 0x29,
+ 0x14, 0x06, 0x14, 0xae, 0x16, 0x35, 0xc5, 0xf9, 0x02, 0x16, 0xde, 0xd7, 0x10,
+ 0x41, 0xbc, 0x2a, 0xfa, 0x1b, 0xc7, 0x13, 0xc9, 0x15, 0x2e, 0xe3, 0x0f, 0x2b,
+ 0xc3, 0xc0, 0x2a, 0xf3, 0x0e, 0x00, 0xd7, 0x24, 0x0d, 0x2f, 0xc8, 0xc8, 0xd4,
+ 0x14, 0x66, 0xc5, 0xd0, 0xd9, 0xe4, 0x3e, 0x8f, 0xb5, 0xe2, 0x27, 0x04, 0x3d,
+ 0xe4, 0xe4, 0x58, 0x28, 0xfa, 0xe8, 0xc6, 0x20, 0xf0, 0xf3, 0xfd, 0x12, 0x1a,
+ 0x09, 0xd0, 0xe1, 0xcb, 0xf2, 0xce, 0xd7, 0xa6, 0x18, 0x6c, 0x2e, 0x35, 0x4c,
+ 0x24, 0x48, 0xe3, 0x2b, 0xfe, 0xde, 0x18, 0xf6, 0xf0, 0x14, 0x27, 0xb9, 0xe2,
+ 0xc8, 0x08, 0xd9, 0x03, 0xf9, 0xcd, 0x30, 0x56, 0x1c, 0x24, 0x0a, 0xd9, 0xca,
+ 0xe2, 0xff, 0x04, 0xcb, 0x04, 0x19, 0x05, 0x35, 0xcf, 0x54, 0x17, 0x28, 0x04,
+ 0x00, 0x25, 0x08, 0xe2, 0xd3, 0x33, 0xc8, 0xde, 0xb4, 0x37, 0x0d, 0xd9, 0xf8,
+ 0xdf, 0x14, 0x81, 0x52, 0x36, 0x03, 0xdb, 0x12, 0x1f, 0xfe, 0x4a, 0x0c, 0xfd,
+ 0xe2, 0xec, 0xda, 0xfd, 0x21, 0x12, 0xf4, 0xe5, 0xc8, 0x0b, 0x12, 0x41, 0xae,
+ 0xe6, 0xfb, 0xee, 0x1c, 0xef, 0x04, 0x41, 0x11, 0xf0, 0x11, 0xe4, 0xdb, 0x21,
+ 0x1f, 0x07, 0xcf, 0x0c, 0x27, 0x1e, 0x1a, 0xde, 0xee, 0xcf, 0x24, 0x1b, 0x03,
+ 0xd9, 0xee, 0x06, 0xd6, 0xeb, 0xd4, 0xaa, 0x1a, 0xe4, 0x0a, 0x37, 0x07, 0x40,
+ 0xb7, 0xa3, 0x15, 0xe2, 0xc8, 0xd4, 0x11, 0x41, 0xff, 0x20, 0x3f, 0x4d, 0x31,
+ 0xbd, 0x14, 0xbb, 0x09, 0xfb, 0x3a, 0x40, 0xd1, 0x00, 0xed, 0xc5, 0xe6, 0x30,
+ 0xdb, 0x2f, 0xb1, 0x17, 0xdc, 0x21, 0x8d, 0xf2, 0x68, 0xd4, 0x27, 0xe7, 0xc8,
+ 0xbc, 0x08, 0xc4, 0xf6, 0xca, 0xd3, 0xcc, 0x23, 0xfc, 0x46, 0x3c, 0x52, 0xf6,
+ 0x14, 0x2f, 0xda, 0xf2, 0x18, 0xee, 0x42, 0xc5, 0xff, 0x09, 0xee, 0x1c, 0xf4,
+ 0xb4, 0xf7, 0x07, 0x45, 0xab, 0x1a, 0xd7, 0x9f, 0x20, 0x01, 0xbe, 0x0a, 0xbe,
+ 0xff, 0xf6, 0x1b, 0xef, 0x10, 0xce, 0xfe, 0xf4, 0x60, 0x2d, 0xd8, 0x14, 0x1b,
+ 0x26, 0x7f, 0x4e, 0xe2, 0xd7, 0xfb, 0xde, 0xd5, 0xe6, 0x32, 0xe8, 0x0a, 0x32,
+ 0xe4, 0xf8, 0x33, 0x2d, 0x32, 0x1b, 0x3a, 0xfa, 0x56, 0x18, 0x0e, 0xda, 0x2e,
+ 0xed, 0x81, 0x08, 0xe5, 0x32, 0xf5, 0xfd, 0xe4, 0xf7, 0xde, 0x00, 0x29, 0x05,
+ 0x34, 0x47, 0xc5, 0xdc, 0xd1, 0xe5, 0x75, 0x24, 0xc0, 0xda, 0xe5, 0xde, 0x19,
+ 0xfe, 0x19, 0x07, 0x61, 0xe5, 0xf7, 0xf9, 0x31, 0x0f, 0x06, 0xdf, 0x50, 0xdf,
+ 0x09, 0x10, 0x19, 0xf1, 0xde, 0x34, 0xc1, 0x7a, 0xfd, 0xcb, 0xda, 0xdf, 0xb6,
+ 0xa9, 0xf4, 0x37, 0xf2, 0x1d, 0xaf, 0x17, 0x16, 0x03, 0xf2, 0xc7, 0xd4, 0xd1,
+ 0x5d, 0x08, 0xc7, 0xb9, 0xf7, 0x33, 0x26, 0xf5, 0xd3, 0xf5, 0xce, 0xcb, 0x17,
+ 0x1e, 0x0e, 0xa2, 0xfe, 0xf7, 0x18, 0xfe, 0x68, 0x31, 0x67, 0xc4, 0x23, 0xc7,
+ 0x2b, 0x9f, 0x13, 0x34, 0xdc, 0x30, 0xcf, 0xea, 0xd3, 0xfb, 0x1a, 0xf9, 0x62,
+ 0x12, 0x15, 0xdf, 0x12, 0x2b, 0xcb, 0x0a, 0xee, 0x9e, 0xc6, 0xe6, 0x52, 0xf6,
+ 0x1b, 0xb3, 0x9c, 0x46, 0xf3, 0x29, 0x40, 0x18, 0xc7, 0xb5, 0x48, 0x22, 0xf0,
+ 0xae, 0xbf, 0xda, 0xfe, 0xbe, 0x36, 0xef, 0x01, 0xfd, 0xcf, 0xc0, 0x21, 0x52,
+ 0xf8, 0xf9, 0xdc, 0x98, 0xec, 0xf8, 0x08, 0x54, 0x3a, 0xf5, 0xc2, 0xea, 0x0d,
+ 0x03, 0xbc, 0xd2, 0xa6, 0x24, 0x7d, 0x4b, 0x01, 0xc9, 0x06, 0x10, 0x0a, 0xb6,
+ 0xf8, 0x12, 0x4c, 0xf5, 0xcc, 0xf4, 0x3a, 0xdf, 0xf8, 0xbf, 0x14, 0xdd, 0xbb,
+ 0xab, 0xea, 0xe0, 0x37, 0xa8, 0x7b, 0x0a, 0xea, 0x3c, 0x8c, 0x09, 0xf8, 0xe8,
+ 0xfc, 0xf1, 0x0d, 0x9d, 0x25, 0x1f, 0xf9, 0x16, 0xb2, 0xbb, 0x03, 0x07, 0xed,
+ 0xe0, 0xff, 0xbe, 0xab, 0xdc, 0xdd, 0x36, 0x56, 0xc3, 0x32, 0xe3, 0x2b, 0x81,
+ 0xfa, 0x68, 0xda, 0xd8, 0x55, 0x08, 0x0a, 0x05, 0x0a, 0x16, 0x01, 0xf9, 0xde,
+ 0xa5, 0x21, 0x38, 0xcf, 0x8e, 0x3d, 0xcd, 0xe3, 0xdd, 0xb4, 0x21, 0x19, 0xe7,
+ 0x2c, 0xa3, 0x0c, 0xca, 0xe4, 0xfd, 0x3d, 0xdd, 0xf5, 0xe8, 0x30, 0x06, 0x1e,
+ 0xab, 0xf0, 0xef, 0xda, 0x02, 0xe1, 0xe7, 0xcf, 0xeb, 0xfc, 0x1d, 0x16, 0x15,
+ 0x27, 0x06, 0xe3, 0x13, 0xe3, 0xee, 0x03, 0xdd, 0x10, 0x09, 0x1e, 0x02, 0xf8,
+ 0xf7, 0xd5, 0xe7, 0xd7, 0x01, 0xd9, 0xdd, 0x05, 0x28, 0xfb, 0x08, 0x01, 0x07,
+ 0xff, 0xf7, 0xca, 0x11, 0x30, 0x06, 0x11, 0xf6, 0x19, 0x00, 0x07, 0xe0, 0xf6,
+ 0xf3, 0xf7, 0x0e, 0x19, 0xc9, 0x08, 0xfd, 0xe2, 0x0a, 0x15, 0x01, 0x1f, 0x17,
+ 0xf9, 0xec, 0x46, 0xf7, 0xe6, 0xd5, 0xe3, 0x33, 0x0e, 0x0b, 0xf1, 0xfe, 0xe7,
+ 0x7f, 0xe8, 0xee, 0xe8, 0x1d, 0x11, 0xdd, 0xfd, 0x16, 0xfc, 0xe0, 0x07, 0xee,
+ 0x1f, 0x15, 0x01, 0x42, 0xd6, 0xe9, 0x0a, 0xeb, 0xea, 0xd2, 0xe1, 0xe1, 0x27,
+ 0xd4, 0x15, 0x23, 0x19, 0x03, 0xf2, 0xe9, 0xfd, 0xef, 0x03, 0x07, 0xf2, 0x11,
+ 0x06, 0xf9, 0xf3, 0x20, 0x07, 0x02, 0x5b, 0xf0, 0xd6, 0x3b, 0xf3, 0xf0, 0xcc,
+ 0x1e, 0xbf, 0xcb, 0x21, 0x12, 0xe9, 0x39, 0xea, 0xcd, 0xd6, 0x09, 0x43, 0x41,
+ 0x25, 0x0f, 0x35, 0x38, 0xf5, 0x26, 0x3d, 0x15, 0x02, 0x0b, 0xd8, 0x13, 0x1d,
+ 0x29, 0x0a, 0x03, 0xf6, 0x04, 0x36, 0x1f, 0x66, 0x1a, 0x41, 0x01, 0xe2, 0x01,
+ 0xf5, 0x09, 0xc9, 0xcf, 0x1a, 0x58, 0x4a, 0x1d, 0xf2, 0x69, 0xf7, 0x01, 0x3b,
+ 0x32, 0xda, 0xde, 0x19, 0xc3, 0x11, 0x05, 0x70, 0xb9, 0x07, 0x2e, 0xc0, 0xce,
+ 0x21, 0x2b, 0xfb, 0x16, 0xd3, 0xb8, 0xdc, 0xed, 0x3a, 0x20, 0xd8, 0xc6, 0x20,
+ 0xe6, 0xcd, 0x26, 0x2a, 0xd2, 0xf9, 0xeb, 0x2c, 0x52, 0xa9, 0x39, 0x11, 0x46,
+ 0xa1, 0x3f, 0x2e, 0xf6, 0x96, 0xe6, 0xcc, 0xca, 0xff, 0x2f, 0x1b, 0x81, 0x15,
+ 0x4f, 0x1e, 0x7d, 0xd4, 0x22, 0x02, 0xf2, 0xe3, 0xba, 0xf5, 0xde, 0xeb, 0x04,
+ 0x9c, 0xd7, 0x29, 0xd9, 0x43, 0xe6, 0x7f, 0x19, 0xec, 0x31, 0x40, 0xeb, 0x14,
+ 0x04, 0xf3, 0x0d, 0x04, 0x18, 0x15, 0xe5, 0xfa, 0xfc, 0xc7, 0xf8, 0x2a, 0xed,
+ 0x0a, 0xfa, 0x0c, 0xf1, 0xd5, 0x31, 0xdd, 0xe3, 0xf1, 0xe2, 0xec, 0x54, 0x00,
+ 0xd2, 0xf1, 0x28, 0x14, 0x10, 0xfb, 0xff, 0xeb, 0x08, 0xe1, 0x17, 0x22, 0x28,
+ 0xfe, 0x0d, 0xf7, 0x04, 0x16, 0x06, 0x12, 0xfe, 0xb4, 0xf4, 0x1e, 0xe0, 0xf3,
+ 0xec, 0x1c, 0xd2, 0x0c, 0x09, 0x39, 0x1b, 0xe2, 0x2e, 0xfb, 0xba, 0x00, 0x28,
+ 0xf1, 0x10, 0x08, 0x2c, 0xd7, 0x05, 0x20, 0xe7, 0xf9, 0x07, 0x24, 0xfd, 0xf1,
+ 0xe7, 0x1c, 0x04, 0xd5, 0xc8, 0xec, 0x2f, 0xfb, 0xfc, 0x0c, 0xe4, 0xec, 0x2a,
+ 0x2a, 0xc9, 0xf7, 0xff, 0xe3, 0xd3, 0xf2, 0x08, 0xe1, 0x35, 0xe6, 0xe9, 0x03,
+ 0x04, 0x04, 0x03, 0x0c, 0xce, 0xd0, 0x01, 0x2f, 0x39, 0x13, 0x15, 0x38, 0xfa,
+ 0xff, 0xf9, 0x20, 0x3b, 0x04, 0xbc, 0xe3, 0xd2, 0xfd, 0x0e, 0x11, 0x19, 0xe1,
+ 0x11, 0x0c, 0x19, 0xfb, 0xe7, 0xdd, 0x3b, 0xd4, 0xec, 0x31, 0x5f, 0x7f, 0x30,
+ 0x1c, 0xc2, 0xd7, 0x01, 0xcb, 0xe5, 0xf8, 0x14, 0xd5, 0x42, 0xf8, 0xf9, 0xb8,
+ 0xff, 0xd7, 0x1a, 0xf9, 0x28, 0xf0, 0x05, 0xe9, 0xdf, 0x0d, 0x0d, 0xce, 0x08,
+ 0xd7, 0xe2, 0x00, 0x49, 0x18, 0xf4, 0xb6, 0xe9, 0x34, 0x22, 0xf1, 0x10, 0x0e,
+ 0x1b, 0x28, 0x09, 0x29, 0xda, 0x23, 0x3d, 0xf1, 0x14, 0x12, 0xce, 0xf8, 0x27,
+ 0x0b, 0x0e, 0xf9, 0x4b, 0x10, 0xde, 0x1a, 0xc3, 0xf8, 0x3a, 0x0d, 0xef, 0x0d,
+ 0xff, 0x06, 0xb6, 0x02, 0x20, 0x0d, 0xee, 0xd4, 0xcb, 0xf5, 0x11, 0xd2, 0xfa,
+ 0xd7, 0x08, 0x5c, 0x11, 0xf6, 0x29, 0x0e, 0xec, 0x06, 0xde, 0xd0, 0xc7, 0xe2,
+ 0xef, 0x54, 0xfa, 0xec, 0xd6, 0x1f, 0xfd, 0xf4, 0xb2, 0x2a, 0x2a, 0x15, 0xfc,
+ 0x1c, 0x2e, 0x04, 0x1a, 0xb4, 0xd8, 0x03, 0x00, 0x19, 0xec, 0xb7, 0xfd, 0x2c,
+ 0x93, 0x65, 0xaa, 0xf9, 0x1a, 0x24, 0x37, 0x55, 0x7c, 0xe0, 0x52, 0x1c, 0x0d,
+ 0xf8, 0x2d, 0xef, 0xef, 0x1b, 0xd4, 0x21, 0x25, 0x16, 0x48, 0xe9, 0xef, 0xf1,
+ 0xe9, 0x0a, 0x35, 0x64, 0x35, 0xb9, 0x03, 0xe9, 0x0c, 0xab, 0xef, 0x57, 0xf2,
+ 0xd1, 0x23, 0x6a, 0x46, 0xbc, 0xf2, 0xfa, 0xc5, 0xf1, 0x3b, 0x0f, 0x22, 0xec,
+ 0xef, 0x1e, 0xfc, 0xe8, 0x94, 0xdf, 0xf5, 0xcb, 0x41, 0xd4, 0xef, 0x1d, 0x81,
+ 0x15, 0x40, 0x0d, 0x32, 0xf0, 0xa5, 0xe2, 0x17, 0x15, 0xd7, 0x04, 0xfa, 0xfb,
+ 0x89, 0x3e, 0x4d, 0x4b, 0x1c, 0x44, 0xdf, 0x0c, 0xdd, 0xec, 0x10, 0xf6, 0x2d,
+ 0xd4, 0xde, 0xfd, 0x16, 0x47, 0xe1, 0xb1, 0x31, 0x0a, 0x47, 0x90, 0xed, 0xd1,
+ 0xd2, 0xdb, 0xf4, 0xde, 0xea, 0xb2, 0xbc, 0xdc, 0x0f, 0xf0, 0xa9, 0x27, 0x16,
+ 0x57, 0x1d, 0x11, 0xff, 0x43, 0xcb, 0x22, 0x07, 0x15, 0xf4, 0x43, 0xc7, 0x02,
+ 0xc9, 0xb2, 0xee, 0x4f, 0xe6, 0x56, 0xbf, 0x02, 0xb9, 0x20, 0xb5, 0xde, 0x3b,
+ 0xa3, 0x0f, 0xe2, 0xfe, 0x1c, 0xf4, 0x33, 0x52, 0x04, 0xb5, 0x2e, 0x26, 0x88,
+ 0xc7, 0x10, 0xfc, 0xe5, 0x5c, 0xe6, 0xbc, 0xe9, 0x1c, 0x6b, 0xf2, 0x03, 0xd0,
+ 0x18, 0xb6, 0x18, 0x0f, 0x00, 0xde, 0xfc, 0x02, 0x6c, 0xca, 0xf1, 0xf8, 0x4a,
+ 0x3f, 0xeb, 0xaf, 0x14, 0xbe, 0xe1, 0xcc, 0x50, 0x15, 0x30, 0xeb, 0x06, 0xc2,
+ 0xfb, 0xce, 0xf9, 0x25, 0xe4, 0x1f, 0x1d, 0x08, 0x0e, 0xeb, 0xd9, 0xad, 0x19,
+ 0x0e, 0x02, 0xd9, 0x03, 0xf2, 0xfb, 0x14, 0xd9, 0xe2, 0xc6, 0x07, 0x81, 0xe4,
+ 0x1f, 0xcf, 0xe7, 0x3c, 0xb8, 0xda, 0x02, 0x61, 0x0d, 0xfe, 0x0c, 0x41, 0xc7,
+ 0xed, 0xf1, 0x2a, 0xce, 0x08, 0x2c, 0xe4, 0x28, 0xe9, 0x06, 0xa0, 0x28, 0xcc,
+ 0x0f, 0x14, 0xea, 0x15, 0x03, 0xee, 0xb3, 0x0a, 0xe7, 0x04, 0x38, 0xeb, 0xe8,
+ 0x28, 0x09, 0xe7, 0x13, 0x5b, 0x0f, 0x8d, 0x01, 0xd6, 0xcd, 0xed, 0xeb, 0xf7,
+ 0xf3, 0x00, 0x0a, 0x21, 0x4b, 0x19, 0xb6, 0xb0, 0x01, 0xdc, 0xe6, 0x43, 0xc8,
+ 0xce, 0x06, 0xb8, 0x3f, 0x31, 0xe0, 0xea, 0xcf, 0xf9, 0x56, 0xec, 0xc5, 0x81,
+ 0x32, 0xbd, 0xc3, 0xf9, 0x22, 0x53, 0x22, 0x00, 0xf2, 0x3b, 0xef, 0x1a, 0x45,
+ 0x9e, 0x60, 0x09, 0x42, 0xdd, 0x2a, 0x32, 0xf3, 0x3b, 0xfd, 0x2d, 0x08, 0xde,
+ 0x1d, 0x41, 0xdc, 0xd7, 0xdd, 0xe1, 0xf6, 0x09, 0xc3, 0x17, 0xd6, 0x69, 0x48,
+ 0xb6, 0xfa, 0xe4, 0x1a, 0xfb, 0x5b, 0xfc, 0xba, 0x08, 0x01, 0xec, 0xd6, 0xe0,
+ 0x26, 0xd2, 0xf5, 0x0c, 0xf6, 0x1c, 0xba, 0xdb, 0xf6, 0x21, 0xf9, 0x0d, 0x12,
+ 0x33, 0xe8, 0x04, 0xc8, 0xc2, 0x25, 0x0c, 0x18, 0xf6, 0xae, 0xd9, 0xef, 0xb7,
+ 0xbf, 0x3a, 0x20, 0x0a, 0x0a, 0x48, 0x05, 0x06, 0xcb, 0x0b, 0xb3, 0x24, 0xe2,
+ 0x51, 0xce, 0x17, 0xfd, 0xb3, 0x2d, 0x29, 0xf2, 0x04, 0x09, 0x61, 0xcc, 0xf1,
+ 0xb0, 0x2e, 0x4f, 0x19, 0x81, 0x2f, 0xfe, 0x3e, 0xae, 0xca, 0x11, 0x15, 0x79,
+ 0xd9, 0xb2, 0xf2, 0xe0, 0xed, 0x42, 0xaf, 0xba, 0x0a, 0xee, 0x2c, 0xd1, 0xee,
+ 0xf1, 0xbc, 0xe8, 0xd7, 0xd5, 0xfd, 0x02, 0xfd, 0x16, 0x46, 0xcf, 0xc5, 0xe8,
+ 0x37, 0x2d, 0xf5, 0x23, 0xe5, 0xf1, 0xc6, 0x17, 0x23, 0x3b, 0x55, 0xe6, 0x0f,
+ 0xeb, 0x5f, 0x07, 0x1f, 0x20, 0x27, 0x18, 0xd6, 0x01, 0xfc, 0x58, 0x02, 0xf1,
+ 0xe5, 0xe9, 0x13, 0x23, 0x16, 0xa9, 0xe7, 0x16, 0xe8, 0xc0, 0xfd, 0x48, 0x9a,
+ 0xfc, 0x15, 0xfa, 0xde, 0xce, 0x05, 0xb6, 0x20, 0xb0, 0xf2, 0x17, 0xf8, 0xd9,
+ 0x0a, 0x15, 0x34, 0x20, 0xcb, 0x05, 0x0d, 0x13, 0xe4, 0xed, 0xf2, 0xeb, 0xd2,
+ 0xff, 0x21, 0x0a, 0x24, 0x19, 0xc5, 0xff, 0xf5, 0xd8, 0xfc, 0xe4, 0xe9, 0xdd,
+ 0xf0, 0x22, 0x27, 0xf9, 0xda, 0xe7, 0xbc, 0x26, 0xfd, 0xdc, 0x0a, 0xc7, 0xf2,
+ 0xf8, 0x44, 0xd9, 0x57, 0x2a, 0xfd, 0x02, 0xf9, 0xf4, 0x28, 0x0e, 0x29, 0x39,
+ 0xe4, 0x7f, 0x62, 0xd6, 0x14, 0xd4, 0xda, 0x17, 0xdd, 0x3a, 0x1e, 0xcd, 0xea,
+ 0xfe, 0xd4, 0x00, 0xf1, 0xf9, 0xf2, 0x13, 0xe6, 0xf5, 0xe3, 0x7e, 0xfc, 0x18,
+ 0xbd, 0x10, 0x11, 0xde, 0x0f, 0x01, 0xd6, 0xcc, 0xbc, 0x1a, 0xe7, 0xdb, 0x0c,
+ 0x01, 0x08, 0x3c, 0x07, 0xe2, 0xfe, 0xc9, 0xd1, 0x04, 0xef, 0x34, 0xfe, 0x0b,
+ 0x20, 0x2c, 0x41, 0x66, 0x03, 0xe3, 0x24, 0xfe, 0xfc, 0x02, 0x44, 0xeb, 0x08,
+ 0xf3, 0x62, 0xfe, 0xfe, 0xf5, 0x28, 0xf8, 0x05, 0x08, 0xfe, 0xf4, 0x00, 0x02,
+ 0x37, 0xdc, 0xe9, 0x0c, 0xfd, 0x81, 0x22, 0xfa, 0xde, 0x2e, 0x05, 0xff, 0xfc,
+ 0x26, 0xf0, 0xf2, 0xcf, 0xf1, 0xf0, 0xdd, 0xd5, 0xee, 0x0d, 0xf3, 0xe6, 0xe1,
+ 0xfd, 0x06, 0x21, 0xdb, 0xf9, 0x32, 0xff, 0x2b, 0x15, 0xfe, 0x05, 0x19, 0x03,
+ 0xf3, 0x45, 0x02, 0x0a, 0x0f, 0x02, 0xe5, 0xfc, 0xd7, 0x03, 0xf1, 0xc9, 0x34,
+ 0xf2, 0x0d, 0x38, 0xf2, 0x06, 0x28, 0x2e, 0xc5, 0xc8, 0xf1, 0x0c, 0xd8, 0xe1,
+ 0x0b, 0xd3, 0xe7, 0xe7, 0x0d, 0xfb, 0xe8, 0x40, 0xf4, 0x14, 0x13, 0x13, 0xd0,
+ 0x01, 0xff, 0x13, 0x18, 0xf9, 0xf9, 0x58, 0xeb, 0xcf, 0xd8, 0x2b, 0xd4, 0xcb,
+ 0xe7, 0x26, 0x0b, 0xf0, 0x0a, 0x20, 0xf0, 0x11, 0xed, 0xd9, 0xe8, 0x07, 0xd3,
+ 0xd0, 0xed, 0xfd, 0x0b, 0x33, 0xf2, 0x03, 0x0f, 0x0e, 0x0a, 0x22, 0xea, 0xf7,
+ 0x24, 0xe0, 0x0f, 0x2c, 0xc2, 0x0e, 0x2b, 0xb9, 0x10, 0x16, 0xea, 0x04, 0x0b,
+ 0xe4, 0xf4, 0xcb, 0x81, 0xf3, 0x0b, 0x13, 0x03, 0x13, 0x31, 0xd5, 0xde, 0xf9,
+ 0x01, 0x00, 0xf3, 0xfd, 0xd3, 0xfd, 0x16, 0xcd, 0xef, 0x34, 0xb8, 0x31, 0x06,
+ 0x1a, 0x1a, 0xdf, 0x2c, 0x11, 0x25, 0xfb, 0x4a, 0x3e, 0xf5, 0xed, 0xed, 0x1b,
+ 0x25, 0xf7, 0xfd, 0xed, 0xf7, 0xe5, 0xfa, 0xea, 0xef, 0x24, 0x12, 0x04, 0xeb,
+ 0x08, 0x1e, 0xd8, 0xd9, 0x1e, 0xfc, 0xf6, 0xde, 0xe6, 0xe1, 0x10, 0xfe, 0x48,
+ 0x0f, 0x0c, 0xfd, 0xdd, 0x2e, 0x1a, 0xca, 0xfe, 0x33, 0x0a, 0xe2, 0x23, 0xcf,
+ 0xd1, 0x15, 0xed, 0x10, 0x2b, 0x05, 0xd7, 0x00, 0xf2, 0x18, 0xce, 0xe9, 0x0c,
+ 0x01, 0xf4, 0xed, 0x31, 0x21, 0x01, 0x09, 0x29, 0x06, 0x09, 0x3a, 0xdc, 0x55,
+ 0x10, 0xf4, 0x14, 0xfc, 0xa7, 0xf8, 0xb7, 0x33, 0xec, 0x23, 0xd5, 0xf6, 0xdc,
+ 0x09, 0xe0, 0x2c, 0x20, 0xd9, 0xb6, 0x36, 0x0a, 0x0a, 0x33, 0xef, 0x09, 0x1f,
+ 0xeb, 0xf6, 0x0a, 0x2d, 0xd5, 0xe1, 0xee, 0x17, 0xc0, 0xd6, 0x08, 0x44, 0xfd,
+ 0xd6, 0x17, 0x31, 0x09, 0xfc, 0x39, 0x48, 0x3b, 0x32, 0x0f, 0x30, 0xd9, 0xb1,
+ 0x6a, 0x03, 0x08, 0xf7, 0x11, 0xce, 0x2b, 0x0e, 0x2a, 0xe7, 0x34, 0xf8, 0x41,
+ 0x50, 0xed, 0x03, 0x25, 0x14, 0x38, 0xcd, 0xfe, 0xfe, 0xeb, 0x1a, 0x0d, 0x07,
+ 0x25, 0xcf, 0x2a, 0xe5, 0xfb, 0xe7, 0x60, 0xe6, 0x05, 0xf6, 0xed, 0xf1, 0xec,
+ 0x65, 0x01, 0x43, 0xf8, 0x33, 0x1a, 0xef, 0xf3, 0x16, 0xf5, 0xf8, 0xde, 0x19,
+ 0x35, 0xc8, 0xdf, 0xfe, 0xc5, 0x0d, 0xa7, 0x0f, 0x22, 0xef, 0x02, 0x18, 0xb5,
+ 0x0e, 0x18, 0x13, 0x63, 0x16, 0x57, 0xfc, 0xbf, 0xc2, 0x09, 0xea, 0xda, 0xf4,
+ 0xf8, 0xce, 0x1b, 0x56, 0xd0, 0x1d, 0xc3, 0x0b, 0xab, 0x20, 0x05, 0xf1, 0xcc,
+ 0xea, 0xa6, 0xec, 0xfa, 0xf0, 0x26, 0x06, 0x0b, 0x81, 0xe5, 0x21, 0xd7, 0x10,
+ 0xf3, 0xff, 0xf3, 0xf1, 0xed, 0x1c, 0x09, 0x18, 0x18, 0x0a, 0xf9, 0xee, 0xbd,
+ 0x6f, 0x11, 0xdc, 0xac, 0xd0, 0x24, 0xf0, 0xe8, 0xf1, 0x1a, 0xc8, 0xea, 0xd1,
+ 0x29, 0x23, 0xc2, 0xf0, 0x21, 0xb8, 0xe7, 0xfe, 0xec, 0x2c, 0xdb, 0x07, 0x13,
+ 0xca, 0x2a, 0xd3, 0xe6, 0x14, 0x20, 0xf4, 0xe2, 0x13, 0x02, 0x32, 0xff, 0x0d,
+ 0x02, 0x0b, 0x0f, 0x0c, 0x0e, 0x17, 0xf9, 0x21, 0x1b, 0xf2, 0x08, 0xb5, 0xfc,
+ 0xf5, 0xe6, 0xc4, 0xf1, 0xe9, 0x0d, 0x0b, 0xf7, 0xcf, 0xc9, 0x13, 0xf8, 0x33,
+ 0x0a, 0x02, 0x24, 0xc3, 0xf6, 0x0d, 0xc2, 0xdb, 0xf8, 0x45, 0xfe, 0x14, 0xf3,
+ 0xeb, 0xe1, 0xd3, 0x15, 0x32, 0x0d, 0xd0, 0xde, 0xec, 0x19, 0x14, 0x0b, 0xfe,
+ 0x0f, 0xf5, 0xe0, 0xea, 0x00, 0x22, 0x17, 0xd3, 0xd2, 0xfb, 0xf1, 0x17, 0x45,
+ 0x16, 0x19, 0x37, 0x81, 0xea, 0x0b, 0x3a, 0xf1, 0x49, 0x4c, 0xa8, 0x0d, 0x23,
+ 0xe5, 0x0c, 0xda, 0xea, 0x12, 0xda, 0xe3, 0xcd, 0x7c, 0x0d, 0x53, 0x0c, 0xc5,
+ 0x93, 0x45, 0xc9, 0x6e, 0x4f, 0xbb, 0xb7, 0xf1, 0x4c, 0xe2, 0xd4, 0xf6, 0xaa,
+ 0xe3, 0xce, 0xe7, 0x36, 0x98, 0xf2, 0x2d, 0x1e, 0x51, 0x15, 0xd3, 0x19, 0x5d,
+ 0xdf, 0xa7, 0x0a, 0x00, 0xea, 0xc4, 0x0b, 0x07, 0xe2, 0x45, 0xe9, 0x14, 0xd7,
+ 0x0b, 0x77, 0xb9, 0x26, 0xfb, 0xe4, 0x4d, 0x26, 0x16, 0x01, 0x8d, 0x49, 0x9e,
+ 0xf0, 0x00, 0x47, 0x95, 0x01, 0x27, 0xcd, 0xd8, 0x84, 0x09, 0xff, 0xcf, 0x17,
+ 0x81, 0x15, 0x17, 0xcf, 0xd2, 0x25, 0x31, 0x09, 0xa0, 0x8f, 0x0e, 0x21, 0x91,
+ 0x00, 0x04, 0xb2, 0x40, 0x1b, 0xea, 0xa6, 0x0d, 0x41, 0x16, 0xd5, 0xe9, 0xff,
+ 0x76, 0x16, 0x09, 0x1b, 0x02, 0x37, 0x44, 0x48, 0xf9, 0xef, 0xed, 0x2e, 0xe9,
+ 0x2c, 0x20, 0x17, 0xd5, 0xbe, 0xad, 0x4f, 0xe4, 0xfb, 0xee, 0xbb, 0x04, 0x0c,
+ 0xda, 0x2b, 0xe7, 0x0c, 0x20, 0x03, 0x2d, 0x01, 0xff, 0xc6, 0x2c, 0x30, 0xb0,
+ 0x31, 0xe4, 0xe4, 0xd4, 0xf3, 0xe0, 0xce, 0xe7, 0x04, 0x9d, 0x57, 0x0e, 0xf4,
+ 0xe3, 0x24, 0xf1, 0xe4, 0xef, 0xc4, 0xde, 0x32, 0xea, 0xfa, 0x0d, 0xa7, 0xf4,
+ 0x15, 0xc8, 0x11, 0xc2, 0x58, 0x2e, 0x8e, 0x28, 0xf2, 0x32, 0xc2, 0xfa, 0x2f,
+ 0xfa, 0x46, 0xf0, 0x73, 0x09, 0x9a, 0xca, 0x42, 0xaf, 0xa8, 0x18, 0xe5, 0x0f,
+ 0x05, 0x0d, 0x0c, 0xca, 0x0e, 0xd7, 0x27, 0x05, 0xe9, 0xc6, 0x19, 0x81, 0x0e,
+ 0xf6, 0xfc, 0xe7, 0x41, 0xe7, 0xd5, 0xe8, 0x0a, 0x10, 0x07, 0xd4, 0x3e, 0x06,
+ 0xcd, 0xc2, 0x01, 0x2d, 0xcd, 0x5a, 0xb4, 0x36, 0x05, 0x31, 0xd7, 0x10, 0xca,
+ 0x3c, 0x17, 0x00, 0x38, 0x20, 0xf9, 0xe7, 0xdd, 0xf8, 0x18, 0xad, 0x12, 0xa5,
+ 0xd4, 0xe2, 0xbf, 0xfa, 0x10, 0xbd, 0x1d, 0xb0, 0x2e, 0x20, 0xd9, 0x0e, 0xee,
+ 0xfb, 0xa3, 0xcd, 0xc4, 0xec, 0xef, 0xf2, 0xe4, 0x9e, 0xdb, 0xae, 0x0d, 0xff,
+ 0xec, 0x17, 0xa2, 0x09, 0x1b, 0xfb, 0xdf, 0x29, 0x00, 0xf2, 0xab, 0xe3, 0xdf,
+ 0xe5, 0xe5, 0x13, 0x73, 0x0f, 0x14, 0xf3, 0xba, 0xde, 0xdc, 0xc0, 0x14, 0x24,
+ 0x36, 0x2c, 0xbe, 0xe4, 0x11, 0xeb, 0x0e, 0x05, 0xd0, 0xfe, 0x2d, 0xc8, 0xf1,
+ 0x15, 0x17, 0x05, 0x7f, 0x17, 0xe1, 0xee, 0xfa, 0xf9, 0x22, 0x02, 0xfc, 0x2d,
+ 0xde, 0x37, 0x07, 0x0d, 0xef, 0x10, 0xdf, 0xfc, 0xc7, 0x42, 0xf4, 0x1d, 0xfe,
+ 0xfe, 0x04, 0xf9, 0x04, 0x3b, 0xd3, 0xf6, 0x54, 0xd0, 0xe5, 0xef, 0x2a, 0x13,
+ 0xd7, 0x0a, 0xde, 0xf3, 0x1c, 0x0b, 0x07, 0xae, 0xd7, 0xf4, 0x12, 0xe6, 0x18,
+ 0xa5, 0x16, 0xe3, 0xc7, 0xf7, 0xfa, 0x23, 0x06, 0x1a, 0x1d, 0xf0, 0x0a, 0x35,
+ 0x17, 0xef, 0xf6, 0x2f, 0xb1, 0xeb, 0x3a, 0xf6, 0x18, 0xed, 0x22, 0xff, 0xf0,
+ 0xee, 0x1c, 0xce, 0xdd, 0xe7, 0x1f, 0x0a, 0x0a, 0x23, 0x2e, 0xf2, 0xca, 0xff,
+ 0xd0, 0xf7, 0xef, 0x43, 0xdd, 0xf7, 0x7f, 0xe2, 0xfe, 0xe7, 0xe0, 0x07, 0xef,
+ 0xe1, 0xf6, 0x10, 0xef, 0xf2, 0x03, 0x9d, 0xef, 0x07, 0xf1, 0x4f, 0xf8, 0xfe,
+ 0x03, 0xf2, 0xf8, 0xf8, 0x02, 0xca, 0xaa, 0x53, 0x10, 0x1b, 0xfc, 0x08, 0x22,
+ 0xcc, 0xc1, 0xcf, 0xff, 0x00, 0xde, 0xea, 0x20, 0xcb, 0xfd, 0x12, 0xf3, 0xee,
+ 0xd5, 0xd0, 0xff, 0xf6, 0xff, 0x0a, 0xeb, 0xb2, 0xe6, 0x0e, 0xf5, 0x62, 0x02,
+ 0xff, 0x12, 0xdf, 0x13, 0x0c, 0x0b, 0x0a, 0xe6, 0xdc, 0x0b, 0x35, 0xea, 0x0d,
+ 0xd5, 0x12, 0xd8, 0xdd, 0x07, 0xf7, 0x23, 0xc5, 0x26, 0xbd, 0x25, 0xe9, 0xee,
+ 0x09, 0x0d, 0xb5, 0x13, 0xec, 0xc5, 0xe4, 0x03, 0x2a, 0x06, 0x18, 0xd0, 0xfb,
+ 0xe4, 0xf4, 0x30, 0x1f, 0x0d, 0x00, 0xfd, 0xef, 0xdb, 0x0a, 0x15, 0xe3, 0x18,
+ 0xfb, 0xed, 0x02, 0x39, 0x1b, 0x71, 0x53, 0xbb, 0xf3, 0x15, 0x1d, 0xd6, 0x3a,
+ 0x1d, 0x2f, 0x03, 0xd9, 0x1a, 0x0a, 0xf2, 0xe9, 0x1d, 0x2c, 0x4b, 0x10, 0x25,
+ 0xb4, 0x36, 0xd3, 0x04, 0xcd, 0x05, 0x18, 0xf0, 0xa9, 0xe7, 0xec, 0xdf, 0x0f,
+ 0xe5, 0x17, 0x1b, 0x4f, 0x21, 0x1a, 0x09, 0x11, 0xde, 0x32, 0xf8, 0xce, 0xfc,
+ 0x11, 0x00, 0x15, 0xbb, 0xf0, 0x03, 0xfd, 0x3c, 0x0a, 0xf3, 0xe5, 0x36, 0x1d,
+ 0xff, 0xe7, 0xe9, 0x03, 0xec, 0x32, 0x19, 0xcb, 0xd9, 0xc0, 0xe5, 0x49, 0x33,
+ 0x1f, 0xfa, 0xfe, 0xc8, 0x48, 0x2a, 0x0f, 0xd8, 0x1b, 0xda, 0xfc, 0xda, 0xfd,
+ 0xd8, 0x25, 0xc5, 0x2f, 0x01, 0xd0, 0x19, 0x05, 0x0a, 0xcd, 0xff, 0xf4, 0x19,
+ 0xfe, 0x0f, 0xfa, 0xf3, 0xe1, 0xd6, 0x17, 0xca, 0xe2, 0x7f, 0x23, 0x3e, 0x58,
+ 0xfe, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xb0, 0xf8, 0xff,
+ 0xff, 0x83, 0xe2, 0xff, 0xff, 0xaa, 0x36, 0x00, 0x00, 0x77, 0x0c, 0x00, 0x00,
+ 0x9a, 0xfd, 0xff, 0xff, 0x9c, 0x0c, 0x00, 0x00, 0x0e, 0xde, 0xff, 0xff, 0xc0,
+ 0x1b, 0x00, 0x00, 0x7c, 0x04, 0x00, 0x00, 0x2e, 0xc5, 0xff, 0xff, 0xbe, 0x01,
+ 0x00, 0x00, 0xb1, 0x17, 0x00, 0x00, 0xb5, 0x0f, 0x00, 0x00, 0xf8, 0x48, 0x00,
+ 0x00, 0xc9, 0xfc, 0xff, 0xff, 0x57, 0xe2, 0xff, 0xff, 0x4b, 0x2a, 0x00, 0x00,
+ 0x08, 0xc1, 0xff, 0xff, 0xb2, 0x25, 0x00, 0x00, 0xb9, 0x01, 0x00, 0x00, 0xe9,
+ 0x24, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, 0xeb, 0xef, 0xff, 0xff, 0x4f, 0x0b,
+ 0x00, 0x00, 0xcd, 0x27, 0x00, 0x00, 0x3a, 0x07, 0x00, 0x00, 0x77, 0x25, 0x00,
+ 0x00, 0x61, 0x07, 0x00, 0x00, 0x54, 0x1c, 0x00, 0x00, 0x24, 0xfd, 0xff, 0xff,
+ 0xd9, 0xe1, 0xff, 0xff, 0xe5, 0xda, 0xff, 0xff, 0x6e, 0xf4, 0xff, 0xff, 0x9f,
+ 0x37, 0x00, 0x00, 0x64, 0xdf, 0xff, 0xff, 0xbb, 0x1c, 0x00, 0x00, 0xb9, 0x1d,
+ 0x00, 0x00, 0x8d, 0x09, 0x00, 0x00, 0x2f, 0x30, 0x00, 0x00, 0x66, 0x00, 0x00,
+ 0x00, 0xb2, 0xf9, 0xff, 0xff, 0x0a, 0x41, 0x00, 0x00, 0x53, 0x21, 0x00, 0x00,
+ 0xf0, 0x1a, 0x00, 0x00, 0x58, 0x43, 0x00, 0x00, 0xe0, 0x0d, 0x00, 0x00, 0x09,
+ 0x3b, 0x00, 0x00, 0xee, 0x06, 0x00, 0x00, 0xfa, 0x34, 0x00, 0x00, 0x8f, 0xff,
+ 0xff, 0xff, 0xa5, 0xef, 0xff, 0xff, 0xb6, 0x0f, 0x00, 0x00, 0x21, 0x1b, 0x00,
+ 0x00, 0x96, 0x05, 0x00, 0x00, 0xed, 0xf8, 0xff, 0xff, 0x5f, 0x15, 0x00, 0x00,
+ 0xa0, 0xc4, 0xff, 0xff, 0xa2, 0xe0, 0xff, 0xff, 0x52, 0x06, 0x00, 0x00, 0xbc,
+ 0x33, 0x00, 0x00, 0x54, 0xb9, 0xff, 0xff, 0xd5, 0xfd, 0xff, 0xff, 0xe2, 0x13,
+ 0x00, 0x00, 0xc4, 0x29, 0x00, 0x00, 0x09, 0x43, 0x00, 0x00, 0x25, 0x26, 0x00,
+ 0x00, 0xd0, 0xec, 0xff, 0xff, 0xea, 0x15, 0x00, 0x00, 0x01, 0x1a, 0x00, 0x00,
+ 0xa2, 0x01, 0x00, 0x00, 0xde, 0xe7, 0xff, 0xff, 0x91, 0xe7, 0xff, 0xff, 0x4a,
+ 0x21, 0x00, 0x00, 0xf1, 0x25, 0x00, 0x00, 0xbb, 0x07, 0x00, 0x00, 0x1e, 0x04,
+ 0x00, 0x00, 0x2f, 0xe6, 0xff, 0xff, 0x31, 0x08, 0x00, 0x00, 0xa6, 0x1e, 0x00,
+ 0x00, 0x62, 0x1a, 0x00, 0x00, 0xc0, 0x17, 0x00, 0x00, 0xa5, 0x4d, 0x00, 0x00,
+ 0x6a, 0xe4, 0xff, 0xff, 0x4c, 0xf2, 0xff, 0xff, 0xad, 0x01, 0x00, 0x00, 0x94,
+ 0x22, 0x00, 0x00, 0x32, 0xe5, 0xff, 0xff, 0xd7, 0x3f, 0x00, 0x00, 0x80, 0xed,
+ 0xff, 0xff, 0x4f, 0x15, 0x00, 0x00, 0x08, 0xec, 0xff, 0xff, 0xc1, 0xe8, 0xff,
+ 0xff, 0x7d, 0xd4, 0xff, 0xff, 0x6e, 0xe7, 0xff, 0xff, 0x51, 0xd9, 0xff, 0xff,
+ 0x65, 0x2b, 0x00, 0x00, 0xc3, 0x13, 0x00, 0x00, 0x3e, 0xd4, 0xff, 0xff, 0x40,
+ 0x3e, 0x00, 0x00, 0xd7, 0xe5, 0xff, 0xff, 0x25, 0x53, 0x00, 0x00, 0xb2, 0xef,
+ 0xff, 0xff, 0x57, 0x1f, 0x00, 0x00, 0x0e, 0xf3, 0xff, 0xff, 0x71, 0x0a, 0x00,
+ 0x00, 0x0e, 0xfc, 0xff, 0xff, 0x43, 0x00, 0x00, 0x00, 0x60, 0x11, 0x00, 0x00,
+ 0x95, 0x09, 0x00, 0x00, 0xf8, 0x3a, 0x00, 0x00, 0x6b, 0x16, 0x00, 0x00, 0xe2,
+ 0xf2, 0xff, 0xff, 0x0b, 0xf8, 0xff, 0xff, 0x5c, 0xf6, 0xff, 0xff, 0xd7, 0x09,
+ 0x00, 0x00, 0x94, 0x26, 0x00, 0x00, 0xaa, 0x27, 0x00, 0x00, 0x40, 0x0d, 0x00,
+ 0x00, 0xd7, 0xf3, 0xff, 0xff, 0xa1, 0x1a, 0x00, 0x00, 0x97, 0xfa, 0xff, 0xff,
+ 0xce, 0xe1, 0xff, 0xff, 0x5e, 0x1c, 0x00, 0x00, 0x36, 0x13, 0x00, 0x00, 0xa1,
+ 0x37, 0x00, 0x00, 0xfe, 0x32, 0x00, 0x00, 0x9a, 0x26, 0x00, 0x00, 0x12, 0xf1,
+ 0xff, 0xff, 0x4a, 0x5a, 0xfe, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
+ 0x00, 0x0c, 0xb1, 0x0a, 0x7f, 0x0c, 0xfe, 0xf6, 0xff, 0x9a, 0xd5, 0xc9, 0x00,
+ 0xf8, 0xbc, 0xe4, 0xe0, 0x21, 0x28, 0x06, 0xed, 0x30, 0x1e, 0xca, 0xcf, 0x0f,
+ 0x05, 0xdb, 0xe9, 0xea, 0xd4, 0x0d, 0xb5, 0x30, 0xdd, 0xe8, 0x4b, 0xa3, 0xdc,
+ 0x1c, 0x2b, 0xf0, 0x3b, 0xcf, 0x1f, 0xda, 0x12, 0xfd, 0xfb, 0xd0, 0x20, 0xcb,
+ 0xb3, 0x12, 0x36, 0xd7, 0x35, 0xde, 0x03, 0x70, 0x03, 0x39, 0x05, 0xe8, 0xce,
+ 0x30, 0xf3, 0x3b, 0xfd, 0x35, 0x0b, 0x36, 0xaa, 0xff, 0xc6, 0x1a, 0xfd, 0x18,
+ 0x01, 0xc1, 0x2b, 0xc1, 0xfe, 0x0e, 0xef, 0x13, 0xd4, 0x04, 0x17, 0xde, 0xd9,
+ 0x01, 0xfb, 0xd7, 0xf8, 0xff, 0x0a, 0xf9, 0xf8, 0x0b, 0x23, 0xc1, 0x34, 0x52,
+ 0xd7, 0x2b, 0x8f, 0xe4, 0x39, 0x37, 0x39, 0xf5, 0xe4, 0x14, 0xed, 0xe2, 0x20,
+ 0xf8, 0x0f, 0x02, 0xba, 0x11, 0x24, 0xf7, 0x00, 0xc2, 0xf2, 0xe7, 0xf5, 0xb3,
+ 0xfa, 0xfa, 0xad, 0x42, 0x3c, 0x0d, 0x02, 0x20, 0x9f, 0x21, 0xb0, 0xfc, 0x22,
+ 0xf8, 0x29, 0xf9, 0x32, 0x1c, 0xf7, 0xbc, 0xff, 0xee, 0xa8, 0xfd, 0x31, 0x07,
+ 0x2b, 0x84, 0x03, 0xf6, 0x2e, 0xcc, 0xd9, 0x1e, 0x02, 0x0b, 0x10, 0x97, 0x49,
+ 0xcf, 0xcd, 0xd1, 0x38, 0xc5, 0xe6, 0xed, 0xb0, 0x2d, 0xdb, 0x2b, 0xfa, 0xf8,
+ 0xf0, 0xf5, 0xf5, 0x04, 0x44, 0x4f, 0xf1, 0x44, 0x44, 0xd0, 0x0f, 0x30, 0x27,
+ 0xaa, 0x22, 0x89, 0x00, 0xe5, 0x0f, 0xcb, 0x05, 0xef, 0x9e, 0xe9, 0xe5, 0xbd,
+ 0xe5, 0xd5, 0xe5, 0xd4, 0xd1, 0xff, 0xa6, 0xd8, 0x3a, 0xfb, 0x08, 0x09, 0xe9,
+ 0xde, 0x27, 0x54, 0xf2, 0xe4, 0x73, 0xe8, 0x0a, 0xfe, 0x1c, 0x61, 0x32, 0x22,
+ 0x16, 0xfe, 0xaf, 0x43, 0xcc, 0x1f, 0x26, 0x21, 0x50, 0x00, 0x7f, 0x05, 0xf0,
+ 0xf0, 0xf1, 0xad, 0x20, 0xfa, 0xe3, 0x40, 0xdc, 0xfc, 0x97, 0xef, 0xc5, 0x07,
+ 0x1f, 0xaf, 0xe6, 0xf5, 0x13, 0xf6, 0x08, 0x1e, 0xfe, 0xc4, 0xc7, 0x28, 0xde,
+ 0xf1, 0x11, 0xcb, 0x0c, 0x23, 0x1b, 0x15, 0x05, 0xe2, 0x00, 0x1e, 0xfd, 0x19,
+ 0xfc, 0x53, 0xe5, 0xfe, 0xb7, 0xab, 0x21, 0x0a, 0x46, 0x07, 0xcb, 0x3a, 0x1a,
+ 0x51, 0xfb, 0x01, 0xcd, 0xe6, 0xf7, 0xfc, 0xc3, 0x35, 0xcb, 0xf7, 0xd7, 0x21,
+ 0xe0, 0xfc, 0xea, 0x25, 0x9c, 0x24, 0xec, 0xfc, 0x4e, 0x1a, 0x21, 0x28, 0xb1,
+ 0xfd, 0xda, 0xde, 0x81, 0xf7, 0xc8, 0xe9, 0xaa, 0x1e, 0xd5, 0x4d, 0xf5, 0x36,
+ 0x05, 0x13, 0x03, 0x29, 0xfe, 0x09, 0x00, 0x05, 0xf0, 0xfc, 0xeb, 0xe2, 0xb9,
+ 0x27, 0x19, 0xd5, 0xca, 0xf9, 0xf8, 0x03, 0xee, 0x1c, 0xd9, 0xf5, 0xca, 0xf0,
+ 0xe0, 0xfa, 0xdb, 0x3d, 0x1f, 0x2b, 0x34, 0xf9, 0xe6, 0xd7, 0xdc, 0xd3, 0xfd,
+ 0xe9, 0xf2, 0xdd, 0x22, 0xcc, 0x2d, 0xff, 0xd5, 0xec, 0xda, 0x46, 0xb9, 0x5d,
+ 0x32, 0xda, 0xfe, 0xc0, 0xe1, 0x28, 0x28, 0x0c, 0x39, 0xec, 0x39, 0xf7, 0x25,
+ 0xf2, 0x0d, 0xf4, 0xcf, 0x22, 0xfa, 0x26, 0x11, 0x00, 0xb6, 0x81, 0x1e, 0x11,
+ 0xc1, 0xd6, 0x14, 0x1f, 0x12, 0x4f, 0xd0, 0xc7, 0xef, 0xf2, 0xd6, 0xf6, 0xed,
+ 0x1b, 0xfd, 0xda, 0xf3, 0x26, 0x08, 0xd4, 0x18, 0x2c, 0xc7, 0xf8, 0x15, 0xbd,
+ 0xf6, 0x24, 0x29, 0x0f, 0xa5, 0x1e, 0xcd, 0xd9, 0xf5, 0xa7, 0xea, 0x02, 0xd3,
+ 0x82, 0xf0, 0xfc, 0xdf, 0xbd, 0x45, 0x18, 0x70, 0x99, 0x21, 0x08, 0xc1, 0x1e,
+ 0xef, 0xee, 0xe7, 0x13, 0xbf, 0xcd, 0xe1, 0x30, 0xe7, 0xcf, 0xf3, 0x0e, 0x58,
+ 0xed, 0xd2, 0xf3, 0x10, 0xf1, 0x07, 0xe1, 0x06, 0xe5, 0xf8, 0xda, 0x2c, 0x05,
+ 0x03, 0xc2, 0xea, 0xfd, 0xc3, 0xf4, 0xe5, 0x5c, 0xf1, 0x06, 0xcc, 0x59, 0xd7,
+ 0x33, 0xda, 0x58, 0xee, 0xf6, 0xdf, 0x23, 0xc3, 0xde, 0xaf, 0xf4, 0x38, 0x2b,
+ 0x08, 0x43, 0xd8, 0x0d, 0x55, 0x22, 0x67, 0x5b, 0x54, 0xd2, 0xf9, 0x6b, 0xdf,
+ 0x18, 0x01, 0x0b, 0x1f, 0x5f, 0x01, 0xfc, 0x18, 0x2e, 0x15, 0x73, 0xea, 0xec,
+ 0x10, 0xa3, 0x9f, 0x19, 0xe8, 0xfe, 0x81, 0xff, 0xfd, 0x2c, 0xc1, 0xd7, 0xc6,
+ 0xf9, 0x47, 0xfa, 0x3f, 0x03, 0xd4, 0x11, 0x2c, 0xbe, 0xd9, 0xa0, 0x1c, 0x12,
+ 0xfc, 0x07, 0x03, 0x0e, 0xea, 0x4a, 0xe4, 0xb9, 0xab, 0xf6, 0xf9, 0x1c, 0xfe,
+ 0x08, 0xe7, 0xe6, 0xe5, 0xce, 0x22, 0xe3, 0x9a, 0xd8, 0xf6, 0x25, 0xbb, 0x95,
+ 0x5c, 0x09, 0xd1, 0xe1, 0x10, 0xf4, 0xe0, 0xca, 0x10, 0x19, 0xb4, 0xfe, 0x34,
+ 0x3a, 0xc7, 0x0e, 0xc1, 0xa2, 0x7a, 0xdd, 0xef, 0x39, 0xfc, 0x13, 0xdf, 0xad,
+ 0xea, 0xeb, 0xd7, 0x45, 0x1d, 0xd9, 0x13, 0x6b, 0x33, 0xb3, 0x33, 0xcb, 0xdb,
+ 0x94, 0x0a, 0x64, 0xf7, 0xee, 0x0b, 0x04, 0xdb, 0x55, 0x37, 0x2a, 0x66, 0xeb,
+ 0xb6, 0x13, 0xf2, 0xdb, 0x2d, 0xe9, 0x29, 0xff, 0xe9, 0x10, 0xe5, 0xc1, 0xf7,
+ 0xb3, 0x4b, 0xdc, 0x24, 0x10, 0xe2, 0xcc, 0xc5, 0xd2, 0xc2, 0xd2, 0x37, 0xe9,
+ 0xb5, 0x4a, 0x0e, 0x46, 0xda, 0x35, 0xca, 0x40, 0xf4, 0xcf, 0xcb, 0x05, 0xe1,
+ 0xa6, 0x1c, 0xce, 0x89, 0xc6, 0x4c, 0xe6, 0x32, 0x85, 0x0c, 0xaa, 0x16, 0xe6,
+ 0xef, 0x2d, 0xf2, 0x05, 0xb6, 0x5e, 0x2a, 0x39, 0x24, 0x96, 0x4c, 0xbd, 0xc8,
+ 0xea, 0x22, 0xb9, 0x01, 0x2a, 0x27, 0x12, 0xe8, 0xf3, 0xaa, 0x5e, 0x24, 0x26,
+ 0x01, 0xe2, 0xf5, 0x61, 0x31, 0x9e, 0xc4, 0x4c, 0xb4, 0x0f, 0xbf, 0xd8, 0xf2,
+ 0xe4, 0x10, 0x12, 0xa1, 0x48, 0xdd, 0xec, 0x3b, 0xc0, 0x9f, 0x4a, 0xb4, 0xf0,
+ 0x6c, 0x4b, 0xae, 0x12, 0x2b, 0xdc, 0x02, 0x8a, 0x6f, 0x08, 0xb1, 0x81, 0xb7,
+ 0x23, 0x42, 0xfc, 0x4b, 0xda, 0x64, 0xe5, 0xff, 0xc3, 0x32, 0x63, 0xc0, 0xdf,
+ 0xb6, 0x3d, 0xfc, 0xfa, 0xec, 0xea, 0x4d, 0x28, 0xe4, 0xdc, 0x47, 0xcb, 0xf6,
+ 0xb9, 0xfc, 0x06, 0x2d, 0xb2, 0xc0, 0xdb, 0x40, 0xcb, 0x2d, 0x15, 0xfb, 0xf9,
+ 0xfd, 0x39, 0x19, 0x19, 0x1c, 0xc5, 0x05, 0x03, 0xc1, 0x49, 0xe4, 0x05, 0x40,
+ 0x2f, 0xb8, 0x34, 0x81, 0xf8, 0xe6, 0xa2, 0xbb, 0xf4, 0xed, 0x5d, 0x0b, 0x1b,
+ 0x10, 0x1a, 0xfa, 0x5b, 0x01, 0xfc, 0xf2, 0xd6, 0xdb, 0x37, 0x0d, 0x4e, 0x32,
+ 0x36, 0xe1, 0x2a, 0x2a, 0x37, 0x3e, 0xd8, 0x1e, 0x53, 0xe8, 0x79, 0x1d, 0x23,
+ 0x15, 0x0e, 0x42, 0x40, 0xed, 0xca, 0x2c, 0x03, 0xe0, 0xbd, 0xda, 0x33, 0xfd,
+ 0x46, 0x25, 0xfd, 0x78, 0xd0, 0xc4, 0x29, 0xc6, 0xe7, 0xd8, 0x4c, 0xd4, 0xf7,
+ 0x28, 0x62, 0xcc, 0xef, 0x0d, 0x4f, 0xf1, 0x12, 0xdb, 0x12, 0xc9, 0xc8, 0xe8,
+ 0xbe, 0x7b, 0xf3, 0xc0, 0xe4, 0x16, 0x16, 0x3c, 0xd7, 0xe9, 0x01, 0xf5, 0x2a,
+ 0x19, 0x41, 0x9a, 0x8e, 0xc5, 0xd8, 0xec, 0xe4, 0x1f, 0xff, 0xdb, 0xf7, 0xbd,
+ 0x17, 0xfa, 0xda, 0x01, 0x06, 0x48, 0xf6, 0x2e, 0xcc, 0xc9, 0xbd, 0xf5, 0xdf,
+ 0x55, 0xf7, 0x12, 0xcf, 0xd4, 0x78, 0xb3, 0x11, 0x43, 0x37, 0x68, 0x47, 0xc6,
+ 0xf4, 0x1e, 0x4d, 0xc6, 0x3c, 0xb9, 0xb8, 0x21, 0x31, 0x02, 0x25, 0xe9, 0x18,
+ 0xec, 0x02, 0x81, 0x09, 0xf6, 0xec, 0x04, 0xff, 0xed, 0x26, 0xa4, 0x4f, 0x9f,
+ 0xba, 0x0d, 0x4d, 0x42, 0x3f, 0x3a, 0x28, 0x02, 0x48, 0x59, 0xdb, 0xdb, 0xf1,
+ 0xe7, 0x3f, 0x41, 0xaf, 0xba, 0x32, 0x8c, 0xcb, 0x2e, 0x23, 0xca, 0x20, 0x05,
+ 0x53, 0x00, 0x03, 0xc2, 0x15, 0x1f, 0xa6, 0xaf, 0x21, 0xe1, 0xc0, 0xb0, 0xc8,
+ 0xde, 0xa9, 0x43, 0xd7, 0x33, 0x03, 0x1f, 0x43, 0xb1, 0x09, 0x9e, 0x0c, 0x14,
+ 0x0d, 0xbc, 0x36, 0x10, 0x0d, 0x13, 0xc6, 0xe3, 0x4f, 0x1d, 0xd1, 0xc8, 0xca,
+ 0x08, 0xee, 0xb1, 0x07, 0x23, 0xe7, 0x04, 0x0d, 0x04, 0x1a, 0x15, 0x00, 0x3f,
+ 0x06, 0xf4, 0xc9, 0xde, 0x08, 0xd3, 0x74, 0x10, 0x1d, 0x2f, 0x27, 0xa3, 0xf4,
+ 0xc4, 0xff, 0xe8, 0x02, 0x1f, 0x0e, 0xe7, 0xfd, 0x23, 0x08, 0xd9, 0xe5, 0xb8,
+ 0xba, 0xf4, 0x3e, 0xca, 0xe9, 0xc6, 0xe7, 0xaf, 0x15, 0x20, 0xed, 0x7b, 0xd8,
+ 0x02, 0x06, 0xf3, 0xa2, 0x39, 0xf3, 0x81, 0xeb, 0xce, 0xef, 0xf8, 0x22, 0x25,
+ 0xf5, 0xde, 0x12, 0xf1, 0x14, 0x47, 0xe0, 0xf0, 0xf6, 0xfe, 0xba, 0xec, 0xea,
+ 0xe6, 0x2e, 0x0f, 0x10, 0x1a, 0x58, 0xef, 0xf9, 0x0e, 0x0c, 0xc2, 0xe2, 0xd3,
+ 0xee, 0xfc, 0x12, 0x1c, 0x3d, 0xdf, 0xd9, 0x35, 0x1a, 0xe6, 0x0b, 0x21, 0xc6,
+ 0x0a, 0x07, 0xeb, 0xc5, 0xe2, 0x33, 0xef, 0x0b, 0xed, 0x1b, 0x23, 0x03, 0x1e,
+ 0xdb, 0x10, 0xde, 0xc2, 0x7f, 0x2d, 0xe8, 0xa9, 0x15, 0x03, 0xe2, 0xd0, 0x41,
+ 0x5c, 0x1d, 0xdf, 0xff, 0x0e, 0xea, 0xe1, 0xc6, 0xef, 0x15, 0x09, 0x1a, 0x21,
+ 0x14, 0xec, 0xfa, 0xe9, 0xe8, 0x1c, 0x75, 0x1b, 0xb6, 0x2c, 0x11, 0x25, 0xfd,
+ 0x37, 0x12, 0xc5, 0xcd, 0x1f, 0x1d, 0x24, 0xd9, 0x25, 0x1c, 0xb0, 0xfb, 0x03,
+ 0xca, 0x13, 0x13, 0x22, 0x09, 0x08, 0x33, 0x13, 0xfe, 0xd7, 0x4a, 0xfc, 0xcc,
+ 0xfa, 0x04, 0xee, 0xe8, 0xbb, 0xc7, 0xfa, 0xdf, 0x13, 0xd8, 0xed, 0x20, 0x1b,
+ 0xbc, 0x09, 0xf3, 0x1c, 0x05, 0x3c, 0x55, 0xef, 0x24, 0x1a, 0x18, 0x65, 0xe0,
+ 0x31, 0xcb, 0x21, 0x41, 0x0a, 0x18, 0xf9, 0xed, 0xf0, 0x20, 0xee, 0x01, 0x28,
+ 0xe0, 0xc6, 0xc7, 0xc2, 0xf6, 0xee, 0x07, 0x40, 0xe7, 0xf7, 0xfc, 0x2a, 0xf3,
+ 0x15, 0x53, 0x0e, 0x09, 0xd9, 0x18, 0xcf, 0x02, 0x0f, 0x21, 0xfe, 0xfe, 0x04,
+ 0xf1, 0xc4, 0x47, 0xd7, 0x1f, 0xf9, 0xfd, 0x08, 0x41, 0xf5, 0xe7, 0xed, 0x1b,
+ 0x03, 0xc8, 0xe0, 0xf6, 0xf5, 0x05, 0x23, 0x03, 0x33, 0x2a, 0x11, 0x2b, 0xfe,
+ 0x23, 0x03, 0xf9, 0x08, 0x20, 0xc7, 0xfd, 0xeb, 0xf9, 0xf4, 0x0b, 0x0a, 0xfa,
+ 0xcb, 0x33, 0x08, 0xf1, 0x26, 0xdf, 0xf8, 0x09, 0xbc, 0x03, 0x13, 0x4e, 0xfc,
+ 0x1e, 0xf0, 0x29, 0x0e, 0x16, 0x31, 0x1b, 0xfb, 0x0b, 0x06, 0xed, 0xcf, 0xf3,
+ 0xc5, 0x16, 0x05, 0x05, 0xec, 0xfd, 0x1c, 0x37, 0xd2, 0xe2, 0x1b, 0x03, 0x24,
+ 0xfa, 0x3f, 0x1e, 0xf9, 0xe2, 0x1f, 0x05, 0xcc, 0x02, 0x7f, 0xff, 0xfe, 0x09,
+ 0x4f, 0x23, 0x00, 0x18, 0x0a, 0x01, 0x42, 0x05, 0xea, 0xd1, 0xdc, 0xfb, 0x16,
+ 0x3f, 0x23, 0x00, 0xe6, 0xf7, 0x0a, 0x1e, 0xdd, 0x02, 0x18, 0xf9, 0x14, 0xdd,
+ 0xf2, 0x31, 0x19, 0xfd, 0x2e, 0xf7, 0xf4, 0xe7, 0x24, 0x9e, 0xd1, 0x05, 0x5c,
+ 0xde, 0xb1, 0x1a, 0xe0, 0x32, 0xb6, 0x05, 0x0b, 0x14, 0x46, 0xde, 0x3a, 0xe4,
+ 0xfa, 0x14, 0xe2, 0xe2, 0xdc, 0x32, 0x02, 0xd1, 0x21, 0xfd, 0x14, 0x22, 0x13,
+ 0x02, 0xfd, 0x08, 0x9a, 0x02, 0xd1, 0x4b, 0xf3, 0xe4, 0x13, 0xc1, 0xcb, 0x09,
+ 0x02, 0xec, 0xbb, 0x17, 0x25, 0x81, 0x48, 0x27, 0xea, 0xcd, 0x0e, 0x18, 0xdc,
+ 0x17, 0x04, 0x15, 0x38, 0x04, 0xeb, 0xd3, 0xe2, 0xf6, 0xac, 0xe8, 0xbf, 0xb9,
+ 0x3f, 0xed, 0xe4, 0xee, 0x2c, 0x13, 0x11, 0xee, 0xba, 0x0f, 0x14, 0x07, 0xc1,
+ 0x0f, 0xde, 0xea, 0xe4, 0x57, 0xfb, 0x00, 0x27, 0x3d, 0x31, 0x1e, 0x3d, 0xf0,
+ 0x0e, 0x0b, 0x15, 0xdc, 0xcc, 0xd5, 0x27, 0x6f, 0xf7, 0xe6, 0xfb, 0x32, 0x56,
+ 0xf8, 0xe0, 0xcc, 0x48, 0x06, 0x1e, 0xfb, 0x08, 0xf9, 0xff, 0x1e, 0x03, 0x1b,
+ 0x17, 0xa0, 0x6a, 0xc6, 0x63, 0x0d, 0x62, 0xd6, 0xd1, 0xc9, 0xea, 0x35, 0x41,
+ 0xe8, 0x0c, 0x12, 0x32, 0xe1, 0xe1, 0x12, 0x70, 0xff, 0x05, 0x35, 0x19, 0xf1,
+ 0xf3, 0x07, 0xec, 0x0e, 0xd5, 0xe6, 0xed, 0x6d, 0xd5, 0xf9, 0x32, 0xea, 0x30,
+ 0xb9, 0xe5, 0x3d, 0xe2, 0xe3, 0xfb, 0xd2, 0x05, 0x23, 0xcc, 0x9c, 0xa5, 0xc5,
+ 0xe9, 0x03, 0x1d, 0x52, 0xe0, 0x09, 0x0b, 0xe4, 0xeb, 0xd5, 0xba, 0x12, 0x1d,
+ 0xdd, 0x19, 0x25, 0xbb, 0xba, 0x2b, 0x4c, 0xf8, 0xbe, 0xe3, 0xf3, 0x32, 0xff,
+ 0xb0, 0x31, 0x0c, 0x21, 0x0f, 0x0e, 0x3b, 0x0d, 0xc1, 0x0a, 0xc9, 0x15, 0x91,
+ 0x17, 0xd4, 0x19, 0x99, 0xea, 0xb4, 0xdb, 0x3c, 0x10, 0xef, 0xaa, 0x04, 0xf8,
+ 0xfe, 0x04, 0xd3, 0xf4, 0x36, 0xf9, 0x7f, 0xc4, 0xf0, 0x29, 0xd9, 0x0d, 0x00,
+ 0xc1, 0x31, 0xf3, 0xee, 0x23, 0x27, 0x37, 0xe6, 0xd1, 0xcf, 0xe0, 0xfb, 0xc8,
+ 0x2a, 0x36, 0x17, 0xd0, 0xcf, 0xfa, 0xe1, 0x34, 0x0d, 0x1a, 0x01, 0x2a, 0xe4,
+ 0xf2, 0xf8, 0x10, 0x49, 0xd8, 0xff, 0x18, 0xea, 0x2c, 0xf4, 0xb5, 0x37, 0x00,
+ 0x14, 0x13, 0xed, 0xfe, 0xd4, 0x9f, 0xf6, 0xf3, 0xd5, 0xbc, 0x0f, 0xe8, 0xb5,
+ 0x1e, 0x1a, 0x48, 0x10, 0x27, 0xc7, 0xf0, 0x26, 0xea, 0x40, 0xf8, 0x0c, 0x53,
+ 0x00, 0xdf, 0x28, 0xdf, 0xf3, 0xbc, 0x19, 0xf5, 0x1d, 0x98, 0x33, 0xfa, 0xeb,
+ 0x1c, 0xeb, 0xbb, 0x03, 0xf7, 0x45, 0x11, 0x27, 0x08, 0xfd, 0x06, 0x0b, 0xe3,
+ 0xd9, 0xf1, 0xb0, 0xff, 0xe5, 0xf0, 0xed, 0x08, 0x29, 0xc5, 0x05, 0xf1, 0xd5,
+ 0x1a, 0xd7, 0xc8, 0xcb, 0x7f, 0x81, 0xea, 0xe3, 0xef, 0xb9, 0xef, 0x1a, 0x10,
+ 0xe0, 0x2c, 0xd0, 0x34, 0x4d, 0xf2, 0x08, 0x25, 0xff, 0xb5, 0x0d, 0xfe, 0xd8,
+ 0x13, 0x50, 0x2f, 0x2c, 0xee, 0x68, 0xdd, 0x3c, 0x03, 0xf1, 0xf5, 0x3b, 0xe9,
+ 0xc4, 0xf4, 0x33, 0x06, 0xe1, 0xfd, 0x21, 0xb7, 0xf7, 0x15, 0xf9, 0xc0, 0xf9,
+ 0xd2, 0x1a, 0xfb, 0xbe, 0xd5, 0x37, 0x20, 0x02, 0xe4, 0x2b, 0xef, 0xe6, 0xec,
+ 0xad, 0xc2, 0xf6, 0xe7, 0x08, 0x15, 0xe3, 0x5f, 0xdc, 0xff, 0xaa, 0xfa, 0x02,
+ 0x1c, 0xf8, 0xf9, 0x12, 0x1a, 0x42, 0xc0, 0x00, 0x34, 0x02, 0x02, 0x27, 0x3c,
+ 0xeb, 0x11, 0x59, 0xd4, 0xea, 0x33, 0x1e, 0xb7, 0x07, 0x32, 0x01, 0xf5, 0x28,
+ 0x7f, 0x09, 0x0b, 0xde, 0xe8, 0x46, 0x54, 0xa0, 0xff, 0x08, 0x15, 0x19, 0x02,
+ 0x12, 0xa5, 0xd4, 0x05, 0xbe, 0x1f, 0x2d, 0xae, 0xd4, 0x2c, 0x29, 0xe9, 0xe3,
+ 0x18, 0x9e, 0x49, 0x4a, 0xe8, 0xe5, 0xbc, 0x84, 0xbe, 0x47, 0x3f, 0xb9, 0x25,
+ 0xc5, 0xbe, 0x19, 0xeb, 0x36, 0xf3, 0xe2, 0x0f, 0x10, 0x32, 0xe9, 0x04, 0x1a,
+ 0xe9, 0xe2, 0xc2, 0xf7, 0x22, 0x02, 0xff, 0xfa, 0xff, 0xcb, 0x0b, 0xcd, 0x08,
+ 0xd2, 0xf2, 0x17, 0xf4, 0x30, 0x30, 0x29, 0xdd, 0xc0, 0xfa, 0xed, 0x04, 0xff,
+ 0xfd, 0x2c, 0x02, 0xc6, 0x09, 0x01, 0x03, 0x3b, 0x00, 0x0e, 0x01, 0xe1, 0xd8,
+ 0x0d, 0x2c, 0x02, 0x0c, 0xe4, 0xf6, 0x2e, 0x39, 0xe1, 0xc3, 0x33, 0xfa, 0xe0,
+ 0xd7, 0x17, 0x00, 0x10, 0x29, 0x2c, 0xec, 0x43, 0xfe, 0xc6, 0x19, 0xe1, 0x18,
+ 0x51, 0xec, 0x0e, 0x3b, 0xda, 0xf1, 0xb5, 0xd7, 0xfc, 0xb1, 0xe7, 0x4d, 0xcb,
+ 0xf8, 0xe1, 0xb9, 0xec, 0x09, 0xb4, 0xd5, 0x53, 0x23, 0xc5, 0x2d, 0x1b, 0xaf,
+ 0xd8, 0xc8, 0xf3, 0x14, 0x50, 0x03, 0xf9, 0x2d, 0x1c, 0xe0, 0x0a, 0xda, 0xd7,
+ 0xf4, 0x29, 0x37, 0x26, 0xec, 0xc4, 0x07, 0x17, 0x58, 0xef, 0x2f, 0xfc, 0x17,
+ 0x23, 0xe4, 0x55, 0x39, 0x0c, 0x32, 0x0d, 0xc1, 0x0c, 0x4a, 0x12, 0x02, 0xf7,
+ 0x12, 0x25, 0x03, 0xfa, 0x7f, 0x21, 0x03, 0xd2, 0x49, 0x29, 0x07, 0xa4, 0x24,
+ 0x11, 0xfb, 0xd2, 0x01, 0x02, 0xf7, 0x04, 0x12, 0xe0, 0x03, 0x14, 0x40, 0x11,
+ 0xea, 0x15, 0x03, 0x43, 0xe1, 0x23, 0xed, 0xdb, 0xe1, 0xe8, 0xe9, 0x00, 0x3e,
+ 0xd3, 0x6b, 0xdc, 0xe1, 0x05, 0x0a, 0xe5, 0xe8, 0xda, 0xf4, 0xcb, 0x00, 0x7f,
+ 0x45, 0xfc, 0x37, 0x36, 0xcd, 0x05, 0x09, 0xc8, 0x33, 0x56, 0x02, 0xd9, 0xda,
+ 0xfe, 0x04, 0xeb, 0x07, 0xd4, 0xdf, 0xd0, 0x07, 0xe4, 0xf7, 0x10, 0x38, 0x14,
+ 0xd6, 0x1b, 0x44, 0x22, 0xdf, 0xef, 0x19, 0xde, 0xf2, 0xdb, 0x04, 0x19, 0xd4,
+ 0x35, 0xf9, 0xd6, 0xba, 0x02, 0xe8, 0xcc, 0xec, 0x35, 0x0f, 0x2e, 0xf1, 0xf5,
+ 0xef, 0xdc, 0x0b, 0xcb, 0xe3, 0x16, 0x05, 0xce, 0xff, 0x07, 0xae, 0x45, 0xe9,
+ 0x1e, 0x0d, 0xc5, 0x33, 0x27, 0xd4, 0x21, 0x2c, 0x05, 0xed, 0xdd, 0xe6, 0xf4,
+ 0x29, 0xc4, 0xf0, 0xc7, 0xca, 0x21, 0x68, 0xf9, 0x09, 0x01, 0xc4, 0xf8, 0xf5,
+ 0x9a, 0x22, 0x0b, 0x2c, 0xf1, 0x18, 0xfa, 0x37, 0x0b, 0x03, 0x28, 0xcf, 0x05,
+ 0x20, 0x15, 0xe8, 0x42, 0xe7, 0xe0, 0x02, 0x98, 0xa1, 0x50, 0x1b, 0x16, 0x5a,
+ 0x22, 0xb6, 0x2c, 0x61, 0xea, 0xce, 0x96, 0x45, 0xfd, 0xd2, 0xfe, 0xff, 0xbd,
+ 0xee, 0x54, 0xff, 0xf6, 0x17, 0x20, 0xf5, 0x31, 0x22, 0xe8, 0xbd, 0xfa, 0xfc,
+ 0xb5, 0xe1, 0xad, 0x07, 0xe0, 0xf2, 0xf4, 0x1b, 0xb0, 0x22, 0xfd, 0x11, 0x35,
+ 0x38, 0xb8, 0xb9, 0xcf, 0x03, 0x2d, 0x10, 0xd8, 0x16, 0xb7, 0x04, 0x2a, 0x4f,
+ 0x06, 0x03, 0x1c, 0x5f, 0xfc, 0x11, 0x23, 0xe0, 0xe9, 0x33, 0x73, 0x2f, 0x40,
+ 0x31, 0xbe, 0x10, 0xd8, 0xd4, 0x1e, 0xea, 0xd5, 0xf4, 0x0e, 0x3c, 0x5d, 0xcb,
+ 0xd1, 0xef, 0x92, 0xf6, 0x2c, 0xdc, 0x03, 0x1c, 0xfa, 0x7f, 0xdd, 0xd9, 0xc0,
+ 0xea, 0xe6, 0xf4, 0xea, 0xf9, 0xd4, 0x01, 0xde, 0xc4, 0xfc, 0x01, 0x07, 0xd7,
+ 0xd3, 0xef, 0xe5, 0x1b, 0x2f, 0x29, 0x2a, 0xdb, 0x3d, 0x1a, 0xc2, 0xf7, 0xf2,
+ 0x12, 0xe2, 0x30, 0x3f, 0x21, 0x0d, 0xda, 0xfa, 0x0a, 0x55, 0xdd, 0xfa, 0x1f,
+ 0xd0, 0xfd, 0xc3, 0xfd, 0x35, 0xfb, 0x2b, 0xeb, 0xe3, 0xf9, 0x42, 0xed, 0x1a,
+ 0x12, 0x3a, 0x19, 0xa6, 0x4e, 0x27, 0x13, 0x1e, 0xe4, 0xf8, 0x66, 0x57, 0x70,
+ 0x93, 0x8a, 0xeb, 0x03, 0xb7, 0xfd, 0x64, 0x1b, 0xde, 0xfd, 0x20, 0xd2, 0x49,
+ 0xc8, 0x27, 0x12, 0x05, 0x24, 0x21, 0x15, 0x0e, 0x0a, 0x1a, 0xfb, 0x68, 0xcb,
+ 0xd1, 0x0d, 0xf3, 0xf7, 0x7f, 0x71, 0xc7, 0x0b, 0xd7, 0x35, 0xfd, 0xd0, 0xcb,
+ 0x1d, 0x19, 0xdc, 0x1c, 0x35, 0xe0, 0xcd, 0xfb, 0x13, 0x43, 0x32, 0x4a, 0xfa,
+ 0x21, 0xf8, 0x07, 0x4e, 0x1a, 0xf8, 0xe7, 0xbf, 0x06, 0xec, 0xeb, 0x29, 0x21,
+ 0xd4, 0x38, 0x1e, 0xd7, 0x0a, 0x81, 0xe0, 0x00, 0x12, 0xf7, 0x6b, 0xd5, 0xf9,
+ 0x0e, 0xee, 0x09, 0x08, 0x12, 0xee, 0x3d, 0x39, 0x0b, 0xe7, 0x12, 0x18, 0x34,
+ 0x19, 0x08, 0x0b, 0xfb, 0x33, 0xe2, 0x39, 0x2f, 0x01, 0xda, 0xfc, 0xde, 0x0a,
+ 0xfe, 0x1e, 0xf9, 0xeb, 0x2f, 0xbc, 0xed, 0xf3, 0xc1, 0x05, 0x2c, 0xea, 0xf2,
+ 0xfb, 0xe0, 0xf5, 0xf2, 0x11, 0x22, 0xd4, 0x67, 0x02, 0x1e, 0x14, 0xdc, 0x1b,
+ 0xf4, 0xc2, 0xf5, 0xcf, 0x04, 0x44, 0x36, 0xe7, 0xdd, 0xc4, 0xde, 0x10, 0xe1,
+ 0xf6, 0x20, 0x2f, 0x17, 0x11, 0xfe, 0xfc, 0x03, 0xd9, 0x5b, 0x16, 0xff, 0xdc,
+ 0xf6, 0xfb, 0xdc, 0xda, 0x0e, 0x15, 0x14, 0xfc, 0x3b, 0xe3, 0xc8, 0x6f, 0x22,
+ 0x9d, 0xf3, 0xf7, 0x28, 0x44, 0x0b, 0x19, 0x21, 0xf7, 0xfe, 0x0f, 0xe0, 0x36,
+ 0xd3, 0x32, 0xe4, 0xdf, 0x32, 0x31, 0x07, 0xdf, 0xd3, 0xe1, 0x48, 0xe6, 0xde,
+ 0x08, 0xda, 0xd9, 0xf2, 0x1c, 0x06, 0xbe, 0xfc, 0x19, 0xd7, 0xe8, 0x03, 0xf2,
+ 0x04, 0x2a, 0x06, 0x1d, 0x0b, 0x1a, 0x21, 0x20, 0x47, 0xfe, 0x32, 0xc4, 0x17,
+ 0x13, 0x03, 0x26, 0xc3, 0xd6, 0xff, 0xe2, 0x81, 0x2b, 0xe9, 0xfc, 0x01, 0xf0,
+ 0x37, 0x11, 0x16, 0xb9, 0x01, 0xf5, 0x0c, 0xdf, 0x07, 0xd6, 0xe8, 0x3d, 0xf2,
+ 0xeb, 0xd5, 0x09, 0xfa, 0xc6, 0xf0, 0xe5, 0xfa, 0x24, 0x0e, 0xef, 0xdc, 0x07,
+ 0xfb, 0x64, 0x54, 0xd4, 0xf0, 0x26, 0x5d, 0xd0, 0xd8, 0xe5, 0xe7, 0x2b, 0xe9,
+ 0x13, 0x1d, 0x69, 0x4c, 0x2f, 0x68, 0x18, 0xd4, 0x62, 0x31, 0x33, 0x3e, 0xf1,
+ 0x42, 0x25, 0x90, 0xd6, 0x6b, 0xdf, 0xef, 0xc4, 0x0d, 0x05, 0x04, 0x32, 0x20,
+ 0x17, 0x13, 0x0f, 0xcb, 0x09, 0x04, 0x18, 0x1f, 0x21, 0x51, 0xe9, 0xdf, 0x18,
+ 0xa4, 0x30, 0xfd, 0xba, 0xb9, 0xca, 0x5f, 0xe7, 0xd9, 0xc7, 0x94, 0x30, 0x23,
+ 0xfb, 0x1d, 0xd8, 0xf7, 0xf3, 0xb1, 0x3e, 0xfa, 0xf9, 0xcb, 0x09, 0x33, 0x34,
+ 0xe3, 0xf3, 0x27, 0xf6, 0xf5, 0xf7, 0xd2, 0xfa, 0xe4, 0xdf, 0xd7, 0x42, 0xca,
+ 0x11, 0x11, 0x2e, 0x3c, 0x12, 0x3f, 0xcf, 0x0e, 0xf4, 0xd5, 0x23, 0xf1, 0x2c,
+ 0x1b, 0x14, 0xdb, 0xf7, 0xfe, 0xec, 0x00, 0xc4, 0xe4, 0x01, 0x04, 0x1d, 0xe9,
+ 0x2c, 0xde, 0x1e, 0x28, 0xe0, 0xe9, 0x06, 0xf4, 0x34, 0xf3, 0xf5, 0xdf, 0xb1,
+ 0x0d, 0x20, 0xd5, 0x21, 0xf3, 0x31, 0x57, 0xfd, 0x09, 0x17, 0x2a, 0x21, 0xe3,
+ 0xf2, 0xf8, 0x0d, 0xcc, 0x0d, 0x45, 0x05, 0x05, 0x13, 0x05, 0x25, 0x06, 0xe5,
+ 0x0d, 0xd4, 0xe7, 0x1e, 0x2c, 0x1f, 0x24, 0x1f, 0xe5, 0x0f, 0x19, 0xe5, 0xfd,
+ 0x0b, 0xd8, 0x20, 0xd8, 0x0a, 0x30, 0x32, 0xde, 0x02, 0xc0, 0xee, 0xf5, 0x32,
+ 0x12, 0x7f, 0x0d, 0x0a, 0xc0, 0x01, 0x05, 0xfb, 0x05, 0x13, 0xf9, 0xf9, 0x72,
+ 0x09, 0x3e, 0x1f, 0xf8, 0x40, 0x28, 0x3c, 0x1a, 0x26, 0xde, 0xf6, 0xc6, 0x27,
+ 0x28, 0xc7, 0x28, 0x31, 0x0b, 0x28, 0x21, 0xe5, 0xd0, 0x08, 0x1e, 0x69, 0x42,
+ 0xf0, 0x0b, 0x21, 0x2f, 0xe3, 0xf0, 0x17, 0xd7, 0xdb, 0xc8, 0x02, 0x3b, 0x4b,
+ 0xe5, 0xe5, 0xe9, 0xfc, 0x0d, 0x0c, 0xf1, 0xf1, 0xd3, 0xe5, 0xc5, 0x3b, 0xd8,
+ 0x3d, 0xfc, 0x0f, 0x03, 0xfa, 0x1f, 0xf4, 0x1a, 0x09, 0x24, 0xf4, 0xad, 0xeb,
+ 0x23, 0x6a, 0xee, 0x59, 0x69, 0x1d, 0xf9, 0x3d, 0xe3, 0x11, 0x64, 0x4b, 0x15,
+ 0x1e, 0x7f, 0x3e, 0x14, 0x05, 0xfc, 0x0a, 0x0b, 0x70, 0xf3, 0x0f, 0x29, 0x35,
+ 0xec, 0x1a, 0x5b, 0x26, 0x20, 0x33, 0xb8, 0x32, 0x05, 0xf6, 0xd2, 0xfc, 0xcc,
+ 0x22, 0x89, 0x01, 0x43, 0x0b, 0x04, 0x41, 0x3e, 0xf6, 0x00, 0xea, 0x15, 0x2a,
+ 0xf1, 0xf4, 0xa8, 0x24, 0xf1, 0xe0, 0x21, 0xae, 0xd7, 0xf1, 0xe6, 0x7f, 0x51,
+ 0xc4, 0x46, 0x00, 0x27, 0x41, 0xb9, 0xf4, 0x20, 0xfb, 0xdf, 0xdc, 0x16, 0xfa,
+ 0xb7, 0xf1, 0x0c, 0x0d, 0xe2, 0x02, 0xe4, 0xf8, 0x5c, 0xfd, 0x0b, 0x25, 0xcb,
+ 0xb4, 0xed, 0xd8, 0x98, 0x4e, 0xf2, 0xd1, 0x00, 0x32, 0xd2, 0x45, 0x1d, 0xff,
+ 0x9c, 0xec, 0x65, 0x26, 0x28, 0x16, 0x32, 0x29, 0x2d, 0x11, 0x2c, 0xce, 0xef,
+ 0x11, 0xfe, 0xc9, 0x1e, 0xec, 0x58, 0xfd, 0x2f, 0xe8, 0xbf, 0x38, 0x4c, 0x1d,
+ 0x18, 0xde, 0xb2, 0xd6, 0xa0, 0xe8, 0x2c, 0xf1, 0x2f, 0xe4, 0xab, 0x61, 0x0f,
+ 0x36, 0xc4, 0xc3, 0x09, 0x0d, 0xd6, 0xbb, 0x03, 0xfa, 0xfd, 0x27, 0xcf, 0xc1,
+ 0x53, 0xdf, 0x3e, 0x02, 0x1d, 0x1e, 0xf5, 0x39, 0x0e, 0x79, 0x09, 0x13, 0xe6,
+ 0x47, 0xd5, 0xe8, 0x31, 0x5f, 0x03, 0x1b, 0x1a, 0x3e, 0x04, 0xfa, 0xf6, 0x41,
+ 0x12, 0xef, 0x5a, 0x47, 0x16, 0xed, 0xfc, 0x18, 0x11, 0x1d, 0xdc, 0xd5, 0xfd,
+ 0xaa, 0xc3, 0xeb, 0x3f, 0xe0, 0xcf, 0xf9, 0x41, 0xac, 0x13, 0x1c, 0x02, 0x24,
+ 0x1a, 0xfe, 0x81, 0x3b, 0x1a, 0x1a, 0x2a, 0xd4, 0x20, 0xdf, 0xc7, 0x37, 0xa8,
+ 0xe6, 0xa4, 0xdc, 0xb3, 0x17, 0xe6, 0x23, 0xd7, 0x03, 0xdb, 0xdd, 0x16, 0x14,
+ 0xf0, 0xf1, 0x11, 0xff, 0x4b, 0x66, 0xf4, 0x09, 0xe8, 0x00, 0x12, 0xe3, 0x12,
+ 0xae, 0x09, 0xbb, 0x25, 0x02, 0xd1, 0x20, 0x17, 0x05, 0x33, 0x5c, 0x34, 0xc0,
+ 0xb0, 0xf4, 0x0e, 0x11, 0xd9, 0xcd, 0x28, 0xbf, 0xe2, 0xfd, 0xa8, 0x05, 0xe5,
+ 0x1e, 0x0e, 0x0b, 0x10, 0xfd, 0x14, 0x2c, 0xd8, 0xbc, 0xcd, 0x58, 0x4d, 0xaa,
+ 0xc4, 0x04, 0x30, 0xea, 0x01, 0x46, 0xef, 0x60, 0x3d, 0xe8, 0x39, 0xbb, 0x21,
+ 0xee, 0x31, 0x41, 0xa8, 0xdc, 0x27, 0xf8, 0xe7, 0xf5, 0x0a, 0xf6, 0x3b, 0xdd,
+ 0xe8, 0xf8, 0xea, 0x2f, 0xc8, 0xdf, 0xe9, 0x09, 0x2a, 0x0f, 0xff, 0x06, 0x0d,
+ 0xdf, 0x01, 0xc4, 0xf9, 0xdc, 0x30, 0x0b, 0xe0, 0xcf, 0xf8, 0x02, 0x0c, 0xec,
+ 0xd6, 0x1b, 0x19, 0xee, 0xfe, 0x19, 0x0b, 0x5d, 0xd8, 0x53, 0x2b, 0xb0, 0x3f,
+ 0x11, 0xb5, 0xb8, 0x2f, 0xad, 0xe5, 0xfd, 0x2a, 0x00, 0xd3, 0x45, 0x0b, 0x00,
+ 0xba, 0xeb, 0xd1, 0x36, 0xea, 0x2f, 0x08, 0x99, 0xed, 0x7f, 0x1a, 0x2e, 0xff,
+ 0x29, 0x04, 0x0e, 0x1b, 0x05, 0xba, 0xd5, 0x27, 0xaf, 0xf9, 0x24, 0x5b, 0xf6,
+ 0x7a, 0x42, 0x12, 0xc3, 0x5c, 0xf6, 0x07, 0x21, 0x0e, 0x38, 0x15, 0x20, 0xe0,
+ 0xf4, 0xe5, 0xde, 0xe1, 0xc2, 0xda, 0xe0, 0xe7, 0xde, 0xcb, 0xf7, 0xfe, 0xd3,
+ 0x02, 0x49, 0x21, 0x02, 0x4b, 0x9d, 0x07, 0x44, 0x8f, 0x16, 0x47, 0x2b, 0xfe,
+ 0x17, 0x22, 0x4a, 0xff, 0xd6, 0xe7, 0x8e, 0xf7, 0x31, 0xff, 0x24, 0x17, 0x2c,
+ 0xdb, 0xfd, 0x4c, 0xb6, 0x40, 0xc5, 0xe6, 0x0f, 0x1f, 0xc4, 0x3c, 0xba, 0xf9,
+ 0x05, 0x03, 0xee, 0x09, 0x09, 0x11, 0xde, 0xfb, 0xd8, 0x06, 0xe1, 0x30, 0x0a,
+ 0xf5, 0x20, 0xc9, 0xd5, 0x04, 0x13, 0xe9, 0x00, 0xef, 0xfb, 0x12, 0x03, 0x09,
+ 0x2b, 0xbe, 0xd8, 0x02, 0x0d, 0xf4, 0x23, 0xc5, 0xfd, 0x1d, 0xe1, 0xef, 0x27,
+ 0xe4, 0x11, 0xcc, 0x30, 0x10, 0x36, 0xe5, 0x20, 0x1c, 0x06, 0x26, 0x1d, 0xfe,
+ 0x15, 0xd5, 0xe4, 0xbf, 0x18, 0xda, 0xd6, 0x10, 0x14, 0xda, 0xcb, 0xeb, 0xea,
+ 0x15, 0xf3, 0x08, 0x59, 0x25, 0xf5, 0x19, 0x2a, 0xf8, 0xdb, 0x00, 0x7f, 0x0c,
+ 0xf1, 0xe1, 0x26, 0x00, 0xfc, 0xfb, 0x05, 0xf8, 0xae, 0x05, 0xf2, 0xe5, 0xfc,
+ 0xf2, 0xfb, 0xfc, 0xf7, 0xf6, 0xe4, 0x17, 0x31, 0xc3, 0xf3, 0xf7, 0xd0, 0x69,
+ 0xef, 0xfc, 0xeb, 0x1c, 0xd0, 0xda, 0x1b, 0x09, 0x38, 0xc0, 0xfc, 0xfb, 0x03,
+ 0xca, 0xcf, 0x7f, 0x0b, 0xfb, 0xe1, 0xd4, 0x1d, 0xad, 0xd7, 0xe5, 0x0f, 0x12,
+ 0x33, 0x50, 0x01, 0x00, 0x08, 0x14, 0x30, 0x15, 0xd2, 0xdb, 0xcd, 0xe7, 0x02,
+ 0x2b, 0xf9, 0xfb, 0x04, 0xf9, 0x08, 0xc7, 0xca, 0xf1, 0xec, 0xd1, 0xf0, 0xde,
+ 0xe5, 0x0c, 0xff, 0xe9, 0x24, 0xe7, 0xfb, 0x4b, 0xc8, 0xeb, 0x2c, 0x36, 0xe1,
+ 0x53, 0xfb, 0xe9, 0xf3, 0xc7, 0x00, 0xe2, 0xee, 0x61, 0xea, 0x09, 0x30, 0xea,
+ 0xc3, 0xec, 0x0e, 0x57, 0xcd, 0xde, 0x35, 0xe4, 0xf2, 0xcd, 0x0a, 0x01, 0x56,
+ 0x37, 0xdc, 0xf1, 0x26, 0x0c, 0x34, 0xd2, 0x45, 0x11, 0x0e, 0xef, 0xce, 0x03,
+ 0xc4, 0xfd, 0x1e, 0x0e, 0xf8, 0x50, 0x07, 0x38, 0xf3, 0x00, 0x03, 0x34, 0x12,
+ 0xd9, 0x2b, 0x0a, 0xed, 0xdc, 0x24, 0xef, 0xcb, 0x3b, 0x10, 0x1a, 0xc9, 0xdc,
+ 0x28, 0x13, 0x4b, 0xd5, 0x03, 0xdb, 0xf3, 0x49, 0xff, 0xb3, 0xb3, 0xf9, 0x0a,
+ 0xc4, 0xf0, 0xf5, 0xf1, 0x0d, 0xda, 0x0d, 0xec, 0x0b, 0x0d, 0xdb, 0xfa, 0xcd,
+ 0x14, 0x0d, 0x0b, 0xce, 0x1b, 0x17, 0x01, 0xf6, 0xf1, 0x07, 0x09, 0xe4, 0x1e,
+ 0xe5, 0xee, 0x29, 0x10, 0xda, 0x92, 0xf1, 0x21, 0xec, 0xe5, 0x27, 0xfa, 0x14,
+ 0x08, 0xe8, 0x03, 0xdc, 0xfa, 0xee, 0x18, 0xeb, 0xfd, 0xf0, 0xe5, 0xf9, 0xea,
+ 0xf3, 0xb4, 0xff, 0xde, 0xff, 0xeb, 0xf9, 0x39, 0x03, 0x09, 0xf0, 0x0e, 0xe1,
+ 0xfd, 0x1c, 0x13, 0xd5, 0xff, 0xdf, 0x10, 0x10, 0x2f, 0xef, 0x08, 0x81, 0xe7,
+ 0xd9, 0x33, 0xe3, 0xf9, 0x2a, 0xda, 0xf7, 0xd8, 0xe1, 0xb5, 0xfb, 0x10, 0xfa,
+ 0xd9, 0xf1, 0xe1, 0x05, 0x0c, 0x14, 0xf3, 0x0f, 0x36, 0xfe, 0xf8, 0x26, 0x0d,
+ 0x05, 0x04, 0xbd, 0x2a, 0xd1, 0xf7, 0xe1, 0x08, 0xe4, 0xde, 0xfd, 0xd2, 0xe8,
+ 0xf1, 0x0e, 0x0d, 0x01, 0xe1, 0xdc, 0x45, 0xb3, 0x98, 0xb8, 0xe3, 0xf7, 0x05,
+ 0xc8, 0x19, 0xf3, 0x02, 0xe4, 0xf2, 0x13, 0xe6, 0xf8, 0xf2, 0x17, 0xc4, 0xf0,
+ 0xe3, 0xdc, 0x01, 0xd0, 0xe4, 0x3a, 0xcc, 0xfb, 0x04, 0x08, 0xd7, 0xfc, 0xd3,
+ 0x08, 0x22, 0xeb, 0x3e, 0x55, 0xa9, 0xcd, 0xf4, 0x16, 0x41, 0x17, 0x1b, 0xd4,
+ 0xfd, 0xfa, 0xd4, 0x4d, 0x23, 0x30, 0x42, 0x62, 0x54, 0xd9, 0xd6, 0x35, 0xf7,
+ 0x26, 0x65, 0x09, 0x20, 0xdb, 0x7f, 0xfa, 0xf7, 0xf4, 0x19, 0xab, 0xb5, 0x17,
+ 0xd4, 0x04, 0xde, 0xbd, 0xbb, 0x0b, 0x2e, 0xe8, 0x06, 0x0b, 0xf2, 0x0e, 0x0a,
+ 0x07, 0x21, 0x16, 0xe4, 0xda, 0x69, 0xd8, 0x1a, 0x63, 0x1d, 0xe9, 0xf3, 0xf0,
+ 0x09, 0xdc, 0xbf, 0xcf, 0xc9, 0x1e, 0x22, 0xdf, 0x43, 0x39, 0x20, 0x30, 0x42,
+ 0x20, 0xd2, 0xc3, 0x1a, 0x00, 0x1d, 0xda, 0x2b, 0x34, 0x1d, 0x18, 0xda, 0x2e,
+ 0xfe, 0xdc, 0x03, 0xb6, 0xee, 0x00, 0x2e, 0xe7, 0x12, 0xcd, 0xf4, 0x4d, 0x1f,
+ 0x19, 0x3d, 0xc9, 0xfc, 0x00, 0xfd, 0xfe, 0xf2, 0x22, 0xca, 0x2f, 0xe5, 0xff,
+ 0x01, 0xef, 0x2f, 0xc3, 0xf3, 0x36, 0x19, 0x31, 0x15, 0xc5, 0x07, 0x0b, 0x21,
+ 0x2b, 0xae, 0xe6, 0x63, 0xe4, 0x03, 0xf4, 0xe4, 0xfe, 0xd6, 0x2b, 0xdc, 0x10,
+ 0xfa, 0x08, 0x02, 0xd3, 0xd9, 0xc5, 0x37, 0xe4, 0x18, 0xa3, 0x45, 0xee, 0xc1,
+ 0xf1, 0x20, 0x03, 0xf8, 0x27, 0xfc, 0x37, 0x2e, 0x1c, 0xb2, 0xf7, 0xf4, 0xad,
+ 0x04, 0xb5, 0xf6, 0x11, 0x1f, 0xe2, 0x00, 0x20, 0x03, 0x0d, 0x07, 0xf7, 0x2b,
+ 0xf6, 0x5d, 0xc7, 0x0e, 0x55, 0xf0, 0xfc, 0x86, 0x0a, 0x4c, 0xdb, 0xfc, 0x33,
+ 0xa3, 0xff, 0x75, 0x26, 0x03, 0xe0, 0xc5, 0xca, 0x1d, 0x22, 0x1d, 0xed, 0xe8,
+ 0x96, 0x7d, 0x05, 0x3e, 0xdb, 0x4b, 0x38, 0xd3, 0x7f, 0x26, 0xfb, 0xfa, 0xf8,
+ 0xcc, 0x0a, 0x10, 0x40, 0x66, 0x5b, 0x27, 0x21, 0xc0, 0x0a, 0x1d, 0xeb, 0x1c,
+ 0x1f, 0xb9, 0xf8, 0x1f, 0xf2, 0xff, 0xc9, 0x5c, 0xd3, 0x58, 0xda, 0x02, 0xe6,
+ 0xdf, 0xe3, 0xf8, 0x10, 0x10, 0x37, 0xfa, 0x02, 0x58, 0xec, 0xdf, 0x28, 0xb3,
+ 0x40, 0xf4, 0x26, 0xd8, 0xf6, 0xad, 0x06, 0xe8, 0x0e, 0xf4, 0xa7, 0x19, 0x26,
+ 0xd3, 0xe5, 0x2c, 0x13, 0xa8, 0xf6, 0xbc, 0x81, 0xda, 0xea, 0xd7, 0xf9, 0xf6,
+ 0x60, 0x53, 0x06, 0xd8, 0xff, 0xcc, 0xf0, 0x0d, 0xe3, 0xee, 0xc0, 0xe8, 0xf8,
+ 0xed, 0x1f, 0x2a, 0x11, 0x26, 0xbb, 0x44, 0x07, 0x0a, 0xd9, 0xe8, 0xe6, 0x10,
+ 0xb8, 0x19, 0x25, 0xd6, 0xbe, 0x3d, 0x1d, 0xdd, 0xe1, 0xfd, 0xf3, 0xee, 0x38,
+ 0x0a, 0xe0, 0x0c, 0xeb, 0x02, 0x04, 0x00, 0x24, 0x0a, 0xdf, 0x29, 0x15, 0x0b,
+ 0xba, 0xf6, 0x95, 0x46, 0xc3, 0x04, 0x63, 0x4e, 0xb3, 0x12, 0xd5, 0xd5, 0x72,
+ 0xe1, 0xf6, 0xf1, 0x16, 0x40, 0xfd, 0xf7, 0x4e, 0x6d, 0xfc, 0xbf, 0xf2, 0xfb,
+ 0x18, 0x15, 0xd1, 0x00, 0x0e, 0x00, 0xea, 0xfa, 0xfd, 0x77, 0x3b, 0xe0, 0x7f,
+ 0xf7, 0x01, 0xf8, 0x14, 0xfc, 0x93, 0xcd, 0xcc, 0xe0, 0xe5, 0xdd, 0x03, 0xec,
+ 0xce, 0x1e, 0xe0, 0x1f, 0x18, 0xf9, 0xd1, 0xe5, 0xf6, 0x4c, 0xf1, 0xcb, 0x03,
+ 0x3a, 0xcf, 0xd7, 0xe1, 0xce, 0xc9, 0x0d, 0x37, 0xae, 0x0e, 0xd4, 0x39, 0xea,
+ 0xe7, 0xf2, 0xfa, 0x11, 0xf5, 0xeb, 0x17, 0xf7, 0x3b, 0x10, 0xd2, 0x32, 0x02,
+ 0xee, 0xe5, 0xb9, 0xf7, 0xcb, 0xfa, 0x14, 0xf7, 0x0a, 0xf3, 0x34, 0x1f, 0xf4,
+ 0x3c, 0xf8, 0x0b, 0xcd, 0xd3, 0x18, 0x0f, 0x21, 0x0c, 0xd8, 0xdf, 0x22, 0x09,
+ 0xfd, 0xdb, 0x1b, 0xe4, 0x19, 0x1e, 0x11, 0xff, 0x18, 0xbe, 0xdf, 0x26, 0x4b,
+ 0xe2, 0x11, 0x69, 0xfe, 0x3f, 0x26, 0x68, 0xea, 0x04, 0xae, 0xd4, 0x05, 0xfd,
+ 0xf9, 0x0e, 0x4e, 0xde, 0x21, 0xf0, 0x48, 0x0f, 0x2f, 0xc0, 0xc3, 0x90, 0xf6,
+ 0x0f, 0x1e, 0x64, 0x03, 0xb7, 0x41, 0x24, 0x7f, 0x25, 0xcd, 0xe6, 0x10, 0xdf,
+ 0xb9, 0xb9, 0xe3, 0xd5, 0x90, 0xc2, 0x19, 0xd9, 0x0f, 0xc5, 0xe0, 0xd6, 0x34,
+ 0xb5, 0xf2, 0xf6, 0x6b, 0x4e, 0x0b, 0xe1, 0xcb, 0x33, 0xf3, 0x4e, 0xf5, 0xf5,
+ 0xc9, 0x7b, 0xc4, 0xb6, 0xc4, 0x25, 0xc0, 0x0b, 0xc5, 0x40, 0xbb, 0x12, 0x1c,
+ 0x9e, 0xb5, 0x40, 0x01, 0xc3, 0x2f, 0xfc, 0x3a, 0x1a, 0xc9, 0xe0, 0xff, 0x9d,
+ 0x8e, 0x3e, 0xd9, 0x09, 0xc1, 0xf7, 0x12, 0xd0, 0xe3, 0x0d, 0xd9, 0xbf, 0x35,
+ 0x21, 0xa1, 0x8a, 0x46, 0xb7, 0xed, 0xee, 0xaa, 0xbc, 0x02, 0x13, 0x00, 0xda,
+ 0x51, 0x92, 0x59, 0x64, 0xfc, 0xce, 0xec, 0xd2, 0x08, 0xda, 0x22, 0xf2, 0x0d,
+ 0x65, 0x14, 0x06, 0x0c, 0x18, 0x4d, 0x08, 0xb8, 0xc5, 0x3b, 0x90, 0x57, 0xec,
+ 0xdf, 0x08, 0x32, 0xf6, 0x3a, 0x16, 0x59, 0xd1, 0x44, 0xd8, 0x03, 0x12, 0x22,
+ 0xe6, 0xf3, 0x1f, 0xf2, 0x16, 0x71, 0xe1, 0x0b, 0xe8, 0xeb, 0xdc, 0xdb, 0xd9,
+ 0x2e, 0x04, 0xe5, 0x39, 0x29, 0x5d, 0x11, 0x11, 0x18, 0x2b, 0xd5, 0xda, 0xfc,
+ 0x1d, 0x2b, 0x2c, 0xe6, 0xf2, 0xff, 0x0d, 0xd4, 0xfb, 0xfc, 0x66, 0x07, 0xf7,
+ 0x2c, 0xef, 0xf3, 0x27, 0x13, 0x0f, 0xeb, 0xdd, 0x1b, 0x9d, 0xdb, 0xf6, 0xbe,
+ 0xd2, 0x0f, 0xa7, 0x13, 0x41, 0x32, 0x0b, 0x1d, 0x3d, 0xd7, 0xfa, 0x1a, 0xd7,
+ 0xfe, 0x01, 0x0b, 0xe9, 0xd6, 0x2d, 0xfb, 0x02, 0xed, 0x12, 0xed, 0xcd, 0xd6,
+ 0x06, 0x7f, 0x6f, 0x01, 0x46, 0x2f, 0xf8, 0x24, 0x00, 0xa9, 0x48, 0x07, 0xff,
+ 0x1d, 0xe2, 0x38, 0x17, 0xf5, 0x3b, 0xfc, 0x01, 0x56, 0xbf, 0x47, 0x03, 0x19,
+ 0x5c, 0x16, 0x03, 0x44, 0xce, 0xe5, 0x22, 0xeb, 0xb0, 0x2a, 0x0f, 0xdb, 0x01,
+ 0xe0, 0x0c, 0x13, 0x18, 0xd5, 0x16, 0x57, 0x09, 0xf5, 0x4c, 0x1f, 0x3e, 0xf3,
+ 0xed, 0xd5, 0xfd, 0xee, 0xd8, 0xf0, 0xdd, 0xd7, 0xf9, 0x2e, 0x1d, 0xe7, 0xb3,
+ 0x33, 0xe1, 0x16, 0x38, 0xff, 0x17, 0x08, 0xab, 0xfa, 0xd8, 0xa7, 0xdb, 0xfa,
+ 0x02, 0x05, 0xb7, 0x59, 0xf0, 0xde, 0xd6, 0x12, 0xc1, 0x08, 0x00, 0x05, 0xd4,
+ 0xf0, 0xe7, 0x21, 0xcb, 0x0c, 0xf1, 0x34, 0x02, 0x0a, 0xfb, 0x29, 0xe4, 0xed,
+ 0xb9, 0xac, 0xda, 0x10, 0x2f, 0x2f, 0xf5, 0x18, 0x7f, 0xfa, 0x6f, 0x35, 0x15,
+ 0x4a, 0xf9, 0x20, 0x0f, 0x1e, 0x04, 0x23, 0x0c, 0x0b, 0x31, 0x3e, 0x3a, 0xfb,
+ 0xea, 0xfd, 0x06, 0x05, 0xd6, 0x0e, 0x13, 0x3f, 0xed, 0xf5, 0x53, 0xcc, 0xbc,
+ 0x21, 0xd1, 0xd8, 0x0e, 0x20, 0xc6, 0x03, 0x0d, 0x55, 0xef, 0xe7, 0xe0, 0x15,
+ 0xd6, 0xfb, 0x42, 0x35, 0xeb, 0x95, 0xa0, 0xd5, 0x0b, 0x07, 0x10, 0xda, 0x28,
+ 0x04, 0xe9, 0xdf, 0x2d, 0xed, 0x0e, 0x13, 0xc5, 0xf8, 0x09, 0xe7, 0x35, 0xc5,
+ 0xfc, 0x12, 0x03, 0xf9, 0xe6, 0x15, 0x03, 0xf0, 0x23, 0xe8, 0xe3, 0xed, 0xf0,
+ 0x10, 0xec, 0x15, 0x28, 0xf6, 0xf0, 0x1d, 0x2d, 0x2b, 0x19, 0x06, 0xf4, 0x03,
+ 0x1c, 0x3a, 0xe0, 0x09, 0xc6, 0xe7, 0xea, 0x24, 0xf0, 0x2a, 0x5a, 0xfb, 0xfe,
+ 0x13, 0x48, 0x0b, 0x14, 0xed, 0x18, 0xf5, 0xeb, 0x29, 0x24, 0xe0, 0x08, 0x3d,
+ 0x09, 0xc6, 0x81, 0xec, 0x29, 0xfa, 0xed, 0xe5, 0x0a, 0xfa, 0x11, 0xf9, 0xa2,
+ 0x1d, 0xe6, 0xf5, 0xf4, 0x05, 0xe9, 0x1d, 0x54, 0xeb, 0xcc, 0x19, 0x52, 0xea,
+ 0x2e, 0xf9, 0xf4, 0x04, 0x05, 0x34, 0xd2, 0x2b, 0xd6, 0x02, 0x1e, 0xfc, 0x09,
+ 0x07, 0x2d, 0x17, 0x3b, 0x08, 0xc2, 0x28, 0x14, 0xf0, 0x21, 0xe0, 0x20, 0xc6,
+ 0x40, 0xfd, 0xfb, 0x2a, 0x1f, 0xf1, 0x0b, 0x0f, 0x0f, 0x09, 0xf2, 0xf3, 0xd2,
+ 0x5c, 0x46, 0xdc, 0x04, 0xc8, 0x9b, 0xeb, 0xf9, 0x99, 0x33, 0xdc, 0x3a, 0x02,
+ 0xe1, 0xf1, 0xe6, 0xcb, 0x21, 0x0e, 0xea, 0xa8, 0x15, 0xe7, 0x41, 0xe8, 0x15,
+ 0xf6, 0x3f, 0x35, 0xe2, 0xe2, 0xe1, 0x44, 0x38, 0x40, 0xc1, 0xac, 0xde, 0x1f,
+ 0xd5, 0xd5, 0xfb, 0x01, 0x4e, 0x43, 0x2d, 0xea, 0xe4, 0xdb, 0xa9, 0xbf, 0x8b,
+ 0x21, 0xc2, 0x18, 0xf0, 0x30, 0x11, 0x2e, 0x11, 0xfe, 0x9d, 0xb9, 0xc2, 0x7f,
+ 0xbd, 0x12, 0x0f, 0x19, 0x41, 0x6f, 0xfe, 0xf9, 0xd4, 0x21, 0x0a, 0x60, 0x0b,
+ 0x09, 0xcb, 0xf4, 0x09, 0xe4, 0xee, 0x0e, 0x35, 0x3e, 0x08, 0x26, 0x73, 0x15,
+ 0x33, 0x12, 0x1b, 0xf0, 0xed, 0xdf, 0x22, 0x27, 0x0f, 0x09, 0x06, 0xc0, 0x52,
+ 0xfb, 0x22, 0x29, 0x39, 0x2a, 0xf6, 0xed, 0x38, 0x22, 0xe8, 0x24, 0x1e, 0xe0,
+ 0xbe, 0xe7, 0xec, 0x28, 0x46, 0x0f, 0x2e, 0xf6, 0x0e, 0xfb, 0xd9, 0x53, 0xef,
+ 0xcf, 0x18, 0x20, 0xdd, 0xb6, 0xf8, 0x3d, 0xeb, 0xd6, 0xdd, 0xe4, 0xd3, 0xd2,
+ 0xed, 0xdf, 0xc3, 0xd0, 0x02, 0x3b, 0xf9, 0xd7, 0xfb, 0x0f, 0xff, 0xf7, 0x19,
+ 0xcc, 0xfe, 0xe5, 0xe8, 0x35, 0xda, 0xf4, 0x06, 0xfc, 0x1b, 0xcd, 0xdf, 0x13,
+ 0xd5, 0xee, 0xdf, 0x32, 0xf6, 0x2f, 0x2c, 0xbb, 0xfc, 0xf0, 0x00, 0xe5, 0xe3,
+ 0x1f, 0xda, 0x10, 0xd7, 0x3d, 0x29, 0xec, 0xf0, 0xf3, 0xe9, 0x7f, 0xe3, 0xb8,
+ 0xdf, 0x40, 0x4e, 0xd4, 0xec, 0x1f, 0x16, 0x30, 0xe7, 0x17, 0x12, 0x0c, 0xe2,
+ 0xd3, 0x18, 0x04, 0x1c, 0xc8, 0x21, 0xd4, 0x11, 0xf0, 0xbd, 0xdf, 0xe1, 0xf5,
+ 0xd2, 0x14, 0x56, 0xeb, 0x14, 0x09, 0x04, 0xfe, 0x14, 0xfb, 0xac, 0xec, 0xc1,
+ 0x1e, 0x2f, 0x1e, 0xfa, 0xdd, 0x00, 0x68, 0xdd, 0xee, 0xd2, 0x31, 0x4d, 0xfe,
+ 0x01, 0xf3, 0x6e, 0xbc, 0xbd, 0xff, 0x0a, 0xf2, 0xc3, 0xeb, 0x12, 0xcc, 0xc2,
+ 0x91, 0x03, 0x0d, 0x66, 0xe2, 0xd6, 0xd3, 0xc6, 0xd1, 0xd4, 0x3c, 0xe0, 0xdb,
+ 0x4d, 0x0f, 0xd8, 0xa0, 0xe3, 0xd0, 0xbd, 0x01, 0x0c, 0xe6, 0xed, 0x0f, 0x3d,
+ 0x16, 0x26, 0x36, 0x0e, 0x0c, 0x07, 0x00, 0x68, 0x34, 0x05, 0x14, 0xf1, 0x87,
+ 0xea, 0x32, 0xbd, 0x5b, 0xaf, 0x42, 0x31, 0xec, 0xd4, 0x2f, 0x81, 0x65, 0x25,
+ 0x07, 0x3e, 0x3e, 0x30, 0x15, 0x8e, 0xcf, 0x9e, 0x13, 0xf8, 0x03, 0xc6, 0x2a,
+ 0x37, 0x1a, 0xfc, 0x13, 0x27, 0xe2, 0x96, 0xd2, 0x2c, 0xe6, 0xfd, 0x32, 0xca,
+ 0xc6, 0x1a, 0x2d, 0xa5, 0xe0, 0x05, 0xed, 0xfe, 0x2c, 0x17, 0xdb, 0x19, 0x18,
+ 0xf4, 0x4e, 0x10, 0xf9, 0x6b, 0x15, 0x0a, 0x30, 0x1c, 0x3e, 0x50, 0x86, 0xdf,
+ 0x29, 0x24, 0x13, 0xe6, 0xbe, 0x2d, 0x24, 0x1d, 0x04, 0xc5, 0xd0, 0x11, 0x1a,
+ 0x04, 0x04, 0xdb, 0xf6, 0xe8, 0x0f, 0x15, 0xe3, 0xc4, 0x08, 0x2d, 0xfb, 0xd7,
+ 0x17, 0x35, 0xc2, 0x1b, 0x23, 0xdd, 0x0f, 0x17, 0xf8, 0xf0, 0x0d, 0x1c, 0xd1,
+ 0x6e, 0xc5, 0xc6, 0x08, 0x13, 0xd3, 0xed, 0x56, 0x10, 0xde, 0xf5, 0x23, 0x01,
+ 0x06, 0x0b, 0x19, 0xee, 0xff, 0x0d, 0x5c, 0xe3, 0x07, 0x27, 0x0e, 0x35, 0xdb,
+ 0x14, 0xe5, 0x1f, 0x2d, 0x23, 0xf5, 0x32, 0xee, 0xc9, 0xd4, 0xe2, 0xe9, 0x18,
+ 0xec, 0x3b, 0xe6, 0xd0, 0x04, 0x05, 0xd9, 0xff, 0xa8, 0xf0, 0xcc, 0xd2, 0xed,
+ 0x09, 0x00, 0xf6, 0xeb, 0xec, 0xbe, 0x0d, 0x20, 0xf7, 0x40, 0x22, 0x0f, 0x08,
+ 0x30, 0xd5, 0x28, 0xb1, 0x1f, 0x1b, 0x15, 0x09, 0xf1, 0x0b, 0xd4, 0xd1, 0x17,
+ 0x81, 0x15, 0x01, 0x2a, 0x03, 0x3d, 0xe0, 0xce, 0x1a, 0x37, 0xd6, 0xb6, 0x14,
+ 0xe5, 0xe3, 0xbe, 0x18, 0xee, 0x27, 0xe0, 0xff, 0xc5, 0xf6, 0xea, 0xcb, 0x5a,
+ 0xdf, 0xf0, 0x49, 0xc1, 0xe9, 0xdc, 0xab, 0x3d, 0x0d, 0x17, 0xf8, 0x1c, 0xdb,
+ 0x02, 0xcf, 0x24, 0xe7, 0x16, 0xee, 0x20, 0x06, 0x13, 0x39, 0x30, 0x19, 0xd0,
+ 0xb6, 0x25, 0x01, 0xe8, 0x62, 0xc8, 0x00, 0xd5, 0x5b, 0xf5, 0x16, 0xec, 0x16,
+ 0x04, 0x55, 0x28, 0xf3, 0xdb, 0xde, 0xea, 0x40, 0xe1, 0x4c, 0x33, 0xca, 0xdd,
+ 0x0d, 0x21, 0xfc, 0x00, 0x41, 0x23, 0xec, 0x3d, 0xe0, 0xdf, 0xd2, 0x1b, 0x4b,
+ 0x38, 0xfd, 0xd2, 0xf1, 0xc9, 0x95, 0xfe, 0x55, 0xea, 0xdc, 0xfd, 0xcc, 0x37,
+ 0x26, 0x24, 0x28, 0xf3, 0x49, 0xd4, 0xdb, 0x25, 0xdf, 0x11, 0x13, 0x24, 0x19,
+ 0x04, 0x4e, 0x14, 0xc7, 0x0c, 0xfb, 0x0c, 0x26, 0x13, 0xf0, 0x05, 0x16, 0x81,
+ 0xa2, 0x22, 0xf5, 0xf9, 0xe1, 0x11, 0xc7, 0xea, 0xf4, 0xec, 0xf2, 0x1d, 0x1d,
+ 0x33, 0x34, 0x55, 0xaf, 0x06, 0x2d, 0xde, 0x90, 0xc1, 0x4c, 0x0a, 0x07, 0xc5,
+ 0xfa, 0x6f, 0x2c, 0xdf, 0x40, 0x06, 0xe6, 0xff, 0x27, 0x18, 0xab, 0x60, 0x7f,
+ 0xf0, 0x55, 0xf7, 0x9b, 0xdf, 0xc7, 0xe3, 0x19, 0xed, 0x20, 0xa5, 0xfe, 0xfa,
+ 0xdd, 0xd7, 0x0b, 0xe1, 0x7c, 0x38, 0xea, 0x00, 0x1e, 0xea, 0xd4, 0x12, 0xba,
+ 0xe7, 0xa3, 0x23, 0xbd, 0x5b, 0x04, 0x24, 0x3f, 0xe0, 0xbc, 0x13, 0x19, 0xf6,
+ 0xf4, 0xeb, 0xeb, 0x0d, 0x58, 0x52, 0x2b, 0x0d, 0x3b, 0x1f, 0xfa, 0xdf, 0xfb,
+ 0xb2, 0xc3, 0xe2, 0x58, 0xb0, 0xf4, 0xd2, 0xdf, 0xe5, 0xe9, 0xf9, 0xc5, 0xda,
+ 0xcf, 0x48, 0x0c, 0xdb, 0xe4, 0xcf, 0xd6, 0x2f, 0x2d, 0xea, 0x38, 0x34, 0x17,
+ 0xfd, 0x3a, 0xe9, 0xce, 0x1b, 0x00, 0x29, 0x13, 0xc4, 0xe6, 0xef, 0xc8, 0x1d,
+ 0xdd, 0x3f, 0x0a, 0x2a, 0xc4, 0x05, 0x0e, 0x43, 0xdb, 0xea, 0xf1, 0xe9, 0xb1,
+ 0x53, 0xea, 0xa5, 0x11, 0xf7, 0x2a, 0x17, 0xb4, 0x06, 0xda, 0xcc, 0xe9, 0x09,
+ 0xcc, 0xe2, 0x81, 0x39, 0xd4, 0xdd, 0xf6, 0x06, 0x06, 0x9c, 0xd7, 0x20, 0x60,
+ 0xe6, 0x2d, 0xea, 0xc8, 0x42, 0xd4, 0x26, 0xf3, 0x20, 0x18, 0xf0, 0x37, 0x56,
+ 0xcc, 0xe3, 0x50, 0xe8, 0xef, 0x2e, 0xe2, 0x46, 0xdd, 0x68, 0xe2, 0xfe, 0x07,
+ 0xa6, 0x98, 0xed, 0x4e, 0xd6, 0xe2, 0x9f, 0xd3, 0x5f, 0xc9, 0xd5, 0x1f, 0xc9,
+ 0x09, 0xd5, 0xa8, 0x06, 0xfe, 0xe1, 0xe1, 0xc2, 0x70, 0x25, 0xf1, 0xc4, 0x42,
+ 0x3c, 0x57, 0xa9, 0xce, 0xea, 0x17, 0x3f, 0x00, 0xdc, 0x1b, 0xdc, 0xd0, 0xf8,
+ 0xb7, 0xfe, 0xd5, 0x00, 0xcd, 0xe7, 0xe9, 0xcd, 0xbf, 0x0b, 0x46, 0x1f, 0xe4,
+ 0x32, 0xde, 0xbc, 0x19, 0x18, 0xd7, 0x20, 0xd2, 0xf2, 0x39, 0x4d, 0x30, 0x26,
+ 0x41, 0xec, 0xcd, 0xc8, 0x10, 0xeb, 0xcf, 0xe3, 0xdd, 0xeb, 0x2a, 0xfd, 0x3c,
+ 0x2b, 0x8e, 0xe5, 0xfa, 0xc9, 0xf0, 0x08, 0x19, 0xb0, 0xb9, 0xeb, 0x1e, 0xd0,
+ 0xfb, 0xf9, 0xce, 0x12, 0x50, 0x31, 0xcb, 0x5b, 0xae, 0xf5, 0xf4, 0xec, 0x08,
+ 0xcd, 0x37, 0xdf, 0x1b, 0xfa, 0x0d, 0xf5, 0xf4, 0xf8, 0xb2, 0xff, 0xd8, 0x3f,
+ 0xe6, 0xcc, 0x0c, 0xeb, 0xf3, 0x28, 0xee, 0x01, 0xf2, 0x14, 0x81, 0x22, 0x0d,
+ 0xfb, 0x00, 0xf0, 0xe1, 0x2b, 0xee, 0x1a, 0xec, 0xf5, 0x0b, 0xe9, 0xb6, 0x0e,
+ 0xdf, 0xc6, 0x21, 0x11, 0xfd, 0xdf, 0xd2, 0x15, 0xf9, 0x17, 0xf6, 0x2d, 0xfd,
+ 0xf9, 0xda, 0x02, 0xcf, 0x16, 0xff, 0x0e, 0x11, 0x20, 0x55, 0x29, 0xdd, 0xd1,
+ 0x62, 0xc9, 0xfd, 0xb5, 0x26, 0x1e, 0xc1, 0x0b, 0x22, 0xf7, 0x19, 0x0e, 0x11,
+ 0x08, 0xa6, 0x14, 0x02, 0xe1, 0xf8, 0xd4, 0xc8, 0x16, 0xd2, 0xf2, 0xee, 0xf2,
+ 0xb0, 0x05, 0xf1, 0xf9, 0x0c, 0xc1, 0x09, 0x1a, 0x0b, 0xf2, 0x45, 0xf3, 0x74,
+ 0xdb, 0x0e, 0x0d, 0xda, 0xf1, 0xd2, 0x19, 0xdf, 0xf4, 0xd9, 0xad, 0xf5, 0x0b,
+ 0x2d, 0x1a, 0xda, 0x17, 0xfd, 0x0f, 0x2f, 0x2a, 0x1a, 0xf0, 0xea, 0x06, 0xc0,
+ 0x00, 0x2a, 0x56, 0x0d, 0x65, 0xad, 0x37, 0xd8, 0xfa, 0xde, 0xae, 0xe8, 0x14,
+ 0xf2, 0xec, 0xf2, 0x23, 0x13, 0x2f, 0xcd, 0xec, 0x09, 0xf0, 0xa5, 0xee, 0x0a,
+ 0xee, 0xfa, 0xe0, 0xb2, 0x0f, 0xd6, 0x2a, 0x40, 0xff, 0x0d, 0xe0, 0x0a, 0xdd,
+ 0x1c, 0x09, 0x62, 0x07, 0x47, 0x08, 0xf9, 0xec, 0xa0, 0xbf, 0x30, 0x04, 0x10,
+ 0xdd, 0x39, 0x34, 0x7f, 0x1a, 0x18, 0x41, 0xc4, 0xe5, 0xf4, 0x34, 0x4d, 0xf8,
+ 0xde, 0xfa, 0x1d, 0x2e, 0x19, 0xff, 0xec, 0x1f, 0xff, 0xea, 0xfd, 0x0b, 0x0a,
+ 0x0b, 0x2d, 0x1d, 0xc5, 0xd0, 0xda, 0xe7, 0xd4, 0x3e, 0x3a, 0xff, 0x14, 0x1c,
+ 0xc9, 0x92, 0x21, 0x17, 0xe4, 0xfc, 0xd4, 0xc1, 0x6b, 0xe1, 0xf4, 0xd0, 0x08,
+ 0xc6, 0xdd, 0x5d, 0xc6, 0x61, 0x62, 0x16, 0x2a, 0xd8, 0xcd, 0x21, 0x19, 0xe0,
+ 0xd4, 0x1d, 0x41, 0xde, 0xdd, 0x10, 0x1d, 0x08, 0x37, 0x57, 0x06, 0x0d, 0xe9,
+ 0x0f, 0x67, 0x8e, 0x29, 0xf8, 0xd8, 0xba, 0xf7, 0xb9, 0xde, 0xfa, 0xaa, 0x07,
+ 0xa1, 0x07, 0xda, 0x02, 0x00, 0xf6, 0x18, 0x09, 0xe8, 0x1b, 0x1d, 0x07, 0x07,
+ 0x20, 0x54, 0xd3, 0x00, 0xc6, 0x4b, 0xb4, 0x41, 0xfb, 0xee, 0xf7, 0xf1, 0xdd,
+ 0xdf, 0xf7, 0x0e, 0x31, 0xc4, 0x39, 0x0e, 0x00, 0xcd, 0x06, 0xd5, 0x18, 0x1a,
+ 0x01, 0xf5, 0x17, 0x81, 0x3d, 0x3e, 0xd9, 0x1a, 0x3c, 0x0b, 0xf2, 0x45, 0x0d,
+ 0xa6, 0xd2, 0x1a, 0xb9, 0x4e, 0x0b, 0xcb, 0x3c, 0xeb, 0xfd, 0x28, 0xdc, 0xc6,
+ 0x12, 0xa4, 0xe5, 0xe4, 0xdd, 0xae, 0xa7, 0xe3, 0xd4, 0xe3, 0x20, 0xb9, 0xc2,
+ 0x01, 0x0b, 0xd4, 0x11, 0xe3, 0x44, 0xdd, 0xee, 0xcc, 0xf0, 0xb5, 0x1c, 0xf9,
+ 0x04, 0x52, 0xc3, 0x39, 0xf8, 0xeb, 0x03, 0x75, 0xf4, 0x17, 0x32, 0x25, 0x31,
+ 0xc0, 0x25, 0xf6, 0xfc, 0x58, 0xe8, 0xcf, 0xe7, 0x1e, 0xe7, 0x23, 0x04, 0x30,
+ 0x12, 0x1e, 0xec, 0xd6, 0x11, 0x37, 0x12, 0xdd, 0x23, 0xc4, 0xfe, 0x00, 0x05,
+ 0x02, 0xfc, 0xbb, 0xf4, 0xea, 0x01, 0x1c, 0x37, 0xe6, 0xd5, 0x52, 0x05, 0x13,
+ 0x31, 0xf7, 0xde, 0x10, 0xe9, 0xdd, 0xf2, 0xef, 0xdc, 0x01, 0x0d, 0xc9, 0x5f,
+ 0x09, 0xdd, 0x2f, 0x15, 0xdb, 0xe7, 0xf9, 0x97, 0x50, 0x0e, 0xf0, 0x60, 0xdd,
+ 0x4b, 0x54, 0xeb, 0x02, 0x1d, 0xf6, 0x1a, 0x24, 0xc4, 0xd9, 0x0f, 0x26, 0x91,
+ 0x7f, 0xdc, 0xf8, 0xf6, 0x3c, 0x4f, 0x32, 0x11, 0xf7, 0x3d, 0x1a, 0x26, 0xf0,
+ 0x0b, 0x17, 0xfa, 0xd5, 0xe2, 0x04, 0x15, 0xf3, 0xe9, 0xff, 0xba, 0xf9, 0x28,
+ 0xe9, 0xe9, 0xe8, 0x0a, 0xf3, 0x1f, 0x42, 0xdc, 0x0b, 0x0a, 0x08, 0x3f, 0xf5,
+ 0x01, 0x30, 0x10, 0xce, 0x93, 0xc9, 0x11, 0x13, 0xd9, 0xf0, 0xc2, 0xb7, 0xeb,
+ 0x0c, 0x0a, 0xde, 0xe3, 0x1e, 0x75, 0xc7, 0x3b, 0x32, 0xf5, 0x28, 0x1e, 0x26,
+ 0xf0, 0x4e, 0xfe, 0xa7, 0xeb, 0xd1, 0xf6, 0xa6, 0xf1, 0xdd, 0x2c, 0x06, 0x3c,
+ 0x25, 0xfc, 0x62, 0x30, 0xa0, 0x0c, 0xe2, 0x94, 0xca, 0xa4, 0x1c, 0xd7, 0xc4,
+ 0x32, 0x11, 0xc0, 0xe3, 0xe9, 0xce, 0xee, 0xf7, 0x02, 0x7f, 0xf3, 0xd9, 0xe1,
+ 0xe3, 0x46, 0x57, 0xe7, 0xa9, 0xaf, 0x14, 0x0d, 0x1a, 0x0a, 0xc3, 0xfc, 0xc8,
+ 0xfc, 0x18, 0xc7, 0xde, 0x17, 0x00, 0xd7, 0x59, 0x17, 0xe2, 0xed, 0x3d, 0x9e,
+ 0x6a, 0x1c, 0x39, 0x18, 0x43, 0x0b, 0x0f, 0xd9, 0xab, 0xed, 0x13, 0x41, 0x11,
+ 0xcd, 0xe4, 0x60, 0xeb, 0xee, 0xb1, 0x02, 0xe9, 0x0a, 0x05, 0xee, 0x29, 0xe5,
+ 0xfc, 0xe3, 0xb5, 0xd4, 0xb2, 0x0f, 0xd9, 0xf7, 0xf8, 0xf6, 0x01, 0xf5, 0xfd,
+ 0xf5, 0x0b, 0xe9, 0xd7, 0x10, 0x0a, 0xca, 0xd8, 0xd7, 0xf4, 0xc7, 0x12, 0xe7,
+ 0x34, 0xd5, 0xf9, 0xeb, 0xff, 0x1b, 0x12, 0xe7, 0xd4, 0xc3, 0xee, 0xec, 0x4d,
+ 0x22, 0xf2, 0xe6, 0x37, 0x1b, 0xc5, 0x06, 0x2d, 0x03, 0xd2, 0xcf, 0x0f, 0xfe,
+ 0x20, 0xef, 0xe1, 0x17, 0xf1, 0xdf, 0x08, 0x3b, 0xd8, 0xd8, 0x03, 0xfd, 0x2e,
+ 0xdf, 0x4c, 0xed, 0xb9, 0x10, 0xe3, 0xdc, 0x19, 0xff, 0xdf, 0xf5, 0x05, 0x42,
+ 0xb1, 0x92, 0x87, 0xd0, 0xf6, 0xe7, 0xec, 0xe7, 0xf5, 0xd0, 0xdb, 0xd5, 0xe0,
+ 0xc9, 0xc9, 0xf9, 0xc1, 0x16, 0xfd, 0x65, 0xeb, 0x18, 0xfc, 0xeb, 0x01, 0x07,
+ 0x05, 0xe9, 0x05, 0xdc, 0x18, 0xee, 0xe7, 0x3f, 0xf9, 0x23, 0x16, 0x06, 0x20,
+ 0xfd, 0x01, 0x0d, 0x00, 0xde, 0xfb, 0xe4, 0x27, 0xea, 0xca, 0xbb, 0xe3, 0x0a,
+ 0xd8, 0x27, 0x81, 0xed, 0x14, 0x1a, 0xfa, 0x15, 0x8f, 0x1d, 0xf2, 0xed, 0xf3,
+ 0x65, 0xe6, 0x1c, 0x52, 0xd7, 0x2b, 0xe5, 0x10, 0xaf, 0x30, 0x4b, 0xd2, 0xfd,
+ 0x2a, 0x22, 0x2b, 0x34, 0xe6, 0xeb, 0x07, 0x37, 0xe9, 0x1b, 0x70, 0x06, 0xe1,
+ 0xe5, 0x02, 0x02, 0xd9, 0x03, 0x07, 0x05, 0x19, 0xfd, 0xf4, 0xe0, 0xad, 0x07,
+ 0xf8, 0x2f, 0x08, 0x1c, 0x1a, 0x1e, 0xfb, 0xef, 0xf4, 0xcd, 0x00, 0x10, 0xff,
+ 0x1a, 0x05, 0xb1, 0xb8, 0xd7, 0x08, 0x90, 0xe7, 0xc2, 0xf6, 0xcb, 0x10, 0xce,
+ 0x9f, 0x91, 0x0e, 0xbc, 0x3d, 0xbb, 0xd8, 0xc9, 0xe9, 0xf7, 0xc3, 0xf8, 0x2f,
+ 0x09, 0xaa, 0x01, 0x20, 0xe0, 0x3b, 0x04, 0x7f, 0x5c, 0xd7, 0x11, 0x38, 0x06,
+ 0xe7, 0x25, 0x0f, 0x9d, 0x2f, 0x2c, 0xea, 0x32, 0x3f, 0x21, 0x1b, 0x01, 0xb4,
+ 0xe3, 0xf3, 0x6a, 0xce, 0xf6, 0x19, 0xbd, 0xe7, 0x0d, 0xec, 0xc8, 0xba, 0x9a,
+ 0x1e, 0x41, 0x18, 0x29, 0x28, 0x03, 0xef, 0x07, 0xe7, 0xf4, 0xce, 0xf5, 0xed,
+ 0xcb, 0x3c, 0xdd, 0x05, 0x02, 0xe1, 0x00, 0xf7, 0x14, 0x25, 0x23, 0x06, 0xe6,
+ 0x33, 0x13, 0x0c, 0xe4, 0xc8, 0x7f, 0xc4, 0xf8, 0x15, 0x18, 0x0b, 0xe9, 0xed,
+ 0x36, 0x39, 0xfe, 0xfa, 0x0c, 0x20, 0x47, 0xe2, 0x00, 0x32, 0xcc, 0xc3, 0xf3,
+ 0x2d, 0xef, 0x04, 0x05, 0xb6, 0x03, 0xea, 0xc4, 0xfc, 0xf7, 0xe4, 0xfe, 0xfd,
+ 0xfd, 0x10, 0x05, 0x0f, 0xee, 0x0d, 0x2b, 0x18, 0xe2, 0xe8, 0x17, 0xfc, 0x24,
+ 0xf0, 0xec, 0x1f, 0xd1, 0xa1, 0x07, 0xfb, 0x13, 0x09, 0x00, 0x00, 0x02, 0xfb,
+ 0x10, 0x0a, 0x27, 0x04, 0xf3, 0xf6, 0xee, 0xf5, 0x04, 0x46, 0x08, 0x07, 0xf7,
+ 0x0d, 0x02, 0x01, 0x20, 0x1b, 0xfc, 0x24, 0x28, 0xc9, 0x02, 0x01, 0x12, 0xe9,
+ 0xf8, 0x17, 0x58, 0x0f, 0xfa, 0x28, 0xed, 0xfb, 0x16, 0xc0, 0xfe, 0xd8, 0xfb,
+ 0x1e, 0x2e, 0xeb, 0x23, 0x7f, 0x06, 0xfc, 0x01, 0x25, 0x38, 0xcd, 0x2b, 0xed,
+ 0xf4, 0x1d, 0x00, 0x28, 0xe4, 0x62, 0x0e, 0x03, 0x1c, 0xc4, 0x1e, 0xce, 0xe2,
+ 0x0d, 0xeb, 0xf3, 0x1e, 0xfe, 0xff, 0x7a, 0x32, 0xdd, 0xb6, 0xda, 0x09, 0x3e,
+ 0xf1, 0xc3, 0x1b, 0x37, 0x0a, 0x13, 0xe0, 0x11, 0x22, 0xef, 0xe6, 0xfe, 0xdc,
+ 0xf1, 0x04, 0xbb, 0xfe, 0xe5, 0x97, 0xc8, 0x2a, 0x9d, 0xcf, 0x11, 0xea, 0xf0,
+ 0xfe, 0x24, 0x08, 0xb9, 0x07, 0xf4, 0x18, 0x44, 0xea, 0x36, 0x09, 0x2a, 0xfa,
+ 0x42, 0x5f, 0x9c, 0xe1, 0xf0, 0x06, 0x22, 0x4d, 0xaf, 0xfb, 0xfb, 0x07, 0xe5,
+ 0xfd, 0xf4, 0xc8, 0xe8, 0x0f, 0x0b, 0x0f, 0x52, 0x4b, 0x26, 0xfb, 0x0e, 0x31,
+ 0x2e, 0xdf, 0xe3, 0x31, 0x22, 0x31, 0xcd, 0x33, 0x19, 0x00, 0x06, 0x01, 0xb8,
+ 0xee, 0x09, 0xf7, 0x08, 0xe1, 0xd7, 0xfe, 0xf8, 0xc4, 0x38, 0xf7, 0xfc, 0xd4,
+ 0xe0, 0x04, 0x1a, 0x1d, 0x33, 0x12, 0x05, 0xb7, 0xd9, 0x65, 0xee, 0x1c, 0x15,
+ 0xe8, 0x31, 0xc9, 0xc8, 0x1a, 0x1a, 0xfd, 0x23, 0x2a, 0xe7, 0xf4, 0xc1, 0x39,
+ 0xd2, 0xaa, 0xd2, 0xf7, 0xe1, 0x21, 0xe6, 0x1f, 0xe4, 0x32, 0x16, 0x11, 0xbd,
+ 0x1b, 0x98, 0x2d, 0x0a, 0x24, 0x0c, 0x6d, 0x6a, 0xdd, 0x00, 0x23, 0x3c, 0xbb,
+ 0x58, 0xc9, 0x0e, 0xd6, 0xec, 0xdc, 0xc8, 0xa1, 0x2d, 0xea, 0x3a, 0xff, 0x01,
+ 0x99, 0xd0, 0xc0, 0x7f, 0xfc, 0x89, 0x9f, 0x2d, 0x2e, 0xf3, 0xb0, 0x2a, 0x01,
+ 0x1a, 0xc0, 0xde, 0x39, 0xe2, 0xe6, 0xda, 0xc5, 0x51, 0x20, 0xf9, 0x4b, 0x05,
+ 0xf2, 0xe2, 0xe1, 0x17, 0xbb, 0x3c, 0xff, 0xd1, 0xd4, 0x13, 0xed, 0x25, 0x1c,
+ 0xe6, 0x02, 0x1e, 0xf5, 0x02, 0x21, 0x27, 0xbb, 0x32, 0x06, 0xa7, 0xe5, 0xef,
+ 0x06, 0xbc, 0x70, 0xff, 0x17, 0x4c, 0x1e, 0xd3, 0xef, 0x17, 0xe5, 0xf4, 0x00,
+ 0x6a, 0x0d, 0x0e, 0x0e, 0x51, 0x03, 0xe6, 0x24, 0xf0, 0xfa, 0xee, 0x38, 0x04,
+ 0x62, 0x12, 0x3a, 0xde, 0x1c, 0x11, 0x5a, 0xdf, 0xe0, 0x31, 0xe6, 0xc6, 0xe3,
+ 0xe8, 0x51, 0xe4, 0xc4, 0xf9, 0x19, 0xf3, 0xf1, 0x53, 0x07, 0xdf, 0x25, 0x2e,
+ 0x10, 0xda, 0x1f, 0xb4, 0xed, 0xfd, 0xf6, 0xfb, 0x0d, 0xc1, 0x1d, 0xdd, 0xd9,
+ 0x27, 0xbe, 0xbc, 0x39, 0xbb, 0x11, 0xcc, 0xe2, 0xcf, 0x34, 0x00, 0x34, 0x13,
+ 0xe8, 0x1f, 0x11, 0x81, 0x07, 0xb0, 0x32, 0x01, 0x22, 0x07, 0xc3, 0x0a, 0x0a,
+ 0xfd, 0x1c, 0x34, 0x4b, 0xd4, 0xfe, 0x05, 0xab, 0x0c, 0xcf, 0x07, 0x14, 0xd1,
+ 0x29, 0xf3, 0xf4, 0xb6, 0xd5, 0x54, 0xf5, 0x07, 0x70, 0xfb, 0xfa, 0xe3, 0xcc,
+ 0x12, 0xe6, 0xfd, 0x34, 0xac, 0x00, 0xf9, 0x03, 0x48, 0x3c, 0xce, 0xbe, 0x12,
+ 0xe4, 0xc7, 0x04, 0x1f, 0xe3, 0x0d, 0xd9, 0x32, 0xf5, 0x48, 0x04, 0x4f, 0xf7,
+ 0xeb, 0x2e, 0x34, 0x18, 0x2e, 0xef, 0x15, 0x02, 0x04, 0x16, 0xbb, 0xe3, 0xdd,
+ 0x16, 0x18, 0xfa, 0xee, 0xe0, 0xf7, 0x28, 0x22, 0x07, 0x0c, 0x0f, 0x37, 0xe5,
+ 0xf2, 0xdd, 0xe3, 0xfd, 0xfb, 0xcc, 0x7c, 0xf2, 0x1d, 0xf5, 0x2d, 0x08, 0xd3,
+ 0xc0, 0xdb, 0xeb, 0x09, 0x0f, 0xf3, 0x08, 0x03, 0xed, 0x1e, 0x02, 0x1a, 0x42,
+ 0xd9, 0xf4, 0x0c, 0xfe, 0xf1, 0xe7, 0xf1, 0x15, 0x0f, 0x11, 0xc7, 0xf5, 0xc4,
+ 0x01, 0xf4, 0x04, 0xe0, 0x13, 0xbf, 0xd2, 0x0d, 0x40, 0xec, 0x2a, 0x21, 0xdb,
+ 0x5a, 0x0d, 0x5b, 0xb5, 0x17, 0xf3, 0xf3, 0x15, 0xfd, 0xea, 0xf7, 0xdd, 0x10,
+ 0x07, 0xfd, 0x36, 0x7f, 0xb2, 0xf6, 0x28, 0x19, 0xff, 0xc0, 0x03, 0x16, 0x17,
+ 0xec, 0x03, 0xec, 0xdf, 0xc7, 0xf8, 0xe8, 0xc3, 0x03, 0x2b, 0x08, 0xef, 0x0c,
+ 0x18, 0x22, 0xf7, 0x2b, 0xe5, 0xde, 0x9f, 0x11, 0x20, 0x0f, 0x32, 0xbd, 0xfe,
+ 0x1d, 0x13, 0xac, 0x3d, 0xf7, 0xdd, 0x54, 0x09, 0x5a, 0x45, 0xd1, 0x10, 0xf6,
+ 0x19, 0xe1, 0x07, 0x6d, 0xda, 0xf8, 0xc5, 0x17, 0x13, 0xf7, 0xb8, 0x03, 0x27,
+ 0xee, 0x1c, 0xc9, 0xed, 0x58, 0xdc, 0xcb, 0x12, 0x04, 0x00, 0xee, 0xda, 0xfc,
+ 0xfd, 0xe8, 0x00, 0xfb, 0x06, 0x23, 0xf6, 0x1d, 0xf8, 0x2b, 0xe0, 0x1e, 0x41,
+ 0xe4, 0xd1, 0x7f, 0x06, 0x0f, 0xf8, 0xcb, 0x33, 0x09, 0x32, 0xec, 0x23, 0xfb,
+ 0xf0, 0x19, 0x05, 0x17, 0xf1, 0x2a, 0x11, 0xba, 0xbc, 0xd9, 0xea, 0xf0, 0xdf,
+ 0x4e, 0xff, 0x1a, 0xf2, 0x12, 0x1f, 0xe9, 0xf6, 0xd6, 0x1b, 0xa9, 0xfc, 0xf3,
+ 0xd2, 0xc1, 0x17, 0x17, 0xe7, 0x0e, 0x13, 0xf1, 0xff, 0x21, 0xe7, 0xf8, 0xd8,
+ 0xf3, 0xbe, 0x3d, 0xd3, 0x9b, 0xf7, 0x2b, 0x2f, 0xe4, 0xae, 0x56, 0xd6, 0x20,
+ 0xd3, 0x14, 0xcf, 0x25, 0xd4, 0xd8, 0x07, 0x81, 0xee, 0x24, 0x01, 0x1a, 0x0c,
+ 0xd4, 0xc5, 0xf9, 0x09, 0xeb, 0xf9, 0xd4, 0xcd, 0xe3, 0x07, 0x0c, 0xd5, 0x08,
+ 0x03, 0xfc, 0xea, 0x0f, 0x10, 0x00, 0x4e, 0xee, 0x23, 0xda, 0xca, 0xce, 0xff,
+ 0x09, 0xea, 0x26, 0xd2, 0x2a, 0x06, 0xd9, 0xf5, 0x04, 0x01, 0xdc, 0xf9, 0xf9,
+ 0x6b, 0x01, 0xeb, 0xfe, 0x09, 0x05, 0xef, 0xd0, 0x30, 0xe8, 0xf4, 0xfa, 0xed,
+ 0x03, 0x29, 0xc6, 0x00, 0xe2, 0xd0, 0xf5, 0xb9, 0xf9, 0x09, 0xb3, 0xf5, 0xd7,
+ 0xeb, 0xee, 0x24, 0x2f, 0xf6, 0x05, 0x05, 0xfe, 0x09, 0xd7, 0xcb, 0x4a, 0xea,
+ 0x36, 0x17, 0xeb, 0xd0, 0x14, 0xee, 0x12, 0xb8, 0xe0, 0x0a, 0x21, 0xe8, 0x1c,
+ 0x13, 0x07, 0x08, 0xf2, 0x39, 0xe5, 0x0a, 0x0e, 0x4e, 0x3f, 0x2d, 0x0e, 0x11,
+ 0xb3, 0xdf, 0xe7, 0xf3, 0xe8, 0x0a, 0xfd, 0x19, 0x29, 0x2c, 0x2d, 0xef, 0x3f,
+ 0xf6, 0x51, 0x2f, 0xf8, 0x1c, 0xea, 0x1c, 0x6a, 0x3a, 0x40, 0xcf, 0x49, 0xfc,
+ 0x2d, 0x11, 0xd4, 0x42, 0x2b, 0x1c, 0xde, 0xfa, 0x1b, 0x2f, 0xee, 0x24, 0xfd,
+ 0x21, 0xff, 0x0f, 0x24, 0xe8, 0x25, 0xb6, 0xd8, 0xe0, 0xef, 0xdb, 0x25, 0xb4,
+ 0xc4, 0xfc, 0xb5, 0x34, 0x2f, 0x58, 0xfe, 0x3a, 0xe4, 0x1d, 0x7a, 0x3e, 0xf0,
+ 0x33, 0x20, 0xf2, 0x11, 0xea, 0xd6, 0xec, 0xd9, 0xa0, 0x36, 0xb9, 0x01, 0xdc,
+ 0x14, 0x07, 0x32, 0xc3, 0x50, 0x7f, 0x14, 0x53, 0x50, 0x11, 0xd8, 0x62, 0xe7,
+ 0xfa, 0x00, 0x4b, 0xe6, 0x15, 0x3b, 0x20, 0x1d, 0x27, 0xfc, 0x9f, 0x01, 0x50,
+ 0x15, 0x0a, 0x59, 0x60, 0x37, 0x44, 0xd3, 0xf6, 0x1c, 0xfd, 0x13, 0x02, 0x0c,
+ 0x3d, 0x04, 0xc2, 0xdd, 0x39, 0x1e, 0x3a, 0xbc, 0xf9, 0xcb, 0xf9, 0x20, 0x0d,
+ 0xdd, 0xcc, 0xfd, 0x27, 0x0c, 0xf2, 0xfa, 0x30, 0x17, 0x9a, 0xa7, 0xf6, 0xc5,
+ 0x0a, 0x3c, 0x22, 0xca, 0xe6, 0x17, 0x09, 0xbc, 0x5f, 0xc4, 0x22, 0xb0, 0xfe,
+ 0x60, 0xfb, 0x61, 0xc6, 0x0b, 0x10, 0xdb, 0xed, 0x0f, 0x4c, 0x4d, 0xf5, 0xf0,
+ 0xe2, 0x1a, 0xfc, 0x07, 0xe2, 0xd5, 0x29, 0x01, 0x4e, 0x08, 0xba, 0xf7, 0x05,
+ 0xdb, 0x13, 0x02, 0x06, 0x0b, 0x32, 0x57, 0xc0, 0x23, 0x01, 0xd8, 0x25, 0x3c,
+ 0x43, 0x37, 0x09, 0x36, 0x1d, 0x1d, 0x69, 0x70, 0x03, 0xb2, 0x4e, 0xea, 0xf9,
+ 0xce, 0x10, 0xe9, 0x7f, 0xd5, 0xe5, 0x09, 0x4a, 0xd4, 0x82, 0x43, 0x21, 0x13,
+ 0x9d, 0x83, 0x32, 0x11, 0xf5, 0x2f, 0xcc, 0xd9, 0xfb, 0xb6, 0x6b, 0x09, 0x4c,
+ 0x65, 0x30, 0xae, 0x02, 0x1e, 0x06, 0xfb, 0xc5, 0xa6, 0xbc, 0xbe, 0xf1, 0x10,
+ 0x27, 0xd3, 0x66, 0xc6, 0x1b, 0x08, 0x16, 0xd3, 0x11, 0xe7, 0xef, 0xf5, 0x58,
+ 0x1b, 0xe6, 0xaf, 0x18, 0xe5, 0x3e, 0xef, 0xd9, 0xc6, 0x2f, 0x46, 0xc2, 0x09,
+ 0x2b, 0x08, 0x0a, 0x08, 0x17, 0x11, 0x1c, 0x1d, 0x2c, 0xf7, 0xf8, 0x14, 0xfc,
+ 0x2f, 0xff, 0xe3, 0xf0, 0x35, 0x4a, 0x28, 0xe4, 0x09, 0xf8, 0xfd, 0xce, 0x36,
+ 0xbe, 0xf3, 0xdc, 0x9f, 0x3c, 0xdd, 0xe1, 0xe7, 0x13, 0xb2, 0xeb, 0xe9, 0xfd,
+ 0xb7, 0x1a, 0xf7, 0x09, 0x46, 0xf5, 0x13, 0x0d, 0x01, 0x13, 0x5d, 0x22, 0xfa,
+ 0xe7, 0xe4, 0x37, 0x1d, 0x14, 0xf5, 0xf4, 0xff, 0xd1, 0x1e, 0xf0, 0xff, 0x8c,
+ 0xf8, 0xcf, 0x0e, 0xbc, 0x24, 0x09, 0xd8, 0xc1, 0xfe, 0xca, 0x04, 0xd7, 0x09,
+ 0xf8, 0xc9, 0xf0, 0xaf, 0xd4, 0xb6, 0xd8, 0x2b, 0xe0, 0xfe, 0x0a, 0xf0, 0xd9,
+ 0x00, 0x7f, 0xf4, 0xf0, 0x2d, 0xbb, 0x18, 0xdb, 0x02, 0xed, 0xd1, 0x0c, 0xb6,
+ 0xcf, 0x0f, 0x16, 0xe5, 0x0a, 0xfc, 0xd7, 0x5e, 0x1d, 0xc0, 0x31, 0xe5, 0xd0,
+ 0x20, 0x0e, 0x5b, 0xee, 0x6a, 0xf4, 0x1c, 0xfa, 0xeb, 0xda, 0xff, 0x2a, 0x26,
+ 0x43, 0x04, 0x20, 0xd1, 0xfd, 0x46, 0x00, 0xf1, 0x30, 0x36, 0x63, 0xe8, 0xf1,
+ 0xe7, 0x4a, 0x42, 0xf4, 0xe8, 0xcc, 0x4e, 0xdc, 0xac, 0x0c, 0xb7, 0xb8, 0x1f,
+ 0xff, 0x27, 0xbd, 0xe1, 0x02, 0xdb, 0x2c, 0x1e, 0xe8, 0xb2, 0xea, 0xa0, 0x16,
+ 0x13, 0x59, 0xf0, 0xc2, 0x12, 0x1a, 0x5d, 0xea, 0xd9, 0xf5, 0x0f, 0xdc, 0xdf,
+ 0xdb, 0xc9, 0xff, 0xc9, 0xd7, 0xde, 0xdb, 0xf6, 0xca, 0x98, 0xed, 0xcd, 0x57,
+ 0xc9, 0xc8, 0xbf, 0x5d, 0xfe, 0x01, 0x99, 0xfb, 0x6d, 0x2a, 0xed, 0xe1, 0xdd,
+ 0x2b, 0x40, 0x19, 0xdb, 0xd5, 0x18, 0x04, 0xa1, 0x4c, 0xb6, 0x52, 0xb5, 0x10,
+ 0x0e, 0x07, 0x0f, 0xd1, 0xfb, 0xf6, 0x05, 0x33, 0xc6, 0xee, 0xe1, 0x91, 0xd5,
+ 0x0e, 0xca, 0xfd, 0xc9, 0x1b, 0xce, 0xff, 0xfb, 0x25, 0xdb, 0x7f, 0x03, 0x3c,
+ 0x0f, 0xcf, 0xfc, 0x49, 0x2e, 0x4e, 0xc1, 0xeb, 0xdf, 0x08, 0xc1, 0x26, 0xe7,
+ 0xee, 0xd0, 0xea, 0xf6, 0xf2, 0xc6, 0xe4, 0x0b, 0xef, 0x1b, 0x01, 0xa5, 0x09,
+ 0x24, 0xdf, 0xd7, 0xe0, 0xf7, 0xc6, 0x36, 0x44, 0xde, 0xcb, 0x1a, 0xcc, 0xe7,
+ 0xd0, 0xe9, 0x7f, 0x63, 0x0d, 0x21, 0x08, 0x01, 0x0f, 0x15, 0x05, 0xcc, 0x0a,
+ 0xcd, 0xee, 0xd5, 0x0a, 0x2b, 0xb2, 0x49, 0xf0, 0x16, 0x08, 0x2d, 0xff, 0x37,
+ 0x05, 0x19, 0x04, 0xcd, 0xfc, 0x1f, 0xe0, 0xd0, 0xa6, 0xf7, 0x6b, 0xcd, 0xf6,
+ 0x54, 0x26, 0xb8, 0xb5, 0x27, 0x0c, 0x01, 0xe1, 0x58, 0xdf, 0x15, 0xf6, 0xd2,
+ 0x1c, 0x21, 0xd5, 0x16, 0x07, 0xeb, 0xf2, 0x43, 0xd0, 0xbe, 0xf3, 0xca, 0xf5,
+ 0x0e, 0xdd, 0x0b, 0x01, 0xe2, 0xf5, 0xf5, 0xe4, 0xfa, 0xf0, 0x01, 0xe5, 0x0c,
+ 0xf9, 0x16, 0xfa, 0xe0, 0xf4, 0x12, 0xfb, 0x16, 0x33, 0xe7, 0xc5, 0x07, 0x25,
+ 0x12, 0xa6, 0xcd, 0x03, 0x08, 0xe1, 0xe1, 0xec, 0xf4, 0xe0, 0x20, 0x0c, 0x73,
+ 0xc2, 0x33, 0xed, 0x00, 0xf3, 0x2c, 0xed, 0x1f, 0x04, 0x24, 0x3e, 0xdd, 0x3c,
+ 0x15, 0x4d, 0x1b, 0x0e, 0x0a, 0xf9, 0x35, 0x29, 0xdd, 0x1b, 0xbd, 0x51, 0x32,
+ 0x04, 0x0d, 0xfa, 0x38, 0x6a, 0xd5, 0x2c, 0x25, 0x1c, 0x07, 0xd4, 0xf5, 0x0e,
+ 0xbf, 0x06, 0xfc, 0x2c, 0x0b, 0x2a, 0x3b, 0xf9, 0xab, 0x24, 0x1e, 0xf0, 0x04,
+ 0xe7, 0x18, 0xd9, 0xf1, 0x00, 0xeb, 0x09, 0xe1, 0xd2, 0xfc, 0xf1, 0xf4, 0xf0,
+ 0xf3, 0x48, 0x1b, 0x0d, 0xd7, 0xfa, 0xcf, 0xff, 0xc4, 0xf0, 0xe0, 0xc9, 0x81,
+ 0x70, 0x09, 0xbe, 0x17, 0xad, 0x19, 0x99, 0xea, 0xd4, 0x02, 0x1d, 0x1c, 0xd4,
+ 0xdb, 0xf3, 0x3c, 0xbe, 0xc9, 0x2a, 0x1f, 0xe4, 0x4a, 0xeb, 0x06, 0x04, 0x47,
+ 0xfd, 0xc7, 0xa7, 0xca, 0xed, 0xf0, 0xca, 0xd0, 0xc6, 0xf4, 0x16, 0xc0, 0xe4,
+ 0xdb, 0x0b, 0xde, 0x0d, 0xd2, 0xda, 0xbd, 0xe4, 0x09, 0x0d, 0xa3, 0x04, 0x91,
+ 0x06, 0xfa, 0x26, 0x00, 0xfb, 0xe1, 0xe6, 0xe4, 0x1f, 0xf7, 0x04, 0xef, 0x5a,
+ 0x11, 0xe2, 0x27, 0x40, 0xe7, 0x0d, 0xd4, 0x3a, 0xf9, 0xe5, 0x2f, 0xac, 0xf8,
+ 0x3a, 0xd7, 0xe7, 0x07, 0xda, 0xd9, 0xec, 0xd7, 0xfa, 0x25, 0xc2, 0xfd, 0xed,
+ 0xd9, 0x02, 0xc4, 0x4e, 0x2f, 0x48, 0x0c, 0xc5, 0x25, 0xc2, 0xf5, 0x3b, 0x0a,
+ 0x42, 0xe2, 0x32, 0xdd, 0xba, 0xfc, 0xe2, 0xda, 0x2a, 0xd7, 0xd0, 0x1c, 0xc2,
+ 0x22, 0x6b, 0xe0, 0xf1, 0x06, 0x02, 0xfe, 0xeb, 0xdb, 0x16, 0x17, 0x07, 0xc5,
+ 0x10, 0x00, 0xeb, 0x2f, 0x11, 0xd4, 0xfc, 0x0b, 0x1f, 0xee, 0xc1, 0xe4, 0x7f,
+ 0x1e, 0xe6, 0xc3, 0xe6, 0x19, 0x10, 0xd3, 0x0e, 0xea, 0x19, 0xef, 0x5c, 0xf8,
+ 0x2a, 0x08, 0xfe, 0x0d, 0x2a, 0x44, 0x10, 0xe3, 0xf4, 0x04, 0x4f, 0x2e, 0xd7,
+ 0xcb, 0x05, 0x45, 0xf6, 0xf2, 0x0f, 0x03, 0xe7, 0x0e, 0x0c, 0xf6, 0x0b, 0xf0,
+ 0x26, 0xe9, 0xfd, 0xc8, 0xad, 0x15, 0x25, 0xc7, 0xf6, 0x4f, 0x13, 0xed, 0x09,
+ 0x14, 0xe8, 0xc2, 0xfc, 0xe9, 0x0a, 0xbf, 0x48, 0x42, 0xf1, 0x53, 0x37, 0xdb,
+ 0x36, 0xcf, 0xdf, 0x0e, 0x11, 0x19, 0x02, 0xe7, 0x09, 0x5d, 0x0f, 0xf5, 0x2a,
+ 0x22, 0xd6, 0x27, 0xe2, 0xf4, 0x4e, 0x86, 0x00, 0xbc, 0xbc, 0xec, 0xca, 0xfc,
+ 0xf4, 0xfb, 0x24, 0xf5, 0x2b, 0x14, 0x0b, 0x31, 0x51, 0xae, 0xb8, 0x1f, 0x13,
+ 0xff, 0x34, 0xee, 0xd1, 0x0f, 0x19, 0x1b, 0x72, 0xfe, 0x5f, 0x15, 0x00, 0x0f,
+ 0xbe, 0x09, 0x1b, 0xeb, 0xf4, 0x41, 0x21, 0x73, 0xa9, 0xc3, 0x17, 0xf0, 0x27,
+ 0xc2, 0x06, 0x57, 0xd5, 0xf1, 0x34, 0x39, 0x1b, 0x81, 0x4a, 0x09, 0x23, 0x9e,
+ 0x2b, 0xee, 0xdb, 0x21, 0x65, 0x03, 0x33, 0xdd, 0x0b, 0x06, 0x1f, 0x6e, 0x2b,
+ 0x02, 0xe8, 0x11, 0x09, 0x16, 0xfc, 0xf0, 0xfe, 0xda, 0xf2, 0xd3, 0xfc, 0xb3,
+ 0xfd, 0x07, 0xea, 0x05, 0x3a, 0xc6, 0x02, 0xff, 0x5c, 0xa1, 0x42, 0x36, 0x1b,
+ 0x36, 0x04, 0xd2, 0xfc, 0x03, 0x2b, 0xf4, 0x08, 0xfc, 0xb0, 0x14, 0x52, 0x06,
+ 0x13, 0x60, 0x26, 0xde, 0xd4, 0x06, 0xfb, 0xcf, 0xd4, 0xe6, 0xf4, 0x1f, 0x02,
+ 0x1c, 0xfd, 0xf8, 0x04, 0x33, 0xc4, 0x07, 0xe3, 0x56, 0x47, 0x03, 0x36, 0x1a,
+ 0x7f, 0x19, 0xb0, 0x1c, 0x53, 0x0c, 0xb4, 0xfc, 0x44, 0x14, 0x01, 0x2e, 0x22,
+ 0x1a, 0xf5, 0x11, 0xf3, 0xd1, 0xe6, 0xd7, 0x37, 0xfb, 0xc8, 0x17, 0xe7, 0x2d,
+ 0x07, 0x36, 0xe4, 0xd4, 0x0e, 0x19, 0x10, 0x0e, 0x3c, 0x1a, 0xb8, 0x3c, 0x37,
+ 0x14, 0xeb, 0xf4, 0xda, 0xe0, 0xed, 0x0f, 0x04, 0x06, 0xe8, 0xc7, 0x27, 0xed,
+ 0xf5, 0xcf, 0xc8, 0x18, 0x4c, 0x2c, 0xf0, 0xb4, 0x28, 0x3b, 0x0e, 0xf6, 0xd9,
+ 0x12, 0xdd, 0xe6, 0xce, 0xf5, 0xdf, 0x01, 0xb9, 0xef, 0x08, 0x3c, 0x1b, 0xe1,
+ 0xcc, 0x0f, 0x18, 0xf8, 0xf0, 0xfd, 0xc3, 0xf9, 0xf4, 0xd8, 0x07, 0xe7, 0xdb,
+ 0xe8, 0xe2, 0x2a, 0x11, 0x0d, 0x2c, 0x3e, 0xe8, 0x14, 0x3e, 0xdf, 0x0b, 0xef,
+ 0x28, 0xea, 0x24, 0xd6, 0x1f, 0xf3, 0xef, 0x1c, 0x16, 0xfd, 0xcd, 0xd4, 0x42,
+ 0xc3, 0x7f, 0x0a, 0x07, 0x1d, 0x09, 0x28, 0x3e, 0x01, 0xec, 0xf0, 0x11, 0xd1,
+ 0x58, 0xf0, 0x39, 0x43, 0x1f, 0x1b, 0x48, 0x05, 0xec, 0x34, 0x0a, 0x23, 0x08,
+ 0x01, 0xfd, 0x08, 0x01, 0x41, 0xec, 0x12, 0xed, 0xf1, 0xed, 0xe8, 0xc3, 0x20,
+ 0xf2, 0xe1, 0x11, 0xce, 0xd7, 0xd8, 0xf2, 0xcf, 0x01, 0x0c, 0x0c, 0x17, 0xc9,
+ 0x06, 0x26, 0x27, 0x09, 0xed, 0x0d, 0x20, 0x04, 0xcf, 0xb2, 0xe4, 0xe9, 0xda,
+ 0x08, 0x12, 0x5b, 0xcd, 0xe9, 0xef, 0x14, 0xe2, 0x4d, 0xcc, 0xf0, 0x15, 0x06,
+ 0x10, 0xec, 0xd8, 0x51, 0xea, 0xce, 0x0b, 0x35, 0xcc, 0xdb, 0xcf, 0xfa, 0x0e,
+ 0x32, 0xe5, 0x11, 0x16, 0x05, 0x2e, 0xd0, 0xf8, 0xee, 0xf9, 0x15, 0xf7, 0x25,
+ 0xf4, 0xe3, 0x12, 0xe6, 0xcf, 0xdb, 0xf8, 0x06, 0x0f, 0xe3, 0x36, 0xed, 0x09,
+ 0xf8, 0xe4, 0x0d, 0xe0, 0xe2, 0x08, 0xe3, 0xee, 0x09, 0xe4, 0x11, 0x1c, 0x3b,
+ 0xaf, 0xee, 0x08, 0xfe, 0xed, 0x00, 0xf8, 0xf9, 0xe2, 0x4c, 0x0a, 0x0f, 0x0d,
+ 0xff, 0x07, 0xf1, 0xfc, 0x09, 0xf8, 0x21, 0xf0, 0xc6, 0x0d, 0xf5, 0xf8, 0xd8,
+ 0x35, 0x20, 0xeb, 0x16, 0xea, 0xfd, 0x20, 0xd1, 0xe0, 0xd6, 0xde, 0xfe, 0xe3,
+ 0xe1, 0x0f, 0x81, 0xf9, 0x29, 0xf5, 0x60, 0xca, 0xf8, 0x0f, 0xff, 0x0a, 0x0c,
+ 0xd9, 0xe2, 0xc9, 0x1e, 0xf3, 0x06, 0xfc, 0xff, 0xe6, 0xd9, 0x25, 0x1c, 0xf0,
+ 0x19, 0xfa, 0xef, 0xd3, 0xcb, 0xdb, 0x0b, 0x06, 0xe1, 0xfb, 0xec, 0xe8, 0x00,
+ 0x16, 0x11, 0xf8, 0x1d, 0xf4, 0x06, 0x1e, 0x09, 0xe6, 0x18, 0xdc, 0xe7, 0x04,
+ 0x0c, 0x06, 0xd2, 0x08, 0xec, 0xf6, 0xd3, 0xf2, 0xfc, 0xf7, 0xd3, 0xe8, 0xfd,
+ 0x0a, 0xf0, 0x07, 0x0e, 0xc6, 0xe2, 0x0e, 0x13, 0xd8, 0x04, 0x0e, 0xf2, 0xef,
+ 0x01, 0x03, 0xea, 0x22, 0xdd, 0x03, 0x00, 0xaa, 0x21, 0xe2, 0x23, 0xdf, 0x06,
+ 0xe0, 0xec, 0xe6, 0x26, 0xd6, 0xf2, 0xeb, 0x04, 0xf5, 0xcd, 0xee, 0x10, 0xfd,
+ 0xc9, 0x7f, 0x15, 0x0f, 0xfc, 0x16, 0x26, 0x19, 0xca, 0x10, 0x11, 0xda, 0x1f,
+ 0x06, 0x0b, 0x12, 0x1d, 0xfa, 0xf5, 0x04, 0xd3, 0xfe, 0xfd, 0x21, 0xee, 0x1a,
+ 0x05, 0x12, 0x0e, 0x0d, 0xe4, 0xe5, 0x10, 0xf5, 0xd8, 0xf2, 0x1a, 0x0c, 0x29,
+ 0x0f, 0xfe, 0xdd, 0xda, 0xe2, 0x02, 0xf8, 0x01, 0xf6, 0x04, 0xdf, 0x2e, 0xf2,
+ 0xd4, 0x40, 0xb5, 0xf4, 0xa3, 0xcb, 0x09, 0x54, 0x33, 0xea, 0xe8, 0xb3, 0x16,
+ 0x1a, 0x41, 0x06, 0x1e, 0x39, 0x1c, 0x09, 0xed, 0x31, 0x26, 0x69, 0xce, 0x19,
+ 0xba, 0x52, 0xea, 0xab, 0x21, 0xd8, 0xc9, 0xca, 0x0b, 0x3c, 0xd4, 0x7f, 0xda,
+ 0x01, 0x51, 0x12, 0xe7, 0x29, 0x1c, 0x9e, 0xea, 0xea, 0xea, 0xe0, 0xf4, 0xeb,
+ 0xf0, 0x1e, 0xed, 0x0e, 0xc8, 0x0d, 0xbb, 0xc6, 0xcc, 0xc7, 0xc6, 0xc2, 0xf3,
+ 0xf8, 0x2f, 0x14, 0x90, 0xe5, 0x9c, 0xcf, 0xf3, 0xb5, 0xa2, 0x8d, 0x09, 0xcc,
+ 0xe7, 0x00, 0xed, 0x6c, 0x83, 0xc1, 0xc6, 0xab, 0xf6, 0xef, 0x04, 0x4e, 0xe4,
+ 0x43, 0x12, 0xdd, 0x1a, 0xb0, 0x2e, 0xc8, 0xff, 0xe4, 0xf5, 0xce, 0xe7, 0x1d,
+ 0xd4, 0x18, 0x0c, 0x19, 0x18, 0x2f, 0x9c, 0x49, 0x13, 0x54, 0x1b, 0x07, 0x0f,
+ 0xc6, 0xb4, 0xcf, 0xd8, 0xed, 0x0f, 0xeb, 0x3b, 0xfd, 0x49, 0xf9, 0x60, 0x08,
+ 0x26, 0xec, 0xfe, 0x05, 0xee, 0x12, 0x76, 0xde, 0xdf, 0x0c, 0xe1, 0x18, 0xfc,
+ 0x24, 0xeb, 0x98, 0x20, 0x39, 0x9f, 0xfc, 0xd6, 0x2e, 0x3b, 0xee, 0xfc, 0x0e,
+ 0xdd, 0xd5, 0x1e, 0x18, 0xb0, 0xb3, 0xeb, 0xb3, 0xf4, 0xf9, 0x28, 0x71, 0xe2,
+ 0x91, 0x07, 0xe1, 0x1a, 0xd9, 0xc5, 0xfb, 0x20, 0xcb, 0x7a, 0x27, 0xe0, 0x26,
+ 0x38, 0xde, 0x65, 0xf7, 0xba, 0xd1, 0xe6, 0x05, 0x0b, 0x00, 0xff, 0x28, 0x9c,
+ 0xe9, 0xff, 0x08, 0x23, 0xca, 0xb7, 0x3b, 0xc8, 0x06, 0x64, 0xc3, 0xe0, 0xe8,
+ 0x33, 0xdb, 0x6d, 0x46, 0x81, 0xce, 0x21, 0x0a, 0x6e, 0x02, 0x19, 0xee, 0xbf,
+ 0x2a, 0x9b, 0xf0, 0x2b, 0xe9, 0x76, 0x16, 0x69, 0xfa, 0x05, 0xd5, 0xf5, 0x3d,
+ 0x1f, 0xc0, 0x24, 0x1e, 0x0d, 0x38, 0xe5, 0x48, 0xf9, 0xf5, 0xf9, 0x35, 0x21,
+ 0x9a, 0x5b, 0x1d, 0x19, 0x17, 0x18, 0xda, 0x53, 0xe1, 0xf5, 0x06, 0xf5, 0x0a,
+ 0xf1, 0xff, 0xf1, 0x4c, 0xe8, 0x02, 0xdd, 0x0e, 0x91, 0x56, 0xd9, 0xdb, 0xf5,
+ 0xea, 0x44, 0xfb, 0xe0, 0x21, 0xc9, 0xd8, 0x27, 0xc4, 0xc3, 0x0d, 0xf0, 0xd2,
+ 0xf3, 0xfe, 0x8d, 0x32, 0xfc, 0xf5, 0x29, 0x45, 0x40, 0x3a, 0xf5, 0x2f, 0x24,
+ 0xe6, 0x47, 0xef, 0x35, 0x1b, 0x07, 0x29, 0xd9, 0xe2, 0x14, 0xe0, 0x01, 0x32,
+ 0xf7, 0xbb, 0x20, 0xe2, 0x6b, 0x01, 0x7f, 0xed, 0xe0, 0x1c, 0xe0, 0x18, 0xe2,
+ 0x4a, 0x17, 0xb8, 0x22, 0xa2, 0xeb, 0x59, 0xe9, 0x1c, 0x1e, 0x99, 0x3a, 0x3b,
+ 0x44, 0xf8, 0xb2, 0x23, 0xe9, 0xc4, 0x0d, 0xa7, 0xe1, 0x16, 0x0b, 0xc8, 0xac,
+ 0xce, 0xb2, 0xcd, 0x17, 0x20, 0xd7, 0xdc, 0x15, 0x2b, 0xd7, 0x9d, 0x33, 0x8d,
+ 0x10, 0x43, 0x94, 0x35, 0x14, 0xd6, 0xf6, 0x3c, 0x02, 0x5e, 0xf7, 0x4a, 0xc0,
+ 0xfa, 0xf2, 0xfe, 0xf8, 0x28, 0x04, 0x17, 0xb8, 0xee, 0x19, 0xf1, 0xb9, 0x81,
+ 0xcc, 0x3a, 0xfe, 0xe4, 0x07, 0x51, 0x7a, 0x84, 0x29, 0x13, 0xb6, 0xb7, 0xf4,
+ 0x0c, 0x04, 0x93, 0xc4, 0x33, 0xe9, 0x38, 0xc6, 0x09, 0x0b, 0x01, 0xec, 0xec,
+ 0xfc, 0x3a, 0xc2, 0x4f, 0x4a, 0xc4, 0xcf, 0x1d, 0xaa, 0x27, 0xe9, 0x0a, 0x78,
+ 0xee, 0x1a, 0xfa, 0xc2, 0x01, 0xe7, 0xef, 0xf8, 0x10, 0x3c, 0x45, 0x43, 0xe8,
+ 0x24, 0x10, 0xaf, 0x60, 0x3a, 0x52, 0x17, 0xed, 0xce, 0xf5, 0xe7, 0x23, 0x3a,
+ 0xa3, 0xf8, 0x4f, 0x6e, 0x35, 0xd6, 0x6d, 0x23, 0xdb, 0xaf, 0xce, 0x4a, 0xfd,
+ 0xd8, 0xb1, 0x0f, 0xbb, 0xa3, 0x3b, 0xcf, 0xbf, 0xf6, 0xfc, 0xd1, 0xc6, 0x96,
+ 0xf5, 0x4f, 0xea, 0x0a, 0x0d, 0x32, 0xbd, 0xac, 0xe3, 0x9a, 0x29, 0x0b, 0xde,
+ 0x1a, 0x05, 0x21, 0x4c, 0x22, 0x2b, 0xbc, 0x47, 0x4e, 0xcc, 0xe1, 0x57, 0xe4,
+ 0xbf, 0x89, 0x36, 0xd6, 0x69, 0xf9, 0x91, 0x14, 0xc4, 0x17, 0x4c, 0xf6, 0xec,
+ 0xe6, 0x17, 0x02, 0xf7, 0xde, 0x0d, 0x0b, 0xd9, 0x10, 0xee, 0xcd, 0xdc, 0xf8,
+ 0x04, 0xbc, 0xf7, 0x00, 0xff, 0xfb, 0xd7, 0xb7, 0xd5, 0x21, 0xf1, 0xad, 0xd6,
+ 0xec, 0x38, 0x12, 0x7c, 0x07, 0xec, 0xc0, 0xf8, 0xeb, 0xba, 0x3f, 0xdd, 0xfb,
+ 0xd5, 0x2c, 0x0a, 0x01, 0xe4, 0xfe, 0xbe, 0xf5, 0x24, 0xba, 0xf2, 0x1a, 0xda,
+ 0xe5, 0x2e, 0xdf, 0xdc, 0xf0, 0x0f, 0x56, 0x0e, 0xf9, 0xe4, 0x03, 0x9c, 0xcb,
+ 0xca, 0xc9, 0xeb, 0x11, 0x15, 0x26, 0x0d, 0x1a, 0xc5, 0x2f, 0x14, 0x16, 0x04,
+ 0xf3, 0xfc, 0x21, 0xc8, 0xd7, 0x24, 0xe5, 0xfc, 0x81, 0xe9, 0x1c, 0xe9, 0xd6,
+ 0x13, 0xf9, 0x50, 0xdd, 0xe6, 0x30, 0x0d, 0xdf, 0xc9, 0xe2, 0xfd, 0x4f, 0x00,
+ 0x30, 0xd6, 0xf7, 0x0e, 0xee, 0xd0, 0x01, 0x12, 0x16, 0xf3, 0x17, 0x39, 0xa2,
+ 0xd6, 0x21, 0xf4, 0x02, 0xcf, 0xe9, 0xe6, 0x7f, 0xf6, 0x2d, 0x1b, 0x05, 0xe3,
+ 0x31, 0xf8, 0x4d, 0xfb, 0xa2, 0xe8, 0xef, 0x49, 0x04, 0x0d, 0xfd, 0xfc, 0x34,
+ 0x11, 0x37, 0xfd, 0x1c, 0x28, 0xca, 0xf3, 0xcd, 0x18, 0x2d, 0xde, 0xf9, 0xf0,
+ 0x19, 0x22, 0xb8, 0xab, 0xd2, 0x1e, 0x2c, 0xd0, 0x50, 0x31, 0xfa, 0xde, 0xf2,
+ 0x1d, 0xec, 0x5b, 0xef, 0xf2, 0x17, 0x04, 0x2a, 0x27, 0xd8, 0x87, 0x15, 0xf4,
+ 0xe0, 0x0a, 0xb4, 0x1a, 0xda, 0xe5, 0xf2, 0x13, 0x2f, 0x59, 0x29, 0x02, 0x66,
+ 0x5e, 0x00, 0xb4, 0x1e, 0x10, 0xf9, 0x9e, 0xda, 0xb0, 0x1b, 0xd2, 0xe5, 0x06,
+ 0x0d, 0x14, 0xff, 0x0c, 0x30, 0x3b, 0x24, 0x26, 0xd5, 0xcb, 0xcb, 0x1f, 0xf7,
+ 0x30, 0xf5, 0x36, 0xfa, 0x10, 0xac, 0xfb, 0x03, 0x2d, 0x4d, 0x2f, 0xe3, 0xf1,
+ 0x1a, 0xe4, 0xc7, 0x1d, 0x09, 0xd4, 0x5a, 0x39, 0xe5, 0xe6, 0x4b, 0x13, 0x23,
+ 0xcb, 0xf7, 0xde, 0x14, 0x38, 0x50, 0x2a, 0x26, 0xe1, 0xbc, 0xf4, 0x16, 0xe3,
+ 0x08, 0x32, 0x30, 0x75, 0x10, 0x07, 0x1d, 0xd9, 0x15, 0xa5, 0xf9, 0xc2, 0xf1,
+ 0xf2, 0x10, 0x18, 0xf5, 0x01, 0x4c, 0xf6, 0x6e, 0xf1, 0x0e, 0xdb, 0xc8, 0xf9,
+ 0x3c, 0x07, 0xe5, 0xfb, 0xea, 0xa4, 0x1c, 0x10, 0x29, 0x26, 0x27, 0x13, 0x0a,
+ 0x6c, 0xec, 0x0b, 0xc2, 0xd2, 0x15, 0xa3, 0xfa, 0xcd, 0x9a, 0x11, 0x08, 0x23,
+ 0xe1, 0xed, 0x3c, 0xf9, 0x1f, 0x00, 0xeb, 0x04, 0x47, 0x2f, 0x0f, 0x1f, 0x7f,
+ 0xcf, 0xd5, 0xe3, 0x5e, 0x20, 0x6e, 0x13, 0x33, 0x1c, 0xed, 0x7b, 0x18, 0xc1,
+ 0xeb, 0xbf, 0x38, 0x60, 0x4c, 0xd9, 0xf7, 0xee, 0xf7, 0x03, 0x49, 0xb6, 0xee,
+ 0xc3, 0x3d, 0x05, 0x73, 0xa3, 0x1b, 0x22, 0xfa, 0x14, 0x25, 0xc5, 0xf5, 0x9a,
+ 0x0b, 0x00, 0xde, 0x33, 0xff, 0x10, 0x1b, 0x3e, 0xff, 0x00, 0xea, 0xdb, 0xb4,
+ 0x48, 0xde, 0xe8, 0xeb, 0x0d, 0xe4, 0xfc, 0x14, 0x1c, 0x0d, 0x4d, 0xf4, 0x04,
+ 0x40, 0xae, 0x1e, 0x5c, 0x61, 0x66, 0xda, 0xa7, 0xed, 0xde, 0xfd, 0x21, 0xa4,
+ 0x3f, 0xd0, 0x04, 0x76, 0xe9, 0xfd, 0x60, 0xe3, 0xa4, 0x34, 0x00, 0x39, 0x08,
+ 0xce, 0xcf, 0xd3, 0x0a, 0xd7, 0xd5, 0x2d, 0x07, 0x1c, 0xe4, 0xf4, 0x6a, 0xf5,
+ 0x38, 0xf8, 0xf3, 0x24, 0x4b, 0x25, 0x17, 0x10, 0x01, 0x16, 0x1f, 0x17, 0x02,
+ 0x02, 0xf6, 0x08, 0xd6, 0xd0, 0x3e, 0x3f, 0xeb, 0x2f, 0x4d, 0x3f, 0x7f, 0x90,
+ 0xf4, 0xe2, 0x08, 0x23, 0x10, 0xd6, 0xf5, 0xc7, 0xb4, 0x23, 0x2e, 0xaf, 0xff,
+ 0xed, 0x94, 0xb6, 0xec, 0xea, 0xb7, 0x49, 0x43, 0xb6, 0x41, 0x3b, 0x0a, 0xe0,
+ 0xdb, 0x29, 0x0b, 0x6a, 0x9c, 0xcb, 0x15, 0x16, 0xe5, 0xd6, 0x4b, 0xb6, 0x0b,
+ 0x42, 0xed, 0x06, 0x04, 0x4b, 0xcb, 0x52, 0x51, 0x18, 0x41, 0x1c, 0x0c, 0xfb,
+ 0x12, 0xe9, 0xce, 0x0f, 0xca, 0x4d, 0x3f, 0x2e, 0x12, 0x0d, 0xd2, 0x2a, 0xf9,
+ 0xed, 0x3e, 0x2d, 0xd5, 0xb9, 0x75, 0xe1, 0x0a, 0x31, 0xda, 0x39, 0x42, 0xc0,
+ 0xda, 0x2a, 0x38, 0x12, 0xdc, 0xde, 0xc5, 0xe1, 0x28, 0x0c, 0x55, 0xd4, 0xfd,
+ 0xf5, 0xea, 0x38, 0xe9, 0xfe, 0x0c, 0x55, 0x51, 0x2a, 0x2f, 0x17, 0xee, 0xf6,
+ 0xed, 0x07, 0xb2, 0xf6, 0xf4, 0x22, 0xf9, 0x55, 0x28, 0xf5, 0xdf, 0xc9, 0xd5,
+ 0x09, 0x2f, 0xd6, 0xae, 0x3b, 0xc3, 0xf1, 0x44, 0xd4, 0x0b, 0xb8, 0x46, 0x18,
+ 0xc5, 0xdb, 0xf4, 0x1e, 0xe9, 0x4a, 0x64, 0x00, 0x33, 0xbc, 0x03, 0xe6, 0x3e,
+ 0x2a, 0x20, 0xf9, 0xb8, 0x2a, 0xec, 0xc9, 0x11, 0xcc, 0xea, 0x2f, 0x1b, 0x1d,
+ 0xe6, 0x1c, 0xd9, 0xd9, 0xd7, 0x22, 0xd8, 0x17, 0xd7, 0x0c, 0x45, 0xbb, 0xed,
+ 0xb8, 0x74, 0x0d, 0x20, 0xd1, 0x19, 0x1d, 0xf0, 0xf9, 0x7f, 0x2f, 0xee, 0x30,
+ 0x2c, 0xf4, 0xf6, 0x1a, 0x05, 0x10, 0xfe, 0xca, 0xff, 0xf6, 0xdb, 0x0c, 0xde,
+ 0x23, 0xcc, 0xec, 0x08, 0x09, 0xf4, 0xd8, 0xda, 0xd6, 0xf7, 0xfd, 0x0c, 0x3c,
+ 0xfe, 0xdb, 0xdd, 0x00, 0x20, 0xfa, 0x32, 0xdb, 0x11, 0xee, 0xc7, 0xf6, 0x0c,
+ 0xe9, 0xe8, 0xf2, 0x3d, 0x18, 0xf3, 0x28, 0xba, 0x08, 0xdc, 0x04, 0xca, 0x04,
+ 0xbb, 0xfe, 0x24, 0x8f, 0xf1, 0xc3, 0x1c, 0x48, 0x0b, 0x13, 0x08, 0xd1, 0x05,
+ 0x5c, 0xf2, 0xfd, 0x0d, 0xee, 0xf8, 0x27, 0xc2, 0x3d, 0xd6, 0x1e, 0x2c, 0x03,
+ 0xef, 0x55, 0xfd, 0xef, 0xe2, 0x18, 0x08, 0xee, 0x04, 0x0b, 0xdd, 0xfe, 0x0c,
+ 0x5a, 0xd3, 0xf9, 0xec, 0x05, 0x2e, 0x02, 0x5a, 0x2f, 0xf0, 0x3c, 0xe4, 0xee,
+ 0x28, 0xe1, 0x15, 0xda, 0xbd, 0xda, 0x22, 0x4d, 0xe2, 0x6e, 0xab, 0x22, 0xec,
+ 0xfd, 0x12, 0xfb, 0xec, 0x20, 0x12, 0x81, 0xf8, 0xe9, 0xef, 0x11, 0x17, 0x28,
+ 0x45, 0x92, 0x0a, 0xb5, 0x10, 0x35, 0xbe, 0xf3, 0xdb, 0x31, 0xea, 0xf1, 0xeb,
+ 0xe4, 0x2c, 0xfe, 0xe1, 0x1c, 0xf4, 0x20, 0xd9, 0x23, 0xfc, 0x07, 0x2b, 0xab,
+ 0x13, 0x2d, 0x2b, 0xdf, 0x2b, 0xf6, 0x31, 0xe7, 0x06, 0xef, 0x06, 0xfb, 0x02,
+ 0xec, 0x18, 0x33, 0x81, 0x23, 0x0c, 0x01, 0xba, 0x09, 0x3e, 0x6a, 0x67, 0x1b,
+ 0xe1, 0x0e, 0x07, 0xfd, 0xd9, 0xd7, 0x04, 0xff, 0xd2, 0x2b, 0x08, 0x2c, 0xad,
+ 0xc6, 0x10, 0x2f, 0x11, 0xf0, 0xde, 0x03, 0xd6, 0x40, 0xe7, 0x38, 0x04, 0xfa,
+ 0xfb, 0xfa, 0x40, 0x14, 0x0f, 0xe8, 0xea, 0xdb, 0xf9, 0xc7, 0x35, 0x27, 0xe3,
+ 0x16, 0x45, 0x1c, 0xe8, 0x2c, 0x2a, 0x36, 0xc3, 0xf2, 0x2e, 0xee, 0x6f, 0x5b,
+ 0xe8, 0x27, 0x27, 0xf5, 0xa3, 0x1b, 0x00, 0x44, 0xec, 0xcf, 0xd9, 0x2b, 0x53,
+ 0x12, 0xeb, 0xd8, 0xeb, 0xbf, 0x0e, 0x43, 0xa8, 0x0f, 0xd3, 0x17, 0xcf, 0x10,
+ 0x2e, 0x0d, 0xe8, 0xff, 0xe2, 0xf6, 0x1a, 0xd6, 0x08, 0x24, 0x4a, 0xa8, 0x0d,
+ 0x13, 0x28, 0x3a, 0x1c, 0x69, 0x25, 0x08, 0xfc, 0x15, 0x0a, 0x17, 0x14, 0xe4,
+ 0xb7, 0xe9, 0xdc, 0x06, 0xd8, 0xf9, 0x3a, 0x02, 0xe4, 0x16, 0x35, 0x3f, 0xfb,
+ 0x11, 0x7f, 0x0b, 0x1e, 0x10, 0x4b, 0x10, 0x48, 0xe5, 0x20, 0xe3, 0xe4, 0x3f,
+ 0x28, 0xd9, 0x0b, 0xe4, 0xec, 0xe3, 0x0b, 0xbd, 0xe3, 0xe2, 0x77, 0x1e, 0xdd,
+ 0x07, 0x30, 0x1e, 0xd6, 0xe9, 0x0d, 0xeb, 0xc4, 0xfd, 0x14, 0xed, 0xe1, 0x21,
+ 0xfc, 0xe8, 0xcb, 0x31, 0xd4, 0x2b, 0xff, 0x4e, 0xff, 0xf3, 0xe6, 0x32, 0xff,
+ 0x16, 0x10, 0xfe, 0xce, 0xc4, 0x04, 0xf6, 0xe6, 0x25, 0xa6, 0x1a, 0x15, 0x08,
+ 0x1c, 0x21, 0xd2, 0xd2, 0xd9, 0x1f, 0xd3, 0x09, 0xff, 0x1c, 0xeb, 0xf1, 0x08,
+ 0xda, 0xc6, 0xff, 0xd7, 0x3c, 0x38, 0x29, 0xf2, 0x22, 0x01, 0xf8, 0x00, 0xec,
+ 0xd1, 0xe6, 0x34, 0x1d, 0xe9, 0xe4, 0x03, 0xda, 0xfe, 0x11, 0x09, 0xf9, 0xef,
+ 0x38, 0x0c, 0xe1, 0x59, 0xc6, 0xbe, 0xff, 0xcf, 0x1b, 0xe6, 0xf5, 0xf4, 0x2d,
+ 0x15, 0xe5, 0xca, 0x32, 0x3a, 0x09, 0xa1, 0x0e, 0x17, 0xd9, 0xe4, 0x02, 0xee,
+ 0xeb, 0x19, 0xcd, 0xcd, 0xf0, 0xe0, 0xdc, 0x1f, 0xec, 0xcc, 0xd3, 0x16, 0xfb,
+ 0xbf, 0xa6, 0x0f, 0xf0, 0x17, 0xd6, 0xcd, 0x18, 0xcc, 0xca, 0x56, 0x1e, 0xe9,
+ 0x1f, 0xb8, 0x7f, 0xc6, 0x30, 0xe2, 0xf3, 0xba, 0x0b, 0xf8, 0xcd, 0xf8, 0x1e,
+ 0xc8, 0x01, 0xeb, 0xec, 0xe4, 0x1a, 0x21, 0x27, 0xab, 0xe5, 0xe9, 0xed, 0x0a,
+ 0xfd, 0xe5, 0x1f, 0x02, 0xee, 0xfa, 0xef, 0x14, 0x61, 0x39, 0xf6, 0xf0, 0xeb,
+ 0x01, 0x15, 0xee, 0x1b, 0xf0, 0xe2, 0xb0, 0x0a, 0x33, 0x58, 0xc4, 0xd4, 0x02,
+ 0xe1, 0x0e, 0xb6, 0xce, 0x4e, 0xd5, 0x2b, 0x13, 0x11, 0x0e, 0x18, 0xce, 0xf6,
+ 0x49, 0x01, 0x5a, 0xc9, 0x27, 0x00, 0x38, 0xfd, 0x06, 0x2a, 0x3b, 0xd6, 0x29,
+ 0xe7, 0x34, 0xc6, 0x0b, 0xe4, 0xf5, 0x5b, 0xe3, 0x04, 0xbb, 0xb3, 0x2f, 0xac,
+ 0xd9, 0x35, 0x53, 0x2f, 0xb3, 0xf6, 0x18, 0x38, 0xb0, 0x05, 0x12, 0x37, 0x1d,
+ 0x00, 0x0b, 0xda, 0x42, 0xd7, 0xb3, 0xda, 0xd9, 0x00, 0xf7, 0xe8, 0xdc, 0x01,
+ 0xd4, 0x20, 0x18, 0xe0, 0x6e, 0xf5, 0x44, 0x28, 0xdb, 0xcd, 0xe3, 0x2f, 0xc3,
+ 0x25, 0x32, 0xef, 0x39, 0x0c, 0x0e, 0xf0, 0xd4, 0x0c, 0xe0, 0xee, 0x12, 0x49,
+ 0x2b, 0xbe, 0x1f, 0x38, 0xe4, 0xec, 0x8e, 0x01, 0xf5, 0xf2, 0xc8, 0xad, 0xfe,
+ 0xe8, 0x03, 0xd3, 0xc9, 0x3d, 0x18, 0x13, 0x26, 0xd4, 0xd5, 0x26, 0xcf, 0xef,
+ 0xf8, 0xec, 0xea, 0x5e, 0x17, 0x32, 0xf0, 0x0b, 0xe1, 0x68, 0x81, 0x31, 0xe6,
+ 0xc0, 0x09, 0x06, 0xe9, 0xf0, 0x1b, 0xef, 0x51, 0x4f, 0x50, 0xfa, 0xdb, 0xe0,
+ 0x0b, 0xf5, 0xe8, 0xd4, 0xd8, 0x1d, 0x06, 0x15, 0xf0, 0x05, 0xfd, 0xd6, 0x01,
+ 0xff, 0x3b, 0xd7, 0x07, 0xf2, 0xa4, 0xd4, 0x06, 0xfa, 0x10, 0xf9, 0xe9, 0xf0,
+ 0x17, 0x28, 0xff, 0x0b, 0x1b, 0xe2, 0x1f, 0xfa, 0xf9, 0x2b, 0x19, 0xd1, 0xe8,
+ 0xe2, 0xcd, 0x25, 0xd6, 0xf5, 0xcf, 0x4a, 0xff, 0xec, 0x09, 0x1f, 0xee, 0xfd,
+ 0x1c, 0xde, 0x7f, 0x4d, 0x50, 0xd1, 0xef, 0x25, 0xe1, 0xc5, 0xcc, 0xae, 0x1a,
+ 0xc9, 0x11, 0xf9, 0x13, 0x1b, 0x0f, 0xf5, 0xef, 0x23, 0x0f, 0x09, 0x22, 0x18,
+ 0x3c, 0x2b, 0xcc, 0xdf, 0xf1, 0x12, 0x17, 0xdc, 0x39, 0xe1, 0xf0, 0xee, 0x1a,
+ 0x04, 0xf3, 0x1a, 0x0e, 0x14, 0xe5, 0xf2, 0x41, 0x1f, 0xeb, 0x39, 0xe7, 0xfa,
+ 0x0b, 0x26, 0xc7, 0xe9, 0xd8, 0xde, 0xfa, 0x17, 0x55, 0x08, 0xe7, 0xe4, 0xba,
+ 0xf5, 0xfe, 0xf6, 0x40, 0x10, 0x0c, 0xda, 0x02, 0x19, 0xe3, 0x19, 0xe5, 0xf0,
+ 0xaf, 0xe7, 0xd1, 0x34, 0x2b, 0xfa, 0x07, 0xec, 0xd4, 0xcc, 0x15, 0xdb, 0xf9,
+ 0x20, 0x1b, 0xc8, 0x08, 0xf0, 0xda, 0xe0, 0xef, 0x30, 0x19, 0xe1, 0xfa, 0xf1,
+ 0x1b, 0xe7, 0xd1, 0x00, 0xbc, 0xc7, 0x1a, 0xcd, 0xfb, 0x1a, 0xf5, 0x3b, 0xde,
+ 0xd0, 0x81, 0xf1, 0xe5, 0x08, 0xe8, 0xe6, 0xdf, 0x03, 0x42, 0xff, 0x41, 0x14,
+ 0x15, 0xde, 0xc1, 0x01, 0xfc, 0x93, 0xe2, 0x02, 0xae, 0x55, 0xfc, 0xbf, 0xd9,
+ 0x0a, 0xff, 0x3a, 0xc5, 0xf3, 0xf5, 0x36, 0xeb, 0x25, 0x01, 0xd1, 0xeb, 0xcc,
+ 0xeb, 0x29, 0x73, 0x11, 0xd5, 0xed, 0x1f, 0x19, 0x07, 0xf5, 0xe3, 0x6e, 0xe2,
+ 0x0e, 0x09, 0x02, 0x32, 0xf7, 0x96, 0xdd, 0x2a, 0x34, 0x06, 0x25, 0x4a, 0xf6,
+ 0xef, 0xd7, 0x22, 0x1f, 0xe1, 0x15, 0x16, 0x05, 0x69, 0xe4, 0x10, 0x11, 0x5a,
+ 0x10, 0xd5, 0xf4, 0xce, 0xb4, 0xd1, 0x2f, 0xbf, 0x0f, 0x38, 0xfc, 0xbe, 0xf2,
+ 0xb4, 0xee, 0x99, 0xeb, 0x10, 0xf4, 0x25, 0xf9, 0x05, 0x04, 0xec, 0xff, 0x2b,
+ 0x4f, 0x16, 0xc3, 0xe7, 0xfb, 0xed, 0xf6, 0xe4, 0xfd, 0xbf, 0xf7, 0x1b, 0x43,
+ 0x11, 0xd2, 0x37, 0x49, 0xe6, 0x11, 0xd6, 0x10, 0xdc, 0xed, 0x21, 0xf2, 0xcd,
+ 0x14, 0x1f, 0x04, 0x2e, 0x02, 0xf3, 0xf4, 0x18, 0xe3, 0x0b, 0x36, 0xeb, 0xe5,
+ 0xec, 0xc3, 0x17, 0xac, 0xd1, 0xce, 0x99, 0xdd, 0x00, 0x0e, 0x33, 0xe1, 0x7c,
+ 0xff, 0x50, 0x19, 0x02, 0x3c, 0xe9, 0x0d, 0x59, 0xf5, 0x23, 0xd4, 0x2a, 0x37,
+ 0xf3, 0x7f, 0xb9, 0xef, 0x0d, 0xe0, 0x00, 0x37, 0x0f, 0xf7, 0x07, 0x1e, 0x43,
+ 0xb6, 0x15, 0x0e, 0xce, 0xf8, 0x24, 0x50, 0x00, 0x13, 0x99, 0xe1, 0x10, 0x17,
+ 0x44, 0xd7, 0x23, 0xe2, 0x65, 0xbe, 0xed, 0x0e, 0x30, 0x08, 0x59, 0xa0, 0x48,
+ 0xf4, 0x06, 0xf4, 0x9e, 0xb8, 0xfb, 0x09, 0xfb, 0x18, 0x2f, 0x1a, 0x24, 0xdc,
+ 0xa5, 0xd1, 0xda, 0xc6, 0xb2, 0xea, 0xd4, 0xc8, 0x2e, 0x3c, 0xd5, 0xf8, 0x1d,
+ 0xa2, 0xdb, 0x29, 0xf3, 0xb9, 0x95, 0x04, 0x09, 0xa0, 0x38, 0x14, 0xba, 0xfb,
+ 0xfc, 0x2a, 0xa7, 0xb9, 0xd0, 0x35, 0xfb, 0x47, 0xf4, 0xa3, 0xb4, 0x33, 0x9d,
+ 0xa5, 0x06, 0x55, 0xbc, 0xe3, 0x54, 0x43, 0x18, 0xff, 0xdd, 0xce, 0x3f, 0xca,
+ 0xa4, 0x3c, 0x1b, 0x3a, 0x09, 0xe9, 0xb6, 0xd9, 0x1b, 0xf9, 0x31, 0x99, 0x06,
+ 0x23, 0x59, 0x61, 0xef, 0xeb, 0x33, 0xb6, 0x8b, 0xd7, 0x96, 0x4e, 0xfe, 0x23,
+ 0x81, 0x09, 0xf5, 0x61, 0xb0, 0x2d, 0x21, 0x56, 0x54, 0xfe, 0xf9, 0x22, 0x32,
+ 0x63, 0xfa, 0xd4, 0x59, 0x53, 0x72, 0x26, 0xf9, 0xfa, 0x0a, 0xda, 0x08, 0xfa,
+ 0x4d, 0x52, 0x2e, 0xac, 0x10, 0xc9, 0x0a, 0x27, 0x14, 0xff, 0xcf, 0xf8, 0x10,
+ 0x18, 0x24, 0xa9, 0x1d, 0xe8, 0xf1, 0x22, 0x18, 0xde, 0xd3, 0xd7, 0x1b, 0xdd,
+ 0xf5, 0x22, 0xae, 0x17, 0xea, 0xf3, 0x00, 0xf5, 0xd4, 0x2a, 0xe3, 0xf7, 0x1c,
+ 0xf2, 0x29, 0x1f, 0x96, 0xc9, 0x08, 0x19, 0x1d, 0x40, 0xe4, 0x90, 0x0b, 0xff,
+ 0x5c, 0xe7, 0x81, 0x08, 0xf1, 0x09, 0xe4, 0xf3, 0x26, 0xe0, 0x1d, 0xee, 0xfa,
+ 0x41, 0x1e, 0x32, 0xcd, 0xec, 0x27, 0x2f, 0xe1, 0x6d, 0x0f, 0xac, 0xcf, 0x24,
+ 0xd4, 0x09, 0xde, 0xeb, 0x05, 0x22, 0x35, 0xb9, 0x36, 0xd9, 0x02, 0x02, 0x99,
+ 0x06, 0x0e, 0x41, 0xd1, 0xc6, 0xb8, 0xb5, 0x48, 0xed, 0x49, 0x3b, 0xea, 0xaa,
+ 0xff, 0x32, 0x20, 0xdc, 0xf9, 0xee, 0x4b, 0xe8, 0xcd, 0x07, 0xfd, 0xa3, 0xf7,
+ 0x7b, 0xea, 0x13, 0xe4, 0x0c, 0x0c, 0x58, 0x45, 0xf5, 0xf3, 0x39, 0x2b, 0xff,
+ 0xab, 0xdc, 0x16, 0x2f, 0xf2, 0x26, 0x49, 0xf7, 0x37, 0x00, 0xcc, 0xc6, 0xd3,
+ 0x09, 0xe9, 0x05, 0xea, 0x12, 0x49, 0x11, 0xe9, 0x17, 0x01, 0xdd, 0x13, 0xf3,
+ 0x0a, 0x84, 0xdf, 0x0a, 0x23, 0xc9, 0x22, 0xef, 0xd8, 0x12, 0xd5, 0x28, 0x07,
+ 0x01, 0xb6, 0xd9, 0xcf, 0x0a, 0xc6, 0xef, 0xe3, 0x11, 0xcb, 0xf6, 0x1c, 0x06,
+ 0xe7, 0xfd, 0xe9, 0x08, 0xfc, 0x58, 0xb7, 0x25, 0x0c, 0x6c, 0xc0, 0x25, 0xb6,
+ 0xef, 0x1c, 0x04, 0x5c, 0x1f, 0xef, 0xf4, 0xd1, 0xe1, 0x0e, 0xf9, 0xd1, 0xe1,
+ 0x2c, 0xff, 0x45, 0xe5, 0xf1, 0x4b, 0x01, 0xcb, 0x1e, 0xfd, 0xf0, 0x21, 0xcd,
+ 0x25, 0x26, 0x12, 0xe0, 0xfb, 0x20, 0xd5, 0xf1, 0xf7, 0x19, 0x0e, 0x18, 0x3b,
+ 0xde, 0xca, 0xaf, 0x41, 0x20, 0xbf, 0x93, 0x81, 0x09, 0xf9, 0xba, 0xe6, 0xff,
+ 0xf1, 0xb8, 0x09, 0x4b, 0xf3, 0xe7, 0xdd, 0xe6, 0x07, 0xfd, 0xf4, 0xf1, 0x60,
+ 0x63, 0xf6, 0x0c, 0xd1, 0x12, 0xf9, 0xf6, 0x01, 0xdf, 0xf0, 0x81, 0xd9, 0xfb,
+ 0xdd, 0x01, 0xbf, 0x47, 0x25, 0xdd, 0xd8, 0x84, 0x00, 0x1d, 0x26, 0x0f, 0xf4,
+ 0x3a, 0x26, 0xeb, 0x18, 0x02, 0xf6, 0xfd, 0xf3, 0x01, 0xf8, 0x24, 0xb8, 0xbf,
+ 0xf1, 0xdc, 0x23, 0xfb, 0x0b, 0xbb, 0x09, 0x48, 0x3b, 0xfc, 0x0d, 0x1b, 0x06,
+ 0x4d, 0xfe, 0xa7, 0xf6, 0x23, 0xf8, 0xb9, 0x4b, 0x02, 0x75, 0xf5, 0xf5, 0x16,
+ 0x06, 0x14, 0xcc, 0xf4, 0xfa, 0x7d, 0x03, 0xc3, 0x0e, 0x01, 0x13, 0x1a, 0xcd,
+ 0xed, 0x20, 0xef, 0x25, 0xa7, 0xf4, 0xea, 0x11, 0x55, 0xe6, 0x14, 0xe1, 0x09,
+ 0xe1, 0xdd, 0xfb, 0xc5, 0x62, 0x2a, 0xfb, 0xfa, 0xea, 0xfb, 0x24, 0xac, 0xec,
+ 0xd8, 0xe0, 0xf2, 0xea, 0xda, 0xda, 0xe2, 0x73, 0xc8, 0x0f, 0x96, 0xdb, 0xe4,
+ 0xc7, 0xd0, 0xf6, 0x47, 0xd4, 0x08, 0xbe, 0x5b, 0xe7, 0xfc, 0x2e, 0x43, 0x24,
+ 0xbb, 0x2d, 0xff, 0xe7, 0x3a, 0xf9, 0x06, 0xf7, 0xeb, 0xf4, 0xf3, 0xc3, 0xd2,
+ 0xe3, 0x0c, 0xd3, 0xe2, 0xee, 0x0a, 0x04, 0xef, 0xf6, 0x30, 0x26, 0x0f, 0xec,
+ 0xbb, 0xc8, 0x0a, 0xd0, 0x14, 0xe1, 0xf1, 0x27, 0x00, 0xe9, 0xe8, 0xdd, 0x01,
+ 0x20, 0xd8, 0x47, 0x16, 0xf0, 0xe6, 0x0a, 0xd6, 0x1b, 0x34, 0xe7, 0x26, 0x14,
+ 0xf6, 0xfe, 0x2d, 0xdc, 0xec, 0xdf, 0xed, 0xea, 0xea, 0x10, 0x30, 0x0a, 0xdb,
+ 0xe6, 0x35, 0x24, 0xf7, 0xf9, 0x44, 0xfd, 0x1b, 0xac, 0xc1, 0x2e, 0xc7, 0x15,
+ 0xd4, 0xd4, 0xd4, 0x1a, 0xeb, 0xe7, 0x21, 0x2f, 0xe6, 0x0c, 0xe8, 0x38, 0x3e,
+ 0xd9, 0x05, 0x38, 0xac, 0xf2, 0xe0, 0xeb, 0xd7, 0x0b, 0xf9, 0xfb, 0xf7, 0x08,
+ 0x02, 0x24, 0x10, 0x7f, 0xe9, 0xe1, 0x1c, 0x2b, 0x0f, 0x10, 0x05, 0xec, 0x4e,
+ 0xc7, 0xf6, 0xd4, 0xf6, 0x1e, 0xd8, 0x0a, 0xdc, 0x1b, 0xbb, 0xc6, 0xde, 0x1a,
+ 0xfe, 0x30, 0xae, 0x1b, 0x29, 0x53, 0x06, 0xed, 0xd9, 0x08, 0xf4, 0xd2, 0x1c,
+ 0x19, 0x14, 0x14, 0xc1, 0x20, 0x11, 0x14, 0x31, 0x00, 0x0c, 0x26, 0xe7, 0x1c,
+ 0xbf, 0x1a, 0xe5, 0xcf, 0xb5, 0xe9, 0x00, 0xec, 0x1d, 0xc0, 0x7f, 0x33, 0xd1,
+ 0xfb, 0x1b, 0x30, 0x02, 0xf5, 0x25, 0x00, 0xe9, 0xcd, 0x4a, 0x21, 0x16, 0xc2,
+ 0x49, 0xe2, 0xfc, 0xc4, 0x39, 0xbc, 0x11, 0xce, 0x4e, 0xf2, 0xff, 0xfe, 0x01,
+ 0xe9, 0x23, 0x30, 0xfa, 0x27, 0xd8, 0x24, 0xeb, 0x52, 0xd5, 0xec, 0xce, 0x09,
+ 0xcf, 0xe6, 0xe9, 0x12, 0xe8, 0xe0, 0x06, 0x0a, 0x46, 0xfe, 0x09, 0x29, 0xcf,
+ 0xc1, 0x10, 0x42, 0x27, 0xec, 0xf8, 0x30, 0x00, 0x21, 0x2b, 0x02, 0xc4, 0x21,
+ 0xbe, 0x2a, 0xfc, 0xe6, 0xf9, 0xf3, 0xdd, 0xf7, 0x05, 0xd6, 0xc8, 0xd8, 0x23,
+ 0x1b, 0xeb, 0x20, 0x11, 0x2f, 0x11, 0xe2, 0xf6, 0xe7, 0xb6, 0x26, 0xec, 0xfb,
+ 0x02, 0xef, 0x01, 0xec, 0x08, 0xed, 0xe3, 0xc8, 0x2c, 0x13, 0x37, 0x14, 0x3e,
+ 0xd3, 0xe0, 0x0b, 0xdc, 0x14, 0xee, 0xcf, 0x2b, 0xe4, 0xf2, 0xf3, 0xbc, 0xdd,
+ 0xfa, 0xfa, 0xd2, 0xf0, 0x26, 0xb7, 0x31, 0xd0, 0x07, 0x0e, 0x03, 0x4a, 0x43,
+ 0x0a, 0x1a, 0xf1, 0x25, 0xf4, 0x4b, 0x06, 0xef, 0x37, 0xf0, 0x13, 0x1c, 0xe2,
+ 0xe1, 0xd7, 0x1d, 0xe1, 0xe6, 0xf6, 0x44, 0xe9, 0xd1, 0x05, 0xf2, 0x36, 0x2e,
+ 0xfd, 0x34, 0x0a, 0xc2, 0x43, 0xd2, 0x15, 0xfc, 0x20, 0x0a, 0xd5, 0xe7, 0xcb,
+ 0xf6, 0x0f, 0xe5, 0xf8, 0xfd, 0x06, 0x0a, 0xdf, 0xe5, 0x14, 0x1b, 0x24, 0xb8,
+ 0x00, 0xc9, 0x16, 0x0b, 0x0b, 0xdd, 0x03, 0x34, 0xfa, 0x10, 0x2b, 0x08, 0x2a,
+ 0x5e, 0xdd, 0x7f, 0xf4, 0xe6, 0xcf, 0xd6, 0xfb, 0x06, 0xe3, 0xcb, 0x06, 0xf3,
+ 0x2b, 0x15, 0xee, 0xa3, 0xc6, 0xee, 0x06, 0xf2, 0x2f, 0xef, 0x20, 0xee, 0x0d,
+ 0x0f, 0x05, 0xf5, 0xf6, 0xe0, 0xcf, 0xde, 0xfc, 0x17, 0xea, 0xec, 0xd0, 0x17,
+ 0xf2, 0x1e, 0x02, 0x1c, 0xe8, 0x0a, 0x47, 0xd8, 0xdf, 0xed, 0xfb, 0xf1, 0xf4,
+ 0x0b, 0x3b, 0x08, 0xf0, 0x13, 0xf3, 0xe3, 0xcd, 0x3f, 0xc4, 0x15, 0x00, 0x7a,
+ 0x35, 0x05, 0x0a, 0xda, 0x09, 0xf3, 0x06, 0xfb, 0x1d, 0x23, 0xf8, 0xe1, 0xda,
+ 0xe6, 0xfd, 0x4b, 0x26, 0x20, 0x50, 0xe5, 0xf1, 0x30, 0xbf, 0xfd, 0xf3, 0x25,
+ 0xf3, 0xc1, 0x0a, 0x23, 0xb9, 0x51, 0x11, 0xde, 0xbf, 0x1f, 0x0c, 0x08, 0xf7,
+ 0x00, 0x1a, 0xe2, 0x0b, 0xe5, 0xed, 0xea, 0x10, 0xda, 0x0e, 0x16, 0xfa, 0xf7,
+ 0xf3, 0xfc, 0xa2, 0xde, 0xe8, 0x29, 0x44, 0xa0, 0x16, 0xcf, 0x81, 0x34, 0xf7,
+ 0xea, 0xf6, 0xe9, 0x3f, 0x30, 0x17, 0x1a, 0xe9, 0x06, 0xfc, 0xd4, 0xd6, 0xf8,
+ 0x30, 0x0c, 0x4c, 0xe9, 0x07, 0x02, 0xf8, 0xe4, 0xf5, 0xdd, 0xea, 0xfa, 0x1a,
+ 0xad, 0xbb, 0x41, 0x60, 0x0f, 0x31, 0x18, 0x43, 0xdd, 0x1f, 0x04, 0x0a, 0x1f,
+ 0x06, 0xb0, 0xd2, 0xbd, 0x38, 0x15, 0x1e, 0xfe, 0xf4, 0xc1, 0x27, 0xeb, 0xe8,
+ 0x05, 0x18, 0xea, 0x39, 0xf1, 0xdd, 0x44, 0xc6, 0xda, 0x12, 0xef, 0xe9, 0x36,
+ 0x0e, 0x1b, 0x23, 0x17, 0x07, 0xf9, 0xfd, 0x81, 0x28, 0x2e, 0x26, 0xf3, 0xae,
+ 0xf5, 0x19, 0x35, 0x2c, 0x1b, 0x05, 0xda, 0xd2, 0x0a, 0xe0, 0x0b, 0xb3, 0xf5,
+ 0xd6, 0xcd, 0xf1, 0x0f, 0xf9, 0xf8, 0xed, 0xb9, 0x22, 0x23, 0xbf, 0x19, 0x07,
+ 0xec, 0xd9, 0x06, 0xce, 0xbd, 0xfd, 0xdf, 0xfb, 0xdc, 0x03, 0xb6, 0xdd, 0xd3,
+ 0xb3, 0x01, 0xe4, 0x0f, 0x3c, 0xa9, 0xd8, 0xc8, 0x8f, 0x0c, 0x39, 0xce, 0x22,
+ 0x00, 0x1e, 0xb2, 0xf3, 0xec, 0x1f, 0xfb, 0x0b, 0xf8, 0x26, 0xfc, 0x47, 0x34,
+ 0x33, 0x08, 0x16, 0xe5, 0x0a, 0x05, 0xd4, 0xe5, 0xdd, 0xe9, 0x0d, 0xc7, 0xdf,
+ 0x11, 0xf9, 0x05, 0x21, 0x01, 0x27, 0xf3, 0xdb, 0xfa, 0xd4, 0x07, 0xc8, 0xd9,
+ 0xf8, 0x05, 0xd6, 0xdb, 0xf0, 0xbd, 0x21, 0xec, 0xfd, 0x04, 0x39, 0x4d, 0xc9,
+ 0x29, 0x7f, 0xea, 0xf1, 0xfb, 0xd0, 0xdb, 0x25, 0xda, 0x19, 0xd2, 0x0c, 0xec,
+ 0xa8, 0xe2, 0xf5, 0x13, 0xcc, 0x05, 0x0a, 0xa0, 0xee, 0xe4, 0x0a, 0x1e, 0x06,
+ 0x0c, 0xf1, 0xd0, 0xef, 0x02, 0xde, 0x30, 0x06, 0x03, 0x10, 0xda, 0x31, 0x74,
+ 0x21, 0xd1, 0xff, 0xe9, 0xf6, 0xd8, 0xf9, 0x25, 0x56, 0xf3, 0xe7, 0x06, 0x25,
+ 0x06, 0xf3, 0xf7, 0x03, 0xd6, 0x08, 0xeb, 0xf7, 0xea, 0xf0, 0x1d, 0x64, 0x0b,
+ 0xcf, 0xf5, 0x30, 0x48, 0xce, 0x2e, 0xc1, 0xe5, 0xd9, 0xf2, 0xdc, 0x3c, 0x0d,
+ 0xf3, 0x07, 0xfa, 0xf3, 0xc5, 0xc0, 0xd9, 0x11, 0xd3, 0x02, 0xe6, 0x32, 0xba,
+ 0x43, 0x31, 0x07, 0xfd, 0xc1, 0xed, 0xfe, 0xef, 0x43, 0xd7, 0x06, 0x52, 0xf8,
+ 0x2c, 0xf1, 0x51, 0x1a, 0xd8, 0x23, 0x03, 0x1e, 0x23, 0x21, 0xb8, 0xf7, 0x1e,
+ 0xf7, 0xff, 0x04, 0x28, 0xfc, 0xff, 0x14, 0x6c, 0x13, 0x1c, 0xbb, 0xca, 0x13,
+ 0x47, 0x19, 0x29, 0xff, 0xde, 0x1d, 0xfe, 0xee, 0xb6, 0x18, 0xc3, 0xf1, 0x1a,
+ 0xd5, 0x11, 0xc7, 0xd7, 0x2c, 0xc5, 0x27, 0x24, 0x07, 0x19, 0x02, 0xb3, 0xe0,
+ 0xfc, 0x0a, 0x3d, 0xc0, 0x13, 0x04, 0x37, 0xca, 0x1f, 0x02, 0x32, 0xd3, 0xdf,
+ 0x0b, 0xf7, 0x1c, 0xd1, 0x39, 0x14, 0xe4, 0xec, 0xf2, 0xef, 0x02, 0x12, 0x1a,
+ 0xf1, 0xce, 0x15, 0xe5, 0xef, 0xdd, 0x1b, 0x15, 0x26, 0x48, 0x1b, 0xd1, 0x28,
+ 0x1e, 0x4a, 0x38, 0xc6, 0x81, 0xb2, 0x42, 0x1c, 0xa6, 0x16, 0xd5, 0xee, 0xc5,
+ 0x00, 0xd8, 0x09, 0xda, 0x18, 0xde, 0xdb, 0xfa, 0xec, 0x34, 0xd2, 0x15, 0x34,
+ 0x0d, 0x61, 0x1b, 0xc2, 0xe0, 0xe2, 0xef, 0xec, 0xf4, 0x13, 0xe7, 0x13, 0xde,
+ 0xf3, 0x4d, 0xe5, 0xdf, 0x22, 0xde, 0x13, 0x40, 0x06, 0x1d, 0xe2, 0xf6, 0xad,
+ 0x6f, 0xaf, 0x23, 0x3f, 0xda, 0xf1, 0xfd, 0xf8, 0xae, 0xdd, 0xf9, 0xc1, 0x0a,
+ 0xfa, 0x42, 0x81, 0x23, 0xf9, 0xf8, 0x54, 0xcb, 0xbb, 0x21, 0xfa, 0xbd, 0xe8,
+ 0xca, 0x38, 0x51, 0xe0, 0xdd, 0x10, 0x69, 0xf0, 0x2b, 0x0d, 0x23, 0xf3, 0x0e,
+ 0xd3, 0xa8, 0xe9, 0x22, 0xf4, 0xec, 0x3b, 0x6b, 0x0e, 0xce, 0xfb, 0x50, 0xe1,
+ 0x1d, 0x60, 0x2d, 0x2f, 0x0d, 0x16, 0xe2, 0x67, 0xa3, 0x09, 0x2b, 0xed, 0x06,
+ 0x02, 0x7c, 0x29, 0xc7, 0xc6, 0x1a, 0xe6, 0x4e, 0xc6, 0x3a, 0xdc, 0xb9, 0x2e,
+ 0xaf, 0x31, 0x51, 0x94, 0x39, 0x12, 0xd6, 0x2a, 0x0d, 0xd9, 0xd8, 0x35, 0x3e,
+ 0x15, 0x26, 0x17, 0xd8, 0x33, 0x0e, 0x93, 0x76, 0x01, 0x01, 0xdf, 0x11, 0x07,
+ 0xda, 0xa0, 0xa9, 0x46, 0x36, 0x3f, 0xe2, 0xa4, 0xd2, 0x0a, 0xf9, 0xae, 0x0f,
+ 0xad, 0x09, 0x20, 0xec, 0x9c, 0x6a, 0x6e, 0xee, 0xba, 0x08, 0x47, 0xd2, 0x03,
+ 0xf2, 0xc0, 0x4f, 0x34, 0xfb, 0xa3, 0x62, 0x5a, 0xdf, 0xfd, 0x1e, 0xfe, 0xf5,
+ 0x6f, 0xe6, 0x12, 0x08, 0x30, 0x20, 0xbd, 0xcd, 0x0f, 0xe6, 0xde, 0x01, 0xad,
+ 0x1d, 0x62, 0xef, 0x20, 0x4c, 0x61, 0x10, 0xba, 0x2b, 0x19, 0x08, 0xcf, 0x50,
+ 0xf7, 0xdc, 0xc6, 0x4e, 0xe5, 0xee, 0x2b, 0xd7, 0x03, 0x1a, 0xf6, 0xe8, 0xe5,
+ 0xbd, 0x33, 0x1c, 0xe4, 0xf1, 0x95, 0xcd, 0xce, 0x58, 0x1b, 0x00, 0x42, 0x7f,
+ 0x84, 0x6e, 0xce, 0x0f, 0xbd, 0x20, 0xe9, 0x18, 0x1b, 0x1e, 0xfd, 0x14, 0x32,
+ 0x2b, 0xfd, 0xd3, 0x25, 0xe2, 0x13, 0xfb, 0x02, 0x57, 0xfd, 0x58, 0x20, 0xfc,
+ 0xf1, 0x9d, 0xfc, 0x02, 0xf5, 0xf4, 0xfc, 0xba, 0xcd, 0x77, 0xfe, 0x04, 0x7a,
+ 0xa9, 0x01, 0x19, 0xc0, 0xef, 0xeb, 0xd4, 0xe3, 0x19, 0x22, 0x54, 0xe5, 0xd7,
+ 0x06, 0xfe, 0xb5, 0xe7, 0xdc, 0xa0, 0x15, 0xc1, 0xfc, 0x23, 0xf5, 0xd9, 0x29,
+ 0x23, 0x47, 0xfe, 0x3c, 0x8c, 0xe8, 0xd6, 0xb7, 0xff, 0x04, 0xdb, 0xf9, 0xe3,
+ 0xe7, 0x20, 0x90, 0x10, 0xed, 0x11, 0xde, 0xff, 0xfc, 0xf6, 0xf1, 0x0c, 0xa8,
+ 0x6b, 0xc3, 0x12, 0x0f, 0x26, 0x1e, 0x07, 0x5b, 0x3f, 0xc4, 0xee, 0xf0, 0x40,
+ 0xdb, 0x7f, 0xba, 0x23, 0x5d, 0xac, 0xcf, 0x15, 0x42, 0x32, 0x0f, 0x51, 0x32,
+ 0x06, 0xc3, 0x23, 0xe3, 0xfa, 0x24, 0x2d, 0xf8, 0x35, 0xdf, 0x4c, 0x34, 0xb1,
+ 0x88, 0x08, 0x16, 0x2a, 0x3d, 0x15, 0x95, 0x3c, 0x4e, 0xe4, 0xdc, 0xb4, 0x1b,
+ 0xdb, 0xc0, 0x14, 0x5e, 0xd5, 0xe5, 0xc8, 0xb7, 0x0f, 0xe4, 0xdd, 0x40, 0x22,
+ 0xde, 0xfb, 0x1d, 0x38, 0xe5, 0xf7, 0xd4, 0xeb, 0xfe, 0x0d, 0xed, 0x63, 0x30,
+ 0x43, 0x5d, 0xd5, 0xf9, 0xe3, 0x09, 0xf5, 0xee, 0x13, 0x07, 0xd0, 0x03, 0xf3,
+ 0xe1, 0x48, 0x1f, 0x41, 0x29, 0xdf, 0x02, 0x1b, 0x1f, 0x0d, 0x10, 0xf1, 0xc2,
+ 0x00, 0x2a, 0x9b, 0x08, 0xcd, 0x30, 0x01, 0xd9, 0x06, 0x1b, 0x07, 0xee, 0xf3,
+ 0x06, 0x2d, 0x4a, 0xf4, 0xfd, 0x1b, 0x2f, 0xc9, 0x1b, 0xda, 0xc8, 0x19, 0x1b,
+ 0xcd, 0x19, 0xf9, 0x00, 0x13, 0xf5, 0xe7, 0x09, 0x22, 0x7f, 0x0d, 0xed, 0x11,
+ 0x71, 0x01, 0x1e, 0x02, 0x09, 0x08, 0x27, 0xe0, 0x4b, 0xec, 0xe8, 0x0a, 0x2c,
+ 0xe4, 0x2c, 0x00, 0xff, 0xf6, 0x20, 0x14, 0xe7, 0xcb, 0xc5, 0xf8, 0xf1, 0x04,
+ 0x26, 0x17, 0x18, 0xff, 0x10, 0xd1, 0x0d, 0x2b, 0xe8, 0x06, 0x19, 0xcf, 0xf3,
+ 0xe0, 0xc5, 0xcd, 0x31, 0x27, 0xe3, 0x52, 0x0c, 0x0f, 0xcf, 0x0a, 0x18, 0x20,
+ 0xe7, 0xf1, 0xa9, 0xdb, 0x13, 0xf4, 0x02, 0x16, 0xf2, 0xfb, 0x36, 0xea, 0xf9,
+ 0x2c, 0x1f, 0x13, 0x3e, 0x2a, 0x5f, 0xb2, 0x3e, 0xd9, 0xee, 0xdf, 0x1d, 0x32,
+ 0x2d, 0xf4, 0x30, 0x1b, 0xfc, 0xf1, 0xee, 0xca, 0xf9, 0x20, 0xb4, 0xfc, 0x18,
+ 0x3f, 0x4b, 0xb2, 0xa4, 0x17, 0xeb, 0x39, 0xc9, 0xe1, 0xef, 0x1a, 0x4e, 0xea,
+ 0x50, 0xf5, 0x00, 0x1f, 0x05, 0x20, 0x70, 0x08, 0x28, 0x08, 0xd1, 0xc0, 0xf1,
+ 0xfe, 0xc6, 0xbc, 0xdf, 0x1c, 0xca, 0x75, 0x42, 0x1f, 0x5a, 0xda, 0x44, 0x38,
+ 0x0f, 0xde, 0x81, 0x10, 0xea, 0x39, 0xec, 0xf5, 0x1b, 0xfc, 0x12, 0x2a, 0xdf,
+ 0xa4, 0xee, 0xf0, 0xed, 0xaa, 0xf3, 0xaf, 0xfc, 0x03, 0x7d, 0x17, 0xe2, 0x01,
+ 0xf2, 0x07, 0xcd, 0x14, 0x02, 0xc5, 0xf7, 0xaa, 0x21, 0xe9, 0x7e, 0xe0, 0xdd,
+ 0xf6, 0xec, 0xfa, 0x0a, 0x52, 0x15, 0x0a, 0xef, 0x3a, 0x33, 0xe1, 0xfa, 0x4f,
+ 0x28, 0x7b, 0xc6, 0x9f, 0xe6, 0x42, 0x18, 0x68, 0xdf, 0x0f, 0x5d, 0xef, 0xda,
+ 0x3d, 0x0f, 0xad, 0xb0, 0x40, 0xee, 0xbc, 0xcd, 0xdf, 0x09, 0x01, 0xdf, 0x54,
+ 0xe7, 0x18, 0x00, 0xd6, 0x26, 0xf7, 0x41, 0xc3, 0xa7, 0x0f, 0x0b, 0xc4, 0x02,
+ 0x13, 0x14, 0x2a, 0xc6, 0x5c, 0xf6, 0x33, 0xb5, 0x09, 0x22, 0x66, 0xbe, 0xdd,
+ 0x3e, 0xe8, 0x7a, 0xfc, 0xec, 0xbd, 0xb5, 0x23, 0x35, 0xd7, 0x20, 0x98, 0x2b,
+ 0x03, 0xe9, 0xef, 0x0e, 0x13, 0x0c, 0xcf, 0xb3, 0x26, 0x53, 0x0f, 0xca, 0x00,
+ 0x2c, 0xf6, 0x9b, 0x30, 0xf7, 0xfd, 0xa8, 0x4e, 0xb6, 0xe1, 0x49, 0x1b, 0x21,
+ 0x02, 0x29, 0xff, 0xe9, 0xc4, 0xc5, 0x20, 0x73, 0x3a, 0xd1, 0x56, 0x00, 0xc4,
+ 0x30, 0xcd, 0xc6, 0x18, 0xe8, 0x64, 0x6f, 0xd5, 0x22, 0xec, 0x17, 0x81, 0xff,
+ 0x06, 0xad, 0xa8, 0xe0, 0x04, 0xe1, 0xfd, 0xfc, 0x23, 0x46, 0x20, 0xb9, 0xe6,
+ 0xf5, 0x3b, 0x0d, 0x15, 0x2f, 0xfd, 0x0a, 0x43, 0xe4, 0x26, 0x12, 0x30, 0x07,
+ 0x36, 0x2d, 0x0e, 0xca, 0xf4, 0x22, 0xf7, 0x01, 0x2a, 0xf1, 0x25, 0xdf, 0x72,
+ 0x27, 0x27, 0x2d, 0x38, 0x41, 0xb9, 0xcb, 0xb3, 0xff, 0x1d, 0x09, 0x20, 0x23,
+ 0xdf, 0x29, 0xfe, 0x16, 0x20, 0xb1, 0x31, 0xfe, 0xf2, 0xe6, 0xf8, 0x1f, 0xf4,
+ 0xe8, 0xe1, 0xa7, 0xe4, 0x30, 0x12, 0xe1, 0xdf, 0xf5, 0x49, 0xf7, 0xe8, 0xf7,
+ 0x09, 0xc3, 0xf4, 0x5b, 0xf2, 0xb3, 0x90, 0xb9, 0xfe, 0x25, 0xe6, 0xff, 0xde,
+ 0x91, 0xcf, 0xe2, 0xfa, 0x7f, 0xeb, 0x15, 0xcf, 0x1d, 0xc7, 0x08, 0x24, 0xf2,
+ 0xd9, 0xe8, 0x19, 0xf2, 0xf5, 0x07, 0x18, 0xfc, 0x17, 0xfb, 0xfc, 0x1c, 0x1a,
+ 0x7b, 0xf0, 0x1d, 0x06, 0x10, 0x42, 0x3b, 0xdb, 0x09, 0xf2, 0xbc, 0x8c, 0x38,
+ 0xfa, 0xd4, 0x5c, 0x2e, 0xfc, 0x23, 0x13, 0x22, 0xfe, 0x24, 0xeb, 0x5a, 0xe1,
+ 0xe9, 0x0e, 0x81, 0xee, 0x63, 0xf3, 0xf7, 0xfe, 0xd6, 0x29, 0xec, 0x15, 0xe4,
+ 0x0e, 0xe7, 0xe1, 0xd0, 0xe2, 0xf1, 0xc8, 0x22, 0x29, 0xf3, 0x25, 0x39, 0x3a,
+ 0xfe, 0x1c, 0xdf, 0x05, 0x31, 0x12, 0x13, 0xc7, 0xea, 0xd5, 0x1e, 0xc8, 0xf2,
+ 0x14, 0xef, 0xd0, 0x26, 0x59, 0xb4, 0x1d, 0xf2, 0xeb, 0x07, 0xfe, 0x20, 0xf3,
+ 0xb6, 0x21, 0xac, 0xd0, 0xda, 0xe8, 0xfa, 0x3f, 0x10, 0xf7, 0x04, 0x1b, 0x40,
+ 0x11, 0x33, 0xeb, 0xfe, 0x25, 0xda, 0xbd, 0xe9, 0x22, 0xe0, 0x39, 0xf0, 0xb0,
+ 0xf1, 0x68, 0x15, 0x0b, 0xe2, 0x09, 0xc0, 0xac, 0x06, 0xdf, 0x13, 0xc9, 0xcb,
+ 0x36, 0xe1, 0x22, 0xde, 0x0d, 0x25, 0x1d, 0xf7, 0x07, 0xcf, 0x39, 0x47, 0x1f,
+ 0x7b, 0x2f, 0xf9, 0x4a, 0xea, 0x1b, 0x14, 0x11, 0xef, 0x10, 0x27, 0x07, 0x0a,
+ 0xec, 0x33, 0x07, 0x1a, 0xed, 0x32, 0xff, 0x28, 0xe0, 0xe1, 0xfe, 0xe8, 0x11,
+ 0xdf, 0x28, 0xba, 0x10, 0x20, 0xb6, 0xfb, 0x0a, 0xf3, 0x00, 0xe2, 0x0d, 0xfb,
+ 0xf0, 0xda, 0xe8, 0x15, 0xe1, 0x2d, 0xdb, 0x27, 0xfe, 0xe2, 0xfb, 0xfb, 0xcd,
+ 0x0a, 0x0d, 0xe2, 0x1a, 0xfd, 0xf0, 0x42, 0x29, 0x03, 0xe9, 0x0d, 0xf7, 0xf3,
+ 0xed, 0xf0, 0xeb, 0x16, 0xf0, 0xde, 0x18, 0x0b, 0x15, 0xed, 0x54, 0xbc, 0x07,
+ 0xe1, 0xff, 0xf9, 0x14, 0xf9, 0xe1, 0xf3, 0xfe, 0xdd, 0x00, 0xe8, 0xe4, 0xe0,
+ 0xe6, 0x0a, 0xcc, 0x01, 0xd0, 0xe6, 0xd7, 0x0b, 0xe4, 0x02, 0x40, 0x2d, 0xcb,
+ 0xe4, 0x15, 0xd8, 0xfb, 0xf9, 0xf2, 0x10, 0xd4, 0xef, 0x18, 0xcd, 0xcd, 0xda,
+ 0x7f, 0xfe, 0x05, 0x2b, 0xea, 0xf7, 0xe6, 0x0e, 0x2d, 0xed, 0x01, 0xd4, 0xfa,
+ 0xe5, 0x02, 0x07, 0x29, 0x03, 0xf7, 0x1b, 0x1a, 0x06, 0xdf, 0x27, 0xef, 0xec,
+ 0xdf, 0x26, 0x03, 0xf5, 0xee, 0xfc, 0xda, 0xd2, 0xf9, 0x0a, 0x4a, 0xf7, 0xcc,
+ 0x63, 0x39, 0x36, 0xcb, 0x2c, 0x05, 0xdd, 0x36, 0xe4, 0xbd, 0xdc, 0xb2, 0x0a,
+ 0xc5, 0xb9, 0x17, 0x7f, 0x02, 0xd4, 0xf7, 0x07, 0x19, 0x3d, 0x0e, 0xc6, 0xc8,
+ 0xcd, 0xc9, 0x06, 0xe3, 0xb2, 0xac, 0xd3, 0x25, 0xdb, 0xfb, 0x21, 0x33, 0xe9,
+ 0x30, 0x8c, 0x21, 0xc4, 0xbc, 0xa1, 0x24, 0xaa, 0xc3, 0x06, 0xec, 0xe3, 0x36,
+ 0x32, 0xa2, 0x62, 0xf9, 0xa2, 0x17, 0x25, 0x0e, 0xee, 0x06, 0x32, 0xdb, 0xfd,
+ 0x00, 0x77, 0xf4, 0xc2, 0x1c, 0x47, 0xee, 0x06, 0xb0, 0x4a, 0xaf, 0xe8, 0x03,
+ 0xc2, 0x1f, 0xc9, 0xe7, 0xd9, 0xea, 0xf7, 0x00, 0xe5, 0xc7, 0x10, 0x39, 0x6c,
+ 0xd7, 0x19, 0xf8, 0x0d, 0x12, 0xd1, 0x0d, 0x2b, 0x01, 0xfe, 0x50, 0xc4, 0xb5,
+ 0xe8, 0x06, 0x0c, 0xe7, 0x38, 0x77, 0xe9, 0xec, 0x0e, 0x0c, 0xf0, 0xff, 0xef,
+ 0x02, 0x0b, 0x05, 0xa3, 0x27, 0xc5, 0x2a, 0x20, 0x14, 0xed, 0x26, 0xbf, 0x20,
+ 0x04, 0xd0, 0x19, 0x30, 0x06, 0x2e, 0x43, 0x1a, 0xe5, 0xef, 0xd5, 0xf2, 0xe7,
+ 0xf4, 0xc4, 0x24, 0xee, 0x4b, 0xf1, 0x2d, 0x00, 0xe4, 0xe9, 0x16, 0x3c, 0x34,
+ 0x1a, 0x9d, 0xf4, 0xe1, 0xc8, 0xf9, 0x38, 0x0d, 0xff, 0x26, 0x10, 0x24, 0xf9,
+ 0x97, 0xa9, 0x3c, 0x34, 0xd8, 0xcd, 0xf8, 0x21, 0x0c, 0xc9, 0xe8, 0x07, 0xc2,
+ 0xfc, 0x3c, 0xb3, 0xe1, 0xdc, 0x13, 0xed, 0xa4, 0x59, 0xe6, 0x11, 0xfa, 0x22,
+ 0xd5, 0x0c, 0x1d, 0x27, 0x1e, 0x25, 0xb9, 0x03, 0xe8, 0xfe, 0x36, 0xf1, 0xd9,
+ 0x3f, 0x1d, 0xe5, 0x32, 0xca, 0xf7, 0x0d, 0x28, 0x37, 0xe3, 0xf2, 0xf3, 0xef,
+ 0xe9, 0xf8, 0xfa, 0x22, 0xd9, 0x5f, 0x06, 0x55, 0xf8, 0xd3, 0x05, 0x17, 0x37,
+ 0x72, 0xf6, 0xb3, 0x12, 0x2b, 0x06, 0xd3, 0xee, 0x17, 0x13, 0x3b, 0x29, 0x81,
+ 0x87, 0xe5, 0x40, 0x4c, 0x06, 0xd2, 0x3f, 0x7f, 0x0b, 0x4c, 0x48, 0x3e, 0xc6,
+ 0xf4, 0x36, 0xc2, 0xde, 0x28, 0x02, 0x2d, 0xef, 0x08, 0x06, 0x27, 0x48, 0x62,
+ 0x19, 0x3c, 0x0f, 0xe7, 0x10, 0x1f, 0xd4, 0xcb, 0x87, 0xff, 0xd0, 0xfb, 0xe4,
+ 0xfd, 0x13, 0x21, 0xff, 0xcb, 0x1f, 0xe4, 0x4e, 0x0d, 0x18, 0xf8, 0x6b, 0x30,
+ 0xeb, 0xfe, 0x35, 0x34, 0xd3, 0x33, 0xe3, 0xb8, 0x57, 0xd8, 0xee, 0xc0, 0xbd,
+ 0xa8, 0xea, 0xfd, 0xc5, 0x02, 0x1b, 0xda, 0x61, 0xf2, 0xe5, 0xf7, 0x15, 0x05,
+ 0x13, 0xda, 0xda, 0xc0, 0x06, 0xaf, 0x1c, 0xd7, 0xd0, 0x58, 0x45, 0x2e, 0xdd,
+ 0xfa, 0xd6, 0x5b, 0xec, 0xbd, 0x14, 0xc5, 0x26, 0xd7, 0x18, 0x0c, 0x19, 0xba,
+ 0xf1, 0x08, 0x13, 0x22, 0x1c, 0xda, 0x68, 0x44, 0x0d, 0x30, 0x2c, 0xf3, 0xdc,
+ 0x4a, 0x19, 0x1d, 0x2d, 0x1c, 0x21, 0x30, 0x00, 0xf3, 0x1f, 0x01, 0xed, 0xea,
+ 0xc2, 0x56, 0xe7, 0xe6, 0xce, 0xf1, 0xfc, 0x15, 0x19, 0x7f, 0x9a, 0x9c, 0xa4,
+ 0x47, 0xf6, 0x08, 0xe9, 0x8c, 0x11, 0xaa, 0x12, 0xcc, 0x22, 0xea, 0xb8, 0xe5,
+ 0xea, 0x16, 0x01, 0xdf, 0x9f, 0x96, 0xfd, 0x46, 0x22, 0x0e, 0xc1, 0x11, 0x04,
+ 0xa9, 0xf6, 0xc7, 0xf0, 0x04, 0x4e, 0xea, 0xdb, 0x8e, 0x39, 0x05, 0xdb, 0xe4,
+ 0xf4, 0x8d, 0xd7, 0x15, 0x27, 0xb0, 0x18, 0xf3, 0xe0, 0xd8, 0xf1, 0x3b, 0x1b,
+ 0x17, 0x5c, 0xd4, 0x31, 0x13, 0xc9, 0x08, 0x00, 0xbf, 0x2a, 0x5e, 0x4e, 0x03,
+ 0x1b, 0xe1, 0x32, 0x20, 0xfa, 0x38, 0x2e, 0x26, 0x4d, 0xe0, 0x0c, 0x28, 0x00,
+ 0x54, 0x99, 0xd7, 0x10, 0x2f, 0x27, 0xef, 0x0c, 0x14, 0xd4, 0xa5, 0x45, 0x18,
+ 0xf1, 0x10, 0xec, 0x43, 0x9f, 0xdc, 0xe7, 0xce, 0xbb, 0x13, 0x32, 0xdd, 0x29,
+ 0x91, 0x3f, 0xdc, 0x02, 0x02, 0xf8, 0xcf, 0x2b, 0x47, 0xa4, 0x48, 0xdb, 0x29,
+ 0x2b, 0xe8, 0xfd, 0x08, 0x0d, 0xf6, 0x4a, 0x02, 0xf4, 0x13, 0x28, 0x17, 0xd9,
+ 0x2f, 0x0b, 0x3a, 0xd5, 0x0e, 0xee, 0x00, 0x0a, 0x0e, 0x26, 0xf8, 0xf1, 0x1a,
+ 0x0a, 0x13, 0x53, 0x01, 0xda, 0xac, 0x50, 0xfb, 0xe0, 0xe0, 0x14, 0xf8, 0x02,
+ 0xdd, 0xe6, 0x10, 0x3f, 0xc6, 0xff, 0x33, 0x0f, 0x32, 0xf7, 0x2f, 0x09, 0x69,
+ 0xeb, 0xd9, 0xe3, 0x36, 0xec, 0xeb, 0x25, 0x11, 0xed, 0xdc, 0x3d, 0x0c, 0x02,
+ 0x41, 0xd1, 0xe4, 0xff, 0xc5, 0x1a, 0xf3, 0x08, 0x14, 0xd9, 0x7f, 0xee, 0x12,
+ 0xda, 0x2e, 0xd4, 0xfd, 0xe2, 0xcf, 0xe9, 0xc1, 0x34, 0xcc, 0xe1, 0x1d, 0x15,
+ 0x24, 0xcf, 0x22, 0x5b, 0xa4, 0x09, 0x11, 0xca, 0xd6, 0xdf, 0xea, 0x18, 0x0e,
+ 0x58, 0xce, 0x0b, 0x1c, 0x02, 0x08, 0xce, 0x26, 0xca, 0x27, 0x45, 0xce, 0x2b,
+ 0x13, 0xcf, 0xea, 0xdf, 0x5f, 0x54, 0xcf, 0xe5, 0x88, 0x0d, 0x13, 0xfb, 0xf6,
+ 0xcf, 0xe3, 0xf1, 0xfb, 0xd1, 0x03, 0x21, 0x41, 0xd5, 0x09, 0x0c, 0xd7, 0xda,
+ 0x0e, 0xcb, 0xf8, 0xe4, 0xe8, 0x02, 0xee, 0xbc, 0x2b, 0x08, 0x2c, 0xf8, 0xdc,
+ 0xdb, 0xcc, 0x2f, 0x14, 0x19, 0x3f, 0x14, 0x3f, 0xe1, 0xde, 0xfc, 0x0c, 0xc7,
+ 0xea, 0x30, 0x07, 0xfc, 0xe4, 0x18, 0xe9, 0xe8, 0xdb, 0xf4, 0xae, 0xeb, 0xf9,
+ 0x3b, 0xb2, 0xf2, 0xe4, 0xf9, 0x01, 0x28, 0xd9, 0x49, 0x03, 0xc5, 0xdb, 0xd5,
+ 0x1e, 0x1b, 0x10, 0xfe, 0xea, 0xef, 0x23, 0x40, 0x45, 0x13, 0xe3, 0x27, 0xeb,
+ 0x29, 0x1e, 0xfe, 0xf8, 0x4f, 0x1a, 0x2f, 0xea, 0x0b, 0x09, 0x1f, 0x10, 0xda,
+ 0xed, 0xe7, 0xfa, 0xee, 0x3e, 0xee, 0xcd, 0x10, 0xed, 0x51, 0xe6, 0x1b, 0x21,
+ 0xca, 0x1a, 0x7f, 0xed, 0x1b, 0xbd, 0xfc, 0x28, 0xf2, 0xe2, 0x2f, 0xec, 0xd1,
+ 0x2b, 0xf8, 0xdc, 0x6a, 0x16, 0x35, 0x44, 0x42, 0xf9, 0x24, 0xf3, 0xf1, 0xb8,
+ 0x39, 0xd9, 0xeb, 0xfe, 0x46, 0x0b, 0xd4, 0xf6, 0xf8, 0x3c, 0xf8, 0x27, 0x22,
+ 0x16, 0x1b, 0x10, 0x37, 0x28, 0xfa, 0x02, 0x05, 0xc5, 0xdd, 0x27, 0xdb, 0x46,
+ 0xe4, 0xb9, 0x0d, 0xfc, 0x0b, 0xc8, 0xf6, 0xeb, 0xf9, 0x0b, 0x16, 0xfc, 0xf7,
+ 0xd6, 0xd3, 0x00, 0xdc, 0x11, 0xe3, 0x35, 0xf9, 0xf1, 0xea, 0xde, 0x11, 0x15,
+ 0x5b, 0x29, 0xeb, 0xeb, 0xfe, 0x0e, 0xcf, 0xe1, 0xe6, 0xf7, 0xe7, 0xf7, 0xda,
+ 0x0a, 0xed, 0x16, 0x66, 0xcc, 0xd2, 0x24, 0xf8, 0x35, 0x10, 0xc9, 0xdb, 0xe3,
+ 0x26, 0x1d, 0xdc, 0xd7, 0x1c, 0x26, 0x58, 0x0d, 0x0f, 0x15, 0x41, 0x02, 0x09,
+ 0xc6, 0x15, 0x1e, 0xff, 0xf8, 0xe2, 0x19, 0xdd, 0xeb, 0x12, 0x81, 0x1b, 0xe6,
+ 0x41, 0xe2, 0x1f, 0xe5, 0xfc, 0xa1, 0xe8, 0xe5, 0x06, 0x1c, 0xd8, 0xf7, 0x23,
+ 0x30, 0xd3, 0xd1, 0x5c, 0xa7, 0xcb, 0x35, 0x01, 0x07, 0x67, 0xe0, 0x15, 0x1b,
+ 0x0f, 0xf9, 0x17, 0x4b, 0xe9, 0xfc, 0xf9, 0xad, 0xe6, 0x0d, 0x12, 0x07, 0x23,
+ 0xd3, 0x0d, 0xef, 0x0a, 0x42, 0xff, 0xe6, 0x17, 0xe4, 0x19, 0xd5, 0x24, 0x43,
+ 0xde, 0x4a, 0xc7, 0xca, 0xde, 0xeb, 0x28, 0xbe, 0x27, 0x10, 0xe3, 0x0e, 0x0c,
+ 0xc6, 0xaf, 0x34, 0xc5, 0xc5, 0xa9, 0xdd, 0xde, 0x10, 0xfc, 0xdd, 0x3a, 0x20,
+ 0x2e, 0x05, 0xbb, 0xe3, 0xfe, 0xca, 0x10, 0x09, 0x4e, 0x0b, 0x7f, 0xf5, 0xf3,
+ 0x08, 0x0b, 0x27, 0xc9, 0xdb, 0x1d, 0xe0, 0xd7, 0xf4, 0xfb, 0x0c, 0x05, 0xf7,
+ 0x1f, 0xe5, 0xce, 0xd9, 0xda, 0x4a, 0xd6, 0xd6, 0x4e, 0x88, 0x31, 0xee, 0xfb,
+ 0xd5, 0x36, 0xc7, 0x1d, 0xee, 0xef, 0x08, 0xdd, 0x34, 0x34, 0x31, 0xce, 0xf1,
+ 0xda, 0xdf, 0x0e, 0xda, 0xd6, 0x18, 0xdf, 0xdf, 0xfd, 0x1b, 0xde, 0xfc, 0xde,
+ 0xc0, 0x9d, 0xfe, 0xde, 0xf2, 0x1c, 0x04, 0xbf, 0x0a, 0x05, 0x8b, 0x11, 0xb2,
+ 0x1e, 0x1d, 0xa5, 0xea, 0x1d, 0xe9, 0xe4, 0x19, 0xcc, 0x13, 0xcb, 0x19, 0x0f,
+ 0xf1, 0xb0, 0xcf, 0xe6, 0xec, 0x01, 0xdb, 0x11, 0xf4, 0x3e, 0x33, 0x16, 0xcc,
+ 0x1a, 0xf2, 0xff, 0xa5, 0xef, 0xce, 0x13, 0x12, 0x18, 0x12, 0xf0, 0xe4, 0xf3,
+ 0xea, 0x06, 0xbf, 0xc4, 0xf9, 0x33, 0xc1, 0x06, 0x1f, 0xe1, 0xd0, 0x27, 0xef,
+ 0xfb, 0xfa, 0xdb, 0x06, 0x2b, 0xff, 0xe2, 0xbe, 0x17, 0xdb, 0x1b, 0x09, 0xf7,
+ 0x2d, 0x0d, 0x4a, 0x2c, 0x0c, 0x33, 0xfd, 0x03, 0x01, 0xe1, 0xf4, 0x4b, 0x05,
+ 0x0b, 0xcf, 0x36, 0x33, 0xed, 0x26, 0x09, 0xe1, 0x13, 0x09, 0x04, 0x35, 0x17,
+ 0xf2, 0x35, 0xd3, 0xfe, 0x2b, 0xdc, 0x56, 0x3a, 0xdc, 0x1c, 0xd2, 0x2f, 0x01,
+ 0xe4, 0x9f, 0x36, 0x71, 0xd5, 0x30, 0xe3, 0x12, 0x44, 0x25, 0xec, 0x81, 0xfb,
+ 0x4a, 0x08, 0xe3, 0x4a, 0x22, 0xd4, 0x37, 0xd4, 0x37, 0x1f, 0x37, 0xd1, 0x07,
+ 0x1d, 0xdd, 0x06, 0xfb, 0x10, 0x0c, 0xd8, 0x74, 0x07, 0xa3, 0xe4, 0x31, 0xe8,
+ 0xd0, 0xce, 0x21, 0x1b, 0xea, 0xb1, 0x0b, 0x5e, 0xef, 0x1c, 0x3d, 0xab, 0x42,
+ 0xfe, 0xf0, 0x43, 0x02, 0xd9, 0x3e, 0xe1, 0x36, 0x08, 0x89, 0x0a, 0xeb, 0xf9,
+ 0xdb, 0x3d, 0xca, 0xfa, 0x15, 0xed, 0x31, 0xab, 0xef, 0x41, 0xe8, 0x1a, 0xb3,
+ 0x4d, 0x18, 0x25, 0x39, 0x2d, 0x3e, 0xd9, 0xf9, 0x69, 0xd5, 0x30, 0x44, 0x0c,
+ 0x12, 0x31, 0x19, 0x51, 0x4b, 0x41, 0x26, 0x09, 0x38, 0x09, 0xcc, 0xe1, 0xed,
+ 0xd2, 0xf5, 0xe1, 0xe5, 0x0f, 0x0b, 0x04, 0xe0, 0xcc, 0xbe, 0x3b, 0x40, 0x18,
+ 0xfa, 0x10, 0xde, 0xf8, 0x2b, 0x81, 0xf7, 0x16, 0x87, 0x31, 0x47, 0x23, 0x38,
+ 0x12, 0x69, 0x5b, 0xd9, 0xff, 0xe7, 0xf3, 0xcb, 0x63, 0xfb, 0x48, 0x17, 0xfc,
+ 0x06, 0xf2, 0x15, 0xde, 0x20, 0xc8, 0x03, 0xd8, 0xe7, 0xfe, 0x31, 0xd3, 0xa7,
+ 0x0d, 0xf3, 0x1c, 0xf4, 0x7e, 0xd6, 0x28, 0x35, 0x13, 0x23, 0x0b, 0x00, 0xd9,
+ 0x09, 0x1d, 0xe0, 0x81, 0xb9, 0x45, 0xd1, 0x05, 0xe7, 0x32, 0xe5, 0x5e, 0x76,
+ 0xd4, 0x1a, 0x05, 0xfb, 0xef, 0xe5, 0xd3, 0x04, 0xbe, 0xea, 0xd3, 0xd7, 0xcd,
+ 0x43, 0xad, 0x0f, 0x0e, 0xf2, 0xed, 0x5c, 0x0a, 0x27, 0xe7, 0x08, 0xa2, 0x1f,
+ 0x18, 0x13, 0x12, 0x1d, 0xcc, 0x15, 0x12, 0xbc, 0xf5, 0xc1, 0x08, 0x00, 0x07,
+ 0xc9, 0xd6, 0xda, 0xf6, 0xcf, 0x2a, 0x14, 0xe2, 0xf8, 0xad, 0x37, 0xee, 0xfc,
+ 0xdd, 0xdb, 0x2b, 0x0f, 0x07, 0xf7, 0xdb, 0x26, 0xf8, 0x28, 0xf9, 0x1d, 0xf3,
+ 0x30, 0xed, 0x75, 0xff, 0xf7, 0x29, 0xf8, 0x16, 0x64, 0x15, 0xe1, 0xf9, 0x09,
+ 0xd9, 0xb8, 0xd9, 0xed, 0x47, 0xd6, 0xdd, 0x2c, 0x1c, 0xca, 0xe8, 0x94, 0x37,
+ 0x04, 0x20, 0x7f, 0x3d, 0x60, 0xfa, 0x1a, 0xdf, 0xc4, 0x1e, 0xf5, 0x02, 0xee,
+ 0x22, 0x2b, 0xfe, 0x15, 0xcf, 0x0f, 0x51, 0xfd, 0xf7, 0xdc, 0xd3, 0xf3, 0xf0,
+ 0xf4, 0xd8, 0xb6, 0xd2, 0x01, 0xed, 0x17, 0x1b, 0xdf, 0xf7, 0xc6, 0xf0, 0xd0,
+ 0x06, 0xdf, 0xd0, 0xd1, 0x22, 0x1c, 0x08, 0x28, 0x08, 0x20, 0xff, 0x64, 0x1b,
+ 0xa8, 0x05, 0x44, 0xdf, 0xe6, 0xca, 0xed, 0x08, 0x1f, 0xd7, 0x21, 0xff, 0xb5,
+ 0x6a, 0xa8, 0x45, 0x15, 0x06, 0x46, 0xa7, 0xe2, 0x10, 0xfa, 0x0e, 0xfe, 0xc2,
+ 0x27, 0xc3, 0x21, 0xd2, 0xef, 0x13, 0xa9, 0xed, 0x05, 0xac, 0x2d, 0xf4, 0x16,
+ 0xdc, 0xae, 0x3b, 0x15, 0xdf, 0xdc, 0xcc, 0x19, 0xfa, 0xfd, 0x21, 0xb0, 0xe3,
+ 0xe3, 0x46, 0xbd, 0xf8, 0xae, 0xd8, 0xed, 0x1f, 0x5b, 0xe4, 0xdc, 0x26, 0xff,
+ 0x01, 0xdb, 0x4f, 0x2d, 0x4c, 0xe1, 0xf9, 0xcc, 0xef, 0xbc, 0xb1, 0x0a, 0x20,
+ 0x0e, 0xef, 0x23, 0x18, 0x26, 0xaa, 0xea, 0xce, 0x0b, 0xc3, 0xb3, 0xf9, 0xf0,
+ 0xe3, 0xf4, 0xf0, 0xf9, 0xf2, 0x35, 0xda, 0xe8, 0x1b, 0xe0, 0xbc, 0x1e, 0xf2,
+ 0xbe, 0x1a, 0x28, 0x07, 0x10, 0xfb, 0xca, 0xe5, 0x19, 0xe9, 0x1f, 0x07, 0x1e,
+ 0xee, 0x58, 0xde, 0x05, 0xfe, 0xd2, 0xc1, 0xfc, 0x38, 0x2f, 0xdb, 0x09, 0x37,
+ 0xea, 0xd2, 0x23, 0x38, 0xe3, 0xde, 0xbe, 0x24, 0xd3, 0x06, 0x33, 0xda, 0xea,
+ 0xea, 0x1e, 0x2a, 0x23, 0x38, 0x1c, 0x13, 0x10, 0x24, 0xed, 0x7f, 0x01, 0xb5,
+ 0xad, 0xe0, 0x03, 0x04, 0xb3, 0xf4, 0xfe, 0xfe, 0x1e, 0xb9, 0xe3, 0xd2, 0x15,
+ 0xfe, 0x22, 0xf5, 0x26, 0x71, 0xe5, 0xa6, 0x0f, 0x14, 0x6f, 0xe2, 0xca, 0xbb,
+ 0x10, 0x97, 0xed, 0xea, 0x3f, 0xcf, 0x3b, 0xe6, 0xbe, 0xdf, 0x10, 0xbc, 0xa9,
+ 0x15, 0xea, 0x20, 0x09, 0x30, 0x95, 0x2f, 0xa0, 0x27, 0x17, 0xb8, 0xd6, 0x2c,
+ 0x25, 0x3f, 0xec, 0xb4, 0x76, 0xf3, 0xf9, 0x36, 0x45, 0x0d, 0xc6, 0x55, 0x39,
+ 0x3b, 0xe9, 0x13, 0x20, 0xa0, 0x36, 0xdc, 0x07, 0x26, 0xb2, 0xcc, 0x81, 0x02,
+ 0xba, 0x24, 0xc5, 0xf2, 0x01, 0xdf, 0xc9, 0x5f, 0x26, 0x04, 0x18, 0x2f, 0xdb,
+ 0x27, 0x2c, 0x53, 0xc1, 0x9a, 0xe2, 0x65, 0xcd, 0x0b, 0xd8, 0xbe, 0x15, 0x41,
+ 0x35, 0x24, 0x36, 0xf2, 0xb1, 0x07, 0xfc, 0xfb, 0x44, 0x58, 0x3c, 0x2a, 0x24,
+ 0xf4, 0xd9, 0xe8, 0xd1, 0xb5, 0x28, 0xed, 0xcf, 0xb6, 0xc6, 0xd4, 0x09, 0x09,
+ 0xdd, 0x0e, 0xc5, 0xeb, 0xf5, 0x17, 0xfe, 0xbf, 0x25, 0xc4, 0x15, 0x00, 0x3c,
+ 0xf8, 0xe4, 0xea, 0x16, 0xe6, 0xf7, 0xfd, 0xb1, 0x19, 0xe1, 0xf2, 0xfd, 0xcc,
+ 0x33, 0x18, 0x5e, 0x00, 0xc1, 0xfe, 0x51, 0x1c, 0x5b, 0x0e, 0xde, 0x05, 0xe5,
+ 0xef, 0xee, 0xef, 0xbe, 0x5b, 0xf2, 0xbb, 0xb6, 0x0d, 0x20, 0xef, 0xd9, 0x1a,
+ 0x50, 0x04, 0x32, 0xe8, 0xf6, 0x04, 0xe9, 0x12, 0xd0, 0xf7, 0x20, 0xe6, 0xd9,
+ 0xb7, 0xe4, 0xd6, 0xc9, 0x4a, 0x0e, 0x4f, 0xbf, 0xf1, 0x19, 0x2e, 0x5b, 0xbe,
+ 0xec, 0xac, 0x2a, 0x19, 0xb3, 0xef, 0x21, 0xe0, 0x1a, 0xf0, 0x33, 0x16, 0x12,
+ 0xe1, 0xe0, 0xeb, 0xec, 0xd2, 0xdf, 0xf3, 0xb0, 0x2e, 0x2a, 0x53, 0xef, 0xf5,
+ 0x1c, 0x2b, 0xbd, 0x8a, 0xea, 0x2c, 0xd0, 0x24, 0x27, 0xef, 0x1e, 0xf9, 0x81,
+ 0xcf, 0x00, 0x3b, 0x0d, 0xfe, 0x20, 0x23, 0xf0, 0x0e, 0x1a, 0x2b, 0x02, 0xdc,
+ 0x46, 0xcb, 0xf4, 0x1e, 0xfb, 0x1e, 0xdf, 0x6c, 0xd3, 0xe8, 0xfd, 0x06, 0x53,
+ 0x0d, 0x2f, 0x26, 0x11, 0x22, 0xc0, 0xcf, 0x7e, 0xff, 0xc4, 0xfe, 0x14, 0xf9,
+ 0x06, 0x35, 0xed, 0xd5, 0x3e, 0xdf, 0xf9, 0xe9, 0x0d, 0xe6, 0x36, 0xa0, 0xe2,
+ 0x24, 0xc9, 0x25, 0xab, 0xf7, 0xec, 0x15, 0x33, 0x98, 0xd7, 0x22, 0xb0, 0xdd,
+ 0x5d, 0x1f, 0xda, 0x01, 0xe5, 0x0d, 0xe7, 0xdf, 0xee, 0x9c, 0x33, 0xc4, 0xf0,
+ 0xfc, 0x3d, 0x1d, 0xea, 0x1b, 0x2c, 0xcf, 0x37, 0x32, 0xdc, 0xc2, 0x0c, 0xc0,
+ 0x53, 0x0b, 0xc8, 0xd6, 0x2f, 0xeb, 0xfc, 0xb7, 0x1e, 0x26, 0xaf, 0x25, 0x0e,
+ 0x2b, 0x05, 0x2f, 0x05, 0x20, 0x93, 0x0c, 0xd1, 0xa7, 0x0f, 0x6e, 0xf2, 0x01,
+ 0xc1, 0x32, 0xdd, 0x00, 0xea, 0xef, 0xcc, 0xc7, 0xf8, 0xec, 0xa3, 0x25, 0x0a,
+ 0xb6, 0xb1, 0x00, 0x26, 0xa6, 0x22, 0x34, 0x11, 0x07, 0x1b, 0xd1, 0xf1, 0xba,
+ 0x46, 0x08, 0xe0, 0xcf, 0x81, 0x36, 0xd9, 0x24, 0xf8, 0xff, 0x54, 0x39, 0x25,
+ 0xf2, 0x17, 0x3a, 0xd5, 0x15, 0xfd, 0xd8, 0x12, 0x19, 0x24, 0x08, 0x22, 0x0a,
+ 0x01, 0xd7, 0x24, 0xbb, 0x00, 0xbf, 0x0c, 0xcf, 0xd8, 0xde, 0x25, 0x2c, 0x68,
+ 0xf3, 0xf5, 0xd8, 0xab, 0x18, 0x17, 0x46, 0x0a, 0xd9, 0x31, 0xaa, 0x30, 0x68,
+ 0xe8, 0x08, 0xc7, 0xf2, 0x01, 0x90, 0xf7, 0xca, 0x76, 0xba, 0x53, 0xe9, 0xef,
+ 0x0a, 0xb3, 0x1f, 0xe9, 0x27, 0x1a, 0x7b, 0xff, 0xef, 0x3f, 0x08, 0xb2, 0x24,
+ 0x85, 0x03, 0xbf, 0x44, 0xdc, 0xe2, 0x00, 0xf7, 0xe7, 0x9a, 0x3d, 0xf6, 0xbc,
+ 0x99, 0xff, 0x1f, 0x3c, 0xca, 0x8c, 0x85, 0xef, 0x18, 0xf3, 0xfd, 0xbc, 0xcd,
+ 0x14, 0x3c, 0x27, 0xf8, 0x23, 0xcc, 0xfc, 0x81, 0xa6, 0x28, 0x1b, 0x48, 0xd8,
+ 0x16, 0xfe, 0x0b, 0x13, 0xbb, 0xdb, 0xdd, 0x04, 0xd0, 0xda, 0x05, 0xf9, 0x0f,
+ 0xd7, 0xfe, 0xce, 0x38, 0x33, 0x25, 0x26, 0xfb, 0x3f, 0x46, 0xe4, 0xb9, 0xe4,
+ 0x97, 0xb3, 0xfa, 0x15, 0x31, 0x00, 0x06, 0xa0, 0x04, 0xdf, 0xb4, 0x1e, 0x1c,
+ 0x0b, 0xd6, 0xcc, 0xc4, 0x10, 0xc7, 0xf6, 0xde, 0x07, 0x3e, 0x87, 0xef, 0x49,
+ 0x13, 0xf5, 0xfe, 0xdf, 0x29, 0x69, 0x0c, 0xf9, 0x13, 0x2d, 0x7f, 0x33, 0xdc,
+ 0x36, 0xfe, 0x03, 0xd7, 0x09, 0x0c, 0x2c, 0x1c, 0x2f, 0x73, 0x00, 0x25, 0xff,
+ 0xd5, 0x52, 0xd9, 0xe2, 0x5e, 0xa6, 0x00, 0x12, 0x12, 0x0a, 0xe5, 0x07, 0x33,
+ 0xbc, 0x21, 0x00, 0xf2, 0xe5, 0xf4, 0x22, 0xfd, 0x07, 0xf7, 0x33, 0xef, 0x52,
+ 0x14, 0xf3, 0xdd, 0xd8, 0x43, 0xf7, 0xbe, 0xf6, 0xf0, 0xd9, 0x35, 0x00, 0xe3,
+ 0x4b, 0xf0, 0x0f, 0xfa, 0xfe, 0x2c, 0x3e, 0xe0, 0xf7, 0xcf, 0x1e, 0xf1, 0x3b,
+ 0xf3, 0xd3, 0x35, 0xbd, 0x51, 0x15, 0xed, 0xdd, 0x00, 0xec, 0x24, 0x1e, 0x3f,
+ 0x1e, 0xdf, 0xed, 0xfb, 0x58, 0x0a, 0xf9, 0x28, 0xeb, 0xc6, 0xda, 0xd9, 0x0a,
+ 0x01, 0xc4, 0x1d, 0xe4, 0xfc, 0xcb, 0xc6, 0xba, 0xc7, 0xef, 0x0e, 0xca, 0x40,
+ 0xe5, 0x02, 0xce, 0x30, 0xcd, 0x47, 0xe3, 0x10, 0x02, 0x16, 0x07, 0xf2, 0x03,
+ 0xf1, 0xec, 0x0a, 0x32, 0x19, 0xf3, 0x03, 0xe0, 0x26, 0x1e, 0xc8, 0x00, 0xf4,
+ 0x11, 0x14, 0xd8, 0xe4, 0x0e, 0x0a, 0x27, 0x16, 0x26, 0x0b, 0x04, 0x2f, 0x12,
+ 0x67, 0x10, 0xce, 0xf5, 0xb7, 0xf4, 0xe1, 0xed, 0xcf, 0xed, 0xfa, 0x12, 0xf0,
+ 0x0b, 0xf7, 0xe9, 0x0d, 0xe7, 0x25, 0xdf, 0xe9, 0xe9, 0x3d, 0xea, 0xe6, 0x1e,
+ 0x20, 0xee, 0x15, 0x02, 0x2f, 0x11, 0x07, 0xb0, 0x1a, 0xce, 0xf0, 0x61, 0xae,
+ 0x0c, 0xe5, 0xdf, 0x06, 0x15, 0xed, 0xe2, 0x12, 0x27, 0xfe, 0x03, 0xf7, 0x0a,
+ 0xf8, 0x06, 0x38, 0xfe, 0xfd, 0x26, 0xfa, 0xf2, 0xf9, 0x2d, 0xea, 0xb2, 0x11,
+ 0xd7, 0x19, 0x7f, 0xcf, 0x17, 0x29, 0x03, 0x35, 0xfb, 0xe1, 0xd1, 0xf7, 0xdd,
+ 0x7c, 0xfb, 0x16, 0x31, 0x14, 0x16, 0xe4, 0xcf, 0xe4, 0xc3, 0x4e, 0x1e, 0x10,
+ 0xf5, 0x07, 0xe7, 0xe8, 0xf1, 0x05, 0x21, 0xe3, 0xb3, 0x18, 0x07, 0x12, 0x45,
+ 0x04, 0xaf, 0x0a, 0xca, 0x16, 0x7a, 0xf6, 0x09, 0x04, 0xf8, 0x09, 0x1e, 0xe9,
+ 0x4b, 0xbf, 0x14, 0xe9, 0x0d, 0xbc, 0x0d, 0x23, 0x01, 0xd1, 0xfe, 0x1f, 0xce,
+ 0x4c, 0x17, 0xc1, 0x2e, 0xdc, 0x07, 0x09, 0x5a, 0x06, 0x23, 0x03, 0x2d, 0x18,
+ 0x33, 0xf5, 0xfe, 0xc6, 0xbe, 0x07, 0xd4, 0x5d, 0x0a, 0x0a, 0x29, 0x28, 0xf6,
+ 0x53, 0x19, 0xea, 0x15, 0xcf, 0x2b, 0xe9, 0x28, 0xda, 0x96, 0xf2, 0x36, 0x7e,
+ 0xe7, 0xfc, 0x42, 0xe6, 0x81, 0x2a, 0x4f, 0xec, 0xe6, 0xe2, 0x1f, 0x96, 0xe2,
+ 0xc7, 0xe1, 0xfe, 0x19, 0xe4, 0x04, 0x29, 0xb7, 0x2c, 0x2c, 0xde, 0xa7, 0x1d,
+ 0x94, 0x56, 0xe2, 0x0d, 0xc1, 0xe0, 0xc5, 0x72, 0xf6, 0x20, 0x40, 0xd1, 0x7c,
+ 0xce, 0xb8, 0x54, 0xe4, 0x4d, 0x0c, 0xfb, 0xad, 0xf0, 0x45, 0x3f, 0x18, 0xef,
+ 0xf3, 0x19, 0xfe, 0x14, 0x92, 0x61, 0xf8, 0x31, 0xe5, 0x1a, 0xd4, 0x0a, 0xe8,
+ 0x19, 0xe9, 0xd7, 0x0e, 0x6d, 0x00, 0x0e, 0x32, 0x22, 0xc5, 0xe7, 0x07, 0x2d,
+ 0xfe, 0xd0, 0x5b, 0x35, 0xf5, 0xc2, 0xef, 0xd6, 0xd0, 0xca, 0xc1, 0x20, 0xcd,
+ 0x11, 0xce, 0xee, 0xf7, 0x7f, 0x2b, 0x39, 0x98, 0xfe, 0x1b, 0xc4, 0x28, 0xd1,
+ 0x1a, 0x03, 0x0c, 0xd8, 0x25, 0x11, 0xf5, 0x41, 0xfd, 0xe6, 0x20, 0x37, 0x0a,
+ 0x08, 0xe8, 0xbb, 0xbe, 0x96, 0xe5, 0x0b, 0x06, 0xf0, 0x14, 0x25, 0x3a, 0x61,
+ 0xe6, 0x63, 0x22, 0x3c, 0xe8, 0xd9, 0xf6, 0xf1, 0xa2, 0x1e, 0xf7, 0x19, 0x1d,
+ 0xfb, 0xbf, 0x32, 0x0f, 0xdf, 0x11, 0x37, 0x2f, 0xf2, 0x6c, 0x4a, 0xf3, 0x1d,
+ 0x1f, 0xa1, 0xde, 0x3a, 0x3f, 0xd4, 0xdf, 0xea, 0xd1, 0x03, 0xe3, 0xb9, 0x16,
+ 0x44, 0xb3, 0xd1, 0xda, 0xfc, 0x44, 0x42, 0xea, 0x27, 0x58, 0xd8, 0x08, 0xe0,
+ 0xea, 0x02, 0xf9, 0x25, 0x26, 0x56, 0x9a, 0xfe, 0xff, 0x04, 0x00, 0x00, 0x00,
+ 0x80, 0x04, 0x00, 0x00, 0x81, 0x60, 0xec, 0x3a, 0xec, 0xce, 0xe9, 0xca, 0x06,
+ 0xcc, 0xe2, 0x3f, 0xee, 0x7f, 0x81, 0x6d, 0xe5, 0xaa, 0x7f, 0x89, 0x78, 0x19,
+ 0xbb, 0xcc, 0x3e, 0x59, 0x17, 0x4d, 0x3b, 0xc4, 0x54, 0xf7, 0x98, 0xf1, 0xe8,
+ 0xc3, 0xa9, 0xcb, 0xe8, 0xf1, 0x51, 0xe5, 0x50, 0xb1, 0xcb, 0x5f, 0x3d, 0x7f,
+ 0x01, 0xb4, 0xab, 0xe4, 0x42, 0xf5, 0x3e, 0x7f, 0xfe, 0xad, 0x60, 0x71, 0x96,
+ 0x47, 0xd3, 0x08, 0xf2, 0xf9, 0x4d, 0x34, 0x60, 0x7f, 0x71, 0x7f, 0xba, 0xc9,
+ 0xd9, 0xac, 0x9c, 0x5c, 0x31, 0x70, 0x81, 0xfb, 0xc7, 0x21, 0x88, 0x57, 0x7f,
+ 0xf8, 0x99, 0xa6, 0x2f, 0xdd, 0xf5, 0x7f, 0x18, 0x0d, 0x59, 0x96, 0xb0, 0xd1,
+ 0xf2, 0xad, 0xc6, 0x5e, 0x84, 0xb4, 0x81, 0xd1, 0xf3, 0xae, 0x7f, 0x77, 0x0b,
+ 0xd7, 0xbc, 0x27, 0x04, 0xd0, 0xcf, 0xae, 0xd1, 0x5a, 0xd6, 0xfe, 0x7f, 0x1d,
+ 0xc8, 0x21, 0xb2, 0xfa, 0xcf, 0x04, 0xc6, 0x32, 0xf6, 0xd6, 0x10, 0xcc, 0xce,
+ 0x60, 0x32, 0x4b, 0x14, 0x73, 0x81, 0xd5, 0x33, 0x83, 0xeb, 0x3c, 0x85, 0xa4,
+ 0x7f, 0xc9, 0xdd, 0xcb, 0x7f, 0x0a, 0x52, 0xec, 0x42, 0xcc, 0x20, 0xd2, 0x81,
+ 0xd9, 0xe4, 0x4a, 0x7f, 0x45, 0xf5, 0x30, 0xc4, 0xff, 0x35, 0x69, 0xc2, 0xdc,
+ 0xc5, 0xd0, 0x4e, 0x31, 0x69, 0xd8, 0x15, 0x5f, 0x59, 0x35, 0x31, 0x13, 0xbf,
+ 0xf7, 0x33, 0x1c, 0xd6, 0x51, 0x7f, 0x50, 0xf7, 0x4c, 0x1e, 0xed, 0x81, 0xf5,
+ 0xec, 0x1e, 0x3a, 0x21, 0x9e, 0xf2, 0xf7, 0x7c, 0x36, 0xbd, 0xe8, 0xb8, 0x86,
+ 0xe1, 0xd9, 0x7f, 0x5e, 0x2f, 0xb0, 0xdc, 0x89, 0x15, 0xd3, 0x38, 0x81, 0xd5,
+ 0x8e, 0x16, 0x18, 0x2d, 0xc1, 0xf7, 0x31, 0xc5, 0x70, 0x3c, 0xf3, 0xae, 0x81,
+ 0xb7, 0xcf, 0xcf, 0xc3, 0x37, 0xab, 0x7f, 0x39, 0x97, 0x0b, 0xde, 0xe3, 0x81,
+ 0x8b, 0xb9, 0x02, 0x0b, 0xb0, 0xac, 0x4d, 0xaa, 0x01, 0x56, 0x56, 0x36, 0x74,
+ 0x84, 0x94, 0x7f, 0xd6, 0xd8, 0x47, 0xad, 0xbc, 0xbf, 0xe0, 0x81, 0x9e, 0x2b,
+ 0xf0, 0xcc, 0x42, 0xbb, 0xdc, 0x11, 0xbc, 0x83, 0xd0, 0xe5, 0xd5, 0x04, 0xd6,
+ 0x5b, 0x02, 0x51, 0xbe, 0x87, 0xc6, 0x31, 0x2a, 0xe5, 0xf6, 0xe8, 0x81, 0x02,
+ 0x7f, 0x32, 0x3d, 0xc8, 0x7f, 0xcd, 0x4c, 0x7f, 0x81, 0x25, 0x1a, 0x0d, 0x1a,
+ 0x6c, 0x7f, 0x22, 0x48, 0x70, 0x63, 0x58, 0x18, 0x81, 0xcf, 0xdc, 0x96, 0x7d,
+ 0xb0, 0x74, 0xd1, 0xdf, 0x81, 0x46, 0x3a, 0xe3, 0x52, 0x28, 0x7f, 0x81, 0xcd,
+ 0x56, 0xf2, 0xd9, 0xfb, 0x81, 0xd8, 0x1c, 0xad, 0xf9, 0xcc, 0x46, 0x95, 0xd2,
+ 0x92, 0xca, 0xe3, 0xdd, 0x6d, 0x2e, 0x3c, 0xfb, 0xd0, 0xc1, 0xde, 0x96, 0xe5,
+ 0x3a, 0x7f, 0x40, 0xaf, 0x6b, 0xde, 0xb4, 0xf9, 0xfb, 0xce, 0x1e, 0xee, 0xc7,
+ 0x03, 0x30, 0x14, 0xc5, 0xed, 0xe6, 0x81, 0x7f, 0x89, 0xee, 0xb9, 0xf9, 0xcd,
+ 0x1b, 0x66, 0xb9, 0x5a, 0x86, 0x34, 0x4c, 0x9f, 0xf0, 0x54, 0x23, 0x0c, 0x7f,
+ 0xf6, 0x7f, 0x00, 0x81, 0x5f, 0x46, 0x0a, 0x3b, 0xc5, 0x19, 0x2c, 0x12, 0x19,
+ 0xb4, 0x7f, 0x81, 0x81, 0x53, 0xdd, 0x29, 0x3a, 0x81, 0xf5, 0x7f, 0x1d, 0x09,
+ 0x0c, 0x2b, 0x2d, 0x13, 0x8f, 0xe0, 0x12, 0x04, 0xef, 0x4c, 0x7f, 0x0f, 0x04,
+ 0x4a, 0x35, 0xdf, 0x7f, 0xb4, 0xff, 0x85, 0x38, 0xfa, 0x40, 0x05, 0x7f, 0x32,
+ 0xd5, 0x7f, 0xc7, 0x12, 0x81, 0x53, 0x99, 0xc2, 0xb6, 0xd9, 0xea, 0x27, 0x20,
+ 0xe9, 0xf4, 0xff, 0x3c, 0x99, 0x7d, 0x62, 0x0b, 0x7f, 0x81, 0x7f, 0x34, 0xa2,
+ 0xd4, 0x19, 0xcf, 0xb0, 0x1f, 0x7b, 0x1e, 0xcb, 0xd7, 0x4c, 0x34, 0xc0, 0xb3,
+ 0xb6, 0xcf, 0x9c, 0xf8, 0xb0, 0x04, 0xd7, 0x07, 0xbf, 0x00, 0xb0, 0x4a, 0x7f,
+ 0x81, 0x81, 0x13, 0x11, 0xd8, 0x88, 0xba, 0x0d, 0x81, 0xe8, 0xc2, 0x2c, 0x1b,
+ 0x36, 0x0d, 0x24, 0x81, 0x7f, 0xbd, 0x78, 0x3c, 0x04, 0x05, 0xe0, 0x2f, 0x08,
+ 0x44, 0xaf, 0x57, 0x7f, 0x48, 0xe5, 0xc1, 0x03, 0x03, 0x49, 0xf9, 0xf2, 0xf4,
+ 0xad, 0xd8, 0x02, 0x58, 0x41, 0x81, 0xc2, 0xaa, 0x0b, 0x1b, 0x01, 0x64, 0x19,
+ 0xee, 0x7f, 0xf0, 0xe7, 0xd0, 0x19, 0xe5, 0x2f, 0x01, 0x25, 0x17, 0x7f, 0xf0,
+ 0x06, 0xdd, 0xc1, 0x1d, 0x03, 0x66, 0x39, 0x52, 0xcc, 0x4a, 0x81, 0xde, 0x35,
+ 0x45, 0x7f, 0x44, 0xef, 0xa4, 0x21, 0xc0, 0xe1, 0x18, 0xfd, 0x7f, 0x42, 0xf6,
+ 0x9e, 0x81, 0x81, 0x5c, 0x7f, 0xa9, 0x6f, 0x9e, 0x0a, 0x73, 0xe5, 0xdd, 0xd1,
+ 0xf1, 0x38, 0x4a, 0x1e, 0xf0, 0xb6, 0xde, 0xfc, 0xf6, 0x39, 0xe0, 0xf8, 0x5a,
+ 0x9e, 0x81, 0xaa, 0xb5, 0xd9, 0xe5, 0xe2, 0xe8, 0xd3, 0xa4, 0x24, 0xc7, 0xc3,
+ 0x7f, 0x1a, 0xdc, 0xeb, 0x2e, 0x16, 0x0a, 0x30, 0xf0, 0xf2, 0xab, 0xb8, 0x66,
+ 0x81, 0x95, 0x17, 0x81, 0x7f, 0xba, 0x1a, 0xe9, 0xdd, 0x09, 0x2d, 0x7f, 0x35,
+ 0xab, 0x04, 0x13, 0x7f, 0xc7, 0x45, 0x09, 0x7f, 0x56, 0x0c, 0x09, 0xea, 0xc4,
+ 0x19, 0x7f, 0x08, 0x0e, 0xcf, 0xcd, 0x33, 0x28, 0x06, 0x3c, 0xe6, 0x75, 0x08,
+ 0xd8, 0xf1, 0xb4, 0x2e, 0xff, 0x7f, 0x3d, 0x7f, 0x6f, 0x17, 0x0f, 0x2a, 0x09,
+ 0x04, 0x1c, 0x96, 0x33, 0x2c, 0x7f, 0xf6, 0x89, 0xe9, 0x09, 0x65, 0xa8, 0x2c,
+ 0x42, 0xe4, 0xb9, 0xd5, 0xef, 0xed, 0x81, 0x00, 0x45, 0xe5, 0x7f, 0x20, 0x13,
+ 0x6c, 0x4f, 0x02, 0xbd, 0x59, 0x8c, 0xbc, 0xdd, 0xe1, 0x57, 0xe5, 0x6e, 0x7f,
+ 0x7e, 0x27, 0x3f, 0xa7, 0x0a, 0x9f, 0x7f, 0x7f, 0x51, 0x16, 0xed, 0xba, 0x91,
+ 0x06, 0x69, 0xf2, 0xc3, 0x46, 0xb4, 0x81, 0xd7, 0x54, 0xa1, 0x83, 0x20, 0x3f,
+ 0xef, 0x58, 0x7f, 0xb7, 0x37, 0xd0, 0xf5, 0x23, 0x50, 0xa0, 0xb3, 0x85, 0x4a,
+ 0x1f, 0xf4, 0x89, 0x3d, 0x7f, 0x7f, 0x96, 0xdb, 0x51, 0x5f, 0xf0, 0x7f, 0xdf,
+ 0x64, 0x3a, 0x87, 0x7f, 0x7f, 0x25, 0x99, 0xaa, 0xdc, 0xda, 0xd2, 0x67, 0xd9,
+ 0xab, 0x5c, 0x82, 0xc9, 0x20, 0xe2, 0xfd, 0xdf, 0xf9, 0x09, 0xaa, 0x81, 0xf4,
+ 0x89, 0x7f, 0x14, 0xf2, 0x0e, 0x24, 0x6b, 0x31, 0x23, 0xd6, 0x00, 0xe2, 0x4a,
+ 0xac, 0x31, 0x1c, 0xfb, 0xc4, 0x98, 0xd0, 0xcc, 0x66, 0x13, 0x13, 0xcf, 0x5a,
+ 0x38, 0x81, 0xfc, 0x98, 0x08, 0xaa, 0xc1, 0xbe, 0x33, 0x99, 0x4a, 0xd7, 0x7f,
+ 0x3f, 0x09, 0x2c, 0xfc, 0xf9, 0x11, 0xcd, 0xa1, 0x30, 0x81, 0xde, 0x7d, 0x7f,
+ 0x7f, 0x3b, 0xcd, 0x4d, 0x1e, 0x3c, 0x39, 0x83, 0x86, 0xad, 0xb6, 0x7f, 0xd8,
+ 0x7f, 0x7f, 0xa5, 0xf5, 0xb6, 0xbf, 0x16, 0xfc, 0xc0, 0x18, 0x7f, 0xad, 0x97,
+ 0x23, 0x81, 0xf2, 0x5f, 0xe8, 0x04, 0xf9, 0x81, 0x89, 0x8c, 0xbd, 0xe9, 0xb6,
+ 0xd9, 0xbb, 0x3e, 0x26, 0xd2, 0xce, 0x15, 0x6d, 0xe7, 0xd7, 0x62, 0x7f, 0x50,
+ 0xc3, 0x3d, 0xd4, 0x54, 0xc6, 0x81, 0xe2, 0xd0, 0x8b, 0x5f, 0x92, 0xd2, 0xbc,
+ 0xdc, 0x93, 0x22, 0x04, 0x7f, 0xc8, 0xf2, 0xa1, 0xe6, 0x3a, 0xba, 0xb1, 0x6c,
+ 0x31, 0xea, 0xff, 0xfb, 0x19, 0x19, 0x23, 0xf7, 0xfc, 0xf5, 0x35, 0xd1, 0x1e,
+ 0x4e, 0xd9, 0x81, 0x21, 0xb7, 0xa0, 0xf6, 0xf6, 0x34, 0xfd, 0x17, 0x34, 0x1c,
+ 0x00, 0xbf, 0x43, 0x9b, 0x07, 0x0e, 0x0f, 0xf2, 0xda, 0xd1, 0x42, 0x2a, 0xb3,
+ 0x32, 0x89, 0xf3, 0x7f, 0x7f, 0xd7, 0x7f, 0xab, 0x13, 0xd5, 0xea, 0x68, 0x54,
+ 0xc8, 0x7f, 0x2d, 0x4a, 0xde, 0x14, 0x7f, 0xbe, 0x84, 0xe3, 0x0f, 0xba, 0xee,
+ 0xff, 0xc0, 0x1f, 0x81, 0x29, 0x88, 0xc1, 0x64, 0x31, 0xd8, 0xdc, 0x20, 0x9d,
+ 0x70, 0x14, 0xf3, 0x49, 0xee, 0xf1, 0xe0, 0xb5, 0xa0, 0xf3, 0x94, 0x4c, 0xb0,
+ 0x1c, 0xf8, 0x3c, 0xed, 0x1e, 0x4e, 0xb8, 0x99, 0xfa, 0x4e, 0x16, 0x18, 0x6a,
+ 0x08, 0x57, 0xa6, 0x4b, 0xe4, 0x94, 0x9e, 0x7f, 0x31, 0xb9, 0x50, 0xab, 0x11,
+ 0x3a, 0xd5, 0x18, 0x81, 0xf0, 0x50, 0xbf, 0x46, 0xda, 0xae, 0x3e, 0x7f, 0x11,
+ 0x02, 0x26, 0x07, 0x2a, 0xa6, 0xb6, 0x7f, 0xc1, 0x7f, 0xb6, 0x4f, 0x7f, 0xbe,
+ 0x05, 0xd6, 0x35, 0x01, 0x2f, 0x9f, 0x68, 0x49, 0x7f, 0x1e, 0x75, 0x3c, 0xb7,
+ 0x6f, 0xac, 0xfd, 0x07, 0x48, 0x15, 0x05, 0x6d, 0x15, 0xd5, 0x3d, 0x00, 0xf3,
+ 0xa4, 0x10, 0xf9, 0xa1, 0xdf, 0x6d, 0xaf, 0x03, 0xa9, 0x37, 0x7f, 0xbb, 0x91,
+ 0x75, 0x5e, 0xc1, 0x7f, 0x3c, 0x07, 0xb5, 0xd2, 0x34, 0xda, 0xe3, 0xf1, 0xe2,
+ 0x9e, 0xfe, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x12, 0xd3,
+ 0xfd, 0xe4, 0x0c, 0x1f, 0x00, 0x20, 0xd0, 0xd2, 0xbf, 0x02, 0x26, 0x05, 0x27,
+ 0xdf, 0x04, 0x17, 0x3b, 0xf9, 0xde, 0xdc, 0x14, 0x32, 0xce, 0xc8, 0x26, 0x11,
+ 0x0d, 0xd0, 0xda, 0xfd, 0x0e, 0x33, 0x3c, 0x29, 0xdf, 0xe9, 0xea, 0x03, 0xc2,
+ 0xe8, 0x1c, 0xca, 0xdb, 0x7f, 0xbb, 0xeb, 0xcb, 0x29, 0x16, 0x1d, 0xbb, 0x1b,
+ 0xeb, 0xf4, 0x05, 0xf2, 0x23, 0xff, 0xc1, 0x1b, 0xdf, 0x58, 0x03, 0x22, 0xa7,
+ 0xdf, 0x2e, 0x06, 0x90, 0x1d, 0xf7, 0x04, 0x06, 0x28, 0x2c, 0x21, 0xff, 0xf1,
+ 0x12, 0x9f, 0x06, 0x2a, 0xce, 0xd6, 0xdd, 0x0e, 0xf2, 0x1e, 0x05, 0xfd, 0x38,
+ 0xdd, 0x38, 0xff, 0x43, 0xfb, 0xc4, 0x1e, 0x2f, 0xee, 0x53, 0xcb, 0xdd, 0xf8,
+ 0xf4, 0x47, 0xbb, 0x16, 0x3e, 0xc4, 0xf8, 0x0f, 0xeb, 0xfa, 0x0a, 0x36, 0xcf,
+ 0xe7, 0xe5, 0x0a, 0x0e, 0xe4, 0x9a, 0x14, 0xcc, 0x01, 0xf5, 0x07, 0xd5, 0xba,
+ 0xe2, 0xef, 0xfc, 0xc5, 0xe4, 0x17, 0x25, 0xed, 0x11, 0xf8, 0xf3, 0xd7, 0xdf,
+ 0xe7, 0xef, 0x42, 0xed, 0xcc, 0xd0, 0x05, 0xb8, 0xf1, 0xdc, 0x23, 0x63, 0x2e,
+ 0x16, 0xf0, 0x02, 0xd5, 0x23, 0xfc, 0x43, 0xf9, 0xe4, 0x31, 0xce, 0x0d, 0xdd,
+ 0x36, 0xed, 0x02, 0xcf, 0xd1, 0xc6, 0x0b, 0x29, 0x7f, 0x33, 0xda, 0x3c, 0xbc,
+ 0xed, 0xed, 0x18, 0xb3, 0xfc, 0x11, 0x19, 0x55, 0x0f, 0x16, 0xbd, 0x2c, 0xec,
+ 0x25, 0xf0, 0xe4, 0x08, 0x35, 0x38, 0x05, 0x2a, 0xd1, 0xdc, 0xd9, 0x0c, 0xe2,
+ 0xda, 0xee, 0x24, 0xd1, 0x01, 0x02, 0x2e, 0xd1, 0x0f, 0x35, 0xcf, 0xd4, 0xe6,
+ 0x13, 0x19, 0xff, 0x36, 0x02, 0x0f, 0xe5, 0x14, 0xe4, 0xf6, 0xee, 0xed, 0xdd,
+ 0xd4, 0xcd, 0xc3, 0xff, 0xfb, 0x49, 0xe4, 0xe2, 0xc9, 0xf7, 0xb6, 0xf0, 0xed,
+ 0x0d, 0x23, 0xf8, 0xdd, 0xff, 0xd8, 0xcf, 0x03, 0x0a, 0x16, 0xdc, 0xf3, 0x0c,
+ 0x27, 0xfa, 0x00, 0x0d, 0x24, 0x0a, 0xea, 0x2d, 0x11, 0x1c, 0x06, 0xef, 0x75,
+ 0xfb, 0x0e, 0x10, 0xf0, 0x29, 0xc6, 0xff, 0xe1, 0xfb, 0xf0, 0xeb, 0xee, 0x0c,
+ 0x35, 0x31, 0x4e, 0x3b, 0x16, 0x09, 0xb2, 0x05, 0x31, 0x28, 0xba, 0x33, 0xd9,
+ 0x18, 0x3a, 0xb7, 0xf0, 0xe5, 0x17, 0xd8, 0x0d, 0x2f, 0xf8, 0xdc, 0xbc, 0xdd,
+ 0xf4, 0x3c, 0x20, 0xf4, 0x12, 0x11, 0x1d, 0x3f, 0xee, 0x0d, 0x16, 0x17, 0xaf,
+ 0xfd, 0xd8, 0xdd, 0x16, 0xf8, 0x1c, 0xc0, 0xff, 0xe7, 0xfa, 0xef, 0x18, 0x03,
+ 0x0a, 0xdd, 0xfe, 0x18, 0x19, 0xed, 0xec, 0x7f, 0xf2, 0x06, 0xf4, 0x30, 0x04,
+ 0x10, 0x0a, 0xfb, 0x15, 0xd6, 0x25, 0xd2, 0xe2, 0x02, 0xd8, 0x16, 0x1b, 0x47,
+ 0x1a, 0x0b, 0xe9, 0xc9, 0x27, 0xd1, 0xc7, 0xfc, 0x06, 0x04, 0x25, 0xd7, 0xe8,
+ 0xfa, 0x17, 0x07, 0x4d, 0xe8, 0x1d, 0xe3, 0x20, 0xfb, 0xc4, 0xd4, 0xbe, 0x81,
+ 0xd0, 0xf0, 0x03, 0x0a, 0x0b, 0x5b, 0x00, 0x3c, 0x31, 0x43, 0x3c, 0xfa, 0x23,
+ 0xcf, 0x2b, 0xdf, 0x3e, 0x5a, 0xed, 0x05, 0xab, 0x5f, 0xcb, 0x05, 0xfb, 0x0b,
+ 0xd5, 0xed, 0xe9, 0xca, 0x18, 0x2e, 0x39, 0x49, 0xca, 0x0f, 0x44, 0xf4, 0x9c,
+ 0xa9, 0x14, 0xef, 0xd3, 0x04, 0xed, 0xd0, 0x13, 0xe4, 0x05, 0x2d, 0xb2, 0x11,
+ 0xff, 0xcb, 0x06, 0xd4, 0x15, 0xad, 0x19, 0x43, 0x0b, 0xf9, 0xec, 0xd8, 0x1f,
+ 0xcf, 0xd7, 0x03, 0xe3, 0x11, 0x29, 0x1a, 0x24, 0x00, 0x1a, 0xdc, 0x2b, 0x1d,
+ 0x48, 0xfb, 0xdb, 0xe4, 0xe9, 0xb8, 0x0b, 0x2c, 0x2a, 0x1a, 0xc4, 0x12, 0xc2,
+ 0xbf, 0xeb, 0xdb, 0x17, 0x7c, 0xfa, 0xe6, 0xfe, 0xe5, 0x0a, 0xdc, 0x11, 0x49,
+ 0xe3, 0x08, 0x21, 0xf3, 0x39, 0xe7, 0x50, 0x44, 0x03, 0x11, 0xf9, 0x51, 0xfc,
+ 0xff, 0x2b, 0x2c, 0x12, 0xf5, 0xde, 0x15, 0x12, 0xa7, 0x18, 0xea, 0x12, 0xba,
+ 0xf2, 0x01, 0xe1, 0x0e, 0x2c, 0xf3, 0xff, 0x10, 0xbd, 0xcc, 0x34, 0xf0, 0x0c,
+ 0x0b, 0xf3, 0x1b, 0xf9, 0xf9, 0xbf, 0x7f, 0xf0, 0x06, 0x58, 0x4b, 0xcb, 0xf7,
+ 0x0d, 0xa3, 0x0e, 0x06, 0xe1, 0x17, 0x0d, 0xe4, 0x1d, 0x46, 0x0f, 0xd5, 0xdf,
+ 0x27, 0xfc, 0x2e, 0xec, 0x30, 0x09, 0xf2, 0x10, 0xc6, 0xd9, 0x00, 0xde, 0x68,
+ 0x3e, 0x73, 0xea, 0x12, 0xf9, 0xc5, 0xdf, 0x3c, 0x4c, 0x42, 0xe1, 0x08, 0x22,
+ 0x1f, 0x11, 0x10, 0xcc, 0x22, 0x18, 0x02, 0x51, 0x11, 0x03, 0xee, 0xd6, 0xf1,
+ 0x31, 0x02, 0xd8, 0x10, 0x0e, 0xf5, 0xd5, 0x3f, 0x0e, 0xea, 0xbf, 0x1d, 0x26,
+ 0x3a, 0x36, 0x0e, 0x2d, 0x10, 0xf8, 0x4c, 0x5a, 0x2c, 0x16, 0x52, 0xe4, 0x1a,
+ 0x29, 0xf7, 0x96, 0xcc, 0x38, 0xf2, 0xe3, 0x13, 0x4f, 0x13, 0xc0, 0xfb, 0x14,
+ 0xe9, 0xf3, 0x01, 0x00, 0x25, 0xce, 0xe7, 0xd4, 0xde, 0xe0, 0xe0, 0x10, 0xd0,
+ 0x04, 0xfe, 0xce, 0x10, 0xd6, 0xf3, 0x18, 0xaa, 0x07, 0xe4, 0x38, 0x15, 0xe0,
+ 0xd6, 0xb8, 0xf3, 0x12, 0xc6, 0xf6, 0x3b, 0xfe, 0x6f, 0xfe, 0xe3, 0x13, 0xdd,
+ 0xcd, 0xf8, 0x12, 0x42, 0x15, 0xf2, 0x4f, 0x04, 0x14, 0xc7, 0xf5, 0xc8, 0xd8,
+ 0xec, 0xe4, 0x0b, 0xfa, 0xe2, 0x21, 0x1e, 0xdd, 0x3b, 0xd7, 0xf8, 0xe8, 0x44,
+ 0xc2, 0x10, 0xb0, 0xc8, 0x01, 0xfc, 0x1c, 0xf0, 0xec, 0x00, 0xd2, 0x1f, 0xeb,
+ 0xe0, 0x07, 0xeb, 0x2d, 0x4c, 0x33, 0x2a, 0x21, 0x99, 0xea, 0x17, 0xe9, 0x2c,
+ 0xe2, 0xee, 0x11, 0xd3, 0x3a, 0x11, 0x25, 0xd7, 0x89, 0x25, 0x33, 0x43, 0x0e,
+ 0x24, 0x21, 0x0b, 0xe5, 0x0f, 0x20, 0x0e, 0xc8, 0x39, 0xaa, 0xd8, 0x21, 0x81,
+ 0xca, 0xed, 0x22, 0x46, 0xf5, 0x0e, 0x20, 0x06, 0xf1, 0x10, 0xce, 0xec, 0xe8,
+ 0xd8, 0x34, 0x01, 0x13, 0x03, 0x19, 0x18, 0x29, 0xde, 0xbc, 0x0f, 0x3c, 0xcc,
+ 0xf8, 0x7f, 0xf4, 0xd2, 0x63, 0x00, 0xf0, 0x27, 0xfc, 0xd4, 0xe6, 0x03, 0x32,
+ 0xf7, 0x4b, 0xc4, 0x0e, 0xdc, 0x0a, 0x05, 0xb4, 0xec, 0xe2, 0xce, 0x04, 0xe4,
+ 0x0a, 0xb6, 0x1b, 0x12, 0xea, 0x40, 0x0f, 0x56, 0x0a, 0xe5, 0x00, 0x30, 0x25,
+ 0x04, 0x34, 0x0a, 0xe7, 0xf3, 0xed, 0x07, 0x1d, 0x19, 0x18, 0xf4, 0x11, 0xe6,
+ 0x01, 0xe4, 0x3e, 0x44, 0xd8, 0xc3, 0x89, 0x05, 0xdb, 0xd0, 0x13, 0x1a, 0xe1,
+ 0xd0, 0xdf, 0x30, 0x21, 0xd5, 0xf5, 0xcf, 0x24, 0xea, 0xe7, 0x07, 0xd5, 0x15,
+ 0xfc, 0x18, 0x70, 0xea, 0x27, 0xf8, 0x12, 0x18, 0xe9, 0xb6, 0xeb, 0xeb, 0xdb,
+ 0x1d, 0xe0, 0x05, 0xc1, 0xef, 0xdc, 0xc3, 0x2c, 0x1d, 0x37, 0xeb, 0xf4, 0x6f,
+ 0xd8, 0xe9, 0x20, 0xf5, 0xff, 0x15, 0xbd, 0x2a, 0x0f, 0x02, 0xee, 0x02, 0x1a,
+ 0x4b, 0xeb, 0xd3, 0x03, 0xd0, 0xf0, 0xf3, 0x1b, 0xf3, 0x29, 0x10, 0x06, 0x72,
+ 0xf6, 0xfa, 0xec, 0xec, 0x30, 0xed, 0xff, 0x3e, 0xdb, 0x1b, 0x17, 0x32, 0xa2,
+ 0xee, 0x03, 0xe8, 0x7f, 0x1b, 0xdf, 0x5d, 0xea, 0xa0, 0x20, 0x2d, 0x15, 0x0e,
+ 0xdb, 0x0f, 0xf9, 0x0d, 0x1b, 0xe0, 0x55, 0xce, 0xd9, 0xc2, 0xa5, 0xb6, 0xfa,
+ 0xf0, 0xbb, 0xe6, 0xea, 0x5c, 0x31, 0x76, 0xa8, 0xc6, 0xd1, 0x47, 0xfa, 0x21,
+ 0xdd, 0x10, 0x0d, 0x35, 0xd2, 0xfe, 0xe4, 0xe4, 0xf4, 0xcc, 0x3d, 0x67, 0x0a,
+ 0x12, 0x4c, 0x2b, 0xfa, 0xc8, 0x58, 0xe9, 0x2e, 0xfe, 0x2b, 0xc7, 0x09, 0x5f,
+ 0x35, 0x34, 0x21, 0x14, 0xe7, 0x3e, 0x19, 0x00, 0x15, 0x6b, 0x21, 0x0c, 0xf8,
+ 0x5a, 0x27, 0x78, 0x0b, 0x45, 0xf8, 0x21, 0xe1, 0x2e, 0x2d, 0xd5, 0x19, 0xf8,
+ 0xcf, 0x5e, 0xfd, 0xe1, 0x36, 0x20, 0xcd, 0xef, 0xfa, 0x2a, 0xcf, 0x5d, 0x2a,
+ 0xda, 0xe5, 0xe1, 0xf5, 0xd9, 0xe1, 0xb5, 0x0e, 0x03, 0xb5, 0xe5, 0xea, 0xbb,
+ 0xeb, 0x06, 0xf9, 0xe7, 0x16, 0x0d, 0xfe, 0xbe, 0x23, 0xd5, 0x14, 0x1d, 0xf7,
+ 0xd5, 0xdf, 0xef, 0xec, 0xd4, 0x2d, 0xda, 0xce, 0x3c, 0x98, 0x24, 0x02, 0xfe,
+ 0xac, 0xd4, 0x53, 0x26, 0xcf, 0xfa, 0xd0, 0xeb, 0x5c, 0xcb, 0x19, 0xd2, 0x21,
+ 0xde, 0x18, 0x4f, 0xfd, 0x35, 0x16, 0xd7, 0x1e, 0x13, 0x92, 0x1d, 0x1f, 0x00,
+ 0x54, 0x24, 0x37, 0xf0, 0xd1, 0xe3, 0xba, 0xd5, 0x21, 0xd9, 0xf6, 0xfd, 0xb7,
+ 0x08, 0xb4, 0xd5, 0x43, 0xe3, 0x1e, 0x05, 0x56, 0xc5, 0x56, 0xd8, 0x3e, 0xef,
+ 0xe2, 0x08, 0xd4, 0xc5, 0xed, 0x13, 0x2e, 0x25, 0xd1, 0x20, 0xd4, 0xe0, 0xfd,
+ 0xfb, 0x81, 0xe7, 0xf0, 0xb2, 0xde, 0x00, 0xe5, 0xef, 0xec, 0xd1, 0x08, 0xee,
+ 0xed, 0xe1, 0x4e, 0xd2, 0xd2, 0xee, 0x25, 0x25, 0x39, 0x8f, 0x05, 0xfa, 0x52,
+ 0x0f, 0x27, 0x01, 0x07, 0x06, 0xc8, 0x81, 0x11, 0x2d, 0x17, 0xc3, 0xe2, 0x00,
+ 0x34, 0x6e, 0xf5, 0xe3, 0x36, 0x19, 0x2b, 0xed, 0xe9, 0xc5, 0x61, 0xdb, 0x16,
+ 0xe3, 0xfe, 0xfe, 0x0f, 0x5c, 0xe7, 0xd4, 0xe0, 0xdb, 0xe9, 0x3a, 0x04, 0xed,
+ 0xbe, 0xb6, 0x28, 0x25, 0x1a, 0x3e, 0x27, 0xb7, 0xc7, 0x11, 0xb2, 0x1d, 0xbc,
+ 0x1f, 0x5a, 0x03, 0xa7, 0xeb, 0x4c, 0x47, 0x38, 0x55, 0xf8, 0x0e, 0xff, 0xf8,
+ 0xc5, 0x19, 0xca, 0xe0, 0x34, 0xed, 0x20, 0x17, 0xc5, 0xc7, 0x09, 0x18, 0xd3,
+ 0x95, 0xdc, 0xb3, 0x0f, 0xf7, 0xf8, 0x78, 0xc3, 0x29, 0xeb, 0x16, 0xf0, 0x16,
+ 0x09, 0xf9, 0xe2, 0xdf, 0xe9, 0xa4, 0x15, 0x39, 0x25, 0xf1, 0xe6, 0xf6, 0x1a,
+ 0xc1, 0x12, 0xd6, 0xd0, 0x0c, 0xfa, 0x00, 0xe6, 0xe5, 0xd6, 0xb9, 0x29, 0x64,
+ 0x07, 0x10, 0xc9, 0x0c, 0x17, 0xfc, 0xf9, 0x3a, 0xe4, 0xc1, 0x15, 0xdb, 0x01,
+ 0xcd, 0x4f, 0xc8, 0xbf, 0xda, 0x2a, 0x28, 0x0c, 0x14, 0x0a, 0xbb, 0x15, 0xda,
+ 0xe8, 0x23, 0xfa, 0x36, 0xf4, 0xe7, 0xd1, 0xe1, 0x27, 0x05, 0x5e, 0x1c, 0x39,
+ 0x49, 0xf4, 0x0d, 0x12, 0x09, 0x37, 0xcc, 0xc2, 0xcc, 0xff, 0x5e, 0xce, 0xd1,
+ 0x32, 0x19, 0xf7, 0x02, 0xde, 0x27, 0x0d, 0xcb, 0xf9, 0xf1, 0x16, 0x0d, 0xf9,
+ 0x16, 0xfe, 0x7f, 0xf7, 0x0b, 0x7a, 0xc7, 0xdf, 0xbd, 0x01, 0x0e, 0x07, 0xe6,
+ 0xe7, 0x3d, 0x10, 0x04, 0xd3, 0xf7, 0x08, 0xd8, 0x29, 0x76, 0xca, 0xea, 0xf9,
+ 0x0a, 0x0a, 0x33, 0xe9, 0x15, 0x40, 0xce, 0xd7, 0x28, 0x12, 0xfe, 0xd8, 0xba,
+ 0xe6, 0x05, 0x3f, 0x43, 0x13, 0xce, 0xf3, 0x2a, 0x30, 0x23, 0x70, 0x1c, 0x11,
+ 0xca, 0xf1, 0x08, 0x21, 0x1b, 0x05, 0x9f, 0xcc, 0xe4, 0x24, 0xf9, 0x0e, 0x15,
+ 0x04, 0xfa, 0x0d, 0x17, 0x17, 0x26, 0xe5, 0xf9, 0xbd, 0xea, 0xf8, 0xe2, 0x10,
+ 0xe1, 0xf4, 0x39, 0xfd, 0x05, 0x0c, 0x10, 0x11, 0xd2, 0x27, 0xf2, 0xf3, 0x01,
+ 0x21, 0x0c, 0xdd, 0x24, 0x09, 0xf2, 0xf4, 0x02, 0x3f, 0x51, 0xfd, 0x1f, 0xfc,
+ 0x0f, 0xf3, 0x28, 0xf0, 0xfc, 0xd4, 0xcb, 0xee, 0x50, 0xd6, 0xff, 0x31, 0x22,
+ 0x06, 0x2a, 0xd5, 0x2b, 0x02, 0xee, 0xd3, 0x0f, 0xf7, 0x0c, 0xef, 0x7f, 0xdb,
+ 0x36, 0xec, 0xcf, 0x0e, 0xf0, 0x1a, 0xf5, 0x41, 0x2f, 0x10, 0xdd, 0x13, 0xe5,
+ 0xf5, 0x06, 0x2a, 0x02, 0x13, 0x00, 0x1a, 0x10, 0xea, 0x05, 0x13, 0x12, 0x15,
+ 0x08, 0x1e, 0x07, 0x2d, 0x5e, 0x2c, 0x14, 0x09, 0x4c, 0xe5, 0x31, 0xf1, 0xff,
+ 0x24, 0x33, 0xb9, 0x08, 0xfb, 0x03, 0x28, 0xf0, 0x08, 0x4f, 0xde, 0x18, 0xe2,
+ 0xea, 0x19, 0xf1, 0xfc, 0x33, 0x36, 0x2a, 0x04, 0xf8, 0x21, 0x3f, 0xd7, 0x0d,
+ 0xdf, 0xf4, 0x26, 0xe0, 0xfc, 0xf9, 0xe4, 0xff, 0x07, 0x00, 0xe1, 0x12, 0xfe,
+ 0x55, 0xd4, 0x51, 0x10, 0x1a, 0x4b, 0x0c, 0x26, 0xf9, 0xfe, 0x28, 0x05, 0x20,
+ 0xfe, 0x0e, 0xb8, 0xc2, 0x18, 0xe5, 0x19, 0x3a, 0xce, 0xf7, 0x06, 0x06, 0xb3,
+ 0xea, 0xfc, 0xf6, 0xf1, 0xe9, 0xfa, 0xf4, 0xe7, 0xd7, 0x1b, 0x10, 0xd9, 0x28,
+ 0xc7, 0xfe, 0xfa, 0x20, 0x23, 0x03, 0x0c, 0xfc, 0xdc, 0xf2, 0xe0, 0xf0, 0xf0,
+ 0x15, 0x3e, 0xb7, 0xd5, 0x04, 0xf6, 0x7f, 0x14, 0xdb, 0xef, 0x56, 0xe2, 0x07,
+ 0x29, 0x06, 0x0d, 0xe7, 0x13, 0x43, 0xef, 0xee, 0xf6, 0x26, 0xec, 0xfb, 0xdf,
+ 0xb5, 0x08, 0x1c, 0xde, 0x07, 0x37, 0xe0, 0xa4, 0x1a, 0x17, 0xe7, 0x20, 0xdf,
+ 0xce, 0x07, 0x1e, 0x4a, 0x00, 0xf9, 0x0e, 0xb7, 0x1d, 0xf5, 0xe8, 0xd7, 0x3e,
+ 0xc0, 0xd6, 0xf7, 0x01, 0x25, 0x0d, 0xec, 0x05, 0x13, 0x0d, 0xf4, 0xa2, 0x14,
+ 0x26, 0xe8, 0x22, 0xcd, 0x15, 0x1d, 0xe2, 0xf1, 0x3e, 0xf5, 0x05, 0xfa, 0xc4,
+ 0x11, 0x30, 0x32, 0xd7, 0xd4, 0x04, 0x12, 0x0d, 0x48, 0xe3, 0xa7, 0x07, 0xf0,
+ 0x87, 0x7a, 0xe9, 0x60, 0x5b, 0x00, 0xcb, 0xd4, 0xb6, 0x9d, 0x4a, 0x51, 0xf4,
+ 0xd5, 0xc5, 0xe2, 0x7f, 0xf6, 0x33, 0xc8, 0x6b, 0x06, 0x37, 0xdc, 0xdf, 0x26,
+ 0x0a, 0x50, 0x00, 0x1c, 0x3f, 0xc1, 0x0d, 0x33, 0xd7, 0x1f, 0x90, 0xf9, 0xf3,
+ 0xe7, 0x15, 0xac, 0xe6, 0x11, 0x12, 0xfe, 0x26, 0x22, 0x22, 0x63, 0xf8, 0xa5,
+ 0x4d, 0xeb, 0xc5, 0x54, 0x34, 0xc2, 0xec, 0x33, 0x33, 0x65, 0x0d, 0x3a, 0x4e,
+ 0x1a, 0x05, 0xcf, 0x11, 0x1c, 0xbf, 0x46, 0x6a, 0xe1, 0xfc, 0x34, 0x89, 0x42,
+ 0x2a, 0xea, 0xc4, 0xdb, 0xcc, 0x40, 0xe7, 0xf7, 0xf2, 0x92, 0xdc, 0x0d, 0x55,
+ 0x0e, 0x0a, 0xfc, 0x14, 0x06, 0xf5, 0x1a, 0xb6, 0x0e, 0xd1, 0x53, 0xdb, 0x36,
+ 0x12, 0x16, 0x08, 0xd4, 0x16, 0x0f, 0x33, 0xef, 0xc4, 0x4b, 0xb1, 0x1e, 0xf6,
+ 0xe5, 0x47, 0x0a, 0xfe, 0xc4, 0xfd, 0x04, 0x35, 0xfc, 0x15, 0x2b, 0xe2, 0x23,
+ 0x0c, 0x2a, 0x17, 0x7f, 0xc5, 0xe2, 0xb6, 0xb3, 0x23, 0xf3, 0xd0, 0xac, 0xe5,
+ 0xd0, 0xc5, 0xf7, 0xe2, 0xf4, 0x06, 0x1b, 0x0d, 0x1e, 0xe8, 0x10, 0x0b, 0xe8,
+ 0x1d, 0xe3, 0xdd, 0xc0, 0xe2, 0x15, 0xc7, 0x3f, 0xe9, 0xf5, 0xca, 0x0b, 0xf1,
+ 0x5e, 0x4c, 0x6e, 0xf3, 0xce, 0xde, 0xf9, 0xec, 0x33, 0xe8, 0xf3, 0x13, 0xe1,
+ 0x1a, 0xf5, 0x08, 0xf3, 0x1b, 0x3c, 0x1e, 0xf0, 0xd7, 0x18, 0xfe, 0x2e, 0x24,
+ 0xff, 0x08, 0x3f, 0xa6, 0x36, 0x31, 0xe0, 0x12, 0x0d, 0xd1, 0x49, 0xeb, 0x6e,
+ 0xdb, 0x3e, 0xea, 0x08, 0xe0, 0xc0, 0x19, 0xd8, 0x04, 0xcc, 0xd9, 0x02, 0xff,
+ 0x0d, 0x31, 0x00, 0xcb, 0x0e, 0xed, 0x57, 0x1d, 0xe0, 0xdb, 0x6a, 0xf0, 0xf3,
+ 0xee, 0xbd, 0xc2, 0x27, 0x06, 0xe4, 0xf0, 0x15, 0xcb, 0x09, 0xdf, 0x10, 0xe4,
+ 0xdf, 0xbb, 0xe2, 0x1b, 0x1b, 0x19, 0x14, 0xb6, 0x1a, 0x95, 0x50, 0xdf, 0x32,
+ 0xfd, 0xd6, 0x20, 0x1e, 0x00, 0x20, 0x14, 0x3f, 0x3d, 0x38, 0x09, 0x10, 0x31,
+ 0x28, 0x0f, 0xeb, 0xfb, 0xda, 0xd2, 0x0c, 0xe7, 0x31, 0xe8, 0x0f, 0x1e, 0xdb,
+ 0x30, 0x27, 0xa2, 0x00, 0x03, 0xfe, 0x01, 0x08, 0xe7, 0x89, 0xdd, 0x9b, 0x7f,
+ 0x0b, 0x01, 0xf1, 0xea, 0xf5, 0xdc, 0xae, 0xf5, 0x28, 0x02, 0x42, 0xfb, 0x53,
+ 0xea, 0x25, 0x13, 0x18, 0xfc, 0x19, 0x10, 0x3a, 0xe5, 0x04, 0xe5, 0xf4, 0x0b,
+ 0xf8, 0xfa, 0xff, 0x29, 0x3e, 0x0b, 0x15, 0x00, 0x26, 0xfb, 0x2f, 0x08, 0x2c,
+ 0xc9, 0x12, 0xda, 0xe2, 0x1f, 0xe1, 0x2c, 0x4f, 0x69, 0x13, 0x07, 0xcb, 0xd6,
+ 0xe6, 0x1c, 0xf7, 0x15, 0x04, 0x19, 0xd8, 0x06, 0x24, 0x03, 0x04, 0x0b, 0xe3,
+ 0xf8, 0x1b, 0xce, 0xeb, 0x01, 0x05, 0xf9, 0x05, 0xff, 0xdd, 0xe9, 0x16, 0x1f,
+ 0x0b, 0x0f, 0xed, 0xd8, 0x32, 0x27, 0xda, 0xe4, 0x2a, 0xfb, 0xd1, 0xed, 0x07,
+ 0xd9, 0xfd, 0x13, 0xe9, 0x11, 0x0d, 0xd3, 0xf9, 0x11, 0xf8, 0xfa, 0xc4, 0xe6,
+ 0xe5, 0x0c, 0xd8, 0xed, 0x10, 0xcf, 0xf9, 0xd9, 0x50, 0x0b, 0x18, 0xf8, 0xe2,
+ 0xf5, 0xe9, 0xee, 0xea, 0xe3, 0x10, 0x2f, 0xd5, 0xf4, 0xe5, 0xdf, 0xd3, 0xde,
+ 0x22, 0x09, 0xf2, 0x02, 0xe1, 0xfc, 0xf2, 0xe3, 0xb7, 0x25, 0x05, 0x22, 0xd0,
+ 0x1d, 0x10, 0x39, 0xf4, 0xf8, 0xd2, 0x09, 0x20, 0x7f, 0xe8, 0x1a, 0x13, 0x0c,
+ 0x11, 0xf6, 0x10, 0xe9, 0xf0, 0x17, 0x33, 0xd2, 0xf7, 0xde, 0x0a, 0xe3, 0xd6,
+ 0xf8, 0x12, 0x00, 0xb4, 0x05, 0xe0, 0x00, 0x1a, 0xef, 0xdc, 0xd0, 0x11, 0xe0,
+ 0x41, 0xdf, 0x06, 0x13, 0x15, 0x1e, 0xe8, 0xc2, 0xc0, 0xe7, 0x16, 0x19, 0xed,
+ 0x50, 0xd5, 0xe2, 0x04, 0xcb, 0x17, 0x04, 0x0c, 0xa6, 0xa6, 0x06, 0xee, 0x33,
+ 0x1a, 0x44, 0x30, 0x12, 0xda, 0x39, 0x15, 0x9a, 0xea, 0x22, 0x1a, 0xc8, 0x21,
+ 0xd2, 0xcb, 0x37, 0xcb, 0x04, 0xe6, 0x48, 0x03, 0x28, 0x13, 0x0a, 0xf4, 0xdd,
+ 0xea, 0xd8, 0xed, 0x99, 0xfa, 0xb7, 0xce, 0xec, 0x26, 0xfb, 0x2e, 0x23, 0x3e,
+ 0xfa, 0x9e, 0xb7, 0xc7, 0x3d, 0x36, 0xdc, 0xf3, 0x32, 0x33, 0xe3, 0xf3, 0xe4,
+ 0xfd, 0x0e, 0xef, 0xef, 0xc8, 0xe1, 0xeb, 0x52, 0x11, 0xd7, 0xf2, 0xd3, 0x30,
+ 0xec, 0x53, 0xe4, 0xe8, 0x7f, 0x01, 0xf3, 0x28, 0xdb, 0x45, 0x2c, 0xf7, 0x33,
+ 0x0b, 0x20, 0x00, 0x5d, 0xf6, 0x25, 0xd4, 0x04, 0xf7, 0x1b, 0x1a, 0x03, 0x14,
+ 0xb8, 0x10, 0xdd, 0xe9, 0x31, 0x3c, 0xd5, 0x01, 0xfb, 0xfd, 0xd2, 0xd7, 0x37,
+ 0xdf, 0x0a, 0x40, 0x1f, 0xe5, 0xd8, 0xd7, 0x9f, 0xcd, 0xe6, 0x1f, 0x02, 0xf9,
+ 0xe2, 0x7b, 0x2f, 0x2f, 0x22, 0x03, 0xf1, 0xfc, 0x19, 0xd5, 0x41, 0x03, 0x4d,
+ 0xf7, 0xd1, 0x19, 0x30, 0x04, 0xae, 0x25, 0x59, 0x7f, 0xc4, 0x09, 0x28, 0x31,
+ 0x0b, 0x24, 0xb8, 0x6e, 0xbd, 0xe7, 0x33, 0xd4, 0xfa, 0xda, 0x1e, 0xe3, 0xe6,
+ 0x2a, 0xb5, 0x2d, 0x1f, 0xf8, 0xbc, 0x48, 0x09, 0x2e, 0xfe, 0x4a, 0x24, 0x13,
+ 0xd1, 0xde, 0x52, 0xb8, 0x34, 0x9f, 0x12, 0xd2, 0xd5, 0xf5, 0xd6, 0x03, 0x14,
+ 0x1f, 0x11, 0x15, 0x47, 0x71, 0x13, 0x02, 0xde, 0xdc, 0xd9, 0x01, 0x64, 0x51,
+ 0x04, 0xb0, 0x1d, 0x22, 0x03, 0xc7, 0xbc, 0x24, 0xc1, 0xca, 0x0d, 0x04, 0x41,
+ 0x1c, 0x3b, 0xcc, 0x11, 0xdd, 0x0b, 0xe8, 0x34, 0x30, 0xf9, 0xf1, 0x30, 0xba,
+ 0xde, 0x94, 0x07, 0x4a, 0x30, 0x4d, 0x20, 0x13, 0x04, 0xf5, 0xda, 0xf1, 0xe4,
+ 0xfe, 0x24, 0x43, 0xf2, 0xfc, 0x0a, 0xd3, 0x1b, 0x14, 0x0f, 0xd6, 0xf4, 0xfa,
+ 0xf4, 0x15, 0xed, 0x41, 0x37, 0xdc, 0xe3, 0xe6, 0xe9, 0x0d, 0xff, 0x11, 0xcc,
+ 0x1b, 0x66, 0x44, 0x9e, 0x27, 0x1a, 0x33, 0xf7, 0x18, 0xc2, 0xdf, 0xea, 0x28,
+ 0x0f, 0xf5, 0x02, 0x06, 0x1c, 0xe7, 0x09, 0xf2, 0x35, 0xf1, 0x05, 0x1d, 0x9d,
+ 0x3a, 0x03, 0x1c, 0x41, 0xd4, 0xfb, 0x56, 0x12, 0x1d, 0x15, 0xf6, 0x09, 0x0e,
+ 0xe4, 0xee, 0x05, 0x0c, 0xb3, 0xee, 0xc9, 0xea, 0xe2, 0x41, 0xe0, 0xdb, 0x19,
+ 0x35, 0xf7, 0x6b, 0x2f, 0xdf, 0xc2, 0xff, 0x03, 0xeb, 0xf2, 0x3e, 0x19, 0xcf,
+ 0x32, 0xfa, 0xb8, 0x2f, 0x04, 0x25, 0xca, 0x1f, 0x09, 0x68, 0x3e, 0x13, 0x07,
+ 0xdc, 0x07, 0x01, 0xe4, 0x1b, 0x7f, 0x38, 0xf5, 0xff, 0xf8, 0xe0, 0xf3, 0x05,
+ 0x04, 0xdb, 0xdf, 0x33, 0x31, 0x1d, 0xf6, 0x1e, 0xe2, 0x0b, 0x10, 0xf9, 0x0a,
+ 0x0d, 0xaf, 0xdb, 0xe6, 0xde, 0x10, 0x04, 0x11, 0xb5, 0xd3, 0x37, 0xd0, 0xe7,
+ 0x0f, 0x16, 0xd5, 0xd1, 0x13, 0xd0, 0x1e, 0x18, 0x3b, 0xda, 0x01, 0x35, 0x1c,
+ 0xe7, 0xba, 0xfd, 0xe3, 0x2d, 0x8e, 0x18, 0x3c, 0xf1, 0x05, 0x29, 0x05, 0x30,
+ 0xa6, 0xd5, 0x09, 0xf0, 0x7f, 0xe2, 0xe0, 0xdf, 0xe6, 0xd6, 0xef, 0x0d, 0xb9,
+ 0x16, 0x3f, 0x06, 0x0c, 0x2a, 0xdf, 0x2f, 0x16, 0xeb, 0xe8, 0xbf, 0x6e, 0xf2,
+ 0xe8, 0xc9, 0x7c, 0x30, 0xf4, 0xdd, 0xef, 0xeb, 0xd2, 0xbb, 0x1e, 0x01, 0x01,
+ 0x3c, 0xdf, 0xe1, 0xff, 0xc1, 0x28, 0xde, 0x07, 0x2b, 0x0a, 0x14, 0xb9, 0x13,
+ 0xcc, 0x23, 0xfe, 0x57, 0xfb, 0xbb, 0xed, 0x05, 0x20, 0x36, 0xc1, 0x52, 0xf7,
+ 0xb6, 0x59, 0x0e, 0xf0, 0xe8, 0xe1, 0xf9, 0xee, 0xf6, 0x30, 0x07, 0x0a, 0x52,
+ 0x3d, 0xf4, 0xe8, 0xe0, 0x06, 0xdb, 0xe8, 0x0a, 0x45, 0x18, 0x2d, 0xd2, 0xb4,
+ 0xef, 0xc7, 0xb6, 0xe9, 0xc8, 0x5f, 0x0d, 0xc9, 0x05, 0xef, 0x4a, 0xd9, 0xb1,
+ 0x32, 0x0d, 0x44, 0x18, 0x90, 0x0a, 0x1f, 0xf4, 0xe8, 0xf2, 0x86, 0xec, 0x66,
+ 0x19, 0x1e, 0x04, 0x6f, 0xb0, 0xda, 0x1f, 0x07, 0x00, 0xde, 0x41, 0xc9, 0xeb,
+ 0x41, 0xeb, 0x14, 0xa1, 0x0a, 0xec, 0xb1, 0x62, 0xae, 0x0d, 0x9b, 0xd7, 0x14,
+ 0xeb, 0x0e, 0x13, 0xff, 0x47, 0xcc, 0xfc, 0x49, 0xca, 0x58, 0xc2, 0x26, 0xb8,
+ 0x1d, 0x45, 0xa7, 0xec, 0xe5, 0x33, 0x0f, 0x01, 0xc7, 0x06, 0xca, 0xf3, 0xd3,
+ 0x2a, 0xfc, 0xda, 0x0c, 0x05, 0xc4, 0x03, 0xda, 0x44, 0xd1, 0xed, 0xd8, 0x2a,
+ 0x0f, 0x2e, 0x19, 0xf1, 0x06, 0x2f, 0xee, 0xcd, 0xe9, 0xda, 0x30, 0x03, 0x19,
+ 0x04, 0x62, 0xf6, 0x19, 0xdc, 0xe5, 0x61, 0xb4, 0xef, 0xf6, 0x81, 0xa6, 0xdb,
+ 0x59, 0xdf, 0xf1, 0x00, 0xdb, 0x08, 0xf0, 0x2c, 0xc7, 0xef, 0xc0, 0xe0, 0xe5,
+ 0x0a, 0x01, 0x2b, 0x2d, 0x09, 0xff, 0x82, 0xf4, 0xe0, 0xf0, 0xd0, 0xd2, 0x59,
+ 0x7d, 0x20, 0xc5, 0x34, 0xa9, 0x3f, 0x4b, 0xd5, 0x02, 0xe3, 0x1a, 0xf0, 0xbb,
+ 0xe6, 0xd9, 0xe7, 0xfa, 0x0f, 0x35, 0xef, 0xd7, 0xdb, 0x06, 0x40, 0xf0, 0xa9,
+ 0xff, 0xf0, 0x22, 0x37, 0xfe, 0xe7, 0x25, 0xa3, 0x34, 0xd4, 0x2d, 0xdf, 0x14,
+ 0x90, 0x29, 0x2a, 0x1c, 0xc5, 0x3f, 0xd3, 0xdc, 0x06, 0x0c, 0xb6, 0x7f, 0x69,
+ 0x52, 0x10, 0xca, 0x10, 0x27, 0xc2, 0xc1, 0xdc, 0xc1, 0x02, 0xe8, 0x21, 0xff,
+ 0xf6, 0x15, 0x17, 0xf7, 0xcb, 0x1f, 0x14, 0xa2, 0xe3, 0xcc, 0x5a, 0x0e, 0x46,
+ 0x10, 0xcd, 0x00, 0x12, 0xd5, 0x0e, 0xf4, 0xc9, 0x28, 0xc3, 0xb8, 0xf0, 0x01,
+ 0xb4, 0xf4, 0x1d, 0x8a, 0x33, 0x1a, 0xde, 0xdb, 0x37, 0x11, 0xf1, 0x1a, 0x14,
+ 0xfd, 0x4f, 0xd4, 0xc2, 0x09, 0xed, 0x3a, 0xf8, 0xb3, 0xc3, 0xec, 0x34, 0x05,
+ 0xe0, 0x35, 0x11, 0xd6, 0x08, 0xe8, 0xc4, 0x2b, 0x22, 0xf6, 0xf8, 0x02, 0x24,
+ 0x19, 0x46, 0xde, 0xaf, 0x34, 0xff, 0x04, 0xe7, 0x11, 0x16, 0xe5, 0xbd, 0xe5,
+ 0x1a, 0x1a, 0xf9, 0xe1, 0x16, 0x16, 0x5d, 0xf1, 0xbe, 0x32, 0xd7, 0x05, 0x01,
+ 0xd5, 0xee, 0xd2, 0x39, 0xd2, 0x1a, 0xe3, 0xea, 0x57, 0x6a, 0x31, 0xa5, 0xe4,
+ 0xc9, 0xf8, 0x05, 0xa4, 0xc8, 0x25, 0xde, 0xaf, 0x13, 0x7f, 0x16, 0xb7, 0xb2,
+ 0xfa, 0x32, 0xe2, 0x4e, 0x11, 0xa5, 0x3b, 0x06, 0xee, 0x42, 0xd8, 0x3a, 0xfd,
+ 0xc6, 0x1f, 0x50, 0x11, 0xf8, 0x30, 0xf6, 0xeb, 0xfd, 0xf4, 0xfa, 0xf7, 0x38,
+ 0x0b, 0x3a, 0x34, 0x47, 0xf8, 0x25, 0xfc, 0xe4, 0x19, 0x35, 0x2e, 0xd2, 0xcb,
+ 0xd5, 0xe8, 0x24, 0xcb, 0x05, 0x21, 0x12, 0xf2, 0xfb, 0x1e, 0x34, 0xed, 0xfe,
+ 0xf6, 0x39, 0xde, 0x27, 0x0a, 0x28, 0x1a, 0x21, 0x0b, 0x11, 0x00, 0xf5, 0xf7,
+ 0x02, 0x35, 0x0f, 0xe0, 0x1f, 0xe5, 0xd9, 0x70, 0x2e, 0x08, 0xd6, 0x3a, 0x1f,
+ 0xda, 0x0f, 0x0a, 0xf0, 0xdb, 0xe3, 0x01, 0xe6, 0xe2, 0xdb, 0xec, 0xf5, 0xf6,
+ 0x0a, 0x8e, 0xd8, 0xf7, 0xb1, 0xef, 0x26, 0x0a, 0x1a, 0x19, 0xc2, 0x09, 0xe1,
+ 0xe4, 0x44, 0xdc, 0x35, 0x19, 0x16, 0xea, 0xb9, 0x27, 0x05, 0x24, 0x25, 0xda,
+ 0xfa, 0xe7, 0x0e, 0x0c, 0xfc, 0x42, 0xa9, 0xd8, 0x1c, 0x23, 0x4a, 0x4c, 0xf8,
+ 0x40, 0x11, 0xf4, 0x26, 0xf2, 0xeb, 0xca, 0x0b, 0xe7, 0xfc, 0x2a, 0xd2, 0x08,
+ 0xd0, 0xf5, 0xb8, 0xf9, 0x61, 0x0e, 0xf6, 0xdc, 0xe4, 0xdb, 0xd5, 0xfd, 0xb2,
+ 0x07, 0x0f, 0xc0, 0x81, 0x00, 0x22, 0xfe, 0xdb, 0x0c, 0xc6, 0xff, 0x15, 0x20,
+ 0xfa, 0xbc, 0xd2, 0xc6, 0xb9, 0xf6, 0xf2, 0xfa, 0x19, 0x28, 0xef, 0x32, 0xe3,
+ 0xec, 0x28, 0x1a, 0x59, 0xc9, 0xf8, 0x08, 0xc6, 0x20, 0xf3, 0x22, 0xcd, 0xbe,
+ 0x20, 0x29, 0xd4, 0x0f, 0x30, 0x36, 0xc2, 0x1f, 0x0e, 0xdc, 0x4f, 0xf9, 0x03,
+ 0xd6, 0x1c, 0x42, 0xed, 0xee, 0x15, 0x24, 0x33, 0xe7, 0x61, 0x05, 0xc8, 0x0d,
+ 0x3c, 0xc8, 0x00, 0xdd, 0xe1, 0x15, 0x4e, 0x22, 0xfe, 0x2d, 0x04, 0x00, 0x44,
+ 0xc3, 0xee, 0x17, 0xf8, 0x36, 0xee, 0x2c, 0x3c, 0xec, 0x7f, 0x04, 0x18, 0xc6,
+ 0xc3, 0x1f, 0xd6, 0x1f, 0xcb, 0xfe, 0x26, 0xeb, 0x09, 0x4a, 0x33, 0x15, 0x41,
+ 0x27, 0x05, 0x18, 0x5d, 0x06, 0xf7, 0xf9, 0x04, 0xd5, 0xf3, 0xff, 0x2d, 0xea,
+ 0xd7, 0x5c, 0x1c, 0xcb, 0x1c, 0x1d, 0x0d, 0xd6, 0x42, 0x15, 0x6f, 0x6f, 0x27,
+ 0xdf, 0x02, 0x1b, 0x03, 0x21, 0x2d, 0x43, 0x0a, 0x14, 0xf5, 0xe8, 0xef, 0x49,
+ 0x10, 0x1e, 0x1e, 0xf6, 0x52, 0x33, 0xfe, 0x21, 0x23, 0xd3, 0xed, 0xd6, 0x15,
+ 0xed, 0xdb, 0x27, 0x02, 0xb8, 0x30, 0x2c, 0xf7, 0xe4, 0xf4, 0x35, 0xc2, 0xbf,
+ 0xd7, 0xdd, 0xf9, 0x42, 0xfe, 0xd7, 0x20, 0xd8, 0x7f, 0xf7, 0xc2, 0x2b, 0x28,
+ 0xee, 0x00, 0xce, 0x09, 0xe3, 0x23, 0x23, 0xc9, 0x13, 0xf7, 0x14, 0xe7, 0xd4,
+ 0xf8, 0xf3, 0x22, 0xf3, 0xf4, 0x07, 0xa1, 0xf4, 0xbb, 0x03, 0xb3, 0x29, 0x17,
+ 0x20, 0xff, 0xe8, 0x05, 0x56, 0x72, 0x2a, 0x3b, 0x3c, 0xf6, 0x03, 0x27, 0xb6,
+ 0xf5, 0x15, 0xdc, 0x7f, 0x56, 0x0c, 0xd7, 0xed, 0x76, 0xb2, 0x15, 0x49, 0xf5,
+ 0x03, 0xde, 0xd6, 0x09, 0xc6, 0xe2, 0x28, 0x32, 0xe1, 0x29, 0x53, 0xfe, 0x34,
+ 0xf8, 0xe5, 0x05, 0x29, 0x09, 0xed, 0x51, 0x0a, 0x33, 0xf6, 0xf1, 0xfa, 0x0c,
+ 0xf4, 0x24, 0xad, 0x42, 0xe0, 0xa7, 0xfc, 0xc9, 0xad, 0x04, 0xeb, 0x31, 0x22,
+ 0xdd, 0x14, 0xf7, 0x0b, 0x9e, 0x0d, 0xd2, 0xee, 0xdd, 0xfb, 0x03, 0xca, 0x0a,
+ 0x0c, 0xdf, 0xd8, 0x16, 0xf3, 0xcb, 0x5a, 0x38, 0xe7, 0xd9, 0xee, 0xd6, 0x01,
+ 0x0c, 0xc4, 0x5d, 0xfd, 0xe7, 0xee, 0x0a, 0xf7, 0x25, 0x5d, 0x0b, 0xd9, 0x10,
+ 0xda, 0xd4, 0xfb, 0xc3, 0x06, 0x2f, 0x1f, 0x20, 0xe1, 0x09, 0xf6, 0x19, 0x0a,
+ 0x2c, 0xda, 0xa2, 0xec, 0xda, 0x21, 0x0f, 0x25, 0xc3, 0xf3, 0xeb, 0x40, 0xe5,
+ 0x01, 0xe9, 0x04, 0xf8, 0x05, 0xcf, 0xe4, 0x51, 0x35, 0x0c, 0xea, 0xe3, 0xc0,
+ 0xdc, 0xd6, 0xec, 0x64, 0x38, 0x7f, 0xd3, 0x5f, 0xde, 0x08, 0xe7, 0x2e, 0xfe,
+ 0xec, 0xd5, 0xeb, 0x33, 0xe0, 0xcf, 0x19, 0xde, 0x36, 0xf4, 0xe8, 0x19, 0xdb,
+ 0xee, 0xf3, 0xf4, 0x27, 0x22, 0x12, 0xf4, 0xd8, 0xe3, 0xd0, 0xe2, 0x14, 0x3e,
+ 0xfa, 0xed, 0xeb, 0x03, 0xfb, 0x49, 0x0a, 0x31, 0xec, 0x22, 0xe4, 0x8e, 0xf7,
+ 0xed, 0xd5, 0xf2, 0x09, 0xe0, 0x0f, 0xea, 0xa8, 0xec, 0x3a, 0x11, 0xd7, 0xc9,
+ 0x14, 0x93, 0x17, 0xff, 0x01, 0xeb, 0x0e, 0x02, 0xe8, 0x6a, 0xe1, 0x3d, 0x3a,
+ 0xb7, 0xd2, 0xdd, 0x18, 0x3f, 0xf2, 0x4a, 0xc6, 0x08, 0x7f, 0x56, 0xe5, 0xe5,
+ 0x36, 0xe7, 0xee, 0xe4, 0xa1, 0x95, 0xb0, 0x47, 0x04, 0x19, 0xfd, 0xdd, 0x28,
+ 0xd6, 0x4a, 0xd1, 0x04, 0xcf, 0xbd, 0xf1, 0x9b, 0xfc, 0xe5, 0x2a, 0x2c, 0x29,
+ 0xfc, 0xcd, 0x2a, 0xb3, 0x0a, 0xe9, 0x0f, 0x94, 0x6d, 0x20, 0x2b, 0xff, 0xc3,
+ 0xe9, 0x12, 0xb3, 0xa6, 0x5a, 0xbf, 0xfb, 0x14, 0x36, 0x2a, 0x05, 0x3b, 0x51,
+ 0x0f, 0xf9, 0xc7, 0xdd, 0xdb, 0x30, 0x9d, 0xbc, 0x2f, 0x07, 0x0b, 0x28, 0x1a,
+ 0xb4, 0xbd, 0x1c, 0x0a, 0x5c, 0x32, 0xe0, 0xee, 0x1a, 0x15, 0x22, 0x13, 0x03,
+ 0x1d, 0xfb, 0x02, 0x6c, 0xcb, 0x01, 0x62, 0xc2, 0x1f, 0x4d, 0x19, 0x3d, 0x31,
+ 0xf5, 0x04, 0xee, 0xf9, 0x45, 0x38, 0x05, 0x08, 0xe9, 0xdd, 0x2a, 0xe4, 0xc3,
+ 0xfc, 0x13, 0x02, 0xe5, 0x30, 0xf0, 0x12, 0xe9, 0x4a, 0xda, 0x21, 0x29, 0x30,
+ 0x2e, 0xc0, 0x36, 0x05, 0xe0, 0xaa, 0xda, 0x10, 0xd2, 0x32, 0xeb, 0xf3, 0xf0,
+ 0x7f, 0x22, 0x36, 0x08, 0xec, 0x9b, 0xb6, 0xdb, 0xe1, 0xfe, 0x07, 0xd7, 0xf2,
+ 0xb3, 0x0e, 0x1e, 0xec, 0x25, 0x32, 0x1d, 0x2d, 0x11, 0x1e, 0xe1, 0x69, 0x35,
+ 0x23, 0x51, 0x00, 0xf1, 0x64, 0xfd, 0xba, 0x51, 0xdb, 0xfb, 0xcb, 0xfa, 0x4f,
+ 0x01, 0x22, 0x37, 0x3c, 0x2d, 0x47, 0xc9, 0xe4, 0x0e, 0x0a, 0xc2, 0x6b, 0xa4,
+ 0x01, 0xbd, 0xe4, 0xd4, 0xde, 0x60, 0x0e, 0x00, 0xc6, 0x39, 0x06, 0xed, 0xf3,
+ 0xcf, 0xfb, 0x3a, 0xf4, 0xdd, 0xf4, 0xd5, 0x22, 0x2f, 0x10, 0x57, 0x25, 0x09,
+ 0xdc, 0x37, 0xb7, 0x09, 0xf5, 0x18, 0xfe, 0x28, 0x27, 0x10, 0x49, 0x18, 0xde,
+ 0x08, 0xd3, 0x1b, 0x1d, 0xee, 0xc6, 0x55, 0xde, 0xd0, 0xf1, 0xff, 0xeb, 0x18,
+ 0x79, 0xfd, 0xbf, 0xf3, 0x05, 0x09, 0x1e, 0x24, 0xec, 0xc7, 0xe5, 0xfe, 0x0c,
+ 0x25, 0x3a, 0x7f, 0xf9, 0x0a, 0xd2, 0x3a, 0xc1, 0x01, 0x50, 0x05, 0xe9, 0x37,
+ 0x20, 0xfc, 0xe7, 0x1b, 0xf8, 0xeb, 0xdc, 0x13, 0xec, 0x1e, 0x0f, 0xef, 0x29,
+ 0xe7, 0xbf, 0x03, 0xda, 0x02, 0xdf, 0xea, 0x10, 0xe9, 0xfa, 0x77, 0xed, 0x47,
+ 0xe2, 0x1d, 0x1d, 0x0c, 0x66, 0xe4, 0xca, 0xc0, 0x1d, 0x6f, 0xfa, 0xeb, 0x0f,
+ 0xb3, 0xfb, 0xec, 0xff, 0x04, 0xd4, 0xe1, 0x08, 0x34, 0xc3, 0xe3, 0xe2, 0x03,
+ 0xde, 0x0c, 0xeb, 0xfb, 0x1a, 0x12, 0xe6, 0xdc, 0x19, 0x31, 0xfe, 0xe0, 0x16,
+ 0x4d, 0x32, 0x51, 0xe7, 0xdf, 0x13, 0xcf, 0x41, 0xf9, 0x4b, 0x28, 0xf9, 0xea,
+ 0xe9, 0xbd, 0x15, 0xcc, 0x28, 0x18, 0xef, 0xba, 0xdf, 0x26, 0x2c, 0x1b, 0xde,
+ 0x09, 0xeb, 0xe9, 0x0d, 0xb4, 0x6e, 0xcc, 0x43, 0x1a, 0x2b, 0xf1, 0xf9, 0x3c,
+ 0xe5, 0x30, 0x28, 0x05, 0xd8, 0x3e, 0x45, 0x17, 0xe2, 0xde, 0x1f, 0x2e, 0x30,
+ 0x34, 0xcc, 0xb2, 0xda, 0xd8, 0xf7, 0xe0, 0x0f, 0xf4, 0x94, 0x03, 0xc4, 0xcf,
+ 0x46, 0x3f, 0x18, 0xd8, 0x7f, 0x29, 0x0a, 0xa1, 0x27, 0x48, 0xfa, 0xe3, 0xf4,
+ 0xbe, 0xcf, 0x29, 0x0a, 0xf5, 0xf7, 0x39, 0x00, 0xc7, 0x47, 0x08, 0xeb, 0xa8,
+ 0xb7, 0xc6, 0x07, 0xf2, 0xf3, 0x37, 0x53, 0x4b, 0x0c, 0x19, 0xc4, 0xff, 0xe3,
+ 0x2a, 0x18, 0x17, 0x12, 0x9a, 0x25, 0x06, 0x21, 0x3e, 0xd0, 0xb5, 0x11, 0x0d,
+ 0x0b, 0x8e, 0x51, 0xdc, 0xed, 0x9f, 0x13, 0xa6, 0x25, 0x23, 0x07, 0xf5, 0xcc,
+ 0xf9, 0xf0, 0x76, 0x08, 0xd0, 0xe5, 0x0d, 0xf0, 0xf2, 0xd7, 0xeb, 0x74, 0xe0,
+ 0x29, 0xd7, 0xdb, 0xcb, 0xc1, 0x2a, 0xb6, 0x12, 0xd7, 0x17, 0x2e, 0x3a, 0x38,
+ 0xd9, 0x34, 0xe3, 0x11, 0x19, 0x03, 0x05, 0x1f, 0xd5, 0xe4, 0x4a, 0x24, 0xdf,
+ 0x16, 0xf2, 0x21, 0x08, 0xcd, 0x2c, 0xdb, 0x21, 0xbd, 0x3a, 0xf7, 0xf9, 0xba,
+ 0xfb, 0x8a, 0x88, 0x23, 0xd3, 0xc6, 0xcd, 0x34, 0xd8, 0x0c, 0xed, 0xc3, 0xee,
+ 0x1b, 0xbe, 0xf2, 0x40, 0xe0, 0xc3, 0x03, 0x1b, 0xe9, 0x36, 0x02, 0xf1, 0xf5,
+ 0xb3, 0x31, 0x2f, 0xf7, 0xdf, 0xf4, 0x6c, 0x0d, 0x81, 0xf8, 0x15, 0x0e, 0x10,
+ 0xf7, 0x45, 0xc4, 0xdf, 0xb6, 0xdf, 0x34, 0x02, 0xe5, 0xff, 0xfd, 0xfe, 0x19,
+ 0xfa, 0x15, 0xe7, 0x27, 0xfb, 0x6d, 0xcd, 0xea, 0xa7, 0x07, 0x85, 0x37, 0x07,
+ 0xd7, 0xf5, 0x07, 0xf5, 0xee, 0xc8, 0x37, 0xd1, 0xd7, 0x03, 0xe5, 0xe8, 0x11,
+ 0xf7, 0x3c, 0xe4, 0x29, 0x40, 0x20, 0xd6, 0x07, 0xaf, 0x35, 0xb7, 0xe6, 0xeb,
+ 0x2e, 0x2d, 0x0b, 0xfd, 0xf2, 0xeb, 0xe8, 0xf0, 0x4d, 0xf8, 0x28, 0xf8, 0xf1,
+ 0xf2, 0x0e, 0xd8, 0x18, 0xf7, 0xe9, 0x0b, 0xdb, 0x29, 0xf7, 0xed, 0xfb, 0x0e,
+ 0x5b, 0x10, 0xd6, 0x45, 0xf3, 0xae, 0xd6, 0xdc, 0x3a, 0x3c, 0xbc, 0xed, 0xb7,
+ 0xed, 0x1e, 0xe7, 0xe6, 0x05, 0x1a, 0x04, 0x20, 0xe4, 0xdd, 0xd8, 0xfb, 0x00,
+ 0xe1, 0xfb, 0xe4, 0xdc, 0x04, 0xc3, 0xf6, 0x37, 0x14, 0x02, 0x26, 0xe7, 0xe3,
+ 0xe8, 0xbd, 0xea, 0x23, 0xbe, 0x0e, 0xe6, 0x3f, 0x1c, 0x3a, 0x74, 0xcf, 0x38,
+ 0xc2, 0xf6, 0xc2, 0x12, 0x41, 0xfd, 0x35, 0x45, 0x35, 0xf8, 0x20, 0x0c, 0x07,
+ 0xad, 0xfa, 0x10, 0x0b, 0xd3, 0xf3, 0xd4, 0xdd, 0xf4, 0x03, 0x0b, 0xd7, 0x2a,
+ 0x3a, 0x07, 0x26, 0x14, 0xd9, 0xb3, 0x01, 0xdf, 0xdb, 0xf3, 0xdf, 0xd6, 0xfa,
+ 0x3e, 0xb8, 0xea, 0x37, 0xe8, 0x03, 0x1e, 0xe0, 0x0c, 0x3e, 0xf9, 0xca, 0xbe,
+ 0x7f, 0xfe, 0x4a, 0x17, 0x3d, 0x01, 0xcc, 0xf9, 0x4e, 0xdb, 0xd6, 0xd5, 0xdc,
+ 0xd2, 0xfe, 0x2b, 0x03, 0xdb, 0xd9, 0x40, 0xf2, 0xf3, 0x2a, 0xb8, 0x0e, 0xff,
+ 0xc0, 0x02, 0xad, 0xed, 0xf2, 0xed, 0x25, 0xf8, 0x8f, 0xec, 0xfa, 0x20, 0xe6,
+ 0xf0, 0x0b, 0xcd, 0x3d, 0x03, 0x11, 0x15, 0x18, 0x09, 0x0a, 0x46, 0x14, 0xff,
+ 0xfd, 0xb1, 0x1f, 0x30, 0xf7, 0x1d, 0xf5, 0x04, 0x23, 0x2c, 0xf6, 0x33, 0x4b,
+ 0xc1, 0x0a, 0x33, 0xb6, 0xc2, 0x1c, 0xac, 0x04, 0x45, 0xee, 0xfc, 0xa2, 0x16,
+ 0xfc, 0x00, 0x16, 0xee, 0x16, 0xf3, 0x26, 0xcc, 0x05, 0xea, 0xca, 0x34, 0xba,
+ 0x0f, 0x2e, 0x16, 0xd9, 0xcc, 0x06, 0x0c, 0x06, 0x29, 0x30, 0x14, 0xfb, 0xe3,
+ 0xfc, 0xfe, 0x37, 0x52, 0xdd, 0xfd, 0xea, 0xc2, 0x1e, 0xdf, 0x2a, 0x3b, 0x0d,
+ 0xf2, 0xed, 0x1c, 0xf2, 0x81, 0xd9, 0xe8, 0x25, 0x78, 0x2e, 0x20, 0xe8, 0xa8,
+ 0x12, 0x29, 0x26, 0xf8, 0x3c, 0xfb, 0x3f, 0x14, 0x75, 0xfd, 0xb5, 0x06, 0x65,
+ 0x92, 0xe5, 0x44, 0x0a, 0xc7, 0xba, 0x28, 0xff, 0xde, 0x0c, 0x20, 0x35, 0xd1,
+ 0x21, 0x1a, 0x69, 0x33, 0x50, 0x1d, 0x27, 0xda, 0x8d, 0x1c, 0xea, 0x31, 0x12,
+ 0x57, 0x11, 0x1f, 0xfc, 0xa4, 0xfd, 0xe3, 0xea, 0x09, 0xef, 0xce, 0x27, 0x09,
+ 0x4a, 0xe7, 0xea, 0x0c, 0xcc, 0xef, 0x3c, 0x56, 0xee, 0xfa, 0x3b, 0x1b, 0xdb,
+ 0x23, 0xec, 0x23, 0xb4, 0xc9, 0xdd, 0xfd, 0x56, 0xe1, 0x44, 0xbd, 0xb8, 0x3f,
+ 0xc5, 0xc6, 0xef, 0xe1, 0x1e, 0xea, 0xe7, 0xd4, 0x0d, 0x3b, 0x5d, 0x73, 0x29,
+ 0x0b, 0xdd, 0xfb, 0xf0, 0x53, 0xc7, 0xb3, 0x21, 0x3d, 0x81, 0xb6, 0x11, 0xbb,
+ 0xb9, 0x0d, 0x14, 0x6a, 0x65, 0xfe, 0x9e, 0x0d, 0x2a, 0x45, 0x9d, 0x29, 0x31,
+ 0x04, 0xe5, 0xf5, 0x37, 0x40, 0x25, 0xca, 0xfc, 0x57, 0x1f, 0xde, 0x37, 0x50,
+ 0x33, 0x1b, 0x04, 0xfd, 0x14, 0xef, 0x37, 0x34, 0x3f, 0xf3, 0xd3, 0xc3, 0xa8,
+ 0xf4, 0x1d, 0xd7, 0x91, 0x2d, 0xe1, 0x02, 0xb9, 0xf9, 0xb9, 0xcb, 0x2b, 0xd3,
+ 0x04, 0xe0, 0x34, 0x17, 0xec, 0x0a, 0xda, 0xe3, 0x14, 0xd4, 0x25, 0x24, 0x97,
+ 0xfe, 0xe4, 0x0e, 0x35, 0xe9, 0xb5, 0xdd, 0x1b, 0x2b, 0x24, 0xc0, 0xdf, 0x0a,
+ 0xd6, 0xf6, 0xf3, 0x12, 0xe0, 0xe8, 0xf8, 0xdb, 0xdf, 0x26, 0xdd, 0xaf, 0x1b,
+ 0xf4, 0x0c, 0x15, 0x54, 0x0c, 0x06, 0xea, 0x11, 0xe1, 0x3b, 0xbc, 0xc0, 0x3a,
+ 0xf7, 0xb6, 0x1b, 0xc9, 0xea, 0x6c, 0xd3, 0xe4, 0x06, 0xcc, 0xfd, 0x5e, 0x11,
+ 0x3d, 0xfb, 0xea, 0x08, 0xd5, 0xad, 0xe3, 0x31, 0xd5, 0xd4, 0x17, 0x02, 0x09,
+ 0x24, 0xcb, 0x04, 0xed, 0x10, 0xf5, 0x06, 0xcf, 0xe1, 0x17, 0x17, 0xc2, 0x23,
+ 0xeb, 0x17, 0x1e, 0xff, 0x81, 0xd6, 0xe5, 0xea, 0xea, 0xf2, 0x05, 0x11, 0xe5,
+ 0xd5, 0xe8, 0x6d, 0x14, 0x15, 0x12, 0xdd, 0x99, 0x55, 0x96, 0xb2, 0xfc, 0xe4,
+ 0xb3, 0xba, 0x22, 0xee, 0x0b, 0xe3, 0x32, 0xfb, 0xe0, 0x20, 0xfb, 0x09, 0x39,
+ 0xde, 0xe6, 0xe0, 0x09, 0xc3, 0xf6, 0x25, 0x18, 0x01, 0x20, 0x38, 0x30, 0x0a,
+ 0x16, 0xeb, 0x29, 0xdc, 0x18, 0x09, 0xf2, 0x7e, 0xed, 0x5e, 0xcb, 0x1c, 0xf9,
+ 0xec, 0x21, 0x2b, 0x20, 0xe9, 0x38, 0x42, 0x04, 0x06, 0x21, 0xb6, 0xf7, 0x15,
+ 0xda, 0xd7, 0xd8, 0x53, 0xb7, 0x00, 0xc8, 0xef, 0x28, 0x56, 0x10, 0x13, 0x14,
+ 0x14, 0xe2, 0x28, 0xc1, 0x50, 0xb7, 0x28, 0x42, 0xd5, 0x48, 0xf2, 0x2a, 0xef,
+ 0x0c, 0xeb, 0x00, 0xfd, 0xeb, 0xe0, 0x54, 0x4a, 0xdb, 0xcc, 0x0b, 0x22, 0x35,
+ 0x16, 0x18, 0xf5, 0x01, 0xfa, 0x7f, 0xfb, 0xa9, 0x44, 0x2c, 0x1e, 0xff, 0x30,
+ 0xb6, 0x2c, 0x92, 0x22, 0xcb, 0x64, 0xf0, 0x64, 0x11, 0x29, 0x0a, 0xdb, 0xfe,
+ 0x0f, 0xdc, 0xf0, 0x70, 0xcf, 0x1e, 0x0d, 0x00, 0x2c, 0xe3, 0x15, 0x1e, 0xc0,
+ 0xd1, 0x6c, 0xed, 0x14, 0x36, 0xcb, 0xc0, 0xe2, 0x14, 0xc7, 0x26, 0x0d, 0x10,
+ 0xc6, 0x0d, 0xab, 0x19, 0xfa, 0xf4, 0x0b, 0x01, 0xeb, 0x40, 0x1d, 0xee, 0x0b,
+ 0xeb, 0x76, 0xeb, 0xd8, 0xe7, 0x03, 0x2f, 0xca, 0x11, 0xf1, 0x08, 0xec, 0xc8,
+ 0x07, 0xf5, 0xdc, 0x05, 0xfd, 0x61, 0x43, 0xcf, 0xe9, 0xa4, 0x0e, 0x4c, 0xe7,
+ 0xe5, 0x59, 0xc0, 0xe0, 0xd0, 0xd9, 0xdc, 0xd9, 0xee, 0x23, 0xd0, 0x01, 0xed,
+ 0x14, 0xa4, 0xd9, 0x02, 0x0c, 0x4c, 0x47, 0x4b, 0x33, 0x23, 0x2a, 0x25, 0xd1,
+ 0x17, 0x16, 0xf3, 0x10, 0x04, 0x09, 0xde, 0x17, 0x0e, 0xff, 0x60, 0x11, 0xf2,
+ 0xd7, 0x07, 0x05, 0xe4, 0xe1, 0x15, 0x7f, 0x2c, 0x06, 0xe6, 0x22, 0xdb, 0x17,
+ 0x11, 0x03, 0x33, 0x2c, 0xbc, 0x15, 0xfe, 0xcc, 0x21, 0x23, 0x08, 0xd9, 0xf7,
+ 0xfd, 0xc3, 0x10, 0x27, 0xf2, 0x37, 0x4c, 0xd0, 0xec, 0x12, 0xeb, 0x55, 0x07,
+ 0xcd, 0xf6, 0x07, 0x3f, 0xe8, 0x09, 0xe6, 0x36, 0xf3, 0xe5, 0x19, 0x12, 0x18,
+ 0xdc, 0xd7, 0xc6, 0xe5, 0xc5, 0x2e, 0xc8, 0x14, 0x07, 0xc8, 0x01, 0x04, 0x7f,
+ 0x03, 0x47, 0x2a, 0xc2, 0xaf, 0x6a, 0x1b, 0xe9, 0xe3, 0x00, 0xfb, 0xe3, 0x08,
+ 0x29, 0x3f, 0xf7, 0xe4, 0x27, 0x9b, 0x2c, 0xa4, 0xb5, 0xe3, 0xc9, 0xc3, 0xd2,
+ 0x10, 0xe6, 0x7f, 0x87, 0x0e, 0xde, 0xf3, 0xd9, 0xde, 0xb7, 0xd7, 0xed, 0x41,
+ 0xc8, 0x1a, 0xdf, 0xae, 0xe8, 0xbb, 0x11, 0xd0, 0xfa, 0xe9, 0x71, 0xe3, 0x2d,
+ 0xa5, 0x35, 0xf4, 0xed, 0xf1, 0xea, 0x13, 0x31, 0x3b, 0x08, 0x33, 0x39, 0x27,
+ 0x18, 0xb6, 0xcb, 0xc3, 0x18, 0xfc, 0x1d, 0x0a, 0x27, 0xa2, 0x1e, 0xa5, 0xdb,
+ 0xfb, 0xcf, 0xda, 0xa7, 0xd2, 0xa3, 0xe5, 0xf6, 0xf6, 0xdd, 0xfb, 0x10, 0x05,
+ 0xf0, 0x44, 0xe1, 0xb1, 0x1c, 0xec, 0xe0, 0x16, 0x05, 0xdb, 0x68, 0xc9, 0x0a,
+ 0xf2, 0xf2, 0x1f, 0x21, 0x3c, 0xd0, 0xca, 0xe9, 0x2a, 0xd8, 0xe1, 0x76, 0xb3,
+ 0x61, 0xef, 0xd0, 0xf2, 0x2d, 0xf8, 0x4a, 0xfd, 0xf1, 0x01, 0xba, 0xfd, 0x02,
+ 0x41, 0xba, 0x3b, 0xe9, 0xd4, 0xe6, 0x53, 0x1a, 0x04, 0xba, 0xe6, 0x46, 0xb5,
+ 0xfa, 0x1b, 0xcc, 0x2f, 0xeb, 0x0f, 0xe9, 0xdc, 0x61, 0xbe, 0xed, 0x20, 0x27,
+ 0x9e, 0xed, 0x94, 0x34, 0x24, 0x14, 0xaa, 0xf9, 0xf2, 0x1f, 0x2a, 0x24, 0x22,
+ 0xe8, 0xb5, 0x0d, 0xbd, 0xda, 0xef, 0xd3, 0xca, 0x7f, 0x56, 0xd4, 0x02, 0x06,
+ 0xf3, 0xe6, 0xe0, 0x6c, 0xc8, 0xa0, 0xd8, 0xd0, 0xef, 0x3a, 0xbe, 0x42, 0xd7,
+ 0x22, 0xfe, 0x36, 0xe6, 0x06, 0x1a, 0xf3, 0x0d, 0x1c, 0x10, 0xe9, 0xce, 0xde,
+ 0x19, 0x20, 0x0b, 0xc8, 0xfc, 0x0a, 0xd4, 0xf3, 0xe0, 0x0a, 0xe0, 0xe0, 0xd2,
+ 0x0c, 0xf6, 0xfc, 0xf8, 0x22, 0xe6, 0xee, 0x65, 0x0a, 0x7f, 0x35, 0x0b, 0x2f,
+ 0xee, 0x08, 0xeb, 0xf7, 0xdd, 0xf8, 0x1d, 0x25, 0x21, 0xf1, 0x07, 0xe5, 0xf5,
+ 0x3c, 0x66, 0xf6, 0x0d, 0xe9, 0x0e, 0xe0, 0x17, 0xe5, 0xf5, 0xee, 0x0b, 0x14,
+ 0x06, 0xfa, 0x00, 0x23, 0x17, 0xd0, 0x00, 0xe4, 0xcc, 0x38, 0xf2, 0xd1, 0x12,
+ 0xf0, 0x12, 0xe5, 0xed, 0x0b, 0xe6, 0x38, 0x42, 0x2e, 0xb9, 0xfd, 0x14, 0xd3,
+ 0x09, 0xf4, 0xe4, 0x1e, 0x45, 0xd8, 0xc4, 0xff, 0x3d, 0xea, 0xf7, 0x01, 0x0d,
+ 0xea, 0x0c, 0xf2, 0x06, 0x07, 0x0c, 0xd0, 0x05, 0xda, 0x3b, 0xfb, 0x19, 0x0e,
+ 0x70, 0xc2, 0xfb, 0xdc, 0x2a, 0x22, 0x10, 0xe6, 0xd3, 0xf0, 0x1d, 0x4b, 0xb1,
+ 0x36, 0xf5, 0x1f, 0xdb, 0xf5, 0x03, 0x15, 0xe6, 0xe9, 0xee, 0xf8, 0x0f, 0x18,
+ 0x2e, 0x02, 0x0e, 0x23, 0xfe, 0x1a, 0x33, 0x1c, 0xa6, 0x0f, 0xf7, 0x67, 0x0e,
+ 0x0b, 0x33, 0xc7, 0x0a, 0x92, 0x19, 0x1c, 0x35, 0x17, 0xe6, 0xf8, 0x05, 0xd5,
+ 0x0b, 0x11, 0x13, 0xfa, 0x63, 0x15, 0xee, 0xcd, 0xdc, 0x2c, 0xe5, 0xed, 0x17,
+ 0x14, 0xdb, 0xcd, 0xec, 0x09, 0x37, 0x3b, 0x71, 0xfe, 0xed, 0x44, 0xc5, 0x4a,
+ 0xbb, 0xaa, 0x12, 0xec, 0x06, 0x20, 0xde, 0x88, 0xac, 0xfc, 0x7d, 0x08, 0xf8,
+ 0x0e, 0xb1, 0xef, 0xd2, 0xea, 0xf8, 0x5e, 0xfa, 0xd8, 0xb1, 0x2d, 0xf0, 0x0f,
+ 0x2b, 0xfe, 0x21, 0x0a, 0xc2, 0xe4, 0x0a, 0xe2, 0xa3, 0x2b, 0x40, 0x3c, 0xa7,
+ 0xcb, 0x28, 0x21, 0xd4, 0xa2, 0xd8, 0xdd, 0x28, 0xbc, 0xdd, 0x2f, 0x7f, 0x29,
+ 0xd4, 0x20, 0xa9, 0x32, 0xb9, 0x3a, 0x2d, 0x06, 0x12, 0x00, 0x82, 0xfe, 0xd2,
+ 0x4b, 0x5d, 0x12, 0xf4, 0x42, 0xae, 0xbd, 0x62, 0xbc, 0xfe, 0x29, 0x04, 0x10,
+ 0xe9, 0xd0, 0x00, 0x40, 0x28, 0x3f, 0xd9, 0x0b, 0x01, 0x1a, 0x10, 0x21, 0x01,
+ 0xe5, 0x5f, 0x26, 0x06, 0x26, 0x15, 0x25, 0xbc, 0x32, 0x19, 0x07, 0x44, 0xba,
+ 0x07, 0xe7, 0xf4, 0x06, 0x14, 0x33, 0xf4, 0x15, 0xf9, 0xd2, 0xe5, 0x27, 0x1e,
+ 0x15, 0x57, 0x00, 0xfb, 0xe3, 0x12, 0xf1, 0x36, 0x02, 0x38, 0x03, 0x1b, 0xda,
+ 0x42, 0x0a, 0x31, 0x66, 0x19, 0x16, 0xc4, 0xf1, 0x1d, 0xf9, 0x36, 0x52, 0xea,
+ 0x4d, 0x2b, 0x20, 0xdd, 0xfd, 0x3a, 0x4a, 0x7f, 0xd5, 0xf9, 0xc5, 0x2e, 0x40,
+ 0xe9, 0x19, 0xe7, 0x16, 0xd0, 0xd1, 0xf4, 0xdb, 0xd4, 0xe4, 0xe0, 0x06, 0x09,
+ 0xee, 0xe5, 0xe6, 0x5d, 0xd9, 0x49, 0xcf, 0x25, 0xef, 0x17, 0x13, 0xea, 0xd5,
+ 0xe1, 0xe4, 0xf2, 0x39, 0x14, 0x22, 0xe6, 0x37, 0xf6, 0x08, 0x0a, 0x17, 0x09,
+ 0xfc, 0x12, 0xef, 0xf0, 0xfe, 0xdb, 0x0f, 0x29, 0x2e, 0x03, 0xeb, 0xfa, 0x00,
+ 0xf9, 0x0c, 0x3a, 0xf2, 0xdf, 0xe8, 0xe4, 0xfa, 0xfa, 0xdd, 0x11, 0x01, 0xe7,
+ 0x0a, 0x0c, 0xde, 0x02, 0xf8, 0xe9, 0x25, 0x28, 0x08, 0x0c, 0x03, 0x0c, 0xe2,
+ 0xdb, 0xe1, 0x17, 0xfe, 0x06, 0xdb, 0x19, 0x19, 0x0e, 0x21, 0x3f, 0x12, 0x19,
+ 0xa7, 0x04, 0x96, 0x01, 0x12, 0xfe, 0xfb, 0xd7, 0xfc, 0xe8, 0x2b, 0xfc, 0x0d,
+ 0x00, 0xfe, 0xf6, 0x49, 0x02, 0xeb, 0xf0, 0x22, 0x5b, 0x09, 0x7f, 0x07, 0x02,
+ 0xc5, 0x24, 0xbe, 0x13, 0x3a, 0x02, 0x1f, 0x32, 0x45, 0xe9, 0xf9, 0xee, 0xea,
+ 0x0a, 0x11, 0xeb, 0xf0, 0xeb, 0xfc, 0xe2, 0x0b, 0xc4, 0xfe, 0xf2, 0x14, 0xe2,
+ 0x01, 0xf3, 0xde, 0x1c, 0xd3, 0x11, 0x17, 0x25, 0xc9, 0xfa, 0x06, 0xdf, 0xc6,
+ 0xf3, 0x0b, 0xef, 0x18, 0x0e, 0xf9, 0xff, 0x0c, 0xec, 0xff, 0xf7, 0xed, 0xe9,
+ 0x02, 0xc1, 0xd1, 0x12, 0xdd, 0xe3, 0x18, 0x17, 0x07, 0x33, 0x1b, 0xf3, 0x06,
+ 0x1a, 0x0c, 0x2d, 0xe0, 0xe9, 0xf2, 0xd0, 0xf2, 0xec, 0x1d, 0xdf, 0x03, 0xfc,
+ 0x06, 0x05, 0xea, 0x20, 0x20, 0xd8, 0x1d, 0xf4, 0xff, 0x13, 0xf2, 0x19, 0xec,
+ 0xf3, 0xe2, 0xeb, 0xd9, 0x04, 0x2d, 0x15, 0x13, 0x2e, 0xfd, 0xd0, 0xed, 0x20,
+ 0xfd, 0x06, 0xf1, 0xdd, 0x1c, 0x4d, 0x08, 0xf1, 0x13, 0x01, 0xfc, 0x1a, 0xf4,
+ 0x0d, 0xff, 0xf6, 0x14, 0x03, 0x1c, 0x3a, 0xf0, 0x7f, 0xe9, 0xff, 0xec, 0xec,
+ 0x2a, 0xfa, 0x04, 0xd9, 0x27, 0x23, 0xd0, 0xec, 0xff, 0x14, 0xf8, 0x07, 0x08,
+ 0xe6, 0x0c, 0x29, 0x0e, 0x18, 0xeb, 0xdf, 0x0d, 0x18, 0xe5, 0x21, 0x01, 0x18,
+ 0x3a, 0xf9, 0xf2, 0x2a, 0x25, 0x11, 0xd6, 0x1f, 0x0b, 0x29, 0x4a, 0x03, 0xee,
+ 0x00, 0xf8, 0x15, 0x07, 0x27, 0x05, 0xff, 0x06, 0x05, 0xe9, 0xd9, 0x2f, 0x0b,
+ 0x13, 0x06, 0xff, 0x0b, 0x1e, 0xed, 0x22, 0x17, 0x0b, 0xfd, 0xea, 0x38, 0xd1,
+ 0x23, 0x08, 0x1b, 0xce, 0xaa, 0x34, 0x09, 0x3a, 0xd8, 0xe0, 0x15, 0x10, 0xf8,
+ 0x29, 0xec, 0xf3, 0xf4, 0x23, 0x21, 0xba, 0xf9, 0x0d, 0x12, 0x30, 0x03, 0xbb,
+ 0xfa, 0xfb, 0xd2, 0xd4, 0x06, 0x16, 0x07, 0xff, 0xfc, 0x0d, 0xfe, 0xd9, 0xc8,
+ 0xe1, 0x46, 0xc0, 0x13, 0xe3, 0xe5, 0xed, 0xf2, 0x31, 0xae, 0x29, 0x98, 0xfb,
+ 0xca, 0xdc, 0xea, 0x08, 0xdb, 0x2b, 0x2d, 0xf3, 0x16, 0x67, 0xe0, 0xef, 0x13,
+ 0x40, 0xfb, 0xe2, 0x35, 0x62, 0x30, 0x57, 0xa1, 0x12, 0xf1, 0xc1, 0xed, 0xe5,
+ 0xe2, 0x1e, 0xc3, 0xd9, 0xf2, 0x3f, 0x4a, 0x05, 0xba, 0x24, 0x81, 0xb0, 0x18,
+ 0x01, 0xea, 0x04, 0x5b, 0x36, 0xcc, 0xab, 0xe0, 0xe9, 0xc8, 0xc8, 0x50, 0xdd,
+ 0xde, 0x42, 0x02, 0xd3, 0xe3, 0xdd, 0x10, 0xef, 0x63, 0xf8, 0xdd, 0xba, 0xdf,
+ 0xd4, 0xe1, 0xff, 0xfc, 0xc6, 0x26, 0xfa, 0xc5, 0x39, 0x11, 0x2d, 0x29, 0xfd,
+ 0xaa, 0x2d, 0xbd, 0xbe, 0x04, 0xde, 0xea, 0xe6, 0xd1, 0xf0, 0xfd, 0x62, 0x0c,
+ 0xf7, 0x15, 0x0e, 0xc0, 0x33, 0xff, 0xe9, 0x33, 0xee, 0xdc, 0xc8, 0xdd, 0x11,
+ 0x04, 0xe3, 0x24, 0xe7, 0x0f, 0x27, 0xf3, 0x07, 0x0d, 0xc3, 0x05, 0x15, 0xde,
+ 0x2e, 0xfc, 0xf9, 0x17, 0x41, 0x01, 0xf5, 0x7f, 0x38, 0xd6, 0xff, 0xfd, 0xef,
+ 0x02, 0xd1, 0xca, 0xe4, 0xfc, 0xfe, 0x5b, 0xeb, 0xfb, 0x16, 0xda, 0xda, 0xd3,
+ 0x00, 0x16, 0xcf, 0xe3, 0x1b, 0x52, 0x08, 0x3f, 0x1e, 0xe0, 0x3c, 0xc5, 0x1c,
+ 0x6a, 0xf5, 0xf6, 0xff, 0x0c, 0xf6, 0x04, 0xc6, 0xa2, 0x1f, 0xf1, 0xe9, 0x25,
+ 0x1e, 0x0b, 0xc6, 0x0b, 0x1c, 0xca, 0x00, 0xf8, 0xb6, 0xda, 0xe2, 0x19, 0xd7,
+ 0xd1, 0x00, 0xe7, 0x0c, 0x1b, 0x1a, 0xc7, 0x04, 0xd8, 0xee, 0xd2, 0xdf, 0xf0,
+ 0x3b, 0xff, 0xc0, 0x6c, 0x20, 0xed, 0x24, 0x07, 0x0f, 0x18, 0x3c, 0xd9, 0x2d,
+ 0x29, 0x05, 0xf3, 0xf3, 0x06, 0xe0, 0xde, 0x13, 0xdc, 0xf9, 0x38, 0xb0, 0x22,
+ 0x24, 0x02, 0x56, 0x1e, 0xf1, 0xf1, 0x02, 0xe0, 0xd7, 0xf4, 0x22, 0xdb, 0xf3,
+ 0xf6, 0xc3, 0x0d, 0xda, 0xc8, 0xf4, 0x21, 0xd8, 0xf5, 0x2f, 0x24, 0x37, 0xfc,
+ 0x23, 0x28, 0xd5, 0x16, 0x1f, 0xb9, 0x0b, 0xfa, 0xd6, 0xf9, 0xe1, 0xdd, 0xe1,
+ 0xe1, 0xf5, 0xd3, 0xd8, 0x39, 0x04, 0x19, 0x2f, 0xc1, 0x04, 0xe3, 0xb8, 0x10,
+ 0xc7, 0x36, 0x56, 0xf1, 0xf4, 0xea, 0xf4, 0x60, 0x1e, 0xe3, 0x05, 0x40, 0xe8,
+ 0x98, 0xed, 0xed, 0x01, 0x2b, 0x0d, 0xea, 0xc0, 0xee, 0x7f, 0xee, 0x03, 0x03,
+ 0x14, 0xa6, 0xf7, 0x2d, 0xdf, 0xf9, 0xd7, 0x29, 0x01, 0xe8, 0x06, 0x04, 0xeb,
+ 0xe0, 0x0e, 0x1d, 0x3e, 0x26, 0x14, 0x9c, 0xf3, 0xc9, 0x02, 0xc1, 0x13, 0x1b,
+ 0x03, 0x0c, 0xfa, 0xf7, 0xe6, 0xf9, 0xfc, 0xfd, 0xc9, 0xc8, 0x5f, 0xc9, 0xfb,
+ 0xd9, 0x10, 0xb6, 0xd9, 0xc4, 0xd0, 0xcd, 0xf6, 0x14, 0x3e, 0xc1, 0xff, 0xef,
+ 0x1c, 0x0f, 0xe2, 0xab, 0x03, 0xf1, 0x02, 0xd6, 0x2b, 0x17, 0x16, 0xfd, 0xdb,
+ 0x1b, 0xda, 0xee, 0xc4, 0x34, 0x2a, 0xf2, 0xcd, 0xfc, 0x24, 0xdb, 0x14, 0xbc,
+ 0x28, 0xc3, 0xc0, 0xce, 0xbd, 0x25, 0x08, 0xe0, 0x21, 0xf9, 0x48, 0xeb, 0xdd,
+ 0x9e, 0xe1, 0xb7, 0x14, 0xbd, 0xd1, 0x17, 0x03, 0xbc, 0xe4, 0x2f, 0x29, 0x05,
+ 0x13, 0x7f, 0x0e, 0x04, 0xf4, 0x18, 0x05, 0x05, 0x3e, 0x55, 0x3f, 0xeb, 0x0d,
+ 0x17, 0xe9, 0x44, 0xfc, 0x84, 0xdc, 0x1f, 0xc0, 0x48, 0xe3, 0x01, 0xb5, 0xe7,
+ 0xfb, 0x2b, 0xf9, 0xdc, 0x1f, 0xdd, 0x15, 0x55, 0xfa, 0xfa, 0xc3, 0xdd, 0x09,
+ 0x20, 0xe8, 0xf3, 0x0b, 0xda, 0xf3, 0xf3, 0x15, 0x1d, 0x1d, 0x18, 0x07, 0x20,
+ 0x35, 0x32, 0xf7, 0x2b, 0x17, 0x59, 0xc7, 0xc2, 0xec, 0xd6, 0xfc, 0xfc, 0x2f,
+ 0xec, 0xea, 0x37, 0xb9, 0x0d, 0x2e, 0xf4, 0x55, 0xb2, 0xd6, 0xbb, 0x0b, 0xca,
+ 0x35, 0xdc, 0x12, 0xfe, 0x09, 0x45, 0xec, 0xfb, 0xe8, 0x23, 0x0c, 0xda, 0xe6,
+ 0xf8, 0x40, 0xf9, 0x12, 0xd0, 0x17, 0xc8, 0xe8, 0x7f, 0x1e, 0xe3, 0x21, 0x18,
+ 0x08, 0x16, 0xc8, 0x3c, 0x31, 0xdc, 0x78, 0xc4, 0x01, 0x52, 0xeb, 0x69, 0x0b,
+ 0xf9, 0x0b, 0xce, 0x36, 0xcf, 0x3b, 0xd8, 0xe4, 0x1d, 0xcc, 0xea, 0x04, 0x0d,
+ 0x18, 0x2f, 0x05, 0xe5, 0x15, 0x01, 0x10, 0x37, 0xde, 0xe6, 0x24, 0x03, 0xcf,
+ 0x11, 0xb5, 0xeb, 0x4c, 0x3d, 0x17, 0xfc, 0x18, 0x4d, 0xb8, 0x72, 0x32, 0xc8,
+ 0x04, 0x12, 0xed, 0xe8, 0xc0, 0x30, 0x3c, 0x12, 0xdb, 0x18, 0xd9, 0xd5, 0xd8,
+ 0x05, 0xbb, 0xb9, 0x4d, 0x04, 0xd9, 0x37, 0xed, 0xfa, 0xf2, 0xf6, 0xed, 0xbd,
+ 0x4e, 0x8d, 0xf4, 0x2d, 0x09, 0xd8, 0x83, 0xed, 0xad, 0xec, 0x37, 0xe7, 0x21,
+ 0xdd, 0xd3, 0x23, 0xc7, 0x07, 0xe8, 0xc7, 0x18, 0xd3, 0x5f, 0x13, 0xe4, 0x00,
+ 0xdc, 0xff, 0x02, 0x28, 0x4a, 0x5f, 0xf3, 0x1a, 0x4b, 0xe8, 0xc5, 0x3e, 0x17,
+ 0x1d, 0x42, 0x02, 0x20, 0x01, 0x2c, 0x1d, 0xf7, 0x04, 0xe3, 0x29, 0x09, 0x45,
+ 0x11, 0x11, 0xe3, 0x09, 0x2c, 0xe0, 0x19, 0x17, 0xd7, 0x65, 0x0e, 0x05, 0x14,
+ 0x4b, 0xc9, 0xfa, 0xed, 0x0b, 0xe4, 0x13, 0xe6, 0xce, 0xad, 0xc3, 0xdb, 0xf8,
+ 0x1f, 0x20, 0x25, 0x01, 0xd7, 0x47, 0xb7, 0xfe, 0x29, 0x0a, 0xd5, 0x24, 0xfe,
+ 0x7f, 0xbe, 0xe1, 0xd7, 0x05, 0xd5, 0xae, 0x7c, 0x5c, 0x3c, 0xaf, 0xd7, 0x57,
+ 0xb7, 0x16, 0xaf, 0x28, 0xdd, 0xef, 0x23, 0x0d, 0xc6, 0x0b, 0x0c, 0x22, 0x96,
+ 0xc8, 0x1d, 0x9b, 0xdd, 0xe7, 0x01, 0xea, 0x2d, 0x0f, 0xc9, 0xff, 0x45, 0x13,
+ 0x26, 0x29, 0x08, 0x31, 0x98, 0xcf, 0xd2, 0xdc, 0x07, 0xd4, 0xeb, 0x0b, 0xd1,
+ 0x3c, 0x74, 0xc8, 0xe4, 0xef, 0x0c, 0xc4, 0xc8, 0x11, 0xa6, 0x64, 0xf9, 0xf9,
+ 0xf5, 0x4a, 0xc7, 0x2c, 0x19, 0x30, 0x27, 0x0d, 0xff, 0x44, 0x56, 0xc6, 0xc7,
+ 0xe8, 0xf5, 0xe8, 0xf7, 0xf6, 0x9e, 0x20, 0xf9, 0x19, 0x0b, 0x30, 0xe3, 0x0b,
+ 0xb4, 0x14, 0xd6, 0x57, 0xef, 0xb7, 0x06, 0xfd, 0xf7, 0xc7, 0x05, 0xf9, 0xfb,
+ 0x00, 0x29, 0x23, 0xbf, 0x99, 0x26, 0x16, 0xd6, 0x03, 0xa5, 0x46, 0x49, 0xd2,
+ 0x37, 0x7f, 0x24, 0xe7, 0xfc, 0xa2, 0x38, 0x43, 0x53, 0xd9, 0xdb, 0xf5, 0xe9,
+ 0xdb, 0x78, 0xd2, 0xd9, 0x4e, 0xec, 0x0c, 0x1b, 0xb5, 0xc5, 0xa7, 0xe6, 0x2e,
+ 0xf4, 0x0a, 0xf5, 0x18, 0xa6, 0x23, 0x0f, 0xc0, 0xfe, 0xf3, 0x16, 0xd4, 0xfa,
+ 0x74, 0x11, 0x16, 0xda, 0x13, 0xc1, 0x2a, 0xd7, 0x0c, 0xf8, 0x0e, 0xe1, 0xcb,
+ 0x12, 0x28, 0xb4, 0x43, 0x0e, 0xe0, 0x27, 0xd0, 0xd0, 0xc1, 0x0c, 0x12, 0xd7,
+ 0xe1, 0xc8, 0x40, 0xf3, 0x7d, 0xa7, 0x14, 0xd0, 0x38, 0xdb, 0x1d, 0x2b, 0xc2,
+ 0x3a, 0xd1, 0xa3, 0xbf, 0x50, 0xea, 0xf7, 0x32, 0xe9, 0xfd, 0x01, 0x1d, 0x15,
+ 0x06, 0x1f, 0x9a, 0xe4, 0xf7, 0x32, 0x29, 0xff, 0xc5, 0x02, 0xb3, 0xd8, 0x61,
+ 0x0a, 0x10, 0xf8, 0xfb, 0xf5, 0xfe, 0xd6, 0x06, 0x05, 0xe4, 0xc4, 0x0a, 0x7f,
+ 0x90, 0xa0, 0x05, 0xce, 0x2e, 0xe3, 0xab, 0x24, 0xe9, 0x17, 0x10, 0xc2, 0xf8,
+ 0xcc, 0x00, 0xf5, 0x11, 0xf0, 0x24, 0xd5, 0xe5, 0x08, 0x07, 0xc8, 0xf3, 0x00,
+ 0x23, 0xb0, 0x28, 0x54, 0xd0, 0x45, 0xe9, 0x03, 0xdf, 0xf3, 0xf5, 0x21, 0xcc,
+ 0x14, 0xfb, 0xfa, 0xbc, 0x1d, 0x04, 0xe3, 0xf9, 0x26, 0x03, 0x08, 0xf8, 0xfd,
+ 0x2e, 0xc9, 0xd6, 0x0f, 0xe2, 0x37, 0x4a, 0x14, 0xec, 0x1d, 0x61, 0xb6, 0x1c,
+ 0xdc, 0xbe, 0x09, 0x04, 0x2e, 0x02, 0xa8, 0xe2, 0xeb, 0x0b, 0x64, 0x20, 0x5a,
+ 0xe9, 0x16, 0xbd, 0xf3, 0xba, 0x19, 0x22, 0xe5, 0x18, 0xfc, 0xd6, 0xa2, 0x29,
+ 0x2e, 0x23, 0x1d, 0xdd, 0x16, 0x19, 0x01, 0xcf, 0x5a, 0x1e, 0xfe, 0xe5, 0xf5,
+ 0x7f, 0xee, 0xb4, 0x1c, 0xf6, 0xbf, 0xe0, 0xfb, 0xd1, 0x01, 0xf7, 0xef, 0xdf,
+ 0xd9, 0x56, 0xe0, 0x35, 0xc6, 0xd2, 0xd0, 0xc5, 0x2d, 0xc8, 0xf6, 0x93, 0x6c,
+ 0xf9, 0xe4, 0x0b, 0xe6, 0xf6, 0x9c, 0xfd, 0x67, 0xb7, 0xfb, 0x2b, 0x25, 0xff,
+ 0xf5, 0x1f, 0xe2, 0x03, 0x04, 0x03, 0xf3, 0xb8, 0x40, 0x6b, 0x09, 0xee, 0x7e,
+ 0xeb, 0xa1, 0x0a, 0x38, 0xe3, 0x0a, 0x73, 0xfd, 0xbc, 0xcb, 0x4e, 0x9f, 0xe3,
+ 0xd1, 0xfe, 0x00, 0xd9, 0xfa, 0x0f, 0x00, 0x36, 0x86, 0x50, 0x33, 0x0d, 0xfe,
+ 0xff, 0x17, 0xd4, 0x70, 0xd9, 0xc9, 0xc6, 0x10, 0xeb, 0x36, 0x16, 0x15, 0xe2,
+ 0x41, 0xf1, 0xe8, 0xdb, 0xfb, 0x00, 0xed, 0x44, 0x51, 0x2d, 0xf7, 0xe8, 0xe3,
+ 0x27, 0x38, 0x22, 0x16, 0xfa, 0x30, 0xe9, 0x4f, 0x5c, 0xe3, 0x30, 0x46, 0xd2,
+ 0xeb, 0xd2, 0xac, 0xc3, 0xf4, 0xb9, 0x02, 0xb6, 0xd8, 0xea, 0x4a, 0xa3, 0xf8,
+ 0xbf, 0xcb, 0xc2, 0x1e, 0xfa, 0xb5, 0x35, 0xdf, 0xf6, 0xfb, 0xe8, 0xf8, 0x2d,
+ 0x39, 0x81, 0xd7, 0xea, 0xc4, 0x67, 0x9b, 0xb2, 0x3d, 0xe1, 0xdb, 0xf0, 0x12,
+ 0xd9, 0xea, 0xda, 0xca, 0xa9, 0xf5, 0xdc, 0x0d, 0xf9, 0x13, 0xc7, 0xe7, 0xc2,
+ 0x1d, 0xed, 0xc0, 0x5a, 0xcf, 0x67, 0x26, 0xce, 0x04, 0x16, 0x2f, 0xdd, 0xee,
+ 0x3a, 0x1c, 0xe5, 0x25, 0x20, 0xd1, 0xd7, 0x14, 0x77, 0xff, 0xea, 0xc1, 0xca,
+ 0xbc, 0x06, 0x13, 0xff, 0x21, 0xc2, 0x03, 0xff, 0x03, 0x03, 0x0c, 0x60, 0x06,
+ 0x26, 0xc5, 0x24, 0x3b, 0x0b, 0x2e, 0x14, 0xf4, 0x06, 0x14, 0x00, 0x12, 0xeb,
+ 0xe6, 0x29, 0xe1, 0x18, 0x16, 0x27, 0x15, 0xde, 0x28, 0xe6, 0xef, 0x26, 0xd2,
+ 0xe9, 0xaf, 0xf6, 0xfd, 0x3f, 0x2c, 0x18, 0x0e, 0xfe, 0xd1, 0xc0, 0x22, 0x0e,
+ 0x37, 0x00, 0xfb, 0xf6, 0xf1, 0xdf, 0x0f, 0x27, 0xfb, 0x34, 0xf9, 0x24, 0xdd,
+ 0xec, 0xf7, 0x01, 0xff, 0x1b, 0x3e, 0x29, 0xc5, 0xf4, 0x43, 0x27, 0x3c, 0xed,
+ 0x17, 0x0d, 0x04, 0x22, 0xcc, 0xff, 0x39, 0x08, 0x81, 0xc8, 0x44, 0x13, 0x0e,
+ 0xe7, 0x15, 0x2d, 0xda, 0xef, 0xed, 0x17, 0x1e, 0xc5, 0x01, 0x03, 0x08, 0x0a,
+ 0x15, 0x1b, 0x03, 0xfa, 0x04, 0xed, 0xf0, 0xd8, 0xfc, 0xe7, 0x24, 0x12, 0xcb,
+ 0x17, 0x18, 0x10, 0x4d, 0xe7, 0x0a, 0x10, 0x12, 0xf8, 0xa0, 0x02, 0xfb, 0x35,
+ 0x0f, 0xe6, 0x17, 0x21, 0xe1, 0x1e, 0x02, 0x13, 0x15, 0x0f, 0x12, 0x0b, 0xe6,
+ 0x06, 0x62, 0x40, 0xdd, 0x72, 0xe8, 0x00, 0xb4, 0xef, 0x2b, 0x02, 0xe9, 0xd5,
+ 0x02, 0x99, 0x1c, 0xc4, 0x2b, 0xf6, 0xf8, 0x04, 0xeb, 0x1b, 0xfd, 0xe3, 0xa1,
+ 0x49, 0x95, 0xe8, 0x0a, 0x14, 0xc8, 0xaf, 0xb1, 0x8f, 0xf3, 0x1f, 0x0b, 0xda,
+ 0x10, 0x9f, 0xdc, 0x02, 0xd8, 0xce, 0x3d, 0xf5, 0x02, 0x0d, 0x1b, 0x16, 0x17,
+ 0x29, 0xf2, 0xeb, 0x3e, 0x54, 0xba, 0x96, 0xcf, 0xbf, 0x2d, 0x2d, 0x00, 0x1c,
+ 0xcd, 0x2e, 0xe3, 0xce, 0x0c, 0x9c, 0x3d, 0x36, 0xa5, 0x3b, 0xdd, 0xb2, 0x30,
+ 0x07, 0xfd, 0x39, 0x00, 0x09, 0x03, 0x11, 0xa0, 0xfc, 0x66, 0xfd, 0xe8, 0xec,
+ 0xf3, 0xac, 0xb9, 0xcf, 0x1a, 0x98, 0xfe, 0x9a, 0xbc, 0x17, 0x1e, 0xe0, 0x0f,
+ 0x0d, 0x59, 0xbd, 0xfd, 0xeb, 0x27, 0xec, 0xda, 0x0e, 0x44, 0xd4, 0x3c, 0xb9,
+ 0x27, 0xbd, 0x07, 0xd8, 0x34, 0xa1, 0xf5, 0x24, 0x7f, 0x41, 0x15, 0x17, 0x69,
+ 0x43, 0x08, 0x09, 0x18, 0xe6, 0xd0, 0xf1, 0xf4, 0x10, 0x06, 0xd1, 0xda, 0xeb,
+ 0xcb, 0x55, 0x24, 0xd9, 0xe1, 0x22, 0x09, 0xbd, 0x11, 0xe8, 0x00, 0xe6, 0x3a,
+ 0xfd, 0x27, 0x31, 0x03, 0x00, 0x1a, 0x33, 0x76, 0x5a, 0x40, 0x7f, 0x44, 0x33,
+ 0x00, 0xff, 0xc3, 0x18, 0xca, 0x9b, 0xfe, 0xf5, 0x3b, 0x02, 0xf6, 0x1d, 0xef,
+ 0xe4, 0xf9, 0x1a, 0xc6, 0x1f, 0x1c, 0xff, 0x12, 0x0c, 0xed, 0x0e, 0xf9, 0x05,
+ 0x30, 0xfe, 0x3a, 0xd7, 0xba, 0xbc, 0x3c, 0x1d, 0xe9, 0x0d, 0x13, 0xc8, 0x5a,
+ 0x3d, 0xdd, 0xef, 0x23, 0x07, 0xf1, 0x12, 0x00, 0xd5, 0x01, 0xff, 0xde, 0xd3,
+ 0x06, 0x05, 0xce, 0x26, 0x19, 0xcc, 0xf6, 0xf2, 0x08, 0xe3, 0xbb, 0xf3, 0xe9,
+ 0x04, 0x08, 0x25, 0x51, 0xe8, 0xd3, 0x54, 0x0f, 0x1a, 0xf3, 0x68, 0x1f, 0x61,
+ 0x1a, 0xdf, 0xff, 0xfa, 0x1b, 0xb9, 0x59, 0x33, 0xd7, 0x03, 0x0c, 0x35, 0x1d,
+ 0x14, 0xcf, 0x81, 0x96, 0xce, 0x91, 0xf0, 0x20, 0xc3, 0xe5, 0x3e, 0xb8, 0x05,
+ 0x03, 0xfd, 0x19, 0xac, 0xee, 0xcc, 0x60, 0x55, 0xe8, 0x52, 0x0a, 0x25, 0xb8,
+ 0x28, 0xd4, 0xcc, 0x00, 0xc4, 0x29, 0x1c, 0x26, 0xf6, 0x1b, 0x0e, 0xdd, 0x0d,
+ 0x36, 0x0b, 0x41, 0xe6, 0x49, 0xec, 0x04, 0x0d, 0xe4, 0xea, 0xad, 0xdf, 0xc7,
+ 0x06, 0x6a, 0xf9, 0x1d, 0xfc, 0x31, 0xf4, 0xfb, 0x59, 0x00, 0x97, 0x72, 0x00,
+ 0xb7, 0xc8, 0x47, 0x48, 0xff, 0xdc, 0xe8, 0xf0, 0x21, 0xee, 0x27, 0xf6, 0x26,
+ 0x2b, 0xf0, 0x3f, 0xac, 0x40, 0x4b, 0x11, 0x06, 0x21, 0x0a, 0x32, 0x12, 0x54,
+ 0xf5, 0x1c, 0xe1, 0x1c, 0x64, 0x4e, 0x65, 0x45, 0xfd, 0xcf, 0xeb, 0xff, 0xf3,
+ 0xe1, 0x28, 0x25, 0x11, 0xeb, 0xe8, 0xbc, 0xf3, 0x59, 0xe1, 0xa3, 0xc5, 0xc0,
+ 0xc0, 0xea, 0x48, 0xaf, 0xb6, 0x0f, 0xc7, 0x06, 0xe6, 0x0e, 0x32, 0xfe, 0xf8,
+ 0x14, 0xde, 0x58, 0x27, 0x49, 0x1f, 0xe9, 0x3b, 0x5d, 0xde, 0x09, 0xe8, 0x04,
+ 0x20, 0xec, 0xf9, 0xc2, 0x25, 0x62, 0x1b, 0xbf, 0x28, 0x23, 0x09, 0x3d, 0x06,
+ 0xf9, 0x52, 0x3b, 0xdd, 0xf9, 0xbd, 0x8a, 0x4a, 0x1b, 0xe5, 0xfb, 0xec, 0x0e,
+ 0x13, 0xdd, 0xa7, 0xc3, 0xeb, 0xd4, 0x24, 0xb7, 0xc9, 0xc4, 0xe5, 0xd4, 0xc8,
+ 0x4d, 0x2f, 0xf9, 0x1e, 0x4a, 0xf6, 0x12, 0xf4, 0x47, 0x1d, 0xff, 0xf3, 0xfb,
+ 0xa2, 0xda, 0xf2, 0xfe, 0x2c, 0xf5, 0x0d, 0xbb, 0x2d, 0x07, 0x0a, 0xcd, 0x41,
+ 0xd7, 0xcd, 0xec, 0xbf, 0x13, 0x12, 0xf0, 0x05, 0xf3, 0xe7, 0x7f, 0x06, 0x1c,
+ 0x0e, 0x1c, 0xf8, 0x55, 0xd2, 0xd1, 0x16, 0x36, 0xd9, 0x1a, 0x19, 0x39, 0x34,
+ 0x01, 0xe4, 0xfa, 0xb7, 0x2c, 0x29, 0xf3, 0x06, 0xe8, 0xac, 0x12, 0xcc, 0x05,
+ 0x13, 0xee, 0x14, 0x10, 0xda, 0xf8, 0xe4, 0xc9, 0xed, 0x10, 0x0a, 0xce, 0x66,
+ 0xbf, 0x0a, 0x11, 0x0a, 0xdd, 0xf2, 0x1c, 0x0f, 0x26, 0xd6, 0x2b, 0x25, 0xef,
+ 0x01, 0xcc, 0x24, 0xfa, 0x7f, 0xe8, 0xff, 0x1b, 0xf4, 0x40, 0xd1, 0xf5, 0xf2,
+ 0xcf, 0xae, 0xd3, 0x01, 0xec, 0xda, 0x34, 0x11, 0x0d, 0x17, 0xe3, 0x09, 0xe3,
+ 0xfb, 0xe9, 0xe4, 0xf1, 0xdc, 0xaa, 0x9c, 0x58, 0x02, 0xcf, 0xff, 0xfc, 0x30,
+ 0x3e, 0xdc, 0xc0, 0xf9, 0x23, 0xee, 0xed, 0x15, 0xcb, 0xc6, 0xe3, 0x30, 0x36,
+ 0x6f, 0xc6, 0x27, 0xe3, 0xf0, 0xcc, 0xee, 0x0a, 0xe0, 0x32, 0xfd, 0x39, 0x0b,
+ 0x16, 0x04, 0x06, 0x58, 0x1d, 0xd8, 0x6b, 0xe8, 0x20, 0x1b, 0x08, 0x68, 0x0b,
+ 0xd6, 0xe5, 0x0a, 0xee, 0x2f, 0x26, 0xbf, 0xee, 0xe8, 0xc7, 0x23, 0xcc, 0x54,
+ 0x12, 0xef, 0x06, 0x18, 0xb7, 0x17, 0xb5, 0x2a, 0xd5, 0xed, 0xe8, 0x31, 0x39,
+ 0x0b, 0x07, 0xb1, 0xf1, 0x15, 0x18, 0x32, 0xe1, 0xf3, 0xda, 0x00, 0x14, 0x1c,
+ 0xe4, 0xf3, 0x19, 0x1b, 0x0a, 0x56, 0x09, 0x24, 0xf8, 0x19, 0x07, 0x14, 0x3c,
+ 0xd3, 0xa6, 0xbb, 0xe5, 0x4e, 0xfe, 0xb6, 0xc1, 0x16, 0xea, 0xcd, 0xf6, 0xf6,
+ 0xf2, 0x45, 0x23, 0xd8, 0xe8, 0xf4, 0xf9, 0x41, 0x2f, 0xd8, 0x0c, 0x0e, 0xb4,
+ 0x1c, 0xee, 0x3c, 0xbb, 0xd8, 0xe9, 0x7f, 0xe2, 0x11, 0x0d, 0x87, 0x4a, 0x58,
+ 0x19, 0x1f, 0xf6, 0xeb, 0xdf, 0xc0, 0xda, 0x30, 0xd6, 0xe6, 0xe6, 0x9c, 0x41,
+ 0x1a, 0x19, 0x1c, 0xbc, 0x6d, 0x02, 0x1b, 0x01, 0x20, 0xb7, 0x00, 0xdc, 0x0d,
+ 0xf0, 0xfe, 0xf9, 0x05, 0x14, 0x06, 0x20, 0xdc, 0xf7, 0x04, 0xec, 0x19, 0xf5,
+ 0xd6, 0xeb, 0x25, 0xd0, 0x49, 0xcc, 0x15, 0x00, 0xfe, 0xce, 0xfe, 0xe3, 0x0d,
+ 0x41, 0x1b, 0x0c, 0x0e, 0xec, 0xdf, 0xdc, 0x1b, 0xb8, 0x0f, 0x4a, 0xd4, 0xee,
+ 0x2d, 0xcf, 0x61, 0x14, 0xed, 0x28, 0xe6, 0xc1, 0x25, 0x35, 0xc1, 0x21, 0xe3,
+ 0x38, 0x0e, 0xe1, 0xf6, 0xe9, 0xe9, 0x08, 0xe8, 0xf7, 0xd3, 0xf0, 0x02, 0xeb,
+ 0x08, 0x07, 0x32, 0xf6, 0xd6, 0xfd, 0x27, 0x05, 0xf1, 0xea, 0x2d, 0xff, 0xeb,
+ 0xd0, 0xeb, 0xec, 0xed, 0x06, 0xfe, 0xec, 0x3a, 0x7f, 0x37, 0x23, 0xee, 0x17,
+ 0xd4, 0x14, 0xed, 0x48, 0x21, 0x08, 0x12, 0x17, 0x0b, 0x38, 0xca, 0xdf, 0x48,
+ 0x2d, 0xcb, 0x29, 0x2e, 0xf6, 0x33, 0xf7, 0xe8, 0xc6, 0xf1, 0xc9, 0xf5, 0x35,
+ 0x0e, 0xf6, 0xbc, 0x03, 0xf9, 0x1a, 0xfa, 0x3c, 0x07, 0x13, 0x29, 0x13, 0xe4,
+ 0x0f, 0x2e, 0x49, 0xec, 0xeb, 0x08, 0x07, 0x0f, 0x0e, 0xb8, 0x2e, 0xf1, 0xfb,
+ 0x06, 0xcb, 0x4f, 0x2d, 0xec, 0x5a, 0x00, 0x03, 0x17, 0xba, 0xe3, 0xcd, 0x01,
+ 0x98, 0xe3, 0x65, 0x29, 0xb4, 0x0b, 0x53, 0x3a, 0xed, 0x0f, 0x02, 0xee, 0xd0,
+ 0x12, 0x39, 0xda, 0x11, 0x09, 0xe0, 0x1e, 0x13, 0x08, 0x0a, 0xf4, 0xd5, 0x20,
+ 0xb8, 0x06, 0x29, 0x3b, 0xc3, 0xd8, 0x3d, 0x2e, 0x08, 0xe5, 0x0f, 0x02, 0xb1,
+ 0xf9, 0xe2, 0xef, 0x14, 0x4a, 0x09, 0xe7, 0xdf, 0x21, 0x2b, 0x2c, 0xd2, 0x39,
+ 0xef, 0xd5, 0x05, 0xd0, 0xff, 0xde, 0xbb, 0x0e, 0x1b, 0x0f, 0xf8, 0x01, 0x0a,
+ 0x4e, 0xe8, 0xd8, 0xfb, 0xf6, 0xe6, 0x01, 0x13, 0x4b, 0x00, 0xfa, 0xe6, 0xd1,
+ 0x11, 0x18, 0x56, 0x06, 0xf0, 0xd6, 0xf5, 0x6f, 0x09, 0x04, 0xcc, 0x01, 0xf7,
+ 0x2a, 0x57, 0xfc, 0xd3, 0x19, 0xfd, 0x3f, 0xc4, 0xf2, 0xe3, 0x03, 0xff, 0xff,
+ 0xc7, 0xc9, 0xf4, 0x0a, 0x18, 0xf0, 0x03, 0xfa, 0x06, 0xdd, 0x23, 0xc6, 0xfe,
+ 0xfb, 0x2d, 0x22, 0x0d, 0xd7, 0x39, 0x38, 0x11, 0xfc, 0xc5, 0x01, 0x0e, 0x58,
+ 0x81, 0xd7, 0xe5, 0xf7, 0x06, 0xfc, 0xfe, 0x13, 0x11, 0xe1, 0x09, 0xf1, 0xc0,
+ 0x39, 0x17, 0xc3, 0xcd, 0xf1, 0xf2, 0x19, 0xf2, 0xc0, 0xf5, 0x06, 0xe9, 0xeb,
+ 0x36, 0xe5, 0x22, 0x54, 0x08, 0xea, 0xd5, 0x4f, 0xd3, 0x0b, 0x12, 0xd2, 0x2d,
+ 0xf0, 0xea, 0x44, 0xec, 0xe1, 0xa5, 0x1c, 0x29, 0x0b, 0xd4, 0xd2, 0x0a, 0x50,
+ 0xed, 0x1a, 0x0c, 0x75, 0xfc, 0x63, 0x13, 0x09, 0x32, 0xd9, 0x03, 0x0d, 0x11,
+ 0xb0, 0xb5, 0x54, 0x2d, 0xd8, 0xff, 0xb2, 0x0b, 0x24, 0xf9, 0xf4, 0xc0, 0x18,
+ 0xf2, 0x19, 0xb8, 0x26, 0x08, 0xd1, 0xda, 0xd9, 0xf9, 0xc5, 0x22, 0xef, 0xcb,
+ 0x00, 0x1e, 0x06, 0x71, 0xf2, 0x7f, 0xa4, 0xfc, 0xff, 0x04, 0xd1, 0xeb, 0x04,
+ 0xd8, 0x48, 0xf5, 0x0e, 0xd0, 0xe9, 0x12, 0x1a, 0x07, 0xf0, 0xee, 0xb3, 0x20,
+ 0x19, 0x8a, 0xc8, 0xf1, 0x2d, 0x09, 0x2e, 0x19, 0x3d, 0x0b, 0x56, 0x11, 0x54,
+ 0x50, 0x0b, 0x00, 0x1e, 0x43, 0x19, 0x1e, 0xfa, 0x1e, 0xff, 0xde, 0x38, 0x19,
+ 0xf6, 0xee, 0x0f, 0x13, 0xd6, 0x04, 0x01, 0x00, 0xf2, 0x32, 0x03, 0x1b, 0x29,
+ 0x56, 0x23, 0xd7, 0xce, 0x44, 0x0a, 0x09, 0x04, 0x1d, 0x00, 0xf9, 0xc8, 0x3a,
+ 0xec, 0x36, 0x28, 0x4f, 0x2e, 0x03, 0xf3, 0xe7, 0xdb, 0xf9, 0xdd, 0x3e, 0xd1,
+ 0xd9, 0x60, 0xaa, 0x3d, 0xe0, 0x16, 0xe1, 0x01, 0xfe, 0xb1, 0xe4, 0x03, 0x26,
+ 0xb2, 0xf3, 0x2a, 0x7f, 0xbc, 0x07, 0x42, 0xa5, 0xf4, 0x09, 0x51, 0x31, 0x2f,
+ 0xbb, 0xe6, 0x01, 0xec, 0xf0, 0xb2, 0x38, 0x11, 0x65, 0x1b, 0x1f, 0x1d, 0xc9,
+ 0x36, 0xf2, 0xed, 0xd0, 0x06, 0x0a, 0xdf, 0x1d, 0x58, 0x44, 0xe7, 0x0a, 0x0f,
+ 0x20, 0x04, 0xde, 0x35, 0x3d, 0x04, 0x27, 0x5d, 0xfd, 0x44, 0x0c, 0x03, 0x3d,
+ 0x2a, 0xf9, 0xdd, 0x0a, 0xca, 0x06, 0xfc, 0xc5, 0x19, 0xd7, 0x44, 0x47, 0x17,
+ 0x3d, 0x31, 0x09, 0x16, 0x0e, 0xfb, 0x00, 0xdb, 0xf4, 0x17, 0x59, 0x08, 0xe9,
+ 0x30, 0xe0, 0x28, 0x03, 0xfe, 0x16, 0x04, 0xd0, 0x26, 0xed, 0x20, 0x34, 0xbd,
+ 0xc6, 0x02, 0xd9, 0xfe, 0x09, 0xf9, 0x36, 0x5f, 0x24, 0xba, 0xea, 0x2a, 0xde,
+ 0xd2, 0x9d, 0x9f, 0xf9, 0x02, 0x9d, 0x29, 0xb0, 0x2c, 0xca, 0x11, 0x15, 0x2c,
+ 0x04, 0xe4, 0xc4, 0x03, 0xba, 0x1a, 0xdd, 0x0f, 0x1b, 0x7f, 0xfb, 0x51, 0x18,
+ 0x10, 0x31, 0x18, 0x4b, 0x07, 0xe3, 0x22, 0xb7, 0xf5, 0xba, 0xed, 0x3e, 0x2d,
+ 0x16, 0xf7, 0xeb, 0x48, 0xdd, 0x1a, 0xe0, 0xdf, 0xee, 0x20, 0xca, 0xf9, 0x1b,
+ 0x23, 0x3e, 0xd1, 0xcd, 0xc7, 0xde, 0x62, 0x44, 0xce, 0x0d, 0xc4, 0xee, 0x17,
+ 0xda, 0x03, 0x35, 0xed, 0xd2, 0x4c, 0xfc, 0x5a, 0x09, 0x33, 0x5f, 0xdc, 0xe6,
+ 0xdc, 0x45, 0xab, 0x4b, 0x1c, 0x0b, 0xac, 0xf6, 0x2f, 0xb9, 0x4d, 0x18, 0xd5,
+ 0x59, 0xb1, 0x20, 0x58, 0xe4, 0xc2, 0x2c, 0x02, 0x24, 0xfd, 0x31, 0x04, 0xd4,
+ 0xcd, 0xe0, 0x26, 0x05, 0xe5, 0xe3, 0xef, 0xf2, 0xd3, 0x22, 0x7f, 0xdf, 0xf2,
+ 0xd3, 0x02, 0x08, 0xc0, 0xe3, 0xd5, 0xfc, 0xf8, 0xf4, 0xc4, 0x30, 0xd5, 0x22,
+ 0x0c, 0xea, 0x1c, 0xde, 0xc4, 0xf2, 0xdc, 0xe5, 0x0b, 0xbe, 0xf9, 0x66, 0x0c,
+ 0x05, 0xfa, 0xe1, 0xdc, 0x31, 0xdc, 0xe6, 0x13, 0x30, 0x1e, 0x1b, 0xf8, 0x01,
+ 0x10, 0x5f, 0x16, 0x07, 0xcd, 0x2a, 0x24, 0xec, 0xc6, 0x2d, 0x1e, 0x00, 0xf6,
+ 0xdd, 0xb9, 0xf3, 0xf9, 0x14, 0x35, 0xd8, 0x53, 0x07, 0x1c, 0xec, 0x52, 0xc6,
+ 0x14, 0xe0, 0x0e, 0x1f, 0xe7, 0x12, 0x05, 0xf1, 0x2d, 0xcf, 0xf9, 0xef, 0xf4,
+ 0xeb, 0xfd, 0xfc, 0x0e, 0xf7, 0xd3, 0x1a, 0xf0, 0xee, 0xd6, 0xe9, 0xf9, 0xea,
+ 0xc6, 0xce, 0x16, 0xd8, 0xe7, 0x01, 0x2f, 0x3d, 0x00, 0xfe, 0xee, 0xf7, 0xfb,
+ 0xd7, 0x1d, 0xdc, 0x4f, 0xed, 0xf8, 0x2d, 0x1d, 0xd6, 0x50, 0xd3, 0x07, 0x36,
+ 0x35, 0xcb, 0xde, 0xe0, 0x14, 0x03, 0xfd, 0xd4, 0xe5, 0x5b, 0xdc, 0xee, 0xf9,
+ 0xda, 0x23, 0x34, 0x0e, 0xee, 0xe6, 0xdd, 0x2c, 0xd8, 0xec, 0xe8, 0xd4, 0x61,
+ 0xf4, 0x36, 0xfc, 0x1f, 0x29, 0xeb, 0x05, 0x11, 0xe7, 0xa6, 0x14, 0x03, 0x08,
+ 0x0e, 0x02, 0xe3, 0xd1, 0xcd, 0x34, 0x14, 0x05, 0xf7, 0xd0, 0xce, 0x32, 0x81,
+ 0xff, 0xc6, 0xf7, 0x14, 0x00, 0x5b, 0xfb, 0xf6, 0x43, 0x30, 0x0e, 0x1d, 0x14,
+ 0x43, 0xe1, 0xcf, 0x05, 0x45, 0xe9, 0xa7, 0x0c, 0x55, 0xe7, 0x1c, 0x17, 0xc7,
+ 0x18, 0xd9, 0x97, 0xd0, 0xbf, 0xe3, 0x0f, 0xe0, 0xc9, 0x26, 0xe3, 0xb5, 0xc3,
+ 0xe8, 0x29, 0x27, 0xfa, 0xb4, 0x1d, 0xd4, 0x35, 0xce, 0x28, 0xf9, 0x30, 0xc0,
+ 0x24, 0xf0, 0x58, 0x08, 0xf6, 0x28, 0xe7, 0xe2, 0x19, 0x0d, 0x00, 0xd5, 0x01,
+ 0x26, 0xfb, 0x7f, 0xf7, 0xeb, 0xc0, 0xcc, 0xe3, 0xc3, 0xc9, 0xf8, 0x2d, 0xae,
+ 0x17, 0x25, 0x25, 0xbe, 0xc9, 0x2e, 0x3f, 0x94, 0x39, 0xbe, 0x01, 0xf9, 0x1d,
+ 0x9a, 0xb7, 0x03, 0xdd, 0xdb, 0x1a, 0xfd, 0x32, 0x0d, 0x0d, 0xf2, 0x38, 0xca,
+ 0x42, 0x67, 0xfc, 0x0b, 0xa9, 0xf4, 0xd4, 0x35, 0xee, 0xfa, 0x20, 0x12, 0xea,
+ 0x2d, 0xcb, 0xdd, 0xe3, 0xec, 0xe2, 0xf5, 0x44, 0x18, 0xef, 0x66, 0xdd, 0xfa,
+ 0xe2, 0xaf, 0x3e, 0xdc, 0xbc, 0xf2, 0x95, 0x4a, 0xa9, 0xed, 0x08, 0x4f, 0x0d,
+ 0x3d, 0x3b, 0x32, 0x3b, 0xf8, 0xda, 0x28, 0x77, 0xff, 0x00, 0x26, 0x46, 0x49,
+ 0xfc, 0xc8, 0xf9, 0x41, 0xd6, 0x02, 0x3e, 0xf3, 0xb4, 0xee, 0x0f, 0x3b, 0x28,
+ 0x2e, 0x1e, 0x0b, 0xc9, 0x37, 0x20, 0xf2, 0xed, 0x20, 0xa1, 0x06, 0xfa, 0xe0,
+ 0xc6, 0xca, 0x1f, 0x04, 0x23, 0x2b, 0x0f, 0x3d, 0xc7, 0x20, 0xf6, 0xd2, 0x5e,
+ 0xcc, 0xf7, 0xcf, 0x20, 0xca, 0xe2, 0x17, 0xba, 0x1b, 0x13, 0x01, 0xc3, 0xa7,
+ 0xe2, 0x66, 0xe8, 0xd6, 0xa1, 0x1f, 0x20, 0x98, 0x39, 0x1f, 0x6f, 0xeb, 0xc1,
+ 0x18, 0xec, 0xc6, 0x41, 0x13, 0x10, 0xff, 0xe1, 0x17, 0xe7, 0x53, 0xc9, 0x1a,
+ 0xd5, 0x03, 0x0e, 0x20, 0x29, 0xaf, 0x0f, 0xfc, 0x06, 0xe6, 0x1a, 0xfe, 0x47,
+ 0xee, 0x82, 0xa3, 0xc9, 0xfc, 0xaa, 0x9d, 0xff, 0xef, 0xd2, 0x1c, 0xff, 0x16,
+ 0x17, 0x9e, 0x44, 0x7f, 0x9e, 0x4c, 0xba, 0x17, 0x4c, 0xe0, 0x09, 0xca, 0xa8,
+ 0x45, 0x27, 0xcb, 0xdb, 0x55, 0x16, 0xf8, 0x13, 0xf2, 0xd5, 0xf8, 0xf2, 0x43,
+ 0x9e, 0xa4, 0x4e, 0xe7, 0x05, 0x38, 0xdd, 0x33, 0x62, 0xf9, 0xdf, 0xd6, 0x88,
+ 0xd1, 0xf8, 0x05, 0xcf, 0xe8, 0x57, 0xe8, 0x17, 0xe1, 0xef, 0x1d, 0x2c, 0xc7,
+ 0xb0, 0xcd, 0x2b, 0x88, 0x0e, 0xc5, 0xc1, 0x07, 0xff, 0xdc, 0x0f, 0x07, 0x17,
+ 0x49, 0xd9, 0xe5, 0x34, 0xe1, 0xe6, 0xef, 0xf2, 0xcb, 0xdd, 0x1c, 0xf6, 0x38,
+ 0xfe, 0xf4, 0xe5, 0x14, 0x21, 0xcc, 0x36, 0x28, 0x07, 0x4c, 0xfc, 0x03, 0xbe,
+ 0x2f, 0xe3, 0xf6, 0xfb, 0xfb, 0x1a, 0x1c, 0x20, 0x11, 0xe2, 0x1b, 0xc8, 0x01,
+ 0xf8, 0xc6, 0x1a, 0x81, 0x69, 0xd5, 0x3d, 0xfa, 0xe3, 0xef, 0xb2, 0x29, 0xe6,
+ 0xdd, 0x1b, 0xf8, 0xf6, 0x37, 0xf6, 0x3a, 0x5f, 0xca, 0xdc, 0x49, 0x0a, 0xcf,
+ 0xd3, 0xd6, 0x29, 0x6a, 0xf6, 0xeb, 0x00, 0x31, 0x2e, 0x4d, 0xf2, 0x15, 0xec,
+ 0xf8, 0xf0, 0x2f, 0xd3, 0xf0, 0xd6, 0x22, 0x27, 0x24, 0xf2, 0xe2, 0x20, 0x12,
+ 0x25, 0xfb, 0x2c, 0xec, 0xd0, 0xdc, 0x0f, 0x37, 0x09, 0xfd, 0xe6, 0xfd, 0x25,
+ 0xe0, 0xfe, 0x38, 0x09, 0xde, 0xf8, 0xe6, 0xed, 0xe6, 0x0f, 0xe4, 0x12, 0xd2,
+ 0xbf, 0xef, 0x09, 0x33, 0x1a, 0x2d, 0xe8, 0xdb, 0xd5, 0xe8, 0x2d, 0x12, 0x01,
+ 0x2a, 0xe3, 0x81, 0xf9, 0xd0, 0x0e, 0xd7, 0xfc, 0x1d, 0xea, 0x17, 0xf1, 0x00,
+ 0x4b, 0xd0, 0x0b, 0xe4, 0x10, 0xfa, 0x19, 0xd2, 0xf1, 0x11, 0xe9, 0xcf, 0xc6,
+ 0x16, 0x20, 0x1d, 0x04, 0x15, 0x04, 0xe5, 0xc6, 0x14, 0x2b, 0x03, 0xd4, 0xc2,
+ 0xfd, 0xfb, 0x10, 0xc2, 0x0b, 0xd3, 0xfe, 0x2f, 0xec, 0x16, 0xfc, 0x32, 0xdf,
+ 0xfe, 0xe1, 0x0b, 0xf7, 0x42, 0xfc, 0xf7, 0xc8, 0xc0, 0x38, 0xed, 0xc9, 0xd5,
+ 0x43, 0xf6, 0xd6, 0xc5, 0xcc, 0xf8, 0xd0, 0x20, 0xf9, 0xe2, 0x30, 0xf4, 0x27,
+ 0x20, 0x0d, 0x5b, 0x13, 0xe0, 0x01, 0x18, 0xe9, 0xff, 0xde, 0x00, 0x44, 0xea,
+ 0xdd, 0x11, 0xf8, 0x05, 0x01, 0xfb, 0x3c, 0x0e, 0xe6, 0xf2, 0xba, 0x00, 0xfa,
+ 0x09, 0x0d, 0x03, 0xcf, 0xec, 0x3c, 0x12, 0x05, 0xc5, 0x07, 0xd6, 0xf7, 0x2c,
+ 0xf3, 0x2a, 0xe9, 0x18, 0xef, 0xe4, 0x0e, 0xd0, 0x8e, 0x1c, 0xb9, 0x2b, 0xa7,
+ 0x1f, 0xe6, 0xfc, 0xb9, 0x54, 0xda, 0x2b, 0xd8, 0xd2, 0xee, 0xfd, 0x7f, 0x0f,
+ 0xfc, 0xae, 0xc7, 0xd8, 0xfd, 0x0a, 0xa7, 0xdf, 0xc9, 0x0d, 0xf8, 0xe6, 0x21,
+ 0x01, 0x23, 0x0b, 0x28, 0xb5, 0x30, 0xdf, 0x4e, 0xc1, 0x42, 0x37, 0xd0, 0xd1,
+ 0x15, 0xfc, 0xfd, 0x48, 0x24, 0xd8, 0xd3, 0x46, 0x0f, 0x2e, 0x37, 0xb9, 0xde,
+ 0xc3, 0x9f, 0x4b, 0x29, 0x13, 0x04, 0xc8, 0x0c, 0xdc, 0x8d, 0x47, 0x18, 0x0d,
+ 0x3f, 0xb9, 0x42, 0xfe, 0x17, 0x40, 0xcb, 0xd0, 0x4a, 0x0d, 0xcc, 0x05, 0x0f,
+ 0xd5, 0x74, 0x5f, 0x3e, 0xba, 0xcf, 0xe9, 0xf9, 0x92, 0xd7, 0xf3, 0x13, 0x28,
+ 0x1a, 0xbf, 0xf7, 0xcd, 0xeb, 0x32, 0x48, 0x0f, 0xcf, 0x2e, 0xec, 0x4d, 0x04,
+ 0x3a, 0xe1, 0xff, 0x1f, 0x29, 0xb4, 0xf6, 0xe6, 0x26, 0x0d, 0x99, 0xae, 0xbb,
+ 0xed, 0xfa, 0xbd, 0xea, 0xd3, 0x09, 0x57, 0x1b, 0x0f, 0x10, 0x00, 0xb0, 0x38,
+ 0xf8, 0xfe, 0xdf, 0xff, 0x1a, 0xd2, 0x66, 0xe5, 0x22, 0x22, 0xfe, 0xe7, 0xe2,
+ 0xfb, 0x7f, 0x10, 0xd2, 0xf4, 0x42, 0x59, 0x63, 0xc7, 0x52, 0x0b, 0x0c, 0xf5,
+ 0xda, 0x04, 0xc7, 0x09, 0xe2, 0xfb, 0xf0, 0xf7, 0x23, 0x1e, 0xb7, 0x65, 0xf2,
+ 0xec, 0xf5, 0x10, 0xd6, 0xae, 0xff, 0x30, 0xd0, 0x2e, 0x14, 0xc9, 0x30, 0xec,
+ 0x2f, 0xdd, 0xea, 0xf2, 0x39, 0x0d, 0xf0, 0xfd, 0x0e, 0x08, 0x33, 0x00, 0x05,
+ 0xe3, 0x01, 0x21, 0xba, 0x1f, 0xf3, 0xea, 0xe1, 0x19, 0xa8, 0xea, 0xbf, 0xf6,
+ 0xb2, 0x17, 0x39, 0x0f, 0x25, 0x29, 0x3f, 0x2f, 0x12, 0x0a, 0x3a, 0xdd, 0x37,
+ 0x26, 0xed, 0x51, 0xeb, 0xdc, 0xdd, 0x27, 0x02, 0xfe, 0x38, 0x31, 0xcc, 0xb3,
+ 0x17, 0x15, 0xc9, 0xea, 0xea, 0x19, 0x08, 0xf7, 0x25, 0x02, 0xdc, 0xc6, 0xd2,
+ 0xe8, 0x32, 0xe9, 0xe8, 0x01, 0x38, 0xc8, 0xea, 0x30, 0xdb, 0x1c, 0x05, 0x21,
+ 0xca, 0x9d, 0x2c, 0x1e, 0xe2, 0xa6, 0x5e, 0x68, 0xb6, 0x14, 0xee, 0xe5, 0x05,
+ 0x1a, 0xf7, 0xb0, 0x1c, 0xd5, 0x16, 0xcb, 0x29, 0x23, 0xe4, 0x03, 0x03, 0xd9,
+ 0xee, 0xb8, 0xf7, 0x4a, 0x1d, 0xc8, 0xd1, 0x70, 0x14, 0x1d, 0xf0, 0x35, 0xb7,
+ 0x97, 0xfd, 0x81, 0x28, 0xb7, 0x46, 0xe7, 0x10, 0x42, 0xf5, 0x2b, 0x17, 0xd5,
+ 0x2b, 0xb7, 0xcf, 0x60, 0xfa, 0xe4, 0xf3, 0xf2, 0xd3, 0x19, 0xc8, 0xb5, 0xda,
+ 0xea, 0x4f, 0x04, 0xd5, 0xe0, 0x47, 0x69, 0x4c, 0x3c, 0xe8, 0x40, 0x00, 0xc2,
+ 0x40, 0x99, 0xf4, 0x0a, 0x2e, 0xe6, 0xdb, 0x1d, 0x00, 0x8b, 0x0f, 0xd8, 0xfb,
+ 0x1d, 0x13, 0xf8, 0x36, 0x2b, 0x28, 0xfe, 0xe6, 0xc6, 0x78, 0xbc, 0x12, 0xea,
+ 0xa2, 0xf7, 0x26, 0x0d, 0x15, 0x31, 0x2e, 0x0a, 0xd4, 0x0f, 0xf2, 0x64, 0x37,
+ 0x45, 0xa7, 0xf1, 0x2a, 0xdf, 0xe8, 0x0e, 0xd8, 0xac, 0x33, 0x1f, 0xe1, 0xc3,
+ 0x06, 0xf5, 0x27, 0x00, 0x27, 0xd7, 0xc6, 0x23, 0xbc, 0x29, 0x31, 0xe2, 0x29,
+ 0xe6, 0x3f, 0xda, 0x35, 0xb8, 0x18, 0x46, 0x4b, 0x78, 0x4b, 0x24, 0xfd, 0xf8,
+ 0x2e, 0x11, 0x50, 0xb0, 0xe1, 0xf8, 0x5b, 0x0a, 0xf5, 0x0e, 0x18, 0xba, 0xce,
+ 0x1a, 0x72, 0xc4, 0x06, 0xf2, 0x0c, 0x10, 0x7e, 0xc5, 0x28, 0x55, 0xfe, 0x08,
+ 0xe8, 0x22, 0x9d, 0x0c, 0xcb, 0x7f, 0xb3, 0xe5, 0xe6, 0xd3, 0xa0, 0xab, 0xc6,
+ 0xbd, 0xfe, 0x1a, 0x15, 0xf1, 0x44, 0xfe, 0xe8, 0x1e, 0x13, 0xef, 0x11, 0xc6,
+ 0x4d, 0x66, 0x0d, 0xde, 0xd5, 0x41, 0xf5, 0x9b, 0x7c, 0x2c, 0x1a, 0x51, 0x08,
+ 0xce, 0xdf, 0xec, 0x4e, 0x4b, 0x2c, 0xfa, 0x3c, 0x09, 0xac, 0xea, 0xd0, 0x2c,
+ 0xfc, 0x06, 0x0f, 0x0d, 0x3b, 0xd1, 0x10, 0x12, 0x5f, 0xdb, 0x12, 0xfe, 0x01,
+ 0xeb, 0xcb, 0xe7, 0xb3, 0x29, 0xdd, 0xf7, 0x14, 0x0b, 0x02, 0x12, 0xe1, 0xf9,
+ 0x05, 0x5f, 0xfb, 0x0a, 0xed, 0xe9, 0xcd, 0x04, 0x14, 0x1a, 0xe7, 0x40, 0x1c,
+ 0xab, 0xfc, 0x48, 0xf4, 0x0c, 0xfc, 0xfd, 0x00, 0x0e, 0x27, 0x1c, 0x2f, 0x29,
+ 0x09, 0x08, 0x08, 0xf9, 0xea, 0x2e, 0x0b, 0x1f, 0x06, 0xe8, 0xe2, 0xdd, 0xff,
+ 0x19, 0x21, 0x55, 0x03, 0xed, 0x4d, 0xcc, 0x64, 0x09, 0x64, 0x06, 0x57, 0x11,
+ 0xcb, 0x08, 0xd1, 0x7d, 0x28, 0x23, 0xf9, 0x39, 0x17, 0xed, 0x0c, 0xda, 0xe0,
+ 0x08, 0xf4, 0x06, 0xed, 0x21, 0x06, 0xda, 0x3d, 0x1d, 0x01, 0x28, 0xec, 0xc7,
+ 0x2a, 0x1d, 0x1a, 0x4d, 0x2f, 0xb4, 0xf8, 0x0c, 0xe2, 0x07, 0x02, 0xd5, 0x0c,
+ 0xe3, 0x25, 0x03, 0x31, 0x41, 0xf8, 0xeb, 0xed, 0xe8, 0xd3, 0x1c, 0xb0, 0x12,
+ 0x05, 0x81, 0x26, 0x10, 0x02, 0x3d, 0x4a, 0xf3, 0xdf, 0x4e, 0xf4, 0x16, 0x27,
+ 0xf3, 0xee, 0xe1, 0xac, 0xd4, 0xbe, 0x1c, 0x18, 0xe9, 0x4d, 0xf9, 0xd4, 0xca,
+ 0x3b, 0xe7, 0xde, 0x20, 0xf3, 0x07, 0x0f, 0x07, 0xe6, 0xfe, 0xf1, 0xc5, 0x64,
+ 0xe4, 0x01, 0x06, 0x10, 0xff, 0xe8, 0x22, 0x1e, 0x34, 0xee, 0x47, 0x15, 0x25,
+ 0xbc, 0xee, 0x4d, 0x2b, 0xf6, 0xe5, 0x17, 0xc6, 0x37, 0x05, 0x13, 0x84, 0x05,
+ 0x1e, 0x0d, 0x0d, 0xee, 0xcf, 0x4e, 0x4a, 0xdf, 0xd7, 0xf2, 0x06, 0xfa, 0x90,
+ 0xd0, 0x72, 0xdc, 0xcc, 0xbc, 0x08, 0x0a, 0xa6, 0xb7, 0xf0, 0xcc, 0x13, 0xbe,
+ 0x5c, 0x3e, 0x08, 0x0e, 0x14, 0x02, 0x30, 0xdf, 0x3b, 0x4a, 0x13, 0xf0, 0x2f,
+ 0x27, 0x02, 0xdf, 0x27, 0x24, 0x23, 0xfe, 0x10, 0x08, 0x69, 0x3f, 0xbb, 0xfc,
+ 0x6d, 0x3d, 0x28, 0xed, 0xed, 0xed, 0x3a, 0xe3, 0xda, 0x81, 0x14, 0xd6, 0xe3,
+ 0xd6, 0xc5, 0xec, 0x37, 0x38, 0x25, 0x1c, 0xe7, 0x0a, 0x1b, 0x16, 0xe9, 0xfa,
+ 0xf4, 0xe6, 0x0b, 0x07, 0x22, 0x12, 0x16, 0xf4, 0x0a, 0xd1, 0xfe, 0x06, 0xdd,
+ 0xe3, 0xfa, 0x0e, 0x14, 0x25, 0x05, 0xed, 0x44, 0xf6, 0xd1, 0xeb, 0xfd, 0xf5,
+ 0x19, 0xe9, 0xe8, 0x1b, 0x0d, 0xed, 0x0b, 0x1c, 0x33, 0xec, 0xeb, 0xe5, 0x08,
+ 0x09, 0x25, 0x09, 0xe6, 0xf3, 0x01, 0x38, 0x00, 0x0d, 0x11, 0x05, 0x17, 0x0a,
+ 0x08, 0x08, 0xfb, 0x7f, 0xe8, 0x02, 0xff, 0x1c, 0x4d, 0xe8, 0xf9, 0xd3, 0x0f,
+ 0x21, 0xdb, 0xda, 0x17, 0xca, 0xf6, 0x1f, 0x07, 0x00, 0x09, 0x0d, 0xfb, 0x34,
+ 0x0e, 0x01, 0xfa, 0xd8, 0xf5, 0x23, 0x00, 0x48, 0x14, 0xfd, 0x0d, 0x20, 0x0d,
+ 0xf3, 0x03, 0x01, 0x1b, 0xf5, 0x2f, 0xf4, 0xe7, 0xe9, 0xdf, 0xb7, 0xd3, 0x1e,
+ 0x41, 0x0a, 0xe6, 0x18, 0xe6, 0xf7, 0xfa, 0x0f, 0x2b, 0x01, 0xe5, 0xcb, 0x27,
+ 0xfc, 0xf6, 0x07, 0xe0, 0xed, 0xe6, 0x12, 0xe1, 0xd9, 0xf2, 0xec, 0x19, 0x18,
+ 0xf3, 0xf9, 0x16, 0xd3, 0x00, 0x0b, 0x19, 0xee, 0x23, 0x02, 0x1e, 0xec, 0xfe,
+ 0xfd, 0xee, 0x07, 0x03, 0xe6, 0x00, 0xd9, 0xe4, 0x19, 0x07, 0x02, 0xfb, 0xf1,
+ 0xda, 0xbf, 0xe6, 0xd1, 0xf7, 0xf5, 0xc8, 0x14, 0x08, 0x04, 0xed, 0x7f, 0x01,
+ 0xd7, 0x48, 0x02, 0x0a, 0x4f, 0x05, 0xdb, 0x0d, 0x39, 0x1d, 0x00, 0xf0, 0xe6,
+ 0x02, 0x17, 0xd9, 0x21, 0xf4, 0xf1, 0x36, 0xe8, 0xe1, 0x07, 0xa2, 0xfc, 0xe3,
+ 0xf7, 0x05, 0x1c, 0x19, 0xf0, 0x19, 0x19, 0xe6, 0xe3, 0x03, 0x08, 0x1e, 0xe2,
+ 0x26, 0x17, 0xeb, 0x0e, 0x17, 0x33, 0xe3, 0x14, 0xef, 0xf3, 0xd6, 0xfb, 0xe3,
+ 0x2a, 0xd7, 0x0d, 0x16, 0x0b, 0x05, 0xf4, 0xe7, 0xf6, 0x28, 0xf3, 0x05, 0xde,
+ 0xab, 0xf3, 0xeb, 0xf7, 0xd2, 0xd0, 0x14, 0xfb, 0xfc, 0x0b, 0x1b, 0x18, 0xe8,
+ 0x14, 0x27, 0xfe, 0x3b, 0x19, 0x0a, 0xc0, 0x18, 0xef, 0x01, 0x2d, 0x04, 0x10,
+ 0x26, 0x33, 0x3b, 0xef, 0x20, 0xeb, 0xfc, 0x0e, 0xc7, 0x1c, 0x12, 0x22, 0xeb,
+ 0x23, 0xe2, 0x4f, 0x00, 0x32, 0xc3, 0x0d, 0x27, 0xb4, 0xf5, 0xca, 0xd1, 0xdf,
+ 0x2b, 0x8e, 0xc5, 0xe7, 0xf2, 0x15, 0xf7, 0x3c, 0xac, 0xba, 0x17, 0xec, 0xfb,
+ 0x0a, 0x0a, 0xc5, 0x3f, 0x93, 0x3e, 0x1c, 0xe9, 0xf3, 0xff, 0xd7, 0x2e, 0xcb,
+ 0x04, 0x1a, 0x1e, 0x18, 0xfa, 0x0d, 0x18, 0xdd, 0xf1, 0x55, 0x15, 0x60, 0xb8,
+ 0x2e, 0xd1, 0x11, 0x0b, 0x64, 0x02, 0xa6, 0x0f, 0x12, 0x06, 0x19, 0x08, 0xd9,
+ 0xec, 0xf5, 0xee, 0x05, 0x81, 0x5e, 0xc6, 0x16, 0x0b, 0x08, 0xf0, 0xec, 0xde,
+ 0x12, 0xf4, 0xe6, 0x63, 0xff, 0x22, 0xd8, 0xf3, 0xfb, 0x1c, 0xe6, 0x2d, 0x14,
+ 0x0b, 0x1c, 0x08, 0xb7, 0xee, 0xe9, 0x1f, 0xe4, 0x12, 0x19, 0x18, 0x09, 0xcf,
+ 0xcc, 0xb0, 0x21, 0xf9, 0xda, 0x08, 0x01, 0x38, 0xe7, 0x37, 0xe5, 0x04, 0xfc,
+ 0x30, 0x05, 0xec, 0x58, 0x12, 0x20, 0xfd, 0x11, 0x0a, 0xe7, 0x28, 0xfb, 0x01,
+ 0xe7, 0xec, 0xde, 0x49, 0x21, 0xf4, 0xfc, 0x19, 0x0f, 0xa5, 0xf2, 0xd2, 0xec,
+ 0xf4, 0x47, 0xd6, 0xc7, 0xb6, 0x5d, 0xf7, 0x0e, 0xc1, 0x36, 0xed, 0x16, 0x25,
+ 0xd7, 0xe6, 0x05, 0x14, 0x40, 0x3d, 0x01, 0xee, 0xdf, 0x35, 0x5c, 0xe2, 0x0a,
+ 0x3c, 0xf5, 0xe8, 0x0a, 0x33, 0x09, 0x2b, 0xc2, 0x03, 0x3c, 0xfe, 0xfd, 0x39,
+ 0xdc, 0x03, 0x12, 0xf6, 0x14, 0x07, 0xf0, 0xd8, 0x2a, 0xe0, 0x34, 0x0e, 0x13,
+ 0x0e, 0xfc, 0x0d, 0x39, 0x1c, 0xe3, 0x04, 0x25, 0xfd, 0x1c, 0x1d, 0xdb, 0x25,
+ 0xdd, 0x4a, 0x06, 0x0f, 0x0e, 0x11, 0xe4, 0x1f, 0xd6, 0xf0, 0x23, 0xec, 0x10,
+ 0xf5, 0x87, 0xb0, 0x36, 0xf7, 0x19, 0x2b, 0x1a, 0xbc, 0x04, 0x81, 0xdc, 0xd0,
+ 0xd4, 0xd7, 0x37, 0x09, 0xe8, 0xc0, 0xcc, 0x30, 0xf9, 0x25, 0xd4, 0x9f, 0x09,
+ 0x2c, 0xf8, 0x15, 0x71, 0x01, 0xfe, 0x20, 0xeb, 0x0a, 0xd9, 0x22, 0xe4, 0xfc,
+ 0x4e, 0x15, 0xef, 0xfe, 0x11, 0x3b, 0xf9, 0x1c, 0xc8, 0xec, 0xf2, 0x08, 0xf3,
+ 0xda, 0x24, 0xdf, 0xe4, 0x1e, 0x56, 0xfd, 0xc8, 0xf9, 0x1a, 0xec, 0xcb, 0xbb,
+ 0x3e, 0xfe, 0xdf, 0x4e, 0x12, 0x1d, 0x6f, 0xac, 0x01, 0x2e, 0x2f, 0xe2, 0xd3,
+ 0xf1, 0x05, 0xdd, 0xc4, 0xdc, 0xdd, 0xf1, 0x03, 0x0e, 0xd0, 0xdb, 0xbb, 0xb6,
+ 0x13, 0x42, 0x2b, 0x1b, 0x45, 0xf5, 0x16, 0xad, 0xc7, 0xf6, 0x28, 0xc5, 0xe9,
+ 0x45, 0x3d, 0xbd, 0x08, 0x03, 0x02, 0x86, 0x26, 0x1c, 0x2b, 0x7f, 0xf2, 0xcb,
+ 0xf9, 0xbd, 0x60, 0x04, 0x37, 0x37, 0xdf, 0xd6, 0x00, 0x09, 0x22, 0x17, 0x01,
+ 0x32, 0xd0, 0xcf, 0x3f, 0x35, 0x7b, 0x36, 0x1e, 0xcb, 0x08, 0xe9, 0x20, 0xd9,
+ 0x39, 0x3c, 0x20, 0x4d, 0xa2, 0x1c, 0xe4, 0xef, 0xf7, 0xd7, 0x05, 0xfe, 0xc0,
+ 0xe8, 0x3a, 0xff, 0x0f, 0xf2, 0xec, 0x0a, 0xe6, 0x00, 0x2f, 0xe5, 0x19, 0xa6,
+ 0xf1, 0xd4, 0xef, 0xd5, 0x29, 0xa5, 0x31, 0x02, 0x9c, 0xf9, 0x04, 0x08, 0xac,
+ 0xfb, 0xf9, 0xe1, 0xea, 0xe8, 0xd1, 0xe8, 0xe0, 0x2d, 0xb8, 0xd7, 0xde, 0x2f,
+ 0xc1, 0xf7, 0x0e, 0x07, 0xe8, 0x06, 0xb1, 0x4a, 0x42, 0xd1, 0x9e, 0xcf, 0x21,
+ 0x98, 0x7f, 0xef, 0x23, 0x30, 0xff, 0xee, 0xc5, 0xc3, 0x2d, 0x06, 0xc4, 0x34,
+ 0x00, 0x41, 0xb3, 0x07, 0x52, 0xf7, 0x24, 0x14, 0xee, 0xfe, 0xde, 0xf2, 0xae,
+ 0x11, 0xef, 0xe7, 0x21, 0xde, 0x26, 0x19, 0x1a, 0x14, 0xfb, 0xb5, 0x36, 0xcc,
+ 0x36, 0xf8, 0x01, 0xb9, 0xe7, 0x07, 0xe2, 0x61, 0x02, 0x3e, 0x14, 0x20, 0xd4,
+ 0x09, 0xf9, 0xc8, 0xe2, 0xf6, 0x11, 0x1f, 0x30, 0xd0, 0xfb, 0xfa, 0x31, 0x50,
+ 0x6b, 0xdb, 0xf3, 0x2d, 0xf5, 0xf1, 0xb1, 0x36, 0x00, 0xf9, 0xee, 0x01, 0x14,
+ 0x36, 0xe1, 0x19, 0xea, 0xea, 0xeb, 0x2d, 0x25, 0x06, 0xb4, 0x47, 0x48, 0xcf,
+ 0x2f, 0x00, 0xdc, 0x14, 0xd3, 0x95, 0xe1, 0x1f, 0x1b, 0xb6, 0xfe, 0xc8, 0xdf,
+ 0xa8, 0xc0, 0xff, 0x06, 0xca, 0xd4, 0x05, 0x07, 0x07, 0xcc, 0xa7, 0xb2, 0xca,
+ 0x5a, 0x7f, 0x22, 0x09, 0xc1, 0xaf, 0xaf, 0xf9, 0xf2, 0xcb, 0xde, 0x04, 0x07,
+ 0x91, 0x95, 0x6c, 0xd8, 0xc7, 0xaf, 0xba, 0x0a, 0xe8, 0x33, 0x35, 0x0c, 0x06,
+ 0xaf, 0xf7, 0xd6, 0x46, 0x39, 0xeb, 0xf2, 0x62, 0x26, 0x02, 0xec, 0x14, 0x17,
+ 0xee, 0x52, 0x5a, 0x1e, 0xe8, 0xe4, 0x06, 0x18, 0x12, 0x42, 0x0d, 0x42, 0xdb,
+ 0x23, 0xca, 0x0e, 0xfe, 0x0a, 0xfe, 0xd6, 0x23, 0xf1, 0x2c, 0x7e, 0xee, 0xae,
+ 0xa2, 0x33, 0x82, 0xc3, 0xe3, 0x00, 0xf0, 0xff, 0xd7, 0xd0, 0xd3, 0xf1, 0xbe,
+ 0x4c, 0x4f, 0xe8, 0x48, 0x0c, 0xa2, 0xdd, 0x42, 0x21, 0xc9, 0x2b, 0x8c, 0x11,
+ 0xf6, 0x1b, 0xcf, 0x5a, 0xd0, 0x30, 0xd4, 0x1d, 0x34, 0xf0, 0xf9, 0xcb, 0xef,
+ 0xb7, 0xda, 0xf5, 0x2a, 0xeb, 0xce, 0x1a, 0x8a, 0xda, 0xff, 0x78, 0xd3, 0x01,
+ 0x3c, 0xea, 0xf4, 0xe2, 0x34, 0x81, 0x04, 0xa4, 0x1c, 0x1a, 0x12, 0xb6, 0x62,
+ 0xbd, 0x11, 0xa1, 0xf3, 0x37, 0x51, 0xb7, 0x2f, 0x05, 0xd2, 0xed, 0xac, 0x44,
+ 0x07, 0xdf, 0x1c, 0x0f, 0xf3, 0xcf, 0xf1, 0x2d, 0xc1, 0xc0, 0xd8, 0x0b, 0x47,
+ 0xf9, 0x42, 0xde, 0x1d, 0x05, 0x02, 0xfd, 0x02, 0x0a, 0xae, 0x45, 0x12, 0x0f,
+ 0xc8, 0x29, 0xbb, 0xc0, 0x07, 0xe3, 0xd3, 0x32, 0xeb, 0x4f, 0xc7, 0x58, 0x63,
+ 0x96, 0xe3, 0x7b, 0xc6, 0xff, 0xe2, 0xf4, 0x48, 0x53, 0xf0, 0xda, 0x0a, 0xd4,
+ 0xd4, 0x19, 0x63, 0xf9, 0x0f, 0x16, 0x26, 0x1f, 0xec, 0xff, 0x18, 0x7f, 0x1e,
+ 0x0b, 0x13, 0x31, 0xfe, 0xf8, 0x1a, 0xec, 0x28, 0xe7, 0xcc, 0xf1, 0xe1, 0xd3,
+ 0xfd, 0x0e, 0xdd, 0xef, 0xeb, 0xf0, 0xae, 0x00, 0xc9, 0x10, 0xf1, 0xf4, 0xc7,
+ 0x16, 0x51, 0xdf, 0xe1, 0x0e, 0xef, 0x0e, 0x0b, 0x1b, 0xd4, 0xd8, 0xdb, 0xc4,
+ 0x21, 0xdf, 0xe5, 0xea, 0x5a, 0xe9, 0x26, 0x4f, 0x1e, 0x1e, 0x13, 0x24, 0x34,
+ 0x3f, 0xb9, 0xfb, 0xf3, 0xe8, 0x3d, 0x40, 0x06, 0x0b, 0x1c, 0xf0, 0x2b, 0x26,
+ 0xe7, 0x14, 0x18, 0xff, 0x40, 0xeb, 0x0b, 0xd6, 0x12, 0xc1, 0x45, 0xda, 0xfc,
+ 0x0b, 0x25, 0x14, 0x3d, 0xe9, 0xf8, 0x08, 0x52, 0x15, 0xf9, 0x01, 0xa7, 0xe4,
+ 0xc3, 0xee, 0xfa, 0xe3, 0x10, 0x17, 0xef, 0xea, 0x05, 0x1b, 0x0c, 0xec, 0x0a,
+ 0x39, 0xf1, 0xdf, 0xe3, 0xb8, 0xdb, 0xfb, 0x2a, 0xd9, 0xc8, 0x39, 0x0b, 0x1b,
+ 0xe0, 0xf4, 0x0e, 0xf0, 0x43, 0xb3, 0x13, 0xcd, 0xfd, 0xd0, 0xdb, 0x03, 0xe6,
+ 0xe4, 0xf4, 0xf1, 0xf8, 0x36, 0x01, 0x0f, 0xfe, 0x15, 0x0f, 0xf3, 0x0e, 0x35,
+ 0xfe, 0x04, 0xd3, 0xca, 0x00, 0xd4, 0xd9, 0x2e, 0x16, 0x48, 0x33, 0x25, 0xbc,
+ 0x14, 0x23, 0xf3, 0xaa, 0xec, 0xc6, 0xea, 0x08, 0x7f, 0xc1, 0x04, 0x27, 0x0e,
+ 0xfb, 0x54, 0xad, 0x08, 0xea, 0x1a, 0xfb, 0xe0, 0xcc, 0xf3, 0xd6, 0xd6, 0x50,
+ 0x20, 0xe7, 0x0a, 0xdc, 0x24, 0x05, 0xeb, 0xd4, 0xbe, 0xdf, 0xe6, 0x12, 0x0a,
+ 0xfc, 0x1d, 0xe7, 0xca, 0x10, 0xf9, 0x02, 0xde, 0xe9, 0xc1, 0xe3, 0xd6, 0x1f,
+ 0x02, 0xec, 0xda, 0x1f, 0xd3, 0x05, 0x21, 0xd8, 0x22, 0xfb, 0x11, 0x0e, 0x32,
+ 0x40, 0xdc, 0x05, 0xeb, 0xca, 0x31, 0x26, 0xd4, 0xf8, 0xfa, 0xf6, 0x0f, 0xcd,
+ 0xd3, 0x1c, 0x5f, 0xd7, 0xda, 0xee, 0x3a, 0x26, 0x14, 0xe5, 0xe0, 0xeb, 0xfa,
+ 0xf6, 0x0e, 0x17, 0x2d, 0xca, 0xad, 0x4d, 0x32, 0xe2, 0xfe, 0x3a, 0xed, 0xda,
+ 0x17, 0xde, 0xba, 0xf2, 0x2b, 0xf0, 0x0c, 0xe0, 0xca, 0x0a, 0x38, 0x04, 0x25,
+ 0xe9, 0x0e, 0xd2, 0x52, 0xd5, 0x20, 0x2f, 0xe5, 0x4c, 0x1d, 0x1f, 0x11, 0xdc,
+ 0x34, 0x3c, 0x34, 0x1f, 0xe2, 0x24, 0x0b, 0xf8, 0x25, 0x35, 0xe0, 0xf1, 0x97,
+ 0xf3, 0x1a, 0xfb, 0x02, 0x4b, 0xeb, 0x2c, 0x32, 0xea, 0x3e, 0xdd, 0x14, 0x2c,
+ 0xf2, 0x12, 0x24, 0xc7, 0xe4, 0x47, 0x67, 0x32, 0x81, 0x0e, 0x03, 0x40, 0x39,
+ 0x4f, 0x33, 0x15, 0x12, 0xe2, 0x26, 0xc7, 0xf9, 0x09, 0xff, 0x22, 0x3f, 0xf3,
+ 0x01, 0xab, 0x15, 0xd1, 0x31, 0xdf, 0xd6, 0xdf, 0x24, 0xe4, 0x10, 0x04, 0x5e,
+ 0x19, 0xe0, 0x09, 0xfe, 0x39, 0x10, 0x23, 0x7e, 0x17, 0x1e, 0xc7, 0xa6, 0x22,
+ 0x0b, 0x3f, 0x11, 0xf3, 0x05, 0x3c, 0x1b, 0x40, 0x0e, 0x44, 0xf4, 0x0d, 0x1c,
+ 0x0d, 0xdb, 0xe0, 0xe0, 0x30, 0x1a, 0xf6, 0xf4, 0x20, 0x4d, 0x3c, 0x01, 0xff,
+ 0x09, 0xd6, 0x02, 0xe8, 0x12, 0xe7, 0xde, 0xc6, 0x19, 0xe3, 0x15, 0x1e, 0x11,
+ 0xda, 0xca, 0x46, 0x07, 0xe9, 0xba, 0x1a, 0x1d, 0xec, 0xd5, 0xfc, 0x31, 0x18,
+ 0x0e, 0x55, 0x04, 0xe5, 0xd4, 0x02, 0x0c, 0xfe, 0xfe, 0xc6, 0x2c, 0xfe, 0xa2,
+ 0xed, 0xe7, 0x25, 0xe4, 0xfe, 0xf5, 0x55, 0x1d, 0xe7, 0x7f, 0xe6, 0x00, 0xeb,
+ 0x00, 0xfb, 0xde, 0xe5, 0x0a, 0xa8, 0x36, 0xe7, 0x26, 0xf4, 0xb7, 0xf7, 0x4d,
+ 0x05, 0xfc, 0xc3, 0xfd, 0xec, 0xfb, 0xe4, 0xfc, 0xfe, 0xe4, 0xfc, 0x20, 0xe3,
+ 0xd6, 0x1b, 0xf2, 0x46, 0xe8, 0x3b, 0x03, 0xe2, 0x4b, 0xec, 0x0e, 0x37, 0x14,
+ 0xf9, 0x2e, 0xde, 0xd6, 0x3b, 0xdf, 0x14, 0xd6, 0xec, 0x3e, 0x24, 0xeb, 0xd3,
+ 0xc8, 0xd6, 0x3c, 0xfd, 0xf8, 0xe9, 0xde, 0x11, 0xed, 0x08, 0x16, 0x08, 0xe4,
+ 0xd4, 0x0f, 0xbb, 0xe4, 0x1e, 0x1f, 0xe5, 0xd9, 0xdb, 0x31, 0x03, 0xff, 0x0d,
+ 0xf8, 0x3e, 0x0a, 0x7f, 0x67, 0xe0, 0xdb, 0xf6, 0x09, 0x01, 0x57, 0xf5, 0xe8,
+ 0x04, 0x0f, 0xed, 0x11, 0xfe, 0xe0, 0x24, 0x04, 0xfb, 0xe0, 0x28, 0xc3, 0xe0,
+ 0x09, 0x03, 0x41, 0xf3, 0xd7, 0xde, 0x2b, 0x21, 0xc6, 0xe7, 0x1c, 0x38, 0xe3,
+ 0xb8, 0xed, 0x18, 0x3b, 0x25, 0xaf, 0xfb, 0xe1, 0xd0, 0xd5, 0xf7, 0x25, 0x16,
+ 0xfb, 0xbf, 0xed, 0x29, 0xf4, 0x1e, 0xdc, 0xf4, 0xb8, 0x20, 0x32, 0xe6, 0xe7,
+ 0x11, 0xec, 0xe7, 0xff, 0x43, 0x12, 0x01, 0xf5, 0x92, 0x0e, 0xef, 0x10, 0xd3,
+ 0x19, 0xdf, 0xfe, 0x32, 0xf5, 0xf1, 0xf7, 0x21, 0xc6, 0x36, 0x1a, 0xf4, 0x1f,
+ 0xd6, 0xf4, 0xf4, 0xf4, 0xd4, 0x01, 0x17, 0x17, 0x07, 0xf6, 0x1f, 0x33, 0xf9,
+ 0xd2, 0x0f, 0xe7, 0x13, 0x15, 0x2f, 0xd4, 0x1c, 0xe2, 0xf0, 0x38, 0x1f, 0xfd,
+ 0x39, 0xee, 0xe4, 0x18, 0x14, 0xdc, 0xc0, 0xe1, 0xea, 0x20, 0xbf, 0x06, 0xda,
+ 0x38, 0x0c, 0xb9, 0x15, 0x0c, 0xf3, 0x27, 0xde, 0xc2, 0x18, 0xee, 0xf6, 0x1a,
+ 0xdf, 0x1b, 0xbc, 0x3b, 0x01, 0x6a, 0xdf, 0xeb, 0xd3, 0xc7, 0x06, 0xff, 0x58,
+ 0xf5, 0xbd, 0x32, 0x0c, 0xcc, 0xe2, 0x2c, 0x37, 0x9d, 0x1e, 0x0d, 0x91, 0x4a,
+ 0xc9, 0xb6, 0x4a, 0xc4, 0x12, 0xbd, 0xce, 0xed, 0x43, 0x15, 0x22, 0x10, 0x54,
+ 0xe5, 0xd2, 0x57, 0xd3, 0xe7, 0xb9, 0x18, 0x2a, 0x13, 0x43, 0xa2, 0x39, 0xec,
+ 0x01, 0xb0, 0x03, 0x56, 0x10, 0xf8, 0xb5, 0xfb, 0x2a, 0xbb, 0x58, 0xc4, 0x18,
+ 0x2f, 0xd0, 0xac, 0xfa, 0xeb, 0x04, 0xf4, 0x66, 0xfb, 0x00, 0xae, 0xb8, 0xef,
+ 0x52, 0x81, 0x1d, 0xef, 0xcc, 0x1a, 0x16, 0x26, 0xce, 0x20, 0x0b, 0x3f, 0x01,
+ 0x2c, 0xf5, 0xf1, 0xf8, 0x12, 0xec, 0xfd, 0x55, 0xf9, 0x90, 0xdd, 0x35, 0xf9,
+ 0xf2, 0xe2, 0x12, 0xc9, 0x0c, 0xe2, 0x0c, 0xfe, 0xd6, 0x16, 0x41, 0xe4, 0xea,
+ 0xce, 0x07, 0xff, 0xdb, 0x37, 0xd6, 0xd3, 0xc7, 0xd9, 0x0c, 0x11, 0x06, 0x3c,
+ 0x4b, 0xfc, 0x09, 0x8f, 0xd1, 0x19, 0x28, 0xfa, 0x26, 0xcc, 0xf5, 0x1b, 0x7f,
+ 0x08, 0x12, 0xde, 0xce, 0xd0, 0xc8, 0xc3, 0xf8, 0x1f, 0x27, 0xd2, 0x09, 0x55,
+ 0xbc, 0x3e, 0xc6, 0x0e, 0xcf, 0x43, 0x34, 0xbf, 0xb3, 0xe4, 0xdd, 0x0b, 0xa6,
+ 0x9a, 0x93, 0x7b, 0x13, 0x68, 0xff, 0x15, 0x14, 0xfe, 0x1c, 0x49, 0x38, 0xaf,
+ 0x46, 0xd6, 0x1c, 0x12, 0x18, 0x34, 0x10, 0xff, 0xc5, 0xe8, 0x37, 0xfe, 0xa2,
+ 0x00, 0x0e, 0xfe, 0x1d, 0x29, 0x15, 0xd6, 0xb3, 0x11, 0x06, 0x24, 0x16, 0x23,
+ 0x97, 0xbf, 0xf2, 0x89, 0x09, 0xe1, 0xf5, 0x20, 0xc7, 0x01, 0xfc, 0xa3, 0x03,
+ 0x28, 0xf3, 0x10, 0x30, 0x34, 0x7f, 0xce, 0x54, 0xdf, 0x42, 0x29, 0xcc, 0x0d,
+ 0xb7, 0x03, 0xd3, 0xec, 0xe2, 0xf1, 0x03, 0xed, 0xd4, 0x30, 0x76, 0xe5, 0x24,
+ 0xe8, 0x3e, 0xfd, 0x65, 0x2d, 0xe5, 0xe8, 0xea, 0x13, 0x0e, 0x45, 0xf7, 0x1d,
+ 0xd6, 0x34, 0x23, 0x06, 0xb4, 0x25, 0x26, 0x53, 0xac, 0x18, 0xdf, 0xf4, 0x32,
+ 0x1a, 0x3f, 0xf6, 0x07, 0x18, 0x00, 0xf8, 0xa5, 0x0c, 0xfa, 0xf3, 0x3b, 0xd7,
+ 0x22, 0xb6, 0x65, 0xe4, 0xf9, 0x4c, 0x06, 0xc4, 0xf2, 0x05, 0x45, 0xe7, 0x3f,
+ 0x07, 0xf7, 0xea, 0x4b, 0xff, 0xb5, 0xbd, 0x53, 0xfa, 0xe9, 0xc5, 0xde, 0x6d,
+ 0x50, 0xc3, 0xfb, 0xc8, 0x06, 0x04, 0xcc, 0x13, 0x16, 0x14, 0xbd, 0xce, 0x18,
+ 0xc4, 0xee, 0xc0, 0xe4, 0xe2, 0xe5, 0xf9, 0x17, 0xb4, 0x25, 0x82, 0x1e, 0x3b,
+ 0x15, 0x13, 0x2e, 0xd8, 0x00, 0x3a, 0x18, 0xfc, 0xe6, 0xf7, 0xf2, 0xf0, 0xec,
+ 0x1b, 0x19, 0xf5, 0x3e, 0x86, 0x1e, 0x1a, 0x31, 0xc6, 0xf7, 0x01, 0x00, 0xf9,
+ 0x3d, 0x27, 0xfa, 0xd5, 0x0b, 0xef, 0x7f, 0x06, 0x26, 0xc3, 0xf5, 0xad, 0xe9,
+ 0x2a, 0x8b, 0x09, 0x7f, 0x21, 0x4f, 0x1d, 0xf0, 0x5e, 0x5b, 0xe0, 0xf7, 0x53,
+ 0x2a, 0x1e, 0xd7, 0xed, 0x09, 0x55, 0xda, 0xed, 0xcd, 0x25, 0x06, 0x05, 0x57,
+ 0xd8, 0xc8, 0x99, 0x01, 0xc7, 0xd3, 0x16, 0x20, 0x0f, 0x20, 0x03, 0xb3, 0xd2,
+ 0x28, 0x54, 0x0b, 0x5d, 0x25, 0xaa, 0x83, 0xa2, 0x71, 0x14, 0xdc, 0x63, 0x50,
+ 0xee, 0xf4, 0x33, 0x12, 0x06, 0x0d, 0x8e, 0xce, 0xd3, 0xbc, 0xf3, 0x08, 0x07,
+ 0xf0, 0x0c, 0xd3, 0x1d, 0xba, 0x0b, 0xd8, 0x30, 0x37, 0xdc, 0xc5, 0xce, 0xfe,
+ 0xbc, 0xee, 0xd0, 0xf2, 0xec, 0x38, 0xbf, 0xee, 0xcb, 0x2b, 0x78, 0xfb, 0x1b,
+ 0x19, 0xd6, 0xce, 0xdd, 0xfe, 0x34, 0x31, 0xf5, 0xd2, 0xfd, 0xc9, 0xf4, 0x0b,
+ 0xff, 0xf2, 0x52, 0xee, 0xd4, 0xbd, 0x91, 0xdc, 0xf9, 0x81, 0xf4, 0xbd, 0xcc,
+ 0xea, 0xe6, 0xe6, 0x12, 0x45, 0xcf, 0xef, 0xcc, 0x0c, 0xe2, 0x2d, 0x32, 0xca,
+ 0x36, 0xdd, 0x2c, 0x0e, 0x18, 0x18, 0x2b, 0x02, 0x14, 0x19, 0x1a, 0xf9, 0xfe,
+ 0x46, 0xf3, 0xb3, 0xd1, 0xed, 0xe6, 0x1e, 0xee, 0x35, 0x3e, 0xbb, 0x31, 0x91,
+ 0xdd, 0xd3, 0x40, 0x3a, 0x2d, 0xb9, 0x24, 0xb3, 0x49, 0xe4, 0xf2, 0xef, 0x32,
+ 0x27, 0xcb, 0xd3, 0x09, 0x12, 0x18, 0x08, 0xc3, 0xc0, 0x0b, 0xd3, 0xe0, 0x08,
+ 0xfa, 0x1a, 0xfe, 0xf0, 0x2b, 0xc1, 0x2b, 0x51, 0x23, 0x04, 0xc9, 0xed, 0xa8,
+ 0x10, 0xfe, 0x11, 0x07, 0x33, 0x12, 0xf6, 0x09, 0x40, 0x28, 0xf7, 0x05, 0xe9,
+ 0xe5, 0xeb, 0x49, 0x45, 0x08, 0x43, 0x26, 0xf9, 0xa9, 0x77, 0x00, 0x07, 0xaa,
+ 0xdd, 0xd1, 0xe4, 0xbe, 0xf0, 0x17, 0xfd, 0x47, 0xee, 0xf4, 0x19, 0x4e, 0xd5,
+ 0xb5, 0x24, 0xfa, 0x04, 0xfd, 0x2b, 0x04, 0xc2, 0x4b, 0x25, 0xed, 0x1f, 0xe1,
+ 0xfc, 0xb6, 0xeb, 0x30, 0xfa, 0x03, 0xf7, 0x33, 0x03, 0xd6, 0x1d, 0x10, 0x90,
+ 0xd2, 0xb8, 0x04, 0x17, 0xb6, 0x14, 0xe0, 0x27, 0xf4, 0x28, 0x15, 0xd3, 0xeb,
+ 0x24, 0x0b, 0x98, 0xb7, 0xc5, 0x63, 0xef, 0x1d, 0x02, 0xc1, 0x23, 0xaf, 0x75,
+ 0x24, 0xca, 0x17, 0xb6, 0xb8, 0x34, 0xcf, 0x2e, 0x1b, 0xd6, 0x47, 0xbe, 0x45,
+ 0xff, 0xdb, 0xff, 0xea, 0x45, 0xf3, 0x27, 0xb8, 0xff, 0xd2, 0xdc, 0x18, 0xb4,
+ 0xbe, 0xe5, 0xe3, 0xdf, 0xa9, 0xd6, 0xf6, 0xfb, 0xc1, 0xee, 0x09, 0x00, 0x28,
+ 0x8a, 0x24, 0x00, 0xe3, 0x81, 0xd7, 0x1d, 0xc1, 0xd6, 0x23, 0xad, 0x2c, 0xd1,
+ 0xa7, 0x01, 0xe6, 0x0b, 0xb0, 0x07, 0x00, 0x29, 0xfa, 0xc5, 0xd3, 0xd1, 0xcb,
+ 0xc6, 0x28, 0xe7, 0xb6, 0x20, 0x2d, 0xee, 0x00, 0x07, 0xc3, 0xf8, 0xf5, 0xf2,
+ 0xc3, 0x28, 0x2f, 0x1e, 0x34, 0xe3, 0xf0, 0xcf, 0xe1, 0xec, 0x2c, 0xdb, 0x0c,
+ 0x17, 0xe4, 0xfa, 0xd0, 0xfe, 0xed, 0x32, 0x0c, 0xdc, 0xdd, 0xe8, 0x4d, 0x10,
+ 0xfe, 0xe4, 0xfd, 0xf1, 0x03, 0xf7, 0xdd, 0xf6, 0xe5, 0xe7, 0x14, 0xc7, 0xfe,
+ 0x09, 0xc4, 0x33, 0x19, 0x15, 0x39, 0x07, 0x2e, 0xca, 0x06, 0xcb, 0x7f, 0x07,
+ 0x07, 0xf8, 0xf3, 0xe8, 0xd9, 0x29, 0xec, 0xf6, 0xe1, 0x06, 0xca, 0x0b, 0xfe,
+ 0xce, 0x05, 0xe6, 0x22, 0xfb, 0xe5, 0xd5, 0xd1, 0xbe, 0x03, 0x06, 0x20, 0x24,
+ 0x18, 0xe8, 0x11, 0xc7, 0xed, 0xf0, 0x1e, 0xfc, 0x10, 0xcb, 0x17, 0x00, 0x1f,
+ 0x20, 0x04, 0xdd, 0xe9, 0x0a, 0x45, 0x35, 0x2b, 0x08, 0xfa, 0x4d, 0xcb, 0xd6,
+ 0xd9, 0x0d, 0xd1, 0x1e, 0xee, 0xda, 0x09, 0x60, 0xfd, 0xf1, 0x3d, 0xf2, 0xfa,
+ 0x0f, 0x27, 0x73, 0xd7, 0x78, 0x21, 0xeb, 0xc7, 0xec, 0x1f, 0x40, 0x04, 0x52,
+ 0xdb, 0x13, 0xe5, 0xf6, 0x09, 0xef, 0xc2, 0xef, 0x0d, 0x45, 0xd5, 0x06, 0x41,
+ 0x14, 0xee, 0xe8, 0x0a, 0x15, 0xf1, 0x62, 0xe0, 0x05, 0xe7, 0x14, 0xff, 0x11,
+ 0xf1, 0xf7, 0x7f, 0x02, 0x41, 0xd9, 0x12, 0xf7, 0xe7, 0xdb, 0x03, 0xf0, 0xc7,
+ 0xc0, 0xe2, 0x0b, 0xf1, 0x33, 0xf1, 0x29, 0xe0, 0xf1, 0xe9, 0xc3, 0x37, 0xd0,
+ 0xf1, 0x18, 0xe7, 0xbb, 0x0a, 0xf5, 0xf8, 0x27, 0x19, 0xdd, 0x25, 0x0f, 0x25,
+ 0x2d, 0xff, 0x2b, 0xcf, 0x02, 0x0e, 0x00, 0x19, 0xc8, 0xee, 0x12, 0x15, 0xd6,
+ 0x09, 0xf6, 0xcf, 0x10, 0xfd, 0x0f, 0xe1, 0xba, 0xfe, 0x09, 0x0d, 0x2a, 0xdf,
+ 0x34, 0xeb, 0xfc, 0x3b, 0xf4, 0x24, 0xf9, 0xf4, 0xfb, 0xe7, 0xdc, 0xeb, 0x1c,
+ 0xf0, 0x5c, 0xe6, 0x0f, 0x0b, 0x41, 0xce, 0xec, 0xe1, 0xad, 0x10, 0x19, 0x10,
+ 0x02, 0x28, 0x15, 0xdc, 0x10, 0xf8, 0xdb, 0x3e, 0x43, 0xec, 0x27, 0xfd, 0x1c,
+ 0xc2, 0x49, 0xee, 0xed, 0x06, 0x09, 0xfb, 0x3e, 0x4d, 0xd2, 0x25, 0x1d, 0x01,
+ 0x09, 0x01, 0xfd, 0xef, 0x3e, 0xe1, 0xd6, 0x05, 0x0e, 0xfc, 0x1c, 0xd2, 0xd6,
+ 0x3f, 0xe3, 0xff, 0xfb, 0xf8, 0x5a, 0xe8, 0x2d, 0x0a, 0x10, 0xb0, 0x1b, 0x70,
+ 0xa0, 0xbc, 0xdc, 0xb8, 0xb6, 0x23, 0xde, 0x42, 0xe7, 0x64, 0x51, 0xe8, 0x1b,
+ 0xa1, 0x07, 0x3f, 0xc3, 0xcd, 0x4a, 0xdb, 0xa0, 0xb4, 0x2e, 0x19, 0x35, 0x23,
+ 0x55, 0xf4, 0x07, 0xf7, 0x1c, 0xb8, 0x07, 0x09, 0x2d, 0x25, 0x56, 0xe9, 0xed,
+ 0x0d, 0x19, 0x25, 0xf2, 0xfa, 0xe4, 0x08, 0xa0, 0xed, 0xe8, 0x2e, 0x07, 0xdd,
+ 0x47, 0x7f, 0x12, 0xdb, 0xd0, 0x18, 0x37, 0x32, 0x07, 0xe2, 0xc6, 0xfa, 0xf6,
+ 0x1e, 0x43, 0x34, 0x0d, 0x5e, 0xce, 0xd7, 0xc8, 0xc0, 0xe2, 0xee, 0xf9, 0x1b,
+ 0x4c, 0x15, 0xfd, 0xf7, 0x19, 0xe7, 0x0e, 0x19, 0xb0, 0x0b, 0x25, 0x81, 0xf3,
+ 0x04, 0xe3, 0xe8, 0x1a, 0xd9, 0xdb, 0xee, 0xee, 0x3b, 0x10, 0xe1, 0xce, 0x0f,
+ 0xca, 0xec, 0x75, 0x48, 0x31, 0xcd, 0xef, 0xf9, 0xcb, 0xee, 0x07, 0xe5, 0x56,
+ 0xf3, 0x0f, 0x3e, 0xc9, 0x65, 0xe5, 0x3c, 0x0f, 0xd5, 0xd8, 0xf7, 0xfc, 0xf7,
+ 0xea, 0xdb, 0x09, 0xce, 0xfb, 0xc9, 0xb9, 0x5d, 0xf7, 0xdb, 0x13, 0xd7, 0x09,
+ 0x1d, 0x24, 0xec, 0xed, 0xe4, 0x5e, 0xdd, 0xc7, 0x1d, 0x0c, 0x25, 0xe2, 0xed,
+ 0x18, 0xbc, 0x1f, 0xfe, 0x23, 0xfe, 0xe5, 0xf2, 0xae, 0x17, 0xb3, 0x23, 0x62,
+ 0xef, 0xd5, 0xfc, 0xe0, 0xe0, 0xe0, 0xc1, 0xfd, 0xf6, 0x0f, 0xd1, 0x07, 0x08,
+ 0x03, 0xe2, 0xe2, 0x05, 0x18, 0x00, 0x2b, 0xfe, 0x00, 0xa6, 0xdf, 0x30, 0x11,
+ 0xf5, 0x17, 0x0b, 0xd7, 0xf0, 0xc3, 0x29, 0xfc, 0xd0, 0xe9, 0xe9, 0x0a, 0xce,
+ 0x35, 0xdb, 0x2b, 0xee, 0xc5, 0x0b, 0x10, 0xa7, 0x15, 0x18, 0x0f, 0xb5, 0xf4,
+ 0x2e, 0x0a, 0x22, 0xe9, 0x2c, 0x2f, 0xcd, 0x09, 0x63, 0xcb, 0x06, 0xeb, 0x28,
+ 0xdc, 0x40, 0x7f, 0xeb, 0x47, 0x25, 0xf8, 0x06, 0x76, 0x10, 0x24, 0x68, 0xa0,
+ 0x05, 0x2a, 0x02, 0xbf, 0xf3, 0x09, 0x5f, 0x2c, 0xe4, 0xd7, 0x01, 0xdb, 0x1b,
+ 0x25, 0x1e, 0xeb, 0xe4, 0xcb, 0x21, 0xe2, 0x06, 0xcf, 0xc3, 0x58, 0x03, 0x61,
+ 0x1b, 0x4b, 0xcf, 0x05, 0x29, 0xe4, 0xca, 0xe3, 0xe3, 0xdd, 0xfc, 0xe3, 0xba,
+ 0xd8, 0x0c, 0x0c, 0xe4, 0xfc, 0x0e, 0x1a, 0xf2, 0x16, 0x2d, 0x14, 0x06, 0xda,
+ 0x52, 0xee, 0xdc, 0xf4, 0xf7, 0xfe, 0x07, 0x2c, 0xd5, 0xd7, 0xfd, 0x03, 0x05,
+ 0xc4, 0x12, 0xeb, 0xdd, 0x0d, 0x0b, 0x4a, 0xd1, 0xf8, 0xc4, 0x22, 0x15, 0x02,
+ 0xf8, 0xf8, 0x12, 0x13, 0xf9, 0x17, 0xb0, 0x06, 0xc4, 0x1a, 0x23, 0x3b, 0xfd,
+ 0xee, 0xb7, 0x03, 0x14, 0x3a, 0x1b, 0x48, 0xd6, 0x2c, 0x36, 0x3c, 0xb3, 0x18,
+ 0x09, 0x0c, 0x08, 0x01, 0x5a, 0xf0, 0x21, 0xc3, 0x2b, 0x08, 0xce, 0xbb, 0xec,
+ 0x21, 0xa5, 0x20, 0xbd, 0xe0, 0xe9, 0x1d, 0x2d, 0x06, 0x55, 0x50, 0x14, 0x92,
+ 0xcd, 0x3b, 0x76, 0xdc, 0xfc, 0xf0, 0x69, 0x0a, 0x36, 0x35, 0xc5, 0x7b, 0x06,
+ 0x73, 0x0a, 0xfb, 0x11, 0xcb, 0xdf, 0x47, 0xd9, 0x0f, 0xc1, 0x30, 0x23, 0xc1,
+ 0xf8, 0x15, 0x3d, 0x2c, 0x05, 0x63, 0x35, 0xfa, 0x15, 0x0e, 0xe4, 0xea, 0x2c,
+ 0xb2, 0x19, 0xd9, 0x81, 0xf4, 0x33, 0x35, 0xfc, 0xc6, 0xec, 0x0c, 0xcc, 0x89,
+ 0x5d, 0xcd, 0x02, 0xf5, 0x27, 0x2b, 0xcf, 0xb7, 0xf0, 0xb6, 0x03, 0x29, 0x2b,
+ 0x71, 0x1c, 0xe9, 0x11, 0x23, 0xeb, 0x1b, 0x40, 0xed, 0x27, 0x6d, 0x56, 0xdb,
+ 0xac, 0xf9, 0xaf, 0x08, 0x22, 0xf0, 0x15, 0x13, 0x00, 0x2d, 0x29, 0xf2, 0xa7,
+ 0x16, 0xee, 0x28, 0x3a, 0x21, 0x17, 0xef, 0x10, 0xfc, 0xde, 0x12, 0x1f, 0x32,
+ 0xc9, 0x09, 0x5c, 0x0f, 0xe9, 0xc9, 0x0a, 0x11, 0x29, 0x1f, 0x1f, 0xb0, 0xd7,
+ 0x34, 0xd6, 0xe5, 0xe9, 0xe6, 0x48, 0x0c, 0xe7, 0xdd, 0x0c, 0x12, 0xfb, 0xdc,
+ 0x49, 0xec, 0xd8, 0x00, 0xd8, 0xe7, 0x38, 0xff, 0xf6, 0x47, 0xe0, 0xfe, 0xfc,
+ 0x28, 0xdf, 0x09, 0xcf, 0x2b, 0xdc, 0xe7, 0xc3, 0x2c, 0x3b, 0xe3, 0x21, 0x14,
+ 0x3b, 0xec, 0x1a, 0x23, 0x0a, 0x0e, 0xd6, 0x1a, 0x2b, 0x23, 0xfb, 0xff, 0xdf,
+ 0xe5, 0xf2, 0x1d, 0x16, 0x04, 0xf2, 0x44, 0xbf, 0xd8, 0xe2, 0xd5, 0x14, 0x00,
+ 0x23, 0x03, 0x0f, 0x81, 0xd1, 0xda, 0xb4, 0xc3, 0x08, 0xfd, 0xf6, 0xfc, 0xee,
+ 0xef, 0x10, 0x41, 0xc5, 0x44, 0x12, 0xff, 0xf4, 0xf8, 0xc1, 0xdc, 0xf2, 0x27,
+ 0x0a, 0x0c, 0x04, 0x0b, 0xe7, 0x0d, 0x05, 0x20, 0x34, 0xed, 0xe4, 0x3e, 0xfe,
+ 0x01, 0xfd, 0x08, 0xd1, 0x04, 0xf2, 0x22, 0xe3, 0x1c, 0x09, 0x26, 0xf6, 0xe2,
+ 0x47, 0xee, 0xf4, 0xc9, 0xe8, 0xd1, 0xf7, 0x5d, 0xed, 0x9d, 0x2a, 0x34, 0xee,
+ 0xc9, 0xd7, 0xcf, 0xf6, 0xff, 0x0d, 0x10, 0xfb, 0xb6, 0x0d, 0x18, 0x29, 0xde,
+ 0x9d, 0xd3, 0x35, 0xeb, 0xe0, 0x34, 0xe8, 0x53, 0x02, 0x1a, 0xd5, 0xda, 0x10,
+ 0xad, 0xc4, 0x10, 0x81, 0xe8, 0x39, 0x43, 0x05, 0xe7, 0xfb, 0x0c, 0xe1, 0xc8,
+ 0xe9, 0x13, 0x28, 0x54, 0xf9, 0xcb, 0xcf, 0xe3, 0x02, 0xd9, 0x16, 0xe7, 0xce,
+ 0xf3, 0x12, 0xe2, 0x19, 0xff, 0xcb, 0x26, 0xc0, 0xa8, 0xa7, 0x3e, 0x15, 0x03,
+ 0xdf, 0x41, 0xf2, 0xf2, 0x07, 0xbb, 0xe1, 0xbb, 0x00, 0xde, 0x1c, 0xf6, 0x06,
+ 0xcf, 0xdb, 0xd8, 0xf4, 0x21, 0x1f, 0x30, 0xeb, 0xc7, 0xf1, 0xd4, 0x25, 0x2a,
+ 0x0d, 0xad, 0x03, 0x0a, 0x02, 0x14, 0x2c, 0x12, 0x0a, 0x32, 0x0b, 0x36, 0xb4,
+ 0xf6, 0xf3, 0xfa, 0x72, 0xf9, 0xd0, 0x32, 0xaa, 0xd0, 0x0b, 0xbc, 0x2f, 0x29,
+ 0x3e, 0xea, 0xf1, 0xd8, 0xb4, 0x64, 0x2e, 0xc6, 0xcb, 0x18, 0x11, 0xe9, 0xd8,
+ 0xdd, 0xe7, 0x0c, 0x36, 0x0c, 0x1c, 0x16, 0xe0, 0x17, 0x1d, 0x0e, 0xd3, 0x99,
+ 0xb9, 0xee, 0xf7, 0xe7, 0xe0, 0xf2, 0xd2, 0x68, 0xc9, 0xe7, 0xe6, 0x17, 0x27,
+ 0x37, 0xf4, 0x7f, 0x16, 0xea, 0x3c, 0xc3, 0x20, 0x15, 0xf4, 0xf4, 0x09, 0x3e,
+ 0x39, 0x23, 0xd6, 0xdf, 0x18, 0x35, 0xd0, 0xd9, 0xb9, 0x2a, 0xd6, 0x23, 0xe4,
+ 0xbb, 0xe1, 0xd1, 0x0e, 0xae, 0x3f, 0xff, 0xa7, 0x0f, 0x26, 0x0c, 0x04, 0x03,
+ 0xcb, 0xe1, 0xff, 0xff, 0xf8, 0xd4, 0xe9, 0x14, 0xd7, 0x09, 0xee, 0x44, 0xe3,
+ 0xeb, 0xee, 0xfe, 0x0a, 0xf5, 0xf0, 0x20, 0xe5, 0x4c, 0xf1, 0x10, 0xf1, 0xf5,
+ 0xce, 0x23, 0xe0, 0xfe, 0xe7, 0xe5, 0x0b, 0x0d, 0x20, 0xe0, 0x0e, 0xdf, 0xf5,
+ 0xed, 0x7f, 0xf7, 0xf4, 0x33, 0x09, 0x45, 0xf2, 0xf3, 0x1f, 0x0d, 0x0f, 0x1c,
+ 0x32, 0x03, 0x04, 0x69, 0xff, 0x6e, 0x5a, 0xf1, 0xfc, 0x07, 0xf5, 0x07, 0xcd,
+ 0xdc, 0x0c, 0x4e, 0x2a, 0x2b, 0x28, 0x21, 0x20, 0xf3, 0x9e, 0xe3, 0x1d, 0x17,
+ 0xfe, 0x03, 0xa3, 0x07, 0x17, 0x14, 0xee, 0xed, 0x34, 0x10, 0xaa, 0x3c, 0x23,
+ 0xe8, 0x02, 0x28, 0x1c, 0xb9, 0xad, 0xe6, 0x4c, 0xaa, 0xb2, 0xfa, 0x1c, 0xfa,
+ 0x23, 0x62, 0x00, 0xf3, 0x32, 0xd2, 0x1f, 0xf0, 0xaa, 0x06, 0xf8, 0x9f, 0x2b,
+ 0x2c, 0xdc, 0xd7, 0xdb, 0xa9, 0xd6, 0xef, 0x0e, 0xe1, 0x08, 0xfe, 0x3d, 0x02,
+ 0xfa, 0xf7, 0x0b, 0x0f, 0xdf, 0x4d, 0x38, 0xf5, 0xea, 0x07, 0xea, 0xfa, 0x22,
+ 0xf0, 0xfb, 0x22, 0xe6, 0xd7, 0xdc, 0xdc, 0x65, 0x25, 0xf5, 0xdf, 0xc9, 0x09,
+ 0xe3, 0x4d, 0x0f, 0xee, 0xcb, 0x00, 0xf8, 0x5e, 0xd2, 0xc1, 0xfb, 0xd9, 0x2d,
+ 0x17, 0x93, 0x29, 0xf2, 0xfe, 0xe9, 0x8d, 0xba, 0xd8, 0xda, 0x39, 0x1b, 0xec,
+ 0xe7, 0xdc, 0xcb, 0xc4, 0xe7, 0x14, 0xdf, 0xd5, 0xce, 0xf2, 0x24, 0x2f, 0x3d,
+ 0xc0, 0xc9, 0x08, 0xa8, 0xf7, 0x2c, 0xf2, 0xce, 0x33, 0xcb, 0x39, 0x2d, 0x0c,
+ 0xdf, 0xaf, 0xd2, 0xda, 0xb9, 0x9e, 0x25, 0xbe, 0xa7, 0x12, 0x8e, 0x0b, 0xdc,
+ 0xe9, 0x23, 0xdd, 0xea, 0xb0, 0x4c, 0xdd, 0x1d, 0xc3, 0x0e, 0xd8, 0x37, 0xf2,
+ 0x0a, 0x01, 0x36, 0x00, 0x81, 0xeb, 0x40, 0xee, 0xb7, 0xee, 0xf3, 0x49, 0x35,
+ 0xdc, 0xbc, 0xd3, 0xe3, 0xf2, 0x0c, 0x19, 0xfd, 0xb0, 0xb7, 0x37, 0xe2, 0xda,
+ 0x32, 0x22, 0xe4, 0xe7, 0xc6, 0xeb, 0x01, 0x38, 0xc5, 0x2a, 0x34, 0x57, 0x52,
+ 0x34, 0xec, 0x09, 0xfc, 0x0e, 0x03, 0xcc, 0xde, 0xb4, 0xe9, 0x19, 0x16, 0x38,
+ 0x31, 0xff, 0xf1, 0xc2, 0xf6, 0xbb, 0x06, 0x22, 0x0e, 0x3e, 0xfc, 0xae, 0x12,
+ 0xf5, 0xe9, 0xc3, 0xed, 0x21, 0x58, 0x74, 0x3e, 0x00, 0xf9, 0xc3, 0x21, 0x29,
+ 0xfd, 0x0e, 0xdb, 0x17, 0xdb, 0xe4, 0xe6, 0xfc, 0xe9, 0xfa, 0x35, 0x11, 0xf2,
+ 0xdc, 0x2e, 0x3a, 0xf5, 0x1e, 0xf7, 0xd5, 0x05, 0xe3, 0x3c, 0xec, 0x0a, 0xbf,
+ 0xc6, 0xf2, 0x08, 0xf0, 0x04, 0xdf, 0x04, 0x23, 0xf6, 0xfb, 0xef, 0x45, 0xaf,
+ 0x06, 0x35, 0xec, 0xfd, 0x04, 0xe4, 0xeb, 0xf6, 0x06, 0xe0, 0x0e, 0x12, 0xf2,
+ 0xfc, 0xda, 0x13, 0x66, 0xe9, 0xde, 0xfe, 0xdd, 0x24, 0xf5, 0xd1, 0xed, 0xf3,
+ 0xc4, 0x33, 0xcb, 0x28, 0xe0, 0xfb, 0x19, 0xf2, 0xf3, 0xed, 0xe9, 0xdc, 0xf8,
+ 0x01, 0x0a, 0xf3, 0x01, 0xd7, 0xf6, 0xf6, 0x16, 0xea, 0xcb, 0x7f, 0xdf, 0xee,
+ 0xca, 0xbd, 0x1e, 0xe9, 0xe3, 0xd3, 0xf0, 0x49, 0xd5, 0xee, 0x0b, 0xed, 0xf5,
+ 0x24, 0xd7, 0x20, 0xf2, 0xcc, 0x21, 0xf2, 0x2e, 0xd7, 0xde, 0xe6, 0x02, 0xcc,
+ 0x37, 0xd1, 0xd5, 0x0e, 0x32, 0x42, 0x0c, 0xff, 0xd8, 0x5e, 0x46, 0xe6, 0xe5,
+ 0xec, 0xfa, 0xe3, 0xd1, 0xdf, 0x2d, 0x30, 0x1f, 0xde, 0xf9, 0xe6, 0xef, 0xdc,
+ 0x09, 0xdc, 0xe9, 0xcf, 0x2a, 0x03, 0xbc, 0xd0, 0x2e, 0x77, 0x30, 0xe5, 0xe7,
+ 0x2d, 0xc2, 0xf5, 0xcb, 0x0f, 0x1e, 0x7f, 0xf8, 0x2d, 0x07, 0x24, 0xf6, 0x24,
+ 0xc3, 0x14, 0x76, 0x0e, 0xee, 0x04, 0x05, 0xf0, 0x31, 0xed, 0xa1, 0xe1, 0x30,
+ 0x13, 0x26, 0xf4, 0xe4, 0xa4, 0xca, 0xbf, 0x22, 0xd9, 0x58, 0xd1, 0xde, 0xd3,
+ 0xff, 0x2f, 0xca, 0xf4, 0x72, 0xe8, 0xd3, 0xe0, 0xfb, 0x0a, 0xf7, 0x26, 0x07,
+ 0xdb, 0x3e, 0xe7, 0x45, 0xf1, 0x19, 0x09, 0xdf, 0xcd, 0x3d, 0x0c, 0x25, 0x16,
+ 0x0e, 0xe6, 0xd8, 0xe4, 0x2b, 0x06, 0x1d, 0x37, 0x12, 0xee, 0x0e, 0x49, 0x0f,
+ 0x1d, 0x29, 0xe2, 0x11, 0xec, 0xb7, 0xff, 0x3a, 0xce, 0x07, 0xd5, 0x14, 0xfb,
+ 0xfa, 0xc2, 0x06, 0x7f, 0x19, 0x0d, 0x06, 0xf7, 0x3c, 0xcb, 0xf0, 0x68, 0x1a,
+ 0xf1, 0xdf, 0xf3, 0x22, 0x1e, 0xe5, 0x0d, 0xde, 0x1c, 0xcd, 0xda, 0x09, 0xe4,
+ 0xf9, 0xed, 0xd5, 0xf7, 0xe4, 0xaa, 0xe6, 0x99, 0xe3, 0x1a, 0x02, 0x16, 0xa8,
+ 0x22, 0xee, 0x37, 0x03, 0xf0, 0x3c, 0xd7, 0xe4, 0xbf, 0xb1, 0xd2, 0x1b, 0x69,
+ 0x51, 0xe5, 0x16, 0xf7, 0x03, 0xb2, 0x9a, 0xbe, 0x04, 0xe6, 0xe3, 0x1b, 0x05,
+ 0x0a, 0x07, 0x08, 0x21, 0xd5, 0xf7, 0x0a, 0x0e, 0x1a, 0xda, 0x12, 0x33, 0xf8,
+ 0x24, 0xf2, 0x4d, 0x01, 0x0c, 0x31, 0xe6, 0xd7, 0xcb, 0xf9, 0x09, 0x1a, 0xdf,
+ 0x02, 0xb3, 0xd2, 0x13, 0xe8, 0x0e, 0x1b, 0x42, 0xcd, 0x00, 0x2a, 0x34, 0x73,
+ 0xca, 0xc5, 0x25, 0x07, 0x08, 0xf6, 0x3b, 0xcb, 0x0e, 0xbf, 0x07, 0xf0, 0xc7,
+ 0x33, 0xf0, 0xdc, 0x40, 0x09, 0x5b, 0xc3, 0x00, 0x5f, 0xcd, 0xf0, 0xf3, 0x38,
+ 0xf9, 0x42, 0xe1, 0x07, 0x04, 0x36, 0x2a, 0xd1, 0xba, 0xfc, 0x62, 0xd4, 0x0f,
+ 0xe3, 0x7f, 0x2e, 0xee, 0x65, 0xd1, 0xdb, 0xbd, 0x35, 0x03, 0x47, 0xfd, 0x9c,
+ 0x37, 0x30, 0xce, 0x3a, 0x18, 0xe6, 0x35, 0xb2, 0x11, 0x97, 0xa7, 0xf9, 0xe4,
+ 0xea, 0x3a, 0x07, 0xf6, 0xe7, 0x57, 0x1a, 0xf4, 0xe6, 0x56, 0xdc, 0x96, 0x30,
+ 0x58, 0x35, 0xe8, 0x0e, 0x05, 0xfa, 0x0b, 0x36, 0x0a, 0xaa, 0xdc, 0x14, 0x01,
+ 0x06, 0x2c, 0xe7, 0x23, 0xda, 0x08, 0x23, 0xbd, 0xa4, 0x19, 0x24, 0xfb, 0x1f,
+ 0x25, 0xe2, 0x1a, 0x1b, 0xf6, 0x0b, 0x23, 0xcf, 0x30, 0xc5, 0xfd, 0xe9, 0x2d,
+ 0xdf, 0x64, 0xe2, 0x05, 0x50, 0x08, 0xcc, 0xd1, 0xbc, 0xe0, 0x93, 0xfe, 0x09,
+ 0xa5, 0x04, 0xf4, 0xec, 0x03, 0x28, 0xbe, 0x38, 0x24, 0x11, 0x0b, 0x2d, 0xdd,
+ 0x1c, 0xc9, 0x0f, 0x40, 0xfd, 0x03, 0x06, 0xe8, 0x11, 0xa0, 0x07, 0xe1, 0x0a,
+ 0xf9, 0xcc, 0xbb, 0x43, 0x0b, 0x32, 0xcf, 0xbe, 0x2c, 0xbc, 0xb0, 0xe8, 0x05,
+ 0x1b, 0x21, 0xb5, 0xfe, 0xd7, 0x4a, 0xa6, 0x08, 0x0c, 0x0c, 0x83, 0xea, 0x11,
+ 0xfe, 0x45, 0xdb, 0xe8, 0x22, 0xc5, 0xfe, 0xee, 0x11, 0x0a, 0x13, 0xdb, 0xf1,
+ 0x81, 0xf7, 0x29, 0x1b, 0xd1, 0xfc, 0xd6, 0x22, 0xb5, 0x9b, 0x36, 0x17, 0x1e,
+ 0x45, 0xa9, 0x4f, 0x13, 0x29, 0x04, 0xae, 0xee, 0x0b, 0xe4, 0x03, 0x64, 0x20,
+ 0xf2, 0x1a, 0x04, 0xf1, 0x48, 0xd9, 0xd0, 0x2d, 0xf2, 0xd7, 0x13, 0x37, 0x1c,
+ 0xe0, 0xc6, 0xd3, 0xd7, 0x17, 0x37, 0xba, 0xb2, 0xa0, 0xce, 0x2b, 0xb1, 0xf8,
+ 0xd6, 0x14, 0xf3, 0xea, 0x23, 0xff, 0xdb, 0x20, 0xba, 0xdf, 0xff, 0xd7, 0xfd,
+ 0x0e, 0xe0, 0x11, 0xec, 0xfd, 0xcc, 0x02, 0x2a, 0xfb, 0x28, 0x2e, 0xf2, 0xe4,
+ 0x2c, 0x44, 0xf1, 0x36, 0xc6, 0xeb, 0x19, 0xbd, 0x30, 0x07, 0xf3, 0xe9, 0x15,
+ 0xe6, 0xef, 0xf4, 0x01, 0x08, 0x3a, 0x00, 0xdf, 0x02, 0xeb, 0xfc, 0xf4, 0x21,
+ 0xa2, 0x5d, 0x06, 0xd1, 0x10, 0x03, 0x12, 0xcb, 0xf5, 0xb2, 0x05, 0xdf, 0xd0,
+ 0x1a, 0x1b, 0x15, 0x18, 0x05, 0xe1, 0xf1, 0xee, 0xf5, 0xdc, 0xff, 0x81, 0x1e,
+ 0x02, 0x25, 0xc9, 0xe5, 0xfd, 0xd2, 0xf2, 0xfb, 0xcb, 0x13, 0x29, 0x79, 0x1a,
+ 0x07, 0xb1, 0xea, 0xed, 0xf6, 0xdf, 0xeb, 0xd2, 0xdf, 0x35, 0xea, 0xed, 0x48,
+ 0xb2, 0xc3, 0xe1, 0xb6, 0xdb, 0x13, 0x01, 0x16, 0x10, 0xcd, 0xfb, 0xeb, 0x10,
+ 0xe5, 0x0e, 0x11, 0xfa, 0x2d, 0x0b, 0xf4, 0xd6, 0xf6, 0xbf, 0x2a, 0xda, 0x17,
+ 0xfd, 0xde, 0xfd, 0xf2, 0xce, 0xdb, 0x36, 0xe9, 0x1e, 0xcc, 0x20, 0xed, 0x15,
+ 0x13, 0xe1, 0x1f, 0xec, 0xdb, 0x21, 0xc5, 0x1d, 0xf3, 0xf7, 0x09, 0x1f, 0xd5,
+ 0x01, 0x25, 0xc7, 0xfc, 0x11, 0xc2, 0x2f, 0xff, 0x34, 0x10, 0x15, 0xf3, 0x0e,
+ 0x33, 0x24, 0x37, 0xea, 0x04, 0x10, 0xff, 0x16, 0xcf, 0x0e, 0x07, 0x17, 0xb5,
+ 0xfe, 0xb2, 0x49, 0xe6, 0xda, 0xff, 0x12, 0x05, 0x1e, 0xdc, 0xea, 0x21, 0x0b,
+ 0xde, 0xe8, 0xeb, 0x4f, 0xe3, 0xf7, 0xe3, 0x1e, 0x04, 0xdf, 0x1d, 0x00, 0xfa,
+ 0xcd, 0xe2, 0x0d, 0xd7, 0x1a, 0x00, 0xf1, 0xd8, 0xf1, 0xf8, 0xe2, 0xf9, 0xdc,
+ 0xe5, 0xc7, 0xfd, 0x09, 0x0c, 0xe7, 0x05, 0x10, 0xc8, 0xd6, 0x0f, 0x11, 0xb9,
+ 0x45, 0xdc, 0x09, 0xd3, 0xfc, 0xba, 0xe7, 0x5c, 0xda, 0x0e, 0xfb, 0x24, 0xf3,
+ 0x6a, 0xc1, 0x04, 0xd4, 0x13, 0xb9, 0x02, 0xd9, 0xf0, 0x16, 0xf1, 0x18, 0x03,
+ 0x06, 0x20, 0x0f, 0xe6, 0xee, 0xef, 0xc1, 0xe5, 0xe2, 0x7f, 0x28, 0xf9, 0x06,
+ 0xed, 0x7e, 0xa6, 0x2f, 0x1d, 0xc2, 0xf6, 0xdd, 0x03, 0xed, 0x05, 0x1c, 0x1d,
+ 0x8c, 0xe5, 0x0f, 0xe2, 0x9b, 0x1d, 0xf3, 0x14, 0xdf, 0x2d, 0x22, 0x08, 0x48,
+ 0xed, 0xef, 0xf2, 0x05, 0xc2, 0xd4, 0xd9, 0x1a, 0x59, 0x01, 0xeb, 0x9c, 0xdc,
+ 0xe0, 0x01, 0xce, 0x09, 0x16, 0xd6, 0xed, 0xe6, 0xda, 0xbf, 0xbe, 0x0a, 0x03,
+ 0xf5, 0xd7, 0xdd, 0x3c, 0x22, 0x66, 0xf2, 0x4b, 0x2c, 0x7f, 0x0c, 0xa9, 0x62,
+ 0x8f, 0xb3, 0x6b, 0x2f, 0x13, 0x0b, 0xff, 0xbf, 0x01, 0xa8, 0xd2, 0xe4, 0x8e,
+ 0x39, 0x59, 0xc7, 0x4c, 0xff, 0x1e, 0xeb, 0x32, 0xf9, 0x0e, 0xf2, 0x50, 0x56,
+ 0x2b, 0xe5, 0x0c, 0x25, 0xf8, 0xe9, 0xf0, 0x30, 0xf7, 0x17, 0x47, 0xaf, 0xfa,
+ 0xd8, 0x22, 0x2b, 0xd1, 0xca, 0x3e, 0xda, 0x01, 0x21, 0xf5, 0x63, 0x0d, 0xfa,
+ 0xed, 0x33, 0x7c, 0xc8, 0xd5, 0x49, 0x28, 0x0d, 0xe1, 0xe4, 0x1c, 0x41, 0xfb,
+ 0x12, 0xec, 0xae, 0x5f, 0x1b, 0xe8, 0x3b, 0x05, 0xb7, 0xe8, 0x04, 0x1d, 0xd1,
+ 0xfe, 0xbd, 0x10, 0xe9, 0x2b, 0xc9, 0x35, 0x04, 0x0e, 0x3e, 0xe7, 0xe8, 0xd0,
+ 0x76, 0xe3, 0xec, 0xd8, 0x43, 0xf8, 0xbe, 0x12, 0x0a, 0x21, 0xd0, 0xfc, 0x3a,
+ 0xd7, 0xf5, 0xe2, 0x4b, 0xea, 0xda, 0x1c, 0xce, 0x05, 0x37, 0xff, 0x2f, 0xda,
+ 0x40, 0x0f, 0x22, 0xfa, 0xd8, 0x01, 0xcc, 0xd2, 0x2c, 0xf7, 0x1d, 0x4e, 0x7f,
+ 0xdd, 0xe6, 0x0f, 0xcc, 0xe2, 0xe7, 0x12, 0xa9, 0xda, 0xcb, 0xe9, 0x06, 0x0e,
+ 0x04, 0x3e, 0xf7, 0xed, 0x06, 0xc4, 0xd3, 0xdf, 0xcf, 0xbe, 0xa9, 0xd8, 0xf2,
+ 0x2d, 0x21, 0x54, 0xc1, 0x19, 0xfa, 0x1f, 0xfa, 0xbb, 0xed, 0x48, 0x29, 0x04,
+ 0x41, 0x0e, 0x72, 0x06, 0x19, 0x2a, 0x16, 0x05, 0x25, 0xf1, 0x35, 0x1f, 0xfc,
+ 0x0e, 0x06, 0xc1, 0x0e, 0xf6, 0x2b, 0xad, 0x1e, 0xfe, 0x26, 0xf3, 0x81, 0x27,
+ 0xaf, 0x9b, 0x08, 0xf9, 0x38, 0xf2, 0x9a, 0x92, 0x21, 0xe5, 0x3b, 0x3b, 0x5b,
+ 0xa0, 0xf8, 0x07, 0x1e, 0x39, 0xe7, 0x0c, 0xbf, 0x33, 0x41, 0xed, 0xb0, 0x27,
+ 0x42, 0x02, 0x2a, 0xf8, 0x15, 0xd1, 0x10, 0xbe, 0xfd, 0x04, 0xfc, 0xb9, 0x4a,
+ 0x2f, 0x0f, 0xfc, 0xfe, 0xbf, 0xae, 0x47, 0xc9, 0x12, 0xa2, 0xe0, 0xea, 0x41,
+ 0x47, 0x59, 0xdb, 0x21, 0x09, 0x15, 0x1a, 0xf1, 0x23, 0xcb, 0xab, 0x53, 0x35,
+ 0x0d, 0x8a, 0xcf, 0x06, 0xf1, 0x28, 0xe3, 0xfd, 0x2f, 0xe8, 0x2c, 0x0c, 0xe8,
+ 0x3d, 0xed, 0x5a, 0xe1, 0xb1, 0x18, 0x1b, 0x4e, 0xf4, 0x2e, 0xd3, 0x0c, 0x20,
+ 0x23, 0x3c, 0xd6, 0xbc, 0x25, 0x1c, 0x26, 0x33, 0xe9, 0x0f, 0xcb, 0x2c, 0x2b,
+ 0x13, 0xda, 0xb5, 0x08, 0xeb, 0xc2, 0xd1, 0x1b, 0xd5, 0x26, 0xf0, 0x33, 0xf6,
+ 0xec, 0x00, 0xf1, 0x14, 0x23, 0x02, 0x0d, 0xf8, 0x26, 0x2a, 0xef, 0xdf, 0xc6,
+ 0xdd, 0xd5, 0xeb, 0xf3, 0x09, 0x0d, 0x4f, 0x06, 0x39, 0xf5, 0xea, 0x05, 0x3d,
+ 0x15, 0xb7, 0x27, 0xa0, 0xed, 0xdb, 0xe7, 0x02, 0xa3, 0x17, 0xdf, 0xdf, 0xc0,
+ 0x07, 0x13, 0xef, 0x39, 0xd9, 0xe5, 0x92, 0x2f, 0xf1, 0x3b, 0x29, 0x7f, 0x78,
+ 0xdb, 0xea, 0xf1, 0x3d, 0x4d, 0x5f, 0x17, 0x52, 0xcf, 0x1b, 0xdc, 0x24, 0x40,
+ 0x0a, 0x03, 0x21, 0xea, 0x01, 0xd9, 0x4c, 0xfa, 0x08, 0x35, 0xe5, 0xfe, 0xf6,
+ 0x0f, 0x46, 0xf5, 0x17, 0x15, 0x24, 0xed, 0x09, 0x15, 0x0c, 0x23, 0xe9, 0x3f,
+ 0x14, 0xf7, 0xc0, 0xfb, 0x13, 0x41, 0xd5, 0xe5, 0xd1, 0xe2, 0xb0, 0xee, 0x1f,
+ 0x20, 0xec, 0x23, 0xf9, 0xe9, 0x75, 0xfb, 0x1c, 0x5b, 0x0e, 0x28, 0x01, 0xea,
+ 0xf6, 0xe0, 0x0f, 0xfc, 0xe5, 0x25, 0x47, 0xaa, 0x1e, 0xf2, 0x3f, 0xf9, 0x0f,
+ 0x07, 0x12, 0xd3, 0xb2, 0xc5, 0xd3, 0x3d, 0xd7, 0x07, 0x2c, 0xc7, 0xcb, 0x39,
+ 0x16, 0xf7, 0xdf, 0x4f, 0xc7, 0x21, 0x22, 0x30, 0xaa, 0xb5, 0x18, 0xbf, 0x2d,
+ 0xf3, 0x0d, 0xf8, 0x46, 0x10, 0x86, 0x3d, 0xef, 0x3c, 0x4f, 0x29, 0xfc, 0xe4,
+ 0xd3, 0x27, 0xf7, 0x1f, 0x26, 0x29, 0xf1, 0xd0, 0x29, 0xe6, 0xf0, 0xd1, 0x04,
+ 0xac, 0xdd, 0xd9, 0xa6, 0xfc, 0xd0, 0xd4, 0x09, 0x11, 0x4a, 0x32, 0xe2, 0xf9,
+ 0xeb, 0xfc, 0xcb, 0xf9, 0x3b, 0xc5, 0xd3, 0x95, 0x50, 0x3e, 0x16, 0x94, 0xe7,
+ 0xcb, 0xcb, 0xda, 0x3e, 0xd5, 0x0a, 0xc7, 0x1d, 0x06, 0xe0, 0x7f, 0x31, 0x62,
+ 0x01, 0x1d, 0x37, 0x4e, 0xeb, 0x14, 0x04, 0xf2, 0x2a, 0x05, 0xd9, 0x4a, 0x34,
+ 0xec, 0x1f, 0x32, 0x89, 0xf6, 0xcd, 0x5e, 0x1e, 0x28, 0x1a, 0x3e, 0xea, 0xdd,
+ 0x1a, 0x49, 0xfd, 0x25, 0x26, 0x2d, 0xde, 0xe5, 0xdb, 0xd9, 0x33, 0x42, 0xda,
+ 0x0b, 0x21, 0xf3, 0xd6, 0xe5, 0x13, 0x1e, 0x12, 0xcb, 0x45, 0x12, 0x2c, 0x1f,
+ 0x3b, 0xba, 0x1c, 0x0d, 0xfe, 0x9e, 0xe5, 0x3d, 0x17, 0x47, 0x81, 0xe8, 0xd8,
+ 0x28, 0xe5, 0xf9, 0x0e, 0xc2, 0x2b, 0xe2, 0xb7, 0xf2, 0x2c, 0x02, 0x04, 0x51,
+ 0xfa, 0x07, 0xb7, 0x25, 0x05, 0x10, 0xb0, 0xe3, 0xd9, 0x0f, 0x03, 0x0f, 0x03,
+ 0x15, 0xeb, 0xea, 0xdf, 0xe6, 0x96, 0xfe, 0xf0, 0x0d, 0x19, 0xdd, 0xea, 0xfd,
+ 0xf3, 0x4a, 0xb3, 0xc6, 0x0e, 0x19, 0xe7, 0xf9, 0x0d, 0x1c, 0x22, 0xff, 0xd7,
+ 0x15, 0xce, 0x31, 0xde, 0xd4, 0xe1, 0xee, 0x16, 0x04, 0x2d, 0x01, 0xe6, 0xd2,
+ 0x22, 0x1b, 0x9c, 0xc9, 0xdc, 0xef, 0xf4, 0x2d, 0x0f, 0xaf, 0xb0, 0x0c, 0xde,
+ 0xf4, 0x2c, 0x32, 0x19, 0x99, 0x10, 0xe2, 0x08, 0xbe, 0x0a, 0xe3, 0x13, 0x4c,
+ 0x08, 0x0b, 0xeb, 0x03, 0xfb, 0x3d, 0xc4, 0xcb, 0xf5, 0xff, 0x22, 0xd6, 0xe8,
+ 0x0e, 0xd3, 0xc0, 0x55, 0xbc, 0x2b, 0x3c, 0xe4, 0x18, 0x0e, 0xd5, 0xe5, 0xd0,
+ 0xe3, 0x2e, 0x27, 0x18, 0x2a, 0x02, 0x09, 0xf2, 0xf1, 0x12, 0x32, 0x14, 0xbd,
+ 0xe9, 0x46, 0x0b, 0xe5, 0xf4, 0x1b, 0xf7, 0xde, 0xf9, 0xf4, 0xcd, 0xe9, 0xbe,
+ 0x05, 0xc8, 0x4c, 0xd7, 0x0e, 0x1c, 0xec, 0xca, 0x23, 0xe4, 0xf1, 0xf0, 0xf6,
+ 0xfe, 0x27, 0xcf, 0x9f, 0xda, 0xd6, 0x3a, 0xfe, 0xd3, 0xd8, 0xf2, 0xb3, 0x77,
+ 0x08, 0xba, 0xc9, 0xbb, 0x8e, 0x14, 0xed, 0x1d, 0x17, 0xe3, 0xfd, 0xcf, 0xef,
+ 0x7f, 0x1a, 0xde, 0x0a, 0x38, 0x15, 0xc5, 0xef, 0xbf, 0xf5, 0x32, 0xd4, 0x08,
+ 0xcc, 0xcb, 0x05, 0xfc, 0x1e, 0xf3, 0xda, 0xdb, 0x2c, 0x19, 0x14, 0xf0, 0x1a,
+ 0x38, 0x23, 0xa8, 0xa2, 0x09, 0x1f, 0x1c, 0x22, 0xe2, 0xe1, 0x04, 0x53, 0x1d,
+ 0xf7, 0x50, 0x0f, 0xf3, 0x2d, 0x1b, 0x2e, 0xe3, 0xfb, 0x25, 0x17, 0xe2, 0xef,
+ 0x68, 0xfe, 0xff, 0x3d, 0xdb, 0xed, 0xdd, 0xe2, 0xbe, 0x07, 0xfd, 0x41, 0x1c,
+ 0x1e, 0xed, 0xca, 0xf0, 0x1b, 0xe6, 0x0b, 0xe4, 0x1e, 0x30, 0xf0, 0xfd, 0x1a,
+ 0x5c, 0xa1, 0xc4, 0x16, 0x15, 0xfa, 0x15, 0x11, 0xe4, 0xdb, 0x28, 0xd5, 0xfa,
+ 0xf7, 0xdd, 0xf3, 0x9a, 0x67, 0xc6, 0xfc, 0xf8, 0x0b, 0x07, 0xaf, 0x38, 0xaa,
+ 0xea, 0xf1, 0x10, 0x49, 0x3c, 0x19, 0x7f, 0x33, 0xc8, 0xeb, 0x59, 0x12, 0xc7,
+ 0xe4, 0xea, 0x24, 0x4c, 0x07, 0x44, 0x1a, 0x0b, 0x00, 0x61, 0x0f, 0x10, 0xef,
+ 0x20, 0xd9, 0x69, 0x4c, 0xc5, 0xd1, 0xe1, 0x1e, 0x0a, 0xf2, 0xe9, 0xef, 0x4c,
+ 0x4a, 0xf5, 0x35, 0x00, 0xcd, 0xd8, 0xe9, 0x71, 0x53, 0x1a, 0xff, 0xfb, 0x22,
+ 0x16, 0xf0, 0x1d, 0xdf, 0xb1, 0xc3, 0xef, 0xf9, 0xe5, 0x10, 0xde, 0x02, 0x4f,
+ 0xe4, 0x12, 0xfd, 0x0c, 0x66, 0x28, 0xc7, 0xf6, 0x5d, 0x06, 0xfe, 0xcd, 0x99,
+ 0x03, 0xc8, 0xc8, 0x06, 0xc5, 0xcf, 0x06, 0x4f, 0xb1, 0x50, 0x1b, 0xf4, 0xbd,
+ 0xb1, 0x40, 0x5f, 0x23, 0x9e, 0x27, 0x16, 0xd3, 0x4e, 0x2c, 0xe7, 0xaf, 0xe0,
+ 0xf3, 0xed, 0xc9, 0x35, 0x0a, 0x15, 0x2b, 0xea, 0x81, 0x9f, 0x08, 0x0c, 0x25,
+ 0x14, 0x12, 0xb0, 0xc3, 0x2c, 0x5a, 0xe9, 0x3f, 0x70, 0xf0, 0x00, 0xdb, 0xd1,
+ 0xeb, 0xf8, 0x08, 0x33, 0xf6, 0xfb, 0x51, 0xde, 0xd6, 0xc4, 0x46, 0x36, 0xf0,
+ 0x8f, 0x0c, 0x5a, 0x44, 0xf6, 0x15, 0xfa, 0xf2, 0xf7, 0xcb, 0x01, 0xa2, 0xe0,
+ 0x3d, 0xeb, 0x43, 0x12, 0xf7, 0xfd, 0xe8, 0x64, 0x12, 0xe5, 0xd7, 0xcb, 0xf1,
+ 0x32, 0xfb, 0x0a, 0x81, 0x13, 0xf8, 0xf9, 0xc9, 0xab, 0xec, 0x09, 0xe6, 0xdf,
+ 0xf1, 0x10, 0x0c, 0xe8, 0xcd, 0xf2, 0xfe, 0x34, 0x05, 0xf7, 0x9d, 0xfb, 0xeb,
+ 0x55, 0x06, 0xe5, 0x1f, 0xc0, 0xa1, 0xb8, 0xd0, 0x21, 0xdd, 0x5a, 0xd1, 0x14,
+ 0x09, 0xfb, 0xfa, 0x24, 0xf5, 0x7f, 0x06, 0xe1, 0x38, 0xd2, 0x0f, 0x14, 0x07,
+ 0xf4, 0x10, 0x16, 0x20, 0x09, 0x16, 0x2f, 0xff, 0x2a, 0xdf, 0xd8, 0xea, 0x0d,
+ 0xe1, 0xd2, 0xe8, 0xda, 0xba, 0xd8, 0x24, 0x15, 0xc4, 0x14, 0xc7, 0x08, 0x00,
+ 0x1e, 0xc3, 0xe0, 0xaf, 0xf9, 0x05, 0x0f, 0xe9, 0x2c, 0xc9, 0x36, 0xff, 0xcc,
+ 0xf2, 0xec, 0xdb, 0xda, 0x2f, 0x26, 0xe4, 0x11, 0xeb, 0x56, 0x1c, 0x62, 0xd2,
+ 0x03, 0xd1, 0x26, 0xc6, 0xe0, 0xc0, 0xef, 0xe3, 0x30, 0xe4, 0xc1, 0x35, 0x1c,
+ 0x1d, 0xc9, 0x0b, 0xd2, 0xe0, 0x14, 0x2e, 0xf2, 0xd9, 0x0d, 0xd9, 0xea, 0x33,
+ 0xeb, 0x09, 0x15, 0xfb, 0x11, 0xb0, 0xe7, 0xe7, 0x0c, 0xdd, 0xca, 0x16, 0xe1,
+ 0xfe, 0xd9, 0x06, 0x04, 0x1e, 0x06, 0xe3, 0x0d, 0xeb, 0x02, 0xe7, 0x05, 0xfd,
+ 0xb0, 0xee, 0xd1, 0xf3, 0xa5, 0xee, 0xf1, 0xd2, 0xf3, 0xd6, 0x07, 0x12, 0xf3,
+ 0x0a, 0xf5, 0x0b, 0xd9, 0x13, 0xbd, 0x10, 0x1a, 0x4d, 0x04, 0xcf, 0x02, 0x00,
+ 0x0e, 0x2f, 0xfc, 0xec, 0x2d, 0x2c, 0x50, 0x12, 0xdf, 0xf0, 0x23, 0xdc, 0xb8,
+ 0xf0, 0xcf, 0xcd, 0x06, 0x63, 0x04, 0x42, 0x12, 0x2b, 0x3f, 0x29, 0x48, 0xdd,
+ 0xd9, 0xcc, 0xc6, 0xf8, 0xb5, 0xff, 0xeb, 0xc6, 0x51, 0xfd, 0x3b, 0xf0, 0x12,
+ 0x8e, 0x03, 0xea, 0x38, 0x81, 0xea, 0x18, 0x06, 0xcd, 0xc3, 0xfb, 0x08, 0xff,
+ 0xd5, 0x17, 0xc5, 0xa1, 0xfd, 0x12, 0x08, 0xfb, 0x3c, 0x0a, 0x12, 0xf9, 0xd9,
+ 0xe5, 0xc8, 0x25, 0x2e, 0xba, 0x1f, 0xfd, 0xf7, 0x03, 0x41, 0xd9, 0x9d, 0x34,
+ 0xde, 0x39, 0x5c, 0x2b, 0x05, 0x2d, 0x00, 0x34, 0x28, 0xe6, 0x21, 0x38, 0xd2,
+ 0x09, 0x06, 0xb9, 0x47, 0xdf, 0x07, 0xc7, 0x23, 0xfc, 0x27, 0x32, 0xf5, 0xe0,
+ 0x24, 0x22, 0xee, 0xde, 0xfe, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x83, 0x0b, 0x00, 0x00, 0xa8, 0x27, 0x00, 0x00, 0x47, 0xe1, 0xff, 0xff,
+ 0xd6, 0xfd, 0xff, 0xff, 0x40, 0xca, 0xff, 0xff, 0xd3, 0x25, 0x00, 0x00, 0xc2,
+ 0xff, 0xff, 0xff, 0xeb, 0xc2, 0xff, 0xff, 0xb1, 0x52, 0x00, 0x00, 0x51, 0x09,
+ 0x00, 0x00, 0x31, 0xea, 0xff, 0xff, 0x65, 0xc3, 0xff, 0xff, 0x59, 0x09, 0x00,
+ 0x00, 0x6a, 0xe3, 0xff, 0xff, 0x33, 0x02, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00,
+ 0x2f, 0x23, 0x00, 0x00, 0x26, 0x02, 0x00, 0x00, 0x66, 0xd9, 0xff, 0xff, 0x7a,
+ 0xd8, 0xff, 0xff, 0x0b, 0x15, 0x00, 0x00, 0xfd, 0x2e, 0x00, 0x00, 0xd7, 0x2c,
+ 0x00, 0x00, 0x87, 0xef, 0xff, 0xff, 0x41, 0x23, 0x00, 0x00, 0x3a, 0x9e, 0xff,
+ 0xff, 0x43, 0xfe, 0xff, 0xff, 0x16, 0x10, 0x00, 0x00, 0x4c, 0x01, 0x00, 0x00,
+ 0x72, 0xda, 0xff, 0xff, 0x66, 0xfa, 0xff, 0xff, 0x64, 0xfe, 0xff, 0xff, 0x34,
+ 0x2d, 0x00, 0x00, 0x62, 0x0b, 0x00, 0x00, 0xa6, 0x08, 0x00, 0x00, 0xf3, 0xd2,
+ 0xff, 0xff, 0x7d, 0x49, 0x00, 0x00, 0x8a, 0xd6, 0xff, 0xff, 0x06, 0xf0, 0xff,
+ 0xff, 0x90, 0x3d, 0x00, 0x00, 0xfd, 0x18, 0x00, 0x00, 0xe3, 0xee, 0xff, 0xff,
+ 0x05, 0x01, 0x00, 0x00, 0x6e, 0xb2, 0xff, 0xff, 0xb3, 0x0a, 0x00, 0x00, 0xaa,
+ 0xdd, 0xff, 0xff, 0x1c, 0x39, 0x00, 0x00, 0xa0, 0x10, 0x00, 0x00, 0x90, 0x05,
+ 0x00, 0x00, 0x95, 0x29, 0x00, 0x00, 0x4f, 0xfc, 0xff, 0xff, 0x92, 0x0a, 0x00,
+ 0x00, 0xb0, 0x0a, 0x00, 0x00, 0x3d, 0x2d, 0x00, 0x00, 0x52, 0x0c, 0x00, 0x00,
+ 0xdc, 0x25, 0x00, 0x00, 0x4a, 0xdb, 0xff, 0xff, 0x9c, 0x36, 0x00, 0x00, 0xff,
+ 0xd2, 0xff, 0xff, 0xa3, 0xff, 0xff, 0xff, 0x14, 0xf2, 0xff, 0xff, 0x3d, 0x0d,
+ 0x00, 0x00, 0x45, 0x03, 0x00, 0x00, 0x39, 0xe4, 0xff, 0xff, 0xdb, 0x02, 0x00,
+ 0x00, 0xf0, 0xed, 0xff, 0xff, 0xfb, 0xbf, 0xff, 0xff, 0xd1, 0xee, 0xff, 0xff,
+ 0x42, 0x1d, 0x00, 0x00, 0x27, 0x0f, 0x00, 0x00, 0xbc, 0x02, 0x00, 0x00, 0xd1,
+ 0x39, 0x00, 0x00, 0x96, 0xf2, 0xff, 0xff, 0xe6, 0x2b, 0x00, 0x00, 0x0a, 0x27,
+ 0x00, 0x00, 0x06, 0xe2, 0xff, 0xff, 0x10, 0x0b, 0x00, 0x00, 0x6e, 0xdf, 0xff,
+ 0xff, 0x57, 0xde, 0xff, 0xff, 0x74, 0xf7, 0xff, 0xff, 0x30, 0xf3, 0xff, 0xff,
+ 0xbf, 0x13, 0x00, 0x00, 0x3f, 0x05, 0x00, 0x00, 0x0c, 0xe5, 0xff, 0xff, 0xe7,
+ 0xf8, 0xff, 0xff, 0xd3, 0x1e, 0x00, 0x00, 0xa7, 0x1f, 0x00, 0x00, 0x44, 0x21,
+ 0x00, 0x00, 0xf1, 0xf6, 0xff, 0xff, 0xe1, 0x1a, 0x00, 0x00, 0x60, 0xbc, 0xff,
+ 0xff, 0x73, 0x09, 0x00, 0x00, 0x71, 0x06, 0x00, 0x00, 0x0c, 0x0a, 0x00, 0x00,
+ 0x9e, 0x31, 0x00, 0x00, 0xac, 0xe8, 0xff, 0xff, 0xff, 0x06, 0x00, 0x00, 0xff,
+ 0x21, 0x00, 0x00, 0xa2, 0x5b, 0x00, 0x00, 0x1e, 0xfc, 0xff, 0xff, 0x56, 0x04,
+ 0x00, 0x00, 0xf1, 0xd9, 0xff, 0xff, 0xca, 0x27, 0x00, 0x00, 0x21, 0xf1, 0xff,
+ 0xff, 0x40, 0xd0, 0xff, 0xff, 0xdb, 0x06, 0x00, 0x00, 0xec, 0x3e, 0x00, 0x00,
+ 0x9e, 0x0e, 0x00, 0x00, 0x0b, 0xe9, 0xff, 0xff, 0x7e, 0x4a, 0x00, 0x00, 0x0a,
+ 0x1e, 0x00, 0x00, 0x30, 0xfe, 0xff, 0xff, 0x95, 0x0b, 0x00, 0x00, 0x06, 0xf8,
+ 0xff, 0xff, 0x74, 0x43, 0x00, 0x00, 0x71, 0x2a, 0x00, 0x00, 0x8a, 0x16, 0x00,
+ 0x00, 0x65, 0xf5, 0xff, 0xff, 0x23, 0x02, 0x00, 0x00, 0xc6, 0x01, 0x00, 0x00,
+ 0x4f, 0xd5, 0xff, 0xff, 0x5e, 0x0a, 0x00, 0x00, 0x88, 0x32, 0x00, 0x00, 0x7a,
+ 0x18, 0x00, 0x00, 0x51, 0xd4, 0xff, 0xff, 0xc7, 0x25, 0x00, 0x00, 0xc8, 0x2f,
+ 0x00, 0x00, 0x01, 0x0b, 0x00, 0x00, 0xfa, 0xe0, 0xfe, 0xff, 0x04, 0x00, 0x00,
+ 0x00, 0x80, 0x04, 0x00, 0x00, 0x7a, 0x88, 0xba, 0x3f, 0xcb, 0xb5, 0x1d, 0xad,
+ 0x81, 0xb9, 0xc1, 0x77, 0x18, 0xa7, 0xd0, 0x76, 0xe0, 0xc9, 0x65, 0x02, 0x04,
+ 0x58, 0xcb, 0x92, 0x70, 0x2b, 0x7f, 0x0d, 0x7f, 0x0f, 0xfd, 0xf2, 0xe0, 0x7f,
+ 0xc6, 0xe5, 0xd2, 0x81, 0xe6, 0xe8, 0x7f, 0xd1, 0xf3, 0x34, 0xc3, 0x2c, 0x86,
+ 0x8f, 0x7f, 0xdf, 0x81, 0xa4, 0x7f, 0x19, 0x0d, 0x08, 0x1e, 0x8b, 0xff, 0xbf,
+ 0x04, 0x2c, 0x70, 0xff, 0x7f, 0xc1, 0xe3, 0xe3, 0xac, 0xd1, 0x71, 0xf6, 0xe3,
+ 0xb3, 0x8f, 0x22, 0x5a, 0x1b, 0x81, 0x87, 0x3a, 0xd1, 0x12, 0x05, 0x1a, 0x4e,
+ 0x7d, 0xba, 0x7f, 0xfe, 0xf9, 0x65, 0x0e, 0xbe, 0x90, 0xb0, 0x91, 0xcc, 0xb0,
+ 0x84, 0xbd, 0x7f, 0x1e, 0x81, 0xec, 0x7f, 0x9e, 0x6f, 0x9e, 0x0a, 0xe9, 0x81,
+ 0x3f, 0xe3, 0x81, 0x81, 0x34, 0x46, 0xc9, 0xc9, 0x06, 0x96, 0x09, 0x27, 0xbe,
+ 0x2a, 0xdb, 0x46, 0x74, 0xef, 0xe6, 0xe0, 0x81, 0xa7, 0x58, 0x06, 0xd8, 0x7f,
+ 0xf5, 0x7c, 0x4c, 0xaa, 0xb5, 0x18, 0x7f, 0xea, 0x7f, 0xf0, 0x19, 0x7f, 0x11,
+ 0xed, 0xbf, 0x7f, 0x95, 0x77, 0x46, 0x18, 0x62, 0xf5, 0xe2, 0x27, 0x9a, 0x81,
+ 0xf6, 0xf1, 0x42, 0x00, 0x5c, 0xf9, 0xc1, 0x7f, 0xb7, 0x6b, 0x81, 0x47, 0x68,
+ 0x23, 0xad, 0xb4, 0x38, 0xf8, 0xfa, 0x37, 0x96, 0x5f, 0x81, 0x16, 0x74, 0x7f,
+ 0x47, 0x19, 0x2b, 0xb0, 0xa7, 0x8f, 0xb8, 0xd1, 0xca, 0x69, 0x11, 0xf8, 0x81,
+ 0x81, 0x2e, 0x7f, 0xfe, 0x81, 0x2d, 0xdb, 0xe0, 0xf9, 0x1b, 0x41, 0xeb, 0x06,
+ 0x24, 0x81, 0x8d, 0x81, 0x19, 0xab, 0x8c, 0x33, 0xa2, 0x81, 0xc8, 0xd3, 0x55,
+ 0x29, 0x03, 0xe4, 0xdd, 0x26, 0x0b, 0x52, 0x12, 0x07, 0x5a, 0x91, 0x67, 0x0e,
+ 0x99, 0xbf, 0x7f, 0x3c, 0x50, 0xbe, 0x81, 0x99, 0xac, 0x03, 0x78, 0x0f, 0xbc,
+ 0xdc, 0x81, 0x81, 0xbc, 0x95, 0x15, 0xc7, 0x7f, 0xe8, 0xc8, 0x76, 0x19, 0xb4,
+ 0x6b, 0xd6, 0x81, 0x3f, 0xf5, 0x1b, 0xd0, 0xfd, 0x42, 0x58, 0x81, 0x16, 0x95,
+ 0x7e, 0xe2, 0x7f, 0x18, 0xd9, 0x20, 0xe2, 0x15, 0xde, 0xdd, 0x2b, 0x93, 0x8e,
+ 0x7f, 0xe1, 0x2c, 0x15, 0x1a, 0x12, 0xc0, 0xfc, 0xfc, 0x20, 0x20, 0x00, 0x24,
+ 0x52, 0xd6, 0x9b, 0x8f, 0xec, 0x11, 0x2b, 0xaf, 0xda, 0xd6, 0x09, 0x2e, 0x2d,
+ 0xe9, 0x22, 0x0c, 0x81, 0xf4, 0x1c, 0x81, 0x4e, 0x02, 0x9b, 0xa4, 0x99, 0x48,
+ 0xe7, 0x17, 0x52, 0x07, 0xd3, 0xd8, 0xc8, 0xeb, 0x7f, 0xfe, 0x01, 0xff, 0xbd,
+ 0x1f, 0x89, 0xb2, 0xef, 0x8a, 0x83, 0xe1, 0xcd, 0x1c, 0x19, 0x36, 0x8d, 0xdf,
+ 0x9b, 0xfb, 0x5a, 0xf5, 0x09, 0x97, 0x03, 0xbd, 0x63, 0x14, 0x16, 0xbe, 0xc0,
+ 0xe8, 0x7f, 0x8c, 0xf0, 0x47, 0xab, 0xf6, 0xc4, 0x7f, 0x2f, 0xb1, 0xdd, 0x75,
+ 0xd0, 0x7f, 0x1e, 0x30, 0xa4, 0x07, 0x79, 0xb2, 0x0b, 0xce, 0x23, 0xb7, 0x81,
+ 0xb9, 0xcc, 0xf1, 0xea, 0x03, 0x7e, 0x18, 0x01, 0x36, 0x81, 0xc4, 0xf5, 0xe2,
+ 0xe5, 0x17, 0x7f, 0xb9, 0x2f, 0x81, 0x41, 0xb9, 0xdb, 0x44, 0x22, 0x76, 0xbc,
+ 0x71, 0xe7, 0x78, 0x6a, 0x37, 0x40, 0xf8, 0x0d, 0x08, 0xf7, 0xc1, 0x84, 0x0b,
+ 0x63, 0x5c, 0x27, 0x81, 0x81, 0xdb, 0xa3, 0xb3, 0xe8, 0x41, 0xbb, 0x3a, 0x37,
+ 0xb5, 0xc1, 0x81, 0xb7, 0x7b, 0x53, 0xe7, 0xce, 0x77, 0x72, 0x7f, 0x4f, 0xd2,
+ 0xb9, 0x7f, 0xeb, 0x69, 0x7f, 0x09, 0x5a, 0x1b, 0xd4, 0xca, 0xd5, 0xce, 0x1b,
+ 0x18, 0xb5, 0x1b, 0x1e, 0x82, 0x78, 0xf0, 0xc1, 0xe6, 0x18, 0x7f, 0x22, 0x81,
+ 0x71, 0x06, 0x60, 0xbf, 0x03, 0x2f, 0x9c, 0x17, 0x5d, 0x52, 0xa2, 0x03, 0x40,
+ 0x81, 0xa1, 0xf8, 0xdd, 0xe2, 0x7f, 0x34, 0x2e, 0x7f, 0x20, 0x05, 0x8d, 0x3b,
+ 0x7f, 0x02, 0xbb, 0xcd, 0x7f, 0xfb, 0x2f, 0x57, 0x7f, 0x3d, 0x07, 0xaf, 0x42,
+ 0x04, 0x81, 0x04, 0xe5, 0x38, 0x26, 0x40, 0x0c, 0x81, 0x21, 0xdd, 0x33, 0xee,
+ 0x39, 0x3c, 0x4c, 0xb4, 0x1a, 0xf8, 0xd5, 0x81, 0xb2, 0x63, 0xe8, 0x25, 0x2a,
+ 0x1e, 0x10, 0x2a, 0x7f, 0xdf, 0xe6, 0x36, 0x38, 0x90, 0xc6, 0x12, 0xcf, 0x0b,
+ 0x35, 0x8c, 0xd9, 0x88, 0x81, 0x94, 0x2f, 0x09, 0x07, 0x43, 0xd2, 0x81, 0x2e,
+ 0xc2, 0x19, 0x8b, 0x7f, 0x53, 0x81, 0x71, 0x4c, 0x2a, 0x16, 0x31, 0x02, 0x09,
+ 0xfb, 0x39, 0x40, 0x1b, 0xe4, 0x15, 0x81, 0xe9, 0xcb, 0x81, 0xb3, 0x44, 0xdf,
+ 0x7f, 0x7f, 0xfb, 0xc7, 0x81, 0x81, 0x31, 0xfd, 0xdc, 0x1b, 0xb1, 0x47, 0x81,
+ 0xdb, 0x82, 0x25, 0x7f, 0x14, 0x21, 0x2d, 0x01, 0xd2, 0xd4, 0x06, 0xa5, 0xc4,
+ 0xd8, 0xb2, 0x86, 0x2e, 0x57, 0x2d, 0x4e, 0x0b, 0xb1, 0xfe, 0x00, 0xa3, 0x20,
+ 0xe1, 0x3f, 0xef, 0xa2, 0xfa, 0x6f, 0xc5, 0x2e, 0xb2, 0xea, 0x3a, 0x32, 0xb7,
+ 0xef, 0x7f, 0x7f, 0x39, 0xa9, 0xdd, 0xbb, 0x1f, 0xa9, 0x20, 0x24, 0x15, 0x4e,
+ 0x20, 0xf1, 0xd2, 0x0d, 0x11, 0x47, 0x88, 0x32, 0xc1, 0x75, 0x1b, 0xbb, 0xe9,
+ 0xe2, 0x0d, 0x1c, 0xe3, 0x21, 0x7f, 0xe5, 0x81, 0x0f, 0xa2, 0xaa, 0xd1, 0xeb,
+ 0x12, 0xa6, 0xc4, 0xbe, 0x41, 0x16, 0xc3, 0x29, 0x1d, 0xf7, 0x12, 0xd8, 0x6f,
+ 0x89, 0x6c, 0x30, 0xb6, 0xea, 0x59, 0x45, 0x09, 0x2b, 0x17, 0xf4, 0xd5, 0x33,
+ 0xd7, 0xe7, 0xe7, 0xe6, 0xb4, 0xd9, 0xff, 0xc2, 0x7c, 0x81, 0x81, 0x65, 0xdb,
+ 0x81, 0xfa, 0xfe, 0x46, 0xf2, 0xc2, 0xb9, 0xb0, 0xfc, 0xef, 0xc8, 0x9f, 0xb1,
+ 0x16, 0xd4, 0x6f, 0x7f, 0x46, 0xd7, 0xb0, 0x9b, 0xde, 0xc0, 0x20, 0xd7, 0x81,
+ 0x0c, 0xc9, 0x71, 0x08, 0xf4, 0xff, 0x21, 0xd8, 0xc4, 0x3f, 0xef, 0x81, 0x8c,
+ 0xaf, 0xa5, 0xd0, 0xc4, 0xdc, 0xfe, 0x2f, 0xb4, 0x81, 0x0d, 0x06, 0x76, 0x53,
+ 0xeb, 0xc9, 0x6c, 0xa9, 0xbf, 0xea, 0xe6, 0x08, 0xe5, 0x27, 0x81, 0x7f, 0xac,
+ 0xf6, 0xd0, 0xf9, 0xd5, 0x8c, 0xf2, 0xd8, 0x41, 0xe9, 0x7f, 0xfe, 0x7f, 0xed,
+ 0xb2, 0x06, 0xe3, 0x7b, 0xe7, 0xba, 0xfc, 0x7f, 0xfc, 0xf4, 0x9c, 0xb9, 0xcf,
+ 0x4f, 0x81, 0xe2, 0x81, 0x9a, 0xf7, 0x06, 0xfe, 0x29, 0xdf, 0xfd, 0x78, 0x5f,
+ 0x1d, 0x94, 0xd2, 0x54, 0x49, 0x9c, 0xb8, 0xbc, 0xc2, 0x21, 0x08, 0x30, 0x1e,
+ 0xcc, 0x1c, 0x88, 0xd9, 0xf7, 0x03, 0xd9, 0x9d, 0x90, 0x07, 0xc3, 0xd9, 0x98,
+ 0xc7, 0xb3, 0x81, 0xd2, 0x0c, 0xd3, 0xc7, 0xab, 0x38, 0xab, 0x51, 0x1b, 0xfe,
+ 0xdc, 0x1e, 0x7f, 0x4f, 0x00, 0x2c, 0x0f, 0xe1, 0xb9, 0xb7, 0xe7, 0xc2, 0xfe,
+ 0x0d, 0x7f, 0xf2, 0x7f, 0xff, 0xbd, 0xb0, 0x45, 0x16, 0x16, 0xb6, 0x03, 0xf5,
+ 0xd4, 0x02, 0xf2, 0x81, 0x04, 0xbd, 0xe3, 0x39, 0xae, 0x2b, 0xff, 0x58, 0x07,
+ 0x39, 0x4a, 0xa2, 0xf0, 0xb2, 0x2d, 0xe7, 0x0f, 0xc4, 0x78, 0x43, 0xe8, 0xae,
+ 0xe0, 0x88, 0xc5, 0x11, 0x81, 0x8e, 0x1e, 0x06, 0xad, 0x74, 0xe4, 0x8a, 0x59,
+ 0x18, 0x6e, 0x61, 0xff, 0x47, 0xe9, 0x7f, 0x7f, 0x86, 0xda, 0xda, 0xc1, 0x99,
+ 0x0b, 0xc2, 0xa0, 0xf8, 0x81, 0xb4, 0x2b, 0xff, 0x7f, 0x38, 0x2f, 0x7f, 0xbc,
+ 0xcd, 0x4a, 0x21, 0xc1, 0x18, 0x84, 0xd6, 0x7f, 0x7f, 0x6e, 0x7f, 0x09, 0x7f,
+ 0xbc, 0xdc, 0x3a, 0x8e, 0xa6, 0xd4, 0x50, 0x5a, 0xfd, 0x67, 0xf0, 0x83, 0xa1,
+ 0x56, 0x0c, 0x08, 0xb5, 0x2b, 0xb4, 0xa8, 0x81, 0x7f, 0x7f, 0x10, 0xc1, 0x1b,
+ 0x1d, 0xa1, 0x16, 0xde, 0xfd, 0x01, 0x81, 0xad, 0x92, 0x81, 0xf5, 0x70, 0x51,
+ 0x16, 0x33, 0x09, 0x0e, 0x1b, 0xf7, 0x40, 0x20, 0xf2, 0x88, 0xde, 0xf3, 0x7f,
+ 0xea, 0xc2, 0xe6, 0xff, 0x93, 0x43, 0x1e, 0xb8, 0x50, 0x06, 0x3d, 0xa5, 0x4d,
+ 0x92, 0xe3, 0xc6, 0xf8, 0x0e, 0x21, 0xb3, 0xe4, 0x65, 0xe7, 0x81, 0xd6, 0xb5,
+ 0x2a, 0x0a, 0x24, 0x3d, 0x7f, 0xe5, 0xdd, 0xe5, 0xcf, 0x30, 0x7f, 0xeb, 0x56,
+ 0x35, 0xa5, 0x36, 0xd0, 0x98, 0x62, 0xec, 0xbd, 0xe4, 0xdd, 0x0d, 0xe7, 0xb9,
+ 0x81, 0x32, 0x87, 0xb6, 0x3d, 0x23, 0x62, 0xb7, 0x08, 0x4f, 0xba, 0xa0, 0x27,
+ 0x17, 0x85, 0x78, 0xd1, 0xf7, 0x26, 0x58, 0xe9, 0x1c, 0xf8, 0x41, 0x2c, 0xed,
+ 0x19, 0xd6, 0x37, 0x0b, 0xe4, 0x1c, 0xf6, 0xfb, 0xd0, 0xb6, 0x3a, 0x56, 0xc1,
+ 0xfa, 0xac, 0x2d, 0x85, 0x10, 0xa9, 0x4d, 0x58, 0xe1, 0x5f, 0xdf, 0x43, 0xc4,
+ 0x4d, 0xcb, 0x05, 0x84, 0x8b, 0x0f, 0x3c, 0xf5, 0x11, 0xec, 0x42, 0x1f, 0x07,
+ 0x86, 0xe5, 0xfe, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x6d,
+ 0xed, 0xff, 0xff, 0xdb, 0x1e, 0x00, 0x00, 0x18, 0xfe, 0xff, 0xff, 0x76, 0xf4,
+ 0xff, 0xff, 0xae, 0x0b, 0x00, 0x00, 0x99, 0x20, 0x00, 0x00, 0xc0, 0xfa, 0xff,
+ 0xff, 0xb1, 0xf6, 0xff, 0xff, 0xed, 0x27, 0x00, 0x00, 0xa2, 0xf4, 0xff, 0xff,
+ 0xd0, 0xf9, 0xff, 0xff, 0x66, 0xee, 0xff, 0xff, 0xfc, 0xfa, 0xff, 0xff, 0xed,
+ 0x18, 0x00, 0x00, 0x3a, 0x25, 0x00, 0x00, 0x7f, 0xfb, 0xff, 0xff, 0xd1, 0xf3,
+ 0xff, 0xff, 0xcf, 0x13, 0x00, 0x00, 0x83, 0xf0, 0xff, 0xff, 0x7d, 0xf0, 0xff,
+ 0xff, 0xd8, 0xeb, 0xff, 0xff, 0x9a, 0xe8, 0xff, 0xff, 0x66, 0x05, 0x00, 0x00,
+ 0xe2, 0x15, 0x00, 0x00, 0x28, 0x22, 0x00, 0x00, 0xcf, 0xf4, 0xff, 0xff, 0xca,
+ 0x0a, 0x00, 0x00, 0xb4, 0xe9, 0xff, 0xff, 0xf8, 0xf3, 0xff, 0xff, 0x63, 0xee,
+ 0xff, 0xff, 0x31, 0xfd, 0xff, 0xff, 0xd9, 0xed, 0xff, 0xff, 0x3f, 0x15, 0x00,
+ 0x00, 0x93, 0xf1, 0xff, 0xff, 0x87, 0x1b, 0x00, 0x00, 0x27, 0x12, 0x00, 0x00,
+ 0x04, 0x16, 0x00, 0x00, 0xfb, 0x1f, 0x00, 0x00, 0x8f, 0xe9, 0xff, 0xff, 0x89,
+ 0x12, 0x00, 0x00, 0x49, 0xde, 0xff, 0xff, 0x40, 0xfa, 0xff, 0xff, 0xaa, 0xf6,
+ 0xff, 0xff, 0x6a, 0xf2, 0xff, 0xff, 0xe6, 0xfb, 0xff, 0xff, 0x08, 0xf5, 0xff,
+ 0xff, 0x5c, 0x23, 0x00, 0x00, 0xdd, 0xf9, 0xff, 0xff, 0xd2, 0xe6, 0xff, 0xff,
+ 0x41, 0xee, 0xff, 0xff, 0x23, 0x13, 0x00, 0x00, 0xb0, 0x1e, 0x00, 0x00, 0xfb,
+ 0xed, 0xff, 0xff, 0x8e, 0x00, 0x00, 0x00, 0x5b, 0xfe, 0xff, 0xff, 0xe9, 0xf1,
+ 0xff, 0xff, 0xed, 0x21, 0x00, 0x00, 0x71, 0x0e, 0x00, 0x00, 0xab, 0x1e, 0x00,
+ 0x00, 0x1a, 0x18, 0x00, 0x00, 0x09, 0x0f, 0x00, 0x00, 0xc1, 0xf1, 0xff, 0xff,
+ 0xe8, 0xf4, 0xff, 0xff, 0x88, 0x15, 0x00, 0x00, 0xc7, 0xe9, 0xff, 0xff, 0xbc,
+ 0x09, 0x00, 0x00, 0x67, 0x1e, 0x00, 0x00, 0xe3, 0x0b, 0x00, 0x00, 0x99, 0x1e,
+ 0x00, 0x00, 0xda, 0xfc, 0xff, 0xff, 0x18, 0xf8, 0xff, 0xff, 0x84, 0xe0, 0xff,
+ 0xff, 0x9f, 0xf1, 0xff, 0xff, 0xb7, 0x2b, 0x00, 0x00, 0xc3, 0x15, 0x00, 0x00,
+ 0x48, 0xe7, 0xff, 0xff, 0x39, 0xdd, 0xff, 0xff, 0x72, 0xfe, 0xff, 0xff, 0x52,
+ 0x02, 0x00, 0x00, 0xcd, 0x24, 0x00, 0x00, 0x7b, 0xf6, 0xff, 0xff, 0x4f, 0xff,
+ 0xff, 0xff, 0xa7, 0xea, 0xff, 0xff, 0x04, 0xf1, 0xff, 0xff, 0xd9, 0xf1, 0xff,
+ 0xff, 0xb5, 0xee, 0xff, 0xff, 0xc0, 0xec, 0xff, 0xff, 0x99, 0x1b, 0x00, 0x00,
+ 0x8e, 0xfd, 0xff, 0xff, 0xb7, 0x10, 0x00, 0x00, 0x9d, 0x1d, 0x00, 0x00, 0x75,
+ 0x09, 0x00, 0x00, 0x62, 0x06, 0x00, 0x00, 0xf7, 0x15, 0x00, 0x00, 0x17, 0xfc,
+ 0xff, 0xff, 0x5a, 0x01, 0x00, 0x00, 0xe4, 0x1d, 0x00, 0x00, 0xe8, 0x14, 0x00,
+ 0x00, 0x56, 0x1a, 0x00, 0x00, 0xa1, 0x15, 0x00, 0x00, 0x35, 0xf8, 0xff, 0xff,
+ 0x02, 0xfb, 0xff, 0xff, 0x84, 0xf9, 0xff, 0xff, 0xf8, 0x1c, 0x00, 0x00, 0x3d,
+ 0x12, 0x00, 0x00, 0xa0, 0xef, 0xff, 0xff, 0xff, 0x11, 0x00, 0x00, 0x81, 0xfc,
+ 0xff, 0xff, 0x4e, 0x12, 0x00, 0x00, 0x17, 0xf6, 0xff, 0xff, 0x27, 0xf4, 0xff,
+ 0xff, 0xae, 0x09, 0x00, 0x00, 0x51, 0xe8, 0xff, 0xff, 0x5d, 0xed, 0xff, 0xff,
+ 0x5d, 0x14, 0x00, 0x00, 0xb7, 0x1a, 0x00, 0x00, 0xdd, 0xfd, 0xff, 0xff, 0xf6,
+ 0xeb, 0xff, 0xff, 0x0c, 0x18, 0x00, 0x00, 0x21, 0x1f, 0x00, 0x00, 0xfe, 0x10,
+ 0x00, 0x00, 0xdd, 0x26, 0x00, 0x00, 0xe9, 0x19, 0x00, 0x00, 0x75, 0xf6, 0xff,
+ 0xff, 0x11, 0xe2, 0xff, 0xff, 0x66, 0xe5, 0xff, 0xff, 0x5d, 0xf3, 0xff, 0xff,
+ 0x38, 0xf3, 0xff, 0xff, 0x92, 0xe7, 0xfe, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x83, 0xe7, 0xff, 0xff, 0x46, 0xa8, 0xff, 0xff, 0x14, 0x34,
+ 0x00, 0x00, 0x10, 0xc0, 0xff, 0xff, 0x53, 0x11, 0x00, 0x00, 0xdd, 0x11, 0x00,
+ 0x00, 0xc2, 0xfc, 0xff, 0xff, 0xbe, 0xe0, 0xff, 0xff, 0x50, 0xa6, 0xff, 0xff,
+ 0x1a, 0xdd, 0xff, 0xff, 0xfa, 0x08, 0x00, 0x00, 0xb3, 0xff, 0xff, 0xff, 0x51,
+ 0x9b, 0xff, 0xff, 0x87, 0x11, 0x00, 0x00, 0x50, 0xc7, 0xff, 0xff, 0x3a, 0xe3,
+ 0xff, 0xff, 0xa8, 0xd9, 0xff, 0xff, 0x4d, 0xac, 0xff, 0xff, 0x4d, 0x2b, 0x00,
+ 0x00, 0x07, 0x05, 0x00, 0x00, 0x9f, 0xf2, 0xff, 0xff, 0x4b, 0xb8, 0xff, 0xff,
+ 0x71, 0xf0, 0xff, 0xff, 0xa4, 0x2b, 0x00, 0x00, 0xfc, 0xd5, 0xff, 0xff, 0x24,
+ 0x0d, 0x00, 0x00, 0xc8, 0xd9, 0xff, 0xff, 0x6e, 0xff, 0xff, 0xff, 0x1b, 0x38,
+ 0x00, 0x00, 0x4e, 0xbf, 0xff, 0xff, 0x3e, 0x9b, 0x00, 0x00, 0xb4, 0xf5, 0xff,
+ 0xff, 0xc7, 0xff, 0xff, 0xff, 0x2a, 0xd5, 0xff, 0xff, 0x56, 0xc7, 0xff, 0xff,
+ 0x6d, 0x11, 0x00, 0x00, 0x3c, 0xda, 0xff, 0xff, 0x5a, 0x32, 0x00, 0x00, 0x0a,
+ 0xf8, 0xff, 0xff, 0x47, 0x00, 0x00, 0x00, 0x86, 0xf1, 0xff, 0xff, 0x1d, 0x04,
+ 0x00, 0x00, 0x4a, 0xe3, 0xff, 0xff, 0xe1, 0xa5, 0xff, 0xff, 0xef, 0x3e, 0x00,
+ 0x00, 0x27, 0xb7, 0xff, 0xff, 0xf4, 0x28, 0x00, 0x00, 0x86, 0x27, 0x00, 0x00,
+ 0xb4, 0xed, 0xff, 0xff, 0x29, 0xf4, 0xff, 0xff, 0x5f, 0xe3, 0xff, 0xff, 0x46,
+ 0x14, 0x00, 0x00, 0xa7, 0x1c, 0x00, 0x00, 0x83, 0x1f, 0x00, 0x00, 0xc6, 0x24,
+ 0x00, 0x00, 0x63, 0x1c, 0x00, 0x00, 0xf9, 0xf6, 0xff, 0xff, 0xad, 0x0f, 0x00,
+ 0x00, 0x8a, 0xbb, 0xff, 0xff, 0xf0, 0xe4, 0xff, 0xff, 0xcf, 0xce, 0xff, 0xff,
+ 0x15, 0xe9, 0xff, 0xff, 0xf4, 0xbf, 0xff, 0xff, 0x77, 0xbf, 0xff, 0xff, 0x01,
+ 0x0e, 0x00, 0x00, 0xf9, 0x16, 0x00, 0x00, 0x06, 0xd7, 0xff, 0xff, 0x6b, 0xe6,
+ 0xff, 0xff, 0x34, 0xd2, 0xff, 0xff, 0xb6, 0x2d, 0x00, 0x00, 0xf8, 0x95, 0xff,
+ 0xff, 0xaa, 0x16, 0x00, 0x00, 0xba, 0x02, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xff,
+ 0x48, 0x14, 0x00, 0x00, 0x9d, 0x09, 0x00, 0x00, 0x7e, 0x89, 0xff, 0xff, 0x6b,
+ 0xfb, 0xff, 0xff, 0x66, 0xc7, 0xff, 0xff, 0xe1, 0xe6, 0xff, 0xff, 0x27, 0x2c,
+ 0x00, 0x00, 0x08, 0xf3, 0xff, 0xff, 0x31, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0xf6, 0xec, 0xff, 0xff, 0x0c, 0x25, 0x00, 0x00, 0x1d, 0x0c, 0x00, 0x00,
+ 0xd1, 0xc1, 0xff, 0xff, 0x73, 0x87, 0xff, 0xff, 0x65, 0xf8, 0xff, 0xff, 0x79,
+ 0xbe, 0xff, 0xff, 0xb1, 0xcf, 0xff, 0xff, 0x37, 0xf7, 0xff, 0xff, 0xe6, 0xc0,
+ 0xff, 0xff, 0x7b, 0xef, 0xff, 0xff, 0x52, 0xe0, 0xff, 0xff, 0x24, 0xa5, 0xff,
+ 0xff, 0x72, 0xad, 0xff, 0xff, 0x4e, 0x25, 0x00, 0x00, 0x2c, 0xfd, 0xff, 0xff,
+ 0x52, 0x29, 0x00, 0x00, 0x42, 0xf8, 0xff, 0xff, 0xde, 0xe4, 0xff, 0xff, 0x79,
+ 0x04, 0x00, 0x00, 0xe1, 0x1b, 0x00, 0x00, 0x5c, 0x10, 0x00, 0x00, 0x2b, 0x2a,
+ 0x00, 0x00, 0x45, 0x0b, 0x00, 0x00, 0x04, 0xc5, 0xff, 0xff, 0x5c, 0x39, 0x00,
+ 0x00, 0x50, 0xf1, 0xff, 0xff, 0x17, 0xb8, 0xff, 0xff, 0xf4, 0xf8, 0xff, 0xff,
+ 0x1b, 0xe6, 0xff, 0xff, 0xb2, 0x0d, 0x00, 0x00, 0xd2, 0xae, 0xff, 0xff, 0x4a,
+ 0xee, 0xff, 0xff, 0x7d, 0x2e, 0x00, 0x00, 0x8d, 0xe7, 0xff, 0xff, 0x92, 0x03,
+ 0x00, 0x00, 0xd6, 0x34, 0x00, 0x00, 0x1c, 0xdf, 0xff, 0xff, 0x85, 0xab, 0xff,
+ 0xff, 0xbf, 0x4b, 0x00, 0x00, 0x9b, 0x3e, 0x00, 0x00, 0x09, 0xd6, 0xff, 0xff,
+ 0x7a, 0x00, 0x00, 0x00, 0x1c, 0x18, 0x00, 0x00, 0x76, 0x36, 0x00, 0x00, 0x80,
+ 0x94, 0xff, 0xff, 0x6b, 0xf7, 0xff, 0xff, 0x0c, 0x1b, 0x00, 0x00, 0xa6, 0x95,
+ 0xff, 0xff, 0x64, 0xd4, 0xff, 0xff, 0xc0, 0x0f, 0x00, 0x00, 0xea, 0x1c, 0x00,
+ 0x00, 0x41, 0x01, 0x00, 0x00, 0xba, 0x1d, 0x00, 0x00, 0x80, 0x2a, 0x00, 0x00,
+ 0x9a, 0x13, 0x00, 0x00, 0xf0, 0x27, 0x00, 0x00, 0x31, 0x0d, 0x00, 0x00, 0x9f,
+ 0x13, 0x00, 0x00, 0xde, 0xf1, 0xff, 0xff, 0x9b, 0xcf, 0xff, 0xff, 0xe5, 0xf4,
+ 0xff, 0xff, 0xbc, 0xc5, 0xff, 0xff, 0xea, 0xf1, 0xff, 0xff, 0x32, 0xf6, 0xff,
+ 0xff, 0x12, 0xf2, 0xff, 0xff, 0x6e, 0xdf, 0xff, 0xff, 0x44, 0xd2, 0xff, 0xff,
+ 0xa6, 0x54, 0x00, 0x00, 0x6b, 0x31, 0x00, 0x00, 0x48, 0x09, 0x00, 0x00, 0x77,
+ 0xee, 0xff, 0xff, 0xbb, 0xbc, 0xff, 0xff, 0x7c, 0xb5, 0xff, 0xff, 0x87, 0x1c,
+ 0x00, 0x00, 0xba, 0xda, 0xff, 0xff, 0x2e, 0xe9, 0xff, 0xff, 0xd0, 0xff, 0xff,
+ 0xff, 0x8a, 0xc1, 0xff, 0xff, 0x23, 0x42, 0xff, 0xff, 0xdf, 0xe8, 0xff, 0xff,
+ 0x13, 0x12, 0x00, 0x00, 0x63, 0xe5, 0xff, 0xff, 0xdf, 0xe9, 0xff, 0xff, 0xcc,
+ 0xc5, 0xff, 0xff, 0xfd, 0xe2, 0xff, 0xff, 0x43, 0xf5, 0xff, 0xff, 0x30, 0xf5,
+ 0xff, 0xff, 0x60, 0x1e, 0x00, 0x00, 0x62, 0x9f, 0xff, 0xff, 0xcb, 0x0b, 0x00,
+ 0x00, 0xd1, 0x5c, 0x00, 0x00, 0xe9, 0xdf, 0xff, 0xff, 0xec, 0x20, 0x00, 0x00,
+ 0x47, 0xfb, 0xff, 0xff, 0x94, 0x9e, 0xff, 0xff, 0x45, 0x0e, 0x00, 0x00, 0x27,
+ 0x0b, 0x00, 0x00, 0x26, 0xdb, 0xff, 0xff, 0xdf, 0xbb, 0xff, 0xff, 0x61, 0x51,
+ 0x00, 0x00, 0xd9, 0x1d, 0x00, 0x00, 0xa9, 0xb5, 0xff, 0xff, 0xb9, 0x5a, 0x00,
+ 0x00, 0xea, 0xd7, 0xff, 0xff, 0x02, 0xfb, 0xff, 0xff, 0x0c, 0x48, 0x00, 0x00,
+ 0x29, 0xea, 0xff, 0xff, 0x00, 0x0a, 0x00, 0x00, 0xf5, 0x1a, 0x00, 0x00, 0x14,
+ 0x14, 0x00, 0x00, 0x22, 0x0b, 0x00, 0x00, 0xbc, 0x24, 0x00, 0x00, 0xeb, 0xda,
+ 0xff, 0xff, 0xed, 0xe8, 0xff, 0xff, 0x13, 0x12, 0x00, 0x00, 0xcd, 0x0a, 0x00,
+ 0x00, 0x8a, 0x28, 0x00, 0x00, 0x62, 0x03, 0x00, 0x00, 0xd2, 0x8f, 0xff, 0xff,
+ 0x0f, 0x08, 0x00, 0x00, 0x4c, 0x41, 0x00, 0x00, 0x95, 0xd9, 0xff, 0xff, 0xea,
+ 0xfc, 0xff, 0xff, 0x6a, 0x01, 0x00, 0x00, 0x4b, 0x95, 0xff, 0xff, 0x6e, 0x0f,
+ 0x00, 0x00, 0x41, 0x0f, 0x00, 0x00, 0xea, 0xfc, 0xff, 0xff, 0x55, 0xe8, 0xff,
+ 0xff, 0xab, 0x8a, 0xff, 0xff, 0x77, 0xa9, 0xff, 0xff, 0x6e, 0x38, 0x00, 0x00,
+ 0xc8, 0x1e, 0x00, 0x00, 0x31, 0xf0, 0xff, 0xff, 0x41, 0x99, 0xff, 0xff, 0x0c,
+ 0x0a, 0x00, 0x00, 0x51, 0xc6, 0xff, 0xff, 0xdc, 0x28, 0x00, 0x00, 0x22, 0xad,
+ 0xff, 0xff, 0xee, 0x2b, 0x00, 0x00, 0x99, 0xf0, 0xff, 0xff, 0x0b, 0xf2, 0xff,
+ 0xff, 0xba, 0x32, 0x00, 0x00, 0xc4, 0x3c, 0x00, 0x00, 0x7c, 0xb2, 0xff, 0xff,
+ 0xac, 0x07, 0x00, 0x00, 0x6d, 0x0d, 0x00, 0x00, 0xef, 0x15, 0x00, 0x00, 0xce,
+ 0xf9, 0xff, 0xff, 0x2f, 0x11, 0x00, 0x00, 0x8f, 0x10, 0x00, 0x00, 0xe2, 0x05,
+ 0x00, 0x00, 0xda, 0xdc, 0xff, 0xff, 0xff, 0x06, 0x00, 0x00, 0xc1, 0x10, 0x00,
+ 0x00, 0xc0, 0xeb, 0xff, 0xff, 0x4b, 0xe1, 0xff, 0xff, 0x72, 0xec, 0xff, 0xff,
+ 0xeb, 0xe4, 0xff, 0xff, 0x34, 0x31, 0x00, 0x00, 0xe0, 0xf9, 0xff, 0xff, 0x9b,
+ 0x23, 0x00, 0x00, 0xa3, 0xd8, 0xff, 0xff, 0xb1, 0xb6, 0xff, 0xff, 0xa7, 0xec,
+ 0xff, 0xff, 0x15, 0x23, 0x00, 0x00, 0xd3, 0xa3, 0xff, 0xff, 0xa2, 0xb1, 0xff,
+ 0xff, 0x3d, 0x29, 0x00, 0x00, 0xfb, 0xbc, 0xff, 0xff, 0x77, 0x29, 0x00, 0x00,
+ 0x9e, 0xeb, 0xfe, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x95,
+ 0xe3, 0x77, 0xf4, 0x7f, 0x81, 0x9d, 0xe6, 0x15, 0xa6, 0xc2, 0xba, 0xf5, 0xf3,
+ 0xe8, 0x03, 0xf1, 0xfb, 0x0d, 0xf2, 0x23, 0xfb, 0xef, 0x4c, 0xfd, 0xab, 0xd0,
+ 0x0e, 0xcf, 0xb8, 0x81, 0x84, 0xf1, 0xdf, 0xfb, 0xdb, 0xf8, 0xed, 0xe9, 0x07,
+ 0x2a, 0xac, 0xd3, 0xee, 0x40, 0x81, 0xc6, 0x20, 0xe7, 0xe4, 0xdd, 0x7f, 0xf8,
+ 0xe1, 0x24, 0x7f, 0xe7, 0x4f, 0xd3, 0x0c, 0xbc, 0x16, 0xc7, 0xc7, 0xec, 0xca,
+ 0xa6, 0x84, 0xae, 0xe2, 0x1d, 0x19, 0xb8, 0xe5, 0xc8, 0x89, 0xfb, 0xca, 0xf3,
+ 0xf9, 0xd6, 0xd1, 0xdf, 0xca, 0x2a, 0x46, 0x81, 0x2a, 0xf8, 0xc2, 0x09, 0xb0,
+ 0xa9, 0xf4, 0x0b, 0xb7, 0xfd, 0xdf, 0x74, 0xa9, 0xda, 0xed, 0x19, 0xba, 0xa3,
+ 0x01, 0xf1, 0x9e, 0xec, 0x17, 0x10, 0xf8, 0x95, 0x09, 0x20, 0xc7, 0xa0, 0xb3,
+ 0xc9, 0x1f, 0xd1, 0xcf, 0xe7, 0xf3, 0x7f, 0xe4, 0xcc, 0xbc, 0x81, 0xe9, 0xd9,
+ 0xc9, 0xf3, 0x02, 0xd3, 0x46, 0x3c, 0x81, 0xbc, 0xdf, 0xee, 0xe3, 0xdf, 0x02,
+ 0x23, 0xfe, 0xf8, 0xd4, 0x19, 0xd4, 0xa0, 0x7f, 0x0a, 0x0e, 0x26, 0xe4, 0x16,
+ 0x8b, 0x81, 0xee, 0xf8, 0xf1, 0xe8, 0xdb, 0xeb, 0x90, 0xc4, 0x2c, 0x9b, 0xf2,
+ 0xe9, 0x7f, 0x81, 0xb4, 0xf6, 0xaf, 0x8a, 0x51, 0xee, 0xee, 0x21, 0xe1, 0xa7,
+ 0xfb, 0x89, 0xd3, 0xce, 0x25, 0xcf, 0xa4, 0xb1, 0xe2, 0x6b, 0x14, 0x56, 0x81,
+ 0xa5, 0x20, 0xe2, 0xd1, 0xe2, 0xb6, 0x7f, 0x35, 0xff, 0xb6, 0xdd, 0x37, 0xf1,
+ 0x06, 0x18, 0x56, 0x02, 0xfd, 0xdd, 0xd1, 0x8c, 0x93, 0xfc, 0xee, 0xeb, 0xf8,
+ 0xf1, 0xbb, 0xa8, 0x2c, 0xbb, 0xdf, 0xeb, 0xf2, 0x13, 0xd8, 0xe1, 0x18, 0xfa,
+ 0x86, 0xd4, 0xb5, 0x81, 0xa2, 0xdb, 0xd5, 0x0a, 0xe0, 0x15, 0x2c, 0xca, 0xe9,
+ 0x05, 0xec, 0xc6, 0xf0, 0xa5, 0xe2, 0x0e, 0x0b, 0xed, 0x2e, 0x1e, 0xf8, 0x35,
+ 0xc5, 0xb3, 0x35, 0x33, 0x1f, 0xe4, 0x92, 0x2a, 0xcc, 0xf7, 0x8c, 0x02, 0x23,
+ 0x81, 0x0b, 0x41, 0xfa, 0x53, 0x0a, 0xfb, 0xe1, 0xd0, 0xd8, 0xf2, 0x8d, 0xc0,
+ 0x5d, 0xc2, 0xe0, 0x81, 0x81, 0xfd, 0x10, 0xbc, 0x1b, 0x81, 0xef, 0x38, 0x09,
+ 0xe8, 0x47, 0x9b, 0x35, 0x7f, 0x84, 0xcd, 0x60, 0xce, 0x81, 0x12, 0xb2, 0xa0,
+ 0x7f, 0xbe, 0x74, 0x7f, 0x81, 0x36, 0x25, 0x25, 0xfd, 0x92, 0x1e, 0xf9, 0xb9,
+ 0x1d, 0x12, 0xc7, 0xf2, 0x72, 0xfd, 0x74, 0xe0, 0x05, 0xf6, 0xad, 0xd1, 0xec,
+ 0xe8, 0x1c, 0x15, 0x0c, 0x1d, 0xf1, 0x81, 0xe7, 0x4a, 0x81, 0x0d, 0x0d, 0xbf,
+ 0xf5, 0x27, 0x0b, 0x44, 0xff, 0x19, 0x81, 0x53, 0xb8, 0x1e, 0xcb, 0x39, 0xeb,
+ 0x81, 0x7f, 0xfd, 0xd0, 0xd0, 0x81, 0x24, 0x7f, 0xa6, 0xf1, 0x81, 0xcb, 0x46,
+ 0xc7, 0x88, 0xe6, 0x81, 0x09, 0xff, 0x3c, 0x2a, 0xb1, 0x81, 0xf9, 0xe2, 0x81,
+ 0xa4, 0x04, 0x8f, 0xcc, 0x7f, 0xd0, 0x47, 0xf2, 0x45, 0xef, 0xd9, 0xa9, 0xec,
+ 0xf1, 0xc7, 0x68, 0xf4, 0xd0, 0xdf, 0xa0, 0xe1, 0xfd, 0x85, 0x6a, 0xda, 0x45,
+ 0x97, 0x6c, 0x7f, 0x00, 0xb0, 0x42, 0xf9, 0x7f, 0xe0, 0x16, 0xb7, 0xb1, 0xe7,
+ 0x89, 0x1e, 0x0a, 0x81, 0x20, 0x08, 0x81, 0xdd, 0x32, 0x3a, 0x9c, 0x03, 0x7f,
+ 0x08, 0xfb, 0xd2, 0x81, 0x10, 0xfa, 0x1c, 0xa0, 0x9b, 0x81, 0x3a, 0xd7, 0xb5,
+ 0x43, 0x73, 0x90, 0x36, 0x53, 0x88, 0x15, 0x9d, 0x9b, 0xdf, 0xc3, 0x7f, 0x8e,
+ 0x42, 0xdf, 0x1e, 0xf0, 0x37, 0x81, 0x60, 0xdc, 0x2f, 0xc5, 0x0e, 0x22, 0x2e,
+ 0x1b, 0xa9, 0x06, 0x01, 0xd9, 0xbd, 0xf7, 0x7f, 0x7f, 0x81, 0xef, 0x81, 0xc8,
+ 0x81, 0x06, 0xb1, 0xcb, 0x81, 0xf7, 0x14, 0x4b, 0x0e, 0x11, 0xe4, 0xdb, 0xf4,
+ 0x34, 0xb9, 0x91, 0xda, 0x0e, 0x30, 0x7f, 0x06, 0x37, 0x41, 0xe4, 0x7f, 0x7e,
+ 0x7f, 0xe3, 0x81, 0xe2, 0xb8, 0x04, 0x25, 0x7b, 0x00, 0x1d, 0x74, 0xb6, 0x0f,
+ 0x40, 0xbb, 0xcb, 0xa5, 0x81, 0xc0, 0xef, 0x0e, 0x28, 0x27, 0xdb, 0x56, 0xdd,
+ 0x2e, 0xd9, 0xed, 0x4b, 0xec, 0x20, 0x5e, 0x32, 0x1f, 0xc3, 0xd6, 0xb1, 0xe4,
+ 0x3f, 0xe6, 0xff, 0x1c, 0xd6, 0xbc, 0x12, 0xe8, 0x81, 0x20, 0x11, 0x7f, 0x42,
+ 0x42, 0x3f, 0x08, 0x81, 0x97, 0xd0, 0x7f, 0x81, 0xeb, 0x58, 0xda, 0x57, 0x1d,
+ 0x08, 0x81, 0x38, 0x81, 0xef, 0xe1, 0x03, 0xa3, 0x32, 0x14, 0x90, 0xf8, 0x48,
+ 0xe3, 0x09, 0xb1, 0xd1, 0x10, 0x22, 0x26, 0x89, 0xe3, 0x15, 0xc9, 0x08, 0x44,
+ 0xc1, 0x9f, 0xde, 0x7f, 0xec, 0x7f, 0xdf, 0xfe, 0xf4, 0x21, 0x6e, 0x05, 0xe6,
+ 0xf1, 0xda, 0x7f, 0xb4, 0x56, 0x47, 0xe7, 0x9d, 0x7f, 0x91, 0x67, 0x03, 0xc2,
+ 0xed, 0x01, 0xe2, 0xee, 0x81, 0xcc, 0xea, 0xed, 0x8b, 0xbb, 0xad, 0xcf, 0x98,
+ 0x1d, 0xe1, 0xfa, 0xf4, 0x01, 0x7f, 0x00, 0x7f, 0x6b, 0xc7, 0xfb, 0x7f, 0x97,
+ 0x16, 0xd8, 0x19, 0x10, 0xf8, 0x60, 0x4d, 0xb2, 0x8c, 0xe6, 0x32, 0x2d, 0x18,
+ 0x25, 0xc9, 0xa2, 0x7d, 0x61, 0x7f, 0x3d, 0x0d, 0xd8, 0xcd, 0xe6, 0x11, 0x0c,
+ 0x17, 0xd4, 0x4d, 0xde, 0xf9, 0x79, 0x49, 0x7f, 0xec, 0x81, 0xc4, 0xb0, 0xca,
+ 0xfd, 0xc2, 0x63, 0xa0, 0xf5, 0xbe, 0x43, 0x12, 0x45, 0xc6, 0x7f, 0xb2, 0x7f,
+ 0xe6, 0x94, 0x24, 0x1c, 0xda, 0x1b, 0x5a, 0xa8, 0x2d, 0x1d, 0x35, 0xde, 0x36,
+ 0x4a, 0x0f, 0x22, 0x11, 0xc5, 0x7e, 0xff, 0x5c, 0xbb, 0xd3, 0xa8, 0xd9, 0xb4,
+ 0x09, 0xdc, 0xbf, 0xed, 0x23, 0xdd, 0xd1, 0xdd, 0x0a, 0x1c, 0x05, 0x81, 0x91,
+ 0xd3, 0xd0, 0xa3, 0x33, 0xe4, 0x0e, 0x0c, 0x81, 0x15, 0x89, 0xd7, 0x81, 0x39,
+ 0x0c, 0x3f, 0xef, 0xff, 0xcc, 0xe8, 0x78, 0x48, 0x5c, 0xec, 0x2c, 0x78, 0xed,
+ 0x7f, 0x7f, 0xd2, 0xca, 0x34, 0xfe, 0x10, 0x9d, 0xcd, 0x0a, 0xb0, 0xed, 0xa3,
+ 0x86, 0xe5, 0x51, 0x81, 0xa6, 0x0c, 0x46, 0x35, 0x57, 0x88, 0xed, 0x81, 0xb8,
+ 0xfb, 0x13, 0xa7, 0x2b, 0x2e, 0x0c, 0xae, 0x7f, 0x81, 0x81, 0x7f, 0x7f, 0xed,
+ 0x84, 0xd9, 0x0f, 0xb2, 0x76, 0x00, 0xc9, 0x19, 0xdb, 0xf1, 0xf1, 0xf2, 0x41,
+ 0x27, 0x7f, 0x0c, 0x15, 0xfa, 0x36, 0x29, 0x92, 0x1f, 0xe5, 0x19, 0x7f, 0x33,
+ 0x7f, 0x7f, 0x81, 0x3a, 0x55, 0x8e, 0xa9, 0x7f, 0x25, 0xaa, 0xde, 0x25, 0xa7,
+ 0xaa, 0x58, 0x00, 0x20, 0x41, 0x0d, 0x08, 0x81, 0x1e, 0x7f, 0xe2, 0xb8, 0xc9,
+ 0x35, 0xca, 0xb9, 0xa6, 0x31, 0x66, 0x25, 0xdc, 0x54, 0xbc, 0x63, 0x35, 0xa7,
+ 0xe1, 0x0c, 0xc6, 0xbf, 0xee, 0xd8, 0xb7, 0xe2, 0x0d, 0xf5, 0xe5, 0x00, 0x28,
+ 0x72, 0x6f, 0xd9, 0xdb, 0xf6, 0x54, 0xe2, 0x8a, 0xe8, 0x0a, 0x70, 0x16, 0xdc,
+ 0x60, 0xb8, 0xe0, 0x25, 0x73, 0x7f, 0x2c, 0xe6, 0xf3, 0xbd, 0x7f, 0x7f, 0x1e,
+ 0xcb, 0xc5, 0xdc, 0xdf, 0xaa, 0x1e, 0x69, 0x72, 0xdb, 0x9e, 0xc8, 0xf2, 0xc5,
+ 0x1e, 0xf0, 0x6e, 0x5c, 0x98, 0x03, 0x54, 0x30, 0x41, 0x7f, 0x7f, 0xe8, 0xc2,
+ 0x81, 0x32, 0x81, 0xcc, 0xea, 0xf7, 0xb6, 0x7f, 0x04, 0x03, 0x02, 0x83, 0x28,
+ 0x62, 0x22, 0xd1, 0xbe, 0xd9, 0xf1, 0xfb, 0x5c, 0x3b, 0x81, 0x60, 0x3e, 0x81,
+ 0xdd, 0xde, 0x7f, 0xe4, 0xa6, 0xe0, 0x54, 0xdc, 0x7f, 0xd7, 0x2b, 0x6d, 0x1b,
+ 0x7f, 0x81, 0x33, 0xad, 0x7f, 0x9b, 0x83, 0x7f, 0xdc, 0x7f, 0x4c, 0x4b, 0x04,
+ 0x01, 0x49, 0xef, 0xe5, 0xfe, 0xbf, 0xfc, 0xa5, 0x2f, 0x08, 0x5e, 0xa2, 0xb8,
+ 0x7f, 0x61, 0x7f, 0xbd, 0x65, 0x0f, 0x7f, 0x3b, 0xd9, 0x53, 0x2d, 0xd8, 0x7f,
+ 0x89, 0xdf, 0x34, 0x3f, 0x51, 0x0a, 0x7f, 0xb7, 0x68, 0xd3, 0x2a, 0x7f, 0x7f,
+ 0x38, 0xa5, 0xf4, 0xff, 0x7f, 0x7f, 0xb2, 0x7f, 0xaa, 0xe1, 0x81, 0xfc, 0xe4,
+ 0x92, 0x7f, 0x7f, 0x7f, 0x0e, 0x38, 0x71, 0xb0, 0x7f, 0x81, 0x98, 0xbe, 0x7f,
+ 0x7f, 0x81, 0xef, 0xee, 0x1f, 0xf8, 0x3f, 0x4e, 0x14, 0x1d, 0x31, 0x81, 0x9c,
+ 0xe3, 0xa9, 0xc2, 0x7d, 0x6d, 0x00, 0x28, 0x04, 0x06, 0xc3, 0xb8, 0xeb, 0x53,
+ 0x12, 0x65, 0x81, 0xdd, 0x7f, 0xe9, 0xaf, 0x75, 0xbb, 0x2e, 0x55, 0xf8, 0x1d,
+ 0xdd, 0x7f, 0x81, 0x2f, 0xbe, 0x81, 0x64, 0x0f, 0x81, 0x7f, 0x0f, 0x14, 0xc1,
+ 0x7f, 0x6b, 0x7f, 0xb3, 0x15, 0x10, 0x54, 0xf8, 0x1d, 0x6f, 0xce, 0xa2, 0x81,
+ 0x33, 0x10, 0x79, 0x77, 0x1a, 0x7f, 0x10, 0x51, 0xd2, 0xd9, 0x38, 0xe8, 0xfc,
+ 0x35, 0x09, 0x5b, 0xc8, 0x20, 0x7f, 0x7f, 0x33, 0x72, 0xd2, 0xaf, 0x4c, 0x7f,
+ 0x3f, 0x81, 0x81, 0xa8, 0x71, 0xd5, 0x7f, 0x57, 0x10, 0x43, 0xce, 0x7f, 0xe1,
+ 0xf3, 0x10, 0xf3, 0xf9, 0xab, 0xd9, 0xdf, 0xa4, 0x7f, 0x76, 0x1a, 0xe4, 0x7f,
+ 0xac, 0xb8, 0x7f, 0x0b, 0x7f, 0xb0, 0x7f, 0x81, 0x17, 0x9f, 0xf5, 0x9a, 0xd4,
+ 0x4f, 0x66, 0xea, 0x7f, 0x97, 0x0f, 0x16, 0xdf, 0x52, 0xd3, 0x7f, 0xf0, 0x0f,
+ 0x20, 0xee, 0x00, 0x23, 0x50, 0x2d, 0x19, 0x48, 0xbd, 0xf2, 0x13, 0x81, 0xdb,
+ 0x81, 0x51, 0xfe, 0x1e, 0x17, 0x1d, 0x28, 0x7f, 0xd1, 0x11, 0x3d, 0x73, 0x90,
+ 0xdf, 0x7f, 0x4a, 0x2f, 0x35, 0x0c, 0x97, 0x7f, 0x7f, 0x13, 0xad, 0xdf, 0x86,
+ 0x14, 0x29, 0xbb, 0x19, 0x7f, 0x05, 0x23, 0x20, 0xfb, 0xf5, 0x10, 0x7f, 0xa5,
+ 0xfe, 0xf7, 0x1b, 0xfd, 0x0e, 0xbb, 0x20, 0xac, 0x81, 0x00, 0x14, 0x26, 0xd0,
+ 0x7f, 0x7f, 0x06, 0x16, 0xd3, 0xfe, 0x7f, 0xd6, 0x6c, 0x99, 0xba, 0x0d, 0xf7,
+ 0x13, 0x39, 0x30, 0xb7, 0x7f, 0xaf, 0x1a, 0x30, 0x59, 0x78, 0x0d, 0x7d, 0x4a,
+ 0x67, 0xfc, 0x45, 0x32, 0x40, 0xea, 0xd5, 0xf2, 0xf6, 0xa0, 0x75, 0xe0, 0x03,
+ 0xc8, 0x43, 0xe7, 0x23, 0xee, 0x4e, 0x09, 0x39, 0x45, 0x18, 0xc8, 0xd9, 0x40,
+ 0xe7, 0xde, 0xe3, 0x03, 0xcf, 0xf8, 0xcb, 0x08, 0x37, 0xc6, 0xc7, 0x7f, 0x19,
+ 0x6c, 0x0e, 0x7f, 0x17, 0xc1, 0xf8, 0x21, 0xc3, 0xaf, 0x7f, 0x7f, 0xa9, 0x7f,
+ 0x24, 0x81, 0x40, 0x16, 0x1e, 0x0e, 0x63, 0x56, 0x08, 0xee, 0x52, 0xb4, 0xf3,
+ 0xf2, 0xb1, 0x44, 0x07, 0xe8, 0x4d, 0xf7, 0x7f, 0xe9, 0xed, 0x7f, 0x1b, 0xcc,
+ 0x09, 0x0f, 0x7f, 0xc7, 0x15, 0x81, 0x1c, 0x81, 0xa6, 0x37, 0x22, 0x98, 0x7f,
+ 0x7f, 0x56, 0xca, 0x72, 0xf8, 0x81, 0xab, 0x3a, 0xf5, 0x3b, 0x07, 0xe5, 0xd2,
+ 0x2b, 0xf6, 0xaf, 0x23, 0x0d, 0x89, 0x7c, 0x7f, 0x77, 0x7c, 0xb7, 0xae, 0x4b,
+ 0x81, 0x4e, 0xda, 0x7f, 0x4b, 0x42, 0xd3, 0x05, 0x2d, 0x25, 0xf5, 0xdc, 0x4c,
+ 0x06, 0x7f, 0x0d, 0x5b, 0x20, 0x7f, 0xad, 0x84, 0x06, 0x9b, 0xd6, 0x6e, 0x05,
+ 0x58, 0x06, 0xeb, 0xe6, 0xa9, 0xd2, 0x01, 0xce, 0xcb, 0x81, 0x7f, 0xb7, 0x89,
+ 0xd3, 0x0d, 0x36, 0x19, 0xd7, 0x90, 0x55, 0xb2, 0x13, 0xd0, 0x2a, 0x81, 0xe9,
+ 0xeb, 0x78, 0x31, 0x1b, 0xc2, 0xf5, 0x0f, 0x40, 0xa1, 0x0e, 0x81, 0xd7, 0xeb,
+ 0xfd, 0xf6, 0x3d, 0xf8, 0xde, 0xdd, 0x7f, 0xb1, 0xff, 0x7f, 0x06, 0x81, 0x7f,
+ 0xd7, 0x54, 0xfc, 0x38, 0x3d, 0xd4, 0x41, 0xdb, 0xf9, 0xce, 0x64, 0xcf, 0xfd,
+ 0x6c, 0xd9, 0x81, 0xcd, 0xa5, 0x0a, 0xd0, 0xf7, 0xf6, 0x90, 0x60, 0x7f, 0xfa,
+ 0xa6, 0x0f, 0xf1, 0x7f, 0xf9, 0xc6, 0x37, 0xd3, 0x25, 0x0b, 0x4a, 0x0d, 0xae,
+ 0x81, 0x0f, 0x47, 0xf5, 0x38, 0xe7, 0x48, 0x38, 0xae, 0x7f, 0x0d, 0xef, 0x1b,
+ 0xcd, 0xbc, 0xfd, 0x35, 0xfd, 0x41, 0x20, 0xc9, 0x81, 0x15, 0xe6, 0xfe, 0x08,
+ 0x25, 0x23, 0x14, 0x7f, 0xb8, 0x1c, 0xf7, 0x6c, 0xf2, 0xe0, 0x1f, 0xca, 0x97,
+ 0xe6, 0x0d, 0x41, 0xfb, 0x28, 0x57, 0x9d, 0xa0, 0xfe, 0x07, 0xe3, 0x0f, 0xeb,
+ 0x11, 0x69, 0x3e, 0x0e, 0xf1, 0xcb, 0x1d, 0xef, 0xd2, 0xd3, 0x7f, 0x52, 0x7f,
+ 0x56, 0x71, 0xdc, 0x4d, 0xf3, 0x22, 0xf5, 0xb0, 0x0f, 0x2c, 0x0a, 0x9d, 0x65,
+ 0x5d, 0xff, 0x09, 0xde, 0x7f, 0xe1, 0xc2, 0x48, 0xd2, 0x02, 0x0f, 0xfe, 0xe7,
+ 0xf0, 0xfe, 0xd4, 0x10, 0x3d, 0xd9, 0x0f, 0xdf, 0x4b, 0x97, 0x32, 0xcf, 0xc3,
+ 0xc2, 0xb2, 0xe8, 0x27, 0xb5, 0x7f, 0xea, 0x05, 0xf3, 0xee, 0x10, 0x71, 0xa7,
+ 0xa9, 0x1b, 0x7f, 0x93, 0xc4, 0x12, 0x95, 0xb0, 0xe2, 0xd1, 0x10, 0x8e, 0xb7,
+ 0x7f, 0x43, 0xc0, 0x01, 0xba, 0xf4, 0x2a, 0xa5, 0xd8, 0x4f, 0xc1, 0xc6, 0xf9,
+ 0x1a, 0xc1, 0xc9, 0xb6, 0x16, 0xd9, 0x2d, 0x7f, 0xcb, 0xd0, 0x52, 0xbc, 0x3a,
+ 0x2a, 0xe3, 0x23, 0xd0, 0xcd, 0x43, 0x04, 0xc8, 0x2f, 0xf7, 0x50, 0x20, 0x53,
+ 0x11, 0xc9, 0xfe, 0x04, 0xf8, 0xd0, 0x09, 0x81, 0xbf, 0xaf, 0x12, 0x53, 0x1f,
+ 0xda, 0x4a, 0xf4, 0xfa, 0x0f, 0x0f, 0x18, 0xd6, 0x50, 0xc9, 0x2b, 0x7f, 0xfe,
+ 0x85, 0x58, 0x67, 0x1b, 0x7f, 0xfd, 0xf1, 0x05, 0x9f, 0x7f, 0x29, 0x4c, 0x2b,
+ 0xde, 0x4d, 0xe4, 0x17, 0x32, 0xd2, 0xee, 0x7b, 0xe8, 0x28, 0x81, 0x24, 0x6f,
+ 0x16, 0x2d, 0x21, 0xb6, 0x11, 0xa9, 0xd2, 0xaf, 0xc0, 0xed, 0xf4, 0x05, 0x7f,
+ 0xaf, 0x06, 0x2b, 0xb9, 0xb8, 0x38, 0xad, 0x13, 0xf8, 0xfb, 0xeb, 0x81, 0x1e,
+ 0xca, 0x5b, 0x4b, 0x09, 0x39, 0x01, 0x6d, 0xd9, 0x32, 0xfe, 0x81, 0xec, 0xf8,
+ 0x36, 0xaf, 0xe4, 0x7f, 0xe8, 0xa3, 0xc1, 0x08, 0xad, 0x43, 0xd7, 0xf1, 0xf7,
+ 0xde, 0x40, 0x00, 0x81, 0x46, 0xa5, 0xac, 0x8f, 0x1f, 0xc9, 0x5c, 0xe2, 0xe6,
+ 0xf8, 0xf9, 0xf9, 0x6e, 0x1f, 0x89, 0x52, 0x7f, 0xb9, 0xeb, 0xbd, 0x0d, 0xe7,
+ 0x0e, 0x0e, 0xfc, 0xe9, 0x95, 0x43, 0x16, 0x2a, 0x24, 0xed, 0x7f, 0x25, 0xf4,
+ 0x09, 0x49, 0x08, 0x30, 0x70, 0xf0, 0x84, 0x5b, 0x35, 0xa8, 0x81, 0x7e, 0x95,
+ 0x1d, 0xcd, 0xbb, 0xfd, 0xcf, 0x24, 0xd4, 0xe0, 0xff, 0x57, 0x17, 0xfc, 0xd2,
+ 0x0f, 0x81, 0xbf, 0x8c, 0xef, 0xbe, 0x6a, 0x7f, 0x61, 0xcb, 0xe6, 0x2e, 0xf3,
+ 0x2a, 0xb9, 0x22, 0xef, 0x4d, 0x81, 0x0a, 0xee, 0x1e, 0x9d, 0xc9, 0xcb, 0x2e,
+ 0xe5, 0x0c, 0xee, 0xd7, 0xe6, 0x13, 0x43, 0x7c, 0x1f, 0x00, 0x09, 0x22, 0x28,
+ 0x07, 0xd4, 0x81, 0x81, 0xd0, 0xad, 0xf3, 0xd9, 0xec, 0x61, 0xa0, 0xab, 0x1d,
+ 0xd6, 0x43, 0xe3, 0xe9, 0xd7, 0x29, 0xd1, 0xc2, 0xeb, 0xf4, 0x81, 0xdf, 0xf9,
+ 0x0e, 0x81, 0x11, 0x0d, 0xe4, 0x81, 0xff, 0xfb, 0xe2, 0xd5, 0x2a, 0x5d, 0x5d,
+ 0x0c, 0xef, 0x99, 0x1e, 0x46, 0xd8, 0x81, 0xb1, 0xfb, 0x48, 0x22, 0xd8, 0xf3,
+ 0xf0, 0x00, 0xb2, 0xb1, 0xf3, 0xcf, 0xe5, 0xc8, 0x8d, 0x26, 0xba, 0xe9, 0xa2,
+ 0xba, 0xe0, 0x43, 0xce, 0xb4, 0xfb, 0x7f, 0x7f, 0x81, 0xc1, 0x06, 0x2f, 0x41,
+ 0x59, 0xe5, 0x17, 0x00, 0x2b, 0x46, 0xc1, 0x7f, 0x09, 0x5c, 0x11, 0xe9, 0x1e,
+ 0x0f, 0xab, 0xf9, 0x2b, 0x21, 0x59, 0x35, 0xf5, 0x36, 0xc8, 0x1a, 0xb3, 0x81,
+ 0x81, 0xb3, 0x81, 0x81, 0xbe, 0xdd, 0xce, 0xe1, 0x25, 0x16, 0xfd, 0x22, 0xe6,
+ 0x91, 0x4f, 0x2d, 0x05, 0xdd, 0x9b, 0xf0, 0xdd, 0xf4, 0x1b, 0x0f, 0xe7, 0x02,
+ 0x41, 0x19, 0x75, 0xce, 0xb0, 0x97, 0x16, 0x63, 0xe2, 0x36, 0x9a, 0xf4, 0xf6,
+ 0xb8, 0x75, 0x16, 0x14, 0x1e, 0xfe, 0xcc, 0xcb, 0xd7, 0x42, 0x7f, 0x20, 0xdf,
+ 0x1f, 0x2a, 0x1f, 0x81, 0x51, 0x7f, 0xec, 0x2e, 0xdf, 0xf0, 0x16, 0xb3, 0x28,
+ 0x75, 0x40, 0x9f, 0x3a, 0x58, 0x0c, 0x2f, 0x56, 0x81, 0xe7, 0xe5, 0x3e, 0xbe,
+ 0xdb, 0xfc, 0x09, 0x22, 0xf4, 0xf1, 0x72, 0x0c, 0xf2, 0x8d, 0x32, 0xc2, 0xb8,
+ 0xbb, 0x9c, 0xd8, 0xa0, 0xf0, 0x10, 0x16, 0xf5, 0xd0, 0x9b, 0x7f, 0xda, 0x14,
+ 0xce, 0x13, 0xcd, 0xed, 0xc3, 0x5d, 0x1e, 0xf6, 0x13, 0xdb, 0xf0, 0xdb, 0xde,
+ 0x18, 0xfa, 0x24, 0x5a, 0xe8, 0x3f, 0xee, 0xb1, 0x0c, 0x81, 0x41, 0xea, 0x4a,
+ 0x4c, 0xe9, 0x1c, 0xff, 0x29, 0xf5, 0xa7, 0xaf, 0xbf, 0xe7, 0xe3, 0xbf, 0x04,
+ 0x23, 0xd8, 0x23, 0xba, 0xc8, 0xda, 0x31, 0xac, 0x5d, 0x7f, 0x28, 0xcf, 0xb8,
+ 0x07, 0xf2, 0xfa, 0x91, 0x2b, 0xd0, 0x36, 0xb2, 0x6c, 0x54, 0xce, 0xf4, 0x32,
+ 0xc8, 0x88, 0x07, 0xe3, 0x07, 0x7f, 0xc0, 0xd6, 0x1d, 0x40, 0x14, 0xcf, 0xf6,
+ 0xec, 0x97, 0xf7, 0xc5, 0x0f, 0xe1, 0x0e, 0x81, 0xcd, 0xbc, 0x7f, 0x7f, 0xdd,
+ 0x18, 0x52, 0xa3, 0xe7, 0xba, 0xf1, 0x81, 0x21, 0x18, 0xbb, 0xbd, 0xf6, 0x20,
+ 0xed, 0x0a, 0x06, 0x04, 0xbb, 0x7f, 0x15, 0xf5, 0xa0, 0x23, 0x2e, 0x3d, 0xdf,
+ 0x1e, 0xba, 0x4a, 0x5e, 0x40, 0x81, 0x10, 0x10, 0x2d, 0x24, 0xf4, 0x23, 0x29,
+ 0x85, 0x60, 0xd0, 0x79, 0x19, 0xc9, 0x81, 0x4a, 0x36, 0x3a, 0xf3, 0x5f, 0xaa,
+ 0xf7, 0xd7, 0xb9, 0x31, 0xca, 0xb9, 0xee, 0xe1, 0x55, 0xed, 0x13, 0xc2, 0x6d,
+ 0x0a, 0x0d, 0xee, 0xe3, 0xcd, 0x9f, 0x12, 0xa3, 0xd0, 0x28, 0xc3, 0x29, 0x27,
+ 0xbc, 0x81, 0xbd, 0xd4, 0x4c, 0xf1, 0xe6, 0x7f, 0xc2, 0x34, 0xf5, 0xda, 0xbb,
+ 0x05, 0xe1, 0xaa, 0xf4, 0xfe, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x4d, 0x01, 0x00, 0x00, 0x79, 0xed, 0xff, 0xff, 0xca, 0xfe, 0xff, 0xff,
+ 0x59, 0xf6, 0xff, 0xff, 0xc4, 0x12, 0x00, 0x00, 0xf6, 0x08, 0x00, 0x00, 0x87,
+ 0xf9, 0xff, 0xff, 0x54, 0xf8, 0xff, 0xff, 0x99, 0xeb, 0xff, 0xff, 0x08, 0xfd,
+ 0xff, 0xff, 0x78, 0xf8, 0xff, 0xff, 0xa9, 0x0a, 0x00, 0x00, 0xf6, 0xf3, 0xff,
+ 0xff, 0xaa, 0x06, 0x00, 0x00, 0x1e, 0xf9, 0xff, 0xff, 0x54, 0xfd, 0xff, 0xff,
+ 0x55, 0xf5, 0xff, 0xff, 0x0b, 0xed, 0xff, 0xff, 0x00, 0x09, 0x00, 0x00, 0xa0,
+ 0xfe, 0xff, 0xff, 0x26, 0x00, 0x00, 0x00, 0x06, 0xfb, 0xff, 0xff, 0x4b, 0xf5,
+ 0xff, 0xff, 0xa6, 0x0d, 0x00, 0x00, 0x49, 0xf8, 0xff, 0xff, 0xef, 0x09, 0x00,
+ 0x00, 0x42, 0x0b, 0x00, 0x00, 0x1f, 0x0a, 0x00, 0x00, 0xb6, 0xfc, 0xff, 0xff,
+ 0x5e, 0x12, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x5d, 0xf5, 0xff, 0xff, 0x5f,
+ 0xf4, 0xff, 0xff, 0x81, 0xf5, 0xff, 0xff, 0xec, 0x07, 0x00, 0x00, 0x86, 0x06,
+ 0x00, 0x00, 0x1f, 0xfb, 0xff, 0xff, 0x94, 0x0d, 0x00, 0x00, 0x0d, 0xfe, 0xff,
+ 0xff, 0x7f, 0x04, 0x00, 0x00, 0x48, 0x04, 0x00, 0x00, 0xdb, 0x0d, 0x00, 0x00,
+ 0xad, 0xef, 0xff, 0xff, 0xc9, 0xf1, 0xff, 0xff, 0x9e, 0x0b, 0x00, 0x00, 0x30,
+ 0x0c, 0x00, 0x00, 0x0c, 0x07, 0x00, 0x00, 0x51, 0xfe, 0xff, 0xff, 0x76, 0xfe,
+ 0xff, 0xff, 0x12, 0xfd, 0xff, 0xff, 0x1c, 0xf9, 0xff, 0xff, 0x44, 0xf8, 0xff,
+ 0xff, 0xdf, 0xf9, 0xff, 0xff, 0x12, 0x07, 0x00, 0x00, 0x6c, 0x03, 0x00, 0x00,
+ 0xbf, 0x07, 0x00, 0x00, 0x15, 0x07, 0x00, 0x00, 0x81, 0xf9, 0xff, 0xff, 0xd3,
+ 0x07, 0x00, 0x00, 0xd5, 0xee, 0xff, 0xff, 0xb3, 0xfb, 0xff, 0xff, 0x80, 0x05,
+ 0x00, 0x00, 0xb4, 0xf6, 0xff, 0xff, 0xe6, 0xf9, 0xff, 0xff, 0xe5, 0x03, 0x00,
+ 0x00, 0xc2, 0x07, 0x00, 0x00, 0xbc, 0x05, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00,
+ 0xc9, 0x04, 0x00, 0x00, 0xfb, 0xfc, 0xff, 0xff, 0x8e, 0xee, 0xff, 0xff, 0x1c,
+ 0x0a, 0x00, 0x00, 0x52, 0x01, 0x00, 0x00, 0xfa, 0xf4, 0xff, 0xff, 0xb5, 0x06,
+ 0x00, 0x00, 0x65, 0x0d, 0x00, 0x00, 0x82, 0xe8, 0xff, 0xff, 0x20, 0x03, 0x00,
+ 0x00, 0x2a, 0xf7, 0xff, 0xff, 0x60, 0xf3, 0xff, 0xff, 0xaf, 0x09, 0x00, 0x00,
+ 0xcd, 0xfb, 0xff, 0xff, 0x43, 0x05, 0x00, 0x00, 0x77, 0x04, 0x00, 0x00, 0x70,
+ 0x0c, 0x00, 0x00, 0x85, 0xf3, 0xff, 0xff, 0x78, 0x05, 0x00, 0x00, 0x62, 0x06,
+ 0x00, 0x00, 0x8b, 0xf8, 0xff, 0xff, 0xd1, 0x06, 0x00, 0x00, 0x1b, 0x0f, 0x00,
+ 0x00, 0x16, 0xfb, 0xff, 0xff, 0x22, 0x06, 0x00, 0x00, 0x1b, 0xf8, 0xff, 0xff,
+ 0x7a, 0x08, 0x00, 0x00, 0xee, 0xff, 0xff, 0xff, 0xe4, 0xf4, 0xff, 0xff, 0xc0,
+ 0xf7, 0xff, 0xff, 0x77, 0xff, 0xff, 0xff, 0x5b, 0x05, 0x00, 0x00, 0xed, 0xf7,
+ 0xff, 0xff, 0x4f, 0xfc, 0xff, 0xff, 0x31, 0x09, 0x00, 0x00, 0x78, 0x03, 0x00,
+ 0x00, 0x5c, 0x09, 0x00, 0x00, 0x1d, 0x03, 0x00, 0x00, 0x9b, 0x0d, 0x00, 0x00,
+ 0xeb, 0x12, 0x00, 0x00, 0xdd, 0xf8, 0xff, 0xff, 0x4b, 0xff, 0xff, 0xff, 0xe7,
+ 0xee, 0xff, 0xff, 0xf4, 0xf7, 0xff, 0xff, 0x40, 0xfe, 0xff, 0xff, 0xc6, 0xfa,
+ 0xff, 0xff, 0x2e, 0xfa, 0xff, 0xff, 0x1b, 0xf1, 0xff, 0xff, 0x72, 0x07, 0x00,
+ 0x00, 0xb3, 0x09, 0x00, 0x00, 0x77, 0xfc, 0xff, 0xff, 0x35, 0x08, 0x00, 0x00,
+ 0x47, 0x06, 0x00, 0x00, 0x2b, 0xf9, 0xff, 0xff, 0x4e, 0x0f, 0x00, 0x00, 0x78,
+ 0x0a, 0x00, 0x00, 0xf9, 0x03, 0x00, 0x00, 0x76, 0x0a, 0x00, 0x00, 0xa6, 0xfc,
+ 0xff, 0xff, 0xfa, 0x03, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x2c, 0xee, 0xff,
+ 0xff, 0x86, 0x0b, 0x00, 0x00, 0xba, 0x09, 0x00, 0x00, 0x40, 0xfb, 0xff, 0xff,
+ 0x11, 0xfc, 0xff, 0xff, 0x17, 0x06, 0x00, 0x00, 0xf2, 0x08, 0x00, 0x00, 0x52,
+ 0x0e, 0x00, 0x00, 0xe3, 0x18, 0x00, 0x00, 0x92, 0x05, 0x00, 0x00, 0x90, 0xfb,
+ 0xff, 0xff, 0xc9, 0xff, 0xff, 0xff, 0x6c, 0xf4, 0xff, 0xff, 0x8e, 0xfe, 0xff,
+ 0xff, 0x44, 0xf9, 0xff, 0xff, 0xe7, 0x05, 0x00, 0x00, 0xb1, 0xfc, 0xff, 0xff,
+ 0x7e, 0xfb, 0xff, 0xff, 0x3f, 0xfe, 0xff, 0xff, 0xbe, 0xfa, 0xff, 0xff, 0x00,
+ 0x02, 0x00, 0x00, 0xf3, 0xfd, 0xff, 0xff, 0x0a, 0x0f, 0x00, 0x00, 0xca, 0xfc,
+ 0xff, 0xff, 0x10, 0x03, 0x00, 0x00, 0x6f, 0xfd, 0xff, 0xff, 0x0f, 0xf9, 0xff,
+ 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x32, 0x0a, 0x00, 0x00, 0x70, 0x03, 0x00, 0x00,
+ 0x74, 0xff, 0xff, 0xff, 0x8d, 0x09, 0x00, 0x00, 0x7b, 0x0a, 0x00, 0x00, 0x20,
+ 0xe9, 0xff, 0xff, 0x2b, 0xef, 0xff, 0xff, 0x82, 0xfa, 0xff, 0xff, 0xeb, 0x12,
+ 0x00, 0x00, 0xd2, 0xfc, 0xff, 0xff, 0x88, 0x08, 0x00, 0x00, 0xd6, 0xfa, 0xff,
+ 0xff, 0x3a, 0x08, 0x00, 0x00, 0x8d, 0xfe, 0xff, 0xff, 0xbd, 0x01, 0x00, 0x00,
+ 0x51, 0x09, 0x00, 0x00, 0x98, 0x0b, 0x00, 0x00, 0x40, 0xfe, 0xff, 0xff, 0x66,
+ 0x09, 0x00, 0x00, 0xd4, 0xff, 0xff, 0xff, 0x20, 0x0c, 0x00, 0x00, 0x9b, 0xf8,
+ 0xff, 0xff, 0x6c, 0xf8, 0xff, 0xff, 0x6d, 0x08, 0x00, 0x00, 0x5c, 0x00, 0x00,
+ 0x00, 0xb7, 0x0c, 0x00, 0x00, 0x88, 0xeb, 0xff, 0xff, 0xe2, 0x12, 0x00, 0x00,
+ 0xa7, 0x01, 0x00, 0x00, 0xf0, 0xfb, 0xff, 0xff, 0xfc, 0xfb, 0xff, 0xff, 0x29,
+ 0x0e, 0x00, 0x00, 0x89, 0xff, 0xff, 0xff, 0xef, 0x09, 0x00, 0x00, 0xdb, 0xf5,
+ 0xff, 0xff, 0xba, 0xec, 0xff, 0xff, 0xc1, 0x01, 0x00, 0x00, 0x5a, 0x12, 0x00,
+ 0x00, 0xc6, 0x04, 0x00, 0x00, 0x26, 0x06, 0x00, 0x00, 0x85, 0xfb, 0xff, 0xff,
+ 0xf6, 0x05, 0x00, 0x00, 0x98, 0x0d, 0x00, 0x00, 0x15, 0xfe, 0xff, 0xff, 0xc3,
+ 0xfc, 0xff, 0xff, 0xa9, 0xff, 0xff, 0xff, 0x9d, 0xe8, 0xff, 0xff, 0x22, 0x03,
+ 0x00, 0x00, 0x77, 0xf8, 0xff, 0xff, 0x3b, 0xf3, 0xff, 0xff, 0x0c, 0x0b, 0x00,
+ 0x00, 0x48, 0x07, 0x00, 0x00, 0x20, 0xfc, 0xff, 0xff, 0xcd, 0xf0, 0xff, 0xff,
+ 0x0b, 0x01, 0x00, 0x00, 0xb4, 0x04, 0x00, 0x00, 0xb8, 0xf3, 0xff, 0xff, 0x65,
+ 0xfa, 0xff, 0xff, 0x14, 0xfd, 0xff, 0xff, 0x8f, 0xf8, 0xff, 0xff, 0x02, 0x02,
+ 0x00, 0x00, 0x76, 0x0a, 0x00, 0x00, 0xc9, 0xeb, 0xff, 0xff, 0x2f, 0xf9, 0xff,
+ 0xff, 0xd3, 0xf6, 0xff, 0xff, 0xe9, 0x0b, 0x00, 0x00, 0x6e, 0x06, 0x00, 0x00,
+ 0x04, 0x12, 0x00, 0x00, 0x8c, 0xfc, 0xff, 0xff, 0xa1, 0x09, 0x00, 0x00, 0x8f,
+ 0x13, 0x00, 0x00, 0xc1, 0xff, 0xff, 0xff, 0x7f, 0xfa, 0xff, 0xff, 0x26, 0xff,
+ 0xff, 0xff, 0x99, 0x05, 0x00, 0x00, 0x81, 0xf9, 0xff, 0xff, 0x40, 0x00, 0x00,
+ 0x00, 0xf5, 0xf9, 0xff, 0xff, 0x6f, 0x06, 0x00, 0x00, 0xbf, 0xff, 0xff, 0xff,
+ 0x86, 0x14, 0x00, 0x00, 0xde, 0x09, 0x00, 0x00, 0xed, 0x08, 0x00, 0x00, 0xc3,
+ 0xf8, 0xff, 0xff, 0x97, 0x11, 0x00, 0x00, 0x2c, 0x0e, 0x00, 0x00, 0xe1, 0x0e,
+ 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1a, 0x0b, 0x00,
+ 0x00, 0xef, 0xf8, 0xff, 0xff, 0x6b, 0xf2, 0xff, 0xff, 0x84, 0xfa, 0xff, 0xff,
+ 0xf4, 0x03, 0x00, 0x00, 0xa0, 0xf2, 0xff, 0xff, 0x09, 0xf4, 0xff, 0xff, 0xe5,
+ 0x01, 0x00, 0x00, 0xcf, 0x07, 0x00, 0x00, 0x03, 0x0b, 0x00, 0x00, 0xb6, 0xf8,
+ 0xfe, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x26, 0xe0, 0xe1,
+ 0x99, 0x03, 0x3c, 0xd2, 0xd9, 0xe7, 0x1b, 0xd9, 0xfc, 0x13, 0xfd, 0xc8, 0xf4,
+ 0xf1, 0xd0, 0xde, 0x12, 0x10, 0x00, 0x1b, 0xf6, 0xcc, 0xb8, 0xb2, 0x38, 0x35,
+ 0xf0, 0xfa, 0x07, 0xfe, 0xe4, 0x1b, 0x21, 0x2b, 0xdd, 0xee, 0x36, 0xe1, 0xe5,
+ 0xc3, 0xfd, 0xff, 0xfe, 0xe7, 0xdb, 0xeb, 0x08, 0xc4, 0xcf, 0xb6, 0xe8, 0xff,
+ 0x1d, 0x2c, 0xf2, 0xe8, 0xfd, 0x1e, 0x51, 0x30, 0xca, 0x11, 0x30, 0xde, 0xb4,
+ 0x00, 0xf1, 0xed, 0x25, 0xfc, 0x8b, 0xfd, 0x26, 0xe2, 0xfb, 0x9e, 0xe3, 0xde,
+ 0xbb, 0x08, 0xf7, 0xef, 0x01, 0x0d, 0xca, 0xde, 0x01, 0xe6, 0x00, 0x34, 0xfa,
+ 0x31, 0x0b, 0xa5, 0xe9, 0x02, 0x4a, 0x28, 0xf1, 0xaa, 0x08, 0xdf, 0x36, 0xce,
+ 0xbe, 0xf6, 0x14, 0xf4, 0xd9, 0x2d, 0xbf, 0xe0, 0x25, 0x04, 0xeb, 0xd0, 0xf7,
+ 0xca, 0xfb, 0x12, 0x25, 0x3b, 0x14, 0xf2, 0xf9, 0x08, 0xf9, 0x00, 0xc4, 0x3c,
+ 0x0f, 0x23, 0xe8, 0xc8, 0xec, 0x0b, 0xd0, 0x05, 0xbc, 0xeb, 0xfd, 0xb8, 0xfb,
+ 0x26, 0xe7, 0xea, 0xfb, 0x12, 0x43, 0xf6, 0xc2, 0x10, 0x81, 0xcb, 0xc3, 0x12,
+ 0xfe, 0x1b, 0xfc, 0xea, 0x12, 0x1c, 0x04, 0xea, 0x46, 0x12, 0x37, 0x28, 0x12,
+ 0x32, 0x1a, 0xdd, 0x23, 0xe5, 0x01, 0xff, 0xfa, 0x25, 0x33, 0x03, 0x10, 0xed,
+ 0x0a, 0xde, 0xff, 0x19, 0xcf, 0xd6, 0xdc, 0x2c, 0xf7, 0x09, 0x1a, 0xf1, 0xed,
+ 0xde, 0xee, 0xe8, 0x14, 0x0e, 0x33, 0xe8, 0xd9, 0xa7, 0xec, 0x45, 0x2f, 0x06,
+ 0xd9, 0x19, 0xed, 0xd0, 0x2d, 0xcd, 0x1d, 0xe4, 0xc8, 0xee, 0xc4, 0xf2, 0xcb,
+ 0xff, 0xda, 0x41, 0x4a, 0xd5, 0xe1, 0x15, 0xed, 0xc4, 0x1b, 0x11, 0xdd, 0x24,
+ 0x30, 0x0a, 0x23, 0xbe, 0xfc, 0x23, 0xf0, 0x56, 0xd1, 0xdd, 0xf4, 0xd8, 0xd1,
+ 0x19, 0xd5, 0x27, 0x2e, 0xb0, 0xd2, 0x23, 0xe4, 0x30, 0x01, 0xe8, 0xef, 0x41,
+ 0x23, 0x12, 0xfd, 0xe8, 0xd8, 0xec, 0x4b, 0xdd, 0x02, 0xb9, 0xae, 0x0f, 0xe0,
+ 0x14, 0xf1, 0x18, 0x33, 0xf8, 0xf7, 0x43, 0xf4, 0x27, 0xf8, 0xed, 0x18, 0xe0,
+ 0x5b, 0xc4, 0xed, 0xde, 0x17, 0xf0, 0x2f, 0xc5, 0x1a, 0xda, 0xe6, 0xc5, 0xfa,
+ 0x34, 0xe0, 0xe6, 0xaf, 0xc0, 0xcf, 0x25, 0xe4, 0xed, 0xf4, 0xd6, 0x18, 0x1a,
+ 0xbb, 0xf4, 0xd3, 0xa8, 0x81, 0xef, 0xd0, 0x27, 0x28, 0xda, 0x45, 0xe8, 0x4f,
+ 0x0e, 0xd9, 0x20, 0x0a, 0xdc, 0xe0, 0x03, 0x2a, 0xfb, 0xd6, 0x1a, 0x2d, 0x42,
+ 0xef, 0x1e, 0x20, 0x12, 0xda, 0x2c, 0x02, 0xd8, 0xb6, 0x21, 0x56, 0xd5, 0x9a,
+ 0x1d, 0x18, 0x02, 0x1c, 0xd3, 0xe4, 0x07, 0x19, 0xfe, 0xd5, 0xfe, 0x02, 0xf1,
+ 0xf2, 0x20, 0x2f, 0x17, 0x21, 0xc3, 0xdf, 0x27, 0xf6, 0x18, 0x11, 0x9b, 0xe4,
+ 0x3d, 0x03, 0xe9, 0x31, 0x0d, 0xce, 0x0b, 0x0f, 0xb0, 0xfa, 0x08, 0xe3, 0xf2,
+ 0x1e, 0x2a, 0xff, 0x50, 0xc1, 0x13, 0x09, 0xf3, 0xea, 0xe8, 0x3f, 0x19, 0x22,
+ 0xc2, 0x14, 0xfd, 0x2c, 0x0c, 0xb9, 0x09, 0x30, 0x1a, 0xf8, 0xe7, 0xde, 0xbc,
+ 0x9a, 0xfd, 0xc0, 0x1c, 0x22, 0xee, 0x00, 0x30, 0xc9, 0xf5, 0x3d, 0xdd, 0x32,
+ 0x13, 0x36, 0xc0, 0xf1, 0x3a, 0x16, 0x0e, 0xd6, 0xb1, 0x12, 0x08, 0x03, 0x03,
+ 0xfa, 0xf1, 0x24, 0xfc, 0x1c, 0xd5, 0x2b, 0xd0, 0xc2, 0xcc, 0xe9, 0x17, 0x30,
+ 0x0b, 0xb2, 0x15, 0x6e, 0xeb, 0xf4, 0xf2, 0x2a, 0xb6, 0x2f, 0x17, 0xd8, 0x24,
+ 0xf3, 0x04, 0x04, 0xd8, 0xc2, 0x02, 0x2d, 0xd9, 0xf0, 0xe8, 0xe0, 0x2c, 0x06,
+ 0x11, 0xd4, 0xe2, 0x1e, 0x32, 0x2c, 0xf1, 0xc2, 0x10, 0xca, 0xfa, 0xe6, 0x35,
+ 0xc3, 0xee, 0x14, 0x39, 0x29, 0x1b, 0xf5, 0xc8, 0x24, 0xfa, 0x2b, 0x08, 0x4f,
+ 0x37, 0xcb, 0x1e, 0x1a, 0xb0, 0xf4, 0xbd, 0xfa, 0xe7, 0xda, 0x06, 0x11, 0xdd,
+ 0xfd, 0xee, 0xf7, 0x04, 0xce, 0xfe, 0x07, 0x25, 0xd4, 0xec, 0xf6, 0xe7, 0x2e,
+ 0xec, 0x17, 0xed, 0x1b, 0xe7, 0xdf, 0xf3, 0x0d, 0xdf, 0x16, 0x3a, 0x6a, 0x10,
+ 0x1e, 0x0f, 0x03, 0xfa, 0xfd, 0x09, 0xcf, 0xde, 0xfc, 0x08, 0xfd, 0xf3, 0x16,
+ 0xe6, 0x11, 0x04, 0x1d, 0xf9, 0xba, 0xf2, 0x06, 0xfa, 0x21, 0xae, 0x29, 0x0f,
+ 0xc7, 0xed, 0x09, 0x44, 0xfd, 0x20, 0xe5, 0xf5, 0x2a, 0xcd, 0xd6, 0xec, 0x01,
+ 0x27, 0xd9, 0xff, 0x02, 0x34, 0xde, 0x31, 0xbc, 0xd6, 0xfc, 0xf5, 0xfd, 0xe2,
+ 0xf4, 0xe9, 0xbb, 0xfc, 0x37, 0xe9, 0x06, 0xfc, 0xeb, 0xdc, 0xf5, 0xd6, 0xe8,
+ 0x07, 0x23, 0x15, 0x10, 0xe7, 0xcb, 0xcb, 0x2f, 0x04, 0xe2, 0xff, 0xf1, 0x0d,
+ 0x3a, 0xfb, 0x01, 0xf9, 0xfe, 0x48, 0xef, 0xf1, 0xea, 0xc9, 0xe4, 0xcc, 0xd9,
+ 0x06, 0xdd, 0xf1, 0xfe, 0xdd, 0xd0, 0x00, 0x03, 0xce, 0xf8, 0x25, 0xfe, 0xf1,
+ 0x00, 0xd7, 0xe7, 0x1c, 0xce, 0x16, 0xec, 0x26, 0xdd, 0x23, 0xe1, 0xf0, 0xee,
+ 0xd0, 0x04, 0xb5, 0xfc, 0xcc, 0x49, 0xfc, 0xf0, 0x01, 0xff, 0xb8, 0xfc, 0x24,
+ 0x16, 0xde, 0x16, 0x14, 0x31, 0x0a, 0xf2, 0x1d, 0xe4, 0x08, 0xfd, 0xfd, 0x00,
+ 0xd2, 0x1b, 0x11, 0xf3, 0x37, 0xee, 0x39, 0xfc, 0xde, 0xd6, 0x04, 0xe4, 0xd7,
+ 0xc6, 0xc8, 0x0f, 0x25, 0x25, 0xdb, 0x14, 0x04, 0x1c, 0xf1, 0xcf, 0xab, 0x66,
+ 0xe4, 0x1a, 0x03, 0xe8, 0xed, 0x20, 0x1a, 0x0d, 0xfc, 0xd3, 0xd8, 0xc3, 0xf3,
+ 0x12, 0xaa, 0x2b, 0x0e, 0x11, 0xea, 0xd5, 0xfc, 0xf0, 0xd7, 0xe7, 0x08, 0x33,
+ 0xcd, 0xec, 0xfe, 0x10, 0xf2, 0xf8, 0x18, 0x17, 0x01, 0xf8, 0xfb, 0x33, 0xaf,
+ 0x21, 0xdd, 0xef, 0x00, 0xe7, 0x7f, 0xf4, 0x10, 0xf7, 0x09, 0x13, 0xfc, 0x06,
+ 0x3d, 0xbf, 0x39, 0x9c, 0xd6, 0xd2, 0xf8, 0xfa, 0xc4, 0xdb, 0x01, 0x2b, 0xb8,
+ 0xef, 0x12, 0x15, 0xf3, 0xd8, 0xca, 0xe4, 0xfc, 0xda, 0x03, 0xaf, 0x0b, 0xff,
+ 0xcf, 0xfc, 0xca, 0xd1, 0xcf, 0xe5, 0x10, 0xb0, 0xf4, 0x26, 0xf2, 0x04, 0x1f,
+ 0xcd, 0xca, 0x02, 0x00, 0xe4, 0xd1, 0x2d, 0x01, 0xe5, 0xc1, 0xfa, 0x82, 0xfb,
+ 0x0d, 0x1e, 0x2f, 0xfa, 0x16, 0x02, 0xd3, 0x12, 0xef, 0xfc, 0x3f, 0xfa, 0x0c,
+ 0x91, 0xf5, 0x02, 0x0f, 0xf3, 0xb5, 0xcc, 0xc6, 0xc9, 0xee, 0x24, 0xaa, 0xc7,
+ 0xf8, 0xd9, 0xc4, 0x9d, 0xe8, 0x0c, 0xf1, 0x25, 0xe6, 0x17, 0xdf, 0xaa, 0xf8,
+ 0x20, 0x02, 0xb2, 0xca, 0xee, 0xdf, 0x07, 0x0d, 0x1a, 0xda, 0xd4, 0xa5, 0xe5,
+ 0xbb, 0xb2, 0xe0, 0x2b, 0xe9, 0xb1, 0x2a, 0xdb, 0xd1, 0xeb, 0xf1, 0xde, 0xe3,
+ 0x00, 0xbc, 0x10, 0xd7, 0xc1, 0x2d, 0x9e, 0xe8, 0xf2, 0x09, 0xbd, 0xe6, 0xc0,
+ 0xea, 0xed, 0xde, 0x3e, 0xf7, 0xc2, 0xdd, 0x24, 0xe0, 0xf5, 0xb1, 0x2c, 0x1a,
+ 0xd7, 0x2d, 0x2b, 0xe6, 0xd9, 0x0e, 0xdc, 0x19, 0x3e, 0x02, 0xb9, 0xd1, 0xec,
+ 0xb0, 0x03, 0x09, 0xcc, 0x24, 0xf0, 0xc6, 0xf2, 0xf5, 0x30, 0xb5, 0x03, 0x06,
+ 0x1f, 0xe2, 0xc8, 0xb4, 0xe8, 0xfd, 0x38, 0xf9, 0xfa, 0x09, 0xf5, 0xf4, 0xd0,
+ 0xec, 0xde, 0x05, 0xed, 0xcc, 0xf4, 0xee, 0xde, 0xfb, 0xd7, 0x06, 0xba, 0x07,
+ 0xd3, 0xf3, 0xeb, 0x1a, 0x43, 0x29, 0x04, 0x22, 0xaa, 0xbb, 0xea, 0xf4, 0xbe,
+ 0x1d, 0xf9, 0x11, 0xf9, 0xeb, 0xc4, 0x0a, 0xa0, 0xfd, 0xfb, 0x16, 0xd7, 0x12,
+ 0x07, 0xe8, 0x46, 0xef, 0xed, 0x5a, 0xd0, 0x10, 0xd6, 0xbc, 0x08, 0x27, 0x08,
+ 0x5a, 0x00, 0xe7, 0x1a, 0xbb, 0x81, 0x11, 0xd4, 0x3f, 0xe7, 0xfb, 0xef, 0xce,
+ 0xd0, 0x21, 0xd5, 0xfb, 0x65, 0xf8, 0x0f, 0x16, 0x4f, 0xdb, 0xf4, 0xde, 0xfe,
+ 0x2c, 0xc5, 0xf7, 0x06, 0xd0, 0x2d, 0xf5, 0xe1, 0x92, 0x27, 0x28, 0xea, 0xfe,
+ 0xf3, 0x0c, 0xc6, 0xd9, 0xeb, 0xd9, 0xef, 0xf5, 0x23, 0x00, 0x06, 0x1b, 0x24,
+ 0xd1, 0xff, 0xdf, 0x57, 0xb7, 0x17, 0xd8, 0x0c, 0x12, 0x48, 0xf0, 0xbe, 0x18,
+ 0x1a, 0x58, 0xf0, 0xc6, 0xd3, 0xc2, 0x1d, 0x17, 0xfa, 0x42, 0xdf, 0x20, 0xe8,
+ 0xdb, 0xf1, 0xdf, 0x04, 0xcf, 0x0b, 0xdd, 0xe0, 0x00, 0x5e, 0x02, 0x68, 0xc4,
+ 0x0c, 0x1b, 0x14, 0x11, 0x35, 0xf9, 0x4a, 0xb3, 0xf0, 0xb9, 0x91, 0x1e, 0xff,
+ 0xe3, 0x2f, 0x0f, 0xf0, 0xed, 0xd1, 0xe9, 0x21, 0xd5, 0x06, 0x1f, 0xef, 0xad,
+ 0x18, 0xf2, 0x99, 0xc5, 0xea, 0xf2, 0x71, 0xef, 0xe5, 0x2a, 0x2a, 0x4e, 0x7f,
+ 0x40, 0x44, 0xc9, 0x2b, 0xde, 0x2e, 0x0e, 0xf3, 0x61, 0x45, 0xd0, 0xe7, 0x3a,
+ 0xac, 0x21, 0x5a, 0xe2, 0x0f, 0xe5, 0x18, 0xdf, 0xd5, 0xd9, 0x1e, 0xe9, 0xe7,
+ 0x2d, 0x29, 0xe5, 0xa1, 0x06, 0x00, 0xcc, 0x02, 0x01, 0xc8, 0x05, 0xd5, 0x4f,
+ 0xbc, 0xee, 0xfd, 0x5f, 0xbf, 0x34, 0xd1, 0x10, 0xf1, 0xe6, 0x64, 0xf2, 0x1f,
+ 0x08, 0x3c, 0xb6, 0x05, 0x4d, 0x00, 0x0c, 0xe5, 0x0d, 0xde, 0xf3, 0x06, 0x7e,
+ 0x44, 0xc2, 0xae, 0xe4, 0xef, 0xd2, 0xe9, 0xfd, 0xff, 0x34, 0x9a, 0xd8, 0x28,
+ 0x24, 0x0a, 0xe8, 0xe8, 0xa2, 0xd9, 0xed, 0x06, 0xee, 0xd9, 0xfc, 0xf7, 0x0d,
+ 0xa6, 0xfb, 0x2c, 0xfd, 0xb2, 0xcc, 0xfc, 0xd8, 0x13, 0xdd, 0xde, 0xe8, 0xe4,
+ 0x17, 0xee, 0x20, 0x49, 0xd6, 0x41, 0x30, 0xe7, 0xfc, 0x05, 0xdb, 0xe0, 0x21,
+ 0xe4, 0xcc, 0xcc, 0xee, 0xcc, 0xf2, 0xb3, 0xed, 0x04, 0xf8, 0xc2, 0x72, 0x0c,
+ 0xea, 0x4d, 0x31, 0x2c, 0xb7, 0x37, 0xdd, 0xbe, 0xfe, 0xe6, 0x22, 0x20, 0xf6,
+ 0xea, 0x02, 0x05, 0x65, 0xda, 0xd1, 0xff, 0xee, 0x34, 0x0c, 0x92, 0x85, 0xed,
+ 0xde, 0x1b, 0xd3, 0x65, 0xe1, 0xb2, 0x25, 0x23, 0x02, 0xb0, 0xbf, 0x41, 0xb2,
+ 0xc7, 0xfb, 0x10, 0x04, 0x1b, 0xc1, 0xe6, 0xde, 0xaf, 0x0d, 0x01, 0x8f, 0xff,
+ 0xd8, 0xf6, 0xa0, 0x1d, 0xd5, 0x03, 0xdd, 0xc6, 0xf8, 0x05, 0xc6, 0x25, 0x3f,
+ 0x05, 0x9f, 0xfd, 0x1c, 0xd0, 0x0c, 0xc2, 0xe0, 0x09, 0xec, 0x1e, 0xcf, 0x30,
+ 0x18, 0xdb, 0x5a, 0x09, 0x87, 0xda, 0xd8, 0xc8, 0x00, 0x47, 0x2d, 0x09, 0x09,
+ 0xf0, 0x1e, 0x0d, 0xfa, 0xfd, 0xc3, 0xbd, 0xfe, 0x4f, 0x3b, 0x03, 0x1e, 0xe0,
+ 0x8f, 0xcb, 0x97, 0x05, 0xbc, 0xea, 0xec, 0x2b, 0xfd, 0x1b, 0xb2, 0x04, 0x9e,
+ 0xe7, 0xf3, 0x38, 0xe7, 0x46, 0x37, 0x24, 0x1c, 0x44, 0xa7, 0xeb, 0x03, 0xd7,
+ 0x27, 0xed, 0x0d, 0x14, 0xbd, 0xbf, 0xea, 0x11, 0x0b, 0xd6, 0x33, 0x2f, 0x62,
+ 0xdd, 0x3e, 0xf9, 0x3e, 0x23, 0x10, 0xf3, 0x30, 0xf3, 0x3f, 0xe2, 0xe4, 0x14,
+ 0xf9, 0x3f, 0x13, 0xd3, 0xfe, 0xd0, 0x27, 0x0f, 0x81, 0xd5, 0xf6, 0xf9, 0xe0,
+ 0xec, 0x19, 0x92, 0x50, 0x90, 0x27, 0x48, 0xf8, 0x13, 0xd6, 0x90, 0x4b, 0x07,
+ 0x25, 0x07, 0x08, 0xd0, 0x23, 0xdc, 0xfe, 0xe9, 0xe1, 0x12, 0x23, 0x2f, 0x85,
+ 0xdd, 0xc6, 0x32, 0x30, 0xea, 0x28, 0x0b, 0xd7, 0xf5, 0xe8, 0xa1, 0x0f, 0xe2,
+ 0x18, 0x38, 0xed, 0xda, 0x1a, 0xe6, 0x1f, 0xb7, 0x06, 0xdc, 0xe5, 0xda, 0xbc,
+ 0x15, 0x83, 0x18, 0xfa, 0xbd, 0xc6, 0xe7, 0xf0, 0x53, 0xe9, 0x07, 0x2a, 0x38,
+ 0xfe, 0x16, 0xd7, 0xe4, 0xfa, 0x2b, 0xfc, 0x9b, 0x17, 0x3b, 0x1d, 0x13, 0xa9,
+ 0x16, 0xb6, 0x57, 0xcf, 0xff, 0x21, 0xde, 0x45, 0x30, 0x81, 0x0f, 0x14, 0xe7,
+ 0xec, 0xf7, 0xeb, 0xc8, 0xb7, 0xed, 0xda, 0xbb, 0xa2, 0x06, 0x03, 0xfa, 0x59,
+ 0xfa, 0xf8, 0xa5, 0xf2, 0x06, 0xf0, 0xd2, 0xdb, 0x38, 0xaf, 0xf1, 0x29, 0x39,
+ 0xf9, 0xe8, 0xfb, 0xcf, 0x1a, 0xe5, 0xff, 0xab, 0xb8, 0xf5, 0x13, 0xba, 0xb9,
+ 0xe6, 0xd6, 0xe5, 0xeb, 0x11, 0x9b, 0xc4, 0x1c, 0x36, 0x26, 0x2c, 0x15, 0xf7,
+ 0x17, 0xf9, 0xf1, 0x0b, 0x07, 0x9c, 0x23, 0xfd, 0xbd, 0xe0, 0xb8, 0xfb, 0x33,
+ 0xc9, 0x08, 0xd7, 0xf4, 0x29, 0xeb, 0xf9, 0x22, 0xe4, 0x0f, 0xd3, 0x4a, 0xe3,
+ 0x31, 0x12, 0x3d, 0x39, 0xfc, 0xba, 0xe6, 0xaf, 0xd5, 0x1d, 0x15, 0xe4, 0xed,
+ 0xfa, 0xe1, 0xf3, 0x65, 0xa2, 0xc9, 0xca, 0xf3, 0x32, 0xc4, 0xf8, 0xb6, 0xf3,
+ 0x25, 0x2f, 0x1e, 0xc3, 0xc3, 0xdb, 0x06, 0xe0, 0x31, 0xe7, 0x2c, 0x3d, 0xfd,
+ 0xde, 0xdd, 0x34, 0xd1, 0x17, 0xcf, 0x0a, 0xc6, 0xfe, 0x04, 0xdd, 0x25, 0x10,
+ 0xde, 0x08, 0xe9, 0x28, 0xc8, 0xe7, 0x25, 0x81, 0xad, 0xe6, 0x12, 0xfe, 0x61,
+ 0x19, 0xb1, 0x05, 0x55, 0x75, 0x29, 0xc9, 0xe3, 0xe7, 0xf6, 0xc8, 0x95, 0x01,
+ 0x19, 0xe1, 0x06, 0xe2, 0x02, 0x4a, 0x59, 0x28, 0xe8, 0x16, 0x19, 0x21, 0xe8,
+ 0xd6, 0x89, 0x61, 0xb7, 0xe7, 0xcf, 0xbb, 0xcd, 0xe2, 0xbe, 0x70, 0x09, 0xf8,
+ 0x3b, 0xd4, 0x15, 0xee, 0x1a, 0x3c, 0x15, 0x3d, 0xff, 0xcc, 0xb9, 0x9e, 0x3d,
+ 0xcc, 0xe9, 0x0e, 0xf6, 0x01, 0x94, 0xf0, 0xf7, 0x0c, 0xb6, 0x14, 0x12, 0x26,
+ 0xe8, 0x2c, 0xd6, 0xce, 0xee, 0xd7, 0x4a, 0xae, 0x37, 0xa9, 0x12, 0x0c, 0x09,
+ 0xb0, 0x17, 0x0b, 0xce, 0xc6, 0x11, 0xd6, 0x40, 0x0e, 0x13, 0x1e, 0x07, 0x1a,
+ 0xf3, 0xdb, 0x26, 0x12, 0xc6, 0xf7, 0xff, 0xf3, 0x05, 0x2d, 0xc9, 0xe4, 0xf4,
+ 0xf8, 0x45, 0x12, 0x03, 0x23, 0x16, 0xc0, 0xeb, 0x25, 0x1a, 0xe4, 0xf0, 0x06,
+ 0x07, 0x04, 0x56, 0xaa, 0x0f, 0x20, 0x07, 0xba, 0x12, 0xcb, 0x0d, 0x1b, 0x46,
+ 0xd7, 0xf1, 0x29, 0xf6, 0xe6, 0x3d, 0xf5, 0xd0, 0x2f, 0xe6, 0x0f, 0x96, 0xe0,
+ 0x0c, 0xde, 0x34, 0xd1, 0x1c, 0xa5, 0xb3, 0x03, 0x5e, 0xd2, 0xd5, 0xaf, 0xf4,
+ 0xed, 0x25, 0xd2, 0x0d, 0x18, 0xdc, 0xa4, 0x09, 0x05, 0xcb, 0x2e, 0x1c, 0xe6,
+ 0xd0, 0xc2, 0xba, 0x22, 0xc6, 0xb9, 0xf4, 0xd2, 0x37, 0x17, 0x4b, 0xf7, 0x16,
+ 0xe8, 0xe6, 0x0e, 0x32, 0x5d, 0x0c, 0x6b, 0x3b, 0x1d, 0x68, 0xf7, 0xf1, 0xd0,
+ 0xaa, 0x25, 0x10, 0x0a, 0x36, 0xe9, 0xd0, 0x2a, 0xf8, 0xb5, 0x06, 0xe6, 0x54,
+ 0xec, 0xe8, 0x40, 0xfc, 0x1d, 0xcc, 0xd3, 0x0b, 0x17, 0x46, 0xc6, 0x54, 0xf9,
+ 0xec, 0xee, 0x07, 0x2f, 0xf5, 0x2b, 0xf7, 0x0f, 0xeb, 0x0d, 0xe9, 0xe2, 0xea,
+ 0xdb, 0xf0, 0xbf, 0x24, 0xe7, 0xd9, 0x22, 0x11, 0xed, 0x32, 0xff, 0xe8, 0x3a,
+ 0xec, 0x0a, 0xf6, 0xe8, 0xc9, 0xf1, 0xca, 0xee, 0x1b, 0x0d, 0xf2, 0xf4, 0x1a,
+ 0x57, 0x1a, 0x01, 0xcc, 0xcb, 0xb5, 0xcc, 0x2a, 0xcd, 0xf1, 0xd4, 0x24, 0x19,
+ 0xa6, 0xf6, 0x2a, 0x15, 0x3a, 0x07, 0x28, 0xcf, 0xdf, 0x24, 0x20, 0x0e, 0xe7,
+ 0x1e, 0xf1, 0x00, 0x0a, 0x4f, 0xfb, 0x0f, 0x19, 0x13, 0xbd, 0xc8, 0x1a, 0xdb,
+ 0x11, 0xf8, 0x01, 0xd1, 0x12, 0xb8, 0x3d, 0x31, 0x24, 0xd9, 0xf0, 0x2a, 0xfb,
+ 0xf2, 0x32, 0xf3, 0x07, 0x25, 0xd6, 0x09, 0x29, 0x2d, 0x22, 0xe2, 0x1a, 0x08,
+ 0x62, 0x1d, 0x7f, 0x18, 0x0e, 0x0a, 0x40, 0x0b, 0xd2, 0xac, 0x31, 0x47, 0xe9,
+ 0xf1, 0xf6, 0xff, 0x25, 0x06, 0x17, 0xce, 0xd9, 0xc2, 0xfe, 0xf8, 0x26, 0x23,
+ 0xc0, 0xfd, 0xca, 0xd1, 0xbf, 0x02, 0xe4, 0x15, 0xf1, 0xc7, 0xf9, 0xeb, 0x60,
+ 0xdc, 0x47, 0xe0, 0xdf, 0xe2, 0x16, 0xf5, 0xe4, 0xda, 0x42, 0x51, 0x37, 0xf0,
+ 0xeb, 0xdc, 0x27, 0xb1, 0x1a, 0xf8, 0xeb, 0xb9, 0xee, 0x33, 0xef, 0xdd, 0x90,
+ 0xd3, 0x22, 0xc8, 0xb8, 0xe5, 0xf5, 0x13, 0x06, 0x07, 0xda, 0xfa, 0x04, 0xf0,
+ 0xaf, 0x35, 0xd0, 0xd0, 0x14, 0x08, 0x2d, 0xf6, 0xed, 0x27, 0x27, 0xf8, 0xcb,
+ 0x23, 0xfb, 0x07, 0x2a, 0x27, 0x0c, 0xfc, 0xd9, 0xd4, 0x1f, 0xde, 0x0b, 0x0d,
+ 0x12, 0xd1, 0x08, 0x2b, 0xd1, 0x11, 0x03, 0xf3, 0x04, 0x45, 0xff, 0xd9, 0xef,
+ 0x19, 0x01, 0xec, 0x3d, 0xf3, 0x1a, 0xb7, 0xd8, 0xc2, 0xca, 0x18, 0x27, 0x01,
+ 0x29, 0x09, 0xd8, 0x14, 0xda, 0x11, 0x2d, 0x63, 0x40, 0xd6, 0xd0, 0xd4, 0xf7,
+ 0x1d, 0xde, 0xe1, 0xdc, 0xa6, 0x24, 0x13, 0xbb, 0xe4, 0x27, 0x3d, 0xf1, 0xd4,
+ 0x44, 0xd6, 0x17, 0xc4, 0xc5, 0xf8, 0xda, 0xc9, 0x4f, 0xe2, 0x13, 0x10, 0xf8,
+ 0xd0, 0x23, 0xdc, 0xf2, 0x26, 0x61, 0x1f, 0x02, 0xd1, 0xe0, 0xe6, 0xfb, 0xfe,
+ 0x1d, 0xac, 0xfb, 0xbd, 0x0d, 0x08, 0xe0, 0xb6, 0x2f, 0x11, 0xb5, 0x04, 0x4d,
+ 0xc0, 0xc9, 0xdf, 0xd8, 0xfe, 0xd5, 0xbb, 0xbf, 0x15, 0x0f, 0xf4, 0xf8, 0xd5,
+ 0xa2, 0xda, 0xbb, 0xd0, 0xae, 0xb9, 0xec, 0x07, 0xe2, 0x23, 0x16, 0x21, 0x0a,
+ 0x42, 0xae, 0xba, 0xb1, 0xea, 0x1b, 0x6b, 0x31, 0xb1, 0x0a, 0x17, 0x3a, 0xdc,
+ 0xae, 0x12, 0x03, 0xcf, 0xd2, 0xf6, 0xd4, 0xdf, 0x3a, 0xb6, 0xf8, 0x2d, 0xe2,
+ 0xa4, 0xe3, 0xf7, 0xfb, 0xd7, 0x0b, 0x9d, 0xde, 0xd7, 0xc9, 0x56, 0xee, 0x98,
+ 0x1c, 0x08, 0xab, 0xc2, 0x59, 0xa3, 0x30, 0x3f, 0x2d, 0xd0, 0x08, 0x1e, 0xed,
+ 0xdc, 0x1e, 0xc0, 0x64, 0xc9, 0x4e, 0xd7, 0xe7, 0xeb, 0xe2, 0xe8, 0x20, 0xe2,
+ 0xcd, 0xfc, 0x37, 0xc9, 0x5a, 0x1f, 0x23, 0x14, 0x0c, 0xee, 0xe7, 0x06, 0xc8,
+ 0xc7, 0x12, 0x9a, 0xfa, 0xd9, 0xff, 0xe9, 0x3c, 0xff, 0xff, 0x7f, 0xc3, 0xe8,
+ 0xe3, 0x01, 0xa0, 0x19, 0x3e, 0x16, 0xce, 0x1b, 0xe8, 0x27, 0x52, 0xec, 0x49,
+ 0xf5, 0xe9, 0x3c, 0xc3, 0xab, 0x3f, 0xfc, 0x02, 0x05, 0xbe, 0x49, 0x08, 0xd7,
+ 0x20, 0xea, 0x0f, 0x43, 0xd3, 0xf6, 0x03, 0x43, 0x2f, 0x07, 0x0e, 0xdb, 0xb5,
+ 0x1c, 0x3e, 0x19, 0xbe, 0xe8, 0xe9, 0x12, 0xed, 0xd5, 0x08, 0x02, 0xf6, 0xf9,
+ 0x01, 0xde, 0x01, 0xcf, 0xe6, 0x83, 0x35, 0x9d, 0xc9, 0xbf, 0x8a, 0xbe, 0xf2,
+ 0xf4, 0x11, 0xd1, 0x0e, 0xa4, 0xdd, 0x0d, 0xb4, 0xd2, 0x95, 0xf4, 0xb4, 0x2a,
+ 0xa3, 0xc9, 0xe0, 0x25, 0xbd, 0xf9, 0xaf, 0xba, 0x2f, 0xf4, 0xeb, 0x03, 0xf3,
+ 0x37, 0xd9, 0xaf, 0xd7, 0x0c, 0xcb, 0x19, 0xd1, 0x0c, 0xeb, 0x1e, 0x0a, 0x2b,
+ 0xf1, 0x16, 0x0f, 0x11, 0xea, 0x00, 0x81, 0xfe, 0xc5, 0x31, 0xe8, 0x8c, 0xb9,
+ 0x21, 0xfe, 0xd8, 0xfa, 0x9e, 0xf9, 0x23, 0x16, 0x15, 0x1c, 0x10, 0xe3, 0xf2,
+ 0x23, 0x15, 0xe3, 0x0e, 0xdf, 0x47, 0x42, 0x2e, 0x28, 0x0d, 0xc1, 0x28, 0x25,
+ 0xe6, 0xd2, 0xe9, 0xe9, 0xe2, 0xf4, 0xef, 0x38, 0x04, 0xc6, 0x0d, 0x25, 0xff,
+ 0xc7, 0x15, 0xe2, 0x06, 0xe5, 0x0b, 0x99, 0xb8, 0x2c, 0xf6, 0x56, 0x19, 0x14,
+ 0x1b, 0x05, 0x07, 0xec, 0xed, 0xfe, 0x4a, 0x0b, 0x18, 0x29, 0xeb, 0xda, 0xd8,
+ 0x68, 0xe0, 0xfe, 0xec, 0xc1, 0x01, 0xd8, 0xe7, 0x48, 0x12, 0x1f, 0x1c, 0x33,
+ 0x05, 0xb5, 0x16, 0x08, 0x90, 0xc7, 0x3b, 0xc8, 0xf1, 0x16, 0x26, 0xa2, 0xb9,
+ 0xc0, 0x0b, 0xba, 0xe4, 0xd9, 0x0f, 0xb3, 0x17, 0xdc, 0xea, 0x2c, 0xf8, 0xe7,
+ 0x18, 0xec, 0x1b, 0xaa, 0xf3, 0x50, 0x0a, 0x34, 0x30, 0xca, 0xf0, 0xfe, 0xb3,
+ 0x3b, 0x22, 0xde, 0x20, 0x14, 0x0f, 0x41, 0xe9, 0x29, 0xf9, 0x2a, 0x0b, 0x05,
+ 0x34, 0x00, 0xa9, 0xff, 0x06, 0xdf, 0x3f, 0xed, 0x37, 0xfe, 0x07, 0xc9, 0x12,
+ 0xfd, 0x02, 0x42, 0xbc, 0xe7, 0xc7, 0x03, 0xdc, 0xe6, 0x1d, 0xd8, 0x34, 0x07,
+ 0xa0, 0xd9, 0xf6, 0xe6, 0xe5, 0xb0, 0xe7, 0xa4, 0xfc, 0x02, 0xed, 0xf0, 0xaa,
+ 0xed, 0xff, 0x05, 0xca, 0x3a, 0xc7, 0x10, 0xed, 0x1d, 0x48, 0xe8, 0x16, 0xe1,
+ 0xdc, 0x13, 0x24, 0xfa, 0x2a, 0x3d, 0xdd, 0x0a, 0xeb, 0xe0, 0x22, 0xe5, 0x03,
+ 0xe9, 0x2a, 0x06, 0x2e, 0x3d, 0x07, 0xd4, 0x05, 0x55, 0xea, 0x38, 0x12, 0xcd,
+ 0xff, 0xb7, 0x11, 0x06, 0xb2, 0x12, 0xb7, 0xc6, 0x09, 0x06, 0xc6, 0xfe, 0xdb,
+ 0xe5, 0xbc, 0xd3, 0xcc, 0x06, 0xe9, 0xd1, 0xdf, 0xda, 0x2f, 0x2f, 0xf8, 0x10,
+ 0xd8, 0xc4, 0x04, 0xf8, 0xe7, 0x40, 0xcc, 0xbe, 0xc6, 0xe7, 0xea, 0xd6, 0xd3,
+ 0xff, 0xed, 0x01, 0xec, 0x00, 0x05, 0x16, 0xfe, 0xc6, 0xe6, 0x14, 0xea, 0xd7,
+ 0xcc, 0xd4, 0xfc, 0x4e, 0xbf, 0xd6, 0xce, 0x35, 0xbc, 0x29, 0xed, 0x12, 0xcc,
+ 0xf5, 0x0f, 0xee, 0xc4, 0xd0, 0xaf, 0x0b, 0x1d, 0xfa, 0xbb, 0xfc, 0xde, 0x2f,
+ 0x11, 0xf7, 0x36, 0xe2, 0xdc, 0x02, 0xfd, 0x05, 0xfe, 0xf4, 0x1c, 0xd5, 0x24,
+ 0x28, 0xca, 0x14, 0xf7, 0xdf, 0x0a, 0xe0, 0x0f, 0x7f, 0xbe, 0x2e, 0xf7, 0x0f,
+ 0x0d, 0xd5, 0xf6, 0x12, 0xdc, 0x02, 0x16, 0x03, 0xc8, 0xe8, 0xfe, 0xe1, 0xf9,
+ 0xc7, 0xfa, 0xa9, 0x1c, 0x20, 0x18, 0xe2, 0xde, 0x11, 0xf6, 0xbf, 0xd3, 0xdc,
+ 0x09, 0x20, 0xe4, 0x06, 0xdb, 0x49, 0xd2, 0xcf, 0xd8, 0xf7, 0xea, 0xee, 0xdd,
+ 0xf6, 0x03, 0xc5, 0xd8, 0xf8, 0xd5, 0xf1, 0xbe, 0x0e, 0x14, 0xfb, 0x50, 0x28,
+ 0x17, 0xfa, 0x10, 0xc9, 0xda, 0xff, 0xdb, 0x14, 0x03, 0xf1, 0xd8, 0x4e, 0x1c,
+ 0x00, 0xfb, 0xef, 0xbb, 0x0b, 0xf9, 0xcd, 0xf9, 0xd9, 0xff, 0x12, 0xf1, 0x16,
+ 0xea, 0xf6, 0x5b, 0xd7, 0xf6, 0xe7, 0xd1, 0x9f, 0x97, 0x0f, 0x59, 0xfe, 0xb6,
+ 0xdc, 0x84, 0xa7, 0x1c, 0x19, 0x0a, 0xba, 0xe9, 0x05, 0xfd, 0x30, 0xc8, 0xc5,
+ 0xd1, 0x90, 0xc1, 0xda, 0x07, 0x09, 0x14, 0x40, 0xf7, 0xe3, 0xd6, 0x32, 0xe0,
+ 0x0d, 0xda, 0x59, 0xf9, 0xf5, 0xd1, 0xff, 0xf9, 0xb8, 0x88, 0xfe, 0x34, 0xff,
+ 0xdd, 0xf3, 0x14, 0x30, 0x25, 0x1a, 0x14, 0x23, 0x51, 0xc3, 0xfa, 0x0c, 0x81,
+ 0x29, 0x24, 0x89, 0x18, 0x52, 0x44, 0xa0, 0x1a, 0xfd, 0xf3, 0xfa, 0x66, 0x1a,
+ 0x27, 0xd1, 0xd6, 0xa8, 0xcf, 0xf5, 0xbb, 0xeb, 0xd7, 0x1c, 0xcb, 0x71, 0xd1,
+ 0x10, 0xd9, 0x38, 0x40, 0x24, 0x0c, 0x2f, 0xed, 0x22, 0x1f, 0xd8, 0xdb, 0x5b,
+ 0xf5, 0xe2, 0x87, 0xf1, 0x04, 0xcb, 0xd6, 0x05, 0x17, 0xef, 0x4e, 0xe0, 0x8b,
+ 0xa5, 0x3a, 0xf0, 0xfc, 0xff, 0x62, 0x14, 0x18, 0xcb, 0xa1, 0x03, 0x1a, 0x0f,
+ 0x2b, 0x0a, 0x06, 0x27, 0x23, 0x1f, 0xf0, 0x50, 0xd7, 0x09, 0xb2, 0x05, 0xeb,
+ 0x42, 0x16, 0x43, 0xea, 0xb0, 0x08, 0x0f, 0x5a, 0x91, 0xdc, 0xdc, 0x54, 0xa6,
+ 0xc4, 0xdc, 0xed, 0x1d, 0xa3, 0x33, 0xf4, 0xff, 0xd8, 0xef, 0x10, 0xf3, 0x35,
+ 0xd0, 0x24, 0xff, 0x25, 0xf3, 0x07, 0xe9, 0xf7, 0x44, 0xf3, 0x03, 0x20, 0x09,
+ 0xc4, 0x48, 0x36, 0x69, 0x31, 0x29, 0xb2, 0xea, 0x0c, 0xc5, 0xbe, 0x09, 0x10,
+ 0xfd, 0xb7, 0x93, 0x1d, 0x1d, 0x04, 0xf4, 0x47, 0xea, 0x19, 0xcf, 0xd0, 0x1d,
+ 0xd3, 0x04, 0x1c, 0xf0, 0x66, 0x12, 0x03, 0xad, 0xcf, 0xc1, 0xdf, 0xb0, 0x08,
+ 0xee, 0xf6, 0xf1, 0xef, 0xcf, 0xfe, 0xfb, 0xe0, 0x06, 0x28, 0xc8, 0x10, 0xe5,
+ 0xac, 0xa3, 0xd4, 0xce, 0x22, 0xe6, 0xa8, 0x1c, 0x3b, 0x3b, 0x14, 0xe8, 0x0c,
+ 0xf4, 0xb3, 0xee, 0x1d, 0x92, 0x27, 0x57, 0x04, 0x27, 0xf3, 0x4c, 0xdb, 0xfa,
+ 0xf5, 0xc4, 0xd5, 0xc7, 0xdf, 0xf5, 0xd3, 0x14, 0xd4, 0xd6, 0xf3, 0x42, 0xed,
+ 0x15, 0xf1, 0xee, 0xd3, 0x5d, 0xed, 0xc6, 0x6b, 0x08, 0xd3, 0xdc, 0x88, 0xd4,
+ 0xe2, 0xf6, 0xc7, 0xfb, 0xd9, 0xf7, 0xc5, 0x2d, 0xd4, 0xec, 0xf8, 0xd6, 0x4a,
+ 0xff, 0xc6, 0x0a, 0xf7, 0xdc, 0xc3, 0xcf, 0x13, 0x0f, 0x01, 0xe6, 0x08, 0xfa,
+ 0xfd, 0x03, 0x07, 0xf4, 0x0d, 0xf5, 0x37, 0xc2, 0xc1, 0xf4, 0xf7, 0x2d, 0x01,
+ 0x2d, 0x15, 0xfc, 0xc5, 0x09, 0x3b, 0xf1, 0xac, 0x3c, 0x05, 0xe2, 0xd3, 0x17,
+ 0xfd, 0xd5, 0xe1, 0x2f, 0x13, 0x17, 0x1a, 0xec, 0xf0, 0xfb, 0xf0, 0xc3, 0x2c,
+ 0x01, 0x5b, 0xf5, 0x05, 0x31, 0x53, 0xc1, 0xc9, 0xf4, 0x1c, 0xef, 0xef, 0xd1,
+ 0x19, 0xf7, 0x06, 0x1d, 0x11, 0xdb, 0x04, 0x1d, 0xbc, 0xd1, 0xfb, 0x0c, 0x09,
+ 0x25, 0xf8, 0x33, 0x3c, 0x0c, 0x27, 0xf1, 0x12, 0xbd, 0x1d, 0xdf, 0x2e, 0x7f,
+ 0xde, 0x17, 0x03, 0xcf, 0xfd, 0x06, 0xf0, 0xe3, 0xe7, 0xfd, 0xc5, 0xfa, 0x1e,
+ 0xd0, 0x23, 0x32, 0x10, 0x14, 0x2d, 0xe7, 0x14, 0xf6, 0x19, 0xdb, 0x31, 0x14,
+ 0xe0, 0x02, 0xdc, 0x05, 0xf8, 0xf3, 0x0a, 0xe3, 0xe5, 0xbe, 0x17, 0xcf, 0x3a,
+ 0xc8, 0xd4, 0xc5, 0xdf, 0x10, 0xc1, 0xf7, 0xf0, 0xbd, 0xf7, 0xf1, 0xc3, 0xd3,
+ 0xb7, 0x17, 0xe0, 0x22, 0xe6, 0x38, 0xcc, 0x00, 0xba, 0xd0, 0x23, 0xfe, 0xe4,
+ 0x17, 0x1a, 0xed, 0x28, 0xee, 0x09, 0xee, 0x4e, 0xc8, 0xfa, 0x34, 0xf5, 0x32,
+ 0xe9, 0x1d, 0x14, 0x02, 0xf7, 0x23, 0xfb, 0xf7, 0x0a, 0x04, 0xf6, 0xde, 0x8e,
+ 0xdb, 0xe8, 0x4d, 0x1c, 0xf8, 0xf6, 0x03, 0x53, 0xf2, 0x11, 0xc1, 0xd6, 0xe3,
+ 0x28, 0xba, 0xde, 0xff, 0xcc, 0xd1, 0x68, 0xfb, 0xd5, 0xd9, 0xe7, 0xf8, 0xfe,
+ 0xec, 0x3e, 0xea, 0xc5, 0x01, 0xed, 0xe4, 0x2d, 0xd8, 0xd7, 0xd5, 0xed, 0x17,
+ 0xe9, 0x25, 0xfe, 0xdf, 0xcc, 0x01, 0xe3, 0x0c, 0xf9, 0xb7, 0xb8, 0xfc, 0xf7,
+ 0x89, 0x1c, 0x13, 0xab, 0x14, 0xc6, 0xde, 0x1d, 0xb0, 0x3c, 0xb0, 0x05, 0x04,
+ 0x0a, 0x18, 0x16, 0xff, 0xda, 0xf7, 0xe1, 0xe6, 0x17, 0xee, 0x4e, 0x9d, 0x45,
+ 0xd0, 0xf4, 0x3b, 0xe9, 0x0a, 0x14, 0xbe, 0x04, 0x23, 0x38, 0x0d, 0x2a, 0xf9,
+ 0xe9, 0x29, 0xee, 0xc4, 0xf8, 0x0c, 0xaa, 0x13, 0xb4, 0x4c, 0xe2, 0xf5, 0x26,
+ 0xf6, 0x0c, 0x26, 0x06, 0xdc, 0xf0, 0xde, 0xf1, 0xff, 0x1b, 0xb3, 0xd6, 0xf5,
+ 0xf2, 0x2d, 0xdc, 0x28, 0x45, 0x0e, 0x18, 0xfb, 0x27, 0xd2, 0x39, 0x0e, 0x9d,
+ 0x48, 0x2c, 0xd0, 0x06, 0x3c, 0x3a, 0x5b, 0xa6, 0xcf, 0xea, 0x7f, 0xcd, 0x31,
+ 0xe4, 0x1a, 0x1a, 0xf9, 0x05, 0xaa, 0xca, 0x11, 0xee, 0x40, 0xaf, 0xce, 0xc8,
+ 0x3b, 0x1a, 0x4c, 0xd8, 0x32, 0x37, 0xc9, 0xfb, 0x95, 0xf6, 0x05, 0xdc, 0xb5,
+ 0x1b, 0xf2, 0x4b, 0xf1, 0x03, 0x0b, 0x3b, 0x29, 0xd0, 0x24, 0x40, 0x2e, 0xdd,
+ 0xca, 0xc5, 0xfe, 0x07, 0x0b, 0xe8, 0x99, 0xc8, 0x09, 0xd8, 0xdd, 0x63, 0x50,
+ 0xf5, 0x3e, 0x47, 0xb9, 0xea, 0xf0, 0xed, 0x40, 0xfe, 0x4d, 0x0e, 0xce, 0xfc,
+ 0xed, 0xbf, 0xde, 0xeb, 0x01, 0x13, 0x01, 0xcd, 0x44, 0xdb, 0x3e, 0xc0, 0x07,
+ 0xc0, 0x39, 0x0d, 0xfb, 0xf2, 0x04, 0xa8, 0xbc, 0xf3, 0x2d, 0xc3, 0x3c, 0x01,
+ 0x41, 0x1b, 0x1a, 0xf0, 0x65, 0x14, 0x0c, 0xf5, 0x01, 0x5e, 0x04, 0xb4, 0xf8,
+ 0x3b, 0x19, 0x13, 0x19, 0xbe, 0xa0, 0x12, 0xe2, 0x0f, 0xab, 0xcf, 0xb0, 0xd5,
+ 0xf2, 0x12, 0xf0, 0x18, 0x1d, 0xa0, 0x07, 0xe1, 0xf6, 0x08, 0x08, 0x0a, 0x0f,
+ 0x57, 0x00, 0xd9, 0x1f, 0x88, 0xf5, 0x1f, 0xd7, 0x07, 0x1e, 0xe3, 0xe3, 0x00,
+ 0x12, 0xe4, 0x08, 0xf2, 0x11, 0x29, 0xd3, 0x98, 0xd0, 0xed, 0xd9, 0xe1, 0x24,
+ 0x43, 0xfa, 0xd3, 0x0e, 0xed, 0xc2, 0x20, 0xaf, 0xfc, 0xaf, 0x1b, 0xf9, 0xb8,
+ 0xbd, 0xb2, 0xac, 0xf1, 0x05, 0xf6, 0xc5, 0x2a, 0x16, 0xa0, 0x2d, 0xc9, 0x20,
+ 0xff, 0x16, 0x22, 0x06, 0xd5, 0xea, 0xf9, 0xa2, 0x1e, 0xe8, 0xb1, 0x1f, 0xd8,
+ 0xca, 0xc7, 0xf4, 0xa3, 0x24, 0x0b, 0xff, 0xdf, 0x03, 0x10, 0xd6, 0xf3, 0xcf,
+ 0xbe, 0x25, 0x18, 0x17, 0x41, 0x04, 0x01, 0x41, 0x40, 0xdf, 0xe8, 0xb3, 0x29,
+ 0x0f, 0x15, 0x64, 0xca, 0x1b, 0x2f, 0xf2, 0x04, 0xe4, 0xd3, 0x51, 0xf2, 0x48,
+ 0x33, 0x06, 0x27, 0xbc, 0x1e, 0x26, 0x0f, 0x10, 0xc5, 0xd3, 0x0a, 0xe2, 0xc1,
+ 0x3b, 0xd1, 0x9f, 0xed, 0xc4, 0xec, 0x45, 0xd4, 0x08, 0x1b, 0xf3, 0xf9, 0xf6,
+ 0xa4, 0xd0, 0xf8, 0xdd, 0xd7, 0x24, 0xf2, 0xc4, 0xf8, 0xe0, 0xe8, 0x1a, 0x13,
+ 0x3d, 0x07, 0x34, 0x1e, 0x98, 0x0b, 0x1a, 0xb8, 0xdc, 0xf3, 0x10, 0x79, 0xca,
+ 0xfe, 0x04, 0xf7, 0x44, 0xb0, 0x27, 0x31, 0x23, 0xf2, 0xed, 0x14, 0xd2, 0xe1,
+ 0xf8, 0xfe, 0xf7, 0xf6, 0x9e, 0xf8, 0xe5, 0xe4, 0x35, 0xe4, 0x24, 0xc7, 0x84,
+ 0xf4, 0xe6, 0x3a, 0x01, 0xcc, 0xc5, 0xe5, 0xd5, 0xd9, 0x02, 0x3f, 0x05, 0xef,
+ 0x42, 0xba, 0x23, 0xdd, 0x13, 0x37, 0x42, 0xce, 0xff, 0xd1, 0xfe, 0xe8, 0x28,
+ 0xd5, 0xc2, 0x14, 0xe2, 0x17, 0xbf, 0x10, 0x0a, 0xe9, 0x0f, 0xdd, 0x7f, 0x44,
+ 0x58, 0xe3, 0x28, 0xdf, 0x49, 0x3f, 0xe2, 0xd4, 0x2d, 0x2f, 0x07, 0xc1, 0x22,
+ 0xf3, 0xc2, 0x00, 0xda, 0x99, 0xff, 0xea, 0xb5, 0xf4, 0x35, 0xbe, 0xf1, 0xf3,
+ 0x12, 0xf2, 0x1e, 0x2e, 0xfd, 0xf0, 0xb2, 0xcf, 0xf7, 0xb4, 0x3f, 0x8a, 0xd8,
+ 0xd4, 0xe8, 0xf4, 0x14, 0xc6, 0x08, 0xf8, 0xf4, 0x0b, 0xdd, 0xf1, 0xef, 0x07,
+ 0x07, 0xf5, 0x08, 0x15, 0xe0, 0xdd, 0x37, 0x01, 0xf8, 0xcd, 0xac, 0x19, 0x2e,
+ 0xd5, 0x14, 0x1f, 0xaa, 0x15, 0x0d, 0x29, 0x1b, 0x28, 0xd2, 0xe0, 0xe6, 0x19,
+ 0x29, 0xd7, 0x16, 0x1e, 0x1c, 0x5b, 0x40, 0x2e, 0x18, 0x36, 0x02, 0x07, 0x58,
+ 0x31, 0x81, 0xb7, 0x20, 0xd4, 0x01, 0xe2, 0xaf, 0x44, 0xfd, 0x38, 0x98, 0x46,
+ 0xa7, 0x50, 0xf4, 0xe0, 0x31, 0xf4, 0xd9, 0x24, 0x26, 0x17, 0x59, 0x30, 0xaa,
+ 0xc3, 0xf5, 0xf2, 0xf2, 0xe6, 0x32, 0xfe, 0x45, 0x38, 0xa1, 0xc8, 0xee, 0xf2,
+ 0xce, 0x10, 0xc5, 0x0f, 0xc1, 0xcf, 0x08, 0xd9, 0x3b, 0x2a, 0xb8, 0x3b, 0x0d,
+ 0xff, 0x3d, 0x08, 0x12, 0x37, 0xed, 0xae, 0x1d, 0x0d, 0xd3, 0xa8, 0x0c, 0x19,
+ 0xa6, 0x1a, 0x07, 0xe5, 0xdc, 0xf2, 0xd6, 0x67, 0x1d, 0xed, 0x44, 0xe3, 0x1e,
+ 0xf5, 0xcf, 0x06, 0xfa, 0xff, 0xc3, 0x26, 0xe0, 0xe2, 0xd2, 0xf5, 0x01, 0x38,
+ 0xf8, 0x20, 0x47, 0xc9, 0xfe, 0x2f, 0xb0, 0xcc, 0xf2, 0x22, 0x60, 0x95, 0x0f,
+ 0x26, 0xa1, 0x00, 0xdd, 0xfc, 0xf2, 0xff, 0xd1, 0x0e, 0xe5, 0x08, 0xc6, 0xdc,
+ 0x1a, 0xec, 0x35, 0xdc, 0xe5, 0x01, 0xba, 0xdb, 0xf3, 0xde, 0x07, 0x26, 0x0b,
+ 0xf0, 0x02, 0x10, 0x08, 0xe1, 0x1b, 0x0c, 0xac, 0xc9, 0xfb, 0xef, 0xd8, 0x92,
+ 0x07, 0x1b, 0x38, 0xf3, 0xdc, 0xb6, 0xc4, 0xe5, 0x13, 0xc0, 0xc4, 0x3e, 0xd3,
+ 0xdd, 0xf0, 0xdd, 0xdc, 0x01, 0x1a, 0xd6, 0x15, 0x9a, 0x19, 0x19, 0xe7, 0x32,
+ 0xb3, 0x0a, 0xe4, 0x04, 0xc9, 0x1b, 0x05, 0xf9, 0xdd, 0xd7, 0xf0, 0x09, 0x02,
+ 0xb1, 0xaf, 0xad, 0xca, 0xfd, 0x10, 0x90, 0x1b, 0xc8, 0x37, 0x05, 0xcf, 0xb2,
+ 0x97, 0xec, 0xf4, 0x38, 0xd6, 0xeb, 0xe2, 0xf0, 0x0c, 0x53, 0x1e, 0xec, 0xbc,
+ 0x2d, 0x27, 0xa9, 0xec, 0xe1, 0xff, 0x8a, 0xe0, 0xf9, 0x07, 0xcc, 0xda, 0xd6,
+ 0xdf, 0x00, 0xec, 0xef, 0x01, 0x0d, 0x00, 0xed, 0xe8, 0xe6, 0xd4, 0x12, 0x0f,
+ 0xfa, 0xcb, 0xfe, 0x31, 0xdc, 0x30, 0xce, 0x17, 0x02, 0xd0, 0xf1, 0xe2, 0xfb,
+ 0xff, 0xe3, 0x14, 0xf7, 0x0c, 0x07, 0x1f, 0xf4, 0xd4, 0xd2, 0xf4, 0x11, 0x06,
+ 0x1d, 0x05, 0xd6, 0x37, 0xeb, 0x10, 0xd9, 0xfa, 0xd4, 0xfe, 0x6d, 0x18, 0xf8,
+ 0xf9, 0x23, 0xcc, 0x35, 0xce, 0x07, 0xeb, 0xf2, 0xf6, 0x1e, 0x12, 0x06, 0x0e,
+ 0x07, 0x05, 0xe9, 0x01, 0x06, 0x36, 0xfb, 0x4c, 0xd9, 0x07, 0xd7, 0x22, 0xc9,
+ 0xcd, 0xff, 0x0a, 0x07, 0xfa, 0x3d, 0xd4, 0x08, 0xbd, 0xf1, 0x01, 0x06, 0xd8,
+ 0xdf, 0x07, 0x0f, 0xeb, 0xe7, 0x7b, 0xf2, 0xd7, 0xdd, 0xf0, 0xf3, 0x1e, 0x15,
+ 0x1d, 0xf9, 0xf1, 0xf1, 0x1f, 0xd1, 0xc5, 0xe7, 0xea, 0xcb, 0xe9, 0xd1, 0xed,
+ 0xf3, 0x14, 0x05, 0xee, 0x1f, 0x46, 0xf9, 0xeb, 0x1e, 0xc3, 0xea, 0x03, 0x10,
+ 0xc2, 0xe0, 0xbe, 0x13, 0xe3, 0x0e, 0xe4, 0xdd, 0x54, 0x12, 0x16, 0x07, 0x1e,
+ 0x04, 0x2d, 0x19, 0xf7, 0xf2, 0x12, 0xed, 0x1a, 0xda, 0x21, 0xf6, 0xfd, 0x11,
+ 0xeb, 0x02, 0xfe, 0x04, 0xef, 0xe3, 0x07, 0xf9, 0x33, 0xf0, 0xe6, 0xfc, 0x1f,
+ 0x0d, 0x2f, 0x02, 0x12, 0x2c, 0x22, 0x00, 0x1e, 0x01, 0x1c, 0xf7, 0x00, 0xdd,
+ 0xf3, 0x03, 0xf3, 0x0b, 0x02, 0xf3, 0xc5, 0x13, 0xd8, 0x1f, 0xf7, 0xe2, 0xf5,
+ 0x13, 0xfe, 0xd3, 0x22, 0xfa, 0x16, 0x07, 0x01, 0x05, 0x1e, 0xf3, 0xfd, 0xcd,
+ 0x14, 0x7f, 0x25, 0xf8, 0x50, 0xec, 0xcc, 0xef, 0xea, 0xda, 0xeb, 0x1f, 0xfa,
+ 0xe5, 0x12, 0xd1, 0x0f, 0xec, 0xc6, 0xd8, 0x36, 0x14, 0x16, 0x13, 0x03, 0xf8,
+ 0x04, 0xf8, 0xf6, 0xae, 0xe3, 0xeb, 0x05, 0xd3, 0x01, 0xf4, 0xf0, 0x07, 0xf7,
+ 0x2a, 0xd2, 0xf4, 0xe7, 0xee, 0x0a, 0xf9, 0x38, 0x47, 0xab, 0xc3, 0xad, 0xd0,
+ 0xc9, 0xb8, 0xc6, 0xd7, 0xdd, 0xfb, 0xe3, 0x28, 0xcf, 0xb6, 0xfb, 0x0d, 0x11,
+ 0x05, 0xd1, 0xdb, 0xf2, 0xe9, 0xf1, 0x1f, 0xf4, 0xe4, 0xfa, 0xe3, 0xeb, 0xc2,
+ 0x87, 0xef, 0xf8, 0x1d, 0xec, 0x08, 0x41, 0xaf, 0xff, 0xee, 0x1a, 0x13, 0x00,
+ 0xed, 0x2b, 0x1f, 0x00, 0x3a, 0xd1, 0x12, 0x0b, 0xfe, 0xff, 0xf8, 0x13, 0x77,
+ 0x17, 0x35, 0x90, 0xe0, 0x0c, 0x06, 0x62, 0x11, 0x68, 0xad, 0x17, 0xd2, 0x1e,
+ 0x06, 0xd8, 0xe8, 0x11, 0xf5, 0x14, 0xf1, 0xd0, 0xbd, 0xcb, 0xfd, 0x17, 0x81,
+ 0xeb, 0xcd, 0xc1, 0x01, 0xda, 0xae, 0x15, 0xd1, 0x58, 0xe3, 0x5e, 0x07, 0xa0,
+ 0xf1, 0xf6, 0x05, 0x03, 0xd9, 0xc2, 0xe5, 0xb7, 0xeb, 0xfc, 0xc1, 0xe5, 0x0e,
+ 0x0e, 0xc0, 0xd4, 0xc1, 0x0e, 0x1b, 0x1d, 0xf7, 0xe8, 0x07, 0xca, 0xd9, 0xf7,
+ 0xcb, 0x1a, 0xea, 0xd5, 0xec, 0x0f, 0xe1, 0xfb, 0xc0, 0xd5, 0xe7, 0xe8, 0x2f,
+ 0x06, 0xc2, 0xc8, 0x0d, 0xd6, 0xe9, 0xb3, 0x11, 0x14, 0xd4, 0x2a, 0xb6, 0x00,
+ 0x11, 0xbf, 0x1a, 0xb4, 0xfc, 0x37, 0xc8, 0xc4, 0xba, 0xab, 0x4f, 0x24, 0xcd,
+ 0x17, 0x29, 0xca, 0xc4, 0xcf, 0x31, 0xe7, 0xe7, 0x24, 0xe4, 0x19, 0xe6, 0xdf,
+ 0xe1, 0xeb, 0x2d, 0x09, 0xfa, 0xe4, 0xbd, 0xea, 0x03, 0x51, 0xff, 0x13, 0xbd,
+ 0xb2, 0x1e, 0x2b, 0xd0, 0xcd, 0xe9, 0x1e, 0x0b, 0x09, 0x1f, 0xd0, 0x2f, 0x0e,
+ 0x07, 0x1a, 0xd5, 0x09, 0x17, 0xbf, 0xc6, 0x23, 0xcf, 0x0d, 0x21, 0x90, 0x25,
+ 0x0b, 0x06, 0x12, 0xbd, 0xaf, 0x24, 0xd8, 0x1c, 0x08, 0x1f, 0x27, 0x0f, 0xf5,
+ 0x1d, 0xfa, 0xcc, 0x30, 0x27, 0xdf, 0xe2, 0x35, 0x0d, 0xce, 0xfb, 0x0f, 0x2f,
+ 0xf7, 0x9e, 0x38, 0xec, 0xf8, 0xde, 0xed, 0xf7, 0xfa, 0xf8, 0x51, 0xdc, 0x10,
+ 0x07, 0xe0, 0x16, 0xf1, 0xc8, 0xfa, 0x18, 0x29, 0x14, 0xce, 0xeb, 0xff, 0x04,
+ 0xde, 0xf0, 0x03, 0x9d, 0xf5, 0x92, 0x2a, 0x29, 0xe5, 0xe0, 0x1c, 0xf5, 0x21,
+ 0x67, 0x0a, 0x23, 0xed, 0x13, 0xd2, 0x28, 0x23, 0xe7, 0xbd, 0xf9, 0xfd, 0x10,
+ 0x3b, 0x14, 0xe5, 0x0d, 0x07, 0x31, 0x8c, 0x13, 0xfa, 0x49, 0x9a, 0xf8, 0x0e,
+ 0x22, 0xd3, 0xd6, 0xe4, 0x46, 0x01, 0x18, 0xfe, 0x0d, 0xd9, 0x21, 0x14, 0x1f,
+ 0xde, 0x90, 0xce, 0xfb, 0xe9, 0xf0, 0x18, 0xfb, 0xdc, 0x28, 0x02, 0xfc, 0x0b,
+ 0x06, 0xf6, 0xf1, 0x96, 0x15, 0x45, 0xc6, 0xd6, 0x12, 0x3f, 0xf6, 0xeb, 0xd8,
+ 0xda, 0xf4, 0x35, 0x18, 0xce, 0xc3, 0xeb, 0xa1, 0x93, 0x34, 0xf9, 0x14, 0x81,
+ 0x25, 0xdf, 0x2a, 0xe5, 0xd2, 0x1c, 0x24, 0xe4, 0x29, 0x28, 0xe8, 0xdc, 0x11,
+ 0xc3, 0xe8, 0x10, 0xee, 0xb8, 0xf8, 0xd0, 0x2d, 0xf0, 0x4a, 0x92, 0x2d, 0x01,
+ 0xf0, 0xd0, 0xf2, 0xce, 0x0f, 0x18, 0xe5, 0xbc, 0xbc, 0x2e, 0x48, 0xf9, 0xeb,
+ 0x35, 0x95, 0x2f, 0xef, 0xd9, 0x1e, 0xe3, 0x22, 0xca, 0xd5, 0x13, 0x31, 0xcc,
+ 0xa5, 0xbf, 0xaf, 0xf4, 0xdb, 0x2f, 0x50, 0x0b, 0x2d, 0x07, 0x3f, 0x54, 0x1a,
+ 0x31, 0xf5, 0x1a, 0xf8, 0xdc, 0xee, 0xe2, 0x20, 0xcb, 0x08, 0x01, 0xfe, 0xae,
+ 0xd5, 0x30, 0xec, 0xc2, 0xbd, 0xd0, 0x3f, 0xdd, 0x29, 0x14, 0xf2, 0x3d, 0xf0,
+ 0xe2, 0x1e, 0xfe, 0xaa, 0x20, 0x05, 0x09, 0xea, 0x2a, 0xfb, 0xee, 0xd8, 0x07,
+ 0xe8, 0x3a, 0xf0, 0x36, 0xed, 0xda, 0x1a, 0x17, 0x0c, 0x90, 0x0b, 0x07, 0x17,
+ 0xcc, 0xaa, 0x57, 0xda, 0xff, 0x37, 0x14, 0xf6, 0x4a, 0xd8, 0xe8, 0x3d, 0xef,
+ 0x0c, 0x87, 0x35, 0xb3, 0x01, 0x43, 0xfb, 0x19, 0x02, 0xd6, 0x4e, 0x02, 0x37,
+ 0x01, 0x04, 0x23, 0xb9, 0xcc, 0x83, 0x4d, 0xe6, 0xe4, 0xf1, 0x4d, 0xd1, 0xf5,
+ 0xd1, 0xcf, 0xe3, 0x0f, 0xd5, 0x05, 0x1c, 0xd8, 0x03, 0x2e, 0xf3, 0xd6, 0xfb,
+ 0x15, 0x09, 0xdd, 0xc2, 0xd6, 0x0b, 0x24, 0xe2, 0x1d, 0xc1, 0xdd, 0xfa, 0xee,
+ 0xc5, 0x30, 0xda, 0x15, 0xe3, 0xf5, 0x28, 0x12, 0xeb, 0xce, 0x96, 0xd4, 0x47,
+ 0x1d, 0x10, 0xc3, 0xd6, 0x00, 0xf5, 0xf7, 0xd5, 0x10, 0xe3, 0x0d, 0xd8, 0x08,
+ 0xee, 0x28, 0x0a, 0x23, 0xa6, 0x0f, 0xdf, 0x11, 0x3a, 0x1d, 0x25, 0x17, 0x4a,
+ 0x43, 0xea, 0xef, 0xfd, 0xcb, 0xfb, 0xce, 0x16, 0x19, 0x03, 0xf6, 0x47, 0xdf,
+ 0xd5, 0xd1, 0x08, 0x0a, 0xe8, 0x06, 0x11, 0x30, 0xdf, 0xdb, 0x14, 0x19, 0x1e,
+ 0x7f, 0xb2, 0xe7, 0x11, 0xe1, 0xfc, 0xf4, 0xf9, 0xdd, 0x09, 0x1e, 0xfa, 0xf0,
+ 0xee, 0xd4, 0xec, 0x0e, 0xb4, 0xe0, 0xea, 0x32, 0xbc, 0xff, 0xcb, 0x15, 0x4d,
+ 0x3e, 0xd5, 0x05, 0x12, 0x0c, 0x37, 0x91, 0xe3, 0x2d, 0x10, 0xdb, 0xe1, 0x40,
+ 0xf7, 0xf2, 0xf3, 0x11, 0x70, 0x07, 0x10, 0xe7, 0xcd, 0xd1, 0x05, 0x0e, 0x9f,
+ 0xc9, 0x1d, 0xf5, 0xf6, 0xe6, 0xfb, 0xe7, 0x2a, 0xde, 0x08, 0xff, 0xc5, 0xd0,
+ 0xd4, 0x1e, 0xe8, 0xe1, 0xd7, 0x9e, 0x0a, 0xd7, 0x5f, 0xf5, 0xec, 0xd7, 0xe5,
+ 0x2e, 0xea, 0xd6, 0x0f, 0xea, 0xe7, 0xd9, 0xf3, 0x0f, 0xbe, 0x1a, 0xea, 0xdf,
+ 0xce, 0xe0, 0xe3, 0xe7, 0x12, 0x02, 0x16, 0xff, 0x2e, 0xe2, 0x39, 0x56, 0xb8,
+ 0xdb, 0x24, 0xfe, 0x0f, 0x26, 0xda, 0x33, 0xe9, 0x19, 0xee, 0x0f, 0x2a, 0xe8,
+ 0xdf, 0x1e, 0xff, 0xb6, 0xed, 0x24, 0xa7, 0x54, 0x05, 0xfe, 0x0f, 0xc1, 0xfe,
+ 0x09, 0xc7, 0x10, 0x1c, 0xe5, 0xfb, 0x24, 0xf9, 0x1d, 0x31, 0xe0, 0xca, 0x16,
+ 0xec, 0xe9, 0x09, 0x55, 0xc1, 0xbf, 0xfc, 0x05, 0xf4, 0xf2, 0xe1, 0xe9, 0x01,
+ 0xf7, 0x47, 0x3d, 0x1f, 0xcc, 0x28, 0x00, 0xc9, 0xfc, 0xec, 0x41, 0xce, 0x41,
+ 0xf7, 0xc9, 0xd0, 0x12, 0x0a, 0x14, 0xff, 0x34, 0xd9, 0xe7, 0xe2, 0xea, 0x1b,
+ 0x24, 0x0f, 0xdc, 0x2b, 0x0b, 0xbb, 0xb4, 0x02, 0x18, 0x2c, 0xef, 0xe6, 0x0b,
+ 0xfd, 0xe1, 0xa6, 0x21, 0x81, 0xcd, 0x1a, 0xfc, 0xe1, 0x51, 0xfb, 0xf8, 0xbd,
+ 0x25, 0xcc, 0xce, 0x48, 0xdd, 0x27, 0xe4, 0xfc, 0x1a, 0xc0, 0xd5, 0x1b, 0x26,
+ 0x40, 0x24, 0xf0, 0xcf, 0x45, 0xe7, 0x0d, 0xbf, 0xae, 0xbc, 0xa9, 0xc1, 0xba,
+ 0xea, 0xdc, 0xdc, 0xca, 0xd3, 0x2e, 0xae, 0x68, 0x3a, 0x07, 0xe6, 0x1a, 0x10,
+ 0xe8, 0xd4, 0xc0, 0xbf, 0x70, 0xee, 0x2a, 0x1a, 0xd7, 0x4c, 0xb9, 0xdb, 0xa5,
+ 0x16, 0xee, 0x01, 0x07, 0xe9, 0x14, 0xd0, 0xc1, 0xff, 0xd4, 0x11, 0x46, 0xf5,
+ 0xe7, 0x06, 0x9c, 0xb3, 0x85, 0xcd, 0x14, 0xc3, 0xf2, 0xca, 0x35, 0xaa, 0xd5,
+ 0x66, 0xcf, 0xe6, 0xf1, 0xc7, 0xf2, 0x13, 0x28, 0xf3, 0x04, 0x27, 0x13, 0xff,
+ 0xef, 0x24, 0x10, 0xaa, 0x62, 0x0a, 0x9b, 0x11, 0x23, 0x04, 0xca, 0xdc, 0xf0,
+ 0xf3, 0xd0, 0x0c, 0x1f, 0xd0, 0x47, 0x03, 0xd6, 0xd3, 0x9b, 0x33, 0x1f, 0x1a,
+ 0xcf, 0xa9, 0x06, 0xe9, 0x3e, 0xf8, 0xf4, 0xf9, 0x38, 0x20, 0xff, 0x30, 0xdd,
+ 0xc5, 0xcb, 0xfe, 0x22, 0xe4, 0xfa, 0x13, 0x07, 0x2b, 0xfa, 0x38, 0x38, 0x32,
+ 0xb8, 0x0e, 0x33, 0x12, 0x06, 0x83, 0x02, 0x15, 0x16, 0xb3, 0xbe, 0xa6, 0xd4,
+ 0x11, 0x11, 0x42, 0xce, 0x06, 0xad, 0x13, 0xec, 0xf3, 0xd6, 0xf3, 0xf6, 0xe0,
+ 0xb5, 0xc2, 0xcf, 0xeb, 0xc0, 0x2b, 0xde, 0xcd, 0xff, 0xda, 0xfd, 0xed, 0x01,
+ 0xc6, 0xd1, 0x02, 0x83, 0xef, 0xeb, 0xdb, 0x00, 0xe2, 0xa6, 0x1e, 0xb9, 0xd1,
+ 0xe6, 0xe4, 0xd2, 0xa5, 0xea, 0xf6, 0xc5, 0x07, 0x26, 0x09, 0xfb, 0xef, 0xbc,
+ 0xb8, 0xcf, 0x19, 0xc1, 0x37, 0xf9, 0xb6, 0xd2, 0xa6, 0x24, 0xdf, 0xcf, 0xfc,
+ 0xac, 0xf6, 0xd5, 0x2d, 0x09, 0x1a, 0x1b, 0x10, 0xed, 0x09, 0xf4, 0xee, 0xfc,
+ 0xb0, 0x1b, 0xe4, 0x28, 0xed, 0xec, 0xcb, 0xc7, 0xf0, 0xd7, 0x4b, 0xda, 0x02,
+ 0x1e, 0x31, 0x03, 0xb7, 0xe7, 0xe6, 0xcf, 0xf1, 0x13, 0xf9, 0x9c, 0x0d, 0x20,
+ 0xe1, 0x6c, 0xf6, 0xe8, 0x53, 0x6e, 0x03, 0xf9, 0x04, 0x17, 0x1d, 0x01, 0xe7,
+ 0xee, 0xcb, 0xc1, 0x09, 0x0c, 0x19, 0xf1, 0x21, 0xe3, 0xdd, 0x1f, 0xea, 0xef,
+ 0x15, 0xdb, 0x1b, 0xf4, 0x38, 0x3d, 0x04, 0x3e, 0x21, 0xf4, 0xff, 0xe3, 0xe1,
+ 0xed, 0x4b, 0x07, 0xfc, 0x00, 0xfe, 0x22, 0x2f, 0x07, 0x32, 0xea, 0xd9, 0xcb,
+ 0xf7, 0xfd, 0xf7, 0xb0, 0x09, 0xed, 0xe1, 0xfc, 0x2b, 0x35, 0xf2, 0x08, 0xfd,
+ 0x0c, 0x4b, 0x07, 0xd1, 0x39, 0xdf, 0xf0, 0x2b, 0xd3, 0x06, 0xd0, 0xd6, 0xde,
+ 0xef, 0x08, 0x0f, 0x18, 0xa1, 0xed, 0xe9, 0xff, 0xf5, 0xf4, 0xd0, 0xba, 0x57,
+ 0xc5, 0xe9, 0xd1, 0xe9, 0x22, 0x14, 0xfd, 0x04, 0xec, 0x0f, 0xfb, 0xe9, 0xdd,
+ 0xd2, 0xc4, 0xe2, 0xde, 0xfd, 0x0d, 0xf8, 0x6f, 0xf9, 0xf8, 0x02, 0xd6, 0xb6,
+ 0xf1, 0xeb, 0xe5, 0xf9, 0x0b, 0xe7, 0x48, 0x11, 0x02, 0x3d, 0xf4, 0x2c, 0xf4,
+ 0xf8, 0x49, 0xf3, 0xf1, 0x06, 0xf6, 0x3b, 0xe1, 0xd3, 0xdb, 0xc5, 0xb3, 0xee,
+ 0x54, 0x33, 0x04, 0xdf, 0x4f, 0x5e, 0xfe, 0x49, 0xf0, 0x17, 0xa7, 0xe8, 0x0b,
+ 0xe3, 0x3c, 0xed, 0x25, 0x03, 0xfc, 0x17, 0x09, 0xf0, 0xe3, 0x12, 0xf5, 0xe1,
+ 0xd7, 0x1a, 0x1d, 0xfe, 0x11, 0xf2, 0x11, 0x06, 0xca, 0x13, 0xdb, 0xed, 0xe7,
+ 0x22, 0x24, 0x1d, 0xed, 0xdb, 0x11, 0x13, 0xfe, 0x15, 0x0c, 0xf8, 0xc6, 0xf5,
+ 0x16, 0x99, 0xe5, 0xf3, 0x09, 0x22, 0x42, 0x3d, 0x0c, 0x7f, 0xe2, 0xfc, 0x14,
+ 0xda, 0xeb, 0x01, 0xf4, 0x0c, 0x0d, 0x03, 0x22, 0x04, 0x04, 0xed, 0xef, 0xda,
+ 0x1c, 0xd4, 0xe2, 0xd9, 0xf2, 0x24, 0xde, 0x11, 0xef, 0x11, 0xf9, 0xf4, 0xff,
+ 0xd3, 0xee, 0x0e, 0xe5, 0x08, 0x0e, 0xe3, 0x17, 0x05, 0xfd, 0xde, 0xf9, 0xfc,
+ 0x09, 0xe5, 0x21, 0xce, 0xe2, 0x26, 0xfa, 0x23, 0xec, 0x04, 0x02, 0x09, 0x41,
+ 0x20, 0x0e, 0x1e, 0xf2, 0xf0, 0x12, 0x08, 0x08, 0x04, 0x00, 0xf8, 0xe0, 0x0b,
+ 0xe3, 0xf5, 0x15, 0xfa, 0xf9, 0x1d, 0x1e, 0x02, 0xf6, 0x44, 0xe6, 0xe3, 0xce,
+ 0xf6, 0xd4, 0xc8, 0xf5, 0x27, 0x29, 0xfd, 0x3f, 0x08, 0x0b, 0xe4, 0x17, 0xf9,
+ 0x11, 0xd5, 0xee, 0x2f, 0x13, 0xce, 0xd2, 0x34, 0x00, 0xed, 0xe0, 0xf5, 0xf8,
+ 0x38, 0x0a, 0x15, 0xf6, 0xde, 0xfd, 0x0d, 0xe5, 0xe0, 0xe4, 0x0f, 0xe1, 0xe7,
+ 0xd8, 0xfd, 0xf6, 0x15, 0x0f, 0xf9, 0x00, 0x49, 0x06, 0xd2, 0x04, 0xc8, 0xed,
+ 0xfc, 0x18, 0xf1, 0xef, 0xf6, 0x2a, 0xe7, 0x04, 0xeb, 0xe5, 0x51, 0x20, 0x1c,
+ 0x08, 0xed, 0xfb, 0xfd, 0x33, 0xf8, 0xfb, 0xf9, 0x15, 0xfa, 0xf6, 0xf6, 0x04,
+ 0xdf, 0x1d, 0xfd, 0xf0, 0x19, 0xf0, 0xfa, 0x0f, 0x0e, 0x1b, 0x22, 0x12, 0xeb,
+ 0x02, 0xf5, 0xde, 0x12, 0x07, 0x07, 0x24, 0x38, 0xf6, 0xef, 0xe5, 0x21, 0xe8,
+ 0xe6, 0xce, 0xe1, 0xf8, 0x00, 0x24, 0xe5, 0xe5, 0xdf, 0x0d, 0xf6, 0xfc, 0x19,
+ 0xfb, 0x15, 0xe8, 0xf9, 0xfa, 0x32, 0x04, 0x0e, 0x02, 0x06, 0x07, 0xf6, 0xfc,
+ 0xef, 0x01, 0x1f, 0x7f, 0x1f, 0xe8, 0xfd, 0x0e, 0xe6, 0x0c, 0xf9, 0xe0, 0xe4,
+ 0xef, 0xe7, 0xeb, 0xed, 0xf4, 0x08, 0xe8, 0xda, 0xd1, 0x16, 0x11, 0x04, 0x00,
+ 0x16, 0xf6, 0x19, 0xf9, 0xf0, 0xc6, 0xf0, 0xff, 0xff, 0xf1, 0x17, 0xf1, 0xf6,
+ 0xde, 0xf5, 0x10, 0xbc, 0xe7, 0xdc, 0x21, 0x09, 0xec, 0xc0, 0xea, 0x93, 0xaf,
+ 0xc2, 0x0a, 0x9c, 0xdf, 0xe9, 0x15, 0x93, 0xbc, 0x1f, 0x94, 0xaf, 0x0c, 0xe2,
+ 0x4d, 0xe1, 0x1a, 0x0d, 0xd9, 0xd2, 0xf8, 0xd1, 0xe5, 0xf1, 0x1c, 0xc5, 0xc3,
+ 0x96, 0xc2, 0x05, 0xbe, 0x1f, 0xee, 0xee, 0x02, 0xac, 0xd3, 0x3c, 0x10, 0xe0,
+ 0x51, 0x08, 0xdd, 0x19, 0x3e, 0xde, 0xd5, 0xb6, 0xf2, 0xf3, 0xf1, 0xf1, 0x92,
+ 0x1c, 0x12, 0x59, 0x63, 0x3e, 0x34, 0xc6, 0xc6, 0xaf, 0x24, 0xf8, 0x23, 0x45,
+ 0x22, 0x30, 0xde, 0x2b, 0xeb, 0xea, 0xe5, 0x13, 0x0d, 0xbd, 0xac, 0xb4, 0xc3,
+ 0x4a, 0x58, 0xd7, 0x6c, 0xd3, 0xcd, 0x0a, 0xb8, 0xe7, 0x33, 0xd8, 0xce, 0xfa,
+ 0xc1, 0x05, 0xe8, 0x3d, 0xf4, 0xa1, 0x14, 0xe0, 0xf3, 0xb4, 0xf8, 0x12, 0xf3,
+ 0xa3, 0x26, 0x50, 0xd4, 0xf5, 0xb4, 0xed, 0x09, 0xda, 0xfc, 0xbc, 0xd0, 0xa8,
+ 0x0a, 0x11, 0xe6, 0xed, 0xfb, 0xf7, 0x30, 0xab, 0x00, 0x81, 0x33, 0x16, 0x47,
+ 0xee, 0x01, 0x0d, 0x14, 0x14, 0x17, 0xe7, 0xc0, 0xd0, 0xc8, 0x1c, 0x2c, 0x15,
+ 0xab, 0x4b, 0xb3, 0xdf, 0xd5, 0x6d, 0xe1, 0xb7, 0xa5, 0x56, 0xfa, 0x2a, 0xb3,
+ 0x06, 0xae, 0x33, 0xf5, 0xde, 0xe1, 0x03, 0x25, 0x13, 0xb8, 0xda, 0xcf, 0xfe,
+ 0x4c, 0x85, 0x97, 0x1d, 0xd1, 0xd6, 0xba, 0xd2, 0x11, 0xe2, 0x20, 0xe2, 0xb1,
+ 0xf9, 0x15, 0x08, 0xfa, 0x27, 0xfc, 0x9e, 0xc0, 0xb6, 0x3a, 0xdf, 0x60, 0xcd,
+ 0x16, 0xec, 0x3c, 0xb4, 0xda, 0xd3, 0x64, 0xca, 0xf7, 0x3d, 0x10, 0x9a, 0x46,
+ 0xdd, 0x52, 0x38, 0xda, 0xe0, 0xd6, 0xc7, 0xeb, 0xf6, 0x11, 0x1a, 0x57, 0x37,
+ 0x1e, 0x4e, 0xf9, 0xdd, 0xea, 0xc1, 0x25, 0xd9, 0xf1, 0x04, 0x12, 0x30, 0xed,
+ 0x08, 0x01, 0x0f, 0xa7, 0x00, 0xe3, 0x93, 0x5a, 0x10, 0xca, 0xd3, 0xca, 0x0f,
+ 0x1f, 0xc8, 0xe9, 0x1b, 0x95, 0xd3, 0xe3, 0x04, 0xed, 0x06, 0xf7, 0x03, 0x22,
+ 0x06, 0x0e, 0xda, 0xee, 0xed, 0x49, 0xca, 0xe0, 0xa3, 0xf4, 0xfb, 0xe2, 0x35,
+ 0xa2, 0x11, 0xca, 0x14, 0xf2, 0xec, 0x23, 0x31, 0xba, 0x01, 0x10, 0x0e, 0x66,
+ 0x15, 0x0f, 0x18, 0x20, 0xe0, 0x20, 0x07, 0x0e, 0xb4, 0xf3, 0x1f, 0xd4, 0x12,
+ 0xb1, 0x2f, 0xaa, 0xed, 0xf9, 0x2c, 0xdb, 0x1f, 0x26, 0xe4, 0x48, 0xf2, 0x0c,
+ 0x3b, 0xd1, 0x20, 0xb8, 0x15, 0xc5, 0xda, 0x11, 0xf4, 0xfd, 0x04, 0xef, 0x2f,
+ 0x26, 0x25, 0xd7, 0xfe, 0xd6, 0x02, 0xd4, 0xdd, 0xd5, 0x37, 0x08, 0x07, 0xb6,
+ 0x01, 0x16, 0xe7, 0x16, 0x10, 0x1c, 0xf2, 0xbb, 0xfc, 0x77, 0x01, 0xc2, 0x31,
+ 0xe8, 0xdb, 0xfb, 0xd8, 0xe0, 0x50, 0x1e, 0x47, 0xe4, 0x02, 0x1c, 0x15, 0x10,
+ 0xba, 0xf0, 0xcc, 0x22, 0xc3, 0xb8, 0xd0, 0xd3, 0x0e, 0x00, 0xb7, 0x13, 0x7b,
+ 0xf8, 0xf7, 0xfe, 0xf4, 0x0d, 0xd1, 0x25, 0xec, 0xd2, 0xbc, 0x2c, 0xe5, 0x43,
+ 0x22, 0x09, 0x0e, 0xce, 0xe1, 0xfe, 0x08, 0xf3, 0x0c, 0x09, 0x22, 0x03, 0xce,
+ 0x0e, 0xd9, 0x2e, 0x2c, 0xfb, 0xf4, 0x16, 0xe9, 0xfa, 0xd5, 0xeb, 0xe6, 0x22,
+ 0x38, 0x02, 0x59, 0x23, 0xd9, 0x17, 0xf9, 0xe1, 0x2d, 0x2b, 0xef, 0x37, 0x01,
+ 0xe8, 0x07, 0xf3, 0x17, 0x21, 0x07, 0x93, 0xe7, 0xe4, 0xff, 0x0c, 0xeb, 0xf6,
+ 0x96, 0x11, 0x0c, 0x49, 0xf7, 0xed, 0xfd, 0xeb, 0xd9, 0xbc, 0x24, 0xeb, 0xe3,
+ 0xb1, 0xf7, 0x67, 0xd0, 0xfa, 0x25, 0xc1, 0x28, 0x5b, 0x7f, 0xd1, 0xfa, 0xd8,
+ 0xc7, 0xe9, 0x42, 0xb6, 0xde, 0x23, 0xe6, 0xe5, 0x24, 0xe2, 0x11, 0xe7, 0xda,
+ 0x09, 0x3b, 0xed, 0x00, 0x38, 0xe6, 0xc3, 0xdc, 0xe3, 0xd9, 0xb5, 0xfd, 0x06,
+ 0x03, 0xde, 0x04, 0x0e, 0xf2, 0x1d, 0xe6, 0xfc, 0x98, 0xfc, 0xd8, 0x36, 0x16,
+ 0x00, 0x13, 0xd8, 0xf0, 0x10, 0x23, 0x3a, 0xf4, 0xe9, 0x02, 0xdc, 0xf8, 0x13,
+ 0xba, 0x1c, 0xd7, 0x19, 0x2e, 0x13, 0x09, 0x11, 0xeb, 0xce, 0xd0, 0xf5, 0x9e,
+ 0xf3, 0xfc, 0x3d, 0x2b, 0xf5, 0xdf, 0xf8, 0xcf, 0xd4, 0xf9, 0xea, 0xc8, 0x39,
+ 0x0d, 0xf8, 0x00, 0x4a, 0x13, 0xbe, 0x29, 0x1b, 0xb0, 0x14, 0x0e, 0xfd, 0xfc,
+ 0xd9, 0x03, 0xa4, 0xed, 0xf3, 0x03, 0x01, 0xda, 0x13, 0xf2, 0xd4, 0xf8, 0x1b,
+ 0x32, 0x18, 0xe1, 0x3d, 0xc7, 0xdd, 0xd3, 0x2f, 0x07, 0xa9, 0xe8, 0x19, 0xd4,
+ 0xf5, 0xfd, 0xf2, 0xe1, 0xbc, 0x0b, 0xa7, 0x06, 0xd7, 0x0a, 0xe9, 0x20, 0xfc,
+ 0x0f, 0x04, 0xfb, 0xbd, 0xdb, 0xf5, 0x05, 0x03, 0x51, 0x62, 0xee, 0xe4, 0x23,
+ 0xfb, 0xf6, 0x03, 0xfb, 0x4a, 0x2a, 0xde, 0xe2, 0xb3, 0xfc, 0xcf, 0xfa, 0xfc,
+ 0xc3, 0xea, 0xf9, 0xf5, 0xfc, 0xf1, 0xf1, 0x21, 0x38, 0x08, 0xbd, 0xf6, 0x55,
+ 0x09, 0xd2, 0xf7, 0xde, 0xe7, 0x1e, 0xf7, 0x56, 0x15, 0xda, 0x81, 0x30, 0xef,
+ 0x9f, 0xe8, 0xdf, 0xbc, 0x03, 0x08, 0x08, 0xfb, 0x10, 0xdd, 0xf9, 0x27, 0xd5,
+ 0xc0, 0xbc, 0xda, 0x04, 0xff, 0x2a, 0x2b, 0xe4, 0x20, 0xd4, 0x4e, 0xf3, 0xf2,
+ 0x53, 0xf7, 0xde, 0xea, 0x01, 0xe9, 0xe9, 0x08, 0xee, 0xd0, 0x11, 0x17, 0x23,
+ 0xcf, 0xf8, 0xd2, 0x00, 0xdb, 0xe1, 0xf7, 0x06, 0x0c, 0xf1, 0xdf, 0xe7, 0xfc,
+ 0xb6, 0xe3, 0xef, 0xe0, 0x41, 0xd9, 0x13, 0xcc, 0xda, 0xe9, 0xf8, 0x1f, 0xdc,
+ 0x03, 0xf3, 0xb3, 0xe9, 0xb8, 0xca, 0xe0, 0x1c, 0xaf, 0x1b, 0x21, 0x23, 0x1b,
+ 0xf0, 0xfa, 0x06, 0xec, 0x0f, 0x12, 0x18, 0xd4, 0xfe, 0xf8, 0x29, 0xdc, 0xed,
+ 0xf8, 0xf7, 0xdc, 0x32, 0x07, 0x22, 0xe8, 0xf3, 0xc4, 0xef, 0xe9, 0x34, 0xfe,
+ 0xe8, 0x4d, 0x0b, 0xf7, 0x14, 0xda, 0xef, 0xb3, 0x11, 0x24, 0xf0, 0xa9, 0xba,
+ 0xf9, 0xf6, 0x0a, 0xd5, 0x13, 0xf4, 0x2a, 0x2c, 0x1c, 0x05, 0xe7, 0x30, 0xd6,
+ 0x3f, 0xe2, 0xe6, 0x78, 0x4d, 0xd0, 0xd9, 0x2b, 0x1a, 0xd7, 0x14, 0x17, 0xe9,
+ 0x81, 0x13, 0x2e, 0xf9, 0xcb, 0xd2, 0xe6, 0x0b, 0xb2, 0x0a, 0xc8, 0xb1, 0xf2,
+ 0xb2, 0xd8, 0xe6, 0xf8, 0x0f, 0xad, 0xcb, 0xc6, 0xc6, 0xad, 0x56, 0x3b, 0x27,
+ 0xdc, 0xd6, 0x39, 0xf5, 0xf8, 0x34, 0x1d, 0xdd, 0x3b, 0xd4, 0xeb, 0x15, 0xbe,
+ 0xf4, 0x1b, 0x08, 0xf0, 0xe6, 0xc7, 0x29, 0x1e, 0x18, 0xc0, 0x10, 0xac, 0xf2,
+ 0xae, 0x24, 0xeb, 0xfc, 0xfd, 0x06, 0xfa, 0xe1, 0x08, 0xae, 0x26, 0xd4, 0xf9,
+ 0x41, 0xd4, 0xcd, 0xff, 0x64, 0xff, 0xce, 0xdd, 0xe4, 0xeb, 0xde, 0xf5, 0x4c,
+ 0x28, 0x02, 0xe2, 0x7a, 0x0d, 0xa5, 0x35, 0x46, 0xa5, 0xfa, 0x07, 0x11, 0x07,
+ 0x54, 0x0c, 0x05, 0x00, 0x11, 0x01, 0xfa, 0x0b, 0x09, 0xa1, 0x16, 0xfc, 0xa9,
+ 0xf4, 0x01, 0x35, 0xee, 0x05, 0x3d, 0xec, 0x0e, 0x0c, 0xf6, 0x1b, 0x3a, 0x1c,
+ 0x17, 0x58, 0xf2, 0x1a, 0x16, 0xea, 0x08, 0x20, 0xfa, 0x3c, 0xef, 0x0d, 0x0b,
+ 0xf9, 0x0a, 0xef, 0x87, 0xff, 0xeb, 0x07, 0xfd, 0x24, 0x0b, 0xc2, 0xfd, 0x1d,
+ 0xc0, 0x0f, 0xe7, 0x5d, 0x08, 0x00, 0xc9, 0x1a, 0xea, 0xe8, 0xda, 0xca, 0xe5,
+ 0x24, 0x3b, 0x18, 0xf8, 0xa4, 0xd0, 0x15, 0x0c, 0xeb, 0x11, 0xfc, 0xfc, 0x11,
+ 0xf2, 0x28, 0x0c, 0xd6, 0x40, 0x2b, 0xf8, 0x0d, 0x66, 0x1c, 0x0a, 0xf1, 0xf7,
+ 0x29, 0xf6, 0x05, 0x32, 0xd2, 0xec, 0x07, 0xff, 0xa3, 0x1b, 0x36, 0x5b, 0xd3,
+ 0x36, 0xd1, 0x07, 0xdd, 0xde, 0x29, 0x1e, 0x22, 0x18, 0xb5, 0xd7, 0xd9, 0x08,
+ 0xe8, 0x15, 0x90, 0xc3, 0x18, 0x11, 0xcc, 0x1f, 0x29, 0xd5, 0xf7, 0xbd, 0x22,
+ 0xcc, 0xbd, 0xc2, 0x0e, 0x09, 0x47, 0xcd, 0xa6, 0xc6, 0xbf, 0xd2, 0x1d, 0xee,
+ 0x36, 0xf7, 0xd4, 0xc2, 0x0d, 0x1b, 0x1f, 0x05, 0xfe, 0x0e, 0xb9, 0xe3, 0x1b,
+ 0x34, 0x44, 0xe1, 0xeb, 0xbc, 0x3c, 0xec, 0x25, 0x1b, 0xb4, 0x26, 0xc3, 0xdf,
+ 0x27, 0x1d, 0xed, 0xfc, 0xf9, 0x31, 0x2c, 0xee, 0x09, 0xea, 0xef, 0x02, 0xeb,
+ 0x0e, 0xe2, 0xc0, 0x09, 0xf0, 0x0f, 0xff, 0xf1, 0x50, 0x11, 0xf7, 0x54, 0xe9,
+ 0xc5, 0x34, 0xbf, 0x21, 0x01, 0xc5, 0x99, 0x14, 0xe1, 0x0a, 0xeb, 0x03, 0xbb,
+ 0xe7, 0xd1, 0xf7, 0xe7, 0x03, 0xd9, 0xff, 0x9e, 0x33, 0x17, 0x05, 0x1a, 0x30,
+ 0xfd, 0x3f, 0x0d, 0xdf, 0xe6, 0x18, 0x15, 0x21, 0xcb, 0x0f, 0x06, 0xcf, 0x9f,
+ 0x5b, 0x0f, 0x13, 0xf9, 0xcf, 0x67, 0x45, 0x0d, 0xf8, 0xc0, 0xd6, 0x02, 0x19,
+ 0x03, 0xa6, 0xbc, 0xfe, 0xe7, 0xea, 0x03, 0xb7, 0xba, 0x63, 0x16, 0xcb, 0x06,
+ 0x50, 0x1a, 0x09, 0x1a, 0x0d, 0x0d, 0xf0, 0xc5, 0xce, 0xfd, 0x9f, 0xbb, 0x12,
+ 0xfb, 0x08, 0xfe, 0x11, 0x08, 0xe5, 0x7f, 0x5c, 0x1e, 0x29, 0x20, 0x05, 0x21,
+ 0xfb, 0xcd, 0xe8, 0x2e, 0x24, 0xe7, 0x1b, 0x32, 0xd1, 0x05, 0xeb, 0xce, 0xdc,
+ 0x0e, 0xfb, 0xec, 0xf0, 0x15, 0xc2, 0xe6, 0xdc, 0xe0, 0x33, 0x2a, 0xd1, 0x37,
+ 0x0b, 0x4a, 0x01, 0xb8, 0xb0, 0xe6, 0xd6, 0xf5, 0x05, 0x0c, 0x11, 0xcd, 0xcc,
+ 0xd1, 0xb0, 0xfa, 0x14, 0x2e, 0x2e, 0x02, 0xe4, 0x01, 0xd0, 0xf7, 0xca, 0x60,
+ 0xa9, 0xe4, 0x1f, 0xe3, 0x4f, 0x2c, 0xfe, 0xfc, 0xbb, 0xe6, 0xcb, 0x00, 0xf4,
+ 0xe6, 0xdd, 0x21, 0xf0, 0xcb, 0xa5, 0x10, 0x3f, 0xe3, 0xf8, 0xaa, 0x26, 0x06,
+ 0xd1, 0xee, 0xda, 0xfd, 0x3b, 0xf4, 0xb9, 0xe0, 0xf4, 0xbd, 0xf0, 0xe5, 0xdd,
+ 0xb2, 0xf9, 0xfb, 0xce, 0xfa, 0x2a, 0xe3, 0x13, 0xd3, 0x07, 0xe1, 0xcb, 0xf8,
+ 0xd9, 0xed, 0xff, 0xb0, 0xc4, 0xc6, 0x1e, 0xdf, 0xe5, 0x14, 0xbf, 0xe0, 0xe4,
+ 0xf6, 0x04, 0xbd, 0xd4, 0x1f, 0xc9, 0xd0, 0xdd, 0xf3, 0xe9, 0x32, 0x23, 0x20,
+ 0xd3, 0x15, 0x25, 0x11, 0xa9, 0x2a, 0xcb, 0x29, 0xde, 0xfe, 0x03, 0xe2, 0x1c,
+ 0x24, 0xbe, 0xfb, 0x2f, 0x26, 0x06, 0xb9, 0x28, 0x3a, 0xd8, 0x3b, 0x1c, 0xe7,
+ 0x05, 0x06, 0xf9, 0xd7, 0x0c, 0xf9, 0xe5, 0x17, 0xf7, 0x36, 0x48, 0xfc, 0x12,
+ 0xe9, 0x9e, 0x09, 0xb8, 0x01, 0xf5, 0x1f, 0xd4, 0x3b, 0x12, 0x00, 0xd1, 0x09,
+ 0xeb, 0x32, 0xfb, 0xb0, 0x3c, 0x81, 0x17, 0x4c, 0x15, 0xfd, 0x0c, 0x2e, 0xcd,
+ 0x1f, 0x0f, 0x48, 0x20, 0x48, 0xda, 0xd0, 0xeb, 0xe6, 0x1a, 0xf6, 0xb2, 0xfd,
+ 0xc3, 0xd4, 0x01, 0x2c, 0xe2, 0xeb, 0xbc, 0x3c, 0xc7, 0xee, 0x0d, 0x21, 0xbb,
+ 0x0d, 0xf6, 0xda, 0x0a, 0xc5, 0x0d, 0x21, 0x10, 0xeb, 0xdc, 0x06, 0xf0, 0xd8,
+ 0xc5, 0x1a, 0x1a, 0xc5, 0x1f, 0xf4, 0xe3, 0x24, 0x9c, 0xb1, 0xcb, 0xc3, 0xe4,
+ 0xcd, 0xe4, 0xe7, 0x2c, 0x23, 0x30, 0xcb, 0xba, 0xc1, 0xf6, 0xab, 0x0b, 0xdc,
+ 0xaf, 0xd1, 0x13, 0x1f, 0x2c, 0x22, 0x22, 0xb9, 0xfd, 0x0b, 0x10, 0x22, 0x42,
+ 0xf9, 0x22, 0x02, 0xcf, 0xea, 0xe1, 0x35, 0x6a, 0x05, 0xd9, 0xb7, 0xfa, 0xb2,
+ 0xff, 0xf0, 0xd2, 0xcf, 0x12, 0xe9, 0xf8, 0x59, 0xd7, 0xcc, 0xbf, 0xc2, 0x82,
+ 0xc8, 0xd7, 0xe7, 0xa6, 0x3a, 0x22, 0xc4, 0x0e, 0x23, 0xf1, 0xd6, 0x29, 0xf4,
+ 0xda, 0xd6, 0xfe, 0x08, 0x00, 0x17, 0x06, 0x2a, 0x17, 0xca, 0xe2, 0x37, 0xde,
+ 0x10, 0x19, 0xe4, 0x38, 0x06, 0x07, 0xce, 0xfc, 0x1b, 0x43, 0xe0, 0xcf, 0xb9,
+ 0xa3, 0x20, 0x4d, 0xd8, 0x4a, 0xcc, 0x19, 0xe2, 0xb7, 0x18, 0xce, 0xd5, 0xeb,
+ 0xda, 0x11, 0x9c, 0xdc, 0xe9, 0x29, 0xca, 0xa6, 0xf5, 0x14, 0xe1, 0x1d, 0x1c,
+ 0xcb, 0xe3, 0x59, 0xf8, 0xcc, 0x4f, 0xd1, 0x4b, 0x16, 0xad, 0x14, 0xaf, 0x95,
+ 0xcf, 0x39, 0xfc, 0x1e, 0xb2, 0x1f, 0xeb, 0xfb, 0x3d, 0xff, 0xf8, 0xfd, 0xec,
+ 0x8b, 0x40, 0x2b, 0x10, 0xbf, 0xf6, 0xf5, 0xcc, 0x2f, 0xca, 0x2a, 0xf8, 0x9b,
+ 0x1a, 0xf5, 0xce, 0x1e, 0xf6, 0x25, 0xc5, 0x25, 0xe7, 0x84, 0xda, 0xc3, 0x1b,
+ 0xb5, 0xd6, 0x29, 0x36, 0x23, 0xaf, 0x00, 0x30, 0xe6, 0xa3, 0xd4, 0xbb, 0xc6,
+ 0xb5, 0xd3, 0x14, 0x14, 0x18, 0x1f, 0x30, 0x16, 0x37, 0xcf, 0xd9, 0xe6, 0xf8,
+ 0xda, 0xa2, 0x39, 0x14, 0x09, 0x33, 0x08, 0xeb, 0xac, 0xcd, 0x04, 0xcd, 0x49,
+ 0x89, 0xf9, 0xc1, 0xc2, 0xc6, 0x37, 0xdf, 0xdd, 0x01, 0xbf, 0x27, 0xec, 0x1f,
+ 0xe4, 0x05, 0xed, 0xe7, 0xec, 0x0d, 0x03, 0x4e, 0x2d, 0xc3, 0xe6, 0xf4, 0x07,
+ 0xeb, 0x23, 0xc8, 0xa5, 0xfc, 0xc4, 0x09, 0xda, 0xf0, 0x3e, 0xbb, 0xf9, 0x06,
+ 0x05, 0xd6, 0x1c, 0xd0, 0x20, 0xf3, 0x34, 0x00, 0xab, 0xff, 0xfe, 0xdb, 0xdb,
+ 0xd1, 0xd5, 0xe7, 0xed, 0xf5, 0xec, 0xf2, 0x2b, 0x32, 0xa4, 0xf3, 0x4c, 0x21,
+ 0xca, 0x2c, 0xb5, 0xe7, 0xd4, 0xc3, 0xfa, 0x56, 0x52, 0x0c, 0x0b, 0xd0, 0xd1,
+ 0xf5, 0x14, 0xf7, 0xc3, 0xdd, 0x20, 0x05, 0xac, 0x13, 0x56, 0x08, 0xc2, 0xd1,
+ 0xe1, 0x11, 0x00, 0xfa, 0xe8, 0x84, 0xff, 0x06, 0xf8, 0x09, 0xf8, 0xf3, 0xc1,
+ 0xde, 0xef, 0xec, 0x26, 0xf2, 0xfe, 0x24, 0xf2, 0x0c, 0xd5, 0xd7, 0x05, 0x01,
+ 0xce, 0x2d, 0x0c, 0x03, 0x23, 0xf7, 0xeb, 0x01, 0x08, 0x32, 0x81, 0xcb, 0xc2,
+ 0xd0, 0x2b, 0xda, 0xf1, 0x63, 0x03, 0xde, 0xf4, 0x20, 0xcc, 0xe2, 0x28, 0xdf,
+ 0x6d, 0xf9, 0xb6, 0x19, 0x9d, 0xfc, 0xf6, 0xe4, 0xc5, 0xdb, 0x06, 0xa6, 0x08,
+ 0xf0, 0x48, 0xf4, 0xfd, 0x20, 0xf7, 0x08, 0xb2, 0xc2, 0x00, 0xe8, 0xec, 0xbe,
+ 0xad, 0xf2, 0x4e, 0xf4, 0xf8, 0xe0, 0x17, 0xd8, 0xa7, 0x0f, 0x01, 0x00, 0xe8,
+ 0xe7, 0x0e, 0xe9, 0xff, 0x2e, 0x17, 0xa4, 0x15, 0xdd, 0xfe, 0x25, 0xf1, 0x1b,
+ 0xe0, 0xf9, 0xb7, 0xdd, 0x11, 0xd5, 0xb8, 0xe5, 0xfb, 0x0a, 0xb1, 0xe2, 0x48,
+ 0x3d, 0xa4, 0x1e, 0xc9, 0x48, 0xbb, 0xe0, 0xd7, 0x28, 0xe5, 0x00, 0xca, 0x24,
+ 0x2c, 0xe1, 0xb2, 0x49, 0x17, 0xe3, 0xc7, 0x05, 0xf1, 0xcd, 0x5e, 0xf5, 0xf1,
+ 0xc2, 0xf2, 0x2a, 0xd6, 0x03, 0xd9, 0x2b, 0xf8, 0xe0, 0xbb, 0x04, 0xc5, 0xd8,
+ 0x1f, 0x0a, 0xf8, 0x34, 0x46, 0x19, 0x14, 0xc4, 0xde, 0xfb, 0xeb, 0xe7, 0x4b,
+ 0xe7, 0xd9, 0x07, 0xc3, 0x1f, 0xe7, 0xe2, 0xe8, 0x7b, 0x07, 0x0d, 0xf2, 0x20,
+ 0xfc, 0x24, 0xe8, 0xde, 0xfe, 0xe5, 0xf1, 0xe9, 0xdb, 0xcd, 0xbc, 0x00, 0x03,
+ 0xfd, 0xf5, 0xb2, 0xe6, 0xe6, 0xf5, 0x02, 0x93, 0xc8, 0x2f, 0x0d, 0xfb, 0x25,
+ 0xe7, 0xc2, 0x24, 0x40, 0xce, 0x95, 0xd3, 0xeb, 0xc8, 0x03, 0x0f, 0x5d, 0xdf,
+ 0xd8, 0xf3, 0xa6, 0x59, 0x08, 0xde, 0xd2, 0xfc, 0xc9, 0xe5, 0x07, 0x09, 0xe1,
+ 0xff, 0xf0, 0x0f, 0xf0, 0xc6, 0xe1, 0xb9, 0xe3, 0x1a, 0x01, 0xde, 0x3d, 0x96,
+ 0xc3, 0x57, 0xb8, 0xc1, 0xa8, 0x14, 0x51, 0x16, 0x0e, 0xfc, 0x17, 0xd8, 0xd0,
+ 0x27, 0x02, 0x17, 0x36, 0xd0, 0x95, 0xc8, 0xc4, 0xe7, 0x06, 0x2a, 0x14, 0xfc,
+ 0x36, 0xfa, 0x3c, 0x21, 0x59, 0xd7, 0x10, 0x0b, 0x1e, 0xde, 0x22, 0x19, 0xc9,
+ 0xd5, 0xf2, 0xe5, 0xd6, 0xeb, 0x06, 0xdd, 0xf1, 0xfc, 0x06, 0xdb, 0x81, 0xeb,
+ 0xd5, 0xdc, 0x12, 0xd4, 0xee, 0xfd, 0x96, 0xc9, 0x4e, 0xef, 0xf2, 0x9e, 0x20,
+ 0xe6, 0xbd, 0x04, 0xdc, 0xe3, 0x0b, 0x3c, 0xa8, 0x37, 0xd7, 0xe9, 0xc8, 0x48,
+ 0xb9, 0xf7, 0xd5, 0x32, 0x02, 0x15, 0xad, 0x30, 0xc2, 0xbf, 0x51, 0xe8, 0x40,
+ 0x1c, 0xf2, 0x47, 0xe9, 0xbd, 0xb0, 0xc9, 0xfc, 0x36, 0x00, 0x06, 0x1d, 0xe7,
+ 0xcb, 0xdb, 0x1c, 0x2a, 0xfd, 0xb3, 0x1e, 0x0c, 0x92, 0xef, 0xe8, 0x1a, 0x22,
+ 0x05, 0xdb, 0x0c, 0x06, 0xf3, 0x22, 0xe8, 0x3c, 0xfc, 0x4d, 0x02, 0x2b, 0x17,
+ 0x09, 0xde, 0xe8, 0x41, 0x01, 0x2a, 0xb9, 0x0e, 0xc4, 0xc5, 0xdf, 0x0c, 0xcc,
+ 0xaf, 0xd9, 0xb6, 0xf3, 0x4f, 0xe0, 0xf0, 0xd0, 0xef, 0xc5, 0x15, 0xb3, 0x2e,
+ 0xd9, 0xd7, 0x54, 0x08, 0x49, 0xff, 0x2a, 0x0d, 0xe7, 0xd2, 0xfd, 0xe0, 0x0b,
+ 0xbd, 0xea, 0xbc, 0x13, 0xde, 0xad, 0x14, 0x2a, 0xa6, 0x81, 0x32, 0x29, 0x25,
+ 0xed, 0x49, 0xa3, 0x04, 0x0e, 0x06, 0x1d, 0x08, 0x22, 0x24, 0x01, 0xd0, 0xb5,
+ 0xe7, 0xe3, 0x2e, 0xf4, 0x1f, 0x25, 0x03, 0xc7, 0xe3, 0x2e, 0x00, 0x36, 0xf8,
+ 0xf5, 0x28, 0xdb, 0x40, 0xda, 0x0b, 0x2e, 0xe8, 0xfb, 0xf9, 0xca, 0x45, 0xcf,
+ 0xc9, 0x0e, 0xea, 0xf1, 0x25, 0xd7, 0x1d, 0xe2, 0x0a, 0xf3, 0xfe, 0x3c, 0xe7,
+ 0x00, 0xf4, 0x17, 0x35, 0xe4, 0x2d, 0xf8, 0x45, 0x10, 0xe2, 0xfd, 0xe6, 0x0a,
+ 0xaf, 0x05, 0x35, 0xc6, 0xdc, 0xf7, 0xb4, 0x97, 0x0b, 0x26, 0x01, 0xfb, 0xb5,
+ 0xfc, 0xbf, 0xc2, 0x29, 0xe0, 0x16, 0x54, 0xbf, 0x1a, 0xeb, 0x26, 0xd2, 0xf6,
+ 0xb2, 0xed, 0x31, 0x4b, 0x35, 0xd1, 0x0e, 0xc5, 0xeb, 0xf8, 0x09, 0x04, 0x62,
+ 0x1c, 0x07, 0xec, 0xf5, 0xd3, 0xbc, 0xdd, 0x17, 0xed, 0x92, 0xe9, 0xe5, 0x23,
+ 0xf0, 0xe9, 0xa0, 0xe0, 0x53, 0x33, 0xc8, 0xe6, 0x9e, 0x01, 0xf7, 0xfb, 0xd4,
+ 0x10, 0x35, 0xc3, 0xf9, 0xf1, 0xf4, 0xf1, 0xeb, 0x2f, 0xbe, 0x1d, 0x14, 0xd5,
+ 0xd6, 0x13, 0x1d, 0xe6, 0x2e, 0xe1, 0x3c, 0xe4, 0x12, 0xe0, 0xc7, 0x27, 0xec,
+ 0xfb, 0xda, 0xdc, 0xe7, 0xf8, 0x11, 0x1b, 0xe7, 0xea, 0xef, 0x0c, 0xee, 0xf4,
+ 0x05, 0x20, 0x81, 0xb3, 0x36, 0x12, 0xf5, 0xe3, 0x00, 0x1d, 0xb5, 0x15, 0xd0,
+ 0x04, 0x1b, 0xf8, 0xe6, 0xf7, 0x32, 0x0f, 0x27, 0xf9, 0xfe, 0x1b, 0xe8, 0x21,
+ 0xda, 0x29, 0xf3, 0x0d, 0x45, 0xc8, 0xee, 0xf9, 0x02, 0xfc, 0x04, 0x1c, 0xe2,
+ 0xf8, 0xfe, 0xf3, 0xfe, 0xfb, 0xc0, 0xd8, 0xd6, 0xd1, 0x12, 0x13, 0xfb, 0x19,
+ 0x26, 0x1b, 0x00, 0x31, 0xb1, 0xd4, 0x17, 0x36, 0x1f, 0x0c, 0x18, 0xe0, 0xf6,
+ 0xdb, 0xd0, 0x04, 0x14, 0x0c, 0x1c, 0x0e, 0x0c, 0x17, 0xe9, 0x02, 0xe7, 0x47,
+ 0x26, 0xc7, 0xd4, 0x1a, 0x0e, 0xff, 0x52, 0xf6, 0xb2, 0xcb, 0x22, 0xf7, 0x22,
+ 0xea, 0xd7, 0xec, 0xdf, 0xca, 0xe0, 0xbb, 0xc1, 0xf1, 0xd8, 0x0d, 0x39, 0x01,
+ 0x13, 0xeb, 0xd8, 0xd0, 0xf1, 0xf0, 0x3f, 0x17, 0xee, 0x07, 0xf5, 0xb8, 0x27,
+ 0xe9, 0xef, 0x06, 0xce, 0x2b, 0xf3, 0xe4, 0x3b, 0x04, 0x3a, 0xc7, 0x08, 0xc4,
+ 0x14, 0xc0, 0x47, 0x0d, 0x00, 0x24, 0x43, 0xd0, 0xaa, 0xa4, 0xb0, 0xe9, 0x1f,
+ 0x2d, 0x1a, 0xda, 0xf1, 0xd9, 0x13, 0xd1, 0xa9, 0x4c, 0x0d, 0xcf, 0x0c, 0x3b,
+ 0xfa, 0xef, 0x0f, 0x32, 0x31, 0xfa, 0x27, 0xe7, 0xed, 0x56, 0xd7, 0x05, 0x23,
+ 0xe1, 0x2a, 0x2b, 0xeb, 0xf3, 0x02, 0x0d, 0x1d, 0xc9, 0xde, 0x06, 0x26, 0xfa,
+ 0x13, 0xf6, 0xed, 0xec, 0x1e, 0xea, 0x4a, 0x2f, 0xf0, 0xda, 0x45, 0xf6, 0x1c,
+ 0xc4, 0x25, 0x18, 0xed, 0xfc, 0x44, 0xbd, 0x1d, 0xe0, 0xff, 0x00, 0xde, 0x33,
+ 0x31, 0xe6, 0x11, 0xe0, 0xcd, 0x37, 0xde, 0xe0, 0xf9, 0xfe, 0x01, 0xfe, 0xed,
+ 0x12, 0xf1, 0xf3, 0xe0, 0xa8, 0xeb, 0xc8, 0xe2, 0xf5, 0x0a, 0x22, 0x1f, 0x12,
+ 0xdd, 0x1b, 0xd8, 0xcd, 0xa4, 0xde, 0xe2, 0x18, 0xf3, 0x5a, 0xb7, 0xde, 0xb1,
+ 0x00, 0xd4, 0xf4, 0x1f, 0xe5, 0xc7, 0x2a, 0xf8, 0x22, 0x36, 0xb9, 0x0c, 0xf4,
+ 0x1f, 0xfa, 0xf5, 0xbc, 0xb4, 0x1b, 0xe6, 0x41, 0xdc, 0x32, 0x04, 0x11, 0xf5,
+ 0xe7, 0xcc, 0x1d, 0x72, 0x50, 0xd3, 0x16, 0x24, 0x8f, 0x29, 0xf3, 0xf9, 0xcc,
+ 0xdc, 0xdd, 0x4e, 0xff, 0xe1, 0xc9, 0xe0, 0x41, 0x22, 0x4d, 0xee, 0xc9, 0xc0,
+ 0x14, 0x23, 0xf9, 0xe6, 0xf9, 0x08, 0x10, 0xdb, 0x0a, 0x37, 0x02, 0x3a, 0xd0,
+ 0x04, 0xff, 0xa4, 0xcf, 0xda, 0x18, 0x1d, 0xe5, 0xe9, 0xfb, 0x22, 0xf8, 0x44,
+ 0x83, 0xd7, 0xfd, 0xf0, 0xf9, 0xc6, 0x09, 0xdb, 0xee, 0x11, 0xe2, 0x3d, 0xfc,
+ 0xdf, 0xd0, 0x1c, 0xe0, 0xf5, 0x13, 0x25, 0xcb, 0x07, 0x13, 0xcf, 0xff, 0xc5,
+ 0x35, 0x2a, 0xf7, 0xe9, 0xff, 0x0d, 0x4d, 0x12, 0xf9, 0x1f, 0x10, 0x16, 0x00,
+ 0x1d, 0xde, 0x15, 0x15, 0xa3, 0x03, 0xd5, 0xfc, 0x21, 0x01, 0xdb, 0xbf, 0xbf,
+ 0x09, 0xe0, 0xfc, 0x00, 0x10, 0xd2, 0xc8, 0xae, 0x08, 0x22, 0xf2, 0x51, 0x05,
+ 0x24, 0xfa, 0xe4, 0x10, 0xb5, 0xcb, 0x3f, 0xfc, 0xf9, 0x01, 0xf1, 0x64, 0xdd,
+ 0xf3, 0x20, 0xe8, 0xa5, 0xf1, 0x28, 0x44, 0xed, 0x28, 0x28, 0xa6, 0xe0, 0xff,
+ 0x41, 0xf1, 0x19, 0x0d, 0xfb, 0x0a, 0xe7, 0x15, 0x2c, 0x2b, 0x32, 0x0f, 0x4f,
+ 0x08, 0xf0, 0xd0, 0x2b, 0xea, 0xb0, 0xfc, 0xec, 0xd9, 0x43, 0x7e, 0xce, 0x0c,
+ 0xfa, 0x0b, 0x44, 0xc2, 0xc5, 0x18, 0xca, 0xe2, 0x01, 0xea, 0xa7, 0x36, 0xbd,
+ 0x24, 0xc8, 0xcd, 0xea, 0x1f, 0xd0, 0x14, 0xc0, 0xd3, 0xdc, 0x2b, 0xc9, 0xee,
+ 0xdd, 0xee, 0xfd, 0xb9, 0x0d, 0x26, 0x18, 0x25, 0xf7, 0x2f, 0xf8, 0xf1, 0x0e,
+ 0x16, 0xbd, 0xeb, 0xd2, 0x32, 0xc8, 0x10, 0xee, 0xa8, 0x07, 0x1e, 0x7f, 0xbc,
+ 0xf8, 0x0b, 0x0a, 0x24, 0x13, 0xd4, 0x1f, 0x02, 0xee, 0xd8, 0x1a, 0x00, 0xdb,
+ 0xc3, 0xe3, 0xf8, 0x09, 0x13, 0xdf, 0x08, 0xb4, 0x01, 0x2b, 0xc5, 0x0e, 0x04,
+ 0xdc, 0xe4, 0x05, 0x14, 0xc2, 0x0e, 0xf1, 0xda, 0x0c, 0xcf, 0x3e, 0x2d, 0x0b,
+ 0xf0, 0x0f, 0xea, 0xb3, 0xb6, 0xed, 0x1c, 0xe6, 0xe3, 0x43, 0xf0, 0x1b, 0xc2,
+ 0xd3, 0xfe, 0xb2, 0x30, 0x0d, 0xe9, 0x3c, 0x11, 0xd9, 0x20, 0xf7, 0xf8, 0x1a,
+ 0xf9, 0x16, 0xbf, 0xfb, 0xc9, 0x20, 0x1b, 0xc1, 0xd5, 0x92, 0x0e, 0x07, 0x04,
+ 0x4c, 0xbe, 0xe9, 0xc4, 0x05, 0xfc, 0x0d, 0xea, 0x6a, 0xd6, 0xea, 0xcc, 0x11,
+ 0xf9, 0xd8, 0x1f, 0xe9, 0x37, 0xcb, 0xb5, 0xf8, 0x69, 0xfd, 0xcb, 0x7f, 0xe7,
+ 0x20, 0xff, 0x00, 0xe1, 0x1a, 0x11, 0xe3, 0xc6, 0xf2, 0x02, 0x20, 0xd4, 0xe3,
+ 0xeb, 0xfe, 0xcd, 0xd1, 0x03, 0xdc, 0xfb, 0x05, 0xd9, 0xe7, 0x0c, 0x3f, 0xe7,
+ 0x22, 0x09, 0xbb, 0xe3, 0xfd, 0xe3, 0xd7, 0xda, 0xaa, 0x1e, 0xdc, 0xc4, 0xd0,
+ 0xc9, 0x64, 0xca, 0x3f, 0xe8, 0x18, 0xe2, 0x38, 0x28, 0xf1, 0x06, 0x0f, 0x18,
+ 0xd3, 0xf3, 0xff, 0xe1, 0xbe, 0x41, 0x02, 0x1e, 0x38, 0x15, 0xa3, 0x19, 0xe4,
+ 0x2c, 0x10, 0x31, 0xe6, 0xf9, 0xd6, 0xcb, 0xf2, 0xde, 0x03, 0x2a, 0x39, 0xf4,
+ 0xcf, 0x05, 0xf8, 0x51, 0xe2, 0xdc, 0xd8, 0xd3, 0xe5, 0x01, 0xdc, 0x0f, 0xc3,
+ 0xfb, 0xb8, 0x11, 0xfc, 0x10, 0x04, 0xd0, 0xfa, 0xea, 0x30, 0xa8, 0x13, 0xd9,
+ 0x2d, 0x00, 0xe0, 0xff, 0x3a, 0xf8, 0x39, 0x7d, 0x2a, 0x92, 0x16, 0xdc, 0xe3,
+ 0x1e, 0xe1, 0xde, 0xf1, 0x0b, 0xc8, 0xdf, 0xc7, 0xf1, 0xdd, 0xa4, 0xe6, 0xe0,
+ 0xee, 0x02, 0x0e, 0xfe, 0xcf, 0xb8, 0xe5, 0xde, 0x1f, 0x91, 0xf6, 0xd9, 0xf2,
+ 0xe0, 0xcb, 0xfe, 0xf5, 0x01, 0xf3, 0x43, 0x99, 0x1b, 0xd1, 0xbd, 0x35, 0xe4,
+ 0xd0, 0x87, 0xa8, 0xb8, 0x59, 0xf0, 0xa9, 0xd0, 0x88, 0x2e, 0x37, 0xb5, 0x02,
+ 0x42, 0xbb, 0x57, 0x5e, 0x07, 0xd3, 0x19, 0x4e, 0x1e, 0xe9, 0x20, 0xf9, 0xb5,
+ 0x27, 0xd6, 0xfe, 0xf6, 0x4b, 0xf7, 0xf1, 0xba, 0x43, 0xe2, 0x2f, 0x09, 0x91,
+ 0xf6, 0x14, 0xb5, 0x19, 0xa5, 0xe3, 0xda, 0xf4, 0x26, 0xe0, 0xdb, 0x1e, 0xbd,
+ 0x12, 0xbb, 0x16, 0xec, 0xc7, 0xa5, 0xd1, 0xea, 0xcf, 0x46, 0xb1, 0xc9, 0xde,
+ 0xdf, 0xd3, 0x07, 0x31, 0x4c, 0xdf, 0x2a, 0xe0, 0x3b, 0xbd, 0x1b, 0xec, 0x35,
+ 0x94, 0xe1, 0x20, 0xa8, 0x1b, 0x00, 0xd0, 0x1e, 0x29, 0xe8, 0xe7, 0x35, 0x0a,
+ 0x29, 0x47, 0xbe, 0x14, 0x48, 0xbc, 0x26, 0xdb, 0xdf, 0xec, 0x03, 0x5f, 0x0a,
+ 0x28, 0xf8, 0x4b, 0xe7, 0x8e, 0xfe, 0x91, 0xc5, 0x9f, 0x49, 0xed, 0xbc, 0x41,
+ 0x20, 0x9d, 0xc9, 0xcd, 0xf2, 0xf7, 0x34, 0x0e, 0xda, 0x2a, 0x98, 0xe0, 0x81,
+ 0x9e, 0x5c, 0x29, 0xd0, 0xcb, 0x3b, 0xef, 0x5c, 0x1c, 0xbc, 0xef, 0x03, 0xfe,
+ 0x42, 0x3f, 0xc2, 0xd6, 0xea, 0xd1, 0x8a, 0xe3, 0x04, 0xc0, 0x15, 0x38, 0x0d,
+ 0xfa, 0xb9, 0xb4, 0x1a, 0xd1, 0x47, 0xa0, 0x20, 0x40, 0xf1, 0xd0, 0xbb, 0x06,
+ 0x19, 0x2a, 0x48, 0xd3, 0x27, 0xf0, 0xf2, 0x1e, 0x0f, 0x19, 0x09, 0x3c, 0xe2,
+ 0xc2, 0xba, 0x31, 0xf3, 0xf6, 0x30, 0xb5, 0xd6, 0xe4, 0x30, 0x50, 0x14, 0x13,
+ 0x5a, 0x0e, 0x44, 0xfe, 0xd5, 0xf2, 0xb6, 0xde, 0x28, 0x55, 0x10, 0xfd, 0x0e,
+ 0xc0, 0xf4, 0xfd, 0x2a, 0x11, 0xae, 0xbe, 0x05, 0xd3, 0x33, 0xc2, 0xcd, 0xc5,
+ 0xc3, 0xad, 0x26, 0xea, 0x29, 0x6d, 0x17, 0xed, 0x4d, 0xe7, 0xed, 0xdc, 0xcf,
+ 0xc8, 0x49, 0xfb, 0xe5, 0x07, 0x20, 0xbf, 0x28, 0xd9, 0xef, 0xca, 0xe9, 0xc4,
+ 0x8f, 0xd7, 0xc3, 0xde, 0xb5, 0xf3, 0xeb, 0x99, 0xac, 0xf4, 0xf3, 0xe4, 0xfd,
+ 0xfc, 0x15, 0xf6, 0x09, 0xc4, 0xf0, 0xf5, 0xd0, 0xf8, 0xf7, 0xb1, 0xf9, 0x0a,
+ 0xf8, 0x2e, 0xe6, 0xf9, 0xfb, 0x15, 0x15, 0x0c, 0x1b, 0xf7, 0xe8, 0x08, 0xd5,
+ 0x1b, 0xfd, 0xeb, 0xfb, 0xf4, 0xe0, 0xeb, 0x10, 0x00, 0xf5, 0xcf, 0x1e, 0xfb,
+ 0xd8, 0x5a, 0xf1, 0x08, 0xe0, 0xd9, 0x95, 0xd4, 0x47, 0x0d, 0x06, 0x18, 0xde,
+ 0x03, 0xfd, 0xfb, 0xd3, 0xed, 0xe7, 0x0c, 0xeb, 0x2c, 0xe4, 0x2f, 0xfd, 0xf0,
+ 0xf0, 0xf9, 0x08, 0xdf, 0xec, 0x38, 0xff, 0xe9, 0xc7, 0xe0, 0xc8, 0xd1, 0xcc,
+ 0x14, 0x0e, 0x03, 0x78, 0xd6, 0xfc, 0xf9, 0xf1, 0xed, 0xf7, 0xda, 0x07, 0x04,
+ 0x07, 0xf0, 0xee, 0x26, 0xef, 0xd1, 0xff, 0x23, 0x13, 0xdf, 0xfa, 0x18, 0xf4,
+ 0xe2, 0xe5, 0x17, 0xfe, 0xc6, 0x25, 0xf6, 0xd2, 0xe4, 0xd0, 0x19, 0xf1, 0x11,
+ 0xfe, 0x02, 0x09, 0x3b, 0x04, 0xf1, 0x13, 0xbe, 0xb8, 0xf2, 0xfb, 0xf8, 0x24,
+ 0x12, 0x1b, 0xfb, 0x10, 0xe1, 0xf2, 0x60, 0xfd, 0xed, 0x30, 0x2b, 0x27, 0x08,
+ 0x20, 0xae, 0xf7, 0x06, 0x13, 0xee, 0x00, 0xfe, 0x11, 0x06, 0x1b, 0xe0, 0xfb,
+ 0x0e, 0x1a, 0xc4, 0xdf, 0x1a, 0xff, 0xfd, 0x15, 0xfe, 0xf3, 0xfe, 0x0b, 0xea,
+ 0xfa, 0x0e, 0x0e, 0x27, 0xff, 0x03, 0xf4, 0x22, 0xff, 0x02, 0xf0, 0xf9, 0xf5,
+ 0xf4, 0x39, 0xf2, 0xd4, 0x07, 0x00, 0xf1, 0xff, 0xe8, 0xf4, 0xea, 0x15, 0x18,
+ 0xe1, 0x25, 0x05, 0x2b, 0xd3, 0x05, 0xf6, 0x01, 0xff, 0x34, 0x05, 0x0e, 0x7f,
+ 0x1d, 0x02, 0xee, 0x0e, 0xf8, 0x16, 0xdc, 0xc7, 0x12, 0xbc, 0xda, 0xda, 0x16,
+ 0x02, 0xdd, 0xd8, 0xc7, 0x10, 0xe2, 0x34, 0x03, 0xfc, 0xfe, 0xf1, 0x15, 0xe7,
+ 0xca, 0xe0, 0x10, 0x07, 0x02, 0x16, 0xfa, 0xf9, 0x05, 0xb5, 0xed, 0xc8, 0xc5,
+ 0xe5, 0xe4, 0x14, 0xf9, 0x0b, 0x30, 0xee, 0xf5, 0xbf, 0x17, 0xe2, 0x19, 0xc7,
+ 0xa5, 0xc7, 0xd5, 0x3d, 0xbe, 0x1b, 0xaa, 0xc8, 0x44, 0x09, 0xdb, 0xf2, 0x31,
+ 0xec, 0xca, 0x11, 0xfb, 0x5d, 0xfe, 0x0d, 0x58, 0x3c, 0xb8, 0xe9, 0x3f, 0xde,
+ 0xbb, 0xeb, 0x28, 0xd5, 0xff, 0xce, 0x06, 0xb4, 0xbb, 0x81, 0xdf, 0x5e, 0xff,
+ 0xe6, 0xed, 0x5f, 0xae, 0xe1, 0x0a, 0x23, 0xcd, 0x37, 0x40, 0x32, 0x44, 0x47,
+ 0xc2, 0x9e, 0x18, 0xdb, 0x49, 0x4f, 0x21, 0xd3, 0x10, 0xd1, 0x08, 0xec, 0xe8,
+ 0xa6, 0x39, 0x9e, 0xad, 0x23, 0x37, 0x88, 0x16, 0xc7, 0x3e, 0xa6, 0xf4, 0x10,
+ 0xe6, 0xbc, 0xf3, 0x1d, 0xc7, 0x13, 0x34, 0xaa, 0xc6, 0xec, 0xd4, 0xb6, 0x27,
+ 0xfa, 0xf0, 0x8e, 0xe4, 0xdb, 0x0d, 0x30, 0xd3, 0x3f, 0xe3, 0xef, 0x2c, 0xd6,
+ 0xa9, 0xca, 0xaa, 0x27, 0x55, 0x21, 0x1e, 0xb4, 0xf0, 0xf0, 0x00, 0x08, 0x0a,
+ 0xff, 0xef, 0xd7, 0x36, 0xd5, 0xe2, 0xee, 0xca, 0xf1, 0x42, 0xe6, 0xfd, 0x37,
+ 0xe8, 0xde, 0xe8, 0xdf, 0x21, 0x17, 0x4c, 0x21, 0xee, 0x12, 0xca, 0x12, 0xab,
+ 0xde, 0xf4, 0xe2, 0xbd, 0x8b, 0x12, 0xf2, 0x21, 0x28, 0xd5, 0x55, 0xdb, 0x41,
+ 0xad, 0x48, 0x33, 0x21, 0x4a, 0x20, 0xfb, 0xf4, 0x31, 0x38, 0x1c, 0x08, 0x5d,
+ 0x43, 0x98, 0xa6, 0x3f, 0xc6, 0xe5, 0xf9, 0x3e, 0x07, 0xef, 0x2e, 0xed, 0x1d,
+ 0x0d, 0xe9, 0xf1, 0x26, 0x16, 0x12, 0x10, 0x01, 0x3b, 0x32, 0xdf, 0xc9, 0x69,
+ 0x98, 0x33, 0x25, 0x81, 0xe2, 0x02, 0xff, 0xc7, 0x1f, 0xe6, 0x03, 0xe1, 0xc8,
+ 0x2d, 0xe6, 0x38, 0xec, 0x12, 0x56, 0x16, 0xea, 0x54, 0xf4, 0xd0, 0x03, 0x1e,
+ 0xf6, 0xe8, 0xe3, 0x11, 0xed, 0x14, 0xcb, 0xf7, 0xb8, 0xcf, 0xfb, 0xa9, 0xe9,
+ 0x00, 0xdd, 0xdd, 0xfc, 0xb6, 0xae, 0x0a, 0x12, 0xcd, 0x06, 0xa2, 0xb9, 0x0a,
+ 0x04, 0xb1, 0x4b, 0xd5, 0xe9, 0x39, 0x23, 0x6e, 0xa5, 0xc3, 0xd5, 0xf4, 0xb3,
+ 0xf1, 0x08, 0x16, 0x64, 0x3f, 0xde, 0xe2, 0xba, 0x09, 0xe6, 0xee, 0xce, 0xf5,
+ 0xab, 0xd9, 0x35, 0xcc, 0x0e, 0xfe, 0xe4, 0x21, 0x21, 0x39, 0x04, 0x26, 0x44,
+ 0xa5, 0x2d, 0x39, 0xe0, 0xfb, 0x25, 0x09, 0x09, 0xb7, 0xf6, 0xde, 0x14, 0x04,
+ 0x4a, 0xcc, 0x38, 0xfc, 0x12, 0x36, 0x93, 0x36, 0xd3, 0xea, 0xfe, 0xf8, 0xa2,
+ 0xd0, 0x1e, 0x03, 0xc5, 0xba, 0xe8, 0xf5, 0x28, 0xe8, 0x18, 0x2f, 0xfe, 0xf0,
+ 0xdc, 0x4d, 0x3b, 0xdf, 0x31, 0x07, 0x0e, 0xd0, 0xfd, 0x24, 0x1a, 0xd9, 0x26,
+ 0xcc, 0x4a, 0xd2, 0xbf, 0xdb, 0xfc, 0xe4, 0x34, 0x12, 0xf4, 0x26, 0x59, 0x15,
+ 0xce, 0x3b, 0xbe, 0xe3, 0xdf, 0xf5, 0x03, 0xbc, 0x20, 0x73, 0xfe, 0xc9, 0xe0,
+ 0x08, 0xeb, 0xc0, 0x31, 0xd1, 0xab, 0x08, 0xd9, 0xa5, 0xda, 0x3d, 0xfc, 0x39,
+ 0x28, 0xdd, 0xff, 0xc0, 0xd8, 0x6c, 0xf5, 0xff, 0x2d, 0xd7, 0x9e, 0x1e, 0xbc,
+ 0x1f, 0xc6, 0xf0, 0x28, 0xf2, 0xad, 0x25, 0xbf, 0x8a, 0x37, 0x34, 0xf0, 0x56,
+ 0xf2, 0x4f, 0x0d, 0x30, 0x0e, 0x1d, 0x17, 0xf2, 0xaa, 0xea, 0x18, 0x29, 0x06,
+ 0x06, 0xf2, 0x26, 0x64, 0x1c, 0x01, 0xcc, 0x0d, 0x0d, 0x09, 0x02, 0xa4, 0x08,
+ 0xdd, 0x02, 0xd2, 0x36, 0xe6, 0x8c, 0x2f, 0x0d, 0xdb, 0xfe, 0x3d, 0x10, 0x20,
+ 0x07, 0xd6, 0x0e, 0x47, 0x34, 0x05, 0xd3, 0x8f, 0x1d, 0x12, 0x29, 0xcf, 0xf8,
+ 0x1e, 0xbd, 0x50, 0x4d, 0xbf, 0xdc, 0xef, 0xf2, 0xeb, 0x21, 0x1c, 0x08, 0x02,
+ 0x0f, 0xb3, 0xce, 0xcb, 0xd8, 0x04, 0x2f, 0x02, 0x02, 0xe4, 0xa2, 0xfa, 0xed,
+ 0xca, 0x81, 0x08, 0xd6, 0xfb, 0xd1, 0x4f, 0xd9, 0x21, 0x4b, 0xe6, 0x2d, 0xeb,
+ 0xe0, 0xb1, 0x34, 0xfb, 0x2f, 0x46, 0xdd, 0x39, 0xed, 0xd5, 0xfb, 0xe0, 0x11,
+ 0xe9, 0x0e, 0xc2, 0x39, 0x22, 0xce, 0xd5, 0xdd, 0x28, 0x99, 0xe2, 0xc0, 0x99,
+ 0xea, 0x0b, 0x4a, 0x0a, 0x20, 0xc2, 0xb5, 0xed, 0xb2, 0x52, 0xba, 0xe5, 0xf9,
+ 0x1f, 0xcd, 0xc2, 0xca, 0xd5, 0x18, 0xd1, 0xe7, 0x44, 0x25, 0xaa, 0xde, 0x3c,
+ 0x8e, 0xc6, 0xf0, 0x1a, 0xe5, 0x02, 0xfd, 0xf7, 0x1a, 0xf6, 0x5f, 0xc8, 0xd8,
+ 0xf9, 0x1d, 0x06, 0x8d, 0xbd, 0x5c, 0xc7, 0xb4, 0xc6, 0x25, 0xd4, 0x5a, 0x34,
+ 0x11, 0x9f, 0x87, 0xdd, 0x1a, 0x9b, 0xe8, 0x24, 0xdf, 0x1d, 0x2d, 0xce, 0xf8,
+ 0x40, 0x3a, 0x16, 0xd5, 0xf8, 0xcb, 0xe6, 0x09, 0xf6, 0xce, 0x2f, 0x06, 0xd2,
+ 0x1b, 0x25, 0xaa, 0xeb, 0xd6, 0xbc, 0xf5, 0x05, 0x57, 0x05, 0x07, 0xf8, 0xbb,
+ 0x0a, 0xab, 0xe1, 0x4a, 0xb9, 0xf4, 0xc0, 0xea, 0xe0, 0xc3, 0xee, 0x2c, 0xe7,
+ 0xf9, 0xdd, 0x03, 0xdd, 0x58, 0xf0, 0xf0, 0xd3, 0xda, 0x54, 0x09, 0xe0, 0xc4,
+ 0xdc, 0xc7, 0xc7, 0x3a, 0x0a, 0xb0, 0xc6, 0x06, 0xe7, 0x1b, 0x00, 0xc2, 0x25,
+ 0xc5, 0x0f, 0xe9, 0x2f, 0xe0, 0x16, 0x17, 0x16, 0x14, 0x25, 0xd2, 0x12, 0xef,
+ 0x27, 0x19, 0xc5, 0x0a, 0xe7, 0x10, 0x08, 0x96, 0x41, 0xfe, 0x06, 0x16, 0x0c,
+ 0x20, 0x3b, 0xb2, 0x0b, 0xd9, 0xe7, 0xe5, 0x09, 0xf8, 0xb8, 0xec, 0xe4, 0x59,
+ 0xbf, 0x2d, 0x0c, 0x49, 0xff, 0x58, 0xca, 0x00, 0x05, 0x2a, 0x36, 0xa7, 0xf1,
+ 0x07, 0xa0, 0xb6, 0x17, 0x19, 0xc6, 0x1f, 0x3b, 0xe8, 0x12, 0x46, 0xf9, 0x29,
+ 0xeb, 0x47, 0x81, 0x07, 0x1a, 0xfc, 0x44, 0x5f, 0xe1, 0xf0, 0xba, 0x40, 0xeb,
+ 0x42, 0xfa, 0x1b, 0xe8, 0xe7, 0xee, 0xe9, 0xf8, 0x38, 0xf9, 0x4b, 0x11, 0x0e,
+ 0x03, 0x26, 0x06, 0x19, 0x0e, 0xdc, 0xc3, 0x10, 0x12, 0x01, 0xf1, 0x3e, 0xcd,
+ 0x06, 0xdf, 0xf3, 0xb4, 0x15, 0x00, 0x13, 0xbf, 0x56, 0x9a, 0xdb, 0xf8, 0xd8,
+ 0x37, 0xcf, 0xf5, 0x22, 0xd0, 0x21, 0x3f, 0xd8, 0x31, 0xdd, 0xfd, 0xf7, 0xe5,
+ 0x0a, 0xc3, 0xdd, 0xe9, 0xe9, 0x1f, 0x10, 0x3f, 0x81, 0xfb, 0x27, 0xb4, 0xa3,
+ 0xd7, 0xf1, 0xfc, 0x12, 0x61, 0xff, 0xfb, 0x37, 0x08, 0xd7, 0x32, 0xf8, 0xa0,
+ 0xfe, 0x0d, 0xeb, 0xff, 0xef, 0xec, 0xdf, 0xc0, 0x1a, 0x3c, 0xd1, 0xe3, 0xf4,
+ 0x3c, 0xbe, 0x1c, 0xf2, 0xed, 0x0f, 0xf2, 0x36, 0xd7, 0x1d, 0xfd, 0x12, 0x0a,
+ 0xf1, 0x06, 0xf9, 0xb8, 0xa5, 0xf8, 0xf5, 0xbd, 0x36, 0x99, 0xc6, 0xf4, 0x0b,
+ 0x56, 0x17, 0x61, 0x21, 0xa4, 0xc0, 0x43, 0xe9, 0x01, 0xe6, 0xcf, 0xb2, 0xe4,
+ 0x14, 0x03, 0xde, 0xcc, 0xf5, 0x03, 0xd5, 0xa6, 0x10, 0xc0, 0xe0, 0xfa, 0x19,
+ 0xbd, 0xe2, 0x29, 0xd2, 0xfa, 0x4c, 0x19, 0xc4, 0x3f, 0x1d, 0xf2, 0x2a, 0xde,
+ 0xd5, 0x37, 0xde, 0xc8, 0xbc, 0x22, 0x5c, 0xf2, 0x15, 0xd2, 0xde, 0x32, 0x24,
+ 0xbe, 0xc9, 0x23, 0xe7, 0x90, 0x34, 0x1b, 0xf4, 0xa4, 0x45, 0xe6, 0x11, 0x09,
+ 0xe7, 0x22, 0xf5, 0x53, 0x4e, 0xc9, 0xe3, 0x26, 0xe4, 0x49, 0x3a, 0xd2, 0x26,
+ 0xc1, 0xff, 0xd8, 0x23, 0x23, 0x30, 0xc4, 0x04, 0xc8, 0xa0, 0x3b, 0x9b, 0xfb,
+ 0x4a, 0xdf, 0x17, 0x11, 0xa9, 0x08, 0x0d, 0x21, 0x63, 0x0e, 0x3e, 0x53, 0x28,
+ 0xdc, 0x1d, 0x06, 0xc6, 0xb1, 0xd3, 0x22, 0xf8, 0x2c, 0x03, 0xcb, 0x28, 0xf7,
+ 0x0b, 0x00, 0xff, 0xba, 0xfb, 0xf3, 0x0e, 0x2e, 0xaa, 0xe1, 0x29, 0x2c, 0xd6,
+ 0xfc, 0xc9, 0xd9, 0x23, 0x27, 0x04, 0xeb, 0x45, 0x26, 0xfc, 0x11, 0x81, 0x3c,
+ 0x2b, 0xf4, 0x54, 0xf9, 0xd4, 0x20, 0x1c, 0xf3, 0xcd, 0x0a, 0x24, 0xda, 0x11,
+ 0xfb, 0xfa, 0xec, 0xc3, 0x69, 0x17, 0xff, 0xcb, 0xec, 0x2b, 0xde, 0x3b, 0x2a,
+ 0x2c, 0x32, 0xe5, 0xa7, 0x01, 0xdf, 0xe8, 0xfe, 0x2a, 0x3f, 0x50, 0xe3, 0xf1,
+ 0xfd, 0x1b, 0xb6, 0xc8, 0xd5, 0x07, 0x07, 0xf9, 0xeb, 0x44, 0xb8, 0xf2, 0x3a,
+ 0xe0, 0x0e, 0xb9, 0xee, 0xe2, 0x08, 0xdc, 0xd3, 0xd7, 0xdd, 0xf1, 0xea, 0xc9,
+ 0x24, 0xe0, 0x37, 0xb8, 0x39, 0x3d, 0x28, 0x2d, 0xcf, 0xe9, 0xad, 0xbf, 0x0b,
+ 0xf8, 0xf0, 0x20, 0x0c, 0xe5, 0xa8, 0xae, 0x14, 0x0c, 0xe0, 0x2e, 0x24, 0x18,
+ 0xa5, 0x5f, 0xca, 0x24, 0x12, 0xdf, 0x09, 0xf2, 0x1e, 0xde, 0xcc, 0xe8, 0xfc,
+ 0xe0, 0xdf, 0xa5, 0xad, 0xdd, 0x3a, 0x14, 0x07, 0x25, 0x2c, 0xf5, 0x41, 0xcd,
+ 0xdf, 0x20, 0x1e, 0x04, 0xe0, 0x53, 0x4d, 0xf2, 0x82, 0xde, 0xfc, 0xca, 0xf4,
+ 0xd8, 0x3c, 0x36, 0xd6, 0xb3, 0x1e, 0xff, 0x07, 0x2a, 0xdc, 0xb3, 0xe3, 0x17,
+ 0x13, 0xdf, 0x25, 0xa7, 0xd5, 0x16, 0x23, 0x1b, 0x1c, 0x53, 0xa1, 0xb7, 0x05,
+ 0x81, 0xec, 0xf7, 0x5d, 0xa0, 0x5b, 0x04, 0x3e, 0xbd, 0x2d, 0xaa, 0xd3, 0x00,
+ 0xa5, 0x11, 0x2e, 0xe1, 0x0a, 0x83, 0x27, 0x37, 0xb5, 0xce, 0x0d, 0xd4, 0x49,
+ 0xfe, 0x3f, 0xeb, 0x17, 0xfc, 0x2e, 0x0b, 0x03, 0xfd, 0xc0, 0x91, 0xf1, 0x51,
+ 0xc6, 0xfb, 0xd5, 0xf6, 0x02, 0x05, 0xd0, 0x08, 0xee, 0x3a, 0x05, 0xaa, 0x42,
+ 0xbb, 0x09, 0x22, 0x13, 0xd6, 0xd0, 0x57, 0x2e, 0x02, 0x4a, 0xc0, 0xef, 0x1b,
+ 0xdd, 0xf1, 0xe8, 0x15, 0x18, 0xe6, 0x35, 0x17, 0xad, 0xf5, 0x05, 0x14, 0x03,
+ 0x02, 0x4a, 0xda, 0x09, 0xea, 0xfc, 0x46, 0x86, 0xe8, 0xcd, 0xc9, 0x1a, 0x42,
+ 0xbb, 0xca, 0xd6, 0xaf, 0x34, 0x3f, 0xc3, 0xd4, 0xeb, 0x1b, 0x2e, 0xdf, 0x08,
+ 0x4c, 0x03, 0xed, 0xd5, 0xd5, 0xe7, 0x00, 0x13, 0x1c, 0x04, 0xe0, 0x23, 0x27,
+ 0xaf, 0x36, 0x86, 0xa3, 0xa3, 0xed, 0x2a, 0x22, 0x4a, 0x07, 0x15, 0xe5, 0xb4,
+ 0xef, 0xe1, 0x4c, 0x26, 0xfb, 0x15, 0x7d, 0xdb, 0xde, 0x12, 0x11, 0xe8, 0xbf,
+ 0xf3, 0xa7, 0x56, 0xfb, 0xbc, 0x32, 0xd0, 0x05, 0xfe, 0xfd, 0xca, 0xef, 0x0a,
+ 0x0f, 0xc3, 0xf7, 0xfd, 0xf8, 0x13, 0x16, 0x1b, 0x0d, 0xc9, 0xc0, 0xeb, 0xbb,
+ 0x43, 0xd1, 0xef, 0x48, 0xe9, 0xd5, 0xeb, 0xee, 0xd8, 0x24, 0x2c, 0xfe, 0x01,
+ 0x19, 0xd7, 0x05, 0xe8, 0x2c, 0xcb, 0x01, 0x1b, 0xf7, 0xe1, 0x0a, 0xea, 0x4f,
+ 0x27, 0xdc, 0xca, 0x1d, 0x41, 0xdb, 0x01, 0x5d, 0xd5, 0xda, 0x14, 0xfd, 0xf5,
+ 0xe0, 0xdf, 0x13, 0x08, 0x38, 0x4b, 0xef, 0xd3, 0xc7, 0x14, 0x00, 0x24, 0xe4,
+ 0xb3, 0x38, 0x3e, 0xe7, 0x11, 0x1e, 0x20, 0x13, 0x15, 0xd7, 0x06, 0xf1, 0xb7,
+ 0xfc, 0xda, 0xd8, 0x02, 0x09, 0xc7, 0xfa, 0xc2, 0xfe, 0x1b, 0xfd, 0xe3, 0xba,
+ 0x15, 0xf6, 0x02, 0x08, 0x03, 0x7f, 0x01, 0xf7, 0x1c, 0xc2, 0x05, 0xe8, 0xfe,
+ 0xf9, 0x0e, 0xd1, 0x50, 0xe4, 0xe1, 0x02, 0xc8, 0x3d, 0xec, 0x56, 0x0b, 0x16,
+ 0x09, 0x19, 0x19, 0x33, 0x10, 0x0f, 0xee, 0xcb, 0xe9, 0xd5, 0x07, 0xe3, 0x3b,
+ 0xef, 0x05, 0x1f, 0x2f, 0x19, 0x44, 0x2d, 0xee, 0x25, 0x06, 0x0e, 0x00, 0x11,
+ 0x1a, 0x46, 0x07, 0x26, 0x1b, 0x1f, 0xbe, 0xf2, 0x25, 0xcb, 0xe2, 0xee, 0xeb,
+ 0xe2, 0x08, 0x0b, 0x17, 0xfc, 0xe5, 0xc6, 0xfe, 0xd3, 0x1b, 0xc2, 0x19, 0x19,
+ 0x14, 0x3a, 0x10, 0x35, 0x1a, 0x7a, 0xfe, 0x1d, 0xfe, 0xfb, 0x09, 0x0f, 0xca,
+ 0x25, 0x49, 0x2c, 0xb0, 0xf9, 0xd3, 0xcb, 0xdb, 0x19, 0x4e, 0xd5, 0xed, 0xe0,
+ 0xec, 0x4a, 0xfe, 0xee, 0xcf, 0xec, 0x03, 0xf6, 0x2b, 0xcc, 0x18, 0x1a, 0xe6,
+ 0xf2, 0x09, 0xdc, 0xcf, 0xe2, 0x07, 0x01, 0xf6, 0xe7, 0x00, 0xdb, 0xb4, 0xc0,
+ 0x19, 0xdf, 0x07, 0x59, 0xd0, 0x43, 0xea, 0xc8, 0xd2, 0x81, 0xf3, 0xec, 0x08,
+ 0xed, 0x0f, 0xd9, 0xe4, 0xf5, 0xd7, 0xcd, 0x3d, 0x0d, 0xe6, 0x60, 0xf6, 0xd7,
+ 0x60, 0xf6, 0x04, 0x0b, 0xfb, 0xfb, 0x17, 0xf5, 0xec, 0xef, 0xe6, 0x10, 0xe0,
+ 0xc2, 0x00, 0x2a, 0xd4, 0xfe, 0x11, 0x20, 0xd9, 0xe8, 0xf5, 0x0c, 0xde, 0x22,
+ 0x05, 0x36, 0xb1, 0xd5, 0x0e, 0xcd, 0x1d, 0xda, 0x02, 0xfc, 0x03, 0xdd, 0x51,
+ 0xdd, 0x0a, 0xf9, 0xe9, 0x0e, 0xf9, 0xf3, 0xcd, 0xcc, 0xf4, 0x24, 0x1a, 0x08,
+ 0xf2, 0x23, 0xeb, 0xed, 0xce, 0xff, 0xdf, 0x0f, 0xf3, 0xc4, 0xeb, 0x12, 0xef,
+ 0x1b, 0x47, 0xca, 0xc6, 0xd0, 0x01, 0xfd, 0x32, 0xea, 0x1e, 0xfc, 0xba, 0xdd,
+ 0x14, 0x0f, 0xe3, 0xef, 0xe8, 0xca, 0x19, 0xfb, 0xdd, 0x12, 0x15, 0xf6, 0x02,
+ 0x1f, 0x20, 0x0e, 0xe5, 0x0e, 0x03, 0xf7, 0xe9, 0x06, 0xf4, 0xde, 0x22, 0xee,
+ 0x50, 0x50, 0x14, 0xef, 0x16, 0xd7, 0xce, 0x15, 0xf3, 0xfe, 0x2d, 0xe2, 0xf8,
+ 0xdf, 0x1d, 0xfa, 0x0a, 0x5d, 0xf1, 0x0c, 0x1f, 0x3e, 0xfe, 0x4b, 0x00, 0xc0,
+ 0xbf, 0x02, 0x04, 0x10, 0x1f, 0x37, 0xd9, 0x2a, 0x08, 0xe4, 0xfb, 0x27, 0x1b,
+ 0xe9, 0xdc, 0xde, 0x33, 0xf7, 0x10, 0xd9, 0xf0, 0xff, 0x50, 0x27, 0xf1, 0x1e,
+ 0x24, 0x40, 0xd2, 0x06, 0x17, 0x11, 0x17, 0xf3, 0xdf, 0x11, 0xe6, 0x18, 0x29,
+ 0xff, 0xe3, 0xd2, 0xd6, 0xcd, 0xf4, 0x0a, 0xf1, 0x0d, 0x6d, 0x08, 0x11, 0xfc,
+ 0x07, 0xd6, 0xc8, 0x25, 0xbe, 0x04, 0x02, 0x1c, 0xf5, 0x01, 0x2f, 0x0a, 0x0e,
+ 0xd9, 0xf4, 0xdf, 0x1d, 0xe6, 0xd2, 0x02, 0xda, 0x2c, 0xc4, 0x00, 0xed, 0x21,
+ 0xeb, 0xcf, 0x2a, 0xf4, 0xb5, 0xfc, 0xb4, 0xc9, 0x03, 0xeb, 0xf4, 0xdd, 0x04,
+ 0xf4, 0x07, 0xdd, 0x10, 0xf8, 0xea, 0xdd, 0xf5, 0x06, 0xad, 0xce, 0xd6, 0xf7,
+ 0x1a, 0x21, 0xdc, 0x3d, 0xd7, 0x29, 0xf8, 0xed, 0x1b, 0x0d, 0xc7, 0x08, 0xcf,
+ 0xc4, 0x2a, 0xe3, 0x2c, 0xec, 0x27, 0x1f, 0xbe, 0x28, 0xd8, 0xe0, 0xab, 0xb5,
+ 0xf0, 0xd1, 0xd0, 0xeb, 0x41, 0xeb, 0x11, 0x06, 0xd8, 0xb9, 0xd4, 0x37, 0xce,
+ 0x09, 0x1b, 0x07, 0xf0, 0x0b, 0xde, 0xe4, 0xf4, 0x04, 0xd9, 0x2d, 0x1d, 0xf0,
+ 0xf9, 0x03, 0xf1, 0xb5, 0xe2, 0xd1, 0xf2, 0x38, 0xf0, 0x04, 0xc8, 0xb4, 0xf8,
+ 0x18, 0xc7, 0x56, 0xfe, 0x0a, 0xe3, 0x16, 0xfd, 0x26, 0xfd, 0xeb, 0xdf, 0x09,
+ 0xf5, 0xdc, 0x15, 0x04, 0xd6, 0xd1, 0x22, 0x18, 0x81, 0x0c, 0xdd, 0xb7, 0x05,
+ 0xda, 0xec, 0x25, 0xed, 0x12, 0x18, 0x56, 0xc9, 0xab, 0xd2, 0x06, 0xe2, 0xeb,
+ 0xe5, 0xb3, 0xc6, 0xec, 0xf3, 0x22, 0xaa, 0xfb, 0x09, 0x10, 0xe8, 0xd9, 0xfe,
+ 0xdc, 0x03, 0x45, 0xed, 0x18, 0x0f, 0xab, 0xfd, 0xdf, 0xeb, 0xe1, 0x19, 0xb3,
+ 0xd1, 0xfc, 0xd5, 0x3f, 0x1a, 0x04, 0x9e, 0xfc, 0x1c, 0x28, 0xb4, 0xd7, 0xf4,
+ 0xe2, 0xcc, 0xf3, 0x48, 0x24, 0xcb, 0x41, 0xf1, 0x02, 0xf1, 0xbf, 0x07, 0xf3,
+ 0x5c, 0xff, 0xcb, 0xd0, 0xe8, 0xc6, 0x65, 0xf3, 0xb2, 0x27, 0x2a, 0xe7, 0xc4,
+ 0xd0, 0x0d, 0x93, 0x06, 0xdc, 0xe7, 0x0d, 0x30, 0x34, 0xf8, 0x03, 0x23, 0xf5,
+ 0x07, 0xc1, 0xfa, 0x2f, 0xe8, 0x05, 0x10, 0xd0, 0x36, 0x31, 0xe6, 0xfa, 0x9a,
+ 0x99, 0xd7, 0x01, 0x0b, 0x23, 0xee, 0xea, 0x1f, 0x02, 0xd3, 0x40, 0xb5, 0xb6,
+ 0x9f, 0xfb, 0xd8, 0x11, 0xce, 0x01, 0xf9, 0xe4, 0xf3, 0xcb, 0xb2, 0xfb, 0xd6,
+ 0xf0, 0x1b, 0x25, 0xe4, 0x14, 0xea, 0xa6, 0x2b, 0xee, 0xe5, 0x08, 0xff, 0x54,
+ 0x13, 0xc7, 0xd9, 0xda, 0x31, 0xeb, 0x18, 0x0a, 0x01, 0xca, 0x0d, 0x57, 0x2d,
+ 0x05, 0x02, 0xe8, 0x06, 0xfc, 0xee, 0x22, 0xcc, 0xfd, 0x5e, 0x18, 0xfe, 0xf8,
+ 0xef, 0x3a, 0x9d, 0x09, 0x1e, 0xd5, 0xa7, 0xce, 0x4d, 0x0e, 0xf7, 0xd0, 0xfc,
+ 0xd0, 0xcf, 0xb5, 0xf6, 0x3d, 0x15, 0x18, 0xe1, 0x9a, 0xe1, 0xdc, 0x09, 0x15,
+ 0x21, 0x4e, 0xf5, 0x50, 0x30, 0xce, 0xc2, 0x11, 0xe2, 0xe1, 0x2e, 0xe1, 0x2d,
+ 0xd7, 0x11, 0xd4, 0xf3, 0x3f, 0x17, 0xa1, 0xc1, 0xce, 0xf4, 0x47, 0xdc, 0x4e,
+ 0xf6, 0xf3, 0x30, 0x61, 0xd6, 0xc4, 0x11, 0xe2, 0xe7, 0x9e, 0x07, 0xee, 0xda,
+ 0x4c, 0x41, 0xb8, 0x22, 0x47, 0xa9, 0xea, 0x10, 0xc4, 0x59, 0x91, 0xed, 0x8e,
+ 0x38, 0xe5, 0x5a, 0x22, 0xe6, 0x3b, 0x7f, 0x34, 0xeb, 0xbf, 0x08, 0xb4, 0x05,
+ 0x46, 0xa8, 0xe8, 0xc5, 0x1d, 0x23, 0xed, 0xcc, 0x4f, 0xf0, 0x11, 0x20, 0x20,
+ 0x33, 0xeb, 0xf6, 0x77, 0xf6, 0x0d, 0xa0, 0xfa, 0x8d, 0x49, 0xcc, 0x15, 0x09,
+ 0x0a, 0x35, 0xdc, 0xb3, 0x4e, 0xdc, 0x31, 0x0b, 0xd6, 0xb0, 0x0c, 0xff, 0x64,
+ 0xf9, 0xc8, 0xe8, 0x3c, 0xea, 0x46, 0x11, 0x26, 0xf6, 0x9a, 0x1f, 0xe5, 0x36,
+ 0x32, 0xf5, 0x0f, 0x4f, 0xdb, 0x0d, 0xd2, 0x0e, 0xff, 0x2b, 0xda, 0xca, 0xa8,
+ 0x26, 0xeb, 0xdd, 0x05, 0x1b, 0xa0, 0x07, 0x8a, 0x38, 0x27, 0x3a, 0x18, 0x01,
+ 0xbe, 0xbe, 0x3e, 0xd9, 0x01, 0xc6, 0x44, 0xb4, 0xdf, 0x1f, 0x16, 0xb9, 0x21,
+ 0xfb, 0xd8, 0xf2, 0xa3, 0xd5, 0xf5, 0xf2, 0x06, 0xc5, 0xc5, 0xf7, 0x3f, 0xd3,
+ 0x41, 0xf8, 0xd1, 0xf9, 0xe0, 0xbf, 0x0e, 0xdb, 0x94, 0xe5, 0x05, 0x03, 0xfe,
+ 0xd2, 0x3b, 0xf0, 0x01, 0xcc, 0x04, 0x98, 0x15, 0x09, 0xae, 0xa4, 0x22, 0x2b,
+ 0xab, 0x03, 0x21, 0x2c, 0x30, 0x38, 0x44, 0xee, 0x12, 0xf9, 0xfe, 0x15, 0xb1,
+ 0x49, 0x5d, 0x01, 0x9c, 0x31, 0x91, 0x3d, 0xeb, 0x1d, 0xa9, 0xe0, 0xe7, 0xcf,
+ 0xde, 0x26, 0xcf, 0xef, 0x14, 0x0f, 0xbc, 0x0d, 0xe9, 0x96, 0xe0, 0xec, 0xe8,
+ 0xc7, 0x1c, 0x06, 0xe1, 0xc2, 0xe0, 0xff, 0xdc, 0xfc, 0xf3, 0xe2, 0xe2, 0x01,
+ 0x21, 0xd3, 0x3b, 0xf3, 0x18, 0x19, 0xff, 0xe4, 0xcf, 0xbf, 0xe9, 0xd0, 0x39,
+ 0xe2, 0x12, 0xe6, 0xf2, 0xf3, 0xf9, 0xe8, 0xe2, 0xf5, 0xf6, 0x29, 0x9b, 0xa9,
+ 0x74, 0xb8, 0xef, 0xb4, 0xef, 0xc4, 0xfe, 0x35, 0x27, 0x0a, 0x05, 0xf9, 0x03,
+ 0x15, 0x15, 0xd9, 0x12, 0x29, 0xf6, 0xeb, 0x2d, 0x0c, 0x16, 0xf7, 0xee, 0xc2,
+ 0xb9, 0x1d, 0xd5, 0xef, 0x46, 0xf1, 0x0f, 0xe0, 0x07, 0xcf, 0xc6, 0x1d, 0xec,
+ 0x07, 0x11, 0x26, 0xf4, 0xde, 0xc1, 0xf0, 0xea, 0x1a, 0xda, 0xe5, 0x3b, 0x34,
+ 0xd4, 0xd6, 0x0a, 0xf9, 0xc6, 0xe0, 0x0b, 0xdf, 0x1b, 0xb4, 0xfa, 0xf0, 0xf7,
+ 0x0a, 0x0e, 0xcc, 0xcd, 0x01, 0xd6, 0x9f, 0xbf, 0xdc, 0xe0, 0xee, 0xe8, 0xf7,
+ 0xd9, 0x50, 0x25, 0x13, 0xfb, 0xe9, 0xb0, 0xe5, 0xfb, 0x4a, 0xd3, 0x02, 0xad,
+ 0x34, 0xc4, 0xf8, 0xf9, 0xe3, 0x5f, 0xfa, 0x01, 0xf0, 0xff, 0xf7, 0x0e, 0xf2,
+ 0xca, 0xe6, 0xfb, 0x0f, 0x08, 0xf2, 0xfb, 0x11, 0xe2, 0x15, 0xcc, 0xd5, 0x19,
+ 0x08, 0xad, 0xeb, 0x1a, 0xe5, 0x14, 0xd4, 0xf0, 0xf3, 0x0a, 0x1f, 0x1a, 0xf0,
+ 0xf7, 0x17, 0x19, 0xda, 0x1e, 0xf4, 0x20, 0x07, 0xdb, 0xe0, 0xb4, 0xef, 0x3c,
+ 0x03, 0xe2, 0xf0, 0xca, 0x44, 0xfa, 0xea, 0xf2, 0xec, 0xef, 0xfa, 0x14, 0xc5,
+ 0x3e, 0x1b, 0x2f, 0xfc, 0x07, 0xe3, 0x05, 0x24, 0xf3, 0xec, 0x10, 0x7f, 0xfe,
+ 0xed, 0x28, 0xee, 0x98, 0x1e, 0xe1, 0xb4, 0xee, 0x0d, 0xbe, 0x04, 0x3a, 0xcf,
+ 0xdb, 0xa5, 0xda, 0xd9, 0xed, 0x2a, 0x31, 0x00, 0xfe, 0xfb, 0xf9, 0xe7, 0xfa,
+ 0xa4, 0xc6, 0xe2, 0x02, 0xea, 0xfc, 0xeb, 0x14, 0xed, 0x11, 0x28, 0xd6, 0xd7,
+ 0xed, 0xef, 0xf1, 0xef, 0xc9, 0xe4, 0xf6, 0xe5, 0x47, 0x21, 0x0e, 0xcf, 0xa0,
+ 0x40, 0xce, 0xe1, 0x3c, 0xe9, 0xd9, 0xbd, 0x13, 0x14, 0x01, 0xe0, 0xc7, 0xef,
+ 0x39, 0xf1, 0x06, 0x09, 0x32, 0x30, 0x95, 0x10, 0xf4, 0x45, 0xd0, 0x1c, 0xe1,
+ 0xaa, 0x2f, 0x18, 0xeb, 0xc9, 0xf3, 0xa4, 0x1f, 0xd4, 0xda, 0x0e, 0xd0, 0x3a,
+ 0xfc, 0xf6, 0xa3, 0x20, 0xe2, 0xfa, 0x09, 0x5b, 0x17, 0x26, 0x25, 0x08, 0xf7,
+ 0xed, 0x2d, 0x18, 0xc9, 0xfb, 0xc0, 0xe0, 0x09, 0xdb, 0x02, 0x0f, 0xf1, 0xdd,
+ 0xbd, 0xba, 0xd8, 0xbd, 0x12, 0xca, 0xbb, 0xcf, 0xf5, 0x3a, 0x34, 0xf9, 0xfe,
+ 0xd7, 0x10, 0xfa, 0x0c, 0xfa, 0xe5, 0x23, 0x04, 0xf7, 0xf1, 0x0f, 0xde, 0xcf,
+ 0x90, 0x31, 0x05, 0x4b, 0xfa, 0xe6, 0xef, 0xf4, 0xd9, 0x01, 0x03, 0x39, 0x02,
+ 0xa8, 0xe7, 0xf5, 0x13, 0x36, 0xd9, 0xff, 0x90, 0xbe, 0xf0, 0x02, 0x45, 0xb4,
+ 0xc2, 0x22, 0x28, 0x9f, 0xed, 0xf5, 0x13, 0x15, 0xfd, 0x18, 0xeb, 0x3b, 0x22,
+ 0x00, 0xfa, 0xdd, 0xe4, 0xcc, 0xd1, 0x25, 0x28, 0xf2, 0xb8, 0xde, 0x16, 0x25,
+ 0x0f, 0x0e, 0xe5, 0xcd, 0xf1, 0x1e, 0x29, 0xe1, 0xfb, 0x2b, 0xb6, 0xe4, 0x02,
+ 0x00, 0xe3, 0x29, 0xe1, 0xda, 0x4d, 0xf2, 0xf7, 0x03, 0xc3, 0xed, 0xc8, 0x28,
+ 0xf8, 0xdd, 0xfe, 0x45, 0xf2, 0xb0, 0xe7, 0x31, 0xd0, 0xf7, 0xf5, 0xdd, 0x2e,
+ 0x18, 0xc7, 0x03, 0xeb, 0xbb, 0xd4, 0xb9, 0x2c, 0xd6, 0xef, 0xea, 0x29, 0xf2,
+ 0xfb, 0x0f, 0xa6, 0xcd, 0x32, 0xe9, 0xf5, 0xed, 0x2c, 0xe3, 0xe6, 0x10, 0xb0,
+ 0xd0, 0x49, 0xef, 0xfb, 0xab, 0xeb, 0xf7, 0xfd, 0x31, 0xef, 0xdf, 0xec, 0x08,
+ 0xd9, 0x35, 0x81, 0xc6, 0x24, 0xf0, 0x5a, 0xb0, 0x30, 0x3d, 0xe9, 0xbc, 0xdc,
+ 0xd8, 0x1b, 0xf2, 0xcc, 0x1c, 0xaf, 0x98, 0x09, 0xac, 0x38, 0xda, 0x05, 0x0a,
+ 0x3b, 0xcf, 0x28, 0xff, 0x35, 0xdc, 0x07, 0x20, 0x27, 0x57, 0xe3, 0xc4, 0x08,
+ 0x16, 0x0d, 0x30, 0x81, 0xab, 0x15, 0xe1, 0x10, 0x27, 0xa8, 0xd1, 0xcd, 0x42,
+ 0x0a, 0xf0, 0xed, 0x0d, 0x08, 0xc7, 0x30, 0xe3, 0x38, 0x0b, 0x24, 0xe6, 0x26,
+ 0x30, 0x59, 0x1b, 0xac, 0xf4, 0xc6, 0xb0, 0xdd, 0x52, 0x15, 0xb3, 0x2f, 0x8b,
+ 0x0a, 0xb8, 0xc2, 0x53, 0x1f, 0xae, 0x05, 0xf7, 0x45, 0x9e, 0xb9, 0xb4, 0x2d,
+ 0xe0, 0x10, 0xe3, 0x07, 0x1e, 0xef, 0xd1, 0x39, 0x9b, 0x34, 0xe6, 0x17, 0x5c,
+ 0xec, 0xc4, 0xe4, 0xf8, 0x42, 0xf9, 0xdd, 0x2a, 0x10, 0xb8, 0xa4, 0x24, 0xf8,
+ 0x00, 0x53, 0xd0, 0x0e, 0xdc, 0x9b, 0x26, 0x7d, 0xfa, 0x1f, 0x3d, 0xe7, 0xeb,
+ 0xc5, 0xf1, 0xc3, 0x0d, 0xeb, 0xc6, 0x27, 0x11, 0x4b, 0xd0, 0x13, 0xf3, 0xc5,
+ 0x05, 0x35, 0x2f, 0x06, 0xcc, 0xb9, 0x2a, 0xc4, 0x24, 0xef, 0x39, 0xf7, 0xa9,
+ 0xcf, 0xdf, 0xb0, 0xfd, 0xa3, 0x16, 0x23, 0x16, 0x00, 0xe5, 0xbd, 0xc8, 0xed,
+ 0xdf, 0x84, 0x03, 0xc2, 0x03, 0x27, 0xee, 0xf5, 0xf0, 0xde, 0x2a, 0x16, 0x01,
+ 0xba, 0xd6, 0xe0, 0x08, 0xf6, 0x10, 0xd0, 0x13, 0xeb, 0x31, 0x17, 0x2b, 0xc1,
+ 0x20, 0xfa, 0xeb, 0xf1, 0x21, 0x11, 0xe4, 0xc4, 0xf8, 0xfd, 0xf3, 0x46, 0x25,
+ 0x17, 0xfd, 0xe0, 0xfb, 0x00, 0xd9, 0xdb, 0xa4, 0xdc, 0x02, 0xae, 0xfa, 0xe0,
+ 0xd8, 0xe2, 0xf0, 0x11, 0xf2, 0x1d, 0x2f, 0x44, 0x0d, 0x28, 0x14, 0xb4, 0x06,
+ 0xe0, 0xe2, 0x36, 0x41, 0xf0, 0xc9, 0xf5, 0xd5, 0x47, 0x54, 0xda, 0xdd, 0x8a,
+ 0x04, 0xed, 0xae, 0x08, 0x64, 0xba, 0x60, 0xfc, 0x11, 0xe2, 0x05, 0x01, 0x6b,
+ 0x07, 0xf5, 0xc9, 0x14, 0xd5, 0xfd, 0x18, 0xf0, 0x2f, 0x06, 0xf9, 0x19, 0xf2,
+ 0x2c, 0x52, 0xa9, 0x76, 0xe0, 0xd4, 0xae, 0xc2, 0xdb, 0xd4, 0xef, 0xb9, 0xee,
+ 0x44, 0x1c, 0x13, 0xf2, 0xdc, 0xfb, 0xfc, 0xb2, 0xed, 0xed, 0xf4, 0x0a, 0xbd,
+ 0xee, 0xfa, 0xdd, 0xf6, 0xec, 0xfb, 0xda, 0xb2, 0xf9, 0x0e, 0xf1, 0x2c, 0x1d,
+ 0x08, 0xde, 0xcd, 0xf0, 0x0d, 0x0a, 0xfe, 0xbc, 0xdd, 0xfa, 0x30, 0x18, 0xd7,
+ 0x08, 0xcc, 0xd3, 0xf7, 0x03, 0x09, 0x15, 0x00, 0xfe, 0x0e, 0xd0, 0xed, 0x35,
+ 0x0c, 0xb6, 0xf3, 0xbb, 0x3d, 0xec, 0xf5, 0x23, 0xfe, 0x26, 0x5c, 0xed, 0x06,
+ 0xd1, 0xaf, 0xe7, 0x21, 0x37, 0xde, 0xd9, 0x28, 0x7f, 0x0d, 0x17, 0x16, 0x13,
+ 0xa0, 0xfc, 0xf2, 0xd5, 0x26, 0xbb, 0xdc, 0x19, 0x1d, 0x3f, 0x43, 0xd7, 0xed,
+ 0xfa, 0xcd, 0x0f, 0x94, 0x22, 0xfd, 0x1c, 0xfd, 0xe2, 0xf6, 0xde, 0x03, 0x04,
+ 0x20, 0xcd, 0xc7, 0x9d, 0x29, 0x0b, 0xf5, 0xec, 0xfc, 0x48, 0xfb, 0x70, 0xef,
+ 0xbc, 0xd8, 0x13, 0xc8, 0x48, 0xfc, 0xdf, 0x31, 0xeb, 0x42, 0xcd, 0xee, 0xcf,
+ 0x28, 0x1f, 0xf7, 0xaa, 0x0f, 0xd6, 0xd9, 0xd0, 0xfa, 0xda, 0xb7, 0xfc, 0x01,
+ 0xbb, 0x22, 0xe5, 0xe2, 0x1e, 0xf0, 0x00, 0x0d, 0x06, 0xc9, 0xd7, 0xea, 0xef,
+ 0x20, 0x02, 0xbd, 0x0e, 0xec, 0x19, 0xed, 0x12, 0xff, 0xdb, 0x00, 0x40, 0xed,
+ 0xec, 0xb7, 0xd5, 0xd5, 0x02, 0xd2, 0xdc, 0x17, 0xcb, 0x0c, 0xed, 0xe7, 0x01,
+ 0x0c, 0xe0, 0xd5, 0xf0, 0x23, 0xdb, 0xe0, 0xfc, 0x0f, 0xf6, 0x25, 0x21, 0xfd,
+ 0xf3, 0x45, 0x05, 0x19, 0x10, 0x12, 0xcb, 0xf6, 0x2d, 0x99, 0xdf, 0x36, 0xfd,
+ 0xb5, 0xee, 0xe3, 0xdf, 0x41, 0xf3, 0x03, 0xea, 0xd0, 0x03, 0xdb, 0x20, 0x1f,
+ 0x30, 0xf8, 0x3b, 0x15, 0x08, 0xc0, 0xe1, 0xff, 0xf2, 0xf0, 0x0b, 0xf0, 0x19,
+ 0x71, 0x0d, 0xe8, 0xcb, 0xd2, 0xf1, 0x27, 0xed, 0xeb, 0x12, 0xd6, 0xfd, 0x5a,
+ 0xf4, 0x37, 0x17, 0xd6, 0xb9, 0x23, 0xdc, 0x02, 0xad, 0x0d, 0xf7, 0xcb, 0xc4,
+ 0xb8, 0x3e, 0x15, 0xf8, 0xec, 0xfd, 0x06, 0xd1, 0xa0, 0xe0, 0x4c, 0x34, 0xef,
+ 0xb7, 0xef, 0xdc, 0x27, 0xbd, 0x01, 0xc3, 0x3e, 0xf1, 0xda, 0xd7, 0xa1, 0xde,
+ 0xfe, 0x39, 0xee, 0xaa, 0x09, 0xdd, 0xf4, 0xc8, 0x00, 0xaa, 0xc7, 0xc3, 0x19,
+ 0x08, 0x33, 0xf0, 0xe5, 0x24, 0x3b, 0x14, 0xf1, 0xc2, 0xcc, 0xcd, 0xea, 0xe0,
+ 0x44, 0xdd, 0xca, 0xbd, 0xf3, 0xd1, 0x01, 0xfe, 0x45, 0x26, 0x0c, 0xe3, 0x10,
+ 0x2d, 0x0e, 0x24, 0xd0, 0xd7, 0x32, 0xcf, 0x25, 0xf3, 0x2b, 0xe1, 0x04, 0xfe,
+ 0xf7, 0x2b, 0xdb, 0x02, 0x37, 0x11, 0xce, 0xcb, 0x39, 0x12, 0xbc, 0xf1, 0x0d,
+ 0x1e, 0xf8, 0x04, 0x49, 0x00, 0xd7, 0xe3, 0xd6, 0xf8, 0xe5, 0xf2, 0x38, 0x16,
+ 0x11, 0xde, 0xd4, 0xee, 0x29, 0xee, 0x14, 0x1a, 0xfc, 0x1f, 0xc2, 0xfc, 0x51,
+ 0xaf, 0xe2, 0x1f, 0xbf, 0xf5, 0xdf, 0x23, 0xcd, 0xc7, 0x05, 0xce, 0xd3, 0xf8,
+ 0x0e, 0xfa, 0x56, 0xef, 0xcf, 0x4d, 0xfb, 0xa6, 0xd2, 0x08, 0xe2, 0xe6, 0xde,
+ 0x2c, 0xe8, 0xc7, 0x27, 0xa8, 0xf1, 0xd2, 0xe6, 0x15, 0x0d, 0xf9, 0xfc, 0xd8,
+ 0x49, 0x2c, 0x2a, 0xd5, 0x0d, 0xf6, 0x13, 0x1c, 0x14, 0xe3, 0x15, 0x0a, 0x06,
+ 0xf1, 0x2e, 0x08, 0xfd, 0x2b, 0xf2, 0x81, 0x02, 0xcd, 0x3e, 0xd5, 0xe3, 0xb0,
+ 0xd3, 0x22, 0x13, 0x09, 0xd5, 0xc8, 0x25, 0xe0, 0x20, 0x21, 0xde, 0xf8, 0xf1,
+ 0xc1, 0x0b, 0xf8, 0xbd, 0xd7, 0x0b, 0x2e, 0xeb, 0xe5, 0xeb, 0xa5, 0xee, 0x01,
+ 0x17, 0xe7, 0xe7, 0xbd, 0xcf, 0xdd, 0xff, 0x19, 0xea, 0xec, 0xe7, 0xf3, 0x35,
+ 0xd0, 0x11, 0xb8, 0xae, 0x19, 0xef, 0x4e, 0xd7, 0xaf, 0xde, 0xf9, 0xa7, 0x14,
+ 0xf3, 0xed, 0xe8, 0x14, 0xeb, 0xd1, 0xad, 0xce, 0xff, 0xd3, 0xff, 0x2d, 0x56,
+ 0xbe, 0xee, 0xba, 0xc1, 0xae, 0x44, 0xe9, 0xe5, 0xc0, 0x21, 0xf2, 0xc6, 0xf7,
+ 0xce, 0x02, 0xfb, 0xa6, 0x47, 0x1f, 0x30, 0x05, 0x03, 0xf6, 0xd9, 0xdf, 0xc0,
+ 0xdb, 0x11, 0xf3, 0xa8, 0xd9, 0x12, 0xcc, 0x93, 0xe3, 0x37, 0xff, 0xd1, 0xe0,
+ 0xeb, 0xdf, 0xdb, 0x11, 0xcf, 0xdf, 0x36, 0xe9, 0xb7, 0x00, 0xf7, 0x1b, 0xad,
+ 0xd6, 0xe6, 0x24, 0x31, 0x19, 0x06, 0x03, 0xcd, 0xe7, 0x01, 0x19, 0xf6, 0xf9,
+ 0xf9, 0x2b, 0xfc, 0xed, 0x18, 0xb6, 0x5a, 0xe3, 0x0c, 0xd8, 0x07, 0x32, 0x15,
+ 0x1b, 0xf5, 0xc1, 0xe0, 0x37, 0xcd, 0x25, 0xd2, 0xcb, 0x43, 0x4d, 0xd6, 0x0f,
+ 0x17, 0xcc, 0xe4, 0x1f, 0xcd, 0x9a, 0x3e, 0x1b, 0x0a, 0x30, 0xed, 0xcd, 0x2a,
+ 0x44, 0xc7, 0xfa, 0xf9, 0x0f, 0xd0, 0xe3, 0xf5, 0x8b, 0xf6, 0xa7, 0xc4, 0x9f,
+ 0xdf, 0xe4, 0x12, 0x22, 0xd2, 0x26, 0x12, 0xfa, 0x19, 0xdc, 0xb9, 0x1b, 0x2b,
+ 0x09, 0x09, 0x57, 0x93, 0x95, 0x02, 0xea, 0xef, 0x16, 0xf3, 0x3e, 0x04, 0xf1,
+ 0xe3, 0xf2, 0x32, 0xc4, 0x43, 0x29, 0xd1, 0x33, 0xfa, 0xcd, 0x05, 0x4d, 0x24,
+ 0xe0, 0xd1, 0x1e, 0x28, 0x14, 0x50, 0xfb, 0x1e, 0x0e, 0xe7, 0x09, 0xc4, 0x0c,
+ 0xed, 0x08, 0x09, 0xbc, 0xf7, 0xe4, 0x00, 0xf4, 0xeb, 0x0e, 0x08, 0xf2, 0xfd,
+ 0x05, 0x07, 0x19, 0xba, 0x3e, 0xcc, 0xcb, 0x40, 0xea, 0x01, 0xf4, 0xb8, 0xee,
+ 0x21, 0xa5, 0xf6, 0x25, 0xf8, 0xe0, 0xeb, 0xe9, 0x34, 0xf3, 0x0f, 0xb2, 0x1e,
+ 0xca, 0xf1, 0xb1, 0xd4, 0xed, 0x04, 0x1c, 0xff, 0xe0, 0x2f, 0xa0, 0xe4, 0x03,
+ 0xa0, 0xf3, 0xd8, 0xf3, 0xfe, 0x23, 0xcf, 0xe7, 0x1a, 0x07, 0x0a, 0xdb, 0x81,
+ 0x75, 0x3f, 0xf1, 0x3f, 0x00, 0x0d, 0x0e, 0xaf, 0xf7, 0x2e, 0xfc, 0x01, 0x01,
+ 0xe5, 0x30, 0x21, 0xfd, 0xd3, 0xd8, 0xf0, 0xfc, 0x27, 0x00, 0x04, 0xfc, 0x3b,
+ 0xef, 0x10, 0xe8, 0x16, 0xfd, 0x15, 0xef, 0x07, 0x03, 0x06, 0x18, 0xe2, 0xd4,
+ 0xf1, 0x2d, 0x0f, 0xe1, 0xd6, 0xc2, 0xeb, 0xf7, 0xae, 0xcd, 0xfa, 0xf1, 0x11,
+ 0xed, 0x00, 0xf3, 0xd2, 0xe0, 0xf8, 0xbe, 0x00, 0x15, 0x23, 0x03, 0x1d, 0xbb,
+ 0xeb, 0x03, 0x05, 0x12, 0x26, 0x0e, 0xdc, 0xef, 0xce, 0xe4, 0xe3, 0x06, 0xef,
+ 0x35, 0x3c, 0x11, 0xeb, 0xfc, 0x0c, 0xf9, 0xde, 0xec, 0x3f, 0xf2, 0x1a, 0xc1,
+ 0xed, 0x06, 0x2d, 0xef, 0xc8, 0xe2, 0xf3, 0xb4, 0xf6, 0x23, 0x03, 0xdd, 0xd0,
+ 0x28, 0x10, 0xca, 0xed, 0xe9, 0x1d, 0x0a, 0xed, 0xd9, 0xfe, 0xd7, 0xe6, 0x21,
+ 0x02, 0xca, 0xda, 0xe2, 0xed, 0x07, 0x3a, 0xf5, 0xd3, 0xe7, 0xd9, 0xed, 0xcf,
+ 0xca, 0x0b, 0x07, 0xee, 0xfe, 0xe6, 0xf2, 0xff, 0xfb, 0x08, 0x0b, 0xe9, 0xf2,
+ 0xf5, 0xda, 0x02, 0xce, 0x33, 0xf4, 0xd1, 0xd7, 0xe1, 0x1b, 0x43, 0xfb, 0xfd,
+ 0xb3, 0xec, 0x19, 0xe5, 0xe1, 0xfc, 0x02, 0xf4, 0x1a, 0xbb, 0x28, 0x06, 0xcc,
+ 0x41, 0x22, 0xd2, 0xf5, 0xf4, 0x0a, 0x02, 0x7f, 0x16, 0xb8, 0xbd, 0xe6, 0xea,
+ 0xf0, 0x0e, 0xf5, 0xf8, 0x01, 0xc0, 0x15, 0xd1, 0xfb, 0xd3, 0xed, 0x13, 0xce,
+ 0xd2, 0xe8, 0x07, 0xf6, 0x00, 0x2c, 0xe3, 0x09, 0xf6, 0xf4, 0x09, 0x11, 0x1e,
+ 0x0d, 0x09, 0x35, 0xf5, 0x18, 0x13, 0xd2, 0xc0, 0xd4, 0x0e, 0xf1, 0x00, 0x17,
+ 0x2d, 0xce, 0xf2, 0x37, 0x33, 0xfe, 0x0f, 0x99, 0xe5, 0xe9, 0x10, 0xd6, 0x05,
+ 0xf9, 0xd5, 0xd8, 0xc6, 0xce, 0x07, 0xd1, 0xbc, 0x15, 0xf9, 0x0c, 0x1c, 0x2a,
+ 0xf1, 0x3d, 0xb9, 0x12, 0x76, 0xba, 0xf4, 0xe8, 0x27, 0x19, 0x1d, 0xf4, 0x15,
+ 0x37, 0x10, 0x06, 0xf3, 0xc3, 0x06, 0xfb, 0x39, 0xdb, 0xee, 0x11, 0xeb, 0x18,
+ 0xf9, 0xe4, 0xe7, 0x55, 0xec, 0xff, 0xd4, 0x14, 0xe4, 0xd3, 0xfa, 0xea, 0xdf,
+ 0x0d, 0xbd, 0xe4, 0xf2, 0x3b, 0x00, 0x06, 0xc7, 0x33, 0xbc, 0xde, 0xf8, 0xe6,
+ 0x01, 0xe6, 0xd7, 0xd7, 0xd8, 0x3c, 0xd7, 0xf8, 0xd0, 0xd5, 0xe7, 0xf3, 0xfe,
+ 0x16, 0xfc, 0xfa, 0xf4, 0x02, 0xd3, 0xfd, 0x37, 0x04, 0xc2, 0x0d, 0xde, 0xed,
+ 0x11, 0x24, 0x0d, 0x1c, 0xf7, 0x01, 0xfd, 0xed, 0xda, 0xd6, 0x3a, 0xb1, 0xda,
+ 0x04, 0xf9, 0xeb, 0xd8, 0xf0, 0xe5, 0x00, 0xe4, 0x0a, 0x3b, 0x05, 0xdc, 0xc9,
+ 0x40, 0xae, 0xdf, 0x12, 0x04, 0x52, 0xf8, 0x3c, 0x29, 0xfe, 0xe3, 0x28, 0xff,
+ 0x03, 0x10, 0xe4, 0x0e, 0x14, 0xec, 0x0c, 0xd0, 0xc5, 0x09, 0xfe, 0xb9, 0xf8,
+ 0xf6, 0x19, 0xdf, 0x29, 0x0d, 0xf4, 0x31, 0xf0, 0xfa, 0x32, 0x0e, 0xd0, 0xd4,
+ 0xf6, 0xfb, 0xf3, 0x2a, 0x08, 0xfe, 0xc4, 0x0e, 0x32, 0xc7, 0xd4, 0xf3, 0x0a,
+ 0xdc, 0xf6, 0xec, 0x10, 0x7f, 0xfa, 0x11, 0xd2, 0xe0, 0x3f, 0x1b, 0xb4, 0x2b,
+ 0x01, 0xd5, 0xeb, 0xe1, 0xef, 0x0c, 0xc1, 0xd0, 0xd3, 0xfe, 0xe8, 0xee, 0x29,
+ 0x11, 0x05, 0xe0, 0x17, 0xc7, 0xf0, 0xe3, 0xe9, 0xd6, 0x05, 0xeb, 0xeb, 0xa2,
+ 0xdc, 0xfd, 0x04, 0x18, 0x03, 0xe8, 0xd1, 0x3a, 0xd0, 0x08, 0xea, 0x11, 0x1b,
+ 0x1e, 0x1c, 0x23, 0xf2, 0xf5, 0x00, 0xf2, 0x1d, 0xf0, 0x01, 0xf5, 0xf0, 0xe2,
+ 0xfe, 0xfc, 0xf7, 0x0b, 0x03, 0xf3, 0x28, 0x04, 0xfc, 0xb4, 0xf6, 0xf5, 0x1f,
+ 0xe3, 0xd9, 0x23, 0x11, 0xb0, 0xe3, 0xe8, 0xe0, 0xe3, 0x0e, 0x23, 0xf0, 0x07,
+ 0x08, 0xc8, 0x0b, 0x1c, 0xe1, 0xd8, 0x0f, 0x1d, 0xf1, 0xf0, 0x24, 0xdb, 0x4d,
+ 0x06, 0x1e, 0x1e, 0xd5, 0x0d, 0x01, 0x0b, 0x03, 0xff, 0xc7, 0xf9, 0x25, 0x04,
+ 0xd5, 0x20, 0x0c, 0x0c, 0xee, 0x26, 0xfc, 0x23, 0x11, 0xfc, 0xd3, 0x06, 0x3c,
+ 0xc4, 0xaf, 0xed, 0xd5, 0xfc, 0xe7, 0x2e, 0xea, 0xf1, 0xf9, 0xfb, 0x03, 0x30,
+ 0xfb, 0xe4, 0xf7, 0xe3, 0x0e, 0xfd, 0xe0, 0xf9, 0x07, 0xf7, 0xcc, 0xfc, 0xe3,
+ 0xe6, 0xd4, 0xe8, 0x1c, 0xff, 0xb3, 0x28, 0xf5, 0xe6, 0xfc, 0x08, 0xd8, 0xe2,
+ 0x0c, 0x0c, 0x4c, 0x10, 0x19, 0x0a, 0xc7, 0x12, 0x14, 0x04, 0x22, 0x0d, 0xdb,
+ 0xe0, 0xe5, 0x26, 0xe5, 0x0e, 0x1b, 0xed, 0x16, 0xc3, 0xd1, 0x7f, 0x07, 0xc1,
+ 0x02, 0x0c, 0x13, 0x2d, 0x11, 0xcc, 0x15, 0xf3, 0x02, 0xed, 0xc4, 0x10, 0xce,
+ 0xc8, 0x1a, 0xeb, 0xf7, 0x19, 0x25, 0xe5, 0x12, 0x20, 0xfe, 0x22, 0xfa, 0xb5,
+ 0xd6, 0xed, 0x1b, 0x0b, 0xd7, 0xfb, 0xb1, 0xdc, 0xff, 0xef, 0x40, 0x2f, 0xf9,
+ 0xf0, 0xd1, 0xd7, 0xe6, 0xe9, 0xf6, 0xe1, 0xeb, 0xe2, 0xea, 0xf0, 0xe0, 0xce,
+ 0xbf, 0x0d, 0xdd, 0xd2, 0x07, 0x09, 0xd0, 0xa1, 0x18, 0x11, 0xdf, 0x0f, 0xcc,
+ 0x2f, 0xe1, 0x3e, 0xf2, 0xfe, 0xbd, 0x05, 0x00, 0xbc, 0xba, 0xb9, 0xf4, 0x03,
+ 0xd4, 0xc6, 0x01, 0xfa, 0xfb, 0x27, 0xfd, 0xef, 0x25, 0xe2, 0x03, 0xf7, 0x30,
+ 0x06, 0xc4, 0x94, 0xf7, 0xe2, 0x0c, 0xeb, 0xd9, 0xf5, 0x14, 0xc6, 0x0b, 0xff,
+ 0x0b, 0x2b, 0xf3, 0x11, 0x24, 0xe5, 0xd8, 0xf6, 0x04, 0x2d, 0x19, 0x1a, 0x0e,
+ 0x18, 0xcd, 0xf8, 0x11, 0x0f, 0x08, 0x2e, 0xdb, 0xe1, 0x3d, 0x05, 0xbd, 0xde,
+ 0x13, 0xf4, 0xd4, 0x0e, 0xd6, 0xe1, 0xcd, 0xfd, 0xde, 0x3a, 0xd0, 0x34, 0xf2,
+ 0xe1, 0xd8, 0x34, 0xc4, 0xdd, 0x11, 0xd2, 0xff, 0xda, 0xf6, 0xec, 0xd1, 0xbd,
+ 0xe4, 0xdd, 0xfc, 0x22, 0x13, 0x1f, 0x38, 0xd0, 0x24, 0x0f, 0xfe, 0x1a, 0xdf,
+ 0xde, 0x2b, 0x35, 0xe8, 0x34, 0x1e, 0x13, 0xf2, 0xfb, 0xac, 0xf1, 0xe6, 0x3d,
+ 0xe7, 0x20, 0xf6, 0x14, 0x0f, 0xe8, 0xfe, 0x26, 0x21, 0xf2, 0xc9, 0x20, 0xc4,
+ 0x2f, 0xc4, 0x33, 0xc9, 0xed, 0xfa, 0xcf, 0x10, 0xe1, 0xd0, 0xa9, 0xcd, 0xe1,
+ 0xfb, 0xf3, 0xfc, 0x4e, 0xcc, 0x2f, 0x19, 0x10, 0x84, 0x18, 0xdf, 0x44, 0x19,
+ 0xf7, 0xb5, 0xc7, 0xdb, 0xca, 0xef, 0x0d, 0x08, 0xf7, 0x81, 0xb1, 0xef, 0xd4,
+ 0x3c, 0xab, 0xc6, 0xbc, 0xef, 0xfd, 0x0c, 0x1e, 0xd6, 0x0a, 0xfa, 0x4f, 0x09,
+ 0xec, 0x39, 0x2c, 0x25, 0xe0, 0xca, 0xf2, 0xff, 0xd1, 0xf8, 0xf7, 0x2e, 0xfd,
+ 0x13, 0x14, 0x09, 0xef, 0x04, 0x01, 0xa9, 0x39, 0x1b, 0xd1, 0x14, 0xdb, 0xc2,
+ 0x08, 0x01, 0x40, 0xd3, 0xff, 0x2b, 0x09, 0xb2, 0xeb, 0x03, 0x01, 0x0c, 0x2b,
+ 0x25, 0xf3, 0xe1, 0xe5, 0xe2, 0x71, 0xf0, 0xfc, 0x0d, 0x04, 0xe7, 0xaf, 0x11,
+ 0xb7, 0x16, 0xf0, 0xf1, 0x40, 0xaf, 0xe5, 0xf0, 0x0d, 0xf7, 0xd3, 0xff, 0x2b,
+ 0xa6, 0x2c, 0xc8, 0x1b, 0xff, 0xb5, 0x03, 0xe1, 0x10, 0xd2, 0xf8, 0x00, 0x15,
+ 0xe0, 0xfd, 0xed, 0x5a, 0xeb, 0x16, 0xed, 0x0b, 0xc2, 0xf6, 0x03, 0x0a, 0xf1,
+ 0xd5, 0x01, 0x24, 0x0e, 0xbe, 0xfa, 0xf1, 0x01, 0x02, 0x28, 0x19, 0xee, 0x1d,
+ 0x15, 0x0e, 0xf2, 0x12, 0xa8, 0x01, 0xee, 0xff, 0x34, 0x11, 0xf0, 0x2f, 0x27,
+ 0xee, 0xf6, 0xeb, 0xfb, 0x09, 0xcb, 0x21, 0x1c, 0x2b, 0x29, 0x10, 0x1e, 0x06,
+ 0x07, 0x20, 0x3c, 0xfa, 0xd9, 0xb6, 0x04, 0x42, 0x30, 0xdd, 0x2d, 0xe8, 0xf6,
+ 0xcd, 0xfb, 0x0a, 0x1d, 0xf2, 0x5f, 0xe6, 0x05, 0x2c, 0x0d, 0xdc, 0x28, 0xec,
+ 0xe6, 0x08, 0xf9, 0x28, 0xca, 0x1b, 0x0e, 0xdd, 0x12, 0xc1, 0xdf, 0x06, 0xe8,
+ 0xeb, 0x3e, 0x25, 0xea, 0xf7, 0xbd, 0xf5, 0xdb, 0xdf, 0xdc, 0x4a, 0x27, 0xff,
+ 0xff, 0x08, 0x19, 0x90, 0x1c, 0xe5, 0x3d, 0xe6, 0xf8, 0xf8, 0xcc, 0x0e, 0xd7,
+ 0xf3, 0x1e, 0xd7, 0xae, 0xd1, 0x14, 0xd2, 0xfa, 0xa2, 0xe6, 0x25, 0x41, 0x39,
+ 0xff, 0x17, 0xef, 0x0e, 0x19, 0xac, 0x11, 0xd1, 0x08, 0x08, 0xc5, 0xf3, 0x27,
+ 0xbb, 0xfd, 0xe9, 0xd5, 0x8e, 0xdf, 0x15, 0xcf, 0xe0, 0xd9, 0xfd, 0x10, 0xe6,
+ 0x28, 0xee, 0x1a, 0xe9, 0xed, 0x81, 0xca, 0x0d, 0xba, 0x0a, 0xc4, 0xd5, 0xe4,
+ 0xe9, 0xd0, 0xdc, 0xf7, 0xa9, 0xe7, 0xbc, 0x40, 0x0b, 0x09, 0xe4, 0xf6, 0xb2,
+ 0x12, 0xf0, 0x69, 0x44, 0x06, 0xef, 0x11, 0x16, 0x54, 0x2f, 0xe8, 0xb4, 0x9d,
+ 0x25, 0xdb, 0x0e, 0x0f, 0xee, 0x17, 0x18, 0x14, 0xbc, 0xfc, 0x0b, 0x27, 0xd5,
+ 0xef, 0xbb, 0x19, 0xd9, 0x01, 0x07, 0xf4, 0x13, 0x45, 0xb3, 0x0d, 0x0b, 0xb2,
+ 0xbb, 0x25, 0x0a, 0x25, 0x00, 0xe2, 0x13, 0xfb, 0xff, 0xb8, 0xe4, 0xf5, 0xdd,
+ 0xbb, 0xff, 0x3a, 0xcb, 0xd6, 0xf5, 0x09, 0x41, 0x10, 0xd5, 0xef, 0xca, 0xf2,
+ 0x31, 0x90, 0x0e, 0x28, 0xed, 0x00, 0xd8, 0x3f, 0xc5, 0xe5, 0xf8, 0x42, 0x3a,
+ 0x30, 0x2a, 0xee, 0xff, 0xd0, 0x2f, 0x0d, 0xb1, 0xe2, 0x07, 0xe3, 0x3a, 0xdb,
+ 0xa2, 0xe7, 0x3d, 0xf5, 0xcf, 0xf7, 0xec, 0x08, 0x3d, 0x29, 0x0d, 0x04, 0xe8,
+ 0x8a, 0xe8, 0xd4, 0x40, 0xdc, 0xf6, 0xeb, 0xc9, 0xd0, 0xdf, 0xeb, 0xec, 0xf9,
+ 0xff, 0xcb, 0x43, 0xef, 0xe3, 0x25, 0x03, 0x19, 0x01, 0x01, 0xd3, 0x21, 0x36,
+ 0x1f, 0x2d, 0x08, 0x2d, 0xce, 0xff, 0xf3, 0xe3, 0x08, 0xeb, 0xf1, 0x02, 0x35,
+ 0x19, 0x62, 0x26, 0xd6, 0xd3, 0x18, 0x37, 0xd9, 0xc5, 0x36, 0x32, 0xf1, 0xb8,
+ 0x59, 0xe3, 0x48, 0xf7, 0xdf, 0xd6, 0xea, 0xd4, 0x30, 0xfb, 0x33, 0x5f, 0xbc,
+ 0xc1, 0xf6, 0xe5, 0xb5, 0x31, 0x02, 0x1f, 0x24, 0xee, 0xe8, 0xe5, 0x6a, 0x9b,
+ 0x02, 0xdd, 0x2f, 0xf5, 0x21, 0x2d, 0x1e, 0xc9, 0x2c, 0x15, 0x08, 0xc5, 0xbe,
+ 0xd5, 0x2d, 0xfc, 0xe3, 0x8b, 0x13, 0xd0, 0xee, 0x0d, 0x1e, 0x66, 0xec, 0x10,
+ 0xe8, 0x1e, 0x2e, 0xeb, 0xdd, 0x45, 0xca, 0xc1, 0xfe, 0xcc, 0xfe, 0xb7, 0xbd,
+ 0xc9, 0xc3, 0x1f, 0xc2, 0xb1, 0x14, 0xae, 0x31, 0xe1, 0xd1, 0x30, 0x07, 0xf3,
+ 0xa8, 0x3e, 0x93, 0x45, 0x2c, 0xed, 0x8f, 0xd1, 0xb8, 0xd0, 0x1a, 0x27, 0xc4,
+ 0xa3, 0xdd, 0x0d, 0x7f, 0x2b, 0x07, 0xde, 0xf9, 0x3b, 0x2f, 0xc2, 0xfd, 0xa0,
+ 0xcb, 0xbb, 0x3a, 0xf7, 0xe7, 0xe0, 0x03, 0x04, 0x06, 0xbc, 0xbc, 0xbf, 0x11,
+ 0x05, 0xda, 0xd6, 0x4e, 0xb7, 0x35, 0xd2, 0x68, 0x1b, 0x39, 0xe1, 0xd0, 0x0d,
+ 0x11, 0x26, 0xcf, 0xeb, 0xef, 0xc7, 0xfd, 0x19, 0xdf, 0xca, 0x43, 0xd1, 0xa5,
+ 0x2c, 0x55, 0x0b, 0x17, 0x31, 0xd7, 0xc9, 0xe7, 0xf3, 0xe2, 0xfe, 0xc4, 0xdd,
+ 0x5c, 0xd5, 0xfe, 0xc6, 0xce, 0x5a, 0x06, 0xbc, 0xa7, 0x55, 0xf4, 0xbf, 0xf0,
+ 0x44, 0x29, 0xe6, 0x2c, 0xd2, 0xa4, 0x27, 0xbb, 0x24, 0xc4, 0xd1, 0xd9, 0xaa,
+ 0xb7, 0xbc, 0xaf, 0xe1, 0x30, 0xa9, 0x9b, 0x13, 0xf1, 0x54, 0x45, 0x21, 0xe8,
+ 0x0d, 0xf0, 0xf3, 0xc5, 0x56, 0x01, 0xf4, 0xee, 0xfa, 0x11, 0x0d, 0x1b, 0xb8,
+ 0xe2, 0xc1, 0xf7, 0xc7, 0xb0, 0xd0, 0x23, 0xfa, 0xec, 0xe2, 0xfb, 0x23, 0xd3,
+ 0x02, 0x44, 0x2f, 0x4b, 0x95, 0x0c, 0x03, 0x41, 0xed, 0x35, 0x14, 0xfb, 0x45,
+ 0xd4, 0xf0, 0xf0, 0xf2, 0x13, 0xc5, 0x25, 0xb4, 0xdb, 0x1b, 0xc2, 0xda, 0xf0,
+ 0x18, 0xd7, 0xdc, 0xcb, 0xac, 0xe2, 0xc8, 0xfe, 0xff, 0x14, 0xee, 0xb4, 0x12,
+ 0xf0, 0xd8, 0xd3, 0xc6, 0xd2, 0xbd, 0x9f, 0xbb, 0x6b, 0xe9, 0x39, 0xbf, 0x14,
+ 0xe5, 0xed, 0x0d, 0xcd, 0xfb, 0xee, 0x57, 0x94, 0xbf, 0x0f, 0x0a, 0xcf, 0x00,
+ 0xf1, 0xdb, 0x0e, 0x2b, 0x05, 0xc0, 0xeb, 0x07, 0xe6, 0x5e, 0x56, 0x11, 0xd9,
+ 0x29, 0x1a, 0x17, 0x0f, 0x3a, 0x04, 0xb4, 0x22, 0x06, 0xf9, 0x0c, 0xe8, 0x33,
+ 0xe1, 0x8c, 0x30, 0xf4, 0xcf, 0x50, 0x32, 0xa6, 0xb1, 0x2c, 0xb1, 0x0a, 0xc0,
+ 0x2f, 0xe4, 0x08, 0xbf, 0xea, 0xff, 0xda, 0xf5, 0x81, 0xc7, 0x0f, 0xeb, 0xe2,
+ 0x53, 0x56, 0xd8, 0xb2, 0xe0, 0xdf, 0x2d, 0x20, 0xf2, 0xec, 0xf0, 0x22, 0xe6,
+ 0x3d, 0x0d, 0x2c, 0x34, 0x05, 0x0c, 0x1b, 0xe7, 0x35, 0x25, 0x41, 0x3e, 0xeb,
+ 0x08, 0x21, 0xc5, 0x22, 0xd8, 0x1a, 0xc0, 0xce, 0x9e, 0x05, 0xc4, 0xf4, 0xa5,
+ 0x23, 0x40, 0x0f, 0xce, 0xc4, 0xf2, 0x49, 0x01, 0xd8, 0x07, 0x27, 0x36, 0xcf,
+ 0x15, 0xf7, 0x02, 0xbf, 0x96, 0xe5, 0xd7, 0x17, 0x59, 0x49, 0x1f, 0x97, 0xe7,
+ 0xdb, 0xd3, 0xea, 0xdb, 0xf7, 0x0a, 0x09, 0x0e, 0xa9, 0xc6, 0x0c, 0xb9, 0xcc,
+ 0x31, 0xd1, 0xd5, 0xc9, 0x01, 0x6d, 0x2d, 0xc6, 0xed, 0xc3, 0xa5, 0xca, 0xdc,
+ 0xdd, 0x97, 0xc1, 0xf8, 0x28, 0xc5, 0x06, 0x1b, 0x3b, 0xdd, 0xc0, 0xf3, 0xc4,
+ 0x2e, 0xf7, 0xf1, 0xeb, 0x20, 0xe8, 0xfe, 0xb6, 0x6b, 0xcf, 0x2c, 0x03, 0xb4,
+ 0xdb, 0x54, 0x05, 0xe3, 0xae, 0x1b, 0x32, 0xc8, 0x0d, 0xa1, 0x15, 0xdf, 0x32,
+ 0x29, 0x17, 0xfc, 0xf5, 0x0b, 0x18, 0x2a, 0x1f, 0x13, 0xbe, 0x09, 0xf5, 0xb8,
+ 0xac, 0xf2, 0x55, 0xd9, 0xbd, 0xca, 0x27, 0x4d, 0xdd, 0xc3, 0x1c, 0xdb, 0x09,
+ 0xe9, 0xd4, 0x0a, 0xae, 0xf3, 0x61, 0x19, 0xb7, 0xff, 0x00, 0xec, 0xfe, 0xf7,
+ 0xbe, 0xf8, 0x61, 0xda, 0xf8, 0x27, 0x2c, 0xd4, 0xfc, 0xf5, 0x42, 0xde, 0xdc,
+ 0x47, 0x65, 0x40, 0xbc, 0xf6, 0xdb, 0xf3, 0xc6, 0xa4, 0x00, 0xea, 0x21, 0x00,
+ 0x15, 0x48, 0x09, 0xbf, 0x2f, 0xec, 0xd9, 0xb9, 0xde, 0x9e, 0x28, 0xe1, 0xec,
+ 0x5d, 0xea, 0x27, 0x35, 0xc3, 0x46, 0xfd, 0xef, 0x1d, 0xf2, 0x9c, 0xd4, 0xf0,
+ 0x04, 0xe1, 0xcf, 0xb5, 0xd8, 0xf9, 0xef, 0xed, 0xf8, 0x21, 0xdc, 0x17, 0xd8,
+ 0x20, 0xf0, 0xeb, 0xbc, 0x06, 0x0d, 0xe6, 0xe6, 0xc2, 0x0c, 0x03, 0xc8, 0xf6,
+ 0xcb, 0xc3, 0xf8, 0xfd, 0x14, 0x17, 0xf3, 0x11, 0x13, 0xfe, 0xea, 0xf8, 0xd9,
+ 0xcd, 0xfa, 0x22, 0xf6, 0x03, 0x25, 0x02, 0x14, 0x20, 0x02, 0xfe, 0xad, 0xe2,
+ 0x3c, 0x07, 0xfb, 0x40, 0x13, 0xef, 0xea, 0x08, 0x1a, 0x1f, 0x36, 0xe6, 0xe0,
+ 0xde, 0xf9, 0xfa, 0xcd, 0x04, 0xce, 0x1c, 0xe3, 0xf3, 0x1d, 0x31, 0xdf, 0x15,
+ 0xe7, 0xfd, 0xcd, 0x03, 0xf2, 0xfb, 0xa8, 0xf4, 0x0b, 0x26, 0xff, 0x23, 0xb5,
+ 0x9d, 0xee, 0xf6, 0xeb, 0x23, 0xcd, 0xe8, 0xeb, 0xfe, 0x1b, 0xde, 0x00, 0xe0,
+ 0x28, 0x00, 0xca, 0x22, 0xdf, 0xfa, 0x05, 0xe5, 0x3e, 0xf9, 0xfc, 0x2b, 0xe4,
+ 0xf5, 0xee, 0xed, 0xdf, 0xb5, 0xd2, 0x00, 0xe0, 0xd6, 0x03, 0xfb, 0xe0, 0xe1,
+ 0xf7, 0xc2, 0xc2, 0x1b, 0xcd, 0xcd, 0xb8, 0x07, 0xe6, 0x00, 0xf1, 0x02, 0xd2,
+ 0xea, 0x3b, 0x04, 0x08, 0xba, 0xe2, 0xc1, 0xb9, 0xc0, 0xf8, 0x19, 0x65, 0x2c,
+ 0xd9, 0xf2, 0xfe, 0xd2, 0xdd, 0xd4, 0x17, 0x2e, 0x2c, 0x0a, 0x59, 0x4c, 0x14,
+ 0xf3, 0xd7, 0x40, 0xc7, 0x36, 0x3c, 0x01, 0xdd, 0x24, 0xf6, 0x1d, 0xdd, 0x31,
+ 0xf9, 0xdb, 0xd7, 0xfa, 0xd9, 0xf9, 0xf7, 0xbb, 0x25, 0x1a, 0xea, 0x21, 0xe4,
+ 0xf3, 0xfb, 0xef, 0x81, 0xf6, 0x55, 0xd7, 0xf4, 0x4d, 0xf2, 0x09, 0x1e, 0x36,
+ 0xfa, 0xec, 0xdc, 0xdd, 0xe6, 0xe1, 0x11, 0xca, 0x18, 0xe0, 0xff, 0xf0, 0xd0,
+ 0xe1, 0x12, 0xaa, 0xba, 0x22, 0x34, 0x0c, 0x05, 0x1a, 0x00, 0xd2, 0xec, 0x2b,
+ 0x37, 0xe8, 0xdd, 0x0b, 0x1f, 0xb9, 0xdd, 0xd3, 0x08, 0x22, 0xd7, 0x4e, 0xeb,
+ 0x14, 0x26, 0x0e, 0xfc, 0xdc, 0xe7, 0x2b, 0xf2, 0x3c, 0x12, 0xdd, 0xf9, 0xe9,
+ 0xf7, 0xdb, 0xff, 0xee, 0xda, 0xe5, 0x15, 0xe7, 0xe4, 0xdf, 0x0f, 0x0a, 0x1b,
+ 0xf2, 0x04, 0x04, 0xfa, 0x0d, 0xeb, 0xe7, 0xd2, 0x31, 0xfa, 0xf1, 0xca, 0x15,
+ 0xf7, 0xf8, 0xf2, 0xf4, 0x19, 0x10, 0x38, 0xef, 0x14, 0xf4, 0xe6, 0x10, 0x04,
+ 0xeb, 0x10, 0xdc, 0xfb, 0x07, 0xf1, 0x0f, 0xd7, 0xf4, 0xeb, 0xfd, 0x02, 0x7f,
+ 0x26, 0xe8, 0xf3, 0xcf, 0x21, 0x0d, 0xf9, 0xeb, 0xe4, 0xd5, 0x14, 0xda, 0xe0,
+ 0xe9, 0xf8, 0xcf, 0x04, 0xd1, 0xc8, 0xe4, 0xe5, 0x29, 0x5c, 0xcc, 0x19, 0xf9,
+ 0xe0, 0x0d, 0x09, 0x04, 0x2e, 0x0b, 0x04, 0xfd, 0xda, 0x09, 0xf0, 0xcd, 0x1f,
+ 0xd7, 0xdb, 0x05, 0x1d, 0xe0, 0x0f, 0x02, 0x04, 0xf7, 0xee, 0xde, 0xd5, 0x0f,
+ 0x05, 0xeb, 0xe1, 0xed, 0x13, 0xdc, 0x10, 0xe9, 0x14, 0xd1, 0xf8, 0xfe, 0xed,
+ 0xf3, 0xec, 0xfb, 0xfd, 0xd6, 0x19, 0x21, 0x04, 0xfc, 0xe2, 0xf2, 0xeb, 0xd0,
+ 0xf9, 0x23, 0x02, 0x38, 0x05, 0x0d, 0xfe, 0xf6, 0xde, 0xca, 0xc3, 0x28, 0x0a,
+ 0xfa, 0xed, 0x07, 0xdb, 0xf3, 0x12, 0x30, 0x2a, 0xf9, 0xe1, 0xe6, 0x09, 0xd5,
+ 0xff, 0x30, 0x09, 0x3e, 0xfa, 0xfe, 0x2d, 0xf0, 0xf8, 0xfd, 0xda, 0x27, 0xfd,
+ 0xf1, 0xc7, 0xff, 0xd6, 0xe9, 0x02, 0xf2, 0xfc, 0xfa, 0x08, 0xde, 0xd4, 0x00,
+ 0xe4, 0xc7, 0x2d, 0xf4, 0x16, 0x05, 0x01, 0xf9, 0xd4, 0x01, 0x07, 0xcd, 0xf0,
+ 0x32, 0xde, 0xc8, 0xfe, 0x08, 0x16, 0xe2, 0x1e, 0xfd, 0xf6, 0xeb, 0x00, 0x13,
+ 0x31, 0xfa, 0x08, 0x14, 0xb7, 0x13, 0xff, 0x1b, 0xcf, 0x16, 0x0d, 0xe6, 0x08,
+ 0xf7, 0xf6, 0xc8, 0x24, 0xdf, 0xf0, 0x0a, 0x01, 0xfc, 0xf3, 0x04, 0xdc, 0xc0,
+ 0xc3, 0xe8, 0x14, 0x23, 0xd2, 0xe4, 0xe7, 0x08, 0xc6, 0xfe, 0xe8, 0x0d, 0xea,
+ 0x07, 0x03, 0xdb, 0x03, 0xf4, 0xf9, 0xb8, 0x1d, 0xea, 0x35, 0xc7, 0x41, 0x27,
+ 0xcf, 0xea, 0xf3, 0xd4, 0xd5, 0x22, 0xd4, 0xe5, 0x07, 0xb6, 0xe7, 0xe6, 0xe9,
+ 0xd7, 0x04, 0xbd, 0xf7, 0xed, 0xf9, 0xcf, 0x00, 0xc9, 0x18, 0x3b, 0xf5, 0xd5,
+ 0x43, 0xea, 0x37, 0x02, 0xe4, 0xf8, 0xd2, 0x17, 0x07, 0xfe, 0x0d, 0xe4, 0x0e,
+ 0xa1, 0xff, 0x3b, 0xf9, 0xf3, 0xdd, 0x2f, 0x1e, 0x7f, 0x00, 0xdd, 0xf1, 0xb5,
+ 0x17, 0xd3, 0x5b, 0xdd, 0xc9, 0xe5, 0x33, 0x0b, 0xe2, 0x31, 0xa1, 0x09, 0xf5,
+ 0xb7, 0xf7, 0xd5, 0x9f, 0x4a, 0x3e, 0xd0, 0xd4, 0xe6, 0xb9, 0xef, 0xed, 0xd0,
+ 0x61, 0xf2, 0x34, 0x2f, 0x0a, 0xff, 0x19, 0xf1, 0x36, 0xc0, 0xf0, 0xce, 0x6c,
+ 0x08, 0xb9, 0xce, 0xd8, 0xbb, 0x63, 0xe2, 0x20, 0x3f, 0x24, 0xcb, 0xdb, 0xd2,
+ 0xf9, 0x0a, 0xea, 0xdf, 0x2d, 0xca, 0x13, 0x14, 0xb0, 0xea, 0xff, 0x22, 0xcf,
+ 0x06, 0x07, 0xf7, 0xef, 0x32, 0xf3, 0x0b, 0x0d, 0xa1, 0x98, 0xfb, 0xd9, 0x29,
+ 0xec, 0x40, 0x01, 0x20, 0xc8, 0xfe, 0xf1, 0x2b, 0x07, 0xff, 0x06, 0xe6, 0x05,
+ 0xce, 0x1d, 0x56, 0xe1, 0xe1, 0x00, 0x13, 0xe0, 0xfd, 0x0e, 0xff, 0xfc, 0x51,
+ 0x0b, 0x25, 0x01, 0xef, 0x39, 0x34, 0x38, 0xe6, 0xf3, 0xdc, 0xf3, 0x42, 0xe3,
+ 0x13, 0x04, 0x07, 0xef, 0xd1, 0xea, 0xfe, 0xe1, 0xd0, 0xd8, 0xf4, 0x2f, 0xee,
+ 0xef, 0xeb, 0x14, 0xfe, 0xf2, 0x0d, 0xb1, 0x17, 0x00, 0x24, 0xad, 0xb8, 0xb8,
+ 0x0f, 0xd9, 0x09, 0xf6, 0xbf, 0x19, 0xf4, 0x0e, 0xf4, 0x2a, 0x1a, 0xfe, 0x22,
+ 0xf5, 0xfa, 0x3b, 0x22, 0xb9, 0x67, 0x10, 0x10, 0xc4, 0x0b, 0x00, 0xcf, 0x45,
+ 0xdd, 0xbc, 0x4c, 0xf2, 0x43, 0xb9, 0x07, 0xe2, 0xc9, 0xf9, 0x0b, 0xf0, 0xee,
+ 0xd4, 0xe0, 0xe7, 0x2b, 0xe2, 0xc6, 0xd8, 0xeb, 0xc7, 0x1d, 0xd9, 0xf9, 0x00,
+ 0x15, 0xfe, 0xdf, 0x06, 0xd8, 0x04, 0x05, 0xeb, 0x1c, 0xdb, 0xcf, 0x35, 0xe2,
+ 0x0a, 0xf4, 0xf7, 0x09, 0x13, 0xfd, 0xfe, 0xe0, 0xe9, 0xf8, 0xfd, 0xc0, 0xdd,
+ 0xf4, 0x1a, 0xff, 0xf1, 0xcf, 0x15, 0x34, 0xf5, 0xea, 0x14, 0x11, 0x04, 0xf9,
+ 0xeb, 0x0d, 0xe2, 0xc8, 0x0c, 0x09, 0x04, 0xc5, 0xe4, 0xfd, 0x0b, 0x15, 0x2f,
+ 0xf5, 0x11, 0x18, 0x08, 0x7f, 0x01, 0x05, 0xfc, 0xf9, 0xf9, 0x0d, 0x0b, 0xe1,
+ 0xd0, 0xef, 0x14, 0x23, 0xf6, 0x0d, 0xba, 0xe8, 0x0f, 0xd8, 0xe3, 0x09, 0xd9,
+ 0x06, 0x3d, 0x08, 0x05, 0xfa, 0xf7, 0x02, 0xf5, 0xd1, 0x4e, 0xf1, 0x14, 0xfd,
+ 0xc8, 0xec, 0xe5, 0xf3, 0x15, 0xd2, 0xd8, 0xda, 0x08, 0xeb, 0xe9, 0xdf, 0xdf,
+ 0xec, 0xf2, 0x09, 0x04, 0x07, 0x1f, 0xec, 0x0c, 0xcf, 0x10, 0x06, 0xf7, 0xfb,
+ 0xe8, 0xcb, 0xff, 0x15, 0xc3, 0xf4, 0xe6, 0xf3, 0xf5, 0xef, 0xea, 0x0c, 0x19,
+ 0xe9, 0x1f, 0xed, 0xc9, 0xef, 0xde, 0xec, 0x07, 0x27, 0xd5, 0x08, 0xec, 0xec,
+ 0xe8, 0xcc, 0xe0, 0xfc, 0xca, 0xf4, 0xc4, 0xf2, 0xdd, 0x13, 0x20, 0x20, 0x2a,
+ 0xf4, 0xea, 0xfb, 0xe8, 0x19, 0x16, 0xfc, 0xe2, 0x1d, 0xea, 0xfb, 0x35, 0x14,
+ 0x14, 0xbe, 0x0a, 0x2c, 0x0f, 0xe1, 0xe5, 0xf8, 0xcd, 0xf4, 0x03, 0xff, 0xeb,
+ 0x09, 0x09, 0xbd, 0xdf, 0xf9, 0xea, 0xf2, 0x0b, 0x06, 0xf1, 0xf8, 0xec, 0xf7,
+ 0xf3, 0xe5, 0xf3, 0xf6, 0xf8, 0x25, 0xe9, 0xe9, 0xc7, 0x1a, 0x05, 0x05, 0x0e,
+ 0x0c, 0x05, 0xec, 0x19, 0xfa, 0x28, 0xe2, 0x06, 0x13, 0xe1, 0x18, 0xe9, 0x06,
+ 0xf9, 0xfe, 0x09, 0x06, 0x00, 0xe9, 0xef, 0xf1, 0xf8, 0xf5, 0xed, 0x2c, 0x15,
+ 0xef, 0xdd, 0x08, 0xcd, 0xd0, 0xdf, 0xfc, 0xf5, 0xf9, 0xdc, 0xdc, 0xdb, 0xff,
+ 0xe0, 0x2e, 0xed, 0x02, 0xfb, 0xfd, 0xeb, 0xf5, 0xe3, 0x2d, 0xc6, 0xd6, 0x1b,
+ 0xe9, 0xfb, 0x16, 0x09, 0x0b, 0xc1, 0xea, 0xe6, 0x09, 0xff, 0xf5, 0xfc, 0x34,
+ 0xf6, 0x1c, 0xfd, 0x0a, 0x02, 0x04, 0x12, 0xf5, 0x12, 0xe0, 0xf5, 0xc2, 0xf2,
+ 0xf0, 0x0d, 0x0f, 0xf7, 0xe8, 0xec, 0x2e, 0x34, 0xe2, 0xe1, 0x18, 0xfd, 0xba,
+ 0x08, 0x14, 0xf2, 0xea, 0x15, 0x1d, 0xda, 0x0c, 0x1a, 0xfe, 0xe6, 0x0b, 0x01,
+ 0x32, 0x25, 0x22, 0xec, 0xca, 0x11, 0xed, 0x22, 0xde, 0xf9, 0xf8, 0x0f, 0xd1,
+ 0x03, 0xfc, 0x04, 0xf5, 0x0d, 0xb3, 0xe6, 0x2e, 0xe9, 0xf0, 0x22, 0x15, 0x52,
+ 0x14, 0xf0, 0xe6, 0x27, 0xfb, 0x19, 0xe9, 0x28, 0xe6, 0xff, 0xba, 0xf5, 0x07,
+ 0x04, 0xbd, 0x07, 0xe1, 0x05, 0xea, 0x08, 0xec, 0xda, 0xb9, 0x32, 0xe7, 0xec,
+ 0x0e, 0x05, 0xad, 0xef, 0xf0, 0xe7, 0xe9, 0x27, 0xd6, 0xe4, 0x26, 0x05, 0x07,
+ 0xc4, 0xd5, 0xf7, 0xfd, 0xcb, 0xf4, 0x21, 0xe6, 0x0c, 0x25, 0x0b, 0xcc, 0x1f,
+ 0xc1, 0x2d, 0x04, 0x1e, 0x49, 0x1f, 0x3c, 0x19, 0x00, 0xe5, 0xaa, 0xcf, 0xd5,
+ 0xc9, 0x03, 0xd6, 0xcf, 0xe4, 0xf0, 0x05, 0x2f, 0x07, 0xf1, 0xc5, 0x2a, 0x25,
+ 0xfd, 0x30, 0x42, 0xf2, 0x01, 0xfd, 0xe1, 0x0c, 0xf7, 0x1e, 0x7f, 0x04, 0x16,
+ 0xc3, 0xde, 0xd8, 0x00, 0xc9, 0xe0, 0x35, 0xfc, 0xf0, 0x06, 0x31, 0xec, 0x0d,
+ 0xd6, 0xe0, 0xd1, 0x2c, 0xcd, 0xc8, 0xf9, 0xf9, 0xfd, 0xe9, 0xf4, 0x0d, 0xc5,
+ 0xe2, 0x29, 0xce, 0xdf, 0xe4, 0xf3, 0x07, 0x1c, 0x0b, 0xf6, 0x13, 0xe3, 0x06,
+ 0x00, 0x36, 0x09, 0xd7, 0xce, 0xdc, 0x19, 0xff, 0x14, 0xe2, 0x09, 0xdd, 0x09,
+ 0xf6, 0xc6, 0xf7, 0x9f, 0x0b, 0xeb, 0xd4, 0x0a, 0x22, 0x28, 0xd8, 0xcc, 0xcf,
+ 0xdc, 0xd6, 0xc1, 0x02, 0xf8, 0xdd, 0x0c, 0xef, 0x40, 0xd9, 0xd1, 0xc9, 0x07,
+ 0xee, 0xea, 0xda, 0xac, 0xeb, 0x37, 0xe1, 0xd7, 0x07, 0xc3, 0x1f, 0xfe, 0x12,
+ 0xe6, 0xe1, 0xf7, 0x1d, 0xb7, 0x29, 0x18, 0xd1, 0x3f, 0x00, 0xb6, 0x1a, 0xd5,
+ 0xf4, 0x0d, 0xeb, 0xab, 0xe4, 0xe1, 0x14, 0xf1, 0xdd, 0xcb, 0xf2, 0x0e, 0x03,
+ 0xe6, 0xd5, 0x21, 0x4e, 0xe0, 0xcc, 0x07, 0x20, 0xce, 0x12, 0xb1, 0xe5, 0xd8,
+ 0x13, 0xb8, 0x0c, 0xeb, 0xda, 0xfb, 0x0a, 0xd5, 0xe8, 0x66, 0x28, 0xfb, 0xee,
+ 0x94, 0x35, 0xc4, 0x24, 0xc8, 0x29, 0x12, 0x0c, 0xf3, 0xee, 0x28, 0x96, 0x03,
+ 0x22, 0xf2, 0xf2, 0xe3, 0x95, 0xf2, 0x7f, 0xf6, 0xeb, 0x03, 0x29, 0xe9, 0xd7,
+ 0xe4, 0x33, 0xeb, 0x49, 0xfd, 0xdc, 0xc5, 0x1b, 0xf0, 0x2c, 0x87, 0xf4, 0x04,
+ 0x10, 0xe9, 0xf5, 0xc8, 0xef, 0x06, 0x13, 0xfe, 0x26, 0xf0, 0x32, 0x11, 0xf0,
+ 0x05, 0x21, 0xfc, 0xe8, 0xcf, 0xf8, 0x9c, 0x31, 0xf4, 0xc6, 0xf0, 0x13, 0x0e,
+ 0xe8, 0xe0, 0x2e, 0x32, 0xfe, 0xf6, 0x17, 0xce, 0xe9, 0xcd, 0x06, 0x06, 0xcf,
+ 0x33, 0x09, 0x1d, 0x07, 0xd9, 0xcb, 0xcc, 0xd9, 0x4d, 0xf5, 0xd1, 0xba, 0xe7,
+ 0xc2, 0xe1, 0x03, 0x20, 0x0a, 0x0e, 0xc4, 0x00, 0xb1, 0x5a, 0xf0, 0x3e, 0xcf,
+ 0x26, 0x0a, 0x33, 0x0e, 0xee, 0xfe, 0xbb, 0xe0, 0x21, 0xd9, 0xa1, 0xb4, 0x58,
+ 0xc8, 0xd4, 0xff, 0xed, 0xaf, 0x1a, 0x0f, 0xca, 0xd2, 0xfd, 0x09, 0xc4, 0x1b,
+ 0x97, 0xdf, 0xf3, 0x32, 0xe3, 0xc2, 0xf1, 0x1d, 0xf1, 0xc3, 0xf4, 0x9d, 0x00,
+ 0xeb, 0x0b, 0x0f, 0x03, 0x17, 0xc4, 0x09, 0xe5, 0x14, 0xfb, 0x1a, 0xc8, 0xfe,
+ 0x11, 0xb6, 0x21, 0xeb, 0x19, 0xb6, 0x0c, 0xfd, 0xca, 0xc8, 0xde, 0x00, 0xa4,
+ 0xc4, 0xe6, 0xeb, 0x03, 0x0b, 0x10, 0xe5, 0xf6, 0xc6, 0xd0, 0xb9, 0xd2, 0xd0,
+ 0x23, 0xb3, 0xa0, 0xdf, 0x32, 0xd7, 0x17, 0x95, 0xe2, 0x01, 0x06, 0xa7, 0xec,
+ 0xa0, 0x33, 0x0f, 0xca, 0xfc, 0xc1, 0xd9, 0xa2, 0x14, 0xf4, 0xc9, 0xff, 0x21,
+ 0x03, 0x84, 0xf7, 0xfd, 0x2d, 0xc4, 0x08, 0xce, 0xa9, 0xf7, 0x35, 0xcc, 0x24,
+ 0x44, 0xe4, 0xbf, 0xbb, 0xe6, 0x22, 0x0a, 0xf3, 0xe2, 0xdb, 0x1d, 0xea, 0xd9,
+ 0xac, 0xff, 0x25, 0xfb, 0x3c, 0x05, 0xe8, 0xb0, 0xf0, 0x01, 0x05, 0x01, 0x31,
+ 0x1f, 0x34, 0xab, 0xde, 0x8d, 0x18, 0xe8, 0xb9, 0xe2, 0x01, 0x24, 0x06, 0xde,
+ 0xef, 0xf4, 0xa2, 0xc0, 0xec, 0x2d, 0xf4, 0xa5, 0xda, 0x0a, 0x37, 0x0f, 0x18,
+ 0x18, 0xbc, 0xe5, 0xed, 0x0b, 0xf5, 0xed, 0xf3, 0x28, 0x11, 0x3e, 0x2f, 0x99,
+ 0xd0, 0x00, 0xb7, 0x18, 0xb9, 0x3b, 0x31, 0x16, 0xf2, 0xb3, 0x5f, 0xf9, 0x06,
+ 0x18, 0xd3, 0xfb, 0x81, 0xae, 0xcf, 0xe0, 0xe5, 0xe4, 0xee, 0x09, 0x24, 0xac,
+ 0xf9, 0xcf, 0xa3, 0x53, 0xe2, 0x1d, 0x4e, 0xb9, 0xc1, 0xcb, 0x41, 0xdf, 0x09,
+ 0x22, 0xf1, 0xe7, 0xe6, 0x20, 0xdb, 0x49, 0xbf, 0x00, 0xee, 0xd5, 0xd2, 0xdf,
+ 0x2a, 0xe9, 0x3b, 0xd1, 0xdf, 0xf8, 0xdb, 0x05, 0x31, 0xef, 0xd4, 0x0d, 0x03,
+ 0x2f, 0x1f, 0xd4, 0xa2, 0xfc, 0xf2, 0x2b, 0x0d, 0x22, 0x1b, 0x07, 0xf0, 0x3f,
+ 0xf5, 0x13, 0x07, 0x01, 0xd4, 0x41, 0xd0, 0xc4, 0xfa, 0x1d, 0x26, 0xe8, 0xa7,
+ 0x0c, 0x0e, 0xc6, 0x0b, 0x3a, 0x55, 0x13, 0x2f, 0x10, 0x60, 0xf7, 0x11, 0xcf,
+ 0x12, 0xf2, 0x0d, 0x2c, 0xf9, 0xd8, 0x15, 0x21, 0xf5, 0x00, 0x0e, 0xd1, 0xcc,
+ 0xfb, 0xaa, 0xe6, 0xd3, 0x33, 0x5b, 0x24, 0xfc, 0xc2, 0xcc, 0x31, 0xda, 0x40,
+ 0x57, 0xf2, 0xfb, 0xf6, 0xdd, 0x27, 0x32, 0xc9, 0x44, 0xdc, 0xd4, 0xe3, 0xed,
+ 0xc3, 0x32, 0xd2, 0xd2, 0x42, 0x10, 0x27, 0x0a, 0xd7, 0x10, 0x37, 0xe4, 0x3b,
+ 0x44, 0xd1, 0xd6, 0xe3, 0xdd, 0xf8, 0xcf, 0x0f, 0x02, 0xed, 0xca, 0xb0, 0xf4,
+ 0xd8, 0xd4, 0xf8, 0x11, 0x0c, 0xfc, 0x19, 0xd2, 0xe7, 0xdc, 0xed, 0x14, 0xfc,
+ 0xda, 0xb0, 0xc6, 0x03, 0xce, 0xb3, 0x26, 0x0e, 0x21, 0xfa, 0xe4, 0xeb, 0x07,
+ 0xb6, 0x2d, 0xa3, 0xcc, 0x33, 0x14, 0xe1, 0x12, 0xb9, 0xfb, 0xe9, 0x27, 0xbb,
+ 0x3d, 0x06, 0xbe, 0xe3, 0x03, 0xf8, 0xe1, 0xf5, 0x2d, 0x07, 0x56, 0x1b, 0x05,
+ 0x1d, 0xc8, 0x01, 0xfc, 0xcf, 0xf6, 0xb4, 0x24, 0xea, 0x0d, 0xd6, 0xfe, 0xf0,
+ 0xf0, 0xef, 0xd2, 0xe4, 0xe2, 0x1c, 0x06, 0xfd, 0xd1, 0x24, 0xf5, 0x81, 0x09,
+ 0xee, 0xd9, 0x33, 0x03, 0xeb, 0x13, 0xe7, 0x22, 0xe9, 0x21, 0xbf, 0xee, 0x1c,
+ 0xe3, 0xd8, 0x0d, 0xe0, 0xcb, 0xac, 0xbf, 0xe2, 0xfc, 0xba, 0x2f, 0x35, 0x17,
+ 0xf2, 0xce, 0x11, 0xd8, 0xed, 0xf6, 0xd6, 0x0e, 0xfb, 0xe8, 0xe8, 0xf6, 0xb8,
+ 0xe4, 0xfd, 0xf0, 0xe2, 0xf5, 0xc7, 0x14, 0xe3, 0x03, 0xc0, 0xe4, 0x11, 0xef,
+ 0xf2, 0xe1, 0xf6, 0xe6, 0xef, 0xed, 0x22, 0x18, 0xe0, 0xf5, 0x34, 0x1b, 0x1b,
+ 0xb7, 0x0c, 0xfe, 0x2d, 0x0e, 0xad, 0xc8, 0xd6, 0xc9, 0x0c, 0x06, 0xe6, 0xf3,
+ 0x14, 0xc6, 0xf9, 0xc0, 0x1b, 0xd3, 0x23, 0x22, 0xe9, 0x15, 0xf1, 0xff, 0xee,
+ 0x18, 0x14, 0xcb, 0xe6, 0xd6, 0xea, 0x08, 0xf0, 0x39, 0xe7, 0x06, 0x2e, 0x13,
+ 0x0f, 0x0c, 0xd4, 0xc9, 0xe5, 0xdf, 0x0f, 0x0e, 0xf4, 0x0c, 0xf5, 0xff, 0x1e,
+ 0x27, 0xf0, 0x0a, 0xa0, 0xfe, 0xd7, 0x29, 0xd4, 0xea, 0x18, 0xfb, 0x00, 0xb8,
+ 0xb0, 0xf6, 0x93, 0x0c, 0xde, 0x25, 0x08, 0x0d, 0xe9, 0xdd, 0x30, 0xc3, 0xff,
+ 0x1c, 0xae, 0xdc, 0xee, 0x1c, 0x03, 0x15, 0xea, 0x1d, 0xf1, 0x15, 0x1e, 0xf5,
+ 0x9c, 0x12, 0xec, 0x12, 0xd9, 0xea, 0x13, 0xfe, 0xea, 0x20, 0xf9, 0x0b, 0x6e,
+ 0x08, 0xe7, 0x11, 0xc1, 0x0d, 0xdd, 0x1a, 0x1a, 0xd7, 0x2a, 0xfe, 0xe0, 0x2e,
+ 0xdb, 0xdf, 0xea, 0xfc, 0xe6, 0xb0, 0xdf, 0xbb, 0x07, 0xeb, 0xac, 0x09, 0xf1,
+ 0x3c, 0x07, 0xe2, 0xcd, 0x0c, 0xed, 0x02, 0xee, 0x01, 0x93, 0x44, 0xda, 0x06,
+ 0xe3, 0x12, 0x05, 0xf1, 0x49, 0x1a, 0xe0, 0xfd, 0x02, 0xd8, 0xed, 0xfe, 0x36,
+ 0xda, 0xd0, 0x15, 0x24, 0x01, 0x0b, 0x07, 0x44, 0x23, 0x31, 0xef, 0x46, 0x24,
+ 0x9e, 0xe4, 0xd1, 0xf9, 0xb6, 0x34, 0x3f, 0xf3, 0xe7, 0xe9, 0x9d, 0xf3, 0xd7,
+ 0xcf, 0xf0, 0x36, 0xe4, 0x1c, 0x0b, 0xc9, 0xe4, 0x04, 0x28, 0xf3, 0x22, 0xf7,
+ 0xe3, 0xe1, 0x15, 0xef, 0xab, 0x0d, 0xbd, 0x99, 0xb1, 0xdc, 0xc6, 0xd1, 0x16,
+ 0xf8, 0x41, 0x13, 0x2a, 0x2e, 0xce, 0xe0, 0x32, 0x34, 0x04, 0xdf, 0xff, 0x1f,
+ 0xba, 0xe6, 0xfc, 0xc5, 0x22, 0x08, 0xe8, 0xff, 0xf4, 0xcf, 0x04, 0x16, 0xe8,
+ 0x32, 0xe5, 0x34, 0xe7, 0xcc, 0xd4, 0xdf, 0x1c, 0xf4, 0xf5, 0xf4, 0x0f, 0x36,
+ 0xb1, 0xd5, 0xd5, 0xcd, 0xfa, 0xec, 0x12, 0xef, 0xa2, 0xfc, 0xdd, 0xd6, 0xf3,
+ 0x06, 0xd0, 0xaf, 0xd2, 0xfc, 0xf4, 0x21, 0x08, 0xd3, 0x3c, 0xbb, 0xfe, 0x3c,
+ 0x3b, 0xf6, 0xfc, 0xc7, 0x0a, 0xe2, 0xbf, 0xcb, 0x03, 0xf9, 0x29, 0x9f, 0xf6,
+ 0xfc, 0x3e, 0x00, 0x10, 0x44, 0x29, 0x2f, 0xc8, 0xf5, 0xc2, 0x2f, 0xe5, 0x0c,
+ 0x20, 0xff, 0x14, 0xe4, 0xff, 0xc3, 0x07, 0xf1, 0xda, 0x2b, 0x02, 0xb9, 0xe9,
+ 0xfe, 0xd8, 0x01, 0x96, 0x19, 0x02, 0x06, 0xc9, 0xd4, 0xe8, 0xfc, 0x17, 0xb7,
+ 0xd7, 0x22, 0x18, 0x0a, 0x1b, 0x47, 0xff, 0x23, 0x0a, 0x2c, 0x14, 0x0f, 0x32,
+ 0xea, 0x0c, 0xa1, 0x1d, 0xf5, 0xff, 0xf3, 0x11, 0x2d, 0xf5, 0x2f, 0x29, 0xcf,
+ 0x11, 0x20, 0x81, 0xd2, 0x81, 0x13, 0xad, 0xd2, 0xf8, 0x60, 0x1f, 0x12, 0xbc,
+ 0xe3, 0xad, 0x2c, 0x22, 0x9e, 0xfd, 0xc5, 0x12, 0xc0, 0xd5, 0x03, 0xea, 0xc8,
+ 0xc5, 0xe7, 0xd6, 0xdf, 0x33, 0x06, 0x3f, 0x28, 0x21, 0xfb, 0xce, 0x2f, 0xcf,
+ 0xc3, 0xc8, 0xe7, 0xd1, 0xef, 0xc6, 0xff, 0xdb, 0x38, 0xeb, 0x02, 0x1c, 0x01,
+ 0x12, 0x1a, 0x0e, 0x25, 0xe8, 0xf0, 0xfb, 0x97, 0xf6, 0xb5, 0xc0, 0xf4, 0xff,
+ 0xfd, 0xe2, 0xf3, 0xd2, 0xbe, 0xfe, 0x49, 0xe8, 0x2c, 0xf3, 0xe4, 0x16, 0xd7,
+ 0x02, 0x0f, 0x46, 0x1f, 0xf4, 0x01, 0xc4, 0x0d, 0xd5, 0xed, 0xec, 0xe3, 0xc7,
+ 0xec, 0xb8, 0xe9, 0x70, 0xd5, 0x10, 0x1c, 0x15, 0xcf, 0x21, 0xb1, 0x45, 0xf6,
+ 0xe9, 0xd2, 0xf8, 0xa8, 0xfd, 0xec, 0x16, 0x81, 0xd6, 0xe4, 0xfd, 0xf2, 0x1b,
+ 0x01, 0x0d, 0xf6, 0xb9, 0x12, 0x00, 0x33, 0x29, 0xac, 0xd6, 0xcd, 0x11, 0xfb,
+ 0xfc, 0xe7, 0xd8, 0xf1, 0x40, 0x29, 0x38, 0xee, 0x12, 0x34, 0xe3, 0xd7, 0x28,
+ 0xf0, 0xf1, 0x06, 0x23, 0xd4, 0xe0, 0xbe, 0x13, 0x10, 0xf4, 0x29, 0xd8, 0xe9,
+ 0xe3, 0xe6, 0xf6, 0xe2, 0x17, 0x29, 0x06, 0xc4, 0x1a, 0x45, 0xd4, 0x15, 0x17,
+ 0x63, 0x3d, 0xff, 0xcd, 0x16, 0x17, 0x2b, 0x14, 0x39, 0x09, 0xd5, 0xf4, 0xfb,
+ 0xff, 0xeb, 0xed, 0xd1, 0xd1, 0x07, 0xf9, 0xdc, 0xac, 0xef, 0x00, 0xd4, 0xc9,
+ 0x11, 0x22, 0xf0, 0xe3, 0x00, 0xe1, 0x19, 0xd7, 0xf3, 0x67, 0xa5, 0xc7, 0xd4,
+ 0x0a, 0x10, 0x06, 0xe4, 0x87, 0xe5, 0xe6, 0x1b, 0xda, 0xe3, 0xe5, 0xe1, 0xe7,
+ 0xcf, 0xf9, 0x03, 0xf3, 0x1a, 0xc5, 0xfc, 0x23, 0x1f, 0x05, 0x15, 0xca, 0xd3,
+ 0xcb, 0x62, 0xb0, 0x5f, 0x17, 0xd5, 0x1f, 0xc6, 0xfe, 0xcc, 0x31, 0xd2, 0x0b,
+ 0x20, 0x01, 0xe2, 0xf7, 0x25, 0xc9, 0xad, 0xfa, 0xb7, 0xd7, 0x5d, 0xfe, 0xc1,
+ 0x04, 0xe6, 0xea, 0xda, 0xad, 0x1b, 0xf4, 0xe7, 0xdc, 0xfb, 0x1a, 0xf3, 0x2e,
+ 0x1e, 0x23, 0x1c, 0xea, 0xeb, 0xe6, 0xce, 0xef, 0xf1, 0xfa, 0xc9, 0x21, 0x27,
+ 0xf0, 0xfe, 0x08, 0xe3, 0xc7, 0xfd, 0x20, 0x2c, 0x1b, 0x07, 0xc3, 0xe0, 0xce,
+ 0xe6, 0x04, 0xd4, 0xef, 0xf4, 0xb1, 0x46, 0xf7, 0x06, 0xd3, 0x34, 0x0b, 0x49,
+ 0xcd, 0xea, 0xea, 0x1e, 0xd5, 0x1b, 0xc9, 0x02, 0xe7, 0x01, 0xed, 0x2b, 0xdd,
+ 0x06, 0xb6, 0xe2, 0x0a, 0x2f, 0x0c, 0x25, 0x20, 0xda, 0x24, 0xf2, 0xfc, 0x01,
+ 0x17, 0xf5, 0xf4, 0x3c, 0xfd, 0x18, 0xd6, 0xe2, 0x34, 0xf4, 0xdf, 0xf0, 0x31,
+ 0xea, 0xf7, 0x20, 0xf4, 0x81, 0x0d, 0xe9, 0x12, 0xf5, 0xb4, 0xd8, 0xaf, 0xbc,
+ 0xd2, 0x12, 0x1e, 0xf0, 0xa6, 0xd0, 0xea, 0x01, 0x1b, 0xf1, 0x3a, 0xd7, 0xf8,
+ 0x3e, 0x93, 0xee, 0xbd, 0x1e, 0xcb, 0x14, 0xf4, 0x03, 0xeb, 0x00, 0xb8, 0xee,
+ 0x04, 0xe5, 0x2d, 0xb8, 0x0c, 0xaf, 0x26, 0xdc, 0x31, 0xb6, 0xf4, 0x1f, 0x31,
+ 0xa7, 0xeb, 0x22, 0xf6, 0xfc, 0xfc, 0xc0, 0x24, 0xec, 0xf6, 0xe6, 0x1e, 0xb4,
+ 0xef, 0x18, 0xe7, 0xf1, 0xfb, 0xcf, 0xdf, 0xcd, 0x0b, 0xee, 0x26, 0x10, 0xd1,
+ 0x11, 0xf3, 0x0f, 0x1c, 0x42, 0xed, 0x34, 0xf8, 0xf7, 0xff, 0xdc, 0xf4, 0x2e,
+ 0x23, 0x18, 0xf4, 0xc1, 0x18, 0x19, 0xfc, 0xbb, 0xad, 0x10, 0x02, 0xfd, 0xe8,
+ 0x09, 0xf2, 0x2b, 0x07, 0x2d, 0xd8, 0x23, 0x2e, 0x31, 0x0a, 0x1a, 0x1f, 0x10,
+ 0x20, 0x10, 0xa5, 0xf8, 0xdd, 0x32, 0xf0, 0xda, 0xb7, 0x20, 0x13, 0x0e, 0xfc,
+ 0xfb, 0xc6, 0x00, 0x0d, 0xc9, 0xbf, 0x95, 0xe5, 0x03, 0xd4, 0xf3, 0xf2, 0xf2,
+ 0x3c, 0xf5, 0x99, 0xbc, 0x0b, 0xf1, 0x1a, 0xd2, 0x1d, 0xba, 0xbb, 0xdf, 0xf6,
+ 0xbd, 0x2e, 0x29, 0x20, 0x01, 0x0b, 0xeb, 0xa8, 0xed, 0x40, 0xe6, 0x23, 0xc6,
+ 0x0c, 0x3a, 0xf8, 0xff, 0xf4, 0xed, 0x05, 0xea, 0x0e, 0xfb, 0xbf, 0xeb, 0xd7,
+ 0xf0, 0x09, 0xea, 0x26, 0x11, 0xd9, 0xfc, 0xc0, 0x14, 0xfc, 0xff, 0xf9, 0xd8,
+ 0x03, 0xb8, 0xf1, 0xf4, 0xf2, 0xfc, 0xd3, 0xd0, 0xf7, 0xed, 0xf1, 0x28, 0xfc,
+ 0x22, 0x07, 0x36, 0xef, 0x07, 0x04, 0x0b, 0xec, 0x01, 0xee, 0x25, 0xe5, 0xf0,
+ 0x1f, 0x01, 0xea, 0x10, 0x1d, 0x0e, 0xde, 0xed, 0x24, 0x11, 0x06, 0xd7, 0xdd,
+ 0x01, 0xc2, 0x48, 0x28, 0x4f, 0xe3, 0x3c, 0xd7, 0xe4, 0xe1, 0xcd, 0xf9, 0xf4,
+ 0xe9, 0xc2, 0xf5, 0x07, 0xef, 0x05, 0x1d, 0x0e, 0xdf, 0x04, 0xd9, 0xf0, 0x17,
+ 0x01, 0xeb, 0xe8, 0xd0, 0x2f, 0x2c, 0x52, 0xf9, 0xc3, 0xfe, 0xf7, 0xf5, 0x3a,
+ 0xb5, 0xed, 0xd1, 0x0a, 0xec, 0xfa, 0xd4, 0xfd, 0x35, 0x14, 0xf3, 0xba, 0xe5,
+ 0xff, 0x29, 0xe8, 0x45, 0xf7, 0x09, 0xe5, 0xcf, 0xd9, 0xd7, 0x01, 0xf2, 0xf6,
+ 0xf6, 0x1d, 0xd2, 0xfe, 0xeb, 0xdd, 0xdb, 0x1b, 0x2b, 0xe4, 0xd9, 0x43, 0xed,
+ 0xd6, 0x0f, 0xc2, 0x1d, 0x21, 0xc1, 0xd5, 0x0d, 0x28, 0x27, 0xee, 0xce, 0xbb,
+ 0xe4, 0x36, 0xe8, 0xd1, 0xe3, 0xf4, 0x7f, 0xd4, 0xf5, 0x0a, 0xf9, 0xc0, 0xef,
+ 0xe3, 0xff, 0xe5, 0x11, 0xf3, 0x3f, 0x2b, 0x03, 0xe3, 0xcd, 0x2a, 0xe9, 0xfb,
+ 0xfe, 0xfb, 0xeb, 0x34, 0xdf, 0x2f, 0xe7, 0xd3, 0xe7, 0xe9, 0x16, 0x1f, 0xd6,
+ 0xc2, 0xeb, 0x0b, 0x1f, 0x02, 0xf8, 0xea, 0xfa, 0xd9, 0xf6, 0xf4, 0xf3, 0xaa,
+ 0x10, 0xc6, 0xd2, 0x25, 0xf4, 0x02, 0x31, 0xf5, 0x04, 0xcd, 0xd9, 0xf2, 0xed,
+ 0xf5, 0x19, 0x30, 0x13, 0x11, 0x14, 0xed, 0x1c, 0x1d, 0xf7, 0xbc, 0xcc, 0x24,
+ 0x3b, 0x0d, 0xd4, 0xf6, 0xf5, 0xe4, 0xe0, 0xf5, 0x0c, 0xe0, 0xcf, 0xf4, 0x0d,
+ 0xb7, 0xe2, 0x00, 0xfd, 0x10, 0x13, 0x43, 0x22, 0x2d, 0x36, 0x0f, 0x06, 0x08,
+ 0xca, 0xd9, 0xf0, 0x2e, 0x04, 0xbd, 0xe5, 0xbd, 0x0e, 0xde, 0x02, 0xee, 0xdc,
+ 0xc6, 0x0e, 0xe5, 0xcd, 0xff, 0xf6, 0x13, 0x0f, 0xf8, 0xf0, 0xf5, 0xf0, 0xea,
+ 0x27, 0xa5, 0xe1, 0xf9, 0x0c, 0xd7, 0x07, 0xab, 0xe0, 0x36, 0x12, 0xdb, 0x32,
+ 0xf6, 0x16, 0xf6, 0x10, 0xfd, 0x12, 0xd1, 0xfb, 0xf4, 0xf9, 0xdb, 0xe4, 0xcf,
+ 0x02, 0x09, 0x3b, 0xe7, 0x15, 0xfe, 0x19, 0x7f, 0x29, 0xfa, 0xfd, 0xcd, 0x13,
+ 0xea, 0x0b, 0xdf, 0x17, 0xfa, 0x18, 0x03, 0xeb, 0xed, 0x01, 0xc6, 0x15, 0xd0,
+ 0xb5, 0x16, 0xbe, 0x1c, 0x1a, 0x0f, 0x0b, 0x07, 0xe8, 0x19, 0x07, 0x12, 0x3d,
+ 0xf0, 0xf1, 0xf2, 0xb5, 0xc3, 0xe3, 0xfa, 0xff, 0xd8, 0xd3, 0xb4, 0x00, 0xc5,
+ 0xd3, 0xea, 0xc4, 0xd5, 0xfd, 0xe3, 0x44, 0x0d, 0x1e, 0xee, 0xf7, 0xbc, 0xdd,
+ 0xe5, 0xde, 0xda, 0x12, 0xd3, 0xc9, 0x05, 0xc3, 0xed, 0xd5, 0xf5, 0xbf, 0xc8,
+ 0x01, 0x0a, 0x00, 0x25, 0x28, 0x03, 0xc6, 0x00, 0xe4, 0xd3, 0xf2, 0xfd, 0xf3,
+ 0x0c, 0xfb, 0x0f, 0x17, 0xb0, 0xdc, 0x02, 0xb7, 0xef, 0xd3, 0xf7, 0xce, 0xf6,
+ 0x27, 0x23, 0x0d, 0x11, 0xcc, 0xfb, 0xf9, 0xf2, 0x22, 0xd8, 0xc4, 0x33, 0xf0,
+ 0x14, 0x42, 0x05, 0xe4, 0xed, 0xf7, 0x1e, 0xbe, 0xc2, 0xea, 0x11, 0xeb, 0xdf,
+ 0x0c, 0xf9, 0xc6, 0x07, 0x13, 0xb1, 0xd6, 0xf9, 0xb8, 0xd1, 0xf5, 0xd2, 0xcf,
+ 0x02, 0xba, 0x10, 0x02, 0xe4, 0x16, 0xeb, 0xd0, 0x3f, 0xda, 0xec, 0xe1, 0x1a,
+ 0x39, 0x1a, 0x06, 0x2e, 0x17, 0xdb, 0x09, 0xf8, 0xe9, 0xf7, 0x18, 0x12, 0xb1,
+ 0x0a, 0xf2, 0xef, 0xfd, 0xe6, 0x24, 0xfd, 0x1b, 0xe1, 0x07, 0xb9, 0xf8, 0xf2,
+ 0xcb, 0x49, 0xec, 0xe2, 0x04, 0x1d, 0xd1, 0xd5, 0xe8, 0x09, 0xec, 0xe0, 0xb8,
+ 0xc8, 0xfc, 0xf4, 0xf5, 0x08, 0xe9, 0xfb, 0xf5, 0x13, 0xad, 0x14, 0xdb, 0x01,
+ 0x09, 0xbe, 0x10, 0xe8, 0x19, 0xfc, 0xec, 0x1e, 0xbe, 0xb1, 0x2d, 0xbb, 0x01,
+ 0xf8, 0x0a, 0x4c, 0x1e, 0x17, 0xec, 0xf0, 0xc8, 0x1f, 0x18, 0x9b, 0xe9, 0xf1,
+ 0x0c, 0xf2, 0xca, 0xa2, 0xd0, 0xef, 0xee, 0xcb, 0xee, 0x09, 0xff, 0xce, 0xf0,
+ 0xff, 0x1e, 0xd0, 0x0b, 0xd2, 0xe4, 0xa4, 0xd8, 0xfc, 0xd8, 0xe3, 0x36, 0xfc,
+ 0x12, 0x2d, 0x22, 0x74, 0x14, 0xed, 0xdb, 0xbc, 0x08, 0xd3, 0x2a, 0xd0, 0x96,
+ 0x17, 0xf2, 0x26, 0xfd, 0x05, 0xd3, 0xd7, 0x56, 0xbc, 0xdc, 0x14, 0xe4, 0xf7,
+ 0x6c, 0x05, 0x21, 0x30, 0x25, 0x11, 0x00, 0xb5, 0x50, 0xcb, 0x05, 0xea, 0xf1,
+ 0x27, 0x32, 0xf7, 0x22, 0xc5, 0xd5, 0xcd, 0xf0, 0xed, 0x37, 0xc3, 0x1b, 0xe7,
+ 0x48, 0xee, 0xc9, 0xf3, 0xf4, 0xdb, 0xc7, 0xbc, 0xfe, 0xdd, 0xe9, 0x87, 0x01,
+ 0xf6, 0x1d, 0xf0, 0xba, 0xe4, 0xf6, 0xcd, 0x21, 0xf6, 0xbf, 0x1f, 0xf4, 0x0b,
+ 0xe4, 0xc1, 0xe7, 0xdd, 0x45, 0x03, 0x06, 0x09, 0x04, 0x1e, 0x1a, 0x0a, 0x19,
+ 0xcc, 0x93, 0x06, 0xc6, 0x1c, 0xbe, 0xef, 0xa5, 0x19, 0x2e, 0x41, 0x3a, 0xf2,
+ 0xcb, 0xf3, 0xc5, 0x17, 0x36, 0x4d, 0xbf, 0xdc, 0x02, 0x04, 0xfb, 0xe5, 0x36,
+ 0xf9, 0xdd, 0x0a, 0x9b, 0xa5, 0xb4, 0x57, 0xce, 0xea, 0xfe, 0xd4, 0x4c, 0xd3,
+ 0xce, 0x0d, 0xdb, 0xf7, 0xf0, 0x97, 0x3a, 0xbc, 0xe0, 0xab, 0xe8, 0x1d, 0xe1,
+ 0xfa, 0xea, 0xec, 0xe0, 0x1d, 0xa9, 0xe8, 0xcd, 0xc8, 0x11, 0x01, 0x0d, 0x28,
+ 0x0f, 0xbc, 0x20, 0xec, 0x13, 0x01, 0xfd, 0x44, 0xd3, 0x24, 0xe6, 0x26, 0xb3,
+ 0x04, 0x23, 0x11, 0x0b, 0xca, 0x04, 0xc4, 0x08, 0x02, 0xe7, 0x7f, 0x25, 0x26,
+ 0xf1, 0xc7, 0xe2, 0xf1, 0x0c, 0xe6, 0xac, 0x38, 0xbe, 0xd0, 0xda, 0xe7, 0xbd,
+ 0x13, 0xc4, 0x03, 0x14, 0x12, 0x9c, 0xc5, 0xdf, 0xea, 0xfe, 0xdc, 0xcc, 0xc2,
+ 0x96, 0x2a, 0xe3, 0x28, 0xbe, 0xba, 0x38, 0xc1, 0x95, 0x2e, 0x1f, 0xda, 0xaf,
+ 0x08, 0x39, 0xa8, 0x51, 0x11, 0xe6, 0x28, 0x16, 0x32, 0xe9, 0x2b, 0xeb, 0xdd,
+ 0x17, 0x39, 0xd1, 0x3e, 0x07, 0x3c, 0x05, 0xbe, 0xfe, 0x32, 0xb0, 0x0f, 0xda,
+ 0xee, 0x26, 0xd4, 0x14, 0xeb, 0xf6, 0x06, 0x2f, 0x19, 0xdd, 0xe7, 0xbe, 0x2a,
+ 0xd3, 0xcb, 0xff, 0x35, 0xf0, 0xb4, 0x23, 0x05, 0xd5, 0xaa, 0x2a, 0x16, 0xfe,
+ 0xd1, 0xd7, 0x29, 0xa9, 0x17, 0xfa, 0x2b, 0x02, 0xbf, 0x3a, 0xaa, 0xe4, 0x0d,
+ 0xed, 0xdc, 0xcc, 0xee, 0x2b, 0xd3, 0xcf, 0xd4, 0xfe, 0xcc, 0xe4, 0x10, 0xbb,
+ 0x30, 0xc2, 0xe9, 0xd3, 0x2e, 0xaf, 0x10, 0xf5, 0xef, 0x30, 0xf3, 0x01, 0xfb,
+ 0xa9, 0xe8, 0x05, 0x50, 0x10, 0xe2, 0xe2, 0x30, 0x19, 0xed, 0x67, 0xea, 0x1f,
+ 0x3b, 0x5b, 0x10, 0xf8, 0x04, 0x57, 0x0e, 0x01, 0x81, 0xd6, 0x2e, 0xe4, 0xe8,
+ 0x9a, 0xfc, 0xa1, 0xe1, 0x3f, 0xc7, 0xfe, 0x2d, 0x50, 0x40, 0x2a, 0x54, 0xcf,
+ 0xd6, 0xac, 0xec, 0x12, 0xfc, 0x23, 0x0b, 0xb0, 0xee, 0xee, 0x07, 0x17, 0xee,
+ 0xd3, 0xdb, 0xf3, 0x04, 0xbf, 0xef, 0xf9, 0xc2, 0x2b, 0x0b, 0x0f, 0x4e, 0x44,
+ 0x97, 0x35, 0x26, 0x03, 0xe2, 0x03, 0x33, 0xd1, 0xd7, 0x2f, 0x2b, 0x06, 0x1a,
+ 0xf5, 0xe7, 0xe7, 0xf0, 0xfe, 0xfb, 0x1b, 0xcf, 0x44, 0xd0, 0x16, 0x9f, 0xb7,
+ 0xd2, 0xd1, 0xe4, 0xa8, 0xf0, 0xe8, 0xed, 0xd6, 0xb5, 0xb0, 0xb8, 0x96, 0xd8,
+ 0xc8, 0x02, 0x9d, 0xeb, 0x27, 0x08, 0xf1, 0xeb, 0xe9, 0xbf, 0xbf, 0x2e, 0xe8,
+ 0xae, 0xc7, 0xd6, 0xbe, 0xd8, 0xd5, 0xf8, 0x27, 0xb1, 0xdf, 0xd3, 0xfb, 0xca,
+ 0x20, 0xee, 0xf6, 0xa2, 0xe6, 0xf3, 0x4b, 0xd9, 0xb9, 0x23, 0x47, 0x19, 0x50,
+ 0xc3, 0xd7, 0xbe, 0x28, 0xf1, 0xf7, 0xf9, 0xd9, 0x0c, 0xc2, 0xe2, 0x21, 0xd3,
+ 0xf2, 0xde, 0x0b, 0xad, 0xbd, 0x17, 0xd8, 0xfa, 0xb8, 0xe5, 0x25, 0xd2, 0xe5,
+ 0xb1, 0xe7, 0x24, 0xbd, 0x4b, 0xa7, 0x08, 0x25, 0x11, 0xbc, 0xce, 0x0e, 0xb8,
+ 0xcf, 0xda, 0x05, 0xff, 0xd1, 0x48, 0xd8, 0xca, 0xf2, 0x9c, 0xfe, 0x14, 0x16,
+ 0xcb, 0x0e, 0x2c, 0xf3, 0xcc, 0x57, 0xb2, 0xf9, 0xf5, 0xd0, 0x1a, 0xc7, 0x1c,
+ 0x0c, 0x34, 0x05, 0x0a, 0xd9, 0xbe, 0x44, 0x05, 0x23, 0x35, 0xeb, 0x00, 0xa4,
+ 0x07, 0xb5, 0xd1, 0xda, 0x2b, 0x1c, 0x16, 0x27, 0xec, 0xf9, 0xcf, 0x33, 0xa7,
+ 0x1b, 0xee, 0xbc, 0x14, 0x25, 0xcb, 0xa0, 0xfe, 0xf0, 0xe4, 0xa3, 0xed, 0xf7,
+ 0xfd, 0x05, 0x2e, 0xe6, 0xe6, 0xb4, 0x40, 0xb2, 0xc5, 0xc6, 0xde, 0xad, 0xfd,
+ 0xac, 0xd6, 0xe5, 0xce, 0xbc, 0xee, 0x39, 0x4f, 0x10, 0xda, 0x3c, 0xae, 0xea,
+ 0x12, 0x21, 0xca, 0x1d, 0x97, 0xfc, 0xc9, 0xe7, 0xe9, 0xf3, 0x7d, 0xec, 0x11,
+ 0x59, 0x53, 0x06, 0x2b, 0x4c, 0xbc, 0x06, 0xf3, 0x09, 0xd9, 0xd5, 0xbd, 0x0e,
+ 0xf0, 0x02, 0x21, 0xda, 0x17, 0x13, 0xb9, 0xfa, 0xfe, 0x20, 0x01, 0xf9, 0xf3,
+ 0x08, 0xbf, 0xaf, 0x16, 0xf6, 0x2d, 0x4e, 0xfb, 0x1b, 0x47, 0xea, 0x13, 0x35,
+ 0x03, 0x11, 0x03, 0xe5, 0x15, 0xf7, 0xfe, 0xc6, 0xe2, 0x2f, 0xd5, 0x04, 0xcb,
+ 0x1e, 0x3a, 0x0e, 0x23, 0xe2, 0x48, 0xf6, 0x1f, 0xe0, 0xfd, 0xc6, 0x48, 0xd1,
+ 0x45, 0xf4, 0x2b, 0x35, 0x41, 0xc9, 0x51, 0xf6, 0xbd, 0xb4, 0xf9, 0xda, 0xae,
+ 0x20, 0xeb, 0xbe, 0xe0, 0x81, 0x28, 0xaf, 0x0f, 0xd6, 0x16, 0xf6, 0xf9, 0xc8,
+ 0xf5, 0xfc, 0xe9, 0xb6, 0xe2, 0xdd, 0xfa, 0x15, 0xdc, 0xcc, 0xe2, 0xc1, 0xd5,
+ 0x2c, 0xde, 0x1d, 0xb2, 0xe6, 0xf7, 0xf7, 0xf2, 0xfe, 0xff, 0xa6, 0xb1, 0x0d,
+ 0x08, 0xf8, 0xb8, 0x03, 0xcc, 0x0f, 0x10, 0x17, 0x1b, 0xcd, 0xec, 0x46, 0xd9,
+ 0xe5, 0xed, 0xd6, 0xf2, 0xe2, 0xf4, 0xe4, 0xdf, 0xda, 0xe8, 0xee, 0xb9, 0xe3,
+ 0xf9, 0x2c, 0xe7, 0x2d, 0xf9, 0xec, 0x14, 0xe2, 0xd5, 0xeb, 0x17, 0x50, 0x11,
+ 0xee, 0xfb, 0x25, 0xc0, 0xf2, 0xfe, 0x1f, 0xe2, 0xf1, 0xc7, 0xf3, 0x02, 0xeb,
+ 0xd2, 0xfe, 0x14, 0x2b, 0x56, 0x20, 0x29, 0x29, 0xca, 0xf2, 0xb3, 0x5e, 0xf3,
+ 0xcb, 0xdc, 0xf5, 0x4f, 0xf2, 0x4b, 0xe3, 0xd1, 0xe5, 0xbe, 0xce, 0xef, 0x0a,
+ 0x34, 0x5a, 0xd7, 0x00, 0x08, 0xeb, 0xe0, 0x07, 0xf6, 0x30, 0xe8, 0x11, 0xe1,
+ 0xc7, 0x07, 0xf1, 0xf6, 0xb4, 0x81, 0xe1, 0xeb, 0x1d, 0xde, 0xdd, 0xdc, 0xf5,
+ 0xfa, 0xaa, 0x09, 0xdf, 0x09, 0x30, 0xc3, 0xdc, 0xe3, 0xee, 0xf2, 0xfe, 0x17,
+ 0xe7, 0xbf, 0x3b, 0xfb, 0xe3, 0xff, 0xda, 0xf8, 0x15, 0x94, 0x0e, 0xf5, 0x02,
+ 0xed, 0x02, 0xee, 0xf2, 0xc6, 0xcc, 0xfd, 0xfc, 0x2d, 0xf9, 0x51, 0x46, 0xc6,
+ 0xcc, 0xce, 0xc7, 0x23, 0xa1, 0x06, 0xb9, 0xfe, 0xee, 0x13, 0x4e, 0x49, 0x01,
+ 0xea, 0xc5, 0x3c, 0xc4, 0x25, 0xf0, 0x5e, 0xf6, 0x18, 0x12, 0x34, 0xe7, 0xf2,
+ 0x0b, 0xc9, 0xdc, 0x33, 0xb5, 0xc1, 0xb2, 0x26, 0xdc, 0x15, 0xd6, 0xf9, 0xe3,
+ 0x42, 0xe7, 0xe6, 0x12, 0xf7, 0xef, 0xcb, 0x39, 0xdb, 0xb5, 0xf7, 0x18, 0xfb,
+ 0x0a, 0xae, 0xda, 0xfc, 0xdd, 0x04, 0xc3, 0xff, 0x10, 0xdb, 0x02, 0x06, 0x11,
+ 0x04, 0x1a, 0xfe, 0x13, 0x07, 0x57, 0x07, 0x25, 0xb6, 0xc2, 0xe5, 0xf1, 0x5a,
+ 0xa1, 0x35, 0x2a, 0xde, 0x2e, 0xd6, 0xe9, 0xc4, 0x03, 0xdf, 0xc2, 0x1a, 0x2f,
+ 0x23, 0xc8, 0xa8, 0xf6, 0xd6, 0xb6, 0xa1, 0x09, 0x1c, 0xa9, 0xb7, 0xe3, 0xed,
+ 0xf8, 0x03, 0xb1, 0x40, 0x02, 0xe7, 0xc1, 0x9c, 0xc5, 0xda, 0xf5, 0xed, 0xe4,
+ 0x04, 0x36, 0xf0, 0xe0, 0xd5, 0x07, 0xf3, 0x08, 0x5c, 0xa4, 0x07, 0x37, 0xc8,
+ 0xcd, 0x12, 0x1c, 0x3c, 0xf9, 0xed, 0xe5, 0x0d, 0xea, 0x15, 0xdc, 0x15, 0xf6,
+ 0xf2, 0x37, 0x15, 0x1a, 0x27, 0xd1, 0x2a, 0xfa, 0xe2, 0xba, 0x22, 0xd6, 0x19,
+ 0xd0, 0xd0, 0x0e, 0x08, 0x0e, 0x02, 0x30, 0x04, 0xee, 0xff, 0x33, 0xc2, 0xdd,
+ 0xea, 0xca, 0xe9, 0xdf, 0x06, 0xca, 0xe5, 0xfb, 0x39, 0x0e, 0xb8, 0xc2, 0x02,
+ 0x0c, 0x05, 0xe7, 0x37, 0xd8, 0x1b, 0xe6, 0x07, 0x02, 0xff, 0x03, 0x09, 0xec,
+ 0xf3, 0x01, 0xdb, 0xde, 0xf4, 0x50, 0xee, 0x21, 0xf4, 0xdc, 0x9f, 0xf1, 0xf7,
+ 0xf4, 0xc6, 0xd2, 0xf1, 0x30, 0x42, 0xed, 0x25, 0x2f, 0xf5, 0x08, 0x27, 0xc1,
+ 0xdb, 0x22, 0x23, 0xd6, 0x27, 0xeb, 0x0f, 0xf1, 0x28, 0x06, 0x20, 0x21, 0x55,
+ 0xf9, 0xed, 0x20, 0xbb, 0xf4, 0x29, 0x16, 0xea, 0xfc, 0xed, 0x0f, 0x0d, 0xce,
+ 0xfa, 0xf3, 0x38, 0x09, 0xca, 0x56, 0x7f, 0xf4, 0x26, 0x27, 0xef, 0x04, 0xf6,
+ 0xf5, 0xe3, 0xea, 0x16, 0xf5, 0x00, 0x35, 0x16, 0xc9, 0xff, 0x36, 0xfe, 0xbe,
+ 0xfc, 0x37, 0xef, 0xd5, 0xf8, 0x0a, 0x20, 0x1a, 0xfa, 0xd6, 0x01, 0x3e, 0x3f,
+ 0xc8, 0x16, 0x27, 0xdc, 0xc9, 0xdd, 0xb1, 0x38, 0x17, 0x0f, 0xde, 0xf7, 0xc0,
+ 0xfe, 0x09, 0xcb, 0xf3, 0x13, 0x21, 0x19, 0x46, 0xf5, 0x1b, 0xf4, 0x2b, 0xe7,
+ 0xb6, 0x0f, 0xec, 0x59, 0xec, 0xfa, 0x12, 0x1d, 0x09, 0xee, 0xee, 0x25, 0xef,
+ 0x07, 0xf1, 0xfa, 0xcf, 0xfc, 0x32, 0x2a, 0xf6, 0xf7, 0xe4, 0xf6, 0xac, 0xff,
+ 0x27, 0x03, 0xc8, 0xf2, 0xb3, 0xc7, 0xdf, 0xe5, 0xec, 0xde, 0x2c, 0x03, 0xf8,
+ 0xda, 0x00, 0xde, 0x23, 0xfb, 0xf8, 0xb7, 0x04, 0xdc, 0xfa, 0xe3, 0xe9, 0x29,
+ 0x16, 0x1c, 0x05, 0xd2, 0xbe, 0xcb, 0x10, 0xd4, 0x41, 0x2f, 0xdf, 0xc5, 0x2d,
+ 0xfc, 0x29, 0x1d, 0xa5, 0x21, 0x2b, 0xde, 0x12, 0x10, 0xbd, 0x0d, 0xf9, 0xb9,
+ 0x0d, 0xf2, 0x2c, 0xf1, 0x50, 0x36, 0x36, 0xe9, 0xb0, 0x48, 0x23, 0xef, 0xfe,
+ 0x1c, 0xf3, 0xe5, 0x0e, 0x46, 0x0d, 0x12, 0xfd, 0xe1, 0x0d, 0xef, 0x32, 0x1d,
+ 0xe7, 0x00, 0x23, 0x0c, 0xca, 0x25, 0x24, 0x00, 0xf5, 0xad, 0xcb, 0x0b, 0x09,
+ 0x1e, 0xd0, 0xfb, 0xd3, 0xdc, 0xee, 0xed, 0x36, 0xe3, 0xdb, 0x02, 0x6f, 0xda,
+ 0xc7, 0xd0, 0xd2, 0xd8, 0xa1, 0xc1, 0x04, 0x5d, 0xbd, 0x0d, 0x35, 0xf5, 0x09,
+ 0x59, 0xad, 0xe0, 0x00, 0xe7, 0xa3, 0x13, 0xa0, 0xfc, 0x27, 0xf1, 0x10, 0x06,
+ 0xd1, 0x22, 0x21, 0x43, 0x0e, 0xd8, 0xbc, 0x1d, 0xad, 0x05, 0xc2, 0xe7, 0x23,
+ 0xed, 0xfd, 0x0c, 0x0c, 0x08, 0xf9, 0x2f, 0x3b, 0x10, 0xf1, 0xd3, 0x10, 0xfa,
+ 0xe0, 0xe4, 0xb0, 0xc4, 0xf1, 0xd5, 0xd5, 0x2f, 0x14, 0xca, 0xf3, 0xea, 0xd9,
+ 0xde, 0xe6, 0x01, 0xec, 0xee, 0x0b, 0x1f, 0x28, 0x81, 0xfe, 0x02, 0xc0, 0xcc,
+ 0xce, 0xb1, 0xfd, 0x04, 0xdd, 0x18, 0xfa, 0x26, 0xe3, 0xe9, 0xca, 0xdc, 0xc6,
+ 0xef, 0xf6, 0x12, 0x08, 0xf0, 0x5f, 0xe6, 0xfd, 0xf8, 0x15, 0x2e, 0x0b, 0xcb,
+ 0x1b, 0x14, 0x43, 0x17, 0x58, 0xee, 0xb7, 0x5d, 0xd6, 0x15, 0x05, 0xa4, 0x10,
+ 0xe1, 0xd6, 0x12, 0x24, 0x2c, 0x33, 0x29, 0xce, 0xf4, 0x01, 0xb1, 0x48, 0xf2,
+ 0x29, 0x14, 0xc3, 0x1f, 0xf2, 0xd1, 0xd4, 0x46, 0xd3, 0x16, 0xef, 0xfe, 0xed,
+ 0xe5, 0x1d, 0x07, 0x2f, 0x29, 0xf0, 0x17, 0x18, 0xd0, 0x18, 0xdd, 0x53, 0xcb,
+ 0x0b, 0xd4, 0x09, 0x54, 0x08, 0xf4, 0x30, 0xd8, 0x3f, 0x44, 0x2c, 0xf2, 0x08,
+ 0x2c, 0x15, 0xe7, 0xe0, 0xdd, 0xe8, 0xcc, 0xce, 0xea, 0x2c, 0x06, 0xd3, 0x25,
+ 0x09, 0x2e, 0xb9, 0xa7, 0xe9, 0xcf, 0x11, 0xc5, 0xe9, 0x17, 0xc0, 0x01, 0xe2,
+ 0xe8, 0xe4, 0xef, 0xee, 0xd5, 0x55, 0x20, 0xf6, 0x17, 0xad, 0x15, 0xdc, 0x81,
+ 0xed, 0xcc, 0xe2, 0x20, 0x1c, 0xd0, 0xe6, 0x22, 0x02, 0x95, 0xf4, 0xd7, 0xd6,
+ 0x38, 0x2f, 0x0f, 0xc5, 0xa9, 0x0b, 0xd6, 0xef, 0x02, 0xde, 0x98, 0xaa, 0x29,
+ 0x4c, 0x2a, 0x3c, 0xca, 0x5f, 0x39, 0x06, 0x2e, 0xc6, 0xde, 0xf0, 0x0d, 0x9d,
+ 0xe1, 0x16, 0xe7, 0x1e, 0xdc, 0xd3, 0xf9, 0x09, 0xb4, 0x31, 0x9a, 0x87, 0xfe,
+ 0xb5, 0xc2, 0xeb, 0x0f, 0xe7, 0xf6, 0x47, 0x23, 0x12, 0xc0, 0xc9, 0x23, 0x17,
+ 0xec, 0xd6, 0xb1, 0xca, 0xee, 0x2c, 0xed, 0xf2, 0xc9, 0xf4, 0x1b, 0xc7, 0xcb,
+ 0xd4, 0xff, 0xe8, 0x08, 0xfc, 0xe9, 0x62, 0xe2, 0xe6, 0x0e, 0xf2, 0xbc, 0xe2,
+ 0xc1, 0xd9, 0x16, 0x12, 0x43, 0xb9, 0xee, 0xc0, 0xef, 0xfc, 0x37, 0xf5, 0xf0,
+ 0xca, 0xe9, 0x63, 0x18, 0xe9, 0x12, 0xcd, 0x0b, 0xdc, 0xf1, 0xc3, 0x05, 0x25,
+ 0x31, 0x10, 0x99, 0xcb, 0x24, 0xff, 0x4a, 0x0d, 0x2b, 0x02, 0xf9, 0x3e, 0x03,
+ 0x0b, 0x62, 0xdb, 0xf5, 0xd8, 0xf1, 0xd1, 0xf8, 0xe2, 0xdb, 0xf4, 0x21, 0xe6,
+ 0xac, 0x18, 0xdf, 0x21, 0xf4, 0x1b, 0xcd, 0xa9, 0x10, 0x6e, 0xe9, 0xfb, 0x17,
+ 0xd2, 0xf4, 0x0d, 0xf8, 0xf9, 0x30, 0x0a, 0x96, 0x00, 0xf9, 0xbf, 0xcf, 0xf4,
+ 0x3f, 0xf5, 0xec, 0x1d, 0x16, 0xa9, 0x0c, 0xe2, 0xb5, 0xf3, 0x1f, 0x3f, 0xf5,
+ 0x11, 0xf3, 0x17, 0x04, 0x0c, 0xd2, 0x9d, 0xb4, 0xdd, 0xec, 0xc4, 0x37, 0x13,
+ 0x06, 0x0c, 0xba, 0x2a, 0x15, 0xf7, 0xd4, 0xd0, 0xe6, 0x10, 0x19, 0xfa, 0x6d,
+ 0x49, 0xd8, 0xde, 0xcd, 0x00, 0xf9, 0xbf, 0xf6, 0xd5, 0x16, 0xb5, 0xbd, 0xde,
+ 0x21, 0xcb, 0x43, 0xf7, 0x1e, 0xdf, 0x2f, 0x0f, 0x23, 0xa7, 0x55, 0xe7, 0xf5,
+ 0xe4, 0xe0, 0x0e, 0xba, 0x41, 0xdb, 0xfc, 0xe8, 0x05, 0xcc, 0x0f, 0xb6, 0xf5,
+ 0xe3, 0xad, 0xeb, 0xf3, 0xba, 0x19, 0xfe, 0xe2, 0xf8, 0xaa, 0xd1, 0xfd, 0x9f,
+ 0xb3, 0x1f, 0xbb, 0xdf, 0xd2, 0x0b, 0x00, 0x2f, 0xd6, 0x03, 0xf4, 0xf1, 0x14,
+ 0xf6, 0x47, 0xfa, 0xca, 0xff, 0x08, 0xe2, 0xdc, 0x49, 0x44, 0x37, 0x2d, 0xfd,
+ 0xdc, 0xf8, 0xe3, 0x00, 0xd3, 0x78, 0xee, 0xf5, 0xe9, 0x07, 0xda, 0xd4, 0x34,
+ 0xca, 0xdc, 0x2a, 0x04, 0xe2, 0x08, 0x2e, 0x0c, 0xbb, 0x0c, 0xdf, 0x8b, 0xf6,
+ 0xe1, 0xf8, 0xfa, 0xdb, 0xe2, 0xfa, 0xc4, 0x09, 0x17, 0xf5, 0xed, 0xcd, 0x1b,
+ 0xda, 0x0b, 0x2c, 0x0c, 0xee, 0xf4, 0x09, 0xc9, 0xc9, 0xd8, 0xe3, 0x34, 0x49,
+ 0xef, 0x04, 0xc7, 0xfc, 0xf4, 0x01, 0xe0, 0xc6, 0x27, 0xdf, 0xf2, 0xe6, 0xf8,
+ 0x58, 0xd8, 0xf1, 0xb7, 0x14, 0xbd, 0x07, 0xfd, 0xd1, 0x8d, 0xdc, 0x25, 0x06,
+ 0xd5, 0xf1, 0xbb, 0xcd, 0x20, 0xb1, 0xd7, 0xec, 0x9d, 0x09, 0xdd, 0x07, 0xf5,
+ 0xfe, 0x35, 0xea, 0x6b, 0x3f, 0xce, 0xca, 0xf3, 0xd1, 0xe4, 0x19, 0x03, 0x0f,
+ 0x0e, 0xda, 0xdf, 0xe2, 0x18, 0xd2, 0x2f, 0x49, 0xe1, 0xe3, 0xa7, 0xf4, 0x11,
+ 0x03, 0xf1, 0xe2, 0x25, 0xf5, 0x03, 0xf3, 0xe2, 0xfe, 0xf9, 0x01, 0xed, 0xe6,
+ 0x2b, 0x02, 0xc0, 0xe4, 0xe0, 0x21, 0xda, 0xb7, 0xe0, 0x18, 0xe2, 0x01, 0xfe,
+ 0x0b, 0xe9, 0x3d, 0x8f, 0xaf, 0xf9, 0x0d, 0xdc, 0xf6, 0xff, 0xc5, 0xc7, 0xe7,
+ 0xe0, 0x15, 0xba, 0xd2, 0x16, 0xe4, 0x02, 0x1e, 0xf5, 0x0c, 0x56, 0xe0, 0x27,
+ 0x4b, 0xc0, 0x13, 0x05, 0x08, 0x2e, 0x02, 0x06, 0x19, 0xff, 0x21, 0x2b, 0xf6,
+ 0xfe, 0x38, 0xff, 0x7f, 0xda, 0xc2, 0x43, 0x07, 0xdf, 0xdb, 0xb6, 0x03, 0x0a,
+ 0xd3, 0x1e, 0xe6, 0xeb, 0xe6, 0xdf, 0xd7, 0x05, 0xda, 0xe2, 0x2e, 0xf9, 0xe6,
+ 0x24, 0x28, 0xfa, 0xfd, 0x09, 0x0a, 0xfb, 0xe3, 0x18, 0x0f, 0xcf, 0x15, 0x13,
+ 0xe5, 0xf2, 0x00, 0xef, 0xee, 0xd6, 0x0b, 0xd7, 0xf1, 0xfc, 0xf5, 0x1c, 0xcf,
+ 0x10, 0xfa, 0x2c, 0xcf, 0x35, 0x0a, 0xe6, 0xf8, 0xe7, 0x0f, 0xd6, 0xd6, 0x39,
+ 0xe4, 0xfb, 0x04, 0x1c, 0x1f, 0xc3, 0x1f, 0x23, 0x07, 0xee, 0x1e, 0x21, 0x20,
+ 0xec, 0xf9, 0xfb, 0x0d, 0xf5, 0xef, 0xdf, 0x26, 0x07, 0x00, 0xc8, 0x26, 0x2e,
+ 0x00, 0x0e, 0xb5, 0xe3, 0x4a, 0xdb, 0xfd, 0xb0, 0x2a, 0x0b, 0xe7, 0x23, 0xee,
+ 0xf9, 0xe5, 0xfe, 0x0c, 0xd3, 0xc1, 0xf5, 0xe7, 0xf7, 0x00, 0xf1, 0xde, 0x1d,
+ 0xec, 0x05, 0xd0, 0x0c, 0xde, 0x28, 0x04, 0x26, 0xee, 0xe4, 0xfd, 0xfb, 0x0e,
+ 0xe4, 0xfd, 0x14, 0x0d, 0x0d, 0x27, 0x29, 0xfa, 0xfd, 0xda, 0x0b, 0xe2, 0x12,
+ 0x04, 0x28, 0xeb, 0xee, 0xf7, 0xbf, 0xfa, 0xc2, 0x1c, 0xf8, 0xd8, 0xc5, 0xfd,
+ 0xe8, 0x12, 0xef, 0xfe, 0xe9, 0x0a, 0x11, 0x1b, 0xf2, 0xe2, 0xc4, 0xaa, 0xd5,
+ 0xce, 0x23, 0xf2, 0xe4, 0x1f, 0xcf, 0x07, 0x06, 0x17, 0x28, 0xd6, 0x24, 0x1b,
+ 0xc5, 0x07, 0x05, 0xf2, 0x52, 0x41, 0xe6, 0x7f, 0xfb, 0xd9, 0xec, 0xfb, 0x1b,
+ 0xe5, 0xf3, 0x02, 0xdc, 0x1b, 0x16, 0x16, 0x03, 0xf5, 0x12, 0x0c, 0xee, 0xef,
+ 0x05, 0x0f, 0xed, 0x21, 0xc2, 0xfb, 0x31, 0x04, 0xe4, 0xfb, 0xe7, 0xbd, 0x37,
+ 0xff, 0x07, 0x21, 0xd8, 0x0d, 0x39, 0x0a, 0xf3, 0x02, 0xe7, 0x0c, 0x13, 0xd0,
+ 0x0e, 0x1f, 0x15, 0xff, 0x06, 0xfc, 0x22, 0xfa, 0x1d, 0x08, 0xc5, 0xeb, 0xfa,
+ 0xe1, 0xd3, 0xfa, 0xf2, 0xf2, 0xd7, 0x2b, 0xf8, 0x13, 0xe6, 0xfe, 0xd2, 0xfc,
+ 0xe9, 0x11, 0x4e, 0x14, 0xe8, 0x36, 0xed, 0xdb, 0x12, 0x14, 0x23, 0x0f, 0xb5,
+ 0xdf, 0x3f, 0x0c, 0xee, 0xf3, 0xcb, 0xcb, 0xec, 0x2f, 0xad, 0x18, 0xeb, 0xc3,
+ 0xfd, 0x64, 0x08, 0x20, 0x2c, 0x27, 0xfb, 0xcf, 0xd3, 0xfe, 0x49, 0xeb, 0xcc,
+ 0xe9, 0xc6, 0x27, 0xfc, 0xac, 0xe0, 0xe0, 0xb7, 0x4c, 0xd0, 0xdd, 0xfa, 0x43,
+ 0xee, 0xa0, 0xa1, 0xb5, 0x0c, 0xd5, 0xd7, 0xa6, 0x06, 0xe8, 0xf4, 0xce, 0x1e,
+ 0xd5, 0xfb, 0xc5, 0x0f, 0xb3, 0xc2, 0x1a, 0x08, 0xb8, 0xff, 0x44, 0x23, 0x0c,
+ 0x14, 0xe9, 0x2d, 0xe7, 0x97, 0xd7, 0x2b, 0xe7, 0xac, 0xdc, 0xcb, 0x94, 0xee,
+ 0x0b, 0x1e, 0x00, 0x50, 0x26, 0x17, 0xf1, 0x2c, 0x38, 0xda, 0x0a, 0x6f, 0xd8,
+ 0xc9, 0x10, 0x26, 0xe3, 0x0d, 0x19, 0x1a, 0xf1, 0x15, 0xe6, 0xf9, 0xdd, 0xee,
+ 0xab, 0x20, 0xee, 0xfc, 0xde, 0xdd, 0x16, 0x23, 0x1f, 0x9f, 0x25, 0x2e, 0xe6,
+ 0x21, 0x0d, 0xc9, 0xfa, 0xcf, 0xe3, 0x01, 0xcf, 0x24, 0x71, 0xa5, 0xf5, 0x2e,
+ 0xdf, 0x35, 0x17, 0x30, 0xe3, 0xeb, 0x1e, 0x29, 0x16, 0xfb, 0x23, 0xe5, 0x20,
+ 0xf8, 0x1e, 0xf4, 0xb1, 0xe9, 0xbc, 0x08, 0x20, 0x00, 0x17, 0xcf, 0x03, 0x20,
+ 0xde, 0xbb, 0xd4, 0xf4, 0xc3, 0xe7, 0x2b, 0xe1, 0xb0, 0x38, 0x01, 0xdf, 0x9d,
+ 0x73, 0x16, 0x17, 0xc2, 0xe8, 0x47, 0x15, 0xfb, 0xc7, 0x07, 0xfb, 0x49, 0xd3,
+ 0x09, 0xbb, 0xaa, 0x38, 0x29, 0xef, 0xe6, 0xc9, 0xbf, 0x0c, 0x4b, 0xe0, 0x09,
+ 0x52, 0x15, 0x0a, 0x94, 0x89, 0xa6, 0xd5, 0xe4, 0xf6, 0x18, 0x04, 0xe1, 0x2a,
+ 0xda, 0xe6, 0xb4, 0xd1, 0x0b, 0x59, 0xf7, 0xb6, 0xc2, 0x91, 0xec, 0xaf, 0xbb,
+ 0x3b, 0xcb, 0x22, 0xfc, 0xf8, 0x18, 0xc4, 0xbd, 0x12, 0x81, 0xc0, 0xcd, 0xdf,
+ 0x09, 0xaa, 0x0d, 0x50, 0xe7, 0xe3, 0x10, 0x28, 0x25, 0x9f, 0xd7, 0xbc, 0xac,
+ 0x02, 0x3b, 0x00, 0xcd, 0x21, 0xee, 0xf3, 0xdc, 0x16, 0x10, 0xbb, 0x25, 0xae,
+ 0xe1, 0x22, 0xca, 0xfa, 0x95, 0xf1, 0xd6, 0x38, 0xd7, 0x9e, 0xd8, 0xc9, 0xe8,
+ 0xd9, 0x10, 0xd9, 0xdb, 0xd7, 0xeb, 0xa2, 0x59, 0x39, 0xd7, 0x08, 0xd7, 0xf1,
+ 0x9e, 0xef, 0x0c, 0xc6, 0xda, 0x17, 0xef, 0xd9, 0xec, 0xc0, 0x03, 0x09, 0x1e,
+ 0xea, 0xef, 0x63, 0xfb, 0xdd, 0x89, 0xdf, 0xaa, 0xf6, 0xec, 0x0a, 0x2e, 0x31,
+ 0xee, 0x2e, 0x90, 0xe8, 0x17, 0xd5, 0x52, 0xde, 0x29, 0xac, 0x0b, 0xfa, 0xf1,
+ 0xff, 0xb3, 0xb0, 0x01, 0xdf, 0x0f, 0x53, 0xa4, 0xea, 0xd0, 0xe0, 0xb0, 0xc7,
+ 0x22, 0xf4, 0x1b, 0x7f, 0xbd, 0xe5, 0xe4, 0x93, 0x16, 0xca, 0xf8, 0xb6, 0xee,
+ 0x01, 0x04, 0x07, 0xf7, 0x07, 0xfc, 0xe4, 0xd1, 0x00, 0xf8, 0xc2, 0xca, 0xfa,
+ 0x33, 0x03, 0xec, 0xd3, 0xd6, 0x03, 0x0c, 0xce, 0x0a, 0x15, 0xb8, 0xf1, 0x05,
+ 0xe9, 0x32, 0x95, 0xf0, 0x0c, 0xd8, 0x10, 0x00, 0xcd, 0xe0, 0xbe, 0xf9, 0x11,
+ 0xac, 0xba, 0xfc, 0x75, 0xe7, 0x27, 0xa8, 0x36, 0xbb, 0xf4, 0x35, 0x32, 0xfc,
+ 0xb4, 0xdc, 0x0b, 0x1c, 0x50, 0x0e, 0xad, 0xd4, 0xc1, 0xc7, 0xde, 0x05, 0xdc,
+ 0x41, 0x0e, 0xae, 0xfa, 0x09, 0xf0, 0x96, 0xe0, 0xc1, 0xd7, 0xc6, 0x00, 0x9d,
+ 0x05, 0xff, 0xec, 0x14, 0xce, 0xe4, 0x09, 0x17, 0x02, 0x04, 0xeb, 0x58, 0xee,
+ 0x0c, 0x15, 0x19, 0xd7, 0xb1, 0xcd, 0xea, 0x89, 0x8a, 0x12, 0xf5, 0x3c, 0x02,
+ 0x5b, 0xf8, 0xca, 0x06, 0xa6, 0xc5, 0xec, 0x11, 0xcd, 0x30, 0xe0, 0x04, 0x1e,
+ 0xf9, 0xc4, 0xe1, 0xae, 0xbe, 0x12, 0x1c, 0x03, 0xfc, 0xf0, 0xa2, 0x3a, 0xae,
+ 0x0c, 0x6e, 0x0a, 0xe1, 0xe5, 0xeb, 0xba, 0x31, 0xbe, 0x42, 0x27, 0xd5, 0x00,
+ 0xaa, 0xcc, 0x28, 0xcd, 0x05, 0x09, 0xd3, 0xd0, 0xf4, 0x07, 0xbe, 0x14, 0xf3,
+ 0x10, 0xf2, 0x18, 0x35, 0x1f, 0x42, 0xe0, 0xf1, 0xeb, 0xd2, 0x24, 0xfc, 0x01,
+ 0xc7, 0x47, 0x9e, 0x04, 0x17, 0x03, 0xf4, 0xab, 0xe6, 0x96, 0x78, 0xbb, 0xbd,
+ 0x16, 0xb3, 0x03, 0xca, 0xda, 0x07, 0x09, 0xc9, 0x13, 0xf7, 0x00, 0x14, 0xb8,
+ 0xc7, 0xee, 0x02, 0x1f, 0x1e, 0xc6, 0x88, 0xe2, 0x3c, 0xd9, 0xf9, 0xb5, 0xfe,
+ 0x9e, 0x04, 0xe4, 0x01, 0xf4, 0x46, 0x55, 0x0d, 0xe3, 0x22, 0x45, 0xf7, 0xb7,
+ 0xae, 0x0b, 0x49, 0xe7, 0x43, 0x24, 0x49, 0x3a, 0xd8, 0xd7, 0x49, 0x11, 0x06,
+ 0x15, 0x12, 0xec, 0x02, 0x4e, 0x61, 0x45, 0xf9, 0xe9, 0x1a, 0x0f, 0x0b, 0x98,
+ 0xf8, 0x4f, 0x22, 0x2d, 0x1b, 0xc7, 0xf4, 0x21, 0xa2, 0xe0, 0x7f, 0xda, 0xdc,
+ 0xa3, 0x2b, 0x33, 0xf9, 0x10, 0x1d, 0xe4, 0xc4, 0xd6, 0xb1, 0xd7, 0x05, 0xd7,
+ 0xa4, 0x1e, 0x42, 0xcc, 0xf2, 0xc6, 0xd4, 0xf3, 0xc2, 0x39, 0x91, 0x21, 0xf9,
+ 0xd4, 0x24, 0xe1, 0x16, 0xc4, 0xf3, 0xd4, 0xbc, 0xfe, 0x15, 0x11, 0x99, 0xee,
+ 0xd1, 0x0c, 0x17, 0xe0, 0x29, 0xe0, 0x2e, 0x5f, 0x4f, 0x27, 0xe7, 0x06, 0x36,
+ 0xcd, 0x41, 0xe4, 0x97, 0x18, 0x31, 0xf7, 0x23, 0x0a, 0x05, 0xfd, 0x9e, 0x17,
+ 0x27, 0x15, 0x03, 0x0d, 0x19, 0x1a, 0xe6, 0xf1, 0x0e, 0x2b, 0xce, 0xda, 0xc7,
+ 0xc2, 0xf8, 0xdc, 0xc0, 0xaa, 0x35, 0xb9, 0xba, 0xe4, 0xc2, 0x16, 0x1c, 0x38,
+ 0xc2, 0xc1, 0x09, 0x23, 0xf5, 0x0a, 0x0d, 0xf3, 0x0b, 0x05, 0x49, 0xdf, 0x05,
+ 0x0b, 0x22, 0x1d, 0x3f, 0xdd, 0x39, 0x61, 0xc8, 0xc5, 0x70, 0x18, 0xdb, 0x26,
+ 0x24, 0x8f, 0xbb, 0x5e, 0x47, 0x19, 0x0e, 0xbf, 0xe0, 0x1d, 0xc8, 0xdf, 0x1f,
+ 0xaf, 0x40, 0x3d, 0x42, 0x46, 0xfb, 0xb2, 0xfb, 0xe5, 0x90, 0x26, 0xe0, 0x19,
+ 0x3b, 0x13, 0x32, 0x15, 0x54, 0x15, 0xe5, 0xa6, 0x9d, 0xd3, 0xab, 0xc2, 0xf8,
+ 0xb4, 0x25, 0x10, 0x3a, 0xce, 0x23, 0xf4, 0xa1, 0xcf, 0xff, 0x0f, 0xf8, 0x10,
+ 0xd8, 0x72, 0x0e, 0xe5, 0xde, 0xd6, 0x0a, 0x32, 0xb8, 0x11, 0xec, 0x9f, 0x19,
+ 0x12, 0x07, 0xc1, 0x2a, 0xf6, 0x33, 0xc8, 0xfc, 0x0f, 0xf6, 0xf8, 0x19, 0x13,
+ 0x12, 0xfa, 0x01, 0xce, 0x26, 0xdb, 0x11, 0x1e, 0xbe, 0xe5, 0xd6, 0xdb, 0xfb,
+ 0xf8, 0x2b, 0x2a, 0x32, 0x34, 0xf4, 0xc5, 0x43, 0x18, 0x06, 0xcb, 0xd5, 0x13,
+ 0xe1, 0x1b, 0xff, 0x2d, 0x17, 0x0c, 0xee, 0xc0, 0xe0, 0x9c, 0xbe, 0x1d, 0x0c,
+ 0xff, 0x25, 0x52, 0xed, 0xf3, 0x3d, 0xec, 0xd3, 0x35, 0xe2, 0x0f, 0xcb, 0x52,
+ 0x0f, 0x1b, 0xd5, 0xee, 0x12, 0x41, 0xdf, 0xf7, 0x1d, 0xdc, 0xd9, 0xd5, 0xf8,
+ 0xfa, 0xfc, 0xe2, 0x26, 0xf8, 0xd1, 0x3b, 0xd1, 0xf0, 0x18, 0xe9, 0x2f, 0x37,
+ 0x07, 0xd8, 0xe2, 0xd9, 0x99, 0xdc, 0xf1, 0xec, 0xfc, 0xe3, 0x1b, 0xb5, 0x0c,
+ 0x2c, 0x34, 0xfb, 0x38, 0x26, 0xe6, 0xa7, 0xd8, 0xbd, 0xd9, 0xe8, 0xe6, 0x21,
+ 0x08, 0xfd, 0x18, 0x44, 0xf1, 0x0a, 0xae, 0xfd, 0xd6, 0x45, 0x0b, 0xcf, 0x12,
+ 0xf8, 0xdd, 0xf1, 0x28, 0xd5, 0x0c, 0xec, 0x19, 0x3d, 0xe7, 0xec, 0xf2, 0xf6,
+ 0xb0, 0x53, 0x1a, 0xe4, 0x20, 0x21, 0x35, 0xf0, 0xd6, 0xcb, 0x15, 0xdc, 0xd7,
+ 0xff, 0xf9, 0xe1, 0x9e, 0xf6, 0xbd, 0x08, 0xfe, 0xdb, 0xed, 0xd9, 0x10, 0x37,
+ 0xf1, 0xbf, 0xf6, 0x9a, 0xf0, 0xeb, 0x3a, 0xf8, 0x04, 0xc5, 0xe2, 0xb9, 0x05,
+ 0x2f, 0x29, 0x11, 0x1f, 0x15, 0xe8, 0x19, 0x0f, 0xd2, 0x18, 0xde, 0x7f, 0x03,
+ 0x0d, 0xf8, 0xdb, 0xe7, 0xe1, 0xe6, 0xd8, 0x08, 0xcc, 0xd9, 0x29, 0xef, 0xb4,
+ 0x03, 0x48, 0x29, 0x00, 0x05, 0x0c, 0xf0, 0x26, 0xfa, 0xfd, 0xcf, 0x0f, 0x19,
+ 0xeb, 0xb6, 0xdd, 0xd6, 0x27, 0x53, 0x13, 0xfa, 0x0a, 0xf4, 0xf8, 0x0b, 0x5f,
+ 0xfb, 0xcc, 0xe7, 0xb3, 0x21, 0xf9, 0x68, 0x08, 0x63, 0xb5, 0x2d, 0xd1, 0xea,
+ 0x22, 0xdd, 0x1b, 0x03, 0xe3, 0xcf, 0xa6, 0xe9, 0xd7, 0x1e, 0x0a, 0x1e, 0x3f,
+ 0xb8, 0x08, 0xca, 0xdb, 0x14, 0x06, 0x3b, 0x64, 0x27, 0x21, 0xcd, 0xb9, 0xf1,
+ 0x1f, 0xc4, 0x08, 0x05, 0xcf, 0xce, 0xbb, 0xf8, 0x8d, 0xb9, 0xec, 0x5b, 0x56,
+ 0x6f, 0x0b, 0xe0, 0xcd, 0x21, 0xb8, 0xe0, 0x10, 0xf8, 0xc7, 0x39, 0xea, 0x56,
+ 0xde, 0x36, 0xb3, 0xf7, 0xeb, 0xde, 0xde, 0x1d, 0xf2, 0x39, 0xd1, 0xb7, 0xf6,
+ 0xaa, 0x50, 0x01, 0xc8, 0x20, 0xcf, 0xd5, 0x98, 0xca, 0x08, 0xa1, 0xf0, 0x1a,
+ 0xc5, 0x1b, 0xdc, 0xde, 0x10, 0xce, 0x09, 0x05, 0xba, 0xa8, 0xf2, 0xdf, 0xd9,
+ 0xed, 0xc2, 0x1d, 0x17, 0xf3, 0xff, 0xca, 0x56, 0x5c, 0xf9, 0x14, 0x95, 0xdc,
+ 0x14, 0x02, 0x5f, 0x01, 0xc3, 0xf4, 0x42, 0xb1, 0x44, 0xc4, 0x9b, 0xb2, 0xfd,
+ 0xff, 0x01, 0x2c, 0x01, 0xbc, 0xb7, 0xa1, 0xd1, 0xee, 0x16, 0x2b, 0xe6, 0x50,
+ 0xef, 0xc8, 0x3b, 0xaa, 0xbb, 0x15, 0xfd, 0xde, 0xfc, 0xe0, 0xee, 0x0a, 0xed,
+ 0xf2, 0x44, 0x06, 0xab, 0x11, 0xee, 0xe8, 0x05, 0xdb, 0xeb, 0x27, 0xf9, 0xa9,
+ 0xd3, 0x08, 0xf7, 0x60, 0x3b, 0xf8, 0xe2, 0xe4, 0x07, 0xf4, 0xf7, 0x08, 0xf4,
+ 0x0c, 0x49, 0x1f, 0xb9, 0xef, 0xd0, 0xc4, 0x6f, 0x05, 0xc1, 0xbc, 0x0f, 0xc0,
+ 0xbe, 0x33, 0x3f, 0x81, 0xbf, 0xcf, 0xe3, 0x34, 0xd1, 0xfb, 0x2f, 0xe9, 0x28,
+ 0xe0, 0xf9, 0xba, 0x2c, 0x18, 0xe3, 0x23, 0xfc, 0xf2, 0xa8, 0x16, 0x90, 0x29,
+ 0xcd, 0x66, 0x0d, 0xd8, 0x21, 0xeb, 0xb5, 0xed, 0x1b, 0xad, 0xfa, 0x33, 0x1b,
+ 0x3b, 0x9c, 0xbd, 0x0e, 0x9f, 0x11, 0x06, 0xd0, 0xd8, 0xa2, 0x0d, 0xb3, 0x92,
+ 0xc8, 0x08, 0x22, 0xc4, 0x0a, 0xf9, 0x12, 0xe6, 0x25, 0xd3, 0x2b, 0xeb, 0xea,
+ 0xfa, 0xbe, 0x09, 0xf6, 0x30, 0x0f, 0xf3, 0x05, 0x18, 0x04, 0xee, 0xef, 0xee,
+ 0xbc, 0xf1, 0xc4, 0xe0, 0x0c, 0xf5, 0xfe, 0xf5, 0xee, 0xed, 0x05, 0xcd, 0x3e,
+ 0xd5, 0xd3, 0x15, 0xf1, 0xd7, 0x18, 0xb1, 0x0b, 0xe8, 0xff, 0xc4, 0x37, 0x10,
+ 0xd7, 0xba, 0xf2, 0x0d, 0xbb, 0xe8, 0x03, 0x36, 0x2e, 0x0d, 0xf0, 0xf3, 0x05,
+ 0xd8, 0xd1, 0xf0, 0x0f, 0xe4, 0x03, 0xc8, 0xf3, 0x06, 0xe8, 0xf3, 0x06, 0xf8,
+ 0x0a, 0xdf, 0xc8, 0xf9, 0xfb, 0xd3, 0xd6, 0xfa, 0xf0, 0xd4, 0x16, 0xcd, 0xf8,
+ 0x2d, 0xfd, 0xe0, 0xfa, 0xab, 0x14, 0xe6, 0x1e, 0xd6, 0x12, 0x32, 0xef, 0x04,
+ 0xf9, 0xd7, 0xec, 0xce, 0xf7, 0xc8, 0xfa, 0x01, 0x1e, 0x0b, 0x0e, 0xfc, 0xd5,
+ 0xe5, 0xf4, 0xd5, 0x0e, 0x06, 0xf4, 0xeb, 0xe2, 0xb8, 0xe4, 0xee, 0x0c, 0xd4,
+ 0xfe, 0xd0, 0xff, 0xe8, 0x10, 0x13, 0xc4, 0xad, 0xed, 0xf7, 0xea, 0xfc, 0xf2,
+ 0xf8, 0xfa, 0xf4, 0xd7, 0xf4, 0xea, 0xed, 0x22, 0x2c, 0xf8, 0xe9, 0xe5, 0x2e,
+ 0xda, 0x7f, 0x03, 0xf3, 0xef, 0xf3, 0xc2, 0xe4, 0x39, 0xf3, 0x07, 0x11, 0xc4,
+ 0xe0, 0xdd, 0x11, 0xe3, 0xf7, 0xe7, 0xf0, 0x1d, 0xf7, 0x11, 0xfb, 0x07, 0x1a,
+ 0x11, 0x05, 0x07, 0xf3, 0xd5, 0xdc, 0x2c, 0xfe, 0xe6, 0x23, 0xcb, 0x15, 0x09,
+ 0xc0, 0xc2, 0xdb, 0xe7, 0x1c, 0xea, 0xe0, 0x34, 0xfc, 0x11, 0x04, 0xfd, 0xf2,
+ 0x0e, 0xaa, 0xce, 0x10, 0x19, 0xe6, 0xff, 0xd4, 0xe1, 0xca, 0xdc, 0xcf, 0x2c,
+ 0xbc, 0x0d, 0xfe, 0xf6, 0xf1, 0x05, 0xfe, 0xed, 0x35, 0xd6, 0x13, 0x48, 0xdd,
+ 0x27, 0x0b, 0xdc, 0xfd, 0x0a, 0x23, 0x26, 0xfa, 0xfb, 0x13, 0xe9, 0xd2, 0x18,
+ 0xe4, 0x4f, 0xbb, 0xcc, 0x21, 0xe6, 0xf3, 0x22, 0x01, 0x04, 0x37, 0x04, 0x09,
+ 0x51, 0xc9, 0xb5, 0xe3, 0x0b, 0x30, 0xf2, 0x13, 0xf4, 0xe8, 0x13, 0x01, 0xc4,
+ 0xfe, 0xfc, 0x43, 0x52, 0xcf, 0x20, 0xde, 0xfd, 0xc4, 0xc4, 0xf6, 0xb3, 0x3a,
+ 0xd9, 0xd7, 0xea, 0xf0, 0xef, 0xed, 0x0b, 0x1c, 0xcf, 0x7f, 0x43, 0x30, 0x25,
+ 0x3e, 0xce, 0x11, 0xf7, 0xda, 0xce, 0xf5, 0x0d, 0x15, 0x10, 0x0e, 0x1f, 0xfe,
+ 0x45, 0xd3, 0x26, 0xfb, 0x1f, 0xfc, 0x29, 0x31, 0xf3, 0x17, 0xf9, 0xe4, 0xce,
+ 0x37, 0x15, 0x07, 0xf0, 0xe2, 0x2e, 0x0a, 0x4f, 0xc7, 0x51, 0xcf, 0xe9, 0xc3,
+ 0xe2, 0xea, 0x12, 0xea, 0x27, 0xb1, 0xe6, 0x30, 0xe6, 0xd8, 0x09, 0xd9, 0xf5,
+ 0x07, 0x13, 0xf7, 0xf8, 0xfc, 0xc7, 0x19, 0xf8, 0xe6, 0xd2, 0x00, 0xe0, 0x33,
+ 0x09, 0x05, 0x13, 0xfa, 0x00, 0xfc, 0x06, 0xad, 0xcc, 0xf8, 0x38, 0x05, 0x05,
+ 0x35, 0xed, 0x1a, 0x1c, 0xea, 0x15, 0xec, 0xec, 0x04, 0xee, 0xca, 0x17, 0xe9,
+ 0xf6, 0x3f, 0xf6, 0xde, 0xd5, 0x25, 0x1a, 0x0c, 0x1a, 0xea, 0xd7, 0xd7, 0xdd,
+ 0x23, 0xf8, 0xaf, 0x07, 0xfa, 0xbb, 0x29, 0x35, 0xd5, 0x02, 0xd0, 0x02, 0xff,
+ 0xd2, 0x14, 0xc5, 0x4d, 0x1e, 0xe7, 0xe0, 0x1d, 0xc0, 0xfd, 0xd3, 0xcd, 0x4d,
+ 0x23, 0xca, 0x49, 0x07, 0xff, 0x6f, 0x06, 0x39, 0xdf, 0x17, 0x1d, 0xc5, 0x04,
+ 0xf1, 0xee, 0xe4, 0xee, 0xfd, 0x05, 0xe9, 0x19, 0x26, 0x17, 0x13, 0xc5, 0xf9,
+ 0x2c, 0x06, 0x26, 0xea, 0x0c, 0xea, 0x13, 0xb3, 0xb2, 0xdb, 0x0e, 0x09, 0x19,
+ 0xf7, 0xff, 0x0a, 0xe9, 0x30, 0xdf, 0x20, 0xca, 0xd9, 0xf8, 0x02, 0x0d, 0xd1,
+ 0xec, 0xf0, 0x11, 0xf3, 0xf8, 0xd6, 0xe6, 0xf6, 0xd4, 0x08, 0x0a, 0xfa, 0xdb,
+ 0x00, 0x59, 0xdf, 0xef, 0x0a, 0xf8, 0x00, 0xee, 0xea, 0xfe, 0xc0, 0xed, 0x01,
+ 0xd9, 0x1e, 0x0e, 0x41, 0x20, 0x23, 0x18, 0xfb, 0x1f, 0xf1, 0x11, 0xf4, 0xf2,
+ 0x34, 0xed, 0xdf, 0xf4, 0xe0, 0xfc, 0xde, 0xff, 0x26, 0xd6, 0xc3, 0x14, 0xdf,
+ 0xfa, 0xcc, 0xda, 0xdd, 0x12, 0xee, 0x03, 0x02, 0xd0, 0xdb, 0x2d, 0xdb, 0xda,
+ 0xf3, 0xf8, 0xd4, 0x27, 0xbc, 0xdf, 0x06, 0xf6, 0xff, 0x1b, 0x00, 0xd2, 0x06,
+ 0x10, 0xfd, 0xfd, 0xeb, 0xff, 0xe9, 0xe5, 0xdd, 0x03, 0xdc, 0x06, 0x3f, 0x45,
+ 0xfe, 0x08, 0x20, 0x24, 0x2f, 0x1e, 0xf3, 0xf3, 0xc2, 0x20, 0xd0, 0xfc, 0xed,
+ 0xbf, 0x03, 0xfb, 0xee, 0x04, 0x18, 0xd9, 0xd2, 0x1b, 0xe2, 0xdd, 0xfe, 0xdb,
+ 0x21, 0x2a, 0xe6, 0xf7, 0x07, 0xd4, 0x04, 0xe3, 0x27, 0x27, 0xdc, 0x03, 0xc8,
+ 0xed, 0xe0, 0x1b, 0xf7, 0x34, 0xc8, 0xe5, 0xc3, 0x1d, 0xfb, 0x08, 0xeb, 0xd5,
+ 0xe6, 0x21, 0x11, 0x21, 0xed, 0x2a, 0xc7, 0xd8, 0xe1, 0xfe, 0x0a, 0xe5, 0xb9,
+ 0x10, 0xff, 0x23, 0x1b, 0xb1, 0xf4, 0xe3, 0xf2, 0x11, 0xe7, 0xd4, 0x0d, 0xfe,
+ 0x00, 0x21, 0xd6, 0xdd, 0x03, 0xe5, 0xf0, 0x11, 0xf7, 0xed, 0xe1, 0xfc, 0x0c,
+ 0x09, 0xa9, 0xdf, 0xed, 0xdc, 0xf2, 0xb8, 0xfc, 0xf2, 0x06, 0x3a, 0x32, 0x1f,
+ 0xfb, 0xac, 0xe0, 0xec, 0x01, 0x2f, 0xdd, 0xcd, 0x0e, 0xcc, 0x16, 0x2f, 0x20,
+ 0x2e, 0x03, 0xf4, 0x1f, 0xdf, 0xbf, 0xd8, 0x14, 0x0a, 0x0b, 0xe4, 0xf8, 0xec,
+ 0xd7, 0xe2, 0xe0, 0xe6, 0xfa, 0xf6, 0xcd, 0xf9, 0xd5, 0xcc, 0xe2, 0xfd, 0x16,
+ 0xf9, 0xea, 0x0c, 0xc6, 0xcc, 0x26, 0xd3, 0xec, 0xea, 0xed, 0x08, 0xe2, 0xee,
+ 0xe4, 0x00, 0xe2, 0xfa, 0xe1, 0x0e, 0x0d, 0xfe, 0x29, 0xc9, 0x1d, 0x1d, 0x0d,
+ 0xfb, 0x26, 0xfd, 0x0e, 0x22, 0xf4, 0xe8, 0xc3, 0x5d, 0xe4, 0xff, 0x7f, 0x2f,
+ 0x20, 0xee, 0xc8, 0xe7, 0xf7, 0xcc, 0x0b, 0xe3, 0x0f, 0xa5, 0xd0, 0xcd, 0x08,
+ 0xe6, 0xff, 0xc7, 0x01, 0x12, 0xe8, 0xe2, 0xd6, 0xf2, 0xfc, 0xf2, 0x06, 0xf1,
+ 0xa2, 0xfa, 0xc7, 0xd5, 0xdd, 0xc9, 0xcb, 0xe5, 0xe5, 0xd2, 0xfb, 0xf0, 0x00,
+ 0xe0, 0xfc, 0x04, 0xf4, 0xd6, 0x40, 0x1a, 0xa2, 0xee, 0xe7, 0x15, 0xd4, 0x16,
+ 0xdd, 0xf8, 0x00, 0xd0, 0xe2, 0x3c, 0xec, 0xe4, 0xe3, 0xde, 0xf4, 0x04, 0xc3,
+ 0xd7, 0x11, 0x28, 0xed, 0xd2, 0xa6, 0xe1, 0x21, 0xe7, 0xf3, 0x3a, 0x07, 0x1e,
+ 0x72, 0x38, 0x09, 0xea, 0xf0, 0xf4, 0x08, 0xf2, 0xd4, 0x01, 0xcf, 0x1a, 0xd1,
+ 0xfb, 0x3e, 0xc6, 0xf1, 0x30, 0xe4, 0xeb, 0x38, 0xb3, 0xf7, 0x18, 0xd7, 0xe6,
+ 0xf6, 0x19, 0xfe, 0x04, 0xc5, 0x2f, 0xf6, 0xf2, 0xe5, 0xe4, 0xca, 0x08, 0xfd,
+ 0x5f, 0xbf, 0x09, 0xb3, 0xfc, 0xea, 0xcf, 0xc7, 0xe0, 0xac, 0x2f, 0x1c, 0x36,
+ 0x20, 0xf6, 0xb2, 0xc2, 0xa2, 0x0d, 0x05, 0xdf, 0xc3, 0x1f, 0xc9, 0xf3, 0xfa,
+ 0xb7, 0x3b, 0x05, 0x19, 0xb1, 0xf2, 0xe6, 0xf5, 0x07, 0x1d, 0xeb, 0xc0, 0xa6,
+ 0xb5, 0xea, 0xd9, 0xf7, 0xf0, 0xf9, 0x05, 0xf6, 0xff, 0x2d, 0xf2, 0xc9, 0x02,
+ 0xd3, 0x03, 0xbb, 0xb2, 0xe2, 0xe0, 0x38, 0x40, 0xcd, 0xf7, 0xda, 0x20, 0xd4,
+ 0x26, 0x0d, 0x32, 0xb4, 0x13, 0xbb, 0x19, 0x6f, 0xf6, 0xe7, 0xbf, 0xe1, 0x19,
+ 0xaf, 0x14, 0xc5, 0x3c, 0xfd, 0xdd, 0xf7, 0xef, 0xcc, 0x08, 0xce, 0xd4, 0xf5,
+ 0x04, 0xc2, 0xc9, 0x02, 0xaa, 0xc3, 0xb3, 0xc6, 0x19, 0xfe, 0x0f, 0x28, 0xe4,
+ 0x81, 0x13, 0x17, 0xf8, 0xbd, 0x14, 0x08, 0x2d, 0xfb, 0x3d, 0xf7, 0x07, 0x0f,
+ 0x12, 0xe5, 0xda, 0xcb, 0x41, 0xda, 0x2b, 0xf4, 0x19, 0xcd, 0x2d, 0x38, 0x10,
+ 0x19, 0x2a, 0x16, 0xd1, 0xdd, 0xda, 0xd7, 0x23, 0x13, 0x0c, 0xe6, 0xda, 0x93,
+ 0xe3, 0xc2, 0xcd, 0xe1, 0xe4, 0xe8, 0xe8, 0x07, 0xf6, 0x19, 0x0c, 0xd1, 0x14,
+ 0x09, 0xd8, 0xc4, 0x20, 0x0d, 0xc6, 0x0b, 0xcf, 0x00, 0x00, 0xfc, 0xea, 0xde,
+ 0xaa, 0x0f, 0x0d, 0x19, 0x95, 0xe7, 0x44, 0xb3, 0x2c, 0xcc, 0x38, 0x39, 0xdc,
+ 0xc1, 0xe0, 0x1f, 0xd7, 0xd0, 0x07, 0xbc, 0x30, 0x3f, 0x0a, 0xde, 0xea, 0xe7,
+ 0xf1, 0xc2, 0xf2, 0x1c, 0xb2, 0xee, 0xee, 0xb0, 0xea, 0xdc, 0xcf, 0x95, 0x17,
+ 0xe8, 0x4f, 0xce, 0x49, 0xb9, 0xdd, 0x0f, 0xe9, 0x02, 0x32, 0xa9, 0xf0, 0xe8,
+ 0x19, 0x32, 0x10, 0xfa, 0x09, 0xbd, 0xd4, 0x01, 0x1d, 0xf8, 0x23, 0xec, 0xde,
+ 0xae, 0xe8, 0xd3, 0x14, 0xe4, 0x31, 0xfd, 0x56, 0xeb, 0xb9, 0x03, 0x06, 0xeb,
+ 0x32, 0xd8, 0xe5, 0x1f, 0x35, 0x53, 0xfe, 0xda, 0x0c, 0xb1, 0xdb, 0xc1, 0xcd,
+ 0x53, 0xe6, 0x16, 0xfb, 0xf3, 0xd7, 0xde, 0x01, 0xc8, 0xef, 0x23, 0x2e, 0xda,
+ 0xdf, 0xc0, 0xc9, 0xe4, 0xf0, 0xe1, 0xcb, 0xe7, 0x7f, 0xf5, 0xe8, 0xe2, 0x14,
+ 0x17, 0x2f, 0xe1, 0xda, 0xcb, 0xa2, 0x2d, 0x0b, 0xfb, 0xee, 0x10, 0x20, 0xf6,
+ 0x0f, 0x15, 0xfd, 0x11, 0xd4, 0x50, 0xec, 0xfb, 0xf7, 0xd8, 0xb3, 0xe6, 0xe2,
+ 0xbe, 0x3a, 0x32, 0xf1, 0xf2, 0x36, 0xc3, 0xaa, 0x27, 0xf9, 0x31, 0x41, 0xf6,
+ 0xd7, 0x0d, 0x07, 0xc8, 0xee, 0xfc, 0x13, 0x00, 0xeb, 0x1c, 0xe5, 0x08, 0x1f,
+ 0x17, 0xf7, 0xf1, 0xee, 0xe2, 0x1a, 0xf9, 0xcc, 0xec, 0x95, 0x26, 0xee, 0x03,
+ 0xf1, 0xbf, 0x0e, 0x1c, 0x46, 0xf6, 0x16, 0x1c, 0xf6, 0xd4, 0x1a, 0xfa, 0xef,
+ 0x0d, 0x44, 0xe4, 0x3e, 0x6d, 0x3f, 0x1c, 0x43, 0xd8, 0xfd, 0x3a, 0xcb, 0xe8,
+ 0x06, 0xfc, 0xf6, 0x07, 0x3f, 0xfa, 0xef, 0xc1, 0xb7, 0xfd, 0x0b, 0x3c, 0x0f,
+ 0xe1, 0x0b, 0xe1, 0xef, 0x9b, 0xd3, 0x95, 0x1d, 0xf3, 0xf5, 0xf1, 0xff, 0x16,
+ 0x02, 0xf4, 0x15, 0xf5, 0xa6, 0xd5, 0xf6, 0x03, 0x1c, 0x3a, 0xfd, 0xe0, 0x05,
+ 0xff, 0x0e, 0xda, 0xce, 0xc0, 0xdd, 0xcd, 0xe2, 0xdf, 0xba, 0x14, 0xc7, 0xf9,
+ 0xf8, 0x12, 0xfd, 0xe3, 0x31, 0xe5, 0x8e, 0xfb, 0x07, 0xf0, 0xf9, 0xf3, 0xd5,
+ 0xd5, 0x08, 0xa6, 0x01, 0x11, 0x33, 0x23, 0x24, 0x45, 0x4e, 0x3a, 0x0d, 0x20,
+ 0xd7, 0x1e, 0x39, 0x19, 0xd7, 0xfd, 0xa0, 0xc6, 0xe5, 0xe7, 0xd3, 0xba, 0x11,
+ 0xfc, 0x2a, 0xfe, 0x19, 0xf0, 0xcb, 0xce, 0xe1, 0xdd, 0x35, 0x0c, 0x3c, 0xf2,
+ 0xf9, 0x07, 0x17, 0xc1, 0xf9, 0xd5, 0x06, 0x11, 0x87, 0xf1, 0x0d, 0x0d, 0xee,
+ 0xf1, 0xdb, 0xa5, 0x12, 0xe6, 0xd2, 0x29, 0x37, 0xd9, 0xe4, 0xcb, 0x38, 0xc4,
+ 0x2a, 0x14, 0xbf, 0xc2, 0x2b, 0x0e, 0xe6, 0xda, 0xd7, 0xce, 0xf6, 0xf7, 0x39,
+ 0x1d, 0xfb, 0x01, 0xfe, 0xe9, 0xb2, 0xde, 0x99, 0xfb, 0x38, 0x24, 0xbc, 0xe9,
+ 0xd6, 0xc8, 0x1f, 0xbb, 0x55, 0xfc, 0xe2, 0xdc, 0x33, 0xde, 0x01, 0x08, 0x0e,
+ 0x19, 0xe9, 0x20, 0x33, 0xfb, 0x9b, 0xdd, 0x0c, 0xbb, 0xf2, 0xc6, 0x1d, 0xbc,
+ 0x16, 0x1a, 0xd9, 0xc6, 0x81, 0x35, 0xfd, 0xe8, 0x1e, 0x25, 0xbb, 0x27, 0xd0,
+ 0x16, 0xe4, 0xd9, 0x39, 0xad, 0xa0, 0xd3, 0xe1, 0x20, 0xfa, 0x01, 0xee, 0x08,
+ 0xdb, 0xdc, 0x6a, 0x2f, 0xc1, 0x43, 0xf0, 0x01, 0x07, 0xb1, 0xc6, 0xa7, 0x32,
+ 0x02, 0xcf, 0x20, 0x06, 0x48, 0x28, 0x11, 0xc4, 0xec, 0x6b, 0xd0, 0x14, 0xee,
+ 0x6a, 0x26, 0xd7, 0xf2, 0x46, 0xff, 0x29, 0xa5, 0xdf, 0xe1, 0xdc, 0xd6, 0x11,
+ 0xd8, 0x08, 0xe9, 0xf2, 0x0e, 0xdc, 0x89, 0xdf, 0xe6, 0x14, 0xec, 0x3a, 0x10,
+ 0x3e, 0xed, 0xe2, 0x20, 0x3e, 0x13, 0xf9, 0xba, 0xfe, 0xd7, 0xca, 0xf2, 0x44,
+ 0x1f, 0x04, 0x14, 0xc1, 0xfb, 0x0b, 0xf2, 0x66, 0xc8, 0xf8, 0x45, 0x0b, 0x36,
+ 0x1b, 0xd1, 0x28, 0x1c, 0x00, 0x0b, 0x14, 0xb5, 0xfa, 0xd3, 0xf6, 0x2a, 0xd4,
+ 0xcc, 0xc9, 0xaf, 0xd8, 0xca, 0x06, 0x26, 0x02, 0xd1, 0xde, 0xc5, 0x02, 0xc0,
+ 0xf0, 0x1d, 0x32, 0x31, 0xd4, 0x2f, 0xf9, 0xf3, 0xe2, 0x1f, 0x97, 0xb8, 0x1d,
+ 0xc4, 0x2d, 0xfe, 0xbe, 0xfa, 0xce, 0xd8, 0x15, 0xea, 0xbd, 0xda, 0x56, 0xd7,
+ 0x09, 0xca, 0x23, 0x14, 0xbf, 0x5c, 0x52, 0x1b, 0x3b, 0xe4, 0x19, 0xf1, 0xec,
+ 0x15, 0xfb, 0xa7, 0xb7, 0xe2, 0xdf, 0xd8, 0xe8, 0x23, 0x2a, 0x1d, 0x04, 0x1b,
+ 0x20, 0xf0, 0xf3, 0x83, 0x2e, 0xdb, 0xf6, 0x99, 0xfd, 0x33, 0x09, 0xf1, 0x3b,
+ 0xfd, 0x20, 0xd7, 0x96, 0x04, 0x01, 0x2b, 0xd1, 0x0b, 0x32, 0x4b, 0x29, 0x20,
+ 0xfa, 0x0e, 0xcd, 0xdd, 0x4c, 0xae, 0x00, 0xaf, 0x0b, 0xf5, 0xe5, 0x03, 0xdb,
+ 0x99, 0xc5, 0xe6, 0xf5, 0x81, 0xe7, 0x0b, 0x11, 0xc2, 0x1f, 0xf6, 0xfb, 0x2f,
+ 0x47, 0x40, 0xff, 0x1f, 0xfe, 0xdc, 0xc6, 0xc5, 0xed, 0x04, 0x1e, 0x27, 0x12,
+ 0xc3, 0x2f, 0x1d, 0x23, 0xfe, 0xed, 0x41, 0x3f, 0xfb, 0x09, 0xf8, 0xf1, 0xf4,
+ 0xff, 0xc7, 0xc5, 0x1b, 0xdb, 0x01, 0x8c, 0x0e, 0xf2, 0x36, 0xf3, 0xfc, 0xcd,
+ 0xd2, 0xfb, 0x0a, 0x15, 0x46, 0x25, 0x03, 0xfe, 0xeb, 0xca, 0xba, 0x11, 0x19,
+ 0xec, 0xba, 0x04, 0xba, 0x25, 0xef, 0x1c, 0xfb, 0x09, 0x0e, 0x22, 0x1e, 0xda,
+ 0x01, 0xf9, 0x36, 0xec, 0x24, 0xbd, 0xed, 0x10, 0xee, 0x19, 0xb7, 0xa8, 0xf2,
+ 0xe0, 0x9a, 0x12, 0xdb, 0xb9, 0xf9, 0xbd, 0xc8, 0x10, 0x24, 0x06, 0x8f, 0xeb,
+ 0x0c, 0x19, 0xd9, 0x0a, 0x8f, 0xd7, 0xc1, 0x0a, 0xd9, 0x43, 0x0d, 0xb6, 0x03,
+ 0xe5, 0x09, 0x2e, 0xfd, 0xdc, 0xd1, 0xf9, 0xa1, 0xd7, 0x10, 0xc0, 0xf8, 0x0f,
+ 0xe2, 0x15, 0x30, 0x15, 0x25, 0xed, 0xf7, 0x1e, 0x2a, 0xb3, 0xdb, 0x48, 0x21,
+ 0x01, 0xf0, 0x04, 0xc1, 0x05, 0xfd, 0x20, 0xd4, 0xe4, 0x04, 0xc3, 0x01, 0xde,
+ 0xe2, 0xe0, 0x03, 0xef, 0xd2, 0x22, 0x0d, 0x29, 0xfb, 0xca, 0xf1, 0xe5, 0x11,
+ 0x07, 0xe3, 0xe3, 0xe9, 0x3a, 0xad, 0x06, 0x13, 0xfc, 0xca, 0x39, 0xd0, 0xf2,
+ 0xf4, 0x0f, 0x0f, 0x1d, 0xd4, 0xf5, 0xd4, 0x1c, 0xc5, 0x2f, 0x0f, 0xdd, 0x01,
+ 0x0b, 0xc7, 0xfd, 0xfe, 0x20, 0x24, 0x24, 0x2d, 0xe8, 0x13, 0x1f, 0x1a, 0xfa,
+ 0xfc, 0x11, 0xe9, 0x25, 0x07, 0x05, 0xf9, 0xea, 0x11, 0xd4, 0xac, 0x17, 0x07,
+ 0x26, 0x04, 0xf9, 0xc0, 0xe1, 0xf9, 0x00, 0xc3, 0x04, 0xc1, 0xfb, 0x25, 0xe3,
+ 0xf6, 0x1b, 0xf0, 0x12, 0xf1, 0xf8, 0xd0, 0xf1, 0x1b, 0xe2, 0x08, 0x32, 0xf1,
+ 0x15, 0xf2, 0xb8, 0xe4, 0xe3, 0x12, 0xef, 0xd2, 0xd9, 0xdc, 0xf4, 0xbe, 0x1d,
+ 0x08, 0x19, 0x13, 0xdc, 0xd0, 0x20, 0xf5, 0xdc, 0xd9, 0x29, 0xeb, 0xee, 0xc8,
+ 0x1b, 0xb3, 0x0b, 0x0c, 0xda, 0xd8, 0x20, 0xfa, 0xc8, 0xeb, 0x0e, 0x1d, 0xe8,
+ 0xd8, 0xd0, 0x20, 0x2b, 0xf4, 0x31, 0x19, 0x22, 0xce, 0x1d, 0x23, 0xed, 0xe7,
+ 0x1a, 0xcb, 0xd6, 0xe0, 0xea, 0x09, 0x0b, 0xbd, 0xf3, 0x09, 0xd0, 0x07, 0xd5,
+ 0x16, 0xf1, 0xfa, 0xfa, 0x09, 0xce, 0xf0, 0x1b, 0xe9, 0x43, 0xf8, 0xe5, 0xfd,
+ 0x05, 0xdd, 0x31, 0xfa, 0x0d, 0x16, 0x08, 0xfa, 0xd0, 0x06, 0x49, 0xcd, 0xf3,
+ 0xd1, 0x06, 0xf4, 0xf5, 0xf2, 0x25, 0xef, 0x03, 0x32, 0x45, 0x96, 0x22, 0x24,
+ 0x08, 0xe8, 0x37, 0xb6, 0x06, 0x1f, 0xda, 0xf3, 0xd8, 0xc9, 0x0d, 0xd5, 0xcb,
+ 0xac, 0xdd, 0x01, 0x09, 0x09, 0x12, 0x19, 0xba, 0xfa, 0x09, 0xd8, 0x11, 0x04,
+ 0x16, 0xec, 0x25, 0xf0, 0xe2, 0x30, 0x04, 0xeb, 0x0b, 0xfc, 0xd8, 0xec, 0x05,
+ 0x10, 0xf4, 0x01, 0x0f, 0x08, 0x06, 0xfd, 0xf6, 0x7f, 0x10, 0xf2, 0xf8, 0xd9,
+ 0x0e, 0x04, 0x1b, 0x1c, 0xfa, 0x1e, 0xc6, 0xf0, 0xa6, 0x0f, 0x2d, 0xdb, 0xc3,
+ 0x5c, 0xb3, 0xf0, 0xcd, 0x31, 0x68, 0x04, 0xee, 0x1b, 0xe0, 0x01, 0xfc, 0x16,
+ 0xe6, 0xf7, 0xf8, 0x2d, 0xaa, 0xfa, 0xe2, 0x07, 0x02, 0xc3, 0xdf, 0xd1, 0xe6,
+ 0x23, 0xe4, 0x01, 0x00, 0x36, 0xa5, 0x03, 0xdc, 0xd2, 0xc5, 0xda, 0xe0, 0xca,
+ 0xf3, 0xba, 0xee, 0xf9, 0xec, 0x41, 0x55, 0x38, 0x00, 0x01, 0x9b, 0x17, 0xbd,
+ 0x41, 0x08, 0xde, 0xbc, 0x26, 0x31, 0xef, 0xf9, 0xda, 0x0b, 0x32, 0xcf, 0xd9,
+ 0x08, 0xd6, 0x0e, 0x56, 0x21, 0x2d, 0x28, 0xec, 0x01, 0x0a, 0xc1, 0x71, 0xf6,
+ 0x23, 0xf7, 0xe3, 0x04, 0xe2, 0xf7, 0x23, 0x81, 0xd4, 0x0b, 0xf5, 0x0e, 0x33,
+ 0xae, 0xed, 0x0e, 0xe5, 0xfd, 0x2d, 0x2f, 0x26, 0xb3, 0xe8, 0xd0, 0xf6, 0xd2,
+ 0xf9, 0xc8, 0xe5, 0xec, 0x12, 0xd3, 0xe9, 0x09, 0xf0, 0x16, 0x02, 0x9f, 0xee,
+ 0x05, 0xe2, 0x08, 0x03, 0xbe, 0xce, 0xc6, 0x61, 0x0b, 0x0e, 0x0e, 0x07, 0x13,
+ 0x2b, 0x13, 0xdf, 0xe8, 0x9d, 0x07, 0xb8, 0x0d, 0x9b, 0xec, 0xbe, 0xd4, 0x51,
+ 0x21, 0x15, 0xb9, 0xec, 0x08, 0xa3, 0xfc, 0x54, 0x2b, 0xed, 0xed, 0x0f, 0xec,
+ 0x13, 0xfe, 0x03, 0xe9, 0xdb, 0x3a, 0xaf, 0xad, 0xde, 0x42, 0xfb, 0xff, 0xe6,
+ 0x07, 0x48, 0xf8, 0xeb, 0xdb, 0xd1, 0x20, 0xe8, 0xaf, 0x3e, 0xad, 0xe4, 0xed,
+ 0xe8, 0xf1, 0xea, 0xf8, 0x06, 0xfe, 0xb4, 0x2b, 0xb9, 0xe6, 0x06, 0xf8, 0xd6,
+ 0xd7, 0xf7, 0xf4, 0xf0, 0x11, 0x0a, 0xf5, 0x1c, 0xe4, 0xd4, 0xde, 0x9a, 0x1e,
+ 0xf5, 0x30, 0xca, 0x26, 0xec, 0xd1, 0x07, 0x05, 0xdf, 0xb8, 0x0f, 0xd5, 0xc2,
+ 0x1d, 0x26, 0xe2, 0xc9, 0xbc, 0xc9, 0x89, 0xe3, 0xb5, 0xfb, 0x16, 0x98, 0xdb,
+ 0xc8, 0xd1, 0xf0, 0x06, 0x97, 0x27, 0x0d, 0x0b, 0x1d, 0xfb, 0xfd, 0x1f, 0x11,
+ 0x44, 0xd7, 0xce, 0x00, 0x39, 0xe4, 0xf3, 0x15, 0x13, 0xf8, 0x1c, 0xd7, 0x0b,
+ 0xf0, 0xf2, 0x25, 0x0b, 0xe6, 0x07, 0xf1, 0xe6, 0xf3, 0x02, 0x00, 0x25, 0xe5,
+ 0xfd, 0x23, 0x14, 0xd3, 0x0a, 0xe5, 0x05, 0x13, 0x43, 0xe3, 0xee, 0xe2, 0xe6,
+ 0xf5, 0xf9, 0xfd, 0x24, 0xd2, 0x20, 0x29, 0xde, 0x0b, 0xfa, 0x10, 0xd8, 0xe4,
+ 0xfa, 0xd3, 0x05, 0xf3, 0x24, 0xdc, 0x02, 0xe8, 0xe8, 0xf0, 0xf0, 0x2c, 0xdb,
+ 0xd9, 0x1c, 0xf2, 0xfc, 0xf0, 0x08, 0x17, 0xf4, 0xe0, 0xeb, 0x0f, 0xe9, 0xff,
+ 0x0a, 0xfb, 0xf7, 0xe7, 0x05, 0x0e, 0x10, 0x05, 0x2c, 0x06, 0xd9, 0x08, 0x02,
+ 0x0c, 0x35, 0x08, 0x17, 0xf6, 0xf8, 0x08, 0x17, 0xdf, 0xef, 0xfb, 0x0d, 0xb6,
+ 0xc1, 0x01, 0x35, 0xf5, 0xd2, 0xfe, 0xe2, 0x1c, 0xfb, 0xe1, 0xe7, 0x16, 0x0b,
+ 0x0b, 0xeb, 0x1a, 0x15, 0xd0, 0x00, 0xdd, 0x24, 0xf4, 0xf8, 0xed, 0x29, 0xf5,
+ 0x19, 0x09, 0x0e, 0xe8, 0xef, 0x1d, 0xf1, 0xdd, 0xe3, 0xd1, 0x6b, 0xf1, 0xf4,
+ 0x09, 0xf5, 0x1d, 0x57, 0xd9, 0x7f, 0x04, 0x15, 0xf9, 0x0a, 0xdb, 0xd4, 0xea,
+ 0xc7, 0xf6, 0x07, 0x06, 0xde, 0xfe, 0xed, 0x12, 0xf2, 0x6f, 0x14, 0xf6, 0xca,
+ 0x05, 0xdf, 0x1e, 0x17, 0x07, 0xe7, 0xf8, 0xd6, 0xf3, 0xed, 0x11, 0xd2, 0x22,
+ 0x1a, 0x1f, 0xf2, 0xf3, 0xe2, 0x0f, 0x11, 0xea, 0xfa, 0x6f, 0xeb, 0xec, 0xf5,
+ 0xee, 0x02, 0xd7, 0xfe, 0xc7, 0x19, 0xf1, 0x0e, 0x03, 0x05, 0xfc, 0xd7, 0xc6,
+ 0xf5, 0x07, 0x44, 0xf7, 0x02, 0x0e, 0xfc, 0x17, 0xe2, 0xf0, 0x1b, 0xf9, 0xf5,
+ 0xe6, 0xf8, 0xea, 0xf2, 0x0d, 0x19, 0x04, 0x1a, 0xed, 0x0f, 0xe8, 0xdc, 0xd9,
+ 0xfc, 0x0c, 0xf6, 0xf7, 0x19, 0x5d, 0xf0, 0x1d, 0x4e, 0x1f, 0x18, 0xe4, 0xd5,
+ 0x14, 0xf9, 0xf7, 0xf1, 0xab, 0x6b, 0xd7, 0x0c, 0xfe, 0xfa, 0xc0, 0x9d, 0xca,
+ 0x07, 0xd8, 0x1f, 0xf3, 0xfa, 0x09, 0xba, 0xdd, 0x09, 0x1e, 0x18, 0x0d, 0xf4,
+ 0x30, 0x39, 0xef, 0xf6, 0xf8, 0xd6, 0x2b, 0xd5, 0xf6, 0xb8, 0xdb, 0x0e, 0xd2,
+ 0xf6, 0x4a, 0xf9, 0x19, 0x06, 0xf1, 0xaa, 0xee, 0xc6, 0xdc, 0x21, 0x13, 0x5b,
+ 0x3d, 0x23, 0xc4, 0x30, 0x1f, 0x3d, 0x41, 0x06, 0xea, 0xe2, 0x17, 0x20, 0xd6,
+ 0xef, 0x81, 0x13, 0x1d, 0x1b, 0x01, 0xce, 0xf7, 0xf1, 0x43, 0x2d, 0x00, 0xe6,
+ 0x1d, 0xc3, 0xed, 0x07, 0xd3, 0x0b, 0x2d, 0xef, 0xed, 0x1b, 0xe7, 0x30, 0xc8,
+ 0xd3, 0xf2, 0x08, 0x03, 0xb7, 0xec, 0xdc, 0x1c, 0xb0, 0xcc, 0x56, 0x22, 0x48,
+ 0xaa, 0x07, 0xe5, 0xe2, 0x0a, 0x07, 0xf8, 0xbe, 0x3c, 0xe1, 0x25, 0xc4, 0x34,
+ 0xef, 0xa6, 0x1e, 0xfd, 0xba, 0xaf, 0x05, 0xda, 0x3b, 0xef, 0xba, 0x02, 0xd8,
+ 0x14, 0x31, 0x15, 0x00, 0x08, 0xba, 0xf6, 0xe7, 0xff, 0x32, 0x31, 0xd4, 0x1b,
+ 0xf0, 0x08, 0x1f, 0x9c, 0xf9, 0x1c, 0xde, 0xdf, 0x0d, 0xe0, 0xe8, 0x47, 0xd8,
+ 0x22, 0x04, 0x09, 0xec, 0xfc, 0x0b, 0x14, 0xc8, 0xed, 0xe8, 0xd2, 0xb2, 0xa9,
+ 0x15, 0xea, 0xf0, 0x13, 0xfd, 0xff, 0xf0, 0xda, 0xf9, 0xf2, 0x0f, 0x10, 0xfc,
+ 0x11, 0xf5, 0x16, 0x3f, 0x01, 0x01, 0x19, 0x22, 0x38, 0x02, 0xbb, 0xf6, 0x13,
+ 0x4a, 0x23, 0x17, 0x11, 0x40, 0xd2, 0xcb, 0x19, 0x0b, 0xfb, 0xf0, 0xef, 0x30,
+ 0x1d, 0x1b, 0xca, 0xde, 0x22, 0xeb, 0x02, 0x17, 0xc0, 0xb0, 0x21, 0x07, 0x2f,
+ 0x00, 0xe5, 0xb2, 0xed, 0x83, 0x20, 0xdb, 0x41, 0x04, 0x0a, 0xee, 0xc8, 0xe7,
+ 0x09, 0xf8, 0xf4, 0x10, 0x30, 0xda, 0x0a, 0x14, 0xfa, 0xbf, 0xf9, 0xce, 0x15,
+ 0xf1, 0xfc, 0xbd, 0x1e, 0x17, 0xf4, 0xe0, 0xe6, 0xcd, 0xfd, 0x29, 0x25, 0x02,
+ 0xcd, 0xc7, 0xb6, 0xe5, 0x06, 0x01, 0xd6, 0x1c, 0xfd, 0xfa, 0x18, 0xfd, 0xc8,
+ 0xc3, 0x17, 0xe2, 0x1f, 0xc8, 0xe7, 0x36, 0xc4, 0xef, 0xf2, 0xd4, 0xd2, 0x14,
+ 0x21, 0x06, 0x07, 0xfc, 0x06, 0x04, 0xf0, 0xc5, 0x11, 0xc6, 0x19, 0x09, 0x30,
+ 0xf9, 0x12, 0xfe, 0xf4, 0xfd, 0xf7, 0xf5, 0x13, 0x1c, 0xfe, 0xd4, 0xd8, 0x08,
+ 0x28, 0x23, 0xf5, 0x05, 0x13, 0xfb, 0x01, 0x6a, 0x1c, 0xe0, 0xea, 0xfb, 0x23,
+ 0xf9, 0x0a, 0x04, 0x3d, 0xf2, 0x19, 0x0a, 0xcf, 0x0b, 0x00, 0xd5, 0x12, 0xdd,
+ 0x12, 0x2c, 0xe1, 0x18, 0x29, 0x02, 0x1b, 0x08, 0x08, 0xee, 0xda, 0xd6, 0x1c,
+ 0xf6, 0x1d, 0xb8, 0xaa, 0xd9, 0xf3, 0x0e, 0xf6, 0xef, 0xd1, 0xf6, 0xf4, 0xb5,
+ 0xfd, 0xd9, 0xdd, 0xf8, 0x38, 0x0b, 0xeb, 0xe5, 0xfe, 0x00, 0xf9, 0xcb, 0xec,
+ 0x0c, 0xf0, 0xf2, 0x0f, 0xf9, 0xcd, 0xd1, 0x31, 0xd0, 0xcc, 0xe7, 0x2a, 0xd4,
+ 0xee, 0xf4, 0xaa, 0xe9, 0x06, 0xe7, 0xea, 0xee, 0xe8, 0xff, 0xf3, 0xe3, 0xf8,
+ 0x10, 0xc8, 0xed, 0x01, 0xd0, 0xee, 0x02, 0xe7, 0x03, 0xc1, 0xe4, 0xd3, 0xba,
+ 0x1c, 0x25, 0x49, 0xe4, 0xf1, 0xdf, 0xf6, 0xbd, 0x49, 0x0b, 0xbb, 0x03, 0xe9,
+ 0xfb, 0x4b, 0x1b, 0xf4, 0x7f, 0xe0, 0x27, 0xd2, 0x04, 0x0d, 0x08, 0xcc, 0xbf,
+ 0xf9, 0xed, 0xee, 0xed, 0x54, 0xc1, 0xf3, 0x04, 0xb5, 0xce, 0xe7, 0xc5, 0xf6,
+ 0xea, 0xcd, 0x09, 0x0f, 0xfe, 0x37, 0xdd, 0x0e, 0x0b, 0xf8, 0x09, 0xbf, 0xf8,
+ 0xcc, 0xe7, 0xf8, 0x43, 0xfe, 0x0d, 0xfb, 0xe7, 0xdf, 0xf5, 0x3a, 0xc6, 0x29,
+ 0x29, 0xfc, 0x31, 0xf3, 0xf0, 0x10, 0xd9, 0xd8, 0x05, 0xcb, 0x02, 0xee, 0x08,
+ 0x1d, 0x53, 0x06, 0x1c, 0xe3, 0xe4, 0xed, 0xd8, 0xcf, 0xeb, 0x3b, 0xeb, 0x3b,
+ 0x0b, 0xdb, 0x46, 0xc8, 0x05, 0x2a, 0xe5, 0x04, 0x0f, 0x99, 0x43, 0xba, 0x3a,
+ 0xfd, 0xf5, 0xd5, 0xee, 0x44, 0x30, 0xe8, 0x18, 0xf6, 0xe3, 0xf1, 0xf6, 0x25,
+ 0xe3, 0x0e, 0x43, 0x35, 0xfd, 0xc0, 0x0c, 0xf8, 0x59, 0xe3, 0x00, 0xf7, 0x11,
+ 0xcd, 0x1b, 0xd1, 0xef, 0x34, 0xd4, 0x93, 0x07, 0x2f, 0xf0, 0xe6, 0xda, 0xc7,
+ 0xf4, 0xc7, 0xd2, 0xeb, 0x15, 0xef, 0xf1, 0xe1, 0x5e, 0xce, 0x29, 0x12, 0x3f,
+ 0xde, 0xef, 0x2a, 0x19, 0x25, 0xe6, 0xf8, 0x07, 0x0a, 0x54, 0x3f, 0xf4, 0xf3,
+ 0xcf, 0xeb, 0xed, 0xd3, 0x1d, 0xc7, 0xcf, 0x24, 0xe6, 0xdb, 0x17, 0x0d, 0x56,
+ 0xd4, 0xc6, 0xeb, 0x23, 0xaf, 0xb2, 0x19, 0xea, 0x3e, 0x31, 0xe7, 0x17, 0x05,
+ 0xcb, 0xcf, 0x5d, 0x05, 0x05, 0x32, 0xfc, 0xeb, 0xd2, 0x0c, 0xd5, 0xf6, 0x15,
+ 0xda, 0xd4, 0x15, 0xd9, 0xba, 0xcd, 0x07, 0xd1, 0xf7, 0x30, 0xe0, 0x12, 0x1c,
+ 0xd5, 0xcf, 0xc1, 0x2a, 0xe1, 0x00, 0x9f, 0xb1, 0x10, 0xf2, 0xf6, 0x27, 0x03,
+ 0x7f, 0x10, 0x1f, 0x2e, 0x0b, 0xea, 0x22, 0xd4, 0xc9, 0xa9, 0xdb, 0x0b, 0x13,
+ 0xad, 0xa9, 0xe8, 0x30, 0x15, 0xda, 0xf3, 0xe8, 0xd0, 0x19, 0xfc, 0x03, 0xf1,
+ 0xe2, 0xbb, 0x08, 0xd0, 0x3b, 0x27, 0x22, 0xd9, 0x0d, 0x4e, 0xee, 0xe6, 0x16,
+ 0x1e, 0x14, 0xb4, 0xe9, 0xde, 0xf9, 0x27, 0x01, 0x0e, 0xf2, 0xf2, 0xf1, 0xe6,
+ 0x00, 0xc4, 0xd9, 0xe8, 0x33, 0xf0, 0x34, 0x10, 0xd0, 0x02, 0xf1, 0xeb, 0x28,
+ 0x26, 0xff, 0x49, 0xe5, 0x01, 0x37, 0x4e, 0x29, 0xf8, 0xc1, 0xe3, 0x22, 0xb9,
+ 0x1f, 0x02, 0xfd, 0x0e, 0xb7, 0xd6, 0xc7, 0xf9, 0xcd, 0xcd, 0x1a, 0x17, 0xe6,
+ 0xee, 0x05, 0xd1, 0xe5, 0xed, 0xf9, 0xe1, 0x32, 0x27, 0xe6, 0xf0, 0xd0, 0x31,
+ 0xe1, 0xea, 0xd4, 0x30, 0x06, 0x43, 0xec, 0xf6, 0xf3, 0x22, 0xf2, 0xf6, 0xd0,
+ 0xda, 0xfd, 0x0f, 0xad, 0x01, 0xda, 0x0a, 0xc3, 0x10, 0xf8, 0x9f, 0xfe, 0xe4,
+ 0xf4, 0xb0, 0x2f, 0x13, 0xd7, 0x8b, 0x13, 0xf6, 0xce, 0xd9, 0x05, 0x9e, 0x13,
+ 0xfb, 0x12, 0xfe, 0x9b, 0xf2, 0xf5, 0xbc, 0x18, 0xf5, 0x10, 0xd1, 0x18, 0xd8,
+ 0x0a, 0x49, 0xea, 0xd2, 0x0d, 0x02, 0xfd, 0xf7, 0xe1, 0x19, 0xee, 0xb4, 0x14,
+ 0xe1, 0xf5, 0xb3, 0xcc, 0xe2, 0xf2, 0x15, 0x52, 0xdd, 0xd9, 0x10, 0x22, 0x41,
+ 0x44, 0x01, 0x21, 0xb8, 0x1c, 0xdc, 0xd9, 0xd9, 0x0e, 0x0f, 0x30, 0xd1, 0xd2,
+ 0xe8, 0xc4, 0xdf, 0xed, 0xec, 0xc6, 0x36, 0xdb, 0xfb, 0x0f, 0x10, 0x2e, 0xbd,
+ 0xb5, 0x22, 0x23, 0xf8, 0x22, 0x0d, 0xde, 0xc7, 0xe6, 0xed, 0xfb, 0xe1, 0x4a,
+ 0x9a, 0x24, 0xd0, 0xf6, 0xe6, 0x30, 0xdc, 0xce, 0xca, 0xe5, 0xfb, 0xe9, 0xfc,
+ 0x24, 0xd1, 0x0b, 0xe2, 0xce, 0x07, 0xdb, 0xae, 0x34, 0x08, 0xd3, 0x2c, 0xb5,
+ 0xfc, 0xfa, 0xf4, 0x05, 0xfe, 0x15, 0x2b, 0xfb, 0xe8, 0x2f, 0x30, 0xa3, 0x04,
+ 0xad, 0x0c, 0xe7, 0xe3, 0x04, 0xea, 0x41, 0x3c, 0xfc, 0xe0, 0x9e, 0xb8, 0xf8,
+ 0x54, 0xdd, 0xed, 0xfd, 0xcb, 0x2b, 0x4b, 0xf8, 0x00, 0xc6, 0xe7, 0xff, 0x24,
+ 0x1f, 0xee, 0xc2, 0x53, 0xf0, 0x0a, 0xf7, 0xcd, 0x27, 0x1e, 0x06, 0xe4, 0x12,
+ 0xcc, 0xb4, 0x2e, 0x08, 0xfd, 0xfa, 0x1a, 0xf1, 0x03, 0xeb, 0xbe, 0x0b, 0xc1,
+ 0xea, 0x81, 0x29, 0xe9, 0xb9, 0xc0, 0xde, 0x23, 0xf7, 0xdd, 0xe8, 0xd2, 0xdc,
+ 0x1c, 0xec, 0xd1, 0x04, 0xe0, 0x1f, 0xf7, 0x0c, 0x26, 0xe5, 0x01, 0xe6, 0xe9,
+ 0x08, 0xce, 0x1f, 0xee, 0xbd, 0x06, 0x13, 0x08, 0xf0, 0xf7, 0xf3, 0x26, 0x1f,
+ 0x12, 0x14, 0xbe, 0x44, 0xfe, 0xdc, 0x55, 0x47, 0x24, 0x0d, 0xd7, 0xdb, 0xc0,
+ 0xd0, 0x1f, 0x28, 0x03, 0x92, 0xde, 0xe7, 0x15, 0xf4, 0x32, 0xaf, 0x3a, 0x2c,
+ 0x13, 0xd1, 0x18, 0x24, 0xb8, 0x5a, 0x47, 0x33, 0x01, 0xca, 0x19, 0xeb, 0x05,
+ 0xda, 0xb7, 0x81, 0xf4, 0xde, 0xde, 0x06, 0x3d, 0x90, 0xeb, 0x1a, 0xe7, 0xde,
+ 0xe2, 0xd0, 0x0f, 0x0a, 0x08, 0xeb, 0x21, 0xad, 0x06, 0x0e, 0xae, 0x00, 0x18,
+ 0x1e, 0x2f, 0x4b, 0xc0, 0xda, 0xf3, 0x42, 0x27, 0x41, 0x36, 0x55, 0xce, 0x1a,
+ 0xce, 0xc7, 0x12, 0x4f, 0xc9, 0x22, 0xae, 0x17, 0x2d, 0x09, 0xea, 0xc5, 0xb0,
+ 0xd4, 0xe8, 0x17, 0x2e, 0xdd, 0x34, 0x40, 0xdb, 0x06, 0xea, 0x13, 0xa4, 0x27,
+ 0xf1, 0x02, 0x34, 0xdb, 0x14, 0xfe, 0xfd, 0x26, 0x3c, 0x15, 0xc6, 0x12, 0xa2,
+ 0xb5, 0x03, 0x2a, 0xf0, 0xd8, 0xc1, 0xf6, 0xfa, 0x26, 0xaa, 0xc9, 0xdd, 0x21,
+ 0x39, 0x55, 0x32, 0x2c, 0xcb, 0x20, 0xcc, 0x02, 0x25, 0xa9, 0xed, 0x05, 0x50,
+ 0xc6, 0x48, 0x37, 0x14, 0xbf, 0xa6, 0x39, 0x1f, 0x44, 0xed, 0x2d, 0x0d, 0xde,
+ 0x1f, 0x37, 0x99, 0x99, 0x09, 0x15, 0xeb, 0x12, 0xe2, 0xfe, 0xdc, 0x91, 0xc7,
+ 0xe4, 0x05, 0xd9, 0xf0, 0xf1, 0xe7, 0xe3, 0x1d, 0x14, 0x10, 0xca, 0xcc, 0xaf,
+ 0xe1, 0x04, 0x43, 0xdc, 0xe2, 0xfc, 0x31, 0xd3, 0xe3, 0x21, 0x13, 0xd9, 0xd9,
+ 0xa0, 0x46, 0x16, 0x21, 0x24, 0x10, 0x1e, 0xe2, 0x06, 0x19, 0xeb, 0xdc, 0xde,
+ 0xc6, 0x2e, 0xba, 0xfc, 0x2b, 0xce, 0x16, 0xd2, 0x10, 0xe2, 0xb8, 0xde, 0x20,
+ 0xc3, 0xf5, 0x29, 0xb5, 0xea, 0x08, 0xf5, 0xd9, 0xb2, 0xca, 0x1c, 0x15, 0xf0,
+ 0x4c, 0xd5, 0xc1, 0x01, 0x08, 0xf8, 0xe5, 0xab, 0x19, 0xc5, 0xc8, 0xa9, 0xeb,
+ 0xfd, 0xeb, 0x11, 0x04, 0xd2, 0xa0, 0x25, 0x18, 0xbb, 0xb3, 0x26, 0xef, 0x01,
+ 0xd6, 0x4a, 0xfd, 0x0c, 0x33, 0x26, 0x12, 0x12, 0xdb, 0xf2, 0x03, 0xfa, 0xc4,
+ 0x33, 0x3f, 0x0b, 0x12, 0xe6, 0xa1, 0x57, 0x3a, 0x39, 0x06, 0xff, 0x3d, 0xfa,
+ 0x1f, 0xd1, 0x05, 0x1f, 0x00, 0x0e, 0xf7, 0xf5, 0x14, 0x17, 0xf1, 0xc9, 0xe4,
+ 0xff, 0x05, 0xec, 0xd3, 0xb1, 0xdc, 0x12, 0xe0, 0xfa, 0xe4, 0xf3, 0x2f, 0xec,
+ 0xfd, 0xfe, 0xde, 0xe0, 0xe7, 0xf0, 0x01, 0x17, 0xf3, 0x07, 0x12, 0xb1, 0xee,
+ 0xd4, 0x12, 0x05, 0xd6, 0x3f, 0xdd, 0xbd, 0xbb, 0xfb, 0xd7, 0x00, 0x24, 0x0b,
+ 0x36, 0xed, 0xee, 0x20, 0x4d, 0xf2, 0xf1, 0xeb, 0x26, 0xf0, 0xe9, 0xac, 0xd7,
+ 0xe7, 0x2d, 0x2a, 0xe7, 0xcf, 0xf3, 0xc3, 0xd0, 0x1c, 0xe4, 0xec, 0xff, 0x06,
+ 0xd3, 0xc4, 0x1e, 0xee, 0xfb, 0x08, 0xb9, 0xde, 0xd6, 0xfe, 0x18, 0x28, 0x00,
+ 0xd5, 0xc6, 0xe0, 0xd4, 0x32, 0x3d, 0xd9, 0x0f, 0xf9, 0xe9, 0xfd, 0xe7, 0xe5,
+ 0xf2, 0xe7, 0xf7, 0xd9, 0x2d, 0xcd, 0x0f, 0x07, 0x21, 0xdb, 0xce, 0xcf, 0xc5,
+ 0x05, 0xe1, 0xcd, 0x19, 0xb6, 0xf1, 0xed, 0x12, 0xf6, 0x0e, 0xff, 0xd8, 0xa4,
+ 0x1d, 0x42, 0xf0, 0xb1, 0xce, 0x02, 0xef, 0xf7, 0xba, 0x0f, 0x01, 0xd2, 0x02,
+ 0x31, 0xd7, 0xf1, 0xd8, 0x00, 0xfc, 0x45, 0x1a, 0xc2, 0xb8, 0x08, 0xec, 0x07,
+ 0x0e, 0xb7, 0x0f, 0xc6, 0xd6, 0x3a, 0xad, 0xeb, 0xca, 0xda, 0x0e, 0x2b, 0xc1,
+ 0x02, 0xfc, 0xef, 0x3f, 0x31, 0xe8, 0x04, 0x15, 0xef, 0xff, 0x25, 0x00, 0x04,
+ 0x01, 0xc9, 0xdd, 0xff, 0xe4, 0x0c, 0xd8, 0xbc, 0xd9, 0xe0, 0xc4, 0xe8, 0x1e,
+ 0xd9, 0x34, 0x0d, 0x25, 0xe5, 0x3b, 0xc9, 0x02, 0x1d, 0xf9, 0xce, 0x17, 0xf6,
+ 0x06, 0x04, 0xe1, 0xea, 0x0d, 0xcf, 0xd2, 0x15, 0xf4, 0xd2, 0x34, 0x09, 0xe0,
+ 0x7f, 0xa7, 0x22, 0x58, 0xdb, 0xef, 0xfd, 0xf0, 0x3a, 0x3b, 0xf5, 0x52, 0x30,
+ 0x18, 0xff, 0xfa, 0xa1, 0x06, 0xdc, 0x7b, 0x0a, 0x08, 0x1d, 0xef, 0x13, 0xfe,
+ 0xdf, 0x18, 0x67, 0x1c, 0xdd, 0xe9, 0xd9, 0xf1, 0xb0, 0xdd, 0x09, 0x14, 0x09,
+ 0xe0, 0x03, 0x12, 0xf5, 0xd6, 0x37, 0xe3, 0x06, 0xe0, 0xde, 0x4a, 0xcd, 0x0e,
+ 0xee, 0xf1, 0x1f, 0xfc, 0xf3, 0xf0, 0xd2, 0xf2, 0xfb, 0xfc, 0xd6, 0xe7, 0x34,
+ 0x0b, 0xfc, 0xf1, 0xd0, 0x09, 0xda, 0xef, 0x27, 0xac, 0xb8, 0x57, 0xdf, 0x00,
+ 0xb1, 0xf4, 0xca, 0xe3, 0x7e, 0x1d, 0x07, 0x09, 0x1d, 0xcd, 0x45, 0xcb, 0xfa,
+ 0xf1, 0xd3, 0xd7, 0xc8, 0xef, 0xdc, 0xf2, 0xe5, 0x01, 0x06, 0xf2, 0x12, 0xf5,
+ 0xda, 0x32, 0xbb, 0x15, 0xb5, 0x04, 0xb4, 0xca, 0xf2, 0x0b, 0x0c, 0x24, 0x62,
+ 0xdf, 0xe5, 0x95, 0x16, 0x04, 0x46, 0xe1, 0x00, 0xee, 0x4d, 0xcc, 0xdc, 0x4e,
+ 0xda, 0xcd, 0xc9, 0xe9, 0x0b, 0x51, 0x0e, 0x30, 0xfa, 0xf5, 0xe2, 0x0f, 0xb8,
+ 0xa7, 0xba, 0xe5, 0xee, 0xd0, 0xd7, 0xc3, 0xd0, 0xf6, 0x36, 0x00, 0x25, 0x48,
+ 0x1b, 0xc6, 0xe6, 0xb0, 0xba, 0xfb, 0x2e, 0xe9, 0xf2, 0xc6, 0x30, 0xc2, 0xef,
+ 0xf4, 0xde, 0x75, 0x0c, 0x06, 0x2f, 0x1c, 0x2f, 0x18, 0x03, 0xe6, 0xfa, 0x0b,
+ 0xf5, 0x13, 0xda, 0x51, 0xf7, 0xf0, 0x16, 0xe9, 0xe3, 0xee, 0xe3, 0xc0, 0xce,
+ 0x11, 0x13, 0x39, 0xf5, 0xf0, 0xd8, 0x02, 0x35, 0x11, 0xe1, 0x04, 0x1c, 0x24,
+ 0xda, 0xf5, 0xf8, 0x10, 0xd4, 0xd6, 0xf3, 0xe1, 0x09, 0xf7, 0xff, 0xdd, 0x02,
+ 0xe1, 0xdb, 0xf3, 0x0b, 0x15, 0x1d, 0xea, 0x2f, 0x08, 0xb0, 0x38, 0x0f, 0xfe,
+ 0xd3, 0x19, 0xde, 0x27, 0x02, 0x09, 0xd9, 0xe8, 0x7f, 0xfd, 0x04, 0xfd, 0xeb,
+ 0xc6, 0xff, 0xf7, 0xe0, 0xc9, 0x1d, 0xa1, 0x0c, 0x17, 0xd9, 0xdd, 0xa3, 0xdb,
+ 0xe1, 0x10, 0x28, 0xed, 0x07, 0xe5, 0x06, 0xf0, 0xf9, 0xd8, 0xb9, 0xc3, 0xfc,
+ 0x25, 0xf0, 0xfc, 0xfe, 0xe5, 0x03, 0x0f, 0xf3, 0xd9, 0xb5, 0xe5, 0xeb, 0xf3,
+ 0xdc, 0x2d, 0xd2, 0xc8, 0xcf, 0xef, 0xdd, 0xe5, 0xf8, 0x0a, 0x1f, 0xfc, 0xd0,
+ 0x11, 0xdc, 0xcb, 0x31, 0x01, 0xdf, 0xfb, 0xee, 0x2a, 0xe1, 0xf5, 0x37, 0xdd,
+ 0x0d, 0xcd, 0x10, 0xcc, 0xf8, 0x01, 0xff, 0xdd, 0xfc, 0xd6, 0x20, 0x43, 0xd2,
+ 0xec, 0x11, 0xf8, 0x03, 0xdc, 0x15, 0xfc, 0xf2, 0xca, 0xf9, 0x07, 0x08, 0xe0,
+ 0xfd, 0x23, 0x2b, 0x22, 0xe1, 0xcb, 0xe6, 0x10, 0x03, 0x46, 0x24, 0x00, 0xf9,
+ 0xdf, 0xfe, 0x27, 0x0b, 0x1e, 0xc0, 0x0e, 0x15, 0x06, 0xd3, 0x11, 0xd2, 0xd0,
+ 0x0d, 0xda, 0xda, 0x29, 0xc3, 0x0f, 0x5c, 0x13, 0x03, 0xf7, 0xd3, 0x14, 0xf7,
+ 0xf6, 0x12, 0x11, 0x13, 0x05, 0xda, 0xf3, 0xe6, 0xf0, 0xde, 0xc3, 0xcd, 0xd4,
+ 0xfc, 0xe5, 0xda, 0xe2, 0xe2, 0xe5, 0x1e, 0xfc, 0xfc, 0xf3, 0x08, 0xe4, 0xf2,
+ 0xec, 0x07, 0x01, 0xff, 0xec, 0xf5, 0x0a, 0x00, 0xe5, 0xe9, 0xe6, 0xf6, 0xfc,
+ 0xef, 0xe2, 0xde, 0xdd, 0xee, 0xfe, 0x06, 0xf0, 0xc2, 0xe4, 0x04, 0xf6, 0xe2,
+ 0x0f, 0xef, 0x09, 0xf0, 0x0b, 0xe4, 0xde, 0xde, 0x13, 0xe9, 0xd8, 0xd2, 0xf8,
+ 0xf6, 0xef, 0x12, 0x24, 0x7f, 0xf7, 0xc4, 0xf7, 0xd5, 0x1b, 0x02, 0x43, 0x07,
+ 0x04, 0x11, 0x05, 0xf9, 0x17, 0x1a, 0x4a, 0x01, 0x2d, 0xc1, 0xbf, 0xdb, 0xf7,
+ 0xf4, 0x05, 0x18, 0x27, 0xda, 0x22, 0x07, 0xec, 0xe5, 0x0c, 0x04, 0xb4, 0x01,
+ 0xba, 0xf4, 0xe8, 0x26, 0xf6, 0xee, 0xfa, 0x0e, 0xf9, 0xf6, 0xfc, 0xf8, 0xe0,
+ 0xd1, 0x0c, 0x08, 0xd8, 0xfa, 0x06, 0x17, 0xd8, 0x1b, 0xf9, 0x41, 0xec, 0x1f,
+ 0xd8, 0x04, 0xe9, 0x00, 0x35, 0xf8, 0x0f, 0x15, 0xc8, 0xf9, 0xd4, 0xfa, 0xdd,
+ 0x15, 0xdd, 0x0f, 0x33, 0x06, 0x19, 0xdc, 0xfd, 0xd3, 0xb3, 0xca, 0xbc, 0xfc,
+ 0x01, 0xb4, 0xed, 0xc6, 0x2f, 0xd8, 0x37, 0xe7, 0xe8, 0xf8, 0xeb, 0xe5, 0xde,
+ 0xd4, 0xe6, 0xde, 0xc3, 0xd8, 0xf4, 0xf0, 0x0c, 0xc0, 0x1c, 0xe8, 0xc0, 0x0d,
+ 0x16, 0x03, 0xf0, 0xd6, 0x19, 0x0c, 0xf6, 0x38, 0x3b, 0x1c, 0x0c, 0xfb, 0xa6,
+ 0xee, 0xdb, 0x10, 0xa1, 0x0b, 0x17, 0xe6, 0x19, 0x15, 0xb9, 0xfa, 0x03, 0xc5,
+ 0xf6, 0xe5, 0xe0, 0xdb, 0x4e, 0x05, 0x2e, 0xf9, 0xda, 0xf9, 0x1f, 0x26, 0xf6,
+ 0xcd, 0x28, 0x33, 0xee, 0x17, 0xb9, 0xe4, 0x29, 0x08, 0x16, 0xe5, 0x09, 0xca,
+ 0x18, 0xf5, 0xfe, 0x00, 0xfb, 0xe2, 0xef, 0x0f, 0x06, 0x19, 0xed, 0xf2, 0xf1,
+ 0xa6, 0x10, 0x57, 0xf1, 0xdc, 0xe2, 0x43, 0x2b, 0x24, 0xf0, 0xe7, 0x06, 0x11,
+ 0x23, 0xc8, 0x21, 0x0f, 0xf7, 0xd7, 0xf4, 0xd5, 0xca, 0xf5, 0xff, 0xf0, 0xf0,
+ 0xd2, 0xd9, 0x13, 0x0c, 0x15, 0x06, 0xdb, 0x09, 0xd1, 0x00, 0x37, 0x08, 0x0d,
+ 0xce, 0x16, 0xc4, 0xd5, 0xe4, 0xd9, 0xe9, 0x04, 0xaf, 0xc5, 0xde, 0xe4, 0x26,
+ 0xdd, 0x39, 0x08, 0xd6, 0xc9, 0x09, 0x1a, 0xe5, 0xc4, 0x3c, 0xfc, 0x2a, 0x1b,
+ 0xee, 0x0b, 0x0b, 0x9c, 0x2d, 0xcf, 0xad, 0xc5, 0x1e, 0xb5, 0xfa, 0x05, 0xe6,
+ 0x7f, 0xf2, 0xfa, 0x08, 0xd9, 0x0e, 0x03, 0x3c, 0xdf, 0xbb, 0x16, 0xe1, 0x42,
+ 0xfa, 0x11, 0x95, 0xb9, 0x3d, 0xbd, 0xe4, 0xd2, 0x01, 0xfe, 0xbc, 0xed, 0x0b,
+ 0xd3, 0x04, 0xc1, 0xd4, 0xf7, 0x2d, 0xe4, 0x08, 0xbe, 0xe5, 0x05, 0xea, 0xee,
+ 0xe5, 0x1a, 0xf0, 0x59, 0x03, 0xc8, 0xd6, 0x18, 0xe2, 0xe9, 0x07, 0x18, 0x1a,
+ 0x20, 0x24, 0xfc, 0x06, 0x1a, 0xfe, 0x03, 0xa1, 0xc7, 0xd5, 0xe3, 0x08, 0x06,
+ 0xf2, 0xcc, 0xb1, 0xef, 0xdf, 0x1e, 0xe3, 0x1e, 0xbb, 0xc5, 0xf1, 0x14, 0xe2,
+ 0xe2, 0x0e, 0x1a, 0x00, 0xb9, 0x09, 0xfe, 0xac, 0x13, 0x0e, 0xcc, 0xc6, 0xf5,
+ 0x34, 0xea, 0x2f, 0x5c, 0x19, 0xeb, 0x33, 0xbd, 0x9d, 0x12, 0x9a, 0x19, 0xa4,
+ 0xd7, 0xd3, 0xea, 0xd2, 0x1a, 0xde, 0x16, 0x1d, 0x18, 0xf0, 0x98, 0x40, 0xe9,
+ 0x00, 0xd8, 0xe0, 0x13, 0x03, 0x08, 0xe2, 0xf3, 0xcd, 0x1c, 0xe8, 0xcd, 0x38,
+ 0xfb, 0x34, 0x18, 0xf4, 0x12, 0x13, 0xfc, 0xc3, 0xf6, 0x0b, 0xfe, 0xd4, 0xee,
+ 0x10, 0xf8, 0xd6, 0x6f, 0x21, 0x05, 0xff, 0x07, 0xd6, 0xe0, 0x90, 0xf7, 0x2a,
+ 0x2b, 0xa2, 0xef, 0xdf, 0x0a, 0x06, 0x1b, 0x2a, 0x08, 0x4a, 0xc4, 0x11, 0xfa,
+ 0xf4, 0xae, 0x01, 0xb5, 0xf5, 0xf9, 0x26, 0x54, 0x0d, 0x43, 0x55, 0xc5, 0xe9,
+ 0xff, 0xe1, 0xc1, 0xf3, 0x22, 0x2b, 0xc4, 0x15, 0xe8, 0x57, 0xee, 0xfa, 0xeb,
+ 0xfc, 0xda, 0xd8, 0xc1, 0x0d, 0xf0, 0x1b, 0xfc, 0x0d, 0xd9, 0x2c, 0x3d, 0x12,
+ 0x1c, 0x1c, 0xd2, 0x3d, 0xfa, 0xf6, 0x1b, 0xf0, 0x0f, 0x40, 0x9b, 0xa7, 0xf9,
+ 0xb2, 0xe1, 0xf8, 0xf2, 0xf4, 0x14, 0xd6, 0xe7, 0x0f, 0xc9, 0x00, 0xe2, 0x08,
+ 0xdb, 0x7f, 0xb8, 0xe5, 0xe4, 0xab, 0x24, 0xfb, 0xee, 0xf5, 0xe3, 0x36, 0x2a,
+ 0xad, 0xfc, 0xf9, 0xbe, 0xe3, 0x01, 0xd3, 0xdb, 0xe1, 0x60, 0x0a, 0xbf, 0x0a,
+ 0xc0, 0xac, 0xe0, 0xd0, 0x41, 0xd6, 0x0b, 0xdc, 0x3e, 0x09, 0xf7, 0xc5, 0xe1,
+ 0xe6, 0xff, 0xe3, 0x22, 0xca, 0xdf, 0x24, 0xfa, 0x60, 0xe1, 0xb6, 0x97, 0xeb,
+ 0xe2, 0x2a, 0x39, 0x21, 0xc6, 0xdf, 0x3c, 0x1f, 0x3b, 0x16, 0xf9, 0x1f, 0x9a,
+ 0xda, 0xda, 0xbf, 0x4e, 0xd7, 0x03, 0x1f, 0xdd, 0xeb, 0x03, 0x33, 0x19, 0xed,
+ 0xfd, 0xe5, 0xcb, 0x14, 0xde, 0xf5, 0x17, 0x00, 0x59, 0xc3, 0xd7, 0xe7, 0xf0,
+ 0xb1, 0xce, 0x42, 0x35, 0xe5, 0xc0, 0xf1, 0x58, 0xf3, 0xd5, 0xe7, 0x13, 0xd6,
+ 0x0c, 0x24, 0x05, 0xcb, 0x00, 0xb6, 0xec, 0xff, 0x1e, 0x39, 0xf1, 0x1a, 0xb9,
+ 0xf8, 0x01, 0xff, 0xe2, 0x68, 0xde, 0x28, 0xcf, 0xcc, 0xe7, 0xd6, 0x0d, 0xa9,
+ 0x20, 0xf1, 0xe3, 0xeb, 0xec, 0xf0, 0xd2, 0x13, 0xf8, 0x08, 0x0c, 0xf2, 0xe5,
+ 0x1e, 0xc6, 0x06, 0x1f, 0xc0, 0xfd, 0xac, 0xfa, 0xb6, 0xf9, 0xff, 0xd1, 0xf0,
+ 0xe8, 0xbc, 0xed, 0x23, 0xa5, 0xd9, 0x0b, 0xfe, 0xf8, 0xac, 0x5c, 0xca, 0xd9,
+ 0xe0, 0xcf, 0x81, 0xf5, 0xfb, 0x26, 0x0b, 0x09, 0x10, 0x2d, 0x9b, 0x20, 0x01,
+ 0xfb, 0x0c, 0x09, 0x0d, 0xd0, 0x0c, 0x24, 0x11, 0x10, 0xb5, 0x07, 0xd3, 0xe4,
+ 0x17, 0x16, 0xd6, 0xdc, 0xfe, 0xcb, 0xb6, 0xc8, 0xf8, 0xde, 0xe8, 0x3c, 0xd9,
+ 0x47, 0xfd, 0xa0, 0x22, 0xd5, 0xde, 0xea, 0xc2, 0xea, 0xe7, 0x43, 0xde, 0x09,
+ 0xab, 0xd6, 0xcd, 0x1c, 0xf9, 0xc0, 0xcc, 0x03, 0xfe, 0x31, 0x18, 0x22, 0xe5,
+ 0xdc, 0xfb, 0xd8, 0xbb, 0xfa, 0x9d, 0x06, 0x32, 0x09, 0x0d, 0xaa, 0x1a, 0x01,
+ 0xbe, 0xd0, 0xcf, 0xea, 0x0e, 0x16, 0x21, 0x13, 0xef, 0xd4, 0xdc, 0x49, 0x0e,
+ 0xef, 0xd1, 0x1e, 0x13, 0x42, 0x2f, 0x28, 0xc9, 0xbe, 0xe5, 0x11, 0x3d, 0xf5,
+ 0xf0, 0xca, 0x16, 0x1c, 0xd8, 0x18, 0xfd, 0xd2, 0x19, 0xe3, 0xea, 0xbf, 0xdd,
+ 0xcb, 0x87, 0xff, 0x1e, 0xb7, 0xe6, 0x25, 0xcc, 0xe5, 0xf9, 0xe5, 0xe9, 0xac,
+ 0xfa, 0x50, 0xfa, 0xea, 0x04, 0x06, 0xa1, 0xc9, 0x07, 0x0b, 0xf3, 0xde, 0xa0,
+ 0xdd, 0xe8, 0x90, 0x96, 0x0b, 0xeb, 0x0d, 0x21, 0x07, 0x2f, 0x99, 0xeb, 0x9b,
+ 0x0a, 0x0d, 0xe4, 0xf8, 0x4e, 0xe2, 0xdf, 0x15, 0xe0, 0xe4, 0xd7, 0xc3, 0xf5,
+ 0xd9, 0x1e, 0xd3, 0x07, 0xfe, 0xd7, 0xf5, 0xcf, 0x29, 0x34, 0x20, 0x20, 0xd9,
+ 0xcd, 0x14, 0xfe, 0xe5, 0x2f, 0x1b, 0x08, 0x3f, 0x9d, 0xc4, 0x03, 0x04, 0x09,
+ 0xf5, 0xcb, 0xd2, 0xfa, 0xfa, 0xcf, 0x01, 0xc5, 0x07, 0x06, 0x03, 0xfa, 0xdd,
+ 0xc0, 0xda, 0xf1, 0xc6, 0xef, 0xf1, 0x14, 0xf6, 0xcd, 0x48, 0x9d, 0xb3, 0xb4,
+ 0xac, 0xff, 0xe6, 0xed, 0x04, 0xf3, 0xf8, 0xdd, 0xe7, 0x08, 0xe3, 0x37, 0xf5,
+ 0xd9, 0xfe, 0x08, 0xd8, 0x01, 0xf1, 0xc6, 0xd8, 0xd4, 0x38, 0x15, 0x1b, 0xe1,
+ 0x9c, 0x04, 0xe6, 0xe1, 0xfd, 0x03, 0xcd, 0x86, 0x0e, 0x0c, 0xe4, 0x81, 0x04,
+ 0xf4, 0xfc, 0xd7, 0x26, 0x37, 0x0a, 0xae, 0x0e, 0xe5, 0x33, 0xfa, 0xd8, 0xeb,
+ 0x01, 0xc0, 0x50, 0xf8, 0xf5, 0x24, 0x1e, 0x28, 0x06, 0xc3, 0x13, 0xf8, 0xae,
+ 0x03, 0xfb, 0xce, 0xbc, 0x2c, 0x17, 0x0a, 0xf3, 0xcf, 0xee, 0x1a, 0xb0, 0x1f,
+ 0xba, 0xbc, 0xee, 0xae, 0x00, 0x05, 0xbe, 0xd6, 0xf5, 0x12, 0xe8, 0xb5, 0x2c,
+ 0xd4, 0xf2, 0x20, 0x2a, 0xfd, 0x1b, 0x30, 0xf7, 0xaf, 0xc2, 0xde, 0xcb, 0x30,
+ 0x20, 0xdc, 0x0f, 0xfe, 0xeb, 0x1e, 0xca, 0xc7, 0xf3, 0x22, 0xce, 0xeb, 0xf1,
+ 0x14, 0xfb, 0xe5, 0xfe, 0xd4, 0xcd, 0xd5, 0xfb, 0xea, 0xc6, 0xd8, 0xde, 0xe3,
+ 0x33, 0x29, 0x61, 0x32, 0x1e, 0xfb, 0x2d, 0xcb, 0xc5, 0xef, 0x06, 0xe9, 0xeb,
+ 0x0d, 0x20, 0x38, 0xfb, 0xdc, 0xdd, 0xbd, 0xe7, 0xd3, 0xec, 0xcb, 0x5a, 0xe0,
+ 0x4e, 0x2f, 0x22, 0xc6, 0x06, 0xca, 0xe3, 0x09, 0x2c, 0x3d, 0x17, 0x08, 0xef,
+ 0xe6, 0xed, 0xd1, 0x33, 0x1f, 0x28, 0xd6, 0xb9, 0x88, 0xe9, 0x1b, 0xe5, 0xe1,
+ 0xd3, 0x6e, 0x0c, 0x09, 0xb9, 0x1e, 0xcc, 0xf1, 0x40, 0xce, 0x33, 0x0e, 0xff,
+ 0x2a, 0x18, 0x13, 0xf0, 0xe5, 0xa6, 0xd9, 0xe1, 0x2b, 0x11, 0xec, 0x1b, 0x23,
+ 0x0a, 0x18, 0xdf, 0x13, 0xfc, 0x41, 0xcc, 0x00, 0xc6, 0xf4, 0x25, 0xf3, 0x21,
+ 0x36, 0x04, 0x51, 0xfe, 0xbb, 0xf4, 0xf7, 0x05, 0x46, 0x0b, 0xea, 0x3d, 0xf6,
+ 0xaf, 0x03, 0x4b, 0xe8, 0x13, 0xf7, 0x14, 0x10, 0xf8, 0x08, 0xd0, 0xb7, 0x05,
+ 0xcd, 0x13, 0xda, 0x9f, 0xe8, 0x14, 0xc8, 0x02, 0x09, 0xc1, 0x2e, 0xa6, 0x07,
+ 0x13, 0xfd, 0xdd, 0xde, 0x43, 0x17, 0x45, 0xe4, 0xe5, 0xed, 0x1b, 0xfe, 0xf1,
+ 0xed, 0xf8, 0x15, 0x4d, 0x0d, 0x0e, 0x37, 0x1d, 0x09, 0xfc, 0xc5, 0xb8, 0xe9,
+ 0xf0, 0xef, 0xf7, 0x0a, 0x19, 0x22, 0x14, 0x11, 0x44, 0xd7, 0xe3, 0x03, 0xe6,
+ 0x26, 0x00, 0xb2, 0x0a, 0xe2, 0xec, 0xe4, 0x3e, 0x24, 0xe4, 0x30, 0xbe, 0x12,
+ 0xf4, 0x02, 0xfd, 0x1b, 0x05, 0xda, 0xde, 0x02, 0xe1, 0x33, 0xfb, 0x0f, 0xe0,
+ 0x03, 0x18, 0xed, 0xe6, 0xe1, 0x10, 0x2d, 0xc9, 0x19, 0xee, 0x13, 0x3b, 0xef,
+ 0xda, 0xe7, 0xb5, 0xc1, 0xdb, 0xee, 0xfa, 0x03, 0x2c, 0x57, 0xec, 0x02, 0x18,
+ 0xf3, 0xf2, 0xfe, 0x2d, 0xeb, 0x02, 0xf7, 0x1f, 0xeb, 0xef, 0x43, 0xe7, 0x2c,
+ 0x00, 0xa3, 0x2f, 0xf9, 0xd2, 0xec, 0xc6, 0xbe, 0x11, 0xc9, 0xce, 0xf2, 0xf2,
+ 0xe5, 0xf8, 0x24, 0x09, 0x25, 0x02, 0x30, 0x68, 0x2f, 0x1c, 0x1e, 0x10, 0xf9,
+ 0x10, 0xe5, 0xdf, 0xc2, 0xdf, 0xf3, 0x2d, 0xf5, 0xbf, 0xdd, 0x1d, 0x02, 0x06,
+ 0x03, 0xd1, 0x20, 0x2f, 0x2b, 0xeb, 0xda, 0x20, 0xe0, 0x40, 0x17, 0xe7, 0x47,
+ 0x0a, 0xf5, 0xe0, 0x1f, 0x00, 0x13, 0x23, 0x0c, 0x06, 0x46, 0xc7, 0xf7, 0x22,
+ 0x2b, 0xfa, 0xe5, 0x15, 0xf8, 0xe5, 0xe8, 0x43, 0x29, 0x07, 0x0d, 0xe5, 0xee,
+ 0x04, 0xfc, 0xd2, 0xae, 0x7f, 0xd0, 0x07, 0xe5, 0xfb, 0xf5, 0xe4, 0x1b, 0xfd,
+ 0xd6, 0xc3, 0xd2, 0xe4, 0xb9, 0xdc, 0xe1, 0xf4, 0x25, 0xf2, 0xf1, 0xcd, 0xee,
+ 0x16, 0x14, 0x01, 0x33, 0x33, 0x04, 0xf5, 0xd0, 0xfc, 0xf0, 0x1e, 0x10, 0xfc,
+ 0xda, 0x30, 0xe7, 0x06, 0xc5, 0xdc, 0xdd, 0xf2, 0x18, 0xe4, 0x6d, 0xe7, 0x19,
+ 0xe7, 0x04, 0xf7, 0x1f, 0xde, 0x0d, 0xd5, 0x0b, 0xc8, 0xbf, 0x00, 0x0e, 0xcb,
+ 0xff, 0xd4, 0x18, 0x9e, 0xcb, 0xf1, 0xf7, 0xed, 0xfc, 0x2f, 0x56, 0xcb, 0xec,
+ 0x4f, 0x1b, 0x2b, 0xcc, 0xee, 0xdc, 0x24, 0xdb, 0x1d, 0xbe, 0x32, 0xfc, 0x3d,
+ 0x61, 0xf4, 0xcc, 0x05, 0xe6, 0xf7, 0xc7, 0xfc, 0xd4, 0xf4, 0x91, 0xec, 0xeb,
+ 0x1f, 0xdd, 0xfa, 0x37, 0x0b, 0xba, 0xd9, 0x20, 0xca, 0x41, 0x5a, 0x31, 0x02,
+ 0xf4, 0x14, 0xae, 0x45, 0x0d, 0xf0, 0x1c, 0xb2, 0x03, 0xff, 0x17, 0xe6, 0x17,
+ 0xd8, 0xc2, 0xe9, 0xc3, 0xc0, 0x78, 0xcb, 0x0a, 0x40, 0xe9, 0x43, 0xbb, 0xe2,
+ 0xe0, 0x15, 0x2e, 0xd6, 0x21, 0xb0, 0xc6, 0xe0, 0xba, 0x20, 0x02, 0xe2, 0x00,
+ 0xcf, 0xce, 0xef, 0x1d, 0x35, 0x10, 0xf7, 0xd9, 0xd6, 0xed, 0xe6, 0x2a, 0x1e,
+ 0xe8, 0x1f, 0x0c, 0x19, 0xc5, 0x0e, 0xe9, 0x0f, 0xe0, 0x22, 0xb9, 0xc9, 0x03,
+ 0xf2, 0xe5, 0xde, 0xb8, 0xd0, 0xfb, 0xf9, 0xcf, 0x16, 0xf5, 0xf7, 0xe0, 0xe3,
+ 0x17, 0xf1, 0xe2, 0x50, 0x15, 0x3c, 0xec, 0xfb, 0xdb, 0xe7, 0x2d, 0xbc, 0xe6,
+ 0xbf, 0x19, 0xed, 0xe7, 0x61, 0xb8, 0x71, 0xd1, 0x08, 0x03, 0xdb, 0x05, 0x40,
+ 0x4c, 0x01, 0xf1, 0x09, 0xef, 0x3a, 0x02, 0x2a, 0x37, 0xc0, 0x55, 0xd1, 0x8c,
+ 0x14, 0x09, 0xfd, 0xea, 0x22, 0xee, 0x0b, 0x23, 0xec, 0xa9, 0x81, 0xff, 0xd3,
+ 0xf2, 0xe3, 0xcd, 0xc2, 0x09, 0x13, 0xdb, 0xbb, 0x0f, 0x16, 0x04, 0xa7, 0x15,
+ 0x4e, 0xe9, 0x16, 0xd2, 0xe4, 0xd2, 0xe2, 0xe2, 0x2c, 0xbc, 0x1b, 0xf6, 0xfc,
+ 0xd9, 0x60, 0x86, 0x1c, 0x29, 0xc4, 0x40, 0xe6, 0xf1, 0x25, 0xc9, 0x44, 0x20,
+ 0x2e, 0xd4, 0x05, 0xc8, 0x0b, 0x30, 0x1e, 0xda, 0xe7, 0xdc, 0xeb, 0xe3, 0xef,
+ 0xa9, 0xe0, 0x2f, 0xbc, 0xb7, 0xaf, 0x50, 0xd6, 0x59, 0xf5, 0xf0, 0x0c, 0x11,
+ 0xbb, 0xf8, 0xd1, 0x1c, 0x0b, 0xee, 0x28, 0xa3, 0x28, 0x21, 0xc1, 0xb9, 0xc0,
+ 0xe0, 0xed, 0xaa, 0xf0, 0xf9, 0xca, 0xc7, 0x0f, 0x07, 0xc4, 0x04, 0x36, 0xdf,
+ 0xeb, 0xf4, 0xf6, 0xde, 0xf9, 0x2a, 0x18, 0xed, 0xf0, 0x07, 0xed, 0x25, 0xdf,
+ 0x0f, 0xf5, 0x81, 0xd1, 0x13, 0x19, 0x15, 0xdc, 0xfe, 0xf7, 0xfe, 0x30, 0x1d,
+ 0xdb, 0x1f, 0x17, 0x3a, 0xeb, 0xf6, 0xd0, 0x37, 0x0c, 0xed, 0xd9, 0xb3, 0x26,
+ 0xfb, 0xd5, 0xfb, 0xb5, 0x07, 0xe9, 0xea, 0xe0, 0xe1, 0xc8, 0xe0, 0xd9, 0xe4,
+ 0xcf, 0xe2, 0xda, 0xe0, 0x04, 0xbe, 0xac, 0x1a, 0x02, 0xd6, 0x04, 0xe0, 0x18,
+ 0xd7, 0xff, 0x27, 0x0b, 0x24, 0x98, 0x2c, 0xfc, 0xd1, 0xd5, 0x48, 0xfb, 0x0b,
+ 0x02, 0xec, 0xd8, 0xfa, 0xe3, 0x9c, 0xf4, 0xfd, 0xcf, 0x5b, 0x11, 0xf2, 0xdc,
+ 0x03, 0xd7, 0xf9, 0xa7, 0x0d, 0xf7, 0xb8, 0xc3, 0x0f, 0xe7, 0x28, 0xa5, 0xee,
+ 0xf1, 0x10, 0x43, 0xde, 0x04, 0xe9, 0x10, 0x02, 0x00, 0xc7, 0x2a, 0x3d, 0xe4,
+ 0xac, 0xdb, 0x0a, 0xdb, 0xd8, 0xee, 0x21, 0x2c, 0x0e, 0x21, 0x2e, 0xdd, 0x30,
+ 0x1b, 0xde, 0x11, 0xe7, 0x46, 0xfc, 0x0f, 0x2e, 0xe8, 0x31, 0x59, 0x09, 0xe3,
+ 0xaa, 0x50, 0xd5, 0xd2, 0x1a, 0xfd, 0xfe, 0x29, 0xc4, 0xdc, 0xc7, 0xf5, 0xdb,
+ 0xa6, 0xdd, 0x25, 0xee, 0xf9, 0xb3, 0x12, 0xf9, 0xf4, 0x31, 0x13, 0x03, 0x20,
+ 0xff, 0xca, 0x01, 0xbe, 0xef, 0xca, 0xb9, 0xc9, 0xd4, 0x04, 0xb9, 0xd8, 0x25,
+ 0xb0, 0xf5, 0xbb, 0xa4, 0xd9, 0xc3, 0xfd, 0xa6, 0x16, 0x2f, 0xeb, 0xe2, 0x01,
+ 0x1f, 0x06, 0xf7, 0xe5, 0xbf, 0xcc, 0xbf, 0xf4, 0x0e, 0xf4, 0x25, 0x45, 0x1a,
+ 0xf8, 0x06, 0xd0, 0x18, 0xea, 0x03, 0xd3, 0x32, 0xf8, 0xe5, 0x24, 0x3e, 0x23,
+ 0xdb, 0xf2, 0xea, 0xd1, 0x04, 0x1b, 0x18, 0xe5, 0x06, 0x5f, 0xab, 0x34, 0xb9,
+ 0x42, 0xe8, 0xfc, 0x20, 0x20, 0x1e, 0x16, 0xed, 0x34, 0xdc, 0x27, 0x08, 0x0f,
+ 0xf3, 0xf2, 0xf6, 0xdd, 0xd9, 0x15, 0xd1, 0xd4, 0xb5, 0x00, 0xc4, 0xc9, 0xdb,
+ 0xc9, 0xd1, 0xfe, 0xdd, 0xa8, 0xe5, 0x2c, 0xcd, 0xce, 0x22, 0xdd, 0xf6, 0xe4,
+ 0x21, 0xda, 0x28, 0x0c, 0x93, 0xef, 0xf5, 0x4a, 0x31, 0x9e, 0xca, 0x2b, 0x13,
+ 0x02, 0xef, 0xeb, 0xca, 0x07, 0xc8, 0xe7, 0x5f, 0xfd, 0x7d, 0xef, 0x20, 0x45,
+ 0x20, 0xc6, 0x15, 0x8c, 0xd7, 0xf8, 0xcf, 0x13, 0xd2, 0x0d, 0x28, 0x46, 0x58,
+ 0xeb, 0x34, 0x59, 0x11, 0xb7, 0xc8, 0xe4, 0x47, 0x45, 0xf1, 0xf7, 0x34, 0x07,
+ 0xd3, 0x0f, 0x75, 0xdb, 0x34, 0xfb, 0xd2, 0xb7, 0x23, 0xe2, 0xf8, 0x40, 0xd6,
+ 0x11, 0x03, 0xd0, 0xe5, 0xac, 0xb5, 0xde, 0x36, 0x15, 0xf1, 0xd2, 0x36, 0xea,
+ 0xcd, 0x45, 0x59, 0xf6, 0x1e, 0xca, 0x0e, 0xf2, 0x2c, 0x25, 0xde, 0xd7, 0x66,
+ 0x33, 0x23, 0xd5, 0x9b, 0x1c, 0xd4, 0xab, 0x13, 0xea, 0x03, 0xb2, 0x59, 0x01,
+ 0x19, 0x08, 0x16, 0x64, 0xd3, 0x33, 0xd5, 0x95, 0xd5, 0x3c, 0xca, 0xdc, 0xe8,
+ 0x19, 0x08, 0xcb, 0xe1, 0x81, 0xdb, 0xe2, 0xde, 0x19, 0x12, 0xd6, 0x1f, 0xcf,
+ 0x14, 0xfb, 0xd8, 0x30, 0xf8, 0x0d, 0x3d, 0xdb, 0xbb, 0x14, 0xdc, 0x0e, 0xbe,
+ 0xf0, 0xe7, 0x12, 0x4d, 0xd2, 0x20, 0xb5, 0x4c, 0xb1, 0xd6, 0x4b, 0x95, 0xe1,
+ 0x0a, 0xa9, 0x06, 0x15, 0xf7, 0x8b, 0xb8, 0x06, 0xce, 0xc9, 0xe1, 0xdf, 0x8d,
+ 0x0b, 0xd4, 0xcc, 0xf8, 0xa2, 0xdb, 0x96, 0xfe, 0x45, 0x11, 0x28, 0xed, 0x1e,
+ 0x94, 0x07, 0x21, 0xe5, 0x2d, 0x2e, 0xc2, 0x0a, 0xf2, 0xf9, 0x0c, 0xe6, 0xe1,
+ 0x12, 0xd5, 0xd6, 0x4c, 0xe1, 0x30, 0x04, 0xda, 0xfb, 0x34, 0x11, 0x3d, 0xf7,
+ 0x02, 0xb2, 0x62, 0x13, 0xdf, 0xf5, 0x03, 0xea, 0x02, 0x89, 0xc5, 0x16, 0x1e,
+ 0x12, 0xd4, 0xe4, 0x20, 0xd9, 0xf1, 0xa7, 0x02, 0x51, 0xcd, 0xd9, 0xc9, 0x97,
+ 0x07, 0xe2, 0xab, 0xc5, 0x53, 0x45, 0xe5, 0xdf, 0xb2, 0xbc, 0xc9, 0xf5, 0x3f,
+ 0xae, 0xc4, 0x1f, 0xb8, 0x27, 0x05, 0xb6, 0xc4, 0xf8, 0x26, 0xd1, 0x01, 0x0e,
+ 0xc4, 0xfd, 0xa2, 0x05, 0x9e, 0xbf, 0x33, 0x21, 0xfa, 0xe9, 0x09, 0x07, 0x9c,
+ 0xf1, 0x20, 0xe2, 0x2e, 0xcb, 0xd8, 0x85, 0x1e, 0xea, 0x34, 0xf6, 0xcf, 0xd2,
+ 0x38, 0xf7, 0xd8, 0x2b, 0xea, 0xe9, 0x02, 0xc3, 0xc4, 0x93, 0x09, 0xa4, 0xf6,
+ 0x1c, 0xe2, 0xe7, 0xea, 0xbd, 0x2f, 0xfa, 0x16, 0xca, 0xcb, 0xe0, 0xc7, 0xf2,
+ 0x22, 0x43, 0xbe, 0x00, 0xb9, 0xf5, 0xf5, 0xf8, 0x05, 0x7d, 0x20, 0x19, 0xed,
+ 0xc6, 0x03, 0xf2, 0x32, 0x18, 0xc0, 0x1c, 0x93, 0x1c, 0x0f, 0x04, 0x27, 0x81,
+ 0xdc, 0xcf, 0xbb, 0x00, 0xda, 0xbb, 0xe6, 0xac, 0xe9, 0x36, 0x05, 0x12, 0xfd,
+ 0x1e, 0xf1, 0xb4, 0xa2, 0x33, 0x10, 0xbf, 0x1f, 0xe8, 0x18, 0xc9, 0x29, 0x07,
+ 0x0b, 0x2e, 0xfa, 0xa7, 0x02, 0xd8, 0xca, 0xf3, 0xf0, 0xe3, 0x1e, 0xfd, 0xd8,
+ 0xf0, 0xe5, 0x04, 0x9b, 0xec, 0x11, 0xe5, 0xfa, 0x0e, 0x93, 0xe6, 0xdb, 0x06,
+ 0xe8, 0xf1, 0xe3, 0x36, 0xd8, 0xe5, 0x0b, 0x02, 0xb4, 0xeb, 0x06, 0xdb, 0x0e,
+ 0xf0, 0xd9, 0xb6, 0xb9, 0xcc, 0xbe, 0x09, 0x42, 0x13, 0xfd, 0x3e, 0x08, 0xf2,
+ 0xf1, 0x8f, 0xb2, 0xe7, 0xd1, 0xa4, 0xd8, 0x35, 0xf5, 0xef, 0xf7, 0xc9, 0xef,
+ 0x95, 0xc2, 0x03, 0xf0, 0xce, 0x2b, 0x20, 0xed, 0x2d, 0xfe, 0xe5, 0x4f, 0xb2,
+ 0xd0, 0xd9, 0xdc, 0x06, 0xe7, 0x0c, 0x22, 0x08, 0xf0, 0x2d, 0xf4, 0xbd, 0x23,
+ 0x24, 0x4b, 0xec, 0xe0, 0xde, 0xeb, 0xf2, 0x24, 0xcd, 0xf8, 0x23, 0xfa, 0x13,
+ 0xf8, 0xeb, 0x49, 0x06, 0xed, 0xca, 0xde, 0xb3, 0x65, 0x3c, 0xe1, 0x27, 0xf7,
+ 0x32, 0xd0, 0x21, 0x8b, 0x20, 0xec, 0xf4, 0x2e, 0xf3, 0xf6, 0x02, 0xc4, 0x23,
+ 0x06, 0x2d, 0x3a, 0xdc, 0x1e, 0xcd, 0x0c, 0xeb, 0xa6, 0xf9, 0xe1, 0x12, 0x2a,
+ 0x37, 0x57, 0x0b, 0xdc, 0xa2, 0xc4, 0x01, 0xbc, 0x4b, 0x45, 0x3d, 0x4f, 0x0a,
+ 0x5b, 0x26, 0x40, 0x33, 0x3a, 0x95, 0xa6, 0xda, 0x5f, 0xd6, 0xd9, 0xe3, 0xe5,
+ 0x37, 0xbe, 0xe4, 0x00, 0xe5, 0xba, 0x07, 0x53, 0x1d, 0x27, 0x1d, 0x0b, 0x38,
+ 0xcf, 0xc4, 0xf5, 0x21, 0x4e, 0xf2, 0x52, 0xdf, 0xf2, 0xc2, 0xf1, 0x14, 0x17,
+ 0xba, 0xb3, 0x95, 0x00, 0xee, 0xd2, 0xd6, 0x1f, 0x18, 0x03, 0x88, 0x25, 0xdb,
+ 0xf5, 0x13, 0x00, 0x2e, 0x04, 0xb3, 0x1e, 0xee, 0xd1, 0x12, 0x17, 0xd8, 0x2d,
+ 0xbf, 0xfe, 0x37, 0xf1, 0xe5, 0x1b, 0xeb, 0xe4, 0xe4, 0x59, 0xf7, 0x7b, 0x0d,
+ 0xd9, 0x9a, 0x18, 0x22, 0xdb, 0xb8, 0xf1, 0xe4, 0x32, 0xd8, 0xdd, 0xc0, 0xf5,
+ 0xef, 0xc6, 0x44, 0xca, 0x02, 0x4a, 0xf0, 0x11, 0x0e, 0x90, 0xf8, 0xf5, 0x08,
+ 0xfe, 0xad, 0xd5, 0x17, 0xe6, 0xd0, 0x8b, 0x65, 0xf9, 0xde, 0xfc, 0x32, 0x0f,
+ 0xc1, 0xd0, 0xb6, 0xd6, 0x21, 0x12, 0x13, 0xcc, 0xeb, 0x10, 0x2a, 0x4e, 0xd6,
+ 0x4c, 0x18, 0xbc, 0xe3, 0x2a, 0x06, 0xbe, 0xe8, 0xbb, 0x0c, 0xfe, 0xef, 0xc0,
+ 0xf4, 0xc0, 0xdc, 0x36, 0x14, 0x35, 0x10, 0x7f, 0xf2, 0x13, 0x15, 0xe1, 0x33,
+ 0x26, 0xd7, 0xf2, 0x30, 0xfd, 0xe0, 0x61, 0xd5, 0xc0, 0xea, 0x35, 0xb9, 0x9d,
+ 0x3f, 0x15, 0x14, 0xe7, 0xd6, 0xc1, 0x08, 0xc2, 0xd7, 0xeb, 0xd5, 0xe1, 0x2a,
+ 0xfe, 0xab, 0xf8, 0xee, 0xf8, 0x06, 0x24, 0xe8, 0x27, 0x0c, 0x26, 0x08, 0x0f,
+ 0xaf, 0x04, 0xbe, 0xf3, 0xe2, 0xdd, 0xdd, 0x58, 0xc8, 0x33, 0xf1, 0xeb, 0x1a,
+ 0xbc, 0x4c, 0xd9, 0xc7, 0xf7, 0xd0, 0xfb, 0xc6, 0xcf, 0x2d, 0xf9, 0xe4, 0xe9,
+ 0xe2, 0x40, 0xf3, 0x3e, 0xe6, 0xe5, 0x19, 0xda, 0x1c, 0x05, 0x00, 0xf7, 0xba,
+ 0x08, 0xf7, 0xd4, 0xd4, 0x5b, 0xf1, 0x25, 0xca, 0x0a, 0xd5, 0x00, 0xe6, 0xe9,
+ 0x13, 0x00, 0xa5, 0x38, 0xf8, 0xe1, 0x1c, 0xe0, 0x02, 0x42, 0x6a, 0xce, 0x08,
+ 0xe2, 0x30, 0x33, 0xf9, 0xdd, 0xe2, 0xcf, 0xf0, 0x51, 0x22, 0x0e, 0x29, 0x62,
+ 0xb8, 0xcb, 0x14, 0xd1, 0x98, 0xff, 0xd0, 0xb7, 0xc0, 0xdc, 0x0b, 0xfb, 0x52,
+ 0x47, 0xf8, 0x05, 0xe3, 0xd5, 0x19, 0x14, 0xf1, 0xeb, 0x04, 0x2f, 0xc7, 0x58,
+ 0xc6, 0xc3, 0xb7, 0xeb, 0xa0, 0x22, 0xd2, 0xe7, 0xb0, 0xe7, 0x0f, 0xfb, 0xbb,
+ 0x15, 0x29, 0xc9, 0xd5, 0x00, 0xf0, 0x16, 0xeb, 0xfe, 0x37, 0xdd, 0xf1, 0xc8,
+ 0xee, 0xdb, 0xfc, 0xe0, 0xbe, 0xfa, 0x05, 0xf3, 0xf8, 0xe0, 0x13, 0xf6, 0xd6,
+ 0x19, 0x30, 0xd0, 0xe9, 0x33, 0xd3, 0xe3, 0xb9, 0xc4, 0x45, 0xf5, 0xa5, 0x55,
+ 0xfe, 0xca, 0x02, 0xc2, 0x10, 0xd4, 0x15, 0x1e, 0xe0, 0xe6, 0x07, 0xed, 0x73,
+ 0x06, 0xf5, 0x1d, 0xda, 0x81, 0xd9, 0xfb, 0xfe, 0xf9, 0x16, 0x28, 0xde, 0x10,
+ 0xf0, 0xce, 0xf8, 0x2e, 0xe2, 0x34, 0x2d, 0x1c, 0x0a, 0xf4, 0x29, 0x1d, 0xe6,
+ 0x98, 0xc6, 0xb8, 0x38, 0x14, 0x11, 0xe7, 0xf9, 0x01, 0x2a, 0xee, 0x5e, 0xf9,
+ 0xfd, 0xf7, 0xc8, 0xfe, 0xf0, 0xbf, 0x2f, 0x9d, 0xc0, 0x1b, 0xd7, 0x1f, 0xd1,
+ 0xd7, 0xa3, 0xa9, 0x14, 0xdd, 0xe7, 0xe4, 0x03, 0x28, 0x52, 0x34, 0x1f, 0xbc,
+ 0xdd, 0xfb, 0x26, 0xc3, 0xef, 0x22, 0x4f, 0x24, 0xb3, 0xaf, 0x04, 0x01, 0x04,
+ 0x08, 0x22, 0xce, 0xf0, 0x24, 0x3d, 0xc0, 0xa1, 0x06, 0x01, 0x16, 0x18, 0x5a,
+ 0xdb, 0x42, 0x10, 0xc9, 0xf3, 0xf5, 0xfb, 0xfc, 0x00, 0x0c, 0xff, 0x05, 0xf0,
+ 0x1e, 0xdd, 0xd4, 0x53, 0xca, 0x09, 0xf7, 0x1c, 0xb1, 0x18, 0xbc, 0x13, 0x1b,
+ 0x02, 0x14, 0x52, 0x24, 0xf7, 0x36, 0xb4, 0x15, 0xde, 0x1d, 0xfe, 0xf7, 0x40,
+ 0xe9, 0xd4, 0x25, 0x47, 0x13, 0x39, 0x46, 0x37, 0xb0, 0xfc, 0x34, 0xf1, 0x0d,
+ 0x04, 0x1e, 0x77, 0xcd, 0x34, 0xbe, 0x03, 0xf1, 0x1a, 0x1f, 0xc3, 0xdc, 0x96,
+ 0xf2, 0x21, 0xef, 0x9f, 0xe6, 0xf9, 0xfd, 0x26, 0xf8, 0x07, 0xc9, 0xf2, 0xe3,
+ 0xbe, 0xb7, 0x27, 0xb8, 0x39, 0xfc, 0x50, 0x16, 0xe6, 0xd8, 0xf2, 0xcc, 0xb0,
+ 0x48, 0x26, 0xcc, 0xf7, 0xd5, 0x4f, 0xe4, 0xc5, 0x03, 0x1b, 0xfa, 0xa1, 0xd6,
+ 0x09, 0x1e, 0x0e, 0xfd, 0xb4, 0x1a, 0xce, 0xce, 0x0a, 0x37, 0x12, 0xce, 0xd9,
+ 0xd2, 0xfc, 0x30, 0xaf, 0x05, 0x19, 0x1c, 0x46, 0xdc, 0xc9, 0x3c, 0x13, 0xed,
+ 0x05, 0xe6, 0x08, 0x7f, 0x56, 0xc7, 0xeb, 0x98, 0x05, 0x3e, 0xf8, 0xe9, 0x32,
+ 0xfd, 0xb8, 0x31, 0xd7, 0xe9, 0x18, 0x1f, 0x2f, 0xf3, 0xc5, 0xe7, 0x07, 0xc7,
+ 0x2e, 0x8a, 0x12, 0xd9, 0x2e, 0xf7, 0x14, 0x36, 0xe5, 0x10, 0x37, 0xd0, 0x0b,
+ 0xe0, 0xb6, 0xfc, 0xd7, 0x07, 0xad, 0xe6, 0x05, 0xf0, 0xcc, 0x1f, 0xe7, 0x4d,
+ 0xef, 0x17, 0xe0, 0xee, 0xef, 0xe9, 0xa6, 0x13, 0xc9, 0xaf, 0xf6, 0x21, 0xce,
+ 0x2e, 0x30, 0x1a, 0xba, 0xfb, 0x57, 0x01, 0x8c, 0xe0, 0x13, 0x09, 0x20, 0xe1,
+ 0x3b, 0xfb, 0xec, 0xf7, 0x27, 0xe8, 0x16, 0xc1, 0xe7, 0x0f, 0xb2, 0xd8, 0x16,
+ 0x0f, 0x3d, 0xe6, 0x49, 0xe4, 0x0c, 0x3a, 0x0e, 0xcf, 0x34, 0xf4, 0x2c, 0xf8,
+ 0xdd, 0x08, 0xd5, 0xf6, 0xf0, 0xdc, 0xfa, 0xe5, 0x17, 0xce, 0x4f, 0xb6, 0xdc,
+ 0x36, 0xde, 0x20, 0x32, 0xe4, 0xc0, 0x0d, 0x39, 0xf6, 0xf3, 0x0d, 0x14, 0xf9,
+ 0x0b, 0x2d, 0x5d, 0x42, 0xd1, 0x45, 0x14, 0xc7, 0x0c, 0xae, 0xeb, 0xbb, 0x32,
+ 0x0b, 0x04, 0xf5, 0x9c, 0xf2, 0xef, 0xc0, 0x4b, 0xf1, 0xb3, 0x2e, 0x13, 0x35,
+ 0xf4, 0xf3, 0x12, 0xfc, 0xcd, 0xed, 0xf4, 0xac, 0xd1, 0x04, 0xe9, 0xa9, 0x07,
+ 0xda, 0x50, 0xc7, 0xd4, 0x1e, 0xe8, 0xeb, 0x1e, 0x08, 0x4c, 0xe7, 0x57, 0xec,
+ 0xff, 0x04, 0xd6, 0x15, 0xcc, 0x56, 0x00, 0x0b, 0xeb, 0xe5, 0x50, 0x09, 0x16,
+ 0xf2, 0xd9, 0xdc, 0xf0, 0xee, 0x37, 0x26, 0x06, 0x0c, 0x20, 0xec, 0x1c, 0x0f,
+ 0x3c, 0xdc, 0xe6, 0x25, 0xdb, 0x04, 0x0d, 0x1c, 0x43, 0xf3, 0x23, 0x1b, 0x3a,
+ 0x11, 0x25, 0x02, 0xa6, 0x07, 0x06, 0xfb, 0xc9, 0xed, 0x59, 0x05, 0x1c, 0x03,
+ 0xde, 0x03, 0x45, 0x0d, 0xd0, 0x01, 0x33, 0x22, 0x0c, 0xfb, 0xc2, 0xf1, 0xd8,
+ 0xc3, 0xf0, 0x4b, 0xc3, 0x05, 0x20, 0x41, 0xcf, 0xde, 0xd7, 0x17, 0x12, 0x34,
+ 0xff, 0xfb, 0xe2, 0x10, 0xeb, 0xdb, 0xcd, 0x07, 0xdb, 0xed, 0xd9, 0x1e, 0x4a,
+ 0x2b, 0xf4, 0xab, 0xfd, 0x31, 0x04, 0xed, 0x02, 0x1c, 0xc5, 0x7e, 0xde, 0xb9,
+ 0x16, 0xb1, 0x05, 0x0a, 0xf2, 0xc6, 0x20, 0x1b, 0x14, 0xce, 0x4d, 0xe7, 0xf2,
+ 0x1b, 0xe0, 0xf8, 0x03, 0x15, 0x07, 0x19, 0x14, 0xfb, 0xeb, 0xb9, 0xbc, 0x25,
+ 0x0c, 0xd1, 0xfc, 0xe4, 0x34, 0xd0, 0x81, 0x0c, 0xe7, 0x07, 0x04, 0xd3, 0x34,
+ 0xe2, 0xc1, 0xdc, 0xd7, 0xd6, 0xe3, 0x34, 0x9d, 0xd9, 0xbc, 0x26, 0xb0, 0xbb,
+ 0x25, 0xdd, 0xe6, 0xdb, 0xf2, 0xe7, 0x00, 0x23, 0x06, 0x4c, 0xd9, 0x04, 0xc9,
+ 0x3b, 0x19, 0x0c, 0x06, 0x23, 0x1e, 0xf7, 0xe8, 0xf1, 0x32, 0x34, 0xe3, 0xd2,
+ 0xe5, 0xf5, 0x24, 0xf3, 0x31, 0x18, 0xef, 0xf4, 0x10, 0x0d, 0xc3, 0xed, 0x0d,
+ 0x3d, 0x0d, 0xfb, 0xc0, 0xda, 0x2a, 0xde, 0xee, 0x2d, 0x15, 0xfc, 0x03, 0xef,
+ 0x01, 0xe0, 0x2c, 0xee, 0xe4, 0x4b, 0x35, 0xcb, 0x2d, 0x1f, 0xb8, 0xdd, 0xc8,
+ 0xdc, 0x24, 0xdd, 0x16, 0x02, 0xd0, 0xe1, 0xd1, 0xbf, 0xea, 0x35, 0xe6, 0x8d,
+ 0x1b, 0xef, 0x5e, 0x0e, 0xd0, 0xe0, 0x16, 0x66, 0x18, 0x81, 0xce, 0x2c, 0x30,
+ 0xbd, 0xc9, 0x1a, 0x44, 0x0c, 0xfd, 0xdc, 0x04, 0xc4, 0xfa, 0xfd, 0x1b, 0x2f,
+ 0x04, 0xee, 0x0c, 0x0d, 0x04, 0xd4, 0x21, 0x2b, 0xd7, 0xb5, 0x33, 0x11, 0xc7,
+ 0xe2, 0xb2, 0x03, 0xf7, 0x00, 0x05, 0xd8, 0x5f, 0xb2, 0x27, 0x81, 0xdb, 0xa8,
+ 0xe5, 0xdf, 0x32, 0xf3, 0xb8, 0x13, 0xf7, 0xf2, 0xf3, 0x0f, 0x24, 0xb3, 0x1e,
+ 0x2e, 0xc0, 0xdc, 0xdf, 0xff, 0x36, 0x89, 0x3e, 0x30, 0xf5, 0xe2, 0x21, 0xf0,
+ 0x2b, 0x19, 0x10, 0xfa, 0x05, 0x3a, 0x06, 0xff, 0x1c, 0xb4, 0xff, 0xcd, 0xd9,
+ 0xe6, 0xf1, 0x37, 0x04, 0x19, 0xfe, 0xf2, 0xfa, 0xfb, 0x5a, 0x9d, 0xd3, 0x1e,
+ 0xa7, 0xb0, 0x27, 0xb0, 0xd9, 0x47, 0x3b, 0xfb, 0xf6, 0xcc, 0xf8, 0xd5, 0xdc,
+ 0xd9, 0xc2, 0xee, 0xc0, 0x0d, 0xf7, 0xd9, 0xc7, 0x1f, 0xd5, 0xee, 0xfd, 0xe4,
+ 0xea, 0x01, 0xef, 0x23, 0xfa, 0xee, 0xcf, 0xee, 0xab, 0xbb, 0x1a, 0x21, 0xdf,
+ 0x3f, 0x06, 0xd3, 0xd8, 0xf8, 0x2f, 0x99, 0xad, 0x06, 0xb8, 0xd7, 0x0b, 0x23,
+ 0x19, 0x1a, 0xc5, 0x28, 0xa5, 0x54, 0x4a, 0x14, 0x53, 0x9a, 0xd2, 0x12, 0xda,
+ 0x13, 0x3b, 0xf2, 0x2d, 0x0c, 0xca, 0x13, 0xe7, 0xd2, 0x07, 0xe8, 0xde, 0xb1,
+ 0x43, 0xcd, 0x37, 0xd6, 0xfe, 0xe9, 0xf7, 0xc0, 0x56, 0xfe, 0xc6, 0xdd, 0xf9,
+ 0x0b, 0xd8, 0x12, 0xe6, 0x02, 0x2b, 0x8c, 0x41, 0xb1, 0xd6, 0xaf, 0xf9, 0x26,
+ 0xd5, 0xc9, 0xff, 0xd8, 0x37, 0xcc, 0xf4, 0x03, 0x22, 0x40, 0x08, 0xcb, 0xcd,
+ 0xb1, 0xb6, 0x1c, 0xe4, 0xe1, 0xaf, 0xf8, 0xf8, 0xc2, 0xd5, 0xec, 0x29, 0xf1,
+ 0xe3, 0x27, 0xef, 0xf9, 0xc7, 0x08, 0x1f, 0xf0, 0xb3, 0x0a, 0x28, 0x4a, 0xea,
+ 0xb9, 0x08, 0x13, 0xff, 0x03, 0x52, 0x1c, 0xfb, 0x0a, 0xec, 0x02, 0x05, 0xcb,
+ 0x0c, 0xe0, 0x08, 0xf2, 0xf3, 0xd6, 0xe1, 0x2e, 0xf8, 0xc6, 0x0a, 0xf7, 0xc3,
+ 0x4a, 0x2f, 0xdd, 0x0a, 0xef, 0x1b, 0xfd, 0x10, 0xd7, 0xd1, 0xcb, 0x11, 0xfa,
+ 0x41, 0xc4, 0xdc, 0xf3, 0xfb, 0x3a, 0xee, 0xde, 0x12, 0x22, 0xef, 0x04, 0x24,
+ 0xb7, 0xd5, 0xe1, 0x07, 0x10, 0x1f, 0xb2, 0xc4, 0xd5, 0xc0, 0x30, 0xdf, 0xe9,
+ 0x28, 0x14, 0xe1, 0x02, 0x24, 0x27, 0x08, 0x25, 0x2f, 0x23, 0x05, 0x24, 0x00,
+ 0x26, 0xac, 0xb8, 0x02, 0xd5, 0x3d, 0xf0, 0x35, 0xd8, 0xe9, 0xeb, 0x6d, 0xe1,
+ 0xee, 0xf5, 0xfa, 0x4c, 0x27, 0x0d, 0x1d, 0xf2, 0xfb, 0xd6, 0x17, 0xf1, 0x1d,
+ 0xc9, 0x1a, 0x08, 0x30, 0x29, 0x17, 0xda, 0x18, 0x28, 0xea, 0x12, 0xf2, 0xf7,
+ 0x10, 0x3f, 0xe2, 0xe2, 0xe7, 0xfc, 0xcf, 0x1d, 0x1a, 0x07, 0xe3, 0x0e, 0xd8,
+ 0x1a, 0xde, 0x11, 0xf9, 0x0d, 0xa7, 0x1e, 0x37, 0x04, 0x4e, 0xcb, 0xe9, 0x28,
+ 0xee, 0xc5, 0xd4, 0xe9, 0xe6, 0x16, 0x16, 0x0e, 0xe8, 0x51, 0x07, 0xe6, 0xf5,
+ 0x00, 0xbd, 0xce, 0xc7, 0xb8, 0xed, 0x0b, 0xe2, 0x0e, 0xc0, 0x1a, 0xfc, 0xc4,
+ 0xc1, 0x0f, 0xe9, 0x0d, 0xcc, 0xd3, 0x28, 0x0c, 0x7f, 0xb2, 0x00, 0x22, 0xcb,
+ 0xe1, 0x26, 0xdb, 0x14, 0xec, 0x11, 0x27, 0x06, 0xb4, 0xff, 0xbf, 0x0b, 0x27,
+ 0xcb, 0xf5, 0xf8, 0x02, 0x23, 0x06, 0xc7, 0xcb, 0xfa, 0xef, 0x9a, 0x03, 0x13,
+ 0xce, 0x04, 0x09, 0x13, 0xe5, 0x24, 0x2a, 0x32, 0x10, 0xb8, 0xeb, 0xff, 0xe2,
+ 0x24, 0x14, 0xfb, 0xa5, 0xfe, 0x26, 0xc7, 0x9c, 0xe2, 0x6e, 0xd6, 0xe5, 0xd1,
+ 0x1d, 0xee, 0xd1, 0xf2, 0x02, 0xa7, 0x81, 0x7b, 0xe1, 0x13, 0x20, 0x1d, 0xc7,
+ 0x2f, 0xcf, 0x9a, 0x4f, 0xb3, 0x53, 0xc7, 0xcb, 0x05, 0x77, 0xc2, 0xa3, 0x67,
+ 0x98, 0x32, 0xc4, 0xe4, 0x19, 0xf6, 0x46, 0x39, 0x8d, 0xc1, 0x26, 0x37, 0xc2,
+ 0xf2, 0x53, 0xc6, 0x1f, 0x74, 0xf2, 0x0f, 0xc0, 0x5e, 0xf5, 0xcd, 0x49, 0x01,
+ 0x13, 0xfa, 0xd3, 0xe4, 0xce, 0xd8, 0xea, 0x1e, 0x21, 0xd2, 0xf9, 0x07, 0xaa,
+ 0x16, 0x2d, 0x25, 0xe7, 0x47, 0x0e, 0x0f, 0x24, 0xb3, 0xd6, 0xc4, 0x4b, 0x61,
+ 0xc4, 0xf4, 0xda, 0x06, 0xca, 0xc8, 0x15, 0x3d, 0x40, 0xfd, 0x1b, 0xdc, 0x9b,
+ 0x20, 0x07, 0xfc, 0x37, 0xc9, 0xc0, 0xa2, 0x95, 0xad, 0x41, 0x36, 0xd9, 0xac,
+ 0xfe, 0x13, 0xe5, 0x45, 0x2b, 0x1e, 0xec, 0x4c, 0x33, 0xdd, 0xf3, 0xd7, 0x1f,
+ 0xde, 0xf2, 0x2e, 0xf1, 0x12, 0xc3, 0xdf, 0xcf, 0x01, 0xda, 0xbd, 0xc5, 0x1a,
+ 0x29, 0x1b, 0x33, 0xec, 0xc3, 0xd7, 0xbe, 0x52, 0xe3, 0x25, 0x35, 0x16, 0x0a,
+ 0x3f, 0xae, 0x31, 0xd1, 0xef, 0xc5, 0xb7, 0xfa, 0x2e, 0x15, 0xbf, 0x3c, 0xb7,
+ 0x10, 0xba, 0xdc, 0x4a, 0x52, 0x68, 0x15, 0x50, 0x53, 0x2d, 0x95, 0x04, 0x0a,
+ 0x1f, 0x67, 0x2d, 0xbd, 0x28, 0xc6, 0xe9, 0x1d, 0xf1, 0xf8, 0xf2, 0xfd, 0x2c,
+ 0xec, 0xbf, 0x2d, 0xd4, 0xde, 0xdb, 0x5f, 0xdf, 0xff, 0xea, 0x15, 0xe6, 0xd6,
+ 0x15, 0x07, 0xf3, 0xed, 0xf1, 0xe4, 0xf0, 0x37, 0xd7, 0x90, 0xb8, 0xd3, 0x4a,
+ 0xd6, 0x14, 0x3b, 0xea, 0xf9, 0x32, 0x07, 0xe0, 0x15, 0x10, 0x2a, 0x16, 0xbb,
+ 0x10, 0xc8, 0x08, 0xca, 0x11, 0xfb, 0xb2, 0x17, 0xf1, 0x13, 0x18, 0xfe, 0xc9,
+ 0xe5, 0xa5, 0x2b, 0x05, 0x07, 0xef, 0x07, 0x13, 0xcd, 0x4e, 0xdc, 0x32, 0xef,
+ 0x1f, 0x24, 0x0d, 0x37, 0xfc, 0xf2, 0xbe, 0xea, 0xfa, 0x27, 0xa7, 0xd4, 0xe9,
+ 0xc8, 0x01, 0x0c, 0xf0, 0xc9, 0xeb, 0xcf, 0x51, 0x26, 0xd9, 0x0f, 0xfc, 0xcf,
+ 0xf2, 0x16, 0x0a, 0x0c, 0x1a, 0xe9, 0xef, 0x48, 0xf0, 0x56, 0xf0, 0xd8, 0xb2,
+ 0xfa, 0xa6, 0x2c, 0xb9, 0xb1, 0x15, 0x00, 0xd3, 0xf7, 0xf8, 0x27, 0xe3, 0xfd,
+ 0x1d, 0xff, 0xb6, 0x40, 0xef, 0x2a, 0xca, 0xdd, 0x02, 0x98, 0x12, 0x34, 0x1a,
+ 0x30, 0xcb, 0xf9, 0x3a, 0xd8, 0x30, 0xfb, 0x97, 0x2d, 0xb0, 0x1a, 0xa4, 0xc1,
+ 0xcc, 0x0c, 0xf0, 0x1b, 0x3e, 0xf1, 0x05, 0xff, 0xdb, 0x11, 0xac, 0xcd, 0xad,
+ 0x05, 0x0c, 0x0b, 0xf5, 0x12, 0x15, 0xf9, 0x32, 0xf0, 0xbc, 0xa9, 0x32, 0x0d,
+ 0xe9, 0xfc, 0xcc, 0xeb, 0x36, 0x7a, 0xf6, 0xc4, 0xff, 0xff, 0x24, 0xb2, 0xcc,
+ 0x47, 0xd5, 0x04, 0xe1, 0x7f, 0x21, 0xea, 0x16, 0xe2, 0x3e, 0x22, 0xcb, 0xf4,
+ 0xc9, 0x32, 0x36, 0xf4, 0xe8, 0x54, 0x34, 0x22, 0x3f, 0x26, 0xe2, 0xc4, 0xf8,
+ 0xcd, 0x29, 0xdc, 0x0f, 0xc8, 0xec, 0xc5, 0x29, 0x66, 0xe1, 0xf5, 0x54, 0xd0,
+ 0x00, 0x2a, 0xe2, 0x99, 0xc6, 0x11, 0xf8, 0x28, 0xf5, 0xdc, 0x2f, 0x06, 0x06,
+ 0x1c, 0x12, 0xd8, 0x3e, 0xba, 0xd9, 0x2f, 0x4c, 0xb6, 0x0d, 0x00, 0x25, 0x38,
+ 0x31, 0xe2, 0xdc, 0xd9, 0x3d, 0x65, 0x00, 0x40, 0x2f, 0xd2, 0x5d, 0xb4, 0xd7,
+ 0x45, 0x2b, 0x51, 0x39, 0x03, 0xf6, 0x2a, 0x06, 0x98, 0x07, 0xf5, 0x0f, 0xf5,
+ 0x69, 0x31, 0x2a, 0x06, 0x01, 0x38, 0xc3, 0xe0, 0xf9, 0x07, 0xfa, 0xd7, 0x15,
+ 0x10, 0x20, 0xf2, 0xf0, 0xc8, 0x02, 0xf2, 0x59, 0xd7, 0xcb, 0x10, 0xf9, 0x2a,
+ 0x1a, 0x09, 0xfc, 0xce, 0x2c, 0xe9, 0xc3, 0xd4, 0xe0, 0xb6, 0x02, 0xe4, 0xdb,
+ 0x29, 0xff, 0xc0, 0x3e, 0xc2, 0xfd, 0xf4, 0xeb, 0xfa, 0xf9, 0x11, 0x3b, 0x06,
+ 0xb6, 0x2c, 0x1d, 0xa9, 0x0c, 0xe0, 0x25, 0x00, 0xf0, 0xef, 0x29, 0xdd, 0xe1,
+ 0xdc, 0x17, 0xda, 0xf9, 0xe9, 0x3d, 0xff, 0x0a, 0xbe, 0xe4, 0x1e, 0x03, 0xd8,
+ 0x3e, 0x21, 0xb8, 0x01, 0x41, 0x0c, 0xb8, 0xe7, 0x42, 0x82, 0x28, 0x2a, 0xd4,
+ 0xe4, 0xee, 0xe1, 0xd4, 0x3e, 0xc5, 0xd5, 0xca, 0x41, 0x34, 0xdb, 0x20, 0x05,
+ 0x1b, 0x3b, 0x20, 0xd4, 0x1d, 0xa4, 0xe4, 0x00, 0xac, 0x67, 0xc5, 0xe4, 0x35,
+ 0x36, 0x04, 0x37, 0x13, 0xf0, 0xcc, 0xbb, 0xd5, 0xe2, 0x42, 0xac, 0x16, 0xfd,
+ 0xca, 0xfe, 0xc8, 0x42, 0x38, 0x29, 0x3a, 0xb5, 0xbc, 0xd6, 0x9a, 0x34, 0x08,
+ 0xd7, 0x9a, 0x36, 0x2e, 0x0e, 0x33, 0xb8, 0xfc, 0xda, 0x94, 0x06, 0xb7, 0xaa,
+ 0x33, 0xf2, 0xec, 0x9d, 0x10, 0xb7, 0x29, 0xc4, 0x73, 0x26, 0x4c, 0x09, 0x79,
+ 0x01, 0xfd, 0x34, 0xe3, 0xdd, 0xe5, 0x9f, 0xd2, 0x1d, 0x25, 0xa3, 0xfe, 0xf7,
+ 0xf2, 0x16, 0xf4, 0x33, 0x23, 0xf3, 0xca, 0x0d, 0x20, 0xe5, 0x37, 0xf2, 0xe6,
+ 0x38, 0x39, 0xf4, 0xf7, 0xf2, 0x53, 0xfe, 0xd5, 0xe9, 0x33, 0x17, 0xdb, 0x06,
+ 0xf4, 0xe9, 0xec, 0xca, 0x83, 0xb4, 0xf8, 0x15, 0x4f, 0x7a, 0xea, 0x0f, 0xfc,
+ 0xe5, 0x95, 0x36, 0x37, 0xe1, 0xf4, 0x51, 0xde, 0x0d, 0x04, 0x27, 0x3e, 0x32,
+ 0x10, 0xf2, 0xf1, 0xa1, 0xa8, 0x1f, 0xe4, 0x15, 0xee, 0xd7, 0x2b, 0xd0, 0xdd,
+ 0xd9, 0xdc, 0x08, 0xe6, 0xc2, 0xe8, 0xae, 0xe9, 0xd0, 0x04, 0xc3, 0xeb, 0x32,
+ 0x8f, 0x02, 0xa4, 0x2f, 0x97, 0xed, 0xd0, 0x00, 0xc1, 0xdd, 0x00, 0xf5, 0x1e,
+ 0x34, 0xed, 0x22, 0xfd, 0x0e, 0xe2, 0x48, 0x81, 0x15, 0x42, 0x3e, 0xe0, 0x59,
+ 0xe6, 0xf7, 0x5f, 0xe5, 0xcf, 0xaf, 0x3f, 0xfb, 0xfc, 0x17, 0x34, 0x1d, 0xe4,
+ 0x06, 0xb6, 0xe9, 0x20, 0xeb, 0xbc, 0xe5, 0xdb, 0xbd, 0xc4, 0x3f, 0xce, 0xe6,
+ 0x88, 0x20, 0xd3, 0xf3, 0xcf, 0x1c, 0xba, 0xe9, 0x13, 0xd3, 0xc3, 0xfd, 0xf1,
+ 0xdd, 0x53, 0xe6, 0x43, 0xf7, 0xaa, 0xdd, 0xde, 0xf9, 0xfb, 0xe6, 0xd9, 0xc3,
+ 0x16, 0xb1, 0xdd, 0xe3, 0x11, 0x36, 0xf4, 0xf9, 0xb7, 0xbd, 0xaa, 0x2f, 0xa0,
+ 0xd8, 0xfc, 0x1e, 0xb7, 0x47, 0x00, 0x32, 0x10, 0x16, 0xf4, 0x6e, 0x16, 0xce,
+ 0xde, 0x00, 0xea, 0xdf, 0x25, 0x32, 0xfa, 0x2e, 0x57, 0x2b, 0x0d, 0xb2, 0xde,
+ 0xf6, 0xd6, 0x4b, 0xe4, 0x22, 0xe5, 0x11, 0xd8, 0xdd, 0xcc, 0xd3, 0xc2, 0xc7,
+ 0x30, 0xc8, 0x22, 0xac, 0xe5, 0xd5, 0xf8, 0xf7, 0xf9, 0x24, 0xab, 0x24, 0xdc,
+ 0x15, 0xf2, 0xb3, 0x02, 0x19, 0xfa, 0x31, 0xc5, 0xd1, 0xf3, 0xea, 0xd6, 0xca,
+ 0x05, 0xe8, 0xdf, 0xe4, 0x09, 0x1a, 0xd4, 0xe4, 0x7f, 0x49, 0xb3, 0xdf, 0xaa,
+ 0xf2, 0x07, 0xdb, 0x16, 0x21, 0x21, 0x1e, 0xfb, 0xd9, 0xda, 0x0b, 0x15, 0xab,
+ 0x1d, 0xf7, 0x33, 0x37, 0xe3, 0x07, 0xd3, 0xe6, 0xb3, 0xf1, 0x19, 0xfe, 0xf0,
+ 0xd3, 0xba, 0xff, 0xe1, 0xfd, 0xcc, 0x26, 0xdd, 0x3c, 0x31, 0xef, 0xd8, 0xbe,
+ 0x36, 0xf3, 0xd5, 0xd5, 0xe8, 0xf5, 0x09, 0x28, 0x43, 0x1b, 0x10, 0xbd, 0x9a,
+ 0xdb, 0x2c, 0xdf, 0xc5, 0xe0, 0xc7, 0x1f, 0xda, 0x00, 0xd1, 0x0b, 0xba, 0xfd,
+ 0x0c, 0x2f, 0xc0, 0xf5, 0xf1, 0x09, 0xef, 0x06, 0x1c, 0xee, 0xfa, 0xf9, 0xf5,
+ 0xea, 0x9a, 0xec, 0x30, 0xf6, 0x0c, 0xbe, 0xe4, 0x06, 0xed, 0x62, 0xa9, 0xd2,
+ 0xc8, 0xf0, 0xfb, 0x4a, 0xf9, 0xee, 0x4d, 0xca, 0xd0, 0xdf, 0x04, 0xf5, 0x06,
+ 0x17, 0x3e, 0x69, 0x0b, 0x3d, 0x46, 0x9f, 0xef, 0x05, 0xb3, 0xe6, 0xc9, 0xaa,
+ 0x19, 0xd9, 0x1d, 0xc8, 0x0d, 0x0e, 0xd0, 0x56, 0x2a, 0xef, 0x3b, 0x6a, 0x45,
+ 0xad, 0x9b, 0x0d, 0xcb, 0x39, 0xd5, 0x2b, 0xf2, 0xe9, 0x20, 0xfc, 0x19, 0xd9,
+ 0xb7, 0xd6, 0xf0, 0xd4, 0x0a, 0xfc, 0x14, 0x11, 0xfe, 0xdb, 0x02, 0x0b, 0x11,
+ 0x01, 0xea, 0xa8, 0x15, 0xc9, 0x9f, 0xf0, 0xdf, 0xdf, 0xdb, 0x06, 0xee, 0xda,
+ 0xe1, 0xf9, 0xc2, 0x13, 0xff, 0x1b, 0x27, 0xe8, 0xf7, 0xe2, 0xf2, 0xc0, 0x13,
+ 0xb3, 0xf7, 0xd5, 0xdb, 0x41, 0xf4, 0xd6, 0xe5, 0xf9, 0xa2, 0xf3, 0x1a, 0x61,
+ 0xd6, 0x18, 0xf2, 0xf7, 0x05, 0xec, 0xdf, 0xe1, 0x44, 0xe6, 0x1d, 0x2e, 0xdf,
+ 0x1a, 0x42, 0xf3, 0xe0, 0x11, 0x02, 0xf0, 0xec, 0x55, 0xef, 0x01, 0xe9, 0xcd,
+ 0xfc, 0x0a, 0x28, 0x32, 0x38, 0x28, 0x4e, 0x57, 0x13, 0xd5, 0xf2, 0xd2, 0xda,
+ 0x00, 0xe6, 0x28, 0x03, 0xf3, 0xbd, 0x4c, 0x54, 0xd6, 0x01, 0xf9, 0x2e, 0x54,
+ 0xde, 0x25, 0x05, 0xe3, 0xbc, 0x0e, 0xa7, 0xa6, 0xd2, 0xf2, 0xc8, 0x0a, 0xcc,
+ 0xf1, 0xd8, 0x0f, 0x07, 0xf2, 0xf6, 0x4b, 0xf5, 0xb6, 0x08, 0xd4, 0xf9, 0x23,
+ 0xd4, 0xc6, 0x11, 0xd3, 0x78, 0x06, 0x3a, 0x03, 0xfc, 0x25, 0xee, 0x2b, 0xd0,
+ 0x27, 0x37, 0x04, 0x4c, 0xc7, 0xe2, 0xe9, 0xc3, 0xd3, 0xd4, 0xf0, 0xed, 0xe4,
+ 0x12, 0x45, 0xdb, 0x01, 0xf1, 0xf7, 0xd3, 0x43, 0x04, 0x3c, 0x1c, 0xfd, 0x40,
+ 0x10, 0x84, 0x4e, 0xe4, 0x1b, 0x03, 0x15, 0xae, 0xde, 0x05, 0xfb, 0x00, 0x26,
+ 0xd5, 0xc3, 0x20, 0x32, 0x21, 0xf1, 0xd9, 0xb2, 0x23, 0xf8, 0xf8, 0xf7, 0xe7,
+ 0x2b, 0xf4, 0xc8, 0xfe, 0x78, 0x22, 0x72, 0xdc, 0xf0, 0x2d, 0x1d, 0xc1, 0x22,
+ 0x10, 0x60, 0x45, 0x45, 0xc1, 0x60, 0xcc, 0x81, 0x16, 0xd3, 0xc6, 0xcd, 0xfe,
+ 0xc7, 0xcd, 0x07, 0xe8, 0xbf, 0xfb, 0xfb, 0xd5, 0x0b, 0x1f, 0xeb, 0x1c, 0x24,
+ 0xef, 0x19, 0xde, 0xc6, 0xbf, 0x00, 0xc9, 0x08, 0x11, 0xed, 0xf0, 0xf8, 0xf3,
+ 0xd3, 0x2f, 0xe9, 0xe8, 0xc0, 0xdf, 0xf4, 0x30, 0xe6, 0x1d, 0xff, 0xe6, 0xed,
+ 0x2d, 0xb2, 0xb9, 0xfd, 0xd0, 0x95, 0x2b, 0xd2, 0x38, 0x1f, 0xc2, 0x0f, 0x14,
+ 0xb8, 0x09, 0x07, 0xff, 0x02, 0xe7, 0xe2, 0xcc, 0x29, 0x12, 0xf1, 0x09, 0x01,
+ 0xc4, 0x01, 0xb7, 0xd6, 0xc5, 0xdf, 0xd8, 0xff, 0x12, 0x14, 0x1f, 0xb9, 0x1b,
+ 0x1b, 0x53, 0xc4, 0x02, 0xee, 0xd9, 0xcf, 0xeb, 0xc2, 0xd9, 0x0a, 0x35, 0x09,
+ 0xf2, 0x0e, 0x04, 0x65, 0xee, 0xad, 0x10, 0x05, 0x2c, 0x14, 0x19, 0xf3, 0x12,
+ 0xb7, 0x1e, 0x24, 0xe7, 0xc9, 0x24, 0xec, 0xf7, 0x24, 0x07, 0x2d, 0xce, 0x3c,
+ 0xf0, 0xef, 0x1b, 0xe6, 0x05, 0xb0, 0xf7, 0xe9, 0x13, 0xdb, 0xea, 0xdb, 0xff,
+ 0x06, 0xd8, 0x25, 0x2c, 0xc5, 0x03, 0xe0, 0xec, 0xef, 0x02, 0x04, 0xdd, 0xd7,
+ 0x02, 0xd3, 0xed, 0x0b, 0x1e, 0x01, 0xe7, 0xdf, 0xcb, 0xf9, 0xba, 0x02, 0xde,
+ 0x3b, 0x14, 0xee, 0x28, 0x2f, 0xf6, 0x1b, 0x0b, 0x20, 0x30, 0xfe, 0xf8, 0xed,
+ 0x1b, 0x04, 0x02, 0xef, 0xc3, 0xf5, 0x06, 0xe3, 0xe8, 0xe8, 0x24, 0x19, 0x1a,
+ 0xc7, 0x0c, 0x83, 0xe1, 0x7f, 0xe3, 0xc4, 0xf0, 0x00, 0xfc, 0xff, 0xfa, 0x0a,
+ 0xf9, 0xf7, 0x12, 0x09, 0x2f, 0xf1, 0xef, 0x6b, 0xd0, 0x1c, 0x3a, 0x02, 0xc1,
+ 0xde, 0x05, 0x23, 0xe8, 0xf2, 0xc9, 0xf2, 0xf0, 0x30, 0xf8, 0x02, 0xae, 0xac,
+ 0xcc, 0xc9, 0x20, 0x02, 0x14, 0xec, 0xd9, 0xb3, 0xf7, 0xcb, 0x03, 0x09, 0xd3,
+ 0x13, 0x93, 0xe0, 0xa5, 0xf1, 0xe2, 0xe1, 0xe1, 0x02, 0xd0, 0xeb, 0x05, 0x1e,
+ 0xdb, 0xc0, 0xf7, 0x3f, 0x2e, 0xbc, 0xfb, 0x33, 0xf7, 0x1f, 0x48, 0x11, 0x18,
+ 0x2a, 0x31, 0x3a, 0x01, 0x2f, 0xd6, 0xce, 0x05, 0xfd, 0xc2, 0x40, 0xf5, 0xef,
+ 0x06, 0x9d, 0x1a, 0xe2, 0xae, 0xe4, 0x0a, 0xb7, 0xd3, 0x07, 0x33, 0x01, 0x16,
+ 0x0d, 0xeb, 0xe7, 0xfc, 0x09, 0xda, 0xd9, 0xc5, 0x01, 0xfa, 0xce, 0xf3, 0xe2,
+ 0xd5, 0xe7, 0xc1, 0xdc, 0x1f, 0x1d, 0xc3, 0xfa, 0xc0, 0xe8, 0xf4, 0xe3, 0xba,
+ 0xe5, 0xe5, 0x06, 0x06, 0x3b, 0xff, 0x18, 0xac, 0xdc, 0x25, 0xd5, 0xe3, 0x32,
+ 0xc3, 0xb8, 0x13, 0x28, 0xed, 0x1f, 0xc9, 0xf2, 0xe7, 0x0a, 0xfa, 0xbc, 0x66,
+ 0xfa, 0xf6, 0xeb, 0xfa, 0xca, 0xe0, 0x17, 0x1d, 0xf7, 0x11, 0xfc, 0xf6, 0xd4,
+ 0x08, 0xde, 0xe6, 0x38, 0x0d, 0x25, 0xa9, 0xd9, 0xe0, 0x2f, 0x0b, 0xd0, 0x08,
+ 0xd6, 0xfa, 0x1f, 0x3e, 0xcf, 0xed, 0xfd, 0xaf, 0xb7, 0xc0, 0xf6, 0xf3, 0x0f,
+ 0x44, 0x8b, 0xd8, 0xf3, 0xc8, 0xf4, 0x1e, 0xf2, 0xe3, 0x97, 0xac, 0x0c, 0x15,
+ 0xee, 0x16, 0xed, 0xef, 0xe5, 0x15, 0xdb, 0x4c, 0xad, 0xdc, 0x20, 0xbe, 0xcb,
+ 0xf2, 0xb7, 0x00, 0x1f, 0xd7, 0xc2, 0x0e, 0xb1, 0x2a, 0x24, 0xdb, 0x2f, 0xd6,
+ 0x09, 0xe7, 0xe5, 0xf5, 0x36, 0x2d, 0xc0, 0xea, 0x38, 0x28, 0x15, 0x0a, 0xb5,
+ 0x26, 0x05, 0x05, 0x8b, 0xef, 0xf8, 0x1d, 0xfb, 0xdb, 0xef, 0x08, 0xec, 0x29,
+ 0xe5, 0x0c, 0x56, 0xbf, 0xf7, 0xfd, 0x08, 0xf6, 0x50, 0xed, 0x00, 0x0b, 0xc9,
+ 0xe0, 0x0f, 0xf2, 0xdc, 0xef, 0x1c, 0xb0, 0xe6, 0xc6, 0x00, 0x1e, 0xbf, 0x44,
+ 0xe4, 0xed, 0x07, 0x09, 0xfa, 0x01, 0xfd, 0xf6, 0x25, 0xe1, 0xdf, 0x72, 0xbb,
+ 0xfb, 0xb5, 0xe9, 0xb8, 0xbb, 0xb6, 0x7f, 0xdd, 0xe6, 0x0a, 0xda, 0x72, 0xd2,
+ 0x18, 0xc4, 0xc2, 0x03, 0x12, 0x09, 0xee, 0x16, 0x8b, 0x15, 0x11, 0x16, 0xfe,
+ 0xe7, 0xef, 0x26, 0x32, 0xdd, 0x08, 0xf9, 0x08, 0x2a, 0xb3, 0xd9, 0x5f, 0xe4,
+ 0x0f, 0xe6, 0xbc, 0x41, 0x1b, 0x02, 0xd9, 0xf0, 0x00, 0x45, 0xed, 0xe6, 0x16,
+ 0xc5, 0x12, 0x20, 0xf9, 0x08, 0x19, 0x2b, 0xd1, 0x02, 0xda, 0xf6, 0x1a, 0xff,
+ 0x08, 0x03, 0xdb, 0xed, 0xf9, 0xc9, 0x1b, 0xe3, 0x13, 0x17, 0x13, 0x3b, 0x2d,
+ 0x1d, 0xe5, 0xfb, 0xfd, 0xef, 0x28, 0x06, 0xc8, 0xc2, 0xd3, 0xcc, 0xaa, 0xd6,
+ 0xf8, 0xf8, 0x37, 0xf0, 0xf5, 0xd9, 0xf4, 0xf7, 0x10, 0xc7, 0xd4, 0xef, 0x02,
+ 0xe7, 0xf6, 0xda, 0xf8, 0xeb, 0x21, 0xc3, 0x37, 0x02, 0xbf, 0x03, 0xc7, 0xd9,
+ 0xd7, 0x0a, 0xfd, 0x30, 0x2b, 0x0d, 0x28, 0x18, 0x03, 0xd0, 0xcb, 0xbb, 0x36,
+ 0xe4, 0xed, 0xba, 0x2d, 0xf8, 0x14, 0x13, 0xaa, 0xbf, 0x22, 0xe8, 0xea, 0x11,
+ 0x12, 0xe6, 0xcc, 0x0b, 0xef, 0x9b, 0x15, 0xbd, 0xfa, 0xd5, 0xf2, 0xef, 0xd9,
+ 0xef, 0x1a, 0xec, 0x31, 0xc2, 0xd0, 0xd8, 0xf1, 0xcf, 0x2f, 0xdf, 0xf8, 0xdc,
+ 0xbc, 0xb8, 0xde, 0xe2, 0xfa, 0x3c, 0xf7, 0xc5, 0xcd, 0xfc, 0x0b, 0x14, 0x1e,
+ 0xff, 0x01, 0xfe, 0xfc, 0xe0, 0xdf, 0x07, 0x0a, 0xda, 0xf4, 0xea, 0x0e, 0xfd,
+ 0x3e, 0xf0, 0xce, 0x9d, 0xe5, 0xdf, 0x23, 0xc7, 0xf5, 0xec, 0x0e, 0xec, 0xea,
+ 0x19, 0x31, 0xb2, 0x2d, 0xfe, 0xd6, 0xe9, 0x0a, 0x00, 0xe5, 0x7f, 0x15, 0xc3,
+ 0xd7, 0xc7, 0xb9, 0x03, 0xf5, 0xd6, 0x30, 0xfe, 0xd1, 0x07, 0xb8, 0x4e, 0xc6,
+ 0xf3, 0xfe, 0xd6, 0xf8, 0x0f, 0x2f, 0xf2, 0xf0, 0x2b, 0x07, 0xe5, 0xe1, 0xd5,
+ 0xf7, 0xf0, 0x1b, 0xd7, 0x21, 0x42, 0xc0, 0x40, 0x13, 0xb3, 0xd1, 0xd9, 0x43,
+ 0x0e, 0x04, 0xfd, 0x32, 0xd6, 0x18, 0x09, 0x11, 0xda, 0x21, 0x94, 0xe3, 0xf5,
+ 0x16, 0xb2, 0xe0, 0xf9, 0x93, 0xf9, 0xcd, 0xfb, 0x0d, 0xc9, 0xef, 0xfa, 0x04,
+ 0x2c, 0x06, 0x07, 0xdd, 0x42, 0xcc, 0x15, 0x11, 0xca, 0x18, 0x2e, 0xf2, 0x4d,
+ 0x19, 0x1b, 0x44, 0x33, 0x30, 0xf8, 0x03, 0xd9, 0x2f, 0xdb, 0x37, 0xdb, 0x06,
+ 0x16, 0x0b, 0xcc, 0x09, 0xba, 0xd4, 0x6e, 0xee, 0xe8, 0x05, 0xcc, 0x21, 0xe8,
+ 0xec, 0xd8, 0xc5, 0xf6, 0xb0, 0x18, 0xb1, 0x24, 0xfa, 0x22, 0xc4, 0x02, 0x3a,
+ 0x2a, 0x26, 0xa3, 0xf8, 0x26, 0xb7, 0x07, 0xee, 0x03, 0x0d, 0x10, 0xe2, 0x38,
+ 0x02, 0xf9, 0xdf, 0x2e, 0x3c, 0xae, 0x37, 0x19, 0xd8, 0x00, 0x20, 0xd3, 0xdb,
+ 0xe0, 0x38, 0x04, 0x4b, 0x01, 0x3a, 0x60, 0xe7, 0xe2, 0xd7, 0xc4, 0xf5, 0xb8,
+ 0x35, 0x25, 0xc9, 0x57, 0xf3, 0x3b, 0x3b, 0xd4, 0x23, 0xd3, 0x0d, 0x09, 0x00,
+ 0xec, 0x00, 0x63, 0xec, 0x2e, 0x21, 0x1e, 0x81, 0xed, 0xd2, 0xc5, 0x12, 0xf9,
+ 0x2f, 0xf6, 0x04, 0xd6, 0xf5, 0x29, 0x0b, 0xcc, 0x09, 0x90, 0x32, 0xc8, 0x27,
+ 0xf6, 0xd7, 0xe6, 0xe2, 0xee, 0x1c, 0x2f, 0x0e, 0xfe, 0x03, 0xbf, 0xbb, 0x1d,
+ 0x27, 0x6c, 0x25, 0x10, 0x27, 0xee, 0x59, 0xc5, 0xd1, 0xd1, 0x2a, 0x50, 0xd0,
+ 0xe6, 0xd9, 0x33, 0xd1, 0xed, 0x1c, 0xe2, 0xea, 0x57, 0x14, 0xe3, 0xe8, 0x08,
+ 0x00, 0x52, 0xe8, 0x06, 0xdf, 0xb6, 0xee, 0xe0, 0x3d, 0x04, 0xdc, 0xf2, 0x0a,
+ 0x0a, 0xd8, 0xb9, 0xfd, 0x9a, 0xe3, 0x0a, 0x19, 0x0f, 0x1b, 0xf5, 0xd2, 0xc6,
+ 0x13, 0xff, 0xee, 0xb7, 0x25, 0x0e, 0x46, 0xfc, 0xe4, 0xe5, 0xdc, 0xf2, 0xd2,
+ 0x51, 0x2a, 0xf8, 0xf3, 0xc8, 0xc2, 0xe8, 0xe4, 0x53, 0x43, 0x15, 0x30, 0xd6,
+ 0x43, 0xf7, 0xd4, 0x24, 0xfa, 0x18, 0xe1, 0x23, 0xc3, 0xb5, 0x2e, 0x65, 0x4c,
+ 0x2a, 0x01, 0xf1, 0xce, 0xd0, 0x92, 0xab, 0xbf, 0xc5, 0x30, 0xe2, 0xa8, 0xe7,
+ 0x0d, 0x26, 0xba, 0x09, 0x0a, 0x4c, 0x03, 0xf9, 0xab, 0x1c, 0x05, 0x33, 0x0f,
+ 0x90, 0x32, 0x0d, 0xe1, 0x10, 0xa1, 0x47, 0xbf, 0x0b, 0xc5, 0xe0, 0x22, 0xd2,
+ 0xe7, 0xd3, 0xf1, 0xdc, 0x02, 0x25, 0x13, 0xc9, 0xf5, 0x89, 0xb2, 0x87, 0x06,
+ 0xce, 0xed, 0xa9, 0xd8, 0x45, 0x21, 0x20, 0xd2, 0xec, 0xfe, 0xcf, 0x2d, 0xa7,
+ 0xfb, 0x1a, 0x25, 0xb8, 0xe0, 0x08, 0xbb, 0xed, 0x0d, 0x1d, 0xf4, 0x91, 0xb7,
+ 0x55, 0xe8, 0xe6, 0x1a, 0xf9, 0x36, 0xb0, 0xba, 0xe0, 0x3b, 0xd2, 0x3b, 0xfd,
+ 0x03, 0xce, 0x51, 0x29, 0xf5, 0xd7, 0x30, 0x32, 0x19, 0xa2, 0xee, 0xf7, 0x5e,
+ 0x39, 0x25, 0xda, 0xd7, 0x26, 0x1e, 0xf0, 0x0b, 0xf5, 0xdb, 0xd9, 0x16, 0xbf,
+ 0x3d, 0xf9, 0xc4, 0xaa, 0xdc, 0x1f, 0x35, 0x06, 0x09, 0xca, 0xad, 0xf1, 0xdf,
+ 0xd6, 0x27, 0x13, 0xa2, 0xe3, 0x0c, 0xe1, 0x3c, 0x1f, 0xd3, 0x27, 0xcb, 0xf7,
+ 0x36, 0xef, 0x02, 0xdb, 0x0d, 0x07, 0x1b, 0xcb, 0xf1, 0xd6, 0x0c, 0x34, 0xe3,
+ 0xd4, 0x02, 0xf6, 0x21, 0xcd, 0xcb, 0xfd, 0xc5, 0x04, 0xda, 0x13, 0xa0, 0xa9,
+ 0x13, 0xca, 0x1c, 0x23, 0x23, 0x27, 0xe5, 0x5a, 0xd1, 0xef, 0x43, 0x04, 0xd3,
+ 0xe6, 0x45, 0xf3, 0x44, 0xbb, 0x00, 0xf1, 0x39, 0xcc, 0xba, 0xf8, 0x1d, 0x06,
+ 0x30, 0xf6, 0xd0, 0xb2, 0x0c, 0xdc, 0xdf, 0x1d, 0xd0, 0x45, 0xb2, 0xde, 0xe0,
+ 0x00, 0xd5, 0x7f, 0xfe, 0xe5, 0x1e, 0x58, 0x2e, 0x01, 0xf1, 0x1d, 0xd5, 0xeb,
+ 0xc6, 0x09, 0x0f, 0x14, 0xd5, 0x12, 0xe8, 0xb8, 0xda, 0x1b, 0xd5, 0x1f, 0xe7,
+ 0x39, 0xda, 0xd3, 0x18, 0xf6, 0xfb, 0x1f, 0x11, 0xfe, 0xff, 0x67, 0xdc, 0xe0,
+ 0x41, 0xf4, 0xe8, 0xe8, 0xf2, 0xed, 0x27, 0xdc, 0xa9, 0xf1, 0xc3, 0x9a, 0xb5,
+ 0xd7, 0xe3, 0xf5, 0xfb, 0x28, 0xb9, 0xf5, 0xd7, 0x12, 0x25, 0xd7, 0xe5, 0xf6,
+ 0x4c, 0x29, 0xfd, 0xdc, 0xc3, 0xe6, 0x3c, 0x12, 0x09, 0xe9, 0xfe, 0xf8, 0x05,
+ 0x4f, 0xbb, 0x25, 0x02, 0xd8, 0xb3, 0xd6, 0xbe, 0x1e, 0xd6, 0xdb, 0xf2, 0xe7,
+ 0x23, 0x04, 0x13, 0xe7, 0x09, 0x3a, 0xfa, 0xa8, 0x1e, 0xf9, 0x0b, 0x2e, 0xdb,
+ 0xc1, 0xe0, 0x06, 0xb5, 0xc3, 0x01, 0xf7, 0x34, 0xe6, 0xb9, 0x01, 0xf1, 0x02,
+ 0xe2, 0x13, 0xc7, 0x05, 0x08, 0x02, 0x4c, 0x54, 0x1d, 0xf6, 0x04, 0x25, 0x29,
+ 0xb1, 0xe6, 0xe9, 0xd9, 0x06, 0x26, 0xe9, 0xed, 0xfc, 0xdf, 0x2a, 0xb2, 0x0a,
+ 0xc9, 0x1c, 0x2a, 0xf9, 0x17, 0xf3, 0x08, 0xe9, 0xff, 0xe8, 0xba, 0x17, 0x08,
+ 0x09, 0xea, 0x1f, 0x07, 0xf3, 0x13, 0xea, 0xe4, 0xd7, 0x29, 0xf3, 0xe8, 0xce,
+ 0xf6, 0x16, 0xda, 0xfb, 0x07, 0xb7, 0x08, 0xd3, 0xe4, 0x36, 0xc7, 0xc4, 0x34,
+ 0x23, 0x36, 0x00, 0xe8, 0xf4, 0xbd, 0xfa, 0xf7, 0x98, 0xdd, 0xe9, 0xf9, 0x2b,
+ 0xb2, 0x37, 0xfe, 0xcd, 0x0b, 0x0f, 0xe8, 0x03, 0xb2, 0xdb, 0x15, 0xb7, 0xf7,
+ 0xc6, 0xeb, 0xf9, 0xc5, 0xf3, 0xe2, 0x23, 0x35, 0xb9, 0xb6, 0xcc, 0xfd, 0xb0,
+ 0x18, 0xb9, 0x1e, 0xf2, 0xf2, 0xeb, 0xe8, 0x33, 0xde, 0x02, 0xe1, 0x1e, 0xce,
+ 0x30, 0xfb, 0x7f, 0xec, 0xfd, 0xb4, 0x0b, 0x15, 0x1a, 0x59, 0xe6, 0xe1, 0xe3,
+ 0x25, 0x01, 0x07, 0x3c, 0x15, 0xae, 0xf5, 0xe9, 0x35, 0x19, 0xe8, 0xfe, 0x06,
+ 0x0f, 0x27, 0x0e, 0xdc, 0x17, 0x1c, 0x37, 0xaa, 0x3c, 0xe7, 0x37, 0x07, 0x18,
+ 0xc3, 0xc8, 0xf1, 0x53, 0xcc, 0xdc, 0xb3, 0xe0, 0xe2, 0x2d, 0xe9, 0xe4, 0xdd,
+ 0xf7, 0x13, 0x27, 0xc9, 0x52, 0x03, 0x0a, 0x9f, 0x06, 0x2e, 0x40, 0xf0, 0x03,
+ 0x22, 0x46, 0xf3, 0x0d, 0xb4, 0xfb, 0xf7, 0xd1, 0xbd, 0xd8, 0x11, 0xf8, 0xc5,
+ 0xcd, 0xfa, 0xf8, 0xc6, 0xbe, 0xb5, 0xc9, 0x27, 0xbb, 0xb6, 0xfe, 0x0b, 0x95,
+ 0xd1, 0xbf, 0xb2, 0xc4, 0x0b, 0xc8, 0x3d, 0x15, 0x2d, 0x04, 0x2e, 0xe9, 0xfd,
+ 0xd3, 0xc1, 0xfa, 0xe6, 0x17, 0x03, 0xc8, 0xc0, 0xeb, 0x14, 0xb3, 0x13, 0x19,
+ 0xda, 0x1e, 0x09, 0xa8, 0xd0, 0xf3, 0xc9, 0x23, 0xbf, 0x3f, 0xf2, 0xac, 0x26,
+ 0xfc, 0x17, 0xbd, 0xf9, 0xf8, 0x32, 0xe6, 0x4b, 0xd9, 0xc4, 0x58, 0xff, 0xe5,
+ 0xe0, 0xec, 0x19, 0xe7, 0xff, 0xf1, 0x0f, 0x99, 0xe8, 0x1c, 0xe9, 0x1c, 0x4d,
+ 0x27, 0xe7, 0xbd, 0xdb, 0x0b, 0x49, 0x3b, 0xf6, 0x11, 0x1a, 0x20, 0xe2, 0x0a,
+ 0xc8, 0xc1, 0xcf, 0xe7, 0x0a, 0x20, 0xc9, 0x9e, 0xe3, 0xe3, 0x55, 0xcc, 0x00,
+ 0x15, 0xfb, 0x4d, 0xc4, 0x1c, 0xfe, 0x93, 0xaa, 0xe3, 0x0e, 0xce, 0xdc, 0x1a,
+ 0x57, 0x16, 0x2c, 0x15, 0x45, 0xd0, 0x17, 0x17, 0xe8, 0xe6, 0x4b, 0xc4, 0x36,
+ 0xf7, 0x51, 0x0a, 0x32, 0x07, 0x28, 0xcb, 0xba, 0xe2, 0xea, 0x09, 0x08, 0xe1,
+ 0x1d, 0x41, 0xb9, 0x14, 0x7b, 0xc1, 0xd4, 0x06, 0xfd, 0x07, 0x3c, 0x11, 0x4a,
+ 0xf1, 0xe2, 0x29, 0xf9, 0xf1, 0xb7, 0xe3, 0x1e, 0xf9, 0x03, 0xce, 0x18, 0x27,
+ 0xf9, 0xd9, 0x05, 0x07, 0x6c, 0xfc, 0xbe, 0x17, 0xcf, 0xfd, 0xf1, 0xd3, 0xf4,
+ 0xf7, 0xc9, 0xdf, 0xaa, 0x3d, 0xfb, 0x25, 0x04, 0x2b, 0xe5, 0xf9, 0x1e, 0xfe,
+ 0xfa, 0x53, 0xeb, 0xca, 0xfb, 0xf3, 0xfd, 0xc8, 0x2d, 0xb8, 0x16, 0x11, 0x56,
+ 0x0c, 0xe0, 0xfb, 0xd2, 0x26, 0x14, 0x33, 0x5d, 0x13, 0xfd, 0x35, 0x29, 0xaa,
+ 0x39, 0xed, 0x14, 0x27, 0xd3, 0xf1, 0x17, 0x11, 0x39, 0xeb, 0x1d, 0xdc, 0x37,
+ 0x0c, 0xe0, 0xeb, 0x04, 0x0a, 0xb2, 0x06, 0x25, 0x32, 0xfe, 0x24, 0xe2, 0xf3,
+ 0xd2, 0xeb, 0xf6, 0x01, 0x3a, 0xe2, 0xed, 0x5b, 0xbf, 0x0f, 0x2b, 0xde, 0x00,
+ 0x7f, 0x56, 0x0b, 0xc4, 0xcb, 0x1a, 0x21, 0x1f, 0xd8, 0xc0, 0x25, 0xde, 0xce,
+ 0x1e, 0xe0, 0xd0, 0x45, 0xf6, 0x1c, 0x14, 0x32, 0x1e, 0x3a, 0x2d, 0xcf, 0xdc,
+ 0xa6, 0xab, 0xb4, 0x3b, 0xe0, 0xef, 0xaf, 0x0e, 0xce, 0x0b, 0xc9, 0x28, 0x2b,
+ 0xc7, 0x0a, 0x2a, 0xde, 0xc4, 0xc7, 0xba, 0x81, 0x29, 0xf2, 0x19, 0xd9, 0xdf,
+ 0x36, 0xee, 0xb1, 0xf7, 0xbf, 0xc7, 0x01, 0xe8, 0x2a, 0x92, 0xf3, 0x10, 0xe8,
+ 0x0a, 0x0a, 0xea, 0xb5, 0xe5, 0xc9, 0x38, 0x34, 0xde, 0xe6, 0x12, 0xcb, 0xeb,
+ 0x14, 0xc9, 0x3d, 0xc6, 0xb6, 0xc0, 0xca, 0xd9, 0x4e, 0xc3, 0xb0, 0x41, 0xca,
+ 0x0c, 0xaa, 0xd2, 0xc8, 0xec, 0xe0, 0xea, 0xd4, 0x1c, 0xf4, 0x3c, 0xff, 0x0a,
+ 0xe5, 0x2f, 0x3e, 0xce, 0xdd, 0x1a, 0x08, 0x24, 0xfc, 0x1b, 0x2f, 0xac, 0x00,
+ 0x10, 0xfe, 0x3b, 0xed, 0xee, 0xe4, 0x18, 0xde, 0xde, 0x25, 0x33, 0x5d, 0xf8,
+ 0x3f, 0xec, 0xfd, 0xdd, 0x0a, 0xeb, 0x07, 0xdd, 0xe9, 0x2a, 0x3a, 0x02, 0xe1,
+ 0x09, 0x00, 0xbe, 0x1f, 0xdd, 0x0f, 0x33, 0x49, 0x13, 0xf5, 0xec, 0xbd, 0x11,
+ 0xb5, 0xf0, 0xd5, 0x03, 0xca, 0xde, 0xd6, 0x73, 0xf9, 0x09, 0xdb, 0xf0, 0x28,
+ 0x4b, 0xfe, 0xf1, 0xf1, 0xfc, 0xa9, 0x07, 0xf3, 0x06, 0x25, 0xc6, 0x60, 0xca,
+ 0x29, 0xfe, 0x05, 0xf2, 0xd1, 0xe7, 0x00, 0x2c, 0x31, 0xf7, 0x0c, 0x30, 0xe3,
+ 0x0d, 0xe2, 0x07, 0xdf, 0xae, 0xd9, 0xc1, 0xf3, 0x1a, 0xf2, 0xd4, 0x0e, 0xc3,
+ 0x16, 0xf2, 0x44, 0x22, 0x00, 0xe5, 0x24, 0xef, 0xa2, 0x62, 0x13, 0x07, 0x44,
+ 0xdf, 0xb3, 0x03, 0xfa, 0x23, 0xfe, 0xf6, 0xd8, 0xaa, 0xf1, 0x12, 0x18, 0xee,
+ 0x1f, 0xd8, 0x5a, 0x14, 0x3a, 0x38, 0xe2, 0xf5, 0x22, 0xc9, 0xc5, 0x6c, 0x15,
+ 0x76, 0xea, 0xf6, 0x52, 0xe6, 0x12, 0x3a, 0x06, 0x27, 0x7b, 0x09, 0xde, 0x68,
+ 0xf0, 0xef, 0xe4, 0xc7, 0xc3, 0xd1, 0x2e, 0xdb, 0xeb, 0x47, 0xb8, 0xcc, 0xf3,
+ 0x0a, 0xeb, 0x19, 0x0e, 0x27, 0xed, 0x19, 0xde, 0x21, 0xdc, 0xf3, 0xcd, 0xe2,
+ 0xf9, 0x02, 0xe8, 0x27, 0xfe, 0x06, 0x03, 0xd2, 0x37, 0xa2, 0xde, 0xdc, 0xda,
+ 0x5c, 0xc7, 0xbd, 0xf4, 0x06, 0x05, 0xf5, 0xf0, 0x06, 0xab, 0x08, 0xda, 0x3f,
+ 0xf8, 0x17, 0x37, 0xfd, 0x25, 0xe2, 0x3c, 0xf6, 0x22, 0x16, 0x11, 0xce, 0xf8,
+ 0xdb, 0xc2, 0x1d, 0x16, 0x0e, 0xe5, 0xd9, 0x00, 0x32, 0xca, 0x3a, 0xa5, 0x0c,
+ 0x06, 0x02, 0xb2, 0x2d, 0xdb, 0x0d, 0xde, 0x24, 0xf5, 0x59, 0x0e, 0xaf, 0xe2,
+ 0xf3, 0xfa, 0xb3, 0xd8, 0x03, 0x3d, 0x1a, 0x1a, 0x16, 0xea, 0xf5, 0xe5, 0xfe,
+ 0xda, 0x3a, 0xf7, 0x15, 0xe1, 0xfe, 0xf4, 0x0f, 0xde, 0xbb, 0xf5, 0xef, 0xfe,
+ 0xdb, 0x32, 0xe0, 0xd7, 0xfa, 0x3f, 0xf9, 0xf9, 0xf7, 0xf5, 0xe0, 0x14, 0x35,
+ 0xc8, 0xe1, 0xcf, 0x15, 0x0e, 0x3a, 0xed, 0x13, 0x3b, 0xeb, 0xc2, 0x34, 0xec,
+ 0xa9, 0x9d, 0x01, 0x9f, 0x0b, 0xaa, 0x3d, 0x1a, 0x13, 0x0f, 0xea, 0x31, 0x02,
+ 0xde, 0x0b, 0x1c, 0x37, 0xf9, 0xf5, 0xbd, 0xf4, 0x04, 0xe5, 0x08, 0xf5, 0xcd,
+ 0xe7, 0xe3, 0x10, 0x0e, 0x13, 0x27, 0x07, 0x14, 0xd9, 0xad, 0xd5, 0xbf, 0xc5,
+ 0x2b, 0x1f, 0xf9, 0x24, 0x08, 0x34, 0x03, 0x14, 0x02, 0x91, 0x13, 0x0c, 0x55,
+ 0x1d, 0xeb, 0x09, 0x16, 0xe6, 0xf2, 0x23, 0xd3, 0x3b, 0xcd, 0xeb, 0xeb, 0xc8,
+ 0xf2, 0xc0, 0xf9, 0xb6, 0xe9, 0xfd, 0xe3, 0x1e, 0x18, 0x33, 0x1f, 0xf6, 0xe9,
+ 0xc0, 0xf3, 0xf7, 0xee, 0x29, 0xdc, 0x94, 0x5e, 0xf4, 0xeb, 0xf6, 0xf8, 0xd0,
+ 0xde, 0x00, 0x17, 0xfd, 0x0b, 0x56, 0xfe, 0x01, 0xae, 0x2c, 0xf9, 0x0d, 0xa4,
+ 0xcf, 0x07, 0x2a, 0x0e, 0x19, 0x20, 0x81, 0x08, 0xc5, 0xdf, 0x21, 0xde, 0xe6,
+ 0xe0, 0x24, 0xd9, 0x21, 0x1b, 0xc6, 0x28, 0x0e, 0x00, 0x13, 0x0b, 0xf6, 0x2b,
+ 0x13, 0x13, 0xad, 0x2e, 0x63, 0xfc, 0xfe, 0x09, 0x18, 0xaf, 0x3b, 0xdb, 0x0a,
+ 0xd9, 0xdc, 0x0f, 0x19, 0xc1, 0xe4, 0x02, 0x23, 0x74, 0x05, 0xdd, 0xf5, 0x43,
+ 0x08, 0xdd, 0xf4, 0xeb, 0x01, 0x09, 0xfb, 0xc3, 0x2f, 0xc1, 0xc9, 0x35, 0x18,
+ 0x28, 0xf3, 0xe4, 0xd1, 0x1c, 0xfe, 0xed, 0xae, 0xbf, 0xd5, 0xf5, 0x34, 0x23,
+ 0xcf, 0x08, 0x14, 0x3b, 0xd5, 0xa0, 0x3c, 0xec, 0xc8, 0xf1, 0x3a, 0xbd, 0xe4,
+ 0xfd, 0x1d, 0xed, 0x27, 0x13, 0xb1, 0x0c, 0xdd, 0xd5, 0xdf, 0x00, 0xe9, 0xec,
+ 0xcb, 0xf7, 0x3c, 0x44, 0x06, 0xea, 0xa6, 0xe2, 0x0a, 0x08, 0xd2, 0x01, 0xe1,
+ 0xf6, 0xc9, 0x1a, 0x43, 0xdb, 0x45, 0xb9, 0x2c, 0x1a, 0xe4, 0x1c, 0xe1, 0xfe,
+ 0xe8, 0xd2, 0x03, 0xb6, 0xbc, 0x43, 0x16, 0xfe, 0xad, 0xf0, 0xdc, 0xf7, 0xfe,
+ 0x0b, 0x33, 0xc9, 0xaa, 0xb9, 0x15, 0xfb, 0xda, 0x99, 0x2a, 0xea, 0x02, 0x3c,
+ 0x2a, 0x62, 0x03, 0x08, 0x1a, 0x20, 0xdd, 0x2c, 0xde, 0x05, 0x39, 0xb3, 0xc8,
+ 0xba, 0xc9, 0x03, 0x07, 0xd8, 0x00, 0x06, 0xc5, 0x3c, 0x16, 0xf4, 0xb5, 0xf0,
+ 0xc5, 0xe2, 0xe7, 0xfe, 0x05, 0x0c, 0x0b, 0x1f, 0xd6, 0xdb, 0xd1, 0xf7, 0xe5,
+ 0xfb, 0xb1, 0xcc, 0x1a, 0xcf, 0xa7, 0x34, 0xfa, 0xc1, 0x30, 0xa1, 0xe2, 0x16,
+ 0xdf, 0xed, 0x2a, 0x1a, 0x9f, 0x0e, 0xf7, 0x0d, 0xd9, 0xf6, 0x02, 0x0f, 0xb1,
+ 0xe8, 0xb1, 0x10, 0x14, 0xee, 0x04, 0xec, 0x9c, 0xb2, 0xa5, 0xd1, 0xde, 0x11,
+ 0x1a, 0x46, 0xfb, 0xa3, 0x4c, 0x10, 0xef, 0x16, 0xeb, 0x06, 0x14, 0x19, 0x48,
+ 0x1c, 0xe5, 0xf9, 0xe1, 0x14, 0x04, 0x20, 0xbf, 0xc0, 0xa2, 0x07, 0xd0, 0x01,
+ 0xd9, 0xf8, 0x93, 0xe3, 0xe7, 0xd9, 0x1b, 0xa3, 0xf9, 0xc0, 0xc0, 0xc7, 0xe2,
+ 0xd1, 0xff, 0x4c, 0xee, 0xfc, 0x31, 0xef, 0x3a, 0xef, 0xd5, 0xd7, 0xce, 0xf3,
+ 0xe5, 0xba, 0xe8, 0x15, 0x15, 0x7f, 0xf8, 0x07, 0x38, 0x17, 0x10, 0x3d, 0x0f,
+ 0x1b, 0xe3, 0xd3, 0xcc, 0xc5, 0x41, 0x3f, 0x35, 0xed, 0xd1, 0xe2, 0xc6, 0x1d,
+ 0xcf, 0xdf, 0xd4, 0xbf, 0xf9, 0xe7, 0x10, 0x0b, 0x07, 0xce, 0x19, 0xca, 0xfb,
+ 0xee, 0xfb, 0xf8, 0xc8, 0x10, 0xcf, 0xfa, 0xba, 0xd1, 0xe7, 0xd7, 0xdb, 0xce,
+ 0xcd, 0x03, 0xff, 0xd2, 0x33, 0xed, 0x25, 0x06, 0x30, 0xf0, 0x01, 0xe8, 0x25,
+ 0x10, 0x00, 0x15, 0x2c, 0xe8, 0x0e, 0xdd, 0x03, 0x0e, 0xd6, 0xc7, 0xd7, 0x16,
+ 0xf5, 0x34, 0x54, 0x12, 0xc1, 0xfe, 0x4c, 0xe8, 0x08, 0x19, 0x01, 0xf9, 0x9e,
+ 0x0a, 0xb7, 0xbc, 0x02, 0xcc, 0xed, 0x15, 0xea, 0xc7, 0x32, 0x33, 0x1c, 0xf9,
+ 0xbf, 0xbb, 0x20, 0x1e, 0x08, 0xe7, 0xea, 0x22, 0x02, 0xfc, 0x0a, 0xc1, 0xd0,
+ 0xec, 0x07, 0x0c, 0x38, 0xed, 0xfe, 0xd3, 0xe5, 0x13, 0xb9, 0xd5, 0xeb, 0xd2,
+ 0xf8, 0xdc, 0x1f, 0xbf, 0xf3, 0xf9, 0x18, 0x13, 0x09, 0xe6, 0xea, 0x14, 0x81,
+ 0xfc, 0xea, 0xcf, 0xfc, 0xdd, 0x08, 0xcd, 0x1f, 0x05, 0xb6, 0xce, 0x23, 0x23,
+ 0xce, 0xc6, 0x0e, 0xb6, 0xf3, 0xdf, 0xe9, 0x16, 0x18, 0xcc, 0x13, 0x19, 0x19,
+ 0xef, 0x19, 0x2a, 0xfb, 0xcc, 0x18, 0xb9, 0xca, 0xd9, 0xe2, 0x56, 0xc9, 0xc5,
+ 0x0b, 0x12, 0xcf, 0x12, 0xfc, 0x21, 0x5b, 0xb9, 0x0e, 0x13, 0x19, 0xeb, 0x01,
+ 0x0f, 0x47, 0x25, 0xed, 0xe1, 0x12, 0xf9, 0xfe, 0xf6, 0x27, 0xe9, 0x05, 0xb8,
+ 0xae, 0xec, 0x2d, 0x00, 0xf7, 0xde, 0xf2, 0xe7, 0xfe, 0x04, 0xc7, 0xda, 0x1e,
+ 0xef, 0x32, 0x9c, 0xe2, 0x15, 0xbe, 0xcc, 0x26, 0xe0, 0x02, 0xfd, 0x0c, 0xe9,
+ 0xf5, 0xf9, 0xfe, 0xf8, 0xe4, 0xf1, 0xd7, 0x02, 0xcf, 0x28, 0x20, 0x12, 0xde,
+ 0x39, 0xfa, 0xda, 0x06, 0xed, 0xc8, 0xeb, 0x03, 0x27, 0x1a, 0x1b, 0xf8, 0xf6,
+ 0xd6, 0xb2, 0xfc, 0xd8, 0xb5, 0xf3, 0xeb, 0xf6, 0x00, 0x18, 0x45, 0x13, 0xfd,
+ 0x62, 0xfb, 0xd0, 0xf0, 0xa6, 0x35, 0xdc, 0x75, 0xac, 0x9c, 0xe9, 0xd5, 0xea,
+ 0xbe, 0xbe, 0xf8, 0x1a, 0x05, 0x85, 0x0a, 0x1e, 0x01, 0xda, 0xd3, 0x81, 0xe1,
+ 0xcc, 0xd4, 0xdf, 0xd1, 0xfb, 0x13, 0xd6, 0xde, 0x1f, 0xa0, 0xd6, 0x1e, 0xe9,
+ 0x3d, 0xd4, 0x13, 0xce, 0x41, 0x2f, 0x40, 0xdd, 0x03, 0x61, 0xa5, 0x34, 0xc8,
+ 0x16, 0xdb, 0xc6, 0xbe, 0xaf, 0xe3, 0x52, 0x6e, 0xdb, 0xec, 0x49, 0xe0, 0xfb,
+ 0x24, 0xf9, 0x24, 0xe8, 0x29, 0xc6, 0xb9, 0x03, 0x26, 0x2c, 0xda, 0x01, 0xe9,
+ 0xa7, 0xde, 0x05, 0xbf, 0xa8, 0x1f, 0xbd, 0xb3, 0x84, 0xe2, 0x1f, 0x29, 0x12,
+ 0xcd, 0xe7, 0x1f, 0x05, 0x4f, 0x1a, 0x2a, 0xe2, 0x92, 0xc0, 0xfc, 0x1e, 0xf7,
+ 0xbd, 0xa7, 0xe0, 0xc1, 0xe2, 0xc9, 0x88, 0x19, 0xcf, 0xc5, 0xfa, 0x12, 0xad,
+ 0xd8, 0x0e, 0x20, 0x98, 0x9e, 0x04, 0x17, 0xc1, 0xf6, 0x02, 0x60, 0xf2, 0xdc,
+ 0x09, 0x42, 0x29, 0x26, 0x0a, 0x8a, 0xec, 0xe9, 0x12, 0x03, 0xb2, 0xb4, 0xf6,
+ 0x10, 0xf3, 0x87, 0x12, 0xfd, 0xda, 0xde, 0xf2, 0xdd, 0xa8, 0x44, 0x5d, 0xff,
+ 0x69, 0x40, 0xc0, 0x86, 0x0b, 0x4a, 0x5d, 0xef, 0x04, 0x14, 0xf9, 0x9b, 0x11,
+ 0xa1, 0xde, 0x3d, 0xe7, 0x5a, 0xf9, 0xbb, 0xce, 0xf9, 0xa2, 0xf8, 0x2c, 0x05,
+ 0xd4, 0xf7, 0x1d, 0xdf, 0xdf, 0xda, 0x34, 0xd8, 0xf5, 0xcb, 0x0a, 0xe0, 0xe0,
+ 0xc6, 0xdf, 0xe4, 0xd1, 0xd8, 0xf8, 0x28, 0xea, 0x01, 0xfc, 0x4b, 0xcb, 0x46,
+ 0xc1, 0xf7, 0x1f, 0xe7, 0xe9, 0x21, 0x09, 0xd5, 0x18, 0xdf, 0xe1, 0xfc, 0xdb,
+ 0xfd, 0x3e, 0xa1, 0xa8, 0xed, 0x2f, 0x4e, 0x4a, 0xba, 0xe1, 0x50, 0xff, 0x56,
+ 0xcb, 0xcd, 0x10, 0xe4, 0xe5, 0x77, 0x68, 0xfa, 0xd6, 0xb3, 0xd2, 0xba, 0xcb,
+ 0x55, 0x15, 0xf4, 0x26, 0x0c, 0x28, 0x3b, 0xdc, 0xe7, 0x2b, 0xe1, 0x06, 0xe9,
+ 0x83, 0x24, 0xf6, 0x0f, 0x11, 0x18, 0xf0, 0x04, 0xf7, 0x15, 0xd7, 0xe4, 0xdf,
+ 0x15, 0xf5, 0x81, 0xcd, 0x02, 0x45, 0x0a, 0xfc, 0xb1, 0xf3, 0xd4, 0x0b, 0xc4,
+ 0xdf, 0x09, 0xca, 0x05, 0xc7, 0xe9, 0x0f, 0xf7, 0xeb, 0xda, 0x7c, 0x12, 0xf6,
+ 0xc8, 0x04, 0xdf, 0xd3, 0x8d, 0x23, 0x64, 0x22, 0xff, 0x45, 0x23, 0xf1, 0xfa,
+ 0xf0, 0x15, 0xa7, 0xf2, 0xba, 0xe4, 0xbb, 0x2f, 0x85, 0x96, 0xef, 0x07, 0xa8,
+ 0x9c, 0xf2, 0x4a, 0xe0, 0xd3, 0xdb, 0xe6, 0x8d, 0xc0, 0xb8, 0xd2, 0xf0, 0x09,
+ 0xbf, 0x3b, 0xeb, 0x12, 0x56, 0xa5, 0x9f, 0x46, 0xef, 0xd6, 0x26, 0x1f, 0xf4,
+ 0xd8, 0xb5, 0x24, 0xdf, 0xa7, 0x02, 0xc6, 0x01, 0x4c, 0x3b, 0xef, 0xdf, 0x07,
+ 0xad, 0x19, 0x42, 0x0a, 0x02, 0xb1, 0xce, 0x56, 0xec, 0x0b, 0xd7, 0x4f, 0xb6,
+ 0xbd, 0x06, 0xf9, 0xb4, 0x21, 0x4e, 0xfd, 0x04, 0xd5, 0x46, 0x38, 0x91, 0x11,
+ 0xbe, 0x3d, 0x08, 0xc8, 0xee, 0x2f, 0xfd, 0x1a, 0xac, 0xcd, 0xfe, 0x29, 0x0f,
+ 0xda, 0xf8, 0x96, 0x21, 0xfd, 0xd9, 0x33, 0x19, 0xc1, 0x57, 0xf8, 0x10, 0xd3,
+ 0xe9, 0xdc, 0xfc, 0x0c, 0xf0, 0xcd, 0x19, 0xc6, 0xd7, 0x1c, 0x01, 0xe9, 0x4b,
+ 0xba, 0xf6, 0xb2, 0xe7, 0xf4, 0xbc, 0xfc, 0x14, 0xf3, 0xc9, 0x06, 0xf8, 0x26,
+ 0x26, 0x04, 0xe9, 0x52, 0xdc, 0x18, 0x11, 0xd4, 0x52, 0xf6, 0xf6, 0xf0, 0x51,
+ 0xde, 0xde, 0x1e, 0xdd, 0xf5, 0x40, 0xb0, 0x00, 0x03, 0xea, 0x17, 0xe3, 0x09,
+ 0xfd, 0x0b, 0xf0, 0x3e, 0xa3, 0xba, 0x12, 0x3f, 0x15, 0xf0, 0xef, 0x17, 0xb0,
+ 0x1f, 0xf3, 0xa9, 0x5f, 0xe0, 0x57, 0x06, 0x03, 0x12, 0xa0, 0x15, 0x1b, 0xe3,
+ 0xf0, 0xdb, 0x57, 0x0b, 0x44, 0x48, 0xd8, 0x05, 0xd6, 0xfb, 0x4e, 0xdf, 0x09,
+ 0xbf, 0xde, 0x27, 0x05, 0x21, 0xe0, 0xd5, 0xcf, 0x24, 0x08, 0xe4, 0xc1, 0xfc,
+ 0xf2, 0x33, 0xe1, 0xec, 0x15, 0x09, 0x03, 0xf4, 0x05, 0xf0, 0x11, 0xf8, 0x9b,
+ 0xea, 0xcc, 0xfb, 0xa7, 0xf9, 0x07, 0xdf, 0xe3, 0xa2, 0x00, 0x0c, 0xc1, 0x1e,
+ 0x18, 0xd4, 0xea, 0x02, 0x3f, 0xef, 0x17, 0x03, 0x24, 0x1d, 0x44, 0x15, 0xc3,
+ 0xe0, 0x03, 0x08, 0x10, 0xf8, 0x09, 0x16, 0x21, 0x14, 0x29, 0x02, 0xc8, 0x09,
+ 0x17, 0x33, 0xfe, 0x62, 0x25, 0xfc, 0xfb, 0xc3, 0x48, 0x5d, 0x1d, 0xeb, 0x00,
+ 0x1c, 0xd0, 0x18, 0xa5, 0x18, 0xd3, 0x2e, 0x1e, 0xc0, 0xee, 0x12, 0xee, 0x57,
+ 0xf6, 0xf2, 0x0e, 0xe1, 0x07, 0xb0, 0xea, 0xe9, 0x2a, 0x11, 0x3d, 0xf0, 0xf3,
+ 0xd4, 0xe8, 0x08, 0xd2, 0xf2, 0xe9, 0x00, 0x0b, 0xf4, 0xa2, 0xbe, 0xf9, 0xbf,
+ 0x5d, 0x3c, 0xb9, 0xe1, 0xc6, 0xf5, 0x00, 0xd5, 0x13, 0x05, 0x05, 0x10, 0xff,
+ 0xe4, 0x1d, 0xb4, 0xfa, 0xd6, 0xe9, 0xec, 0x0a, 0xf8, 0x01, 0xec, 0xe4, 0xec,
+ 0x3c, 0xd0, 0xcd, 0xf5, 0xc0, 0xcc, 0xda, 0xcf, 0xf5, 0x3f, 0xe0, 0xe4, 0xc0,
+ 0x08, 0x27, 0x53, 0xdf, 0x08, 0xa9, 0x24, 0x0c, 0xb7, 0x2c, 0x21, 0x7f, 0xd0,
+ 0xe2, 0x28, 0xe9, 0xbc, 0x1b, 0xca, 0xec, 0x1f, 0x00, 0x0e, 0x17, 0xfe, 0x1b,
+ 0x05, 0xf0, 0x5d, 0xf1, 0x0e, 0x24, 0x09, 0xe8, 0xf6, 0x13, 0x05, 0xc3, 0x2a,
+ 0x09, 0xc5, 0xe5, 0x26, 0xeb, 0xdc, 0xfa, 0x05, 0x09, 0xe8, 0xf3, 0xca, 0xf2,
+ 0x01, 0xed, 0xdf, 0xb6, 0x04, 0xdd, 0xe3, 0xb2, 0xf2, 0xbf, 0xfa, 0x4a, 0x28,
+ 0x01, 0x0e, 0xb4, 0x01, 0x13, 0xc6, 0x3a, 0x05, 0xe8, 0xf4, 0x02, 0x0d, 0x16,
+ 0x08, 0xea, 0xdd, 0xfe, 0x13, 0xe1, 0xfd, 0x38, 0xef, 0x00, 0xdb, 0x1a, 0x1f,
+ 0xe9, 0xe5, 0xcf, 0xe4, 0xf4, 0xfa, 0x32, 0xc5, 0x04, 0x1c, 0x0b, 0x50, 0xeb,
+ 0xff, 0x2c, 0xe6, 0xde, 0xf7, 0xfa, 0xa5, 0xb8, 0xc4, 0xc9, 0xe8, 0x06, 0x02,
+ 0xfb, 0xb5, 0xfb, 0xee, 0x1a, 0x13, 0xf7, 0xd2, 0xea, 0x2c, 0xec, 0xe4, 0x07,
+ 0xf4, 0x2c, 0xc1, 0x2b, 0x04, 0x13, 0x24, 0x06, 0xdd, 0xfe, 0x8f, 0xe1, 0x43,
+ 0xb9, 0xdf, 0xbd, 0x47, 0xac, 0x2e, 0xe2, 0x16, 0xe2, 0xfb, 0xc1, 0x48, 0x08,
+ 0xf2, 0x61, 0xd4, 0xf0, 0xe4, 0x4b, 0x0a, 0xd2, 0xe1, 0x3a, 0x24, 0x2f, 0xa9,
+ 0xea, 0xfc, 0xcd, 0x32, 0xf7, 0x03, 0x1a, 0x6a, 0xbb, 0x28, 0xea, 0xa3, 0xe4,
+ 0xb8, 0xbf, 0x1b, 0xce, 0xfe, 0xd1, 0xc3, 0x21, 0x0d, 0x9e, 0xf3, 0xdb, 0xdc,
+ 0x1b, 0xf6, 0xdf, 0xc2, 0xbf, 0x12, 0x30, 0x63, 0xc4, 0xe6, 0xf8, 0x05, 0xcc,
+ 0x16, 0xf7, 0x0a, 0xe4, 0xca, 0xea, 0xea, 0x0a, 0xe8, 0x2e, 0x1c, 0xc1, 0xfc,
+ 0xac, 0x20, 0x02, 0xfb, 0x42, 0x0b, 0xf7, 0xe2, 0xf9, 0xe1, 0xe5, 0xcb, 0xb4,
+ 0xb3, 0x02, 0x17, 0xd2, 0xd9, 0xca, 0xe9, 0xbe, 0xfa, 0x17, 0xd3, 0xda, 0x48,
+ 0xfa, 0xd1, 0x07, 0xbd, 0x10, 0x19, 0xa5, 0xe8, 0x0b, 0x3c, 0x3a, 0x0f, 0xf0,
+ 0xe4, 0xe2, 0x0e, 0x9e, 0xc5, 0xd5, 0xba, 0x77, 0xd6, 0xc4, 0x4d, 0x06, 0xd2,
+ 0xf1, 0x03, 0x5b, 0xce, 0x00, 0x35, 0x2a, 0x08, 0xf1, 0x87, 0xbb, 0x3a, 0xb3,
+ 0x08, 0x0c, 0xa5, 0xcf, 0x2a, 0xe4, 0x4c, 0x04, 0x41, 0xd7, 0xd7, 0xd2, 0x13,
+ 0xee, 0xe6, 0x9d, 0xdc, 0x09, 0xf1, 0xec, 0xd8, 0x34, 0xfe, 0x56, 0x07, 0xaf,
+ 0xd6, 0x37, 0xd9, 0xdf, 0x4c, 0xb6, 0x16, 0x1a, 0xa6, 0x07, 0xc7, 0x9d, 0xe6,
+ 0x07, 0xf8, 0x31, 0xee, 0x3a, 0xd1, 0x38, 0xb7, 0xac, 0xc2, 0x19, 0xeb, 0xba,
+ 0x05, 0x54, 0xe1, 0xbe, 0xf1, 0x3a, 0xc1, 0xfb, 0xe8, 0x5b, 0xd2, 0xa6, 0x30,
+ 0xd9, 0x81, 0xa0, 0x07, 0x1b, 0x00, 0x01, 0x6e, 0xcc, 0x24, 0x0f, 0xf4, 0x16,
+ 0x0b, 0xd4, 0xd1, 0x3c, 0xcc, 0xb5, 0xd6, 0xa9, 0x2c, 0xf3, 0xea, 0xe3, 0xfd,
+ 0xf9, 0x81, 0x21, 0x4d, 0x3e, 0xd5, 0xfe, 0xb7, 0x0f, 0xc1, 0x1c, 0x1d, 0x16,
+ 0xf7, 0x03, 0xf9, 0xfe, 0xd6, 0xf3, 0x11, 0xab, 0xd3, 0xfb, 0x58, 0xf3, 0xae,
+ 0xcc, 0xde, 0xfb, 0xc4, 0xb8, 0x0b, 0x05, 0xde, 0x30, 0x1f, 0xc9, 0x83, 0x0d,
+ 0xd7, 0xec, 0x03, 0x18, 0x15, 0xf6, 0x0e, 0x4a, 0xcc, 0x14, 0x31, 0xac, 0x25,
+ 0x2a, 0x1e, 0xb5, 0xd8, 0x6d, 0xd2, 0x1c, 0xec, 0xdb, 0xc8, 0xc7, 0xec, 0x1d,
+ 0xbe, 0xf1, 0x10, 0xeb, 0x0b, 0xc6, 0xca, 0xed, 0xe4, 0xdc, 0xbc, 0x09, 0x58,
+ 0xe2, 0xed, 0xc8, 0xdb, 0xd2, 0xec, 0xf6, 0x15, 0xeb, 0xda, 0xd4, 0x2e, 0xf0,
+ 0xc7, 0xdb, 0xff, 0x3b, 0xb3, 0x60, 0x15, 0xdb, 0xff, 0x06, 0x05, 0x1d, 0x00,
+ 0xae, 0xe6, 0xcb, 0x09, 0x50, 0x1e, 0xec, 0x36, 0x08, 0xcc, 0xa3, 0xf3, 0x54,
+ 0x06, 0x54, 0xeb, 0xc4, 0xf0, 0x43, 0xc1, 0xfd, 0xe5, 0xf0, 0xd5, 0xdb, 0xe4,
+ 0xe3, 0xfd, 0x44, 0x1c, 0x0f, 0xf0, 0xe0, 0x03, 0x2a, 0x65, 0xe3, 0xc8, 0xe9,
+ 0xfd, 0xef, 0xdb, 0x42, 0x05, 0x06, 0xe2, 0xd1, 0xa9, 0xdc, 0x10, 0x9d, 0x38,
+ 0x0d, 0x1f, 0xc0, 0x0d, 0xf1, 0xd7, 0x31, 0xc9, 0x21, 0x87, 0xf7, 0xed, 0xf7,
+ 0xa1, 0x08, 0xf3, 0xbf, 0xcf, 0x2a, 0xd6, 0xe9, 0xfd, 0x03, 0xf9, 0xdc, 0x22,
+ 0x00, 0xff, 0x15, 0xeb, 0x09, 0xfb, 0x2a, 0x29, 0xf7, 0x09, 0xfa, 0xb5, 0xf0,
+ 0x13, 0xe6, 0xf8, 0x46, 0x07, 0x29, 0x8d, 0xfd, 0xfe, 0x0a, 0x1b, 0x18, 0xf3,
+ 0xa4, 0xec, 0xc3, 0x26, 0xa0, 0xe4, 0xd8, 0x0a, 0xd8, 0xf0, 0x96, 0x86, 0x2d,
+ 0xc9, 0x02, 0x21, 0xf4, 0x2e, 0x40, 0x1f, 0x0e, 0x3e, 0xd7, 0x51, 0x3f, 0x0d,
+ 0xc9, 0x9c, 0xb7, 0x27, 0xd8, 0x23, 0x02, 0xc7, 0x0f, 0xd5, 0x90, 0x38, 0xc9,
+ 0x1e, 0x02, 0xaa, 0x3c, 0xbe, 0x88, 0x29, 0xdd, 0x39, 0xe7, 0x98, 0x09, 0xd9,
+ 0x84, 0x38, 0xe9, 0x4b, 0xb3, 0xbb, 0x2e, 0x29, 0xfd, 0x1a, 0x1f, 0x08, 0xe4,
+ 0x3d, 0x1e, 0xfb, 0xc2, 0x32, 0x13, 0x4b, 0x40, 0xdd, 0xfc, 0xe4, 0xff, 0xf7,
+ 0x28, 0xde, 0xbb, 0xf3, 0x09, 0xe5, 0x06, 0xc9, 0x34, 0xe5, 0x93, 0xde, 0xd8,
+ 0x2e, 0xb4, 0xfe, 0xc6, 0x41, 0xa6, 0xdc, 0xfc, 0x0c, 0x2d, 0x33, 0xd4, 0x62,
+ 0xe7, 0xc8, 0xcc, 0x4a, 0x28, 0xc7, 0x31, 0x93, 0x1b, 0x4c, 0x33, 0x2d, 0x3f,
+ 0xc1, 0x58, 0xe2, 0xcc, 0xef, 0xf1, 0xf9, 0xce, 0x09, 0x24, 0xb9, 0x09, 0xd9,
+ 0x23, 0xef, 0xfc, 0xd1, 0x15, 0x41, 0xfd, 0x21, 0xe6, 0x49, 0xbd, 0xd0, 0xd8,
+ 0xcc, 0x2c, 0xd1, 0xfe, 0xb8, 0xca, 0xd4, 0xec, 0xdb, 0x14, 0xd5, 0x61, 0xfa,
+ 0xbc, 0x27, 0xf8, 0x91, 0xa3, 0x3f, 0x23, 0x48, 0xcd, 0x1d, 0xf3, 0x2c, 0xfc,
+ 0xaa, 0xb0, 0xf0, 0x0b, 0xd9, 0xe5, 0x0c, 0xb8, 0x0f, 0xdb, 0x95, 0xf6, 0xef,
+ 0x1e, 0xda, 0xe5, 0xf4, 0x6f, 0x42, 0xf2, 0x35, 0xba, 0x11, 0xc9, 0x0b, 0xf2,
+ 0xb7, 0x16, 0xbd, 0xa0, 0x24, 0x36, 0xe5, 0x3d, 0xe7, 0xfb, 0xa0, 0xd6, 0x05,
+ 0xb7, 0xd8, 0x16, 0xf2, 0x1d, 0xac, 0x81, 0x04, 0xb5, 0xdd, 0xe9, 0x21, 0x99,
+ 0x3c, 0x16, 0xf6, 0x1a, 0xa6, 0xb8, 0x4c, 0xd1, 0x24, 0xd9, 0xeb, 0xe8, 0x03,
+ 0xc1, 0xe4, 0xe4, 0xab, 0x92, 0xf5, 0x11, 0xd6, 0x45, 0x35, 0xf4, 0x05, 0xe5,
+ 0xe5, 0xe2, 0xc4, 0x5a, 0xf9, 0xf3, 0xe7, 0xd6, 0xd0, 0x0a, 0xb0, 0x23, 0xdf,
+ 0x3d, 0xea, 0x29, 0xde, 0x0d, 0xb3, 0x12, 0x0a, 0xee, 0xb1, 0x36, 0x3a, 0xb6,
+ 0x07, 0x1b, 0xf4, 0xc1, 0x08, 0x2f, 0xc7, 0x03, 0xf6, 0xf1, 0xf8, 0x16, 0x36,
+ 0xe1, 0x1a, 0x02, 0x08, 0xfd, 0xe9, 0x9b, 0xd2, 0xb8, 0xfc, 0x32, 0xb2, 0xe2,
+ 0x37, 0xd9, 0xaf, 0x05, 0xfb, 0x52, 0x1c, 0x09, 0x03, 0xe1, 0x2e, 0xd7, 0x2c,
+ 0x22, 0xf6, 0x04, 0x03, 0x11, 0x26, 0xd9, 0x1e, 0xb1, 0xe4, 0xa7, 0x33, 0xf2,
+ 0x1a, 0x10, 0xf8, 0xe1, 0x29, 0x0b, 0xe2, 0x1b, 0xf8, 0x1c, 0xd3, 0xc9, 0x17,
+ 0xec, 0x00, 0x61, 0xbf, 0x01, 0x3c, 0x9c, 0x06, 0x54, 0x10, 0xd4, 0xe9, 0xa2,
+ 0x3f, 0xba, 0xd3, 0xe5, 0xaa, 0x05, 0x03, 0x50, 0x07, 0x38, 0x17, 0xf9, 0x44,
+ 0x03, 0xc5, 0xfd, 0xc3, 0xb4, 0xdc, 0xf5, 0x0c, 0x07, 0xf5, 0xcd, 0x31, 0x44,
+ 0x62, 0x08, 0xbe, 0xa5, 0x34, 0x2a, 0xe7, 0xfa, 0x07, 0xca, 0xd8, 0xad, 0xce,
+ 0x00, 0xee, 0xdb, 0x1f, 0xb7, 0x38, 0xde, 0xc2, 0x3c, 0xf3, 0xeb, 0xb7, 0x99,
+ 0xb2, 0x1b, 0x0f, 0xd8, 0x14, 0x17, 0x15, 0x46, 0x19, 0x29, 0x25, 0xae, 0x3a,
+ 0xce, 0x41, 0x43, 0xdb, 0xd7, 0x1a, 0x1b, 0x91, 0x17, 0xa4, 0x0b, 0xeb, 0x0d,
+ 0xde, 0xe8, 0xde, 0x81, 0xfd, 0xf2, 0x14, 0xc3, 0xa7, 0x0b, 0xc9, 0xe9, 0x30,
+ 0xbb, 0x23, 0xef, 0xf0, 0xe4, 0x12, 0xc9, 0xcf, 0xfb, 0x1b, 0xcb, 0xe9, 0xad,
+ 0xf5, 0x56, 0x03, 0x4d, 0xdb, 0xe6, 0x15, 0x07, 0x5f, 0x34, 0xfa, 0xcb, 0xf5,
+ 0x2d, 0xd9, 0xc9, 0x19, 0xfe, 0x23, 0xfa, 0xda, 0xdd, 0xd3, 0xac, 0xca, 0x31,
+ 0xd6, 0x08, 0x1d, 0xef, 0xfe, 0x18, 0xef, 0xfd, 0xee, 0xe9, 0x32, 0x4f, 0xee,
+ 0x02, 0xf1, 0xf3, 0xb3, 0x61, 0x0b, 0xe7, 0xbe, 0xe6, 0xa2, 0xc3, 0xdd, 0x09,
+ 0xe6, 0x01, 0xaf, 0xc0, 0x2b, 0xca, 0xf1, 0x3a, 0x2d, 0x2e, 0x31, 0x0c, 0xd1,
+ 0x88, 0xdf, 0xb5, 0xf1, 0x17, 0x23, 0xf2, 0x3b, 0x08, 0x60, 0xee, 0xd5, 0xfe,
+ 0x12, 0x18, 0xdc, 0x02, 0x02, 0xa9, 0xdd, 0xde, 0xca, 0xed, 0xd3, 0x11, 0x14,
+ 0x0f, 0x46, 0xfe, 0x02, 0xc3, 0x1c, 0x18, 0xcd, 0xdc, 0xdd, 0x58, 0xd7, 0xee,
+ 0x43, 0x1d, 0xce, 0xd9, 0x09, 0xf5, 0x09, 0xe4, 0x58, 0x13, 0xd2, 0x08, 0xe1,
+ 0xda, 0xee, 0x36, 0xa1, 0xf3, 0x00, 0x43, 0xa5, 0x06, 0xf9, 0x0b, 0xf3, 0xda,
+ 0x8e, 0xd5, 0xe8, 0xd7, 0xd2, 0x2b, 0x21, 0x00, 0xc0, 0x17, 0xd1, 0x09, 0xd3,
+ 0xda, 0xfc, 0xba, 0x15, 0x08, 0xee, 0xd8, 0xd6, 0xc4, 0xab, 0x43, 0x03, 0xfa,
+ 0x10, 0x22, 0xe4, 0xf5, 0xe6, 0x18, 0x18, 0x3a, 0xd2, 0xf4, 0x08, 0xfa, 0xd4,
+ 0x0d, 0xdc, 0xd9, 0x23, 0xa7, 0xe9, 0x3c, 0xff, 0x1d, 0xf2, 0xef, 0x39, 0x07,
+ 0x17, 0xc2, 0x30, 0x2f, 0xf3, 0xca, 0x55, 0x15, 0xff, 0xff, 0x99, 0x2d, 0xe0,
+ 0x44, 0x0d, 0x6e, 0xc6, 0xf1, 0x20, 0x0f, 0xc1, 0xf1, 0x0a, 0xf5, 0xec, 0x11,
+ 0x24, 0xf8, 0xe8, 0x02, 0xd2, 0xe6, 0x12, 0x1e, 0xff, 0xc9, 0x17, 0xcf, 0xd7,
+ 0x07, 0xd8, 0x0d, 0x04, 0x0d, 0x2a, 0xfe, 0x09, 0x3b, 0xcd, 0x56, 0x26, 0xcd,
+ 0x03, 0x2a, 0x0f, 0xdc, 0x3c, 0x01, 0xaa, 0xd8, 0x3f, 0x37, 0x01, 0xde, 0xf3,
+ 0xe8, 0xdd, 0xf8, 0xe3, 0x01, 0x39, 0xe9, 0xbc, 0x16, 0xfa, 0xe1, 0xd3, 0xf4,
+ 0xd1, 0x15, 0x22, 0x17, 0xdd, 0x0f, 0xef, 0xd4, 0xd2, 0x15, 0x81, 0xd2, 0x19,
+ 0xe6, 0xd6, 0x1d, 0x06, 0x08, 0xb7, 0xe2, 0xde, 0xed, 0xe0, 0x0e, 0xed, 0x09,
+ 0x38, 0xcb, 0xef, 0xea, 0x2f, 0xd9, 0xdf, 0xfb, 0x05, 0xe3, 0x11, 0xce, 0xe7,
+ 0xf4, 0x15, 0x45, 0xf5, 0xf4, 0x09, 0x16, 0xcc, 0x44, 0xce, 0x1b, 0xe5, 0x0e,
+ 0xfa, 0xc1, 0x2d, 0x44, 0xed, 0xe6, 0x27, 0xfe, 0x00, 0x23, 0xdb, 0x1a, 0xc1,
+ 0x2d, 0xad, 0xbe, 0x2b, 0x22, 0xe7, 0x07, 0xe1, 0xd8, 0xf6, 0xe7, 0x53, 0xbb,
+ 0xd1, 0x85, 0xe7, 0xdd, 0x32, 0xe2, 0xf3, 0xe0, 0x05, 0x09, 0xfa, 0xd7, 0xf4,
+ 0x15, 0x3b, 0xea, 0x16, 0x0f, 0xe8, 0xd4, 0x44, 0xf8, 0xb0, 0xe4, 0xe9, 0xe4,
+ 0xe1, 0xb7, 0x52, 0xb5, 0x65, 0x03, 0x11, 0xab, 0xbe, 0x3f, 0xc8, 0x21, 0xf7,
+ 0x09, 0x0f, 0x31, 0xf4, 0x47, 0xfc, 0xfb, 0xdb, 0x81, 0x2a, 0x37, 0xd4, 0xc4,
+ 0x08, 0xb7, 0xff, 0xfc, 0x27, 0x1c, 0xf0, 0x00, 0x07, 0x16, 0x07, 0xaf, 0xe4,
+ 0xda, 0x26, 0xcc, 0xf1, 0xd8, 0x37, 0x35, 0x18, 0x36, 0x0c, 0x0b, 0x4e, 0xfc,
+ 0xd7, 0x97, 0x15, 0xed, 0xdf, 0xf1, 0x00, 0xe7, 0x2b, 0xde, 0xf3, 0xb5, 0xc6,
+ 0x33, 0xd5, 0xf2, 0x0e, 0x1f, 0xf0, 0xcd, 0xbf, 0x40, 0xbe, 0x07, 0xd4, 0x8c,
+ 0xd4, 0xbe, 0x92, 0xdb, 0x3e, 0x1b, 0xfb, 0xd4, 0x1a, 0xe1, 0x0d, 0x0d, 0x1b,
+ 0xe6, 0x9f, 0xd9, 0xc0, 0xb9, 0x09, 0xd8, 0xa6, 0xdd, 0xfd, 0xf8, 0x0d, 0x01,
+ 0x3d, 0xb7, 0xe6, 0xe1, 0xca, 0xe0, 0x01, 0xe4, 0xa9, 0x0f, 0x18, 0x1d, 0xc2,
+ 0xf0, 0x08, 0x16, 0x11, 0x06, 0x14, 0xb4, 0x9a, 0xb5, 0xc1, 0x90, 0xc7, 0x00,
+ 0xfc, 0x0b, 0xd5, 0x95, 0xe6, 0x24, 0xf3, 0xfb, 0x01, 0xac, 0xc0, 0x13, 0xe2,
+ 0xff, 0xd0, 0xd2, 0x1a, 0x1c, 0xb5, 0x4d, 0x3b, 0xeb, 0x1f, 0xf0, 0xf8, 0xb5,
+ 0xcb, 0xff, 0xd9, 0x19, 0xd4, 0xf6, 0x16, 0x14, 0xdb, 0xfe, 0x26, 0xdb, 0x97,
+ 0x44, 0x21, 0x3a, 0xec, 0xda, 0xe3, 0x08, 0xa7, 0x4e, 0xd7, 0xf2, 0x34, 0xcb,
+ 0x40, 0xd0, 0x75, 0x1b, 0xf4, 0x2b, 0x26, 0xf3, 0x2c, 0xc8, 0xe5, 0xd6, 0x71,
+ 0x1d, 0xf3, 0xb9, 0x64, 0xc1, 0xee, 0x25, 0x27, 0xc0, 0x0c, 0x19, 0xf1, 0x11,
+ 0x61, 0x01, 0xea, 0x0c, 0xf7, 0xa1, 0x1a, 0x18, 0xe4, 0xc7, 0xf5, 0x23, 0xf5,
+ 0x3a, 0xfe, 0x87, 0xfb, 0x9f, 0x09, 0xd2, 0x24, 0x24, 0x27, 0xf5, 0xa1, 0x17,
+ 0x36, 0x0c, 0xe9, 0xf0, 0x28, 0xec, 0xe2, 0xe1, 0xb5, 0xcb, 0x07, 0xf7, 0xe0,
+ 0x15, 0x1c, 0xea, 0xde, 0x00, 0x0a, 0x20, 0xe8, 0xe8, 0x42, 0xde, 0xea, 0x01,
+ 0xff, 0xf1, 0x31, 0x2c, 0x2f, 0x11, 0xe7, 0xf1, 0xfd, 0xd4, 0xed, 0x03, 0xf1,
+ 0xdd, 0xf6, 0xcf, 0xca, 0x01, 0x40, 0xf4, 0xff, 0xe4, 0xe0, 0x0b, 0x3d, 0xe8,
+ 0x2c, 0xca, 0xf4, 0xe0, 0xf6, 0x55, 0xef, 0x27, 0xff, 0xd2, 0xd6, 0x5f, 0x07,
+ 0xe4, 0xfa, 0xf1, 0x32, 0xf4, 0x36, 0xca, 0xea, 0x26, 0x1a, 0x13, 0x26, 0x19,
+ 0xde, 0x10, 0x13, 0xe2, 0xc0, 0x00, 0xc2, 0xd2, 0x03, 0x02, 0x3e, 0xed, 0x02,
+ 0x54, 0xcd, 0x10, 0x06, 0x18, 0xd4, 0x60, 0x05, 0x2f, 0x07, 0xd7, 0xd7, 0x14,
+ 0x28, 0xf8, 0xf5, 0xec, 0xd3, 0x03, 0xe5, 0xf9, 0x4f, 0x04, 0x17, 0xec, 0x55,
+ 0x00, 0x13, 0x04, 0xea, 0x27, 0xf4, 0xb2, 0x07, 0xf2, 0xd7, 0x32, 0xfa, 0x31,
+ 0x48, 0x09, 0xfa, 0x40, 0xca, 0xff, 0xf9, 0x44, 0xf6, 0x26, 0x11, 0x11, 0xd5,
+ 0x20, 0xd1, 0xcf, 0x7f, 0x39, 0x25, 0x2c, 0x2c, 0xc4, 0x1c, 0x20, 0xd9, 0xa5,
+ 0x11, 0x0b, 0xcb, 0xfa, 0xed, 0xd9, 0xe5, 0x13, 0xd0, 0xcf, 0x26, 0xe4, 0xf7,
+ 0xd7, 0x16, 0x51, 0xc4, 0xea, 0xec, 0x0a, 0xfe, 0x1a, 0x11, 0x15, 0x18, 0x27,
+ 0x6a, 0xf1, 0x29, 0xed, 0xfd, 0xe2, 0xe3, 0xe6, 0x16, 0x1b, 0x17, 0x2a, 0x13,
+ 0x16, 0x01, 0xd9, 0xd2, 0x07, 0xe4, 0x04, 0xd6, 0x4a, 0xfd, 0x24, 0x09, 0xde,
+ 0x33, 0xb7, 0xfe, 0xc1, 0x02, 0xdc, 0x25, 0xf1, 0xe0, 0x5d, 0x19, 0xf6, 0xee,
+ 0xe6, 0xc8, 0x31, 0xe1, 0xe5, 0xed, 0x00, 0xf9, 0xf2, 0xf8, 0xc7, 0x02, 0x02,
+ 0xc1, 0xd9, 0xdd, 0x37, 0xc9, 0xbe, 0xe8, 0xf9, 0x2b, 0xe3, 0xdf, 0x14, 0xa8,
+ 0x31, 0xc8, 0xcf, 0xfd, 0xec, 0x2a, 0xf6, 0xb3, 0x96, 0xdb, 0xc9, 0xd5, 0x01,
+ 0xee, 0xec, 0x02, 0x3a, 0x03, 0xb3, 0x56, 0x21, 0xcf, 0xd3, 0x28, 0x2d, 0xb4,
+ 0xd0, 0x0b, 0xd6, 0xf1, 0xac, 0xf8, 0xdb, 0x12, 0x40, 0x19, 0x9e, 0xfa, 0x27,
+ 0xe5, 0x1d, 0xf5, 0xeb, 0xea, 0xbe, 0xb9, 0xc6, 0xde, 0xd7, 0xf9, 0xd9, 0xe4,
+ 0x35, 0xca, 0xce, 0x2a, 0x56, 0xbe, 0x0d, 0x06, 0xff, 0xcc, 0xe7, 0xba, 0x17,
+ 0x22, 0xea, 0xc2, 0x3d, 0x15, 0xe4, 0x2c, 0x0b, 0x0c, 0xf4, 0xf8, 0x56, 0x43,
+ 0x4c, 0xfd, 0xf4, 0xb6, 0xd5, 0xf9, 0xd5, 0x05, 0x1c, 0xdf, 0xfe, 0x00, 0x35,
+ 0xec, 0xe6, 0xa9, 0x06, 0x17, 0xdc, 0xcf, 0x06, 0xf1, 0x42, 0x25, 0xd2, 0xc6,
+ 0x1a, 0xfc, 0xe6, 0xf0, 0xd5, 0xdd, 0xde, 0xf2, 0xd3, 0xfe, 0x06, 0x81, 0x23,
+ 0x20, 0x3a, 0x1f, 0x24, 0xe7, 0x17, 0x09, 0x21, 0xff, 0xb7, 0xeb, 0xb4, 0xc7,
+ 0xf0, 0xb0, 0xb3, 0xfa, 0x0c, 0xc3, 0x22, 0xf4, 0x1b, 0xdd, 0xd3, 0x17, 0x3b,
+ 0x33, 0xa2, 0xd1, 0x18, 0x1f, 0x2a, 0xce, 0x0d, 0xbe, 0xc4, 0x0f, 0x3f, 0xff,
+ 0xe9, 0xdc, 0xaf, 0x01, 0xec, 0xeb, 0xf1, 0xc8, 0xc1, 0x22, 0xc8, 0x2d, 0xa7,
+ 0xc6, 0xbe, 0x44, 0xd5, 0xea, 0x1a, 0x1d, 0x0d, 0x1e, 0x0f, 0x21, 0x03, 0x45,
+ 0xd5, 0x39, 0xfa, 0x0e, 0xf4, 0xdf, 0xf9, 0x0d, 0xdf, 0x17, 0x23, 0x8a, 0x14,
+ 0x20, 0xcc, 0x08, 0x09, 0xe1, 0x25, 0xe3, 0xb9, 0x1e, 0xf4, 0x1e, 0xcf, 0xe2,
+ 0xef, 0xca, 0xf0, 0x2d, 0x1c, 0x00, 0xf9, 0xdd, 0x88, 0x1f, 0x0c, 0xdd, 0x2e,
+ 0x03, 0xd2, 0x05, 0x0a, 0xe4, 0x35, 0x0a, 0x2b, 0xbb, 0xb6, 0x09, 0xbc, 0xe5,
+ 0xfd, 0xeb, 0xd3, 0xe6, 0xdc, 0x08, 0xd8, 0x39, 0x1d, 0xf0, 0x3b, 0xe1, 0x04,
+ 0xfa, 0x0a, 0xf5, 0xe4, 0x13, 0xd6, 0x2e, 0x08, 0x05, 0x18, 0xa6, 0xd3, 0xd9,
+ 0x3f, 0x31, 0xb7, 0x08, 0x8e, 0x10, 0x21, 0xda, 0x1d, 0xe8, 0xe7, 0xf2, 0x1a,
+ 0x06, 0xba, 0xd7, 0x09, 0x01, 0xcd, 0xf7, 0xb1, 0xe6, 0x01, 0xfe, 0xf6, 0xe8,
+ 0xe0, 0xc5, 0xd5, 0xdc, 0xbc, 0xff, 0xb1, 0x1e, 0x2c, 0xd5, 0xf6, 0xed, 0x42,
+ 0xb0, 0x07, 0x08, 0x1c, 0xe9, 0x30, 0xf3, 0xde, 0xcf, 0x16, 0x2d, 0xf1, 0x28,
+ 0xe1, 0xd2, 0x20, 0x1c, 0xe8, 0xfb, 0x17, 0xe1, 0x23, 0xe5, 0xd1, 0xfc, 0xee,
+ 0x0e, 0x20, 0x0e, 0x15, 0x11, 0xc7, 0x1a, 0x00, 0x17, 0xc6, 0x24, 0xd6, 0x05,
+ 0x1f, 0x08, 0xfc, 0x08, 0xef, 0xf7, 0xf4, 0xc6, 0xd1, 0xe1, 0x29, 0xe6, 0xed,
+ 0x0b, 0xb6, 0x19, 0xf5, 0xea, 0x2a, 0x25, 0xfc, 0xa5, 0xd9, 0x1f, 0x3f, 0x30,
+ 0x00, 0x01, 0x29, 0xdb, 0x06, 0xf3, 0x24, 0xa9, 0x21, 0x1f, 0x16, 0x13, 0x03,
+ 0x1d, 0x2c, 0x04, 0xea, 0xf7, 0xe3, 0xee, 0x43, 0x20, 0x40, 0xfc, 0x38, 0xcd,
+ 0x5c, 0xfb, 0x36, 0xd6, 0xd5, 0x30, 0xbd, 0xeb, 0xe3, 0x0a, 0xd4, 0xec, 0xef,
+ 0xfb, 0xd2, 0xf5, 0x08, 0xe8, 0x0a, 0xfb, 0xe1, 0x32, 0x81, 0x2f, 0xc8, 0x38,
+ 0xf4, 0x1a, 0xd2, 0xac, 0xd2, 0x02, 0x1c, 0xd1, 0xef, 0xf9, 0xad, 0xe8, 0xee,
+ 0xf3, 0x13, 0xff, 0x16, 0xa1, 0xa7, 0xd4, 0xf2, 0xee, 0x21, 0x00, 0x19, 0x30,
+ 0x40, 0xd8, 0x0f, 0x19, 0x16, 0x4d, 0x3a, 0x1c, 0xb3, 0xea, 0x00, 0xff, 0x88,
+ 0xfd, 0xfe, 0xc6, 0x38, 0x02, 0xe9, 0x06, 0xfe, 0x2a, 0x3a, 0x11, 0x10, 0xf4,
+ 0x11, 0xef, 0xf7, 0xea, 0xf9, 0x28, 0xd1, 0x17, 0xdb, 0xbe, 0x07, 0x46, 0xe6,
+ 0x94, 0x02, 0xe8, 0x12, 0x06, 0x09, 0x06, 0xf5, 0xbd, 0xb4, 0xda, 0xd2, 0x32,
+ 0xd9, 0x2a, 0xa1, 0x3a, 0x3c, 0xe1, 0xe2, 0x26, 0x2a, 0x12, 0xc2, 0xeb, 0x01,
+ 0xbe, 0xf6, 0x1f, 0x5d, 0x36, 0xff, 0x04, 0x09, 0xcb, 0x19, 0x23, 0x10, 0xfc,
+ 0xc8, 0xce, 0x10, 0x18, 0x0c, 0x08, 0xc7, 0xe6, 0x0f, 0xe5, 0xd1, 0xf0, 0xda,
+ 0xd5, 0xe0, 0xc2, 0x24, 0xda, 0xe2, 0x0a, 0xf9, 0xec, 0x4d, 0x8c, 0xdf, 0xde,
+ 0xfe, 0x1a, 0xf0, 0xc1, 0xc3, 0xcd, 0x2b, 0xe9, 0x0e, 0xc9, 0xa6, 0x35, 0xee,
+ 0x2c, 0xe2, 0x4d, 0xfd, 0x1e, 0xfc, 0xf7, 0xc9, 0x4d, 0x27, 0xaf, 0xde, 0xd3,
+ 0xb2, 0xd9, 0xfb, 0xef, 0x27, 0xfd, 0x0f, 0x1a, 0xef, 0x96, 0xc4, 0x23, 0xf1,
+ 0xdc, 0x0c, 0x07, 0x0f, 0xeb, 0x34, 0xf7, 0x2a, 0x17, 0xf5, 0xdf, 0x09, 0x9f,
+ 0xdb, 0xf2, 0xb5, 0xe4, 0xf0, 0x1e, 0x3e, 0xe4, 0x4b, 0x15, 0x0b, 0xb3, 0x11,
+ 0xdb, 0xf4, 0xef, 0x50, 0x1f, 0x3f, 0x24, 0x46, 0xda, 0xdf, 0x0b, 0x30, 0x82,
+ 0xf8, 0xbd, 0xff, 0xdb, 0xdd, 0x15, 0xe8, 0x3f, 0xba, 0x3c, 0xc9, 0x3e, 0x19,
+ 0xb7, 0xcc, 0xee, 0xf3, 0xf2, 0xb9, 0x36, 0x25, 0x1e, 0x2c, 0x0c, 0xbf, 0x07,
+ 0xf1, 0xc7, 0x12, 0xfb, 0xda, 0x49, 0x2d, 0xb1, 0xbf, 0xe7, 0xce, 0x0e, 0xf9,
+ 0x2f, 0xe4, 0x09, 0x1c, 0xe3, 0xd2, 0x47, 0xc7, 0xf0, 0xe3, 0x3a, 0xab, 0xd1,
+ 0xf2, 0xf3, 0xf2, 0xb5, 0x21, 0xe5, 0xe0, 0xde, 0x13, 0xfc, 0xb6, 0x04, 0xf0,
+ 0xd5, 0x99, 0xe3, 0xfb, 0xbb, 0x04, 0xe3, 0xfa, 0xc8, 0xf2, 0x15, 0xdd, 0xc8,
+ 0xb1, 0x28, 0x0b, 0xad, 0x1d, 0x21, 0xe9, 0x23, 0xd4, 0xd0, 0xe8, 0xc0, 0xc8,
+ 0xe5, 0x12, 0x11, 0x14, 0xda, 0x09, 0xf8, 0xcc, 0x0f, 0xe2, 0x22, 0xcc, 0xfd,
+ 0x03, 0xb1, 0x9e, 0xde, 0xbc, 0x3a, 0x14, 0x2d, 0xe1, 0xe5, 0xc6, 0xd9, 0x9b,
+ 0xec, 0x05, 0xa3, 0x20, 0x30, 0xc1, 0xfc, 0x26, 0xe3, 0x3f, 0x1e, 0xff, 0xe3,
+ 0x0d, 0x50, 0x01, 0x9e, 0xd6, 0xff, 0xae, 0x18, 0x01, 0x2b, 0x49, 0x0b, 0x5d,
+ 0x0b, 0xf0, 0xed, 0x06, 0x2f, 0x4c, 0x3d, 0x0d, 0xd2, 0xd4, 0x7f, 0xfc, 0xf1,
+ 0x49, 0x10, 0xe1, 0xf6, 0xf4, 0x92, 0x2e, 0xdf, 0xed, 0x1a, 0x01, 0x17, 0x08,
+ 0xe2, 0xee, 0x49, 0x10, 0x8f, 0x0b, 0xde, 0x2c, 0xe8, 0x1b, 0x07, 0xbf, 0xce,
+ 0xc3, 0xee, 0xfa, 0x2b, 0xe7, 0xd4, 0x25, 0x05, 0xd0, 0x1d, 0xbd, 0xb1, 0xbd,
+ 0xfa, 0x0d, 0xd8, 0xff, 0xe2, 0x14, 0xfc, 0xf8, 0x16, 0xca, 0xf9, 0x33, 0xef,
+ 0x17, 0xd3, 0x2a, 0xed, 0xa4, 0x50, 0xda, 0x3b, 0x51, 0xe0, 0x5f, 0xf8, 0x03,
+ 0x35, 0xb8, 0xdc, 0xc5, 0xe4, 0x1c, 0x10, 0x9e, 0xe2, 0xe2, 0xba, 0xd7, 0xdb,
+ 0x42, 0xb5, 0xe3, 0xd4, 0xf1, 0x07, 0xeb, 0xfe, 0xe7, 0xfa, 0xa1, 0xfa, 0x38,
+ 0x1a, 0xc8, 0xe9, 0x41, 0xed, 0xe6, 0x9a, 0xac, 0xf1, 0x26, 0xff, 0x25, 0xc5,
+ 0xf4, 0xe8, 0xb6, 0xfe, 0x4e, 0xff, 0x24, 0xda, 0x21, 0xfb, 0xa5, 0x22, 0xf2,
+ 0xbc, 0xd2, 0xef, 0x02, 0xfd, 0xf1, 0xb2, 0xf0, 0x6a, 0xbd, 0x10, 0xe5, 0x53,
+ 0xe6, 0x3a, 0x18, 0x8b, 0xfb, 0x0e, 0x32, 0x24, 0xe9, 0x7f, 0x0e, 0xd2, 0x1f,
+ 0x32, 0xc6, 0xf0, 0xb3, 0xa1, 0xf7, 0x14, 0x3f, 0x13, 0xdf, 0xb5, 0xe9, 0xb8,
+ 0xc8, 0xe6, 0xe4, 0x09, 0xf6, 0x2d, 0x29, 0xf3, 0x67, 0x10, 0x0e, 0xdd, 0x27,
+ 0x1e, 0x0d, 0xc3, 0xd7, 0x0b, 0x38, 0x55, 0xc8, 0xee, 0xb1, 0xce, 0xf7, 0xd0,
+ 0xe2, 0xf4, 0xc2, 0xee, 0xd2, 0xe1, 0xf0, 0x39, 0x91, 0x4a, 0xfa, 0x9c, 0xfe,
+ 0x33, 0xcc, 0x15, 0xba, 0xe4, 0x9d, 0x00, 0x1e, 0xe6, 0xe8, 0x74, 0x25, 0x50,
+ 0xdd, 0xd3, 0x58, 0xf8, 0xed, 0xf2, 0xda, 0x67, 0xc5, 0xf9, 0x30, 0x21, 0xf7,
+ 0xfa, 0xdf, 0x75, 0x1d, 0xf3, 0xf9, 0xb1, 0xb3, 0xc8, 0x52, 0x2c, 0x95, 0xdb,
+ 0xfd, 0xe0, 0xb7, 0xde, 0x52, 0xf1, 0x50, 0xf3, 0xf9, 0xe1, 0xec, 0x1d, 0x12,
+ 0xe4, 0xbd, 0x23, 0x0b, 0xf0, 0xbb, 0x49, 0x38, 0xd0, 0xcc, 0x20, 0xff, 0x14,
+ 0xf9, 0xe3, 0xd8, 0xcb, 0xf8, 0xf7, 0xf9, 0xe9, 0xe4, 0xdb, 0xd0, 0xcc, 0xea,
+ 0x3c, 0x1c, 0xf2, 0xbc, 0x26, 0xf6, 0x06, 0xe3, 0x00, 0x0c, 0xf4, 0xff, 0xfb,
+ 0x15, 0xf8, 0x01, 0x2c, 0x05, 0xbb, 0xc6, 0x07, 0xc6, 0xf5, 0x3b, 0x2d, 0x1a,
+ 0xf2, 0x2f, 0xcd, 0xc9, 0xfa, 0xf3, 0x03, 0x35, 0xe8, 0x19, 0xde, 0xcc, 0xef,
+ 0x31, 0xf1, 0xee, 0x2e, 0x5e, 0xc9, 0x05, 0x7b, 0x1c, 0xb9, 0xbc, 0x09, 0x4a,
+ 0x30, 0x08, 0x01, 0xea, 0xd6, 0xe7, 0xb6, 0xcb, 0x0a, 0xd8, 0xe0, 0x0c, 0x11,
+ 0x09, 0x0c, 0x22, 0xe1, 0xe9, 0x13, 0xc4, 0x01, 0x18, 0xe3, 0xd0, 0xf3, 0x28,
+ 0x0b, 0xc1, 0xc2, 0xd4, 0xff, 0xf0, 0x16, 0x5f, 0x33, 0x16, 0xcb, 0xd4, 0xb7,
+ 0xde, 0xd2, 0x16, 0xde, 0xf2, 0xfe, 0xb4, 0xdf, 0xb2, 0x1b, 0xb6, 0x9e, 0xf7,
+ 0xfe, 0xbf, 0xaf, 0x21, 0xae, 0x2a, 0x23, 0xdb, 0xe7, 0xe9, 0x1b, 0xcd, 0x1d,
+ 0x17, 0xae, 0xdb, 0x32, 0x42, 0xb9, 0xc8, 0xf2, 0x0a, 0xfc, 0xe1, 0xb2, 0xd7,
+ 0xd6, 0xe5, 0xeb, 0x4b, 0xd0, 0x45, 0xcb, 0xa7, 0x12, 0xd0, 0x31, 0xe4, 0x8b,
+ 0x03, 0x38, 0x00, 0xbd, 0x28, 0xea, 0xf4, 0xf3, 0x2c, 0xfa, 0xad, 0x27, 0xf4,
+ 0xdd, 0x63, 0xdc, 0xf3, 0xd7, 0xd1, 0x7f, 0xfa, 0x34, 0x1b, 0x23, 0xbc, 0xf7,
+ 0xe0, 0x20, 0x26, 0x24, 0xd2, 0xa3, 0x16, 0xe7, 0xf0, 0xd2, 0xf9, 0xa7, 0xbe,
+ 0xd7, 0xec, 0x12, 0x07, 0x13, 0x00, 0x0f, 0xdc, 0x50, 0x10, 0xf3, 0xad, 0x38,
+ 0x93, 0x13, 0xf5, 0x01, 0xb5, 0xbd, 0xe4, 0xd3, 0x0a, 0xe2, 0x28, 0x3e, 0x2d,
+ 0x20, 0x1c, 0xea, 0xd8, 0xb6, 0x53, 0xe6, 0xca, 0x0b, 0xf1, 0x0e, 0xa9, 0x1e,
+ 0x07, 0x2f, 0x4f, 0xf1, 0xe0, 0xc3, 0xc6, 0xce, 0x01, 0x09, 0xd0, 0x0d, 0x18,
+ 0x25, 0x30, 0x17, 0x9d, 0x33, 0x60, 0xfa, 0x07, 0x40, 0xd6, 0x0a, 0x0a, 0x21,
+ 0xfe, 0xb5, 0x0d, 0x12, 0xe5, 0xe2, 0xce, 0xdf, 0x01, 0xdf, 0xd0, 0x0c, 0x27,
+ 0x22, 0x28, 0x21, 0x2c, 0xf2, 0x51, 0x2d, 0x1b, 0xc3, 0x2c, 0xb5, 0x07, 0xd1,
+ 0xd4, 0x30, 0xee, 0xd9, 0x24, 0xf5, 0x13, 0xe2, 0xc9, 0x14, 0x10, 0x19, 0xbc,
+ 0x00, 0xfd, 0xd1, 0xe4, 0xd8, 0x13, 0xb3, 0xdc, 0xef, 0xcd, 0xe1, 0x40, 0x1c,
+ 0xd7, 0xdf, 0x17, 0x1c, 0xf5, 0xe4, 0xf0, 0xcc, 0xe8, 0xd4, 0x11, 0xdd, 0xbb,
+ 0x34, 0xf3, 0x38, 0x09, 0x3f, 0x1a, 0xef, 0xf8, 0xee, 0xd2, 0x35, 0xe9, 0x22,
+ 0xd1, 0xd0, 0x36, 0x07, 0xfe, 0x1b, 0xfe, 0xd1, 0x06, 0xee, 0xd8, 0x9c, 0xee,
+ 0xe9, 0x24, 0x27, 0x09, 0xd1, 0x02, 0xcc, 0x34, 0xf7, 0x7f, 0x2f, 0x02, 0x09,
+ 0xc1, 0xea, 0xd3, 0x1c, 0x3c, 0xe8, 0xe6, 0x09, 0xda, 0xf9, 0xda, 0xe1, 0xf3,
+ 0x38, 0x20, 0xb9, 0x0d, 0x14, 0xeb, 0xef, 0xfd, 0xb3, 0xe6, 0x07, 0x1a, 0xff,
+ 0xf0, 0x1a, 0x2f, 0xc3, 0x12, 0x31, 0xf0, 0xed, 0x3c, 0xd1, 0x03, 0x2b, 0xb3,
+ 0x18, 0xc0, 0x9b, 0xed, 0x23, 0x1d, 0xd9, 0xc2, 0x07, 0xf9, 0x28, 0x15, 0x08,
+ 0x1a, 0xc5, 0x04, 0xc6, 0x19, 0xe5, 0x0c, 0x4c, 0x05, 0x09, 0xda, 0xff, 0x02,
+ 0x2f, 0xe9, 0x0a, 0xdf, 0xa0, 0x03, 0x21, 0x31, 0x11, 0xff, 0x07, 0x4d, 0xd7,
+ 0x07, 0x46, 0xdc, 0xcf, 0x08, 0xe9, 0xf8, 0xef, 0xa3, 0x38, 0x02, 0x28, 0x1b,
+ 0x27, 0x95, 0xe5, 0x1d, 0x99, 0x94, 0xc4, 0x23, 0xeb, 0x0e, 0xb9, 0xaf, 0xcd,
+ 0x39, 0xfe, 0xfb, 0xeb, 0x01, 0x2e, 0xea, 0xd9, 0xf6, 0xf3, 0x0a, 0x19, 0xc4,
+ 0x21, 0x2e, 0xe4, 0x03, 0xdf, 0xfc, 0xec, 0xe9, 0xc3, 0x02, 0x2b, 0x4b, 0x0b,
+ 0xca, 0x0a, 0x4a, 0xbe, 0x14, 0x0a, 0xe9, 0x37, 0xa3, 0xbb, 0xb6, 0x3a, 0xd7,
+ 0x27, 0xb0, 0x05, 0xfe, 0xff, 0xe4, 0x0f, 0x8f, 0xf8, 0x19, 0x9e, 0xcc, 0xe9,
+ 0x46, 0xf8, 0xb9, 0xf7, 0xc5, 0xab, 0xfa, 0x09, 0x60, 0x24, 0xc8, 0x15, 0xa0,
+ 0x25, 0x07, 0xc6, 0xd3, 0xda, 0xf1, 0x3a, 0x2b, 0xd7, 0xe4, 0x18, 0xee, 0x54,
+ 0x1a, 0x03, 0x16, 0x18, 0xb6, 0xfb, 0xd9, 0x3f, 0x00, 0x09, 0x28, 0xe3, 0xdf,
+ 0xc9, 0x2c, 0x85, 0xf3, 0xf6, 0x16, 0xdc, 0xee, 0x0d, 0xfa, 0x2f, 0xf4, 0xde,
+ 0x1d, 0xd9, 0xd9, 0x36, 0x23, 0xd5, 0xec, 0x0f, 0x05, 0x00, 0x30, 0x3a, 0xdc,
+ 0x20, 0xcd, 0xb6, 0x45, 0x99, 0xca, 0x0c, 0x4a, 0x31, 0x12, 0xd8, 0xfa, 0xfd,
+ 0x17, 0x82, 0xbd, 0x06, 0xe3, 0x25, 0xbc, 0x37, 0xdc, 0xdf, 0xc2, 0xcb, 0x34,
+ 0xe4, 0xf9, 0xb7, 0xf4, 0x0d, 0x9b, 0xe3, 0xd2, 0x81, 0xd9, 0x46, 0xce, 0xae,
+ 0xb0, 0x68, 0xe0, 0x06, 0xec, 0xfd, 0x0e, 0x37, 0x0a, 0x24, 0x18, 0x0d, 0x13,
+ 0xa7, 0xdb, 0x02, 0x86, 0xb0, 0x25, 0xed, 0xcf, 0x01, 0xf5, 0xd2, 0xd5, 0xf1,
+ 0xf1, 0xf6, 0xc6, 0xd9, 0xda, 0xc8, 0x11, 0x28, 0x22, 0xae, 0xf9, 0x07, 0xe1,
+ 0xdb, 0xfc, 0x0b, 0x88, 0xd0, 0x02, 0xca, 0xe7, 0xfc, 0xd1, 0xb1, 0x10, 0x03,
+ 0x48, 0x08, 0xfd, 0x44, 0x35, 0x0b, 0xd7, 0x23, 0xf6, 0x19, 0xfe, 0x01, 0xf3,
+ 0x2e, 0xd5, 0x30, 0x45, 0x3e, 0x48, 0xb6, 0x19, 0x09, 0xf7, 0x07, 0x14, 0x20,
+ 0xfd, 0xd6, 0xd9, 0x23, 0x0f, 0x11, 0x02, 0x3f, 0xc6, 0xec, 0x24, 0x07, 0xe2,
+ 0xd9, 0xeb, 0xfd, 0xf9, 0xd4, 0x12, 0x14, 0x1d, 0x29, 0x1e, 0x29, 0x0b, 0xad,
+ 0x1e, 0x2d, 0x0a, 0xd6, 0xd7, 0xfb, 0x33, 0x30, 0xd0, 0xc7, 0xf3, 0x3f, 0xf4,
+ 0xf0, 0xe1, 0x46, 0x16, 0x55, 0xf9, 0x3e, 0xc9, 0x19, 0x1c, 0xec, 0xf2, 0xeb,
+ 0x9a, 0xc4, 0xf1, 0x05, 0xce, 0xe6, 0xea, 0xf5, 0xd0, 0x08, 0x25, 0x22, 0xdf,
+ 0xf7, 0xcd, 0xb2, 0x02, 0xfc, 0xce, 0xc8, 0xd1, 0xa6, 0x33, 0x02, 0x07, 0x21,
+ 0xf2, 0xb1, 0xd8, 0xef, 0xe0, 0xc2, 0xd6, 0xf7, 0xfd, 0xce, 0xc4, 0x08, 0xce,
+ 0x2d, 0x0e, 0x98, 0xff, 0xcb, 0xf3, 0xda, 0x40, 0x15, 0xf3, 0x10, 0xf7, 0xe1,
+ 0xc4, 0xe0, 0xc8, 0x10, 0xf3, 0xfc, 0x27, 0xc2, 0x1a, 0xc3, 0x18, 0xdf, 0xce,
+ 0xa5, 0xd0, 0x42, 0x24, 0xd5, 0x0f, 0xe6, 0xf8, 0xf8, 0xf1, 0x15, 0xf1, 0xbb,
+ 0x1b, 0xc1, 0x05, 0xfb, 0x41, 0xba, 0xf0, 0xce, 0x01, 0x43, 0xe6, 0xf2, 0x2d,
+ 0xea, 0xba, 0xde, 0xd4, 0x09, 0x04, 0xfc, 0xff, 0xdd, 0xcd, 0x21, 0x09, 0xfd,
+ 0x2b, 0xfa, 0xf5, 0xf7, 0x2b, 0xfe, 0x13, 0xd6, 0x07, 0x86, 0x33, 0xe8, 0x13,
+ 0x0f, 0x03, 0xcf, 0xa3, 0xc1, 0x0d, 0x08, 0x2b, 0xd6, 0xe0, 0xce, 0x0a, 0xf5,
+ 0xf3, 0x04, 0xdf, 0xb0, 0xe9, 0xf4, 0x13, 0xfb, 0xa8, 0xd9, 0xd9, 0xfe, 0x0f,
+ 0xbe, 0xc9, 0x25, 0x35, 0x03, 0xcf, 0xe3, 0xe0, 0xf0, 0x56, 0x0e, 0xf1, 0x2b,
+ 0x1e, 0xf0, 0x07, 0xf0, 0x15, 0x9e, 0xc6, 0xf2, 0xfc, 0x1e, 0xa6, 0xb1, 0xed,
+ 0x2a, 0x25, 0x22, 0x32, 0x13, 0xbf, 0xc3, 0x0d, 0x18, 0xd3, 0xf6, 0x02, 0x02,
+ 0xe3, 0x22, 0x76, 0xfd, 0xdd, 0xdd, 0xed, 0xde, 0xe4, 0xd9, 0xa0, 0x26, 0xdb,
+ 0xbd, 0xf1, 0x1a, 0xae, 0xf7, 0xd3, 0xc0, 0xf1, 0xc7, 0xf3, 0xc9, 0xfe, 0x31,
+ 0x84, 0xb1, 0xc5, 0x46, 0xf4, 0xfc, 0x49, 0xf5, 0xcf, 0x16, 0xe8, 0xef, 0xe1,
+ 0x0a, 0xfd, 0xcd, 0xd1, 0xff, 0xf3, 0xf1, 0xf7, 0xf5, 0xec, 0xc5, 0x11, 0xd7,
+ 0xd4, 0x15, 0x13, 0xae, 0xe5, 0xe7, 0x34, 0xdb, 0x0f, 0x1b, 0x23, 0x9b, 0xc9,
+ 0xbf, 0xdd, 0x7f, 0xfa, 0x00, 0x04, 0xbc, 0xa6, 0xcb, 0xf2, 0x0e, 0xbc, 0xec,
+ 0x96, 0xeb, 0xf9, 0xe8, 0xe0, 0x1d, 0x97, 0xfa, 0xf0, 0xfc, 0xf3, 0x19, 0xd1,
+ 0x1c, 0x1b, 0xd9, 0xf0, 0xb2, 0x1f, 0xd0, 0x1e, 0x2b, 0xfc, 0x00, 0xe1, 0x0d,
+ 0x19, 0xf1, 0xf9, 0x08, 0xeb, 0xcd, 0xca, 0xed, 0xbf, 0xdb, 0x08, 0x2f, 0x0e,
+ 0xeb, 0x9f, 0xc9, 0xc4, 0x1c, 0x0b, 0xce, 0xbf, 0x28, 0x09, 0x0d, 0x3e, 0x29,
+ 0xc5, 0x18, 0x30, 0xf1, 0x4b, 0xed, 0xff, 0xe2, 0xec, 0xf0, 0x09, 0xd4, 0x6c,
+ 0x39, 0xcd, 0x21, 0xd3, 0x5b, 0x0f, 0x0c, 0xd1, 0xf2, 0x2d, 0xe3, 0x0d, 0xdd,
+ 0x07, 0xb1, 0x33, 0xe5, 0xb9, 0x1b, 0xc7, 0x04, 0x10, 0xf4, 0xc2, 0x4d, 0x16,
+ 0x98, 0xe1, 0x1c, 0xe4, 0x31, 0xfb, 0xe0, 0x00, 0x07, 0x43, 0x0e, 0xe2, 0xde,
+ 0xd4, 0xb1, 0x14, 0xec, 0x7f, 0xdc, 0xf2, 0xee, 0xc4, 0xd4, 0x53, 0x19, 0xe3,
+ 0xfb, 0xf1, 0xdb, 0xb4, 0x06, 0xb9, 0xc3, 0x16, 0x06, 0xfb, 0x00, 0xd0, 0xc9,
+ 0xee, 0x04, 0x50, 0x42, 0xaa, 0xbd, 0xbb, 0xe1, 0xde, 0x1c, 0xfc, 0xe2, 0xcf,
+ 0xb4, 0x0f, 0xeb, 0xff, 0x88, 0x4f, 0x0f, 0x9c, 0xd3, 0xe2, 0xd7, 0xdb, 0x18,
+ 0x1d, 0xfc, 0xef, 0xca, 0x31, 0xfc, 0x1b, 0x1b, 0xa6, 0xdd, 0xfd, 0xfc, 0x0b,
+ 0x4a, 0x0f, 0x1c, 0xda, 0x8d, 0x3b, 0x1b, 0xe7, 0x0d, 0xde, 0xd1, 0x15, 0x11,
+ 0xcf, 0x0b, 0x29, 0x19, 0x03, 0x31, 0xf0, 0x5a, 0xf0, 0xc4, 0xdd, 0x3e, 0x25,
+ 0xfd, 0xd3, 0xdc, 0xe8, 0xda, 0xb8, 0xc7, 0xff, 0xe6, 0xf2, 0xc7, 0x07, 0xd5,
+ 0x1f, 0xfa, 0xc4, 0x36, 0xb4, 0x2f, 0xe1, 0xd5, 0xfb, 0x15, 0x1b, 0x08, 0xee,
+ 0xda, 0xd2, 0xec, 0xbc, 0x0f, 0x1a, 0xc3, 0xeb, 0xec, 0xfa, 0x0f, 0xc9, 0x3c,
+ 0x5b, 0x00, 0x33, 0xfd, 0x01, 0x1d, 0xcc, 0xe2, 0x3b, 0x43, 0xcd, 0x56, 0x39,
+ 0x09, 0x0e, 0xc3, 0xd1, 0xfd, 0xbb, 0x30, 0xdb, 0x53, 0x1a, 0xb4, 0x2f, 0x11,
+ 0xfc, 0x13, 0x2f, 0xeb, 0xc8, 0xd3, 0x26, 0xf7, 0x24, 0x1f, 0xd0, 0xe5, 0xdc,
+ 0x36, 0xec, 0xd1, 0x2f, 0xc8, 0x28, 0xe4, 0xd1, 0x52, 0x24, 0x24, 0xe5, 0xf2,
+ 0x0b, 0xc4, 0xf5, 0xcf, 0x38, 0xdc, 0x2a, 0x26, 0xe6, 0xdc, 0xc0, 0xec, 0xd8,
+ 0xda, 0xf7, 0xd1, 0xf7, 0xfb, 0x06, 0xf7, 0xd7, 0x19, 0x2b, 0xf4, 0xff, 0xf8,
+ 0x19, 0xd2, 0xe4, 0xba, 0x1b, 0xd7, 0x1b, 0x22, 0xfc, 0x53, 0xef, 0xee, 0x21,
+ 0x9d, 0xe3, 0xf0, 0x14, 0xe7, 0xa4, 0x0e, 0x0a, 0xd5, 0x23, 0x1a, 0x2b, 0xe5,
+ 0x1a, 0x14, 0x0b, 0xf1, 0xe7, 0xe6, 0xdd, 0x09, 0x0f, 0x03, 0xeb, 0x09, 0x18,
+ 0x19, 0x31, 0xae, 0xf0, 0x29, 0x09, 0x0a, 0xe2, 0xe5, 0xe3, 0xcc, 0xfb, 0x02,
+ 0x03, 0xa9, 0xee, 0x18, 0xf0, 0xfe, 0xca, 0xed, 0xd2, 0xfb, 0xf4, 0xe2, 0xf7,
+ 0x05, 0x07, 0xdc, 0xf0, 0xf1, 0xe5, 0x11, 0x26, 0xc3, 0xaf, 0x0f, 0xf6, 0x0f,
+ 0x25, 0xc2, 0xd8, 0x10, 0x11, 0x1f, 0x19, 0x05, 0xfa, 0xfb, 0xd2, 0xe9, 0xf8,
+ 0xcc, 0xb5, 0xf3, 0xdb, 0xc8, 0x4a, 0xe7, 0xf7, 0x1b, 0x1a, 0x2c, 0xfa, 0xcd,
+ 0x00, 0x23, 0x33, 0xce, 0xb3, 0x13, 0xa8, 0x01, 0xc5, 0x0d, 0x32, 0xee, 0xe2,
+ 0xef, 0x25, 0xcd, 0xe8, 0xf3, 0x18, 0xe0, 0xf0, 0x2a, 0xde, 0x7f, 0x4a, 0xac,
+ 0x1a, 0x04, 0x17, 0x01, 0xe8, 0xdb, 0xdc, 0x2a, 0xf0, 0xe4, 0x11, 0x01, 0x2c,
+ 0x09, 0x16, 0x0f, 0xda, 0x40, 0xd8, 0x1d, 0x12, 0x0c, 0x10, 0x3a, 0xe6, 0xef,
+ 0x22, 0xd6, 0xad, 0xda, 0x53, 0x0b, 0x20, 0x26, 0x15, 0xb9, 0x1b, 0xe0, 0x37,
+ 0x09, 0xd2, 0xf3, 0xf9, 0xd7, 0xc4, 0x16, 0xcf, 0xdc, 0x16, 0xec, 0x1c, 0x23,
+ 0xc5, 0xe9, 0xe5, 0xca, 0x20, 0xb9, 0x10, 0xe7, 0x10, 0x51, 0x0f, 0xdd, 0x4f,
+ 0x21, 0x16, 0x28, 0xc1, 0xb8, 0xe3, 0x06, 0xe0, 0x12, 0x0a, 0xb5, 0x0c, 0x39,
+ 0x27, 0xe2, 0x02, 0x00, 0xbb, 0x4b, 0x0b, 0xaa, 0xc7, 0xf6, 0x47, 0x2d, 0xdf,
+ 0x0d, 0xfd, 0xf8, 0xba, 0xf0, 0xe9, 0x08, 0xdd, 0x00, 0xe4, 0xf2, 0xf6, 0xec,
+ 0x04, 0xc0, 0x36, 0x19, 0xd0, 0x03, 0xf9, 0xaf, 0xbc, 0xf0, 0xda, 0x21, 0xe7,
+ 0xc9, 0xba, 0x4f, 0xa7, 0xcc, 0xf8, 0x2f, 0xe5, 0x71, 0xe8, 0x0a, 0x38, 0xc5,
+ 0x15, 0xdb, 0x0f, 0x10, 0xff, 0x30, 0x02, 0xe3, 0x35, 0x0e, 0xf5, 0x24, 0xfa,
+ 0x32, 0xc9, 0x49, 0xf0, 0xf7, 0x1a, 0xf5, 0x0a, 0xd3, 0xb4, 0xe9, 0x0a, 0xcc,
+ 0x0e, 0xc0, 0xd7, 0xf4, 0x0e, 0x35, 0x1b, 0xcd, 0xf0, 0xc6, 0x01, 0x26, 0xba,
+ 0x10, 0xe3, 0x4b, 0x39, 0x2e, 0xbe, 0xfc, 0xd3, 0xfb, 0xf0, 0x10, 0x3a, 0xbf,
+ 0x09, 0xc3, 0xb3, 0xd0, 0xcb, 0xf6, 0x42, 0x06, 0x0a, 0xea, 0xca, 0x1c, 0x19,
+ 0x35, 0x2c, 0xdf, 0xed, 0x0e, 0x09, 0xfe, 0x08, 0x03, 0xde, 0xbb, 0xe3, 0xe6,
+ 0xc6, 0x2e, 0xff, 0xe2, 0xe7, 0x0c, 0x1f, 0xce, 0xf2, 0x05, 0xbc, 0xdc, 0xfe,
+ 0xed, 0x1b, 0x24, 0xa3, 0xe9, 0xd6, 0x0f, 0x20, 0x7f, 0x01, 0xed, 0x03, 0x3e,
+ 0xd9, 0xdd, 0x0a, 0xf8, 0x3e, 0xe6, 0xd5, 0xf6, 0xfc, 0xe4, 0xc9, 0xf3, 0xdd,
+ 0xba, 0x04, 0x1a, 0x04, 0x30, 0x26, 0xe1, 0xda, 0x49, 0xe1, 0xab, 0xfa, 0x22,
+ 0xe6, 0xc6, 0x0e, 0xe3, 0xd8, 0x1a, 0x1b, 0xd4, 0xd7, 0xfa, 0x20, 0xee, 0xf5,
+ 0xf9, 0x16, 0x0b, 0xdd, 0xd2, 0x12, 0xff, 0x51, 0xec, 0xf7, 0xdd, 0xb1, 0xec,
+ 0xe2, 0xfe, 0xfb, 0xd3, 0x38, 0xd2, 0xfc, 0xb7, 0xee, 0x0d, 0xf0, 0xe7, 0xed,
+ 0xce, 0x1b, 0x2e, 0x2a, 0x24, 0xe3, 0xeb, 0x30, 0x03, 0x0e, 0xd0, 0x04, 0xdd,
+ 0x3b, 0xdf, 0x49, 0x1d, 0xe5, 0x05, 0xeb, 0x07, 0xcb, 0x24, 0x23, 0xc2, 0xed,
+ 0xf4, 0xeb, 0xc6, 0xb7, 0x5c, 0xf0, 0xe7, 0x69, 0xf7, 0x05, 0x16, 0xc1, 0xdb,
+ 0xfa, 0x2b, 0xe1, 0x19, 0xe2, 0xa7, 0x0a, 0xb7, 0xf0, 0x40, 0xd2, 0xc1, 0xb8,
+ 0x2f, 0xc3, 0xeb, 0xcd, 0xf9, 0xe2, 0xfd, 0x0f, 0x0a, 0xe3, 0x18, 0x19, 0xa5,
+ 0x0d, 0xed, 0xf0, 0xcc, 0xe8, 0xed, 0xf3, 0x2a, 0x09, 0xb1, 0xf7, 0xd9, 0x3d,
+ 0xf6, 0x42, 0xff, 0x31, 0xdf, 0x09, 0xd0, 0x1b, 0xb8, 0xd6, 0xeb, 0x48, 0xfd,
+ 0x00, 0xb7, 0x05, 0xf7, 0x12, 0x01, 0x1a, 0x05, 0xcc, 0xf3, 0xe6, 0xeb, 0xcf,
+ 0x1f, 0xc5, 0x23, 0x00, 0x33, 0xbd, 0xf7, 0xd9, 0xb7, 0x18, 0xec, 0xa7, 0xee,
+ 0xf4, 0xb4, 0xf2, 0x01, 0xc7, 0x1e, 0x1b, 0xf2, 0xc7, 0x0a, 0x07, 0x17, 0x1c,
+ 0xbf, 0xc8, 0x32, 0x1a, 0x1c, 0xe7, 0x96, 0xf6, 0xfd, 0x34, 0x0e, 0xf8, 0xf2,
+ 0x10, 0x14, 0xdb, 0x02, 0x2c, 0xed, 0xef, 0x18, 0xe4, 0x16, 0xdd, 0xd9, 0xea,
+ 0xf2, 0x1c, 0x24, 0x13, 0x07, 0x17, 0xe1, 0x1d, 0xe9, 0xd2, 0xbe, 0xe6, 0xfe,
+ 0x30, 0x3e, 0x1a, 0x2f, 0x0a, 0x06, 0xdb, 0x01, 0xe0, 0x16, 0xb3, 0x1a, 0x1f,
+ 0xd4, 0x05, 0xea, 0xfd, 0xcb, 0x13, 0x08, 0xb8, 0x2a, 0xb6, 0xf8, 0xeb, 0x29,
+ 0x22, 0x3b, 0x2e, 0xf2, 0xe7, 0x10, 0xea, 0xd3, 0xf2, 0xf5, 0x14, 0x17, 0x03,
+ 0x29, 0x17, 0xe5, 0xfb, 0xf1, 0xc7, 0xd3, 0xb9, 0x10, 0x06, 0xcf, 0x96, 0xeb,
+ 0x13, 0x02, 0xd7, 0x42, 0xfd, 0xb8, 0xf0, 0xf3, 0xf9, 0x07, 0xc3, 0xe9, 0xf4,
+ 0x1a, 0xd5, 0xf0, 0xbf, 0x24, 0xd6, 0x17, 0xe4, 0xd6, 0x0e, 0x0d, 0xe8, 0x0e,
+ 0x0a, 0x44, 0xef, 0xad, 0x0f, 0xeb, 0x3b, 0xd2, 0x33, 0x32, 0xc8, 0xf5, 0x2c,
+ 0x47, 0xcb, 0x1c, 0x2a, 0xee, 0x31, 0x81, 0xd0, 0xe2, 0xdb, 0x10, 0xdb, 0x31,
+ 0xfd, 0xe6, 0x16, 0xc6, 0x40, 0xdb, 0x26, 0xf4, 0xfe, 0x2e, 0xe8, 0xc0, 0xf7,
+ 0x1a, 0xbb, 0xd5, 0x0f, 0x35, 0xfd, 0xf8, 0xee, 0xbc, 0x06, 0xd0, 0x0e, 0xd5,
+ 0xc6, 0xf9, 0xbe, 0xf5, 0xbe, 0xc8, 0xf0, 0x11, 0xfc, 0xe6, 0x01, 0xf9, 0xe7,
+ 0x1e, 0x27, 0xdb, 0xdb, 0xdd, 0x10, 0x1c, 0xee, 0x0f, 0x06, 0xdc, 0x2b, 0x1d,
+ 0xfc, 0x35, 0xf8, 0x43, 0x07, 0x05, 0xc2, 0x17, 0x36, 0xe8, 0x12, 0x13, 0x08,
+ 0xfd, 0xf0, 0xb3, 0xcf, 0x4f, 0xe5, 0xea, 0x2e, 0xfd, 0xfa, 0xe7, 0x26, 0x1f,
+ 0xee, 0xe7, 0x2f, 0xe0, 0x0c, 0x1c, 0x29, 0x11, 0x16, 0x25, 0xe4, 0x1e, 0x14,
+ 0x00, 0xfe, 0xd5, 0xf7, 0xe3, 0xe7, 0x13, 0xc0, 0xf5, 0xc0, 0x24, 0x0a, 0xed,
+ 0xf9, 0xe0, 0xc6, 0xe5, 0x10, 0x0e, 0xe6, 0xda, 0x16, 0x1b, 0x11, 0xf9, 0xf5,
+ 0xf1, 0xd2, 0xe8, 0xd3, 0x02, 0xd6, 0xde, 0x07, 0x1f, 0x07, 0xdc, 0xc8, 0x00,
+ 0x07, 0xe9, 0x40, 0x16, 0xef, 0xfa, 0xfa, 0xe3, 0x0d, 0xef, 0xdc, 0x2e, 0x03,
+ 0xf5, 0xc9, 0xc5, 0xda, 0xbb, 0xea, 0xb0, 0xd3, 0xfd, 0x0e, 0x02, 0x05, 0xf2,
+ 0xdf, 0x18, 0x94, 0xe5, 0xf1, 0xea, 0x0a, 0x08, 0x3e, 0xdf, 0xe5, 0xd2, 0x1a,
+ 0xb9, 0xea, 0xe4, 0x25, 0x33, 0x24, 0x2c, 0x05, 0x14, 0x7f, 0xef, 0xef, 0x2d,
+ 0xf1, 0xe5, 0x15, 0xdf, 0xf7, 0xa0, 0x2f, 0xf4, 0xfb, 0x10, 0x0d, 0xd4, 0x00,
+ 0x07, 0xde, 0x33, 0xed, 0x14, 0xff, 0xfa, 0xe2, 0x51, 0xea, 0xa5, 0x2c, 0x16,
+ 0x0c, 0x1d, 0x01, 0xcf, 0xdd, 0xf6, 0xef, 0x1f, 0x12, 0x5a, 0x19, 0xc4, 0xee,
+ 0x07, 0xdf, 0xc3, 0x6a, 0xed, 0xdf, 0x49, 0x30, 0x2d, 0x08, 0x02, 0x0b, 0xf1,
+ 0xdd, 0xfc, 0x15, 0xd0, 0xbd, 0x03, 0x1c, 0xef, 0xdd, 0xe7, 0xba, 0x47, 0x45,
+ 0xb9, 0xbe, 0xd6, 0x2e, 0xcc, 0xab, 0xbc, 0x06, 0xe8, 0x07, 0xdf, 0x0f, 0xd9,
+ 0x07, 0x06, 0x1a, 0xb2, 0xe2, 0x25, 0xfd, 0xfa, 0x0d, 0x16, 0x04, 0xfa, 0x2b,
+ 0xda, 0x1a, 0x0e, 0xb7, 0xc5, 0xef, 0xbd, 0xe0, 0x85, 0xdb, 0x03, 0xf3, 0xd5,
+ 0xf7, 0x91, 0xc6, 0xad, 0x0e, 0xc6, 0xed, 0xea, 0x0f, 0xfb, 0xd1, 0xaf, 0x03,
+ 0x24, 0x26, 0x3e, 0xe2, 0x55, 0xe7, 0xd2, 0xe7, 0xbb, 0x01, 0xc2, 0x42, 0x23,
+ 0xe0, 0x24, 0x11, 0xb8, 0x55, 0xf8, 0x9d, 0xf4, 0xe4, 0x2d, 0x04, 0x8b, 0x29,
+ 0xca, 0xff, 0x1c, 0xfe, 0xd3, 0x3f, 0x30, 0x07, 0x4b, 0xfe, 0x2e, 0xb9, 0xff,
+ 0x2a, 0x59, 0x4e, 0xed, 0xcb, 0x01, 0xcc, 0x09, 0x2e, 0x42, 0x1c, 0xaf, 0x46,
+ 0xc9, 0xee, 0x9f, 0xc6, 0xbb, 0xeb, 0xbd, 0x11, 0x3e, 0xef, 0xef, 0x36, 0xa7,
+ 0xde, 0xc4, 0xc8, 0xee, 0x8d, 0xbc, 0x3b, 0xdd, 0x49, 0xe1, 0xb5, 0xc0, 0xe2,
+ 0xe3, 0x29, 0xd1, 0xfe, 0x1a, 0x03, 0x95, 0xe6, 0xe6, 0xca, 0xfd, 0xe6, 0x1b,
+ 0xf1, 0x14, 0x12, 0xed, 0xf0, 0x00, 0xc6, 0x2f, 0x02, 0xb7, 0x26, 0xf7, 0x9d,
+ 0x27, 0x91, 0xf7, 0x54, 0x38, 0xba, 0xea, 0xf8, 0xfc, 0xd9, 0xab, 0x37, 0x07,
+ 0x8e, 0xf2, 0x31, 0x0c, 0x1e, 0xd6, 0x0a, 0x09, 0xef, 0x81, 0x1c, 0xbc, 0x08,
+ 0x13, 0xe6, 0xf8, 0xb2, 0xdd, 0x11, 0x51, 0xe4, 0x50, 0xcc, 0xa9, 0x35, 0xf8,
+ 0x3c, 0x97, 0xd4, 0xce, 0xea, 0xf6, 0xe2, 0xd4, 0x58, 0xf4, 0xb6, 0x42, 0xe5,
+ 0x33, 0x4a, 0xfc, 0xdd, 0x35, 0x2a, 0xa3, 0x28, 0xe9, 0x5a, 0xa5, 0xe0, 0xf2,
+ 0xe5, 0x06, 0x23, 0x2e, 0x59, 0xdc, 0x3a, 0xec, 0x26, 0x2f, 0x32, 0xc9, 0xec,
+ 0xc4, 0x08, 0x0c, 0xcd, 0xe6, 0x5d, 0x39, 0x95, 0xd7, 0xc7, 0x34, 0x29, 0xcb,
+ 0xf3, 0xe6, 0xfc, 0x0c, 0xf2, 0xd6, 0xd8, 0x3f, 0x2b, 0x1e, 0x15, 0xf4, 0x0c,
+ 0x51, 0x05, 0x2b, 0x26, 0xd3, 0x08, 0x28, 0x07, 0xf5, 0xff, 0x24, 0x42, 0x0a,
+ 0xb4, 0x1e, 0xab, 0x2a, 0x18, 0x53, 0x94, 0xd3, 0xf6, 0xfa, 0x59, 0x47, 0xbb,
+ 0xd7, 0xd5, 0xbb, 0x53, 0xfd, 0xf3, 0xd7, 0xf8, 0xe0, 0x09, 0x37, 0x03, 0xc4,
+ 0x41, 0x5b, 0xc4, 0xdf, 0xef, 0xbf, 0x35, 0xbf, 0x29, 0xb8, 0xec, 0xac, 0xf9,
+ 0x9c, 0xc6, 0x29, 0xf4, 0xb1, 0xd4, 0x14, 0x79, 0x56, 0xdf, 0xf2, 0x2e, 0xfe,
+ 0x6c, 0xc2, 0xdc, 0xc7, 0x2e, 0x08, 0xca, 0xbf, 0x02, 0xc3, 0x2f, 0xdf, 0x1f,
+ 0xf1, 0xa6, 0xfb, 0xf7, 0x25, 0x04, 0x72, 0xe5, 0x00, 0x1c, 0xe0, 0x32, 0xd1,
+ 0x6b, 0xe4, 0xb7, 0xbe, 0x06, 0x52, 0xc4, 0x5a, 0x4c, 0x15, 0x15, 0xd5, 0xe0,
+ 0x35, 0x8c, 0x30, 0xcd, 0xc5, 0xfb, 0xdb, 0xd0, 0x2e, 0xc6, 0x23, 0x32, 0x06,
+ 0xd5, 0xbc, 0xad, 0x13, 0xc6, 0x41, 0x29, 0xe2, 0x29, 0xe3, 0x25, 0x00, 0x24,
+ 0x01, 0x3a, 0xe9, 0xdf, 0xd8, 0x16, 0x37, 0xcf, 0xff, 0x03, 0xe9, 0x06, 0x20,
+ 0xe2, 0x3c, 0xd1, 0xcc, 0x26, 0xe8, 0xc2, 0xd6, 0x0d, 0x35, 0x08, 0xae, 0x13,
+ 0x47, 0x1b, 0xe6, 0x46, 0x49, 0x34, 0x36, 0x9a, 0xf9, 0x56, 0xdb, 0xc1, 0x36,
+ 0x3a, 0xd6, 0xcd, 0xca, 0xad, 0xb7, 0xa3, 0x2c, 0xa3, 0xe2, 0x0a, 0xe8, 0xf4,
+ 0x38, 0x47, 0xca, 0xf7, 0x0e, 0xb1, 0x15, 0x2a, 0xe8, 0xe5, 0x65, 0x3a, 0x01,
+ 0x54, 0x4a, 0x2d, 0xfc, 0x33, 0x23, 0x07, 0x81, 0xc3, 0xa2, 0xda, 0x05, 0x08,
+ 0x02, 0x57, 0x0d, 0xe4, 0xd4, 0xc8, 0xce, 0x2b, 0xc2, 0x38, 0x04, 0xd4, 0xdf,
+ 0xbb, 0x07, 0x0b, 0xce, 0xb6, 0xf5, 0x01, 0xd6, 0x4a, 0x01, 0x41, 0x4b, 0xd3,
+ 0xf4, 0x3d, 0x3f, 0x0d, 0x1c, 0xeb, 0xe6, 0x68, 0x07, 0x04, 0x19, 0x9b, 0xbb,
+ 0xfb, 0xfc, 0xd0, 0x03, 0x01, 0xbd, 0xf3, 0xa3, 0xcf, 0xc5, 0x2c, 0x15, 0xf3,
+ 0x6c, 0x34, 0xfa, 0xed, 0x17, 0x0f, 0x1b, 0xe7, 0xe1, 0x11, 0x34, 0xad, 0xfd,
+ 0x90, 0x00, 0x12, 0x50, 0x06, 0xf0, 0xa3, 0x12, 0xbf, 0xbe, 0x00, 0x20, 0x49,
+ 0xed, 0xe7, 0xde, 0x07, 0xd0, 0x12, 0x1b, 0xba, 0xab, 0x26, 0x34, 0xaa, 0x27,
+ 0xb2, 0x37, 0x02, 0xf8, 0x07, 0x07, 0xf3, 0x02, 0xf8, 0xd5, 0x27, 0xdb, 0x2b,
+ 0xc8, 0x2a, 0xd4, 0x36, 0x0d, 0xd6, 0xe5, 0x37, 0xec, 0x6b, 0x2a, 0x0f, 0xb4,
+ 0x58, 0xdc, 0xc7, 0x30, 0xea, 0xc5, 0x06, 0xcb, 0x22, 0x16, 0xd2, 0xf7, 0x14,
+ 0xff, 0xe5, 0x3b, 0x01, 0xee, 0x2e, 0xcf, 0x06, 0xcd, 0x7f, 0x11, 0xf8, 0xc6,
+ 0x04, 0x3e, 0xd8, 0x22, 0xd0, 0x02, 0xe1, 0xa0, 0xcf, 0x2f, 0xbb, 0x3f, 0x2c,
+ 0xe8, 0x34, 0x17, 0xbc, 0x21, 0xf6, 0xc7, 0x49, 0xf2, 0x0d, 0xb5, 0xed, 0xbb,
+ 0xce, 0x00, 0xbf, 0xb1, 0xfb, 0xc5, 0x53, 0x06, 0x13, 0xb2, 0xfb, 0x06, 0xd7,
+ 0xee, 0x5a, 0x0f, 0xeb, 0xa8, 0xe7, 0xfd, 0x0f, 0x16, 0xf1, 0xe1, 0x37, 0x9f,
+ 0x38, 0xed, 0xf0, 0xd3, 0x24, 0x2f, 0xaa, 0xef, 0xf8, 0x01, 0xfe, 0x47, 0xfb,
+ 0x27, 0x0a, 0xdf, 0xa2, 0xf7, 0xd2, 0x20, 0xac, 0x2e, 0x0e, 0xea, 0xc7, 0xfb,
+ 0xcf, 0x43, 0xed, 0x93, 0xc5, 0x00, 0x22, 0x2d, 0x57, 0x61, 0x02, 0xfc, 0xda,
+ 0x23, 0xec, 0xf1, 0x13, 0x44, 0xef, 0x2b, 0xeb, 0x12, 0x73, 0xcd, 0xe4, 0x00,
+ 0xe9, 0x5d, 0xe6, 0xcb, 0xc5, 0xd6, 0xec, 0xe4, 0x20, 0xec, 0xb0, 0x52, 0xb4,
+ 0xb7, 0xd1, 0xd1, 0xc8, 0xb7, 0x14, 0xd9, 0xba, 0xfe, 0xbc, 0x14, 0x1c, 0xe1,
+ 0xa5, 0xf1, 0xb1, 0xe0, 0xd8, 0xe7, 0xbe, 0xfc, 0xf2, 0xcf, 0x09, 0x27, 0xdd,
+ 0x02, 0xe4, 0x12, 0x4d, 0xcd, 0x21, 0x12, 0xac, 0xe8, 0x06, 0xee, 0xce, 0x46,
+ 0xdc, 0xde, 0x0f, 0xf4, 0xf2, 0xf1, 0xba, 0xd1, 0xe6, 0x36, 0xda, 0x3c, 0xfb,
+ 0xdb, 0xc9, 0x00, 0xdd, 0xfe, 0xc3, 0xe7, 0xa6, 0xc5, 0xba, 0x22, 0xee, 0xe3,
+ 0xa6, 0x43, 0x00, 0xdd, 0xd8, 0xe4, 0x24, 0x13, 0xfc, 0x0d, 0x09, 0xde, 0xcd,
+ 0xca, 0xfe, 0xff, 0x07, 0xe7, 0xd6, 0xaa, 0x06, 0xdd, 0xd9, 0x34, 0xcc, 0x1a,
+ 0x45, 0xd9, 0xe9, 0xec, 0xef, 0xfb, 0xdd, 0xee, 0xf6, 0x1d, 0x08, 0xfc, 0xdd,
+ 0xd4, 0x25, 0xaa, 0x0c, 0xee, 0x03, 0xaf, 0x02, 0x52, 0xcf, 0x01, 0xb8, 0xed,
+ 0xb6, 0x17, 0x4a, 0x1e, 0x25, 0x13, 0xba, 0xc9, 0xfa, 0xec, 0x0c, 0x16, 0xcf,
+ 0xcc, 0xe4, 0x02, 0xf8, 0xf0, 0x45, 0xea, 0x04, 0xee, 0xeb, 0x09, 0x3b, 0x35,
+ 0xc5, 0x06, 0xc0, 0x0b, 0xd1, 0xd2, 0xf7, 0x28, 0x10, 0x14, 0x2c, 0xe6, 0x19,
+ 0xd1, 0xf6, 0xec, 0x17, 0xd3, 0xda, 0x44, 0x47, 0x00, 0xdc, 0x15, 0x0e, 0xf5,
+ 0xdd, 0xdd, 0xed, 0x55, 0xa2, 0x06, 0xf5, 0xff, 0x07, 0x3f, 0xc8, 0xbb, 0xf7,
+ 0xe9, 0xe9, 0xcd, 0xba, 0x04, 0xd7, 0x00, 0x25, 0x15, 0x23, 0x77, 0x06, 0xbd,
+ 0x50, 0xc3, 0xd9, 0xcf, 0x30, 0xe2, 0xaf, 0xc0, 0x2b, 0xbd, 0x17, 0x05, 0xe9,
+ 0x51, 0xfe, 0x08, 0x26, 0x25, 0xdf, 0xe7, 0xfc, 0xb6, 0x02, 0xd8, 0x0c, 0xd3,
+ 0xe1, 0xf5, 0x20, 0xd7, 0x40, 0x11, 0x02, 0x14, 0xe9, 0xe2, 0xbe, 0xe6, 0x1e,
+ 0x14, 0xdc, 0xfa, 0x03, 0x27, 0xcb, 0xf9, 0x21, 0x08, 0x17, 0x1b, 0x04, 0x26,
+ 0xf4, 0xf1, 0xd6, 0xc2, 0xca, 0xfa, 0xfe, 0x2d, 0xf7, 0xdd, 0xd9, 0xe4, 0x3a,
+ 0x00, 0x35, 0x0f, 0xfc, 0xf4, 0x18, 0x08, 0xdf, 0x1d, 0x10, 0x48, 0xb3, 0xdf,
+ 0x1e, 0x0d, 0x00, 0x19, 0xb3, 0x3f, 0x7f, 0x1f, 0xc2, 0x1c, 0xc9, 0xd4, 0x36,
+ 0xf1, 0xd1, 0xeb, 0x03, 0xe6, 0x18, 0x18, 0xe7, 0xe2, 0xe6, 0xf8, 0xdd, 0x0a,
+ 0x23, 0xf0, 0xc5, 0x1c, 0xf0, 0x10, 0xcd, 0xf0, 0x9f, 0xc2, 0xd8, 0x1d, 0xe4,
+ 0x20, 0xfa, 0x1f, 0xf2, 0xcc, 0x0a, 0xc7, 0x00, 0xf5, 0x07, 0x19, 0x1a, 0x64,
+ 0xdb, 0xe7, 0xf3, 0xc1, 0x14, 0xe5, 0xd3, 0xe7, 0x17, 0xf4, 0xbb, 0x17, 0xcd,
+ 0x2d, 0x1d, 0x27, 0xb0, 0x16, 0xe3, 0xf7, 0xe2, 0xfa, 0x42, 0x20, 0x24, 0xe6,
+ 0xdb, 0xd9, 0x12, 0x0d, 0xee, 0xe6, 0xff, 0x28, 0x07, 0x44, 0xfc, 0xd5, 0xff,
+ 0x05, 0xe5, 0xd4, 0xfb, 0xc1, 0xd3, 0xf8, 0x2c, 0x0a, 0x22, 0x0e, 0xe5, 0x1d,
+ 0x09, 0x25, 0xf7, 0x20, 0x26, 0x2f, 0x24, 0xda, 0x1e, 0xff, 0xb1, 0x10, 0x47,
+ 0x46, 0xe1, 0x25, 0xd3, 0xf6, 0xfe, 0x2c, 0xc8, 0x45, 0x20, 0xd1, 0x13, 0xdf,
+ 0xf9, 0x04, 0xd2, 0x2a, 0xfb, 0xf1, 0x15, 0xf4, 0xd5, 0xdb, 0x08, 0x03, 0xff,
+ 0x1a, 0x1a, 0x0c, 0xf7, 0xd5, 0xf6, 0xfd, 0xe1, 0xaa, 0xfc, 0x45, 0x4a, 0x14,
+ 0xea, 0xfc, 0x07, 0xf2, 0x28, 0xfa, 0x24, 0x1e, 0xc3, 0xda, 0x3d, 0xf6, 0x01,
+ 0xfd, 0x1f, 0x04, 0xe3, 0x2a, 0xda, 0xfc, 0xfb, 0xdd, 0xe1, 0xf6, 0xda, 0xe5,
+ 0x14, 0xf8, 0xf1, 0x2e, 0x08, 0x1f, 0xfc, 0xf8, 0xff, 0xe5, 0xf5, 0x35, 0xf2,
+ 0x16, 0xf4, 0xfb, 0xe3, 0xf9, 0xfb, 0xf8, 0xf9, 0xe3, 0xdc, 0xfc, 0xf6, 0x13,
+ 0x11, 0x11, 0x7f, 0xfc, 0x16, 0xee, 0xe8, 0x21, 0x06, 0x4c, 0xec, 0x10, 0xf8,
+ 0xff, 0xfd, 0xff, 0x27, 0xb0, 0x17, 0x5d, 0xdd, 0xe5, 0xc0, 0xf1, 0xed, 0x38,
+ 0xd8, 0x04, 0xf7, 0x03, 0xd6, 0x09, 0xe9, 0x0d, 0x41, 0xea, 0x01, 0xea, 0xf4,
+ 0x21, 0x26, 0xe2, 0x1a, 0x00, 0x05, 0xf3, 0xe3, 0xc2, 0x0c, 0xef, 0x0c, 0xf6,
+ 0xd3, 0xce, 0x06, 0x08, 0x0b, 0xd2, 0x01, 0xf1, 0xf5, 0xfe, 0x38, 0x06, 0x2d,
+ 0x16, 0x0c, 0xf9, 0x05, 0xd4, 0x08, 0xc8, 0x24, 0xe1, 0x2a, 0xdd, 0x0c, 0x23,
+ 0x1c, 0x38, 0x04, 0xce, 0x0e, 0x11, 0x16, 0xf1, 0xf3, 0xd7, 0xdf, 0x0e, 0xb8,
+ 0xd9, 0xdb, 0x2d, 0x1e, 0x07, 0xdf, 0x06, 0xf8, 0xf7, 0x8a, 0xbe, 0xe2, 0xf6,
+ 0xfd, 0x09, 0xf2, 0x01, 0xc0, 0xee, 0xc7, 0x1b, 0xf3, 0x03, 0xfa, 0x97, 0xbc,
+ 0xd7, 0xe4, 0xb7, 0x0a, 0x0f, 0xd4, 0xc2, 0x45, 0x01, 0x07, 0x11, 0xd5, 0x03,
+ 0xde, 0xfa, 0xdd, 0xe2, 0xd6, 0xae, 0x41, 0xc1, 0x22, 0x0e, 0x2b, 0x81, 0xa2,
+ 0xf9, 0xfa, 0xed, 0x3a, 0xce, 0xe7, 0x21, 0x01, 0xf6, 0x17, 0xec, 0x17, 0x5e,
+ 0xb2, 0x0e, 0xe7, 0x33, 0xf7, 0xec, 0x05, 0x27, 0x08, 0x0d, 0x0e, 0xf6, 0xdb,
+ 0x82, 0x00, 0xd4, 0xe3, 0xed, 0xf5, 0xe8, 0x01, 0xba, 0xe6, 0xe2, 0xed, 0x17,
+ 0x3e, 0x1a, 0xc9, 0x46, 0xe6, 0xf1, 0x07, 0xe9, 0x04, 0x05, 0x20, 0xf7, 0x3a,
+ 0xf0, 0xad, 0xd4, 0xfe, 0x39, 0xd7, 0xf1, 0xdc, 0x60, 0xd8, 0xe4, 0xdf, 0x3e,
+ 0x01, 0xbc, 0xfa, 0x3f, 0xba, 0x58, 0x0b, 0x42, 0x42, 0xe6, 0x06, 0x0d, 0xf6,
+ 0x08, 0x0b, 0xd3, 0x25, 0xbe, 0x1d, 0x3e, 0xcc, 0xcd, 0xc2, 0xfe, 0xfd, 0xeb,
+ 0xf4, 0xff, 0xf7, 0xd6, 0xf1, 0xf6, 0xc5, 0x08, 0x39, 0xb5, 0x04, 0xae, 0xff,
+ 0x59, 0x32, 0x31, 0xc6, 0xc1, 0xd2, 0xd6, 0xa2, 0xa3, 0xf7, 0x17, 0xde, 0x1e,
+ 0x51, 0xca, 0x99, 0xa1, 0xd7, 0x2b, 0x1e, 0x14, 0xba, 0xf5, 0x08, 0xca, 0x1a,
+ 0x0e, 0x36, 0x07, 0x11, 0xa4, 0x07, 0xb8, 0xd5, 0x27, 0x3a, 0x9e, 0xfa, 0xd4,
+ 0x0e, 0xec, 0xf6, 0x01, 0x23, 0x02, 0xf6, 0x2f, 0xe5, 0x3a, 0xbd, 0x26, 0xf5,
+ 0xd9, 0x2e, 0xdc, 0xc8, 0xe6, 0xd0, 0xc4, 0x07, 0xfe, 0x14, 0xc2, 0xeb, 0x1b,
+ 0xbf, 0xc1, 0xc5, 0x4f, 0x27, 0xeb, 0xcb, 0xed, 0xfb, 0x35, 0x11, 0x07, 0x4d,
+ 0xbc, 0x38, 0x14, 0x2b, 0x1e, 0xff, 0xfe, 0xdf, 0xb2, 0xfb, 0xf9, 0x1d, 0xed,
+ 0xe8, 0xec, 0x0d, 0x10, 0xfe, 0xe0, 0x29, 0xe5, 0xe1, 0x1d, 0x8c, 0x20, 0x41,
+ 0xe8, 0xdd, 0xd5, 0xed, 0x0f, 0xd9, 0x62, 0xd9, 0x5e, 0x63, 0x8b, 0x0c, 0x08,
+ 0x04, 0xf1, 0x31, 0xbd, 0x2e, 0xf0, 0x95, 0x3e, 0xe6, 0xfd, 0x04, 0x21, 0xe9,
+ 0x0e, 0x30, 0xe1, 0x0f, 0x47, 0x43, 0xed, 0xbc, 0xd4, 0x95, 0x99, 0x81, 0x78,
+ 0x1f, 0x04, 0x08, 0xc6, 0x0e, 0x09, 0xe2, 0x31, 0xec, 0x1a, 0xc9, 0x2c, 0xf9,
+ 0x17, 0x2f, 0xd8, 0xd9, 0xa0, 0xff, 0x32, 0x00, 0x26, 0xf5, 0xce, 0x25, 0xe3,
+ 0xe5, 0xbd, 0x0d, 0x74, 0xaf, 0xb5, 0xfd, 0x67, 0xc7, 0xc8, 0x4c, 0xa4, 0xfa,
+ 0xf6, 0xd2, 0x03, 0xf0, 0xc5, 0xf2, 0x2d, 0x2a, 0xb3, 0xd4, 0x26, 0xcd, 0x21,
+ 0x32, 0xe0, 0xfc, 0xb7, 0x96, 0x13, 0xfb, 0x1f, 0xdf, 0xb2, 0xd4, 0x0c, 0xf6,
+ 0x33, 0x26, 0xf7, 0xd7, 0xf0, 0x02, 0xc2, 0x52, 0x90, 0xe5, 0x16, 0xc0, 0x0e,
+ 0x09, 0x5f, 0x1b, 0x38, 0x2b, 0xd9, 0xba, 0xe4, 0xdc, 0xcb, 0x26, 0xdc, 0xfb,
+ 0xdb, 0xef, 0x27, 0xce, 0x01, 0xaf, 0xbd, 0x05, 0xf6, 0xd9, 0xcf, 0xea, 0x14,
+ 0xe6, 0xf9, 0x48, 0xc2, 0x40, 0xff, 0xf8, 0xc0, 0x24, 0x51, 0xda, 0x23, 0xc6,
+ 0xe5, 0xe9, 0xdc, 0x07, 0xa0, 0xdf, 0xa0, 0x13, 0xca, 0x23, 0x5b, 0xcb, 0xf5,
+ 0x0a, 0x04, 0x45, 0xbe, 0x29, 0xf5, 0x21, 0xb8, 0x20, 0x21, 0xfc, 0x14, 0x2b,
+ 0xf7, 0xee, 0x1c, 0xe6, 0x06, 0x2e, 0x29, 0x07, 0xf4, 0xf3, 0xd1, 0xe0, 0x21,
+ 0x28, 0xea, 0xe9, 0x1d, 0xd3, 0xc0, 0xed, 0xe1, 0x99, 0x42, 0x2a, 0x23, 0x92,
+ 0x2e, 0xe1, 0x04, 0xef, 0xec, 0x9e, 0x1b, 0xd7, 0xb8, 0x10, 0xe6, 0xed, 0x09,
+ 0xdd, 0xe5, 0x16, 0xf4, 0x10, 0xf5, 0xd2, 0x2b, 0x21, 0xae, 0xf2, 0x42, 0x2a,
+ 0x41, 0x42, 0xfb, 0xfb, 0x0a, 0xff, 0xbe, 0xfc, 0x1f, 0x29, 0xdb, 0x4e, 0x1d,
+ 0x08, 0xed, 0x01, 0x17, 0xa3, 0xd3, 0xd8, 0x0d, 0xe8, 0xf8, 0x78, 0xdb, 0xff,
+ 0x09, 0x31, 0xe5, 0x05, 0xec, 0x09, 0xc7, 0xc6, 0xeb, 0xd1, 0x05, 0x10, 0xef,
+ 0x16, 0xbb, 0xe1, 0xc3, 0xbe, 0x06, 0xb4, 0xd9, 0x02, 0xa0, 0xe5, 0xfe, 0x05,
+ 0x0e, 0xc7, 0xcc, 0x41, 0x29, 0x25, 0xfe, 0xf1, 0x24, 0xe7, 0xa9, 0x44, 0x00,
+ 0x12, 0x00, 0xb7, 0x25, 0xbf, 0x1d, 0x0f, 0x10, 0x4d, 0x8d, 0xe8, 0xfb, 0x0f,
+ 0xb0, 0x1f, 0xfe, 0x3a, 0xef, 0x16, 0x11, 0xcc, 0x03, 0xdb, 0xfe, 0x5b, 0xff,
+ 0x03, 0xb0, 0xed, 0xba, 0xf7, 0xc6, 0x2e, 0x1e, 0x1a, 0xe4, 0x27, 0xe3, 0xe2,
+ 0x0f, 0x0c, 0xb9, 0xa3, 0x01, 0xd3, 0xfb, 0x31, 0xc9, 0xfd, 0xcc, 0xbe, 0xed,
+ 0x0f, 0xe9, 0xe6, 0x10, 0xd3, 0x01, 0x00, 0x19, 0xcb, 0xfd, 0xac, 0xf9, 0xdb,
+ 0xd0, 0x9e, 0x3a, 0xde, 0x12, 0xcf, 0x0b, 0xb2, 0x0a, 0x15, 0xf2, 0xfc, 0x39,
+ 0x19, 0xe5, 0xf0, 0xf9, 0xcb, 0x4b, 0xd5, 0x02, 0x29, 0xce, 0xec, 0xfc, 0x20,
+ 0x1f, 0x13, 0xe8, 0xea, 0x41, 0xdb, 0x45, 0x4e, 0xe2, 0xb3, 0xf2, 0xd4, 0xad,
+ 0x0a, 0xfe, 0xe5, 0x06, 0x1a, 0x20, 0xce, 0xc0, 0x49, 0xf9, 0xfe, 0xdc, 0xcf,
+ 0xca, 0x00, 0xce, 0x40, 0x43, 0x1f, 0xb9, 0x30, 0xd7, 0xce, 0xa4, 0x0b, 0x0a,
+ 0x23, 0x12, 0x03, 0x16, 0xce, 0xdd, 0x10, 0xb1, 0x2f, 0xdc, 0x06, 0xd8, 0x1d,
+ 0xe4, 0x15, 0xfd, 0xc8, 0xe4, 0x09, 0xff, 0x13, 0xd3, 0x05, 0x40, 0xe7, 0x1c,
+ 0x39, 0xde, 0xe5, 0x50, 0xf1, 0xea, 0xfe, 0x0f, 0xc4, 0x35, 0x7f, 0xc6, 0x26,
+ 0x25, 0xb1, 0x01, 0xf3, 0x20, 0xbe, 0x44, 0xa8, 0x1b, 0xef, 0x0f, 0xc1, 0x00,
+ 0xf0, 0x2d, 0x02, 0xfe, 0x3b, 0x27, 0x03, 0x08, 0xfa, 0x38, 0x01, 0xd3, 0xfa,
+ 0xea, 0x32, 0xfa, 0xe3, 0x33, 0x0a, 0x0b, 0x59, 0x13, 0xb3, 0x17, 0xf6, 0x23,
+ 0xe8, 0x3c, 0x1b, 0xd6, 0xfe, 0x1e, 0x00, 0x05, 0xca, 0x12, 0xdd, 0x1e, 0xe0,
+ 0xfd, 0xc8, 0x12, 0xde, 0xc5, 0x09, 0xb3, 0xfc, 0xc4, 0x24, 0xbe, 0xc0, 0xfd,
+ 0xed, 0x13, 0xec, 0x0f, 0xa3, 0xbb, 0xe6, 0xeb, 0xd0, 0xf1, 0xe8, 0x26, 0x99,
+ 0x01, 0xca, 0xd7, 0xe6, 0xc8, 0xc4, 0xce, 0x3b, 0xee, 0xf8, 0x1b, 0x9a, 0x26,
+ 0xb1, 0x1a, 0xf5, 0xe5, 0x3e, 0x28, 0xe8, 0x10, 0xf0, 0x2a, 0xe0, 0xfa, 0x3e,
+ 0x2a, 0xd7, 0xde, 0x1d, 0x1b, 0x26, 0x0b, 0xcc, 0x4c, 0xef, 0x0c, 0xe6, 0xc1,
+ 0xdf, 0x06, 0xf6, 0x87, 0xbe, 0xd3, 0xc3, 0x28, 0x2f, 0x06, 0xb9, 0x5a, 0xff,
+ 0xa4, 0xe3, 0x06, 0x2d, 0x0f, 0x20, 0x9e, 0xb0, 0xbe, 0x1e, 0x20, 0xdb, 0xd3,
+ 0xda, 0x86, 0xd4, 0xe8, 0xed, 0x17, 0xef, 0xc9, 0xda, 0xbc, 0xbe, 0x06, 0xb1,
+ 0x24, 0xf1, 0x21, 0x01, 0xf3, 0xf0, 0x1c, 0x06, 0x19, 0x18, 0xef, 0xfc, 0x9e,
+ 0x0a, 0xd0, 0xdc, 0x78, 0x00, 0xfb, 0xe4, 0x05, 0xbc, 0x4a, 0x2c, 0xff, 0x81,
+ 0xf2, 0x32, 0x19, 0x05, 0xa6, 0x33, 0xf6, 0xda, 0xbe, 0xfd, 0xe8, 0xdd, 0x01,
+ 0x0f, 0xcb, 0xdc, 0x48, 0x52, 0x09, 0x7f, 0xf6, 0xa2, 0x02, 0xf7, 0x23, 0x03,
+ 0x4b, 0xf0, 0x44, 0x27, 0xaa, 0x01, 0xfb, 0xf5, 0xec, 0xfa, 0xea, 0xd6, 0xb1,
+ 0xc4, 0xde, 0xe0, 0x15, 0xf7, 0x0b, 0x05, 0xf0, 0xd7, 0x09, 0xef, 0xd1, 0x03,
+ 0xf5, 0x26, 0xd6, 0x18, 0xf1, 0xec, 0xd7, 0xea, 0xed, 0xf0, 0x18, 0x2b, 0x07,
+ 0xf5, 0xe6, 0xf3, 0x21, 0xe8, 0x31, 0xeb, 0xcd, 0xc8, 0xe7, 0x17, 0x2b, 0xff,
+ 0xd1, 0xed, 0xd5, 0xc2, 0x19, 0xe8, 0xff, 0xc2, 0x24, 0xf6, 0x2f, 0xf9, 0xcb,
+ 0x78, 0x01, 0xdd, 0xdc, 0xec, 0x10, 0x07, 0xec, 0x0f, 0x3f, 0xfd, 0x19, 0xd3,
+ 0xc7, 0xf3, 0xad, 0xae, 0x3c, 0xb8, 0x0a, 0xe5, 0xf7, 0xf2, 0x03, 0x08, 0x00,
+ 0xc9, 0x04, 0x4d, 0x29, 0xe2, 0x27, 0x0d, 0x08, 0xd4, 0xf6, 0x10, 0xc5, 0xf8,
+ 0xa3, 0xcf, 0x9d, 0x46, 0x0a, 0x25, 0x0a, 0xd2, 0xec, 0xd0, 0x18, 0x13, 0xf5,
+ 0xb7, 0x0b, 0xfd, 0x2a, 0x00, 0x37, 0x30, 0xc0, 0xf6, 0x12, 0xf3, 0xb1, 0x2c,
+ 0x14, 0x09, 0x30, 0xd9, 0xd9, 0xc4, 0xf5, 0x01, 0xc1, 0x2e, 0x2e, 0x04, 0xc6,
+ 0xf0, 0xab, 0xda, 0xce, 0xd8, 0x1e, 0xea, 0x3c, 0x1a, 0xd5, 0xe0, 0x01, 0xc1,
+ 0x1f, 0xe8, 0x04, 0x12, 0xe8, 0x10, 0xc6, 0x03, 0xe1, 0xda, 0xb6, 0xe8, 0xcb,
+ 0x8e, 0x43, 0xfb, 0xf3, 0x36, 0xd5, 0xd0, 0x53, 0xeb, 0xfa, 0xee, 0xd3, 0x39,
+ 0xd5, 0xf7, 0xa6, 0xba, 0x37, 0xd6, 0x10, 0x06, 0xbe, 0xbb, 0xc8, 0xb4, 0x15,
+ 0x02, 0xe4, 0x1c, 0xe7, 0xd9, 0x01, 0x2a, 0x0c, 0x16, 0x1c, 0x01, 0x11, 0xca,
+ 0xd6, 0xf8, 0x4a, 0xc1, 0xf5, 0x04, 0x09, 0xc3, 0xf0, 0x14, 0xca, 0xda, 0xf7,
+ 0xf6, 0x17, 0xfd, 0xde, 0x33, 0x39, 0xd8, 0x98, 0x0a, 0xe9, 0x2f, 0xf6, 0xe0,
+ 0x13, 0xd0, 0xfb, 0x01, 0xff, 0xd9, 0xea, 0xe6, 0xf9, 0x05, 0x37, 0xf5, 0x4c,
+ 0x06, 0xf7, 0x22, 0x06, 0xd9, 0x22, 0x18, 0x46, 0xfb, 0xe5, 0xfb, 0xde, 0xfc,
+ 0xc2, 0xee, 0x11, 0xec, 0xce, 0x0b, 0x2a, 0x09, 0x08, 0x3b, 0xd1, 0xe7, 0x1f,
+ 0x09, 0xe2, 0xfd, 0x0a, 0x15, 0xc7, 0xff, 0xca, 0x17, 0xab, 0xde, 0xdb, 0xfb,
+ 0xf6, 0x29, 0xd7, 0x21, 0xea, 0xc2, 0x08, 0x0f, 0xed, 0x1b, 0xf1, 0x0b, 0xfa,
+ 0x07, 0xde, 0xfc, 0xe1, 0x2c, 0x35, 0xf1, 0xe2, 0xc9, 0xf6, 0xd7, 0x1d, 0xad,
+ 0xea, 0x48, 0xfe, 0xe1, 0x05, 0x14, 0xf1, 0x0e, 0x1c, 0x0e, 0xb0, 0x3b, 0xf3,
+ 0x2a, 0x03, 0xef, 0x22, 0x3e, 0x0c, 0xdf, 0xba, 0x32, 0xca, 0xfe, 0xdf, 0x21,
+ 0x3d, 0x3e, 0x04, 0x09, 0x43, 0xf0, 0x3b, 0xc6, 0x4c, 0x81, 0x28, 0xfe, 0x09,
+ 0x3e, 0x1e, 0xe6, 0x21, 0xb3, 0x2b, 0xac, 0x1a, 0x09, 0xe3, 0x09, 0xe5, 0xf7,
+ 0xd8, 0xfb, 0xe4, 0xd3, 0xde, 0x15, 0x09, 0xe5, 0xb5, 0xc8, 0xe8, 0x20, 0xb2,
+ 0xe4, 0xf6, 0xeb, 0x23, 0xff, 0xd4, 0xcb, 0xdc, 0xeb, 0x1b, 0x8f, 0xf8, 0xf2,
+ 0x29, 0x41, 0x06, 0xc8, 0xe5, 0xcc, 0xff, 0x07, 0xf9, 0x33, 0xbe, 0xce, 0xf2,
+ 0x09, 0x9a, 0xd7, 0x08, 0x2a, 0x40, 0x1c, 0xef, 0x0c, 0xc8, 0xf3, 0xdb, 0xe9,
+ 0x2a, 0xd4, 0x1b, 0xb1, 0xd2, 0x3b, 0x33, 0xea, 0xfd, 0xf5, 0x0c, 0xd5, 0xe2,
+ 0x1c, 0x04, 0xef, 0xde, 0x0c, 0xf5, 0xad, 0x1f, 0xb0, 0xf9, 0xfc, 0xe4, 0xcf,
+ 0x0e, 0xaf, 0xe4, 0xe3, 0x16, 0xbe, 0xe7, 0xf1, 0xf8, 0xc8, 0x1f, 0xd8, 0xe9,
+ 0xbd, 0xb4, 0xb9, 0xe3, 0xbe, 0x17, 0x17, 0x28, 0xef, 0x03, 0xd9, 0xc5, 0xf6,
+ 0xf0, 0xff, 0x1b, 0xf2, 0xc3, 0xcc, 0xd8, 0xe6, 0x19, 0xaa, 0x06, 0xf0, 0x16,
+ 0xce, 0x0f, 0xd8, 0x18, 0xe9, 0x13, 0xfa, 0xf9, 0xb2, 0xb0, 0x24, 0x05, 0xe5,
+ 0xcd, 0x2d, 0xee, 0xd1, 0x13, 0x0d, 0xe8, 0xd2, 0xee, 0xdf, 0xf6, 0x65, 0xf9,
+ 0xc5, 0xa1, 0xe8, 0xce, 0xdd, 0xec, 0xdd, 0x1b, 0x15, 0x9b, 0x03, 0xcf, 0x33,
+ 0xce, 0x1e, 0xe2, 0x00, 0xe6, 0x03, 0xe0, 0xe5, 0x18, 0x1d, 0x01, 0x09, 0xe4,
+ 0xdb, 0xeb, 0x2c, 0x2b, 0xca, 0xc1, 0xe1, 0xdb, 0x01, 0xfa, 0xde, 0xc8, 0xe5,
+ 0x06, 0xd7, 0xda, 0xd7, 0x1e, 0xce, 0x37, 0x03, 0x13, 0xe3, 0xe6, 0x81, 0xe8,
+ 0x01, 0x19, 0xdb, 0x0f, 0xe8, 0xfe, 0xe5, 0xe6, 0xd6, 0x07, 0x85, 0xf8, 0x0c,
+ 0x1f, 0xd7, 0x25, 0x0b, 0xdd, 0x37, 0xd3, 0x17, 0x56, 0xd3, 0x03, 0x0a, 0x03,
+ 0xe8, 0x13, 0xbb, 0xff, 0xdc, 0x14, 0x0e, 0xe5, 0xae, 0x41, 0x16, 0x6c, 0x09,
+ 0xc6, 0xf8, 0xf8, 0x0d, 0xd8, 0xba, 0xdd, 0xf7, 0xfd, 0x18, 0x44, 0x8c, 0x3d,
+ 0xe3, 0x31, 0xd7, 0x1a, 0xef, 0x4e, 0x42, 0xc5, 0x1e, 0xcd, 0xe0, 0xfa, 0x03,
+ 0x2d, 0x4b, 0x0b, 0xfe, 0x2f, 0xea, 0x03, 0xfa, 0x0d, 0xe9, 0x1c, 0xe6, 0x0b,
+ 0x19, 0xe2, 0xf1, 0x15, 0xe2, 0x00, 0x33, 0xba, 0x33, 0xc4, 0xd5, 0xc2, 0x1b,
+ 0xd2, 0xee, 0xed, 0x1e, 0x13, 0xf9, 0xf1, 0xed, 0xee, 0x05, 0x13, 0x10, 0x15,
+ 0x5f, 0xcd, 0xe0, 0xdb, 0xd4, 0x28, 0xf9, 0x1e, 0xcc, 0xea, 0x23, 0x17, 0xcc,
+ 0x1f, 0xd7, 0x2e, 0xa8, 0x46, 0xec, 0xd0, 0xda, 0x12, 0xe2, 0xf1, 0x09, 0x2f,
+ 0xe6, 0x2f, 0xd9, 0xc4, 0xf0, 0xd8, 0x11, 0xbc, 0x0f, 0xf5, 0x34, 0x1d, 0x96,
+ 0x10, 0x01, 0xc4, 0xe9, 0x38, 0xe1, 0x2c, 0xf8, 0xcc, 0x0b, 0x33, 0xc6, 0xe5,
+ 0xf1, 0x23, 0x2f, 0x06, 0xdf, 0xb1, 0xb8, 0x13, 0x09, 0x11, 0xce, 0xc9, 0x4b,
+ 0x18, 0xce, 0x35, 0xfc, 0x3a, 0x12, 0xc3, 0x0d, 0x53, 0xc8, 0x0c, 0xd2, 0x2d,
+ 0xfd, 0xa1, 0xc3, 0xed, 0x35, 0x14, 0x0a, 0xfe, 0xf3, 0xdc, 0xb8, 0xcc, 0x1d,
+ 0x01, 0x0e, 0x3a, 0xe5, 0xd1, 0x12, 0x81, 0xdf, 0x09, 0xbd, 0x0c, 0xf0, 0x19,
+ 0x06, 0xe2, 0x11, 0xad, 0x07, 0xf1, 0x0e, 0xc3, 0x2b, 0x15, 0x1a, 0x31, 0xf1,
+ 0x13, 0xec, 0x10, 0x07, 0xde, 0x25, 0x1e, 0x1a, 0xe5, 0xd2, 0x25, 0xf4, 0x04,
+ 0x26, 0x20, 0x19, 0xff, 0x1a, 0x35, 0x26, 0xeb, 0x00, 0x00, 0x49, 0xca, 0xee,
+ 0xd0, 0xf0, 0xde, 0x27, 0x12, 0x0b, 0x0b, 0xf7, 0x12, 0x13, 0x05, 0xf3, 0x03,
+ 0x05, 0x3d, 0x12, 0xfe, 0xff, 0xd4, 0xfa, 0xf1, 0x3f, 0xfb, 0x17, 0x2e, 0x12,
+ 0xfb, 0x1a, 0xe7, 0x41, 0xc9, 0x01, 0xe1, 0xb8, 0x1d, 0x29, 0x37, 0xdd, 0xe9,
+ 0xda, 0xa9, 0x38, 0xbf, 0xef, 0xdb, 0xe7, 0xcd, 0xe5, 0x21, 0x1d, 0xc5, 0x08,
+ 0x33, 0xc3, 0xed, 0x19, 0x0c, 0x09, 0xf4, 0xcb, 0xef, 0xf2, 0x2c, 0x11, 0xfc,
+ 0xe0, 0x36, 0xdf, 0x29, 0x3f, 0xe5, 0x3b, 0xc7, 0xb6, 0xc8, 0xf9, 0x1c, 0xd5,
+ 0xfe, 0xed, 0xdb, 0xdb, 0xa4, 0xe1, 0xea, 0x0b, 0xf8, 0x1a, 0x4e, 0x19, 0xc7,
+ 0xec, 0x4e, 0xa6, 0x8f, 0xe1, 0xf8, 0xff, 0xe0, 0xe2, 0xd6, 0xdb, 0x04, 0x2e,
+ 0x42, 0x15, 0x16, 0xe0, 0xc3, 0xf3, 0x08, 0xd0, 0xfe, 0x11, 0x20, 0x52, 0xe5,
+ 0x1e, 0xe4, 0xd0, 0xf8, 0xf2, 0x17, 0xc6, 0x35, 0xaf, 0xcf, 0x1b, 0xfa, 0xc7,
+ 0xc7, 0xff, 0x13, 0x00, 0x2a, 0x4a, 0xd0, 0x3a, 0xd7, 0x38, 0xd0, 0xc4, 0x65,
+ 0xd6, 0x17, 0x2c, 0xe2, 0xfd, 0xfd, 0xf4, 0x3b, 0xe0, 0xf2, 0xba, 0x04, 0xe5,
+ 0x21, 0xad, 0x4f, 0x03, 0xf5, 0x1f, 0xa6, 0xb8, 0xe6, 0xd0, 0x37, 0xf5, 0xe4,
+ 0xd0, 0xf5, 0xfe, 0x03, 0x11, 0x4c, 0xea, 0xf5, 0x1c, 0xc0, 0xd2, 0xd9, 0x1c,
+ 0x13, 0xd2, 0xf3, 0x05, 0x12, 0xfa, 0x18, 0xd7, 0xcd, 0xbf, 0xda, 0xc6, 0xb4,
+ 0x1d, 0xfe, 0x37, 0x12, 0x8f, 0xbc, 0x5b, 0xe7, 0xc8, 0x20, 0xfc, 0xcf, 0xfb,
+ 0xfe, 0x32, 0x1d, 0x5e, 0x15, 0xea, 0xbe, 0xc8, 0xd3, 0x81, 0xc4, 0x04, 0xea,
+ 0xdd, 0xca, 0x32, 0x1d, 0x37, 0xb8, 0x00, 0x25, 0xe3, 0x0d, 0xf5, 0x3b, 0x16,
+ 0x04, 0x0a, 0x06, 0x28, 0xb1, 0x07, 0x18, 0xcd, 0x4c, 0xf2, 0xf6, 0x07, 0xc4,
+ 0x19, 0x22, 0xe0, 0x28, 0xd2, 0x2d, 0xf4, 0x1a, 0x0c, 0xf4, 0x44, 0x04, 0x2b,
+ 0x42, 0x03, 0x15, 0xb2, 0x96, 0x27, 0x17, 0x0b, 0x21, 0xe8, 0xab, 0x41, 0xd9,
+ 0x15, 0xd4, 0xdf, 0xf9, 0x30, 0x10, 0xb7, 0xe0, 0xe0, 0x09, 0x35, 0x00, 0x19,
+ 0xf7, 0xb7, 0xcb, 0x05, 0x1b, 0x0e, 0xf2, 0xd0, 0xde, 0x2f, 0x0e, 0x19, 0xd1,
+ 0x17, 0x1d, 0xe0, 0xeb, 0xf6, 0xc0, 0x6a, 0x10, 0xf8, 0xd2, 0x02, 0x04, 0xdb,
+ 0xe0, 0x07, 0x37, 0xe7, 0x1d, 0x02, 0x07, 0xec, 0xcf, 0xe7, 0xf5, 0xef, 0xbc,
+ 0xf4, 0x3f, 0xa6, 0x12, 0xff, 0x1b, 0x08, 0xb5, 0xf5, 0xd3, 0xbe, 0xf6, 0xda,
+ 0xd5, 0xda, 0x01, 0xef, 0xcf, 0x1a, 0x3e, 0xe6, 0xb7, 0xdc, 0xfe, 0xdf, 0xd4,
+ 0xee, 0x16, 0x21, 0xcb, 0x19, 0x27, 0x27, 0xe0, 0xf1, 0x06, 0x2c, 0x20, 0xcc,
+ 0x9d, 0xb4, 0x09, 0xf5, 0x1e, 0xd2, 0x09, 0x13, 0xfa, 0xca, 0x56, 0xe5, 0xd6,
+ 0xde, 0xfe, 0x12, 0xe5, 0x3c, 0xe4, 0xed, 0xfa, 0xfb, 0x21, 0xdc, 0x1a, 0x06,
+ 0xf7, 0x3f, 0xa3, 0xfa, 0x62, 0xe4, 0xed, 0x29, 0x11, 0x35, 0x0f, 0x78, 0xd0,
+ 0xf6, 0xf2, 0x51, 0x2e, 0xbb, 0xa3, 0xc6, 0x81, 0xec, 0x13, 0x4a, 0xcf, 0xe7,
+ 0x2a, 0xfa, 0xe6, 0x16, 0xcb, 0xf2, 0x95, 0x04, 0xde, 0xd3, 0x37, 0xcf, 0x9b,
+ 0x14, 0xf1, 0xfd, 0xfc, 0x12, 0x16, 0x16, 0xed, 0x22, 0xd3, 0xd5, 0xba, 0xd7,
+ 0xec, 0xe1, 0xdf, 0x2b, 0xd2, 0xc2, 0x08, 0xd7, 0xdd, 0xab, 0xd7, 0xe4, 0x0a,
+ 0xf4, 0xc5, 0xb2, 0x19, 0xdf, 0xe9, 0x24, 0xc2, 0xc2, 0xfd, 0xcb, 0xbd, 0xe7,
+ 0xaf, 0x8d, 0xad, 0x19, 0x27, 0x04, 0xe0, 0xea, 0x2f, 0xf4, 0xe8, 0x40, 0x2e,
+ 0xde, 0x2c, 0xcd, 0xfa, 0x53, 0x23, 0xdf, 0x5f, 0xdd, 0xe1, 0xb5, 0xea, 0x01,
+ 0x1f, 0xac, 0xff, 0xfe, 0x27, 0xdb, 0x1d, 0xc3, 0x90, 0xf1, 0xe3, 0xaa, 0x01,
+ 0x04, 0xe5, 0x07, 0xb7, 0xbf, 0xc4, 0xc9, 0x11, 0xc9, 0xb5, 0xe0, 0x1e, 0xdf,
+ 0x14, 0x03, 0x1a, 0xcc, 0x28, 0x02, 0xee, 0x1b, 0x13, 0xed, 0xef, 0x58, 0xa8,
+ 0x09, 0x10, 0x15, 0xed, 0x00, 0x66, 0x06, 0xeb, 0xe9, 0xe5, 0xed, 0xfe, 0x28,
+ 0xd9, 0xaa, 0xe9, 0x99, 0x46, 0x17, 0xd1, 0xe6, 0x0a, 0xdf, 0xdc, 0xbe, 0x32,
+ 0xb5, 0xfa, 0xf6, 0xf2, 0xd0, 0xf7, 0xca, 0x03, 0xe6, 0xfc, 0x07, 0xcf, 0xef,
+ 0x93, 0xe5, 0x05, 0xf1, 0xe1, 0xdc, 0x10, 0x15, 0x25, 0x18, 0x17, 0xba, 0xb1,
+ 0xeb, 0x9d, 0xdc, 0x04, 0xbe, 0x27, 0x2d, 0xf2, 0x15, 0xdb, 0x25, 0xe6, 0xe4,
+ 0xe9, 0x1e, 0x27, 0xe9, 0xff, 0x26, 0x39, 0xca, 0x12, 0xa0, 0xd3, 0xcc, 0xfc,
+ 0x1c, 0x9d, 0xc0, 0xd0, 0xfc, 0xe0, 0xd2, 0x11, 0x23, 0xf6, 0x3b, 0xfe, 0xfc,
+ 0x3a, 0x25, 0x48, 0xd5, 0xdf, 0xc5, 0x29, 0x0e, 0xfd, 0x5b, 0xe1, 0x09, 0x4d,
+ 0x19, 0x31, 0xc9, 0xb1, 0xfd, 0x12, 0x32, 0xb5, 0x00, 0xf4, 0x43, 0x2c, 0xfb,
+ 0x1b, 0xeb, 0xd8, 0xe8, 0x11, 0xb6, 0x2b, 0xff, 0xef, 0x26, 0xcd, 0x5c, 0xf6,
+ 0xe9, 0xf0, 0xf3, 0xfd, 0xea, 0x00, 0xc3, 0xce, 0x1f, 0x44, 0xcf, 0xe0, 0xd2,
+ 0x12, 0xc1, 0x16, 0xdd, 0xe7, 0x9e, 0x3a, 0x10, 0x05, 0xfe, 0x0d, 0x04, 0xaf,
+ 0xdc, 0xc1, 0xc5, 0xd2, 0xdc, 0xa0, 0xd9, 0x00, 0x01, 0x71, 0xe2, 0x15, 0x1c,
+ 0xd3, 0x11, 0xcb, 0x0b, 0xd5, 0x86, 0x14, 0xa7, 0x0c, 0xe3, 0x3b, 0xb9, 0xb5,
+ 0xd7, 0x34, 0xdf, 0x37, 0xf3, 0xf6, 0xf2, 0xe1, 0x38, 0x35, 0x01, 0x00, 0xe9,
+ 0xad, 0xe8, 0x07, 0x2a, 0x96, 0x23, 0x2e, 0xff, 0xe0, 0xd9, 0x26, 0xeb, 0xe2,
+ 0x58, 0xcb, 0xe7, 0x01, 0xc8, 0x13, 0x1f, 0xca, 0xe5, 0xde, 0xfc, 0x0a, 0xe4,
+ 0x04, 0xd2, 0xef, 0x20, 0xd7, 0x03, 0x0a, 0xff, 0x27, 0x19, 0xf0, 0xc6, 0x01,
+ 0x19, 0xfa, 0xbb, 0xde, 0x13, 0xf0, 0xfd, 0x03, 0x9c, 0x07, 0xdd, 0xc3, 0x27,
+ 0xe1, 0xb6, 0xb4, 0xe7, 0xde, 0xe4, 0x81, 0x07, 0xef, 0x12, 0xe3, 0x19, 0x27,
+ 0x17, 0xca, 0xbb, 0x08, 0xc7, 0xd6, 0x20, 0x99, 0xf1, 0xe6, 0x1f, 0xcd, 0x03,
+ 0x05, 0x43, 0x17, 0xcc, 0x08, 0xec, 0xc3, 0x23, 0x28, 0x15, 0x07, 0xd7, 0x21,
+ 0xf2, 0xfc, 0x02, 0xf2, 0xc3, 0xe7, 0x20, 0x1c, 0xde, 0xa1, 0x0b, 0xcb, 0x1c,
+ 0xed, 0x8b, 0xcb, 0xd6, 0x23, 0x18, 0xe6, 0xfe, 0xde, 0x2a, 0xfd, 0xca, 0x2b,
+ 0x28, 0xf4, 0xf9, 0xd2, 0xc1, 0xe1, 0x14, 0xc8, 0x17, 0x01, 0xe4, 0xdf, 0x28,
+ 0x25, 0x0c, 0xfe, 0xf8, 0x15, 0x39, 0xfe, 0xd4, 0xeb, 0x1d, 0xf0, 0xeb, 0x16,
+ 0x92, 0x45, 0xf6, 0xbc, 0x35, 0x0c, 0xff, 0x29, 0x41, 0xf4, 0xe4, 0x46, 0x2a,
+ 0x0a, 0xfe, 0xc6, 0xe7, 0xe6, 0xa9, 0x0e, 0x0a, 0x01, 0x12, 0x4f, 0x21, 0xe6,
+ 0x14, 0xab, 0x09, 0xe0, 0xd5, 0xba, 0xfc, 0xf4, 0x02, 0xf4, 0x2b, 0x39, 0xef,
+ 0x1c, 0xb6, 0xed, 0xe6, 0x0c, 0x03, 0xda, 0xd4, 0xe9, 0xf7, 0x48, 0xf2, 0xe5,
+ 0x2f, 0xc5, 0xad, 0x31, 0xcc, 0xfd, 0xb3, 0xf2, 0xc4, 0x39, 0xee, 0x0a, 0xfe,
+ 0xe9, 0x1e, 0xec, 0x14, 0x14, 0xe3, 0xfb, 0x02, 0xfc, 0xf1, 0xf9, 0xb5, 0xd0,
+ 0xc4, 0x08, 0xe1, 0xf4, 0x15, 0xec, 0xc1, 0xd8, 0x0d, 0xff, 0x2f, 0xf9, 0x18,
+ 0xc1, 0xcc, 0x5d, 0xa1, 0xf2, 0x29, 0xf7, 0xf7, 0x30, 0xe3, 0x21, 0xe1, 0x11,
+ 0x1e, 0x89, 0xf2, 0xfd, 0xdc, 0x27, 0xd1, 0x17, 0xee, 0xcd, 0x7d, 0x12, 0xc2,
+ 0x14, 0xb5, 0xdf, 0x1f, 0xcd, 0x42, 0xcc, 0x0f, 0xd2, 0x13, 0x63, 0x13, 0x40,
+ 0xef, 0x16, 0x12, 0x04, 0x4e, 0xc5, 0xd4, 0x0c, 0x14, 0x1e, 0xda, 0xa1, 0x48,
+ 0xcc, 0xfd, 0x1a, 0xac, 0x18, 0xe6, 0xfc, 0x3b, 0x31, 0x0f, 0x7f, 0xf8, 0xf4,
+ 0x87, 0x14, 0xb8, 0xe1, 0x14, 0xec, 0xa9, 0x31, 0x20, 0x45, 0x06, 0xed, 0xf0,
+ 0xda, 0xe5, 0xe4, 0xcc, 0xdb, 0xff, 0xe7, 0xd3, 0x12, 0xf6, 0xe7, 0x06, 0x16,
+ 0xf2, 0xb6, 0xdf, 0x0b, 0x2b, 0x15, 0xe5, 0xca, 0x0f, 0x1d, 0xd2, 0x41, 0x07,
+ 0xea, 0xd8, 0x16, 0x0a, 0xaf, 0xad, 0xee, 0x02, 0x01, 0x04, 0x60, 0xe9, 0x31,
+ 0x5d, 0x04, 0x0e, 0xcb, 0xc3, 0xaa, 0x0b, 0xda, 0xbe, 0x16, 0x12, 0xed, 0xf5,
+ 0x1d, 0xd4, 0xd6, 0x29, 0x21, 0xfa, 0x99, 0x16, 0x06, 0xaa, 0x15, 0xd4, 0x1c,
+ 0x10, 0xec, 0xe9, 0xe7, 0x14, 0xe9, 0xf0, 0x34, 0xbe, 0xf5, 0x53, 0xf5, 0x08,
+ 0xe4, 0xd2, 0xe3, 0x1b, 0xec, 0xf7, 0xb4, 0xf2, 0x0b, 0x15, 0xcb, 0xaf, 0xe8,
+ 0xc3, 0xe1, 0x1d, 0x24, 0xe9, 0x23, 0xfc, 0xce, 0xd0, 0xd1, 0xac, 0x20, 0x0a,
+ 0x09, 0xda, 0xd3, 0xf3, 0x25, 0x12, 0xee, 0xd1, 0xc6, 0x11, 0xac, 0xf2, 0x1c,
+ 0xe6, 0xec, 0xf4, 0x1a, 0xc0, 0xb3, 0x08, 0x0a, 0x2b, 0x30, 0x63, 0xdb, 0xfa,
+ 0xd3, 0x19, 0xdd, 0xf6, 0x58, 0xcf, 0xe9, 0x25, 0xee, 0xe5, 0xcd, 0x11, 0x08,
+ 0xe3, 0xdc, 0xec, 0x43, 0xdc, 0x04, 0xfd, 0x11, 0xbd, 0x16, 0xda, 0xea, 0xf8,
+ 0xdc, 0xee, 0xe9, 0xe3, 0x42, 0xb7, 0x32, 0xc9, 0xc1, 0x4b, 0xff, 0x16, 0x1c,
+ 0x1d, 0x99, 0xbd, 0x5c, 0x30, 0xd3, 0x0f, 0xe4, 0x74, 0xc7, 0x02, 0x0f, 0xc7,
+ 0x2d, 0xec, 0x2a, 0xe2, 0x0d, 0x1d, 0xec, 0x0e, 0xe8, 0xdb, 0x22, 0xc9, 0xb3,
+ 0xd1, 0xfe, 0xe2, 0xe9, 0x20, 0xda, 0xd4, 0x19, 0x21, 0xa4, 0xf1, 0xe1, 0x39,
+ 0x2f, 0x05, 0x23, 0xe4, 0xf4, 0x01, 0x12, 0x00, 0xec, 0x25, 0x1e, 0xa8, 0xf6,
+ 0xf8, 0xff, 0x0e, 0xd5, 0xc0, 0xcb, 0xc1, 0x33, 0x22, 0xc4, 0x1f, 0x0e, 0x05,
+ 0xed, 0xe1, 0x01, 0xe0, 0x11, 0xeb, 0x0a, 0xe0, 0x32, 0xd0, 0x70, 0xaf, 0x1b,
+ 0xf1, 0x07, 0x10, 0xf6, 0x02, 0xed, 0x3e, 0xd6, 0xa9, 0x11, 0xee, 0x1e, 0xe0,
+ 0xd1, 0xbc, 0xe8, 0x01, 0xe2, 0x1c, 0x3e, 0xa3, 0xd6, 0x8a, 0x0d, 0xdd, 0xe1,
+ 0x30, 0xed, 0x04, 0x15, 0xff, 0x24, 0xff, 0x1b, 0x81, 0xcd, 0xd5, 0x19, 0xe1,
+ 0x14, 0x33, 0x29, 0xdb, 0xdc, 0x38, 0xce, 0xf7, 0xd6, 0xd9, 0x23, 0xbb, 0x01,
+ 0xd4, 0xfc, 0xda, 0x48, 0xde, 0xd8, 0x37, 0xd4, 0x2b, 0xcd, 0x36, 0xe9, 0x14,
+ 0xf7, 0xfc, 0xcc, 0xe4, 0x25, 0xe8, 0xf3, 0x22, 0x3b, 0x0a, 0xc5, 0xce, 0xfb,
+ 0xef, 0x1c, 0x06, 0x19, 0x19, 0x0d, 0xfd, 0xe0, 0xf4, 0xed, 0x01, 0xef, 0x30,
+ 0xfe, 0xed, 0xe5, 0xfa, 0xe8, 0x1b, 0x0d, 0x2f, 0x04, 0xcd, 0xda, 0xca, 0xd8,
+ 0xed, 0x1a, 0x1a, 0x0f, 0x00, 0x04, 0xef, 0x7f, 0xff, 0xd3, 0xf8, 0xf4, 0x14,
+ 0xf0, 0x1f, 0xec, 0xcf, 0xff, 0xe9, 0x03, 0xa9, 0x17, 0x98, 0x24, 0x46, 0xcf,
+ 0xed, 0x14, 0xc9, 0x00, 0xd0, 0xd5, 0x36, 0xec, 0x3d, 0xd0, 0xff, 0xdd, 0x0d,
+ 0x30, 0x01, 0xd8, 0xd2, 0xbe, 0xee, 0xe6, 0x0a, 0xe7, 0xfb, 0x17, 0x1a, 0xe4,
+ 0xe6, 0x03, 0xb3, 0x25, 0x10, 0x27, 0xe3, 0x11, 0xd1, 0xc3, 0xc8, 0xda, 0xe5,
+ 0xf0, 0x0c, 0xf1, 0x13, 0xb3, 0xeb, 0xd5, 0xce, 0xb0, 0x18, 0x16, 0xe5, 0xf1,
+ 0xfa, 0xcf, 0xd0, 0xd1, 0xe4, 0xd5, 0xeb, 0xea, 0x14, 0x09, 0x29, 0xbf, 0x30,
+ 0xd5, 0xd7, 0x2a, 0x1a, 0xed, 0x1e, 0xe7, 0x19, 0x31, 0x2f, 0xce, 0xbe, 0xd9,
+ 0xeb, 0xf9, 0xd1, 0x0e, 0xe5, 0xdf, 0xfb, 0xc7, 0x02, 0xea, 0xf6, 0x29, 0x11,
+ 0xdd, 0x03, 0xdf, 0x21, 0x12, 0xf6, 0xe9, 0xf3, 0xfb, 0x16, 0x2d, 0xdd, 0xf8,
+ 0xdf, 0xe8, 0xd3, 0xfe, 0x24, 0xd1, 0xf7, 0xbf, 0xe5, 0xff, 0x1f, 0x27, 0xe1,
+ 0x00, 0xff, 0xd5, 0xb0, 0x1b, 0x17, 0xdc, 0xef, 0x1f, 0xd2, 0xf4, 0x0c, 0xf0,
+ 0xaf, 0xda, 0xf4, 0x0e, 0x22, 0x1f, 0x05, 0xe5, 0x19, 0x19, 0x22, 0x00, 0x13,
+ 0xde, 0x1c, 0xe8, 0x41, 0x17, 0xee, 0x48, 0xe4, 0xf3, 0xf1, 0xad, 0x1a, 0x1a,
+ 0xeb, 0x41, 0x35, 0x14, 0x0f, 0xd6, 0xe6, 0xde, 0xd2, 0x39, 0xc9, 0xf7, 0x0b,
+ 0xe4, 0xf0, 0x00, 0xd7, 0x09, 0xf1, 0xff, 0xca, 0xfa, 0xfb, 0x19, 0x0e, 0xf1,
+ 0x09, 0x24, 0xce, 0xe4, 0x1c, 0x10, 0xfb, 0xf7, 0xf0, 0xf2, 0x2b, 0xd7, 0xfc,
+ 0xe8, 0xe4, 0x07, 0xfe, 0xdc, 0xe8, 0x19, 0xef, 0xed, 0xff, 0x0d, 0xe1, 0xf7,
+ 0xd6, 0xf9, 0xed, 0x1b, 0x17, 0x0d, 0xf6, 0xeb, 0xf5, 0x0d, 0x0b, 0xe1, 0x0f,
+ 0xf8, 0xfc, 0xf7, 0xf7, 0xef, 0xdf, 0x12, 0x1b, 0x03, 0x06, 0xf8, 0x03, 0xf0,
+ 0xe0, 0xf2, 0xe7, 0x3b, 0xc8, 0x05, 0xef, 0x0c, 0xf8, 0x15, 0xe0, 0x2e, 0xe1,
+ 0xb6, 0xfa, 0xf0, 0x20, 0x08, 0xe2, 0xe5, 0x02, 0xe3, 0x0a, 0x00, 0x18, 0xd1,
+ 0x14, 0xe5, 0x00, 0x17, 0x13, 0xfa, 0x1b, 0xee, 0x19, 0xfd, 0xd9, 0xf5, 0xcc,
+ 0x03, 0xe6, 0x0b, 0xe2, 0x16, 0x1a, 0x15, 0xea, 0x0f, 0xdd, 0xd3, 0xf0, 0xf4,
+ 0x00, 0xc5, 0x04, 0x0b, 0x0e, 0xde, 0xdc, 0x1e, 0xe8, 0xe9, 0x43, 0x00, 0x11,
+ 0x0b, 0x25, 0xe0, 0xfc, 0x1f, 0xd7, 0x7f, 0xf7, 0x06, 0x15, 0x0c, 0x24, 0x41,
+ 0xf1, 0x1c, 0xf1, 0xfb, 0xe5, 0xcc, 0xcf, 0xf7, 0xd7, 0xe6, 0x05, 0xee, 0xee,
+ 0x2e, 0x1b, 0x1b, 0x0a, 0x28, 0x20, 0x0d, 0x06, 0xf5, 0x0a, 0x13, 0xed, 0x00,
+ 0x23, 0xc6, 0xd9, 0xf8, 0x1d, 0xe1, 0x11, 0xcc, 0xe9, 0xe3, 0xfe, 0x18, 0x0a,
+ 0xdf, 0xfb, 0xdc, 0x02, 0xed, 0xe8, 0x00, 0x19, 0x23, 0xda, 0x14, 0x0c, 0xe9,
+ 0x3e, 0xf1, 0x1c, 0x05, 0x1c, 0xdd, 0xf3, 0x19, 0x11, 0x05, 0x02, 0x04, 0xf0,
+ 0x02, 0xf7, 0xf9, 0xf4, 0x03, 0x00, 0xe2, 0xf7, 0x16, 0x07, 0x37, 0xdd, 0x09,
+ 0xfe, 0x1e, 0x27, 0xef, 0x14, 0xfa, 0xdf, 0xf0, 0xd4, 0xe5, 0x08, 0xeb, 0x26,
+ 0x33, 0x36, 0xe7, 0x18, 0xfa, 0xfc, 0x10, 0x13, 0x0c, 0xf5, 0xe5, 0xfb, 0xfe,
+ 0x1b, 0xc4, 0xe8, 0x04, 0xd1, 0x0e, 0x33, 0xee, 0x15, 0x0b, 0x12, 0xf3, 0xe8,
+ 0xd1, 0x00, 0x01, 0xe6, 0xd8, 0xd7, 0x01, 0xe5, 0x13, 0xfe, 0xf7, 0x0f, 0xee,
+ 0x18, 0x06, 0x07, 0xe8, 0xdf, 0x12, 0x17, 0xd3, 0xff, 0xfe, 0xe7, 0x15, 0x13,
+ 0xd1, 0xa8, 0xd0, 0xf2, 0x0a, 0xce, 0xfe, 0xfb, 0xf9, 0xd8, 0xcd, 0xf2, 0xf1,
+ 0x25, 0x0e, 0x1d, 0xc9, 0xeb, 0x2b, 0xf9, 0xf5, 0xf2, 0xf7, 0x32, 0xf9, 0x2b,
+ 0xef, 0x2b, 0x04, 0xf7, 0x21, 0x11, 0x1e, 0xf5, 0x3c, 0xfc, 0xc9, 0xb8, 0x3b,
+ 0x03, 0xb9, 0xb2, 0xec, 0xe8, 0xe9, 0x04, 0x18, 0xdf, 0xde, 0xc2, 0x26, 0x0e,
+ 0x0e, 0xf7, 0xd8, 0x40, 0x0d, 0xf1, 0x4e, 0xf2, 0xe9, 0xef, 0xf1, 0x13, 0x1d,
+ 0xf9, 0xe0, 0x1a, 0x10, 0x18, 0x12, 0xdd, 0x35, 0x35, 0xf9, 0x02, 0xde, 0xd2,
+ 0x2a, 0xf9, 0xdf, 0x01, 0xd5, 0xf3, 0xf5, 0x05, 0x08, 0xe5, 0x9e, 0x19, 0x0a,
+ 0x0c, 0x44, 0xeb, 0x32, 0xf1, 0x06, 0x51, 0xd6, 0xdd, 0xea, 0xf1, 0xd5, 0xd8,
+ 0xed, 0xfe, 0x7f, 0xd2, 0x07, 0x03, 0xd6, 0x14, 0x13, 0xd7, 0x0c, 0xdd, 0xe0,
+ 0xff, 0xaf, 0x1a, 0xfc, 0xd5, 0xca, 0xd0, 0xe7, 0xf3, 0xf6, 0xeb, 0xea, 0x10,
+ 0xf0, 0xfe, 0x10, 0xfb, 0xe9, 0x1a, 0xf8, 0xde, 0x0b, 0xf9, 0xb3, 0xc6, 0xf4,
+ 0xe8, 0x10, 0x1c, 0xd5, 0xee, 0xcf, 0x09, 0x01, 0xfc, 0xe9, 0xf0, 0xcd, 0x20,
+ 0xe5, 0x04, 0x0c, 0x04, 0x11, 0xec, 0xc2, 0x10, 0x1f, 0x17, 0xd1, 0xd6, 0x08,
+ 0x22, 0xf3, 0xf0, 0x34, 0x1e, 0x13, 0xfd, 0xdd, 0x18, 0xfb, 0x1f, 0xe0, 0x06,
+ 0x0c, 0xf3, 0x05, 0x03, 0xf3, 0x0e, 0x17, 0xfe, 0xde, 0x02, 0xea, 0x0e, 0xf0,
+ 0x22, 0xdc, 0xef, 0xc5, 0xeb, 0xf9, 0x0a, 0xf1, 0x05, 0xe9, 0x18, 0x12, 0xf2,
+ 0xf7, 0xea, 0x12, 0x2a, 0x33, 0xe0, 0xfd, 0xf1, 0x08, 0x24, 0xf7, 0xe5, 0xde,
+ 0xe1, 0x11, 0x35, 0x16, 0x16, 0x13, 0xf9, 0x1b, 0xda, 0xbb, 0xfd, 0xfe, 0xdf,
+ 0x0f, 0x0a, 0x40, 0xf8, 0xed, 0xea, 0xbb, 0xbe, 0xec, 0x05, 0xd7, 0x0f, 0x1b,
+ 0x24, 0xd5, 0x2b, 0xf2, 0x1b, 0xe4, 0xdc, 0x5e, 0xeb, 0xdb, 0x48, 0x3e, 0x0d,
+ 0xad, 0x26, 0xdc, 0xf2, 0xc6, 0xb5, 0x22, 0xa5, 0xc5, 0x2d, 0xc9, 0xcb, 0xe9,
+ 0x2e, 0x1f, 0xba, 0x81, 0xc7, 0xcd, 0xbb, 0x0c, 0xe5, 0xd6, 0xdd, 0xf5, 0xe7,
+ 0x17, 0x05, 0x0d, 0xf6, 0xd8, 0xf1, 0xc0, 0xff, 0xfc, 0xf2, 0xe5, 0xeb, 0xda,
+ 0x03, 0x0a, 0xfb, 0x48, 0xf9, 0xa7, 0xf5, 0xe7, 0xe8, 0x31, 0xd6, 0xd2, 0x2c,
+ 0xba, 0x4c, 0x19, 0xb7, 0x4d, 0x08, 0x0e, 0x1c, 0xce, 0xd6, 0xa6, 0xbe, 0xc2,
+ 0x07, 0xed, 0x32, 0xd7, 0xfc, 0xc9, 0xa6, 0x40, 0x1c, 0x05, 0xdb, 0x40, 0xd7,
+ 0x0a, 0x2a, 0xaf, 0x04, 0xf8, 0xff, 0x22, 0x27, 0xa1, 0xd8, 0xeb, 0xe4, 0xf0,
+ 0x04, 0xa8, 0xb2, 0x3d, 0xe3, 0x12, 0xe0, 0xb5, 0x2c, 0x0d, 0xe9, 0x30, 0xb4,
+ 0x26, 0x1d, 0xcc, 0x0c, 0xf8, 0xe2, 0x04, 0xa9, 0xee, 0xc3, 0xb6, 0xe7, 0xfa,
+ 0x3d, 0xb4, 0xe7, 0xcb, 0x35, 0x02, 0xde, 0x34, 0x3c, 0xea, 0xe6, 0x0a, 0xcc,
+ 0xfa, 0x00, 0x44, 0x03, 0xf6, 0xf2, 0xfb, 0xec, 0xce, 0x1a, 0x45, 0x35, 0xc4,
+ 0xd4, 0x26, 0xdf, 0xfe, 0xeb, 0x20, 0xe8, 0xfb, 0xd5, 0xc4, 0x3a, 0xf4, 0xfc,
+ 0x09, 0xe8, 0x3d, 0xe7, 0xd4, 0x22, 0xc2, 0xde, 0x16, 0xf8, 0x38, 0xf8, 0x1d,
+ 0x36, 0x31, 0x35, 0xfc, 0xc6, 0xfa, 0xda, 0x0e, 0xcf, 0xe8, 0xe4, 0xb9, 0xed,
+ 0xfa, 0x37, 0x18, 0x05, 0xbb, 0xd8, 0xee, 0x14, 0x0b, 0xe5, 0xec, 0xcc, 0xc9,
+ 0xf6, 0xd6, 0x08, 0xfc, 0x09, 0x2a, 0x08, 0xfd, 0xcd, 0xa2, 0x13, 0x36, 0x32,
+ 0x31, 0xf5, 0x0a, 0xef, 0xfb, 0x09, 0x17, 0x03, 0xd8, 0x2a, 0x05, 0xe7, 0x2a,
+ 0xdd, 0xef, 0xe8, 0xab, 0x0d, 0xd4, 0xcb, 0x29, 0x0d, 0xf9, 0xbf, 0x85, 0xfb,
+ 0x2a, 0xf8, 0x44, 0xdb, 0xa1, 0x24, 0xe2, 0xfe, 0xe0, 0x3a, 0x09, 0xf0, 0x08,
+ 0xa1, 0xf9, 0x2c, 0x10, 0xdc, 0xf0, 0xec, 0xe8, 0xf8, 0x54, 0x01, 0x1e, 0xb0,
+ 0x44, 0xf9, 0x0a, 0x3a, 0x29, 0xea, 0xe3, 0xee, 0x5f, 0x22, 0x5b, 0xfe, 0xdd,
+ 0x89, 0x0c, 0xb2, 0xda, 0x96, 0x99, 0xf4, 0xec, 0x05, 0xc8, 0xf9, 0xdf, 0xf8,
+ 0xd0, 0x0e, 0xca, 0x9d, 0x38, 0x0b, 0x20, 0x35, 0xf5, 0xf9, 0x2b, 0xcb, 0xef,
+ 0x26, 0xe3, 0xea, 0x45, 0x23, 0xa2, 0xb7, 0xe1, 0x1c, 0x1d, 0xe1, 0xda, 0x33,
+ 0xc6, 0x09, 0x1b, 0x4c, 0xc7, 0xd1, 0xb7, 0xf3, 0xa5, 0x36, 0x5a, 0xef, 0x05,
+ 0xfb, 0x9f, 0xbf, 0x5f, 0x17, 0x84, 0xde, 0xf7, 0xf3, 0x4f, 0xc6, 0x31, 0x25,
+ 0x27, 0xe3, 0x04, 0xe3, 0x15, 0xa5, 0xeb, 0xbe, 0xe7, 0x0b, 0x3d, 0xcc, 0xe3,
+ 0x18, 0xb5, 0x21, 0x5f, 0x09, 0xf8, 0xd2, 0xc6, 0xc4, 0x29, 0x18, 0xc2, 0x3c,
+ 0x32, 0x26, 0xe6, 0x18, 0x36, 0xf5, 0x31, 0xcd, 0xe0, 0x21, 0x6b, 0xef, 0x5c,
+ 0xca, 0xfd, 0xca, 0x28, 0xc4, 0x01, 0xf7, 0x40, 0xe1, 0xe7, 0xee, 0xdd, 0x11,
+ 0xc6, 0x08, 0x8d, 0xbe, 0xb8, 0x57, 0x3b, 0xc2, 0xf9, 0xe1, 0xec, 0x3d, 0x32,
+ 0xa9, 0xc1, 0x2f, 0x3c, 0x10, 0xc5, 0x0b, 0x0d, 0x0c, 0x08, 0xbe, 0xda, 0xf1,
+ 0xff, 0xcd, 0x00, 0x44, 0x03, 0x59, 0xae, 0x0d, 0x18, 0xdf, 0xf3, 0x7f, 0xf1,
+ 0x02, 0x5d, 0x05, 0xf9, 0xea, 0xfa, 0x91, 0x1e, 0x0d, 0xf9, 0xf3, 0x33, 0x46,
+ 0xfc, 0xfc, 0x5a, 0xcc, 0x42, 0x39, 0xe7, 0xc3, 0xb9, 0xec, 0xce, 0x9a, 0x38,
+ 0xb5, 0xea, 0xc2, 0xc8, 0x24, 0x2c, 0xcc, 0x14, 0xac, 0xe2, 0xc8, 0x33, 0xb5,
+ 0xf2, 0xa0, 0xee, 0xdd, 0x2a, 0x97, 0xef, 0x22, 0xda, 0x5d, 0x2d, 0x4e, 0x07,
+ 0xdb, 0xc6, 0xb9, 0xe9, 0xa7, 0x00, 0xf4, 0xc4, 0xd4, 0xb6, 0xef, 0xdd, 0xe8,
+ 0xef, 0xee, 0x9d, 0xeb, 0xde, 0xec, 0xc9, 0xe7, 0xf7, 0xcb, 0xb8, 0xc2, 0x0f,
+ 0xfc, 0xec, 0xfa, 0xda, 0x89, 0x05, 0x3e, 0xc0, 0x29, 0xf7, 0x14, 0xe2, 0xf1,
+ 0xda, 0xd3, 0xe5, 0xdd, 0x0a, 0xf6, 0x16, 0x03, 0xeb, 0xed, 0x39, 0x34, 0xb8,
+ 0xe7, 0xf2, 0x1f, 0xb9, 0xed, 0xb5, 0xe4, 0x18, 0x35, 0xf8, 0x1b, 0xd6, 0x20,
+ 0x48, 0x2f, 0x06, 0xaa, 0xd7, 0x1d, 0xd8, 0x06, 0x09, 0xca, 0xdf, 0x1d, 0x28,
+ 0x07, 0x11, 0xf5, 0x0c, 0xf5, 0x8a, 0xe9, 0x19, 0xc6, 0xcd, 0xf6, 0xc1, 0xe9,
+ 0x0a, 0xfd, 0x38, 0xe2, 0xde, 0x08, 0xd1, 0xd2, 0xe7, 0x10, 0xfd, 0x16, 0xdf,
+ 0x50, 0x81, 0x1f, 0xd4, 0x03, 0xbe, 0x50, 0x12, 0xd1, 0xe4, 0xdd, 0xe3, 0x1a,
+ 0x1a, 0xe0, 0xd1, 0xdb, 0xe1, 0xbe, 0x05, 0xf5, 0x9c, 0x10, 0x02, 0x0c, 0x1a,
+ 0xd4, 0x27, 0xf3, 0xd2, 0x32, 0x88, 0x0e, 0x23, 0x14, 0x58, 0xfa, 0xf8, 0xf3,
+ 0xe2, 0x32, 0xe1, 0xdd, 0xe5, 0x00, 0xb8, 0x24, 0xee, 0x39, 0xab, 0xf8, 0xd4,
+ 0xf4, 0x57, 0xd8, 0xc5, 0xf7, 0x49, 0x2f, 0x4a, 0xe5, 0xf7, 0xea, 0xfa, 0xec,
+ 0x39, 0x27, 0xc6, 0xc8, 0x1f, 0xeb, 0xd5, 0x53, 0xf7, 0x60, 0xe4, 0xe3, 0x39,
+ 0xbc, 0xd1, 0xab, 0x1f, 0x1e, 0x0d, 0xd7, 0x1c, 0x51, 0xc6, 0xc3, 0x21, 0xc2,
+ 0xd0, 0x14, 0xbd, 0xc8, 0xb0, 0xc4, 0x0e, 0xeb, 0x4b, 0x0b, 0xf0, 0xe7, 0xee,
+ 0xe9, 0x63, 0xda, 0xe8, 0x2a, 0xf8, 0xd6, 0xde, 0x19, 0x22, 0xe0, 0xb8, 0xfd,
+ 0xee, 0xd4, 0xfb, 0xda, 0x47, 0xc7, 0x50, 0x14, 0xe2, 0xd7, 0x18, 0x05, 0xd4,
+ 0xfd, 0x9f, 0x06, 0xee, 0xf1, 0xe1, 0xce, 0x40, 0x2f, 0xff, 0x0c, 0x19, 0xf1,
+ 0x29, 0xbb, 0xc6, 0xd7, 0xee, 0xb4, 0xe9, 0xc1, 0xe2, 0xfd, 0x08, 0xb4, 0x32,
+ 0xdd, 0x16, 0xe1, 0x21, 0x97, 0xd0, 0xf6, 0x03, 0xe0, 0xbc, 0xd7, 0x96, 0x48,
+ 0xe0, 0xfb, 0xd8, 0xe4, 0xe2, 0x06, 0xd6, 0x11, 0xe7, 0xd5, 0x92, 0x32, 0xfc,
+ 0xef, 0xd4, 0xe6, 0x42, 0x19, 0xce, 0x09, 0x16, 0xcb, 0xae, 0x0a, 0xe2, 0x33,
+ 0x0d, 0xa2, 0x33, 0x00, 0xe0, 0x0e, 0xd0, 0x4c, 0x15, 0xe7, 0x3f, 0xdb, 0x1a,
+ 0x33, 0x38, 0xc8, 0xfb, 0xc1, 0xfa, 0x04, 0x17, 0x27, 0x3f, 0x12, 0xb4, 0x18,
+ 0xf4, 0x05, 0xe8, 0x0b, 0x1c, 0xa8, 0xe7, 0xde, 0x04, 0xb8, 0xf0, 0x00, 0xc5,
+ 0x10, 0xd7, 0xd3, 0xb8, 0x28, 0x37, 0xf7, 0x2f, 0xde, 0x05, 0xa7, 0xe8, 0xa9,
+ 0x15, 0xf2, 0x06, 0xb7, 0xf3, 0xc3, 0xc1, 0x21, 0x0e, 0x0b, 0x2a, 0xeb, 0x05,
+ 0xfe, 0x11, 0xd0, 0xf5, 0x00, 0xc7, 0x30, 0xe4, 0x15, 0x2c, 0x00, 0x0f, 0x95,
+ 0xd8, 0x1e, 0xe8, 0x26, 0x13, 0xd8, 0xcf, 0xde, 0xcc, 0x3e, 0xcd, 0x9d, 0x15,
+ 0x4d, 0x54, 0x3f, 0xac, 0xed, 0x3f, 0xce, 0xb0, 0x21, 0x47, 0xdd, 0x31, 0x81,
+ 0xf0, 0x1e, 0x07, 0xc9, 0x29, 0x04, 0xd3, 0x3f, 0xff, 0xef, 0xb1, 0x1a, 0x05,
+ 0xfb, 0x32, 0xf2, 0xfe, 0xe2, 0x1b, 0x08, 0xaf, 0xb6, 0xa9, 0xeb, 0xba, 0x16,
+ 0x41, 0xbc, 0xaf, 0xdb, 0xdf, 0x16, 0x1c, 0x32, 0x2d, 0x19, 0xd4, 0xc4, 0x4c,
+ 0xb9, 0xba, 0xdf, 0x30, 0xc1, 0x93, 0xce, 0x03, 0xac, 0xdb, 0xef, 0xff, 0xf1,
+ 0x4a, 0x49, 0xca, 0xfc, 0xeb, 0xbd, 0x09, 0x20, 0x2f, 0x06, 0x3f, 0xfd, 0x3b,
+ 0x1c, 0x29, 0xf4, 0x11, 0x16, 0x0b, 0xd8, 0xef, 0x32, 0x08, 0xfa, 0x4d, 0xe1,
+ 0x3a, 0xbc, 0x50, 0xeb, 0x38, 0x07, 0xf2, 0x13, 0xbb, 0xd2, 0xac, 0x4f, 0x5f,
+ 0x09, 0x26, 0xfa, 0xee, 0xea, 0x3c, 0xda, 0x0f, 0x54, 0xe7, 0x07, 0x09, 0xed,
+ 0xda, 0x33, 0x20, 0x2c, 0x33, 0xcd, 0xf4, 0x3f, 0xbe, 0xf3, 0xbe, 0xa8, 0xc1,
+ 0xbb, 0x12, 0xfe, 0x00, 0x02, 0xc0, 0x25, 0x0a, 0xda, 0xa8, 0xdc, 0x24, 0x0a,
+ 0xc7, 0xef, 0xd1, 0xf2, 0xed, 0xc1, 0x0d, 0xe2, 0x8d, 0x02, 0xeb, 0x07, 0xf7,
+ 0xde, 0xf1, 0xcd, 0x20, 0x26, 0x1e, 0xd2, 0xf9, 0xa7, 0xb7, 0xef, 0x01, 0xce,
+ 0xb8, 0xaf, 0xbc, 0xd8, 0xf5, 0x4d, 0xe3, 0xd0, 0xa3, 0xc6, 0x1e, 0x02, 0xd4,
+ 0x00, 0x10, 0xde, 0xd5, 0xed, 0xfe, 0xdb, 0xd5, 0xfa, 0x0d, 0x23, 0x54, 0xf9,
+ 0xfe, 0xd0, 0xdb, 0xa8, 0x1f, 0x0a, 0xa1, 0x04, 0xef, 0x4e, 0x03, 0x19, 0xf2,
+ 0xec, 0xbd, 0x20, 0xbb, 0xe6, 0xf7, 0x1b, 0xbe, 0xe9, 0x14, 0xf9, 0xdc, 0xf2,
+ 0xe5, 0xf7, 0xf1, 0xe8, 0xb8, 0xe9, 0xe3, 0xee, 0xf4, 0x28, 0x0b, 0x9f, 0xe3,
+ 0xff, 0x22, 0xd2, 0x98, 0x81, 0x16, 0xed, 0xf3, 0x9f, 0x15, 0xfd, 0x11, 0x1a,
+ 0xda, 0xea, 0xb5, 0xf2, 0x9d, 0x08, 0x37, 0xb9, 0x22, 0xbc, 0x11, 0x21, 0xee,
+ 0x1a, 0x2c, 0xca, 0x01, 0xdd, 0xfe, 0xd8, 0xf6, 0xa5, 0x05, 0xc7, 0x9b, 0xf7,
+ 0xe2, 0xa9, 0xd6, 0x11, 0xc0, 0xf7, 0x11, 0xfa, 0x1e, 0xde, 0xc9, 0x27, 0x13,
+ 0xf4, 0xee, 0x1c, 0xbd, 0x06, 0xf5, 0xde, 0x27, 0xbf, 0x11, 0xcf, 0xc7, 0x53,
+ 0x1c, 0x17, 0xe1, 0xf4, 0xfa, 0x35, 0xce, 0xe0, 0x06, 0xeb, 0x27, 0xed, 0xc1,
+ 0xdc, 0x18, 0xf4, 0xa7, 0xde, 0x12, 0xd9, 0x09, 0xe0, 0x28, 0xcf, 0xdc, 0x11,
+ 0x12, 0x03, 0x2f, 0x30, 0xcf, 0xfa, 0x11, 0xc7, 0xe5, 0x40, 0x07, 0xeb, 0x37,
+ 0xde, 0xc0, 0x26, 0x10, 0xca, 0x3d, 0xe3, 0xe8, 0xe9, 0xf1, 0x04, 0xe2, 0xe9,
+ 0x09, 0x30, 0x20, 0x15, 0x11, 0xc7, 0xed, 0xe0, 0x06, 0x1c, 0xdf, 0x1d, 0xea,
+ 0xd7, 0x18, 0x01, 0xd8, 0x99, 0xf3, 0x05, 0x19, 0x0e, 0x1b, 0x3e, 0xbf, 0x29,
+ 0x6e, 0xcc, 0x0b, 0x2a, 0xf6, 0xa3, 0xee, 0x8f, 0x18, 0xbb, 0xfe, 0xb0, 0xce,
+ 0x28, 0xbf, 0x1e, 0x01, 0x0e, 0xeb, 0x24, 0xef, 0xfb, 0xb4, 0x11, 0x67, 0xd6,
+ 0xec, 0xa1, 0x01, 0x90, 0x41, 0x4f, 0xc0, 0x0a, 0x1f, 0xab, 0xe4, 0xf2, 0xdc,
+ 0xec, 0x09, 0x12, 0x97, 0x04, 0x22, 0xf2, 0x2d, 0x20, 0x15, 0x9f, 0xc4, 0x15,
+ 0x2f, 0xf5, 0x11, 0xfe, 0x1e, 0x05, 0x4e, 0x08, 0x0c, 0x19, 0x38, 0xf1, 0xce,
+ 0x1c, 0x20, 0xc2, 0xb7, 0xd2, 0xdc, 0xf6, 0x13, 0xfb, 0xaa, 0xde, 0x24, 0x2b,
+ 0x04, 0xb0, 0xc4, 0x23, 0x9b, 0xb3, 0xe6, 0x8d, 0xc3, 0xd6, 0xd7, 0x37, 0x2a,
+ 0xd2, 0x37, 0xda, 0x81, 0xea, 0x25, 0x2b, 0xce, 0x08, 0x07, 0xf0, 0x3a, 0xe3,
+ 0x1e, 0xa9, 0xe7, 0xf1, 0xed, 0x1a, 0xa8, 0x21, 0xe2, 0xe9, 0xd4, 0xc2, 0xd5,
+ 0x15, 0x45, 0xdf, 0x38, 0xcf, 0x3b, 0x1f, 0xe4, 0x24, 0x43, 0xe4, 0x07, 0xcc,
+ 0xca, 0xfe, 0xe8, 0x10, 0x30, 0xc0, 0xc0, 0x31, 0x9c, 0xf9, 0xdf, 0xd5, 0xd2,
+ 0x07, 0x2f, 0xfc, 0xff, 0x0e, 0xe0, 0x06, 0x20, 0xb3, 0x19, 0xf9, 0x20, 0xae,
+ 0xe3, 0xfa, 0xd5, 0x0b, 0x25, 0x2d, 0xc6, 0xe9, 0x06, 0x36, 0xce, 0xf6, 0x17,
+ 0xf5, 0xde, 0x25, 0xee, 0x25, 0xd1, 0xe4, 0xe1, 0x33, 0xfa, 0xeb, 0x05, 0x55,
+ 0xce, 0x0c, 0xf8, 0xb5, 0xeb, 0x00, 0x65, 0x0b, 0x0b, 0x32, 0xab, 0x02, 0xab,
+ 0x0f, 0xfb, 0xd6, 0xf3, 0xba, 0xd8, 0xf7, 0x25, 0xb2, 0x46, 0x3b, 0xff, 0xc6,
+ 0xbd, 0x0b, 0x16, 0xce, 0xf2, 0xed, 0xb2, 0xf4, 0xf3, 0xf9, 0xe8, 0xe9, 0xb5,
+ 0xe1, 0x9d, 0xff, 0xf0, 0xed, 0xd2, 0x18, 0xfd, 0xeb, 0xc7, 0xf6, 0x3f, 0x0c,
+ 0xdc, 0xe8, 0x0d, 0x2b, 0xd0, 0x64, 0x15, 0x10, 0xcf, 0x05, 0xdc, 0xe0, 0xcf,
+ 0xda, 0xdd, 0x24, 0xd2, 0x40, 0x07, 0xb1, 0x41, 0x02, 0xe4, 0xca, 0x07, 0x23,
+ 0x2f, 0xbf, 0xf0, 0xcb, 0xc0, 0x00, 0xba, 0xee, 0xe2, 0xc7, 0x14, 0xca, 0x3f,
+ 0xf5, 0xba, 0xdd, 0xf2, 0xfc, 0x28, 0xa4, 0x09, 0xbc, 0xe5, 0x2c, 0x22, 0x57,
+ 0x25, 0x40, 0x20, 0xab, 0xdf, 0x01, 0x2d, 0x08, 0xa4, 0xde, 0x1a, 0x0f, 0xe9,
+ 0xc3, 0x1a, 0x41, 0xc1, 0xe4, 0xb9, 0xeb, 0x0d, 0xd7, 0xb6, 0x04, 0x08, 0x47,
+ 0xed, 0x0d, 0x32, 0x2a, 0x25, 0xe3, 0x10, 0xe2, 0xb9, 0xb3, 0xd2, 0x0d, 0x3a,
+ 0x2c, 0xe4, 0xef, 0x39, 0x9c, 0xcb, 0xbe, 0xf1, 0x23, 0x60, 0x02, 0x4a, 0xd1,
+ 0xbe, 0xd9, 0xa9, 0x2a, 0x1e, 0x0f, 0xb4, 0x02, 0x03, 0xdf, 0xd2, 0x23, 0xa7,
+ 0xcf, 0x1e, 0x32, 0x16, 0x09, 0xfe, 0x1d, 0xe6, 0x19, 0xd7, 0xb9, 0xd1, 0xc4,
+ 0x51, 0xbc, 0x13, 0x16, 0xf4, 0x4e, 0xf0, 0xcb, 0xff, 0xeb, 0xdd, 0x03, 0xf4,
+ 0x12, 0x25, 0x40, 0xde, 0x47, 0xf7, 0xe1, 0xdf, 0x45, 0xf6, 0x26, 0xa7, 0xeb,
+ 0xe6, 0xee, 0x0a, 0xed, 0xed, 0xfb, 0x32, 0xc4, 0x45, 0x33, 0xd2, 0x26, 0xeb,
+ 0x1e, 0x09, 0x2a, 0xde, 0x3f, 0xcc, 0x44, 0xe5, 0x27, 0xb6, 0x50, 0xb2, 0x03,
+ 0xf4, 0x16, 0xc7, 0xc2, 0xdc, 0xd3, 0x05, 0x35, 0x14, 0x4e, 0xd6, 0xd5, 0x4f,
+ 0x0d, 0xcd, 0x1b, 0xfe, 0x68, 0xe5, 0xce, 0x0c, 0x1b, 0xe4, 0xea, 0xc0, 0xfd,
+ 0xcb, 0x79, 0x0a, 0x9b, 0x40, 0xe2, 0xfd, 0xa4, 0xbc, 0xc3, 0x21, 0x51, 0x48,
+ 0xa2, 0x06, 0x91, 0x00, 0xe1, 0xfa, 0x37, 0x09, 0xdc, 0x3d, 0x00, 0xcd, 0x7f,
+ 0xf7, 0x43, 0x1c, 0xe4, 0x1c, 0xfc, 0x4a, 0x21, 0xb2, 0xdb, 0x04, 0x21, 0xcf,
+ 0x00, 0xa6, 0xe4, 0x29, 0x17, 0x2a, 0xde, 0x22, 0x47, 0xf1, 0x17, 0xe5, 0x03,
+ 0xd3, 0xc5, 0xce, 0xfc, 0xd9, 0xe8, 0xd8, 0xf1, 0xc2, 0x2f, 0x08, 0x47, 0xf3,
+ 0xc4, 0x04, 0xea, 0xd3, 0xb4, 0x33, 0xe2, 0xee, 0xc5, 0xe5, 0x19, 0xf2, 0xff,
+ 0xc1, 0xfb, 0xd7, 0x1e, 0xe7, 0xd2, 0x03, 0xd8, 0xd9, 0xea, 0xb0, 0xfa, 0x1f,
+ 0x43, 0xe8, 0xe1, 0x2e, 0x15, 0x24, 0xe5, 0xc4, 0x1b, 0xd9, 0x0d, 0x1b, 0xe3,
+ 0xeb, 0x0c, 0xcc, 0xe1, 0x46, 0xfc, 0xde, 0x0e, 0x0a, 0x0b, 0xd2, 0x10, 0xda,
+ 0x0f, 0xec, 0x0a, 0xf9, 0xe1, 0xdf, 0x14, 0xea, 0x22, 0x45, 0xf0, 0x22, 0x15,
+ 0xc6, 0x04, 0xfd, 0x0c, 0x2e, 0x01, 0xdc, 0x05, 0xba, 0xf3, 0xe3, 0x04, 0x1c,
+ 0xde, 0xf7, 0xd8, 0x13, 0xfa, 0xd6, 0xec, 0x1b, 0x15, 0xfa, 0xcf, 0xe6, 0xdd,
+ 0x22, 0x03, 0xf4, 0xd7, 0x1f, 0xf3, 0xe2, 0xfe, 0x02, 0x2e, 0xf7, 0xdb, 0xf6,
+ 0xf9, 0xfb, 0x17, 0xed, 0x1a, 0xf0, 0xed, 0xc6, 0xf7, 0x18, 0xad, 0x29, 0xfb,
+ 0x04, 0xf0, 0x35, 0x0b, 0xd0, 0x0d, 0x02, 0x17, 0x09, 0xf6, 0xfd, 0x0d, 0xac,
+ 0xdf, 0x18, 0xd5, 0xcf, 0xd9, 0xce, 0x3d, 0xf8, 0xeb, 0xff, 0x12, 0xb1, 0x15,
+ 0x01, 0xf9, 0x1a, 0x10, 0xeb, 0xf5, 0x1f, 0x05, 0x0e, 0xfd, 0xfd, 0x12, 0x09,
+ 0x27, 0xcd, 0x11, 0x0d, 0x35, 0xa3, 0xda, 0xc4, 0xde, 0xee, 0x03, 0xf7, 0x1b,
+ 0x26, 0x0d, 0x18, 0x2c, 0x06, 0xb9, 0xef, 0x2b, 0xe6, 0x0a, 0xee, 0x0c, 0xed,
+ 0x79, 0xe3, 0x16, 0x47, 0xf1, 0xfe, 0xde, 0xf2, 0xe5, 0x05, 0xd4, 0xde, 0xec,
+ 0x44, 0xc9, 0xd1, 0x2f, 0x07, 0xf6, 0x17, 0x1b, 0xd9, 0xdd, 0xed, 0x3a, 0x35,
+ 0x2a, 0x3e, 0x08, 0x08, 0xaa, 0xef, 0xeb, 0xa6, 0x7f, 0xf1, 0x57, 0x26, 0x29,
+ 0xe0, 0x0e, 0x33, 0xcf, 0x29, 0xdf, 0xd8, 0xed, 0x18, 0xf2, 0x07, 0x08, 0x28,
+ 0xd4, 0xde, 0xd7, 0xd4, 0x0b, 0xc2, 0xcf, 0xf3, 0x2e, 0x0b, 0xb3, 0x95, 0x1f,
+ 0x1f, 0x23, 0x02, 0x0c, 0x19, 0xf5, 0xe6, 0xfd, 0xb9, 0x12, 0xe6, 0x13, 0x13,
+ 0x35, 0x38, 0x20, 0x1a, 0xe6, 0xf4, 0x32, 0x50, 0xc3, 0x04, 0xb5, 0xdf, 0xe1,
+ 0xf4, 0xf5, 0xdb, 0x42, 0xfb, 0xeb, 0xf2, 0xb8, 0x20, 0xe7, 0x25, 0x06, 0xee,
+ 0x33, 0x12, 0xdd, 0x01, 0xef, 0x0f, 0x1f, 0xf2, 0xcc, 0xf9, 0x10, 0xe7, 0xc3,
+ 0x9e, 0xe1, 0x19, 0x2a, 0xf5, 0x0c, 0xde, 0xc8, 0xda, 0xf4, 0xb0, 0xec, 0x09,
+ 0x1a, 0x02, 0xab, 0x5e, 0xce, 0x0e, 0x2d, 0xfb, 0xee, 0x1b, 0xf2, 0x3d, 0x51,
+ 0xde, 0xbf, 0x24, 0xe0, 0x3a, 0xa9, 0x27, 0xaa, 0xce, 0xb3, 0xf7, 0xcd, 0xf8,
+ 0xa7, 0xf6, 0xf3, 0xe1, 0x1e, 0x3a, 0x36, 0xc2, 0xb4, 0xfb, 0x41, 0x51, 0x0e,
+ 0x17, 0x27, 0x00, 0x14, 0xf0, 0xe2, 0xc9, 0xcc, 0xf6, 0xcd, 0xf0, 0xcb, 0x2f,
+ 0xb6, 0x06, 0x29, 0xe6, 0xba, 0xf5, 0xed, 0xe1, 0xdb, 0x49, 0xfa, 0xfd, 0xfe,
+ 0x03, 0xff, 0x07, 0xf9, 0x33, 0xc7, 0xfd, 0x1c, 0x4c, 0x93, 0x0b, 0xeb, 0xbd,
+ 0xda, 0xf3, 0x1a, 0xfb, 0x3d, 0x13, 0x2d, 0x3a, 0x2e, 0x3b, 0xc7, 0x9b, 0x1b,
+ 0xe5, 0xec, 0x0c, 0x11, 0xdf, 0xee, 0xef, 0xce, 0x20, 0x18, 0x3e, 0xe9, 0xf9,
+ 0x22, 0x15, 0x04, 0xfe, 0x09, 0x00, 0x10, 0xfe, 0xf1, 0x2e, 0xf6, 0xbe, 0x3c,
+ 0xb7, 0xd6, 0xe2, 0x08, 0x24, 0x36, 0xf3, 0x05, 0x17, 0x47, 0xdd, 0xf9, 0xf0,
+ 0xff, 0xf3, 0x4a, 0xea, 0xee, 0xe1, 0x03, 0x26, 0x95, 0xc4, 0x3c, 0x44, 0x2c,
+ 0xd3, 0xeb, 0xb8, 0x67, 0x0d, 0x25, 0x3d, 0xbc, 0x19, 0x3e, 0xfa, 0xdb, 0xd8,
+ 0x7f, 0x25, 0xa0, 0x28, 0x13, 0x34, 0xef, 0xd3, 0x23, 0xec, 0xbf, 0xc4, 0x09,
+ 0xcf, 0x3f, 0xca, 0x02, 0xf4, 0xc1, 0xde, 0xb7, 0xfd, 0xb9, 0x0e, 0xfd, 0xf8,
+ 0x09, 0xdd, 0xfb, 0xb3, 0xe8, 0x2d, 0x29, 0x27, 0xf3, 0xf6, 0xfc, 0xec, 0x13,
+ 0x08, 0xfe, 0xf1, 0x17, 0x06, 0xc5, 0x11, 0xf5, 0xf2, 0x1d, 0x25, 0xe0, 0xd6,
+ 0x01, 0x00, 0x1b, 0xbc, 0x05, 0x2f, 0xbf, 0x16, 0x16, 0x2e, 0xc6, 0xfa, 0xb4,
+ 0x5a, 0x43, 0xaa, 0xdd, 0xf2, 0xf2, 0xd6, 0xa1, 0xef, 0x0d, 0xcc, 0xca, 0xe0,
+ 0x57, 0xec, 0x9d, 0xd2, 0x3c, 0xd4, 0xf2, 0xc6, 0xfc, 0xbe, 0xb2, 0x11, 0xbc,
+ 0xdc, 0xef, 0x3b, 0xe1, 0x23, 0xc6, 0x0c, 0xd9, 0x15, 0x05, 0xf1, 0x54, 0x34,
+ 0xf9, 0xaa, 0xf3, 0xf4, 0x98, 0xda, 0x21, 0x22, 0xdd, 0xf7, 0x17, 0x11, 0x4b,
+ 0xed, 0x05, 0xf0, 0xf4, 0x41, 0xd1, 0xa8, 0x0f, 0x08, 0x1b, 0x16, 0x04, 0x9c,
+ 0xff, 0x18, 0xf1, 0xbe, 0x3d, 0x0b, 0xcd, 0xbf, 0xa7, 0xe2, 0x2c, 0xec, 0x0d,
+ 0xf5, 0xc9, 0xf3, 0x00, 0x07, 0x0b, 0xd1, 0x9f, 0x42, 0x21, 0xcf, 0xed, 0xfa,
+ 0xf7, 0x14, 0x0a, 0xcf, 0xc6, 0x31, 0x0e, 0xd1, 0xd0, 0x4d, 0xbb, 0xe9, 0xe0,
+ 0x3d, 0xd4, 0xcb, 0x21, 0xfa, 0xd9, 0x2f, 0xb4, 0xd3, 0xe5, 0x14, 0x03, 0xa4,
+ 0xda, 0x17, 0x18, 0x3a, 0xf1, 0xfc, 0xb6, 0x2b, 0x21, 0xde, 0x1b, 0xaf, 0xf0,
+ 0xe3, 0xd0, 0xdb, 0xf2, 0x15, 0xce, 0x24, 0x19, 0xc4, 0xf7, 0x0d, 0x11, 0xf7,
+ 0xff, 0xfa, 0xc8, 0xa5, 0x19, 0xde, 0xe8, 0xd6, 0x05, 0x0a, 0x1d, 0x12, 0xfd,
+ 0xed, 0xc5, 0x2a, 0xc1, 0xc6, 0xbc, 0xc8, 0x04, 0x81, 0x4c, 0x2a, 0xe9, 0xac,
+ 0xfa, 0x25, 0x40, 0xeb, 0xf2, 0xf4, 0xce, 0x1a, 0xd1, 0xcb, 0xee, 0xe0, 0xc3,
+ 0x1e, 0xd5, 0xca, 0x0d, 0xf6, 0x3b, 0x3b, 0xf5, 0x1f, 0xe2, 0x2e, 0x35, 0x3a,
+ 0x3c, 0xb7, 0xd6, 0x0a, 0xd3, 0xe4, 0x47, 0x13, 0x38, 0x09, 0xde, 0xd3, 0x0b,
+ 0x05, 0xe7, 0xe7, 0x25, 0x17, 0x27, 0x19, 0x17, 0xce, 0xf3, 0x22, 0xbd, 0xec,
+ 0xee, 0xca, 0x5a, 0xf8, 0xeb, 0x22, 0xeb, 0xe3, 0x34, 0xf9, 0x18, 0xcc, 0xbd,
+ 0x0b, 0x01, 0xfa, 0x15, 0xce, 0x08, 0x39, 0xaf, 0xe9, 0x2a, 0x22, 0x3d, 0xe7,
+ 0xd4, 0x23, 0xdc, 0xdd, 0x12, 0xdc, 0x28, 0xbd, 0xde, 0x09, 0xdd, 0xee, 0x52,
+ 0xff, 0x21, 0xc0, 0xcb, 0xd7, 0x34, 0xfa, 0xee, 0xf3, 0x2e, 0x0a, 0x1e, 0x0a,
+ 0xd5, 0x2b, 0xcd, 0xe6, 0x16, 0x34, 0x04, 0xf2, 0x36, 0xed, 0x1b, 0xce, 0xd2,
+ 0x42, 0x04, 0xd9, 0xe2, 0x71, 0xd2, 0x00, 0xf0, 0xfb, 0xd7, 0x2a, 0x40, 0x11,
+ 0xe0, 0x1e, 0xfe, 0x01, 0x09, 0x34, 0xb8, 0x26, 0xc1, 0xfc, 0x9d, 0x00, 0xf0,
+ 0xeb, 0x11, 0x04, 0xd9, 0x9b, 0x21, 0xf3, 0x02, 0xd6, 0x06, 0xeb, 0x3c, 0xea,
+ 0xbb, 0xfc, 0xde, 0x12, 0x0a, 0x0c, 0x62, 0xde, 0xe3, 0xe2, 0xda, 0x19, 0xfc,
+ 0xe0, 0xe7, 0x40, 0xe1, 0xd2, 0x8d, 0xa4, 0xf4, 0xe3, 0x02, 0xe0, 0xd1, 0x39,
+ 0xd0, 0x1d, 0xed, 0xca, 0xe0, 0x11, 0x87, 0xe2, 0xd1, 0xd9, 0xb5, 0xea, 0xa3,
+ 0x35, 0xfe, 0x12, 0xef, 0x09, 0x37, 0x33, 0xeb, 0xf5, 0xf7, 0xe2, 0xcc, 0xf5,
+ 0x2b, 0xc1, 0xfa, 0xd2, 0xe6, 0x02, 0xf7, 0xc8, 0xe9, 0x7f, 0xc4, 0x5f, 0x2c,
+ 0x0e, 0xfc, 0x2f, 0xea, 0xad, 0x1c, 0xdd, 0xf8, 0xd1, 0xfa, 0x09, 0xb0, 0xae,
+ 0xd9, 0xc6, 0xde, 0x04, 0xfc, 0xe4, 0x0d, 0xef, 0xce, 0x1b, 0x11, 0x21, 0xfa,
+ 0xca, 0x4b, 0x1e, 0x10, 0xf1, 0x1d, 0x3c, 0xbf, 0xd1, 0xe5, 0xd6, 0x0d, 0x18,
+ 0xdc, 0x13, 0x10, 0xee, 0x4f, 0x0b, 0x07, 0xf3, 0x08, 0xde, 0x30, 0xd4, 0x3a,
+ 0x4c, 0x19, 0xac, 0xfb, 0xe1, 0x2b, 0x23, 0xde, 0x1d, 0x1d, 0x27, 0x12, 0xe4,
+ 0x0e, 0xe8, 0x61, 0xcb, 0xa1, 0x03, 0xe6, 0x97, 0x44, 0xab, 0x07, 0xb4, 0xef,
+ 0xda, 0xdc, 0x0a, 0xe7, 0xec, 0xd8, 0x1e, 0xb6, 0x2f, 0xdf, 0x13, 0xcd, 0x37,
+ 0x03, 0x0c, 0x1e, 0xde, 0x9a, 0x0e, 0x11, 0x2b, 0xf5, 0xdd, 0xe0, 0xd2, 0x1d,
+ 0xbd, 0x01, 0x0e, 0xfd, 0xdc, 0xf5, 0x0a, 0xca, 0x33, 0xe1, 0x0b, 0xf1, 0xf8,
+ 0x2e, 0xa5, 0x1d, 0xe7, 0x4c, 0x01, 0x33, 0x18, 0x2a, 0xc9, 0xe8, 0x04, 0xd8,
+ 0x1f, 0xde, 0x00, 0x44, 0xbd, 0xd9, 0xc7, 0x11, 0xf0, 0xd6, 0x32, 0xcf, 0x13,
+ 0x9a, 0xdd, 0xd9, 0xc7, 0xf4, 0xf2, 0xbb, 0xc5, 0xf0, 0x01, 0x00, 0x81, 0xe7,
+ 0x27, 0xf4, 0x10, 0x08, 0x6a, 0xee, 0xb7, 0x13, 0x58, 0x5f, 0xd8, 0x16, 0xff,
+ 0x43, 0xe9, 0x31, 0x13, 0x51, 0xfc, 0xed, 0x01, 0x35, 0xb7, 0x02, 0x00, 0xf8,
+ 0xf1, 0x0f, 0x2a, 0xf7, 0xe7, 0xc8, 0xa8, 0xeb, 0xa8, 0x2c, 0x21, 0xf4, 0x2d,
+ 0x15, 0x41, 0x14, 0x28, 0x18, 0xf4, 0x0f, 0x21, 0xfe, 0xd7, 0x27, 0x43, 0xf2,
+ 0xa3, 0xe5, 0x52, 0xf4, 0xfd, 0xc4, 0x59, 0x0a, 0xbf, 0xe2, 0xcd, 0x39, 0x15,
+ 0x08, 0x10, 0x09, 0x97, 0x97, 0x23, 0x40, 0x28, 0x4a, 0x0e, 0xed, 0x1d, 0x32,
+ 0xf4, 0xc6, 0xe6, 0xae, 0xf1, 0x45, 0x4b, 0xd0, 0xfe, 0x33, 0x35, 0x1c, 0xda,
+ 0xaf, 0x17, 0x03, 0x37, 0x2c, 0x02, 0x1c, 0xda, 0x27, 0xf2, 0x36, 0xed, 0x2a,
+ 0x2a, 0x14, 0xcf, 0xee, 0x0d, 0xd7, 0x06, 0xe2, 0x05, 0x52, 0xee, 0x14, 0xe1,
+ 0xf3, 0xad, 0xea, 0xe3, 0xe7, 0xfd, 0xf1, 0xea, 0xeb, 0xc4, 0x1a, 0xff, 0x0e,
+ 0xdc, 0xce, 0xf2, 0xfd, 0xaf, 0xb1, 0xb1, 0xaf, 0x2e, 0xb9, 0x14, 0x31, 0x31,
+ 0xbd, 0xcb, 0xda, 0xc1, 0x37, 0xfd, 0x64, 0xe2, 0xba, 0xfb, 0x27, 0xef, 0x15,
+ 0xd0, 0x1d, 0xee, 0x0f, 0xc3, 0xea, 0x30, 0x31, 0xfb, 0xd5, 0x12, 0x0c, 0xf2,
+ 0x3a, 0x89, 0x30, 0x91, 0xc2, 0xda, 0xc1, 0x0b, 0xe1, 0x31, 0x4c, 0x30, 0xde,
+ 0xe8, 0x0a, 0x11, 0x0d, 0xeb, 0xef, 0x00, 0x05, 0xd9, 0xbf, 0x08, 0x39, 0x36,
+ 0xed, 0xbe, 0xc9, 0x1e, 0xf0, 0x3b, 0x44, 0xfa, 0xa4, 0x8f, 0xc7, 0xd1, 0xd5,
+ 0x0c, 0xe0, 0x14, 0xcf, 0x24, 0xcb, 0x1b, 0xf7, 0xd9, 0xdf, 0x10, 0xfa, 0xa9,
+ 0xa7, 0x03, 0xfd, 0xd4, 0x0b, 0xca, 0xd5, 0xe4, 0xb6, 0x23, 0xca, 0xed, 0x04,
+ 0xf1, 0x38, 0xf9, 0x01, 0xac, 0x4c, 0x0e, 0xd7, 0xcf, 0xad, 0xe4, 0x20, 0x0a,
+ 0xf8, 0xfc, 0x2f, 0xcc, 0xff, 0xdd, 0xe1, 0x81, 0x04, 0xac, 0xd6, 0xe6, 0xbd,
+ 0x2e, 0x47, 0xf1, 0x1f, 0x3a, 0xd0, 0x0f, 0xb9, 0x17, 0xac, 0x04, 0xcb, 0x20,
+ 0x32, 0x88, 0x20, 0x00, 0x34, 0xe4, 0xdc, 0xc6, 0x37, 0x0c, 0x22, 0x02, 0x1e,
+ 0xd6, 0xe0, 0x02, 0x06, 0xa2, 0xe9, 0xec, 0xe5, 0x03, 0xee, 0xe6, 0xca, 0x01,
+ 0xd1, 0xb8, 0x0d, 0x26, 0x2a, 0x12, 0xbc, 0xdb, 0xf3, 0xcb, 0xc2, 0x21, 0xcf,
+ 0x3c, 0xfc, 0x04, 0xc9, 0xc5, 0x13, 0xcd, 0x04, 0x2a, 0xe8, 0xee, 0xaf, 0xec,
+ 0x1b, 0xf9, 0xc1, 0x05, 0x33, 0x1f, 0x1f, 0x24, 0xdb, 0xb4, 0xea, 0x12, 0x54,
+ 0xf7, 0xee, 0x24, 0xe3, 0xe0, 0x09, 0xbe, 0xd5, 0x15, 0xdc, 0x2d, 0xea, 0x36,
+ 0x1e, 0xda, 0xdf, 0x21, 0x07, 0xbd, 0x31, 0xeb, 0xc3, 0xe6, 0xb1, 0xd9, 0x24,
+ 0xdc, 0x19, 0x0c, 0xa8, 0xff, 0x0a, 0x13, 0xf0, 0xbe, 0xea, 0xde, 0xba, 0xea,
+ 0x19, 0x2c, 0xe0, 0xdb, 0x48, 0x10, 0xfc, 0x05, 0x1a, 0x0f, 0xb9, 0x2c, 0x0d,
+ 0xd3, 0xb5, 0xea, 0xd3, 0x04, 0xdd, 0xdc, 0x1e, 0xd8, 0x19, 0xa7, 0x0b, 0xde,
+ 0x1a, 0xdd, 0x2d, 0xdc, 0xe8, 0x10, 0xf7, 0x19, 0xfb, 0xf6, 0xdb, 0xca, 0xd4,
+ 0x19, 0xe1, 0x2b, 0xd3, 0xd9, 0xe6, 0xc7, 0xf3, 0xec, 0xfa, 0x15, 0x06, 0xc2,
+ 0xf9, 0x0a, 0xb0, 0xf0, 0x16, 0xdd, 0xf6, 0xd7, 0x0c, 0x26, 0xfc, 0x31, 0x05,
+ 0x36, 0xff, 0x35, 0x07, 0x07, 0x2d, 0xef, 0x02, 0xfb, 0xa0, 0xf2, 0xea, 0x0b,
+ 0x20, 0x32, 0x13, 0x0f, 0x27, 0xb3, 0xf3, 0xbb, 0xe7, 0x14, 0xdc, 0x0b, 0x02,
+ 0x1d, 0xe2, 0xf7, 0xea, 0xff, 0xf6, 0x0f, 0xde, 0xed, 0xf3, 0x21, 0x0b, 0xee,
+ 0x18, 0xf3, 0x33, 0xf7, 0x25, 0xf0, 0xf8, 0xd3, 0xc5, 0xe0, 0xeb, 0xc9, 0xea,
+ 0xe2, 0x08, 0x10, 0xcd, 0xfc, 0xf1, 0x0e, 0x02, 0x15, 0xcd, 0xf9, 0x18, 0x14,
+ 0x08, 0x1f, 0x01, 0xfe, 0xcb, 0xf8, 0xed, 0xef, 0x05, 0x07, 0xf7, 0xdd, 0x07,
+ 0x17, 0xd0, 0x16, 0x20, 0x22, 0x06, 0x0d, 0x05, 0x7f, 0xfd, 0xdc, 0xf4, 0x18,
+ 0x16, 0x0c, 0xd8, 0x14, 0x05, 0x01, 0x17, 0xc5, 0xcf, 0xf1, 0xd9, 0x02, 0xed,
+ 0x04, 0x0d, 0x22, 0x1e, 0xf6, 0xbb, 0xfd, 0xed, 0x0a, 0xf8, 0xde, 0xde, 0xd8,
+ 0x34, 0xf4, 0xfc, 0xf9, 0xcc, 0xcf, 0xf2, 0xea, 0x41, 0x47, 0xd9, 0xd6, 0xe9,
+ 0xf5, 0xe9, 0xc9, 0x07, 0x09, 0xfc, 0xf6, 0xd6, 0x0a, 0xeb, 0xed, 0xf7, 0xf2,
+ 0xfc, 0xed, 0xf6, 0xfd, 0xe3, 0xf2, 0x25, 0x0d, 0xd9, 0xd7, 0xf3, 0x14, 0xe5,
+ 0x4d, 0x0a, 0xeb, 0xf8, 0xeb, 0x19, 0xd2, 0xbb, 0xe7, 0xcb, 0xfa, 0xf4, 0xd7,
+ 0xf4, 0x17, 0xb7, 0x0e, 0xe8, 0xf0, 0x13, 0xda, 0xf3, 0x0c, 0x0e, 0x0b, 0xe5,
+ 0xea, 0xf9, 0x0c, 0x58, 0x03, 0xfb, 0x0b, 0xf6, 0xeb, 0x0d, 0xf9, 0xde, 0x29,
+ 0xda, 0x18, 0xfc, 0xdb, 0xdb, 0xc8, 0x0c, 0x37, 0x1f, 0xf9, 0x14, 0x13, 0xdf,
+ 0x12, 0x22, 0xff, 0x17, 0xe9, 0xe1, 0xf6, 0x0d, 0x0a, 0xe5, 0xef, 0xd3, 0xd6,
+ 0xf2, 0xd6, 0xfb, 0xf7, 0xe1, 0x07, 0xff, 0x42, 0xdc, 0x2d, 0xb0, 0x07, 0xfb,
+ 0xf3, 0x12, 0x05, 0x0f, 0xdf, 0x0e, 0xdc, 0xf2, 0x00, 0xc8, 0xdf, 0x02, 0x0e,
+ 0x08, 0x22, 0x18, 0x13, 0x2b, 0xd9, 0x00, 0x0b, 0xc2, 0x12, 0xdf, 0xfe, 0x4a,
+ 0x3c, 0xcc, 0x47, 0x12, 0x20, 0xde, 0x1a, 0xca, 0xed, 0xed, 0x30, 0x0c, 0x04,
+ 0x38, 0x0f, 0xeb, 0x19, 0xb5, 0x20, 0x22, 0x07, 0xec, 0x09, 0xd4, 0xb4, 0xf3,
+ 0x11, 0xf6, 0xbb, 0xd9, 0x05, 0xf4, 0x0a, 0xed, 0x33, 0xc1, 0xe8, 0x43, 0xd4,
+ 0x07, 0xfc, 0xdc, 0x2e, 0x0f, 0x1d, 0x2e, 0xd2, 0xe5, 0xff, 0x1a, 0xc1, 0xea,
+ 0x26, 0x29, 0xb8, 0x17, 0xbe, 0x08, 0xdc, 0xe9, 0xd7, 0xeb, 0xe1, 0x31, 0xdf,
+ 0xef, 0x01, 0xd8, 0xa1, 0x3b, 0x20, 0x06, 0x9b, 0xf5, 0xfd, 0xee, 0x2e, 0xd7,
+ 0xec, 0x18, 0x25, 0x32, 0x7f, 0x0b, 0x08, 0xeb, 0xa0, 0x0d, 0xfd, 0x33, 0xfb,
+ 0xce, 0xdf, 0x0a, 0xf9, 0x00, 0x18, 0xd8, 0xe7, 0x25, 0xd8, 0xd5, 0x09, 0xeb,
+ 0x17, 0x74, 0x10, 0xed, 0x00, 0x12, 0x0c, 0xdf, 0xb9, 0x4b, 0x08, 0x16, 0xe1,
+ 0xf3, 0xdf, 0x1e, 0x05, 0xf9, 0xd4, 0xc7, 0xcf, 0xd9, 0xe1, 0xc5, 0xbb, 0xe0,
+ 0xce, 0xf5, 0x1d, 0xe5, 0x11, 0x06, 0xe1, 0x07, 0xf6, 0x26, 0xcd, 0x03, 0xc7,
+ 0x15, 0xd9, 0x23, 0xe8, 0xd0, 0x05, 0xf9, 0xf3, 0xc9, 0xe1, 0xe0, 0x05, 0xe6,
+ 0x11, 0xf3, 0xde, 0xe2, 0xfa, 0xc4, 0xfb, 0x05, 0x13, 0x01, 0x1c, 0xe9, 0x08,
+ 0xd8, 0xdd, 0xb9, 0x19, 0xb5, 0xea, 0xa8, 0x03, 0xde, 0xf2, 0x09, 0x45, 0x39,
+ 0x0f, 0xf1, 0xda, 0xe2, 0x13, 0x37, 0x16, 0xe2, 0x3f, 0xf7, 0xdf, 0x32, 0xe9,
+ 0x07, 0x4c, 0xeb, 0x40, 0xac, 0xe5, 0xb0, 0xfe, 0xc2, 0xe0, 0xf4, 0xd7, 0xc1,
+ 0x23, 0xf5, 0xdf, 0xe7, 0x0f, 0xff, 0xe3, 0x34, 0xbf, 0xd1, 0xdc, 0xfe, 0x0c,
+ 0xd1, 0xf0, 0xea, 0xd6, 0xbd, 0xf8, 0xc3, 0xcc, 0xc5, 0xf0, 0xf3, 0xdb, 0x03,
+ 0x17, 0x1d, 0x0d, 0x28, 0xe8, 0x16, 0xd3, 0x16, 0xcc, 0xf5, 0x17, 0xec, 0x36,
+ 0xe4, 0x2e, 0x07, 0xdc, 0xe2, 0xd3, 0x0a, 0xd7, 0x0a, 0x1f, 0xc0, 0x19, 0x16,
+ 0xeb, 0xd4, 0xd9, 0xfe, 0xd9, 0xd9, 0xb6, 0xf9, 0xf6, 0xdd, 0xd1, 0xe4, 0x25,
+ 0xc0, 0xf9, 0xda, 0x10, 0xe5, 0x25, 0x15, 0xb5, 0x1d, 0x9c, 0x10, 0x05, 0xd1,
+ 0xd2, 0x8d, 0xee, 0xde, 0xa7, 0xb7, 0x49, 0xe9, 0x26, 0x9c, 0x03, 0xec, 0x22,
+ 0xf9, 0xe3, 0x30, 0x04, 0x29, 0x10, 0xcd, 0xe2, 0xce, 0xf6, 0x18, 0xfd, 0xe5,
+ 0x21, 0x0b, 0x19, 0xf7, 0x19, 0xe7, 0xd1, 0xf2, 0xfc, 0xf8, 0x10, 0xbf, 0xdb,
+ 0x0f, 0xd7, 0x4b, 0x0c, 0x30, 0x1a, 0x49, 0xf7, 0xd0, 0xc8, 0x14, 0x2b, 0x13,
+ 0xa6, 0xe6, 0xf0, 0xcf, 0x09, 0x22, 0x30, 0xf5, 0x41, 0xc9, 0x06, 0xf7, 0x1f,
+ 0xe9, 0xf0, 0x04, 0x0d, 0xde, 0xed, 0x10, 0x1b, 0xc2, 0x29, 0xc0, 0xd3, 0x2a,
+ 0xcf, 0xfb, 0xc8, 0x17, 0xf9, 0xa6, 0x11, 0x06, 0xf5, 0x0d, 0xd3, 0xd1, 0xf9,
+ 0xc0, 0xa7, 0xe3, 0xff, 0xec, 0x15, 0xe0, 0xed, 0xba, 0xcf, 0xfe, 0xf9, 0xea,
+ 0x01, 0x43, 0x01, 0x08, 0xfd, 0x2a, 0xc0, 0x42, 0x15, 0xc7, 0xfb, 0xfa, 0xf7,
+ 0xcd, 0x24, 0xff, 0xf4, 0xc3, 0xde, 0xef, 0xe5, 0x03, 0x06, 0x15, 0xeb, 0xf5,
+ 0x27, 0xe3, 0xd7, 0x09, 0x10, 0x07, 0xe9, 0x1f, 0xdf, 0xdb, 0x24, 0x1f, 0xeb,
+ 0xcb, 0xf8, 0xc3, 0xda, 0x1f, 0x19, 0x0c, 0xe2, 0x6a, 0xce, 0xfa, 0xf9, 0xb8,
+ 0x18, 0xf7, 0xf7, 0xe6, 0xd0, 0x1d, 0xac, 0x2a, 0xfd, 0xf7, 0x0c, 0xf2, 0x18,
+ 0xb3, 0xc5, 0x33, 0xd9, 0x43, 0xfb, 0xf0, 0x46, 0xc7, 0xb7, 0x0a, 0xde, 0xf8,
+ 0x08, 0xed, 0x15, 0xd9, 0xd3, 0x15, 0x24, 0x34, 0x0a, 0x36, 0x03, 0xb4, 0xce,
+ 0x87, 0xc0, 0x7f, 0xc1, 0xec, 0xf6, 0xec, 0x16, 0x14, 0x01, 0x23, 0x00, 0xe3,
+ 0xcd, 0x94, 0xee, 0xe3, 0xec, 0xf9, 0x08, 0xf6, 0x0e, 0xf3, 0xec, 0x0f, 0xba,
+ 0xb5, 0x07, 0x08, 0xfb, 0xd1, 0xc8, 0x0d, 0xb5, 0xe7, 0xfb, 0x13, 0xb6, 0xfb,
+ 0x10, 0xf7, 0xbb, 0xdb, 0xdb, 0xe2, 0x09, 0x29, 0x4e, 0x36, 0x2a, 0xe4, 0xe1,
+ 0x27, 0xde, 0xe8, 0xdb, 0x01, 0x15, 0x03, 0xf1, 0x20, 0xef, 0xc2, 0xd8, 0xca,
+ 0xac, 0x0c, 0x34, 0x2d, 0xc9, 0xb3, 0xf2, 0xc4, 0x21, 0xf3, 0x04, 0x81, 0xa7,
+ 0xea, 0x45, 0xd3, 0x3b, 0x09, 0x28, 0xf4, 0xad, 0xf1, 0xfc, 0x13, 0xed, 0xaa,
+ 0xba, 0x10, 0xea, 0x37, 0x22, 0x24, 0xd3, 0xe1, 0x0d, 0xfa, 0x09, 0xec, 0x29,
+ 0x13, 0x10, 0x03, 0x28, 0xfa, 0x28, 0xda, 0xdb, 0xde, 0x6c, 0x60, 0xc2, 0x0a,
+ 0xf0, 0x37, 0x5f, 0x01, 0x00, 0xf8, 0xbe, 0xbf, 0xc6, 0x41, 0x01, 0xcd, 0xfd,
+ 0x3e, 0x0d, 0xfe, 0x05, 0xef, 0xed, 0x23, 0x09, 0xee, 0x45, 0xf2, 0xbe, 0x34,
+ 0x2d, 0x03, 0x6f, 0xb7, 0xd3, 0xf2, 0xf6, 0x01, 0xbe, 0x11, 0x0f, 0xcb, 0x38,
+ 0x09, 0x0c, 0xd9, 0xc3, 0x1d, 0xe3, 0xfc, 0xa9, 0xb3, 0x2a, 0xe5, 0xa6, 0xb2,
+ 0x2a, 0xff, 0xf3, 0x26, 0x09, 0xed, 0xb8, 0x0d, 0xa8, 0x13, 0xe5, 0xba, 0x4d,
+ 0x2d, 0x38, 0xf7, 0xbe, 0xc3, 0x28, 0x3a, 0x27, 0xdf, 0xe3, 0xca, 0xb2, 0x0d,
+ 0x05, 0xbb, 0xd9, 0xda, 0xfe, 0xb6, 0xbc, 0xaa, 0xff, 0x1c, 0xf1, 0xf3, 0x00,
+ 0x03, 0x1b, 0x13, 0x16, 0xe4, 0x1a, 0xf5, 0xd7, 0x2b, 0xf4, 0x28, 0x35, 0xfe,
+ 0xdb, 0xcd, 0xc6, 0xf7, 0xde, 0xf8, 0xd3, 0xfc, 0x07, 0x17, 0x00, 0xdf, 0x03,
+ 0x03, 0x17, 0xe3, 0xb0, 0x22, 0x00, 0xd2, 0xc9, 0x30, 0x18, 0x04, 0xf2, 0x0e,
+ 0x0e, 0x06, 0xc8, 0xe9, 0xd7, 0xe4, 0x3b, 0x06, 0x02, 0xf6, 0x1f, 0x02, 0xfd,
+ 0x07, 0x11, 0xc0, 0x49, 0xd8, 0xd6, 0xbb, 0x22, 0xaf, 0x51, 0xeb, 0x05, 0xaf,
+ 0xe0, 0xeb, 0x07, 0x14, 0x36, 0x2d, 0xaf, 0xf8, 0xf7, 0x1b, 0xec, 0xf0, 0x23,
+ 0xf4, 0xed, 0xdb, 0xf4, 0x0b, 0x5d, 0x0d, 0xb5, 0xcd, 0x09, 0xfb, 0xf9, 0xde,
+ 0x03, 0xe3, 0xf7, 0x4a, 0x5f, 0xb3, 0xda, 0x13, 0xfd, 0xbb, 0xee, 0xe6, 0x19,
+ 0xe7, 0x56, 0x9d, 0x30, 0xd9, 0x2e, 0x2b, 0xb6, 0xf5, 0xca, 0x30, 0x8a, 0xc4,
+ 0xf8, 0xfd, 0xc8, 0xf5, 0x20, 0xf5, 0x35, 0x14, 0xfa, 0x08, 0x06, 0xd7, 0xc3,
+ 0xfb, 0xff, 0xd3, 0xd6, 0xb8, 0x31, 0x0c, 0x46, 0x29, 0xe6, 0x07, 0xe5, 0x0d,
+ 0x25, 0xaa, 0xf4, 0xa7, 0x3a, 0xe9, 0xd1, 0x39, 0xcc, 0x48, 0xfc, 0x92, 0x27,
+ 0xa8, 0x3a, 0x32, 0xe9, 0x09, 0xc4, 0x16, 0x18, 0xea, 0xea, 0xb6, 0xa8, 0x2b,
+ 0x1f, 0xea, 0x01, 0x0d, 0xb8, 0xe1, 0x15, 0x59, 0xb0, 0x2d, 0xc3, 0xfd, 0x66,
+ 0xdc, 0x05, 0x1e, 0xd1, 0xcf, 0x26, 0xdc, 0x00, 0x42, 0x29, 0x16, 0x19, 0xc7,
+ 0x27, 0xe9, 0x89, 0xc5, 0x12, 0x49, 0xcc, 0x21, 0xfd, 0xef, 0xac, 0x4f, 0xeb,
+ 0x07, 0xf5, 0x22, 0x1a, 0x8a, 0x28, 0xac, 0x26, 0xa4, 0x2b, 0x55, 0xf3, 0x15,
+ 0xa8, 0xf6, 0x18, 0x3d, 0x33, 0x10, 0x0c, 0xea, 0x12, 0xca, 0xc9, 0xec, 0xa4,
+ 0xb9, 0xfb, 0xce, 0x31, 0x35, 0xf0, 0x02, 0x19, 0x32, 0x95, 0x09, 0xbb, 0xc4,
+ 0x2c, 0xf8, 0x1c, 0xd9, 0x0a, 0xcf, 0x8c, 0xf2, 0x15, 0x8d, 0xcb, 0xa3, 0x08,
+ 0x28, 0xdd, 0x1b, 0x08, 0xd7, 0xb1, 0x48, 0x07, 0x0b, 0xe5, 0xe8, 0xf0, 0x40,
+ 0x0e, 0x07, 0xec, 0xde, 0xc6, 0xce, 0xb4, 0xe6, 0x15, 0x21, 0x0b, 0xa7, 0xf6,
+ 0xf0, 0xf1, 0x11, 0x36, 0xda, 0x94, 0x0f, 0xeb, 0x1e, 0x54, 0xd9, 0x9d, 0xc2,
+ 0x0f, 0x22, 0xce, 0x00, 0xe5, 0x5a, 0x18, 0xb8, 0x01, 0x4c, 0xc6, 0xf8, 0xe5,
+ 0x99, 0x28, 0x04, 0xf4, 0xf4, 0x16, 0x25, 0xdd, 0x0d, 0x3e, 0xb0, 0x01, 0xfe,
+ 0xb6, 0xfe, 0xe7, 0x04, 0xbd, 0x26, 0xb5, 0x4b, 0xb0, 0xe9, 0xf0, 0xfe, 0x03,
+ 0x3d, 0xe6, 0xf3, 0x1e, 0x6e, 0x13, 0x4d, 0x4c, 0xc5, 0xb5, 0x81, 0xa0, 0xec,
+ 0xc0, 0xcf, 0x0b, 0x01, 0x1a, 0xcc, 0x1d, 0xac, 0x2d, 0xd1, 0x15, 0x05, 0x0a,
+ 0xff, 0x2b, 0xf0, 0xb9, 0xf6, 0xbf, 0x45, 0x00, 0xb5, 0x43, 0x1a, 0xd5, 0xe0,
+ 0x0e, 0x10, 0xe5, 0xc9, 0xed, 0xde, 0x2e, 0xd0, 0xe8, 0x2f, 0x08, 0xd4, 0xdf,
+ 0xc7, 0xf8, 0xf6, 0xb3, 0x22, 0xf9, 0xec, 0xe6, 0x14, 0xd8, 0x14, 0xee, 0xc1,
+ 0x00, 0x12, 0xe4, 0x12, 0x00, 0xec, 0xe1, 0xac, 0xcb, 0x0c, 0xd2, 0xe9, 0x11,
+ 0x2e, 0xd7, 0x18, 0xd1, 0x2b, 0x3a, 0x32, 0xee, 0x08, 0x00, 0xb2, 0x8a, 0x15,
+ 0xe6, 0xab, 0xf8, 0xfd, 0x93, 0xe3, 0xf6, 0xeb, 0xd8, 0x1f, 0xd7, 0x29, 0xfe,
+ 0x40, 0x57, 0xec, 0xa2, 0xe2, 0x0d, 0x0e, 0xe9, 0xf7, 0x1f, 0x92, 0xdd, 0xaf,
+ 0xec, 0x13, 0x10, 0xc9, 0xe6, 0x24, 0xcf, 0xeb, 0x0a, 0xfa, 0x25, 0xbc, 0xe0,
+ 0x8a, 0x18, 0x89, 0x05, 0xbd, 0x20, 0x13, 0xf3, 0x06, 0x19, 0xc4, 0xdd, 0xd3,
+ 0x2d, 0xd1, 0xd3, 0x33, 0x07, 0xf5, 0x26, 0x2a, 0x16, 0x05, 0xeb, 0x48, 0x3f,
+ 0x34, 0xe7, 0xff, 0xfa, 0x81, 0xdb, 0xe9, 0xf3, 0xc0, 0x25, 0x0c, 0xb5, 0xe8,
+ 0x00, 0x47, 0xf6, 0x42, 0xf8, 0xd7, 0xd1, 0xf7, 0xf8, 0x20, 0x07, 0x17, 0xf9,
+ 0x1b, 0x9e, 0xf2, 0x3a, 0xdc, 0x0e, 0x29, 0xb0, 0x1a, 0x04, 0x99, 0x43, 0x0a,
+ 0x07, 0xff, 0x52, 0x02, 0x14, 0x04, 0xac, 0xe7, 0xcf, 0x04, 0x07, 0xf3, 0xf4,
+ 0x26, 0x07, 0xe4, 0x47, 0xd6, 0xd7, 0x01, 0xd1, 0x17, 0x18, 0x37, 0xfc, 0xfc,
+ 0xd5, 0xf3, 0x08, 0xfc, 0x37, 0x28, 0xce, 0xfd, 0x24, 0xde, 0xf0, 0xe3, 0x1f,
+ 0xa0, 0xf0, 0x07, 0xfb, 0xdc, 0xfd, 0xd4, 0xf1, 0x2e, 0xe5, 0x1c, 0xd8, 0x19,
+ 0xe1, 0xe5, 0x5f, 0xe5, 0xc9, 0xf2, 0x25, 0xc1, 0x34, 0x42, 0xc4, 0xf1, 0xf7,
+ 0xe6, 0xf5, 0xcb, 0xf3, 0x2d, 0x00, 0xe6, 0xda, 0xff, 0xac, 0x37, 0xfa, 0xd7,
+ 0xc0, 0xf0, 0x2a, 0xd6, 0xc3, 0xdf, 0xc3, 0x30, 0xed, 0xb0, 0xff, 0xe5, 0xf9,
+ 0x07, 0xf3, 0xd8, 0x1c, 0x41, 0x17, 0xda, 0xf8, 0x03, 0xf0, 0x0c, 0xce, 0x14,
+ 0x08, 0x06, 0xf4, 0x11, 0xde, 0x14, 0xfc, 0x19, 0x28, 0xd8, 0x04, 0x4b, 0x27,
+ 0x21, 0xb7, 0xee, 0xdf, 0x02, 0xf7, 0x16, 0xf1, 0xd5, 0x12, 0xea, 0xf3, 0x1f,
+ 0x0a, 0xd0, 0x39, 0x53, 0xf6, 0xef, 0xed, 0x1a, 0x1e, 0xea, 0xd0, 0x1f, 0xd7,
+ 0xf9, 0xfd, 0x1b, 0xf4, 0xfb, 0x08, 0xd5, 0x1c, 0x25, 0x33, 0xd9, 0xf7, 0x16,
+ 0x07, 0xf5, 0x01, 0x29, 0x3e, 0x1a, 0x10, 0x05, 0xde, 0x14, 0xe2, 0xe2, 0x1f,
+ 0x03, 0x0b, 0xe9, 0xed, 0x0d, 0xfd, 0xf1, 0x09, 0x05, 0x06, 0xd7, 0xcb, 0xb7,
+ 0x00, 0xdc, 0xff, 0xde, 0x04, 0xc1, 0x2e, 0x13, 0xf0, 0x09, 0x19, 0x0c, 0x2a,
+ 0x1b, 0xf2, 0x26, 0xbc, 0xe5, 0x31, 0xc5, 0x00, 0xb8, 0xfa, 0x2b, 0xf1, 0xfb,
+ 0xda, 0xfd, 0xc5, 0x22, 0x12, 0x03, 0xf9, 0x20, 0xd2, 0xf2, 0x3b, 0xad, 0x16,
+ 0xe4, 0xed, 0xee, 0x24, 0xfb, 0x0d, 0xe9, 0x04, 0x0f, 0xd4, 0xfa, 0xf0, 0xe9,
+ 0xe9, 0xf7, 0xf9, 0xfd, 0xdf, 0x7f, 0x0c, 0x0b, 0x0a, 0xdf, 0xdc, 0x01, 0xfa,
+ 0xef, 0xf6, 0x08, 0xd7, 0x42, 0x10, 0xf6, 0x6a, 0x12, 0xf9, 0xef, 0xf3, 0x0f,
+ 0x01, 0xe5, 0xe8, 0x0a, 0x08, 0xd8, 0xb0, 0x23, 0xd9, 0xdd, 0x03, 0xee, 0xf1,
+ 0xed, 0xe1, 0x24, 0x52, 0xf3, 0x7d, 0x20, 0xe8, 0x9e, 0xe7, 0x07, 0xed, 0x73,
+ 0xe9, 0x1e, 0x0a, 0x08, 0xe1, 0xf3, 0x17, 0xe1, 0x07, 0xf9, 0xdd, 0xff, 0x17,
+ 0x0e, 0xd6, 0xf4, 0xfd, 0xf9, 0xed, 0xbb, 0xd0, 0xf7, 0xcd, 0xea, 0xdb, 0xe9,
+ 0x19, 0xcf, 0xbd, 0x35, 0x13, 0x07, 0x27, 0x2b, 0x03, 0xca, 0x0c, 0xfb, 0xc7,
+ 0x01, 0x07, 0x02, 0x24, 0x27, 0x1e, 0x22, 0x38, 0xf2, 0x1c, 0x2b, 0xa3, 0xc8,
+ 0x14, 0xfe, 0xfa, 0x01, 0xec, 0xde, 0xff, 0xeb, 0xda, 0xca, 0xdd, 0x25, 0xd1,
+ 0xb0, 0xf7, 0x14, 0xd1, 0x94, 0xba, 0x3d, 0xb9, 0x1c, 0xcc, 0xbe, 0x2d, 0xfb,
+ 0x2f, 0x08, 0xff, 0xee, 0xaf, 0x97, 0xfd, 0xa5, 0x10, 0x48, 0x25, 0x37, 0xd8,
+ 0x2d, 0xff, 0xc9, 0xff, 0xf1, 0x4c, 0xf1, 0x8f, 0xf0, 0xcb, 0xc3, 0x81, 0xf9,
+ 0x1e, 0x49, 0x33, 0x13, 0x14, 0xf1, 0xa2, 0x5e, 0xf7, 0x3a, 0xf9, 0xdc, 0xe9,
+ 0x0e, 0x49, 0x6f, 0xed, 0xd0, 0xe4, 0x0a, 0xb5, 0xde, 0xd6, 0xd4, 0xe7, 0xc4,
+ 0xf4, 0xee, 0x08, 0xee, 0x05, 0xe8, 0xb7, 0x5c, 0x9e, 0x3b, 0xbe, 0xcd, 0x31,
+ 0xdf, 0x42, 0x1a, 0xfb, 0xed, 0xe5, 0xda, 0xf6, 0xab, 0xc9, 0xe3, 0xbc, 0x13,
+ 0xf3, 0xc8, 0xed, 0x28, 0x2a, 0xc4, 0xeb, 0xe3, 0xc4, 0xf4, 0x2a, 0x22, 0x0b,
+ 0x13, 0xd5, 0xcc, 0xf5, 0xb1, 0x33, 0x10, 0xee, 0xb5, 0xc4, 0xdd, 0x02, 0xcf,
+ 0x1e, 0xc4, 0xc7, 0xe7, 0x15, 0xa1, 0x37, 0xcf, 0x01, 0x94, 0xa6, 0xdc, 0x28,
+ 0xec, 0x02, 0x3e, 0x09, 0x0c, 0xae, 0x0a, 0x40, 0x03, 0x32, 0xd2, 0x8f, 0xcb,
+ 0x99, 0xc8, 0x3d, 0xe7, 0xec, 0x36, 0xb6, 0xf0, 0xf8, 0xcc, 0xae, 0x0e, 0xec,
+ 0x0b, 0xed, 0x32, 0xe3, 0x0a, 0xb7, 0xc8, 0xba, 0x45, 0x30, 0x03, 0xc5, 0x1c,
+ 0xf9, 0x42, 0xbf, 0x44, 0x50, 0x28, 0x0a, 0xd4, 0x9f, 0xb0, 0xe6, 0x17, 0x04,
+ 0x06, 0x06, 0x32, 0xc8, 0x14, 0x46, 0xe2, 0x25, 0xee, 0x95, 0xeb, 0xe2, 0xe0,
+ 0x06, 0xf1, 0x09, 0xf6, 0xdf, 0x12, 0x1d, 0xd8, 0xbd, 0x16, 0x35, 0xc3, 0x3f,
+ 0x10, 0x12, 0xc5, 0xe0, 0xeb, 0x11, 0xfc, 0x20, 0xb1, 0xc6, 0xb6, 0xdd, 0xfd,
+ 0x34, 0x11, 0x11, 0x22, 0x1b, 0xe8, 0xdc, 0x0d, 0xdc, 0x45, 0xe4, 0xbb, 0x1e,
+ 0xfe, 0xeb, 0xed, 0xfb, 0x3a, 0x1a, 0x25, 0xa9, 0xfb, 0x66, 0xc6, 0xec, 0xba,
+ 0xcb, 0xc9, 0x28, 0x08, 0xc5, 0x21, 0xb8, 0x2f, 0x06, 0xb7, 0x16, 0xd5, 0xb3,
+ 0xce, 0xad, 0xc5, 0xa9, 0xbe, 0x9e, 0x9b, 0x0c, 0x39, 0x20, 0xe8, 0xcf, 0xc8,
+ 0xd9, 0xf0, 0x26, 0xb6, 0xc9, 0xf3, 0xf2, 0xdc, 0xec, 0xca, 0x1f, 0xf2, 0x13,
+ 0xaa, 0x32, 0x11, 0xf7, 0xd1, 0xb6, 0x10, 0xa5, 0xf4, 0xf6, 0x3e, 0x0c, 0xed,
+ 0xd6, 0xe8, 0x92, 0xf9, 0xfa, 0x1d, 0x56, 0xbe, 0xf1, 0xc6, 0x12, 0xe9, 0xf1,
+ 0x21, 0xcd, 0x07, 0xa3, 0xe0, 0xd5, 0x07, 0xe9, 0xfd, 0xc5, 0x2d, 0xfb, 0xa3,
+ 0xe5, 0xdd, 0xd0, 0x15, 0xdc, 0x10, 0x0f, 0x81, 0x13, 0xcb, 0x31, 0xa5, 0x1d,
+ 0xee, 0xbc, 0xb7, 0xeb, 0xd1, 0xb4, 0xcd, 0xcc, 0x9d, 0xe8, 0xf3, 0xf5, 0x2a,
+ 0x30, 0xe7, 0xdc, 0xe2, 0xcc, 0xef, 0x10, 0x11, 0xba, 0x08, 0xd6, 0xd2, 0xd1,
+ 0x9d, 0x1f, 0x1f, 0xdc, 0xe1, 0xf4, 0xb0, 0x0d, 0xf1, 0x99, 0x9c, 0x24, 0xfb,
+ 0x0a, 0xdc, 0xee, 0xa9, 0xd5, 0xd8, 0xcd, 0xf4, 0x19, 0xef, 0x1e, 0x2d, 0x17,
+ 0xed, 0xe7, 0xf1, 0x36, 0x55, 0x22, 0xba, 0xa3, 0xe1, 0xc3, 0xda, 0xfc, 0xbb,
+ 0x07, 0xe3, 0xa1, 0xed, 0xc3, 0xfb, 0xe2, 0xe6, 0xff, 0xa0, 0xef, 0x02, 0xb2,
+ 0xd9, 0xee, 0x60, 0x15, 0x39, 0x15, 0xec, 0xfc, 0xfd, 0x2e, 0xf4, 0xa9, 0x10,
+ 0xf0, 0x18, 0x17, 0xa3, 0xce, 0xe1, 0xdf, 0xc0, 0xaa, 0x2c, 0x52, 0xb3, 0xf4,
+ 0xeb, 0x44, 0x8e, 0x17, 0xa8, 0xed, 0xef, 0x06, 0xd6, 0xe8, 0x3f, 0xd0, 0xf2,
+ 0xb4, 0xc9, 0xe2, 0xab, 0x03, 0x25, 0x39, 0x07, 0x35, 0xe0, 0xa3, 0xdf, 0xba,
+ 0x04, 0x59, 0xb2, 0xc4, 0x9a, 0x06, 0x14, 0xde, 0xf2, 0x4d, 0xf3, 0x43, 0x01,
+ 0xcc, 0xaa, 0x3a, 0x11, 0x43, 0xa9, 0xb0, 0x35, 0x26, 0xfc, 0xf6, 0x92, 0x0b,
+ 0x2a, 0x19, 0xde, 0x0d, 0xd2, 0xea, 0xf0, 0xfd, 0x09, 0xd2, 0x6c, 0xb6, 0xb9,
+ 0x09, 0x9b, 0xee, 0x15, 0xdf, 0x81, 0x37, 0x1a, 0xf8, 0x44, 0x16, 0xf3, 0x35,
+ 0xc9, 0xdf, 0xe9, 0x1a, 0x17, 0x1a, 0x2c, 0x27, 0xa9, 0x27, 0x10, 0x03, 0xd1,
+ 0x2f, 0x1c, 0x99, 0xe1, 0x03, 0x08, 0xcb, 0xbc, 0xef, 0x05, 0xf9, 0xac, 0x9a,
+ 0x19, 0xac, 0x36, 0x99, 0x3c, 0xf9, 0xbc, 0xec, 0xd2, 0x09, 0x45, 0xc0, 0x09,
+ 0x59, 0xbf, 0xf9, 0xcc, 0xde, 0xd4, 0x27, 0x3f, 0xd0, 0xe5, 0x15, 0xcb, 0xca,
+ 0x00, 0xd3, 0xed, 0x16, 0x2f, 0x28, 0xe8, 0x50, 0xbf, 0x94, 0xc9, 0xb9, 0xc0,
+ 0x92, 0x8a, 0xdb, 0x3e, 0xbe, 0xf3, 0x07, 0xf7, 0x16, 0x96, 0x09, 0x29, 0xe8,
+ 0xca, 0x54, 0x26, 0xf4, 0x08, 0x18, 0x2c, 0x08, 0x01, 0xef, 0xcf, 0x5b, 0x41,
+ 0x18, 0x22, 0x3a, 0xf8, 0xc2, 0xc7, 0x0d, 0x07, 0x17, 0x1d, 0x57, 0x9d, 0xfb,
+ 0xb3, 0xdf, 0x8d, 0xfb, 0x01, 0xf7, 0xf6, 0xb9, 0x31, 0xf3, 0xf6, 0x1f, 0x42,
+ 0x04, 0x93, 0xb8, 0xd5, 0xfe, 0x9e, 0x02, 0xc4, 0x4d, 0x47, 0x27, 0xc5, 0xfa,
+ 0x5a, 0x2b, 0xa8, 0x9e, 0x18, 0xf0, 0xe1, 0x20, 0x03, 0x9c, 0x1d, 0xb4, 0xa8,
+ 0x2a, 0xce, 0xac, 0xe2, 0xdf, 0x05, 0xc3, 0x52, 0xec, 0x46, 0xe0, 0xc7, 0x5e,
+ 0xd4, 0x16, 0xd7, 0x61, 0xdc, 0x0d, 0x0b, 0x2b, 0xf9, 0xa1, 0xa1, 0x2a, 0x21,
+ 0x03, 0x13, 0xc9, 0x05, 0x3c, 0xfa, 0xd1, 0x05, 0x35, 0x11, 0x4f, 0xf1, 0x1c,
+ 0xf1, 0xee, 0x10, 0xe0, 0xd9, 0xa9, 0xda, 0x0d, 0xa3, 0x08, 0x07, 0x1a, 0x3b,
+ 0x50, 0xd6, 0x8c, 0x51, 0x30, 0xe3, 0xf8, 0x32, 0xc9, 0xfc, 0x02, 0xbe, 0x1d,
+ 0x4e, 0xd0, 0x5b, 0x05, 0xf5, 0xfd, 0x0a, 0xfd, 0xec, 0xdc, 0x37, 0xe4, 0x1f,
+ 0xda, 0x3a, 0x32, 0xbd, 0xa6, 0xd1, 0x02, 0xe8, 0x82, 0xd9, 0xfd, 0xe7, 0x56,
+ 0x02, 0x1b, 0xbf, 0x7c, 0xc5, 0xba, 0xfb, 0xde, 0x1c, 0x1e, 0x03, 0x36, 0x58,
+ 0x21, 0x86, 0xef, 0x31, 0xf4, 0xdb, 0xef, 0xb1, 0xcc, 0xec, 0xd9, 0xde, 0xf6,
+ 0x21, 0x00, 0x31, 0xd7, 0xf4, 0x89, 0x0a, 0xe7, 0x23, 0xea, 0xc3, 0x26, 0xbf,
+ 0x06, 0xfa, 0x01, 0x96, 0xe2, 0x19, 0xba, 0x3a, 0x23, 0xb4, 0xc1, 0x19, 0xb6,
+ 0xb1, 0x00, 0x45, 0x5a, 0x4a, 0xe5, 0xf0, 0x93, 0xe0, 0xd8, 0xff, 0x30, 0xd6,
+ 0x17, 0x01, 0xe0, 0xe0, 0xd7, 0x24, 0xab, 0x89, 0xa9, 0xbc, 0xf5, 0x11, 0x07,
+ 0xca, 0xd2, 0xb1, 0xb0, 0xbd, 0x52, 0x21, 0xd2, 0xfb, 0xa0, 0xd2, 0xce, 0xd3,
+ 0x09, 0xdf, 0xc9, 0x9b, 0x10, 0xde, 0x3a, 0x23, 0xcd, 0xf4, 0xcd, 0xe6, 0x11,
+ 0xce, 0xd8, 0x1a, 0xa2, 0x19, 0x18, 0xb9, 0x0c, 0xc3, 0xe9, 0xf8, 0x18, 0xf3,
+ 0xd8, 0xe4, 0xce, 0xb4, 0x12, 0xd9, 0x3c, 0xb1, 0xc6, 0xef, 0x02, 0xe9, 0x74,
+ 0x15, 0xe3, 0xda, 0x35, 0xc8, 0x2e, 0xea, 0xad, 0xae, 0xe9, 0xc5, 0xd6, 0xda,
+ 0xee, 0xb9, 0x04, 0x39, 0xc2, 0x1a, 0x25, 0x15, 0xf1, 0x57, 0x31, 0x9e, 0x84,
+ 0xee, 0xb3, 0x81, 0x31, 0xf2, 0xf4, 0xdc, 0x28, 0xf6, 0xd3, 0xe9, 0xf8, 0x15,
+ 0xf7, 0xcb, 0x06, 0x87, 0xe6, 0xb7, 0xd5, 0x64, 0xeb, 0xfd, 0xbf, 0xb1, 0xd4,
+ 0xdb, 0x46, 0x1c, 0xe6, 0x38, 0xc6, 0x52, 0x2e, 0xe1, 0xdb, 0x92, 0xef, 0xe9,
+ 0xea, 0xe7, 0xe0, 0xcb, 0x4b, 0x3d, 0x4c, 0xa0, 0xc0, 0xa1, 0x16, 0x31, 0xe4,
+ 0xc6, 0xef, 0x00, 0xa6, 0xce, 0x1f, 0xf0, 0x18, 0x9b, 0xd4, 0xf7, 0xf5, 0xf6,
+ 0x49, 0xae, 0xd7, 0x3d, 0xa3, 0x46, 0x5c, 0x3e, 0x6f, 0x9d, 0xd0, 0x24, 0x5b,
+ 0xc3, 0x9d, 0xec, 0xf6, 0x08, 0x86, 0xc5, 0xee, 0xc2, 0x0a, 0xf7, 0xf6, 0xdf,
+ 0xfd, 0xdd, 0xfb, 0x14, 0xb5, 0x22, 0xbd, 0xf6, 0xd3, 0xe9, 0xc3, 0xe8, 0x10,
+ 0x04, 0x0d, 0x11, 0xf2, 0x1c, 0xde, 0x17, 0xe0, 0x23, 0x08, 0xdf, 0xf7, 0x07,
+ 0xe0, 0xee, 0x21, 0xda, 0x2b, 0x0b, 0xe2, 0xee, 0x08, 0xfc, 0x28, 0xd0, 0x2b,
+ 0xfd, 0x07, 0x28, 0x03, 0x07, 0xeb, 0xf7, 0x05, 0x0f, 0x15, 0x21, 0xf9, 0xcb,
+ 0x46, 0xcf, 0x17, 0xd4, 0xe5, 0xcb, 0xfa, 0x30, 0x1c, 0xf0, 0x01, 0x02, 0xd0,
+ 0x20, 0xd7, 0xe2, 0x31, 0xe5, 0xeb, 0x2b, 0xf2, 0xf8, 0x27, 0x21, 0x1d, 0xf5,
+ 0x1c, 0x0e, 0x13, 0x08, 0x30, 0xcc, 0xe6, 0xcf, 0x16, 0xbd, 0xd3, 0xef, 0xfe,
+ 0x03, 0xe7, 0x7f, 0xdc, 0xf3, 0xd9, 0x1d, 0xd2, 0x2f, 0xf9, 0xde, 0x17, 0x26,
+ 0xd2, 0xed, 0x7e, 0xff, 0xcf, 0xd7, 0xf2, 0x2b, 0x38, 0x02, 0x34, 0x14, 0x18,
+ 0xbc, 0x3d, 0xda, 0xe2, 0xee, 0xda, 0xf8, 0xfd, 0xbf, 0xed, 0x0d, 0xf9, 0x19,
+ 0xe5, 0x01, 0x3a, 0x10, 0xbd, 0xda, 0xfe, 0xf2, 0x0e, 0x0d, 0xce, 0xf9, 0xc9,
+ 0x1e, 0xcf, 0xd4, 0xfd, 0xee, 0x65, 0xf8, 0x01, 0x40, 0x15, 0xe7, 0x52, 0xe7,
+ 0xe8, 0xe3, 0xef, 0x18, 0x13, 0xd1, 0xf1, 0xd2, 0xec, 0x18, 0xe9, 0x03, 0x0d,
+ 0x23, 0xf8, 0xf8, 0xe1, 0x3e, 0x12, 0xbb, 0xe5, 0xf9, 0x0b, 0x38, 0x2c, 0xf1,
+ 0xf7, 0x09, 0x27, 0xe7, 0x22, 0x01, 0xe2, 0xc7, 0xf9, 0xe0, 0xec, 0xfb, 0xf5,
+ 0x02, 0x02, 0xe2, 0xd1, 0x00, 0xf7, 0x22, 0xf0, 0x05, 0x00, 0x3c, 0x2a, 0xdb,
+ 0x43, 0x07, 0x48, 0x05, 0x0b, 0xd8, 0x37, 0x0d, 0x1c, 0xbe, 0x3f, 0x55, 0xf5,
+ 0x05, 0x31, 0xc5, 0xca, 0x03, 0x02, 0xcf, 0xf0, 0x15, 0x01, 0x20, 0x26, 0x0e,
+ 0x00, 0xd0, 0xc1, 0xcd, 0xf2, 0x09, 0xf8, 0xfa, 0x15, 0xf4, 0x0b, 0xd3, 0xed,
+ 0xd7, 0xd9, 0x0f, 0xf5, 0xde, 0xfb, 0xe7, 0xeb, 0x1d, 0x27, 0x30, 0x03, 0xd2,
+ 0xd9, 0xf7, 0x00, 0x11, 0x20, 0xf4, 0x26, 0xa6, 0x2d, 0xc0, 0xed, 0xf5, 0xb9,
+ 0x06, 0x19, 0x04, 0xc1, 0xfd, 0xce, 0x23, 0xcd, 0x27, 0x13, 0xaf, 0xd2, 0xda,
+ 0xe9, 0xdc, 0x17, 0x1b, 0x10, 0x38, 0x24, 0xcf, 0x42, 0xcf, 0xf6, 0x0d, 0x22,
+ 0xf7, 0x0a, 0xfa, 0xc1, 0x1d, 0xbf, 0x20, 0xaa, 0xe1, 0x1b, 0xc9, 0xd9, 0xbf,
+ 0xe0, 0xc0, 0xbb, 0x37, 0x2a, 0xcf, 0xf4, 0x0a, 0x33, 0xe5, 0x0d, 0xe7, 0x13,
+ 0x11, 0x1a, 0xf3, 0x13, 0xe8, 0xfc, 0x4a, 0xe8, 0x07, 0xf8, 0x3c, 0xbc, 0x04,
+ 0x73, 0xc6, 0xb6, 0x17, 0xf8, 0x95, 0xba, 0x02, 0x63, 0x3f, 0xf3, 0x48, 0x0f,
+ 0xcc, 0x23, 0x53, 0xf4, 0xe0, 0xaf, 0x0d, 0x2a, 0x3b, 0xd8, 0xd9, 0x7f, 0x29,
+ 0xdd, 0xe2, 0x28, 0x36, 0xea, 0x1d, 0xd3, 0xfc, 0xf9, 0xf1, 0x11, 0xea, 0xba,
+ 0x13, 0x4b, 0xef, 0xd1, 0x85, 0xe5, 0x09, 0x29, 0x04, 0x04, 0x1f, 0x41, 0xe6,
+ 0xf3, 0xf1, 0xc8, 0xd0, 0xfd, 0xce, 0x1e, 0xda, 0xfd, 0x09, 0xcf, 0xea, 0xf4,
+ 0xea, 0x16, 0xf5, 0xf9, 0xe4, 0x18, 0x1a, 0x02, 0x26, 0xef, 0x14, 0xf8, 0xd0,
+ 0xec, 0xc7, 0xd5, 0xb9, 0x08, 0x28, 0x5f, 0xed, 0x13, 0x2e, 0x92, 0xc1, 0xd9,
+ 0xbf, 0x02, 0x01, 0xf0, 0xe7, 0xfc, 0xab, 0x2b, 0xef, 0xfb, 0x03, 0xfd, 0xbe,
+ 0xe8, 0xff, 0xe3, 0x1c, 0xe0, 0xe2, 0xdc, 0x09, 0xf0, 0x60, 0xe1, 0xcc, 0x1a,
+ 0x43, 0x0e, 0xe8, 0xc6, 0x1f, 0xf5, 0x06, 0x28, 0xc6, 0x2c, 0x46, 0x5a, 0x0d,
+ 0xeb, 0x24, 0xfc, 0xcc, 0x0a, 0xd6, 0x19, 0x25, 0x4a, 0xd4, 0x1c, 0xf9, 0xf3,
+ 0xfa, 0x02, 0xd6, 0x0c, 0xe5, 0x2d, 0xf8, 0x22, 0xf9, 0xd4, 0xdb, 0xe3, 0x06,
+ 0xd6, 0x2b, 0xf3, 0xc8, 0x65, 0x22, 0x09, 0xc2, 0xb5, 0xd2, 0x35, 0xa1, 0xfd,
+ 0x19, 0x33, 0xe0, 0x56, 0xbd, 0x29, 0xe1, 0xe3, 0xb2, 0xdb, 0x25, 0xff, 0xe6,
+ 0xbc, 0xc5, 0xdc, 0xc8, 0xf1, 0xf1, 0x19, 0xea, 0xc5, 0xcd, 0xa8, 0xdc, 0xe2,
+ 0xeb, 0x0e, 0x44, 0x2c, 0xbe, 0xe9, 0x11, 0xf7, 0xba, 0x0a, 0x45, 0xe9, 0xe6,
+ 0x0a, 0x1c, 0xac, 0x10, 0xec, 0x23, 0x05, 0xd9, 0xd1, 0x13, 0x3b, 0xfe, 0xe5,
+ 0xe3, 0x05, 0xfe, 0xeb, 0xb3, 0xff, 0xd0, 0x16, 0xf9, 0xf6, 0x2c, 0x00, 0xfe,
+ 0xf3, 0x07, 0xca, 0x47, 0x0a, 0xda, 0xc1, 0xcd, 0x30, 0xf4, 0xf9, 0xfc, 0x00,
+ 0xa0, 0x26, 0x13, 0xda, 0xcb, 0x17, 0xb2, 0xee, 0x9a, 0xc4, 0xd3, 0x09, 0x45,
+ 0xc4, 0xab, 0xb2, 0x11, 0xf0, 0xee, 0x04, 0xfe, 0x21, 0xf2, 0x17, 0x36, 0x15,
+ 0xf3, 0x22, 0x0a, 0xe1, 0x0c, 0xea, 0xc0, 0xf0, 0xd7, 0x29, 0xee, 0xef, 0x18,
+ 0x0a, 0x92, 0x2e, 0xff, 0x0d, 0xf8, 0x14, 0xc1, 0x20, 0x99, 0xc0, 0xd9, 0xe8,
+ 0x04, 0xb2, 0xd4, 0x2e, 0x04, 0xcb, 0x09, 0x02, 0x1f, 0xdf, 0xc7, 0xf2, 0x1b,
+ 0x2d, 0x56, 0x16, 0xf5, 0x07, 0xf1, 0x2f, 0xea, 0xf3, 0xf7, 0x13, 0xb7, 0x1d,
+ 0x23, 0xdc, 0x38, 0xcb, 0xe5, 0xfb, 0x2a, 0x30, 0x32, 0x35, 0xe4, 0x20, 0x10,
+ 0xa7, 0x21, 0x0d, 0x02, 0xf1, 0x0c, 0xd2, 0x22, 0x0e, 0x02, 0x43, 0xea, 0xed,
+ 0xd1, 0xec, 0x7f, 0x00, 0xcd, 0x08, 0xef, 0x30, 0x04, 0xcd, 0xdb, 0xd5, 0x20,
+ 0x07, 0xdb, 0x00, 0xdf, 0x2e, 0xe6, 0xfb, 0xc3, 0xf7, 0xa6, 0xf4, 0x25, 0x24,
+ 0x17, 0x08, 0x50, 0x32, 0xe7, 0xfc, 0x15, 0x2b, 0xf8, 0x05, 0xc5, 0xb0, 0xd6,
+ 0xf0, 0xfe, 0x0d, 0xcb, 0xc2, 0xda, 0xef, 0xb8, 0x29, 0x15, 0x43, 0xc5, 0x21,
+ 0x20, 0x07, 0x04, 0xbe, 0xc4, 0x29, 0xc0, 0xd6, 0xac, 0xd6, 0xdc, 0x03, 0xe0,
+ 0xcc, 0xc0, 0xf7, 0xd0, 0x19, 0xc2, 0xd4, 0xc6, 0x2d, 0xee, 0xda, 0xd6, 0xa4,
+ 0xeb, 0xa2, 0xf3, 0x11, 0xa3, 0xf9, 0xc4, 0x3c, 0x3c, 0x0f, 0xc8, 0xcf, 0xe0,
+ 0x18, 0xe0, 0x33, 0xe5, 0xc8, 0xea, 0xf0, 0x16, 0xff, 0xd7, 0x0c, 0x1d, 0x11,
+ 0xf6, 0x12, 0x13, 0xf4, 0xf6, 0xac, 0xf8, 0xe7, 0x01, 0xd7, 0xf3, 0xfd, 0xdb,
+ 0xf8, 0xf5, 0xde, 0xd9, 0xd0, 0xfb, 0xfc, 0xf1, 0x2e, 0x02, 0x2c, 0xeb, 0xc7,
+ 0x0c, 0x0e, 0xfc, 0xda, 0x26, 0xd5, 0xf0, 0xd4, 0x14, 0xb9, 0x0d, 0xe6, 0x2a,
+ 0x03, 0xfa, 0x06, 0xd8, 0x7f, 0xff, 0xc7, 0x12, 0x21, 0xdc, 0x27, 0xe5, 0xeb,
+ 0x3e, 0xcb, 0x16, 0xd8, 0xd7, 0x33, 0xec, 0x1a, 0xf6, 0xec, 0xf3, 0x29, 0xd9,
+ 0xd2, 0xea, 0x16, 0xc0, 0x26, 0xf1, 0xdf, 0x0c, 0xdd, 0x41, 0xf2, 0xc8, 0xcd,
+ 0x09, 0xd6, 0x0f, 0xfb, 0x36, 0x1b, 0xeb, 0x02, 0x2f, 0xb7, 0x1a, 0xdb, 0xdc,
+ 0x2b, 0xfe, 0xdb, 0xe8, 0xd1, 0xca, 0x16, 0xff, 0x18, 0xf4, 0xf5, 0xd1, 0xdc,
+ 0xf8, 0xed, 0xda, 0x34, 0x02, 0xe9, 0x15, 0x1c, 0xc3, 0x16, 0x2c, 0x0f, 0xbd,
+ 0x13, 0x06, 0xfa, 0xe2, 0xda, 0xa4, 0xed, 0x18, 0xe4, 0xf6, 0xfb, 0xd6, 0x18,
+ 0x16, 0x02, 0xf9, 0xcb, 0xca, 0xf9, 0xfe, 0xf7, 0xe9, 0xd3, 0xe7, 0x3a, 0xe8,
+ 0xda, 0xf6, 0xf5, 0xe9, 0xdd, 0x32, 0xe0, 0xee, 0x2b, 0x1f, 0xea, 0xff, 0x1e,
+ 0xdb, 0xda, 0x09, 0x15, 0x2d, 0x0f, 0x0b, 0xfe, 0xf8, 0x1d, 0x07, 0x05, 0xf6,
+ 0x1b, 0xef, 0xbf, 0x22, 0x11, 0xd7, 0xee, 0xed, 0x0f, 0xb6, 0xdc, 0xfb, 0x33,
+ 0xea, 0x02, 0xe3, 0x16, 0xc6, 0x24, 0x02, 0xfa, 0x12, 0xfd, 0xc1, 0xf7, 0x1a,
+ 0xf6, 0xfb, 0xd3, 0x09, 0x25, 0xd9, 0x2f, 0xe8, 0xf9, 0x0a, 0xf0, 0xf6, 0x31,
+ 0x3d, 0x22, 0x31, 0xef, 0xdd, 0x12, 0x09, 0x02, 0xf5, 0xfd, 0xde, 0x11, 0x23,
+ 0x2c, 0x0d, 0xb9, 0x06, 0xf8, 0xe9, 0x1b, 0xe5, 0x04, 0x1b, 0xe7, 0x0f, 0xe4,
+ 0x06, 0xf9, 0x2e, 0x19, 0xd6, 0x20, 0x1c, 0xb9, 0xf7, 0xc0, 0x08, 0xe2, 0xdb,
+ 0xf6, 0x00, 0xed, 0xf9, 0x34, 0xec, 0xe7, 0xc5, 0x2c, 0x0d, 0x1d, 0xb8, 0xdc,
+ 0x19, 0xd3, 0x30, 0x08, 0x3a, 0xf4, 0x12, 0xd3, 0x12, 0x03, 0xdc, 0xb1, 0x06,
+ 0x18, 0x3a, 0x1f, 0xc5, 0xea, 0x19, 0xf1, 0xea, 0xfe, 0xef, 0xd1, 0xcf, 0x22,
+ 0xe8, 0x24, 0x28, 0xc9, 0x40, 0x02, 0x1e, 0x0f, 0xcb, 0x0c, 0x28, 0x35, 0xca,
+ 0xad, 0xe5, 0x35, 0x0d, 0x1b, 0xe6, 0x0c, 0x11, 0xe0, 0x28, 0x35, 0x13, 0x09,
+ 0xdd, 0x05, 0x3e, 0xf9, 0x0c, 0xd9, 0xdc, 0x0a, 0xb2, 0x11, 0xc7, 0xf7, 0x28,
+ 0xd4, 0xdc, 0xed, 0xd3, 0x18, 0xed, 0x14, 0x39, 0x0c, 0x1f, 0xfc, 0xf0, 0x1d,
+ 0xf5, 0xa4, 0x3a, 0x37, 0x3e, 0x26, 0xd4, 0x28, 0xe6, 0xdf, 0x5f, 0x15, 0x11,
+ 0xf5, 0x20, 0x0d, 0xf1, 0x01, 0x05, 0x03, 0x19, 0x1e, 0x06, 0x48, 0xef, 0xe4,
+ 0x21, 0xde, 0xfe, 0xdc, 0xe4, 0xc2, 0x0d, 0xd7, 0xe1, 0x0c, 0xca, 0x13, 0x2d,
+ 0x0d, 0xf1, 0xed, 0xba, 0xe6, 0xae, 0xf5, 0x29, 0x00, 0xcc, 0xfa, 0x07, 0x46,
+ 0x15, 0xd8, 0xd0, 0xd9, 0xec, 0xe4, 0xca, 0xde, 0xf9, 0xd1, 0xef, 0xc9, 0xe2,
+ 0x0e, 0xd2, 0xfe, 0x04, 0x1a, 0x18, 0xf3, 0x2e, 0xfa, 0x15, 0x67, 0xfd, 0xc3,
+ 0xf4, 0xc7, 0xec, 0xdd, 0x19, 0x0c, 0xd9, 0xfd, 0xd6, 0xd8, 0x45, 0xe3, 0xe1,
+ 0xed, 0xe6, 0xf7, 0xd9, 0xda, 0xea, 0x1c, 0x41, 0x13, 0x25, 0x0e, 0x02, 0xfa,
+ 0xc3, 0xde, 0x68, 0x00, 0xfa, 0x01, 0x1e, 0xc5, 0xf9, 0x14, 0x11, 0xda, 0xf5,
+ 0xec, 0xf9, 0xc8, 0xf7, 0xf4, 0xd4, 0x18, 0xf3, 0xd8, 0xe8, 0x0e, 0x0e, 0x02,
+ 0xea, 0x07, 0x3d, 0xb8, 0x2f, 0xd5, 0xfd, 0xe3, 0xf4, 0x66, 0x28, 0xfa, 0x20,
+ 0x03, 0x1f, 0xf1, 0xd4, 0xcc, 0xd4, 0x13, 0xd5, 0x7f, 0x0a, 0xee, 0x02, 0x18,
+ 0x2c, 0x00, 0xea, 0x3e, 0x18, 0x09, 0xf6, 0x06, 0x46, 0xfe, 0xed, 0xb6, 0xff,
+ 0xec, 0xe5, 0xc6, 0x26, 0x07, 0x1f, 0xff, 0xfe, 0x04, 0x21, 0x0a, 0x01, 0xe7,
+ 0xc5, 0xf5, 0x2d, 0xe8, 0x1a, 0x1e, 0xe6, 0xd7, 0xfa, 0xe5, 0xee, 0x01, 0x1e,
+ 0xbd, 0x15, 0x08, 0x4d, 0xdd, 0x01, 0x0d, 0x17, 0xbf, 0x0b, 0xe5, 0x1a, 0xbb,
+ 0xc3, 0xb7, 0xd6, 0x0e, 0xf1, 0xed, 0x15, 0x39, 0x21, 0x2b, 0x27, 0x0e, 0x04,
+ 0xd5, 0xe0, 0xf8, 0xeb, 0xb0, 0xd5, 0xde, 0x10, 0x08, 0xcb, 0xf7, 0x15, 0xe5,
+ 0x1c, 0xa3, 0xdb, 0x31, 0xcb, 0xdb, 0x4e, 0x30, 0xea, 0x18, 0x41, 0xdc, 0x09,
+ 0xcf, 0x0e, 0xf9, 0x04, 0xc4, 0xc8, 0xe1, 0x08, 0x46, 0x05, 0xd3, 0xec, 0xb9,
+ 0xd8, 0x00, 0x58, 0xeb, 0x3a, 0xb3, 0xc8, 0xf1, 0x0d, 0x08, 0x1f, 0x06, 0xdb,
+ 0xf6, 0xf8, 0xcd, 0x24, 0xd9, 0x1a, 0x18, 0x0a, 0xe5, 0xe4, 0x2d, 0x13, 0xee,
+ 0x18, 0xaf, 0xba, 0xd1, 0x0c, 0xea, 0x0f, 0x17, 0xec, 0xbc, 0x7e, 0x2e, 0x08,
+ 0xc5, 0xe4, 0xeb, 0xd9, 0xf4, 0xc8, 0xea, 0xca, 0xc8, 0xe6, 0x33, 0x81, 0x13,
+ 0x06, 0xf5, 0xf0, 0xf9, 0x3c, 0xe8, 0xd3, 0xde, 0xc6, 0x00, 0x2e, 0xf2, 0xe4,
+ 0x27, 0xe0, 0xb9, 0xf3, 0xff, 0x2d, 0xd7, 0xf5, 0x1a, 0xcb, 0xe9, 0xf8, 0x43,
+ 0x03, 0x05, 0x08, 0xce, 0xfd, 0xf7, 0xd0, 0x0c, 0xfb, 0xe5, 0xd4, 0xaa, 0x19,
+ 0xd2, 0xd7, 0x11, 0xed, 0xce, 0xf3, 0xe6, 0xe0, 0xf7, 0xc7, 0xde, 0xb2, 0x0e,
+ 0xc4, 0x08, 0x38, 0xf3, 0xe7, 0xe8, 0xf8, 0xef, 0xec, 0x0a, 0x41, 0x00, 0x01,
+ 0xec, 0xec, 0xe3, 0x03, 0x31, 0xaa, 0x1d, 0x1c, 0xff, 0x2d, 0xb8, 0x3c, 0xb1,
+ 0xdf, 0xfb, 0xd1, 0x28, 0xf1, 0xe3, 0xf4, 0xe4, 0x2e, 0xcf, 0xe2, 0xba, 0x11,
+ 0x26, 0xbf, 0x01, 0xb1, 0xd2, 0xc2, 0x0e, 0x88, 0xed, 0x14, 0x0a, 0xdf, 0x48,
+ 0xba, 0x16, 0xbc, 0xe2, 0x18, 0xb9, 0xf5, 0xe2, 0xd2, 0x06, 0x14, 0xec, 0x8c,
+ 0xdf, 0x1b, 0x13, 0xd7, 0xcf, 0xf7, 0xd9, 0xc2, 0xd3, 0xdb, 0xff, 0xf2, 0x46,
+ 0xe1, 0xe3, 0xcd, 0xa2, 0xf0, 0xef, 0x24, 0xf8, 0x14, 0xe0, 0x12, 0x07, 0xbd,
+ 0xf8, 0x16, 0xf6, 0x0f, 0xa7, 0x0c, 0xb7, 0xab, 0xe3, 0xd8, 0x9c, 0xed, 0x08,
+ 0x20, 0x16, 0x1b, 0x27, 0x19, 0xb7, 0x02, 0xda, 0xd1, 0xf6, 0xb3, 0x25, 0xaa,
+ 0xe2, 0x13, 0x1d, 0xfe, 0xf1, 0xc0, 0xdc, 0xc6, 0xf9, 0x17, 0xd4, 0xf8, 0xe4,
+ 0xfb, 0xdb, 0xa6, 0xed, 0xf6, 0x03, 0x2f, 0xd5, 0xe1, 0xb3, 0xb3, 0x13, 0xec,
+ 0x06, 0xde, 0xee, 0x06, 0xbe, 0x1f, 0x08, 0x1a, 0x23, 0x04, 0xd1, 0xb8, 0x07,
+ 0xb8, 0xe3, 0x13, 0x0f, 0x18, 0x05, 0xc0, 0xd5, 0xf8, 0x35, 0xa4, 0x22, 0xe3,
+ 0xf2, 0x0d, 0x0f, 0xd4, 0xfc, 0xb2, 0xd6, 0xdc, 0xeb, 0xd1, 0x1e, 0x30, 0xb9,
+ 0xcf, 0xff, 0x0f, 0xe6, 0x0a, 0xc7, 0xea, 0x0a, 0x37, 0x8f, 0x21, 0x1e, 0xaf,
+ 0x29, 0x1d, 0xe6, 0xda, 0x26, 0x14, 0x1d, 0x66, 0xe9, 0xab, 0xcc, 0xed, 0xa5,
+ 0xd6, 0x2c, 0xff, 0xf6, 0x04, 0xcc, 0xda, 0xf3, 0x1f, 0xdc, 0x00, 0x35, 0xce,
+ 0xde, 0xb5, 0x15, 0xf3, 0xbb, 0x01, 0xce, 0xea, 0xcd, 0xdc, 0xff, 0x00, 0x09,
+ 0xc2, 0x04, 0xee, 0xcb, 0x37, 0xf0, 0xf5, 0xaa, 0xac, 0xef, 0xc8, 0xbe, 0x10,
+ 0xfe, 0xdd, 0x37, 0x1f, 0x23, 0xdf, 0xee, 0x98, 0xf6, 0x0b, 0x02, 0xeb, 0xff,
+ 0xea, 0x10, 0xcd, 0xf6, 0xc6, 0x18, 0xc7, 0xd2, 0x33, 0x35, 0xff, 0x22, 0x03,
+ 0x9b, 0x51, 0xc3, 0x00, 0x76, 0xc6, 0xf6, 0xbe, 0xd2, 0x27, 0xf4, 0xf8, 0x28,
+ 0x09, 0x22, 0x16, 0xea, 0xb1, 0x02, 0xe6, 0x7f, 0x2e, 0xe4, 0xfa, 0x0e, 0x07,
+ 0xf1, 0xc0, 0xe0, 0xec, 0xff, 0xef, 0xd8, 0x17, 0x9f, 0xd0, 0xdf, 0xf8, 0xef,
+ 0xec, 0xd1, 0x10, 0xf4, 0xfd, 0xf6, 0x13, 0xd4, 0xe3, 0x66, 0xea, 0xfe, 0x3b,
+ 0xfe, 0xfc, 0x19, 0x20, 0x22, 0x08, 0xc4, 0xf9, 0x0b, 0xdc, 0x02, 0xd6, 0xe9,
+ 0x29, 0x19, 0xdc, 0xe5, 0xf4, 0x58, 0xef, 0x24, 0xd3, 0xdf, 0xb7, 0x36, 0xf5,
+ 0x22, 0xc4, 0xde, 0xce, 0xd7, 0x39, 0x20, 0x06, 0x08, 0xf4, 0xc7, 0x30, 0xfa,
+ 0xe6, 0xe6, 0xc7, 0x08, 0xfb, 0x22, 0xb9, 0x0d, 0x1b, 0x1a, 0x17, 0xe4, 0x18,
+ 0xcd, 0xe0, 0x11, 0xe6, 0x1d, 0xf5, 0xcc, 0xc0, 0xea, 0xd8, 0x32, 0xf0, 0xe7,
+ 0x5a, 0xf5, 0xc9, 0xff, 0xee, 0xca, 0x32, 0xec, 0xf8, 0x2c, 0x0c, 0xd3, 0xd7,
+ 0x30, 0x0c, 0xe5, 0xd7, 0xf5, 0x18, 0xe6, 0xe7, 0x27, 0x0a, 0x10, 0xcb, 0x0c,
+ 0xe7, 0xef, 0x15, 0xe5, 0xea, 0xff, 0x13, 0xeb, 0xd3, 0x14, 0x14, 0x01, 0x0f,
+ 0x0f, 0x07, 0xe1, 0xfc, 0x93, 0xcc, 0x0c, 0x32, 0xea, 0x1c, 0x06, 0x16, 0xd7,
+ 0xec, 0x13, 0xe3, 0x7f, 0x27, 0xe9, 0x32, 0x0f, 0xfa, 0x51, 0x1b, 0xba, 0xfb,
+ 0x2d, 0x03, 0x16, 0xfd, 0x05, 0xd8, 0x10, 0x0d, 0xbc, 0x0f, 0x18, 0x01, 0xe1,
+ 0xea, 0xe5, 0x2a, 0xe9, 0xe2, 0xec, 0xf8, 0xf6, 0x57, 0xf2, 0xf2, 0x05, 0x06,
+ 0xf6, 0xde, 0x1c, 0xe6, 0x03, 0xfa, 0xec, 0xcb, 0x0e, 0x19, 0x1a, 0x23, 0x01,
+ 0xda, 0xfe, 0xe4, 0xbf, 0x14, 0x00, 0xf3, 0x0c, 0x42, 0x11, 0x00, 0x0a, 0x2f,
+ 0xf3, 0xbf, 0x09, 0xd8, 0x19, 0xf6, 0xe4, 0xe2, 0x15, 0x55, 0xdd, 0xeb, 0xcc,
+ 0x14, 0xd3, 0x22, 0xee, 0xd7, 0xf6, 0x05, 0xed, 0x05, 0x02, 0xea, 0x02, 0xc3,
+ 0xe8, 0xee, 0x07, 0x0c, 0x10, 0xda, 0xfb, 0xe9, 0x05, 0xf0, 0xd0, 0xe7, 0xd2,
+ 0x05, 0xfc, 0xdc, 0xf0, 0xec, 0xff, 0xe9, 0xec, 0xc0, 0xc8, 0xe1, 0xf0, 0xf9,
+ 0xe0, 0xfd, 0x1e, 0xd6, 0xbe, 0xf4, 0xfa, 0xdd, 0xc6, 0x1d, 0xfe, 0xff, 0x06,
+ 0xda, 0x0b, 0xf9, 0xdf, 0xf2, 0xfb, 0xf3, 0xfe, 0xe7, 0x09, 0x00, 0x1a, 0x23,
+ 0xfd, 0xe3, 0x33, 0xfd, 0xf9, 0x10, 0x01, 0x1b, 0xdf, 0xf0, 0xcb, 0x09, 0x16,
+ 0x13, 0xd4, 0x0b, 0xd1, 0xec, 0xeb, 0xef, 0x13, 0x12, 0xbe, 0x20, 0xd2, 0xf0,
+ 0xce, 0xfe, 0xf1, 0xd3, 0x0e, 0x2c, 0xd4, 0x0e, 0xf5, 0x25, 0xd3, 0xf6, 0xeb,
+ 0xee, 0xc9, 0x14, 0xea, 0xd7, 0xe1, 0xea, 0x09, 0x3b, 0xfc, 0xca, 0x17, 0xd3,
+ 0xf1, 0x20, 0xaf, 0xf1, 0x1c, 0xbf, 0xe1, 0xe5, 0x04, 0xc2, 0xf5, 0x1a, 0xe9,
+ 0xf0, 0xd9, 0xf5, 0x11, 0xfd, 0xe5, 0xf2, 0x16, 0x07, 0x12, 0x33, 0xb6, 0x31,
+ 0xc7, 0xef, 0xdb, 0x0a, 0x18, 0xc5, 0xfd, 0xea, 0xf7, 0x11, 0x07, 0xe8, 0xfb,
+ 0xf4, 0xfd, 0x07, 0xd5, 0x0f, 0xbe, 0x12, 0x19, 0xfd, 0xf9, 0xd7, 0xd0, 0x05,
+ 0x26, 0xd1, 0xf5, 0xe4, 0xe0, 0xf2, 0x1a, 0xf6, 0xdb, 0xe5, 0xd9, 0x2c, 0x14,
+ 0x1a, 0x2f, 0xed, 0xd2, 0x2a, 0x2e, 0x13, 0xf9, 0xe1, 0xa3, 0xf8, 0xe3, 0xe6,
+ 0xdf, 0xcc, 0xe5, 0x0d, 0x03, 0xd9, 0xf2, 0xf3, 0x1c, 0x2e, 0xf5, 0x1c, 0x21,
+ 0xd5, 0xe2, 0x21, 0xdb, 0x0b, 0x02, 0xef, 0x03, 0xff, 0xf2, 0xde, 0xdc, 0xe5,
+ 0xd7, 0x02, 0xe1, 0xf1, 0x04, 0xf5, 0x05, 0xd5, 0xf1, 0x09, 0xe4, 0xcf, 0xfc,
+ 0xf8, 0x05, 0xd0, 0xdc, 0x15, 0xea, 0x28, 0x2b, 0x1c, 0x0c, 0xe5, 0xee, 0xb8,
+ 0xf3, 0x11, 0xf1, 0xf7, 0xe7, 0x03, 0xc0, 0x0a, 0xd5, 0x1f, 0xcf, 0x18, 0xf1,
+ 0xea, 0x02, 0xd1, 0xe8, 0xd6, 0xfe, 0xfd, 0xee, 0x02, 0x31, 0x0f, 0xc3, 0xeb,
+ 0x08, 0xcf, 0xfd, 0xd1, 0xf0, 0x0a, 0x1c, 0x15, 0xf6, 0xae, 0xc3, 0x07, 0x49,
+ 0xe6, 0xe0, 0x03, 0xde, 0xbc, 0xf7, 0xd6, 0xf4, 0x81, 0x3f, 0xee, 0xd5, 0x96,
+ 0xe3, 0x14, 0x74, 0xf7, 0x02, 0x04, 0xf3, 0xda, 0x1b, 0x3c, 0x27, 0x10, 0xf0,
+ 0x4a, 0xc6, 0x98, 0x51, 0xfa, 0x0f, 0x27, 0x11, 0xb0, 0xa0, 0x07, 0xef, 0x4f,
+ 0xef, 0x1c, 0xdf, 0xde, 0xcf, 0xf2, 0x43, 0xd7, 0xe9, 0x92, 0x0e, 0xe5, 0xf7,
+ 0xe3, 0x93, 0xbb, 0xd7, 0xe8, 0xda, 0x10, 0x15, 0x09, 0xf3, 0xdb, 0x05, 0xe3,
+ 0xe2, 0xd3, 0x63, 0x89, 0x01, 0xc9, 0x3b, 0x24, 0xcc, 0x47, 0x06, 0x06, 0x2c,
+ 0x0c, 0xe4, 0xe2, 0x8f, 0x04, 0x05, 0x1e, 0xc2, 0xdd, 0xf8, 0x60, 0x0b, 0x06,
+ 0x23, 0x30, 0xed, 0x2d, 0x26, 0x1f, 0x0d, 0xca, 0x33, 0x35, 0x2f, 0xed, 0x4a,
+ 0x07, 0xef, 0x09, 0xd3, 0x9e, 0xc6, 0x35, 0xd9, 0xde, 0x00, 0x13, 0x58, 0x0b,
+ 0xfb, 0xe3, 0x0b, 0x08, 0x06, 0xd1, 0x33, 0xea, 0xaf, 0xe6, 0xd5, 0x67, 0xe3,
+ 0xb9, 0xf7, 0x1f, 0x0e, 0xf2, 0xbf, 0x58, 0x06, 0xff, 0xa3, 0xc6, 0xf4, 0x42,
+ 0xc8, 0xfd, 0x28, 0x1d, 0x09, 0x22, 0x21, 0xe8, 0xd7, 0xf2, 0x0c, 0x8b, 0xa0,
+ 0x0b, 0x00, 0xbf, 0xe4, 0xce, 0xf6, 0x65, 0xf3, 0xfc, 0x25, 0x18, 0xf4, 0x02,
+ 0xd4, 0x10, 0x02, 0x34, 0xd3, 0xf6, 0xbb, 0x1e, 0x02, 0x0c, 0x1f, 0x16, 0x9a,
+ 0x5c, 0xc0, 0xd1, 0xd0, 0x04, 0xf9, 0xfc, 0x9d, 0xa5, 0xf2, 0x08, 0x3e, 0xc8,
+ 0xce, 0x0e, 0x0f, 0xcb, 0xc8, 0xfa, 0x3e, 0xe2, 0xbe, 0x0f, 0x51, 0xdb, 0x3b,
+ 0x07, 0xf4, 0xdf, 0x25, 0x1b, 0x15, 0x1b, 0x07, 0xf0, 0x28, 0x07, 0x81, 0xef,
+ 0xfe, 0xe5, 0xa1, 0x29, 0xc6, 0xdc, 0x0a, 0xf2, 0x00, 0xb1, 0xd8, 0x15, 0x04,
+ 0x50, 0x45, 0x1b, 0xf9, 0xf4, 0xe8, 0x07, 0xc3, 0xce, 0x3c, 0xde, 0x47, 0x10,
+ 0x01, 0x2f, 0x23, 0xf7, 0xd4, 0xd4, 0xd8, 0xfe, 0x45, 0xea, 0x23, 0x1b, 0x10,
+ 0xd2, 0x24, 0xdc, 0x0c, 0x00, 0x25, 0xfb, 0xa3, 0xe4, 0xf6, 0xcf, 0x5e, 0xfd,
+ 0x13, 0xd1, 0xf4, 0xe7, 0xe6, 0xc1, 0xb9, 0xc4, 0xc6, 0x1c, 0x8e, 0x09, 0x3a,
+ 0xda, 0x03, 0xf4, 0xe5, 0x35, 0xfc, 0x08, 0xee, 0x81, 0xf1, 0x20, 0x11, 0xf2,
+ 0xcd, 0xb2, 0x2a, 0x28, 0x31, 0x25, 0xb4, 0xf6, 0x21, 0xd2, 0xf9, 0xa5, 0xf7,
+ 0xb8, 0xf2, 0x12, 0x02, 0x29, 0x3b, 0x08, 0xc4, 0xbb, 0xe3, 0xce, 0x16, 0xc9,
+ 0x20, 0xd7, 0x47, 0x0c, 0xa6, 0x10, 0x18, 0xfb, 0x4f, 0xc0, 0xc1, 0x17, 0xd8,
+ 0xb9, 0xf4, 0xd9, 0xcf, 0x07, 0x2a, 0x2e, 0x10, 0xfc, 0x22, 0x4f, 0x94, 0x2b,
+ 0x15, 0x1b, 0xbe, 0xb0, 0xa6, 0x37, 0xf1, 0x19, 0xdb, 0xe3, 0xe4, 0xfc, 0x26,
+ 0xee, 0xe0, 0x2b, 0xdd, 0xba, 0x1e, 0x06, 0x05, 0xbe, 0xe6, 0xc5, 0x1f, 0xd0,
+ 0xce, 0xb5, 0xd0, 0xfd, 0xbf, 0x9d, 0xcd, 0x1f, 0xe8, 0x5f, 0xd7, 0xb1, 0xf6,
+ 0x0d, 0xb5, 0x4c, 0x0b, 0xd2, 0xf5, 0x1f, 0x04, 0xe6, 0x12, 0xcf, 0xbb, 0xe6,
+ 0xf3, 0xcb, 0x3d, 0x24, 0xc1, 0xe6, 0x97, 0xa3, 0xf4, 0x3b, 0xd3, 0x13, 0x34,
+ 0xbc, 0x23, 0x2b, 0x19, 0xb2, 0x45, 0xc4, 0xb7, 0xe7, 0x3b, 0xf0, 0xf0, 0x02,
+ 0xab, 0xc8, 0x95, 0x32, 0x14, 0x0a, 0x4e, 0xba, 0x4b, 0x2a, 0x9c, 0xf4, 0xe1,
+ 0xfe, 0xe9, 0x2d, 0xe9, 0x3c, 0xed, 0x03, 0xf8, 0x11, 0xf5, 0xed, 0x0b, 0x1a,
+ 0x16, 0x06, 0x25, 0xb1, 0xb5, 0xdc, 0x3e, 0xea, 0x38, 0x40, 0xa5, 0xfe, 0xd6,
+ 0x48, 0x0f, 0x9e, 0xd1, 0xc4, 0x3b, 0x0b, 0xb1, 0xe6, 0x1b, 0x0a, 0xc0, 0xdd,
+ 0x0e, 0xaa, 0x66, 0x02, 0x11, 0xfb, 0xff, 0x0a, 0xc2, 0xb3, 0xf6, 0xfa, 0xe7,
+ 0x67, 0x0a, 0x08, 0x22, 0xf5, 0x41, 0x0d, 0xc3, 0xda, 0x0b, 0x14, 0x3c, 0xf2,
+ 0xcc, 0xf6, 0x33, 0xe7, 0x50, 0xfa, 0xa4, 0x2a, 0x16, 0x27, 0x2a, 0x9c, 0x33,
+ 0xd2, 0xbf, 0xcf, 0x02, 0xf6, 0xba, 0xf5, 0xcf, 0x1e, 0xf0, 0xd7, 0xb0, 0xe2,
+ 0x81, 0xf9, 0x02, 0xb9, 0x02, 0xe5, 0xe9, 0xf7, 0xd2, 0xf2, 0xe2, 0x06, 0xfc,
+ 0xe0, 0x03, 0x0a, 0x30, 0xd9, 0xef, 0x24, 0xc4, 0xf0, 0xbc, 0xf9, 0xdb, 0x0c,
+ 0xd5, 0x09, 0x03, 0x43, 0xbc, 0x4e, 0xf7, 0x08, 0x00, 0x15, 0xec, 0x19, 0xc9,
+ 0xe6, 0xc0, 0xd4, 0x03, 0x00, 0xe0, 0xd0, 0xa1, 0x16, 0xeb, 0x0f, 0x2e, 0xfe,
+ 0x02, 0x04, 0xcf, 0x07, 0xda, 0x32, 0x0d, 0xf8, 0xbe, 0x1a, 0x34, 0x15, 0x35,
+ 0xea, 0xe9, 0xff, 0xdd, 0xe5, 0x2a, 0xc9, 0xfe, 0x19, 0xf8, 0xbe, 0xd2, 0x25,
+ 0xea, 0xe2, 0xf5, 0x26, 0xe0, 0xb6, 0xfb, 0xe4, 0xd0, 0x22, 0x37, 0x22, 0x8f,
+ 0x11, 0xe6, 0xe1, 0x1a, 0x0a, 0xbf, 0xd8, 0xe3, 0xd1, 0xee, 0xd8, 0x32, 0x4a,
+ 0xb1, 0xce, 0xec, 0xde, 0xee, 0xcc, 0x25, 0x07, 0xf4, 0x33, 0x02, 0xf9, 0x33,
+ 0x23, 0xd0, 0xf6, 0xd1, 0x08, 0xdd, 0xe4, 0xd9, 0xbe, 0xe1, 0x2d, 0xc3, 0xed,
+ 0x03, 0xbc, 0x3b, 0xc3, 0xd0, 0x44, 0x08, 0x14, 0xcb, 0xca, 0xa6, 0xb1, 0xe9,
+ 0xa6, 0xf5, 0x41, 0x39, 0xf4, 0x01, 0xed, 0x4f, 0x1d, 0xed, 0xc5, 0x40, 0x2c,
+ 0x29, 0xd1, 0x45, 0x0a, 0xe1, 0x32, 0x50, 0xf5, 0x31, 0x10, 0x05, 0xdd, 0xfc,
+ 0xbc, 0x20, 0x2c, 0x0e, 0xdb, 0xf7, 0xfc, 0xf6, 0xa9, 0xcb, 0xff, 0xf1, 0xc8,
+ 0xd6, 0xec, 0xb1, 0xd8, 0xbb, 0x3d, 0xf9, 0xec, 0x03, 0xe1, 0x12, 0xbb, 0xeb,
+ 0x1d, 0x1e, 0xea, 0xed, 0xf1, 0x0e, 0x11, 0xe5, 0x05, 0xf1, 0xf7, 0x13, 0x29,
+ 0xcb, 0x0e, 0xc0, 0xec, 0xf7, 0x09, 0x01, 0xb4, 0x00, 0x3e, 0xc2, 0x23, 0xeb,
+ 0x1f, 0xbe, 0xaf, 0x0f, 0xbe, 0x09, 0xc2, 0xf5, 0xe6, 0x9e, 0x04, 0xbe, 0xd1,
+ 0xea, 0xd6, 0x28, 0xaa, 0x06, 0xd8, 0x03, 0xe8, 0xf6, 0xc6, 0x24, 0x10, 0xe0,
+ 0xe1, 0x17, 0xdd, 0xe0, 0x0c, 0x0a, 0xf9, 0xf8, 0xd3, 0x4a, 0x13, 0xd1, 0x0b,
+ 0x24, 0x17, 0xd3, 0x04, 0xd9, 0x10, 0x37, 0xc2, 0x67, 0xf6, 0xf4, 0xeb, 0x0c,
+ 0x1d, 0x24, 0x12, 0x1f, 0x09, 0x42, 0xff, 0x32, 0xe7, 0xca, 0x2a, 0x04, 0x40,
+ 0x30, 0xe8, 0xfb, 0xc2, 0xfc, 0xe7, 0x0b, 0xf8, 0x2c, 0xed, 0x0a, 0x13, 0x4e,
+ 0xc5, 0x2d, 0x30, 0xe7, 0x26, 0xcb, 0x09, 0x53, 0xfc, 0xf2, 0xd4, 0xd7, 0x0a,
+ 0xee, 0x05, 0x12, 0x25, 0xff, 0x0d, 0xd3, 0xd9, 0x17, 0x0f, 0xf8, 0x1f, 0x26,
+ 0x06, 0x02, 0x0f, 0x20, 0x09, 0x33, 0x10, 0x12, 0x09, 0xfd, 0xf6, 0xde, 0x7f,
+ 0x12, 0xf4, 0x0f, 0xc0, 0x05, 0xce, 0x0e, 0x05, 0xf7, 0xd9, 0x14, 0xe3, 0x07,
+ 0xa0, 0x2e, 0x23, 0x43, 0xfd, 0xf8, 0xdb, 0xfd, 0xec, 0xdb, 0xaf, 0xe6, 0x23,
+ 0x0b, 0xd6, 0x09, 0xe3, 0x14, 0x13, 0x07, 0xe5, 0xd3, 0x43, 0x13, 0x18, 0xff,
+ 0xec, 0x00, 0xe9, 0xf8, 0xc7, 0xeb, 0xe2, 0xfd, 0x09, 0x35, 0x22, 0x36, 0x18,
+ 0xf0, 0x1b, 0x0c, 0x02, 0xf3, 0xa8, 0xdb, 0xe1, 0xfd, 0x06, 0xdf, 0x12, 0xc3,
+ 0xf1, 0xf0, 0xbe, 0x0c, 0x2b, 0x3b, 0x38, 0x33, 0x5f, 0x7c, 0xf6, 0x08, 0xf8,
+ 0xee, 0xb7, 0x03, 0x26, 0x5e, 0xf6, 0xfa, 0xd8, 0x18, 0x07, 0x03, 0xfe, 0x1e,
+ 0xee, 0x38, 0xb0, 0x0c, 0x2c, 0xc6, 0x22, 0xe0, 0x05, 0x11, 0x01, 0xff, 0x03,
+ 0x0f, 0x08, 0x19, 0xfa, 0x03, 0xb2, 0xd7, 0x40, 0x2c, 0x0c, 0x0b, 0x24, 0x08,
+ 0xb3, 0x36, 0xd4, 0xbe, 0xeb, 0xe2, 0x1e, 0xfc, 0xf7, 0xe6, 0x08, 0xfa, 0xed,
+ 0xcf, 0x09, 0xb3, 0x30, 0xf4, 0xfb, 0x16, 0xf7, 0x1c, 0xfd, 0x2a, 0xd5, 0xff,
+ 0xf5, 0xf7, 0xee, 0x25, 0x04, 0x08, 0x05, 0xdc, 0xe3, 0xef, 0xc4, 0x1a, 0x02,
+ 0xd2, 0xf6, 0x4c, 0xb3, 0xf7, 0xc8, 0xf3, 0x36, 0xff, 0xe7, 0x33, 0xd2, 0xf9,
+ 0xf6, 0x0c, 0x88, 0x09, 0xb3, 0xe2, 0xc7, 0xe7, 0xf8, 0x27, 0xda, 0xbc, 0xf1,
+ 0xac, 0xf9, 0x0f, 0xc5, 0xba, 0xe3, 0xb1, 0x04, 0xfb, 0xfc, 0x40, 0x2e, 0xde,
+ 0xb6, 0xdc, 0xbb, 0x25, 0x2b, 0x0f, 0x1c, 0x21, 0xf3, 0x31, 0x15, 0xf2, 0x25,
+ 0xf1, 0xe0, 0xc5, 0x22, 0xc3, 0xed, 0xdc, 0x4d, 0xdb, 0xf3, 0xd3, 0x55, 0x38,
+ 0xf3, 0xd7, 0xac, 0xf3, 0x04, 0xa4, 0x3c, 0xd2, 0xee, 0xe1, 0xd7, 0xfc, 0xde,
+ 0xdb, 0xe8, 0xd6, 0x0a, 0xb3, 0x65, 0x0d, 0x2e, 0xca, 0xfe, 0xe9, 0xca, 0xc4,
+ 0x81, 0x16, 0x47, 0xb6, 0x5d, 0xcf, 0xac, 0x39, 0xff, 0x38, 0xdb, 0x49, 0xcd,
+ 0xe0, 0x34, 0x07, 0x4e, 0xc1, 0x0c, 0x1f, 0xb6, 0xaa, 0x1e, 0x2d, 0x0e, 0x29,
+ 0xed, 0x30, 0xdc, 0xba, 0xc7, 0xf4, 0x2f, 0x6e, 0xbe, 0x31, 0xf8, 0xdd, 0xb8,
+ 0x05, 0xfc, 0xee, 0xe8, 0xda, 0x0b, 0xb7, 0xf7, 0x02, 0x0f, 0x85, 0x9f, 0x3d,
+ 0xd2, 0x3d, 0xff, 0xd1, 0xc0, 0x27, 0xe5, 0x0f, 0xff, 0xfc, 0xcf, 0x10, 0x4b,
+ 0xf5, 0xf5, 0x08, 0x2b, 0xeb, 0xe5, 0xd9, 0xd2, 0xc4, 0xd4, 0xf0, 0xd8, 0xfc,
+ 0xac, 0xe6, 0xe6, 0xc7, 0x15, 0xf1, 0xfc, 0xc3, 0x09, 0x15, 0xc9, 0xe2, 0x00,
+ 0x44, 0x41, 0xbf, 0x49, 0x21, 0x17, 0xdb, 0x83, 0xa3, 0xc2, 0xfb, 0x26, 0x1a,
+ 0xf4, 0x26, 0x20, 0xd1, 0xa7, 0x1f, 0xe6, 0x06, 0x99, 0x07, 0x16, 0x4d, 0xb1,
+ 0x3e, 0xc7, 0x2b, 0x30, 0xdc, 0xed, 0xed, 0xf7, 0xd9, 0xe8, 0x1c, 0xdf, 0x17,
+ 0xaf, 0xfb, 0xdf, 0xfb, 0xe0, 0x18, 0xe3, 0x39, 0x15, 0xf9, 0x3d, 0xaf, 0x3e,
+ 0x10, 0xb6, 0x3b, 0xf3, 0xee, 0xcf, 0xfa, 0xe4, 0xd2, 0xf4, 0x02, 0xf4, 0x15,
+ 0x24, 0xf2, 0xea, 0xfb, 0x12, 0x4e, 0xe3, 0xfd, 0xff, 0x26, 0x13, 0x38, 0xe9,
+ 0xe0, 0x06, 0x26, 0xf2, 0xff, 0xde, 0xef, 0xe4, 0x3d, 0xe6, 0xe6, 0xd3, 0xf1,
+ 0x05, 0xcd, 0xc8, 0xe4, 0xc2, 0xe0, 0x00, 0xea, 0xe2, 0x11, 0xfc, 0xd7, 0xe7,
+ 0xcd, 0xe8, 0xb5, 0xc6, 0x06, 0xf3, 0xbc, 0xda, 0xd6, 0xce, 0x05, 0xfa, 0xf0,
+ 0xe1, 0xfd, 0xe6, 0x35, 0x49, 0xfc, 0x00, 0xf8, 0xed, 0x1e, 0x24, 0x81, 0x2d,
+ 0x11, 0xe6, 0xfe, 0xdc, 0xba, 0xb8, 0xf7, 0x26, 0x04, 0x12, 0x1e, 0x24, 0x6f,
+ 0x0b, 0xf9, 0xcd, 0xd4, 0x0c, 0xce, 0x15, 0xc6, 0xe8, 0xb3, 0x05, 0x0f, 0xac,
+ 0x2a, 0xbd, 0xf5, 0x2f, 0xdf, 0xd3, 0x00, 0xed, 0xd2, 0x12, 0xed, 0x19, 0x36,
+ 0x1a, 0xf3, 0xe6, 0x02, 0x21, 0x10, 0xfe, 0xdb, 0xa6, 0xdc, 0xd2, 0x10, 0x6b,
+ 0xd7, 0xde, 0xce, 0xfd, 0xc2, 0x12, 0xd2, 0xfd, 0xe4, 0xd0, 0xe2, 0xfb, 0x11,
+ 0xdc, 0xc0, 0xda, 0xd4, 0xf8, 0x0e, 0x05, 0xdd, 0xf9, 0xee, 0x2e, 0x22, 0xe6,
+ 0xc2, 0xd9, 0x0b, 0xf6, 0xe0, 0x21, 0xf9, 0xdf, 0x32, 0x0c, 0x14, 0xbc, 0xc3,
+ 0x17, 0xf2, 0xe0, 0xe9, 0xf4, 0xf7, 0x0c, 0xdd, 0x3b, 0xbc, 0xdb, 0x1b, 0xdf,
+ 0xfb, 0xd9, 0x06, 0xcb, 0xde, 0x1a, 0x35, 0x21, 0x16, 0xe7, 0xd7, 0x19, 0xfb,
+ 0x2b, 0xc1, 0xd2, 0x0f, 0x2c, 0x02, 0x22, 0x09, 0xf0, 0xcd, 0xd8, 0x1f, 0xaf,
+ 0xf2, 0xd1, 0x04, 0x05, 0xbc, 0xd2, 0xea, 0x30, 0xeb, 0xee, 0xe8, 0xef, 0xd7,
+ 0xce, 0xbe, 0xff, 0xbe, 0xa8, 0xbc, 0xdc, 0xfd, 0xea, 0x07, 0x00, 0xe2, 0xee,
+ 0x27, 0xe6, 0xe7, 0x01, 0xf8, 0x07, 0xf3, 0x07, 0x01, 0xf7, 0xec, 0xe8, 0xf9,
+ 0xee, 0xfe, 0x14, 0x01, 0xdd, 0x2d, 0x31, 0x25, 0xf1, 0xfe, 0x22, 0xf7, 0xcf,
+ 0x09, 0xcf, 0xfe, 0xfb, 0xdd, 0xcc, 0x3d, 0x2f, 0xed, 0xf1, 0xe5, 0xaa, 0xed,
+ 0xe2, 0xea, 0xca, 0x00, 0xf8, 0xf6, 0xe7, 0xf6, 0x0c, 0x0b, 0xd0, 0x18, 0x01,
+ 0x1f, 0xb3, 0x1f, 0xf0, 0x07, 0xad, 0xf1, 0xca, 0xc4, 0xec, 0xf5, 0x36, 0xa4,
+ 0x15, 0xd1, 0xf5, 0xae, 0xcb, 0x21, 0x81, 0xfd, 0xcc, 0xd0, 0x00, 0xbf, 0xe2,
+ 0x0c, 0x27, 0x64, 0x22, 0x49, 0x21, 0xbd, 0xfd, 0xdb, 0xd9, 0xa7, 0x04, 0x04,
+ 0xe3, 0x30, 0xf4, 0xfb, 0x2b, 0xc6, 0xef, 0xfe, 0x1c, 0xe4, 0xdd, 0x01, 0x43,
+ 0xef, 0x4b, 0x72, 0x5c, 0x33, 0x37, 0xe5, 0xe4, 0x01, 0xea, 0xb0, 0x0b, 0x43,
+ 0xde, 0x06, 0xe4, 0x30, 0x5c, 0xea, 0xcd, 0xe5, 0x1e, 0x13, 0xe9, 0x0a, 0x2e,
+ 0xcf, 0xd9, 0x35, 0x13, 0xb7, 0xf3, 0x1f, 0xeb, 0xc5, 0x1c, 0x09, 0x13, 0x02,
+ 0x20, 0x13, 0x9e, 0x20, 0xe2, 0xba, 0x0d, 0xf8, 0xdf, 0x45, 0xeb, 0x1c, 0xf6,
+ 0x03, 0xec, 0xe5, 0x5e, 0xbb, 0x2a, 0xd3, 0xc1, 0xce, 0xb5, 0xe7, 0xff, 0xfc,
+ 0xf6, 0x1c, 0xb6, 0x11, 0xa6, 0xe6, 0x1b, 0xfa, 0x32, 0x24, 0xee, 0xca, 0xdd,
+ 0xe6, 0x17, 0x9a, 0xef, 0xea, 0xd8, 0x47, 0xf0, 0x14, 0x37, 0xd5, 0xff, 0x8a,
+ 0xe8, 0x03, 0xf6, 0x8e, 0x14, 0xec, 0xc4, 0x3e, 0xfc, 0xd4, 0x11, 0xd9, 0x96,
+ 0x9f, 0x11, 0xf3, 0x14, 0xa6, 0xdd, 0x1a, 0xfd, 0xa8, 0xcf, 0xdd, 0x18, 0xf4,
+ 0xd0, 0x5c, 0xf3, 0x25, 0x02, 0x2b, 0x3a, 0x44, 0xe0, 0xce, 0xf1, 0x09, 0xbe,
+ 0xe2, 0x1f, 0xa3, 0x11, 0xf9, 0xe7, 0x45, 0xcd, 0xeb, 0xda, 0xe0, 0xd0, 0xd6,
+ 0x3c, 0xf9, 0x63, 0xc2, 0x46, 0x30, 0xd3, 0xf9, 0xfa, 0xec, 0x97, 0x3f, 0x36,
+ 0x1b, 0xe7, 0x0f, 0xed, 0x0d, 0xe3, 0x18, 0x42, 0xcb, 0x0d, 0x37, 0x13, 0x13,
+ 0x49, 0xd2, 0x01, 0xcf, 0xd6, 0x27, 0xfc, 0x0e, 0xec, 0xb7, 0x1a, 0xc6, 0xf3,
+ 0x15, 0x60, 0x08, 0xf9, 0xe8, 0x3b, 0xc3, 0x34, 0xfc, 0x02, 0xa8, 0xcf, 0x26,
+ 0x37, 0xed, 0xee, 0xfc, 0xce, 0x15, 0x63, 0xb6, 0x3e, 0x09, 0xfb, 0xec, 0xfd,
+ 0x00, 0xc1, 0xf3, 0x08, 0x9e, 0xe7, 0xcc, 0xcf, 0xed, 0xf4, 0xd5, 0xf8, 0x11,
+ 0xdd, 0x12, 0xe8, 0xfc, 0xeb, 0x05, 0x03, 0x12, 0xf8, 0x12, 0xf8, 0xdb, 0x0c,
+ 0xda, 0x1a, 0xe8, 0x23, 0xd9, 0x16, 0x21, 0xde, 0xe0, 0x33, 0x00, 0xd5, 0x0d,
+ 0xeb, 0xfd, 0xfd, 0xd2, 0x23, 0xf9, 0xda, 0xcd, 0xd8, 0x1e, 0xdf, 0x13, 0x51,
+ 0xe8, 0xf1, 0x0b, 0x1e, 0x1e, 0xf7, 0x19, 0xff, 0xd8, 0xde, 0xdb, 0x1b, 0xe5,
+ 0xf4, 0xce, 0x0a, 0xfc, 0x0b, 0x00, 0xdd, 0xf0, 0xde, 0xcd, 0xbb, 0xec, 0xc4,
+ 0xe0, 0x25, 0xe0, 0x13, 0xef, 0xef, 0xd6, 0xe4, 0xeb, 0x0d, 0x0c, 0x15, 0xeb,
+ 0x0b, 0xd8, 0x20, 0x12, 0x03, 0x81, 0x01, 0x07, 0x18, 0xfb, 0xb5, 0xb6, 0xaf,
+ 0xb7, 0xd8, 0x0f, 0x00, 0x17, 0xde, 0xd1, 0x24, 0x16, 0xfc, 0xfa, 0x0e, 0xed,
+ 0xea, 0xe3, 0x09, 0x06, 0xd1, 0xe3, 0x38, 0x11, 0x03, 0xe6, 0xcd, 0x0a, 0x0d,
+ 0xd9, 0xeb, 0xbb, 0xe4, 0xd5, 0xb5, 0x14, 0x0d, 0x09, 0xf3, 0x22, 0x04, 0x03,
+ 0xe3, 0x03, 0xce, 0xdf, 0x1a, 0xc7, 0xdf, 0xdd, 0x1c, 0x1e, 0x0b, 0x01, 0xf4,
+ 0x0d, 0xff, 0x18, 0xf3, 0x1a, 0xff, 0x53, 0xff, 0x19, 0xfb, 0x2f, 0xf4, 0xca,
+ 0xea, 0x40, 0x1b, 0xf3, 0x09, 0xf9, 0xbc, 0x01, 0xec, 0xe7, 0xdf, 0x01, 0xb4,
+ 0x2c, 0xf4, 0xd6, 0xf8, 0x05, 0xca, 0xf9, 0xe3, 0xef, 0xdc, 0xfe, 0xf4, 0xf3,
+ 0xee, 0xfc, 0x05, 0x2f, 0xbf, 0xd4, 0x0e, 0xed, 0x0e, 0xfb, 0xe5, 0xf0, 0xe3,
+ 0xe3, 0x05, 0x0b, 0xec, 0xde, 0x13, 0xd6, 0xd3, 0xe1, 0xf6, 0xd4, 0xee, 0x22,
+ 0x27, 0x14, 0xf3, 0x1b, 0xec, 0xd0, 0xfd, 0xc9, 0xe9, 0x03, 0xee, 0x13, 0x0c,
+ 0x2d, 0xeb, 0x03, 0x9d, 0x1a, 0xed, 0x39, 0xf7, 0xde, 0xaa, 0xd2, 0xfc, 0x4f,
+ 0xd4, 0xf6, 0xba, 0xf9, 0xe9, 0xd3, 0xea, 0x17, 0x93, 0x2d, 0xfe, 0xf9, 0x00,
+ 0x00, 0x08, 0xb7, 0xfb, 0x8d, 0x2c, 0x40, 0xc1, 0x42, 0x1f, 0xbb, 0xd3, 0x41,
+ 0xfb, 0x13, 0xe6, 0xa8, 0x53, 0x05, 0x24, 0x1b, 0x1a, 0xf7, 0x0c, 0x2d, 0xab,
+ 0x23, 0xeb, 0xee, 0x42, 0x26, 0xb0, 0x05, 0x1a, 0xf0, 0xa8, 0xf2, 0x38, 0xd0,
+ 0xff, 0xef, 0x21, 0x41, 0x1f, 0x2a, 0x2a, 0xeb, 0xfe, 0x23, 0x0a, 0x43, 0xff,
+ 0x29, 0xe1, 0xad, 0xcd, 0xf8, 0x14, 0xcc, 0xd3, 0xc2, 0xf5, 0xfa, 0xb1, 0x18,
+ 0xa3, 0xe6, 0x49, 0x15, 0x0d, 0xf9, 0xd1, 0xf1, 0x10, 0x14, 0xea, 0xc7, 0x55,
+ 0xf4, 0x22, 0xcf, 0x07, 0xc4, 0xee, 0x27, 0xc0, 0x22, 0x1c, 0xf9, 0xf7, 0xda,
+ 0x0f, 0xd6, 0x27, 0x35, 0x10, 0xe7, 0x01, 0x33, 0xb5, 0xf5, 0x31, 0xd5, 0xef,
+ 0xcd, 0xe3, 0x1a, 0xa8, 0x13, 0x23, 0x3f, 0xbb, 0xe0, 0xf7, 0xda, 0xe9, 0xf8,
+ 0xf6, 0x00, 0x15, 0x09, 0xba, 0x27, 0xf4, 0x81, 0xe1, 0x17, 0x06, 0x0a, 0x3f,
+ 0xde, 0xcd, 0x07, 0xd7, 0xdc, 0xc5, 0x44, 0xe3, 0xb8, 0xd9, 0xfc, 0xf1, 0xc5,
+ 0xc8, 0xec, 0xdb, 0x1a, 0xc6, 0xf7, 0x31, 0xde, 0xe3, 0xe6, 0xc7, 0x9a, 0x32,
+ 0xb3, 0xb4, 0x2a, 0xdc, 0xe1, 0xe5, 0x15, 0xd8, 0xe2, 0xfd, 0x46, 0xfd, 0xe0,
+ 0x0b, 0x0d, 0x24, 0x0f, 0x0d, 0xfb, 0xc2, 0xfe, 0xa2, 0xd2, 0x0d, 0xea, 0x09,
+ 0x3e, 0xd6, 0xf5, 0x21, 0xb0, 0x31, 0xd3, 0x23, 0x06, 0x20, 0x06, 0xdc, 0x35,
+ 0x23, 0x29, 0xf3, 0xa9, 0xa8, 0xe8, 0xc8, 0x00, 0xfa, 0xf5, 0x0b, 0xd8, 0x1b,
+ 0x01, 0xd5, 0xec, 0xe3, 0xa4, 0xc7, 0xb6, 0xdd, 0x14, 0x3c, 0xde, 0xde, 0x14,
+ 0xe1, 0x30, 0xd1, 0x1b, 0xd8, 0x3c, 0x13, 0xaf, 0xbc, 0xe7, 0xd4, 0x0b, 0x01,
+ 0x08, 0xd5, 0x2d, 0x27, 0xfc, 0xcd, 0xef, 0x04, 0xfb, 0xcf, 0xf3, 0x16, 0x40,
+ 0x4a, 0xac, 0x06, 0xce, 0x18, 0xfe, 0x13, 0xc2, 0xce, 0x28, 0xef, 0xc3, 0xf0,
+ 0x1f, 0xd6, 0x05, 0xd7, 0x04, 0xf5, 0x0c, 0xe1, 0xe9, 0xca, 0x06, 0x18, 0xc4,
+ 0x11, 0x08, 0x3b, 0x18, 0xf6, 0xd7, 0xdd, 0x0a, 0xa7, 0xb7, 0xfa, 0xf4, 0x41,
+ 0x11, 0x28, 0x33, 0x17, 0x9f, 0x2e, 0x17, 0xde, 0x06, 0x0d, 0xa9, 0x30, 0xdd,
+ 0x24, 0xe5, 0xe2, 0xe2, 0x1e, 0xd6, 0x20, 0x2c, 0x0a, 0xf8, 0xd9, 0xd7, 0x14,
+ 0xda, 0xff, 0xd6, 0x19, 0xf0, 0x13, 0x36, 0x2b, 0xfc, 0xb6, 0xc4, 0x2b, 0xbf,
+ 0xf4, 0xe0, 0xa2, 0x05, 0x8b, 0x3c, 0xf6, 0xeb, 0xe3, 0xdc, 0x24, 0xba, 0xe3,
+ 0x3a, 0x1f, 0x07, 0xf8, 0x34, 0x14, 0xd2, 0xdd, 0x47, 0x3d, 0xad, 0xc9, 0x06,
+ 0x14, 0x16, 0xf3, 0xe8, 0xcb, 0xe9, 0xec, 0xe1, 0xec, 0x0c, 0x14, 0xd1, 0xd2,
+ 0x0c, 0xfa, 0xeb, 0xd4, 0xfc, 0xdf, 0x43, 0x2a, 0xdc, 0x02, 0xe1, 0xc2, 0x0a,
+ 0xe2, 0xfa, 0xec, 0x3a, 0xf7, 0x0b, 0xbd, 0x1d, 0x18, 0x26, 0xe8, 0x08, 0x1f,
+ 0xda, 0xdd, 0x0b, 0xf3, 0x13, 0x15, 0xd2, 0x1a, 0x81, 0xe7, 0x07, 0xfe, 0xb2,
+ 0xb3, 0x39, 0x0a, 0xda, 0xee, 0xd6, 0xf3, 0xf6, 0xde, 0xb5, 0x22, 0xe4, 0x1b,
+ 0xe9, 0x2d, 0x07, 0x02, 0x20, 0x1f, 0xdd, 0xe9, 0xde, 0x21, 0xfa, 0xee, 0xda,
+ 0x39, 0xf8, 0xdc, 0xf9, 0x01, 0xfe, 0x13, 0x12, 0x0f, 0x22, 0xd1, 0xfa, 0xf4,
+ 0xfa, 0xca, 0xf8, 0x18, 0xfb, 0x28, 0x11, 0x0a, 0x15, 0xe4, 0xce, 0x0e, 0x23,
+ 0x08, 0x04, 0x09, 0xd6, 0x07, 0x06, 0x01, 0x27, 0xdd, 0xf6, 0xef, 0xbf, 0x44,
+ 0xd2, 0xf1, 0xd9, 0x0a, 0xde, 0x11, 0x42, 0x16, 0xf7, 0xf0, 0xe3, 0x0d, 0x00,
+ 0x08, 0xbe, 0xca, 0x2b, 0xf3, 0x50, 0xe6, 0xd4, 0x1d, 0x1a, 0xf3, 0x10, 0x2e,
+ 0xf8, 0xc1, 0x20, 0xc4, 0xf4, 0xa7, 0xe8, 0xbb, 0x03, 0xf1, 0x08, 0xc2, 0x35,
+ 0xde, 0xd5, 0xe1, 0x6b, 0x1e, 0xbf, 0x1d, 0xb3, 0xc3, 0x2e, 0x3c, 0x81, 0x22,
+ 0x1e, 0xb4, 0x15, 0xc1, 0xeb, 0xc7, 0xc5, 0xfb, 0xc7, 0xaa, 0xb5, 0x20, 0xf4,
+ 0xb1, 0x2e, 0xbe, 0xfa, 0x27, 0xe2, 0x28, 0xef, 0x5c, 0xd9, 0xf6, 0xf6, 0x41,
+ 0xd1, 0xd0, 0x20, 0x26, 0x41, 0x03, 0xd4, 0x11, 0xbf, 0xfe, 0x49, 0x01, 0xc8,
+ 0xc1, 0xd8, 0x35, 0xaf, 0xac, 0x17, 0xdf, 0xbf, 0xcd, 0x00, 0xba, 0xbc, 0xb2,
+ 0xec, 0xb8, 0xc1, 0x4e, 0xc9, 0xe6, 0xf1, 0xb3, 0xb3, 0xd9, 0x04, 0xf1, 0xdf,
+ 0x52, 0x24, 0xf2, 0x24, 0x00, 0xe6, 0xf3, 0xe4, 0xc5, 0xa1, 0xac, 0xb7, 0x31,
+ 0xc2, 0x3c, 0xf0, 0xfd, 0x27, 0xee, 0xc9, 0xe6, 0xc3, 0xad, 0xd8, 0xb7, 0x37,
+ 0x06, 0x96, 0xfb, 0x53, 0xc5, 0x1e, 0x0f, 0x13, 0xbd, 0x9f, 0xed, 0xf5, 0x49,
+ 0x33, 0x13, 0xca, 0x52, 0x58, 0x39, 0x16, 0x02, 0xd0, 0x2a, 0x11, 0x0f, 0xd0,
+ 0x21, 0xbe, 0xe5, 0xe0, 0x03, 0x03, 0xe5, 0x37, 0xed, 0xda, 0x16, 0x5a, 0xd9,
+ 0xfe, 0xfe, 0xd0, 0x0a, 0xec, 0x0f, 0xff, 0xf8, 0x22, 0xe9, 0xf5, 0xf7, 0xe3,
+ 0xfd, 0x09, 0xef, 0xc8, 0x03, 0xfa, 0x01, 0x2e, 0xf7, 0x1b, 0x1c, 0xfd, 0xec,
+ 0xe7, 0xcd, 0xec, 0x0e, 0x46, 0xe6, 0xf9, 0xc6, 0xb0, 0x15, 0x50, 0xdf, 0xf0,
+ 0xe4, 0x12, 0x01, 0xe2, 0xc8, 0x0b, 0x12, 0x0e, 0x10, 0x0b, 0x21, 0x2b, 0xee,
+ 0x14, 0xd3, 0x12, 0xe3, 0xc7, 0xaf, 0xf0, 0xe8, 0xa4, 0xc4, 0xeb, 0x99, 0x15,
+ 0x32, 0x2c, 0xd3, 0xe5, 0xb4, 0xaf, 0x28, 0xce, 0xd1, 0xec, 0xb7, 0xd9, 0x4e,
+ 0xe4, 0xed, 0x5e, 0xc2, 0x2e, 0xd6, 0xdc, 0xf6, 0xe1, 0x30, 0xd1, 0xf6, 0xf0,
+ 0xc0, 0x00, 0xd1, 0x03, 0xde, 0xeb, 0x15, 0xef, 0xde, 0xc7, 0xfc, 0xd7, 0x35,
+ 0xef, 0xbd, 0xce, 0xda, 0xc0, 0xf7, 0x1c, 0x0c, 0xde, 0xe7, 0xbe, 0x09, 0xeb,
+ 0xbe, 0x12, 0xc9, 0x05, 0xe7, 0xe5, 0x0b, 0x1a, 0x23, 0x18, 0xf4, 0x0c, 0x09,
+ 0xf7, 0x1f, 0xc0, 0x2f, 0xfb, 0x16, 0xbf, 0x05, 0xe8, 0xe1, 0xf9, 0xea, 0x24,
+ 0xe9, 0x11, 0x3b, 0xfa, 0xeb, 0xcf, 0xe6, 0xdc, 0xd6, 0x1c, 0x1f, 0x03, 0xb8,
+ 0x0d, 0x0e, 0x01, 0x37, 0x08, 0x0a, 0x45, 0x2b, 0xf3, 0xe4, 0xf9, 0x1a, 0x0e,
+ 0x0d, 0xf6, 0x1b, 0xe8, 0xc5, 0x03, 0x14, 0x30, 0xe3, 0x45, 0xbd, 0x0a, 0xf8,
+ 0xb5, 0xee, 0x12, 0xe2, 0x17, 0x21, 0x32, 0x24, 0x32, 0x2e, 0x35, 0xf0, 0xe5,
+ 0x12, 0xd2, 0xe9, 0x11, 0x1e, 0x06, 0xf9, 0x21, 0x16, 0x36, 0x12, 0x0e, 0x05,
+ 0xe1, 0xb1, 0x2e, 0xe9, 0xe9, 0xe1, 0x01, 0x03, 0xe1, 0xfc, 0xf6, 0x29, 0x2d,
+ 0x12, 0x03, 0xfb, 0x37, 0x0e, 0x06, 0x30, 0xbd, 0x03, 0x40, 0xd9, 0x00, 0xe7,
+ 0x09, 0xfd, 0xef, 0xe6, 0xec, 0x2a, 0xf8, 0xfa, 0xfe, 0x09, 0xfd, 0x29, 0xd1,
+ 0xe5, 0x4a, 0xc9, 0xfc, 0xdd, 0xfe, 0x2f, 0x0e, 0xdd, 0x21, 0xda, 0x11, 0xee,
+ 0xc7, 0xfd, 0xfe, 0xcf, 0x02, 0xe3, 0x0b, 0xed, 0xf0, 0x6f, 0xf3, 0xf5, 0x11,
+ 0xf5, 0xbd, 0xf0, 0xeb, 0x08, 0x00, 0x08, 0xe8, 0x25, 0xfb, 0x08, 0x26, 0x17,
+ 0x06, 0xe6, 0xd7, 0x12, 0xf6, 0xc3, 0x05, 0xf9, 0x1d, 0xc8, 0xc5, 0xdb, 0xe5,
+ 0xc0, 0x18, 0x27, 0x10, 0xfc, 0xd7, 0x3a, 0x1f, 0x21, 0xf7, 0x01, 0x0c, 0xcd,
+ 0xed, 0x2e, 0xd3, 0xef, 0xda, 0xd9, 0x0a, 0xe8, 0xf6, 0x07, 0x00, 0x11, 0x12,
+ 0x01, 0xf2, 0xe7, 0xf5, 0x0e, 0xeb, 0x0a, 0x0f, 0x2f, 0xd4, 0xcb, 0x00, 0xf4,
+ 0xeb, 0xea, 0xec, 0xf1, 0x24, 0x0d, 0xdd, 0x1b, 0x00, 0xff, 0x11, 0x08, 0x0d,
+ 0xcd, 0x06, 0xf3, 0xc7, 0xde, 0xf4, 0x02, 0x23, 0x0e, 0x7f, 0xf3, 0x32, 0x11,
+ 0x12, 0x02, 0x2d, 0xd9, 0x48, 0xce, 0xe2, 0xc9, 0x14, 0xe5, 0xd7, 0x28, 0x20,
+ 0x1a, 0xc1, 0x36, 0xe7, 0x30, 0x38, 0xec, 0x0d, 0x4c, 0x3a, 0x24, 0xd2, 0xb1,
+ 0x3d, 0x19, 0xbb, 0xd3, 0xca, 0xdb, 0x03, 0xe3, 0xd7, 0x0e, 0xe0, 0xc3, 0xb5,
+ 0xe3, 0x3e, 0xe0, 0x0f, 0xd2, 0xec, 0xb8, 0xae, 0x2c, 0xf4, 0xec, 0xcd, 0x14,
+ 0xee, 0xe2, 0x52, 0xdf, 0x64, 0xf3, 0xef, 0x1e, 0xb3, 0x9c, 0x08, 0x02, 0xf2,
+ 0x1c, 0xd6, 0x20, 0x17, 0x2b, 0x20, 0xdc, 0xed, 0xfc, 0xf7, 0xc4, 0x21, 0xd2,
+ 0x47, 0x2a, 0x0b, 0x00, 0x09, 0x3d, 0x3e, 0xf3, 0x32, 0xc6, 0x0b, 0xc0, 0xf9,
+ 0x1c, 0x00, 0x14, 0xfb, 0xfe, 0x46, 0x1f, 0xcd, 0xdf, 0x40, 0xe5, 0x0d, 0xdd,
+ 0x24, 0xd8, 0xf7, 0xf3, 0xf4, 0x1e, 0x0c, 0xd4, 0x2c, 0x07, 0x92, 0xd9, 0x1a,
+ 0xda, 0x42, 0xd2, 0x33, 0x0c, 0xe6, 0xed, 0xf6, 0xe1, 0xca, 0x27, 0x11, 0xe2,
+ 0xf4, 0x81, 0x26, 0x08, 0xf4, 0x40, 0xcb, 0xb6, 0xf1, 0xf7, 0x22, 0xd2, 0xce,
+ 0xda, 0xe7, 0xd3, 0xf3, 0xdd, 0x43, 0x36, 0xff, 0x20, 0x10, 0x18, 0x06, 0xbf,
+ 0x07, 0x1c, 0x0e, 0x07, 0x03, 0x2a, 0xf0, 0xec, 0xc8, 0xf8, 0xb7, 0xe3, 0xe2,
+ 0x14, 0xde, 0xaf, 0xda, 0x3f, 0x0f, 0xfb, 0x11, 0x2a, 0xbd, 0xe7, 0x12, 0x04,
+ 0xf5, 0x24, 0x17, 0xf3, 0x05, 0x22, 0x3c, 0x1b, 0xe2, 0xfb, 0xb4, 0x38, 0x04,
+ 0x0a, 0x1c, 0x09, 0xf0, 0x34, 0xf7, 0xf5, 0x10, 0x32, 0xe9, 0xbc, 0x36, 0xc7,
+ 0xef, 0x1b, 0xff, 0x29, 0xf6, 0xfc, 0xfa, 0xd8, 0x0c, 0xae, 0x9a, 0x1b, 0x06,
+ 0x03, 0xbf, 0x09, 0x3a, 0xde, 0x16, 0x1f, 0xca, 0x0b, 0xd6, 0x21, 0xcb, 0xb2,
+ 0xc4, 0x1e, 0x05, 0xc8, 0xc7, 0xdf, 0xfb, 0x0c, 0xc7, 0xef, 0x11, 0xe3, 0xdc,
+ 0xe4, 0x0b, 0xe1, 0xf6, 0xe2, 0xce, 0xad, 0xea, 0x1c, 0xf2, 0xe8, 0xe8, 0xde,
+ 0xf2, 0xe8, 0xd7, 0xfe, 0xfc, 0x23, 0xc6, 0x47, 0x06, 0xdd, 0xde, 0x64, 0x0e,
+ 0xda, 0xfe, 0xd5, 0x21, 0x19, 0x06, 0xf7, 0xe9, 0xe6, 0xf9, 0x1e, 0xbc, 0xea,
+ 0x11, 0xe1, 0x0b, 0xd0, 0x20, 0x12, 0x39, 0xf1, 0x08, 0xed, 0xcb, 0x38, 0x0c,
+ 0xe3, 0xe5, 0xbf, 0x39, 0x00, 0xdd, 0xcc, 0xa3, 0x0f, 0xf4, 0x29, 0x1f, 0xd4,
+ 0x3d, 0x25, 0xe3, 0x62, 0xf2, 0xc1, 0x02, 0x97, 0x2a, 0xfd, 0xe1, 0xc8, 0xea,
+ 0x36, 0x0f, 0xf4, 0xc1, 0xfb, 0x26, 0xd4, 0x2d, 0xe2, 0x09, 0xe0, 0xfa, 0xae,
+ 0xff, 0xf7, 0x31, 0x08, 0x1b, 0x5e, 0x0b, 0xe1, 0xd1, 0x2b, 0xd2, 0xfa, 0xec,
+ 0xbc, 0xed, 0x44, 0xd7, 0xcf, 0x7f, 0xd8, 0xca, 0xe9, 0x0f, 0x53, 0x44, 0x3c,
+ 0x15, 0x24, 0x07, 0xd1, 0x1e, 0x9f, 0xd1, 0xca, 0xe6, 0xec, 0xba, 0xea, 0xbc,
+ 0xc7, 0xef, 0x0c, 0xf9, 0xe8, 0x1f, 0xf4, 0xf7, 0x47, 0xbb, 0xa3, 0xe9, 0xd4,
+ 0xda, 0xde, 0xe0, 0x01, 0xd8, 0x1c, 0x0b, 0x21, 0x26, 0xe0, 0x32, 0x26, 0x4f,
+ 0xe4, 0x4e, 0xf8, 0x01, 0xed, 0xef, 0xfa, 0xf9, 0x27, 0x1c, 0xe2, 0xfb, 0xd4,
+ 0xfd, 0xf7, 0x01, 0xdd, 0x95, 0x02, 0xea, 0xf1, 0x2e, 0x37, 0x16, 0x0b, 0x4a,
+ 0x17, 0x4b, 0xcb, 0x21, 0x2e, 0x26, 0x16, 0x0a, 0x14, 0x1b, 0xf9, 0x13, 0xb9,
+ 0xee, 0x3a, 0x46, 0xfe, 0x16, 0xf1, 0xa4, 0x45, 0xf1, 0x24, 0xf4, 0x11, 0x1e,
+ 0x2f, 0x03, 0xe9, 0x34, 0x52, 0xfa, 0xb4, 0x10, 0xec, 0x47, 0x2a, 0xd4, 0xd9,
+ 0x08, 0x70, 0x36, 0xd7, 0x22, 0xd1, 0xaa, 0xf0, 0x00, 0xbd, 0xdd, 0xee, 0xb1,
+ 0x05, 0x1a, 0x00, 0xd0, 0xbb, 0xbc, 0xf5, 0x07, 0xe6, 0xfc, 0x2a, 0xeb, 0xe0,
+ 0x01, 0xa0, 0xfd, 0xda, 0xde, 0xf4, 0xff, 0xeb, 0xe1, 0x14, 0x1c, 0xf3, 0xf0,
+ 0x02, 0xe4, 0xe5, 0xef, 0xe6, 0x06, 0x05, 0x17, 0x0f, 0x20, 0xc9, 0x01, 0xd6,
+ 0x1e, 0xf0, 0xc9, 0xb3, 0x2d, 0x00, 0x03, 0xb6, 0xd5, 0x17, 0x0a, 0xa5, 0x13,
+ 0xfd, 0x44, 0x17, 0xbc, 0xec, 0xd8, 0xf2, 0xe4, 0x05, 0x2b, 0xe8, 0xcf, 0xea,
+ 0x2f, 0xf2, 0xde, 0xf4, 0x0a, 0xe6, 0x00, 0x04, 0xde, 0xf2, 0x9e, 0xd3, 0x12,
+ 0x09, 0xf6, 0x16, 0x11, 0x38, 0xd5, 0x30, 0xf0, 0x3d, 0x0d, 0xef, 0x45, 0xd8,
+ 0x1c, 0xe7, 0x07, 0xc8, 0x13, 0xed, 0x17, 0xe9, 0x16, 0x47, 0x22, 0xf6, 0x81,
+ 0x45, 0x07, 0xf8, 0xab, 0x2f, 0xd8, 0xb9, 0xfd, 0xfb, 0xeb, 0xcb, 0xcb, 0xf9,
+ 0x3a, 0x2c, 0xe6, 0x0c, 0x93, 0xec, 0x1d, 0x12, 0x06, 0xd9, 0x15, 0xf6, 0x16,
+ 0x91, 0xf7, 0xd0, 0xdf, 0x2b, 0x1a, 0x30, 0xef, 0xc5, 0x05, 0x28, 0xbb, 0xc5,
+ 0x9d, 0xfd, 0xce, 0xe4, 0x13, 0xc7, 0x0e, 0xd5, 0xcb, 0xeb, 0xd1, 0xdb, 0x3f,
+ 0x25, 0x02, 0x01, 0xa2, 0x47, 0xe0, 0xf6, 0x3d, 0xd3, 0x1a, 0x30, 0x1a, 0x25,
+ 0xdf, 0xc6, 0x0d, 0xfd, 0x2d, 0xde, 0xdb, 0xd4, 0x43, 0xc5, 0x35, 0xee, 0xf4,
+ 0x13, 0xd0, 0xe2, 0xb8, 0x05, 0x2f, 0xe4, 0xaa, 0x17, 0x36, 0xe3, 0x4e, 0x2e,
+ 0x09, 0x01, 0xef, 0x06, 0xb2, 0xeb, 0x04, 0x2e, 0x12, 0x02, 0x16, 0xf0, 0x0f,
+ 0xda, 0x14, 0xfa, 0xd2, 0xba, 0xe9, 0x02, 0x2e, 0x17, 0xeb, 0xcb, 0x8d, 0x06,
+ 0xd3, 0xa7, 0x17, 0x15, 0x1a, 0x0f, 0xcf, 0x23, 0x3d, 0xff, 0x33, 0xd4, 0x21,
+ 0xfe, 0xbe, 0xf8, 0xf0, 0xd0, 0xbf, 0xab, 0x11, 0xe0, 0x18, 0xb1, 0x41, 0xb5,
+ 0x26, 0x1e, 0xff, 0x07, 0x37, 0xec, 0xbc, 0x96, 0x19, 0x0c, 0x1b, 0xf0, 0x48,
+ 0x2f, 0xc6, 0xd2, 0xd8, 0xbc, 0xf9, 0x11, 0xbb, 0xff, 0xe7, 0xe7, 0x1f, 0x3d,
+ 0x24, 0xff, 0x16, 0x54, 0x0c, 0xdf, 0x1b, 0xd3, 0xba, 0xf6, 0x43, 0x01, 0xd8,
+ 0x4f, 0x23, 0x02, 0x00, 0x41, 0xab, 0xdb, 0xbe, 0x12, 0xf7, 0xfe, 0xcc, 0xdb,
+ 0xaf, 0x2c, 0xf3, 0x10, 0xea, 0x96, 0x18, 0x00, 0xf4, 0xf0, 0x06, 0xbc, 0x00,
+ 0xac, 0xe3, 0x3d, 0xa3, 0xbb, 0xba, 0xf5, 0xd5, 0x19, 0xe6, 0xa6, 0xff, 0x56,
+ 0xf8, 0x07, 0x26, 0xeb, 0x11, 0xed, 0xb1, 0xcb, 0xc9, 0x07, 0x27, 0x69, 0xaa,
+ 0xef, 0x06, 0x4b, 0xf1, 0xe6, 0xe4, 0x21, 0xa4, 0xe1, 0xda, 0xe7, 0xe2, 0xb9,
+ 0x30, 0x0c, 0x0a, 0x44, 0x2c, 0xdc, 0xf3, 0xe8, 0xe3, 0xe0, 0x1a, 0xcb, 0xa4,
+ 0xfd, 0x07, 0xdf, 0xd8, 0x11, 0xe1, 0x08, 0x2b, 0xcc, 0x15, 0x13, 0xd0, 0xc0,
+ 0xf3, 0x22, 0x59, 0xd2, 0x33, 0xf5, 0x1d, 0xd9, 0xfc, 0xd6, 0x30, 0x1a, 0xf5,
+ 0xd5, 0x19, 0x1c, 0x11, 0xd7, 0x20, 0x3f, 0xd9, 0xdb, 0x18, 0xf7, 0xae, 0xfd,
+ 0x15, 0x54, 0x06, 0x27, 0xc8, 0xe6, 0xa4, 0xc4, 0x3f, 0x03, 0x4f, 0xda, 0xaf,
+ 0xd1, 0xad, 0xf7, 0x31, 0x37, 0x1b, 0xa6, 0xe6, 0x32, 0x2e, 0x04, 0x15, 0x1a,
+ 0x0f, 0xb8, 0xc0, 0x37, 0xbc, 0x81, 0x09, 0xe5, 0x1b, 0x51, 0x94, 0x10, 0x19,
+ 0x1b, 0xf5, 0xea, 0xc5, 0xee, 0x00, 0xe5, 0xcd, 0x01, 0xfe, 0x11, 0x9b, 0xa2,
+ 0x05, 0xd7, 0xab, 0xe7, 0xfd, 0xb6, 0xd9, 0xec, 0xe3, 0x3d, 0xbb, 0x1f, 0x10,
+ 0x1e, 0xe7, 0xdd, 0xeb, 0x4d, 0x21, 0xd2, 0x35, 0x9d, 0x53, 0x41, 0x23, 0x1c,
+ 0xe5, 0xc6, 0xf7, 0x15, 0xd4, 0x3d, 0x1a, 0x0d, 0xec, 0xba, 0x23, 0xfc, 0x02,
+ 0x38, 0xa1, 0x04, 0xf5, 0x99, 0xff, 0x49, 0xbc, 0xab, 0xba, 0xad, 0xe3, 0xb7,
+ 0x19, 0xcf, 0xf7, 0x0e, 0x25, 0x68, 0x13, 0xbe, 0xcb, 0xd7, 0x1b, 0xd5, 0x29,
+ 0xfe, 0x0c, 0x42, 0x1d, 0x61, 0x0b, 0xfa, 0x08, 0xf0, 0xde, 0xff, 0xf3, 0xbd,
+ 0x29, 0x9d, 0xb1, 0xf6, 0x50, 0x07, 0x55, 0xf8, 0x1e, 0xe2, 0xfe, 0x19, 0xfc,
+ 0xc5, 0xde, 0xdc, 0x0d, 0xfb, 0x17, 0x13, 0xf6, 0xf3, 0xf4, 0xfe, 0xe8, 0x0e,
+ 0xc7, 0xee, 0xb8, 0xd1, 0x5a, 0xd4, 0x1a, 0xbe, 0xe9, 0x1e, 0xb2, 0x15, 0xa6,
+ 0xc0, 0x06, 0xd4, 0x0f, 0xcd, 0xec, 0x0d, 0xd9, 0x03, 0xd9, 0xc9, 0xd2, 0x05,
+ 0xdf, 0x23, 0xd2, 0xbe, 0x66, 0xec, 0xf7, 0xbf, 0x02, 0xd8, 0xdc, 0x60, 0xf3,
+ 0x27, 0x28, 0xe5, 0xf7, 0xfa, 0xca, 0xbe, 0x2f, 0x0d, 0xcc, 0xd8, 0x0a, 0xff,
+ 0x18, 0x11, 0xfa, 0x01, 0xe9, 0x2e, 0xd6, 0x03, 0x4b, 0xe4, 0x20, 0x0c, 0xe3,
+ 0xca, 0xb2, 0x12, 0x34, 0x13, 0x42, 0x49, 0x0e, 0xd3, 0xc5, 0xee, 0xfe, 0x16,
+ 0x09, 0x03, 0x39, 0x1d, 0xcf, 0xcc, 0xff, 0x0b, 0xb9, 0xf8, 0x10, 0xf4, 0x34,
+ 0xd7, 0xe5, 0x05, 0x06, 0xd7, 0x02, 0xd0, 0xe7, 0xe0, 0xb6, 0xc2, 0xbc, 0xca,
+ 0xd3, 0xcd, 0x1a, 0xdc, 0xeb, 0x28, 0x2c, 0x1a, 0x07, 0x16, 0x86, 0xd9, 0x01,
+ 0x02, 0xeb, 0xc1, 0xcc, 0x58, 0xd1, 0x17, 0x06, 0xe0, 0x6d, 0xdd, 0x05, 0x19,
+ 0x2e, 0x04, 0x0d, 0x3d, 0xe6, 0xd9, 0xfe, 0x02, 0x0f, 0xf0, 0x10, 0xfb, 0xff,
+ 0x13, 0xc1, 0xe7, 0xe8, 0x01, 0xc0, 0xfa, 0x01, 0xed, 0x34, 0x16, 0xf2, 0xe1,
+ 0xea, 0x03, 0x14, 0xe4, 0xed, 0x25, 0x12, 0x11, 0xee, 0x01, 0x18, 0x0d, 0xdd,
+ 0xfe, 0xb7, 0x1c, 0x04, 0x14, 0xfc, 0x00, 0xcd, 0x24, 0x08, 0x0e, 0xfc, 0x0b,
+ 0xdc, 0x23, 0xf9, 0xba, 0x5b, 0x31, 0x28, 0xc0, 0x1b, 0xdd, 0x31, 0x20, 0x09,
+ 0xea, 0xf5, 0x7e, 0xca, 0xcb, 0x0d, 0xb8, 0xf5, 0x09, 0xf8, 0xad, 0xec, 0x0f,
+ 0xd3, 0xfd, 0x0d, 0xe7, 0xc7, 0x82, 0xe6, 0xd9, 0x03, 0x05, 0x26, 0xe0, 0xe0,
+ 0xde, 0xfd, 0xde, 0x05, 0x81, 0xea, 0xd9, 0xfc, 0x0e, 0xeb, 0xcd, 0x12, 0xf4,
+ 0xc1, 0x0a, 0xdd, 0xdc, 0xea, 0xef, 0xdb, 0xe2, 0x07, 0xe8, 0xe4, 0xaa, 0xd4,
+ 0x2b, 0xb1, 0xce, 0x04, 0xfd, 0xf3, 0xe7, 0xd6, 0x4e, 0x83, 0xd1, 0x89, 0xa6,
+ 0x2f, 0x00, 0x06, 0xc9, 0x36, 0x1f, 0x35, 0x28, 0xee, 0xdf, 0x1a, 0x11, 0x2e,
+ 0xb4, 0xc7, 0x23, 0x37, 0xf9, 0x2f, 0x0d, 0xdb, 0xe8, 0x11, 0x3a, 0xc2, 0x91,
+ 0x48, 0x34, 0x38, 0x13, 0x07, 0xe8, 0xa5, 0xcf, 0x27, 0x52, 0x8d, 0x0a, 0x04,
+ 0x3a, 0x17, 0x3d, 0x5c, 0xf6, 0xff, 0xe0, 0xd9, 0x4c, 0x20, 0x05, 0xb0, 0xe9,
+ 0xc6, 0x2b, 0x0c, 0xd7, 0x1d, 0xec, 0xb5, 0x7a, 0xd0, 0xa0, 0xd4, 0x49, 0x34,
+ 0x3d, 0x1b, 0x6e, 0x5f, 0x63, 0xff, 0xe3, 0x11, 0xa6, 0xff, 0x3e, 0x99, 0xcb,
+ 0xff, 0x88, 0xa1, 0x3b, 0xe1, 0xca, 0xa6, 0x2c, 0x3f, 0x3d, 0xf3, 0xb4, 0xb5,
+ 0x32, 0x53, 0xb2, 0xf2, 0x2a, 0x39, 0x11, 0xdc, 0x32, 0xdd, 0x5c, 0x60, 0x10,
+ 0xfe, 0xdb, 0x01, 0x18, 0xbf, 0x94, 0x34, 0xb2, 0xaf, 0xa2, 0xf4, 0x05, 0x2e,
+ 0x19, 0x09, 0xc8, 0x3f, 0x01, 0xfa, 0xfa, 0xe1, 0x17, 0x0f, 0x3c, 0xc6, 0xe6,
+ 0xf5, 0xb7, 0xf8, 0xe7, 0xed, 0x0d, 0xf5, 0xec, 0x1c, 0x27, 0xf6, 0x19, 0xec,
+ 0xd3, 0xc5, 0xc6, 0x9a, 0x11, 0x03, 0x58, 0x08, 0x09, 0x54, 0xd9, 0x36, 0xb7,
+ 0x26, 0xe7, 0x41, 0xf9, 0xfe, 0xf9, 0x20, 0x3e, 0x33, 0xb1, 0x01, 0xd2, 0x0f,
+ 0xf8, 0x36, 0x27, 0xbd, 0xe8, 0x06, 0x3b, 0x24, 0xf8, 0xf1, 0xa7, 0x52, 0x2b,
+ 0x25, 0xe7, 0x49, 0x2b, 0x01, 0xcf, 0xd9, 0x1b, 0x1b, 0xa1, 0xf1, 0x41, 0x24,
+ 0xcc, 0xcf, 0xaf, 0x4d, 0xcc, 0x58, 0x04, 0xd3, 0xbf, 0xde, 0x13, 0xca, 0x41,
+ 0x06, 0xfb, 0x33, 0xd7, 0xd3, 0xdc, 0xe2, 0x00, 0x12, 0xbb, 0xbd, 0xd9, 0x5a,
+ 0xf0, 0xcf, 0xf6, 0x12, 0x28, 0x02, 0x13, 0xd3, 0x9e, 0xff, 0xf4, 0x7f, 0x0c,
+ 0xf1, 0xb5, 0x09, 0xd4, 0x10, 0x8c, 0xff, 0x12, 0x23, 0x4a, 0x9f, 0xae, 0xed,
+ 0x17, 0xec, 0xd4, 0xf2, 0xd5, 0xa6, 0x2b, 0xe8, 0xcb, 0xde, 0x4d, 0xec, 0xf9,
+ 0xae, 0xaf, 0x0f, 0xa6, 0xcf, 0x08, 0x96, 0xd1, 0xb9, 0xa5, 0x1b, 0x1f, 0xf2,
+ 0xe6, 0x36, 0xf5, 0x97, 0xfc, 0x19, 0x34, 0xe0, 0xeb, 0x02, 0x40, 0xde, 0xf5,
+ 0x2d, 0xb7, 0xce, 0xae, 0xb9, 0x1a, 0x05, 0x5d, 0x64, 0xdb, 0xf2, 0x67, 0x27,
+ 0xf6, 0x1f, 0xa5, 0xb9, 0xe4, 0xf3, 0xc6, 0x6b, 0x8d, 0x12, 0xf6, 0x48, 0xed,
+ 0xf4, 0xfe, 0xc7, 0x32, 0xe4, 0x96, 0x27, 0xde, 0xcc, 0x44, 0x16, 0xe7, 0xeb,
+ 0xef, 0xbb, 0x23, 0x4f, 0x36, 0x0b, 0xf4, 0xbb, 0xcb, 0x05, 0xdf, 0x0f, 0x24,
+ 0xc1, 0x3c, 0xc8, 0xb4, 0xb9, 0xcf, 0xf5, 0x36, 0xa9, 0x05, 0x51, 0x29, 0xef,
+ 0xc9, 0x15, 0xdc, 0x99, 0xe0, 0xbf, 0xf1, 0x21, 0x3f, 0xfb, 0xe0, 0xfe, 0x3e,
+ 0x31, 0xf2, 0xef, 0xcd, 0xc7, 0xa6, 0xc3, 0xfa, 0xce, 0x2d, 0xae, 0xcd, 0xe9,
+ 0xce, 0x15, 0x1b, 0x2b, 0x29, 0xbc, 0xf1, 0xfa, 0xe6, 0x0b, 0x3e, 0xc8, 0x27,
+ 0x2c, 0xe7, 0xc0, 0xe1, 0x2c, 0x5b, 0x59, 0x0f, 0xca, 0xca, 0x23, 0x9b, 0xc2,
+ 0x34, 0x6c, 0x12, 0x0c, 0xc1, 0xe7, 0xf4, 0x27, 0x0c, 0x02, 0xbb, 0xf8, 0x06,
+ 0xda, 0xe5, 0xd3, 0xe6, 0xb5, 0x4a, 0x2e, 0x18, 0xf9, 0xea, 0x20, 0x22, 0x33,
+ 0xdd, 0xec, 0xdc, 0xd2, 0x04, 0xd7, 0xed, 0xf0, 0xbb, 0x9e, 0xbc, 0x0d, 0xea,
+ 0xe5, 0xc9, 0xcd, 0xec, 0x1e, 0x99, 0xa0, 0xe0, 0xfd, 0x1b, 0xa4, 0x3a, 0xfe,
+ 0xd7, 0xea, 0xa6, 0x3c, 0x8f, 0x1b, 0x18, 0x42, 0xf8, 0xf8, 0x05, 0x25, 0x52,
+ 0x2b, 0x06, 0xe8, 0x69, 0xf5, 0xc4, 0xd8, 0x0e, 0x05, 0x03, 0xf6, 0x58, 0x40,
+ 0xd6, 0x46, 0x02, 0x5d, 0x81, 0xdb, 0x99, 0xf2, 0xd2, 0xd7, 0xd1, 0x0b, 0x0d,
+ 0xc5, 0xc6, 0x05, 0x0b, 0x52, 0xfe, 0xb9, 0x1d, 0x28, 0xbe, 0x33, 0x36, 0xff,
+ 0xf5, 0xab, 0x53, 0xed, 0x62, 0xfd, 0xb1, 0x54, 0x26, 0xf5, 0x32, 0xd0, 0xba,
+ 0x02, 0xfa, 0x96, 0x37, 0x03, 0xcf, 0x19, 0xa7, 0x16, 0x3c, 0xe3, 0x8e, 0x8f,
+ 0xe4, 0xf4, 0xba, 0xaf, 0x95, 0xed, 0x29, 0xbb, 0xb7, 0x3d, 0x29, 0xfa, 0xba,
+ 0x0a, 0xf8, 0x24, 0x02, 0x43, 0xb6, 0x38, 0xd9, 0x22, 0x0c, 0x23, 0x45, 0xf4,
+ 0x0b, 0x04, 0x3d, 0x13, 0xfb, 0x42, 0x59, 0xd7, 0xd4, 0x59, 0x0c, 0xe4, 0x49,
+ 0x34, 0xae, 0x35, 0x28, 0xb7, 0xb7, 0x43, 0xd8, 0x1a, 0x83, 0x38, 0x35, 0xf9,
+ 0x48, 0x3d, 0xc7, 0x54, 0x66, 0x0c, 0xc9, 0xb5, 0xae, 0xe9, 0xb9, 0xe7, 0x2c,
+ 0x3e, 0xdf, 0xef, 0xde, 0x93, 0xa7, 0xf7, 0xdb, 0x44, 0xad, 0xfa, 0x04, 0xfc,
+ 0x1d, 0x18, 0x24, 0x1f, 0xb9, 0x01, 0xb2, 0xe8, 0xe2, 0x9c, 0xd3, 0xb0, 0xe2,
+ 0x03, 0x35, 0xe4, 0x3d, 0xe5, 0x1e, 0x2c, 0xad, 0x2e, 0x1e, 0xba, 0xb1, 0x0d,
+ 0xa6, 0xe9, 0x0e, 0xe9, 0x06, 0x85, 0xfa, 0x11, 0x32, 0xeb, 0x18, 0x47, 0xdf,
+ 0x98, 0x29, 0x22, 0xcb, 0x05, 0xdb, 0xe4, 0x1f, 0xf5, 0x3c, 0x6c, 0xf2, 0x14,
+ 0x18, 0x1b, 0x5a, 0xe8, 0xd8, 0xc9, 0xf6, 0xeb, 0x1b, 0xc3, 0x07, 0xd6, 0xac,
+ 0xb9, 0x11, 0xc4, 0x20, 0xd4, 0x1a, 0x28, 0xc2, 0x25, 0x53, 0x37, 0x10, 0xdf,
+ 0x08, 0xf3, 0x1a, 0xcd, 0x01, 0x38, 0x50, 0x47, 0xe0, 0x17, 0xc8, 0xd5, 0xef,
+ 0x9c, 0x3c, 0xf4, 0x17, 0x8d, 0xb8, 0x04, 0xa8, 0xea, 0x29, 0xf5, 0x5c, 0xe2,
+ 0x20, 0xf2, 0x23, 0x7f, 0x36, 0x13, 0xb1, 0xe9, 0x32, 0x05, 0xca, 0xf4, 0x02,
+ 0xfe, 0x11, 0x0d, 0xf1, 0x31, 0x9c, 0xdb, 0x13, 0x4d, 0x1a, 0x01, 0xf2, 0x18,
+ 0xf9, 0xbe, 0xcf, 0x61, 0xf2, 0x3f, 0x3f, 0x29, 0x0d, 0x28, 0x15, 0x92, 0x0e,
+ 0xea, 0xe4, 0x18, 0xd5, 0x15, 0xc7, 0x8d, 0x07, 0x3e, 0xb4, 0xc5, 0xdb, 0x03,
+ 0x00, 0xc9, 0xbd, 0x0b, 0xaf, 0xde, 0xf7, 0x0c, 0xdd, 0x09, 0x0a, 0xb6, 0xf6,
+ 0x1c, 0xc8, 0x11, 0x1e, 0xf9, 0xd4, 0xbd, 0xfe, 0xe7, 0x27, 0xe4, 0xe4, 0xf0,
+ 0xde, 0x2a, 0xcd, 0xdd, 0x0d, 0xd7, 0x10, 0xd3, 0x0c, 0x0b, 0xe6, 0x1b, 0xce,
+ 0xf0, 0x0a, 0x2a, 0xe7, 0x7a, 0xeb, 0xea, 0x18, 0xe7, 0x0f, 0xcd, 0xec, 0xba,
+ 0x14, 0xb7, 0xe4, 0x23, 0x0b, 0x1c, 0x40, 0x85, 0xdd, 0x9a, 0xe6, 0xd8, 0xbc,
+ 0x0c, 0xed, 0x20, 0xff, 0xfd, 0x9f, 0x37, 0x09, 0x41, 0x39, 0xed, 0xab, 0x1e,
+ 0x0f, 0xfb, 0xe8, 0x33, 0xc7, 0xc8, 0x04, 0xd0, 0x00, 0x04, 0xff, 0xfd, 0x07,
+ 0x16, 0x11, 0xdd, 0x05, 0x0d, 0xe3, 0xca, 0xe1, 0x06, 0x09, 0xda, 0x28, 0x06,
+ 0xfe, 0xeb, 0x31, 0x51, 0xc6, 0xf4, 0x0e, 0xfa, 0xce, 0x07, 0xfe, 0xe0, 0x30,
+ 0x42, 0xea, 0x18, 0xf4, 0xe2, 0xd1, 0xf2, 0xce, 0x39, 0xa3, 0xc2, 0x0f, 0x9e,
+ 0x37, 0xb0, 0x81, 0xe8, 0x1e, 0x04, 0xce, 0x1e, 0xc3, 0x45, 0x11, 0x54, 0x08,
+ 0xcf, 0xe3, 0xf7, 0xb3, 0x44, 0x1c, 0xc3, 0xf2, 0x23, 0x11, 0xfb, 0x26, 0x0c,
+ 0xf4, 0x00, 0xef, 0xf3, 0x00, 0xb9, 0xf4, 0xed, 0x17, 0xd7, 0x1c, 0xd1, 0xe7,
+ 0xed, 0xbf, 0x3f, 0xe3, 0xca, 0x23, 0x15, 0x0d, 0x08, 0xa7, 0xf8, 0x33, 0xf3,
+ 0x41, 0x0a, 0xbc, 0x05, 0xd9, 0x35, 0xd8, 0xba, 0xda, 0xea, 0xfe, 0xd3, 0x0c,
+ 0x1a, 0xd8, 0xb9, 0x24, 0xfc, 0x0c, 0x11, 0x0d, 0x24, 0xdb, 0x13, 0x4b, 0x0d,
+ 0xc3, 0xd9, 0xf3, 0xc9, 0x11, 0xeb, 0x10, 0xd2, 0xdb, 0xe1, 0xc7, 0x63, 0x16,
+ 0x08, 0x0a, 0xd0, 0xf3, 0x06, 0xb6, 0x22, 0xf2, 0x05, 0xa3, 0xdb, 0xfc, 0xfb,
+ 0x08, 0xff, 0xd3, 0xf8, 0xc8, 0x0f, 0x20, 0xc2, 0xed, 0xec, 0x1c, 0xdf, 0x29,
+ 0xdf, 0x12, 0xdf, 0xd6, 0xec, 0x56, 0xc7, 0xf3, 0x11, 0xae, 0xf6, 0xf6, 0x1a,
+ 0xd5, 0xcd, 0xdd, 0x04, 0xdb, 0x0d, 0xde, 0xd5, 0xf7, 0x4c, 0xd7, 0xec, 0x0b,
+ 0x25, 0xf9, 0x11, 0xfa, 0x1d, 0xf7, 0x3e, 0xfb, 0xc5, 0xdd, 0x23, 0xb2, 0x26,
+ 0xc6, 0xe6, 0x14, 0xd0, 0x1d, 0x25, 0x14, 0x2f, 0x21, 0xc0, 0x26, 0xe6, 0xce,
+ 0x1a, 0xd6, 0xf8, 0x00, 0x02, 0x08, 0x0d, 0xee, 0x17, 0xff, 0xbf, 0xeb, 0x3b,
+ 0xf5, 0x1c, 0xe0, 0xe6, 0x2d, 0x05, 0xb6, 0xe2, 0xef, 0x3a, 0xfa, 0x29, 0x70,
+ 0xda, 0xc2, 0xc1, 0xd5, 0x0a, 0x43, 0x15, 0xfe, 0xeb, 0x0c, 0xc5, 0xca, 0x2d,
+ 0xf8, 0x05, 0xf3, 0xf2, 0xfb, 0x3d, 0xf9, 0x35, 0x03, 0xee, 0xb6, 0x23, 0xd5,
+ 0xbb, 0xb8, 0xfc, 0xfc, 0xbd, 0xcd, 0x10, 0xb4, 0x0c, 0xfe, 0x1b, 0xf8, 0x12,
+ 0x12, 0xad, 0xfc, 0xa1, 0xbd, 0x16, 0x39, 0xee, 0xd5, 0xd2, 0xf7, 0xef, 0xd9,
+ 0xd3, 0xfd, 0x38, 0xf5, 0xde, 0x0f, 0x4c, 0xfd, 0x38, 0x38, 0xdb, 0x1a, 0x2d,
+ 0xce, 0xff, 0xed, 0x20, 0xe9, 0x1f, 0x23, 0xd3, 0xf8, 0x0c, 0x02, 0xb8, 0xc2,
+ 0xe6, 0x30, 0x2c, 0x0d, 0xe3, 0x01, 0x0c, 0x23, 0x3a, 0xe4, 0x07, 0x17, 0x31,
+ 0xe5, 0x17, 0xe8, 0x04, 0xe2, 0x9d, 0xd2, 0xe7, 0x27, 0xf0, 0x11, 0xdd, 0xe5,
+ 0xda, 0xc4, 0xe9, 0x17, 0xf1, 0x05, 0x17, 0x16, 0x32, 0xb1, 0x2c, 0x1e, 0x18,
+ 0xbf, 0xf6, 0xe4, 0x22, 0x08, 0xdc, 0x01, 0x1f, 0x7f, 0x02, 0xf2, 0x07, 0xd0,
+ 0xd7, 0x24, 0x06, 0xff, 0xf2, 0x37, 0x97, 0xe5, 0x0c, 0x0b, 0xf3, 0xcb, 0xd3,
+ 0xf3, 0xdb, 0x1c, 0x08, 0xe6, 0xfd, 0xda, 0x11, 0xda, 0x18, 0xe3, 0xd8, 0xfb,
+ 0xfa, 0x13, 0x09, 0x13, 0xfb, 0xe4, 0x12, 0x0a, 0xe0, 0xf7, 0xd3, 0xd3, 0x23,
+ 0xb8, 0x10, 0xa3, 0xe6, 0xc0, 0xe6, 0xde, 0xed, 0xdf, 0x05, 0xca, 0x16, 0xd2,
+ 0xe1, 0xfe, 0xd2, 0x30, 0xd7, 0x1b, 0xb6, 0x1a, 0x2a, 0xf5, 0xdc, 0x41, 0xd7,
+ 0x8a, 0x17, 0x2b, 0xd9, 0xec, 0xba, 0x1d, 0xa5, 0x06, 0x9b, 0x2c, 0x21, 0x18,
+ 0x9b, 0x1d, 0x1c, 0xc0, 0xe3, 0xce, 0x27, 0x16, 0xa4, 0x4a, 0xe3, 0x97, 0x9b,
+ 0x0b, 0xf8, 0x16, 0x3b, 0x26, 0x0a, 0xe6, 0xf5, 0x3d, 0x73, 0x2d, 0xfe, 0x00,
+ 0xc7, 0x41, 0xe6, 0xf7, 0x08, 0x03, 0x07, 0x28, 0x0d, 0xb5, 0xa9, 0xb0, 0xac,
+ 0x3b, 0xac, 0xd0, 0x32, 0xc8, 0xf9, 0x29, 0xf2, 0x07, 0xd3, 0xc4, 0xf3, 0xf3,
+ 0xfc, 0x20, 0xea, 0x12, 0xae, 0x84, 0xb1, 0x38, 0xe0, 0x66, 0xb4, 0xc5, 0xc0,
+ 0xf7, 0xc8, 0xb1, 0x2b, 0xb5, 0xb6, 0xf2, 0x09, 0x04, 0x2d, 0xdd, 0x81, 0xc4,
+ 0x13, 0xda, 0xf4, 0x06, 0xd5, 0x24, 0x1a, 0x20, 0x07, 0xd6, 0xea, 0xc0, 0xc2,
+ 0x06, 0xbb, 0xb1, 0xee, 0xdf, 0xff, 0x23, 0xcf, 0xb4, 0xb2, 0xfe, 0xf5, 0x13,
+ 0x1b, 0xea, 0x23, 0xc5, 0x05, 0x18, 0xa3, 0x00, 0x13, 0xe7, 0x33, 0x03, 0xff,
+ 0xa7, 0xf4, 0x16, 0x37, 0x68, 0x06, 0xa3, 0xec, 0x0f, 0x1c, 0x53, 0x28, 0xbc,
+ 0xd2, 0x0f, 0x28, 0x01, 0xe1, 0xdf, 0x7f, 0xb6, 0x26, 0xaf, 0x09, 0xff, 0xe6,
+ 0xcc, 0xa6, 0xef, 0xfb, 0x23, 0xc4, 0x4d, 0x16, 0xc0, 0x27, 0xdf, 0x93, 0x15,
+ 0xab, 0x9d, 0xcc, 0xcb, 0x1d, 0xb4, 0xe3, 0xfc, 0xf1, 0xdd, 0x10, 0xce, 0x9e,
+ 0x12, 0xf5, 0xdc, 0x38, 0xf2, 0x20, 0x4d, 0xac, 0xea, 0xe0, 0x24, 0xaf, 0x31,
+ 0xe6, 0xb1, 0x25, 0xc7, 0x1d, 0xf8, 0x04, 0xf9, 0x2c, 0xf9, 0xbd, 0xc8, 0xc0,
+ 0x53, 0x4c, 0xdf, 0x60, 0x05, 0xf3, 0xf3, 0x15, 0xd4, 0x12, 0xbc, 0xdc, 0x35,
+ 0x00, 0x08, 0xee, 0xb4, 0x20, 0xc2, 0x43, 0xe6, 0x11, 0xf9, 0x24, 0xcc, 0xdd,
+ 0x1c, 0x19, 0xef, 0x9e, 0x04, 0xfe, 0xf6, 0xc1, 0xd1, 0xf3, 0xf9, 0xe3, 0xf8,
+ 0x19, 0x39, 0xea, 0x38, 0x07, 0x28, 0x1a, 0x20, 0xca, 0xcf, 0xe8, 0xc2, 0xb4,
+ 0xe3, 0x33, 0xc8, 0xdd, 0xfb, 0x0a, 0x10, 0x33, 0x0c, 0xc8, 0x51, 0xd7, 0x11,
+ 0xcd, 0xc7, 0x0a, 0xf7, 0x3f, 0x26, 0x03, 0xf3, 0xec, 0x10, 0x16, 0xce, 0xee,
+ 0xf0, 0x03, 0x1f, 0xee, 0xe7, 0x0e, 0x43, 0xe9, 0xfb, 0xfe, 0xef, 0xc0, 0xc7,
+ 0x04, 0x06, 0x11, 0x18, 0xc4, 0xbd, 0x09, 0x06, 0xf4, 0x11, 0xdd, 0xde, 0x32,
+ 0x95, 0xa5, 0x07, 0x11, 0xe1, 0x03, 0x39, 0xea, 0x27, 0xef, 0xcf, 0x00, 0xc8,
+ 0xf0, 0x12, 0xf1, 0xf1, 0xe1, 0x2f, 0xbd, 0x59, 0x13, 0xc2, 0x0a, 0x24, 0xa8,
+ 0x36, 0x08, 0x3a, 0xde, 0xbb, 0xea, 0x24, 0x46, 0xfc, 0xd5, 0x12, 0xdb, 0xdd,
+ 0xe6, 0x21, 0xea, 0x00, 0xac, 0x25, 0x07, 0xfc, 0x0f, 0xec, 0xbe, 0xf0, 0x22,
+ 0xec, 0x0a, 0x3b, 0x1c, 0x30, 0x02, 0x2f, 0x4d, 0x19, 0xf6, 0xe8, 0x25, 0x24,
+ 0xe7, 0xc0, 0x1c, 0xa5, 0x27, 0x96, 0x1f, 0xd7, 0xf9, 0x2d, 0x16, 0x41, 0x22,
+ 0xe5, 0xdd, 0xf0, 0xec, 0x27, 0x09, 0x20, 0xf6, 0x14, 0x38, 0xdf, 0xc5, 0xf7,
+ 0x19, 0x25, 0x14, 0xd7, 0x28, 0xbf, 0xd5, 0xcb, 0x05, 0x50, 0xff, 0xed, 0x13,
+ 0xfe, 0xb7, 0xc9, 0xbc, 0x25, 0xd1, 0xeb, 0xd1, 0x55, 0xba, 0xef, 0x15, 0x51,
+ 0x03, 0xe7, 0xea, 0xb7, 0x09, 0xe9, 0x22, 0x37, 0xe2, 0x39, 0xd2, 0xe8, 0xe7,
+ 0x15, 0xac, 0x2f, 0xfa, 0x01, 0xdb, 0x49, 0xe4, 0xea, 0xda, 0xc9, 0xce, 0xfb,
+ 0xe1, 0x10, 0xe9, 0x14, 0xc3, 0x13, 0xd4, 0x46, 0xaa, 0x65, 0xe7, 0xb5, 0xf1,
+ 0xef, 0xfa, 0x37, 0x10, 0x02, 0xba, 0xee, 0xd4, 0xed, 0x33, 0x81, 0xcd, 0xb6,
+ 0x47, 0x0c, 0x10, 0xd2, 0x54, 0xe7, 0x0e, 0xe0, 0xe4, 0xf5, 0x02, 0x00, 0x0f,
+ 0xd7, 0xb5, 0x14, 0xff, 0xef, 0xdf, 0xfd, 0x03, 0xe9, 0x3d, 0xe1, 0xd3, 0x7f,
+ 0xfc, 0xeb, 0xf8, 0x9a, 0xe3, 0xf0, 0x2a, 0xef, 0xf2, 0xfe, 0x43, 0xde, 0xec,
+ 0xfb, 0xd2, 0xff, 0xe4, 0x1c, 0x04, 0xe6, 0x0a, 0x16, 0xec, 0xc7, 0x9d, 0xfc,
+ 0x0e, 0x2c, 0xcd, 0xc3, 0xed, 0xf1, 0x15, 0xf5, 0x05, 0xef, 0x27, 0x21, 0xef,
+ 0xda, 0xfc, 0x1d, 0x26, 0x28, 0x15, 0xff, 0x0d, 0xdf, 0x1e, 0x06, 0xe2, 0xba,
+ 0x28, 0xec, 0x04, 0xee, 0x04, 0x21, 0xff, 0x01, 0x1d, 0x15, 0xd3, 0x26, 0xf5,
+ 0xdf, 0x37, 0x06, 0xf2, 0x1a, 0xe7, 0x45, 0xf9, 0xfa, 0x2a, 0x25, 0xd8, 0x12,
+ 0xd3, 0x07, 0x1c, 0xe1, 0xfb, 0x00, 0xee, 0xdd, 0x27, 0x1f, 0xd9, 0xed, 0x14,
+ 0xf5, 0x1a, 0xcd, 0x3c, 0xfa, 0x1b, 0x00, 0xe2, 0xf4, 0xe2, 0x10, 0xdd, 0x17,
+ 0xd3, 0x15, 0xcd, 0x3d, 0x5c, 0xc4, 0x04, 0x03, 0xde, 0xed, 0xef, 0xeb, 0xe4,
+ 0xf7, 0x15, 0xbf, 0xe8, 0xee, 0xec, 0x05, 0x0a, 0xe1, 0x24, 0x26, 0xde, 0x09,
+ 0xfb, 0x2a, 0xf0, 0x29, 0xde, 0x09, 0xea, 0xf5, 0xdc, 0xf0, 0xfd, 0xfd, 0xbd,
+ 0xfa, 0xe1, 0x30, 0xc5, 0x08, 0xc6, 0xf5, 0xca, 0xfd, 0xea, 0xd4, 0xde, 0xe7,
+ 0xe7, 0x0a, 0xdf, 0xf1, 0xe4, 0xe9, 0x01, 0x04, 0xf9, 0xd8, 0x3c, 0xe6, 0xe3,
+ 0xeb, 0xe4, 0x22, 0xec, 0xdf, 0x15, 0x24, 0x07, 0x23, 0xff, 0x18, 0xf7, 0x0a,
+ 0xb7, 0xe5, 0x28, 0xe6, 0x0f, 0x0b, 0x06, 0xf8, 0xdc, 0x00, 0x20, 0xf4, 0xcb,
+ 0x06, 0xf6, 0xfe, 0xfb, 0xd3, 0xc2, 0x0b, 0x47, 0x05, 0x0c, 0x22, 0x07, 0x06,
+ 0xec, 0x1f, 0xe1, 0xfc, 0x08, 0xdf, 0xb6, 0xf1, 0x0b, 0x05, 0xf6, 0x38, 0x00,
+ 0xeb, 0x07, 0xcd, 0x19, 0x29, 0xda, 0xed, 0xfa, 0xfe, 0x39, 0xa8, 0xc1, 0x19,
+ 0xd9, 0xdf, 0x23, 0xec, 0x2a, 0xfc, 0x0a, 0x00, 0xc1, 0x26, 0xb7, 0xfe, 0xbd,
+ 0xf6, 0x48, 0x0a, 0xd6, 0xe3, 0xd5, 0xe0, 0x1a, 0xf3, 0x0e, 0x00, 0x19, 0x22,
+ 0xf8, 0xcf, 0x22, 0x04, 0xbf, 0xeb, 0x08, 0xee, 0xbb, 0xfd, 0xf6, 0xd9, 0x30,
+ 0x26, 0xd0, 0xe7, 0x01, 0x07, 0xee, 0x1f, 0x07, 0xf8, 0xb1, 0x41, 0x00, 0x17,
+ 0xb9, 0xd2, 0xeb, 0xce, 0x0b, 0xea, 0xe5, 0xf0, 0xd7, 0x1d, 0x10, 0xe8, 0x23,
+ 0x02, 0xdb, 0x25, 0x06, 0xdf, 0xe0, 0xf9, 0xec, 0xf1, 0xe1, 0xee, 0xfd, 0xea,
+ 0xde, 0xfe, 0x03, 0xd1, 0xe5, 0xd9, 0xfb, 0xed, 0x01, 0xe2, 0x1a, 0x02, 0x1a,
+ 0x31, 0xc8, 0x1b, 0x3c, 0xf5, 0xe2, 0xfd, 0x0d, 0x31, 0xec, 0x30, 0xb9, 0x3f,
+ 0xc8, 0xe7, 0x0a, 0x0f, 0xee, 0xea, 0xfd, 0xfd, 0x04, 0x01, 0x05, 0x27, 0xff,
+ 0xee, 0x00, 0xef, 0xd1, 0xc1, 0xde, 0x11, 0xf2, 0xe0, 0x0a, 0xbe, 0xed, 0x20,
+ 0x09, 0x08, 0xed, 0xd4, 0xc7, 0x08, 0x05, 0xcc, 0x00, 0xcf, 0xd3, 0x0d, 0x07,
+ 0x24, 0xc8, 0x0e, 0xe8, 0x4e, 0x41, 0xf1, 0xdf, 0xd8, 0xc5, 0x30, 0xfc, 0x12,
+ 0xf4, 0xfd, 0xdd, 0x23, 0x34, 0xf1, 0x18, 0xef, 0x20, 0x01, 0x01, 0x10, 0x04,
+ 0x03, 0x14, 0xf8, 0x0b, 0xcf, 0xfd, 0x35, 0xff, 0xf3, 0x0c, 0x0a, 0xc0, 0xb9,
+ 0xf9, 0x2d, 0x0f, 0xe0, 0x24, 0xef, 0x26, 0xae, 0xde, 0xdc, 0xf4, 0x1a, 0xe3,
+ 0x25, 0xfb, 0xd5, 0x1b, 0x22, 0xf7, 0x17, 0x1c, 0xb8, 0x40, 0xb7, 0xf0, 0xe1,
+ 0x09, 0x1c, 0xc3, 0xdf, 0xd1, 0xc9, 0xd6, 0xf2, 0xf6, 0x07, 0xd6, 0x0c, 0xd7,
+ 0xbb, 0xe5, 0xbd, 0xd6, 0xdf, 0xf9, 0x04, 0x17, 0xe2, 0xda, 0x1a, 0x45, 0x1c,
+ 0xd6, 0xe7, 0x0c, 0xdd, 0x14, 0x1a, 0xcf, 0x0f, 0xd1, 0xe3, 0xef, 0xd8, 0x27,
+ 0x16, 0xe3, 0xd1, 0xc9, 0x0e, 0xf9, 0xfb, 0xd9, 0x81, 0x13, 0xeb, 0x01, 0xe5,
+ 0x26, 0xee, 0x7f, 0xcf, 0xc3, 0xe0, 0xc1, 0x20, 0xd6, 0x01, 0xdf, 0x27, 0xfb,
+ 0xe9, 0x10, 0xb8, 0xfa, 0xda, 0x15, 0xb8, 0xe7, 0xc9, 0xeb, 0xbf, 0x03, 0xea,
+ 0xed, 0x11, 0xe5, 0x0f, 0xc5, 0xee, 0xe6, 0xa5, 0x03, 0x0a, 0x0e, 0x11, 0x24,
+ 0xdd, 0x11, 0xdc, 0x1c, 0xe1, 0xc5, 0x19, 0xf0, 0xd7, 0xdb, 0xdc, 0xc4, 0xec,
+ 0x10, 0x60, 0x3d, 0x25, 0x06, 0xf2, 0xee, 0x05, 0x23, 0xf3, 0xf4, 0xfb, 0xfb,
+ 0xb8, 0xfb, 0x02, 0xd3, 0x16, 0xae, 0xca, 0xfe, 0xa2, 0xfd, 0x16, 0xd2, 0xbe,
+ 0xec, 0xe6, 0xb0, 0xb9, 0xe5, 0x03, 0x07, 0x14, 0xa9, 0x25, 0xee, 0xc6, 0x1e,
+ 0xf5, 0xb1, 0xc5, 0xdb, 0xfb, 0xd5, 0x49, 0xda, 0x2e, 0xf1, 0xe7, 0x08, 0xe0,
+ 0xe4, 0xc2, 0xbf, 0xdd, 0x0a, 0xd5, 0xf1, 0xe3, 0xc1, 0x01, 0x42, 0xdc, 0xe4,
+ 0xfd, 0xfa, 0xd6, 0xd7, 0xcb, 0x37, 0xc3, 0xf1, 0xd8, 0x07, 0xbc, 0x21, 0xf8,
+ 0xc8, 0xc7, 0xf2, 0x38, 0xe6, 0xc4, 0xc3, 0x0a, 0xff, 0xb9, 0xf4, 0xc5, 0xda,
+ 0xc4, 0xf9, 0x3d, 0x00, 0x0d, 0x1c, 0x06, 0xfa, 0x35, 0x2e, 0xe8, 0xec, 0x05,
+ 0x04, 0x15, 0x26, 0xc0, 0xde, 0x23, 0xda, 0x23, 0xd7, 0x12, 0xa9, 0xf5, 0x36,
+ 0xfb, 0xc1, 0xe6, 0xaa, 0xf4, 0xfb, 0x1b, 0xd3, 0x1b, 0xea, 0xd0, 0xc7, 0x03,
+ 0xd4, 0x30, 0x0c, 0x0d, 0xed, 0x16, 0xf5, 0xd2, 0xc2, 0xf8, 0xe7, 0xd1, 0xa7,
+ 0xef, 0x07, 0xe4, 0xf5, 0x25, 0x2e, 0xd1, 0x58, 0xef, 0x15, 0xfe, 0x1d, 0xe7,
+ 0x14, 0xfe, 0x05, 0xda, 0xfc, 0x1a, 0x09, 0x95, 0xca, 0xe8, 0x0d, 0xce, 0x06,
+ 0x1a, 0x13, 0x1c, 0x05, 0x0c, 0x28, 0x02, 0x39, 0xe6, 0xc0, 0xe1, 0x02, 0xbf,
+ 0x36, 0x30, 0xf9, 0x1c, 0xc5, 0xa8, 0xff, 0xd0, 0x2d, 0xff, 0xf1, 0x0e, 0xf1,
+ 0x05, 0xfb, 0xd4, 0xf4, 0x24, 0x09, 0xec, 0x18, 0xf2, 0xfa, 0xe8, 0x11, 0xbb,
+ 0x41, 0xce, 0xbb, 0xd5, 0xf1, 0x01, 0x34, 0x16, 0xc3, 0xec, 0xfb, 0xbd, 0x61,
+ 0xd6, 0x20, 0xdb, 0xd9, 0xf9, 0xb1, 0xff, 0x03, 0x4a, 0x14, 0x31, 0xe8, 0xe5,
+ 0x14, 0xd0, 0xe6, 0xb3, 0x8c, 0x5e, 0xc3, 0x0e, 0xc4, 0xfd, 0x98, 0xf8, 0xfe,
+ 0x42, 0xa4, 0x1e, 0x16, 0xee, 0x15, 0xc9, 0xee, 0xe6, 0x31, 0x1e, 0xea, 0x53,
+ 0x2e, 0x81, 0x1b, 0xb6, 0xe6, 0x14, 0x28, 0xe4, 0x4f, 0x1f, 0x28, 0x11, 0xd6,
+ 0xd5, 0x5e, 0x39, 0x07, 0x1d, 0xdc, 0xb5, 0xea, 0xfe, 0x2b, 0x35, 0x54, 0xc3,
+ 0xba, 0x32, 0xec, 0xe9, 0xc3, 0x29, 0x13, 0xcc, 0xc4, 0xf8, 0x37, 0xbf, 0x85,
+ 0xb4, 0xcd, 0x23, 0xf4, 0xa4, 0xeb, 0xdc, 0x20, 0x48, 0x0b, 0xce, 0x03, 0x0d,
+ 0xf7, 0xdb, 0x93, 0x0d, 0xfd, 0xaf, 0x1c, 0x32, 0x24, 0x07, 0x0e, 0xb5, 0x3e,
+ 0x2a, 0xdc, 0x43, 0xe9, 0xe7, 0x1a, 0x1b, 0xe4, 0x28, 0x12, 0xf3, 0x28, 0xd1,
+ 0xc6, 0xfa, 0x18, 0xe8, 0x21, 0xef, 0x88, 0xea, 0xe8, 0xe2, 0x9b, 0xca, 0xdb,
+ 0x57, 0x0d, 0x07, 0x94, 0xf2, 0x2e, 0x9e, 0xda, 0xb6, 0x2c, 0x2d, 0xf6, 0xfa,
+ 0xba, 0x3f, 0xd9, 0x6c, 0x23, 0x06, 0x2d, 0xff, 0xfe, 0x27, 0x11, 0x1f, 0x13,
+ 0x1a, 0xd2, 0x1f, 0x99, 0xd9, 0xb0, 0xe7, 0xe4, 0xb2, 0x2c, 0xb0, 0xce, 0xcf,
+ 0x4a, 0x41, 0xbf, 0xb8, 0xd5, 0x93, 0xed, 0x55, 0xbe, 0x05, 0xed, 0xf1, 0x2b,
+ 0x27, 0x49, 0xcf, 0x05, 0x07, 0xd6, 0x21, 0x1b, 0xf3, 0xcc, 0x0c, 0xa9, 0x26,
+ 0x32, 0xd0, 0x1d, 0xc6, 0x18, 0x0c, 0x15, 0x08, 0xba, 0x19, 0xb9, 0xe7, 0xe4,
+ 0x42, 0x35, 0x11, 0xe2, 0xea, 0x05, 0xe9, 0x10, 0xb0, 0xd3, 0xe8, 0x25, 0x28,
+ 0xbf, 0xc5, 0xe9, 0x09, 0xd5, 0xed, 0x0d, 0x98, 0x22, 0xf0, 0x50, 0x0a, 0x26,
+ 0x33, 0x0e, 0xff, 0xca, 0xe0, 0x17, 0xd6, 0xe9, 0xf0, 0x1e, 0x02, 0x1d, 0xd1,
+ 0xfd, 0xe3, 0x1c, 0xfe, 0xe2, 0x42, 0xb2, 0x2f, 0x48, 0x07, 0xec, 0xb1, 0xb7,
+ 0x00, 0x88, 0x23, 0xd5, 0x21, 0xa2, 0x18, 0xd8, 0x81, 0xef, 0x0b, 0xf8, 0x01,
+ 0x25, 0x14, 0x3d, 0xc3, 0x00, 0x03, 0x0f, 0x42, 0xa1, 0x3a, 0xc3, 0x3b, 0xb8,
+ 0x4e, 0xdb, 0xf4, 0xf4, 0xfe, 0xea, 0x1b, 0x23, 0xc1, 0x23, 0x1a, 0x3b, 0xcc,
+ 0x22, 0x1d, 0x0c, 0x8c, 0xdd, 0xf5, 0xca, 0xed, 0xf8, 0xef, 0xf3, 0x1c, 0x2a,
+ 0xd3, 0xc0, 0xc9, 0xdc, 0xeb, 0x11, 0xeb, 0xe7, 0xc5, 0xcb, 0x02, 0xff, 0xfe,
+ 0xb9, 0xe3, 0xf3, 0x22, 0x4f, 0x10, 0xfb, 0x37, 0x0e, 0x2d, 0x1f, 0xc7, 0x1e,
+ 0xce, 0x1d, 0xfd, 0x12, 0x86, 0x39, 0xcd, 0xc5, 0x33, 0xce, 0xc3, 0x45, 0x11,
+ 0x24, 0x9f, 0x1b, 0xd0, 0x24, 0xf6, 0x22, 0xb7, 0x30, 0xc7, 0xb8, 0x2a, 0xef,
+ 0x02, 0x3d, 0x5c, 0x15, 0x60, 0xf2, 0xc6, 0xe3, 0xd5, 0x05, 0xc2, 0x0e, 0xe2,
+ 0xb2, 0xc6, 0x2e, 0xf4, 0xef, 0x0f, 0x98, 0xc4, 0xce, 0x1f, 0xe6, 0xd2, 0xaa,
+ 0xf2, 0x46, 0xc6, 0xe5, 0x62, 0x3f, 0xcc, 0x4f, 0xe9, 0xdf, 0x16, 0xed, 0x53,
+ 0xb6, 0xf3, 0xde, 0xc3, 0x89, 0x32, 0xc7, 0xe5, 0x04, 0x09, 0x2c, 0x07, 0xc0,
+ 0xe0, 0x4a, 0x31, 0x41, 0xdc, 0xb2, 0xbe, 0xc4, 0x3f, 0xf1, 0x09, 0xb0, 0x0f,
+ 0x42, 0x0c, 0x15, 0x26, 0xd6, 0xad, 0x29, 0xcc, 0x98, 0xb1, 0xe9, 0xd6, 0xf7,
+ 0xa8, 0xe4, 0xe4, 0x0a, 0xd2, 0x1c, 0xdf, 0xbe, 0xa9, 0xeb, 0x09, 0xdf, 0x2e,
+ 0x13, 0x31, 0x0a, 0x37, 0xad, 0x3c, 0xcb, 0xf3, 0x37, 0xe9, 0xe8, 0x3d, 0xae,
+ 0x14, 0xf2, 0xef, 0xe6, 0x18, 0x00, 0xc6, 0xc3, 0xe3, 0xf3, 0xcd, 0xb0, 0xee,
+ 0x28, 0x19, 0x4b, 0xb1, 0xd4, 0x2b, 0x0a, 0xe5, 0x05, 0x05, 0xee, 0xfb, 0xfa,
+ 0x23, 0xeb, 0x01, 0xf1, 0xe5, 0x1c, 0xe5, 0xd1, 0xb9, 0xeb, 0x18, 0xe1, 0x02,
+ 0xe6, 0x24, 0x24, 0xd6, 0xf3, 0x0b, 0x27, 0xfa, 0xe6, 0xce, 0xfe, 0xe9, 0xf3,
+ 0xe3, 0x06, 0x0d, 0x0d, 0xf4, 0x3f, 0xf6, 0xdc, 0x27, 0xd2, 0xf7, 0xd8, 0x01,
+ 0xe9, 0x05, 0x15, 0xf6, 0x17, 0xfd, 0x1d, 0x08, 0xcd, 0xf5, 0xfb, 0x06, 0x0d,
+ 0x08, 0xe0, 0x37, 0x20, 0x0b, 0x16, 0xfc, 0x29, 0x09, 0xdc, 0x16, 0xdc, 0x14,
+ 0x1a, 0x51, 0xc2, 0x58, 0x05, 0x16, 0xf9, 0x11, 0xee, 0x14, 0xd7, 0x22, 0x19,
+ 0xd3, 0xfc, 0xf3, 0x00, 0x44, 0xe5, 0xff, 0xea, 0xe5, 0x13, 0xd3, 0xee, 0xe9,
+ 0x0e, 0xf6, 0xdc, 0x49, 0xe1, 0xf9, 0x12, 0xe3, 0xcb, 0x04, 0xe0, 0xe1, 0x15,
+ 0xe9, 0xeb, 0x08, 0x01, 0x02, 0xda, 0x04, 0xf5, 0x13, 0xfd, 0xec, 0x1c, 0xdb,
+ 0x16, 0xed, 0xf8, 0xcc, 0x0f, 0xd2, 0x3d, 0x0e, 0xd6, 0x1d, 0x1b, 0x13, 0x19,
+ 0x13, 0x03, 0xf3, 0x1c, 0x24, 0x25, 0x4d, 0xc2, 0xc8, 0x00, 0xbf, 0x27, 0x18,
+ 0x15, 0x28, 0x02, 0x1a, 0x06, 0xe9, 0xde, 0x0e, 0x2a, 0xfe, 0x03, 0x10, 0x36,
+ 0xe4, 0xd6, 0xec, 0x0f, 0x0e, 0xf7, 0xd1, 0xe5, 0x12, 0xf5, 0xcf, 0x46, 0x12,
+ 0xd2, 0xd6, 0x10, 0x01, 0x7f, 0x0b, 0xd1, 0x22, 0xd6, 0xf7, 0xe4, 0xdf, 0xe6,
+ 0xf4, 0xda, 0xd5, 0xf3, 0x2f, 0xe2, 0x18, 0x09, 0xd2, 0xdb, 0xe2, 0x1c, 0xf5,
+ 0xd7, 0x1c, 0xed, 0xe2, 0xff, 0xb5, 0x38, 0xd7, 0xf6, 0xbc, 0x2b, 0x06, 0xc5,
+ 0xea, 0x14, 0xf3, 0xb7, 0xfa, 0xfe, 0x20, 0x12, 0xe8, 0x27, 0xd1, 0xf4, 0xdc,
+ 0xf3, 0xf1, 0xfb, 0x37, 0x29, 0xfc, 0x0d, 0xc5, 0xfc, 0xcd, 0x1d, 0xff, 0xc4,
+ 0xd4, 0xc5, 0x25, 0xf9, 0x16, 0x0a, 0x18, 0xfc, 0x08, 0x03, 0xd9, 0xf3, 0xe1,
+ 0xfc, 0xea, 0x06, 0x19, 0xe5, 0x05, 0xfe, 0x01, 0xe6, 0xfc, 0x1f, 0x24, 0xd9,
+ 0x10, 0xfc, 0xfc, 0xe5, 0xd8, 0x30, 0x10, 0xcc, 0x04, 0xd7, 0xe5, 0xad, 0x0a,
+ 0xf4, 0xfc, 0x21, 0xb5, 0x16, 0x03, 0x30, 0x1f, 0x3f, 0xfa, 0xe1, 0x3b, 0xf2,
+ 0xc1, 0xe1, 0xe1, 0x0c, 0x15, 0xe7, 0xee, 0x19, 0xfd, 0x38, 0xef, 0xfc, 0xf4,
+ 0xf0, 0x0e, 0xf8, 0x2d, 0xdb, 0xc9, 0xeb, 0x18, 0x48, 0x1d, 0x14, 0xd6, 0x2e,
+ 0xd9, 0x27, 0xaf, 0x2a, 0xe6, 0xe1, 0xe8, 0x07, 0x2d, 0xff, 0xe7, 0xd8, 0xcf,
+ 0xc6, 0x09, 0x29, 0xd9, 0x0d, 0xd2, 0xe3, 0x3f, 0xbe, 0x09, 0xf5, 0x0d, 0x02,
+ 0xea, 0x14, 0xfc, 0xe9, 0x01, 0xb3, 0x04, 0x1d, 0xf1, 0xfc, 0xe0, 0x36, 0x39,
+ 0xff, 0xa9, 0xfc, 0xdb, 0x04, 0x09, 0x23, 0xf0, 0x28, 0xca, 0xd6, 0xed, 0x08,
+ 0xf0, 0x97, 0xf3, 0xec, 0xf4, 0x50, 0x0e, 0x56, 0xff, 0xe5, 0x20, 0xf7, 0xcb,
+ 0xf0, 0x13, 0xf4, 0xfa, 0x0f, 0x23, 0x7f, 0x0f, 0x04, 0xe0, 0x2e, 0xff, 0xd5,
+ 0xbd, 0x09, 0xe6, 0x11, 0x27, 0xfc, 0xb6, 0xfd, 0xa8, 0xd8, 0xe8, 0xf1, 0x08,
+ 0xc1, 0xdb, 0x1a, 0x00, 0xf1, 0x2c, 0xc1, 0xf5, 0xad, 0x10, 0x05, 0xe9, 0x07,
+ 0xed, 0xca, 0xdb, 0xd8, 0x13, 0xd9, 0x0c, 0x09, 0xe2, 0xe6, 0xd4, 0x25, 0x17,
+ 0xff, 0x17, 0xf0, 0x50, 0xfb, 0x04, 0x18, 0xdd, 0xef, 0x21, 0xd0, 0xfc, 0xe9,
+ 0xe3, 0xfe, 0xc1, 0xf0, 0x24, 0xfd, 0x0f, 0x05, 0x08, 0xef, 0xf7, 0x1c, 0xd4,
+ 0xce, 0xff, 0xb1, 0xdf, 0x16, 0x05, 0xf0, 0xd8, 0xe3, 0xf6, 0xe9, 0x1a, 0x1a,
+ 0xf8, 0xfd, 0xe5, 0xc1, 0x1d, 0x03, 0x0a, 0xd0, 0xf6, 0xf6, 0x16, 0x27, 0xe8,
+ 0x04, 0x3c, 0xd3, 0xba, 0xc8, 0x35, 0x29, 0x14, 0x17, 0x03, 0xeb, 0xca, 0x44,
+ 0xee, 0xe4, 0xb4, 0x0e, 0x16, 0x16, 0x0b, 0xfc, 0xd5, 0x04, 0xea, 0x19, 0xdd,
+ 0xe5, 0x11, 0x23, 0x18, 0x36, 0xe9, 0xb7, 0xfd, 0x2f, 0x1e, 0x8c, 0xbf, 0x4b,
+ 0x17, 0xba, 0xe8, 0xef, 0x0f, 0xaf, 0xc8, 0x11, 0xdf, 0x13, 0x98, 0x29, 0x20,
+ 0x12, 0x4c, 0xe9, 0x9c, 0x28, 0x18, 0xc9, 0x24, 0xf5, 0xf5, 0xe3, 0x9b, 0x21,
+ 0x19, 0xe1, 0xd0, 0xb5, 0xf7, 0x41, 0x0a, 0xef, 0x88, 0xd0, 0xe5, 0xc1, 0xf0,
+ 0xfc, 0xca, 0xc6, 0x06, 0xf0, 0xea, 0x21, 0xf2, 0x1e, 0xd5, 0xc3, 0xf6, 0xfb,
+ 0x09, 0x01, 0x9a, 0x13, 0x04, 0xb0, 0xbb, 0x0b, 0x18, 0x05, 0xa0, 0x01, 0xcc,
+ 0xe3, 0x45, 0x81, 0xae, 0x28, 0x98, 0xe3, 0x8a, 0x1c, 0x6b, 0xe6, 0xca, 0xf9,
+ 0x1d, 0xe7, 0x08, 0x1a, 0xcd, 0xda, 0x58, 0x4c, 0x0f, 0xa9, 0xf1, 0x16, 0x08,
+ 0xa6, 0x47, 0x05, 0xd5, 0x17, 0xfc, 0x39, 0x31, 0xe1, 0x5f, 0x12, 0x5f, 0x00,
+ 0xf0, 0xac, 0xe5, 0x29, 0xbc, 0xec, 0xf2, 0x11, 0x07, 0x33, 0x0e, 0x19, 0x1e,
+ 0xbb, 0x29, 0xfc, 0xc4, 0xb3, 0x41, 0x59, 0x15, 0xe4, 0x64, 0x57, 0xf0, 0xb7,
+ 0xeb, 0xef, 0x00, 0xad, 0xc7, 0x19, 0xdb, 0xed, 0x15, 0xdc, 0xfa, 0xeb, 0xde,
+ 0x26, 0xd2, 0x0c, 0x8b, 0xf0, 0x3b, 0x04, 0xed, 0xee, 0x1d, 0xe9, 0xe6, 0x23,
+ 0xe3, 0x34, 0x34, 0x07, 0x4f, 0x3e, 0x08, 0xa5, 0xa9, 0x3f, 0xe6, 0x0a, 0xeb,
+ 0xd6, 0xd6, 0xf0, 0xe4, 0x09, 0x97, 0xec, 0x41, 0xd5, 0x04, 0xe0, 0xf3, 0x04,
+ 0xfe, 0x10, 0xc9, 0x07, 0x86, 0xfc, 0x55, 0xc4, 0xe6, 0xf9, 0x1a, 0x57, 0x4e,
+ 0xd5, 0xd5, 0xd6, 0xe8, 0x07, 0x1a, 0xe4, 0x01, 0xb0, 0xe2, 0x83, 0xff, 0xee,
+ 0xb2, 0xf4, 0x2f, 0xc0, 0x17, 0x52, 0x39, 0x0b, 0x0a, 0x08, 0x24, 0xe5, 0xfc,
+ 0x20, 0x35, 0x81, 0x2c, 0x4d, 0x3a, 0x33, 0x2c, 0x15, 0x14, 0x93, 0xb8, 0x29,
+ 0xff, 0x08, 0x50, 0xd8, 0xc2, 0xb6, 0xd6, 0x3b, 0xc6, 0x13, 0xe4, 0x12, 0xfb,
+ 0xcf, 0x29, 0x33, 0x11, 0x10, 0xf2, 0x1f, 0x1a, 0xe6, 0xb2, 0x0c, 0x0e, 0x1f,
+ 0x0a, 0x1a, 0x14, 0xde, 0x03, 0xec, 0xed, 0x28, 0xe4, 0xbe, 0x0d, 0xaf, 0x1a,
+ 0x10, 0xe5, 0xe7, 0x03, 0xfd, 0xb7, 0xe6, 0xd5, 0xff, 0x0a, 0x15, 0x06, 0xca,
+ 0xe3, 0x07, 0xe9, 0xc3, 0xae, 0xe5, 0x11, 0x31, 0x1a, 0xfd, 0x38, 0x09, 0xe4,
+ 0x02, 0xe3, 0xec, 0xd6, 0x1f, 0xae, 0xed, 0xe3, 0x00, 0xc9, 0xfe, 0xd1, 0xf5,
+ 0x00, 0xf7, 0xf1, 0x04, 0x14, 0x05, 0xed, 0x3a, 0xfd, 0xf1, 0xea, 0xec, 0x31,
+ 0x41, 0x1f, 0x21, 0xf7, 0xbc, 0x3e, 0xea, 0x39, 0x01, 0x05, 0x09, 0x0e, 0xd9,
+ 0x22, 0xfb, 0xef, 0x04, 0x42, 0x22, 0x02, 0xc5, 0xc7, 0x1a, 0x1a, 0x0a, 0xed,
+ 0xfd, 0x14, 0xf7, 0xf2, 0x0d, 0xf4, 0xc3, 0x1f, 0x27, 0xe7, 0xd9, 0xdd, 0x04,
+ 0x20, 0x02, 0x7f, 0xb3, 0xc0, 0xcf, 0xe2, 0xd1, 0x0c, 0x07, 0xe0, 0x6d, 0x12,
+ 0x28, 0xf5, 0x1c, 0x18, 0x1f, 0xf6, 0xfe, 0xb9, 0xf2, 0xfa, 0xda, 0xa9, 0xeb,
+ 0xd9, 0xe3, 0x1d, 0x08, 0xd0, 0xcc, 0x1c, 0xd7, 0x30, 0xea, 0x09, 0xed, 0xe5,
+ 0x04, 0x1d, 0x14, 0xdb, 0x1c, 0x1d, 0xf8, 0xfd, 0xe0, 0x14, 0x05, 0xcd, 0xd4,
+ 0xdb, 0xbc, 0x02, 0xf2, 0xf2, 0x00, 0xd5, 0xf4, 0x07, 0x29, 0xe4, 0xfc, 0x01,
+ 0x35, 0xd8, 0xd3, 0xd4, 0xeb, 0x3e, 0xee, 0xd5, 0x0a, 0xd1, 0x0c, 0x0a, 0x10,
+ 0x2c, 0xf1, 0x0d, 0xeb, 0xdc, 0xff, 0xe9, 0xd2, 0x02, 0x14, 0xf0, 0xae, 0x22,
+ 0x06, 0xd6, 0xf4, 0x30, 0xc5, 0xd4, 0xcc, 0x19, 0x05, 0x18, 0xe0, 0xc6, 0x15,
+ 0x0e, 0xea, 0xf9, 0x11, 0x3b, 0xe8, 0x60, 0x15, 0xfe, 0xec, 0xfb, 0x24, 0xe1,
+ 0xf8, 0x1a, 0x14, 0x12, 0xea, 0x23, 0xce, 0xe0, 0xe3, 0x0e, 0x32, 0x51, 0x05,
+ 0x26, 0x06, 0x06, 0x4c, 0xde, 0xeb, 0xf0, 0xdf, 0xf1, 0x02, 0x1f, 0x3a, 0x1b,
+ 0x3d, 0xd7, 0xcc, 0x0c, 0xd4, 0xe3, 0xef, 0x08, 0xed, 0xaa, 0x15, 0xb3, 0x19,
+ 0xe6, 0xbb, 0x2b, 0x1d, 0xde, 0x2d, 0x01, 0xbd, 0xe5, 0xfa, 0x10, 0xba, 0x1a,
+ 0xec, 0xe9, 0xb5, 0x17, 0x1f, 0xd5, 0x19, 0xd8, 0x3a, 0x1c, 0xe0, 0xb8, 0x07,
+ 0xe4, 0x14, 0x38, 0xeb, 0x06, 0xfe, 0xc5, 0xee, 0xf8, 0xa6, 0x08, 0xff, 0xf2,
+ 0x00, 0xd4, 0xe2, 0x2c, 0xfe, 0x28, 0x2a, 0x17, 0xa0, 0x05, 0xe9, 0xf9, 0xb6,
+ 0x15, 0xef, 0x06, 0x27, 0xfa, 0x17, 0xda, 0xe1, 0x18, 0xd0, 0xb8, 0x58, 0xaf,
+ 0xf6, 0xdd, 0xf6, 0x2f, 0x05, 0x0f, 0xe1, 0x38, 0xfd, 0x06, 0xd2, 0x05, 0xb4,
+ 0x00, 0xd6, 0x02, 0x01, 0x27, 0x8b, 0x06, 0xdb, 0xfa, 0x10, 0x4c, 0xe8, 0x02,
+ 0xa1, 0x16, 0xf8, 0xe8, 0xdd, 0xf4, 0xa5, 0xcd, 0xab, 0xf8, 0xf7, 0x09, 0xc2,
+ 0x18, 0x2f, 0x10, 0xd6, 0xd3, 0x40, 0xea, 0x33, 0xd2, 0xec, 0x08, 0xf4, 0x01,
+ 0x03, 0xe3, 0x1f, 0xc5, 0xe5, 0x7f, 0xd7, 0xe1, 0x16, 0x0c, 0x0d, 0xb1, 0xf3,
+ 0x3e, 0xed, 0xc9, 0xd8, 0xf9, 0x72, 0x08, 0x9a, 0xea, 0xf9, 0x2f, 0x4d, 0xd7,
+ 0xc5, 0x0a, 0xe2, 0xe2, 0xb8, 0x54, 0xd2, 0xe0, 0x16, 0x0b, 0xeb, 0x13, 0xe0,
+ 0x2a, 0xbe, 0xce, 0x33, 0x8c, 0xfc, 0xdc, 0x60, 0xdf, 0xe0, 0xed, 0xe5, 0x2b,
+ 0xd9, 0xbd, 0xd3, 0x2a, 0x26, 0xb1, 0xab, 0x12, 0x9a, 0xc0, 0xd3, 0xb0, 0x12,
+ 0xd4, 0x17, 0xc6, 0xed, 0xa6, 0xe5, 0x06, 0x09, 0x2a, 0xf5, 0xa9, 0xfc, 0xe1,
+ 0x5b, 0xd2, 0xfa, 0xed, 0x23, 0x1f, 0xed, 0xb1, 0x11, 0xec, 0x0c, 0x01, 0x01,
+ 0xcb, 0x25, 0xd8, 0x13, 0x15, 0xf2, 0x1c, 0xee, 0xd4, 0xd8, 0xf6, 0xfe, 0x3d,
+ 0xde, 0x01, 0xca, 0xc7, 0xe7, 0x9a, 0xd4, 0x15, 0x0d, 0xf9, 0x17, 0xd7, 0xfa,
+ 0xe6, 0xc0, 0xcc, 0x36, 0x23, 0xeb, 0xf8, 0xe5, 0xd2, 0x1c, 0xd8, 0xdf, 0xb2,
+ 0xeb, 0xf4, 0xea, 0x1e, 0xfb, 0xdd, 0xfc, 0xf2, 0x1f, 0xe0, 0xfb, 0xd0, 0x26,
+ 0xef, 0xa5, 0xeb, 0xd2, 0xfb, 0x07, 0x19, 0xfd, 0xee, 0x16, 0x06, 0xd2, 0xee,
+ 0x0f, 0x21, 0xea, 0x04, 0x20, 0x4b, 0xf0, 0x17, 0x0f, 0x19, 0xfe, 0x3d, 0xdf,
+ 0xdd, 0xd5, 0xe7, 0x14, 0x00, 0x06, 0x02, 0x11, 0x0d, 0x0e, 0x02, 0xf6, 0xe7,
+ 0x4a, 0xf0, 0xff, 0xff, 0xb2, 0x28, 0x22, 0x1b, 0xd0, 0x25, 0xd7, 0x03, 0xf9,
+ 0xfb, 0x0c, 0x05, 0xdf, 0x14, 0x1a, 0x17, 0x34, 0xef, 0x0c, 0x22, 0xf5, 0x0d,
+ 0xf5, 0x0e, 0x09, 0xdd, 0xfc, 0x42, 0xf7, 0x07, 0xfb, 0xdf, 0xe0, 0xd7, 0x08,
+ 0xcd, 0xf6, 0xcb, 0xe1, 0xdc, 0x18, 0xf0, 0xee, 0x07, 0x1d, 0x26, 0xd6, 0x10,
+ 0xf3, 0xf0, 0xd8, 0xf5, 0xf1, 0xc8, 0x23, 0xf4, 0xc1, 0xd4, 0xed, 0x07, 0xcf,
+ 0x4c, 0x1b, 0x21, 0x34, 0xf3, 0xe3, 0xf4, 0x22, 0xeb, 0xfd, 0x01, 0xcb, 0xfc,
+ 0xd0, 0xeb, 0x0a, 0x07, 0x20, 0x00, 0x1a, 0xcc, 0x23, 0x31, 0xfa, 0xe6, 0xc3,
+ 0xf0, 0x08, 0x15, 0xdf, 0xed, 0xf3, 0xf4, 0xf6, 0x17, 0xf9, 0x16, 0xd6, 0xd2,
+ 0x11, 0x31, 0xdb, 0xfe, 0x1d, 0x13, 0xdf, 0x09, 0x1f, 0x00, 0x7f, 0x20, 0xe1,
+ 0xff, 0xdd, 0xba, 0xfd, 0xe7, 0xe4, 0xf2, 0x00, 0xda, 0xdf, 0x1e, 0xbd, 0x04,
+ 0xd1, 0xfd, 0xd1, 0x05, 0xf0, 0xfa, 0xd3, 0xd2, 0xec, 0xcb, 0x28, 0xf4, 0xf9,
+ 0xf1, 0x08, 0xbb, 0xea, 0x0d, 0x0f, 0x27, 0x10, 0xce, 0x23, 0xe1, 0xec, 0x38,
+ 0x1a, 0x17, 0xcc, 0x12, 0x17, 0xe2, 0xf4, 0x33, 0xdf, 0xcf, 0x37, 0x1a, 0x0b,
+ 0xda, 0x12, 0xcb, 0xf4, 0xe4, 0x9a, 0x06, 0xf7, 0x28, 0x00, 0x0b, 0xc4, 0x12,
+ 0xfd, 0xe0, 0xf9, 0xdc, 0xce, 0xda, 0x12, 0x04, 0x24, 0xfb, 0x18, 0x14, 0x20,
+ 0xff, 0x13, 0xf2, 0x16, 0xdb, 0xfc, 0xf2, 0x02, 0x2b, 0x00, 0xe4, 0xef, 0x22,
+ 0xf5, 0xe7, 0x13, 0xf6, 0xe5, 0x19, 0xdf, 0x14, 0x1e, 0xd5, 0xf3, 0xf4, 0xcc,
+ 0xe0, 0x01, 0xf4, 0xe6, 0xeb, 0x1f, 0x06, 0xed, 0xcf, 0xcd, 0x36, 0xf1, 0x03,
+ 0x24, 0x0d, 0xf4, 0x2f, 0xda, 0xf5, 0xee, 0xfc, 0xe1, 0xe0, 0xff, 0xf5, 0xd7,
+ 0xd6, 0xdd, 0x17, 0x17, 0xde, 0xf8, 0x02, 0xce, 0x1a, 0x7f, 0x15, 0xda, 0x03,
+ 0xd1, 0xf4, 0xe4, 0x35, 0xf9, 0xf1, 0xf1, 0x04, 0xf3, 0xbe, 0x10, 0xf3, 0xfd,
+ 0x0c, 0xd5, 0xdb, 0x15, 0x0e, 0xfa, 0xd5, 0x0b, 0x13, 0xf8, 0x00, 0xef, 0xf5,
+ 0xfc, 0x2a, 0x05, 0xf9, 0xfe, 0xdf, 0xd9, 0x14, 0x00, 0x4b, 0x1b, 0x01, 0xd0,
+ 0xf0, 0xf7, 0x07, 0xfe, 0xe5, 0x04, 0x0d, 0xec, 0xf2, 0xf1, 0xd9, 0xf7, 0x02,
+ 0xcb, 0xf7, 0x1a, 0xe5, 0xe3, 0xdf, 0xca, 0xf2, 0xf8, 0xf6, 0xe2, 0xe4, 0x22,
+ 0xfd, 0xf8, 0xe5, 0xe6, 0xed, 0xfe, 0x00, 0xf0, 0xc0, 0x00, 0xc7, 0x1d, 0xe3,
+ 0xd6, 0xfe, 0xf1, 0xef, 0xda, 0x12, 0xf6, 0x08, 0x00, 0xf0, 0xe3, 0xdb, 0x06,
+ 0xf3, 0xf7, 0x14, 0x3b, 0x0c, 0xfa, 0x00, 0xff, 0xd6, 0xe8, 0x4b, 0xd7, 0xec,
+ 0x33, 0x04, 0x0d, 0x40, 0xe7, 0x00, 0xfb, 0x00, 0x05, 0xee, 0x1f, 0x38, 0x21,
+ 0xb8, 0xf3, 0x1b, 0xfa, 0x13, 0xe2, 0xd8, 0xe1, 0x0b, 0xfc, 0xe8, 0xea, 0x00,
+ 0xe1, 0xf7, 0x0d, 0xe0, 0x22, 0xd3, 0xee, 0xf2, 0xce, 0xee, 0x32, 0xf5, 0xfe,
+ 0xcd, 0x10, 0x01, 0x15, 0xea, 0x2b, 0xef, 0x1c, 0xd9, 0xfa, 0x0e, 0x22, 0x13,
+ 0xf1, 0xf8, 0xfb, 0xff, 0x2a, 0xfd, 0x03, 0x2e, 0x19, 0xca, 0x05, 0xfc, 0x13,
+ 0x1f, 0x16, 0xea, 0x0b, 0x2c, 0xfd, 0xdf, 0x11, 0xf5, 0xc7, 0x12, 0x06, 0xd3,
+ 0x07, 0x2b, 0x13, 0xf2, 0x05, 0xf4, 0x0a, 0x0a, 0x18, 0x03, 0xf9, 0xeb, 0xdb,
+ 0x0f, 0xd2, 0xff, 0xd5, 0xda, 0xf6, 0xd5, 0xda, 0xf4, 0xc7, 0xf7, 0xb9, 0xf0,
+ 0x10, 0xca, 0x45, 0xf1, 0xf8, 0x1e, 0xe3, 0xbd, 0xe8, 0x0f, 0x10, 0x2b, 0xd3,
+ 0x0a, 0x18, 0xe1, 0x25, 0xbd, 0x23, 0xd8, 0xd1, 0x11, 0x20, 0xef, 0xee, 0x0d,
+ 0x11, 0xdb, 0x1e, 0xfb, 0x52, 0x15, 0xdb, 0xf5, 0x10, 0xd2, 0xf2, 0x02, 0x2b,
+ 0xf3, 0xf2, 0x46, 0x07, 0x00, 0xbe, 0x10, 0xf2, 0xef, 0x15, 0xe8, 0x07, 0x05,
+ 0x25, 0x10, 0x33, 0x32, 0xd7, 0xb5, 0xe8, 0x24, 0xf5, 0xf4, 0xf1, 0xdd, 0x08,
+ 0xc4, 0x0b, 0xd0, 0x20, 0xdb, 0xcf, 0xf8, 0x0c, 0x30, 0x07, 0xbd, 0x06, 0x04,
+ 0x15, 0x1f, 0xd8, 0x2e, 0xf6, 0xb7, 0xe4, 0xec, 0xef, 0xb1, 0x0b, 0xec, 0xf5,
+ 0xcc, 0xf3, 0x43, 0x2c, 0x07, 0xdc, 0x42, 0x24, 0xe7, 0xff, 0xdc, 0xed, 0x12,
+ 0xc2, 0xb6, 0x21, 0xda, 0xf7, 0xf2, 0xe7, 0x00, 0xd9, 0xf2, 0x1b, 0x25, 0x07,
+ 0x2a, 0x37, 0xd4, 0xe1, 0xf1, 0xeb, 0xc4, 0x1d, 0x0e, 0xd2, 0xd3, 0xe7, 0x26,
+ 0x1c, 0xe9, 0x33, 0xdb, 0xa6, 0x32, 0x02, 0x07, 0xe8, 0xf9, 0xf8, 0x0f, 0xde,
+ 0xe0, 0x27, 0x14, 0x20, 0x10, 0xe0, 0xf3, 0xe2, 0x06, 0xcd, 0x24, 0xc0, 0xf2,
+ 0x10, 0x4b, 0x7f, 0xe0, 0xad, 0xef, 0x01, 0xb3, 0xc6, 0xf7, 0x17, 0xdd, 0x52,
+ 0xd8, 0xdb, 0x4c, 0xfc, 0x2b, 0x0d, 0xbc, 0xf9, 0xe2, 0x00, 0x18, 0xbb, 0x04,
+ 0x30, 0x0e, 0x1a, 0xdb, 0x17, 0xd1, 0xd8, 0x01, 0xf1, 0xf6, 0xfa, 0x23, 0x20,
+ 0xfe, 0xdd, 0x0d, 0xef, 0xce, 0x09, 0xdc, 0xda, 0xe4, 0x5c, 0xc6, 0x11, 0x03,
+ 0xdc, 0xf6, 0x2b, 0x40, 0xf3, 0x0b, 0x1d, 0x19, 0xa7, 0x05, 0xc5, 0x09, 0xc8,
+ 0xed, 0x28, 0x07, 0xe8, 0x0c, 0x0a, 0x24, 0x13, 0xec, 0xb4, 0x09, 0xfd, 0xec,
+ 0x25, 0x1a, 0xe2, 0xe1, 0xfe, 0x26, 0xa1, 0xcd, 0x15, 0xe6, 0x1d, 0xdf, 0xeb,
+ 0x9e, 0xe7, 0x0f, 0x05, 0x9c, 0x33, 0x36, 0xcb, 0x39, 0xd2, 0x0e, 0x4c, 0xa6,
+ 0xe5, 0xbd, 0xd1, 0x07, 0xc9, 0xef, 0xaa, 0xdd, 0xec, 0x02, 0x09, 0xe5, 0xed,
+ 0xf7, 0xd3, 0xfb, 0xd1, 0xa8, 0xb0, 0xdb, 0xf3, 0xed, 0x0a, 0x81, 0x49, 0x00,
+ 0xb3, 0xc6, 0xc3, 0xd5, 0xfa, 0xfc, 0xe1, 0xbd, 0x48, 0xd9, 0xfd, 0xc3, 0x09,
+ 0xe4, 0x24, 0x26, 0xd9, 0xd4, 0xfc, 0x03, 0x51, 0x2f, 0x07, 0xe5, 0x9d, 0x02,
+ 0xc5, 0xd1, 0x07, 0xf8, 0x31, 0xea, 0xf6, 0xeb, 0x05, 0x01, 0x0c, 0x21, 0xa9,
+ 0xea, 0xf1, 0xb1, 0xfb, 0x60, 0xf4, 0x0b, 0x40, 0xb0, 0x4f, 0x33, 0xba, 0xcf,
+ 0x13, 0x03, 0xea, 0xd5, 0x3d, 0xd0, 0x3d, 0x06, 0x99, 0xf2, 0x04, 0xf1, 0xe2,
+ 0x94, 0xee, 0xf2, 0xa5, 0xac, 0x33, 0x19, 0xcc, 0x84, 0x30, 0xd4, 0xa8, 0x34,
+ 0x81, 0x26, 0x0a, 0xb8, 0xde, 0xfa, 0x32, 0x02, 0xd8, 0xfb, 0x39, 0x49, 0xd7,
+ 0x0e, 0x24, 0xda, 0xda, 0xed, 0x3d, 0x93, 0xbe, 0x0b, 0xdb, 0x39, 0xd9, 0xfb,
+ 0xe3, 0x27, 0xe3, 0xba, 0xe9, 0x36, 0xf3, 0xea, 0xde, 0xb9, 0x20, 0x21, 0x84,
+ 0xf9, 0x2c, 0x0a, 0xff, 0xed, 0x27, 0xef, 0x1a, 0x08, 0xe1, 0xe0, 0xfb, 0xe1,
+ 0x0a, 0x13, 0xe2, 0x20, 0xfa, 0xae, 0xf9, 0xe1, 0xf4, 0x96, 0x30, 0x11, 0xb3,
+ 0xdf, 0x49, 0x42, 0xd9, 0xbc, 0xbc, 0xcf, 0xf4, 0xe3, 0xff, 0x02, 0x57, 0x17,
+ 0xf6, 0xc5, 0x35, 0xe4, 0xf1, 0x03, 0xc1, 0xd4, 0x26, 0xa5, 0x05, 0xcd, 0x31,
+ 0xab, 0xf8, 0x14, 0x18, 0xa6, 0xe4, 0x3b, 0x94, 0xf5, 0xe7, 0xc3, 0xb1, 0x0e,
+ 0xc6, 0xd4, 0xd2, 0x33, 0x02, 0x60, 0xf0, 0xe2, 0xc8, 0x08, 0x20, 0x93, 0xe8,
+ 0xc0, 0x20, 0xfd, 0x46, 0xcc, 0x3d, 0x0b, 0xf9, 0xe6, 0xae, 0xf5, 0xff, 0xff,
+ 0xd6, 0xdd, 0x10, 0xd0, 0xd3, 0x01, 0xe0, 0x11, 0xf9, 0x09, 0x0e, 0xc3, 0xbe,
+ 0x0f, 0xea, 0xde, 0xc9, 0x02, 0x02, 0x0b, 0xeb, 0xfa, 0xed, 0xf6, 0x15, 0x04,
+ 0x14, 0xf7, 0x11, 0x10, 0xde, 0x2b, 0x0f, 0xe0, 0xc8, 0xed, 0xec, 0x2b, 0x24,
+ 0x10, 0xd1, 0xf0, 0xfd, 0xeb, 0xef, 0x06, 0xcc, 0x15, 0xf5, 0xf3, 0xf0, 0x27,
+ 0xe4, 0xf9, 0xc0, 0x04, 0xcd, 0x01, 0xf6, 0x10, 0x20, 0xea, 0x81, 0x15, 0xdd,
+ 0xef, 0xd3, 0x11, 0xe5, 0xbd, 0x0e, 0xd5, 0x2d, 0x1e, 0x1d, 0x0b, 0x0d, 0x13,
+ 0xf1, 0xe9, 0x05, 0x00, 0x0b, 0xe7, 0x01, 0xdf, 0xfc, 0x01, 0xe6, 0xe7, 0xee,
+ 0x11, 0x14, 0xc4, 0xf2, 0xde, 0xfd, 0xe1, 0x12, 0x0a, 0x12, 0xf1, 0xe5, 0xe4,
+ 0x17, 0xee, 0x12, 0x14, 0x0c, 0x02, 0xf9, 0xf8, 0x35, 0x07, 0x0a, 0x03, 0x04,
+ 0x10, 0x0d, 0x07, 0xd7, 0x03, 0x0f, 0x0d, 0x2c, 0x0a, 0xdf, 0x0e, 0xd5, 0xf7,
+ 0xc9, 0x14, 0xd7, 0xd5, 0x14, 0xea, 0x00, 0xee, 0x12, 0xf4, 0x2e, 0x08, 0x15,
+ 0xf5, 0x18, 0x18, 0xdd, 0x25, 0x12, 0xea, 0xe8, 0xf2, 0xad, 0x1c, 0x12, 0xe6,
+ 0x01, 0xeb, 0xf0, 0xfa, 0xee, 0x1a, 0x22, 0xed, 0x22, 0x29, 0xfe, 0x0e, 0x23,
+ 0xd2, 0xfd, 0x15, 0x07, 0xfc, 0xf1, 0x3c, 0xde, 0xd6, 0x09, 0xbb, 0xcf, 0xef,
+ 0xc1, 0x1e, 0x19, 0x09, 0x1d, 0xfd, 0xf3, 0xec, 0x14, 0xf1, 0xe8, 0xf9, 0x22,
+ 0xf7, 0xe5, 0x0a, 0x02, 0x13, 0xee, 0x26, 0x03, 0x0f, 0xef, 0xdb, 0xe9, 0x46,
+ 0xed, 0x0c, 0xf0, 0xfb, 0xd4, 0xdb, 0xfd, 0xe3, 0x13, 0x14, 0xc9, 0x07, 0xea,
+ 0xea, 0xda, 0xcc, 0x08, 0x2e, 0xdc, 0xde, 0xe6, 0x21, 0xc5, 0xf1, 0x0c, 0x38,
+ 0xde, 0xf3, 0x0e, 0x01, 0xc3, 0xe9, 0xfd, 0x0b, 0xf7, 0x39, 0xe2, 0x17, 0xdf,
+ 0x0e, 0x1b, 0xda, 0x08, 0xeb, 0xdf, 0x0b, 0x03, 0xd0, 0x35, 0x43, 0xa9, 0x00,
+ 0xb6, 0xba, 0x9e, 0xa9, 0xa4, 0xe3, 0x01, 0x1a, 0xdf, 0x12, 0x10, 0xba, 0xb0,
+ 0xd2, 0xf7, 0x69, 0xfa, 0xfe, 0xdc, 0xb0, 0x00, 0x01, 0x05, 0xe5, 0x3d, 0xaa,
+ 0xe7, 0xa4, 0xf0, 0xc5, 0xeb, 0xa0, 0xc0, 0xa6, 0xc9, 0xbf, 0x17, 0x74, 0xe7,
+ 0x08, 0x11, 0x1c, 0x1f, 0x2b, 0xed, 0x39, 0x01, 0x00, 0x9b, 0xfb, 0xd8, 0xfa,
+ 0x21, 0xc9, 0x14, 0x2e, 0x0e, 0x17, 0x9a, 0x08, 0xd3, 0xfc, 0x00, 0xcf, 0xff,
+ 0xc5, 0xba, 0xf6, 0x1a, 0xfd, 0x2f, 0xd8, 0x36, 0x4d, 0xcd, 0xf6, 0x11, 0x06,
+ 0x65, 0xe2, 0x1b, 0xc3, 0x0f, 0xc7, 0xdd, 0xde, 0xd2, 0xcf, 0xeb, 0xcc, 0xfb,
+ 0xb7, 0x56, 0xc6, 0x12, 0xdd, 0xec, 0xdc, 0xfb, 0x04, 0x20, 0xc0, 0xcc, 0x17,
+ 0xd3, 0xf4, 0xe4, 0x0d, 0x21, 0xde, 0xc5, 0xb5, 0x0d, 0x3e, 0x1d, 0x06, 0xe9,
+ 0x23, 0xfa, 0xc0, 0xd2, 0xf2, 0x69, 0xff, 0x05, 0xda, 0x11, 0xe5, 0xb9, 0x21,
+ 0xd5, 0x97, 0x25, 0xe4, 0x0e, 0xfc, 0x05, 0x1c, 0xc0, 0xef, 0xed, 0xa8, 0xf9,
+ 0xe5, 0xed, 0x44, 0x0d, 0x26, 0xff, 0x29, 0x1c, 0x41, 0xc3, 0xd1, 0xff, 0xe3,
+ 0xe7, 0x9a, 0xc9, 0x34, 0x29, 0x5e, 0xbd, 0xdc, 0xc4, 0xf2, 0xe4, 0xeb, 0xf9,
+ 0x7f, 0x3b, 0xf1, 0x63, 0x19, 0xdd, 0xea, 0xda, 0x34, 0xe5, 0xf0, 0xf9, 0xc2,
+ 0x1d, 0xcc, 0x1f, 0xd8, 0xd0, 0x40, 0xfe, 0x26, 0xd2, 0xad, 0x32, 0xb3, 0xdc,
+ 0xa5, 0xe1, 0x14, 0x11, 0x76, 0x5f, 0xe7, 0x13, 0xde, 0xdf, 0x2e, 0x32, 0x05,
+ 0xe3, 0x27, 0xf5, 0xfc, 0xee, 0x1a, 0x3d, 0xb4, 0x1f, 0xd4, 0xf2, 0xd9, 0x2e,
+ 0xe1, 0x00, 0x1e, 0x05, 0x2c, 0xd4, 0xc4, 0x09, 0x25, 0xea, 0xa1, 0xc8, 0x29,
+ 0xd5, 0x1f, 0xcb, 0x0f, 0x2e, 0xf1, 0xee, 0xe5, 0x3b, 0xed, 0xd7, 0x22, 0xfe,
+ 0xdb, 0x32, 0xd7, 0xd6, 0xff, 0x09, 0x02, 0x18, 0xf2, 0x01, 0x05, 0x01, 0xe2,
+ 0xd4, 0xdb, 0xf4, 0x10, 0xaf, 0xfc, 0xe8, 0x22, 0xe0, 0x0f, 0xe0, 0xff, 0x36,
+ 0x04, 0xf5, 0xd2, 0xd1, 0xa9, 0x12, 0xde, 0x0e, 0x0d, 0xe2, 0xfe, 0xdf, 0xf5,
+ 0xf5, 0xd3, 0x1a, 0x13, 0x0a, 0x2f, 0x03, 0xeb, 0xe2, 0xdb, 0x11, 0xfd, 0xf7,
+ 0xd8, 0x0f, 0x02, 0xbf, 0xc8, 0x1e, 0xe2, 0x0e, 0x05, 0xd1, 0x23, 0x02, 0x22,
+ 0x11, 0xff, 0x92, 0x27, 0x2b, 0xd3, 0x07, 0xb1, 0xfd, 0xd1, 0xd1, 0x32, 0xeb,
+ 0x2c, 0xfe, 0xd2, 0xea, 0xf7, 0xe1, 0x21, 0x0e, 0xde, 0x0a, 0x02, 0xf9, 0xc4,
+ 0x0c, 0xfc, 0x0a, 0x20, 0x01, 0xbf, 0xc9, 0xee, 0x09, 0xd3, 0x05, 0xff, 0xcb,
+ 0xf4, 0x15, 0xe8, 0x1b, 0x0a, 0xd3, 0xf0, 0xef, 0xb1, 0x33, 0xba, 0x4f, 0xd8,
+ 0xfa, 0x06, 0xcd, 0x13, 0x00, 0xe5, 0x31, 0xd6, 0x25, 0xec, 0xfe, 0xb0, 0xd6,
+ 0xf5, 0x11, 0x1a, 0xd9, 0x03, 0xe6, 0x0c, 0x4c, 0xf4, 0xe9, 0xf4, 0xd6, 0xbb,
+ 0xfa, 0xf8, 0xde, 0x9f, 0x1a, 0xb7, 0xef, 0xe2, 0x17, 0x0d, 0x0f, 0x2c, 0xf0,
+ 0x07, 0xbc, 0x36, 0xf9, 0x32, 0x04, 0xfe, 0x07, 0xe3, 0xe9, 0xc0, 0xf7, 0xde,
+ 0x2d, 0xe0, 0xed, 0x18, 0xd6, 0x38, 0xf6, 0xe3, 0xdd, 0xe0, 0xfc, 0xc1, 0x7f,
+ 0x13, 0xe0, 0x25, 0x2e, 0x13, 0xed, 0xde, 0xe5, 0xe5, 0x17, 0xe3, 0xc9, 0x3c,
+ 0xde, 0x0c, 0xf2, 0xa5, 0xda, 0xdd, 0x3c, 0xec, 0xdb, 0x0c, 0x27, 0xed, 0xef,
+ 0xd2, 0x36, 0xd1, 0xf5, 0xc2, 0xab, 0x0c, 0x0a, 0xc2, 0x28, 0xdc, 0xcf, 0x10,
+ 0xc6, 0xd9, 0xca, 0xe6, 0xdf, 0x16, 0x10, 0xe4, 0xfe, 0x1e, 0xe5, 0x4f, 0x02,
+ 0x15, 0xfe, 0x00, 0xd7, 0x0e, 0x07, 0xef, 0xd4, 0xef, 0xf1, 0xf2, 0x21, 0x2f,
+ 0xc6, 0xfc, 0x39, 0x16, 0x32, 0x9a, 0xcd, 0x07, 0x1e, 0x04, 0x23, 0xf5, 0xfa,
+ 0x12, 0x34, 0x21, 0xfa, 0x05, 0x30, 0x24, 0x33, 0xf2, 0xf9, 0xfd, 0xd5, 0xff,
+ 0x46, 0xd2, 0x18, 0x1a, 0xc3, 0x32, 0x15, 0xdc, 0x03, 0xd7, 0x32, 0xf2, 0xe7,
+ 0xd7, 0x16, 0xf0, 0xf0, 0x03, 0xe9, 0xdd, 0x25, 0xf4, 0xf8, 0xfa, 0x13, 0xe3,
+ 0x41, 0x1b, 0xc4, 0xe1, 0x18, 0x14, 0xe9, 0xe7, 0xe2, 0xff, 0x2d, 0xf6, 0xea,
+ 0xd4, 0xdc, 0x23, 0xea, 0xea, 0x29, 0x14, 0x0e, 0xec, 0x0b, 0xec, 0x00, 0xf7,
+ 0x08, 0xdc, 0x1a, 0xef, 0xe4, 0xf2, 0x20, 0xcb, 0xc3, 0xf6, 0x3d, 0x14, 0xe2,
+ 0xc5, 0xf7, 0xf7, 0xd2, 0xe6, 0x0b, 0x1a, 0xf9, 0x26, 0x20, 0x1f, 0x0f, 0xd4,
+ 0xf3, 0x0e, 0xd6, 0x4d, 0x01, 0x07, 0x1a, 0xf1, 0xe1, 0xe0, 0x1e, 0xea, 0xea,
+ 0x1d, 0xfe, 0xed, 0x1e, 0xf0, 0x00, 0x00, 0xff, 0x0d, 0xb3, 0x02, 0x4b, 0x0a,
+ 0xf3, 0x1c, 0x38, 0xfb, 0xee, 0x5d, 0x0c, 0xe6, 0xdf, 0x02, 0xed, 0x1f, 0xfe,
+ 0xea, 0x7f, 0xe5, 0xf7, 0x01, 0x02, 0x22, 0x60, 0xdd, 0xee, 0xcf, 0x11, 0xfc,
+ 0xee, 0xf1, 0x14, 0xc7, 0xe4, 0xf8, 0x3b, 0x09, 0xe6, 0xf7, 0xdc, 0xf9, 0x27,
+ 0x06, 0x10, 0x25, 0xf8, 0xe6, 0x12, 0xe5, 0xe1, 0x1b, 0xd3, 0xd3, 0xea, 0x04,
+ 0x12, 0x02, 0xe1, 0xe4, 0xf3, 0x4a, 0x13, 0xf1, 0xb4, 0x0c, 0xf7, 0x53, 0xd0,
+ 0xcd, 0xe5, 0x2c, 0x09, 0x06, 0xdf, 0xf1, 0x0d, 0x1f, 0xfc, 0xdd, 0xdf, 0x07,
+ 0x1f, 0x41, 0x23, 0xff, 0x1f, 0x22, 0x15, 0x06, 0x0f, 0x02, 0xd7, 0x11, 0x1f,
+ 0xea, 0x24, 0xef, 0xe9, 0x0a, 0x0d, 0x1c, 0xd9, 0xeb, 0xe1, 0x2b, 0x00, 0x08,
+ 0xd9, 0xd1, 0xfa, 0xdc, 0x06, 0x14, 0x0b, 0x03, 0x40, 0x3c, 0xdc, 0xf4, 0xc3,
+ 0xeb, 0xfa, 0xeb, 0x07, 0xd8, 0x18, 0x09, 0xfa, 0x6d, 0xe2, 0xff, 0x06, 0xfa,
+ 0x16, 0xec, 0xd4, 0xf8, 0xdc, 0xd7, 0x30, 0x08, 0xe1, 0x37, 0x08, 0xca, 0xe1,
+ 0xc7, 0x0a, 0xd0, 0x10, 0xed, 0x10, 0x09, 0xd4, 0xed, 0x4e, 0xea, 0x1b, 0x2b,
+ 0xd3, 0x14, 0xe0, 0xfd, 0x0a, 0x12, 0xeb, 0xd1, 0xe8, 0x2f, 0xc6, 0xd8, 0xfe,
+ 0xec, 0xf6, 0xca, 0xfa, 0xc1, 0xfd, 0xc9, 0x22, 0xdb, 0xdb, 0xe4, 0x09, 0x22,
+ 0xfb, 0xb7, 0xb5, 0xdd, 0xf9, 0x03, 0xda, 0x1f, 0x00, 0x24, 0xf5, 0xd6, 0x05,
+ 0x0e, 0x07, 0x16, 0x01, 0x3e, 0xbe, 0x44, 0x18, 0x00, 0xe0, 0xdb, 0x4e, 0x0b,
+ 0xe6, 0xf2, 0xd9, 0xd1, 0x1e, 0x00, 0x95, 0x0e, 0xd4, 0xf3, 0xd9, 0x10, 0xf9,
+ 0xf8, 0x0f, 0x51, 0xa0, 0xb9, 0x4f, 0xc9, 0xd9, 0x05, 0xf5, 0xde, 0xc4, 0x27,
+ 0x37, 0x26, 0x06, 0xef, 0xf0, 0x13, 0xd2, 0xc9, 0x35, 0xe0, 0x19, 0x00, 0xf8,
+ 0x81, 0xf0, 0xf1, 0xf5, 0xd6, 0x33, 0xf4, 0x19, 0x0e, 0xf9, 0xc5, 0x25, 0xe8,
+ 0x0f, 0x0e, 0xee, 0xd0, 0x92, 0xe2, 0xf5, 0x01, 0xf0, 0x01, 0x10, 0x0c, 0x0a,
+ 0xeb, 0xd1, 0xc0, 0x04, 0x25, 0x22, 0xc9, 0xbd, 0xf8, 0xff, 0x17, 0xe9, 0x2d,
+ 0x1c, 0xcd, 0xd5, 0x2d, 0xae, 0x0d, 0x05, 0xf6, 0x1b, 0x0f, 0xf7, 0xeb, 0xf9,
+ 0xe6, 0xe2, 0x1d, 0x0c, 0xc3, 0x0f, 0x1f, 0xb7, 0xf7, 0xcb, 0x22, 0x26, 0xfe,
+ 0x16, 0x30, 0xbe, 0x18, 0xbd, 0x24, 0x2c, 0xe0, 0x00, 0xdf, 0xa5, 0xe1, 0x28,
+ 0x1a, 0x09, 0xf0, 0xef, 0xc9, 0x13, 0x3c, 0x06, 0xd6, 0x4c, 0xe1, 0x04, 0xfc,
+ 0x12, 0xf0, 0xda, 0xcd, 0x15, 0x0a, 0x67, 0xf1, 0x1e, 0xe9, 0xf7, 0x0c, 0x20,
+ 0xf4, 0x3f, 0x11, 0xfd, 0x38, 0x07, 0x0b, 0xf0, 0xde, 0xff, 0x21, 0x15, 0x14,
+ 0x02, 0x15, 0xcd, 0x70, 0xba, 0x08, 0xdd, 0xf5, 0xe5, 0xd9, 0xe7, 0x4b, 0x61,
+ 0x0e, 0x15, 0x0a, 0xe7, 0x34, 0xe6, 0xd0, 0xc0, 0xf4, 0x28, 0x2e, 0x22, 0xfd,
+ 0x07, 0xf8, 0xfe, 0xed, 0x24, 0x33, 0x03, 0x05, 0xd3, 0xd8, 0xd7, 0xd8, 0x3a,
+ 0x1e, 0xfd, 0x58, 0x16, 0x9e, 0xc8, 0x1f, 0xb8, 0xc0, 0xfa, 0x1f, 0x33, 0x0c,
+ 0xf5, 0xb7, 0x17, 0x25, 0x30, 0x21, 0xb6, 0xdd, 0x0f, 0x42, 0x0f, 0xdb, 0x22,
+ 0xc1, 0x91, 0xd3, 0x5c, 0x16, 0xc6, 0xdf, 0x01, 0x15, 0x0e, 0x42, 0xed, 0x1c,
+ 0x01, 0x7a, 0xbe, 0x28, 0x32, 0x1a, 0x04, 0xda, 0xff, 0xc1, 0x1e, 0xc2, 0x0c,
+ 0x3a, 0xdd, 0xe7, 0x38, 0xc3, 0x9a, 0x0a, 0x02, 0xf0, 0xfd, 0xf9, 0xce, 0xbb,
+ 0x8e, 0x27, 0xdf, 0x23, 0x38, 0x1e, 0xf5, 0x06, 0xfc, 0xdb, 0x43, 0xfe, 0xdf,
+ 0x35, 0x03, 0xf4, 0x14, 0x1c, 0xc8, 0xe1, 0xf0, 0xf1, 0xe0, 0xc3, 0xdd, 0xba,
+ 0xc9, 0xf3, 0x0e, 0xda, 0x07, 0xfc, 0x2c, 0xf7, 0x2c, 0x1c, 0xeb, 0x4e, 0xfd,
+ 0xef, 0xb4, 0x0a, 0xd2, 0x07, 0xb7, 0xe3, 0xcf, 0x0a, 0x07, 0xf9, 0x18, 0xa4,
+ 0xeb, 0x30, 0xaf, 0xf0, 0x0b, 0xfc, 0x3e, 0xf2, 0x24, 0x0b, 0xac, 0xb8, 0xfe,
+ 0xdc, 0xd9, 0x05, 0xd5, 0x16, 0x33, 0xe2, 0xf3, 0x15, 0xca, 0xd5, 0xc7, 0x10,
+ 0x0d, 0xd4, 0x16, 0x19, 0xab, 0x3e, 0xc0, 0xa5, 0xd3, 0xac, 0xed, 0x20, 0xf1,
+ 0xbf, 0x05, 0xf3, 0xc7, 0x44, 0x38, 0x33, 0x4f, 0xdd, 0xd4, 0x61, 0xff, 0x39,
+ 0xdd, 0x0d, 0x15, 0xfc, 0x58, 0x13, 0xe7, 0xc9, 0xfb, 0x1c, 0x0a, 0xcc, 0x74,
+ 0x99, 0xec, 0x00, 0xec, 0x01, 0xe0, 0xfb, 0xfb, 0xe5, 0xce, 0x24, 0xb5, 0x42,
+ 0x46, 0x02, 0xe5, 0xf9, 0x13, 0x1b, 0xd3, 0x00, 0x0a, 0xe9, 0xbd, 0xfe, 0x00,
+ 0x32, 0x1c, 0xc1, 0x2a, 0x0d, 0x0c, 0x07, 0xbb, 0xe1, 0xdd, 0x17, 0xd3, 0x06,
+ 0x02, 0x24, 0xc8, 0xbc, 0xd5, 0x45, 0xbe, 0x81, 0x53, 0xdf, 0x13, 0x11, 0x43,
+ 0x01, 0x00, 0xc8, 0xcb, 0xb1, 0xea, 0x1b, 0xcd, 0x24, 0x1b, 0xd9, 0xd0, 0x25,
+ 0xfe, 0xeb, 0xc7, 0x07, 0xe3, 0xf9, 0x9e, 0xda, 0x26, 0x04, 0xca, 0x05, 0xfc,
+ 0x12, 0x10, 0xdd, 0x1d, 0x26, 0xe1, 0xd8, 0x74, 0xe5, 0x92, 0x7f, 0x06, 0x08,
+ 0x0c, 0xc5, 0xfd, 0xee, 0xfc, 0xe1, 0xf7, 0xba, 0x2f, 0x25, 0xf7, 0xe6, 0xd9,
+ 0xe9, 0xee, 0x00, 0x58, 0xea, 0x2a, 0xec, 0xab, 0xdc, 0xb5, 0x29, 0x25, 0xfa,
+ 0xe5, 0x06, 0x25, 0xff, 0x24, 0x0e, 0x06, 0xf8, 0x16, 0x77, 0xbb, 0xf5, 0xe6,
+ 0xcb, 0xf0, 0xdf, 0x07, 0xea, 0x07, 0xd1, 0x2e, 0x15, 0xdf, 0xfd, 0x16, 0xed,
+ 0x33, 0x14, 0xfe, 0xe4, 0xc2, 0xe4, 0x10, 0x07, 0x24, 0xd8, 0xe7, 0x2d, 0x09,
+ 0x1e, 0xdc, 0xf8, 0xc0, 0x42, 0x17, 0x0e, 0x3a, 0x09, 0xde, 0xc9, 0xf0, 0xf0,
+ 0xd3, 0x00, 0x1e, 0xb5, 0xb6, 0xdb, 0x3d, 0x06, 0x0c, 0xe7, 0x43, 0x23, 0x06,
+ 0x19, 0xe4, 0x0c, 0xf8, 0x2a, 0xd2, 0x28, 0xe6, 0xf1, 0x31, 0xff, 0x16, 0xf9,
+ 0xb1, 0x20, 0x4e, 0xe1, 0x17, 0xfc, 0xe8, 0x2b, 0xfd, 0xeb, 0xf3, 0xf1, 0xea,
+ 0xd2, 0x16, 0x1d, 0x0b, 0x6c, 0x1a, 0xed, 0x03, 0x23, 0x11, 0xe8, 0xe8, 0x15,
+ 0x09, 0x25, 0xd3, 0x0e, 0xfa, 0xe1, 0xfa, 0xf3, 0x12, 0x04, 0x10, 0xca, 0x07,
+ 0x03, 0xce, 0xfb, 0xd5, 0x16, 0x06, 0x08, 0xd2, 0xea, 0xc3, 0xf8, 0x0d, 0xf7,
+ 0xea, 0xe6, 0x04, 0xc5, 0x09, 0xd8, 0x1c, 0xbb, 0x1c, 0x0f, 0x14, 0xc9, 0xf0,
+ 0xef, 0xd2, 0x1b, 0x07, 0x17, 0x31, 0x56, 0xee, 0x38, 0xf6, 0x10, 0xfb, 0x9f,
+ 0x11, 0xec, 0xf5, 0x1b, 0xf7, 0x27, 0x0e, 0x09, 0x32, 0xf7, 0xc1, 0xf8, 0x07,
+ 0xf7, 0xf3, 0xa3, 0xec, 0xc5, 0x71, 0xe1, 0x04, 0xeb, 0x3e, 0xf5, 0x03, 0x1a,
+ 0xe1, 0xec, 0x1a, 0xb9, 0xf6, 0x24, 0x21, 0xd6, 0xd7, 0x47, 0xb9, 0xe1, 0xef,
+ 0xed, 0x15, 0x10, 0xe0, 0xf0, 0xb4, 0x06, 0x36, 0x8f, 0xed, 0x16, 0xc6, 0x14,
+ 0xc2, 0xf8, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x15,
+ 0x1a, 0x00, 0x00, 0xf7, 0xf1, 0xff, 0xff, 0xaa, 0x0e, 0x00, 0x00, 0xcc, 0x66,
+ 0x00, 0x00, 0x67, 0xed, 0xff, 0xff, 0x7e, 0x1d, 0x00, 0x00, 0x14, 0x05, 0x00,
+ 0x00, 0xd9, 0xd3, 0xff, 0xff, 0xe0, 0x30, 0x00, 0x00, 0x3b, 0x29, 0x00, 0x00,
+ 0x40, 0x3e, 0x00, 0x00, 0x99, 0xfa, 0xff, 0xff, 0x83, 0x1b, 0x00, 0x00, 0x78,
+ 0xe4, 0xff, 0xff, 0xf8, 0x23, 0x00, 0x00, 0x0e, 0x25, 0x00, 0x00, 0x33, 0x06,
+ 0x00, 0x00, 0xfe, 0x32, 0x00, 0x00, 0x27, 0xe5, 0xff, 0xff, 0xba, 0x0d, 0x00,
+ 0x00, 0xc4, 0x51, 0x00, 0x00, 0x07, 0xf0, 0xff, 0xff, 0x40, 0xf2, 0xff, 0xff,
+ 0x2a, 0x57, 0x00, 0x00, 0xd1, 0x01, 0x00, 0x00, 0x11, 0x0e, 0x00, 0x00, 0x80,
+ 0xff, 0xff, 0xff, 0x51, 0x29, 0x00, 0x00, 0x53, 0x29, 0x00, 0x00, 0xcf, 0x38,
+ 0x00, 0x00, 0x78, 0x5f, 0x00, 0x00, 0x90, 0x13, 0x00, 0x00, 0xee, 0x08, 0x00,
+ 0x00, 0xec, 0xec, 0xff, 0xff, 0x2c, 0x3d, 0x00, 0x00, 0x53, 0x34, 0x00, 0x00,
+ 0xd2, 0x08, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xa9, 0xe5, 0xff, 0xff, 0x91,
+ 0x0c, 0x00, 0x00, 0xc7, 0x02, 0x00, 0x00, 0xdc, 0x12, 0x00, 0x00, 0x67, 0xd1,
+ 0xff, 0xff, 0x8b, 0xfc, 0xff, 0xff, 0x6e, 0x13, 0x00, 0x00, 0x3e, 0xe7, 0xff,
+ 0xff, 0x34, 0x53, 0x00, 0x00, 0x05, 0x3a, 0x00, 0x00, 0x5c, 0x1a, 0x00, 0x00,
+ 0xdd, 0x16, 0x00, 0x00, 0x31, 0x52, 0x00, 0x00, 0xa0, 0x0a, 0x00, 0x00, 0x4a,
+ 0x15, 0x00, 0x00, 0x26, 0x2f, 0x00, 0x00, 0xcb, 0x12, 0x00, 0x00, 0xd0, 0x1a,
+ 0x00, 0x00, 0xda, 0x19, 0x00, 0x00, 0x2e, 0x57, 0x00, 0x00, 0x3d, 0x04, 0x00,
+ 0x00, 0x9d, 0x28, 0x00, 0x00, 0x94, 0x09, 0x00, 0x00, 0x7f, 0xfa, 0xff, 0xff,
+ 0x11, 0x22, 0x00, 0x00, 0x06, 0x0a, 0x00, 0x00, 0xce, 0x4b, 0x00, 0x00, 0xff,
+ 0x16, 0x00, 0x00, 0xf2, 0x41, 0x00, 0x00, 0xca, 0x1c, 0x00, 0x00, 0x57, 0x28,
+ 0x00, 0x00, 0x6d, 0x27, 0x00, 0x00, 0x4a, 0x0a, 0x00, 0x00, 0xbf, 0x50, 0x00,
+ 0x00, 0x55, 0x3d, 0x00, 0x00, 0x59, 0x57, 0x00, 0x00, 0x44, 0x4c, 0x00, 0x00,
+ 0x32, 0x22, 0x00, 0x00, 0x88, 0x02, 0x00, 0x00, 0x73, 0xde, 0xff, 0xff, 0xbe,
+ 0x37, 0x00, 0x00, 0xca, 0x18, 0x00, 0x00, 0x3c, 0xfb, 0xff, 0xff, 0x0b, 0x42,
+ 0x00, 0x00, 0x68, 0x72, 0x00, 0x00, 0xff, 0xe9, 0xff, 0xff, 0x03, 0x0d, 0x00,
+ 0x00, 0x40, 0x22, 0x00, 0x00, 0x79, 0x2e, 0x00, 0x00, 0x3f, 0xe5, 0xff, 0xff,
+ 0x63, 0x33, 0x00, 0x00, 0x2c, 0x5f, 0x00, 0x00, 0x94, 0x2e, 0x00, 0x00, 0x71,
+ 0x01, 0x00, 0x00, 0x4e, 0x38, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x9e, 0x2e,
+ 0x00, 0x00, 0xc4, 0xdd, 0xff, 0xff, 0x1b, 0x0c, 0x00, 0x00, 0x23, 0x28, 0x00,
+ 0x00, 0xee, 0x1c, 0x00, 0x00, 0x8b, 0x2e, 0x00, 0x00, 0xff, 0xf7, 0xff, 0xff,
+ 0xab, 0x0b, 0x00, 0x00, 0x96, 0x3a, 0x00, 0x00, 0xdf, 0x2b, 0x00, 0x00, 0xc2,
+ 0x4e, 0x00, 0x00, 0x6f, 0x09, 0x00, 0x00, 0xc3, 0x6a, 0x00, 0x00, 0x61, 0x19,
+ 0x00, 0x00, 0x2c, 0xdc, 0xff, 0xff, 0xfb, 0x25, 0x00, 0x00, 0x67, 0x66, 0x00,
+ 0x00, 0x65, 0xf6, 0xff, 0xff, 0xf5, 0x6e, 0x00, 0x00, 0xb6, 0x17, 0x00, 0x00,
+ 0xc3, 0x08, 0x00, 0x00, 0x81, 0xf3, 0xff, 0xff, 0x6b, 0xe9, 0xff, 0xff, 0x36,
+ 0x38, 0x00, 0x00, 0xbb, 0x0e, 0x00, 0x00, 0x35, 0xcf, 0xff, 0xff, 0xdb, 0xd7,
+ 0xff, 0xff, 0xcd, 0xfb, 0xff, 0xff, 0x2f, 0x11, 0x00, 0x00, 0xfd, 0xfe, 0xff,
+ 0xff, 0x5d, 0x13, 0x00, 0x00, 0x45, 0x1c, 0x00, 0x00, 0xd6, 0x22, 0x00, 0x00,
+ 0xb2, 0x0a, 0x00, 0x00, 0x82, 0x17, 0x00, 0x00, 0x9a, 0x52, 0x00, 0x00, 0xe0,
+ 0xe2, 0xff, 0xff, 0x20, 0x02, 0x00, 0x00, 0x25, 0xfd, 0xff, 0xff, 0xb1, 0x2f,
+ 0x00, 0x00, 0xa0, 0x3b, 0x00, 0x00, 0xae, 0x26, 0x00, 0x00, 0xb5, 0x3e, 0x00,
+ 0x00, 0xb9, 0xfb, 0xff, 0xff, 0x2c, 0x40, 0x00, 0x00, 0x64, 0x39, 0x00, 0x00,
+ 0xeb, 0x46, 0x00, 0x00, 0x2a, 0x1c, 0x00, 0x00, 0xd9, 0x0a, 0x00, 0x00, 0xf0,
+ 0x40, 0x00, 0x00, 0x55, 0xda, 0xff, 0xff, 0xa7, 0x1e, 0x00, 0x00, 0xa3, 0xf6,
+ 0xff, 0xff, 0x68, 0x31, 0x00, 0x00, 0x23, 0x29, 0x00, 0x00, 0x0f, 0x25, 0x00,
+ 0x00, 0x55, 0xfd, 0xff, 0xff, 0x83, 0x1c, 0x00, 0x00, 0xc6, 0x87, 0x00, 0x00,
+ 0x65, 0xf8, 0xff, 0xff, 0x13, 0xfe, 0xff, 0xff, 0x56, 0x13, 0x00, 0x00, 0xfc,
+ 0x17, 0x00, 0x00, 0x4e, 0x10, 0x00, 0x00, 0xfd, 0x15, 0x00, 0x00, 0x93, 0xd1,
+ 0xff, 0xff, 0x13, 0x12, 0x00, 0x00, 0x9d, 0x14, 0x00, 0x00, 0xf3, 0xde, 0xff,
+ 0xff, 0x83, 0x37, 0x00, 0x00, 0x9f, 0xf9, 0xff, 0xff, 0xbb, 0xed, 0xff, 0xff,
+ 0x05, 0x2e, 0x00, 0x00, 0xa8, 0x02, 0x00, 0x00, 0x23, 0x5c, 0x00, 0x00, 0xb8,
+ 0xf8, 0xff, 0xff, 0xd8, 0x08, 0x00, 0x00, 0x05, 0x44, 0x00, 0x00, 0xc2, 0x5b,
+ 0x00, 0x00, 0xe8, 0x0a, 0x00, 0x00, 0xe8, 0x47, 0x00, 0x00, 0x1e, 0x1b, 0x00,
+ 0x00, 0xcd, 0xff, 0xff, 0xff, 0x0e, 0x1c, 0x00, 0x00, 0x4c, 0x40, 0x00, 0x00,
+ 0x5b, 0x28, 0x00, 0x00, 0x17, 0x3a, 0x00, 0x00, 0x1b, 0x01, 0x00, 0x00, 0x53,
+ 0x77, 0x00, 0x00, 0xf4, 0x42, 0x00, 0x00, 0xe8, 0x02, 0x00, 0x00, 0x5e, 0xed,
+ 0xff, 0xff, 0x78, 0x17, 0x00, 0x00, 0x32, 0x26, 0x00, 0x00, 0x50, 0x1a, 0x00,
+ 0x00, 0x91, 0xfb, 0xff, 0xff, 0xb9, 0x4f, 0x00, 0x00, 0xd8, 0x05, 0x00, 0x00,
+ 0x64, 0x38, 0x00, 0x00, 0x17, 0x2f, 0x00, 0x00, 0x81, 0x1e, 0x00, 0x00, 0xf4,
+ 0x17, 0x00, 0x00, 0x27, 0x26, 0x00, 0x00, 0xea, 0xed, 0xff, 0xff, 0x1a, 0x3b,
+ 0x00, 0x00, 0x87, 0x7b, 0x00, 0x00, 0xcd, 0x22, 0x00, 0x00, 0xb0, 0x53, 0x00,
+ 0x00, 0x7a, 0xda, 0xff, 0xff, 0x7f, 0x0c, 0x00, 0x00, 0x01, 0x43, 0x00, 0x00,
+ 0x2e, 0x07, 0x00, 0x00, 0x89, 0xf3, 0xff, 0xff, 0xdf, 0x2b, 0x00, 0x00, 0xb1,
+ 0x61, 0x00, 0x00, 0xe0, 0x1c, 0x00, 0x00, 0x95, 0x4d, 0x00, 0x00, 0x02, 0x01,
+ 0x00, 0x00, 0x9e, 0x40, 0x00, 0x00, 0x44, 0x4a, 0x00, 0x00, 0xa2, 0xcb, 0xff,
+ 0xff, 0x9d, 0x16, 0x00, 0x00, 0xca, 0x47, 0x00, 0x00, 0x33, 0x0e, 0x00, 0x00,
+ 0x2e, 0x50, 0x00, 0x00, 0xf9, 0x28, 0x00, 0x00, 0x40, 0x17, 0x00, 0x00, 0x03,
+ 0x57, 0x00, 0x00, 0xfe, 0xe3, 0xff, 0xff, 0xa8, 0x2f, 0x00, 0x00, 0xe9, 0x00,
+ 0x00, 0x00, 0xa6, 0x07, 0x00, 0x00, 0x78, 0x10, 0x00, 0x00, 0xd3, 0x45, 0x00,
+ 0x00, 0xd3, 0xce, 0xff, 0xff, 0x0f, 0x2d, 0x00, 0x00, 0x83, 0xf4, 0xff, 0xff,
+ 0xba, 0x2a, 0x00, 0x00, 0xec, 0x15, 0x00, 0x00, 0x94, 0x5d, 0x00, 0x00, 0x83,
+ 0x0e, 0x00, 0x00, 0xe6, 0x1c, 0x00, 0x00, 0x98, 0x39, 0x00, 0x00, 0x9c, 0x3a,
+ 0x00, 0x00, 0x7e, 0x05, 0x00, 0x00, 0x17, 0x46, 0x00, 0x00, 0xa8, 0xf9, 0xff,
+ 0xff, 0x40, 0x0d, 0x00, 0x00, 0x40, 0x12, 0x00, 0x00, 0x1a, 0x07, 0x00, 0x00,
+ 0x32, 0x23, 0x00, 0x00, 0x3f, 0x0c, 0x00, 0x00, 0xd5, 0x08, 0x00, 0x00, 0x3c,
+ 0x01, 0x00, 0x00, 0xe3, 0x75, 0x00, 0x00, 0xa3, 0x1f, 0x00, 0x00, 0xa1, 0x27,
+ 0x00, 0x00, 0xd0, 0x23, 0x00, 0x00, 0xeb, 0xdc, 0xff, 0xff, 0x99, 0x05, 0x00,
+ 0x00, 0x27, 0x0e, 0x00, 0x00, 0xd7, 0xf2, 0xff, 0xff, 0xce, 0xfc, 0xff, 0xff,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xf1, 0x25, 0xba, 0xa3, 0xe0,
+ 0xeb, 0xbd, 0x28, 0xce, 0x20, 0xc9, 0xfb, 0x37, 0x28, 0x43, 0xea, 0x70, 0xa9,
+ 0xe0, 0x2c, 0xe1, 0x9e, 0x5f, 0xc9, 0x52, 0xd2, 0x28, 0x21, 0xcb, 0xef, 0xc2,
+ 0x08, 0x13, 0xc5, 0x29, 0xfa, 0x40, 0xfa, 0x0d, 0xfd, 0xdb, 0x16, 0x50, 0x43,
+ 0xb5, 0xf1, 0x5d, 0xdc, 0x2d, 0x42, 0x0d, 0xd9, 0x94, 0x22, 0xae, 0x1f, 0x31,
+ 0x13, 0xcc, 0xcf, 0xc2, 0xa6, 0x81, 0xc5, 0xaa, 0x17, 0xaf, 0xef, 0xd4, 0x0c,
+ 0xab, 0xb2, 0xa8, 0x12, 0x36, 0xa5, 0x3c, 0xd4, 0xbf, 0xbb, 0xca, 0x0f, 0xaf,
+ 0x14, 0xb6, 0xdb, 0xb0, 0xcb, 0xb1, 0x8b, 0x31, 0xd0, 0x19, 0xcd, 0xab, 0x47,
+ 0x16, 0xb8, 0x29, 0xa8, 0xfa, 0x82, 0x59, 0xa5, 0xad, 0xb2, 0xa6, 0xde, 0xbf,
+ 0xbd, 0x17, 0xcf, 0xb9, 0x1a, 0xcd, 0x17, 0xc4, 0xe2, 0xd0, 0xe2, 0x2f, 0xc8,
+ 0xbf, 0x3e, 0xd4, 0xbe, 0xae, 0xe6, 0x03, 0x1b, 0x2e, 0x47, 0xa0, 0xe2, 0xb4,
+ 0xc4, 0x28, 0xb1, 0xb7, 0xe4, 0x18, 0x00, 0xcb, 0x18, 0x3a, 0xea, 0x01, 0x22,
+ 0xe1, 0xb8, 0xd9, 0xfd, 0xbb, 0xd3, 0xd5, 0xc7, 0xde, 0xc1, 0xf8, 0xab, 0xab,
+ 0x44, 0xb7, 0x08, 0xd9, 0xd2, 0xc9, 0xfe, 0xa4, 0x1a, 0xd8, 0xc5, 0x22, 0x9a,
+ 0x48, 0xd6, 0x30, 0x38, 0x1e, 0x38, 0xb8, 0xeb, 0x1f, 0x10, 0xd8, 0xbe, 0x15,
+ 0xde, 0x24, 0x0d, 0x14, 0xa7, 0x97, 0xab, 0x26, 0xeb, 0xe7, 0x9b, 0xd4, 0xb2,
+ 0xf3, 0xc8, 0x5d, 0x33, 0x0f, 0xce, 0xc5, 0xce, 0xaa, 0x50, 0xbc, 0x1e, 0x11,
+ 0xbe, 0xde, 0xe2, 0xc6, 0xee, 0xba, 0xf4, 0xe9, 0x0e, 0x97, 0x30, 0x3f, 0x01,
+ 0xd8, 0x5c, 0x0f, 0xec, 0x22, 0xe0, 0x3e, 0xbb, 0xd8, 0x39, 0xc1, 0xb3, 0x02,
+ 0x15, 0xd0, 0x17, 0xf9, 0x32, 0xc6, 0xcf, 0xb2, 0xbc, 0x20, 0xbb, 0xd3, 0xc7,
+ 0x2c, 0xb9, 0xd7, 0x2f, 0x1c, 0xe4, 0x4d, 0x65, 0x2e, 0x08, 0x32, 0xd8, 0x38,
+ 0xe1, 0x52, 0x19, 0xc4, 0xf2, 0xb8, 0x16, 0x91, 0x5a, 0x27, 0xca, 0x20, 0x74,
+ 0xa5, 0x22, 0xb3, 0x2e, 0xdd, 0xe5, 0x2c, 0x14, 0x42, 0xf7, 0xe5, 0x40, 0xc0,
+ 0xf9, 0xb8, 0x07, 0xee, 0x0f, 0x1e, 0xed, 0xa3, 0xc8, 0x3b, 0x0d, 0xa4, 0x0f,
+ 0xe8, 0xb8, 0xfd, 0x16, 0x64, 0xd9, 0x46, 0xe3, 0xce, 0xe9, 0x2d, 0x48, 0x34,
+ 0x4f, 0x78, 0x3a, 0x56, 0xe2, 0x55, 0x0d, 0x40, 0xf9, 0x4e, 0x5f, 0x68, 0xea,
+ 0xb9, 0x63, 0xc9, 0x30, 0x50, 0x57, 0x30, 0xfb, 0x4d, 0xf6, 0x55, 0x2c, 0x56,
+ 0x35, 0x5e, 0x78, 0xd3, 0x37, 0xe9, 0x3f, 0x64, 0xb0, 0xe5, 0x49, 0xdb, 0x55,
+ 0x10, 0x7f, 0x9a, 0x61, 0x47, 0x4e, 0x52, 0x27, 0x44, 0x45, 0xdf, 0x2e, 0x46,
+ 0xe4, 0x53, 0xe4, 0x2c, 0x28, 0x2f, 0x2b, 0xd6, 0x3e, 0x37, 0xbb, 0x28, 0x43,
+ 0x59, 0x18, 0xe8, 0xd4, 0xe8, 0xd0, 0x5f, 0x0a, 0x47, 0x43, 0xe5, 0x4f, 0x62,
+ 0x22, 0xf4, 0x00, 0x32, 0xee, 0xb8, 0x27, 0xfd, 0xde, 0x3f, 0x3b, 0x43, 0x05,
+ 0x4b, 0x38, 0x3c, 0x31, 0x29, 0x40, 0x10, 0x3c, 0x65, 0x9d, 0x38, 0xe0, 0x23,
+ 0x1e, 0x38, 0xfe, 0x52, 0xed, 0x31, 0x44, 0xd8, 0x6c, 0xb0, 0x33, 0xd4, 0xd4,
+ 0xf7, 0xca, 0x4f, 0x10, 0xd6, 0xf2, 0x2c, 0x3d, 0xee, 0x1f, 0xe7, 0x00, 0xf0,
+ 0x58, 0x6d, 0x5d, 0xc1, 0x1b, 0x0d, 0x6a, 0x27, 0x55, 0x05, 0x43, 0xa8, 0xdd,
+ 0xe8, 0x2a, 0x46, 0x44, 0x53, 0xb4, 0x29, 0xcc, 0xdb, 0x46, 0x26, 0x27, 0x52,
+ 0x0e, 0x45, 0xfd, 0x17, 0xe1, 0x6b, 0xe1, 0xb5, 0x01, 0x2b, 0x99, 0xf9, 0x23,
+ 0xe7, 0x34, 0xcb, 0x39, 0x2d, 0xc2, 0x43, 0x5a, 0x0e, 0xeb, 0x3b, 0xe4, 0x19,
+ 0xd4, 0x4c, 0x30, 0x6b, 0x3e, 0xdc, 0x46, 0x39, 0x38, 0xce, 0x47, 0x2c, 0xc6,
+ 0xda, 0xfe, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x8b,
+ 0x3f, 0x00, 0x00, 0x49, 0xbd, 0xff, 0xff, 0xee, 0xfe, 0xff, 0xff, 0x04, 0x00,
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0xd8, 0x56, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x54, 0x4f, 0x43, 0x4f,
+ 0x20, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, 0x2e, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x78, 0x54, 0xff, 0xff, 0xf0, 0x08,
+ 0x00, 0x00, 0xe4, 0x08, 0x00, 0x00, 0xd8, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x1f, 0x00, 0x00, 0x00, 0x78, 0x08, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00,
+ 0xc0, 0x07, 0x00, 0x00, 0x78, 0x07, 0x00, 0x00, 0x34, 0x07, 0x00, 0x00, 0xec,
+ 0x06, 0x00, 0x00, 0xa8, 0x06, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x1c, 0x06,
+ 0x00, 0x00, 0xd4, 0x05, 0x00, 0x00, 0x90, 0x05, 0x00, 0x00, 0x48, 0x05, 0x00,
+ 0x00, 0x04, 0x05, 0x00, 0x00, 0xbc, 0x04, 0x00, 0x00, 0x78, 0x04, 0x00, 0x00,
+ 0x30, 0x04, 0x00, 0x00, 0xec, 0x03, 0x00, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x60,
+ 0x03, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0xd4, 0x02, 0x00, 0x00, 0x8c, 0x02,
+ 0x00, 0x00, 0x48, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xbc, 0x01, 0x00,
+ 0x00, 0x74, 0x01, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00,
+ 0x84, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x66,
+ 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x00, 0x1c, 0x00,
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xce, 0xff, 0xff,
+ 0xff, 0x00, 0x00, 0x80, 0x3f, 0x01, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x42, 0xf8, 0xff, 0xff, 0x00,
+ 0x00, 0x00, 0x11, 0x03, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00,
+ 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x08, 0x00, 0x04,
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1f,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00,
+ 0x00, 0x00, 0x8a, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00,
+ 0x00, 0x2c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0a, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0a,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00,
+ 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00,
+ 0x16, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x10, 0x00, 0x0e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x3c, 0x00, 0x00, 0x00, 0x30, 0x00,
+ 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x18, 0x00, 0x07,
+ 0x00, 0x08, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x14, 0x00, 0x0e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1b, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x82, 0xf9, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
+ 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xd0, 0xf9, 0xff, 0xff, 0x00,
+ 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0xc2, 0xf9, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c,
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5e, 0xf9, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x2e, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x06,
+ 0xfa, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00,
+ 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x54, 0xfa, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b,
+ 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x46, 0xfa,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00,
+ 0x00, 0x1c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xe2, 0xf9, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x03, 0x00,
+ 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00,
+ 0x00, 0x8a, 0xfa, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xd8,
+ 0xfa, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
+ 0x00, 0x27, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00,
+ 0xca, 0xfa, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x28,
+ 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x66, 0xfa,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x28,
+ 0x00, 0x00, 0x00, 0x0e, 0xfb, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x5c, 0xfb, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x25, 0x00,
+ 0x00, 0x00, 0x4e, 0xfb, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0xea, 0xfa, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00,
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x24, 0x00, 0x00, 0x00, 0x92, 0xfb, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01,
+ 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0xe0, 0xfb, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00,
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
+ 0x55, 0x00, 0x00, 0x00, 0xd2, 0xfb, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0x6e, 0xfb, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x53, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x19,
+ 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x16, 0xfc, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x64, 0xfc, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03,
+ 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x52,
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x18, 0x00,
+ 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x56, 0xfc, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0xf2, 0xfb, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00,
+ 0x00, 0x17, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x9a, 0xfc, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18,
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xe8, 0xfc, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x4e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00,
+ 0x16, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0xda, 0xfc, 0xff, 0xff, 0x00,
+ 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x76, 0xfc, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x03, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x4a,
+ 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x1e, 0xfd,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00,
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6c, 0xfd, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x47, 0x00,
+ 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x5e, 0xfd, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
+ 0x1c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xfa, 0xfc, 0xff, 0xff, 0x00,
+ 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
+ 0x00, 0x46, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
+ 0xa2, 0xfd, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x24,
+ 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xf0, 0xfd,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x43, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0xe2,
+ 0xfd, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x28, 0x00,
+ 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x7e, 0xfd, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x44, 0x00,
+ 0x00, 0x00, 0x26, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00,
+ 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x74, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x03, 0x00,
+ 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00,
+ 0x00, 0x66, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02,
+ 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00,
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
+ 0x40, 0x00, 0x00, 0x00, 0xaa, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0xf8, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x3d,
+ 0x00, 0x00, 0x00, 0xea, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00,
+ 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x86, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b,
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x0d, 0x00,
+ 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x2e, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x7c, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3a, 0x00,
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00,
+ 0x00, 0x39, 0x00, 0x00, 0x00, 0x6e, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02,
+ 0x02, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x37, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
+ 0x0b, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xb2, 0xff, 0xff, 0xff, 0x00,
+ 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00,
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08,
+ 0x00, 0x0c, 0x00, 0x07, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36,
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x0a, 0x00,
+ 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x18, 0x00, 0x08,
+ 0x00, 0x0c, 0x00, 0x10, 0x00, 0x07, 0x00, 0x14, 0x00, 0x0e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1c,
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xaa, 0xff, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x22, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0e, 0x00, 0x1a, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x07, 0x00,
+ 0x14, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x38, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0e, 0x00, 0x14, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x10,
+ 0x00, 0x07, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x22, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x57,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x59, 0x00,
+ 0x00, 0x00, 0xb4, 0x2f, 0x01, 0x00, 0x1c, 0x29, 0x01, 0x00, 0x88, 0x22, 0x01,
+ 0x00, 0x04, 0x1c, 0x01, 0x00, 0x8c, 0x15, 0x01, 0x00, 0x04, 0x0f, 0x01, 0x00,
+ 0x8c, 0x02, 0x01, 0x00, 0x04, 0xf6, 0x00, 0x00, 0x8c, 0xe9, 0x00, 0x00, 0xa4,
+ 0xe8, 0x00, 0x00, 0x6c, 0xe7, 0x00, 0x00, 0x24, 0xe6, 0x00, 0x00, 0x2c, 0xe4,
+ 0x00, 0x00, 0x24, 0xe2, 0x00, 0x00, 0x2c, 0xe0, 0x00, 0x00, 0x24, 0xde, 0x00,
+ 0x00, 0xac, 0xda, 0x00, 0x00, 0x24, 0xd7, 0x00, 0x00, 0xac, 0xd3, 0x00, 0x00,
+ 0x24, 0xd0, 0x00, 0x00, 0xac, 0xc9, 0x00, 0x00, 0x24, 0xc3, 0x00, 0x00, 0xac,
+ 0xbc, 0x00, 0x00, 0x24, 0xb6, 0x00, 0x00, 0xac, 0xaf, 0x00, 0x00, 0x24, 0xa9,
+ 0x00, 0x00, 0xac, 0xa2, 0x00, 0x00, 0x0c, 0xa2, 0x00, 0x00, 0x74, 0xa1, 0x00,
+ 0x00, 0xf0, 0xa0, 0x00, 0x00, 0x5c, 0xa0, 0x00, 0x00, 0xd0, 0x9f, 0x00, 0x00,
+ 0x78, 0x9f, 0x00, 0x00, 0xa4, 0x9e, 0x00, 0x00, 0x0c, 0x9e, 0x00, 0x00, 0x68,
+ 0x9d, 0x00, 0x00, 0xe8, 0x96, 0x00, 0x00, 0x70, 0x90, 0x00, 0x00, 0xcc, 0x8f,
+ 0x00, 0x00, 0x28, 0x8f, 0x00, 0x00, 0xa8, 0x88, 0x00, 0x00, 0x30, 0x82, 0x00,
+ 0x00, 0x8c, 0x81, 0x00, 0x00, 0xe8, 0x80, 0x00, 0x00, 0x68, 0x7a, 0x00, 0x00,
+ 0xf0, 0x6d, 0x00, 0x00, 0x4c, 0x6d, 0x00, 0x00, 0xa8, 0x6c, 0x00, 0x00, 0x28,
+ 0x60, 0x00, 0x00, 0xb0, 0x53, 0x00, 0x00, 0x0c, 0x53, 0x00, 0x00, 0x68, 0x52,
+ 0x00, 0x00, 0x88, 0x51, 0x00, 0x00, 0x50, 0x50, 0x00, 0x00, 0xac, 0x4f, 0x00,
+ 0x00, 0x08, 0x4f, 0x00, 0x00, 0xc8, 0x4d, 0x00, 0x00, 0xd0, 0x4b, 0x00, 0x00,
+ 0x2c, 0x4b, 0x00, 0x00, 0x88, 0x4a, 0x00, 0x00, 0x88, 0x48, 0x00, 0x00, 0x90,
+ 0x46, 0x00, 0x00, 0xec, 0x45, 0x00, 0x00, 0x48, 0x45, 0x00, 0x00, 0x48, 0x43,
+ 0x00, 0x00, 0xd0, 0x3f, 0x00, 0x00, 0x2c, 0x3f, 0x00, 0x00, 0x88, 0x3e, 0x00,
+ 0x00, 0x08, 0x3b, 0x00, 0x00, 0x90, 0x37, 0x00, 0x00, 0xec, 0x36, 0x00, 0x00,
+ 0x48, 0x36, 0x00, 0x00, 0xc8, 0x32, 0x00, 0x00, 0x50, 0x2c, 0x00, 0x00, 0xac,
+ 0x2b, 0x00, 0x00, 0x08, 0x2b, 0x00, 0x00, 0x88, 0x24, 0x00, 0x00, 0x10, 0x1e,
+ 0x00, 0x00, 0x6c, 0x1d, 0x00, 0x00, 0xc8, 0x1c, 0x00, 0x00, 0x48, 0x16, 0x00,
+ 0x00, 0xd0, 0x0f, 0x00, 0x00, 0x2c, 0x0f, 0x00, 0x00, 0x88, 0x0e, 0x00, 0x00,
+ 0x08, 0x08, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0xec, 0x00, 0x00, 0x00, 0x78,
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x52, 0xd8, 0xfe, 0xff, 0x00, 0x00,
+ 0x00, 0x09, 0x54, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0xec, 0x5e, 0xff, 0xff, 0x2c, 0x00, 0x00, 0x00,
+ 0x20, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00,
+ 0x00, 0x00, 0x81, 0x80, 0x00, 0x3c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x3f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xbf, 0x05, 0x00, 0x00, 0x00,
+ 0x69, 0x6e, 0x70, 0x75, 0x74, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0xc2, 0xd8, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x09, 0x5c, 0x00, 0x00,
+ 0x00, 0x55, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x44, 0xdf, 0xfe, 0xff, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3b, 0x21, 0x00, 0x00,
+ 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f,
+ 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x52,
+ 0x65, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x31, 0x00, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x32, 0xd9, 0xfe,
+ 0xff, 0x00, 0x00, 0x00, 0x09, 0x84, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00,
+ 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xcc, 0x5f, 0xff, 0xff, 0x30,
+ 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc1, 0xc0, 0xc0, 0x3c,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65,
+ 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e,
+ 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x39,
+ 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x52, 0x65,
+ 0x6c, 0x75, 0x36, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
+ 0x00, 0xd2, 0xd9, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x02, 0x64, 0x06, 0x00, 0x00,
+ 0x0f, 0x00, 0x00, 0x00, 0x20, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x54,
+ 0xe0, 0xfe, 0xff, 0x10, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x09, 0xc1, 0x56, 0x38, 0x70, 0xbe,
+ 0x8a, 0x38, 0xc6, 0x5e, 0x5c, 0x38, 0x6b, 0x13, 0x7e, 0x38, 0x35, 0xee, 0x4e,
+ 0x38, 0x92, 0x3c, 0xb2, 0x38, 0x73, 0x8f, 0x83, 0x38, 0x0e, 0x10, 0x96, 0x38,
+ 0x30, 0xad, 0x59, 0x38, 0x3a, 0xfb, 0x97, 0x38, 0x7d, 0xae, 0x8d, 0x38, 0x37,
+ 0x9b, 0x8a, 0x38, 0x06, 0xbc, 0x4d, 0x38, 0x17, 0x10, 0x7e, 0x38, 0x6a, 0xf4,
+ 0x80, 0x38, 0x76, 0x67, 0x2f, 0x38, 0xcc, 0x91, 0x68, 0x38, 0x9a, 0x18, 0x55,
+ 0x38, 0x1b, 0x65, 0x30, 0x38, 0x52, 0xad, 0x97, 0x38, 0x99, 0x46, 0x80, 0x38,
+ 0x7e, 0x0e, 0x81, 0x38, 0x50, 0xe4, 0x69, 0x38, 0xc7, 0x6b, 0x51, 0x38, 0x9b,
+ 0x88, 0x39, 0x38, 0xf3, 0xa1, 0xc5, 0x38, 0x62, 0xe9, 0x42, 0x38, 0x89, 0xe8,
+ 0xad, 0x38, 0x8e, 0xc1, 0xc0, 0x38, 0x2c, 0xf5, 0x85, 0x38, 0x94, 0xee, 0x7c,
+ 0x38, 0x4c, 0xde, 0x9f, 0x38, 0xea, 0xa8, 0x98, 0x38, 0xe4, 0x06, 0x5e, 0x38,
+ 0x83, 0x3e, 0x92, 0x38, 0x1b, 0x6c, 0x4d, 0x38, 0x38, 0xee, 0x8d, 0x38, 0xe2,
+ 0xb2, 0x82, 0x38, 0x8e, 0xc1, 0x55, 0x38, 0xc9, 0x3b, 0x9d, 0x38, 0xf6, 0x00,
+ 0x9a, 0x38, 0x65, 0x1f, 0x9f, 0x38, 0x38, 0xc2, 0x5a, 0x38, 0x8c, 0x70, 0x7b,
+ 0x38, 0xa7, 0x22, 0x53, 0x38, 0xe2, 0xe7, 0x55, 0x38, 0xfc, 0xcf, 0x8c, 0x38,
+ 0xed, 0x8b, 0x7a, 0x38, 0x13, 0xa5, 0x86, 0x38, 0x7f, 0xf3, 0x87, 0x38, 0x76,
+ 0x25, 0x69, 0x38, 0x2e, 0x32, 0x80, 0x38, 0x72, 0x5e, 0x95, 0x38, 0x7a, 0x2c,
+ 0x85, 0x38, 0xc3, 0x7d, 0x94, 0x38, 0x50, 0x99, 0x97, 0x38, 0x0a, 0x98, 0x80,
+ 0x38, 0x47, 0xa5, 0x4c, 0x38, 0x61, 0x07, 0x7c, 0x38, 0x4b, 0x39, 0x82, 0x38,
+ 0xc3, 0x09, 0x6f, 0x38, 0x41, 0xb8, 0x78, 0x38, 0x5f, 0x0e, 0x51, 0x38, 0x23,
+ 0xc2, 0x86, 0x38, 0x30, 0xc3, 0x98, 0x38, 0xa8, 0x15, 0x80, 0x38, 0xea, 0xe4,
+ 0x8b, 0x38, 0x8b, 0x83, 0x86, 0x38, 0x03, 0xff, 0x52, 0x38, 0x19, 0xcf, 0x84,
+ 0x38, 0x30, 0xfe, 0xad, 0x38, 0xd5, 0x13, 0x56, 0x38, 0x41, 0x60, 0x7f, 0x38,
+ 0x73, 0xa4, 0x81, 0x38, 0xd9, 0x0d, 0xbc, 0x38, 0xf5, 0xae, 0xa6, 0x38, 0x59,
+ 0xa6, 0x7f, 0x38, 0x04, 0xb7, 0x91, 0x38, 0xb0, 0x51, 0x88, 0x38, 0xdf, 0x68,
+ 0x85, 0x38, 0x73, 0xfc, 0x88, 0x38, 0x3e, 0xf8, 0x79, 0x38, 0xf6, 0x38, 0x97,
+ 0x38, 0x69, 0x3e, 0x97, 0x38, 0x50, 0xf3, 0x7a, 0x38, 0x91, 0x57, 0x5d, 0x38,
+ 0x06, 0x22, 0x63, 0x38, 0xaf, 0x51, 0x7c, 0x38, 0x6e, 0x68, 0xa1, 0x38, 0x08,
+ 0x2a, 0xa3, 0x38, 0x5b, 0x07, 0xb2, 0x38, 0x36, 0x72, 0x95, 0x38, 0x02, 0xcf,
+ 0x6e, 0x38, 0x17, 0x6b, 0x84, 0x38, 0x7f, 0x72, 0x78, 0x38, 0xc7, 0x37, 0x78,
+ 0x38, 0xb3, 0xd1, 0x61, 0x38, 0x69, 0xc3, 0x96, 0x38, 0x8e, 0x04, 0x50, 0x38,
+ 0x4b, 0x1c, 0x89, 0x38, 0x7d, 0x9d, 0x7f, 0x38, 0xb0, 0x7d, 0x5f, 0x38, 0xe8,
+ 0x6b, 0x70, 0x38, 0xd3, 0x12, 0x65, 0x38, 0x5b, 0x57, 0x91, 0x38, 0x35, 0x42,
+ 0x6d, 0x38, 0x3d, 0xa2, 0x89, 0x38, 0xa9, 0xdb, 0x56, 0x38, 0x8e, 0x11, 0x5f,
+ 0x38, 0x0b, 0x42, 0x4b, 0x38, 0xe7, 0x81, 0xc2, 0x38, 0x9e, 0xfc, 0x61, 0x38,
+ 0x95, 0xd3, 0xb9, 0x38, 0x15, 0x9f, 0x93, 0x38, 0x07, 0x4e, 0x39, 0x38, 0x9e,
+ 0xa7, 0x70, 0x38, 0x4d, 0xd4, 0x61, 0x38, 0xc6, 0x72, 0x70, 0x38, 0x04, 0xf0,
+ 0xa8, 0x38, 0x59, 0x15, 0xd0, 0x38, 0x9c, 0x9a, 0xbf, 0x38, 0x39, 0x42, 0x84,
+ 0x38, 0xfa, 0x8a, 0x8d, 0x38, 0x36, 0x1c, 0x3a, 0x38, 0xfc, 0x64, 0x61, 0x38,
+ 0x61, 0xb6, 0x73, 0x38, 0x3d, 0x27, 0x75, 0x38, 0xd9, 0xc4, 0x97, 0x38, 0x36,
+ 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56,
+ 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31,
+ 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x39, 0x5f, 0x70, 0x6f, 0x69,
+ 0x6e, 0x74, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x44,
+ 0x5f, 0x62, 0x69, 0x61, 0x73, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0x00,
+ 0x00, 0x00, 0x46, 0xe0, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x02, 0x6c, 0x06, 0x00,
+ 0x00, 0x11, 0x00, 0x00, 0x00, 0x24, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0xa2, 0xd9, 0xfe, 0xff, 0x14, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x8f,
+ 0xcb, 0x23, 0x39, 0x92, 0x83, 0xcf, 0x38, 0x7c, 0x0d, 0xdd, 0x38, 0xbc, 0x8b,
+ 0x0a, 0x39, 0x18, 0x12, 0x7a, 0x39, 0x9b, 0x70, 0x06, 0x39, 0x6a, 0xc6, 0xff,
+ 0x38, 0x8b, 0x50, 0x1d, 0x39, 0x18, 0xe3, 0xe4, 0x38, 0xf7, 0x10, 0xdb, 0x38,
+ 0x6c, 0xc8, 0x1a, 0x39, 0x79, 0x8f, 0x3f, 0x39, 0xb3, 0x01, 0xe1, 0x38, 0xde,
+ 0x9f, 0xd4, 0x38, 0xdb, 0x07, 0x55, 0x39, 0xea, 0x41, 0x30, 0x39, 0xf5, 0xa0,
+ 0x3a, 0x39, 0x4b, 0x1f, 0x00, 0x39, 0x59, 0xf8, 0xe1, 0x38, 0xea, 0x98, 0xae,
+ 0x38, 0x56, 0x25, 0x36, 0x39, 0x43, 0x8e, 0xda, 0x38, 0xa3, 0x92, 0x53, 0x39,
+ 0xd0, 0x31, 0x66, 0x39, 0x14, 0x14, 0x51, 0x39, 0xa9, 0xf9, 0x2a, 0x39, 0x56,
+ 0x7e, 0xd5, 0x38, 0x7a, 0x79, 0x55, 0x39, 0xfc, 0xb2, 0x3a, 0x39, 0x8e, 0x31,
+ 0x95, 0x39, 0x4d, 0x04, 0x49, 0x39, 0x61, 0xaf, 0x20, 0x39, 0xa4, 0xb7, 0x04,
+ 0x39, 0x80, 0x50, 0x2a, 0x39, 0xff, 0xd1, 0x1a, 0x39, 0x4b, 0xe2, 0x3b, 0x39,
+ 0x02, 0xbb, 0x21, 0x39, 0x92, 0x95, 0x02, 0x39, 0xba, 0x20, 0x04, 0x39, 0x61,
+ 0x09, 0x6b, 0x39, 0x8b, 0x71, 0xca, 0x38, 0x98, 0x2e, 0x08, 0x39, 0xf6, 0xa6,
+ 0xe1, 0x38, 0x29, 0x2a, 0x43, 0x39, 0x0f, 0x60, 0x36, 0x39, 0xe2, 0x80, 0x08,
+ 0x39, 0xa7, 0x75, 0xf3, 0x38, 0xd4, 0x07, 0x09, 0x39, 0x68, 0x6f, 0x6c, 0x39,
+ 0xe4, 0x93, 0x7f, 0x39, 0xa9, 0x4c, 0x04, 0x39, 0x53, 0x42, 0x4a, 0x39, 0xe4,
+ 0x10, 0x1f, 0x39, 0x80, 0x86, 0xe8, 0x38, 0x73, 0xef, 0x04, 0x39, 0xf8, 0xa4,
+ 0x05, 0x39, 0x28, 0x51, 0x15, 0x39, 0x1e, 0x0c, 0x23, 0x39, 0x8c, 0x98, 0xa8,
+ 0x39, 0x05, 0x83, 0x7a, 0x39, 0xd1, 0x6b, 0x1a, 0x39, 0x17, 0x32, 0x8c, 0x39,
+ 0xb9, 0xa8, 0x18, 0x39, 0x00, 0x47, 0x03, 0x39, 0x0b, 0x94, 0x23, 0x39, 0xb5,
+ 0xd3, 0x5c, 0x39, 0x92, 0xba, 0xd8, 0x38, 0x4b, 0x61, 0x18, 0x39, 0x41, 0x3f,
+ 0x6f, 0x39, 0x84, 0x04, 0xac, 0x38, 0x30, 0x2b, 0x48, 0x39, 0xa4, 0x34, 0x23,
+ 0x39, 0x8b, 0x5e, 0xe8, 0x38, 0x2a, 0x30, 0xe6, 0x38, 0xf0, 0x4c, 0x09, 0x39,
+ 0x29, 0xe9, 0xac, 0x39, 0x2a, 0xdf, 0x08, 0x39, 0xed, 0x3c, 0x30, 0x39, 0x8f,
+ 0x37, 0xf1, 0x38, 0x94, 0xf6, 0xd6, 0x38, 0x8e, 0x51, 0xee, 0x38, 0x39, 0x4a,
+ 0x0f, 0x39, 0x83, 0xca, 0x44, 0x39, 0x70, 0x12, 0xf0, 0x38, 0x93, 0x9a, 0x34,
+ 0x39, 0x77, 0xfc, 0xdc, 0x38, 0x3b, 0xaa, 0xf1, 0x38, 0x86, 0x48, 0x16, 0x39,
+ 0x52, 0xb3, 0x3c, 0x39, 0xd2, 0x02, 0x37, 0x39, 0xba, 0x0a, 0xe7, 0x38, 0xe5,
+ 0x71, 0xfc, 0x38, 0x2d, 0x79, 0x05, 0x39, 0xb7, 0x1e, 0xb7, 0x38, 0x7f, 0x1e,
+ 0x97, 0x39, 0x91, 0xcc, 0xd1, 0x38, 0x2b, 0x81, 0x36, 0x39, 0xb6, 0x3f, 0x4a,
+ 0x39, 0x2f, 0x77, 0xe9, 0x38, 0xfc, 0x08, 0xe2, 0x38, 0xdb, 0xac, 0x41, 0x39,
+ 0x6e, 0x60, 0xe8, 0x38, 0x32, 0x5a, 0x0a, 0x39, 0x8c, 0x3a, 0xd8, 0x38, 0x97,
+ 0x15, 0xd5, 0x38, 0x4d, 0x54, 0xf7, 0x38, 0xc6, 0x45, 0x3a, 0x39, 0xcf, 0x4c,
+ 0x24, 0x39, 0xf7, 0x4e, 0x00, 0x39, 0x9b, 0xa0, 0x3f, 0x39, 0x7c, 0x4c, 0xeb,
+ 0x38, 0x34, 0x60, 0x40, 0x39, 0xd8, 0xdc, 0xe2, 0x38, 0x21, 0x86, 0xce, 0x38,
+ 0x5f, 0x05, 0x0d, 0x39, 0x79, 0x9f, 0x01, 0x39, 0x15, 0xa6, 0x19, 0x39, 0x70,
+ 0x6d, 0x1a, 0x39, 0x0e, 0xe6, 0x4b, 0x39, 0x22, 0x44, 0x35, 0x39, 0x7a, 0x72,
+ 0x45, 0x39, 0x75, 0x03, 0xb3, 0x38, 0xdf, 0x93, 0xe4, 0x38, 0xcf, 0x69, 0xd4,
+ 0x38, 0x56, 0xa3, 0x02, 0x39, 0x29, 0x15, 0xd1, 0x38, 0xf9, 0x55, 0xf6, 0x38,
+ 0xea, 0x4f, 0x0f, 0x39, 0x39, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c,
+ 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65,
+ 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f,
+ 0x39, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x64,
+ 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x5f, 0x62, 0x69, 0x61, 0x73,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xc2, 0xe6,
+ 0xfe, 0xff, 0x00, 0x00, 0x00, 0x09, 0x84, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00,
+ 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5c, 0x6d, 0xff, 0xff,
+ 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc1, 0xc0, 0xc0,
+ 0x3c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c,
+ 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65,
+ 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f,
+ 0x39, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x52,
+ 0x65, 0x6c, 0x75, 0x36, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x80, 0x00,
+ 0x00, 0x00, 0x62, 0xe7, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x09, 0x84, 0x00, 0x00,
+ 0x00, 0x2b, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0xfc, 0x6d, 0xff, 0xff, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18,
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0xc1, 0xc0, 0xc0, 0x3c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x4d,
+ 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f,
+ 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e,
+ 0x76, 0x32, 0x64, 0x5f, 0x38, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77, 0x69,
+ 0x73, 0x65, 0x2f, 0x52, 0x65, 0x6c, 0x75, 0x36, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00,
+ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x02, 0xe8, 0xfe, 0xff, 0x00, 0x00, 0x00,
+ 0x02, 0x64, 0x06, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x20, 0x06, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x84, 0xee, 0xfe, 0xff, 0x10, 0x04, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0,
+ 0x87, 0x53, 0x38, 0x9e, 0xa2, 0x7d, 0x38, 0x7f, 0xbe, 0x75, 0x38, 0xa1, 0x24,
+ 0x71, 0x38, 0x94, 0x4d, 0xb1, 0x38, 0x29, 0xe9, 0xae, 0x38, 0x71, 0x40, 0x73,
+ 0x38, 0x2d, 0x97, 0x66, 0x38, 0x02, 0xf5, 0x6a, 0x38, 0xdf, 0xd8, 0x99, 0x38,
+ 0x88, 0x06, 0x87, 0x38, 0xd1, 0xe2, 0x82, 0x38, 0x30, 0xc7, 0x82, 0x38, 0x47,
+ 0x1e, 0x87, 0x38, 0xc7, 0x7d, 0x50, 0x38, 0xac, 0x3f, 0x59, 0x38, 0xf9, 0xac,
+ 0x8c, 0x38, 0x30, 0xa1, 0x91, 0x38, 0x5b, 0x15, 0x7f, 0x38, 0xff, 0xfa, 0x54,
+ 0x38, 0x85, 0x90, 0x8c, 0x38, 0x37, 0x35, 0x7e, 0x38, 0xfa, 0xe0, 0x88, 0x38,
+ 0x18, 0x32, 0x87, 0x38, 0x52, 0x6e, 0x92, 0x38, 0xf0, 0xb0, 0x7e, 0x38, 0x18,
+ 0xd4, 0x73, 0x38, 0x67, 0x2d, 0x95, 0x38, 0x44, 0x40, 0x83, 0x38, 0x8c, 0xae,
+ 0x83, 0x38, 0x22, 0xa0, 0x86, 0x38, 0x1a, 0xad, 0x94, 0x38, 0xed, 0xfd, 0x8f,
+ 0x38, 0xa1, 0x1d, 0x65, 0x38, 0xff, 0x45, 0x67, 0x38, 0x24, 0x9b, 0x85, 0x38,
+ 0xfb, 0x5f, 0xb1, 0x38, 0xee, 0xe4, 0x8e, 0x38, 0x3f, 0xd4, 0x83, 0x38, 0x67,
+ 0x1c, 0x70, 0x38, 0xab, 0xef, 0x8a, 0x38, 0x9e, 0x4b, 0x83, 0x38, 0x4d, 0x92,
+ 0x5c, 0x38, 0xd9, 0x84, 0x7a, 0x38, 0x41, 0xde, 0x51, 0x38, 0x2d, 0x3c, 0x75,
+ 0x38, 0x6d, 0x6f, 0x96, 0x38, 0xb5, 0x6d, 0x95, 0x38, 0xdc, 0xf4, 0x31, 0x38,
+ 0x74, 0x9c, 0x2c, 0x38, 0xb6, 0x91, 0x8b, 0x38, 0xa3, 0xac, 0x32, 0x38, 0x8e,
+ 0xf8, 0x80, 0x38, 0x33, 0x35, 0x66, 0x38, 0x91, 0x5c, 0x41, 0x38, 0x70, 0x7b,
+ 0x88, 0x38, 0xa8, 0x31, 0x85, 0x38, 0x4a, 0xf1, 0x50, 0x38, 0x20, 0x68, 0x86,
+ 0x38, 0x2f, 0x82, 0x80, 0x38, 0x08, 0x63, 0x43, 0x38, 0x62, 0x65, 0x70, 0x38,
+ 0x5b, 0x58, 0x84, 0x38, 0x3c, 0x49, 0x97, 0x38, 0x98, 0x68, 0x60, 0x38, 0xd0,
+ 0xe8, 0x83, 0x38, 0x62, 0xca, 0x4b, 0x38, 0xc5, 0xaf, 0x81, 0x38, 0x0f, 0x62,
+ 0x73, 0x38, 0xff, 0xbd, 0x7f, 0x38, 0xc6, 0x43, 0x9f, 0x38, 0x96, 0x2d, 0x93,
+ 0x38, 0x40, 0x9d, 0x8f, 0x38, 0x54, 0xaa, 0xac, 0x38, 0x20, 0x51, 0xb0, 0x38,
+ 0x8e, 0xa3, 0x84, 0x38, 0xaa, 0x0f, 0xb8, 0x38, 0xad, 0x3d, 0x5f, 0x38, 0x45,
+ 0x6d, 0x83, 0x38, 0x4d, 0x6c, 0x6a, 0x38, 0xea, 0xc4, 0x87, 0x38, 0xa7, 0x52,
+ 0xac, 0x38, 0x12, 0xef, 0x95, 0x38, 0xeb, 0x1b, 0x8b, 0x38, 0xf0, 0xe9, 0xaf,
+ 0x38, 0xb3, 0xf3, 0x81, 0x38, 0xe4, 0xa8, 0x3e, 0x38, 0xde, 0x8f, 0x5d, 0x38,
+ 0xaa, 0xd3, 0x44, 0x38, 0x61, 0x96, 0x87, 0x38, 0x40, 0x35, 0x7a, 0x38, 0xf3,
+ 0x84, 0x90, 0x38, 0x05, 0x94, 0x79, 0x38, 0x90, 0x70, 0x93, 0x38, 0xa9, 0x54,
+ 0x6c, 0x38, 0x5d, 0x5e, 0x81, 0x38, 0xd6, 0x95, 0xa7, 0x38, 0xc0, 0xd9, 0x8d,
+ 0x38, 0xb8, 0xd5, 0x62, 0x38, 0x94, 0x3e, 0x6c, 0x38, 0x0c, 0xf8, 0xa4, 0x38,
+ 0xd5, 0x76, 0x54, 0x38, 0xe6, 0xe2, 0x93, 0x38, 0x74, 0x27, 0x3d, 0x38, 0x9e,
+ 0xcb, 0x93, 0x38, 0xeb, 0x8c, 0x5d, 0x38, 0x6f, 0x7d, 0x94, 0x38, 0x2e, 0x42,
+ 0xb9, 0x38, 0x94, 0x65, 0x55, 0x38, 0x1a, 0xe5, 0x66, 0x38, 0x17, 0x0f, 0x55,
+ 0x38, 0xbe, 0x91, 0x84, 0x38, 0x1b, 0xc5, 0x89, 0x38, 0x72, 0x38, 0x85, 0x38,
+ 0x87, 0xcc, 0x8f, 0x38, 0x96, 0x71, 0x83, 0x38, 0xbd, 0x04, 0x6f, 0x38, 0x33,
+ 0x99, 0x3c, 0x38, 0x73, 0x9d, 0x7d, 0x38, 0x8f, 0x0d, 0x4b, 0x38, 0xa4, 0x6f,
+ 0x73, 0x38, 0xca, 0xbf, 0x69, 0x38, 0x64, 0x33, 0x7e, 0x38, 0x55, 0x02, 0x81,
+ 0x38, 0xe5, 0xd2, 0x96, 0x38, 0x27, 0x00, 0x5d, 0x38, 0xd2, 0x15, 0x7b, 0x38,
+ 0xbf, 0xea, 0x81, 0x38, 0x36, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c,
+ 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65,
+ 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f,
+ 0x38, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x43,
+ 0x6f, 0x6e, 0x76, 0x32, 0x44, 0x5f, 0x62, 0x69, 0x61, 0x73, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x76, 0xee, 0xfe, 0xff, 0x00, 0x00,
+ 0x00, 0x02, 0x6c, 0x06, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x24, 0x06, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0xd2, 0xe7, 0xfe, 0xff, 0x14, 0x04, 0x00, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x00, 0x00, 0x00, 0x6c, 0xe2, 0x0b, 0x39, 0xc3, 0x54, 0x4b, 0x39, 0x78,
+ 0x29, 0x00, 0x39, 0x17, 0x23, 0xcd, 0x38, 0xa2, 0x60, 0x0c, 0x39, 0xf0, 0xcc,
+ 0x5e, 0x39, 0x9b, 0x41, 0x5d, 0x39, 0x8d, 0xb7, 0x25, 0x39, 0x5c, 0xc1, 0xdf,
+ 0x38, 0x54, 0x8d, 0x01, 0x39, 0x37, 0x5d, 0xf5, 0x38, 0xa0, 0xf1, 0x70, 0x39,
+ 0x3e, 0xb2, 0xfd, 0x38, 0x98, 0x3f, 0xe4, 0x38, 0x65, 0x48, 0xd0, 0x38, 0x3e,
+ 0x60, 0xdd, 0x38, 0xcd, 0x65, 0x7b, 0x39, 0xed, 0xa9, 0x21, 0x39, 0x7c, 0x44,
+ 0x8c, 0x39, 0x68, 0xf2, 0xf6, 0x38, 0xa0, 0x2a, 0x85, 0x39, 0xd6, 0x79, 0xf1,
+ 0x38, 0xc9, 0x1a, 0x1f, 0x39, 0x70, 0xb3, 0x08, 0x39, 0xa4, 0x37, 0xdd, 0x38,
+ 0x6e, 0xfb, 0x15, 0x39, 0x6c, 0xa5, 0x39, 0x39, 0x82, 0xd6, 0x00, 0x39, 0xd5,
+ 0x9a, 0x0b, 0x39, 0xef, 0xa1, 0x14, 0x39, 0x02, 0xd1, 0x81, 0x39, 0x00, 0x71,
+ 0x57, 0x39, 0x77, 0xd6, 0x30, 0x39, 0xb3, 0xe9, 0x1e, 0x39, 0x08, 0x37, 0xbf,
+ 0x38, 0x7f, 0x9e, 0x1a, 0x39, 0x5c, 0xb7, 0xf5, 0x38, 0x1d, 0xb5, 0x22, 0x39,
+ 0x92, 0x15, 0xf4, 0x38, 0xaa, 0x0e, 0x04, 0x39, 0xa1, 0x4e, 0x02, 0x39, 0x83,
+ 0xd2, 0x54, 0x39, 0xad, 0x3c, 0x25, 0x39, 0x70, 0x88, 0x09, 0x39, 0x65, 0x13,
+ 0xc3, 0x38, 0x18, 0x02, 0xf0, 0x38, 0xc2, 0xa6, 0x36, 0x39, 0xeb, 0x6f, 0x6a,
+ 0x39, 0xfa, 0x9a, 0xe6, 0x38, 0x03, 0xd5, 0x20, 0x39, 0xef, 0x8b, 0x13, 0x39,
+ 0x3e, 0xdb, 0xfb, 0x38, 0xca, 0xc2, 0x1b, 0x39, 0x9a, 0x7a, 0xe7, 0x38, 0x9b,
+ 0x14, 0x00, 0x39, 0x5f, 0x15, 0x27, 0x39, 0x39, 0xd9, 0x30, 0x39, 0x4c, 0xbf,
+ 0x86, 0x39, 0xe9, 0x2f, 0x29, 0x39, 0xcc, 0xda, 0xda, 0x38, 0xf4, 0x7f, 0x7a,
+ 0x39, 0x3a, 0x7d, 0x1a, 0x39, 0xe4, 0xb2, 0xf3, 0x38, 0xb8, 0x92, 0x3a, 0x39,
+ 0x03, 0x6d, 0x1a, 0x39, 0x35, 0x9d, 0x4e, 0x39, 0xb0, 0xf5, 0xef, 0x38, 0x15,
+ 0xc7, 0xce, 0x38, 0x91, 0x19, 0x50, 0x39, 0xbc, 0x6d, 0x0a, 0x39, 0x06, 0xfe,
+ 0x22, 0x39, 0x61, 0xea, 0x30, 0x39, 0xe8, 0x52, 0x26, 0x39, 0xfd, 0xea, 0xd6,
+ 0x38, 0x17, 0xba, 0x33, 0x39, 0xd8, 0x54, 0x12, 0x39, 0x0f, 0x2a, 0x18, 0x39,
+ 0x14, 0x44, 0x04, 0x39, 0xf2, 0x1f, 0x2a, 0x39, 0x3f, 0x04, 0x99, 0x39, 0xc7,
+ 0xa3, 0x09, 0x39, 0x83, 0x12, 0xe8, 0x38, 0x05, 0x9a, 0x6f, 0x39, 0x21, 0xbe,
+ 0x02, 0x39, 0x81, 0xf9, 0x26, 0x39, 0xf0, 0x4d, 0xec, 0x38, 0x17, 0x0e, 0x21,
+ 0x39, 0xc4, 0x6f, 0x63, 0x39, 0x3e, 0xa9, 0x36, 0x39, 0x3b, 0x91, 0x35, 0x39,
+ 0xe8, 0x6e, 0x95, 0x39, 0xe8, 0xd4, 0xfd, 0x38, 0xbf, 0xfb, 0x43, 0x39, 0xfd,
+ 0xd8, 0xce, 0x38, 0x0f, 0x5e, 0xea, 0x38, 0x8c, 0x83, 0xdf, 0x38, 0xc4, 0x46,
+ 0x5a, 0x39, 0x57, 0x2e, 0x27, 0x39, 0xad, 0x75, 0x20, 0x39, 0xdd, 0xcf, 0x24,
+ 0x39, 0x79, 0xcb, 0xd9, 0x38, 0x8c, 0xf2, 0xf7, 0x38, 0x00, 0xbe, 0xeb, 0x38,
+ 0xe8, 0x7c, 0x32, 0x39, 0xbd, 0xe0, 0xd3, 0x38, 0x73, 0xd3, 0xf3, 0x38, 0xb9,
+ 0x02, 0x2a, 0x39, 0x3b, 0xd8, 0x30, 0x39, 0x18, 0xb2, 0x09, 0x39, 0xc7, 0x6b,
+ 0x62, 0x39, 0xbf, 0x36, 0x06, 0x39, 0xe1, 0x87, 0x3c, 0x39, 0xde, 0xa6, 0x27,
+ 0x39, 0x44, 0x9f, 0x63, 0x39, 0xa9, 0x3e, 0x2c, 0x39, 0x1b, 0xd6, 0xfb, 0x38,
+ 0xd8, 0x3c, 0xdb, 0x38, 0xcd, 0xf0, 0xed, 0x38, 0xa1, 0xb9, 0x82, 0x39, 0xd9,
+ 0x5d, 0xd8, 0x38, 0xf4, 0x20, 0xef, 0x38, 0x68, 0x24, 0x71, 0x39, 0x7a, 0x10,
+ 0xe4, 0x38, 0x0b, 0x9c, 0x88, 0x39, 0x8f, 0xcb, 0x35, 0x39, 0x82, 0xaa, 0xfb,
+ 0x38, 0xce, 0x66, 0x02, 0x39, 0xde, 0x38, 0x17, 0x39, 0x39, 0x00, 0x00, 0x00,
+ 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d,
+ 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f,
+ 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x38, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77,
+ 0x69, 0x73, 0x65, 0x2f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65,
+ 0x5f, 0x62, 0x69, 0x61, 0x73, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80,
+ 0x00, 0x00, 0x00, 0xf2, 0xf4, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x09, 0x84, 0x00,
+ 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x8c, 0x7b, 0xff, 0xff, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
+ 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0xc1, 0xc0, 0xc0, 0x3c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
+ 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
+ 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d,
+ 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f,
+ 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x38, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77,
+ 0x69, 0x73, 0x65, 0x2f, 0x52, 0x65, 0x6c, 0x75, 0x36, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06,
+ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x92, 0xf5, 0xfe, 0xff, 0x00, 0x00,
+ 0x00, 0x09, 0x84, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x2c, 0x7c, 0xff, 0xff, 0x30, 0x00, 0x00, 0x00,
+ 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc1, 0xc0, 0xc0, 0x3c, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xc0, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x30, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74,
+ 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56,
+ 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x37, 0x5f, 0x70, 0x6f,
+ 0x69, 0x6e, 0x74, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x52, 0x65, 0x6c, 0x75, 0x36,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06,
+ 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x32, 0xf6,
+ 0xfe, 0xff, 0x00, 0x00, 0x00, 0x02, 0x64, 0x06, 0x00, 0x00, 0x53, 0x00, 0x00,
+ 0x00, 0x20, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xb4, 0xfc, 0xfe, 0xff,
+ 0x10, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x00, 0x00, 0x00, 0xaa, 0x0c, 0x61, 0x38, 0xf0, 0x53, 0xb3, 0x38, 0x35,
+ 0xea, 0x8d, 0x38, 0xa4, 0xc2, 0x86, 0x38, 0xe8, 0x92, 0x60, 0x38, 0xc0, 0x2c,
+ 0x5c, 0x38, 0x67, 0xa0, 0x62, 0x38, 0xa1, 0xb3, 0xb4, 0x38, 0x5c, 0x07, 0x60,
+ 0x38, 0x30, 0xdc, 0x5f, 0x38, 0x2a, 0xa0, 0xd1, 0x38, 0xc9, 0x14, 0x9e, 0x38,
+ 0x9d, 0xac, 0x58, 0x38, 0xf3, 0x95, 0x8a, 0x38, 0x83, 0x03, 0x8d, 0x38, 0x78,
+ 0x46, 0x86, 0x38, 0x80, 0xea, 0x5d, 0x38, 0xe1, 0x99, 0x9a, 0x38, 0x4b, 0xe2,
+ 0x96, 0x38, 0xa9, 0xeb, 0x83, 0x38, 0x6b, 0x80, 0x8f, 0x38, 0x18, 0xf4, 0x80,
+ 0x38, 0x65, 0xfb, 0x67, 0x38, 0x1b, 0xd7, 0x8e, 0x38, 0xc4, 0x6c, 0x96, 0x38,
+ 0x92, 0x70, 0x98, 0x38, 0x9e, 0x46, 0x47, 0x38, 0xaa, 0xde, 0x7c, 0x38, 0x5f,
+ 0xc7, 0x4b, 0x38, 0xff, 0xa2, 0x83, 0x38, 0x4b, 0xa4, 0x82, 0x38, 0x61, 0xee,
+ 0x9b, 0x38, 0x47, 0xdb, 0x66, 0x38, 0xb4, 0x48, 0x85, 0x38, 0xe1, 0x54, 0x6e,
+ 0x38, 0x47, 0xba, 0xb8, 0x38, 0x65, 0x8b, 0x85, 0x38, 0xaa, 0x65, 0x41, 0x38,
+ 0x33, 0x6d, 0x88, 0x38, 0xfc, 0xe2, 0x72, 0x38, 0x92, 0x90, 0xae, 0x38, 0x60,
+ 0x60, 0x9e, 0x38, 0x9a, 0xa0, 0x77, 0x38, 0x67, 0x07, 0x78, 0x38, 0x6a, 0x34,
+ 0x83, 0x38, 0xba, 0xe1, 0x6b, 0x38, 0x1d, 0x9b, 0x78, 0x38, 0xd7, 0x8f, 0x8b,
+ 0x38, 0x0f, 0xc0, 0x8a, 0x38, 0xbb, 0xcc, 0x85, 0x38, 0x85, 0xf7, 0x50, 0x38,
+ 0x48, 0xc2, 0x8c, 0x38, 0x4a, 0x58, 0x56, 0x38, 0x73, 0x66, 0x5a, 0x38, 0x6d,
+ 0x58, 0x63, 0x38, 0x49, 0x9b, 0x6a, 0x38, 0xd9, 0x6a, 0x5b, 0x38, 0x61, 0xbc,
+ 0x58, 0x38, 0xe4, 0x43, 0x55, 0x38, 0x4c, 0x13, 0x9a, 0x38, 0xe5, 0xe5, 0x94,
+ 0x38, 0x92, 0xf8, 0x3a, 0x38, 0xa9, 0x4e, 0x66, 0x38, 0x46, 0xdf, 0x69, 0x38,
+ 0xc3, 0xbc, 0x92, 0x38, 0xee, 0xc7, 0x84, 0x38, 0x63, 0x4c, 0x9c, 0x38, 0xfc,
+ 0x62, 0x60, 0x38, 0xfb, 0x60, 0x85, 0x38, 0xeb, 0x7f, 0x7b, 0x38, 0xb0, 0xbc,
+ 0xa1, 0x38, 0x0d, 0x46, 0x8c, 0x38, 0xc8, 0xf9, 0x88, 0x38, 0x81, 0x37, 0x81,
+ 0x38, 0xf2, 0x93, 0x95, 0x38, 0x38, 0xc8, 0x98, 0x38, 0x1f, 0x9a, 0x9b, 0x38,
+ 0xfb, 0x1e, 0x80, 0x38, 0xce, 0x84, 0x81, 0x38, 0x1d, 0x96, 0x7d, 0x38, 0xbb,
+ 0x15, 0xb2, 0x38, 0x39, 0x9f, 0x84, 0x38, 0xeb, 0xbe, 0x7a, 0x38, 0xc4, 0x6f,
+ 0x87, 0x38, 0x37, 0x62, 0x93, 0x38, 0xc1, 0x53, 0x99, 0x38, 0xa2, 0xe3, 0x3f,
+ 0x38, 0x67, 0xdf, 0x43, 0x38, 0x7f, 0xd2, 0x64, 0x38, 0x7c, 0x06, 0x7f, 0x38,
+ 0x0c, 0xe0, 0x6c, 0x38, 0x30, 0x77, 0x90, 0x38, 0x49, 0xd7, 0x57, 0x38, 0x65,
+ 0x1d, 0x7a, 0x38, 0x36, 0x38, 0xb0, 0x38, 0xb9, 0x08, 0x86, 0x38, 0x9d, 0x25,
+ 0x47, 0x38, 0xd6, 0x87, 0x69, 0x38, 0x73, 0x64, 0xce, 0x38, 0x14, 0xae, 0x5b,
+ 0x38, 0x65, 0xe5, 0x99, 0x38, 0xb0, 0xec, 0x5e, 0x38, 0xf2, 0x88, 0x9f, 0x38,
+ 0x3c, 0x3b, 0x8a, 0x38, 0xd1, 0xf0, 0x82, 0x38, 0x3e, 0xe0, 0x7b, 0x38, 0xc9,
+ 0xd2, 0x6f, 0x38, 0xa4, 0x9f, 0x95, 0x38, 0x0e, 0x3b, 0x5b, 0x38, 0x15, 0x3c,
+ 0x6d, 0x38, 0xd3, 0xed, 0x5a, 0x38, 0xa0, 0x9e, 0x96, 0x38, 0x49, 0x50, 0xcc,
+ 0x38, 0x1e, 0xe4, 0x48, 0x38, 0xda, 0x56, 0x3a, 0x38, 0x41, 0x0d, 0x57, 0x38,
+ 0xc9, 0x68, 0xc0, 0x38, 0x86, 0x69, 0x4a, 0x38, 0x97, 0x84, 0x6f, 0x38, 0xb3,
+ 0x7c, 0x9d, 0x38, 0x24, 0x1c, 0x6f, 0x38, 0x62, 0xb0, 0x8e, 0x38, 0x61, 0xaf,
+ 0x72, 0x38, 0x03, 0x03, 0x83, 0x38, 0xf3, 0x9f, 0x5b, 0x38, 0x6f, 0xbe, 0x89,
+ 0x38, 0x82, 0x3b, 0x9c, 0x38, 0x9f, 0x52, 0x8a, 0x38, 0x36, 0x00, 0x00, 0x00,
+ 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d,
+ 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f,
+ 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x37, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77,
+ 0x69, 0x73, 0x65, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x44, 0x5f, 0x62, 0x69,
+ 0x61, 0x73, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xa6,
+ 0xfc, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x02, 0x6c, 0x06, 0x00, 0x00, 0x4e, 0x00,
+ 0x00, 0x00, 0x24, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0xf6, 0xfe,
+ 0xff, 0x14, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xa1, 0x0c, 0xe5, 0x38,
+ 0xb5, 0x80, 0x28, 0x39, 0x9e, 0xce, 0x25, 0x39, 0xeb, 0xb3, 0x62, 0x39, 0x74,
+ 0x53, 0x38, 0x39, 0x9f, 0x2b, 0xb8, 0x38, 0xb9, 0x9e, 0x07, 0x39, 0xdb, 0x1c,
+ 0x63, 0x39, 0x9e, 0x9d, 0x0f, 0x39, 0xbd, 0x02, 0x0c, 0x39, 0xc0, 0xda, 0x50,
+ 0x39, 0x0c, 0x9f, 0x4e, 0x39, 0xfb, 0xe3, 0x85, 0x39, 0x9b, 0x35, 0xd1, 0x39,
+ 0xde, 0x77, 0x12, 0x39, 0x61, 0x64, 0x33, 0x39, 0xeb, 0xba, 0x62, 0x39, 0xa4,
+ 0x8c, 0x63, 0x39, 0x4c, 0xd0, 0x39, 0x39, 0xb5, 0x69, 0x9b, 0x39, 0xb9, 0x55,
+ 0x80, 0x39, 0x97, 0x96, 0x52, 0x39, 0xd6, 0x78, 0x74, 0x39, 0xa2, 0x2d, 0x09,
+ 0x39, 0x67, 0xac, 0xc4, 0x38, 0x1d, 0x5f, 0x21, 0x39, 0x02, 0x83, 0x13, 0x39,
+ 0xdb, 0x4b, 0x4a, 0x39, 0xcf, 0x1b, 0x20, 0x39, 0xb4, 0x50, 0x70, 0x39, 0xf7,
+ 0xd3, 0xe9, 0x38, 0xe2, 0x48, 0x15, 0x39, 0x93, 0x55, 0x04, 0x39, 0xfc, 0xb9,
+ 0x34, 0x39, 0xda, 0x08, 0x2d, 0x39, 0xb3, 0x09, 0x5f, 0x39, 0x25, 0x87, 0x07,
+ 0x39, 0x7c, 0x80, 0x37, 0x39, 0xfd, 0x85, 0x24, 0x39, 0x0b, 0x4b, 0x0d, 0x39,
+ 0xae, 0xfa, 0x17, 0x39, 0x80, 0x0e, 0x44, 0x39, 0xa4, 0x0e, 0x12, 0x39, 0xa1,
+ 0xb3, 0x12, 0x39, 0xd2, 0x44, 0x1c, 0x39, 0x15, 0x69, 0xd7, 0x38, 0x18, 0x08,
+ 0x25, 0x39, 0x73, 0x4a, 0x6f, 0x39, 0x70, 0xe3, 0x78, 0x39, 0xbe, 0x9e, 0x31,
+ 0x39, 0x1b, 0x13, 0x1b, 0x39, 0x3f, 0xf2, 0x41, 0x39, 0xc3, 0xb6, 0x1c, 0x39,
+ 0xfe, 0x9d, 0x13, 0x39, 0x61, 0x1b, 0x0d, 0x39, 0x23, 0x75, 0x06, 0x39, 0x7b,
+ 0xa1, 0x3c, 0x39, 0xde, 0x43, 0x7c, 0x39, 0xeb, 0x1b, 0x22, 0x39, 0x76, 0xff,
+ 0x30, 0x39, 0x24, 0x23, 0x53, 0x39, 0x8b, 0x71, 0x03, 0x39, 0x3b, 0x12, 0x84,
+ 0x39, 0x9b, 0x1d, 0x9a, 0x39, 0x1e, 0xe6, 0x02, 0x39, 0x2c, 0xbe, 0xdd, 0x38,
+ 0x55, 0xdd, 0x7b, 0x39, 0xc8, 0xdf, 0x05, 0x39, 0x61, 0x65, 0x25, 0x39, 0x23,
+ 0xbb, 0x43, 0x39, 0x18, 0x72, 0xe3, 0x38, 0x4d, 0x09, 0x6e, 0x39, 0x91, 0xf0,
+ 0x36, 0x39, 0x9b, 0x10, 0x1e, 0x39, 0x54, 0xa5, 0x8f, 0x39, 0x8c, 0x4f, 0xbb,
+ 0x39, 0xf5, 0xd3, 0x1a, 0x39, 0xe7, 0x86, 0xc7, 0x38, 0x0f, 0x4e, 0x11, 0x39,
+ 0xab, 0xce, 0x17, 0x39, 0xc4, 0xb5, 0x56, 0x39, 0x18, 0xfb, 0x76, 0x39, 0x06,
+ 0x4d, 0x46, 0x39, 0x1f, 0x49, 0x09, 0x39, 0xd0, 0x09, 0xf7, 0x38, 0xbc, 0x92,
+ 0x38, 0x39, 0x5c, 0x55, 0x63, 0x39, 0x49, 0xda, 0x43, 0x39, 0xf9, 0xcd, 0x0a,
+ 0x39, 0xfd, 0xf5, 0xc2, 0x39, 0x49, 0xd8, 0x45, 0x39, 0xf9, 0x91, 0x0d, 0x39,
+ 0x59, 0x18, 0x15, 0x39, 0xc5, 0x1a, 0x12, 0x39, 0xa6, 0xfe, 0x1d, 0x39, 0x1d,
+ 0x58, 0x35, 0x39, 0x24, 0x78, 0x42, 0x39, 0x59, 0x85, 0x63, 0x39, 0xd1, 0x0f,
+ 0x00, 0x39, 0xfa, 0x4c, 0x6a, 0x39, 0xf8, 0x36, 0x27, 0x39, 0x8e, 0xea, 0x21,
+ 0x39, 0x6e, 0xdc, 0x77, 0x39, 0x21, 0x26, 0xf4, 0x38, 0x3f, 0xff, 0x00, 0x39,
+ 0x2c, 0x94, 0x14, 0x39, 0x12, 0x2e, 0x36, 0x39, 0x00, 0xd5, 0xd7, 0x38, 0xbd,
+ 0xa6, 0x18, 0x39, 0xb5, 0xda, 0x5d, 0x39, 0xcd, 0x8e, 0x94, 0x39, 0x64, 0x41,
+ 0xa4, 0x39, 0xcf, 0x85, 0x10, 0x39, 0x15, 0x89, 0x8f, 0x39, 0x7a, 0x67, 0x1f,
+ 0x39, 0x30, 0x0c, 0x8e, 0x39, 0x2d, 0x18, 0x1b, 0x39, 0x5e, 0x4b, 0x6d, 0x39,
+ 0xda, 0x52, 0x25, 0x39, 0x27, 0x75, 0x70, 0x39, 0xea, 0x56, 0x39, 0x39, 0x05,
+ 0x83, 0xce, 0x38, 0x68, 0x65, 0xea, 0x38, 0x05, 0xd0, 0xe0, 0x38, 0xf6, 0xf8,
+ 0x67, 0x39, 0x3c, 0x43, 0x41, 0x39, 0xa0, 0x45, 0x4d, 0x39, 0xa9, 0x70, 0xda,
+ 0x38, 0x39, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65,
+ 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74,
+ 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x37, 0x5f, 0x64,
+ 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x64, 0x65, 0x70, 0x74,
+ 0x68, 0x77, 0x69, 0x73, 0x65, 0x5f, 0x62, 0x69, 0x61, 0x73, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x22, 0x03, 0xff, 0xff, 0x00,
+ 0x00, 0x00, 0x09, 0x84, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x44, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xbc, 0x89, 0xff, 0xff, 0x30, 0x00, 0x00,
+ 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc1, 0xc0, 0xc0, 0x3c, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x30, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65,
+ 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74,
+ 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x37, 0x5f, 0x64,
+ 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x52, 0x65, 0x6c, 0x75,
+ 0x36, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xc2,
+ 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x84, 0x00, 0x00, 0x00, 0x31, 0x00,
+ 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5c, 0x8a, 0xff,
+ 0xff, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc1, 0xc0,
+ 0xc0, 0x3c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69,
+ 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c,
+ 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64,
+ 0x5f, 0x36, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77, 0x69, 0x73, 0x65, 0x2f,
+ 0x52, 0x65, 0x6c, 0x75, 0x36, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x80,
+ 0x00, 0x00, 0x00, 0x62, 0x04, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0x64, 0x06,
+ 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x20, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0xe4, 0x0a, 0xff, 0xff, 0x10, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x30, 0x0b, 0xba, 0x38,
+ 0x07, 0xe6, 0x99, 0x38, 0x5b, 0xb2, 0x0d, 0x39, 0x9a, 0xf2, 0xbe, 0x38, 0x1f,
+ 0x1d, 0x99, 0x38, 0x8b, 0x74, 0xed, 0x38, 0xaf, 0x9e, 0x6d, 0x38, 0xcb, 0xd4,
+ 0x9e, 0x38, 0xde, 0xf6, 0xda, 0x38, 0x9a, 0xb8, 0xa7, 0x38, 0x2e, 0x44, 0x99,
+ 0x38, 0x6a, 0x0c, 0xd5, 0x38, 0x30, 0x65, 0x86, 0x38, 0xcb, 0xe2, 0x38, 0x38,
+ 0x20, 0xca, 0x7d, 0x38, 0xa1, 0x51, 0x8b, 0x38, 0x0e, 0xc5, 0x88, 0x38, 0x3e,
+ 0x33, 0x95, 0x38, 0xa2, 0x88, 0xbb, 0x38, 0xcf, 0xaf, 0x7e, 0x38, 0x6a, 0x0d,
+ 0xae, 0x38, 0xf3, 0x33, 0x86, 0x38, 0x67, 0xd4, 0xc5, 0x38, 0x0f, 0x0f, 0xcc,
+ 0x38, 0xa6, 0xfb, 0xd7, 0x38, 0x6e, 0xf4, 0x8e, 0x38, 0x61, 0x41, 0xa3, 0x38,
+ 0xf7, 0xbe, 0xb4, 0x38, 0xb1, 0xe2, 0x9b, 0x38, 0x70, 0x32, 0xca, 0x38, 0xe1,
+ 0xfb, 0xac, 0x38, 0xff, 0xc4, 0x93, 0x38, 0x49, 0x65, 0xb3, 0x38, 0x95, 0xae,
+ 0x8b, 0x38, 0x1e, 0x8a, 0x86, 0x38, 0xcf, 0x20, 0x83, 0x38, 0x64, 0x37, 0x9c,
+ 0x38, 0x8a, 0xb5, 0x35, 0x38, 0xe5, 0xbe, 0xa6, 0x38, 0x35, 0x13, 0xbe, 0x38,
+ 0x70, 0x9c, 0xc5, 0x38, 0xa9, 0xf2, 0xa6, 0x38, 0x45, 0x16, 0x95, 0x38, 0x29,
+ 0xe0, 0xaa, 0x38, 0x64, 0xfa, 0xc7, 0x38, 0xa3, 0x66, 0x49, 0x38, 0xe7, 0x2d,
+ 0xa4, 0x38, 0xd4, 0x74, 0xa8, 0x38, 0xb8, 0xb8, 0x63, 0x38, 0x26, 0x53, 0x72,
+ 0x38, 0x06, 0x28, 0xc2, 0x38, 0x06, 0xe0, 0xb0, 0x38, 0xa7, 0x1d, 0xa6, 0x38,
+ 0x05, 0x41, 0xaa, 0x38, 0xc2, 0x93, 0x95, 0x38, 0x38, 0xc1, 0x97, 0x38, 0xb0,
+ 0xa8, 0xb6, 0x38, 0x7a, 0x24, 0xa5, 0x38, 0xeb, 0xed, 0x83, 0x38, 0xd6, 0x54,
+ 0x48, 0x38, 0x6f, 0x32, 0x94, 0x38, 0x54, 0x98, 0x8a, 0x38, 0x88, 0x4d, 0x83,
+ 0x38, 0xb0, 0xe4, 0x96, 0x38, 0xf9, 0xf6, 0xa9, 0x38, 0xe1, 0x67, 0xa6, 0x38,
+ 0x06, 0x46, 0x78, 0x38, 0xed, 0xd5, 0xea, 0x38, 0x05, 0x1f, 0x94, 0x38, 0x91,
+ 0xe5, 0x91, 0x38, 0xf6, 0x2e, 0x98, 0x38, 0x94, 0x63, 0x5d, 0x38, 0xf9, 0x4f,
+ 0xa4, 0x38, 0x4b, 0x46, 0x9e, 0x38, 0x19, 0xcf, 0x98, 0x38, 0x3e, 0x3b, 0x4b,
+ 0x38, 0x38, 0xc9, 0x79, 0x38, 0x24, 0xbb, 0x88, 0x38, 0xda, 0x39, 0x87, 0x38,
+ 0xd0, 0xe6, 0x84, 0x38, 0x05, 0x05, 0xa9, 0x38, 0x1a, 0xae, 0x9d, 0x38, 0xc1,
+ 0x65, 0xbe, 0x38, 0xf1, 0xc2, 0x98, 0x38, 0x20, 0x08, 0x93, 0x38, 0x15, 0xb5,
+ 0x9c, 0x38, 0xba, 0x98, 0x63, 0x38, 0x98, 0xf0, 0x97, 0x38, 0x04, 0xe0, 0x90,
+ 0x38, 0xc7, 0x9e, 0x74, 0x38, 0xfe, 0x4c, 0xb7, 0x38, 0x50, 0xeb, 0x7f, 0x38,
+ 0x2a, 0xe3, 0xa6, 0x38, 0x14, 0xed, 0x73, 0x38, 0x62, 0x8f, 0xcd, 0x38, 0xee,
+ 0x19, 0x78, 0x38, 0x3a, 0xd7, 0x6c, 0x38, 0x61, 0x01, 0xbd, 0x38, 0x56, 0xda,
+ 0x97, 0x38, 0xd0, 0xa5, 0xa5, 0x38, 0x1b, 0xb8, 0xc4, 0x38, 0xbb, 0x0b, 0xcc,
+ 0x38, 0x9d, 0xe2, 0xa7, 0x38, 0xef, 0xaf, 0xb6, 0x38, 0x9e, 0x37, 0xae, 0x38,
+ 0x6a, 0x46, 0x72, 0x38, 0xfb, 0x4c, 0x88, 0x38, 0x7a, 0xea, 0x96, 0x38, 0x2e,
+ 0xf7, 0x98, 0x38, 0x08, 0x3a, 0xa5, 0x38, 0xe1, 0xdf, 0xb4, 0x38, 0xcf, 0x6f,
+ 0x4d, 0x38, 0x9b, 0xe7, 0x91, 0x38, 0xd6, 0x8a, 0x94, 0x38, 0x71, 0x6f, 0x88,
+ 0x38, 0xa5, 0x79, 0x9d, 0x38, 0xf7, 0xe3, 0xa4, 0x38, 0x3d, 0xe7, 0x6e, 0x38,
+ 0xea, 0xa0, 0x8c, 0x38, 0x66, 0x7f, 0x3d, 0x38, 0x0e, 0x6e, 0x93, 0x38, 0xd3,
+ 0x64, 0x6d, 0x38, 0xc9, 0xb9, 0x9b, 0x38, 0xde, 0x7c, 0xdc, 0x38, 0xc9, 0xa5,
+ 0xcf, 0x38, 0xc7, 0xca, 0x7d, 0x38, 0x79, 0x75, 0xa0, 0x38, 0x5e, 0xab, 0x95,
+ 0x38, 0x36, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65,
+ 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74,
+ 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x36, 0x5f, 0x70,
+ 0x6f, 0x69, 0x6e, 0x74, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x43, 0x6f, 0x6e, 0x76,
+ 0x32, 0x44, 0x5f, 0x62, 0x69, 0x61, 0x73, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x80, 0x00, 0x00, 0x00, 0xd6, 0x0a, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0x6c,
+ 0x03, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x24, 0x03, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0x32, 0x04, 0xff, 0xff, 0x14, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00,
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xe4, 0xe1, 0xd9, 0x38,
+ 0x59, 0x7e, 0xcd, 0x38, 0x89, 0x65, 0xac, 0x38, 0x2d, 0x36, 0xbb, 0x38, 0xa1,
+ 0x1e, 0x8e, 0x38, 0xbb, 0x08, 0x92, 0x38, 0x77, 0xc7, 0xf3, 0x38, 0xb3, 0xfb,
+ 0xbc, 0x38, 0x7f, 0x6a, 0xba, 0x38, 0xff, 0xe1, 0x05, 0x39, 0x24, 0xf5, 0xb9,
+ 0x38, 0x71, 0xb3, 0xcb, 0x38, 0xbe, 0x56, 0xce, 0x38, 0x18, 0xb7, 0xc0, 0x38,
+ 0xd2, 0x9d, 0xbd, 0x38, 0x74, 0x16, 0x37, 0x39, 0x46, 0x11, 0xb2, 0x38, 0xbd,
+ 0x56, 0x6c, 0x39, 0xdb, 0x35, 0xb7, 0x38, 0xe8, 0x93, 0xd7, 0x38, 0x53, 0xc4,
+ 0xab, 0x38, 0xb6, 0xa6, 0xc4, 0x38, 0xb5, 0xd1, 0x09, 0x39, 0xdd, 0x60, 0xa5,
+ 0x38, 0x77, 0x4e, 0xed, 0x38, 0x35, 0x67, 0xb4, 0x38, 0x85, 0x14, 0xe0, 0x38,
+ 0x6b, 0x21, 0xc0, 0x38, 0xfd, 0x90, 0xbf, 0x38, 0xd6, 0x8b, 0xe1, 0x38, 0x76,
+ 0x9c, 0xaa, 0x38, 0x06, 0x37, 0xc2, 0x38, 0x18, 0x19, 0xac, 0x38, 0xbc, 0x40,
+ 0xb5, 0x38, 0x54, 0x25, 0x3a, 0x39, 0x03, 0xd8, 0x01, 0x39, 0x1a, 0xdc, 0xe0,
+ 0x38, 0xdb, 0x58, 0xe6, 0x38, 0x8f, 0xb3, 0x98, 0x38, 0xe6, 0xda, 0x9c, 0x38,
+ 0x80, 0xed, 0xb5, 0x38, 0x71, 0x6c, 0xfd, 0x38, 0x0f, 0xc1, 0xf6, 0x38, 0x20,
+ 0x63, 0xde, 0x38, 0x89, 0x1f, 0xab, 0x38, 0xc7, 0xcd, 0xdd, 0x38, 0x5c, 0xf0,
+ 0x9f, 0x38, 0x1a, 0x54, 0xe4, 0x38, 0x2d, 0x39, 0xba, 0x38, 0x20, 0x55, 0xd1,
+ 0x38, 0xcf, 0x66, 0x87, 0x38, 0xe1, 0xb7, 0xe6, 0x38, 0x9a, 0x6d, 0x1a, 0x39,
+ 0xfc, 0x97, 0x11, 0x39, 0x28, 0x62, 0xaf, 0x38, 0x0b, 0xcf, 0xc5, 0x38, 0x61,
+ 0xbc, 0x23, 0x39, 0x0c, 0x7b, 0xc5, 0x38, 0xfc, 0xfa, 0x94, 0x38, 0x39, 0x7c,
+ 0x96, 0x38, 0x2a, 0x7e, 0x8e, 0x38, 0x5e, 0x2d, 0xd6, 0x38, 0xa1, 0xd1, 0xcc,
+ 0x38, 0x43, 0x1a, 0x24, 0x39, 0x39, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69,
+ 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c,
+ 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64,
+ 0x5f, 0x36, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f,
+ 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x5f, 0x62, 0x69, 0x61,
+ 0x73, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x52,
+ 0x0e, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x84, 0x00, 0x00, 0x00, 0x2c, 0x00,
+ 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xec, 0x94, 0xff,
+ 0xff, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc1, 0xc0,
+ 0xc0, 0x3c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69,
+ 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c,
+ 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64,
+ 0x5f, 0x36, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f,
+ 0x52, 0x65, 0x6c, 0x75, 0x36, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40,
+ 0x00, 0x00, 0x00, 0xf2, 0x0e, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x84, 0x00,
+ 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x8c, 0x95, 0xff, 0xff, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
+ 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0xc1, 0xc0, 0xc0, 0x3c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
+ 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
+ 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d,
+ 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f,
+ 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x35, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77,
+ 0x69, 0x73, 0x65, 0x2f, 0x52, 0x65, 0x6c, 0x75, 0x36, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c,
+ 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x92, 0x0f, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x02, 0x64, 0x03, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x20, 0x03, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x14, 0x16, 0xff, 0xff, 0x10, 0x02, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xd3, 0x57, 0x81, 0x38, 0x47,
+ 0x8c, 0xbc, 0x38, 0x50, 0xdf, 0xd4, 0x38, 0xe8, 0xc0, 0xf7, 0x38, 0xa1, 0x2a,
+ 0xaa, 0x38, 0x11, 0x80, 0x8b, 0x38, 0xdc, 0xc8, 0xb0, 0x38, 0xbc, 0xd0, 0xa3,
+ 0x38, 0x79, 0xa4, 0xd5, 0x38, 0xb0, 0x8f, 0xc2, 0x38, 0x83, 0xa4, 0xbf, 0x38,
+ 0xf4, 0xa6, 0xa9, 0x38, 0x77, 0x21, 0xc2, 0x38, 0x2f, 0xca, 0x6f, 0x38, 0x06,
+ 0x11, 0xfe, 0x38, 0xe8, 0xd1, 0x57, 0x38, 0x97, 0xa2, 0xc2, 0x38, 0x6b, 0x93,
+ 0x59, 0x38, 0x7a, 0x86, 0x7d, 0x38, 0x15, 0xc0, 0xe4, 0x38, 0x70, 0xa8, 0xb4,
+ 0x38, 0x14, 0x02, 0xa1, 0x38, 0x58, 0x71, 0xb0, 0x38, 0xfd, 0x49, 0xb5, 0x38,
+ 0x91, 0x89, 0x81, 0x38, 0x3a, 0x10, 0x6c, 0x38, 0x68, 0x77, 0xea, 0x38, 0x45,
+ 0xdc, 0xa9, 0x38, 0x91, 0x2c, 0xd9, 0x38, 0x22, 0x65, 0xa5, 0x38, 0x4c, 0x00,
+ 0xc3, 0x38, 0x82, 0x95, 0xa6, 0x38, 0xdf, 0xb7, 0x91, 0x38, 0x4f, 0xb4, 0xa3,
+ 0x38, 0xcf, 0x1e, 0x9a, 0x38, 0x15, 0xe8, 0x8d, 0x38, 0xd5, 0xfc, 0xa2, 0x38,
+ 0x68, 0xb5, 0x62, 0x38, 0x51, 0x04, 0x82, 0x38, 0x4a, 0x25, 0xd2, 0x38, 0x8b,
+ 0xd1, 0xc4, 0x38, 0x02, 0x61, 0xb0, 0x38, 0x5f, 0x34, 0x8b, 0x38, 0xf3, 0xd3,
+ 0xb3, 0x38, 0x6d, 0x60, 0xb8, 0x38, 0x7f, 0xeb, 0xa8, 0x38, 0x85, 0x4d, 0x8d,
+ 0x38, 0x56, 0x3a, 0x6c, 0x38, 0x9d, 0xee, 0x94, 0x38, 0x9c, 0x0c, 0x3d, 0x38,
+ 0xc0, 0x96, 0xae, 0x38, 0x52, 0xab, 0xd5, 0x38, 0xe1, 0xa7, 0x18, 0x38, 0x47,
+ 0xfe, 0x55, 0x38, 0x36, 0xac, 0xb0, 0x38, 0xd8, 0xdf, 0xa3, 0x38, 0xc1, 0x94,
+ 0x9c, 0x38, 0x24, 0xd7, 0xb0, 0x38, 0x40, 0x4a, 0xad, 0x38, 0x0f, 0x31, 0xa7,
+ 0x38, 0x7c, 0xb9, 0xbf, 0x38, 0xd0, 0x06, 0xc6, 0x38, 0x53, 0x4e, 0x5f, 0x38,
+ 0x94, 0x25, 0x5d, 0x38, 0x36, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c,
+ 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65,
+ 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f,
+ 0x35, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x43,
+ 0x6f, 0x6e, 0x76, 0x32, 0x44, 0x5f, 0x62, 0x69, 0x61, 0x73, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x06, 0x13, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x02, 0x6c, 0x03, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x24, 0x03, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x62, 0x0c, 0xff, 0xff, 0x14, 0x02, 0x00, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xa7,
+ 0x20, 0xfc, 0x38, 0x89, 0x62, 0x69, 0x39, 0xfc, 0x00, 0x35, 0x39, 0xca, 0x7e,
+ 0x39, 0x39, 0x08, 0x4e, 0x66, 0x39, 0xf3, 0x61, 0xd8, 0x38, 0x94, 0xb7, 0x05,
+ 0x39, 0x40, 0x49, 0x97, 0x38, 0x31, 0xdd, 0x9c, 0x39, 0x72, 0x72, 0xb2, 0x39,
+ 0x74, 0xe6, 0xd4, 0x39, 0x53, 0x96, 0x64, 0x39, 0x38, 0xbe, 0x5f, 0x39, 0x6a,
+ 0x5f, 0xbe, 0x38, 0x01, 0x21, 0x21, 0x39, 0x8f, 0xf1, 0x40, 0x39, 0xa2, 0x39,
+ 0x0f, 0x39, 0xc1, 0x47, 0xe9, 0x38, 0x86, 0x92, 0x22, 0x39, 0x34, 0xfb, 0xec,
+ 0x38, 0xdf, 0x67, 0xe0, 0x38, 0x53, 0x3a, 0x11, 0x39, 0x1a, 0xf8, 0xd1, 0x39,
+ 0xb5, 0x00, 0x19, 0x39, 0x26, 0x8e, 0x05, 0x39, 0x43, 0x28, 0xac, 0x39, 0xdb,
+ 0xee, 0x8a, 0x39, 0x85, 0x31, 0xe1, 0x38, 0x0f, 0x1e, 0x11, 0x39, 0xe7, 0xea,
+ 0x2f, 0x39, 0x42, 0x73, 0x05, 0x39, 0xec, 0x15, 0x2f, 0x39, 0x12, 0x09, 0xd2,
+ 0x38, 0xd2, 0x2e, 0x09, 0x39, 0x1e, 0x05, 0x22, 0x39, 0xaa, 0x44, 0xaf, 0x38,
+ 0x02, 0xe1, 0x86, 0x39, 0x59, 0x42, 0x92, 0x39, 0xe4, 0x90, 0x09, 0x39, 0x3c,
+ 0xde, 0x04, 0x39, 0xaa, 0xf2, 0x32, 0x39, 0xc0, 0x84, 0x2a, 0x39, 0x1d, 0xd5,
+ 0x76, 0x39, 0x1a, 0x13, 0x24, 0x39, 0x4f, 0xbd, 0xbc, 0x38, 0xe0, 0x06, 0xa8,
+ 0x38, 0xd5, 0x4b, 0x8f, 0x39, 0xe1, 0xed, 0xc7, 0x38, 0xfd, 0xea, 0x80, 0x39,
+ 0x77, 0xf5, 0x5b, 0x39, 0x00, 0xa6, 0x37, 0x39, 0xf3, 0x36, 0x55, 0x39, 0x77,
+ 0x6e, 0xa1, 0x39, 0x2b, 0x10, 0x07, 0x39, 0xd0, 0xf0, 0xdb, 0x38, 0x62, 0xd5,
+ 0xff, 0x38, 0xcd, 0xfc, 0x53, 0x39, 0x5c, 0xc1, 0x16, 0x39, 0xd3, 0xbe, 0xe9,
+ 0x38, 0x77, 0xc2, 0xf2, 0x38, 0x71, 0x2a, 0x98, 0x39, 0xe4, 0x4e, 0xd0, 0x38,
+ 0x4b, 0x79, 0x0a, 0x39, 0x56, 0x9a, 0x8e, 0x39, 0x39, 0x00, 0x00, 0x00, 0x4d,
+ 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f,
+ 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e,
+ 0x76, 0x32, 0x64, 0x5f, 0x35, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69,
+ 0x73, 0x65, 0x2f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x5f,
+ 0x62, 0x69, 0x61, 0x73, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00,
+ 0x00, 0x00, 0x82, 0x16, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x84, 0x00, 0x00,
+ 0x00, 0x57, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x1c, 0x9d, 0xff, 0xff, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18,
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0xc1, 0xc0, 0xc0, 0x3c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x4d,
+ 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f,
+ 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e,
+ 0x76, 0x32, 0x64, 0x5f, 0x35, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69,
+ 0x73, 0x65, 0x2f, 0x52, 0x65, 0x6c, 0x75, 0x36, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x22, 0x17, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x09, 0x84, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0xbc, 0x9d, 0xff, 0xff, 0x30, 0x00, 0x00, 0x00, 0x24,
+ 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0xc1, 0xc0, 0xc0, 0x3c, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc0, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
+ 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56,
+ 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31,
+ 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x34, 0x5f, 0x70, 0x6f, 0x69,
+ 0x6e, 0x74, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x52, 0x65, 0x6c, 0x75, 0x36, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xc2, 0x17, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x02, 0x64, 0x03, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00,
+ 0x20, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x44, 0x1e, 0xff, 0xff, 0x10,
+ 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xa9, 0xbb,
+ 0xd0, 0x38, 0x3a, 0x81, 0x84, 0x38, 0x12, 0x86, 0xf8, 0x38, 0xd8, 0xe1, 0xd0,
+ 0x38, 0xb4, 0x0a, 0xa1, 0x38, 0x93, 0x51, 0xb6, 0x38, 0x65, 0xd7, 0xf0, 0x38,
+ 0x98, 0x9a, 0xc6, 0x38, 0xbf, 0x4e, 0x88, 0x38, 0xc6, 0xa5, 0xd3, 0x38, 0x59,
+ 0xc6, 0x60, 0x38, 0xd2, 0xdc, 0xf0, 0x38, 0x70, 0x7e, 0x87, 0x38, 0xa3, 0xd3,
+ 0xcf, 0x38, 0x54, 0xfb, 0x02, 0x39, 0xdb, 0x90, 0x45, 0x39, 0x8b, 0x00, 0xcc,
+ 0x38, 0x3b, 0xd8, 0xc4, 0x38, 0x73, 0xed, 0xd3, 0x38, 0xcb, 0xb7, 0x8d, 0x38,
+ 0x3e, 0xc5, 0x2d, 0x39, 0xe9, 0xaf, 0x9f, 0x38, 0x61, 0x00, 0xa6, 0x38, 0xa9,
+ 0xf7, 0x12, 0x39, 0x70, 0x6d, 0x0c, 0x39, 0x18, 0x81, 0x2a, 0x38, 0x9d, 0x17,
+ 0x83, 0x38, 0x0b, 0x0d, 0x22, 0x39, 0x83, 0x52, 0x07, 0x39, 0x26, 0x7c, 0xc5,
+ 0x38, 0xb5, 0x04, 0xd0, 0x38, 0x42, 0xcc, 0x12, 0x39, 0x01, 0x47, 0x00, 0x39,
+ 0x5e, 0x12, 0x74, 0x38, 0x62, 0x92, 0xb3, 0x38, 0x20, 0xfd, 0x27, 0x39, 0xd0,
+ 0x51, 0x6e, 0x38, 0x79, 0x0f, 0x77, 0x38, 0x3e, 0x76, 0xb4, 0x38, 0x32, 0x98,
+ 0x88, 0x38, 0x30, 0x5d, 0xa8, 0x38, 0x11, 0x95, 0xd5, 0x38, 0xb0, 0x91, 0x9f,
+ 0x38, 0xad, 0x1f, 0xd7, 0x38, 0xec, 0x9d, 0x1b, 0x39, 0xcb, 0x15, 0x1d, 0x39,
+ 0x27, 0x48, 0x4a, 0x38, 0x09, 0xb3, 0xb5, 0x38, 0x98, 0x7f, 0x02, 0x39, 0x47,
+ 0x95, 0x53, 0x39, 0xf1, 0x99, 0x47, 0x39, 0x73, 0x76, 0xd8, 0x38, 0x71, 0x7a,
+ 0xd5, 0x38, 0x67, 0x79, 0x4e, 0x39, 0x42, 0xf0, 0x01, 0x39, 0x59, 0xbe, 0xe5,
+ 0x38, 0x0a, 0xec, 0x9f, 0x38, 0x87, 0x6a, 0x20, 0x39, 0x6a, 0x06, 0xdc, 0x38,
+ 0x40, 0x5d, 0xfa, 0x38, 0x95, 0x1d, 0x92, 0x38, 0xd3, 0xcd, 0x3e, 0x39, 0xa1,
+ 0x43, 0x0d, 0x39, 0x6b, 0x23, 0x97, 0x38, 0x36, 0x00, 0x00, 0x00, 0x4d, 0x6f,
+ 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62,
+ 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76,
+ 0x32, 0x64, 0x5f, 0x34, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77, 0x69, 0x73,
+ 0x65, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x44, 0x5f, 0x62, 0x69, 0x61, 0x73,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x36, 0x1b, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x02, 0xec, 0x01, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00,
+ 0xa4, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x92, 0x14, 0xff, 0xff, 0x14,
+ 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xc5, 0xba, 0x8c, 0x38, 0x92, 0x4d, 0xa9,
+ 0x38, 0x52, 0x02, 0x82, 0x38, 0xfc, 0xa9, 0xaf, 0x38, 0xff, 0x9a, 0x46, 0x39,
+ 0x14, 0xa1, 0xcb, 0x38, 0x60, 0xad, 0x95, 0x38, 0xb6, 0xdd, 0x96, 0x38, 0x69,
+ 0x54, 0x96, 0x38, 0xca, 0x22, 0x68, 0x38, 0x68, 0x2c, 0xac, 0x38, 0xe7, 0x85,
+ 0x95, 0x38, 0x41, 0x03, 0xd5, 0x38, 0xd5, 0x13, 0x28, 0x39, 0xa9, 0xae, 0xde,
+ 0x38, 0x26, 0x06, 0xa4, 0x38, 0xa7, 0x7b, 0x9a, 0x38, 0x0e, 0x89, 0x8f, 0x38,
+ 0x4c, 0x4a, 0xf2, 0x38, 0x6d, 0x8f, 0x9d, 0x38, 0x03, 0xb2, 0xef, 0x38, 0x3e,
+ 0x97, 0xd8, 0x38, 0x80, 0xfe, 0x4b, 0x38, 0xed, 0x28, 0xad, 0x38, 0x04, 0xbb,
+ 0x2a, 0x39, 0x49, 0x6b, 0xbb, 0x38, 0x82, 0x54, 0xa2, 0x38, 0xbd, 0xee, 0x90,
+ 0x38, 0x46, 0xb5, 0xea, 0x38, 0xd2, 0x63, 0xa7, 0x38, 0x11, 0x03, 0xda, 0x38,
+ 0x48, 0x20, 0x22, 0x39, 0x39, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c,
+ 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65,
+ 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f,
+ 0x34, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x64,
+ 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x5f, 0x62, 0x69, 0x61, 0x73,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x32, 0x1d,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x84, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,
+ 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xcc, 0xa3, 0xff, 0xff,
+ 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc1, 0xc0, 0xc0,
+ 0x3c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c,
+ 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65,
+ 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f,
+ 0x34, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x52,
+ 0x65, 0x6c, 0x75, 0x36, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00,
+ 0x00, 0x00, 0xd2, 0x1d, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x84, 0x00, 0x00,
+ 0x00, 0x35, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x6c, 0xa4, 0xff, 0xff, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18,
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0xc1, 0xc0, 0xc0, 0x3c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x4d,
+ 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f,
+ 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e,
+ 0x76, 0x32, 0x64, 0x5f, 0x33, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77, 0x69,
+ 0x73, 0x65, 0x2f, 0x52, 0x65, 0x6c, 0x75, 0x36, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00,
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x72, 0x1e, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x02, 0xe4, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0xf4, 0x24, 0xff, 0xff, 0x10, 0x01, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x3e, 0x8f,
+ 0xd5, 0x38, 0xe1, 0xa8, 0x15, 0x39, 0x06, 0x19, 0xf5, 0x38, 0x79, 0x80, 0xc5,
+ 0x38, 0x35, 0x5e, 0x4f, 0x38, 0x3f, 0x44, 0x8d, 0x38, 0x0a, 0xa0, 0xb7, 0x38,
+ 0xb2, 0xf2, 0xa7, 0x38, 0x34, 0xb7, 0xf3, 0x38, 0xb4, 0xd4, 0xb8, 0x38, 0x08,
+ 0x3d, 0x0e, 0x39, 0xea, 0xad, 0xa8, 0x38, 0x47, 0xf9, 0x00, 0x39, 0xbf, 0x4e,
+ 0x04, 0x39, 0xdb, 0x31, 0xa0, 0x38, 0xed, 0x1d, 0xbd, 0x38, 0x41, 0x75, 0xc6,
+ 0x38, 0x76, 0x6a, 0xe9, 0x38, 0xe5, 0x13, 0x0f, 0x39, 0x14, 0xa9, 0xed, 0x38,
+ 0xd2, 0x34, 0x26, 0x39, 0xc4, 0x70, 0xc7, 0x38, 0x27, 0xd1, 0xb3, 0x38, 0xb7,
+ 0x3f, 0xfd, 0x38, 0x58, 0x20, 0x1e, 0x39, 0xd6, 0xeb, 0x47, 0x39, 0x15, 0x4c,
+ 0x22, 0x39, 0xa1, 0xd0, 0x04, 0x39, 0xa2, 0x9e, 0x8c, 0x38, 0x2c, 0x4b, 0xbe,
+ 0x38, 0xd9, 0xb7, 0xe5, 0x38, 0x2a, 0xdd, 0xbf, 0x38, 0x36, 0x00, 0x00, 0x00,
+ 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d,
+ 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f,
+ 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x33, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77,
+ 0x69, 0x73, 0x65, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x44, 0x5f, 0x62, 0x69,
+ 0x61, 0x73, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x66,
+ 0x20, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0xec, 0x01, 0x00, 0x00, 0x22, 0x00,
+ 0x00, 0x00, 0xa4, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xc2, 0x19, 0xff,
+ 0xff, 0x14, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe1, 0x95, 0x47, 0x39, 0x5c,
+ 0xa6, 0x6d, 0x39, 0x76, 0xe7, 0x2c, 0x39, 0x44, 0x2e, 0x74, 0x39, 0x27, 0x35,
+ 0x9d, 0x39, 0x0c, 0xe8, 0x14, 0x3a, 0x59, 0x1e, 0xd8, 0x38, 0x9b, 0xf8, 0x30,
+ 0x39, 0xfc, 0xec, 0x33, 0x39, 0xcd, 0x64, 0xd1, 0x39, 0x39, 0xe6, 0x05, 0x3a,
+ 0x72, 0xd9, 0x25, 0x39, 0x42, 0xa7, 0x87, 0x38, 0xd6, 0xfc, 0xa1, 0x39, 0xe1,
+ 0x80, 0x50, 0x39, 0xe2, 0x17, 0x4b, 0x38, 0x07, 0xb7, 0x2c, 0x39, 0xa1, 0x48,
+ 0xd2, 0x38, 0x3d, 0xfc, 0x06, 0x3a, 0xae, 0x9c, 0x16, 0x3a, 0x53, 0xec, 0x07,
+ 0x39, 0x9c, 0xa6, 0x10, 0x3a, 0x59, 0x92, 0x9c, 0x38, 0xd0, 0xc6, 0x1f, 0x39,
+ 0x61, 0x0a, 0x16, 0x39, 0xb9, 0x19, 0x35, 0x3a, 0x4d, 0x18, 0x3b, 0x39, 0x21,
+ 0x5f, 0x9e, 0x38, 0x70, 0x69, 0xfb, 0x38, 0x85, 0x13, 0x29, 0x39, 0xca, 0x56,
+ 0x1f, 0x39, 0x98, 0x9d, 0x8a, 0x39, 0x39, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62,
+ 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69,
+ 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32,
+ 0x64, 0x5f, 0x33, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65,
+ 0x2f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x5f, 0x62, 0x69,
+ 0x61, 0x73, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x62, 0x22, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x84, 0x00, 0x00, 0x00, 0x32,
+ 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xfc, 0xa8,
+ 0xff, 0xff, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc1,
+ 0xc0, 0xc0, 0x3c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62,
+ 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69,
+ 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32,
+ 0x64, 0x5f, 0x33, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65,
+ 0x2f, 0x52, 0x65, 0x6c, 0x75, 0x36, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+ 0x20, 0x00, 0x00, 0x00, 0x02, 0x23, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x84,
+ 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0x9c, 0xa9, 0xff, 0xff, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00,
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0xc1, 0xc0, 0xc0, 0x3c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xc0, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00,
+ 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f,
+ 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43,
+ 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x32, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74,
+ 0x77, 0x69, 0x73, 0x65, 0x2f, 0x52, 0x65, 0x6c, 0x75, 0x36, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+ 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xa2, 0x23, 0xff, 0xff, 0x00,
+ 0x00, 0x00, 0x02, 0xe4, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0xa0, 0x01,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x24, 0x2a, 0xff, 0xff, 0x10, 0x01, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0xa9, 0x23, 0x8e, 0x39, 0xb2, 0x18, 0xc6, 0x38, 0x94, 0x74, 0x1a, 0x39, 0x67,
+ 0xb0, 0x1d, 0x39, 0xcd, 0x82, 0xf5, 0x38, 0xb3, 0x69, 0x1d, 0x38, 0x67, 0xcc,
+ 0x03, 0x39, 0x74, 0xc8, 0x29, 0x39, 0xaf, 0x8a, 0xb9, 0x38, 0x18, 0x9b, 0xa7,
+ 0x38, 0xb5, 0x00, 0x2d, 0x38, 0x4f, 0x24, 0xfe, 0x38, 0xce, 0xc8, 0x1c, 0x39,
+ 0xe2, 0x95, 0xfb, 0x38, 0xc4, 0x61, 0x72, 0x39, 0x18, 0x6d, 0x8d, 0x39, 0x57,
+ 0x16, 0x24, 0x39, 0x92, 0xe1, 0x3c, 0x39, 0x03, 0x6a, 0x5a, 0x38, 0x21, 0x2c,
+ 0x9b, 0x38, 0xa9, 0x0d, 0x05, 0x39, 0xd1, 0x14, 0x3f, 0x38, 0x2a, 0xa9, 0x11,
+ 0x39, 0xf1, 0xe3, 0x25, 0x39, 0xd4, 0x0c, 0x05, 0x39, 0x8c, 0x1e, 0xdc, 0x37,
+ 0xfa, 0xf1, 0x07, 0x39, 0x33, 0x53, 0x34, 0x39, 0x97, 0x2f, 0x6a, 0x39, 0xd0,
+ 0x60, 0xe8, 0x38, 0x00, 0x42, 0x4d, 0x39, 0xf1, 0xd0, 0xb5, 0x38, 0x36, 0x00,
+ 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31,
+ 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f,
+ 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x32, 0x5f, 0x70, 0x6f, 0x69, 0x6e,
+ 0x74, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x44, 0x5f,
+ 0x62, 0x69, 0x61, 0x73, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
+ 0x00, 0x96, 0x25, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0x2c, 0x01, 0x00, 0x00,
+ 0x30, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xf2,
+ 0x1e, 0xff, 0xff, 0x94, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00,
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x27,
+ 0xf0, 0xac, 0x38, 0x4d, 0xb4, 0x95, 0x38, 0x20, 0x35, 0xf3, 0x38, 0xed, 0x7a,
+ 0xc5, 0x38, 0x08, 0x25, 0x10, 0x39, 0xff, 0xdf, 0xec, 0x38, 0x1b, 0x9b, 0xf9,
+ 0x38, 0xce, 0x25, 0x84, 0x38, 0x67, 0xff, 0xf7, 0x38, 0xf1, 0x99, 0x5b, 0x39,
+ 0x59, 0xbf, 0x93, 0x38, 0x9e, 0x8e, 0xf4, 0x38, 0xf9, 0x05, 0xb2, 0x38, 0xa0,
+ 0x01, 0xad, 0x38, 0x04, 0x3f, 0x24, 0x39, 0xef, 0x8a, 0x32, 0x39, 0x39, 0x00,
+ 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31,
+ 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f,
+ 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x32, 0x5f, 0x64, 0x65, 0x70, 0x74,
+ 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69,
+ 0x73, 0x65, 0x5f, 0x62, 0x69, 0x61, 0x73, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0xd2, 0x26, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09,
+ 0x84, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x6c, 0xad, 0xff, 0xff, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00,
+ 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0xc1, 0xc0, 0xc0, 0x3c, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc0, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00,
+ 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31,
+ 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f,
+ 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x32, 0x5f, 0x64, 0x65, 0x70, 0x74,
+ 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x52, 0x65, 0x6c, 0x75, 0x36, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x72, 0x27, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x09, 0x84, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x44,
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0c, 0xae, 0xff, 0xff, 0x30, 0x00,
+ 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc1, 0xc0, 0xc0, 0x3c, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e,
+ 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65,
+ 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x31, 0x5f,
+ 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x52, 0x65, 0x6c,
+ 0x75, 0x36, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x12, 0x28, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0x24, 0x01, 0x00, 0x00, 0x24,
+ 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x94, 0x2e,
+ 0xff, 0xff, 0x90, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x58, 0x91, 0xaa, 0x39, 0x89, 0x15,
+ 0x5a, 0x39, 0x0c, 0xe3, 0xcb, 0x39, 0x37, 0x66, 0x33, 0x39, 0xb6, 0xee, 0x95,
+ 0x39, 0x82, 0xd1, 0x97, 0x39, 0xc1, 0x33, 0x41, 0x39, 0x27, 0x74, 0x53, 0x39,
+ 0xfc, 0x35, 0xb0, 0x39, 0x97, 0x5a, 0x4c, 0x39, 0x7b, 0xb4, 0x9e, 0x39, 0x95,
+ 0xda, 0x45, 0x39, 0xfc, 0x96, 0x95, 0x39, 0x36, 0x8b, 0x2b, 0x39, 0x2f, 0x32,
+ 0x48, 0x39, 0x51, 0x8f, 0x86, 0x39, 0x36, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62,
+ 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69,
+ 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32,
+ 0x64, 0x5f, 0x31, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77, 0x69, 0x73, 0x65,
+ 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x44, 0x5f, 0x62, 0x69, 0x61, 0x73, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x46, 0x29, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x02, 0xcc, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x84,
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xa2, 0x22, 0xff, 0xff, 0x54, 0x00,
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xfa, 0x50, 0xd3, 0x38, 0x62,
+ 0x8a, 0x18, 0x39, 0x74, 0x24, 0x61, 0x3b, 0x22, 0x48, 0x8f, 0x38, 0xec, 0xd9,
+ 0xb4, 0x39, 0x0a, 0xb5, 0x82, 0x38, 0x1c, 0xef, 0x35, 0x39, 0xd6, 0x72, 0xf6,
+ 0x3b, 0x39, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65,
+ 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74,
+ 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x31, 0x5f, 0x64,
+ 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x64, 0x65, 0x70, 0x74,
+ 0x68, 0x77, 0x69, 0x73, 0x65, 0x5f, 0x62, 0x69, 0x61, 0x73, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x22, 0x2a, 0xff, 0xff, 0x00,
+ 0x00, 0x00, 0x09, 0x84, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x44, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xbc, 0xb0, 0xff, 0xff, 0x30, 0x00, 0x00,
+ 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc1, 0xc0, 0xc0, 0x3c, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x30, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65,
+ 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74,
+ 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x31, 0x5f, 0x64,
+ 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x52, 0x65, 0x6c, 0x75,
+ 0x36, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xc2,
+ 0x2a, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x84, 0x00, 0x00, 0x00, 0x27, 0x00,
+ 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5c, 0xb1, 0xff,
+ 0xff, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x98, 0x72,
+ 0x98, 0x3c, 0x01, 0x00, 0x00, 0x00, 0x25, 0xda, 0x97, 0x40, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69,
+ 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c,
+ 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64,
+ 0x5f, 0x31, 0x33, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77, 0x69, 0x73, 0x65,
+ 0x2f, 0x52, 0x65, 0x6c, 0x75, 0x36, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x62, 0x2b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0x64, 0x0c,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x0c, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0xe4, 0x31, 0xff, 0xff, 0x10, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1f, 0x37, 0xa6, 0x37, 0xa1, 0xb4, 0x00,
+ 0x38, 0x98, 0x9f, 0xe0, 0x37, 0x43, 0x01, 0x4f, 0x37, 0x0f, 0xa8, 0xe7, 0x37,
+ 0x6d, 0x06, 0x84, 0x37, 0x96, 0x2b, 0x92, 0x37, 0x4d, 0xf5, 0xe0, 0x37, 0x9e,
+ 0xa2, 0xa7, 0x37, 0xa0, 0x06, 0xcc, 0x37, 0xe4, 0x70, 0xa6, 0x37, 0x4d, 0x9c,
+ 0x85, 0x37, 0xbd, 0x71, 0xd4, 0x37, 0xfe, 0x3d, 0x8b, 0x37, 0xd5, 0xe9, 0x87,
+ 0x37, 0x0a, 0x83, 0xa1, 0x37, 0xae, 0x42, 0xae, 0x37, 0xc5, 0xda, 0x82, 0x37,
+ 0xad, 0xbd, 0x6b, 0x37, 0xa5, 0x09, 0xbe, 0x37, 0xb8, 0xf0, 0x5c, 0x37, 0x78,
+ 0xb8, 0x95, 0x37, 0x6a, 0xbe, 0xc1, 0x37, 0xc7, 0xbc, 0x96, 0x37, 0x14, 0xb4,
+ 0xe4, 0x37, 0xf2, 0x48, 0x92, 0x37, 0x46, 0xc4, 0x06, 0x38, 0x59, 0x42, 0xc5,
+ 0x37, 0x7c, 0x19, 0x66, 0x37, 0x30, 0xe4, 0x8a, 0x37, 0x5b, 0x24, 0xa4, 0x37,
+ 0x78, 0x26, 0xba, 0x37, 0xca, 0xbf, 0xd9, 0x37, 0xf5, 0xb8, 0x9c, 0x37, 0xee,
+ 0xa0, 0x96, 0x37, 0xb5, 0xa5, 0x8f, 0x37, 0x58, 0xa9, 0x9e, 0x37, 0xc0, 0x9e,
+ 0x79, 0x37, 0x56, 0xde, 0xac, 0x37, 0x89, 0xa8, 0x94, 0x37, 0xcc, 0xeb, 0xc6,
+ 0x37, 0xd2, 0x26, 0xa3, 0x37, 0x3b, 0x10, 0xc7, 0x37, 0x7c, 0x49, 0xba, 0x37,
+ 0xbb, 0x07, 0x5a, 0x37, 0xe4, 0x03, 0x6f, 0x37, 0xee, 0x71, 0x93, 0x37, 0x74,
+ 0x4a, 0x89, 0x37, 0x3d, 0x2f, 0xd1, 0x37, 0x38, 0x2e, 0xca, 0x37, 0xa3, 0x44,
+ 0xa3, 0x37, 0x4d, 0xbe, 0x6d, 0x37, 0x27, 0x53, 0x88, 0x37, 0x87, 0x38, 0x1c,
+ 0x38, 0x53, 0x4c, 0x8e, 0x37, 0x3f, 0x6a, 0xbe, 0x37, 0x6a, 0x06, 0xc9, 0x37,
+ 0xf6, 0xa8, 0x96, 0x37, 0x07, 0x79, 0x87, 0x37, 0xa5, 0x0f, 0xa6, 0x37, 0xc0,
+ 0x65, 0xa6, 0x37, 0x4d, 0xf4, 0x9a, 0x37, 0xa1, 0x4f, 0xc2, 0x37, 0x49, 0xa7,
+ 0x8f, 0x37, 0x46, 0x94, 0x68, 0x37, 0xd8, 0x90, 0xa0, 0x37, 0x00, 0x2c, 0x76,
+ 0x37, 0xe0, 0xdc, 0x92, 0x37, 0x02, 0x50, 0x92, 0x37, 0xb5, 0x1f, 0xab, 0x37,
+ 0x77, 0x9c, 0xae, 0x37, 0x4f, 0x20, 0x8f, 0x37, 0x30, 0xd6, 0x43, 0x37, 0xbc,
+ 0xb3, 0x9f, 0x37, 0x08, 0x44, 0x7e, 0x37, 0x8b, 0x1a, 0x79, 0x37, 0x2f, 0xb3,
+ 0xf9, 0x37, 0x19, 0x9a, 0xa3, 0x37, 0x64, 0xa1, 0x87, 0x37, 0x39, 0xb2, 0x4f,
+ 0x37, 0x24, 0x04, 0x19, 0x38, 0x06, 0x87, 0x81, 0x37, 0x8b, 0xfb, 0x4f, 0x37,
+ 0xbc, 0x34, 0x93, 0x37, 0xff, 0x66, 0xd9, 0x37, 0xfc, 0x08, 0x66, 0x37, 0x44,
+ 0xf8, 0x87, 0x37, 0xfd, 0xf8, 0xec, 0x37, 0x74, 0x22, 0x93, 0x37, 0x8b, 0x02,
+ 0x99, 0x37, 0x05, 0x49, 0xc1, 0x37, 0x7d, 0x68, 0x7d, 0x37, 0x7e, 0x66, 0x99,
+ 0x37, 0xff, 0xdd, 0xa3, 0x37, 0xc7, 0x00, 0x5b, 0x37, 0x1b, 0x9c, 0xe9, 0x37,
+ 0xbe, 0x3f, 0xc6, 0x37, 0x12, 0x48, 0xad, 0x37, 0x61, 0x61, 0xe4, 0x37, 0x61,
+ 0xd1, 0x81, 0x37, 0x4f, 0xd5, 0x80, 0x37, 0x5b, 0x9b, 0x7c, 0x37, 0xc3, 0x4c,
+ 0x7c, 0x37, 0xad, 0xdd, 0xa6, 0x37, 0x0f, 0x98, 0xcf, 0x37, 0x6f, 0xb3, 0x83,
+ 0x37, 0xff, 0xdd, 0x7e, 0x37, 0x8f, 0x15, 0x7e, 0x37, 0x39, 0xbb, 0xb7, 0x37,
+ 0xc2, 0xa7, 0xa1, 0x37, 0x33, 0xa7, 0xc9, 0x37, 0x5e, 0x0a, 0x7d, 0x37, 0xb5,
+ 0x3e, 0x45, 0x37, 0xbb, 0x10, 0xe8, 0x37, 0xc9, 0xc0, 0x86, 0x37, 0xb3, 0x01,
+ 0xc6, 0x37, 0x1a, 0xfe, 0xd6, 0x37, 0x12, 0x88, 0x8b, 0x37, 0x5b, 0x0c, 0xf5,
+ 0x37, 0xeb, 0x77, 0x7b, 0x37, 0xb1, 0x5b, 0xa6, 0x37, 0x80, 0xb2, 0x6e, 0x37,
+ 0x2c, 0x7e, 0x78, 0x37, 0xea, 0xc5, 0xa0, 0x37, 0x8c, 0xee, 0xa6, 0x37, 0xf1,
+ 0x74, 0x7a, 0x37, 0x47, 0xd0, 0x72, 0x37, 0x7a, 0xca, 0xb8, 0x37, 0x4f, 0x17,
+ 0xb1, 0x37, 0xe8, 0xee, 0xe9, 0x37, 0x0c, 0xb2, 0xf3, 0x37, 0x43, 0xcd, 0xbe,
+ 0x37, 0x4e, 0xe2, 0xa2, 0x37, 0xcc, 0x69, 0x77, 0x37, 0x63, 0xbf, 0xae, 0x37,
+ 0xcf, 0xf5, 0x49, 0x37, 0x15, 0x5a, 0xbd, 0x37, 0x87, 0xe5, 0xb5, 0x37, 0x0e,
+ 0x9c, 0x78, 0x37, 0x58, 0x6c, 0x92, 0x37, 0x82, 0xbe, 0xb3, 0x37, 0xbe, 0xbd,
+ 0x92, 0x37, 0xd5, 0xe0, 0x97, 0x37, 0xcb, 0xee, 0xa7, 0x37, 0x6e, 0xab, 0xa0,
+ 0x37, 0x21, 0x07, 0x9d, 0x37, 0xa1, 0x64, 0xac, 0x37, 0x56, 0xbc, 0xa9, 0x37,
+ 0xb5, 0x8d, 0xb8, 0x37, 0xed, 0x81, 0x87, 0x37, 0x95, 0xbf, 0xaa, 0x37, 0xc1,
+ 0xd9, 0x93, 0x37, 0xaa, 0x1d, 0x79, 0x37, 0x89, 0xa7, 0x66, 0x37, 0x52, 0x2f,
+ 0xb7, 0x37, 0x72, 0xb9, 0xa3, 0x37, 0x1d, 0xa3, 0x91, 0x37, 0xe2, 0x52, 0xef,
+ 0x37, 0xb0, 0x2b, 0x95, 0x37, 0xed, 0x68, 0x97, 0x37, 0x15, 0xd7, 0x76, 0x37,
+ 0x53, 0xba, 0x95, 0x37, 0x24, 0x50, 0x0a, 0x38, 0xbd, 0xc8, 0x9b, 0x37, 0xcd,
+ 0x2e, 0x92, 0x37, 0x41, 0x93, 0x8c, 0x37, 0x7d, 0xa0, 0x6e, 0x37, 0x05, 0x97,
+ 0x97, 0x37, 0x11, 0xc1, 0x5d, 0x37, 0x40, 0x3d, 0xf4, 0x37, 0x88, 0x74, 0x9c,
+ 0x37, 0x6d, 0x48, 0x6e, 0x37, 0xf1, 0x0a, 0xd1, 0x37, 0x6b, 0x91, 0x87, 0x37,
+ 0x1d, 0x90, 0x96, 0x37, 0x8a, 0x5c, 0x97, 0x37, 0xcd, 0x78, 0x4c, 0x38, 0xb6,
+ 0xc4, 0x18, 0x38, 0xe7, 0xee, 0xaa, 0x37, 0x76, 0xff, 0x9c, 0x37, 0x3e, 0xe5,
+ 0x75, 0x37, 0x5e, 0x91, 0x8d, 0x37, 0xe8, 0x93, 0x94, 0x37, 0x67, 0xa9, 0xa1,
+ 0x37, 0x38, 0x67, 0xbc, 0x37, 0x0f, 0x70, 0xae, 0x37, 0x56, 0xb9, 0xe5, 0x37,
+ 0xb9, 0x85, 0x8f, 0x37, 0x9e, 0xfe, 0x89, 0x37, 0xeb, 0x2d, 0x98, 0x37, 0xad,
+ 0x33, 0x9e, 0x37, 0x15, 0x54, 0xbd, 0x37, 0xac, 0x25, 0x78, 0x37, 0xa2, 0x99,
+ 0xa2, 0x37, 0x0f, 0x39, 0xb8, 0x37, 0x1d, 0x29, 0x70, 0x37, 0x49, 0x30, 0x88,
+ 0x37, 0x29, 0x56, 0xc4, 0x37, 0x5c, 0xc7, 0x73, 0x37, 0x5a, 0x86, 0x28, 0x37,
+ 0xb9, 0x1a, 0x89, 0x37, 0x19, 0x6d, 0x34, 0x37, 0x86, 0xf1, 0xb0, 0x37, 0xc2,
+ 0xbb, 0xb5, 0x37, 0xb9, 0xcc, 0x9e, 0x37, 0x53, 0xfc, 0xc1, 0x37, 0x15, 0x65,
+ 0xd7, 0x37, 0x36, 0x53, 0x84, 0x37, 0x11, 0x3c, 0x5f, 0x37, 0x21, 0xdf, 0xad,
+ 0x37, 0xaa, 0xa4, 0xb3, 0x37, 0xf0, 0x1d, 0xc0, 0x37, 0x89, 0x4d, 0x9d, 0x37,
+ 0x0b, 0x3f, 0x90, 0x37, 0xc7, 0x60, 0x0d, 0x38, 0x17, 0xd5, 0x62, 0x37, 0x79,
+ 0xf9, 0x64, 0x37, 0x05, 0xa7, 0x9d, 0x37, 0xa4, 0x54, 0xb6, 0x37, 0xd5, 0xd7,
+ 0x9a, 0x37, 0x6d, 0x6c, 0xa5, 0x37, 0xbc, 0x04, 0x84, 0x37, 0x26, 0xd0, 0xc6,
+ 0x37, 0x27, 0x4f, 0xd9, 0x37, 0xe4, 0x88, 0x97, 0x37, 0xa0, 0xb0, 0x90, 0x37,
+ 0xd0, 0x8a, 0x70, 0x37, 0x37, 0x89, 0x65, 0x37, 0xd0, 0xed, 0x84, 0x37, 0x51,
+ 0x5b, 0x81, 0x37, 0xa1, 0xcb, 0xcf, 0x37, 0x50, 0x99, 0x89, 0x37, 0x06, 0x12,
+ 0x98, 0x37, 0xb9, 0x3c, 0x46, 0x37, 0x79, 0x62, 0xc0, 0x37, 0x77, 0x44, 0xfd,
+ 0x37, 0xe2, 0x7a, 0xc5, 0x37, 0xcd, 0xd7, 0x74, 0x37, 0xfe, 0x0e, 0x80, 0x37,
+ 0xc2, 0x16, 0xbe, 0x37, 0xd8, 0x0f, 0x0f, 0x38, 0x06, 0x17, 0xd0, 0x37, 0x17,
+ 0xb5, 0x7e, 0x37, 0xda, 0x09, 0x0d, 0x38, 0x12, 0xbe, 0x6c, 0x37, 0xae, 0x7e,
+ 0xfe, 0x37, 0xc7, 0xb0, 0xe0, 0x37, 0x2b, 0xdd, 0xaf, 0x37, 0x8a, 0xa2, 0x86,
+ 0x37, 0x71, 0x66, 0x13, 0x38, 0x3e, 0x15, 0x8b, 0x37, 0xd1, 0x60, 0xa3, 0x37,
+ 0xd0, 0xe7, 0xf9, 0x37, 0xf3, 0xcf, 0xcb, 0x37, 0xc5, 0x4b, 0xa0, 0x37, 0x35,
+ 0xae, 0xcb, 0x37, 0x37, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65,
+ 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e,
+ 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x31,
+ 0x33, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x43,
+ 0x6f, 0x6e, 0x76, 0x32, 0x44, 0x5f, 0x62, 0x69, 0x61, 0x73, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xd6, 0x37, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x02, 0x6c, 0x0c, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x24, 0x0c, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x32, 0x31, 0xff, 0xff, 0x14, 0x08, 0x00, 0x00, 0x08,
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0xb0, 0xe5, 0x90, 0x39, 0xc1, 0x92, 0x2e, 0x39, 0x18, 0xad, 0xa1, 0x39, 0x8b,
+ 0xcb, 0x3b, 0x39, 0x27, 0xd9, 0x0f, 0x39, 0xb2, 0x7b, 0x51, 0x39, 0x41, 0xb1,
+ 0x05, 0x39, 0x4f, 0x04, 0x77, 0x39, 0xf3, 0x6c, 0x0f, 0x39, 0x3d, 0xfc, 0x77,
+ 0x39, 0x70, 0x73, 0x25, 0x39, 0x99, 0xd2, 0x12, 0x39, 0x26, 0xc1, 0x33, 0x39,
+ 0x8f, 0x0b, 0x33, 0x39, 0xae, 0xe1, 0x81, 0x39, 0xe4, 0xf5, 0x62, 0x39, 0x63,
+ 0x50, 0x20, 0x39, 0x76, 0x82, 0x10, 0x39, 0xc6, 0x80, 0x65, 0x39, 0xf6, 0x7d,
+ 0x54, 0x39, 0x0f, 0x03, 0x79, 0x39, 0x9b, 0xef, 0x4c, 0x39, 0xa1, 0x12, 0x48,
+ 0x39, 0x23, 0x63, 0x51, 0x39, 0x52, 0xcf, 0x62, 0x39, 0x3c, 0xff, 0x24, 0x39,
+ 0x9a, 0xbd, 0x33, 0x39, 0x89, 0x8e, 0x5a, 0x39, 0x53, 0x05, 0x71, 0x39, 0xe1,
+ 0x35, 0x06, 0x39, 0x36, 0x71, 0x1b, 0x39, 0x3b, 0x22, 0x09, 0x39, 0x4e, 0x59,
+ 0x17, 0x39, 0x51, 0x6c, 0x31, 0x39, 0xd2, 0x94, 0x46, 0x39, 0x15, 0x9a, 0x4c,
+ 0x39, 0x68, 0x27, 0x85, 0x39, 0x57, 0x9e, 0x40, 0x39, 0xdd, 0x3e, 0x9e, 0x39,
+ 0x05, 0x2d, 0x87, 0x39, 0x9b, 0xb1, 0x55, 0x39, 0x79, 0x55, 0x42, 0x39, 0x5e,
+ 0x90, 0x21, 0x39, 0xa1, 0x2a, 0x2d, 0x39, 0xb0, 0xa2, 0x36, 0x39, 0x06, 0x7a,
+ 0x40, 0x39, 0x00, 0x86, 0x4d, 0x39, 0x12, 0xab, 0x82, 0x39, 0x90, 0xf3, 0x3f,
+ 0x39, 0xe0, 0x70, 0x2c, 0x39, 0x5b, 0x73, 0x27, 0x39, 0x54, 0x38, 0x23, 0x39,
+ 0xf7, 0xd0, 0xff, 0x38, 0xbb, 0x29, 0x5e, 0x39, 0x1b, 0xd5, 0x83, 0x39, 0x4d,
+ 0xff, 0x25, 0x39, 0x21, 0xa7, 0x28, 0x39, 0x92, 0x5f, 0x2c, 0x39, 0x55, 0x77,
+ 0x76, 0x39, 0xc4, 0x8a, 0x09, 0x39, 0x5f, 0xdc, 0x3d, 0x39, 0xed, 0xe2, 0x8c,
+ 0x39, 0xde, 0x2b, 0x44, 0x39, 0x36, 0x74, 0x9c, 0x39, 0xf6, 0xe6, 0x7d, 0x39,
+ 0x15, 0xad, 0x6c, 0x39, 0x94, 0x7b, 0x23, 0x39, 0x21, 0xda, 0x65, 0x39, 0xf0,
+ 0xe6, 0x51, 0x39, 0xb0, 0xcd, 0x54, 0x39, 0x93, 0x79, 0x19, 0x39, 0x8c, 0x13,
+ 0x6c, 0x39, 0x9b, 0x9e, 0x26, 0x39, 0x2e, 0xd8, 0x37, 0x39, 0x2c, 0x02, 0x4e,
+ 0x39, 0xe1, 0x82, 0x3b, 0x39, 0x80, 0x97, 0x14, 0x39, 0xb0, 0x36, 0x47, 0x39,
+ 0x4b, 0x5c, 0x84, 0x39, 0xac, 0xcb, 0x38, 0x39, 0xad, 0xc9, 0x78, 0x39, 0x77,
+ 0x79, 0x25, 0x39, 0x58, 0x48, 0x7a, 0x39, 0xb6, 0x02, 0x31, 0x39, 0x6a, 0xcd,
+ 0x0b, 0x39, 0xde, 0xf4, 0x50, 0x39, 0xd2, 0x52, 0x83, 0x39, 0x30, 0x2e, 0x34,
+ 0x39, 0x35, 0x7c, 0x59, 0x39, 0x2c, 0x59, 0x2f, 0x39, 0x3b, 0x14, 0x19, 0x39,
+ 0xc2, 0x49, 0x26, 0x39, 0xea, 0xbf, 0x4c, 0x39, 0x64, 0xb8, 0x97, 0x39, 0xf3,
+ 0xb8, 0x52, 0x39, 0xed, 0xde, 0x44, 0x39, 0xb5, 0xb9, 0x58, 0x39, 0x58, 0x74,
+ 0x62, 0x39, 0x6f, 0x38, 0x1a, 0x39, 0x82, 0x10, 0x2f, 0x39, 0xf7, 0xa6, 0x60,
+ 0x39, 0xd3, 0xbd, 0x6f, 0x39, 0x12, 0xb3, 0x3b, 0x39, 0xf1, 0x46, 0x42, 0x39,
+ 0x72, 0xd8, 0x2c, 0x39, 0xd3, 0x91, 0x4e, 0x39, 0xaa, 0x80, 0x26, 0x39, 0x1b,
+ 0x95, 0xff, 0x38, 0xf0, 0xa8, 0x69, 0x39, 0xcf, 0x29, 0x86, 0x39, 0xd1, 0x23,
+ 0x1a, 0x39, 0xb6, 0x2f, 0x3a, 0x39, 0xa5, 0x55, 0x1e, 0x39, 0x17, 0xcf, 0x45,
+ 0x39, 0x15, 0x57, 0xea, 0x38, 0xcf, 0xbb, 0x17, 0x39, 0x52, 0xc3, 0x44, 0x39,
+ 0x2d, 0x44, 0x66, 0x39, 0x13, 0x22, 0x9e, 0x39, 0xa2, 0x1f, 0x2b, 0x39, 0x6d,
+ 0xac, 0x57, 0x39, 0x06, 0xa5, 0x84, 0x39, 0x9f, 0x2c, 0x0f, 0x39, 0x2a, 0xab,
+ 0x35, 0x39, 0x8c, 0x72, 0x49, 0x39, 0x73, 0x53, 0x4c, 0x39, 0xc6, 0x1a, 0x90,
+ 0x39, 0xf9, 0xa3, 0x6c, 0x39, 0xa7, 0xa9, 0xac, 0x39, 0x5d, 0x07, 0x1c, 0x39,
+ 0x75, 0x46, 0x21, 0x39, 0x4d, 0xad, 0x4a, 0x39, 0x23, 0x7f, 0x52, 0x39, 0x94,
+ 0x97, 0x4b, 0x39, 0xab, 0x86, 0x17, 0x39, 0x15, 0xa4, 0x05, 0x39, 0xe3, 0xce,
+ 0x1b, 0x39, 0xbb, 0xe3, 0xd9, 0x38, 0x55, 0x62, 0x1e, 0x39, 0x8e, 0x3c, 0x6c,
+ 0x39, 0x92, 0xd5, 0x4d, 0x39, 0x33, 0x73, 0x81, 0x39, 0x98, 0xce, 0xb0, 0x39,
+ 0x57, 0xe4, 0x25, 0x39, 0x59, 0x1f, 0x67, 0x39, 0x09, 0x6b, 0x77, 0x39, 0xbe,
+ 0xcc, 0x52, 0x39, 0x30, 0x00, 0x5a, 0x39, 0x24, 0x7f, 0x5c, 0x39, 0x62, 0x99,
+ 0x6e, 0x39, 0xa7, 0xc8, 0x44, 0x39, 0xd3, 0x1c, 0xf9, 0x38, 0xad, 0xa2, 0x8b,
+ 0x39, 0x0b, 0xe0, 0x61, 0x39, 0x64, 0xf5, 0x25, 0x39, 0x56, 0x0a, 0x53, 0x39,
+ 0x35, 0x4a, 0x47, 0x39, 0x0f, 0x33, 0x3c, 0x39, 0xc0, 0xb1, 0x34, 0x39, 0x24,
+ 0x11, 0x6c, 0x39, 0x32, 0x70, 0x3c, 0x39, 0xfe, 0x33, 0x36, 0x39, 0xe7, 0xbc,
+ 0xeb, 0x38, 0xba, 0xd8, 0x17, 0x39, 0x27, 0x6b, 0x5f, 0x39, 0xef, 0x82, 0x2d,
+ 0x39, 0x34, 0x5c, 0x6a, 0x39, 0x8c, 0x54, 0x3b, 0x39, 0x44, 0x16, 0x3c, 0x39,
+ 0x08, 0x5b, 0x78, 0x39, 0x20, 0xb4, 0xc1, 0x39, 0x49, 0xb8, 0x08, 0x39, 0x08,
+ 0xe9, 0x63, 0x39, 0x4d, 0x7b, 0x49, 0x39, 0x0a, 0x6c, 0x2c, 0x39, 0x15, 0x27,
+ 0x86, 0x39, 0x71, 0xda, 0x74, 0x39, 0xb1, 0x10, 0x18, 0x39, 0xa4, 0x45, 0x94,
+ 0x39, 0x61, 0x87, 0x71, 0x39, 0x8c, 0x1c, 0x64, 0x39, 0x7a, 0x1e, 0x7b, 0x39,
+ 0x7e, 0xb6, 0x36, 0x39, 0x2f, 0x59, 0x14, 0x39, 0xd5, 0x70, 0x1a, 0x39, 0x12,
+ 0xa8, 0xc2, 0x39, 0xe5, 0x23, 0x80, 0x39, 0x73, 0xd2, 0x95, 0x39, 0xe4, 0xe4,
+ 0x2c, 0x39, 0xc7, 0x98, 0x50, 0x39, 0xe2, 0x0d, 0x62, 0x39, 0xef, 0xd1, 0x22,
+ 0x39, 0xc5, 0xb5, 0x05, 0x39, 0x7b, 0x81, 0x3b, 0x39, 0xe7, 0xc4, 0x00, 0x39,
+ 0x93, 0xcf, 0x24, 0x39, 0xa4, 0x08, 0x18, 0x39, 0xa9, 0xa7, 0x5f, 0x39, 0x70,
+ 0xad, 0x8b, 0x39, 0x8c, 0xa8, 0x7c, 0x39, 0x9e, 0x62, 0x85, 0x39, 0x26, 0x5a,
+ 0x54, 0x39, 0xfc, 0x19, 0x0d, 0x39, 0x66, 0x93, 0x06, 0x39, 0x5c, 0x72, 0x7e,
+ 0x39, 0xde, 0x33, 0xf3, 0x38, 0x1e, 0x7d, 0x42, 0x39, 0x73, 0xfb, 0x46, 0x39,
+ 0x9a, 0x5f, 0x96, 0x39, 0x9c, 0xf5, 0x80, 0x39, 0x92, 0x05, 0x2a, 0x39, 0x64,
+ 0x49, 0x2e, 0x39, 0xcf, 0xb0, 0x3c, 0x39, 0x6e, 0x23, 0x41, 0x39, 0x46, 0xda,
+ 0x63, 0x39, 0xde, 0x7d, 0x7f, 0x39, 0x2c, 0x55, 0x5c, 0x39, 0xc0, 0x05, 0x29,
+ 0x39, 0xdf, 0xf3, 0x44, 0x39, 0xba, 0x41, 0x06, 0x39, 0xe5, 0x32, 0x7a, 0x39,
+ 0xee, 0xf3, 0x67, 0x39, 0x0c, 0x2d, 0x49, 0x39, 0xf7, 0x67, 0x7f, 0x39, 0x86,
+ 0x07, 0x3b, 0x39, 0x94, 0x91, 0x50, 0x39, 0x8a, 0xc6, 0x32, 0x39, 0x20, 0x3b,
+ 0x17, 0x39, 0x77, 0xba, 0x46, 0x39, 0x53, 0xe6, 0x58, 0x39, 0x2a, 0x2e, 0x9f,
+ 0x39, 0x08, 0x04, 0x5a, 0x39, 0x02, 0xc9, 0x2c, 0x39, 0x9e, 0x69, 0x6e, 0x39,
+ 0x42, 0xac, 0x92, 0x39, 0xb7, 0xa2, 0x17, 0x39, 0x1b, 0x22, 0x7f, 0x39, 0x59,
+ 0x99, 0x24, 0x39, 0x8c, 0xee, 0x42, 0x39, 0x79, 0xb6, 0x2a, 0x39, 0x41, 0xef,
+ 0x78, 0x39, 0xad, 0x11, 0x25, 0x39, 0x55, 0x23, 0x07, 0x39, 0x13, 0xd7, 0x38,
+ 0x39, 0x6e, 0xff, 0x5f, 0x39, 0x80, 0x41, 0x7f, 0x39, 0x58, 0xd1, 0x52, 0x39,
+ 0x4a, 0x08, 0x74, 0x39, 0x7a, 0xa0, 0x64, 0x39, 0xc1, 0x91, 0x66, 0x39, 0xbe,
+ 0x37, 0x6e, 0x39, 0xb9, 0xa4, 0x32, 0x39, 0x67, 0x88, 0x00, 0x39, 0xb8, 0xeb,
+ 0x56, 0x39, 0xec, 0x29, 0x15, 0x39, 0xec, 0x57, 0x40, 0x39, 0x3a, 0x00, 0x00,
+ 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f,
+ 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43,
+ 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x31, 0x33, 0x5f, 0x64, 0x65, 0x70, 0x74,
+ 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69,
+ 0x73, 0x65, 0x5f, 0x62, 0x69, 0x61, 0x73, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x52, 0x44, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x84,
+ 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0xec, 0xca, 0xff, 0xff, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00,
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0xc1, 0xc0, 0xc0, 0x3c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xc0, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00,
+ 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f,
+ 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43,
+ 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x31, 0x33, 0x5f, 0x64, 0x65, 0x70, 0x74,
+ 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x52, 0x65, 0x6c, 0x75, 0x36, 0x00, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xf2, 0x44, 0xff, 0xff, 0x00,
+ 0x00, 0x00, 0x09, 0x84, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x44, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x8c, 0xcb, 0xff, 0xff, 0x30, 0x00, 0x00,
+ 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc1, 0xc0, 0xc0, 0x3c, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x31, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65,
+ 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74,
+ 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x31, 0x32, 0x5f,
+ 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x52, 0x65, 0x6c,
+ 0x75, 0x36, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x92,
+ 0x45, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0x64, 0x0c, 0x00, 0x00, 0x08, 0x00,
+ 0x00, 0x00, 0x20, 0x0c, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x14, 0x4c, 0xff,
+ 0xff, 0x10, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x5e, 0xab, 0x58, 0x38, 0x1b, 0x09, 0x10, 0x38, 0x76, 0x32, 0x30,
+ 0x38, 0xb8, 0xde, 0x27, 0x38, 0xe2, 0x95, 0x9b, 0x38, 0xac, 0xeb, 0x28, 0x38,
+ 0x59, 0xcd, 0x7f, 0x38, 0xfb, 0xe1, 0x81, 0x38, 0x42, 0x88, 0x30, 0x38, 0x21,
+ 0x9e, 0x49, 0x38, 0x15, 0x51, 0x46, 0x38, 0x57, 0xbd, 0x3e, 0x38, 0x2f, 0xbe,
+ 0x17, 0x38, 0xdc, 0x57, 0x53, 0x38, 0xae, 0xf1, 0xa4, 0x38, 0x12, 0xd3, 0x64,
+ 0x38, 0x91, 0x27, 0x7a, 0x38, 0xf3, 0x6c, 0x14, 0x38, 0x97, 0x6f, 0x4a, 0x38,
+ 0x8b, 0xcb, 0x48, 0x38, 0x08, 0xfb, 0x82, 0x38, 0x3f, 0x07, 0x44, 0x38, 0xdb,
+ 0xb2, 0x3a, 0x38, 0x27, 0xbd, 0x26, 0x38, 0xde, 0xeb, 0x56, 0x38, 0x6a, 0x0a,
+ 0x7d, 0x38, 0x79, 0x0c, 0x58, 0x38, 0x98, 0x0d, 0x79, 0x38, 0x22, 0x01, 0x2f,
+ 0x38, 0xaa, 0x72, 0x46, 0x38, 0x91, 0x50, 0x07, 0x38, 0xea, 0xe2, 0x68, 0x38,
+ 0x14, 0x55, 0x53, 0x38, 0x32, 0xe4, 0x4b, 0x38, 0x9b, 0x92, 0x0f, 0x38, 0xf7,
+ 0xef, 0x3c, 0x38, 0x62, 0x4e, 0xa8, 0x38, 0x67, 0x90, 0x3c, 0x38, 0x05, 0xdf,
+ 0x14, 0x38, 0x3a, 0x8e, 0x7d, 0x38, 0x32, 0x6c, 0x7f, 0x38, 0x05, 0x40, 0x4b,
+ 0x38, 0x85, 0x4e, 0x46, 0x38, 0xbe, 0x73, 0x26, 0x38, 0xf9, 0x5d, 0x36, 0x38,
+ 0x8a, 0x30, 0x3d, 0x38, 0x3c, 0x9b, 0x2c, 0x38, 0x6a, 0x3b, 0x2c, 0x38, 0xe1,
+ 0x38, 0x89, 0x38, 0xdf, 0x1e, 0x5c, 0x38, 0x11, 0x07, 0x4f, 0x38, 0x08, 0x26,
+ 0x15, 0x38, 0x92, 0x27, 0x75, 0x38, 0xcf, 0x76, 0x3a, 0x38, 0x14, 0x13, 0x55,
+ 0x38, 0x64, 0x30, 0x53, 0x38, 0x4d, 0x19, 0x75, 0x38, 0xea, 0x65, 0x3d, 0x38,
+ 0xe5, 0x0c, 0x1d, 0x38, 0xc0, 0xb7, 0x4a, 0x38, 0x9f, 0xc4, 0x1c, 0x38, 0x38,
+ 0xae, 0x72, 0x38, 0x00, 0xba, 0x11, 0x38, 0xc9, 0xb0, 0x54, 0x38, 0x51, 0xb9,
+ 0x83, 0x38, 0x30, 0xf6, 0x57, 0x38, 0x2f, 0x3b, 0x4f, 0x38, 0xe4, 0x2f, 0x58,
+ 0x38, 0x59, 0xec, 0x16, 0x38, 0xf4, 0x06, 0x4a, 0x38, 0x8e, 0x81, 0x41, 0x38,
+ 0x30, 0x10, 0x40, 0x38, 0xb3, 0xfd, 0x95, 0x38, 0xa9, 0xfa, 0x49, 0x38, 0xcd,
+ 0x4f, 0x45, 0x38, 0x48, 0x3e, 0x22, 0x38, 0x5b, 0xb5, 0x5e, 0x38, 0x80, 0x22,
+ 0x44, 0x38, 0x02, 0x38, 0x78, 0x38, 0xfc, 0x94, 0xef, 0x38, 0xc1, 0xab, 0x95,
+ 0x38, 0xfc, 0x35, 0x17, 0x38, 0xcd, 0xd4, 0x6d, 0x38, 0xa0, 0xed, 0xe6, 0x37,
+ 0x17, 0xfc, 0x26, 0x38, 0x9a, 0x2a, 0xdd, 0x37, 0x00, 0x2a, 0x6e, 0x38, 0xc3,
+ 0xcf, 0x97, 0x38, 0x4b, 0x50, 0x1a, 0x38, 0x34, 0xe2, 0x78, 0x38, 0x65, 0x83,
+ 0x76, 0x38, 0xff, 0xf5, 0x8f, 0x38, 0x00, 0x75, 0x4c, 0x38, 0xed, 0x8f, 0x8a,
+ 0x38, 0xa4, 0x3f, 0x6c, 0x38, 0x32, 0x37, 0x66, 0x38, 0xb9, 0xa6, 0x40, 0x38,
+ 0x6f, 0x8b, 0x40, 0x38, 0xea, 0x25, 0x5f, 0x38, 0x8c, 0xbb, 0x52, 0x38, 0x1e,
+ 0x92, 0x4d, 0x38, 0x64, 0xda, 0x51, 0x38, 0xb2, 0xc2, 0x16, 0x38, 0xa6, 0x8a,
+ 0x2f, 0x38, 0x8b, 0x23, 0x58, 0x38, 0x9d, 0x86, 0x4c, 0x38, 0x39, 0xd1, 0x24,
+ 0x38, 0x59, 0x2d, 0x2d, 0x38, 0xdd, 0x33, 0x92, 0x38, 0x39, 0xe8, 0x28, 0x38,
+ 0xc6, 0x34, 0x57, 0x38, 0x16, 0xd8, 0x2d, 0x38, 0x44, 0x45, 0x63, 0x38, 0x12,
+ 0x10, 0x9b, 0x38, 0xf7, 0x0b, 0x05, 0x38, 0xae, 0x23, 0x35, 0x38, 0xd5, 0xd1,
+ 0x96, 0x38, 0xfd, 0xf5, 0x81, 0x38, 0x0b, 0x99, 0x71, 0x38, 0xd5, 0xae, 0x7e,
+ 0x38, 0xb0, 0x03, 0x50, 0x38, 0xff, 0x6c, 0x70, 0x38, 0xbd, 0xeb, 0x23, 0x38,
+ 0xce, 0xd1, 0x33, 0x38, 0x27, 0xe9, 0x3f, 0x38, 0x94, 0xc7, 0x39, 0x38, 0x1c,
+ 0x36, 0x22, 0x38, 0xb0, 0x96, 0x37, 0x38, 0x2e, 0x1b, 0x24, 0x38, 0xa6, 0x99,
+ 0x53, 0x38, 0x89, 0x1b, 0x3e, 0x38, 0x4d, 0x3d, 0x65, 0x38, 0x82, 0xda, 0x30,
+ 0x38, 0x7f, 0xe9, 0x47, 0x38, 0xe8, 0xd4, 0xa1, 0x38, 0xc1, 0x4b, 0x2f, 0x38,
+ 0x68, 0x9d, 0x48, 0x38, 0x62, 0xfb, 0x09, 0x38, 0xa7, 0x96, 0xff, 0x37, 0xb3,
+ 0x52, 0x43, 0x38, 0x3f, 0x5f, 0x2a, 0x38, 0x08, 0x03, 0x76, 0x38, 0x11, 0x90,
+ 0x2d, 0x38, 0xed, 0x50, 0x4f, 0x38, 0x46, 0xf5, 0x75, 0x38, 0x73, 0xd3, 0x8e,
+ 0x38, 0x4a, 0x4a, 0x84, 0x38, 0xaf, 0xdc, 0x82, 0x38, 0x77, 0xda, 0x24, 0x38,
+ 0x5e, 0x8b, 0x45, 0x38, 0x6e, 0x38, 0x4a, 0x38, 0x12, 0x5b, 0x3c, 0x38, 0x7c,
+ 0x27, 0x68, 0x38, 0x77, 0x4e, 0x0f, 0x38, 0xb6, 0x1d, 0x5c, 0x38, 0xa2, 0x68,
+ 0x9c, 0x38, 0x32, 0x4e, 0x5c, 0x38, 0xa4, 0xeb, 0x6b, 0x38, 0xfa, 0x00, 0x69,
+ 0x38, 0xe1, 0xb9, 0x5a, 0x38, 0xe2, 0xa4, 0x57, 0x38, 0xb3, 0x7c, 0x4e, 0x38,
+ 0xef, 0x33, 0x32, 0x38, 0x6b, 0x57, 0x08, 0x38, 0x25, 0xf4, 0x2b, 0x38, 0x26,
+ 0x3a, 0x74, 0x38, 0xc7, 0x13, 0x74, 0x38, 0x1f, 0x16, 0x82, 0x38, 0x27, 0x5f,
+ 0x21, 0x38, 0xbe, 0x7b, 0x7d, 0x38, 0x7b, 0x58, 0x98, 0x38, 0xe7, 0x8b, 0x95,
+ 0x38, 0x4f, 0xd2, 0x3c, 0x38, 0xdb, 0x19, 0x3f, 0x38, 0x06, 0xed, 0x7d, 0x38,
+ 0x75, 0x64, 0x2a, 0x38, 0xcf, 0x6a, 0x56, 0x38, 0x32, 0x2a, 0x39, 0x38, 0xb3,
+ 0xd9, 0x4d, 0x38, 0x8f, 0xe5, 0x79, 0x38, 0x20, 0xf9, 0x4a, 0x38, 0x9b, 0x1b,
+ 0x4f, 0x38, 0xa1, 0xbf, 0x9e, 0x38, 0xa5, 0x73, 0x3a, 0x38, 0x33, 0xe8, 0x34,
+ 0x38, 0xbb, 0x0b, 0x3b, 0x38, 0x8b, 0xbd, 0x42, 0x38, 0xc6, 0x6b, 0x38, 0x38,
+ 0x80, 0x3c, 0x52, 0x38, 0x18, 0xd2, 0x8b, 0x38, 0x2e, 0x63, 0x40, 0x38, 0x07,
+ 0x07, 0x3d, 0x38, 0xb8, 0x65, 0x5a, 0x38, 0xa2, 0x62, 0x11, 0x38, 0x44, 0x30,
+ 0x4b, 0x38, 0x7c, 0xf0, 0x4c, 0x38, 0x5b, 0xf6, 0x3d, 0x38, 0x2f, 0x0b, 0x84,
+ 0x38, 0xc7, 0xb6, 0x77, 0x38, 0x7c, 0x0e, 0x82, 0x38, 0x3e, 0x69, 0x6a, 0x38,
+ 0x80, 0x1a, 0x62, 0x38, 0x55, 0x09, 0x7f, 0x38, 0x05, 0x5b, 0x89, 0x38, 0xbf,
+ 0xa8, 0x10, 0x38, 0xac, 0x94, 0x86, 0x38, 0x84, 0xe1, 0x39, 0x38, 0xcd, 0xe1,
+ 0x6c, 0x38, 0x44, 0xc8, 0x6d, 0x38, 0xb5, 0x9e, 0x32, 0x38, 0xb0, 0x68, 0x71,
+ 0x38, 0x58, 0x21, 0x1f, 0x38, 0x68, 0x40, 0x4a, 0x38, 0xb5, 0x63, 0x7e, 0x38,
+ 0x51, 0x7d, 0x25, 0x38, 0x76, 0x9f, 0x4e, 0x38, 0xc6, 0x16, 0x7e, 0x38, 0x82,
+ 0x8f, 0x41, 0x38, 0xbe, 0x2b, 0x58, 0x38, 0xe2, 0x0c, 0x5e, 0x38, 0xff, 0xba,
+ 0x83, 0x38, 0xf0, 0x81, 0x99, 0x38, 0x97, 0x78, 0x4f, 0x38, 0x44, 0x39, 0x51,
+ 0x38, 0x49, 0xee, 0x6f, 0x38, 0x32, 0xce, 0x0c, 0x38, 0x67, 0x24, 0x2f, 0x38,
+ 0xde, 0xb2, 0x52, 0x38, 0xad, 0x9c, 0x36, 0x38, 0x03, 0x36, 0x23, 0x38, 0x55,
+ 0x22, 0x60, 0x38, 0x68, 0xd0, 0x87, 0x38, 0x77, 0x81, 0x41, 0x38, 0x0b, 0xc1,
+ 0x4c, 0x38, 0x41, 0xfd, 0x7a, 0x38, 0x32, 0x30, 0x24, 0x38, 0x0c, 0xca, 0x24,
+ 0x38, 0xb9, 0xa1, 0x48, 0x38, 0x92, 0x65, 0x73, 0x38, 0x20, 0x5f, 0x55, 0x38,
+ 0xdb, 0xe4, 0x2a, 0x38, 0x86, 0x64, 0x13, 0x38, 0x71, 0x46, 0x5a, 0x38, 0x3e,
+ 0x8c, 0x96, 0x38, 0x09, 0xa2, 0x35, 0x38, 0x49, 0x97, 0x71, 0x38, 0x38, 0xd5,
+ 0x4b, 0x38, 0xd9, 0xfc, 0x5a, 0x38, 0x7a, 0xbd, 0x73, 0x38, 0xba, 0x91, 0x8a,
+ 0x38, 0xcc, 0x88, 0x54, 0x38, 0xaa, 0xbe, 0x3f, 0x38, 0x39, 0xe4, 0x2d, 0x38,
+ 0x47, 0x27, 0x4a, 0x38, 0x22, 0xc9, 0x98, 0x38, 0x3c, 0x45, 0x93, 0x38, 0x37,
+ 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56,
+ 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31,
+ 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x31, 0x32, 0x5f, 0x70, 0x6f,
+ 0x69, 0x6e, 0x74, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32,
+ 0x44, 0x5f, 0x62, 0x69, 0x61, 0x73, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x06, 0x52, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0x6c, 0x06, 0x00,
+ 0x00, 0x09, 0x00, 0x00, 0x00, 0x24, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x62, 0x4b, 0xff, 0xff, 0x14, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xaf,
+ 0xee, 0x04, 0x39, 0x1a, 0x2d, 0xe1, 0x38, 0xcd, 0x5c, 0x4a, 0x39, 0x9e, 0x09,
+ 0x23, 0x39, 0x24, 0x90, 0x63, 0x39, 0x5e, 0x18, 0xd8, 0x38, 0x4f, 0x1f, 0x02,
+ 0x39, 0x8f, 0x4d, 0x25, 0x39, 0xb8, 0x22, 0xe3, 0x38, 0xbb, 0xb9, 0x51, 0x39,
+ 0x64, 0x85, 0x10, 0x39, 0xfc, 0xae, 0xee, 0x38, 0x6d, 0x49, 0x23, 0x39, 0x77,
+ 0xdd, 0x05, 0x39, 0xac, 0xbd, 0xfc, 0x38, 0xfc, 0x0d, 0x1b, 0x39, 0x8f, 0xdc,
+ 0x65, 0x39, 0x40, 0xf4, 0x2c, 0x39, 0x34, 0xb4, 0x0b, 0x39, 0xc5, 0x81, 0x01,
+ 0x39, 0xbe, 0xfd, 0x06, 0x39, 0x4c, 0xa1, 0xe8, 0x38, 0x53, 0xb2, 0x25, 0x39,
+ 0xcb, 0x38, 0x0b, 0x39, 0x73, 0x8a, 0xce, 0x38, 0x69, 0xdc, 0x28, 0x39, 0x95,
+ 0x30, 0x0e, 0x39, 0xee, 0x53, 0xdd, 0x38, 0x1a, 0x2f, 0x33, 0x39, 0xbf, 0x3e,
+ 0x1e, 0x39, 0x45, 0x1b, 0x1e, 0x39, 0x12, 0x7d, 0x3e, 0x39, 0x16, 0x99, 0x24,
+ 0x39, 0x2a, 0xbc, 0x36, 0x39, 0xa1, 0x90, 0x05, 0x39, 0xbe, 0x5a, 0x33, 0x39,
+ 0x74, 0x39, 0x2d, 0x39, 0x1b, 0xc8, 0xbe, 0x38, 0x73, 0xbe, 0xda, 0x38, 0xff,
+ 0x96, 0x5e, 0x39, 0xb8, 0xdb, 0xc5, 0x38, 0x08, 0x9c, 0x74, 0x39, 0x5c, 0x88,
+ 0x46, 0x39, 0x2f, 0x30, 0x12, 0x39, 0xe2, 0x1a, 0xff, 0x38, 0xf5, 0x05, 0x12,
+ 0x39, 0xd8, 0x56, 0xed, 0x38, 0xee, 0xd7, 0x53, 0x39, 0xf4, 0x60, 0xfa, 0x38,
+ 0x44, 0x47, 0xfc, 0x38, 0x65, 0x71, 0xf3, 0x38, 0x7d, 0x30, 0xdc, 0x38, 0x8c,
+ 0xb8, 0x2e, 0x39, 0x7a, 0x16, 0x40, 0x39, 0x1f, 0x90, 0x29, 0x39, 0xf5, 0x2a,
+ 0x39, 0x39, 0x15, 0x22, 0xde, 0x38, 0x49, 0x46, 0x28, 0x39, 0x24, 0x4d, 0xc1,
+ 0x38, 0x9a, 0x81, 0x05, 0x39, 0xb0, 0xfd, 0x31, 0x39, 0x87, 0x96, 0x35, 0x39,
+ 0xfd, 0x04, 0x14, 0x39, 0x56, 0x18, 0xce, 0x38, 0xe7, 0x38, 0x04, 0x39, 0x89,
+ 0x3d, 0x2d, 0x39, 0xad, 0x29, 0xe1, 0x38, 0x89, 0x83, 0x17, 0x39, 0xa7, 0x0c,
+ 0x16, 0x39, 0x41, 0x56, 0x4d, 0x39, 0x04, 0x5a, 0x0f, 0x39, 0x6d, 0x76, 0xd5,
+ 0x38, 0x6a, 0xbd, 0x03, 0x39, 0x8e, 0x29, 0xdd, 0x38, 0xa9, 0x07, 0x09, 0x39,
+ 0x75, 0x72, 0x02, 0x39, 0x9b, 0x42, 0xb7, 0x38, 0x42, 0x41, 0x03, 0x39, 0xbc,
+ 0xb7, 0x1e, 0x39, 0x2c, 0xaa, 0xf1, 0x38, 0xaf, 0xed, 0x1f, 0x39, 0x8c, 0xe9,
+ 0x3d, 0x39, 0x4f, 0xae, 0x02, 0x39, 0xb3, 0x70, 0x19, 0x39, 0x78, 0xa2, 0x37,
+ 0x39, 0xcf, 0xbf, 0x24, 0x39, 0x11, 0x48, 0x2a, 0x39, 0x88, 0xc4, 0x09, 0x39,
+ 0xb8, 0x9c, 0x61, 0x39, 0x2a, 0xbb, 0x2d, 0x39, 0x4d, 0x46, 0xb3, 0x38, 0x2c,
+ 0xb1, 0x2f, 0x39, 0x3b, 0xb2, 0x5c, 0x39, 0x68, 0x02, 0x0b, 0x39, 0xac, 0x5f,
+ 0x0e, 0x39, 0x97, 0x49, 0x52, 0x39, 0x5b, 0x3c, 0xf5, 0x38, 0x9c, 0x54, 0x14,
+ 0x39, 0xa5, 0x79, 0x19, 0x39, 0x05, 0x86, 0xf3, 0x38, 0x98, 0xb5, 0x4e, 0x39,
+ 0xeb, 0x2d, 0x65, 0x39, 0x64, 0xe8, 0x74, 0x39, 0x2c, 0xf8, 0xf9, 0x38, 0x76,
+ 0x51, 0x20, 0x39, 0x6d, 0xf2, 0xf9, 0x38, 0x23, 0xa2, 0x4d, 0x39, 0xb9, 0xfe,
+ 0x14, 0x39, 0xcc, 0x69, 0x09, 0x39, 0xa2, 0x12, 0x85, 0x39, 0x09, 0x0a, 0x39,
+ 0x39, 0xc0, 0xa2, 0xf4, 0x38, 0x3e, 0x22, 0x19, 0x39, 0xa1, 0x25, 0x0e, 0x39,
+ 0x1b, 0xf8, 0x13, 0x39, 0x19, 0x29, 0x16, 0x39, 0xa0, 0x37, 0x5e, 0x39, 0x24,
+ 0x0b, 0x1c, 0x39, 0x9d, 0x0b, 0xce, 0x38, 0x1b, 0x8f, 0xe9, 0x38, 0xd7, 0x0e,
+ 0x26, 0x39, 0x18, 0x13, 0xc2, 0x38, 0x5a, 0xb2, 0x07, 0x39, 0xe5, 0xa3, 0x74,
+ 0x39, 0x15, 0x8b, 0x99, 0x38, 0x37, 0xae, 0xfe, 0x38, 0x85, 0x31, 0x53, 0x39,
+ 0x73, 0x9b, 0x49, 0x39, 0x3a, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c,
+ 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65,
+ 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f,
+ 0x31, 0x32, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f,
+ 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x5f, 0x62, 0x69, 0x61,
+ 0x73, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x82, 0x58,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x84, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00,
+ 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1c, 0xdf, 0xff, 0xff,
+ 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc1, 0xc0, 0xc0,
+ 0x3c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c,
+ 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65,
+ 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f,
+ 0x31, 0x32, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f,
+ 0x52, 0x65, 0x6c, 0x75, 0x36, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x80, 0x00,
+ 0x00, 0x00, 0x22, 0x59, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x84, 0x00, 0x00,
+ 0x00, 0x26, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0xbc, 0xdf, 0xff, 0xff, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18,
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0xc1, 0xc0, 0xc0, 0x3c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x4d,
+ 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f,
+ 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e,
+ 0x76, 0x32, 0x64, 0x5f, 0x31, 0x31, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77,
+ 0x69, 0x73, 0x65, 0x2f, 0x52, 0x65, 0x6c, 0x75, 0x36, 0x00, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00,
+ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xc2, 0x59, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x02, 0x64, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x06, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x44, 0x60, 0xff, 0xff, 0x10, 0x04, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x69,
+ 0x47, 0x9f, 0x38, 0x5b, 0xf0, 0x8b, 0x38, 0xaa, 0xcd, 0x9a, 0x38, 0x40, 0x1d,
+ 0x5d, 0x38, 0x15, 0xe3, 0x78, 0x38, 0xdb, 0x22, 0x2f, 0x38, 0xb7, 0xfc, 0x7c,
+ 0x38, 0x05, 0xdd, 0x4b, 0x38, 0x70, 0xd6, 0x56, 0x38, 0xfd, 0x3d, 0x4a, 0x38,
+ 0x70, 0xb2, 0x4d, 0x38, 0x21, 0xe6, 0x7e, 0x38, 0x51, 0xa8, 0x8b, 0x38, 0x00,
+ 0x8f, 0x43, 0x38, 0x02, 0xd3, 0x73, 0x38, 0x4c, 0x13, 0x44, 0x38, 0x1e, 0x6c,
+ 0xa3, 0x38, 0xa9, 0x97, 0x88, 0x38, 0x5b, 0x0c, 0x3e, 0x38, 0xf6, 0x0a, 0x6a,
+ 0x38, 0x1a, 0x32, 0x71, 0x38, 0x05, 0xfb, 0x42, 0x38, 0x7d, 0x9d, 0x57, 0x38,
+ 0x1e, 0x05, 0x7c, 0x38, 0x9b, 0x6e, 0x9b, 0x38, 0xe5, 0x57, 0x55, 0x38, 0x15,
+ 0xcd, 0x74, 0x38, 0x79, 0xb9, 0x82, 0x38, 0x9a, 0x43, 0x30, 0x38, 0xa6, 0xd0,
+ 0x75, 0x38, 0xba, 0x21, 0x79, 0x38, 0x85, 0x96, 0x5f, 0x38, 0x89, 0xcb, 0x5d,
+ 0x38, 0xee, 0xb0, 0x90, 0x38, 0x39, 0xf4, 0x8c, 0x38, 0x98, 0xf8, 0x3a, 0x38,
+ 0x85, 0x5f, 0x65, 0x38, 0x93, 0x54, 0x39, 0x38, 0xf6, 0xa8, 0x77, 0x38, 0xb8,
+ 0xa7, 0x58, 0x38, 0x38, 0x90, 0x54, 0x38, 0x66, 0x29, 0x8a, 0x38, 0xbb, 0xbe,
+ 0x59, 0x38, 0x69, 0x3f, 0x85, 0x38, 0x96, 0x0d, 0xaa, 0x38, 0x2b, 0x8d, 0x98,
+ 0x38, 0x0b, 0x19, 0x57, 0x38, 0x14, 0x47, 0x7c, 0x38, 0xe1, 0x06, 0x91, 0x38,
+ 0xaa, 0x54, 0x72, 0x38, 0xaa, 0x43, 0x4b, 0x38, 0x24, 0x3a, 0x55, 0x38, 0xad,
+ 0xc2, 0x45, 0x38, 0x38, 0xd2, 0x6c, 0x38, 0x21, 0x95, 0x43, 0x38, 0xd6, 0x2d,
+ 0x5f, 0x38, 0x6b, 0x28, 0xaa, 0x38, 0x59, 0xf8, 0x56, 0x38, 0x3d, 0xa1, 0x72,
+ 0x38, 0xcf, 0x5e, 0x46, 0x38, 0x98, 0x72, 0x64, 0x38, 0x59, 0xb0, 0x82, 0x38,
+ 0x93, 0x97, 0x89, 0x38, 0x94, 0x0b, 0x71, 0x38, 0x68, 0x1e, 0x9e, 0x38, 0x4f,
+ 0x79, 0x6b, 0x38, 0x64, 0x7c, 0x71, 0x38, 0x5c, 0x15, 0x69, 0x38, 0x5c, 0x37,
+ 0x82, 0x38, 0xbb, 0x01, 0x5e, 0x38, 0x38, 0x98, 0x3c, 0x38, 0x40, 0xc6, 0x59,
+ 0x38, 0xa7, 0x14, 0x57, 0x38, 0xa7, 0xad, 0x8f, 0x38, 0x1a, 0xc8, 0x51, 0x38,
+ 0x30, 0x3a, 0x6b, 0x38, 0x18, 0xbd, 0x2f, 0x38, 0x27, 0x7e, 0x34, 0x38, 0x24,
+ 0xe2, 0x84, 0x38, 0x5c, 0x2c, 0x74, 0x38, 0xfd, 0xc7, 0xc2, 0x38, 0xe7, 0xfd,
+ 0xb9, 0x38, 0x1a, 0x1c, 0x75, 0x38, 0x07, 0x09, 0x86, 0x38, 0x1b, 0x05, 0x4b,
+ 0x38, 0x4f, 0xc3, 0x5a, 0x38, 0xbc, 0x2c, 0x36, 0x38, 0x17, 0x0d, 0x45, 0x38,
+ 0xb3, 0x8a, 0x92, 0x38, 0x30, 0x8f, 0x94, 0x38, 0x79, 0xf2, 0x53, 0x38, 0x2c,
+ 0x41, 0x95, 0x38, 0x57, 0x91, 0x8f, 0x38, 0x46, 0x02, 0x4b, 0x38, 0xd0, 0xaa,
+ 0x2d, 0x38, 0xe4, 0x49, 0x5a, 0x38, 0xf2, 0xaa, 0x37, 0x38, 0x02, 0x5e, 0x5a,
+ 0x38, 0x30, 0x54, 0x40, 0x38, 0x44, 0xbc, 0xb3, 0x38, 0xe7, 0x64, 0x79, 0x38,
+ 0xe5, 0x9f, 0x78, 0x38, 0x9c, 0x06, 0x88, 0x38, 0x2d, 0x40, 0x77, 0x38, 0x82,
+ 0x16, 0x2f, 0x38, 0xce, 0xd7, 0x8c, 0x38, 0x11, 0x5a, 0x54, 0x38, 0xa5, 0x49,
+ 0x8a, 0x38, 0xa3, 0x55, 0x6f, 0x38, 0x39, 0xb9, 0x4d, 0x38, 0xcb, 0x17, 0x85,
+ 0x38, 0x20, 0xec, 0x5f, 0x38, 0xe8, 0x9c, 0x7f, 0x38, 0x12, 0xe5, 0x55, 0x38,
+ 0xcc, 0xb5, 0x6b, 0x38, 0xc3, 0xa4, 0x6c, 0x38, 0x2e, 0x80, 0x87, 0x38, 0xb6,
+ 0x54, 0x47, 0x38, 0xfd, 0x78, 0x88, 0x38, 0xca, 0x4d, 0x62, 0x38, 0x88, 0x90,
+ 0x74, 0x38, 0xf6, 0xe1, 0x42, 0x38, 0x0b, 0x9f, 0x55, 0x38, 0xfb, 0xe5, 0x94,
+ 0x38, 0x2c, 0x57, 0x49, 0x38, 0x58, 0xdf, 0x76, 0x38, 0x7f, 0x56, 0x9a, 0x38,
+ 0x80, 0x6d, 0x6d, 0x38, 0x37, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c,
+ 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65,
+ 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f,
+ 0x31, 0x31, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77, 0x69, 0x73, 0x65, 0x2f,
+ 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x44, 0x5f, 0x62, 0x69, 0x61, 0x73, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x36, 0x60, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x02, 0x6c, 0x06, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x24, 0x06, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x92, 0x59, 0xff, 0xff, 0x14, 0x04, 0x00, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x00, 0x00, 0x00, 0xa6, 0x5d, 0x16, 0x39, 0x80, 0xca, 0x26, 0x39, 0x1d,
+ 0x38, 0x4e, 0x39, 0x85, 0x11, 0x0e, 0x39, 0x7a, 0xb2, 0xf1, 0x38, 0xe4, 0x71,
+ 0xf9, 0x38, 0xf8, 0xbb, 0x22, 0x39, 0x83, 0xfe, 0x50, 0x39, 0xa7, 0x56, 0x2a,
+ 0x39, 0x64, 0xa7, 0x64, 0x39, 0xc3, 0x88, 0x5f, 0x39, 0xe8, 0x19, 0x12, 0x39,
+ 0x73, 0xa6, 0x46, 0x39, 0x32, 0xc1, 0x7c, 0x39, 0xfc, 0x05, 0x25, 0x39, 0x2c,
+ 0x83, 0xdd, 0x38, 0x09, 0x83, 0x3f, 0x39, 0x1a, 0xee, 0xf2, 0x38, 0xca, 0x53,
+ 0xff, 0x38, 0x98, 0xc7, 0x8a, 0x38, 0x3c, 0x4e, 0x0a, 0x39, 0xbb, 0xe2, 0x2a,
+ 0x39, 0x73, 0x31, 0xa6, 0x38, 0xba, 0x18, 0x16, 0x39, 0x16, 0x5c, 0x26, 0x39,
+ 0x16, 0x0f, 0x23, 0x39, 0x9d, 0x2c, 0x7a, 0x39, 0xed, 0x6f, 0x80, 0x39, 0xfd,
+ 0xae, 0x61, 0x39, 0xb5, 0xd3, 0x56, 0x39, 0x52, 0xe0, 0xaa, 0x38, 0x71, 0x4c,
+ 0x34, 0x39, 0x86, 0x28, 0x3a, 0x39, 0xff, 0xb9, 0x3d, 0x39, 0x86, 0x87, 0xff,
+ 0x38, 0x5b, 0xb7, 0x33, 0x39, 0x6e, 0x8a, 0xdc, 0x38, 0xd8, 0xfa, 0x17, 0x39,
+ 0xfa, 0x05, 0x9b, 0x39, 0x54, 0x55, 0x03, 0x39, 0x2e, 0x3e, 0x38, 0x39, 0x55,
+ 0xe2, 0x58, 0x39, 0x6b, 0x3d, 0x7a, 0x39, 0xa9, 0xf1, 0x01, 0x39, 0xc4, 0x32,
+ 0xd8, 0x38, 0x2f, 0xa2, 0xe2, 0x38, 0x64, 0x41, 0x24, 0x39, 0x74, 0x1a, 0x21,
+ 0x39, 0x02, 0x5f, 0x36, 0x39, 0x27, 0x2b, 0x03, 0x39, 0xfc, 0xdf, 0xf0, 0x38,
+ 0x63, 0xa1, 0x31, 0x39, 0x45, 0x79, 0x16, 0x39, 0xd8, 0x1d, 0x39, 0x39, 0x72,
+ 0x33, 0x1b, 0x39, 0xe9, 0x8d, 0x85, 0x39, 0xcd, 0xf4, 0x07, 0x39, 0x30, 0x96,
+ 0x60, 0x39, 0x2d, 0x4a, 0x36, 0x39, 0x73, 0xac, 0x17, 0x39, 0x8f, 0x96, 0x04,
+ 0x39, 0xe0, 0xe9, 0x14, 0x39, 0x02, 0xd8, 0x74, 0x39, 0xd3, 0x31, 0x3b, 0x39,
+ 0xc6, 0x17, 0x61, 0x39, 0x47, 0xbf, 0x00, 0x39, 0x3b, 0x76, 0xf1, 0x38, 0x1b,
+ 0x81, 0xeb, 0x38, 0xd8, 0xf2, 0xf8, 0x38, 0xbd, 0xd6, 0x2a, 0x39, 0x99, 0x29,
+ 0x23, 0x39, 0xa7, 0x7a, 0x10, 0x39, 0x7d, 0x22, 0x30, 0x39, 0x9b, 0xd2, 0xf2,
+ 0x38, 0xfd, 0x0b, 0x16, 0x39, 0x88, 0xd2, 0x14, 0x39, 0x0c, 0x47, 0x46, 0x39,
+ 0x25, 0x27, 0x35, 0x39, 0xed, 0xda, 0x4c, 0x39, 0x61, 0xa7, 0x3d, 0x39, 0x47,
+ 0xde, 0xfb, 0x38, 0x92, 0x79, 0xf0, 0x38, 0x33, 0x22, 0x1d, 0x39, 0xe0, 0x77,
+ 0xb5, 0x38, 0xcc, 0x41, 0x13, 0x39, 0x32, 0xe3, 0x24, 0x39, 0xef, 0xfb, 0x3c,
+ 0x39, 0x18, 0x5d, 0x89, 0x39, 0xed, 0xb6, 0x31, 0x39, 0x80, 0xf8, 0xdc, 0x38,
+ 0xde, 0xc0, 0x61, 0x39, 0xab, 0x1b, 0x1d, 0x39, 0xd7, 0xde, 0x3a, 0x39, 0x2b,
+ 0xa0, 0x80, 0x39, 0x9b, 0xbf, 0x6f, 0x39, 0xa3, 0x07, 0x82, 0x39, 0x11, 0xa3,
+ 0x68, 0x39, 0x0d, 0x4d, 0x28, 0x39, 0x37, 0xf5, 0xe5, 0x38, 0xe2, 0x07, 0x1d,
+ 0x39, 0x22, 0xe9, 0x2b, 0x39, 0x64, 0x6d, 0xdc, 0x38, 0xe7, 0xfb, 0x96, 0x38,
+ 0xa9, 0x83, 0x2e, 0x39, 0xce, 0x74, 0x31, 0x39, 0xa4, 0xab, 0x71, 0x39, 0xf6,
+ 0xbc, 0x3b, 0x39, 0xb8, 0x99, 0x7f, 0x39, 0xa7, 0xd0, 0x18, 0x39, 0x3b, 0x6e,
+ 0x5f, 0x39, 0x35, 0x63, 0xd0, 0x38, 0x92, 0xbf, 0xf0, 0x38, 0x99, 0x14, 0x40,
+ 0x39, 0x36, 0xed, 0x0d, 0x39, 0x67, 0x31, 0x17, 0x39, 0x3e, 0x94, 0x28, 0x39,
+ 0x57, 0x94, 0x17, 0x39, 0x1e, 0x64, 0x11, 0x39, 0x73, 0x4a, 0x72, 0x39, 0xa7,
+ 0xf6, 0x39, 0x39, 0x73, 0xd8, 0x35, 0x39, 0xc5, 0x95, 0x1a, 0x39, 0x01, 0xa4,
+ 0x07, 0x39, 0x15, 0x2b, 0x2f, 0x39, 0xcf, 0xa3, 0x5c, 0x39, 0x98, 0xfc, 0x71,
+ 0x39, 0x66, 0xc2, 0x88, 0x39, 0xc0, 0xba, 0x55, 0x39, 0x3a, 0x00, 0x00, 0x00,
+ 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d,
+ 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f,
+ 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x31, 0x31, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68,
+ 0x77, 0x69, 0x73, 0x65, 0x2f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73,
+ 0x65, 0x5f, 0x62, 0x69, 0x61, 0x73, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80,
+ 0x00, 0x00, 0x00, 0xb2, 0x66, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x84, 0x00,
+ 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x4c, 0xed, 0xff, 0xff, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
+ 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0xc1, 0xc0, 0xc0, 0x3c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
+ 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00,
+ 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d,
+ 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f,
+ 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x31, 0x31, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68,
+ 0x77, 0x69, 0x73, 0x65, 0x2f, 0x52, 0x65, 0x6c, 0x75, 0x36, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06,
+ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x52, 0x67, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x09, 0x84, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0xec, 0xed, 0xff, 0xff, 0x30, 0x00, 0x00, 0x00,
+ 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc1, 0xc0, 0xc0, 0x3c, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xc0, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x31, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74,
+ 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56,
+ 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x31, 0x30, 0x5f, 0x70,
+ 0x6f, 0x69, 0x6e, 0x74, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x52, 0x65, 0x6c, 0x75,
+ 0x36, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06,
+ 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xf2, 0x67,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0x64, 0x06, 0x00, 0x00, 0x46, 0x00, 0x00,
+ 0x00, 0x20, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x74, 0x6e, 0xff, 0xff,
+ 0x10, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x00, 0x00, 0x00, 0x0f, 0xdb, 0x81, 0x38, 0x9a, 0x27, 0x6e, 0x38, 0xf4,
+ 0x34, 0x6d, 0x38, 0xd5, 0x59, 0x5c, 0x38, 0xfa, 0x44, 0x57, 0x38, 0x7d, 0xe6,
+ 0x46, 0x38, 0xc9, 0xad, 0x3f, 0x38, 0xcc, 0x17, 0x2a, 0x38, 0xc3, 0x1f, 0x69,
+ 0x38, 0x5a, 0x69, 0x85, 0x38, 0xa7, 0xd6, 0xad, 0x38, 0xd1, 0x8d, 0x8a, 0x38,
+ 0x68, 0xae, 0x66, 0x38, 0xeb, 0xdf, 0x6a, 0x38, 0x20, 0x8b, 0x56, 0x38, 0x3c,
+ 0x9c, 0x91, 0x38, 0x20, 0xc1, 0x8e, 0x38, 0x56, 0x75, 0x5d, 0x38, 0xb0, 0x8a,
+ 0x82, 0x38, 0xd1, 0xe7, 0x87, 0x38, 0xa7, 0xbf, 0x82, 0x38, 0x8b, 0xf8, 0xa1,
+ 0x38, 0x6e, 0x1e, 0x6c, 0x38, 0xbb, 0x19, 0x7f, 0x38, 0x32, 0xb7, 0x7a, 0x38,
+ 0xb2, 0x5a, 0x75, 0x38, 0x36, 0x30, 0xaa, 0x38, 0x09, 0x83, 0x67, 0x38, 0x76,
+ 0x02, 0x91, 0x38, 0x95, 0x5a, 0x7b, 0x38, 0xc1, 0xa1, 0x55, 0x38, 0x6a, 0x3e,
+ 0x3d, 0x38, 0x67, 0xf7, 0x6f, 0x38, 0x32, 0x6e, 0x40, 0x38, 0x0f, 0x3a, 0x86,
+ 0x38, 0xb5, 0xd7, 0x7d, 0x38, 0x6c, 0xfd, 0xa5, 0x38, 0x24, 0xfa, 0x7b, 0x38,
+ 0x47, 0x81, 0x70, 0x38, 0xad, 0x65, 0x65, 0x38, 0xa2, 0xce, 0x83, 0x38, 0x27,
+ 0xa2, 0x62, 0x38, 0x6d, 0x47, 0x6b, 0x38, 0x82, 0x04, 0x3a, 0x38, 0x52, 0x8e,
+ 0x69, 0x38, 0xfc, 0x53, 0x45, 0x38, 0x77, 0x70, 0x61, 0x38, 0xc8, 0xc8, 0x95,
+ 0x38, 0x9b, 0x83, 0x5f, 0x38, 0x95, 0xb5, 0x9d, 0x38, 0x71, 0x60, 0x6c, 0x38,
+ 0x49, 0x40, 0xa6, 0x38, 0x6a, 0x26, 0x80, 0x38, 0x89, 0x76, 0x4b, 0x38, 0x7a,
+ 0xdd, 0x87, 0x38, 0x01, 0x7e, 0x90, 0x38, 0x12, 0xd1, 0x73, 0x38, 0x62, 0x7a,
+ 0x8e, 0x38, 0xf4, 0xd6, 0x6a, 0x38, 0x8b, 0xd9, 0x4a, 0x38, 0x41, 0x51, 0x3c,
+ 0x38, 0xf6, 0x05, 0x3a, 0x38, 0xa1, 0x01, 0x81, 0x38, 0x43, 0x13, 0x72, 0x38,
+ 0x92, 0x81, 0x94, 0x38, 0x70, 0x8b, 0x6d, 0x38, 0x18, 0xc6, 0x71, 0x38, 0x80,
+ 0xd6, 0xa2, 0x38, 0x1f, 0xdb, 0xae, 0x38, 0xb3, 0x44, 0xd1, 0x38, 0xde, 0x33,
+ 0x3f, 0x38, 0x51, 0xf0, 0x3c, 0x38, 0xbe, 0x68, 0x6d, 0x38, 0xf0, 0xc2, 0x30,
+ 0x38, 0x8b, 0x96, 0x84, 0x38, 0xcf, 0x4e, 0x6d, 0x38, 0x39, 0xcb, 0x4c, 0x38,
+ 0x64, 0xf9, 0x32, 0x38, 0x90, 0x6f, 0x3f, 0x38, 0xa0, 0xd9, 0x65, 0x38, 0x2d,
+ 0x33, 0x74, 0x38, 0x8f, 0x61, 0x5b, 0x38, 0xc8, 0xcb, 0x80, 0x38, 0x9e, 0x5d,
+ 0x4b, 0x38, 0xb8, 0x83, 0x97, 0x38, 0x2a, 0x05, 0x96, 0x38, 0xfc, 0x2b, 0x6a,
+ 0x38, 0xb6, 0x3f, 0x36, 0x38, 0x50, 0x70, 0x6a, 0x38, 0x52, 0xfe, 0x64, 0x38,
+ 0xd2, 0x09, 0x6d, 0x38, 0x2a, 0x53, 0x9e, 0x38, 0x4c, 0x99, 0x8c, 0x38, 0xac,
+ 0x4d, 0x94, 0x38, 0x6f, 0x65, 0xa6, 0x38, 0xe0, 0xc6, 0x83, 0x38, 0x24, 0xb7,
+ 0x8a, 0x38, 0x5e, 0x02, 0x74, 0x38, 0xdb, 0xbe, 0x4d, 0x38, 0x1b, 0x8b, 0x43,
+ 0x38, 0xa1, 0x86, 0x2b, 0x38, 0x67, 0x24, 0x89, 0x38, 0xd5, 0x4c, 0x40, 0x38,
+ 0x30, 0xf2, 0x4b, 0x38, 0x8c, 0xf6, 0x63, 0x38, 0x3d, 0x68, 0x78, 0x38, 0x64,
+ 0x47, 0x98, 0x38, 0xde, 0xaa, 0x66, 0x38, 0x2f, 0x29, 0x6a, 0x38, 0xa3, 0x0e,
+ 0x50, 0x38, 0x4a, 0xd1, 0x53, 0x38, 0xa1, 0xd8, 0x62, 0x38, 0xfc, 0x95, 0x84,
+ 0x38, 0x64, 0x6e, 0x9d, 0x38, 0x4f, 0xa2, 0x8d, 0x38, 0x03, 0xbe, 0x80, 0x38,
+ 0xa1, 0x5f, 0x55, 0x38, 0x43, 0x55, 0x71, 0x38, 0xb5, 0xef, 0x5b, 0x38, 0x94,
+ 0x43, 0x5e, 0x38, 0x31, 0x5b, 0x77, 0x38, 0x32, 0xe8, 0x61, 0x38, 0x0c, 0x74,
+ 0x53, 0x38, 0x7a, 0xe4, 0x5f, 0x38, 0x62, 0xdf, 0x51, 0x38, 0x23, 0x25, 0x99,
+ 0x38, 0x17, 0xd0, 0x64, 0x38, 0x62, 0xd0, 0x68, 0x38, 0x37, 0x00, 0x00, 0x00,
+ 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d,
+ 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f,
+ 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x31, 0x30, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74,
+ 0x77, 0x69, 0x73, 0x65, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x44, 0x5f, 0x62,
+ 0x69, 0x61, 0x73, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x66,
+ 0x6e, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0x6c, 0x06, 0x00, 0x00, 0x16, 0x00,
+ 0x00, 0x00, 0x24, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xc2, 0x67, 0xff,
+ 0xff, 0x14, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x8d, 0xb4, 0x0a, 0x39,
+ 0x7e, 0xcb, 0x12, 0x39, 0x18, 0x65, 0x2f, 0x39, 0x96, 0xaa, 0x18, 0x39, 0x5e,
+ 0xca, 0x1c, 0x39, 0x2f, 0x14, 0x37, 0x39, 0x40, 0x9c, 0x08, 0x39, 0x42, 0x07,
+ 0x23, 0x39, 0x7b, 0xbd, 0x1c, 0x39, 0x0f, 0xa2, 0xf1, 0x38, 0xeb, 0x75, 0x25,
+ 0x39, 0xb6, 0x10, 0x4c, 0x39, 0x1e, 0x2c, 0x31, 0x39, 0x98, 0xa3, 0x48, 0x39,
+ 0xfa, 0x46, 0x7a, 0x39, 0xaa, 0xdf, 0xd6, 0x38, 0xff, 0xec, 0x4e, 0x39, 0x8f,
+ 0xac, 0x3e, 0x39, 0x94, 0x6b, 0x02, 0x39, 0xfd, 0xcc, 0xf7, 0x38, 0x71, 0x65,
+ 0x42, 0x39, 0x9a, 0x8d, 0x17, 0x39, 0x2a, 0x92, 0xb3, 0x38, 0x2a, 0x7d, 0x27,
+ 0x39, 0x7d, 0x6a, 0x6f, 0x39, 0xd8, 0xce, 0xda, 0x38, 0x2a, 0x54, 0x0b, 0x39,
+ 0x05, 0x96, 0x05, 0x39, 0xef, 0x61, 0x2b, 0x39, 0xe2, 0x57, 0x75, 0x39, 0x3b,
+ 0x78, 0x2c, 0x39, 0xbe, 0x24, 0xb6, 0x38, 0x8b, 0xca, 0x46, 0x39, 0x11, 0x3f,
+ 0x42, 0x39, 0x03, 0x1c, 0x14, 0x39, 0x3f, 0x96, 0x8c, 0x39, 0x53, 0xac, 0x00,
+ 0x39, 0x20, 0x71, 0x35, 0x39, 0x29, 0x32, 0x53, 0x39, 0x8e, 0x91, 0xfc, 0x38,
+ 0xb9, 0xf3, 0x29, 0x39, 0x2f, 0xed, 0xde, 0x38, 0x52, 0x28, 0x5a, 0x39, 0xb4,
+ 0x10, 0x82, 0x39, 0xd9, 0xdb, 0x42, 0x39, 0x26, 0xb8, 0xd0, 0x38, 0xd1, 0x22,
+ 0x22, 0x39, 0x73, 0xda, 0x13, 0x39, 0x23, 0x11, 0x55, 0x39, 0x4d, 0xd7, 0xce,
+ 0x38, 0x7c, 0x2d, 0x29, 0x39, 0xa2, 0x76, 0x3a, 0x39, 0x30, 0x7f, 0x45, 0x39,
+ 0x36, 0x9d, 0x29, 0x39, 0x49, 0x0c, 0xd5, 0x38, 0x70, 0x44, 0x30, 0x39, 0x4f,
+ 0x38, 0xec, 0x38, 0x3f, 0x3d, 0xb5, 0x38, 0xbf, 0x25, 0x33, 0x39, 0x12, 0xd7,
+ 0xbd, 0x38, 0xc6, 0x3e, 0xd0, 0x38, 0x9e, 0xdd, 0x25, 0x39, 0x5d, 0x82, 0x93,
+ 0x39, 0x3c, 0x1b, 0x19, 0x39, 0xe8, 0xcc, 0xf0, 0x38, 0x73, 0x56, 0x38, 0x39,
+ 0xbe, 0x5c, 0xf0, 0x38, 0x7f, 0x48, 0x30, 0x39, 0x02, 0xed, 0x57, 0x39, 0x6d,
+ 0x10, 0x1d, 0x39, 0x94, 0xbf, 0x21, 0x39, 0x89, 0x6e, 0x5e, 0x39, 0x52, 0x37,
+ 0x01, 0x39, 0x36, 0x31, 0xb7, 0x38, 0x09, 0xc4, 0xec, 0x38, 0x1d, 0xcd, 0x17,
+ 0x39, 0xb8, 0xd1, 0xd2, 0x38, 0x14, 0x86, 0x03, 0x39, 0x0f, 0xd3, 0xc9, 0x38,
+ 0x0a, 0x46, 0x03, 0x39, 0xa7, 0xb6, 0x1f, 0x39, 0x91, 0x21, 0xfc, 0x38, 0x47,
+ 0x19, 0x61, 0x39, 0x33, 0x5a, 0x0f, 0x39, 0x3e, 0x5c, 0xb4, 0x38, 0xb6, 0x11,
+ 0x22, 0x39, 0xf3, 0x79, 0x61, 0x39, 0xd8, 0x00, 0x6c, 0x39, 0x67, 0xe8, 0x30,
+ 0x39, 0x41, 0xd7, 0x8a, 0x39, 0xff, 0x16, 0x1f, 0x39, 0x75, 0x6b, 0x28, 0x39,
+ 0xe4, 0x57, 0x40, 0x39, 0x82, 0xef, 0xdb, 0x38, 0x8c, 0x69, 0xa0, 0x39, 0xc2,
+ 0xb9, 0x40, 0x39, 0x04, 0xc8, 0x83, 0x39, 0xce, 0xdd, 0x0e, 0x39, 0x4d, 0xa8,
+ 0xee, 0x38, 0xea, 0xbf, 0x24, 0x39, 0xfe, 0x8e, 0x10, 0x39, 0x17, 0x94, 0xe9,
+ 0x38, 0x38, 0x42, 0xaa, 0x38, 0x87, 0x5e, 0x37, 0x39, 0xa7, 0xe2, 0xd0, 0x38,
+ 0xa6, 0x2c, 0x21, 0x39, 0xd0, 0xeb, 0x41, 0x39, 0x59, 0x17, 0x5a, 0x39, 0x15,
+ 0xe7, 0x8c, 0x39, 0xf4, 0xde, 0x67, 0x39, 0x58, 0x8c, 0x2d, 0x39, 0x5c, 0x8e,
+ 0x1b, 0x39, 0x9a, 0xe9, 0xe6, 0x38, 0xa4, 0xe6, 0x29, 0x39, 0x3c, 0x34, 0x0a,
+ 0x39, 0x7c, 0x46, 0xcb, 0x38, 0xe7, 0x15, 0x28, 0x39, 0xa1, 0x03, 0x35, 0x39,
+ 0xa3, 0x8a, 0x20, 0x39, 0x05, 0xe8, 0xf2, 0x38, 0x61, 0xcf, 0xbb, 0x38, 0xc6,
+ 0x8a, 0x13, 0x39, 0x4d, 0xb1, 0x41, 0x39, 0x3f, 0x33, 0x38, 0x39, 0xac, 0x8c,
+ 0x5d, 0x39, 0xa1, 0x08, 0xc6, 0x38, 0x12, 0x0e, 0x39, 0x39, 0x79, 0x73, 0x3a,
+ 0x39, 0x3a, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65,
+ 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74,
+ 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x31, 0x30, 0x5f,
+ 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x64, 0x65, 0x70,
+ 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x5f, 0x62, 0x69, 0x61, 0x73, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xe2, 0x74, 0xff, 0xff, 0x00,
+ 0x00, 0x00, 0x09, 0x84, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x44, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x7c, 0xfb, 0xff, 0xff, 0x30, 0x00, 0x00,
+ 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc1, 0xc0, 0xc0, 0x3c, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x31, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65,
+ 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74,
+ 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x31, 0x30, 0x5f,
+ 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x52, 0x65, 0x6c,
+ 0x75, 0x36, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x82,
+ 0x75, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x78, 0x00, 0x00, 0x00, 0x59, 0x00,
+ 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1c, 0xfc, 0xff,
+ 0xff, 0x30, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc1, 0xc0,
+ 0xc0, 0x3c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69,
+ 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d, 0x6f, 0x62, 0x69, 0x6c,
+ 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64,
+ 0x5f, 0x30, 0x2f, 0x52, 0x65, 0x6c, 0x75, 0x36, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0x16, 0x76, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0xc0,
+ 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0x72, 0x6f, 0xff, 0xff, 0x54, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
+ 0x00, 0x00, 0x00, 0x8c, 0x89, 0x06, 0x39, 0x3a, 0xd9, 0x5a, 0x39, 0xb1, 0xe4,
+ 0xc7, 0x37, 0x81, 0xa6, 0xd6, 0x37, 0x69, 0xc0, 0xbd, 0x38, 0xcd, 0xb7, 0x99,
+ 0x39, 0xeb, 0x2f, 0x15, 0x39, 0x7f, 0xee, 0x0e, 0x37, 0x2c, 0x00, 0x00, 0x00,
+ 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4d,
+ 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f,
+ 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x30, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x44,
+ 0x5f, 0x62, 0x69, 0x61, 0x73, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0xe6, 0x76, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0x44,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00,
+ 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f,
+ 0x4c, 0x6f, 0x67, 0x69, 0x74, 0x73, 0x2f, 0x53, 0x70, 0x61, 0x74, 0x69, 0x61,
+ 0x6c, 0x53, 0x71, 0x75, 0x65, 0x65, 0x7a, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x70,
+ 0x65, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3a, 0x77, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x09, 0x74, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+ 0x44, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xd4, 0xfd, 0xff, 0xff, 0x30,
+ 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x73, 0x1b, 0x4d, 0x3c,
+ 0x01, 0x00, 0x00, 0x00, 0xce, 0xb0, 0xcc, 0x3f, 0x01, 0x00, 0x00, 0x00, 0xe2,
+ 0xeb, 0xcb, 0xbf, 0x21, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65,
+ 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4c, 0x6f, 0x67, 0x69, 0x74, 0x73, 0x2f,
+ 0x53, 0x70, 0x61, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x71, 0x75, 0x65, 0x65, 0x7a,
+ 0x65, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0xc2, 0x77, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x74, 0x00,
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x44, 0x7e, 0xff, 0xff, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0xe5, 0xd6, 0xbf, 0x3a, 0x4a, 0xd6, 0xb6, 0x3a, 0x2d, 0x00, 0x00,
+ 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f,
+ 0x4c, 0x6f, 0x67, 0x69, 0x74, 0x73, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64,
+ 0x5f, 0x31, 0x63, 0x5f, 0x31, 0x78, 0x31, 0x2f, 0x77, 0x65, 0x69, 0x67, 0x68,
+ 0x74, 0x73, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x52, 0x78, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0x70,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0xd4, 0x7e, 0xff, 0xff, 0x1c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xef,
+ 0x7a, 0xe4, 0x37, 0x28, 0xc2, 0xd9, 0x37, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x6f,
+ 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4c, 0x6f, 0x67,
+ 0x69, 0x74, 0x73, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x31, 0x63,
+ 0x5f, 0x31, 0x78, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x44, 0x5f, 0x62,
+ 0x69, 0x61, 0x73, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0xd2, 0x78, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x78, 0x00, 0x00,
+ 0x00, 0x4b, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x6c, 0xff, 0xff, 0xff, 0x2c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x14,
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x73, 0x1b, 0x4d,
+ 0x3c, 0x01, 0x00, 0x00, 0x00, 0xce, 0xb0, 0xcc, 0x3f, 0x01, 0x00, 0x00, 0x00,
+ 0xe2, 0xeb, 0xcb, 0xbf, 0x28, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c,
+ 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4c, 0x6f, 0x67, 0x69, 0x74, 0x73,
+ 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x31, 0x63, 0x5f, 0x31, 0x78,
+ 0x31, 0x2f, 0x42, 0x69, 0x61, 0x73, 0x41, 0x64, 0x64, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x66, 0x79, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x09, 0x80, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00,
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x14, 0x00, 0x04, 0x00, 0x08, 0x00,
+ 0x0c, 0x00, 0x10, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00,
+ 0x00, 0x98, 0x72, 0x98, 0x3c, 0x01, 0x00, 0x00, 0x00, 0x25, 0xda, 0x97, 0x40,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x4d,
+ 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x4c, 0x6f,
+ 0x67, 0x69, 0x74, 0x73, 0x2f, 0x41, 0x76, 0x67, 0x50, 0x6f, 0x6f, 0x6c, 0x5f,
+ 0x31, 0x61, 0x2f, 0x41, 0x76, 0x67, 0x50, 0x6f, 0x6f, 0x6c, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x7a, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x09, 0x58, 0x06, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x06, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x84, 0x80, 0xff, 0xff, 0x10, 0x04, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+ 0x30, 0x9c, 0x0e, 0x3b, 0xed, 0x44, 0x38, 0x3b, 0xef, 0x56, 0x12, 0x3b, 0xe5,
+ 0xb8, 0x28, 0x3b, 0x2f, 0x6a, 0x09, 0x3b, 0x71, 0xb8, 0x6c, 0x3b, 0x85, 0xba,
+ 0x2e, 0x3b, 0x52, 0x4d, 0x47, 0x3b, 0x02, 0x8d, 0x10, 0x3b, 0xa9, 0xd9, 0x49,
+ 0x3b, 0xbe, 0x2b, 0x3c, 0x3b, 0x25, 0x16, 0x38, 0x3b, 0xdc, 0x9e, 0x08, 0x3b,
+ 0xaf, 0xb6, 0x28, 0x3b, 0x9d, 0x44, 0x2b, 0x3b, 0x68, 0xf5, 0xe8, 0x3a, 0xd1,
+ 0x70, 0x1a, 0x3b, 0x56, 0x82, 0x0d, 0x3b, 0x47, 0x46, 0xea, 0x3a, 0x30, 0x72,
+ 0x49, 0x3b, 0xc3, 0x5d, 0x2a, 0x3b, 0x3f, 0x67, 0x2b, 0x3b, 0x9d, 0x51, 0x1b,
+ 0x3b, 0x92, 0x11, 0x0b, 0x3b, 0x6e, 0x69, 0xf6, 0x3a, 0x8b, 0x3d, 0x83, 0x3b,
+ 0xfb, 0x6e, 0x01, 0x3b, 0xd5, 0xf8, 0x66, 0x3b, 0x88, 0x00, 0x80, 0x3b, 0x9e,
+ 0xe9, 0x31, 0x3b, 0x6e, 0xf6, 0x27, 0x3b, 0x3d, 0x53, 0x54, 0x3b, 0x57, 0xc0,
+ 0x4a, 0x3b, 0x93, 0x70, 0x13, 0x3b, 0x06, 0x3b, 0x42, 0x3b, 0xca, 0x69, 0x08,
+ 0x3b, 0x62, 0x80, 0x3c, 0x3b, 0x94, 0x95, 0x2d, 0x3b, 0x88, 0xf2, 0x0d, 0x3b,
+ 0x67, 0xd3, 0x50, 0x3b, 0x47, 0x89, 0x4c, 0x3b, 0xb2, 0x55, 0x53, 0x3b, 0xf9,
+ 0x44, 0x11, 0x3b, 0xbd, 0xf8, 0x26, 0x3b, 0x03, 0x35, 0x0c, 0x3b, 0xfc, 0x0b,
+ 0x0e, 0x3b, 0x3a, 0x04, 0x3b, 0x3b, 0xeb, 0x60, 0x26, 0x3b, 0x3d, 0xd3, 0x32,
+ 0x3b, 0x65, 0x8f, 0x34, 0x3b, 0xe0, 0xd2, 0x1a, 0x3b, 0xa5, 0x42, 0x2a, 0x3b,
+ 0x6f, 0x61, 0x46, 0x3b, 0x12, 0xdf, 0x30, 0x3b, 0x07, 0x37, 0x45, 0x3b, 0x9e,
+ 0x57, 0x49, 0x3b, 0xed, 0xc9, 0x2a, 0x3b, 0xc1, 0xe5, 0x07, 0x3b, 0xe6, 0x5c,
+ 0x27, 0x3b, 0x18, 0xf4, 0x2c, 0x3b, 0x7b, 0xbc, 0x1e, 0x3b, 0x5b, 0x2a, 0x25,
+ 0x3b, 0x8b, 0xd3, 0x0a, 0x3b, 0xd6, 0xf9, 0x32, 0x3b, 0x3b, 0xe3, 0x4a, 0x3b,
+ 0xc3, 0x1c, 0x2a, 0x3b, 0x06, 0xcc, 0x39, 0x3b, 0xb5, 0xa6, 0x32, 0x3b, 0x58,
+ 0x1d, 0x0c, 0x3b, 0x0d, 0x63, 0x30, 0x3b, 0x98, 0x15, 0x67, 0x3b, 0x2b, 0x29,
+ 0x0e, 0x3b, 0xeb, 0x95, 0x29, 0x3b, 0x68, 0x2e, 0x2c, 0x3b, 0x64, 0xc2, 0x79,
+ 0x3b, 0x5d, 0x60, 0x5d, 0x3b, 0x77, 0xc4, 0x29, 0x3b, 0x11, 0x87, 0x41, 0x3b,
+ 0x7e, 0x0c, 0x35, 0x3b, 0x48, 0x2f, 0x31, 0x3b, 0x48, 0xef, 0x35, 0x3b, 0xd9,
+ 0xfe, 0x25, 0x3b, 0xa7, 0xd7, 0x48, 0x3b, 0xe3, 0xde, 0x48, 0x3b, 0x93, 0xa5,
+ 0x26, 0x3b, 0x26, 0xfc, 0x12, 0x3b, 0x98, 0xd4, 0x16, 0x3b, 0x3e, 0x8e, 0x27,
+ 0x3b, 0xb2, 0x5e, 0x56, 0x3b, 0xd3, 0xb3, 0x58, 0x3b, 0xc5, 0x71, 0x6c, 0x3b,
+ 0xb0, 0x7b, 0x46, 0x3b, 0x77, 0x95, 0x1e, 0x3b, 0x3a, 0xde, 0x2f, 0x3b, 0x08,
+ 0xfc, 0x24, 0x3b, 0x0a, 0xd5, 0x24, 0x3b, 0x41, 0xf5, 0x15, 0x3b, 0x87, 0x3b,
+ 0x48, 0x3b, 0x06, 0x23, 0x0a, 0x3b, 0x94, 0x19, 0x36, 0x3b, 0x95, 0xbe, 0x29,
+ 0x3b, 0x77, 0x69, 0x14, 0x3b, 0xa8, 0xa7, 0x1f, 0x3b, 0x80, 0x1e, 0x18, 0x3b,
+ 0x05, 0x08, 0x41, 0x3b, 0xf7, 0x8d, 0x1d, 0x3b, 0x79, 0xcb, 0x36, 0x3b, 0xde,
+ 0xad, 0x0e, 0x3b, 0xa8, 0x21, 0x14, 0x3b, 0xdb, 0xf9, 0x06, 0x3b, 0x43, 0x2a,
+ 0x81, 0x3b, 0xc1, 0x11, 0x16, 0x3b, 0x01, 0xcd, 0x76, 0x3b, 0x47, 0x0f, 0x44,
+ 0x3b, 0xa1, 0x1b, 0xf6, 0x3a, 0x4f, 0xcf, 0x1f, 0x3b, 0xfb, 0xf6, 0x15, 0x3b,
+ 0x37, 0xac, 0x1f, 0x3b, 0xc5, 0x5e, 0x60, 0x3b, 0x2d, 0x2e, 0x8a, 0x3b, 0x57,
+ 0x79, 0x7e, 0x3b, 0xf3, 0xa7, 0x2f, 0x3b, 0x94, 0xfc, 0x3b, 0x3b, 0x78, 0x2d,
+ 0xf7, 0x3a, 0x0f, 0xad, 0x15, 0x3b, 0x1c, 0xd7, 0x21, 0x3b, 0x0e, 0xcc, 0x22,
+ 0x3b, 0x70, 0x91, 0x49, 0x3b, 0x2b, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69,
+ 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32,
+ 0x64, 0x5f, 0x39, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77, 0x69, 0x73, 0x65,
+ 0x2f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x2f, 0x72, 0x65, 0x61, 0x64,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x76, 0x80, 0xff, 0xff, 0x00,
+ 0x00, 0x00, 0x09, 0x68, 0x06, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x24, 0x06,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xd2, 0x79, 0xff, 0xff, 0x14, 0x04, 0x00,
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0x5a, 0x8a, 0xd9, 0x3b, 0x5f, 0xcd, 0x89, 0x3b,
+ 0xf4, 0xca, 0x92, 0x3b, 0x96, 0x01, 0xb8, 0x3b, 0x04, 0x10, 0x26, 0x3c, 0x8e,
+ 0x8d, 0xb2, 0x3b, 0xc2, 0xd9, 0xa9, 0x3b, 0xf9, 0xee, 0xd0, 0x3b, 0xce, 0xfe,
+ 0x97, 0x3b, 0x44, 0x79, 0x91, 0x3b, 0x2f, 0x92, 0xcd, 0x3b, 0x8d, 0x6a, 0xfe,
+ 0x3b, 0x21, 0x6b, 0x95, 0x3b, 0x29, 0x32, 0x8d, 0x3b, 0x37, 0x77, 0x0d, 0x3c,
+ 0x8a, 0x17, 0xea, 0x3b, 0xc5, 0xdd, 0xf7, 0x3b, 0x8f, 0x29, 0xaa, 0x3b, 0xeb,
+ 0x0e, 0x96, 0x3b, 0x17, 0xe3, 0x67, 0x3b, 0x96, 0xe9, 0xf1, 0x3b, 0x78, 0x22,
+ 0x91, 0x3b, 0x60, 0x7f, 0x0c, 0x3c, 0x14, 0xdd, 0x18, 0x3c, 0x55, 0xd7, 0x0a,
+ 0x3c, 0x94, 0x13, 0xe3, 0x3b, 0xe5, 0xc5, 0x8d, 0x3b, 0xab, 0xc2, 0x0d, 0x3c,
+ 0xb7, 0xf5, 0xf7, 0x3b, 0xd0, 0x25, 0x46, 0x3c, 0xdb, 0x7c, 0x05, 0x3c, 0xec,
+ 0x68, 0xd5, 0x3b, 0xe5, 0x43, 0xb0, 0x3b, 0xea, 0x32, 0xe2, 0x3b, 0xe6, 0x9e,
+ 0xcd, 0x3b, 0x8b, 0x88, 0xf9, 0x3b, 0x5e, 0xcc, 0xd6, 0x3b, 0xa6, 0x6e, 0xad,
+ 0x3b, 0x77, 0x7b, 0xaf, 0x3b, 0x3a, 0x14, 0x1c, 0x3c, 0x66, 0x6f, 0x86, 0x3b,
+ 0xe2, 0xdd, 0xb4, 0x3b, 0xdf, 0xd8, 0x95, 0x3b, 0xff, 0x99, 0x01, 0x3c, 0x94,
+ 0x37, 0xf2, 0x3b, 0x2c, 0x4b, 0xb5, 0x3b, 0x21, 0xac, 0xa1, 0x3b, 0x65, 0xfe,
+ 0xb5, 0x3b, 0xfb, 0x01, 0x1d, 0x3c, 0x35, 0xb8, 0x29, 0x3c, 0xd0, 0xb5, 0xaf,
+ 0x3b, 0x0b, 0x50, 0x06, 0x3c, 0x6f, 0x42, 0xd3, 0x3b, 0x51, 0x69, 0x9a, 0x3b,
+ 0x05, 0x8e, 0xb0, 0x3b, 0x19, 0x7f, 0xb1, 0x3b, 0xc9, 0x4f, 0xc6, 0x3b, 0x17,
+ 0x8c, 0xd8, 0x3b, 0x99, 0xea, 0x5f, 0x3c, 0x01, 0x5b, 0x26, 0x3c, 0x31, 0x17,
+ 0xcd, 0x3b, 0x86, 0x32, 0x3a, 0x3c, 0x16, 0xc0, 0xca, 0x3b, 0x4c, 0x5a, 0xae,
+ 0x3b, 0x9e, 0x40, 0xd9, 0x3b, 0x96, 0xa4, 0x12, 0x3c, 0xe5, 0xeb, 0x8f, 0x3b,
+ 0x37, 0x61, 0xca, 0x3b, 0x01, 0xe0, 0x1e, 0x3c, 0xff, 0x75, 0x64, 0x3b, 0xae,
+ 0xec, 0x04, 0x3c, 0xe9, 0xc1, 0xd8, 0x3b, 0xc8, 0x4e, 0x9a, 0x3b, 0xfc, 0xdb,
+ 0x98, 0x3b, 0x2e, 0x5a, 0xb6, 0x3b, 0xaa, 0xa5, 0x65, 0x3c, 0x63, 0xc8, 0xb5,
+ 0x3b, 0xeb, 0x10, 0xea, 0x3b, 0xe5, 0x2e, 0xa0, 0x3b, 0xbe, 0xbf, 0x8e, 0x3b,
+ 0x28, 0x42, 0x9e, 0x3b, 0x94, 0x4e, 0xbe, 0x3b, 0x7b, 0xae, 0x02, 0x3c, 0x3e,
+ 0x6c, 0x9f, 0x3b, 0x4b, 0xdd, 0xef, 0x3b, 0xa7, 0xbf, 0x92, 0x3b, 0x0b, 0x7b,
+ 0xa0, 0x3b, 0x52, 0x98, 0xc7, 0x3b, 0x29, 0x9e, 0xfa, 0x3b, 0xbf, 0x0f, 0xf3,
+ 0x3b, 0x1f, 0x6d, 0x99, 0x3b, 0xa2, 0xa3, 0xa7, 0x3b, 0xf0, 0x44, 0xb1, 0x3b,
+ 0xcb, 0x34, 0x73, 0x3b, 0x80, 0xb4, 0x48, 0x3c, 0xd8, 0x51, 0x8b, 0x3b, 0x8d,
+ 0x63, 0xf2, 0x3b, 0x4f, 0x4e, 0x06, 0x3c, 0x25, 0x09, 0x9b, 0x3b, 0xf7, 0x19,
+ 0x96, 0x3b, 0xc9, 0x9c, 0x00, 0x3c, 0x09, 0x50, 0x9a, 0x3b, 0xca, 0xbf, 0xb7,
+ 0x3b, 0xe1, 0x96, 0x8f, 0x3b, 0x56, 0x80, 0x8d, 0x3b, 0xfb, 0x3d, 0xa4, 0x3b,
+ 0xab, 0x64, 0xf7, 0x3b, 0x02, 0x36, 0xda, 0x3b, 0xe0, 0x68, 0xaa, 0x3b, 0x4d,
+ 0x81, 0xfe, 0x3b, 0xca, 0x40, 0x9c, 0x3b, 0xc5, 0x7f, 0xff, 0x3b, 0xa7, 0xa6,
+ 0x96, 0x3b, 0x12, 0x25, 0x89, 0x3b, 0x22, 0x4b, 0xbb, 0x3b, 0xcd, 0x27, 0xac,
+ 0x3b, 0x94, 0x10, 0xcc, 0x3b, 0x58, 0x19, 0xcd, 0x3b, 0xc5, 0x66, 0x07, 0x3c,
+ 0x7d, 0xbe, 0xf0, 0x3b, 0x05, 0x1e, 0x03, 0x3c, 0x97, 0xc0, 0x6d, 0x3b, 0x32,
+ 0xca, 0x97, 0x3b, 0x43, 0x0e, 0x8d, 0x3b, 0xee, 0x80, 0xad, 0x3b, 0x0d, 0xd8,
+ 0x8a, 0x3b, 0x17, 0x95, 0xa3, 0x3b, 0x22, 0x56, 0xbe, 0x3b, 0x35, 0x00, 0x00,
+ 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f,
+ 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x39, 0x5f, 0x64, 0x65, 0x70, 0x74,
+ 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69,
+ 0x73, 0x65, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x2f, 0x72, 0x65,
+ 0x61, 0x64, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xfa,
+ 0x86, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x58, 0x06, 0x00, 0x00, 0x14, 0x00,
+ 0x00, 0x00, 0x20, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x7c, 0x8d, 0xff,
+ 0xff, 0x10, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0x25, 0x78, 0x0c, 0x3b, 0xfd, 0x6d, 0x28, 0x3b,
+ 0x80, 0x30, 0x23, 0x3b, 0x53, 0x22, 0x20, 0x3b, 0x08, 0x7b, 0x6b, 0x3b, 0xaa,
+ 0x4d, 0x68, 0x3b, 0xcb, 0x88, 0x21, 0x3b, 0x64, 0x20, 0x19, 0x3b, 0xb3, 0x06,
+ 0x1c, 0x3b, 0x08, 0x54, 0x4c, 0x3b, 0xad, 0x54, 0x33, 0x3b, 0x3e, 0xd5, 0x2d,
+ 0x3b, 0x8c, 0xb0, 0x2d, 0x3b, 0x36, 0x74, 0x33, 0x3b, 0x86, 0x73, 0x0a, 0x3b,
+ 0x48, 0x44, 0x10, 0x3b, 0xba, 0xd5, 0x3a, 0x3b, 0x14, 0x6a, 0x41, 0x3b, 0x2e,
+ 0x64, 0x29, 0x3b, 0xad, 0x6e, 0x0d, 0x3b, 0xf0, 0xaf, 0x3a, 0x3b, 0x56, 0xcf,
+ 0x28, 0x3b, 0xcc, 0xca, 0x35, 0x3b, 0x87, 0x8e, 0x33, 0x3b, 0x84, 0x7a, 0x42,
+ 0x3b, 0x7f, 0x21, 0x29, 0x3b, 0xd8, 0xea, 0x21, 0x3b, 0x4c, 0x20, 0x46, 0x3b,
+ 0x5a, 0x51, 0x2e, 0x3b, 0xd2, 0xe3, 0x2e, 0x3b, 0xad, 0xcc, 0x32, 0x3b, 0xe6,
+ 0x75, 0x45, 0x3b, 0x3e, 0x3d, 0x3f, 0x3b, 0xad, 0x25, 0x18, 0x3b, 0x7b, 0x94,
+ 0x19, 0x3b, 0x0c, 0x72, 0x31, 0x3b, 0x79, 0x93, 0x6b, 0x3b, 0x0c, 0xc8, 0x3d,
+ 0x3b, 0xe3, 0x15, 0x2f, 0x3b, 0xdc, 0x72, 0x1f, 0x3b, 0x4f, 0x86, 0x38, 0x3b,
+ 0x6e, 0x60, 0x2e, 0x3b, 0x27, 0x79, 0x12, 0x3b, 0x38, 0x5c, 0x26, 0x3b, 0x97,
+ 0x5d, 0x0b, 0x3b, 0xf6, 0xd9, 0x22, 0x3b, 0xfd, 0xcb, 0x47, 0x3b, 0xb4, 0x75,
+ 0x46, 0x3b, 0x34, 0x59, 0xec, 0x3a, 0xca, 0x3f, 0xe5, 0x3a, 0x85, 0x5d, 0x39,
+ 0x3b, 0x48, 0x4d, 0xed, 0x3a, 0x1c, 0x4a, 0x2b, 0x3b, 0x54, 0xdf, 0x18, 0x3b,
+ 0x78, 0x67, 0x00, 0x3b, 0xf0, 0x43, 0x35, 0x3b, 0xf3, 0xe5, 0x30, 0x3b, 0x3b,
+ 0xc0, 0x0a, 0x3b, 0x4a, 0x82, 0x32, 0x3b, 0xe6, 0xac, 0x2a, 0x3b, 0xc3, 0xbf,
+ 0x01, 0x3b, 0x53, 0xa3, 0x1f, 0x3b, 0x59, 0xc5, 0x2f, 0x3b, 0x43, 0xed, 0x48,
+ 0x3b, 0x75, 0x05, 0x15, 0x3b, 0x34, 0x31, 0x2f, 0x3b, 0x65, 0x54, 0x07, 0x3b,
+ 0x71, 0x3d, 0x2c, 0x3b, 0x1e, 0x9f, 0x21, 0x3b, 0x2b, 0xd4, 0x29, 0x3b, 0x03,
+ 0x86, 0x53, 0x3b, 0x8b, 0x78, 0x43, 0x3b, 0xd9, 0xbc, 0x3e, 0x3b, 0x37, 0x52,
+ 0x65, 0x3b, 0xbe, 0x2b, 0x6a, 0x3b, 0x39, 0x29, 0x30, 0x3b, 0xce, 0x74, 0x74,
+ 0x3b, 0xf5, 0x3e, 0x14, 0x3b, 0x20, 0x8d, 0x2e, 0x3b, 0xeb, 0xab, 0x1b, 0x3b,
+ 0x86, 0x51, 0x34, 0x3b, 0xc5, 0xdd, 0x64, 0x3b, 0x83, 0x21, 0x47, 0x3b, 0x14,
+ 0xc1, 0x38, 0x3b, 0xb2, 0xa2, 0x69, 0x3b, 0xaa, 0x97, 0x2c, 0x3b, 0x4f, 0x38,
+ 0xfd, 0x3a, 0x89, 0x21, 0x13, 0x3b, 0x8f, 0xb4, 0x02, 0x3b, 0xb8, 0x13, 0x34,
+ 0x3b, 0x5c, 0x27, 0x26, 0x3b, 0x92, 0xf0, 0x3f, 0x3b, 0x4b, 0xbc, 0x25, 0x3b,
+ 0x7f, 0xd1, 0x43, 0x3b, 0x38, 0xf0, 0x1c, 0x3b, 0x53, 0xd1, 0x2b, 0x3b, 0x00,
+ 0x93, 0x5e, 0x3b, 0x33, 0x65, 0x3c, 0x3b, 0xec, 0xa1, 0x16, 0x3b, 0x8e, 0xe1,
+ 0x1c, 0x3b, 0x70, 0x19, 0x5b, 0x3b, 0xe9, 0x16, 0x0d, 0x3b, 0x59, 0x69, 0x44,
+ 0x3b, 0x66, 0x38, 0xfb, 0x3a, 0x6d, 0x4a, 0x44, 0x3b, 0x94, 0x1f, 0x13, 0x3b,
+ 0x97, 0x36, 0x45, 0x3b, 0xe5, 0x0b, 0x76, 0x3b, 0x74, 0xb5, 0x0d, 0x3b, 0x23,
+ 0x54, 0x19, 0x3b, 0x05, 0x7c, 0x0d, 0x3b, 0x90, 0x11, 0x30, 0x3b, 0xc7, 0xf9,
+ 0x36, 0x3b, 0xf7, 0xee, 0x30, 0x3b, 0xa3, 0xfb, 0x3e, 0x3b, 0xdb, 0x92, 0x2e,
+ 0x3b, 0x25, 0xb9, 0x1e, 0x3b, 0x77, 0x7b, 0xfa, 0x3a, 0x8e, 0x6a, 0x28, 0x3b,
+ 0x01, 0xd7, 0x06, 0x3b, 0x23, 0xa8, 0x21, 0x3b, 0x5c, 0x39, 0x1b, 0x3b, 0x20,
+ 0xce, 0x28, 0x3b, 0x19, 0x57, 0x2b, 0x3b, 0x18, 0x50, 0x48, 0x3b, 0x1a, 0xc2,
+ 0x12, 0x3b, 0x7d, 0xbc, 0x26, 0x3b, 0xc6, 0x8b, 0x2c, 0x3b, 0x2b, 0x00, 0x00,
+ 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f,
+ 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x38, 0x5f, 0x70, 0x6f, 0x69, 0x6e,
+ 0x74, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73,
+ 0x2f, 0x72, 0x65, 0x61, 0x64, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+ 0x6e, 0x8d, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x68, 0x06, 0x00, 0x00, 0x47,
+ 0x00, 0x00, 0x00, 0x24, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xca, 0x86,
+ 0xff, 0xff, 0x14, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xb7, 0xc8, 0xb9,
+ 0x3b, 0x49, 0x06, 0x07, 0x3c, 0x13, 0x37, 0xaa, 0x3b, 0x4d, 0x39, 0x88, 0x3b,
+ 0x57, 0x70, 0xba, 0x3b, 0x17, 0xf4, 0x13, 0x3c, 0x91, 0xed, 0x12, 0x3c, 0xc7,
+ 0x17, 0xdc, 0x3b, 0x67, 0x96, 0x94, 0x3b, 0xb3, 0x0f, 0xac, 0x3b, 0xe6, 0xef,
+ 0xa2, 0x3b, 0x74, 0x00, 0x20, 0x3c, 0x5d, 0x78, 0xa8, 0x3b, 0x3b, 0x92, 0x97,
+ 0x3b, 0x13, 0x50, 0x8a, 0x3b, 0xe9, 0x01, 0x93, 0x3b, 0x9a, 0xf1, 0x26, 0x3c,
+ 0xaf, 0xb5, 0xd6, 0x3b, 0xf4, 0x4a, 0x3a, 0x3c, 0xf9, 0xfc, 0xa3, 0x3b, 0x9c,
+ 0xdc, 0x30, 0x3c, 0xe8, 0x5a, 0xa0, 0x3b, 0x93, 0x4f, 0xd3, 0x3b, 0x50, 0x8e,
+ 0xb5, 0x3b, 0xf3, 0xe6, 0x92, 0x3b, 0xee, 0x31, 0xc7, 0x3b, 0xb3, 0x8f, 0xf6,
+ 0x3b, 0xe5, 0x1c, 0xab, 0x3b, 0xa2, 0x69, 0xb9, 0x3b, 0x11, 0x67, 0xc5, 0x3b,
+ 0x97, 0x69, 0x2c, 0x3c, 0x0a, 0x11, 0x0f, 0x3c, 0xd6, 0xdc, 0xea, 0x3b, 0x62,
+ 0x0e, 0xd3, 0x3b, 0x16, 0xf5, 0x7d, 0x3b, 0x81, 0x5a, 0xcd, 0x3b, 0xc3, 0x2b,
+ 0xa3, 0x3b, 0x8a, 0x18, 0xd8, 0x3b, 0x53, 0x16, 0xa2, 0x3b, 0x79, 0x63, 0xaf,
+ 0x3b, 0x6d, 0x10, 0xad, 0x3b, 0xcb, 0x53, 0x0d, 0x3c, 0x96, 0x74, 0xdb, 0x3b,
+ 0x34, 0xa9, 0xb6, 0x3b, 0xe1, 0x8a, 0x81, 0x3b, 0x64, 0x61, 0x9f, 0x3b, 0x79,
+ 0x95, 0xf2, 0x3b, 0x52, 0xae, 0x1b, 0x3c, 0xea, 0x22, 0x99, 0x3b, 0xe8, 0x9a,
+ 0xd5, 0x3b, 0xd9, 0xf5, 0xc3, 0x3b, 0x97, 0x3f, 0xa7, 0x3b, 0xb4, 0xde, 0xce,
+ 0x3b, 0x6a, 0xb7, 0x99, 0x3b, 0x5d, 0x1b, 0xaa, 0x3b, 0x62, 0xe8, 0xdd, 0x3b,
+ 0x80, 0xe0, 0xea, 0x3b, 0x11, 0xf6, 0x32, 0x3c, 0xa1, 0xb3, 0xe0, 0x3b, 0x4b,
+ 0x55, 0x91, 0x3b, 0xf8, 0x58, 0x26, 0x3c, 0x51, 0x2e, 0xcd, 0x3b, 0xcb, 0xd4,
+ 0xa1, 0x3b, 0xdc, 0xca, 0xf7, 0x3b, 0xc8, 0x18, 0xcd, 0x3b, 0x65, 0x34, 0x09,
+ 0x3c, 0x27, 0x59, 0x9f, 0x3b, 0x34, 0x50, 0x89, 0x3b, 0xfa, 0x30, 0x0a, 0x3c,
+ 0xbd, 0xd9, 0xb7, 0x3b, 0x60, 0x79, 0xd8, 0x3b, 0x48, 0xf7, 0xea, 0x3b, 0x1c,
+ 0xe6, 0xdc, 0x3b, 0x0c, 0xb8, 0x8e, 0x3b, 0x26, 0xb3, 0xee, 0x3b, 0xae, 0x58,
+ 0xc2, 0x3b, 0xdb, 0x17, 0xca, 0x3b, 0x6b, 0xaa, 0xaf, 0x3b, 0x6d, 0xf2, 0xe1,
+ 0x3b, 0xa3, 0x39, 0x4b, 0x3c, 0x84, 0xcd, 0xb6, 0x3b, 0x4b, 0x1c, 0x9a, 0x3b,
+ 0x47, 0x1c, 0x1f, 0x3c, 0x83, 0xa4, 0xad, 0x3b, 0x5f, 0xc3, 0xdd, 0x3b, 0xc1,
+ 0xeb, 0x9c, 0x3b, 0xb6, 0xe6, 0xd5, 0x3b, 0x38, 0x08, 0x17, 0x3c, 0xc6, 0x98,
+ 0xf2, 0x3b, 0xe2, 0x24, 0xf1, 0x3b, 0x4c, 0x77, 0x46, 0x3c, 0x62, 0x8f, 0xa8,
+ 0x3b, 0x2d, 0x25, 0x02, 0x3c, 0x18, 0x5c, 0x89, 0x3b, 0x76, 0xa2, 0x9b, 0x3b,
+ 0x5b, 0x6d, 0x94, 0x3b, 0xfe, 0xf2, 0x10, 0x3c, 0x8b, 0x09, 0xde, 0x3b, 0x4a,
+ 0x1c, 0xd5, 0x3b, 0x11, 0xe4, 0xda, 0x3b, 0x1e, 0xa1, 0x90, 0x3b, 0x11, 0xa7,
+ 0xa4, 0x3b, 0x2c, 0x8c, 0x9c, 0x3b, 0xe4, 0x0d, 0xed, 0x3b, 0x3d, 0xb3, 0x8c,
+ 0x3b, 0x6a, 0xea, 0xa1, 0x3b, 0x9e, 0xcb, 0xe1, 0x3b, 0x2e, 0xdf, 0xea, 0x3b,
+ 0x87, 0xe0, 0xb6, 0x3b, 0x92, 0x5b, 0x16, 0x3c, 0xb6, 0x40, 0xb2, 0x3b, 0x77,
+ 0x64, 0xfa, 0x3b, 0x9f, 0xa9, 0xde, 0x3b, 0xc3, 0x27, 0x17, 0x3c, 0x38, 0xc3,
+ 0xe4, 0x3b, 0x2e, 0x3c, 0xa7, 0x3b, 0x67, 0x96, 0x91, 0x3b, 0xe8, 0x01, 0x9e,
+ 0x3b, 0x8a, 0x9e, 0x2d, 0x3c, 0x52, 0xae, 0x8f, 0x3b, 0xe2, 0xcb, 0x9e, 0x3b,
+ 0x2d, 0x22, 0x20, 0x3c, 0xf1, 0x72, 0x97, 0x3b, 0x3e, 0x6f, 0x35, 0x3c, 0x5a,
+ 0x72, 0xf1, 0x3b, 0x3a, 0x1f, 0xa7, 0x3b, 0x8a, 0x30, 0xad, 0x3b, 0x86, 0xd7,
+ 0xc8, 0x3b, 0x35, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e,
+ 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x38,
+ 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x64, 0x65,
+ 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68,
+ 0x74, 0x73, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x80, 0x00, 0x00, 0x00, 0xf2, 0x93, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x58,
+ 0x06, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x06, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0x74, 0x9a, 0xff, 0xff, 0x10, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x69, 0x72, 0x15,
+ 0x3b, 0x7b, 0x2b, 0x6e, 0x3b, 0x0e, 0x7b, 0x3c, 0x3b, 0x82, 0xfa, 0x32, 0x3b,
+ 0x8e, 0x21, 0x15, 0x3b, 0xb7, 0x35, 0x12, 0x3b, 0x84, 0x7e, 0x16, 0x3b, 0x91,
+ 0xfe, 0x6f, 0x3b, 0xe3, 0xc4, 0x14, 0x3b, 0x38, 0xa8, 0x14, 0x3b, 0x5c, 0x34,
+ 0x8b, 0x3b, 0x9b, 0xf3, 0x51, 0x3b, 0xa0, 0xe2, 0x0f, 0x3b, 0x26, 0x0f, 0x38,
+ 0x3b, 0xaa, 0x48, 0x3b, 0x3b, 0x97, 0x55, 0x32, 0x3b, 0xb9, 0x5d, 0x13, 0x3b,
+ 0x5e, 0x54, 0x4d, 0x3b, 0x8b, 0x64, 0x48, 0x3b, 0xfc, 0x34, 0x2f, 0x3b, 0x8e,
+ 0x96, 0x3e, 0x3b, 0x2f, 0x44, 0x2b, 0x3b, 0xf1, 0x0c, 0x1a, 0x3b, 0xaf, 0xb5,
+ 0x3d, 0x3b, 0x74, 0xc8, 0x47, 0x3b, 0x81, 0x75, 0x4a, 0x3b, 0xe5, 0x54, 0x04,
+ 0x3b, 0xdd, 0xeb, 0x27, 0x3b, 0x65, 0x52, 0x07, 0x3b, 0x7a, 0xd4, 0x2e, 0x3b,
+ 0x34, 0x82, 0x2d, 0x3b, 0x98, 0x18, 0x4f, 0x3b, 0x9d, 0x4d, 0x19, 0x3b, 0x8f,
+ 0x04, 0x31, 0x3b, 0x5d, 0x44, 0x1e, 0x3b, 0x66, 0x57, 0x75, 0x3b, 0x22, 0x5d,
+ 0x31, 0x3b, 0x83, 0x6d, 0x00, 0x3b, 0x07, 0x31, 0x35, 0x3b, 0xbb, 0x4a, 0x21,
+ 0x3b, 0x02, 0xd8, 0x67, 0x3b, 0xff, 0x57, 0x52, 0x3b, 0xa6, 0x70, 0x24, 0x3b,
+ 0xea, 0xb4, 0x24, 0x3b, 0x9d, 0x41, 0x2e, 0x3b, 0xe5, 0xa3, 0x1c, 0x3b, 0x01,
+ 0x17, 0x25, 0x3b, 0x09, 0x5b, 0x39, 0x3b, 0x14, 0x47, 0x38, 0x3b, 0xe8, 0xb3,
+ 0x31, 0x3b, 0x5e, 0xc4, 0x0a, 0x3b, 0x07, 0xf2, 0x3a, 0x3b, 0xa1, 0x56, 0x0e,
+ 0x3b, 0x08, 0x08, 0x11, 0x3b, 0xb8, 0xf8, 0x16, 0x3b, 0x1e, 0xcb, 0x1b, 0x3b,
+ 0xf4, 0xb4, 0x11, 0x3b, 0x18, 0xed, 0x0f, 0x3b, 0x15, 0x9f, 0x0d, 0x3b, 0xa1,
+ 0xa1, 0x4c, 0x3b, 0x54, 0xc1, 0x45, 0x3b, 0x22, 0x52, 0xf8, 0x3a, 0x3c, 0xf0,
+ 0x18, 0x3b, 0x44, 0x4e, 0x1b, 0x3b, 0xb3, 0xe2, 0x42, 0x3b, 0x88, 0x59, 0x30,
+ 0x3b, 0x73, 0x95, 0x4f, 0x3b, 0xbb, 0x01, 0x15, 0x3b, 0xcd, 0x24, 0x31, 0x3b,
+ 0xf2, 0x02, 0x27, 0x3b, 0x99, 0xce, 0x56, 0x3b, 0x09, 0x4d, 0x3a, 0x3b, 0xbe,
+ 0xeb, 0x35, 0x3b, 0xb7, 0x9d, 0x2b, 0x3b, 0x7d, 0xa8, 0x46, 0x3b, 0xea, 0xe9,
+ 0x4a, 0x3b, 0xb1, 0xa8, 0x4e, 0x3b, 0x25, 0x29, 0x2a, 0x3b, 0x61, 0x04, 0x2c,
+ 0x3b, 0xaf, 0x65, 0x28, 0x3b, 0xdc, 0x84, 0x6c, 0x3b, 0x77, 0x23, 0x30, 0x3b,
+ 0xc8, 0x82, 0x26, 0x3b, 0x70, 0xe0, 0x33, 0x3b, 0x71, 0xbe, 0x43, 0x3b, 0x3c,
+ 0xa3, 0x4b, 0x3b, 0x53, 0xda, 0xfe, 0x3a, 0x5a, 0x12, 0x02, 0x3b, 0xc8, 0xf3,
+ 0x17, 0x3b, 0x4e, 0x5a, 0x29, 0x3b, 0xc8, 0x4c, 0x1d, 0x3b, 0x4b, 0xde, 0x3f,
+ 0x3b, 0xf6, 0x54, 0x0f, 0x3b, 0x85, 0x17, 0x26, 0x3b, 0xa8, 0x0a, 0x6a, 0x3b,
+ 0x96, 0x03, 0x32, 0x3b, 0xfa, 0x3e, 0x04, 0x3b, 0x34, 0x14, 0x1b, 0x3b, 0xb4,
+ 0x0e, 0x89, 0x3b, 0x99, 0xe1, 0x11, 0x3b, 0xaa, 0x64, 0x4c, 0x3b, 0x2d, 0x09,
+ 0x14, 0x3b, 0xe1, 0xe1, 0x53, 0x3b, 0xac, 0x96, 0x37, 0x3b, 0xd6, 0xe7, 0x2d,
+ 0x3b, 0xe9, 0x42, 0x27, 0x3b, 0xf9, 0x41, 0x1f, 0x3b, 0x05, 0xb8, 0x46, 0x3b,
+ 0x37, 0x95, 0x11, 0x3b, 0xe6, 0x89, 0x1d, 0x3b, 0xee, 0x61, 0x11, 0x3b, 0xac,
+ 0x0a, 0x48, 0x3b, 0x50, 0xad, 0x87, 0x3b, 0x7c, 0x67, 0x05, 0x3b, 0x59, 0x7b,
+ 0xf7, 0x3a, 0xcd, 0xce, 0x0e, 0x3b, 0x2b, 0x8b, 0x7f, 0x3b, 0x13, 0x6a, 0x06,
+ 0x3b, 0x0c, 0x0e, 0x1f, 0x3b, 0x9d, 0x29, 0x51, 0x3b, 0xb0, 0xc8, 0x1e, 0x3b,
+ 0x42, 0x82, 0x3d, 0x3b, 0x76, 0x28, 0x21, 0x3b, 0x00, 0x00, 0x2e, 0x3b, 0x37,
+ 0xd8, 0x11, 0x3b, 0xeb, 0xf0, 0x36, 0x3b, 0x08, 0x7f, 0x4f, 0x3b, 0xbb, 0xb5,
+ 0x37, 0x3b, 0x2b, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e,
+ 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x37,
+ 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x77, 0x65,
+ 0x69, 0x67, 0x68, 0x74, 0x73, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0x66, 0x9a, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09,
+ 0x68, 0x06, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x24, 0x06, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0xc2, 0x93, 0xff, 0xff, 0x14, 0x04, 0x00, 0x00, 0x08, 0x00,
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
+ 0x00, 0x00, 0x63, 0x1a, 0x98, 0x3b, 0xf0, 0xca, 0xdf, 0x3b, 0x6a, 0x36, 0xdc,
+ 0x3b, 0x7a, 0x8b, 0x16, 0x3c, 0xd6, 0xce, 0xf4, 0x3b, 0xef, 0x99, 0x74, 0x3b,
+ 0xcd, 0x1e, 0xb4, 0x3b, 0x29, 0xd1, 0x16, 0x3c, 0x55, 0xbd, 0xbe, 0x3b, 0xa3,
+ 0xf3, 0xb9, 0x3b, 0x43, 0xb1, 0x0a, 0x3c, 0x9e, 0x35, 0x09, 0x3c, 0xc9, 0xd2,
+ 0x31, 0x3c, 0x99, 0xed, 0x8a, 0x3c, 0x32, 0x87, 0xc2, 0x3b, 0x50, 0x41, 0xee,
+ 0x3b, 0x20, 0x90, 0x16, 0x3c, 0x65, 0x1b, 0x17, 0x3c, 0xa5, 0xc8, 0xf6, 0x3b,
+ 0x64, 0x68, 0x4e, 0x3c, 0xda, 0x71, 0x2a, 0x3c, 0x00, 0xd8, 0x0b, 0x3c, 0x3e,
+ 0x58, 0x22, 0x3c, 0x9b, 0x30, 0xb6, 0x3b, 0x7c, 0x9a, 0x82, 0x3b, 0x52, 0x52,
+ 0xd6, 0x3b, 0xfe, 0xe9, 0xc3, 0x3b, 0x5f, 0x56, 0x06, 0x3c, 0xef, 0xa4, 0xd4,
+ 0x3b, 0x97, 0x95, 0x1f, 0x3c, 0xc2, 0x46, 0x9b, 0x3b, 0xcc, 0x44, 0xc6, 0x3b,
+ 0xa7, 0xc1, 0xaf, 0x3b, 0x02, 0x07, 0xf0, 0x3b, 0xc1, 0xcf, 0xe5, 0x3b, 0x71,
+ 0x1c, 0x14, 0x3c, 0x7d, 0xff, 0xb3, 0x3b, 0xa4, 0xb6, 0xf3, 0x3b, 0xf4, 0x81,
+ 0xda, 0x3b, 0xab, 0xa7, 0xbb, 0x3b, 0xef, 0xd8, 0xc9, 0x3b, 0xa1, 0x31, 0x02,
+ 0x3c, 0x71, 0xfb, 0xc1, 0x3b, 0x91, 0xd6, 0xc2, 0x3b, 0x67, 0x8b, 0xcf, 0x3b,
+ 0xc8, 0x0b, 0x8f, 0x3b, 0xbf, 0x2e, 0xdb, 0x3b, 0x70, 0xe7, 0x1e, 0x3c, 0x08,
+ 0x47, 0x25, 0x3c, 0xd4, 0xe6, 0xeb, 0x3b, 0x60, 0xf5, 0xcd, 0x3b, 0xde, 0xca,
+ 0x00, 0x3c, 0xbb, 0x22, 0xd0, 0x3b, 0xd5, 0x0d, 0xc4, 0x3b, 0x5c, 0x68, 0xbb,
+ 0x3b, 0x92, 0x93, 0xb2, 0x3b, 0x77, 0x86, 0xfa, 0x3b, 0x11, 0x85, 0x27, 0x3c,
+ 0x14, 0x4d, 0xd7, 0x3b, 0x49, 0x13, 0xeb, 0x3b, 0x56, 0x35, 0x0c, 0x3c, 0xcc,
+ 0x92, 0xae, 0x3b, 0x36, 0x68, 0x2f, 0x3c, 0x52, 0xaf, 0x4c, 0x3c, 0xa0, 0xd9,
+ 0xad, 0x3b, 0x49, 0x40, 0x93, 0x3b, 0xfa, 0x40, 0x27, 0x3c, 0x35, 0xcd, 0xb1,
+ 0x3b, 0xa4, 0xaa, 0xdb, 0x3b, 0x45, 0xfa, 0x01, 0x3c, 0xc4, 0x09, 0x97, 0x3b,
+ 0x2d, 0x12, 0x1e, 0x3c, 0x80, 0xf7, 0xf2, 0x3b, 0x0e, 0xee, 0xd1, 0x3b, 0x93,
+ 0xc7, 0x3e, 0x3c, 0xa5, 0xc5, 0x78, 0x3c, 0x81, 0xa1, 0xcd, 0x3b, 0x95, 0x7f,
+ 0x84, 0x3b, 0xac, 0xfb, 0xc0, 0x3b, 0x7b, 0x9e, 0xc9, 0x3b, 0xb4, 0x94, 0x0e,
+ 0x3c, 0xbe, 0x02, 0x24, 0x3c, 0x26, 0xaf, 0x03, 0x3c, 0x1d, 0x55, 0xb6, 0x3b,
+ 0x84, 0x0c, 0xa4, 0x3b, 0xe1, 0x22, 0xf5, 0x3b, 0xaf, 0xf6, 0x16, 0x3c, 0xf4,
+ 0x0e, 0x02, 0x3c, 0x8f, 0x59, 0xb8, 0x3b, 0x5a, 0x77, 0x81, 0x3c, 0xa0, 0x61,
+ 0x03, 0x3c, 0xdf, 0x05, 0xbc, 0x3b, 0x56, 0x04, 0xc6, 0x3b, 0x8d, 0x0b, 0xc2,
+ 0x3b, 0x34, 0xd6, 0xd1, 0x3b, 0x06, 0xd9, 0xf0, 0x3b, 0xc8, 0x23, 0x01, 0x3c,
+ 0x8d, 0x16, 0x17, 0x3c, 0x01, 0x15, 0xaa, 0x3b, 0x1e, 0x97, 0x1b, 0x3c, 0x01,
+ 0x15, 0xde, 0x3b, 0x84, 0x0b, 0xd7, 0x3b, 0x61, 0x98, 0x24, 0x3c, 0x52, 0x21,
+ 0xa2, 0x3b, 0x00, 0x53, 0xab, 0x3b, 0xca, 0x54, 0xc5, 0x3b, 0x2f, 0xf5, 0xf1,
+ 0x3b, 0x72, 0x53, 0x8f, 0x3b, 0x73, 0xbd, 0xca, 0x3b, 0x3c, 0x53, 0x13, 0x3c,
+ 0xa8, 0x4d, 0x45, 0x3c, 0xd9, 0x26, 0x5a, 0x3c, 0xb7, 0xf1, 0xbf, 0x3b, 0x0f,
+ 0xa2, 0x3e, 0x3c, 0x6e, 0xb5, 0xd3, 0x3b, 0x30, 0xa8, 0x3c, 0x3c, 0x1c, 0xfc,
+ 0xcd, 0x3b, 0x0c, 0x94, 0x1d, 0x3c, 0x09, 0x92, 0xdb, 0x3b, 0xcc, 0xad, 0x1f,
+ 0x3c, 0x6e, 0x27, 0xf6, 0x3b, 0x01, 0x23, 0x89, 0x3b, 0x57, 0xa7, 0x9b, 0x3b,
+ 0x23, 0x4a, 0x95, 0x3b, 0x53, 0x0b, 0x1a, 0x3c, 0xa6, 0x56, 0x00, 0x3c, 0x3c,
+ 0x50, 0x08, 0x3c, 0xd0, 0x0e, 0x91, 0x3b, 0x35, 0x00, 0x00, 0x00, 0x4d, 0x6f,
+ 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e,
+ 0x76, 0x32, 0x64, 0x5f, 0x37, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69,
+ 0x73, 0x65, 0x2f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x5f,
+ 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xea, 0xa0, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x09, 0x58, 0x06, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x20,
+ 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6c, 0xa7, 0xff, 0xff, 0x10, 0x04,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
+ 0x00, 0x00, 0xdb, 0x16, 0x77, 0x3b, 0x81, 0x65, 0x4c, 0x3b, 0xe0, 0x30, 0xbc,
+ 0x3b, 0x34, 0x9a, 0x7d, 0x3b, 0xad, 0x5a, 0x4b, 0x3b, 0x64, 0xaf, 0x9d, 0x3b,
+ 0x60, 0xcb, 0x1d, 0x3b, 0x9d, 0xf2, 0x52, 0x3b, 0xef, 0x67, 0x91, 0x3b, 0x2c,
+ 0xc1, 0x5e, 0x3b, 0x8d, 0x8e, 0x4b, 0x3b, 0x3e, 0x7a, 0x8d, 0x3b, 0x64, 0x7e,
+ 0x32, 0x3b, 0x35, 0x8d, 0xf5, 0x3a, 0x39, 0x88, 0x28, 0x3b, 0x69, 0x08, 0x39,
+ 0x3b, 0xb7, 0xa5, 0x35, 0x3b, 0x0e, 0x28, 0x46, 0x3b, 0x77, 0x11, 0x79, 0x3b,
+ 0xbf, 0x20, 0x29, 0x3b, 0xd0, 0x29, 0x67, 0x3b, 0xff, 0x3c, 0x32, 0x3b, 0x0c,
+ 0x5f, 0x83, 0x3b, 0x00, 0x82, 0x87, 0x3b, 0x1c, 0x6d, 0x8f, 0x3b, 0xa2, 0xdc,
+ 0x3d, 0x3b, 0xd5, 0xd2, 0x58, 0x3b, 0xa0, 0x0d, 0x70, 0x3b, 0x13, 0x09, 0x4f,
+ 0x3b, 0x7e, 0x45, 0x86, 0x3b, 0x87, 0xbe, 0x65, 0x3b, 0xa3, 0x41, 0x44, 0x3b,
+ 0x85, 0x42, 0x6e, 0x3b, 0xdd, 0x83, 0x39, 0x3b, 0x70, 0xaf, 0x32, 0x3b, 0x93,
+ 0x27, 0x2e, 0x3b, 0x90, 0x79, 0x4f, 0x3b, 0x1b, 0x55, 0xf1, 0x3a, 0x88, 0x75,
+ 0x5d, 0x3b, 0x82, 0x71, 0x7c, 0x3b, 0xe2, 0x39, 0x83, 0x3b, 0x48, 0xba, 0x5d,
+ 0x3b, 0x93, 0x01, 0x46, 0x3b, 0xb6, 0xf1, 0x62, 0x3b, 0x46, 0xcc, 0x84, 0x3b,
+ 0x28, 0xbe, 0x05, 0x3b, 0xf6, 0x0c, 0x5a, 0x3b, 0x29, 0xbb, 0x5f, 0x3b, 0xaa,
+ 0x38, 0x17, 0x3b, 0x37, 0xeb, 0x20, 0x3b, 0x94, 0xee, 0x80, 0x3b, 0x88, 0xe9,
+ 0x6a, 0x3b, 0x62, 0x9f, 0x5c, 0x3b, 0x5b, 0x1e, 0x62, 0x3b, 0x3d, 0xa8, 0x46,
+ 0x3b, 0x9e, 0x8c, 0x49, 0x3b, 0x0a, 0x98, 0x72, 0x3b, 0x72, 0x54, 0x5b, 0x3b,
+ 0xfc, 0x37, 0x2f, 0x3b, 0x56, 0x08, 0x05, 0x3b, 0xfb, 0xd2, 0x44, 0x3b, 0x4f,
+ 0x12, 0x38, 0x3b, 0xf8, 0x62, 0x2e, 0x3b, 0xba, 0x67, 0x48, 0x3b, 0x02, 0xbc,
+ 0x61, 0x3b, 0xf7, 0x01, 0x5d, 0x3b, 0x80, 0xde, 0x24, 0x3b, 0x0f, 0xf2, 0x9b,
+ 0x3b, 0x33, 0xb9, 0x44, 0x3b, 0xe4, 0xc4, 0x41, 0x3b, 0x5e, 0x1e, 0x4a, 0x3b,
+ 0x20, 0x04, 0x13, 0x3b, 0x37, 0x3a, 0x5a, 0x3b, 0x5c, 0x35, 0x52, 0x3b, 0x0d,
+ 0xf3, 0x4a, 0x3b, 0x57, 0xf5, 0x06, 0x3b, 0x9f, 0xdf, 0x25, 0x3b, 0x8c, 0x98,
+ 0x35, 0x3b, 0xd5, 0x98, 0x33, 0x3b, 0x8c, 0x82, 0x30, 0x3b, 0xaa, 0x7a, 0x60,
+ 0x3b, 0x3a, 0x6b, 0x51, 0x3b, 0x24, 0xdf, 0x7c, 0x3b, 0xe8, 0xe2, 0x4a, 0x3b,
+ 0xca, 0x46, 0x43, 0x3b, 0x7f, 0x20, 0x50, 0x3b, 0x6b, 0x23, 0x17, 0x3b, 0x89,
+ 0xcb, 0x49, 0x3b, 0x85, 0x69, 0x40, 0x3b, 0x70, 0x71, 0x22, 0x3b, 0x41, 0x72,
+ 0x73, 0x3b, 0x43, 0xf2, 0x29, 0x3b, 0xb4, 0xa5, 0x5d, 0x3b, 0x6f, 0xfb, 0x21,
+ 0x3b, 0x37, 0x81, 0x88, 0x3b, 0x38, 0xc1, 0x24, 0x3b, 0xec, 0x46, 0x1d, 0x3b,
+ 0xd5, 0x05, 0x7b, 0x3b, 0xfa, 0xad, 0x49, 0x3b, 0x38, 0x00, 0x5c, 0x3b, 0x42,
+ 0xa2, 0x82, 0x3b, 0xca, 0x7f, 0x87, 0x3b, 0xf8, 0xf8, 0x5e, 0x3b, 0xa9, 0xa1,
+ 0x72, 0x3b, 0xdd, 0x61, 0x67, 0x3b, 0xc2, 0xe2, 0x20, 0x3b, 0x3d, 0x06, 0x35,
+ 0x3b, 0x6a, 0x6f, 0x48, 0x3b, 0x49, 0x28, 0x4b, 0x3b, 0x13, 0x71, 0x5b, 0x3b,
+ 0x57, 0x39, 0x70, 0x3b, 0x3f, 0x6c, 0x08, 0x3b, 0x99, 0xc7, 0x41, 0x3b, 0x64,
+ 0x48, 0x45, 0x3b, 0x02, 0x34, 0x35, 0x3b, 0x8f, 0x25, 0x51, 0x3b, 0xc4, 0xfe,
+ 0x5a, 0x3b, 0x8e, 0xa5, 0x1e, 0x3b, 0xb6, 0xc5, 0x3a, 0x3b, 0x33, 0xad, 0xfb,
+ 0x3a, 0x2b, 0xce, 0x43, 0x3b, 0xf4, 0xa4, 0x1d, 0x3b, 0xbf, 0xd2, 0x4e, 0x3b,
+ 0xeb, 0x6a, 0x92, 0x3b, 0x17, 0xe4, 0x89, 0x3b, 0xa8, 0x88, 0x28, 0x3b, 0x04,
+ 0x1c, 0x55, 0x3b, 0x98, 0xc7, 0x46, 0x3b, 0x2b, 0x00, 0x00, 0x00, 0x4d, 0x6f,
+ 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e,
+ 0x76, 0x32, 0x64, 0x5f, 0x36, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77, 0x69,
+ 0x73, 0x65, 0x2f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x2f, 0x72, 0x65,
+ 0x61, 0x64, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x5e, 0xa7, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x09, 0x68, 0x03, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
+ 0x24, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xba, 0xa0, 0xff, 0xff, 0x14,
+ 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
+ 0x00, 0x00, 0x01, 0xb0, 0x90, 0x3b, 0xe7, 0x75, 0x88, 0x3b, 0xda, 0xf6, 0x64,
+ 0x3b, 0xf3, 0xa3, 0x78, 0x3b, 0xae, 0xc0, 0x3c, 0x3b, 0x98, 0xf3, 0x41, 0x3b,
+ 0x75, 0xe2, 0xa1, 0x3b, 0x49, 0xfe, 0x7a, 0x3b, 0x71, 0x95, 0x77, 0x3b, 0x26,
+ 0xd0, 0xb1, 0x3b, 0x93, 0xf9, 0x76, 0x3b, 0x29, 0x45, 0x87, 0x3b, 0x9a, 0x05,
+ 0x89, 0x3b, 0x2c, 0xf3, 0x7f, 0x3b, 0x9b, 0xd5, 0x7b, 0x3b, 0xd2, 0x29, 0xf3,
+ 0x3b, 0xf1, 0x7e, 0x6c, 0x3b, 0x99, 0xf1, 0x1c, 0x3c, 0x86, 0x53, 0x73, 0x3b,
+ 0x38, 0x28, 0x8f, 0x3b, 0xbe, 0x20, 0x64, 0x3b, 0xb5, 0x96, 0x82, 0x3b, 0x84,
+ 0x0a, 0xb7, 0x3b, 0xa5, 0xa4, 0x5b, 0x3b, 0x1b, 0x96, 0x9d, 0x3b, 0x12, 0x99,
+ 0x6f, 0x3b, 0xa0, 0xcd, 0x94, 0x3b, 0x62, 0x2c, 0x7f, 0x3b, 0x90, 0x6c, 0x7e,
+ 0x3b, 0xdc, 0xc6, 0x95, 0x3b, 0xcd, 0x97, 0x62, 0x3b, 0x8a, 0xf8, 0x80, 0x3b,
+ 0x53, 0x91, 0x64, 0x3b, 0xf9, 0xb9, 0x70, 0x3b, 0x93, 0x39, 0xf7, 0x3b, 0xe4,
+ 0x72, 0xac, 0x3b, 0x29, 0x52, 0x95, 0x3b, 0x01, 0xf7, 0x98, 0x3b, 0x7a, 0xce,
+ 0x4a, 0x3b, 0xb9, 0x52, 0x50, 0x3b, 0x6e, 0x9f, 0x71, 0x3b, 0x03, 0x4a, 0xa8,
+ 0x3b, 0x34, 0xdc, 0xa3, 0x3b, 0xd3, 0xad, 0x93, 0x3b, 0xe2, 0x45, 0x63, 0x3b,
+ 0xa6, 0x4a, 0x93, 0x3b, 0x3a, 0x6b, 0x54, 0x3b, 0xd9, 0x9f, 0x97, 0x3b, 0xef,
+ 0x53, 0x77, 0x3b, 0x87, 0x02, 0x8b, 0x3b, 0x8b, 0xd4, 0x33, 0x3b, 0x1b, 0x36,
+ 0x99, 0x3b, 0x90, 0x19, 0xcd, 0x3b, 0xda, 0x5d, 0xc1, 0x3b, 0x5d, 0xee, 0x68,
+ 0x3b, 0x7d, 0x5b, 0x83, 0x3b, 0x30, 0x76, 0xd9, 0x3b, 0xb6, 0x23, 0x83, 0x3b,
+ 0x57, 0xdd, 0x45, 0x3b, 0xfc, 0xdc, 0x47, 0x3b, 0x90, 0x3f, 0x3d, 0x3b, 0x20,
+ 0x3a, 0x8e, 0x3b, 0x35, 0x03, 0x88, 0x3b, 0xe1, 0xf2, 0xd9, 0x3b, 0x35, 0x00,
+ 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31,
+ 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x36, 0x5f, 0x64, 0x65, 0x70,
+ 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77,
+ 0x69, 0x73, 0x65, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x2f, 0x72,
+ 0x65, 0x61, 0x64, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
+ 0xe2, 0xaa, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x58, 0x03, 0x00, 0x00, 0x1c,
+ 0x00, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x64, 0xb1,
+ 0xff, 0xff, 0x10, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
+ 0x00, 0xa4, 0xc8, 0x2b, 0x3b, 0x4e, 0x6a, 0x7a, 0x3b, 0x4b, 0x5c, 0x8d, 0x3b,
+ 0x1a, 0x86, 0xa4, 0x3b, 0x9d, 0x00, 0x62, 0x3b, 0x17, 0x46, 0x39, 0x3b, 0xc4,
+ 0xca, 0x6a, 0x3b, 0x39, 0x91, 0x59, 0x3b, 0x38, 0xdf, 0x8d, 0x3b, 0x6b, 0x33,
+ 0x81, 0x3b, 0x7e, 0x86, 0x7e, 0x3b, 0xbc, 0x51, 0x61, 0x3b, 0x39, 0xea, 0x80,
+ 0x3b, 0x43, 0x3c, 0x1f, 0x3b, 0x4e, 0xb7, 0xa8, 0x3b, 0x64, 0x51, 0x0f, 0x3b,
+ 0xf8, 0x3f, 0x81, 0x3b, 0xe5, 0x7b, 0x10, 0x3b, 0x4d, 0x5b, 0x28, 0x3b, 0x8e,
+ 0xe7, 0x97, 0x3b, 0xb4, 0xef, 0x6f, 0x3b, 0xc2, 0xd6, 0x55, 0x3b, 0x89, 0x56,
+ 0x6a, 0x3b, 0x44, 0xc6, 0x70, 0x3b, 0xb4, 0x0a, 0x2c, 0x3b, 0xc6, 0xc2, 0x1c,
+ 0x3b, 0x4b, 0xb3, 0x9b, 0x3b, 0x8c, 0x98, 0x61, 0x3b, 0x98, 0x37, 0x90, 0x3b,
+ 0x51, 0xaa, 0x5b, 0x3b, 0x32, 0x7e, 0x81, 0x3b, 0x90, 0x3e, 0x5d, 0x3b, 0x34,
+ 0x88, 0x41, 0x3b, 0x78, 0x6b, 0x59, 0x3b, 0xeb, 0xb0, 0x4c, 0x3b, 0x3c, 0x78,
+ 0x3c, 0x3b, 0xcb, 0x77, 0x58, 0x3b, 0x77, 0x8c, 0x16, 0x3b, 0xbb, 0xad, 0x2c,
+ 0x3b, 0xc3, 0x8c, 0x8b, 0x3b, 0x26, 0xb3, 0x82, 0x3b, 0xd6, 0x40, 0x6a, 0x3b,
+ 0x8e, 0xe1, 0x38, 0x3b, 0x7e, 0xd5, 0x6e, 0x3b, 0x10, 0xe0, 0x74, 0x3b, 0xc5,
+ 0x58, 0x60, 0x3b, 0xf5, 0xaa, 0x3b, 0x3b, 0xbd, 0xde, 0x1c, 0x3b, 0xe8, 0xcc,
+ 0x45, 0x3b, 0xbf, 0x14, 0xfb, 0x3a, 0x37, 0xe0, 0x67, 0x3b, 0xc4, 0xe3, 0x8d,
+ 0x3b, 0xf7, 0xbe, 0xca, 0x3a, 0xdb, 0x1a, 0x0e, 0x3b, 0xb8, 0xa4, 0x6a, 0x3b,
+ 0x4b, 0xa5, 0x59, 0x3b, 0x90, 0xf5, 0x4f, 0x3b, 0xbc, 0xdd, 0x6a, 0x3b, 0x9d,
+ 0x26, 0x66, 0x3b, 0x28, 0x0d, 0x5e, 0x3b, 0x58, 0xa2, 0x7e, 0x3b, 0x86, 0x80,
+ 0x83, 0x3b, 0x03, 0x4a, 0x14, 0x3b, 0xf4, 0xda, 0x12, 0x3b, 0x2b, 0x00, 0x00,
+ 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f,
+ 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x35, 0x5f, 0x70, 0x6f, 0x69, 0x6e,
+ 0x74, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73,
+ 0x2f, 0x72, 0x65, 0x61, 0x64, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
+ 0x56, 0xae, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x68, 0x03, 0x00, 0x00, 0x4d,
+ 0x00, 0x00, 0x00, 0x24, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xb2, 0xa7,
+ 0xff, 0xff, 0x14, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0xaf, 0x6d, 0xa7, 0x3b, 0x6f, 0xfb, 0x1a, 0x3c,
+ 0x4f, 0x65, 0xf0, 0x3b, 0x64, 0x5c, 0xf6, 0x3b, 0xd1, 0xef, 0x18, 0x3c, 0x0b,
+ 0xb1, 0x8f, 0x3b, 0xd0, 0x97, 0xb1, 0x3b, 0x49, 0xed, 0x48, 0x3b, 0xc5, 0x55,
+ 0x50, 0x3c, 0xff, 0xff, 0x6c, 0x3c, 0x09, 0x61, 0x8d, 0x3c, 0xd3, 0xcb, 0x17,
+ 0x3c, 0x51, 0x94, 0x14, 0x3c, 0xb9, 0xd6, 0x7c, 0x3b, 0xd5, 0xff, 0xd5, 0x3b,
+ 0x69, 0x20, 0x00, 0x3c, 0x8b, 0x38, 0xbe, 0x3b, 0xa6, 0xe9, 0x9a, 0x3b, 0x9a,
+ 0xea, 0xd7, 0x3b, 0xd0, 0x5e, 0x9d, 0x3b, 0xfa, 0x04, 0x95, 0x3b, 0x76, 0xe1,
+ 0xc0, 0x3b, 0xc1, 0x6e, 0x8b, 0x3c, 0xf0, 0x34, 0xcb, 0x3b, 0xca, 0x60, 0xb1,
+ 0x3b, 0x79, 0xa5, 0x64, 0x3c, 0x3b, 0x85, 0x38, 0x3c, 0xe2, 0x8a, 0x95, 0x3b,
+ 0xec, 0xbb, 0xc0, 0x3b, 0xfb, 0xa3, 0xe9, 0x3b, 0x14, 0x3d, 0xb1, 0x3b, 0x1d,
+ 0x89, 0xe8, 0x3b, 0x06, 0x7a, 0x8b, 0x3b, 0x2f, 0x32, 0xb6, 0x3b, 0xcc, 0x2e,
+ 0xd7, 0x3b, 0x32, 0xc7, 0x68, 0x3b, 0xd7, 0x22, 0x33, 0x3c, 0x1e, 0x40, 0x42,
+ 0x3c, 0x6e, 0xb4, 0xb6, 0x3b, 0x28, 0x77, 0xb0, 0x3b, 0x49, 0xaa, 0xed, 0x3b,
+ 0x4f, 0x78, 0xe2, 0x3b, 0x85, 0xe9, 0x23, 0x3c, 0x5e, 0xe9, 0xd9, 0x3b, 0x6d,
+ 0xab, 0x7a, 0x3b, 0x21, 0x29, 0x5f, 0x3b, 0xb7, 0x50, 0x3e, 0x3c, 0xf7, 0xc3,
+ 0x84, 0x3b, 0x18, 0x38, 0x2b, 0x3c, 0x01, 0x11, 0x12, 0x3c, 0x78, 0xe8, 0xf3,
+ 0x3b, 0x7d, 0x96, 0x0d, 0x3c, 0xb6, 0x66, 0x56, 0x3c, 0x79, 0x61, 0xb3, 0x3b,
+ 0xea, 0x0d, 0x92, 0x3b, 0xb3, 0xe3, 0xa9, 0x3b, 0xe0, 0xc5, 0x0c, 0x3c, 0xce,
+ 0x38, 0xc8, 0x3b, 0xb8, 0x38, 0x9b, 0x3b, 0x23, 0x35, 0xa1, 0x3b, 0x5e, 0x18,
+ 0x4a, 0x3c, 0x63, 0x54, 0x8a, 0x3b, 0x17, 0xe9, 0xb7, 0x3b, 0xfa, 0x64, 0x3d,
+ 0x3c, 0x35, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65,
+ 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x35, 0x5f,
+ 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x64, 0x65, 0x70,
+ 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74,
+ 0x73, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x40,
+ 0x00, 0x00, 0x00, 0xda, 0xb1, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x58, 0x03,
+ 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x5c, 0xb8, 0xff, 0xff, 0x10, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0x00, 0x00, 0x00, 0x9e, 0x9c, 0x8a, 0x3b, 0xa1, 0xfb, 0x2f, 0x3b, 0x08,
+ 0x09, 0xa5, 0x3b, 0xf9, 0xb5, 0x8a, 0x3b, 0x37, 0xe2, 0x55, 0x3b, 0x57, 0x24,
+ 0x72, 0x3b, 0x09, 0xef, 0x9f, 0x3b, 0xa9, 0xe2, 0x83, 0x3b, 0x95, 0x08, 0x35,
+ 0x3b, 0x15, 0x8c, 0x8c, 0x3b, 0xb7, 0x43, 0x15, 0x3b, 0xa3, 0xf2, 0x9f, 0x3b,
+ 0xed, 0xf3, 0x33, 0x3b, 0x8a, 0x02, 0x8a, 0x3b, 0xcc, 0xf5, 0xad, 0x3b, 0x31,
+ 0x32, 0x03, 0x3c, 0x5c, 0x78, 0x87, 0x3b, 0x97, 0xb7, 0x82, 0x3b, 0xae, 0xbb,
+ 0x8c, 0x3b, 0x1a, 0x38, 0x3c, 0x3b, 0xf6, 0xc9, 0xe6, 0x3b, 0xa1, 0x15, 0x54,
+ 0x3b, 0x80, 0x78, 0x5c, 0x3b, 0xec, 0x30, 0xc3, 0x3b, 0x58, 0x81, 0xba, 0x3b,
+ 0x74, 0x73, 0xe2, 0x3a, 0x5c, 0x1b, 0x2e, 0x3b, 0x52, 0x39, 0xd7, 0x3b, 0x96,
+ 0xb9, 0xb3, 0x3b, 0x71, 0x24, 0x83, 0x3b, 0x20, 0x23, 0x8a, 0x3b, 0x48, 0xf7,
+ 0xc2, 0x3b, 0x4d, 0x5e, 0xaa, 0x3b, 0x32, 0x14, 0x22, 0x3b, 0x6a, 0x7e, 0x6e,
+ 0x3b, 0x2e, 0x1c, 0xdf, 0x3b, 0x54, 0x42, 0x1e, 0x3b, 0x46, 0x10, 0x24, 0x3b,
+ 0x0a, 0xad, 0x6f, 0x3b, 0x22, 0x6a, 0x35, 0x3b, 0xc4, 0x9b, 0x5f, 0x3b, 0xfd,
+ 0xd4, 0x8d, 0x3b, 0x7e, 0xed, 0x53, 0x3b, 0x09, 0xdb, 0x8e, 0x3b, 0xbd, 0xad,
+ 0xce, 0x3b, 0xf2, 0xa0, 0xd0, 0x3b, 0xea, 0x53, 0x06, 0x3b, 0xc8, 0x51, 0x71,
+ 0x3b, 0x76, 0x51, 0xad, 0x3b, 0x21, 0x81, 0x0c, 0x3c, 0x3a, 0x8c, 0x04, 0x3c,
+ 0xa8, 0xbe, 0x8f, 0x3b, 0x4f, 0xc3, 0x8d, 0x3b, 0x9e, 0x1c, 0x09, 0x3c, 0x17,
+ 0x93, 0xac, 0x3b, 0x67, 0x90, 0x98, 0x3b, 0x7d, 0x65, 0x54, 0x3b, 0x7b, 0x0d,
+ 0xd5, 0x3b, 0x42, 0x1c, 0x92, 0x3b, 0xec, 0x41, 0xa6, 0x3b, 0x4a, 0x0f, 0x42,
+ 0x3b, 0x5c, 0x69, 0xfd, 0x3b, 0xd2, 0x9d, 0xbb, 0x3b, 0x0a, 0xbb, 0x48, 0x3b,
+ 0x2b, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74,
+ 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x34, 0x5f, 0x70,
+ 0x6f, 0x69, 0x6e, 0x74, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x77, 0x65, 0x69, 0x67,
+ 0x68, 0x74, 0x73, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x00, 0x00, 0x4e, 0xb5, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0xe8, 0x01,
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xa4, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0xaa, 0xae, 0xff, 0xff, 0x14, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0e,
+ 0xe8, 0x3a, 0x3b, 0x06, 0xdb, 0x60, 0x3b, 0x15, 0xab, 0x2c, 0x3b, 0xc2, 0x4d,
+ 0x69, 0x3b, 0xed, 0xe2, 0x03, 0x3c, 0xf7, 0x38, 0x87, 0x3b, 0x43, 0xca, 0x46,
+ 0x3b, 0x75, 0x5e, 0x48, 0x3b, 0x1b, 0xa8, 0x47, 0x3b, 0x1a, 0x27, 0x1a, 0x3b,
+ 0xfa, 0xaa, 0x64, 0x3b, 0xd7, 0x95, 0x46, 0x3b, 0x29, 0x74, 0x8d, 0x3b, 0x56,
+ 0x3a, 0xdf, 0x3b, 0xfc, 0xdf, 0x93, 0x3b, 0x2a, 0xd8, 0x59, 0x3b, 0x3a, 0x2c,
+ 0x4d, 0x3b, 0x06, 0xa2, 0x3e, 0x3b, 0x56, 0xe5, 0xa0, 0x3b, 0x7c, 0x42, 0x51,
+ 0x3b, 0x36, 0x2c, 0x9f, 0x3b, 0x6f, 0xd4, 0x8f, 0x3b, 0x01, 0x77, 0x07, 0x3b,
+ 0x5a, 0xfa, 0x65, 0x3b, 0x61, 0xc0, 0xe2, 0x3b, 0x7d, 0xea, 0x78, 0x3b, 0x3d,
+ 0x98, 0x57, 0x3b, 0x13, 0x7d, 0x40, 0x3b, 0x60, 0xdc, 0x9b, 0x3b, 0x92, 0x50,
+ 0x5e, 0x3b, 0x09, 0xc6, 0x90, 0x3b, 0xe0, 0x52, 0xd7, 0x3b, 0x35, 0x00, 0x00,
+ 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f,
+ 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x34, 0x5f, 0x64, 0x65, 0x70, 0x74,
+ 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69,
+ 0x73, 0x65, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x2f, 0x72, 0x65,
+ 0x61, 0x64, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x52,
+ 0xb7, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0xd8, 0x01, 0x00, 0x00, 0x21, 0x00,
+ 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xd4, 0xbd, 0xff,
+ 0xff, 0x10, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x00, 0x00, 0x00, 0x1f, 0xd1, 0x8d, 0x3b, 0x4a, 0xc4, 0xc6, 0x3b, 0x9e,
+ 0xc2, 0xa2, 0x3b, 0x50, 0x27, 0x83, 0x3b, 0x8f, 0xb4, 0x09, 0x3b, 0xa4, 0x9e,
+ 0x3b, 0x3b, 0x8d, 0xe0, 0x73, 0x3b, 0x54, 0x0e, 0x5f, 0x3b, 0xa8, 0xd7, 0xa1,
+ 0x3b, 0x7f, 0x7a, 0x75, 0x3b, 0x0e, 0xe9, 0xbc, 0x3b, 0xfa, 0x06, 0x60, 0x3b,
+ 0x12, 0x4b, 0xab, 0x3b, 0x95, 0xb8, 0xaf, 0x3b, 0x37, 0xc2, 0x54, 0x3b, 0xbe,
+ 0x2b, 0x7b, 0x3b, 0xdd, 0xc9, 0x83, 0x3b, 0xb2, 0x00, 0x9b, 0x3b, 0x6c, 0x06,
+ 0xbe, 0x3b, 0x47, 0xd2, 0x9d, 0x3b, 0x27, 0xbe, 0xdc, 0x3b, 0xe2, 0x70, 0x84,
+ 0x3b, 0xc7, 0xd1, 0x6e, 0x3b, 0x4f, 0x2c, 0xa8, 0x3b, 0xf4, 0x02, 0xd2, 0x3b,
+ 0x9c, 0xc2, 0x04, 0x3c, 0x0b, 0x8d, 0xd7, 0x3b, 0x16, 0x65, 0xb0, 0x3b, 0xaf,
+ 0xc2, 0x3a, 0x3b, 0xd6, 0xbb, 0x7c, 0x3b, 0x16, 0x8c, 0x98, 0x3b, 0xbb, 0xd1,
+ 0x7e, 0x3b, 0x2b, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e,
+ 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x33,
+ 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x77, 0x65,
+ 0x69, 0x67, 0x68, 0x74, 0x73, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x46, 0xb9, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09,
+ 0xe8, 0x01, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xa4, 0x01, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0xa2, 0xb2, 0xff, 0xff, 0x14, 0x01, 0x00, 0x00, 0x08, 0x00,
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
+ 0x00, 0x87, 0x89, 0x04, 0x3c, 0x79, 0xd0, 0x1d, 0x3c, 0x68, 0xa3, 0xe5, 0x3b,
+ 0xb9, 0x26, 0x22, 0x3c, 0x98, 0xca, 0x50, 0x3c, 0x30, 0xc4, 0xc5, 0x3c, 0x27,
+ 0x84, 0x8f, 0x3b, 0x2d, 0x0a, 0xeb, 0x3b, 0xbe, 0xf6, 0xee, 0x3b, 0xf0, 0x0c,
+ 0x8b, 0x3c, 0xc4, 0xd5, 0xb1, 0x3c, 0xcb, 0x44, 0xdc, 0x3b, 0x23, 0x2a, 0x34,
+ 0x3b, 0xcc, 0x23, 0x57, 0x3c, 0x95, 0x75, 0x0a, 0x3c, 0xdc, 0xdd, 0x06, 0x3b,
+ 0x15, 0x63, 0xe5, 0x3b, 0x3b, 0xa4, 0x8b, 0x3b, 0x01, 0x47, 0xb3, 0x3c, 0x17,
+ 0x08, 0xc8, 0x3c, 0xde, 0x85, 0xb4, 0x3b, 0x47, 0x1d, 0xc0, 0x3c, 0x5e, 0xf2,
+ 0x4f, 0x3b, 0x0c, 0x34, 0xd4, 0x3b, 0xc9, 0x45, 0xc7, 0x3b, 0x2a, 0x86, 0xf0,
+ 0x3c, 0x46, 0x7c, 0xf8, 0x3b, 0x57, 0x56, 0x52, 0x3b, 0x04, 0xf4, 0xa6, 0x3b,
+ 0xec, 0x8d, 0xe0, 0x3b, 0x44, 0x9f, 0xd3, 0x3b, 0x4d, 0x19, 0x38, 0x3c, 0x35,
+ 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56,
+ 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x33, 0x5f, 0x64, 0x65,
+ 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x64, 0x65, 0x70, 0x74, 0x68,
+ 0x77, 0x69, 0x73, 0x65, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x2f,
+ 0x72, 0x65, 0x61, 0x64, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
+ 0x00, 0x4a, 0xbb, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0xd8, 0x01, 0x00, 0x00,
+ 0x3d, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xcc,
+ 0xc1, 0xff, 0xff, 0x10, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x5c, 0xc7, 0x3c, 0x3c, 0x66, 0x8c, 0x83,
+ 0x3b, 0xd4, 0x22, 0xcd, 0x3b, 0x48, 0x6e, 0xd1, 0x3b, 0xdc, 0x08, 0xa3, 0x3b,
+ 0x61, 0x10, 0xd1, 0x3a, 0x79, 0x0b, 0xaf, 0x3b, 0x3a, 0x7e, 0xe1, 0x3b, 0x30,
+ 0x6c, 0x76, 0x3b, 0xfb, 0x99, 0x5e, 0x3b, 0xf0, 0xc4, 0xe5, 0x3a, 0x1c, 0xc4,
+ 0xa8, 0x3b, 0xb1, 0x3a, 0xd0, 0x3b, 0x88, 0x11, 0xa7, 0x3b, 0xec, 0xf4, 0x20,
+ 0x3c, 0xe3, 0xd4, 0x3b, 0x3c, 0xab, 0xed, 0xd9, 0x3b, 0x95, 0xdb, 0xfa, 0x3b,
+ 0x66, 0x0a, 0x11, 0x3b, 0x9b, 0x16, 0x4e, 0x3b, 0x24, 0xb6, 0xb0, 0x3b, 0xa5,
+ 0xc7, 0xfd, 0x3a, 0xac, 0x74, 0xc1, 0x3b, 0xbc, 0x52, 0xdc, 0x3b, 0x0a, 0xb5,
+ 0xb0, 0x3b, 0x49, 0x2c, 0x92, 0x3a, 0x60, 0x8d, 0xb4, 0x3b, 0x7f, 0x7e, 0xef,
+ 0x3b, 0x9a, 0x83, 0x1b, 0x3c, 0x4a, 0x50, 0x9a, 0x3b, 0xd4, 0x4d, 0x08, 0x3c,
+ 0x80, 0x79, 0x71, 0x3b, 0x2b, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c,
+ 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64,
+ 0x5f, 0x32, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77, 0x69, 0x73, 0x65, 0x2f,
+ 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x3e, 0xbd, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x09, 0x28, 0x01, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x9a, 0xb6, 0xff, 0xff, 0x94, 0x00, 0x00, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0xf3, 0xae, 0x65, 0x3b, 0x76, 0xd3, 0x46, 0x3b,
+ 0x47, 0x81, 0xa1, 0x3b, 0xa1, 0x23, 0x83, 0x3b, 0x2e, 0x71, 0xbf, 0x3b, 0xbf,
+ 0x4c, 0x9d, 0x3b, 0x00, 0xc1, 0xa5, 0x3b, 0x36, 0x82, 0x2f, 0x3b, 0x9a, 0xaf,
+ 0xa4, 0x3b, 0x3a, 0xd4, 0x11, 0x3c, 0x22, 0x3a, 0x44, 0x3b, 0xb5, 0x66, 0xa2,
+ 0x3b, 0xef, 0x6f, 0x6c, 0x3b, 0x28, 0xc6, 0x65, 0x3b, 0xb1, 0x23, 0xda, 0x3b,
+ 0x85, 0x20, 0xed, 0x3b, 0x35, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c,
+ 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64,
+ 0x5f, 0x32, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f,
+ 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x5f, 0x77, 0x65, 0x69,
+ 0x67, 0x68, 0x74, 0x73, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x00, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00,
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x82, 0xbe, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x09, 0x18, 0x01, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x04, 0xc5, 0xff, 0xff, 0x90, 0x00, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x09, 0x89, 0x62, 0x3c, 0x4d, 0xd2, 0x10, 0x3c, 0xc6, 0x64, 0x87, 0x3c, 0xc1,
+ 0x43, 0xee, 0x3b, 0x0a, 0x21, 0x47, 0x3c, 0x41, 0xa2, 0x49, 0x3c, 0x5e, 0x4c,
+ 0x00, 0x3c, 0x22, 0x6b, 0x0c, 0x3c, 0xb3, 0x07, 0x6a, 0x3c, 0x28, 0xb4, 0x07,
+ 0x3c, 0xb3, 0xc7, 0x52, 0x3c, 0x27, 0x63, 0x03, 0x3c, 0x87, 0xac, 0x46, 0x3c,
+ 0xe4, 0xd4, 0xe3, 0x3b, 0x53, 0xf1, 0x04, 0x3c, 0x58, 0xb6, 0x32, 0x3c, 0x2b,
+ 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56,
+ 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x31, 0x5f, 0x70, 0x6f,
+ 0x69, 0x6e, 0x74, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x77, 0x65, 0x69, 0x67, 0x68,
+ 0x74, 0x73, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00,
+ 0x00, 0x00, 0xb6, 0xbf, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0xc8, 0x00, 0x00,
+ 0x00, 0x3c, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x12, 0xb9, 0xff, 0xff, 0x54, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+ 0x00, 0xc6, 0x53, 0x8c, 0x3b, 0xca, 0x97, 0xca, 0x3b, 0x35, 0x82, 0x15, 0x3e,
+ 0xcd, 0x4b, 0x3e, 0x3b, 0x6d, 0x31, 0x70, 0x3c, 0x71, 0x98, 0x2d, 0x3b, 0x91,
+ 0xa1, 0xf1, 0x3b, 0x42, 0xa8, 0xa3, 0x3e, 0x35, 0x00, 0x00, 0x00, 0x4d, 0x6f,
+ 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e,
+ 0x76, 0x32, 0x64, 0x5f, 0x31, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69,
+ 0x73, 0x65, 0x2f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x5f,
+ 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x9a, 0xc0, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x09, 0x58, 0x0c, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x1c,
+ 0x0c, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1c, 0xc7, 0xff, 0xff, 0x0c, 0x08,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x35, 0xc1, 0x5c, 0x3a, 0xe5,
+ 0xef, 0xaa, 0x3a, 0xfb, 0x29, 0x95, 0x3a, 0xd6, 0x76, 0x09, 0x3a, 0x9a, 0xd5,
+ 0x99, 0x3a, 0x88, 0x58, 0x2f, 0x3a, 0xe3, 0x21, 0x42, 0x3a, 0xe5, 0x62, 0x95,
+ 0x3a, 0xfa, 0xa3, 0x5e, 0x3a, 0x66, 0x7c, 0x87, 0x3a, 0xef, 0x0d, 0x5d, 0x3a,
+ 0x96, 0x73, 0x31, 0x3a, 0x87, 0x13, 0x8d, 0x3a, 0x55, 0xee, 0x38, 0x3a, 0x8f,
+ 0x82, 0x34, 0x3a, 0x09, 0x82, 0x56, 0x3a, 0x8f, 0x70, 0x67, 0x3a, 0x8d, 0xca,
+ 0x2d, 0x3a, 0xf5, 0x8b, 0x1c, 0x3a, 0xcf, 0x64, 0x7c, 0x3a, 0xda, 0xb7, 0x12,
+ 0x3a, 0xff, 0xd8, 0x46, 0x3a, 0x72, 0xa8, 0x80, 0x3a, 0xb8, 0x32, 0x48, 0x3a,
+ 0x95, 0xdf, 0x97, 0x3a, 0xe1, 0x48, 0x42, 0x3a, 0xad, 0xfc, 0xb2, 0x3a, 0x0f,
+ 0xfe, 0x82, 0x3a, 0xec, 0xcc, 0x18, 0x3a, 0x0f, 0x77, 0x38, 0x3a, 0x48, 0x00,
+ 0x5a, 0x3a, 0x17, 0x3b, 0x77, 0x3a, 0x5c, 0x99, 0x90, 0x3a, 0xa5, 0x25, 0x50,
+ 0x3a, 0xbc, 0x0d, 0x48, 0x3a, 0x14, 0xc8, 0x3e, 0x3a, 0xe9, 0xb8, 0x52, 0x3a,
+ 0x6b, 0xc3, 0x25, 0x3a, 0x4a, 0x97, 0x65, 0x3a, 0xd6, 0x6f, 0x45, 0x3a, 0x95,
+ 0x18, 0x84, 0x3a, 0x8e, 0xaf, 0x58, 0x3a, 0xc7, 0x30, 0x84, 0x3a, 0x99, 0x69,
+ 0x77, 0x3a, 0x22, 0xc9, 0x10, 0x3a, 0x95, 0xb8, 0x1e, 0x3a, 0x50, 0xd3, 0x43,
+ 0x3a, 0xe2, 0x56, 0x36, 0x3a, 0x5e, 0xe9, 0x8a, 0x3a, 0xb1, 0x42, 0x86, 0x3a,
+ 0x28, 0xd7, 0x58, 0x3a, 0x5f, 0xe0, 0x1d, 0x3a, 0x70, 0x0e, 0x35, 0x3a, 0x13,
+ 0x7b, 0xcf, 0x3a, 0x5e, 0xfd, 0x3c, 0x3a, 0x1c, 0xe5, 0x7c, 0x3a, 0x42, 0x7e,
+ 0x85, 0x3a, 0x67, 0x18, 0x48, 0x3a, 0xbd, 0xec, 0x33, 0x3a, 0xc7, 0x8c, 0x5c,
+ 0x3a, 0x23, 0xff, 0x5c, 0x3a, 0x76, 0xcc, 0x4d, 0x3a, 0xe1, 0x08, 0x81, 0x3a,
+ 0x2d, 0xca, 0x3e, 0x3a, 0x76, 0x72, 0x1a, 0x3a, 0x5e, 0x40, 0x55, 0x3a, 0x38,
+ 0x79, 0x23, 0x3a, 0x59, 0x0d, 0x43, 0x3a, 0x43, 0x52, 0x42, 0x3a, 0x1c, 0x46,
+ 0x63, 0x3a, 0xce, 0xe7, 0x67, 0x3a, 0xe9, 0x16, 0x3e, 0x3a, 0x3c, 0x0c, 0x02,
+ 0x3a, 0xb6, 0x1a, 0x54, 0x3a, 0x2d, 0xd9, 0x28, 0x3a, 0xa0, 0x6b, 0x25, 0x3a,
+ 0xfd, 0xd0, 0xa5, 0x3a, 0xa9, 0x48, 0x59, 0x3a, 0x58, 0x22, 0x34, 0x3a, 0x5a,
+ 0xec, 0x09, 0x3a, 0x80, 0x39, 0xcb, 0x3a, 0x54, 0x07, 0x2c, 0x3a, 0x0a, 0x1d,
+ 0x0a, 0x3a, 0x0a, 0x82, 0x43, 0x3a, 0x65, 0x5e, 0x90, 0x3a, 0xf7, 0xc1, 0x18,
+ 0x3a, 0xba, 0x95, 0x34, 0x3a, 0x58, 0x5d, 0x9d, 0x3a, 0xc2, 0x69, 0x43, 0x3a,
+ 0x61, 0x37, 0x4b, 0x3a, 0x7d, 0x5a, 0x80, 0x3a, 0x63, 0x47, 0x28, 0x3a, 0x1f,
+ 0xbc, 0x4b, 0x3a, 0xd7, 0xa2, 0x59, 0x3a, 0x84, 0x6e, 0x11, 0x3a, 0xaa, 0x21,
+ 0x9b, 0x3a, 0x54, 0xa6, 0x83, 0x3a, 0xb7, 0x23, 0x66, 0x3a, 0xaa, 0xa8, 0x97,
+ 0x3a, 0x14, 0x6a, 0x2c, 0x3a, 0x4d, 0x1b, 0x2b, 0x3a, 0x2a, 0xbf, 0x27, 0x3a,
+ 0xf9, 0x8a, 0x27, 0x3a, 0x6a, 0x9e, 0x5d, 0x3a, 0xfa, 0xda, 0x89, 0x3a, 0x4f,
+ 0xea, 0x2e, 0x3a, 0x6b, 0x3f, 0x29, 0x3a, 0x51, 0xba, 0x28, 0x3a, 0xa8, 0x04,
+ 0x74, 0x3a, 0xcd, 0xb2, 0x56, 0x3a, 0x08, 0xe9, 0x85, 0x3a, 0xe2, 0x08, 0x28,
+ 0x3a, 0xa4, 0xfb, 0x02, 0x3a, 0x1c, 0x1b, 0x9a, 0x3a, 0x0b, 0xf8, 0x32, 0x3a,
+ 0x21, 0x7d, 0x83, 0x3a, 0xbd, 0xc4, 0x8e, 0x3a, 0xb8, 0x50, 0x39, 0x3a, 0x34,
+ 0xba, 0xa2, 0x3a, 0xa2, 0xfd, 0x26, 0x3a, 0xc7, 0xf1, 0x5c, 0x3a, 0x89, 0x82,
+ 0x1e, 0x3a, 0xc9, 0x03, 0x25, 0x3a, 0xda, 0x86, 0x55, 0x3a, 0xd2, 0xb4, 0x5d,
+ 0x3a, 0xa8, 0x51, 0x26, 0x3a, 0x4f, 0x3e, 0x21, 0x3a, 0xea, 0x6c, 0x75, 0x3a,
+ 0xf4, 0x32, 0x6b, 0x3a, 0xa6, 0x58, 0x9b, 0x3a, 0x3c, 0xd4, 0xa1, 0x3a, 0x9c,
+ 0x68, 0x7d, 0x3a, 0x8f, 0x54, 0x58, 0x3a, 0x41, 0x4c, 0x24, 0x3a, 0x2f, 0x16,
+ 0x68, 0x3a, 0x3b, 0x1d, 0x06, 0x3a, 0xa3, 0x7b, 0x7b, 0x3a, 0xd7, 0x94, 0x71,
+ 0x3a, 0xa1, 0x17, 0x25, 0x3a, 0xe4, 0x77, 0x42, 0x3a, 0x05, 0xb9, 0x6e, 0x3a,
+ 0x00, 0xe4, 0x42, 0x3a, 0x9b, 0xb6, 0x49, 0x3a, 0x25, 0x09, 0x5f, 0x3a, 0xae,
+ 0x63, 0x55, 0x3a, 0x78, 0x8d, 0x50, 0x3a, 0xa5, 0xf5, 0x64, 0x3a, 0x22, 0x6e,
+ 0x61, 0x3a, 0x34, 0x1c, 0x75, 0x3a, 0x8f, 0xf8, 0x33, 0x3a, 0x71, 0xc6, 0x62,
+ 0x3a, 0x34, 0x5d, 0x44, 0x3a, 0xb3, 0x6d, 0x25, 0x3a, 0x41, 0x2b, 0x19, 0x3a,
+ 0xd8, 0x4a, 0x73, 0x3a, 0x4b, 0x72, 0x59, 0x3a, 0xa2, 0x6c, 0x41, 0x3a, 0x0a,
+ 0xed, 0x9e, 0x3a, 0x05, 0x1e, 0x46, 0x3a, 0x5a, 0x17, 0x49, 0x3a, 0xd4, 0xea,
+ 0x23, 0x3a, 0x76, 0xdb, 0x46, 0x3a, 0x6f, 0xb2, 0xb7, 0x3a, 0x9b, 0xe6, 0x4e,
+ 0x3a, 0x28, 0x26, 0x42, 0x3a, 0x92, 0xb3, 0x3a, 0x3a, 0x93, 0x76, 0x1e, 0x3a,
+ 0x92, 0x54, 0x49, 0x3a, 0x35, 0x42, 0x13, 0x3a, 0xac, 0x30, 0xa2, 0x3a, 0xc4,
+ 0xca, 0x4f, 0x3a, 0x18, 0x3c, 0x1e, 0x3a, 0x44, 0xd1, 0x8a, 0x3a, 0x22, 0x0d,
+ 0x34, 0x3a, 0x66, 0xf7, 0x47, 0x3a, 0xe7, 0x06, 0x49, 0x3a, 0x38, 0xc8, 0x07,
+ 0x3b, 0x41, 0xe5, 0xca, 0x3a, 0x4b, 0x05, 0x63, 0x3a, 0x48, 0x83, 0x50, 0x3a,
+ 0x3b, 0x4a, 0x23, 0x3a, 0x10, 0x05, 0x3c, 0x3a, 0x70, 0x54, 0x45, 0x3a, 0xfc,
+ 0xb4, 0x56, 0x3a, 0x16, 0x39, 0x7a, 0x3a, 0xd3, 0xac, 0x67, 0x3a, 0x13, 0x8d,
+ 0x98, 0x3a, 0x99, 0x9d, 0x3e, 0x3a, 0x2a, 0x46, 0x37, 0x3a, 0xfc, 0x1c, 0x4a,
+ 0x3a, 0xa1, 0x1c, 0x52, 0x3a, 0xab, 0x73, 0x7b, 0x3a, 0x04, 0xc9, 0x24, 0x3a,
+ 0x0b, 0xf4, 0x57, 0x3a, 0xc8, 0xab, 0x74, 0x3a, 0x4d, 0x7b, 0x1f, 0x3a, 0x21,
+ 0xe0, 0x34, 0x3a, 0x37, 0x61, 0x82, 0x3a, 0x63, 0xe2, 0x21, 0x3a, 0x6f, 0xd2,
+ 0xdf, 0x39, 0x7e, 0x17, 0x36, 0x3a, 0xe5, 0xa0, 0xef, 0x39, 0xc6, 0x00, 0x6b,
+ 0x3a, 0x5d, 0x5d, 0x71, 0x3a, 0xe6, 0xe7, 0x52, 0x3a, 0x8f, 0xd1, 0x80, 0x3a,
+ 0x20, 0x09, 0x8f, 0x3a, 0x83, 0xbe, 0x2f, 0x3a, 0xe3, 0x3d, 0x14, 0x3a, 0x58,
+ 0xec, 0x66, 0x3a, 0xb2, 0x96, 0x6e, 0x3a, 0xc3, 0x27, 0x7f, 0x3a, 0xfa, 0xea,
+ 0x50, 0x3a, 0xbb, 0x93, 0x3f, 0x3a, 0x88, 0xc4, 0xbb, 0x3a, 0x81, 0xa1, 0x16,
+ 0x3a, 0xaa, 0x0d, 0x18, 0x3a, 0xd3, 0x61, 0x51, 0x3a, 0x6a, 0x28, 0x72, 0x3a,
+ 0xa7, 0xa6, 0x4d, 0x3a, 0x01, 0xb4, 0x5b, 0x3a, 0x49, 0x56, 0x2f, 0x3a, 0x39,
+ 0x06, 0x84, 0x3a, 0x90, 0x4e, 0x90, 0x3a, 0xce, 0x41, 0x49, 0x3a, 0x94, 0x2a,
+ 0x40, 0x3a, 0x2e, 0xbc, 0x1f, 0x3a, 0x1e, 0x6d, 0x18, 0x3a, 0xd8, 0x8b, 0x30,
+ 0x3a, 0x48, 0xcd, 0x2b, 0x3a, 0x39, 0xfd, 0x89, 0x3a, 0x9e, 0xbf, 0x36, 0x3a,
+ 0xf0, 0xf7, 0x49, 0x3a, 0x53, 0xa4, 0x03, 0x3a, 0xc8, 0x82, 0x7f, 0x3a, 0x77,
+ 0x2f, 0xa8, 0x3a, 0x9a, 0x23, 0x83, 0x3a, 0x4e, 0x97, 0x22, 0x3a, 0xe9, 0x13,
+ 0x2a, 0x3a, 0x39, 0x76, 0x7c, 0x3a, 0x0b, 0x01, 0xbe, 0x3a, 0x4a, 0x2f, 0x8a,
+ 0x3a, 0x41, 0x24, 0x29, 0x3a, 0x15, 0x51, 0xbb, 0x3a, 0x38, 0x36, 0x1d, 0x3a,
+ 0x1f, 0x00, 0xa9, 0x3a, 0x64, 0x35, 0x95, 0x3a, 0xbd, 0x91, 0x69, 0x3a, 0xdf,
+ 0xcf, 0x32, 0x3a, 0x0e, 0xc4, 0xc3, 0x3a, 0x36, 0xb8, 0x38, 0x3a, 0x95, 0xfc,
+ 0x58, 0x3a, 0xf0, 0xf3, 0xa5, 0x3a, 0x17, 0x58, 0x87, 0x3a, 0xa1, 0xe4, 0x54,
+ 0x3a, 0xaf, 0x41, 0x87, 0x3a, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69,
+ 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32,
+ 0x64, 0x5f, 0x31, 0x33, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77, 0x69, 0x73,
+ 0x65, 0x2f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x2f, 0x72, 0x65, 0x61,
+ 0x64, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0e,
+ 0xcd, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x68, 0x0c, 0x00, 0x00, 0x07, 0x00,
+ 0x00, 0x00, 0x24, 0x0c, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6a, 0xc6, 0xff,
+ 0xff, 0x14, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0e, 0x71, 0x40, 0x3c, 0xe8, 0xda, 0xe7,
+ 0x3b, 0xe4, 0xb9, 0x56, 0x3c, 0x54, 0x6a, 0xf9, 0x3b, 0x67, 0x0c, 0xbf, 0x3b,
+ 0x24, 0x1c, 0x0b, 0x3c, 0x6a, 0x8f, 0xb1, 0x3b, 0xdc, 0x08, 0x24, 0x3c, 0xb2,
+ 0x7c, 0xbe, 0x3b, 0x80, 0xad, 0x24, 0x3c, 0x51, 0xbd, 0xdb, 0x3b, 0xb3, 0xff,
+ 0xc2, 0x3b, 0x86, 0xbc, 0xee, 0x3b, 0x59, 0xcb, 0xed, 0x3b, 0xbb, 0x7f, 0x2c,
+ 0x3c, 0x49, 0xb7, 0x16, 0x3c, 0xc3, 0xea, 0xd4, 0x3b, 0x45, 0xed, 0xbf, 0x3b,
+ 0x83, 0x67, 0x18, 0x3c, 0xa5, 0x1b, 0x0d, 0x3c, 0x08, 0x5c, 0x25, 0x3c, 0x1d,
+ 0x17, 0x08, 0x3c, 0x5f, 0xdc, 0x04, 0x3c, 0xd5, 0x0b, 0x0b, 0x3c, 0xac, 0x9d,
+ 0x16, 0x3c, 0xfb, 0x22, 0xdb, 0x3b, 0xd0, 0xb7, 0xee, 0x3b, 0xa7, 0x22, 0x11,
+ 0x3c, 0x89, 0x0d, 0x20, 0x3c, 0x8f, 0x3f, 0xb2, 0x3b, 0x5b, 0x72, 0xce, 0x3b,
+ 0x76, 0x21, 0xb6, 0x3b, 0x9b, 0x02, 0xc9, 0x3b, 0xdb, 0xa3, 0xeb, 0x3b, 0xd3,
+ 0xde, 0x03, 0x3c, 0x52, 0xde, 0x07, 0x3c, 0x56, 0xd8, 0x30, 0x3c, 0x4b, 0xd2,
+ 0xff, 0x3b, 0x7d, 0x2b, 0x52, 0x3c, 0xca, 0x87, 0x33, 0x3c, 0xf1, 0xe7, 0x0d,
+ 0x3c, 0xc2, 0x0c, 0x01, 0x3c, 0xbc, 0x93, 0xd6, 0x3b, 0x9d, 0xfc, 0xe5, 0x3b,
+ 0x11, 0x90, 0xf2, 0x3b, 0x0f, 0xa2, 0xff, 0x3b, 0xfc, 0x7a, 0x08, 0x3c, 0x34,
+ 0x8b, 0x2d, 0x3c, 0x7b, 0xef, 0xfe, 0x3b, 0xe9, 0x05, 0xe5, 0x3b, 0x35, 0x65,
+ 0xde, 0x3b, 0xcf, 0xc6, 0xd8, 0x3b, 0xc4, 0xe0, 0xa9, 0x3b, 0xb6, 0x87, 0x13,
+ 0x3c, 0x08, 0x17, 0x2f, 0x3c, 0x12, 0x77, 0xdc, 0x3b, 0xf8, 0xfd, 0xdf, 0x3b,
+ 0xed, 0xee, 0xe4, 0x3b, 0x3e, 0xab, 0x23, 0x3c, 0x4c, 0xac, 0xb6, 0x3b, 0xae,
+ 0x28, 0xfc, 0x3b, 0x63, 0x1d, 0x3b, 0x3c, 0x21, 0x45, 0x02, 0x3c, 0x58, 0xca,
+ 0x4f, 0x3c, 0x5f, 0x9b, 0x28, 0x3c, 0xf0, 0x2a, 0x1d, 0x3c, 0x20, 0x20, 0xd9,
+ 0x3b, 0xda, 0xa2, 0x18, 0x3c, 0x5b, 0x63, 0x0b, 0x3c, 0x97, 0x50, 0x0d, 0x3c,
+ 0x77, 0xd5, 0xcb, 0x3b, 0xfb, 0xc4, 0x1c, 0x3c, 0xa6, 0x4a, 0xdd, 0x3b, 0x1d,
+ 0x2b, 0xf4, 0x3b, 0x71, 0xcd, 0x08, 0x3c, 0xd3, 0x09, 0xf9, 0x3b, 0x36, 0x59,
+ 0xc5, 0x3b, 0x51, 0x4a, 0x04, 0x3c, 0x93, 0xca, 0x2f, 0x3c, 0x80, 0x6e, 0xf5,
+ 0x3b, 0xed, 0x35, 0x25, 0x3c, 0x52, 0xc5, 0xdb, 0x3b, 0x0a, 0x34, 0x26, 0x3c,
+ 0x9a, 0x17, 0xeb, 0x3b, 0xd1, 0xac, 0xb9, 0x3b, 0x9b, 0xc2, 0x0a, 0x3c, 0xff,
+ 0x69, 0x2e, 0x3c, 0x57, 0x4d, 0xef, 0x3b, 0x7b, 0x6c, 0x10, 0x3c, 0x6e, 0xe2,
+ 0xe8, 0x3b, 0xde, 0x4e, 0xcb, 0x3b, 0xf6, 0xd9, 0xdc, 0x3b, 0x71, 0xf7, 0x07,
+ 0x3c, 0xe5, 0x80, 0x49, 0x3c, 0xd1, 0xee, 0x0b, 0x3c, 0x09, 0xbc, 0x02, 0x3c,
+ 0x52, 0xeb, 0x0f, 0x3c, 0x42, 0x61, 0x16, 0x3c, 0xf3, 0xd2, 0xcc, 0x3b, 0xec,
+ 0x81, 0xe8, 0x3b, 0xe0, 0x2e, 0x15, 0x3c, 0x0e, 0x34, 0x1f, 0x3c, 0xd3, 0x49,
+ 0xf9, 0x3b, 0x1c, 0x03, 0x01, 0x3c, 0x77, 0x8f, 0xe5, 0x3b, 0xd6, 0x2c, 0x09,
+ 0x3c, 0xe1, 0x22, 0xdd, 0x3b, 0x04, 0xb9, 0xa9, 0x3b, 0x2f, 0x2a, 0x1b, 0x3c,
+ 0x87, 0x2f, 0x32, 0x3c, 0x91, 0xb7, 0xcc, 0x3b, 0x5e, 0x47, 0xf7, 0x3b, 0xbf,
+ 0x49, 0xd2, 0x3b, 0x85, 0x5b, 0x03, 0x3c, 0xd4, 0x9d, 0x9b, 0x3b, 0x6f, 0x85,
+ 0xc9, 0x3b, 0xb4, 0xa9, 0x02, 0x3c, 0x46, 0xe9, 0x18, 0x3c, 0x41, 0x05, 0x52,
+ 0x3c, 0x03, 0x46, 0xe3, 0x3b, 0x80, 0x38, 0x0f, 0x3c, 0x2c, 0x2b, 0x30, 0x3c,
+ 0x43, 0x27, 0xbe, 0x3b, 0x53, 0x47, 0xf1, 0x3b, 0x11, 0xc6, 0x05, 0x3c, 0x6a,
+ 0xaf, 0x07, 0x3c, 0x8f, 0x63, 0x3f, 0x3c, 0xe3, 0x24, 0x1d, 0x3c, 0x52, 0x51,
+ 0x65, 0x3c, 0xc7, 0x39, 0xcf, 0x3b, 0x93, 0x31, 0xd6, 0x3b, 0x15, 0x97, 0x06,
+ 0x3c, 0x6d, 0xc8, 0x0b, 0x3c, 0xa8, 0x32, 0x07, 0x3c, 0xdb, 0x3e, 0xc9, 0x3b,
+ 0xec, 0x7d, 0xb1, 0x3b, 0xc5, 0xee, 0xce, 0x3b, 0x3a, 0xb1, 0x90, 0x3b, 0x99,
+ 0x5a, 0xd2, 0x3b, 0x36, 0xe0, 0x1c, 0x3c, 0xd3, 0xaf, 0x08, 0x3c, 0x00, 0xed,
+ 0x2b, 0x3c, 0x61, 0xd2, 0x6a, 0x3c, 0x43, 0x53, 0xdc, 0x3b, 0xd1, 0x7a, 0x19,
+ 0x3c, 0x14, 0x4d, 0x24, 0x3c, 0xf6, 0xfb, 0x0b, 0x3c, 0x20, 0xc4, 0x10, 0x3c,
+ 0x6e, 0x6c, 0x12, 0x3c, 0xdb, 0x71, 0x1e, 0x3c, 0x3f, 0xad, 0x02, 0x3c, 0x24,
+ 0x6d, 0xa5, 0x3b, 0x0e, 0x74, 0x39, 0x3c, 0xc7, 0xfe, 0x15, 0x3c, 0xe8, 0x69,
+ 0xdc, 0x3b, 0xdd, 0x24, 0x0c, 0x3c, 0x47, 0x57, 0x04, 0x3c, 0xcf, 0xf3, 0xf9,
+ 0x3b, 0x13, 0xfc, 0xef, 0x3b, 0x62, 0xc3, 0x1c, 0x3c, 0x02, 0x45, 0xfa, 0x3b,
+ 0x0d, 0xfd, 0xf1, 0x3b, 0x71, 0x8b, 0x9c, 0x3b, 0xd7, 0xab, 0xc9, 0x3b, 0x28,
+ 0x5d, 0x14, 0x3c, 0xe5, 0x71, 0xe6, 0x3b, 0x3a, 0xa1, 0x1b, 0x3c, 0x49, 0xcc,
+ 0xf8, 0x3b, 0x92, 0xcd, 0xf9, 0x3b, 0x73, 0xec, 0x24, 0x3c, 0x9d, 0xa1, 0x80,
+ 0x3c, 0xc1, 0x94, 0xb5, 0x3b, 0xbf, 0x58, 0x17, 0x3c, 0xe1, 0xcb, 0x05, 0x3c,
+ 0x7d, 0xff, 0xe4, 0x3b, 0xe8, 0x2b, 0x32, 0x3c, 0x0f, 0x99, 0x22, 0x3c, 0x2b,
+ 0xf6, 0xc9, 0x3b, 0x7d, 0xec, 0x44, 0x3c, 0xe6, 0x63, 0x20, 0x3c, 0xf5, 0x7a,
+ 0x17, 0x3c, 0x3d, 0xc2, 0x26, 0x3c, 0x5f, 0xaa, 0xf2, 0x3b, 0x72, 0x06, 0xc5,
+ 0x3b, 0xdb, 0x1d, 0xcd, 0x3b, 0x9c, 0x43, 0x81, 0x3c, 0xac, 0x2f, 0x2a, 0x3c,
+ 0x80, 0xfb, 0x46, 0x3c, 0xfe, 0x9f, 0xe5, 0x3b, 0x74, 0x85, 0x0a, 0x3c, 0x38,
+ 0x1d, 0x16, 0x3c, 0xd1, 0x3e, 0xd8, 0x3b, 0x6a, 0x95, 0xb1, 0x3b, 0xf7, 0x07,
+ 0xf9, 0x3b, 0x82, 0x05, 0xab, 0x3b, 0xaf, 0xe3, 0xda, 0x3b, 0x7a, 0xeb, 0xc9,
+ 0x3b, 0x56, 0x85, 0x14, 0x3c, 0x58, 0x82, 0x39, 0x3c, 0xed, 0xc7, 0x27, 0x3c,
+ 0xfa, 0x26, 0x31, 0x3c, 0xdd, 0x03, 0x0d, 0x3c, 0x82, 0x66, 0xbb, 0x3b, 0xc3,
+ 0xbb, 0xb2, 0x3b, 0xf1, 0xf7, 0x28, 0x3c, 0x71, 0x80, 0xa1, 0x3b, 0x16, 0x27,
+ 0x01, 0x3c, 0xfa, 0x22, 0x04, 0x3c, 0xf8, 0xb6, 0x47, 0x3c, 0x33, 0x46, 0x2b,
+ 0x3c, 0x65, 0xcf, 0xe1, 0x3b, 0x78, 0x79, 0xe7, 0x3b, 0xd3, 0x9a, 0xfa, 0x3b,
+ 0x87, 0x41, 0x00, 0x3c, 0xf2, 0x4e, 0x17, 0x3c, 0x95, 0xa9, 0x29, 0x3c, 0x8f,
+ 0x50, 0x12, 0x3c, 0xa3, 0x7b, 0xe0, 0x3b, 0xf2, 0xc9, 0x02, 0x3c, 0x4b, 0x4f,
+ 0xb2, 0x3b, 0xcc, 0x25, 0x26, 0x3c, 0xfc, 0x07, 0x1a, 0x3c, 0xea, 0x97, 0x05,
+ 0x3c, 0x0a, 0x9b, 0x29, 0x3c, 0xfe, 0x65, 0xf8, 0x3b, 0xac, 0x80, 0x0a, 0x3c,
+ 0xaf, 0x6f, 0xed, 0x3b, 0x86, 0xda, 0xc8, 0x3b, 0xd3, 0xf7, 0x03, 0x3c, 0xf3,
+ 0x08, 0x10, 0x3c, 0x4f, 0x69, 0x53, 0x3c, 0xad, 0xc6, 0x10, 0x3c, 0xf6, 0x7a,
+ 0xe5, 0x3b, 0x23, 0x52, 0x1e, 0x3c, 0xc8, 0xcc, 0x42, 0x3c, 0x1b, 0x64, 0xc9,
+ 0x3b, 0xa6, 0x6c, 0x29, 0x3c, 0xaa, 0x9b, 0xda, 0x3b, 0x69, 0x72, 0x01, 0x3c,
+ 0x59, 0xba, 0xe2, 0x3b, 0xe1, 0x4e, 0x25, 0x3c, 0x79, 0x3b, 0xdb, 0x3b, 0xed,
+ 0x7a, 0xb3, 0x3b, 0xa5, 0x7d, 0xf5, 0x3b, 0x9f, 0xbf, 0x14, 0x3c, 0x7f, 0x81,
+ 0x29, 0x3c, 0x04, 0xff, 0x0b, 0x3c, 0x81, 0x0d, 0x22, 0x3c, 0x91, 0xd2, 0x17,
+ 0x3c, 0xca, 0x1c, 0x19, 0x3c, 0x04, 0x31, 0x1e, 0x3c, 0xc5, 0x42, 0xed, 0x3b,
+ 0x29, 0xb5, 0xaa, 0x3b, 0x88, 0xb8, 0x0e, 0x3c, 0xad, 0x1b, 0xc6, 0x3b, 0xc5,
+ 0x74, 0xff, 0x3b, 0x36, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65,
+ 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f,
+ 0x31, 0x33, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f,
+ 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x5f, 0x77, 0x65, 0x69,
+ 0x67, 0x68, 0x74, 0x73, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x92, 0xd9, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09,
+ 0x58, 0x0c, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x1c, 0x0c, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x14, 0xe0, 0xff, 0xff, 0x0c, 0x08, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0xcc, 0xe1, 0x0f, 0x3b, 0x17, 0x4c, 0xbf, 0x3a, 0x04,
+ 0x03, 0xea, 0x3a, 0xcc, 0xf3, 0xde, 0x3a, 0x10, 0xa3, 0x4e, 0x3b, 0x00, 0x59,
+ 0xe0, 0x3a, 0x5d, 0xde, 0x29, 0x3b, 0x21, 0x80, 0x2c, 0x3b, 0xf8, 0x74, 0xea,
+ 0x3a, 0x02, 0xe3, 0x05, 0x3b, 0xd8, 0xb1, 0x03, 0x3b, 0x77, 0x53, 0xfd, 0x3a,
+ 0x96, 0x88, 0xc9, 0x3a, 0x58, 0x58, 0x0c, 0x3b, 0xfb, 0x10, 0x5b, 0x3b, 0x2a,
+ 0xf4, 0x17, 0x3b, 0x46, 0x1e, 0x26, 0x3b, 0xb2, 0x20, 0xc5, 0x3a, 0x1a, 0x6e,
+ 0x06, 0x3b, 0x2a, 0x57, 0x05, 0x3b, 0x67, 0xf5, 0x2d, 0x3b, 0xd0, 0x2c, 0x02,
+ 0x3b, 0x8a, 0xf5, 0xf7, 0x3a, 0x38, 0x73, 0xdd, 0x3a, 0xa1, 0xb8, 0x0e, 0x3b,
+ 0xea, 0x08, 0x28, 0x3b, 0x48, 0x78, 0x0f, 0x3b, 0x07, 0x63, 0x25, 0x3b, 0x81,
+ 0x6d, 0xe8, 0x3a, 0x25, 0xc8, 0x03, 0x3b, 0x00, 0xb7, 0xb3, 0x3a, 0xaf, 0xa6,
+ 0x1a, 0x3b, 0x7f, 0x56, 0x0c, 0x3b, 0x89, 0x65, 0x07, 0x3b, 0xb5, 0xae, 0xbe,
+ 0x3a, 0xb4, 0xee, 0xfa, 0x3a, 0x1a, 0x88, 0x5f, 0x3b, 0xc9, 0x6f, 0xfa, 0x3a,
+ 0x32, 0xb8, 0xc5, 0x3a, 0x72, 0x60, 0x28, 0x3b, 0xd9, 0x9d, 0x29, 0x3b, 0x83,
+ 0xf8, 0x06, 0x3b, 0x24, 0xb0, 0x03, 0x3b, 0xb8, 0x11, 0xdd, 0x3a, 0xce, 0x34,
+ 0xf2, 0x3a, 0x77, 0x44, 0xfb, 0x3a, 0x2c, 0x3e, 0xe5, 0x3a, 0xe8, 0xbe, 0xe4,
+ 0x3a, 0x8b, 0x3f, 0x36, 0x3b, 0x80, 0x2c, 0x12, 0x3b, 0xb1, 0x7a, 0x09, 0x3b,
+ 0x83, 0x16, 0xc6, 0x3a, 0x47, 0xcc, 0x22, 0x3b, 0xcb, 0xa5, 0xf7, 0x3a, 0xab,
+ 0x7e, 0x0d, 0x3b, 0x22, 0x3e, 0x0c, 0x3b, 0xcd, 0xc2, 0x22, 0x3b, 0x5a, 0x8b,
+ 0xfb, 0x3a, 0x20, 0x95, 0xd0, 0x3a, 0x05, 0x9e, 0x06, 0x3b, 0x23, 0x35, 0xd0,
+ 0x3a, 0xb1, 0x27, 0x21, 0x3b, 0x08, 0x8b, 0xc1, 0x3a, 0x65, 0x3d, 0x0d, 0x3b,
+ 0x1f, 0xf2, 0x2e, 0x3b, 0x7c, 0x69, 0x0f, 0x3b, 0x4d, 0x9d, 0x09, 0x3b, 0xcd,
+ 0x8f, 0x0f, 0x3b, 0xe6, 0x71, 0xc8, 0x3a, 0x9e, 0x28, 0x06, 0x3b, 0x08, 0x80,
+ 0x00, 0x3b, 0x80, 0x15, 0xff, 0x3a, 0xf1, 0x34, 0x47, 0x3b, 0x74, 0x20, 0x06,
+ 0x3b, 0xfe, 0x06, 0x03, 0x3b, 0xb7, 0x7a, 0xd7, 0x3a, 0x6e, 0xe4, 0x13, 0x3b,
+ 0xe9, 0x3e, 0x02, 0x3b, 0x31, 0xd5, 0x24, 0x3b, 0xef, 0x18, 0x9f, 0x3b, 0x1c,
+ 0xc8, 0x46, 0x3b, 0xb3, 0xd3, 0xc8, 0x3a, 0x50, 0xef, 0x1d, 0x3b, 0xcc, 0x59,
+ 0x99, 0x3a, 0xce, 0xc6, 0xdd, 0x3a, 0x4a, 0xde, 0x92, 0x3a, 0xe4, 0x27, 0x1e,
+ 0x3b, 0xef, 0x9f, 0x49, 0x3b, 0xa4, 0xf2, 0xcc, 0x3a, 0x36, 0x46, 0x25, 0x3b,
+ 0x41, 0xb3, 0x23, 0x3b, 0xb6, 0x32, 0x3f, 0x3b, 0xb2, 0xc5, 0x07, 0x3b, 0x26,
+ 0x07, 0x38, 0x3b, 0x43, 0xe2, 0x1c, 0x3b, 0xa7, 0xe0, 0x18, 0x3b, 0x6e, 0xdd,
+ 0xff, 0x3a, 0x2f, 0xb9, 0xff, 0x3a, 0x2d, 0x2f, 0x14, 0x3b, 0x8b, 0xf0, 0x0b,
+ 0x3b, 0x08, 0x83, 0x08, 0x3b, 0x06, 0x5b, 0x0b, 0x3b, 0x94, 0x3a, 0xc8, 0x3a,
+ 0x24, 0x24, 0xe9, 0x3a, 0x9a, 0x87, 0x0f, 0x3b, 0x64, 0xd1, 0x07, 0x3b, 0xdf,
+ 0xe5, 0xda, 0x3a, 0x3a, 0x00, 0xe6, 0x3a, 0xe1, 0x2c, 0x42, 0x3b, 0x6c, 0x54,
+ 0xe0, 0x3a, 0x0b, 0xe9, 0x0e, 0x3b, 0xfd, 0xe2, 0xe6, 0x3a, 0xff, 0xeb, 0x16,
+ 0x3b, 0x57, 0xf1, 0x4d, 0x3b, 0xe4, 0xb3, 0xb0, 0x3a, 0x63, 0x93, 0xf0, 0x3a,
+ 0xaf, 0x4e, 0x48, 0x3b, 0xb4, 0x9a, 0x2c, 0x3b, 0xa1, 0x6f, 0x20, 0x3b, 0x19,
+ 0x20, 0x29, 0x3b, 0x73, 0x22, 0x0a, 0x3b, 0x61, 0xa8, 0x1f, 0x3b, 0x17, 0xb5,
+ 0xd9, 0x3a, 0xa5, 0xd2, 0xee, 0x3a, 0xa7, 0xe1, 0xfe, 0x3a, 0x10, 0xbd, 0xf6,
+ 0x3a, 0xdd, 0x6f, 0xd7, 0x3a, 0x21, 0xd4, 0xf3, 0x3a, 0x19, 0xf4, 0xd9, 0x3a,
+ 0x08, 0x84, 0x0c, 0x3b, 0x92, 0x7c, 0xfc, 0x3a, 0xb5, 0x3a, 0x18, 0x3b, 0x34,
+ 0xe2, 0xea, 0x3a, 0x0e, 0xc1, 0x04, 0x3b, 0xc4, 0xee, 0x56, 0x3b, 0x9c, 0xd0,
+ 0xe8, 0x3a, 0x87, 0x38, 0x05, 0x3b, 0xde, 0x41, 0xb7, 0x3a, 0x0b, 0xba, 0xa9,
+ 0x3a, 0xeb, 0xb4, 0x01, 0x3b, 0x7f, 0x46, 0xe2, 0x3a, 0x03, 0x5e, 0x23, 0x3b,
+ 0x56, 0x83, 0xe6, 0x3a, 0xbd, 0xab, 0x09, 0x3b, 0xe0, 0x54, 0x23, 0x3b, 0xd5,
+ 0xb0, 0x3d, 0x3b, 0xaa, 0xb2, 0x2f, 0x3b, 0x18, 0xcd, 0x2d, 0x3b, 0x26, 0xf2,
+ 0xda, 0x3a, 0x8c, 0x2e, 0x03, 0x3b, 0x79, 0x49, 0x06, 0x3b, 0xf3, 0x28, 0xfa,
+ 0x3a, 0x38, 0x2a, 0x1a, 0x3b, 0x36, 0x54, 0xbe, 0x3a, 0xbb, 0x2b, 0x12, 0x3b,
+ 0xf7, 0xba, 0x4f, 0x3b, 0xed, 0x4b, 0x12, 0x3b, 0x7b, 0xaa, 0x1c, 0x3b, 0xa6,
+ 0xba, 0x1a, 0x3b, 0x6f, 0x3f, 0x11, 0x3b, 0x7e, 0x33, 0x0f, 0x3b, 0xcf, 0x1e,
+ 0x09, 0x3b, 0xf9, 0xac, 0xec, 0x3a, 0x1a, 0x14, 0xb5, 0x3a, 0x41, 0x60, 0xe4,
+ 0x3a, 0x9d, 0x2e, 0x22, 0x3b, 0x22, 0x15, 0x22, 0x3b, 0x61, 0xc5, 0x2c, 0x3b,
+ 0x5f, 0x52, 0xd6, 0x3a, 0x2c, 0x54, 0x28, 0x3b, 0x83, 0x55, 0x4a, 0x3b, 0xce,
+ 0x9d, 0x46, 0x3b, 0x50, 0xc7, 0xfa, 0x3a, 0x57, 0xce, 0xfd, 0x3a, 0x66, 0x9f,
+ 0x28, 0x3b, 0x6b, 0x4d, 0xe2, 0x3a, 0xed, 0x62, 0x0e, 0x3b, 0x0a, 0xec, 0xf5,
+ 0x3a, 0x91, 0xb2, 0x08, 0x3b, 0x71, 0xf2, 0x25, 0x3b, 0x6f, 0xc9, 0x06, 0x3b,
+ 0x55, 0x88, 0x09, 0x3b, 0x81, 0xd6, 0x52, 0x3b, 0x97, 0xa1, 0xf7, 0x3a, 0x63,
+ 0x44, 0xf0, 0x3a, 0x94, 0x6b, 0xf8, 0x3a, 0xde, 0x51, 0x01, 0x3b, 0x22, 0xef,
+ 0xf4, 0x3a, 0x2d, 0x9c, 0x0b, 0x3b, 0x08, 0xb3, 0x39, 0x3b, 0xb9, 0x83, 0xff,
+ 0x3a, 0x55, 0x0d, 0xfb, 0x3a, 0x8c, 0x07, 0x11, 0x3b, 0xff, 0x16, 0xc1, 0x3a,
+ 0x0d, 0xee, 0x06, 0x3b, 0xb2, 0x17, 0x08, 0x3b, 0x31, 0x4b, 0xfc, 0x3a, 0xda,
+ 0x5e, 0x2f, 0x3b, 0x60, 0x7f, 0x24, 0x3b, 0x3d, 0xbb, 0x2c, 0x3b, 0xe3, 0xa9,
+ 0x1b, 0x3b, 0x99, 0x25, 0x16, 0x3b, 0x32, 0x5c, 0x29, 0x3b, 0xe2, 0x6c, 0x36,
+ 0x3b, 0x1e, 0x20, 0xc0, 0x3a, 0x74, 0xbd, 0x32, 0x3b, 0x83, 0xdf, 0xf6, 0x3a,
+ 0xf2, 0x4d, 0x1d, 0x3b, 0xfd, 0xe6, 0x1d, 0x3b, 0xc8, 0x3a, 0xed, 0x3a, 0x85,
+ 0x4f, 0x20, 0x3b, 0x49, 0x58, 0xd3, 0x3a, 0xc5, 0x4e, 0x06, 0x3b, 0x36, 0xee,
+ 0x28, 0x3b, 0x6f, 0xca, 0xdb, 0x3a, 0xe4, 0x35, 0x09, 0x3b, 0x1f, 0xbb, 0x28,
+ 0x3b, 0x4c, 0x89, 0x00, 0x3b, 0x0c, 0x8d, 0x0f, 0x3b, 0x8e, 0x74, 0x13, 0x3b,
+ 0x5b, 0xf4, 0x2e, 0x3b, 0x93, 0xe0, 0x4b, 0x3b, 0x14, 0xc6, 0x09, 0x3b, 0x07,
+ 0xf0, 0x0a, 0x3b, 0x3c, 0x54, 0x1f, 0x3b, 0xda, 0x01, 0xbb, 0x3a, 0x59, 0x9c,
+ 0xe8, 0x3a, 0xc7, 0xea, 0x0b, 0x3b, 0x15, 0x88, 0xf2, 0x3a, 0xbc, 0xc3, 0xd8,
+ 0x3a, 0xcc, 0xd6, 0x14, 0x3b, 0xca, 0x60, 0x34, 0x3b, 0xf9, 0x7f, 0x00, 0x3b,
+ 0x31, 0xf8, 0x07, 0x3b, 0x2d, 0xac, 0x26, 0x3b, 0x02, 0x10, 0xda, 0x3a, 0x58,
+ 0xdc, 0xda, 0x3a, 0x65, 0x3b, 0x05, 0x3b, 0x73, 0xa1, 0x21, 0x3b, 0x2b, 0xb1,
+ 0x0d, 0x3b, 0xf2, 0xf7, 0xe2, 0x3a, 0x82, 0xc1, 0xc3, 0x3a, 0xc7, 0xf2, 0x10,
+ 0x3b, 0x42, 0xf2, 0x47, 0x3b, 0x33, 0x3b, 0xf1, 0x3a, 0x76, 0x6e, 0x20, 0x3b,
+ 0x97, 0x5b, 0x07, 0x3b, 0xe8, 0x6b, 0x11, 0x3b, 0xd3, 0xdb, 0x21, 0x3b, 0x8b,
+ 0x09, 0x38, 0x3b, 0xd7, 0x22, 0x0d, 0x3b, 0x39, 0xa9, 0xfe, 0x3a, 0x1b, 0xf3,
+ 0xe6, 0x3a, 0x15, 0x3e, 0x06, 0x3b, 0x21, 0xeb, 0x4a, 0x3b, 0xf3, 0x97, 0x43,
+ 0x3b, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65,
+ 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x31, 0x32,
+ 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x77, 0x65,
+ 0x69, 0x67, 0x68, 0x74, 0x73, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x06, 0xe6, 0xff, 0xff, 0x00,
+ 0x00, 0x00, 0x09, 0x68, 0x06, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x24, 0x06,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x62, 0xdf, 0xff, 0xff, 0x14, 0x04, 0x00,
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x8d, 0xb0, 0x3b, 0xf3, 0x87, 0x95, 0x3b,
+ 0xa0, 0x61, 0x06, 0x3c, 0xc6, 0x88, 0xd8, 0x3b, 0xb8, 0x1d, 0x17, 0x3c, 0x2e,
+ 0x80, 0x8f, 0x3b, 0x95, 0xd1, 0xac, 0x3b, 0x02, 0x8b, 0xdb, 0x3b, 0x0e, 0xd5,
+ 0x96, 0x3b, 0x56, 0x45, 0x0b, 0x3c, 0x29, 0xf1, 0xbf, 0x3b, 0x33, 0x80, 0x9e,
+ 0x3b, 0x84, 0xdd, 0xd8, 0x3b, 0x22, 0xca, 0xb1, 0x3b, 0xf4, 0xd5, 0xa7, 0x3b,
+ 0x93, 0xee, 0xcd, 0x3b, 0x77, 0xa4, 0x18, 0x3c, 0x65, 0xb4, 0xe5, 0x3b, 0x55,
+ 0x8b, 0xb9, 0x3b, 0x5a, 0x00, 0xac, 0x3b, 0x00, 0x49, 0xb3, 0x3b, 0x1c, 0x7b,
+ 0x9a, 0x3b, 0xd6, 0x10, 0xdc, 0x3b, 0x6d, 0xe7, 0xb8, 0x3b, 0xf0, 0x27, 0x89,
+ 0x3b, 0xbb, 0x44, 0xe0, 0x3b, 0x85, 0xd8, 0xbc, 0x3b, 0xbc, 0xf9, 0x92, 0x3b,
+ 0x8e, 0xfa, 0xed, 0x3b, 0x55, 0x2b, 0xd2, 0x3b, 0x37, 0xfc, 0xd1, 0x3b, 0x1b,
+ 0xfe, 0xfc, 0x3b, 0x51, 0x9b, 0xda, 0x3b, 0xe7, 0xb1, 0xf2, 0x3b, 0x15, 0x64,
+ 0xb1, 0x3b, 0x84, 0x34, 0xee, 0x3b, 0x4e, 0x10, 0xe6, 0x3b, 0xc4, 0x61, 0x7d,
+ 0x3b, 0x78, 0x42, 0x91, 0x3b, 0x45, 0xd0, 0x13, 0x3c, 0xe8, 0x63, 0x83, 0x3b,
+ 0x9d, 0x6f, 0x22, 0x3c, 0x8d, 0xd6, 0x03, 0x3c, 0xfe, 0x27, 0xc2, 0x3b, 0xda,
+ 0x67, 0xa9, 0x3b, 0xe9, 0xef, 0xc1, 0x3b, 0xab, 0x9b, 0x9d, 0x3b, 0x64, 0xad,
+ 0x0c, 0x3c, 0x62, 0x44, 0xa6, 0x3b, 0x53, 0x87, 0xa7, 0x3b, 0x4d, 0xa9, 0xa1,
+ 0x3b, 0x33, 0x38, 0x92, 0x3b, 0x1a, 0x0d, 0xe8, 0x3b, 0xda, 0x1d, 0xff, 0x3b,
+ 0x69, 0x33, 0xe1, 0x3b, 0x0d, 0xed, 0xf5, 0x3b, 0xa2, 0x82, 0x93, 0x3b, 0x59,
+ 0x7d, 0xdf, 0x3b, 0x3a, 0x5d, 0x80, 0x3b, 0x20, 0x50, 0xb1, 0x3b, 0xee, 0x64,
+ 0xec, 0x3b, 0xeb, 0x2b, 0xf1, 0x3b, 0xa0, 0x96, 0xc4, 0x3b, 0x29, 0xdc, 0x88,
+ 0x3b, 0x92, 0x9b, 0xaf, 0x3b, 0xb9, 0x15, 0xe6, 0x3b, 0xad, 0x85, 0x95, 0x3b,
+ 0xb2, 0x3a, 0xc9, 0x3b, 0xcd, 0x48, 0xc7, 0x3b, 0x47, 0x5b, 0x08, 0x3c, 0x8d,
+ 0x63, 0xbe, 0x3b, 0xa4, 0xc0, 0x8d, 0x3b, 0x91, 0xf7, 0xae, 0x3b, 0x98, 0xdd,
+ 0x92, 0x3b, 0x2c, 0xfe, 0xb5, 0x3b, 0x03, 0x40, 0xad, 0x3b, 0x76, 0x64, 0x73,
+ 0x3b, 0xac, 0x52, 0xae, 0x3b, 0x06, 0xcc, 0xd2, 0x3b, 0x01, 0x7b, 0xa0, 0x3b,
+ 0xac, 0x67, 0xd4, 0x3b, 0x2d, 0x3a, 0xfc, 0x3b, 0x81, 0x8f, 0xad, 0x3b, 0xae,
+ 0xc9, 0xcb, 0x3b, 0xc7, 0xe3, 0xf3, 0x3b, 0xbf, 0xce, 0xda, 0x3b, 0xb6, 0x27,
+ 0xe2, 0x3b, 0x05, 0xf9, 0xb6, 0x3b, 0x12, 0xd2, 0x15, 0x3c, 0x93, 0xbc, 0xe6,
+ 0x3b, 0x5e, 0x19, 0x6e, 0x3b, 0x4e, 0x57, 0xe9, 0x3b, 0x5b, 0x8e, 0x12, 0x3c,
+ 0x32, 0x9f, 0xb8, 0x3b, 0x10, 0x17, 0xbd, 0x3b, 0xde, 0xa4, 0x0b, 0x3c, 0x14,
+ 0xda, 0xa2, 0x3b, 0x5f, 0x00, 0xc5, 0x3b, 0x8f, 0xd5, 0xcb, 0x3b, 0xff, 0xb6,
+ 0xa1, 0x3b, 0x97, 0x44, 0x09, 0x3c, 0x7e, 0x30, 0x18, 0x3c, 0x52, 0xa2, 0x22,
+ 0x3c, 0xcd, 0xfe, 0xa5, 0x3b, 0x30, 0xec, 0xd4, 0x3b, 0xfc, 0xfa, 0xa5, 0x3b,
+ 0xab, 0x8d, 0x08, 0x3c, 0x4e, 0xe2, 0xc5, 0x3b, 0x83, 0x80, 0xb6, 0x3b, 0xbf,
+ 0xbc, 0x30, 0x3c, 0x53, 0xc1, 0xf5, 0x3b, 0x13, 0x74, 0xa2, 0x3b, 0x7a, 0x61,
+ 0xcb, 0x3b, 0xf9, 0xc9, 0xbc, 0x3b, 0x84, 0x85, 0xc4, 0x3b, 0x95, 0x6e, 0xc7,
+ 0x3b, 0xf0, 0x90, 0x13, 0x3c, 0xcc, 0x3e, 0xcf, 0x3b, 0xb6, 0xd3, 0x88, 0x3b,
+ 0x08, 0x19, 0x9b, 0x3b, 0xb5, 0x8b, 0xdc, 0x3b, 0xae, 0xe0, 0x80, 0x3b, 0xdf,
+ 0x38, 0xb4, 0x3b, 0xd6, 0x74, 0x22, 0x3c, 0xb8, 0xec, 0x4b, 0x3b, 0xb0, 0x1f,
+ 0xa9, 0x3b, 0xe2, 0x3e, 0x0c, 0x3c, 0x3a, 0xe1, 0x05, 0x3c, 0x36, 0x00, 0x00,
+ 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f,
+ 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x31, 0x32, 0x5f, 0x64, 0x65, 0x70,
+ 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77,
+ 0x69, 0x73, 0x65, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x2f, 0x72,
+ 0x65, 0x61, 0x64, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x8a,
+ 0xec, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x58, 0x06, 0x00, 0x00, 0x0c, 0x00,
+ 0x00, 0x00, 0x1c, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0c, 0xf3, 0xff,
+ 0xff, 0x0c, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
+ 0x00, 0xd7, 0x8a, 0x53, 0x3b, 0x38, 0xdb, 0x39, 0x3b, 0x26, 0x99, 0x4d, 0x3b,
+ 0x6c, 0xd5, 0x12, 0x3b, 0xcc, 0x46, 0x25, 0x3b, 0x4b, 0x9a, 0xe8, 0x3a, 0xd1,
+ 0xff, 0x27, 0x3b, 0xc5, 0x60, 0x07, 0x3b, 0x66, 0xaa, 0x0e, 0x3b, 0x2a, 0x4d,
+ 0x06, 0x3b, 0x7e, 0x98, 0x08, 0x3b, 0xd2, 0x44, 0x29, 0x3b, 0x8c, 0x7b, 0x39,
+ 0x3b, 0xf6, 0xdc, 0x01, 0x3b, 0x1f, 0xea, 0x21, 0x3b, 0xd0, 0x34, 0x02, 0x3b,
+ 0x98, 0x0b, 0x59, 0x3b, 0x6c, 0x69, 0x35, 0x3b, 0x68, 0x68, 0xfc, 0x3a, 0x47,
+ 0x6b, 0x1b, 0x3b, 0x45, 0x2b, 0x20, 0x3b, 0xb1, 0x7a, 0x01, 0x3b, 0x95, 0x2e,
+ 0x0f, 0x3b, 0x66, 0x5b, 0x27, 0x3b, 0xe6, 0x6e, 0x4e, 0x3b, 0x5e, 0xac, 0x0d,
+ 0x3b, 0x30, 0x90, 0x22, 0x3b, 0x54, 0x9e, 0x2d, 0x3b, 0xc8, 0x19, 0xea, 0x3a,
+ 0x8e, 0x3c, 0x23, 0x3b, 0x65, 0x70, 0x25, 0x3b, 0xf4, 0x79, 0x14, 0x3b, 0x29,
+ 0x49, 0x13, 0x3b, 0xfc, 0x2a, 0x40, 0x3b, 0x5c, 0x34, 0x3b, 0x3b, 0x2a, 0x52,
+ 0xf8, 0x3a, 0x6e, 0x51, 0x18, 0x3b, 0x53, 0x24, 0xf6, 0x3a, 0x33, 0x76, 0x24,
+ 0x3b, 0x60, 0xdf, 0x0f, 0x3b, 0xc5, 0x27, 0x0d, 0x3b, 0xfb, 0x7e, 0x37, 0x3b,
+ 0xa8, 0x98, 0x10, 0x3b, 0x37, 0xf8, 0x30, 0x3b, 0x0b, 0xda, 0x61, 0x3b, 0x7d,
+ 0x9b, 0x4a, 0x3b, 0xa1, 0xd6, 0x0e, 0x3b, 0x33, 0x87, 0x27, 0x3b, 0x23, 0x9d,
+ 0x40, 0x3b, 0x39, 0xec, 0x20, 0x3b, 0xef, 0xfa, 0x06, 0x3b, 0x9c, 0x98, 0x0d,
+ 0x3b, 0x47, 0x53, 0x03, 0x3b, 0x99, 0x43, 0x1d, 0x3b, 0x08, 0xe1, 0x01, 0x3b,
+ 0x70, 0x34, 0x14, 0x3b, 0xae, 0xfd, 0x61, 0x3b, 0xeb, 0xc0, 0x0e, 0x3b, 0x12,
+ 0x1f, 0x21, 0x3b, 0xf5, 0xba, 0x03, 0x3b, 0x19, 0xb4, 0x17, 0x3b, 0x36, 0x92,
+ 0x2d, 0x3b, 0x4f, 0xbd, 0x36, 0x3b, 0xb0, 0x11, 0x20, 0x3b, 0x62, 0x00, 0x52,
+ 0x3b, 0x8e, 0x5e, 0x1c, 0x3b, 0x9a, 0x5c, 0x20, 0x3b, 0x2f, 0xc8, 0x1a, 0x3b,
+ 0x86, 0xf1, 0x2c, 0x3b, 0x26, 0x6d, 0x13, 0x3b, 0x2a, 0x7a, 0xfa, 0x3a, 0xa6,
+ 0x9d, 0x10, 0x3b, 0xb7, 0xd3, 0x0e, 0x3b, 0xa1, 0xd2, 0x3e, 0x3b, 0xe1, 0x4e,
+ 0x0b, 0x3b, 0xa4, 0x34, 0x1c, 0x3b, 0x23, 0x67, 0xe9, 0x3a, 0x8c, 0xb7, 0xef,
+ 0x3a, 0x58, 0x7c, 0x30, 0x3b, 0x75, 0x25, 0x22, 0x3b, 0xce, 0x58, 0x81, 0x3b,
+ 0x37, 0x05, 0x77, 0x3b, 0xa9, 0xc4, 0x22, 0x3b, 0xfd, 0x03, 0x32, 0x3b, 0x64,
+ 0xd1, 0x06, 0x3b, 0xb2, 0x45, 0x11, 0x3b, 0x69, 0xf3, 0xf1, 0x3a, 0xb1, 0xda,
+ 0x02, 0x3b, 0x36, 0xa0, 0x42, 0x3b, 0x2c, 0x4e, 0x45, 0x3b, 0x04, 0xbf, 0x0c,
+ 0x3b, 0x8e, 0x3a, 0x46, 0x3b, 0x07, 0xad, 0x3e, 0x3b, 0x82, 0xcf, 0x06, 0x3b,
+ 0xdc, 0xa6, 0xe6, 0x3a, 0x11, 0xf5, 0x10, 0x3b, 0x09, 0xef, 0xf3, 0x3a, 0x6d,
+ 0x02, 0x11, 0x3b, 0xcf, 0x6f, 0xff, 0x3a, 0x0a, 0xb6, 0x6e, 0x3b, 0x01, 0x9d,
+ 0x25, 0x3b, 0x2e, 0x1a, 0x25, 0x3b, 0xc7, 0xa8, 0x34, 0x3b, 0x9e, 0x30, 0x24,
+ 0x3b, 0xe5, 0x89, 0xe8, 0x3a, 0x9e, 0x0e, 0x3b, 0x3b, 0xcf, 0x03, 0x0d, 0x3b,
+ 0xcf, 0xa9, 0x37, 0x3b, 0xde, 0xee, 0x1e, 0x3b, 0x00, 0x9d, 0x08, 0x3b, 0x9a,
+ 0xc3, 0x30, 0x3b, 0xcd, 0xb2, 0x14, 0x3b, 0x32, 0xbe, 0x29, 0x3b, 0x1e, 0x0a,
+ 0x0e, 0x3b, 0xb9, 0x86, 0x1c, 0x3b, 0x69, 0x25, 0x1d, 0x3b, 0x3d, 0xf6, 0x33,
+ 0x3b, 0x41, 0x5e, 0x04, 0x3b, 0xb0, 0x40, 0x35, 0x3b, 0xa8, 0x47, 0x16, 0x3b,
+ 0xfa, 0x67, 0x22, 0x3b, 0x0d, 0x6a, 0x01, 0x3b, 0x9d, 0xdb, 0x0d, 0x3b, 0x71,
+ 0xc1, 0x45, 0x3b, 0xe3, 0xb3, 0x05, 0x3b, 0x50, 0xf0, 0x23, 0x3b, 0xe0, 0xfa,
+ 0x4c, 0x3b, 0xb7, 0xaa, 0x1d, 0x3b, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62,
+ 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76,
+ 0x32, 0x64, 0x5f, 0x31, 0x31, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77, 0x69,
+ 0x73, 0x65, 0x2f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x2f, 0x72, 0x65,
+ 0x61, 0x64, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+ 0xfe, 0xf2, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x64, 0x06, 0x00, 0x00, 0x0d,
+ 0x00, 0x00, 0x00, 0x20, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5a, 0xec,
+ 0xff, 0xff, 0x10, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x60, 0xb4, 0xc7, 0x3b, 0xf2, 0x84, 0xdd,
+ 0x3b, 0x43, 0xf1, 0x08, 0x3c, 0x44, 0xaf, 0xbc, 0x3b, 0x85, 0x80, 0xa0, 0x3b,
+ 0xa1, 0xa5, 0xa5, 0x3b, 0xa5, 0x21, 0xd8, 0x3b, 0x03, 0xc9, 0x0a, 0x3c, 0x16,
+ 0x3b, 0xe2, 0x3b, 0x28, 0xd7, 0x17, 0x3c, 0xd1, 0x70, 0x14, 0x3c, 0x68, 0x0a,
+ 0xc2, 0x3b, 0x88, 0xea, 0x03, 0x3c, 0x4b, 0xd8, 0x27, 0x3c, 0xf2, 0x2b, 0xdb,
+ 0x3b, 0x1b, 0x19, 0x93, 0x3b, 0x08, 0x5a, 0xfe, 0x3b, 0x1d, 0x52, 0xa1, 0x3b,
+ 0xa4, 0x8d, 0xa9, 0x3b, 0x15, 0x51, 0x38, 0x3b, 0xe8, 0xaf, 0xb7, 0x3b, 0x20,
+ 0xf5, 0xe2, 0x3b, 0xad, 0xb9, 0x5c, 0x3b, 0xd7, 0x58, 0xc7, 0x3b, 0x4d, 0xf2,
+ 0xdc, 0x3b, 0x09, 0x90, 0xd8, 0x3b, 0xa0, 0x21, 0x26, 0x3c, 0xa6, 0x94, 0x2a,
+ 0x3c, 0x34, 0xde, 0x15, 0x3c, 0x96, 0xa8, 0x0e, 0x3c, 0xec, 0xf1, 0x62, 0x3b,
+ 0x86, 0x75, 0xef, 0x3b, 0xd2, 0x3d, 0xf7, 0x3b, 0x06, 0xfb, 0xfb, 0x3b, 0xff,
+ 0xaf, 0xa9, 0x3b, 0x84, 0xaf, 0xee, 0x3b, 0xed, 0x73, 0x92, 0x3b, 0x26, 0xd9,
+ 0xc9, 0x3b, 0xf0, 0xe3, 0x4d, 0x3c, 0x54, 0x6d, 0xae, 0x3b, 0x95, 0xb2, 0xf4,
+ 0x3b, 0x4c, 0x06, 0x10, 0x3c, 0xc9, 0x2c, 0x26, 0x3c, 0xf4, 0x94, 0xac, 0x3b,
+ 0xb6, 0x91, 0x8f, 0x3b, 0xb3, 0x7f, 0x96, 0x3b, 0xd8, 0x26, 0xda, 0x3b, 0x22,
+ 0xf7, 0xd5, 0x3b, 0x2f, 0x36, 0xf2, 0x3b, 0x4f, 0x35, 0xae, 0x3b, 0xbd, 0xf4,
+ 0x9f, 0x3b, 0x57, 0xea, 0xeb, 0x3b, 0x0f, 0xd9, 0xc7, 0x3b, 0xa2, 0xdb, 0xf5,
+ 0x3b, 0x53, 0x20, 0xce, 0x3b, 0x79, 0x60, 0x31, 0x3c, 0x20, 0x91, 0xb4, 0x3b,
+ 0xbc, 0x23, 0x15, 0x3c, 0x83, 0x1a, 0xf2, 0x3b, 0x09, 0x71, 0xc9, 0x3b, 0xf6,
+ 0x17, 0xb0, 0x3b, 0x9d, 0xc6, 0xc5, 0x3b, 0x71, 0x97, 0x22, 0x3c, 0x2c, 0x9e,
+ 0xf8, 0x3b, 0xc9, 0x79, 0x15, 0x3c, 0x0a, 0xfe, 0xaa, 0x3b, 0x83, 0x58, 0xa0,
+ 0x3b, 0xbc, 0x63, 0x9c, 0x3b, 0x43, 0x51, 0xa5, 0x3b, 0x33, 0xe5, 0xe2, 0x3b,
+ 0x3f, 0xb3, 0xd8, 0x3b, 0xe6, 0xe2, 0xbf, 0x3b, 0xce, 0xed, 0xe9, 0x3b, 0xdb,
+ 0x3f, 0xa1, 0x3b, 0xec, 0x47, 0xc7, 0x3b, 0x9d, 0xa7, 0xc5, 0x3b, 0x2e, 0xab,
+ 0x03, 0x3c, 0xfd, 0x97, 0xf0, 0x3b, 0x61, 0x09, 0x08, 0x3c, 0x4c, 0xe2, 0xfb,
+ 0x3b, 0x9b, 0x41, 0xa7, 0x3b, 0xbb, 0xb0, 0x9f, 0x3b, 0x6c, 0xb1, 0xd0, 0x3b,
+ 0x35, 0x03, 0x71, 0x3b, 0x63, 0x93, 0xc3, 0x3b, 0xbe, 0xfd, 0xda, 0x3b, 0x99,
+ 0xfe, 0xfa, 0x3b, 0xa3, 0x6f, 0x36, 0x3c, 0xf2, 0x06, 0xec, 0x3b, 0x05, 0xbd,
+ 0x92, 0x3b, 0x13, 0xea, 0x15, 0x3c, 0xbf, 0xa8, 0xd0, 0x3b, 0xf5, 0x2f, 0xf8,
+ 0x3b, 0xb9, 0xd4, 0x2a, 0x3c, 0x3d, 0x35, 0x1f, 0x3c, 0x24, 0xb2, 0x2c, 0x3c,
+ 0x49, 0x7c, 0x1a, 0x3c, 0x55, 0x86, 0xdf, 0x3b, 0xd6, 0xb4, 0x98, 0x3b, 0x78,
+ 0x8e, 0xd0, 0x3b, 0xa1, 0x51, 0xe4, 0x3b, 0xa4, 0x60, 0x92, 0x3b, 0x8e, 0x86,
+ 0x48, 0x3b, 0xdc, 0xc6, 0xe7, 0x3b, 0x21, 0xaf, 0xeb, 0x3b, 0xfb, 0x7b, 0x20,
+ 0x3c, 0xf6, 0x56, 0xf9, 0x3b, 0x14, 0xbc, 0x29, 0x3c, 0x1e, 0xf5, 0xca, 0x3b,
+ 0x33, 0x5f, 0x14, 0x3c, 0xe1, 0x61, 0x8a, 0x3b, 0x37, 0xdf, 0x9f, 0x3b, 0x5b,
+ 0x1b, 0xff, 0x3b, 0x0b, 0x7f, 0xbc, 0x3b, 0x9d, 0xcd, 0xc8, 0x3b, 0xe2, 0xe4,
+ 0xdf, 0x3b, 0x03, 0x51, 0xc9, 0x3b, 0xf8, 0x18, 0xc1, 0x3b, 0x70, 0xe5, 0x20,
+ 0x3c, 0x96, 0xfb, 0xf6, 0x3b, 0x78, 0x83, 0xf1, 0x3b, 0xe9, 0x4e, 0xcd, 0x3b,
+ 0xd1, 0x25, 0xb4, 0x3b, 0x38, 0xa5, 0xe8, 0x3b, 0xc7, 0x84, 0x12, 0x3c, 0xbd,
+ 0xb1, 0x20, 0x3c, 0x2f, 0xa2, 0x35, 0x3c, 0x03, 0xee, 0x0d, 0x3c, 0x36, 0x00,
+ 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31,
+ 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32, 0x64, 0x5f, 0x31, 0x31, 0x5f, 0x64, 0x65,
+ 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x2f, 0x64, 0x65, 0x70, 0x74, 0x68,
+ 0x77, 0x69, 0x73, 0x65, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x2f,
+ 0x72, 0x65, 0x61, 0x64, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+ 0x7e, 0xf9, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0x64, 0x06, 0x00, 0x00, 0x0e,
+ 0x00, 0x00, 0x00, 0x28, 0x06, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0c, 0x00,
+ 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x00,
+ 0x00, 0x0c, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
+ 0x00, 0xf0, 0x76, 0x2c, 0x3b, 0x4c, 0x26, 0x1e, 0x3b, 0x2a, 0x85, 0x1d, 0x3b,
+ 0xa7, 0x53, 0x12, 0x3b, 0xce, 0xf3, 0x0e, 0x3b, 0x0f, 0x15, 0x04, 0x3b, 0xce,
+ 0x92, 0xfe, 0x3a, 0x9b, 0xe7, 0xe1, 0x3a, 0x17, 0xcf, 0x1a, 0x3b, 0xeb, 0x2f,
+ 0x31, 0x3b, 0x15, 0xe1, 0x66, 0x3b, 0x5a, 0x04, 0x38, 0x3b, 0xd1, 0x2f, 0x19,
+ 0x3b, 0xb2, 0xf8, 0x1b, 0x3b, 0x63, 0x78, 0x0e, 0x3b, 0x80, 0x63, 0x41, 0x3b,
+ 0x7e, 0x98, 0x3d, 0x3b, 0xeb, 0x0f, 0x13, 0x3b, 0x31, 0x60, 0x2d, 0x3b, 0xe1,
+ 0x7f, 0x34, 0x3b, 0x89, 0xa6, 0x2d, 0x3b, 0x18, 0x1e, 0x57, 0x3b, 0x35, 0xcc,
+ 0x1c, 0x3b, 0x16, 0x67, 0x29, 0x3b, 0xa7, 0x7d, 0x26, 0x3b, 0x3a, 0xee, 0x22,
+ 0x3b, 0x08, 0x08, 0x62, 0x3b, 0x04, 0xbd, 0x19, 0x3b, 0x44, 0x97, 0x40, 0x3b,
+ 0x27, 0xea, 0x26, 0x3b, 0x6a, 0xdd, 0x0d, 0x3b, 0xe4, 0x56, 0xfb, 0x3a, 0x4a,
+ 0x5a, 0x1f, 0x3b, 0x5a, 0x92, 0xff, 0x3a, 0x1c, 0x45, 0x32, 0x3b, 0x3e, 0x91,
+ 0x28, 0x3b, 0x93, 0x74, 0x5c, 0x3b, 0x1c, 0x54, 0x27, 0x3b, 0xd9, 0xb5, 0x1f,
+ 0x3b, 0x85, 0x55, 0x18, 0x3b, 0x6f, 0x0e, 0x2f, 0x3b, 0xae, 0x7f, 0x16, 0x3b,
+ 0x6e, 0x3d, 0x1c, 0x3b, 0xfc, 0x0d, 0xf7, 0x3a, 0x82, 0x18, 0x1b, 0x3b, 0xc5,
+ 0x09, 0x03, 0x3b, 0xaf, 0xb4, 0x15, 0x3b, 0xa9, 0xee, 0x46, 0x3b, 0x65, 0x6d,
+ 0x14, 0x3b, 0x29, 0x75, 0x51, 0x3b, 0x0b, 0xf8, 0x1c, 0x3b, 0x61, 0xcd, 0x5c,
+ 0x3b, 0x05, 0x33, 0x2a, 0x3b, 0xb7, 0x1c, 0x07, 0x3b, 0x26, 0x72, 0x34, 0x3b,
+ 0x59, 0xe7, 0x3f, 0x3b, 0xd6, 0xe8, 0x21, 0x3b, 0x8a, 0x3a, 0x3d, 0x3b, 0xbe,
+ 0xf2, 0x1b, 0x3b, 0x76, 0xb4, 0x06, 0x3b, 0xea, 0x1b, 0xfa, 0x3a, 0xeb, 0x0f,
+ 0xf7, 0x3a, 0x2a, 0x56, 0x2b, 0x3b, 0xca, 0xc0, 0x20, 0x3b, 0x15, 0x3c, 0x45,
+ 0x3b, 0x98, 0xbe, 0x1d, 0x3b, 0x8c, 0x8d, 0x20, 0x3b, 0xe2, 0x44, 0x58, 0x3b,
+ 0x05, 0x3b, 0x68, 0x3b, 0x9f, 0xf7, 0x8a, 0x3b, 0xe2, 0xf0, 0xfd, 0x3a, 0x2b,
+ 0xef, 0xfa, 0x3a, 0x8e, 0xa7, 0x1d, 0x3b, 0xe6, 0xc2, 0xea, 0x3a, 0xf1, 0x17,
+ 0x30, 0x3b, 0x55, 0x96, 0x1d, 0x3b, 0xf4, 0xfe, 0x07, 0x3b, 0x39, 0xb3, 0xed,
+ 0x3a, 0x2b, 0x40, 0xfe, 0x3a, 0x84, 0xa2, 0x18, 0x3b, 0xfc, 0x29, 0x22, 0x3b,
+ 0xc9, 0xae, 0x11, 0x3b, 0xa5, 0x0e, 0x2b, 0x3b, 0x2b, 0x0c, 0x07, 0x3b, 0xf0,
+ 0x3a, 0x49, 0x3b, 0xdc, 0x3e, 0x47, 0x3b, 0x35, 0x81, 0x1b, 0x3b, 0x9d, 0x0c,
+ 0xf2, 0x3a, 0x95, 0xae, 0x1b, 0x3b, 0xe2, 0x10, 0x18, 0x3b, 0x85, 0x68, 0x1d,
+ 0x3b, 0x74, 0x46, 0x52, 0x3b, 0x99, 0xbb, 0x3a, 0x3b, 0x28, 0xf7, 0x44, 0x3b,
+ 0xb7, 0xfe, 0x5c, 0x3b, 0x21, 0x04, 0x2f, 0x3b, 0x3b, 0x3b, 0x38, 0x3b, 0x92,
+ 0x09, 0x22, 0x3b, 0xbd, 0xa0, 0x08, 0x3b, 0x60, 0xda, 0x01, 0x3b, 0xcd, 0xce,
+ 0xe3, 0x3a, 0x59, 0x24, 0x36, 0x3b, 0x0a, 0x66, 0xff, 0x3a, 0xd4, 0x6e, 0x07,
+ 0x3b, 0xb9, 0x61, 0x17, 0x3b, 0x38, 0xf5, 0x24, 0x3b, 0xd1, 0x3e, 0x4a, 0x3b,
+ 0x77, 0x2d, 0x19, 0x3b, 0x59, 0x7f, 0x1b, 0x3b, 0xb8, 0x29, 0x0a, 0x3b, 0xfb,
+ 0xa8, 0x0c, 0x3b, 0xdb, 0xa3, 0x16, 0x3b, 0x33, 0x17, 0x30, 0x3b, 0x9c, 0x16,
+ 0x51, 0x3b, 0x91, 0x1b, 0x3c, 0x3b, 0x5c, 0xfc, 0x2a, 0x3b, 0x81, 0xb1, 0x0d,
+ 0x3b, 0x9e, 0x42, 0x20, 0x3b, 0x2e, 0x0d, 0x12, 0x3b, 0xe0, 0x98, 0x13, 0x3b,
+ 0x8e, 0x42, 0x24, 0x3b, 0x31, 0x04, 0x16, 0x3b, 0x10, 0x6b, 0x0c, 0x3b, 0xb9,
+ 0xad, 0x14, 0x3b, 0x57, 0x5e, 0x0b, 0x3b, 0x52, 0x65, 0x4b, 0x3b, 0x2f, 0xf2,
+ 0x17, 0x3b, 0x61, 0x9a, 0x1a, 0x3b, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62,
+ 0x69, 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76,
+ 0x32, 0x64, 0x5f, 0x31, 0x30, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x77, 0x69,
+ 0x73, 0x65, 0x2f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x2f, 0x72, 0x65,
+ 0x61, 0x64, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0e, 0x00, 0x18, 0x00, 0x08, 0x00, 0x07, 0x00, 0x0c, 0x00, 0x10,
+ 0x00, 0x14, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x68, 0x06,
+ 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x24, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x6a, 0xf9, 0xff, 0xff, 0x14, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+ 0xcb, 0x37, 0xb8, 0x3b, 0x43, 0xf6, 0xc2, 0x3b, 0x44, 0xf2, 0xe8, 0x3b, 0x8f,
+ 0xc2, 0xca, 0x3b, 0xc4, 0x3c, 0xd0, 0x3b, 0xce, 0x26, 0xf3, 0x3b, 0x85, 0x6f,
+ 0xb5, 0x3b, 0xa4, 0x85, 0xd8, 0x3b, 0xa7, 0x2b, 0xd0, 0x3b, 0x9e, 0x75, 0xa0,
+ 0x3b, 0x9c, 0xc0, 0xdb, 0x3b, 0x19, 0x83, 0x07, 0x3c, 0x97, 0x4e, 0xeb, 0x3b,
+ 0xa3, 0x3c, 0x05, 0x3c, 0x22, 0x33, 0x26, 0x3c, 0x87, 0xb0, 0x8e, 0x3b, 0x61,
+ 0x69, 0x09, 0x3c, 0x2e, 0x3d, 0xfd, 0x3b, 0xe0, 0x36, 0xad, 0x3b, 0x20, 0x8e,
+ 0xa4, 0x3b, 0x5d, 0x17, 0x01, 0x3c, 0x10, 0x48, 0xc9, 0x3b, 0x1f, 0x7e, 0x6e,
+ 0x3b, 0x3c, 0x72, 0xde, 0x3b, 0xb7, 0xfc, 0x1e, 0x3c, 0x5b, 0x4d, 0x91, 0x3b,
+ 0xc7, 0x0b, 0xb9, 0x3b, 0x3f, 0x6b, 0xb1, 0x3b, 0x11, 0x9e, 0xe3, 0x3b, 0x5c,
+ 0xec, 0x22, 0x3c, 0xae, 0x0f, 0xe5, 0x3b, 0xcc, 0xe8, 0x71, 0x3b, 0x80, 0x02,
+ 0x04, 0x3c, 0xe1, 0xfd, 0x00, 0x3c, 0x34, 0xb5, 0xc4, 0x3b, 0x8c, 0xb7, 0x3a,
+ 0x3c, 0xde, 0xe4, 0xaa, 0x3b, 0x3e, 0xfa, 0xf0, 0x3b, 0x4f, 0x3f, 0x0c, 0x3c,
+ 0xa8, 0xb8, 0xa7, 0x3b, 0xb1, 0xb7, 0xe1, 0x3b, 0x81, 0x09, 0x94, 0x3b, 0xc6,
+ 0xde, 0x10, 0x3c, 0x2f, 0xbe, 0x2c, 0x3c, 0xfe, 0x65, 0x01, 0x3c, 0x49, 0x9a,
+ 0x8a, 0x3b, 0x3d, 0x56, 0xd7, 0x3b, 0x21, 0x5e, 0xc4, 0x3b, 0x61, 0x7d, 0x0d,
+ 0x3c, 0xf9, 0x5a, 0x89, 0x3b, 0x69, 0xb0, 0xe0, 0x3b, 0x8f, 0xa5, 0xf7, 0x3b,
+ 0x76, 0x26, 0x03, 0x3c, 0xcb, 0x44, 0xe1, 0x3b, 0x28, 0x7a, 0x8d, 0x3b, 0xe5,
+ 0x1a, 0xea, 0x3b, 0x64, 0xdd, 0x9c, 0x3b, 0x57, 0xb5, 0x70, 0x3b, 0x22, 0xee,
+ 0xed, 0x3b, 0xa3, 0x21, 0x7c, 0x3b, 0xaf, 0x49, 0x8a, 0x3b, 0x56, 0x4a, 0xdc,
+ 0x3b, 0x23, 0xe9, 0x43, 0x3c, 0x2c, 0x58, 0xcb, 0x3b, 0x12, 0xe8, 0x9f, 0x3b,
+ 0xd0, 0xd2, 0xf4, 0x3b, 0x96, 0x9d, 0x9f, 0x3b, 0x48, 0x20, 0xea, 0x3b, 0x63,
+ 0x63, 0x0f, 0x3c, 0xd0, 0x99, 0xd0, 0x3b, 0x70, 0xd2, 0xd6, 0x3b, 0x67, 0xb5,
+ 0x13, 0x3c, 0x79, 0x9d, 0xab, 0x3b, 0x5b, 0x4d, 0x73, 0x3b, 0x2e, 0x3a, 0x9d,
+ 0x3b, 0x6a, 0x9c, 0xc9, 0x3b, 0x44, 0xff, 0x8b, 0x3b, 0x13, 0xae, 0xae, 0x3b,
+ 0x28, 0x06, 0x86, 0x3b, 0x05, 0x59, 0xae, 0x3b, 0x95, 0x1e, 0xd4, 0x3b, 0x4a,
+ 0x6e, 0xa7, 0x3b, 0xc9, 0x7a, 0x15, 0x3c, 0xcb, 0x63, 0xbe, 0x3b, 0x82, 0x8a,
+ 0x6f, 0x3b, 0x86, 0x3f, 0xd7, 0x3b, 0xfb, 0xba, 0x15, 0x3c, 0x8f, 0xb8, 0x1c,
+ 0x3c, 0xa9, 0xf4, 0xea, 0x3b, 0xe2, 0x65, 0x38, 0x3c, 0x8b, 0x4a, 0xd3, 0x3b,
+ 0xb7, 0xae, 0xdf, 0x3b, 0xbb, 0x74, 0xff, 0x3b, 0x0c, 0x0d, 0x92, 0x3b, 0x2e,
+ 0x0c, 0x55, 0x3c, 0xb5, 0xf6, 0xff, 0x3b, 0xa5, 0x05, 0x2f, 0x3c, 0x95, 0xbe,
+ 0xbd, 0x3b, 0xc3, 0x7b, 0x9e, 0x3b, 0xe2, 0xce, 0xda, 0x3b, 0xe9, 0xfd, 0xbf,
+ 0x3b, 0x57, 0x1c, 0x9b, 0x3b, 0xf2, 0x1f, 0x62, 0x3b, 0x8b, 0x89, 0xf3, 0x3b,
+ 0x83, 0xb6, 0x8a, 0x3b, 0x4c, 0x0f, 0xd6, 0x3b, 0x98, 0xc6, 0x00, 0x3c, 0x81,
+ 0xd3, 0x10, 0x3c, 0xe8, 0x22, 0x3b, 0x3c, 0x0e, 0xfa, 0x19, 0x3c, 0x64, 0x7e,
+ 0xe6, 0x3b, 0x12, 0x99, 0xce, 0x3b, 0x20, 0x57, 0x99, 0x3b, 0x51, 0xa6, 0xe1,
+ 0x3b, 0x5f, 0x8d, 0xb7, 0x3b, 0xce, 0xfc, 0x86, 0x3b, 0x17, 0x3d, 0xdf, 0x3b,
+ 0xd1, 0x68, 0xf0, 0x3b, 0x20, 0x38, 0xd5, 0x3b, 0x13, 0x4e, 0xa1, 0x3b, 0x6d,
+ 0x6f, 0x79, 0x3b, 0x4f, 0xf4, 0xc3, 0x3b, 0xbd, 0x9f, 0x00, 0x3c, 0x0f, 0xa4,
+ 0xf4, 0x3b, 0x6a, 0x1f, 0x13, 0x3c, 0xbb, 0x81, 0x83, 0x3b, 0xaf, 0xc6, 0xf5,
+ 0x3b, 0x5c, 0xa1, 0xf7, 0x3b, 0x36, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69,
+ 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32,
+ 0x64, 0x5f, 0x31, 0x30, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73,
+ 0x65, 0x2f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, 0x65, 0x5f, 0x77,
+ 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x1a, 0x00,
+ 0x08, 0x00, 0x07, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x14, 0x00, 0x0e, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x09, 0xc4, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00,
+ 0x94, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0c, 0x00, 0x12, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02,
+ 0x03, 0x86, 0x3c, 0x60, 0xfe, 0xd9, 0x3c, 0xcc, 0x1c, 0x47, 0x3b, 0xda, 0xcf,
+ 0x55, 0x3b, 0xa8, 0x02, 0x3d, 0x3c, 0x15, 0x1e, 0x19, 0x3d, 0xbb, 0x9a, 0x94,
+ 0x3c, 0x90, 0x5f, 0x8e, 0x3a, 0x21, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x62, 0x69,
+ 0x6c, 0x65, 0x6e, 0x65, 0x74, 0x56, 0x31, 0x2f, 0x43, 0x6f, 0x6e, 0x76, 0x32,
+ 0x64, 0x5f, 0x30, 0x2f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x2f, 0x72,
+ 0x65, 0x61, 0x64, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x28,
+ 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xd6, 0xff,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x19, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
+ 0x00, 0x08, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16,
+ 0xf2, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0a, 0x00, 0x0e, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0a, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a,
+ 0x00, 0x0c, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0a, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00,
+};
+const int g_person_detect_model_data_len = 300568;
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/person_detect_model_data.h b/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/person_detect_model_data.h
new file mode 100644
index 000000000..86471b304
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/person_detect_model_data.h
@@ -0,0 +1,27 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+// This is a standard TensorFlow Lite model file that has been converted into a
+// C data array, so it can be easily compiled into a binary for devices that
+// don't have a file system. It was created using the command:
+// xxd -i person_detect.tflite > person_detect_model_data.cc
+
+#ifndef TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_PERSON_DETECT_MODEL_DATA_H_
+#define TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_PERSON_DETECT_MODEL_DATA_H_
+
+extern const unsigned char g_person_detect_model_data[];
+extern const int g_person_detect_model_data_len;
+
+#endif // TENSORFLOW_LITE_MICRO_EXAMPLES_PERSON_DETECTION_PERSON_DETECT_MODEL_DATA_H_
diff --git a/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/person_detection.ino b/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/person_detection.ino
new file mode 100644
index 000000000..caefcf71c
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/examples/person_detection/person_detection.ino
@@ -0,0 +1,132 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+#include
+
+#include "detection_responder.h"
+#include "image_provider.h"
+#include "main_functions.h"
+#include "model_settings.h"
+#include "person_detect_model_data.h"
+#include "tensorflow/lite/micro/micro_error_reporter.h"
+#include "tensorflow/lite/micro/micro_interpreter.h"
+#include "tensorflow/lite/micro/micro_mutable_op_resolver.h"
+#include "tensorflow/lite/micro/system_setup.h"
+#include "tensorflow/lite/schema/schema_generated.h"
+
+// Globals, used for compatibility with Arduino-style sketches.
+namespace {
+tflite::ErrorReporter* error_reporter = nullptr;
+const tflite::Model* model = nullptr;
+tflite::MicroInterpreter* interpreter = nullptr;
+TfLiteTensor* input = nullptr;
+
+// In order to use optimized tensorflow lite kernels, a signed int8_t quantized
+// model is preferred over the legacy unsigned model format. This means that
+// throughout this project, input images must be converted from unisgned to
+// signed format. The easiest and quickest way to convert from unsigned to
+// signed 8-bit integers is to subtract 128 from the unsigned value to get a
+// signed value.
+
+// An area of memory to use for input, output, and intermediate arrays.
+constexpr int kTensorArenaSize = 136 * 1024;
+static uint8_t tensor_arena[kTensorArenaSize];
+} // namespace
+
+// The name of this function is important for Arduino compatibility.
+void setup() {
+ tflite::InitializeTarget();
+
+ // Set up logging. Google style is to avoid globals or statics because of
+ // lifetime uncertainty, but since this has a trivial destructor it's okay.
+ // NOLINTNEXTLINE(runtime-global-variables)
+ static tflite::MicroErrorReporter micro_error_reporter;
+ error_reporter = µ_error_reporter;
+
+ // Map the model into a usable data structure. This doesn't involve any
+ // copying or parsing, it's a very lightweight operation.
+ model = tflite::GetModel(g_person_detect_model_data);
+ if (model->version() != TFLITE_SCHEMA_VERSION) {
+ TF_LITE_REPORT_ERROR(error_reporter,
+ "Model provided is schema version %d not equal "
+ "to supported version %d.",
+ model->version(), TFLITE_SCHEMA_VERSION);
+ return;
+ }
+
+ // Pull in only the operation implementations we need.
+ // This relies on a complete list of all the ops needed by this graph.
+ // An easier approach is to just use the AllOpsResolver, but this will
+ // incur some penalty in code space for op implementations that are not
+ // needed by this graph.
+ //
+ // tflite::AllOpsResolver resolver;
+ // NOLINTNEXTLINE(runtime-global-variables)
+ static tflite::MicroMutableOpResolver<5> micro_op_resolver;
+ micro_op_resolver.AddAveragePool2D();
+ micro_op_resolver.AddConv2D();
+ micro_op_resolver.AddDepthwiseConv2D();
+ micro_op_resolver.AddReshape();
+ micro_op_resolver.AddSoftmax();
+
+ // Build an interpreter to run the model with.
+ // NOLINTNEXTLINE(runtime-global-variables)
+ static tflite::MicroInterpreter static_interpreter(
+ model, micro_op_resolver, tensor_arena, kTensorArenaSize, error_reporter);
+ interpreter = &static_interpreter;
+
+ // Allocate memory from the tensor_arena for the model's tensors.
+ TfLiteStatus allocate_status = interpreter->AllocateTensors();
+ if (allocate_status != kTfLiteOk) {
+ TF_LITE_REPORT_ERROR(error_reporter, "AllocateTensors() failed");
+ return;
+ }
+
+ // Get information about the memory area to use for the model's input.
+ input = interpreter->input(0);
+
+ if ((input->dims->size != 4) || (input->dims->data[0] != 1) ||
+ (input->dims->data[1] != kNumRows) ||
+ (input->dims->data[2] != kNumCols) ||
+ (input->dims->data[3] != kNumChannels) || (input->type != kTfLiteInt8)) {
+ TF_LITE_REPORT_ERROR(error_reporter,
+ "Bad input tensor parameters in model");
+ return;
+ }
+}
+
+// The name of this function is important for Arduino compatibility.
+void loop() {
+ // Get image from provider.
+ if (kTfLiteOk != GetImage(error_reporter, input)) {
+ TF_LITE_REPORT_ERROR(error_reporter, "Image capture failed.");
+ }
+
+ // Run the model on this input and make sure it succeeds.
+ if (kTfLiteOk != interpreter->Invoke()) {
+ TF_LITE_REPORT_ERROR(error_reporter, "Invoke failed.");
+ }
+
+ TfLiteTensor* output = interpreter->output(0);
+
+ // Process the inference results.
+ int8_t person_score = output->data.uint8[kPersonIndex];
+ int8_t no_person_score = output->data.uint8[kNotAPersonIndex];
+ float person_score_f =
+ (person_score - output->params.zero_point) * output->params.scale;
+ float no_person_score_f =
+ (no_person_score - output->params.zero_point) * output->params.scale;
+ RespondToDetection(error_reporter, person_score_f, no_person_score_f);
+}
diff --git a/lib/libesp32_ml/tf_lite_esp32/library.json b/lib/libesp32_ml/tf_lite_esp32/library.json
new file mode 100644
index 000000000..5c49bb378
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/library.json
@@ -0,0 +1,15 @@
+{
+ "name": "tf_lite_esp32",
+ "version": "0.0.1",
+ "keywords": "tensor flow",
+ "description": "Tensor flow lite for Arduino-ESP32",
+ "frameworks": "arduino",
+ "platforms": "espressif32",
+ "build": {
+ "libArchive": true,
+ "flags": [
+ "-I Source/include",
+ "-I Source/esp-nn/include"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/lib/libesp32_ml/tf_lite_esp32/library.properties b/lib/libesp32_ml/tf_lite_esp32/library.properties
new file mode 100644
index 000000000..028d14440
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/library.properties
@@ -0,0 +1,13 @@
+name=Arduino_TensorFlowLite for ESP32
+version=0.0.1-ALPHA
+author=TensorFlow Authors
+maintainer=Pete Warden
+sentence=Allows you to run machine learning models locally on your device.
+paragraph=This library runs TensorFlow machine learning models on microcontrollers, allowing you to build AI/ML applications powered by deep learning and neural networks. With the included examples, you can recognize speech, detect people using a camera, and recognise "magic wand" gestures using an accelerometer.
+category=Data Processing
+url=https://www.tensorflow.org/lite/microcontrollers/overview
+ldflags=
+includes=TensorFlowLite.h
+precompiled=full
+dot_a_linkage=false
+depends=Arduino
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/TensorFlowLite.h b/lib/libesp32_ml/tf_lite_esp32/src/TensorFlowLite.h
new file mode 100644
index 000000000..f549f5233
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/TensorFlowLite.h
@@ -0,0 +1,26 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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 TENSORFLOW_LITE_MICRO_TOOLS_MAKE_TEMPLATES_TENSORFLOWLITE_H_
+#define TENSORFLOW_LITE_MICRO_TOOLS_MAKE_TEMPLATES_TENSORFLOWLITE_H_
+
+// This header is deliberately empty, and is only present because including it
+// in a .ino sketch forces the Arduino toolchain to build the rest of the
+// library.
+
+#include "third_party/flatbuffers/include/flatbuffers/flatbuffers.h"
+#include "esp-nn/include/esp_nn.h"
+
+
+#endif // TENSORFLOW_LITE_MICRO_TOOLS_MAKE_TEMPLATES_TENSORFLOWLITE_H_
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/.gitignore b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/.gitignore
new file mode 100644
index 000000000..08ca72b5b
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/.gitignore
@@ -0,0 +1,57 @@
+.config
+*.o
+*.i
+*.s
+*.orig
+*.pyc
+
+# gtags
+GTAGS
+GRTAGS
+GPATH
+
+# emacs
+.dir-locals.el
+
+# emacs temp file suffixes
+*~
+.#*
+\#*#
+
+# eclipse setting
+.settings
+
+# MacOS directory files
+.DS_Store
+
+# Example project files
+examples/**/sdkconfig
+examples/**/sdkconfig.old
+examples/**/build
+
+# Test app files
+test_app/build
+test_app/sdkconfig
+test_app/sdkconfig.old
+
+# Doc build artifacts
+docs/_build/
+docs/doxygen-warning-log.txt
+docs/sphinx-warning-log.txt
+docs/sphinx-warning-log-sanitized.txt
+docs/xml/
+docs/xml_in/
+docs/man/
+docs/doxygen_sqlite3.db
+
+TEST_LOGS
+
+
+# gcov coverage reports
+*.gcda
+*.gcno
+coverage.info
+coverage_report/
+
+# VS Code Settings
+.vscode/
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/.gitlab-ci.yml b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/.gitlab-ci.yml
new file mode 100644
index 000000000..6b540bda8
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/.gitlab-ci.yml
@@ -0,0 +1,55 @@
+stages:
+ - build
+
+variables:
+ BATCH_BUILD: "1"
+ V: "0"
+ MAKEFLAGS: "-j8 --no-keep-going"
+ IDF_PATH: "$CI_PROJECT_DIR/esp-idf"
+ LOG_PATH: "$CI_PROJECT_DIR"
+
+.set_git_config: &set_git_config
+ # Set git config
+ - git config user.email "test@espressif.com"
+ - git config user.name "Espressif"
+
+.add_ssh_key: &add_ssh_key
+ # Add gitlab ssh key
+ - mkdir -p ~/.ssh
+ - chmod 700 ~/.ssh
+ - echo -n $GITLAB_KEY > ~/.ssh/id_rsa_base64
+ - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
+ - chmod 600 ~/.ssh/id_rsa
+ - echo -e "Host gitlab.espressif.cn\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
+
+before_script:
+ # Add gitlab ssh key
+ - *add_ssh_key
+ # Set git config
+ - *set_git_config
+
+.build_esp32s3: &build_esp32s3
+ - idf.py set-target esp32s3 build
+
+.build_esp32: &build_esp32
+ - idf.py set-target esp32 build
+
+build_demo:
+ stage: build
+ image: $CI_DOCKER_REGISTRY/esp32-ci-env:esp-nn
+ tags:
+ - build
+ script:
+ # Clone IDF
+ - git clone --recursive --single-branch -b release/v4.4 --reference-if-able /local_references/gitlab/ https://gitlab-ci-token:${BOT_TOKEN}@gitlab.espressif.cn:6688/espressif/esp-idf.git
+ - cd esp-idf
+ - ./install.sh
+ - . ./export.sh
+ - cd ..
+ # Build examples now
+ - cd test_app
+ # Build esp32s3
+ - *build_esp32s3
+ # Build esp32
+ - *build_esp32
+ - cd -
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/LICENSE b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/LICENSE
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/LICENSE
@@ -0,0 +1,202 @@
+
+ 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/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/README.md b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/README.md
new file mode 100644
index 000000000..f70f40747
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/README.md
@@ -0,0 +1,55 @@
+# ESP-NN
+
+The library contains optimised NN (Neural Network) functions for various Espressif chipsets.
+
+* Supported platforms:
+ * TensorFlow Lite Micro (TFLite Micro). Repo can be found [here](https://github.com/espressif/tflite-micro-esp-examples)
+
+* Supported ESP chipsets include:
+ * ESP32-S3 (Assembly versions optimised to benefit from vector instructions of ESP32-S3)
+ * ESP32 (Generic optimisations)
+ * ESP32-C3 (Generic optimisations)
+
+## Performance
+
+### Kernelwise performance for s8 versions:
+
+ * Kernelwise performance on ESP32-S3 chip
+ * Numbers are ticks taken for kernel to execute
+ * Chip config: 240MHz, SPI: QPI 80MHz, Data cache: 64KB
+
+ | Function | ANSI C | ESP32-S3 Opt | Opt Ratio | Data info | Memory |
+ | ----------------| --------|---------|---------|-------------|-----------|
+ | elementwise_add | 320397 | 87119 | 3.68 | size = 1615 | External |
+ | elementwise_mul | 125958 | 44239 | 2.85 | size = 1615 | External |
+ | convolution | 4663012 | 428675 | 10.88 | input(10,10), filter(64x1x1x64) | External |
+ | convolution | 301014 | 32433 | 9.28 | input(8,8), filter(16x1x1x16) | External |
+ | convolution | 2115418 | 1020923 | 2.07 | input(10,10), filter(64x3x3x3) | External |
+ | depthwise conv | 1190062 | 203278 | 5.85 | input (18, 18), pad(0,0), stride(1,1) filter: 1x3x3x16 | External |
+ | depthwise conv | 837072 | 182335 | 4.59 | input (12, 12), pad(1,1), stride(1,1) filter: 8x5x5x4 | External |
+ | max pool | 485714 | 76747 | 6.33 | input(16,16), filter (1x3x3x16) | Internal |
+ | avg pool | 541462 | 160580 | 3.37 | input(16,16), filter (1x3x3x16) | Internal |
+ | fully connected | 15853 | 9547 | 1.66 | len: 265, ch = 3 | Internal |
+ | prelu (relu6) | 19472 | 2734 | 7.12 | size, 1615 | Internal |
+
+
+## Configuration
+
+ * To configure, please use `idf.py menuconfig` and under `ESP-NN` select `NN_OPTIMIZATIONS`
+ * There are two options presented:
+ * Optimized versions
+ * ANSI C
+
+ * Default selection is for `Optimized versions`. For ESP32-S3, assembly versions are automatically selected, whereas for other chipsets (viz., ESP32, ESP32-C3), generic optimisations are selected.
+ * For debugging purposes, you may want to select `ANSI C` reference versions.
+
+
+## Contributing
+
+If you encounter an issue with ESP-NN, or wish to submit a feature request, please use the Issues section on the Github.
+
+For general questions related to this library, please use the esp32.com forum.
+
+## Copyrights and License
+
+All original source code in this repository is Copyright (C) 2020-2021 Espressif Systems. This source code is licensed under the Apache License 2.0 as described in the file LICENSE.
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/include/esp_nn.h b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/include/esp_nn.h
new file mode 100644
index 000000000..bd5331194
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/include/esp_nn.h
@@ -0,0 +1,46 @@
+// Copyright 2020-2021 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#pragma once
+
+#if defined(CONFIG_NN_OPTIMIZED)
+// select apt optimisations
+#ifdef CONFIG_IDF_TARGET_ESP32S3
+#define ARCH_ESP32_S3 1
+#endif
+#ifdef CONFIG_IDF_TARGET_ESP32
+#define ARCH_ESP32 1
+#endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* reference kernels included by default */
+#include "esp_nn_ansi_headers.h"
+
+#if defined(CONFIG_NN_OPTIMIZED)
+#if defined(ARCH_ESP32_S3)
+#include "esp_nn_esp32s3.h"
+#else // for other platforms use generic optimisations
+#include "esp_nn_generic_opt.h"
+#endif // #if defined(ARCH_ESP32_S3)
+#else
+#include "esp_nn_ansi_c.h"
+#endif
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/include/esp_nn_ansi_c.h b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/include/esp_nn_ansi_c.h
new file mode 100644
index 000000000..8279ebef3
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/include/esp_nn_ansi_c.h
@@ -0,0 +1,47 @@
+// Copyright 2020-2021 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+/**
+ * @file Header definitions to include for ANSI C versions.
+ * These are just typedefs to pick up ANSI versions.
+ */
+
+#pragma once
+
+#include "esp_nn_defs.h"
+#include "esp_nn_ansi_headers.h"
+
+#define esp_nn_add_elementwise_s8 esp_nn_add_elementwise_s8_ansi
+#define esp_nn_mul_elementwise_s8 esp_nn_mul_elementwise_s8_ansi
+
+#define esp_nn_depthwise_conv_s8 esp_nn_depthwise_conv_s8_ansi
+
+#define esp_nn_conv_s8 esp_nn_conv_s8_ansi
+
+#define esp_nn_get_conv_scratch_size esp_nn_get_conv_scratch_size_ansi
+#define esp_nn_set_conv_scratch_buf esp_nn_set_conv_scratch_buf_ansi
+
+#define esp_nn_get_depthwise_conv_scratch_size esp_nn_get_depthwise_conv_scratch_size_ansi
+#define esp_nn_set_depthwise_conv_scratch_buf esp_nn_set_depthwise_conv_scratch_buf_ansi
+
+#define esp_nn_relu6_s8 esp_nn_relu6_s8_ansi
+
+#define esp_nn_avg_pool_s8 esp_nn_avg_pool_s8_ansi
+#define esp_nn_max_pool_s8 esp_nn_max_pool_s8_ansi
+
+#define esp_nn_fully_connected_s8 esp_nn_fully_connected_s8_ansi
+
+#define esp_nn_get_softmax_scratch_size esp_nn_get_softmax_scratch_size_ansi
+#define esp_nn_set_softmax_scratch_buf esp_nn_set_softmax_scratch_buf_ansi
+#define esp_nn_softmax_s8 esp_nn_softmax_s8_ansi
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/include/esp_nn_ansi_headers.h b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/include/esp_nn_ansi_headers.h
new file mode 100644
index 000000000..52ebb6800
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/include/esp_nn_ansi_headers.h
@@ -0,0 +1,309 @@
+// Copyright 2020-2021 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#pragma once
+
+/**
+ * @file Header definitions to include for esp_nn reference functions
+ */
+
+#include "esp_nn_defs.h"
+/************************** Basic math functions ****************************/
+
+/**
+ * @brief elementwise addition
+ *
+ * @note inputs type: int8_t, output: int8_t
+ * input offsets: although int32_t, they are contained in 8 bits [-128, 127]
+ *
+ * shift values are expected to be <= 0
+ */
+void esp_nn_add_elementwise_s8_ansi(const int8_t *input1_data,
+ const int8_t *input2_data,
+ const int32_t input1_offset,
+ const int32_t input2_offset,
+ const int32_t input1_mult,
+ const int32_t input2_mult,
+ const int32_t input1_shift,
+ const int32_t input2_shift,
+ const int32_t left_shift,
+ int8_t *output,
+ const int32_t out_offset,
+ const int32_t out_mult,
+ const int32_t out_shift,
+ const int32_t activation_min,
+ const int32_t activation_max,
+ const int32_t size);
+/**
+ * @brief elementwise multiplication
+ *
+ * @note inputs type: int8_t, output: int8_t
+ * input offsets: although int32_t, they are contained in 8 bits [-128, 127]
+ *
+ * output shift is expected to be <= 0
+ */
+void esp_nn_mul_elementwise_s8_ansi(const int8_t *input1_data,
+ const int8_t *input2_data,
+ const int32_t input1_offset,
+ const int32_t input2_offset,
+ int8_t *output,
+ const int32_t out_offset,
+ const int32_t out_mult,
+ const int32_t out_shift,
+ const int32_t activation_min,
+ const int32_t activation_max,
+ const int32_t size);
+
+
+/************************** Convolution functions *****************************/
+
+/**
+ * @brief depthwise convolution per channel
+ *
+ * @note inputs type: int8_t, output: int8_t
+ * Version used in tflite is per channel.
+ * This version follows the same footsprints.
+ * Meaning, it has per out_channel shift and multiplier for
+ * requantization
+ *
+ * optimization notes: Though input_offset is int32 type,
+ * offset values are contained in 8 bits [-128, 127]
+ */
+void esp_nn_depthwise_conv_s8_ansi(const data_dims_t *input_dims,
+ const int8_t *input_data,
+ const data_dims_t *filter_dims,
+ const int8_t *filter_data,
+ const int32_t *bias,
+ const data_dims_t *output_dims,
+ int8_t *out_data,
+ const dw_conv_params_t *conv_params,
+ const quant_data_t *quant_data);
+
+/**
+ * @brief 2d-convolution channelwise
+ *
+ * @note operation: result += (input + offset) * filter
+ *
+ * inputs type: int8_t, output: int8_t
+ * input offsets: although int32_t, they are contained in 8 bits [-128, 127]
+ */
+void esp_nn_conv_s8_ansi(const data_dims_t *input_dims,
+ const int8_t *input_data,
+ const data_dims_t *filter_dims,
+ const int8_t *filter_data,
+ const int32_t *bias,
+ const data_dims_t *output_dims,
+ int8_t *out_data,
+ const conv_params_t *conv_params,
+ const quant_data_t *quant_data);
+
+int esp_nn_get_conv_scratch_size_ansi(const data_dims_t *input_dims,
+ const data_dims_t *filter_dims,
+ const data_dims_t *output_dims,
+ const conv_params_t *conv_params);
+void esp_nn_set_conv_scratch_buf_ansi(const void *buf);
+
+int esp_nn_get_depthwise_conv_scratch_size_ansi(const data_dims_t *input_dims,
+ const data_dims_t *filter_dims,
+ const data_dims_t *output_dims,
+ const dw_conv_params_t *conv_params);
+void esp_nn_set_depthwise_conv_scratch_buf_ansi(const void *buf);
+
+/************************** Activation functions *****************************/
+
+/**
+ * @brief relu6
+ *
+ * @note inout: int8_t
+ */
+void esp_nn_relu6_s8_ansi(int8_t *data, uint16_t size);
+
+/************************** Pooling functions *****************************/
+
+
+/**
+ * @brief max_pool
+ *
+ * @note inputs type: int8_t, output: int8_t
+ * input offsets: although int32_t, they are contained in 8 bits [-128, 127]
+ */
+void esp_nn_max_pool_s8_ansi(const int8_t *input,
+ const uint16_t input_wd,
+ const uint16_t input_ht,
+ int8_t *output,
+ const uint16_t output_wd,
+ const uint16_t output_ht,
+ const uint16_t stride_wd,
+ const uint16_t stride_ht,
+ const uint16_t filter_wd,
+ const uint16_t filter_ht,
+ const uint16_t pad_wd,
+ const uint16_t pad_ht,
+ const int32_t activation_min,
+ const int32_t activation_max,
+ const uint16_t channels);
+
+/**
+ * @brief avg_pool
+ *
+ * @note inputs type: int8_t, output: int8_t
+ * input offsets: although int32_t, they are contained in 8 bits [-128, 127]
+ */
+void esp_nn_avg_pool_s8_ansi(const int8_t *input,
+ const uint16_t input_wd,
+ const uint16_t input_ht,
+ int8_t *output,
+ const uint16_t output_wd,
+ const uint16_t output_ht,
+ const uint16_t stride_wd,
+ const uint16_t stride_ht,
+ const uint16_t filter_wd,
+ const uint16_t filter_ht,
+ const uint16_t pad_wd,
+ const uint16_t pad_ht,
+ const int32_t activation_min,
+ const int32_t activation_max,
+ const uint16_t channels);
+
+
+/************************** Fully connected functions ***********************/
+
+/**
+ * @brief fully connected
+ *
+ * @note inputs type: int8_t, output: int8_t
+ * input offsets: although int32_t, they are contained in 8 bits [-128, 127]
+ */
+void esp_nn_fully_connected_s8_ansi(const int8_t *input_data,
+ const int32_t input_offset,
+ const uint16_t row_len,
+ const int8_t *filter_data,
+ const int32_t filter_offset,
+ const int32_t *bias,
+ int8_t *out_data,
+ const uint16_t out_channels,
+ const int32_t out_offset,
+ const int32_t out_shift,
+ const int32_t out_mult,
+ const int32_t activation_min,
+ const int32_t activation_max);
+
+/**
+ * @brief Get scratch buffer size needed by softmax function
+ *
+ * @param width
+ * @param height
+ * @return size in bytes
+ *
+ * @note buffer must be 4 byte aligned
+ */
+int32_t esp_nn_get_softmax_scratch_size_ansi(const int32_t width, const int32_t height);
+
+/* ANSI C function to be hooked up when optimised version needed */
+int32_t esp_nn_get_softmax_scratch_size_opt(const int32_t width, const int32_t height);
+
+/**
+ * @brief Set scratch buffer to be used by softmax function
+ *
+ * @param buffer this can be NULL if one needs to unset it
+ * must be aligned to 4 bytes
+ */
+void esp_nn_set_softmax_scratch_buf_ansi(void *buffer);
+
+/**
+ * @brief reference softmax function
+ *
+ * @note inputs type: int8_t, output: int8_t
+ */
+void esp_nn_softmax_s8_ansi(const int8_t *input_data,
+ const int32_t height,
+ const int32_t width,
+ const int32_t mult,
+ const int32_t shift,
+ const int32_t diff_min,
+ int8_t *output_data);
+
+
+//////////////////////////// Generic optimisations /////////////////////////////
+
+/************************** Convolution functions *****************************/
+
+/**
+ * @brief 2d-convolution channelwise optimized version
+ *
+ * @note operation: result += (input + offset) * filter
+ *
+ * inputs type: int8_t, output: int8_t
+ * input offsets: although int32_t, they are contained in 8 bits [-128, 127]
+ */
+void esp_nn_conv_s8_opt(const data_dims_t *input_dims,
+ const int8_t *input_data,
+ const data_dims_t *filter_dims,
+ const int8_t *filter_data,
+ const int32_t *bias,
+ const data_dims_t *output_dims,
+ int8_t *out_data,
+ const conv_params_t *conv_params,
+ const quant_data_t *quant_data);
+
+/**
+ * @brief depthwise convolution per channel optimized version
+ *
+ * @note inputs type: int8_t, output: int8_t
+ * Version used in tflite is per channel.
+ * This version follows the same footsprints.
+ * Meaning, it has per out_channel shift and multiplier for
+ * requantization
+ *
+ * optimization notes: Though input_offset is int32 type,
+ * offset values are contained in 8 bits [-128, 127]
+ */
+void esp_nn_depthwise_conv_s8_opt(const data_dims_t *input_dims,
+ const int8_t *input_data,
+ const data_dims_t *filter_dims,
+ const int8_t *filter_data,
+ const int32_t *bias,
+ const data_dims_t *output_dims,
+ int8_t *out_data,
+ const dw_conv_params_t *conv_params,
+ const quant_data_t *quant_data);
+
+int esp_nn_get_conv_scratch_size_opt(const data_dims_t *input_dims,
+ const data_dims_t *filter_dims,
+ const data_dims_t *output_dims,
+ const conv_params_t *conv_params);
+void esp_nn_set_conv_scratch_buf_opt(const void *buf);
+
+int esp_nn_get_depthwise_conv_scratch_size_opt(const data_dims_t *input_dims,
+ const data_dims_t *filter_dims,
+ const data_dims_t *output_dims,
+ const dw_conv_params_t *conv_params);
+void esp_nn_set_depthwise_conv_scratch_buf_opt(const void *buf);
+
+/* ANSI C function to be hooked up when optimised version needed */
+void esp_nn_set_softmax_scratch_buf_opt(void *buffer);
+
+/**
+ * @brief optimised version of softmax function
+ *
+ * @note the function uses extra buffer (4 * width bytes)
+ * hence, scratch buffers must be set before calling this.
+ */
+void esp_nn_softmax_s8_opt(const int8_t *input_data,
+ const int32_t height,
+ const int32_t width,
+ const int32_t mult,
+ const int32_t shift,
+ const int32_t diff_min,
+ int8_t *output_data);
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/include/esp_nn_defs.h b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/include/esp_nn_defs.h
new file mode 100644
index 000000000..756d8e6fb
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/include/esp_nn_defs.h
@@ -0,0 +1,83 @@
+// Copyright 2022 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#pragma once
+
+#include
+
+/**
+ * @brief structure to club data dims
+ * this structure can be used for input, output and filter
+ */
+typedef struct data_dims {
+ int32_t width;
+ int32_t height;
+ int32_t channels;
+
+ int32_t extra; // can be used as batch or any other param
+} data_dims_t;
+
+/**
+ * @brief 2d data structure (width, height)
+ *
+ */
+typedef struct data_2d {
+ int32_t width;
+ int32_t height;
+} data_2d_t;
+
+/**
+ * @brief min/max activation
+ */
+typedef struct act_params {
+ int32_t min;
+ int32_t max;
+} act_params_t;
+
+/**
+ * @brief per channel quant data
+ *
+ * @note number of shift and mult elements are equal to output channels
+ */
+typedef struct quant_data {
+ int32_t *shift;
+ int32_t *mult;
+} quant_data_t;
+
+/**
+ * @brief params specific to convolution 2d
+ *
+ */
+typedef struct conv_params {
+ int32_t in_offset;
+ int32_t out_offset;
+ data_2d_t stride;
+ data_2d_t padding;
+ data_2d_t dilation;
+ act_params_t activation;
+} conv_params_t;
+
+/**
+ * @brief params specific to depthwise convolution 2d
+ *
+ */
+typedef struct dw_conv_params {
+ int32_t in_offset;
+ int32_t out_offset;
+ int32_t ch_mult; // channel multiplier. (in_ch * ch_mult = out_ch)
+ data_2d_t stride;
+ data_2d_t padding;
+ data_2d_t dilation;
+ act_params_t activation;
+} dw_conv_params_t;
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/include/esp_nn_esp32s3.h b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/include/esp_nn_esp32s3.h
new file mode 100644
index 000000000..9f7664549
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/include/esp_nn_esp32s3.h
@@ -0,0 +1,233 @@
+// Copyright 2020-2021 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+/**
+ * @file Header definitions to include for esp_nn optimized functions for
+ * the ESP32-S3 platform
+ */
+
+#pragma once
+#ifdef CONFIG_IDF_TARGET_ESP32S3
+#include "esp_nn_defs.h"
+#include "esp_nn_ansi_headers.h"
+
+/************************** Basic math functions *****************************/
+
+
+/**
+ * @brief elementwise addition
+ *
+ * @note inputs type: int8_t, output: int8_t
+ * input offsets: although int32_t, they are contained in 8 bits [-128, 127]
+ *
+ * shift values are expected to be <= 0
+ */
+void esp_nn_add_elementwise_s8_esp32s3(const int8_t *input1_data,
+ const int8_t *input2_data,
+ const int32_t input1_offset,
+ const int32_t input2_offset,
+ const int32_t input1_mult,
+ const int32_t input2_mult,
+ const int32_t input1_shift,
+ const int32_t input2_shift,
+ const int32_t left_shift,
+ int8_t *output,
+ const int32_t out_offset,
+ const int32_t out_mult,
+ const int32_t out_shift,
+ const int32_t activation_min,
+ const int32_t activation_max,
+ const int32_t size);
+
+/**
+ * @brief elementwise multiplication
+ *
+ * @note inputs type: int8_t, output: int8_t
+ * input offsets: although int32_t, they are contained in 8 bits [-128, 127]
+ *
+ * output shift is expected to be <= 0
+ */
+void esp_nn_mul_elementwise_s8_esp32s3(const int8_t *input1_data,
+ const int8_t *input2_data,
+ const int32_t input1_offset,
+ const int32_t input2_offset,
+ int8_t *output,
+ const int32_t out_offset,
+ const int32_t out_mult,
+ const int32_t out_shift,
+ const int32_t activation_min,
+ const int32_t activation_max,
+ const int32_t size);
+
+
+/************************** Convolution functions *****************************/
+
+/**
+ * @brief depthwise convolution per channel
+ *
+ * @note inputs type: int8_t, output: int8_t
+ * Version used in tflite is per channel.
+ * This version follows the same footsprints.
+ * Meaning, it has per out_channel shift and multiplier for
+ * requantization
+ *
+ * optimization notes: Though input_offset is int32 type,
+ * offset values are contained in 8 bits [-128, 127]
+ */
+void esp_nn_depthwise_conv_s8_esp32s3(const data_dims_t *input_dims,
+ const int8_t *input_data,
+ const data_dims_t *filter_dims,
+ const int8_t *filter_data,
+ const int32_t *bias,
+ const data_dims_t *output_dims,
+ int8_t *output_data,
+ const dw_conv_params_t *conv_params,
+ const quant_data_t *quant_data);
+
+/**
+ * @brief 2d - convolution channelwise
+ *
+ * @note operation: result += (input + offset) * filter
+ *
+ * inputs type: int8_t, output: int8_t
+ * input offsets: although int32_t, they are contained in 8 bits [-128, 127]
+ */
+void esp_nn_conv_s8_esp32s3(const data_dims_t *input_dims,
+ const int8_t *input_data,
+ const data_dims_t *filter_dims,
+ const int8_t *filter_data,
+ const int32_t *bias,
+ const data_dims_t *output_dims,
+ int8_t *output_data,
+ const conv_params_t *conv_params,
+ const quant_data_t *quant_data);
+
+int esp_nn_get_conv_scratch_size_esp32s3(const data_dims_t *input_dims,
+ const data_dims_t *filter_dims,
+ const data_dims_t *output_dims,
+ const conv_params_t *conv_params);
+void esp_nn_set_conv_scratch_buf_esp32s3(const void *buf);
+
+int esp_nn_get_depthwise_conv_scratch_size_esp32s3(const data_dims_t *input_dims,
+ const data_dims_t *filter_dims,
+ const data_dims_t *output_dims,
+ const dw_conv_params_t *conv_params);
+void esp_nn_set_depthwise_conv_scratch_buf_esp32s3(const void *buf);
+
+/************************** Pooling functions *****************************/
+
+/**
+ * @brief max_pool
+ *
+ * @note inputs type: int8_t, output: int8_t
+ * input offsets: although int32_t, they are contained in 8 bits [-128, 127]
+ */
+void esp_nn_max_pool_s8_esp32s3(const int8_t *input,
+ const uint16_t input_wd,
+ const uint16_t input_ht,
+ int8_t *output,
+ const uint16_t output_wd,
+ const uint16_t output_ht,
+ const uint16_t stride_wd,
+ const uint16_t stride_ht,
+ const uint16_t filter_wd,
+ const uint16_t filter_ht,
+ const uint16_t pad_wd,
+ const uint16_t pad_ht,
+ const int32_t activation_min,
+ const int32_t activation_max,
+ const uint16_t channels);
+
+/**
+ * @brief avg_pool
+ *
+ * @note inputs type: int8_t, output: int8_t
+ * input offsets: although int32_t, they are contained in 8 bits [-128, 127]
+ */
+void esp_nn_avg_pool_s8_esp32s3(const int8_t *input,
+ const uint16_t input_wd,
+ const uint16_t input_ht,
+ int8_t *output,
+ const uint16_t output_wd,
+ const uint16_t output_ht,
+ const uint16_t stride_wd,
+ const uint16_t stride_ht,
+ const uint16_t filter_wd,
+ const uint16_t filter_ht,
+ const uint16_t pad_wd,
+ const uint16_t pad_ht,
+ const int32_t activation_min,
+ const int32_t activation_max,
+ const uint16_t channels);
+
+
+/************************** Fully connected functions *****************************/
+
+/**
+ * @brief fully connected
+ *
+ * @note inputs type: int8_t, output: int8_t
+ * input offsets: although int32_t, they are contained in 8 bits [-128, 127]
+ *
+ * Current version works only on aligned input.
+ * row_len and channels should both be multiple of 8.
+ */
+void esp_nn_fully_connected_s8_esp32s3(const int8_t *input_data,
+ const int32_t input_offset,
+ const uint16_t row_len,
+ const int8_t *filter_data,
+ const int32_t filter_offset,
+ const int32_t *bias,
+ int8_t *out_data,
+ const uint16_t out_channels,
+ const int32_t out_offset,
+ const int32_t out_shift,
+ const int32_t out_mult,
+ const int32_t activation_min,
+ const int32_t activation_max);
+
+/**
+ * @brief relu6
+ *
+ * @note inout: int8_t
+ */
+void esp_nn_relu6_s8_esp32s3(int8_t *data, uint16_t size);
+
+/********************** function defines ***************************/
+
+#define esp_nn_add_elementwise_s8 esp_nn_add_elementwise_s8_esp32s3
+#define esp_nn_mul_elementwise_s8 esp_nn_mul_elementwise_s8_esp32s3
+
+#define esp_nn_depthwise_conv_s8 esp_nn_depthwise_conv_s8_esp32s3
+
+#define esp_nn_get_conv_scratch_size esp_nn_get_conv_scratch_size_esp32s3
+#define esp_nn_set_conv_scratch_buf esp_nn_set_conv_scratch_buf_esp32s3
+
+#define esp_nn_get_depthwise_conv_scratch_size esp_nn_get_depthwise_conv_scratch_size_esp32s3
+#define esp_nn_set_depthwise_conv_scratch_buf esp_nn_set_depthwise_conv_scratch_buf_esp32s3
+
+#define esp_nn_conv_s8 esp_nn_conv_s8_esp32s3
+
+#define esp_nn_relu6_s8 esp_nn_relu6_s8_esp32s3
+
+#define esp_nn_avg_pool_s8 esp_nn_avg_pool_s8_esp32s3
+#define esp_nn_max_pool_s8 esp_nn_max_pool_s8_esp32s3
+
+#define esp_nn_fully_connected_s8 esp_nn_fully_connected_s8_esp32s3
+
+#define esp_nn_get_softmax_scratch_size esp_nn_get_softmax_scratch_size_opt
+#define esp_nn_set_softmax_scratch_buf esp_nn_set_softmax_scratch_buf_opt
+#define esp_nn_softmax_s8 esp_nn_softmax_s8_opt
+
+#endif // CONFIG_IDF_TARGET_ESP32S3
\ No newline at end of file
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/include/esp_nn_generic_opt.h b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/include/esp_nn_generic_opt.h
new file mode 100644
index 000000000..136cba5de
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/include/esp_nn_generic_opt.h
@@ -0,0 +1,47 @@
+// Copyright 2020-2021 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+/**
+ * @file Header definitions to include for esp_nn generic optimisations
+ * For functions which not having optimisations, _ansi versions are picked.
+ */
+
+#pragma once
+
+#include "esp_nn_defs.h"
+#include "esp_nn_ansi_headers.h"
+
+#define esp_nn_add_elementwise_s8 esp_nn_add_elementwise_s8_ansi
+#define esp_nn_mul_elementwise_s8 esp_nn_mul_elementwise_s8_ansi
+
+#define esp_nn_depthwise_conv_s8 esp_nn_depthwise_conv_s8_opt
+
+#define esp_nn_conv_s8 esp_nn_conv_s8_opt
+
+#define esp_nn_get_conv_scratch_size esp_nn_get_conv_scratch_size_opt
+#define esp_nn_set_conv_scratch_buf esp_nn_set_conv_scratch_buf_opt
+
+#define esp_nn_get_depthwise_conv_scratch_size esp_nn_get_depthwise_conv_scratch_size_opt
+#define esp_nn_set_depthwise_conv_scratch_buf esp_nn_set_depthwise_conv_scratch_buf_opt
+
+#define esp_nn_relu6_s8 esp_nn_relu6_s8_ansi
+
+#define esp_nn_avg_pool_s8 esp_nn_avg_pool_s8_ansi
+#define esp_nn_max_pool_s8 esp_nn_max_pool_s8_ansi
+
+#define esp_nn_fully_connected_s8 esp_nn_fully_connected_s8_ansi
+
+#define esp_nn_get_softmax_scratch_size esp_nn_get_softmax_scratch_size_opt
+#define esp_nn_set_softmax_scratch_buf esp_nn_set_softmax_scratch_buf_opt
+#define esp_nn_softmax_s8 esp_nn_softmax_s8_opt
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/activation_functions/esp_nn_relu_ansi.c b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/activation_functions/esp_nn_relu_ansi.c
new file mode 100644
index 000000000..3c83bf89b
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/activation_functions/esp_nn_relu_ansi.c
@@ -0,0 +1,30 @@
+// Copyright 2020-2021 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#include
+#include
+
+#include "../common/common_functions.h"
+
+void esp_nn_relu6_s8_ansi(int8_t *data, uint16_t size)
+{
+ int32_t i;
+
+ for (i = 0; i < size; i++) {
+ int32_t ip = data[i];
+
+ ip = max(ip, 0);
+ data[i] = min(ip, 6);
+ }
+}
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/basic_math/esp_nn_add_ansi.c b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/basic_math/esp_nn_add_ansi.c
new file mode 100644
index 000000000..d7fe34e62
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/basic_math/esp_nn_add_ansi.c
@@ -0,0 +1,97 @@
+// Copyright 2020-2021 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#include
+
+#include "../common/common_functions.h"
+
+void esp_nn_add_elementwise_u8_ansi(const uint8_t *input1_data,
+ const uint8_t *input2_data,
+ const int32_t input1_offset,
+ const int32_t input2_offset,
+ const int32_t input1_mult,
+ const int32_t input2_mult,
+ const int32_t input1_shift,
+ const int32_t input2_shift,
+ const int32_t left_shift,
+ uint8_t *output,
+ const int32_t out_offset,
+ const int32_t out_mult,
+ const int32_t out_shift,
+ const int32_t activation_min,
+ const int32_t activation_max,
+ const int32_t size)
+{
+ for (int i = 0; i < size; i++) {
+ int32_t tmp1 = input1_data[i] + input1_offset;
+ int32_t tmp2 = input2_data[i] + input2_offset;
+
+ tmp1 <<= left_shift;
+ tmp2 <<= left_shift;
+
+ tmp1 = esp_nn_sat_round_doubling_high_mul(tmp1, input1_mult);
+ tmp2 = esp_nn_sat_round_doubling_high_mul(tmp2, input2_mult);
+
+ tmp1 = esp_nn_div_by_power_of_two(tmp1, -input1_shift);
+ tmp2 = esp_nn_div_by_power_of_two(tmp2, -input2_shift);
+
+ int32_t out = tmp1 + tmp2;
+ out = esp_nn_sat_round_doubling_high_mul(out, out_mult);
+ out = esp_nn_div_by_power_of_two(out, -out_shift);
+ out = out + out_offset;
+
+ out = max(activation_min, min(out, activation_max));
+ output[i] = (uint8_t) out;
+ }
+}
+
+void esp_nn_add_elementwise_s8_ansi(const int8_t *input1_data,
+ const int8_t *input2_data,
+ const int32_t input1_offset,
+ const int32_t input2_offset,
+ const int32_t input1_mult,
+ const int32_t input2_mult,
+ const int32_t input1_shift,
+ const int32_t input2_shift,
+ const int32_t left_shift,
+ int8_t *output,
+ const int32_t out_offset,
+ const int32_t out_mult,
+ const int32_t out_shift,
+ const int32_t activation_min,
+ const int32_t activation_max,
+ const int32_t size)
+{
+ for (int i = 0; i < size; i++) {
+ int32_t tmp1 = input1_data[i] + input1_offset;
+ int32_t tmp2 = input2_data[i] + input2_offset;
+
+ tmp1 <<= left_shift;
+ tmp2 <<= left_shift;
+
+ tmp1 = esp_nn_sat_round_doubling_high_mul(tmp1, input1_mult);
+ tmp2 = esp_nn_sat_round_doubling_high_mul(tmp2, input2_mult);
+
+ tmp1 = esp_nn_div_by_power_of_two(tmp1, -input1_shift);
+ tmp2 = esp_nn_div_by_power_of_two(tmp2, -input2_shift);
+
+ int32_t out = tmp1 + tmp2;
+ out = esp_nn_sat_round_doubling_high_mul(out, out_mult);
+ out = esp_nn_div_by_power_of_two(out, -out_shift);
+ out = out + out_offset;
+
+ out = max(activation_min, min(out, activation_max));
+ output[i] = (int8_t) out;
+ }
+}
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/basic_math/esp_nn_mul_ansi.c b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/basic_math/esp_nn_mul_ansi.c
new file mode 100644
index 000000000..c2eae5e59
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/basic_math/esp_nn_mul_ansi.c
@@ -0,0 +1,42 @@
+// Copyright 2020-2021 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#include
+
+#include "../common/common_functions.h"
+
+void esp_nn_mul_elementwise_s8_ansi(const int8_t *input1_data,
+ const int8_t *input2_data,
+ const int32_t input1_offset,
+ const int32_t input2_offset,
+ int8_t *output,
+ const int32_t out_offset,
+ const int32_t out_mult,
+ const int32_t out_shift,
+ const int32_t activation_min,
+ const int32_t activation_max,
+ const int32_t size)
+{
+ for (int i = 0; i < size; i++) {
+ int32_t tmp1 = input1_data[i] + input1_offset;
+ int32_t tmp2 = input2_data[i] + input2_offset;
+
+ int32_t out = tmp1 * tmp2;
+ out = esp_nn_multiply_by_quantized_mult(out, out_mult, out_shift);
+ out = out + out_offset;
+
+ out = max(activation_min, min(out, activation_max));
+ output[i] = (int8_t) out;
+ }
+}
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/common/common_functions.h b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/common/common_functions.h
new file mode 100644
index 000000000..0a74eca40
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/common/common_functions.h
@@ -0,0 +1,255 @@
+// Copyright 2020-2021 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#pragma once
+
+#include
+#include
+#include
+
+/**
+ * c99 standard still doesn't strictly inline functions
+ * We need to use attribute as well to do this.
+ */
+#define __NN_FORCE_INLINE__ __attribute((always_inline)) static inline
+
+/* min/max macros */
+#ifndef max
+#define max(a, b) ({ \
+ __typeof__ (a) _a = (a); \
+ __typeof__ (b) _b = (b); \
+ _a > _b ? _a : _b; \
+})
+
+#define min(a, b) ({ \
+ __typeof__ (a) _a = (a); \
+ __typeof__ (b) _b = (b); \
+ _a < _b ? _a : _b; \
+})
+#endif
+
+__NN_FORCE_INLINE__ int32_t esp_nn_clz32(uint32_t in)
+{
+#if CONFIG_IDF_TARGET_ARCH_XTENSA
+ __asm__ volatile("nsau %0, %0" : "+r" (in));
+ return in;
+#elif defined(__GNUC__)
+ return __builtin_clz(in);
+#else
+ int32_t count = 32;
+ uint32_t x = in, y = in >> 16;
+ if (y != 0) {
+ count -= 16;
+ x = y;
+ }
+ y = x >> 8;
+ if (y != 0) {
+ count -= 8;
+ x = y;
+ }
+ y = x >> 4;
+ if (y != 0) {
+ count -= 4;
+ x = y;
+ }
+ y = x >> 2;
+ if (y != 0) {
+ count -= 2;
+ x = y;
+ }
+ y = x >> 1;
+ if (y != 0) {
+ return count - 2;
+ }
+ return count - x;
+#endif
+}
+
+/**
+ * Signed saturate a 32 bit value to 8 bits keeping output in 32 bit variable.
+ */
+__NN_FORCE_INLINE__ int32_t esp_nn_saturate8(int32_t in)
+{
+#if CONFIG_IDF_TARGET_ARCH_XTENSA
+ __asm__ volatile("clamps %0, %0, 7" : "+a"(in));
+ return in;
+#else
+ return max(INT8_MIN, min(in, INT8_MAX));
+#endif
+}
+
+__NN_FORCE_INLINE__ int32_t esp_nn_pick_sat_high32_of64(int64_t val64)
+{
+ int32_t sign = (int32_t) (val64 >> 63);
+ int32_t to_add = sign & ((1ul << 31) - 1);
+ return (int32_t) ((int64_t) (val64 + to_add) >> 31);
+}
+
+__NN_FORCE_INLINE__ int32_t esp_nn_sat_round_doubling_high_mul(int32_t in0, int32_t in1)
+{
+ int32_t result;
+ int64_t in0_64 = (int64_t) in0;
+ bool overflow = (in0 == in1) && (in0 == (int32_t) INT32_MIN);
+
+ /* Nudge value */
+ int64_t nudge_val = 1 << 30;
+ if ((in0 < 0) ^ (in1 < 0)) {
+ nudge_val = 1 - nudge_val;
+ }
+
+ /* Multiply and add nudge */
+ int64_t mult = in0_64 * in1 + nudge_val;
+
+ /* Round and pickup 32 bits */
+ result = esp_nn_pick_sat_high32_of64(mult);
+
+ return overflow ? INT32_MAX : result;
+}
+
+/**
+ * fast version
+ * this will fail for values closer to INT32_MAX and INT32_MIN by `1 << (exponent - 1)`.
+ * We can afford to do this because we are at the very last stage of filter.
+ * Also it is pretty rare condition as our output is going to be 8 bit.
+ */
+__NN_FORCE_INLINE__ int32_t esp_nn_div_by_power_of_two_fast(int32_t val, int32_t exponent)
+{
+ int32_t to_add = (1 << (exponent - 1)) - (val < 0);
+ return (int32_t) ((val + to_add) >> exponent);
+}
+
+__NN_FORCE_INLINE__ int32_t esp_nn_div_by_power_of_two(int32_t val, int32_t exponent)
+{
+ int32_t result;
+
+ const int32_t mask = (1 << exponent) - 1;
+ const int32_t remainder = val & mask;
+
+ result = val >> exponent;
+ int32_t threshold = (mask >> 1) + (result < 0);
+
+ if (remainder > threshold) {
+ result += 1;
+ }
+ return result;
+}
+
+__NN_FORCE_INLINE__ int32_t esp_nn_multiply_by_quantized_mult(int32_t x, int32_t mult, int32_t shift)
+{
+ int32_t left_shift = shift > 0 ? shift : 0;
+ int32_t right_shift = shift > 0 ? 0 : -shift;
+ int32_t result = esp_nn_sat_round_doubling_high_mul(x * (1 << left_shift), mult);
+ return esp_nn_div_by_power_of_two(result, right_shift);
+}
+
+__NN_FORCE_INLINE__ int32_t esp_nn_multiply_by_quantized_mult_fast(int32_t x, int32_t mult, int32_t shift)
+{
+ int32_t left_shift = max(shift, 0);
+ int32_t right_shift = left_shift - shift;
+
+ int64_t nudge_val = 1 << 30;
+ int64_t in0_64 = (int64_t) (x << left_shift);
+
+ /* Multiply and add nudge */
+ int64_t mult_64 = in0_64 * mult + nudge_val;
+ int32_t result = (int32_t) (mult_64 >> 31);
+ if (right_shift) {
+ result = esp_nn_div_by_power_of_two_fast(result, right_shift);
+ }
+ return result;
+}
+
+static void esp_nn_aligned_s8_pad_with_value(const int8_t *src, int8_t *dst,
+ const uint16_t input_wd,
+ const uint16_t input_ht,
+ const uint16_t channels,
+ const int32_t pad_val,
+ const uint16_t pad_wd,
+ const uint16_t pad_ht)
+{
+ /* memset with pad_val */
+ memset(dst, pad_val, ((input_wd + 2 * pad_wd) * (input_ht + 2 * pad_ht)) * channels);
+ dst += (pad_wd + input_wd + pad_wd) * channels;
+
+ for (int i = 0; i < input_ht; i++) {
+ dst += pad_wd * channels;
+ for (int j = 0; j < input_wd * channels; j++) {
+ *dst++ = *src++;
+ }
+ dst += pad_wd * channels;
+ }
+}
+
+static void esp_nn_aligned_s8_pad_end_with_value(const int8_t *src, int8_t *dst,
+ const uint16_t input_wd,
+ const uint16_t input_ht,
+ const uint16_t channels,
+ const int32_t pad_val,
+ const uint16_t pad_wd,
+ const uint16_t pad_ht)
+{
+ for (int i = 0; i < input_ht; i++) {
+ for (int j = 0; j < input_wd * channels; j++) {
+ *dst++ = *src++;
+ }
+ if (pad_wd) {
+ memset(dst, pad_val, pad_wd * channels);
+ dst += pad_wd * channels;
+ }
+ }
+ /* pad end `pad_ht` lines at end */
+ if (pad_ht) {
+ memset(dst, pad_val, (input_wd + pad_wd) * pad_ht * channels);
+ }
+}
+
+/**
+ * @brief convert 8 bit input data to 16 bit
+ *
+ * @param src int8_t source data
+ * @param dst int16_t dst data
+ * @param size length of data
+ * @param offset offset to be added to src data. Range: [-128, 127]
+ */
+__NN_FORCE_INLINE__ void esp_nn_s8_to_s16_with_offset(const int8_t *src, int16_t *dst,
+ const int size, const int32_t offset)
+{
+ int i = 0;
+ for (; i < size; i += 2) {
+ dst[i + 0] = src[i + 0] + offset;
+ dst[i + 1] = src[i + 1] + offset;
+ }
+ if(i < size) {
+ dst[i] = src[i] + offset;
+ }
+}
+
+/**
+ * @brief convert 8 bit input data to 16 bit
+ *
+ * @param src int8_t source data
+ * @param dst int16_t dst data
+ * @param size length of data
+ */
+__NN_FORCE_INLINE__ void esp_nn_s8_to_s16(const int8_t *src, int16_t *dst, const int size)
+{
+ int i = 0;
+ for (; i < size; i += 2) {
+ dst[i + 0] = src[i + 0];
+ dst[i + 1] = src[i + 1];
+ }
+ if(i < size) {
+ dst[i] = src[i];
+ }
+}
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/convolution/esp_nn_conv_ansi.c b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/convolution/esp_nn_conv_ansi.c
new file mode 100644
index 000000000..c7a415ba6
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/convolution/esp_nn_conv_ansi.c
@@ -0,0 +1,179 @@
+// Copyright 2020-2021 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#include "../../include/esp_nn_defs.h"
+
+#include "../common/common_functions.h"
+
+int esp_nn_get_conv_scratch_size_ansi(const data_dims_t *input_dims,
+ const data_dims_t *filter_dims,
+ const data_dims_t *output_dims,
+ const conv_params_t *conv_params)
+{
+ return 0;
+}
+
+void esp_nn_set_conv_scratch_buf_ansi(const void *buf)
+{
+
+}
+
+/**
+ * Assumption 1: i/p channels == o/p channels
+ * Assumption 2: Pointers are valid
+ * Assumption 3: dialation width = 1
+ */
+void esp_nn_conv_u8_ansi(const uint8_t *input_data,
+ const uint16_t input_wd,
+ const uint16_t input_ht,
+ const uint16_t in_channels,
+ const int32_t input_offset,
+ const uint16_t pad_wd,
+ const uint16_t pad_ht,
+ const uint16_t stride_wd,
+ const uint16_t stride_ht,
+ const uint8_t *filter_data,
+ const uint16_t filter_wd,
+ const uint16_t filter_ht,
+ const int32_t filter_offset,
+ const int32_t *bias,
+ uint8_t *out_data,
+ const uint16_t out_wd,
+ const uint16_t out_ht,
+ const uint16_t out_channels,
+ const int32_t out_offset,
+ const int32_t out_shift,
+ const int32_t out_mult,
+ const int32_t activation_min,
+ const int32_t activation_max)
+{
+ for (int out_y = 0; out_y < out_ht; out_y++) { //height loop
+ const int16_t base_y = (out_y * stride_ht) - pad_ht;
+ for (int out_x = 0; out_x < out_wd; out_x++) { //width_loop
+ const int16_t base_x = (out_x * stride_wd) - pad_wd;
+ for (int out_ch_idx = 0; out_ch_idx < out_channels; out_ch_idx++) {//channel_loop
+ int32_t result = 0;
+
+ /* Select filter so as the point doesn't lie outside block */
+ int filter_y_start = max(0, -base_y);
+ int filter_x_start = max(0, -base_x);
+ int filter_y_end = min(filter_ht, input_ht - base_y);
+ int filter_x_end = min(filter_wd, input_wd - base_x);
+
+ for (int filter_y_idx = filter_y_start; filter_y_idx < filter_y_end; filter_y_idx++) {
+ const int32_t idx_y = base_y + filter_y_idx;
+ for (int filter_x_idx = filter_x_start; filter_x_idx < filter_x_end; filter_x_idx++) {
+ const int32_t idx_x = base_x + filter_x_idx;
+ for (int in_ch_idx = 0; in_ch_idx < in_channels; in_ch_idx++) {
+ int32_t input_index = (idx_y * input_wd + idx_x) * in_channels + in_ch_idx;
+ int32_t filter_index = ((out_ch_idx * filter_ht + filter_y_idx)
+ * filter_wd + filter_x_idx) * in_channels
+ + in_ch_idx;
+ int32_t input_val = input_data[input_index] + input_offset;
+ int32_t filter_val = filter_data[filter_index] + filter_offset;
+ result += input_val * filter_val;
+ }
+ }
+ }
+ if (bias) {
+ result += bias[out_ch_idx];
+ }
+ result = esp_nn_multiply_by_quantized_mult(result, out_mult, out_shift);
+ result += out_offset;
+ result = max(result, activation_min);
+ result = min(result, activation_max);
+
+ int out_index = (out_y * out_wd + out_x) * out_channels + out_ch_idx;
+ out_data[out_index] = (uint8_t) result;
+ }
+ }
+ }
+}
+
+/**
+ * Assumption 1: i/p channels == o/p channels
+ * Assumption 2: Pointers are valid
+ * Assumption 3: dialation width = 1
+ */
+void esp_nn_conv_s8_ansi(const data_dims_t *input_dims,
+ const int8_t *input_data,
+ const data_dims_t *filter_dims,
+ const int8_t *filter_data,
+ const int32_t *bias,
+ const data_dims_t *output_dims,
+ int8_t *out_data,
+ const conv_params_t *conv_params,
+ const quant_data_t *quant_data)
+{
+ const uint16_t input_wd = input_dims->width;
+ const uint16_t input_ht = input_dims->height;
+ const uint16_t in_channels = input_dims->channels;
+ const int32_t input_offset = conv_params->in_offset;
+ const int32_t out_offset = conv_params->out_offset;
+ const uint16_t pad_wd = conv_params->padding.width;
+ const uint16_t pad_ht = conv_params->padding.height;
+ const uint16_t stride_wd = conv_params->stride.width;
+ const uint16_t stride_ht = conv_params->stride.height;
+ const uint16_t filter_wd = filter_dims->width;
+ const uint16_t filter_ht = filter_dims->height;
+ const uint16_t out_wd = output_dims->width;
+ const uint16_t out_ht = output_dims->height;
+ const uint16_t out_channels = output_dims->channels;
+ const int32_t *out_shift = quant_data->shift;
+ const int32_t *out_mult = quant_data->mult;
+ const int32_t activation_min = conv_params->activation.min;
+ const int32_t activation_max = conv_params->activation.max;
+
+ int32_t out_ch_idx, out_y, out_x, in_ch_idx, filter_y_idx, filter_x_idx;
+
+ for (out_y = 0; out_y < out_ht; out_y++) {
+ for (out_x = 0; out_x < out_wd; out_x++) {
+ for (out_ch_idx = 0; out_ch_idx < out_channels; out_ch_idx++) {
+ int32_t conv_out = 0;
+
+ const int32_t base_y = stride_ht * out_y - pad_ht;
+ const int32_t base_x = stride_wd * out_x - pad_wd;
+
+ const int32_t filter_y_start = max(0, -base_y);
+ const int32_t filter_x_start = max(0, -base_x);
+
+ const int32_t filter_y_end = min(filter_ht, input_ht - base_y);
+ const int32_t filter_x_end = min(filter_wd, input_wd - base_x);
+
+ for (filter_y_idx = filter_y_start; filter_y_idx < filter_y_end; filter_y_idx++) {
+ for (filter_x_idx = filter_x_start; filter_x_idx < filter_x_end; filter_x_idx++) {
+ const int32_t in_row = base_y + filter_y_idx;
+ const int32_t in_col = base_x + filter_x_idx;
+ int32_t input_base_offset = (in_row * input_wd + in_col) * in_channels;
+ int32_t filter_base_offset = out_ch_idx * in_channels * filter_ht * filter_wd +
+ (filter_y_idx * filter_wd + filter_x_idx) * in_channels;
+ for (in_ch_idx = 0; in_ch_idx < in_channels; in_ch_idx++) {
+ conv_out +=
+ (input_data[input_base_offset + in_ch_idx] + input_offset) *
+ filter_data[filter_base_offset + in_ch_idx];
+ }
+ }
+ }
+ if (bias) {
+ conv_out += bias[out_ch_idx];
+ }
+ conv_out = esp_nn_multiply_by_quantized_mult(conv_out, out_mult[out_ch_idx], out_shift[out_ch_idx]);
+ conv_out += out_offset;
+ conv_out = max(conv_out, activation_min);
+ conv_out = min(conv_out, activation_max);
+ *out_data++ = (int8_t) conv_out;
+ }
+ }
+ }
+}
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/convolution/esp_nn_conv_esp32s3.c b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/convolution/esp_nn_conv_esp32s3.c
new file mode 100644
index 000000000..8918bd861
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/convolution/esp_nn_conv_esp32s3.c
@@ -0,0 +1,463 @@
+// Copyright 2020-2021 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#include
+#include "../../include/esp_nn_defs.h"
+
+#include "../common/common_functions.h"
+
+static int16_t *scratch_buffer = NULL;
+
+extern void esp_nn_conv_s8_mult8_1x1_esp32s3(const int8_t *input_data,
+ const uint16_t input_wd,
+ const uint16_t input_ht,
+ const uint16_t in_channels,
+ const int32_t input_offset,
+ const int8_t *filter_aligned,
+ const int32_t *bias,
+ int8_t *out_data,
+ const uint16_t out_wd,
+ const uint16_t out_ht,
+ const uint16_t out_channels,
+ const int32_t out_offset,
+ const int32_t *out_shift,
+ const int32_t *out_mult,
+ const int32_t activation_min,
+ const int32_t activation_max,
+ void *buffer /* scratch buffer */);
+
+extern void esp_nn_conv_s16_mult4_1x1_esp32s3(const int16_t *input_data,
+ const uint16_t input_wd,
+ const uint16_t input_ht,
+ const uint16_t in_channels,
+ const int16_t *filter_data,
+ const int32_t *bias,
+ int8_t *out_data,
+ const uint16_t out_wd,
+ const uint16_t out_ht,
+ const uint16_t out_channels,
+ const int32_t out_offset,
+ const int32_t *out_shift,
+ const int32_t *out_mult,
+ const int32_t activation_min,
+ const int32_t activation_max,
+ void *buffer /* scratch buffer */);
+
+extern void esp_nn_conv_s16_mult8_esp32s3(const int16_t *input_data,
+ const uint16_t input_wd,
+ const uint16_t input_ht,
+ const uint16_t in_channels,
+ const uint16_t pad_wd,
+ const uint16_t pad_ht,
+ const uint16_t stride_wd,
+ const uint16_t stride_ht,
+ const int16_t *filter_data,
+ const uint16_t filter_wd,
+ const uint16_t filter_ht,
+ const int32_t *bias,
+ int8_t *out_data,
+ const uint16_t out_wd,
+ const uint16_t out_ht,
+ const uint16_t out_channels,
+ const int32_t out_offset,
+ const int32_t *out_shift,
+ const int32_t *out_mult,
+ const int32_t activation_min,
+ const int32_t activation_max);
+
+extern void esp_nn_aligned_s8_to_s16_with_offset_esp32s3(const int8_t *src, int16_t *dst,
+ const int size, const int32_t offset);
+
+extern void esp_nn_s8_to_s16_esp32s3(const int8_t *src, int16_t *dst, const int size);
+
+static void esp_nn_conv_s8_unrolled(const data_dims_t *input_dims,
+ const int8_t *input_data,
+ const data_dims_t *filter_dims,
+ const int8_t *filter_data,
+ const int32_t *bias,
+ const data_dims_t *output_dims,
+ int8_t *out_data,
+ const conv_params_t *conv_params,
+ const quant_data_t *quant_data)
+{
+ const uint16_t input_wd = input_dims->width;
+ const uint16_t input_ht = input_dims->height;
+ const uint16_t in_ch = input_dims->channels;
+ const int32_t input_offset = conv_params->in_offset;
+ const int32_t out_offset = conv_params->out_offset;
+ const uint16_t pad_wd = conv_params->padding.width;
+ const uint16_t pad_ht = conv_params->padding.height;
+ const uint16_t stride_wd = conv_params->stride.width;
+ const uint16_t stride_ht = conv_params->stride.height;
+ const uint16_t filter_wd = filter_dims->width;
+ const uint16_t filter_ht = filter_dims->height;
+ const uint16_t out_wd = output_dims->width;
+ const uint16_t out_ht = output_dims->height;
+ const uint16_t out_ch = output_dims->channels;
+ const int32_t *out_shift = quant_data->shift;
+ const int32_t *out_mult = quant_data->mult;
+ const int32_t activation_min = conv_params->activation.min;
+ const int32_t activation_max = conv_params->activation.max;
+
+ int32_t out_ch_idx, out_y, out_x, in_ch_idx, filter_y_idx, filter_x_idx;
+
+ for (out_y = 0; out_y < out_ht; out_y++) {
+ for (out_x = 0; out_x < out_wd; out_x++) {
+ for (out_ch_idx = 0; out_ch_idx < out_ch; out_ch_idx++) {
+ int32_t conv_out = 0;
+
+ const int32_t base_y = stride_ht * out_y - pad_ht;
+ const int32_t base_x = stride_wd * out_x - pad_wd;
+
+ const int32_t filter_y_start = max(0, -base_y);
+ const int32_t filter_x_start = max(0, -base_x);
+
+ const int32_t filter_y_end = min(filter_ht, input_ht - base_y);
+ const int32_t filter_x_end = min(filter_wd, input_wd - base_x);
+
+ for (filter_y_idx = filter_y_start; filter_y_idx < filter_y_end; filter_y_idx++) {
+ for (filter_x_idx = filter_x_start; filter_x_idx < filter_x_end; filter_x_idx++) {
+ const int32_t in_row = base_y + filter_y_idx;
+ const int32_t in_col = base_x + filter_x_idx;
+ int32_t input_base_offset = (in_row * input_wd + in_col) * in_ch;
+ int32_t filter_base_offset = out_ch_idx * in_ch * filter_ht * filter_wd +
+ (filter_y_idx * filter_wd + filter_x_idx) * in_ch;
+ for (in_ch_idx = 0; in_ch_idx < in_ch; in_ch_idx++) {
+ conv_out +=
+ (input_data[input_base_offset + in_ch_idx] + input_offset) *
+ filter_data[filter_base_offset + in_ch_idx];
+ }
+ }
+ }
+ if (bias) {
+ conv_out += bias[out_ch_idx];
+ }
+ conv_out = esp_nn_multiply_by_quantized_mult_fast(conv_out, out_mult[out_ch_idx], out_shift[out_ch_idx]);
+ conv_out += out_offset;
+ conv_out = max(conv_out, activation_min);
+ conv_out = min(conv_out, activation_max);
+ *out_data++ = (int8_t) conv_out;
+ }
+ }
+ }
+}
+
+static void esp_nn_conv_s8_pad_valid(const int8_t *input_data,
+ const uint16_t input_wd,
+ const uint16_t input_ht,
+ const uint16_t in_channels,
+ const int32_t input_offset,
+ const uint16_t stride_wd,
+ const uint16_t stride_ht,
+ const int8_t *filter_data,
+ const uint16_t filter_wd,
+ const uint16_t filter_ht,
+ const int32_t *bias,
+ int8_t *out_data,
+ const uint16_t out_wd,
+ const uint16_t out_ht,
+ const uint16_t out_channels,
+ const int32_t out_offset,
+ const int32_t *out_shift,
+ const int32_t *out_mult,
+ const int32_t activation_min,
+ const int32_t activation_max)
+{
+ int32_t out_ch_idx, out_y, out_x, in_ch_idx, filter_y_idx, filter_x_idx;
+
+ for (out_y = 0; out_y < out_ht; out_y++) {
+ for (out_x = 0; out_x < out_wd; out_x++) {
+ for (out_ch_idx = 0; out_ch_idx < out_channels; out_ch_idx++) {
+ int32_t conv_out = 0;
+
+ const int32_t base_y = stride_ht * out_y;
+ const int32_t base_x = stride_wd * out_x;
+
+ for (filter_y_idx = 0; filter_y_idx < filter_ht; filter_y_idx++) {
+ for (filter_x_idx = 0; filter_x_idx < filter_wd; filter_x_idx++) {
+ const int32_t in_row = base_y + filter_y_idx;
+ const int32_t in_col = base_x + filter_x_idx;
+ int32_t input_base_offset = (in_row * input_wd + in_col) * in_channels;
+ int32_t filter_base_offset = out_ch_idx * in_channels * filter_ht * filter_wd +
+ (filter_y_idx * filter_wd + filter_x_idx) * in_channels;
+ const int8_t *input_data_ptr = input_data + input_base_offset;
+ const int8_t *filter_data_ptr = filter_data + filter_base_offset;
+ for (in_ch_idx = 0; in_ch_idx < in_channels; in_ch_idx++) {
+ conv_out += (*input_data_ptr++ + input_offset) * *filter_data_ptr++;
+ }
+ }
+ }
+ if (bias) {
+ conv_out += bias[out_ch_idx];
+ }
+ conv_out = esp_nn_multiply_by_quantized_mult_fast(conv_out, out_mult[out_ch_idx], out_shift[out_ch_idx]);
+ conv_out += out_offset;
+ conv_out = max(conv_out, activation_min);
+ conv_out = min(conv_out, activation_max);
+ *out_data++ = (int8_t) conv_out;
+ }
+ }
+ }
+}
+
+static void esp_nn_conv_s8_pad_valid_3x3(const int8_t *input_data,
+ const uint16_t input_wd,
+ const uint16_t input_ht,
+ const uint16_t in_channels,
+ const int32_t input_offset,
+ const uint16_t stride_wd,
+ const uint16_t stride_ht,
+ const int8_t *filter_data,
+ const int32_t *bias,
+ int8_t *out_data,
+ const uint16_t out_wd,
+ const uint16_t out_ht,
+ const uint16_t out_channels,
+ const int32_t out_offset,
+ const int32_t *out_shift,
+ const int32_t *out_mult,
+ const int32_t activation_min,
+ const int32_t activation_max)
+{
+ int32_t out_ch_idx, out_y, out_x, in_ch_idx, filter_y_idx, filter_x_idx;
+
+ for (out_y = 0; out_y < out_ht; out_y++) {
+ for (out_x = 0; out_x < out_wd; out_x++) {
+ const int32_t base_y = stride_ht * out_y;
+ const int32_t base_x = stride_wd * out_x;
+ for (out_ch_idx = 0; out_ch_idx < out_channels; out_ch_idx++) {
+ int32_t conv_out = 0;
+ for (filter_y_idx = 0; filter_y_idx < 3; filter_y_idx++) {
+ for (filter_x_idx = 0; filter_x_idx < 3; filter_x_idx++) {
+ const int32_t in_row = base_y + filter_y_idx;
+ const int32_t in_col = base_x + filter_x_idx;
+ int32_t input_base_offset = (in_row * input_wd + in_col) * in_channels;
+ int32_t filter_base_offset = out_ch_idx * in_channels * 3 * 3 +
+ (filter_y_idx * 3 + filter_x_idx) * in_channels;
+ const int8_t *input_data_ptr = input_data + input_base_offset;
+ const int8_t *filter_data_ptr = filter_data + filter_base_offset;
+ for (in_ch_idx = 0; in_ch_idx < in_channels; in_ch_idx++) {
+ conv_out += (*input_data_ptr++ + input_offset) * *filter_data_ptr++;
+ }
+ }
+ }
+ if (bias) {
+ conv_out += bias[out_ch_idx];
+ }
+ conv_out = esp_nn_multiply_by_quantized_mult_fast(conv_out, out_mult[out_ch_idx], out_shift[out_ch_idx]);
+ conv_out += out_offset;
+ conv_out = max(conv_out, activation_min);
+ conv_out = min(conv_out, activation_max);
+ *out_data++ = (int8_t) conv_out;
+ }
+ }
+ }
+}
+
+static void esp_nn_conv_s8_pad_valid_ch3_3x3(const int8_t *input_data,
+ const uint16_t input_wd,
+ const uint16_t input_ht,
+ const int32_t input_offset,
+ const uint16_t stride_wd,
+ const uint16_t stride_ht,
+ const int8_t *filter_data,
+ const int32_t *bias,
+ int8_t *out_data,
+ const uint16_t out_wd,
+ const uint16_t out_ht,
+ const uint16_t out_channels,
+ const int32_t out_offset,
+ const int32_t *out_shift,
+ const int32_t *out_mult,
+ const int32_t activation_min,
+ const int32_t activation_max)
+{
+ int32_t out_ch_idx, out_y, out_x, filter_y_idx;
+
+ /* use scratch_buffer to pre-compute offset factor */
+ int16_t *filter_sum = (int16_t *) scratch_buffer;
+ const int8_t *filter_ptr = filter_data;
+ for (out_ch_idx = 0; out_ch_idx < out_channels; out_ch_idx++) {
+ int16_t sum_val = 0;
+ for (int i = 0; i < 9; i++) {
+ sum_val += *filter_ptr++;
+ sum_val += *filter_ptr++;
+ sum_val += *filter_ptr++;
+ }
+ *filter_sum++ = sum_val;
+ }
+
+ for (out_y = 0; out_y < out_ht; out_y++) {
+ for (out_x = 0; out_x < out_wd; out_x++) {
+ const int8_t *filter_data_ptr = filter_data;
+ const int32_t base_y = stride_ht * out_y;
+ const int32_t base_x = stride_wd * out_x;
+ const int8_t *input_base_ptr = input_data + (base_y * input_wd + base_x) * 3;
+ int16_t *filter_sum = (int16_t *) scratch_buffer;
+ for (out_ch_idx = 0; out_ch_idx < out_channels; out_ch_idx++) {
+ int32_t conv_out = 0;
+
+ for (filter_y_idx = 0; filter_y_idx < 3; filter_y_idx++) {
+ const int8_t *input_data_ptr = input_base_ptr + (filter_y_idx * input_wd) * 3;
+ conv_out += (*input_data_ptr++) * (*filter_data_ptr++);
+ conv_out += (*input_data_ptr++) * (*filter_data_ptr++);
+ conv_out += (*input_data_ptr++) * (*filter_data_ptr++);
+
+ conv_out += (*input_data_ptr++) * (*filter_data_ptr++);
+ conv_out += (*input_data_ptr++) * (*filter_data_ptr++);
+ conv_out += (*input_data_ptr++) * (*filter_data_ptr++);
+
+ conv_out += (*input_data_ptr++) * (*filter_data_ptr++);
+ conv_out += (*input_data_ptr++) * (*filter_data_ptr++);
+ conv_out += (*input_data_ptr++) * (*filter_data_ptr++);
+ }
+
+ conv_out += *filter_sum++ * input_offset;
+
+ if (bias) {
+ conv_out += bias[out_ch_idx];
+ }
+ conv_out = esp_nn_multiply_by_quantized_mult_fast(conv_out, out_mult[out_ch_idx], out_shift[out_ch_idx]);
+ conv_out += out_offset;
+ conv_out = max(conv_out, activation_min);
+ conv_out = min(conv_out, activation_max);
+ *out_data++ = (int8_t) conv_out;
+ }
+ }
+ }
+}
+
+int esp_nn_get_conv_scratch_size_esp32s3(const data_dims_t *input_dims,
+ const data_dims_t *filter_dims,
+ const data_dims_t *output_dims,
+ const conv_params_t *conv_params)
+{
+ const uint16_t input_wd = input_dims->width;
+ const uint16_t input_ht = input_dims->height;
+ const uint16_t in_ch = input_dims->channels;
+ const uint16_t filter_wd = filter_dims->width;
+ const uint16_t filter_ht = filter_dims->height;
+ const uint16_t out_ch = output_dims->channels;
+ const uint16_t pad_wd = conv_params->padding.width;
+ const uint16_t pad_ht = conv_params->padding.height;
+ const uint16_t stride_wd = conv_params->stride.width;
+ const uint16_t stride_ht = conv_params->stride.height;
+
+ int filter_size = filter_wd * filter_ht * in_ch * out_ch;
+ int input_size = input_wd * input_ht * in_ch;
+
+ int transpose_buf_size = 2 * (8 * in_ch); /* to store intermediate data */
+ if (input_wd * input_ht < 8) {
+ transpose_buf_size = 0; // not using this for leftover
+ }
+ int align_buf_size = 32; /* extra buffer for alignment */
+ if (in_ch % 8 == 0 && filter_wd == 1 && filter_ht == 1 &&
+ pad_wd == 0 && pad_ht == 0 && stride_wd == 1 && stride_ht == 1) {
+ return filter_size + transpose_buf_size + align_buf_size;
+ }
+ return 2 * (filter_size + input_size) + transpose_buf_size + align_buf_size;
+}
+
+void esp_nn_set_conv_scratch_buf_esp32s3(void *buf)
+{
+ scratch_buffer = (int16_t *) buf;
+}
+
+void esp_nn_conv_s8_esp32s3(const data_dims_t *input_dims,
+ const int8_t *input,
+ const data_dims_t *filter_dims,
+ const int8_t *filter_data,
+ const int32_t *bias,
+ const data_dims_t *output_dims,
+ int8_t *out_data,
+ const conv_params_t *conv_params,
+ const quant_data_t *quant_data)
+{
+ const uint16_t input_wd = input_dims->width;
+ const uint16_t input_ht = input_dims->height;
+ const uint16_t channels = input_dims->channels;
+ const int32_t input_offset = conv_params->in_offset;
+ const int32_t out_offset = conv_params->out_offset;
+ const uint16_t pad_wd = conv_params->padding.width;
+ const uint16_t pad_ht = conv_params->padding.height;
+ const uint16_t stride_wd = conv_params->stride.width;
+ const uint16_t stride_ht = conv_params->stride.height;
+ const uint16_t filter_wd = filter_dims->width;
+ const uint16_t filter_ht = filter_dims->height;
+ const uint16_t out_wd = output_dims->width;
+ const uint16_t out_ht = output_dims->height;
+ const uint16_t out_channels = output_dims->channels;
+ const int32_t *out_shift = quant_data->shift;
+ const int32_t *out_mult = quant_data->mult;
+ const int32_t activation_min = conv_params->activation.min;
+ const int32_t activation_max = conv_params->activation.max;
+
+ int filter_size = filter_wd * filter_ht * channels * out_channels;
+ int input_size = input_wd * input_ht * channels;
+ int align_len = 16 - (filter_size & 15);
+ int16_t *filter_data16 = scratch_buffer;
+ int16_t *input_data16 = scratch_buffer + filter_size + align_len;
+
+ if (scratch_buffer == NULL) {
+ printf("esp_nn_conv error! scratch_buffer not set!\n");
+ return;
+ }
+
+ if (channels % 8 == 0 && filter_wd == 1 && filter_ht == 1 &&
+ pad_wd == 0 && pad_ht == 0 && stride_wd == 1 && stride_ht == 1) {
+ int8_t *filter_aligned = (int8_t *) scratch_buffer;
+ int scratch_offset = (int) (filter_aligned + filter_size);
+ void *scratch_buf = (void *) (scratch_offset + 16 - (scratch_offset & 15));
+ memcpy(filter_aligned, filter_data, filter_size); // copy to aligned address
+ esp_nn_conv_s8_mult8_1x1_esp32s3(
+ input, input_wd, input_ht, channels, input_offset, filter_aligned,
+ bias, out_data, out_wd, out_ht, out_channels, out_offset,
+ out_shift, out_mult, activation_min, activation_max, scratch_buf);
+ } else if (channels % 4 == 0 && filter_wd == 1 && filter_ht == 1 &&
+ (input_wd * input_ht) % 4 == 0 && /* TODO: remove this check */
+ pad_wd == 0 && pad_ht == 0 && stride_wd == 1 && stride_ht == 1) {
+ int scratch_offset = (int) (input_data16 + input_size);
+ void *scratch_buf = (void *) (scratch_offset + 16 - (scratch_offset & 15));
+ esp_nn_s8_to_s16_esp32s3(filter_data, filter_data16, filter_size);
+ esp_nn_aligned_s8_to_s16_with_offset_esp32s3(input, input_data16, input_size, input_offset);
+ esp_nn_conv_s16_mult4_1x1_esp32s3(
+ input_data16, input_wd, input_ht, channels, filter_data16,
+ bias, out_data, out_wd, out_ht, out_channels, out_offset,
+ out_shift, out_mult, activation_min, activation_max, scratch_buf);
+ } else if (channels % 8 == 0) {
+ esp_nn_s8_to_s16_esp32s3(filter_data, filter_data16, filter_size);
+ esp_nn_aligned_s8_to_s16_with_offset_esp32s3(input, input_data16, input_size, input_offset);
+ esp_nn_conv_s16_mult8_esp32s3(
+ input_data16, input_wd, input_ht, channels, pad_wd, pad_ht,
+ stride_wd, stride_ht, filter_data16, filter_wd, filter_ht, bias,
+ out_data, out_wd, out_ht, out_channels, out_offset, out_shift,
+ out_mult, activation_min, activation_max);
+ } else if (pad_wd == 0 && pad_ht == 0) {
+ if (filter_wd == 3 && filter_ht == 3 && channels == 3) {
+ esp_nn_conv_s8_pad_valid_ch3_3x3(input, input_wd, input_ht, input_offset,
+ stride_wd, stride_ht, filter_data, bias,
+ out_data, out_wd, out_ht, out_channels, out_offset,
+ out_shift, out_mult, activation_min, activation_max);
+ } else {
+ esp_nn_conv_s8_pad_valid(input, input_wd, input_ht, channels, input_offset,
+ stride_wd, stride_ht, filter_data, filter_wd, filter_ht, bias,
+ out_data, out_wd, out_ht, out_channels, out_offset, out_shift,
+ out_mult, activation_min, activation_max);
+ }
+ } else {
+ /* Basic unrolled version */
+ esp_nn_conv_s8_unrolled(input_dims, input, filter_dims, filter_data,
+ bias, output_dims, out_data, conv_params, quant_data);
+ }
+}
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/convolution/esp_nn_conv_opt.c b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/convolution/esp_nn_conv_opt.c
new file mode 100644
index 000000000..80b1e13a5
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/convolution/esp_nn_conv_opt.c
@@ -0,0 +1,179 @@
+// Copyright 2020-2021 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#include "../../include/esp_nn_defs.h"
+
+#include "../common/common_functions.h"
+
+int esp_nn_get_conv_scratch_size_opt(const data_dims_t *input_dims,
+ const data_dims_t *filter_dims,
+ const data_dims_t *output_dims,
+ const conv_params_t *conv_params)
+{
+ return 0;
+}
+
+void esp_nn_set_conv_scratch_buf_opt(const void *buf)
+{
+
+}
+
+__attribute__ ((noinline))
+static void esp_nn_conv_s8_1x1(const data_dims_t *input_dims,
+ const int8_t *input_data,
+ const int8_t *filter_data,
+ const int32_t *bias,
+ const data_dims_t *output_dims,
+ int8_t *out_data,
+ const conv_params_t *conv_params,
+ const quant_data_t *quant_data)
+{
+ const uint16_t input_wd = input_dims->width;
+ const uint16_t in_channels = input_dims->channels;
+ const int32_t input_offset = conv_params->in_offset;
+ const int32_t out_offset = conv_params->out_offset;
+ const uint16_t stride_wd = conv_params->stride.width;
+ const uint16_t stride_ht = conv_params->stride.height;
+ const uint16_t out_wd = output_dims->width;
+ const uint16_t out_ht = output_dims->height;
+ const uint16_t out_channels = output_dims->channels;
+ const int32_t activation_min = conv_params->activation.min;
+ const int32_t activation_max = conv_params->activation.max;
+
+ for (int32_t in_row = 0; in_row < out_ht * stride_ht; in_row += stride_ht) {
+ for (int32_t in_col = 0; in_col < out_wd * stride_wd; in_col += stride_wd) {
+ const int32_t *out_mult = quant_data->mult;
+ const int32_t *out_shift = quant_data->shift;
+ const int8_t *filter_ptr = filter_data;
+ const int8_t *input_base_ptr = input_data + (in_row * input_wd + in_col) * in_channels;
+ int32_t out_ch_idx = 0;
+ for (; out_ch_idx < out_channels; out_ch_idx++) {
+ int32_t conv_out = 0;
+
+ const int8_t *input_ptr = input_base_ptr;
+
+ int32_t in_ch_idx = 0;
+ for (; in_ch_idx < in_channels - 3; in_ch_idx += 4) {
+ conv_out += (*input_ptr++ + input_offset) * *filter_ptr++;
+ conv_out += (*input_ptr++ + input_offset) * *filter_ptr++;
+ conv_out += (*input_ptr++ + input_offset) * *filter_ptr++;
+ conv_out += (*input_ptr++ + input_offset) * *filter_ptr++;
+ }
+ for (; in_ch_idx < in_channels; in_ch_idx ++) {
+ conv_out += (*input_ptr++ + input_offset) * *filter_ptr++;
+ }
+ if (bias) {
+ conv_out += bias[out_ch_idx];
+ }
+ conv_out = esp_nn_multiply_by_quantized_mult_fast(conv_out, *out_mult++, *out_shift++);
+ conv_out += out_offset;
+ conv_out = max(conv_out, activation_min);
+ conv_out = min(conv_out, activation_max);
+ *out_data++ = (int8_t) conv_out;
+ }
+ }
+ }
+}
+
+/**
+ * Assumption 1: i/p channels == o/p channels
+ * Assumption 2: Pointers are valid
+ * Assumption 3: dialation width = 1
+ */
+void esp_nn_conv_s8_opt(const data_dims_t *input_dims,
+ const int8_t *input_data,
+ const data_dims_t *filter_dims,
+ const int8_t *filter_data,
+ const int32_t *bias,
+ const data_dims_t *output_dims,
+ int8_t *out_data,
+ const conv_params_t *conv_params,
+ const quant_data_t *quant_data)
+{
+ const uint16_t filter_wd = filter_dims->width;
+ const uint16_t filter_ht = filter_dims->height;
+
+ if (filter_wd == 1 && filter_ht == 1) {
+ esp_nn_conv_s8_1x1(input_dims, input_data, filter_data, bias,
+ output_dims, out_data, conv_params, quant_data);
+ return;
+ }
+
+ const uint16_t input_wd = input_dims->width;
+ const uint16_t input_ht = input_dims->height;
+ const uint16_t in_channels = input_dims->channels;
+ const int32_t input_offset = conv_params->in_offset;
+ const int32_t out_offset = conv_params->out_offset;
+ const uint16_t pad_wd = conv_params->padding.width;
+ const uint16_t pad_ht = conv_params->padding.height;
+ const uint16_t stride_wd = conv_params->stride.width;
+ const uint16_t stride_ht = conv_params->stride.height;
+ const uint16_t out_wd = output_dims->width;
+ const uint16_t out_ht = output_dims->height;
+ const uint16_t out_channels = output_dims->channels;
+ const int32_t activation_min = conv_params->activation.min;
+ const int32_t activation_max = conv_params->activation.max;
+
+ int32_t out_ch_idx, out_y, out_x, filter_y_idx, filter_x_idx;
+
+ for (out_y = 0; out_y < out_ht; out_y++) {
+ for (out_x = 0; out_x < out_wd; out_x++) {
+ const int32_t *out_shift = quant_data->shift;
+ const int32_t *out_mult = quant_data->mult;
+ for (out_ch_idx = 0; out_ch_idx < out_channels; out_ch_idx++) {
+ int32_t conv_out = 0;
+
+ const int32_t base_y = stride_ht * out_y - pad_ht;
+ const int32_t base_x = stride_wd * out_x - pad_wd;
+
+ const int32_t filter_y_start = max(0, -base_y);
+ const int32_t filter_x_start = max(0, -base_x);
+
+ const int32_t filter_y_end = min(filter_ht, input_ht - base_y);
+ const int32_t filter_x_end = min(filter_wd, input_wd - base_x);
+
+ for (filter_y_idx = filter_y_start; filter_y_idx < filter_y_end; filter_y_idx++) {
+ for (filter_x_idx = filter_x_start; filter_x_idx < filter_x_end; filter_x_idx++) {
+ const int32_t in_row = base_y + filter_y_idx;
+ const int32_t in_col = base_x + filter_x_idx;
+
+ const int8_t *input_ptr = input_data +
+ (in_row * input_wd + in_col) * in_channels;
+ const int8_t *filter_ptr = filter_data +
+ out_ch_idx * in_channels * filter_ht * filter_wd +
+ (filter_y_idx * filter_wd + filter_x_idx) * in_channels;
+ int32_t in_ch_idx = 0;
+ for (; in_ch_idx < in_channels - 3; in_ch_idx += 4) {
+ conv_out += (*input_ptr++ + input_offset) * *filter_ptr++;
+ conv_out += (*input_ptr++ + input_offset) * *filter_ptr++;
+ conv_out += (*input_ptr++ + input_offset) * *filter_ptr++;
+ conv_out += (*input_ptr++ + input_offset) * *filter_ptr++;
+ }
+ for (; in_ch_idx < in_channels; in_ch_idx ++) {
+ conv_out += (*input_ptr++ + input_offset) * *filter_ptr++;
+ }
+ }
+ }
+ if (bias) {
+ conv_out += bias[out_ch_idx];
+ }
+ conv_out = esp_nn_multiply_by_quantized_mult_fast(conv_out, *out_mult++, *out_shift++);
+ conv_out += out_offset;
+ conv_out = max(conv_out, activation_min);
+ conv_out = min(conv_out, activation_max);
+ *out_data++ = (int8_t) conv_out;
+ }
+ }
+ }
+}
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/convolution/esp_nn_depthwise_conv_ansi.c b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/convolution/esp_nn_depthwise_conv_ansi.c
new file mode 100644
index 000000000..7cd3cde1f
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/convolution/esp_nn_depthwise_conv_ansi.c
@@ -0,0 +1,100 @@
+// Copyright 2020-2021 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#include "../../include/esp_nn_defs.h"
+#include "../common/common_functions.h"
+
+int esp_nn_get_depthwise_conv_scratch_size_ansi(const data_dims_t *input_dims,
+ const data_dims_t *filter_dims,
+ const data_dims_t *output_dims,
+ const dw_conv_params_t *conv_params)
+{
+ return 0;
+}
+
+void esp_nn_set_depthwise_conv_scratch_buf_ansi(const void *buf)
+{
+
+}
+
+void esp_nn_depthwise_conv_s8_ansi(const data_dims_t *input_dims,
+ const int8_t *input_data,
+ const data_dims_t *filter_dims,
+ const int8_t *filter_data,
+ const int32_t *bias,
+ const data_dims_t *output_dims,
+ int8_t *out_data,
+ const dw_conv_params_t *conv_params,
+ const quant_data_t *quant_data)
+{
+ const uint16_t input_wd = input_dims->width;
+ const uint16_t input_ht = input_dims->height;
+ const uint16_t channels = input_dims->channels;
+ const int32_t input_offset = conv_params->in_offset;
+ const int32_t out_offset = conv_params->out_offset;
+ const uint16_t pad_wd = conv_params->padding.width;
+ const uint16_t pad_ht = conv_params->padding.height;
+ const uint16_t stride_wd = conv_params->stride.width;
+ const uint16_t stride_ht = conv_params->stride.height;
+ const uint16_t filter_wd = filter_dims->width;
+ const uint16_t filter_ht = filter_dims->height;
+ const uint16_t out_wd = output_dims->width;
+ const uint16_t out_ht = output_dims->height;
+ const int32_t *out_shift = quant_data->shift;
+ const int32_t *out_mult = quant_data->mult;
+ const int32_t activation_min = conv_params->activation.min;
+ const int32_t activation_max = conv_params->activation.max;
+ const uint16_t ch_mult = conv_params->ch_mult;
+
+ int out_idx = 0;
+ for (int out_y = 0; out_y < out_ht; out_y++) { //height loop
+ const int16_t base_y = (out_y * stride_ht) - pad_ht;
+ for (int out_x = 0; out_x < out_wd; out_x++) { //width_loop
+ const int16_t base_x = (out_x * stride_wd) - pad_wd;
+ for (int ch_idx = 0; ch_idx < channels; ch_idx++) {//channel_loop
+ for (int ch_mult_idx = 0; ch_mult_idx < ch_mult; ch_mult_idx++) {
+ int32_t result = 0;
+ const int out_ch_idx = ch_mult_idx + ch_idx * ch_mult;
+
+ /* Select filter so as the point doesn't lie outside block */
+ int filter_y_start = max(0, -base_y);
+ int filter_x_start = max(0, -base_x);
+ int filter_y_end = min(filter_ht, input_ht - base_y);
+ int filter_x_end = min(filter_wd, input_wd - base_x);
+
+ for (int filter_y_idx = filter_y_start; filter_y_idx < filter_y_end; filter_y_idx++) {
+ const int32_t idx_y = base_y + filter_y_idx;
+ for (int filter_x_idx = filter_x_start; filter_x_idx < filter_x_end; filter_x_idx++) {
+ const int32_t idx_x = base_x + filter_x_idx;
+ int32_t input_index = (idx_y * input_wd + idx_x) * channels + ch_idx;
+ int32_t filter_index = (filter_y_idx * filter_wd + filter_x_idx) * (channels * ch_mult) + out_ch_idx;
+ int32_t input_val = input_data[input_index] + input_offset;
+ int32_t filter_val = filter_data[filter_index];
+ result += input_val * filter_val;
+ }
+ }
+ if (bias) {
+ result += bias[out_ch_idx];
+ }
+ result = esp_nn_multiply_by_quantized_mult(result, out_mult[out_ch_idx], out_shift[out_ch_idx]);
+ result += out_offset;
+ result = max(result, activation_min);
+ result = min(result, activation_max);
+
+ out_data[out_idx++] = result;
+ }
+ }
+ }
+ }
+}
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/convolution/esp_nn_depthwise_conv_opt.c b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/convolution/esp_nn_depthwise_conv_opt.c
new file mode 100644
index 000000000..d7063f72c
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/convolution/esp_nn_depthwise_conv_opt.c
@@ -0,0 +1,291 @@
+// Copyright 2020-2021 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#include "../../include/esp_nn_defs.h"
+#include "../common/common_functions.h"
+
+int esp_nn_get_depthwise_conv_scratch_size_opt(const data_dims_t *input_dims,
+ const data_dims_t *filter_dims,
+ const data_dims_t *output_dims,
+ const dw_conv_params_t *conv_params)
+{
+ return 0;
+}
+
+void esp_nn_set_depthwise_conv_scratch_buf_opt(const void *buf)
+{
+
+}
+
+/* common channel multiplier == 1 case */
+__attribute__ ((noinline))
+static void esp_nn_depthwise_conv_s8_ch_mult_1(const data_dims_t *input_dims,
+ const int8_t *input_data,
+ const data_dims_t *filter_dims,
+ const int8_t *filter_data,
+ const int32_t *bias,
+ const data_dims_t *output_dims,
+ int8_t *out_data,
+ const dw_conv_params_t *conv_params,
+ const quant_data_t *quant_data)
+{
+ const uint16_t input_wd = input_dims->width;
+ const uint16_t input_ht = input_dims->height;
+ const uint16_t channels = input_dims->channels;
+ const int32_t input_offset = conv_params->in_offset;
+ const int32_t out_offset = conv_params->out_offset;
+ const uint16_t pad_wd = conv_params->padding.width;
+ const uint16_t pad_ht = conv_params->padding.height;
+ const uint16_t stride_wd = conv_params->stride.width;
+ const uint16_t stride_ht = conv_params->stride.height;
+ const uint16_t filter_wd = filter_dims->width;
+ const uint16_t filter_ht = filter_dims->height;
+ const uint16_t out_wd = output_dims->width;
+ const uint16_t out_ht = output_dims->height;
+ const int32_t activation_min = conv_params->activation.min;
+ const int32_t activation_max = conv_params->activation.max;
+
+ int out_idx = 0;
+ for (int out_y = 0; out_y < out_ht; out_y++) { //height loop
+ const int16_t base_y = (out_y * stride_ht) - pad_ht;
+ for (int out_x = 0; out_x < out_wd; out_x++) { //width_loop
+ const int16_t base_x = (out_x * stride_wd) - pad_wd;
+
+ const int32_t *out_shift = quant_data->shift;
+ const int32_t *out_mult = quant_data->mult;
+
+ /* Select filter so as the point doesn't lie outside block */
+ int filter_y_start = max(0, -base_y);
+ int filter_x_start = max(0, -base_x);
+ int filter_y_end = min(filter_ht, input_ht - base_y);
+ int filter_x_end = min(filter_wd, input_wd - base_x);
+
+ int ch_idx = 0;
+ for (; ch_idx < channels - 3; ch_idx += 4) {//channel_loop
+ int32_t result0 = 0;
+ int32_t result1 = 0;
+ int32_t result2 = 0;
+ int32_t result3 = 0;
+
+ for (int filter_y_idx = filter_y_start; filter_y_idx < filter_y_end; filter_y_idx++) {
+ const int32_t idx_y = base_y + filter_y_idx;
+ for (int filter_x_idx = filter_x_start; filter_x_idx < filter_x_end; filter_x_idx++) {
+ const int32_t idx_x = base_x + filter_x_idx;
+ int32_t input_index = (idx_y * input_wd + idx_x) * channels + ch_idx;
+ int32_t filter_index = (filter_y_idx * filter_wd + filter_x_idx) * (channels) + ch_idx;
+ int32_t input_val0 = input_data[input_index + 0] + input_offset;
+ int32_t input_val1 = input_data[input_index + 1] + input_offset;
+ int32_t input_val2 = input_data[input_index + 2] + input_offset;
+ int32_t input_val3 = input_data[input_index + 3] + input_offset;
+ int32_t filter_val0 = filter_data[filter_index + 0];
+ int32_t filter_val1 = filter_data[filter_index + 1];
+ int32_t filter_val2 = filter_data[filter_index + 2];
+ int32_t filter_val3 = filter_data[filter_index + 3];
+ result0 += input_val0 * filter_val0;
+ result1 += input_val1 * filter_val1;
+ result2 += input_val2 * filter_val2;
+ result3 += input_val3 * filter_val3;
+ }
+ }
+ if (bias) {
+ result0 += bias[ch_idx + 0];
+ result1 += bias[ch_idx + 1];
+ result2 += bias[ch_idx + 2];
+ result3 += bias[ch_idx + 3];
+ }
+ result0 = esp_nn_multiply_by_quantized_mult_fast(result0, *out_mult++, *out_shift++);
+ result1 = esp_nn_multiply_by_quantized_mult_fast(result1, *out_mult++, *out_shift++);
+ result2 = esp_nn_multiply_by_quantized_mult_fast(result2, *out_mult++, *out_shift++);
+ result3 = esp_nn_multiply_by_quantized_mult_fast(result3, *out_mult++, *out_shift++);
+
+ result0 += out_offset;
+ result1 += out_offset;
+ result2 += out_offset;
+ result3 += out_offset;
+
+ result0 = max(result0, activation_min);
+ result1 = max(result1, activation_min);
+ result2 = max(result2, activation_min);
+ result3 = max(result3, activation_min);
+
+ result0 = min(result0, activation_max);
+ result1 = min(result1, activation_max);
+ result2 = min(result2, activation_max);
+ result3 = min(result3, activation_max);
+
+ out_data[out_idx++] = result0;
+ out_data[out_idx++] = result1;
+ out_data[out_idx++] = result2;
+ out_data[out_idx++] = result3;
+ }
+ for (; ch_idx < channels; ch_idx++) {//channel_loop
+ int32_t result = 0;
+
+ for (int filter_y_idx = filter_y_start; filter_y_idx < filter_y_end; filter_y_idx++) {
+ const int32_t idx_y = base_y + filter_y_idx;
+ for (int filter_x_idx = filter_x_start; filter_x_idx < filter_x_end; filter_x_idx++) {
+ const int32_t idx_x = base_x + filter_x_idx;
+ int32_t input_index = (idx_y * input_wd + idx_x) * channels + ch_idx;
+ int32_t filter_index = (filter_y_idx * filter_wd + filter_x_idx) * (channels) + ch_idx;
+ int32_t input_val = input_data[input_index] + input_offset;
+ int32_t filter_val = filter_data[filter_index];
+ result += input_val * filter_val;
+ }
+ }
+ if (bias) {
+ result += bias[ch_idx];
+ }
+ result = esp_nn_multiply_by_quantized_mult_fast(result, *out_mult++, *out_shift++);
+ result += out_offset;
+ result = max(result, activation_min);
+ result = min(result, activation_max);
+
+ out_data[out_idx++] = result;
+ }
+ }
+ }
+}
+
+void esp_nn_depthwise_conv_s8_opt(const data_dims_t *input_dims,
+ const int8_t *input_data,
+ const data_dims_t *filter_dims,
+ const int8_t *filter_data,
+ const int32_t *bias,
+ const data_dims_t *output_dims,
+ int8_t *out_data,
+ const dw_conv_params_t *conv_params,
+ const quant_data_t *quant_data)
+{
+ const uint16_t ch_mult = conv_params->ch_mult;
+ if (ch_mult == 1) {
+ esp_nn_depthwise_conv_s8_ch_mult_1(input_dims, input_data, filter_dims, filter_data,
+ bias, output_dims, out_data, conv_params, quant_data);
+ return;
+ }
+ const uint16_t input_wd = input_dims->width;
+ const uint16_t input_ht = input_dims->height;
+ const uint16_t channels = input_dims->channels;
+ const int32_t input_offset = conv_params->in_offset;
+ const int32_t out_offset = conv_params->out_offset;
+ const uint16_t pad_wd = conv_params->padding.width;
+ const uint16_t pad_ht = conv_params->padding.height;
+ const uint16_t stride_wd = conv_params->stride.width;
+ const uint16_t stride_ht = conv_params->stride.height;
+ const uint16_t filter_wd = filter_dims->width;
+ const uint16_t filter_ht = filter_dims->height;
+ const uint16_t out_wd = output_dims->width;
+ const uint16_t out_ht = output_dims->height;
+ const int32_t activation_min = conv_params->activation.min;
+ const int32_t activation_max = conv_params->activation.max;
+
+ int out_idx = 0;
+ for (int out_y = 0; out_y < out_ht; out_y++) { //height loop
+ const int16_t base_y = (out_y * stride_ht) - pad_ht;
+ for (int out_x = 0; out_x < out_wd; out_x++) { //width_loop
+ const int16_t base_x = (out_x * stride_wd) - pad_wd;
+
+ const int32_t *out_shift = quant_data->shift;
+ const int32_t *out_mult = quant_data->mult;
+
+ /* Select filter so as the point doesn't lie outside block */
+ int filter_y_start = max(0, -base_y);
+ int filter_x_start = max(0, -base_x);
+ int filter_y_end = min(filter_ht, input_ht - base_y);
+ int filter_x_end = min(filter_wd, input_wd - base_x);
+
+ for (int ch_idx = 0; ch_idx < channels; ch_idx++) {//channel_loop
+ int ch_mult_idx = 0;
+ for (; ch_mult_idx < ch_mult - 3; ch_mult_idx += 4) {
+ int32_t result0 = 0;
+ int32_t result1 = 0;
+ int32_t result2 = 0;
+ int32_t result3 = 0;
+ const int out_ch_idx = ch_idx * ch_mult + ch_mult_idx;
+
+ for (int filter_y_idx = filter_y_start; filter_y_idx < filter_y_end; filter_y_idx++) {
+ const int32_t idx_y = base_y + filter_y_idx;
+ for (int filter_x_idx = filter_x_start; filter_x_idx < filter_x_end; filter_x_idx++) {
+ const int32_t idx_x = base_x + filter_x_idx;
+ int32_t input_index = (idx_y * input_wd + idx_x) * channels + ch_idx;
+ int32_t filter_index = (filter_y_idx * filter_wd + filter_x_idx) * (channels * ch_mult) + out_ch_idx;
+ int32_t input_val = input_data[input_index] + input_offset;
+ int32_t filter_val0 = filter_data[filter_index + 0];
+ int32_t filter_val1 = filter_data[filter_index + 1];
+ int32_t filter_val2 = filter_data[filter_index + 2];
+ int32_t filter_val3 = filter_data[filter_index + 3];
+ result0 += input_val * filter_val0;
+ result1 += input_val * filter_val1;
+ result2 += input_val * filter_val2;
+ result3 += input_val * filter_val3;
+ }
+ }
+ if (bias) {
+ result0 += bias[out_ch_idx + 0];
+ result1 += bias[out_ch_idx + 1];
+ result2 += bias[out_ch_idx + 2];
+ result3 += bias[out_ch_idx + 3];
+ }
+ result0 = esp_nn_multiply_by_quantized_mult_fast(result0, *out_mult++, *out_shift++);
+ result1 = esp_nn_multiply_by_quantized_mult_fast(result1, *out_mult++, *out_shift++);
+ result2 = esp_nn_multiply_by_quantized_mult_fast(result2, *out_mult++, *out_shift++);
+ result3 = esp_nn_multiply_by_quantized_mult_fast(result3, *out_mult++, *out_shift++);
+
+ result0 += out_offset;
+ result1 += out_offset;
+ result2 += out_offset;
+ result3 += out_offset;
+
+ result0 = max(result0, activation_min);
+ result1 = max(result1, activation_min);
+ result2 = max(result2, activation_min);
+ result3 = max(result3, activation_min);
+ result0 = min(result0, activation_max);
+ result1 = min(result1, activation_max);
+ result2 = min(result2, activation_max);
+ result3 = min(result3, activation_max);
+
+ out_data[out_idx++] = result0;
+ out_data[out_idx++] = result1;
+ out_data[out_idx++] = result2;
+ out_data[out_idx++] = result3;
+ }
+ for (; ch_mult_idx < ch_mult; ch_mult_idx++) {
+ int32_t result = 0;
+ const int out_ch_idx = ch_idx * ch_mult + ch_mult_idx;
+
+ for (int filter_y_idx = filter_y_start; filter_y_idx < filter_y_end; filter_y_idx++) {
+ const int32_t idx_y = base_y + filter_y_idx;
+ for (int filter_x_idx = filter_x_start; filter_x_idx < filter_x_end; filter_x_idx++) {
+ const int32_t idx_x = base_x + filter_x_idx;
+ int32_t input_index = (idx_y * input_wd + idx_x) * channels + ch_idx;
+ int32_t filter_index = (filter_y_idx * filter_wd + filter_x_idx) * (channels * ch_mult) + out_ch_idx;
+ int32_t input_val = input_data[input_index] + input_offset;
+ int32_t filter_val = filter_data[filter_index];
+ result += input_val * filter_val;
+ }
+ }
+ if (bias) {
+ result += bias[out_ch_idx];
+ }
+ result = esp_nn_multiply_by_quantized_mult_fast(result, *out_mult++, *out_shift++);
+ result += out_offset;
+ result = max(result, activation_min);
+ result = min(result, activation_max);
+
+ out_data[out_idx++] = result;
+ }
+ }
+ }
+ }
+}
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/convolution/esp_nn_depthwise_conv_s8_esp32s3.c b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/convolution/esp_nn_depthwise_conv_s8_esp32s3.c
new file mode 100644
index 000000000..8840977f6
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/convolution/esp_nn_depthwise_conv_s8_esp32s3.c
@@ -0,0 +1,543 @@
+// Copyright 2020-2021 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#include
+#include "../../include/esp_nn_defs.h"
+
+#include "../common/common_functions.h"
+
+static int16_t *scratch_buffer = NULL;
+
+extern void esp_nn_depthwise_conv_s16_mult8_3x3_esp32s3(const int16_t *input_data,
+ const uint16_t input_wd,
+ const uint16_t input_ht,
+ const uint16_t channels,
+ const uint16_t pad_wd,
+ const uint16_t pad_ht,
+ const uint16_t stride_wd,
+ const uint16_t stride_ht,
+ const uint16_t ch_mult,
+ const int16_t *filter_data,
+ const int32_t *bias,
+ int8_t *out_data,
+ const uint16_t out_wd,
+ const uint16_t out_ht,
+ const int32_t out_offset,
+ const int32_t *out_shift,
+ const int32_t *out_mult,
+ const int32_t activation_min,
+ const int32_t activation_max);
+
+extern void esp_nn_depthwise_conv_s8_mult1_3x3_padded_esp32s3(const int8_t *input_data,
+ const uint16_t input_wd,
+ const uint16_t input_ht,
+ const uint16_t channels,
+ const int32_t input_offset,
+ const uint16_t stride_wd,
+ const uint16_t stride_ht,
+ const int8_t *filter_data,
+ const int32_t *bias,
+ int8_t *out_data,
+ const uint16_t out_wd,
+ const uint16_t out_ht,
+ const int32_t out_offset,
+ const int32_t *out_shift,
+ const int32_t *out_mult,
+ const int32_t activation_min,
+ const int32_t activation_max);
+
+extern void esp_nn_depthwise_conv_s16_mult1_3x3_no_pad_esp32s3(const int16_t *input_data,
+ const uint16_t input_wd,
+ const uint16_t input_ht,
+ const uint16_t channels,
+ const uint16_t stride_wd,
+ const uint16_t stride_ht,
+ const int16_t *filter_data,
+ const int32_t *bias,
+ int8_t *out_data,
+ const uint16_t out_wd,
+ const uint16_t out_ht,
+ const int32_t out_offset,
+ const int32_t *out_shift,
+ const int32_t *out_mult,
+ const int32_t activation_min,
+ const int32_t activation_max);
+
+extern void esp_nn_depthwise_conv_s16_mult8_esp32s3(const int16_t *input_data,
+ const uint16_t input_wd,
+ const uint16_t input_ht,
+ const uint16_t channels,
+ const uint16_t pad_wd,
+ const uint16_t pad_ht,
+ const uint16_t stride_wd,
+ const uint16_t stride_ht,
+ const uint16_t ch_mult,
+ const int16_t *filter_data,
+ const uint16_t filter_wd,
+ const uint16_t filter_ht,
+ const int32_t *bias,
+ int8_t *out_data,
+ const uint16_t out_wd,
+ const uint16_t out_ht,
+ const int32_t out_offset,
+ const int32_t *out_shift,
+ const int32_t *out_mult,
+ const int32_t activation_min,
+ const int32_t activation_max);
+
+extern void esp_nn_depthwise_conv_s16_mult4_esp32s3(const int16_t *input_data,
+ const uint16_t input_wd,
+ const uint16_t input_ht,
+ const uint16_t channels,
+ const uint16_t pad_wd,
+ const uint16_t pad_ht,
+ const uint16_t stride_wd,
+ const uint16_t stride_ht,
+ const uint16_t ch_mult,
+ const int16_t *filter_data,
+ const uint16_t filter_wd,
+ const uint16_t filter_ht,
+ const int32_t *bias,
+ int8_t *out_data,
+ const uint16_t out_wd,
+ const uint16_t out_ht,
+ const int32_t out_offset,
+ const int32_t *out_shift,
+ const int32_t *out_mult,
+ const int32_t activation_min,
+ const int32_t activation_max);
+
+extern void esp_nn_depthwise_conv_s16_mult1_3x3_esp32s3(const int16_t *input_data,
+ const uint16_t input_wd,
+ const uint16_t input_ht,
+ const uint16_t channels,
+ const uint16_t pad_wd,
+ const uint16_t pad_ht,
+ const uint16_t stride_wd,
+ const uint16_t stride_ht,
+ const int16_t *filter_data,
+ const int32_t *bias,
+ int8_t *out_data,
+ const uint16_t out_wd,
+ const uint16_t out_ht,
+ const int32_t out_offset,
+ const int32_t *out_shift,
+ const int32_t *out_mult,
+ const int32_t activation_min,
+ const int32_t activation_max);
+
+extern void esp_nn_depthwise_conv_s16_mult1_esp32s3(const int16_t *input_data,
+ const uint16_t input_wd,
+ const uint16_t input_ht,
+ const uint16_t channels,
+ const uint16_t pad_wd,
+ const uint16_t pad_ht,
+ const uint16_t stride_wd,
+ const uint16_t stride_ht,
+ const int16_t *filter_data,
+ const uint16_t filter_wd,
+ const uint16_t filter_ht,
+ const int32_t *bias,
+ int8_t *out_data,
+ const uint16_t out_wd,
+ const uint16_t out_ht,
+ const int32_t out_offset,
+ const int32_t *out_shift,
+ const int32_t *out_mult,
+ const int32_t activation_min,
+ const int32_t activation_max);
+
+extern void esp_nn_s8_to_s16_esp32s3(const int8_t *src, int16_t *dst, const int size);
+
+extern void esp_nn_aligned_s8_to_s16_with_offset_esp32s3(const int8_t *src, int16_t *dst,
+ const int size, const int32_t offset);
+
+static void esp_nn_depthwise_conv_s8_unrolled(const int8_t *input_data,
+ const uint16_t input_wd,
+ const uint16_t input_ht,
+ const uint16_t channels,
+ const int32_t input_offset,
+ const uint16_t pad_wd,
+ const uint16_t pad_ht,
+ const uint16_t stride_wd,
+ const uint16_t stride_ht,
+ const uint16_t ch_mult,
+ const int8_t *filter_data,
+ const uint16_t filter_wd,
+ const uint16_t filter_ht,
+ const int32_t *bias,
+ int8_t *out_data,
+ const uint16_t out_wd,
+ const uint16_t out_ht,
+ const int32_t out_offset,
+ const int32_t *out_shift,
+ const int32_t *out_mult,
+ const int32_t activation_min,
+ const int32_t activation_max)
+{
+ int out_idx = 0;
+ for (int out_y = 0; out_y < out_ht; out_y++) { //height loop
+ const int16_t base_y = (out_y * stride_ht) - pad_ht;
+ for (int out_x = 0; out_x < out_wd; out_x++) { //width_loop
+ const int16_t base_x = (out_x * stride_wd) - pad_wd;
+ for (int ch_idx = 0; ch_idx < channels; ch_idx++) {//channel_loop
+ int ch_mult_idx = 0;
+ for (; ch_mult_idx < ch_mult - 3; ch_mult_idx += 4) {
+ int32_t result0 = 0, result1 = 0, result2 = 0, result3 = 0;
+ const int out_ch_idx = ch_mult_idx + ch_idx * ch_mult;
+
+ /* Select filter so as the point doesn't lie outside block */
+ int filter_y_start = max(0, -base_y);
+ int filter_x_start = max(0, -base_x);
+ int filter_y_end = min(filter_ht, input_ht - base_y);
+ int filter_x_end = min(filter_wd, input_wd - base_x);
+
+ for (int filter_y_idx = filter_y_start; filter_y_idx < filter_y_end; filter_y_idx++) {
+ const int32_t idx_y = base_y + filter_y_idx;
+ for (int filter_x_idx = filter_x_start; filter_x_idx < filter_x_end; filter_x_idx++) {
+ const int32_t idx_x = base_x + filter_x_idx;
+ int32_t input_index = (idx_y * input_wd + idx_x) * channels + ch_idx;
+ int32_t filter_index = (filter_y_idx * filter_wd + filter_x_idx) * (channels * ch_mult) + out_ch_idx;
+ int32_t input_val = input_data[input_index] + input_offset;
+ int32_t filter_val0 = filter_data[filter_index + 0];
+ int32_t filter_val1 = filter_data[filter_index + 1];
+ int32_t filter_val2 = filter_data[filter_index + 2];
+ int32_t filter_val3 = filter_data[filter_index + 3];
+ result0 += input_val * filter_val0;
+ result1 += input_val * filter_val1;
+ result2 += input_val * filter_val2;
+ result3 += input_val * filter_val3;
+ }
+ }
+ if (bias) {
+ result0 += bias[out_ch_idx + 0];
+ result1 += bias[out_ch_idx + 1];
+ result2 += bias[out_ch_idx + 2];
+ result3 += bias[out_ch_idx + 3];
+ }
+ result0 = esp_nn_multiply_by_quantized_mult(result0,
+ out_mult[out_ch_idx + 0], out_shift[out_ch_idx + 0]);
+ result1 = esp_nn_multiply_by_quantized_mult(result1,
+ out_mult[out_ch_idx + 1], out_shift[out_ch_idx + 1]);
+ result2 = esp_nn_multiply_by_quantized_mult(result2,
+ out_mult[out_ch_idx + 2], out_shift[out_ch_idx + 2]);
+ result3 = esp_nn_multiply_by_quantized_mult(result3,
+ out_mult[out_ch_idx + 3], out_shift[out_ch_idx + 3]);
+
+ result0 += out_offset;
+ result1 += out_offset;
+ result2 += out_offset;
+ result3 += out_offset;
+
+ result0 = max(result0, activation_min);
+ result1 = max(result1, activation_min);
+ result2 = max(result2, activation_min);
+ result3 = max(result3, activation_min);
+
+ result0 = min(result0, activation_max);
+ result1 = min(result1, activation_max);
+ result2 = min(result2, activation_max);
+ result3 = min(result3, activation_max);
+
+ out_data[out_idx++] = result0;
+ out_data[out_idx++] = result1;
+ out_data[out_idx++] = result2;
+ out_data[out_idx++] = result3;
+ }
+
+ /* left-over */
+ for (; ch_mult_idx < ch_mult; ch_mult_idx++) {
+ int32_t result = 0;
+ const int out_ch_idx = ch_mult_idx + ch_idx * ch_mult;
+
+ /* Select filter so as the point doesn't lie outside block */
+ int filter_y_start = max(0, -base_y);
+ int filter_x_start = max(0, -base_x);
+ int filter_y_end = min(filter_ht, input_ht - base_y);
+ int filter_x_end = min(filter_wd, input_wd - base_x);
+
+ for (int filter_y_idx = filter_y_start; filter_y_idx < filter_y_end; filter_y_idx++) {
+ const int32_t idx_y = base_y + filter_y_idx;
+ for (int filter_x_idx = filter_x_start; filter_x_idx < filter_x_end; filter_x_idx++) {
+ const int32_t idx_x = base_x + filter_x_idx;
+ int32_t input_index = (idx_y * input_wd + idx_x) * channels + ch_idx;
+ int32_t filter_index = (filter_y_idx * filter_wd + filter_x_idx) * (channels * ch_mult) + out_ch_idx;
+ int32_t input_val = input_data[input_index] + input_offset;
+ int32_t filter_val = filter_data[filter_index];
+ result += input_val * filter_val;
+ }
+ }
+ if (bias) {
+ result += bias[out_ch_idx];
+ }
+ result = esp_nn_multiply_by_quantized_mult(result, out_mult[out_ch_idx], out_shift[out_ch_idx]);
+ result += out_offset;
+ result = max(result, activation_min);
+ result = min(result, activation_max);
+
+ out_data[out_idx++] = result;
+ }
+ }
+ }
+ }
+}
+
+void esp_nn_depthwise_conv_s8_ch_mult1(const int8_t *input_data,
+ const uint16_t input_wd,
+ const uint16_t input_ht,
+ const uint16_t channels,
+ const int32_t input_offset,
+ const uint16_t pad_wd,
+ const uint16_t pad_ht,
+ const uint16_t stride_wd,
+ const uint16_t stride_ht,
+ const int8_t *filter_data,
+ const uint16_t filter_wd,
+ const uint16_t filter_ht,
+ const int32_t *bias,
+ int8_t *out_data,
+ const uint16_t out_wd,
+ const uint16_t out_ht,
+ const int32_t out_offset,
+ const int32_t *out_shift,
+ const int32_t *out_mult,
+ const int32_t activation_min,
+ const int32_t activation_max)
+{
+ int out_idx = 0;
+ for (int out_y = 0; out_y < out_ht; out_y++) { //height loop
+ const int16_t base_y = (out_y * stride_ht) - pad_ht;
+ for (int out_x = 0; out_x < out_wd; out_x++) { //width_loop
+ const int16_t base_x = (out_x * stride_wd) - pad_wd;
+ for (int ch_idx = 0; ch_idx < channels; ch_idx++) {//channel_loop
+ int32_t result = 0;
+ /* Select filter so as the point doesn't lie outside block */
+ int filter_y_start = max(0, -base_y);
+ int filter_x_start = max(0, -base_x);
+ int filter_y_end = min(filter_ht, input_ht - base_y);
+ int filter_x_end = min(filter_wd, input_wd - base_x);
+
+ for (int filter_y_idx = filter_y_start; filter_y_idx < filter_y_end; filter_y_idx++) {
+ const int32_t idx_y = base_y + filter_y_idx;
+ for (int filter_x_idx = filter_x_start; filter_x_idx < filter_x_end; filter_x_idx++) {
+ const int32_t idx_x = base_x + filter_x_idx;
+ int32_t input_index = (idx_y * input_wd + idx_x) * channels + ch_idx;
+ int32_t filter_index = (filter_y_idx * filter_wd + filter_x_idx) * channels + ch_idx;
+ int32_t input_val = input_data[input_index] + input_offset;
+ int32_t filter_val = filter_data[filter_index];
+ result += input_val * filter_val;
+ }
+ }
+ if (bias) {
+ result += bias[ch_idx];
+ }
+ result = esp_nn_multiply_by_quantized_mult(result, out_mult[ch_idx], out_shift[ch_idx]);
+ result += out_offset;
+ result = max(result, activation_min);
+ result = min(result, activation_max);
+
+ out_data[out_idx++] = result;
+ }
+ }
+ }
+}
+
+int esp_nn_get_depthwise_conv_scratch_size_esp32s3(const data_dims_t *input_dims,
+ const data_dims_t *filter_dims,
+ const data_dims_t *output_dims,
+ const dw_conv_params_t *conv_params)
+{
+ const uint16_t input_wd = input_dims->width;
+ const uint16_t input_ht = input_dims->height;
+ const uint16_t channels = input_dims->channels;
+ const uint16_t filter_wd = filter_dims->width;
+ const uint16_t filter_ht = filter_dims->height;
+ const uint16_t ch_mult = conv_params->ch_mult;
+ const uint16_t out_wd = output_dims->width;
+ const uint16_t out_ht = output_dims->height;
+ const uint16_t pad_wd = conv_params->padding.width;
+ const uint16_t pad_ht = conv_params->padding.height;
+ const uint16_t stride_wd = conv_params->stride.width;
+ const uint16_t stride_ht = conv_params->stride.height;
+
+ int filter_size = filter_wd * filter_ht * channels * ch_mult;
+ int pad_width = 0, pad_height = 0;
+
+ if ((ch_mult == 1) && (channels % 8 == 0) && (filter_wd == 3) && (filter_ht == 3)) {
+ if (channels % 16 == 0) {
+ if (pad_wd || pad_ht) {
+ pad_width = pad_wd * 2;
+ pad_height = pad_ht * 2;
+ } else {
+ // check if we need to pad additionally
+ pad_width = (out_wd * stride_wd + filter_wd - 1) - input_wd;
+ pad_height = (out_ht * stride_ht + filter_ht - 1) - input_ht;
+ // printf("in(%d %d %d), out(%d %d), filter (%d %d) stride (%d %d), pad (%d %d)",
+ // input_wd, input_ht, channels, out_wd, out_ht, filter_wd, filter_ht,
+ // stride_wd, stride_ht, pad_wd, pad_ht);
+ }
+ if (pad_width || pad_height) {
+ int input_size = (input_wd + pad_width) * (input_ht + pad_height) * channels;
+ // printf("ask1 %d\n", filter_size + input_size + 16);
+ return filter_size + input_size + 16; // 16 for alignment
+ } else {
+ // printf("ask2 %d\n", filter_size + 16);
+ return filter_size + 16; // 16 for alignment
+ }
+ } else {
+ int input_size = input_wd * input_ht * channels;
+ // printf("ask3 %d\n", 2 * (filter_size + input_size) + 16);
+ return 2 * (filter_size + input_size) + 16; // 16 for alignment
+ }
+ } else if (ch_mult % 4 == 0) {
+ int input_size = input_wd * input_ht * channels;
+ // printf("ask4 %d\n", 2 * (filter_size + input_size) + 16);
+ return 2 * (filter_size + input_size) + 16; // 16 for alignment
+ }
+ return 32; // just few bytes
+}
+
+void esp_nn_set_depthwise_conv_scratch_buf_esp32s3(void *buf)
+{
+ scratch_buffer = (int16_t *) buf;
+}
+
+/**
+ * Assumption 1: i/p channels == o/p channels
+ * Assumption 2: Pointers are valid
+ * Assumption 3: dialation width = 1
+ */
+
+
+
+void esp_nn_depthwise_conv_s8_esp32s3(const data_dims_t *input_dims,
+ const int8_t *input_data,
+ const data_dims_t *filter_dims,
+ const int8_t *filter_data,
+ const int32_t *bias,
+ const data_dims_t *output_dims,
+ int8_t *out_data,
+ const dw_conv_params_t *conv_params,
+ const quant_data_t *quant_data)
+{
+ const uint16_t input_wd = input_dims->width;
+ const uint16_t input_ht = input_dims->height;
+ const uint16_t channels = input_dims->channels;
+ const int32_t input_offset = conv_params->in_offset;
+ const int32_t out_offset = conv_params->out_offset;
+ const uint16_t pad_wd = conv_params->padding.width;
+ const uint16_t pad_ht = conv_params->padding.height;
+ const uint16_t stride_wd = conv_params->stride.width;
+ const uint16_t stride_ht = conv_params->stride.height;
+ const uint16_t filter_wd = filter_dims->width;
+ const uint16_t filter_ht = filter_dims->height;
+ const uint16_t out_wd = output_dims->width;
+ const uint16_t out_ht = output_dims->height;
+ const int32_t *out_shift = quant_data->shift;
+ const int32_t *out_mult = quant_data->mult;
+ const int32_t activation_min = conv_params->activation.min;
+ const int32_t activation_max = conv_params->activation.max;
+ const uint16_t ch_mult = conv_params->ch_mult;
+
+ int filter_size = filter_wd * filter_ht * channels * ch_mult;
+ int align_len = 16 - (filter_size & 15);
+ int input_size = input_wd * input_ht * channels;
+ int16_t *filter_data16 = scratch_buffer;
+ int16_t *input_data16 = scratch_buffer + filter_size + align_len;
+ if (scratch_buffer == NULL) {
+ printf("esp_nn_depthwise_conv error! scratch_buffer not set!\n");
+ return;
+ }
+
+ if ((ch_mult == 1) && (channels % 8 == 0)) {
+ if ((filter_wd == 3) && (filter_ht == 3)) {
+ if ((channels % 16 == 0) && (pad_wd == 1) && (pad_ht == 1)) {
+ /* process in 8 bits */
+ int8_t *filter_aligned = (int8_t *) scratch_buffer;
+ int8_t *input_padded = (int8_t *) scratch_buffer + filter_size + align_len;
+ memcpy(filter_aligned, filter_data, filter_size);
+ esp_nn_aligned_s8_pad_with_value(input_data, input_padded, input_wd, input_ht, channels,
+ -input_offset, pad_wd, pad_ht);
+ esp_nn_depthwise_conv_s8_mult1_3x3_padded_esp32s3(input_padded, input_wd + 2 * pad_wd,
+ input_ht + 2 * pad_ht, channels, input_offset,
+ stride_wd, stride_ht, filter_aligned, bias,
+ out_data, out_wd, out_ht, out_offset, out_shift,
+ out_mult, activation_min, activation_max);
+ } else if ((channels % 16 == 0) && (pad_wd == 0) && (pad_ht == 0)) {
+ /* process in 8 bits */
+ int8_t *filter_aligned = (int8_t *) scratch_buffer;
+ int8_t *input_padded = (int8_t *) scratch_buffer + filter_size + align_len;
+
+ // check if we need to pad additionally
+ int pad_right = (out_wd * stride_wd + filter_wd - 1) - input_wd;
+ int pad_bottom = (out_ht * stride_ht + filter_ht - 1) - input_ht;
+ if (pad_right || pad_bottom) { // pad right and bottom
+ esp_nn_aligned_s8_pad_end_with_value(input_data, input_padded, input_wd, input_ht,
+ channels, -input_offset, pad_right, pad_bottom);
+ } else {
+ input_padded = (int8_t *) input_data;
+ }
+ memcpy(filter_aligned, filter_data, filter_size);
+ esp_nn_depthwise_conv_s8_mult1_3x3_padded_esp32s3(input_padded, input_wd + pad_right,
+ input_ht + pad_bottom, channels, input_offset,
+ stride_wd, stride_ht, filter_aligned, bias,
+ out_data, out_wd, out_ht, out_offset, out_shift,
+ out_mult, activation_min, activation_max);
+ } else { /* (channels % 8) == 0 */
+ esp_nn_s8_to_s16_esp32s3(filter_data, filter_data16, filter_size);
+ esp_nn_aligned_s8_to_s16_with_offset_esp32s3(input_data, input_data16, input_size, input_offset);
+ esp_nn_depthwise_conv_s16_mult1_3x3_esp32s3(input_data16, input_wd, input_ht, channels,
+ pad_wd, pad_ht, stride_wd, stride_ht, filter_data16,
+ bias, out_data, out_wd, out_ht, out_offset, out_shift,
+ out_mult, activation_min, activation_max);
+ }
+ } else { // all other ch_mult == 1, `channels % 8 == 0`
+ esp_nn_depthwise_conv_s8_ch_mult1(input_data, input_wd, input_ht, channels, input_offset,
+ pad_wd, pad_ht, stride_wd, stride_ht,
+ filter_data, filter_wd, filter_ht,
+ bias, out_data, out_wd, out_ht, out_offset, out_shift,
+ out_mult, activation_min, activation_max);
+ }
+ } else if (ch_mult % 8 == 0) {
+ esp_nn_s8_to_s16_esp32s3(filter_data, filter_data16, filter_size);
+ esp_nn_aligned_s8_to_s16_with_offset_esp32s3(input_data, input_data16, input_size, input_offset);
+ if (filter_wd == 3 && filter_ht == 3) {
+ esp_nn_depthwise_conv_s16_mult8_3x3_esp32s3(input_data16, input_wd, input_ht, channels,
+ pad_wd, pad_ht, stride_wd, stride_ht, ch_mult,
+ filter_data16, bias,
+ out_data, out_wd, out_ht, out_offset, out_shift,
+ out_mult, activation_min, activation_max);
+ } else {
+ esp_nn_depthwise_conv_s16_mult8_esp32s3(input_data16, input_wd, input_ht, channels,
+ pad_wd, pad_ht, stride_wd, stride_ht, ch_mult,
+ filter_data16, filter_wd, filter_ht, bias,
+ out_data, out_wd, out_ht, out_offset, out_shift,
+ out_mult, activation_min, activation_max);
+ }
+ } else if (ch_mult % 4 == 0) {
+ esp_nn_s8_to_s16_esp32s3(filter_data, filter_data16, filter_size);
+ esp_nn_aligned_s8_to_s16_with_offset_esp32s3(input_data, input_data16, input_size, input_offset);
+ esp_nn_depthwise_conv_s16_mult4_esp32s3(input_data16, input_wd, input_ht, channels,
+ pad_wd, pad_ht, stride_wd, stride_ht, ch_mult,
+ filter_data16, filter_wd, filter_ht, bias,
+ out_data, out_wd, out_ht, out_offset, out_shift,
+ out_mult, activation_min, activation_max);
+ } else {
+ esp_nn_depthwise_conv_s8_unrolled(input_data, input_wd, input_ht, channels, input_offset,
+ pad_wd, pad_ht, stride_wd, stride_ht, ch_mult,
+ filter_data, filter_wd, filter_ht,
+ bias, out_data, out_wd, out_ht, out_offset, out_shift,
+ out_mult, activation_min, activation_max);
+ }
+}
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/fully_connected/esp_nn_fully_connected_ansi.c b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/fully_connected/esp_nn_fully_connected_ansi.c
new file mode 100644
index 000000000..ddf3cce76
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/fully_connected/esp_nn_fully_connected_ansi.c
@@ -0,0 +1,50 @@
+// Copyright 2020-2021 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#include
+
+#include "../common/common_functions.h"
+
+void esp_nn_fully_connected_s8_ansi(const int8_t *input_data,
+ const int32_t input_offset,
+ const uint16_t row_len,
+ const int8_t *filter_data,
+ const int32_t filter_offset,
+ const int32_t *bias,
+ int8_t *out_data,
+ const uint16_t out_channels,
+ const int32_t out_offset,
+ const int32_t out_shift,
+ const int32_t out_mult,
+ const int32_t activation_min,
+ const int32_t activation_max)
+{
+ for (int32_t out_c = 0; out_c < out_channels; ++out_c) {
+ int32_t result = 0;
+ for (int32_t data_idx = 0; data_idx < row_len; data_idx++) {
+ int32_t filter_index = row_len * out_c + data_idx;
+ int32_t input_val = input_data[data_idx];
+ int32_t filter_val = filter_data[filter_index];
+ result += (filter_val + filter_offset) * (input_val + input_offset);
+ }
+ if (bias) {
+ result += bias[out_c];
+ }
+ result = esp_nn_multiply_by_quantized_mult(result, out_mult, out_shift);
+ result += out_offset;
+ result = max(result, activation_min);
+ result = min(result, activation_max);
+ out_data[out_c] = (int8_t) result;
+ }
+}
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/pooling/esp_nn_avg_pool_ansi.c b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/pooling/esp_nn_avg_pool_ansi.c
new file mode 100644
index 000000000..14ad9c3cc
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/pooling/esp_nn_avg_pool_ansi.c
@@ -0,0 +1,72 @@
+// Copyright 2020-2021 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#include
+
+#include "../common/common_functions.h"
+
+void esp_nn_avg_pool_s8_ansi(const int8_t *input,
+ const uint16_t input_wd,
+ const uint16_t input_ht,
+ int8_t *output,
+ const uint16_t output_wd,
+ const uint16_t output_ht,
+ const uint16_t stride_wd,
+ const uint16_t stride_ht,
+ const uint16_t filter_wd,
+ const uint16_t filter_ht,
+ const uint16_t pad_wd,
+ const uint16_t pad_ht,
+ const int32_t activation_min,
+ const int32_t activation_max,
+ const uint16_t channels)
+{
+ int32_t base_y = -pad_ht;
+ for (int32_t out_y = 0; out_y < output_ht; out_y++, base_y += stride_ht) {
+ int32_t base_x = -pad_wd;
+ for (int32_t out_x = 0; out_x < output_wd; out_x++, base_x += stride_wd) {
+ for (int32_t ch_idx = 0; ch_idx < channels; ch_idx++) {
+ int32_t result = 0;
+ int32_t filter_cnt = 0;
+ /* Make sure filter does not cross the input box */
+ int32_t filter_y_start = max(0, -base_y);
+ int32_t filter_x_start = max(0, -base_x);
+
+ int32_t filter_y_end = min(filter_ht, input_ht - base_y);
+ int32_t filter_x_end = min(filter_wd, input_wd - base_x);
+
+ for (int32_t filter_y = filter_y_start; filter_y < filter_y_end; filter_y++) {
+ for (int32_t filter_x = filter_x_start; filter_x < filter_x_end; filter_x++) {
+ int32_t in_x_idx = base_x + filter_x;
+ int32_t in_y_idx = base_y + filter_y;
+ int32_t input_index = (in_y_idx * input_wd + in_x_idx) * channels + ch_idx;
+ result += input[input_index];
+ filter_cnt++;
+ }
+ }
+
+ /* Rounded average */
+ result = result > 0 ? (result + filter_cnt / 2) / filter_cnt
+ : (result - filter_cnt / 2) / filter_cnt;
+
+ /* Activation function */
+ result = max(result, activation_min);
+ result = min(result, activation_max);
+
+ int32_t output_index = (out_y * output_wd + out_x) * channels + ch_idx;
+ output[output_index] = (int8_t) result;
+ }
+ }
+ }
+}
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/pooling/esp_nn_max_pool_ansi.c b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/pooling/esp_nn_max_pool_ansi.c
new file mode 100644
index 000000000..404cfe850
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/pooling/esp_nn_max_pool_ansi.c
@@ -0,0 +1,66 @@
+// Copyright 2020-2021 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#include
+
+#include "../common/common_functions.h"
+
+void esp_nn_max_pool_s8_ansi(const int8_t *input,
+ const uint16_t input_wd,
+ const uint16_t input_ht,
+ int8_t *output,
+ const uint16_t output_wd,
+ const uint16_t output_ht,
+ const uint16_t stride_wd,
+ const uint16_t stride_ht,
+ const uint16_t filter_wd,
+ const uint16_t filter_ht,
+ const uint16_t pad_wd,
+ const uint16_t pad_ht,
+ const int32_t activation_min,
+ const int32_t activation_max,
+ const uint16_t channels)
+{
+ int32_t base_y = -pad_ht;
+ for (int32_t out_y = 0; out_y < output_ht; out_y++, base_y += stride_ht) {
+ int32_t base_x = -pad_wd;
+ for (int32_t out_x = 0; out_x < output_wd; out_x++, base_x += stride_wd) {
+ /* Make sure filter does not cross the input box */
+ int32_t filter_y_start = max(0, -base_y);
+ int32_t filter_x_start = max(0, -base_x);
+ int32_t filter_y_end = min(filter_ht, input_ht - base_y);
+ int32_t filter_x_end = min(filter_wd, input_wd - base_x);
+
+ for (int32_t ch_idx = 0; ch_idx < channels; ch_idx++) {
+ int8_t result = INT8_MIN;
+
+ for (int32_t filter_y = filter_y_start; filter_y < filter_y_end; filter_y++) {
+ for (int32_t filter_x = filter_x_start; filter_x < filter_x_end; filter_x++) {
+ int32_t in_x_idx = base_x + filter_x;
+ int32_t in_y_idx = base_y + filter_y;
+ int32_t input_index = (in_y_idx * input_wd + in_x_idx) * channels + ch_idx;
+ result = max(input[input_index], result);
+ }
+ }
+
+ /* Activation function */
+ result = max(result, activation_min);
+ result = min(result, activation_max);
+
+ int32_t output_index = (out_y * output_wd + out_x) * channels + ch_idx;
+ output[output_index] = result;
+ }
+ }
+ }
+}
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/softmax/esp_nn_softmax_ansi.c b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/softmax/esp_nn_softmax_ansi.c
new file mode 100644
index 000000000..d71a8616f
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/softmax/esp_nn_softmax_ansi.c
@@ -0,0 +1,88 @@
+// Copyright 2022 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#include "softmax_common.h"
+
+int32_t esp_nn_get_softmax_scratch_size_ansi(const int32_t width, const int32_t height)
+{
+ (void) width;
+ (void) height;
+ return 0;
+}
+
+void esp_nn_set_softmax_scratch_buf_ansi(void *buffer)
+{
+ (void) buffer;
+ return;
+}
+
+void esp_nn_softmax_s8_ansi(const int8_t *input_data,
+ const int32_t height,
+ const int32_t width,
+ const int32_t mult,
+ const int32_t shift,
+ const int32_t diff_min,
+ int8_t *output_data)
+{
+ // The representation chosen for the input to the exp() function is Q5.26.
+ // We need to leave extra space since values that we skip might be as large as
+ // -32 before multiplying by input mult, and therefore as large as
+ // -16 afterwards. Note that exp(-8) is definitely not insignificant to
+ // accumulation, but exp(-16) definitely is.
+#define ACCUM_BITS 12
+#define DIFF_BITS 5
+
+ const int32_t mask = (1 << shift);
+ int32_t col = 0;
+ const int8_t *in_ptr = input_data;
+ int8_t *out_ptr = output_data;
+
+ for (int row_idx = 0; row_idx < height; row_idx++) {
+ int8_t max_in_row = in_ptr[0];
+ for (col = 1; col < width; col++) {
+ max_in_row = max(max_in_row, in_ptr[col]);
+ }
+
+ int32_t input_diff = 0;
+ int32_t sum_of_exps = 0;
+
+ for (col = 0; col < width; col++) {
+ input_diff = in_ptr[col] - max_in_row;
+ if (input_diff >= diff_min) {
+ const int32_t input_diff_rescaled = SAT_HIGH_MUL(input_diff * mask, mult);
+ const int32_t exp_raw = esp_nn_exp_on_negative_values(input_diff_rescaled);
+ sum_of_exps += DIV_POW2(exp_raw, ACCUM_BITS);
+ }
+ }
+
+ const int32_t headroom_plus1 = esp_nn_clz32((uint32_t) sum_of_exps);
+ const int32_t shifted_scale = ONE_OVER_ONE_X((sum_of_exps << headroom_plus1) - (1 << 31));
+ const int32_t bits_over_unit = ACCUM_BITS - headroom_plus1 + 31 - sizeof(int8_t) * 8;
+
+ for (col = 0; col < width; col++) {
+ input_diff = in_ptr[col] - max_in_row;
+ if (input_diff >= diff_min) {
+ const int32_t input_diff_rescaled = SAT_HIGH_MUL(input_diff * mask, mult);
+ const int32_t exp_raw = esp_nn_exp_on_negative_values(input_diff_rescaled);
+ const int32_t shifted_output = SAT_HIGH_MUL(shifted_scale, exp_raw);
+ const int32_t result = DIV_POW2(shifted_output, bits_over_unit) - 128;
+ out_ptr[col] = (int8_t) esp_nn_saturate8(result);
+ } else {
+ out_ptr[col] = -128;
+ }
+ }
+ in_ptr += width;
+ out_ptr += width;
+ }
+}
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/softmax/esp_nn_softmax_opt.c b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/softmax/esp_nn_softmax_opt.c
new file mode 100644
index 000000000..93337d32d
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/softmax/esp_nn_softmax_opt.c
@@ -0,0 +1,108 @@
+// Copyright 2022 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#include "softmax_common.h"
+#include
+
+static int32_t *scratch_buf = NULL;
+
+/**
+ * @brief Get scratch buffer size needed by softmax function
+ *
+ * @param width
+ * @param height
+ * @return size in bytes
+ *
+ * @note buffer must be 4 byte aligned
+ */
+int32_t esp_nn_get_softmax_scratch_size_opt(const int32_t width, const int32_t height)
+{
+ (void) height;
+ return width * 4;
+}
+
+/**
+ * @brief Set scratch buffer to be used by softmax function
+ *
+ * @param buffer this can be NULL if one needs to unset it
+ * must be aligned to 4 bytes
+ */
+void esp_nn_set_softmax_scratch_buf_opt(void *buffer)
+{
+ scratch_buf = (int32_t *) buffer;
+}
+
+void esp_nn_softmax_s8_opt(const int8_t *input_data,
+ const int32_t height,
+ const int32_t width,
+ const int32_t mult,
+ const int32_t shift,
+ const int32_t diff_min,
+ int8_t *output_data)
+{
+ if (scratch_buf == NULL) {
+ printf("%s error! scratch buffer not set\n", __FUNCTION__);
+ return;
+ }
+ // The representation chosen for the input to the exp() function is Q5.26.
+ // We need to leave extra space since values that we skip might be as large as
+ // -32 before multiplying by input mult, and therefore as large as
+ // -16 afterwards. Note that exp(-8) is definitely not insignificant to
+ // accumulation, but exp(-16) definitely is.
+#define ACCUM_BITS 12
+#define DIFF_BITS 5
+
+ const int32_t mask = (1 << shift);
+ int32_t col = 0;
+ const int8_t *in_ptr = input_data;
+ int8_t *out_ptr = output_data;
+
+ for (int row_idx = 0; row_idx < height; row_idx++) {
+ int8_t max_in_row = in_ptr[0];
+ for (col = 1; col < width; col++) {
+ max_in_row = max(max_in_row, in_ptr[col]);
+ }
+
+ int32_t input_diff = 0;
+ int32_t sum_of_exps = 0;
+
+ for (col = 0; col < width; col++) {
+ input_diff = in_ptr[col] - max_in_row;
+ if (input_diff >= diff_min) {
+ const int32_t input_diff_rescaled = SAT_HIGH_MUL(input_diff * mask, mult);
+ const int32_t exp_raw = esp_nn_exp_on_negative_values(input_diff_rescaled);
+ scratch_buf[col] = exp_raw; // store to avoid duplicate calculation later
+ sum_of_exps += DIV_POW2(exp_raw, ACCUM_BITS);
+ }
+ }
+
+ const int32_t headroom_plus1 = esp_nn_clz32((uint32_t) sum_of_exps);
+ const int32_t shifted_scale = ONE_OVER_ONE_X((sum_of_exps << headroom_plus1) - (1 << 31));
+ const int32_t bits_over_unit = ACCUM_BITS - headroom_plus1 + 31 - sizeof(int8_t) * 8;
+
+ for (col = 0; col < width; col++) {
+ input_diff = in_ptr[col] - max_in_row;
+ if (input_diff >= diff_min) {
+ int32_t exp_raw = scratch_buf[col];
+ const int32_t shifted_output = SAT_HIGH_MUL(shifted_scale, exp_raw);
+ const int32_t result = DIV_POW2(shifted_output, bits_over_unit) - 128;
+ out_ptr[col] = (int8_t) esp_nn_saturate8(result);
+ } else {
+ out_ptr[col] = -128;
+ }
+ }
+ in_ptr += width;
+ out_ptr += width;
+ }
+}
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/softmax/softmax_common.h b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/softmax/softmax_common.h
new file mode 100644
index 000000000..010036224
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/esp-nn/src/softmax/softmax_common.h
@@ -0,0 +1,104 @@
+// Copyright 2022 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#include
+#include "../common/common_functions.h"
+
+#define MASK_IF_ZERO(x) (x) == 0 ? ~0 : 0
+#define MASK_IF_NON_ZERO(x) (x) != 0 ? ~0 : 0
+#define SELECT_USING_MASK(mask, a, b) ((mask) & (a)) ^ (~(mask) & (b))
+#define SAT_HIGH_MUL(x, y) esp_nn_sat_round_doubling_high_mul((x), (y))
+#define DIV_POW2(x,y) esp_nn_div_by_power_of_two((x), (y))
+
+__NN_FORCE_INLINE__ int32_t mul_power_of_2(int val, int exp)
+{
+ const int32_t thresh = ((1 << (31 - exp)) - 1);
+ int32_t result = val << exp;
+ result = SELECT_USING_MASK(MASK_IF_NON_ZERO(val > thresh), INT32_MAX, result);
+ result = SELECT_USING_MASK(MASK_IF_NON_ZERO(val < -thresh), INT32_MIN, result);
+ return result;
+}
+
+/**
+ * @brief Calculate `1 / (1 + x)` for x in [0, 1]
+ *
+ * @param val input value to calculate `1/(1+x)` for
+ * @return `int32_t` result
+ * @note Newton-Raphson division
+ *
+ * https://en.wikipedia.org/wiki/Division_algorithm#Newton.E2.80.93Raphson_division
+ * Refer to that page for the logic behind the 48/17 and 32/17 constants.
+ * Pseudocode: https://en.wikipedia.org/wiki/Division_algorithm#Pseudocode
+ */
+__NN_FORCE_INLINE__ int32_t esp_nn_one_over_one_plus_x_for_x_in_0_1(int32_t val)
+{
+ const int64_t sum = (int64_t) val + INT32_MAX;
+ const int32_t half_denominator = (int32_t) ((sum + (sum >= 0 ? 1 : -1)) / 2L);
+ int32_t constant_48_over_17 = 1515870810;
+ int32_t constant_neg_32_over_17 = -1010580540;
+ int32_t x = constant_48_over_17 + SAT_HIGH_MUL(half_denominator, constant_neg_32_over_17);
+ const int32_t fixed_2_one = (1 << 29);
+
+ x += mul_power_of_2(SAT_HIGH_MUL(x, fixed_2_one - SAT_HIGH_MUL(half_denominator, x)), 2);
+ x += mul_power_of_2(SAT_HIGH_MUL(x, fixed_2_one - SAT_HIGH_MUL(half_denominator, x)), 2);
+ x += mul_power_of_2(SAT_HIGH_MUL(x, fixed_2_one - SAT_HIGH_MUL(half_denominator, x)), 2);
+
+ return mul_power_of_2(x, 1);
+}
+
+#define ONE_OVER_ONE_X(x) esp_nn_one_over_one_plus_x_for_x_in_0_1((x))
+
+/**
+ * @brief Return exp(x) for x < 0.
+ *
+ */
+__NN_FORCE_INLINE__ int32_t esp_nn_exp_on_negative_values(int32_t val)
+{
+ int32_t shift = 24;
+
+ const int32_t one_quarter = (1 << shift);
+ int32_t mask = one_quarter - 1;
+ const int32_t val_mod_minus_quarter = (val & mask) - one_quarter;
+ const int32_t remainder = val_mod_minus_quarter - val;
+
+ // calculate exponent for x in [-1/4, 0) in `result`
+ const int32_t x = (val_mod_minus_quarter << 5) + (1 << 28);
+ const int32_t x2 = SAT_HIGH_MUL(x, x);
+ const int32_t x3 = SAT_HIGH_MUL(x2, x);
+ const int32_t x4 = SAT_HIGH_MUL(x2, x2);
+ const int32_t one_over_3 = 715827883;
+ const int32_t one_over_8 = 1895147668;
+
+ const int32_t x4_over_4 = DIV_POW2(x4, 2);
+ const int32_t x4_over_4_plus_x3_over_6_plus_x2_over_2 = DIV_POW2(SAT_HIGH_MUL(x4_over_4 + x3, one_over_3) + x2, 1);
+ int32_t result = one_over_8 + SAT_HIGH_MUL(one_over_8, x + x4_over_4_plus_x3_over_6_plus_x2_over_2);
+
+#define SELECT_IF_NON_ZERO(x) { \
+ mask = MASK_IF_NON_ZERO(remainder & (1 << shift++)); \
+ result = SELECT_USING_MASK(mask, SAT_HIGH_MUL(result, x), result); \
+}
+
+ SELECT_IF_NON_ZERO(1672461947)
+ SELECT_IF_NON_ZERO(1302514674)
+ SELECT_IF_NON_ZERO(790015084)
+ SELECT_IF_NON_ZERO(290630308)
+ SELECT_IF_NON_ZERO(39332535)
+ SELECT_IF_NON_ZERO(720401)
+ SELECT_IF_NON_ZERO(242)
+
+#undef SELECT_IF_NON_ZERO
+
+ mask = MASK_IF_ZERO(val);
+ return SELECT_USING_MASK(mask, INT32_MAX, result);
+}
\ No newline at end of file
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/builtin_op_data.h b/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/builtin_op_data.h
new file mode 100644
index 000000000..b9d428451
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/builtin_op_data.h
@@ -0,0 +1,22 @@
+/* Copyright 2017 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+// Compatibility shim for new location of interface definitions.
+
+#ifndef TENSORFLOW_LITE_BUILTIN_OP_DATA_H_
+#define TENSORFLOW_LITE_BUILTIN_OP_DATA_H_
+
+#include "tensorflow/lite/c/builtin_op_data.h"
+
+#endif // TENSORFLOW_LITE_BUILTIN_OP_DATA_H_
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/builtin_ops.h b/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/builtin_ops.h
new file mode 100644
index 000000000..337073080
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/builtin_ops.h
@@ -0,0 +1,194 @@
+/* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
+
+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 TENSORFLOW_LITE_BUILTIN_OPS_H_
+#define TENSORFLOW_LITE_BUILTIN_OPS_H_
+
+// DO NOT EDIT MANUALLY: This file is automatically generated by
+// `schema/builtin_ops_header/generator.cc`.
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+// The enum for builtin operators.
+// Note: CUSTOM, DELEGATE, and PLACEHOLDER_FOR_GREATER_OP_CODES are 3 special
+// ops which are not real built-in ops.
+typedef enum {
+ kTfLiteBuiltinAdd = 0,
+ kTfLiteBuiltinAveragePool2d = 1,
+ kTfLiteBuiltinConcatenation = 2,
+ kTfLiteBuiltinConv2d = 3,
+ kTfLiteBuiltinDepthwiseConv2d = 4,
+ kTfLiteBuiltinDepthToSpace = 5,
+ kTfLiteBuiltinDequantize = 6,
+ kTfLiteBuiltinEmbeddingLookup = 7,
+ kTfLiteBuiltinFloor = 8,
+ kTfLiteBuiltinFullyConnected = 9,
+ kTfLiteBuiltinHashtableLookup = 10,
+ kTfLiteBuiltinL2Normalization = 11,
+ kTfLiteBuiltinL2Pool2d = 12,
+ kTfLiteBuiltinLocalResponseNormalization = 13,
+ kTfLiteBuiltinLogistic = 14,
+ kTfLiteBuiltinLshProjection = 15,
+ kTfLiteBuiltinLstm = 16,
+ kTfLiteBuiltinMaxPool2d = 17,
+ kTfLiteBuiltinMul = 18,
+ kTfLiteBuiltinRelu = 19,
+ kTfLiteBuiltinReluN1To1 = 20,
+ kTfLiteBuiltinRelu6 = 21,
+ kTfLiteBuiltinReshape = 22,
+ kTfLiteBuiltinResizeBilinear = 23,
+ kTfLiteBuiltinRnn = 24,
+ kTfLiteBuiltinSoftmax = 25,
+ kTfLiteBuiltinSpaceToDepth = 26,
+ kTfLiteBuiltinSvdf = 27,
+ kTfLiteBuiltinTanh = 28,
+ kTfLiteBuiltinConcatEmbeddings = 29,
+ kTfLiteBuiltinSkipGram = 30,
+ kTfLiteBuiltinCall = 31,
+ kTfLiteBuiltinCustom = 32,
+ kTfLiteBuiltinEmbeddingLookupSparse = 33,
+ kTfLiteBuiltinPad = 34,
+ kTfLiteBuiltinUnidirectionalSequenceRnn = 35,
+ kTfLiteBuiltinGather = 36,
+ kTfLiteBuiltinBatchToSpaceNd = 37,
+ kTfLiteBuiltinSpaceToBatchNd = 38,
+ kTfLiteBuiltinTranspose = 39,
+ kTfLiteBuiltinMean = 40,
+ kTfLiteBuiltinSub = 41,
+ kTfLiteBuiltinDiv = 42,
+ kTfLiteBuiltinSqueeze = 43,
+ kTfLiteBuiltinUnidirectionalSequenceLstm = 44,
+ kTfLiteBuiltinStridedSlice = 45,
+ kTfLiteBuiltinBidirectionalSequenceRnn = 46,
+ kTfLiteBuiltinExp = 47,
+ kTfLiteBuiltinTopkV2 = 48,
+ kTfLiteBuiltinSplit = 49,
+ kTfLiteBuiltinLogSoftmax = 50,
+ kTfLiteBuiltinDelegate = 51,
+ kTfLiteBuiltinBidirectionalSequenceLstm = 52,
+ kTfLiteBuiltinCast = 53,
+ kTfLiteBuiltinPrelu = 54,
+ kTfLiteBuiltinMaximum = 55,
+ kTfLiteBuiltinArgMax = 56,
+ kTfLiteBuiltinMinimum = 57,
+ kTfLiteBuiltinLess = 58,
+ kTfLiteBuiltinNeg = 59,
+ kTfLiteBuiltinPadv2 = 60,
+ kTfLiteBuiltinGreater = 61,
+ kTfLiteBuiltinGreaterEqual = 62,
+ kTfLiteBuiltinLessEqual = 63,
+ kTfLiteBuiltinSelect = 64,
+ kTfLiteBuiltinSlice = 65,
+ kTfLiteBuiltinSin = 66,
+ kTfLiteBuiltinTransposeConv = 67,
+ kTfLiteBuiltinSparseToDense = 68,
+ kTfLiteBuiltinTile = 69,
+ kTfLiteBuiltinExpandDims = 70,
+ kTfLiteBuiltinEqual = 71,
+ kTfLiteBuiltinNotEqual = 72,
+ kTfLiteBuiltinLog = 73,
+ kTfLiteBuiltinSum = 74,
+ kTfLiteBuiltinSqrt = 75,
+ kTfLiteBuiltinRsqrt = 76,
+ kTfLiteBuiltinShape = 77,
+ kTfLiteBuiltinPow = 78,
+ kTfLiteBuiltinArgMin = 79,
+ kTfLiteBuiltinFakeQuant = 80,
+ kTfLiteBuiltinReduceProd = 81,
+ kTfLiteBuiltinReduceMax = 82,
+ kTfLiteBuiltinPack = 83,
+ kTfLiteBuiltinLogicalOr = 84,
+ kTfLiteBuiltinOneHot = 85,
+ kTfLiteBuiltinLogicalAnd = 86,
+ kTfLiteBuiltinLogicalNot = 87,
+ kTfLiteBuiltinUnpack = 88,
+ kTfLiteBuiltinReduceMin = 89,
+ kTfLiteBuiltinFloorDiv = 90,
+ kTfLiteBuiltinReduceAny = 91,
+ kTfLiteBuiltinSquare = 92,
+ kTfLiteBuiltinZerosLike = 93,
+ kTfLiteBuiltinFill = 94,
+ kTfLiteBuiltinFloorMod = 95,
+ kTfLiteBuiltinRange = 96,
+ kTfLiteBuiltinResizeNearestNeighbor = 97,
+ kTfLiteBuiltinLeakyRelu = 98,
+ kTfLiteBuiltinSquaredDifference = 99,
+ kTfLiteBuiltinMirrorPad = 100,
+ kTfLiteBuiltinAbs = 101,
+ kTfLiteBuiltinSplitV = 102,
+ kTfLiteBuiltinUnique = 103,
+ kTfLiteBuiltinCeil = 104,
+ kTfLiteBuiltinReverseV2 = 105,
+ kTfLiteBuiltinAddN = 106,
+ kTfLiteBuiltinGatherNd = 107,
+ kTfLiteBuiltinCos = 108,
+ kTfLiteBuiltinWhere = 109,
+ kTfLiteBuiltinRank = 110,
+ kTfLiteBuiltinElu = 111,
+ kTfLiteBuiltinReverseSequence = 112,
+ kTfLiteBuiltinMatrixDiag = 113,
+ kTfLiteBuiltinQuantize = 114,
+ kTfLiteBuiltinMatrixSetDiag = 115,
+ kTfLiteBuiltinRound = 116,
+ kTfLiteBuiltinHardSwish = 117,
+ kTfLiteBuiltinIf = 118,
+ kTfLiteBuiltinWhile = 119,
+ kTfLiteBuiltinNonMaxSuppressionV4 = 120,
+ kTfLiteBuiltinNonMaxSuppressionV5 = 121,
+ kTfLiteBuiltinScatterNd = 122,
+ kTfLiteBuiltinSelectV2 = 123,
+ kTfLiteBuiltinDensify = 124,
+ kTfLiteBuiltinSegmentSum = 125,
+ kTfLiteBuiltinBatchMatmul = 126,
+ kTfLiteBuiltinPlaceholderForGreaterOpCodes = 127,
+ kTfLiteBuiltinCumsum = 128,
+ kTfLiteBuiltinCallOnce = 129,
+ kTfLiteBuiltinBroadcastTo = 130,
+ kTfLiteBuiltinRfft2d = 131,
+ kTfLiteBuiltinConv3d = 132,
+ kTfLiteBuiltinImag = 133,
+ kTfLiteBuiltinReal = 134,
+ kTfLiteBuiltinComplexAbs = 135,
+ kTfLiteBuiltinHashtable = 136,
+ kTfLiteBuiltinHashtableFind = 137,
+ kTfLiteBuiltinHashtableImport = 138,
+ kTfLiteBuiltinHashtableSize = 139,
+ kTfLiteBuiltinReduceAll = 140,
+ kTfLiteBuiltinConv3dTranspose = 141,
+ kTfLiteBuiltinVarHandle = 142,
+ kTfLiteBuiltinReadVariable = 143,
+ kTfLiteBuiltinAssignVariable = 144,
+ kTfLiteBuiltinBroadcastArgs = 145,
+ kTfLiteBuiltinRandomStandardNormal = 146,
+ kTfLiteBuiltinBucketize = 147,
+ kTfLiteBuiltinRandomUniform = 148,
+ kTfLiteBuiltinMultinomial = 149,
+ kTfLiteBuiltinGelu = 150,
+ kTfLiteBuiltinDynamicUpdateSlice = 151,
+ kTfLiteBuiltinRelu0To1 = 152,
+ kTfLiteBuiltinUnsortedSegmentProd = 153,
+ kTfLiteBuiltinUnsortedSegmentMax = 154,
+ kTfLiteBuiltinUnsortedSegmentSum = 155,
+ kTfLiteBuiltinAtan2 = 156,
+ kTfLiteBuiltinUnsortedSegmentMin = 157,
+ kTfLiteBuiltinSign = 158,
+} TfLiteBuiltinOperator;
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+#endif // TENSORFLOW_LITE_BUILTIN_OPS_H_
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/c/builtin_op_data.h b/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/c/builtin_op_data.h
new file mode 100644
index 000000000..7f160972e
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/c/builtin_op_data.h
@@ -0,0 +1,525 @@
+/* Copyright 2017 The TensorFlow Authors. All Rights Reserved.
+
+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 TENSORFLOW_LITE_C_BUILTIN_OP_DATA_H_
+#define TENSORFLOW_LITE_C_BUILTIN_OP_DATA_H_
+
+#include
+
+#include "tensorflow/lite/c/common.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+// TfLiteReshapeParams can't have dynamic data so we fix the maximum possible
+// number of dimensions.
+#define TFLITE_RESHAPE_PARAMS_MAX_DIMENSION_COUNT 8
+
+// TODO(aselle): Consider using "if this then that" for testing.
+
+// Useful placeholder to put in otherwise empty structs to avoid size warnings.
+typedef struct {
+ char dummy;
+} EmptyStructPlaceholder;
+
+// IMPORTANT: All new members of structs must be added at the end to ensure
+// backwards compatibility.
+
+// Possible padding types (for convolutions)
+typedef enum {
+ kTfLitePaddingUnknown = 0,
+ kTfLitePaddingSame,
+ kTfLitePaddingValid,
+} TfLitePadding;
+
+typedef enum {
+ kTfLiteMirrorPaddingUnknown = 0,
+ kTfLiteMirrorPaddingReflect,
+ kTfLiteMirrorPaddingSymmetric,
+} TfLiteMirrorPaddingMode;
+
+// TODO(b/130259536): We should move this out of builtin_op_data.
+typedef struct {
+ int width;
+ int height;
+ int width_offset;
+ int height_offset;
+} TfLitePaddingValues;
+
+typedef struct {
+ TfLiteMirrorPaddingMode mode;
+} TfLiteMirrorPaddingParams;
+
+// Possible fused activation functions.
+typedef enum {
+ kTfLiteActNone = 0,
+ kTfLiteActRelu,
+ kTfLiteActReluN1To1, // min(max(-1, x), 1)
+ kTfLiteActRelu6, // min(max(0, x), 6)
+ kTfLiteActTanh,
+ kTfLiteActSignBit,
+ kTfLiteActSigmoid,
+} TfLiteFusedActivation;
+
+typedef struct {
+ // Parameters for CONV_2D version 1.
+ TfLitePadding padding;
+ int stride_width;
+ int stride_height;
+ TfLiteFusedActivation activation;
+
+ // Parameters for CONV_2D version 2.
+ // Note: Version 2 supports dilation values not equal to 1.
+ int dilation_width_factor;
+ int dilation_height_factor;
+} TfLiteConvParams;
+
+typedef struct {
+ TfLitePadding padding;
+ int stride_width;
+ int stride_height;
+ int stride_depth;
+ int dilation_width_factor;
+ int dilation_height_factor;
+ int dilation_depth_factor;
+ TfLiteFusedActivation activation;
+} TfLiteConv3DParams;
+
+typedef TfLiteConv3DParams TfLiteConv3DTransposeParams;
+
+typedef struct {
+ TfLitePadding padding;
+ int stride_width;
+ int stride_height;
+ int filter_width;
+ int filter_height;
+ TfLiteFusedActivation activation;
+ struct {
+ TfLitePaddingValues padding;
+ } computed;
+} TfLitePoolParams;
+
+typedef struct {
+ // Parameters for DepthwiseConv version 1 or above.
+ TfLitePadding padding;
+ int stride_width;
+ int stride_height;
+ // `depth_multiplier` is redundant. It's used by CPU kernels in
+ // TensorFlow 2.0 or below, but ignored in versions above.
+ //
+ // The information can be deduced from the shape of input and the shape of
+ // weights. Since the TFLiteConverter toolchain doesn't support partially
+ // specified shapes, relying on `depth_multiplier` stops us from supporting
+ // graphs with dynamic shape tensors.
+ //
+ // Note: Some of the delegates (e.g. NNAPI, GPU) are still relying on this
+ // field.
+ int depth_multiplier;
+ TfLiteFusedActivation activation;
+ // Parameters for DepthwiseConv version 2 or above.
+ int dilation_width_factor;
+ int dilation_height_factor;
+} TfLiteDepthwiseConvParams;
+
+typedef struct {
+ int rank;
+ TfLiteFusedActivation activation;
+
+ // Parameter for SVDF version 4.
+ bool asymmetric_quantize_inputs;
+} TfLiteSVDFParams;
+
+typedef struct {
+ TfLiteFusedActivation activation;
+
+ // Parameter for RNN version 3.
+ bool asymmetric_quantize_inputs;
+} TfLiteRNNParams;
+
+typedef struct {
+ bool time_major;
+ TfLiteFusedActivation activation;
+
+ // Parameter for Sequence RNN version 3.
+ bool asymmetric_quantize_inputs;
+} TfLiteSequenceRNNParams;
+
+typedef struct {
+ bool time_major;
+ TfLiteFusedActivation activation;
+ bool merge_outputs;
+
+ // Parameter for Bidirectional RNN verison 3.
+ bool asymmetric_quantize_inputs;
+} TfLiteBidirectionalSequenceRNNParams;
+
+typedef enum {
+ kTfLiteFullyConnectedWeightsFormatDefault = 0,
+ kTfLiteFullyConnectedWeightsFormatShuffled4x16Int8 = 1,
+} TfLiteFullyConnectedWeightsFormat;
+
+typedef struct {
+ // Parameters for FullyConnected version 1 or above.
+ TfLiteFusedActivation activation;
+
+ // Parameters for FullyConnected version 2 or above.
+ TfLiteFullyConnectedWeightsFormat weights_format;
+
+ // Parameters for FullyConnected version 5 or above.
+ // If set to true, then the number of dimensions in the input and the output
+ // tensors are the same. Furthermore, all but the last dimension of the input
+ // and output shapes will be equal.
+ bool keep_num_dims;
+
+ // Parameters for FullyConnected version 7 or above.
+ // If set to true and the weights are quantized, then non constant inputs
+ // are quantized at evaluation time with asymmetric quantization.
+ bool asymmetric_quantize_inputs;
+} TfLiteFullyConnectedParams;
+
+typedef enum {
+ kTfLiteLshProjectionUnknown = 0,
+ kTfLiteLshProjectionSparse = 1,
+ kTfLiteLshProjectionDense = 2,
+} TfLiteLSHProjectionType;
+
+typedef struct {
+ TfLiteLSHProjectionType type;
+} TfLiteLSHProjectionParams;
+
+typedef struct {
+ float beta;
+} TfLiteSoftmaxParams;
+
+typedef struct {
+ int axis;
+ TfLiteFusedActivation activation;
+} TfLiteConcatenationParams;
+
+typedef struct {
+ TfLiteFusedActivation activation;
+ // Parameter added for the version 4.
+ bool pot_scale_int16;
+} TfLiteAddParams;
+
+typedef struct {
+ EmptyStructPlaceholder placeholder;
+} TfLiteSpaceToBatchNDParams;
+
+typedef struct {
+ EmptyStructPlaceholder placeholder;
+} TfLiteBatchToSpaceNDParams;
+
+typedef struct {
+ bool adj_x;
+ bool adj_y;
+ // Parameters for BatchMatMul version 4 or above.
+ // If set to true and the weights are quantized, then non constant inputs
+ // are quantized at evaluation time with asymmetric quantization.
+ bool asymmetric_quantize_inputs;
+} TfLiteBatchMatMulParams;
+
+typedef struct {
+ TfLiteFusedActivation activation;
+} TfLiteMulParams;
+
+typedef struct {
+ TfLiteFusedActivation activation;
+ // Parameter added for the version 5.
+ bool pot_scale_int16;
+} TfLiteSubParams;
+
+typedef struct {
+ TfLiteFusedActivation activation;
+} TfLiteDivParams;
+
+typedef struct {
+ TfLiteFusedActivation activation;
+} TfLiteL2NormParams;
+
+typedef struct {
+ int radius;
+ float bias;
+ float alpha;
+ float beta;
+} TfLiteLocalResponseNormParams;
+
+typedef enum {
+ kTfLiteLSTMFullKernel = 0,
+ kTfLiteLSTMBasicKernel
+} TfLiteLSTMKernelType;
+
+typedef struct {
+ // Parameters for LSTM version 1.
+ TfLiteFusedActivation activation;
+ float cell_clip;
+ float proj_clip;
+
+ // Parameters for LSTM version 2.
+ // kTfLiteLSTMBasicKernel is only supported in version 2 or above.
+ TfLiteLSTMKernelType kernel_type;
+
+ // Parameters for LSTM version 4.
+ bool asymmetric_quantize_inputs;
+} TfLiteLSTMParams;
+
+typedef struct {
+ // Parameters needed for the underlying LSTM.
+ TfLiteFusedActivation activation;
+ float cell_clip;
+ float proj_clip;
+
+ // If set to true then the first dimension is time, otherwise batch.
+ bool time_major;
+
+ // Parameter for unidirectional sequence RNN version 3.
+ bool asymmetric_quantize_inputs;
+} TfLiteUnidirectionalSequenceLSTMParams;
+
+typedef struct {
+ // Parameters supported by version 1:
+ // Parameters inherited for the LSTM kernel.
+ TfLiteFusedActivation activation;
+ float cell_clip;
+ float proj_clip;
+
+ // If true, store the outputs of both directions in the first output.
+ bool merge_outputs;
+
+ // Parameters supported by version 2:
+ // If set to true then the first dimension is time, otherwise batch.
+ bool time_major;
+
+ // Parameters supported by version 4:
+ // If set to true, then hybrid ops use asymmetric quantization for inputs.
+ bool asymmetric_quantize_inputs;
+} TfLiteBidirectionalSequenceLSTMParams;
+
+typedef struct {
+ bool align_corners;
+ // half_pixel_centers assumes pixels are of half the actual dimensions, and
+ // yields more accurate resizes. Corresponds to the same argument for the
+ // original TensorFlow op in TF2.0.
+ bool half_pixel_centers;
+} TfLiteResizeBilinearParams;
+
+typedef struct {
+ bool align_corners;
+ bool half_pixel_centers;
+} TfLiteResizeNearestNeighborParams;
+
+typedef struct {
+ EmptyStructPlaceholder placeholder;
+} TfLitePadParams;
+
+typedef struct {
+ EmptyStructPlaceholder placeholder;
+} TfLitePadV2Params;
+
+typedef struct {
+ // These fields are only used in old models for backward compatibility.
+ // In the current implementation, we use the 2nd input of the op as the shape,
+ // and these fields are unused.
+ int shape[TFLITE_RESHAPE_PARAMS_MAX_DIMENSION_COUNT];
+ int num_dimensions;
+} TfLiteReshapeParams;
+
+typedef struct {
+ int ngram_size;
+ int max_skip_size;
+ bool include_all_ngrams;
+} TfLiteSkipGramParams;
+
+typedef struct {
+ int block_size;
+} TfLiteSpaceToDepthParams;
+
+typedef struct {
+ int block_size;
+} TfLiteDepthToSpaceParams;
+
+typedef struct {
+ TfLiteType in_data_type;
+ TfLiteType out_data_type;
+} TfLiteCastParams;
+
+typedef enum {
+ kTfLiteCombinerTypeSum = 0,
+ kTfLiteCombinerTypeMean = 1,
+ kTfLiteCombinerTypeSqrtn = 2,
+} TfLiteCombinerType;
+
+typedef struct {
+ TfLiteCombinerType combiner;
+} TfLiteEmbeddingLookupSparseParams;
+
+typedef struct {
+ int axis;
+ int batch_dims;
+} TfLiteGatherParams;
+
+typedef struct {
+ EmptyStructPlaceholder placeholder;
+} TfLiteTransposeParams;
+
+typedef struct {
+ bool keep_dims;
+} TfLiteReducerParams;
+
+typedef struct {
+ int num_splits;
+} TfLiteSplitParams;
+
+typedef struct {
+ int num_splits;
+} TfLiteSplitVParams;
+
+typedef struct {
+ // TODO(ahentz): We can't have dynamic data in this struct, at least not yet.
+ // For now we will fix the maximum possible number of dimensions.
+ int squeeze_dims[8];
+ int num_squeeze_dims;
+} TfLiteSqueezeParams;
+
+typedef struct {
+ int begin_mask;
+ int end_mask;
+ int ellipsis_mask;
+ int new_axis_mask;
+ int shrink_axis_mask;
+} TfLiteStridedSliceParams;
+
+typedef struct {
+ TfLiteType output_type;
+} TfLiteArgMaxParams;
+
+typedef struct {
+ TfLiteType output_type;
+} TfLiteArgMinParams;
+
+typedef struct {
+ TfLitePadding padding;
+ int stride_width;
+ int stride_height;
+} TfLiteTransposeConvParams;
+
+typedef struct {
+ bool validate_indices;
+} TfLiteSparseToDenseParams;
+
+typedef struct {
+ TfLiteType out_type;
+} TfLiteShapeParams;
+
+typedef struct {
+ EmptyStructPlaceholder placeholder;
+} TfLiteRankParams;
+
+typedef struct {
+ // Parameters supported by version 1:
+ float min;
+ float max;
+ int num_bits;
+
+ // Parameters supported by version 2:
+ bool narrow_range;
+} TfLiteFakeQuantParams;
+
+typedef struct {
+ int values_count;
+ int axis;
+} TfLitePackParams;
+
+typedef struct {
+ int axis;
+} TfLiteOneHotParams;
+
+typedef struct {
+ int num;
+ int axis;
+} TfLiteUnpackParams;
+
+typedef struct {
+ float alpha;
+} TfLiteLeakyReluParams;
+
+typedef struct {
+ TfLiteType index_out_type;
+} TfLiteUniqueParams;
+
+typedef struct {
+ int seq_dim;
+ int batch_dim;
+} TfLiteReverseSequenceParams;
+
+typedef struct {
+ EmptyStructPlaceholder placeholder;
+} TfLiteMatrixDiagParams;
+
+typedef struct {
+ EmptyStructPlaceholder placeholder;
+} TfLiteMatrixSetDiagParams;
+
+typedef struct {
+ int then_subgraph_index;
+ int else_subgraph_index;
+} TfLiteIfParams;
+
+typedef struct {
+ int cond_subgraph_index;
+ int body_subgraph_index;
+} TfLiteWhileParams;
+
+typedef struct {
+ bool exclusive;
+ bool reverse;
+} TfLiteCumsumParams;
+
+typedef struct {
+ int init_subgraph_index;
+} TfLiteCallOnceParams;
+
+typedef struct {
+ int table_id;
+ TfLiteType key_dtype;
+ TfLiteType value_dtype;
+} TfLiteHashtableParams;
+
+typedef struct {
+ const char* container;
+ const char* shared_name;
+} TfLiteVarHandleParams;
+
+typedef struct {
+ int seed;
+ int seed2;
+} TfLiteRandomParams;
+
+typedef struct {
+ int num_boundaries;
+ // This points to the memory stored in the model (flatbuffer),
+ // and is not owned.
+ const float* boundaries;
+} TfLiteBucketizeParams;
+
+typedef struct {
+ bool approximate;
+} TfLiteGeluParams;
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#endif // TENSORFLOW_LITE_C_BUILTIN_OP_DATA_H_
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/c/c_api_types.h b/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/c/c_api_types.h
new file mode 100644
index 000000000..9d7668e13
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/c/c_api_types.h
@@ -0,0 +1,147 @@
+/* Copyright 2020 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+// This file declares types used by the pure C inference API defined in c_api.h,
+// some of which are also used in the C++ and C kernel and interpreter APIs.
+
+#ifndef TENSORFLOW_LITE_C_C_API_TYPES_H_
+#define TENSORFLOW_LITE_C_C_API_TYPES_H_
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Define TFL_CAPI_EXPORT macro to export a function properly with a shared
+// library.
+#ifdef SWIG
+#define TFL_CAPI_EXPORT
+#elif defined(TFL_STATIC_LIBRARY_BUILD)
+#define TFL_CAPI_EXPORT
+#else // not definded TFL_STATIC_LIBRARY_BUILD
+#if defined(_WIN32)
+#ifdef TFL_COMPILE_LIBRARY
+#define TFL_CAPI_EXPORT __declspec(dllexport)
+#else
+#define TFL_CAPI_EXPORT __declspec(dllimport)
+#endif // TFL_COMPILE_LIBRARY
+#else
+#define TFL_CAPI_EXPORT __attribute__((visibility("default")))
+#endif // _WIN32
+#endif // SWIG
+
+// Note that new error status values may be added in future in order to
+// indicate more fine-grained internal states, therefore, applications should
+// not rely on status values being members of the enum.
+typedef enum TfLiteStatus {
+ kTfLiteOk = 0,
+
+ // Generally referring to an error in the runtime (i.e. interpreter)
+ kTfLiteError = 1,
+
+ // Generally referring to an error from a TfLiteDelegate itself.
+ kTfLiteDelegateError = 2,
+
+ // Generally referring to an error in applying a delegate due to
+ // incompatibility between runtime and delegate, e.g., this error is returned
+ // when trying to apply a TF Lite delegate onto a model graph that's already
+ // immutable.
+ kTfLiteApplicationError = 3,
+
+ // Generally referring to serialized delegate data not being found.
+ // See tflite::delegates::Serialization.
+ kTfLiteDelegateDataNotFound = 4,
+
+ // Generally referring to data-writing issues in delegate serialization.
+ // See tflite::delegates::Serialization.
+ kTfLiteDelegateDataWriteError = 5,
+
+ // Generally referring to data-reading issues in delegate serialization.
+ // See tflite::delegates::Serialization.
+ kTfLiteDelegateDataReadError = 6,
+
+ // Generally referring to issues when the TF Lite model has ops that cannot be
+ // resolved at runtime. This could happen when the specific op is not
+ // registered or built with the TF Lite framework.
+ kTfLiteUnresolvedOps = 7,
+
+ // Generally referring to invocation cancelled by the user.
+ // See `interpreter::Cancel`.
+ // TODO(b/194915839): Implement `interpreter::Cancel`.
+ // TODO(b/250636993): Cancellation triggered by `SetCancellationFunction`
+ // should also return this status code.
+ kTfLiteCancelled = 8,
+} TfLiteStatus;
+
+// Types supported by tensor
+typedef enum {
+ kTfLiteNoType = 0,
+ kTfLiteFloat32 = 1,
+ kTfLiteInt32 = 2,
+ kTfLiteUInt8 = 3,
+ kTfLiteInt64 = 4,
+ kTfLiteString = 5,
+ kTfLiteBool = 6,
+ kTfLiteInt16 = 7,
+ kTfLiteComplex64 = 8,
+ kTfLiteInt8 = 9,
+ kTfLiteFloat16 = 10,
+ kTfLiteFloat64 = 11,
+ kTfLiteComplex128 = 12,
+ kTfLiteUInt64 = 13,
+ kTfLiteResource = 14,
+ kTfLiteVariant = 15,
+ kTfLiteUInt32 = 16,
+ kTfLiteUInt16 = 17,
+ kTfLiteInt4 = 18,
+} TfLiteType;
+
+// Legacy. Will be deprecated in favor of TfLiteAffineQuantization.
+// If per-layer quantization is specified this field will still be populated in
+// addition to TfLiteAffineQuantization.
+// Parameters for asymmetric quantization. Quantized values can be converted
+// back to float using:
+// real_value = scale * (quantized_value - zero_point)
+typedef struct TfLiteQuantizationParams {
+ float scale;
+ int32_t zero_point;
+} TfLiteQuantizationParams;
+
+// --------------------------------------------------------------------------
+// Opaque types used by c_api.h, c_api_opaque.h and common.h.
+
+// TfLiteOpaqueContext is an opaque version of TfLiteContext;
+typedef struct TfLiteOpaqueContext TfLiteOpaqueContext;
+
+// TfLiteOpaqueNode is an opaque version of TfLiteNode;
+typedef struct TfLiteOpaqueNode TfLiteOpaqueNode;
+
+// TfLiteOpaqueTensor is an opaque version of TfLiteTensor;
+typedef struct TfLiteOpaqueTensor TfLiteOpaqueTensor;
+
+// TfLiteOpaqueDelegateStruct: opaque version of TfLiteDelegate; allows
+// delegation of nodes to alternative backends.
+//
+// This is an abstract type that is intended to have the same
+// role as TfLiteDelegate from common.h, but without exposing the implementation
+// details of how delegates are implemented.
+// WARNING: This is an experimental type and subject to change.
+typedef struct TfLiteOpaqueDelegateStruct TfLiteOpaqueDelegateStruct;
+
+#ifdef __cplusplus
+} // extern C
+#endif
+#endif // TENSORFLOW_LITE_C_C_API_TYPES_H_
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/c/common.cpp b/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/c/common.cpp
new file mode 100644
index 000000000..4e87300af
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/c/common.cpp
@@ -0,0 +1,321 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+#include "tensorflow/lite/c/common.h"
+
+#include "tensorflow/lite/c/c_api_types.h"
+#ifdef TF_LITE_TENSORFLOW_PROFILER
+#include "tensorflow/lite/tensorflow_profiler_logger.h"
+#endif
+
+#ifndef ARDUINO
+#include
+#include
+#endif // ARDUINO
+
+extern "C" {
+
+size_t TfLiteIntArrayGetSizeInBytes(int size) {
+ static TfLiteIntArray dummy;
+
+ size_t computed_size = sizeof(dummy) + sizeof(dummy.data[0]) * size;
+#if defined(_MSC_VER)
+ // Context for why this is needed is in http://b/189926408#comment21
+ computed_size -= sizeof(dummy.data[0]);
+#endif
+ return computed_size;
+}
+
+int TfLiteIntArrayEqual(const TfLiteIntArray* a, const TfLiteIntArray* b) {
+ if (a == b) return 1;
+ if (a == nullptr || b == nullptr) return 0;
+ return TfLiteIntArrayEqualsArray(a, b->size, b->data);
+}
+
+int TfLiteIntArrayEqualsArray(const TfLiteIntArray* a, int b_size,
+ const int b_data[]) {
+ if (a == nullptr) return (b_size == 0);
+ if (a->size != b_size) return 0;
+ int i = 0;
+ for (; i < a->size; i++)
+ if (a->data[i] != b_data[i]) return 0;
+ return 1;
+}
+
+#ifndef ARDUINO
+
+TfLiteIntArray* TfLiteIntArrayCreate(int size) {
+ size_t alloc_size = TfLiteIntArrayGetSizeInBytes(size);
+ if (alloc_size <= 0) return nullptr;
+ TfLiteIntArray* ret = (TfLiteIntArray*)malloc(alloc_size);
+ if (!ret) return ret;
+ ret->size = size;
+ return ret;
+}
+
+TfLiteIntArray* TfLiteIntArrayCopy(const TfLiteIntArray* src) {
+ if (!src) return nullptr;
+ TfLiteIntArray* ret = TfLiteIntArrayCreate(src->size);
+ if (ret) {
+ memcpy(ret->data, src->data, src->size * sizeof(int));
+ }
+ return ret;
+}
+
+void TfLiteIntArrayFree(TfLiteIntArray* a) { free(a); }
+
+#endif // ARDUINO
+
+int TfLiteFloatArrayGetSizeInBytes(int size) {
+ static TfLiteFloatArray dummy;
+
+ int computed_size = sizeof(dummy) + sizeof(dummy.data[0]) * size;
+#if defined(_MSC_VER)
+ // Context for why this is needed is in http://b/189926408#comment21
+ computed_size -= sizeof(dummy.data[0]);
+#endif
+ return computed_size;
+}
+
+#ifndef ARDUINO
+
+TfLiteFloatArray* TfLiteFloatArrayCreate(int size) {
+ TfLiteFloatArray* ret =
+ (TfLiteFloatArray*)malloc(TfLiteFloatArrayGetSizeInBytes(size));
+ ret->size = size;
+ return ret;
+}
+
+void TfLiteFloatArrayFree(TfLiteFloatArray* a) { free(a); }
+
+void TfLiteTensorDataFree(TfLiteTensor* t) {
+ if (t->allocation_type == kTfLiteDynamic ||
+ t->allocation_type == kTfLitePersistentRo) {
+ if (t->data.raw) {
+#ifdef TF_LITE_TENSORFLOW_PROFILER
+ tflite::OnTfLiteTensorDealloc(t);
+#endif
+ free(t->data.raw);
+ }
+ }
+ t->data.raw = nullptr;
+}
+
+void TfLiteQuantizationFree(TfLiteQuantization* quantization) {
+ if (quantization->type == kTfLiteAffineQuantization) {
+ TfLiteAffineQuantization* q_params =
+ (TfLiteAffineQuantization*)(quantization->params);
+ if (q_params->scale) {
+ TfLiteFloatArrayFree(q_params->scale);
+ q_params->scale = nullptr;
+ }
+ if (q_params->zero_point) {
+ TfLiteIntArrayFree(q_params->zero_point);
+ q_params->zero_point = nullptr;
+ }
+ free(q_params);
+ }
+ quantization->params = nullptr;
+ quantization->type = kTfLiteNoQuantization;
+}
+
+void TfLiteSparsityFree(TfLiteSparsity* sparsity) {
+ if (sparsity == nullptr) {
+ return;
+ }
+
+ if (sparsity->traversal_order) {
+ TfLiteIntArrayFree(sparsity->traversal_order);
+ sparsity->traversal_order = nullptr;
+ }
+
+ if (sparsity->block_map) {
+ TfLiteIntArrayFree(sparsity->block_map);
+ sparsity->block_map = nullptr;
+ }
+
+ if (sparsity->dim_metadata) {
+ int i = 0;
+ for (; i < sparsity->dim_metadata_size; i++) {
+ TfLiteDimensionMetadata metadata = sparsity->dim_metadata[i];
+ if (metadata.format == kTfLiteDimSparseCSR) {
+ TfLiteIntArrayFree(metadata.array_segments);
+ metadata.array_segments = nullptr;
+ TfLiteIntArrayFree(metadata.array_indices);
+ metadata.array_indices = nullptr;
+ }
+ }
+ free(sparsity->dim_metadata);
+ sparsity->dim_metadata = nullptr;
+ }
+
+ free(sparsity);
+}
+
+void TfLiteTensorFree(TfLiteTensor* t) {
+ TfLiteTensorDataFree(t);
+ if (t->dims) TfLiteIntArrayFree(t->dims);
+ t->dims = nullptr;
+
+ if (t->dims_signature) {
+ TfLiteIntArrayFree((TfLiteIntArray*)t->dims_signature);
+ }
+ t->dims_signature = nullptr;
+
+ TfLiteQuantizationFree(&t->quantization);
+ TfLiteSparsityFree(t->sparsity);
+ t->sparsity = nullptr;
+}
+
+void TfLiteTensorReset(TfLiteType type, const char* name, TfLiteIntArray* dims,
+ TfLiteQuantizationParams quantization, char* buffer,
+ size_t size, TfLiteAllocationType allocation_type,
+ const void* allocation, bool is_variable,
+ TfLiteTensor* tensor) {
+ TfLiteTensorFree(tensor);
+ tensor->type = type;
+ tensor->name = name;
+ tensor->dims = dims;
+ tensor->params = quantization;
+ tensor->data.raw = buffer;
+ tensor->bytes = size;
+ tensor->allocation_type = allocation_type;
+ tensor->allocation = allocation;
+ tensor->is_variable = is_variable;
+
+ tensor->quantization.type = kTfLiteNoQuantization;
+ tensor->quantization.params = nullptr;
+}
+
+TfLiteStatus TfLiteTensorCopy(const TfLiteTensor* src, TfLiteTensor* dst) {
+ if (!src || !dst) return kTfLiteOk;
+ if (src->bytes != dst->bytes) return kTfLiteError;
+ if (src == dst) return kTfLiteOk;
+
+ dst->type = src->type;
+ if (dst->dims) TfLiteIntArrayFree(dst->dims);
+ dst->dims = TfLiteIntArrayCopy(src->dims);
+ memcpy(dst->data.raw, src->data.raw, src->bytes);
+ dst->buffer_handle = src->buffer_handle;
+ dst->data_is_stale = src->data_is_stale;
+ dst->delegate = src->delegate;
+
+ return kTfLiteOk;
+}
+
+void TfLiteTensorResizeMaybeCopy(size_t num_bytes, TfLiteTensor* tensor,
+ bool preserve_data) {
+ if (tensor->allocation_type != kTfLiteDynamic &&
+ tensor->allocation_type != kTfLitePersistentRo) {
+ return;
+ }
+ // TODO(b/145340303): Tensor data should be aligned.
+ if (!tensor->data.data) {
+ tensor->data.data = (char*)malloc(num_bytes);
+#ifdef TF_LITE_TENSORFLOW_PROFILER
+ tflite::OnTfLiteTensorAlloc(tensor, num_bytes);
+#endif
+ } else if (num_bytes > tensor->bytes) {
+#ifdef TF_LITE_TENSORFLOW_PROFILER
+ tflite::OnTfLiteTensorDealloc(tensor);
+#endif
+ if (preserve_data) {
+ tensor->data.data = (char*)realloc(tensor->data.data, num_bytes);
+ } else {
+ // Calling free and malloc can be more efficient as it avoids needlessly
+ // copying the data when it is not required.
+ free(tensor->data.data);
+ tensor->data.data = (char*)malloc(num_bytes);
+ }
+#ifdef TF_LITE_TENSORFLOW_PROFILER
+ tflite::OnTfLiteTensorAlloc(tensor, num_bytes);
+#endif
+ }
+ tensor->bytes = num_bytes;
+}
+
+void TfLiteTensorRealloc(size_t num_bytes, TfLiteTensor* tensor) {
+ return TfLiteTensorResizeMaybeCopy(num_bytes, tensor, true);
+}
+#endif // ARDUINO
+
+const char* TfLiteTypeGetName(TfLiteType type) {
+ switch (type) {
+ case kTfLiteNoType:
+ return "NOTYPE";
+ case kTfLiteFloat32:
+ return "FLOAT32";
+ case kTfLiteUInt16:
+ return "UINT16";
+ case kTfLiteInt16:
+ return "INT16";
+ case kTfLiteInt32:
+ return "INT32";
+ case kTfLiteUInt32:
+ return "UINT32";
+ case kTfLiteUInt8:
+ return "UINT8";
+ case kTfLiteInt8:
+ return "INT8";
+ case kTfLiteInt64:
+ return "INT64";
+ case kTfLiteUInt64:
+ return "UINT64";
+ case kTfLiteBool:
+ return "BOOL";
+ case kTfLiteComplex64:
+ return "COMPLEX64";
+ case kTfLiteComplex128:
+ return "COMPLEX128";
+ case kTfLiteString:
+ return "STRING";
+ case kTfLiteFloat16:
+ return "FLOAT16";
+ case kTfLiteFloat64:
+ return "FLOAT64";
+ case kTfLiteResource:
+ return "RESOURCE";
+ case kTfLiteVariant:
+ return "VARIANT";
+ case kTfLiteInt4:
+ return "INT4";
+ }
+ return "Unknown type";
+}
+
+TfLiteDelegate TfLiteDelegateCreate() { return TfLiteDelegate{}; }
+
+struct TfLiteOpaqueDelegateStruct* TfLiteOpaqueDelegateCreate(
+ const TfLiteOpaqueDelegateBuilder* opaque_delegate_builder) {
+ if (!opaque_delegate_builder) return nullptr;
+
+ TfLiteDelegate* result = new TfLiteDelegate{};
+ result->opaque_delegate_builder = new TfLiteOpaqueDelegateBuilder{};
+ *(result->opaque_delegate_builder) = *opaque_delegate_builder;
+
+ return reinterpret_cast(result);
+}
+
+void TfLiteOpaqueDelegateDelete(
+ const struct TfLiteOpaqueDelegateStruct* opaque_delegate) {
+ if (!opaque_delegate) return;
+
+ const TfLiteDelegate* tflite_delegate =
+ reinterpret_cast(opaque_delegate);
+ delete tflite_delegate->opaque_delegate_builder;
+ delete tflite_delegate;
+}
+
+} // extern "C"
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/c/common.h b/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/c/common.h
new file mode 100644
index 000000000..08909ab08
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/c/common.h
@@ -0,0 +1,1110 @@
+/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+// This file defines common C types and APIs for implementing operations,
+// delegates and other constructs in TensorFlow Lite. The actual operations and
+// delegates can be defined using C++, but the interface between the interpreter
+// and the operations are C.
+//
+// Summary of abstractions
+// TF_LITE_ENSURE - Self-sufficient error checking
+// TfLiteStatus - Status reporting
+// TfLiteIntArray - stores tensor shapes (dims),
+// TfLiteContext - allows an op to access the tensors
+// TfLiteTensor - tensor (a multidimensional array)
+// TfLiteNode - a single node or operation
+// TfLiteRegistration - the implementation of a conceptual operation.
+// TfLiteDelegate - allows delegation of nodes to alternative backends.
+//
+// Some abstractions in this file are created and managed by Interpreter.
+//
+// NOTE: The order of values in these structs are "semi-ABI stable". New values
+// should be added only to the end of structs and never reordered.
+
+#ifndef TENSORFLOW_LITE_C_COMMON_H_
+#define TENSORFLOW_LITE_C_COMMON_H_
+
+#include
+#include
+#include
+
+#include "tensorflow/lite/c/c_api_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+// The list of external context types known to TF Lite. This list exists solely
+// to avoid conflicts and to ensure ops can share the external contexts they
+// need. Access to the external contexts is controlled by one of the
+// corresponding support files.
+typedef enum TfLiteExternalContextType {
+ kTfLiteEigenContext = 0, // include eigen_support.h to use.
+ kTfLiteGemmLowpContext = 1, // include gemm_support.h to use.
+ kTfLiteEdgeTpuContext = 2, // Placeholder for Edge TPU support.
+ kTfLiteCpuBackendContext = 3, // include cpu_backend_context.h to use.
+ kTfLiteMaxExternalContexts = 4
+} TfLiteExternalContextType;
+
+// Forward declare so dependent structs and methods can reference these types
+// prior to the struct definitions.
+struct TfLiteContext;
+struct TfLiteDelegate;
+struct TfLiteRegistration;
+struct TfLiteOpaqueDelegateStruct;
+struct TfLiteOpaqueDelegateBuilder;
+
+// An external context is a collection of information unrelated to the TF Lite
+// framework, but useful to a subset of the ops. TF Lite knows very little
+// about the actual contexts, but it keeps a list of them, and is able to
+// refresh them if configurations like the number of recommended threads
+// change.
+typedef struct TfLiteExternalContext {
+ TfLiteExternalContextType type;
+ TfLiteStatus (*Refresh)(struct TfLiteContext* context);
+} TfLiteExternalContext;
+
+#define kTfLiteOptionalTensor (-1)
+
+// Fixed size list of integers. Used for dimensions and inputs/outputs tensor
+// indices
+typedef struct TfLiteIntArray {
+ int size;
+
+#if defined(_MSC_VER)
+ // Context for why this is needed is in http://b/189926408#comment21
+ int data[1];
+#elif (!defined(__clang__) && defined(__GNUC__) && __GNUC__ == 6 && \
+ __GNUC_MINOR__ >= 1) || \
+ defined(HEXAGON) || \
+ (defined(__clang__) && __clang_major__ == 7 && __clang_minor__ == 1)
+ // gcc 6.1+ have a bug where flexible members aren't properly handled
+ // https://github.com/google/re2/commit/b94b7cd42e9f02673cd748c1ac1d16db4052514c
+ int data[0];
+#else
+ int data[];
+#endif
+} TfLiteIntArray;
+
+// Given the size (number of elements) in a TfLiteIntArray, calculate its size
+// in bytes.
+size_t TfLiteIntArrayGetSizeInBytes(int size);
+
+#ifndef ARDUINO
+// Create a array of a given `size` (uninitialized entries).
+// This returns a pointer, that you must free using TfLiteIntArrayFree().
+TfLiteIntArray* TfLiteIntArrayCreate(int size);
+#endif
+
+// Check if two intarrays are equal. Returns 1 if they are equal, 0 otherwise.
+int TfLiteIntArrayEqual(const TfLiteIntArray* a, const TfLiteIntArray* b);
+
+// Check if an intarray equals an array. Returns 1 if equals, 0 otherwise.
+int TfLiteIntArrayEqualsArray(const TfLiteIntArray* a, int b_size,
+ const int b_data[]);
+
+#ifndef ARDUINO
+// Create a copy of an array passed as `src`.
+// You are expected to free memory with TfLiteIntArrayFree
+TfLiteIntArray* TfLiteIntArrayCopy(const TfLiteIntArray* src);
+
+// Free memory of array `a`.
+void TfLiteIntArrayFree(TfLiteIntArray* a);
+#endif // ARDUINO
+
+// Fixed size list of floats. Used for per-channel quantization.
+typedef struct TfLiteFloatArray {
+ int size;
+#if defined(_MSC_VER)
+ // Context for why this is needed is in http://b/189926408#comment21
+ float data[1];
+#elif (!defined(__clang__) && defined(__GNUC__) && __GNUC__ == 6 && \
+ __GNUC_MINOR__ >= 1) || \
+ defined(HEXAGON) || \
+ (defined(__clang__) && __clang_major__ == 7 && __clang_minor__ == 1)
+ // gcc 6.1+ have a bug where flexible members aren't properly handled
+ // https://github.com/google/re2/commit/b94b7cd42e9f02673cd748c1ac1d16db4052514c
+ float data[0];
+#else
+ float data[];
+#endif
+} TfLiteFloatArray;
+
+// Given the size (number of elements) in a TfLiteFloatArray, calculate its size
+// in bytes.
+int TfLiteFloatArrayGetSizeInBytes(int size);
+
+#ifndef ARDUINO
+// Create a array of a given `size` (uninitialized entries).
+// This returns a pointer, that you must free using TfLiteFloatArrayFree().
+TfLiteFloatArray* TfLiteFloatArrayCreate(int size);
+
+// Free memory of array `a`.
+void TfLiteFloatArrayFree(TfLiteFloatArray* a);
+#endif // ARDUINO
+
+// Since we must not depend on any libraries, define a minimal subset of
+// error macros while avoiding names that have pre-conceived meanings like
+// assert and check.
+
+// Try to make all reporting calls through TF_LITE_KERNEL_LOG rather than
+// calling the context->ReportError function directly, so that message strings
+// can be stripped out if the binary size needs to be severely optimized.
+#ifndef TF_LITE_STRIP_ERROR_STRINGS
+#define TF_LITE_KERNEL_LOG(context, ...) \
+ do { \
+ (context)->ReportError((context), __VA_ARGS__); \
+ } while (false)
+
+#define TF_LITE_MAYBE_KERNEL_LOG(context, ...) \
+ do { \
+ if ((context) != nullptr) { \
+ (context)->ReportError((context), __VA_ARGS__); \
+ } \
+ } while (false)
+#else // TF_LITE_STRIP_ERROR_STRINGS
+#define ARGS_UNUSED(...) (void)sizeof(#__VA_ARGS__)
+#define TF_LITE_KERNEL_LOG(context, ...) ARGS_UNUSED(__VA_ARGS__)
+#define TF_LITE_MAYBE_KERNEL_LOG(context, ...) ARGS_UNUSED(__VA_ARGS__)
+#endif // TF_LITE_STRIP_ERROR_STRINGS
+
+// Check whether value is true, and if not return kTfLiteError from
+// the current function (and report the error string msg).
+#define TF_LITE_ENSURE_MSG(context, value, msg) \
+ do { \
+ if (!(value)) { \
+ TF_LITE_KERNEL_LOG((context), __FILE__ " " msg); \
+ return kTfLiteError; \
+ } \
+ } while (0)
+
+// Check whether the value `a` is true, and if not return kTfLiteError from
+// the current function, while also reporting the location of the error.
+#define TF_LITE_ENSURE(context, a) \
+ do { \
+ if (!(a)) { \
+ TF_LITE_KERNEL_LOG((context), "%s:%d %s was not true.", __FILE__, \
+ __LINE__, #a); \
+ return kTfLiteError; \
+ } \
+ } while (0)
+
+#define TF_LITE_ENSURE_STATUS(a) \
+ do { \
+ const TfLiteStatus s = (a); \
+ if (s != kTfLiteOk) { \
+ return s; \
+ } \
+ } while (0)
+
+// Check whether the value `a == b` is true, and if not return kTfLiteError from
+// the current function, while also reporting the location of the error.
+// `a` and `b` may be evaluated more than once, so no side effects or
+// extremely expensive computations should be done.
+// NOTE: Use TF_LITE_ENSURE_TYPES_EQ if comparing TfLiteTypes.
+#define TF_LITE_ENSURE_EQ(context, a, b) \
+ do { \
+ if ((a) != (b)) { \
+ TF_LITE_KERNEL_LOG((context), "%s:%d %s != %s (%d != %d)", __FILE__, \
+ __LINE__, #a, #b, (a), (b)); \
+ return kTfLiteError; \
+ } \
+ } while (0)
+
+#define TF_LITE_ENSURE_TYPES_EQ(context, a, b) \
+ do { \
+ if ((a) != (b)) { \
+ TF_LITE_KERNEL_LOG((context), "%s:%d %s != %s (%s != %s)", __FILE__, \
+ __LINE__, #a, #b, TfLiteTypeGetName(a), \
+ TfLiteTypeGetName(b)); \
+ return kTfLiteError; \
+ } \
+ } while (0)
+
+#define TF_LITE_ENSURE_NEAR(context, a, b, epsilon) \
+ do { \
+ auto delta = ((a) > (b)) ? ((a) - (b)) : ((b) - (a)); \
+ if (delta > epsilon) { \
+ TF_LITE_KERNEL_LOG((context), "%s:%d %s not near %s (%f != %f)", \
+ __FILE__, __LINE__, #a, #b, static_cast(a), \
+ static_cast(b)); \
+ return kTfLiteError; \
+ } \
+ } while (0)
+
+#define TF_LITE_ENSURE_OK(context, status) \
+ do { \
+ const TfLiteStatus s = (status); \
+ if ((s) != kTfLiteOk) { \
+ return s; \
+ } \
+ } while (0)
+
+// Single-precision complex data type compatible with the C99 definition.
+typedef struct TfLiteComplex64 {
+ float re, im; // real and imaginary parts, respectively.
+} TfLiteComplex64;
+
+// Double-precision complex data type compatible with the C99 definition.
+typedef struct TfLiteComplex128 {
+ double re, im; // real and imaginary parts, respectively.
+} TfLiteComplex128;
+
+// Half precision data type compatible with the C99 definition.
+typedef struct TfLiteFloat16 {
+ uint16_t data;
+} TfLiteFloat16;
+
+// Return the name of a given type, for error reporting purposes.
+const char* TfLiteTypeGetName(TfLiteType type);
+
+// SupportedQuantizationTypes.
+typedef enum TfLiteQuantizationType {
+ // No quantization.
+ kTfLiteNoQuantization = 0,
+ // Affine quantization (with support for per-channel quantization).
+ // Corresponds to TfLiteAffineQuantization.
+ kTfLiteAffineQuantization = 1,
+} TfLiteQuantizationType;
+
+// Structure specifying the quantization used by the tensor, if-any.
+typedef struct TfLiteQuantization {
+ // The type of quantization held by params.
+ TfLiteQuantizationType type;
+ // Holds an optional reference to a quantization param structure. The actual
+ // type depends on the value of the `type` field (see the comment there for
+ // the values and corresponding types).
+ void* params;
+} TfLiteQuantization;
+
+// Parameters for asymmetric quantization across a dimension (i.e per output
+// channel quantization).
+// quantized_dimension specifies which dimension the scales and zero_points
+// correspond to.
+// For a particular value in quantized_dimension, quantized values can be
+// converted back to float using:
+// real_value = scale * (quantized_value - zero_point)
+typedef struct TfLiteAffineQuantization {
+ TfLiteFloatArray* scale;
+ TfLiteIntArray* zero_point;
+ int32_t quantized_dimension;
+} TfLiteAffineQuantization;
+
+/* A union of pointers that points to memory for a given tensor. */
+typedef union TfLitePtrUnion {
+ /* Do not access these members directly, if possible, use
+ * GetTensorData(tensor) instead, otherwise only access .data, as other
+ * members are deprecated. */
+ int32_t* i32;
+ uint32_t* u32;
+ int64_t* i64;
+ uint64_t* u64;
+ float* f;
+ TfLiteFloat16* f16;
+ double* f64;
+ char* raw;
+ const char* raw_const;
+ uint8_t* uint8;
+ bool* b;
+ int16_t* i16;
+ uint16_t* ui16;
+ TfLiteComplex64* c64;
+ TfLiteComplex128* c128;
+ int8_t* int8;
+ /* Only use this member. */
+ void* data;
+} TfLitePtrUnion;
+
+// Memory allocation strategies.
+// * kTfLiteMmapRo: Read-only memory-mapped data, or data externally allocated.
+// * kTfLiteArenaRw: Arena allocated with no guarantees about persistence,
+// and available during eval.
+// * kTfLiteArenaRwPersistent: Arena allocated but persistent across eval, and
+// only available during eval.
+// * kTfLiteDynamic: Allocated during eval, or for string tensors.
+// * kTfLitePersistentRo: Allocated and populated during prepare. This is
+// useful for tensors that can be computed during prepare and treated
+// as constant inputs for downstream ops (also in prepare).
+// * kTfLiteCustom: Custom memory allocation provided by the user. See
+// TfLiteCustomAllocation below.
+typedef enum TfLiteAllocationType {
+ kTfLiteMemNone = 0,
+ kTfLiteMmapRo,
+ kTfLiteArenaRw,
+ kTfLiteArenaRwPersistent,
+ kTfLiteDynamic,
+ kTfLitePersistentRo,
+ kTfLiteCustom,
+} TfLiteAllocationType;
+
+// The delegates should use zero or positive integers to represent handles.
+// -1 is reserved from unallocated status.
+typedef int TfLiteBufferHandle;
+enum {
+ kTfLiteNullBufferHandle = -1,
+};
+
+// Storage format of each dimension in a sparse tensor.
+typedef enum TfLiteDimensionType {
+ kTfLiteDimDense = 0,
+ kTfLiteDimSparseCSR,
+} TfLiteDimensionType;
+
+// Metadata to encode each dimension in a sparse tensor.
+typedef struct TfLiteDimensionMetadata {
+ TfLiteDimensionType format;
+ int dense_size;
+ TfLiteIntArray* array_segments;
+ TfLiteIntArray* array_indices;
+} TfLiteDimensionMetadata;
+
+// Parameters used to encode a sparse tensor. For detailed explanation of each
+// field please refer to lite/schema/schema.fbs.
+typedef struct TfLiteSparsity {
+ TfLiteIntArray* traversal_order;
+ TfLiteIntArray* block_map;
+ TfLiteDimensionMetadata* dim_metadata;
+ int dim_metadata_size;
+} TfLiteSparsity;
+
+// Defines a custom memory allocation not owned by the runtime.
+// `data` should be aligned to kDefaultTensorAlignment defined in
+// lite/util.h. (Currently 64 bytes)
+// NOTE: See Interpreter.SetCustomAllocationForTensor for details on usage.
+typedef struct TfLiteCustomAllocation {
+ void* data;
+ size_t bytes;
+} TfLiteCustomAllocation;
+
+// The flags used in `Interpreter::SetCustomAllocationForTensor`.
+// Note that this is a bitmask, so the values should be 1, 2, 4, 8, ...etc.
+typedef enum TfLiteCustomAllocationFlags {
+ kTfLiteCustomAllocationFlagsNone = 0,
+ // Skips checking whether allocation.data points to an aligned buffer as
+ // expected by the TFLite runtime.
+ // NOTE: Setting this flag can cause crashes when calling Invoke().
+ // Use with caution.
+ kTfLiteCustomAllocationFlagsSkipAlignCheck = 1,
+} TfLiteCustomAllocationFlags;
+
+// A tensor in the interpreter system which is a wrapper around a buffer of
+// data including a dimensionality (or NULL if not currently defined).
+#ifndef ARDUINO
+typedef struct TfLiteTensor {
+ // The data type specification for data stored in `data`. This affects
+ // what member of `data` union should be used.
+ TfLiteType type;
+ // A union of data pointers. The appropriate type should be used for a typed
+ // tensor based on `type`.
+ TfLitePtrUnion data;
+ // A pointer to a structure representing the dimensionality interpretation
+ // that the buffer should have. NOTE: the product of elements of `dims`
+ // and the element datatype size should be equal to `bytes` below.
+ TfLiteIntArray* dims;
+ // Quantization information.
+ TfLiteQuantizationParams params;
+ // How memory is mapped
+ // kTfLiteMmapRo: Memory mapped read only.
+ // i.e. weights
+ // kTfLiteArenaRw: Arena allocated read write memory
+ // (i.e. temporaries, outputs).
+ TfLiteAllocationType allocation_type;
+ // The number of bytes required to store the data of this Tensor. I.e.
+ // (bytes of each element) * dims[0] * ... * dims[n-1]. For example, if
+ // type is kTfLiteFloat32 and dims = {3, 2} then
+ // bytes = sizeof(float) * 3 * 2 = 4 * 3 * 2 = 24.
+ size_t bytes;
+
+ // An opaque pointer to a tflite::MMapAllocation
+ const void* allocation;
+
+ // Null-terminated name of this tensor.
+ const char* name;
+
+ // The delegate which knows how to handle `buffer_handle`.
+ // WARNING: This is an experimental interface that is subject to change.
+ struct TfLiteDelegate* delegate;
+
+ // An integer buffer handle that can be handled by `delegate`.
+ // The value is valid only when delegate is not null.
+ // WARNING: This is an experimental interface that is subject to change.
+ TfLiteBufferHandle buffer_handle;
+
+ // If the delegate uses its own buffer (e.g. GPU memory), the delegate is
+ // responsible to set data_is_stale to true.
+ // `delegate->CopyFromBufferHandle` can be called to copy the data from
+ // delegate buffer.
+ // WARNING: This is an // experimental interface that is subject to change.
+ bool data_is_stale;
+
+ // True if the tensor is a variable.
+ bool is_variable;
+
+ // Quantization information. Replaces params field above.
+ TfLiteQuantization quantization;
+
+ // Parameters used to encode a sparse tensor.
+ // This is optional. The field is NULL if a tensor is dense.
+ // WARNING: This is an experimental interface that is subject to change.
+ TfLiteSparsity* sparsity;
+
+ // Optional. Encodes shapes with unknown dimensions with -1. This field is
+ // only populated when unknown dimensions exist in a read-write tensor (i.e.
+ // an input or output tensor). (e.g. `dims` contains [1, 1, 1, 3] and
+ // `dims_signature` contains [1, -1, -1, 3]). Note that this field only
+ // exists when TF_LITE_STATIC_MEMORY is not defined.
+ const TfLiteIntArray* dims_signature;
+} TfLiteTensor;
+
+// A structure representing an instance of a node.
+// This structure only exhibits the inputs, outputs, user defined data and some
+// node properties (like statefulness), not other features like the type.
+typedef struct TfLiteNode {
+ // Inputs to this node expressed as indices into the simulator's tensors.
+ TfLiteIntArray* inputs;
+
+ // Outputs to this node expressed as indices into the simulator's tensors.
+ TfLiteIntArray* outputs;
+
+ // intermediate tensors to this node expressed as indices into the simulator's
+ // tensors.
+ TfLiteIntArray* intermediates;
+
+ // Temporary tensors uses during the computations. This usually contains no
+ // tensors, but ops are allowed to change that if they need scratch space of
+ // any sort.
+ TfLiteIntArray* temporaries;
+
+ // Opaque data provided by the node implementer through `Registration.init`.
+ void* user_data;
+
+ // Opaque data provided to the node if the node is a builtin. This is usually
+ // a structure defined in builtin_op_data.h
+ void* builtin_data;
+
+ // Custom initial data. This is the opaque data provided in the flatbuffer.
+ // WARNING: This is an experimental interface that is subject to change.
+ const void* custom_initial_data;
+ int custom_initial_data_size;
+
+ // The pointer to the delegate. This is non-null only when the node is
+ // created by calling `interpreter.ModifyGraphWithDelegate`.
+ // WARNING: This is an experimental interface that is subject to change.
+ struct TfLiteDelegate* delegate;
+
+ // Whether this op might have side effect (e.g. stateful op).
+ bool might_have_side_effect;
+} TfLiteNode;
+#else // defined(ARDUINO)?
+// NOTE: This flag is opt-in only at compile time.
+//
+// Specific reduced TfLiteTensor struct for TF Micro runtime. This struct
+// contains only the minimum fields required to initialize and prepare a micro
+// inference graph. The fields in this struct have been ordered from
+// largest-to-smallest for optimal struct sizeof.
+//
+// This struct does not use:
+// - allocation
+// - buffer_handle
+// - data_is_stale
+// - delegate
+// - dims_signature
+// - name
+// - sparsity
+typedef struct TfLiteTensor {
+ // TODO(b/155784997): Consider consolidating these quantization fields:
+ // Quantization information. Replaces params field above.
+ TfLiteQuantization quantization;
+
+ // Quantization information.
+ TfLiteQuantizationParams params;
+
+ // A union of data pointers. The appropriate type should be used for a typed
+ // tensor based on `type`.
+ TfLitePtrUnion data;
+
+ // A pointer to a structure representing the dimensionality interpretation
+ // that the buffer should have. NOTE: the product of elements of `dims`
+ // and the element datatype size should be equal to `bytes` below.
+ TfLiteIntArray* dims;
+
+ // The number of bytes required to store the data of this Tensor. I.e.
+ // (bytes of each element) * dims[0] * ... * dims[n-1]. For example, if
+ // type is kTfLiteFloat32 and dims = {3, 2} then
+ // bytes = sizeof(float) * 3 * 2 = 4 * 3 * 2 = 24.
+ size_t bytes;
+
+ // The data type specification for data stored in `data`. This affects
+ // what member of `data` union should be used.
+ TfLiteType type;
+
+ // How memory is mapped
+ // kTfLiteMmapRo: Memory mapped read only.
+ // i.e. weights
+ // kTfLiteArenaRw: Arena allocated read write memory
+ // (i.e. temporaries, outputs).
+ TfLiteAllocationType allocation_type;
+
+ // True if the tensor is a variable.
+ bool is_variable;
+} TfLiteTensor;
+
+// Specific reduced TfLiteNode struct for TF Micro runtime. This struct contains
+// only the minimum fields required to represent a node.
+//
+// This struct does not use:
+// - delegate
+// - intermediates
+// - temporaries
+typedef struct TfLiteNode {
+ // Inputs to this node expressed as indices into the simulator's tensors.
+ TfLiteIntArray* inputs;
+
+ // Outputs to this node expressed as indices into the simulator's tensors.
+ TfLiteIntArray* outputs;
+
+ // intermediate tensors to this node expressed as indices into the simulator's
+ // tensors.
+ TfLiteIntArray* intermediates;
+
+ // Opaque data provided by the node implementer through `Registration.init`.
+ void* user_data;
+
+ // Opaque data provided to the node if the node is a builtin. This is usually
+ // a structure defined in builtin_op_data.h
+ void* builtin_data;
+
+ // Custom initial data. This is the opaque data provided in the flatbuffer.
+ // WARNING: This is an experimental interface that is subject to change.
+ const void* custom_initial_data;
+ int custom_initial_data_size;
+} TfLiteNode;
+#endif // ARDUINO
+
+// Light-weight tensor struct for TF Micro runtime. Provides the minimal amount
+// of information required for a kernel to run during TfLiteRegistration::Eval.
+// TODO(b/160955687): Move this field into TF_LITE_STATIC_MEMORY when TFLM
+// builds with this flag by default internally.
+typedef struct TfLiteEvalTensor {
+ // A union of data pointers. The appropriate type should be used for a typed
+ // tensor based on `type`.
+ TfLitePtrUnion data;
+
+ // A pointer to a structure representing the dimensionality interpretation
+ // that the buffer should have.
+ TfLiteIntArray* dims;
+
+ // The data type specification for data stored in `data`. This affects
+ // what member of `data` union should be used.
+ TfLiteType type;
+} TfLiteEvalTensor;
+
+#ifndef ARDUINO
+// Free data memory of tensor `t`.
+void TfLiteTensorDataFree(TfLiteTensor* t);
+
+// Free quantization data.
+void TfLiteQuantizationFree(TfLiteQuantization* quantization);
+
+// Free sparsity parameters.
+void TfLiteSparsityFree(TfLiteSparsity* sparsity);
+
+// Free memory of tensor `t`.
+void TfLiteTensorFree(TfLiteTensor* t);
+
+// Set all of a tensor's fields (and free any previously allocated data).
+void TfLiteTensorReset(TfLiteType type, const char* name, TfLiteIntArray* dims,
+ TfLiteQuantizationParams quantization, char* buffer,
+ size_t size, TfLiteAllocationType allocation_type,
+ const void* allocation, bool is_variable,
+ TfLiteTensor* tensor);
+
+// Copies the contents of 'src' in 'dst'.
+// Function does nothing if either 'src' or 'dst' is passed as nullptr and
+// return kTfLiteOk.
+// Returns kTfLiteError if 'src' and 'dst' doesn't have matching data size.
+// Note function copies contents, so it won't create new data pointer
+// or change allocation type.
+// All Tensor related properties will be copied from 'src' to 'dst' like
+// quantization, sparsity, ...
+TfLiteStatus TfLiteTensorCopy(const TfLiteTensor* src, TfLiteTensor* dst);
+
+// Change the size of the memory block owned by `tensor` to `num_bytes`.
+// Tensors with allocation types other than kTfLiteDynamic will be ignored.
+// `tensor`'s internal data buffer will be assigned a pointer
+// which can safely be passed to free or realloc if `num_bytes` is zero.
+// Behaviour is undefined if `tensor` is NULL.
+// If `preserve_data` is true, tensor data will be unchanged in the range from
+// the start of the region up to the minimum of the old and new sizes.
+void TfLiteTensorResizeMaybeCopy(size_t num_bytes, TfLiteTensor* tensor,
+ bool preserve_data);
+
+// Change the size of the memory block owned by `tensor` to `num_bytes`.
+// Tensors with allocation types other than kTfLiteDynamic will be ignored.
+// `tensor`'s internal data buffer will be assigned a pointer
+// which can safely be passed to free or realloc if `num_bytes` is zero.
+// Behaviour is undefined if `tensor` is NULL.
+// Tensor data will be unchanged in the range from the start of the region up to
+// the minimum of the old and new sizes.
+void TfLiteTensorRealloc(size_t num_bytes, TfLiteTensor* tensor);
+#endif // ARDUINO
+
+// WARNING: This is an experimental interface that is subject to change.
+//
+// Currently, TfLiteDelegateParams has to be allocated in a way that it's
+// trivially destructable. It will be stored as `builtin_data` field in
+// `TfLiteNode` of the delegate node.
+//
+// See also the `CreateDelegateParams` function in `interpreter.cc` details.
+typedef struct TfLiteDelegateParams {
+ struct TfLiteDelegate* delegate;
+ TfLiteIntArray* nodes_to_replace;
+ TfLiteIntArray* input_tensors;
+ TfLiteIntArray* output_tensors;
+} TfLiteDelegateParams;
+
+typedef struct TfLiteContext {
+ // Number of tensors in the context.
+ size_t tensors_size;
+
+ // The execution plan contains a list of the node indices in execution
+ // order. execution_plan->size is the current number of nodes. And,
+ // execution_plan->data[0] is the first node that needs to be run.
+ // TfLiteDelegates can traverse the current execution plan by iterating
+ // through each member of this array and using GetNodeAndRegistration() to
+ // access details about a node. i.e.
+ //
+ // TfLiteIntArray* execution_plan;
+ // TF_LITE_ENSURE_STATUS(context->GetExecutionPlan(context, &execution_plan));
+ // for (int exec_index = 0; exec_index < execution_plan->size; exec_index++) {
+ // int node_index = execution_plan->data[exec_index];
+ // TfLiteNode* node;
+ // TfLiteRegistration* reg;
+ // context->GetNodeAndRegistration(context, node_index, &node, ®);
+ // }
+ // Note: the memory pointed by '`*execution_plan` is OWNED by TfLite runtime.
+ // Future calls to GetExecutionPlan invalidates earlier outputs. The following
+ // code snippet shows the issue of such an invocation pattern. After calling
+ // CheckNode, subsequent access to `plan_1st` is undefined.
+ //
+ // void CheckNode(const TfLiteNode* node) {
+ // ...
+ // TfLiteIntArray* plan_2nd;
+ // TF_LITE_ENSURE_STATUS(context->GetExecutionPlan(context, &plan_2nd));
+ // ...
+ // }
+ //
+ // TfLiteIntArray* plan_1st;
+ // TF_LITE_ENSURE_STATUS(context->GetExecutionPlan(context, &plan_1st));
+ // for (int exec_index = 0; exec_index < plan_1st->size; exec_index++) {
+ // int node_index = plan_1st->data[exec_index];
+ // TfLiteNode* node;
+ // TfLiteRegistration* reg;
+ // context->GetNodeAndRegistration(context, node_index, &node, ®);
+ // CheckNode(node);
+ // }
+ //
+ // WARNING: This is an experimental interface that is subject to change.
+ TfLiteStatus (*GetExecutionPlan)(struct TfLiteContext* context,
+ TfLiteIntArray** execution_plan);
+
+ // An array of tensors in the interpreter context (of length `tensors_size`)
+ TfLiteTensor* tensors;
+
+ // opaque full context ptr (an opaque c++ data structure)
+ void* impl_;
+
+ // Request memory pointer be resized. Updates dimensions on the tensor.
+ // NOTE: ResizeTensor takes ownership of newSize.
+ TfLiteStatus (*ResizeTensor)(struct TfLiteContext*, TfLiteTensor* tensor,
+ TfLiteIntArray* new_size);
+ // Request that an error be reported with format string msg.
+ void (*ReportError)(struct TfLiteContext*, const char* msg, ...);
+
+ // Add `tensors_to_add` tensors, preserving pre-existing Tensor entries. If
+ // non-null, the value pointed to by `first_new_tensor_index` will be set to
+ // the index of the first new tensor.
+ TfLiteStatus (*AddTensors)(struct TfLiteContext*, int tensors_to_add,
+ int* first_new_tensor_index);
+
+ // Get a Tensor node by node_index.
+ // WARNING: This is an experimental interface that is subject to change.
+ TfLiteStatus (*GetNodeAndRegistration)(
+ struct TfLiteContext*, int node_index, TfLiteNode** node,
+ struct TfLiteRegistration** registration);
+
+ // Replace ops with one or more stub delegate operations. This function
+ // does not take ownership of `nodes_to_replace`.
+ TfLiteStatus (*ReplaceNodeSubsetsWithDelegateKernels)(
+ struct TfLiteContext*, struct TfLiteRegistration registration,
+ const TfLiteIntArray* nodes_to_replace, struct TfLiteDelegate* delegate);
+
+ // Number of threads that are recommended to subsystems like gemmlowp and
+ // eigen.
+ int recommended_num_threads;
+
+ // Access external contexts by type.
+ // WARNING: This is an experimental interface that is subject to change.
+ TfLiteExternalContext* (*GetExternalContext)(struct TfLiteContext*,
+ TfLiteExternalContextType);
+ // Set the value of a external context. Does not take ownership of the
+ // pointer.
+ // WARNING: This is an experimental interface that is subject to change.
+ void (*SetExternalContext)(struct TfLiteContext*, TfLiteExternalContextType,
+ TfLiteExternalContext*);
+
+ // Flag for allowing float16 precision for FP32 calculation.
+ // default: false.
+ // WARNING: This is an experimental API and subject to change.
+ bool allow_fp32_relax_to_fp16;
+
+ // Pointer to the op-level profiler, if set; nullptr otherwise.
+ void* profiler;
+
+ // Allocate persistent buffer which has the same life time as the interpreter.
+ // Returns nullptr on failure.
+ // The memory is allocated from heap for TFL, and from tail in TFLM.
+ // This method is only available in Init or Prepare stage.
+ // WARNING: This is an experimental interface that is subject to change.
+ void* (*AllocatePersistentBuffer)(struct TfLiteContext* ctx, size_t bytes);
+
+ // Allocate a buffer which will be deallocated right after invoke phase.
+ // The memory is allocated from heap in TFL, and from volatile arena in TFLM.
+ // This method is only available in invoke stage.
+ // NOTE: If possible use RequestScratchBufferInArena method to avoid memory
+ // allocation during inference time.
+ // WARNING: This is an experimental interface that is subject to change.
+ TfLiteStatus (*AllocateBufferForEval)(struct TfLiteContext* ctx, size_t bytes,
+ void** ptr);
+
+ // Request a scratch buffer in the arena through static memory planning.
+ // This method is only available in Prepare stage and the buffer is allocated
+ // by the interpreter between Prepare and Eval stage. In Eval stage,
+ // GetScratchBuffer API can be used to fetch the address.
+ // WARNING: This is an experimental interface that is subject to change.
+ TfLiteStatus (*RequestScratchBufferInArena)(struct TfLiteContext* ctx,
+ size_t bytes, int* buffer_idx);
+
+ // Get the scratch buffer pointer.
+ // This method is only available in Eval stage.
+ // WARNING: This is an experimental interface that is subject to change.
+ void* (*GetScratchBuffer)(struct TfLiteContext* ctx, int buffer_idx);
+
+ // Resize the memory pointer of the `tensor`. This method behaves the same as
+ // `ResizeTensor`, except that it makes a copy of the shape array internally
+ // so the shape array could be deallocated right afterwards.
+ // WARNING: This is an experimental interface that is subject to change.
+ TfLiteStatus (*ResizeTensorExplicit)(struct TfLiteContext* ctx,
+ TfLiteTensor* tensor, int dims,
+ const int* shape);
+
+ // This method provides a preview of post-delegation partitioning. Each
+ // TfLiteDelegateParams in the referenced array corresponds to one instance of
+ // the delegate kernel.
+ // Example usage:
+ //
+ // TfLiteIntArray* nodes_to_replace = ...;
+ // TfLiteDelegateParams* params_array;
+ // int num_partitions = 0;
+ // TF_LITE_ENSURE_STATUS(context->PreviewDelegatePartitioning(
+ // context, delegate, nodes_to_replace, ¶ms_array, &num_partitions));
+ // for (int idx = 0; idx < num_partitions; idx++) {
+ // const auto& partition_params = params_array[idx];
+ // ...
+ // }
+ //
+ // NOTE: The context owns the memory referenced by partition_params_array. It
+ // will be cleared with another call to PreviewDelegateParitioning, or after
+ // TfLiteDelegateParams::Prepare returns.
+ //
+ // WARNING: This is an experimental interface that is subject to change.
+ TfLiteStatus (*PreviewDelegatePartitioning)(
+ struct TfLiteContext* context, const TfLiteIntArray* nodes_to_replace,
+ TfLiteDelegateParams** partition_params_array, int* num_partitions);
+
+ // Returns a TfLiteTensor struct for a given index.
+ // WARNING: This is an experimental interface that is subject to change.
+ // WARNING: This method may not be available on all platforms.
+ TfLiteTensor* (*GetTensor)(const struct TfLiteContext* context,
+ int tensor_idx);
+
+ // Returns a TfLiteEvalTensor struct for a given index.
+ // WARNING: This is an experimental interface that is subject to change.
+ // WARNING: This method may not be available on all platforms.
+ TfLiteEvalTensor* (*GetEvalTensor)(const struct TfLiteContext* context,
+ int tensor_idx);
+
+ // Retrieves named metadata buffer from the TFLite model.
+ // Returns kTfLiteOk if metadata is successfully obtained from the flatbuffer
+ // Model: that is, there exists a `metadata` entry with given `name` string.
+ // (see TFLite's schema.fbs).
+ // The corresponding `buffer` information is populated in `ptr` & `bytes`.
+ // The data from `ptr` is valid for the lifetime of the Interpreter.
+ //
+ // WARNING: This is an experimental interface that is subject to change.
+ TfLiteStatus (*GetModelMetadata)(const struct TfLiteContext* context,
+ const char* name, const char** ptr,
+ size_t* bytes);
+} TfLiteContext;
+
+// `TfLiteRegistrationExternal` is an external version of `TfLiteRegistration`
+// for C API which doesn't use internal types (such as `TfLiteContext`) but only
+// uses stable API types (such as `TfLiteOpaqueContext`). The purpose of each
+// field is the exactly the same as with `TfLiteRegistration`.
+typedef struct TfLiteRegistrationExternal TfLiteRegistrationExternal;
+
+typedef struct TfLiteRegistration {
+ // Initializes the op from serialized data.
+ // Called only *once* for the lifetime of the op, so any one-time allocations
+ // should be made here (unless they depend on tensor sizes).
+ //
+ // If a built-in op:
+ // `buffer` is the op's params data (TfLiteLSTMParams*).
+ // `length` is zero.
+ // If custom op:
+ // `buffer` is the op's `custom_options`.
+ // `length` is the size of the buffer.
+ //
+ // Returns a type-punned (i.e. void*) opaque data (e.g. a primitive pointer
+ // or an instance of a struct).
+ //
+ // The returned pointer will be stored with the node in the `user_data` field,
+ // accessible within prepare and invoke functions below.
+ // NOTE: if the data is already in the desired format, simply implement this
+ // function to return `nullptr` and implement the free function to be a no-op.
+ void* (*init)(TfLiteContext* context, const char* buffer, size_t length);
+
+ // The pointer `buffer` is the data previously returned by an init invocation.
+ void (*free)(TfLiteContext* context, void* buffer);
+
+ // prepare is called when the inputs this node depends on have been resized.
+ // context->ResizeTensor() can be called to request output tensors to be
+ // resized.
+ // Can be called multiple times for the lifetime of the op.
+ //
+ // Returns kTfLiteOk on success.
+ TfLiteStatus (*prepare)(TfLiteContext* context, TfLiteNode* node);
+
+ // Execute the node (should read node->inputs and output to node->outputs).
+ // Returns kTfLiteOk on success.
+ TfLiteStatus (*invoke)(TfLiteContext* context, TfLiteNode* node);
+
+ // profiling_string is called during summarization of profiling information
+ // in order to group executions together. Providing a value here will cause a
+ // given op to appear multiple times is the profiling report. This is
+ // particularly useful for custom ops that can perform significantly
+ // different calculations depending on their `user-data`.
+ const char* (*profiling_string)(const TfLiteContext* context,
+ const TfLiteNode* node);
+
+ // Builtin codes. If this kernel refers to a builtin this is the code
+ // of the builtin. This is so we can do marshaling to other frameworks like
+ // NN API.
+ // Note: It is the responsibility of the registration binder to set this
+ // properly.
+ int32_t builtin_code;
+
+ // Custom op name. If the op is a builtin, this will be null.
+ // Note: It is the responsibility of the registration binder to set this
+ // properly.
+ // WARNING: This is an experimental interface that is subject to change.
+ const char* custom_name;
+
+ // The version of the op.
+ // Note: It is the responsibility of the registration binder to set this
+ // properly.
+ int version;
+
+ // The external version of `TfLiteRegistration`. Since we can't use internal
+ // types (such as `TfLiteContext`) for C API to maintain ABI stability.
+ // C API user will provide `TfLiteRegistrationExternal` to implement custom
+ // ops. We keep it inside of `TfLiteRegistration` and use it to route
+ // callbacks properly.
+ TfLiteRegistrationExternal* registration_external;
+} TfLiteRegistration;
+
+// Old version of `TfLiteRegistration` to maintain binary backward
+// compatibility.
+// WARNING: This structure is deprecated / not an official part of the API.
+// It should be only used for binary backward compatibility.
+typedef struct TfLiteRegistration_V1 {
+ void* (*init)(TfLiteContext* context, const char* buffer, size_t length);
+ void (*free)(TfLiteContext* context, void* buffer);
+ TfLiteStatus (*prepare)(TfLiteContext* context, TfLiteNode* node);
+ TfLiteStatus (*invoke)(TfLiteContext* context, TfLiteNode* node);
+ const char* (*profiling_string)(const TfLiteContext* context,
+ const TfLiteNode* node);
+ int32_t builtin_code;
+ const char* custom_name;
+ int version;
+} TfLiteRegistration_V1;
+
+// The flags used in `TfLiteDelegate`. Note that this is a bitmask, so the
+// values should be 1, 2, 4, 8, ...etc.
+typedef enum TfLiteDelegateFlags {
+ kTfLiteDelegateFlagsNone = 0,
+ // The flag is set if the delegate can handle dynamic sized tensors.
+ // For example, the output shape of a `Resize` op with non-constant shape
+ // can only be inferred when the op is invoked.
+ // In this case, the Delegate is responsible for calling
+ // `SetTensorToDynamic` to mark the tensor as a dynamic tensor, and calling
+ // `ResizeTensor` when invoking the op.
+ //
+ // If the delegate isn't capable to handle dynamic tensors, this flag need
+ // to be set to false.
+ kTfLiteDelegateFlagsAllowDynamicTensors = 1,
+
+ // This flag can be used by delegates (that allow dynamic tensors) to ensure
+ // applicable tensor shapes are automatically propagated in the case of tensor
+ // resizing.
+ // This means that non-dynamic (allocation_type != kTfLiteDynamic) I/O tensors
+ // of a delegate kernel will have correct shapes before its Prepare() method
+ // is called. The runtime leverages TFLite builtin ops in the original
+ // execution plan to propagate shapes.
+ //
+ // A few points to note:
+ // 1. This requires kTfLiteDelegateFlagsAllowDynamicTensors. If that flag is
+ // false, this one is redundant since the delegate kernels are re-initialized
+ // every time tensors are resized.
+ // 2. Enabling this flag adds some overhead to AllocateTensors(), since extra
+ // work is required to prepare the original execution plan.
+ // 3. This flag requires that the original execution plan only have ops with
+ // valid registrations (and not 'dummy' custom ops like with Flex).
+ // WARNING: This feature is experimental and subject to change.
+ kTfLiteDelegateFlagsRequirePropagatedShapes = 2
+} TfLiteDelegateFlags;
+
+// WARNING: This is an experimental interface that is subject to change.
+typedef struct TfLiteDelegate {
+ // Data that delegate needs to identify itself. This data is owned by the
+ // delegate. The delegate is owned in the user code, so the delegate is
+ // responsible for deallocating this when it is destroyed.
+ void* data_;
+
+ // Invoked by ModifyGraphWithDelegate. This prepare is called, giving the
+ // delegate a view of the current graph through TfLiteContext*. It typically
+ // will look at the nodes and call ReplaceNodeSubsetsWithDelegateKernels()
+ // to ask the TensorFlow lite runtime to create macro-nodes to represent
+ // delegated subgraphs of the original graph.
+ TfLiteStatus (*Prepare)(TfLiteContext* context,
+ struct TfLiteDelegate* delegate);
+
+ // Copy the data from delegate buffer handle into raw memory of the given
+ // 'tensor'. Note that the delegate is allowed to allocate the raw bytes as
+ // long as it follows the rules for kTfLiteDynamic tensors, in which case this
+ // cannot be null.
+ TfLiteStatus (*CopyFromBufferHandle)(TfLiteContext* context,
+ struct TfLiteDelegate* delegate,
+ TfLiteBufferHandle buffer_handle,
+ TfLiteTensor* tensor);
+
+ // Copy the data from raw memory of the given 'tensor' to delegate buffer
+ // handle. This can be null if the delegate doesn't use its own buffer.
+ TfLiteStatus (*CopyToBufferHandle)(TfLiteContext* context,
+ struct TfLiteDelegate* delegate,
+ TfLiteBufferHandle buffer_handle,
+ TfLiteTensor* tensor);
+
+ // Free the Delegate Buffer Handle. Note: This only frees the handle, but
+ // this doesn't release the underlying resource (e.g. textures). The
+ // resources are either owned by application layer or the delegate.
+ // This can be null if the delegate doesn't use its own buffer.
+ void (*FreeBufferHandle)(TfLiteContext* context,
+ struct TfLiteDelegate* delegate,
+ TfLiteBufferHandle* handle);
+
+ // Bitmask flags. See the comments in `TfLiteDelegateFlags`.
+ int64_t flags;
+
+ // The opaque delegate builder associated with this object. If set then the
+ // TF Lite runtime will give precedence to this field. E.g. instead of
+ // invoking 'Prepare' via the function pointer inside the 'TfLiteDelegate'
+ // object, the runtime will first check if the corresponding function
+ // pointer inside 'opaque_delegate_builder' is set and if so invoke that.
+ //
+ // If this field is non-null, then the 'Prepare' field (of the
+ // 'TfLiteDelegate') should be null.
+ struct TfLiteOpaqueDelegateBuilder* opaque_delegate_builder;
+} TfLiteDelegate;
+
+// Build a 'null' delegate, with all the fields properly set to their default
+// values.
+TfLiteDelegate TfLiteDelegateCreate(void);
+
+// `TfLiteOpaqueDelegateBuilder` is used for constructing
+// `TfLiteOpaqueDelegateStruct`, see `TfLiteOpaqueDelegateCreate` below. Note:
+// This struct is not ABI stable.
+//
+// For forward source compatibility `TfLiteOpaqueDelegateBuilder` objects should
+// be brace-initialized, so that all fields (including any that might be added
+// in the future) get zero-initialized. The purpose of each field is exactly
+// the same as with `TfLiteDelegate`.
+//
+// WARNING: This is an experimental interface that is subject to change.
+typedef struct TfLiteOpaqueDelegateBuilder {
+ // Data that delegate needs to identify itself. This data is owned by the
+ // delegate. The delegate is owned in the user code, so the delegate is
+ // responsible for deallocating this when it is destroyed.
+ void* data;
+ // Invoked by ModifyGraphWithDelegate. This prepare is called, giving the
+ // delegate a view of the current graph through TfLiteContext*. It typically
+ // will look at the nodes and call ReplaceNodeSubsetsWithDelegateKernels()
+ // to ask the TensorFlow lite runtime to create macro-nodes to represent
+ // delegated subgraphs of the original graph.
+ TfLiteStatus (*Prepare)(TfLiteOpaqueContext* context, // NOLINT
+ struct TfLiteOpaqueDelegateStruct* delegate,
+ void* data);
+ // Copies the data from delegate buffer handle into raw memory of the given
+ // 'tensor'. Note that the delegate is allowed to allocate the raw bytes as
+ // long as it follows the rules for kTfLiteDynamic tensors, in which case this
+ // cannot be null.
+ TfLiteStatus (*CopyFromBufferHandle)( // NOLINT
+ TfLiteOpaqueContext* context, struct TfLiteOpaqueDelegateStruct* delegate,
+ void* data, TfLiteBufferHandle buffer_handle, TfLiteOpaqueTensor* tensor);
+ // Copies the data from raw memory of the given 'tensor' to delegate buffer
+ // handle. This can be null if the delegate doesn't use its own buffer.
+ TfLiteStatus (*CopyToBufferHandle)( // NOLINT
+ TfLiteOpaqueContext* context, struct TfLiteOpaqueDelegateStruct* delegate,
+ void* data, TfLiteBufferHandle buffer_handle, TfLiteOpaqueTensor* tensor);
+ // Frees the Delegate Buffer Handle. Note: This only frees the handle, but
+ // this doesn't release the underlying resource (e.g. textures). The
+ // resources are either owned by application layer or the delegate.
+ // This can be null if the delegate doesn't use its own buffer.
+ void (*FreeBufferHandle)(TfLiteOpaqueContext* context, // NOLINT
+ struct TfLiteOpaqueDelegateStruct* delegate,
+ void* data, TfLiteBufferHandle* handle);
+ // Bitmask flags. See the comments in `TfLiteDelegateFlags`.
+ int64_t flags;
+} TfLiteOpaqueDelegateBuilder;
+
+// Creates an opaque delegate and returns its address. The opaque delegate will
+// behave according to the provided 'opaque_delegate_builder'. The lifetime of
+// the fields within the 'opaque_delegate_builder' must outlive any interaction
+// between the runtime and the returned 'TfLiteOpaqueDelegateStruct'. The
+// returned address should be passed to 'TfLiteOpaqueDelegateDelete' for
+// deletion. If 'opaque_delegate_builder' is a null pointer, then a null
+// pointer will be returned.
+struct TfLiteOpaqueDelegateStruct* TfLiteOpaqueDelegateCreate(
+ const TfLiteOpaqueDelegateBuilder* opaque_delegate_builder);
+
+// Deletes the provided opaque 'delegate'. This function has no effect if the
+// 'delegate' is a null pointer.
+void TfLiteOpaqueDelegateDelete(
+ const struct TfLiteOpaqueDelegateStruct* delegate);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+#endif // TENSORFLOW_LITE_C_COMMON_H_
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/context_util.h b/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/context_util.h
new file mode 100644
index 000000000..ed42cc736
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/context_util.h
@@ -0,0 +1,53 @@
+/* Copyright 2017 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+/// \file
+/// This provides a few C++ helpers that are useful for manipulating C
+/// structures in C++.
+#ifndef TENSORFLOW_LITE_CONTEXT_UTIL_H_
+#define TENSORFLOW_LITE_CONTEXT_UTIL_H_
+
+#include
+
+#include "tensorflow/lite/c/common.h"
+
+namespace tflite {
+
+/// Provides a range iterable wrapper for TfLiteIntArray* (C lists) that TfLite
+/// C api uses.
+// Can't use the google array_view, since we can't depend on even
+// absl for embedded device reasons.
+class TfLiteIntArrayView {
+ public:
+ /// Construct a view of a TfLiteIntArray*. Note, `int_array` should be
+ /// non-null and this view does not take ownership of it.
+ explicit TfLiteIntArrayView(const TfLiteIntArray* int_array)
+ : int_array_(int_array) {}
+
+ TfLiteIntArrayView(const TfLiteIntArrayView&) = default;
+ TfLiteIntArrayView& operator=(const TfLiteIntArrayView& rhs) = default;
+
+ typedef const int* const_iterator;
+ const_iterator begin() const { return int_array_->data; }
+ const_iterator end() const { return &int_array_->data[int_array_->size]; }
+ size_t size() const { return end() - begin(); }
+ int operator[](size_t pos) const { return int_array_->data[pos]; }
+
+ private:
+ const TfLiteIntArray* int_array_;
+};
+
+} // namespace tflite
+
+#endif // TENSORFLOW_LITE_CONTEXT_UTIL_H_
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/core/api/error_reporter.cpp b/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/core/api/error_reporter.cpp
new file mode 100644
index 000000000..7070eaa57
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/core/api/error_reporter.cpp
@@ -0,0 +1,38 @@
+/* Copyright 2017 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+#include "tensorflow/lite/core/api/error_reporter.h"
+#include
+
+namespace tflite {
+
+int ErrorReporter::Report(const char* format, ...) {
+ va_list args;
+ va_start(args, format);
+ int code = Report(format, args);
+ va_end(args);
+ return code;
+}
+
+// TODO(aselle): Make the name of ReportError on context the same, so
+// we can use the ensure functions w/o a context and w/ a reporter.
+int ErrorReporter::ReportError(void*, const char* format, ...) {
+ va_list args;
+ va_start(args, format);
+ int code = Report(format, args);
+ va_end(args);
+ return code;
+}
+
+} // namespace tflite
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/core/api/error_reporter.h b/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/core/api/error_reporter.h
new file mode 100644
index 000000000..05839a611
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/core/api/error_reporter.h
@@ -0,0 +1,59 @@
+/* Copyright 2017 The TensorFlow Authors. All Rights Reserved.
+
+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 TENSORFLOW_LITE_CORE_API_ERROR_REPORTER_H_
+#define TENSORFLOW_LITE_CORE_API_ERROR_REPORTER_H_
+
+#include
+
+namespace tflite {
+
+/// A functor that reports error to supporting system. Invoked similar to
+/// printf.
+///
+/// Usage:
+/// ErrorReporter foo;
+/// foo.Report("test %d", 5);
+/// or
+/// va_list args;
+/// foo.Report("test %d", args); // where args is va_list
+///
+/// Subclass ErrorReporter to provide another reporting destination.
+/// For example, if you have a GUI program, you might redirect to a buffer
+/// that drives a GUI error log box.
+class ErrorReporter {
+ public:
+ virtual ~ErrorReporter() {}
+ virtual int Report(const char* format, va_list args) = 0;
+ int Report(const char* format, ...);
+ int ReportError(void*, const char* format, ...);
+};
+
+} // namespace tflite
+
+// You should not make bare calls to the error reporter, instead use the
+// TF_LITE_REPORT_ERROR macro, since this allows message strings to be
+// stripped when the binary size has to be optimized. If you are looking to
+// reduce binary size, define TF_LITE_STRIP_ERROR_STRINGS when compiling and
+// every call will be stubbed out, taking no memory.
+#ifndef TF_LITE_STRIP_ERROR_STRINGS
+#define TF_LITE_REPORT_ERROR(reporter, ...) \
+ do { \
+ static_cast(reporter)->Report(__VA_ARGS__); \
+ } while (false)
+#else // TF_LITE_STRIP_ERROR_STRINGS
+#define TF_LITE_REPORT_ERROR(reporter, ...)
+#endif // TF_LITE_STRIP_ERROR_STRINGS
+
+#endif // TENSORFLOW_LITE_CORE_API_ERROR_REPORTER_H_
diff --git a/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/core/api/flatbuffer_conversions.cpp b/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/core/api/flatbuffer_conversions.cpp
new file mode 100644
index 000000000..535e4c8a6
--- /dev/null
+++ b/lib/libesp32_ml/tf_lite_esp32/src/tensorflow/lite/core/api/flatbuffer_conversions.cpp
@@ -0,0 +1,2472 @@
+/* Copyright 2021 The TensorFlow Authors. All Rights Reserved.
+
+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.
+==============================================================================*/
+
+#include "tensorflow/lite/core/api/flatbuffer_conversions.h"
+
+#include
+#include
+#include
+
+#include "third_party/flatbuffers/include/flatbuffers/flatbuffers.h"
+#include "tensorflow/lite/c/builtin_op_data.h"
+#include "tensorflow/lite/c/common.h"
+#include "tensorflow/lite/core/api/error_reporter.h"
+#include "tensorflow/lite/kernels/internal/compatibility.h"
+#include "tensorflow/lite/schema/schema_generated.h"
+
+namespace tflite {
+
+namespace {
+
+// Utility class for safely allocating POD data. This is useful for avoiding
+// leaks in cases where op params are allocated but fail to propagate to the
+// parsed op data (e.g., when model parameters are invalid).
+class SafeBuiltinDataAllocator {
+ public:
+ class BuiltinDataDeleter {
+ public:
+ explicit BuiltinDataDeleter(BuiltinDataAllocator* allocator)
+ : allocator_(allocator) {}
+
+ void operator()(void* data) { allocator_->Deallocate(data); }
+
+ private:
+ BuiltinDataAllocator* allocator_;
+ };
+
+ template
+ using BuiltinDataPtr = std::unique_ptr;
+
+ explicit SafeBuiltinDataAllocator(BuiltinDataAllocator* allocator)
+ : allocator_(allocator) {}
+
+ template
+ BuiltinDataPtr Allocate() {
+ return BuiltinDataPtr(allocator_->AllocatePOD(),
+ BuiltinDataDeleter(allocator_));
+ }
+
+ private:
+ BuiltinDataAllocator* allocator_;
+};
+
+// All the Parse functions take some pointers as params and this function has
+// the common DCHECKs to catch if any of those are nullptr.
+void CheckParsePointerParams(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator,
+ void** builtin_data) {
+ TFLITE_DCHECK(op != nullptr);
+ TFLITE_DCHECK(error_reporter != nullptr);
+ TFLITE_DCHECK(allocator != nullptr);
+ TFLITE_DCHECK(builtin_data != nullptr);
+}
+
+// Copies the contents from the flatbuffer int vector `flatbuffer` into the
+// int array `buffer`. `flat_vector` and `buffer` represent the same
+// configuration operation for a given operation.
+TfLiteStatus FlatBufferIntVectorToArray(
+ int max_size_of_buffer, const flatbuffers::Vector* flat_vector,
+ int* buffer, ErrorReporter* error_reporter, const char* op_name) {
+ if (!flat_vector) {
+ TF_LITE_REPORT_ERROR(error_reporter,
+ "Input array not provided for operation '%s'.\n",
+ op_name);
+ return kTfLiteError;
+ } else {
+ size_t num_dimensions = flat_vector->size();
+ if (num_dimensions > max_size_of_buffer / sizeof(int)) {
+ TF_LITE_REPORT_ERROR(
+ error_reporter,
+ "Found too many dimensions in the input array of operation '%s'.\n",
+ op_name);
+ return kTfLiteError;
+ } else {
+ for (size_t i = 0; i < num_dimensions; ++i) {
+ buffer[i] = flat_vector->Get(i);
+ }
+ }
+ }
+ return kTfLiteOk;
+}
+
+// Converts the flatbuffer activation to what is used at runtime.
+TfLiteFusedActivation ConvertActivation(ActivationFunctionType activation) {
+ switch (activation) {
+ case ActivationFunctionType_NONE:
+ return kTfLiteActNone;
+ case ActivationFunctionType_RELU:
+ return kTfLiteActRelu;
+ case ActivationFunctionType_RELU_N1_TO_1:
+ return kTfLiteActReluN1To1;
+ case ActivationFunctionType_RELU6:
+ return kTfLiteActRelu6;
+ case ActivationFunctionType_TANH:
+ return kTfLiteActTanh;
+ case ActivationFunctionType_SIGN_BIT:
+ return kTfLiteActSignBit;
+ }
+ return kTfLiteActNone;
+}
+
+// Converts the flatbuffer padding enum to what is used at runtime.
+TfLitePadding ConvertPadding(Padding padding) {
+ switch (padding) {
+ case Padding_SAME:
+ return kTfLitePaddingSame;
+ case Padding_VALID:
+ return kTfLitePaddingValid;
+ }
+ return kTfLitePaddingUnknown;
+}
+
+// Converts the flatbuffer mirror padding enum to what is used at runtime.
+TfLiteMirrorPaddingMode ConvertMirrorPadding(MirrorPadMode padding) {
+ switch (padding) {
+ case MirrorPadMode_REFLECT:
+ return kTfLiteMirrorPaddingReflect;
+ case MirrorPadMode_SYMMETRIC:
+ return kTfLiteMirrorPaddingSymmetric;
+ }
+ return kTfLiteMirrorPaddingUnknown;
+}
+
+#ifndef ARDUINO
+TfLiteStatus ParseOpDataTfLite(const Operator* op, BuiltinOperator op_type,
+ ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator,
+ void** builtin_data) {
+ auto parseLSHProjectionType = [](LSHProjectionType type) {
+ switch (type) {
+ case LSHProjectionType_SPARSE:
+ return kTfLiteLshProjectionSparse;
+ case LSHProjectionType_DENSE:
+ return kTfLiteLshProjectionDense;
+ default:
+ return kTfLiteLshProjectionUnknown;
+ }
+ };
+ auto parseCombinerType = [](CombinerType type) {
+ switch (type) {
+ case CombinerType_MEAN:
+ return kTfLiteCombinerTypeMean;
+ case CombinerType_SQRTN:
+ return kTfLiteCombinerTypeSqrtn;
+ case CombinerType_SUM:
+ default:
+ return kTfLiteCombinerTypeSum;
+ }
+ };
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ *builtin_data = nullptr;
+ switch (op_type) {
+ case BuiltinOperator_ABS: {
+ return ParseAbs(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_ADD: {
+ return ParseAdd(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_ADD_N: {
+ return ParseAddN(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_ARG_MAX: {
+ return ParseArgMax(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_ARG_MIN: {
+ return ParseArgMin(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_ASSIGN_VARIABLE: {
+ return ParseAssignVariable(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_AVERAGE_POOL_2D: {
+ return ParsePool(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_BATCH_MATMUL: {
+ return ParseBatchMatMul(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_BATCH_TO_SPACE_ND: {
+ return ParseBatchToSpaceNd(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_BROADCAST_ARGS: {
+ return ParseBroadcastArgs(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_BROADCAST_TO: {
+ return ParseBroadcastTo(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_CALL_ONCE: {
+ return ParseCallOnce(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_CEIL: {
+ return ParseCeil(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_CONCATENATION: {
+ return ParseConcatenation(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_CONV_2D: {
+ return ParseConv2D(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_CUMSUM: {
+ return ParseCumsum(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_DEPTH_TO_SPACE: {
+ return ParseDepthToSpace(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_DEPTHWISE_CONV_2D: {
+ return ParseDepthwiseConv2D(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_DEQUANTIZE: {
+ return ParseDequantize(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_DIV: {
+ return ParseDiv(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_ELU: {
+ return ParseElu(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_EXP: {
+ return ParseExp(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_EXPAND_DIMS: {
+ return ParseExpandDims(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_FILL: {
+ return ParseFill(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_FLOOR: {
+ return ParseFloor(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_FLOOR_DIV: {
+ return ParseFloorDiv(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_FLOOR_MOD: {
+ return ParseFloorMod(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_FULLY_CONNECTED: {
+ return ParseFullyConnected(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_GATHER_ND: {
+ return ParseGatherNd(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_GREATER: {
+ return ParseGreater(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_GREATER_EQUAL: {
+ return ParseGreaterEqual(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_HARD_SWISH: {
+ return ParseHardSwish(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_L2_NORMALIZATION: {
+ return ParseL2Normalization(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_L2_POOL_2D: {
+ return ParsePool(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_LEAKY_RELU: {
+ return ParseLeakyRelu(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_LESS: {
+ return ParseLess(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_LESS_EQUAL: {
+ return ParseLessEqual(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_LOG: {
+ return ParseLog(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_LOGICAL_AND: {
+ return ParseLogicalAnd(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_LOGICAL_NOT: {
+ return ParseLogicalNot(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_LOGICAL_OR: {
+ return ParseLogicalOr(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_LOGISTIC: {
+ return ParseLogistic(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_LOG_SOFTMAX: {
+ return ParseLogSoftmax(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_LSTM: {
+ return ParseLSTM(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_MAXIMUM: {
+ return ParseMaximum(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_MAX_POOL_2D: {
+ return ParsePool(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_MIRROR_PAD: {
+ return ParseMirrorPad(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_MEAN: {
+ return ParseReducer(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_MINIMUM: {
+ return ParseMinimum(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_MUL: {
+ return ParseMul(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_NEG: {
+ return ParseNeg(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_NOT_EQUAL: {
+ return ParseNotEqual(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_PACK: {
+ return ParsePack(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_PAD: {
+ return ParsePad(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_PADV2: {
+ return ParsePadV2(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_POW: {
+ return ParsePow(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_PRELU: {
+ return ParsePrelu(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_QUANTIZE: {
+ return ParseQuantize(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_READ_VARIABLE: {
+ return ParseReadVariable(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_REDUCE_ANY: {
+ return ParseReducer(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_REDUCE_ALL: {
+ return ParseReducer(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_REDUCE_MAX: {
+ return ParseReducer(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_REDUCE_MIN: {
+ return ParseReducer(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_REDUCE_PROD: {
+ return ParseReducer(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_RELU: {
+ return ParseRelu(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_RELU6: {
+ return ParseRelu6(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_RESHAPE: {
+ return ParseReshape(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_RESIZE_BILINEAR: {
+ return ParseResizeBilinear(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_RESIZE_NEAREST_NEIGHBOR: {
+ return ParseResizeNearestNeighbor(op, error_reporter, allocator,
+ builtin_data);
+ }
+
+ case BuiltinOperator_ROUND: {
+ return ParseRound(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_RSQRT: {
+ return ParseRsqrt(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_SELECT_V2: {
+ return ParseSelectV2(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_SHAPE: {
+ return ParseShape(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_SIN: {
+ return ParseSin(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_SOFTMAX: {
+ return ParseSoftmax(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_SPACE_TO_BATCH_ND: {
+ return ParseSpaceToBatchNd(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_SPACE_TO_DEPTH: {
+ return ParseSpaceToDepth(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_SPLIT: {
+ return ParseSplit(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_SPLIT_V: {
+ return ParseSplitV(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_SQRT: {
+ return ParseSqrt(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_SQUARE: {
+ return ParseSquare(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_SQUARED_DIFFERENCE: {
+ return ParseSquaredDifference(op, error_reporter, allocator,
+ builtin_data);
+ }
+
+ case BuiltinOperator_SQUEEZE: {
+ return ParseSqueeze(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_STRIDED_SLICE: {
+ return ParseStridedSlice(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_SUB: {
+ return ParseSub(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_SUM: {
+ return ParseReducer(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_SVDF: {
+ return ParseSvdf(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_TANH: {
+ return ParseTanh(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_TRANSPOSE_CONV: {
+ return ParseTransposeConv(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_UNPACK: {
+ return ParseUnpack(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_VAR_HANDLE: {
+ return ParseVarHandle(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_ZEROS_LIKE: {
+ return ParseZerosLike(op, error_reporter, allocator, builtin_data);
+ }
+
+ case BuiltinOperator_CAST: {
+ return ParseCast(op, error_reporter, allocator, builtin_data);
+ }
+ case BuiltinOperator_LSH_PROJECTION: {
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* lshParams =
+ op->builtin_options_as_LSHProjectionOptions()) {
+ params->type = parseLSHProjectionType(lshParams->type());
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+ }
+ case BuiltinOperator_UNIDIRECTIONAL_SEQUENCE_RNN: {
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* sequence_rnn_params =
+ op->builtin_options_as_SequenceRNNOptions()) {
+ params->activation =
+ ConvertActivation(sequence_rnn_params->fused_activation_function());
+ params->time_major = sequence_rnn_params->time_major();
+ params->asymmetric_quantize_inputs =
+ sequence_rnn_params->asymmetric_quantize_inputs();
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+ }
+ case BuiltinOperator_BIDIRECTIONAL_SEQUENCE_RNN: {
+ auto params =
+ safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* bidi_sequence_rnn_params =
+ op->builtin_options_as_BidirectionalSequenceRNNOptions()) {
+ params->activation = ConvertActivation(
+ bidi_sequence_rnn_params->fused_activation_function());
+ params->time_major = bidi_sequence_rnn_params->time_major();
+ params->merge_outputs = bidi_sequence_rnn_params->merge_outputs();
+ params->asymmetric_quantize_inputs =
+ bidi_sequence_rnn_params->asymmetric_quantize_inputs();
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+ }
+ case BuiltinOperator_RNN: {
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* rnn_params = op->builtin_options_as_RNNOptions()) {
+ params->activation =
+ ConvertActivation(rnn_params->fused_activation_function());
+ params->asymmetric_quantize_inputs =
+ rnn_params->asymmetric_quantize_inputs();
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+ }
+ case BuiltinOperator_EMBEDDING_LOOKUP_SPARSE: {
+ auto params =
+ safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* embedding_params =
+ op->builtin_options_as_EmbeddingLookupSparseOptions()) {
+ params->combiner = parseCombinerType(embedding_params->combiner());
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+ }
+
+ case BuiltinOperator_HASHTABLE_LOOKUP:
+ // no-op.
+ return kTfLiteOk;
+
+ case BuiltinOperator_LOCAL_RESPONSE_NORMALIZATION: {
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* schema_params =
+ op->builtin_options_as_LocalResponseNormalizationOptions()) {
+ params->radius = schema_params->radius();
+ params->bias = schema_params->bias();
+ params->alpha = schema_params->alpha();
+ params->beta = schema_params->beta();
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+ }
+ case BuiltinOperator_UNIDIRECTIONAL_SEQUENCE_LSTM: {
+ return ParseUnidirectionalSequenceLSTM(op, error_reporter, allocator,
+ builtin_data);
+ }
+ case BuiltinOperator_BIDIRECTIONAL_SEQUENCE_LSTM: {
+ auto params =
+ safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* bidi_lstm_params =
+ op->builtin_options_as_BidirectionalSequenceLSTMOptions()) {
+ params->activation =
+ ConvertActivation(bidi_lstm_params->fused_activation_function());
+ params->cell_clip = bidi_lstm_params->cell_clip();
+ params->proj_clip = bidi_lstm_params->proj_clip();
+ params->merge_outputs = bidi_lstm_params->merge_outputs();
+ params->time_major = bidi_lstm_params->time_major();
+ params->asymmetric_quantize_inputs =
+ bidi_lstm_params->asymmetric_quantize_inputs();
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+ }
+ case BuiltinOperator_SKIP_GRAM: {
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* skip_gram_params =
+ op->builtin_options_as_SkipGramOptions()) {
+ params->ngram_size = skip_gram_params->ngram_size();
+ params->max_skip_size = skip_gram_params->max_skip_size();
+ params->include_all_ngrams = skip_gram_params->include_all_ngrams();
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+ }
+
+ case BuiltinOperator_GATHER: {
+ return ParseGather(op, error_reporter, allocator, builtin_data);
+ }
+ case BuiltinOperator_SPARSE_TO_DENSE: {
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* sparse_to_dense_params =
+ op->builtin_options_as_SparseToDenseOptions()) {
+ params->validate_indices = sparse_to_dense_params->validate_indices();
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+ }
+ case BuiltinOperator_DELEGATE: {
+ TF_LITE_REPORT_ERROR(error_reporter,
+ "DELEGATE op shouldn't exist in model.");
+ return kTfLiteError;
+ }
+ case BuiltinOperator_FAKE_QUANT: {
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* schema_params =
+ op->builtin_options_as_FakeQuantOptions()) {
+ params->min = schema_params->min();
+ params->max = schema_params->max();
+ params->num_bits = schema_params->num_bits();
+ params->narrow_range = schema_params->narrow_range();
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+ }
+ case BuiltinOperator_ONE_HOT: {
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* schema_params = op->builtin_options_as_OneHotOptions()) {
+ params->axis = schema_params->axis();
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+ }
+ case BuiltinOperator_UNIQUE: {
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ const auto* unique_params = op->builtin_options_as_UniqueOptions();
+ if (unique_params != nullptr) {
+ params->index_out_type =
+ unique_params->idx_out_type() == tflite::TensorType_INT64
+ ? TfLiteType::kTfLiteInt64
+ : TfLiteType::kTfLiteInt32;
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+ }
+ case BuiltinOperator_REVERSE_SEQUENCE: {
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* reverse_seq_params =
+ op->builtin_options_as_ReverseSequenceOptions()) {
+ params->seq_dim = reverse_seq_params->seq_dim();
+ params->batch_dim = reverse_seq_params->batch_dim();
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+ }
+ case BuiltinOperator_IF: {
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* if_params = op->builtin_options_as_IfOptions()) {
+ params->then_subgraph_index = if_params->then_subgraph_index();
+ params->else_subgraph_index = if_params->else_subgraph_index();
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+ }
+ case BuiltinOperator_WHILE: {
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* while_params = op->builtin_options_as_WhileOptions()) {
+ params->cond_subgraph_index = while_params->cond_subgraph_index();
+ params->body_subgraph_index = while_params->body_subgraph_index();
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+ }
+ case BuiltinOperator_CONV_3D:
+ case BuiltinOperator_CONV_3D_TRANSPOSE: {
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* conv3d_params = op->builtin_options_as_Conv3DOptions()) {
+ params->padding = ConvertPadding(conv3d_params->padding());
+ params->activation =
+ ConvertActivation(conv3d_params->fused_activation_function());
+ params->stride_depth = conv3d_params->stride_d();
+ params->stride_height = conv3d_params->stride_h();
+ params->stride_width = conv3d_params->stride_w();
+ params->dilation_depth_factor = conv3d_params->dilation_d_factor();
+ params->dilation_height_factor = conv3d_params->dilation_h_factor();
+ params->dilation_width_factor = conv3d_params->dilation_w_factor();
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+ }
+ case BuiltinOperator_HASHTABLE: {
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* hashtable_params =
+ op->builtin_options_as_HashtableOptions()) {
+ params->table_id = hashtable_params->table_id();
+ TF_LITE_ENSURE_STATUS(ConvertTensorType(
+ hashtable_params->key_dtype(), ¶ms->key_dtype, error_reporter));
+ TF_LITE_ENSURE_STATUS(ConvertTensorType(hashtable_params->value_dtype(),
+ ¶ms->value_dtype,
+ error_reporter));
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+ }
+ case BuiltinOperator_MULTINOMIAL: {
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* multinomial_params =
+ op->builtin_options_as_RandomOptions()) {
+ params->seed = multinomial_params->seed();
+ params->seed2 = multinomial_params->seed2();
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+ }
+ case BuiltinOperator_RANDOM_STANDARD_NORMAL: {
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* random_std_normal_params =
+ op->builtin_options_as_RandomOptions()) {
+ params->seed = random_std_normal_params->seed();
+ params->seed2 = random_std_normal_params->seed2();
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+ }
+ case BuiltinOperator_BUCKETIZE: {
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* bucketize_params =
+ op->builtin_options_as_BucketizeOptions()) {
+ const flatbuffers::Vector* boundaries =
+ bucketize_params->boundaries();
+ if (boundaries == nullptr) {
+ TF_LITE_REPORT_ERROR(
+ error_reporter,
+ "boundaries array not provided for operation 'bucketize'.\n");
+ return kTfLiteError;
+ }
+ params->num_boundaries = boundaries->size();
+ if (boundaries->data() == nullptr) {
+ TF_LITE_REPORT_ERROR(error_reporter,
+ "boundaries.data() returned nullptr for "
+ "operation 'bucketize'.\n");
+ return kTfLiteError;
+ }
+ params->boundaries = boundaries->data();
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+ }
+ case BuiltinOperator_RANDOM_UNIFORM: {
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* random_uniform_params =
+ op->builtin_options_as_RandomOptions()) {
+ params->seed = random_uniform_params->seed();
+ params->seed2 = random_uniform_params->seed2();
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+ }
+ case BuiltinOperator_GELU: {
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* gelu_params = op->builtin_options_as_GeluOptions()) {
+ params->approximate = gelu_params->approximate();
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+ }
+ // Below are the ops with no builtin_data structure.
+ // TODO(aselle): Implement call in BuiltinOptions, but nullptrs are
+ // ok for now, since there is no call implementation either.
+ case BuiltinOperator_CALL:
+ case BuiltinOperator_COMPLEX_ABS:
+ case BuiltinOperator_CONCAT_EMBEDDINGS:
+ case BuiltinOperator_COS:
+ case BuiltinOperator_CUSTOM:
+ case BuiltinOperator_DENSIFY:
+ case BuiltinOperator_DYNAMIC_UPDATE_SLICE:
+ case BuiltinOperator_EMBEDDING_LOOKUP:
+ case BuiltinOperator_EQUAL:
+ case BuiltinOperator_HASHTABLE_FIND:
+ case BuiltinOperator_HASHTABLE_IMPORT:
+ case BuiltinOperator_HASHTABLE_SIZE:
+ case BuiltinOperator_IMAG:
+ case BuiltinOperator_MATRIX_DIAG:
+ case BuiltinOperator_MATRIX_SET_DIAG:
+ case BuiltinOperator_NON_MAX_SUPPRESSION_V4:
+ case BuiltinOperator_NON_MAX_SUPPRESSION_V5:
+ case BuiltinOperator_RELU_N1_TO_1:
+ case BuiltinOperator_RELU_0_TO_1:
+ case BuiltinOperator_SCATTER_ND:
+ case BuiltinOperator_SELECT:
+ case BuiltinOperator_SLICE:
+ case BuiltinOperator_TILE:
+ case BuiltinOperator_TOPK_V2:
+ case BuiltinOperator_TRANSPOSE:
+ case BuiltinOperator_RANGE:
+ case BuiltinOperator_RANK:
+ case BuiltinOperator_REAL:
+ case BuiltinOperator_RFFT2D:
+ case BuiltinOperator_SEGMENT_SUM:
+ case BuiltinOperator_REVERSE_V2:
+ case BuiltinOperator_UNSORTED_SEGMENT_MAX:
+ case BuiltinOperator_UNSORTED_SEGMENT_MIN:
+ case BuiltinOperator_UNSORTED_SEGMENT_PROD:
+ case BuiltinOperator_UNSORTED_SEGMENT_SUM:
+ case BuiltinOperator_ATAN2:
+ case BuiltinOperator_SIGN:
+ case BuiltinOperator_WHERE:
+ return kTfLiteOk;
+ case BuiltinOperator_PLACEHOLDER_FOR_GREATER_OP_CODES:
+ return kTfLiteError;
+ }
+ return kTfLiteError;
+} // NOLINT[readability/fn_size]
+#endif // !defined(ARDUINO)
+} // namespace
+
+TfLiteStatus ConvertTensorType(TensorType tensor_type, TfLiteType* type,
+ ErrorReporter* error_reporter) {
+ switch (tensor_type) {
+ case TensorType_FLOAT16:
+ *type = kTfLiteFloat16;
+ return kTfLiteOk;
+ case TensorType_FLOAT32:
+ *type = kTfLiteFloat32;
+ return kTfLiteOk;
+ case TensorType_FLOAT64:
+ *type = kTfLiteFloat64;
+ return kTfLiteOk;
+ case TensorType_INT16:
+ *type = kTfLiteInt16;
+ return kTfLiteOk;
+ case TensorType_UINT16:
+ *type = kTfLiteUInt16;
+ return kTfLiteOk;
+ case TensorType_INT32:
+ *type = kTfLiteInt32;
+ return kTfLiteOk;
+ case TensorType_UINT32:
+ *type = kTfLiteUInt32;
+ return kTfLiteOk;
+ case TensorType_UINT8:
+ *type = kTfLiteUInt8;
+ return kTfLiteOk;
+ case TensorType_INT8:
+ *type = kTfLiteInt8;
+ return kTfLiteOk;
+ case TensorType_INT64:
+ *type = kTfLiteInt64;
+ return kTfLiteOk;
+ case TensorType_UINT64:
+ *type = kTfLiteUInt64;
+ return kTfLiteOk;
+ case TensorType_STRING:
+ *type = kTfLiteString;
+ return kTfLiteOk;
+ case TensorType_BOOL:
+ *type = kTfLiteBool;
+ return kTfLiteOk;
+ case TensorType_COMPLEX64:
+ *type = kTfLiteComplex64;
+ return kTfLiteOk;
+ case TensorType_COMPLEX128:
+ *type = kTfLiteComplex128;
+ return kTfLiteOk;
+ case TensorType_RESOURCE:
+ *type = kTfLiteResource;
+ return kTfLiteOk;
+ case TensorType_VARIANT:
+ *type = kTfLiteVariant;
+ return kTfLiteOk;
+ case TensorType_INT4:
+ *type = kTfLiteInt4;
+ return kTfLiteOk;
+ default:
+ *type = kTfLiteNoType;
+ TF_LITE_REPORT_ERROR(error_reporter,
+ "Unsupported data type %d in tensor\n", tensor_type);
+ return kTfLiteError;
+ }
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseAbs(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
+ void**) {
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseAdd(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator, void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const AddOptions* schema_params = op->builtin_options_as_AddOptions();
+
+ if (schema_params != nullptr) {
+ params->activation =
+ ConvertActivation(schema_params->fused_activation_function());
+ params->pot_scale_int16 = schema_params->pot_scale_int16();
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseAddN(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator, void** builtin_data) {
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseArgMax(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator, void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const ArgMaxOptions* schema_params = op->builtin_options_as_ArgMaxOptions();
+
+ if (schema_params != nullptr) {
+ TF_LITE_ENSURE_STATUS(ConvertTensorType(
+ schema_params->output_type(), ¶ms->output_type, error_reporter));
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseArgMin(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator, void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const ArgMinOptions* schema_params = op->builtin_options_as_ArgMinOptions();
+
+ if (schema_params != nullptr) {
+ TF_LITE_ENSURE_STATUS(ConvertTensorType(
+ schema_params->output_type(), ¶ms->output_type, error_reporter));
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseAssignVariable(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseBatchMatMul(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator,
+ void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* bmm_params = op->builtin_options_as_BatchMatMulOptions()) {
+ params->adj_x = bmm_params->adj_x();
+ params->adj_y = bmm_params->adj_y();
+ params->asymmetric_quantize_inputs =
+ bmm_params->asymmetric_quantize_inputs();
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseBatchToSpaceNd(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseBroadcastArgs(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseBroadcastTo(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseCallOnce(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator,
+ void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const CallOnceOptions* schema_params =
+ op->builtin_options_as_CallOnceOptions();
+
+ if (schema_params != nullptr) {
+ params->init_subgraph_index = schema_params->init_subgraph_index();
+
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseCast(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator, void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* schema_params = op->builtin_options_as_CastOptions()) {
+ TF_LITE_ENSURE_STATUS(ConvertTensorType(
+ schema_params->in_data_type(), ¶ms->in_data_type, error_reporter));
+ TF_LITE_ENSURE_STATUS(ConvertTensorType(schema_params->out_data_type(),
+ ¶ms->out_data_type,
+ error_reporter));
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseCeil(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
+ void**) {
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseConcatenation(const Operator* op,
+ ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator,
+ void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const ConcatenationOptions* schema_params =
+ op->builtin_options_as_ConcatenationOptions();
+
+ if (schema_params != nullptr) {
+ params->activation =
+ ConvertActivation(schema_params->fused_activation_function());
+ params->axis = schema_params->axis();
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseConv2D(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator, void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const Conv2DOptions* schema_params = op->builtin_options_as_Conv2DOptions();
+
+ if (schema_params != nullptr) {
+ params->padding = ConvertPadding(schema_params->padding());
+ params->stride_width = schema_params->stride_w();
+ params->stride_height = schema_params->stride_h();
+ params->activation =
+ ConvertActivation(schema_params->fused_activation_function());
+
+ params->dilation_width_factor = schema_params->dilation_w_factor();
+ params->dilation_height_factor = schema_params->dilation_h_factor();
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseCumsum(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator, void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* cumsum_params = op->builtin_options_as_CumsumOptions()) {
+ params->exclusive = cumsum_params->exclusive();
+ params->reverse = cumsum_params->reverse();
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseCos(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
+ void**) {
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseDepthToSpace(const Operator* op,
+ ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator,
+ void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const auto* schema_params = op->builtin_options_as_DepthToSpaceOptions();
+ if (schema_params != nullptr) {
+ params->block_size = schema_params->block_size();
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseDepthwiseConv2D(const Operator* op,
+ ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator,
+ void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const DepthwiseConv2DOptions* schema_params =
+ op->builtin_options_as_DepthwiseConv2DOptions();
+
+ if (schema_params != nullptr) {
+ params->padding = ConvertPadding(schema_params->padding());
+ params->stride_width = schema_params->stride_w();
+ params->stride_height = schema_params->stride_h();
+ params->depth_multiplier = schema_params->depth_multiplier();
+ params->activation =
+ ConvertActivation(schema_params->fused_activation_function());
+
+ params->dilation_width_factor = schema_params->dilation_w_factor();
+ params->dilation_height_factor = schema_params->dilation_h_factor();
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseDequantize(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseDiv(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator, void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* schema_params = op->builtin_options_as_DivOptions()) {
+ params->activation =
+ ConvertActivation(schema_params->fused_activation_function());
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseElu(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
+ void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseEqual(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
+ void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseExp(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
+ void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseExpandDims(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseFill(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
+ void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseFloor(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
+ void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseFloorDiv(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseFloorMod(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseFullyConnected(const Operator* op,
+ ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator,
+ void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const FullyConnectedOptions* schema_params =
+ op->builtin_options_as_FullyConnectedOptions();
+
+ if (schema_params != nullptr) {
+ params->activation =
+ ConvertActivation(schema_params->fused_activation_function());
+ params->keep_num_dims = schema_params->keep_num_dims();
+ params->asymmetric_quantize_inputs =
+ schema_params->asymmetric_quantize_inputs();
+
+ switch (schema_params->weights_format()) {
+ case FullyConnectedOptionsWeightsFormat_DEFAULT:
+ params->weights_format = kTfLiteFullyConnectedWeightsFormatDefault;
+ break;
+ case FullyConnectedOptionsWeightsFormat_SHUFFLED4x16INT8:
+ params->weights_format =
+ kTfLiteFullyConnectedWeightsFormatShuffled4x16Int8;
+ break;
+ default:
+ TF_LITE_REPORT_ERROR(error_reporter,
+ "Unhandled fully-connected weights format.");
+ return kTfLiteError;
+ }
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseGather(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator, void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ params->axis = 0;
+ params->batch_dims = 0;
+ if (const auto* gather_params = op->builtin_options_as_GatherOptions()) {
+ params->axis = gather_params->axis();
+ params->batch_dims = gather_params->batch_dims();
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseGatherNd(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseGreater(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseGreaterEqual(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseHardSwish(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseIf(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator, void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const IfOptions* schema_params = op->builtin_options_as_IfOptions();
+
+ if (schema_params != nullptr) {
+ params->then_subgraph_index = schema_params->then_subgraph_index();
+ params->else_subgraph_index = schema_params->else_subgraph_index();
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseL2Normalization(const Operator* op,
+ ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator,
+ void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const L2NormOptions* schema_params = op->builtin_options_as_L2NormOptions();
+
+ if (schema_params != nullptr) {
+ params->activation =
+ ConvertActivation(schema_params->fused_activation_function());
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseLeakyRelu(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator,
+ void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* leaky_relu_params =
+ op->builtin_options_as_LeakyReluOptions()) {
+ params->alpha = leaky_relu_params->alpha();
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseLess(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
+ void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseLessEqual(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseLog(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
+ void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseLogicalAnd(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseLogicalNot(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseLogicalOr(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseLogistic(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseLogSoftmax(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseLSTM(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator, void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ auto params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* lstm_params = op->builtin_options_as_LSTMOptions()) {
+ params->activation =
+ ConvertActivation(lstm_params->fused_activation_function());
+ params->cell_clip = lstm_params->cell_clip();
+ params->proj_clip = lstm_params->proj_clip();
+ switch (lstm_params->kernel_type()) {
+ case LSTMKernelType_FULL:
+ params->kernel_type = kTfLiteLSTMFullKernel;
+ break;
+ case LSTMKernelType_BASIC:
+ params->kernel_type = kTfLiteLSTMBasicKernel;
+ break;
+ default:
+ TF_LITE_REPORT_ERROR(error_reporter, "Unhandled LSTM kernel type: %d",
+ lstm_params->kernel_type());
+ return kTfLiteError;
+ }
+ params->asymmetric_quantize_inputs =
+ lstm_params->asymmetric_quantize_inputs();
+ } else {
+ TF_LITE_REPORT_ERROR(error_reporter, "No valid LSTM builtin options exist");
+ return kTfLiteError;
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseMaximum(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseMinimum(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseMirrorPad(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator,
+ void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const MirrorPadOptions* schema_params =
+ op->builtin_options_as_MirrorPadOptions();
+
+ if (schema_params != nullptr) {
+ params->mode = ConvertMirrorPadding(schema_params->mode());
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseMul(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator, void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const MulOptions* schema_params = op->builtin_options_as_MulOptions();
+
+ if (schema_params != nullptr) {
+ params->activation =
+ ConvertActivation(schema_params->fused_activation_function());
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseNeg(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
+ void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseNotEqual(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParsePack(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator, void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const PackOptions* schema_params = op->builtin_options_as_PackOptions();
+
+ if (schema_params != nullptr) {
+ params->values_count = schema_params->values_count();
+ params->axis = schema_params->axis();
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParsePad(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
+ void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParsePadV2(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
+ void**) {
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParsePool(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator, void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const Pool2DOptions* schema_params = op->builtin_options_as_Pool2DOptions();
+
+ if (schema_params != nullptr) {
+ params->padding = ConvertPadding(schema_params->padding());
+ params->stride_width = schema_params->stride_w();
+ params->stride_height = schema_params->stride_h();
+ params->filter_width = schema_params->filter_width();
+ params->filter_height = schema_params->filter_height();
+ params->activation =
+ ConvertActivation(schema_params->fused_activation_function());
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParsePow(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
+ void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParsePrelu(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
+ void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseQuantize(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseReadVariable(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseReducer(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator,
+ void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const ReducerOptions* schema_params = op->builtin_options_as_ReducerOptions();
+
+ if (schema_params != nullptr) {
+ params->keep_dims = schema_params->keep_dims();
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseRelu(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
+ void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseRelu6(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
+ void**) {
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseReshape(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator,
+ void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const ReshapeOptions* schema_params = op->builtin_options_as_ReshapeOptions();
+
+ if (schema_params != nullptr) {
+ const flatbuffers::Vector* new_shape = schema_params->new_shape();
+ if (new_shape != nullptr) {
+ TF_LITE_ENSURE_STATUS(
+ FlatBufferIntVectorToArray(sizeof(params->shape), new_shape,
+ params->shape, error_reporter, "reshape"));
+ params->num_dimensions = new_shape->size();
+ } else {
+ // TODO(b/157480169) TODO(b/147203660): We should either return
+ // kTfLiteError or fill in some reasonable defaults in the params struct.
+ // We are not doing so until we better undertand the ramifications of
+ // changing the legacy behavior.
+ }
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseResizeBilinear(const Operator* op,
+ ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator,
+ void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const ResizeBilinearOptions* schema_params =
+ op->builtin_options_as_ResizeBilinearOptions();
+
+ if (schema_params != nullptr) {
+ params->align_corners = schema_params->align_corners();
+ params->half_pixel_centers = schema_params->half_pixel_centers();
+ } else {
+ params->align_corners = false;
+ params->half_pixel_centers = false;
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseResizeNearestNeighbor(const Operator* op,
+ ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator,
+ void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const ResizeNearestNeighborOptions* schema_params =
+ op->builtin_options_as_ResizeNearestNeighborOptions();
+
+ if (schema_params != nullptr) {
+ params->align_corners = schema_params->align_corners();
+ params->half_pixel_centers = schema_params->half_pixel_centers();
+ } else {
+ params->align_corners = false;
+ params->half_pixel_centers = false;
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseRound(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
+ void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseRsqrt(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
+ void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseSelectV2(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseShape(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator, void** builtin_data) {
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const ShapeOptions* schema_params = op->builtin_options_as_ShapeOptions();
+
+ if (schema_params != nullptr) {
+ TF_LITE_ENSURE_STATUS(ConvertTensorType(schema_params->out_type(),
+ ¶ms->out_type, error_reporter));
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseSin(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
+ void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseSlice(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
+ void**) {
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseSoftmax(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator,
+ void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const SoftmaxOptions* schema_params = op->builtin_options_as_SoftmaxOptions();
+
+ if (schema_params != nullptr) {
+ params->beta = schema_params->beta();
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseSpaceToBatchNd(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseSpaceToDepth(const Operator* op,
+ ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator,
+ void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const auto* schema_params = op->builtin_options_as_SpaceToDepthOptions();
+ if (schema_params != nullptr) {
+ params->block_size = schema_params->block_size();
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseSplit(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator, void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const SplitOptions* schema_params = op->builtin_options_as_SplitOptions();
+
+ if (schema_params != nullptr) {
+ params->num_splits = schema_params->num_splits();
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseSplitV(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator, void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const SplitVOptions* schema_params = op->builtin_options_as_SplitVOptions();
+
+ if (schema_params != nullptr) {
+ params->num_splits = schema_params->num_splits();
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseUnidirectionalSequenceLSTM(const Operator* op,
+ ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator,
+ void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ auto params =
+ safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+ if (const auto* seq_lstm_params =
+ op->builtin_options_as_UnidirectionalSequenceLSTMOptions()) {
+ params->activation =
+ ConvertActivation(seq_lstm_params->fused_activation_function());
+ params->cell_clip = seq_lstm_params->cell_clip();
+ params->proj_clip = seq_lstm_params->proj_clip();
+ params->time_major = seq_lstm_params->time_major();
+ params->asymmetric_quantize_inputs =
+ seq_lstm_params->asymmetric_quantize_inputs();
+ }
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseSqueeze(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator,
+ void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const SqueezeOptions* schema_params = op->builtin_options_as_SqueezeOptions();
+
+ if (schema_params != nullptr) {
+ const auto* squeeze_dims = schema_params->squeeze_dims();
+ if (squeeze_dims != nullptr) {
+ TF_LITE_ENSURE_STATUS(FlatBufferIntVectorToArray(
+ sizeof(params->squeeze_dims), squeeze_dims, params->squeeze_dims,
+ error_reporter, "squeeze"));
+ params->num_squeeze_dims = squeeze_dims->size();
+ } else {
+ params->num_squeeze_dims = 0;
+ }
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseSqrt(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
+ void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseSquare(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
+ void**) {
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseSquaredDifference(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseStridedSlice(const Operator* op,
+ ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator,
+ void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const StridedSliceOptions* schema_params =
+ op->builtin_options_as_StridedSliceOptions();
+
+ if (schema_params != nullptr) {
+ params->begin_mask = schema_params->begin_mask();
+ params->end_mask = schema_params->end_mask();
+ params->ellipsis_mask = schema_params->ellipsis_mask();
+ params->new_axis_mask = schema_params->new_axis_mask();
+ params->shrink_axis_mask = schema_params->shrink_axis_mask();
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseSub(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator, void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const SubOptions* schema_params = op->builtin_options_as_SubOptions();
+
+ if (schema_params != nullptr) {
+ params->activation =
+ ConvertActivation(schema_params->fused_activation_function());
+ params->pot_scale_int16 = schema_params->pot_scale_int16();
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseSvdf(const Operator* op, ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator, void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ std::unique_ptr
+ params = safe_allocator.Allocate();
+ TF_LITE_ENSURE(error_reporter, params != nullptr);
+
+ const SVDFOptions* schema_params = op->builtin_options_as_SVDFOptions();
+ if (schema_params != nullptr) {
+ params->rank = schema_params->rank();
+ params->activation =
+ ConvertActivation(schema_params->fused_activation_function());
+ params->asymmetric_quantize_inputs =
+ schema_params->asymmetric_quantize_inputs();
+ } else {
+ // TODO(b/157480169): We should either return kTfLiteError or fill in some
+ // reasonable defaults in the params struct. We are not doing so until we
+ // better undertand the ramifications of changing the legacy behavior.
+ }
+
+ *builtin_data = params.release();
+ return kTfLiteOk;
+}
+
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseTanh(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
+ void**) {
+ return kTfLiteOk;
+}
+//
+// We have this parse function instead of directly returning kTfLiteOk from the
+// switch-case in ParseOpData because this function is used as part of the
+// selective registration for the OpResolver implementation in micro.
+TfLiteStatus ParseTranspose(const Operator*, ErrorReporter*,
+ BuiltinDataAllocator*, void**) {
+ return kTfLiteOk;
+}
+
+TfLiteStatus ParseTransposeConv(const Operator* op,
+ ErrorReporter* error_reporter,
+ BuiltinDataAllocator* allocator,
+ void** builtin_data) {
+ CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
+
+ SafeBuiltinDataAllocator safe_allocator(allocator);
+ std::unique_ptr
+ params = safe_allocator.Allocate