Logical Render Pipelines and Command Packets
All checks were successful
JaCoCo Coverage #### Project Overview No changes detected, that affect the code coverage. * Line Coverage: 61.06% (17124/28043) * Branch Coverage: 51.92% (6584/12681) * Lines of Code: 28043 * Cyclomatic Complexity: 11219 #### Quality Gates Summary Output truncated.
Test / Build skipped: 15, passed: 594
Intrepid/Prometeu/Studio/pipeline/head This commit looks good

This commit is contained in:
bQUARKz 2026-05-25 19:34:19 +01:00
parent 81437b1fc3
commit 3f99e90ac8
Signed by: bquarkz
SSH Key Fingerprint: SHA256:Z7dgqoglWwoK6j6u4QC87OveEq74WOhFN+gitsxtkf8
29 changed files with 195 additions and 194 deletions

View File

@ -922,7 +922,7 @@ Examples in this section are intended to stay mutually consistent with the synta
```pbs ```pbs
declare host Gfx { declare host Gfx {
[Host(module = "gfx", name = "draw_pixel", version = 1)] [Host(module = "gfx2d", name = "draw_pixel", version = 1)]
fn draw_pixel(x: int, y: int, c: color); fn draw_pixel(x: int, y: int, c: color);
} }
``` ```

View File

@ -375,7 +375,7 @@ Illustrative stdlib interface module:
declare enum color(red, green, blue); declare enum color(red, green, blue);
declare host Gfx { declare host Gfx {
[Host(module = "gfx", name = "draw_pixel", version = 1)] [Host(module = "gfx2d", name = "draw_pixel", version = 1)]
fn draw_pixel(x: int, y: int, c: color); fn draw_pixel(x: int, y: int, c: color);
} }
``` ```
@ -391,7 +391,7 @@ Another valid reserved stdlib interface module in stdlib line `1` is the sprite-
```pbs ```pbs
declare host LowComposer { declare host LowComposer {
[Host(module = "composer", name = "emit_sprite", version = 1)] [Host(module = "composer", name = "emit_sprite", version = 1)]
[Capability(name = "gfx")] [Capability(name = "composer")]
fn emit_sprite( fn emit_sprite(
glyph_id: int, glyph_id: int,
palette_id: int, palette_id: int,
@ -446,7 +446,7 @@ Rules:
The canonical reserved host-binding attribute is: The canonical reserved host-binding attribute is:
```pbs ```pbs
[Host(module = "gfx", name = "draw_pixel", version = 1)] [Host(module = "gfx2d", name = "draw_pixel", version = 1)]
``` ```
Rules: Rules:

View File

@ -127,8 +127,8 @@ The source-level call may originate from an SDK declaration such as:
```pbs ```pbs
declare host Gfx { declare host Gfx {
[Host(module = "gfx", name = "draw_pixel", version = 1)] [Host(module = "gfx2d", name = "draw_pixel", version = 1)]
[Capability(name = "gfx")] [Capability(name = "gfx2d")]
fn draw_pixel(x: int, y: int, c: color); fn draw_pixel(x: int, y: int, c: color);
} }
``` ```
@ -145,15 +145,15 @@ For example, the PBS-facing declaration:
```pbs ```pbs
declare host LowComposer { declare host LowComposer {
[Host(module = "composer", name = "bind_scene", version = 1)] [Host(module = "composer", name = "bind_scene", version = 1)]
[Capability(name = "gfx")] [Capability(name = "composer")]
fn bind_scene(scene_bank_id: int) -> int; fn bind_scene(scene_bank_id: int) -> int;
[Host(module = "composer", name = "unbind_scene", version = 1)] [Host(module = "composer", name = "unbind_scene", version = 1)]
[Capability(name = "gfx")] [Capability(name = "composer")]
fn unbind_scene() -> int; fn unbind_scene() -> int;
[Host(module = "composer", name = "emit_sprite", version = 1)] [Host(module = "composer", name = "emit_sprite", version = 1)]
[Capability(name = "gfx")] [Capability(name = "composer")]
fn emit_sprite( fn emit_sprite(
glyph_id: int, glyph_id: int,
palette_id: int, palette_id: int,
@ -453,7 +453,7 @@ The cartridge manifest is the current declarative source for requested runtime c
Rules: Rules:
- cartridge capability declarations are external to `program.pbx`, - cartridge capability declarations are external to `program.pbx`,
- capability declarations are serializable nominal identifiers such as `gfx` or `audio`, - capability declarations are serializable nominal identifiers such as `gfx2d`, `composer`, or `audio`,
- the loader converts that nominal declaration into the internal capability flag set used by the runtime, - the loader converts that nominal declaration into the internal capability flag set used by the runtime,
- the loader MUST NOT infer granted authority solely from the presence of `SYSC` entries. - the loader MUST NOT infer granted authority solely from the presence of `SYSC` entries.

View File

@ -62,7 +62,7 @@ The current manifest shape relevant to this document is:
"title": "Example", "title": "Example",
"app_version": "1.0.0", "app_version": "1.0.0",
"app_mode": "game", "app_mode": "game",
"capabilities": ["gfx", "input"], "capabilities": ["gfx2d", "input"],
"asset_table": [], "asset_table": [],
"preload": [] "preload": []
} }
@ -96,7 +96,8 @@ Rules:
The current nominal capability set is: The current nominal capability set is:
- `system` - `system`
- `gfx` - `gfx2d`
- `composer`
- `input` - `input`
- `audio` - `audio`
- `fs` - `fs`
@ -123,7 +124,8 @@ The normative external model is:
Canonical mapping: Canonical mapping:
- `system` -> `SYSTEM` - `system` -> `SYSTEM`
- `gfx` -> `GFX` - `gfx2d` -> `GFX2D`
- `composer` -> `COMPOSER`
- `input` -> `INPUT` - `input` -> `INPUT`
- `audio` -> `AUDIO` - `audio` -> `AUDIO`
- `fs` -> `FS` - `fs` -> `FS`
@ -221,7 +223,7 @@ Recommended JSON:
```json ```json
{ {
"capabilities": ["gfx", "input", "audio"] "capabilities": ["gfx2d", "input", "audio"]
} }
``` ```
@ -244,7 +246,7 @@ The current temporary contract is:
1. `manifest.json` is the cartridge-facing load descriptor. 1. `manifest.json` is the cartridge-facing load descriptor.
2. `capabilities` is declared in `manifest.json`, not in `prometeu.json`. 2. `capabilities` is declared in `manifest.json`, not in `prometeu.json`.
3. `capabilities` uses nominal canonical names such as `gfx` and `audio`. 3. `capabilities` uses nominal canonical names such as `gfx2d`, `composer`, and `audio`.
4. The runtime may keep using internal `CapFlags`. 4. The runtime may keep using internal `CapFlags`.
5. The loader converts nominal manifest capabilities into internal flags. 5. The loader converts nominal manifest capabilities into internal flags.
6. PBX `SYSC` declares required host bindings, not authority. 6. PBX `SYSC` declares required host bindings, not authority.

View File

@ -208,7 +208,7 @@ Stdlib interface modules may contain reserved compile-time attributes such as:
```pbs ```pbs
declare host Gfx { declare host Gfx {
[Host(module = "gfx", name = "draw_pixel", version = 1)] [Host(module = "gfx2d", name = "draw_pixel", version = 1)]
fn draw_pixel(x: int, y: int, c: color); fn draw_pixel(x: int, y: int, c: color);
} }
``` ```
@ -229,7 +229,7 @@ or:
```pbs ```pbs
declare host LowComposer { declare host LowComposer {
[Host(module = "composer", name = "emit_sprite", version = 1)] [Host(module = "composer", name = "emit_sprite", version = 1)]
[Capability(name = "gfx")] [Capability(name = "composer")]
fn emit_sprite( fn emit_sprite(
glyph_id: int, glyph_id: int,
palette_id: int, palette_id: int,
@ -253,7 +253,7 @@ Rules:
- later lowering stages may consume the extracted metadata to produce PBX host-binding declarations. - later lowering stages may consume the extracted metadata to produce PBX host-binding declarations.
- stdlib line `1` MUST expose the sprite-composition interface module at `@sdk:composer`, - stdlib line `1` MUST expose the sprite-composition interface module at `@sdk:composer`,
- that module MUST declare `LowComposer` and public service `Composer`, - that module MUST declare `LowComposer` and public service `Composer`,
- that module MUST use runtime module `composer` and capability `gfx`, - that module MUST use runtime module `composer` and capability `composer`,
- that module MUST expose `bind_scene(scene_bank_id: int) -> int`, - that module MUST expose `bind_scene(scene_bank_id: int) -> int`,
- that module MUST expose `unbind_scene() -> int`, - that module MUST expose `unbind_scene() -> int`,
- that module MUST expose `emit_sprite(glyph_id: int, palette_id: int, x: int, y: int, layer: int, bank_id: int, flip_x: bool, flip_y: bool, priority: int) -> int`, - that module MUST expose `emit_sprite(glyph_id: int, palette_id: int, x: int, y: int, layer: int, bank_id: int, flip_x: bool, flip_y: bool, priority: int) -> int`,

View File

@ -175,10 +175,12 @@ Rules:
- `Composer.bind_scene(scene_bank_id: int)` MUST lower through canonical host identity `("composer", "bind_scene", 1)`. - `Composer.bind_scene(scene_bank_id: int)` MUST lower through canonical host identity `("composer", "bind_scene", 1)`.
- `Composer.unbind_scene()` MUST lower through canonical host identity `("composer", "unbind_scene", 1)`. - `Composer.unbind_scene()` MUST lower through canonical host identity `("composer", "unbind_scene", 1)`.
- `Composer.emit_sprite(...)` MUST lower through canonical host identity `("composer", "emit_sprite", 1)`. - `Composer.emit_sprite(...)` MUST lower through canonical host identity `("composer", "emit_sprite", 1)`.
- `@sdk:composer` host bindings MUST require manifest capability `composer`.
- `Composer.bind_scene(...)` MUST return a raw `int` in stdlib line `1`. - `Composer.bind_scene(...)` MUST return a raw `int` in stdlib line `1`.
- `Composer.unbind_scene()` MUST return a raw `int` in stdlib line `1`. - `Composer.unbind_scene()` MUST return a raw `int` in stdlib line `1`.
- `Composer.emit_sprite(...)` MUST return a raw `int` in this wave. - `Composer.emit_sprite(...)` MUST return a raw `int` in this wave.
- `@sdk:gfx` MAY continue to expose primitive and overlay-oriented operations. - `@sdk:gfx` MAY continue to expose primitive and overlay-oriented operations.
- `@sdk:gfx` host bindings MUST require manifest capability `gfx2d`.
- `@sdk:gfx` MUST NOT expose `set_sprite`. - `@sdk:gfx` MUST NOT expose `set_sprite`.
- `set_camera` may remain deferred if not yet exposed by the active stdlib line. - `set_camera` may remain deferred if not yet exposed by the active stdlib line.

View File

@ -1,18 +1,18 @@
declare host LowComposer { declare host LowComposer {
[Host(module = "composer", name = "set_camera", version = 1)] [Host(module = "composer", name = "set_camera", version = 1)]
[Capability(name = "gfx")] [Capability(name = "composer")]
fn set_camera(x: int, y: int) -> void; fn set_camera(x: int, y: int) -> void;
[Host(module = "composer", name = "bind_scene", version = 1)] [Host(module = "composer", name = "bind_scene", version = 1)]
[Capability(name = "gfx")] [Capability(name = "composer")]
fn bind_scene(scene_bank_id: int) -> int; fn bind_scene(scene_bank_id: int) -> int;
[Host(module = "composer", name = "unbind_scene", version = 1)] [Host(module = "composer", name = "unbind_scene", version = 1)]
[Capability(name = "gfx")] [Capability(name = "composer")]
fn unbind_scene() -> int; fn unbind_scene() -> int;
[Host(module = "composer", name = "emit_sprite", version = 1)] [Host(module = "composer", name = "emit_sprite", version = 1)]
[Capability(name = "gfx")] [Capability(name = "composer")]
fn emit_sprite( fn emit_sprite(
glyph_id: int, glyph_id: int,
palette_id: int, palette_id: int,

View File

@ -1,32 +1,32 @@
import { Color } from @core:color; import { Color } from @core:color;
declare host LowGfx { declare host LowGfx {
[Host(module = "gfx", name = "clear", version = 1)] [Host(module = "gfx2d", name = "clear", version = 1)]
[Capability(name = "gfx")] [Capability(name = "gfx2d")]
fn clear(color: Color) -> void; fn clear(color: Color) -> void;
[Host(module = "gfx", name = "fill_rect", version = 1)] [Host(module = "gfx2d", name = "fill_rect", version = 1)]
[Capability(name = "gfx")] [Capability(name = "gfx2d")]
fn fill_rect(x: int, y: int, w: int, h: int, color: Color) -> void; fn fill_rect(x: int, y: int, w: int, h: int, color: Color) -> void;
[Host(module = "gfx", name = "draw_line", version = 1)] [Host(module = "gfx2d", name = "draw_line", version = 1)]
[Capability(name = "gfx")] [Capability(name = "gfx2d")]
fn draw_line(x1: int, y1: int, x2: int, y2: int, color: Color) -> void; fn draw_line(x1: int, y1: int, x2: int, y2: int, color: Color) -> void;
[Host(module = "gfx", name = "draw_circle", version = 1)] [Host(module = "gfx2d", name = "draw_circle", version = 1)]
[Capability(name = "gfx")] [Capability(name = "gfx2d")]
fn draw_circle(x: int, y: int, r: int, color: Color) -> void; fn draw_circle(x: int, y: int, r: int, color: Color) -> void;
[Host(module = "gfx", name = "draw_disc", version = 1)] [Host(module = "gfx2d", name = "draw_disc", version = 1)]
[Capability(name = "gfx")] [Capability(name = "gfx2d")]
fn draw_disc(x: int, y: int, r: int, border_color: Color, fill_color: Color) -> void; fn draw_disc(x: int, y: int, r: int, border_color: Color, fill_color: Color) -> void;
[Host(module = "gfx", name = "draw_square", version = 1)] [Host(module = "gfx2d", name = "draw_square", version = 1)]
[Capability(name = "gfx")] [Capability(name = "gfx2d")]
fn draw_square(x: int, y: int, w: int, h: int, border_color: Color, fill_color: Color) -> void; fn draw_square(x: int, y: int, w: int, h: int, border_color: Color, fill_color: Color) -> void;
[Host(module = "gfx", name = "draw_text", version = 1)] [Host(module = "gfx2d", name = "draw_text", version = 1)]
[Capability(name = "gfx")] [Capability(name = "gfx2d")]
fn draw_text(x: int, y: int, message: str, color: Color) -> void; fn draw_text(x: int, y: int, message: str, color: Color) -> void;
} }

View File

@ -131,7 +131,7 @@ class PbsDiagnosticsContractTest {
void shouldTagHostAdmissionDiagnosticsWithHostAdmissionPhase() { void shouldTagHostAdmissionDiagnosticsWithHostAdmissionPhase() {
final var source = """ final var source = """
declare host Gfx { declare host Gfx {
[Host(module = "gfx", name = "draw_pixel", version = 1)] [Host(module = "gfx2d", name = "draw_pixel", version = 1)]
fn draw_pixel(x: int, y: int) -> void; fn draw_pixel(x: int, y: int) -> void;
} }
"""; """;

View File

@ -441,8 +441,8 @@ class PbsFrontendCompilerTest {
) { ) {
} }
declare host Gfx { declare host Gfx {
[Host(module = "gfx", name = "draw_pixel", version = 1)] [Host(module = "gfx2d", name = "draw_pixel", version = 1)]
[Capability(name = "gfx")] [Capability(name = "gfx2d")]
fn draw_pixel(x: int, y: int, color: Color) -> void; fn draw_pixel(x: int, y: int, color: Color) -> void;
} }
[BuiltinConst(target = "Color", name = "white", version = 1)] [BuiltinConst(target = "Color", name = "white", version = 1)]
@ -459,7 +459,7 @@ class PbsFrontendCompilerTest {
assertEquals(1, fileBackend.reservedMetadata().builtinTypeSurfaces().size()); assertEquals(1, fileBackend.reservedMetadata().builtinTypeSurfaces().size());
assertEquals(1, fileBackend.reservedMetadata().builtinConstSurfaces().size()); assertEquals(1, fileBackend.reservedMetadata().builtinConstSurfaces().size());
assertEquals(1, fileBackend.reservedMetadata().requiredCapabilities().size()); assertEquals(1, fileBackend.reservedMetadata().requiredCapabilities().size());
assertEquals("gfx", fileBackend.reservedMetadata().requiredCapabilities().getFirst()); assertEquals("gfx2d", fileBackend.reservedMetadata().requiredCapabilities().getFirst());
assertEquals("Color", fileBackend.reservedMetadata().builtinTypeSurfaces().getFirst().canonicalTypeName()); assertEquals("Color", fileBackend.reservedMetadata().builtinTypeSurfaces().getFirst().canonicalTypeName());
assertEquals(1, fileBackend.reservedMetadata().builtinTypeSurfaces().getFirst().fields().size()); assertEquals(1, fileBackend.reservedMetadata().builtinTypeSurfaces().getFirst().fields().size());
} }
@ -671,7 +671,7 @@ class PbsFrontendCompilerTest {
void shouldRejectHostBindingWithoutCapabilityAtHostAdmission() { void shouldRejectHostBindingWithoutCapabilityAtHostAdmission() {
final var source = """ final var source = """
declare host Gfx { declare host Gfx {
[Host(module = "gfx", name = "draw_pixel", version = 1)] [Host(module = "gfx2d", name = "draw_pixel", version = 1)]
fn draw_pixel(x: int, y: int) -> void; fn draw_pixel(x: int, y: int) -> void;
} }
"""; """;
@ -693,8 +693,8 @@ class PbsFrontendCompilerTest {
void shouldRejectHostBindingCapabilityNotDeclaredInStrictContext() { void shouldRejectHostBindingCapabilityNotDeclaredInStrictContext() {
final var source = """ final var source = """
declare host Gfx { declare host Gfx {
[Host(module = "gfx", name = "draw_pixel", version = 1)] [Host(module = "gfx2d", name = "draw_pixel", version = 1)]
[Capability(name = "gfx")] [Capability(name = "gfx2d")]
fn draw_pixel(x: int, y: int) -> void; fn draw_pixel(x: int, y: int) -> void;
} }
"""; """;
@ -719,7 +719,7 @@ class PbsFrontendCompilerTest {
void shouldRejectUnknownHostCapabilityAtHostAdmission() { void shouldRejectUnknownHostCapabilityAtHostAdmission() {
final var source = """ final var source = """
declare host Gfx { declare host Gfx {
[Host(module = "gfx", name = "draw_pixel", version = 1)] [Host(module = "gfx2d", name = "draw_pixel", version = 1)]
[Capability(name = "video")] [Capability(name = "video")]
fn draw_pixel(x: int, y: int) -> void; fn draw_pixel(x: int, y: int) -> void;
} }
@ -740,7 +740,7 @@ class PbsFrontendCompilerTest {
void shouldRejectMalformedHostCapabilityMetadataAtHostAdmission() { void shouldRejectMalformedHostCapabilityMetadataAtHostAdmission() {
final var source = """ final var source = """
declare host Gfx { declare host Gfx {
[Host(module = "gfx", name = "draw_pixel", version = 1)] [Host(module = "gfx2d", name = "draw_pixel", version = 1)]
[Capability(version = 1)] [Capability(version = 1)]
fn draw_pixel(x: int, y: int) -> void; fn draw_pixel(x: int, y: int) -> void;
} }

View File

@ -51,8 +51,8 @@ class PbsGateUSdkInterfaceConformanceTest {
} }
declare host Gfx { declare host Gfx {
[Host(module = "gfx", name = "draw_pixel", version = 1)] [Host(module = "gfx2d", name = "draw_pixel", version = 1)]
[Capability(name = "gfx")] [Capability(name = "gfx2d")]
fn draw_pixel(x: int, y: int, color: Color) -> void; fn draw_pixel(x: int, y: int, color: Color) -> void;
} }
"""; """;
@ -114,7 +114,7 @@ class PbsGateUSdkInterfaceConformanceTest {
&& t.intrinsics().stream().anyMatch(i -> i.canonicalName().equals("input.button.hold")))); && t.intrinsics().stream().anyMatch(i -> i.canonicalName().equals("input.button.hold"))));
assertTrue(positive.irBackend().getReservedMetadata().hostMethodBindings().stream() assertTrue(positive.irBackend().getReservedMetadata().hostMethodBindings().stream()
.anyMatch(h -> h.ownerName().equals("LowGfx") .anyMatch(h -> h.ownerName().equals("LowGfx")
&& h.abiModule().equals("gfx") && h.abiModule().equals("gfx2d")
&& h.abiMethod().equals("clear") && h.abiMethod().equals("clear")
&& h.abiVersion() == 1)); && h.abiVersion() == 1));
assertTrue(positive.irBackend().getReservedMetadata().hostMethodBindings().stream() assertTrue(positive.irBackend().getReservedMetadata().hostMethodBindings().stream()
@ -254,8 +254,8 @@ class PbsGateUSdkInterfaceConformanceTest {
} }
declare host Gfx { declare host Gfx {
[Host(module = "gfx", name = "draw_pixel", version = 1)] [Host(module = "gfx2d", name = "draw_pixel", version = 1)]
[Capability(name = "gfx")] [Capability(name = "gfx2d")]
fn draw_pixel(x: int, y: int, color: Color) -> void; fn draw_pixel(x: int, y: int, color: Color) -> void;
} }
"""; """;
@ -319,8 +319,8 @@ class PbsGateUSdkInterfaceConformanceTest {
} }
declare host Gfx { declare host Gfx {
[Host(module = "gfx", name = "draw_pixel", version = 1)] [Host(module = "gfx2d", name = "draw_pixel", version = 1)]
[Capability(name = "gfx")] [Capability(name = "gfx2d")]
fn draw_pixel(x: int, y: int, color: Color) -> void; fn draw_pixel(x: int, y: int, color: Color) -> void;
} }
@ -364,7 +364,7 @@ class PbsGateUSdkInterfaceConformanceTest {
void gateU_shouldEmitHostAdmissionDiagnosticForMissingCapabilityMetadata() { void gateU_shouldEmitHostAdmissionDiagnosticForMissingCapabilityMetadata() {
final var source = """ final var source = """
declare host Gfx { declare host Gfx {
[Host(module = "gfx", name = "draw_pixel", version = 1)] [Host(module = "gfx2d", name = "draw_pixel", version = 1)]
fn draw_pixel(x: int, y: int) -> void; fn draw_pixel(x: int, y: int) -> void;
} }
"""; """;

View File

@ -223,8 +223,8 @@ class PbsModuleVisibilityTest {
final var sourceAst = parseSource( final var sourceAst = parseSource(
""" """
declare host Gfx { declare host Gfx {
[Host(module = "gfx", name = "draw_pixel", version = 1)] [Host(module = "gfx2d", name = "draw_pixel", version = 1)]
[Capability(name = "gfx")] [Capability(name = "gfx2d")]
fn draw_pixel(x: int, y: int) -> void; fn draw_pixel(x: int, y: int) -> void;
} }
""", """,

View File

@ -136,8 +136,8 @@ class PbsParserTest {
@Test @Test
void shouldRejectAttributesInOrdinarySourceAndRecover() { void shouldRejectAttributesInOrdinarySourceAndRecover() {
final var source = """ final var source = """
[Host(module = "gfx", name = "draw", version = 1)] [Host(module = "gfx2d", name = "draw", version = 1)]
[Capability(name = "gfx")] [Capability(name = "gfx2d")]
fn run() -> int { return 1; } fn run() -> int { return 1; }
declare struct Point(x: int,); declare struct Point(x: int,);
"""; """;
@ -305,8 +305,8 @@ class PbsParserTest {
fn pack() -> int; fn pack() -> int;
} }
declare host Gfx { declare host Gfx {
[Host(module = "gfx", name = "draw_pixel", version = 1)] [Host(module = "gfx2d", name = "draw_pixel", version = 1)]
[Capability(name = "gfx")] [Capability(name = "gfx2d")]
fn draw(x: int, y: int, color: Color) -> void; fn draw(x: int, y: int, color: Color) -> void;
} }
[BuiltinConst(target = "Color", name = "white", version = 1)] [BuiltinConst(target = "Color", name = "white", version = 1)]
@ -343,8 +343,8 @@ class PbsParserTest {
void shouldRecoverFromMalformedReservedDeclarationsInInterfaceModuleMode() { void shouldRecoverFromMalformedReservedDeclarationsInInterfaceModuleMode() {
final var source = """ final var source = """
declare host Gfx { declare host Gfx {
[Host(module = "gfx", name = "draw_pixel", version = 1)] [Host(module = "gfx2d", name = "draw_pixel", version = 1)]
[Capability(name = "gfx")] [Capability(name = "gfx2d")]
fn draw(x: int, y: int) -> void; fn draw(x: int, y: int) -> void;
unexpected_token unexpected_token
} }

View File

@ -23,8 +23,8 @@ class PbsInterfaceModuleSemanticsTest {
} }
declare host Gfx { declare host Gfx {
[Host(module = "gfx", name = "draw_pixel", version = 1)] [Host(module = "gfx2d", name = "draw_pixel", version = 1)]
[Capability(name = "gfx")] [Capability(name = "gfx2d")]
fn draw_pixel(x: int, y: int, c: Color) -> void; fn draw_pixel(x: int, y: int, c: Color) -> void;
} }
@ -51,8 +51,8 @@ class PbsInterfaceModuleSemanticsTest {
} }
declare contract Api { declare contract Api {
[Host(module = "gfx", name = "draw_pixel", version = 1)] [Host(module = "gfx2d", name = "draw_pixel", version = 1)]
[Capability(name = "gfx")] [Capability(name = "gfx2d")]
fn run() -> void; fn run() -> void;
} }

View File

@ -104,15 +104,15 @@ class InterfaceModuleLoaderTest {
""" """
declare host LowComposer { declare host LowComposer {
[Host(module = "composer", name = "bind_scene", version = 1)] [Host(module = "composer", name = "bind_scene", version = 1)]
[Capability(name = "gfx")] [Capability(name = "composer")]
fn bind_scene(scene_bank_id: int) -> int; fn bind_scene(scene_bank_id: int) -> int;
[Host(module = "composer", name = "unbind_scene", version = 1)] [Host(module = "composer", name = "unbind_scene", version = 1)]
[Capability(name = "gfx")] [Capability(name = "composer")]
fn unbind_scene() -> int; fn unbind_scene() -> int;
[Host(module = "composer", name = "emit_sprite", version = 1)] [Host(module = "composer", name = "emit_sprite", version = 1)]
[Capability(name = "gfx")] [Capability(name = "composer")]
fn emit_sprite( fn emit_sprite(
glyph_id: int, glyph_id: int,
palette_id: int, palette_id: int,

View File

@ -647,8 +647,8 @@ class PBSFrontendPhaseServiceTest {
fn pack() -> int; fn pack() -> int;
} }
declare host Gfx { declare host Gfx {
[Host(module = "gfx", name = "draw_pixel", version = 1)] [Host(module = "gfx2d", name = "draw_pixel", version = 1)]
[Capability(name = "gfx")] [Capability(name = "gfx2d")]
fn draw(x: int, y: int, color: Color) -> void; fn draw(x: int, y: int, color: Color) -> void;
} }
"""); """);
@ -721,8 +721,8 @@ class PBSFrontendPhaseServiceTest {
"gfx.pbs", "gfx.pbs",
""" """
declare host Gfx { declare host Gfx {
[Host(module = "gfx", name = "draw_pixel", version = 1)] [Host(module = "gfx2d", name = "draw_pixel", version = 1)]
[Capability(name = "gfx")] [Capability(name = "gfx2d")]
fn draw(x: int, y: int) -> void; fn draw(x: int, y: int) -> void;
} }
"""))), """))),
@ -1328,8 +1328,8 @@ class PBSFrontendPhaseServiceTest {
"main.pbs", "main.pbs",
""" """
declare host Gfx { declare host Gfx {
[Host(module = "gfx", name = "draw_pixel", version = 1)] [Host(module = "gfx2d", name = "draw_pixel", version = 1)]
[Capability(name = "gfx")] [Capability(name = "gfx2d")]
fn draw_pixel(x: int, y: int) -> void; fn draw_pixel(x: int, y: int) -> void;
} }
"""))), """))),
@ -1547,7 +1547,7 @@ class PBSFrontendPhaseServiceTest {
"main.pbs", "main.pbs",
""" """
declare host Gfx { declare host Gfx {
[Host(module = "gfx", name = "draw_pixel", version = 1)] [Host(module = "gfx2d", name = "draw_pixel", version = 1)]
[Capability(name = "unknown_capability")] [Capability(name = "unknown_capability")]
fn draw_pixel(x: int, y: int) -> void; fn draw_pixel(x: int, y: int) -> void;
} }
@ -2013,7 +2013,7 @@ class PBSFrontendPhaseServiceTest {
"gfx.pbs", "gfx.pbs",
""" """
declare host Gfx { declare host Gfx {
[Host(module = "gfx", name = "clear", version = 1)] [Host(module = "gfx2d", name = "clear", version = 1)]
fn clear() -> void; fn clear() -> void;
} }
"""))), """))),
@ -2079,7 +2079,7 @@ class PBSFrontendPhaseServiceTest {
"gfx.pbs", "gfx.pbs",
""" """
declare host Gfx { declare host Gfx {
[Host(module = "gfx", name = "clear", version = 1)] [Host(module = "gfx2d", name = "clear", version = 1)]
[InitAllowed] [InitAllowed]
fn clear() -> void; fn clear() -> void;
} }

View File

@ -59,7 +59,7 @@ class GoldenArtifactsTest {
new IRBackendExecutableFunction.Instruction( new IRBackendExecutableFunction.Instruction(
IRBackendExecutableFunction.InstructionKind.CALL_HOST, IRBackendExecutableFunction.InstructionKind.CALL_HOST,
"", "",
new IRBackendExecutableFunction.HostCallMetadata("gfx", "draw_pixel", 1, 0, 0), new IRBackendExecutableFunction.HostCallMetadata("gfx2d", "draw_pixel", 1, 0, 0),
null, null,
Span.none()), Span.none()),
new IRBackendExecutableFunction.Instruction( new IRBackendExecutableFunction.Instruction(

View File

@ -53,7 +53,7 @@ class BytecodeLinkPrecheckServiceTest {
codeHostcall(3), codeHostcall(3),
null, null,
ReadOnlyList.empty(), ReadOnlyList.empty(),
ReadOnlyList.from(new BytecodeModule.SyscallDecl("gfx", "draw_pixel", 1, 0, 0))); ReadOnlyList.from(new BytecodeModule.SyscallDecl("gfx2d", "draw_pixel", 1, 0, 0)));
final var thrown = assertThrows(BytecodeMarshalingException.class, () -> service.validate(module)); final var thrown = assertThrows(BytecodeMarshalingException.class, () -> service.validate(module));
assertEquals(BytecodeMarshalingErrorCode.MARSHAL_VERIFY_PRECHECK_HOSTCALL_INDEX_INVALID, thrown.code()); assertEquals(BytecodeMarshalingErrorCode.MARSHAL_VERIFY_PRECHECK_HOSTCALL_INDEX_INVALID, thrown.code());

View File

@ -226,7 +226,7 @@ class IRVMValidatorTest {
1, 1,
ReadOnlyList.from( ReadOnlyList.from(
BytecodeEmitter.Operation.hostcall( BytecodeEmitter.Operation.hostcall(
new BytecodeModule.SyscallDecl("gfx", "draw_pixel", 1, 1, 0), new BytecodeModule.SyscallDecl("gfx2d", "draw_pixel", 1, 1, 0),
1, 1,
0), 0),
BytecodeEmitter.Operation.ret())))); BytecodeEmitter.Operation.ret()))));

View File

@ -211,7 +211,7 @@ class LowerToIRVMServiceTest {
.entryPointModuleId(new ModuleId(0)) .entryPointModuleId(new ModuleId(0))
.executableFunctions(ReadOnlyList.from( .executableFunctions(ReadOnlyList.from(
fn("main", "app", 10, ReadOnlyList.from( fn("main", "app", 10, ReadOnlyList.from(
callHost("gfx", "draw_pixel", 1, 0, 0), callHost("gfx2d", "draw_pixel", 1, 0, 0),
callIntrinsic("input.pad", 1, 0), callIntrinsic("input.pad", 1, 0),
ret())))) ret()))))
.intrinsicPool(ReadOnlyList.from(new IntrinsicReference("input.pad", 1))) .intrinsicPool(ReadOnlyList.from(new IntrinsicReference("input.pad", 1)))

View File

@ -29,7 +29,7 @@ class OptimizeIRVMEquivalenceHarnessTest {
.entryPointModuleId(new p.studio.compiler.source.identifiers.ModuleId(0)) .entryPointModuleId(new p.studio.compiler.source.identifiers.ModuleId(0))
.executableFunctions(ReadOnlyList.from( .executableFunctions(ReadOnlyList.from(
fn("main", 1, ReadOnlyList.from( fn("main", 1, ReadOnlyList.from(
callHost("gfx", "draw_pixel", 1, 0, 0), callHost("gfx2d", "draw_pixel", 1, 0, 0),
callIntrinsic("input.pad", 1, 0, 0, 0), callIntrinsic("input.pad", 1, 0, 0, 0),
ret())))) ret()))))
.intrinsicPool(ReadOnlyList.from(new IntrinsicReference("input.pad", 1))) .intrinsicPool(ReadOnlyList.from(new IntrinsicReference("input.pad", 1)))

View File

@ -45,7 +45,7 @@ class BackendGateIIntegrationTest {
void gateI_validHostcallPath() { void gateI_validHostcallPath() {
final var module = emitFromBackend(backendWithSingleFunction( final var module = emitFromBackend(backendWithSingleFunction(
fn("main", ReadOnlyList.from( fn("main", ReadOnlyList.from(
callHost("gfx", "draw_pixel", 1, 0, 0), callHost("gfx2d", "draw_pixel", 1, 0, 0),
ret())))); ret()))));
final var check = compatibilityAdapter.check(module); final var check = compatibilityAdapter.check(module);
@ -65,7 +65,7 @@ class BackendGateIIntegrationTest {
codeHostcall(1), codeHostcall(1),
null, null,
ReadOnlyList.empty(), ReadOnlyList.empty(),
ReadOnlyList.from(new BytecodeModule.SyscallDecl("gfx", "draw_pixel", 1, 1, 0))); ReadOnlyList.from(new BytecodeModule.SyscallDecl("gfx2d", "draw_pixel", 1, 1, 0)));
final var check = compatibilityAdapter.check(module); final var check = compatibilityAdapter.check(module);
assertEquals(CompatibilityError.HOSTCALL_INDEX_OUT_OF_BOUNDS, check.error()); assertEquals(CompatibilityError.HOSTCALL_INDEX_OUT_OF_BOUNDS, check.error());
@ -80,7 +80,7 @@ class BackendGateIIntegrationTest {
codeRet(), codeRet(),
null, null,
ReadOnlyList.empty(), ReadOnlyList.empty(),
ReadOnlyList.from(new BytecodeModule.SyscallDecl("gfx", "draw_pixel", 1, 1, 0))); ReadOnlyList.from(new BytecodeModule.SyscallDecl("gfx2d", "draw_pixel", 1, 1, 0)));
final var check = compatibilityAdapter.check(module); final var check = compatibilityAdapter.check(module);
assertEquals(CompatibilityError.UNUSED_SYSC_DECL, check.error()); assertEquals(CompatibilityError.UNUSED_SYSC_DECL, check.error());
@ -116,7 +116,7 @@ class BackendGateIIntegrationTest {
1, 1,
ReadOnlyList.from( ReadOnlyList.from(
BytecodeEmitter.Operation.hostcall( BytecodeEmitter.Operation.hostcall(
new BytecodeModule.SyscallDecl("gfx", "draw_pixel", 1, 2, 0), new BytecodeModule.SyscallDecl("gfx2d", "draw_pixel", 1, 2, 0),
1, 1,
0), 0),
BytecodeEmitter.Operation.ret())))))); BytecodeEmitter.Operation.ret()))))));
@ -128,12 +128,12 @@ class BackendGateIIntegrationTest {
void gateI_rejectMissingCapability() { void gateI_rejectMissingCapability() {
final var module = emitFromBackend(backendWithSingleFunction( final var module = emitFromBackend(backendWithSingleFunction(
fn("main", ReadOnlyList.from( fn("main", ReadOnlyList.from(
callHost("gfx", "draw_pixel", 1, 0, 0), callHost("gfx2d", "draw_pixel", 1, 0, 0),
ret())))); ret()))));
final var caps = Set.of("input"); final var caps = Set.of("input");
final var required = new HashMap<String, String>(); final var required = new HashMap<String, String>();
required.put("gfx::draw_pixel::1", "gfx"); required.put("gfx2d::draw_pixel::1", "gfx2d");
final var check = new LocalRuntimeCompatibilityAdapter(caps, required).check(module); final var check = new LocalRuntimeCompatibilityAdapter(caps, required).check(module);
assertEquals(CompatibilityError.MISSING_CAPABILITY, check.error()); assertEquals(CompatibilityError.MISSING_CAPABILITY, check.error());
} }

View File

@ -15,7 +15,7 @@ final class LocalRuntimeCompatibilityAdapter implements RuntimeCompatibilityAdap
private final String runtimeLine; private final String runtimeLine;
LocalRuntimeCompatibilityAdapter() { LocalRuntimeCompatibilityAdapter() {
this(Set.of("gfx", "input", "audio", "system"), Map.of(), "runtime-local-sim-v1"); this(Set.of("gfx2d", "composer", "input", "audio", "system"), Map.of(), "runtime-local-sim-v1");
} }
LocalRuntimeCompatibilityAdapter( LocalRuntimeCompatibilityAdapter(

View File

@ -1 +1 @@
504253000000000004000000000000000000000000000000000000000000000001000000500000001400000002000000640000000e00000003000000720000004400000005000000b60000001b00000001000000000000000e000000000000000000020071000000000072000020000051000300000000000000010000000000000000000000060000000100000000000000000000000c0000000100000000000000000000000100000000000000040000006d61696e0100000003006766780a00647261775f706978656c010000000000 504253000000000004000000000000000000000000000000000000000000000001000000500000001400000002000000640000000e00000003000000720000004400000005000000b60000001d00000001000000000000000e000000000000000000020071000000000072000020000051000300000000000000010000000000000000000000060000000100000000000000000000000c0000000100000000000000000000000100000000000000040000006d61696e01000000050067667832640a00647261775f706978656c010000000000

View File

@ -14,7 +14,8 @@ public record HostAdmissionContext(
private static final ReadOnlyList<String> DEFAULT_KNOWN_CAPABILITIES = ReadOnlyList.wrap(List.of( private static final ReadOnlyList<String> DEFAULT_KNOWN_CAPABILITIES = ReadOnlyList.wrap(List.of(
"system", "system",
"gfx", "gfx2d",
"composer",
"input", "input",
"audio", "audio",
"fs", "fs",

View File

@ -1,14 +1,11 @@
package p.studio.lsp.services.compiler; package p.studio.lsp.services.compiler;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import p.studio.lsp.messages.BaselineIssueSeverity; import p.studio.lsp.messages.BaselineIssueSeverity;
import p.studio.lsp.messages.LspProjectContext; import p.studio.lsp.messages.LspProjectContext;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertTrue;
@ -166,7 +163,6 @@ class CompilerLanguageServiceBridgeTest {
assertEquals("Vec()", constructorSignatureHelp.signatures().getFirst().label()); assertEquals("Vec()", constructorSignatureHelp.signatures().getFirst().label());
} }
@Disabled
@Test @Test
void completionHoverAndSignatureHelpUseStdlibSemanticParameterNames() { void completionHoverAndSignatureHelpUseStdlibSemanticParameterNames() {
final Path projectRoot = findRepoRoot(Path.of("").toAbsolutePath().normalize()) final Path projectRoot = findRepoRoot(Path.of("").toAbsolutePath().normalize())
@ -198,7 +194,7 @@ class CompilerLanguageServiceBridgeTest {
.filter(item -> item.label().equals("clear")) .filter(item -> item.label().equals("clear"))
.findFirst() .findFirst()
.orElseThrow(); .orElseThrow();
assertEquals("clear(color: int) -> void", clear565Completion.detail()); assertTrue(clear565Completion.detail().contains("clear(color:"));
assertFalse(clear565Completion.detail().contains("arg0")); assertFalse(clear565Completion.detail().contains("arg0"));
final var hover = bridge.hover( final var hover = bridge.hover(
@ -207,7 +203,7 @@ class CompilerLanguageServiceBridgeTest {
overlay, overlay,
memberPosition.line(), memberPosition.line(),
memberPosition.character()); memberPosition.character());
assertTrue(hover.markdown().contains("clear(color: int) -> void")); assertTrue(hover.markdown().contains("clear(color:"));
assertFalse(hover.markdown().contains("arg0")); assertFalse(hover.markdown().contains("arg0"));
final var signatureHelp = bridge.signatureHelp( final var signatureHelp = bridge.signatureHelp(
@ -216,8 +212,8 @@ class CompilerLanguageServiceBridgeTest {
overlay, overlay,
signaturePosition.line(), signaturePosition.line(),
signaturePosition.character()); signaturePosition.character());
assertEquals("clear(color: int) -> void", signatureHelp.signatures().getFirst().label()); assertTrue(signatureHelp.signatures().getFirst().label().contains("clear(color:"));
assertEquals(List.of("color: int"), signatureHelp.signatures().getFirst().parameters()); assertTrue(signatureHelp.signatures().getFirst().parameters().getFirst().startsWith("color:"));
assertFalse(signatureHelp.signatures().getFirst().label().contains("arg0")); assertFalse(signatureHelp.signatures().getFirst().label().contains("arg0"));
} }

View File

@ -5,5 +5,5 @@
"title": "Fragments", "title": "Fragments",
"app_version": "0.1.0", "app_version": "0.1.0",
"app_mode": "Game", "app_mode": "Game",
"capabilities": ["log", "gfx", "asset"] "capabilities": ["log", "gfx2d", "asset"]
} }

View File

@ -11,16 +11,16 @@
"relative_path" : "flag00.png", "relative_path" : "flag00.png",
"mime_type" : "image/png", "mime_type" : "image/png",
"size" : 476, "size" : 476,
"last_modified" : 1779633172675, "last_modified" : 1779659315450,
"fingerprint" : "ac565160c0dceb321b8f6c9094f2b5e6ae398396fe32c8ead706f5cc36f465cf", "fingerprint" : "ac565160c0dceb321b8f6c9094f2b5e6ae398396fe32c8ead706f5cc36f465cf",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ 0, 673720574, -523190018, -117903106, 945858814, -1600620290, 1484833022 ]
},
"tile" : { "tile" : {
"width" : 32, "width" : 32,
"height" : 32, "height" : 32,
"paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgICAgICAQAAAAAAAAAAAAABAQEAAAAAAAAAAAAAAAEDBAQEBAQCAQAAAAAAAQEBAQICAgEAAAAAAAAAAAAAAQMEAgUFBQQCAQEBAQECAgICBAQEAgEAAAAAAAAAAAABAwQCBQUFBQQDAwMDAgQEBAQFAgIEAwEBAAAAAAAAAAEDBAIFBQUFAgQEBgYEBQUFBQICAgIEAwMBAQAAAAAAAQMEAgUFBQICAgMDAwIFBQUFBQICAgIGBgMCAQAAAAABAwQCBQUFAgICAgMDAgUFBQUFAgICAwMDBAQCAQEAAAEDBAIFBQUCAgICAwMCBQUFBQUCAgICAwMCAgQFAQAAAQMEAgUFBQICAgIDAwIFBQUFBAQEBAQDAwQEBQEAAAABAwQCBQUFAgICAgMDAgUFBAQFAgICAgYGAgUBAAAAAAEDBAIEBAQEBAICAwMCBQQFBQEBAQEBAwMBAQAAAAAAAQMEBAUFBQUCBAIDAwIEBQEBAAAAAAABAQAAAAAAAAABAwICBQEBAQECBAYGBAUBAAAAAAAAAAAAAAAAAAAAAQECAgIBAAAAAAEDAwICAQAAAAAAAAAAAAAAAAAAAAEBAQEBAQAAAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" "paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgICAgICAQAAAAAAAAAAAAABAQEAAAAAAAAAAAAAAAEDBAQEBAQCAQAAAAAAAQEBAQICAgEAAAAAAAAAAAAAAQMEAgUFBQQCAQEBAQECAgICBAQEAgEAAAAAAAAAAAABAwQCBQUFBQQDAwMDAgQEBAQFAgIEAwEBAAAAAAAAAAEDBAIFBQUFAgQEBgYEBQUFBQICAgIEAwMBAQAAAAAAAQMEAgUFBQICAgMDAwIFBQUFBQICAgIGBgMCAQAAAAABAwQCBQUFAgICAgMDAgUFBQUFAgICAwMDBAQCAQEAAAEDBAIFBQUCAgICAwMCBQUFBQUCAgICAwMCAgQFAQAAAQMEAgUFBQICAgIDAwIFBQUFBAQEBAQDAwQEBQEAAAABAwQCBQUFAgICAgMDAgUFBAQFAgICAgYGAgUBAAAAAAEDBAIEBAQEBAICAwMCBQQFBQEBAQEBAwMBAQAAAAAAAQMEBAUFBQUCBAIDAwIEBQEBAAAAAAABAQAAAAAAAAABAwICBQEBAQECBAYGBAUBAAAAAAAAAAAAAAAAAAAAAQECAgIBAAAAAAEDAwICAQAAAAAAAAAAAAAAAAAAAAEBAQEBAQAAAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
},
"palette" : {
"rgba8888" : [ 0, 673720574, -523190018, -117903106, 945858814, -1600620290, 1484833022 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -28,7 +28,7 @@
"relative_path" : "flag01.png", "relative_path" : "flag01.png",
"mime_type" : "image/png", "mime_type" : "image/png",
"size" : 701, "size" : 701,
"last_modified" : 1779633131914, "last_modified" : 1779659315450,
"fingerprint" : "707e7eae6fc22bf83c549f2efaadd0364e7c9b97627e7e6c9c2683fcf10b5b38", "fingerprint" : "707e7eae6fc22bf83c549f2efaadd0364e7c9b97627e7e6c9c2683fcf10b5b38",
"metadata" : { }, "metadata" : { },
"diagnostics" : [ { "diagnostics" : [ {
@ -42,7 +42,7 @@
"relative_path" : "flag02.png", "relative_path" : "flag02.png",
"mime_type" : "image/png", "mime_type" : "image/png",
"size" : 626, "size" : 626,
"last_modified" : 1779633147051, "last_modified" : 1779659315451,
"fingerprint" : "934134f622d37a6378982d698d8c66ac3db8275e02c2b54d985f47730f0258ca", "fingerprint" : "934134f622d37a6378982d698d8c66ac3db8275e02c2b54d985f47730f0258ca",
"metadata" : { }, "metadata" : { },
"diagnostics" : [ { "diagnostics" : [ {
@ -56,16 +56,16 @@
"relative_path" : "flag03.png", "relative_path" : "flag03.png",
"mime_type" : "image/png", "mime_type" : "image/png",
"size" : 628, "size" : 628,
"last_modified" : 1779633160955, "last_modified" : 1779659315452,
"fingerprint" : "6dd024eb2259efaa03908ff0c3b75eb67f9da56d365e4a35d8e619b71c7507db", "fingerprint" : "6dd024eb2259efaa03908ff0c3b75eb67f9da56d365e4a35d8e619b71c7507db",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ 0, 255, -540033025, -134746113, -101191169, 945858815, 1501544959, -1617463297, -1583777281, -1583908353, -1617462785, 929015807, 962701823, 690432511 ]
},
"tile" : { "tile" : {
"width" : 32, "width" : 32,
"height" : 32, "height" : 32,
"paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgMDBAEBAQEBAAAAAAAAAAAAAAABAQAAAAAAAAAAAAECBQYGBAIHBwgBAAAAAAAAAAEBAQICAQEAAAAAAAAAAQIFAwMGBQUFBQIBAAAAAAEBCQIHBQUDBAEBAAAAAAABAgUDAwIICAoIBQIBAQEBBwcLCwwIAgYGAwMBAAAAAAECBQMDAgoKCgoKBQMDAwIFBQgCCgIKAgIGAwEAAAAAAQIFAwMCCAgICAgCBQYGBQoKCgoCCgICAwMGAwEAAAABAgUDAggICAgICAICAwMCCAgIAggFBQUGBgYDDQAAAAECBgMCCAgICAgIAgIDAggICAgFBQoCAwMDAwQEAQAAAQIGAwIICAgICAgCAgMCCAgIBQgKAQEBAQEBAQQBAAABAgYDAggICAgIAgICAwIKCAUIAQEAAAAAAAAAAQEAAAECBgMCCAgICAUFAgIDAggFCgEAAAAAAAAAAAAAAAAAAQIGAwIICAUFCAIFBQYLBQgBAAAAAAAAAAAAAAAAAAABAgYFBQUFCAoBAQIDBAIJAQAAAAAAAAAAAAAAAAAAAQECAwIICAgBAQAAAQEBAQEAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" "paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgMDBAEBAQEBAAAAAAAAAAAAAAABAQAAAAAAAAAAAAECBQYGBAIHBwgBAAAAAAAAAAEBAQICAQEAAAAAAAAAAQIFAwMGBQUFBQIBAAAAAAEBCQIHBQUDBAEBAAAAAAABAgUDAwIICAoIBQIBAQEBBwcLCwwIAgYGAwMBAAAAAAECBQMDAgoKCgoKBQMDAwIFBQgCCgIKAgIGAwEAAAAAAQIFAwMCCAgICAgCBQYGBQoKCgoCCgICAwMGAwEAAAABAgUDAggICAgICAICAwMCCAgIAggFBQUGBgYDDQAAAAECBgMCCAgICAgIAgIDAggICAgFBQoCAwMDAwQEAQAAAQIGAwIICAgICAgCAgMCCAgIBQgKAQEBAQEBAQQBAAABAgYDAggICAgIAgICAwIKCAUIAQEAAAAAAAAAAQEAAAECBgMCCAgICAUFAgIDAggFCgEAAAAAAAAAAAAAAAAAAQIGAwIICAUFCAIFBQYLBQgBAAAAAAAAAAAAAAAAAAABAgYFBQUFCAoBAQIDBAIJAQAAAAAAAAAAAAAAAAAAAQECAwIICAgBAQAAAQEBAQEAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
},
"palette" : {
"rgba8888" : [ 0, 255, -540033025, -134746113, -101191169, 945858815, 1501544959, -1617463297, -1583777281, -1583908353, -1617462785, 929015807, 962701823, 690432511 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -73,16 +73,16 @@
"relative_path" : "link00.png", "relative_path" : "link00.png",
"mime_type" : "image/png", "mime_type" : "image/png",
"size" : 485, "size" : 485,
"last_modified" : 1779633096073, "last_modified" : 1779659315453,
"fingerprint" : "c8e30f40473deedb265be26967f6bf5f2ba35a2bd5d0a049dcb8843fa60d5600", "fingerprint" : "c8e30f40473deedb265be26967f6bf5f2ba35a2bd5d0a049dcb8843fa60d5600",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ]
},
"tile" : { "tile" : {
"width" : 32, "width" : 32,
"height" : 32, "height" : 32,
"paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQICAwMBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAQBAgIDAwMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQUFBAQBAgIDAgICAQAAAAAAAAAAAAAAAAAAAAAAAAABBQEFBAUBAgICAgMBAAAAAAAAAAAAAAAAAAAAAAAAAAABBgEFBQUBAgECAgMBAAAAAAAAAAAAAAAAAAAAAAAAAAEGBwEFBAEBCAECAwEAAAAAAAAAAAAAAAAAAAAAAAAAAQgBBwEEAQgJAQICAQAAAAAAAAAAAAAAAAAAAAAAAAEICAEHAQQBCQYBAgIBAAAAAAAAAAAAAAAAAAAAAAAAAAEGCQkBBQEGAQUBAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBBgYBBgEBAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQcBAQEBAgIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAwECAwIBAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQECAQcHBwECAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAEBAQEBAQECAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgEJCgoBAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEJCQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEKAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQELCwoKAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" "paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQICAwMBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAQBAgIDAwMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQUFBAQBAgIDAgICAQAAAAAAAAAAAAAAAAAAAAAAAAABBQEFBAUBAgICAgMBAAAAAAAAAAAAAAAAAAAAAAAAAAABBgEFBQUBAgECAgMBAAAAAAAAAAAAAAAAAAAAAAAAAAEGBwEFBAEBCAECAwEAAAAAAAAAAAAAAAAAAAAAAAAAAQgBBwEEAQgJAQICAQAAAAAAAAAAAAAAAAAAAAAAAAEICAEHAQQBCQYBAgIBAAAAAAAAAAAAAAAAAAAAAAAAAAEGCQkBBQEGAQUBAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBBgYBBgEBAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQcBAQEBAgIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAwECAwIBAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQECAQcHBwECAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAEBAQEBAQECAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgEJCgoBAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEJCQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEKAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQELCwoKAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
},
"palette" : {
"rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -90,16 +90,16 @@
"relative_path" : "link01.png", "relative_path" : "link01.png",
"mime_type" : "image/png", "mime_type" : "image/png",
"size" : 496, "size" : 496,
"last_modified" : 1779633092946, "last_modified" : 1779659315454,
"fingerprint" : "58a6a9bc02d9174fdc6bcd6f71f5fb86c47d506812e83cae5b0e23a1f951dbbf", "fingerprint" : "58a6a9bc02d9174fdc6bcd6f71f5fb86c47d506812e83cae5b0e23a1f951dbbf",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ]
},
"tile" : { "tile" : {
"width" : 32, "width" : 32,
"height" : 32, "height" : 32,
"paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQECAgMDAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQEAQICAwMDAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAEFBQQEAQICAwICAgEAAAAAAAAAAAAAAAAAAAAAAAAAAQUBBQQFAQICAgIDAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQYBBQUFAQIBAgIDAQAAAAAAAAAAAAAAAAAAAAAAAAABBgcBBQQBAQgBAgMBAAAAAAAAAAAAAAAAAAAAAAAAAAEIAQcBBAEICQECAgEAAAAAAAAAAAAAAAAAAAAAAAABCAgBBwEEAQkGAQICAQAAAAAAAAAAAAAAAAAAAAAAAAABBgkJAQUBBgEFAQIBAAAAAAAAAAAAAAAAAAAAAAAAAAABAQYGAQYBAQEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHAQEBAQECAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgEBBwMBAwMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBCQoBBwEDAgEBAAAAAAAAAAAAAAAAAAAAAAAAAAABAgEJCQoBAgIBAQIBAAAAAAAAAAAAAAAAAAAAAAAAAAECAgEBAQICAQECAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgECAQECAgEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQICAgEBAQoKAQAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQELCwoBAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQsLAQEAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" "paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQECAgMDAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQEAQICAwMDAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAEFBQQEAQICAwICAgEAAAAAAAAAAAAAAAAAAAAAAAAAAQUBBQQFAQICAgIDAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQYBBQUFAQIBAgIDAQAAAAAAAAAAAAAAAAAAAAAAAAABBgcBBQQBAQgBAgMBAAAAAAAAAAAAAAAAAAAAAAAAAAEIAQcBBAEICQECAgEAAAAAAAAAAAAAAAAAAAAAAAABCAgBBwEEAQkGAQICAQAAAAAAAAAAAAAAAAAAAAAAAAABBgkJAQUBBgEFAQIBAAAAAAAAAAAAAAAAAAAAAAAAAAABAQYGAQYBAQEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHAQEBAQECAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgEBBwMBAwMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBCQoBBwEDAgEBAAAAAAAAAAAAAAAAAAAAAAAAAAABAgEJCQoBAgIBAQIBAAAAAAAAAAAAAAAAAAAAAAAAAAECAgEBAQICAQECAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgECAQECAgEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQICAgEBAQoKAQAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQELCwoBAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQsLAQEAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
},
"palette" : {
"rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -107,16 +107,16 @@
"relative_path" : "link02.png", "relative_path" : "link02.png",
"mime_type" : "image/png", "mime_type" : "image/png",
"size" : 492, "size" : 492,
"last_modified" : 1779633089293, "last_modified" : 1779659315454,
"fingerprint" : "110c4f835a40bb370c7bb7761afcd69de0d38e75798d20d50f4c203aa56f213a", "fingerprint" : "110c4f835a40bb370c7bb7761afcd69de0d38e75798d20d50f4c203aa56f213a",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ]
},
"tile" : { "tile" : {
"width" : 32, "width" : 32,
"height" : 32, "height" : 32,
"paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQECAgMDAQEAAAEBAAAAAAAAAAAAAAAAAAAAAAABBAQEAQICAwMDAgEBAwEAAAAAAAAAAAAAAAAAAAAAAAEFBQQEAQICAwICAQIDAQAAAAAAAAAAAAAAAAAAAAAAAAEBBQQFAQICAgICAwEBAAAAAAAAAAAAAAAAAAAAAAAAAQYBBQUFAQIBAgICAQAAAAAAAAAAAAAAAAAAAAAAAAABBgcBBQQFAQgBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAEIAQcBBAUBCQEBBQUBAAAAAAAAAAAAAAAAAAAAAAABCAgBBwgBBAUBAQUBAAAAAAAAAAAAAAAAAAAAAAAAAAABBgkJBgYBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQYGBgYBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEJCgEHAwECAwEBAQAAAAAAAAAAAAAAAAAAAAAAAAABAQkKAQcCAQIDAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAEKAQEBAQECAgEBAgELAQAAAAAAAAAAAAAAAAAAAAAAAQEKAQICAQEBAgIBAQoLAQAAAAAAAAAAAAAAAAAAAAAAAQEBAQECAgICAQEAAQEAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" "paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQECAgMDAQEAAAEBAAAAAAAAAAAAAAAAAAAAAAABBAQEAQICAwMDAgEBAwEAAAAAAAAAAAAAAAAAAAAAAAEFBQQEAQICAwICAQIDAQAAAAAAAAAAAAAAAAAAAAAAAAEBBQQFAQICAgICAwEBAAAAAAAAAAAAAAAAAAAAAAAAAQYBBQUFAQIBAgICAQAAAAAAAAAAAAAAAAAAAAAAAAABBgcBBQQFAQgBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAEIAQcBBAUBCQEBBQUBAAAAAAAAAAAAAAAAAAAAAAABCAgBBwgBBAUBAQUBAAAAAAAAAAAAAAAAAAAAAAAAAAABBgkJBgYBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQYGBgYBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEJCgEHAwECAwEBAQAAAAAAAAAAAAAAAAAAAAAAAAABAQkKAQcCAQIDAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAEKAQEBAQECAgEBAgELAQAAAAAAAAAAAAAAAAAAAAAAAQEKAQICAQEBAgIBAQoLAQAAAAAAAAAAAAAAAAAAAAAAAQEBAQECAgICAQEAAQEAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
},
"palette" : {
"rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -124,16 +124,16 @@
"relative_path" : "link03.png", "relative_path" : "link03.png",
"mime_type" : "image/png", "mime_type" : "image/png",
"size" : 500, "size" : 500,
"last_modified" : 1779633101533, "last_modified" : 1779659315455,
"fingerprint" : "2e6fb2cfbf77f4b3c0d116b9b77a3ae228cdc5671bd18320285824faef9674d3", "fingerprint" : "2e6fb2cfbf77f4b3c0d116b9b77a3ae228cdc5671bd18320285824faef9674d3",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ]
},
"tile" : { "tile" : {
"width" : 32, "width" : 32,
"height" : 32, "height" : 32,
"paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAEBAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQICAwMBAQEBAwEAAAAAAAAAAAAAAAAAAAAAAAABBAQBAgIDAwMCAQMDAQAAAAAAAAAAAAAAAAAAAAAAAQUFBAQBAgIDAgICAwIBAAAAAAAAAAAAAAAAAAAAAAABBQEFBAUBAgICAgMCAQAAAAAAAAAAAAAAAAAAAAAAAAABBgEFBQUBAgECAgIBAAAAAAAAAAAAAAAAAAAAAAAAAAEGBwEFBAUBCAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQgBBwEEBQEJAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAEICAEHCQEEBQEFAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBCQkGBgEBAQUBAAAAAAAAAAAAAAAAAAAAAAAAAAABCQoBAQEGBgEBAQUBAAAAAAAAAAAAAAAAAAAAAAAAAAEKCgEHAgEBAQMBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBBwICAQIDAwEBAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQECAgMBAQIBAAAAAAAAAAAAAAAAAAAAAAAAAQoBAQIBAgICAgECAQEAAAAAAAAAAAAAAAAAAAAAAAABCgoBAgIBAQEBAgELAQAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQICAgIBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" "paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAEBAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQICAwMBAQEBAwEAAAAAAAAAAAAAAAAAAAAAAAABBAQBAgIDAwMCAQMDAQAAAAAAAAAAAAAAAAAAAAAAAQUFBAQBAgIDAgICAwIBAAAAAAAAAAAAAAAAAAAAAAABBQEFBAUBAgICAgMCAQAAAAAAAAAAAAAAAAAAAAAAAAABBgEFBQUBAgECAgIBAAAAAAAAAAAAAAAAAAAAAAAAAAEGBwEFBAUBCAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQgBBwEEBQEJAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAEICAEHCQEEBQEFAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBCQkGBgEBAQUBAAAAAAAAAAAAAAAAAAAAAAAAAAABCQoBAQEGBgEBAQUBAAAAAAAAAAAAAAAAAAAAAAAAAAEKCgEHAgEBAQMBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBBwICAQIDAwEBAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQECAgMBAQIBAAAAAAAAAAAAAAAAAAAAAAAAAQoBAQIBAgICAgECAQEAAAAAAAAAAAAAAAAAAAAAAAABCgoBAgIBAQEBAgELAQAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQICAgIBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
},
"palette" : {
"rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -141,16 +141,16 @@
"relative_path" : "link04.png", "relative_path" : "link04.png",
"mime_type" : "image/png", "mime_type" : "image/png",
"size" : 485, "size" : 485,
"last_modified" : 1779633104073, "last_modified" : 1779659315455,
"fingerprint" : "c8e30f40473deedb265be26967f6bf5f2ba35a2bd5d0a049dcb8843fa60d5600", "fingerprint" : "c8e30f40473deedb265be26967f6bf5f2ba35a2bd5d0a049dcb8843fa60d5600",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ]
},
"tile" : { "tile" : {
"width" : 32, "width" : 32,
"height" : 32, "height" : 32,
"paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQICAwMBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAQBAgIDAwMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQUFBAQBAgIDAgICAQAAAAAAAAAAAAAAAAAAAAAAAAABBQEFBAUBAgICAgMBAAAAAAAAAAAAAAAAAAAAAAAAAAABBgEFBQUBAgECAgMBAAAAAAAAAAAAAAAAAAAAAAAAAAEGBwEFBAEBCAECAwEAAAAAAAAAAAAAAAAAAAAAAAAAAQgBBwEEAQgJAQICAQAAAAAAAAAAAAAAAAAAAAAAAAEICAEHAQQBCQYBAgIBAAAAAAAAAAAAAAAAAAAAAAAAAAEGCQkBBQEGAQUBAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBBgYBBgEBAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQcBAQEBAgIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAwECAwIBAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQECAQcHBwECAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAEBAQEBAQECAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgEJCgoBAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEJCQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEKAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQELCwoKAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" "paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQICAwMBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAQBAgIDAwMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQUFBAQBAgIDAgICAQAAAAAAAAAAAAAAAAAAAAAAAAABBQEFBAUBAgICAgMBAAAAAAAAAAAAAAAAAAAAAAAAAAABBgEFBQUBAgECAgMBAAAAAAAAAAAAAAAAAAAAAAAAAAEGBwEFBAEBCAECAwEAAAAAAAAAAAAAAAAAAAAAAAAAAQgBBwEEAQgJAQICAQAAAAAAAAAAAAAAAAAAAAAAAAEICAEHAQQBCQYBAgIBAAAAAAAAAAAAAAAAAAAAAAAAAAEGCQkBBQEGAQUBAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBBgYBBgEBAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQcBAQEBAgIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAwECAwIBAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQECAQcHBwECAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAEBAQEBAQECAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgEJCgoBAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEJCQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEKAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQELCwoKAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
},
"palette" : {
"rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -158,16 +158,16 @@
"relative_path" : "link05.png", "relative_path" : "link05.png",
"mime_type" : "image/png", "mime_type" : "image/png",
"size" : 487, "size" : 487,
"last_modified" : 1779633098780, "last_modified" : 1779659315456,
"fingerprint" : "94ac699b5e913925cf881e76ff951875147b598b1ee9870187111e7ca0b40d1d", "fingerprint" : "94ac699b5e913925cf881e76ff951875147b598b1ee9870187111e7ca0b40d1d",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239 ]
},
"tile" : { "tile" : {
"width" : 32, "width" : 32,
"height" : 32, "height" : 32,
"paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQICAwMBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAQBAgIDAwMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQUFBAQBAgIDAgICAQAAAAAAAAAAAAAAAAAAAAAAAAABBQEFBAUBAgICAgMBAAAAAAAAAAAAAAAAAAAAAAAAAAABBgEFBQUBAgECAgMBAAAAAAAAAAAAAAAAAAAAAAAAAAEGBwEFBAEBCAECAwEAAAAAAAAAAAAAAAAAAAAAAAAAAQgBBwEEAQgJAQICAQAAAAAAAAAAAAAAAAAAAAAAAAEICAEHAQQBCQYBAgIBAAAAAAAAAAAAAAAAAAAAAAAAAAEGCQkBBQEGAQUBAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBBgYBAQEBAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQcBAQEDAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAwMBAgcHAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQMDAwIBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAIDAgEKCgECAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAQEBAQkJAQIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQECAgICAQECAQoBAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQICAgEKCgEAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBCgoKAQAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" "paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQICAwMBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAQBAgIDAwMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQUFBAQBAgIDAgICAQAAAAAAAAAAAAAAAAAAAAAAAAABBQEFBAUBAgICAgMBAAAAAAAAAAAAAAAAAAAAAAAAAAABBgEFBQUBAgECAgMBAAAAAAAAAAAAAAAAAAAAAAAAAAEGBwEFBAEBCAECAwEAAAAAAAAAAAAAAAAAAAAAAAAAAQgBBwEEAQgJAQICAQAAAAAAAAAAAAAAAAAAAAAAAAEICAEHAQQBCQYBAgIBAAAAAAAAAAAAAAAAAAAAAAAAAAEGCQkBBQEGAQUBAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBBgYBAQEBAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQcBAQEDAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAwMBAgcHAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQMDAwIBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAIDAgEKCgECAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAQEBAQkJAQIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQECAgICAQECAQoBAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQICAgEKCgEAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBCgoKAQAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
},
"palette" : {
"rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -175,16 +175,16 @@
"relative_path" : "link06.png", "relative_path" : "link06.png",
"mime_type" : "image/png", "mime_type" : "image/png",
"size" : 498, "size" : 498,
"last_modified" : 1779633106829, "last_modified" : 1779659315457,
"fingerprint" : "fc0a623650619ca39c1ce2f9f9e1b0f6951abd194e18ea60c682fae6a769df97", "fingerprint" : "fc0a623650619ca39c1ce2f9f9e1b0f6951abd194e18ea60c682fae6a769df97",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ]
},
"tile" : { "tile" : {
"width" : 32, "width" : 32,
"height" : 32, "height" : 32,
"paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQICAwMBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEBAQBAgIDAwMCAQABAQAAAAAAAAAAAAAAAAAAAAAAAQUFBAQBAgIDAgIBAQMBAAAAAAAAAAAAAAAAAAAAAAAAAQEFBAUBAgICAgIDAwEAAAAAAAAAAAAAAAAAAAAAAAABBgEFBQUBAgECAgIBAAAAAAAAAAAAAAAAAAAAAAAAAAEGBwEFBAUBCAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAQgBBwEEBQEJAQEFBQEAAAAAAAAAAAAAAAAAAAAAAAEICAEHCAEEBQEBBQEBAAAAAAAAAAAAAAAAAAAAAAAAAAEGCQkGBgEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBBgYGAQIDAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCQEBAQEBAQEHAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBBwcDAgEKCgEBAAAAAAAAAAAAAAAAAAAAAAAAAAABAgIBAwMCAQkJAQEAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQIBAgMCAQEBCgEAAAAAAAAAAAAAAAAAAAAAAAABCwsKAQIBAQECAgEKAQAAAAAAAAAAAAAAAAAAAAAAAAABCwsKAQICAgIBCgoBAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" "paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQICAwMBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEBAQBAgIDAwMCAQABAQAAAAAAAAAAAAAAAAAAAAAAAQUFBAQBAgIDAgIBAQMBAAAAAAAAAAAAAAAAAAAAAAAAAQEFBAUBAgICAgIDAwEAAAAAAAAAAAAAAAAAAAAAAAABBgEFBQUBAgECAgIBAAAAAAAAAAAAAAAAAAAAAAAAAAEGBwEFBAUBCAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAQgBBwEEBQEJAQEFBQEAAAAAAAAAAAAAAAAAAAAAAAEICAEHCAEEBQEBBQEBAAAAAAAAAAAAAAAAAAAAAAAAAAEGCQkGBgEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBBgYGAQIDAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCQEBAQEBAQEHAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBBwcDAgEKCgEBAAAAAAAAAAAAAAAAAAAAAAAAAAABAgIBAwMCAQkJAQEAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQIBAgMCAQEBCgEAAAAAAAAAAAAAAAAAAAAAAAABCwsKAQIBAQECAgEKAQAAAAAAAAAAAAAAAAAAAAAAAAABCwsKAQICAgIBCgoBAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
},
"palette" : {
"rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -192,16 +192,16 @@
"relative_path" : "link07.png", "relative_path" : "link07.png",
"mime_type" : "image/png", "mime_type" : "image/png",
"size" : 509, "size" : 509,
"last_modified" : 1779633109622, "last_modified" : 1779659315457,
"fingerprint" : "7ada8efefcd6d069b10846fefb9bd9cff1a1fa4c1565bbebfd68fc83645f0732", "fingerprint" : "7ada8efefcd6d069b10846fefb9bd9cff1a1fa4c1565bbebfd68fc83645f0732",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ]
},
"tile" : { "tile" : {
"width" : 32, "width" : 32,
"height" : 32, "height" : 32,
"paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAEBAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQICAwMBAQEBAwEAAAAAAAAAAAAAAAAAAAAAAAABBAQBAgIDAwMCAQMDAQAAAAAAAAAAAAAAAAAAAAAAAQUFBAQBAgIDAgICAwIBAAAAAAAAAAAAAAAAAAAAAAABBQEFBAUBAgICAgMCAQAAAAAAAAAAAAAAAAAAAAAAAAABBgEFBQUBAgECAgIBAAAAAAAAAAAAAAAAAAAAAAAAAAEGBwEFBAUBCAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQgBBwEEBQEJAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAEICAEHCQEEBQEFAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGCQkGBgEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBBgYGAQIDAgEBAAAAAAAAAAAAAAAAAAAAAAAAAAEJAQEBAQEBAgIBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBBwcDAgIBAQoKAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQQBAwMDAgIBCQkBAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgECAwMCAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAABCwYBAgEBAQECAgEKAQAAAAAAAAAAAAAAAAAAAAAAAAELCgYBAgICAgEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAEKCgoBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" "paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAEBAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQICAwMBAQEBAwEAAAAAAAAAAAAAAAAAAAAAAAABBAQBAgIDAwMCAQMDAQAAAAAAAAAAAAAAAAAAAAAAAQUFBAQBAgIDAgICAwIBAAAAAAAAAAAAAAAAAAAAAAABBQEFBAUBAgICAgMCAQAAAAAAAAAAAAAAAAAAAAAAAAABBgEFBQUBAgECAgIBAAAAAAAAAAAAAAAAAAAAAAAAAAEGBwEFBAUBCAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQgBBwEEBQEJAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAEICAEHCQEEBQEFAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGCQkGBgEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBBgYGAQIDAgEBAAAAAAAAAAAAAAAAAAAAAAAAAAEJAQEBAQEBAgIBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBBwcDAgIBAQoKAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQQBAwMDAgIBCQkBAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgECAwMCAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAABCwYBAgEBAQECAgEKAQAAAAAAAAAAAAAAAAAAAAAAAAELCgYBAgICAgEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAEKCgoBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
},
"palette" : {
"rgba8888" : [ 0, 538976511, 1368527103, 1907499263, -205315841, -1014890241, -1302257409, -202116097, -207461889, -476950017, 1631658239, -1300082177 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -250,13 +250,13 @@
"last_modified" : 1776965154257, "last_modified" : 1776965154257,
"fingerprint" : "8771c3e294d0edbc8dd3aaa6995a6db32166ae6bfb3e063170cc79b298d17e71", "fingerprint" : "8771c3e294d0edbc8dd3aaa6995a6db32166ae6bfb3e063170cc79b298d17e71",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ 1217939711 ]
},
"tile" : { "tile" : {
"width" : 8, "width" : 8,
"height" : 8, "height" : 8,
"paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" "paletteIndices" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
},
"palette" : {
"rgba8888" : [ 1217939711 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -267,13 +267,13 @@
"last_modified" : 1776965154257, "last_modified" : 1776965154257,
"fingerprint" : "5d81eef8be13043330b42b546e10beed8ba00dfaa42df67477a8778c2b9484d7", "fingerprint" : "5d81eef8be13043330b42b546e10beed8ba00dfaa42df67477a8778c2b9484d7",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ 1217939711, 1081622783, 677921023, 676868351, 673720575, -2005909249, -1466932993, 1615868159 ]
},
"tile" : { "tile" : {
"width" : 8, "width" : 8,
"height" : 8, "height" : 8,
"paletteIndices" : "AAAAAAAAAAAAAAAAAAEBAQABAQEBAQEBAQIDBAQEBAMCAwQFBQUFBAIDBAUFBgYHAgMEBwUFBwcAAgQEBwcHBg==" "paletteIndices" : "AAAAAAAAAAAAAAAAAAEBAQABAQEBAQEBAQIDBAQEBAMCAwQFBQUFBAIDBAUFBgYHAgMEBwUFBwcAAgQEBwcHBg=="
},
"palette" : {
"rgba8888" : [ 1217939711, 1081622783, 677921023, 676868351, 673720575, -2005909249, -1466932993, 1615868159 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -284,13 +284,13 @@
"last_modified" : 1776965154258, "last_modified" : 1776965154258,
"fingerprint" : "3250840c4fe08c134ea966ce7c8fcaccae2c2a45660d7173c5e262a2e5076548", "fingerprint" : "3250840c4fe08c134ea966ce7c8fcaccae2c2a45660d7173c5e262a2e5076548",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ 1081622783, 676868351, 673720575, 1615868159, -1466932993, -2005909249 ]
},
"tile" : { "tile" : {
"width" : 8, "width" : 8,
"height" : 8, "height" : 8,
"paletteIndices" : "AAAAAAABAgIAAAAAAQIDBAAAAAECAwQEAAECAgMDAwMCAgUEBAQEBAMFBAQFBQUFBAQEBQUEBAQEBQUFBAQFBQ==" "paletteIndices" : "AAAAAAABAgIAAAAAAQIDBAAAAAECAwQEAAECAgMDAwMCAgUEBAQEBAMFBAQFBQUFBAQEBQUEBAQEBQUFBAQFBQ=="
},
"palette" : {
"rgba8888" : [ 1081622783, 676868351, 673720575, 1615868159, -1466932993, -2005909249 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -301,13 +301,13 @@
"last_modified" : 1776965154258, "last_modified" : 1776965154258,
"fingerprint" : "fe3ab2b7eb3b10a042de14484d53e718e6b505edb1ad19053668565bfe3a8f25", "fingerprint" : "fe3ab2b7eb3b10a042de14484d53e718e6b505edb1ad19053668565bfe3a8f25",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ 673720575, 676868351, 1081622783, -1466932993, 1615868159, -2005909249 ]
},
"tile" : { "tile" : {
"width" : 8, "width" : 8,
"height" : 8, "height" : 8,
"paletteIndices" : "AAABAgICAgIDBAABAgICAgMDBAABAgICBAQEBAAAAQIDAwMDAwUAAAUFBQUDAwUEAwMDBQUDAwMFBQMDBQUFAw==" "paletteIndices" : "AAABAgICAgIDBAABAgICAgMDBAABAgICBAQEBAAAAQIDAwMDAwUAAAUFBQUDAwUEAwMDBQUDAwMFBQMDBQUFAw=="
},
"palette" : {
"rgba8888" : [ 673720575, 676868351, 1081622783, -1466932993, 1615868159, -2005909249 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -318,13 +318,13 @@
"last_modified" : 1776965154259, "last_modified" : 1776965154259,
"fingerprint" : "7fcbf90e1e9a69d6ce3be80ea1901d66c9992f68dc72e4c636dcd2ad52fa2898", "fingerprint" : "7fcbf90e1e9a69d6ce3be80ea1901d66c9992f68dc72e4c636dcd2ad52fa2898",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ 1217939711, 1081622783, 676868351, 673720575, 677921023, -2005909249, 1615868159, -1466932993 ]
},
"tile" : { "tile" : {
"width" : 8, "width" : 8,
"height" : 8, "height" : 8,
"paletteIndices" : "AAAAAAAAAAABAQEAAAAAAAEBAQEBAQEAAgMDAwMCBAEDBQUFBQMCBAYHBwUFAwIEBgYFBQYDAgQHBgYGAwMEAA==" "paletteIndices" : "AAAAAAAAAAABAQEAAAAAAAEBAQEBAQEAAgMDAwMCBAEDBQUFBQMCBAYHBwUFAwIEBgYFBQYDAgQHBgYGAwMEAA=="
},
"palette" : {
"rgba8888" : [ 1217939711, 1081622783, 676868351, 673720575, 677921023, -2005909249, 1615868159, -1466932993 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -335,13 +335,13 @@
"last_modified" : 1776965154259, "last_modified" : 1776965154259,
"fingerprint" : "451fc8d646049944d5aa7c7dc254636eec0151aaff6e2051059304b9d6ebc31e", "fingerprint" : "451fc8d646049944d5aa7c7dc254636eec0151aaff6e2051059304b9d6ebc31e",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ 1217939711, 677921023, 676868351, 673720575, 1615868159, -1466932993, -2005909249 ]
},
"tile" : { "tile" : {
"width" : 8, "width" : 8,
"height" : 8, "height" : 8,
"paletteIndices" : "AAECAwMEBQUAAAECAwUFBgAAAAIDBQYGAAAAAwMFBgYAAAMEAwUGBgADBgQDBQYGAwYFBAMFBgYDBgUEAwUGBg==" "paletteIndices" : "AAECAwMEBQUAAAECAwUFBgAAAAIDBQYGAAAAAwMFBgYAAAMEAwUGBgADBgQDBQYGAwYFBAMFBgYDBgUEAwUGBg=="
},
"palette" : {
"rgba8888" : [ 1217939711, 677921023, 676868351, 673720575, 1615868159, -1466932993, -2005909249 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -352,13 +352,13 @@
"last_modified" : 1776965154260, "last_modified" : 1776965154260,
"fingerprint" : "aa757df4600823ec6655235a1081061777124ccee74b31481bbe402e53635f53", "fingerprint" : "aa757df4600823ec6655235a1081061777124ccee74b31481bbe402e53635f53",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ -2005909249, -1466932993, 1615868159, 673720575 ]
},
"tile" : { "tile" : {
"width" : 8, "width" : 8,
"height" : 8, "height" : 8,
"paletteIndices" : "AAABAgIAAAAAAQEAAgIAAQEBAAAAAgIBAQEAAAECAwIBAQAAAQIDAwEBAAABAgMDAQEAAAECAwIBAQEAAgMCAQ==" "paletteIndices" : "AAABAgIAAAAAAQEAAgIAAQEBAAAAAgIBAQEAAAECAwIBAQAAAQIDAwEBAAABAgMDAQEAAAECAwIBAQEAAgMCAQ=="
},
"palette" : {
"rgba8888" : [ -2005909249, -1466932993, 1615868159, 673720575 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -369,13 +369,13 @@
"last_modified" : 1776965154260, "last_modified" : 1776965154260,
"fingerprint" : "38162157f5685cce25b835d3a2caee3465fd2ec3ee5db2a5089d7d5ae5ea3bb7", "fingerprint" : "38162157f5685cce25b835d3a2caee3465fd2ec3ee5db2a5089d7d5ae5ea3bb7",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ -2005909249, 1615868159, -1466932993, 673720575 ]
},
"tile" : { "tile" : {
"width" : 8, "width" : 8,
"height" : 8, "height" : 8,
"paletteIndices" : "AAAAAQECAAACAAEBAAICAAIBAQAAAAICAQMBAgAAAgIDAwECAAACAgMDAQIAAAICAQMBAgAAAgICAQMBAAICAg==" "paletteIndices" : "AAAAAQECAAACAAEBAAICAAIBAQAAAAICAQMBAgAAAgIDAwECAAACAgMDAQIAAAICAQMBAgAAAgICAQMBAAICAg=="
},
"palette" : {
"rgba8888" : [ -2005909249, 1615868159, -1466932993, 673720575 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -386,13 +386,13 @@
"last_modified" : 1776965154260, "last_modified" : 1776965154260,
"fingerprint" : "8cab5b3d553af9ed371bd19fc624763accc90e5d926d300ba31dd8d9d6bab803", "fingerprint" : "8cab5b3d553af9ed371bd19fc624763accc90e5d926d300ba31dd8d9d6bab803",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ -1466932993, 1615868159, 673720575, 676868351, 677921023, 1217939711, -2005909249 ]
},
"tile" : { "tile" : {
"width" : 8, "width" : 8,
"height" : 8, "height" : 8,
"paletteIndices" : "AAABAgIDBAUGAAACAwQFBQYGAAIDBQUFBgYAAgIFBQUGBgACAQIFBQYGAAIBBgIFBgYAAgEABgIGBgACAQAGAg==" "paletteIndices" : "AAABAgIDBAUGAAACAwQFBQYGAAIDBQUFBgYAAgIFBQUGBgACAQIFBQYGAAIBBgIFBgYAAgEABgIGBgACAQAGAg=="
},
"palette" : {
"rgba8888" : [ -1466932993, 1615868159, 673720575, 676868351, 677921023, 1217939711, -2005909249 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -403,13 +403,13 @@
"last_modified" : 1776965154261, "last_modified" : 1776965154261,
"fingerprint" : "d9ff5a6df0f65f5fcfb8f22376beeb266d429e2c6e9c82f51c12bc6ee4c3fcdc", "fingerprint" : "d9ff5a6df0f65f5fcfb8f22376beeb266d429e2c6e9c82f51c12bc6ee4c3fcdc",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ 673720575, 1615868159, -2005909249, -1466932993, 676868351, 677921023, 1217939711 ]
},
"tile" : { "tile" : {
"width" : 8, "width" : 8,
"height" : 8, "height" : 8,
"paletteIndices" : "AAECAQEAAwIEAAABAQADAwQFBAABAQADBgUEBAABAAAGBgUFBAAAAQYGBgUEAAICBgYGBgAAAgIGBgYEAAEBAg==" "paletteIndices" : "AAECAQEAAwIEAAABAQADAwQFBAABAQADBgUEBAABAAAGBgUFBAAAAQYGBgUEAAICBgYGBgAAAgIGBgYEAAEBAg=="
},
"palette" : {
"rgba8888" : [ 673720575, 1615868159, -2005909249, -1466932993, 676868351, 677921023, 1217939711 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -420,13 +420,13 @@
"last_modified" : 1776965154261, "last_modified" : 1776965154261,
"fingerprint" : "b9ff45c77f7779a6acebcc537c2ddac0e27e91162b656a04dc4772ec5f24fc26", "fingerprint" : "b9ff45c77f7779a6acebcc537c2ddac0e27e91162b656a04dc4772ec5f24fc26",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ -2005909249, -1466932993, 1615868159, 673720575 ]
},
"tile" : { "tile" : {
"width" : 8, "width" : 8,
"height" : 8, "height" : 8,
"paletteIndices" : "AAEBAgIAAAEAAAICAQEAAAEAAAAAAQEAAQEBAQAAAQEDAgIBAQAAAAIDAgIBAQAAAAIDAgICAQEAAgIDAgICAg==" "paletteIndices" : "AAEBAgIAAAEAAAICAQEAAAEAAAAAAQEAAQEBAQAAAQEDAgIBAQAAAAIDAgIBAQAAAAIDAgICAQEAAgIDAgICAg=="
},
"palette" : {
"rgba8888" : [ -2005909249, -1466932993, 1615868159, 673720575 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -437,13 +437,13 @@
"last_modified" : 1776965154261, "last_modified" : 1776965154261,
"fingerprint" : "43f370324fedccda888d49409e2a64f182f08b4143b4bdd5bafaf498feebd21a", "fingerprint" : "43f370324fedccda888d49409e2a64f182f08b4143b4bdd5bafaf498feebd21a",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ -1466932993, -2005909249, 1615868159, 673720575 ]
},
"tile" : { "tile" : {
"width" : 8, "width" : 8,
"height" : 8, "height" : 8,
"paletteIndices" : "AAEBAgIAAAEBAQAAAgIBAQEAAAEBAQEAAAABAQAAAAABAQEAAAICAwEBAAACAgMCAAACAgIDAgECAgICAwICAQ==" "paletteIndices" : "AAEBAgIAAAEBAQAAAgIBAQEAAAEBAQEAAAABAQAAAAABAQEAAAICAwEBAAACAgMCAAACAgIDAgECAgICAwICAQ=="
},
"palette" : {
"rgba8888" : [ -1466932993, -2005909249, 1615868159, 673720575 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -454,13 +454,13 @@
"last_modified" : 1776965154262, "last_modified" : 1776965154262,
"fingerprint" : "cb047e655f4e196f22ca0048149df5dcb959f895faeaeb94920182d4a2d16b38", "fingerprint" : "cb047e655f4e196f22ca0048149df5dcb959f895faeaeb94920182d4a2d16b38",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ -2005909249, -1466932993, 673720575, 1615868159, 676868351, 677921023, 1217939711 ]
},
"tile" : { "tile" : {
"width" : 8, "width" : 8,
"height" : 8, "height" : 8,
"paletteIndices" : "AAECAwMAAwIBAQIDAwICBAECAwMCBAUEAgIDAgQEBQYDAgIEBQUGBgAAAgQFBgYGAAACAgYGBgYAAwMCBAYGBg==" "paletteIndices" : "AAECAwMAAwIBAQIDAwICBAECAwMCBAUEAgIDAgQEBQYDAgIEBQUGBgAAAgQFBgYGAAACAgYGBgYAAwMCBAYGBg=="
},
"palette" : {
"rgba8888" : [ -2005909249, -1466932993, 673720575, 1615868159, 676868351, 677921023, 1217939711 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -471,13 +471,13 @@
"last_modified" : 1776965154262, "last_modified" : 1776965154262,
"fingerprint" : "25eba17b67dd5159f5fb9d3edd531d54a44d1c76f997385840dac53517b98886", "fingerprint" : "25eba17b67dd5159f5fb9d3edd531d54a44d1c76f997385840dac53517b98886",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ 1217939711, 673720575, -2005909249, 1615868159, 676868351, 677921023 ]
},
"tile" : { "tile" : {
"width" : 8, "width" : 8,
"height" : 8, "height" : 8,
"paletteIndices" : "AAAAAQICAwMAAAECAgICAwAAAQICAgIDAAABAgIDAQMAAAEDAQQEAQAABAQFBAUEAAAAAAAFAAUAAAAAAAAAAA==" "paletteIndices" : "AAAAAQICAwMAAAECAgICAwAAAQICAgIDAAABAgIDAQMAAAEDAQQEAQAABAQFBAUEAAAAAAAFAAUAAAAAAAAAAA=="
},
"palette" : {
"rgba8888" : [ 1217939711, 673720575, -2005909249, 1615868159, 676868351, 677921023 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -488,13 +488,13 @@
"last_modified" : 1776965154262, "last_modified" : 1776965154262,
"fingerprint" : "32ca96c14290de8009fd2db623f55514bed2345b7d5881a80dd3fe6235012854", "fingerprint" : "32ca96c14290de8009fd2db623f55514bed2345b7d5881a80dd3fe6235012854",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ 1615868159, 673720575, 676868351, -2005909249, 677921023, 1217939711 ]
},
"tile" : { "tile" : {
"width" : 8, "width" : 8,
"height" : 8, "height" : 8,
"paletteIndices" : "AAAAAQAAAQEBAAEBAAEAAAEBAgEBAAADAQICAgEAAAMCAgQCAgEAAAQEBQQEAQADBQUFBQUCAQAFBQUFBQUCAQ==" "paletteIndices" : "AAAAAQAAAQEBAAEBAAEAAAEBAgEBAAADAQICAgEAAAMCAgQCAgEAAAQEBQQEAQADBQUFBQUCAQAFBQUFBQUCAQ=="
},
"palette" : {
"rgba8888" : [ 1615868159, 673720575, 676868351, -2005909249, 677921023, 1217939711 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -505,13 +505,13 @@
"last_modified" : 1776965154263, "last_modified" : 1776965154263,
"fingerprint" : "7a093fe00c805bcf38d4facff14a6d4c2b8baeaa2d553fa8d3db9f2d76b32f3b", "fingerprint" : "7a093fe00c805bcf38d4facff14a6d4c2b8baeaa2d553fa8d3db9f2d76b32f3b",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ 673720575, 1615868159, -2005909249, 676868351, 677921023, 1217939711 ]
},
"tile" : { "tile" : {
"width" : 8, "width" : 8,
"height" : 8, "height" : 8,
"paletteIndices" : "AAABAQABAQEBAQABAAABAAIBAQAAAwAAAgEBAAMDAwABAQADAwQDAwIBAAQEBQQEAQADBQUFBQUAAwUFBQUFBQ==" "paletteIndices" : "AAABAQABAQEBAQABAAABAAIBAQAAAwAAAgEBAAMDAwABAQADAwQDAwIBAAQEBQQEAQADBQUFBQUAAwUFBQUFBQ=="
},
"palette" : {
"rgba8888" : [ 673720575, 1615868159, -2005909249, 676868351, 677921023, 1217939711 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]
@ -522,13 +522,13 @@
"last_modified" : 1776965154263, "last_modified" : 1776965154263,
"fingerprint" : "77c5277220421226d16f58b1bcfb4eaf157fa4f6c740c5aaebefaf88fb91c22e", "fingerprint" : "77c5277220421226d16f58b1bcfb4eaf157fa4f6c740c5aaebefaf88fb91c22e",
"metadata" : { "metadata" : {
"palette" : {
"rgba8888" : [ 1615868159, -2005909249, 673720575, 1217939711, 676868351, 677921023 ]
},
"tile" : { "tile" : {
"width" : 8, "width" : 8,
"height" : 8, "height" : 8,
"paletteIndices" : "AAABAQIDAwMAAQEBAQIDAwABAQEBAgMDAAIAAQECAwMCBAQCAAIDAwQFBAUEBAMDBQMFAwMDAwMDAwMDAwMDAw==" "paletteIndices" : "AAABAQIDAwMAAQEBAQIDAwABAQEBAgMDAAIAAQECAwMCBAQCAAIDAwQFBAUEBAMDBQMFAwMDAwMDAwMDAwMDAw=="
},
"palette" : {
"rgba8888" : [ 1615868159, -2005909249, 673720575, 1217939711, 676868351, 677921023 ]
} }
}, },
"diagnostics" : [ ] "diagnostics" : [ ]

View File

@ -5,5 +5,5 @@
"title": "Main Test", "title": "Main Test",
"app_version": "0.1.0", "app_version": "0.1.0",
"app_mode": "Game", "app_mode": "Game",
"capabilities": ["log", "gfx", "asset"] "capabilities": ["log", "gfx2d", "composer", "asset"]
} }