diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f53b61c..97597554 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,10 @@ All notable changes to Patternflow will be documented in this file, newest first - **The panel is a network of its own.** With no known Wi-Fi in reach it raises a hotspot, `patternflow-a1b2` (its alias), WPA2, password `patternflow` until changed, and the whole console is at `http://192.168.4.1/` on it - patterns, knobs, the Wi-Fi page to add the next place's network, updates. Modes on `/wifi`: `auto` (default: up fifteen seconds after the last link, down once a network is joined and nobody is on it), `always`, `off`; `GET`/`POST /api/hotspot`, and a `hotspot` object in status. The NETWORK screen shows the name while the hotspot is what there is. What the bench decided (`src/core_hotspot.h` says why, line by line): the channel comes from a scan - the least loaded of 1/6/11 - never a fixed one; alone, the radio runs AP-only, and the station comes back only for a rare probe with nobody connected or when credentials arrive; a DNS responder on the hotspot resolves every name to the panel and the phone's internet probe fails within a second instead of timing out for twenty; the hotspot is 20 MHz. Pretending to be the internet was tried and put a Samsung into its limited-connectivity state, which drops the network. - **Console services start on any link.** Every core page, and the audio, microphone, clock and MQTT pages, used to wait for `WL_CONNECTED` before registering - on the hotspot a phone got an address and port 80 never opened. `PatternflowWifi::linkUp()` is the condition now, the station or the hotspot, and the hotspot raises the same link edge the station does. - **Full transmit power.** The 13 dBm cap from 2026-08 is retired (`PF_WIFI_TX_POWER` is the radio's 19.5 dBm again). Measured on the hotspot: a phone next to the panel took 4-9 s per 10 KB page at 13 dBm and under a second at full power - the phone's own transmitter had hidden the asymmetry, and a router's antenna had hidden it on the home network. Owner's decision. +- **Switching console tabs no longer downloads the page again.** Page addresses carry the firmware's build (`/patterns?v=2a535f30`), and a page asked for under the running build is cached for good - a second visit to a tab costs no request at all (measured on a panel: `/patterns` 15.5 KB in 335 ms the first time, nothing and 16 ms after). A new build is a new address, so an update is never answered from an old copy; an open console notices the new `build` in `/api/status` and moves to it by itself, unless you are in the middle of typing or an upload, when it offers a reload instead. Pages without `v` revalidate every time (`ETag` + `304`), an old `v` gets a `302` to the current one, and the shared header script is addressed by its own checksum (`/pf-console.js?h=…`, stamped in by `console_pages.py`). Only names that can only be the panel - an IP, a bare name, `.local` - are ever given a cache lifetime: the hotspot answers every DNS name, and a phone must not keep the console as someone else's site. On a home network the other tabs are fetched in the background once the page is idle, so even a first visit is instant; not on the hotspot, where the link is the scarce thing. `/api/status` gains `build`, `viaHotspot` and `busy`, and escapes the network's and pattern's names (an SSID with a quote in it made the reply invalid JSON). +- **One header for the whole console, and one way to talk to the panel.** The shared header now lives in a shadow root, so no page's CSS moves it - it had a different height, width and position on every tab, which is most of why switching felt jumpy. On a phone it is two fixed rows with the tabs in one sideways-scrolling strip (Knobs is a tab now), and it says when the panel is not answering, restarting, or has been updated. Pages reach the device through `window.PF`: polls wait for the previous reply, back off on a slow link, pause in a hidden tab and stop the moment you tap another tab, so the next page is first in the one-connection server's queue; the page's own requests go before the header's status request; uploads hold everything else back and ask before you leave. A small fallback is stamped into every page, so a page still works if the header script fails to arrive. `console_serve.py --slow` makes the desk as slow as the hotspot (round trips, a 5.7 KB TCP window, one request at a time) to design against. +- **Setting the panel up from its own hotspot.** `/wifi` puts *Add a network* first when you are on the hotspot or nothing is saved, lists the networks the panel's channel scan saw so you can tap one instead of typing it, stops a case-only typo with an inline "did you mean" before it is saved, and reports what became of the network: joined, with the address to open, or why not - wrong password, not found, refused, no answer - on the page and on the panel's LEDs. On the hotspot with no station link, a network sent from the page is tried at once. The console's pages were gone over for phones on the way: sliders that let the page scroll, inputs that do not zoom iOS, `accept="*/*"` for the Android file picker, the hotspot shown as what it is instead of "offline", a status page that copies its diagnostics, an update page that confirms the new version after the reboot. +- **`always` no longer keeps the panel off its network after a boot.** Raising the hotspot starts with a channel scan, and the scan cuts the station's first connection attempt short; with the hotspot up the station is retried only every five minutes, so a panel set to `always` with good credentials sat off its network for five minutes after every boot (the console looked dead from the LAN). The hotspot now gives the station one attempt the moment it is up - on the bench it joined 1.4 s later - and goes AP-only only if that fails. The console also stopped calling a slow link dead: one reply over the timeout (now 12 s at least, not 5) no longer turns the header's state to offline, two failures in a row do - with the hotspot and the station both up, pages took 4-5 s and the console read "offline" after the first one. - **The console's server waits one second, not five, for a connection that sends nothing.** A browser opens connections it never uses; each idle one held for 5 s put the page's real requests behind it, which on the hotspot was the console appearing only after the browser gave up on its spares. ## [3.10.4] - 2026-09-19 diff --git a/docs/rest-api.md b/docs/rest-api.md index c8ad45f4..f11dc7d8 100644 --- a/docs/rest-api.md +++ b/docs/rest-api.md @@ -18,7 +18,11 @@ Patternflow serves a plain HTTP server on port 80 over the local Wi-Fi network. | Concurrency | **One connection.** See [Rules that will bite you](#rules-that-will-bite-you). | | Authentication | **None.** No token, no password, no session. Anyone on the LAN can call anything here, including `POST /update`. This is a deliberate trust model, the same one ArduinoOTA's empty-password default has; `PF_WEBUPDATE_ALWAYS_ARMED 0` is the one lever that narrows it. | | CORS | Only `/api/patterns/select` and `/api/display` send `Access-Control-Allow-Origin: *`. Everything else is same-origin only, so a browser page on another origin cannot read it. Server-side clients are unaffected. | -| Cache | Every JSON endpoint sends `Cache-Control: no-store`. | +| Cache | Every JSON endpoint sends `Cache-Control: no-store`, and so does the plain-text `404`. | +| Page caching | Since 1.5. A console page is versioned by its URL: the console links every page as `/path?v=`, `build` being the running image's id from [`/api/status`](#get-apistatus). `?v=` naming the running build is served `Cache-Control: public, max-age=31536000, immutable`, so a browser keeps the page until the firmware changes and does not ask again. No `v` (a typed URL, a bookmark, a `?src=` handoff) is served `no-cache`: the browser keeps it but asks each time, and gets a bodiless `304` while the page is unchanged. A `v` naming another build is answered `302` (on a panel `Host`; see Host gating) to the same path with `v` set to the running build and every other query argument kept (`Cache-Control: no-store`). Pages carry a weak `ETag` (`W/"-"` of the uncompressed page), and a `304` carries the same `ETag`, `Cache-Control`, `Content-Type` and the `Content-Length` a `200` would have. Byte ranges are not served. | +| Console chrome | `/pf-console.js`, the header script every page loads, is keyed by its own content instead: pages ask for `/pf-console.js?h=`, which is immutable when `h` is the script's CRC-32, `no-cache` with an `ETag` when `h` is absent, and the current script with `no-store` when `h` names another one. | +| Host gating | Pages, the chrome and the favicon are cacheable only when the request's `Host` can only be the panel: an IPv4 address, a name with no dot (`patternflow`) or a `.local` name, with or without a port. Any other `Host` (a router-assigned name such as `patternflow.fritz.box` included), or none, gets `no-store`, no `ETag`, never a `304` and never a `302`: a page asked for with a stale `v` is served as it is now, and the console's own version check moves it to the running build's `v` once its status arrives (or offers to, while the page is in use). On the hotspot every name resolves to the panel, and a phone must not keep the console under the origin of a site it was trying to reach. | +| Favicon | `GET /favicon.ico` answers `204`, with `Cache-Control: public, max-age=31536000, immutable` on a panel `Host` and `no-store` on any other (see Host gating); pages carry their icon inline. | | Encoding | Responses are `application/json`, hand-assembled in the firmware. Request parameters are **query-string or form-encoded, never a JSON body** — `POST /api/sleep?on=1` and a form body with `on=1` are the same call. The console **pages** (`/`, `/status`, `/patterns`, `/wifi`, `/update`, the feature pages, `/pf-console.js` and the unzip library the patterns page fetches) are sent with `Content-Encoding: gzip` since 1.4, regardless of `Accept-Encoding` — a browser decodes that without being asked; a script fetching a page wants `curl --compressed` or its equivalent. Nothing under `/api/` is compressed. | ## Rules that will bite you @@ -41,9 +45,9 @@ The numbers that explain a device when something is off. Requires `PF_STATUS_HTT ```json { - "version": "3.5.1", "uptime": 4213, "resetReason": "poweron", "panel": "128x64", + "version": "3.5.1", "build": "3f9a0c1e", "uptime": 4213, "resetReason": "poweron", "panel": "128x64", "wifi": true, "ssid": "studio", "ip": "192.168.1.42", "rssi": -54, - "host": "patternflow", + "host": "patternflow", "viaHotspot": false, "heapInternal": 11052, "heapLargest": 8192, "heapPsram": 4194304, "fsMounted": true, "fsTotal": 6291456, "fsUsed": 204800, "fsError": "", "flashId": "c84018", @@ -53,7 +57,7 @@ The numbers that explain a device when something is off. Requires `PF_STATUS_HTT "knobs": [12, 0, -3, 40], "params": [500, 500, 750, 500], "paramActive": [false, false, true, false], "lanes": [0.0, 0.0, 0.0, 0.0], "laneActive": [false, false, false, false], - "consolePaused": false, + "consolePaused": false, "busy": "", "frameUs": 16400, "presentUs": 3100, "loopCore": 1, "httpCore": 0, "netStackMin": 6200, "loopSyncServed": 3, "loopSyncMaxUs": 9800, "colorBits": 6, "refreshHz": 121, @@ -65,12 +69,14 @@ The numbers that explain a device when something is off. Requires `PF_STATUS_HTT | Field | Meaning | |---|---| | `version` | Firmware version string (`PF_IMPROV_FW_VERSION`). | +| `build` | Which image exactly, as eight lowercase hex digits: the start of the firmware ELF's SHA-256 (a hash of the compile time and version on an image built without it). Two images with the same `version` still differ here. Console page URLs carry it as `?v=` (see [Page caching](#transport)); a page open under another build is stale. Since 1.5. | | `uptime` | Seconds since boot. | | `resetReason` | Why the board is running, `esp_reset_reason()` by name: `"poweron"` (the plug), `"sw"` (the reboot button, a finished update), `"panic"`, `"task_wdt"`, `"int_wdt"`, `"wdt"`, `"brownout"`, `"deepsleep"`, `"ext"`, `"sdio"` or `"unknown"`. Read it together with `uptime`: a small uptime and anything but `"poweron"` or `"sw"` means the board restarted on its own — which from the network otherwise looks exactly like a power cut. The same word is printed once on serial at boot (`[BOOT] reset reason: …`). Since 1.4. | | `panel` | Physical matrix, `"x"`. The closest thing to a model number. | | `host` | mDNS hostname, i.e. `PF_OTA_HOSTNAME`. **Not unique** — every device ships as `"patternflow"`. See [Identifying a device](#identifying-a-device). | | `network` | Since 1.5, when Wi-Fi is compiled in: `disconnects` counts sampled connected→disconnected edges; `retries` counts explicit retry attempts (including initial join failures); `reconnectMs` is the last sampled downtime, zero before a reconnect. `namesReady` means the core's local mDNS/service/alias and NetBIOS registrations succeeded; probing may still be in progress and it does not prove client reachability. `announcements` counts successful registration passes. Counters reset on boot. | | `hotspot` | Since 1.5. The panel's own access point: `mode` (`off`, `auto`, `always`), `up`, `ssid` (the board alias, `patternflow-a1b2`), `ip` (`192.168.4.1` while up, else `""`), `channel`, `clients`, and `dns` (name queries answered on the hotspot since boot). | +| `viaHotspot` | Since 1.5. Whether *this* request arrived over the panel's own access point: the client is one phone on a link the panel carries itself, and the console fetches nothing ahead of time there. | | `heapInternal` | Free internal DRAM. The scarce one: HUB75's DMA buffers live there, and below roughly 10 KB the console starts answering with headers and no body while Wi-Fi and OSC carry on looking healthy. Worth watching. | | `fsError` | Why the pattern storage is not mounted, in words; `""` while it is mounted, and before any mount has been tried. Since 1.5. The core's serial line says `Mounting FFat partition failed! Error: -1` whatever the cause, so the first failure in a boot reads the volume's boot sector and records what it found. `"not formatted"` is a freshly erased board — press Format on `/patterns`. `"format did not stick: …"` means a Format ran and reported success, but the flash did not keep what was written. `"no filesystem (boot sector …)"` shows the sector's first and last bytes. `"boot sector looks valid but does not mount"` means the data is on the chip and the read side refused it. A failed `POST /api/patterns/format` returns the same text as its `error`. | | `flashId` | The flash chip's JEDEC id as the driver detected it at boot, six hex digits: manufacturer, then device. `"c22018"` is a 16 MB Macronix part. Since 1.5. | @@ -83,6 +89,7 @@ The numbers that explain a device when something is off. Requires `PF_STATUS_HTT | `paramActive` | Per lane: is a remote writer currently holding it? Goes `false` a beat after somebody turns that encoder, because a hand in the room outranks the network. | | `lanes` / `laneActive` | The continuous 0..1 lane per knob and whether something is driving it — the audio WebSocket, the on-board microphone, weather. Sits between the absolute bus and the encoders in priority; see [`audio-ws-spec.md`](audio-ws-spec.md) for the semantics. | | `consolePaused` | A pattern-install batch is in progress and the module is evicted. Not an error. (Console pages stopped pausing the pattern in 3.6.3 — the name is older than that.) | +| `busy` | Since 1.5. What is keeping the one connection occupied, as a word to slow polling for: `"update"` while a firmware image is arriving or the reboot after it is due, `"storage"` while the pattern volume is being written (a format, a delete, or an install batch between files), `""` otherwise. The console polls no faster than every 5 s while it is non-empty. | | `frameUs` / `presentUs` | Smoothed rendered-frame time and the part spent pushing pixels. `1e6 / frameUs` estimates rendering fps; it excludes housekeeping and is not an input-latency or worst-loop-gap measurement. | | `runtime` | Since 1.5. Whole-loop `loops`, `lastUs`, `maxUs`, `over50ms`; `housekeepingMaxUs` includes work before the rendered-frame timer, and `syncMaxUs` measures execution of a frame-boundary request, excluding time its caller waits. Timing includes loading-state pacing, but excludes time between exiting one loop and entering the next. `GET /api/status?resetTiming=1` returns the current runtime snapshot and starts a new timing window; a loop spanning the reset is discarded. This resets only `runtime`, not lifetime network/load counters. | | `moduleMemory` | Since 1.5. `reserve` is the module allocator's internal byte-addressable RAM floor, not a guarantee about allocations by other subsystems. `serviceFree` is current internal byte-addressable free RAM; `execLargest` is the largest contiguous executable block. `runtimeBytes` and lifetime `runtimePeakBytes` track retained module dynamic allocations; `runtimeLimit` defaults to 4 MiB. Sections and temporary ELF storage are admitted separately. `refusals` counts allocation refusals, including recovered attempts; `loaderRetries` counts the asynchronous loader's bounded retries after such failures. `loaderStackBytes` reports the reusable worker's reserved stack, and `loaderStackMin` is its minimum free space after jobs (0 until measured). | @@ -373,8 +380,8 @@ Requires `PF_WIFI_HTTP_ENABLED` (default on). Up to `PatternflowWifi::MAX_NETWOR | Route | | |---|---| -| `GET /api/wifi` | `{max, connected, current, ip, status, bootIdx, networks:[{ssid}]}` — SSIDs only, never passwords | -| `POST /api/wifi?ssid=…&pass=…` | Store a network. Add `connect=1` to switch immediately. | +| `GET /api/wifi` | `{max, connected, current, ip, status, bootIdx, join, networks:[{ssid}]}` — SSIDs only, never passwords. `join` is the last network someone asked for (below). | +| `POST /api/wifi?ssid=…&pass=…` | Store a network. Add `connect=1` to switch immediately. On the hotspot with no station link it is tried at once either way. | | `DELETE /api/wifi?ssid=…` | Forget one. `404` if it was not saved. | | `POST /api/wifi/boot` (`bootIdx=…`) | Which saved slot the next boot tries first. Stored in NVS, deliberately **not** applied live — the request rides the connection it would drop. | | `POST /api/wifi/reboot` | Replies `{ok:true}` first, restarts 400 ms later. | @@ -384,6 +391,8 @@ Requires `PF_WIFI_HTTP_ENABLED` (default on). Up to `PatternflowWifi::MAX_NETWOR Passwords travel in the clear over LAN HTTP and are never sent back. Same trust model as `/update` and `/patterns`. +`join` reports what became of the last network sent with `connect=1` (or by Improv), since 1.5: `{state, ssid, ip, why, reason, ago}`. `state` is `none` (nothing asked for since boot - a join at power-up is not reported), `trying`, `joined` (with the address it got in `ip`) or `failed` (with `why`: `wrong password`, `network not found`, `the network refused the panel` or `no answer from the network`, and the driver's `reason` code behind it). A join is given up on after 30 s, or when the hotspot's attempt window closes. `ago` is seconds since it was opened or settled. The panel also shows the outcome on its screen - `JOINED` and the address for a minute, or why not for twenty seconds - because a phone that sent the network from the hotspot often loses the page at that moment. + ### Hotspot Since 1.5. The panel is a network of its own when it has none: an access point named after the @@ -396,7 +405,7 @@ The channel is the least loaded of 1/6/11 from a scan when the panel is alone. | Route | | |---|---| -| `GET /api/hotspot` | `{ok:true, hotspot:{mode, up, ssid, ip, channel, clients, dns}, pass}` - the same object status carries, plus the password. | +| `GET /api/hotspot` | `{ok:true, hotspot:{mode, up, ssid, ip, channel, clients, dns}, seen:[{ssid, rssi}], pass}` - the same object status carries, plus the password, and `seen`: the network names the channel scan found when the hotspot came up, strongest first, at most twelve - what the `/wifi` page suggests. Empty when the hotspot came up beside a station link (no scan). | | `POST /api/hotspot` (`mode=off|auto|always`, `pass=…`) | Either or both. `400` with an `error` for an unknown mode or a password outside 8-63 characters. A change is saved to NVS and applied at once: a hotspot that was up restarts, which drops whoever was on it. Replies like `GET`. | On the hotspot every DNS name resolves to the panel, so `patternflow.local` and any typed name land @@ -475,7 +484,7 @@ In short: HTTP is the management and state transport, OSC and MIDI are the low-l ## Version history -- **1.5** (unreleased) — the hotspot (`hotspot` in status, `GET`/`POST /api/hotspot`); status gains `network` and `thumbs` diagnostics, `fsError` (why storage is not mounted) and `flashId`; a failed `POST /api/patterns/format` returns the reason as its `error`; `POST /api/wifi/reconnect` reconnects without a reboot; core name registration retries partial failures and preserves feature-owned services; the MIDI edition adds a `midiUsb` block to status ([`midi-spec.md`](midi-spec.md)); `GET`/`POST /api/knobs` and the `/knobs` page (encoder direction and edges per click, per knob, persisted); `PUT /update` takes a raw image, and an upload survives a stall of up to two minutes. +- **1.5** (unreleased) — the hotspot (`hotspot` in status, `GET`/`POST /api/hotspot`); status gains `network` and `thumbs` diagnostics, `fsError` (why storage is not mounted) and `flashId`; a failed `POST /api/patterns/format` returns the reason as its `error`; `POST /api/wifi/reconnect` reconnects without a reboot; core name registration retries partial failures and preserves feature-owned services; the MIDI edition adds a `midiUsb` block to status ([`midi-spec.md`](midi-spec.md)); `GET`/`POST /api/knobs` and the `/knobs` page (encoder direction and edges per click, per knob, persisted); `PUT /update` takes a raw image, and an upload survives a stall of up to two minutes; `GET /api/wifi` gains `join` (what became of the last network asked for) and `GET /api/hotspot` gains `seen` (the names in range); a network added on the hotspot with no station link is tried at once; console pages are cached by build (`?v=` immutable, bare URLs `no-cache` with an `ETag` and `304`, another build's `v` redirected with `302`), the chrome by its CRC (`?h=`), only for a `Host` that can only be the panel; `GET /favicon.ico` answers `204`; status gains `build`, `viaHotspot` and `busy`. - **1.4** (2026-09-06) — `GET /api/patterns/file` gains `ext=thumb`; `GET /api/display` takes `brightness` and status reports it; status gains `resetReason` and `load.internal`/`load.psram`; console pages are served gzip-compressed (`Content-Encoding: gzip`); the page sender no longer truncates on a slow link; the server no longer trips the Core-0 watchdog on a request that stalls mid-header. - **1.3** (2026-09-04) — `GET`/`POST /api/clock` (Utility edition) and the `clock` block in status; `caps` gains `"clock"`. - **1.2** (2026-09-03) — the server is serviced on Core 0 (the one-connection rule stands; the render-pays rule is history); status gains `httpCore`, `netStackMin`, `loopSyncServed`/`loopSyncMaxUs`; `POST /api/params` documents `d1`..`d4` and how a held value reaches a legacy pattern; `GET /api/patterns/select` gains `step`; `GET`/`POST /api/audio` (Audio-React) are documented; `featureNav`'s microphone label is *Audio*. diff --git a/firmware/patternflow/console/README.md b/firmware/patternflow/console/README.md index 1c3a7c75..4b9a2ea3 100644 --- a/firmware/patternflow/console/README.md +++ b/firmware/patternflow/console/README.md @@ -13,6 +13,15 @@ python firmware/toolchain/console_serve.py all the same `/api/*` calls with data captured off a real panel. Save a file, hit refresh. Devtools work, which they never did before. +Pages go out exactly as the panel sends them: stamped (below), with the +same ETags, 304s, redirects and cache headers. The mock's `build` changes +whenever you save a page, so a tab left open reloads itself onto your edit +the way a real one does after a firmware update. To see the console the way +a phone on the panel's hotspot does, `--slow` (gzip, 0.4 s round trips, +5 KB/s, one request at a time); `/mock?hotspot=1` and `/mock?busy=update` +set what `/api/status` says; `--chrome404` runs every page on its fallback. +The script's docstring has the rest. + When you are done: ```bash @@ -54,7 +63,92 @@ The shared header band, nav and light/dark toggle are not in these files. They live in `src/theme_index.h`, served at `/pf-console.js`, and every page loads it with one ` +``` + +exactly once, in ``, and `console_pages.py build` stamps it in the +header as + +```html + +``` + +`extract` strips it back, so the HTML never carries a stamp — never write one +by hand. Because every page carries the chrome's CRC, **an edit to +`src/theme_index.h` or `_pf_fallback.js` makes every page header stale**: +run `build`, and CI's `check` names each page `(stale chrome stamp)` until +you do. A page without exactly one bare tag fails `build`. + +The inline script after it is `_pf_fallback.js`: when `/pf-console.js` did +not load (a dropped connection on a bad link), it defines a minimal +`window.PF` — the same calls, without the queue, toasts, connection state or +nav — so the page still works instead of throwing on its first `PF.` call. +Its `poll` keeps the same promises (chained, never overlapping, `now()` a +no-op while a run is in flight or after `stop()`). It rides in every page, +about 600 bytes gzipped each, so it stays one line of ES5 and gains nothing +a page can do without; `check_sources.py` syntax-checks it and the chrome. See it in action with +`console_serve.py --chrome404`. ## Rules the device imposes @@ -69,8 +163,9 @@ flash. That constrains what a page may do: - **Size is flash.** These strings live in the firmware image. A page that doubles in size takes that space from patterns. - **Nothing may assume a feature exists.** Sequences, MQTT, Weather and Audio - are features; a build may have none of them. Ask `/api/status` — its `caps` - array lists what is actually loaded — and hide what is not there. The nav + are features; a build may have none of them. Ask `PF.status(cb)` — the + status's `caps` array lists what is actually loaded — and hide what is not + there. The nav does this for you. If your page has its own links or rows, mark them `data-cap="shows"` and see `gate()` in `home.html`. diff --git a/firmware/patternflow/console/_pf_fallback.js b/firmware/patternflow/console/_pf_fallback.js new file mode 100644 index 00000000..397ee203 --- /dev/null +++ b/firmware/patternflow/console/_pf_fallback.js @@ -0,0 +1,10 @@ +// The console's fallback window.PF. console_pages.py build stamps it into +// every page right after the chrome's diff --git a/firmware/patternflow/console/home.html b/firmware/patternflow/console/home.html index 99e8a234..461dcf27 100644 --- a/firmware/patternflow/console/home.html +++ b/firmware/patternflow/console/home.html @@ -6,22 +6,20 @@ Patternflow - - -

Status

-
+ +
+ + +

Device

+
Firmware
-
+
Build
-
+
Last restart
-
+
Busy
-
+
Panel size
-
+

Render

Panel
-
@@ -51,6 +74,7 @@
Total
-
Built into firmware
-
Loaded from storage
-
+
Last load error
-

@@ -60,20 +84,29 @@
PSRAM free
-

Internal heap is the scarce one - the LED panel's DMA buffers -live there. Below ~10 KB this page itself stops loading.

+live there. A pattern module loads only if it leaves 24 KB +of it free; run lower and the network is the first thing to go, while the +panel keeps drawing.

Storage

Pattern storage
-
+
Storage error
-
+

Network

Network
-
Signal
-
Address
-
+
Names
-
+
Hotspot
-
+
Hotspot mode
-
+
Hotspot clients
-
+
Reached via
-
- +
\ No newline at end of file +// http:// is not a secure context, so navigator.clipboard is usually missing +// on a panel's address; execCommand('copy') from the click still works in +// every browser that matters. If both fail the text is shown to copy by hand. +function legacyCopy(t){ + var a=document.createElement('textarea'),ok=false; + a.value=t;a.setAttribute('readonly',''); + a.style.cssText='position:fixed;top:0;left:0;opacity:0'; + document.body.appendChild(a); + a.select();a.setSelectionRange(0,t.length); + try{ok=document.execCommand('copy')}catch(e){} + document.body.removeChild(a); + if(!ok)throw Error('copy refused'); +} +function copyText(t){ + if(window.isSecureContext&&navigator.clipboard&&navigator.clipboard.writeText) + return navigator.clipboard.writeText(t).then(null,function(){legacyCopy(t)}); + return new Promise(function(y){legacyCopy(t);y()}); +} +$('copy').addEventListener('click',function(){ + var m=$('cpmsg'),a=$('cptext'); + if(!last){PF.say('no status yet','err',m);return} + var t='Patternflow status · '+new Date().toISOString()+' · '+location.host+'\n'+flat(last,'',[]).join('\n'); + copyText(t).then(function(){a.hidden=true;PF.say('copied','ok',m)},function(){ + a.value=t;a.hidden=false;a.focus();a.select(); + PF.say('select the text below and copy it','info',m); + }); +}); + +PF.watchStatus(2000); +PF.status(paint); + diff --git a/firmware/patternflow/console/update.html b/firmware/patternflow/console/update.html index 9ffc3f7d..28c2f596 100644 --- a/firmware/patternflow/console/update.html +++ b/firmware/patternflow/console/update.html @@ -5,24 +5,19 @@ Patternflow — Firmware update - - - - +

Update

…
@@ -71,118 +75,167 @@
Linked build
- +
Two steps -
01

Build & download a .bin — patternflow.work → Build, or an arduino-cli export.

+
01

Get a .bin: patternflow.work/update sends the latest release straight back to this page. Or bring your own — an arduino-cli export.

02

Drop it below. Keep the device powered; it verifies, flashes, and reboots itself.

This build requires arming first. On the device: hold K2 → NETWORK, then turn K4 → UPDATE.
-
+
Drop .bin here - or click to choose a file + Checking the panel…
- +
-
+
+
+
diff --git a/firmware/patternflow/console/wifi.html b/firmware/patternflow/console/wifi.html index 57f5a4ea..25ee399a 100644 --- a/firmware/patternflow/console/wifi.html +++ b/firmware/patternflow/console/wifi.html @@ -11,6 +11,7 @@ --sans:'Inter',ui-sans-serif,system-ui,sans-serif; --mono:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,monospace} *{box-sizing:border-box} +[hidden]{display:none!important} body{margin:0;background:var(--cream);color:var(--ink);font-family:var(--sans); line-height:1.5;-webkit-font-smoothing:antialiased} .wrap{max-width:680px;margin:0 auto;padding:32px 20px 64px} @@ -18,7 +19,7 @@ border-bottom:1px solid var(--rule)} .dot{width:7px;height:7px;background:var(--led);border-radius:1px} h1{font-size:15px;font-weight:600;margin:0;flex:1} -.sub{font-family:var(--mono);font-size:11px;color:var(--faint)} +.sub{font-family:var(--mono);font-size:11px;color:var(--faint);text-align:right} section{margin-top:26px} h2{font-size:11px;font-weight:600;letter-spacing:.09em;text-transform:uppercase; color:var(--muted);margin:0 0 8px} @@ -26,19 +27,19 @@ li{display:flex;align-items:center;gap:10px;padding:9px 2px; border-bottom:1px solid var(--rule-soft);font-size:13px} li .n{font-family:var(--mono);font-size:11px;color:var(--faint);min-width:20px} -li .nm{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; +.nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; font-family:var(--mono);font-size:12px} .tag{font-family:var(--mono);font-size:10px;letter-spacing:.06em; text-transform:uppercase;padding:1px 6px;border:1px solid var(--ok); border-radius:2px;color:var(--ok)} -button{font:inherit;cursor:pointer} +button{font:inherit;cursor:pointer;position:relative} button.del{font-size:11px;color:var(--muted);background:none; border:1px solid var(--rule);border-radius:2px;padding:2px 8px} button.del:hover{border-color:var(--led);color:var(--led)} form{margin:0;display:grid;gap:10px;max-width:380px} -label{display:block;font-size:12px;color:var(--muted);margin-bottom:3px} +label,.lbl{display:block;font-size:12px;color:var(--muted);margin:0 0 3px} input{width:100%;font:inherit;font-family:var(--mono);font-size:13px;padding:7px 9px; -background:var(--card);color:var(--fg);border:1px solid var(--rule);border-radius:2px} +background:var(--panel);color:var(--ink);border:1px solid var(--rule);border-radius:2px} input:focus{outline:none;border-color:var(--led)} .actions{display:flex;gap:8px;align-items:center;margin-top:2px} button.primary{background:var(--ink);color:var(--cream);border:1px solid var(--ink); @@ -46,90 +47,141 @@ button.primary:hover{background:var(--led);border-color:var(--led)} .check{display:flex;gap:6px;align-items:center;font-size:12px;color:var(--muted)} .check input{width:auto} -#msg{margin-top:12px;font-family:var(--mono);font-size:11px;min-height:16px} -#msg.err{color:var(--led)} +/* Result lines, filled by PF.say next to the control that caused them. */ +.msg{margin-top:10px;font-family:var(--mono);font-size:11px;min-height:16px;color:var(--muted)} +.msg.pf-ok{color:var(--ok)}.msg.pf-err{color:var(--led)} +#join{margin-top:12px;padding:10px 12px;border:1px solid var(--rule);border-radius:2px; +font-size:13px;line-height:1.5;max-width:520px} +#join.ok{border-color:var(--ok)} +#join.err{border-color:var(--led)} +#join b{font-family:var(--mono);font-weight:600} +#join a{color:var(--ink)} +#join .big{display:inline-block;margin:6px 10px 6px 0;font-family:var(--mono); +font-size:20px;word-break:break-all} .note{font-size:12px;color:var(--faint);margin:8px 0 0;line-height:1.45} footer{margin-top:32px;padding-top:12px;border-top:1px solid var(--rule); font-family:var(--mono);font-size:11px;color:var(--faint)} a{color:var(--muted)} -.tag.boot{font-family:var(--mono);font-size:10px;letter-spacing:.06em; -text-transform:uppercase;padding:1px 6px;border:1px solid var(--muted); -border-radius:2px;color:var(--muted)} +.tag.boot{border-color:var(--muted);color:var(--muted)} select{width:100%;max-width:380px;font:inherit;font-family:var(--mono);font-size:13px; padding:7px 9px;background:var(--panel);color:var(--ink);border:1px solid var(--rule); border-radius:2px} button.secondary{font-size:13px;color:var(--ink);background:none; border:1px solid var(--rule);border-radius:2px;padding:7px 16px} button.secondary:hover{border-color:var(--led);color:var(--led)} +.ghost{font-family:var(--mono);font-size:11px;color:var(--muted);background:none; +border:1px solid var(--rule);border-radius:2px;padding:3px 10px} +.ghost:hover{border-color:var(--led);color:var(--led)} +.row{display:flex;gap:6px} +.row input{flex:1;min-width:0} +/* What the hotspot's channel scan found, strongest first: a row to tap. */ +.scan li{padding:0} +.scan button{flex:1;display:flex;align-items:center;gap:10px;min-width:0;padding:8px 2px; +background:none;border:0;color:var(--ink);text-align:left} +.scan button:hover .nm{color:var(--led)} +.scan:not(.all) li:nth-child(n+7){display:none} +.bars{display:flex;align-items:flex-end;gap:2px;height:10px} +.bars i{width:3px;height:40%;background:var(--rule)} +.bars i+i{height:60%}.bars i+i+i{height:80%}.bars i+i+i+i{height:100%} +.s1 i:first-child,.s2 i:nth-child(-n+2),.s3 i:nth-child(-n+3),.s4 i{background:var(--muted)} +.more,.chip button{background:none;border:0;padding:0;font-family:var(--mono); +font-size:11px;text-decoration:underline} +.more{margin-top:6px;color:var(--muted)} +.chip{display:flex;flex-wrap:wrap;align-items:center;gap:4px 12px;margin-top:6px; +padding:5px 8px;border:1px solid var(--led);border-radius:2px;font-family:var(--mono);font-size:11px} +.chip button{color:var(--led)} +/* Small controls keep their look; on a touch screen the hit area grows. */ +@media(pointer:coarse){.scan button{padding:12px 2px} +.del::after,.more::after,.chip button::after,#join .ghost::after{content:""; +position:absolute;inset:-11px -6px}} +html.pf-offline #st,html.pf-offline #list,html.pf-offline #hsstate{opacity:.45}

Wi-Fi

-
- -
+ -
+ -
+

Add a network

+
- + + +
- +
+ + +
- - + +
-
-

Saved networks are tried in order starting from the boot slot above, +

+ +

Saved networks are tried in order starting from the boot slot, wrapping around — so the device joins whichever one it can find, useful if it moves between home, a studio and a venue. A new network is only stored; leave switch now unticked and this page keeps working. Ticking it drops the - current connection immediately.

+ current connection immediately. On the panel's hotspot a network is tried at once, + and the panel shows the outcome on its screen as well as here: the address to open, + or why it could not join.

Hotspot

-

-
- - -
-
- - -
-
- -
-
+
+
+ + +
+
+ + +
+
+ +
+
+

The panel as a network of its own: patternflow-????. Join it from a phone or a laptop and open http://192.168.4.1/ — the same console, anywhere. auto raises it about fifteen seconds after the panel @@ -142,135 +194,273 @@

Hotspot

\ No newline at end of file +function settle(p,ms){return new Promise(function(y){p.then(y,function(){y()});setTimeout(y,ms)})} + diff --git a/firmware/patternflow/features/audio_in/audio_in_index.h b/firmware/patternflow/features/audio_in/audio_in_index.h index 42621b18..5282991f 100644 --- a/firmware/patternflow/features/audio_in/audio_in_index.h +++ b/firmware/patternflow/features/audio_in/audio_in_index.h @@ -12,7 +12,7 @@ static const char AUDIO_IN_INDEX_HTML[] PROGMEM = R"HTML( - + Patternflow - Mic mapping +
Memory
—
Uptime
—
Firmware
—
@@ -336,10 +370,14 @@ function $(i){return document.getElementById(i)} // deleted when the capability was absent, which meant a core page naming // features and a new feature's page getting no row at all. // -// Rebuilt from scratch on every status (gate can fire twice at load), then +// Rebuilt from scratch whenever featureNav changes (not on every status: the +// card polls, and a rebuild under the pointer drops hover and focus), then // everything renumbers so the list still reads 01, 02, 03. +var navKey; function gate(s){ - var i,nav=(s&&s.featureNav)||[]; + var i,nav=(s&&s.featureNav)||[],k=JSON.stringify(nav); + if(k===navKey)return; + navKey=k; var f=$('featRows'),fk=$('featKick'); if(f){ f.innerHTML=''; @@ -359,13 +397,13 @@ function gate(s){ for(i=0;i=0)pumpBri()}); + function done(){briInFlight=false;if(briQueued>=0)pumpBri()} + PF.get('/api/display?brightness='+v).then(done,function(x){ + if(!x||!x.nav)note('brightness not set — '+(x&&x.status?'refused':'the panel did not answer'),'err'); + done(); + }); } $('bri').addEventListener('input',function(){ var p=parseInt(this.value,10);if(isNaN(p))return; $('bri-v').textContent=p+'%';briQueued=p;briSettleUntil=Date.now()+1500;pumpBri(); }); -(function(){ - var sl=$('bri'); - var on=function(){briActive=true},off=function(){briActive=false;briSettleUntil=Date.now()+1500}; - sl.addEventListener('touchstart',on,{passive:true});sl.addEventListener('touchend',off,{passive:true}); - sl.addEventListener('mousedown',on);window.addEventListener('mouseup',off); -})(); +// Pointer events, and pointercancel with them: with pan-y a vertical swipe +// that starts on a slider becomes a scroll, which ends in pointercancel (or +// touchcancel), never an up/end, and "a hand is on it" would stick. +function held(sl,on,off){ + var down=false; + function up(){if(down){down=false;off()}} + sl.addEventListener('pointerdown',function(){down=true;on()}); + window.addEventListener('pointerup',up); + window.addEventListener('pointercancel',up); +} +held($('bri'),function(){briActive=true},function(){briActive=false;briSettleUntil=Date.now()+1500}); // ── Update check (runs in the browser, never on the device) ─── var updChecked=false; @@ -572,8 +628,14 @@ function pumpParams() { cache: 'no-store', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: bodyParts.join('&') - }).catch(function() { - }).finally(function() { + }).then(function(r) { + if (!r.ok) throw Error('refused'); + $('ctrlmsg').textContent = ''; + }).catch(function(x) { + // Next to the sliders, not swallowed: a drag that never arrived looks + // exactly like a pattern ignoring its knobs. + PF.say('not sent — ' + (x && x.message === 'refused' ? 'refused' : 'no answer'), 'err', $('ctrlmsg')); + }).then(function() { inFlight = false; if (Object.keys(queuedParams).length) { pumpParams(); // Flush pending latest updates @@ -599,15 +661,10 @@ function initSliders() { (function(idx) { var sl = $('sl-' + idx); if (!sl) return; - var onStart = function() { activeSlider = idx; }; - var onEnd = function() { - activeSlider = -1; + held(sl, function() { activeSlider = idx; }, function() { + if (activeSlider === idx) activeSlider = -1; pumpParams(); - }; - sl.addEventListener('touchstart', onStart, {passive: true}); - sl.addEventListener('touchend', onEnd, {passive: true}); - sl.addEventListener('mousedown', onStart); - window.addEventListener('mouseup', onEnd); + }); sl.addEventListener('input', function() { var v = sl.value; onSliderInput(idx, v); @@ -618,634 +675,750 @@ function initSliders() { initSliders(); // ── Quick pattern stepping (← / →) ─────────────────────────── +// The reply names the new pattern; the next status confirms it. function stepPattern(dir) { var prev = $('now').textContent; $('now').textContent = dir > 0 ? 'Next…' : 'Prev…'; - fetch('/api/patterns/select?step=' + dir, {cache: 'no-store'}) - .then(function(r) { return r.json(); }) - .then(function(d) { - if (d.ok && d.name) { - $('now').textContent = d.name; - $('nowsub').textContent = 'switched'; - } - setTimeout(tick, 300); - }) - .catch(function() { - $('now').textContent = prev; - }); + PF.get('/api/patterns/select?step=' + dir).then(function(d) { + $('now').textContent = d.name || prev; + $('nowsub').textContent = 'switched'; + $('stepmsg').textContent = ''; + }, function(x) { + $('now').textContent = prev; + if (!x || !x.nav) + PF.say(x && x.status === 404 ? 'nothing to switch to' : 'not switched', 'err', $('stepmsg')); + }); } $('pat-prev').addEventListener('click', function() { stepPattern(-1); }); $('pat-next').addEventListener('click', function() { stepPattern(1); }); -tick(); -setInterval(tick,3000); -document.addEventListener('visibilitychange',function(){if(!document.hidden)tick()}); +PF.watchStatus(3000); +PF.status(paint); )HTML"; // GENERATED by firmware/toolchain/console_pages.py build — do not edit. -// gzip -9 of HOME_INDEX_HTML (29924 bytes → 9594 bytes), served with Content-Encoding: gzip. +// gzip -9 of HOME_INDEX_HTML (34460 bytes → 11493 bytes), served with Content-Encoding: gzip. const uint8_t HOME_INDEX_HTML_GZ[] PROGMEM = { - 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x02,0xff,0xcd,0x7d,0xdd,0x76,0xdb,0x48, - 0x92,0xe6,0xbd,0x9e,0x22,0x8b,0x9e,0x32,0xc8,0x12,0x09,0x92,0xfa,0xb3,0x4d,0x8a, - 0x72,0xdb,0x2e,0x7b,0xd7,0x53,0xe5,0x2a,0xb7,0xed,0xea,0x9a,0x3d,0x3e,0xde,0x3e, - 0x20,0x91,0x24,0x51,0x02,0x01,0x34,0x12,0x14,0xad,0x96,0x35,0xa7,0xaf,0xe6,0x7a, - 0xce,0x9e,0x79,0x86,0x7d,0x85,0xbd,0xdf,0x47,0xa9,0x27,0xd9,0x2f,0x22,0x33,0x81, - 0x04,0x7f,0x24,0xd9,0xee,0x3d,0xdd,0xae,0x92,0x45,0x02,0x99,0x91,0x91,0xf1,0x1f, - 0x91,0x01,0xf8,0xf4,0x9b,0x30,0x9d,0x14,0x97,0x99,0x14,0xf3,0x62,0x11,0x9f,0xed, - 0x9d,0xd2,0x2f,0x11,0x07,0xc9,0x6c,0xd4,0x90,0x49,0x83,0x2e,0xc8,0x20,0xc4,0xaf, - 0x85,0x2c,0x02,0x31,0x99,0x07,0xb9,0x92,0xc5,0xa8,0xb1,0x2c,0xa6,0x9d,0x87,0x74, - 0x57,0x4d,0xf2,0x28,0x2b,0x84,0xca,0x27,0xa3,0x46,0x37,0x9b,0x76,0x26,0x69,0xa2, - 0xd2,0x58,0xfa,0xbf,0xa9,0xc6,0xd9,0x69,0x57,0xdf,0xb5,0xb3,0x93,0x60,0x21,0x47, - 0x8d,0x8b,0x48,0xae,0xb2,0x34,0x2f,0x1a,0x02,0x63,0x0b,0x99,0x00,0xda,0x2a,0x0a, - 0x8b,0xf9,0x28,0x94,0x17,0xd1,0x44,0x76,0xf8,0x4b,0x3b,0x4a,0xa2,0x22,0x0a,0xe2, - 0x8e,0x9a,0x04,0xb1,0x1c,0xf5,0x69,0xa9,0x22,0x2a,0x62,0x79,0xf6,0x3a,0x28,0x0a, - 0x99,0x27,0xd3,0x38,0x5d,0x9d,0x76,0xf5,0xa5,0xbd,0xd3,0x38,0x4a,0xce,0x45,0x2e, - 0xe3,0x51,0x23,0x02,0xd0,0x86,0x98,0xe7,0x72,0x3a,0x6a,0x84,0x41,0x11,0x0c,0xa2, - 0x45,0x30,0x93,0x5d,0x75,0x31,0xdb,0xff,0xb8,0x88,0xdb,0xdf,0x1e,0x3e,0xc3,0x47, - 0x81,0x8f,0x89,0x1a,0x79,0xf3,0xa2,0xc8,0x06,0xdd,0xee,0x6a,0xb5,0xf2,0x57,0x87, - 0x7e,0x9a,0xcf,0xba,0x07,0xbd,0x5e,0x8f,0x06,0x7b,0x82,0xd0,0x7c,0x9a,0x7e,0x1c, - 0x79,0x3d,0xd1,0x13,0xfd,0x13,0xfc,0xef,0x7d,0x7b,0xf8,0x1c,0xf3,0x73,0x39,0x29, - 0x84,0xc6,0xd8,0xc3,0x45,0x31,0x97,0xd1,0x6c,0x5e,0xe8,0xcf,0xd3,0x28,0x8e,0x47, - 0xde,0xb7,0x07,0x87,0xbd,0x67,0xbd,0xa7,0xbd,0x47,0x5e,0xd7,0x99,0x02,0x50,0xc7, - 0x9e,0xb8,0xe4,0xbf,0xcd,0x74,0x67,0xb6,0x3b,0xf9,0xc5,0x8b,0xe3,0x67,0x07,0xcf, - 0xed,0x64,0x42,0x07,0x9f,0x1a,0xb5,0x6d,0x66,0x00,0x99,0x26,0x09,0xe0,0xda,0xcd, - 0xd2,0x5e,0x14,0x36,0x33,0x05,0x51,0x95,0x3f,0x4b,0xd3,0x59,0x2c,0x83,0x2c,0x52, - 0xfe,0x24,0x5d,0x7c,0xe6,0x5c,0x55,0x04,0x45,0x34,0xe1,0x89,0x62,0x92,0xa7,0x4a, - 0xa5,0x79,0x34,0x8b,0x12,0x0b,0xe4,0xf6,0xf5,0xba,0x13,0xa5,0x0e,0x1e,0x4f,0x83, - 0x45,0x14,0x5f,0x8e,0x5e,0x82,0xc9,0xf9,0x60,0x85,0x5d,0xfe,0xe1,0xb0,0xd7,0x1b, - 0x1e,0xe1,0xe7,0xb8,0xd7,0xbb,0x6f,0xee,0xfe,0xab,0x2c,0x9e,0xe6,0x41,0x94,0xa8, - 0xfd,0x57,0x69,0x92,0xea,0x61,0x76,0x48,0x18,0xa9,0x2c,0x0e,0x2e,0x47,0x6a,0x15, - 0x64,0x0d,0x8d,0xbb,0x2a,0x2e,0x63,0xa9,0xe6,0x52,0x16,0x2c,0x7c,0xf4,0xed,0x6c, - 0x4f,0x88,0x3f,0x10,0x16,0x9d,0x69,0x30,0x91,0x57,0xe6,0x13,0x01,0x1f,0x78,0xaf, - 0x73,0x09,0x09,0x0b,0x83,0x3c,0xf4,0x86,0x7c,0x63,0xc5,0xe4,0x1e,0x3c,0xc0,0x0a, - 0xfc,0x9d,0x21,0x0c,0x92,0x34,0x5f,0x04,0xb1,0xbe,0x62,0x16,0x1d,0xd0,0xa2,0x43, - 0x80,0x16,0x24,0xdb,0x83,0x65,0x1e,0x37,0x3d,0xbb,0xe5,0x49,0x98,0x40,0xbe,0x43, - 0x19,0x47,0x17,0xb9,0x9f,0xc8,0xa2,0x9b,0x64,0x8b,0x6e,0x56,0x2e,0xf5,0x87,0xbe, - 0x7f,0xe8,0x3f,0xea,0x02,0x50,0xd1,0x5d,0xc9,0x71,0x57,0x93,0xb3,0xbb,0x4a,0xa7, - 0xd3,0x83,0x6e,0x85,0x51,0xe7,0x69,0x1a,0x87,0x3e,0x5f,0xf5,0x5a,0x62,0x4a,0x28, - 0x14,0x4d,0xcf,0x7c,0xbf,0xc6,0xca,0x83,0x3c,0x4d,0x8b,0xab,0x4e,0x67,0x3c,0x1b, - 0xdc,0xd3,0xf2,0x34,0xec,0x74,0xb2,0x20,0x91,0xf1,0xe0,0x5e,0xff,0xb0,0xdf,0xef, - 0xf7,0xf0,0x1d,0x0c,0x19,0xdc,0x7b,0xfe,0xfd,0xf3,0x07,0xdf,0x3f,0xc5,0xb7,0xc5, - 0xb2,0x90,0xe1,0xe0,0xde,0xc3,0x27,0x0f,0x0f,0x1e,0x1c,0xe0,0xfb,0x14,0x94,0x2d, - 0x06,0xf7,0x8e,0x9f,0x1c,0x1f,0x1f,0x9d,0xe8,0xdd,0xd0,0x9f,0x4e,0x67,0x36,0x4f, - 0x15,0x6e,0x1c,0x1c,0xf4,0x5f,0xf4,0x1f,0x62,0x60,0xbe,0x04,0x19,0xee,0x1d,0x1c, - 0x1d,0xf4,0xf9,0x6b,0x4c,0x50,0xb4,0x18,0xe2,0x5b,0x8a,0x25,0x8e,0x1f,0x3c,0x7d, - 0xf8,0xe0,0x05,0xbe,0xac,0x82,0x3c,0x19,0xdc,0xfb,0xfe,0xd1,0x93,0xde,0xe1,0x0b, - 0x17,0xa2,0x0a,0x12,0x35,0xf0,0x98,0xd9,0x5e,0x7b,0x19,0xf1,0xf7,0x8e,0x92,0x79, - 0x34,0x6d,0xab,0x4b,0x55,0xc8,0x45,0x67,0x19,0xb5,0xab,0x8b,0xee,0xd4,0x05,0x71, - 0xde,0x2b,0x25,0x41,0x90,0x24,0x30,0x0c,0xba,0xa1,0x32,0x70,0xb5,0xfd,0xf6,0x05, - 0x5d,0xec,0xbc,0x91,0xb3,0x65,0x1c,0xe4,0xed,0x57,0x32,0x89,0xd3,0x76,0x79,0xdb, - 0x05,0x56,0xf1,0xa1,0xc6,0xfe,0x3b,0xa0,0x44,0x34,0xff,0xee,0x6a,0x9c,0x7e,0xec, - 0xa8,0xe8,0xaf,0x51,0x32,0x1b,0x8c,0xd3,0x3c,0x94,0x79,0x07,0x57,0x86,0x8b,0x20, - 0x87,0x06,0x0c,0x7a,0xc3,0x2c,0x08,0x43,0xba,0xd7,0xa3,0xd1,0xe3,0x34,0xbc,0xbc, - 0x5a,0x44,0x49,0x47,0x6b,0xf1,0xa0,0xdf,0xeb,0x5d,0xcc,0x87,0xe3,0x60,0x72,0x3e, - 0xcb,0xd3,0x65,0x12,0x0e,0x2e,0x82,0xbc,0x49,0x0c,0x6c,0x0d,0x27,0x69,0x9c,0xe6, - 0xe6,0x3b,0x78,0xd6,0x2a,0x51,0x26,0xa1,0x1b,0xf4,0x8f,0xb3,0x8f,0xdd,0xbe,0x7f, - 0x7c,0x2c,0xf4,0x08,0x42,0xaa,0x35,0x84,0xb4,0x8e,0xcf,0x23,0x48,0x33,0x4b,0xea, - 0x02,0xd2,0x30,0xa7,0xa5,0x83,0x84,0x2c,0x63,0x14,0x28,0x19,0x96,0x50,0x2c,0x5a, - 0x07,0x47,0xd9,0x47,0xc1,0x7f,0x9d,0xe0,0x2f,0xc2,0xd1,0x67,0x89,0xb9,0x62,0x8b, - 0x43,0x08,0x7e,0x8b,0xbd,0x7c,0xd4,0x46,0x76,0x70,0x7c,0xd2,0xcb,0xca,0xbd,0xf5, - 0x4f,0x30,0x2b,0x58,0x16,0xa9,0xe0,0xbd,0x91,0xd9,0x97,0xf9,0x95,0x55,0x87,0x69, - 0x2c,0x3f,0x0e,0xb1,0xea,0x2c,0xe9,0x44,0xa0,0x9c,0x1a,0x4c,0x24,0xb1,0x7a,0x38, - 0x0b,0xb2,0xc1,0x43,0x00,0x31,0x08,0x80,0x58,0x45,0x91,0x2e,0x06,0xfd,0x03,0x5c, - 0x2b,0xe9,0xa7,0x2f,0x01,0x3c,0x5c,0x43,0x14,0x9a,0x3d,0x92,0xc8,0xb5,0xcc,0xe2, - 0x76,0xcc,0xc1,0x43,0x83,0x74,0x08,0xc9,0xd7,0x38,0x3e,0x00,0x20,0x43,0x5e,0xfa, - 0xb8,0x41,0x5c,0x88,0x6a,0xcb,0xae,0x94,0x07,0x61,0xb4,0x54,0xb4,0x12,0xef,0xa0, - 0xaf,0x8d,0x01,0xb8,0x29,0x99,0xc2,0x35,0x13,0x70,0x02,0x13,0x10,0x4b,0xf2,0x25, - 0x1d,0x92,0x21,0x22,0x9e,0xdf,0xeb,0xcb,0x45,0xc5,0x6a,0xda,0xf2,0xa0,0xcf,0xe8, - 0xa8,0xe5,0xb8,0x66,0x58,0xf4,0xd2,0x24,0x7f,0xad,0xa1,0xb3,0x06,0x16,0xae,0x31, - 0x9a,0xd5,0x0f,0xba,0x0c,0x10,0xdd,0xef,0xc4,0xef,0xff,0xf5,0x37,0xfc,0x2f,0xbe, - 0x67,0x37,0x27,0x26,0x90,0x4a,0xd1,0x4c,0x13,0x29,0x14,0x6c,0x4f,0x2c,0xc8,0x4a, - 0x2c,0x95,0xc8,0x52,0x7c,0xfe,0xfd,0x6f,0xff,0x25,0x8a,0xb9,0x14,0xda,0x23,0x8a, - 0x44,0x5e,0xc8,0x1c,0x03,0x72,0x19,0x2c,0x30,0x22,0xfa,0x28,0x63,0xd5,0xb2,0xe0, - 0xbe,0xeb,0x32,0x82,0x93,0x5c,0xca,0xe4,0x6a,0x83,0x3a,0xcc,0x7c,0x4b,0x9f,0x1d, - 0x2c,0x28,0x65,0xa7,0x47,0xb2,0x43,0x7f,0x9d,0x18,0x2e,0x24,0xe9,0xaa,0x33,0x0f, - 0xd7,0x84,0xe0,0xb7,0xa5,0x2a,0xa2,0xe9,0x65,0xc7,0x78,0xef,0x01,0x6b,0x60,0x67, - 0x2c,0x8b,0x15,0x30,0xd8,0x22,0x22,0x25,0xa4,0xf3,0xbb,0x90,0x90,0x04,0x72,0x9d, - 0x2d,0xfd,0x23,0xb0,0xa5,0x90,0x1f,0x8b,0x4e,0x91,0x43,0x31,0xc8,0x54,0x0e,0x96, - 0x59,0x26,0xf3,0x09,0x74,0x60,0x2b,0xc1,0xcd,0x8a,0x49,0x70,0x51,0xc7,0x9d,0xa4, - 0xf5,0xd8,0xd9,0xdc,0xb8,0x48,0xae,0x58,0x85,0x1c,0xc2,0xf1,0x1a,0x59,0x90,0x03, - 0xf9,0x9b,0xe9,0xe6,0x2e,0xcc,0x86,0xd7,0x28,0xf5,0x1d,0x76,0x49,0xda,0x01,0x5f, - 0x2a,0x4b,0xc3,0x31,0xd4,0xc2,0x4e,0xf2,0x6f,0xa5,0x9d,0xb4,0x58,0x03,0xac,0x4b, - 0x37,0xcd,0x9d,0x2c,0x73,0x38,0xe5,0x41,0x96,0x46,0xac,0x84,0x76,0x8f,0x51,0xc2, - 0x40,0x77,0xe9,0x2a,0x03,0x5b,0x67,0x9f,0xb9,0xc7,0xbb,0x46,0xc8,0x95,0x26,0x03, - 0x92,0x46,0xbf,0x7f,0xac,0x84,0x04,0x79,0x31,0xc7,0xa5,0xd6,0x60,0x9e,0x42,0x16, - 0xaf,0x36,0xac,0x99,0x41,0xd1,0xbd,0x4e,0x8a,0x59,0x9b,0x1a,0x4c,0x8a,0xe8,0x42, - 0x6e,0xca,0x28,0xfb,0xa2,0xd6,0xb0,0xe2,0x2d,0xc7,0x7c,0xcd,0x9e,0xff,0xe8,0xa0, - 0x04,0xe0,0x68,0xf2,0xc1,0x1d,0x34,0xb9,0xe3,0xf7,0x0e,0x20,0x33,0x35,0x12,0x63, - 0x4b,0x56,0xb7,0x61,0x48,0x10,0xd4,0x1d,0x92,0xed,0xab,0x8c,0xf7,0xc1,0x23,0x7c, - 0xa7,0xdd,0x51,0x68,0xd9,0x59,0xe5,0x10,0x95,0x20,0xb9,0x5c,0xcd,0x65,0x2e,0xcb, - 0x6d,0x7c,0xa1,0x1d,0x30,0xd2,0xe1,0x7a,0x0a,0x23,0x85,0x95,0x59,0x78,0x4d,0x9a, - 0x2a,0xd4,0x2a,0x2a,0x26,0x73,0x73,0xed,0x1f,0xfe,0xbf,0xf6,0x2e,0x4f,0x84,0x92, - 0xb3,0x05,0x89,0x49,0x08,0x3f,0x13,0xe5,0x6d,0x91,0xa4,0x85,0x08,0x84,0x82,0x42, - 0x80,0xd8,0xa2,0x48,0x67,0x88,0xfd,0x06,0xa2,0xbb,0xf8,0x4b,0x81,0xeb,0x31,0xcc, - 0x54,0x78,0x09,0x33,0x35,0x39,0x57,0xc2,0x98,0x05,0x0d,0x88,0x4c,0x9c,0x54,0xb0, - 0x6c,0x91,0x12,0xab,0xe0,0x52,0x34,0x7d,0x6c,0xb5,0x2b,0xfc,0x1c,0x09,0x03,0x42, - 0xe2,0x62,0x2e,0x82,0x44,0xf8,0x69,0x22,0x26,0x71,0xa0,0x60,0xe1,0x82,0x24,0xd4, - 0x83,0x23,0xc5,0xe6,0x50,0x21,0x7f,0xd0,0x90,0x66,0x52,0x15,0xcb,0x5c,0xb6,0xa1, - 0x95,0x7c,0xc7,0x64,0x1d,0xe2,0x5c,0xca,0x4c,0x09,0x32,0xaa,0x17,0xe9,0x24,0x18, - 0x53,0xac,0x70,0xe9,0x8b,0x97,0x84,0x15,0x46,0xaa,0x79,0xba,0xc2,0xca,0xf3,0x08, - 0xcb,0x32,0x2e,0x1a,0xd8,0x65,0xba,0x14,0x50,0x77,0x11,0x25,0x22,0x0f,0x00,0x2d, - 0x07,0x48,0x20,0x12,0xa8,0x73,0xda,0x1d,0xdd,0x85,0x4f,0xa4,0x4d,0x61,0xcf,0x71, - 0x30,0x06,0x97,0x08,0xb1,0x28,0x99,0x62,0x64,0x54,0xf8,0xc6,0x02,0x67,0xab,0xbb, - 0x39,0x4b,0xd6,0x7d,0xe3,0xf5,0x8a,0x34,0x63,0xb7,0xbb,0xee,0xc6,0xf5,0x8d,0xc3, - 0xca,0x85,0xf2,0xf7,0x6d,0x46,0xe8,0xda,0x2c,0xfd,0x15,0xc6,0x15,0x7a,0x62,0x97, - 0xff,0x0c,0x1b,0xeb,0x7a,0x47,0x5a,0x1f,0x0a,0xae,0x36,0x6d,0xad,0x75,0x24,0x3c, - 0xe2,0xae,0x9a,0xb3,0xe1,0x95,0x1f,0xde,0x05,0x45,0xeb,0xc5,0x28,0x8a,0xe9,0x1f, - 0x6d,0xda,0x48,0x0b,0x60,0x87,0xa5,0xdf,0xa2,0xae,0x37,0x1a,0xff,0x12,0x9f,0xca, - 0x6e,0x32,0x88,0xca,0x72,0xb6,0x5d,0x9b,0x58,0x5d,0xae,0xe8,0xf1,0x19,0xb6,0x54, - 0x63,0x54,0x4d,0x85,0x92,0xdc,0xd9,0x06,0x0f,0x39,0xa2,0x9d,0x07,0x61,0xba,0x82, - 0x83,0x40,0xf6,0x2e,0x7a,0xfc,0x1f,0xed,0x6b,0xcd,0x52,0x13,0x6c,0xe8,0xb6,0xbc, - 0x93,0x2c,0xf9,0xc7,0x5b,0xa3,0x9d,0x92,0x32,0xae,0xb5,0x3b,0xaa,0xcb,0xfc,0x03, - 0x47,0x2c,0x68,0x3d,0x5f,0xe6,0x75,0x3a,0x58,0x8c,0x2a,0xf3,0xf8,0x34,0x27,0x48, - 0x89,0x54,0xca,0x5e,0x01,0x07,0x59,0x55,0xa5,0x31,0x9a,0x03,0xfe,0x9c,0x1a,0x05, - 0x26,0xd5,0x0d,0xc4,0x9c,0x34,0x35,0x28,0xf8,0x0e,0x87,0x42,0x1a,0xb9,0x30,0x85, - 0x19,0x6a,0xfe,0xd0,0xf7,0x94,0x88,0x53,0xa8,0x1b,0x72,0x06,0xc0,0x55,0xf8,0x0b, - 0x7c,0x6c,0x6d,0x58,0x95,0x79,0x00,0x13,0x04,0x20,0x69,0x6a,0x95,0x7d,0x9c,0x47, - 0x5f,0xa6,0xec,0x3d,0xb3,0x73,0x00,0x28,0xf5,0x96,0x14,0x29,0x81,0xcd,0xb2,0x37, - 0x3a,0x17,0x5f,0xe1,0x63,0x74,0x1c,0x71,0x48,0x04,0x67,0x55,0x61,0xc4,0x06,0x4c, - 0xbc,0xa1,0xb3,0x52,0x8d,0xb6,0x3f,0xc2,0x2d,0x83,0x3c,0x39,0xcc,0x6b,0x41,0x81, - 0x26,0x64,0x5d,0xe6,0x4c,0x20,0xdf,0xff,0xe1,0xa8,0xf5,0x77,0xf6,0x46,0x86,0x84, - 0x93,0x22,0x8f,0xd5,0xd5,0xba,0x21,0xac,0x19,0xc0,0xa3,0xbb,0x1a,0x40,0x86,0xf5, - 0x35,0x91,0xea,0x18,0x8a,0x49,0xc1,0xc2,0x5a,0x3a,0x42,0xec,0x73,0x16,0xf8,0x72, - 0x1b,0x7b,0xf0,0x05,0x01,0xac,0x66,0x43,0x27,0x47,0xf0,0xf3,0xb9,0xa2,0xb6,0x8e, - 0x7e,0x05,0x6a,0x00,0xcf,0x5a,0x74,0x26,0xf3,0x28,0x0e,0xaf,0xea,0x83,0x7b,0x7a, - 0x64,0x87,0x3d,0xdc,0x5d,0x05,0x70,0x3d,0x0c,0xdb,0x29,0x90,0x94,0x56,0x0c,0xeb, - 0x92,0x5e,0x21,0x05,0x5f,0x9a,0x2d,0x8b,0xf7,0x54,0x85,0x1c,0x81,0x3e,0x33,0xf9, - 0xa1,0xcd,0x0a,0xb2,0x71,0x59,0xc7,0xea,0xda,0xf3,0xd8,0x30,0x99,0xa4,0x26,0x00, - 0x2d,0x21,0xbe,0xc9,0x44,0x32,0xf8,0x32,0x71,0x5e,0xbf,0xbe,0x2b,0xf4,0xdc,0x12, - 0x65,0x93,0xf3,0x4d,0x97,0x05,0x09,0x85,0x9e,0xbb,0xe6,0x4e,0x82,0x09,0xd1,0x7e, - 0xd3,0xd8,0x16,0xe9,0x72,0x32,0xef,0x50,0xa8,0x0b,0x8f,0x40,0x13,0x6d,0x00,0x7d, - 0xd3,0x76,0x07,0x03,0x8b,0xb1,0x19,0x55,0xcc,0x97,0x8b,0xf1,0x0e,0x22,0x6c,0x1f, - 0xac,0x49,0x73,0x57,0x42,0x98,0x6a,0x80,0x93,0x6d,0xf0,0xe7,0x3a,0x09,0x8e,0x7b, - 0xdf,0x0e,0xd7,0x93,0xa3,0x0d,0x77,0x43,0xe9,0x48,0x4d,0x2b,0x99,0x0a,0x6b,0xc4, - 0x72,0x9c,0x64,0xa9,0x00,0xf0,0x88,0xf5,0x0c,0xe3,0x46,0x02,0xe9,0xdc,0xe1,0xf3, - 0xe8,0x74,0xd3,0x1c,0x4d,0xae,0xf5,0x94,0xa3,0xef,0x1f,0xb4,0xb6,0x57,0x18,0xee, - 0xc8,0xc5,0x45,0xfa,0xd7,0x0e,0x7f,0xb9,0x8d,0x83,0x6b,0x03,0x35,0x3a,0x77,0xe6, - 0xca,0xd7,0x32,0x84,0x77,0xc3,0xdb,0x41,0x14,0x5c,0x85,0x6d,0xb3,0x3c,0x0a,0x87, - 0xf4,0x57,0x07,0xc6,0x05,0x57,0x0a,0x49,0xf2,0xbd,0x5c,0x24,0x6a,0xd0,0x9f,0xe6, - 0x02,0x3f,0x6c,0x69,0x7a,0x5c,0x24,0x58,0x8f,0x61,0xaf,0x2d,0xbc,0x2b,0x1b,0x89, - 0x91,0x29,0x44,0x9c,0xf1,0xe8,0xae,0x56,0x9c,0x26,0x0b,0xff,0xab,0x02,0xd9,0xcf, - 0xb6,0xb1,0xbc,0xe4,0x9d,0xfc,0xed,0xc1,0x46,0xbc,0xc3,0x44,0x77,0xa8,0x70,0xe4, - 0x04,0xf2,0x48,0x32,0x40,0x3d,0x76,0x38,0xd0,0x38,0x4a,0x26,0xcb,0xd4,0x72,0x30, - 0x8f,0xc2,0x10,0xfe,0x87,0x71,0x2d,0x2f,0xca,0x38,0x8e,0x32,0x15,0x29,0x07,0xad, - 0x71,0x90,0x5f,0x19,0x39,0x38,0xdc,0x56,0xf9,0x32,0xc6,0x6b,0x33,0xae,0x82,0x67, - 0x7f,0x87,0xf0,0x45,0x86,0xac,0x72,0x62,0x1c,0xa7,0x93,0x73,0xca,0xa1,0x90,0xbe, - 0x00,0x67,0x0e,0x6f,0x10,0xce,0x2c,0xe0,0x1d,0x39,0x93,0x8b,0x12,0x84,0x4c,0xb8, - 0xc0,0xc5,0x7d,0x2a,0x88,0x73,0xec,0x94,0x84,0x7a,0x2f,0xe5,0xb0,0x38,0x4d,0xcf, - 0x91,0x99,0x21,0xad,0x0b,0xc6,0x31,0x67,0x4b,0x14,0x23,0x2d,0xb0,0x19,0x7c,0x4b, - 0xa7,0x0c,0x1d,0x43,0xf1,0x89,0x72,0x25,0xd8,0x4e,0xe5,0x13,0x1a,0x26,0xf5,0x5b, - 0x8e,0x3b,0x64,0x4b,0x09,0x0d,0x4e,0xa9,0x75,0xb0,0x96,0x48,0x13,0xaa,0xad,0xd2, - 0x1c,0xe9,0x9f,0x0a,0x2e,0xe9,0xcb,0x0c,0xe1,0x99,0x89,0xb4,0x02,0x2d,0x52,0x56, - 0x42,0x79,0x2b,0x9a,0x72,0xa1,0x9c,0xa4,0x48,0xd7,0xac,0x99,0x35,0x9c,0x31,0x7b, - 0xb9,0x2e,0xa7,0xea,0x20,0x9b,0x78,0xbc,0x2d,0xbe,0xac,0x8f,0xa1,0xec,0x7e,0x9d, - 0xc1,0x0e,0x3f,0xca,0xe4,0xdf,0x49,0x55,0x6a,0x05,0x86,0xa3,0xe3,0x6d,0xf1,0xb0, - 0xc3,0x9f,0xe3,0x9d,0x12,0x42,0xe7,0x0f,0x75,0xd6,0x8b,0x68,0x6d,0xd7,0x55,0x8d, - 0xf9,0x5b,0x63,0xbf,0x7b,0x3b,0xaa,0xa1,0x8e,0xb9,0xe5,0x81,0xc2,0x3f,0x54,0x6b, - 0x21,0xdf,0x2f,0x59,0x08,0xf5,0x86,0x65,0x4f,0x12,0xec,0xbc,0xa9,0x45,0x12,0x21, - 0x75,0x11,0xc5,0xcc,0x99,0x31,0x2c,0x9c,0xc2,0x9d,0x2c,0x07,0x69,0x28,0xfa,0xdd, - 0x88,0x02,0x35,0x7f,0xee,0x2d,0xb3,0xb0,0xc4,0x93,0xf9,0xe0,0x9a,0x85,0x2a,0x80, - 0xdb,0x50,0x7b,0x46,0xb4,0xb4,0x14,0x7d,0x9b,0xb4,0xb9,0x55,0x71,0x43,0xe7,0xc3, - 0x6d,0x6a,0xb7,0x55,0x04,0xec,0xe4,0x1a,0x3e,0x5b,0xc3,0x3c,0x0e,0x98,0x4c,0x2c, - 0x4e,0x5b,0x10,0x7e,0x11,0xcc,0xbe,0xd4,0xf0,0x70,0x7e,0xba,0x11,0x08,0xdc,0x9a, - 0xb0,0x6e,0x9a,0x08,0x8b,0x8d,0x49,0x0c,0x1d,0xe6,0xe6,0xb3,0x71,0xd0,0x3c,0x38, - 0x3e,0x6e,0x3f,0x3a,0x68,0x1f,0x9d,0xb4,0xfd,0xde,0x49,0xab,0x42,0x7d,0x96,0xda, - 0x50,0x2e,0x96,0xd3,0x62,0x40,0x25,0xfc,0xe1,0x57,0x24,0x10,0x5b,0xd0,0xaa,0x89, - 0xce,0x0b,0x19,0x50,0xed,0x45,0x90,0x84,0xfc,0xe3,0x0b,0x55,0x26,0x9b,0x20,0x64, - 0xdc,0x64,0xe2,0xb0,0xac,0x3c,0x4c,0x3b,0xe7,0x30,0x59,0xce,0x49,0x86,0xd6,0xa6, - 0x2f,0xac,0x45,0xdc,0x5c,0x8a,0xb6,0x3c,0xdf,0x6d,0x05,0x4c,0xb0,0xbd,0x81,0x9d, - 0xd8,0x17,0x54,0xac,0xde,0x7e,0x1a,0x42,0x77,0xee,0xe2,0x41,0x31,0x4e,0xc7,0xf7, - 0xe9,0xb4,0x43,0xe1,0xc6,0xd6,0x08,0x1f,0x4b,0xba,0x29,0x85,0xa6,0x46,0x96,0x1a, - 0x7b,0x91,0x4b,0xb8,0x7d,0x44,0x4d,0x95,0x6a,0x52,0x3d,0xe5,0x11,0xc5,0x14,0xfc, - 0xa9,0x77,0xa7,0x43,0x9d,0x6d,0x74,0x30,0xe2,0xb5,0x55,0x71,0x37,0x5c,0xe3,0xce, - 0xa2,0x8a,0x36,0xda,0x7a,0x0f,0x3b,0xea,0x27,0x9b,0x43,0x78,0xd3,0xec,0x2d,0xaf, - 0x76,0x15,0x55,0xec,0xfd,0x92,0x10,0xc1,0x18,0xdb,0xc2,0x80,0x21,0xa7,0xce,0x83, - 0x0e,0x65,0x57,0x6c,0xc2,0x61,0x7d,0x2b,0xd6,0xf3,0x27,0x0a,0x94,0xfe,0x47,0xb3, - 0x83,0x3b,0xf5,0x33,0x01,0x37,0xb9,0xa8,0x99,0xb4,0xe3,0x83,0xb5,0xd4,0xe9,0x70, - 0x6b,0x05,0xfb,0x68,0xbd,0x82,0x3d,0x34,0xe1,0x5b,0x47,0x5e,0x20,0xf7,0x50,0x9a, - 0x76,0x37,0xd3,0xca,0xd0,0xa1,0x53,0xb8,0x9e,0xeb,0xc1,0xda,0xf2,0xc7,0x5b,0x97, - 0xef,0x6f,0x14,0xd0,0x0f,0x87,0x5b,0xbd,0xa3,0x5e,0xc2,0x57,0x29,0x62,0x8d,0x6a, - 0xbd,0xdd,0x94,0xa6,0xfb,0x94,0x7d,0xda,0x53,0xc8,0xc3,0x93,0xc9,0xdc,0x75,0x1b, - 0x87,0xdb,0x0d,0xd3,0x9a,0x4b,0x58,0x77,0xbd,0xeb,0xa8,0xb4,0xb7,0xe2,0x15,0x5e, - 0xed,0x88,0x04,0xc9,0xfe,0xaf,0x1d,0xa3,0xdc,0xd9,0x50,0xec,0x74,0x0a,0xb7,0x1a, - 0x8a,0x1d,0xce,0xd1,0xd8,0x8c,0x2d,0x44,0xb0,0x6a,0x09,0x0a,0x88,0x87,0x74,0x5c, - 0x57,0x05,0xe2,0x6c,0xfc,0x19,0x17,0x88,0x7c,0x11,0x21,0xa1,0x31,0xc5,0x1f,0x53, - 0x05,0x98,0xa6,0x29,0x30,0xac,0x19,0x49,0xf2,0xb8,0x9f,0x51,0x31,0x61,0xaf,0x79, - 0xb2,0xee,0xa5,0xbf,0xb0,0xa0,0xfb,0x99,0xa1,0xba,0xc6,0x5e,0x04,0x57,0x77,0xb4, - 0x29,0xee,0x9c,0x1b,0x0c,0xc5,0x1f,0x16,0x88,0x92,0x83,0xe6,0xda,0x91,0x78,0xeb, - 0x8a,0x4f,0xf6,0x4b,0x1b,0x78,0x60,0xc2,0x13,0x71,0x6c,0x68,0xc9,0x7f,0x2a,0xab, - 0x51,0xed,0xf7,0x88,0x06,0x58,0x1b,0x6b,0x8b,0x59,0xb9,0xe9,0x39,0x71,0xe6,0x9a, - 0x30,0xfd,0x7b,0xa9,0xce,0x89,0x13,0x1c,0x73,0xad,0xe6,0x54,0x6c,0xb4,0x45,0x47, - 0x08,0x2d,0x1f,0x0e,0xf3,0xc1,0x2e,0x9f,0x08,0x73,0x01,0x53,0x64,0x11,0x42,0xb6, - 0x50,0x10,0xb7,0xdb,0xec,0x83,0x35,0x48,0x5e,0x83,0x87,0x45,0x89,0x2a,0xe8,0xb0, - 0x82,0x43,0xf2,0x6c,0x4e,0x40,0x74,0x16,0x27,0x60,0x62,0x41,0x20,0x04,0xd8,0x88, - 0xdd,0x91,0xe0,0x15,0x97,0x82,0xf9,0x6b,0x42,0x6d,0x4b,0x0a,0x08,0x87,0x26,0xc5, - 0x23,0x4d,0x8a,0x6a,0xbb,0xdc,0x48,0x50,0x91,0xaa,0xdf,0x3f,0x70,0xb7,0xe4,0x53, - 0xe6,0x78,0x97,0x5c,0x12,0xe6,0x06,0xa4,0xc4,0x3a,0x00,0xd5,0xec,0xb5,0x91,0x56, - 0xb6,0xf4,0x61,0x01,0xc9,0xae,0x1b,0xae,0x21,0x16,0xce,0x8b,0x0a,0x3e,0x6d,0xb9, - 0x32,0xd0,0x10,0xd4,0xc9,0xf9,0x25,0xdb,0xe4,0xa3,0x23,0x17,0x8d,0xf5,0x50,0xa0, - 0x77,0x7d,0xbd,0x77,0xda,0xd5,0xad,0x42,0xa7,0x5d,0xee,0x66,0x3b,0x25,0xf6,0x9e, - 0xed,0xe1,0xcf,0xe9,0x02,0x12,0xa6,0xcf,0x9b,0x46,0x0d,0xde,0x60,0x83,0xfa,0x89, - 0x4e,0x75,0xf7,0xc3,0xd9,0x29,0x08,0x54,0xde,0x0e,0xd3,0x82,0x7b,0xda,0x70,0xe9, - 0xec,0x74,0xde,0x3f,0x7b,0xa6,0x39,0x05,0x98,0xfd,0xfa,0x40,0x24,0x0a,0x8d,0x33, - 0x7d,0x76,0x6f,0x87,0x77,0x0d,0x40,0x0a,0xa5,0x4e,0xc3,0xe8,0xc2,0x0e,0x25,0x0a, - 0xe9,0x15,0x9d,0x8b,0xb4,0xd1,0x8d,0x8b,0x5a,0x10,0xf8,0x72,0xfd,0x86,0x39,0xa4, - 0x37,0x77,0x70,0xcf,0x45,0x85,0xcf,0xdd,0x1b,0x67,0x3f,0xa5,0x2b,0x41,0x6c,0x01, - 0xf3,0x0d,0x46,0x76,0xf0,0x1a,0x20,0x84,0x10,0x25,0x20,0xdc,0x1d,0x2f,0xe1,0xe5, - 0x6b,0xc0,0xc6,0x45,0xd2,0x10,0x51,0x48,0xc4,0x2a,0xa8,0x6e,0x7e,0xd1,0x10,0xdc, - 0x84,0x37,0x6a,0xbc,0xc6,0x97,0x28,0xa5,0x16,0x06,0xdd,0xa1,0x87,0x1b,0x54,0xf2, - 0x68,0x68,0x18,0x8d,0xb3,0xfb,0x71,0x90,0xe7,0xc3,0xd3,0xae,0xfe,0x7e,0xf7,0x45, - 0x12,0x68,0x77,0xb9,0xc8,0x4f,0xf8,0xb2,0x73,0x81,0x7c,0xdb,0x02,0xa7,0x5d,0x6c, - 0xd1,0x50,0xcd,0xf9,0x58,0xdf,0xb7,0x5e,0x8d,0x3e,0x9c,0xdd,0x5f,0x84,0x81,0x9a, - 0x0f,0x77,0x8f,0xa5,0x43,0xe0,0x72,0x3c,0xb3,0xfa,0x8e,0x63,0x61,0xe0,0xa6,0x0d, - 0xa1,0x43,0x1c,0x3b,0x67,0x63,0x52,0xb6,0xda,0xc1,0x49,0x3e,0x2c,0x68,0x9c,0xf1, - 0x31,0xf1,0x6e,0x1e,0xda,0xa3,0xb8,0xdd,0x4c,0xe4,0x11,0x86,0xba,0x9d,0x74,0x83, - 0x88,0x3f,0x27,0xb7,0x72,0xa8,0x06,0x41,0xc5,0x52,0x66,0xeb,0x40,0xde,0xd2,0xc5, - 0xcf,0x67,0x84,0x3d,0x0e,0x32,0xb0,0x57,0x39,0x7f,0xd9,0x45,0xde,0x71,0x1e,0xdd, - 0x48,0xa9,0xea,0xc4,0x68,0x8d,0x5c,0x5c,0x8f,0x33,0x18,0x73,0x0d,0xae,0x51,0xce, - 0x9c,0x9a,0x22,0xa1,0xc6,0x80,0x56,0x20,0x3b,0x35,0x6a,0x1c,0xe0,0x77,0xf0,0x71, - 0xd4,0x40,0xf2,0xdd,0x10,0x30,0xaf,0x19,0x3e,0x36,0xe0,0xac,0xe3,0x25,0x60,0x3c, - 0xc4,0xb5,0x20,0x8f,0x02,0x5d,0x3a,0x87,0x22,0xb0,0x9d,0x1e,0x97,0xcb,0x6f,0xc7, - 0x92,0x0f,0x7a,0xca,0x75,0xf0,0xb1,0x92,0xbc,0x0a,0xdb,0x5d,0x52,0xc2,0xe7,0x11, - 0x7a,0xb2,0xfe,0xb8,0x4d,0x16,0xca,0x53,0x11,0x57,0x18,0x5c,0x14,0xcc,0xa9,0x46, - 0xe3,0x8c,0x0f,0x80,0x7e,0x48,0xd2,0xf1,0x3a,0xa9,0x2a,0xca,0xaf,0x19,0xa3,0xb2, - 0x0c,0xba,0x0b,0xb6,0x39,0x48,0x68,0x9c,0xfd,0xd0,0xaf,0xc3,0xfc,0x1c,0x06,0xa8, - 0xb8,0xd3,0x33,0x1c,0xe8,0xdd,0xc4,0x81,0xe3,0x5e,0xe3,0xef,0x8a,0xf2,0xc1,0x57, - 0xa1,0xdc,0xff,0x47,0xa0,0x7c,0xf8,0x55,0x28,0x1f,0xfc,0x23,0x50,0x3e,0xfa,0x2a, - 0x94,0x0f,0xbf,0x1c,0xe5,0x5d,0x5a,0xc5,0xd5,0xf0,0xad,0xaa,0x44,0x77,0x1a,0x75, - 0x27,0xcf,0xb6,0x98,0xfd,0x90,0x55,0x1a,0x77,0x82,0xd1,0x6c,0xd5,0xc9,0x68,0x62, - 0xcd,0xa7,0xec,0xa6,0xdd,0xd6,0x45,0xde,0x16,0x08,0x6b,0x67,0xf2,0xa6,0x35,0xa6, - 0x6a,0x9b,0xdb,0xda,0xb0,0x97,0x01,0x0c,0xc1,0x69,0x54,0xce,0xd1,0xdf,0xbb,0xd1, - 0xd9,0x17,0xa1,0xf5,0x6b,0xd4,0x79,0x11,0xdd,0x84,0xd4,0x2a,0x9a,0x46,0x5f,0xb7, - 0xf3,0x27,0x61,0x98,0x57,0xd6,0x7b,0xeb,0x22,0x51,0xf6,0x75,0x4b,0xbc,0x92,0x8b, - 0x34,0xbf,0xbc,0x69,0x05,0xc4,0x6d,0x5f,0xb9,0xc6,0x2f,0x59,0x11,0x2d,0x6e,0xe4, - 0xdf,0xf2,0x2b,0x57,0x78,0x11,0xe5,0x8b,0x55,0x90,0xdf,0x2c,0x23,0xab,0x1b,0xd7, - 0xf8,0xa6,0xd3,0x11,0xbf,0x72,0x63,0x94,0x3d,0x35,0xe0,0xc6,0x2b,0x9d,0x72,0xe0, - 0x43,0xbe,0x4c,0x12,0x04,0x8f,0xdc,0x4b,0xb5,0x0a,0xcc,0x51,0x02,0x97,0xfd,0x75, - 0xf7,0x6a,0x96,0x23,0x51,0x43,0x5e,0x51,0x4a,0x1e,0x55,0x3e,0x91,0xd3,0xe8,0x14, - 0xac,0x6d,0x9a,0xae,0xca,0xe2,0x3f,0x35,0x55,0x91,0xaa,0xab,0x74,0x21,0xf5,0x01, - 0x00,0x9c,0x0f,0x62,0x72,0x91,0x48,0x19,0x2a,0x4e,0x63,0x6c,0xf3,0x97,0x0b,0xd1, - 0xf4,0x81,0x4d,0xa3,0x5c,0x15,0xe6,0xe0,0xa0,0x48,0xc5,0x39,0x62,0x2b,0x82,0x9b, - 0x00,0xab,0xa9,0x29,0x4e,0xd2,0x02,0xf2,0x63,0x26,0x27,0xd4,0xb4,0x86,0x69,0x74, - 0x80,0x41,0x2b,0xfb,0x2e,0xb8,0xb7,0xc1,0x42,0x9a,0xd3,0x11,0x6c,0x89,0x9a,0x6c, - 0x2f,0x35,0x50,0x19,0x2b,0xd9,0x66,0x0c,0xf4,0x91,0x89,0x90,0x11,0xb7,0x95,0xac, - 0x90,0xd8,0x50,0x62,0x06,0xea,0x1b,0x32,0xd5,0xb0,0x2b,0xf8,0xe4,0x82,0x50,0x2a, - 0xe6,0x41,0x61,0x87,0x78,0x8a,0x7b,0x7d,0xdb,0x22,0x4d,0x4c,0x53,0xef,0x34,0x58, - 0xc6,0x45,0x7d,0x38,0x12,0xbd,0xb9,0x8c,0xa7,0x6d,0x17,0xde,0x58,0x4e,0x82,0xa5, - 0x92,0xa2,0xa1,0x69,0x16,0xd8,0x43,0x13,0x46,0x05,0x69,0x1d,0x05,0x00,0x9a,0x20, - 0x7f,0x59,0x4a,0x65,0x98,0x56,0xc2,0x77,0x21,0xe5,0x41,0xa4,0xe8,0x48,0xa5,0xd3, - 0x29,0x19,0x1e,0xd4,0x44,0xca,0x08,0x89,0x0c,0x75,0xd1,0x63,0xfd,0xb9,0x90,0xac, - 0x7a,0xe6,0xc6,0x5f,0xa5,0xf9,0x79,0xd7,0x6c,0x4d,0xed,0x32,0xf2,0x10,0xca,0xe7, - 0x7a,0xc8,0x86,0x8d,0xdf,0x26,0x9c,0x32,0xbc,0x8b,0x01,0x2b,0x63,0x69,0x46,0x74, - 0x3d,0xf2,0x26,0xb3,0x1e,0xac,0x85,0x97,0x95,0xa1,0x67,0x01,0x7f,0x4d,0xe5,0x33, - 0x65,0xfb,0x81,0xde,0xbe,0x7c,0xf7,0x5c,0xb7,0x32,0xb2,0xa8,0xeb,0x7c,0x0d,0xcc, - 0x4a,0x57,0x89,0xe8,0x2e,0xf9,0x7c,0x64,0xa0,0x19,0x99,0xc1,0xfe,0xf2,0xa1,0x16, - 0x53,0xdb,0xe2,0x96,0xcb,0x98,0xaa,0x6c,0xf0,0x3e,0x49,0x34,0x05,0xfd,0x59,0x5e, - 0xa8,0xe1,0x48,0xf3,0x24,0x91,0x2b,0xc1,0xcf,0x1e,0x69,0x06,0x63,0x85,0x71,0x4a, - 0x2d,0xdf,0x5c,0x90,0x64,0xeb,0x49,0x07,0x71,0x7b,0x95,0xae,0xe4,0x52,0x0b,0xaa, - 0xf0,0xc7,0x74,0xb6,0x96,0x42,0xcc,0x49,0x00,0xf1,0x93,0xa4,0xa5,0xac,0x87,0xc0, - 0x0e,0x59,0x7c,0x28,0xc6,0x97,0xbc,0x96,0xe5,0x29,0xf8,0x49,0x94,0x01,0xda,0xb7, - 0xf2,0x4e,0x6f,0x0d,0x21,0x3b,0x52,0x64,0x7a,0x94,0xeb,0xcf,0xe3,0x38,0x48,0xce, - 0xcd,0xf3,0x35,0x49,0x9a,0x66,0x32,0x91,0x36,0x64,0xac,0x31,0xb5,0x08,0x66,0x8d, - 0x33,0x3d,0xbb,0x16,0xa3,0xf2,0x18,0xb3,0x3a,0x95,0x62,0xaa,0x24,0xd9,0x9d,0x3d, - 0x4b,0x1b,0x67,0x73,0x28,0x2a,0x36,0xa1,0x61,0x08,0x9b,0xaf,0x99,0x0c,0x39,0x58, - 0xe3,0x98,0xc3,0x79,0x4a,0xe9,0x75,0x42,0x5c,0x8b,0xf3,0x6d,0xf1,0x7c,0xc3,0x13, - 0xd3,0x48,0x64,0xb2,0x06,0xbf,0xc0,0x99,0x40,0x81,0x89,0x21,0x90,0xa5,0xcc,0x8e, - 0xf8,0xdc,0x16,0x77,0x1a,0x67,0xbd,0xfe,0x0d,0xf9,0x96,0x29,0x77,0x96,0x28,0xc0, - 0x5e,0x8c,0xb1,0xaf,0xcb,0x9d,0x26,0xdc,0x16,0x22,0x1b,0x67,0xdf,0xe7,0x69,0x46, - 0xa5,0x98,0x00,0x09,0xd6,0x99,0x9f,0x4d,0x17,0xc8,0x98,0xce,0xc4,0x22,0x0d,0x97, - 0x54,0xfe,0xc9,0x71,0x5d,0x57,0x84,0xe8,0xee,0x5f,0xa3,0x8c,0xef,0x66,0x01,0x8c, - 0x95,0x51,0x15,0xce,0xe8,0x61,0xa6,0x72,0x0e,0x95,0xda,0x90,0xe0,0x58,0x16,0xd2, - 0xaf,0x05,0x3a,0x86,0xa8,0x4c,0x8c,0xbd,0xd2,0xce,0x83,0xfa,0x24,0x85,0xc6,0x58, - 0x9a,0x8e,0xdc,0xa9,0xf1,0x22,0x64,0xad,0xf2,0x48,0xaa,0x36,0xd7,0x9f,0xa8,0xd3, - 0x41,0x06,0x93,0x39,0x9f,0xe5,0xea,0x33,0x1f,0x8c,0xb1,0x62,0x4b,0xda,0xb3,0xca, - 0x23,0xec,0x1c,0x12,0x90,0x58,0x41,0x27,0x7d,0xe1,0x92,0xd6,0x25,0x21,0x47,0xb9, - 0xc5,0x34,0x4f,0x17,0xa2,0x1b,0x64,0x51,0xd7,0x3c,0xe6,0x60,0x96,0xfe,0x29,0xb8, - 0x68,0x57,0x87,0x05,0x49,0x91,0x47,0x63,0x2a,0xe9,0x91,0x74,0x93,0x0e,0x91,0xa4, - 0xe3,0x9b,0xc5,0x93,0x4f,0xae,0x03,0xad,0x8e,0xba,0x3f,0x2f,0xd7,0xcd,0x79,0xfa, - 0x01,0x09,0xb8,0xea,0x3c,0xb4,0xd0,0xc8,0x33,0x15,0x11,0x3c,0x13,0x64,0x9c,0xdc, - 0x15,0xed,0x43,0x1b,0xf4,0xf1,0x32,0x8a,0x43,0xdd,0x6e,0x4c,0x85,0x42,0x3d,0x00, - 0x6a,0x47,0x47,0x6d,0x19,0x6d,0xd3,0xec,0xc0,0x42,0x82,0x09,0x0e,0x49,0x6a,0x49, - 0xdd,0x3a,0xb4,0x59,0x43,0x86,0x29,0x58,0xd4,0xa5,0x96,0xe2,0xb6,0xed,0x7c,0x06, - 0xf8,0xee,0x4a,0xea,0x16,0xe2,0x0e,0xc8,0x98,0x05,0xe3,0x28,0x8e,0x8a,0xcb,0x8e, - 0x05,0x35,0x03,0xe1,0x43,0xdb,0x5e,0x78,0x09,0x86,0xcd,0x72,0xda,0x60,0x1b,0x38, - 0x15,0xfc,0x74,0x64,0xa8,0xe5,0x81,0x37,0xc6,0xdb,0x24,0xdf,0x6a,0x5b,0x9f,0xdb, - 0xd5,0xa1,0xbc,0x70,0xfc,0xa0,0x75,0x79,0x25,0x59,0xf8,0x18,0x3e,0x8c,0xd8,0x6e, - 0x68,0xe7,0x18,0x8c,0x53,0x2c,0xc0,0x67,0xb9,0xa1,0xee,0x85,0x24,0x4b,0x08,0x2a, - 0x5b,0x68,0xf3,0xe0,0x42,0x3b,0x61,0x4d,0x27,0xea,0x97,0x8e,0x4b,0xd3,0xb2,0x5d, - 0xe7,0x58,0xe3,0x69,0xed,0x1f,0x22,0x76,0x18,0xba,0xac,0x61,0x0e,0x07,0xd7,0x14, - 0xb1,0x1c,0xfb,0x86,0x14,0xb9,0x2a,0x81,0x94,0x62,0xb9,0x43,0xad,0xdf,0xca,0x62, - 0x99,0x7d,0x96,0x4e,0xeb,0xa8,0xf3,0x16,0x7d,0x3e,0xbc,0x8b,0x3e,0x9b,0x00,0xf7, - 0x56,0x2d,0x7e,0x23,0x17,0x72,0x31,0xa6,0xb6,0x49,0x12,0xc2,0x20,0x86,0x30,0x16, - 0x64,0x67,0x55,0xa9,0xa6,0xce,0x93,0x3c,0xbf,0xa5,0xf4,0x7c,0x1b,0x07,0x43,0x2c, - 0xb2,0x24,0x7f,0x88,0x03,0xc8,0xd2,0xab,0x2d,0x8a,0x7b,0xc3,0x46,0xcf,0x29,0x5b, - 0xbf,0x75,0xa7,0x47,0x77,0xd9,0xa9,0x49,0xfc,0x6f,0xdd,0xa9,0x8e,0x0f,0xa9,0x71, - 0x9f,0x0c,0x82,0x90,0xc9,0x24,0xa5,0x0e,0xdc,0x49,0xba,0x84,0x57,0xd5,0xe1,0x12, - 0x19,0x78,0xf8,0x43,0x8c,0x08,0x67,0xb0,0x2b,0x8b,0xe0,0x5c,0x92,0x38,0x53,0xd3, - 0x48,0x49,0x0e,0xd2,0x1b,0xdd,0x8f,0x9b,0x17,0x4a,0x3b,0xd8,0x30,0x9a,0x4e,0x65, - 0xee,0x8b,0x9f,0x2a,0x47,0x97,0x4b,0xd6,0xd3,0x9b,0xad,0xd9,0x0e,0xb1,0xf9,0xde, - 0x2d,0xbd,0xde,0x4d,0x6e,0x8c,0x53,0xbc,0x8d,0x9e,0xc7,0x77,0xa1,0xa7,0x0d,0xc7, - 0x85,0xf5,0x95,0x77,0xf3,0x04,0x81,0x76,0xfc,0x5b,0xa4,0x66,0x8a,0xf1,0x73,0xee, - 0xc2,0x50,0x88,0x11,0x75,0x04,0x41,0xb7,0x7f,0x7c,0xf2,0x13,0x53,0x1d,0xb4,0x42, - 0x98,0x8d,0xf8,0xce,0xba,0x41,0xbe,0xca,0x02,0xcc,0x51,0x23,0xf8,0x43,0x5d,0x89, - 0x32,0xfc,0x3c,0x11,0xd3,0xa6,0xfa,0x56,0x9a,0x9c,0xdc,0x85,0x26,0x6f,0x19,0xd6, - 0x1d,0x48,0xf1,0x82,0xba,0x90,0xe9,0x39,0x0c,0x98,0xbb,0x05,0x67,0x67,0xb0,0x97, - 0x3a,0x05,0xd6,0xb1,0x90,0xd6,0xae,0x92,0x4c,0xab,0xb9,0x09,0xe7,0x0c,0xad,0xa8, - 0xcd,0x69,0x52,0x2c,0x61,0xbf,0x60,0x5f,0x53,0x4a,0x59,0x6e,0x94,0xa0,0x2d,0x91, - 0xa2,0x4e,0x59,0xce,0xaa,0xb0,0x46,0xef,0xb3,0x16,0xf2,0x04,0xb7,0x04,0x59,0xb7, - 0x46,0x57,0xeb,0x13,0x08,0xb3,0xd3,0xae,0x59,0x7a,0xef,0xb4,0x4b,0xc7,0x12,0x40, - 0xe7,0xd4,0x3e,0x40,0x3f,0x5d,0x26,0xdc,0x52,0x2a,0xfe,0xa5,0x19,0xb5,0xae,0x72, - 0xd8,0x45,0x84,0x1a,0x61,0x3a,0x59,0xd2,0x73,0x39,0x3e,0x56,0x7a,0x1e,0x4b,0xfa, - 0xf8,0xf4,0xf2,0x65,0x88,0x11,0xd7,0x7b,0xff,0xd2,0xf4,0x08,0x6f,0xaf,0xe5,0x53, - 0x48,0xf6,0xcc,0x3c,0x69,0x8f,0xe0,0x9e,0x8f,0xc8,0x7c,0xba,0x47,0x0e,0x67,0xb8, - 0xb7,0xd7,0xed,0xda,0xce,0x8e,0x5f,0x35,0x2d,0x29,0x54,0x65,0x1f,0x59,0x12,0x92, - 0x7c,0xec,0xff,0xdf,0x07,0x8d,0x80,0x44,0xad,0xaf,0x84,0xc4,0x76,0x77,0x70,0xe1, - 0x6f,0x8d,0x61,0x64,0x19,0xc2,0x10,0x38,0x13,0xc5,0x80,0xf0,0xf4,0xb2,0x01,0xba, - 0x1d,0xe5,0x3c,0x59,0x91,0x8f,0xdd,0x1e,0x8b,0x98,0x63,0xb6,0x62,0xde,0xd6,0x0f, - 0xfa,0x70,0x08,0x44,0xc0,0x38,0xd9,0xad,0xb2,0x52,0x69,0x91,0x55,0x3a,0x6a,0x10, - 0x86,0x64,0x85,0x0e,0x74,0xc8,0xa6,0xf9,0xe2,0xc9,0xd6,0x48,0x83,0xa0,0xd9,0x60, - 0xc3,0xa6,0x98,0x37,0x06,0x34,0xdb,0x22,0x19,0x1d,0xa5,0x10,0x28,0x1b,0x9c,0xb0, - 0x4e,0x54,0xd9,0x21,0x19,0x69,0xdd,0x39,0x54,0xc5,0x2a,0x9c,0xdf,0x96,0xd1,0x82, - 0x6d,0xdf,0x0b,0xf2,0x73,0x20,0x42,0xa0,0x74,0xf8,0x18,0xea,0x4c,0x9a,0xb1,0x29, - 0x03,0x18,0x9d,0xf2,0x8f,0x15,0x44,0xc8,0xa6,0xf2,0x0b,0x19,0x24,0x45,0x2d,0x54, - 0x81,0x38,0x41,0xdd,0x08,0x52,0xc9,0x13,0xbd,0x3d,0xca,0x84,0xcc,0x25,0x4f,0xf3, - 0x8f,0xb6,0x52,0x6c,0x06,0x1c,0x98,0x4b,0xd3,0xdf,0x48,0x87,0x96,0x50,0x80,0x80, - 0x9e,0x88,0x83,0xe8,0xeb,0x0d,0x18,0xa6,0x35,0x29,0x96,0x02,0x8a,0x09,0x31,0x1d, - 0xd4,0x5b,0x91,0xf2,0x07,0x05,0x87,0x8c,0xad,0x36,0xe1,0x9f,0x10,0x2c,0x27,0xa9, - 0xcf,0x65,0xb2,0x24,0x47,0xad,0xec,0xe3,0x1d,0x1c,0x27,0x69,0xd2,0xea,0xe4,0xae, - 0xd7,0x6f,0x8b,0xde,0x01,0x7e,0x0e,0xfd,0x4a,0xe1,0x68,0x9d,0xa6,0xe2,0x63,0xd0, - 0x0b,0xea,0xca,0x6b,0xc3,0x76,0x8c,0x9a,0xea,0xfe,0x7d,0xe5,0x57,0x82,0xd3,0xfa, - 0xf4,0xe9,0xfd,0x87,0xa1,0x19,0x32,0x1d,0x41,0xf9,0x6c,0xb4,0xe3,0xb5,0xda,0xd3, - 0x73,0x7b,0x81,0x42,0x25,0x8f,0x3b,0x42,0xa2,0x69,0x73,0x6a,0x8e,0x56,0xa7,0x3e, - 0x9d,0xe8,0xe6,0xff,0xfd,0xdd,0xab,0x1f,0x47,0x9e,0x67,0x1f,0x21,0xcd,0x9b,0xd1, - 0xa8,0x37,0x8c,0xc8,0x75,0xf9,0xb1,0x4c,0x66,0xc5,0x7c,0x18,0xed,0xef,0x97,0xa7, - 0xb1,0xb4,0x8e,0x1c,0xe1,0xe6,0xfb,0xe8,0xc3,0x10,0xc0,0xbe,0x91,0x9f,0x3e,0x49, - 0x33,0xf0,0xf4,0xa0,0x45,0xb1,0x74,0x94,0x2c,0xcb,0x46,0x03,0x1a,0x1e,0x8c,0x4a, - 0x7b,0x31,0xc1,0x7e,0x0b,0x69,0x4c,0x46,0xd3,0x0b,0xbc,0xb2,0x4b,0x25,0xf0,0xd9, - 0x22,0xff,0x44,0x6f,0xea,0xf0,0xb4,0x55,0xf6,0x86,0x81,0xcf,0xd6,0x4e,0xbe,0xef, - 0x7d,0xa8,0xc6,0x39,0x48,0xef,0xf2,0x0c,0x3d,0x63,0x33,0xbd,0xfd,0x32,0x9f,0xf7, - 0xb6,0xbb,0x07,0x53,0x92,0xda,0xea,0x11,0xf4,0x3d,0xaf,0x5a,0xf9,0x2f,0x4b,0xf0, - 0xf4,0x2d,0xa4,0x75,0x02,0xbf,0xd0,0xf4,0xca,0x96,0x93,0x35,0x5b,0x27,0xdf,0xf7, - 0x3f,0xdc,0x3a,0x29,0xdc,0x98,0x74,0xf0,0xe1,0xd3,0x27,0xaf,0x5c,0x6d,0xea,0x53, - 0xeb,0x7c,0x12,0x3e,0xa3,0x27,0x26,0x9a,0x81,0xa1,0xd3,0xb5,0x61,0x9c,0x0e,0x64, - 0x47,0xd3,0x73,0xfb,0xe9,0x9b,0xe9,0x8e,0x85,0x34,0x85,0xaf,0x8d,0x84,0x30,0x81, - 0x54,0xc5,0x8f,0xda,0x9c,0x27,0x71,0x8c,0x69,0xac,0xb6,0x65,0x87,0x81,0x9e,0x5e, - 0x49,0x85,0x06,0xe0,0x0a,0x06,0x63,0xa4,0x2f,0x43,0x24,0x6a,0x7b,0x6a,0x46,0xfb, - 0xfd,0xd3,0x7e,0xef,0xb1,0xd7,0xf3,0x06,0x9e,0xd7,0xda,0xa7,0xef,0x80,0x77,0xbd, - 0x57,0xae,0x1f,0x84,0xe1,0x73,0x6a,0x29,0xfa,0x11,0x1a,0x41,0xfe,0xa9,0x49,0xac, - 0xd7,0x8a,0xe6,0xb5,0xad,0x26,0x34,0x65,0xeb,0x8a,0x95,0x41,0xfa,0xa1,0x2c,0x82, - 0x28,0x6e,0x5d,0x03,0x0a,0x64,0x6f,0x85,0xe8,0x15,0x36,0x29,0x9b,0x6a,0x27,0x6f, - 0x46,0xad,0x5f,0xbd,0x76,0x3d,0x8d,0xfb,0x0c,0xfc,0x3f,0xc9,0xb3,0xae,0x95,0x23, - 0xfa,0x99,0xda,0x2e,0xb4,0x95,0xf9,0xd7,0xb7,0x3f,0xff,0xd4,0x16,0xff,0xde,0xf7, - 0x1f,0x88,0x1f,0x9e,0x1a,0x03,0x74,0x28,0x74,0x81,0xd2,0x31,0x2d,0xa9,0x35,0x98, - 0xd8,0xce,0x24,0x5d,0xc0,0xf2,0x51,0xbe,0x95,0x4e,0x09,0x1a,0x3d,0x21,0xfa,0xae, - 0x8a,0x4f,0xec,0x53,0xfc,0xb0,0x7c,0xfa,0x41,0xfe,0x01,0x55,0x2d,0x29,0xe8,0xe1, - 0xd3,0xf4,0x08,0xb6,0x12,0xe2,0xa6,0xf3,0x33,0xf9,0x91,0xf8,0x11,0xb2,0xf5,0x36, - 0x8e,0x28,0x84,0x61,0x27,0xab,0x0a,0xdb,0x4c,0xa6,0x47,0x3b,0x23,0x58,0x36,0x0a, - 0xc4,0x63,0x44,0x17,0x8c,0x99,0x92,0xda,0x9d,0xd0,0xf1,0x29,0x19,0x7a,0xb2,0xd1, - 0x7f,0xb6,0xd5,0x8e,0x3f,0x53,0xcc,0xe2,0xcf,0x1d,0x0b,0x17,0x2e,0x73,0xc7,0xc0, - 0x85,0xa3,0x57,0x70,0x80,0x3e,0x22,0x13,0x48,0x9b,0xea,0x3e,0x3c,0x39,0xea,0xf5, - 0x5a,0xed,0x79,0xed,0xea,0xb7,0x7c,0xb5,0x7b,0x78,0x42,0xb7,0x16,0xf5,0x5b,0x74, - 0xb1,0x7b,0xd2,0xb3,0x56,0x2e,0x6c,0xd9,0x60,0x65,0xdf,0x0b,0x85,0xb7,0x3f,0xdf, - 0xf7,0xe6,0x1e,0x59,0xac,0xb9,0xbd,0x41,0x57,0x70,0x63,0xb1,0xef,0x2d,0x3c,0x33, - 0x69,0x61,0xef,0xe9,0x8b,0xe6,0x8b,0xda,0xf7,0x94,0x47,0x72,0x4b,0x3c,0xca,0x08, - 0xf5,0xa0,0x7c,0x6d,0xc2,0x64,0x1e,0x65,0x4a,0x7b,0x0c,0xeb,0xe1,0xb4,0xe2,0xbe, - 0x35,0x3e,0x3e,0x92,0x31,0x52,0x2c,0xf1,0x23,0xb9,0x75,0x45,0xb3,0x2e,0x1d,0x4f, - 0xd5,0x09,0x66,0x49,0x4a,0x0d,0x25,0xda,0x35,0xc0,0x9b,0x3b,0x6e,0x8d,0x5d,0x31, - 0xc5,0x4a,0xca,0xa9,0x2f,0x37,0xdf,0x1c,0xb7,0x1c,0x12,0x66,0xd4,0xa7,0xf4,0x5a, - 0xe6,0x53,0x87,0x90,0x08,0xf8,0x60,0xf6,0xcd,0xb9,0x3f,0x14,0x98,0xad,0x74,0x6c, - 0x76,0x66,0x7d,0x45,0x31,0xd2,0x7e,0x03,0x37,0x95,0x4f,0x55,0x84,0x37,0x69,0x2c, - 0x47,0x23,0xd8,0xde,0xe5,0x18,0xfe,0x09,0xbe,0xdc,0x6b,0x15,0x7e,0xb6,0x54,0xf3, - 0xa6,0xf7,0x7a,0x39,0xd6,0x76,0x80,0xca,0xd3,0x9b,0x33,0xd4,0x72,0x4c,0xd1,0xe2, - 0xd8,0x9d,0xf2,0xd6,0x4e,0xc1,0x68,0x3a,0x56,0xa3,0x58,0xc2,0x57,0x12,0xf6,0x26, - 0x99,0xc8,0x57,0x48,0xdf,0x68,0x22,0x92,0x87,0x18,0xde,0xdc,0xd3,0x36,0xc4,0x4c, - 0xad,0x0f,0x7b,0xec,0xbd,0x8e,0x83,0x4b,0x72,0x98,0x30,0x21,0x4f,0xb9,0x37,0xbc, - 0x82,0x6b,0xcc,0x50,0xeb,0x4a,0xc6,0xa5,0x45,0x0c,0x80,0xe2,0x10,0xdf,0x5d,0x3b, - 0x54,0xf8,0x94,0xfe,0x36,0x3d,0xf1,0x7f,0xff,0x8f,0xd0,0x6f,0xb8,0xa1,0x8d,0x38, - 0xb3,0x8a,0x7c,0xb9,0x31,0xc9,0xf3,0xae,0xc1,0xf1,0x92,0xd0,0xd4,0xf4,0xd3,0x64, - 0x12,0x93,0x6c,0x59,0xfb,0xa5,0xe7,0x3b,0xa4,0x9d,0x4a,0xc4,0x0c,0x4d,0xcf,0x89, - 0xf2,0xbc,0xf6,0xd5,0x04,0x59,0xab,0x1c,0x80,0x23,0x1d,0x4a,0x28,0xa4,0x77,0x0d, - 0xd3,0x8f,0x30,0xa1,0x59,0x1a,0xb8,0xbc,0x8c,0xac,0x73,0xff,0x37,0x85,0x0b,0xad, - 0x8d,0x21,0xca,0x78,0x60,0xa6,0x3e,0x04,0x83,0x1f,0x18,0xbd,0x22,0x4e,0x66,0x17, - 0xa3,0x5d,0xf1,0x38,0xac,0xe9,0x9f,0x88,0x2b,0x24,0x02,0xd9,0x45,0x2b,0xbb,0xa8, - 0xef,0xf0,0xc2,0xdb,0x2f,0x61,0x69,0xcf,0x02,0xc9,0x7c,0x07,0x97,0x2b,0xcd,0x13, - 0xf3,0x6d,0x1b,0xad,0x71,0xb7,0xa0,0x9b,0xed,0x20,0xc8,0x4a,0xe3,0x0b,0x1d,0xfd, - 0x2e,0x10,0x72,0x72,0x37,0x06,0x19,0x9f,0x1c,0x49,0x87,0xb2,0xb0,0x32,0x3a,0x46, - 0x08,0x07,0xfc,0xc8,0x3e,0xee,0x93,0xc5,0x72,0xb2,0x25,0x3d,0x67,0x65,0x03,0xea, - 0x32,0xc8,0xa6,0x9b,0x9c,0x41,0x51,0x7c,0x89,0xd4,0xd3,0x42,0xb3,0x59,0x99,0x0d, - 0x85,0xa7,0x65,0xc6,0x26,0xa0,0x5b,0x74,0x14,0x93,0x2e,0x11,0xf6,0x8e,0x29,0xf3, - 0xd7,0x11,0x97,0xd6,0xcb,0xb1,0x9c,0x92,0x52,0x45,0x08,0xea,0xb1,0x6d,0x0b,0x2d, - 0x44,0x00,0xea,0x1c,0xaf,0xf8,0x15,0x75,0x19,0xaf,0x32,0xe0,0xd1,0xaa,0xb4,0xe6, - 0xad,0x3d,0xbd,0xe1,0xd2,0x5b,0xeb,0x41,0x8a,0x84,0xbe,0x36,0x4e,0xf9,0xfa,0x59, - 0xb0,0xc7,0x4d,0xfb,0x69,0xdf,0x23,0xda,0x2d,0xd9,0x54,0x27,0x58,0xf8,0x1c,0xf2, - 0x3c,0xf0,0xf4,0x71,0x57,0x3a,0x9d,0x1a,0x88,0xd7,0x95,0xa6,0x99,0xb6,0xbc,0xd7, - 0x4c,0xca,0x12,0x2b,0x6c,0xe0,0x57,0x44,0x06,0xb2,0x4e,0x35,0x4a,0xf2,0x4c,0x89, - 0x43,0xd7,0x84,0xf9,0x78,0x21,0x26,0xd5,0x04,0x95,0x90,0x4f,0x69,0x86,0x88,0x66, - 0x75,0x9a,0x40,0x09,0x8b,0x69,0xfc,0x1b,0xa7,0x39,0x3b,0x7f,0x90,0x5c,0xbc,0x79, - 0xf2,0xaa,0xa5,0x4d,0x3a,0xec,0x3e,0x3d,0xb6,0x53,0xf5,0xf6,0x51,0xe5,0x51,0x3f, - 0xe4,0x4c,0x55,0x96,0x0e,0x48,0x1f,0x81,0x7f,0x15,0x38,0x87,0x2d,0x26,0x29,0x91, - 0x76,0x5d,0x72,0x14,0xfe,0x8d,0x74,0xd5,0xdb,0xbc,0x95,0xae,0x9e,0xa5,0x21,0xe7, - 0x0c,0x74,0xe6,0x36,0x89,0x53,0x25,0xdd,0x87,0xa7,0x5d,0x4a,0xde,0xc8,0x4b,0xcb, - 0x19,0x44,0x5f,0xd8,0xf0,0xad,0x4b,0x83,0x25,0xbc,0xc3,0x5f,0xd4,0x63,0x76,0x3f, - 0x9c,0xed,0x34,0xfb,0xf2,0xa4,0x5b,0xde,0x68,0x81,0xc9,0x53,0x78,0x05,0x32,0x37, - 0x1c,0xf8,0x94,0x51,0x68,0x29,0x06,0x2f,0xd5,0x2b,0x2e,0xb7,0x3f,0xf6,0x74,0xd9, - 0x1d,0xe3,0x74,0xee,0x11,0x25,0x5e,0x2d,0xd6,0x73,0x0d,0xfc,0xd0,0xb9,0x92,0xae, - 0x10,0x2d,0x59,0x59,0x75,0x6e,0x54,0xcd,0x47,0xb8,0x5b,0xb5,0x02,0x99,0x21,0xd8, - 0x14,0x77,0x06,0x6c,0x90,0xc0,0x3a,0x69,0x60,0x2e,0x9a,0x64,0x16,0xe8,0xc9,0x74, - 0xa4,0x7d,0xf8,0x6e,0xf1,0x12,0xfb,0x82,0x6e,0x68,0x7c,0xe9,0x86,0xf9,0xd4,0x32, - 0x24,0x63,0x69,0x9d,0x62,0x5f,0x4b,0x7a,0x61,0x87,0xab,0x3f,0x74,0xe8,0xbf,0xb6, - 0xa2,0x43,0x3a,0x9e,0xf5,0x2e,0x2d,0xe8,0x9d,0x7b,0xf8,0xf4,0x0b,0x89,0x79,0xb7, - 0xdf,0x3b,0x7a,0x78,0xfc,0xe0,0xe4,0xbb,0x7e,0x8f,0x3e,0x63,0xb1,0x57,0x4f,0x21, - 0x4d,0x52,0xba,0xec,0x31,0xbd,0x04,0x80,0xcc,0x3d,0x96,0xbe,0x7e,0xb7,0x5d,0x05, - 0xee,0xb1,0x05,0xd7,0x2d,0x2f,0x01,0x5e,0x6f,0xd0,0x03,0x7f,0xbe,0xad,0x89,0xc7, - 0x76,0x1c,0x3d,0xaa,0x03,0x2c,0xf4,0x76,0xbc,0xeb,0x8a,0x7e,0x54,0xea,0xdd,0x20, - 0x20,0x5d,0x24,0x2d,0x57,0x2a,0x42,0xc0,0xc1,0xac,0x07,0xb1,0x72,0x7c,0xc5,0xb7, - 0xf0,0xe9,0x82,0xb4,0x1c,0xfa,0x4d,0xf9,0xbc,0xe7,0xf0,0x22,0xca,0xb6,0x43,0x52, - 0x7e,0x94,0x0d,0x1c,0x79,0xe4,0xc1,0xd4,0x12,0xb0,0x9b,0x8e,0xca,0xa7,0xfb,0xfc, - 0x1e,0x34,0xc4,0x27,0xa0,0xda,0xc1,0x11,0x36,0xfa,0x03,0xb3,0xcd,0x10,0x6d,0x63, - 0xf4,0x6b,0x05,0x89,0xb5,0xc4,0xc6,0xe8,0x57,0x22,0xa3,0x2b,0xee,0xa2,0xcb,0xf5, - 0x25,0x39,0x6a,0xf3,0x97,0xdc,0x5c,0xe0,0x8a,0xd5,0x74,0x43,0x99,0x5d,0xff,0x32, - 0xdc,0xb3,0x86,0xd7,0x9c,0xcf,0xda,0xe0,0x54,0x9f,0x49,0xeb,0x8a,0x05,0x8c,0x8d, - 0xd2,0x85,0x35,0x18,0xeb,0x48,0xa7,0xf1,0xce,0x43,0x7b,0x64,0xab,0xb9,0x42,0xd3, - 0xb6,0xb0,0xca,0x93,0x6a,0xf6,0x07,0x26,0x44,0x7a,0x09,0xb3,0x9a,0x98,0xe3,0xf7, - 0x45,0x04,0x0e,0x24,0xb3,0xcd,0x03,0xeb,0x48,0x1f,0x4b,0xa4,0xe7,0x52,0x0d,0x2d, - 0xb4,0xea,0x74,0xdd,0x62,0x12,0x71,0x01,0x40,0x17,0x00,0xe9,0x3c,0x5e,0x19,0x97, - 0xc4,0x67,0xb5,0x14,0x75,0x6b,0x6b,0xc6,0x51,0x57,0x08,0xde,0x5d,0x50,0x3b,0x5e, - 0x52,0x50,0x8e,0x6e,0x3e,0x7e,0x83,0x38,0x87,0x62,0x3a,0xef,0x71,0x79,0x69,0xe0, - 0x55,0x1a,0xb3,0xae,0x28,0x72,0x23,0x2f,0x0c,0xf7,0x9b,0xe5,0xcc,0x3f,0x69,0x5a, - 0x3e,0xf6,0x58,0xb8,0xea,0x17,0xc9,0xd0,0x0c,0xeb,0xa0,0x3a,0x5b,0x0c,0xe7,0xbb, - 0xaa,0xbb,0x22,0x5f,0x26,0x9a,0x28,0xde,0xbe,0x24,0x99,0x95,0x96,0x31,0x6e,0xda, - 0xfc,0x2e,0xc8,0x38,0x0d,0xb0,0x5c,0xa9,0xce,0xe8,0x72,0xa2,0xc5,0x2c,0xe5,0x87, - 0xb4,0xcb,0x5e,0x82,0x22,0xe0,0xb7,0xde,0x95,0x05,0x31,0xdf,0x5b,0xc7,0x89,0xcf, - 0xf9,0x81,0x15,0x67,0xf6,0xde,0xad,0x07,0xfd,0xf7,0x80,0x1c,0xd7,0xfb,0x7f,0x79, - 0xf3,0xf2,0x59,0xba,0xc8,0xc0,0x8d,0xa4,0x68,0x96,0xcf,0xb9,0xad,0x9b,0xf7,0x2d, - 0x14,0xf4,0x9c,0x17,0x77,0x7a,0x77,0xa2,0xd0,0xb6,0x7d,0x88,0x9f,0x39,0x52,0xb0, - 0x68,0x31,0x1d,0x2e,0x6b,0x94,0x5a,0x95,0x45,0x4c,0x92,0x18,0x7e,0xd3,0x07,0x19, - 0x10,0x7e,0xa5,0x1a,0x88,0x08,0x0a,0x99,0xf4,0x08,0xf1,0xd2,0x4b,0xb8,0xd3,0x20, - 0x8e,0x75,0x0a,0xa7,0xa3,0x21,0x73,0x58,0xe1,0x42,0x24,0xa9,0xd3,0x2f,0x16,0x82, - 0x87,0xcb,0xad,0x53,0xd7,0x6a,0xa1,0x74,0x21,0x4b,0x7d,0x35,0x81,0x3d,0xd7,0xdb, - 0xb0,0x0d,0xe7,0x17,0x72,0xa8,0x96,0x3e,0x44,0x78,0xab,0xdf,0xc9,0x51,0x5d,0xd6, - 0xc3,0x11,0xd0,0x4e,0xce,0xf5,0xb3,0x9c,0x55,0x3c,0xda,0x2e,0x65,0x52,0x17,0x1d, - 0x5a,0xfe,0x84,0x4a,0x68,0x55,0x10,0xdb,0xba,0xda,0xe9,0xd0,0x27,0x41,0x42,0xd4, - 0xca,0xf9,0x84,0xc7,0xb4,0x44,0x0c,0x39,0xbc,0xdd,0x48,0x66,0x10,0x9b,0x65,0xb5, - 0xc8,0x3d,0x5b,0x0f,0xdc,0xaf,0xb9,0xca,0xe0,0xa4,0xfd,0xff,0x8c,0xef,0xb8,0x32, - 0x49,0xff,0xbb,0xf2,0x3d,0x32,0x5a,0x0c,0xfe,0xf4,0xf2,0xf9,0xaf,0x14,0x66,0x55, - 0xc1,0xb6,0xa7,0x74,0x38,0xae,0x7b,0x46,0xac,0xf5,0xc1,0xce,0x8b,0xf9,0x40,0xfc, - 0xd0,0x37,0x45,0x00,0x5d,0x49,0xe5,0xe0,0x9a,0xab,0x9f,0x89,0x78,0xf5,0xc7,0x77, - 0xef,0x10,0x34,0x2b,0x45,0xd1,0xe1,0x64,0x4e,0x67,0xf5,0xe5,0x91,0xae,0x6e,0x62, - 0xaa,0x62,0x69,0xaa,0x2d,0xf0,0x1b,0x00,0x23,0x6d,0x80,0x09,0x9a,0x16,0x3d,0x96, - 0x68,0x7a,0x98,0x43,0x15,0x65,0x85,0x96,0x4e,0x38,0x6c,0xd1,0xf4,0x9d,0x79,0x9c, - 0x5a,0x7e,0x9c,0xc8,0x4c,0x9b,0x56,0x6d,0x55,0x16,0x29,0xe5,0x21,0x22,0x98,0xf2, - 0xa3,0x30,0x5a,0xbc,0x7d,0xf1,0xfa,0xe7,0xb7,0xef,0x4c,0x11,0x5c,0xa7,0x0c,0x09, - 0xc2,0x52,0x58,0x65,0xd8,0x65,0x82,0x46,0x13,0xab,0x07,0xcb,0x58,0x79,0x28,0x68, - 0x6c,0xb6,0x04,0xf1,0x3f,0xcd,0x17,0xfc,0x42,0x1c,0xb6,0xdf,0x54,0xac,0xe6,0x9e, - 0x7c,0xa5,0xcb,0x22,0xfa,0x88,0x9e,0xf6,0x10,0x63,0x57,0xfa,0x69,0x93,0x3d,0xf6, - 0x11,0xfc,0x10,0x51,0x59,0x70,0xa5,0xaa,0xbc,0xc6,0x30,0x8d,0x43,0xdd,0xaf,0xa9, - 0x1d,0x0d,0x67,0x0f,0x2a,0x21,0x5d,0xad,0x78,0xc2,0xd6,0xad,0x7c,0xe3,0x0f,0xd7, - 0xf7,0xf9,0x8d,0x06,0x3e,0x6b,0x60,0x2c,0x7f,0xe1,0x27,0x97,0xd5,0x32,0xe3,0x57, - 0xf9,0x48,0x73,0xae,0x38,0xe5,0x2e,0x8a,0x31,0x1c,0x92,0xd3,0x81,0x46,0x6f,0xfc, - 0x11,0x32,0x49,0x97,0xb3,0xb9,0x3d,0x8b,0x74,0x98,0xc6,0x07,0xfd,0x17,0xb2,0x3a, - 0xfb,0x58,0xd0,0xa1,0xb9,0xbf,0x47,0x3a,0xe0,0x2c,0x35,0xea,0x0d,0xd7,0xb3,0x7f, - 0x0e,0x05,0x75,0x36,0xd5,0x06,0xdc,0x89,0xb4,0x69,0xea,0x37,0xfc,0xed,0xfe,0xfd, - 0xef,0x21,0x3c,0xf4,0x16,0xb9,0x66,0xeb,0xd4,0x81,0xe4,0x64,0xad,0xd0,0x30,0x6a, - 0xc9,0x87,0x4e,0xba,0x45,0x58,0xea,0xb6,0xf7,0xf6,0x0d,0xe4,0xc7,0x1e,0x42,0x54, - 0x91,0x9a,0xe8,0x94,0x27,0xe8,0x14,0xe8,0xc6,0x39,0x34,0x41,0x3b,0x26,0x27,0x95, - 0xa6,0xea,0x50,0xb3,0x68,0x4f,0x62,0xc5,0xf6,0xc0,0xb4,0xdb,0xaf,0x19,0x84,0x82, - 0x8b,0xa1,0xb5,0xdb,0x6b,0xeb,0xf0,0xd5,0xfd,0x26,0xc0,0xb0,0x3f,0xc4,0x6f,0x5a, - 0xc9,0x59,0x07,0x7b,0x75,0x69,0xc3,0x54,0x71,0x29,0x59,0x91,0x65,0xbf,0x4f,0x4f, - 0x22,0xee,0x89,0x2d,0x04,0x25,0x03,0xc3,0x5b,0x66,0xac,0xed,0xbe,0x6c,0x3a,0xfb, - 0xfb,0xdf,0xfe,0x37,0xf6,0x87,0x2c,0xce,0x7c,0x6e,0x6d,0xd4,0x00,0x98,0x46,0xed, - 0x2b,0xea,0x36,0x4c,0xe9,0xc5,0xb0,0x10,0x7f,0xaf,0xbd,0x5e,0x10,0xb0,0xad,0x28, - 0xfa,0x59,0x1d,0x35,0xb8,0xf2,0x0c,0x19,0x3a,0xef,0x2e,0x33,0xca,0x0d,0x82,0x2c, - 0x83,0xfa,0xf0,0x09,0x5a,0xf7,0x63,0x67,0xb5,0x5a,0x75,0x48,0x17,0x3a,0xcb,0x3c, - 0xd6,0xce,0x11,0xf1,0xa9,0x85,0x41,0xdd,0x8c,0x08,0x35,0x93,0x91,0xc3,0x86,0x3e, - 0x40,0xf4,0x40,0x1b,0x5d,0x68,0xd9,0x2c,0x3e,0x90,0xac,0xe4,0x7e,0x7a,0xde,0x2a, - 0xe6,0x74,0x2a,0xd2,0x1b,0x6e,0x54,0x23,0xb6,0x4d,0x2c,0x23,0x97,0x1a,0x69,0xca, - 0x54,0xd6,0x1c,0x5b,0x5d,0x52,0x27,0xc8,0x98,0xc2,0x05,0xf3,0x30,0x07,0xe5,0xbc, - 0xa4,0xc5,0x9e,0x1b,0xb1,0x40,0x0f,0xb0,0x65,0xf2,0xb6,0x55,0xd2,0x68,0x4b,0x0d, - 0xce,0xab,0xf1,0xc0,0x0d,0xc5,0xe7,0x37,0xac,0xbe,0x14,0x82,0x46,0x5c,0x3d,0x63, - 0xbe,0xd9,0xcc,0x12,0x3c,0x7e,0x87,0xd8,0x34,0x5d,0x16,0x2e,0xae,0x75,0x1d,0xd2, - 0xe5,0x9c,0xeb,0x36,0x15,0x12,0x8d,0x03,0x34,0x7b,0xdc,0x70,0x59,0x15,0x54,0x57, - 0x07,0x9d,0x9d,0x6f,0xf5,0x5d,0x6d,0x4f,0xe6,0x79,0xb5,0x3f,0xbd,0x9e,0x5d,0x89, - 0xd4,0xa1,0xd2,0xb9,0xcd,0x22,0x38,0xdb,0x4a,0xa7,0x00,0xce,0xd8,0x6b,0xb1,0xe4, - 0x02,0x17,0x17,0xc0,0x6b,0x3a,0xf8,0x59,0x30,0x58,0xa6,0x09,0x84,0xe3,0x21,0x37, - 0x5e,0x73,0xf6,0xcf,0xe5,0x25,0x9f,0xf0,0x6b,0xd1,0x37,0xfc,0xa2,0xb6,0xde,0x71, - 0x74,0x2e,0x5d,0x9b,0x1d,0x8c,0x61,0x3a,0xc9,0x35,0xd6,0x5e,0xb3,0x46,0x60,0xcc, - 0x9b,0xd6,0xd8,0xb6,0x56,0xaf,0x76,0x34,0xd5,0xa2,0x2d,0xde,0xd0,0xba,0x40,0x69, - 0xde,0x4d,0x66,0x1c,0x21,0x1f,0x80,0x26,0x31,0x11,0xcb,0xbc,0xea,0x8d,0xa3,0x3e, - 0x2e,0xb9,0xff,0xb7,0xe7,0xc6,0xbf,0x99,0x07,0x12,0x1f,0x57,0x49,0xf8,0xc8,0xba, - 0x46,0xdd,0xcc,0xd5,0xb1,0xb5,0xf5,0x5c,0x72,0x5a,0x42,0x39,0x36,0x12,0x44,0x0c, - 0x6e,0xdb,0x46,0x4e,0xba,0xaa,0xf7,0xb8,0x0a,0x22,0x16,0xfc,0xb1,0x9c,0x53,0x77, - 0x66,0x54,0x98,0x9e,0xb4,0x30,0x0f,0x66,0x42,0x0b,0x20,0x81,0x62,0x4f,0x2a,0x96, - 0x99,0x3d,0x19,0xc0,0x0a,0x1d,0xf3,0xce,0x75,0x6d,0x12,0x73,0xc4,0x6a,0xda,0xa9, - 0x00,0xaf,0x27,0x5c,0x8b,0xd0,0x45,0xd3,0x36,0xbe,0xbf,0x4c,0x5e,0xf0,0xfa,0xd5, - 0x95,0x3f,0x12,0xbc,0x70,0xd4,0xe9,0xd3,0x97,0xb7,0x3b,0xdc,0x10,0x6e,0xbd,0x9e, - 0x14,0xcd,0x71,0x59,0xc5,0xe4,0x3c,0x93,0x1e,0xb2,0x3c,0x68,0xeb,0x8f,0x51,0xd2, - 0x44,0xe6,0xdd,0x76,0xf2,0xcf,0x31,0xa5,0xe2,0xdd,0x83,0xe3,0xe3,0x56,0xcb,0xb5, - 0xd9,0xeb,0x35,0x8c,0xb1,0xf5,0x65,0x25,0xb6,0x9f,0x3e,0x39,0xee,0xac,0x8e,0xd4, - 0xa7,0x4f,0xa6,0xd4,0x3c,0xa6,0xac,0x4b,0x33,0xd5,0x5b,0xab,0x7b,0x67,0xa3,0x12, - 0x5b,0xf2,0x2e,0xf8,0x02,0xed,0xd1,0x0f,0x6d,0x64,0xe6,0x42,0xe7,0x62,0xcd,0x17, - 0x65,0xba,0x5e,0xe0,0xa2,0xb9,0x5c,0x64,0xc0,0xb2,0xe9,0x60,0x67,0x69,0xf7,0xe9, - 0x53,0x49,0xb6,0xd3,0xde,0xb6,0xc5,0xf5,0xbd,0xa1,0x4b,0xdc,0xa1,0x4b,0x7b,0x0e, - 0x69,0xcd,0x84,0x8b,0x51,0x49,0xca,0xe3,0x8a,0x94,0xf4,0x3e,0x0e,0x87,0x94,0xd9, - 0x77,0xb8,0x80,0x24,0xbe,0x07,0x52,0xae,0xfb,0x9f,0x2d,0x42,0xe8,0xed,0x5f,0x6c, - 0x2b,0x49,0xef,0xb0,0x7e,0xb7,0x5a,0x38,0x3b,0x73,0x1a,0x25,0x14,0xb6,0xb8,0x73, - 0x37,0x24,0x6a,0xa8,0x49,0xa5,0xf7,0x7d,0x36,0xea,0xb5,0x4a,0x3a,0x96,0x36,0x51, - 0x33,0x64,0xd3,0x9c,0xf1,0x13,0x3a,0x35,0x73,0x56,0xd2,0x34,0xa3,0x7f,0x1a,0xe2, - 0x25,0xb2,0x42,0x0a,0x55,0x35,0x2f,0xdb,0xfd,0x1e,0xa7,0x0a,0x11,0xe2,0x85,0x9f, - 0x90,0x30,0xd4,0x63,0x9d,0xdd,0x3c,0xae,0x98,0x92,0x0d,0xd7,0x04,0x7e,0x3d,0x5a, - 0x28,0x51,0x07,0xe2,0xf8,0x69,0x6e,0x62,0xa6,0xf8,0x1c,0x86,0x37,0x64,0xf9,0x09, - 0xb7,0x5c,0xa7,0x8f,0xd1,0x40,0xe2,0xf9,0x75,0x1b,0x4e,0x73,0xfb,0x6d,0x4d,0xbc, - 0x9b,0x11,0xba,0xa6,0x35,0x54,0xbc,0x85,0x74,0xdc,0x83,0xc5,0x8f,0x34,0x7b,0x6d, - 0x24,0x69,0x57,0x14,0x31,0xd3,0xfb,0xc9,0x78,0xd1,0xd6,0x70,0xf7,0x1c,0x99,0x84, - 0x1e,0x21,0xb5,0x31,0x65,0xd7,0x4a,0x8b,0x94,0xaa,0xb7,0xc8,0x4e,0x68,0x21,0x7a, - 0x03,0x1f,0x9f,0xc4,0xee,0x18,0xb7,0xcc,0x18,0x38,0xd3,0xaf,0x59,0x77,0x46,0xe6, - 0x25,0x41,0x9c,0x64,0x8a,0x26,0xd7,0x29,0xcc,0x41,0x84,0x79,0x3d,0x50,0xdb,0x9c, - 0x8e,0x95,0x4f,0x1e,0x90,0x44,0x3a,0x6f,0x0a,0x62,0x03,0x87,0x04,0xf6,0x19,0x41, - 0x00,0x37,0x35,0x01,0x6d,0xba,0x52,0x35,0xce,0x97,0x8f,0xf4,0x96,0x79,0x31,0x60, - 0xe9,0xc3,0x2c,0x25,0x9e,0xfd,0xfc,0xe6,0xb9,0x6d,0xb6,0x57,0xbe,0xf8,0x99,0x5a, - 0x05,0x4d,0xc6,0x4e,0x90,0xd8,0x17,0x71,0xd1,0x59,0xf7,0x06,0x9b,0x92,0x0a,0x3d, - 0xad,0xc2,0x8f,0x97,0xf0,0x63,0x25,0x54,0x9e,0xf0,0x9c,0x16,0x67,0x9d,0x64,0x20, - 0xf7,0x3f,0x17,0x01,0x01,0x41,0x56,0xa3,0x52,0xd3,0x65,0xc4,0xdd,0x76,0x5c,0x59, - 0xa7,0x2e,0x1a,0xce,0x84,0xe6,0x26,0xd6,0xb9,0xac,0x97,0xf1,0x27,0xb4,0x6e,0xdb, - 0xbc,0xb9,0x98,0xc0,0x98,0x04,0x9c,0xce,0x80,0xa1,0x0d,0x91,0x62,0xba,0x60,0x77, - 0xd4,0x2c,0xa3,0xca,0x36,0xfe,0x80,0xff,0x4d,0x0d,0x51,0xac,0xd2,0xf2,0x19,0x02, - 0xaa,0x47,0x62,0x6f,0x6f,0x53,0xec,0x8a,0x00,0x05,0xc2,0x64,0xf0,0x3a,0xef,0xa3, - 0xe3,0x4a,0x05,0xa7,0x12,0xc9,0xc2,0x3c,0x92,0x40,0xfd,0x61,0x05,0x7e,0x28,0xa7, - 0x83,0x4d,0x80,0xb4,0x6a,0x47,0x1a,0xe5,0x94,0x95,0xb2,0x63,0x64,0xe6,0x29,0xe7, - 0x9c,0xc6,0xbc,0x0d,0xc1,0xbc,0x9f,0xb9,0xac,0xa3,0x71,0x29,0xa4,0xb2,0xa9,0x6e, - 0x49,0x41,0x33,0xd4,0x54,0xb6,0xda,0xb6,0xa8,0x60,0x8c,0x6d,0xc5,0xd7,0x4f,0x9f, - 0xbe,0xa9,0x8d,0x74,0xd4,0x1c,0xe3,0xca,0x62,0xdc,0x7a,0x29,0xce,0x19,0xe6,0xc8, - 0x88,0xb5,0xbb,0xc6,0x7c,0xee,0x2c,0x9c,0x30,0x9b,0xba,0x56,0x86,0x38,0x42,0xf6, - 0x76,0x1b,0xd4,0xbf,0x53,0xac,0xbd,0xa8,0x35,0xe0,0xd0,0x5b,0x0d,0x54,0x31,0x7a, - 0x5b,0x90,0x3c,0x36,0x17,0xb6,0xfe,0x42,0x29,0x53,0xcb,0x47,0x86,0x1b,0x07,0x13, - 0xd9,0xec,0xfe,0xcf,0x8b,0x6e,0xdb,0x09,0xb1,0xb1,0xb0,0x9e,0x77,0xff,0xbe,0xfe, - 0x0d,0x7a,0xd4,0xa9,0x57,0xbe,0x71,0x81,0x8c,0xa4,0x79,0xa6,0x62,0x4b,0x4d,0x57, - 0xcf,0xde,0xf7,0x38,0xe8,0x59,0x9a,0x0a,0x57,0xf5,0x24,0x8b,0xae,0x2b,0x62,0x5c, - 0x0d,0xf8,0xbe,0x57,0x55,0xaa,0x2c,0xfc,0xb2,0x72,0x6f,0xff,0xbd,0x15,0x8f,0xde, - 0x05,0x52,0x0e,0xbb,0x36,0xd1,0xf2,0xa6,0x53,0xea,0x7e,0x27,0x4c,0x2d,0x9d,0x5b, - 0x51,0x91,0x5b,0x24,0x29,0xa9,0xeb,0xdb,0xf2,0xc8,0xca,0x8a,0xfc,0x77,0xdd,0x8d, - 0x5a,0xd0,0xcd,0x2f,0x9d,0xa5,0xca,0x7d,0xcf,0xf7,0xc9,0x9b,0x7e,0x61,0x20,0xcc, - 0xb6,0x47,0x9f,0xf2,0xe8,0xe2,0x99,0x18,0x09,0xb8,0x78,0xbe,0x1c,0x19,0x77,0x88, - 0x4b,0xc6,0x24,0xd1,0x55,0x0e,0xda,0xc2,0xd7,0x5c,0x5f,0xc3,0x9d,0xab,0x6b,0x7d, - 0x99,0xde,0xa8,0xf4,0x86,0xcb,0x15,0x32,0xc4,0xe5,0xf7,0xc7,0xbd,0xb6,0xa8,0x7e, - 0x3e,0xc0,0x62,0x96,0xba,0x53,0xaf,0xd5,0x99,0x4a,0x9d,0xd0,0xfa,0x22,0x9a,0xdf, - 0xe8,0x0b,0xe2,0xd3,0x27,0xbd,0x6f,0xdb,0xbf,0x23,0x4e,0xc5,0x51,0x4b,0x38,0x87, - 0xd7,0x20,0x64,0x93,0xd1,0xc4,0x72,0xbd,0x21,0x7e,0x61,0x00,0x7e,0xed,0xef,0x6b, - 0x58,0x1a,0x5a,0x7d,0x6b,0x23,0x04,0xb5,0x2d,0x51,0x6f,0xfb,0xe2,0xc8,0x05,0x20, - 0xdc,0x18,0x85,0xd7,0x7d,0x1f,0x7d,0x10,0x5d,0xd1,0xb7,0x29,0x17,0x41,0xbb,0xc0, - 0x1a,0x20,0xf5,0x85,0x59,0x91,0xaf,0x9c,0x09,0x26,0x3f,0x5d,0xeb,0xf7,0x7a,0x15, - 0x4c,0x15,0xe3,0x0a,0x95,0x39,0xe3,0x8e,0x27,0xf6,0xb1,0x6e,0x05,0x46,0xc5,0x16, - 0x45,0x76,0x4d,0x3a,0x66,0x1e,0x89,0x0b,0x2b,0x4b,0x2e,0x2d,0x09,0x8b,0xf2,0xd6, - 0x35,0x77,0x47,0x5d,0xef,0xd5,0x63,0x3b,0xcd,0x8b,0x66,0x45,0x42,0xcb,0xb8,0x92, - 0x5c,0x94,0xb1,0x72,0xf7,0x74,0x2e,0x43,0x6c,0x90,0x2c,0xa6,0x31,0x7c,0x54,0xf0, - 0xe1,0xd7,0x14,0x76,0x74,0x30,0x3f,0xe4,0x2c,0xc2,0x46,0xf3,0xf0,0x63,0xcc,0x6e, - 0x13,0x10,0x9c,0xcb,0x4b,0x62,0xf9,0xcf,0xe3,0xdf,0x10,0xa1,0xfb,0xf4,0xad,0xe9, - 0x4a,0x83,0x69,0x75,0x00,0x0b,0xe9,0x96,0xed,0x77,0x28,0x59,0x66,0x80,0x90,0xa7, - 0x79,0xcd,0x4d,0xed,0x90,0x92,0x0f,0xbb,0x38,0xe9,0x40,0xa8,0xf1,0x94,0xd1,0xc0, - 0x30,0xba,0x4f,0x4d,0x7d,0x7b,0xb6,0x8a,0xc0,0x20,0x75,0x53,0xc6,0x39,0x9d,0x22, - 0x8d,0x88,0xe8,0x5b,0x8a,0xf1,0x2e,0xc2,0xef,0xcf,0x3f,0xb4,0xca,0x8e,0xb3,0x2d, - 0x72,0x2d,0x5c,0x15,0xd0,0x16,0x77,0x2d,0x62,0xd5,0x92,0xe2,0xb5,0x0d,0x76,0xa6, - 0x70,0x22,0x4c,0xe5,0x44,0x17,0x9f,0xd9,0xd6,0x8a,0xf5,0xfa,0x89,0xad,0x9e,0x88, - 0x2b,0xb1,0x56,0x3f,0x11,0x77,0x28,0xa0,0x08,0x53,0x41,0xe1,0xfa,0x89,0xb3,0x7f, - 0xdd,0x3a,0x72,0x9f,0x9b,0x54,0xb6,0xd8,0x22,0x46,0x13,0xd7,0x37,0xc3,0x5f,0xab, - 0x32,0x1b,0x2a,0x6f,0x65,0x76,0x27,0xd3,0x4b,0x3e,0x5b,0x89,0x76,0x45,0x92,0x25, - 0xef,0x45,0x0c,0xae,0x08,0x6a,0x33,0x22,0x23,0xa7,0x0d,0xb2,0x95,0xbf,0x4a,0xac, - 0xb5,0xe5,0x2b,0x05,0x3b,0x4d,0xb4,0xd2,0xbe,0xa4,0x50,0xba,0x19,0x85,0x1f,0xdb, - 0x94,0x5b,0xea,0x55,0xac,0xca,0x96,0xb1,0x34,0xee,0xb4,0xad,0xa6,0xb2,0x02,0x70, - 0x24,0x7d,0xd1,0x72,0xed,0x45,0x5d,0xa9,0xc2,0x8f,0x46,0xad,0xf6,0x74,0xef,0xc7, - 0xbf,0xd9,0xe8,0x4c,0x9b,0xd3,0x9e,0x18,0x2f,0x55,0xad,0x23,0x0d,0xa8,0x44,0x36, - 0x0d,0xe7,0x6a,0x05,0x3f,0xdd,0x2b,0x67,0xc1,0xe4,0xd2,0x86,0x65,0x1a,0x94,0x6e, - 0x92,0x2d,0xeb,0x42,0xa6,0x94,0x6d,0x22,0xc2,0xb9,0xb4,0x55,0x5c,0xce,0x88,0xe1, - 0x08,0xc2,0x7f,0x43,0xac,0x81,0xb4,0x5f,0x61,0xb3,0xa6,0x2d,0x8d,0xe9,0xa4,0x81, - 0x8d,0xe1,0x19,0xf4,0xa3,0x23,0xb0,0xaa,0xba,0xb1,0x8e,0xaa,0x01,0xba,0x91,0xd7, - 0x5f,0x93,0xda,0xf7,0x5e,0x46,0x42,0x4f,0xc4,0xc2,0xaf,0x7e,0x8b,0x77,0x28,0xbe, - 0x03,0x61,0x78,0x9b,0x35,0xbe,0xd4,0x68,0x4d,0xff,0x8a,0x9c,0x35,0xc7,0x9a,0xc2, - 0xb7,0x1b,0xd7,0x4a,0x76,0xb0,0x5c,0xc5,0xfc,0x6d,0x96,0x0f,0xf7,0x2b,0xb7,0x0e, - 0xeb,0x40,0xe6,0xaf,0xe2,0x8b,0x9d,0x05,0x86,0x53,0xd4,0x4f,0x92,0xe7,0x48,0xe5, - 0xba,0x6f,0x02,0xb0,0xa1,0xb8,0xae,0xcf,0x7b,0x9e,0x84,0x6b,0xb3,0x4a,0xd7,0xbd, - 0xc5,0xb3,0xd9,0x5b,0x75,0x72,0x18,0x27,0x3e,0xac,0xac,0xf2,0xcd,0xa9,0x89,0x45, - 0x17,0x9a,0x6f,0xd3,0x0d,0x51,0xe5,0x1b,0x37,0x83,0xe0,0x4c,0x45,0xe3,0xfd,0x99, - 0xd3,0x9d,0x94,0xc5,0x22,0x50,0x4e,0xb8,0x3d,0x7f,0xd1,0x4b,0xde,0xbc,0x82,0xc9, - 0x5c,0xb7,0x53,0xd3,0xea,0x9d,0xf5,0x59,0x15,0x31,0xb7,0x69,0x6b,0x45,0xd5,0xb2, - 0x94,0xd8,0x8c,0x8c,0xb9,0xbd,0xde,0xab,0xc9,0x5c,0x2d,0x9f,0xfa,0xe3,0x92,0x8e, - 0x16,0x6d,0x53,0x10,0xbd,0xab,0x82,0x7b,0xb1,0x9a,0xbf,0xff,0xc7,0x7f,0xc2,0x1f, - 0xff,0xfe,0x1f,0xff,0xab,0xf5,0xf7,0x2f,0xfa,0x39,0x75,0x78,0xac,0x67,0xce,0x60, - 0x9b,0x61,0x94,0x57,0x06,0x87,0xfa,0x4e,0xb5,0x5c,0x6f,0x74,0xe5,0x98,0x4c,0x7d, - 0xe3,0x3a,0x86,0x03,0x04,0x22,0x84,0x9e,0x78,0x2c,0x3c,0x7a,0x29,0x13,0x95,0xdd, - 0x05,0xf9,0x07,0x00,0xa3,0xcf,0xc3,0x0d,0x7f,0xa2,0x4f,0x4d,0xbb,0x8a,0xdb,0x9c, - 0x1f,0xf3,0x9b,0x3a,0x48,0x89,0x42,0xfa,0x07,0x65,0xae,0x36,0x7c,0xc9,0xae,0xc0, - 0x1d,0x8a,0xb3,0x16,0xa9,0x0f,0xc5,0xf6,0xb1,0x61,0xc5,0x60,0x52,0xce,0x10,0xc1, - 0xbe,0xb8,0x7f,0x5f,0x84,0x3e,0xf5,0x72,0xba,0xcc,0xdf,0xb5,0x41,0x5f,0x3f,0x20, - 0x53,0x1f,0xb6,0x71,0x66,0x8a,0x91,0x9e,0x2e,0x78,0x3a,0x0d,0x53,0xd7,0x9b,0x35, - 0x70,0x2a,0x3d,0xb7,0xc5,0xe1,0xad,0x85,0x6e,0x71,0x53,0x97,0x14,0xb9,0x06,0x10, - 0x78,0xbd,0x80,0x6d,0x5e,0xc5,0x75,0x53,0x01,0xba,0x6e,0x7b,0x5c,0x59,0xe8,0xf4, - 0x99,0x84,0x43,0x0b,0x29,0xd1,0xe9,0xc6,0x17,0x40,0xb2,0x80,0xf6,0x6c,0x99,0x1d, - 0xdb,0xe7,0x46,0x18,0xe8,0x94,0xde,0x3f,0xb6,0x4f,0xfb,0xbf,0xa1,0xf1,0xfc,0x22, - 0x52,0x91,0x7e,0xe8,0x44,0xfb,0x97,0x5a,0xad,0x89,0x92,0xb6,0xf5,0xa6,0x4f,0x73, - 0x84,0x00,0xa8,0xce,0x3f,0x37,0xda,0xe5,0x17,0xbc,0x9d,0x76,0xf5,0xbf,0x69,0xfa, - 0xff,0x00,0xc8,0x28,0x3e,0xf5,0xe4,0x74,0x00,0x00, + 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x02,0xff,0xcd,0x7d,0xdb,0x76,0xdb,0x48, + 0x92,0xe0,0xbb,0xbe,0x22,0xcd,0x9a,0x12,0x88,0x12,0x08,0x92,0xba,0xb8,0x6c,0x52, + 0x94,0xc7,0x2e,0xdb,0x3d,0x1e,0x97,0x5d,0x6e,0xcb,0x35,0x35,0x53,0x3e,0xde,0x1e, + 0x90,0x48,0x92,0x68,0x81,0x00,0x1a,0x09,0x8a,0x62,0x4b,0x3c,0xa7,0x9f,0xe6,0x79, + 0xcf,0x9e,0xf9,0x86,0xfd,0x85,0x7d,0xdf,0x4f,0xa9,0x2f,0xd9,0xb8,0x64,0x02,0x09, + 0x5e,0x24,0xd9,0xee,0xde,0xee,0xea,0xb6,0x8d,0x4b,0x22,0x33,0x32,0x32,0xee,0x11, + 0x99,0x3c,0x7d,0x10,0xa6,0xa3,0x62,0x99,0x49,0x31,0x2d,0x66,0xf1,0xd9,0xde,0x29, + 0xfe,0x23,0xe2,0x20,0x99,0x0c,0x1a,0x32,0x69,0xe0,0x03,0x19,0x84,0xf0,0xcf,0x4c, + 0x16,0x81,0x18,0x4d,0x83,0x5c,0xc9,0x62,0xd0,0x98,0x17,0xe3,0xd6,0x23,0x7c,0xab, + 0x46,0x79,0x94,0x15,0x42,0xe5,0xa3,0x41,0xa3,0x9d,0x8d,0x5b,0xa3,0x34,0x51,0x69, + 0x2c,0xfd,0x3f,0xaa,0x27,0xd3,0x41,0xd8,0x39,0x1c,0x1e,0x1d,0x1d,0x1e,0x36,0xce, + 0x4e,0xdb,0xdc,0xf0,0x4c,0x7f,0x70,0x16,0x8d,0x9b,0x0f,0x16,0x51,0x12,0xa6,0x0b, + 0xff,0xdd,0x4b,0xb7,0x39,0x9e,0x27,0xa3,0x22,0x4a,0x93,0xa6,0x7b,0x7d,0x19,0xe4, + 0xe2,0x97,0x01,0xbf,0xf3,0x7e,0x1e,0x38,0xed,0x20,0x8b,0xda,0xaa,0x08,0x8a,0xb9, + 0x72,0xbc,0x1f,0x07,0x1f,0x3f,0x79,0x6f,0x06,0x87,0xf2,0xb1,0x77,0xee,0xfd,0xea, + 0xbd,0x1b,0xfc,0x02,0x9f,0x0f,0xae,0xf1,0xb5,0xec,0x39,0x71,0x74,0x29,0x1d,0x2f, + 0x8c,0xf2,0x62,0xd9,0x7b,0xd0,0xf5,0x2e,0x7b,0xc9,0x3c,0x8e,0xbd,0x89,0x2c,0x7a, + 0xbf,0xf3,0xa2,0x64,0x1c,0x47,0x93,0x69,0xd1,0x7b,0x3b,0x9f,0x0d,0x65,0xee,0x4d, + 0xd3,0x38,0xec,0xfd,0x34,0xfc,0xa3,0x1c,0x15,0x9e,0x0a,0x96,0xbd,0x12,0x82,0xc2, + 0xbb,0xf0,0xa4,0x7b,0x2d,0xf7,0xf7,0x9b,0xd2,0x2f,0xe4,0x55,0xf1,0x43,0x9a,0x14, + 0x32,0x29,0x06,0x85,0xbb,0xf2,0x86,0x73,0x65,0x35,0x1d,0x7a,0x99,0x7b,0x6d,0xee, + 0xc4,0x18,0x80,0x1f,0xfa,0x61,0xa4,0x82,0x61,0x2c,0xc3,0xc1,0x83,0xee,0xca,0xbe, + 0xeb,0xf4,0x33,0xbf,0x98,0xca,0xa4,0x39,0xf6,0xc6,0x6e,0x3f,0x97,0xc5,0x3c,0x4f, + 0x44,0xb6,0xf2,0xb2,0x34,0x8e,0xab,0x1e,0x95,0x37,0xf3,0x46,0x5e,0xca,0x58,0x28, + 0xbc,0xb1,0x37,0x19,0x74,0xfb,0xe5,0x08,0xef,0x61,0x84,0xc9,0xfe,0xfe,0x83,0x31, + 0xc0,0x36,0x1e,0x74,0xbd,0x51,0x2c,0x83,0xfc,0x43,0x34,0x93,0xe9,0xbc,0x68,0x16, + 0xae,0xd7,0x54,0xfe,0x28,0x88,0xe3,0x27,0xaa,0xe9,0xf6,0x7e,0xd7,0x54,0xae,0xab, + 0x47,0x34,0xbd,0x87,0xee,0xf5,0xa8,0x19,0x7a,0x88,0x15,0x98,0x4b,0xf9,0x58,0xe2, + 0x63,0x42,0x95,0x74,0x57,0xfa,0x9b,0xd7,0xde,0x6b,0xd7,0x5d,0x95,0x23,0xbf,0x86, + 0x91,0xc7,0x83,0x4e,0x7f,0x6d,0xc4,0x3e,0x40,0xd3,0x2c,0x06,0x40,0x12,0xe6,0xd9, + 0x7b,0x6f,0x06,0xdf,0xa5,0xfb,0xfb,0xa9,0x3f,0x8e,0x72,0x55,0x0c,0x06,0x80,0x88, + 0x27,0xf0,0x79,0x0f,0x80,0xd7,0xd3,0x86,0xe5,0x4a,0xb3,0x9e,0xb5,0xe4,0x93,0xcd, + 0x9e,0x57,0x1e,0x74,0x5a,0xb5,0x49,0xdc,0xeb,0xd9,0x20,0xe9,0x8f,0x6f,0x6e,0xa0, + 0xab,0x95,0x97,0xa4,0x8b,0xde,0xfb,0x15,0xb4,0x21,0xb2,0xa8,0x9a,0x8d,0x60,0x26, + 0xfb,0xfb,0x3f,0xfa,0xd9,0x5c,0x4d,0xe1,0xa6,0x7f,0xfe,0x04,0x6e,0x47,0xcd,0x73, + 0xb7,0xf7,0xeb,0x93,0x5f,0x7d,0xf8,0x0a,0xe0,0xf8,0x75,0xf0,0xce,0x47,0xa4,0x37, + 0x7f,0xf6,0xde,0x78,0xcf,0xa1,0xb3,0x45,0x50,0x8c,0xa6,0xe7,0x6b,0x3d,0xcd,0xdc, + 0xeb,0x77,0x3e,0x77,0x0f,0x70,0xff,0xea,0x03,0x34,0xcd,0x37,0x83,0x37,0x41,0x31, + 0xf5,0x67,0x11,0xbc,0xf6,0xde,0xb8,0xf4,0x69,0x54,0xbc,0x4c,0xf3,0xe7,0xf2,0x32, + 0x1a,0xc9,0xea,0x63,0x58,0xbf,0x74,0x90,0xde,0xdc,0x5c,0xaf,0xcc,0x42,0x27,0x72, + 0x21,0xde,0xe5,0xe9,0x2c,0x52,0xb2,0x5a,0x8e,0xa5,0x97,0xf0,0x42,0x4f,0x2b,0x90, + 0x0e,0xe5,0x51,0xb5,0x30,0xca,0xbd,0x56,0xb0,0xdc,0xcd,0xd4,0x1f,0xce,0xa3,0x38, + 0xdc,0xdf,0x57,0x7c,0x31,0x18,0xe8,0x27,0x2e,0xa0,0x7f,0xea,0x23,0x3a,0x9b,0xae, + 0xb7,0xc4,0x15,0x5f,0xb9,0x7d,0x6b,0x35,0x2c,0x1c,0x9b,0x66,0xfd,0xa4,0xf9,0x22, + 0xcf,0xd3,0xbc,0xe9,0x14,0xdc,0xc8,0xc1,0x89,0xa4,0xbe,0xbe,0xbb,0xb9,0x79,0x2c, + 0x8f,0xa1,0x97,0xd5,0xaa,0x22,0xbb,0xdf,0x35,0xe7,0x48,0x92,0x7a,0x2a,0x63,0x09, + 0xe8,0xa2,0x27,0x6b,0xd4,0x95,0xbb,0xd7,0xc8,0xd5,0xb9,0x9f,0x5e,0xb8,0xc5,0x34, + 0x4f,0x17,0x82,0x07,0xca,0x35,0x1e,0x4b,0xaa,0x27,0xea,0x40,0xce,0x7a,0x92,0xd3, + 0x3f,0xb0,0x28,0x39,0x08,0x0c,0x04,0x73,0x65,0xd1,0xdc,0x73,0x9c,0x3f,0xf4,0x08, + 0x7f,0x9f,0x03,0x9f,0x67,0x63,0x5e,0xa3,0x81,0xea,0xff,0xe8,0x8f,0xd3,0xfc,0x45, + 0x00,0x60,0x94,0x83,0x8f,0x81,0x3e,0xa1,0x25,0x02,0xbe,0x72,0x9b,0x6e,0x29,0x6f, + 0xb4,0xe0,0x4a,0x82,0x99,0x1c,0x34,0x2e,0x23,0xb9,0xc8,0xd2,0xbc,0x68,0x88,0x91, + 0xe6,0xe9,0xc6,0x22,0x0a,0x0b,0x10,0x54,0xb4,0x80,0x2d,0xba,0x01,0x49,0x11,0x15, + 0x51,0x10,0xb7,0x14,0xf0,0x92,0x1c,0x74,0x51,0xca,0x15,0x51,0x11,0xcb,0xb3,0x77, + 0x41,0x51,0xc8,0x1c,0xe4,0x48,0xba,0x38,0x6d,0xf3,0xa3,0xbd,0xd3,0x38,0x4a,0x2e, + 0x44,0x2e,0xe3,0x41,0x23,0x82,0x4e,0x1b,0x62,0x9a,0xcb,0xf1,0xa0,0x11,0x06,0x45, + 0xd0,0x8b,0x66,0xc1,0x44,0xb6,0xd5,0xe5,0xe4,0xe0,0x6a,0x16,0x7b,0xdf,0x1e,0xfd, + 0x00,0x97,0x02,0x2e,0x13,0x35,0x70,0xa6,0x45,0x91,0xf5,0xda,0xed,0xc5,0x62,0xe1, + 0x2f,0x8e,0xfc,0x34,0x9f,0xb4,0x0f,0x3b,0x9d,0x0e,0x36,0x76,0x04,0x82,0xf9,0x2c, + 0xbd,0x1a,0x38,0x1d,0xd1,0x11,0xdd,0x87,0xf0,0x7f,0xe7,0xdb,0xa3,0x17,0xf0,0x7d, + 0x0e,0xc2,0x4a,0x30,0xc4,0x0e,0x3c,0x14,0x53,0x89,0x12,0x8d,0xaf,0xc7,0x51,0x1c, + 0x0f,0x9c,0x6f,0x0f,0x8f,0x3a,0x3f,0x74,0x9e,0x75,0x1e,0x3b,0x6d,0xeb,0x13,0xe8, + 0xea,0xc4,0x11,0x4b,0xfa,0x5b,0x7f,0x6e,0x7d,0x6d,0x7f,0xfc,0xf2,0xe5,0xc9,0x0f, + 0x87,0x2f,0xcc,0xc7,0x08,0x0e,0x5c,0x91,0x9c,0x2f,0x96,0x38,0x5d,0x21,0xda,0xdf, + 0x89,0xb7,0xa9,0x58,0xc8,0xa1,0x18,0x03,0x0e,0x55,0x4f,0x00,0x11,0x08,0x58,0xe0, + 0xd1,0x85,0x12,0x63,0x10,0x3e,0x62,0x08,0x97,0xa2,0x80,0x26,0xd3,0xa0,0xa0,0x97, + 0x8c,0x5c,0x11,0x29,0xa1,0xa6,0x29,0xc8,0xf5,0x89,0x48,0x13,0x4f,0x04,0x49,0x08, + 0xbd,0xc1,0x7f,0xd8,0x24,0x0b,0x12,0x19,0x3b,0x4a,0xa4,0x8b,0x44,0x4c,0xd3,0x42, + 0x65,0x69,0x21,0xa6,0x81,0x12,0x49,0x2a,0xa2,0x04,0x71,0x2e,0x0b,0xec,0x92,0x48, + 0x0f,0x3f,0x98,0x89,0x31,0x30,0x13,0xf4,0xb1,0x5c,0x04,0x4b,0x5f,0x7c,0xd7,0x86, + 0xae,0x7a,0x79,0x9a,0x16,0xd7,0xad,0xd6,0x70,0xd2,0xfb,0x86,0x71,0xd0,0x6f,0xb5, + 0xa8,0xe3,0xde,0x37,0xdd,0xa3,0x6e,0xb7,0xdb,0x81,0x7b,0x58,0xac,0xde,0x37,0x2f, + 0x9e,0xbf,0xf8,0xfe,0xf9,0x33,0xb8,0x9b,0xcd,0x0b,0x19,0xf6,0xbe,0x79,0xf4,0xf4, + 0xd1,0xe1,0xf7,0x87,0x70,0x3f,0x0e,0x60,0xb4,0xde,0x37,0x27,0x4f,0x4f,0x4e,0x8e, + 0x1f,0xf6,0x19,0x3c,0xf8,0xaf,0xd5,0x9a,0x4c,0x53,0x05,0x2f,0x0e,0x0f,0xbb,0x2f, + 0xbb,0x8f,0xa0,0x61,0x3e,0x8f,0x25,0xdc,0x1e,0x1f,0x76,0xe9,0x36,0xc6,0x5e,0x18, + 0x75,0x70,0x97,0xc2,0x10,0x27,0xdf,0x3f,0x7b,0xf4,0xfd,0x4b,0xb8,0x59,0x04,0x79, + 0xd2,0xfb,0xe6,0xf9,0xe3,0xa7,0x9d,0xa3,0x97,0x76,0x8f,0x2a,0x48,0x54,0xcf,0x79, + 0x85,0x93,0x73,0xbc,0x79,0x44,0xf7,0x2d,0x25,0xf3,0x68,0xec,0xa9,0xa5,0x2a,0xe4, + 0xac,0x35,0x8f,0xbc,0xea,0xa1,0xfd,0xe9,0x2c,0x4d,0xd2,0x9e,0xf3,0xaf,0xb2,0x78, + 0x96,0x03,0xbc,0x4a,0xbc,0x81,0x7b,0xea,0x03,0x5f,0xa8,0x2c,0x18,0x49,0xef,0xfc, + 0x25,0x3e,0x6c,0xbd,0x97,0x93,0x79,0x1c,0xe4,0xde,0x1b,0x99,0xc4,0xa9,0x57,0xbe, + 0x5e,0x41,0x67,0xdf,0x5d,0x0f,0xd3,0xab,0x96,0x8a,0xfe,0x0c,0xeb,0xd1,0x1b,0xa6, + 0x79,0x28,0xf3,0x16,0x3c,0xe9,0xcf,0x82,0x7c,0x12,0x25,0x3d,0xd0,0x56,0x41,0x18, + 0xe2,0xbb,0x0e,0xb6,0x1e,0xa6,0xe1,0xf2,0x1a,0xe4,0x5e,0x8b,0x69,0xa6,0xd7,0xed, + 0x74,0x2e,0xa7,0x7d,0x5c,0xe9,0x49,0x9e,0xce,0x93,0xb0,0x07,0x52,0xac,0x89,0xa8, + 0x77,0xfb,0xa3,0x34,0x4e,0x73,0x7d,0x0f,0xd8,0x76,0x4b,0xc8,0x91,0x5c,0x7a,0xdd, + 0x93,0xec,0xaa,0xdd,0xf5,0x4f,0x4e,0x04,0xb7,0xc0,0x19,0xba,0xfd,0x16,0x90,0xd3, + 0x45,0x54,0xb4,0xb0,0x49,0x4b,0xcd,0x60,0x1d,0xa7,0x38,0x74,0x90,0x20,0x1f,0x46, + 0x81,0x92,0xe1,0x8a,0x29,0xef,0x03,0xd1,0x0a,0x01,0x86,0xf4,0x84,0xa4,0xb3,0xc8, + 0x83,0x2c,0x03,0x24,0x2a,0x0f,0xa8,0xa5,0x20,0x48,0xf1,0x5a,0xa5,0xf4,0x76,0x04, + 0x72,0x68,0x26,0x81,0xb2,0xd0,0x8a,0x91,0xb9,0x68,0xf2,0x7b,0x86,0x89,0x14,0x14, + 0x34,0x41,0x41,0x2a,0xf2,0x39,0xa0,0x52,0x86,0x13,0x89,0x84,0x46,0xff,0xc6,0xd1, + 0x85,0x04,0x52,0x15,0xf2,0x52,0xe6,0x4b,0x01,0x30,0xc1,0xf7,0x19,0x70,0xb4,0x2f, + 0x66,0xc1,0x15,0xcb,0x0a,0x01,0xd3,0x5f,0xe8,0xde,0x86,0x4b,0x66,0x85,0x28,0xac, + 0x60,0x84,0xae,0x2e,0xa4,0xcc,0xe8,0xc5,0xc9,0xc3,0x4e,0x76,0x05,0x82,0x27,0x9e, + 0xcf,0x12,0x4d,0xb2,0x3e,0x91,0xe7,0x35,0x75,0x85,0x38,0xfd,0xb6,0x5f,0xf6,0xdc, + 0x7b,0xd8,0x79,0x94,0x95,0xcb,0xd1,0x7d,0x08,0x9f,0x06,0x73,0xe8,0xae,0x5a,0x98, + 0xc3,0x63,0x78,0x46,0x7f,0x3d,0x84,0xbf,0x10,0x41,0x3c,0xc7,0x6b,0xb0,0x39,0xb2, + 0x18,0x2d,0x9a,0x58,0x5e,0xf5,0x01,0x7f,0x93,0xa4,0x15,0x01,0x41,0xa9,0xde,0x48, + 0x22,0xb9,0xf5,0x27,0x41,0xd6,0xc3,0xbe,0x75,0x47,0xb0,0xec,0x45,0x91,0xce,0x7a, + 0xdd,0x43,0x78,0x56,0x52,0x02,0x3f,0x82,0xce,0xc1,0x9a,0x8b,0x42,0xbd,0x5a,0x48, + 0xf6,0xae,0x86,0xc9,0xb4,0x39,0x7c,0xc4,0x83,0xfb,0x21,0x70,0x1f,0x83,0xfe,0x3d, + 0x74,0xa4,0x09,0x05,0x2f,0x37,0xc8,0x04,0xd8,0xc5,0x35,0x23,0xe5,0x41,0x18,0x81, + 0xde,0xed,0xea,0x19,0x74,0xaf,0x99,0x06,0xa2,0x3f,0x4b,0xa2,0x95,0x3e,0xdd,0x2e, + 0xb8,0xb3,0x87,0x9d,0x4e,0x3f,0x96,0x28,0x83,0x5b,0x48,0xc7,0x88,0x04,0xbf,0xd3, + 0x95,0xb3,0x8a,0x68,0x71,0xca,0xbd,0x2e,0x81,0xa3,0xe6,0x43,0xee,0x6b,0x1c,0xcc, + 0xa2,0x78,0xa9,0x87,0x46,0x1e,0x70,0xfb,0xd6,0x18,0x30,0x70,0x8d,0x64,0x49,0x04, + 0xb8,0xab,0x3d,0xa6,0xb7,0xdf,0xfe,0xfb,0x2f,0xf0,0x7f,0xc1,0xfa,0x5d,0x8c,0x82, + 0x3c,0x14,0xcd,0x34,0x81,0x45,0x9e,0xa1,0xa4,0x63,0xb5,0x26,0x50,0x73,0x8b,0xdf, + 0xfe,0xf2,0xdf,0xb6,0xb0,0x4b,0x90,0x68,0xa0,0x41,0x2e,0x83,0x19,0xb4,0x88,0xae, + 0x64,0xac,0x5c,0xd3,0x1d,0xaf,0x3d,0x28,0x28,0x29,0x93,0xeb,0x0d,0xec,0x10,0x4d, + 0x18,0xfc,0xec,0x58,0x82,0x92,0x06,0x90,0xa4,0xe8,0xaf,0x87,0x7a,0x15,0xc0,0xc6, + 0x69,0x4d,0xc3,0xfb,0x11,0x41,0xb7,0x63,0x7d,0x74,0x71,0x1f,0x6c,0xc1,0x07,0x1b, + 0x2b,0xd0,0x3d,0x86,0x15,0x40,0x35,0xde,0x2a,0x72,0xe0,0x66,0xd0,0xcc,0xb3,0xde, + 0x1c,0x59,0x72,0x04,0x8c,0xbb,0x05,0xb7,0x7a,0x91,0xfa,0x8b,0x29,0x00,0x44,0xdd, + 0xc8,0x1e,0x00,0x00,0x6c,0x5c,0xc2,0x92,0x04,0x97,0xf5,0x09,0x20,0xb4,0x27,0x16, + 0xb0,0xc3,0x22,0xb9,0x26,0xae,0xcb,0x52,0x15,0xa1,0xfe,0xef,0x81,0x06,0x0e,0x0a, + 0x30,0xff,0x6d,0x6a,0x23,0x78,0xb2,0x20,0x87,0x19,0xdf,0x8e,0x4e,0x1b,0x48,0xd2, + 0x09,0x5a,0x6a,0xdd,0x03,0x23,0xc8,0x34,0x60,0x02,0xc8,0x52,0x32,0xf6,0x99,0x07, + 0x90,0x2d,0x0c,0x13,0x20,0x93,0x72,0x87,0x75,0xa2,0xc7,0x6f,0x47,0xf3,0x5c,0xc1, + 0xd8,0x59,0x4a,0x7a,0xae,0x6f,0x66,0x1d,0x25,0xd4,0xe9,0xae,0xd5,0xa3,0xce,0xfe, + 0x38,0x57,0x45,0x34,0x5e,0xb6,0xb4,0x2d,0x63,0xde,0xd1,0xac,0x19,0x29,0x48,0xa4, + 0x7e,0xf7,0x04,0xe4,0x1a,0x2c,0x05,0x7c,0x63,0xe3,0xaf,0x37,0x4d,0x81,0x44,0xaf, + 0x37,0xc4,0xb5,0x06,0xd1,0x7e,0x8e,0xfc,0x5a,0xfb,0x34,0x18,0x21,0xaa,0x37,0x49, + 0x97,0xd4,0xa4,0xdb,0xaf,0xe8,0x80,0x4c,0xa8,0x66,0xc7,0x7f,0x7c,0xe8,0x6a,0x09, + 0xfe,0x5e,0xaa,0x79,0x5c,0x08,0x9c,0x1d,0x48,0x69,0xb4,0x3b,0x64,0x88,0xa2,0xf3, + 0xdd,0x4b,0x1f,0xbc,0x30,0xe0,0x9b,0x2b,0xd2,0xf4,0x24,0xbb,0x61,0x5e,0x79,0x1a, + 0xc3,0x35,0x18,0x12,0xa3,0x60,0x0e,0x6a,0x80,0x74,0xbf,0x11,0x9e,0x33,0x35,0xb9, + 0x17,0xcd,0xfa,0x27,0x3b,0x78,0x9c,0xfb,0x00,0xc3,0xb2,0x25,0xf3,0x3a,0x26,0x68, + 0xc6,0xe6,0x65,0x7a,0x51,0x7b,0x07,0xd6,0xad,0xcd,0x69,0x0c,0x07,0xea,0x46,0x5e, + 0xf8,0x4e,0x1f,0xf1,0x8a,0x36,0x62,0x6f,0x1a,0x85,0xa1,0x4c,0x98,0x37,0xca,0x87, + 0x32,0x8e,0xa3,0x4c,0x45,0x6a,0x17,0xfd,0xe3,0x80,0xe3,0x31,0xe2,0x87,0x86,0xf0, + 0x6a,0x0f,0x50,0xe2,0x08,0xff,0xf2,0x3a,0x45,0xe6,0x03,0x27,0xd7,0x3f,0x31,0xa0, + 0x58,0x72,0xf3,0xf0,0x1e,0x72,0xb3,0xe5,0x77,0x0e,0x81,0x6d,0x6b,0x94,0x0b,0x94, + 0x62,0x24,0x29,0x88,0x6d,0x30,0x3d,0x8f,0x50,0x01,0x55,0x4a,0xff,0xf0,0x31,0xdc, + 0x9b,0x79,0xb4,0x10,0xe0,0x1e,0x1a,0x60,0xa0,0x16,0x65,0x89,0x90,0x2f,0x94,0xba, + 0x9a,0xe9,0x6c,0x0b,0x43,0xb3,0x7b,0x25,0x84,0xdf,0xa1,0x5c,0x14,0x6a,0x11,0xa1, + 0x0d,0xc8,0xcf,0xfe,0xee,0xff,0x67,0xcd,0xff,0x54,0x28,0x39,0x99,0x21,0xf7,0x85, + 0xa0,0xf9,0xa3,0x9c,0x2d,0x91,0x40,0x28,0x90,0x33,0x6c,0x05,0x4c,0x26,0x60,0x2f, + 0x8a,0xf6,0xec,0x4f,0x05,0x3c,0x8f,0x41,0x29,0x84,0x4b,0x50,0x0a,0x68,0x32,0x0f, + 0x65,0xb1,0x00,0x35,0xc0,0x1d,0x51,0x18,0x03,0xcd,0x1a,0xb0,0x6d,0xc0,0xb0,0x15, + 0x4d,0x1f,0xa6,0xda,0x16,0x3e,0x70,0x01,0x18,0x3a,0x11,0xd8,0x1b,0x41,0x22,0x7c, + 0x30,0x49,0x46,0x71,0xa0,0x40,0x9f,0x80,0x0d,0xcd,0x8d,0xb5,0x2d,0xa4,0xc0,0xcb, + 0xe1,0x9e,0x26,0x52,0x81,0xab,0x25,0x2b,0x3b,0x88,0xc3,0x32,0x64,0x8d,0x80,0x99, + 0x0d,0xb4,0x74,0x99,0x8e,0x82,0x21,0x5a,0x87,0x60,0x3f,0xbf,0x42,0xa8,0xa0,0x25, + 0xda,0xe7,0x30,0xf2,0x34,0x82,0x61,0x09,0x16,0xee,0x6c,0x99,0xce,0x05,0x48,0x51, + 0x30,0xc5,0x45,0x1e,0x90,0x19,0x04,0x2c,0x99,0x88,0x40,0x5d,0xe0,0xec,0xf0,0x2d, + 0x70,0x2c,0x4e,0x0a,0xe6,0x1c,0x07,0x43,0x58,0x25,0x04,0x2c,0x4a,0xc6,0xd0,0x32, + 0x2a,0x4a,0x5b,0x67,0x71,0x4f,0xad,0x74,0x58,0xda,0x3d,0x2d,0x8c,0x13,0xa0,0xed, + 0x53,0x1a,0x91,0xc6,0x66,0xa1,0x17,0x47,0x95,0xc1,0x42,0xf7,0xdb,0x64,0xfb,0x4a, + 0x0f,0xfd,0x15,0xfa,0x0d,0xf8,0xc4,0x0c,0xff,0xf9,0x6a,0xae,0x1c,0x1f,0xe4,0xa6, + 0xda,0x54,0x6a,0x46,0x6d,0x53,0x8b,0xeb,0x4d,0x6d,0x76,0x4f,0x5e,0xda,0xb0,0x8a, + 0x1e,0xdd,0x07,0x68,0x63,0x45,0xa0,0x71,0xd9,0x3d,0xde,0x54,0x46,0xa6,0x83,0x1d, + 0x2a,0x75,0x0b,0x03,0xdf,0xaa,0x65,0x4b,0x78,0x2a,0x05,0x45,0x5d,0x54,0x2a,0xca, + 0xb3,0x95,0x4f,0xf5,0xb8,0xc2,0xd0,0x67,0x28,0x2d,0x86,0xa8,0xfa,0x14,0xd8,0xe6, + 0xde,0xca,0xae,0x4f,0xbe,0xd1,0x34,0x08,0x41,0x5e,0x83,0x87,0x05,0xce,0x67,0x87, + 0xfe,0x87,0xf3,0x5a,0x53,0x89,0xd8,0x37,0x70,0xbb,0xac,0x79,0x47,0xc7,0x75,0x0a, + 0xfe,0x7e,0x5d,0x94,0x3d,0xcb,0xb1,0x1d,0x68,0x40,0x65,0x9e,0x00,0x6e,0x89,0xad, + 0xa4,0x16,0x70,0xec,0x56,0xa7,0x9a,0xd9,0x90,0xcd,0x02,0x70,0x88,0x81,0xab,0xb4, + 0x4f,0x4d,0x46,0x22,0x23,0x34,0x4c,0x41,0x64,0x34,0x5f,0x77,0xc1,0xc9,0x89,0x53, + 0x60,0x8d,0x2c,0xc7,0x7e,0x15,0xfc,0x05,0x18,0x76,0x37,0x24,0x00,0xba,0xd5,0x11, + 0xea,0xd8,0xd4,0x30,0xe6,0x30,0x8f,0xbe,0x8c,0x31,0x8d,0xf9,0x08,0x1d,0x94,0x3c, + 0x86,0x44,0x9f,0x80,0x7c,0x31,0x2f,0x5a,0x97,0x5f,0xa1,0x0f,0x58,0xa3,0x1e,0x21, + 0x3a,0x89,0x88,0x09,0xb0,0x1e,0x21,0xaf,0x6f,0x8d,0x54,0xc3,0xed,0x8f,0xc0,0x36, + 0x80,0x9e,0x1c,0x44,0x61,0x81,0x26,0x38,0x50,0xa1,0xcc,0x09,0x41,0xbe,0xff,0xfa, + 0xd8,0xfd,0x2b,0x6b,0x0e,0x8d,0xc2,0x51,0x91,0xc7,0xea,0x7a,0x5d,0x68,0xd5,0x84, + 0xd5,0xf1,0x7d,0x85,0x15,0xf5,0xb5,0x69,0xc3,0xaf,0x5b,0x7b,0x64,0x38,0xb4,0xb4, + 0xfa,0xa8,0x2d,0xd9,0x10,0x58,0x06,0x15,0xfb,0x9a,0xa3,0x86,0xcb,0x67,0x0d,0xf0, + 0xe5,0xf2,0xf0,0xf0,0xf3,0xec,0x7d,0xf6,0xc6,0x68,0x19,0x5a,0xe0,0x2d,0x7f,0x36, + 0xa9,0xad,0x83,0x5f,0x75,0xd5,0x03,0x2d,0x58,0xb4,0xc8,0x7f,0xbf,0xae,0x37,0xee, + 0x70,0xcb,0x16,0x69,0xa3,0xfb,0x12,0xe0,0xba,0xc9,0xb4,0x93,0x20,0xd1,0xe1,0xea, + 0xd7,0x29,0xbd,0x02,0x0a,0xf4,0x5e,0x36,0x2f,0x3e,0x62,0x4a,0x65,0x00,0xf8,0x99, + 0xc8,0x4f,0x1e,0x31,0xc8,0xc6,0x63,0x76,0x60,0xb4,0x33,0xa4,0x25,0x07,0x52,0x0d, + 0x86,0x33,0x80,0x7c,0x13,0x32,0x0b,0x61,0x15,0x4d,0x70,0x64,0xfd,0xf9,0x2e,0xeb, + 0x7b,0x8b,0xa3,0x81,0x8a,0x32,0x9d,0x17,0x48,0x14,0xfc,0xed,0x9a,0xa0,0x0f,0x46, + 0x88,0xfb,0x4d,0x31,0x58,0xa4,0xf3,0xd1,0xb4,0x15,0x50,0x84,0xb5,0x07,0x22,0xa7, + 0xb5,0x34,0x4e,0xc4,0x6d,0xf3,0xed,0xf5,0x0c,0xc8,0xba,0x55,0x31,0x9d,0xcf,0x86, + 0x3b,0xb0,0xb0,0xbd,0x31,0xe3,0xe6,0xbe,0x98,0xd0,0xf1,0x13,0xcb,0xe3,0xa2,0xeb, + 0x3a,0x0e,0x4e,0x3a,0xdf,0x6a,0xd4,0xac,0xe3,0xcd,0xd2,0x04,0xe8,0x92,0xd5,0xd8, + 0x92,0xd0,0xb0,0x86,0x2d,0x4b,0x7f,0x95,0x1c,0x00,0xca,0xaa,0xee,0x65,0xdd,0x8a, + 0x20,0xf6,0x9f,0x3e,0x0f,0x4f,0xb7,0x7d,0xc3,0xe8,0x5a,0x77,0xbb,0xba,0xfe,0xa1, + 0xbb,0x3d,0xf8,0x72,0xcf,0x55,0x9c,0xa5,0x7f,0x6e,0xd1,0xcd,0x5d,0x2b,0xb8,0xd6, + 0x90,0xc1,0xb9,0xf7,0xaa,0x7c,0xed,0x82,0xe8,0xd9,0x80,0x0a,0x78,0x09,0x02,0x0a, + 0x84,0x7d,0x0f,0x94,0x25,0x98,0x09,0x45,0x04,0x68,0x40,0x7d,0x9a,0x49,0x11,0x8c, + 0xf2,0x14,0xb4,0x62,0xa0,0xf5,0x81,0x50,0x70,0x1f,0xc7,0x4a,0xeb,0xd2,0x89,0x14, + 0x4d,0x22,0x6f,0xd7,0x8a,0x4b,0x73,0xd8,0xcf,0x38,0xa1,0x13,0x59,0xe0,0xe7,0xc3, + 0x68,0x02,0x23,0x08,0x70,0xdd,0xd0,0x22,0x0e,0x44,0x98,0x07,0x8b,0x44,0xc8,0x2b, + 0x58,0x9d,0x78,0x09,0x16,0x31,0xd8,0xf3,0xb0,0x02,0xd2,0x47,0x9f,0x80,0x46,0x32, + 0xb1,0xc6,0x21,0x99,0xc4,0x4a,0x60,0x5c,0x80,0x4d,0x79,0x1c,0x1a,0x2d,0x2f,0x58, + 0xb6,0xd1,0x05,0x7e,0x1a,0x08,0xe4,0xc2,0x1c,0xfd,0xe1,0x12,0x23,0x1e,0xe8,0x6a, + 0x84,0x12,0xb0,0x4a,0x9f,0x72,0x67,0xe9,0x58,0x1b,0xe9,0x64,0x24,0xcc,0x51,0xcf, + 0x81,0xbb,0x44,0x5e,0x40,0x65,0x9f,0x69,0x19,0x20,0x9a,0xd8,0xe8,0xc7,0x17,0xcf, + 0x45,0x8e,0x66,0xc4,0x0c,0x0c,0x28,0x85,0xf6,0x7a,0xa0,0x7d,0x0e,0xb6,0x6f,0xd8, + 0xd8,0x71,0xfb,0xe0,0x80,0x4f,0xc8,0xf2,0x14,0x2c,0x50,0x55,0x15,0xbf,0xcc,0xd9, + 0x37,0x00,0x6f,0x0f,0x6f,0x97,0x62,0x21,0x71,0x9e,0x1f,0x28,0xfa,0x2f,0x33,0x3d, + 0xcb,0x39,0x88,0x5f,0xf8,0x08,0x50,0x03,0xd0,0x1d,0x63,0x70,0x12,0xc0,0x5b,0x04, + 0x39,0x4c,0x24,0x40,0x8f,0x86,0xc2,0xf6,0xf4,0x92,0x6c,0x1b,0x63,0x9d,0x2c,0x75, + 0xc0,0x0c,0xad,0xbb,0x38,0xc8,0xb4,0x65,0xf2,0xcf,0x33,0x19,0x46,0x41,0x53,0x2f, + 0x33,0x18,0x8b,0x98,0x7c,0x76,0x99,0xba,0xbe,0x48,0xe2,0x1a,0x47,0xd6,0x8a,0xac, + 0xb6,0x10,0x71,0x9d,0x35,0xaa,0xec,0x18,0x5b,0xd5,0x22,0x4d,0x14,0x9e,0x41,0xde, + 0x9a,0x60,0x13,0xc0,0x6e,0xd3,0x96,0xb9,0x9e,0x7d,0xe3,0x0a,0x56,0x64,0x6d,0x0c, + 0xe8,0xd2,0x0a,0x27,0x69,0x2b,0x97,0x20,0xb2,0x8a,0xd5,0xdd,0xa0,0xff,0xd5,0x84, + 0x27,0xea,0x80,0x6d,0x01,0xfe,0x2d,0xe1,0xa9,0x8a,0x2d,0x31,0xc8,0xa6,0xd9,0xcd, + 0xb6,0xf4,0x37,0xb0,0xd1,0x1a,0xc5,0x51,0xd6,0xab,0x02,0xc8,0x57,0xbb,0x2c,0xe6, + 0xc3,0x0d,0x8b,0xf9,0x6f,0x2d,0x76,0xfe,0x81,0xe7,0x6d,0xc2,0x67,0xbd,0x60,0x0c, + 0xf4,0xe1,0x69,0x97,0x86,0xef,0xae,0x8d,0x5d,0xd7,0x68,0xf4,0x4b,0x37,0x30,0x18, + 0x02,0x4c,0xc0,0xde,0x7d,0xb4,0x18,0x5b,0x3a,0x40,0x4f,0x06,0x0e,0xdf,0xc4,0x72, + 0x5c,0xf4,0x5a,0xa8,0xdd,0xc9,0x26,0xa6,0x4b,0x1e,0xeb,0x9b,0x2c,0x28,0xd0,0x13, + 0xb8,0x34,0xdd,0x73,0x53,0x8a,0xaa,0xd0,0x3b,0x0c,0xb4,0x99,0x77,0xfa,0x63,0x13, + 0x72,0x29,0x9d,0x2d,0xfd,0x9a,0x06,0x7f,0x64,0x8d,0xad,0x23,0xfe,0x64,0x78,0x53, + 0x48,0xaa,0x72,0x6c,0x27,0x79,0x14,0xf6,0xf1,0xaf,0x16,0x98,0x74,0xf0,0xa4,0x90, + 0x2d,0xce,0x78,0xa8,0x5e,0x77,0x9c,0x0b,0xf8,0x43,0xf6,0x5d,0x87,0x82,0xd6,0xeb, + 0x5e,0xfe,0xca,0xf4,0x77,0x6d,0x3c,0x53,0x34,0x40,0x01,0x9b,0x8f,0xef,0x6b,0x3b, + 0x73,0x7c,0xec,0xab,0x5c,0xfd,0xcf,0xb6,0x6c,0x75,0x48,0xee,0x3e,0xb1,0xe2,0x8d, + 0x48,0x24,0x69,0x3a,0x0b,0x0b,0xc7,0x56,0xa8,0x63,0x33,0x3e,0x78,0xcf,0xc8,0xa2, + 0x05,0xd6,0x30,0xc8,0x8d,0xd0,0x3b,0xda,0x96,0x89,0xd1,0x26,0xe3,0x56,0x5f,0x15, + 0x25,0x3b,0xc8,0x5f,0x4a,0xc5,0x0f,0xe3,0x14,0x74,0x54,0x84,0x3a,0x0a,0xf3,0xdd, + 0x24,0xb6,0x41,0x05,0xce,0xc0,0x27,0xa1,0x58,0x57,0x94,0x80,0x30,0x8f,0x28,0xac, + 0x7b,0x21,0x30,0x55,0x4c,0x1e,0xab,0xd1,0xa4,0x65,0xb3,0x38,0x4d,0x2f,0x04,0xb0, + 0xd0,0xe8,0x02,0x8b,0x62,0x30,0x9e,0x84,0x8a,0x65,0x06,0x93,0x81,0x3b,0x50,0x6a, + 0xd8,0x3b,0x34,0x85,0x2b,0x8c,0x26,0x81,0xe6,0x50,0xa4,0x60,0x74,0x70,0x6c,0x3e, + 0x6c,0x51,0x14,0x34,0xb2,0xd4,0x10,0x85,0xb2,0xd8,0x41,0x5e,0xa4,0x39,0x68,0x55, + 0x15,0x2c,0xf1,0x66,0x02,0x4e,0xb1,0xd6,0x22,0x01,0x93,0x94,0xa1,0x50,0x9a,0x0a, + 0x63,0x2e,0x94,0xa3,0x34,0x0f,0x88,0xd3,0xd8,0x2a,0xa6,0x95,0xd1,0x73,0x59,0x95, + 0x9f,0x72,0xd0,0x01,0xd7,0x78,0x5b,0x50,0xbc,0xde,0x06,0xe3,0x9f,0xeb,0x0b,0x6c, + 0xad,0x47,0x19,0x1e,0xb5,0x42,0x37,0xb5,0x10,0xec,0xf1,0xc9,0xb6,0x50,0x92,0xb5, + 0x3e,0x27,0x3b,0x29,0x24,0x9f,0x05,0x71,0x7d,0xe9,0x45,0xb4,0x36,0xeb,0x2a,0x7b, + 0xfb,0x6d,0xdf,0x44,0xab,0xb7,0x67,0xe7,0x2c,0x1b,0x97,0x13,0x9d,0xfe,0x91,0x5a, + 0x73,0xb4,0x7f,0xce,0x42,0x60,0x6f,0x34,0x6c,0x12,0xb4,0x32,0x98,0x24,0xc5,0x3c, + 0x29,0xa2,0x98,0x56,0x66,0x88,0x06,0x03,0xa6,0x4c,0x73,0x32,0x39,0xa2,0x62,0xc3, + 0xf7,0xe6,0xf5,0xf9,0x66,0x9e,0x85,0x25,0x9c,0xb4,0x0e,0xb6,0x58,0xa8,0xdc,0xe6, + 0x0d,0xb6,0x27,0x40,0x4b,0x49,0xd1,0x35,0x41,0x2c,0x3b,0xdf,0xac,0xf1,0x7c,0xb4, + 0x8d,0xed,0xb6,0x92,0x80,0xf9,0xb8,0x06,0xcf,0x56,0xe7,0xda,0x4e,0xa0,0xe1,0x14, + 0x84,0x5f,0x04,0x93,0x2f,0x15,0x3c,0x14,0xaf,0xdb,0x70,0xbf,0xee,0x0c,0xe0,0x6d, + 0x4f,0x21,0x20,0x34,0x3a,0x50,0x66,0x2d,0x6e,0x3e,0x19,0x06,0xcd,0xc3,0x93,0x13, + 0xef,0xf1,0xa1,0x77,0xfc,0xd0,0xf3,0x3b,0x0f,0xdd,0x0a,0xf4,0x49,0x6a,0x1c,0x68, + 0xd2,0x13,0x98,0x69,0xee,0x7f,0x45,0xd8,0x66,0x2b,0x58,0x40,0x39,0x3f,0x25,0xb5, + 0x6a,0x0f,0x53,0xe9,0x41,0xe6,0x70,0x92,0xc2,0xfd,0x0c,0x33,0xa7,0x05,0x70,0xf2, + 0x05,0x07,0xc0,0x28,0x1d,0x84,0xe6,0xa5,0x27,0xe6,0x60,0x85,0xa6,0xc6,0x32,0xa4, + 0x32,0x37,0x90,0x0f,0x6b,0xf4,0x6d,0x6c,0x3a,0xad,0x36,0x0e,0xff,0xff,0x12,0xcf, + 0xca,0x02,0xec,0xde,0xf8,0x27,0x6e,0xf5,0x81,0xc7,0xe4,0x35,0xa9,0x4d,0xd6,0x96, + 0xbd,0x6e,0xbb,0xd5,0x5d,0x55,0xef,0x50,0xf8,0x6c,0xe7,0x76,0xc0,0xea,0xd3,0x79, + 0x31,0x4d,0x73,0x43,0xb2,0x02,0xb5,0xa1,0x12,0x4d,0xcc,0x1b,0x5d,0x80,0xa4,0x45, + 0x23,0xdb,0x40,0xe5,0x82,0x90,0x9c,0xc7,0x21,0xdb,0xde,0x8b,0x48,0x01,0x93,0x4a, + 0x1d,0x50,0xfc,0xf9,0xa9,0x63,0x04,0xe6,0x47,0x66,0xe5,0x4f,0x35,0xa6,0x7c,0x10, + 0xcd,0xb0,0x72,0x2a,0x48,0x8a,0x35,0x31,0xf0,0x12,0x7a,0x98,0xe7,0xda,0x3d,0xf8, + 0xbb,0x27,0x64,0x34,0x79,0x20,0x30,0x76,0x38,0xee,0xa8,0x8c,0xb3,0x1b,0xa4,0xac, + 0x51,0xce,0x17,0xc6,0xd9,0x6f,0xcf,0x7d,0x1b,0x62,0xda,0x2d,0xd1,0xb5,0x45,0xb5, + 0x01,0x9d,0x38,0x10,0x98,0x03,0xdf,0x5e,0x69,0x81,0x6f,0xee,0x63,0x0d,0x41,0x3b, + 0x8e,0x90,0xa5,0xe3,0x16,0x1a,0xce,0x5b,0x63,0x64,0x30,0xa4,0x1d,0x94,0x63,0x6c, + 0x6c,0xe6,0x21,0x4a,0x4e,0x41,0x7f,0xe6,0x31,0x5a,0xb7,0x74,0xd5,0xb9,0x57,0xc1, + 0xc8,0x36,0x3c,0x68,0x51,0xb1,0x55,0x08,0x6f,0x98,0x39,0x3b,0x13,0x06,0xac,0x80, + 0x79,0x0e,0x3b,0x72,0x03,0x9b,0x4d,0x68,0xd2,0x64,0xf9,0x5c,0xef,0x4a,0x18,0x98, + 0xf7,0x9b,0x96,0xb8,0xb6,0x95,0xd1,0xfa,0x26,0x75,0x0c,0x9a,0xb4,0x5a,0x7a,0xba, + 0x42,0xa3,0xf7,0x3f,0x9a,0x2d,0x78,0x53,0x2f,0x2c,0xb0,0xc3,0x73,0x35,0x09,0x73, + 0x72,0xb8,0x16,0x7c,0x3c,0xda,0x9a,0xaf,0x3d,0x5e,0xcf,0xd7,0xf6,0xb5,0x63,0xdc, + 0x02,0xd7,0x19,0x2b,0xf1,0x08,0x77,0xb7,0xe3,0x4a,0xe3,0xa1,0x55,0xd8,0x56,0xc8, + 0xf7,0x6b,0xc3,0x9f,0x6c,0x1d,0xbe,0xbb,0x91,0x2e,0x3e,0xea,0x6f,0xb5,0x74,0x78, + 0x08,0x5f,0xa5,0x60,0x37,0x56,0xe3,0xed,0xc6,0x34,0xbe,0xc7,0xf8,0xad,0x29,0x7c, + 0x3a,0x7a,0x38,0x9a,0xda,0x26,0xc0,0xd1,0x76,0x25,0xb3,0x26,0xa1,0xd7,0xcd,0xa8, + 0x75,0x50,0xbc,0xad,0x70,0x85,0xd7,0x3b,0xac,0x7a,0xd4,0xe5,0x6b,0xb5,0x18,0xf7, + 0x16,0x14,0x3b,0x15,0xfc,0x9d,0x82,0x62,0x87,0xae,0xd2,0x32,0x63,0x0b,0x12,0x0c, + 0x5b,0x02,0x06,0x04,0x06,0x96,0xac,0xb0,0x39,0x29,0x72,0x82,0xc5,0x84,0xc2,0x74, + 0xfa,0x44,0xc7,0xd1,0xc7,0x69,0x8a,0xce,0x9d,0x8d,0x68,0x54,0x80,0x9f,0x91,0x73, + 0x20,0x0b,0xe8,0xe1,0xba,0xd2,0xfc,0xc2,0x64,0xe5,0x67,0xba,0x5d,0x0c,0xbd,0x08, + 0xae,0xef,0x29,0x53,0xec,0x6f,0x6e,0x11,0x14,0x3a,0xe2,0x54,0x11,0x23,0x15,0xed, + 0xb9,0xd7,0xba,0x50,0xaf,0x94,0x82,0x87,0xda,0x5e,0x10,0x27,0x87,0xc6,0x67,0x16, + 0xb6,0xdc,0xa8,0x66,0x7c,0x8c,0x0d,0x8c,0x94,0x35,0x81,0x03,0x16,0x22,0xdf,0x77, + 0xac,0x6f,0xb5,0x2e,0x7f,0x2e,0xd5,0x05,0xae,0x05,0x97,0x36,0x4e,0x31,0x61,0x67, + 0x12,0x77,0x40,0xb6,0x54,0x7a,0x46,0x65,0x63,0x54,0x6f,0x46,0x40,0x89,0x2c,0x02, + 0x03,0x3c,0x14,0xb8,0xde,0x9e,0xa8,0xca,0x11,0x69,0x0c,0x6a,0x16,0x25,0x60,0x41, + 0x05,0x21,0x3b,0x58,0xd9,0x14,0x3b,0x61,0x2b,0x43,0x80,0x90,0x05,0x14,0x61,0x2d, + 0x65,0x22,0xc0,0x5d,0x2f,0x96,0x82,0x56,0xb8,0x1e,0x7e,0xab,0x4a,0x5b,0x1e,0x33, + 0x32,0xaa,0xe9,0x12,0x52,0x2a,0x64,0x75,0xbb,0x0f,0x1f,0xd9,0xe8,0x40,0x83,0xe6, + 0x3e,0x91,0x01,0x10,0x38,0x80,0x4a,0x18,0x07,0xba,0x6a,0x76,0xbc,0xee,0x38,0x77, + 0x39,0x39,0x8e,0xd4,0x6b,0x1b,0xdf,0x60,0x0f,0xe5,0x45,0xd5,0x3f,0x4e,0xb9,0x12, + 0xd1,0x40,0xaa,0xa3,0x8b,0x25,0x49,0xe5,0xe3,0x63,0x1b,0x8c,0x75,0x63,0xa0,0xb3, + 0x5a,0xed,0x9d,0xb6,0xb9,0xa0,0xf9,0xb4,0x4d,0xdb,0x5b,0x4e,0xb1,0x2c,0xf4,0x6c, + 0x0f,0xfe,0x3b,0x9d,0x01,0x8d,0x71,0x7d,0xc5,0xa0,0x41,0x13,0x6c,0x60,0xd5,0xf3, + 0x29,0xd7,0x56,0x9e,0x9d,0x02,0x82,0xca,0xd7,0x61,0x5a,0xd0,0xce,0x16,0x78,0x74, + 0x76,0x3a,0xed,0x9e,0xfd,0xc0,0x2b,0x05,0x7d,0x76,0xeb,0x0d,0xc1,0xed,0x6b,0x9c, + 0x71,0x65,0xa0,0x69,0xde,0xd6,0x1d,0xa2,0x31,0x75,0x1a,0x98,0x86,0xda,0x4e,0x6b, + 0x88,0x28,0x1c,0x34,0xa6,0xea,0x07,0xb8,0x35,0x15,0xe5,0xed,0x45,0x34,0x8e,0xe0, + 0x86,0x54,0xe2,0xd9,0x7f,0xa4,0xf3,0xfd,0x5c,0xfd,0x69,0x9e,0xf6,0x73,0xa2,0x8c, + 0xd2,0xac,0xd6,0x4f,0xb9,0x94,0x5a,0xdb,0xd2,0x62,0x7f,0x16,0x06,0x6a,0xda,0x17, + 0x40,0x7e,0x58,0xae,0x91,0x8b,0x5f,0xa2,0xd6,0xcb,0x48,0xec,0xe7,0x41,0x9e,0xf7, + 0x4f,0xdb,0x01,0x43,0x11,0x46,0x97,0x06,0x0e,0x5c,0x27,0x9e,0xb7,0xf5,0x10,0xd1, + 0xbd,0xf1,0x90,0xc9,0x91,0x1e,0xd7,0x5f,0xe8,0xf2,0x28,0xfd,0x06,0xde,0xd9,0x08, + 0xa1,0x82,0xc3,0xc6,0xd9,0xdb,0x74,0x21,0x90,0x38,0x80,0x04,0x35,0x5e,0xb6,0x35, + 0x9e,0xa9,0x09,0x23,0x04,0x1d,0x01,0xbc,0x39,0x5b,0x6b,0xbc,0x36,0x2a,0xd8,0x3d, + 0xe5,0xa8,0xf0,0x96,0x63,0xd2,0x76,0x83,0x61,0x91,0x70,0x87,0x26,0x48,0xd6,0x10, + 0x54,0xcd,0x3f,0x68,0xbc,0x83,0x9b,0x28,0xc5,0x9a,0x4e,0x2e,0xf5,0x87,0x17,0x18, + 0x71,0x6c,0x70,0x1f,0x8d,0xb3,0xfd,0x98,0x31,0xc6,0xf7,0xf7,0x1f,0x04,0xfd,0x98, + 0x72,0x90,0xb7,0xe8,0xd4,0xec,0x1a,0x20,0xdf,0x36,0xc0,0x69,0x1b,0xa6,0xa8,0x51, + 0x6c,0x5d,0xd6,0xe7,0xcd,0xa3,0xe1,0xc5,0x99,0x5e,0xef,0xdd,0x6d,0xb1,0x4e,0xab, + 0x6c,0x4f,0xd4,0x79,0xcf,0xb6,0x20,0x95,0xc7,0x25,0x11,0xea,0x6f,0x36,0x3e,0xca, + 0x16,0x3b,0x96,0x9d,0x6a,0x04,0x1a,0x67,0x54,0xc9,0xb5,0x7b,0x0d,0x4d,0xb5,0xcc, + 0xee,0x45,0xa4,0x16,0x1a,0xbb,0xad,0x74,0x03,0x89,0x3f,0x25,0x77,0xae,0x50,0xad, + 0x07,0x15,0x4b,0x99,0xad,0x77,0x72,0x8e,0x0f,0x3f,0x7f,0x21,0x4c,0x3d,0x88,0x28, + 0xa9,0x16,0x9e,0xe0,0x83,0x9d,0x28,0x1e,0xe6,0xd1,0xad,0xd8,0xaa,0x8a,0x45,0xd6, + 0x50,0x46,0x21,0x71,0x0d,0x35,0x85,0xc1,0x1b,0xe5,0x97,0x63,0x9d,0x10,0x60,0x08, + 0x70,0x04,0x14,0xaf,0x83,0xc6,0x61,0x03,0x6b,0xd7,0x07,0x8d,0x6e,0xa7,0xd3,0x20, + 0xbf,0x1a,0x2e,0x1b,0x60,0x65,0xc4,0x73,0xe8,0xe3,0x11,0x3c,0x0b,0xf2,0x28,0xe0, + 0xac,0x39,0x30,0x03,0xa9,0x97,0x61,0x39,0xfc,0x76,0x28,0xa9,0xc6,0xa3,0x1c,0x07, + 0x2e,0x2b,0xea,0xab,0xa0,0xdd,0x45,0x29,0x54,0x8a,0xc0,0x1f,0xf3,0xe5,0x36,0x7a, + 0x28,0x0b,0x22,0x6c,0x82,0xb0,0x41,0xd0,0x05,0x0d,0x8d,0x33,0xaa,0xfd,0x78,0x9d, + 0xa4,0xc3,0x35,0x54,0xed,0x12,0x28,0xf8,0xe1,0x36,0x81,0x52,0x2d,0xd4,0x9a,0xb0, + 0x2b,0x13,0x17,0xbb,0x40,0xd1,0x25,0x07,0x8d,0xb3,0xd7,0xdd,0x0d,0x10,0xee,0xbd, + 0x5e,0x2a,0x6e,0x75,0xf4,0x82,0x75,0x6e,0x5b,0xb0,0x93,0x4e,0xe3,0xaf,0x0a,0xf2, + 0xe1,0x57,0x81,0xdc,0xfd,0x7b,0x80,0x7c,0xf4,0x55,0x20,0x1f,0xfe,0x3d,0x40,0x3e, + 0xfe,0x2a,0x90,0x8f,0xbe,0x1c,0xe4,0x5d,0x4c,0x48,0x19,0x9c,0xad,0x9c,0x87,0x6f, + 0x1a,0x75,0x53,0x86,0xc4,0x37,0xa9,0x2e,0xc3,0x63,0xf6,0x07,0x5a,0x10,0xa8,0x56, + 0x86,0x1f,0xd6,0xd4,0xd0,0x6e,0xdc,0x6d,0x1d,0xe4,0xbc,0x00,0xf3,0x7d,0x22,0x6f, + 0x1b,0x63,0xac,0xb6,0x69,0xba,0x0d,0xf1,0x1a,0x80,0xdc,0x38,0x8d,0xca,0x6f,0xf8, + 0xbe,0x1d,0x9d,0x7d,0x11,0x58,0x64,0x38,0xdd,0x06,0x14,0x59,0x69,0x5f,0x35,0xf3, + 0xa7,0x61,0x98,0x57,0xc2,0x7e,0xeb,0x20,0x51,0x76,0xeb,0x10,0x0f,0x5a,0x2d,0xbd, + 0x53,0xaa,0xda,0x55,0x87,0x25,0x3e,0x0a,0xf7,0xaa,0x80,0x07,0xe5,0x61,0xe6,0x00, + 0xf3,0x2f,0x05,0xe6,0x52,0xe6,0x19,0xd6,0x4b,0x28,0x89,0x35,0x73,0x45,0x19,0x7f, + 0x2d,0x71,0x89,0x7e,0x1d,0x26,0xed,0x4d,0xb2,0x25,0x18,0x82,0xf7,0x64,0x12,0x40, + 0x54,0x15,0x81,0x15,0x0a,0x38,0x04,0x25,0x67,0x6a,0x05,0xc2,0x62,0x26,0x73,0xdc, + 0x2f,0xd5,0x6a,0xed,0x9a,0x3e,0x56,0x89,0x48,0x33,0xad,0xa9,0x42,0x9d,0x6c,0x8c, + 0x8b,0x35,0xb4,0xfc,0x0b,0x07,0x8b,0x6f,0x43,0xcb,0x54,0x7d,0x1d,0xe6,0xdf,0xc8, + 0x59,0x9a,0x2f,0x6f,0x1d,0x41,0x06,0xd9,0xd7,0x8d,0xf1,0x73,0x86,0x1b,0x6d,0x6f, + 0x1b,0x63,0xfe,0x95,0x23,0xbc,0x8c,0xf2,0xd9,0x22,0xc8,0x6f,0x67,0x9d,0xc5,0x9d, + 0x04,0xf4,0x0b,0x15,0x98,0x98,0x04,0x20,0x55,0x99,0xb3,0xbf,0x09,0x17,0xf9,0x3c, + 0x49,0xc0,0x66,0xa7,0xc2,0xf1,0x45,0xa0,0xb3,0x82,0x94,0xc1,0xe3,0x8d,0x51,0x59, + 0x0e,0x54,0x06,0x4e,0xa5,0x4d,0x44,0x48,0x3f,0xec,0x81,0x7b,0xba,0x78,0xa5,0xcc, + 0xe3,0x61,0x05,0x39,0x4a,0x40,0x95,0xce,0x24,0xe7,0xf2,0x40,0x85,0x83,0x43,0x06, + 0xb4,0x28,0x43,0x45,0x3e,0xac,0xa9,0x74,0xb7,0x7b,0xd4,0x45,0xef,0xbc,0x8b,0x8f, + 0xbf,0xc3,0xfd,0x76,0x60,0xa5,0x62,0xbf,0x48,0x7e,0x63,0x1d,0x9b,0xc6,0x01,0xe4, + 0x55,0x26,0x47,0x58,0xa1,0x1f,0x29,0xca,0x45,0xe2,0xc8,0xbe,0xdd,0xdd,0x79,0x30, + 0x93,0x3a,0xd1,0x09,0x53,0xa2,0xea,0x1f,0xee,0x54,0xc6,0x4a,0x52,0x5d,0x90,0xce, + 0x7e,0x0a,0x19,0x11,0x8d,0x2f,0xc0,0xab,0x45,0xdf,0x0b,0xb0,0xaf,0xd1,0x54,0x83, + 0xae,0xa0,0x24,0x24,0x6f,0x66,0x01,0x42,0xd7,0x4d,0x80,0x1d,0x47,0x54,0x0e,0xa3, + 0x9d,0xb6,0x50,0x8e,0x03,0xdc,0x10,0x53,0x6b,0x0e,0x5e,0xfe,0x54,0xc6,0x63,0xcf, + 0xee,0x6f,0x28,0x69,0x0b,0x8c,0x68,0x30,0xce,0x02,0x93,0xff,0x24,0x50,0x80,0x31, + 0xd1,0x8c,0x62,0x84,0xfc,0x69,0x2e,0x95,0x5e,0xb4,0xb2,0x7f,0xbb,0xa7,0x3c,0x88, + 0x14,0x66,0x47,0x2d,0xae,0x0c,0x6a,0x24,0xa5,0x89,0x44,0x86,0x1c,0xf3,0x32,0x1e, + 0x28,0x6e,0x59,0x56,0xbd,0x76,0x3b,0xab,0xb6,0x41,0xfb,0x28,0x2a,0xda,0x7a,0x6a, + 0x6a,0x97,0xee,0x03,0xa2,0x7c,0xc1,0x4d,0x36,0x54,0xdf,0x36,0xe2,0x94,0xe1,0x7d, + 0xe4,0x7a,0xe9,0x95,0x10,0xa0,0xeb,0x3e,0x0c,0x6a,0xbb,0x60,0xcd,0x50,0xaf,0xf4, + 0x1f,0x11,0xf8,0x3b,0x14,0x85,0xca,0x14,0x54,0x9f,0xbf,0xfa,0xf0,0x82,0xf7,0x6d, + 0x10,0xa9,0xb3,0xb3,0xae,0x65,0x67,0x7b,0x4e,0xa9,0xce,0x1e,0x2f,0x24,0x95,0x8b, + 0x61,0x7e,0x9a,0xb0,0x6d,0x60,0xcb,0x65,0x8c,0x41,0x56,0x50,0xca,0x49,0x34,0x06, + 0xfc,0x13,0xbd,0x60,0xc5,0xb6,0xd2,0x89,0xac,0x85,0xa0,0xed,0xe0,0xbc,0xc0,0x30, + 0xc2,0x30,0xc5,0xdd,0x84,0x14,0x8f,0x26,0xa5,0x82,0x22,0x75,0xaf,0xe2,0x95,0x5c, + 0x32,0xa1,0x0a,0x7f,0x88,0x69,0xf2,0x14,0xc8,0x1c,0x09,0x10,0xfe,0x24,0x69,0x49, + 0xeb,0x21,0x40,0x17,0xa7,0x01,0x6d,0xa0,0xc2,0xb1,0xcc,0x9a,0xc2,0x7a,0x22,0x66, + 0x00,0xec,0x3b,0xd7,0x8e,0xa7,0x06,0xce,0x4f,0x00,0x92,0xba,0x18,0x34,0xfe,0x30, + 0x8c,0x83,0x04,0x96,0x9c,0x76,0xb4,0x27,0x69,0x9a,0xc9,0x44,0x1a,0xc3,0xbb,0xb6, + 0xa8,0x45,0x00,0x76,0x33,0x7f,0x5d,0xb3,0xf4,0xa9,0x8d,0x1e,0x1d,0x23,0x71,0x55, + 0x84,0xc4,0xfe,0x7a,0x92,0x36,0xce,0xa6,0xc0,0xa8,0x30,0x09,0xee,0xa3,0x0c,0x46, + 0xe8,0xf0,0x48,0xb0,0xb6,0x62,0xd6,0xca,0x63,0x3c,0x87,0xe3,0x10,0x35,0x6f,0xc9, + 0xe4,0x4e,0x36,0x0c,0x14,0x6c,0x99,0x04,0xc6,0x08,0x0a,0xac,0x0f,0xd0,0x5e,0x33, + 0xe1,0x15,0x8d,0x99,0x1d,0x5e,0x8e,0x89,0xec,0x35,0xce,0x3a,0xdd,0x5b,0x3c,0x57, + 0x1d,0xed,0x2e,0x41,0x00,0x79,0x31,0x84,0x79,0x2d,0x77,0x8a,0x70,0x13,0x87,0x6e, + 0x9c,0x3d,0xcf,0xd3,0x0c,0xe3,0x70,0x01,0xb8,0xaa,0x67,0x7e,0x36,0x9e,0x81,0xef, + 0x79,0x26,0x66,0x69,0x38,0xc7,0xd8,0x5f,0x0e,0xcf,0x39,0x1c,0x88,0x6f,0xff,0x1c, + 0x65,0xf4,0x36,0xc3,0xca,0x41,0x13,0xdc,0xc1,0x40,0x0a,0x88,0xa9,0x9c,0x2c,0x48, + 0x0f,0x28,0x38,0x96,0x85,0xf4,0x6b,0xf6,0x9f,0x46,0x2a,0x21,0x63,0xaf,0x94,0xf3, + 0x80,0x7d,0xa4,0x42,0x2d,0x2c,0xf5,0xf6,0xa3,0xb1,0xd6,0x22,0x28,0xad,0xf2,0x08, + 0xf7,0xea,0xa1,0xf2,0xc7,0x92,0x2d,0xac,0xde,0xe3,0xba,0x3f,0x4a,0xf9,0x41,0x1b, + 0x43,0xb6,0xc8,0x3d,0x8b,0x3c,0x82,0x99,0x27,0xb8,0x6d,0x3f,0x35,0x5a,0x63,0x42, + 0xac,0x23,0x97,0x08,0x1c,0x7a,0x68,0x64,0x4f,0x58,0xc7,0xba,0x98,0xa1,0xdf,0x06, + 0x97,0x5e,0x95,0x2b,0x4a,0x8a,0x3c,0x1a,0x62,0x44,0xd7,0xec,0xac,0x46,0x4a,0x87, + 0x3b,0x03,0x27,0xd9,0x20,0x01,0xb3,0x23,0x6f,0x70,0xc8,0x79,0x77,0x03,0x97,0x12, + 0x82,0xaa,0xce,0x43,0xd3,0x1b,0x6a,0xa6,0x22,0x8a,0xcb,0x32,0x4e,0x9c,0x07,0x0b, + 0x74,0x3a,0x46,0xc3,0x64,0xa0,0x61,0x86,0xd4,0x00,0xd8,0x0e,0xb3,0xb6,0x19,0x4e, + 0x53,0xcf,0xc0,0xf4,0xc4,0xbb,0x10,0x53,0x62,0xb7,0x16,0x4e,0x56,0xa3,0x61,0x0c, + 0x4b,0xd4,0xc6,0xfd,0x53,0x9e,0xd9,0xe6,0x05,0xdd,0xb7,0x17,0x92,0xcd,0xa1,0x16, + 0xa0,0x31,0x0b,0x86,0x51,0x1c,0x15,0xcb,0x96,0xe9,0x6a,0x02,0x88,0x0f,0xab,0x0a, + 0xc8,0x50,0x62,0x6d,0x21,0x3e,0x81,0x59,0xd3,0x81,0x15,0x21,0xd3,0x03,0x4d,0x8c, + 0xa6,0x89,0xba,0xd5,0xec,0xf3,0xb2,0x2a,0x55,0x85,0xa5,0x07,0x8d,0xca,0x2b,0xd1, + 0x42,0x15,0x35,0x61,0x44,0x72,0x83,0x95,0x23,0x58,0x70,0x30,0x00,0x95,0x65,0x84, + 0x1c,0x38,0x44,0x49,0x08,0x58,0x36,0xbd,0x4d,0x83,0x4b,0x56,0xc2,0x8c,0x27,0xdc, + 0x1c,0x16,0x97,0xa2,0x65,0x3b,0xcf,0x11,0xc7,0xe3,0xd8,0xaf,0x23,0x52,0x18,0x6c, + 0xc3,0xe9,0xdc,0xf0,0x1a,0x23,0x96,0x6d,0xdf,0x23,0x23,0x57,0xc1,0xa4,0x92,0x2c, + 0x77,0xb0,0xf5,0xb9,0x2c,0xe6,0xd9,0x67,0xf1,0x34,0x1b,0xe3,0x77,0xf0,0xf3,0xd1, + 0x7d,0xf8,0x59,0xdb,0xfd,0x77,0x72,0xf1,0x7b,0x39,0x93,0x78,0xbc,0x10,0xd8,0xd3, + 0x40,0x84,0x41,0x6c,0xcc,0x69,0x55,0xb2,0xa9,0xb5,0x49,0xfc,0x8f,0x29,0x16,0xd8, + 0x92,0x31,0xc4,0xd5,0xaf,0x09,0xd9,0xe4,0x28,0xe9,0xd5,0x16,0xc6,0xbd,0x65,0xa2, + 0x17,0x18,0xf3,0xb8,0x73,0xa6,0xc7,0xf7,0x99,0xa9,0x0e,0x9f,0xdc,0x39,0x53,0xb6, + 0x0f,0xb1,0xa6,0x97,0xca,0x79,0x65,0x32,0x4a,0xb1,0xda,0x78,0x94,0xce,0x41,0xab, + 0xb2,0xb9,0x84,0x02,0x1e,0xf4,0xe1,0x92,0x8e,0x53,0x50,0x70,0x79,0x21,0x91,0x9c, + 0xb1,0xfe,0xab,0x44,0x07,0xf2,0x0d,0x07,0xaf,0x73,0x2a,0x74,0x0e,0x90,0x58,0xc7, + 0x63,0x99,0xfb,0xe2,0x6d,0xa5,0xe8,0x72,0x49,0x7c,0x7a,0xbb,0x34,0xdb,0x41,0x36, + 0xcf,0xed,0xb8,0xfb,0xfd,0xe8,0x46,0x2b,0xc5,0xbb,0xf0,0x79,0x72,0x1f,0x7c,0x1a, + 0x73,0x5c,0x18,0x5d,0x79,0x3f,0x4d,0x10,0xb0,0xe2,0xdf,0x42,0x35,0x63,0x68,0x3f, + 0xa5,0x82,0x2a,0x05,0x36,0x22,0x5b,0x10,0x54,0xe2,0xfd,0xf4,0x2d,0x61,0x1d,0x70, + 0x05,0x66,0x36,0xd8,0x77,0x46,0x0d,0xd2,0x53,0x8e,0xf8,0x13,0x1c,0x09,0x6d,0xeb, + 0x90,0xe1,0xe7,0x91,0x18,0x8b,0xea,0x3b,0x71,0xf2,0xf0,0x3e,0x38,0xe1,0x83,0x7c, + 0xee,0x81,0x8a,0x97,0xb8,0x8d,0x0b,0x7d,0x4a,0x10,0x77,0x33,0xf2,0xce,0x40,0x5e, + 0x72,0x64,0x80,0x6d,0xa1,0xb5,0x04,0xc7,0x96,0x33,0x67,0x82,0x51,0x31,0x07,0xf9, + 0x05,0xf2,0x35,0x45,0x97,0xe5,0x56,0x0a,0xda,0x62,0x29,0xb2,0xcb,0x72,0x56,0x99, + 0x35,0x3c,0xcf,0x9a,0xc9,0x13,0xdc,0x61,0x64,0xdd,0x69,0x5d,0xad,0x7f,0x80,0x90, + 0x9d,0xb6,0xf5,0xd0,0x7b,0xa7,0x6d,0xcc,0x49,0x01,0x38,0xe6,0xec,0xb4,0xbd,0xf2, + 0x88,0xa4,0x7f,0x6a,0x46,0xe5,0xb9,0x4c,0x61,0x3a,0x9a,0xe3,0x26,0x64,0x1f,0x46, + 0x7a,0x11,0x4b,0xbc,0x7c,0xb6,0x7c,0x15,0x42,0x8b,0xd5,0xde,0x3f,0x35,0x1d,0x84, + 0xdb,0x71,0x6b,0x07,0x9a,0x81,0x71,0x4f,0x19,0x52,0x1f,0xdf,0xa1,0xc2,0xe9,0xef, + 0xed,0xb5,0xdb,0xa6,0xb0,0xe7,0x17,0xc6,0x25,0x9a,0xaa,0xa4,0x23,0x4b,0x44,0xa2, + 0x8e,0xfd,0xdb,0xee,0xaa,0x06,0x20,0x6a,0x65,0x45,0x48,0xb6,0xbb,0x8d,0x0b,0x7f, + 0xab,0x0d,0x23,0x4b,0x13,0x06,0xbb,0xd3,0x56,0x0c,0x20,0x1e,0xab,0x98,0xf0,0x75, + 0xc4,0x87,0xb9,0x28,0xd4,0xb1,0xdb,0x6d,0x11,0x9d,0x63,0x2d,0xa6,0x1e,0xef,0x6a, + 0x26,0x13,0x08,0x3b,0x23,0x67,0xb7,0xf2,0x4a,0xa5,0x01,0x56,0xb1,0xd5,0x20,0x34, + 0xca,0x0a,0x13,0x38,0x09,0x0a,0xdc,0x0f,0xb2,0xcd,0xd2,0xc0,0xde,0x8c,0xb1,0x61, + 0x5c,0xcc,0x5b,0x0d,0x9a,0x6d,0x96,0x0c,0x5b,0x29,0xd8,0x95,0x31,0x4e,0x88,0x27, + 0x2a,0xef,0x10,0x85,0x34,0x17,0xa1,0x55,0xb6,0x0a,0xef,0x6e,0x31,0xd6,0x82,0xa9, + 0xc4,0x0d,0xf2,0x0b,0x00,0x04,0xbb,0x62,0xf3,0x31,0x64,0x4f,0x9a,0xa0,0x29,0x0d, + 0x18,0x76,0xf9,0x87,0x4a,0xea,0x48,0x12,0x48,0xff,0x99,0x0c,0x92,0xa2,0x66,0xaa, + 0x00,0x39,0x01,0xbb,0x61,0x4f,0xe5,0x9a,0xf0,0xf4,0xd0,0x13,0xd2,0x8f,0x1c,0x5e, + 0x3f,0x9c,0x4a,0xb1,0x69,0x70,0xc0,0xb7,0xf8,0xf9,0x7b,0x69,0xe1,0x12,0x18,0x00, + 0x0f,0x6b,0x23,0xa8,0xec,0x05,0xc7,0xd5,0x1a,0x4d,0xd1,0xf0,0x55,0xa2,0x89,0x94, + 0x52,0x1e,0xdb,0xa3,0x4f,0x88,0x23,0x57,0x8d,0xe9,0x20,0xa4,0x03,0x5b,0x94,0x41, + 0xb7,0x56,0x2d,0xd6,0x0e,0x5c,0x5d,0x56,0x23,0x42,0x90,0xc3,0x58,0xa4,0x88,0xe3, + 0x60,0xdb,0x31,0x30,0x98,0x72,0x3d,0x6c,0x93,0x60,0x5f,0x56,0x88,0x20,0x97,0x09, + 0x9d,0x2a,0xa8,0xcc,0x6e,0x5b,0xb2,0xba,0x78,0xa1,0xd8,0x55,0xec,0x74,0x3d,0xd1, + 0x39,0x84,0x3f,0x47,0xfe,0x1e,0x1e,0xf9,0x06,0x32,0xe7,0xb5,0x5c,0xf6,0x2b,0x56, + 0x46,0x6b,0x10,0x8f,0x3a,0x03,0x91,0x82,0xef,0x23,0x0f,0x5a,0x0c,0x9a,0x0a,0xcf, + 0x7c,0xab,0x26,0xe9,0xde,0xdc,0x7c,0xfc,0xe4,0x5d,0x0c,0xfe,0xf5,0xfc,0xa7,0xb7, + 0xbe,0x2a,0x70,0x47,0x4f,0x34,0x5e,0x36,0xa1,0x29,0x15,0x16,0x45,0xe3,0xe6,0xc5, + 0x60,0x30,0xe0,0xbe,0x5d,0x96,0x0b,0x7d,0xae,0x04,0x83,0x07,0x83,0x8b,0xbe,0xee, + 0x7c,0x3c,0x00,0x81,0x60,0x2c,0x30,0xc7,0xf5,0xc6,0x17,0xe6,0x01,0x9a,0x6f,0x8e, + 0xe9,0x6b,0xac,0x73,0xfd,0x63,0x1f,0x4b,0x0c,0xf2,0x7f,0xf9,0xf0,0xe6,0xc7,0x81, + 0xe3,0x98,0xa3,0x51,0xf2,0x66,0x34,0xe8,0xf4,0x23,0x54,0xa7,0x7e,0x2c,0x93,0x49, + 0x31,0xed,0x47,0x07,0x07,0x65,0x79,0x00,0x8e,0x23,0x11,0x94,0x8f,0xd1,0xa7,0x3e, + 0x9e,0x0b,0x27,0x6f,0x6e,0xa4,0x6e,0x78,0x7a,0xe8,0xa2,0x7d,0x1f,0x25,0xf3,0xb2, + 0xf6,0x05,0x9b,0x07,0x83,0x52,0x86,0x8d,0x00,0x6b,0x85,0xd4,0x62,0xac,0xe9,0x04, + 0x4e,0x59,0x38,0x15,0xf8,0xa4,0x25,0xde,0xe2,0x81,0x6e,0x0e,0x6b,0x0a,0xa7,0x1f, + 0xf8,0x24,0x81,0xe5,0xc7,0xce,0xa7,0xaa,0x9d,0x05,0xf4,0x2e,0x6d,0xd5,0xd1,0x72, + 0xdc,0x39,0x28,0x63,0x0c,0xce,0x76,0x95,0xa5,0xc3,0x64,0x5b,0xb5,0x14,0xbf,0x73, + 0xaa,0x91,0xff,0x34,0x07,0xca,0x38,0x07,0x0e,0x1a,0x15,0x78,0xd0,0x5e,0x59,0x05, + 0xb5,0x26,0x7f,0xe5,0xc7,0xee,0xa7,0x3b,0x3f,0x0a,0x37,0x3e,0x3a,0xfc,0x74,0x73, + 0xe3,0x94,0xa3,0x8d,0x7d,0xdc,0x0e,0x99,0x84,0x3f,0xe0,0x36,0xd8,0x66,0xa0,0xf1, + 0xb4,0xd2,0x0b,0xc7,0xc6,0xf5,0x60,0x7c,0x61,0xae,0x1e,0x8c,0x77,0x0c,0xc4,0x18, + 0x5e,0x69,0x0a,0x21,0x04,0xa9,0x6a,0x3d,0x6a,0xdf,0x3c,0x8d,0x63,0xf8,0x8c,0x44, + 0x49,0x59,0xf2,0xc2,0x9f,0x57,0x54,0xc1,0x1d,0xd8,0x84,0x41,0x10,0xf1,0x63,0x20, + 0x89,0xda,0x9c,0x9a,0xd1,0x41,0xf7,0xb4,0xdb,0x79,0xe2,0x74,0x9c,0x9e,0xe3,0xb8, + 0x07,0x78,0x0f,0xfd,0xad,0x6c,0x75,0x64,0x9f,0xc1,0xf4,0x0f,0x72,0xfa,0x47,0xa5, + 0xad,0x5e,0x54,0xa2,0x20,0x35,0xe2,0x12,0xe0,0x1c,0xa5,0x33,0x10,0x48,0xe8,0x6d, + 0x81,0xd8,0xb6,0x94,0x4c,0xaf,0x7e,0x36,0xd9,0x28,0xcd,0x96,0xd8,0x4b,0x13,0x0f, + 0xc1,0xe1,0xa3,0x12,0x3d,0x71,0x21,0x33,0x14,0x7a,0x52,0x4d,0xb5,0x24,0x3b,0x12, + 0x8a,0x5a,0x58,0xc7,0x55,0xba,0x38,0x1a,0x85,0xdf,0x41,0x9f,0x80,0x65,0x01,0x56, + 0x52,0x46,0xe7,0xe4,0x60,0x6f,0x1c,0xe3,0xc7,0x81,0x8a,0x60,0x88,0x3a,0x89,0x29, + 0x80,0x5d,0x77,0x6d,0x1f,0x99,0x03,0xaa,0x40,0xf2,0xf2,0x19,0x55,0x98,0x0a,0x18, + 0xa3,0xd1,0x45,0x75,0x11,0x91,0x5c,0x90,0xa0,0x4b,0x42,0x76,0x11,0xe5,0x15,0x88, + 0x35,0x74,0xc1,0x53,0x76,0x56,0x42,0x50,0x2c,0x28,0x19,0x41,0x37,0xa0,0x80,0x62, + 0x65,0x08,0xb2,0x10,0x25,0x69,0x0c,0xd6,0x0d,0x29,0x49,0x25,0x19,0x0a,0x4c,0x82, + 0x63,0x6f,0x58,0x5e,0x03,0x6a,0xe2,0x0f,0x26,0xe0,0xf2,0x07,0x34,0x9b,0xfc,0xa9, + 0x5f,0x89,0xc2,0x70,0x9e,0x5b,0x92,0x30,0xe4,0x53,0x37,0xc1,0x38,0x02,0xe2,0x52, + 0xed,0x47,0x0f,0x8f,0x3b,0x1d,0xd7,0x9b,0xd6,0x9e,0x7e,0x4b,0x4f,0xdb,0x47,0x0f, + 0xf1,0xd5,0xac,0xfe,0x0a,0x1f,0xb6,0x1f,0x76,0x8c,0x50,0x0b,0x5d,0x63,0x2f,0x1d, + 0x38,0xa1,0x70,0x0e,0xa6,0x07,0xce,0xd4,0x41,0x01,0x35,0x35,0x2f,0xf0,0x09,0xbc, + 0x98,0x1d,0x38,0x33,0x47,0x7f,0x34,0x33,0xef,0xf8,0xa1,0xbe,0x51,0x07,0x8e,0x72, + 0x90,0x4c,0x61,0x56,0x3f,0x65,0x08,0x7a,0x50,0x1e,0x0a,0x36,0x9a,0x46,0xa0,0x3c, + 0x48,0x69,0x19,0x25,0xcb,0x7c,0x7a,0xae,0xcd,0x8c,0x48,0xc6,0xe0,0xe5,0x89,0x1f, + 0xd1,0xb2,0x50,0xf8,0xd5,0xd2,0x52,0x96,0xad,0x60,0x92,0xa4,0x58,0xd0,0xc4,0xfa, + 0x24,0x52,0xb6,0x66,0x25,0xc5,0x87,0xe6,0x9a,0xb2,0x42,0xdc,0xcd,0xf7,0x27,0xae, + 0x85,0xc2,0x0c,0x2b,0xe5,0xde,0xc9,0x7c,0x6c,0x21,0x12,0x6c,0x4e,0x90,0xf2,0xba, + 0x88,0x03,0xf8,0x95,0x84,0x72,0x6c,0xa9,0x09,0x3a,0x73,0x76,0xf0,0xf1,0x93,0x9e, + 0xb4,0xf2,0x31,0x90,0xf1,0x3e,0x8d,0x25,0xe8,0x14,0x27,0x9b,0x0f,0x41,0xa9,0x81, + 0x39,0xe1,0xb8,0x05,0x9f,0xaf,0xea,0xbc,0x9b,0x0f,0x99,0xed,0x31,0x42,0xbe,0xf9, + 0x85,0x9a,0x0f,0xd1,0x60,0x1d,0xda,0x9f,0x9c,0x9b,0x4f,0xa0,0x35,0x26,0x3c,0xd1, + 0x9c,0xf1,0x95,0x04,0xf1,0x92,0x8c,0xe4,0x1b,0xf0,0x20,0xf1,0x43,0xf0,0x5f,0x62, + 0x30,0x28,0x1c,0x16,0x19,0xfa,0xd3,0x7a,0xb3,0x27,0xce,0xbb,0x38,0x58,0xa2,0x96, + 0x05,0x89,0xf1,0x8c,0x76,0x9a,0x54,0xfd,0x6a,0xa9,0xe3,0x5e,0xcb,0xb8,0x14,0x80, + 0x01,0x80,0xd8,0x87,0xfb,0xda,0x81,0xbe,0x3e,0x7a,0xe0,0x4d,0x47,0xfc,0xdf,0xff, + 0x23,0x1c,0xaa,0xff,0xc3,0x89,0x58,0x5f,0x15,0xf9,0x7c,0xe3,0x23,0xc7,0x59,0xc1, + 0x8a,0x23,0xaa,0xb0,0xb6,0x7a,0x80,0xc7,0xe6,0xf6,0xd7,0xf0,0xae,0x71,0x4e,0xef, + 0x15,0x02,0xa5,0x75,0x3b,0x5e,0xc2,0x1a,0x7f,0x00,0x5d,0x25,0xf5,0x59,0x3f,0x9e, + 0x31,0xbd,0x78,0xaf,0xae,0xe5,0xba,0x00,0xe7,0xa7,0xf1,0x25,0x9b,0xb2,0x33,0xb0, + 0x1f,0xa9,0x48,0x05,0x65,0x49,0x0e,0x1e,0x84,0xe2,0x9e,0x98,0xd9,0x29,0x7d,0x87, + 0x6f,0x51,0xfc,0x58,0x8e,0x0f,0x7f,0xb1,0x30,0xb6,0x31,0x2f,0x12,0xd8,0xa8,0xa9, + 0x75,0x04,0xa7,0x0e,0x61,0x23,0xe5,0x95,0xae,0x96,0x00,0x8a,0xc4,0x1c,0x0a,0x6d, + 0x15,0x18,0xa2,0xcb,0xce,0xc6,0x0d,0x53,0x33,0x6f,0x70,0xc6,0x38,0xc5,0x02,0x37, + 0x19,0x87,0x60,0x32,0x5a,0x09,0x11,0xdf,0x90,0x0e,0x0d,0xae,0x8d,0x01,0xa6,0xba, + 0x35,0x3d,0xe6,0xf0,0x8c,0xb4,0x1e,0xe3,0x26,0x0a,0xa9,0xa3,0xd6,0x4a,0xf9,0xbc, + 0xef,0xfd,0x49,0xd3,0x5c,0x1d,0x38,0x88,0x9a,0x39,0x09,0xd6,0x04,0x86,0xbc,0x80, + 0x85,0xef,0x39,0x9c,0x9a,0x4a,0xc7,0x63,0xea,0x6f,0x55,0x11,0xa4,0xae,0x9e,0x7c, + 0x47,0x98,0xd2,0xf0,0x10,0xbb,0xca,0x84,0x62,0x0b,0xd6,0xc9,0x28,0x20,0x04,0xf1, + 0x00,0x15,0x3a,0xe5,0x11,0x5a,0xa3,0xc1,0xca,0x32,0xbd,0x5f,0x1e,0xb2,0x04,0x46, + 0xc4,0x3c,0xc3,0x38,0xa4,0xe9,0x67,0x48,0xe6,0x28,0x85,0x67,0xb1,0x6e,0x15,0x4c, + 0x57,0x3c,0x57,0xda,0xf4,0xac,0x45,0x1c,0x88,0x78,0x76,0x5e,0xab,0xbc,0x2b,0x45, + 0x0e,0xab,0x04,0x02,0xf4,0x74,0x89,0xc5,0x90,0xec,0x56,0xe0,0x41,0x68,0x98,0x5f, + 0xad,0xea,0x36,0xcd,0xc1,0xa9,0x81,0xbd,0x4c,0x65,0x5a,0x96,0xc9,0x80,0x24,0xae, + 0x7f,0x0b,0xc2,0x19,0x07,0x77,0x20,0xdc,0xc9,0xca,0xa8,0x41,0x8e,0x94,0x40,0x3b, + 0xeb,0xb4,0xdb,0x85,0xb0,0x19,0xdc,0x6b,0xbf,0x20,0xa0,0x14,0x72,0x08,0xca,0x60, + 0x1d,0xf1,0x88,0x25,0xf8,0x18,0xed,0x57,0x5e,0x38,0xe4,0xec,0x96,0x53,0x2d,0xc1, + 0x53,0x13,0xdc,0xc6,0x96,0xca,0xe8,0x4d,0xf6,0x58,0x48,0xda,0x8d,0x09,0xad,0x4a, + 0xc2,0xfa,0x84,0x88,0x62,0x0c,0xf7,0xc2,0xd5,0x7f,0x72,0x77,0xff,0x69,0xfa,0x61, + 0xfb,0xba,0xd1,0x6a,0x90,0x17,0x42,0x18,0xee,0x55,0xbb,0xd6,0x51,0x4e,0x62,0x2f, + 0x05,0xdc,0x63,0x39,0x33,0x73,0xa8,0x0c,0xfd,0xdb,0xb1,0xa0,0xa1,0xff,0xed,0x2f, + 0xff,0xbb,0x9a,0xd7,0x2d,0xc4,0x6c,0xe6,0x08,0x86,0x19,0x20,0xe9,0x0e,0x14,0x03, + 0x72,0x68,0x15,0x7f,0x56,0x4f,0x48,0x51,0x91,0x6b,0xd6,0xec,0xca,0x87,0xed,0xf2, + 0x85,0x0b,0x54,0x3e,0x06,0xfd,0x81,0x82,0x89,0x2c,0x22,0x6d,0xec,0x95,0x5c,0xf0, + 0x4a,0xbd,0x21,0xe4,0x3d,0x71,0x18,0x89,0xd0,0x8a,0xdd,0xa4,0x28,0xa9,0x0c,0x39, + 0x5b,0x09,0xf4,0xcb,0xfb,0x74,0x21,0xf3,0x92,0x41,0xcb,0xc7,0x55,0x95,0x19,0xbc, + 0xab,0x6a,0xbe,0xa8,0x01,0x4c,0x84,0x2a,0x3a,0x36,0x26,0x6d,0x68,0x05,0xa0,0x15, + 0x4d,0xe7,0x00,0x1e,0x00,0x79,0x80,0x5f,0x0a,0xf7,0x06,0x1a,0x71,0x20,0xf0,0x05, + 0x43,0x89,0x2f,0xf4,0x95,0xeb,0x94,0x5a,0x66,0x0c,0x73,0x99,0xe3,0x9a,0x54,0xe2, + 0x02,0x0b,0x35,0xd6,0x46,0xb3,0x50,0x45,0xdf,0x7c,0x48,0x0b,0x3c,0xa3,0x19,0xae, + 0x7e,0x46,0xce,0x6e,0x77,0x3b,0xc7,0x8f,0x4e,0xbe,0x7f,0xf8,0x5d,0xb7,0x83,0xd7, + 0x30,0xd0,0x9b,0x67,0x68,0x3e,0xc9,0x6a,0x31,0x74,0xf5,0x07,0xf4,0x4b,0xb5,0xbf, + 0x3e,0x9f,0x84,0x5c,0x75,0xf6,0xc4,0x74,0xd6,0x2e,0x1f,0x41,0x6f,0x9d,0x5e,0x07, + 0x56,0xe3,0x5b,0x8b,0x0c,0xb6,0xc3,0xe7,0xa0,0xdb,0x39,0xe3,0x89,0x38,0x2b,0x23, + 0xe9,0x59,0xce,0xa3,0x66,0x68,0x72,0x1a,0xb0,0x28,0x7d,0x73,0x16,0x59,0xa8,0x81, + 0x00,0xfc,0x32,0x94,0xb0,0xe5,0x24,0x64,0xee,0x8b,0x12,0xbe,0x8b,0x94,0x32,0xd0, + 0xca,0x9c,0x89,0x98,0xa0,0x7c,0xa6,0x9d,0x71,0xe0,0x43,0x03,0xe3,0xf4,0x39,0x18, + 0xbb,0x51,0x96,0xe1,0x6b,0xed,0x3e,0x55,0xb0,0x6a,0xba,0x5b,0x3c,0x9e,0xdc,0x4b, + 0x06,0x53,0x90,0x91,0x31,0x9e,0x68,0xa0,0x6e,0x3a,0xe5,0x62,0x63,0xe0,0x7c,0x63, + 0xb5,0xf1,0x21,0xca,0x61,0xa5,0x22,0xb0,0x9d,0x88,0x36,0x61,0x65,0x73,0xb8,0x85, + 0xbb,0xf0,0xd9,0x0c,0xe4,0x30,0x74,0x36,0xcf,0x9e,0x10,0x2a,0x80,0x6b,0x13,0x4a, + 0xb8,0x03,0x69,0xea,0xf3,0x0b,0x9d,0xb2,0xff,0x28,0xdb,0xde,0xbb,0xf2,0xa3,0xac, + 0x57,0xb2,0x10,0x35,0xc5,0xa2,0x10,0x68,0x6c,0xdc,0x17,0x1a,0x41,0x93,0x0e,0x5d, + 0xbb,0xba,0xd5,0x5a,0x87,0xd3,0x3a,0x9c,0xd8,0x36,0xca,0x80,0x3d,0xbb,0x8f,0x0f, + 0xfd,0xee,0xc3,0x47,0xfe,0xb1,0xdf,0x75,0x5c,0xf3,0x36,0x39,0x68,0x26,0x20,0x9e, + 0xba,0x4f,0x1c,0xc1,0xb8,0x00,0x98,0xf5,0x95,0x72,0x8c,0xda,0x7e,0x8f,0xa8,0x95, + 0xa1,0x09,0xb8,0x92,0xa8,0xdf,0xbd,0x7f,0x51,0x2f,0x6c,0xaf,0xac,0x9b,0x01,0xd9, + 0x3b,0x9e,0xc7,0xdc,0x55,0xb9,0xad,0x91,0xf4,0x71,0x74,0x59,0xe9,0x0b,0xd2,0x62, + 0xbc,0x5e,0x18,0xb3,0xa3,0x0a,0x70,0x6b,0xf6,0x80,0xfd,0xcb,0x28,0xd0,0xa5,0x30, + 0xfb,0xfb,0x0f,0x18,0x6d,0x15,0x93,0x62,0x7d,0xca,0x6e,0xbe,0x81,0xa5,0x87,0xf7, + 0x74,0xe6,0x34,0x58,0xaa,0xc0,0x25,0x87,0xc7,0x80,0x82,0xd7,0xc4,0xa2,0xc4,0x24, + 0x1b,0x6d,0xdf,0x29,0x90,0x47,0x86,0xb5,0xa0,0xed,0x1b,0x91,0xe1,0x93,0x6a,0x75, + 0xe6,0xeb,0xc3,0x91,0xed,0x0e,0xcb,0x82,0x55,0x2e,0x15,0x5c,0xe3,0x0d,0x65,0x74, + 0x89,0xb4,0x03,0x98,0xc4,0x43,0xca,0xfa,0x7b,0x8c,0x16,0x5d,0x24,0x60,0x3c,0x14, + 0x2e,0x8c,0xe0,0xe8,0x0c,0xa8,0x44,0xc5,0xd1,0x5d,0x2e,0x5a,0x42,0x76,0xb1,0x36, + 0x81,0x23,0xed,0x93,0xc6,0xf2,0xb8,0xa7,0xb2,0x58,0x82,0xe2,0x80,0xda,0x44,0x7e, + 0x05,0xd6,0x42,0xa2,0x2b,0x40,0x66,0x11,0x50,0x47,0x32,0xd9,0xac,0x99,0x88,0x38, + 0x33,0x96,0x5e,0x48,0xa5,0xd7,0xbd,0x2a,0xef,0x30,0x50,0x60,0xc4,0x8b,0x4a,0xa1, + 0x00,0x08,0xcd,0x8e,0x69,0xc9,0x6e,0xe8,0xf8,0x19,0x76,0x93,0x21,0x10,0xf6,0x25, + 0xd6,0xd4,0x26,0x05,0x2a,0x42,0x7d,0xf9,0x00,0x34,0x21,0x6a,0x38,0xe7,0x49,0xf9, + 0xa8,0xe7,0x18,0x79,0x58,0x17,0x83,0x72,0xc3,0xfd,0x0f,0x0f,0x9a,0xe5,0x57,0xff, + 0xc6,0xf8,0x03,0xb2,0x25,0x6c,0xd6,0x1e,0xa2,0xda,0xe8,0xdb,0x1d,0xb5,0xb6,0xa8, + 0xb9,0x0f,0x55,0x59,0x0f,0x9d,0x7f,0x8d,0xa8,0x70,0x0e,0x24,0xb2,0x8d,0x34,0x8b, + 0x51,0xc6,0x46,0x9c,0x0f,0x41,0x46,0x4a,0xd9,0xac,0x43,0x95,0x1a,0xce,0x11,0x03, + 0x93,0xb4,0x3c,0xfb,0x5d,0x9f,0x09,0x9f,0x84,0xe8,0x05,0x9b,0x38,0xac,0xef,0xd4, + 0xe1,0xa1,0xe2,0x12,0x24,0x6e,0x0c,0xdd,0x38,0x77,0x56,0x97,0x7c,0x03,0x80,0x51, + 0x92,0xe9,0xe7,0xf7,0xaf,0x7e,0x48,0x67,0x19,0xac,0x00,0x98,0xda,0x7a,0x9f,0x74, + 0x5d,0x41,0x6f,0xc1,0x9b,0x63,0x1d,0xde,0xef,0xdc,0x03,0x2f,0xdb,0xe0,0x17,0x3f, + 0x91,0x71,0x62,0x00,0xa2,0xf9,0x2f,0x2d,0xfc,0x2c,0xca,0x88,0x39,0x39,0xc7,0x58, + 0xce,0x83,0x92,0x90,0x8e,0x86,0x0e,0x50,0x48,0x1b,0x5f,0x18,0xec,0xf9,0x57,0x60, + 0xdc,0x01,0x6f,0xb3,0x29,0xce,0xf6,0xba,0xce,0x8c,0x55,0xfd,0x21,0x7d,0xf1,0x81, + 0x9d,0xb4,0x69,0x23,0xb3,0xf3,0x39,0x8a,0x63,0xa6,0xea,0x2b,0x91,0xea,0x18,0x5b, + 0x81,0x34,0x31,0x1d,0x9b,0xa7,0x5c,0xce,0x54,0x9d,0xf3,0xc9,0x79,0xd5,0x63,0x6c, + 0x0a,0x12,0x70,0x74,0xc1,0x3b,0xff,0x9b,0x25,0xff,0x7a,0x25,0xed,0xad,0x07,0x6d, + 0xfe,0x11,0xcf,0x6c,0xd5,0x21,0x9b,0x0f,0xe5,0x59,0x8b,0x8c,0xfc,0x7f,0x7b,0xf5, + 0xe2,0x17,0x34,0xb5,0x2b,0x17,0xcc,0x51,0xec,0xa4,0x71,0x59,0x90,0xe1,0x6f,0xf0, + 0x09,0x8b,0x69,0x4f,0xbc,0xee,0x6a,0x8b,0x95,0x83,0xe5,0xe4,0x74,0x51,0x40,0x39, + 0x11,0x6f,0x7e,0xff,0xe1,0x03,0xd8,0xa2,0x4a,0xa1,0xb7,0xce,0x51,0xe9,0x32,0x6b, + 0xcf,0x75,0x6a,0xa5,0xeb,0x45,0x41,0x1d,0x1d,0x31,0xe0,0x10,0x3e,0xd1,0x10,0x2f, + 0x3a,0x51,0x12,0x6e,0xd7,0x02,0xab,0xd5,0x84,0xe1,0x31,0x8d,0x65,0x22,0xe3,0x1f, + 0xb4,0x66,0x91,0x57,0x23,0x99,0xb1,0xf0,0x62,0x0e,0x9e,0xa5,0x18,0xb3,0x13,0x74, + 0x7a,0x8b,0x21,0x2b,0x5f,0xbc,0xfb,0xe9,0xfc,0x83,0x0e,0x42,0xb1,0x2b,0x99,0xc4, + 0x4b,0x94,0x7b,0x20,0xf9,0xb0,0x37,0x0a,0x14,0x95,0x9b,0x47,0x89,0x68,0xd1,0xa1, + 0x68,0xba,0x02,0xc3,0x05,0xe0,0xdb,0xd0,0xb1,0x91,0x3a,0xde,0x94,0xf0,0x16,0x16, + 0xc5,0xc5,0x79,0x54,0x87,0xa1,0x67,0x11,0xc3,0xcc,0x74,0xe0,0x3f,0x4a,0xcc,0xe9, + 0xb6,0x65,0x24,0x1c,0x93,0x2f,0x0c,0x23,0x78,0x49,0x5c,0xad,0xcc,0xa2,0x9c,0x7c, + 0x4d,0x95,0x04,0x99,0x75,0x06,0x26,0x4b,0x13,0x8a,0xcb,0x1b,0x00,0xf9,0xe0,0x2f, + 0x9f,0xa8,0x3f,0x96,0x3f,0xd3,0x59,0x13,0x6a,0x9e,0xd1,0x91,0x97,0x52,0x5b,0x45, + 0xec,0x36,0xd0,0xc6,0x76,0x80,0xb0,0xd0,0x31,0xa9,0x2c,0x5e,0x56,0x75,0x87,0x94, + 0xc4,0x49,0xb1,0xb4,0x2f,0x49,0xe7,0x93,0x69,0x99,0x84,0xd6,0xeb,0x48,0xe5,0x1d, + 0x97,0xb2,0xca,0x78,0xe1,0xa1,0x59,0x61,0xdf,0x3e,0x91,0x80,0xe6,0x4a,0x08,0xa6, + 0x99,0x92,0xb9,0x83,0x72,0x42,0x71,0x74,0xdf,0x82,0x6f,0xd0,0x59,0x0f,0x0f,0xb0, + 0x05,0xce,0xee,0xb9,0x07,0x43,0x8f,0xf8,0x4c,0x2b,0x0c,0xc7,0xd0,0xdd,0xfe,0xfe, + 0x73,0xa0,0x3a,0xfe,0xb5,0x9a,0x53,0xab,0x27,0x2b,0x52,0x03,0xdc,0x8e,0x1b,0x5f, + 0x80,0xcf,0xed,0x60,0x38,0xee,0x69,0x01,0x53,0x87,0x7b,0x7e,0xe2,0xa0,0x11,0x93, + 0x6a,0x77,0x80,0x3e,0x60,0x87,0xfb,0xd6,0x6f,0xf0,0x03,0xd6,0x1c,0xab,0x0a,0x6a, + 0x8c,0xdc,0xe1,0xcf,0x22,0xb9,0xd7,0x7c,0x4a,0x37,0x5e,0x83,0x29,0x15,0x25,0xe3, + 0xd4,0xf1,0xb0,0x67,0xde,0xe1,0x82,0x3f,0x24,0x53,0x7d,0x04,0x80,0xdb,0x13,0xa5, + 0x29,0xda,0x68,0xa9,0xe6,0x78,0xd0,0xc5,0x1d,0xc7,0x75,0xff,0x44,0x63,0x07,0x03, + 0x30,0x04,0x3f,0x81,0x60,0x80,0x34,0xc1,0x0e,0xf4,0xce,0x7a,0xce,0x22,0xb8,0xd0, + 0xd7,0x1c,0x82,0xa6,0x9f,0xa7,0x71,0x2a,0x42,0x77,0xbc,0x6b,0x2c,0x2b,0x4d,0xc3, + 0x9e,0x83,0x2c,0xe0,0x78,0x23,0xb4,0xe3,0x7a,0x60,0xa4,0xb6,0x30,0x95,0x2c,0x1d, + 0x53,0x73,0xc4,0x3b,0xf2,0x54,0xef,0xda,0xd1,0x7a,0xa0,0xf5,0x61,0x99,0xa1,0x67, + 0x15,0x64,0x19,0xb0,0x10,0x99,0xf1,0xed,0xab,0xd6,0x62,0xb1,0x68,0x21,0x3f,0xb4, + 0xe6,0x79,0xcc,0x0a,0x09,0xec,0x7d,0xaf,0x3c,0x7b,0x2a,0x5c,0x82,0xbd,0x9b,0x0c, + 0x2c,0x9c,0x76,0xa1,0x8b,0x8e,0xe3,0xae,0x38,0x9c,0x75,0xe7,0x8f,0xe6,0x74,0x4c, + 0x78,0xb1,0xfa,0x4d,0x9c,0x6d,0x1f,0x96,0x89,0x16,0x1b,0xa9,0xfc,0xfb,0x44,0xc1, + 0x55,0xd3,0x7a,0xe8,0x59,0x98,0x7e,0xd4,0xe9,0x94,0x89,0x94,0x1a,0x4a,0xcb,0xf8, + 0x89,0xce,0x6b,0x2e,0xb1,0x54,0x68,0x88,0x8a,0x5d,0xef,0x9b,0xc2,0x40,0x0b,0x4a, + 0x00,0xa7,0xb2,0x2b,0x0c,0x5c,0x23,0x8c,0x81,0x6c,0x01,0x0c,0x18,0xe3,0xd9,0xfa, + 0x6f,0xc1,0xf0,0x38,0x18,0x19,0x03,0x71,0x18,0x85,0x2c,0x5a,0xe9,0x2d,0x26,0x15, + 0x49,0x52,0x19,0xdf,0x5c,0xac,0x73,0x91,0xae,0xab,0x1d,0x37,0xf1,0x73,0xd7,0x22, + 0x16,0xbc,0xb7,0xfc,0xd9,0x72,0x72,0xe4,0x87,0xb0,0x2c,0x01,0xab,0xcf,0xfc,0x42, + 0x03,0x83,0x60,0x2a,0xa2,0x40,0xe0,0x2d,0xf0,0x27,0x58,0x1c,0x99,0xe7,0xd5,0xc4, + 0x90,0xfc,0x2b,0x1e,0x0b,0xc2,0xf0,0x05,0x6e,0xb1,0xff,0x11,0xa3,0xdf,0x09,0x0c, + 0xe8,0x10,0xa0,0x8e,0x67,0xcd,0xb9,0x24,0x77,0x8a,0x34,0xe2,0xcf,0x30,0xed,0xd5, + 0x78,0xee,0xb3,0xfa,0x20,0xb2,0xc7,0x2e,0x2c,0x55,0xba,0x71,0x66,0xf0,0x3f,0x96, + 0x3a,0x7d,0x4a,0xbf,0x5a,0xb4,0xa1,0x40,0x59,0xc4,0xd3,0x2f,0xa9,0x58,0x82,0x9d, + 0xf6,0x10,0xa0,0x0e,0xad,0x9d,0x59,0x8c,0xdd,0xe8,0x63,0x8b,0xcd,0x31,0x85,0x46, + 0x6b,0x72,0x00,0x72,0xab,0xda,0x34,0xba,0x52,0x9a,0xa3,0x1d,0x59,0x63,0x52,0x3a, + 0x3c,0x89,0x25,0x1d,0xfa,0x38,0xd5,0x87,0x2f,0x92,0xf6,0xf2,0xc5,0xef,0x5e,0x68, + 0x45,0xa8,0xf7,0x26,0x3f,0xa9,0xe2,0x1d,0x83,0xea,0x67,0x65,0xb0,0xb4,0xaf,0x65, + 0x52,0xfe,0xb9,0x24,0x0f,0x01,0x75,0x1a,0xff,0x8c,0x9c,0x67,0xca,0x7a,0xf1,0x29, + 0xcf,0x12,0x7f,0x0c,0x0c,0xed,0xb9,0xa1,0x9c,0x62,0xad,0x6e,0x54,0xe8,0x0a,0xc5, + 0x30,0x0f,0x26,0xe8,0xab,0x03,0xb9,0x61,0x57,0xa4,0x72,0xd1,0x69,0x37,0x11,0xaf, + 0x04,0x77,0x42,0x93,0xb3,0xcc,0x72,0x33,0x07,0xb3,0x8a,0xd5,0x08,0xc0,0xf5,0x94, + 0x63,0x67,0x44,0x55,0x1e,0xdc,0xbf,0x4a,0x5e,0xd2,0xf8,0xd5,0x93,0xdf,0x63,0x7f, + 0xe1,0xa0,0xd5,0xc5,0x9b,0xf3,0x1d,0x8a,0x07,0x5e,0xbd,0x1b,0x15,0xcd,0x61,0x59, + 0x2d,0x52,0x4a,0x8a,0x43,0xaf,0xfc,0x51,0xb3,0x6e,0xa7,0xe3,0x59,0x2e,0xe0,0x10, + 0xa3,0x1f,0xed,0xc3,0x93,0x13,0xb7,0x26,0xd8,0xd7,0xc3,0x45,0x43,0xa3,0xbd,0x4a, + 0x68,0x6f,0x6e,0x2c,0x05,0x56,0x07,0xea,0xe6,0x46,0x47,0xfd,0x87,0xe8,0x04,0xf1, + 0xb2,0x3a,0x6b,0x29,0x88,0x6c,0x50,0x42,0xdb,0x07,0x1e,0x82,0x1b,0xe0,0x1f,0xde, + 0xd9,0x94,0xe9,0x07,0xad,0xcb,0x35,0x8b,0x3d,0xe3,0x10,0x8d,0x0d,0xe6,0x7c,0x96, + 0x01,0x94,0x4d,0x0b,0x3a,0x83,0xbb,0x9b,0x9b,0x12,0x6d,0xa7,0x9d,0x6d,0x83,0xf3, + 0xbb,0xbe,0x8d,0xdc,0xbe,0x8d,0x7b,0xca,0x0b,0xe8,0x0f,0x2e,0x2b,0xa1,0x7b,0x52, + 0xa1,0x12,0x0f,0xfa,0xb1,0x50,0x99,0x7d,0x07,0x0f,0xf0,0x40,0x48,0x40,0x25,0x29, + 0xa9,0x32,0xd5,0x05,0xab,0x8f,0x3f,0x1b,0xb8,0xbe,0xb0,0x7d,0x86,0x98,0x87,0x3f, + 0x1b,0x74,0xdc,0x72,0x3a,0x68,0xac,0x83,0x1a,0x9e,0xc8,0x42,0x2b,0xb9,0x2d,0x44, + 0xec,0x1c,0x5c,0xea,0x1f,0x67,0xc3,0xfe,0x2b,0x11,0x63,0x36,0xef,0xa3,0xc6,0xb9, + 0xba,0xb9,0x79,0x70,0xe5,0x63,0xe5,0x00,0xcb,0xca,0xea,0x73,0x92,0x8b,0x78,0x94, + 0x21,0x4a,0x4c,0xd0,0x63,0x57,0xfb,0xfb,0x57,0x3a,0x2f,0xf9,0xc4,0x01,0xb7,0x82, + 0xa2,0xc8,0x3d,0x67,0xa7,0x2c,0x75,0x6b,0xc2,0x94,0x67,0x48,0x6e,0x86,0x11,0xab, + 0xbc,0xa2,0x9b,0x12,0x91,0xf6,0xc1,0xd5,0x24,0x62,0xb9,0x28,0x19,0x1e,0xfd,0xf9, + 0x0a,0xfc,0x3d,0x34,0x8a,0x99,0x18,0xbc,0x6e,0x87,0x72,0x58,0x11,0x98,0x32,0x6f, + 0x9b,0x99,0x5b,0x37,0x8f,0x76,0x13,0x49,0xb5,0xaa,0x59,0x7f,0x8d,0x63,0xd6,0x6d, + 0x92,0x12,0xe9,0x00,0x38,0xfc,0x01,0xe6,0x7d,0xa7,0x6b,0x43,0xf8,0xc8,0x15,0x16, + 0x48,0xba,0x5e,0x64,0x84,0x07,0x12,0xc7,0xe5,0xd9,0xae,0xb3,0x1e,0x5f,0xd2,0xb9, + 0xb2,0x1b,0x07,0xd2,0xb2,0x41,0x1b,0x90,0x29,0x99,0x53,0x02,0xb7,0x3a,0x9b,0x76, + 0x28,0x39,0x6f,0x1c,0xe8,0x53,0x6a,0x8d,0xdd,0x2a,0x71,0x33,0x01,0x08,0xa0,0xfa, + 0x78,0xcd,0x94,0xad,0x63,0xac,0xe9,0xe3,0x47,0xae,0xa7,0x73,0x84,0x94,0xad,0x68, + 0x4b,0x3c,0x45,0x16,0xe1,0x6c,0xac,0x09,0xc2,0x86,0x31,0xbb,0xf1,0xe0,0x04,0x2b, + 0x77,0x38,0x95,0x71,0xd8,0x54,0xb1,0x07,0x8e,0x1d,0x18,0x04,0x55,0x1e,0x16,0xbc, + 0x1f,0x4d,0x9c,0x36,0x05,0xcf,0xc1,0x45,0x40,0x13,0x06,0x5f,0xbb,0xd7,0x56,0x23, + 0xf8,0x16,0xa8,0x15,0xc9,0x55,0xc5,0x5b,0x16,0x5b,0xcf,0x02,0x3f,0xa8,0x2d,0x39, + 0xf5,0x40,0x0c,0xc6,0xb6,0x0f,0x0e,0xa6,0x7f,0x28,0x74,0x67,0x27,0x73,0x30,0xf2, + 0xe6,0xd9,0xbd,0x9a,0x32,0x8a,0x74,0xf3,0xd5,0x1e,0xcd,0xd5,0x90,0xa4,0x0d,0x46, + 0x25,0x7a,0x11,0x96,0xd5,0xf6,0x57,0x3c,0xd1,0xdb,0x89,0x68,0x4d,0x8d,0xeb,0x53, + 0xf3,0xc8,0x8f,0x16,0x4d,0x0a,0xba,0xe8,0x0c,0xa0,0x3e,0x2f,0xcf,0x2c,0x5e,0xb9, + 0x7f,0x07,0x35,0xa9,0x75,0x74,0x1e,0x29,0x06,0xf0,0xd0,0x7f,0xc0,0x1e,0x80,0x88, + 0xf5,0x8a,0x68,0x7f,0xb0,0xda,0x7e,0x52,0x1e,0x31,0x50,0x3a,0xfd,0xd0,0x17,0xe7, + 0x63,0x95,0xf8,0xe1,0xa7,0xf7,0x2f,0xcc,0x96,0x15,0xe5,0x8b,0x9f,0xb0,0xe0,0x56, + 0x87,0x22,0xb0,0x27,0xd2,0xe2,0xa9,0x22,0x4f,0x28,0xa8,0xe2,0x43,0x94,0x31,0xc3, + 0x4d,0x5a,0xb4,0x39,0x0b,0x23,0x2e,0x8e,0xb5,0x51,0x80,0x89,0xa9,0x08,0xe2,0x0b, + 0x11,0x60,0x27,0xe0,0x36,0xaa,0x54,0xd7,0xea,0x51,0xcd,0x2a,0x25,0xb0,0xb0,0x16, + 0x8d,0x5c,0xcd,0xa9,0x0e,0x7a,0x62,0xe1,0x7b,0x8c,0x49,0x62,0x40,0x0b,0xb8,0x5a, + 0x23,0x1c,0xd7,0xd3,0x3f,0x76,0x82,0xdd,0xe8,0x18,0x03,0xd6,0x52,0x80,0x10,0x88, + 0x54,0xaa,0xd3,0x4e,0x98,0xec,0x51,0xe5,0x66,0x18,0x7d,0xbe,0x33,0x06,0xc8,0xcd, + 0x4e,0x1c,0xfa,0x89,0x21,0x5f,0x9c,0xa7,0x30,0x2b,0xec,0x28,0x10,0x3a,0x48,0xc1, + 0x8e,0x35,0x66,0xdc,0x15,0x28,0xe3,0x48,0x16,0x7a,0x63,0x0f,0x56,0x59,0x16,0xf0, + 0x87,0x38,0x07,0x1c,0x43,0x20,0x14,0xa5,0x2b,0x05,0x81,0x26,0xc9,0xa0,0xa0,0xc5, + 0x53,0x95,0x1d,0x62,0x8e,0x94,0xd1,0x3f,0xe9,0x52,0x06,0x03,0x29,0xc6,0x53,0x71, + 0x94,0x1d,0x35,0xe1,0x05,0xd5,0x41,0x3a,0xcf,0xc4,0x4d,0xb4,0x92,0xaa,0xd6,0x15, + 0xa4,0x73,0xad,0xa5,0x25,0xdd,0xa0,0x5d,0x19,0x53,0x5c,0x8f,0x28,0x5a,0xcd,0x2c, + 0x1a,0x31,0xfa,0x4a,0xfb,0x46,0x3b,0xa3,0x42,0xb4,0x4c,0x6d,0x43,0x43,0xe4,0x7e, + 0x80,0xf7,0xb4,0xee,0x2f,0xfd,0x95,0x1d,0x99,0x59,0xad,0x64,0x0c,0x0f,0x86,0x51, + 0xc5,0xe0,0x9c,0x6a,0xdb,0x9a,0x33,0x13,0x62,0xc2,0x8a,0x27,0xd7,0x47,0x37,0x3e, + 0x18,0xc9,0x66,0xfb,0x7f,0x5c,0xb6,0x3d,0xa7,0xaa,0x09,0x23,0x9f,0x00,0xbf,0xdb, + 0xdf,0xe7,0x7f,0x01,0x1f,0x75,0xec,0x95,0x87,0xd6,0xa0,0x6e,0xd0,0x3b,0x93,0xb6, + 0x84,0xa4,0xf9,0xeb,0x03,0x87,0x64,0xe4,0x5c,0x87,0xee,0xaa,0xfd,0x60,0x1c,0x24, + 0x85,0x76,0xb5,0xce,0x0f,0x1c,0xdf,0xe9,0xaf,0xf5,0x5f,0x26,0x99,0xb4,0x76,0x1e, + 0x38,0x78,0xa0,0x52,0xd9,0x6c,0xa5,0xfd,0x8c,0x4d,0xdf,0xa9,0xfd,0x9d,0x30,0xbf, + 0xf6,0x84,0x05,0xdd,0xe0,0x80,0x25,0x29,0xb2,0xeb,0x79,0x99,0x19,0x36,0x24,0xff, + 0x5d,0x7b,0xb5,0x1e,0x6e,0xbb,0xfd,0xb7,0x2f,0x30,0xd7,0xd1,0xf1,0x7d,0xb4,0x42, + 0xbe,0xd0,0x85,0x20,0xd9,0xc3,0x09,0x48,0x8e,0x0e,0x8a,0x81,0x00,0xd3,0x88,0x1e, + 0x47,0xda,0x7e,0x81,0x47,0x5a,0x24,0xe1,0x53,0x32,0x76,0xc3,0x77,0x14,0x40,0x84, + 0x37,0xd7,0xab,0x7e,0x59,0x3a,0xf1,0x9e,0xa2,0x41,0xe0,0x98,0x0d,0xc4,0xc7,0x93, + 0x8e,0x27,0xaa,0x3f,0x9f,0x40,0x62,0x5a,0xfa,0xc5,0x0e,0x46,0xea,0x50,0xa4,0x60, + 0x7e,0x11,0xcd,0x07,0xfc,0x40,0xdc,0xdc,0xf0,0xbc,0x4d,0xc5,0x99,0x38,0x15,0xc7, + 0xae,0xa8,0x98,0x01,0x23,0x3c,0x4d,0x02,0x13,0x86,0xeb,0xf4,0xe1,0x1f,0x68,0x00, + 0xff,0x1c,0x1c,0x70,0x5f,0xdc,0x5b,0x7d,0x6a,0x03,0x70,0x06,0x5c,0x51,0x2f,0x54, + 0x24,0x8b,0x0f,0xba,0xb0,0x6d,0x3b,0x1a,0xf7,0x63,0xf4,0x49,0xb4,0x45,0xd7,0xb8, + 0xd7,0xd8,0xdb,0x25,0x8c,0x01,0xa8,0xbe,0xd4,0x23,0xd2,0x93,0x33,0x41,0xe8,0xc7, + 0x67,0xdd,0x4e,0xa7,0xea,0x53,0xc5,0xf0,0x04,0x63,0xb8,0x71,0xcb,0x11,0x07,0x22, + 0xb2,0xba,0x51,0xb1,0x01,0x91,0x34,0x29,0xfb,0x1a,0x03,0x71,0x69,0x68,0xc9,0xc6, + 0x25,0x42,0x51,0xbe,0xe2,0x33,0x9a,0x57,0x7b,0x75,0x9b,0x98,0xd7,0xa2,0x59,0xa1, + 0xd0,0x2c,0x5c,0x89,0x2e,0x74,0xdc,0x69,0x0f,0x42,0x2e,0x43,0x98,0x20,0x4a,0x4c, + 0x2d,0xf8,0x4c,0xfd,0x42,0xd2,0x62,0x27,0xa8,0xcf,0x79,0x76,0xed,0x05,0x81,0x1e, + 0xa3,0xe5,0xd6,0xf6,0xc2,0x85,0x5c,0xe2,0x92,0xf3,0x4f,0x6c,0xfb,0x78,0xd7,0xb4, + 0xa9,0x41,0x57,0xeb,0xc0,0x12,0xe2,0x2b,0x53,0xb2,0x53,0x2e,0x99,0xee,0x04,0x35, + 0xcd,0x3b,0xb2,0x90,0x80,0x4a,0x3e,0xed,0x5a,0x49,0xab,0x87,0xda,0x9a,0x12,0x18, + 0xd0,0x0c,0xdf,0x63,0x19,0xea,0x9e,0x09,0xd1,0x50,0x97,0x5c,0x57,0x74,0x81,0xe9, + 0xaf,0x01,0x22,0x7d,0x4b,0x76,0xc1,0x06,0xf8,0xe3,0xc5,0x27,0xb7,0x4c,0xad,0x6f, + 0xa1,0x6b,0x61,0xb3,0x00,0x4b,0xdc,0xb5,0x70,0x14,0x53,0x8a,0xe3,0x69,0xe8,0x74, + 0x54,0x4a,0xe8,0xb0,0x14,0x3d,0x63,0x59,0x2b,0xd6,0x83,0x53,0x26,0x34,0x25,0xae, + 0xc5,0x5a,0x70,0x4a,0xdc,0x23,0x3a,0x25,0x74,0x78,0x8a,0x82,0x53,0xd6,0xfc,0xb9, + 0xfa,0x69,0x9f,0xea,0xac,0x56,0x9b,0xbf,0xe6,0x6c,0x31,0x06,0x8b,0x75,0x61,0xff, + 0xaa,0x73,0xe9,0x09,0x54,0x59,0x26,0x7d,0x9c,0x4a,0x5d,0xae,0x02,0x32,0x38,0xb7, + 0xb5,0x29,0xed,0xae,0xcc,0x10,0x40,0x70,0x6f,0xad,0x1f,0xfe,0xd3,0x72,0x8b,0x83, + 0x43,0x6a,0x81,0x67,0x62,0x2d,0xb8,0xcc,0x89,0x5c,0x69,0x52,0xd6,0xda,0xc2,0xa5, + 0x0d,0x85,0x54,0xfa,0x72,0xa1,0x4c,0x57,0xe6,0xd7,0x18,0x28,0xea,0x10,0x18,0x33, + 0x48,0x44,0x93,0x24,0x25,0x23,0x07,0x03,0xd8,0xb4,0x61,0x8a,0xe3,0x4c,0x3a,0xa6, + 0xc9,0xc1,0x22,0x04,0x98,0xdc,0x1e,0xa0,0x87,0xe6,0x95,0xd8,0xdf,0x17,0x57,0xbe, + 0x09,0xe5,0xa3,0x40,0x28,0x67,0x2d,0x9e,0x58,0xd7,0xb4,0x60,0x95,0xfb,0x23,0xc8, + 0xff,0xf1,0x6a,0x28,0xd1,0x1e,0xd0,0x7a,0x10,0xcf,0xe0,0x78,0x43,0x78,0x1a,0xcc, + 0xef,0x64,0x9f,0x92,0x63,0x8c,0x6c,0xb0,0x99,0x9b,0x78,0xf8,0x65,0x0c,0xf4,0x2d, + 0xb0,0xe6,0x10,0x67,0xcd,0xaa,0xcd,0x70,0x72,0x25,0x20,0x58,0x87,0x94,0x22,0x22, + 0x4d,0x58,0xfc,0xbd,0x42,0x5f,0xac,0x19,0x85,0x57,0x1e,0x46,0x37,0x78,0x14,0x23, + 0xfc,0x4a,0x67,0x0c,0xde,0x78,0x46,0xe6,0x91,0x28,0x21,0x57,0xec,0xd2,0xb5,0x25, + 0x6f,0x5d,0x3c,0x85,0x57,0x5a,0x40,0xe9,0x02,0xb6,0x7f,0x37,0x76,0x2e,0x2b,0xa6, + 0x8e,0x18,0xce,0x55,0xad,0x42,0x15,0x40,0x89,0x4c,0x28,0x88,0x22,0x66,0x74,0xda, + 0x80,0x9c,0x04,0xa3,0xa5,0x59,0xd9,0x3d,0xab,0x0c,0xa8,0xac,0x89,0xd2,0x79,0x17, + 0x6d,0x5b,0xa3,0x99,0xcf,0x51,0x1a,0x8a,0xc9,0xc0,0x62,0x85,0xff,0x0e,0x56,0x5b, + 0x9a,0x4c,0xe8,0xe7,0x7a,0xb9,0x4c,0x95,0x13,0x17,0x9c,0x3f,0x06,0x1d,0xcb,0x5b, + 0xd9,0x80,0xb8,0xb8,0xfc,0x16,0x23,0x52,0x60,0x5f,0x02,0x4c,0xfe,0x1a,0xff,0x7f, + 0x74,0x32,0x22,0x17,0x98,0x1c,0xfc,0xd3,0x75,0x69,0x86,0xe2,0x3b,0x40,0x0c,0x4d, + 0xb3,0xb6,0x2e,0x35,0x5c,0xe3,0x0f,0x8d,0x1b,0xc5,0xc6,0x18,0xbe,0x5b,0x4d,0x55, + 0xb4,0x03,0xc3,0x55,0x8b,0xbf,0x4d,0x87,0xc0,0xfb,0xca,0x40,0x02,0x1e,0x46,0x45, + 0x52,0xad,0x0b,0x8b,0x15,0xf6,0xf4,0x84,0x4d,0x90,0xeb,0x0a,0x1e,0xfa,0xe9,0x83, + 0x04,0x11,0x1b,0x44,0xbb,0x5b,0x6b,0x22,0x64,0x5b,0xcc,0x04,0xf3,0x51,0x1d,0x23, + 0xda,0x22,0x2a,0xaf,0xb6,0x7a,0x8b,0x3a,0x34,0xb0,0x1d,0x08,0x43,0x97,0x46,0x3b, + 0x56,0x23,0x6d,0xa3,0xe6,0x8d,0x21,0x57,0x6e,0x33,0xd2,0x82,0x7d,0xb5,0x57,0x5b, + 0x93,0x9a,0xe7,0xf6,0xfb,0x39,0x66,0x67,0x8d,0x34,0xc1,0xea,0x0d,0x2a,0xb8,0x6c, + 0xfe,0xf6,0x5f,0xff,0x13,0x34,0xff,0x6f,0xff,0xf5,0xbf,0x5c,0xf1,0x37,0x4b,0x54, + 0x52,0xfe,0x4a,0xd7,0xfc,0x9a,0xe3,0x04,0x34,0x24,0x9b,0x69,0x29,0x93,0x8a,0xc2, + 0x58,0xa7,0x95,0x8f,0x01,0x80,0x75,0x0e,0xbc,0x19,0x46,0x79,0xc5,0xd1,0x58,0xe8, + 0xcd,0x84,0xb3,0x51,0xd7,0xa6,0x63,0x29,0x1b,0xcf,0xa1,0x39,0x74,0x01,0xc6,0x4c, + 0x07,0xc5,0x20,0x8a,0x6e,0x4c,0xbf,0xa0,0x18,0xc4,0x03,0xf4,0x4c,0xd1,0x5c,0x2d, + 0x4a,0x65,0x92,0xd7,0x6d,0x45,0x9b,0x08,0x9e,0xd0,0x91,0x45,0x48,0xa6,0x08,0xcb, + 0x9a,0x54,0x0c,0xcd,0xe2,0xee,0x1a,0xdb,0xa7,0xaa,0x3e,0xb4,0xf9,0x60,0xb8,0x5b, + 0x8b,0xed,0x50,0xfb,0x98,0x0c,0x80,0x95,0x29,0xe7,0x83,0x04,0x77,0x29,0x2a,0x8b, + 0xcc,0xae,0xee,0x00,0xa5,0x02,0x80,0x58,0xec,0x0a,0x81,0xd2,0x61,0x35,0x4d,0x65, + 0x5a,0xbd,0x68,0x5d,0xa2,0x97,0x08,0xb9,0xe4,0xb8,0x73,0x8c,0xd8,0xb3,0x8e,0x73, + 0xd0,0xd1,0xf1,0x22,0xd5,0x1a,0xa5,0x4a,0x5e,0x38,0xb6,0x4e,0x29,0xa1,0xaf,0x47, + 0xd5,0xcc,0x61,0x86,0xb7,0x25,0x1b,0xea,0x8c,0x6e,0x93,0x44,0xab,0x0b,0x4a,0xc3, + 0x64,0x2d,0xf4,0x89,0x85,0x5f,0xd6,0x93,0xe9,0x68,0xaf,0xbe,0x57,0xa1,0x79,0xd4, + 0xa1,0xe4,0x53,0xb9,0xc7,0xa1,0x99,0xf1,0xb1,0xb6,0x78,0x16,0xa7,0xde,0xd7,0x78, + 0xda,0xa6,0x73,0x38,0x4f,0xdb,0xd3,0x62,0x16,0x9f,0xed,0xfd,0x3f,0x52,0x93,0x44, + 0x7c,0x9c,0x86,0x00,0x00, }; constexpr size_t HOME_INDEX_HTML_GZ_LEN = sizeof(HOME_INDEX_HTML_GZ); // diff --git a/firmware/patternflow/src/knobs_index.h b/firmware/patternflow/src/knobs_index.h index 6e4aeb6d..a87cf8dc 100644 --- a/firmware/patternflow/src/knobs_index.h +++ b/firmware/patternflow/src/knobs_index.h @@ -12,7 +12,7 @@ static const char KNOBS_INDEX_HTML[] PROGMEM = R"HTML( - + Patternflow - Knobs

Status

-
+ +
+ + +

Device

+
Firmware
-
+
Build
-
+
Last restart
-
+
Busy
-
+
Panel size
-
+

Render

Panel
-
@@ -62,6 +85,7 @@ a{color:var(--muted)}
Total
-
Built into firmware
-
Loaded from storage
-
+
Last load error
-

@@ -71,20 +95,29 @@ a{color:var(--muted)}
PSRAM free
-

Internal heap is the scarce one - the LED panel's DMA buffers -live there. Below ~10 KB this page itself stops loading.

+live there. A pattern module loads only if it leaves 24 KB +of it free; run lower and the network is the first thing to go, while the +panel keeps drawing.

Storage

Pattern storage
-
+
Storage error
-
+

Network

Network
-
Signal
-
Address
-
+
Names
-
+
Hotspot
-
+
Hotspot mode
-
+
Hotspot clients
-
+
Reached via
-
- +
)HTML"; +// http:// is not a secure context, so navigator.clipboard is usually missing +// on a panel's address; execCommand('copy') from the click still works in +// every browser that matters. If both fail the text is shown to copy by hand. +function legacyCopy(t){ + var a=document.createElement('textarea'),ok=false; + a.value=t;a.setAttribute('readonly',''); + a.style.cssText='position:fixed;top:0;left:0;opacity:0'; + document.body.appendChild(a); + a.select();a.setSelectionRange(0,t.length); + try{ok=document.execCommand('copy')}catch(e){} + document.body.removeChild(a); + if(!ok)throw Error('copy refused'); +} +function copyText(t){ + if(window.isSecureContext&&navigator.clipboard&&navigator.clipboard.writeText) + return navigator.clipboard.writeText(t).then(null,function(){legacyCopy(t)}); + return new Promise(function(y){legacyCopy(t);y()}); +} +$('copy').addEventListener('click',function(){ + var m=$('cpmsg'),a=$('cptext'); + if(!last){PF.say('no status yet','err',m);return} + var t='Patternflow status · '+new Date().toISOString()+' · '+location.host+'\n'+flat(last,'',[]).join('\n'); + copyText(t).then(function(){a.hidden=true;PF.say('copied','ok',m)},function(){ + a.value=t;a.hidden=false;a.focus();a.select(); + PF.say('select the text below and copy it','info',m); + }); +}); + +PF.watchStatus(2000); +PF.status(paint); + +)HTML"; // GENERATED by firmware/toolchain/console_pages.py build — do not edit. -// gzip -9 of STATUS_INDEX_HTML (6997 bytes → 2801 bytes), served with Content-Encoding: gzip. +// gzip -9 of STATUS_INDEX_HTML (14087 bytes → 5725 bytes), served with Content-Encoding: gzip. static const uint8_t STATUS_INDEX_HTML_GZ[] PROGMEM = { - 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x02,0xff,0xa5,0x59,0xeb,0x76,0xdb,0xb8, - 0x11,0xfe,0xaf,0xa7,0xc0,0x3a,0x4d,0x28,0xad,0x45,0xdd,0x7c,0x0d,0x69,0xcb,0xc7, - 0x4e,0xe2,0xd3,0x74,0xe3,0x9c,0x34,0xc9,0x3e,0x00,0x48,0x82,0x16,0x2a,0x92,0xe0, - 0x21,0x20,0xcb,0x5a,0xad,0x7b,0xfa,0x10,0x7d,0x97,0xfe,0xef,0xa3,0xf4,0x49,0xfa, - 0x0d,0x48,0x4a,0x94,0x64,0x6f,0xd4,0xd3,0xfc,0x09,0x31,0x98,0xf9,0x30,0x37,0xcc, - 0x0c,0xe4,0x8b,0x9f,0x22,0x15,0x9a,0x45,0x2e,0xd8,0xc4,0xa4,0xc9,0xb8,0x75,0x41, - 0xff,0xb1,0x84,0x67,0xf7,0x97,0x07,0x22,0x3b,0x20,0x82,0xe0,0xd1,0xf8,0x22,0x15, - 0x86,0xb3,0x70,0xc2,0x0b,0x2d,0xcc,0xe5,0xc1,0xcc,0xc4,0xee,0x39,0x6d,0xea,0xb0, - 0x90,0xb9,0x61,0xba,0x08,0x2f,0x0f,0xfa,0x79,0xec,0x86,0x2a,0xd3,0x2a,0x11,0xbd, - 0xbf,0xe9,0x83,0xf1,0x45,0xbf,0xdc,0x05,0x9b,0x95,0xce,0x78,0x2a,0x2e,0x0f,0x1e, - 0xa4,0x98,0xe7,0xaa,0x30,0x07,0x0c,0xbc,0x46,0x64,0x40,0x9b,0xcb,0xc8,0x4c,0x2e, - 0x23,0xf1,0x20,0x43,0xe1,0xda,0x45,0x57,0x66,0xd2,0x48,0x9e,0xb8,0x3a,0xe4,0x89, - 0xb8,0x1c,0xd2,0x51,0x46,0x9a,0x44,0x8c,0xbf,0x70,0x63,0x44,0x91,0xc5,0x89,0x9a, - 0x33,0x97,0x7d,0x33,0xdc,0xcc,0xf4,0x45,0xbf,0xdc,0x83,0x3a,0x66,0x41,0xff,0x7b, - 0x85,0x52,0x66,0xe9,0xba,0x61,0x21,0x78,0xea,0xbd,0x1a,0xbc,0x1b,0xdc,0x0c,0xde, - 0xfa,0xae,0x2b,0xb3,0xa9,0xf7,0xea,0xc3,0xfb,0x0f,0x67,0xef,0x6f,0xb0,0x4a,0x67, - 0x46,0x44,0xde,0xab,0xf3,0xeb,0xf3,0xd1,0xd9,0x08,0xeb,0x98,0xcb,0xcc,0x78,0xaf, - 0x4e,0xae,0x4f,0x4e,0x8e,0x4f,0xfd,0x96,0xeb,0x16,0xb3,0x44,0x78,0xaf,0x46,0xc7, - 0xa3,0xe1,0xf0,0xdc,0x2f,0x97,0xae,0x56,0x31,0x78,0x86,0x37,0xc3,0xb7,0xc3,0x63, - 0xd0,0x12,0x42,0xb8,0xbd,0x3d,0x79,0x37,0xfa,0x80,0x95,0x02,0xfc,0xc9,0xd9,0xcd, - 0xf9,0xd9,0x2d,0x16,0x73,0x5e,0x64,0xde,0xab,0xf7,0x6f,0xaf,0x07,0x47,0xb7,0x84, - 0x96,0xf3,0x4c,0x24,0x10,0x3d,0x1a,0x0e,0x87,0x03,0x22,0x68,0x9e,0x69,0xcf,0xf9, - 0x08,0x27,0x14,0x4e,0x77,0x26,0xed,0xda,0xd5,0xa2,0x90,0x71,0x57,0x2f,0xb4,0x11, - 0xa9,0x3b,0x93,0xdd,0x35,0x91,0x44,0x52,0x95,0x29,0xcf,0xf9,0x8b,0x30,0x37,0x05, - 0x94,0xd5,0xec,0x0e,0x6b,0x2b,0x4b,0x1b,0x3a,0xe7,0xa1,0xe8,0x7e,0xbb,0x25,0xa2, - 0xfb,0x55,0xdc,0xcf,0x12,0x5e,0x74,0xef,0x44,0x96,0xa8,0xee,0x6a,0xfb,0xa9,0xf5, - 0xf3,0x32,0x50,0x8f,0xae,0x96,0xbf,0xc9,0xec,0xde,0x0b,0x54,0x11,0x89,0xc2,0x05, - 0xe5,0xa9,0x15,0xa8,0x68,0xb1,0x4c,0x79,0x71,0x2f,0x33,0x6f,0xe0,0x07,0x3c,0x9c, - 0xde,0x17,0x6a,0x96,0x45,0xde,0x03,0x2f,0xda,0x95,0x2f,0x3b,0x7e,0xa8,0x12,0x55, - 0x54,0x24,0xb8,0xb3,0xe3,0xc7,0x88,0x22,0x5c,0x97,0xca,0x64,0x51,0x91,0x49,0xe5, - 0x8e,0xdf,0x4a,0x64,0x26,0xdc,0x89,0x90,0xf7,0x13,0xe3,0x0d,0x7b,0x27,0xbe,0x3b, - 0x17,0xc1,0x54,0x82,0x97,0x04,0x74,0x8a,0x08,0x4d,0x48,0x05,0x9e,0x51,0xa0,0x25, - 0xd7,0x22,0x7a,0x6a,0xf5,0xe6,0x05,0xcf,0xa1,0xc4,0x63,0x99,0x06,0xde,0xe9,0xf9, - 0x20,0x7f,0xf4,0x6b,0xa5,0x18,0x9f,0x19,0xe5,0xe7,0x3c,0x8a,0x48,0xf0,0x68,0x94, - 0x3f,0xb2,0x11,0xf6,0xd9,0xe9,0x71,0x0e,0xfd,0x29,0x4f,0x45,0xb1,0x8c,0xa4,0xce, - 0x13,0xbe,0xf0,0xe2,0x44,0x3c,0xfa,0x00,0xbe,0xcf,0x5c,0x09,0x5f,0x6a,0x2f,0x14, - 0xe4,0x69,0xff,0x9e,0xe7,0xde,0x39,0x40,0x2b,0x18,0xd8,0x6e,0x8c,0x4a,0xbd,0x21, - 0xd0,0xfc,0xd6,0xca,0x1f,0x25,0x0d,0xd8,0xc8,0x66,0x19,0xb1,0xd2,0x30,0x4a,0x80, - 0x0e,0x94,0x8c,0x90,0x5c,0xa5,0x7e,0x67,0x10,0xaa,0x4c,0xa4,0xcf,0x1d,0xa7,0x21, - 0x3d,0x3a,0x7e,0x05,0x5a,0xf0,0x48,0xce,0x34,0x81,0x42,0xd7,0xe1,0xb2,0x74,0x83, - 0xfc,0x4d,0x78,0xc3,0x13,0x88,0xda,0xe5,0xbc,0x84,0x3a,0x1d,0x0c,0x56,0x36,0xfb, - 0x64,0x87,0x37,0xc4,0xa9,0x7a,0x16,0x2c,0x77,0x9d,0x4d,0x91,0xad,0x82,0x50,0x82, - 0x01,0x7f,0x23,0x48,0x36,0xab,0xa1,0xb5,0x16,0xa1,0x91,0x2a,0xab,0x22,0xec,0x1a, - 0x95,0x7b,0xa3,0x53,0xab,0xcb,0x68,0xb9,0x25,0xbe,0xad,0x4b,0x22,0xe8,0xce,0xb9, - 0x94,0x40,0xe4,0xf8,0xde,0xe0,0xad,0x48,0x7d,0x23,0x1e,0x8d,0x6b,0x0a,0xc4,0x3a, - 0x56,0x45,0xea,0xcd,0xf2,0x5c,0x14,0x21,0xa2,0xe8,0xb7,0x9a,0xa7,0xdb,0x3b,0xd6, - 0x59,0x47,0x70,0xc0,0xce,0xe9,0xcc,0x28,0x69,0x64,0x5a,0xe9,0x1e,0x52,0xe8,0x39, - 0x87,0xdb,0x1b,0x47,0x5e,0x2f,0xd4,0xfc,0xe5,0xe0,0x06,0x38,0x99,0x12,0xce,0x86, - 0xd7,0xc6,0xb2,0x4e,0x93,0x33,0xca,0x92,0xfd,0x62,0x5b,0x1f,0x15,0x99,0x65,0xe9, - 0xf5,0xa6,0x5f,0x8f,0xb6,0xfc,0xba,0x65,0x19,0xa4,0xa2,0xb5,0x4d,0x7b,0xc4,0x89, - 0x74,0xb2,0x3e,0xb4,0x66,0x78,0x05,0x79,0x9b,0x40,0x7a,0x81,0xbc,0x5f,0x6e,0x9d, - 0xbb,0x15,0x10,0x38,0x43,0x4d,0x97,0x4d,0x65,0xd4,0xb4,0xf3,0xd4,0xa3,0x82,0xb3, - 0x41,0x25,0x02,0xe8,0x01,0x8f,0x36,0xc8,0x94,0x94,0x80,0x08,0x78,0xb1,0xac,0x72, - 0xf7,0xe8,0xb9,0xdc,0x5d,0x7b,0xc4,0x6f,0xe4,0x0c,0xe5,0x6a,0x99,0xfb,0xc3,0xc1, - 0xe0,0x75,0x09,0xc3,0xe4,0x2a,0x30,0x41,0xa2,0xc2,0x69,0x7d,0x25,0x88,0xe3,0xf9, - 0x3b,0x01,0xb9,0x4c,0x19,0xb1,0xdc,0xf2,0xc7,0x6e,0xde,0xd6,0xfe,0x45,0xd6,0x20, - 0x77,0x90,0x8a,0x1b,0x45,0xe5,0xf8,0xe4,0xa9,0x15,0xa3,0x90,0xe0,0xda,0x37,0x54, - 0x3c,0x6a,0x84,0xbf,0x4c,0x2b,0x22,0xfc,0x20,0xcd,0x50,0xb0,0xfe,0x8f,0xcb,0xc5, - 0x97,0xbb,0xa9,0xf1,0xd4,0x42,0x03,0xb4,0xfd,0xe8,0xa2,0x5f,0xf6,0x50,0xaa,0xb0, - 0xe3,0x8b,0x48,0x3e,0xb0,0x30,0xe1,0x5a,0xa3,0xf1,0xa1,0xda,0xd5,0x2d,0x56,0x14, - 0xe3,0x0b,0xdc,0xb0,0xac,0xde,0x43,0x91,0xb1,0x2d,0x14,0xa4,0xf1,0xc5,0x64,0x38, - 0xae,0x5b,0x1d,0x3e,0x37,0xf8,0x50,0x16,0x0e,0x98,0x8c,0xd0,0x93,0x01,0xe5,0xd6, - 0x02,0xfd,0x0a,0xb2,0xd5,0x42,0x53,0x2c,0x6f,0x3e,0x50,0x46,0xe3,0xaf,0x22,0x03, - 0x19,0xdb,0x23,0x28,0x82,0x76,0xcf,0x58,0x53,0x1f,0x5c,0x31,0x9c,0x19,0x19,0x74, - 0x59,0xf4,0xaa,0x8b,0x3e,0xbe,0x2e,0xa2,0xc8,0xa2,0xe7,0xf3,0xc2,0xc2,0x47,0xb0, - 0xa3,0x0f,0x91,0x17,0x45,0x6f,0x0b,0xb4,0x79,0x56,0x70,0x23,0x56,0xf2,0x15,0x0b, - 0x12,0xbb,0xd4,0x34,0xce,0xf5,0xff,0x82,0x65,0x64,0x2a,0x36,0x74,0x89,0xcd,0x7e, - 0xe2,0xd7,0xb0,0xfb,0x41,0xb0,0xbc,0x1c,0x19,0x36,0x20,0x78,0xb8,0x8d,0x81,0xff, - 0x68,0xfc,0xc9,0x6b,0x14,0xca,0xcf,0x83,0xda,0x74,0xbb,0x00,0x67,0x4e,0x11,0xa9, - 0xdc,0xb9,0xe5,0xd9,0x6a,0x30,0xd1,0x3f,0xf4,0xed,0x77,0x65,0xf8,0x96,0x6f,0xf7, - 0xb4,0xe7,0x66,0x26,0x13,0xc3,0x90,0x71,0x8a,0xc5,0xb2,0x48,0x71,0xbd,0x37,0xfd, - 0x92,0xe7,0xfb,0xe1,0x7c,0x52,0xc8,0x8d,0x88,0xc5,0x85,0x4a,0x99,0x36,0xaa,0xe0, - 0xf7,0x5b,0x38,0xe9,0xde,0xbe,0x49,0x00,0xb5,0x87,0x73,0xee,0x44,0xaa,0x8a,0xc5, - 0x0f,0x5d,0x63,0x67,0xa1,0x8c,0x27,0x0c,0xd9,0x9b,0x43,0x3f,0xb1,0xa9,0xd7,0x44, - 0xee,0x69,0x1f,0x6a,0x81,0xd0,0xc6,0x02,0x30,0x5b,0x91,0x36,0x61,0x92,0xfd,0x60, - 0xbe,0x7c,0xfb,0x7a,0x7d,0xf7,0x8c,0x16,0xf9,0x3e,0xde,0xd9,0xb2,0x45,0x6a,0x66, - 0x26,0x82,0x61,0x9c,0x2d,0x42,0xc1,0x54,0x26,0x30,0xbc,0x12,0xe1,0xd3,0x87,0xf7, - 0xcc,0x0e,0x86,0x8e,0x66,0xef,0xef,0xae,0x59,0x30,0x8b,0x63,0x51,0x68,0x0c,0x4f, - 0x48,0x5c,0x30,0x14,0xa2,0xc7,0x6e,0x04,0x0d,0xbb,0x7f,0x1f,0x0e,0xd8,0x2f,0x37, - 0xa0,0x01,0x2a,0x47,0xc4,0x98,0x34,0x68,0x79,0x31,0x05,0x30,0xd7,0x8c,0xe2,0x80, - 0x72,0xd7,0xfb,0xc3,0x28,0x7c,0xab,0x63,0xfd,0xc3,0xdb,0x6f,0x53,0xf9,0xd9,0xdc, - 0x88,0xf5,0x73,0xd6,0x37,0x61,0xd0,0x10,0x00,0x23,0x2b,0x6e,0x5a,0x31,0x5b,0x06, - 0xab,0x39,0xdf,0x1b,0x50,0xae,0xc8,0x4a,0xfc,0x45,0x5d,0x3f,0x0b,0x33,0x57,0xc5, - 0xf4,0x87,0xba,0xae,0xf8,0x1a,0x3a,0xea,0x3d,0xcb,0xcb,0x37,0x34,0xde,0xad,0xab, - 0x58,0xec,0x29,0x7a,0x1d,0x45,0x85,0xd0,0x7a,0x43,0x56,0x3e,0x9b,0x18,0x1b,0x16, - 0x96,0xcd,0x6a,0x7c,0x5b,0xdd,0x5e,0x56,0x56,0x72,0xeb,0xa9,0x79,0xa3,0x7a,0xaf, - 0xa8,0x0f,0xd6,0x97,0x25,0x95,0xbd,0x49,0x65,0x84,0xae,0xe0,0x97,0x09,0xd3,0x90, - 0xcd,0xb3,0xb5,0x6c,0xeb,0x4d,0x16,0xe8,0xdc,0xbf,0xe0,0x6c,0x52,0x88,0x18,0x8f, - 0xb2,0x83,0xf1,0x9f,0x15,0xd5,0x4f,0xde,0x00,0x58,0xef,0x56,0xb5,0x11,0x56,0xaf, - 0xeb,0x17,0xc7,0x89,0x95,0xa2,0xad,0xda,0x92,0xfa,0x25,0x17,0xcf,0x32,0x6b,0x0c, - 0xfb,0x53,0x5b,0x76,0x96,0x85,0x30,0x33,0xe4,0x09,0x5e,0x90,0xb3,0x14,0xd3,0x75, - 0xef,0x5e,0x98,0x0f,0x89,0xa0,0xcf,0x9b,0xc5,0xc7,0x08,0x1c,0x4f,0x6b,0x81,0x69, - 0xd0,0x0e,0x56,0x12,0xc1,0xf8,0x72,0x38,0x38,0x3e,0x3f,0x39,0x3b,0xbd,0x6a,0x07, - 0xfd,0xea,0xb3,0xd3,0x33,0xea,0x56,0x3e,0x8a,0xa8,0x3d,0xea,0x1c,0x3a,0xec,0xee, - 0xc6,0xf1,0xee,0xb8,0x99,0xf4,0xec,0xf0,0x60,0xd9,0x46,0xc7,0xb4,0xf1,0xcb,0x8d, - 0xd3,0xc0,0x8d,0x66,0x45,0x5b,0x77,0x96,0x08,0x14,0x9c,0xc5,0xa2,0x4b,0x2b,0x82, - 0xe7,0xa1,0x02,0xb9,0x7f,0x7e,0x7a,0x3c,0x18,0x74,0xba,0x93,0x0d,0xea,0x6b,0x4b, - 0xed,0x1f,0x9d,0xd2,0x16,0xe4,0xe8,0x5f,0xba,0xc9,0x41,0x7b,0xfd,0x53,0x6c,0x3f, - 0x5e,0xea,0xd7,0xa7,0x78,0xad,0x31,0x26,0xe3,0x76,0xd4,0xa9,0x0d,0x3e,0x74,0x22, - 0xe6,0x1c,0x4e,0x0e,0x9d,0x89,0xe3,0x63,0x63,0x52,0x6f,0x10,0x05,0x1b,0xe9,0xa1, - 0x93,0x3a,0x95,0x50,0x5a,0xef,0x11,0x11,0x7b,0x8f,0x87,0x8e,0x76,0xfc,0x8a,0x56, - 0x2e,0x5a,0x0d,0x73,0xc2,0x44,0xb7,0x45,0xd2,0x0d,0x3b,0x4b,0x91,0xf4,0x6c,0xd6, - 0x7d,0xa6,0x67,0xb3,0x83,0xe6,0x09,0xe1,0xf0,0xa9,0xb5,0x66,0x35,0x32,0x9c,0xb6, - 0xad,0xe5,0xb1,0x30,0xe1,0xa4,0xed,0xf4,0x79,0x2e,0x31,0x72,0xd0,0x9c,0xe0,0xc0, - 0x99,0x13,0x91,0xb5,0x6b,0xe6,0x76,0xb1,0xf2,0x7d,0x81,0xc7,0x39,0x08,0x9d,0xa7, - 0x6d,0x96,0xc8,0x62,0x31,0x84,0xd6,0x99,0xe5,0x04,0x80,0xe9,0xf4,0x5d,0xf5,0x46, - 0x07,0x05,0xc7,0x93,0xaf,0xa3,0xde,0x2c,0xa7,0x8e,0xdc,0xf1,0x6b,0xe6,0x78,0xbe, - 0xc5,0x1c,0xf5,0x1e,0x50,0xc3,0x00,0xe9,0x63,0x37,0xcf,0x76,0x76,0x6d,0xfe,0x96, - 0xe2,0xfd,0x3e,0xfb,0xbe,0xae,0x68,0x9a,0xcd,0x27,0xdc,0x30,0xa4,0x91,0x46,0xa9, - 0x44,0xe1,0xcd,0xf4,0x04,0xe3,0x3a,0x7a,0xd5,0x1c,0x9a,0x62,0x66,0x4b,0x05,0xcd, - 0x50,0x8c,0xeb,0xa9,0x66,0x78,0x76,0xa0,0xb6,0x26,0x79,0x17,0xf4,0x1a,0x4b,0x1a, - 0x36,0xe1,0x28,0xb5,0x8a,0x69,0xbe,0x80,0x90,0x0c,0x27,0xab,0x56,0x89,0xd2,0x09, - 0xec,0x35,0x2c,0x1d,0xa7,0xe2,0x1e,0x7b,0xa7,0xb0,0x07,0x76,0xcd,0xb2,0xf2,0x49, - 0x5a,0x83,0x41,0xe7,0x82,0xb3,0xff,0xfc,0xe3,0x9f,0x04,0x5b,0x15,0xf0,0x48,0xc4, - 0x7c,0x86,0x26,0xcc,0xb3,0xc8,0xae,0x33,0x25,0xb5,0x55,0x1c,0xb2,0x0c,0x85,0xc8, - 0x4c,0xc0,0xdc,0xab,0x3d,0x83,0x8c,0xdc,0x32,0x1e,0xee,0x03,0x51,0xe2,0xd1,0xfb, - 0xe6,0xcd,0xea,0xf3,0xa7,0xcb,0x4b,0x27,0x84,0x16,0x4e,0xe7,0xaa,0xed,0xb0,0x7f, - 0xff,0x8b,0x3c,0x5d,0xef,0x75,0x3c,0x07,0x09,0x52,0xab,0xf4,0x15,0x53,0x9d,0xab, - 0xb2,0x64,0xc1,0xa8,0x35,0xf8,0x65,0x4f,0x99,0x4b,0x44,0x9f,0x51,0xc7,0x80,0x41, - 0x99,0xa5,0x55,0x3f,0xc3,0xb0,0x09,0x3c,0x66,0x7d,0x8b,0x2e,0x02,0xe3,0x58,0xc4, - 0x8b,0x69,0x8d,0x45,0x89,0x02,0x09,0xf2,0x4c,0xa9,0x78,0x86,0xd1,0x37,0xbb,0xef, - 0xb2,0x40,0x84,0x7c,0xa6,0x45,0x69,0xdf,0x2c,0x0d,0x10,0x4b,0xd0,0xa8,0x07,0x81, - 0x92,0xa2,0xd5,0xa8,0x29,0xca,0x0e,0xac,0x91,0x21,0x4f,0x56,0xce,0x92,0xd4,0xad, - 0xd8,0x1c,0x6e,0x27,0x8f,0x91,0x7f,0xb8,0x4e,0x84,0xc8,0x19,0xc2,0x94,0x13,0x5e, - 0xd4,0xb5,0x88,0xf1,0x6a,0x3e,0x24,0xb7,0xd9,0x19,0x24,0x10,0xb1,0xb2,0xf1,0x11, - 0x35,0x5a,0x59,0xe1,0xe6,0x38,0xc3,0xaa,0x5c,0x3a,0xd4,0xde,0x6f,0xac,0x90,0x41, - 0x16,0xf9,0xf7,0xdf,0xa3,0x5e,0x65,0xe8,0x17,0x7b,0xc0,0x2a,0x23,0x31,0xb1,0xed, - 0x24,0x9d,0x15,0xb9,0x72,0x4a,0xa5,0x1c,0x6f,0x4b,0xf4,0xca,0x29,0x75,0x64,0xc1, - 0xa2,0x76,0x9e,0xe3,0x39,0x7c,0xce,0xa7,0xc2,0xd9,0x82,0x5d,0x5f,0xca,0x15,0x28, - 0x3d,0xb4,0x1c,0x1b,0xa8,0x35,0x27,0x4d,0x01,0xcf,0x2b,0x51,0x95,0x9c,0x2b,0xc7, - 0x4e,0xd9,0xc8,0xc1,0x18,0x29,0x6c,0x64,0x92,0xd4,0xd1,0xcb,0xca,0x9e,0xd6,0x63, - 0xd7,0xd9,0x82,0x4d,0x33,0x15,0x90,0x0f,0x83,0x19,0xde,0xad,0x19,0x23,0x8d,0x34, - 0x72,0xac,0x0b,0xf7,0xa2,0xf0,0x0a,0xdd,0xcc,0x81,0x17,0xa3,0xef,0x54,0x67,0xee, - 0x9a,0x6d,0x6f,0x5f,0x2d,0x80,0xcf,0x89,0x4a,0x68,0x90,0xb0,0x38,0x55,0x73,0xa8, - 0xc2,0x47,0xb7,0xca,0x4e,0x54,0xa9,0x1d,0xe6,0x7a,0xec,0xa3,0x61,0xe8,0x81,0xa8, - 0xfc,0xba,0xbc,0x9e,0x0b,0x35,0xb3,0xd9,0x14,0x61,0xbc,0xe9,0x39,0xeb,0xbc,0xa5, - 0xb8,0x61,0xe4,0x87,0xf9,0x36,0xf6,0xbf,0xea,0xab,0xa1,0x38,0xed,0xaf,0x56,0xde, - 0x60,0x5d,0x49,0x72,0xbd,0xe3,0xb2,0x5a,0xa6,0x4d,0xa1,0xbf,0x72,0x90,0x5c,0x8e, - 0x07,0xbe,0x55,0xaf,0x18,0x52,0x4b,0xb0,0x82,0x9e,0xe3,0x56,0x11,0xa0,0x22,0x5a, - 0xc3,0x75,0x4b,0x39,0x2b,0x34,0xbe,0x3c,0x3e,0xb9,0x72,0xd4,0xb4,0x5a,0x8c,0x4e, - 0x56,0xa1,0xc3,0x1b,0xd9,0x69,0x54,0x34,0xf3,0x92,0x1a,0x6f,0xde,0xfc,0x64,0xf1, - 0xda,0x2b,0x0a,0xda,0x12,0xfa,0xc8,0x66,0xeb,0x4a,0xb5,0xb3,0x56,0x06,0x78,0x78, - 0x6d,0xec,0x00,0x72,0xfb,0x38,0x39,0x6c,0xd7,0x5f,0x1f,0xf5,0x9d,0x8a,0xf0,0x10, - 0xbd,0x72,0x18,0x6b,0xa7,0xf6,0xb3,0x03,0x14,0x2c,0x82,0x6a,0xec,0xef,0x90,0x86, - 0xab,0x0c,0x33,0xcf,0x94,0xd5,0xb2,0x83,0xdb,0xaa,0x9b,0xef,0x6e,0x23,0x58,0x28, - 0xac,0xeb,0x1c,0x4d,0x77,0x58,0xca,0x63,0x75,0x75,0x0a,0x75,0xbc,0x1e,0x0d,0x96, - 0x30,0x0e,0x4f,0x96,0xaa,0x3b,0x58,0xd9,0x7a,0xec,0xdf,0xee,0x12,0x9f,0x38,0xc6, - 0xee,0x12,0xc5,0x8e,0xa4,0x1e,0x4a,0xd9,0x06,0xc8,0x96,0xb7,0x10,0xbc,0x0a,0x94, - 0x31,0x72,0x1b,0x63,0x97,0x0c,0x49,0xc5,0xa3,0x86,0x1c,0x2d,0xff,0x50,0xec,0x10, - 0x12,0x18,0xf2,0xa9,0xa2,0x34,0xa5,0x4a,0xd2,0x0f,0x24,0xe1,0x11,0xdb,0xd9,0x6a, - 0x31,0xbb,0xde,0x95,0xb1,0x21,0x2d,0x3d,0xf7,0xc4,0x44,0x82,0xe2,0xb8,0x87,0x33, - 0x3e,0xab,0xa6,0x2b,0x70,0x81,0xb4,0xcc,0x30,0xfc,0x07,0x18,0xad,0x7a,0x35,0xd8, - 0x2a,0x9e,0x13,0xb9,0x25,0x8e,0x79,0x29,0xea,0xd1,0xdb,0xa1,0x7e,0x48,0xac,0xd3, - 0xd3,0xf2,0x36,0xcb,0x50,0x93,0x6d,0x3c,0x1c,0x8d,0xce,0xcf,0xcb,0x2c,0xdf,0xda, - 0x39,0x1f,0xbe,0x1d,0x6d,0x64,0xfc,0x1a,0x31,0x79,0xe9,0xf4,0xea,0x2d,0xd5,0x38, - 0x3c,0x7f,0x89,0xf5,0x8b,0x2e,0xe8,0x17,0xe2,0x46,0xf2,0xc4,0xc8,0xe9,0x59,0x46, - 0x3f,0x86,0xd4,0xee,0xa2,0x5a,0x40,0xc5,0x84,0x6e,0x94,0xfe,0x95,0x9a,0x02,0xd2, - 0xc2,0x2e,0xec,0xb3,0xd8,0x5f,0x7b,0x35,0xd6,0xbb,0xe7,0x80,0xd7,0x25,0x69,0x7b, - 0xe5,0xa9,0x14,0xa9,0x18,0xb1,0x2b,0x37,0x3a,0x1b,0xb2,0x81,0xed,0xbc,0xf6,0xdd, - 0xd1,0x2b,0xff,0xbc,0x40,0x3c,0x57,0x24,0xdc,0xc7,0xc7,0xcf,0x88,0xb0,0x37,0x00, - 0xcc,0xeb,0xad,0xa8,0x3e,0x7b,0xb2,0x43,0xcd,0x3d,0x2d,0x2d,0x71,0xfc,0x15,0x4b, - 0x73,0x3a,0x23,0x67,0x36,0xa2,0xa9,0x77,0xeb,0xd8,0x5c,0xc6,0xf2,0x0a,0x09,0xa6, - 0x65,0xe4,0x39,0xa8,0xf9,0xf4,0x4b,0xd6,0x3a,0x00,0x5a,0x6f,0x85,0xd4,0xb2,0xdb, - 0x20,0x6e,0x46,0xaa,0x78,0x11,0xb9,0x00,0x34,0xfc,0x12,0xdd,0xa4,0x9b,0xc5,0x47, - 0xe6,0x2f,0x49,0xc8,0xbc,0x64,0xac,0xbb,0x2e,0x12,0x36,0x16,0x98,0x1e,0x51,0xc3, - 0xf1,0xd0,0xd1,0xac,0x7c,0x7e,0xae,0xe7,0xb3,0x09,0xee,0x25,0x9e,0x1c,0x77,0x7f, - 0xfd,0xfe,0x9d,0x91,0xfa,0x5d,0x16,0xf2,0x9c,0x07,0x32,0x91,0x66,0xe1,0xde,0x73, - 0x9a,0xd3,0xdc,0x1a,0x8b,0x33,0x9a,0x68,0x4a,0xb9,0x42,0xd0,0x1f,0x7c,0xa8,0xab, - 0xd0,0xc3,0xb7,0x3a,0x02,0x0f,0x5e,0x3b,0x81,0x50,0xc7,0xa5,0xbf,0x0c,0xa1,0xdb, - 0x6d,0x6f,0xd5,0x58,0x8d,0xd1,0x06,0x13,0xdc,0x9a,0x49,0xcd,0x33,0x7b,0x40,0xd7, - 0xe2,0x86,0x09,0xe6,0xe1,0x72,0xa0,0xa0,0xe6,0x55,0xfe,0x00,0x46,0x93,0x03,0x06, - 0x5d,0x54,0x02,0x0c,0xc8,0xab,0x49,0xb7,0xb3,0x7c,0x76,0xc6,0x8d,0xa4,0x46,0x27, - 0xcc,0xf0,0x5c,0x43,0x9c,0x9f,0x3a,0x34,0x97,0x97,0x33,0xb6,0x8f,0xb2,0x60,0x6f, - 0xd1,0x03,0x4f,0xda,0x44,0xea,0x8e,0xa8,0x42,0xf8,0xad,0xd5,0x9f,0xb8,0x2e,0xfa, - 0xe5,0x8f,0x7b,0x7d,0xfb,0x57,0xb4,0xff,0x02,0xd7,0x7b,0x1d,0x5c,0x55,0x1b,0x00, - 0x00, + 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x02,0xff,0xc5,0x5b,0x6b,0x72,0xdb,0x48, + 0x92,0xfe,0xaf,0x53,0x94,0xe5,0x69,0x01,0x18,0x81,0x10,0x25,0xbf,0x41,0x53,0x5a, + 0xcb,0x8f,0x99,0x9e,0x6e,0xf7,0x78,0x25,0xf7,0x4e,0x6c,0x7b,0x3b,0x36,0x40,0xa0, + 0x20,0xa2,0x05,0xa2,0x10,0x55,0xa0,0x28,0x0e,0xc5,0x88,0x3e,0xc4,0xfc,0xd9,0x0b, + 0xec,0x15,0xf6,0xff,0x1e,0xa5,0x4f,0xb2,0x5f,0x66,0x15,0x48,0x90,0x92,0x6d,0x75, + 0xcc,0x8f,0x9d,0xe8,0xb1,0x50,0x8f,0xcc,0xca,0xca,0x77,0x26,0xc0,0x97,0x0f,0x32, + 0x95,0x36,0xf3,0x5a,0x8a,0x71,0x33,0x29,0x8f,0x77,0x5e,0xd2,0x1f,0x51,0x26,0xd5, + 0xc5,0x70,0x57,0x56,0xbb,0x34,0x21,0x93,0xec,0xf8,0xe5,0x44,0x36,0x89,0x48,0xc7, + 0x89,0x36,0xb2,0x19,0xee,0x4e,0x9b,0xbc,0xf7,0x9c,0x16,0x4d,0xaa,0x8b,0xba,0x11, + 0x46,0xa7,0xc3,0xdd,0x83,0x3a,0xef,0xa5,0xaa,0x32,0xaa,0x94,0xd1,0x2f,0xe6,0x64, + 0x3c,0xcc,0xfa,0x47,0xa3,0x47,0x8f,0x8e,0x8e,0x76,0x8f,0x5f,0x1e,0xd8,0x8d,0xc7, + 0x0e,0xe0,0xb8,0xc8,0xfd,0x07,0xb3,0xa2,0xca,0xd4,0x2c,0xfa,0xf0,0x2e,0xf0,0xf3, + 0x69,0x95,0x36,0x85,0xaa,0xfc,0x60,0x71,0x95,0x68,0xf1,0xb7,0xa1,0x5d,0x0b,0x7f, + 0x1c,0x7a,0x07,0x49,0x5d,0x1c,0x98,0x26,0x69,0xa6,0xc6,0x0b,0xbf,0x1f,0x7e,0xfa, + 0x39,0x7c,0x3f,0x3c,0x92,0x2f,0xc2,0xf3,0xf0,0xa7,0xf0,0xc3,0xf0,0x6f,0x00,0x1f, + 0x2e,0x68,0x59,0xc6,0x5e,0x59,0x5c,0x49,0x2f,0xcc,0x0a,0xdd,0xcc,0xe3,0x07,0x87, + 0xe1,0x55,0x5c,0x4d,0xcb,0x32,0xbc,0x90,0x4d,0xfc,0xa7,0xb0,0xa8,0xf2,0xb2,0xb8, + 0x18,0x37,0xf1,0x0f,0xd3,0xc9,0x48,0xea,0x70,0xac,0xca,0x2c,0xfe,0xeb,0xe8,0x17, + 0x99,0x36,0xa1,0x49,0xe6,0xf1,0x8a,0x82,0x26,0xbc,0x0c,0x65,0xb0,0x90,0x7b,0x7b, + 0xbe,0x8c,0x1a,0x79,0xdd,0xbc,0x56,0x55,0x23,0xab,0x66,0xd8,0x04,0xcb,0x70,0x34, + 0x35,0x9d,0xad,0xa3,0xb0,0x0e,0x16,0xed,0x48,0xe4,0x20,0x7e,0x14,0x65,0x85,0x49, + 0x46,0xa5,0xcc,0x86,0x0f,0x0e,0x97,0xdd,0x51,0x7f,0x50,0x47,0xcd,0x58,0x56,0x7e, + 0x1e,0xe6,0xc1,0x40,0xcb,0x66,0xaa,0x2b,0x51,0x2f,0xc3,0x5a,0x95,0xe5,0x1a,0xa3, + 0x09,0x27,0x61,0x1a,0x2a,0xcb,0x85,0x26,0xcc,0xc3,0x8b,0xe1,0xe1,0x60,0x75,0xc2, + 0x19,0x4e,0xb8,0xd8,0xdb,0x7b,0x90,0x83,0xb6,0x7c,0x78,0x18,0xa6,0xa5,0x4c,0xf4, + 0xc7,0x62,0x22,0xd5,0xb4,0xf1,0x9b,0x20,0xf4,0x4d,0x94,0x26,0x65,0x79,0x62,0xfc, + 0x20,0xfe,0x93,0x6f,0x82,0xc0,0x9d,0xd8,0x62,0xcf,0x82,0x45,0xea,0x67,0x21,0x71, + 0x05,0x77,0x59,0x4d,0x4b,0x9a,0x66,0x56,0xc9,0x60,0xe9,0x60,0xbe,0x0b,0xbf,0x0b, + 0x82,0xe5,0xea,0xe4,0xef,0x70,0x72,0x3e,0xec,0x0f,0xb6,0x4e,0x1c,0x80,0x1a,0xbf, + 0x19,0x42,0x25,0xda,0xb9,0xb3,0x70,0x02,0x38,0xb5,0xb7,0xa7,0xa2,0xbc,0xd0,0xa6, + 0x19,0x0e,0xc1,0x88,0x13,0x80,0xc7,0x20,0xde,0x5d,0x1b,0xe2,0x52,0x75,0xdc,0x11, + 0xf9,0xc5,0x6d,0xcc,0xcb,0x10,0x48,0xd7,0x7b,0xaa,0x60,0x31,0x19,0x56,0x83,0xfc, + 0xe6,0x06,0xa8,0x96,0x61,0xa5,0x66,0xf1,0xd9,0x12,0x7b,0x58,0x2d,0xd6,0xdb,0x52, + 0xdc,0x64,0x6f,0xef,0xfb,0xa8,0x9e,0x9a,0x31,0x06,0x83,0xf3,0x13,0x0c,0x53,0xff, + 0x3c,0x88,0x7f,0x3a,0xf9,0x29,0x02,0x14,0xe8,0xf8,0x69,0xf8,0x21,0x22,0xa6,0xfb, + 0x3f,0x86,0xef,0xc3,0x37,0x40,0x36,0x4b,0x9a,0x74,0x7c,0xbe,0x85,0x69,0x12,0x2c, + 0x3e,0x44,0x16,0x3d,0xe8,0xfe,0x29,0x02,0x35,0xfe,0xfb,0xe1,0xfb,0xa4,0x19,0x47, + 0x93,0x02,0xcb,0xe1,0xfb,0x80,0x41,0x8b,0xe6,0x9d,0xd2,0x6f,0xe4,0x55,0x91,0xca, + 0x35,0x30,0xe4,0xa7,0x86,0xea,0xe6,0x66,0xb1,0x6c,0x05,0x5d,0xc9,0x99,0xf8,0xa0, + 0xd5,0xa4,0x30,0x72,0x2d,0x8e,0x79,0x58,0x59,0x41,0x8f,0xd7,0x24,0x1d,0xc9,0x47, + 0x6b,0xc1,0x98,0x60,0x61,0x20,0x6e,0x5f,0x45,0xa3,0x69,0x51,0x66,0x7b,0x7b,0xc6, + 0x3e,0x0c,0x87,0x6e,0x26,0x00,0xfb,0xc7,0x11,0xb1,0xd3,0x0f,0xc2,0x39,0x49,0x7c, + 0x19,0x0c,0x3a,0xd2,0xe8,0xf0,0xb8,0xdd,0x36,0xa8,0xfc,0xb7,0x5a,0x2b,0xed,0x7b, + 0x8d,0xdd,0xe4,0xd1,0x45,0x54,0xe4,0x46,0x37,0x37,0x2f,0xe4,0x63,0x60,0x59,0x2e, + 0xd7,0x6a,0xf7,0x27,0x7f,0x4a,0x2a,0xe9,0xae,0x92,0x4b,0xb0,0x8b,0x67,0xb6,0xb4, + 0x4b,0x07,0x0b,0xb2,0x6a,0x1d,0xa9,0xcb,0xa0,0x19,0x6b,0x35,0x13,0xf6,0x20,0xed, + 0xf8,0xb8,0xd2,0x7a,0xd6,0x0e,0xb2,0xac,0x13,0xcd,0x7f,0x20,0x14,0x0d,0x87,0x41, + 0x64,0x2e,0x3b,0x3a,0xf7,0x86,0xee,0x0f,0x8c,0xf8,0xf7,0x1c,0x76,0x5e,0xe7,0x56, + 0x46,0x43,0x33,0xf8,0x3e,0xca,0x95,0x7e,0x9b,0x80,0x8c,0xd5,0xe1,0x39,0xf4,0x13, + 0x3b,0x89,0xf0,0x65,0xe0,0x07,0x2b,0x7f,0xb3,0x63,0x1d,0x57,0x95,0x4c,0xe4,0x70, + 0xf7,0xaa,0x90,0xb3,0x5a,0xe9,0x66,0x57,0xa4,0xce,0xa6,0x77,0x67,0x45,0xd6,0xc0, + 0x51,0xb1,0x00,0x7b,0x3c,0x80,0xa7,0x28,0x9a,0x22,0x29,0x7b,0x06,0xb6,0x24,0x87, + 0x87,0xe4,0xe5,0x9a,0xa2,0x29,0xe5,0xf1,0x87,0xa4,0x69,0xa4,0x86,0x1f,0xc1,0xd5, + 0x7a,0xc2,0x52,0xf3,0xf2,0xc0,0xae,0xc1,0x13,0x36,0x73,0xfa,0x1b,0x6b,0xa5,0x9a, + 0x45,0xaf,0x97,0x6a,0x99,0x4c,0xe2,0x87,0xfd,0xd7,0xfd,0xd3,0xfe,0x8b,0x41,0xaf, + 0x57,0x54,0x97,0xf1,0xc3,0xb7,0x6f,0xde,0x3e,0x7b,0x73,0x8a,0xd1,0x64,0xda,0xc8, + 0x2c,0x7e,0xf8,0xfc,0xd5,0xf3,0xa3,0x67,0x47,0x18,0xe7,0x49,0x51,0x35,0xf1,0xc3, + 0x27,0xaf,0x9e,0x3c,0x79,0xfc,0x74,0xb0,0xd3,0xeb,0xe9,0x69,0x29,0xe3,0x87,0x47, + 0x8f,0x8f,0x0e,0x0f,0x9f,0x0f,0xec,0xb0,0x67,0x54,0x8e,0x3d,0x87,0xa7,0x87,0x2f, + 0x0e,0x1f,0x63,0xae,0x24,0x0c,0xef,0xde,0x3d,0x79,0x7d,0xf4,0x16,0x23,0x05,0xf4, + 0x4f,0x9e,0x9d,0x3e,0x7f,0xf6,0x0e,0x83,0x59,0xa2,0xab,0xf8,0xe1,0x9b,0x17,0xaf, + 0xfa,0x8f,0xde,0x11,0xb6,0x3a,0xa9,0x64,0x09,0xd0,0x47,0x87,0x87,0x87,0x7d,0x9a, + 0x30,0x49,0x65,0x62,0xef,0x5b,0x30,0x41,0x7b,0xe1,0xb4,0xe0,0x71,0xcf,0x48,0x5d, + 0xe4,0xa1,0x99,0x9b,0x46,0x4e,0x7a,0xd3,0x22,0x5c,0x4f,0x12,0xc8,0x44,0x55,0x2a, + 0xf6,0xfe,0x22,0x9b,0x53,0x0d,0x62,0x8d,0x78,0x8f,0x31,0xc3,0xd2,0x82,0xa9,0x93, + 0x54,0x86,0xe7,0xef,0x68,0xb2,0x77,0x26,0x2f,0xa6,0x65,0xa2,0xc3,0xf7,0xb2,0x2a, + 0x55,0xb8,0x5a,0x5e,0xee,0xfc,0x71,0x31,0x52,0xd7,0x3d,0x53,0xfc,0xbd,0xa8,0x2e, + 0xe2,0x91,0xd2,0x99,0xd4,0x3d,0xcc,0x2c,0x77,0x46,0x2a,0x9b,0x2f,0x26,0x89,0xbe, + 0x28,0xaa,0xb8,0x3f,0x18,0x25,0xe9,0xe5,0x85,0x56,0xd3,0x2a,0x8b,0x61,0x1d,0xbe, + 0xe3,0x65,0x30,0x48,0x55,0xa9,0xb4,0x9b,0x02,0x3b,0x83,0x41,0x0e,0x29,0x82,0x75, + 0x93,0xa2,0x9c,0xbb,0x69,0x22,0x39,0x18,0xec,0x94,0x45,0x25,0x7b,0x63,0xc9,0xfe, + 0xfe,0x30,0x7a,0x32,0xe8,0xcd,0xe4,0xe8,0xb2,0xc0,0x5e,0x02,0x30,0x13,0x48,0x68, + 0x4c,0x24,0x24,0x15,0x09,0xba,0x48,0x8c,0xcc,0x96,0x3b,0xd1,0x4c,0x27,0x35,0x88, + 0xb8,0xb6,0x6a,0x10,0x3f,0x7d,0xde,0xaf,0xaf,0x07,0x2d,0x51,0x22,0x99,0x36,0x6a, + 0x50,0x27,0x59,0x46,0x80,0x8f,0x8e,0xea,0x6b,0x71,0x84,0x75,0xf1,0xf4,0x71,0x0d, + 0xfa,0x29,0x44,0x4a,0xbd,0x80,0xb7,0xaf,0x4b,0x8a,0x25,0xa5,0xbc,0x1e,0x00,0xf1, + 0x45,0xd5,0x2b,0xc0,0x4b,0x13,0xa7,0x92,0x38,0x3d,0xb8,0x48,0xea,0xf8,0x39,0x90, + 0x3a,0x34,0xb8,0x7b,0xd3,0xa8,0x49,0x7c,0x08,0x6c,0x83,0x9d,0x15,0x3f,0xec,0x1c, + 0x70,0x23,0x90,0x16,0x99,0xb0,0x17,0x23,0x05,0x08,0x40,0x64,0x06,0xe5,0xb2,0xf4, + 0x3d,0x03,0x90,0xbb,0x22,0x3d,0xde,0x62,0x1a,0xd4,0x23,0x18,0x38,0xa4,0x3a,0xc9, + 0x0a,0x78,0xb7,0x43,0xa6,0xf5,0x70,0x61,0xd9,0x50,0xfc,0x5d,0xc6,0x87,0x4f,0x00, + 0xca,0xc3,0x99,0x45,0xf5,0xb4,0xdf,0x5f,0xdd,0x79,0x40,0xf7,0x88,0x0f,0x71,0xaa, + 0x99,0x8e,0x16,0xb7,0x99,0x4d,0x92,0x75,0x42,0xb0,0xc8,0x80,0x7f,0x43,0x48,0xac, + 0xd5,0xa0,0xda,0x48,0x36,0x52,0x27,0xe1,0x1e,0x79,0xff,0xa3,0xa7,0x4c,0xcb,0xd1, + 0x62,0x0b,0x7c,0x9b,0x96,0x52,0x92,0xcd,0xf5,0x48,0x81,0x88,0xf1,0x51,0xff,0x85, + 0x9c,0x0c,0xc8,0x69,0xf4,0x1a,0x0d,0x59,0xc3,0x0f,0x4c,0xe2,0x69,0x5d,0x4b,0x9d, + 0x42,0x8a,0x83,0x9d,0xee,0xe9,0x6c,0x63,0xc1,0x5a,0x82,0x7d,0xf1,0x9c,0xce,0xcc, + 0xca,0x8e,0xa6,0x59,0xf6,0x10,0x41,0x77,0x31,0x9c,0x2d,0x8e,0xb8,0x0e,0x67,0xf6, + 0x79,0xe1,0x8e,0x70,0x32,0x29,0x1c,0x8b,0x97,0x65,0xd9,0xaa,0xc9,0x33,0xd2,0x92, + 0xfb,0xc9,0xb6,0x3d,0x2a,0x6b,0x16,0x96,0xeb,0xc2,0xa9,0x5c,0x87,0x3f,0x8f,0xb6, + 0xd8,0xbb,0x75,0x41,0x00,0x67,0xeb,0xab,0x21,0x4a,0x39,0x45,0xee,0x0f,0xee,0x21, + 0x3a,0x22,0x93,0xd9,0xca,0x37,0x8b,0x35,0x09,0x60,0xa0,0xae,0xa4,0x26,0x6f,0xd7, + 0x23,0xd3,0x80,0xb5,0xcc,0x67,0x63,0xa9,0x25,0x9d,0x13,0x8d,0x8a,0x8b,0xc5,0x16, + 0x69,0x5b,0xa2,0x03,0xdb,0xd4,0xe5,0xa2,0x4b,0x2f,0xe2,0xc2,0x32,0x22,0xd7,0xb4, + 0x31,0x4b,0x13,0x98,0x1f,0x25,0xd9,0xc6,0x34,0xa9,0x2f,0x50,0x8c,0x12,0xbd,0x70, + 0x5a,0xfe,0xe8,0x2e,0x2d,0x5f,0xf3,0x6e,0xd0,0xd1,0x2e,0xd2,0x6a,0x7b,0xf9,0xc3, + 0x7e,0xff,0x1b,0x8b,0x46,0x14,0x2b,0x11,0x8e,0x4a,0x95,0x5e,0xb6,0xc6,0x43,0x3b, + 0xee,0xb6,0x1e,0xc0,0x55,0xaa,0x91,0x8b,0x2d,0x36,0xdd,0xd6,0xf0,0x56,0x04,0xd0, + 0x2f,0x88,0x0d,0x4a,0xbb,0xe1,0x7e,0x1e,0x3f,0x01,0xa2,0x46,0xa9,0xd2,0xdc,0xcb, + 0x41,0xf0,0x19,0x9d,0xbb,0x1c,0xb2,0x87,0x19,0x4d,0xa1,0x3a,0xd5,0xa2,0x56,0xa6, + 0x20,0x53,0x8a,0xb5,0x2c,0x93,0x06,0xe9,0xee,0xe0,0x9e,0x66,0x79,0xcb,0x8e,0x9e, + 0x7f,0xd1,0x8e,0x5a,0x0d,0x86,0x95,0x0a,0x26,0xa8,0xc3,0x20,0x06,0xa8,0x13,0x0d, + 0x92,0xef,0x52,0x47,0xab,0xeb,0x77,0x3b,0xb0,0x2d,0x7f,0xc4,0xdc,0x9c,0x6a,0x03, + 0x14,0xb5,0x2a,0x88,0x03,0xed,0x45,0xe3,0x31,0xe9,0xde,0xe2,0x96,0xc7,0x77,0xf0, + 0xb7,0x15,0xe5,0x5f,0x26,0x32,0x2b,0x12,0xdf,0xa1,0x89,0x53,0x45,0x85,0x0a,0xf2, + 0x71,0x8b,0x2d,0x4e,0xf2,0x86,0xd1,0x71,0xd4,0x8f,0x77,0x77,0x07,0x2b,0x46,0x26, + 0x23,0x50,0x09,0xca,0x07,0xc4,0xeb,0x1e,0x79,0x67,0x67,0xa5,0xfc,0x5c,0x4a,0x84, + 0xdc,0x1e,0x24,0x30,0x60,0x8b,0xe0,0xc7,0x25,0xc4,0x39,0x31,0x17,0xff,0x8c,0x43, + 0x24,0x78,0x24,0x34,0xbd,0xbb,0x0c,0xc4,0x2d,0x49,0xad,0xef,0xb0,0x87,0x87,0x69, + 0x4d,0x42,0xdb,0xd2,0xe4,0xb5,0xaa,0xaf,0x94,0xba,0x13,0xbc,0xac,0x16,0xf5,0x3b, + 0x7e,0x89,0x6e,0xa6,0x25,0x93,0x08,0x2e,0x37,0x05,0x12,0x1d,0xf8,0xa8,0x6d,0x13, + 0xe0,0xa4,0xe1,0x8e,0xa8,0xfb,0x3b,0x05,0x4c,0xec,0x60,0x4e,0x1c,0x90,0x29,0x88, + 0x0e,0xa7,0x96,0x3b,0x9f,0xc6,0x45,0x96,0xc9,0xea,0xe7,0xd5,0x7d,0x2a,0x55,0xc9, + 0x07,0xc5,0x84,0x92,0x34,0x04,0x67,0x30,0x8a,0x98,0x94,0xe7,0x64,0x50,0x02,0xde, + 0x4d,0x91,0xfa,0xa2,0xb8,0x8b,0x60,0x52,0x39,0xa2,0x38,0x64,0xda,0xb9,0xe3,0xa3, + 0x8e,0xef,0xb5,0x97,0x66,0xcd,0xfd,0xb2,0x8f,0x47,0xb6,0xf0,0x4f,0x08,0x32,0x59, + 0xdc,0xb6,0x80,0xe5,0x0e,0xb2,0x4f,0x4e,0x06,0x5f,0x1e,0xd8,0xda,0x99,0xd2,0x9b, + 0xe3,0x97,0x59,0x71,0x25,0xd2,0x32,0x31,0x06,0x59,0x27,0xfc,0x69,0x5b,0x5a,0x4b, + 0x8d,0xa2,0x18,0xbc,0x6e,0xd7,0x10,0xe1,0xb9,0x5e,0xc6,0xd4,0xf1,0xcb,0xf1,0xe1, + 0x71,0x9b,0x67,0xe2,0x71,0x63,0x1f,0x62,0xf2,0xae,0x28,0x32,0xd4,0xe2,0x40,0xd5, + 0x6b,0x01,0x0e,0x1c,0xca,0x9d,0x9d,0x97,0x0f,0x7a,0x3d,0xf1,0x71,0x5c,0x18,0x51, + 0x27,0x17,0x52,0xe0,0xef,0x6c,0x9c,0x34,0x02,0xd5,0xb0,0x11,0x48,0x8e,0xa5,0xac, + 0xcc,0x18,0x9a,0x2e,0xb3,0x50,0x28,0x8d,0x3d,0x86,0x1f,0xe1,0xe1,0x2b,0xf0,0x68, + 0x22,0x89,0x66,0x91,0x98,0x4b,0x23,0xe0,0x1b,0x76,0x04,0xfd,0x6f,0x2c,0xcb,0x3a, + 0x16,0x48,0xfa,0x85,0x35,0x2b,0x64,0xd1,0x75,0x21,0x8d,0x90,0x50,0xa2,0xb9,0xc8, + 0x0b,0x59,0x66,0xa2,0x53,0xad,0x8b,0x71,0x62,0x42,0x01,0x0f,0x2a,0x7e,0x99,0x9a, + 0x86,0xe1,0x10,0x47,0x4d,0x24,0x7a,0x3d,0x5c,0xbd,0xc3,0x0d,0xf6,0x8d,0xb8,0xb3, + 0xc3,0x4a,0xcd,0x88,0xe1,0xae,0x1d,0xd8,0x1b,0xe2,0x9c,0xf9,0xee,0xf1,0x6b,0xfc, + 0x2b,0x60,0xe4,0x17,0xc8,0x27,0xa1,0xb3,0x60,0x89,0xdd,0xb3,0xc9,0x16,0x98,0x8f, + 0x03,0xaa,0xe9,0x71,0xc5,0xc9,0x03,0x1c,0x48,0x99,0x3c,0xac,0x07,0xae,0x2b,0x71, + 0x5b,0x68,0xb8,0x2b,0x30,0xce,0x54,0x55,0xce,0x85,0x55,0x47,0x91,0xe8,0x22,0xe9, + 0x95,0xc9,0x48,0x96,0xc3,0xdd,0x37,0xeb,0x03,0x09,0x59,0x0b,0x4f,0x0c,0x76,0x69, + 0x0d,0xa4,0x74,0x74,0x6c,0x4b,0x40,0xb0,0xff,0x08,0x82,0x2e,0x8f,0xc1,0xb0,0xee, + 0x0d,0x71,0x6f,0x00,0x67,0xcd,0xf1,0xbb,0x42,0x4f,0x10,0xf0,0xb0,0x11,0x83,0x97, + 0x59,0xc6,0x64,0xe4,0x33,0x16,0x60,0x96,0xb5,0x54,0x7e,0x06,0xf8,0x94,0x4a,0xbe, + 0x0d,0xc8,0x51,0x99,0xdd,0x0f,0xf4,0x7b,0x88,0x17,0xd7,0x84,0x60,0x74,0xb3,0x81, + 0x41,0xeb,0xfb,0x9e,0x6d,0xe6,0x9b,0x47,0x63,0xe2,0x7e,0xa0,0x1f,0xc8,0x8f,0x08, + 0xb2,0xa3,0x0d,0x04,0x75,0xb5,0x05,0x8e,0x3f,0x25,0x89,0xcb,0x71,0x75,0x8b,0xc1, + 0x67,0xb2,0x82,0x5e,0x7f,0x95,0xc1,0x7c,0xd8,0xe6,0x39,0xb3,0x7b,0x5e,0xf1,0x9d, + 0x46,0x91,0x28,0x74,0xd2,0xac,0xe9,0x74,0x5b,0x90,0xec,0x58,0x9d,0xca,0x6b,0xf3, + 0x7b,0x70,0x51,0x4d,0xbd,0x29,0xe9,0xe6,0x7e,0xe0,0xaf,0x52,0x8a,0xed,0x30,0x4a, + 0x2e,0x38,0x37,0x50,0x24,0x69,0x73,0x17,0xdf,0x76,0x5e,0xd6,0x2d,0x16,0xca,0x59, + 0x76,0xdb,0xab,0xf3,0x00,0x3b,0xeb,0xcf,0x73,0xd6,0x95,0xb5,0xe6,0xab,0xbc,0xfd, + 0xa8,0x9a,0x64,0x8b,0xb7,0xcd,0xfd,0x35,0xb7,0x11,0x70,0x99,0x0a,0x6e,0xe2,0x0e, + 0x0b,0xa8,0xeb,0x7b,0xaa,0xb1,0x82,0x73,0xcb,0x44,0xae,0xd5,0x44,0x98,0x46,0x69, + 0x38,0xb6,0x4d,0x3c,0x93,0xdf,0x61,0x0e,0x25,0x90,0x09,0x49,0x2d,0x8a,0x0d,0x1c, + 0xa5,0xbc,0x37,0x7f,0x09,0xc3,0x3d,0x18,0xfc,0x5e,0x4e,0x94,0x9e,0x7f,0x95,0xbd, + 0x5c,0x8d,0x57,0x49,0x09,0x3f,0x9b,0xd4,0xb8,0xa3,0xdc,0xbc,0xdb,0xb8,0xb8,0xef, + 0xdd,0xf4,0x05,0x0c,0x9d,0x11,0x08,0xce,0x0f,0x36,0xd1,0x94,0xf7,0xb4,0xda,0xf3, + 0xb3,0x57,0xef,0xef,0xa0,0xa2,0xbe,0x0f,0x77,0xb6,0xee,0x82,0xd8,0x43,0xde,0xdf, + 0xa4,0x89,0x4e,0xa5,0x40,0x88,0x17,0x3d,0x9e,0xf8,0xfe,0xed,0x1b,0xc1,0x59,0x86, + 0x67,0xc4,0x9b,0xf7,0xaf,0x10,0x56,0xf2,0x5c,0x6a,0xb3,0x43,0x7d,0x5c,0xda,0xa0, + 0x65,0x24,0x5e,0xb5,0x56,0x20,0x26,0x2a,0x43,0xbc,0x66,0xb1,0x19,0xc1,0xee,0xba, + 0xc8,0x45,0x01,0x39,0xca,0xe4,0x0a,0x51,0xc8,0x46,0x01,0xf6,0x69,0xe6,0x6a,0xf7, + 0xf8,0xe8,0xb1,0xf8,0xee,0xd4,0x39,0xff,0x1d,0xc5,0x1b,0xe9,0x32,0x03,0xa1,0xa7, + 0x15,0x70,0xcc,0xa4,0x16,0x49,0x95,0x31,0x19,0x95,0x6c,0x66,0x4a,0x5f,0xb6,0x64, + 0x72,0xdf,0x52,0x70,0x87,0x40,0x40,0x61,0x2f,0x14,0x45,0xc5,0xa2,0x64,0x8a,0x76, + 0x98,0x5c,0x71,0x29,0x65,0x6d,0x44,0xa6,0x93,0x19,0x36,0x45,0x5f,0x14,0xfe,0x79, + 0xab,0xa6,0x5f,0x75,0x5c,0xf6,0x96,0x77,0xa9,0x75,0x7e,0x4f,0xaf,0xe3,0xce,0xba, + 0x43,0xa9,0x73,0x73,0xa7,0x56,0x77,0xb1,0xa0,0x44,0x02,0x96,0xc2,0x6d,0xa7,0x91, + 0xe0,0x2c,0xc6,0xf5,0xc8,0xe2,0x3e,0x69,0x79,0xe1,0xc0,0x37,0xae,0xcb,0x89,0xc6, + 0x4c,0x09,0x64,0x69,0x97,0xc4,0x42,0x64,0x19,0x29,0x44,0x31,0x92,0x62,0x5a,0x0b, + 0x0c,0x54,0x95,0xca,0x78,0x83,0xd3,0xf4,0x6c,0x39,0xf9,0x0b,0x12,0x76,0x58,0xb4, + 0x4f,0xbc,0xe5,0x24,0x83,0x72,0x07,0xe0,0x0d,0x56,0xd2,0x69,0x15,0x44,0xcd,0x2a, + 0x81,0x84,0xc5,0xd4,0xaa,0x89,0x04,0x35,0xff,0x6c,0x2a,0x53,0x34,0x76,0xa9,0x93, + 0x5a,0x74,0xd9,0xff,0x83,0x3d,0xf1,0xab,0xec,0x5f,0xed,0xeb,0x30,0xcd,0xdc,0x97, + 0xed,0xa8,0xe3,0xb6,0x1c,0xa3,0xbe,0x27,0xe8,0xab,0x2c,0x43,0x54,0x36,0x1b,0xb0, + 0xc5,0x3d,0x9d,0xe1,0x0f,0x08,0x31,0x9b,0x90,0xd5,0x3d,0xdd,0xdf,0x9f,0x2d,0x1b, + 0x37,0x0d,0xdb,0xfc,0x2e,0x58,0xb2,0xc6,0x2d,0xcf,0x60,0x7e,0xdf,0xe9,0x98,0x2f, + 0x50,0x8c,0x99,0x2d,0x24,0xe9,0xfd,0x90,0x9c,0x49,0x68,0x00,0x14,0xe7,0xaa,0x48, + 0x36,0x10,0x60,0xfc,0xd5,0xb4,0xc2,0x56,0x0e,0xc7,0x2f,0x13,0x31,0xd6,0x32,0x1f, + 0xee,0x1e,0xec,0x82,0x26,0x8a,0xd4,0xc9,0xb1,0xd8,0x9b,0x20,0x05,0x54,0xcd,0x40, + 0xac,0x57,0x9d,0xff,0x01,0x7f,0xd6,0x91,0x32,0x01,0x46,0x87,0x66,0xa7,0x3d,0xa7, + 0xed,0x38,0xaf,0x1a,0xd8,0x7f,0xf0,0x8b,0x55,0xd7,0x3c,0x53,0xe9,0x74,0x82,0xeb, + 0x46,0x50,0xda,0xb7,0xa5,0xa4,0xc7,0xd3,0xf9,0xb7,0x19,0x76,0x2c,0xd7,0x00,0x97, + 0x23,0x7f,0xb4,0x82,0x18,0x1d,0x0f,0x0f,0xfb,0x8f,0x9f,0x3f,0x79,0xf6,0xf4,0xc4, + 0x1f,0x1d,0xb8,0xc7,0x20,0x6a,0xd4,0xbb,0xe2,0x5a,0x66,0xfe,0x51,0xb0,0xef,0x89, + 0xf7,0xa7,0x5e,0xcc,0xef,0x24,0xb8,0x6e,0xe3,0x6d,0x47,0x8f,0x69,0xe1,0xbb,0x53, + 0xaf,0x83,0x37,0x9b,0x6a,0xea,0xa2,0x83,0x97,0xf4,0xb6,0x21,0xb3,0xaf,0x31,0xf2, + 0x52,0x29,0x4c,0x1f,0x3c,0x7f,0xfa,0xb8,0xdf,0x0f,0xc2,0xf1,0xc6,0xec,0x37,0x3c, + 0x7b,0xf0,0xe8,0x29,0x2d,0x59,0xc3,0x14,0x93,0xcd,0x1d,0xb4,0x76,0xf0,0x14,0xcb, + 0xd7,0x43,0xf3,0xcd,0xd3,0xfe,0x00,0xbb,0x8a,0xdc,0xcf,0x82,0xf6,0xc2,0xfb,0x5e, + 0x26,0xbc,0xfd,0xf1,0xbe,0x37,0xf6,0x06,0x58,0x18,0xb7,0x0b,0x34,0x83,0x85,0xc9, + 0xbe,0x37,0xf1,0x1c,0xd0,0xa4,0x5d,0xa3,0x49,0xac,0x5d,0xef,0x7b,0xc6,0x6b,0xdf, + 0x16,0xd8,0xc1,0x4e,0xe7,0x3a,0x69,0x69,0x7c,0x59,0x86,0x69,0xb0,0x90,0x65,0xc4, + 0x8a,0x41,0xa6,0x30,0xf4,0x90,0xa6,0x01,0x38,0xed,0xec,0xac,0xa7,0x8d,0x5f,0x64, + 0x61,0x43,0x7b,0xe9,0xea,0x72,0x08,0x99,0x64,0xc1,0x60,0xeb,0xc5,0x1e,0xc6,0x6b, + 0x34,0xe9,0xcd,0x8d,0x07,0xe6,0x1d,0x1c,0x08,0x69,0xea,0xff,0x84,0x75,0xca,0x06, + 0xff,0x26,0xfc,0x7a,0x02,0x05,0x51,0x1b,0x22,0x38,0x89,0xe1,0xf7,0x0a,0xe4,0x83, + 0x42,0x24,0x37,0x02,0x0e,0x24,0x83,0x0f,0xfa,0x38,0xe6,0x18,0x67,0x44,0x82,0x80, + 0x76,0x41,0x88,0xd2,0x64,0x6a,0x68,0x0c,0x00,0x2d,0x33,0xb8,0x42,0x38,0x4b,0x8d, + 0x0a,0x4b,0x91,0xef,0x82,0x73,0x14,0x33,0x90,0x21,0xa6,0x15,0x62,0x27,0x8a,0x88, + 0x0c,0x9e,0x93,0x21,0x6c,0x9e,0xd3,0xf1,0x9b,0x84,0x2b,0x11,0xa9,0x4e,0xcc,0x18, + 0x21,0x4c,0xc1,0xd9,0xca,0x6b,0xe4,0x83,0x88,0x84,0x65,0x71,0x29,0xb1,0x34,0x26, + 0xa7,0x49,0x25,0x14,0xf9,0xcd,0x72,0x7a,0x11,0xed,0xd0,0xad,0xcf,0xce,0x86,0x8b, + 0x9a,0x22,0x9e,0xaa,0x62,0x8f,0x1f,0xb0,0xc7,0x0b,0xc1,0x81,0xd8,0xe3,0xfb,0x89, + 0xba,0xc0,0xd8,0xcc,0x62,0x8f,0x3a,0x69,0x33,0x4b,0x27,0xd7,0x0a,0x5e,0x08,0xf7, + 0x5b,0xa4,0xb1,0x67,0x0f,0xf5,0x79,0x14,0x78,0xa4,0x12,0xc8,0xe6,0xfe,0x73,0x96, + 0x01,0x05,0xbf,0x3f,0xcb,0xd4,0x85,0xf0,0xb9,0xf7,0xa2,0xa7,0x75,0x83,0x1d,0x0d, + 0x6a,0xc7,0xed,0x75,0x9a,0xc3,0xd2,0xc6,0x2c,0xe3,0xca,0x28,0x9e,0x96,0xf8,0x87, + 0xe6,0x2f,0xdd,0xc5,0x69,0x52,0xf0,0xac,0x17,0x8e,0x60,0xf8,0x95,0x9a,0x02,0xae, + 0x7d,0x02,0x2d,0x7c,0x93,0xac,0xa8,0x03,0x6f,0x39,0xe0,0x8b,0x9e,0xfe,0x78,0xfe, + 0xef,0xf4,0x32,0x98,0xa3,0x20,0x50,0xe9,0xa2,0xa1,0x20,0xde,0x1a,0xb0,0x17,0x4e, + 0xeb,0x8c,0x5f,0x14,0x6b,0x99,0xca,0xe2,0x8a,0xd6,0x5a,0x49,0x12,0x0a,0xc6,0x01, + 0x3d,0x68,0x86,0xf4,0x32,0x74,0xd0,0x51,0x23,0xaa,0xf6,0xe9,0xed,0x29,0x48,0xe5, + 0xf5,0x8c,0x14,0xf7,0x0f,0xbe,0x37,0xad,0xbd,0x60,0x43,0x95,0x30,0x03,0x15,0x24, + 0x7b,0xcb,0x22,0xf0,0x01,0xf9,0x7f,0x40,0x5b,0x21,0xb7,0xfb,0x54,0xe2,0x9f,0xa9, + 0xbe,0xb9,0xf0,0x0e,0x31,0x6f,0x31,0x21,0x93,0x19,0x93,0x1e,0x2a,0x61,0x92,0x39, + 0xa5,0x26,0x08,0x85,0x2b,0x85,0xe4,0xe8,0xbb,0x46,0x4a,0x87,0xa9,0x3c,0x12,0xaf, + 0x15,0xd6,0xb0,0xdd,0x50,0x3d,0x4e,0x99,0x8d,0x45,0x05,0xca,0x75,0x22,0x7e,0xfb, + 0xf5,0x1f,0x84,0xd4,0xa5,0x3f,0x99,0xcc,0x93,0x29,0xb2,0xf5,0x55,0x76,0xa4,0x0a, + 0xc3,0x44,0x53,0x25,0x0f,0x2d,0x6c,0xc6,0xd8,0x1c,0x01,0x9e,0x8c,0xcb,0xcb,0x67, + 0x5e,0x98,0x45,0x57,0xc8,0xda,0xc0,0xa8,0x7d,0x1f,0xd7,0xbe,0xa2,0xea,0xb9,0x6a, + 0xf6,0xf6,0x56,0x8f,0x0f,0x86,0x43,0x2f,0x05,0x01,0x5e,0x70,0xe2,0x89,0xff,0xfd, + 0x1f,0x62,0x50,0xbb,0xb4,0xbf,0x06,0xf8,0x37,0x8b,0x03,0x5b,0x3a,0xeb,0x6e,0x32, + 0xf6,0xbc,0x80,0xfe,0xcf,0xcc,0xe4,0x73,0x51,0xf9,0xd2,0xc1,0xfc,0x16,0x14,0x06, + 0xdb,0xf3,0xd6,0x4b,0x5a,0x7b,0xe1,0xd9,0xd9,0xa7,0x2c,0x62,0xdd,0x3e,0x63,0xd3, + 0xfd,0xf9,0xe6,0x66,0x63,0xcc,0x20,0xe1,0x01,0xab,0xf3,0x0d,0xf4,0xf1,0xa6,0x55, + 0xab,0x03,0x88,0xd3,0x40,0xd6,0xdd,0xcd,0x20,0x7b,0x94,0x64,0x1e,0x11,0xb0,0x3e, + 0x1f,0xe5,0xaf,0x25,0xc0,0xcc,0x4f,0x7c,0x52,0xbc,0x4f,0x76,0xc0,0x27,0xd1,0x03, + 0x08,0xa6,0x17,0x64,0x6e,0x8b,0x47,0x6d,0xee,0x4d,0x14,0x75,0x45,0xab,0x9c,0xde, + 0xb4,0x37,0xb0,0x52,0xc1,0xa9,0x59,0xcf,0xf6,0x23,0x90,0x02,0x0f,0x6c,0xee,0x3c, + 0x2b,0x60,0x2f,0x82,0x32,0x63,0xd3,0x5a,0xb8,0xfb,0xd6,0x02,0x59,0xd1,0x44,0xb2, + 0x6a,0x45,0xe2,0x14,0xd2,0x15,0x59,0x02,0x57,0xc1,0x98,0xf8,0xbb,0x08,0xeb,0x78, + 0xac,0xe4,0xe0,0xaf,0x20,0xfc,0x70,0xe5,0x61,0x58,0xc0,0xfc,0x41,0x84,0xc1,0x1c, + 0xbd,0xd8,0xc4,0xcc,0x84,0x9d,0x0b,0xc2,0x29,0x34,0x9a,0x7a,0x83,0x4e,0x57,0x0a, + 0xca,0xc8,0xc5,0x0c,0x3a,0x47,0x0a,0x43,0xea,0x91,0xb0,0x75,0xda,0xf6,0x11,0xb0, + 0x65,0xa1,0x75,0x8e,0xab,0x3a,0x9a,0xb4,0x86,0x4d,0x79,0x24,0x73,0xa5,0x6d,0x02, + 0xcd,0xb8,0x6c,0xee,0xc7,0x5e,0x8f,0x88,0x8d,0xda,0xc8,0x84,0xe7,0x61,0x16,0x31, + 0x56,0x62,0xa3,0xbb,0xe0,0x07,0x46,0xbe,0xe6,0xdb,0x4c,0x13,0xe3,0x78,0xd7,0x89, + 0x67,0x69,0xf0,0xe2,0xad,0xdd,0x27,0x9e,0x25,0x89,0xed,0xc7,0x79,0x04,0xb0,0x3f, + 0x21,0xf7,0x02,0x68,0x1c,0xb4,0x25,0x12,0x36,0xd1,0x35,0x4f,0x2b,0xa4,0xb3,0xaa, + 0xba,0x90,0xee,0x6a,0xc6,0xa5,0xa2,0x36,0x47,0x27,0x9c,0x23,0x49,0xee,0x43,0xd5, + 0xb2,0x8a,0xdd,0xda,0x94,0xcd,0xc4,0xa2,0x42,0xfa,0x3b,0xad,0xb9,0xc0,0x1c,0x91, + 0x9f,0x23,0x16,0x25,0x04,0x36,0x81,0x75,0xd2,0x97,0x27,0x5c,0x5b,0xac,0x31,0x22, + 0xbd,0x9d,0x70,0x91,0xe8,0x2a,0x0d,0x58,0x23,0x39,0x2f,0x69,0x22,0xeb,0x67,0x5c, + 0x21,0xbf,0xe5,0x6c,0x1c,0x0f,0x38,0x3c,0x9f,0x78,0xb6,0xcd,0xa2,0xf2,0x1c,0x9e, + 0xa2,0x29,0xca,0xb2,0xd5,0x12,0x17,0x3b,0x50,0x49,0x55,0x73,0x71,0x59,0xa9,0x11, + 0x11,0xe3,0x5a,0x6d,0xc4,0x0d,0x1b,0xbe,0xe0,0x50,0x32,0xe5,0xae,0xe9,0x74,0xed, + 0xb3,0x5a,0xe6,0xf1,0x89,0xb7,0x39,0xde,0xa6,0x47,0xac,0x6f,0x96,0x3f,0x74,0x0b, + 0xd0,0xca,0xce,0xca,0x0a,0x61,0xb0,0xc1,0x49,0x58,0xd9,0x94,0x22,0x28,0x3b,0x3e, + 0xf6,0x5d,0x05,0x11,0x52,0xe1,0x10,0x08,0x86,0x0d,0x82,0x14,0x23,0xaf,0x0d,0x6e, + 0xcb,0x8a,0xf5,0xa3,0x39,0x39,0x94,0x4f,0x0f,0x56,0xa3,0xb8,0xef,0x7c,0x31,0xf6, + 0xdc,0xe2,0x4f,0x0b,0xe1,0x5b,0x81,0x43,0x6f,0xbd,0x18,0xfb,0x56,0x49,0xd4,0x21, + 0xe5,0x4a,0x0c,0x18,0xc3,0x00,0x09,0x11,0xe5,0x16,0x2d,0x32,0xa7,0x26,0x0c,0x72, + 0x3c,0x7c,0xfc,0xe4,0xc4,0x53,0x97,0x6e,0x70,0xf4,0x64,0xa5,0x3e,0xe4,0x1a,0x82, + 0x96,0x86,0xe6,0x73,0x24,0xec,0xed,0x3d,0x60,0x6c,0xfe,0x6a,0x06,0xb9,0x1a,0x92, + 0xab,0xcd,0x7c,0x6e,0x62,0xbc,0x96,0x10,0x60,0x43,0x68,0xbf,0x85,0x8e,0x74,0x0a, + 0x8c,0x25,0xef,0x9a,0x70,0x93,0x68,0x08,0xe7,0xda,0xf3,0x4e,0x3c,0xb7,0xf0,0xdb, + 0xaf,0xff,0xed,0xc5,0x2c,0x9f,0x76,0x03,0xb9,0x58,0xfb,0xf4,0xad,0x79,0xcf,0x25, + 0x34,0x5c,0xac,0xf0,0x6d,0x35,0x1d,0xe0,0x3c,0x0c,0x46,0xae,0x3f,0x13,0x38,0x27, + 0x44,0x2a,0x77,0xfb,0xec,0x36,0x8e,0x0e,0x68,0xb9,0xbe,0xbd,0xcc,0x2e,0xd3,0x38, + 0xe2,0xeb,0xc9,0xad,0x0d,0xf6,0x48,0xb3,0x32,0xe4,0x92,0x2c,0x91,0x6f,0xc4,0x1f, + 0x8a,0xc0,0x09,0x52,0xfb,0x7f,0x63,0xae,0xeb,0x79,0x9d,0x2e,0x94,0x99,0x63,0x03, + 0x7f,0x5f,0x63,0x13,0xc8,0x32,0x03,0x1f,0x9b,0xa4,0xe4,0x08,0xcd,0xc7,0xb7,0xad, + 0x99,0xed,0xf8,0xcc,0x9d,0x9f,0x4e,0x27,0x21,0x46,0xb4,0x59,0x81,0x6f,0x89,0x04, + 0xda,0xe1,0x52,0x5f,0x92,0x8c,0x10,0x43,0xc1,0x9d,0x62,0x07,0x41,0x8f,0x5f,0x00, + 0xd8,0xc7,0xde,0x52,0xa5,0xe4,0x05,0xdb,0xfd,0x76,0xf8,0x45,0x18,0x30,0x90,0x33, + 0x08,0x02,0xe0,0xe7,0xdb,0xbb,0x59,0x4b,0xe8,0xde,0x4b,0x21,0x4b,0xb8,0x9c,0xaf, + 0x5e,0xf9,0x07,0xd5,0xbd,0x30,0x5c,0xa2,0x29,0x28,0xe7,0xa4,0xf4,0x33,0xb2,0x88, + 0x76,0xd6,0xfe,0x8f,0xb7,0x68,0x57,0x6e,0x73,0xaa,0xdf,0xaa,0x8a,0xed,0x62,0x71, + 0x5c,0xd4,0x57,0x32,0x68,0xd3,0x05,0x7e,0x35,0xc3,0x96,0x3b,0x61,0xf5,0x30,0xa1, + 0x0b,0x3d,0xca,0x79,0x8f,0x52,0x4d,0x35,0xa5,0x31,0x25,0x45,0x17,0x38,0x36,0x04, + 0x06,0x8a,0x23,0x00,0xa9,0xc8,0x27,0xd2,0xb5,0x5c,0x08,0x8a,0x29,0x3b,0xe6,0x86, + 0x81,0x46,0x32,0x0c,0x32,0xda,0x7c,0x07,0xee,0x89,0xd6,0x05,0xfc,0x12,0x72,0x17, + 0xf1,0x1c,0xe5,0x8d,0xe0,0x96,0x4e,0x1b,0x38,0xb4,0xb9,0x1a,0xfa,0xad,0x82,0x59, + 0x42,0xc9,0x42,0xee,0x24,0xfc,0xe6,0xe6,0xe8,0x31,0x2a,0x29,0xa7,0xa6,0x80,0xdc, + 0xe2,0x17,0x8a,0x30,0x4c,0xae,0xc3,0xf4,0xb8,0xf0,0x42,0xcc,0x65,0x11,0xb5,0xb2, + 0xda,0xbe,0x16,0x7c,0xc3,0xc6,0xf8,0x18,0x20,0xfb,0xcf,0x0f,0x5f,0x1c,0x59,0x1f, + 0x71,0x7b,0xf1,0x4e,0x77,0x31,0x2e,0x6f,0x9f,0x6d,0x41,0x5d,0x13,0x6f,0xb5,0xb1, + 0xfe,0xdc,0xc6,0x0f,0x46,0xd3,0xa7,0x31,0x3b,0xae,0xfa,0x8a,0x72,0xd8,0xf8,0xb4, + 0xa2,0xd7,0x50,0x56,0x2f,0x88,0x3b,0xe4,0x9d,0xc9,0x13,0x99,0x1f,0x29,0x46,0x43, + 0xd3,0x79,0xc0,0xdd,0xdc,0x01,0x6f,0xb2,0x99,0x9c,0xe1,0x7b,0x62,0xb9,0x47,0x00, + 0xec,0x19,0xa9,0x85,0x08,0x46,0x7b,0xfb,0x76,0xc1,0xe6,0x5f,0xd6,0xd3,0x51,0x87, + 0x08,0x44,0x71,0x8b,0x28,0xb2,0x5f,0x51,0xd1,0x96,0x13,0x82,0x3d,0xc0,0xc3,0x1f, + 0xa1,0xb8,0x71,0x1f,0x58,0xbe,0xd9,0x50,0xd6,0xf5,0x59,0x5e,0xc5,0x5d,0x04,0x26, + 0x16,0x23,0xcb,0x97,0xcf,0xa1,0xf6,0xfa,0xde,0x00,0x7a,0xba,0x22,0x95,0xbd,0x44, + 0x6e,0xb6,0xfd,0x86,0x9b,0xd9,0xf2,0x1a,0xd0,0xa1,0x73,0xdb,0x55,0xb2,0xbd,0xbd, + 0x48,0xfc,0xad,0xa0,0x5c,0x48,0xad,0xfa,0x51,0xae,0x0b,0x85,0xa8,0xc8,0x4a,0xeb, + 0xda,0x4c,0xd4,0xbe,0xf2,0x6d,0x7e,0x0d,0x65,0x1f,0xab,0x99,0xc5,0xd5,0x74,0x33, + 0x79,0xed,0xfa,0x10,0xf4,0x29,0x5c,0x10,0xae,0x42,0x58,0xe2,0x2c,0x99,0x13,0x30, + 0xfb,0x12,0x0c,0xba,0x4e,0x79,0x75,0xab,0xb2,0x63,0x8a,0x68,0xee,0xa0,0xd6,0x93, + 0xf1,0xe5,0x8c,0xa1,0x9b,0xcc,0x8a,0xbc,0x38,0x81,0x0f,0x30,0x45,0x06,0x6d,0xba, + 0x2a,0x92,0x3f,0xb7,0x5b,0xc7,0x06,0x95,0xc5,0x89,0xd7,0xd2,0x48,0x79,0x22,0xae, + 0xea,0x5e,0x92,0x7a,0xa1,0xf3,0xfd,0x0c,0xef,0x74,0xf1,0x0e,0xe8,0x3b,0x94,0x51, + 0xdf,0x0e,0x9f,0x8e,0x08,0x0d,0x2a,0xa0,0x0d,0xd9,0xe9,0xa4,0x1b,0x9d,0x8a,0xfa, + 0x73,0xfb,0x8b,0xba,0xdd,0xe6,0x9c,0xca,0x48,0x25,0x3a,0x73,0x3e,0x85,0xbf,0xb7, + 0xb2,0x72,0x88,0x3b,0x55,0x07,0x35,0x85,0x21,0x10,0xc5,0xbe,0xc1,0xa6,0x87,0x49, + 0x65,0x66,0x94,0x97,0x36,0xaa,0xe5,0x59,0x35,0x19,0x7e,0xfa,0xb9,0x6d,0x34,0x80, + 0x79,0xa6,0x79,0x45,0xd8,0x82,0x6a,0x62,0xbf,0xf8,0xec,0xcc,0xed,0x7b,0x11,0xb9, + 0xdb,0xd2,0x5e,0x6f,0xb5,0x9f,0xbc,0x02,0xfd,0x45,0x49,0xf2,0x79,0x04,0x9b,0xb0, + 0xb8,0x6a,0xb5,0x1d,0xcb,0xb0,0x9f,0x54,0xc6,0xb7,0xe5,0x4c,0xc0,0xe9,0xfb,0xda, + 0x61,0x40,0x80,0x8e,0xcd,0xd0,0x38,0xae,0x77,0x30,0x24,0x49,0xee,0xfb,0x78,0x28, + 0xea,0xb6,0x0a,0xe2,0x81,0x2d,0x6d,0x20,0xbe,0x35,0xd0,0xe5,0x2a,0x29,0x25,0xd3, + 0x37,0xdb,0x87,0x63,0x1b,0x35,0xdf,0x56,0x87,0xf2,0xa6,0xf4,0xf6,0x26,0xe0,0xc2, + 0xbf,0xae,0xcb,0xd6,0x11,0x1c,0xd4,0xe1,0x96,0xe4,0xd6,0x2a,0x72,0xe2,0xad,0x9a, + 0xae,0xbf,0xfd,0xfa,0x5f,0xa6,0xb5,0x05,0x90,0xd4,0x49,0x26,0xbd,0xd6,0xae,0x10, + 0x5b,0x72,0x99,0x34,0x53,0x6d,0xdf,0xed,0x0a,0xdb,0xb3,0x5f,0xd7,0xba,0x63,0x84, + 0x4b,0xf8,0xf9,0xf7,0xff,0xfa,0xf1,0x23,0x47,0x8a,0x50,0xa4,0x49,0x9d,0x8c,0x8a, + 0xb2,0x68,0xe6,0xbd,0x8b,0x84,0x6a,0xde,0x9e,0xcb,0x98,0x05,0x95,0x88,0x16,0x4a, + 0x4b,0xfa,0x00,0x80,0xf3,0x6b,0xa8,0x85,0x3b,0x00,0xfa,0xc3,0xd6,0x24,0x46,0x73, + 0x6e,0xbb,0xd0,0xab,0x81,0xad,0x25,0x8b,0xa9,0x53,0x23,0xc1,0x18,0xd7,0x5b,0x48, + 0xfb,0x08,0x7d,0xc8,0x58,0xc1,0x97,0xf4,0x72,0xdd,0x61,0xb1,0xaf,0xcd,0x23,0xe1, + 0xd3,0x5b,0x66,0x8b,0xa7,0xf3,0xaa,0xd9,0x65,0xd4,0x69,0xa2,0x75,0x21,0x6d,0xf9, + 0x4e,0x2f,0xbd,0xed,0x3b,0x6f,0xd7,0x12,0xb2,0xe7,0xc0,0xf4,0x6b,0xd4,0x04,0x59, + 0x14,0xec,0x20,0xac,0x02,0xcb,0x6f,0xff,0xf8,0x15,0xff,0x89,0xed,0x97,0xd7,0x6e, + 0xfe,0xff,0xeb,0x3f,0xa2,0xec,0x6d,0xe7,0xb5,0x3d,0x9c,0x3c,0x07,0x73,0x2a,0x17, + 0x1b,0xe1,0xde,0xdf,0xc3,0x4e,0x77,0x2f,0xe5,0x3c,0x86,0xed,0x95,0x53,0xb9,0xcb, + 0x02,0xa4,0x37,0xfa,0x92,0x3e,0x15,0x10,0x8a,0xbf,0x9d,0x37,0x84,0x29,0x73,0xdf, + 0x11,0x20,0xe6,0x27,0xf6,0x4b,0x02,0xfb,0xae,0x8f,0xde,0xc7,0x18,0x33,0x95,0xb6, + 0xfc,0x49,0xb9,0x35,0x41,0x3d,0x08,0xfe,0x60,0xc0,0xbe,0x60,0x49,0x3a,0xcd,0x0a, + 0xdb,0x2a,0xa3,0x2e,0x58,0xb4,0xee,0xbd,0xe4,0xa0,0xc9,0x57,0x61,0x1d,0xa2,0x38, + 0xe7,0x98,0x86,0x2a,0xca,0x27,0x67,0x70,0x49,0x2d,0x37,0xd5,0x09,0x73,0x57,0x43, + 0xf5,0xe9,0xf2,0xe7,0xb0,0x1a,0xd6,0x27,0x35,0x4c,0x18,0x41,0x2b,0xbe,0xb4,0xf1, + 0x0a,0xe6,0x7f,0xb5,0xb7,0x47,0xdf,0x15,0xe0,0x9e,0x57,0x94,0x31,0x5b,0xe2,0x3d, + 0x64,0xe5,0xaf,0xb4,0x4e,0xe6,0x51,0x61,0xf8,0xaf,0x7f,0x15,0x04,0x7c,0xe0,0x55, + 0x58,0xf1,0x81,0x16,0x9e,0x43,0x17,0x86,0xd6,0x49,0x54,0xfb,0x1e,0x67,0x8d,0xdb, + 0x90,0x27,0x57,0xd1,0x24,0xa9,0xd7,0x9f,0x24,0x5f,0xaf,0x5a,0xb9,0xd7,0xab,0xc3, + 0xaf,0x3b,0x87,0x9f,0xfc,0xe5,0xfc,0xaf,0x3f,0x20,0xca,0x69,0xf0,0xa1,0xc8,0xe7, + 0xd8,0x1f,0x5f,0x2f,0x03,0xe7,0x58,0x42,0xb8,0x95,0xf8,0xca,0x06,0x5c,0x8a,0x7b, + 0xed,0xa7,0xd3,0xd3,0x86,0x5a,0xa1,0x60,0xd4,0xb8,0x69,0xea,0x98,0xb2,0x23,0xe3, + 0xa2,0x8b,0x91,0x29,0x99,0x21,0x7f,0xe3,0x74,0xdd,0xb0,0x30,0xaa,0xe4,0xaa,0x80, + 0x91,0x29,0x4d,0x5e,0xa0,0x66,0x2f,0x4c,0xfb,0xa7,0x66,0x9a,0x94,0xe5,0x5c,0x4c, + 0x20,0x1c,0x6a,0x05,0x01,0x8b,0xaa,0x58,0x72,0xf6,0x4d,0x4b,0x62,0x5f,0x4a,0x0c, + 0x84,0xbc,0x96,0xe9,0x6b,0x35,0x99,0xa0,0xd6,0xf7,0x3d,0xfa,0x08,0xc3,0x0b,0xd6, + 0x16,0x63,0x0d,0xc8,0x1a,0x06,0xf9,0x04,0xd4,0x91,0x15,0x77,0x4d,0x59,0xad,0xa8, + 0x9f,0x62,0x6c,0x9a,0xb7,0xca,0x0c,0x23,0xf1,0x6d,0x8e,0x58,0x80,0xd0,0x9b,0x27, + 0x45,0xc9,0x48,0x88,0x54,0x22,0x09,0xe2,0x9f,0x71,0x95,0x48,0xa7,0x90,0x85,0x53, + 0x27,0xb3,0xa3,0x05,0xa5,0xbc,0x48,0xd2,0x39,0x19,0x91,0xdf,0xac,0x1a,0xd9,0xc9, + 0x70,0xd5,0x55,0xa7,0x2f,0x84,0x1b,0xe9,0x1a,0xeb,0xbe,0xd7,0x7e,0xa5,0x81,0x1a, + 0x4e,0x5d,0x0e,0xf3,0xa4,0xa4,0x6f,0xda,0x84,0x48,0x22,0xd6,0xe4,0x61,0x33,0x48, + 0x28,0xbb,0x7e,0xd5,0x80,0xf7,0x88,0xf9,0x12,0xc1,0xcf,0x7d,0x01,0x82,0x44,0xc4, + 0x7a,0xde,0xc4,0xa5,0x1f,0xa9,0x31,0x1f,0x81,0x6c,0xe8,0xad,0x3e,0x18,0xe3,0x8c, + 0x95,0xbf,0x16,0xeb,0xdb,0xcf,0xc3,0xfa,0x83,0xf6,0xb3,0xa4,0x3e,0xbb,0xd8,0x15, + 0x51,0xd4,0xc4,0x8b,0xac,0x3b,0x78,0x8d,0xb2,0x3e,0xf3,0x93,0x16,0xb5,0x2c,0xa1, + 0x00,0x7e,0x60,0xc9,0x38,0xe7,0x11,0x50,0x9f,0x25,0xd5,0x85,0xf4,0xfb,0x61,0x13, + 0x95,0xb2,0xba,0x68,0xc6,0xbc,0xbb,0xd1,0xf3,0x05,0xee,0xb0,0x42,0x7a,0x87,0x4c, + 0x96,0x29,0xf5,0x18,0xe8,0x67,0x1c,0xcb,0x5b,0xc7,0x6b,0x24,0xbf,0x57,0xb2,0x7b, + 0x3c,0x7d,0xa3,0xbf,0xf5,0x85,0x3e,0xe3,0x81,0x8a,0xe5,0x94,0xbc,0xd1,0xfd,0xbb, + 0xcd,0x76,0x2c,0x11,0x07,0x1c,0xdf,0x01,0xed,0x7e,0xb6,0x53,0x98,0x73,0xd6,0xb8, + 0xd7,0x56,0xe1,0xf6,0xf6,0xee,0xd0,0xb6,0x3b,0x27,0x23,0x6e,0x6d,0x10,0xce,0x80, + 0xad,0xab,0xfd,0x89,0xc4,0x97,0x76,0xe2,0x74,0xfb,0x6b,0x03,0xfe,0x99,0x4a,0xe7, + 0x67,0x0d,0x1b,0x8a,0xb1,0xe4,0x0b,0x7e,0xf1,0x27,0x17,0x5b,0x10,0x83,0xb9,0xcf, + 0x50,0xcb,0x9d,0x3f,0xb4,0xdc,0x8c,0xa0,0xfe,0x70,0x8d,0x55,0xf3,0x7d,0x01,0x47, + 0x56,0x49,0x62,0x0f,0xa9,0xba,0xd7,0x3d,0xd6,0x69,0xe0,0x64,0x48,0x60,0xf4,0xa1, + 0x11,0x34,0x2d,0xb1,0x03,0x62,0xc6,0x2a,0xeb,0x78,0x40,0xed,0xe2,0x60,0xf1,0xe1, + 0x5d,0x04,0xc7,0x87,0x44,0x42,0xb5,0xbe,0x75,0x2e,0x1b,0xe8,0x9a,0xa4,0x5e,0xe5, + 0xa4,0xfd,0x61,0xc4,0xd2,0x61,0x85,0xb6,0x75,0x7f,0x6a,0xe0,0x20,0x38,0x65,0xa0, + 0x4b,0xbd,0x81,0xa6,0xfb,0x54,0x12,0x7e,0x7b,0xfe,0xd7,0x73,0xf6,0x1e,0x3e,0x25, + 0xeb,0xbc,0xce,0x25,0x26,0x48,0x74,0x79,0xcc,0x7f,0x54,0xde,0x3e,0xfb,0x33,0x22, + 0x03,0xaa,0x1d,0x7e,0xfa,0xb9,0x75,0x30,0x58,0x62,0x22,0x3b,0xf2,0xdd,0xfa,0x3d, + 0x47,0xb0,0x48,0x22,0xfb,0x41,0xd4,0xb0,0xd1,0x53,0x39,0x68,0x2f,0xc1,0x5f,0x7d, + 0x51,0xca,0x8e,0x44,0x05,0xc4,0x2f,0xb7,0xf8,0xb2,0x69,0x66,0x0e,0x81,0x35,0xc1, + 0x24,0xca,0xa1,0x9c,0xc6,0x29,0xbe,0xb3,0x01,0x06,0x69,0x71,0xdb,0xd9,0xb5,0x6b, + 0xb0,0x3d,0x49,0xea,0x35,0xb2,0x8a,0x16,0xc4,0xb4,0xa2,0xca,0x15,0x73,0x8d,0x5c, + 0x23,0xc9,0x8e,0xb2,0x7c,0x20,0xe8,0xfc,0x8e,0xc7,0x3f,0xa2,0xaa,0x79,0x40,0xb3, + 0xee,0x37,0x3c,0xb5,0xfd,0x50,0x77,0x67,0xfd,0x43,0xb4,0x03,0xfb,0x55,0xde,0x81, + 0xfd,0xd9,0xdb,0xff,0x01,0xaa,0xe5,0x89,0x7b,0x07,0x37,0x00,0x00, }; constexpr size_t STATUS_INDEX_HTML_GZ_LEN = sizeof(STATUS_INDEX_HTML_GZ); // diff --git a/firmware/patternflow/src/theme_index.h b/firmware/patternflow/src/theme_index.h index d8949ba7..05df763c 100644 --- a/firmware/patternflow/src/theme_index.h +++ b/firmware/patternflow/src/theme_index.h @@ -1,29 +1,71 @@ // ═══════════════════════════════════════════════════════════ -// PatternFlow - shared console chrome + theme (PROGMEM JS bundle) +// PatternFlow - shared console chrome: window.PF (PROGMEM JS bundle) // -// Served at /pf-console.js by core_http.h and loaded by every console -// page as one parser-blocking + Patternflow — Firmware update - - - - +

Update

…
@@ -96,118 +100,167 @@ const char WEB_UPDATE_HTML[] PROGMEM = R"HTML(
Linked build
- +
Two steps -
01

Build & download a .bin — patternflow.work → Build, or an arduino-cli export.

+
01

Get a .bin: patternflow.work/update sends the latest release straight back to this page. Or bring your own — an arduino-cli export.

02

Drop it below. Keep the device powered; it verifies, flashes, and reboots itself.

This build requires arming first. On the device: hold K2 → NETWORK, then turn K4 → UPDATE.
-
+
Drop .bin here - or click to choose a file + Checking the panel…
- +
-
+
+
+
)HTML"; // GENERATED by firmware/toolchain/console_pages.py build — do not edit. -// gzip -9 of WEB_UPDATE_HTML (11590 bytes → 4418 bytes), served with Content-Encoding: gzip. +// gzip -9 of WEB_UPDATE_HTML (15488 bytes → 6365 bytes), served with Content-Encoding: gzip. const uint8_t WEB_UPDATE_HTML_GZ[] PROGMEM = { - 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x02,0xff,0xb5,0x5a,0xeb,0x72,0xdb,0xb8, - 0x92,0xfe,0xef,0xa7,0x40,0x94,0x1d,0x53,0x9a,0x48,0xd4,0xc5,0x97,0xe4,0x50,0x96, - 0x73,0xe2,0xd8,0x9e,0xc9,0xe4,0x5a,0xb1,0x53,0xb3,0x5b,0x33,0xb3,0x55,0x10,0x09, - 0x4a,0x1c,0x93,0x04,0x0f,0x00,0x5a,0xf6,0x51,0x5c,0xb5,0x0f,0xb1,0x4f,0x78,0x9e, - 0xe4,0x74,0x37,0x40,0x8a,0x92,0xe5,0x8c,0x67,0x6a,0x37,0x55,0x91,0x25,0x02,0x68, - 0x34,0xfa,0xf2,0xf5,0xd7,0x90,0x8e,0x9e,0x44,0x32,0x34,0xb7,0x85,0x60,0x73,0x93, - 0xa5,0xc7,0x3b,0x47,0xf8,0x87,0xa5,0x3c,0x9f,0x4d,0x5a,0x22,0x6f,0xe1,0x03,0xc1, - 0x23,0xf8,0x93,0x09,0xc3,0x59,0x38,0xe7,0x4a,0x0b,0x33,0x69,0x95,0x26,0xee,0xbd, - 0xc0,0x51,0x1d,0xaa,0xa4,0x30,0x4c,0xab,0x70,0xd2,0xea,0x17,0x71,0x2f,0x94,0xb9, - 0x96,0xa9,0xf0,0x7f,0xd7,0xad,0xe3,0xa3,0xbe,0x1d,0xad,0x56,0xe7,0x3c,0x13,0x93, - 0xd6,0x75,0x22,0x16,0x85,0x54,0xa6,0xc5,0x60,0xae,0x11,0x39,0x48,0x5b,0x24,0x91, - 0x99,0x4f,0x22,0x71,0x9d,0x84,0xa2,0x47,0x1f,0xba,0x49,0x9e,0x98,0x84,0xa7,0x3d, - 0x1d,0xf2,0x54,0x4c,0x86,0xb8,0x95,0x49,0x4c,0x2a,0x8e,0x3f,0x71,0x63,0x84,0xca, - 0xe3,0x54,0x2e,0xd8,0xbf,0xfe,0xe7,0x7f,0xd9,0x79,0xa2,0xb2,0x05,0x57,0x82,0x95, - 0x45,0xc4,0x8d,0x38,0xea,0xdb,0x69,0x3b,0x47,0x69,0x92,0x5f,0x31,0x25,0xd2,0x49, - 0xab,0x50,0x02,0xb6,0xca,0x45,0x08,0x7b,0xce,0x95,0x88,0x27,0xad,0xb9,0x31,0x85, - 0x0e,0xfa,0xfd,0x18,0x34,0xd0,0xfe,0x4c,0xca,0x59,0x2a,0x78,0x91,0x68,0x3f,0x94, - 0x59,0xeb,0xcf,0xad,0xd5,0x86,0x9b,0x24,0xa4,0x85,0x2c,0x54,0x52,0x6b,0xa9,0x92, - 0x59,0x92,0x57,0x42,0xfe,0x78,0xbf,0x7e,0xa8,0xf5,0xe8,0x65,0xcc,0xb3,0x24,0xbd, - 0x9d,0xbc,0x01,0x8b,0xa8,0x60,0x31,0x9b,0x9b,0xbf,0xef,0x0f,0x06,0xe3,0x83,0xc1, - 0x60,0xd7,0x8d,0xfc,0x24,0xcc,0x89,0xe2,0x49,0xae,0x9f,0xbd,0x97,0xb9,0x5c,0x9f, - 0x12,0x25,0xba,0x48,0xf9,0xed,0x44,0x2f,0x78,0xd1,0xb2,0x7a,0x6b,0x73,0x9b,0x0a, - 0x3d,0x17,0xc2,0x90,0x97,0xf0,0xd3,0xf1,0x0e,0x63,0x81,0x92,0xd2,0x2c,0x7b,0xbd, - 0x50,0x09,0x9e,0x05,0x4f,0x07,0xaf,0x07,0x27,0x83,0xbf,0x8d,0xdd,0xe7,0x51,0xf0, - 0x74,0x78,0x32,0xfc,0xdb,0x70,0x1f,0x1e,0x80,0xee,0xc1,0xd3,0xb3,0xd3,0xb3,0xe7, - 0xa7,0x27,0xf0,0x29,0x2b,0x8d,0x88,0x82,0xa7,0x2f,0x5e,0xbd,0x18,0x3d,0x1f,0xc1, - 0xe7,0x18,0x14,0x31,0xc1,0xd3,0x83,0x57,0x07,0x07,0xfb,0x87,0xf0,0x59,0x95,0xa9, - 0x08,0x9e,0x8e,0xf6,0x47,0xc3,0xe1,0x0b,0xf7,0xb1,0xa7,0x65,0x6c,0x1a,0x02,0x53, - 0x14,0x70,0x7e,0x7e,0xf0,0x7a,0x74,0x06,0x9f,0x0a,0x9e,0x8b,0x14,0x46,0xf7,0x86, - 0xc3,0xe1,0x60,0x0c,0x8a,0xd9,0x7f,0xbd,0x9e,0xe6,0xb9,0x0e,0x3c,0x32,0x83,0xd7, - 0x2d,0x13,0xfa,0xdc,0xd3,0x42,0x25,0x71,0x57,0xdf,0x6a,0x23,0xb2,0x5e,0x99,0x74, - 0x57,0x0f,0x9b,0x4b,0x33,0xb4,0x8b,0x57,0xdb,0x89,0xa1,0x9d,0x48,0x06,0x0e,0xe8, - 0x82,0x87,0xa2,0x7b,0x71,0x8e,0x0f,0x7b,0x9f,0xc5,0xac,0x4c,0xb9,0xea,0xbe,0x17, - 0x79,0x2a,0xbb,0xf5,0xf0,0x1d,0x08,0xfb,0x7e,0x39,0x95,0x37,0x3d,0x9d,0xfc,0x33, - 0xc9,0x67,0xc1,0x54,0xaa,0x48,0xa8,0x1e,0x3c,0x19,0x67,0x5c,0x81,0x57,0x83,0xc1, - 0xb8,0xe0,0x51,0x84,0x63,0x03,0x9c,0x3d,0x95,0xd1,0xed,0x32,0x4b,0xf2,0xde,0x5c, - 0x24,0xe0,0x90,0x60,0x38,0x18,0x5c,0xcf,0xc7,0x53,0x1e,0x5e,0xcd,0x94,0x2c,0xf3, - 0x28,0xb8,0xe6,0xaa,0xed,0xac,0xdb,0x19,0x87,0x32,0x95,0xca,0x3d,0x02,0xfb,0x76, - 0x6a,0xe5,0x31,0x2c,0x82,0xe1,0x41,0x71,0xd3,0x1f,0xfa,0x07,0x07,0xcc,0xce,0xc0, - 0x43,0x76,0xc6,0xbd,0x85,0x98,0x5e,0x25,0xa6,0x87,0x53,0x7a,0x3a,0x03,0xef,0xcd, - 0x71,0x77,0x9e,0x63,0x76,0x24,0x5c,0x8b,0x68,0x6c,0xc4,0x8d,0xe9,0x29,0x91,0x83, - 0xaa,0x38,0x34,0x13,0x12,0xb2,0x4d,0x25,0xe1,0x27,0x08,0xdd,0x44,0x27,0x32,0xaf, - 0xf7,0xa9,0x74,0x1f,0xed,0x17,0x37,0x8c,0x5e,0x0e,0xe1,0x05,0x0f,0xe2,0x93,0x43, - 0x96,0x94,0x7b,0x78,0x8a,0xef,0xe0,0xc0,0x37,0x36,0x15,0x83,0x83,0xc3,0x41,0x71, - 0x73,0xff,0x50,0xb4,0xa2,0x53,0x19,0x66,0x78,0x08,0xd2,0x78,0x69,0x24,0x5b,0x99, - 0x68,0xff,0x05,0x3c,0xb3,0x2f,0x6e,0x1b,0xc4,0x12,0xa1,0x96,0x2e,0x5e,0x83,0x38, - 0x15,0x37,0x63,0x38,0xc6,0x2c,0xef,0x25,0xe0,0x5a,0x1d,0x84,0x02,0x1d,0x3f,0x9e, - 0xf1,0x22,0x80,0x65,0x95,0x20,0x70,0x80,0x31,0x32,0x0b,0x86,0x23,0xd4,0xa3,0xf2, - 0x89,0x7d,0x04,0xc2,0x01,0x6f,0x92,0xc8,0x19,0x0d,0x23,0xaf,0xd2,0xa9,0x9a,0x33, - 0xaa,0xce,0x18,0x41,0xe8,0xdb,0x23,0x3d,0x07,0x41,0xce,0x65,0xcf,0xb7,0x9d,0x0d, - 0x82,0xb5,0x53,0xed,0xa4,0x78,0x94,0x94,0x1a,0x77,0xa2,0x13,0x0c,0x97,0xd6,0x15, - 0xc9,0x3f,0x05,0xb9,0x6c,0x4c,0x1f,0x17,0x56,0xd8,0x21,0x24,0x64,0x2a,0x10,0xa0, - 0x7a,0x18,0x51,0x68,0x04,0x7f,0x30,0x14,0xd9,0x2a,0x7c,0xf0,0xc8,0xc1,0x90,0xd4, - 0xc1,0x5d,0xad,0x30,0x9b,0xe2,0x6e,0x6f,0x0c,0xc7,0xce,0xb8,0xb1,0x09,0xec,0x7c, - 0x5f,0xe8,0x0b,0x10,0x4a,0x8e,0x37,0x0a,0xe2,0x24,0x96,0x2a,0x0b,0xca,0xa2,0x10, - 0x2a,0x84,0x90,0xa8,0xfd,0xdd,0x0c,0x38,0x4a,0xe1,0x8e,0x5d,0x13,0x01,0xa6,0x29, - 0x80,0x2d,0x99,0x07,0xb9,0xcc,0x45,0xad,0x4d,0x30,0x97,0xd7,0xe0,0x9e,0x7b,0x71, - 0xba,0xb9,0xa8,0xc4,0x58,0x03,0x78,0x13,0x76,0xa4,0xfe,0xd8,0x93,0x71,0x0c,0xe5, - 0x21,0xd8,0xb3,0xb6,0x7a,0x5a,0x24,0x69,0xfa,0x98,0x13,0x0e,0xfc,0x83,0x2d,0x67, - 0x1c,0x8e,0x1e,0x73,0xc6,0x2a,0xd8,0x40,0x02,0x1b,0x0e,0x30,0xd6,0xea,0x20,0xb9, - 0x17,0x1d,0x04,0x5b,0xeb,0x79,0x68,0xcd,0x52,0x6b,0xeb,0xcb,0xab,0xa5,0xf3,0xfb, - 0x3d,0x2b,0x6c,0x3e,0x58,0x2d,0x82,0xfa,0x93,0x6f,0x5b,0x46,0x61,0xb4,0xf9,0x60, - 0xb5,0x6c,0xca,0xa3,0x6d,0xab,0xb6,0x68,0x69,0x1f,0x91,0x9f,0x74,0x39,0x5d,0xae, - 0x72,0x73,0xef,0x30,0x9c,0x6f,0x39,0xcf,0x78,0x23,0x46,0xc9,0x39,0x15,0x46,0xf9, - 0x07,0x1b,0x09,0xb2,0x37,0xaa,0x40,0x20,0xee,0x5d,0x25,0xe1,0x55,0x23,0x43,0xa7, - 0xa9,0x0c,0xaf,0xc6,0x7f,0x31,0x48,0x87,0xfb,0x7f,0x31,0x48,0x37,0xf2,0xd7,0x69, - 0x07,0xe8,0x5f,0xd4,0x8a,0xcd,0x54,0x12,0x8d,0xf1,0xa5,0x07,0xc0,0x01,0x4f,0x8c, - 0x40,0x1b,0x96,0x19,0x54,0x8f,0x7d,0x8c,0x82,0x61,0x6c,0x61,0x64,0x34,0x58,0xe1, - 0x48,0x30,0x44,0xc8,0x1b,0x3c,0x0a,0x42,0x9a,0xa8,0x34,0x05,0x75,0xd1,0x82,0xb5, - 0x16,0x41,0x9c,0x28,0x6d,0x20,0xda,0x7b,0xc8,0x9c,0x2a,0x1f,0x1a,0x59,0x6c,0x17, - 0x56,0xaf,0x63,0x7e,0xfe,0xa8,0x74,0x78,0x28,0x19,0xb6,0x07,0xae,0x15,0x5d,0x34, - 0x71,0x69,0x7f,0x8b,0xcf,0xbf,0xb5,0x78,0xba,0x6c,0xa2,0x18,0x50,0x8a,0xed,0xc1, - 0xce,0x55,0xf6,0x23,0x04,0x62,0xed,0x04,0x04,0x8f,0x0a,0xda,0xd0,0xd0,0x6c,0x50, - 0x5b,0x97,0x2c,0x11,0x71,0x60,0x20,0xeb,0x76,0x7d,0xa8,0x36,0x6e,0xa6,0x33,0xb9, - 0x0a,0x8b,0xca,0xa3,0x82,0xcf,0xbf,0x1f,0xe4,0x87,0x0f,0xa5,0xb9,0x3b,0xc4,0x63, - 0xcf,0x3c,0xe7,0x79,0x04,0xb0,0xb6,0xf5,0xcc,0x70,0x5c,0x2a,0xa3,0xab,0x00,0xc3, - 0x2a,0x38,0x7c,0xf1,0x30,0x02,0x7d,0xd3,0x08,0xcd,0xfd,0xce,0x95,0xcc,0x1e,0x5b, - 0x1c,0xb6,0x64,0xd0,0x02,0xb6,0xef,0x4d,0x41,0xea,0x55,0x40,0xaf,0x3d,0x9e,0xa6, - 0x95,0xd6,0x87,0xe4,0xa8,0x2d,0x31,0x72,0xd8,0x54,0xe0,0x07,0xf9,0x57,0x6b,0xd3, - 0xe3,0x70,0xfb,0x9e,0x0d,0xee,0x61,0xac,0x8b,0x8c,0x07,0x2c,0x49,0xd3,0x6b,0xbb, - 0x8f,0xaa,0x68,0x09,0x4b,0x05,0x0c,0x3c,0x28,0x64,0x42,0x4c,0xa2,0xda,0x8d,0x34, - 0x49,0xa8,0x78,0xad,0x36,0x66,0xfe,0xf0,0x40,0x33,0x01,0x5a,0x75,0x69,0xdf,0xd5, - 0xe7,0x75,0x43,0xb8,0xb2,0xd8,0xd0,0x98,0xc4,0x15,0xd0,0x75,0xe4,0xe6,0x9b,0x51, - 0x03,0x6b,0x21,0x6e,0xf8,0x14,0x70,0x7f,0x29,0xd1,0x3e,0xe6,0x36,0xc0,0x54,0xb4, - 0x4a,0x46,0x22,0xe6,0x65,0x6a,0x68,0x41,0xa4,0x64,0xb1,0x74,0xb8,0x87,0x40,0x32, - 0xc2,0x20,0x6a,0x32,0xcb,0xe7,0x78,0xba,0x35,0xe2,0x84,0x2f,0xbd,0x28,0x01,0x96, - 0x47,0xe7,0xb2,0xf0,0xb7,0x8d,0x4e,0xfd,0x5e,0x6a,0x93,0xc4,0xb7,0x3d,0xd7,0x6f, - 0x6d,0xb2,0xac,0xda,0x23,0x7f,0x29,0x71,0x37,0x0c,0x4e,0x7e,0x27,0x1d,0xaa,0x6d, - 0x9a,0xa4,0x73,0xab,0x3f,0x1a,0x15,0x10,0x3c,0x70,0xe8,0x3c,0xb2,0xe6,0xa6,0xc3, - 0x86,0x5b,0xd0,0x52,0x40,0x57,0x92,0xd9,0x63,0xe2,0x73,0xf4,0xa7,0xcb,0xd2,0x56, - 0x77,0xda,0x3d,0x75,0xc6,0x1f,0xc9,0x67,0xfe,0x34,0x63,0xdb,0x5e,0xec,0x69,0x5f, - 0xdf,0x45,0xdf,0x03,0xac,0x64,0xbb,0x5f,0x46,0x8d,0xf5,0xf7,0x23,0x70,0xff,0x80, - 0x46,0xa7,0x5c,0x2d,0x5d,0x78,0x1d,0x6e,0x63,0xc1,0x75,0x1b,0xd7,0xd9,0x00,0x79, - 0x3a,0x60,0x13,0x10,0x49,0x5c,0x8c,0x6c,0x6f,0xd5,0x08,0x7d,0x37,0xb6,0x14,0x05, - 0xde,0x6c,0xe7,0xd7,0x8d,0x18,0xa0,0x99,0xe0,0x67,0xcd,0x10,0x91,0xb8,0x22,0x79, - 0x99,0x9e,0x35,0x6b,0xda,0xde,0x7a,0x42,0x50,0x61,0xdf,0x82,0x7c,0x1b,0x65,0xaf, - 0xe6,0x3a,0x54,0x9d,0x1d,0x95,0x40,0xd1,0xc8,0xf4,0xee,0xf9,0xda,0x8e,0x20,0x2f, - 0xdb,0xc6,0xda,0xfe,0x9e,0x89,0x28,0xe1,0xed,0x8d,0xce,0xa8,0xb3,0xa4,0x2e,0x70, - 0x1d,0x8a,0xf0,0xe5,0x00,0x8c,0x7a,0xe7,0x1a,0xab,0x6a,0x74,0xef,0xb0,0xea,0xbc, - 0x88,0x74,0xdd,0xed,0x1c,0xf5,0x6d,0x6f,0x7e,0xd4,0xa7,0x7b,0x96,0x23,0x94,0x75, - 0xbc,0xb3,0xb3,0x73,0x94,0x41,0x14,0xb0,0x30,0xe5,0x5a,0x4f,0x5a,0x24,0xa3,0x85, - 0xfd,0xfb,0x91,0xed,0xa0,0x8e,0x8f,0x20,0xae,0xea,0x61,0xe8,0x6b,0xe8,0xb2,0x05, - 0x1e,0x1d,0x1f,0xcd,0x87,0xc7,0x5f,0xdc,0x4d,0x08,0xbc,0xb5,0xf3,0x92,0x08,0x64, - 0x80,0x77,0x5a,0xc7,0xbb,0x73,0x91,0xa6,0x49,0x31,0xae,0x66,0xf7,0x9d,0xbc,0x1d, - 0x94,0x5d,0x54,0x02,0x81,0x63,0xb6,0x8e,0x4f,0x31,0xe6,0x39,0x8b,0xab,0xfb,0x15, - 0x48,0xb9,0x9c,0xed,0x66,0x08,0x0d,0x63,0x66,0xe6,0x82,0xd9,0xfb,0x1a,0x16,0xa7, - 0x08,0x16,0x9a,0x25,0x06,0x58,0x52,0xcc,0x30,0x58,0x69,0xf8,0xdd,0xab,0x0f,0x0c, - 0x50,0x90,0x29,0x31,0x85,0xae,0x55,0x33,0x99,0xd3,0xe3,0x5c,0x2c,0xd8,0xb4,0x4c, - 0xd2,0xc8,0x3f,0xea,0x17,0x76,0xdf,0x27,0xbd,0x1e,0xbb,0x98,0xcb,0x45,0xce,0x16, - 0x73,0x61,0x67,0xd1,0x0c,0x20,0x03,0x33,0xc1,0x10,0x4a,0x75,0x53,0x91,0x2f,0x9f, - 0xdf,0xd9,0x5d,0xae,0x13,0xce,0x5e,0xe2,0xcd,0x13,0x5e,0x04,0xd5,0xc8,0x02,0xab, - 0x8b,0x39,0xc4,0x24,0xec,0x44,0xaa,0xc8,0x32,0x44,0xf5,0x50,0x40,0x0a,0x43,0xc4, - 0x6f,0x7d,0xd6,0xeb,0x91,0x39,0xa3,0xe4,0x9a,0xac,0xe3,0xf0,0x9a,0x6c,0x0c,0x8f, - 0x9b,0xd6,0xad,0x49,0x71,0xeb,0xf8,0x1d,0x04,0x09,0xc0,0x22,0x29,0xe7,0x2c,0x68, - 0xe7,0x6f,0x88,0xc1,0xe2,0x8d,0x1e,0x81,0xc7,0x6e,0xc2,0xb4,0x04,0xae,0x99,0x37, - 0xe7,0xfc,0x20,0x5b,0x0c,0xd9,0xe3,0xa4,0x65,0xc7,0x5a,0xc7,0xe7,0xc2,0x84,0x73, - 0xb6,0xcb,0xb3,0x62,0x6c,0x8d,0x7a,0xd4,0xb7,0x43,0xa4,0xa9,0x15,0xb6,0xf3,0xb0, - 0x72,0x97,0x0b,0xc9,0x90,0xcc,0xe9,0x95,0x66,0xa4,0x57,0xe5,0x53,0x18,0x6a,0xad, - 0xc7,0x0d,0xec,0x39,0x18,0x56,0x91,0x50,0x1c,0x9f,0x90,0xcd,0xed,0xfe,0x11,0x78, - 0x23,0x95,0x3c,0x02,0xb3,0x1d,0x4d,0x8f,0xd1,0xf5,0xa0,0xcc,0x71,0xed,0xfe,0x62, - 0x75,0x09,0xe7,0x03,0xd5,0xb8,0x62,0xbb,0x8a,0x2b,0x35,0x66,0x24,0xa2,0xcb,0x00, - 0xc8,0x61,0x17,0x58,0xc8,0x55,0x54,0x26,0xb9,0xec,0x85,0x69,0x42,0xeb,0xc5,0x0d, - 0xde,0xfc,0x91,0xe7,0x6b,0xeb,0x3c,0x42,0xc9,0xd1,0x4a,0x49,0x8a,0xca,0x04,0xd8, - 0x9b,0xc0,0xbd,0xd9,0x5b,0x01,0xec,0xb5,0x11,0x8c,0x85,0x5c,0x08,0x25,0xa2,0x31, - 0x4e,0xb9,0xc6,0x0b,0xa2,0x44,0xe8,0x6e,0x15,0xa2,0xdd,0xb5,0x78,0xb4,0xf1,0xda, - 0xd4,0xa5,0x19,0x10,0x8e,0x25,0x82,0x59,0xe7,0x89,0x76,0xe1,0xa8,0xc4,0x3f,0x4a, - 0x28,0xb7,0x10,0x4b,0x0a,0x80,0x68,0xc6,0xa8,0x0b,0xf0,0xd9,0xc7,0xbc,0xa1,0x41, - 0xc0,0xe6,0x12,0xa6,0xc2,0xd9,0xdf,0x8e,0xac,0xc9,0xac,0x65,0x3e,0x9c,0x5d,0xfe, - 0xfc,0xf1,0xf3,0xdb,0x2e,0x4e,0x85,0xf9,0xa5,0x22,0xfb,0xbc,0xdd,0x6f,0xce,0x81, - 0x07,0x5f,0x3e,0x9d,0xbe,0xba,0x3c,0xc3,0x87,0xfe,0x16,0xa5,0x10,0xce,0xb7,0x85, - 0x28,0x14,0x43,0x97,0xaf,0x94,0xa4,0x73,0x30,0xc1,0x5a,0x78,0x36,0xe7,0x52,0x11, - 0x6b,0x1d,0x83,0x8b,0xc0,0x29,0xe1,0x15,0xe4,0x07,0x0b,0xe7,0x52,0x6a,0xe1,0x32, - 0xa4,0x11,0x3d,0xb5,0x87,0x30,0x41,0x79,0x18,0x8a,0xc2,0x4c,0x5a,0xdf,0xf7,0xbf, - 0x6f,0x75,0x59,0x2e,0x0d,0x6b,0xe1,0x66,0xad,0x80,0xbd,0xca,0x41,0x2f,0xe0,0x65, - 0x19,0x2f,0x34,0x2b,0xf3,0xab,0x1c,0x33,0x19,0x0a,0x9d,0xc8,0xf1,0xf2,0x49,0xe3, - 0x0e,0xbc,0xca,0x4e,0x42,0xd0,0x9e,0xcc,0xd3,0x5b,0x97,0x89,0xac,0x1d,0xf2,0x4c, - 0x28,0xde,0x9f,0x81,0x5a,0x42,0xdd,0x76,0xac,0x93,0x20,0x57,0xb4,0xcc,0x2a,0xa3, - 0x6a,0xf6,0xe1,0xa3,0x53,0xa0,0x12,0x14,0x49,0x78,0x8a,0x66,0xd7,0xb0,0x9c,0x2e, - 0x82,0x39,0x6e,0x5a,0xc0,0x99,0xc0,0xf5,0x3c,0xbf,0xa5,0xd6,0xcc,0x2d,0x62,0xe0, - 0xc2,0xc5,0x9c,0x1b,0xbc,0x1a,0x4d,0xa0,0x16,0xde,0xb2,0x29,0x5e,0x95,0xe9,0x4a, - 0x58,0x69,0x63,0x28,0x2e,0xd3,0xd4,0x19,0x43,0xb1,0x45,0x02,0x15,0x89,0x9e,0x22, - 0x6c,0x64,0x3c,0x07,0x2c,0x02,0xdc,0xb8,0x84,0x27,0x3f,0x5d,0x00,0x33,0x02,0x26, - 0x0a,0x20,0x5b,0x8b,0xa8,0xcf,0x4b,0xea,0x63,0xc5,0x62,0x49,0x0e,0xe1,0xcc,0xa3, - 0x1a,0x6b,0x92,0xbc,0x28,0x0d,0xf9,0x11,0x45,0x56,0xd9,0x6f,0xdf,0x37,0xad,0xcb, - 0xa8,0x22,0x80,0xb7,0x1b,0x05,0xb6,0xb5,0x86,0x56,0x50,0xb8,0x21,0x4b,0xaa,0x4f, - 0x31,0x21,0xbb,0xf5,0xd6,0x7a,0x56,0xe1,0x28,0x14,0xb4,0x1a,0x8a,0x8e,0xfa,0x58, - 0x55,0x20,0xa6,0x8e,0xaa,0x8b,0x79,0x28,0x70,0x0c,0xa3,0x6a,0x12,0xc9,0xb0,0xcc, - 0x80,0xb0,0xf9,0x33,0x61,0xce,0x52,0x81,0x6f,0x4f,0x6e,0xdf,0x44,0x6d,0x0f,0x47, - 0xbd,0x4e,0x17,0xd5,0x7c,0x93,0x3f,0x3c,0x0d,0xc7,0x61,0x1a,0x99,0x03,0x4b,0xcd, - 0xc3,0x33,0x71,0x14,0x66,0xc2,0x19,0x1e,0x9e,0x03,0x83,0x95,0xb0,0xf8,0x9b,0xc2, - 0x62,0x2b,0x0c,0x0e,0xf9,0xf0,0x1c,0x18,0xac,0x84,0xb9,0xac,0x7e,0x78,0xae,0x9b, - 0xe0,0x41,0x43,0x8a,0xa6,0x81,0x8f,0x22,0x9a,0xc4,0x3c,0x45,0x42,0x5a,0xea,0x5b, - 0xf7,0xb6,0x2c,0x10,0x1b,0x21,0x82,0xec,0xe7,0xf1,0xce,0x4e,0x5c,0xe6,0xc4,0xc2, - 0x99,0x16,0xe6,0x13,0xe8,0xd4,0x36,0xdd,0xb0,0xb3,0xa4,0x5b,0x1e,0xe4,0x7c,0xaf, - 0xdd,0x37,0x1d,0x66,0x4c,0x8f,0x28,0x15,0x3f,0xe0,0xb7,0x21,0xe1,0xd7,0xaf,0x9e, - 0x77,0xb7,0xb6,0xfc,0xbd,0x9e,0xd9,0xd5,0x48,0x45,0xd6,0x17,0xe3,0x93,0x7b,0x6b, - 0x77,0xfa,0x7d,0x8a,0x4a,0x87,0x80,0x10,0xbb,0xd7,0x02,0xab,0xad,0xc0,0x04,0x87, - 0x75,0x0c,0xe2,0x9e,0x33,0x93,0x64,0xc2,0x67,0x17,0x57,0x49,0x51,0x20,0x74,0x15, - 0x32,0x4d,0x31,0x27,0x30,0xb6,0xeb,0xd3,0x40,0x9a,0xa0,0x30,0xcc,0x6d,0x91,0xcb, - 0x72,0x36,0xc7,0x34,0x4c,0xb0,0x74,0x2f,0xf2,0x00,0x64,0xe0,0x22,0x98,0xa3,0x4b, - 0x81,0x75,0x21,0x93,0x68,0x36,0x76,0x72,0x76,0xfe,0xf1,0xf3,0x19,0x65,0x8a,0x15, - 0x04,0xe1,0xcb,0x15,0xe2,0x2b,0x09,0x83,0xce,0x03,0x17,0xe5,0x80,0xc1,0x48,0xc9, - 0x6c,0x76,0x1b,0xcc,0x45,0xd4,0x10,0x11,0x55,0x68,0xca,0x4f,0xb7,0x23,0x80,0xc5, - 0x42,0x44,0x33,0x44,0xa3,0xa1,0x3f,0x62,0xef,0x4f,0xd8,0xa7,0x8f,0x17,0x97,0x20, - 0xc0,0x48,0x14,0xd7,0x7a,0x6d,0xbf,0x8c,0x41,0x5b,0xa5,0x12,0x56,0x46,0x25,0x66, - 0xb2,0xdb,0xba,0x05,0x27,0x94,0x96,0x01,0x58,0x55,0x19,0x07,0xda,0x6c,0x90,0xfd, - 0xba,0x7d,0x2b,0x25,0x51,0x56,0xc8,0xf3,0x50,0xa4,0xda,0x56,0x13,0xe0,0xe3,0x82, - 0xc9,0x42,0xe4,0x64,0x07,0x7b,0x66,0x16,0xd6,0x9b,0xf9,0x14,0x0e,0x28,0xf5,0x15, - 0x4a,0x9c,0xe4,0x00,0x15,0xe3,0x95,0xdb,0x70,0xa0,0xdd,0x59,0x42,0x8c,0x25,0x71, - 0xbb,0xb6,0x67,0x47,0x09,0x04,0x7a,0x6c,0x7a,0x1a,0x2b,0x81,0xff,0xd0,0x3b,0x74, - 0xab,0x92,0x08,0x7a,0x6d,0xba,0xfe,0x88,0xb1,0xfc,0xb7,0xbd,0xbe,0xfd,0x1e,0xab, - 0x8f,0xdf,0x2b,0x95,0xda,0xeb,0x2e,0x43,0x0e,0xfc,0x25,0xf0,0xa0,0x8a,0x6a,0x03, - 0x4a,0x7a,0x5d,0x0d,0xcd,0x15,0x4f,0x83,0x5a,0xa4,0x6f,0x1f,0xdc,0x75,0xf0,0x3a, - 0x07,0xcb,0x4b,0xbb,0xd2,0xab,0xad,0x3a,0x4b,0xab,0x03,0x53,0xfe,0xef,0x1a,0x1e, - 0x74,0xee,0x3a,0x1b,0x53,0x34,0xa9,0xcd,0x5c,0xa8,0x6b,0x9f,0xfe,0x8e,0x29,0xd8, - 0xb5,0x8f,0x7f,0x6c,0xcf,0x06,0xe7,0xc2,0x0f,0x9d,0x2a,0xbe,0xbd,0x93,0x2f,0x17, - 0xff,0xe5,0x75,0x3d,0xbc,0xfa,0xf4,0xdc,0xf5,0x0d,0x18,0x53,0xe0,0x44,0x12,0xb1, - 0x9a,0xf9,0xf9,0xec,0xd5,0x29,0x4e,0x95,0x57,0x6b,0x13,0xeb,0xf1,0x77,0x1f,0x5f, - 0xbf,0x3d,0x3b,0x85,0x09,0xc0,0xbb,0xab,0x19,0x2e,0x0f,0x7d,0x82,0x42,0xbf,0xfa, - 0x7e,0xab,0xfd,0x84,0x44,0xef,0xee,0x3e,0x21,0x5d,0x5e,0x7a,0x74,0x3d,0xe9,0xa1, - 0x71,0x72,0xe1,0xd9,0x95,0xd4,0xf2,0x50,0x92,0xbc,0x4b,0xa0,0x3a,0x1b,0x39,0x9b, - 0xa5,0x02,0x60,0xcc,0x35,0x41,0x5e,0xd7,0xca,0xf8,0xfa,0x95,0x44,0xe0,0x1a,0x30, - 0x49,0xc8,0xd1,0xf6,0xb5,0x4d,0x44,0x67,0x09,0xc7,0x78,0x22,0xbe,0x7e,0x15,0x3e, - 0x7e,0x69,0xf9,0x64,0x32,0xf1,0xc8,0xd4,0x67,0x4a,0x49,0x40,0xa6,0x5a,0xf5,0x8f, - 0xe7,0xe7,0xef,0xde,0x7c,0x38,0xab,0x74,0xbf,0x03,0x79,0x77,0x3b,0x30,0x4a,0xdf, - 0x5f,0x41,0x8d,0x68,0xa3,0x93,0xba,0xa3,0xc1,0x60,0xd0,0x19,0xdb,0x18,0x01,0xac, - 0x20,0x0d,0xa1,0x1f,0x38,0xbb,0x86,0xfc,0x41,0x25,0x45,0x0e,0x31,0xe0,0x51,0x39, - 0xf6,0xba,0xb5,0x12,0x56,0x87,0x55,0x30,0x59,0x04,0xf6,0x69,0x5a,0x9b,0xb6,0x72, - 0x4f,0xb6,0x88,0x02,0x8e,0x39,0x13,0x9b,0xb2,0xdc,0x74,0xfc,0xa3,0xfd,0x54,0xe4, - 0x33,0x33,0xef,0x58,0xf1,0x6b,0x43,0xbf,0x0c,0x7e,0x23,0xe9,0xbf,0x00,0xf4,0xf3, - 0x19,0x12,0x6d,0x38,0x1e,0xbe,0xa5,0x76,0xde,0xfb,0xcd,0x87,0x54,0x39,0xe3,0x6b, - 0xe6,0xba,0xee,0x2c,0xb7,0x1f,0x4a,0x5c,0x77,0x9b,0x46,0x15,0x7e,0xa1,0x04,0x4e, - 0x38,0xb5,0x37,0x1f,0x60,0x8e,0x0d,0x77,0x81,0x84,0xb6,0x47,0x0d,0x2f,0x5a,0x73, - 0xa5,0x46,0x2a,0xf8,0xb5,0x20,0x3d,0xa0,0x1a,0xfd,0xff,0xaa,0xa0,0x44,0x06,0xfb, - 0x6f,0x68,0xf1,0x80,0xcf,0x48,0x9d,0xee,0x66,0xdc,0xd4,0x3e,0xdb,0xdd,0x85,0xd8, - 0xe5,0x86,0x5f,0x52,0xc7,0x0f,0xf4,0x61,0x9b,0xed,0xb7,0x4d,0xa9,0x7c,0xb0,0x42, - 0x98,0xca,0x51,0xdf,0x02,0x19,0xdc,0xbb,0xff,0x2b,0xb2,0xb2,0xff,0xe8,0x27,0x50, - 0x3a,0xb4,0x69,0xc7,0x14,0xbf,0x9d,0xce,0xd2,0x15,0x16,0xef,0x12,0xa1,0x17,0x80, - 0x11,0x41,0x9e,0x5b,0xba,0x88,0x3b,0xfa,0x75,0xfa,0x59,0x71,0x77,0x56,0x5c,0xec, - 0x23,0x93,0x39,0xde,0xfb,0x7e,0x38,0x18,0xed,0xd3,0x4b,0x43,0x92,0x94,0x0c,0x88, - 0x27,0x03,0x5f,0x10,0xb0,0xee,0x21,0x58,0xf3,0xa2,0x80,0xe6,0x40,0x19,0x6a,0xeb, - 0x91,0x2d,0xc1,0x56,0xa9,0x94,0x57,0xd8,0xd8,0x5f,0x21,0xa8,0x03,0xd7,0x9b,0x41, - 0xf9,0x40,0xaa,0xd5,0x23,0x5a,0xce,0x92,0x0c,0x42,0x6b,0x5c,0x15,0x0f,0x94,0x84, - 0x42,0x48,0xb3,0x8a,0x41,0x7d,0x4b,0xb9,0x23,0xc8,0xae,0x0d,0xcd,0x2e,0x4a,0x0d, - 0xe4,0x32,0x91,0xa5,0x06,0xa6,0x47,0x7c,0x97,0x94,0x6c,0xfe,0x72,0xa0,0x6a,0x26, - 0x7d,0xf6,0xb3,0x92,0x44,0xe5,0x53,0xf1,0x72,0xfb,0x36,0x16,0x2f,0x56,0xd2,0x4f, - 0x6d,0x9d,0xa5,0x83,0x85,0xd8,0x0e,0xf6,0x00,0xca,0x84,0x55,0xdc,0xf6,0x05,0x60, - 0x5b,0x81,0x95,0xe7,0x7a,0xab,0x59,0x57,0xe4,0xc1,0xa8,0x52,0x38,0xbf,0xd5,0x60, - 0xde,0x59,0xc1,0x3a,0xd5,0x2e,0x5b,0x1b,0x6a,0xc0,0x39,0x7f,0xf7,0xea,0xe2,0xc7, - 0x37,0x1f,0x7e,0x58,0x43,0x5e,0x60,0x4b,0x1b,0x40,0xe9,0x80,0x71,0x8c,0xf4,0xc8, - 0x0d,0xd9,0xdf,0x58,0x78,0x83,0xef,0x3c,0x27,0x90,0x0e,0xf3,0xa5,0xae,0xfd,0xde, - 0x33,0x1b,0x2b,0xcf,0x3c,0xd6,0xf6,0x9e,0x39,0xe3,0xf6,0x87,0x83,0xfd,0x17,0x07, - 0xcf,0x0f,0xa1,0x68,0xc8,0xf3,0xe4,0x46,0x44,0xed,0x51,0x07,0x26,0xbc,0x3f,0xe9, - 0xd4,0xad,0x17,0xd8,0x01,0x0a,0x2c,0x95,0xce,0xba,0xc6,0xae,0x37,0x63,0xbe,0xd5, - 0x12,0x0b,0xe8,0xcd,0x5c,0x51,0x01,0xfc,0xcf,0xf7,0xef,0x7e,0x34,0xa6,0xf8,0x6c, - 0xcb,0xbf,0x3d,0x23,0x8c,0xf9,0x28,0xa5,0xed,0x61,0xc5,0x87,0x03,0xba,0x4a,0xf8, - 0x12,0x15,0x99,0xa0,0x7a,0xf8,0xa6,0x9e,0x8a,0x84,0x46,0x96,0x66,0xb2,0x37,0xc0, - 0x7f,0xd5,0x53,0x6b,0x5c,0x5f,0xe6,0x85,0x92,0x33,0x68,0xd5,0xf4,0x64,0x23,0x39, - 0x85,0xcb,0xbe,0xd7,0x32,0x03,0x36,0x8e,0x25,0xa1,0x73,0xcf,0x48,0xef,0xb9,0x99, - 0xfb,0x74,0x5d,0x85,0xd3,0x41,0x9e,0x88,0x20,0xc2,0x06,0x7d,0x01,0x56,0x30,0x3c, - 0x05,0x0b,0x7c,0xe7,0xdd,0xd5,0x2a,0x53,0x9f,0x3c,0x69,0x40,0xed,0x8e,0x6d,0x29, - 0x36,0x28,0xa2,0x2b,0xa2,0xb8,0xc4,0x96,0xf6,0xc9,0x64,0x02,0xa1,0xeb,0xa6,0x5b, - 0x9e,0xbb,0xee,0x2a,0xbc,0x43,0xf3,0xaa,0x1b,0xd3,0xca,0x61,0xe7,0xd4,0xca,0x42, - 0x53,0xf1,0x99,0xda,0x58,0xf4,0x5c,0xaf,0x69,0x73,0x3d,0x97,0x25,0xf4,0x9f,0x53, - 0x41,0x17,0xec,0x48,0xbc,0x20,0x8c,0xa0,0xed,0x18,0x0e,0x40,0x04,0xf0,0x99,0x48, - 0xfb,0x6b,0xa5,0x98,0xb1,0x05,0x4f,0xcc,0xb9,0x54,0x56,0x5e,0xdb,0x3d,0xbe,0xc3, - 0x12,0x5d,0xa9,0x86,0x9e,0x33,0x13,0xcf,0x65,0x68,0xcc,0x21,0x57,0x22,0x0c,0x92, - 0xd5,0x59,0x9e,0x79,0x9d,0x5a,0x53,0xa3,0x6e,0x97,0x66,0xf2,0xd3,0xc5,0xc7,0x0f, - 0x7e,0x81,0xbf,0x16,0xa2,0x23,0x83,0x2b,0x0a,0xe8,0x05,0xc5,0x25,0xf0,0xd9,0x8e, - 0x2f,0xb0,0x8c,0x7e,0xfd,0x6a,0xee,0x6c,0xdd,0x05,0xcf,0xdc,0x6d,0x1e,0x93,0x36, - 0x09,0x20,0x2a,0xcd,0x1a,0x2f,0xd8,0x1a,0xec,0x8d,0xea,0x8f,0x72,0x1a,0xae,0xa1, - 0x8d,0x1e,0xe7,0x9b,0x6a,0xe7,0x6f,0x12,0x4c,0x7f,0x8d,0x69,0x13,0xb5,0x55,0x65, - 0xae,0x2d,0x61,0x04,0xb3,0xd7,0x77,0x54,0x65,0x0e,0x28,0x4e,0xd4,0x12,0x2f,0xdf, - 0xdd,0x9d,0x03,0x61,0x45,0x12,0xa3,0x53,0x22,0x59,0x4e,0x81,0x0c,0x83,0xad,0x18, - 0x9f,0x41,0x4f,0xe6,0xaf,0xd3,0x9f,0x6f,0x1d,0xb2,0x71,0xbc,0x2a,0x07,0xfe,0xd4, - 0x01,0xbf,0x38,0xa0,0x85,0xb5,0xd0,0x67,0x97,0x06,0xce,0x54,0x69,0x01,0x1d,0x03, - 0xf5,0xbe,0xc6,0x92,0x68,0x6c,0x4a,0xe1,0x10,0x74,0xb5,0x4f,0x97,0x3a,0x16,0xb0, - 0xe9,0xee,0xed,0xcb,0xc5,0xc9,0x9f,0xd5,0x19,0xc3,0x28,0x8e,0x28,0xff,0x21,0xde, - 0xb2,0x53,0xa8,0x7a,0x10,0x6e,0x71,0xe4,0x03,0xde,0x8b,0x9c,0x9a,0x39,0x6b,0x3d, - 0xa8,0xa8,0x5d,0x57,0xb8,0xaa,0xb3,0x6a,0x9c,0x10,0x47,0xc4,0xaf,0x56,0x45,0x71, - 0x23,0x74,0x97,0x6e,0x13,0xa3,0x12,0xa1,0x27,0x83,0x6a,0x4f,0x33,0x69,0x32,0xb2, - 0x4d,0x5b,0x41,0x4e,0x3e,0x7b,0x46,0x2b,0x8e,0xf7,0x20,0x1b,0x43,0x60,0x1a,0xaa, - 0x9e,0x6c,0x9a,0xc0,0xfd,0x78,0x8a,0x7e,0x8f,0x64,0xab,0x3a,0xcd,0x61,0x3b,0xf0, - 0xdc,0xd5,0x96,0x8d,0x56,0xcc,0xfa,0xd5,0xeb,0xb7,0x55,0x8e,0xde,0x2f,0x3a,0x94, - 0xd6,0x00,0x3a,0x09,0xb4,0x4f,0x8d,0x2b,0xd5,0xba,0xa0,0xb9,0x95,0x56,0xe1,0xfb, - 0xd4,0x16,0x52,0xcd,0x92,0x5e,0xc7,0x4a,0x77,0x6c,0x03,0x69,0xaf,0x51,0xdd,0xd5, - 0x24,0x8b,0x95,0xcc,0x36,0xaf,0x61,0xdb,0xad,0x0b,0x81,0x17,0x33,0xe8,0xfc,0x9f, - 0x93,0xde,0x79,0xd2,0xea,0x04,0x16,0xfe,0x69,0x98,0x4c,0x23,0xa8,0xe5,0xc3,0x85, - 0xb6,0x7c,0xdb,0x1b,0x61,0xac,0x0a,0xb1,0x10,0x11,0xa5,0x03,0x36,0x72,0xab,0x7b, - 0x1b,0x07,0x29,0x05,0x00,0x2e,0xdd,0xe1,0xe4,0xb2,0x79,0x4b,0xdb,0x45,0x69,0xd0, - 0xa3,0x86,0x73,0x7b,0x19,0x54,0x5d,0x34,0xd9,0x1f,0x82,0x69,0x6c,0xe0,0x90,0xc6, - 0x00,0xe4,0x2d,0xa8,0xc0,0x73,0x35,0x4d,0x8c,0xe2,0x10,0xcd,0x96,0x67,0x51,0xb2, - 0x56,0x86,0x41,0x59,0x80,0xe9,0xa6,0xee,0x90,0x8b,0x72,0x0a,0x54,0x9a,0xbd,0xfe, - 0xf8,0xf9,0x82,0x56,0x8b,0x1b,0x1e,0x1a,0x20,0x0c,0x74,0x26,0x3a,0x8e,0x6d,0xfa, - 0xc0,0x32,0x5f,0x54,0xea,0x3a,0x3e,0x04,0x37,0x17,0x56,0x9a,0x22,0xf9,0xcb,0xe7, - 0x77,0x17,0xe0,0xc8,0x70,0xfe,0x89,0x2b,0x9e,0xe9,0x36,0xd4,0x5d,0xfa,0x8d,0x0c, - 0x44,0x2c,0x3e,0xed,0xe0,0x0d,0x43,0xdb,0x03,0x19,0x36,0x4d,0xc0,0xfd,0x7a,0x77, - 0xb7,0xff,0xdf,0xf4,0x83,0xc0,0x97,0xc1,0xaf,0xfd,0x5f,0xfb,0x15,0x55,0xd3,0x1d, - 0x17,0x24,0x6e,0x43,0xed,0xfa,0x99,0x87,0xae,0x2a,0x1a,0x77,0xcd,0x5e,0x67,0xed, - 0xa2,0x40,0x03,0xdc,0x42,0x02,0x86,0xa2,0xbd,0xb1,0x51,0xd7,0xab,0x92,0xf5,0x8f, - 0xa4,0x82,0xc4,0xed,0x8c,0x02,0x43,0x67,0xa7,0x89,0xdb,0x7f,0x24,0xe9,0x07,0x09, - 0xb2,0x1e,0xd3,0xed,0x38,0xb6,0x65,0x4f,0xff,0xf5,0xeb,0x43,0x04,0xf7,0xff,0x98, - 0x8d,0xa1,0x27,0xa7,0x26,0x9f,0xa0,0xd7,0x89,0x4b,0x99,0xbc,0xfe,0xc2,0xac,0x26, - 0x68,0x2b,0xfa,0x75,0x76,0xf9,0xfa,0x1e,0xfd,0xaa,0x55,0x71,0x77,0xe6,0xb8,0xe9, - 0x2a,0x79,0x28,0x97,0xbc,0x67,0xf6,0x58,0x3e,0x18,0x33,0x81,0x78,0xe8,0x7b,0x9d, - 0x5f,0x46,0xbf,0x01,0x93,0xf2,0x7d,0xc7,0x8e,0x2c,0xb4,0xd8,0x59,0x0f,0xa1,0x07, - 0x1e,0x9f,0xc0,0xc3,0xcc,0x15,0x84,0x3c,0x86,0x1f,0x35,0xa4,0x6d,0xef,0xc7,0xcb, - 0xcb,0x4f,0xb0,0x49,0x55,0x8e,0x9d,0x93,0xeb,0xd6,0x1f,0x7c,0x37,0x6d,0x57,0xbd, - 0xee,0xba,0xec,0xa9,0x93,0xbd,0x76,0xee,0x46,0xd5,0x70,0x7d,0x07,0x81,0x36,0x24, - 0x55,0xfb,0x97,0xe9,0x6f,0xdd,0x1a,0xa8,0x31,0xcb,0x01,0xfe,0xf0,0x22,0x33,0xf0, - 0x00,0xc5,0xc1,0xa7,0x14,0xfc,0x7d,0x19,0x1a,0x61,0x00,0x0c,0xf1,0xab,0x48,0x40, - 0xc3,0x87,0xdb,0xec,0x6f,0xee,0x5d,0x75,0xcc,0xeb,0xe5,0x19,0xe9,0x0d,0xa6,0x7d, - 0xfd,0x15,0xc5,0xca,0xd6,0xc0,0x49,0x84,0x9f,0x41,0xcd,0x02,0x44,0x02,0x4a,0xe2, - 0xb3,0xd3,0xe6,0x1c,0xc2,0x24,0x82,0x4c,0x88,0x16,0x57,0xc3,0x11,0x9b,0x22,0xf7, - 0x95,0x02,0xc5,0xc8,0xfd,0x9e,0x83,0x54,0x07,0x9c,0x84,0xff,0x8d,0x1f,0x34,0xf7, - 0xe9,0x8b,0xba,0xa3,0xbe,0xfd,0xd5,0xf4,0xbf,0x01,0x14,0x7b,0x13,0x30,0x46,0x2d, - 0x00,0x00, + 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x02,0xff,0xad,0x5b,0xe9,0x72,0xdb,0x48, + 0x92,0xfe,0xaf,0xa7,0x80,0xe8,0x69,0x01,0x68,0x83,0xe0,0x61,0x49,0x76,0x83,0x82, + 0xb4,0xb2,0x2d,0xf5,0xe1,0x4b,0x21,0xc9,0xeb,0xdd,0xf6,0x78,0x36,0x40,0xa2,0x40, + 0xa2,0x05,0x02,0x58,0x00,0x14,0xc5,0xa6,0x18,0x31,0xbf,0xf6,0x01,0x36,0xf6,0x19, + 0xf6,0xc1,0xfa,0x49,0xf6,0xcb,0xac,0xc2,0x41,0x8a,0xea,0xd0,0x4c,0xac,0x7e,0x90, + 0x04,0x50,0xc8,0xca,0xca,0xe3,0xcb,0xa3,0x4a,0x47,0xbb,0x7e,0x32,0x2a,0x16,0xa9, + 0xd0,0x26,0xc5,0x34,0x3a,0xde,0x39,0xa2,0x2f,0x2d,0xf2,0xe2,0xb1,0xdb,0x12,0x71, + 0x8b,0x6e,0x08,0xcf,0xc7,0xd7,0x54,0x14,0x9e,0x36,0x9a,0x78,0x59,0x2e,0x0a,0xb7, + 0x35,0x2b,0x82,0xf6,0x2b,0x7a,0x9a,0x8f,0xb2,0x30,0x2d,0xb4,0x3c,0x1b,0xb9,0xad, + 0x4e,0x1a,0xb4,0x47,0x49,0x9c,0x27,0x91,0xb0,0x7f,0xcb,0x4f,0x26,0xae,0xdf,0xed, + 0x0f,0x5f,0xbc,0xe8,0xf7,0x5b,0xc7,0x47,0x1d,0x39,0xf0,0x58,0xbd,0x70,0x1c,0x06, + 0xc6,0xee,0x3c,0x8c,0xfd,0x64,0x6e,0x5f,0x9c,0x9b,0x46,0x30,0x8b,0x47,0x45,0x98, + 0xc4,0x86,0xb9,0xbc,0xf5,0x32,0xed,0x8b,0x2b,0x9f,0x59,0x9f,0x5d,0xbd,0xe3,0xa5, + 0x61,0x27,0x2f,0xbc,0x62,0x96,0xeb,0xd6,0x7b,0xf7,0xeb,0x37,0xeb,0x83,0xdb,0x17, + 0x3f,0x58,0x57,0xd6,0xaf,0xd6,0x85,0xfb,0x05,0xaf,0xbb,0x4b,0x7a,0x2c,0x1c,0x3d, + 0x0a,0x6f,0x85,0x6e,0xf9,0x61,0x56,0x2c,0x9c,0xdd,0x9e,0x75,0xeb,0xc4,0xb3,0x28, + 0xb2,0xc6,0xa2,0x70,0x7e,0xb4,0xc2,0x38,0x88,0xc2,0xf1,0xa4,0x70,0x3e,0xce,0xa6, + 0x43,0x91,0x59,0x93,0x24,0xf2,0x9d,0x4f,0xc3,0xdf,0xc4,0xa8,0xb0,0x72,0x6f,0xe1, + 0x54,0x1c,0x14,0xd6,0x8d,0x25,0xcc,0xa5,0xd8,0xdb,0x33,0x84,0x5d,0x88,0xbb,0xe2, + 0x4d,0x12,0x17,0x22,0x2e,0xdc,0xc2,0x5c,0x59,0xc3,0x59,0xde,0x18,0x3a,0xb4,0x52, + 0x73,0x59,0x5e,0x69,0x01,0x98,0x1f,0xda,0x7e,0x98,0x7b,0xc3,0x48,0xf8,0xee,0x6e, + 0x6f,0xd5,0xbc,0xea,0x0e,0x52,0xbb,0x98,0x88,0xd8,0x08,0xac,0xc0,0x1c,0x64,0xa2, + 0x98,0x65,0xb1,0x96,0xae,0xac,0x34,0x89,0xa2,0x9a,0x62,0x6e,0x4d,0xad,0x91,0x95, + 0x48,0x29,0x14,0x56,0x60,0x8d,0xdd,0xde,0xa0,0x9a,0xe1,0x12,0x33,0x8c,0xf7,0xf6, + 0x76,0x03,0xf0,0x16,0xb8,0x3d,0x6b,0x14,0x09,0x2f,0xbb,0x0e,0xa7,0x22,0x99,0x15, + 0x46,0x61,0x5a,0x46,0x6e,0x8f,0xbc,0x28,0x3a,0xc9,0x0d,0xd3,0xf9,0xd1,0xc8,0x4d, + 0x53,0xcd,0x58,0x52,0xf7,0xcd,0xe5,0xc8,0xf0,0x2d,0x92,0x0a,0xd6,0x52,0xdd,0x16, + 0x74,0x9b,0x45,0x25,0xcc,0x95,0x7a,0xe7,0x9d,0xf5,0xce,0x34,0x57,0xd5,0xcc,0xef, + 0x30,0x73,0xe0,0x76,0x07,0x1b,0x33,0x0e,0xc0,0x8d,0x51,0xb8,0x30,0x89,0xf2,0xde, + 0xa5,0x35,0xc5,0x7b,0xc9,0xde,0x5e,0x62,0x07,0x61,0x96,0x17,0xae,0x0b,0x41,0x9c, + 0xe0,0x75,0x07,0xcc,0xab,0x65,0x43,0x5d,0x49,0xea,0x34,0x54,0x3e,0x7e,0x48,0x79, + 0x65,0x81,0x68,0x3d,0x26,0x36,0x97,0x53,0x37,0x1e,0x04,0xf7,0xf7,0x20,0xb5,0xb2, + 0xe2,0x64,0xee,0x5c,0xae,0x30,0x86,0xcd,0xa2,0x1e,0x36,0xc2,0x4a,0xf6,0xf6,0xde, + 0xdb,0xe9,0x2c,0x9f,0xe0,0x62,0x70,0x75,0x82,0xcb,0x91,0x71,0x65,0x3a,0xbf,0x9e, + 0xfc,0x6a,0xe3,0x2d,0xf0,0xf1,0xab,0x7b,0x61,0x93,0xd0,0x8d,0xcf,0xd6,0x07,0xeb, + 0x2d,0x88,0xcd,0xbd,0x62,0x34,0xb9,0xda,0xa0,0x34,0x35,0x97,0x17,0xb6,0x24,0x0f, + 0xbe,0x7f,0xb5,0xc1,0x8d,0xf1,0xc1,0xfd,0xe0,0x15,0x13,0x7b,0x1a,0xe2,0xb1,0xf5, + 0xc1,0xe4,0x57,0xc3,0xe2,0x3c,0xc9,0xde,0x8a,0xdb,0x70,0x24,0xea,0x97,0xa1,0xbf, + 0xc4,0x4d,0xee,0xef,0x97,0xab,0x52,0xd1,0xb1,0x98,0x6b,0x17,0x59,0x32,0x0d,0x73, + 0x51,0xab,0x63,0x61,0xc5,0x52,0xd1,0x93,0x9a,0xa5,0xbe,0x78,0x51,0x2b,0x26,0x37, + 0x97,0x39,0xd4,0x6d,0x24,0xf6,0x70,0x16,0x46,0xfe,0xde,0x5e,0x2e,0x7f,0xb8,0xae, + 0xba,0x63,0x42,0xfc,0x13,0x9b,0xc4,0x69,0x98,0xd6,0x82,0x34,0xbe,0x32,0x07,0x0d, + 0x6d,0x34,0x64,0x5c,0x0e,0x1b,0xc4,0xc6,0x59,0x96,0x25,0x99,0xa1,0x17,0x72,0x90, + 0x4e,0x0b,0x49,0x6c,0x75,0x75,0x7f,0xff,0x83,0xd8,0x07,0x95,0xd5,0xaa,0x36,0xbb, + 0x1f,0x8d,0x19,0x99,0xa4,0x5a,0x4a,0x20,0x20,0x2e,0xbe,0xb3,0x61,0x5d,0x99,0xb9, + 0x24,0xaf,0xce,0xec,0xe4,0xc6,0x2c,0x26,0x59,0x32,0xd7,0xe4,0x44,0x99,0x92,0x63, + 0x65,0xf5,0x6c,0x1d,0xe4,0x59,0x27,0x19,0x7f,0x41,0x29,0x19,0x00,0x83,0xd8,0x5c, + 0x35,0x6c,0xee,0x2d,0xad,0x1f,0x14,0xf1,0x79,0x05,0x3f,0x4f,0x03,0xa9,0x23,0x37, + 0x1f,0xbc,0xb7,0x83,0x24,0x3b,0xf3,0xc0,0x46,0x35,0x79,0x00,0xfb,0xc4,0x48,0x62, + 0x7c,0x65,0x1a,0x66,0x85,0x37,0x0a,0xb8,0x62,0x6f,0x2a,0xdc,0xd6,0x6d,0x28,0xe6, + 0x69,0x92,0x15,0x2d,0x6d,0xa4,0x7c,0xba,0x35,0x0f,0xfd,0x02,0x40,0xc5,0x0a,0x6c, + 0xf3,0x05,0x90,0x22,0x2c,0x42,0x2f,0x6a,0xe7,0xf0,0x25,0xe1,0xf6,0x08,0xe5,0x8a, + 0xb0,0x88,0xc4,0xf1,0x85,0x57,0x14,0x22,0x03,0x8e,0x60,0x69,0x7f,0xfc,0xfd,0x7f, + 0xb4,0xf3,0x30,0x9b,0xce,0xbd,0x4c,0x68,0xb3,0xd4,0x07,0xfe,0x1c,0x75,0xe4,0x30, + 0x80,0x62,0xb1,0xa0,0x6f,0x4d,0x73,0xb2,0x24,0x29,0x96,0xed,0xf6,0x28,0x13,0xde, + 0xd4,0x79,0xd6,0x7d,0xd3,0x7d,0xdd,0xfd,0x61,0xa0,0xae,0xfb,0xce,0xb3,0xde,0xeb, + 0xde,0x0f,0xbd,0x7d,0xdc,0x08,0xe3,0x1b,0xe7,0xd9,0xd9,0xdb,0xb3,0x97,0x6f,0x5f, + 0xe3,0x6a,0x3a,0x2b,0x84,0xef,0x3c,0x7b,0x75,0xfa,0xaa,0xff,0xb2,0x8f,0xeb,0xc0, + 0x0b,0xe3,0xc2,0x79,0x76,0x70,0x7a,0x70,0xb0,0x7f,0x88,0xeb,0x6c,0x16,0x09,0xe7, + 0x59,0x7f,0xbf,0xdf,0xeb,0xbd,0x52,0x97,0xed,0x3c,0x09,0x8a,0x06,0xc1,0x88,0x08, + 0x9c,0x9f,0x1f,0xbc,0xe9,0x9f,0xe1,0x2a,0xf5,0x62,0x11,0xe1,0xe9,0x8b,0x5e,0xaf, + 0xd7,0x1d,0x80,0x31,0xf9,0xd7,0x6e,0xe7,0x5e,0x9c,0x3b,0xfa,0xcf,0x10,0x46,0xa6, + 0x5b,0xb3,0x90,0xaf,0xdb,0xb9,0xc8,0xc2,0xc0,0xca,0x17,0x79,0x21,0xa6,0xed,0x59, + 0x68,0xd5,0x37,0x9b,0xaf,0x4e,0x93,0x38,0x71,0xf4,0x5f,0x44,0xf1,0x3a,0x03,0x7b, + 0xb9,0xf6,0x01,0xd7,0x4c,0x83,0x1e,0xe4,0xa9,0x37,0x12,0xd6,0xd5,0x39,0xdd,0x6c, + 0x5f,0x8a,0xf1,0x2c,0xf2,0x32,0xeb,0x83,0x88,0xa3,0xc4,0xaa,0x1e,0xaf,0x40,0xec, + 0xfb,0xe5,0x30,0xb9,0x6b,0xe7,0xe1,0xef,0x61,0x3c,0x76,0x86,0x49,0xe6,0x8b,0xac, + 0x8d,0x3b,0x83,0xa9,0x97,0x8d,0xc3,0xd8,0x01,0x68,0x7a,0xbe,0x4f,0xcf,0xba,0x34, + 0x7a,0x98,0xf8,0x8b,0x25,0xdc,0xaf,0x3d,0x11,0x0c,0xe5,0xbd,0x6e,0xf7,0x76,0x32, + 0x18,0x7a,0xa3,0x9b,0x71,0x96,0xcc,0x62,0xdf,0x81,0x33,0x19,0x4a,0xba,0xe6,0x60, + 0x94,0x44,0x49,0xa6,0x6e,0x41,0xbe,0x66,0xc5,0x7c,0x00,0xe5,0x3b,0xbd,0x83,0xf4, + 0xae,0xd3,0xb3,0x0f,0x0e,0x34,0x39,0x82,0x16,0x69,0x0e,0xda,0x73,0x31,0xbc,0x09, + 0x8b,0x36,0x0d,0x69,0xe7,0x53,0x68,0x6f,0x42,0xb3,0x7b,0x31,0x59,0x44,0xe8,0xe5, + 0xc2,0x1f,0x90,0xc5,0xb6,0x33,0x11,0x83,0x55,0x7a,0x34,0x16,0x09,0x2c,0x2c,0x0b, + 0x47,0x17,0x99,0x18,0x85,0x39,0x6c,0x91,0x38,0xed,0x7c,0xaf,0xd1,0x1a,0x31,0x40, + 0x9b,0x88,0x4c,0x58,0x5a,0x9c,0x14,0x1a,0x6c,0x9a,0x56,0xe0,0x68,0xf0,0x1b,0x84, + 0x52,0xc0,0x81,0xd0,0x73,0x8d,0xe2,0xab,0xc8,0xb4,0x3c,0x2c,0x72,0x2d,0x88,0x00, + 0x5c,0xda,0xf7,0x1d,0x50,0xb0,0xe7,0x99,0x97,0x2e,0xcb,0xe5,0xf7,0xf7,0xd3,0x3b, + 0x8d,0x3f,0x0e,0xf1,0x41,0x33,0xd8,0xac,0xd3,0x25,0x9b,0x2c,0x09,0xe2,0x3b,0xc8, + 0xec,0x4e,0x5a,0xb0,0x73,0x70,0xd8,0x4d,0xef,0x1e,0xca,0x85,0xdf,0x30,0x4b,0xd9, + 0xf6,0x0e,0x41,0xcd,0x9b,0x15,0x89,0x56,0x4b,0x79,0xff,0x15,0xee,0xc9,0x0f,0x35, + 0x8d,0xe4,0x6e,0x89,0x38,0x96,0x46,0x14,0x25,0x23,0x71,0x37,0x80,0x24,0xc6,0x71, + 0x3b,0x84,0x75,0xe4,0xce,0x48,0x90,0xed,0x0c,0xc6,0x5e,0xea,0xe0,0xb5,0x92,0x10, + 0x74,0x58,0x14,0xc9,0xd4,0xe9,0xf5,0x89,0x8f,0x52,0xad,0xf2,0x16,0x88,0x23,0x43, + 0x08,0x7d,0x25,0x77,0x32,0xde,0x92,0xa7,0x72,0x4c,0xbf,0x5c,0xa3,0x0f,0xef,0x91, + 0x4b,0x7a,0x09,0x42,0x4a,0xeb,0x2f,0xb7,0xad,0x0d,0xf6,0x6e,0x96,0x33,0x65,0x9e, + 0x1f,0x02,0xcb,0x7b,0x6a,0x05,0xbd,0xa5,0xd4,0x66,0xf8,0xbb,0x60,0xad,0x0f,0xf8, + 0x72,0x2e,0x89,0x1d,0x76,0xbb,0x83,0x48,0x90,0x5f,0xb7,0x95,0xc2,0x1c,0xbb,0xdb, + 0x13,0xd3,0xda,0x02,0x69,0xc9,0x4e,0x8f,0x28,0x3d,0x4b,0xc3,0x28,0x92,0xc4,0x02, + 0x6f,0x1a,0x46,0x0b,0x35,0x37,0x59,0xb4,0x39,0x68,0x4c,0xd2,0xb5,0x69,0x9a,0x4d, + 0xb2,0xbd,0x3e,0xc8,0xb2,0xf5,0x14,0x19,0x8c,0x0d,0x10,0x36,0x75,0x66,0x69,0x2a, + 0xb2,0x11,0xec,0xaa,0x32,0xce,0x52,0x15,0xa0,0xa0,0xf5,0xba,0xa4,0x89,0x4a,0x84, + 0x0f,0x64,0xc7,0xb8,0xb0,0x6e,0xe8,0x0c,0x1d,0x66,0xc5,0x2d,0xb0,0x78,0xa9,0xa4, + 0xf2,0xc0,0x1d,0x36,0x6f,0xd4,0x2f,0x01,0xd4,0xe2,0x6d,0xaf,0xb1,0x90,0x37,0x6f, + 0xd4,0xaf,0x0d,0x3d,0x7f,0xdb,0x5b,0x5b,0xb8,0x94,0xb7,0x58,0xc5,0xf9,0x6c,0xb8, + 0xac,0x2d,0xf7,0xc5,0xe1,0x68,0xb2,0x65,0x3d,0x83,0x0d,0x0d,0x46,0x61,0x2c,0x2a, + 0x10,0xb0,0x0f,0x36,0xcc,0xe7,0x45,0xbf,0x74,0x91,0xa0,0x7d,0x13,0x8e,0x6e,0x1a, + 0xf6,0x3b,0x8c,0x92,0xd1,0xcd,0xe0,0x09,0x2a,0xec,0x6d,0x53,0xe0,0xfe,0x53,0x14, + 0xb8,0x85,0xfb,0x0d,0xeb,0x56,0xdc,0x01,0x5e,0xd3,0x8a,0xb1,0x71,0x16,0xfa,0x03, + 0xfa,0x68,0xc3,0xad,0x70,0xa7,0x10,0x24,0xc3,0xd9,0x14,0xf0,0xbc,0x4f,0x56,0xd0, + 0x0b,0xa4,0x93,0xf5,0xbb,0xb5,0x97,0x39,0x3d,0x02,0x84,0xee,0x93,0x1c,0xac,0xe9, + 0xb3,0x43,0xb0,0x4b,0x12,0xac,0xb8,0x70,0x38,0x55,0x6b,0x27,0x41,0x9b,0x2a,0x81, + 0x52,0x87,0x94,0xa4,0x6d,0x25,0x56,0xbd,0xa7,0xd9,0xf1,0x93,0xdc,0xe1,0x31,0x67, + 0xd8,0x6e,0xb8,0x92,0x74,0xda,0xf4,0xda,0xfd,0x2d,0x3a,0xff,0xb3,0x97,0x87,0xcb, + 0xa6,0x8f,0x1f,0xc0,0xc7,0xb7,0x19,0xbb,0x1c,0xeb,0x2d,0x1f,0x78,0x06,0xeb,0x78, + 0x46,0x08,0xcf,0x93,0x26,0x41,0x40,0xc9,0xe8,0x8b,0x86,0xde,0x34,0xcf,0x99,0x24, + 0xb7,0x30,0xac,0xad,0xde,0xe0,0x65,0xd3,0x9f,0x60,0xe0,0x95,0x72,0xe3,0x24,0x16, + 0x25,0xa0,0x90,0x02,0xb5,0x6e,0xa5,0x35,0x96,0xb0,0xef,0xe5,0x13,0xb1,0xae,0xaf, + 0xc7,0x82,0xda,0x26,0x4c,0xb0,0x09,0x10,0x94,0x3f,0xc9,0xa8,0xed,0x87,0xce,0x73, + 0xf8,0x18,0x7c,0xa8,0x45,0x3c,0x51,0x96,0xcf,0x26,0x1e,0x0a,0xb6,0x20,0xd8,0xba, + 0x66,0x2c,0x97,0x83,0x57,0x6d,0xb8,0x14,0x7b,0x7a,0xaf,0x1e,0x47,0xb6,0x3f,0x15, + 0x42,0x73,0xbe,0x73,0x44,0xd1,0xe5,0x13,0xfd,0x79,0x8b,0x67,0xce,0x31,0x7d,0x7b, + 0x08,0xaa,0x37,0x0e,0x7f,0xb6,0x51,0x3e,0x95,0x5c,0x1f,0xb2,0xa2,0xb6,0xd8,0xde, + 0x21,0x9b,0xc1,0x38,0x59,0xfe,0xb3,0x38,0xf2,0xa4,0x40,0xf0,0x60,0xf1,0x0f,0x40, + 0x5b,0x99,0xc4,0x23,0x22,0xe4,0xe1,0xeb,0x11,0xb1,0xdf,0x54,0x41,0xbf,0x34,0x9c, + 0xd1,0x2c,0xcb,0x41,0x33,0x4d,0x42,0x0e,0xe5,0xe5,0xfc,0xcc,0x5b,0x48,0xc9,0xb5, + 0x53,0xb3,0xa2,0xd9,0xbd,0x83,0x5c,0x13,0xe0,0xd3,0x62,0x4e,0xea,0x6b,0x25,0x13, + 0xe5,0x16,0x0d,0xe6,0x99,0x4e,0x8a,0x34,0x39,0x2e,0xb6,0x7b,0x21,0x5e,0x2a,0xcb, + 0xe4,0x65,0x42,0x32,0x42,0xf5,0x4e,0xfe,0x2d,0xd9,0xf2,0x45,0xe0,0xcd,0xa2,0x82, + 0x75,0xee,0x67,0x49,0xba,0x54,0x60,0x4a,0xe8,0xd4,0x27,0x0b,0x6a,0xe6,0x83,0x2f, + 0x69,0x3d,0x6b,0xb9,0x0a,0x7d,0xb4,0xfd,0x10,0xb9,0x19,0xaf,0x44,0x62,0xea,0xb6, + 0x0c,0xe6,0xb7,0x59,0x5e,0x84,0xc1,0xa2,0xad,0x2a,0x83,0xcd,0xc4,0xa6,0xd2,0xca, + 0x3f,0xe5,0xb5,0x1b,0x22,0x66,0xdd,0x33,0x0f,0xe5,0x34,0xcd,0x3c,0x6f,0xab,0x06, + 0x1a,0x61,0x15,0x32,0x3f,0x54,0x3a,0x58,0x53,0xcc,0x61,0xad,0x08,0x96,0x94,0x66, + 0x0f,0xc3,0xf1,0x53,0x6c,0xb4,0xff,0x0f,0xc7,0xba,0xad,0x08,0x20,0xe7,0xcc,0xa7, + 0xde,0x13,0x93,0xa4,0x2d,0xb3,0x76,0x5f,0x3d,0x75,0xd6,0x3a,0x83,0xe0,0x79,0x6d, + 0x65,0x76,0x8f,0xa4,0x3a,0xdb,0xf5,0xd2,0xaf,0xdf,0x77,0x82,0x64,0x34,0xcb,0xdb, + 0xb7,0x48,0xe0,0x61,0x87,0x4b,0x14,0xc2,0xe4,0xf2,0x0f,0x7c,0x8a,0x13,0x20,0xf5, + 0xb0,0x0c,0x0b,0x2a,0x9c,0x4b,0x36,0x1e,0x1a,0xf2,0xfe,0xa3,0x96,0x5c,0x0d,0x2e, + 0x85,0xf6,0x08,0x10,0x0f,0xbd,0x6c,0xa9,0x0c,0xfc,0x70,0x5b,0xea,0x5b,0x95,0x7f, + 0xe6,0x46,0x8c,0x61,0x11,0x37,0xf1,0x98,0xc9,0x05,0x94,0xc4,0xd6,0x05,0xd4,0x77, + 0x03,0x99,0x79,0xe1,0xc7,0xf6,0xa4,0xba,0x61,0x85,0x3c,0x12,0x96,0x96,0x6b,0x24, + 0x00,0x2f,0x63,0x7a,0xd3,0x7c,0xdc,0x0c,0xd5,0x2f,0xd6,0x5d,0x92,0xf3,0x95,0x2d, + 0xc0,0xbb,0x11,0xcd,0xab,0x14,0x8e,0x93,0x8e,0x52,0xa4,0x20,0x4d,0x39,0x1c,0x72, + 0xd8,0x07,0x06,0x57,0x3d,0x14,0xd9,0x23,0x41,0xd8,0xc7,0x82,0xd7,0xc0,0xa2,0xfb, + 0x8f,0x04,0xa0,0x3f,0x31,0x9b,0x9a,0xfc,0x87,0xf5,0xa5,0x93,0xef,0xae,0xa7,0x7a, + 0x3d,0x55,0xc8,0xa0,0x1c,0x84,0xb5,0xb0,0x49,0xad,0x17,0x7f,0xa3,0x49,0x98,0x6a, + 0xb9,0xb7,0xc8,0x31,0xb9,0xac,0xfb,0xa8,0xff,0xca,0x8b,0x96,0xe3,0x55,0xd1,0xd1, + 0x30,0x27,0xa2,0xf7,0x2f,0x53,0xe1,0x87,0x9e,0xa1,0xf0,0x04,0xa8,0x46,0x6d,0x59, + 0x73,0x49,0x31,0x29,0x4d,0x94,0xb2,0x32,0x81,0x2c,0x32,0xbc,0x15,0x2b,0x02,0x58, + 0xc7,0x0b,0x0a,0xce,0x56,0x24,0xb8,0xb5,0x5a,0x83,0x6a,0x9c,0x37,0xc4,0xba,0xa1, + 0x94,0x01,0x8a,0x78,0x98,0x73,0x9b,0x73,0xca,0x55,0x63,0x96,0x8d,0xba,0x12,0xd3, + 0xac,0x95,0xa6,0x32,0x90,0xd0,0xc7,0x01,0x84,0xba,0x52,0x75,0x69,0xf9,0xf4,0xc5, + 0x61,0x59,0xb8,0x72,0x56,0xbe,0xda,0x39,0xea,0xc8,0xee,0xc8,0x51,0x87,0x1b,0xcb, + 0x47,0x54,0x11,0x1f,0xef,0xec,0x1c,0xf9,0xe1,0xad,0x36,0x8a,0xbc,0x3c,0x77,0x5b, + 0x44,0x9e,0xba,0x2e,0x53,0xf8,0x78,0x79,0x8f,0xa9,0xb6,0xa8,0xa7,0x72,0x24,0x4b, + 0xd2,0xe3,0x23,0xa0,0x46,0xf5,0x18,0x85,0x22,0x37,0x99,0x71,0xeb,0xf8,0x68,0xd2, + 0x3b,0xfe,0xac,0x3a,0x32,0xf8,0x29,0xc7,0x85,0x3e,0x68,0x40,0x92,0xad,0xe3,0xbd, + 0x89,0x88,0xa2,0x30,0x1d,0x94,0xa3,0x3b,0x8a,0xde,0x0e,0xd1,0x4e,0x4b,0x82,0x28, + 0x4b,0x5a,0xc7,0x6f,0x09,0xd1,0x3c,0x2d,0x28,0xfb,0x3c,0x00,0xd4,0x58,0xdb,0x9b, + 0x12,0xf0,0x0f,0x58,0x8f,0xb2,0x6f,0x84,0xb2,0x9d,0x42,0x41,0xae,0xa1,0x84,0x17, + 0x51,0xa0,0x11,0x14,0xf1,0xe3,0xf7,0xa7,0x1f,0x35,0xa4,0x29,0x5a,0x26,0x86,0x49, + 0x82,0xf2,0x3e,0x89,0xf9,0x36,0x35,0x03,0xb9,0x7d,0x67,0x1f,0x75,0x52,0x39,0xef, + 0x6e,0xbb,0xad,0x5d,0x4d,0x92,0x79,0xac,0xcd,0x27,0x42,0x8e,0xe2,0x11,0xc8,0xf3, + 0xc6,0x42,0xa3,0x5c,0x27,0x6f,0x32,0xf2,0xf9,0xf2,0xbd,0x9c,0xe5,0x36,0xf4,0xb4, + 0x13,0x6a,0xbe,0x53,0x43,0xaa,0x8a,0x1b,0x78,0x3b,0x9d,0xc0,0x3e,0x31,0x13,0xb3, + 0x92,0xcc,0x46,0xc4,0x1e,0x11,0x88,0xf0,0x88,0x4b,0x22,0x5b,0x6b,0xb7,0x59,0x9c, + 0x24,0x78,0x92,0x8e,0x4a,0xa8,0x58,0xc6,0xb8,0xdd,0x94,0x6e,0x55,0x47,0xb5,0x8e, + 0xdf,0xc3,0x31,0x80,0x58,0xcc,0x9c,0x92,0xa0,0x1c,0xbf,0x41,0x86,0xf2,0x32,0xd2, + 0x08,0x6e,0xab,0x01,0xc3,0x19,0x5c,0x22,0x6e,0x8e,0xf9,0x31,0x69,0x95,0x33,0x8c, + 0xf1,0x93,0x6a,0x0f,0xb7,0x25,0x87,0xb5,0xb4,0x12,0x1c,0x8f,0xcf,0xa9,0xdf,0xa8, + 0xed,0x79,0xd3,0x74,0x20,0x05,0x7d,0xd4,0x91,0x63,0x98,0x7b,0x39,0xc1,0xce,0xe3, + 0x0c,0x5f,0xcf,0x13,0x8d,0x32,0xf6,0xbc,0xe6,0xb6,0x69,0x6b,0xf4,0xa8,0xb5,0x6e, + 0x4b,0x71,0xeb,0xb8,0xdb,0x2b,0xad,0x23,0x3d,0xfe,0x51,0x14,0x90,0xdc,0xd1,0xf0, + 0x98,0xb4,0x8f,0xb9,0x8f,0x1d,0xed,0xc8,0xd3,0x26,0x99,0x08,0xb0,0x90,0xa2,0x48, + 0x73,0xa7,0xd3,0x49,0xeb,0xce,0xa0,0x8d,0x94,0xf2,0xa6,0x23,0x3b,0x82,0xad,0xe3, + 0x47,0x1e,0x1c,0x75,0xbc,0x63,0x2d,0x17,0xa4,0x55,0x52,0x16,0x95,0x7b,0x79,0x01, + 0x33,0x89,0x28,0x80,0x83,0xdd,0xcc,0x23,0x60,0xe4,0x14,0x10,0xda,0xc3,0x98,0x30, + 0x67,0x4b,0xb0,0xb5,0x4f,0x99,0x36,0xa4,0xbe,0x93,0xb6,0x48,0x66,0x99,0x46,0x06, + 0x53,0xda,0x23,0x16,0x00,0x26,0xbd,0xcc,0x9f,0x85,0x71,0xd2,0x1e,0x45,0x21,0xf1, + 0xaa,0x89,0x3b,0x6a,0x78,0xb2,0xa1,0x55,0xca,0x78,0xc2,0xfa,0xfb,0xf5,0xfa,0xd9, + 0x09,0x42,0x30,0x23,0x68,0x11,0xda,0x3b,0x81,0xea,0xa7,0x61,0xfb,0x69,0x32,0x17, + 0x99,0xf0,0x07,0x34,0xe4,0x96,0x7a,0x84,0xa1,0xc8,0xad,0xd2,0x23,0xac,0x35,0xf3, + 0x97,0xee,0xd1,0xe4,0xa5,0x69,0x7f,0xaa,0xde,0x80,0xc6,0x68,0xb5,0xd2,0xfa,0x33, + 0xf1,0x9f,0x33,0xe4,0x6e,0x30,0xdd,0x6c,0x4a,0x8b,0xe6,0x3a,0x15,0x42,0x88,0x1b, + 0x1c,0x38,0x1a,0x6d,0xe5,0xd0,0xda,0xdf,0xf5,0x79,0xc9,0x7b,0x99,0x97,0x65,0x03, + 0xed,0xe3,0xd9,0xf5,0x97,0x4f,0x97,0xef,0x2c,0x1a,0x8a,0xf1,0xd4,0x78,0xa6,0x31, + 0xfb,0xcd,0x31,0xb8,0xf1,0xf9,0xe2,0xed,0xe9,0xf5,0x19,0xdd,0xb4,0xb7,0x30,0x45, + 0x71,0xba,0x32,0xd2,0xd2,0x24,0x5b,0x5a,0x96,0x44,0x0d,0x53,0x2d,0x3c,0x58,0x86, + 0x2f,0xee,0xdc,0x56,0xb7,0x05,0x4e,0x43,0xaf,0x5d,0x6d,0xfb,0xb4,0x8a,0x6c,0x26, + 0xb6,0xb9,0x14,0x52,0x33,0x85,0x2f,0x0c,0x2a,0xd4,0x24,0x5c,0x73,0xa7,0xe6,0x58, + 0xce,0x0e,0x5a,0xcc,0xcf,0x7c,0xb2,0x68,0x1d,0xbf,0x99,0x88,0xd1,0x0d,0x89,0x83, + 0x1d,0x9d,0x80,0x71,0x03,0xd3,0x6a,0xc7,0x50,0xd0,0xe2,0x8d,0x46,0x22,0x2d,0xdc, + 0xd6,0xf7,0x9d,0xef,0x5b,0xb2,0x17,0xd9,0xa2,0x69,0x5b,0x8e,0x76,0x1a,0x63,0x89, + 0x88,0x7a,0x53,0x2f,0xcd,0xb5,0x59,0x7c,0x13,0x93,0x49,0x21,0x01,0x13,0x31,0xb5, + 0x32,0x73,0xb2,0x3e,0xaf,0xc4,0x15,0x0e,0x07,0xed,0x24,0x8e,0x16,0x0a,0x43,0x34, + 0x63,0xe4,0x4d,0x45,0xe6,0x75,0xc6,0x60,0x50,0x64,0x0b,0x53,0xea,0x1b,0x5e,0x9e, + 0x23,0xbc,0x29,0xfd,0xe4,0xda,0xc7,0x4f,0x8a,0x81,0x92,0x90,0x9f,0x08,0x69,0xf8, + 0x39,0x5e,0xe7,0x56,0xba,0x47,0x93,0xa6,0x51,0x88,0x20,0x87,0xdf,0x0b,0xee,0x43, + 0xa8,0x97,0x34,0x58,0xc3,0x7c,0xe2,0xb1,0x7b,0x84,0x90,0xea,0x42,0x3a,0x40,0x5e, + 0x12,0x9b,0x49,0x73,0x0c,0x66,0x51,0x84,0x70,0x9a,0x24,0x39,0xf8,0x9a,0x87,0xc8, + 0x53,0xf8,0x2e,0x01,0xde,0xd4,0x8b,0xe1,0x3b,0x40,0xbc,0x6b,0xdc,0xf9,0xe5,0x0a, + 0x11,0x1e,0x71,0x9e,0x5c,0xae,0x24,0x51,0xad,0x97,0xd9,0xa7,0x60,0xae,0x21,0x18, + 0x16,0x88,0x0b,0x15,0x4a,0x86,0x71,0x3a,0x2b,0x58,0x05,0x44,0xb2,0x04,0x2b,0xf9, + 0xbb,0x29,0x5d,0x8d,0xa3,0x1b,0xdb,0x4a,0x95,0x76,0x35,0xc0,0xac,0x69,0x5b,0xc8, + 0xeb,0xe0,0x79,0xe5,0x55,0xc0,0xc1,0x49,0xaa,0x6d,0xdd,0x53,0xe9,0x29,0x92,0x1d, + 0x65,0x5a,0xb4,0xc7,0x09,0x80,0x43,0xaa,0x42,0xf8,0xf2,0x70,0xa4,0xcf,0x13,0x4e, + 0x42,0xdf,0x17,0xe4,0xbe,0xd5,0x3d,0xe4,0x2a,0x34,0x1c,0xae,0xd7,0x00,0xe2,0x24, + 0x15,0xf1,0xe3,0x18,0x7c,0xfc,0x09,0x8f,0x35,0xb5,0xa3,0x5b,0xa1,0xae,0x9a,0xf2, + 0xa8,0x43,0xe1,0x99,0xbe,0xa5,0xd3,0x94,0x1b,0xbb,0x3b,0xd5,0xfe,0xcd,0x5f,0x8c, + 0xb0,0xda,0x34,0xf2,0x91,0x5e,0x4f,0x91,0x79,0xd8,0x63,0x51,0x9c,0x45,0x82,0x7e, + 0xbe,0x5e,0xfc,0xec,0x63,0xc4,0x6a,0x87,0x76,0xc0,0xc8,0xcf,0xdc,0xbf,0x18,0x3a, + 0x7d,0xeb,0xa6,0x45,0x72,0xfd,0x39,0xa6,0x1b,0xf4,0x0b,0x37,0x28,0x74,0xd3,0x25, + 0x7d,0xe3,0x12,0xa2,0xa3,0x2b,0x7c,0xc9,0xc1,0x91,0x1a,0x4a,0xcf,0x20,0x2a,0xba, + 0xc2,0x17,0x2e,0xc6,0x09,0xfd,0xae,0xe2,0x8d,0x6e,0x0e,0x78,0xba,0xbc,0x70,0x79, + 0xbf,0x93,0xb5,0xdf,0xe9,0x28,0x10,0x06,0x04,0x2b,0x7c,0x56,0xfb,0xcd,0x6c,0x1f, + 0x72,0xc7,0x4d,0x0d,0x57,0x63,0xc3,0x29,0x85,0xe5,0x6c,0x16,0xc7,0xe4,0x86,0xf0, + 0x19,0x20,0x1e,0x02,0x9e,0xd6,0xd8,0xab,0xe6,0x77,0xd3,0x09,0xf0,0xdc,0xd5,0x75, + 0x4b,0xcd,0xa3,0xeb,0xda,0xbd,0xdc,0x40,0xc3,0xf7,0x2c,0x8d,0x12,0xcf,0xc7,0x0f, + 0xda,0x45,0xc4,0x57,0x94,0xe4,0xd2,0x43,0x7e,0x4b,0x86,0x35,0x7b,0x3c,0x63,0x98, + 0x4b,0x44,0x75,0xb4,0x25,0xcd,0xe3,0x68,0x84,0x78,0xcc,0x18,0xe0,0x2d,0x71,0x2a, + 0x53,0xd7,0xf3,0xf2,0xee,0xad,0x1c,0x03,0x44,0x2e,0xb7,0x24,0xc0,0x4d,0x02,0x41, + 0x31,0x61,0x5a,0x2b,0xff,0x1a,0xec,0xd4,0xfa,0x42,0xf6,0x77,0x01,0x11,0x1a,0x85, + 0x35,0x32,0x97,0xdc,0xd0,0x5d,0xdb,0xfd,0x1e,0xf0,0x2d,0xb6,0x95,0x8f,0xb4,0x9b, + 0x36,0xba,0xbf,0xd7,0xf5,0x55,0xe3,0x75,0x6f,0x41,0x7b,0xe7,0xe6,0xf2,0xe2,0xdc, + 0x56,0xbf,0x31,0x22,0x8c,0x83,0x44,0x27,0x9d,0x40,0xd1,0x3b,0x58,0xcb,0x97,0xc9, + 0x02,0xf2,0x92,0x7e,0x39,0x82,0xd7,0x8f,0x13,0xb8,0x1a,0x49,0x50,0x33,0x20,0x1c, + 0x97,0xa2,0x08,0x6e,0x9b,0x72,0x49,0x0a,0x65,0xb0,0xfa,0x7c,0x32,0x2b,0x2c,0x20, + 0x80,0x97,0x63,0x26,0x32,0xde,0xc2,0xae,0x67,0x06,0x28,0x1a,0xe6,0x12,0x4b,0x2c, + 0x77,0xd5,0x59,0xea,0xae,0xab,0xb3,0xa4,0xf5,0x13,0xfd,0x2d,0x40,0x8d,0x64,0x5d, + 0x62,0x26,0xcb,0xe8,0x8f,0xbf,0xff,0xaf,0xee,0x54,0x43,0xa5,0x32,0x30,0xf6,0x9c, + 0xe4,0x8c,0x81,0xf4,0x98,0xa5,0x56,0x8f,0x21,0x3d,0x61,0xc4,0x25,0x62,0xb5,0x97, + 0x15,0x6a,0x4c,0xfd,0x98,0xf4,0x87,0xc7,0x5f,0x30,0x8a,0x63,0x55,0x92,0xd5,0x00, + 0x5d,0x53,0xdb,0xcd,0x8b,0x13,0xfd,0x21,0x82,0x33,0x29,0xc4,0x36,0x3a,0x60,0x70, + 0xa2,0xbf,0xc6,0x67,0x89,0x8b,0xd2,0x22,0x49,0x08,0x5e,0x04,0x01,0xf8,0x8b,0xd2, + 0xee,0x6a,0x82,0x36,0xc2,0xa3,0xf0,0x4f,0xf4,0xf7,0xc9,0x88,0x92,0x33,0x7e,0x31, + 0x9b,0x92,0x2c,0x55,0xc6,0xc9,0x53,0xc8,0xe8,0xa9,0x19,0xde,0x10,0xa9,0xa3,0xa9, + 0x3b,0xba,0x3e,0xd8,0x69,0xe8,0x4f,0x6e,0x69,0x49,0x41,0x92,0x8f,0xcc,0x5d,0x96, + 0xab,0x95,0xbb,0x79,0x41,0x2d,0x09,0xda,0xdb,0xe5,0xb5,0x9a,0xa5,0xa1,0xec,0xe6, + 0x27,0xba,0xe4,0xbb,0x64,0xfb,0xf3,0xd5,0xbf,0xd3,0x95,0x62,0xe7,0xf2,0xec,0xf4, + 0x2d,0xae,0xf5,0xf7,0x9f,0xde,0xbc,0x3b,0x7b,0xab,0x5b,0x34,0xbe,0x1e,0x4c,0x9b, + 0x0c,0x8d,0xc1,0xc9,0x0d,0x46,0x0e,0xa1,0x02,0xee,0x71,0xc2,0x69,0x55,0x3e,0xa0, + 0x9b,0x36,0x43,0xaa,0xad,0x10,0xd5,0xa5,0x1d,0x71,0xf5,0x16,0xff,0x22,0x6a,0xf8, + 0xc1,0xac,0x9d,0xe8,0xdc,0xe0,0x07,0x25,0xc2,0x5d,0x9d,0x28,0x71,0xa5,0xcd,0x56, + 0xfb,0x3e,0x84,0xa4,0x8a,0x64,0x3c,0x8e,0x04,0x80,0x46,0x21,0x32,0xb8,0xda,0x9d, + 0x9b,0xd5,0x40,0x2c,0xed,0xb4,0x28,0xb2,0x10,0x58,0x27,0x88,0x85,0x46,0x2c,0xd7, + 0xad,0xf9,0x89,0x4e,0xe1,0x1c,0xd4,0x03,0x2f,0xca,0x85,0xe4,0x54,0x42,0x55,0x7d, + 0xd0,0x63,0x9c,0x34,0x0e,0x7d,0xec,0xce,0xd5,0x62,0x20,0x4a,0x2c,0xa4,0xe9,0x4f, + 0x73,0x38,0x07,0x2c,0x04,0x79,0x9a,0xcc,0xf1,0x64,0xe8,0x52,0x39,0x3a,0x6b,0x86, + 0xdc,0xe5,0x13,0x92,0x78,0x00,0x70,0x2c,0xdb,0x57,0x9a,0x47,0xa9,0x28,0xed,0xd4, + 0x3b,0xf8,0x26,0x77,0x06,0x92,0x41,0x13,0xe4,0x42,0xf2,0x74,0x4b,0x5d,0x3e,0xf4, + 0xec,0xbe,0xf6,0xe1,0xb5,0x76,0xf1,0xe9,0xea,0x9a,0x08,0x11,0xd2,0xc3,0x34,0xe6, + 0x5e,0xae,0x89,0x38,0x99,0x8d,0x27,0x34,0x67,0xe0,0x85,0x11,0xb9,0x12,0x07,0x46, + 0x26,0x77,0x83,0xec,0x8e,0x13,0x35,0x4e,0xbd,0x28,0x29,0x35,0x08,0x2b,0x4c,0x2a, + 0x4f,0xbd,0x98,0x08,0x29,0xd4,0x22,0xdf,0x65,0xdc,0x22,0x33,0x0f,0x8b,0x81,0x06, + 0xaf,0xe7,0x3c,0x8c,0xb3,0x2d,0x49,0x46,0xa2,0x2a,0x56,0x80,0x24,0x4e,0x34,0x1d, + 0xb6,0x3c,0x57,0xd1,0xf0,0x59,0x46,0x24,0x79,0xb4,0x40,0x5f,0x07,0x61,0xdd,0x5a, + 0x8e,0x3c,0xd4,0x2f,0xa4,0xd3,0x76,0x5e,0x24,0x99,0xd0,0x57,0x4f,0x3d,0x7a,0xa0, + 0xff,0x74,0x7d,0x7d,0xa1,0xe9,0xcf,0x1f,0x1c,0x41,0xa8,0xcf,0x1b,0xac,0xf9,0x00, + 0x3b,0xf6,0x05,0x9d,0xc4,0x60,0xde,0x40,0x93,0xa4,0x62,0xd2,0x47,0x79,0x7c,0x62, + 0x47,0xe1,0x28,0xd6,0xcb,0x47,0x36,0x24,0x61,0xab,0xdf,0xed,0x76,0xd7,0x0e,0x6e, + 0xc8,0x83,0x0b,0x58,0x54,0x3e,0x28,0x3d,0x6b,0x25,0x67,0xab,0xa7,0x1b,0x11,0x0c, + 0xd0,0xd1,0x85,0x5a,0x0e,0xbb,0x9d,0xbf,0x52,0x66,0xf6,0x97,0x4e,0x68,0x53,0x4d, + 0x60,0x04,0x36,0x1d,0x5d,0x30,0x4f,0xf4,0x6b,0x4a,0x81,0x00,0x02,0x94,0xbc,0x79, + 0x32,0x69,0x24,0x4b,0xb1,0x15,0x0a,0x04,0x36,0xa5,0x2d,0xc7,0x2f,0xbe,0xef,0x75, + 0xfb,0xfb,0xfc,0x81,0x57,0x92,0x44,0x43,0x9e,0x59,0x21,0xd1,0x0b,0x32,0x08,0x2f, + 0x4d,0x01,0x07,0x80,0x2f,0xe2,0x80,0x34,0x0f,0x9a,0x51,0x92,0xdc,0x50,0x4f,0xe7, + 0x86,0xec,0x0f,0x09,0xdd,0x18,0x96,0x42,0xf9,0x54,0x9b,0x83,0x8e,0x8c,0x76,0x83, + 0x52,0xf3,0x44,0x89,0x88,0x30,0x0b,0x65,0x9a,0xb4,0xc6,0xc5,0x11,0x84,0xa1,0x58, + 0xb8,0x9a,0xe5,0x00,0xf1,0x30,0x99,0xe5,0xc8,0xdb,0x38,0x8f,0x65,0x6e,0x9a,0x27, + 0x29,0xca,0xa2,0xd6,0xd6,0xbe,0x64,0x09,0xe7,0xf8,0x11,0xfc,0x58,0xa1,0x13,0x59, + 0xdc,0xf5,0x46,0x70,0x93,0xb1,0xe1,0xec,0xfd,0xb9,0x76,0xf5,0xd3,0x69,0xbb,0x7f, + 0x70,0xa8,0x89,0x3c,0x2d,0x92,0x24,0xd2,0x90,0xa2,0xe5,0xe4,0x23,0xdd,0xbb,0x61, + 0xd7,0x52,0x70,0x17,0x50,0x9d,0x34,0x5c,0x50,0xb6,0x07,0x5a,0x06,0x6a,0xe5,0xce, + 0x08,0x36,0xf4,0x1f,0xb2,0x00,0x9f,0x98,0xb6,0x76,0x0a,0xa6,0x7e,0x17,0x59,0x92, + 0x23,0xfc,0xcc,0xb0,0x1e,0x54,0x9a,0xc2,0x57,0x65,0x83,0xcc,0x88,0xc9,0x9b,0x39, + 0x45,0x6f,0xd8,0x30,0x71,0xf4,0x9a,0x68,0xac,0xeb,0x6f,0xfb,0x41,0x1f,0x1e,0x21, + 0x61,0x35,0x73,0x69,0xc8,0x39,0xde,0xbe,0xe4,0xbe,0x83,0xa1,0xf6,0x74,0x60,0xbb, + 0x1c,0xa3,0xdc,0x8d,0xa3,0x70,0x43,0x1e,0xff,0x19,0x48,0xf8,0xea,0x34,0xcb,0x10, + 0x57,0x33,0x1b,0x05,0xd1,0x2c,0x2a,0x4c,0x6b,0x42,0x99,0x45,0x38,0x80,0x40,0x8d, + 0xd0,0xed,0x0e,0xc2,0xa3,0xa1,0x1d,0x89,0x78,0x5c,0x4c,0x06,0xe1,0xf3,0xe7,0xe6, + 0xe4,0xb9,0x6b,0x0c,0xbf,0x86,0xdf,0x8e,0x7a,0x87,0x27,0x7a,0x97,0x04,0x6a,0x3e, + 0xa7,0x6b,0x40,0xe0,0x55,0x41,0x19,0xb4,0xd1,0x3b,0x34,0x07,0x0b,0x63,0xa2,0x5e, + 0x42,0x08,0x7b,0xb5,0xb7,0xd7,0xf9,0xfa,0xb7,0xee,0xb7,0x8e,0xb4,0xbd,0x89,0x79, + 0x32,0x71,0xe4,0x61,0xb1,0x9a,0x47,0x41,0x8e,0xd5,0x64,0x72,0x61,0xac,0x0f,0xa1, + 0x18,0x75,0x9a,0x33,0xaf,0xaf,0x67,0x41,0x80,0x15,0xc2,0x2a,0x80,0x72,0xc2,0xe8, + 0xbd,0x3c,0xb4,0x7a,0xaf,0xba,0x26,0xaf,0x78,0xd3,0x17,0xa8,0x1a,0x7e,0x8a,0x28, + 0xe9,0xcc,0x54,0x25,0xcc,0x3b,0x16,0xce,0xbf,0x7d,0x78,0xff,0x13,0x0a,0xf1,0x4b, + 0x89,0x58,0x08,0x59,0x81,0x2f,0x85,0x9c,0x64,0xd3,0xb7,0x5e,0xe1,0x95,0x22,0xae, + 0xe6,0x8a,0x13,0xa3,0x30,0x97,0xe5,0x41,0xa8,0xc2,0x34,0x65,0x7e,0x74,0x67,0x13, + 0x4a,0x1a,0x3a,0x61,0xa6,0x6e,0x95,0x30,0x74,0x42,0x26,0xed,0xea,0xcf,0xa5,0x6d, + 0x2b,0x52,0x77,0xe5,0x79,0x29,0xf7,0x45,0x97,0xfe,0xca,0xbb,0xd2,0x47,0x20,0xa6, + 0x34,0x4b,0xc6,0xd0,0x53,0xee,0x36,0x4f,0xd9,0x01,0x13,0x84,0x92,0xf6,0x9b,0x64, + 0x0a,0x6b,0x25,0xc3,0x32,0x29,0x6f,0x55,0x31,0x4e,0x9e,0x46,0xe2,0x53,0x66,0xdc, + 0x76,0xa4,0xe1,0xa0,0x27,0x7c,0xb8,0x53,0xb7,0x23,0xa0,0xba,0xc2,0x8b,0xcc,0xe7, + 0xfa,0x77,0xfa,0xaa,0x9c,0xf1,0xa1,0xd5,0xa8,0xaa,0x06,0x93,0xdd,0x29,0xd8,0x83, + 0x6a,0xe1,0x92,0xa6,0x92,0xeb,0xc2,0xa8,0xb6,0x11,0xf9,0x94,0x61,0x99,0xfc,0x70, + 0x38,0x80,0xe7,0x1b,0xfa,0xf3,0xf2,0xc5,0xe7,0xba,0xa9,0x97,0x63,0x8b,0x6c,0xb1, + 0x2c,0xdc,0x5f,0xae,0x3e,0x7d,0xb4,0x53,0x6a,0x37,0x82,0x3a,0x16,0x98,0xa2,0x3a, + 0x10,0xd7,0x88,0x6b,0xa6,0xcd,0x96,0x71,0x7f,0x5f,0xac,0x46,0x74,0xa0,0x8e,0xd6, + 0xbb,0x52,0xaf,0x42,0xde,0xfa,0x39,0x13,0x77,0x00,0xc6,0x85,0x9a,0xbe,0xb1,0x84, + 0x07,0x46,0x45,0x6f,0xbc,0xa9,0xe3,0x1e,0xa5,0x56,0x9a,0x3f,0xe3,0xc6,0x87,0x12, + 0x31,0xc3,0x82,0xea,0x41,0xc8,0x20,0x88,0xb4,0x48,0x86,0x2e,0x0a,0x43,0x55,0xab, + 0x6c,0x16,0x47,0x50,0x03,0xe5,0x42,0xb4,0xc3,0xa3,0x7a,0x11,0x58,0x65,0x1b,0x02, + 0xa2,0xb8,0xe9,0x27,0xb3,0x21,0x52,0x4b,0xac,0x4e,0xf3,0xc6,0xa8,0x68,0x6c,0xdd, + 0x6c,0x30,0x56,0x6a,0x79,0x83,0xb5,0xcf,0x0a,0x0a,0xf1,0x14,0xe5,0xee,0x8c,0x22, + 0x68,0xf9,0x3e,0x22,0x3a,0x97,0xa0,0xdc,0xb6,0x91,0x35,0x2c,0xa6,0xe7,0x4e,0xad, + 0xa5,0x01,0xfa,0x24,0xa4,0x72,0xf3,0xee,0xf3,0xd5,0xeb,0x7a,0xb6,0xc0,0xb7,0x81, + 0xaa,0xe4,0x04,0x7a,0xc9,0xbb,0x6e,0x05,0x96,0xc2,0xff,0x92,0x23,0xe9,0x25,0xfe, + 0x56,0x0f,0x92,0x82,0x51,0x3e,0x04,0xac,0xe3,0xf4,0x0d,0x7c,0xa8,0xfa,0x80,0xcf, + 0xc8,0x72,0xdc,0x1e,0xa1,0x1e,0x42,0xf9,0x32,0x9f,0x50,0x12,0xbe,0x9e,0x67,0x93, + 0x03,0xa8,0xfc,0x0f,0xb9,0x98,0x5b,0x06,0xa8,0xfb,0x7b,0x26,0xa6,0xd2,0x40,0x3c, + 0x41,0x64,0x03,0x14,0xe1,0x87,0xa5,0x43,0x77,0x7a,0x19,0x57,0x49,0xe1,0x54,0xbd, + 0xc8,0x2a,0x85,0x21,0xf6,0xfe,0x1e,0x91,0xf2,0xd6,0x42,0x95,0xc2,0x95,0xc7,0x2d, + 0x92,0xdc,0xbd,0x3d,0x24,0x62,0x65,0x65,0xc2,0x01,0x55,0x96,0x49,0x2a,0x07,0xaf, + 0xe2,0xe5,0xa0,0x4c,0x34,0xf5,0xf3,0xf7,0xa7,0x57,0x3f,0xfd,0xfc,0xf1,0x47,0x78, + 0x25,0xa7,0x8d,0xcc,0x89,0xaa,0xc5,0x24,0x1a,0xd2,0xf2,0x16,0xaa,0xc3,0xaa,0x9a, + 0x65,0x0e,0x15,0x1a,0x6a,0x1a,0x6a,0x1e,0x80,0x36,0xde,0x02,0x37,0x7c,0x40,0xd8, + 0xa5,0x54,0xae,0x8c,0xe6,0x8d,0xe0,0x4e,0x45,0x28,0xe5,0x8e,0xa6,0x2d,0x6b,0xe8, + 0x6a,0x1c,0x8a,0xcd,0x8d,0x4c,0x54,0x25,0x9b,0x83,0x07,0x0e,0xac,0x77,0xbf,0x63, + 0xb7,0x21,0x19,0x29,0x5b,0x21,0xcb,0x25,0x0c,0x21,0x6d,0x3e,0xd7,0xc9,0xc7,0x0c, + 0x09,0x28,0x9d,0x5e,0x77,0xff,0xd5,0xc1,0xcb,0x43,0xa4,0x34,0xc9,0x79,0x78,0x27, + 0x7c,0xa3,0x0f,0x07,0x47,0xa4,0x36,0xab,0x5e,0x1b,0xd6,0x03,0xa4,0x60,0xdd,0x70, + 0x83,0xe2,0x61,0xf7,0xcd,0x96,0x12,0x21,0xb5,0xa5,0xae,0xc2,0x4c,0x1b,0xc1,0xd6, + 0xf8,0xda,0x0c,0x53,0x5c,0xf6,0xed,0xed,0xd1,0xa7,0x2d,0x7d,0xb4,0x61,0xd6,0x2b, + 0xf3,0xdb,0x96,0xac,0x0a,0xca,0x04,0x5f,0x6e,0xf6,0xb5,0xfb,0xad,0x4c,0x9d,0x14, + 0x50,0xaf,0x78,0x46,0x95,0xf5,0x19,0xa9,0xb5,0x1c,0xcf,0xbc,0x8c,0x76,0x7b,0x67, + 0xa2,0x4c,0xcf,0x32,0x59,0x28,0xad,0x1d,0x34,0x5e,0x2b,0x8b,0x07,0x95,0x32,0x38, + 0xa1,0x1e,0x6c,0x11,0x71,0x95,0xc7,0x4b,0x69,0x0a,0x7b,0x0a,0x77,0x82,0x72,0x4b, + 0xbb,0x6b,0x64,0x6c,0xb5,0xdd,0xd4,0xce,0xa1,0xd2,0x07,0x59,0xff,0x94,0x7d,0x48, + 0x4a,0x8d,0x91,0x27,0xd0,0x8e,0x08,0xe4,0x99,0xcf,0xf9,0x20,0x9f,0x04,0x14,0x6e, + 0x48,0xc9,0xea,0x5e,0x7a,0xb3,0x91,0x64,0x65,0xe2,0xab,0x9a,0x63,0x55,0xe9,0x6d, + 0x6a,0x58,0x06,0xd9,0x58,0xd5,0xcf,0x27,0xa7,0x2f,0x93,0x62,0x47,0xfe,0x02,0x38, + 0x28,0x2b,0xa5,0xb9,0xed,0x66,0xb9,0xc5,0xac,0xd7,0xf5,0x96,0x17,0x2f,0xdc,0x5d, + 0x92,0x37,0xf9,0xce,0xfd,0xbd,0x92,0xbc,0xeb,0x96,0xb7,0x1a,0x8e,0xc2,0x85,0xe8, + 0x16,0x37,0xb9,0x3c,0xbb,0xba,0x3e,0xbd,0xbc,0xde,0x74,0x94,0x87,0xf6,0x49,0xfb, + 0x7e,0xb5,0x85,0x72,0xc9,0x2b,0x14,0xa4,0x4a,0x51,0x85,0x79,0xc9,0x20,0x19,0xee, + 0xe6,0xbe,0x05,0x15,0x7d,0x4c,0xf9,0xb1,0x6c,0xa7,0x71,0x04,0x79,0x61,0x61,0x61, + 0x27,0xfb,0x88,0x91,0x4e,0xd7,0x7c,0x90,0xb8,0x2b,0x83,0x50,0xa6,0x05,0x73,0x58, + 0x3b,0x51,0x6d,0x2c,0x65,0xc2,0x47,0x14,0x08,0x3d,0x9c,0x52,0x16,0x96,0xc2,0x65, + 0xa7,0x47,0x79,0x77,0x77,0xa5,0x54,0x2e,0x89,0x93,0xfb,0x5a,0x9b,0x33,0x28,0xc9, + 0x71,0x8d,0xbe,0x45,0x72,0x1f,0x3f,0x69,0xa7,0x1f,0xaf,0xbe,0x9c,0x5d,0x42,0x70, + 0x55,0x11,0xaa,0xc4,0xf3,0x31,0x51,0x56,0x22,0x13,0xe9,0x79,0xa2,0x4d,0xc3,0x18, + 0xf5,0x61,0x6e,0x97,0x79,0x6c,0x2e,0x3b,0xf5,0xdc,0x97,0xc8,0xb5,0x7c,0x94,0x09, + 0x11,0x9f,0x90,0x34,0xe9,0x06,0x5b,0x89,0xc7,0xa2,0xf2,0x7c,0x9f,0x72,0x02,0x07, + 0x3e,0x24,0x1a,0x75,0xb9,0xc1,0x85,0xd3,0xbb,0xbe,0xf6,0xc7,0x7f,0xfd,0x77,0xd9, + 0xb6,0x36,0x29,0x56,0x50,0x50,0xa2,0x2d,0x86,0x8d,0x1d,0x06,0xa0,0x8e,0x17,0x75, + 0x6c,0xed,0xad,0x97,0xdd,0xd0,0xb0,0x5a,0x53,0x8e,0x0a,0x2f,0x64,0x78,0x2a,0xc2, + 0x50,0x3e,0xfc,0x60,0x17,0x82,0x47,0xd9,0x7a,0xe9,0x44,0x95,0xbf,0x54,0xd6,0x49, + 0x32,0xa4,0xfa,0xa5,0x06,0xc4,0x0f,0xd4,0x4f,0x5b,0xab,0x60,0x0d,0x69,0xa2,0x7b, + 0x7b,0x0f,0x4c,0x95,0x7a,0x24,0x72,0x07,0xc0,0xd7,0x6e,0x91,0x79,0xca,0xdd,0x38, + 0x76,0x8f,0x5b,0x64,0xa1,0x79,0x09,0xfe,0x2c,0xe3,0xe7,0x4c,0xe7,0x56,0x92,0xb9, + 0xdd,0x75,0xdd,0xea,0xf1,0x09,0x70,0x92,0x0a,0xd6,0x5b,0xfd,0x39,0x3f,0xa3,0x6c, + 0x84,0xd2,0x58,0xf5,0x1a,0xc6,0x51,0x81,0x1e,0x53,0x3c,0x29,0x7f,0xe2,0x75,0x9d, + 0xd2,0x7b,0x1d,0xef,0x52,0x1b,0x44,0x7f,0x5e,0x3d,0x02,0xa8,0xea,0x8d,0x97,0xfe, + 0x55,0xce,0x41,0x4d,0x2c,0x93,0x73,0x63,0xdd,0xd6,0x15,0xfe,0x13,0xd0,0x62,0xad, + 0x49,0xcc,0xc5,0x79,0x33,0xf6,0x93,0xe4,0xb9,0x6e,0xca,0x04,0xe0,0x09,0x06,0xaa, + 0x77,0x4e,0x6e,0x5d,0x9a,0x44,0x22,0xc2,0x6a,0x6b,0x04,0x91,0xe0,0xb6,0x3d,0x84, + 0x48,0x7c,0x63,0x3b,0x93,0x8a,0xa8,0xb0,0x71,0x3b,0xb2,0xd5,0x98,0x56,0x76,0x1f, + 0x79,0xe6,0x01,0x07,0x06,0x8f,0x77,0x92,0x4a,0x6b,0x35,0xea,0x9d,0x66,0x55,0x90, + 0x23,0x29,0x45,0xd1,0x36,0x36,0xed,0x1d,0xea,0xd1,0xc9,0x22,0xbc,0x59,0xb3,0xee, + 0x94,0xdd,0x4e,0xb5,0x1e,0x15,0xef,0x99,0xa5,0xdd,0xb2,0xc3,0xa5,0xd2,0xc8,0xb2, + 0x25,0x54,0x23,0x96,0x7a,0x69,0xb7,0xb6,0x83,0x2d,0x28,0x66,0x2a,0xcb,0xa2,0xd7, + 0x05,0xc4,0xb2,0xfc,0x87,0x63,0x01,0xcb,0x6a,0x0d,0xa9,0xc8,0xf9,0x2c,0x70,0x5e, + 0xa8,0x44,0x50,0xf9,0x61,0x05,0xd4,0x6c,0x09,0x24,0x0c,0xd5,0x4a,0xf3,0x43,0x9f, + 0xcb,0xe8,0xc2,0xbb,0x11,0x8d,0xcc,0xad,0xf6,0x87,0x6d,0xa2,0x5f,0xed,0x90,0x8b, + 0xec,0x70,0x97,0x08,0x7e,0x7c,0x76,0x0b,0x17,0xa0,0x8e,0x92,0x40,0xf2,0x6a,0xe8, + 0x6c,0x29,0x7a,0x13,0x75,0xf8,0x1f,0x9c,0x28,0x69,0x32,0x55,0x87,0x88,0x87,0xc8, + 0x8e,0xc3,0x23,0x44,0x6e,0xc4,0xc2,0x47,0x84,0xd1,0xad,0x07,0x35,0x03,0x9e,0x50, + 0x87,0xf1,0x8c,0xcf,0xe9,0xdf,0xdf,0x57,0x37,0x34,0xdd,0x5c,0x0a,0x3b,0xcd,0x04, + 0x11,0x7a,0x2b,0xcf,0x97,0x80,0xe7,0x47,0xe7,0xa6,0xc9,0x61,0x3e,0xfc,0xbf,0x36, + 0x54,0xe3,0xe6,0x49,0xbd,0x0d,0xc3,0x2d,0x59,0x19,0xf4,0xa4,0x18,0x03,0xda,0x79, + 0xdb,0x51,0x14,0xb6,0x2c,0x99,0xb3,0xc8,0xb5,0x35,0x53,0x18,0x0b,0x5c,0xf5,0x06, + 0x7d,0xe5,0x94,0x37,0xa8,0xeb,0x5b,0x2f,0x9a,0xb1,0xa2,0xc1,0x5d,0x60,0x56,0xc9, + 0x2a,0xb1,0xf4,0x55,0xf7,0x33,0x6f,0x4c,0x88,0x05,0x15,0xd0,0x4f,0x3e,0x14,0xa5, + 0x7f,0x7b,0xf8,0x6f,0x1e,0xe2,0xd6,0x5c,0x6e,0x97,0x9e,0xb8,0x5d,0x13,0xdb,0x9f, + 0x4a,0x65,0xa3,0x27,0x08,0x5a,0x86,0xce,0x07,0x88,0x74,0xfa,0x07,0x92,0x8a,0x21, + 0x48,0x89,0xfe,0x9f,0x4c,0x6e,0x4a,0xfc,0x3f,0x33,0xb3,0xc1,0x42,0x26,0xa6,0x98, + 0x7f,0x83,0x8b,0x47,0xcc,0x84,0xd9,0x59,0xa3,0x2f,0xe5,0x0e,0x4f,0x41,0xb1,0x7b, + 0xcd,0x07,0xa7,0x44,0x56,0xcb,0x9f,0xe4,0xbd,0xb7,0xa7,0x96,0xbe,0x26,0x77,0xb2, + 0x05,0x79,0x7a,0x40,0xed,0x90,0xc8,0x5d,0x8c,0x8d,0xd3,0x07,0x46,0xeb,0x4a,0xd0, + 0xae,0x1e,0x05,0x94,0x2f,0x61,0xfb,0x3c,0x6c,0x71,0x7b,0x5e,0x65,0xd9,0x72,0x3b, + 0x43,0x76,0x57,0xe8,0x45,0xd9,0x16,0x92,0x07,0x21,0x08,0x93,0x02,0x21,0x7c,0x2e, + 0xbf,0x50,0x00,0x35,0xac,0x4d,0x95,0x9c,0x88,0x4c,0x13,0x76,0xcf,0x72,0x4f,0x40, + 0x96,0x22,0xd6,0x0e,0xd7,0x2f,0xe1,0x68,0x22,0x77,0x12,0xcb,0x5d,0x4a,0xf9,0x3f, + 0x29,0x39,0x55,0x31,0xe4,0xc0,0xf9,0x84,0xfa,0x47,0x94,0xa1,0x65,0xc3,0xb0,0xc8, + 0x3c,0x78,0x32,0xaf,0xda,0x56,0x3d,0x23,0x59,0x46,0x11,0x2d,0x54,0xd3,0x70,0x7c, + 0xd4,0x65,0xb7,0x02,0x6c,0xcf,0x86,0xf0,0x07,0xed,0xcd,0xa7,0xcb,0x2b,0x7e,0x5b, + 0xdc,0x79,0xa3,0x22,0x5a,0xa8,0x7d,0x16,0x5a,0x8e,0x2d,0x77,0x89,0xb2,0xd1,0xe7, + 0x2c,0x52,0xfb,0x24,0x54,0xfe,0xaa,0x4c,0x2d,0x97,0x2d,0x99,0xcb,0xf7,0x57,0x70, + 0xa3,0xd1,0xe4,0xc2,0xcb,0xbc,0x69,0x6e,0x54,0xb1,0x21,0xe7,0xbb,0x26,0x6d,0x75, + 0x19,0x3a,0x68,0xe8,0x65,0xdd,0x94,0xef,0xed,0x75,0xfe,0xc6,0x47,0x06,0x4e,0x9c, + 0xbf,0x76,0xfe,0xda,0x29,0x7b,0x7c,0xb9,0xa9,0x92,0x14,0x35,0x61,0x2e,0x93,0x8f, + 0x7a,0xe3,0x8a,0x0e,0x53,0x6c,0x04,0xdf,0xbc,0x0a,0x41,0x1b,0x24,0x2d,0xbd,0x4c, + 0x5e,0xea,0xf7,0x1f,0xf4,0xd0,0xcb,0xca,0x85,0x02,0xff,0x4e,0xb3,0x5e,0x1f,0x27, + 0x4f,0x02,0x37,0x85,0xfd,0x92,0x5f,0x55,0x1c,0x36,0xe2,0x82,0xc2,0x74,0xb9,0xfd, + 0xb2,0xad,0x9c,0x3b,0xbb,0x7e,0xf3,0xa0,0x9c,0x63,0x5c,0xdf,0xba,0x53,0x23,0xad, + 0x12,0x51,0x96,0xa7,0xb3,0xb1,0x84,0x10,0x92,0xed,0xe8,0xe6,0xd7,0xfe,0x37,0x44, + 0x75,0xdb,0x56,0xe5,0x8f,0x6c,0x1f,0xcb,0x51,0x5b,0x6a,0x99,0x1d,0xd5,0x15,0x69, + 0xb6,0x89,0x49,0x91,0x8f,0xb5,0x8a,0x9b,0x99,0x69,0x66,0x43,0x62,0x43,0x63,0x2d, + 0xcf,0xac,0xff,0x0d,0x74,0xb3,0xac,0xd9,0x91,0xfb,0xd2,0xec,0x69,0x65,0xb7,0xcf, + 0xf8,0x3a,0xfc,0x66,0x55,0xa5,0x3d,0x79,0x89,0x6e,0x2d,0x69,0xbb,0xd5,0xd1,0x51, + 0xf7,0x43,0xc2,0x6c,0x3c,0x9d,0x64,0x54,0x88,0xa2,0x9d,0x17,0x74,0xd0,0x4c,0x5f, + 0xa9,0x56,0xd9,0x9f,0x54,0x50,0xcd,0x9a,0x47,0xc9,0xf0,0x4d,0x32,0x8b,0x64,0x80, + 0xf3,0x95,0x34,0x1b,0xa2,0x44,0xe1,0x59,0xd5,0x50,0xc8,0xa7,0x90,0x44,0x36,0xc7, + 0xb0,0xf3,0x96,0x35,0xb4,0x2a,0x31,0xc9,0x89,0xfd,0xe6,0x19,0x90,0xba,0xe9,0xbb, + 0x99,0x3f,0x12,0xa4,0x6c,0x4f,0x5b,0x1a,0xff,0x8f,0xd7,0xe1,0x13,0x5f,0x47,0x1d, + 0xf9,0xff,0xc6,0xff,0x07,0x24,0xab,0xc0,0x57,0x80,0x3c,0x00,0x00, }; constexpr size_t WEB_UPDATE_HTML_GZ_LEN = sizeof(WEB_UPDATE_HTML_GZ); // diff --git a/firmware/patternflow/src/wifi_index.h b/firmware/patternflow/src/wifi_index.h index 93e7bc2d..06b7c504 100644 --- a/firmware/patternflow/src/wifi_index.h +++ b/firmware/patternflow/src/wifi_index.h @@ -12,7 +12,7 @@ static const char WIFI_INDEX_HTML[] PROGMEM = R"HTML( - + Patternflow - Wi-Fi

Wi-Fi

-
- -
+ -
+ -
+

Add a network

+
- + + +
- +
+ + +
- - + +
-
-

Saved networks are tried in order starting from the boot slot above, +

+ +

Saved networks are tried in order starting from the boot slot, wrapping around — so the device joins whichever one it can find, useful if it moves between home, a studio and a venue. A new network is only stored; leave switch now unticked and this page keeps working. Ticking it drops the - current connection immediately.

+ current connection immediately. On the panel's hotspot a network is tried at once, + and the panel shows the outcome on its screen as well as here: the address to open, + or why it could not join.

Hotspot

-

-
- - -
-
- - -
-
- -
-
+
+
+ + +
+
+ + +
+
+ +
+
+

The panel as a network of its own: patternflow-????. Join it from a phone or a laptop and open http://192.168.4.1/ — the same console, anywhere. auto raises it about fifteen seconds after the panel @@ -153,404 +205,845 @@ button.secondary:hover{border-color:var(--led);color:var(--led)}

)HTML"; +function settle(p,ms){return new Promise(function(y){p.then(y,function(){y()});setTimeout(y,ms)})} + +)HTML"; // GENERATED by firmware/toolchain/console_pages.py build — do not edit. -// gzip -9 of WIFI_INDEX_HTML (12439 bytes → 4193 bytes), served with Content-Encoding: gzip. +// gzip -9 of WIFI_INDEX_HTML (24284 bytes → 9034 bytes), served with Content-Encoding: gzip. static const uint8_t WIFI_INDEX_HTML_GZ[] PROGMEM = { - 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x02,0xff,0xcd,0x5b,0xdb,0x72,0xdb,0x48, - 0x92,0x7d,0xe7,0x57,0x94,0xe9,0x59,0x83,0x68,0x91,0x20,0x29,0x5b,0xb2,0x0c,0x90, - 0x54,0xb4,0x6f,0xd1,0x9e,0x98,0xee,0xed,0x68,0x7b,0x63,0x5e,0x26,0x62,0x02,0x22, - 0x8a,0x44,0xb5,0x40,0x00,0x0b,0x14,0x44,0x73,0xd8,0x8a,0x98,0x8f,0xd8,0x6f,0xd8, - 0x0f,0x9b,0x2f,0xd9,0x93,0x55,0x85,0x1b,0x41,0x4a,0x1a,0xcf,0xcc,0xee,0xfa,0x81, - 0x04,0xaa,0xb2,0xb2,0xb2,0xf2,0x72,0x32,0x2b,0x29,0xcf,0x9e,0x05,0xc9,0x52,0xee, - 0x52,0xce,0x42,0xb9,0x89,0x16,0xbd,0x19,0x7d,0xb1,0xc8,0x8f,0xd7,0xf3,0x3e,0x8f, - 0xfb,0x34,0xc0,0xfd,0x60,0x31,0xdb,0x70,0xe9,0xb3,0x65,0xe8,0x67,0x39,0x97,0xf3, - 0x7e,0x21,0x57,0xa3,0x2b,0x9a,0xcc,0x97,0x99,0x48,0x25,0xcb,0xb3,0xe5,0xbc,0x3f, - 0x4e,0x57,0xa3,0x65,0x12,0xe7,0x49,0xc4,0x9d,0x5f,0xf3,0xfe,0x62,0x36,0xd6,0xb3, - 0x20,0x53,0xab,0x63,0x7f,0xc3,0xe7,0xfd,0x3b,0xc1,0xb7,0x69,0x92,0xc9,0x3e,0x03, - 0xad,0xe4,0x31,0xb8,0x6d,0x45,0x20,0xc3,0x79,0xc0,0xef,0xc4,0x92,0x8f,0xd4,0xcb, - 0x50,0xc4,0x42,0x0a,0x3f,0x1a,0xe5,0x4b,0x3f,0xe2,0xf3,0x29,0x6d,0x25,0x85,0x8c, - 0xf8,0xe2,0x67,0x5f,0x4a,0x9e,0xc5,0xab,0x28,0xd9,0xb2,0x11,0xfb,0xa3,0x18,0x7d, - 0x14,0xb3,0xb1,0x9e,0x82,0x34,0x72,0x47,0xdf,0xe3,0xef,0xd8,0x7b,0x3f,0xbb,0x65, - 0x22,0xce,0x65,0x56,0x6c,0xb0,0x07,0x93,0xc9,0x2d,0x8f,0x73,0xf6,0xb7,0xbf,0xfe, - 0x17,0xcb,0x39,0x67,0xa9,0xe6,0x92,0xff,0x59,0xc4,0x01,0xff,0xea,0x84,0x6c,0x95, - 0x64,0x4c,0x86,0x9c,0xc5,0x89,0xe4,0x0e,0xfb,0x6e,0xdc,0x73,0xb3,0x24,0x91,0xfb, - 0xd1,0x68,0x99,0x71,0x7f,0xe3,0x3e,0x9f,0xbc,0x9b,0xbc,0x9d,0xbc,0xf1,0x46,0x23, - 0x11,0xdf,0xba,0xcf,0x3f,0xbc,0xff,0xf0,0xfa,0xfd,0x5b,0xbc,0x6d,0x0a,0xc9,0x03, - 0xf7,0xf9,0xd5,0xf7,0x57,0xe7,0xaf,0xcf,0xf1,0xbe,0xf2,0x45,0x2c,0xdd,0xe7,0x17, - 0xdf,0x5f,0x5c,0xbc,0xba,0xf4,0x7a,0xa3,0x51,0x56,0x44,0xdc,0x7d,0x7e,0xfe,0xea, - 0x7c,0x3a,0xbd,0xf2,0xf4,0xeb,0x28,0x4f,0x56,0xa0,0x99,0xbe,0x9d,0xbe,0x99,0xbe, - 0xc2,0x58,0x44,0x1c,0x3e,0x7e,0xbc,0x78,0x77,0xfe,0x01,0x6f,0x09,0xd8,0x5f,0xbc, - 0x7e,0x7b,0xf5,0xfa,0x23,0x5e,0x52,0x3f,0xe6,0x11,0x48,0x5f,0x4e,0xa7,0xd3,0x09, - 0xb1,0xcb,0xfd,0x38,0x77,0xad,0x4f,0xd0,0x5b,0x66,0x0d,0x0b,0xa1,0xde,0x47,0x39, - 0xcf,0xc4,0x6a,0x98,0xef,0x72,0xc9,0x37,0xa3,0x42,0x0c,0xeb,0x41,0x5a,0xb2,0x49, - 0xe2,0xc4,0xb5,0x7e,0xcf,0xe5,0xdb,0x0c,0xc2,0xe5,0xec,0x47,0xbc,0xab,0xb5,0x34, - 0x91,0xa7,0xfe,0x92,0x0f,0x3f,0x7f,0xa4,0xc1,0xd1,0x2f,0x7c,0x5d,0x44,0x7e,0x36, - 0xfc,0x91,0xc7,0x51,0x32,0xac,0xa6,0xef,0x7b,0xdf,0xed,0x6f,0x92,0xaf,0xa3,0x5c, - 0xfc,0x45,0xc4,0x6b,0xf7,0x26,0xc9,0x02,0x9e,0x8d,0x30,0x72,0xdf,0xbb,0x49,0x82, - 0xdd,0x7e,0xe3,0x67,0x6b,0x11,0xbb,0x13,0xef,0xc6,0x5f,0xde,0xae,0xb3,0xa4,0x88, - 0x03,0xf7,0xce,0xcf,0x06,0x46,0x77,0xb6,0xb7,0x4c,0xa2,0x24,0x33,0x43,0x50,0x9f, - 0xed,0xad,0x60,0x78,0xa8,0x6a,0x23,0xa2,0x9d,0x19,0x26,0x91,0x6d,0xaf,0x17,0x89, - 0x98,0x8f,0x42,0x2e,0xd6,0xa1,0x74,0xa7,0xce,0x85,0x37,0xda,0xf2,0x9b,0x5b,0x01, - 0x5a,0x5a,0x90,0x6f,0x60,0x91,0x90,0x44,0xf0,0x63,0xf2,0x0d,0xe1,0xe7,0x3c,0xb8, - 0xef,0x39,0xdb,0xcc,0x4f,0x21,0xc4,0x57,0xed,0x39,0xee,0xe5,0xd5,0x24,0xfd,0xea, - 0x95,0x42,0x31,0xbf,0x90,0x89,0x97,0xfa,0x41,0x40,0x0b,0x5f,0x9e,0xa7,0x5f,0xd9, - 0x39,0xe6,0xd9,0xe5,0xab,0x14,0xf2,0x93,0x6b,0xf3,0x6c,0x1f,0x88,0x3c,0x8d,0xfc, - 0x9d,0xbb,0x8a,0xf8,0x57,0x0f,0x8c,0xd7,0xf1,0x48,0x40,0x97,0xb9,0xbb,0xe4,0xa4, - 0x69,0x6f,0xed,0xa7,0xee,0x15,0x98,0x1a,0x36,0x38,0xbb,0x94,0xc9,0xc6,0x9d,0x82, - 0x9b,0xd7,0xab,0xf4,0xa1,0xc7,0xc0,0x1b,0x01,0x20,0x02,0xa6,0x0f,0x46,0x06,0xb7, - 0x21,0x64,0x00,0x67,0xd2,0xf2,0xbd,0xc6,0x22,0x73,0x44,0x7a,0xec,0x28,0x0d,0xee, - 0x60,0x7b,0x86,0x69,0xe6,0x07,0xa2,0xc8,0x89,0x29,0x64,0x9d,0xee,0xb5,0x1a,0xc4, - 0x5f,0xb8,0x3b,0xbd,0xc0,0x52,0xf5,0xba,0xd5,0xac,0x2e,0x27,0x93,0xea,0xcc,0x1e, - 0x9d,0xc3,0x9d,0x62,0xd7,0xbc,0xb8,0xd9,0x77,0x95,0x4d,0x96,0x35,0x46,0xd0,0xcc, - 0xc0,0xbf,0x65,0x24,0xe5,0xc5,0x90,0x3a,0xe7,0x4b,0x29,0x92,0xd8,0x58,0x78,0x24, - 0x93,0xd4,0x3d,0xbf,0x54,0xb2,0x9c,0xef,0x0f,0x96,0x1f,0xca,0x12,0x71,0x0a,0xb0, - 0x11,0x39,0x10,0x29,0xde,0x99,0xbc,0xe1,0x1b,0x4f,0xf2,0xaf,0x72,0x24,0x33,0xd8, - 0x1a,0xe1,0xb6,0x71,0x8b,0x34,0xe5,0xd9,0x12,0x56,0xf4,0x7a,0xcd,0xdd,0x55,0x4c, - 0xd9,0xb5,0x05,0x27,0xec,0x8a,0xf6,0x2c,0xa2,0x7d,0x24,0x72,0xec,0x49,0x31,0xee, - 0xc6,0x49,0xcc,0xeb,0x03,0x97,0xf6,0x9d,0x94,0x8a,0x23,0x51,0x8f,0x99,0x42,0xc5, - 0x1e,0x4e,0x16,0x89,0x27,0x19,0x7d,0x3a,0xa9,0xad,0xee,0xbe,0x21,0xdf,0x79,0x9a, - 0xc5,0xf5,0x36,0x4d,0x15,0xbf,0xa4,0x23,0x44,0x82,0x39,0xf1,0xb7,0x1b,0xc4,0xdb, - 0xc0,0x08,0xda,0x89,0xc8,0x87,0x0d,0xbf,0xcd,0x5e,0x9b,0xdb,0x4b,0xee,0x78,0x46, - 0xb0,0xe8,0x86,0x22,0x08,0x78,0xac,0xb5,0x5d,0x0d,0xf2,0x28,0x12,0x69,0x2e,0x72, - 0x6f,0x1b,0xe2,0x98,0xca,0x30,0xa4,0x45,0x0a,0x1e,0xaf,0xf7,0x04,0x91,0xce,0x69, - 0x43,0x47,0xfa,0xeb,0xa7,0xc8,0x4f,0x6a,0xeb,0x78,0xc0,0x25,0x3c,0xa0,0x77,0xd2, - 0x05,0x4a,0x2d,0x93,0x3a,0x2f,0x29,0x2e,0x94,0x92,0x3b,0xda,0x4d,0x00,0x1f,0xbd, - 0x76,0x74,0x9c,0x1f,0x28,0x0b,0x24,0x40,0xa6,0x02,0xc6,0xd1,0xba,0x76,0x45,0x1c, - 0x02,0x0c,0xa5,0xb7,0x2c,0xb2,0x1c,0x54,0x69,0x22,0xc8,0xc0,0x25,0x8d,0x13,0xf0, - 0x68,0xff,0x80,0xee,0x8d,0x3b,0x36,0xe2,0x54,0xf9,0x5e,0xef,0x84,0x80,0x2a,0xe0, - 0xbd,0xae,0x84,0xe5,0xf9,0x08,0x81,0x94,0x3f,0xd7,0xbb,0xbb,0x21,0x59,0x69,0x6f, - 0xd6,0x34,0xf7,0x56,0x58,0x70,0x38,0x70,0xdf,0x23,0xd5,0xd5,0xb0,0x5b,0x3a,0xf2, - 0x3a,0x13,0x41,0xed,0xb5,0x35,0x20,0xbe,0xbc,0xd2,0xce,0xe2,0xdf,0xe0,0xa0,0x25, - 0xf1,0x4d,0x94,0x2c,0x6f,0x0f,0xec,0xeb,0x9d,0x8c,0xc2,0xd2,0xd7,0x95,0x17,0x8b, - 0x38,0x2d,0x4a,0x30,0x9b,0x4e,0x26,0xff,0xe6,0xb5,0x94,0xfc,0x04,0xef,0x78,0xd9, - 0x50,0x07,0x20,0x90,0xbd,0x51,0x41,0xd5,0x49,0x1e,0x7e,0x76,0x70,0xf8,0xd5,0xda, - 0xf6,0xfe,0x3e,0xad,0x1b,0x61,0xdd,0x55,0xb2,0x2c,0xf2,0x7d,0x52,0x48,0x4a,0x30, - 0xda,0x7e,0x27,0xb4,0x0d,0x1f,0xf7,0x15,0xe8,0xe5,0x6d,0x80,0x28,0x53,0xc0,0x11, - 0xa0,0x68,0xa2,0x63,0xc3,0xb0,0x69,0x26,0x30,0xb3,0xdb,0x77,0x0e,0xa6,0x52,0x60, - 0x73,0x5f,0x93,0x26,0x4f,0x1c,0x4d,0x91,0xf7,0x4e,0x3b,0x14,0x69,0x70,0x7a,0x59, - 0x42,0x70,0x03,0x6d,0xda,0x72,0x94,0x4e,0xf6,0x50,0xba,0x39,0xa2,0x8c,0x65,0xc8, - 0x97,0xb7,0x5d,0x55,0x5c,0x1e,0x57,0xc5,0xa3,0xfe,0x54,0x72,0x64,0x4d,0x27,0xa2, - 0x14,0x7d,0xdf,0x7b,0xbe,0xc9,0xd7,0xcd,0x4c,0xa3,0x38,0x3c,0x11,0x2b,0x09,0x18, - 0xcb,0xb2,0x41,0x25,0x28,0x62,0xe6,0xf0,0x2c,0xdb,0x1f,0x39,0x12,0x95,0x78,0xfb, - 0x07,0x24,0x2d,0xc1,0x56,0xc7,0x17,0x8c,0x8e,0x0c,0x84,0x84,0xd6,0x2a,0x4d,0x5e, - 0x5d,0x50,0x14,0x82,0x51,0xd6,0x14,0xf9,0x65,0xc3,0x2e,0xf5,0x19,0x1e,0x49,0x49, - 0xf6,0x93,0xe0,0xf7,0x54,0x8a,0xf6,0xf7,0x47,0x95,0x0c,0x9c,0x76,0x6e,0xa8,0x80, - 0xfd,0x3f,0x05,0x6b,0x83,0x21,0x8f,0xe0,0x75,0x29,0x74,0xce,0x23,0xd4,0x1b,0x4d, - 0x60,0x39,0xc0,0xb0,0x6f,0x02,0x9a,0xde,0x21,0xd2,0x74,0x22,0x40,0x15,0xd9,0x47, - 0xaa,0xd4,0x07,0xa1,0xa6,0x77,0x04,0x6b,0x4c,0xc0,0xa1,0x6a,0x4a,0xe2,0x80,0x42, - 0xff,0x40,0x94,0xee,0x0e,0xff,0xa4,0x9c,0x52,0x42,0x40,0x57,0x84,0xbf,0x3b,0xb5, - 0xe0,0xce,0xa6,0xee,0x50,0xb3,0xb1,0xbe,0xf6,0x51,0x85,0xbf,0x98,0x05,0xe2,0x8e, - 0x2d,0x23,0x3f,0xcf,0x71,0x57,0x43,0xc1,0x50,0xde,0x0a,0x79,0xb6,0x98,0xc1,0x65, - 0xe2,0x72,0x0e,0x45,0xae,0xba,0xf5,0x61,0x68,0x31,0x0b,0xa7,0x0b,0x73,0x3b,0xc3, - 0x53,0x8b,0x0c,0x55,0x69,0x9f,0x89,0x00,0x0f,0x20,0x1f,0x95,0xf4,0x63,0xc3,0xb1, - 0xd7,0xc3,0x3d,0x4e,0x17,0x9e,0x8b,0x1e,0x63,0xb3,0xf0,0x7c,0xf1,0xd9,0xbf,0xe3, - 0x01,0x8b,0xb9,0xdc,0x26,0xd9,0x6d,0x0e,0xca,0x73,0x35,0x53,0x44,0x8a,0x0b,0x55, - 0x85,0xb4,0x6d,0x11,0xa9,0xd1,0xb4,0xdc,0x86,0xe2,0x5c,0xef,0xb3,0x24,0x91,0x67, - 0xe3,0x74,0x41,0xc7,0x2b,0x59,0x77,0x76,0x79,0x8b,0x78,0x29,0x37,0xa9,0xf6,0xa0, - 0x93,0x13,0x0b,0x0a,0x26,0x5c,0x79,0xfa,0x34,0x88,0x61,0x95,0x4c,0xe9,0xd2,0xa8, - 0x67,0xfa,0x8b,0x2f,0xd9,0x8e,0xad,0x44,0x96,0x4b,0x96,0xc4,0x2c,0x4d,0xb6,0xd0, - 0x76,0x91,0xce,0xc6,0x8a,0xce,0xac,0xd1,0xfe,0x5d,0x71,0xeb,0x33,0xa0,0xaa,0x7f, - 0x03,0xb5,0x93,0xca,0xd4,0x9c,0x21,0x6c,0x68,0xdb,0xe4,0xa2,0x3e,0x53,0x56,0x99, - 0xf7,0x9b,0xf8,0x88,0x88,0x30,0xe2,0x60,0x8d,0x36,0x7c,0xa5,0xe1,0xd2,0xfe,0x7d, - 0x46,0x57,0x7b,0x6c,0xa8,0xa6,0xfb,0xd5,0xe6,0x39,0x34,0xda,0x10,0x80,0x14,0xcc, - 0x68,0x9c,0xa5,0x19,0x5f,0xf1,0x8c,0xc7,0x4b,0x3e,0x1b,0xeb,0x45,0x27,0xb6,0x30, - 0x69,0xe5,0xd8,0x06,0x19,0x3f,0x38,0xdf,0x2f,0x6a,0xa0,0xcd,0x70,0x36,0xc6,0x31, - 0xcd,0x63,0xdb,0x64,0x8b,0xcf,0x32,0xc9,0x60,0x6f,0xec,0x45,0x37,0x72,0xdd,0x16, - 0x70,0x98,0x66,0x82,0x8b,0x3c,0xfb,0x15,0x05,0x9c,0x9a,0x5a,0x86,0x49,0xce,0xe3, - 0xd2,0x66,0x46,0xff,0x2f,0x36,0x81,0x9f,0x87,0x9e,0xe2,0xac,0x88,0x8a,0x2c,0xa3, - 0x0e,0x40,0xce,0xf3,0x1c,0xba,0x64,0x22,0xa7,0x4b,0x3e,0xcb,0xb7,0x42,0x22,0x15, - 0x05,0x2c,0x12,0x77,0xdc,0x51,0xce,0x51,0x09,0xf5,0x90,0x97,0x7c,0x1f,0x04,0xcc, - 0xef,0xb8,0x09,0xe1,0xa3,0x3a,0xfb,0xaa,0x5f,0x1b,0xb1,0xd2,0x5c,0xc3,0x5b,0x20, - 0x43,0xd0,0x5f,0xfc,0x64,0x24,0xa6,0x8e,0x48,0xcb,0x49,0x40,0xac,0x32,0xa3,0x0e, - 0x0f,0xa2,0x35,0x5d,0x13,0xfd,0x0c,0x40,0x8c,0x78,0xbc,0x96,0xe1,0xbc,0xff,0xf2, - 0xbc,0xaf,0xee,0xb6,0xcb,0x64,0x93,0x02,0xbd,0x41,0x92,0xac,0x56,0x7d,0x96,0xf1, - 0xff,0x2c,0x04,0xb4,0xd7,0x55,0xf2,0x09,0x81,0x52,0x28,0xbe,0xbf,0xf8,0x19,0x9f, - 0x90,0x28,0x38,0x2d,0x8c,0xa2,0x33,0xc2,0xe8,0x67,0x6d,0xf8,0xd4,0xac,0x6c,0x09, - 0x77,0xf9,0xf2,0x98,0x70,0x47,0x65,0x3a,0xf4,0xf4,0xa7,0xb9,0x1b,0x20,0x64,0x23, - 0x10,0x76,0xe4,0xb8,0x1d,0x47,0x6d,0x62,0x8d,0xaa,0x36,0x2a,0xa6,0xd5,0x89,0x34, - 0x17,0x35,0x49,0x51,0xad,0x4e,0x88,0xcb,0x10,0x50,0xa2,0xa1,0x1a,0x1a,0x68,0x07, - 0x9e,0x3b,0xe9,0x2f,0xb4,0xe3,0xc0,0x87,0xb6,0x87,0xca,0xd2,0x40,0xd6,0x3e,0xe4, - 0x6c,0x4c,0xae,0xd1,0x82,0x12,0x94,0x26,0x84,0x46,0x25,0xc1,0xa1,0xf3,0xb7,0xb0, - 0x8e,0xf9,0x19,0x67,0x32,0x13,0x18,0x82,0xcf,0x2b,0x14,0x87,0x44,0x7e,0x26,0x01, - 0xfb,0x6c,0x95,0x25,0x1b,0xe5,0xe2,0x2a,0x30,0xf2,0x08,0x1f,0xfe,0x0d,0xf0,0x7e, - 0x08,0xb6,0x04,0xd3,0x29,0x11,0xf9,0x2a,0xbf,0x94,0x51,0x81,0xb4,0xd2,0x08,0x2a, - 0x15,0x49,0x39,0xc3,0x8d,0x10,0x9a,0x40,0x9e,0x40,0xc8,0x71,0x26,0x24,0x5b,0x42, - 0x7f,0x2b,0x11,0x07,0x43,0x56,0xe4,0x7c,0x45,0x30,0xbb,0xc2,0x30,0xb8,0x6e,0xc0, - 0x3d,0x67,0x37,0x10,0x8e,0x23,0xee,0xc2,0x64,0xc3,0x87,0x08,0x86,0x5c,0x16,0x81, - 0x48,0x98,0x1f,0x53,0x64,0xdc,0xf1,0xb8,0x40,0xb4,0x7e,0x8f,0x23,0x6c,0xab,0xc8, - 0x44,0xcc,0x25,0x71,0xb4,0x03,0x25,0x45,0xb6,0xc7,0x22,0x8e,0x53,0xd2,0xe1,0xf9, - 0xa6,0xa5,0x4f,0xbc,0xb2,0x22,0x96,0x62,0x79,0x8b,0x03,0x13,0x3f,0x19,0x62,0x69, - 0xea,0xaf,0x39,0xbb,0xe5,0x3c,0x85,0xa8,0xe0,0x86,0x53,0x39,0xec,0x0b,0x68,0xe8, - 0x78,0x90,0x36,0xc8,0x12,0xcc,0xe0,0x54,0x60,0x58,0x06,0x3b,0xe0,0x2f,0xd6,0x71, - 0xcb,0xc4,0x66,0xc3,0x03,0xe1,0x4b,0x1e,0xed,0x9c,0x47,0x73,0xc0,0x0f,0x80,0xc6, - 0x94,0xa0,0xca,0xc4,0xf5,0x91,0x64,0x12,0xe6,0x30,0x00,0x59,0x6a,0x54,0x82,0x46, - 0xed,0xcf,0x0d,0xe7,0x09,0xf3,0x4d,0x12,0x80,0xea,0x47,0x7c,0x9e,0xcc,0x03,0x25, - 0x51,0xe9,0x41,0x49,0xaa,0x44,0xbe,0xf3,0xa3,0x02,0x3e,0x47,0x11,0xd4,0x5f,0xd0, - 0x67,0x65,0xbe,0x22,0x85,0xb5,0x78,0xac,0x8c,0x45,0x76,0x54,0xb5,0x0b,0x0b,0x7d, - 0xc2,0xb4,0xb2,0x19,0xaa,0x99,0x9c,0xe2,0x19,0x6d,0xfd,0x1d,0xa2,0x4c,0x7f,0x3f, - 0x42,0xac,0x82,0x16,0x1f,0x6d,0xb2,0x66,0xb6,0xaa,0xdd,0xf8,0x84,0x12,0x1e,0x80, - 0x97,0x06,0xb8,0x18,0x3a,0x13,0x96,0x54,0x76,0x3e,0x01,0x4e,0x58,0x9e,0xf2,0x28, - 0x52,0x31,0x0c,0xdc,0xf5,0xa3,0x5c,0x2b,0xb2,0x25,0xd2,0x71,0x74,0x79,0x7a,0x2a, - 0x83,0xb1,0x29,0x53,0x76,0x70,0xa6,0xbd,0x89,0x31,0xe5,0x83,0x71,0xfd,0xa5,0xb2, - 0x16,0x8c,0x55,0x25,0x10,0x96,0x50,0x64,0x21,0x3a,0xb6,0xb1,0x0b,0xb1,0xca,0x3d, - 0x55,0x92,0x48,0xeb,0x4e,0xf7,0xe8,0x1a,0xff,0xb0,0xff,0xc2,0x01,0xe7,0xdf,0x53, - 0xfa,0x83,0xdf,0xab,0xf0,0xf7,0x59,0x1a,0x52,0xd4,0x26,0x19,0x1e,0x23,0x3f,0x45, - 0x65,0xa0,0x02,0x27,0x49,0x11,0xa0,0xb3,0x25,0xbc,0x6b,0x11,0x4a,0x99,0xba,0xe3, - 0xf1,0xf4,0xcd,0xb9,0x33,0xbd,0xbc,0x72,0x5e,0x39,0xd3,0xf1,0x6c,0xac,0x66,0x2a, - 0xb7,0xd2,0xc1,0x93,0x03,0xdc,0x99,0x69,0xe0,0x23,0xae,0xe3,0x1d,0x5c,0x2d,0x43, - 0x2c,0x53,0x94,0x92,0xfa,0x75,0x7c,0x66,0xbe,0x40,0x2a,0x25,0x01,0x00,0x36,0xb0, - 0xdf,0x4a,0xac,0x24,0xa1,0x81,0xae,0x39,0x70,0x36,0xbc,0x36,0x9c,0x13,0x7c,0x09, - 0x4a,0x94,0x83,0x96,0x87,0x26,0x01,0x75,0xd4,0x0a,0xaa,0x97,0x00,0x44,0x0a,0x78, - 0x72,0x85,0x47,0x84,0x0f,0xb5,0x7e,0x50,0xe1,0x12,0x14,0x10,0xac,0x55,0x78,0x07, - 0x96,0xa1,0x8e,0x53,0x5a,0xa3,0xd1,0xd1,0xd7,0x8c,0x00,0x0c,0xb4,0x71,0x68,0xf8, - 0xc9,0x24,0x0a,0x74,0x5b,0xdf,0xb0,0x53,0xa0,0x3a,0x24,0x14,0xc4,0xce,0x88,0xe3, - 0x1d,0x01,0x13,0x9e,0xa9,0x5c,0xc0,0x88,0x09,0x24,0xd5,0x1f,0xc2,0x12,0x2c,0x05, - 0x7a,0xae,0xc3,0xfa,0x34,0x47,0x10,0x44,0x5f,0x03,0x17,0x33,0x9f,0x85,0xa8,0x9d, - 0xe6,0xfd,0x71,0x1f,0x28,0x42,0x69,0xdd,0x27,0xfd,0x8a,0x00,0x45,0xb1,0xc7,0xea, - 0x59,0x02,0x8f,0x22,0xa7,0x22,0x87,0xbe,0x89,0x8a,0x52,0x84,0x62,0xd1,0x2b,0xcb, - 0x8f,0xf2,0x67,0x93,0x55,0x11,0x6b,0x0c,0xfb,0xdd,0x40,0xd8,0xfb,0x8c,0xcb,0x22, - 0x8b,0x59,0x90,0x2c,0xd5,0x4f,0x1a,0xce,0x9a,0xcb,0x0f,0x11,0xa7,0xc7,0xb7,0xbb, - 0x4f,0x01,0x28,0xee,0xeb,0x05,0xb9,0xbf,0x1b,0xc8,0x21,0x2e,0xc0,0xf6,0xfe,0x77, - 0x03,0x0b,0x9e,0x69,0xd9,0x0e,0x85,0xd5,0x3b,0xf3,0x93,0x8b,0xf4,0xaa,0x61,0xe5, - 0xa5,0x3f,0x51,0x5e,0x07,0xf9,0xb5,0x85,0x0f,0xcb,0xb5,0xac,0xfb,0x5e,0x0f,0xd7, - 0x02,0x0a,0xc2,0xf9,0x85,0xd7,0x1b,0x8f,0x95,0x5e,0xa9,0xd2,0x46,0x85,0x11,0x25, - 0x3e,0xec,0x49,0x18,0xb4,0x63,0x17,0x2c,0x87,0xb9,0x62,0xa0,0x76,0xae,0x12,0x57, - 0x2a,0xd4,0xe5,0x5e,0x27,0x19,0x98,0x38,0x80,0x67,0xb3,0x4d,0x81,0x75,0x79,0x91, - 0xdd,0xa1,0xd4,0x22,0x5e,0x32,0xf4,0xe5,0x90,0x5c,0x16,0x05,0x5c,0x92,0xab,0x2c, - 0x65,0xd2,0x17,0x1c,0x23,0xe3,0xfe,0x32,0x54,0xe9,0x0d,0x04,0xaa,0x30,0x8d,0x12, - 0x72,0x38,0x53,0xf0,0x51,0x2d,0xa8,0x44,0xa3,0xa4,0xf7,0x5e,0x64,0x72,0x37,0x57, - 0xb1,0xef,0xf5,0xea,0xd3,0x93,0x80,0x03,0x7b,0x4f,0xae,0xc7,0x91,0x5b,0x06,0xd6, - 0xd8,0x4f,0xc5,0x78,0x2b,0x56,0x82,0xd4,0x00,0xfc,0x1c,0x94,0xa4,0x83,0xac,0xd2, - 0x6b,0xe6,0xfc,0x9a,0x63,0xc0,0xbe,0x3f,0x24,0x09,0x14,0x27,0xa6,0x74,0x11,0x38, - 0xf8,0xd4,0xb5,0x25,0x14,0x98,0xcb,0x03,0xb5,0x06,0x8e,0x49,0x3c,0x3c,0xb8,0x1e, - 0x04,0x8e,0x48,0x6d,0x37,0x70,0xb4,0xc5,0xab,0x45,0xa4,0x44,0x2c,0x13,0xa0,0xcb, - 0x7e,0xf8,0xf2,0xe3,0x1f,0xe6,0x96,0xa5,0xe7,0xca,0x43,0x7d,0xe6,0xd1,0x1c,0x74, - 0xf4,0x68,0xd9,0xf5,0x14,0x25,0x40,0x6c,0x40,0xc3,0x9f,0x02,0x23,0x83,0x58,0x0d, - 0x2a,0x35,0x18,0x29,0x35,0x31,0xf2,0xe0,0x3c,0xa5,0xdf,0xea,0x3e,0xc5,0x72,0x60, - 0x98,0x3a,0x0a,0xd5,0x87,0xd3,0x89,0x61,0xaa,0x96,0x3f,0x13,0xb0,0xfd,0x4f,0x03, - 0xd0,0xdb,0xb6,0xda,0x01,0x4f,0x7a,0xfa,0x5e,0x7d,0x96,0x6b,0xbb,0xe2,0xd2,0xe2, - 0xc0,0x29,0x0b,0x15,0x47,0x63,0x75,0x4b,0x88,0x48,0xcc,0x2b,0x67,0xa5,0x1e,0x97, - 0xe4,0xc6,0x5f,0x49,0x09,0x56,0x25,0x45,0x24,0x9a,0xdc,0x5b,0xd5,0x5b,0xbc,0xa9, - 0x0a,0xb0,0x6e,0xf3,0xa3,0xbf,0xa0,0x4b,0x33,0xd3,0x7e,0xb7,0xe3,0xd2,0xd4,0x5f, - 0x56,0xc9,0xb7,0xd6,0x35,0x4a,0x21,0x1e,0x07,0xef,0x42,0x11,0x05,0x83,0x48,0x54, - 0x1b,0x97,0x67,0x2b,0xef,0x29,0x73,0x99,0x15,0xdc,0x33,0xaa,0x27,0xb6,0x58,0xda, - 0x99,0xd3,0x97,0x9b,0xce,0x4c,0x83,0x65,0xcb,0x29,0x95,0x26,0x19,0xc7,0x33,0xdb, - 0x9f,0xda,0x56,0x93,0x9e,0xd8,0xb7,0x9a,0xec,0x6e,0xdc,0xdc,0xa2,0x34,0x09,0xd9, - 0x70,0x36,0xf9,0xed,0x37,0xfa,0x5e,0xcc,0xbb,0xf6,0x39,0xe6,0x45,0x0d,0x2a,0xc4, - 0xdc,0x07,0x84,0x5f,0xed,0xfc,0xf1,0x50,0x7c,0x8b,0x4d,0x89,0x34,0x2e,0x36,0x27, - 0x69,0xc9,0x52,0xa0,0x06,0x49,0x03,0x7f,0xac,0xd8,0x52,0x23,0xcd,0x88,0x12,0x67, - 0xd3,0x16,0xcf,0xc7,0x59,0xb6,0x39,0x6e,0x2c,0x1a,0x69,0x72,0x8c,0x1d,0x4a,0xaf, - 0x0d,0xe7,0x6b,0x7a,0x07,0xb6,0xb7,0xbd,0xc3,0xb1,0x4d,0x33,0x60,0x1a,0x21,0xfe, - 0xe2,0x85,0xe6,0x35,0x9f,0x53,0xe0,0xeb,0xca,0xb3,0x52,0x96,0x96,0x57,0x3e,0x26, - 0xae,0x6c,0x4a,0x2b,0xfd,0xb5,0x85,0x91,0xa6,0xb4,0x56,0xb5,0x5b,0xe5,0xd7,0x1d, - 0xa1,0x65,0x25,0xdf,0x7d,0x53,0x4e,0x63,0x63,0x48,0x27,0x0e,0xa4,0xba,0x79,0x54, - 0xac,0x9b,0x43,0xb9,0x94,0xd7,0x5a,0x34,0xde,0x92,0x4e,0x8f,0x9e,0x12,0xec,0xa6, - 0x2b,0x19,0x6d,0x8f,0x62,0xf2,0xe4,0xfe,0xba,0xd0,0xac,0x1d,0x09,0xef,0x1a,0xb7, - 0xe6,0x9f,0x91,0xe8,0xe3,0xf5,0x40,0xb4,0xa6,0x9a,0xc2,0x0c,0xe0,0x2b,0xf6,0x99, - 0xe5,0x30,0xeb,0xac,0x6d,0x63,0x13,0x16,0x4a,0x11,0xb4,0x48,0x97,0xaf,0x47,0x22, - 0x97,0xa2,0xb2,0x29,0x3f,0x88,0x5b,0x1e,0x7d,0x73,0x52,0x6c,0x5d,0x19,0x92,0xe2, - 0x9a,0x7a,0x0b,0x78,0x04,0x95,0xb5,0x35,0x86,0x08,0x43,0xe2,0xae,0x74,0x76,0xe3, - 0xa0,0x6c,0x89,0x90,0x34,0xe7,0x55,0xc8,0xd9,0x7b,0xac,0x1b,0xe8,0x23,0xd8,0xf7, - 0x27,0x1c,0xf5,0xc6,0x7e,0x22,0xcc,0xdd,0xdb,0x55,0xe6,0x59,0xfa,0x69,0x27,0x5f, - 0x1d,0xe0,0xc3,0x99,0x45,0x15,0xa9,0x75,0x86,0x2c,0x87,0x47,0xca,0xc9,0x39,0xdd, - 0x01,0x03,0xeb,0xcc,0xec,0x36,0xe8,0x2c,0x59,0xcc,0x41,0x7c,0x6d,0xa9,0x3f,0xad, - 0xd0,0xfd,0x48,0xa4,0xf1,0x04,0x29,0x34,0x43,0x2a,0x4f,0x23,0x7f,0x69,0x72,0x37, - 0xd4,0x42,0x35,0x1a,0xa7,0xea,0x42,0xc9,0x84,0x44,0xbb,0xf4,0x65,0x13,0x6c,0x54, - 0xb1,0xd2,0x49,0xaa,0x16,0x00,0xaf,0x8e,0x02,0x3a,0xcf,0x7d,0xaf,0x59,0xe9,0xdc, - 0x71,0xea,0xdc,0x0d,0x28,0x69,0x2b,0x3f,0x87,0xb9,0xab,0xf4,0x59,0x81,0xa5,0xbd, - 0xc7,0xb0,0x22,0xd1,0xc9,0x9d,0xa0,0xd3,0xf6,0x74,0xea,0x27,0xdf,0x24,0xf3,0x0a, - 0x04,0x4b,0x95,0x34,0x6b,0x16,0xad,0xb4,0x09,0x2e,0x3a,0x63,0x82,0xd8,0xb6,0xf7, - 0x54,0x67,0x59,0xaa,0xe6,0xa9,0x4a,0x56,0x6b,0x38,0xb5,0xbd,0x87,0x37,0x3b,0xac, - 0x4a,0xc6,0x6a,0xa7,0xe1,0x7e,0xc3,0x65,0x98,0x04,0xae,0xf5,0xf3,0xbf,0x7f,0xfe, - 0x62,0x0d,0x95,0xc6,0x75,0x53,0x34,0x77,0xf7,0x96,0x51,0xc7,0xe8,0x0b,0x2e,0x29, - 0xd0,0x21,0x8c,0x0d,0xb7,0xf1,0x49,0x07,0xe3,0xaf,0xa3,0xed,0x76,0x3b,0xa2,0x46, - 0xc3,0xa8,0xc8,0x60,0x15,0x2a,0xee,0xa1,0xa9,0xa1,0xc9,0xe0,0xc1,0xce,0xb5,0x4a, - 0x30,0xb0,0xce,0xf4,0xf4,0x7f,0xfc,0xf2,0xe9,0x1d,0x6e,0x53,0xb0,0x07,0xce,0x4a, - 0x67,0xb9,0xb7,0x15,0xf5,0xb7,0x97,0x47,0x65,0x45,0x90,0xdc,0x6a,0xb5,0x04,0xf4, - 0xfb,0x4b,0x92,0xfd,0xf6,0x9b,0x85,0x74,0x0d,0x0b,0x3c,0x41,0x2f,0x27,0x33,0xa8, - 0xe2,0x5d,0x2f,0xa4,0xb8,0x1d,0x92,0xd0,0xe5,0x2c,0xe5,0x57,0x6d,0x8b,0xba,0x15, - 0x62,0x9d,0xd1,0xb9,0x14,0x24,0x98,0x1a,0x81,0x3c,0x34,0xab,0xba,0x88,0xa4,0xc0, - 0x1d,0x3c,0x51,0x17,0x8b,0xf7,0x26,0x58,0xba,0x2e,0xa9,0xd8,0x3e,0x7c,0x04,0xe3, - 0x93,0xb5,0xcb,0x20,0xa6,0x43,0x3f,0x5e,0xf3,0x66,0x50,0xd7,0x07,0x23,0xf1,0x11, - 0xd7,0xed,0x84,0x7f,0x04,0x06,0x2a,0xd7,0xb6,0x35,0x75,0x55,0x01,0x1c,0xa1,0xd5, - 0xae,0xf9,0x0c,0x71,0xb2,0x12,0xd9,0x66,0x60,0xd5,0x1d,0xdd,0xe6,0xa5,0xab,0x3c, - 0x7d,0x75,0x17,0x8d,0x93,0xed,0xb5,0x65,0xdb,0xda,0x04,0x9e,0xba,0x03,0x9a,0x3d, - 0x2b,0xde,0xc9,0xad,0x52,0xf5,0xbe,0x2a,0xfa,0x60,0xe0,0x9a,0x9e,0xa9,0xab,0x86, - 0x11,0x0d,0xb1,0xaf,0xb5,0xfe,0x6c,0x1e,0x17,0x51,0x64,0x40,0xe1,0x88,0x49,0x08, - 0x02,0xce,0xac,0xbf,0xfd,0xf5,0xbf,0x4b,0xa0,0xef,0x44,0x84,0x39,0xeb,0x41,0x4c, - 0x1c,0xb3,0xcf,0xbd,0x01,0x13,0x98,0xa0,0x79,0x07,0x20,0x0c,0x55,0x08,0xda,0x51, - 0xcd,0x47,0x85,0xc0,0xac,0x6f,0x9d,0xd1,0xfc,0x99,0xd5,0xbf,0xfe,0x53,0xfc,0xa7, - 0xf8,0xd3,0xaa,0xd9,0x18,0x53,0x0d,0x2b,0xdd,0x7d,0xaa,0x7a,0x58,0xe5,0x85,0xb1, - 0xc2,0xc2,0xf2,0x5f,0x9d,0xa3,0x55,0xf3,0x2a,0x32,0x37,0xce,0xaf,0xba,0x35,0xe5, - 0xb4,0xf4,0x7b,0x78,0xd0,0x6b,0x55,0x40,0x1c,0x8d,0x4a,0x25,0x7d,0xad,0x80,0xf7, - 0x1f,0xfe,0xf0,0xe1,0xcb,0x07,0xeb,0x9f,0x10,0xa7,0x3a,0x3a,0x93,0xdb,0xeb,0x81, - 0xca,0x46,0xca,0x30,0x6a,0x33,0xb7,0x1b,0xb4,0xf6,0x50,0x87,0xb4,0x09,0x13,0xef, - 0xa9,0x61,0x52,0x87,0xc4,0x4a,0x39,0xac,0x6e,0xd8,0xd6,0x1e,0xcb,0x95,0x34,0xdc, - 0x49,0x33,0xdc,0x23,0x63,0xf9,0x9e,0xaf,0xfc,0x22,0x92,0x7a,0x03,0xc2,0x62,0xa5, - 0x16,0xca,0x06,0xf8,0x2e,0x31,0xd8,0x41,0x05,0xb0,0x19,0x94,0x30,0xfc,0x4c,0x5b, - 0x57,0xed,0xab,0x7e,0x7d,0x6e,0x74,0x0d,0xa8,0x4d,0xad,0x82,0xb5,0x0d,0xf0,0xf0, - 0x76,0xe2,0x89,0x2f,0xba,0xf7,0x52,0xe3,0x88,0x07,0x86,0x1b,0xc6,0x5e,0xbc,0x68, - 0x84,0x8f,0x6e,0x4a,0x02,0x26,0x6a,0x37,0x51,0xc1,0x42,0xae,0xf2,0xa5,0x6a,0x4a, - 0x6e,0x45,0x14,0x51,0x53,0x33,0x45,0x64,0xe5,0x30,0x9b,0xca,0x7e,0x1d,0xff,0xd0, - 0x4e,0x22,0x56,0xc6,0x2f,0x5a,0x6d,0xd1,0x40,0xac,0xd4,0xef,0x2d,0xb2,0xee,0xe6, - 0xd2,0xa5,0x66,0x97,0x14,0xaa,0xf5,0x9b,0xc4,0x6d,0xf7,0xd1,0x77,0xc4,0x60,0x37, - 0xb7,0x1e,0xf1,0x9b,0x33,0xeb,0x05,0xb5,0xd4,0x8e,0x53,0x40,0x07,0x34,0x59,0xea, - 0xd5,0xae,0x75,0x60,0x13,0xf3,0xb3,0xb9,0xf5,0xc2,0xb8,0xf4,0x7c,0x6a,0x1d,0xf3, - 0xda,0x7f,0x41,0xae,0x52,0x69,0x8a,0x3e,0xfe,0x77,0x12,0x51,0x3b,0xe9,0x1c,0x28, - 0x84,0xee,0xb8,0x07,0xbe,0x67,0x86,0x5a,0xae,0xd3,0xce,0x50,0x7a,0x2b,0xdd,0xcd, - 0x86,0x1b,0x20,0xb8,0x74,0xd6,0xb1,0xce,0x02,0x47,0x7b,0x90,0xfe,0xeb,0xd3,0x92, - 0x60,0x08,0x9f,0x31,0x5a,0xd6,0x58,0xe3,0x57,0x58,0x6d,0xd9,0xee,0x31,0x17,0xa2, - 0xf2,0xeb,0x80,0xa9,0x5d,0xdf,0xa2,0xbf,0x21,0x3e,0x0f,0x7b,0x26,0xa6,0xfb,0xdd, - 0x6d,0x9d,0x98,0x76,0xdb,0x3f,0xd2,0x3d,0x21,0xcf,0x0d,0x51,0x70,0x1a,0x56,0x55, - 0x51,0xaa,0xbb,0x9d,0x07,0x25,0x5f,0xd8,0xa8,0xdf,0xe9,0x2e,0x53,0x56,0xdd,0xd4, - 0xc6,0xbd,0x2b,0xab,0xee,0x67,0xf3,0xb9,0x5a,0x4f,0x2d,0x74,0x04,0x49,0xe3,0xd9, - 0x98,0x2c,0x74,0xe8,0xf5,0x89,0x5c,0xb4,0xfd,0xed,0xc6,0xb3,0xe1,0x12,0x38,0xf4, - 0xda,0x94,0x97,0xda,0xff,0x1d,0x81,0x8b,0x14,0x16,0x2f,0x52,0x17,0xa6,0x09,0x4b, - 0x7b,0x53,0x8b,0x19,0x75,0x00,0x25,0x5a,0x1a,0x35,0xcf,0x67,0xd6,0x50,0xbf,0x46, - 0x02,0x4b,0x73,0xd0,0xe9,0x27,0x64,0xc7,0x6a,0x10,0x77,0x95,0xe9,0xb5,0x85,0xd0, - 0xc9,0x29,0x51,0x6a,0x7a,0xea,0x26,0x59,0xaa,0x9f,0x36,0xa0,0x57,0x3a,0xdb,0x99, - 0x65,0x5b,0x0f,0x94,0xd2,0xc7,0x65,0xb5,0x46,0xa6,0x88,0x6e,0x76,0x0b,0x7f,0xc8, - 0x1b,0xfd,0x42,0xd5,0xcb,0x3e,0xd6,0x31,0x2c,0x27,0x4e,0xf5,0x0c,0xf5,0x9e,0x27, - 0x0b,0x9a,0x16,0x80,0x91,0xfc,0x27,0xe1,0xa9,0x6d,0xc9,0x47,0xd1,0xac,0x6d,0x32, - 0xdb,0x3b,0xe1,0xbe,0x87,0xa8,0xf5,0xff,0x13,0xb0,0x60,0x8a,0x27,0x40,0x96,0x26, - 0xd4,0x70,0x00,0xcf,0xa9,0x02,0x4b,0xf9,0x05,0xdc,0xc7,0x4a,0x56,0x2b,0xcb,0x54, - 0x60,0x65,0xb7,0x9c,0x86,0xa8,0xf4,0xd2,0xd9,0xbc,0x8a,0xf6,0x07,0x41,0x83,0x36, - 0xe9,0xc0,0x86,0x01,0x9b,0x36,0x97,0x9c,0x4b,0xf5,0x87,0xe9,0xb0,0xc1,0x80,0x66, - 0x86,0x17,0x93,0xc9,0xa4,0x3b,0x6c,0x16,0x98,0xd9,0x5e,0xf5,0x9f,0x04,0x66,0x63, - 0xfd,0xb7,0x26,0x63,0xf5,0xff,0x10,0xfe,0x07,0x44,0x14,0x46,0x18,0x97,0x30,0x00, - 0x00, + 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x02,0xff,0xb5,0x3c,0xdb,0x72,0xdb,0x48, + 0x76,0xef,0xfa,0x0a,0x88,0x93,0x08,0xc0,0x0a,0x84,0x44,0xc9,0x96,0x6d,0x40,0x90, + 0xe2,0xeb,0x8e,0x77,0xed,0xb1,0xcb,0xf2,0xd4,0x54,0x8d,0xe3,0xda,0x02,0x89,0x26, + 0xd1,0x16,0x08,0x60,0xd0,0xa0,0x68,0x2e,0xc5,0xaa,0x7c,0x44,0xbe,0x21,0xbf,0x90, + 0xf7,0x7c,0x4a,0xbe,0x24,0xe7,0x9c,0xee,0x06,0x1a,0x20,0xe9,0xf1,0x24,0x9b,0x99, + 0x2a,0x8b,0x6c,0xf4,0xe5,0xf4,0xb9,0xdf,0xc0,0xcb,0xc3,0xa4,0x98,0xd4,0xab,0x92, + 0x59,0x69,0x3d,0xcf,0xae,0x0e,0x2e,0xf1,0x8f,0x95,0xc5,0xf9,0x2c,0x1a,0xb0,0x7c, + 0x80,0x03,0x2c,0x4e,0xae,0x2e,0xe7,0xac,0x8e,0xad,0x49,0x1a,0x57,0x82,0xd5,0xd1, + 0x60,0x51,0x4f,0x87,0x8f,0xf1,0xa1,0x98,0x54,0xbc,0xac,0x2d,0x51,0x4d,0xa2,0xc1, + 0x49,0x39,0x1d,0x4e,0x8a,0x5c,0x14,0x19,0xf3,0xbf,0x88,0xeb,0x34,0x4a,0x4e,0xcf, + 0xc6,0xe7,0xe7,0x67,0x67,0x83,0xab,0xcb,0x13,0x39,0xf1,0x4a,0x2d,0xb8,0xe2,0x53, + 0xe7,0x70,0xc9,0xf3,0xa4,0x58,0xfa,0xef,0x5f,0xb9,0xce,0x74,0x91,0x4f,0x6a,0x5e, + 0xe4,0x8e,0xbb,0xbe,0x8b,0x2b,0xeb,0x97,0x48,0x3e,0xf3,0x7e,0x8e,0xec,0x93,0xb8, + 0xe4,0x27,0xa2,0x8e,0xeb,0x85,0xb0,0xbd,0x37,0xd1,0xa7,0xcf,0xde,0xdb,0xe8,0x8c, + 0x3d,0xf1,0x6e,0xbc,0x5f,0xbd,0xf7,0xd1,0x2f,0xb0,0x3c,0x5a,0xe3,0x63,0x16,0xd8, + 0x19,0xbf,0x63,0xb6,0x97,0xf0,0xaa,0x5e,0x05,0x87,0x23,0xef,0x2e,0xc8,0x17,0x59, + 0xe6,0xcd,0x58,0x1d,0xfc,0xd9,0xe3,0xf9,0x34,0xe3,0xb3,0xb4,0x0e,0x7e,0x5a,0xcc, + 0xc7,0xac,0xf2,0xd2,0x22,0x4b,0x82,0x77,0xe3,0x2f,0x6c,0x52,0x7b,0x22,0x5e,0x05, + 0x0d,0x04,0xb5,0x77,0xeb,0x31,0x77,0xcd,0x8e,0x8e,0x1c,0xe6,0xd7,0xec,0x6b,0xfd, + 0xbc,0xc8,0x6b,0x96,0xd7,0x51,0xed,0x6e,0xbc,0xf1,0x42,0x18,0x53,0xc7,0x5e,0xe9, + 0xae,0xf5,0x37,0x6b,0x0a,0xc0,0x8f,0xfd,0x84,0x8b,0x78,0x9c,0xb1,0x24,0x3a,0x1c, + 0x6d,0xcc,0x6f,0xa7,0x61,0xe9,0xd7,0x29,0xcb,0x9d,0xa9,0x37,0x75,0xc3,0x8a,0xd5, + 0x8b,0x2a,0xb7,0xca,0x8d,0x57,0x16,0x59,0xd6,0xee,0x28,0xbc,0xb9,0x37,0xf1,0x0a, + 0x89,0x85,0xda,0x9b,0x7a,0xb3,0x68,0x14,0x36,0x27,0x7c,0x80,0x13,0x66,0x47,0x47, + 0x87,0x53,0x80,0x6d,0x1a,0x8d,0xbc,0x49,0xc6,0xe2,0xea,0x23,0x9f,0xb3,0x62,0x51, + 0x3b,0xb5,0xeb,0x39,0xc2,0x9f,0xc4,0x59,0x76,0x2d,0x1c,0x37,0xf8,0xb3,0x23,0x5c, + 0x57,0x9d,0xa8,0x77,0x4f,0xdc,0xf5,0xc4,0x49,0x3c,0xc4,0x0a,0xdc,0xa5,0x19,0x66, + 0x38,0x4c,0xa8,0x62,0xee,0x46,0xad,0xf9,0xab,0xf7,0x57,0xd7,0xdd,0x34,0x27,0xff, + 0x15,0x4e,0x9e,0x46,0xa7,0x61,0xef,0xc4,0x10,0xa0,0x71,0xea,0x08,0x58,0x42,0x8f, + 0x7d,0xf0,0xe6,0xb0,0xae,0x38,0x3a,0x2a,0xfc,0x29,0xaf,0x44,0x1d,0x45,0x80,0x88, + 0x6b,0x58,0x1e,0x00,0xf0,0xea,0xda,0x40,0xae,0xa2,0x0c,0x0c,0x92,0xcf,0xb6,0x77, + 0xde,0x78,0xb0,0x69,0x3b,0x27,0x77,0xd7,0xf3,0x28,0x0f,0xa7,0xf7,0xf7,0xb0,0xd5, + 0xc6,0xcb,0x8b,0x65,0xf0,0x61,0x03,0x73,0x88,0x2d,0xda,0x69,0x13,0xb8,0xc9,0xd1, + 0xd1,0x1b,0xbf,0x5c,0x88,0x14,0xbe,0x84,0x37,0xd7,0xf0,0x75,0xe2,0xdc,0xb8,0xc1, + 0xaf,0xd7,0xbf,0xfa,0xb0,0x0a,0xe0,0xf8,0x35,0x7a,0xef,0x23,0xd2,0x9d,0x9f,0xbd, + 0xb7,0xde,0x0b,0xd8,0x6c,0x19,0xd7,0x93,0xf4,0xa6,0xb7,0xd3,0xdc,0x5d,0xbf,0xf7, + 0xe5,0xf6,0x00,0xf7,0xaf,0x3e,0x40,0xe3,0xbc,0x8d,0xde,0xc6,0x75,0xea,0xcf,0x39, + 0x3c,0xf6,0xde,0xba,0xb4,0x94,0xd7,0xaf,0x8a,0xea,0x05,0xbb,0xe3,0x13,0xd6,0x2e, + 0x06,0xfa,0x15,0x51,0x71,0x7f,0xbf,0xde,0x68,0x42,0xe7,0x6c,0x69,0xbd,0xaf,0x8a, + 0x39,0x17,0xac,0x25,0xc7,0xca,0xcb,0x25,0xa1,0xd3,0x16,0xa4,0x33,0x76,0xde,0x12, + 0x46,0xb8,0x6b,0x01,0xe4,0x76,0x0a,0x7f,0xbc,0xe0,0x59,0x72,0x74,0x24,0xe4,0x87, + 0x28,0x52,0x23,0x2e,0xa0,0x3f,0xf5,0x11,0x9d,0x8e,0xeb,0xad,0x90,0xe2,0x1b,0x37, + 0x34,0xa8,0x61,0xe0,0x58,0x4f,0x0b,0x73,0xe7,0x65,0x55,0x15,0x95,0x63,0xd7,0x72, + 0x92,0x8d,0x17,0x29,0x7c,0xf5,0xed,0xfe,0xfe,0x09,0x7b,0x00,0xbb,0x6c,0x36,0x2d, + 0xdb,0xfd,0xd9,0x59,0x20,0x4b,0xaa,0xab,0x4c,0x19,0xa0,0x8b,0x46,0x7a,0xdc,0x55, + 0xb9,0x6b,0x94,0xea,0xca,0x2f,0x6e,0xdd,0x3a,0xad,0x8a,0xa5,0x25,0x0f,0xaa,0x14, + 0x1e,0x1b,0xae,0x27,0xee,0x40,0xc9,0xba,0xae,0xe8,0x0f,0x10,0xa5,0x02,0x85,0x81, + 0x60,0x6e,0x0c,0x9e,0x7b,0x81,0xf7,0x87,0x1d,0xe1,0xdf,0x1b,0x90,0xf3,0x72,0x2a, + 0x69,0x14,0x89,0xf0,0x8d,0x3f,0x2d,0xaa,0x97,0x31,0x80,0xd1,0x1c,0x3e,0x05,0xfe, + 0x84,0x99,0x08,0xf8,0xc6,0x75,0xdc,0x46,0xdf,0x1c,0x48,0xc5,0x95,0xc7,0x73,0x16, + 0x0d,0xee,0x38,0x5b,0x96,0x45,0x55,0x0f,0xac,0x89,0x92,0xe9,0xc1,0x92,0x27,0x35, + 0x28,0x2a,0x22,0xe0,0x90,0xbe,0x80,0xa6,0xe0,0x35,0x8f,0xb3,0xa1,0x00,0x59,0x62, + 0xd1,0x08,0xb5,0x5c,0xcd,0xeb,0x8c,0x5d,0xbd,0x8f,0xeb,0x9a,0x55,0xa0,0x47,0xe0, + 0x6a,0x43,0xeb,0x17,0x3e,0x7c,0xc5,0x2f,0x4f,0xe4,0x23,0x50,0x84,0xf5,0x0a,0xff, + 0x9e,0xfc,0xc9,0x7a,0x11,0x57,0xb7,0x16,0xcf,0x45,0x5d,0x2d,0xe6,0x70,0x86,0x55, + 0x17,0xb7,0x2c,0x17,0xd6,0x7f,0xff,0xdb,0xbf,0x5b,0x82,0x31,0xab,0x94,0xbb,0x88, + 0xbf,0x81,0x86,0x63,0x5f,0xfd,0xd4,0x82,0xbb,0x58,0x80,0x49,0x2b,0x2f,0x6a,0xe6, + 0x5b,0x7f,0x3a,0x39,0x08,0xaa,0xa2,0xa8,0xd7,0xc3,0xe1,0xa4,0x62,0xf1,0x3c,0xf8, + 0xe1,0xf4,0xf9,0xe9,0xb3,0xd3,0x27,0xe1,0x70,0xc8,0xf3,0xdb,0xe0,0x87,0x97,0x2f, + 0x5e,0x3e,0x7a,0xf1,0x0c,0xbe,0xcd,0x17,0x35,0x4b,0x82,0x1f,0x1e,0x3f,0x7d,0x7c, + 0xf6,0xe8,0x0c,0xbe,0x4f,0x63,0x9e,0xd7,0xc1,0x0f,0x0f,0x9f,0x3e,0x7c,0xf8,0xe0, + 0x22,0x3c,0x18,0x0e,0xab,0x45,0xc6,0x82,0x1f,0xce,0x1e,0x9c,0x8d,0x46,0x8f,0x43, + 0xf9,0x75,0x28,0x8a,0x29,0xcc,0x19,0x3d,0x1b,0x3d,0x19,0x3d,0x80,0xb1,0x0c,0x77, + 0x78,0xf5,0xea,0xe1,0xf3,0xb3,0x97,0xf0,0xad,0x80,0xed,0x1f,0x3e,0x7a,0xf6,0xf8, + 0xd1,0x2b,0xf8,0x52,0xc6,0x39,0xcb,0x60,0xea,0xf9,0x68,0x34,0x3a,0xc5,0xed,0x44, + 0x9c,0x8b,0xc0,0x7e,0x0d,0x78,0xab,0x6c,0x6f,0xc1,0xe9,0xfb,0x50,0xb0,0x8a,0x4f, + 0x3d,0xb1,0x12,0x35,0x9b,0x0f,0x17,0xdc,0x6b,0x07,0x71,0xc9,0xbc,0xc8,0x8b,0xc0, + 0xfe,0x0b,0xab,0x9f,0x55,0x00,0x9c,0xb0,0xde,0xc2,0x77,0x5a,0x8b,0x0f,0x44,0x19, + 0x4f,0x98,0x77,0xf3,0x0a,0x07,0x87,0x1f,0xd8,0x6c,0x91,0xc5,0x95,0xf7,0x96,0xe5, + 0x59,0xe1,0x35,0x8f,0x37,0x07,0x7f,0x5a,0x8f,0x8b,0xaf,0x43,0xc1,0xff,0xce,0xf3, + 0x59,0x30,0x2e,0xaa,0x84,0x55,0x43,0x18,0xd9,0x1c,0x7c,0x4a,0x79,0x92,0xb0,0xfc, + 0xf3,0x1a,0x54,0x6c,0x99,0x81,0x02,0xcf,0x8b,0x9c,0x1d,0xf2,0x39,0xd2,0x37,0xce, + 0xeb,0xcd,0xc1,0xb8,0x48,0x56,0xeb,0x79,0x5c,0xcd,0x78,0x1e,0x9c,0x86,0xe3,0x78, + 0x72,0x3b,0xab,0x8a,0x45,0x9e,0x04,0x20,0x71,0x8e,0x42,0xae,0x1b,0x4e,0x8a,0xac, + 0xa8,0xd4,0x10,0xe0,0xd7,0x0d,0xa7,0xc0,0x19,0x80,0xcb,0x39,0xcf,0x56,0x6a,0x18, + 0xef,0xe4,0x86,0x07,0x19,0xcf,0xd9,0x30,0x65,0x64,0x43,0x46,0xfe,0xc3,0x70,0xb8, + 0x64,0xe3,0x5b,0x0e,0x73,0x71,0x81,0x98,0x03,0xc9,0x52,0x84,0x11,0xce,0x06,0xe6, + 0xe1,0xb1,0x60,0xc9,0xe6,0xc0,0x5f,0x56,0x71,0x09,0x40,0x7c,0x95,0xac,0x15,0x5c, + 0x3c,0x3e,0x2d,0xbf,0x86,0x1a,0x28,0x2b,0x5e,0xd4,0x45,0x58,0xc6,0x49,0x82,0x0b, + 0xcf,0xcf,0xca,0xaf,0xd6,0x19,0x3c,0xb7,0x2e,0x1e,0x94,0x70,0x41,0x34,0xbb,0xac, + 0x6a,0xae,0x37,0xcd,0xd8,0xd7,0x10,0x36,0x9e,0xe5,0x43,0x0e,0xc8,0x16,0xc1,0x84, + 0x21,0x29,0xc2,0x59,0x5c,0x06,0x8f,0x61,0x53,0xb5,0x0d,0x20,0xa7,0xae,0x8b,0x79, + 0x30,0x82,0xdd,0xc2,0x83,0x06,0x61,0x72,0x0c,0xf6,0x06,0xe3,0xcc,0x13,0x4b,0x5e, + 0x0c,0x39,0xc2,0x05,0x20,0x13,0xe0,0x36,0x09,0xdf,0x23,0x58,0xa4,0xae,0x88,0x1f, + 0xb7,0x90,0x06,0xfc,0xe2,0x86,0x6a,0xd3,0x2a,0x4e,0x38,0x68,0xcc,0x11,0xc1,0x3a, + 0x5a,0x4b,0x34,0xf0,0xbf,0xb3,0x60,0xf4,0x10,0x96,0xd2,0xd7,0xa5,0xdc,0xea,0xe2, + 0xf4,0xb4,0xb9,0x73,0x88,0xf7,0x08,0x46,0x70,0xaa,0x58,0x8c,0xd7,0xdb,0xc8,0x46, + 0xd2,0x2b,0x22,0xc8,0xcd,0x60,0xff,0x0e,0x91,0x88,0xcd,0xdd,0x10,0xf5,0xc6,0x90, + 0xd0,0x11,0x54,0x78,0xc8,0xe6,0x40,0x30,0xd2,0x04,0x8a,0xe4,0x43,0x34,0x31,0x67, + 0x17,0x04,0xdc,0xd9,0xba,0xb7,0x5f,0x1f,0xb8,0x8c,0xa1,0x48,0x0e,0x91,0xe5,0x90, + 0x12,0xfe,0xe9,0x13,0x36,0x97,0x27,0xd4,0x15,0x10,0x1f,0x04,0x74,0x1e,0x2c,0xca, + 0x92,0x55,0x13,0x20,0x6b,0x78,0x60,0x82,0x43,0x52,0xe8,0xb6,0x24,0x3d,0xb5,0x1e, + 0xe3,0x99,0x8b,0x6c,0x9d,0x71,0x01,0x67,0xa2,0x56,0x20,0xd6,0x6c,0x31,0xa0,0x09, + 0x7e,0xaa,0x31,0x89,0xa0,0xee,0xa2,0x0d,0x49,0x2b,0x10,0x28,0xe3,0xdf,0xc5,0x05, + 0xa3,0xd3,0x96,0x0d,0x82,0x27,0xc8,0x4c,0xdf,0xc7,0x02,0xf2,0x18,0x13,0xe7,0xe7, + 0x78,0x85,0x8c,0x5b,0x7e,0xfe,0x7f,0xa0,0x10,0x98,0x49,0xc5,0xf5,0xc8,0xd4,0x40, + 0xf0,0x7c,0xbe,0x96,0xc4,0x37,0x1e,0x9d,0x86,0xc5,0x1d,0xab,0x50,0xa3,0x06,0x52, + 0x9e,0x25,0xda,0x9b,0x41,0x96,0x65,0xbc,0x14,0x5c,0x84,0xcb,0x14,0xee,0x4b,0x14, + 0x42,0x74,0xa2,0x58,0x85,0x07,0xdf,0x01,0xdb,0x19,0x9d,0x5c,0xc7,0xb3,0xef,0xb9, + 0x08,0xe2,0x6f,0x8b,0x15,0x2e,0x80,0x15,0x0e,0xf6,0xf2,0x82,0x46,0x37,0xe2,0xf5, + 0x02,0x25,0x86,0xb0,0xbd,0x85,0x66,0xb0,0x88,0x0d,0x25,0x94,0xdc,0x9c,0xf5,0xb0, + 0x06,0x53,0x40,0x67,0x2d,0x80,0x4a,0x12,0xe9,0x01,0xcf,0x53,0xd0,0xa3,0x75,0x38, + 0x59,0x54,0x02,0x66,0x95,0x05,0x27,0x4a,0x97,0x85,0xe0,0xc8,0xe7,0x41,0xc5,0xb2, + 0xb8,0x06,0x87,0x57,0xaf,0xf2,0x13,0x96,0xad,0xbf,0x41,0x16,0xc5,0xa9,0x86,0x4c, + 0x13,0x5b,0x1e,0xec,0x01,0x99,0x94,0x43,0xb8,0x0d,0xb3,0xbe,0x31,0x6a,0x2b,0x62, + 0xf5,0xf6,0xf4,0x20,0x45,0xba,0xad,0xd5,0x1a,0xf3,0x6c,0xd2,0x1b,0xfd,0x81,0xcd, + 0x01,0x22,0xb3,0x55,0xd1,0x9a,0xc7,0x67,0x15,0x4f,0x5a,0x86,0x6e,0x95,0xe7,0xf9, + 0x63,0xe2,0xa3,0x2c,0x1e,0xb3,0xcc,0xf3,0xb3,0x71,0xd6,0x48,0xc5,0x38,0x2b,0x26, + 0xb7,0x3d,0xb2,0x87,0xdf,0x96,0x52,0x62,0x71,0x9e,0x97,0x0b,0xad,0xfa,0x46,0xa7, + 0xa7,0xff,0x1c,0x76,0x10,0xff,0x1d,0x1c,0x73,0x6e,0x20,0x04,0x14,0xa6,0xf5,0x84, + 0x24,0xae,0xaf,0x35,0xc9,0x94,0xee,0x30,0x35,0x7f,0x0c,0xf3,0x0a,0xdc,0x60,0x5a, + 0x4c,0x16,0x62,0x0d,0xae,0x1a,0x1a,0x24,0x49,0xc3,0x3d,0x18,0x07,0xce,0x8f,0x49, + 0x27,0x8a,0xae,0xfe,0xd0,0x26,0x63,0x87,0x1e,0x31,0x95,0xa7,0x41,0xdc,0xb2,0xe2, + 0xf0,0x64,0xb5,0xde,0xba,0x1a,0xdd,0xc3,0x3c,0x57,0x99,0xd5,0x3d,0x57,0xa3,0xe9, + 0x07,0xfb,0x99,0x0a,0x71,0x38,0xba,0xd0,0x1a,0xda,0x50,0x46,0x5d,0x38,0x34,0xa3, + 0x7d,0xcb,0x3c,0xed,0x40,0xc6,0x24,0x65,0x93,0xdb,0x6d,0x54,0x5c,0xec,0x46,0xc5, + 0xef,0xb2,0x93,0xde,0xd1,0x32,0xd9,0x08,0x4d,0xfa,0x06,0xbd,0xc0,0x0f,0x4c,0x2c, + 0xb2,0xda,0x42,0x22,0x09,0xcf,0x9a,0xf2,0x0c,0x80,0xb0,0xc6,0x2b,0xeb,0xfd,0x2b, + 0x1f,0xc2,0x4d,0x08,0x08,0xbe,0xa2,0x67,0x48,0x8e,0x1f,0x3a,0xa3,0x55,0x91,0xc1, + 0xe7,0xb8,0xb6,0x26,0xf1,0x02,0x5c,0x07,0x1c,0x9f,0x93,0x33,0xe8,0xcf,0xc5,0xcc, + 0xb4,0x69,0x24,0x14,0xdf,0xa9,0x95,0x51,0xcf,0x6a,0x8f,0xe5,0x62,0xdf,0x1d,0x60, + 0x7f,0xf0,0xad,0x41,0xff,0xac,0xfb,0xea,0x48,0x3f,0x62,0x55,0xb5,0xde,0x46,0xe7, + 0x0f,0x5f,0x40,0x23,0x75,0x20,0x33,0x29,0x89,0x60,0x5a,0x34,0xf2,0x07,0xf5,0xcb, + 0x41,0x4f,0xbc,0xfa,0x6e,0x57,0xab,0x0f,0x1e,0x4a,0xbb,0x42,0x70,0x40,0xcc,0xb1, + 0x4b,0xef,0x90,0x52,0x95,0x13,0xf0,0x12,0x7b,0x59,0x83,0xa6,0x58,0xbf,0xe3,0x8f, + 0xb4,0x0e,0x83,0x5e,0x10,0xaf,0xfb,0x32,0xad,0x9f,0xf8,0x63,0x3e,0x6b,0x38,0x8d, + 0xe7,0x74,0x09,0xa9,0xa5,0x94,0x0e,0xba,0x40,0xf4,0x9c,0x4a,0xab,0x61,0x9d,0xee, + 0x25,0xa8,0x81,0x0d,0xbc,0x6d,0xb8,0x84,0x1b,0x0c,0xc7,0x20,0x63,0xb7,0x01,0xfd, + 0x0b,0x2e,0x50,0x86,0xa6,0x15,0x42,0x87,0xf5,0x37,0x18,0x56,0x9b,0x64,0x79,0xf6, + 0x63,0x3c,0x12,0x0e,0xed,0xa2,0xf6,0xc1,0x43,0x54,0xc8,0xb0,0x51,0x65,0x12,0xf5, + 0xdc,0x20,0x6a,0x4b,0xe5,0xdf,0x71,0x5c,0xdc,0xef,0xb2,0xcd,0xbb,0xfd,0x86,0xcd, + 0x41,0x17,0xab,0x0d,0x9f,0x82,0x11,0xf7,0xc7,0x18,0x18,0xed,0xa0,0xa2,0xd2,0xef, + 0xbb,0xd6,0x09,0x96,0x81,0x63,0x68,0x2a,0xf9,0x9e,0x45,0xf9,0x5f,0x29,0xfd,0x83, + 0xbe,0xd6,0xff,0xc7,0x28,0xfd,0x83,0x1d,0x5a,0x5f,0xa9,0x3e,0x70,0x6f,0x8b,0x3c, + 0x41,0x25,0xdc,0x03,0x65,0xfb,0x84,0x7f,0x90,0x85,0xd7,0xca,0x78,0x1b,0x84,0x3f, + 0x6c,0xe8,0xfd,0x59,0x5a,0x88,0xfa,0x7f,0xe3,0x4c,0xfe,0x83,0xbd,0x96,0x73,0x25, + 0x76,0x1a,0xa4,0x3f,0x7e,0x93,0xaa,0x58,0xee,0x34,0x21,0xf2,0x91,0xb2,0x05,0xdb, + 0x7e,0x2e,0xd9,0x84,0x5f,0x50,0xc1,0xa3,0xc6,0x4f,0x8b,0x5a,0x94,0x45,0x6d,0x0b, + 0xcc,0xa8,0xe6,0xc0,0x28,0x96,0x98,0xc4,0xb9,0x35,0xc5,0x0b,0x7a,0x96,0x00,0x6b, + 0x90,0xcf,0x98,0xa8,0x2d,0x4a,0xa1,0x05,0x56,0x6c,0xe1,0xd6,0x68,0x2d,0xe2,0x52, + 0x1a,0x05,0x9a,0x0e,0x71,0x41,0x13,0x4b,0x6c,0xd4,0x98,0xf6,0x20,0x25,0x00,0xdf, + 0x1d,0x36,0x98,0x1e,0xb9,0xde,0xf3,0x71,0x13,0x42,0xf4,0x90,0xaf,0x70,0x7f,0xba, + 0xcd,0x7a,0x46,0x54,0x96,0xb1,0x69,0xdd,0x05,0x4a,0xe2,0xda,0xc2,0x38,0x60,0x07, + 0x5e,0x71,0x22,0x6c,0x5f,0x3b,0x3e,0xa8,0x34,0x17,0xee,0x16,0xe4,0x75,0x3a,0x9c, + 0xa4,0x3c,0x4b,0x9c,0xfc,0xf8,0x91,0xdb,0x89,0xf3,0x61,0xfe,0x38,0xae,0xc4,0xfe, + 0xb0,0x08,0x07,0x86,0x2c,0x97,0x7e,0xe4,0x59,0x1b,0xd5,0x2a,0xda,0xe3,0x62,0x8b, + 0x2b,0xa5,0x70,0xde,0x3e,0x7e,0x00,0xea,0x61,0x4b,0x92,0x75,0x98,0x2c,0x17,0x1d, + 0xf3,0x75,0xaa,0x0d,0xc1,0x3f,0x6f,0x9a,0xc1,0x76,0xf8,0x71,0x77,0xb8,0x7d,0x80, + 0xca,0x07,0x2f,0x3a,0xb2,0x78,0x40,0x84,0x95,0xb7,0xf3,0x7c,0x71,0x66,0x99,0xb7, + 0x1d,0xe6,0xc7,0x67,0x2e,0x8c,0x9e,0xf7,0x47,0xcf,0x71,0xf4,0x01,0xc0,0xbd,0x05, + 0x62,0x6b,0xcc,0x8b,0x8a,0x79,0xe0,0x96,0xf0,0x52,0x73,0xc2,0x5e,0xe2,0xb5,0x61, + 0xe8,0x77,0x18,0x1f,0x92,0x4b,0xa2,0x6e,0x02,0x4a,0xa0,0x8a,0x29,0x02,0x81,0x3d, + 0x59,0x85,0x46,0x44,0x1d,0x6c,0xda,0x8d,0x8b,0xfd,0x2e,0x13,0x2f,0xbb,0x74,0x23, + 0x5a,0x61,0x44,0x17,0x50,0x58,0xb7,0x87,0x4d,0x1f,0x68,0x7f,0xa2,0x77,0x48,0xa3, + 0x89,0x1f,0xca,0x80,0x64,0x9f,0x82,0xdd,0x91,0xba,0x38,0xfb,0x6e,0x4f,0x4a,0xc1, + 0xad,0x71,0xba,0xcd,0xbe,0x20,0xdc,0x37,0x73,0x60,0x5c,0xed,0xcb,0x09,0xeb,0x96, + 0xb1,0x12,0x65,0x9d,0x57,0x56,0x56,0x14,0xb7,0xa1,0x55,0x80,0xbf,0x00,0x32,0xbc, + 0x98,0xa4,0x20,0xec,0x15,0x63,0xb9,0xd4,0x04,0xbc,0xb6,0x62,0xb0,0xe4,0x16,0xd0, + 0x68,0x29,0x48,0xb8,0xff,0x65,0xce,0x12,0x1e,0x3b,0x2a,0xe0,0x0b,0x26,0x05,0xd6, + 0x5c,0xdc,0x75,0x47,0xbe,0x1b,0x37,0xeb,0x4c,0x0a,0x29,0x66,0x71,0x20,0x00,0x0b, + 0xe2,0x29,0x2c,0xf1,0x88,0x1a,0xcd,0x17,0x03,0x72,0x3d,0xa6,0x9c,0x14,0xa9,0x02, + 0xe5,0xd8,0x5a,0xa5,0x44,0x83,0xc1,0x00,0x70,0xaa,0x83,0xcc,0x78,0x0c,0x38,0x04, + 0xd2,0x85,0x3c,0xc7,0x7c,0xfc,0x10,0x91,0x61,0x0d,0x51,0xdd,0x6d,0x0e,0xb0,0x50, + 0x44,0x9e,0xe3,0x74,0x8a,0x4c,0x60,0xfd,0x20,0x6a,0x6f,0x6b,0x0c,0xb3,0x20,0xdb, + 0xa3,0xa9,0xa0,0x8a,0xcd,0xba,0xc0,0x30,0xbb,0x5e,0x05,0xe4,0x7c,0x5c,0x9e,0xc8, + 0x1c,0xea,0xe5,0x89,0xac,0x38,0x61,0x02,0xef,0xea,0x32,0xe1,0x77,0xd6,0x24,0x8b, + 0x85,0x88,0x06,0xc8,0x1e,0xba,0x20,0xc5,0xaa,0xab,0x4b,0x08,0xd2,0x73,0xfd,0x2c, + 0x29,0x6a,0xaa,0x32,0xc1,0xd0,0xd5,0x65,0x3a,0xba,0x52,0xd9,0x59,0xf8,0xd4,0x99, + 0x26,0x16,0xe3,0x81,0xc5,0x13,0xf8,0x00,0xd3,0x87,0x7a,0xfe,0x89,0xda,0xf1,0xe0, + 0xe0,0x52,0x65,0x91,0xe4,0x9c,0xf8,0x8e,0x25,0x03,0x4b,0x26,0x26,0xae,0x0e,0x2c, + 0xeb,0x32,0x3d,0xbb,0xba,0xc1,0x41,0x70,0xdf,0x6b,0x70,0xc5,0x6e,0x05,0x2c,0x3d, + 0xa3,0x27,0x8b,0x8c,0x96,0xe0,0x75,0x11,0x8e,0x45,0x46,0xa3,0xa5,0x3e,0x17,0x1d, + 0x34,0x79,0xf0,0x04,0xef,0x70,0x79,0x52,0xd2,0x73,0xe3,0x72,0xe0,0x6b,0x0f,0x9a, + 0x2d,0xf0,0x0b,0x4c,0x82,0xc7,0x57,0x88,0x16,0x09,0x53,0x1f,0x3c,0x74,0x86,0xe0, + 0x7b,0x1f,0xc0,0x67,0x30,0xac,0xe1,0x6b,0xc0,0xa3,0xa0,0x19,0x33,0xcd,0x72,0xd9, + 0xe0,0xea,0x63,0xb5,0x92,0xd6,0x05,0xf9,0xb2,0x2c,0x96,0x20,0x15,0x8b,0xf2,0xf2, + 0x84,0xe6,0xd1,0x0a,0xe9,0x37,0x35,0x07,0x11,0x72,0x69,0xa8,0x0f,0xb8,0x0a,0x31, + 0x07,0x16,0x51,0x0f,0x2e,0xd2,0x8d,0x55,0x06,0x38,0x1f,0x56,0x48,0x06,0x6c,0xe8, + 0xa0,0x5d,0x89,0x81,0x85,0xb5,0x47,0x38,0x83,0x1e,0x0f,0xda,0x8b,0x01,0x9a,0x07, + 0x84,0x6c,0x0b,0xbf,0x5a,0x65,0xc5,0xa6,0xac,0x62,0xf9,0x84,0x5d,0x9e,0xc8,0xb9, + 0x7f,0x7c,0xdf,0x8a,0xc9,0x9b,0x7c,0xa0,0xbf,0xe6,0x3e,0x0a,0xd5,0x7b,0x28,0x82, + 0xb3,0x4d,0x8a,0x6c,0x11,0xf6,0xea,0xa6,0x06,0x81,0x4b,0x10,0x95,0x28,0xd3,0xb2, + 0x9a,0xe0,0x5b,0xf2,0x1c,0xb4,0xdb,0x24,0x6e,0x14,0xea,0x81,0xc4,0xb1,0x5c,0x93, + 0x47,0x51,0xe0,0x68,0x9e,0xc4,0x22,0x0d,0x61,0x5f,0x9a,0xb2,0xa8,0x2a,0x2c,0x1b, + 0x08,0x26,0x04,0x91,0x5a,0x60,0x65,0xc0,0x12,0x4b,0x5e,0x43,0xb8,0x99,0x58,0x58, + 0xe4,0xf4,0x89,0x81,0xf6,0x72,0x06,0x28,0x87,0x81,0x66,0x87,0xa7,0x49,0x02,0x7a, + 0xa7,0xcf,0x0f,0x98,0x79,0xa1,0xa9,0x53,0x4d,0x1f,0xbc,0x38,0x31,0x3d,0x68,0x99, + 0x71,0xf1,0xd5,0xe4,0x2a,0x7a,0xde,0xdc,0x38,0x1b,0x67,0x83,0xab,0x9f,0x14,0xff, + 0x13,0xc4,0xe4,0xea,0x4a,0xe7,0x45,0xdf,0x05,0x3d,0x15,0x40,0x07,0x53,0x8c,0x4e, + 0x3b,0x80,0x88,0x68,0x2a,0xc1,0x19,0x83,0xe6,0xb4,0x56,0x5e,0x76,0x10,0x14,0x35, + 0xd9,0x2e,0x5a,0xca,0x71,0x05,0x63,0x8f,0x25,0x34,0x95,0xe4,0xad,0x9a,0x8d,0x0d, + 0x19,0x00,0xcc,0x26,0xcd,0x25,0xa8,0x38,0x64,0xb0,0x3e,0x4d,0x26,0x3f,0x4e,0x82, + 0x88,0x73,0x55,0x01,0x49,0x7e,0x86,0x00,0x22,0x63,0xf9,0xac,0x4e,0xa3,0xc1,0xf9, + 0xd9,0xc0,0xaa,0xd8,0x6f,0x0b,0x5e,0x11,0x65,0x44,0x8d,0x2c,0xc8,0xf2,0x81,0xda, + 0xc6,0xa2,0x14,0xff,0xa4,0x98,0x97,0x19,0xab,0x61,0x3d,0x28,0xc0,0x81,0x1c,0x8a, + 0x4b,0x5e,0x83,0xa5,0xfb,0x3b,0x43,0x16,0xca,0x99,0x1a,0x2d,0x80,0xf4,0x93,0x5a, + 0xcd,0x13,0x25,0xcb,0x32,0xca,0x30,0x00,0x99,0xe2,0x4c,0xb0,0x41,0x03,0x5d,0x12, + 0xe3,0x62,0xa1,0x00,0xc4,0x03,0x91,0x37,0xd5,0x60,0x3b,0xab,0xe5,0x65,0xb4,0x01, + 0x12,0x71,0xc9,0x6a,0xde,0xe0,0xed,0x05,0x58,0xc7,0x55,0xb1,0xb0,0xe6,0x0c,0x34, + 0xe4,0x51,0x16,0xff,0xb6,0x28,0xc2,0xcb,0xb1,0x9e,0x46,0x9b,0x8e,0xaf,0x8e,0x2a, + 0x1a,0xbf,0x6e,0xae,0xa4,0x29,0xb4,0x4d,0x14,0x58,0xb4,0x40,0x30,0xe1,0x1f,0x8b, + 0xb7,0x02,0xf6,0xcd,0x05,0x68,0x27,0x07,0x57,0x64,0x2d,0xc1,0x09,0x6d,0xa5,0xdb, + 0xa4,0xe2,0xef,0x13,0xb4,0x84,0x5b,0x0e,0xae,0xde,0xc3,0xbf,0x18,0x21,0xf7,0x89, + 0x69,0x20,0x02,0xac,0x6c,0x83,0xc6,0x0e,0x99,0x69,0x07,0x45,0x66,0xf9,0x59,0x82, + 0x5b,0xaa,0x3d,0x3b,0x64,0xbf,0x38,0x6f,0x29,0xfc,0xff,0x44,0xe3,0x2d,0x49,0x20, + 0x63,0xbd,0x4b,0x14,0xca,0x25,0x0c,0xc7,0x15,0x8f,0x87,0xda,0xf9,0xd0,0x37,0xa0, + 0x41,0xd0,0x9c,0x42,0xb0,0xa4,0xd9,0x5f,0xa4,0xc5,0xb2,0x2b,0x30,0x5d,0x0c,0x77, + 0x91,0xdd,0xd7,0xf2,0x7b,0xc4,0x54,0x25,0xe6,0x34,0x78,0x60,0x66,0xe7,0xbc,0x1e, + 0x68,0x65,0x34,0xae,0x73,0xa9,0xcb,0xb7,0xce,0x35,0x6d,0x33,0xa1,0x41,0xae,0xc9, + 0x8b,0x25,0xea,0xa0,0x2d,0x42,0xc9,0xdd,0x69,0x22,0xe9,0x28,0x35,0x17,0x18,0xd5, + 0xe0,0x05,0x1c,0xe8,0x1a,0xa3,0xe0,0x14,0xae,0x4d,0xfa,0x13,0x54,0xe9,0xb2,0xcf, + 0x1d,0xd2,0x09,0xe8,0x5e,0xfe,0xf2,0x04,0x35,0xe4,0x5e,0x8b,0xd0,0xb3,0x06,0x5a, + 0x77,0xa2,0x9a,0x37,0x94,0xd2,0x3e,0x63,0xd1,0xf1,0x20,0xd0,0xfb,0xb3,0xea,0x8a, + 0xc3,0x10,0xd8,0x08,0xf2,0x4f,0x01,0xf8,0xb8,0xaa,0xc1,0xbd,0xb3,0xa6,0x55,0x31, + 0x27,0x15,0x4b,0x86,0x44,0x64,0x45,0xed,0xc1,0x86,0xe8,0x07,0x95,0xf8,0x38,0xae, + 0x3a,0x3a,0x57,0x14,0x86,0xf9,0x21,0x9b,0x23,0xac,0x65,0xca,0x01,0x5d,0x18,0x77, + 0x01,0x07,0x82,0x50,0x5a,0x14,0x67,0x72,0x0c,0x33,0x41,0x4a,0xa7,0xe8,0xb6,0x4c, + 0x61,0x18,0x76,0x9d,0x43,0x74,0x26,0xac,0x31,0x80,0x85,0xbe,0x69,0x5a,0xcc,0x99, + 0x07,0x86,0x43,0xd4,0x8b,0x84,0x17,0x56,0x9c,0xa3,0x15,0xb9,0x63,0xf9,0x02,0xec, + 0xda,0x53,0x6a,0x67,0xd0,0x36,0x0c,0xec,0x53,0x91,0x67,0x2b,0x98,0x89,0x36,0x30, + 0xb4,0x32,0x06,0xf7,0xc3,0x6b,0xb3,0x79,0x07,0xe9,0xf0,0xd5,0x5a,0xe4,0x35,0x9f, + 0xdc,0xc2,0x55,0x71,0xbf,0x3a,0x85,0xa5,0x65,0x3c,0x63,0xe4,0x2b,0x03,0xa8,0xb0, + 0x1b,0xdc,0xca,0xb7,0x3e,0xc2,0x1c,0xbc,0x1e,0x40,0x9b,0x54,0x45,0x49,0x46,0x06, + 0x36,0xd4,0x86,0x11,0xb8,0x3c,0xd7,0xc6,0x6e,0x4e,0xbe,0x72,0xcd,0xb2,0x95,0x6f, + 0xbd,0xcb,0x5b,0x6b,0x04,0x91,0xb5,0x8a,0xb1,0x5b,0xe3,0x87,0x90,0x4a,0x44,0xc7, + 0xe8,0xf5,0x4c,0x18,0xe2,0x52,0x02,0xa2,0x6d,0x18,0xca,0x86,0xb4,0x69,0xc5,0xa2, + 0x06,0x91,0x66,0x68,0xd2,0x79,0x2d,0xb4,0xc7,0x1e,0x03,0x94,0x20,0xb0,0xf8,0x37, + 0x05,0x6f,0x24,0xa0,0xa9,0xc0,0xe0,0x28,0x62,0x68,0xe7,0x8b,0x92,0xe5,0xb8,0x6b, + 0x51,0x01,0xe2,0x57,0x84,0xee,0x62,0x91,0x25,0x64,0xc0,0x29,0x0b,0xb9,0xd7,0x6e, + 0x6b,0x73,0xfd,0xa3,0x84,0xba,0x31,0xd4,0x3b,0x3c,0x48,0xe5,0x3c,0x93,0xff,0x5a, + 0x76,0xad,0x79,0x2a,0x4c,0x7b,0xbe,0x4b,0x51,0xa6,0x62,0x5e,0x24,0xb0,0xf6,0x2d, + 0xfc,0xdb,0x17,0x04,0xc3,0xe5,0xd3,0xd3,0x5a,0x01,0x2c,0x4a,0xc2,0xf8,0x5d,0x9c, + 0x2d,0x40,0xae,0x50,0x93,0x0d,0xae,0xf0,0xdf,0x86,0xfb,0x16,0x25,0xdc,0x99,0xe5, + 0xc4,0x6b,0x2d,0x46,0xd3,0x18,0xdd,0x17,0xdd,0x2c,0x21,0x37,0xd9,0xbf,0x6b,0xb6, + 0x8c,0x57,0xa0,0x63,0xe4,0xdf,0xdf,0x9d,0x8e,0x1a,0xf4,0x0a,0xfe,0xe9,0x4f,0x34, + 0x3d,0xd5,0xef,0xb2,0x1e,0xa9,0xf8,0xb6,0xfd,0x68,0xad,0x84,0x9a,0xa9,0x14,0x11, + 0x06,0xc4,0x7b,0xed,0xc2,0xff,0x83,0x55,0xf8,0x87,0xeb,0x66,0x60,0xa5,0xc6,0xcf, + 0xde,0xe3,0x44,0xfd,0x8e,0x26,0x04,0x46,0xf9,0xa6,0x67,0xfc,0xb1,0xe1,0x04,0x60, + 0x84,0x56,0x14,0x8b,0x29,0x89,0x55,0xb1,0xcc,0x03,0x4b,0x79,0x1c,0x00,0x0b,0x79, + 0x65,0x65,0xdb,0x65,0x33,0xbc,0x86,0xff,0xd0,0x07,0xf1,0x61,0xe7,0xbf,0xa0,0x0f, + 0x0d,0x12,0x45,0x3a,0x31,0xb6,0xca,0x14,0x15,0x1a,0x08,0x5a,0x6c,0x65,0x71,0x09, + 0xd1,0x06,0x89,0x32,0x0a,0xa0,0x75,0x39,0x01,0xde,0xbd,0x4a,0xeb,0xba,0x0c,0x4e, + 0x4e,0x46,0x4f,0xce,0xfc,0xd1,0xc5,0x63,0xff,0x81,0x3f,0x3a,0xb9,0x3c,0xa1,0x27, + 0xad,0x93,0x4a,0x7a,0x45,0x80,0xcd,0xb7,0x54,0xdf,0x22,0xa8,0xbc,0x7c,0xb5,0x44, + 0xd9,0xf6,0x49,0x81,0x21,0x6d,0xa4,0xea,0xaa,0x62,0x0e,0x1e,0x39,0x02,0x10,0x8f, + 0x41,0x39,0x80,0x0e,0x85,0xa8,0x19,0x0e,0x93,0x11,0x07,0xdc,0x0d,0x83,0xe8,0x96, + 0xf1,0x61,0x5f,0xd4,0xb2,0xc4,0xfc,0xfa,0xd2,0x08,0xa0,0x54,0x68,0x5c,0x2a,0x20, + 0xa9,0x93,0x05,0xa9,0x06,0x54,0x9d,0x2d,0x7e,0x40,0xa7,0xa0,0x9e,0x1a,0x83,0x4e, + 0x6e,0x8c,0x00,0x6c,0xa9,0x75,0x5a,0x5f,0x93,0x81,0xce,0xc4,0x83,0x53,0xb5,0x5f, + 0x5d,0x64,0x52,0xab,0xe9,0xed,0xc8,0xd2,0x78,0x68,0x20,0xe0,0x64,0xd0,0x1e,0x2b, + 0x21,0x15,0x1b,0xc6,0x1c,0x30,0xa2,0x84,0x94,0xf2,0x0d,0xb0,0xc4,0xc2,0xee,0xad, + 0xc5,0x2c,0x6d,0x6f,0xb3,0x43,0x6f,0xc9,0x52,0xc1,0xd5,0x65,0x6c,0xa5,0x10,0x9a, + 0x45,0x83,0x93,0x01,0xe8,0x2e,0xf4,0xa3,0x63,0xc4,0x2f,0x98,0xc0,0xa2,0x0e,0xad, + 0xf6,0xa9,0x6c,0x01,0xc3,0x48,0x09,0xff,0xe2,0x2c,0x64,0x2c,0xda,0xe2,0x40,0x07, + 0xba,0xba,0x65,0xab,0xe9,0x00,0xfb,0x27,0x87,0x37,0x6d,0x67,0x49,0x31,0xa1,0x76, + 0x2a,0x7f,0xc6,0xea,0x97,0x19,0xc3,0x8f,0xcf,0x56,0xaf,0x13,0x98,0xb1,0x69,0x17, + 0x30,0x31,0x71,0xea,0x66,0xc9,0x0d,0xe0,0x28,0x9f,0xc1,0x80,0x5f,0xb1,0x32,0x8b, + 0x27,0xcc,0x39,0xf9,0x74,0x74,0x79,0x35,0xf8,0x7c,0x32,0xf3,0xcc,0x96,0x41,0x40, + 0x82,0x5a,0xb1,0xb6,0x8f,0xec,0xc0,0x3e,0x8a,0xe7,0x65,0x68,0x7b,0xf6,0x25,0x7e, + 0xce,0x6a,0xfc,0x78,0x85,0x1f,0x67,0xf4,0x71,0x80,0x1f,0xc1,0x23,0x86,0x2f,0x9b, + 0x4f,0x93,0xcf,0x9b,0xce,0xf9,0xb9,0x79,0x3e,0x7c,0x03,0x76,0xfb,0xf9,0xc3,0xeb, + 0xe7,0xa0,0x06,0x80,0x34,0x39,0x35,0x36,0xb6,0xb3,0xbf,0x60,0xcb,0x9c,0x9a,0xdb, + 0x34,0xc0,0xb5,0x8f,0x4b,0xf0,0xf7,0x9c,0x85,0x87,0x69,0x90,0xad,0xe6,0xbb,0xf5, + 0x9c,0xd5,0x69,0x91,0x04,0xf6,0xfb,0x77,0x37,0x1f,0x6d,0x34,0x39,0x32,0x85,0x21, + 0x82,0xb5,0xad,0xfa,0x55,0x87,0x1f,0x41,0xdc,0x01,0x56,0xf0,0x15,0x32,0x3e,0xa1, + 0x8c,0xdd,0xc9,0xd7,0xe1,0x72,0xb9,0x1c,0xa2,0x40,0x0f,0x17,0x55,0x26,0xe1,0x4b, + 0xec,0x0d,0x9d,0x11,0xe0,0x3f,0xba,0xfd,0xf3,0x8b,0x09,0x88,0x88,0x57,0xd8,0x15, + 0xeb,0xae,0x65,0xed,0x12,0x3f,0xdf,0xdf,0xdb,0xc5,0xad,0xed,0xfd,0x93,0x63,0x83, + 0xf8,0x63,0x07,0x61,0x67,0xf6,0x8f,0x62,0xff,0x7c,0x52,0x18,0xdd,0x15,0xe3,0x6f, + 0x1e,0xa0,0xa2,0x6f,0x5a,0x72,0x72,0x02,0x56,0x1e,0x7c,0x8d,0x62,0x51,0xa1,0xee, + 0x90,0x0d,0x86,0x02,0x7c,0x9a,0xaa,0x5a,0x19,0xbe,0x8f,0x4d,0xce,0x44,0x22,0xfc, + 0xf6,0x0c,0x30,0xc7,0xd8,0xe7,0xaa,0x29,0x73,0x74,0xc4,0x7c,0xf2,0xf5,0xa3,0xc8, + 0xa6,0x4d,0x6c,0x1c,0x99,0x83,0x19,0x07,0x7f,0x04,0xce,0x9e,0xc6,0x3c,0x43,0xcc, + 0x1c,0xc8,0x23,0x77,0x3a,0x16,0x68,0xe9,0x56,0x14,0x31,0x00,0xfb,0x80,0xf2,0x40, + 0xf7,0x49,0x55,0x74,0x69,0xaa,0xa7,0x1d,0x32,0xe5,0x20,0xe0,0x56,0xe0,0x7d,0x51, + 0x30,0x1f,0xaf,0x2c,0xd2,0x32,0xca,0x09,0x52,0x82,0x1b,0x5a,0x46,0xb3,0x33,0xce, + 0xf5,0x0f,0xb0,0x3d,0xf4,0x8e,0xc7,0x3f,0x8a,0x88,0x0c,0x81,0xa7,0x9c,0x1f,0xf0, + 0xe7,0xeb,0x6a,0xc1,0x3c,0xb0,0x3d,0xd1,0xc3,0x90,0x66,0x61,0x18,0xf8,0x13,0x00, + 0x23,0xb0,0x45,0x1a,0xbf,0xfc,0x95,0xad,0x22,0xdb,0xf6,0x52,0x81,0xa3,0xf2,0xd3, + 0x9b,0x02,0x98,0x24,0x89,0xb0,0xd7,0x37,0x44,0x70,0x7e,0xce,0x29,0xc7,0x65,0x95, + 0xe0,0x71,0x49,0xbf,0x07,0xa4,0x15,0x60,0x4d,0x2d,0x08,0xe4,0x6a,0x72,0x5b,0x30, + 0x67,0xbf,0xac,0x78,0xcd,0x24,0x2c,0x48,0x8d,0x17,0xd8,0x60,0xad,0xe0,0x49,0x85, + 0xf1,0x4d,0x02,0x72,0xcb,0xca,0x1a,0x8f,0x83,0xe0,0xee,0x97,0x98,0xd7,0xd1,0xa9, + 0x87,0xfa,0x4d,0x41,0x83,0x01,0xaa,0xfa,0x38,0x8d,0x21,0x5c,0x96,0xbb,0x00,0xfd, + 0xe2,0x7c,0x06,0x90,0x9d,0x86,0x2d,0xc9,0xa8,0x8f,0xdb,0x21,0xa6,0xa0,0x8f,0x51, + 0x73,0xf6,0xfd,0xbd,0x3a,0xf6,0xfe,0xfe,0xf0,0xd0,0x01,0x1e,0x41,0xcb,0x61,0xbb, + 0x3e,0xf9,0x05,0xf7,0xf7,0x30,0x80,0x56,0x5a,0x0f,0xb8,0x92,0x8a,0x4f,0x05,0x3a, + 0x9e,0xaa,0xa2,0x82,0x57,0xcd,0x80,0x48,0xa0,0x93,0xc5,0x92,0x55,0xa4,0x91,0xc7, + 0x0c,0x04,0x83,0xc9,0x47,0x00,0xa5,0x68,0xe8,0x27,0xb3,0x34,0xa8,0x43,0x56,0xb8, + 0x51,0x9c,0x55,0x20,0x6b,0x2b,0xeb,0x36,0x47,0x67,0x91,0x88,0xe3,0x1f,0x20,0xe7, + 0xca,0x6e,0x61,0xb3,0x7b,0x57,0x52,0xee,0xf0,0x50,0xf8,0xf8,0x49,0xf2,0x4d,0x88, + 0x4d,0xb2,0x92,0x28,0xd8,0xd0,0xab,0xb8,0xc9,0x55,0x64,0x6a,0x06,0x7c,0xbc,0x53, + 0x08,0x47,0x3c,0x2b,0xbe,0x62,0x5f,0x6c,0x28,0x39,0x11,0x53,0x48,0x31,0x5a,0x0b, + 0x4d,0x29,0x8f,0x80,0x45,0x38,0xf3,0x86,0x33,0x9d,0xd6,0xff,0xd2,0xf7,0x43,0x06, + 0x6b,0x1d,0x67,0xba,0x06,0xba,0xc6,0xd8,0xf5,0xeb,0x86,0x8a,0x95,0xcf,0x2c,0x8a, + 0x17,0x32,0xc0,0x8a,0xcc,0x58,0x71,0x8c,0x07,0xd0,0x13,0x27,0x63,0x23,0x19,0x00, + 0xfb,0x94,0x23,0xb8,0x2d,0xf5,0x2b,0x1b,0xfd,0xc5,0xa0,0x82,0xf0,0xf1,0x32,0x6c, + 0xb5,0xa9,0x54,0x56,0xb2,0x81,0x7f,0xc9,0xa7,0xdc,0x6e,0x94,0xcb,0x76,0x5f,0xfa, + 0x32,0x4a,0xc2,0x1d,0xcb,0x74,0xa1,0xac,0x55,0x4b,0x2e,0xb9,0x27,0xbd,0x0d,0xd2, + 0x46,0xb2,0xd7,0xcb,0x60,0xe9,0xa5,0x41,0xba,0xe9,0xf6,0xb7,0x03,0xce,0x97,0xae, + 0x31,0x65,0x13,0xca,0x0e,0x65,0x86,0x88,0xdd,0x78,0x0f,0x4f,0x4f,0x4f,0x3d,0x13, + 0x1c,0x98,0x0f,0xff,0x62,0x38,0xf0,0x0b,0x00,0xee,0x24,0xfe,0xd2,0x45,0xba,0x25, + 0x7e,0xea,0xe2,0x20,0x28,0x38,0xfc,0xb8,0xc1,0xd5,0x88,0x4b,0xb4,0xbe,0x4a,0x6a, + 0x51,0xf1,0x58,0xce,0x4f,0xef,0xac,0x9b,0x9b,0xd7,0x2f,0x3c,0xeb,0xe9,0xcf,0x1f, + 0x7f,0xb4,0x5e,0x3d,0x7d,0xfd,0xc6,0xf7,0x7d,0x17,0x11,0x8a,0x35,0x85,0xa4,0xe9, + 0xf9,0x7d,0xf3,0xf2,0x85,0xa9,0xa5,0x44,0xfd,0x11,0xfb,0xa1,0x13,0x42,0x27,0x9d, + 0xd7,0xc8,0xbb,0x86,0xde,0x86,0x69,0xf6,0x31,0x3c,0x90,0xd1,0xd0,0xb1,0x6d,0xfd, + 0xd7,0x7f,0xd2,0x00,0x2f,0x0d,0xd4,0xdb,0x24,0xba,0xb9,0xf4,0xbb,0xa9,0xf5,0xd8, + 0x3e,0x76,0x0e,0x13,0x5f,0x47,0x9d,0xbe,0xf4,0x58,0xaf,0x71,0x1e,0xb6,0xad,0x5a, + 0x52,0x0f,0xac,0x58,0x6d,0x07,0x84,0xe0,0x44,0xb1,0x33,0x2a,0x48,0x75,0x19,0x1b, + 0x67,0xab,0x89,0x4d,0x48,0x05,0x96,0x0b,0x25,0x77,0xc7,0xaa,0xe6,0xe6,0xb0,0x2e, + 0xee,0x2d,0x03,0xde,0xd5,0x5d,0x2e,0x96,0x4e,0xb0,0x80,0xa9,0xaa,0xab,0x15,0x71, + 0x1b,0x62,0xb3,0x13,0x24,0xdb,0x48,0x25,0x85,0x68,0x25,0xa2,0x92,0xbd,0x91,0x31, + 0xa5,0x5f,0xd9,0x06,0xa4,0xca,0x27,0x22,0x4f,0x0e,0xf4,0xac,0x03,0xbe,0x35,0xfb, + 0x1b,0xf2,0xdf,0xdf,0xd0,0x25,0x04,0xb2,0x19,0x08,0xd7,0xf2,0xa5,0xda,0xf0,0x49, + 0x5e,0x8f,0x8e,0x0e,0x1b,0xac,0x87,0xa0,0x4b,0x64,0x32,0x02,0x58,0x50,0x06,0xf6, + 0x51,0x8a,0x9c,0x90,0xba,0xf2,0x09,0x0c,0x93,0xa3,0x0e,0xba,0x8b,0x54,0x19,0xe8, + 0x9a,0x96,0x9a,0x0d,0xfb,0x34,0xe2,0x91,0x47,0x2d,0x0d,0x40,0x49,0x67,0x91,0x32, + 0x70,0xb6,0xeb,0x61,0x10,0x0c,0x4f,0xf1,0xdb,0xeb,0xe4,0xab,0x07,0xf4,0xf5,0x6e, + 0x91,0xa2,0xa8,0xe2,0x13,0x1f,0xfe,0x0d,0x5b,0xdd,0x6f,0xf0,0x05,0x4e,0x41,0x0d, + 0x48,0x32,0x62,0xbc,0xad,0xd2,0xb0,0x12,0x4e,0x00,0xcc,0xbd,0x60,0x13,0x9e,0x50, + 0x8e,0x1a,0x02,0x5f,0x9d,0xa9,0x36,0x34,0x9b,0xd4,0x89,0x14,0x49,0xca,0x51,0xa9, + 0x09,0x04,0xab,0x29,0x13,0x01,0xd1,0x9d,0x03,0x7a,0x83,0xb6,0x32,0x2a,0xd8,0x1e, + 0x7a,0xe0,0x1d,0x1e,0x72,0x3d,0x8b,0x01,0x1e,0x40,0x71,0x60,0x9b,0x7c,0xa3,0x4c, + 0xa5,0x87,0x4a,0x1f,0xc9,0x01,0x95,0x3b,0x49,0x8c,0x82,0x16,0xca,0x32,0xd2,0x60, + 0xad,0xca,0x45,0x38,0x64,0x2c,0xf9,0x65,0x31,0x2f,0x85,0x06,0xb8,0x2d,0x9c,0x0b, + 0xdc,0x3e,0xe3,0xf9,0xad,0x2f,0x45,0xe5,0x50,0xdb,0x10,0xc2,0x35,0x84,0x5f,0xda, + 0xa4,0x8c,0x42,0xfa,0x0e,0x53,0x88,0xba,0x60,0x32,0x72,0xc5,0xfd,0x48,0x42,0xb0, + 0xcd,0x80,0xb8,0x32,0x46,0x59,0xfa,0x09,0xbc,0x21,0x1f,0x0b,0x5d,0x55,0xfd,0x8c, + 0x6c,0x81,0xa3,0x27,0xa0,0x1f,0x42,0xb7,0x03,0x2f,0x44,0x6e,0xd7,0x0e,0x68,0xb6, + 0x50,0x16,0xd0,0xb2,0x36,0x12,0x20,0x47,0x91,0x16,0x7c,0xe6,0x76,0x92,0x3e,0xfa, + 0xf2,0xcc,0x3d,0x3a,0x6a,0xec,0x99,0xbb,0xee,0x99,0xd5,0x50,0xd9,0x3e,0xdc,0x4a, + 0xb3,0xa8,0xa2,0xe3,0x07,0x86,0x6f,0x7e,0xd4,0x32,0xe7,0x82,0x41,0x5e,0x8a,0xd7, + 0xc4,0x1e,0x01,0x99,0x72,0x47,0xd4,0x81,0x8b,0xac,0x32,0x36,0xb2,0x76,0x02,0xd6, + 0xdd,0x12,0x8b,0xea,0x8e,0xdf,0xa1,0x6a,0x57,0x86,0x03,0xf1,0x76,0x1b,0xfd,0xe5, + 0xe6,0xdd,0x4f,0x20,0xb4,0xe8,0x28,0xf3,0xe9,0xca,0xf9,0x94,0x7b,0x06,0x6f,0x1d, + 0x1d,0x35,0x7a,0xc6,0x6b,0x38,0xf3,0x33,0x41,0x02,0x17,0xbc,0x3d,0x8c,0x22,0x65, + 0xce,0x15,0xce,0xb5,0x71,0xbf,0x6d,0x50,0x6e,0x5c,0x51,0x05,0xa7,0xb0,0x5f,0x54, + 0x62,0x45,0xf3,0x35,0xb8,0xc3,0x20,0x01,0xd2,0x46,0x7b,0xa3,0x53,0x85,0x58,0x5a, + 0x06,0x93,0x2e,0x1b,0x2a,0x91,0x60,0xc0,0x48,0x88,0x7c,0xf5,0x2d,0x4c,0x49,0xd4, + 0x13,0x6d,0x10,0x12,0xc0,0x3a,0x87,0x8b,0x54,0x3f,0x7e,0x7c,0xfb,0xa6,0x41,0xfc, + 0xb5,0x0d,0x7a,0xe6,0x32,0xe3,0xdd,0xb2,0x60,0x3e,0x6f,0x32,0x86,0xdb,0x1d,0x49, + 0x83,0x2b,0x8c,0xd3,0x5b,0x0d,0xd9,0x54,0x0d,0x61,0x17,0x5b,0x02,0x8d,0xf7,0x68, + 0xcf,0xb2,0xd5,0x68,0xbe,0xfd,0x9a,0xca,0x57,0x8f,0x37,0x98,0x40,0x7d,0x90,0xf1, + 0xa8,0x09,0x6c,0xb0,0x75,0xb2,0x66,0x2a,0xb6,0xc1,0x2b,0xd8,0x0d,0x4a,0x32,0x6e, + 0x6e,0xdf,0x05,0x7d,0x70,0x05,0xaa,0x9d,0x1f,0x8f,0xdc,0x63,0x5b,0x43,0xd6,0xbb, + 0x9a,0xae,0x8b,0xda,0xc7,0x4d,0x72,0xc2,0xe9,0x50,0xf9,0x2b,0x39,0x1b,0xa0,0xb4, + 0x1b,0x72,0x5f,0x77,0x0f,0xa9,0x63,0x88,0xf1,0x9b,0x05,0x7a,0xbb,0xc0,0xb6,0xdd, + 0xce,0x96,0x8a,0x43,0x60,0x23,0xbe,0xbd,0x81,0x25,0x8b,0x6f,0xb2,0xf4,0xb6,0x6b, + 0x03,0xbb,0x97,0xb7,0x48,0x58,0xd6,0x4b,0x77,0x5f,0x49,0xde,0x6e,0x32,0x15,0xb6, + 0x81,0x1f,0xea,0x92,0x00,0xd0,0x3f,0x8d,0x3e,0x77,0xf4,0xa0,0xbc,0x9b,0x31,0x11, + 0x36,0xaf,0x9f,0xe3,0x64,0x1f,0x54,0x21,0x44,0x46,0xb7,0x91,0xe1,0xc5,0xc0,0x99, + 0x8e,0x5c,0xe1,0xa1,0x67,0xee,0x6e,0xf4,0xc2,0x96,0xa7,0x20,0x9e,0x62,0x79,0x42, + 0x3b,0x38,0x19,0x6f,0x48,0x84,0x2c,0x00,0xba,0xc2,0x41,0x4b,0xf4,0x8e,0xd2,0x51, + 0x8e,0xa2,0x8a,0x0f,0xb6,0x57,0xed,0xc9,0x3d,0xe9,0xef,0x12,0x4b,0x03,0x96,0xb4, + 0x36,0xd9,0xb8,0x5a,0x71,0xc0,0x39,0x93,0xb8,0xec,0xe9,0x72,0xcd,0xbc,0x60,0xec, + 0x8b,0x29,0xec,0x06,0xc6,0x00,0x3e,0x62,0x3a,0x58,0x60,0x16,0x37,0x51,0x84,0x75, + 0xf4,0xbc,0xab,0x08,0x66,0x5c,0xdb,0x64,0xf7,0x65,0xa3,0x00,0xa8,0x03,0x50,0xd2, + 0xa0,0x4d,0x55,0x24,0x2c,0x94,0x07,0x4c,0xf5,0x5f,0x46,0x84,0x90,0xde,0x03,0xb6, + 0x74,0x60,0xa6,0x05,0xa8,0x89,0x2e,0x20,0xd9,0x5d,0x34,0xbc,0xd4,0xba,0x34,0x66, + 0x13,0x8c,0x76,0x00,0x86,0x66,0xb5,0x36,0xba,0x02,0x33,0xb3,0x2a,0x35,0xa3,0x72, + 0x29,0x86,0xe5,0xf5,0x53,0x95,0xe3,0xe5,0x10,0x8c,0xe3,0x76,0x37,0x29,0x86,0x6f, + 0x98,0x0e,0x06,0xc5,0x0f,0x16,0x60,0xce,0xf3,0x45,0xcd,0x74,0x16,0x05,0x93,0x14, + 0x60,0x77,0x32,0xcc,0x89,0x54,0x2c,0xa9,0x62,0x98,0xdb,0xd5,0x77,0x86,0x09,0x37, + 0x60,0xfe,0xd2,0xd8,0x59,0x30,0xd8,0x68,0x5a,0xf1,0x0a,0xa0,0xbd,0x8b,0x1c,0x7c, + 0xf0,0x2f,0x47,0x47,0x5f,0xc8,0x3d,0x61,0xa0,0xb7,0x6c,0x14,0x69,0x88,0xf9,0x1c, + 0x35,0x84,0x0e,0x8b,0xf4,0x3e,0xec,0xfb,0xfb,0x2f,0x7e,0x3c,0x2b,0x2e,0xa3,0x8b, + 0xd3,0x53,0xd7,0x23,0xc4,0xd6,0x51,0x91,0x37,0xab,0x8d,0xa9,0xde,0x2d,0x3c,0xb8, + 0xfe,0xa4,0x1e,0x78,0x5f,0x24,0x91,0xbf,0x80,0x2b,0x06,0xff,0x40,0xc4,0xf9,0x99, + 0x70,0xe8,0xd8,0xf7,0xb6,0x0b,0x18,0xf6,0x72,0x6f,0xe1,0x2d,0x95,0xf2,0xac,0x01, + 0x08,0x0c,0x80,0xdc,0x35,0x85,0x41,0x75,0x88,0xfe,0x34,0xbd,0x65,0x58,0x5f,0x9f, + 0x81,0x37,0x1a,0xa0,0x4b,0xea,0x2a,0x53,0x72,0x0b,0x67,0xaa,0x18,0x4a,0xb9,0x81, + 0xb8,0x8b,0x8e,0xaa,0x6e,0x43,0xb8,0xad,0x36,0x30,0x87,0x45,0xae,0x4e,0x80,0x4f, + 0xc6,0xe4,0x1c,0xd4,0xc6,0x18,0x34,0x00,0x66,0x48,0x24,0x9c,0xa4,0x2f,0xc6,0x52, + 0x86,0x70,0x03,0x92,0x3a,0x15,0x2a,0x6a,0x20,0x95,0xae,0xc2,0xc7,0x86,0xfe,0x41, + 0x5c,0x23,0x4f,0xd9,0xc7,0xf9,0xb1,0x7d,0x94,0xd2,0x3b,0x1a,0xa1,0xf5,0x7a,0x6a, + 0x64,0xf4,0xf1,0x5d,0x43,0xa1,0x82,0x0f,0x98,0xea,0xf5,0x32,0xc2,0x58,0x6b,0x48, + 0xac,0x46,0x1f,0xd9,0x14,0x36,0xc7,0x0d,0x37,0x05,0xaa,0xda,0x6d,0x46,0xc7,0x30, + 0x85,0xce,0x6b,0xd3,0x7c,0x9d,0xdc,0x7b,0x2f,0x85,0xdf,0x6e,0xdd,0x49,0xe0,0x83, + 0xa6,0x94,0x71,0x16,0x08,0x87,0x03,0x9e,0x0b,0xa0,0x44,0xa5,0x09,0x25,0x66,0xe4, + 0x43,0x94,0xd9,0xac,0x98,0xc4,0xd9,0x09,0x22,0x48,0x05,0xea,0x18,0xe7,0xcb,0x1a, + 0x85,0x2b,0xf5,0x96,0xed,0x13,0x9a,0x36,0xe4,0xed,0x00,0xb2,0x0c,0xf6,0x90,0xf9, + 0x3c,0xdb,0xc0,0x9e,0x81,0xdc,0xe2,0x56,0xa9,0xad,0x45,0x64,0x77,0x0e,0x47,0xbe, + 0x81,0x6d,0x4f,0xd4,0xe3,0x1d,0x48,0x27,0x9c,0xe5,0xa8,0x51,0x6e,0xf6,0xe2,0xc7, + 0x93,0xa1,0x20,0x62,0xe8,0x72,0x5c,0xb5,0x3a,0xdf,0xbe,0x8c,0xb5,0x62,0x1d,0xf3, + 0xd9,0x40,0xe5,0xe5,0xec,0xe3,0xc5,0xb1,0x8d,0x16,0x64,0x81,0xdc,0x10,0x5f,0x7d, + 0x6f,0xcd,0x71,0x52,0x94,0x2b,0xb4,0x08,0xe5,0xaa,0x55,0xc6,0xcd,0x49,0xdd,0xb2, + 0x5e,0x93,0x2a,0xc6,0xd9,0x2a,0x59,0x2c,0xcd,0x14,0x80,0xf7,0x71,0x47,0xe9,0x45, + 0xd3,0xb4,0x5b,0x7a,0x99,0x52,0xaa,0x57,0xea,0x09,0xdf,0x6e,0x9c,0x30,0xdc,0x14, + 0xb4,0xe5,0x0e,0x55,0xae,0xfd,0x0d,0x98,0xe0,0xb4,0x88,0x46,0x24,0x23,0x8e,0xfb, + 0x21,0x68,0x93,0x7b,0xc2,0x1d,0x21,0xd8,0xb5,0x3d,0x9d,0x7f,0x52,0x60,0xd3,0x6b, + 0xb2,0x8d,0xad,0xda,0xb1,0x8e,0xea,0xac,0xc4,0x9d,0xa9,0x4e,0xbf,0x1a,0x95,0x21, + 0xdc,0x05,0xae,0x03,0xdb,0xb2,0xaa,0xea,0xef,0xab,0xad,0x40,0xc3,0x4f,0x3b,0x19, + 0x07,0x17,0xca,0x89,0xcb,0x88,0xd4,0xcb,0xfd,0x3d,0x06,0x64,0x52,0xc8,0xda,0x52, + 0xa1,0x92,0xa1,0xdd,0x5c,0xf4,0xbc,0x53,0x8e,0x92,0x1c,0x13,0x58,0x92,0xff,0x96, + 0xca,0x56,0xa9,0x4b,0x3a,0x4b,0x64,0xe5,0x25,0xb6,0xa2,0xb6,0x31,0xda,0xb5,0xfd, + 0x9c,0x5e,0x79,0x30,0x03,0x37,0xba,0x33,0xe8,0xff,0x84,0x92,0xe3,0x33,0xf0,0x99, + 0x7c,0x15,0x0e,0x12,0xa8,0xa8,0x6c,0x75,0xa3,0x05,0x9c,0x4b,0x6d,0x22,0x9d,0x7d, + 0x50,0xb2,0x3c,0x59,0xa8,0xc4,0x00,0x19,0xdf,0xab,0x1a,0xc2,0x76,0xd8,0x81,0x76, + 0x47,0x09,0xf9,0x44,0x2a,0x07,0x33,0xa1,0x0d,0xf3,0x74,0xe8,0x69,0x1c,0x66,0x63, + 0x57,0x13,0x41,0x00,0xcc,0x57,0x08,0xcc,0xc7,0xcb,0x70,0xa2,0x2a,0x80,0x6b,0x2a, + 0xdf,0x56,0x66,0x56,0x9a,0x34,0xc5,0x13,0xba,0xc1,0x26,0xc6,0x54,0xfe,0xa2,0x92, + 0xaf,0x63,0x80,0xf1,0x0d,0x00,0xb0,0x3b,0x3e,0x8b,0xeb,0xa2,0x02,0x2a,0xf0,0x72, + 0x5c,0xc4,0x70,0x57,0x8e,0x16,0x77,0x11,0x67,0x60,0x8c,0xe6,0x1c,0xd4,0x68,0x3e, + 0x33,0x4c,0x11,0xf1,0x5a,0xad,0x83,0xf7,0x1d,0xcb,0x8f,0x8e,0xd4,0x6f,0x1e,0x70, + 0x71,0x43,0x87,0x3d,0x97,0x67,0xe9,0xe0,0x7e,0xc7,0x12,0x9f,0x92,0x6f,0x14,0xcb, + 0xd5,0x04,0x3e,0xe5,0xfa,0xf6,0x7a,0x8d,0x28,0x59,0x60,0xf1,0x66,0x11,0xf8,0x49, + 0x37,0x54,0x05,0x23,0x2e,0xf5,0xaa,0xfe,0x8a,0x0f,0x88,0x3b,0x78,0x50,0xdc,0xb6, + 0x91,0x8b,0xe8,0xfe,0xde,0x81,0x1c,0x22,0xbf,0xd8,0x9f,0x08,0x81,0x30,0x44,0x76, + 0xd3,0x1a,0x38,0xe5,0x5f,0xc1,0x3e,0x63,0x9b,0x17,0xbe,0xbc,0xcf,0xcb,0x00,0x0b, + 0x58,0xce,0xa9,0x47,0xff,0xbb,0x9d,0x17,0xf6,0x40,0x34,0x9a,0xd7,0x65,0xc1,0x5f, + 0xa9,0x86,0xb2,0x3e,0x17,0xe0,0x69,0x61,0x7f,0x80,0x18,0xb7,0x01,0x16,0x93,0xd2, + 0x1d,0x97,0x0b,0x5f,0x23,0xf7,0xe5,0x74,0x8c,0xd7,0x14,0xb0,0x02,0xc7,0x67,0x7e, + 0xc5,0xd0,0xb2,0x3c,0xcd,0x32,0xba,0x1d,0xbe,0xb9,0x3f,0x43,0xa7,0x4c,0xde,0xb5, + 0x22,0xf4,0x81,0xe9,0x5e,0xc3,0x9d,0x9b,0x03,0xd8,0x57,0x36,0x79,0x5e,0xcc,0xe7, + 0xc0,0x66,0x5a,0x9b,0x6c,0x26,0xf8,0x8b,0x00,0x98,0x36,0x42,0xfb,0xbb,0x6b,0xd7, + 0x2e,0x78,0xf2,0x79,0x03,0x5e,0x9b,0x85,0x29,0x6e,0xaf,0xd5,0x4b,0xff,0xbe,0xca, + 0x10,0x3b,0x6e,0xd0,0x8e,0xe0,0x6f,0x4f,0xe8,0x97,0xf1,0xe5,0xc9,0xd2,0xdd,0xea, + 0x24,0x10,0x30,0xd5,0xd4,0xb8,0x35,0x29,0x78,0xe8,0x3a,0xf2,0x9e,0x44,0x29,0x72, + 0x09,0x5e,0x9e,0xd2,0xbd,0x11,0xb8,0x6c,0xf8,0xf7,0xfe,0xfe,0xd3,0x67,0xd7,0x9f, + 0x42,0x8c,0xc8,0xaa,0x4e,0x32,0x52,0x01,0x25,0xc8,0xfa,0x6f,0x5c,0x6f,0x2b,0xf8, + 0xc3,0xd5,0x04,0xbe,0xca,0x45,0xa6,0xd2,0x75,0xa6,0xa4,0xbd,0xca,0xb0,0x9a,0xfc, + 0x91,0x36,0x9e,0x75,0x93,0x58,0x5e,0x63,0xd5,0x38,0x48,0x7d,0xfc,0xe3,0xa1,0x7e, + 0x08,0x12,0x1f,0xff,0x6c,0xb4,0x4f,0xa2,0xf2,0xb6,0xee,0xba,0x5c,0xd4,0x8e,0xac, + 0x06,0xc0,0x54,0x60,0x58,0xb9,0xc6,0x0d,0x9b,0x71,0x99,0xc1,0xf5,0xe4,0x7a,0x57, + 0xb9,0xc6,0xaa,0xf4,0xbd,0x05,0xc8,0xa2,0xbc,0xb6,0xdf,0xe5,0xa8,0xc8,0x24,0x50, + 0xe8,0x28,0xe7,0x4d,0x6f,0x3d,0x8e,0xaa,0xcf,0x3a,0x5d,0xa6,0x75,0xdc,0xe4,0x7a, + 0x72,0xec,0x4c,0x40,0x47,0x8d,0xc0,0x23,0x50,0xc5,0x83,0x40,0x7f,0x12,0x68,0xe5, + 0xa5,0x19,0x82,0xc1,0xbc,0x40,0x62,0xab,0xaf,0xae,0xde,0x28,0x05,0x7b,0x22,0xf5, + 0x8f,0xbc,0x01,0xaa,0xbb,0x62,0x3a,0x05,0x05,0xf7,0x6e,0x3a,0x05,0xd5,0xd4,0x8e, + 0x62,0x29,0x51,0x0e,0x93,0x5f,0xae,0xca,0xe5,0x7b,0x4a,0xe5,0xb0,0xb2,0x99,0xa9, + 0xbb,0x41,0x7c,0xed,0x96,0xa1,0x3b,0xa8,0x12,0xfc,0xda,0xc3,0xa3,0xd4,0x40,0xb5, + 0x33,0x35,0xe0,0xa9,0x3c,0x0a,0x75,0x6b,0x63,0x9a,0x20,0x5d,0xcc,0xc7,0x28,0xd9, + 0xaa,0x44,0x70,0x1b,0xb6,0x95,0x03,0xfc,0xe4,0xcf,0xe3,0xf2,0x5b,0x7c,0xa3,0x13, + 0x4e,0xe8,0x4e,0x99,0x11,0x36,0x8e,0x4d,0xe2,0xee,0x98,0xf4,0x24,0x69,0xd7,0xad, + 0x50,0x58,0x28,0x13,0x8d,0x7c,0x5d,0xec,0xd5,0x67,0xb2,0xb2,0x0f,0x8c,0xf0,0x3b, + 0x91,0xb2,0x36,0xcd,0xe3,0xbd,0xb3,0xa4,0x9b,0x02,0x33,0x7f,0x8b,0x84,0x5f,0xc1, + 0x5d,0xae,0xa2,0xe1,0xc3,0x87,0xd7,0x0f,0x82,0xe6,0xdb,0xc5,0xa3,0xeb,0xf3,0xf6, + 0xdb,0xa3,0xc7,0xd7,0x67,0x81,0x4a,0x1e,0x15,0x32,0x4b,0x11,0x89,0x46,0x22,0xd4, + 0xf5,0x4d,0xcd,0x54,0x28,0x33,0x3e,0xf6,0xc9,0x5f,0xd2,0x07,0xea,0xc1,0xbd,0x01, + 0x7c,0x1b,0xa0,0x77,0xc6,0xe9,0x15,0x02,0x61,0x1f,0xff,0x06,0x0e,0x1a,0x18,0x30, + 0xcc,0x4d,0xf0,0xf9,0x4c,0x35,0x75,0x51,0x7f,0x42,0x34,0x10,0x7c,0x96,0xc7,0xc8, + 0xe0,0xbf,0xb5,0xce,0x17,0x44,0x67,0x0f,0x60,0x47,0x0e,0x9b,0xf2,0x3d,0x7f,0x54, + 0xf8,0xad,0x21,0xa3,0x7c,0x9f,0x0c,0x89,0x3b,0x19,0x44,0x23,0x72,0x1e,0xef,0xf2, + 0xb0,0x7a,0x85,0x17,0xbd,0x60,0x92,0xde,0xa2,0x8a,0x94,0x79,0x99,0xb0,0x2d,0xc6, + 0xd0,0x8b,0xab,0x8e,0x0e,0xa9,0x21,0x12,0x37,0x91,0x37,0xa6,0x99,0x8a,0x81,0x76, + 0x84,0xd8,0x2d,0xdf,0xc9,0xfe,0xd4,0x36,0xa5,0x76,0x48,0xec,0x25,0x03,0x5f,0x35, + 0x07,0x9b,0x43,0xdb,0x09,0xc6,0xf3,0xcb,0x47,0x94,0x51,0xc5,0xd4,0x9e,0xce,0x62, + 0xf5,0x2e,0xe1,0x4a,0xe8,0x0f,0xcc,0x3a,0x2c,0xa8,0x24,0x96,0x79,0x77,0x54,0x15, + 0xd0,0x09,0x2b,0x08,0xdf,0xee,0x5c,0xfd,0x25,0xba,0x33,0xa6,0xcb,0xdd,0xd7,0x2d, + 0x18,0x26,0x4e,0xdb,0x3b,0x12,0x95,0xdf,0x70,0x51,0x63,0x22,0xa6,0xc6,0x9f,0xc7, + 0x70,0x6c,0x70,0x2b,0x6c,0xf7,0xda,0x46,0xb5,0x6f,0x4d,0x19,0x78,0x75,0xa0,0x05, + 0xe8,0x0b,0xbe,0x59,0x60,0x1f,0x37,0x72,0xaa,0x6e,0xb3,0x39,0x68,0x0f,0xd9,0x43, + 0x9e,0xfe,0x59,0x75,0x31,0x9b,0x65,0x4c,0x9d,0x14,0x4a,0x50,0x37,0xb2,0x86,0x41, + 0x3b,0x53,0x37,0x5a,0xd7,0x03,0x93,0x6d,0x09,0x20,0xa4,0xe8,0xef,0x20,0x77,0x51, + 0xb4,0xd1,0xfa,0xed,0x0c,0xbb,0x22,0x30,0x07,0x0f,0x5c,0x5f,0xe0,0x46,0xce,0x00, + 0x93,0xde,0xf0,0xdf,0x80,0x9c,0xf6,0xc1,0x52,0x7d,0xf3,0xac,0xb3,0xd3,0xb3,0x8b, + 0xe1,0xe9,0x93,0xe1,0xd9,0x99,0x8b,0x5d,0x64,0xb2,0x13,0xc5,0xc2,0x1f,0xd1,0x11, + 0xca,0xbf,0xc7,0x54,0xa5,0x99,0x9e,0x87,0x73,0x95,0xa2,0x40,0xeb,0x21,0xee,0xef, + 0xb1,0xb4,0x80,0x05,0x46,0xf8,0xd4,0x60,0x83,0x7e,0x48,0xe5,0x1d,0xfe,0xfc,0xcb, + 0xd5,0x70,0xd4,0xd4,0x49,0x88,0xbd,0x61,0x57,0x07,0x15,0x0c,0x8f,0x4e,0xbd,0x0c, + 0x18,0xb4,0x2e,0xde,0x60,0xaf,0xfb,0x73,0xb8,0x21,0x50,0x99,0x5f,0xf6,0x51,0x1a, + 0xf2,0xe3,0x63,0x57,0x27,0x2f,0x9b,0x87,0x9f,0xf8,0xe7,0xee,0x4a,0x00,0x22,0xd3, + 0x07,0x99,0xb3,0xcc,0x0a,0x8c,0xdd,0x61,0x22,0x64,0x2b,0xbc,0xa8,0x51,0x09,0xa0, + 0xcb,0xf5,0xd8,0xcf,0x07,0x63,0x3c,0x77,0x5c,0xcd,0xec,0xd8,0x85,0xdb,0xcf,0x05, + 0x85,0x72,0xdc,0x10,0x80,0x3c,0xd4,0xa5,0xd6,0x1c,0x1c,0x4c,0xf8,0x7b,0x3d,0x02, + 0x9f,0xac,0x05,0x25,0xef,0xb2,0x33,0xa0,0x58,0x15,0x3c,0x96,0x91,0x5a,0xd8,0x93, + 0x59,0xaa,0x96,0x61,0x32,0xcb,0xa5,0x9c,0xab,0xb5,0x2d,0xc3,0x07,0x12,0x08,0xf0, + 0xdd,0xf6,0xf3,0x9e,0xa9,0x1a,0x76,0xde,0x25,0x94,0xa0,0x00,0xff,0xc9,0xc7,0x98, + 0x22,0xda,0xbd,0x1d,0x95,0x94,0x77,0xa3,0xaa,0xb3,0x89,0x7a,0x5e,0xe4,0xd4,0xb1, + 0x65,0xee,0xd0,0xb9,0xa0,0x9c,0xac,0xae,0xa4,0x27,0xd3,0x33,0xa3,0xfc,0x5c,0x2e, + 0x9d,0x22,0x27,0x72,0xb5,0x73,0x49,0xb1,0x17,0xf9,0xb5,0x4d,0x8e,0x6a,0x60,0x37, + 0x71,0x91,0xa2,0x57,0xb9,0xec,0x97,0x61,0x70,0x32,0xd0,0x89,0x29,0x49,0xb6,0xc3, + 0x66,0x96,0x60,0xf5,0xd3,0x1a,0xee,0x00,0x66,0x02,0x05,0xd2,0x68,0xd5,0xb5,0xbd, + 0x42,0x26,0xde,0x9a,0xb9,0x3b,0x50,0x02,0xe0,0xf5,0xe0,0x02,0x1f,0xa3,0x81,0x87, + 0x84,0xba,0xb9,0x0a,0x91,0x52,0x33,0x1e,0xa5,0x7a,0x77,0xe3,0x12,0x7f,0x57,0x2b, + 0xea,0xd7,0xb5,0xbc,0x52,0x3b,0x6f,0x94,0x35,0xd2,0x5c,0x8f,0x21,0x2f,0xbd,0x9d, + 0x65,0x74,0x2d,0x61,0x24,0xa7,0x22,0x5c,0xad,0x5e,0x11,0xef,0x23,0x97,0x18,0xa2, + 0xe1,0x17,0xc5,0x44,0xaa,0xde,0xab,0x72,0x5c,0x70,0xe6,0xd1,0xd1,0xa1,0x51,0x80, + 0x03,0xab,0x34,0x77,0x6c,0x9d,0xe8,0x28,0xac,0x01,0x28,0x40,0x72,0xed,0x06,0x58, + 0x12,0xb9,0xfe,0xd7,0xfc,0x5f,0xf3,0x8f,0x4d,0xbe,0x69,0x89,0x15,0x24,0x4c,0x3a, + 0x61,0x2b,0x46,0x59,0xe4,0x89,0xcc,0x4f,0x19,0x4d,0xda,0xcd,0x7f,0x36,0x9f,0xaa, + 0x50,0xb2,0xd3,0xc3,0x9a,0xf0,0x29,0xbd,0x60,0x52,0xb7,0x91,0x34,0x2a,0x3a,0x6c, + 0x8f,0x47,0x9d,0x58,0x40,0x50,0xeb,0x1a,0xf9,0xb4,0x32,0xa2,0xf6,0x1c,0xa3,0xb8, + 0xed,0x11,0x46,0x23,0x88,0xa5,0xf3,0x89,0xa3,0x12,0x6c,0x47,0x48,0x10,0x35,0xd4, + 0xef,0x4a,0x38,0xc6,0x2b,0x5f,0xdb,0x47,0x2a,0xad,0x1e,0x8d,0x28,0xad,0x44,0x78, + 0x7b,0xff,0xca,0xc7,0x1f,0x9a,0x53,0xe5,0xa7,0x71,0x8d,0x5e,0x4b,0xb9,0xa3,0x68, + 0xae,0x15,0xd5,0x61,0x82,0xbf,0xb9,0x65,0x50,0x26,0xc1,0xd7,0xdd,0x8b,0xaa,0x6d, + 0x64,0x31,0x88,0x22,0xad,0x68,0x4f,0x38,0x4d,0xc8,0xd0,0x6b,0xdb,0x5d,0xdc,0x0c, + 0x55,0x6b,0x47,0x08,0xcc,0x47,0x03,0xad,0xca,0x90,0x65,0x10,0x64,0x0a,0x59,0x27, + 0xc1,0x8a,0x34,0x21,0xa1,0x29,0x05,0xc1,0x77,0xa2,0x25,0x50,0xc6,0x35,0x72,0xb6, + 0xfa,0xb7,0xfb,0x74,0x4a,0x15,0x17,0x05,0x89,0x4a,0x97,0x97,0x98,0x36,0x5d,0xa6, + 0x2b,0xfc,0x13,0xcf,0x8a,0xe0,0x54,0xa7,0x4a,0x28,0x5b,0x4a,0xbf,0xe7,0x46,0xce, + 0x81,0x67,0x08,0x06,0x02,0x41,0x6c,0x44,0xe5,0x6a,0xaa,0x6d,0x92,0x1b,0xdd,0x9a, + 0xac,0x79,0xbc,0xb2,0xc6,0xb2,0x41,0x5a,0xb6,0x19,0x07,0x16,0xfd,0x06,0x9c,0x99, + 0x28,0x0c,0x7a,0x98,0xdb,0x68,0x81,0x9c,0x92,0x38,0x4a,0xd3,0x15,0x99,0x2d,0x06, + 0xcc,0x07,0xf1,0xbd,0x03,0x06,0x7a,0xc1,0xa6,0xf1,0x22,0xab,0x01,0x34,0x92,0xbb, + 0x8e,0x24,0x62,0x7d,0x81,0xae,0x36,0x6e,0x8c,0x5a,0xc3,0xea,0xaf,0x64,0xe1,0xae, + 0xe5,0x73,0xe2,0xf1,0xd7,0x53,0xb3,0xa9,0x9b,0xab,0x4a,0x28,0xe6,0x2c,0x34,0xef, + 0xea,0x8e,0xbe,0x2d,0x76,0xb7,0x9b,0x8a,0x8d,0xce,0xb4,0x13,0xdb,0x7f,0x95,0x6d, + 0xd5,0x5d,0x7e,0xd6,0x2c,0x37,0xf6,0xfa,0x5d,0x1b,0xd7,0x7d,0xb6,0x6e,0x9b,0xcf, + 0x5e,0xbc,0x7c,0xf3,0xf2,0xe3,0x4b,0xbb,0x6d,0x1a,0xdb,0xc7,0xa3,0x2a,0x47,0x86, + 0x6c,0x7a,0x6d,0x63,0x11,0xa7,0xa8,0x2d,0x79,0xcd,0x60,0x9b,0x55,0xe5,0xac,0xe2, + 0x16,0x68,0xa0,0x73,0x65,0xea,0x9d,0x38,0x14,0x8f,0x6f,0x50,0x5e,0x67,0xe2,0x3a, + 0x94,0xeb,0x2e,0xdf,0xf4,0x23,0x6c,0x60,0x56,0x7c,0x61,0xae,0x55,0x8f,0xbc,0xad, + 0x4e,0x36,0xb5,0xf9,0x6e,0x8d,0x52,0xff,0x76,0x63,0x57,0xfe,0x4f,0x68,0xaa,0x67, + 0xeb,0x1a,0x98,0x7d,0xcc,0x7f,0x57,0x62,0xcd,0x5f,0xc9,0xdb,0xc2,0x83,0x8e,0x26, + 0x76,0xd7,0x3b,0x75,0xb3,0x0c,0xd7,0xce,0x31,0x31,0xa7,0x02,0x17,0xcc,0x05,0x85, + 0x7e,0xa6,0xbd,0x68,0xf7,0xc1,0xc6,0xb1,0xae,0x25,0xd4,0x2f,0xdc,0xed,0x4d,0xa4, + 0x6a,0xee,0x40,0xc6,0xf3,0x5a,0x9c,0xf5,0x2f,0xc8,0xe1,0x18,0xa2,0x40,0xf3,0xba, + 0x82,0xd5,0xd4,0x26,0x55,0xfd,0x14,0x25,0xb1,0x6a,0xde,0x8b,0xc3,0xde,0xc4,0x95, + 0x6d,0x12,0x55,0xe5,0x58,0x4d,0xc1,0xa2,0x2d,0x65,0xff,0x9e,0x29,0x8c,0xa1,0x6e, + 0xbc,0x81,0xab,0x26,0x19,0x95,0xb6,0x28,0x52,0x36,0x8b,0x01,0xaa,0xa5,0x4b,0xb0, + 0xea,0x4e,0x16,0xc1,0x56,0xb2,0x53,0x01,0xbd,0x9a,0xa6,0xd7,0x00,0x25,0x02,0xf7, + 0x52,0x0d,0x3c,0x5c,0x34,0xe6,0x01,0xc1,0xf4,0xad,0x1f,0x59,0x96,0x04,0x4d,0x93, + 0xc3,0x6f,0x0b,0xb6,0x60,0x8d,0xbb,0x2a,0x9b,0x50,0x30,0x3b,0xa9,0xb2,0x88,0x35, + 0xf5,0x0e,0x23,0x52,0xe5,0x2d,0xf7,0xa2,0xb4,0x23,0xfa,0xed,0x7b,0x8e,0x66,0xaf, + 0xb0,0xc6,0x53,0x73,0x1d,0x32,0x18,0xa6,0xd4,0xca,0xbe,0xbf,0x1c,0x7b,0xec,0xca, + 0xa8,0xa5,0xcb,0x36,0x59,0x54,0x95,0x1a,0x66,0x8e,0x42,0x49,0x22,0xb9,0x39,0xde, + 0x08,0x49,0xb2,0x83,0x60,0xff,0xfd,0x6f,0xff,0x01,0xec,0xcc,0xf3,0x69,0xa1,0x59, + 0x71,0x4f,0x5b,0xd7,0x89,0xba,0x69,0xaf,0x29,0x15,0xb4,0x82,0xcc,0xa3,0x19,0xf7, + 0x56,0xdd,0x5b,0x5b,0xfd,0x5b,0x4d,0x92,0x01,0x18,0xad,0xf3,0x9b,0x9a,0x8e,0x4a, + 0x8e,0x6f,0x3a,0x76,0x91,0xd8,0x10,0xbe,0x60,0xa2,0xdd,0x29,0xdd,0xed,0x5c,0x3e, + 0x56,0x6f,0xf0,0xa3,0x5f,0xb1,0xac,0x88,0x51,0x09,0x77,0xba,0xc1,0xa4,0x60,0x21, + 0x1a,0x04,0xd5,0xba,0x5b,0x0c,0x27,0x5c,0x66,0xc7,0xe9,0xdd,0x0f,0x7c,0x75,0xde, + 0xa2,0xc4,0x33,0xc6,0x37,0x2a,0x97,0x8f,0xd8,0xa2,0x57,0x66,0x54,0xd7,0x76,0x53, + 0x59,0x6d,0xeb,0x1f,0x8a,0x86,0xde,0x76,0x99,0x0a,0x75,0x35,0xd5,0x39,0xba,0x55, + 0xa9,0xa0,0xc3,0xdd,0x8d,0x44,0x83,0xe1,0x30,0x52,0x64,0xad,0x54,0x1b,0xf9,0xb1, + 0x5d,0xae,0xae,0x6e,0xc9,0xdc,0x96,0xf3,0x54,0xec,0xb5,0x5e,0x70,0xe6,0x0e,0x03, + 0xa6,0x58,0x6c,0x1e,0x99,0x70,0x48,0x65,0x58,0xde,0x75,0xe0,0x90,0x83,0x45,0xa4, + 0x53,0x81,0x52,0x8c,0xb1,0xed,0x52,0xa5,0xa1,0xba,0xe2,0xa9,0x3b,0x15,0x8d,0x9e, + 0x4b,0x69,0xa9,0x65,0xcd,0x58,0xf7,0x40,0xa6,0x6e,0x60,0xc5,0x7a,0x27,0xd5,0xf1, + 0x9f,0x37,0xef,0x05,0xf9,0xf4,0xea,0x04,0xf8,0x7e,0x75,0x0a,0xb2,0x28,0x5b,0xdd, + 0xb0,0x23,0x48,0xbe,0x82,0x44,0xd8,0x4e,0x8a,0x65,0xee,0xcb,0xd6,0x34,0x58,0xa1, + 0xfb,0xbb,0x9c,0xc3,0xe2,0xfe,0x7e,0x7e,0x88,0x3f,0xa3,0x8a,0x77,0xba,0xbf,0x2f, + 0xef,0xe8,0x0b,0xa5,0x1a,0x25,0xe4,0x48,0xfb,0x68,0x4e,0x79,0x3b,0x7a,0x19,0xc5, + 0x86,0x05,0x4d,0x16,0xcf,0xec,0x10,0x6b,0xdc,0xe3,0xf2,0x4e,0x27,0x19,0x1e,0xe3, + 0x86,0xba,0x14,0x7f,0x71,0x6e,0x38,0x66,0x3f,0x42,0x90,0xdf,0x29,0x9d,0x00,0x63, + 0x3d,0x46,0x45,0x78,0x71,0x4e,0xbf,0xad,0x1c,0xc3,0x8e,0x95,0xe8,0xb9,0xd0,0x08, + 0xb9,0xe1,0x12,0xcf,0xdb,0x14,0xe3,0x47,0xdc,0xd6,0x44,0x27,0x0c,0x1b,0x8e,0xb1, + 0x7e,0x1d,0x80,0x50,0x16,0xec,0xaf,0xce,0xfa,0x46,0x3e,0x54,0x5f,0x8b,0xfa,0x64, + 0xac,0x8f,0x3b,0x93,0x93,0xa4,0x39,0xb5,0x3e,0x24,0xcf,0xbb,0x62,0x31,0xb9,0x4f, + 0xe0,0x53,0x04,0x0d,0xfa,0xae,0xed,0x0f,0x92,0xe4,0x26,0x88,0x7d,0xf0,0xe4,0xfb, + 0x10,0x00,0x37,0xae,0xb6,0x3e,0x30,0x2a,0x4b,0x81,0x0b,0x24,0x53,0xd0,0x8d,0x48, + 0x0d,0x24,0x95,0x3b,0xb8,0x83,0x59,0xe5,0x1d,0xb8,0x49,0xaa,0xe2,0xd9,0x8a,0x2c, + 0xa9,0x60,0x55,0x15,0x22,0xd5,0x7a,0x6d,0x5c,0x44,0xe2,0xa3,0xbd,0x07,0xfe,0x8c, + 0xd3,0x42,0x95,0x89,0x34,0x1a,0x67,0x05,0x70,0x0f,0xb2,0x0e,0x6a,0xdc,0xa0,0x15, + 0x63,0xdd,0xd8,0x20,0x95,0xfc,0xfe,0x78,0x40,0x77,0xa9,0x79,0x36,0x25,0x7f,0xa5, + 0xef,0x34,0xef,0xc5,0x03,0xe5,0xdd,0x96,0xb3,0x2f,0x5f,0xc7,0xf9,0x83,0xce,0x3e, + 0xf5,0xa2,0x7e,0xcb,0xdd,0xef,0xb6,0x68,0xf7,0x1d,0x76,0x64,0x49,0xd9,0xc9,0x76, + 0xec,0x34,0xc5,0x85,0x5e,0x2a,0x9b,0x94,0x9e,0xc1,0x63,0x2a,0x52,0x69,0xca,0x13, + 0x5b,0x9e,0x18,0x81,0x09,0x94,0x75,0xd5,0x01,0xdb,0xbe,0xb4,0xba,0x0a,0xce,0x69, + 0x91,0xb8,0x17,0x52,0xb9,0x8d,0x64,0x2a,0xa5,0x47,0x74,0xa3,0xa8,0x06,0x4b,0x3a, + 0x16,0xaa,0xaa,0xa9,0xb8,0xc7,0xde,0xc1,0x35,0xc8,0x34,0x81,0x6d,0xae,0x04,0x8e, + 0x98,0x15,0xb8,0x1d,0x52,0xbc,0x63,0xf2,0x30,0x2b,0xd6,0x57,0x52,0x60,0xff,0xb1, + 0x39,0x12,0x03,0x45,0xec,0x20,0x78,0x60,0x09,0x57,0xb6,0x4e,0x62,0xd1,0xb7,0x6d, + 0x4f,0xa4,0xe6,0x18,0x55,0x9a,0xe5,0x42,0xee,0xa5,0xfc,0x03,0x72,0x2d,0xb0,0xfd, + 0x44,0xc8,0x4e,0x4b,0xd5,0xc0,0x88,0xb7,0x73,0x65,0xdb,0x8b,0x53,0x7a,0x0f,0xb0, + 0xfd,0xe3,0x1b,0x4c,0xe0,0x50,0x73,0x5e,0x81,0xa5,0x00,0x19,0x89,0xb9,0xad,0x05, + 0x25,0xb3,0xb8,0x65,0x49,0xd7,0xea,0x17,0x9e,0x83,0xd1,0x63,0xd8,0x1b,0x22,0xa9, + 0x6d,0xb3,0xa9,0x5b,0x99,0x24,0xd1,0x48,0x96,0x7a,0x7d,0x97,0x7d,0xff,0xbb,0x69, + 0x5d,0xda,0x69,0xec,0xc9,0x86,0xb5,0xbe,0xb6,0xbe,0xdb,0xbc,0x2d,0x2a,0xec,0xfe, + 0x5d,0x6c,0x77,0xad,0x7e,0x2b,0x7d,0x65,0x32,0xd5,0xca,0xe9,0xfd,0xba,0xf5,0x0a, + 0x77,0xc2,0xf7,0x6f,0xda,0x5f,0x97,0x3f,0x91,0x3f,0x1a,0x72,0x22,0x7f,0xcb,0xfe, + 0x7f,0x00,0xca,0xe6,0xde,0x64,0xdc,0x5e,0x00,0x00, }; constexpr size_t WIFI_INDEX_HTML_GZ_LEN = sizeof(WIFI_INDEX_HTML_GZ); // diff --git a/firmware/toolchain/build_audio_in_page.py b/firmware/toolchain/build_audio_in_page.py index 39b94ac3..dce59f60 100644 --- a/firmware/toolchain/build_audio_in_page.py +++ b/firmware/toolchain/build_audio_in_page.py @@ -11,7 +11,8 @@ - reads editor.html, editor.css and editor.js from the extension, - swaps the cream instrument tokens for the console's dark ones (editor.js - reads its canvas colors from CSS variables, so the theme travels free), + reads its canvas colors from CSS variables, so the theme travels free) + and adds the phone layout the extension's wide tab never needed, - injects a device bar (microphone switch, input gain, reset) above the editor - the two controls that exist only on this side, - replaces the chrome adapter with a fetch('/api/audio-in') adapter that @@ -62,6 +63,7 @@ 8.0 + Extension ↗ @@ -128,12 +130,24 @@ } var frameFn = null; - var polling = false; var micOn = false; var phoneLive = false; var audOn = false; - function poll() { + // The levels loop keeps its own chained 100 ms timer instead of PF.poll: + // ten frames a second is this page's whole job, and the chrome's lane + // would queue it behind every status poll. It starts once the config read + // has settled (a frame before that paints on an unsized plot and races the + // read for the panel's one connection), sleeps while the tab is hidden and + // stops on pagehide. + var ready = false, gone = false, busy = false, timer = 0; + + function tick() { + clearTimeout(timer); + timer = 0; + if (!ready || !frameFn || gone || busy || document.hidden) return; + busy = true; + var wait = 100; fetch('/api/audio-in?levels=1').then(function (r) { return r.json(); }).then(function (j) { // ext frames come from the phone app, already on the editor's own // normalized scale - converting them again would wreck them. The @@ -153,21 +167,46 @@ spectrum: (j.spectrum || []).map(conv), autoRange: true }); - }).catch(function () { + }).catch(function (e) { + // AbortError is the chrome freeing the connection for a link just + // clicked (or pagehide); asking again in 100 ms would take it back + // from the next page. Still here in 3 s: the navigation was cancelled. + if (e && e.name === 'AbortError') { wait = 3000; return; } + // Unreachable: ask once a second, not ten times (the chrome shows it). + wait = 1000; if (frameFn) frameFn({ running: false, connected: false, levels: [], env: [], spectrum: [] }); - }).finally(function () { + }).then(function () { // Chained, never setInterval: the device serves one connection at a // time, and a timer would stack requests behind a slow one. - if (polling) setTimeout(poll, 100); + busy = false; + if (!gone && !timer) timer = setTimeout(tick, wait); }); } + function start() { if (!ready) { ready = true; tick(); } } + document.addEventListener('visibilitychange', function () { if (!timer) tick(); }); + window.addEventListener('pagehide', function () { gone = true; clearTimeout(timer); timer = 0; }); + window.addEventListener('pageshow', function () { if (gone) { gone = false; tick(); } }); + // Every edit autosaves; PF.dirty covers the gap until the panel has it, + // so the chrome's version reload never drops one. A failure is said next + // to the device bar (the editor itself has no slot for it). + var saving = 0, gainTimer = null; + function say(text, kind) { PF.say(text, kind, document.getElementById('barMsg')); } function post(body) { + saving++; + PF.dirty = true; return fetch('/api/audio-in', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: body - }).catch(function () {}); + }).then(function (r) { + if (!r.ok) throw Error('HTTP ' + r.status); + if (document.getElementById('barMsg').textContent) say('saved', 'ok'); + }).catch(function () { + say('not saved: the panel did not take it. Change it again to retry.', 'err'); + }).then(function () { + if (!--saving && !gainTimer) PF.dirty = false; + }); } window.PFAdapter = { @@ -176,8 +215,9 @@ captureHint: 'Turn the microphone on to hear the room.', loadConfig: function () { // Never reject: a failed read hands the editor its defaults and the - // page still stands - the poll loop keeps trying, and the next save - // writes the truth back. + // page still stands - the levels loop keeps trying, and the next save + // writes the truth back. One request at a time: the config, then the + // AUD switch, then the loop. return fetch('/api/audio-in').then(function (r) { return r.json(); }).then(function (j) { micOn = !!j.micOn; var gainEl = document.getElementById('micGain'); @@ -186,7 +226,7 @@ fetch('/api/audio').then(function (r) { return r.json(); }).then(function (a) { audOn = !!a.audioRuntime; syncBar(); - }).catch(function () {}); + }).catch(function () {}).then(start); syncBar(); return { host: 'this device', @@ -203,7 +243,7 @@ }; }) }; - }).catch(function () { return null; }); + }).catch(function () { start(); return null; }); }, saveConfig: function (cfg) { var parts = ['auto=' + (cfg.autoRange ? 1 : 0), @@ -230,7 +270,7 @@ }, onFrame: function (fn) { frameFn = fn; - if (!polling) { polling = true; poll(); } + tick(); }, requestStatus: function () {}, stop: function () { post('mic=0'); } @@ -254,13 +294,17 @@ var audBtn = document.getElementById('audToggle'); if (audBtn) { audBtn.addEventListener('click', function () { - audOn = !audOn; + var want = audOn = !audOn; syncBar(); fetch('/api/audio', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, - body: 'on=' + (audOn ? 1 : 0) - }).catch(function () {}); + body: 'on=' + (want ? 1 : 0) + }).then(function (r) { if (!r.ok) throw Error('HTTP ' + r.status); }).catch(function () { + // Nothing re-reads this switch, so a lost request would leave it lying. + if (audOn === want) { audOn = !want; syncBar(); } + say('AUD did not switch: the panel did not take it.', 'err'); + }); }); } document.getElementById('micToggle').addEventListener('click', function () { @@ -268,16 +312,19 @@ syncBar(); post('mic=' + (micOn ? 1 : 0)); }); - var gainTimer = null; document.getElementById('micGain').addEventListener('input', function () { var v = Number(document.getElementById('micGain').value); document.getElementById('micGainVal').textContent = v.toFixed(1); + PF.dirty = true; clearTimeout(gainTimer); - gainTimer = setTimeout(function () { post('micGain=' + v); }, 150); + gainTimer = setTimeout(function () { gainTimer = null; post('micGain=' + v); }, 150); }); document.getElementById('resetAll').addEventListener('click', function () { if (!confirm('Reset every band, curve and the input gain to defaults?')) return; - fetch('/api/audio-in/reset', { method: 'POST' }).then(function () { location.reload(); }); + PF.busy(this, fetch('/api/audio-in/reset', { method: 'POST' }).then(function (r) { + if (!r.ok) throw Error('HTTP ' + r.status); + location.reload(); + })).catch(function () { say('Reset failed: the panel did not take it.', 'err'); }); }); syncBar(); }); @@ -307,14 +354,62 @@ --cream-2: #E8E2D6; --field: #FFFCFA; } -/* device host chip is meaningless when the page IS the device */ -#hostChip { display: none; } +/* device host chip is meaningless when the page IS the device; the source + chip and Stop repeat what the device bar's Microphone switch and note say */ +#hostChip, #sourceChip, #stopBtn { display: none; } .deviceBar { display: flex; align-items: center; gap: 14px; background: var(--field); border: 1px solid var(--rule); border-radius: 2px; padding: 10px 14px; } .toggleWrap.on .toggle { background: var(--ok); } +.barMsg { font: 11px var(--mono); } +#deviceNote:empty, .barMsg:empty { display: none; } +.pf-ok { color: var(--ok); } +.pf-err { color: var(--bad); } +/* The chrome says when the panel is unreachable; the page only dims what it + can no longer vouch for, and drops the "turn the microphone on" hint an + unanswered poll would otherwise show. */ +html.pf-offline .plotWrap, html.pf-offline .deviceBar { opacity: 0.5; } +html.pf-offline #captureHint { visibility: hidden; } +/* Rows wrap before they overflow (the editor was laid out for a wide tab). */ +.deviceBar, .toolbar, .pvChips, .outPresets, header { flex-wrap: wrap; } +#pvScope { max-width: 100%; height: auto !important; } +/* The highest band's tag hangs past a narrow plot's right edge: clip it + there rather than widen the page. */ +.plotWrap { overflow: hidden; } +@media (max-width: 1000px) { + .panel { flex-wrap: wrap; } + .vr { display: none; } + .col.grow { flex-basis: 100%; } +} +/* Phones: one column. The bordered boxes run edge to edge, which is what + lets the response curve fit a 360 px screen: it is a fixed 356 px canvas + whose pointer maths assume that size, so it may not be scaled down. */ +@media (max-width: 700px) { + .page { padding: 12px 12px 24px; gap: 12px; } + .deviceBar, .plotWrap, .panel { + margin: 0 -12px; border-left: 0; border-right: 0; border-radius: 0; + } + .deviceBar { padding: 12px; gap: 10px 12px; } + .toolbar { gap: 10px 12px; } + .deviceBar .damping, .toolbar .damping, #deviceNote, .barMsg, #autoHint { flex-basis: 100%; } + .damping input { flex: 1; width: auto; min-width: 0; } + .toolbar .spacer, #autoHint:empty { display: none; } + .panel { flex-direction: column; gap: 18px; padding: 14px 12px; } + .presetsCol { width: auto; } + #curve { margin: 0 -12px; align-self: center; } + .chips { display: grid; grid-template-columns: 1fr 1fr; } +} +/* Touch: hit areas grow invisibly; the controls keep their size. */ +@media (pointer: coarse) { + .toggleWrap, .ghostBtn, .pvSig, .chipCard, .outPreset, .stepsRow button { position: relative; } + .toggleWrap::after, .ghostBtn::after, .pvSig::after, .chipCard::after, .outPreset::after, + .stepsRow button::after, .outTrack::after, .toggle.small::after { + content: ""; position: absolute; inset: -8px -2px; + } + .toggle.small::after { inset: -16px -11px; } +} ''' page = ( diff --git a/firmware/toolchain/check_boundaries.py b/firmware/toolchain/check_boundaries.py index 18ed6d9c..4b648f82 100644 --- a/firmware/toolchain/check_boundaries.py +++ b/firmware/toolchain/check_boundaries.py @@ -172,7 +172,8 @@ def core_page_texts() -> list[tuple[str, str]]: Which pages are the core's is console_pages.py's PAGES list: a header under src/ is core, under features/ is a feature's. theme_index.h is the - chrome every page loads, and it is core by construction. + chrome every page loads, and console/_pf_fallback.js is stamped into every + page's header by console_pages.py build: both are core by construction. """ sys.path.insert(0, str(Path(__file__).resolve().parent)) from console_pages import PAGES # noqa: E402 @@ -190,6 +191,10 @@ def core_page_texts() -> list[tuple[str, str]]: raw = theme.read_text(encoding="utf-8", errors="replace") bodies = "\n".join(m.group(0) for m in RAW_STRING.finditer(raw)) out.append(("src/theme_index.h (page text)", bodies)) + fallback = SKETCH / "console" / "_pf_fallback.js" + if fallback.exists(): + out.append(("console/_pf_fallback.js (stamped into every page)", + fallback.read_text(encoding="utf-8", errors="replace"))) cleaned: list[tuple[str, str]] = [] for label, text in out: for pattern in (HTML_COMMENT, BLOCK_COMMENT, LINE_COMMENT): diff --git a/firmware/toolchain/check_send.py b/firmware/toolchain/check_send.py index 74f6a458..e9b1067e 100644 --- a/firmware/toolchain/check_send.py +++ b/firmware/toolchain/check_send.py @@ -1,38 +1,83 @@ -"""Exercise the bounded HTTP sender under backpressure and disconnects. +"""Exercise the bounded HTTP sender under backpressure and disconnects, and +the cache policies it applies to console pages. python firmware/toolchain/check_send.py [--sanitize] Production code is compiled against deterministic hardware fixtures. + +Also fails when anything but src/core_http.h calls collectHeaders(): the +server keeps one list and each call replaces it, so a second caller silently +takes If-None-Match (and with it every 304) away from the pages. """ import argparse from pathlib import Path +import re import subprocess import tempfile from check_module_elf import ROOT, compiler_environment +SKETCH = ROOT / 'firmware/patternflow' +HEADER_LIST_OWNER = SKETCH / 'src/core_http.h' +# Build output and fetched libraries (all gitignored), and the vendored server, +# which defines collectHeaders() and calls it from close(). +NOT_SCANNED = [SKETCH / 'build', SKETCH / 'lib', SKETCH / 'pio_src', SKETCH / 'src/webserver'] +COMMENT = re.compile(r'//[^\n]*|/\*.*?\*/', re.DOTALL) +CALL = re.compile(r'\bcollectHeaders\s*\(') + + +def collect_headers_calls(): + """(file, count) for every source under the sketch that calls collectHeaders().""" + found = [] + for path in sorted(SKETCH.rglob('*')): + if path.suffix not in ('.h', '.hpp', '.c', '.cpp', '.ino') or not path.is_file(): + continue + if any(path.is_relative_to(skip) for skip in NOT_SCANNED): + continue + text = COMMENT.sub('', path.read_text(encoding='utf-8', errors='replace')) + count = len(CALL.findall(text)) + if count: + found.append((path, count)) + return found + + +def check_header_list(): + calls = collect_headers_calls() + strays = [f'{path.relative_to(ROOT).as_posix()} ({count})' + for path, count in calls if path != HEADER_LIST_OWNER or count != 1] + if strays or not calls: + raise SystemExit('collectHeaders() must be called exactly once, in ' + f'{HEADER_LIST_OWNER.relative_to(ROOT).as_posix()}; found: ' + + (', '.join(strays) or 'none')) + def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument('--sanitize', action='store_true') args = parser.parse_args() + check_header_list() compiler, env = compiler_environment() with tempfile.TemporaryDirectory(prefix='patternflow-send-') as directory: work = Path(directory) - (work / 'core_send.h').write_bytes((ROOT / 'firmware/patternflow/src/core_send.h').read_bytes()) + # Laid out like the sketch, so core_build.h's "../net_config.h" resolves. + src = work / 'src' + src.mkdir() + for name in ('core_send.h', 'core_build.h'): + (src / name).write_bytes((SKETCH / 'src' / name).read_bytes()) for name in ('Arduino.h', 'pgmspace.h', 'lwip/sockets.h', 'webserver/WebServer.h', - 'core_loop_sync.h', 'core_net_maintenance.h'): - (work / name).parent.mkdir(parents=True, exist_ok=True) - (work / name).write_text('// Hardware supplied by send_test.cpp\n') + 'core_loop_sync.h', 'core_net_maintenance.h', 'esp_ota_ops.h'): + (src / name).parent.mkdir(parents=True, exist_ok=True) + (src / name).write_text('// Hardware supplied by send_test.cpp\n') + (work / 'net_config.h').write_text('// PF_IMPROV_FW_VERSION supplied by send_test.cpp\n') source = ROOT / 'firmware/toolchain/tests/send_test.cpp' exe = work / ('send_test.exe' if Path(compiler).suffix.lower() == '.exe' else 'send_test') if Path(compiler).stem.lower() == 'cl': if args.sanitize: raise SystemExit('--sanitize requires GCC or Clang') command = [compiler, '/nologo', '/std:c++20', '/EHsc', '/O2', '/W4', '/WX', '/utf-8', - f'/I{work}', str(source), f'/Fe:{exe}'] + f'/I{src}', str(source), f'/Fe:{exe}'] else: command = [compiler, '-std=c++20', '-O2', '-Wall', '-Wextra', '-Werror', - f'-I{work}', str(source), '-o', str(exe)] + f'-I{src}', str(source), '-o', str(exe)] if args.sanitize: command += ['-fsanitize=address,undefined', '-fno-omit-frame-pointer'] subprocess.run(command, cwd=work, env=env, check=True) diff --git a/firmware/toolchain/check_sources.py b/firmware/toolchain/check_sources.py index bf4dde89..c6c67359 100644 --- a/firmware/toolchain/check_sources.py +++ b/firmware/toolchain/check_sources.py @@ -2,6 +2,7 @@ Fast pre-compile sanity check on the firmware sources. python firmware/toolchain/check_sources.py + python firmware/toolchain/check_sources.py --sketch DIR # another copy Three classes of bug, all of which have shipped from this repo and all of which cost far more to find on the device than here: @@ -17,8 +18,11 @@ 3. A syntax error in a page's embedded JavaScript. The device serves the page fine, the browser refuses to run any of it, and the console looks blank and - "broken" while every API underneath is healthy. Needs node on PATH; skipped - with a warning if absent. + "broken" while every API underneath is healthy. The same goes, once for + every page, for the shared chrome (the /pf-console.js literal in + theme_index.h) and the fallback PF stamped into each page + (console/_pf_fallback.js). Needs node on PATH; skipped with a warning if + absent. """ from __future__ import annotations @@ -45,6 +49,15 @@ CHAR_LITERAL = re.compile(r"'(?:\\.|[^'\\])'") +def shown(path: Path) -> str: + """The path as a report names it: repo-relative, unless --sketch put it + somewhere else.""" + try: + return str(path.relative_to(ROOT)) + except ValueError: + return str(path) + + def blank_out(text: str, pattern: re.Pattern[str]) -> str: """Replace matches with same-length blanks so line numbers stay true.""" return pattern.sub(lambda m: re.sub(r"[^\n]", " ", m.group(0)), text) @@ -140,6 +153,52 @@ def page_scripts(path: Path) -> list[str]: return re.findall(r"", text, re.DOTALL) +def console_scripts() -> tuple[list[tuple[str, str]], list[str]]: + """(label, source) for the JS every page runs besides its own, and any + problem reading it. Located through console_pages.py, which stamps them, + so this cannot check a different file from the one that ships.""" + sys.path.insert(0, str(Path(__file__).resolve().parent)) + import console_pages + + console_pages.set_sketch(str(SKETCH)) + scripts: list[tuple[str, str]] = [] + problems: list[str] = [] + name, rel, delim = console_pages.CHROME + chrome = SKETCH / rel + try: + _, body, _ = console_pages.split(console_pages.read(str(chrome)), name, delim) + scripts.append((f"{shown(chrome)} (/{name})", body)) + except (SystemExit, OSError) as error: # split() reports a bad header by SystemExit + problems.append(f"{shown(chrome)}: {error}") + shim = SKETCH / "console" / console_pages.SHIM_FILE + try: + # Its stamping rules (one line, nothing that ends a + +exactly once, and the header literal says instead + + + + - `h` is the CRC32 of the chrome's payload (the PF_CONSOLE_JS literal, + CRLF folded — what its gzip trailer covers). The device serves the + chrome immutable only under the `h` of the bytes it holds, so a page + and the chrome it was built against are one cache entry, and a new + chrome is a new URL rather than a stale copy for a year. It is why a + change to theme_index.h makes every page header stale: rebuild. + - SHIM is console/_pf_fallback.js, its leading `//` comment lines dropped: + a minimal `window.PF` for when the chrome failed to load, so a page's + own PF calls still work. + +`extract` strips both back to the bare tag, so the HTML never carries a +stamp and a page previews the same in console_serve.py (which stamps as it +serves) as on the device. A page without exactly one bare tag fails build. + `extract` is lossless by construction (build right after it is a no-op), and `build` is idempotent. + + --sketch DIR work on another copy of firmware/patternflow (a scratch + copy to try a change of this script against) """ +import argparse import gzip import os import re @@ -114,6 +140,21 @@ # storage class from here and takes its name from the identifier. DECL = r'(static const|const)\s+char\s+(\w+)\s*\[\]\s*PROGMEM\s*=\s*R"%s\($' +# The chrome tag as a page's source writes it, and as its header carries it. +CHROME = ASSETS[0] +CHROME_TAG = '' +STAMPED = '' +STAMPED_RE = re.compile( + r'' + r').)*', re.S) +SHIM_FILE = "_pf_fallback.js" + + +def set_sketch(path): + global SKETCH, HTML_DIR + SKETCH = os.path.abspath(path) + HTML_DIR = os.path.join(SKETCH, "console") + def header_path(rel): return os.path.join(SKETCH, rel.replace("/", os.sep)) @@ -288,20 +329,95 @@ def gz_problem(block, ident, storage, body): return None +# ── the chrome stamp ─────────────────────────────────────────────────────── +# Pure functions of their arguments (ValueError, not SystemExit, on a bad +# page) so console_serve.py stamps with exactly this code as it serves. + +def crc_of(body): + """%08x CRC32 of a literal's payload: the CRC its gzip trailer carries, + which is what the device compares `h` against.""" + return "%08x" % (zlib.crc32(payload(body)) & 0xFFFFFFFF) + + +def chrome_crc(): + name, rel, delim = CHROME + _, body, _ = split(read(header_path(rel)), name, delim) + return crc_of(body) + + +def load_shim(path=None): + """console/_pf_fallback.js as it is stamped: leading `//` lines dropped, + whitespace trimmed. Kept to one line so no newline style (a CRLF working + tree, an LF index) can make the same file stamp two ways.""" + path = path or os.path.join(HTML_DIR, SHIM_FILE) + lines = read(path).splitlines() + while lines and (not lines[0].strip() or lines[0].lstrip().startswith("//")): + lines.pop(0) + shim = "\n".join(lines).strip() + if not shim: + raise ValueError("%s: empty" % SHIM_FILE) + if "\n" in shim: + raise ValueError("%s: the code must be one line" % SHIM_FILE) + # Inline in a can be + # swallowed. )HTML" would end the header's raw string. + for bad in (" the literal its header carries.""" + n = html.count(CHROME_TAG) + if n != 1: + raise ValueError("%s: needs exactly one %s, has %d" % (name, CHROME_TAG, n)) + if STAMPED_RE.search(html): + raise ValueError("%s: already carries a stamped chrome tag" % name) + return html.replace(CHROME_TAG, STAMPED % (crc, shim)) + + +def unstamp(body, name="page"): + """The header's literal -> the page's source. A literal from before the + stamp existed has the bare tag and comes back unchanged.""" + found = STAMPED_RE.findall(body) + if len(found) > 1: + raise ValueError("%s: %d stamped chrome tags — splice by hand" % (name, len(found))) + return STAMPED_RE.sub(lambda m: CHROME_TAG, body) + + # ── commands ─────────────────────────────────────────────────────────────── +def stamping(): + """(chrome crc, shim) for this run. The crc is read off whatever the + chrome literal holds right now, so a chrome edit restamps every page on + the next build and fails check until then.""" + try: + return chrome_crc(), load_shim() + except (ValueError, OSError) as e: + raise SystemExit(str(e)) + + def cmd_extract(): for name, rel in PAGES: _, body, _ = split(read(header_path(rel)), name) - write(html_path(name), body) + try: + write(html_path(name), unstamp(body, name)) + except ValueError as e: + raise SystemExit(str(e)) print(" %-9s <- %s" % (name + ".html", rel)) print("\n%d pages extracted. `build` now is a no-op apart from the" % len(PAGES)) - print("edit-me note and the gzip twins; anything else in the diff is a bug") - print("in this script.") + print("edit-me note, the chrome stamp and the gzip twins; anything else in") + print("the diff is a bug in this script.") def cmd_build(): - changed = 0 + crc, shim = stamping() + changed = [] + pages_gz = chrome_gz = 0 + print(" stamping chrome h=%s, fallback %d bytes" % (crc, len(shim))) for name, rel, delim, src in targets(): dest = header_path(rel) old = read(dest) @@ -310,18 +426,30 @@ def cmd_build(): if src is not None: if not os.path.exists(src): raise SystemExit(name + ": " + src + " missing (run extract first)") - prefix, body = with_note(prefix, name), read(src) + try: + prefix, body = with_note(prefix, name), stamp(read(src), crc, shim, name) + except ValueError as e: + raise SystemExit(str(e)) new, gz_len = assemble(prefix, body, suffix, ident, storage, newline_of(old), name) + if src is not None: + pages_gz += gz_len + elif (name, rel, delim) == CHROME: + chrome_gz = gz_len status = "up to date" if new != old: - write(dest, new) - changed += 1 - status = "wrote " + rel + changed.append((dest, new)) + status = "writes " + rel print(" %-13s %6d -> %6d bytes gz %s" % (name, len(payload(body)), gz_len, status)) - print(("%d header(s) updated" % changed) if changed else "already up to date") + # Written only once every page has stamped: a page without its chrome tag + # must not leave the tree half on the new chrome and half on the old. + for dest, new in changed: + write(dest, new) + print(" pages %d bytes gz in all; the chrome %d, fetched once per chrome" % (pages_gz, chrome_gz)) + print(("%d header(s) updated" % len(changed)) if changed else "already up to date") def cmd_check(): + crc, shim = stamping() stale = [] for name, rel, delim, src in targets(): prefix, body, suffix = split(read(header_path(rel)), name, delim) @@ -330,8 +458,23 @@ def cmd_check(): if not os.path.exists(src): stale.append(name + " (no .html)") continue - if body != read(src) or with_note(prefix, name) != prefix: - stale.append(name) + html = read(src) + try: + want = stamp(html, crc, shim, name) + except ValueError as e: + stale.append("%s (%s)" % (name, e)) + continue + if body != want or with_note(prefix, name) != prefix: + # Say which: a page whose HTML is in the header and only the + # stamp moved is the chrome (or the fallback) having changed. + try: + only_stamp = with_note(prefix, name) == prefix and unstamp(body, name) == html + except ValueError: + only_stamp = False + why = "" + if only_stamp: + why = " (not stamped)" if CHROME_TAG in body else " (stale chrome stamp)" + stale.append(name + why) continue _, block, _ = split_suffix(suffix, ident, name) problem = gz_problem(block, ident, storage, body) @@ -341,18 +484,24 @@ def cmd_check(): print("out of sync: " + ", ".join(stale)) print("run: python firmware/toolchain/console_pages.py build") return 1 - print("all %d console headers match their HTML; all %d gzip twins " - "decompress to their literals" % (len(PAGES), len(PAGES) + len(ASSETS))) + print("all %d console headers match their HTML, stamped with chrome h=%s; " + "all %d gzip twins decompress to their literals" + % (len(PAGES), crc, len(PAGES) + len(ASSETS))) return 0 if __name__ == "__main__": - cmd = sys.argv[1] if len(sys.argv) > 1 else "" - if cmd == "extract": + ap = argparse.ArgumentParser(add_help=False) + ap.add_argument("cmd", nargs="?", default="") + ap.add_argument("--sketch") + args, extra = ap.parse_known_args() + if args.sketch: + set_sketch(args.sketch) + if args.cmd == "extract" and not extra: cmd_extract() - elif cmd == "build": + elif args.cmd == "build" and not extra: cmd_build() - elif cmd == "check": + elif args.cmd == "check" and not extra: sys.exit(cmd_check()) else: print(__doc__) diff --git a/firmware/toolchain/console_serve.py b/firmware/toolchain/console_serve.py index 100ebc4c..98da06f6 100644 --- a/firmware/toolchain/console_serve.py +++ b/firmware/toolchain/console_serve.py @@ -19,27 +19,63 @@ /mock?caps=full everything (the default) /mock?caps=patterns,params,shows whatever you want to see /mock?variant=simone-pd pretend this is somebody else's firmware + /mock?hotspot=1 /api/status says you are on its hotspot + /mock?busy=update ...or busy (update, storage; empty clears) What this is NOT: the firmware. It answers the same URLs with the same JSON shapes, and that is all it promises. Behaviour that lives in C++ — what the panel does, whether an upload actually parses — is not modelled here, and a page that works against the mock still has to be tried on a device before you believe it. + +Pages and the chrome, though, go out exactly as the panel sends them +(src/core_send.h): each page stamped by console_pages.py's own code (the +chrome's ?h= and the fallback PF), with the same ETag, the same 304, and the +same cache policy — `?v=` immutable, a stale `v` 302'd to the +current one, bare URLs revalidated, the chrome immutable only under its own +`h`, and nothing cacheable under a Host that is not an address, a bare name +or .local. The build here changes whenever a page, the chrome or the +fallback is saved, so a saved edit still shows on refresh: the old `v` is +redirected. + +The link can be made as bad as the panel's. On the desk every request is +instant and parallel; on the panel's own hotspot it is a phone in power +save talking to a one-connection server, and that is where the console is +slow. These make the desk that slow: + + --device gzip on the wire, as the panel sends it + --rtt 0.4 round trip in seconds; every request is a fresh + connection (Connection: close), and every 5,760 bytes + of a reply waits one more round trip for its ACK + --bps 5000 reply bandwidth, bytes per second + --serial one request at a time, like the panel's server + --slow all four at hotspot-like values + --host 0.0.0.0 listen beyond localhost, to try it from a phone + --chrome404 /pf-console.js answers 404: the pages run on the + fallback PF stamped into them + --sketch DIR serve another copy of firmware/patternflow """ +import argparse +import gzip import json +import threading import time import os import posixpath import re import sys import urllib.parse +import zlib from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer HERE = os.path.dirname(os.path.abspath(__file__)) SKETCH = os.path.normpath(os.path.join(HERE, "..", "patternflow")) HTML_DIR = os.path.join(SKETCH, "console") +sys.path.insert(0, HERE) +import console_pages # noqa: E402 the stamp is its code, not a copy of it + PORT = int(os.environ.get("PF_CONSOLE_PORT", "8322")) # URL -> console/.html. Mirrors the routes the firmware registers. @@ -53,20 +89,128 @@ "/show": "show", "/weather": "weather", "/mqtt": "mqtt", - "/audio": "audio", + "/audio-in": "audio-in", "/midi": "midi", "/clock": "clock", } + +class Link: + """How bad the pretend link is. Zeroes are the desk: instant, parallel.""" + device = False + rtt = 0.0 + bps = 0 + serial = False + chrome404 = False + lock = threading.Lock() + + +# The panel's cache policies (src/core_send.h: PFSend::PAGE and ::STAMPED). +IMMUTABLE = "public, max-age=31536000, immutable" +REVALIDATE = "no-cache" +NO_STORE = "no-store" +DESK_CACHE = "no-cache" +TCP_WINDOW = 5760 # lwIP TCP_SND_BUF on the panel: one round trip per this many bytes + + +def payload_etag(payload): + """The panel's ETag for a page: CRC32 and length of the uncompressed bytes, + straight out of the gzip trailer it stores - so the same page gets the same + tag here and on the device. Weak, because the bytes on the wire are gzip + and the tag names what they decompress to.""" + return 'W/"%08x-%x"' % (zlib.crc32(payload) & 0xFFFFFFFF, len(payload) & 0xFFFFFFFF) + + +def etag_matches(header, tag): + """PFSend::inmMatches: If-None-Match by weak comparison - `*`, or any + listed quoted tag equal to ours once each side has lost its W/.""" + if not header: + return False + want = tag[2:] if tag.startswith("W/") else tag + for t in header.split(","): + t = t.strip(" \t") + if t.startswith("*"): + return True + t = t[2:] if t.startswith("W/") else t + end = t.find('"', 1) + if t.startswith('"') and end > 0 and t[:end + 1] == want: + return True + return False + + +def host_cacheable(host): + """PFSend::hostCacheable: whether a browser may keep the console under + this Host. The hotspot answers every DNS name with the panel, so only a + name that can mean this panel - an IPv4 address, a name without a dot + (NetBIOS, an IPv6 literal) or a .local - gets a cacheable reply.""" + h = host or "" + colon = h.rfind(":") + if colon >= 0 and h[colon + 1:].isdigit(): + # "[::1]:80" has its port after the bracket; a bare "fe80::1" has none + port = h[colon - 1:colon] == "]" if h.startswith("[") else ":" not in h[:colon] + if port: + h = h[:colon] + if h.endswith("."): + h = h[:-1] # "patternflow.local." is the same name + if not h: + return False + parts = h.split(".") + if len(parts) == 4 and all(p.isdigit() and len(p) <= 3 and int(p) <= 255 for p in parts): + return True + return "." not in h or (len(h) > 6 and h[-6:].lower() == ".local") + # Assets the device serves out of its own headers, extracted live so a change # to the shared chrome shows up on refresh like everything else. RAW_ASSETS = { "/pf-console.js": ("src/theme_index.h", "JS", "application/javascript"), "/patterns/fflate.js": ("src/fflate_js.h", "FFLATE", "application/javascript"), } - -CAPS_FULL = ["patterns", "params", "osc", "sleep", "shows", "weather", "mqtt", "audio", "clock"] -CAPS_BARE = ["patterns", "params", "osc", "sleep"] +CHROME_SRC = RAW_ASSETS["/pf-console.js"][:2] + +CAPS_FULL = ["patterns", "params", "sleep", "osc", "shows", "weather", "mqtt", "clock", + "audio-in", "midi"] +CAPS_BARE = ["patterns", "params", "sleep"] + + +def feature_nav(): + """cap -> [navPath, navLabel, navDesc], read out of each feature's + descriptor, so the mock's header shows exactly the tabs a device with those + caps would - and cannot drift from them.""" + out = {} + root = os.path.join(SKETCH, "features") + for d in sorted(os.listdir(root)): + f = os.path.join(root, d, "feature_%s.h" % d) + if not os.path.exists(f): + continue + text = read(f) + m = re.search(r'descriptor\s*=\s*\{\s*"[^"]*",[^\n]*\n\s*"([^"]*)"', text) + path = re.search(r'"([^"]*)",\s*//\s*navPath', text) + label = re.search(r'"([^"]*)",\s*//\s*navLabel\s*\n', text) + if not (m and path and label): + continue + desc = "" + rest = text[label.end():] + dm = re.match(r'((?:\s*"(?:[^"\\]|\\.)*")+)\s*,', rest) + if dm: + desc = "".join(re.findall(r'"((?:[^"\\]|\\.)*)"', dm.group(1))) + out[m.group(1)] = [path.group(1), label.group(1), desc] + return out + + +def console_build(): + """The panel's `build` changes whenever its pages could have; here, whenever + a page, the chrome, the fallback or the stamping code is saved - so the + self-heal path runs on the desk, and an immutable page never outlives + an edit.""" + h = 0 + for name in sorted(os.listdir(HTML_DIR)): + if name.endswith((".html", ".js")): + h = zlib.crc32(("%s:%d" % (name, os.stat(os.path.join(HTML_DIR, name)).st_mtime_ns)).encode(), h) + for f in (os.path.join(SKETCH, "src", "theme_index.h"), os.path.join(HERE, "console_pages.py")): + h = zlib.crc32(str(os.stat(f).st_mtime_ns).encode(), h) + return "%08x" % (h & 0xFFFFFFFF) +# What the hotspot's channel scan "saw", for the /wifi page's name suggestions. +SEEN_NETWORKS = ["wifiiii", "SK_WiFiGIGA7A1C", "olleh_WiFi_2F3B", "U+Net4E21", "iptime"] def read(path): @@ -115,20 +259,33 @@ def __init__(self): self.show_playing = False self.show_paused = False self.show_slug = "" + self.via_hotspot = False # /mock?hotspot=1 + self.busy = "" # /mock?busy=update|storage def status(self): p = self.patterns[self.active] if self.patterns else None + hs = getattr(self, "hotspot", {"mode": "auto", "up": False}) return { - "version": "3.6.3", + "version": "3.10.4", + "build": console_build(), "variant": self.variant, + "variantVersion": "" if self.variant == "core" else "v0.4.0", "caps": self.caps, + "featureNav": [FEATURE_NAV[c] for c in self.caps if c in FEATURE_NAV], "uptime": self.uptime, + "resetReason": "power-on", "panel": "128x64", "wifi": True, "ssid": self.wifi[self.boot_idx]["ssid"] if self.wifi else "", "ip": "192.168.0.196", "rssi": -47, "host": "patternflow", + "hostAlias": "patternflow-a1b2", + "hotspot": {"mode": hs["mode"], "up": hs["up"], "ssid": "patternflow-a1b2", + "ip": "192.168.4.1" if hs["up"] else "", "channel": 6 if hs["up"] else 0, + "clients": 0}, + "viaHotspot": self.via_hotspot, + "busy": self.busy, "heapInternal": 82300, "heapLargest": 73716, "heapPsram": 8336335, @@ -177,24 +334,149 @@ def show_state(self): DEV = Device() +FEATURE_NAV = feature_nav() class Handler(BaseHTTPRequestHandler): server_version = "PatternflowConsoleMock" + # The panel answers HTTP/1.1 and closes after every reply; so does this + # (reply() sends the Connection: close that keeps it one request each). + protocol_version = "HTTP/1.1" # ── plumbing ───────────────────────────────────────────────────────── + def send_response(self, code, message=None): + # No Server or Date header: the panel's WebServer writes neither, and + # a 304 here should carry exactly the headers the panel's does. + self.log_request(code) + self.send_response_only(code, message) + def log_message(self, fmt, *a): sys.stderr.write(" %s %s\n" % (self.command, self.path)) - def send(self, body, ctype="text/html; charset=utf-8", code=200): - if isinstance(body, str): - body = body.encode("utf-8") + def log_request(self, code="-", size="-"): + if Link.rtt or Link.serial: + sys.stderr.write(" %s %s -> %s\n" % (self.command, self.path, code)) + else: + sys.stderr.write(" %s %s\n" % (self.command, self.path)) + + # Each request is a connection of its own (Connection: close, here as on + # the panel): the handshake and the request cost a round trip + # before the server sees anything, and with --serial nothing else is + # served meanwhile - the panel's server has one slot. + def handle_one_request(self): + if Link.rtt: + time.sleep(Link.rtt) + if Link.serial: + with Link.lock: + return BaseHTTPRequestHandler.handle_one_request(self) + return BaseHTTPRequestHandler.handle_one_request(self) + + def write_body(self, body): + if not (Link.rtt or Link.bps): + self.wfile.write(body) + return + # The wait comes before each window's bytes, so the browser feels + # every window's transfer time - the last one's included. + for i in range(0, len(body), TCP_WINDOW): + chunk = body[i:i + TCP_WINDOW] + wait = len(chunk) / Link.bps if Link.bps else 0 + if i: + wait = max(wait, Link.rtt) # this window waited on the last one's ACK + time.sleep(wait) + self.wfile.write(chunk) + self.wfile.flush() + + def reply(self, code, headers, body=b""): + """Status, headers in the order given, Connection: close, body. The + panel's WebServer puts Content-Type first and Content-Length and + Connection last, around whatever the handler added; callers keep that + order so a response here reads like one from the panel.""" self.send_response(code) - self.send_header("Content-Type", ctype) - self.send_header("Content-Length", str(len(body))) - self.send_header("Cache-Control", "no-store") + for k, v in headers: + self.send_header(k, v) + self.send_header("Connection", "close") self.end_headers() - self.wfile.write(body) + if body: + self.write_body(body) + + def send(self, body, ctype="text/html; charset=utf-8", code=200, cache="no-store"): + if isinstance(body, str): + body = body.encode("utf-8") + self.reply(code, [("Content-Type", ctype), ("Cache-Control", cache), + ("Content-Length", str(len(body)))], body) + + def not_found(self): + # core_http.h's onNotFound, word for word. + self.send("Not found", "text/plain", 404, NO_STORE) + + def send_console(self, text, ctype, cache, etag=True): + """A page or the chrome, the way PFSend::gz sends it: the ETag from the + uncompressed bytes (CRLF folded, as the device's literal is), and a + 304 carrying the ETag, the same Cache-Control and the Content-Length + a 200 would have - no body, no Content-Encoding. etag=False is the + panel's no-store reply: no tag, so never a 304.""" + payload = text.replace("\r\n", "\n").encode("utf-8") + tag = payload_etag(payload) if etag else None + body = gzip.compress(payload, 9, mtime=0) if Link.device else payload + if tag and etag_matches(self.headers.get("If-None-Match"), tag): + return self.reply(304, [("Content-Type", ctype), ("ETag", tag), + ("Cache-Control", cache), + ("Content-Length", str(len(body)))]) + headers = [("Content-Type", ctype), ("Cache-Control", cache)] + if tag: + headers.append(("ETag", tag)) + if Link.device: + headers.append(("Content-Encoding", "gzip")) + headers.append(("Content-Length", str(len(body)))) + self.reply(200, headers, body) + + def send_page(self, path, name): + """PFSend::PAGE: a page stamped exactly as console_pages.py build + stamps it into the header.""" + f = os.path.join(HTML_DIR, name + ".html") + if not os.path.exists(f): + return self.send("no console/%s.html — run console_pages.py extract" % name, + "text/plain", 404) + try: + text = console_pages.stamp(read(f), console_pages.crc_of(raw_literal(*CHROME_SRC)), + console_pages.load_shim(), name) + except (ValueError, RuntimeError, OSError) as e: + # build would refuse this page; show why instead of a page the + # device could never have served + return self.send("console_pages.py build would fail: %s" % e, "text/plain", 500) + if not host_cacheable(self.headers.get("Host")): + return self.send_console(text, "text/html", NO_STORE, etag=False) + v, build = self.arg("v"), console_build() + if v and v != build: + # PFSend::redirectToBuild: a page from another build goes to this + # one's URL, every other argument kept in order, every v rewritten, + # all but unreserved characters %XX-escaped - and nothing cached. + args = [(k, build if k == "v" else val) for k, val in self.qlist] + loc = path + "?" + "&".join( + "%s=%s" % (urllib.parse.quote(k, safe=""), urllib.parse.quote(val, safe="")) + for k, val in args) + return self.reply(302, [("Content-Type", "text/plain"), ("Location", loc), + ("Cache-Control", NO_STORE), ("Content-Length", "0")]) + self.send_console(text, "text/html", IMMUTABLE if v else REVALIDATE) + + def send_chrome(self): + """PFSend::STAMPED: immutable under its own ?h=, never stored under + another one, revalidated when bare.""" + if Link.chrome404: + return self.not_found() + try: + text = raw_literal(*CHROME_SRC) + except RuntimeError as e: + return self.send("/* %s */" % e, "application/javascript", 500) + ctype = "application/javascript" + if not host_cacheable(self.headers.get("Host")): + return self.send_console(text, ctype, NO_STORE, etag=False) + h = self.arg("h") + if not h: + return self.send_console(text, ctype, REVALIDATE) + if h == console_pages.crc_of(text): + return self.send_console(text, ctype, IMMUTABLE) + self.send_console(text, ctype, NO_STORE, etag=False) def send_json(self, obj, code=200): self.send(json.dumps(obj), "application/json", code) @@ -202,8 +484,13 @@ def send_json(self, obj, code=200): def parts(self): u = urllib.parse.urlsplit(self.path) path = posixpath.normpath(urllib.parse.unquote(u.path)) or "/" + self.qlist = urllib.parse.parse_qsl(u.query, keep_blank_values=True) return path, dict(urllib.parse.parse_qsl(u.query)) + def arg(self, name): + """server.arg(name): the first value given, "" when absent.""" + return next((v for k, v in getattr(self, "qlist", []) if k == name), "") + def body_params(self): n = int(self.headers.get("Content-Length") or 0) raw = self.rfile.read(n).decode("utf-8", "replace") if n else "" @@ -219,11 +506,12 @@ def do_GET(self): path, q = self.parts() if path in ROUTES: - f = os.path.join(HTML_DIR, ROUTES[path] + ".html") - if not os.path.exists(f): - return self.send("no console/%s.html — run console_pages.py extract" - % ROUTES[path], code=404) - return self.send(read(f)) + return self.send_page(path, ROUTES[path]) + + if path == "/favicon.ico": + # The chrome draws its own icon; this only stops the browser asking. + return self.reply(204, [("Content-Type", "text/html"), ("Cache-Control", IMMUTABLE), + ("Content-Length", "0")]) # The clock's glyph blob, the same bytes the firmware compiles in # (build_clock_glyphs.py writes both). @@ -233,19 +521,22 @@ def do_GET(self): return self.send("no clock_glyphs.bin - run build_clock_glyphs.py", code=404) with open(f, "rb") as fh: body = fh.read() - self.send_response(200) - self.send_header("Content-Type", "application/octet-stream") - self.send_header("Content-Length", str(len(body))) - self.end_headers() - self.wfile.write(body) - return + return self.send(body, "application/octet-stream", + cache="public, max-age=31536000, immutable") + + if path == "/pf-console.js": + return self.send_chrome() if path in RAW_ASSETS: rel, tag, ctype = RAW_ASSETS[path] try: - return self.send(raw_literal(rel, tag), ctype) + text = raw_literal(rel, tag) except Exception as e: return self.send("/* %s */" % e, ctype, 500) + # gz() with a literal Cache-Control, as core_patterns_http.h sends + # it: that string, no ETag, never a 304. + return self.send_console(text, ctype, "public, max-age=86400" if Link.device + else DESK_CACHE, etag=False) if path == "/mock": if "variant" in q: @@ -254,15 +545,17 @@ def do_GET(self): if want is not None: DEV.caps = (CAPS_BARE if want == "bare" else CAPS_FULL if want == "full" else [c.strip() for c in want.split(",") if c.strip()]) - self.send_response(302) - self.send_header("Location", "/") - self.end_headers() - return + if "hotspot" in q: + DEV.via_hotspot = q["hotspot"] in ("1", "true", "on") + if any(k == "busy" for k, _ in self.qlist): + DEV.busy = self.arg("busy") if self.arg("busy") in ("update", "storage") else "" + return self.reply(302, [("Content-Type", "text/plain"), ("Location", "/"), + ("Cache-Control", NO_STORE), ("Content-Length", "0")]) if path.startswith("/api/") or path == "/update/status": return self.api(path, q, {}) - self.send("not found: " + path, code=404) + self.not_found() def do_POST(self): path, q = self.parts() @@ -282,7 +575,7 @@ def api(self, path, q, p, delete=False): return self.send_json(d.status()) if path == "/update/status": - return self.send_json({"armed": True, "busy": False, "version": "3.6.3", + return self.send_json({"armed": True, "busy": False, "version": "3.10.4", "lastError": "", "lastRejected": False, "lastOk": False, "received": 0, "expected": 0, "attempts": 0}) @@ -326,7 +619,7 @@ def api(self, path, q, p, delete=False): d.active = 0 return self.send_json({"ok": True}) if path == "/api/patterns/pending": - return self.send_json({"pendingRev": 0, "pending": []}) + return self.send_json({"rev": 0, "slugs": []}) if path == "/api/patterns/file": return self.send("// mock: source of " + q.get("slug", "?") + "\n", "text/plain") @@ -345,13 +638,31 @@ def api(self, path, q, p, delete=False): if not any(n["ssid"] == ssid for n in d.wifi): d.wifi.insert(0, {"ssid": ssid}) d.boot_idx += 1 - return self.send_json({"ok": True, "ssid": ssid, - "switching": p.get("connect") == "1"}) + switching = p.get("connect") == "1" + if switching: + # Resolved three seconds later by the GET below: a password of + # "wrong" fails as one, a name the hotspot did not see is not + # found, anything else joins - every state the page can show. + d.join = {"ssid": ssid, "wrong": p.get("pass") == "wrong", "at": time.time()} + return self.send_json({"ok": True, "ssid": ssid, "switching": switching}) + join = {"state": "none", "ssid": "", "ip": "", "why": "", "reason": 0, "ago": 0} + j = getattr(d, "join", None) + if j: + ago = time.time() - j["at"] + join.update(ssid=j["ssid"], ago=int(max(0, ago - 3))) + if ago < 3: + join.update(state="trying", ago=int(ago)) + elif j["wrong"]: + join.update(state="failed", why="wrong password", reason=15) + elif j["ssid"] not in SEEN_NETWORKS: + join.update(state="failed", why="network not found", reason=201) + else: + join.update(state="joined", ip="192.168.0.196") return self.send_json({ "max": 5, "connected": True, "current": d.wifi[d.boot_idx]["ssid"] if d.wifi else "", "ip": "192.168.0.196", "status": "CONNECTED", - "bootIdx": d.boot_idx, "networks": d.wifi, + "bootIdx": d.boot_idx, "join": join, "networks": d.wifi, }) if path == "/api/wifi/boot": try: @@ -457,7 +768,8 @@ def api(self, path, q, p, delete=False): return self.send_json({"ok": True, "pass": hs["pass"], "hotspot": { "mode": hs["mode"], "up": hs["up"], "ssid": "patternflow-a1b2", "ip": "192.168.4.1" if hs["up"] else "", "channel": 6 if hs["up"] else 0, - "clients": 0, "dns": 0, "probes": 0}}) + "clients": 0, "dns": 0, "probes": 0}, + "seen": [{"ssid": s, "rssi": -38 - 7 * i} for i, s in enumerate(SEEN_NETWORKS)]}) # -- knobs: encoder direction and edges per click, with a readout that moves -- if path == "/api/knobs": @@ -493,15 +805,47 @@ def api(self, path, q, p, delete=False): stream.reconfigure(encoding="utf-8", errors="replace") except (AttributeError, ValueError): pass + ap = argparse.ArgumentParser(description="The device console against a mock device.") + ap.add_argument("--port", type=int, default=PORT) + ap.add_argument("--host", default=os.environ.get("PF_CONSOLE_HOST", "127.0.0.1")) + ap.add_argument("--device", action="store_true", help="gzip on the wire, as the panel sends it") + ap.add_argument("--rtt", type=float, default=0.0, help="round trip, seconds") + ap.add_argument("--bps", type=int, default=0, help="reply bandwidth, bytes/s") + ap.add_argument("--serial", action="store_true", help="one request at a time") + ap.add_argument("--slow", action="store_true", help="--device --rtt 0.4 --bps 5000 --serial") + ap.add_argument("--chrome404", action="store_true", + help="/pf-console.js answers 404, so pages run on their fallback PF") + ap.add_argument("--sketch", help="another copy of firmware/patternflow to serve") + args = ap.parse_args() + if args.sketch: + SKETCH = os.path.abspath(args.sketch) + HTML_DIR = os.path.join(SKETCH, "console") + console_pages.set_sketch(SKETCH) + FEATURE_NAV = feature_nav() if not os.path.isdir(HTML_DIR): sys.exit("no " + HTML_DIR + "\nrun: python firmware/toolchain/console_pages.py extract") - print("Patternflow console (mock device) http://localhost:%d" % PORT) + if args.slow: + args.device, args.serial = True, True + args.rtt = args.rtt or 0.4 + args.bps = args.bps or 5000 + Link.device, Link.rtt, Link.bps, Link.serial = args.device, args.rtt, args.bps, args.serial + Link.chrome404 = args.chrome404 + print("Patternflow console (mock device) http://localhost:%d" % args.port) print(" pages " + " ".join(sorted(ROUTES))) print(" caps /mock?caps=bare /mock?caps=full") print(" variant /mock?variant=simone-pd /mock?variant=core") + print(" status /mock?hotspot=1 /mock?busy=update (hotspot=0, busy= to clear)") print(" editing firmware/patternflow/console/*.html — just save and refresh") - print(" shipping python firmware/toolchain/console_pages.py build\n") + print(" shipping python firmware/toolchain/console_pages.py build") + if Link.device or Link.rtt or Link.bps or Link.serial: + print(" link %s rtt %.2fs %s %s" % ( + "gzip," if Link.device else "uncompressed,", Link.rtt, + ("%d B/s" % Link.bps) if Link.bps else "unlimited", + "one request at a time" if Link.serial else "parallel")) + if Link.chrome404: + print(" chrome /pf-console.js answers 404 - every page is on its fallback PF") + print() try: - ThreadingHTTPServer(("127.0.0.1", PORT), Handler).serve_forever() + ThreadingHTTPServer((args.host, args.port), Handler).serve_forever() except KeyboardInterrupt: print("\nstopped") diff --git a/firmware/toolchain/tests/network_test.cpp b/firmware/toolchain/tests/network_test.cpp index 3cbec7ec..2c68fbf4 100644 --- a/firmware/toolchain/tests/network_test.cpp +++ b/firmware/toolchain/tests/network_test.cpp @@ -125,6 +125,41 @@ int main() { ++testMillis; tick(); assert(WiFi.disconnectCalls == calls + 1); testMillis += 100; WiFi.state = WL_CONNECTED; tick(); assert(lastReconnectMs == 100); + // A network sent from a console is reported back: joined and where, or + // why not. Nothing above opened one - a join at boot reports nothing. + assert(joinState == JOIN_NONE); + testMillis = 1000000; + applyCredentials("studio", "right"); + assert(joinState == JOIN_TRYING && joinSsid == "studio"); + const uint32_t seq = joinSeq; + testMillis += 3000; WiFi.state = WL_CONNECTED; tick(); + assert(joinState == JOIN_OK && joinIp == "192.0.2.1" && joinSeq == seq + 1); + // A wrong password on the hotspot: the probe window closes with the + // driver's handshake timeout on record. + hotspotUp = true; + applyCredentials("studio", "wrong"); + lastStaReason = 15; WiFi.state = WL_DISCONNECTED; + testMillis += 1000; tick(); assert(joinState == JOIN_TRYING); + testMillis += 3 * STA_PROBE_MS; tick(); + assert(joinState == JOIN_FAILED && joinWhy == WHY_PASSWORD && joinReason == 15); + assert(joinSeq == seq + 2); + // A name that is not there, no reason heard: the status says which. + applyCredentials("nowhere", "x"); WiFi.state = WL_NO_SSID_AVAIL; + testMillis += 3 * STA_PROBE_MS + 1; tick(); + assert(joinState == JOIN_FAILED && joinWhy == WHY_NOT_FOUND); + // Without the hotspot a join that gets nowhere is given up on. + hotspotUp = false; + applyCredentials("far", "x"); WiFi.state = WL_DISCONNECTED; + testMillis += JOIN_GIVE_UP_MS - 1; tick(); assert(joinState == JOIN_TRYING); + testMillis += 1; tick(); assert(joinState == JOIN_FAILED && joinWhy == WHY_NO_ANSWER); + assert(whyFromReason(201, false, false) == WHY_NOT_FOUND); + assert(whyFromReason(204, false, false) == WHY_PASSWORD); + assert(whyFromReason(203, false, false) == WHY_REFUSED); + assert(whyFromReason(0, false, true) == WHY_PASSWORD); + assert(whyFromReason(200, false, false) == WHY_NO_ANSWER); + WiFi.state = WL_CONNECTED; tick(); // the name tests below start from a live link + assert(joinState == JOIN_FAILED); // a later link does not rewrite a settled join + namespace N = PatternflowNames; N::begin(); assert(!N::mdnsUp); N::tick(); assert(!N::ready); unsigned tries = beginCalls; @@ -150,5 +185,5 @@ int main() { unsigned announces = N::announcements; N::announce(); N::tick(); assert(N::announcements == announces); assert(services.count("_feature_udp")); - puts("network: retry grace, SSID rotation, DHCP edge, timer wrap, mDNS partial failure and recovery passed"); + puts("network: retry grace, SSID rotation, DHCP edge, timer wrap, join outcome, mDNS partial failure and recovery passed"); } diff --git a/firmware/toolchain/tests/send_test.cpp b/firmware/toolchain/tests/send_test.cpp index 716e36f0..4737ef08 100644 --- a/firmware/toolchain/tests/send_test.cpp +++ b/firmware/toolchain/tests/send_test.cpp @@ -1,12 +1,16 @@ #include +#include #include #include #include #include +#include #include #include +#include #define memcpy_P memcpy #define strlen_P strlen +#define PF_IMPROV_FW_VERSION "0.0.0-test" constexpr int MSG_DONTWAIT=64; static uint32_t nowMs=0, lastPoll=0, maxGap=0, polls=0; static bool connected=true, callerOnLoop=false; @@ -15,16 +19,102 @@ static std::vector received; static uint32_t millis() { return nowMs; } static void delay(unsigned ms) { nowMs+=ms; } struct Log { template void printf(const char*,T...) {} } Serial; + +// What esptool stamped into the app descriptor, as the IDF call reports it: +// hex pairs, as many as fit before the NUL. All zeros is an image built +// without --elf-sha256-offset. +static const char* elfSha=""; +static int esp_ota_get_app_elf_sha256(char* dst,size_t size) { + const size_t n=std::min((size-1)/2*2,strlen(elfSha)); + memcpy(dst,elfSha,n); dst[n]='\0'; + return static_cast(n+1); +} + +// The server as core_send.h uses it. Every call lands in `calls`, in order, +// so a test can say what was read before the first header went out and what +// a response consisted of. +using String=std::string; +enum HTTPMethod { HTTP_DELETE, HTTP_GET, HTTP_HEAD, HTTP_POST, HTTP_PUT }; struct WiFiClient { bool connected() const { return ::connected; } int fd() const { return 1; } void stop() { ::connected=false; } }; +struct Arg { String key, value; }; +static bool sameName(const String& a,const String& b) { + return a.size()==b.size() && std::equal(a.begin(),a.end(),b.begin(),[](char x,char y){ + return std::tolower(static_cast(x))==std::tolower(static_cast(y)); }); +} struct WebServer { + // The request. + String host, path="/"; + HTTPMethod verb=HTTP_GET; + std::vector query, headersIn; + // The response. + std::vector calls; + std::vector headersOut; + WiFiClient client() { return {}; } - void sendHeader(const char*,const char*) {} - void setContentLength(size_t) {} - void send(int,const char*,const char*) {} + String hostHeader() { calls.push_back("read host"); return host; } + String uri() { calls.push_back("read uri"); return path; } + HTTPMethod method() { calls.push_back("read method"); return verb; } + int args() { calls.push_back("read args"); return static_cast(query.size()); } + String argName(int i) { calls.push_back("read argName"); return query.at(static_cast(i)).key; } + String arg(int i) { calls.push_back("read arg#"); return query.at(static_cast(i)).value; } + String arg(const String& name) { + calls.push_back("read arg "+name); + for(auto& a:query) if(a.key==name) return a.value; + return ""; + } + bool hasArg(const String& name) { + calls.push_back("read hasArg "+name); + for(auto& a:query) if(a.key==name) return true; + return false; + } + String header(const String& name) { + calls.push_back("read header "+name); + for(auto& h:headersIn) if(sameName(h.key,name)) return h.value; + return ""; + } + bool hasHeader(const String& name) { + calls.push_back("read hasHeader "+name); + for(auto& h:headersIn) if(sameName(h.key,name) && !h.value.empty()) return true; + return false; + } + void sendHeader(const String& name,const String& value,bool=false) { + calls.push_back("header "+name+": "+value); headersOut.push_back({name,value}); + } + void setContentLength(size_t n) { calls.push_back("length "+std::to_string(n)); } + void send(int code,const char* type,const char* body) { + assert(body && !*body); // every send() here is headers only; bodies are drained + calls.push_back("send "+std::to_string(code)+" "+type); + } + void send(int code) { calls.push_back("send "+std::to_string(code)); } + + String out(const char* name) const { + for(auto& h:headersOut) if(h.key==name) return h.value; + return ""; + } + bool has(const char* name) const { + for(auto& h:headersOut) if(h.key==name) return true; + return false; + } + // The calls from the first header on: the response as it went out. + std::vector response() const { + auto first=std::find_if(calls.begin(),calls.end(),[](const String& c){ return c.rfind("read ",0)!=0; }); + return std::vector(first,calls.end()); + } + // Nothing was read once a header had been queued: the decision was whole + // before the response began. + bool decidedFirst() const { + bool writing=false; + for(auto& c:calls) { + const bool read=c.rfind("read ",0)==0; + if(writing && read) return false; + if(!read) writing=true; + } + return true; + } }; namespace PFLoopSync { bool onLoopTask() { return callerOnLoop; } } namespace PFNetMaintenance { @@ -44,7 +134,34 @@ static int send(int fd,const void* data,size_t n,int flags) { static void reset(int which,bool loop=false) { scenario=which;callerOnLoop=loop;nowMs=lastPoll=maxGap=polls=0;sends=0;connected=true;received.clear(); } -int main() { + +// gzip -n of "t\n": CRC-32 2ede181e, 32 bytes. +static const uint8_t PAGE_GZ[]={ + 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x02,0xff,0xb3,0x51,0x4c,0xc9,0x4f,0x2e, + 0xa9,0x2c,0x48,0x55,0xc8,0x28,0xc9,0xcd,0xb1,0xb3,0x29,0xc9,0x2c,0xc9,0x49,0xb5, + 0x2b,0xb1,0xd1,0x87,0x30,0xb8,0x00,0x1e,0x18,0xde,0x2e,0x20,0x00,0x00,0x00}; +static const char* PAGE_ETAG="W/\"2ede181e-20\""; +static const char* BUILD="0badf00d"; + +// One request through gz(): a fresh server with the given Host, query and +// If-None-Match, and the drain's socket reset. scenario 5 accepts every byte. +static WebServer request(const char* host,std::vector query,const char* inm, + const char* type,const char* policy, + const uint8_t* body=PAGE_GZ,size_t len=sizeof(PAGE_GZ), + HTTPMethod verb=HTTP_GET,const char* path="/patterns") { + reset(5); + WebServer s; + s.host=host; s.path=path; s.verb=verb; s.query=std::move(query); + if(inm) s.headersIn.push_back({"if-none-match",inm}); + PFSend::gz(s,body,len,type,policy); + assert(s.decidedFirst()); + return s; +} +static bool drained(const uint8_t* body,size_t len) { + return received==std::vector(body,body+len); +} + +static void testDrain() { WebServer server; std::vector source(12345); for(size_t i=0;i(i*17); @@ -60,5 +177,194 @@ int main() { assert(!connected && nowMs<=20005 && received.empty()); reset(4); PFSend::drain(server,source.data(),source.size()); assert(!connected && nowMs>120000 && received.size()==7); +} + +static void testBuildId() { + // FNV-1a reference vectors. + assert(PFBuild::fnv1a32("")==0x811c9dc5u); + assert(PFBuild::fnv1a32("a")==0xe40c292cu); + assert(PFBuild::fnv1a32("foobar")==0xbf9cf968u); + char out[9]; + elfSha="3f9a0c1e5b7d2a40c0ffee00deadbeef"; PFBuild::compute(out); + assert(strcmp(out,"3f9a0c1e")==0); + // Unstamped image, or nothing reported: the compile-time hash, never zeros. + char fallback[9]; + snprintf(fallback,sizeof(fallback),"%08x", + static_cast(PFBuild::fnv1a32(__DATE__ " " __TIME__ " " PF_IMPROV_FW_VERSION))); + elfSha="00000000000000000000000000000000"; PFBuild::compute(out); + assert(strcmp(out,fallback)==0 && strcmp(out,"00000000")!=0); + elfSha=""; PFBuild::compute(out); + assert(strcmp(out,fallback)==0); + // id() computes once: what the descriptor says later does not move it. + elfSha="0badf00d00000000"; const char* id=PFBuild::id(); + assert(strcmp(id,BUILD)==0); + elfSha="ffffffffffffffff"; + assert(PFBuild::id()==id && strcmp(PFBuild::id(),BUILD)==0); +} + +static void testHelpers() { + PFSend::Trailer t{}; + assert(!PFSend::trailerOf(nullptr,40,t)); + assert(!PFSend::trailerOf(PAGE_GZ,17,t)); + assert(PFSend::trailerOf(PAGE_GZ,sizeof(PAGE_GZ),t) && t.crc==0x2ede181eu && t.isize==0x20); + char etag[PFSend::ETAG_BYTES]; + PFSend::formatEtag(t,etag,sizeof(etag)); + assert(strcmp(etag,PAGE_ETAG)==0); + PFSend::formatEtag({0xffffffffu,0xffffffffu},etag,sizeof(etag)); + assert(strcmp(etag,"W/\"ffffffff-ffffffff\"")==0); + PFSend::formatEtag({0,0},etag,sizeof(etag)); + assert(strcmp(etag,"W/\"00000000-0\"")==0); + + // If-None-Match: weak comparison, lists, "*", and junk that must not match. + const char* tag=PAGE_ETAG; + assert(PFSend::inmMatches("W/\"2ede181e-20\"",tag)); + assert(PFSend::inmMatches("\"2ede181e-20\"",tag)); + assert(PFSend::inmMatches("\"2ede181e-20\"","\"2ede181e-20\"")); + assert(PFSend::inmMatches("W/\"aaaa\", W/\"2ede181e-20\"",tag)); + assert(PFSend::inmMatches("\"x\",\t\"2ede181e-20\"",tag)); + assert(PFSend::inmMatches("*",tag)); + assert(PFSend::inmMatches("junk, W/\"2ede181e-20\"",tag)); + assert(!PFSend::inmMatches("W/\"2ede181e-21\"",tag)); + assert(!PFSend::inmMatches("W/\"2ede181e-20",tag)); + assert(!PFSend::inmMatches("\"2ede181e-20x\"",tag)); + assert(!PFSend::inmMatches("\"2ede181e-2\"",tag)); + assert(!PFSend::inmMatches("2ede181e-20",tag)); + assert(!PFSend::inmMatches("",tag)); + assert(!PFSend::inmMatches(nullptr,tag)); + assert(!PFSend::inmMatches(",,, ",tag)); + + // Hosts that can only be the panel, and ones that can be anything. + for(const char* h:{"192.168.1.42","192.168.4.1:80","10.0.0.1","patternflow","patternflow:8080", + "PATTERNFLOW","patternflow.local","Patternflow-A1B2.LOCAL","patternflow.local:80", + "patternflow.local.","a.local","[fe80::1]","[fe80::1]:80","fe80::1","localhost"}) { + if(!PFSend::hostCacheable(h)) { std::printf("expected cacheable: %s\n",h); assert(false); } + } + for(const char* h:{"","example.com","connectivitycheck.gstatic.com","captive.apple.com:80", + "patternflow.local.example.com","1.2.3","1.2.3.4.5","256.1.1.1","1.2.3.4:", + ".local","192.168.1.1.nip.io","patternflow.lan"}) { + if(PFSend::hostCacheable(h)) { std::printf("expected not cacheable: %s\n",h); assert(false); } + } + assert(!PFSend::hostCacheable(nullptr)); + + // The decision table. + using PFSend::Reply; + auto d=PFSend::decide(false,false,BUILD,BUILD,tag,tag); + assert(d.reply==Reply::Full && d.cacheControl==PFSend::CC_NO_STORE && !d.etag); + d=PFSend::decide(false,true,"",BUILD,nullptr,tag); + assert(d.reply==Reply::Full && d.cacheControl==PFSend::CC_REVALIDATE && d.etag); + d=PFSend::decide(false,true,nullptr,BUILD,tag,tag); + assert(d.reply==Reply::NotModified && d.cacheControl==PFSend::CC_REVALIDATE && d.etag); + d=PFSend::decide(false,true,BUILD,BUILD,"",tag); + assert(d.reply==Reply::Full && d.cacheControl==PFSend::CC_IMMUTABLE && d.etag); + d=PFSend::decide(false,true,BUILD,BUILD,tag,tag); + assert(d.reply==Reply::NotModified && d.cacheControl==PFSend::CC_IMMUTABLE); + d=PFSend::decide(false,true,"12345678",BUILD,tag,tag); + assert(d.reply==Reply::Redirect && d.cacheControl==PFSend::CC_NO_STORE && !d.etag); + d=PFSend::decide(true,true,"2ede181e","2ede181e",tag,tag); + assert(d.reply==Reply::NotModified && d.cacheControl==PFSend::CC_IMMUTABLE && d.etag); + d=PFSend::decide(true,true,"deadbeef","2ede181e",tag,tag); + assert(d.reply==Reply::Full && d.cacheControl==PFSend::CC_NO_STORE && !d.etag); + d=PFSend::decide(true,true,"","2ede181e",nullptr,tag); + assert(d.reply==Reply::Full && d.cacheControl==PFSend::CC_REVALIDATE && d.etag); + d=PFSend::decide(true,false,"2ede181e","2ede181e",tag,tag); + assert(d.reply==Reply::Full && d.cacheControl==PFSend::CC_NO_STORE && !d.etag); + + String escaped; + PFSend::appendEscaped(escaped,"a b&c=d/\xc3\xa9~-._"); + assert(escaped=="a%20b%26c%3Dd%2F%C3%A9~-._"); +} + +static void testResponses() { + const size_t len=sizeof(PAGE_GZ); + const String lenCall="length "+std::to_string(len); + + // A bare page URL: kept, but asked about every time. + auto s=request("192.168.1.42",{},nullptr,"text/html",PFSend::PAGE); + assert((s.response()==std::vector{"header Cache-Control: no-cache", + String("header ETag: ")+PAGE_ETAG,"header Content-Encoding: gzip",lenCall,"send 200 text/html"})); + assert(drained(PAGE_GZ,len)); + + // ...and when the browser has it: a 304 with the 200's length, no body. + s=request("patternflow.local",{},PAGE_ETAG,"text/html",PFSend::PAGE); + assert((s.response()==std::vector{String("header ETag: ")+PAGE_ETAG, + "header Cache-Control: no-cache",lenCall,"send 304 text/html"})); + assert(sends==0 && received.empty()); + + // The running build's URL: immutable, and a 304 says so too. + s=request("192.168.1.42",{{"v",BUILD}},nullptr,"text/html",PFSend::PAGE); + assert(s.out("Cache-Control")==PFSend::CC_IMMUTABLE && s.out("ETag")==PAGE_ETAG); + assert(s.response().back()=="send 200 text/html" && drained(PAGE_GZ,len)); + s=request("192.168.1.42",{{"v",BUILD}},"W/\"x\", \"2ede181e-20\"","text/html",PFSend::PAGE); + assert((s.response()==std::vector{String("header ETag: ")+PAGE_ETAG, + String("header Cache-Control: ")+PFSend::CC_IMMUTABLE,lenCall,"send 304 text/html"})); + assert(sends==0); + + // Another build's URL: a redirect to this one, every other argument kept + // in order and escaped again, no body, nothing kept. + s=request("192.168.1.42",{{"src","http://x/y?z"},{"v","12345678"},{"n","a b"}},PAGE_ETAG, + "text/html",PFSend::PAGE); + assert((s.response()==std::vector{ + "header Location: /patterns?src=http%3A%2F%2Fx%2Fy%3Fz&v=0badf00d&n=a%20b", + "header Cache-Control: no-store","send 302 text/plain"})); + assert(sends==0 && !s.has("ETag")); + // A POST's arguments came in its body, and never go into a URL. + s=request("192.168.1.42",{{"v","12345678"},{"pass","secret"}},nullptr,"text/html",PFSend::PAGE, + PAGE_GZ,len,HTTP_POST,"/"); + assert(s.out("Location")=="/?v=0badf00d" && sends==0); + + // A Host that could be anyone's: nothing kept, no validator, even for a + // URL and an If-None-Match that would otherwise be a 304. + for(const char* host:{"connectivitycheck.gstatic.com",""}) { + s=request(host,{{"v",BUILD}},PAGE_ETAG,"text/html",PFSend::PAGE); + assert((s.response()==std::vector{"header Cache-Control: no-store", + "header Content-Encoding: gzip",lenCall,"send 200 text/html"})); + assert(drained(PAGE_GZ,len)); + } + + // The chrome, keyed by its own CRC. + s=request("192.168.4.1",{{"h","2ede181e"}},PAGE_ETAG,"application/javascript",PFSend::STAMPED); + assert((s.response()==std::vector{String("header ETag: ")+PAGE_ETAG, + String("header Cache-Control: ")+PFSend::CC_IMMUTABLE,lenCall,"send 304 application/javascript"})); + s=request("192.168.4.1",{{"h","deadbeef"}},PAGE_ETAG,"application/javascript",PFSend::STAMPED); + assert(s.out("Cache-Control")=="no-store" && !s.has("ETag")); + assert(s.response().back()=="send 200 application/javascript" && drained(PAGE_GZ,len)); + s=request("192.168.4.1",{},nullptr,"application/javascript",PFSend::STAMPED); + assert(s.out("Cache-Control")=="no-cache" && s.out("ETag")==PAGE_ETAG && drained(PAGE_GZ,len)); + // A page's v means nothing to the chrome, and h nothing to a page. + s=request("192.168.4.1",{{"v","12345678"}},nullptr,"application/javascript",PFSend::STAMPED); + assert(s.out("Cache-Control")=="no-cache" && !s.has("Location")); + s=request("192.168.4.1",{{"h","deadbeef"}},nullptr,"text/html",PFSend::PAGE); + assert(s.out("Cache-Control")=="no-cache" && !s.has("Location")); + + // A literal Cache-Control is the old behaviour: sent as is, never a 304. + s=request("192.168.1.42",{},PAGE_ETAG,"application/javascript","public, max-age=86400"); + assert((s.response()==std::vector{"header Cache-Control: public, max-age=86400", + "header Content-Encoding: gzip",lenCall,"send 200 application/javascript"})); + assert(drained(PAGE_GZ,len)); + + // Too short to carry a gzip trailer: served, never kept or validated. + s=request("192.168.1.42",{{"v",BUILD}},PAGE_ETAG,"text/html",PFSend::PAGE,PAGE_GZ,10); + assert(s.out("Cache-Control")=="no-store" && !s.has("ETag") && drained(PAGE_GZ,10)); + + // The favicon's 204: kept for a year on the panel's own names, and under + // the same Host rule as pages, never under a site the phone was reaching. + const std::pair icons[]={ + {"192.168.4.1",PFSend::CC_IMMUTABLE},{"patternflow.local:80",PFSend::CC_IMMUTABLE}, + {"neverssl.com",PFSend::CC_NO_STORE},{"",PFSend::CC_NO_STORE}}; + for(const auto& icon:icons) { + WebServer f; + f.host=icon.first; + PFSend::noContent(f); + assert(f.decidedFirst()); + assert((f.response()==std::vector{String("header Cache-Control: ")+icon.second,"send 204"})); + } +} + +int main() { + testDrain(); + testBuildId(); + testHelpers(); + testResponses(); puts("PASS: partial writes preserve bytes; EAGAIN/EINTR yield; disconnect, loop budget and total ceiling terminate"); + puts("PASS: build id; ETag, If-None-Match, Host gating and the PAGE/STAMPED table; 304/302/200 decided before any header, 304 carries the 200's length and no body; the favicon's 204 is Host-gated too"); }