diff --git a/LifeTrac-v25/DESIGN-CONTROLLER/TODO.md b/LifeTrac-v25/DESIGN-CONTROLLER/TODO.md index 8aa3c216..58cb2fa5 100644 --- a/LifeTrac-v25/DESIGN-CONTROLLER/TODO.md +++ b/LifeTrac-v25/DESIGN-CONTROLLER/TODO.md @@ -127,7 +127,7 @@ Tasks are organized by phase. Hardware purchases come first because lead times d One paragraph per finding, newest context first; every claim carries evidence in `bench-evidence/` or a commit. PR #86 (merged, `ffae3e51`) holds the bench -campaign; PR #87 (open) holds firmware Batch 1. +campaign; PR #87 (merged, `47cff1b7`) holds firmware Batch 1. **Link measurements that changed the architecture.** - **The ack was destroying the command channel**: suppressing the tractor echo @@ -168,9 +168,11 @@ campaign; PR #87 (open) holds firmware Batch 1. power change (allowance 17, configured 14). Residual: RS-10.18. - **FHSS per-link hop seed** (CFG 0x17/0x18; was hardcoded (0,0,0) — every radio hopped identically). `LIFETRAC_FHSS_LINK_ID` is LINK-scoped. -- **Batch 1 code-complete on PR #87** (F7 phase bias, F8 RX_FRAME_URC phase - tail, F9 opmode gate, F6 epoch-drift lock-out with grid adoption). 27 bench - targets green; NOT yet flashed — acceptance checklist below. +- **Batch 1 merged on PR #87 (`47cff1b7`) and ACCEPTED ON AIR 2026-07-30** + (F7 phase bias, F8 RX_FRAME_URC phase tail, F9 opmode gate, F6 epoch-drift + lock-out with grid adoption). All four verified on the two-board bench — + see `bench-evidence/FW_BATCH1_acceptance_2026-07-30/RESULTS.md` and the + checked-off acceptance list below. **Instruments and infrastructure.** - Loss attribution (`lost_frag_idx`, `air_gap_by_class`) with out-of-order @@ -1274,7 +1276,16 @@ No-regrets work, correct under every surviving architecture (do first): decided by the 53 test files that mutate `sys.path`. It is an order-dependent failure, not a logic defect — do not "fix" the assertion. -- [ ] **RS-5.8 The L072 flash size budget has never actually been enforced.** +- [x] **RS-5.8 CLOSED 2026-08-01 (branch `post-batch1-cleanup`).** Decision: + under the unified layout the enforceable hazard is the app load image + growing into the CFG region, so the budget is **[MM_APP_BASE, MM_CFG_BASE) + = 184 KB** — `MM_APP_SIZE` (192 K nominal) is not the guard. The checker now + evaluates exactly that (`app_size = MM_CFG_BASE - MM_APP_BASE`), and the + Makefile banner was reconciled to the same wording ("APP = 184 KB (unified; + boot merged, RS-5.8)"), one source of truth. Passes locally at 23,036 B + load-image / 184 KB. This should turn the months-red "L072 cross-compile" + CI job green for the first time. Original item follows. +- [ ] **RS-5.8 (original) The L072 flash size budget has never actually been enforced.** `tools/check_size_budget.py` (added `e599269b`, 2026-05-05) is run by the "L072 cross-compile" CI job after `arm-none-eabi-size`, and that job has been **red for months** — so the guard against overflowing the 192 KB part has @@ -1907,24 +1918,48 @@ for whoever tries to use one; the decision for each is *wire it or delete it*. and it is the companion signal to the RS-10.2 coding-rate trigger. Small fix, do it before the first field run. -### Firmware Batch 1 status (2026-07-30): CODE-COMPLETE, awaiting flash - -F6/F7/F8/F9 are implemented on PR #87 (branch `fw-batch1-f6-f9`) against the -verified maps in [`FIRMWARE_BATCH1_MAPS.md`](FIRMWARE_BATCH1_MAPS.md), host -suites green (27 bench targets, 1079 python). NOT yet flashed. On-air -acceptance, in order, next flash session: -1. Flash H7 FIRST (relaxed RX_FRAME parser), then L072 — reversed order - freezes the H7's rx_frame_count under Method-G. -2. Re-push `method_h_stage2_tx_probe_v2.py` to both X8s (stale deployed copy - keeps the old parse_rx_frame dict shape and hides the F8 telemetry). -3. FHSS two-board run: every RX_FRAME_URC flags=1, epoch/hop advancing, - slot_offset <= guard (verifies F7+F8). -4. Force a demotion; confirm re-adoption within one acquisition while both - nodes transmit (verifies F6 — the s_grid_adopted flag is air-testable - only). -5. One build with `EXTRA_CFLAGS=-DHOST_ALLOW_REG_WRITE_DIAG=0`: arming works, - profile switch completes without the revert path, 0x1D write FORBIDDEN - (verifies F9). The default flip is a separate commit after this soak. +### Firmware Batch 1 status (2026-07-30): MERGED + ACCEPTED ON AIR + +F6/F7/F8/F9 merged on PR #87 (`47cff1b7`) against the verified maps in +[`FIRMWARE_BATCH1_MAPS.md`](FIRMWARE_BATCH1_MAPS.md), host suites green +(27 bench targets, 1079 python). Flash session ran 2026-07-30; all five +acceptance steps passed — full record in +`bench-evidence/FW_BATCH1_acceptance_2026-07-30/RESULTS.md`: +1. [x] Flash H7 FIRST (relaxed RX_FRAME parser), then L072 — done in that + order; Method-G rx_frame_count live throughout. +2. [x] Re-pushed `method_h_stage2_tx_probe_v2.py` to both X8s. +3. [x] FHSS two-board run: phase_telemetry valid=all, epoch exactly 1/10 s, + slot_off 14–18 ms (= 12 ms designed head-start + honest delays) + (verifies F7+F8). +4. [x] Forced 30 s silence: demotion, then resume at Δepoch=2 within one + acquisition — impossible pre-F6 (verifies F6). +5. [x] flag=0 build: arming + profile switch clean, 0x1D/0x83 write + FORBIDDEN via committed `f9_gate_probe.py`, 360 s soak (verifies F9). + Default flipped to 0 on `post-batch1-cleanup` as the follow-up commit; + bench builds now need `EXTRA_CFLAGS="-DHOST_ALLOW_REG_WRITE_DIAG=1"`. + +### Post-Batch-1 cleanup (2026-08-01, branch `post-batch1-cleanup`) + +- [x] **RS-5.8 budget decision + fix** — see the RS-5.8 closure above. +- [x] **F9 default flip** — `HOST_ALLOW_REG_WRITE_DIAG` now defaults 0 in + `config.h` after the passed soak; boards currently run the flag=1 bench + build (diag surface needed for bench work). +- [x] **F10 — `0x6C` CMD_OP_TILE_STALE end-to-end.** The measured-harmful + reassembly-timeout keyframe self-heal (+1.88 pts loss, −16% frames, +31% + timeouts) is now default-OFF (`LIFETRAC_KF_ON_REASM_TIMEOUT=0`); its + legitimate job is covered by the receiver-driven stale-tile report: + web_ui scans `Canvas.arrived_ms` every 3 s for tiles >20 s stale (horizon + must exceed the encoder sweep rotation — a static-scene receiver cannot + tell "static" from "lost" except via the sweep's periodic re-ship) and + publishes a u16le base_seq + tile bitmap (14 B at 12×8 ≈ 15.4 ms on air, + 84× cheaper than the keyframe it replaces); image_rx_daemon radiates one + copy per report (level-triggered, no retry); the tractor folds marks into + the existing age-escalation by back-dating `tile_last_seq`, so repairs + ride the next scheduled frame at zero extra image airtime. Keyframe + requests remain for cold start / base_seq mismatch / mode change only. + 10 new tests; suite 1089/2446 subtests green. **Not yet verified on air** + — needs a bench run with deliberate fragment loss to watch a marked tile + re-ship (queue for the next flash/bench session). ### RS-11 — Next-session sequencing, and the one instrument that gates it (added 2026-07-29) diff --git a/LifeTrac-v25/DESIGN-CONTROLLER/base_station/image_rx_daemon.py b/LifeTrac-v25/DESIGN-CONTROLLER/base_station/image_rx_daemon.py index c2ccab56..c97eb92f 100644 --- a/LifeTrac-v25/DESIGN-CONTROLLER/base_station/image_rx_daemon.py +++ b/LifeTrac-v25/DESIGN-CONTROLLER/base_station/image_rx_daemon.py @@ -77,6 +77,7 @@ CMD_OP_RADIO_PROFILE_CONF, CMD_OP_ENCODE_MODE_ACK, CMD_OP_PROBE, + CMD_OP_TILE_STALE, CMD_OP_PROBE_ECHO, ) from image_pipeline.frame_format import encode_tile_delta_frame # noqa: E402 @@ -154,6 +155,8 @@ def _env_float(name: str, default: float, lo: "float | None" = None, # does not have to change. MQTT_TOPIC_OUT = "lifetrac/v25/video/tile_delta" KEYFRAME_REQ_TOPIC = "lifetrac/v25/cmd/req_keyframe" # camera_service listens +# F10: raw CMD_OP_TILE_STALE args from web_ui, radiated verbatim. +TILE_STALE_TOPIC = "lifetrac/v25/cmd/tile_stale" # 2026-07-24: rolling RX-side link-speed sample for the web UI's image # panel (web_ui forwards it into /ws/state as snapshot.link_stats). LINK_STATS_TOPIC = "lifetrac/v25/video/link_stats" @@ -184,6 +187,15 @@ def _env_float(name: str, default: float, lo: "float | None" = None, # sparse cadence keeps the base's TX duty (and the run-33 bidirectional # UART-stress window) tiny. The reassembler self-heals regardless. KEYFRAME_CMD_MIN_GAP_S = 10.0 +# F10 (2026-08-01): reassembly-timeout keyframe requests were MEASURED net +# harmful (n=2/side: +1.88 pts fragment loss, -16% frames delivered, +31% +# timeouts — they amplify the condition they fire on) and their legitimate +# job (canvas staleness) is now covered by the 0x6C stale-tile report, +# which is 84x cheaper and rides the next scheduled frame. Default OFF; +# the keyframe request remains for cold start / base_seq mismatch / mode +# change, which fire through web_ui's Canvas.apply path, not this one. +KF_ON_REASM_TIMEOUT = os.environ.get( + "LIFETRAC_KF_ON_REASM_TIMEOUT", "0") == "1" # codec-id -> short name for link_stats (mirrors frame_format CODEC_*). _CODEC_NAMES = {0: "webp", 1: "mono_g4", 2: "btc4_tile", 3: "btc4_frame", @@ -1033,6 +1045,22 @@ def _subscribe_control(self, client) -> None: ENCODE_MODE_OVERRIDE_TOPIC, self._on_encode_mode_msg) client.message_callback_add( KEYFRAME_REQ_TOPIC, self._on_req_keyframe_msg) + client.message_callback_add( + TILE_STALE_TOPIC, self._on_tile_stale_msg) + + def _on_tile_stale_msg(self, _client, _userdata, msg) -> None: + # F10: level-triggered advisory — radiate as a ONE-SHOT single + # copy. A lost report is superseded by the next periodic one, so + # no pending/retry machinery and no extra copies. Body arrives + # pre-packed from web_ui (u16le base_seq + bitmap). + body = bytes(msg.payload or b"") + if len(body) < 3 or len(body) > 200: + return + try: + self._ctrl_out.put_nowait( + pack_command_frame(CMD_OP_TILE_STALE, body)) + except queue.Full: + pass def _rx_worker(self) -> None: try: @@ -1066,7 +1094,8 @@ def _rx_worker(self) -> None: with self._lock: self.stats.reassembler_timeouts += (cur_timeout - last_timeouts) last_timeouts = cur_timeout - self._kf_req.poke(f"reassembly timeout #{cur_timeout}") + if KF_ON_REASM_TIMEOUT: + self._kf_req.poke(f"reassembly timeout #{cur_timeout}") self._drain_ctrl_idle(link) self._maybe_switch_profile(link) # Defensive: heal a silently dropped RXCONT (throttled). @@ -1216,7 +1245,9 @@ def _rx_worker(self) -> None: if cur_timeout != last_timeouts: self.stats.reassembler_timeouts += (cur_timeout - last_timeouts) last_timeouts = cur_timeout - self._kf_req.poke(f"reassembly timeout #{cur_timeout}") + if KF_ON_REASM_TIMEOUT: + self._kf_req.poke( + f"reassembly timeout #{cur_timeout}") if completed is not None: # RS-1.x: a COMPLETED frame means that was the train's @@ -1702,6 +1733,7 @@ def _on_connect(_c, _u, _f, rc): self._client.subscribe(RADIO_PROFILE_TOPIC, qos=1) self._client.subscribe(ENCODE_MODE_OVERRIDE_TOPIC, qos=1) self._client.subscribe(KEYFRAME_REQ_TOPIC, qos=0) + self._client.subscribe(TILE_STALE_TOPIC, qos=0) else: LOG.error("MQTT connect rc=%s", rc) self._client.on_connect = _on_connect @@ -1729,6 +1761,7 @@ def _ctrl_on_connect(_c, _u, _f, rc): self._ctrl_client.subscribe( ENCODE_MODE_OVERRIDE_TOPIC, qos=1) self._ctrl_client.subscribe(KEYFRAME_REQ_TOPIC, qos=0) + self._ctrl_client.subscribe(TILE_STALE_TOPIC, qos=0) self._ctrl_client.on_connect = _ctrl_on_connect self._ctrl_client.connect(self.ctrl_mqtt_host, self.mqtt_port, keepalive=30) diff --git a/LifeTrac-v25/DESIGN-CONTROLLER/base_station/lora_proto.py b/LifeTrac-v25/DESIGN-CONTROLLER/base_station/lora_proto.py index 20cc3bd5..82cae220 100644 --- a/LifeTrac-v25/DESIGN-CONTROLLER/base_station/lora_proto.py +++ b/LifeTrac-v25/DESIGN-CONTROLLER/base_station/lora_proto.py @@ -981,11 +981,23 @@ def add_parity_fragments(fragments: list[bytes], frag_seq: int, # Free by symbol quantization: 9..12 B payload all cost 10.304 ms at # BW500, so the 2 B ref costs nothing over a bare skip frame. CMD_OP_CTRL_DITTO = 0x6B # args: u16le ref_seq +# F10 (2026-08-01, from the measured keyframe-self-heal harm — RESULTS +# 2026-07-29 §8): receiver-driven STALE-TILE REPORT, base -> tractor. +# args: u16le base_seq_ref + u8 bitmap[(n_tiles+7)//8], bit k = tile k +# has not refreshed on the base canvas within the staleness horizon. +# ADVISORY dirty marks, not a retransmission command: the tractor folds +# marked tiles into its existing age-escalation, so the repair rides +# the next scheduled image frame at zero extra image airtime. Level- +# triggered — a lost report is superseded by the next one. 14 B body at +# the 12x8 grid = 15.4 ms on air, vs 1298.8 ms for the keyframe the +# old self-heal fired (84x cheaper), and the keyframe request remains +# only for cold start / base_seq mismatch / mode change. +CMD_OP_TILE_STALE = 0x6C # args: u16le base_seq + stale bitmap _CMD_OPS = frozenset({CMD_OP_REQ_KEYFRAME, CMD_OP_ENCODE_MODE, CMD_OP_RADIO_PROFILE, CMD_OP_RADIO_PROFILE_ACK, CMD_OP_RADIO_PROFILE_CONF, CMD_OP_ENCODE_MODE_ACK, CMD_OP_PROBE, CMD_OP_PROBE_ECHO, - CMD_OP_CTRL_DITTO}) + CMD_OP_CTRL_DITTO, CMD_OP_TILE_STALE}) COMMAND_FRAME_MAX_ARGS = 200 @@ -1018,6 +1030,32 @@ def parse_command_frame(body: bytes) -> tuple[int, bytes] | None: # the whole 16 B frame. See CMD_OP_CTRL_DITTO above for why ref_seq is # safety-critical rather than an optimization. +def pack_tile_stale(base_seq: int, stale_indices, n_tiles: int) -> bytes: + """F10: args for CMD_OP_TILE_STALE. Pure; raises on out-of-range.""" + if not 0 < n_tiles <= 1024: + raise ValueError(f"n_tiles out of range: {n_tiles}") + bitmap = bytearray((n_tiles + 7) // 8) + for idx in stale_indices: + i = int(idx) + if not 0 <= i < n_tiles: + raise ValueError(f"tile index {i} out of range for {n_tiles}") + bitmap[i // 8] |= 1 << (i % 8) + return (int(base_seq) & 0xFFFF).to_bytes(2, "little") + bytes(bitmap) + + +def parse_tile_stale(args: bytes) -> "tuple[int, list[int]] | None": + """F10: inverse of pack_tile_stale. None on a truncated body.""" + if len(args) < 3: + return None + base_seq = int.from_bytes(args[0:2], "little") + out = [] + for byte_i, b in enumerate(args[2:]): + for bit in range(8): + if b & (1 << bit): + out.append(byte_i * 8 + bit) + return base_seq, out + + def pack_ctrl_ditto(ref_seq: int) -> bytes: """Pack a ditto referencing the ControlFrame sequence being repeated.""" return pack_command_frame(CMD_OP_CTRL_DITTO, diff --git a/LifeTrac-v25/DESIGN-CONTROLLER/base_station/tests/test_tile_stale.py b/LifeTrac-v25/DESIGN-CONTROLLER/base_station/tests/test_tile_stale.py new file mode 100644 index 00000000..e60ad20c --- /dev/null +++ b/LifeTrac-v25/DESIGN-CONTROLLER/base_station/tests/test_tile_stale.py @@ -0,0 +1,119 @@ +"""F10 — the 0x6C stale-tile report: proto roundtrip and the base-side scan. + +The reassembly-timeout keyframe self-heal was measured net harmful (n=2/side: ++1.88 pts loss, −16% frames, +31% timeouts) but could not simply be deleted: +the canvas is persistent, so a lost tile update displays stale imagery until +the encoder happens to resend. The 0x6C report closes that loop from the only +side that knows what arrived, 84× cheaper than the keyframe it replaces, and +rides the tractor's existing age-escalation machinery. +""" + +import os +import sys +import unittest +from unittest import mock + +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +from lora_proto import ( # noqa: E402 + CMD_OP_TILE_STALE, + pack_command_frame, + parse_command_frame, + pack_tile_stale, + parse_tile_stale, +) +from image_pipeline.canvas import Canvas # noqa: E402 + +# web_ui connects to the MQTT broker at import time (and RAISES after 30 s +# if none is listening — CI has no broker), so it must be imported under the +# same paho stub the other web_ui tests use. Skip cleanly on pure-firmware +# checkouts without fastapi/paho. +try: + import paho.mqtt.client # noqa: F401 + import fastapi # noqa: F401 +except ImportError: + raise unittest.SkipTest("paho-mqtt + fastapi required for web_ui import") + +with mock.patch("paho.mqtt.client.Client") as _mqtt_class: + _instance = _mqtt_class.return_value + _instance.connect = mock.MagicMock() + _instance.loop_start = mock.MagicMock() + _instance.subscribe = mock.MagicMock() + _instance.publish = mock.MagicMock() + import importlib + import web_ui + importlib.reload(web_ui) # rebind module-level mqtt stub + compute_stale_tiles = web_ui.compute_stale_tiles + + +class ProtoRoundtripTests(unittest.TestCase): + + def test_roundtrip(self) -> None: + body = pack_tile_stale(0x1234, [0, 7, 8, 42, 95], 96) + self.assertEqual(len(body), 2 + 12, "12x8 grid = 14 B body") + parsed = parse_tile_stale(body) + self.assertIsNotNone(parsed) + base_seq, tiles = parsed + self.assertEqual(base_seq, 0x1234) + self.assertEqual(tiles, [0, 7, 8, 42, 95]) + + def test_empty_bitmap(self) -> None: + base_seq, tiles = parse_tile_stale(pack_tile_stale(1, [], 96)) + self.assertEqual(tiles, []) + + def test_out_of_range_index_raises(self) -> None: + with self.assertRaises(ValueError): + pack_tile_stale(0, [96], 96) + + def test_truncated_body_returns_none(self) -> None: + self.assertIsNone(parse_tile_stale(b"\x01\x00")) + + def test_rides_the_command_frame(self) -> None: + body = pack_tile_stale(7, [3], 96) + frame = pack_command_frame(CMD_OP_TILE_STALE, body) + op, args = parse_command_frame(frame) + self.assertEqual(op, CMD_OP_TILE_STALE) + self.assertEqual(parse_tile_stale(args), (7, [3])) + + def test_wire_cost_is_one_minimum_command_frame_class(self) -> None: + """14 B body + 2 B cmd hdr + 8 B hop hdr = 24 B on air ≈ 15.4 ms at + DTS — the 84x-cheaper-than-a-keyframe claim rests on this size.""" + body = pack_tile_stale(0, list(range(96)), 96) + self.assertEqual(2 + len(body), 16) + + +class StaleScanTests(unittest.TestCase): + + def _canvas_with_keyframe(self, now_ms: int) -> Canvas: + c = Canvas(clock_ms=lambda: now_ms) + c._has_keyframe = True + return c + + def test_no_keyframe_reports_nothing(self) -> None: + c = Canvas(clock_ms=lambda: 50_000) + self.assertEqual(compute_stale_tiles(c, 50_000, 20_000), [], + "an unpopulated canvas has nothing to be stale") + + def test_fresh_tiles_not_reported(self) -> None: + c = self._canvas_with_keyframe(100_000) + for t in c._tiles: + t.arrived_ms = 95_000 + self.assertEqual(compute_stale_tiles(c, 100_000, 20_000), []) + + def test_stale_and_never_arrived_are_reported(self) -> None: + c = self._canvas_with_keyframe(100_000) + for t in c._tiles: + t.arrived_ms = 95_000 + c._tiles[5].arrived_ms = 70_000 # 30 s old > 20 s horizon + c._tiles[9].arrived_ms = 0 # never arrived post-keyframe + self.assertEqual(compute_stale_tiles(c, 100_000, 20_000), [5, 9]) + + def test_threshold_boundary_is_exclusive(self) -> None: + c = self._canvas_with_keyframe(100_000) + for t in c._tiles: + t.arrived_ms = 80_000 # exactly 20 s: NOT stale (>) + self.assertEqual(compute_stale_tiles(c, 100_000, 20_000), []) + + +if __name__ == "__main__": + unittest.main() diff --git a/LifeTrac-v25/DESIGN-CONTROLLER/base_station/web_ui.py b/LifeTrac-v25/DESIGN-CONTROLLER/base_station/web_ui.py index d4f07c6a..4c5bec25 100644 --- a/LifeTrac-v25/DESIGN-CONTROLLER/base_station/web_ui.py +++ b/LifeTrac-v25/DESIGN-CONTROLLER/base_station/web_ui.py @@ -1057,6 +1057,63 @@ def _on_mqtt_connect(_c, _u, _flags, rc): _image_publisher = StatePublisher(canvas=_image_canvas) _image_lock = threading.Lock() +# F10 (2026-08-01): receiver-driven stale-tile reporting. The canvas is +# PERSISTENT — a tile whose update is lost keeps showing the old blob until +# the encoder happens to resend it, and the encoder cannot know (its age +# escalation is encoder-side). The base is the only party that knows what +# arrived, so it reports staleness and the tractor treats the bitmap as +# advisory dirty marks. Semantics note: with tile-delta on a static scene +# the receiver cannot distinguish "static, nothing sent" from "sent and +# lost" — what makes age evidence of loss is the encoder's fair-share +# SWEEP, which re-ships every tile within its rotation period on a healthy +# link. STALE_AFTER_MS must therefore exceed the full sweep rotation +# (n_tiles / LIFETRAC_SWEEP_STEP frames at the current fps); marks are +# advisory, so a false positive merely re-ships one tile early. +_TILE_STALE_ENABLE = os.environ.get("LIFETRAC_TILE_STALE_ENABLE", "1") == "1" +_TILE_STALE_AFTER_MS = int(os.environ.get("LIFETRAC_TILE_STALE_AFTER_MS", + "20000")) +_TILE_STALE_PERIOD_S = float(os.environ.get("LIFETRAC_TILE_STALE_PERIOD_S", + "3.0")) +TILE_STALE_TOPIC = "lifetrac/v25/cmd/tile_stale" + + +def compute_stale_tiles(canvas, now_ms: int, stale_after_ms: int) -> list: + """Pure: indices of tiles that have not refreshed within the horizon. + + Only meaningful once a keyframe has populated the canvas; a tile with + arrived_ms == 0 after that point never arrived at all and counts as + stale too. + """ + if not canvas.has_keyframe: + return [] + out = [] + for idx, tile in enumerate(canvas._tiles): + arrived = tile.arrived_ms + if arrived == 0 or (now_ms - arrived) > stale_after_ms: + out.append(idx) + return out + + +def _tile_stale_worker() -> None: + from lora_proto import pack_tile_stale + while True: + time.sleep(_TILE_STALE_PERIOD_S) + try: + with _image_lock: + canvas = _image_canvas + now_ms = int(time.monotonic() * 1000) + stale = compute_stale_tiles(canvas, now_ms, + _TILE_STALE_AFTER_MS) + n_tiles = canvas.n_tiles + base_seq = getattr(canvas, "_last_base_seq", None) or 0 + if not stale: + continue + body = pack_tile_stale(base_seq, stale, n_tiles) + mqtt_client.publish(TILE_STALE_TOPIC, body, qos=0) + except Exception: + # Advisory path: never let a transient error kill the worker. + pass + def _publish_state_snapshot() -> None: loop = getattr(app.state, "loop", None) @@ -1128,6 +1185,9 @@ def _maybe_capture_params(topic: str, data: Any) -> None: # ---- routes ------------------------------------------------------------ @app.on_event("startup") async def _startup(): + if _TILE_STALE_ENABLE: + threading.Thread(target=_tile_stale_worker, + name="tile-stale", daemon=True).start() app.state.loop = asyncio.get_event_loop() diff --git a/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/Makefile b/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/Makefile index 1c73ce5e..81d64882 100644 --- a/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/Makefile +++ b/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/Makefile @@ -203,7 +203,7 @@ size: $(BUILD)/$(TARGET).elf @$(SIZE) -A -d $< @echo @echo "Region budgets (from include/memory_map.h):" - @echo " BOOT = 4 KB APP = 180 KB CFG = 8 KB Total = 192 KB" + @echo " APP = 184 KB (unified; boot merged, RS-5.8) CFG = 8 KB Total = 192 KB" @echo " RAM = 20 KB Stack reserved = 2.5 KB" # -------------------------------------------------------------------------- diff --git a/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/build/firmware.bin b/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/build/firmware.bin index 366dfcdb..de4304f6 100644 Binary files a/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/build/firmware.bin and b/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/build/firmware.bin differ diff --git a/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/build/firmware.elf b/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/build/firmware.elf index 9fec3bef..30001c5d 100644 Binary files a/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/build/firmware.elf and b/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/build/firmware.elf differ diff --git a/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/build/firmware.hex b/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/build/firmware.hex index 17fdf397..d450f218 100644 --- a/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/build/firmware.hex +++ b/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/build/firmware.hex @@ -4,13 +4,13 @@ :100020000000000000000000000000009D03000828 :1000300000000000000000009D03000865090008A2 :100040009D0300089D0300089D0300089D03000810 -:100050009D030008055000089D0300083D5000085E +:100050009D030008095000089D0300084150000856 :100060009D0300089D0300089D0300089D030008F0 :100070009D0300089D0300089D0300089D030008E0 :100080009D0300089D0300089D0300080000000078 :100090009D0300089D0300089D0300089D030008C0 -:1000A0009D0300089D0300089D030008BD31000862 -:1000B0009D030008DD3000089D0300089D03000833 +:1000A0009D0300089D0300089D030008C13100085E +:1000B0009D030008E13000089D0300089D0300082F :0400C0009D03000894 :1000C400A55AA55A5AA55AA500100E0000C201004F :0400D4008025000083 @@ -38,7 +38,7 @@ :10022800194352426346D34019437047002B11D1FA :10023800002A0FD1002900D1002802D00021C9438B :10024800080007B4024802A14018029003BDC04646 -:10025800A9FFFFFF03B4684601B5029804F008FF40 +:10025800A9FFFFFF03B4684601B5029804F00AFF3E :10026800019B9E4602B00CBC7047C04610B50029E1 :1002780003D100F007F8203002E0080000F002F88F :1002880010BDC0461C2101231B04984201D3000C59 @@ -60,11 +60,11 @@ :10038800042172460A4202D1EFF3088001E0EFF33C :10039800098015E030BFFDE707B5FFF799FF07486B :1003A80000F064FA002102200B000A00019100917C -:1003B80000F0A2FA00F098FA30BFFDE74E520008AC +:1003B80000F0A2FA00F098FA30BFFDE752520008A8 :1003C80073B504000600051E02D046698569C46934 :1003D800FFF77EFF074800F049FA002133002A00A2 :1003E80001200191009400F087FA00F07DFA30BFF7 -:1003F800FDE7C0464E5200087047000001221C4B22 +:1003F800FDE7C046525200087047000001221C4B1E :1004080010B519680A431A60042219681142FCD011 :100418000323184A11689943023B0B430C211360CC :1004280013680B40042BFBD1FFF752FF1248FFF76C @@ -72,35 +72,35 @@ :1004480010D30021114B124A93420ED3114800F0E9 :100458000DFA1148FFF782FFFFF7CEFF00F01EF8F4 :1004680030BFFDE701CA01C3E9E702C3ECE7C046B4 -:10047800001002400C1002405C5200086C52000848 -:10048800E859000800000020140000203000002077 -:10049800E01900207852000883520008F0B5654C36 -:1004A800A54400F0D3F805F0CDF900F00BF900F001 -:1004B8008FF9E120000302F081FC04F05FFC041EC8 -:1004C80000D1ABE003F0EAFC040004F078FB010083 +:10047800001002400C100240605200087052000840 +:10048800EC59000800000020140000203000002073 +:10049800E01900207C52000887520008F0B5654C2E +:1004A800A54400F0D3F805F0CFF900F00BF900F0FF +:1004B8008FF9E120000302F083FC04F061FC041EC4 +:1004C80000D1ABE003F0ECFC040004F07AFB01007F :1004D800200000F08BFF00F095F9059000F072F90C -:1004E800002805D000F06EF90100082001F002FC98 +:1004E800002805D000F06EF90100082001F004FC96 :1004F800002501272E00049503950195009500F02D -:1005080081F9040002F0B8F902F068FA02F004FB7D -:1005180002F0B6FD064302F0CFFD009BF6B2184389 +:1005080081F9040002F0BAF902F06AFA02F006FB77 +:1005180002F0B8FD064302F0D1FD009BF6B2184385 :10052800C3B20093019B002B07D1002E06D03100E7 -:10053800092001F0DFFB00F047FF0197002D08D1EB -:10054800009B002B06D019000C2001F0D3FB00F013 -:100558003BFF3D00049B002B0ED102F03DFD00281F -:100568000BD002F039FDFF2800D9FF20C1B20B20C3 -:1005780001F0C0FB00F028FF0497039B002B11D16A +:10053800092001F0E1FB00F047FF0197002D08D1E9 +:10054800009B002B06D019000C2001F0D5FB00F011 +:100558003BFF3D00049B002B0ED102F03FFD00281D +:100568000BD002F03BFDFF2800D9FF20C1B20B20C1 +:1005780001F0C2FB00F028FF0497039B002B11D168 :10058800019B002B0FD1059B2B4AE31A93420AD9F2 -:1005980002F00AFD002806D101990A3001F0AAFBF1 -:1005A80000F012FF039702F05FFD002803D000213E -:1005B800062001F09FFB4EA802F018FB002835D159 -:1005C80004F010FD029001F039FB029806A904F02E -:1005D8009FF9002802D006A801F034FB04F000FAC5 -:1005E800002808D1029808A903F038FD002802D095 -:1005F80008A801F08DFB01F03DFB200003F03EFE52 -:10060800200003F043FE200003F0F2FD00F050FD4F -:100618000178200001F026FD30BF70E701000320BB -:1006280001F068FB054800F021F94EE74EA800F0FC -:1006380045FFC0E784FDFFFFB70B0000925200089A +:1005980002F00CFD002806D101990A3001F0ACFBED +:1005A80000F012FF039702F061FD002803D000213C +:1005B800062001F0A1FB4EA802F01AFB002835D155 +:1005C80004F012FD029001F03BFB029806A904F02A +:1005D800A1F9002802D006A801F036FB04F002FABF +:1005E800002808D1029808A903F03AFD002802D093 +:1005F80008A801F08FFB01F03FFB200003F040FE4C +:10060800200003F045FE200003F0F4FD00F050FD4B +:100618000178200001F028FD30BF70E701000320B9 +:1006280001F06AFB054800F021F94EE74EA800F0FA +:1006380045FFC0E784FDFFFFB70B00009652000896 :10064800014B18687047C0460400002010B51348D5 :100658000378002B20D1124903330A68940012D47E :10066800013B54000FD40233D4000CD4023354019C @@ -156,32 +156,32 @@ :100988000A430006597910431A79090211439A79E2 :1009980012040A43D9790906114370470023064A0D :1009A8001901515C814205D00133192BF8D101207E -:1009B800404270471800FCE7A4520008030010B535 -:1009C8000220012903D1187804F018F9002010BD7D +:1009B800404270471800FCE7A8520008030010B531 +:1009C8000220012903D1187804F01AF9002010BD7B :1009D80010B500F06DFB041E07D0007800F056FA41 :1009E8001422617DA25600F06FFA10BDF0B51A4BC3 :1009F8008DB01A4C1A4D019323786778AE1C2B7072 -:100A0800082200216F70300004F00CFC21003A002D -:100A18003000083104F00EFC019B10340A359C426A -:100A2800EAD100240021282202A804F0FBFB02AB33 +:100A0800082200216F70300004F00EFC21003A002B +:100A18003000083104F010FC019B10340A359C4268 +:100A2800EAD100240021282202A804F0FDFB02AB31 :100A3800FF221C70002320000492059300F030FA76 :100A480002AA084B06901000938200F0A5FA064B04 -:100A58001C700DB0F0BDC04634540008A452000804 +:100A58001C700DB0F0BDC04638540008A8520008FC :100A68003900002002110000380000200023F0B5F2 :100A780093B007000D00160004930593069307939F :100A8800FFF78CFF01240190002800DAF6E0A44B60 :100A980002019B18DA7805340292D20700D5EDE0FE :100AA8005B78043CB34200D0E8E0002D00D1E5E0DB -:100AB8003200290004A804F0BDFB781E13281CD8B6 +:100AB8003200290004A804F0BFFB781E13281CD8B4 :100AC800FFF706FB0A44444A4444824444515664AE :100AD8006A441B72771B7D8804AB1B78012B31D8C5 :100AE800022304AA1370FFF773FF002805D004AB94 :100AF8001B78834201D904AB18700A25019B320088 -:100B08005D43884B06A8ED18290004F093FB3200DA -:100B1800280004A904F08EFB814B0393019B1F015D +:100B08005D43884B06A8ED18290004F095FB3200D8 +:100B1800280004A904F090FB814B0393019B1F015B :100B2800039BDB195B68002B00D1E1E03100280052 :100B38009847041E00D1DBE03200280006A904F023 -:100B480079FB9BE0112BCED91123CAE704AB1B78A4 +:100B48007BFB9BE0112BCED91123CAE704AB1B78A2 :100B5800012BD2D9032491E004AB1B787833DBB2A4 :100B6800782BCAD9F6E704AB1B78072BC5D9F1E770 :100B78009622049B92019342BFD0E12252029342F3 @@ -191,7 +191,7 @@ :100BB800F6E704AB1B78013B092B9ED9CAE704ABC7 :100BC8001B885B4A323BEBE704A8FFF7D1FE0843DA :100BD80093D1BFE704AB1B78022BBBD808AF282200 -:100BE8000021380004F01EFB04AB1878387000F0C0 +:100BE8000021380004F020FB04AB1878387000F0BE :100BF80057F90C900720FFF7D1FE002800DA75E0BE :100C08000A2460434B4D02304019FFF7B1FE0A90A9 :100C18000B911520FFF7C2FE002867DB60432818F8 @@ -204,31 +204,31 @@ :100C8800F0BD00F0C1F90028F3D1FFF7A1FE07007D :100C98000120FFF783FE041E28DB002F26D00A223E :100CA80013004343EB1899780B1CB94200D93B1C3D -:100CB8006243D8B21700AA18937003F09FFF1E4B27 +:100CB8006243D8B21700AA18937003F0A1FF1E4B25 :100CC80003931B78002B00D017E7154B24011A1942 -:100CD800023708345278E118E81904F095FA002828 +:100CD800023708345278E118E81904F097FA002826 :100CE80000D10AE70123039A137006E70424C5E735 :100CF800114C2378002B0AD1039B083732002800B7 -:100D0800D91904F081FA002801D0012323700223A5 +:100D0800D91904F083FA002801D0012323700223A3 :100D1800029C029A1C401A42B0D00524AEE7C04695 -:100D2800A45200083B000020561300007E13000068 +:100D2800A85200083B000020561300007E13000064 :100D38009E0700003900002038000020F7B51E008B :100D480007000C000192FFF729FE03000120002B89 :100D580013DB0018002C10D0002E0ED00C4A1901FD :100D680052185578019A954207D8822F06D1012545 :100D7800084B1B78237000203570FEBD0A215943AB -:100D8800054B2A002000C91804F054FAF3E7C046BE -:100D9800A4520008380000203B000020F8B50300EA +:100D8800054B2A002000C91804F056FAF3E7C046BC +:100D9800A8520008380000203B000020F8B50300E6 :100DA8000C00002841D0081E3FD01F00FF3779787B :100DB80000200D001035954237D82170BA781E00F2 :100DC80062701A00FE320421525EFC36A27092B2A2 :100DD800120AE270B268110A22716171110C120EC6 :100DE800A171E2717A78824204D02000190008309B -:100DF80004F020FA7D78797D2B000833E01800296B +:100DF80004F022FA7D78797D2B000833E018002969 :100E080014D0012202707A7A04334270BA7AE41854 :100E180082707A7CC27033691A0A237062701A0C65 :100E28001B0EA270E37028001030F8BD082204F0F1 -:100E3800F9F9F8E703001000012B08D10A00803AFD +:100E3800FBF9F8E703001000012B08D10A00803AFB :100E4800D2B2012A01D985290ED118000CE0002A56 :100E58000AD00020402B07D8252B06D8092B0BD801 :100E6800053098428041404270470748263BDBB234 @@ -236,8 +236,8 @@ :100E88009A424041C0B2EFE7012822040300112032 :100E9800002B04D0013B0020012B00D81E307047E6 :100EA80003000020022B02D8014A9B009858704783 -:100EB8004054000803000420092B01D8014AD05CE3 -:100EC8007047C046345400080023062A01DD063A5C +:100EB8004454000803000420092B01D8014AD05CDF +:100EC8007047C046385400080023062A01DD063A58 :100ED80053B2C01A884200DD0800012800DC002057 :100EE800C0B27047F8B505000E00092400281AD0D2 :100EF8000478022C41D81427C757FBB21E2B3ED8C2 @@ -251,22 +251,22 @@ :100F78001343D8D02C69074BE8E70124D3E70524AD :100F8800D1E70624CFE70324CDE70724CBE7C04603 :100F9800702FFCFFE05EF8FF70B50B4D04000100F8 -:100FA80028222800002C0AD004F044F92822002125 -:100FB800064804F037F90022054B1A7070BD04F09A -:100FC80031F92C70F2E7C04660010020380100209A +:100FA80028222800002C0AD004F046F92822002123 +:100FB800064804F039F90022054B1A7070BD04F098 +:100FC80033F92C70F2E7C046600100203801002098 :100FD8003301002070B50500FFF784FF2822041EA6 -:100FE800074807D0002104F01DF90023054A200016 -:100FF800137070BD290004F01DF90123F6E7C046FF +:100FE800074807D0002104F01FF90023054A200014 +:100FF800137070BD290004F01FF90123F6E7C046FD :10100800380100203301002073B5244D08202B78C7 :10101800002B24D0224C234E28223100200004F03B -:1010280009F902F0EAFE2378012B19D1226A636AD2 -:10103800A069E1690024009402F06CFB0522FA2102 -:10104800072003F097FE184802F024F903F064F92A -:1010580028220021300004F0E5F80020287076BD31 -:10106800022B0DD102F04CFB03F056F9FA210720B0 -:101078000522490003F07EFE0C4802F00BF9E7E771 -:10108800002BE5D102F03CFB03F046F907200522CE -:10109800FA2103F06FFE0448EFE7C0463301002051 +:101028000BF902F0ECFE2378012B19D1226A636ACE +:10103800A069E1690024009402F06EFB0522FA2100 +:10104800072003F099FE184802F026F903F066F924 +:1010580028220021300004F0E7F80020287076BD2F +:10106800022B0DD102F04EFB03F058F9FA210720AC +:101078000522490003F080FE0C4802F00DF9E7E76D +:10108800002BE5D102F03EFB03F048F907200522CA +:10109800FA2103F071FE0448EFE7C046330100204F :1010A8006001002038010020801A0600F07E0E0042 :1010B800004870476001002070B5050004A8067854 :1010C800059C181E0BD0201E09D00020032E06D91F @@ -279,35 +279,35 @@ :101138001843D3781B06184310BD0B0A017043707F :101148000B0C090E8370C17070470000F0B5C188A0 :101158000400C7B0012908D80223027841788088A2 -:101168000093013301F094FD53E00C25037A05AE9A +:101168000093013301F096FD53E00C25037A05AE98 :101178003370427A02ABFF35ED18931C6A709942BE :1011880005D002784178808800930323EAE7002A93 -:1011980006D001000D2002AB0A31C01804F04AF84D +:1011980006D001000D2002AB0A31C01804F04CF84B :1011A8001D4F3B78002B0BD0A3883D780393032D6C :1011B8001AD9002322786178039800930733D1E77E -:1011C80003F00EFC0028EFD1687803F011FC00282A -:1011D800EAD1300003F0F4F9031E1AD122786178BD +:1011C80003F010FC0028EFD1687803F013FC002826 +:1011D800EAD1300003F0F6F9031E1AD122786178BB :1011E800A08800930833BDE703220C4B0C4C1B78F6 :1011F8003100EB1813400232FF3253430222E41845 -:101208002000FF3204F016F8039BFE340135A3805A +:101208002000FF3204F018F8039BFE340135A38058 :101218003D7047B0F0BDC04688010020890100201C -:101228008A01002010B5024801F020FD10BDC0461B -:10123800825700080F2307B51840030037330928E1 +:101228008A01002010B5024801F022FD10BDC04619 +:10123800865700080F2307B51840030037330928DD :1012480000D8073B6A461371002301A8537101F0C7 -:101258000DFD07BD30B5040089B002AD182200218C -:10126800280003F0DFFF2388616803A82B80FFF7BD +:101258000FFD07BD30B5040089B002AD182200218A +:10126800280003F0E1FF2388616803A82B80FFF7BB :1012780064FFA16804A8FFF760FFE16805A8FFF70D :101288005CFF216906A8FFF758FFFFF7BBFA0100CA :1012980007A8FFF752FF0022182311000093F1203E -:1012A8002B0001F0CDFC09B030BD0000F0B50024E2 -:1012B80085B0050001AEA04206D1124801F0D6FC67 +:1012A8002B0001F0CFFC09B030BD0000F0B50024E0 +:1012B80085B0050001AEA04206D1124801F0D8FC65 :1012C80005B0F0BD0A2C0FD028000A21FEF790FFC8 :1012D8003031A15528000A21FEF704FF2F00013400 :1012E8000500092FEED8E4B26A46013CE4B2335D4A -:1012F800684613700023537001F0B8FC002CF3D13A -:10130800DEE7C0465556000810B50C0001F0AEFCEB -:10131800034801F0ABFC2000FFF7C8FF10BDC04632 -:101328003E550008F0B50027BEB2B14204D9C45DED +:1012F800684613700023537001F0BAFC002CF3D138 +:10130800DEE7C0465956000810B50C0001F0B0FCE5 +:10131800034801F0ADFC2000FFF7C8FF10BDC04630 +:1013280042550008F0B50027BEB2B14204D9C45DE9 :10133800202C11D0092C0FD04C1E0419B1420DD805 :101348000024C719135D301980B2002B0FD1081A79 :1013580043425841C0B2F0BD0137E5E72578202D5A @@ -315,1132 +315,1132 @@ :101378000FD93D5D28006138192801D8203DEDB20C :1013880018006138192801D8203BDBB20134AB4280 :10139800D8D00020DFE7000070B5094C200001F02C -:1013A80065FC084D280001F061FC200001F05EFC9E -:1013B800280001F05BFC200001F058FC70BDC0461D -:1013C800555600084C54000800B5A5B0842103A860 -:1013D80000F0E2FE002806D0002200901100C12093 -:1013E80003AB01F02DFC25B000BD0000F0B50025D1 +:1013A80067FC084D280001F063FC200001F060FC98 +:1013B800280001F05DFC200001F05AFC70BDC04619 +:1013C800595600085054000800B5A5B0842103A858 +:1013D80000F0E4FE002806D0002200901100C12091 +:1013E80003AB01F02FFC25B000BD0000F0B50025CF :1013F800274B284F284E1D70284B8BB031701D701D -:101408003870FFF7F3FA00F053FE2548FFF72EFA7D +:101408003870FFF7F3FA00F055FE2548FFF72EFA7B :10141800FFF74AF93B7805AC637033782070A37006 :101428000123E370DB182371FFF7CCF90623607101 -:101438002A00F02000932900230001F001FC20007D +:101438002A00F02000932900230001F003FC20007B :10144800FFF76EFAA84205D01648FFF70FFA2000FA :10145800FFF700FF1448FFF709FA144B0022039323 :101468007F230493773B1100F220009303AB01F034 -:10147800E7FBFFF7A7F9002807D10D48FFF7F6F9B2 +:10147800E9FBFFF7A7F9002807D10D48FFF7F6F9B0 :101488000C48FFF7F3F90BB0F0BD0B48F6E7C04680 :10149800890100209B0500209A0500208801002072 -:1014A8004E5400085C5400086B5400080101020106 -:1014B8007A5400089A5400088A540008F0B50400C9 -:1014C800ABB0002800D197E0BD48FFF7CFF92278EC -:1014D800012A0AD0BB48FFF7C9F9012322786178AD -:1014E800A088009301F0D4FB86E06178202900D120 -:1014F800E1E010D8032906D8481E02282FD8FEF7A5 +:1014A80052540008605400086F54000801010201FA +:1014B8007E5400089E5400088E540008F0B50400BD +:1014C800ABB0002800D197E0BE48FFF7CFF92278EB +:1014D800012A0AD0BC48FFF7C9F9012322786178AC +:1014E800A088009301F0D6FB86E06178202900D11E +:1014F800E2E010D8032906D8481E02282FD8FEF7A4 :10150800E7FD3B7D9500102900D192E0A0880223D9 :1015180001220091E6E7312900D1A5E00BD8212965 -:1015280000D10CE13029F1D1E388012B00D18DE005 -:10153800A0880092CEE0402900D17EE04129E5D183 -:10154800842109A800F028FE0300A088002B00D001 -:1015580076E08433227861780093813BC2E79A4829 +:1015280000D10DE13029F1D1E388012B00D18DE004 +:10153800A0880092CFE0402900D17EE04129E5D182 +:10154800842109A800F02AFE0300A088002B00D0FF +:1015580076E08433227861780093813BC2E79B4828 :10156800FFF784F9E0882300A278A1880090002082 -:10157800083301F065FB3FE09448FFF777F9042052 -:1015880001F08CFD924B18000493FEF799FE0500BC -:10159800904B2F1C1800EDB20593FEF791FE282DF5 +:10157800083301F067FB3FE09548FFF777F904204F +:1015880001F08EFD934B18000493FEF799FE0500B9 +:10159800914B2F1C1800EDB20593FEF791FE282DF4 :1015A80000D92827031CC0B2FFB2102800D9102385 -:1015B800DAB20392884A09AD00260992AB717F23FB +:1015B800DAB20392894A09AD00260992AB717F23FA :1015C8003A006F710C3704992E71EE71FFB20CA8B6 -:1015D8000B9303F02FFE039A0599E81903F02AFEEE +:1015D8000B9303F031FE039A0599E81903F02CFEEA :1015E800039B8120DF19A1882B003200009701F0AE -:1015F80027FB082001F052FD2BB0F0BD774B09A85E -:101608001968774B1E68774B1D68FFF796FD310008 +:1015F80029FB082001F054FD2BB0F0BD784B09A859 +:101608001968784B1E68784B1D68FFF796FD310006 :101618000AA8FFF792FD29000BA8FFF78EFD0C23FF :10162800A18800220093822009ABA2E7FFF75CF9AA -:10163800E2E72000FFF78AFDDEE700F039FDDBE78F +:10163800E2E72000FFF78AFDDEE700F03BFDDBE78D :10164800010000930022C12009AB92E7207A04AB85 -:10165800187503F063FA04AB58750223A1880022B9 +:10165800187503F065FA04AB58750223A1880022B7 :101668000093B02009AB84E7E388022B04D002235F -:10167800A0880093013335E7617A207AFFF7DAFB17 -:10168800237A002805D122786178A088009308235E -:1016980028E71800617A03F053FA237A012B02D164 -:1016A800607A02F089FB02222300A188B12000920F -:1016B800083300225DE70E2704ABFF1800233B70B8 -:1016C800E0880128D3D9637A267A9D1CA84203D0E2 -:1016D800A0880095032305E721001A0030000A318D -:1016E800FFF7C4F9051E03D0031FDBB2012B09D88D -:1016F8003B000822300009A9FFF720FB002801D091 -:1017080000233B703A780F2704ABFF180423290005 -:101718000093300008AB0197FFF7CEFC0300A088C8 -:10172800002B05D10433227861780093013BD9E678 -:101738003B78009308AB01000022A02019E70F2690 -:1017480004ABF61800233370E388012B00D0EFE6D2 -:101758001621277A04A80918330008223800FFF751 -:10176800EDFA08AD01000A2300280ED000930022EC -:1017780009AB38000195FFF79FFC0300A088002BF8 -:10178800D0D02B78009309ABD5E7162104A832787E -:1017980009180093380009AB0195FFF7A1FC030075 -:1017A800A088002B05D13378227802336178009322 -:1017B80090E72B78010000930022A12009ABD8E61E -:1017C800A8540008B5540008C1540008CA540008B9 -:1017D800D7540008F1540008010200005000F81F17 -:1017E8005400F81F5800F81F70B504000D00A2B08F -:1017F800002806D0DE4AFFF795FD002803D0FFF742 -:1018080011FD22B070BD29002000DA4AFFF78AFDD9 -:10181800002812D0D84801F029FAD84C200001F04D -:1018280025FAFFF7B9FD200001F020FAD44801F0AD -:101838001DFAD44801F01AFAE1E729002000D24A3B -:10184800FFF770FD002830D0D048FFF70FF81020C0 -:1018580001F024FCCE4801F009FAC74801F006FA65 -:10186800CC4801F003FAFFF797FDCB4801F0FEF9E9 -:10187800C34801F0FBF9C94801F0F8F90120FFF766 -:1018880015FDC74801F0F2F90220FFF70FFDC54822 -:1018980001F0ECF91C247F252800E040043CC0B28C -:1018A800FFF7C8FC231DF7D1C3E729002000BE4A73 -:1018B800FFF738FD061E27D0842101A800F06CFC34 -:1018C800842801D0B9484FE1B94801F0CFF9B94BA4 -:1018D800B9481B78002B00D0B84801F0C7F9B848C0 -:1018E80001F0C4F9B74B1C782009FFF7A3FC2000CE -:1018F800FFF7A0FCB44801F0B9F9402101A8FFF7AF -:101908000EFCFFF7D3FC94E729002000AF4AFFF74D -:1019180009FD002800D10EE1842101A800F03CFC5B -:101928008428CFD1310001A8FFF7F9FBA84B0100AB -:101938001800FFF7E9FC914C200001F097F9042109 -:1019480001A8FFF7ECFBA34B01001800FFF7DCFC34 -:10195800200001F08BF9082101A8FFF7E0FB9E4B5E -:1019680001001800FFF7D0FC864D280001F07EF931 -:101978000C2101A8FFF7D3FB984B01001800FFF7D3 -:10198800C3FC200001F072F9102101A8FFF7C7FB82 -:10199800934B01001800FFF7B7FC200001F066F92F -:1019A800142101A8FFF7BBFB8E4B01001800FFF7BD -:1019B800ABFC200001F05AF9182101A8FFF7AFFB92 -:1019C800894B01001800FFF79FFC280001F04EF931 -:1019D800442101A8FFF7A3FB844B01001800FFF77F -:1019E80093FC200001F042F9482101A8FFF797FB7A -:1019F8007F4B01001800FFF787FC200001F036F943 -:101A08004C2101A8FFF78BFB7A4B01001800FFF768 -:101A18007BFC280001F02AF9502101A8FFF77FFB81 -:101A2800754B01001800FFF76FFC200001F01EF94C -:101A3800542101A8FFF773FB704B01001800FFF752 -:101A480063FC200001F012F9582101A8FFF767FB99 -:101A58006B4B01001800FFF757FC200001F006F956 -:101A68005C2101A8FFF75BFB664B01001800FFF73C -:101A78004BFC280001F0FAF81C2101A8FFF74FFBE6 -:101A8800614B01001800FFF73FFC200001F0EEF861 -:101A9800202101A8FFF743FB5C4B01001800FFF76A -:101AA80033FC200001F0E2F8242101A8FFF737FBFE -:101AB800574B01001800FFF727FC200001F0D6F86B -:101AC800282101A8FFF72BFB524B01001800FFF754 -:101AD8001BFC280001F0CAF8302101A8FFF71FFB02 -:101AE8004D4B01001800FFF70FFC200001F0BEF875 -:101AF800342101A8FFF713FB484B01001800FFF73A -:101B080003FC200001F0B2F82C2101A8FFF707FB25 -:101B1800434B01001800FFF7F7FB200001F0A6F87F -:101B2800402101A8FFF7FBFA3E4B01001800FFF720 -:101B3800EBFB28007EE6290020003B4AFFF7F2FB7A -:101B4800002806D129002000384AFFF7EBFB0028BF -:101B580001D037486EE629002000364AFFF7E2FB3D -:101B6800002800D1AEE6344801F080F849E6C046C6 -:101B7800FA540008FD540008D7540008015500081D -:101B8800F154000831570008035500080B550008A8 -:101B98001B5500081F550008295500082F55000837 -:101BA80037550008405500084855000852550008A8 -:101BB8005A5500089B050020F554000810560008E7 -:101BC800615500089A0500206D55000875550008F4 -:101BD8007E5500088B55000897550008A755000842 -:101BE800B5550008C1550008CD550008D95500085D -:101BF800E7550008F6550008055600081356000872 -:101C080022560008375600084C5600085756000858 -:101C1800625600086D560008785600088456000879 -:101C2800905600089E560008A4560008AC560008B6 -:101C3800B5560008E8560008EF56000810B500F041 -:101C480089FA10BD1FB5041E12D0038841680A2006 -:101C58006A4668441381FFF770FA6A46A3789020B1 -:101C68009373072300220093110002AB00F0E8FFF2 -:101C78001FBD0000F0B5C5B01B4E3378002B01D155 -:101C880045B0F0BD02F0ACFE0028F9D18222174F12 -:101C980052003B78164D5343EB18FF33587802F047 -:101CA800A7FE0028ECD1822302223C785B00634324 -:101CB800ED182900FF3203A803F0BCFA032301340E -:101CC8001C403378FE35013B03A8AD883C70337067 -:101CD80002F076FC0028D3D10090082301221021BD -:101CE800280000F0D5FFC7E78801002089010020FF -:101CF8008A0100207FB56B4618715971002301A82D -:101D08000293039304930593FFF7A4FA07B000BD69 -:101D180000B5C7B000280DD0882202A95200FFF7ED -:101D28003DF8002806D0002200901100912002AB57 -:101D380000F086FF47B000BD030010B500282BD087 -:101D4800081E29D0012008701A784A705A788A70BB -:101D58009A78CA70DA780A715A68140A4A718C71CA -:101D6800140C120ECC710A729A68140A4A728C7298 -:101D7800140C120ECC720A73DA68140A4A738C7344 -:101D8800140C120E0A74CC731B691A0A4B748A74E9 -:101D98001A0C1B0ECA740B7510BD0000002804D065 -:101DA800FF2803D0431E052B01D970470720044A9A -:101DB8004000835A03498B42F7D001338352F4E73A -:101DC8009E050020FFFF000010B500280AD0020081 -:101DD8000021054B10321C88048002301980023320 -:101DE8009042F8D110BDC0469E050020054A06491C -:101DF80013888B4201D001331380002801D0034B94 -:101E0800187070479C050020FFFF000008000020A4 -:101E1800F0B58BB00E00141E039003D100252800E6 -:101E28000BB0F0BD100004A9FFF786FF051EF5D022 -:101E380067783800FFF7B2FF002F02D1A07801F0D1 -:101E480049FD6078FFF7D2FF152332000093C320C5 -:101E5800039904AB00F0F4FEE1E700000021044A16 -:101E680013881180181CFF2B00D9FF20C0B27047BF -:101E78009C050020FF22024B18781A707047C04654 -:101E8800080000200300F0B500286AD0081E68D0BA -:101E980001220A705A784A709A788A70DA78CA7079 -:101EA8001A790A715A794A7100228A71CA719A6834 -:101EB800100A0A724872100C120E8872CA72DA6816 -:101EC800100A0A734873100C120E8873CA731A69C1 -:101ED800100A0A744874100C120ECA7414228874FA -:101EE800985C88540132462AFAD14C1C985A885476 -:101EF800000AA0540232AA2AF8D1985A8854000A33 -:101F0800A0540232BA2AF8D11A00BA3210780A005C -:101F1800BA3210701A00BB3210780A00BB32107047 -:101F2800BC331A780B000C0008000826BC331A7062 -:101F38000C4D0D4BBD3402781202534032001FB2D3 -:101F48005B009BB2002F00DA6B40013AD2B2002A44 -:101F5800F5D101308442EED101202370BE311B0A35 -:101F68000B70F0BD21100000FFFF0000F0B5384CE9 -:101F78000500A5440392022234ACFF32A3700F007F -:101F8800228001F079FC0023E070322802D8323335 -:101F98001B1ADBB22371FFF76DFF0026039B6071EC -:101FA800A76039A864AFE680E560236101F0A2FC70 -:101FB800380001F06BFE7300FB58181E0AD0254A42 -:101FC8009818FA239B0498423FD2FA218900FEF719 -:101FD80089F880B2872302AA5B009B1898530236BF -:101FE800642EE8D1B92040008018FFF7EDFEFFF716 -:101FF80035FFC12302AA5B009B1818708423164E74 -:1020080002A93278FF335B181A70144B200003932F -:102018001B7863AF04A93B70FFF734FF041E0FD091 -:10202800BF233A78C4200093A9B204AB00F008FE9D -:102038000023039A13703378FF2B01D001333370D8 -:102048002000A5239B009D44F0BD0548C2E7C0467B -:102058006CFDFFFFE7030000B80500200900002021 -:10206800FFFF000070B50B4E0B0032680A490400F0 -:10207800821A8A4201D8002070BD084D01002868E4 -:10208800FFF774FF0028F6D02B68346001332B600B -:10209800F2E7C046B40500205FEA0000B005002062 -:1020A8000B0A017043700B0C090E8370C1707047E6 -:1020B80000230B4A10B513600A4A13600A4A1360DA +:10167800A0880093013335E70022617A207AFFF7CA +:10168800D9FB237A002805D122786178A0880093B5 +:10169800082327E71800617A03F054FA237A012B0C +:1016A80002D1607A02F08AFB02222300A188B120CD +:1016B8000092083300225CE70E2704ABFF180023D2 +:1016C8003B70E0880128D2D9637A267A9D1CA8420B +:1016D80003D0A0880095032304E721001A003000F6 +:1016E8000A31FFF7C3F9051E03D0031FDBB2012B34 +:1016F80009D83B000822300009A9FFF71FFB002882 +:1017080001D000233B703A780F2704ABFF1804235D +:1017180029000093300008AB0197FFF7CDFC0300C8 +:10172800A088002B05D10433227861780093013B0F +:10173800D8E63B78009308AB01000022A02018E708 +:101748000F2604ABF61800233370E388012B00D072 +:10175800EEE61621277A04A8091833000822380073 +:10176800FFF7ECFA08AD01000A2300280ED0009319 +:10177800002209AB38000195FFF79EFC0300A08802 +:10178800002BD0D02B78009309ABD5E7162104A8FD +:10179800327809180093380009AB0195FFF7A0FCCF +:1017A8000300A088002B05D13378227802336178B2 +:1017B800009390E72B78010000930022A12009AB49 +:1017C800D7E6C046AC540008B9540008C554000810 +:1017D800CE540008DB540008F5540008010200004C +:1017E8005000F81F5400F81F5800F81F70B5040087 +:1017F8000D00A2B0002806D0DE4AFFF793FD0028AE +:1018080003D0FFF70FFD22B070BD29002000DA4A8F +:10181800FFF788FD002812D0D84801F029FAD84CE3 +:10182800200001F025FAFFF7B7FD200001F020FAAB +:10183800D44801F01DFAD44801F01AFAE1E729006A +:101848002000D24AFFF76EFD002830D0D048FFF7BD +:101858000DF8102001F024FCCE4801F009FAC74821 +:1018680001F006FACC4801F003FAFFF795FDCB48E2 +:1018780001F0FEF9C34801F0FBF9C94801F0F8F995 +:101888000120FFF713FDC74801F0F2F90220FFF726 +:101898000DFDC54801F0ECF91C247F252800E04027 +:1018A800043CC0B2FFF7C6FC231DF7D1C3E72900EB +:1018B8002000BE4AFFF736FD061E27D0842101A866 +:1018C80000F06CFC842801D0B9484FE1B94801F018 +:1018D800CFF9B94BB9481B78002B00D0B84801F0B4 +:1018E800C7F9B84801F0C4F9B74B1C782009FFF7CD +:1018F800A1FC2000FFF79EFCB44801F0B9F9402193 +:1019080001A8FFF70CFCFFF7D1FC94E729002000A1 +:10191800AF4AFFF707FD002800D10EE1842101A896 +:1019280000F03CFC8428CFD1310001A8FFF7F7FB79 +:10193800A84B01001800FFF7E7FC914C200001F0CC +:1019480097F9042101A8FFF7EAFBA34B010018004F +:10195800FFF7DAFC200001F08BF9082101A8FFF756 +:10196800DEFB9E4B01001800FFF7CEFC864D2800D9 +:1019780001F07EF90C2101A8FFF7D1FB984B01007B +:101988001800FFF7C1FC200001F072F9102101A82E +:10199800FFF7C5FB934B01001800FFF7B5FC2000CB +:1019A80001F066F9142101A8FFF7B9FB8E4B01007D +:1019B8001800FFF7A9FC200001F05AF9182101A826 +:1019C800FFF7ADFB894B01001800FFF79DFC2800CD +:1019D80001F04EF9442101A8FFF7A1FB844B010057 +:1019E8001800FFF791FC200001F042F9482101A8F6 +:1019F800FFF795FB7F4B01001800FFF785FC2000DF +:101A080001F036F94C2101A8FFF789FB7A4B010058 +:101A18001800FFF779FC280001F02AF9502101A8E5 +:101A2800FFF77DFB754B01001800FFF76DFC2000E8 +:101A380001F01EF9542101A8FFF771FB704B01005A +:101A48001800FFF761FC200001F012F9582101A8E5 +:101A5800FFF765FB6B4B01001800FFF755FC2000F2 +:101A680001F006F95C2101A8FFF759FB664B01005C +:101A78001800FFF749FC280001F0FAF81C2101A81A +:101A8800FFF74DFB614B01001800FFF73DFC2000FC +:101A980001F0EEF8202101A8FFF741FB5C4B0100A3 +:101AA8001800FFF731FC200001F0E2F8242101A81A +:101AB800FFF735FB574B01001800FFF725FC200006 +:101AC80001F0D6F8282101A8FFF729FB524B0100A5 +:101AD8001800FFF719FC280001F0CAF8302101A806 +:101AE800FFF71DFB4D4B01001800FFF70DFC200010 +:101AF80001F0BEF8342101A8FFF711FB484B0100A3 +:101B08001800FFF701FC200001F0B2F82C2101A811 +:101B1800FFF705FB434B01001800FFF7F5FB20001A +:101B280001F0A6F8402101A8FFF7F9FA3E4B0100A1 +:101B38001800FFF7E9FB28007EE6290020003B4A51 +:101B4800FFF7F0FB002806D129002000384AFFF7EC +:101B5800E9FB002801D037486EE629002000364A04 +:101B6800FFF7E0FB002800D1AEE6344801F080F82A +:101B780049E6C046FE54000801550008DB54000839 +:101B880005550008F55400083557000807550008A2 +:101B98000F5500081F550008235500082D5500084B +:101BA800335500083B550008445500084C550008BB +:101BB800565500085E5500089B050020F95400089A +:101BC80014560008655500089A050020715500084C +:101BD80079550008825500088F5500089B55000864 +:101BE800AB550008B9550008C5550008D15500087F +:101BF800DD550008EB550008FA550008095600089D +:101C080017560008265600083B560008505600088C +:101C18005B56000866560008715600087C56000896 +:101C28008856000894560008A2560008A8560008CE +:101C3800B0560008B9560008EC560008F3560008DC +:101C480010B500F089FA10BD1FB5041E12D0038824 +:101C580041680A206A4668441381FFF76EFA6A46AB +:101C6800A37890209373072300220093110002ABFE +:101C780000F0E8FF1FBD0000F0B5C5B01B4E33787B +:101C8800002B01D145B0F0BD02F0ACFE0028F9D11F +:101C98008222174F52003B78164D5343EB18FF33FF +:101CA800587802F0A7FE0028ECD1822302223C7863 +:101CB8005B006343ED182900FF3203A803F0BCFA68 +:101CC800032301341C403378FE35013B03A8AD885B +:101CD8003C70337002F076FC0028D3D100900823C2 +:101CE80001221021280000F0D5FFC7E78801002055 +:101CF800890100208A0100207FB56B46187159714F +:101D0800002301A80293039304930593FFF7A2FA13 +:101D180007B000BD00B5C7B000280DD0882202A9C1 +:101D28005200FFF73BF8002806D00022009011006F +:101D3800912002AB00F086FF47B000BD030010B54C +:101D480000282BD0081E29D0012008701A784A7064 +:101D58005A788A709A78CA70DA780A715A68140AB6 +:101D68004A718C71140C120ECC710A729A68140A9A +:101D78004A728C72140C120ECC720A73DA68140A46 +:101D88004A738C73140C120E0A74CC731B691A0AEA +:101D98004B748A741A0C1B0ECA740B7510BD0000A4 +:101DA800002804D0FF2803D0431E052B01D9704713 +:101DB8000720044A4000835A03498B42F7D0013375 +:101DC8008352F4E79E050020FFFF000010B50028AD +:101DD8000AD002000021054B10321C880480023012 +:101DE800198002339042F8D110BDC0469E050020EC +:101DF800054A064913888B4201D001331380002815 +:101E080001D0034B187070479C050020FFFF0000AD +:101E180008000020F0B58BB00E00141E039003D10B +:101E2800002528000BB0F0BD100004A9FFF786FFBD +:101E3800051EF5D067783800FFF7B2FF002F02D1F2 +:101E4800A07801F049FD6078FFF7D2FF1523320032 +:101E58000093C320039904AB00F0F4FEE1E700000F +:101E68000021044A13881180181CFF2B00D9FF2079 +:101E7800C0B270479C050020FF22024B18781A70E8 +:101E88007047C046080000200300F0B500286AD05B +:101E9800081E68D001220A705A784A709A788A70A7 +:101EA800DA78CA701A790A715A794A7100228A71E5 +:101EB800CA719A68100A0A724872100C120E887257 +:101EC800CA72DA68100A0A734873100C120E887303 +:101ED800CA731A69100A0A744874100C120ECA746C +:101EE80014228874985C88540132462AFAD14C1C12 +:101EF800985A8854000AA0540232AA2AF8D1985A4B +:101F08008854000AA0540232BA2AF8D11A00BA3208 +:101F180010780A00BA3210701A00BB3210780A0022 +:101F2800BB321070BC331A780B000C00080008266E +:101F3800BC331A700C4D0D4BBD340278120253405D +:101F480032001FB25B009BB2002F00DA6B40013AEF +:101F5800D2B2002AF5D101308442EED1012023709B +:101F6800BE311B0A0B70F0BD21100000FFFF0000FE +:101F7800F0B5384C0500A5440392022234ACFF3278 +:101F8800A3700F00228001F079FC0023E070322852 +:101F980002D832331B1ADBB22371FFF76DFF00261C +:101FA800039B6071A76039A864AFE680E560236190 +:101FB80001F0A2FC380001F06BFE7300FB58181EFC +:101FC8000AD0254A9818FA239B0498423FD2FA214E +:101FD8008900FEF787F880B2872302AA5B009B1866 +:101FE80098530236642EE8D1B92040008018FFF7D4 +:101FF800EDFEFFF735FFC12302AA5B009B1818709E +:102008008423164E02A93278FF335B181A70144BDA +:10201800200003931B7863AF04A93B70FFF734FFDC +:10202800041E0FD0BF233A78C4200093A9B204AB92 +:1020380000F008FE0023039A13703378FF2B01D0B9 +:10204800013333702000A5239B009D44F0BD054853 +:10205800C2E7C0466CFDFFFFE7030000B80500209B +:1020680009000020FFFF000070B50B4E0B0032681E +:102078000A490400821A8A4201D8002070BD084D1E +:1020880001002868FFF774FF0028F6D02B68346039 +:1020980001332B60F2E7C046B40500205FEA000078 +:1020A800B00500200B0A017043700B0C090E8370F9 +:1020B800C170704700230B4A10B513600A4A1360B9 :1020C8000A4A13600A4A13600A4A13600A4A1360EC -:1020D8000A4A13600A4A136000F0F0FD10BDC046BA -:1020E800DC050020D8050020D4050020D0050020FC -:1020F800CC050020C8050020C4050020C00500202C -:10210800BC050020024A1368013313607047C046BB -:10211800C8050020024A1368013313607047C0469F -:10212800CC050020024A1368013313607047C0468B -:10213800C4050020024A1368013313607047C04683 -:10214800C0050020024A1368013313607047C04677 -:10215800BC050020C30703D50B4A1368013313607D -:10216800830703D5094A136801331360430703D56E -:10217800074A136801331360000703D5054A13683B -:10218800013313607047C046DC050020D8050020E5 -:10219800D4050020D005002010B5041E00D1E5E0CC -:1021A8000020832900D8E1E084220100200003F008 -:1021B80039F800F0CFFE01002000FFF771FF00F0B2 -:1021C800CFFE0100201DFFF76BFF00F0CFFE0100DE -:1021D80020000830FFF764FF00F0CEFE0100200069 -:1021E8000C30FFF75DFF00F0CDFE0100200010303D -:1021F800FFF756FF00F0CCFE010020001430FFF777 -:102208004FFF00F0CBFE010020001830FFF748FF19 -:102218002000574B1C301968FFF742FF2000554B30 -:1022280020301968FFF73CFF2000534B2430196811 -:10223800FFF736FF2000514B28301968FFF730FFB1 -:1022480020004F4B2C301968FFF72AFF20004D4B18 -:1022580030301968FFF724FF20004B4B34301968E1 -:10226800FFF71EFF2000494B38301968FFF718FFA9 -:102278002000474B3C301968FFF712FF01F096FD2C -:10228800010020004030FFF70BFF00F08DFE010039 -:1022980020004430FFF704FF00F08CFE010020000E -:1022A8004830FFF7FDFE00F08BFE010020004C30A7 -:1022B800FFF7F6FE00F08AFE010020005030FFF71D -:1022C800EFFE00F089FE010020005430FFF7E8FE21 -:1022D80000F088FE010020005830FFF7E1FE00F012 -:1022E80087FE010020005C30FFF7DAFE00F086FE72 -:1022F800010020006030FFF7D3FE00F085FE0100EA -:1023080020006430FFF7CCFE00F084FE01002000BE -:102318006830FFF7C5FE00F083FE010020006C3036 -:10232800FFF7BEFE00F082FE010020007030FFF7CC -:10233800B7FE00F081FE010020007430FFF7B0FE08 -:1023480000F080FE010020007830FFF7A9FE00F0C1 -:102358007FFE010020007C30FFF7A2FE00F07EFE29 -:10236800010020008030FFF79BFE842010BDC0468E -:10237800DC050020D8050020D4050020D005002069 -:10238800CC050020C8050020C4050020C005002099 -:10239800BC050020024A1368034313607047C04617 -:1023A800E4050020F0B50022082504000A4E0B4879 -:1023B80093B2994200D8F0BDA35C1B0258402B0091 -:1023C80007B2400080B2002F00DA7040013BDBB258 -:1023D800002BF5D10132EBE721100000FFFF0000D0 -:1023E800802303490A681A42FCD0024B18607047E0 -:1023F8001C4800402848004070B504004518AC420D -:1024080005D1402304490A681A42FCD070BD2078DF -:10241800FFF7E6FF0134F2E71C480040F0B5454CF1 -:102428000D00A5441900AAAB1E88012303AC237034 -:10243800E570330A2D0A257160700725A270667150 -:10244800A371002E09D0002907D00B2002AB32005F -:10245800C01802F0EFFE7619B5B229002000FFF788 -:10246800A1FFAB1C60550135000AADB260550020D4 -:1024780001249BB24426019322000300FF3603A9DE -:10248800095C8C4600292BD1A22189005B1802A97E -:102498005B18453BFF3B1A70B44246D0411C621C96 -:1024A8008BB20093230094B201220199009D013060 -:1024B800A942E4D8A22189005B1802A95B18453B10 -:1024C800FF3B00201A70FFF78BFF53A82100FFF78E -:1024D80093FF0020FFF784FFA5239B009D44F0BDD8 -:1024E800B44222D0A227411C89B2BF000091E7194B -:1024F80002A97F186146453F0132651CFF3FD2B2F1 -:10250800ADB23970FF2A0ED1A22189005B1802A949 -:102518005B18453BFF3B1A70B54206D002342B00CE -:10252800A4B2FE3AC1E72C00BFE7034A136801339F -:102538001360D1E76CFDFFFF48080020F0B56C4C34 -:102548006C4BA5440024220018886B4B01939042E1 -:102558006AD823009C22093B9BB25200934200D3C5 -:10256800ADE004A98D7904AB5B792D021D4395423A -:1025780000D3A4E02B0009339BB29C4200D09EE01C -:10258800A11E89B204A8FFF70DFFA0239B00E41841 -:1025980004ABE418594BE3181A78594B1202E418A3 -:1025A80023781343834200D089E004AB9B7804AAC4 -:1025B80054AC1288A37004AB2280DA781B79E580CA -:1025C8001B021343A380002D05D004AB2A00D91D9C -:1025D80056A802F02FFE6578012D07D18020400013 -:1025E800FFF7D8FE474B1A7815431D7080208000EE -:1025F800FFF7D0FE444A136801331360EFF31086E7 -:1026080072B6424D2B78032B5BD9414A13680133CC -:102618001360404A13680133136086F310888020E2 -:10262800C000FFF7B7FE15E00199531C8D5C9BB203 -:10263800002D3BD12020FFF7ADFE374A1368013348 -:102648001360364A13680133136002232D4A117848 -:102658000B431370A5239B009D44F0BD9042E9D025 -:10266800A0267600B342E5D2039B029E5B5C013252 -:102678007354390092B24F1C6318FEB29BB2B54234 -:10268800ECD8FF2D10D090420ED9A02149008B42E2 -:10269800D0D2A024A400591C1B1904AC1B19204C2F -:1026A8001B1900241C708BB21C0050E71A0004AEE2 -:1026B800A3190293019B00219B180393DBE7802059 -:1026C800B9E7A022174F52003B781748534321001F -:1026D800C01802F0AFFD03223B78013313403B7072 -:1026E8002B780133DBB22B7086F31088B2E7C04633 -:1026F8006CFDFFFFBA0D0020BC0D00207FFDFFFF21 -:102708007EFDFFFFF007002024080020500800206D -:10271800440800204C080020480800202008002019 -:1027280080FDFFFF520800205408002070B5164DA8 -:102738002E78002E05D0002802D1144B287018805E -:1027480070BD124C2388002809D1002B04D010300A -:10275800FFF720FEFFF7F2FE00232380F0E7A12217 -:10276800520093420AD94020FFF714FE0123084A79 -:102778002B701368268001331360E1E75A1C22800E -:10278800044AD054DCE7C046B90D0020BA0D002039 -:1027980048080020BC0D002070B503240223A025A2 -:1027A8004600B440B340ED052A68134EA2431A43CD -:1027B8002A60012585403268AA43104D32602A6894 -:1027C800A24313432B60072809D80F2280008240B8 -:1027D80081400B4C236893431943216070BD0F243B -:1027E8000838C0B2800084408140064A1368A34379 -:1027F80019431160F2E7C046040000500800005079 -:1028080020000050240000500B4A10B513880B4CD0 -:1028180099B224880133DB05DB0DA34208D180205F -:10282800074A4001136801331360FFF7B3FD10BD79 -:10283800044C60541380FAE7EE050020EC050020F4 -:10284800E8050020F005002010B50024074A138889 -:10285800A34204D800231380054A137010BD054B0A -:10286800185D0134FFF762FFA4B2EFE7560D0020B0 -:10287800550D0020580D0020F8B50F252026EFF340 -:10288800108472B6404B1A68404B1B682A4229D004 -:10289800D30703D53E490B6801330B60930703D573 -:1028A8003C490B6801330B60530703D53A490B6861 -:1028B80001330B60120703D5384A136801331360DC -:1028C8000420FFF767FD364B364A1D60364B1B6800 -:1028D800136801331360354A13680133136084F3B6 -:1028E8001088CCE72B4225D0DA0703D530490A688F -:1028F80001320A609A0703D52E490A6801320A6034 -:102908005A0703D52C490A6801320A601B0703D508 -:102918002A4A1368013313600820FFF73BFD0F2292 -:10292800274B1A601F4A274B1B6813680133136033 -:10293800254AD1E7324214D00120244A1A4B1F6895 -:10294800136801331360224A136801331360214A64 -:10295800137803431370FFF71DFDF8B2FFF754FF18 -:10296800BDE733420DD0194A164B02201F68136881 -:1029780001331360184A136801331360154A13783A -:10298800E7E784F31088F8BD1C4800401C38014074 -:1029980014080020100800200C0800200808002057 -:1029A8002048004048080020244800401C08002017 -:1029B8000408002000080020FC070020F807002079 -:1029C8002038014024380140180800203008002031 -:1029D8002C080020F107002028080020F7B5444AF9 -:1029E8004448118800888BB2814266D04249434EE0 -:1029F800CC5C0133DB05DB0D13803378E4B2002BAC -:102A08000FD13F4B1B78002B42D00D2C13D00A2C32 -:102A180011D0002C27D1FFF717FF2000FFF786FE03 -:102A2800DDE7002333700A2CD9D0354B1B78002BF7 -:102A38002ED00D2CEDD180200027324B324D019342 -:102A48001B8800010093EF54FFF7A4FC28000099AD -:102A5800FEF7CAFE019B0D3C1F80294B1F70634285 -:102A68005C413470BBE7274A1388012B09D1202128 -:102A7800200088435428CED1591C1180224AD454AE -:102A8800ADE7210020395E29C5D85E2BC3D8F3E70E -:102A98001E4B1B88002BC0D11D4B1B78002BBCD1B3 -:102AA800230020229343412BB7D1174B1F3A1C70A8 -:102AB800144B1A80124B1A7091E7164B1A78002A99 -:102AC80015D0EFF3108272B60021197082F31088C6 -:102AD8000B4B1B788B420AD10C490D4B0A88002AF4 -:102AE80002D11A78002A02D000220A801A70F7BD93 -:102AF800EC050020EE050020F0050020540D002014 -:102B0800550D0020560D0020580D0020BA0D00204C -:102B1800B90D0020E005002010B5EFF3108272B661 -:102B28000021244B1C68196082F310888C4240D025 -:102B3800E30702D52048FDF799FEA30702D51F48F1 -:102B4800FDF794FE630702D51D48FDF78FFE2307A6 -:102B580002D51C48FDF78AFEE30602D51A48FDF7A0 -:102B680085FEA30602D51948FDF780FE630602D547 -:102B78001748FDF77BFE230602D51648FDF776FEBB -:102B8800E30502D51448FDF771FEA30502D51348E5 -:102B9800FDF76CFE630502D51148FDF767FE2305B6 -:102BA80002D51048FDF762FEE40402D50E48FDF791 -:102BB8005DFE10BDE4050020F85600080757000820 -:102BC80015570008255700083457000843570008D0 -:102BD800505700085D5700086B5700087A570008DF -:102BE8008757000892570008A257000870B5EFF3FE -:102BF800108572B60F4C2278D3B2002A03D185F320 -:102C08001088180070BDA0220B4E520033780B4973 -:102C18005343C91802F00EFB0322337801331340E3 -:102C280033702378013BDBB2237085F310880120D1 -:102C3800E8E7C0465008002051080020540800204A -:102C480037B59C2506AC24886D00AC4204D3064AEF -:102C580013680133136037BD002C01D0002BF6D068 -:102C68000094FFF7DBFBF6E74808002010B5041EC8 -:102C780004D1064A13680133136010BDFDF720FB29 -:102C880081B22000FFF7B8FBF7E7C04648080020EC -:102C980030B585B008AC258802ACA3700523E57073 -:102CA8002D0A217062700100257100220093FE2018 -:102CB8002300FFF7B3FB05B030BD0000EFF3108130 -:102CC80072B600231F4A13601F4A13601F4A13601D +:1020D8000A4A13600A4A13600A4A136000F0F0FDC6 +:1020E80010BDC046DC050020D8050020D40500201E +:1020F800D0050020CC050020C8050020C40500201C +:10210800C0050020BC050020024A13680133136093 +:102118007047C046C8050020024A1368013313609F +:102128007047C046CC050020024A1368013313608B +:102138007047C046C4050020024A13680133136083 +:102148007047C046C0050020024A13680133136077 +:102158007047C046BC050020C30703D50B4A136867 +:1021680001331360830703D5094A136801331360E9 +:10217800430703D5074A136801331360000703D5E3 +:10218800054A1368013313607047C046DC05002018 +:10219800D8050020D4050020D005002010B5041E65 +:1021A80000D1E5E00020832900D8E1E08422010085 +:1021B800200003F039F800F0CFFE01002000FFF7FF +:1021C80071FF00F0CFFE0100201DFFF76BFF00F04C +:1021D800CFFE010020000830FFF764FF00F0CEFEBC +:1021E800010020000C30FFF75DFF00F0CDFE01007C +:1021F80020001030FFF756FF00F0CCFE0100200051 +:102208001430FFF74FFF00F0CBFE0100200018301C +:10221800FFF748FF2000574B1C301968FFF742FFB3 +:102228002000554B20301968FFF73CFF2000534B26 +:1022380024301968FFF736FF2000514B2830196801 +:10224800FFF730FF20004F4B2C301968FFF72AFFAB +:1022580020004D4B30301968FFF724FF20004B4B0E +:1022680034301968FFF71EFF2000494B38301968D1 +:10227800FFF718FF2000474B3C301968FFF712FFA3 +:1022880001F096FD010020004030FFF70BFF00F041 +:102298008DFE010020004430FFF704FF00F08CFEA3 +:1022A800010020004830FFF7FDFE00F08BFE010022 +:1022B80020004C30FFF7F6FE00F08AFE01002000F7 +:1022C8005030FFF7EFFE00F089FE01002000543087 +:1022D800FFF7E8FE00F088FE010020005830FFF705 +:1022E800E1FE00F087FE010020005C30FFF7DAFE17 +:1022F80000F086FE010020006030FFF7D3FE00F0FA +:1023080085FE010020006430FFF7CCFE00F084FE5B +:10231800010020006830FFF7C5FE00F083FE0100D1 +:1023280020006C30FFF7BEFE00F082FE01002000A6 +:102338007030FFF7B7FE00F081FE01002000743016 +:10234800FFF7B0FE00F080FE010020007830FFF7B4 +:10235800A9FE00F07FFE010020007C30FFF7A2FEFE +:1023680000F07EFE010020008030FFF79BFE8420F5 +:1023780010BDC046DC050020D8050020D40500208B +:10238800D0050020CC050020C8050020C405002089 +:10239800C0050020BC050020024A136803431360EF +:1023A8007047C046E4050020F0B500220825040067 +:1023B8000A4E0B4893B2994200D8F0BDA35C1B02A9 +:1023C80058402B0007B2400080B2002F00DA70405E +:1023D800013BDBB2002BF5D10132EBE72110000005 +:1023E800FFFF0000802303490A681A42FCD0024B11 +:1023F800186070471C4800402848004070B5040029 +:102408004518AC4205D1402304490A681A42FCD059 +:1024180070BD2078FFF7E6FF0134F2E71C48004062 +:10242800F0B5454C0D00A5441900AAAB1E88012340 +:1024380003AC2370E570330A2D0A257160700725F7 +:10244800A2706671A371002E09D0002907D00B2055 +:1024580002AB3200C01802F0EFFE7619B5B22900BF +:102468002000FFF7A1FFAB1C60550135000AADB293 +:102478006055002001249BB24426019322000300EA +:10248800FF3603A9095C8C4600292BD1A2218900BB +:102498005B1802A95B18453BFF3B1A70B44246D053 +:1024A800411C621C8BB20093230094B20122019953 +:1024B800009D0130A942E4D8A22189005B1802A935 +:1024C8005B18453BFF3B00201A70FFF78BFF53A8B2 +:1024D8002100FFF793FF0020FFF784FFA5239B004F +:1024E8009D44F0BDB44222D0A227411C89B2BF004E +:1024F8000091E71902A97F186146453F0132651C22 +:10250800FF3FD2B2ADB23970FF2A0ED1A2218900A5 +:102518005B1802A95B18453BFF3B1A70B54206D011 +:1025280002342B00A4B2FE3AC1E72C00BFE7034AED +:10253800136801331360D1E76CFDFFFF48080020E2 +:10254800F0B56C4C6C4BA5440024220018886B4BEA +:10255800019390426AD823009C22093B9BB2520007 +:10256800934200D3ADE004A98D7904AB5B792D02C9 +:102578001D43954200D3A4E02B0009339BB29C4233 +:1025880000D09EE0A11E89B204A8FFF70DFFA0238A +:102598009B00E41804ABE418594BE3181A78594B1C +:1025A8001202E41823781343834200D089E004AB75 +:1025B8009B7804AA54AC1288A37004AB2280DA7802 +:1025C8001B79E5801B021343A380002D05D004ABC3 +:1025D8002A00D91D56A802F02FFE6578012D07D1D3 +:1025E80080204000FFF7D8FE474B1A7815431D702E +:1025F80080208000FFF7D0FE444A1368013313603F +:10260800EFF3108672B6424D2B78032B5BD9414A03 +:10261800136801331360404A13680133136086F36B +:1026280010888020C000FFF7B7FE15E00199531C01 +:102638008D5C9BB2002D3BD12020FFF7ADFE374AC1 +:10264800136801331360364A136801331360022399 +:102658002D4A11780B431370A5239B009D44F0BDB0 +:102668009042E9D0A0267600B342E5D2039B029EB1 +:102678005B5C01327354390092B24F1C6318FEB28E +:102688009BB2B542ECD8FF2D10D090420ED9A021B4 +:1026980049008B42D0D2A024A400591C1B1904ACB9 +:1026A8001B19204C1B1900241C708BB21C0050E70E +:1026B8001A0004AEA3190293019B00219B180393EF +:1026C800DBE78020B9E7A022174F52003B78174874 +:1026D80053432100C01802F0AFFD03223B780133B9 +:1026E80013403B702B780133DBB22B7086F31088D4 +:1026F800B2E7C0466CFDFFFFBA0D0020BC0D0020FC +:102708007FFDFFFF7EFDFFFFF0070020240800206B +:1027180050080020440800204C08002048080020E9 +:102728002008002080FDFFFF5208002054080020E8 +:1027380070B5164D2E78002E05D0002802D1144B06 +:102748002870188070BD124C2388002809D1002BEE +:1027580004D01030FFF720FEFFF7F2FE002323809D +:10276800F0E7A122520093420AD94020FFF714FE55 +:102778000123084A2B701368268001331360E1E7B0 +:102788005A1C2280044AD054DCE7C046B90D002008 +:10279800BA0D002048080020BC0D002070B50324A5 +:1027A8000223A0254600B440B340ED052A68134E25 +:1027B800A2431A432A60012585403268AA43104D76 +:1027C80032602A68A24313432B60072809D80F22D6 +:1027D8008000824081400B4C236893431943216059 +:1027E80070BD0F240838C0B2800084408140064A7A +:1027F8001368A34319431160F2E7C0460400005070 +:102808000800005020000050240000500B4A10B56A +:1028180013880B4C99B224880133DB05DB0DA342E6 +:1028280008D18020074A4001136801331360FFF77D +:10283800B3FD10BD044C60541380FAE7EE05002088 +:10284800EC050020E8050020F005002010B5002464 +:10285800074A1388A34204D800231380054A13703B +:1028680010BD054B185D0134FFF762FFA4B2EFE716 +:10287800560D0020550D0020580D0020F8B50F25E5 +:102888002026EFF3108472B6404B1A68404B1B6841 +:102898002A4229D0D30703D53E490B6801330B6080 +:1028A800930703D53C490B6801330B60530703D5E5 +:1028B8003A490B6801330B60120703D5384A13688D +:1028C800013313600420FFF767FD364B364A1D605D +:1028D800364B1B68136801331360354A136801339C +:1028E800136084F31088CCE72B4225D0DA0703D590 +:1028F80030490A6801320A609A0703D52E490A68E6 +:1029080001320A605A0703D52C490A6801320A6065 +:102918001B0703D52A4A1368013313600820FFF701 +:102928003BFD0F22274B1A601F4A274B1B68136871 +:1029380001331360254AD1E7324214D00120244ADA +:102948001A4B1F68136801331360224A1368013356 +:102958001360214A137803431370FFF71DFDF8B283 +:10296800FFF754FFBDE733420DD0194A164B02203A +:102978001F68136801331360184A13680133136022 +:10298800154A1378E7E784F31088F8BD1C4800401F +:102998001C38014014080020100800200C080020F2 +:1029A800080800202048004048080020244800402B +:1029B8001C0800200408002000080020FC07002054 +:1029C800F80700202038014024380140180800206A +:1029D800300800202C080020F107002028080020DB +:1029E800F7B5444A4448118800888BB2814266D0C2 +:1029F8004249434ECC5C0133DB05DB0D1380337851 +:102A0800E4B2002B0FD13F4B1B78002B42D00D2C8A +:102A180013D00A2C11D0002C27D1FFF717FF200064 +:102A2800FFF786FEDDE7002333700A2CD9D0354B3B +:102A38001B78002B2ED00D2CEDD180200027324B97 +:102A4800324D01931B8800010093EF54FFF7A4FC5B +:102A580028000099FEF7CAFE019B0D3C1F80294BF8 +:102A68001F7063425C413470BBE7274A1388012B0F +:102A780009D12021200088435428CED1591C118027 +:102A8800224AD454ADE7210020395E29C5D85E2BEF +:102A9800C3D8F3E71E4B1B88002BC0D11D4B1B78F6 +:102AA800002BBCD1230020229343412BB7D1174BD5 +:102AB8001F3A1C70144B1A80124B1A7091E7164B70 +:102AC8001A78002A15D0EFF3108272B60021197017 +:102AD80082F310880B4B1B788B420AD10C490D4BA3 +:102AE8000A88002A02D11A78002A02D000220A8015 +:102AF8001A70F7BDEC050020EE050020F005002057 +:102B0800540D0020550D0020560D0020580D0020B2 +:102B1800BA0D0020B90D0020E005002010B5EFF334 +:102B2800108272B60021244B1C68196082F3108849 +:102B38008C4240D0E30702D52048FDF797FEA30753 +:102B480002D51F48FDF792FE630702D51D48FDF721 +:102B58008DFE230702D51C48FDF788FEE30602D543 +:102B68001A48FDF783FEA30602D51948FDF77EFE35 +:102B7800630602D51748FDF779FE230602D51648E5 +:102B8800FDF774FEE30502D51448FDF76FFEA305B3 +:102B980002D51348FDF76AFE630502D51148FDF713 +:102BA80065FE230502D51048FDF760FEE40402D552 +:102BB8000E48FDF75BFE10BDE4050020FC5600083A +:102BC8000B570008195700082957000838570008FC +:102BD8004757000854570008615700086F57000806 +:102BE8007E5700088B57000896570008A65700081C +:102BF80070B5EFF3108572B60F4C2278D3B2002A65 +:102C080003D185F31088180070BDA0220B4E520026 +:102C180033780B495343C91802F00EFB032233786B +:102C28000133134033702378013BDBB2237085F303 +:102C380010880120E8E7C04650080020510800200D +:102C48005408002037B59C2506AC24886D00AC429A +:102C580004D3064A13680133136037BD002C01D032 +:102C6800002BF6D00094FFF7DBFBF6E748080020BE +:102C780010B5041E04D1064A13680133136010BD51 +:102C8800FDF71EFB81B22000FFF7B8FBF7E7C0464F +:102C98004808002030B585B008AC258802ACA37080 +:102CA8000523E5702D0A217062700100257100224C +:102CB8000093FE202300FFF7B3FB05B030BD0000F2 +:102CC800EFF3108172B600231F4A13601F4A136086 :102CD8001F4A13601F4A13601F4A13601F4A13607C :102CE8001F4A13601F4A13601F4A13601F4A13606C :102CF8001F4A13601F4A13601F4A13601F4A13605C :102D08001F4A13601F4A13601F4A13601F4A13604B :102D18001F4A13601F4A13601F4A13601F4A13603B -:102D28001F4A13701F4A13701F4A13801F4A1380CB -:102D38001F4A13601F4A13701F4A136081F31088DB -:102D48007047C0464C08002048080020440800206E -:102D5800400800203C0800203808002034080020E3 -:102D6800300800202C080020280800202408002013 -:102D7800200800201C080020180800201408002043 -:102D8800100800200C080020080800200408002073 -:102D980000080020FC070020F8070020F4070020A6 -:102DA800F1070020F0070020EE050020EC050020C8 -:102DB800E8050020E0050020E4050020F8B58023A0 -:102DC800484ADB01116801240B4313608023464AFB -:102DD800DB02116805000B43444913600A68444B41 -:102DE80002201A408023DB001343424A0B60136819 -:102DF800062123431360FFF7CFFC06210320FFF7CA -:102E0800CBFCC0233C4E0421326809209A43803B06 -:102E180013433360FFF7C0FC04210A20FFF7BCFC12 -:102E28003268364B364F1A4080235B0313433360B6 -:102E38000026344B1E60344B1E60344B1E60B54276 -:102E480031D1334B334A1C601F231360324B3D6032 -:102E58001D60324B1D601F22314B1C60314B1A60C4 -:102E68000023314A1370314A1370314A1370314AC2 -:102E78001380314A1370314A1370314A1380314A32 -:102E88001370314A1370FFF719FF3D231D4A0121C2 -:102E980013602E4B1D203B60FDF708FD01211B2010 -:102EA800FDF704FDF8BDFDF7CBFB6C080002290017 -:102EB8000019FDF717F9164B164A18601F231360FF -:102EC800154B3E601E60154B1E60FDF7B9FB4000B8 -:102ED80000192900FDF706F91D4B0407640F184077 -:102EE8000443B8E734100240381002404C10024046 -:102EF800FFF3FFFF2C1002400C000050FFFFCFFF34 -:102F0800003801400048004004480040084800409C -:102F18000C4800402048004004380140083801406F -:102F28000C38014020380140520800205108002088 -:102F380050080020BA0D0020B90D0020B80D00205F -:102F4800560D0020550D0020540D00203D80000036 -:102F5800F0FF0000014B18687047C0464C0800207D -:102F6800014B18687047C04648080020014B186894 -:102F78007047C04644080020014B18687047C04697 -:102F880040080020014B18687047C0463C080020E4 -:102F9800014B18687047C04638080020014B186874 -:102FA8007047C04634080020014B18687047C04677 -:102FB80030080020014B18687047C0462C080020D4 -:102FC800014B18687047C04628080020014B186854 -:102FD8007047C04624080020014B18687047C04657 -:102FE80020080020014B18687047C0461C080020C4 -:102FF800014B18687047C04618080020014B186834 -:103008007047C04614080020014B18687047C04636 -:1030180010080020014B18687047C0460C080020B3 -:10302800014B18687047C04608080020014B186813 -:103038007047C04604080020014B18687047C04616 -:1030480000080020014B18687047C046FC070020A4 -:10305800014B18687047C046F8070020014B1868F4 -:103068007047C046E8050020EFF3108272B60021D1 -:10307800024B1868196082F310887047F407002023 -:10308800EFF3108272B60021034B18781970C0B2A2 -:1030980082F310887047C046F1070020002808D046 -:1030A800EFF3108172B6034A13780343137081F368 -:1030B80010887047F0070020EFF3108272B60021E5 -:1030C800034B18781970C0B282F310887047C04655 -:1030D800F00700201022F8B5284D2B68134208D0BD -:1030E80027490A6027490A6801320A600121264AED -:1030F80011701A0719D1202601272B6833423CD0BA -:10310800224A234B01201C68136801331360214AAB -:10311800136801331360204A13783B431370FFF799 -:1031280039F9E0B2FFF770FBE7E7DA0703D51B4987 -:103138000A6801320A609A0703D519490A680132F8 -:103148000A605A0703D517490A6801320A601B0743 -:1031580003D5154A1368013313600420FFF71AF9E1 -:103168000F22074B1A60114A094B1B681368013379 -:1031780013600F4A136801331360F8BD1C48004000 -:103188002048004040080020E005002030080020CA -:10319800244800402C080020F107002014080020D3 -:1031A800100800200C08002008080020480800200B -:1031B8001C0800201022F8B5284D2B68134208D0AF -:1031C80027490A6027490A6801320A600121264A0C -:1031D80011701A0719D1202602272B6833423CD0D8 -:1031E800224A234B02201C68136801331360214ACA -:1031F800136801331360204A13783B431370FFF7B9 -:10320800C9F8E0B2FFF700FBE7E7DA0703D51B4987 -:103218000A6801320A609A0703D519490A68013217 -:103228000A605A0703D517490A6801320A601B0762 -:1032380003D5154A1368013313600820FFF7AAF86D -:103248000F22074B1A60114A094B1B681368013398 -:1032580013600F4A136801331360F8BD1C3801402E -:103268002038014040080020E005002030080020F8 -:103278002438014028080020F10700200408002015 -:1032880000080020FC070020F8070020480800205C -:1032980018080020054B064A984200D91800054B2B -:1032A800984200D2180010607047C046F07E0E00A9 -:1032B8000C00002010270000F0B587B002930CAB7B -:1032C8001B78040003930DAB1B78080004930EAB26 -:1032D8001D880FAB1B7801920593002945D0002D5E -:1032E80000D10835211C0C2C41D90C21CCB2060088 -:1032F800220000212348FCF78DFF002702000B0065 -:1033080001204042C11780197941801859413B007A -:103318003200FCF78BFF029B039A5B001B1B920099 -:1033280007339B180522049952424A439B18070009 -:103338009B000820002B13DD059A5100611A8900B3 -:1033480000D10131481EC018FCF7CCFE6B460200C4 -:103358001879019B082B0FD90820C0B250430830B8 -:1033680004352D187D43BF08E81907B0F0BDE3B256 -:10337800062BBBD20621B9E7C1B20529EDD205203B -:10338800EBE7C04640420F007FB5099D0E000024C0 -:103398000A2803D97D21B1426441E4B2FA21039499 -:1033A80008248900714302940126002400960194A0 -:1033B800FFF782FF0300A54200D028600020834267 -:1033C80003D02000089A9A426041304004B070BD92 -:1033D800F0B587B005901D2001F0A0FB06001E2067 -:1033E80001F09CFB0500262001F098FB0700202037 -:1033F80001F094FB0400212001F090FB8446012099 -:103408002B09FF08AD08310932070540064007407F -:1034180060462402520F0443C9B2DBB20432A4B29C -:10342800082914D80839484241410C48494201400A -:103438000918181C0C2B0CD90C20059B0397029417 -:1034480001960095C0B2FFF737FF07B0F0BD0449F9 -:10345800EFE7DBB2062BF0D20620EEE748E80100E2 -:1034680020A1070070B5040008001D001600FFF732 -:10347800AFFF03000220312C18D8FA200D49E400D0 -:1034880062588000B21A824203D300200A1966509B -:103498005060094809194A6804680120A41A9C4226 -:1034A80004D3D2184A60002D01D1002070BD2B60D2 -:1034B800FBE7C046000F00200C000020312807D889 -:1034C800054BC0001B185A688A4202D800225A606D -:1034D8007047521AFBE7C046000F002030B531286C -:1034E80015D8FA250C4BC000C458AD00141BAC42CB -:1034F80003D30024C2501A185460002907D0074A81 -:103508001B1814685A68A01A884201D25C6030BD42 -:1035180052185A60FBE7C046000F00200C0000203C -:1035280010B5084C2378002B01D0002010BDFF21D6 -:10353800122001F005FB00F075FC0028F5D00123EE -:103548002370F3E79010002010B5064B1A78002A74 -:1035580007D00022FF2112201A7001F0F1FA00F0C2 -:103568004CFC10BD9010002070B50E4D2B78002B30 -:1035780001D1032070BD122001F0D0FA0423040009 -:1035880018401C42F6D02100122001F0D9FA00237D -:103598002B7000F032FC0028EBD001231C40E0180F -:1035A800E8E7C04690100020031E14D0081E12D071 -:1035B800012008701A784A705A788A701A7ACA7084 -:1035C8005A680A715A68120A4A715A68120C8A7142 -:1035D8005B681B0ECB71704703000120002B1AD0CB -:1035E800002A18D00018072915D91978013001299F -:1035F80011D15978117099785170D9781172587918 -:103608001979000208439979DB79090401430020FC -:103618001B060B435360704703000020312B03D86F -:1036280002485843024BC0187047C04620A1070003 -:1036380030DFCE35F0B507000E00002489B00092C7 -:10364800019303AD220038003100FCF7D7FD2200BA -:10365800287001990098FCF7D1FD083428720135CB -:10366800402CEFD10E9B064807930023054A03AC74 -:10367800195D013348405043142BF9D109B0F0BD0E -:10368800C59D1C8193010001F7B5002304000D00BE -:10369800EB540133322BFBD1002C00D10C4C2E0003 -:1036A800012731367F1B630363405A0C53405C018A -:1036B8005C403378B91920000193FCF799FD6B5CE5 -:1036C800013E7370019B6B54B542ECD1F7BDC04607 -:1036D800B979379E37B5084C2569A268E368206830 -:1036E80061680095FFF7A6FF04496061FFF7CCFF0A -:1036F80000234A34237037BD98100020B0100020F2 -:10370800C42210B500210248520001F08BFD10BD03 -:1037180098100020F7B51500C4220D4C07000E00C4 -:10372800200000215200019301F07CFD019B322210 -:10373800E360089B2760236123004C336660A56023 -:103748001A80FFF7C7FF01234B3400202370FEBD0A -:1037580098100020F7B5214B009001911B780120AB -:103768001F4C002B16D0009B0018002B12D00029EC -:1037780010D0270032254A373B78312B04D92369EA -:1037880001332361FFF7A6FF3B78E218167E312E3E -:1037980001D90720FEBD01333B7032000120002112 -:1037A800FCF738FD236D1840636D1940084304D0B9 -:1037B800013DEDB2002DDFD1EBE73000FFF72CFF24 -:1037C8000028E6D0009B4C341E70019B18602388AB -:1037D800002B01D0013B23800020DBE7E310002011 -:1037E8009810002070B50A4A030012780D000120D5 -:1037F800084C002A0BD00230322908D82361FFF781 -:1038080069FF230000204A334C341D70208070BDAE -:10381800E31000209810002070B5154B154C1D784A -:103828000223002D21D0013331291ED823004A3329 -:103838001B783125002B01D0013BDDB2246984427D -:1038480002D100238D4210D00523022A0DD0002A70 -:1038580006D0041BE317E4185C400423012C04DCA5 -:103868000131C9B2FFF7BEFF0123180070BDC04681 -:10387800E31000209810002073B50026012464424C -:10388800E5170C4B1A6D5B6D1100194303D13220FB -:10389800801BC0B276BD1000190000196941009064 -:1038A80001910098019910401940013602000B005F -:1038B800F6B2E9E798100020312807D8044A1630F4 -:1038C80080008358591C01D0013383507047C0468B -:1038D80098100020312808D8044A90304000835AB4 -:1038E80003498B4201D0013383527047981000205E -:1038F800FFFF000070B500280FD00400FF26002548 -:10390800064B323419880A1CFF2900D9321C027070 -:1039180001301D800233A042F4D170BDB8110020DF -:10392800014B18697047C04698100020014B187861 -:103938007047C046E2100020014B18787047C04617 -:10394800E31000200022024B1A605A601A72704776 -:10395800201200200122024B186059601A72704729 -:1039680020120020014B187A7047C0462012002010 -:1039780010B5044CC8212368C01AFCF7B3FB636870 -:10398800C01810BD20120020044B10B51B68C821B8 -:10399800C01AFCF72DFC080010BDC04620120020FC -:1039A800F531FF3170B5841A0800FA2189001E002C -:1039B800FCF798FB0123034D241A6E602C602B72D0 -:1039C80070BDC04620120020014B1B68C01A70470A -:1039D8002012002070B50B4D2A78131C062A00D936 -:1039E80006230A24DBB29C40844200D90400FCF779 -:1039F80009FF054B001918602B78FF2B01D0013304 -:103A08002B7070BD2C1200203012002013B56B46AD -:103A18006A46997100230C00D37169466B460122EE -:103A280007330631FDF78AF9002805D16B46DB79A3 -:103A3800012B01D16B469C79200016BDF0B5012100 -:103A480085B00320FFF7E2FFA62107000420FFF757 -:103A5800DDFF002302AA9380D37013000190022295 -:103A68001020033303A9FDF769F900281FD102AB21 -:103A7800DB78022B1BD102AB9E8804211120FFF7B3 -:103A8800C5FF0500FCF7C4FE04000220002F0CD07F -:103A9800FCF7B8FE284F3B68C21A0BD59BB280B220 -:103AA800834207D0FEF746FB032005B0F0BDFA2697 -:103AB8007600E2E7002D21D0FFF732FD1F4BE41816 -:103AC800002814D0FFF750FD022806D13000FFF778 -:103AD80081FFFEF72FFB0120E7E7032807D0012825 -:103AE80007D1FCF795FE001B08D4FFF72DFD042035 -:103AF800DBE7FCF78DFE001BE4D4F2E700F08BF95E -:103B08000028F4D0281C002D00D10120C0B2FCF7F9 -:103B1800A3FE1B2001F002F8040000F06EF96B46CA -:103B28001B799D3C5BB224B2A342CFDB0020044B3F -:103B380038601870B9E7C04630120020204E0000E7 -:103B48002C120020F0B5040000203F2C17D80E4D91 -:103B58004B1EAB4213D80D4B0D4EDD7A002D0BD00A -:103B68009D7AA54208D11D68551BA94204D9C743AF -:103B78005D68AF4204D340190C33B342EDD1F0BDB8 -:103B880001204042FBE7C0461F4E000034120020CF -:103B980034180020F7B50D001900099B0400089E91 -:103BA8000192002B03D00123099A5B421380012262 -:103BB8003F2C2AD8264F4B1E0232BB4225D8013A49 -:103BC800002D22D0002E20D0B5421ED8019A200008 -:103BD800FFF7B8FF0422361AAE4216D31D4A002357 -:103BE8001100CE7A002E12D00133DBB20C31802BBB -:103BF800F7D100231168019E711AB94207D8013321 -:103C0800DBB20C32802BF5D105221000FEBD0C274B -:103C18005F43104EF1190A898C720132D205D20D18 -:103C28000A819446019A8134BA510127FF34A400CD -:103C38004D60CF72A1592D18A94200D2A5510999FA -:103C4800002903D06246D2011A430A800022DCE729 -:103C58001F4E0000341200200A4B10B5984210D0B5 -:103C68007F240C2204406243074B9B18DA7A002A0F -:103C780007D01A89C009824203D15A688A4200D9FA -:103C8800596010BDFFFF00003412002010B5002855 -:103C980008D00021421C044BFF321C6810C002C32C -:103CA8009042FAD110BDC0463418002000230128E4 -:103CB8000CD00133022809D00133032806D0013380 -:103CC800042803D00538431E9841031D0520584396 -:103CD800014BC0187047C046B257000870B50400C1 -:103CE800FCF796FD0500FCF793FD401BA042FAD3B4 -:103CF80070BD0000F8B50400FF23002831D08021F2 -:103D08000079264A264B890200282DD0022010600F -:103D1800042219601A600A20FFF7E0FF4020A1780A -:103D280000F00EFF4120E17800F00AFF61780120E1 -:103D380000F006FFFCF76CFD1A4B0727C618012098 -:103D480000F0ECFE050063786B403B4207D0FCF7BF -:103D58005FFD801B0ED463786B403B4219D1012074 -:103D68002378114A1370F8BD116002221A6080226C -:103D7800D202CFE7C820FFF7B1FF6178012000F039 -:103D8800DFFE3220FFF7AAFF012000F0C7FE050082 -:103D9800D9E729000420FDF7ADFFE0E7180000503F -:103DA800180800508813000034190020014B1878B7 -:103DB8007047C0463419002007230340581E00B539 -:103DC80006280FD8FCF784F904040504080A0C0037 -:103DD8000223054A137000BD0423FAE70523F8E718 -:103DE8000623F6E70123F4E73419002010B5012073 -:103DF800FFF75CFFFFF77EFF10BD10B50220FFF74D -:103E080055FFFFF777FF10BD10B50320FFF74EFFF2 -:103E1800FFF770FF10BD10B50420FFF747FFFFF74D -:103E280069FF10BD10B5FFF7E8FF002804D0062091 -:103E3800FFF73CFFFFF75EFF10BD000010B5002440 -:103E48000F4B4B201C7000F069FE10210143C9B2D2 -:103E58004B2000F075FE0220FCF7FEFC210001203B -:103E680000F06EFE0120FCF7F7FCFFF7BFFFA04251 -:103E780004D00120FCF7F0FCFFF7BFFF10BDC046DF -:103E88003419002070B5FCF7C3FCFA250400AD0016 -:103E9800FCF7BEFC001BA842FAD370BD10B5FFF7B3 -:103EA800BAFF041E0CD01E2000F038FE04230100C7 -:103EB8001940184205D10520FDF71CFFFFF79DFFAB -:103EC8000024200010BD00007FB501380C00032835 -:103ED8001AD8FCF7FDF802041A2500F009FB0025A2 -:103EE80002A8057000F00AFB0400A8420CD0224B7F -:103EF8001D70224B1D70FFF780FF200000F064FE4C -:103F0800FFF7C0FFFFF7CAFF7FBD00231C4A1370ED -:103F1800194A1370194A137001221A4B1A70F3E7E1 -:103F2800174D02A82B7801AE037003234370124B80 -:103F38001B788370114B1B78C370124B1B7803716D -:103F480000F0A6FA3080C1B20D20FDF7D3FE7378D9 -:103F5800002B02D0FFF751FFD6E701202B78210074 -:103F680001332B70084B1870084B1C60084B1C6001 -:103F7800FFF7AAFFC8E7C0465119002050190020D2 -:103F88003619002035190020401900203C1900205E -:103F980038190020F0B58BB0040015000391FFF725 -:103FA800CBFC00283CD000F01BFD0290002837D144 -:103FB8001D4B1E4E01931B7805A81D4F03703368D7 -:103FC800047483603B684560C360039B437400F0DE -:103FD800F1F904AB1880019BC4B22100187800F0F5 -:103FE8003FFA019B1B78022B0BD1012C09D1FFF75B -:103FF800A9FC104B029A1A700F4B1A7035603D607D -:1040080006E0022C0ED0042322009A43012AF5D0A0 -:1040180004AB5B78019A290020001370FFF754FF66 -:104028000BB0F0BD3560F3E7401900203C190020C3 -:1040380038190020421900204119002010B5040049 -:10404800FCF7E0FB02231B1B02002100D8B2FFF79C -:10405800A1FF10BD10B5FFF7D0FE10BDF0B50126C9 -:104068000C0089B030421CD000291AD05B4B1E705E -:10407800FCF7CEFB2300FC339860122000F04EFDC5 -:104088002023070005001F4018420DD0FEF742F814 -:104098000020FFF7D3FF524B1E702900122000F0BA -:1040A8004FFD002009B0F0BD4306F6D5132000F0FF -:1040B80035FD0190102000F031FD0290192000F02C -:1040C8002DFD46B21A2000F029FD029903900D201B -:1040D80000F036FD019B002B04D01A0021003800A7 -:1040E80000F03FFD27000322019BFF377B70F31789 -:1040F80013403A009B199B10BB70039B013A9D3BF0 -:104108009380002305AE3200200001997B75029749 -:10411800FFF762FA0390002803D00020FFF78EFF14 -:10412800BBE7230032000933FF3383CA83C301236B -:10413800029A5375FFF716FC021E0DD0294B1A7808 -:10414800002A09D0FCF75EFBFFF73EFCFA23039F29 -:10415800DB0083427F417A1C71787068FFF75CFB53 -:10416800070000F0FBF8012F19D8FCF74BFB3222AF -:10417800736803905343727801989B180293FFF772 -:1041880027F9327A0100029B0398FFF709FC164BC6 -:10419800029A1A600122154B1A70124B1A700123E9 -:1041A8000020BB424041C0B2FFF748FF019B083BDB -:1041B800DBB2002B09D1FF346370FDF7A3FF122097 -:1041C800290000F0BDFC01206CE72200117A117073 -:1041D8000132111BC9B28B42F8D8ECE75119002003 -:1041E80050190020411900204419002042190020CC -:1041F80073B51F4B05001B78022B03D000221D4B03 -:104208001A7073BDFFF7AEFB0028FAD1194B1A4E8E -:104218001A78002A02D135600132F1E700F0E0FB9C -:104228000400FFF789FB431E98412200C3B231689E -:10423800280000F09FF8040000F0B0F8002C03D02C -:10424800042CDED13560DCE76B4601A9D81C01944B -:104258000470FFF77FFA0028F4D1FFF7CEFD01982C -:1042680000F0B2FCFFF70EFEFFF718FEEAE7C046C3 -:1042780040190020481900204C190020002110B5D1 -:1042880002000800FFF786FE10BD0000F7B5040025 -:10429800FFF768FB002838D01C4B1B78022B34D161 -:1042A80000F09EFB002830D12000FFF761FB184E7C -:1042B80004003378174F002B02D03B68834224D088 -:1042C80032212000FBF794FF2000CDB23221FBF70A -:1042D80009FF2900FFF786FA6B46D81C002301A9BD -:1042E80003700193FFF736FA00280BD1019B002BCE -:1042F80008D0FFF782FD019800F066FCFFF7C2FDC9 -:10430800FFF7CCFD01233C603370F7BD4019002056 -:10431800421900204419002010B50024084B1C70D5 +:102D28001F4A13601F4A13701F4A13701F4A1380EB +:102D38001F4A13801F4A13601F4A13701F4A1360EB +:102D480081F310887047C0464C08002048080020CE +:102D580044080020400800203C08002038080020D3 +:102D680034080020300800202C0800202808002003 +:102D780024080020200800201C0800201808002033 +:102D880014080020100800200C0800200808002063 +:102D98000408002000080020FC070020F807002095 +:102DA800F4070020F1070020F0070020EE050020BE +:102DB800EC050020E8050020E0050020E4050020DF +:102DC800F8B58023484ADB01116801240B431360DE +:102DD8008023464ADB02116805000B43444913600F +:102DE8000A68444B02201A408023DB001343424AFE +:102DF8000B601368062123431360FFF7CFFC0621FD +:102E08000320FFF7CBFCC0233C4E04213268092085 +:102E18009A43803B13433360FFF7C0FC04210A2028 +:102E2800FFF7BCFC3268364B364F1A4080235B03F1 +:102E3800134333600026344B1E60344B1E60344B02 +:102E48001E60B54231D1334B334A1C601F231360D7 +:102E5800324B3D601D60324B1D601F22314B1C60A0 +:102E6800314B1A600023314A1370314A1370314ACA +:102E78001370314A1380314A1370314A1370314A42 +:102E88001380314A1370314A1370FFF719FF3D233D +:102E98001D4A012113602E4B1D203B60FDF706FDE6 +:102EA80001211B20FDF702FDF8BDFDF7C9FB6C08E9 +:102EB800000229000019FDF715F9164B164A18608B +:102EC8001F231360154B3E601E60154B1E60FDF7F7 +:102ED800B7FB400000192900FDF704F91D4B040752 +:102EE800640F18400443B8E7341002403810024019 +:102EF8004C100240FFF3FFFF2C1002400C00005062 +:102F0800FFFFCFFF00380140004800400448004060 +:102F1800084800400C480040204800400438014060 +:102F2800083801400C380140203801405208002080 +:102F38005108002050080020BA0D0020B90D0020CB +:102F4800B80D0020560D0020550D0020540D00200E +:102F58003D800000F0FF0000014B18687047C04634 +:102F68004C080020014B18687047C04648080020EC +:102F7800014B18687047C04644080020014B186888 +:102F88007047C04640080020014B18687047C0468B +:102F98003C080020014B18687047C04638080020DC +:102FA800014B18687047C04634080020014B186868 +:102FB8007047C04630080020014B18687047C0466B +:102FC8002C080020014B18687047C04628080020CC +:102FD800014B18687047C04624080020014B186848 +:102FE8007047C04620080020014B18687047C0464B +:102FF8001C080020014B18687047C04618080020BC +:10300800014B18687047C04614080020014B186827 +:103018007047C04610080020014B18687047C0462A +:103028000C080020014B18687047C04608080020AB +:10303800014B18687047C04604080020014B186807 +:103048007047C04600080020014B18687047C0460A +:10305800FC070020014B18687047C046F80700209D +:10306800014B18687047C046E8050020EFF310824E +:1030780072B60021024B1868196082F310887047F5 +:10308800F4070020EFF3108272B60021034B187882 +:103098001970C0B282F310887047C046F10700204B +:1030A800002808D0EFF3108172B6034A137803435F +:1030B800137081F310887047F0070020EFF3108237 +:1030C80072B60021034B18781970C0B282F31088C9 +:1030D8007047C046F00700201022F8B5284D2B682D +:1030E800134208D027490A6027490A6801320A6052 +:1030F8000121264A11701A0719D1202601272B68A9 +:1031080033423CD0224A234B01201C681368013308 +:103118001360214A136801331360204A13783B4334 +:103128001370FFF739F9E0B2FFF770FBE7E7DA074A +:1031380003D51B490A6801320A609A0703D5194961 +:103148000A6801320A605A0703D517490A6801322A +:103158000A601B0703D5154A13680133136004205E +:10316800FFF71AF90F22074B1A60114A094B1B681F +:103178001368013313600F4A136801331360F8BDF5 +:103188001C4800402048004040080020E00500207E +:1031980030080020244800402C080020F1070020B7 +:1031A80014080020100800200C080020080800203F +:1031B800480800201C0800201022F8B5284D2B686C +:1031C800134208D027490A6027490A6801320A6071 +:1031D8000121264A11701A0719D1202602272B68C7 +:1031E80033423CD0224A234B02201C681368013327 +:1031F8001360214A136801331360204A13783B4354 +:103208001370FFF7C9F8E0B2FFF700FBE7E7DA074A +:1032180003D51B490A6801320A609A0703D5194980 +:103228000A6801320A605A0703D517490A68013249 +:103238000A601B0703D5154A136801331360082079 +:10324800FFF7AAF80F22074B1A60114A094B1B68AF +:103258001368013313600F4A136801331360F8BD14 +:103268001C3801402038014040080020E0050020BB +:10327800300800202438014028080020F1070020E9 +:103288000408002000080020FC070020F8070020A0 +:103298004808002018080020054B064A984200D923 +:1032A8001800054B984200D2180010607047C046BD +:1032B800F07E0E000C00002010270000F0B587B04B +:1032C80002930CAB1B78040003930DAB1B7808002A +:1032D80004930EAB1D880FAB1B7801920593002950 +:1032E80045D0002D00D10835211C0C2C41D90C21CA +:1032F800CCB20600220000212348FCF78BFF0027F0 +:1033080002000B0001204042C11780197941801842 +:1033180059413B003200FCF789FF029B039A5B008E +:103328001B1B920007339B180522049952424A43FB +:103338009B1807009B000820002B13DD059A5100FD +:10334800611A890000D10131481EC018FCF7CAFE75 +:103358006B4602001879019B082B0FD90820C0B2D0 +:103368005043083004352D187D43BF08E81907B0CD +:10337800F0BDE3B2062BBBD20621B9E7C1B20529DD +:10338800EDD20520EBE7C04640420F007FB5099D0E +:103398000E0000240A2803D97D21B1426441E4B219 +:1033A800FA21039408248900714302940126002419 +:1033B80000960194FFF782FF0300A54200D0286021 +:1033C8000020834203D02000089A9A42604130408E +:1033D80004B070BDF0B587B005901D2001F0A0FBCA +:1033E80006001E2001F09CFB0500262001F098FB3A +:1033F8000700202001F094FB0400212001F090FB3D +:10340800844601202B09FF08AD0831093207054021 +:103418000640074060462402520F0443C9B2DBB29B +:103428000432A4B2082914D80839484241410C484A +:10343800494201400918181C0C2B0CD90C20059B7B +:103448000397029401960095C0B2FFF737FF07B0C3 +:10345800F0BD0449EFE7DBB2062BF0D20620EEE719 +:1034680048E8010020A1070070B5040008001D000D +:103478001600FFF7AFFF03000220312C18D8FA20FE +:103488000D49E40062588000B21A824203D300203A +:103498000A1966505060094809194A6804680120E9 +:1034A800A41A9C4204D3D2184A60002D01D10020EE +:1034B80070BD2B60FBE7C046000F00200C00002009 +:1034C800312807D8054BC0001B185A688A4202D811 +:1034D80000225A607047521AFBE7C046000F0020CE +:1034E80030B5312815D8FA250C4BC000C458AD00AA +:1034F800141BAC4203D30024C2501A18546000298C +:1035080007D0074A1B1814685A68A01A884201D2C3 +:103518005C6030BD52185A60FBE7C046000F0020BF +:103528000C00002010B5084C2378002B01D0002097 +:1035380010BDFF21122001F005FB00F075FC0028EA +:10354800F5D001232370F3E79010002010B5064B47 +:103558001A78002A07D00022FF2112201A7001F0E1 +:10356800F1FA00F04CFC10BD9010002070B50E4D23 +:103578002B78002B01D1032070BD122001F0D0FA66 +:103588000423040018401C42F6D02100122001F048 +:10359800D9FA00232B7000F032FC0028EBD001236D +:1035A8001C40E018E8E7C04690100020031E14D025 +:1035B800081E12D0012008701A784A705A788A704A +:1035C8001A7ACA705A680A715A68120A4A715A688D +:1035D800120C8A715B681B0ECB71704703000120C7 +:1035E800002B1AD0002A18D00018072915D91978E5 +:1035F8000130012911D15978117099785170D97811 +:10360800117258791979000208439979DB7909040C +:10361800014300201B060B43536070470300002042 +:10362800312B03D802485843024BC0187047C04694 +:1036380020A1070030DFCE35F0B507000E000024CA +:1036480089B00092019303AD220038003100FCF7E5 +:10365800D5FD2200287001990098FCF7CFFD0834A9 +:1036680028720135402CEFD10E9B064807930023A2 +:10367800054A03AC195D013348405043142BF9D176 +:1036880009B0F0BDC59D1C8193010001F7B5002369 +:1036980004000D00EB540133322BFBD1002C00D178 +:1036A8000C4C2E00012731367F1B630363405A0CF4 +:1036B80053405C015C403378B91920000193FCF752 +:1036C80097FD6B5C013E7370019B6B54B542ECD166 +:1036D800F7BDC046B979379E37B5084C2569A26849 +:1036E800E368206861680095FFF7A6FF04496061F8 +:1036F800FFF7CCFF00234A34237037BD9810002011 +:10370800B0100020C42210B500210248520001F078 +:103718008BFD10BD98100020F7B51500C4220D4C84 +:1037280007000E00200000215200019301F07CFDEB +:10373800019B3222E360089B2760236123004C33FE +:103748006660A5601A80FFF7C7FF01234B3400208D +:103758002370FEBD98100020F7B5214B0090019111 +:103768001B7801201F4C002B16D0009B0018002B43 +:1037780012D0002910D0270032254A373B78312B48 +:1037880004D9236901332361FFF7A6FF3B78E218C8 +:10379800167E312E01D90720FEBD01333B70320061 +:1037A80001200021FCF736FD236D1840636D194098 +:1037B800084304D0013DEDB2002DDFD1EBE7300026 +:1037C800FFF72CFF0028E6D0009B4C341E70019BAD +:1037D80018602388002B01D0013B23800020DBE701 +:1037E800E31000209810002070B50A4A03001278F0 +:1037F8000D000120084C002A0BD00230322908D8CD +:103808002361FFF769FF230000204A334C341D7001 +:10381800208070BDE31000209810002070B5154B73 +:10382800154C1D780223002D21D0013331291ED8D3 +:1038380023004A331B783125002B01D0013BDDB230 +:103848002469844202D100238D4210D00523022A24 +:103858000DD0002A06D0041BE317E4185C400423AB +:10386800012C04DC0131C9B2FFF7BEFF01231800A7 +:1038780070BDC046E31000209810002073B50026E4 +:1038880001246442E5170C4B1A6D5B6D1100194356 +:1038980003D13220801BC0B276BD10001900001978 +:1038A8006941009001910098019910401940013632 +:1038B80002000B00F6B2E9E798100020312807D87B +:1038C800044A163080008358591C01D001338350B4 +:1038D8007047C04698100020312808D8044A903014 +:1038E8004000835A03498B4201D001338352704709 +:1038F80098100020FFFF000070B500280FD00400CA +:10390800FF260025064B323419880A1CFF2900D9E6 +:10391800321C027001301D800233A042F4D170BD08 +:10392800B8110020014B18697047C0469810002054 +:10393800014B18787047C046E2100020014B1878F8 +:103948007047C046E31000200022024B1A605A60FC +:103958001A727047201200200122024B1860596029 +:103968001A72704720120020014B187A7047C0461F +:103978002012002010B5044CC8212368C01AFCF797 +:10398800B1FB6368C01810BD20120020044B10B5AD +:103998001B68C821C01AFCF72BFC080010BDC046E4 +:1039A80020120020F531FF3170B5841A0800FA2181 +:1039B80089001E00FCF796FB0123034D241A6E6054 +:1039C8002C602B7270BDC04620120020014B1B6872 +:1039D800C01A70472012002070B50B4D2A78131CAE +:1039E800062A00D906230A24DBB29C40844200D967 +:1039F8000400FCF707FF054B001918602B78FF2B14 +:103A080001D001332B7070BD2C1200203012002021 +:103A180013B56B466A46997100230C00D371694649 +:103A28006B46012207330631FDF788F9002805D1D6 +:103A38006B46DB79012B01D16B469C79200016BDC2 +:103A4800F0B5012185B00320FFF7E2FFA6210700AA +:103A58000420FFF7DDFF002302AA9380D370130030 +:103A6800019002221020033303A9FDF767F900280B +:103A78001FD102ABDB78022B1BD102AB9E8804213D +:103A88001120FFF7C5FF0500FCF7C2FE0400022065 +:103A9800002F0CD0FCF7B6FE284F3B68C21A0BD596 +:103AA8009BB280B2834207D0FEF746FB032005B0E5 +:103AB800F0BDFA267600E2E7002D21D0FFF732FDAF +:103AC8001F4BE418002814D0FFF750FD022806D138 +:103AD8003000FFF781FFFEF72FFB0120E7E70328FF +:103AE80007D0012807D1FCF793FE001B08D4FFF785 +:103AF8002DFD0420DBE7FCF78BFE001BE4D4F2E786 +:103B080000F08BF90028F4D0281C002D00D10120EA +:103B1800C0B2FCF7A1FE1B2001F002F8040000F07F +:103B28006EF96B461B799D3C5BB224B2A342CFDB96 +:103B38000020044B38601870B9E7C04630120020E6 +:103B4800204E00002C120020F0B5040000203F2C6D +:103B580017D80E4D4B1EAB4213D80D4B0D4EDD7AC8 +:103B6800002D0BD09D7AA54208D11D68551BA9428E +:103B780004D9C7435D68AF4204D340190C33B3423C +:103B8800EDD1F0BD01204042FBE7C0461F4E0000CA +:103B98003412002034180020F7B50D001900099BD5 +:103BA8000400089E0192002B03D00123099A5B426E +:103BB800138001223F2C2AD8264F4B1E0232BB42CB +:103BC80025D8013A002D22D0002E20D0B5421ED88B +:103BD800019A2000FFF7B8FF0422361AAE4216D326 +:103BE8001D4A00231100CE7A002E12D00133DBB219 +:103BF8000C31802BF7D100231168019E711AB9424C +:103C080007D80133DBB20C32802BF5D10522100026 +:103C1800FEBD0C275F43104EF1190A898C720132E0 +:103C2800D205D20D0A819446019A8134BA510127EE +:103C3800FF34A4004D60CF72A1592D18A94200D2BB +:103C4800A5510999002903D06246D2011A430A8076 +:103C58000022DCE71F4E0000341200200A4B10B58A +:103C6800984210D07F240C2204406243074B9B18D3 +:103C7800DA7A002A07D01A89C009824203D15A6821 +:103C88008A4200D9596010BDFFFF0000341200209D +:103C980010B5002808D00021421C044BFF321C68D4 +:103CA80010C002C39042FAD110BDC046341800209B +:103CB800002301280CD00133022809D0013303283E +:103CC80006D00133042803D00538431E9841031D4C +:103CD80005205843014BC0187047C046B657000826 +:103CE80070B50400FCF794FD0500FCF791FD401B3E +:103CF800A042FAD370BD0000F8B50400FF230028E5 +:103D080031D080210079264A264B890200282DD0FF +:103D180002201060042219601A600A20FFF7E0FFF1 +:103D28004020A17800F00EFF4120E17800F00AFF62 +:103D38006178012000F006FFFCF76AFD1A4B07279F +:103D4800C618012000F0ECFE050063786B403B428A +:103D580007D0FCF75DFD801B0ED463786B403B42B7 +:103D680019D101202378114A1370F8BD116002227D +:103D78001A608022D202CFE7C820FFF7B1FF61782E +:103D8800012000F0DFFE3220FFF7AAFF012000F03B +:103D9800C7FE0500D9E729000420FDF7ADFFE0E7DD +:103DA800180000501808005088130000341900202B +:103DB800014B18787047C046341900200723034088 +:103DC800581E00B506280FD8FCF782F9040405042C +:103DD800080A0C000223054A137000BD0423FAE701 +:103DE8000523F8E70623F6E70123F4E73419002052 +:103DF80010B50120FFF75CFFFFF77EFF10BD10B57F +:103E08000220FFF755FFFFF777FF10BD10B503201D +:103E1800FFF74EFFFFF770FF10BD10B50420FFF746 +:103E280047FFFFF769FF10BD10B5FFF7E8FF00284F +:103E380004D00620FFF73CFFFFF75EFF10BD00002F +:103E480010B500240F4B4B201C7000F069FE1021A8 +:103E58000143C9B24B2000F075FE0220FCF7FCFCC0 +:103E68002100012000F06EFE0120FCF7F5FCFFF7B1 +:103E7800BFFFA04204D00120FCF7EEFCFFF7BFFF14 +:103E880010BDC0463419002070B5FCF7C1FCFA25F6 +:103E98000400AD00FCF7BCFC001BA842FAD370BDBF +:103EA80010B5FFF7BAFF041E0CD01E2000F038FE34 +:103EB800042301001940184205D10520FDF71CFF15 +:103EC800FFF79DFF0024200010BD00007FB50138DA +:103ED8000C0003281AD8FCF7FBF802041A2500F096 +:103EE80009FB002502A8057000F00AFB0400A8429F +:103EF8000CD0224B1D70224B1D70FFF780FF200055 +:103F080000F064FEFFF7C0FFFFF7CAFF7FBD002384 +:103F18001C4A1370194A1370194A137001221A4B5C +:103F28001A70F3E7174D02A82B7801AE037003232C +:103F38004370124B1B788370114B1B78C370124B64 +:103F48001B78037100F0A6FA3080C1B20D20FDF78E +:103F5800D3FE7378002B02D0FFF751FFD6E701207C +:103F68002B78210001332B70084B1870084B1C600C +:103F7800084B1C60FFF7AAFFC8E7C046511900208C +:103F8800501900203619002035190020401900204A +:103F98003C19002038190020F0B58BB0040015003A +:103FA8000391FFF7CBFC00283CD000F01BFD0290EA +:103FB800002837D11D4B1E4E01931B7805A81D4FB5 +:103FC80003703368047483603B684560C360039B77 +:103FD800437400F0F1F904AB1880019BC4B22100CE +:103FE800187800F03FFA019B1B78022B0BD1012CAB +:103FF80009D1FFF7A9FC104B029A1A700F4B1A70DF +:1040080035603D6006E0022C0ED0042322009A435E +:10401800012AF5D004AB5B78019A290020001370BF +:10402800FFF754FF0BB0F0BD3560F3E740190020EF +:104038003C1900203819002042190020411900209D +:1040480010B50400FCF7DEFB02231B1B0200210055 +:10405800D8B2FFF7A1FF10BD10B5FFF7D0FE10BD15 +:10406800F0B501260C0089B030421CD000291AD0C6 +:104078005B4B1E70FCF7CCFB2300FC3398601220CE +:1040880000F04EFD2023070005001F4018420DD008 +:10409800FEF742F80020FFF7D3FF524B1E702900AD +:1040A800122000F04FFD002009B0F0BD4306F6D500 +:1040B800132000F035FD0190102000F031FD029032 +:1040C800192000F02DFD46B21A2000F029FD0299B2 +:1040D80003900D2000F036FD019B002B04D01A0040 +:1040E8002100380000F03FFD27000322019BFF3725 +:1040F8007B70F31713403A009B199B10BB70039B0E +:10410800013A9D3B9380002305AE320020000199BF +:104118007B750297FFF762FA0390002803D000200E +:10412800FFF78EFFBBE7230032000933FF3383CA52 +:1041380083C30123029A5375FFF716FC021E0DD0A4 +:10414800294B1A78002A09D0FCF75CFBFFF73EFCE4 +:10415800FA23039FDB0083427F417A1C71787068E1 +:10416800FFF75CFB070000F0FBF8012F19D8FCF7FC +:1041780049FB3222736803905343727801989B1865 +:104188000293FFF727F9327A0100029B0398FFF7A1 +:1041980009FC164B029A1A600122154B1A70124B31 +:1041A8001A7001230020BB424041C0B2FFF748FF0C +:1041B800019B083BDBB2002B09D1FF346370FDF78C +:1041C800A3FF1220290000F0BDFC01206CE72200AB +:1041D800117A11700132111BC9B28B42F8D8ECE781 +:1041E80051190020501900204119002044190020BD +:1041F8004219002073B51F4B05001B78022B03D012 +:1042080000221D4B1A7073BDFFF7AEFB0028FAD1D0 +:10421800194B1A4E1A78002A02D135600132F1E79B +:1042280000F0E0FB0400FFF789FB431E98412200E1 +:10423800C3B23168280000F09FF8040000F0B0F81D +:10424800002C03D0042CDED13560DCE76B4601A9D5 +:10425800D81C01940470FFF77FFA0028F4D1FFF707 +:10426800CEFD019800F0B2FCFFF70EFEFFF718FE36 +:10427800EAE7C04640190020481900204C190020E0 +:10428800002110B502000800FFF786FE10BD0000EF +:10429800F7B50400FFF768FB002838D01C4B1B78E3 +:1042A800022B34D100F09EFB002830D12000FFF70C +:1042B80061FB184E04003378174F002B02D03B687F +:1042C800834224D032212000FBF792FF2000CDB298 +:1042D8003221FBF707FF2900FFF786FA6B46D81C47 +:1042E800002301A903700193FFF736FA00280BD1C8 +:1042F800019B002B08D0FFF782FD019800F066FCB7 +:10430800FFF7C2FDFFF7CCFD01233C603370F7BD1A +:1043180040190020421900204419002010B500243B :10432800084B1C70084B1C70084B1C70084B1C7009 -:10433800FFF708FB074B1C70074B1C7010BDC046ED -:10434800401900203619002051190020501900206A -:10435800481900204219002041190020052806D8D4 -:10436800034A80008358591C01D001338350704799 -:104378005419002010B504000120002B0CD000189F -:10438800002A09D1611A0230002905DBBE23013851 -:104398005B00994200D3100010BD0000042806D825 -:1043A800034A80008358591C01D001338350704759 -:1043B8006C19002082B001AB002806D1188018784B -:1043C8005B781B02184302B07047027C0178012A0F -:1043D8000FD0012923D0022917D1002A07D142681A -:1043E8008168521A0FD4FA21C9008A4210D2802259 -:1043F80028E00222407C121AD2B201290AD00229EE -:1044080003D1012AF3D1134A07E0C022002919D1A8 -:10441800022211E0012A04D10F4A1A80CFE7022AAA -:1044280002D180225200F8E74268C168511A02D4CA -:104438008068121A02D50622FF32EEE70748814249 -:1044480002D9C1229200E8E7FA2149008A42E8D35A -:104458008122E7E705020000030200002F75000033 -:1044680010B5032806D8084A800083585C1C01D080 -:1044780001338350052906D8044A89008B58581CF3 -:1044880001D001338B5010BD9819002080190020ED -:1044980037B5002828D0002203784178C5788B42A8 -:1044A80052411C1CD2B20F2B00D90F2401798078FD -:1044B800D301E4B2DBB200280CD0002901D040219E -:1044C8000B43002D0DD12343FF210A400B4010025E -:1044D80018433EBD002901D040210B432021002D67 -:1044E80000D010210B43EEE780230122ECE7000007 -:1044F8000022014B1A707047A8190020F8B5040073 -:10450800051E0BD0064F3E783000FFF785F83221A4 -:104518000500701CFBF76CFE267039702800F8BD8A -:10452800A819002070B586B006000D00FCF7C0FD84 -:10453800031E00D0037801AC2370104B66701B7803 -:104548000495A3700E4B1E780E4BE6701B68029301 -:104558000D4B1B680393FCF755F90C49020030001A -:10456800FFF7F0FA0A4D0590220000212888FDF790 -:104578004FFC2B8801332B8006B070BDC01900207A -:10458800C8190020BC190020C419002010270000F9 -:10459800AA19002010B5FFF730FC064C2378002B31 -:1045A80001D0FFF77BFC0023034A23701370034AF2 -:1045B800136010BDD8190020DB190020CC19002089 -:1045C800F0B58FB00390FFF7F1FB039B0590002B2C -:1045D80016D0BB4B1978002912D1039BB94EFF3373 -:1045E8005F78B94D0837B94CFF2F0DD9B84B3170EA -:1045F8001970B84B296021601970FF20FFF792FFEE -:10460800002420000FB0F0BDFCF752FD002803D0B5 -:1046180002220378934335D10023AD4A33701370D7 -:10462800AD4A2B601370AB4A23601370059BAB4AED -:10463800043BDBB2012B7FD801231370FFF70AFD7F -:10464800A24B186800280BD000F0BEFAFCF7E0F87F -:10465800FA250400AD00FCF7DBF8001BA842FAD3EA -:10466800FFF7ECF90225A843C0B200286CD0984B9C -:104678001878FFF721F900212800FFF753FFFFF70B -:1046880089FFBDE7FCF7BEF80400FFF76BF90028C7 -:104698000AD1FFF745F90500FFF748F932216943C8 -:1046A80009182000FFF756F92000FFF761F93221B9 -:1046B8000500FBF79DFD2800CEB23221FBF712FD65 -:1046C8003100FFF78FF82000FFF75EF92900201A64 -:1046D800FFF740F92000FFF757F9814B241A1C60B7 -:1046E8007C4B002404930123049A0BA9137006AB96 -:1046F8001C7309A80B94FFF72DF8724E724D734B7B -:10470800734AA04207D01C60049B210034702C60BF -:1047180014701C7071E706A9097B11700B9A1A6056 -:10472800FFF704F93123002801D00138C3B23370F0 -:10473800FFF7F6F8286079E700231370FFF75DFBB1 -:10474800002800D07CE75BE7FFB23800FEF740FEA8 -:10475800644B0400984204D9FDF7F4FC21000120C1 -:104768008BE75B4B604E1C7804933060FCF74AF88B -:104778005E4B0200390020000693FEF773FE059099 -:10478800002806D0012801D1FDF7DCFC042031689F -:1047980073E7FCF78DFC0122554C524200281DD0CE -:1047A8000378AB431AD0049B22801D7833680793A3 -:1047B800FCF728F84F4B0200009328004E4B07994E -:1047C8000194FFF7E7F9002809D0049B1878069BA5 -:1047D8001968FEF773FE032031684EE72280002136 -:1047E8000E2000F0ADF900210D2000F0A9F93900E4 -:1047F800222000F0A5F9FCF75BFC002801D0037823 -:104808000593059B0BAC23702E4B1B7863702E4BC6 -:104818001B6863602F4B1878002808D0FBF7F2FF5D -:104828002F4B1B68C01AFF2800D9FF20C0B22A4BA3 -:104838002072187009A92000FEF7B6FE0822002091 -:1048480009A900F0A5F9039BFF335A78002A04D080 -:10485800039B0020591C00F09BF9FF21122000F057 -:104868006FF9FFF7D1FA214D041E08D1184B2968BA -:104878001878FEF723FE1C4B06201968FDE6039AFC -:104888001E4B127809201A7000F048F90F221C4BB1 -:104898001040023018702B681A4D2B60002B03D182 -:1048A8003800FEF795FD2860FBF7B2FF2B68164924 -:1048B800164A5B181B1813600122014B1A70A0E6F8 -:1048C800DB190020C0190020BC190020C4190020E1 -:1048D800C8190020B0190020B8190020D8190020E4 -:1048E800B419002060CC0500AC190020CC190020B8 -:1048F80010000020801A060010270000DA19002096 -:10490800D9190020D4190020F0490200D01900203C -:1049180070B50C1E01D1002070BD2A4B1B78012BED -:10492800F9D118422CD0122000F0F8F80500010047 -:10493800122000F005F92D0722D50025224B234E21 -:104948001B7865702370224B1B78A37033686360F3 -:10495800204B1C78FBF756FF290002002000FEF7C9 -:10496800BDFDFDF7DFFB1C4B31681888FFF774F9B4 -:1049780028003168FFF7D6FDFFF70CFE0120CBE7D2 -:10498800FBF746FF154B1B68C01AC4D4FF21122041 -:1049980000F0D6F80C4B0D4D1B7823700123637083 -:1049A8000B4B1B78A3702B6863600A4B1C78FBF7D2 -:1049B80029FF002102002000FEF790FD052029684C -:1049C800D8E7C046DB190020DA190020D4190020E6 -:1049D800D9190020C819002010000020D019002083 -:1049E800024B1878431E9841C0B27047DB1900206B -:1049F80070B50500FCF75CFB002801D1002070BDF4 -:104A08000378012BFAD1FEF7ADFF0028F6D0FBF7AB -:104A1800F9FEFA24FEF7B8FFA40044430B2802D895 -:104A28000948001BEBE72B1CF72D01D9074B1B7816 -:104A38000833D8B2FEF7CCFC054B064AE3181B181E -:104A48009342DBD90448ECE7E02E0000D057000879 -:104A5800983A0000400D0300203C03000122032384 -:104A680070B515004C00A340A5408A4006689E43D7 -:104A780035430560456895430222A2404560816838 -:104A880099430A438260C2689A43C26070BD032397 -:104A980049008B4002689A430260C2689A43C26028 -:104AA800704700000222084B19681142FCD001210E -:104AB800064A107018680842FCD08021186808421D -:104AC800FCD11078C0B27047083001400C3001406A -:104AD8008022044B002802D112021A607047120685 -:104AE800FBE7C0461800005010B50A4C0021200012 -:104AF800FFF7B4FF8022084B52021A600120FBF72F -:104B0800ABFE00212000FFF7C2FF0620FBF7A4FE42 -:104B180010BDC046000800501808005010B5040029 -:104B28000120FFF7D5FF7F202040FFF7BBFF0020C3 -:104B3800FFF7B8FF04000020FFF7CAFF200010BDF0 -:104B480070B5040001200D00FFF7C2FF802020434C -:104B5800FFF7A8FF2800FFF7A5FF0020FFF7B8FF21 -:104B680070BD70B5050001200C001600FFF7B0FFFE -:104B78007F202840FFF796FFA6190020B44202D1F3 -:104B8800FFF7A6FF70BDFFF78DFF20700134F4E733 -:104B980070B5050001200C001600FFF799FF802072 -:104BA8002843FFF77FFFA619B44203D10020FFF77F -:104BB8008FFF70BD2078FFF775FF0134F4E710B55B -:104BC8004220FFF7ABFF10BD10B500230A4A410B86 -:104BD800C004FBF72BFB0400010CC9B20620FFF749 -:104BE800AFFF210A0720C9B2FFF7AAFF0820E1B2E8 -:104BF800FFF7A6FF10BDC0460048E80110B5011C2C -:104C0800112809D91121802302395B42194309204F -:104C1800C9B2FFF795FF10BDC3B2022BF3D2022130 -:104C2800F1E70000F0B5FA230D0009218DB0060068 -:104C38005B0004919D4205D2FB3BAB429B415B422A -:104C48000733049300230793331C0C2E39D90C2304 -:104C5800DBB20393171C082A38D90827FBB205933F -:104C680007AB0193414B290000930398FF23FAB245 -:104C7800FEF78AFB041E2ED1FA2292006A4303999A -:104C880008AB19705A80110C120E5A71FF229A71D2 -:104C9800079A1971110ADA711972110C120E9A72A7 -:104CA8006022DA72324A59729A810F22987301008F -:104CB8005F7000920200C220FDF7C2FF20000DB015 -:104CC800F0BDF1B20629C3D20623C1E7D3B2052B42 -:104CD800C4D20527C2E704270599049B04391B01A0 -:104CE800490019431D20C9B2FFF72AFF039B1E2064 -:104CF80019013943C9B2FFF723FF2620FFF70EFF3A -:104D08000A2E19D97D2D12D80C210143C9B22620AB -:104D1800FFF716FF3120FFF701FF07230321984310 -:104D28000143C9B23120FFF70BFF0A2119E0F7232D -:104D3800390018400143EAE7F723390018400143D6 -:104D48002620FFF7FDFE062EE4D83120FFF7E6FE09 -:104D58000723052198430143C9B23120FFF7F0FE2C -:104D68000C213720FFF7ECFEA8E7C04660CC050011 -:104D7800CC05000010B5FFF755FF10BDF8B50723A7 -:104D8800794A8024116808200B431360C0227749B0 -:104D9800774F0B68774E934323430B6076490B6834 -:104DA80083430B60754976480B68934323430B6034 -:104DB8007449A0240B68E4059343734A0B60136895 -:104DC80072490B40136080224021236892013B40C6 -:104DD8001343236003688B436D4903600B683B40B2 -:104DE8001A436C4B0A601A683A401A606A4A156896 -:104DF800354015602568694E354080263602B44630 -:104E08003543802625600568B54305606546086812 -:104E1800624E304028438025086019686D01314092 -:104E280001261960116820000901090911601A6832 -:104E38000F213A402A431A60FFF710FE584F00200E -:104E4800FFF746FE00215748FFF708FE3100200013 -:104E58003E60FFF703FE31005248FFF7FFFD0221D5 -:104E68005048FFF7FBFD80224F4B92021A60022345 -:104E78003B608023DB023B6004213C48FFF707FED0 -:104E880031003A48FFF703FE00213848FFF7FFFDDD -:104E980044480D21FFF7FBFD444A454813681D436C -:104EA8001560136880218024036819402342F9D1D2 -:104EB800B820404B400119603F49713C0860C5214A -:104EC800890019604021186801431960012311689D -:104ED800F0201943116039490A68A2431A430A604D -:104EE8001021374A15688543294311601168A14389 -:104EF8000B431360202333490A68824313430B6032 -:104F08003149324B0A6832481A430A6031490A6803 -:104F18001A430A6030490A6802400A602F4A03218E -:104F280013600520FBF7C2FC03210720FBF7BEFC3A -:104F3800FFF7DAFDFEF782FF041E02D100242000ED -:104F4800F8BDFFF73CFE0138C0B2FD28F6D824486A -:104F5800FFF73AFE0522FA210720FFF763FE0E202D -:104F6800FFF74CFEEBE7C0462C100240000400504F -:104F7800FFCFFFFFFFFFFFF00404005008040050BC -:104F8800040000500C04005020040050FF0FFFFFE5 -:104F9800080000500C00005020000050FF3FFFFFA9 -:104FA8001808005000080050180000503410024043 -:104FB8000830014000300140043001400C0001403D -:104FC80008000140140001400004014013200000C3 -:104FD800ECDFFFFF080401400C0401401404014009 -:104FE800C0CA8936EFF3108272B60021024B1868E6 -:104FF800196082F310887047DC1900200B4A0321DE -:105008001368180008400B420ED0106002221342A9 -:1050180003D00749086802430A60DB0704D5042364 -:10502800034A11680B4313607047C04614040140DB -:10503800DC1900200B4A0C491368180008400B4281 -:105048000ED01060DA0604D5012208490868024328 -:105058000A609B0404D50823044A11680B431360B3 -:105068007047C0461404014010200000DC190020DD -:10507800F0B557464E464546DE46E0B504000D00FD -:105088009246994683B08B4230D82DD04946504637 -:10509800FBF7ECF8290006002000FBF7E7F8331AC5 -:1050A8009846203B34D49B4653465A469340424642 -:1050B8001F00534693401E00AF423BD8AF4200D179 -:1050C80079E05B46A41BBD41002B00DA76E00022A4 -:1050D80000230092019301235A4693400193012330 -:1050E80042469340009329E08242CFD90022002310 -:1050F800009201930C9B002B01D01C605D6000980E -:10510800019903B0F0BCBB46B246A946A046F0BD23 -:1051180042469B4620239B1A5246DA4041461300DA -:105128004A468A40170042461F43534693401E0092 -:10513800AF42C3D900220023009201934346002BBB -:10514800D8D0FB0772081A4346467B080EE0AB42EC -:1051580001D1A2420CD8A41A9D41012024196D4105 -:105168000021013E24184D41002E06D0AB42EED955 -:10517800013E24196D41002EF8D1009801995B4633 -:1051880000196941002B24DB2B005A464446D340C2 -:105198002A00E2401C005B461500002B2ADB260093 -:1051A8009E40330026004746BE403200801A99418F -:1051B800009001919EE7A342BCD882E74246202393 -:1051C80000219B1A0022009101920122DA400192EB -:1051D80085E7424620239B1A2A0046469A40230028 -:1051E800F340444613432A00E2401C005B46150086 -:1051F800002BD4DA42462F002023260097409B1A22 -:10520800DE403B003343CDE730B500240139A242EC -:1052180001D1002005E0035D01340D5DAB42F6D0FD -:10522800581B30BD03008218934200D17047197093 -:105238000133F9E7002310B59A4200D110BDCC5CC8 -:10524800C4540133F8E74641554C543A5245534546 -:10525800540D0A004541524C593A52455345545C45 -:10526800725C6E005253543A53544152540D0A0022 -:105278005253543A4D41494E0D0A004541524C593A -:105288003A4D41494E5C725C6E004D3A5241444978 -:105298004F5F4259504153530D0A0000010103006A -:1052A800C50900080E00000000000000020101000E -:1052B80000000000010000000000000003010100E0 -:1052C80000000000010000000000000004010200CE -:1052D80000000000A6000000000000000501010019 -:1052E80000000000010000000000000006010100AD -:1052F800750900080000000000000000070806000B -:1053080000000000FF00000000000000080101008C -:1053180075090008010000000000000009010100F3 -:105328000000000001000000000000000A01030066 -:105338000000000000000000000000000B0405024F -:105348000000000000100E00000000000C01030027 -:105358000000000010000000000000000D02040022 -:105368000000000064000000000000000E010100C1 -:105378007509000800000000000000001002040089 -:1053880000000000F401000000000000110103000B -:1053980000000000040000000000000013020400E8 -:1053A800000000009001000000000000140103004C -:1053B80000000000000000000000000015010200CD -:1053C80000000000020000000000000016010300B9 -:1053D800000000001100000000000000170806008F -:1053E800000000000000000000000000180806008F -:1053F8000000000000000000000000008001030120 -:10540800000000000100000000000000810103010D -:1054180000000000020000000000000082010101FD -:105428000000000000000000000000000003080960 -:105438000A0B0C070D0E000048E8010090D003008D -:1054480020A107002E00433A53454E445F424F4F78 -:10545800540D0A00433A53454E445F4641554C5457 -:105468000D0A00433A53454E445F52454144590D95 -:105478000A00433A434C4B5F4853455F33324D0D66 -:105488000A00433A434C4B5F4853495F31364D0D50 -:105498000A00433A494E49545F444F4E450D0A00AD -:1054A800433A44495350415443480D0A00433A4251 -:1054B80041445F5645520D0A00433A50494E470D44 -:1054C8000A00433A5645525F444953500D0A004F6B -:1054D80053452D4C696665547261634C4F52412D9A -:1054E8004D7572617461465700646576004641499E -:1054F8004C0041540041544900200041542B56456A -:10550800523F00433A41545F5645525F4449535015 -:105518000D0A0046573D002056455253494F4E3D0F -:1055280000204749543D002050524F544F3D002021 -:10553800534348454D413D00204341503D3078009C -:1055480041542B524144494F3F004552524F520D4E -:105558000A00524144494F3D002056455253494F95 -:105568004E3D3078002053544154453D0041542B62 -:10557800535441543F00484F53545F44524F505086 -:10558800454400484F53545F4552524F52530048C8 -:105598004F53545F51554555455F46554C4C00484F -:1055A8004F53545F4952515F49444C4500484F534B -:1055B800545F4952515F485400484F53545F495211 -:1055C800515F544300484F53545F4952515F54450B -:1055D80000484F53545F52585F425954455300484E -:1055E8004F53545F52585F4C505541525400484FE6 -:1055F80053545F52585F55534152543100484F53EA -:10560800545F50415253455F4F4B00484F53545FCE -:1056180050415253455F45525200484F53545F55CD -:105628004152545F4552525F4C50554152540048C4 -:105638004F53545F554152545F4552525F55534141 -:1056480052543100524144494F5F44494F3000524F -:105658004144494F5F44494F3100524144494F5FEB -:1056680044494F3200524144494F5F44494F330047 -:10567800524144494F5F52585F4F4B005241444991 -:105688004F5F54585F4F4B00524144494F5F43525C -:10569800435F4552520053544154450041542B48EE -:1056A800454C500041542B48454C503F0041542034 -:1056B8004154492041542B5645523F2041542B52C6 -:1056C8004144494F3F2041542B535441543F2041BA -:1056D800542B48454C502041542B42494E0D0A004A -:1056E80041542B42494E004F4B2042494E0D0A006F -:1056F800483A52585F4C5055415254310D0A0048AF -:105708003A52585F5553415254310D0A00483A45B0 -:1057180052525F4C5055415254310D0A00483A4597 -:1057280052525F5553415254310D0A00483A505273 -:105738004F435F4652414D450D0A00483A434F4298 -:10574800535F4552520D0A00483A434F42535F4F48 -:1057580056460D0A00483A50415253455F45525249 -:105768000D0A00483A5645525F5245515F52580D4E -:105778000A00483A4652414D455F4F4B0D0A0048D2 -:105788003A515F46554C4C0D0A00483A41545F4423 -:10579800495350415443480D0A00483A52585F5201 -:1057A800494E475F4F56460D0A000180000000022F -:1057B8008100000003834000010485000000058685 -:0C57C8000000000687A00000F7000000B1 -:1057D4001249134B70B50C68186872B6002303267F -:1057E400104A114D1360114A1360114A1360114A93 -:1057F4001360114A1360114A13602A6801331A4373 -:105804002A600F4D2A68B24313432B600D4B196075 -:1058140084F30888804730BFFDE7C0460000F01FCE -:105824000400F01F004400403410024004440040CF -:105834000844004010E000E014E000E018E000E05C -:105844000000014008ED00E001224F4BF0B519685B -:1058540085B00A431A60042219681142FCD003235C -:105864004A4A11689943023B0B430C2113601368A5 -:105874000B40042BFBD1464B464E052233600023DC -:10588400454D464C2B602260F032FF320193039267 -:10589400A63302938020019B414A9B00D158414A80 -:1058A4008002136800270343136001233E4A1068F3 -:1058B4000343A0201360F023C00502689A43503BC1 -:1058C400134303600C20394A136883433848136038 -:1058D4000268384B1A408823DB0113430360364ABD -:1058E400364B48081F601760354A1760354A8018E0 -:1058F400FAF7FAFB1F21344B344A186011600D2269 -:105904002E4B39001A603B00314F029A8A421BD851 -:1059140000232A4A1360284A1360294A1360019A13 -:1059240001320192032A04D1236033602B6005B055 -:10593400F0BD039B029A9B1A0393A6230293019B37 -:10594400022BA7D1039BA4E78020226840020240D7 -:10595400501E8241202089181E4A12680242D4D067 -:105964001D483A68C05CD2B2904208D10133082B7A -:10597400CBD10023236033602B60FFF729FFA53AC6 -:1059840053425341C1E7C046001002400C1002408C -:105994007F3E000014E000E018E000E010E000E0CA -:1059A400CC000008381002402C10024004000050C3 -:1059B40020000050FF00FFFF04440040004400406A -:1059C400084400400024F4000C44004020440040FB -:0C59D400244400401C440040C4000008B3 -:0859E00098F6FF7F01000000B2 -:1059E800010000000024F400FF010000801A0600F6 -:0459F800FFFF0000AD +:10433800084B1C70FFF708FB074B1C70074B1C70E1 +:1043480010BDC04640190020361900205119002020 +:104358005019002048190020421900204119002056 +:10436800052806D8034A80008358591C01D0013318 +:10437800835070475419002010B504000120002B09 +:104388000CD00018002A09D1611A0230002905DB77 +:10439800BE2301385B00994200D3100010BD000015 +:1043A800042806D8034A80008358591C01D00133D9 +:1043B800835070476C19002082B001AB002806D1E9 +:1043C800188018785B781B02184302B07047027C8B +:1043D8000178012A0FD0012923D0022917D1002AF8 +:1043E80007D142688168521A0FD4FA21C9008A425B +:1043F80010D2802228E00222407C121AD2B201296F +:104408000AD0022903D1012AF3D1134A07E0C022B6 +:10441800002919D1022211E0012A04D10F4A1A8079 +:10442800CFE7022A02D180225200F8E74268C16829 +:10443800511A02D48068121A02D50622FF32EEE71A +:104448000748814202D9C1229200E8E7FA214900CF +:104458008A42E8D38122E7E7050200000302000050 +:104468002F75000010B5032806D8084A8000835825 +:104478005C1C01D001338350052906D8044A890001 +:104488008B58581C01D001338B5010BD981900204F +:104498008019002037B5002828D0002203784178F9 +:1044A800C5788B4252411C1CD2B20F2B00D90F2465 +:1044B80001798078D301E4B2DBB200280CD000295E +:1044C80001D040210B43002D0DD12343FF210A4089 +:1044D8000B40100218433EBD002901D040210B4378 +:1044E8002021002D00D010210B43EEE7802301226C +:1044F800ECE700000022014B1A707047A819002051 +:10450800F8B50400051E0BD0064F3E783000FFF7C3 +:1045180085F832210500701CFBF76AFE2670397099 +:104528002800F8BDA819002070B586B006000D0057 +:10453800FCF7BEFD031E00D0037801AC2370104BBE +:1045480066701B780495A3700E4B1E780E4BE670B0 +:104558001B6802930D4B1B680393FCF753F90C4936 +:1045680002003000FFF7F0FA0A4D05902200002102 +:104578002888FDF74FFC2B8801332B8006B070BDCF +:10458800C0190020C8190020BC190020C419002037 +:1045980010270000AA19002010B5FFF730FC064CC0 +:1045A8002378002B01D0FFF77BFC0023034A2370FC +:1045B8001370034A136010BDD8190020DB190020BE +:1045C800CC190020F0B58FB00390FFF7F1FB039BE7 +:1045D8000590002B16D0BB4B1978002912D1039BEC +:1045E800B94EFF335F78B94D0837B94CFF2F0DD955 +:1045F800B84B31701970B84B296021601970FF20D1 +:10460800FFF792FF002420000FB0F0BDFCF750FD2B +:10461800002803D002220378934335D10023AD4A02 +:1046280033701370AD4A2B601370AB4A236013705C +:10463800059BAB4A043BDBB2012B7FD801231370E7 +:10464800FFF70AFDA24B186800280BD000F0BEFA4D +:10465800FCF7DEF8FA250400AD00FCF7D9F8001BDA +:10466800A842FAD3FFF7ECF90225A843C0B2002804 +:104678006CD0984B1878FFF721F900212800FFF734 +:1046880053FFFFF789FFBDE7FCF7BCF80400FFF70D +:104698006BF900280AD1FFF745F90500FFF748F93B +:1046A8003221694309182000FFF756F92000FFF767 +:1046B80061F932210500FBF79BFD2800CEB23221BB +:1046C800FBF710FD3100FFF78FF82000FFF75EF9C8 +:1046D8002900201AFFF740F92000FFF757F9814B0E +:1046E800241A1C607C4B002404930123049A0BA910 +:1046F800137006AB1C7309A80B94FFF72DF8724EC4 +:10470800724D734B734AA04207D01C60049B210072 +:1047180034702C6014701C7071E706A9097B117045 +:104728000B9A1A60FFF704F93123002801D00138E9 +:10473800C3B23370FFF7F6F8286079E700231370E7 +:10474800FFF75DFB002800D07CE75BE7FFB238008D +:10475800FEF740FE644B0400984204D9FDF7F4FCD0 +:10476800210001208BE75B4B604E1C78049330607E +:10477800FCF748F85E4B0200390020000693FEF76C +:1047880073FE0590002806D0012801D1FDF7DCFC56 +:104798000420316873E7FCF78BFC0122554C524228 +:1047A80000281DD00378AB431AD0049B22801D78C3 +:1047B80033680793FCF726F84F4B02000093280054 +:1047C8004E4B07990194FFF7E7F9002809D0049B9D +:1047D8001878069B1968FEF773FE032031684EE7C8 +:1047E800228000210E2000F0ADF900210D2000F0FC +:1047F800A9F93900222000F0A5F9FCF759FC002896 +:1048080001D003780593059B0BAC23702E4B1B78C6 +:1048180063702E4B1B6863602F4B1878002808D0F4 +:10482800FBF7F0FF2F4B1B68C01AFF2800D9FF20A9 +:10483800C0B22A4B2072187009A92000FEF7B6FEF4 +:104848000822002009A900F0A5F9039BFF335A7834 +:10485800002A04D0039B0020591C00F09BF9FF217B +:10486800122000F06FF9FFF7D1FA214D041E08D18C +:10487800184B29681878FEF723FE1C4B0620196888 +:10488800FDE6039A1E4B127809201A7000F048F9C9 +:104898000F221C4B1040023018702B681A4D2B60E9 +:1048A800002B03D13800FEF795FD2860FBF7B0FF19 +:1048B8002B681649164A5B181B1813600122014B16 +:1048C8001A70A0E6DB190020C0190020BC190020CE +:1048D800C4190020C8190020B0190020B8190020F8 +:1048E800D8190020B419002060CC0500AC190020AC +:1048F800CC19002010000020801A060010270000A4 +:10490800DA190020D9190020D4190020F049020032 +:10491800D019002070B50C1E01D1002070BD2A4BA3 +:104928001B78012BF9D118422CD0122000F0F8F88E +:1049380005000100122000F005F92D0722D50025F9 +:10494800224B234E1B7865702370224B1B78A37073 +:1049580033686360204B1C78FBF754FF2900020082 +:104968002000FEF7BDFDFDF7DFFB1C4B3168188802 +:10497800FFF774F928003168FFF7D6FDFFF70CFE42 +:104988000120CBE7FBF744FF154B1B68C01AC4D4C2 +:10499800FF21122000F0D6F80C4B0D4D1B78237028 +:1049A800012363700B4B1B78A3702B6863600A4B61 +:1049B8001C78FBF727FF002102002000FEF790FD7E +:1049C80005202968D8E7C046DB190020DA1900203D +:1049D800D4190020D9190020C8190020100000207F +:1049E800D0190020024B1878431E9841C0B2704776 +:1049F800DB19002070B50500FCF75AFB002801D12F +:104A0800002070BD0378012BFAD1FEF7ADFF002816 +:104A1800F6D0FBF7F7FEFA24FEF7B8FFA4004443EC +:104A28000B2802D80948001BEBE72B1CF72D01D9EE +:104A3800074B1B780833D8B2FEF7CCFC054B064A67 +:104A4800E3181B189342DBD90448ECE7E02E00007A +:104A5800D4570008983A0000400D0300203C03009A +:104A68000122032370B515004C00A340A5408A40DD +:104A780006689E4335430560456895430222A24077 +:104A88004560816899430A438260C2689A43C2605C +:104A980070BD032349008B4002689A430260C268D4 +:104AA8009A43C260704700000222084B19681142FD +:104AB800FCD00121064A107018680842FCD08021F9 +:104AC80018680842FCD11078C0B27047083001401D +:104AD8000C3001408022044B002802D112021A60D7 +:104AE80070471206FBE7C0461800005010B50A4C84 +:104AF80000212000FFF7B4FF8022084B52021A6001 +:104B08000120FBF7A9FE00212000FFF7C2FF0620C5 +:104B1800FBF7A2FE10BDC046000800501808005060 +:104B280010B504000120FFF7D5FF7F202040FFF7D4 +:104B3800BBFF0020FFF7B8FF04000020FFF7CAFF03 +:104B4800200010BD70B5040001200D00FFF7C2FF62 +:104B580080202043FFF7A8FF2800FFF7A5FF0020CB +:104B6800FFF7B8FF70BD70B5050001200C001600F6 +:104B7800FFF7B0FF7F202840FFF796FFA619002017 +:104B8800B44202D1FFF7A6FF70BDFFF78DFF20707A +:104B98000134F4E770B5050001200C001600FFF79A +:104BA80099FF80202843FFF77FFFA619B44203D15D +:104BB8000020FFF78FFF70BD2078FFF775FF0134E5 +:104BC800F4E710B54220FFF7ABFF10BD10B5002386 +:104BD8000A4A410BC004FBF729FB0400010CC9B2C7 +:104BE8000620FFF7AFFF210A0720C9B2FFF7AAFF87 +:104BF8000820E1B2FFF7A6FF10BDC0460048E80153 +:104C080010B5011C112809D91121802302395B42F2 +:104C180019430920C9B2FFF795FF10BDC3B2022B93 +:104C2800F3D20221F1E70000F0B5FA230D000921C3 +:104C38008DB006005B0004919D4205D2FB3BAB4260 +:104C48009B415B420733049300230793331C0C2ECC +:104C580039D90C23DBB20393171C082A38D9082743 +:104C6800FBB2059307AB0193414B290000930398CE +:104C7800FF23FAB2FEF78AFB041E2ED1FA22920015 +:104C88006A43039908AB19705A80110C120E5A71B5 +:104C9800FF229A71079A1971110ADA711972110CA7 +:104CA800120E9A726022DA72324A59729A810F226F +:104CB800987301005F7000920200C220FDF7C2FFE6 +:104CC80020000DB0F0BDF1B20629C3D20623C1E71A +:104CD800D3B2052BC4D20527C2E704270599049B44 +:104CE80004391B01490019431D20C9B2FFF72AFFE7 +:104CF800039B1E2019013943C9B2FFF723FF262061 +:104D0800FFF70EFF0A2E19D97D2D12D80C21014369 +:104D1800C9B22620FFF716FF3120FFF701FF07234E +:104D2800032198430143C9B23120FFF70BFF0A2141 +:104D380019E0F723390018400143EAE7F72339005F +:104D4800184001432620FFF7FDFE062EE4D8312047 +:104D5800FFF7E6FE0723052198430143C9B2312036 +:104D6800FFF7F0FE0C213720FFF7ECFEA8E7C0465E +:104D780060CC0500CC05000010B5FFF755FF10BD4D +:104D8800F8B50723794A8024116808200B4313607B +:104D9800C0227749774F0B68774E934323430B60C4 +:104DA80076490B6883430B60754976480B689343D3 +:104DB80023430B607449A0240B68E4059343734AAA +:104DC8000B60136872490B401360802240212368EE +:104DD80092013B401343236003688B436D49036092 +:104DE8000B683B401A436C4B0A601A683A401A60D9 +:104DF8006A4A1568354015602568694E3540802631 +:104E08003602B4463543802625600568B5430560FB +:104E180065460868624E3040284380250860196856 +:104E28006D01314001261960116820000901090946 +:104E380011601A680F213A402A431A60FFF710FEE2 +:104E4800584F0020FFF746FE00215748FFF708FE9D +:104E5800310020003E60FFF703FE31005248FFF7A3 +:104E6800FFFD02215048FFF7FBFD80224F4B9202C5 +:104E78001A6002233B608023DB023B6004213C482C +:104E8800FFF707FE31003A48FFF703FE00213848D4 +:104E9800FFF7FFFD44480D21FFF7FBFD444A454855 +:104EA80013681D4315601368802180240368194026 +:104EB8002342F9D1B820404B400119603F49713C69 +:104EC8000860C521890019604021186801431960EC +:104ED80001231168F0201943116039490A68A24377 +:104EE8001A430A601021374A15688543294311601F +:104EF8001168A1430B431360202333490A68824396 +:104F080013430B603149324B0A6832481A430A602E +:104F180031490A681A430A6030490A6802400A603F +:104F28002F4A032113600520FBF7C0FC032107204B +:104F3800FBF7BCFCFFF7DAFDFEF782FF041E02D187 +:104F480000242000F8BDFFF73CFE0138C0B2FD2860 +:104F5800F6D82448FFF73AFE0522FA210720FFF782 +:104F680063FE0E20FFF74CFEEBE7C0462C10024014 +:104F780000040050FFCFFFFFFFFFFFF004040050C4 +:104F880008040050040000500C0400502004005095 +:104F9800FF0FFFFF080000500C00005020000050D9 +:104FA800FF3FFFFF1808005000080050180000508D +:104FB8003410024008300140003001400430014004 +:104FC8000C000140080001401400014000040140A9 +:104FD80013200000ECDFFFFF080401400C0401402F +:104FE80014040140C0CA8936EFF3108272B600215A +:104FF800024B1868196082F310887047DC1900208A +:105008000B4A03211368180008400B420ED01060A9 +:105018000222134203D00749086802430A60DB07EB +:1050280004D50423034A11680B4313607047C04634 +:1050380014040140DC1900200B4A0C4913681800BD +:1050480008400B420ED01060DA0604D50122084948 +:10505800086802430A609B0404D50823044A1168BF +:105068000B4313607047C046140401401020000031 +:10507800DC190020F0B557464E464546DE46E0B5F9 +:1050880004000D009246994683B08B4230D82DD04B +:1050980049465046FBF7EAF8290006002000FBF7CE +:1050A800E5F8331A9846203B34D49B4653465A4673 +:1050B800934042461F00534693401E00AF423BD8E0 +:1050C800AF4200D179E05B46A41BBD41002B00DA5A +:1050D80076E0002200230092019301235A46934070 +:1050E8000193012342469340009329E08242CFD99D +:1050F80000220023009201930C9B002B01D01C601E +:105108005D600098019903B0F0BCBB46B246A94661 +:10511800A046F0BD42469B4620239B1A5246DA40E1 +:10512800414613004A468A40170042461F435346E9 +:1051380093401E00AF42C3D900220023009201937E +:105148004346002BD8D0FB0772081A4346467B0813 +:105158000EE0AB4201D1A2420CD8A41A9D41012015 +:1051680024196D410021013E24184D41002E06D01E +:10517800AB42EED9013E24196D41002EF8D10098BA +:1051880001995B4600196941002B24DB2B005A4624 +:105198004446D3402A00E2401C005B461500002B21 +:1051A8002ADB26009E40330026004746BE403200D8 +:1051B800801A9941009001919EE7A342BCD882E7EA +:1051C8004246202300219B1A0022009101920122CD +:1051D800DA40019285E7424620239B1A2A00464678 +:1051E8009A402300F340444613432A00E2401C003F +:1051F8005B461500002BD4DA42462F0020232600F8 +:1052080097409B1ADE403B003343CDE730B500247E +:105218000139A24201D1002005E0035D01340D5D92 +:10522800AB42F6D0581B30BD03008218934200D120 +:10523800704719700133F9E7002310B59A4200D17D +:1052480010BDCC5CC4540133F8E74641554C543A80 +:1052580052455345540D0A004541524C593A52455E +:105268005345545C725C6E005253543A5354415245 +:10527800540D0A005253543A4D41494E0D0A004507 +:1052880041524C593A4D41494E5C725C6E004D3A60 +:10529800524144494F5F4259504153530D0A00004F +:1052A80001010300C50900080E000000000000000D +:1052B80002010100000000000100000000000000E1 +:1052C80003010100000000000100000000000000D0 +:1052D8000401020000000000A60000000000000019 +:1052E80005010100000000000100000000000000AE +:1052F8000601010075090008000000000000000018 +:105308000708060000000000FF0000000000000081 +:1053180008010100750900080100000000000000F4 +:105328000901010000000000010000000000000069 +:105338000A01030000000000000000000000000057 +:105348000B0405020000000000100E000000000021 +:105358000C01030000000000100000000000000025 +:105368000D020400000000006400000000000000BE +:105378000E0101007509000800000000000000008F +:105388001002040000000000F4010000000000000A +:1053980011010300000000000400000000000000EC +:1053A800130204000000000090010000000000004B +:1053B80014010300000000000000000000000000CD +:1053C80015010200000000000200000000000000BB +:1053D800160103000000000011000000000000009A +:1053E8001708060000000000000000000000000090 +:1053F800180806000000000000000000000000007F +:10540800800103010000000001000000000000000E +:1054180081010301000000000200000000000000FC +:1054280082010101000000000000000000000000EF +:10543800000308090A0B0C070D0E000048E80100DC +:1054480090D0030020A107002E00433A53454E4454 +:105458005F424F4F540D0A00433A53454E445F464E +:1054680041554C540D0A00433A53454E445F52454A +:105478004144590D0A00433A434C4B5F4853455F3A +:1054880033324D0D0A00433A434C4B5F4853495F52 +:1054980031364D0D0A00433A494E49545F444F4E48 +:1054A800450D0A00433A44495350415443480D0AB4 +:1054B80000433A4241445F5645520D0A00433A5070 +:1054C800494E470D0A00433A5645525F44495350E6 +:1054D8000D0A004F53452D4C696665547261634C43 +:1054E8004F52412D4D75726174614657006465765F +:1054F800004641494C0041540041544900200041B4 +:10550800542B5645523F00433A41545F5645525F2B +:10551800444953500D0A0046573D00205645525302 +:10552800494F4E3D00204749543D002050524F54AA +:105538004F3D0020534348454D413D0020434150D5 +:105548003D30780041542B524144494F3F00455269 +:10555800524F520D0A00524144494F3D00205645D2 +:105568005253494F4E3D3078002053544154453DE5 +:105578000041542B535441543F00484F53545F4407 +:10558800524F5050454400484F53545F4552524F74 +:10559800525300484F53545F51554555455F465542 +:1055A8004C4C00484F53545F4952515F49444C4555 +:1055B80000484F53545F4952515F485400484F5375 +:1055C800545F4952515F544300484F53545F495206 +:1055D800515F544500484F53545F52585F425954E5 +:1055E800455300484F53545F52585F4C50554152F1 +:1055F8005400484F53545F52585F555341525431E9 +:1056080000484F53545F50415253455F4F4B004839 +:105618004F53545F50415253455F45525200484FD3 +:1056280053545F554152545F4552525F4C50554157 +:10563800525400484F53545F554152545F4552529B +:105648005F55534152543100524144494F5F4449D8 +:105658004F3000524144494F5F44494F3100524155 +:1056680044494F5F44494F3200524144494F5F44D7 +:10567800494F3300524144494F5F52585F4F4B00E6 +:10568800524144494F5F54585F4F4B00524144497F +:105698004F5F4352435F45525200535441544500B3 +:1056A80041542B48454C500041542B48454C503FE1 +:1056B800004154204154492041542B5645523F2023 +:1056C80041542B524144494F3F2041542B5354419C +:1056D800543F2041542B48454C502041542B4249BB +:1056E8004E0D0A0041542B42494E004F4B2042496F +:1056F8004E0D0A00483A52585F4C505541525431A9 +:105708000D0A00483A52585F5553415254310D0A18 +:1057180000483A4552525F4C5055415254310D0A97 +:1057280000483A4552525F5553415254310D0A00D0 +:10573800483A50524F435F4652414D450D0A004882 +:105748003A434F42535F4552520D0A00483A434F7D +:1057580042535F4F56460D0A00483A50415253454E +:105768005F4552520D0A00483A5645525F5245511C +:105778005F52580D0A00483A4652414D455F4F4B1B +:105788000D0A00483A515F46554C4C0D0A00483AFC +:1057980041545F44495350415443480D0A00483A24 +:1057A80052585F52494E475F4F56460D0A000180D6 +:1057B800000000028100000003834000010485000E +:1057C800000005860000000687A00000F700000022 +:1057D8001249134B70B50C68186872B6002303267B +:1057E800104A114D1360114A1360114A1360114A8F +:1057F8001360114A1360114A13602A6801331A436F +:105808002A600F4D2A68B24313432B600D4B196071 +:1058180084F30888804730BFFDE7C0460000F01FCA +:105828000400F01F004400403410024004440040CB +:105838000844004010E000E014E000E018E000E058 +:105848000000014008ED00E001224F4BF0B5196857 +:1058580085B00A431A60042219681142FCD0032358 +:105868004A4A11689943023B0B430C2113601368A1 +:105878000B40042BFBD1464B464E052233600023D8 +:10588800454D464C2B602260F032FF320193039263 +:10589800A63302938020019B414A9B00D158414A7C +:1058A8008002136800270343136001233E4A1068EF +:1058B8000343A0201360F023C00502689A43503BBD +:1058C800134303600C20394A136883433848136034 +:1058D8000268384B1A408823DB0113430360364AB9 +:1058E800364B48081F601760354A1760354A8018DC +:1058F800FAF7F8FB1F21344B344A186011600D2267 +:105908002E4B39001A603B00314F029A8A421BD84D +:1059180000232A4A1360284A1360294A1360019A0F +:1059280001320192032A04D1236033602B6005B051 +:10593800F0BD039B029A9B1A0393A6230293019B33 +:10594800022BA7D1039BA4E78020226840020240D3 +:10595800501E8241202089181E4A12680242D4D063 +:105968001D483A68C05CD2B2904208D10133082B76 +:10597800CBD10023236033602B60FFF729FFA53AC2 +:1059880053425341C1E7C046001002400C10024088 +:105998007F3E000014E000E018E000E010E000E0C6 +:1059A800CC000008381002402C10024004000050BF +:1059B80020000050FF00FFFF044400400044004066 +:1059C800084400400024F4000C44004020440040F7 +:0C59D800244400401C440040C4000008AF +:0859E40098F6FF7F01000000AE +:1059EC00010000000024F400FF010000801A0600F2 +:0459FC00FFFF0000A9 :0400000508000405E6 :00000001FF diff --git a/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/build/firmware.map b/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/build/firmware.map index 8c0b66f8..696638da 100644 --- a/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/build/firmware.map +++ b/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/build/firmware.map @@ -401,7 +401,7 @@ END GROUP .boot_rodata 0x080000c4 0x14 .boot_rodata 0x080000c4 0x14 build/boot/safe_mode.o -.text 0x080000d8 0x56fc +.text 0x080000d8 0x5700 0x080000d8 . = ALIGN (0x4) *(.text) .text 0x080000d8 0x14 c:/program files (x86)/arm gnu toolchain arm-none-eabi/12.2 mpacbti-rel1/bin/../lib/gcc/arm-none-eabi/12.2.1/thumb/v6-m/nofp\libgcc.a(_thumb1_case_uqi.o) @@ -617,587 +617,587 @@ END GROUP 0x080013f4 0xd0 build/host/host_cmd.o 0x080013f4 host_cmd_init .text.host_cmd_dispatch - 0x080014c4 0x32c build/host/host_cmd.o + 0x080014c4 0x330 build/host/host_cmd.o 0x080014c4 host_cmd_dispatch .text.host_cmd_dispatch_at_line - 0x080017f0 0x454 build/host/host_cmd.o - 0x080017f0 host_cmd_dispatch_at_line + 0x080017f4 0x454 build/host/host_cmd.o + 0x080017f4 host_cmd_dispatch_at_line .text.host_cmd_on_radio_events - 0x08001c44 0x8 build/host/host_cmd.o - 0x08001c44 host_cmd_on_radio_events + 0x08001c48 0x8 build/host/host_cmd.o + 0x08001c48 host_cmd_on_radio_events .text.host_cmd_emit_tx_done - 0x08001c4c 0x2e build/host/host_cmd.o - 0x08001c4c host_cmd_emit_tx_done - *fill* 0x08001c7a 0x2 + 0x08001c50 0x2e build/host/host_cmd.o + 0x08001c50 host_cmd_emit_tx_done + *fill* 0x08001c7e 0x2 .text.host_cmd_service_tx_mailbox - 0x08001c7c 0x80 build/host/host_cmd.o - 0x08001c7c host_cmd_service_tx_mailbox + 0x08001c80 0x80 build/host/host_cmd.o + 0x08001c80 host_cmd_service_tx_mailbox .text.host_cmd_emit_fault - 0x08001cfc 0x1c build/host/host_cmd.o - 0x08001cfc host_cmd_emit_fault + 0x08001d00 0x1c build/host/host_cmd.o + 0x08001d00 host_cmd_emit_fault .text.host_cmd_emit_rx_frame - 0x08001d18 0x28 build/host/host_cmd.o - 0x08001d18 host_cmd_emit_rx_frame + 0x08001d1c 0x28 build/host/host_cmd.o + 0x08001d1c host_cmd_emit_rx_frame .text.host_rfco_pertx_pack - 0x08001d40 0x62 build/host/host_rfco.o - 0x08001d40 host_rfco_pertx_pack - *fill* 0x08001da2 0x2 + 0x08001d44 0x62 build/host/host_rfco.o + 0x08001d44 host_rfco_pertx_pack + *fill* 0x08001da6 0x2 .text.host_rfco_blocked_attempts_record - 0x08001da4 0x2c build/host/host_rfco.o - 0x08001da4 host_rfco_blocked_attempts_record + 0x08001da8 0x2c build/host/host_rfco.o + 0x08001da8 host_rfco_blocked_attempts_record .text.host_rfco_blocked_attempts_snapshot_and_clear - 0x08001dd0 0x24 build/host/host_rfco.o - 0x08001dd0 host_rfco_blocked_attempts_snapshot_and_clear + 0x08001dd4 0x24 build/host/host_rfco.o + 0x08001dd4 host_rfco_blocked_attempts_snapshot_and_clear .text.host_rfco_pertx_window_record - 0x08001df4 0x24 build/host/host_rfco.o - 0x08001df4 host_rfco_pertx_window_record + 0x08001df8 0x24 build/host/host_rfco.o + 0x08001df8 host_rfco_pertx_window_record .text.host_rfco_pertx_emit - 0x08001e18 0x4a build/host/host_rfco.o - 0x08001e18 host_rfco_pertx_emit - *fill* 0x08001e62 0x2 + 0x08001e1c 0x4a build/host/host_rfco.o + 0x08001e1c host_rfco_pertx_emit + *fill* 0x08001e66 0x2 .text.host_rfco_pertx_count_in_window_snapshot_and_clear - 0x08001e64 0x18 build/host/host_rfco.o - 0x08001e64 host_rfco_pertx_count_in_window_snapshot_and_clear + 0x08001e68 0x18 build/host/host_rfco.o + 0x08001e68 host_rfco_pertx_count_in_window_snapshot_and_clear .text.host_rfco_last_clamp_reason_snapshot_and_clear - 0x08001e7c 0x10 build/host/host_rfco.o - 0x08001e7c host_rfco_last_clamp_reason_snapshot_and_clear + 0x08001e80 0x10 build/host/host_rfco.o + 0x08001e80 host_rfco_last_clamp_reason_snapshot_and_clear .text.host_rfco_summary_pack - 0x08001e8c 0xe8 build/host/host_rfco_summary.o - 0x08001e8c host_rfco_summary_pack + 0x08001e90 0xe8 build/host/host_rfco_summary.o + 0x08001e90 host_rfco_summary_pack .text.host_rfco_summary_emit - 0x08001f74 0xf8 build/host/host_rfco_summary_emit.o - 0x08001f74 host_rfco_summary_emit + 0x08001f78 0xf8 build/host/host_rfco_summary_emit.o + 0x08001f78 host_rfco_summary_emit .text.host_rfco_summary_tick - 0x0800206c 0x3c build/host/host_rfco_summary_emit.o - 0x0800206c host_rfco_summary_tick + 0x08002070 0x3c build/host/host_rfco_summary_emit.o + 0x08002070 host_rfco_summary_tick .text.put_u32_le - 0x080020a8 0x10 build/host/host_stats.o + 0x080020ac 0x10 build/host/host_stats.o .text.host_stats_reset - 0x080020b8 0x54 build/host/host_stats.o - 0x080020b8 host_stats_reset + 0x080020bc 0x54 build/host/host_stats.o + 0x080020bc host_stats_reset .text.host_stats_radio_rx_ok - 0x0800210c 0x10 build/host/host_stats.o - 0x0800210c host_stats_radio_rx_ok + 0x08002110 0x10 build/host/host_stats.o + 0x08002110 host_stats_radio_rx_ok .text.host_stats_radio_crc_err - 0x0800211c 0x10 build/host/host_stats.o - 0x0800211c host_stats_radio_crc_err + 0x08002120 0x10 build/host/host_stats.o + 0x08002120 host_stats_radio_crc_err .text.host_stats_radio_tx_ok - 0x0800212c 0x10 build/host/host_stats.o - 0x0800212c host_stats_radio_tx_ok + 0x08002130 0x10 build/host/host_stats.o + 0x08002130 host_stats_radio_tx_ok .text.host_stats_radio_tx_abort_lbt - 0x0800213c 0x10 build/host/host_stats.o - 0x0800213c host_stats_radio_tx_abort_lbt + 0x08002140 0x10 build/host/host_stats.o + 0x08002140 host_stats_radio_tx_abort_lbt .text.host_stats_radio_tx_abort_airtime - 0x0800214c 0x10 build/host/host_stats.o - 0x0800214c host_stats_radio_tx_abort_airtime + 0x08002150 0x10 build/host/host_stats.o + 0x08002150 host_stats_radio_tx_abort_airtime .text.host_stats_note_radio_events - 0x0800215c 0x44 build/host/host_stats.o - 0x0800215c host_stats_note_radio_events + 0x08002160 0x44 build/host/host_stats.o + 0x08002160 host_stats_note_radio_events .text.host_stats_serialize - 0x080021a0 0x1fc build/host/host_stats.o - 0x080021a0 host_stats_serialize + 0x080021a4 0x1fc build/host/host_stats.o + 0x080021a4 host_stats_serialize .text.host_uart_note_trace - 0x0800239c 0x10 build/host/host_uart.o + 0x080023a0 0x10 build/host/host_uart.o .text.crc16_ccitt - 0x080023ac 0x3c build/host/host_uart.o + 0x080023b0 0x3c build/host/host_uart.o .text.usart2_write_byte - 0x080023e8 0x18 build/host/host_uart.o + 0x080023ec 0x18 build/host/host_uart.o .text.usart2_write_bytes - 0x08002400 0x24 build/host/host_uart.o + 0x08002404 0x24 build/host/host_uart.o .text.host_uart_send_urc.part.0 - 0x08002424 0x120 build/host/host_uart.o + 0x08002428 0x120 build/host/host_uart.o .text.process_encoded_frame - 0x08002544 0x1f0 build/host/host_uart.o + 0x08002548 0x1f0 build/host/host_uart.o .text.ingest_binary_byte - 0x08002734 0x6c build/host/host_uart.o + 0x08002738 0x6c build/host/host_uart.o .text.gpio_set_alt.constprop.0 - 0x080027a0 0x70 build/host/host_uart.o + 0x080027a4 0x70 build/host/host_uart.o .text.rx_ring_push.isra.0 - 0x08002810 0x40 build/host/host_uart.o + 0x08002814 0x40 build/host/host_uart.o .text.at_replay_candidate_to_binary - 0x08002850 0x30 build/host/host_uart.o + 0x08002854 0x30 build/host/host_uart.o .text.host_uart_poll_dma - 0x08002880 0x164 build/host/host_uart.o - 0x08002880 host_uart_poll_dma + 0x08002884 0x164 build/host/host_uart.o + 0x08002884 host_uart_poll_dma .text.host_uart_service_rx - 0x080029e4 0x13c build/host/host_uart.o - 0x080029e4 host_uart_service_rx + 0x080029e8 0x13c build/host/host_uart.o + 0x080029e8 host_uart_service_rx .text.host_uart_flush_diag_traces - 0x08002b20 0xd4 build/host/host_uart.o - 0x08002b20 host_uart_flush_diag_traces + 0x08002b24 0xd4 build/host/host_uart.o + 0x08002b24 host_uart_flush_diag_traces .text.host_uart_pop_frame - 0x08002bf4 0x54 build/host/host_uart.o - 0x08002bf4 host_uart_pop_frame + 0x08002bf8 0x54 build/host/host_uart.o + 0x08002bf8 host_uart_pop_frame .text.host_uart_send_urc - 0x08002c48 0x2c build/host/host_uart.o - 0x08002c48 host_uart_send_urc + 0x08002c4c 0x2c build/host/host_uart.o + 0x08002c4c host_uart_send_urc .text.host_uart_send_ascii - 0x08002c74 0x24 build/host/host_uart.o - 0x08002c74 host_uart_send_ascii + 0x08002c78 0x24 build/host/host_uart.o + 0x08002c78 host_uart_send_ascii .text.host_uart_send_err_proto - 0x08002c98 0x2a build/host/host_uart.o - 0x08002c98 host_uart_send_err_proto - *fill* 0x08002cc2 0x2 + 0x08002c9c 0x2a build/host/host_uart.o + 0x08002c9c host_uart_send_err_proto + *fill* 0x08002cc6 0x2 .text.host_uart_stats_reset - 0x08002cc4 0x100 build/host/host_uart.o - 0x08002cc4 host_uart_stats_reset + 0x08002cc8 0x100 build/host/host_uart.o + 0x08002cc8 host_uart_stats_reset .text.host_uart_init - 0x08002dc4 0x198 build/host/host_uart.o - 0x08002dc4 host_uart_init + 0x08002dc8 0x198 build/host/host_uart.o + 0x08002dc8 host_uart_init .text.host_uart_stats_dropped - 0x08002f5c 0xc build/host/host_uart.o - 0x08002f5c host_uart_stats_dropped + 0x08002f60 0xc build/host/host_uart.o + 0x08002f60 host_uart_stats_dropped .text.host_uart_stats_errors - 0x08002f68 0xc build/host/host_uart.o - 0x08002f68 host_uart_stats_errors + 0x08002f6c 0xc build/host/host_uart.o + 0x08002f6c host_uart_stats_errors .text.host_uart_stats_queue_full - 0x08002f74 0xc build/host/host_uart.o - 0x08002f74 host_uart_stats_queue_full + 0x08002f78 0xc build/host/host_uart.o + 0x08002f78 host_uart_stats_queue_full .text.host_uart_stats_irq_idle - 0x08002f80 0xc build/host/host_uart.o - 0x08002f80 host_uart_stats_irq_idle + 0x08002f84 0xc build/host/host_uart.o + 0x08002f84 host_uart_stats_irq_idle .text.host_uart_stats_irq_ht - 0x08002f8c 0xc build/host/host_uart.o - 0x08002f8c host_uart_stats_irq_ht + 0x08002f90 0xc build/host/host_uart.o + 0x08002f90 host_uart_stats_irq_ht .text.host_uart_stats_irq_tc - 0x08002f98 0xc build/host/host_uart.o - 0x08002f98 host_uart_stats_irq_tc + 0x08002f9c 0xc build/host/host_uart.o + 0x08002f9c host_uart_stats_irq_tc .text.host_uart_stats_irq_te - 0x08002fa4 0xc build/host/host_uart.o - 0x08002fa4 host_uart_stats_irq_te + 0x08002fa8 0xc build/host/host_uart.o + 0x08002fa8 host_uart_stats_irq_te .text.host_uart_stats_rx_bytes - 0x08002fb0 0xc build/host/host_uart.o - 0x08002fb0 host_uart_stats_rx_bytes + 0x08002fb4 0xc build/host/host_uart.o + 0x08002fb4 host_uart_stats_rx_bytes .text.host_uart_stats_rx_lpuart_bytes - 0x08002fbc 0xc build/host/host_uart.o - 0x08002fbc host_uart_stats_rx_lpuart_bytes + 0x08002fc0 0xc build/host/host_uart.o + 0x08002fc0 host_uart_stats_rx_lpuart_bytes .text.host_uart_stats_rx_usart1_bytes - 0x08002fc8 0xc build/host/host_uart.o - 0x08002fc8 host_uart_stats_rx_usart1_bytes + 0x08002fcc 0xc build/host/host_uart.o + 0x08002fcc host_uart_stats_rx_usart1_bytes .text.host_uart_stats_parse_ok - 0x08002fd4 0xc build/host/host_uart.o - 0x08002fd4 host_uart_stats_parse_ok + 0x08002fd8 0xc build/host/host_uart.o + 0x08002fd8 host_uart_stats_parse_ok .text.host_uart_stats_parse_err - 0x08002fe0 0xc build/host/host_uart.o - 0x08002fe0 host_uart_stats_parse_err + 0x08002fe4 0xc build/host/host_uart.o + 0x08002fe4 host_uart_stats_parse_err .text.host_uart_stats_uart_err_lpuart - 0x08002fec 0xc build/host/host_uart.o - 0x08002fec host_uart_stats_uart_err_lpuart + 0x08002ff0 0xc build/host/host_uart.o + 0x08002ff0 host_uart_stats_uart_err_lpuart .text.host_uart_stats_uart_err_usart1 - 0x08002ff8 0xc build/host/host_uart.o - 0x08002ff8 host_uart_stats_uart_err_usart1 + 0x08002ffc 0xc build/host/host_uart.o + 0x08002ffc host_uart_stats_uart_err_usart1 .text.host_uart_stats_uart_pe_lpuart - 0x08003004 0xc build/host/host_uart.o - 0x08003004 host_uart_stats_uart_pe_lpuart + 0x08003008 0xc build/host/host_uart.o + 0x08003008 host_uart_stats_uart_pe_lpuart .text.host_uart_stats_uart_fe_lpuart - 0x08003010 0xc build/host/host_uart.o - 0x08003010 host_uart_stats_uart_fe_lpuart + 0x08003014 0xc build/host/host_uart.o + 0x08003014 host_uart_stats_uart_fe_lpuart .text.host_uart_stats_uart_ne_lpuart - 0x0800301c 0xc build/host/host_uart.o - 0x0800301c host_uart_stats_uart_ne_lpuart + 0x08003020 0xc build/host/host_uart.o + 0x08003020 host_uart_stats_uart_ne_lpuart .text.host_uart_stats_uart_ore_lpuart - 0x08003028 0xc build/host/host_uart.o - 0x08003028 host_uart_stats_uart_ore_lpuart + 0x0800302c 0xc build/host/host_uart.o + 0x0800302c host_uart_stats_uart_ore_lpuart .text.host_uart_stats_uart_pe_usart1 - 0x08003034 0xc build/host/host_uart.o - 0x08003034 host_uart_stats_uart_pe_usart1 + 0x08003038 0xc build/host/host_uart.o + 0x08003038 host_uart_stats_uart_pe_usart1 .text.host_uart_stats_uart_fe_usart1 - 0x08003040 0xc build/host/host_uart.o - 0x08003040 host_uart_stats_uart_fe_usart1 + 0x08003044 0xc build/host/host_uart.o + 0x08003044 host_uart_stats_uart_fe_usart1 .text.host_uart_stats_uart_ne_usart1 - 0x0800304c 0xc build/host/host_uart.o - 0x0800304c host_uart_stats_uart_ne_usart1 + 0x08003050 0xc build/host/host_uart.o + 0x08003050 host_uart_stats_uart_ne_usart1 .text.host_uart_stats_uart_ore_usart1 - 0x08003058 0xc build/host/host_uart.o - 0x08003058 host_uart_stats_uart_ore_usart1 + 0x0800305c 0xc build/host/host_uart.o + 0x0800305c host_uart_stats_uart_ore_usart1 .text.host_uart_stats_rx_ring_ovf - 0x08003064 0xc build/host/host_uart.o - 0x08003064 host_uart_stats_rx_ring_ovf + 0x08003068 0xc build/host/host_uart.o + 0x08003068 host_uart_stats_rx_ring_ovf .text.host_uart_take_dma_te_events - 0x08003070 0x18 build/host/host_uart.o - 0x08003070 host_uart_take_dma_te_events + 0x08003074 0x18 build/host/host_uart.o + 0x08003074 host_uart_take_dma_te_events .text.host_uart_take_rx_seen_flags - 0x08003088 0x1c build/host/host_uart.o - 0x08003088 host_uart_take_rx_seen_flags + 0x0800308c 0x1c build/host/host_uart.o + 0x0800308c host_uart_take_rx_seen_flags .text.host_uart_note_diag_mark - 0x080030a4 0x1c build/host/host_uart.o - 0x080030a4 host_uart_note_diag_mark + 0x080030a8 0x1c build/host/host_uart.o + 0x080030a8 host_uart_note_diag_mark .text.host_uart_take_diag_marks - 0x080030c0 0x1c build/host/host_uart.o - 0x080030c0 host_uart_take_diag_marks + 0x080030c4 0x1c build/host/host_uart.o + 0x080030c4 host_uart_take_diag_marks .text.RNG_LPUART1_IRQHandler - 0x080030dc 0xe0 build/host/host_uart.o - 0x080030dc RNG_LPUART1_IRQHandler + 0x080030e0 0xe0 build/host/host_uart.o + 0x080030e0 RNG_LPUART1_IRQHandler .text.USART1_IRQHandler - 0x080031bc 0xe0 build/host/host_uart.o - 0x080031bc USART1_IRQHandler + 0x080031c0 0xe0 build/host/host_uart.o + 0x080031c0 USART1_IRQHandler .text.sx1276_airtime_set_budget_us - 0x0800329c 0x24 build/radio/sx1276_airtime.o - 0x0800329c sx1276_airtime_set_budget_us + 0x080032a0 0x24 build/radio/sx1276_airtime.o + 0x080032a0 sx1276_airtime_set_budget_us .text.sx1276_airtime_compute_toa_us - 0x080032c0 0xd0 build/radio/sx1276_airtime.o - 0x080032c0 sx1276_airtime_compute_toa_us + 0x080032c4 0xd0 build/radio/sx1276_airtime.o + 0x080032c4 sx1276_airtime_compute_toa_us .text.sx1276_airtime_config_invariant_ok - 0x08003390 0x48 build/radio/sx1276_airtime.o - 0x08003390 sx1276_airtime_config_invariant_ok + 0x08003394 0x48 build/radio/sx1276_airtime.o + 0x08003394 sx1276_airtime_config_invariant_ok .text.sx1276_airtime_estimate_toa_us - 0x080033d8 0x94 build/radio/sx1276_airtime.o - 0x080033d8 sx1276_airtime_estimate_toa_us + 0x080033dc 0x94 build/radio/sx1276_airtime.o + 0x080033dc sx1276_airtime_estimate_toa_us .text.sx1276_airtime_reserve - 0x0800346c 0x58 build/radio/sx1276_airtime.o - 0x0800346c sx1276_airtime_reserve + 0x08003470 0x58 build/radio/sx1276_airtime.o + 0x08003470 sx1276_airtime_reserve .text.sx1276_airtime_release - 0x080034c4 0x20 build/radio/sx1276_airtime.o - 0x080034c4 sx1276_airtime_release + 0x080034c8 0x20 build/radio/sx1276_airtime.o + 0x080034c8 sx1276_airtime_release .text.sx1276_airtime_commit - 0x080034e4 0x44 build/radio/sx1276_airtime.o - 0x080034e4 sx1276_airtime_commit + 0x080034e8 0x44 build/radio/sx1276_airtime.o + 0x080034e8 sx1276_airtime_commit .text.sx1276_cad_begin - 0x08003528 0x28 build/radio/sx1276_cad.o - 0x08003528 sx1276_cad_begin + 0x0800352c 0x28 build/radio/sx1276_cad.o + 0x0800352c sx1276_cad_begin .text.sx1276_cad_abort - 0x08003550 0x20 build/radio/sx1276_cad.o - 0x08003550 sx1276_cad_abort + 0x08003554 0x20 build/radio/sx1276_cad.o + 0x08003554 sx1276_cad_abort .text.sx1276_cad_poll - 0x08003570 0x40 build/radio/sx1276_cad.o - 0x08003570 sx1276_cad_poll + 0x08003574 0x40 build/radio/sx1276_cad.o + 0x08003574 sx1276_cad_poll .text.lora_pkt_hdr_pack - 0x080035b0 0x30 build/radio/lora_pkt_hdr.o - 0x080035b0 lora_pkt_hdr_pack + 0x080035b4 0x30 build/radio/lora_pkt_hdr.o + 0x080035b4 lora_pkt_hdr_pack .text.lora_pkt_hdr_unpack - 0x080035e0 0x40 build/radio/lora_pkt_hdr.o - 0x080035e0 lora_pkt_hdr_unpack + 0x080035e4 0x40 build/radio/lora_pkt_hdr.o + 0x080035e4 lora_pkt_hdr_unpack .text.sx1276_fhss_chantab_center_hz - 0x08003620 0x1c build/radio/sx1276_fhss_chantab.o - 0x08003620 sx1276_fhss_chantab_center_hz + 0x08003624 0x1c build/radio/sx1276_fhss_chantab.o + 0x08003624 sx1276_fhss_chantab_center_hz .text.sx1276_fhss_compute_seed - 0x0800363c 0x54 build/radio/sx1276_fhss.o - 0x0800363c sx1276_fhss_compute_seed + 0x08003640 0x54 build/radio/sx1276_fhss.o + 0x08003640 sx1276_fhss_compute_seed .text.sx1276_fhss_compute_permutation - 0x08003690 0x4c build/radio/sx1276_fhss.o - 0x08003690 sx1276_fhss_compute_permutation + 0x08003694 0x4c build/radio/sx1276_fhss.o + 0x08003694 sx1276_fhss_compute_permutation .text.rebuild_epoch_permutation - 0x080036dc 0x2c build/radio/sx1276_fhss.o + 0x080036e0 0x2c build/radio/sx1276_fhss.o .text.sx1276_fhss_reset - 0x08003708 0x14 build/radio/sx1276_fhss.o - 0x08003708 sx1276_fhss_reset + 0x0800370c 0x14 build/radio/sx1276_fhss.o + 0x0800370c sx1276_fhss_reset .text.sx1276_fhss_init - 0x0800371c 0x40 build/radio/sx1276_fhss.o - 0x0800371c sx1276_fhss_init + 0x08003720 0x40 build/radio/sx1276_fhss.o + 0x08003720 sx1276_fhss_init .text.sx1276_fhss_next_channel - 0x0800375c 0x90 build/radio/sx1276_fhss.o - 0x0800375c sx1276_fhss_next_channel + 0x08003760 0x90 build/radio/sx1276_fhss.o + 0x08003760 sx1276_fhss_next_channel .text.sx1276_fhss_snap_to - 0x080037ec 0x34 build/radio/sx1276_fhss.o - 0x080037ec sx1276_fhss_snap_to + 0x080037f0 0x34 build/radio/sx1276_fhss.o + 0x080037f0 sx1276_fhss_snap_to .text.sx1276_fhss_consider_remote - 0x08003820 0x60 build/radio/sx1276_fhss.o - 0x08003820 sx1276_fhss_consider_remote + 0x08003824 0x60 build/radio/sx1276_fhss.o + 0x08003824 sx1276_fhss_consider_remote .text.sx1276_fhss_active_count - 0x08003880 0x40 build/radio/sx1276_fhss.o - 0x08003880 sx1276_fhss_active_count + 0x08003884 0x40 build/radio/sx1276_fhss.o + 0x08003884 sx1276_fhss_active_count .text.sx1276_fhss_record_lbt_block - 0x080038c0 0x1c build/radio/sx1276_fhss.o - 0x080038c0 sx1276_fhss_record_lbt_block + 0x080038c4 0x1c build/radio/sx1276_fhss.o + 0x080038c4 sx1276_fhss_record_lbt_block .text.sx1276_fhss_record_hop - 0x080038dc 0x20 build/radio/sx1276_fhss.o - 0x080038dc sx1276_fhss_record_hop + 0x080038e0 0x20 build/radio/sx1276_fhss.o + 0x080038e0 sx1276_fhss_record_hop .text.sx1276_fhss_hop_count_snapshot_and_clear - 0x080038fc 0x2c build/radio/sx1276_fhss.o - 0x080038fc sx1276_fhss_hop_count_snapshot_and_clear + 0x08003900 0x2c build/radio/sx1276_fhss.o + 0x08003900 sx1276_fhss_hop_count_snapshot_and_clear .text.sx1276_fhss_current_epoch - 0x08003928 0xc build/radio/sx1276_fhss.o - 0x08003928 sx1276_fhss_current_epoch + 0x0800392c 0xc build/radio/sx1276_fhss.o + 0x0800392c sx1276_fhss_current_epoch .text.sx1276_fhss_current_slot - 0x08003934 0xc build/radio/sx1276_fhss.o - 0x08003934 sx1276_fhss_current_slot + 0x08003938 0xc build/radio/sx1276_fhss.o + 0x08003938 sx1276_fhss_current_slot .text.sx1276_fhss_is_initialized - 0x08003940 0xc build/radio/sx1276_fhss.o - 0x08003940 sx1276_fhss_is_initialized + 0x08003944 0xc build/radio/sx1276_fhss.o + 0x08003944 sx1276_fhss_is_initialized .text.sx1276_fhss_clock_reset - 0x0800394c 0x10 build/radio/sx1276_fhss_clock.o - 0x0800394c sx1276_fhss_clock_reset + 0x08003950 0x10 build/radio/sx1276_fhss_clock.o + 0x08003950 sx1276_fhss_clock_reset .text.sx1276_fhss_clock_anchor - 0x0800395c 0x10 build/radio/sx1276_fhss_clock.o - 0x0800395c sx1276_fhss_clock_anchor + 0x08003960 0x10 build/radio/sx1276_fhss_clock.o + 0x08003960 sx1276_fhss_clock_anchor .text.sx1276_fhss_clock_valid - 0x0800396c 0xc build/radio/sx1276_fhss_clock.o - 0x0800396c sx1276_fhss_clock_valid + 0x08003970 0xc build/radio/sx1276_fhss_clock.o + 0x08003970 sx1276_fhss_clock_valid .text.sx1276_fhss_clock_abs_slot - 0x08003978 0x18 build/radio/sx1276_fhss_clock.o - 0x08003978 sx1276_fhss_clock_abs_slot + 0x0800397c 0x18 build/radio/sx1276_fhss_clock.o + 0x0800397c sx1276_fhss_clock_abs_slot .text.sx1276_fhss_clock_in_slot_ms - 0x08003990 0x18 build/radio/sx1276_fhss_clock.o - 0x08003990 sx1276_fhss_clock_in_slot_ms + 0x08003994 0x18 build/radio/sx1276_fhss_clock.o + 0x08003994 sx1276_fhss_clock_in_slot_ms .text.sx1276_fhss_clock_anchor_rx - 0x080039a8 0x28 build/radio/sx1276_fhss_clock.o - 0x080039a8 sx1276_fhss_clock_anchor_rx + 0x080039ac 0x28 build/radio/sx1276_fhss_clock.o + 0x080039ac sx1276_fhss_clock_anchor_rx .text.sx1276_fhss_clock_age_ms - 0x080039d0 0xc build/radio/sx1276_fhss_clock.o - 0x080039d0 sx1276_fhss_clock_age_ms + 0x080039d4 0xc build/radio/sx1276_fhss_clock.o + 0x080039d4 sx1276_fhss_clock_age_ms .text.lbt_arm_backoff - 0x080039dc 0x38 build/radio/sx1276_lbt.o + 0x080039e0 0x38 build/radio/sx1276_lbt.o .text.cfg_read_u8 - 0x08003a14 0x30 build/radio/sx1276_lbt.o + 0x08003a18 0x30 build/radio/sx1276_lbt.o .text.sx1276_lbt_check_and_backoff - 0x08003a44 0x108 build/radio/sx1276_lbt.o - 0x08003a44 sx1276_lbt_check_and_backoff + 0x08003a48 0x108 build/radio/sx1276_lbt.o + 0x08003a48 sx1276_lbt_check_and_backoff .text.sx1276_legal_dwell_used_us - 0x08003b4c 0x50 build/radio/sx1276_legal_dwell.o - 0x08003b4c sx1276_legal_dwell_used_us + 0x08003b50 0x50 build/radio/sx1276_legal_dwell.o + 0x08003b50 sx1276_legal_dwell_used_us .text.sx1276_legal_dwell_reserve - 0x08003b9c 0xc4 build/radio/sx1276_legal_dwell.o - 0x08003b9c sx1276_legal_dwell_reserve + 0x08003ba0 0xc4 build/radio/sx1276_legal_dwell.o + 0x08003ba0 sx1276_legal_dwell_reserve .text.sx1276_legal_dwell_reconcile - 0x08003c60 0x34 build/radio/sx1276_legal_dwell.o - 0x08003c60 sx1276_legal_dwell_reconcile + 0x08003c64 0x34 build/radio/sx1276_legal_dwell.o + 0x08003c64 sx1276_legal_dwell_reconcile .text.sx1276_legal_dwell_peak_us_snapshot_and_clear - 0x08003c94 0x20 build/radio/sx1276_legal_dwell.o - 0x08003c94 sx1276_legal_dwell_peak_us_snapshot_and_clear + 0x08003c98 0x20 build/radio/sx1276_legal_dwell.o + 0x08003c98 sx1276_legal_dwell_peak_us_snapshot_and_clear .text.mode_desc_for_state - 0x08003cb4 0x30 build/radio/sx1276_modes.o + 0x08003cb8 0x30 build/radio/sx1276_modes.o .text.sx1276_delay_us - 0x08003ce4 0x16 build/radio/sx1276_modes.o - *fill* 0x08003cfa 0x2 + 0x08003ce8 0x16 build/radio/sx1276_modes.o + *fill* 0x08003cfe 0x2 .text.sx1276_modes_apply - 0x08003cfc 0xb8 build/radio/sx1276_modes.o + 0x08003d00 0xb8 build/radio/sx1276_modes.o .text.sx1276_modes_get_state - 0x08003db4 0xc build/radio/sx1276_modes.o - 0x08003db4 sx1276_modes_get_state + 0x08003db8 0xc build/radio/sx1276_modes.o + 0x08003db8 sx1276_modes_get_state .text.sx1276_modes_sync_external - 0x08003dc0 0x34 build/radio/sx1276_modes.o - 0x08003dc0 sx1276_modes_sync_external + 0x08003dc4 0x34 build/radio/sx1276_modes.o + 0x08003dc4 sx1276_modes_sync_external .text.sx1276_modes_to_sleep - 0x08003df4 0xe build/radio/sx1276_modes.o - 0x08003df4 sx1276_modes_to_sleep + 0x08003df8 0xe build/radio/sx1276_modes.o + 0x08003df8 sx1276_modes_to_sleep .text.sx1276_modes_to_standby - 0x08003e02 0xe build/radio/sx1276_modes.o - 0x08003e02 sx1276_modes_to_standby + 0x08003e06 0xe build/radio/sx1276_modes.o + 0x08003e06 sx1276_modes_to_standby .text.sx1276_modes_to_tx - 0x08003e10 0xe build/radio/sx1276_modes.o - 0x08003e10 sx1276_modes_to_tx + 0x08003e14 0xe build/radio/sx1276_modes.o + 0x08003e14 sx1276_modes_to_tx .text.sx1276_modes_to_rx_cont - 0x08003e1e 0xe build/radio/sx1276_modes.o - 0x08003e1e sx1276_modes_to_rx_cont + 0x08003e22 0xe build/radio/sx1276_modes.o + 0x08003e22 sx1276_modes_to_rx_cont .text.sx1276_modes_to_cad - 0x08003e2c 0x16 build/radio/sx1276_modes.o - 0x08003e2c sx1276_modes_to_cad - *fill* 0x08003e42 0x2 + 0x08003e30 0x16 build/radio/sx1276_modes.o + 0x08003e30 sx1276_modes_to_cad + *fill* 0x08003e46 0x2 .text.sx1276_modes_init - 0x08003e44 0x48 build/radio/sx1276_modes.o - 0x08003e44 sx1276_modes_init + 0x08003e48 0x48 build/radio/sx1276_modes.o + 0x08003e48 sx1276_modes_init .text.rx_pll_settle_busy_wait.constprop.0 - 0x08003e8c 0x18 build/radio/sx1276_rx.o + 0x08003e90 0x18 build/radio/sx1276_rx.o .text.sx1276_rx_arm - 0x08003ea4 0x2a build/radio/sx1276_rx.o - 0x08003ea4 sx1276_rx_arm - *fill* 0x08003ece 0x2 + 0x08003ea8 0x2a build/radio/sx1276_rx.o + 0x08003ea8 sx1276_rx_arm + *fill* 0x08003ed2 0x2 .text.scan_dispatch_action - 0x08003ed0 0xcc build/radio/sx1276_rx.o + 0x08003ed4 0xcc build/radio/sx1276_rx.o .text.scan_drive - 0x08003f9c 0xa8 build/radio/sx1276_rx.o + 0x08003fa0 0xa8 build/radio/sx1276_rx.o .text.scan_feed_frame - 0x08004044 0x18 build/radio/sx1276_rx.o + 0x08004048 0x18 build/radio/sx1276_rx.o .text.sx1276_rx_disarm - 0x0800405c 0x8 build/radio/sx1276_rx.o - 0x0800405c sx1276_rx_disarm + 0x08004060 0x8 build/radio/sx1276_rx.o + 0x08004060 sx1276_rx_disarm .text.sx1276_rx_service - 0x08004064 0x194 build/radio/sx1276_rx.o - 0x08004064 sx1276_rx_service + 0x08004068 0x194 build/radio/sx1276_rx.o + 0x08004068 sx1276_rx_service .text.sx1276_rx_tick - 0x080041f8 0x8c build/radio/sx1276_rx.o - 0x080041f8 sx1276_rx_tick + 0x080041fc 0x8c build/radio/sx1276_rx.o + 0x080041fc sx1276_rx_tick .text.sx1276_rx_scan_tick - 0x08004284 0xe build/radio/sx1276_rx.o - 0x08004284 sx1276_rx_scan_tick - *fill* 0x08004292 0x2 + 0x08004288 0xe build/radio/sx1276_rx.o + 0x08004288 sx1276_rx_scan_tick + *fill* 0x08004296 0x2 .text.sx1276_rx_slot_follow - 0x08004294 0x8c build/radio/sx1276_rx.o - 0x08004294 sx1276_rx_slot_follow + 0x08004298 0x8c build/radio/sx1276_rx.o + 0x08004298 sx1276_rx_slot_follow .text.sx1276_rx_scan_reset - 0x08004320 0x44 build/radio/sx1276_rx.o - 0x08004320 sx1276_rx_scan_reset + 0x08004324 0x44 build/radio/sx1276_rx.o + 0x08004324 sx1276_rx_scan_reset .text.sx1276_rx_counter_record - 0x08004364 0x18 build/radio/sx1276_rx_counters.o - 0x08004364 sx1276_rx_counter_record + 0x08004368 0x18 build/radio/sx1276_rx_counters.o + 0x08004368 sx1276_rx_counter_record .text.sx1276_rx_retune_eval - 0x0800437c 0x26 build/radio/sx1276_rx_retune_policy.o - 0x0800437c sx1276_rx_retune_eval - *fill* 0x080043a2 0x2 + 0x08004380 0x26 build/radio/sx1276_rx_retune_policy.o + 0x08004380 sx1276_rx_retune_eval + *fill* 0x080043a6 0x2 .text.sx1276_rx_retune_counter_record - 0x080043a4 0x18 build/radio/sx1276_rx_retune_counters.o - 0x080043a4 sx1276_rx_retune_counter_record + 0x080043a8 0x18 build/radio/sx1276_rx_retune_counters.o + 0x080043a8 sx1276_rx_retune_counter_record .text.sx1276_rx_scan_eval - 0x080043bc 0xac build/radio/sx1276_rx_scan_policy.o - 0x080043bc sx1276_rx_scan_eval + 0x080043c0 0xac build/radio/sx1276_rx_scan_policy.o + 0x080043c0 sx1276_rx_scan_eval .text.sx1276_rx_scan_counter_record - 0x08004468 0x30 build/radio/sx1276_rx_scan_counters.o - 0x08004468 sx1276_rx_scan_counter_record + 0x0800446c 0x30 build/radio/sx1276_rx_scan_counters.o + 0x0800446c sx1276_rx_scan_counter_record .text.sx1276_rx_scan_fail_eval - 0x08004498 0x5e build/radio/sx1276_rx_scan_fail.o - 0x08004498 sx1276_rx_scan_fail_eval - *fill* 0x080044f6 0x2 + 0x0800449c 0x5e build/radio/sx1276_rx_scan_fail.o + 0x0800449c sx1276_rx_scan_fail_eval + *fill* 0x080044fa 0x2 .text.sx1276_rx_scan_walker_reset - 0x080044f8 0xc build/radio/sx1276_rx_scan_walker.o - 0x080044f8 sx1276_rx_scan_walker_reset + 0x080044fc 0xc build/radio/sx1276_rx_scan_walker.o + 0x080044fc sx1276_rx_scan_walker_reset .text.sx1276_rx_scan_walker_next - 0x08004504 0x28 build/radio/sx1276_rx_scan_walker.o - 0x08004504 sx1276_rx_scan_walker_next + 0x08004508 0x28 build/radio/sx1276_rx_scan_walker.o + 0x08004508 sx1276_rx_scan_walker_next .text.tx_emit_rfco_pertx - 0x0800452c 0x70 build/radio/sx1276_tx.o + 0x08004530 0x70 build/radio/sx1276_tx.o .text.sx1276_tx_cleanup - 0x0800459c 0x2c build/radio/sx1276_tx.o + 0x080045a0 0x2c build/radio/sx1276_tx.o .text.sx1276_tx_begin - 0x080045c8 0x350 build/radio/sx1276_tx.o - 0x080045c8 sx1276_tx_begin + 0x080045cc 0x350 build/radio/sx1276_tx.o + 0x080045cc sx1276_tx_begin .text.sx1276_tx_poll - 0x08004918 0xd0 build/radio/sx1276_tx.o - 0x08004918 sx1276_tx_poll + 0x0800491c 0xd0 build/radio/sx1276_tx.o + 0x0800491c sx1276_tx_poll .text.sx1276_tx_busy - 0x080049e8 0x10 build/radio/sx1276_tx.o - 0x080049e8 sx1276_tx_busy + 0x080049ec 0x10 build/radio/sx1276_tx.o + 0x080049ec sx1276_tx_busy .text.sx1276_tx_slot_wait_us - 0x080049f8 0x6c build/radio/sx1276_tx.o - 0x080049f8 sx1276_tx_slot_wait_us + 0x080049fc 0x6c build/radio/sx1276_tx.o + 0x080049fc sx1276_tx_slot_wait_us .text.gpio_mode_output - 0x08004a64 0x32 build/radio/sx1276.o + 0x08004a68 0x32 build/radio/sx1276.o .text.gpio_mode_input - 0x08004a96 0x14 build/radio/sx1276.o - *fill* 0x08004aaa 0x2 + 0x08004a9a 0x14 build/radio/sx1276.o + *fill* 0x08004aae 0x2 .text.spi1_transfer - 0x08004aac 0x2c build/radio/sx1276.o + 0x08004ab0 0x2c build/radio/sx1276.o .text.sx1276_select - 0x08004ad8 0x18 build/radio/sx1276.o + 0x08004adc 0x18 build/radio/sx1276.o .text.sx1276_radio_reset - 0x08004af0 0x34 build/radio/sx1276.o - 0x08004af0 sx1276_radio_reset + 0x08004af4 0x34 build/radio/sx1276.o + 0x08004af4 sx1276_radio_reset .text.sx1276_read_reg - 0x08004b24 0x24 build/radio/sx1276.o - 0x08004b24 sx1276_read_reg + 0x08004b28 0x24 build/radio/sx1276.o + 0x08004b28 sx1276_read_reg .text.sx1276_write_reg - 0x08004b48 0x22 build/radio/sx1276.o - 0x08004b48 sx1276_write_reg + 0x08004b4c 0x22 build/radio/sx1276.o + 0x08004b4c sx1276_write_reg .text.sx1276_read_burst - 0x08004b6a 0x2e build/radio/sx1276.o - 0x08004b6a sx1276_read_burst + 0x08004b6e 0x2e build/radio/sx1276.o + 0x08004b6e sx1276_read_burst .text.sx1276_write_burst - 0x08004b98 0x2e build/radio/sx1276.o - 0x08004b98 sx1276_write_burst + 0x08004b9c 0x2e build/radio/sx1276.o + 0x08004b9c sx1276_write_burst .text.sx1276_read_version - 0x08004bc6 0xa build/radio/sx1276.o - 0x08004bc6 sx1276_read_version + 0x08004bca 0xa build/radio/sx1276.o + 0x08004bca sx1276_read_version .text.sx1276_set_frequency_hz - 0x08004bd0 0x34 build/radio/sx1276.o - 0x08004bd0 sx1276_set_frequency_hz + 0x08004bd4 0x34 build/radio/sx1276.o + 0x08004bd4 sx1276_set_frequency_hz .text.sx1276_set_tx_power_dbm - 0x08004c04 0x26 build/radio/sx1276.o - 0x08004c04 sx1276_set_tx_power_dbm - *fill* 0x08004c2a 0x2 + 0x08004c08 0x26 build/radio/sx1276.o + 0x08004c08 sx1276_set_tx_power_dbm + *fill* 0x08004c2e 0x2 .text.sx1276_set_sf_bw_cr_checked - 0x08004c2c 0x150 build/radio/sx1276.o - 0x08004c2c sx1276_set_sf_bw_cr_checked + 0x08004c30 0x150 build/radio/sx1276.o + 0x08004c30 sx1276_set_sf_bw_cr_checked .text.sx1276_set_sf_bw_cr - 0x08004d7c 0x8 build/radio/sx1276.o - 0x08004d7c sx1276_set_sf_bw_cr + 0x08004d80 0x8 build/radio/sx1276.o + 0x08004d80 sx1276_set_sf_bw_cr .text.sx1276_init - 0x08004d84 0x268 build/radio/sx1276.o - 0x08004d84 sx1276_init + 0x08004d88 0x268 build/radio/sx1276.o + 0x08004d88 sx1276_init .text.sx1276_take_irq_events - 0x08004fec 0x18 build/radio/sx1276.o - 0x08004fec sx1276_take_irq_events + 0x08004ff0 0x18 build/radio/sx1276.o + 0x08004ff0 sx1276_take_irq_events .text.EXTI0_1_IRQHandler - 0x08005004 0x38 build/radio/sx1276.o - 0x08005004 EXTI0_1_IRQHandler + 0x08005008 0x38 build/radio/sx1276.o + 0x08005008 EXTI0_1_IRQHandler .text.EXTI4_15_IRQHandler - 0x0800503c 0x3c build/radio/sx1276.o - 0x0800503c EXTI4_15_IRQHandler + 0x08005040 0x3c build/radio/sx1276.o + 0x08005040 EXTI4_15_IRQHandler .text.__udivmoddi4 - 0x08005078 0x198 c:/program files (x86)/arm gnu toolchain arm-none-eabi/12.2 mpacbti-rel1/bin/../lib/gcc/arm-none-eabi/12.2.1/thumb/v6-m/nofp\libgcc.a(_udivmoddi4.o) - 0x08005078 __udivmoddi4 - .text.memcmp 0x08005210 0x1c c:/program files (x86)/arm gnu toolchain arm-none-eabi/12.2 mpacbti-rel1/bin/../lib/gcc/arm-none-eabi/12.2.1/thumb/v6-m/nofp\libc_nano.a(libc_a-memcmp.o) - 0x08005210 memcmp - .text.memset 0x0800522c 0x10 c:/program files (x86)/arm gnu toolchain arm-none-eabi/12.2 mpacbti-rel1/bin/../lib/gcc/arm-none-eabi/12.2.1/thumb/v6-m/nofp\libc_nano.a(libc_a-memset.o) - 0x0800522c memset - .text.memcpy 0x0800523c 0x12 c:/program files (x86)/arm gnu toolchain arm-none-eabi/12.2 mpacbti-rel1/bin/../lib/gcc/arm-none-eabi/12.2.1/thumb/v6-m/nofp\libc_nano.a(libc_a-memcpy-stub.o) - 0x0800523c memcpy + 0x0800507c 0x198 c:/program files (x86)/arm gnu toolchain arm-none-eabi/12.2 mpacbti-rel1/bin/../lib/gcc/arm-none-eabi/12.2.1/thumb/v6-m/nofp\libgcc.a(_udivmoddi4.o) + 0x0800507c __udivmoddi4 + .text.memcmp 0x08005214 0x1c c:/program files (x86)/arm gnu toolchain arm-none-eabi/12.2 mpacbti-rel1/bin/../lib/gcc/arm-none-eabi/12.2.1/thumb/v6-m/nofp\libc_nano.a(libc_a-memcmp.o) + 0x08005214 memcmp + .text.memset 0x08005230 0x10 c:/program files (x86)/arm gnu toolchain arm-none-eabi/12.2 mpacbti-rel1/bin/../lib/gcc/arm-none-eabi/12.2.1/thumb/v6-m/nofp\libc_nano.a(libc_a-memset.o) + 0x08005230 memset + .text.memcpy 0x08005240 0x12 c:/program files (x86)/arm gnu toolchain arm-none-eabi/12.2 mpacbti-rel1/bin/../lib/gcc/arm-none-eabi/12.2.1/thumb/v6-m/nofp\libc_nano.a(libc_a-memcpy-stub.o) + 0x08005240 memcpy *(.rodata) *(.rodata.*) .rodata.NMI_Handler.str1.1 - 0x0800524e 0xe build/startup.o + 0x08005252 0xe build/startup.o .rodata.Reset_Handler.str1.1 - 0x0800525c 0x36 build/startup.o + 0x08005260 0x36 build/startup.o .rodata.main.str1.1 - 0x08005292 0x11 build/main.o - *fill* 0x080052a3 0x1 + 0x08005296 0x11 build/main.o + *fill* 0x080052a7 0x1 .rodata.k_cfg_desc - 0x080052a4 0x190 build/host/host_cfg.o + 0x080052a8 0x190 build/host/host_cfg.o .rodata.CSWTCH.6 - 0x08005434 0xa build/host/host_cfg_profile.o - *fill* 0x0800543e 0x2 + 0x08005438 0xa build/host/host_cfg_profile.o + *fill* 0x08005442 0x2 .rodata.CSWTCH.4 - 0x08005440 0xc build/host/host_cfg_profile.o + 0x08005444 0xc build/host/host_cfg_profile.o .rodata.at_send_ok.str1.1 - 0x0800544c 0x11 build/host/host_cmd.o + 0x08005450 0x11 build/host/host_cmd.o 0x5 (size before relaxing) .rodata.at_send_u32.str1.1 - 0x0800544c 0x11 build/host/host_cmd.o + 0x08005450 0x11 build/host/host_cmd.o 0x2 (size before relaxing) .rodata.at_send_key_u32.str1.1 - 0x0800544c 0x11 build/host/host_cmd.o + 0x08005450 0x11 build/host/host_cmd.o 0x2 (size before relaxing) .rodata.at_send_version_triplet.str1.1 - 0x0800544c 0x2 build/host/host_cmd.o + 0x08005450 0x2 build/host/host_cmd.o .rodata.host_cmd_init.str1.1 - 0x0800544e 0x5a build/host/host_cmd.o + 0x08005452 0x5a build/host/host_cmd.o .rodata.host_cmd_dispatch.str1.1 - 0x080054a8 0x4d build/host/host_cmd.o + 0x080054ac 0x4d build/host/host_cmd.o .rodata.host_cmd_dispatch_at_line.str1.1 - 0x080054f5 0x203 build/host/host_cmd.o + 0x080054f9 0x203 build/host/host_cmd.o 0x209 (size before relaxing) .rodata.host_uart_flush_diag_traces.str1.1 - 0x080056f8 0xba build/host/host_uart.o + 0x080056fc 0xba build/host/host_uart.o .rodata.k_mode_descs - 0x080057b2 0x1e build/radio/sx1276_modes.o + 0x080057b6 0x1e build/radio/sx1276_modes.o .rodata.sx1276_tx_slot_wait_us.cst1 - 0x080057d0 0x1 build/radio/sx1276_tx.o + 0x080057d4 0x1 build/radio/sx1276_tx.o *(.glue_7) - .glue_7 0x080057d1 0x0 linker stubs + .glue_7 0x080057d5 0x0 linker stubs *(.glue_7t) - .glue_7t 0x080057d1 0x0 linker stubs + .glue_7t 0x080057d5 0x0 linker stubs *(.eh_frame) - 0x080057d4 . = ALIGN (0x4) - *fill* 0x080057d1 0x3 - 0x080057d4 _etext = . + 0x080057d8 . = ALIGN (0x4) + *fill* 0x080057d5 0x3 + 0x080057d8 _etext = . -.vfp11_veneer 0x080057d4 0x0 - .vfp11_veneer 0x080057d4 0x0 linker stubs +.vfp11_veneer 0x080057d8 0x0 + .vfp11_veneer 0x080057d8 0x0 linker stubs -.v4_bx 0x080057d4 0x0 - .v4_bx 0x080057d4 0x0 linker stubs +.v4_bx 0x080057d8 0x0 + .v4_bx 0x080057d8 0x0 linker stubs -.iplt 0x080057d4 0x0 - .iplt 0x080057d4 0x0 build/startup.o +.iplt 0x080057d8 0x0 + .iplt 0x080057d8 0x0 build/startup.o -.boot_text 0x080057d4 0x20c - .boot_text 0x080057d4 0x20c build/boot/safe_mode.o - 0x080057d4 jump_to_bootloader - 0x0800584c safe_mode_listen +.boot_text 0x080057d8 0x20c + .boot_text 0x080057d8 0x20c build/boot/safe_mode.o + 0x080057d8 jump_to_bootloader + 0x08005850 safe_mode_listen .ARM.extab *(.ARM.extab* .gnu.linkonce.armextab.*) -.ARM 0x080059e0 0x8 - 0x080059e0 __exidx_start = . +.ARM 0x080059e4 0x8 + 0x080059e4 __exidx_start = . *(.ARM.exidx*) .ARM.exidx.text.__udivmoddi4 - 0x080059e0 0x8 c:/program files (x86)/arm gnu toolchain arm-none-eabi/12.2 mpacbti-rel1/bin/../lib/gcc/arm-none-eabi/12.2.1/thumb/v6-m/nofp\libgcc.a(_udivmoddi4.o) - 0x080059e8 __exidx_end = . - 0x080059e8 _sidata = LOADADDR (.data) + 0x080059e4 0x8 c:/program files (x86)/arm gnu toolchain arm-none-eabi/12.2 mpacbti-rel1/bin/../lib/gcc/arm-none-eabi/12.2.1/thumb/v6-m/nofp\libgcc.a(_udivmoddi4.o) + 0x080059ec __exidx_end = . + 0x080059ec _sidata = LOADADDR (.data) -.rel.dyn 0x080059e8 0x0 - .rel.iplt 0x080059e8 0x0 build/startup.o +.rel.dyn 0x080059ec 0x0 + .rel.iplt 0x080059ec 0x0 build/startup.o -.data 0x20000000 0x14 load address 0x080059e8 +.data 0x20000000 0x14 load address 0x080059ec 0x20000000 . = ALIGN (0x4) 0x20000000 _sdata = . *(.data) @@ -1220,17 +1220,17 @@ END GROUP *fill* 0x20000012 0x2 0x20000014 _edata = . -.igot.plt 0x20000014 0x0 load address 0x080059fc +.igot.plt 0x20000014 0x0 load address 0x08005a00 .igot.plt 0x20000014 0x0 build/startup.o -.noinit 0x20000014 0x18 load address 0x080059fc +.noinit 0x20000014 0x18 load address 0x08005a00 0x20000014 . = ALIGN (0x4) *(.noinit) .noinit 0x20000014 0x18 build/hal/platform.o *(.noinit.*) 0x2000002c . = ALIGN (0x4) -.bss 0x20000030 0x19b0 load address 0x080059fc +.bss 0x20000030 0x19b0 load address 0x08005a00 0x20000030 . = ALIGN (0x4) 0x20000030 _sbss = . 0x20000030 __bss_start__ = _sbss @@ -1473,7 +1473,7 @@ END GROUP 0x200019e0 _ebss = . 0x200019e0 __bss_end__ = _ebss -._user_heap 0x200019e0 0x0 load address 0x080059fc +._user_heap 0x200019e0 0x0 load address 0x08005a00 0x200019e0 . = ALIGN (0x8) 0x200019e0 _end = . 0x200019e0 _heap_start = . @@ -1481,7 +1481,7 @@ END GROUP 0x200019e0 . = ALIGN (0x8) 0x200019e0 _heap_end = . -.stack_check 0x200019e0 0x0 load address 0x080059fc +.stack_check 0x200019e0 0x0 load address 0x08005a00 0x200019e0 . = ALIGN (0x8) 0x200019e0 . = (. + 0x0) 0x00000001 ASSERT (((_heap_end + _stack_size) <= _estack), Linker error: not enough RAM left for the reserved stack) diff --git a/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/config.h b/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/config.h index 5bebd120..adb2da4b 100644 --- a/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/config.h +++ b/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/config.h @@ -58,16 +58,24 @@ #define HOST_TXQ_P0_RESERVED 1U /* per Claude §H5: keep one P0 */ /* Diagnostic/prototyping controls. Keep these conservative in production. - * F9 (2026-07-30): production RX arming no longer depends on this flag — - * host_reg_gate.c accepts opmode {0x80,0x81,0x85} unconditionally — so 0 - * is now VIABLE in production. Override with - * make EXTRA_CFLAGS="-DHOST_ALLOW_REG_WRITE_DIAG=0" - * (EXTRA_CFLAGS, not CFLAGS= which clobbers the MCU flag set). Default - * stays 1 for one bench soak cycle: the T2 TCXO probe writes opmode - * 0x00/0x01 and the SPI-isolation probe writes 0x83, plus registers - * 0x40/0x33/... — all need diag builds. Flip in a separate commit. */ + * F9 (2026-07-30): production RX arming does not depend on this flag — + * host_reg_gate.c accepts opmode {0x80,0x81,0x85} unconditionally. + * + * DEFAULT FLIPPED TO 0 on 2026-08-01 after the soak passed on air: + * a flag=0 build was flashed to both boards, the wire probe confirmed + * production arming ACKs while 0x1D and raw-TX 0x83 are FORBIDDEN, and + * a full 360 s FHSS bench run (1318 frames, rx_decode_err=0) ran clean + * (bench-evidence/FW_BATCH1_acceptance_2026-07-30). Production builds + * now ship with the 13-register diagnostic surface CLOSED — including + * 0x1D/0x1E, the FCC airtime-invariant bypass. + * + * Bench/diagnostic builds (T2 TCXO probe writes opmode 0x00/0x01, the + * SPI-isolation probe writes 0x83, plus registers 0x40/0x33/...) must + * now build with: + * make EXTRA_CFLAGS="-DHOST_ALLOW_REG_WRITE_DIAG=1" + * (EXTRA_CFLAGS, not CFLAGS= which clobbers the MCU flag set.) */ #ifndef HOST_ALLOW_REG_WRITE_DIAG -#define HOST_ALLOW_REG_WRITE_DIAG 1 +#define HOST_ALLOW_REG_WRITE_DIAG 0 #endif /* RS-3.7 (2026-07-25): was 1 — every nonzero radio-event batch emitted a * ~16-wire-byte debug URC through the blocking TX path. Bench builds can diff --git a/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/tools/check_size_budget.py b/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/tools/check_size_budget.py index cd83595d..8133ddb2 100644 --- a/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/tools/check_size_budget.py +++ b/LifeTrac-v25/DESIGN-CONTROLLER/firmware/murata_l072/tools/check_size_budget.py @@ -179,13 +179,23 @@ def main() -> int: defines = load_defines(args.memory_map) cache: Dict[str, int] = {} + # RS-5.8 (2026-08-01): re-anchored to the UNIFIED flash layout. The + # separate BOOT region was removed by the flash-layout remediation + # (MM_BOOT_BASE/MM_BOOT_SIZE no longer exist in memory_map.h), and + # MM_APP_SIZE == MM_FLASH_SIZE (192K) is nominal, not enforceable — + # the REAL hazard is the app load image growing into the CFG region + # at MM_CFG_BASE. The enforced budget is therefore + # [MM_APP_BASE, MM_CFG_BASE), which also naturally excludes the + # .cfg_reserved section that starts AT cfg_base. + # + # Historical note: this script asserted the pre-unification schema + # and had ALSO been crashing on C comments in macro values since + # 2026-05-10 — so the L072 cross-compile CI job was red for months + # and the size budget was never actually enforced. Both fixed. app_base = eval_macro("MM_APP_BASE", defines, cache, set()) - app_size = eval_macro("MM_APP_SIZE", defines, cache, set()) - app_end = app_base + app_size - - boot_base = eval_macro("MM_BOOT_BASE", defines, cache, set()) - boot_size = eval_macro("MM_BOOT_SIZE", defines, cache, set()) - boot_end = boot_base + boot_size + cfg_base = eval_macro("MM_CFG_BASE", defines, cache, set()) + app_size = cfg_base - app_base + app_end = cfg_base ram_base = eval_macro("MM_RAM_BASE", defines, cache, set()) ram_size = eval_macro("MM_RAM_SIZE", defines, cache, set()) @@ -197,16 +207,12 @@ def main() -> int: sections, size_stdout = parse_size_sections(args.elf) app_used = 0 - boot_used = 0 ram_used = 0 for section_name, (section_size, section_addr) in sections.items(): if section_size == 0: continue - if boot_base <= section_addr < boot_end: - boot_used += section_size - if app_base <= section_addr < app_end: app_used += section_size @@ -220,8 +226,7 @@ def main() -> int: app_ok = app_used <= app_size ram_ok = ram_used <= ram_budget - print("[size-budget] Region usage summary") - print(f" BOOT used : {fmt_kib(boot_used)} / {fmt_kib(boot_size)}") + print("[size-budget] Region usage summary (unified layout: app budget ends at MM_CFG_BASE)") print(f" APP used : {fmt_kib(app_used)} / {fmt_kib(app_size)}") print(f" RAM used : {fmt_kib(ram_used)} / {fmt_kib(ram_budget)} (stack reserved: {fmt_kib(stack_size)})") diff --git a/LifeTrac-v25/DESIGN-CONTROLLER/firmware/tractor_x8/camera_service.py b/LifeTrac-v25/DESIGN-CONTROLLER/firmware/tractor_x8/camera_service.py index dcfc1940..6f7bd3e7 100644 --- a/LifeTrac-v25/DESIGN-CONTROLLER/firmware/tractor_x8/camera_service.py +++ b/LifeTrac-v25/DESIGN-CONTROLLER/firmware/tractor_x8/camera_service.py @@ -36,6 +36,7 @@ import logging import os import struct +import threading import time from dataclasses import dataclass @@ -157,6 +158,7 @@ def _clamp_env(name, val, lo, hi): # per-frame byte budget here so the encoder sizes frames to the real air # quantum. Replaces the dead CMD_LINK_PROFILE M7 back-channel in bridge mode. TRACTOR_LINK_BUDGET_TOPIC = "lifetrac/v25/tractor/link_budget" +TRACTOR_TILE_STALE_TOPIC = "lifetrac/v25/tractor/tile_stale" # ---- capture backends ------------------------------------------------- @@ -540,6 +542,13 @@ def _clamp_encode_mode(requested: int) -> int: # tight budgets. 0 DISABLES escalation entirely (see the explicit `> 0` # guards at the use sites — without them a value of 0 would escalate every # tile with age >= 1, i.e. the exact opposite of "disabled"). +# F10 (2026-08-01): advisory stale marks from the base (0x6C via +# image_tx_daemon). Applied by back-dating tile_last_seq inside +# _build_frame, then cleared — level-triggered, so a re-mark simply +# arrives with the next report if the repair frame is lost too. +_stale_marks: set = set() +_stale_marks_lock = threading.Lock() + TILE_AGE_ESCALATE_FRAMES = _env_int( "LIFETRAC_TILE_AGE_ESCALATE_FRAMES", 40, lo=0) # Bound on wasted encode passes once the budget is full: after the first @@ -1025,6 +1034,21 @@ def _build_frame(cam, accum: FrameAccum, force_keyframe: bool, # gets budget priority); the over-budget liveness valve in the packing # loop handles the remaining case (an aged tile too large to EVER fit). # Together they guarantee every tile ships eventually. + # F10: apply pending stale marks by back-dating the tiles' last-shipped + # counter past the escalation horizon — the sort below then front-runs + # them, and the sweep picks them even when the local diff sees no + # change (a lost UPDATE means the base shows a stale blob while the + # tractor sees an unchanged tile). + if accum.tile_last_seq is not None and IMAGE_METHOD in ("B", "C"): + with _stale_marks_lock: + marks = list(_stale_marks) + _stale_marks.clear() + horizon = max(TILE_AGE_ESCALATE_FRAMES, 1) + 1 + for m in marks: + if 0 <= m < len(accum.tile_last_seq): + accum.tile_last_seq[m] = min( + accum.tile_last_seq[m], accum.sweep_seq - horizon) + if (TILE_AGE_ESCALATE_FRAMES > 0 and accum.tile_last_seq is not None and not is_key and IMAGE_METHOD in ("B", "C")): _ages = accum.tile_last_seq @@ -1459,6 +1483,26 @@ def _on_msg(_c, _u, _msg): if _msg.topic in (KEYFRAME_REQ_TOPIC, TRACTOR_KEYFRAME_TOPIC): force_key_evt.set() return + if _msg.topic == TRACTOR_TILE_STALE_TOPIC: + # F10: fold the base's stale marks into the age + # escalation by BACK-DATING tile_last_seq — the + # existing escalation sort, fair-share sweep, and + # over-budget liveness valve then treat the tile as + # maximally aged and front-run it into the next + # frame's budget. Reuses the whole shipping + # machinery; nothing new to schedule. Guarded to + # methods B/C (method A has no tile_last_seq). + body = bytes(_msg.payload or b"") + if len(body) >= 3: + marks = [] + for byte_i, b in enumerate(body[2:]): + for bit in range(8): + if b & (1 << bit): + marks.append(byte_i * 8 + bit) + with _stale_marks_lock: + _stale_marks.update( + m for m in marks if m < GRID_W * GRID_H) + return if _msg.topic == TRACTOR_LINK_BUDGET_TOPIC: # {"n_fragments": N, "profile_index": i} from the radio # owner. Feeds the existing LinkBudget.update seam so the @@ -1511,6 +1555,7 @@ def _on_msg(_c, _u, _msg): client.subscribe(KEYFRAME_REQ_TOPIC, qos=1) client.subscribe(TRACTOR_KEYFRAME_TOPIC, qos=1) client.subscribe(TRACTOR_LINK_BUDGET_TOPIC, qos=1) + client.subscribe(TRACTOR_TILE_STALE_TOPIC, qos=0) # Retained topic: a freshly (re)started camera_service picks up # the operator's last selection immediately on subscribe. client.subscribe(ENCODE_MODE_OVERRIDE_TOPIC, qos=1) diff --git a/LifeTrac-v25/DESIGN-CONTROLLER/firmware/tractor_x8/image_tx_daemon.py b/LifeTrac-v25/DESIGN-CONTROLLER/firmware/tractor_x8/image_tx_daemon.py index c6312179..07b31caa 100644 --- a/LifeTrac-v25/DESIGN-CONTROLLER/firmware/tractor_x8/image_tx_daemon.py +++ b/LifeTrac-v25/DESIGN-CONTROLLER/firmware/tractor_x8/image_tx_daemon.py @@ -98,6 +98,7 @@ CMD_OP_RADIO_PROFILE_CONF, CMD_OP_ENCODE_MODE_ACK, CMD_OP_PROBE, + CMD_OP_TILE_STALE, CMD_OP_PROBE_ECHO, ) from method_h_stage2_tx_probe_v2 import ( # noqa: E402 @@ -392,6 +393,8 @@ def record(self, toa_us: int) -> None: # finally sizes frames to the real air quantum (243 DTS / 203 FHSS) instead # of a boot-frozen env default. TRACTOR_LINK_BUDGET_TOPIC = "lifetrac/v25/tractor/link_budget" +# F10: stale-tile bitmaps from the base, handed to camera_service. +TRACTOR_TILE_STALE_TOPIC = "lifetrac/v25/tractor/tile_stale" # LINK_PHY_NAMES index (camera_service / lora_proto) for each radio profile: # profile 0/1 (BW250) -> "image_bw250" (idx 5); profile 2 (BW500) -> idx 6. _PROFILE_TO_LINK_PHY_IDX = {0: 5, 1: 5, 2: 6} @@ -807,6 +810,14 @@ def _dispatch_command(self, data: bytes) -> None: LOG.info("LoRa cmd: RADIO_PROFILE_CONF — switch confirmed") self._confirm_deadline = None self._revert_profile = None + elif opcode == CMD_OP_TILE_STALE: + # F10: advisory dirty marks from the base's persistent canvas. + # Hand the raw args to camera_service, which folds marked + # tiles into its age-escalation path. No ack (level-triggered; + # the next periodic report supersedes a lost one). + LOG.info("LoRa cmd: TILE_STALE %d B", len(args)) + if client is not None and len(args) >= 3: + client.publish(TRACTOR_TILE_STALE_TOPIC, bytes(args), qos=0) elif opcode == CMD_OP_PROBE: # 2026-07-27 RS-0.12 reactive-fire instrumentation. A probe is a # no-op the tractor logs (with the base's commanded phase offset)