scenri 0.20.1 → 0.20.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/serve.js CHANGED
@@ -1,16 +1,16 @@
1
1
  import { createUpdateChecker, classify, isReleaseTriplet, findNpm, stageVersion } from './chunk-YK37H6DM.js';
2
2
  import { shouldAdoptRunning, anotherScenriLines, portBusyLines } from './chunk-CMLJGPYC.js';
3
- import { SchemaTooNewError, defaultHome, createCore, BUDGET_EXHAUSTED, SpendCapError, EDIT_REFERENCE_ROLE_DIRECTIVE, REFERENCE_ROLE_DIRECTIVE, ratioLabel, searchTerms, nameMatches, budgetSize, SCHEMA_VERSION, ASPECT_TOLERANCE } from './chunk-YNL3WQOL.js';
3
+ import { SchemaTooNewError, defaultHome, createCore, BUDGET_EXHAUSTED, SpendCapError, EDIT_REFERENCE_ROLE_DIRECTIVE, REFERENCE_ROLE_DIRECTIVE, ratioLabel, searchTerms, nameMatches, budgetSize, SCHEMA_VERSION, ASPECT_TOLERANCE } from './chunk-2EKTEMJY.js';
4
4
  import { detectInstallKind } from './chunk-PAIAXRAC.js';
5
5
  export { detectInstallKind } from './chunk-PAIAXRAC.js';
6
6
  import { readMeta, repoSlug } from './chunk-Y3ZPBPLP.js';
7
7
  import { compareSemver, newestStaged } from './chunk-4MAFHYAD.js';
8
8
  import { powershellPath, PS_UTF8 } from './chunk-2IGINCPU.js';
9
- import { dirname, join, basename, normalize } from 'path';
9
+ import { dirname, join, basename, normalize, sep, relative } from 'path';
10
10
  import { fileURLToPath } from 'url';
11
- import fs, { existsSync, readdirSync, readFileSync, mkdirSync, createReadStream, rmSync, statSync, renameSync, lstatSync, unlinkSync } from 'fs';
11
+ import fs, { existsSync, readdirSync, rmSync, lstatSync, unlinkSync, renameSync, readFileSync, mkdirSync, createReadStream, statSync } from 'fs';
12
12
  import { homedir, tmpdir, networkInterfaces } from 'os';
13
- import { readFile, stat, copyFile, lstat, readdir, mkdtemp, rm, access, rmdir, rename, unlink, writeFile } from 'fs/promises';
13
+ import { readFile, stat, copyFile, lstat, readdir, mkdtemp, rm, access, rmdir, rename, unlink, mkdir, writeFile } from 'fs/promises';
14
14
  import { spawn, execFile } from 'child_process';
15
15
  import sharp22 from 'sharp';
16
16
  import Fastify from 'fastify';
@@ -22,13 +22,14 @@ import addFormats from 'ajv-formats';
22
22
  import * as cheerio from 'cheerio';
23
23
  import { lookup } from 'dns/promises';
24
24
  import { isIP } from 'net';
25
- import { isDeepStrictEqual } from 'util';
26
- import JSZip from 'jszip';
25
+ import { promisify, isDeepStrictEqual } from 'util';
26
+ import { inflateRaw, inflateRawSync } from 'zlib';
27
27
  import { parse } from 'node-html-parser';
28
28
  import { createServer } from 'http';
29
29
  import { createSocket } from 'dgram';
30
30
  import pixelmatch from 'pixelmatch';
31
31
  import { PNG } from 'pngjs';
32
+ import JSZip from 'jszip';
32
33
 
33
34
  var ENDPOINT = "https://openrouter.ai/api/v1/chat/completions";
34
35
  var PER_IMAGE_TIMEOUT_MS = 3e5;
@@ -2397,12 +2398,23 @@ function composePrompt(scene, input) {
2397
2398
  function contentCacheRoot(env = process.env) {
2398
2399
  return join(env.SCENRI_HOME || join(homedir(), ".scenri"), "content");
2399
2400
  }
2401
+ function contentPartialRoot(env = process.env) {
2402
+ return `${contentCacheRoot(env)}.partial`;
2403
+ }
2404
+ function installedContentRoot(env = process.env) {
2405
+ const partial = contentPartialRoot(env);
2406
+ if (existsSync(join(partial, "meta.json"))) return partial;
2407
+ const root = contentCacheRoot(env);
2408
+ return existsSync(join(root, "meta.json")) ? root : null;
2409
+ }
2400
2410
  function contentCacheReady(env) {
2401
- return existsSync(join(contentCacheRoot(env), "meta.json"));
2411
+ return installedContentRoot(env) !== null;
2402
2412
  }
2403
2413
  function contentCacheVersion(env) {
2414
+ const root = installedContentRoot(env);
2415
+ if (!root) return 0;
2404
2416
  try {
2405
- const meta = JSON.parse(readFileSync(join(contentCacheRoot(env), "meta.json"), "utf8"));
2417
+ const meta = JSON.parse(readFileSync(join(root, "meta.json"), "utf8"));
2406
2418
  const version = Number(meta.version);
2407
2419
  return Number.isFinite(version) ? version : 0;
2408
2420
  } catch {
@@ -2412,22 +2424,39 @@ function contentCacheVersion(env) {
2412
2424
  function contentFile(templatesRoot, ...segments) {
2413
2425
  const primary = join(templatesRoot, ...segments);
2414
2426
  if (existsSync(primary)) return primary;
2415
- if (contentCacheReady()) {
2416
- const cached = join(contentCacheRoot(), ...segments);
2427
+ const installed = installedContentRoot();
2428
+ if (installed) {
2429
+ const cached = join(installed, ...segments);
2417
2430
  if (existsSync(cached)) return cached;
2418
2431
  }
2419
2432
  return primary;
2420
2433
  }
2434
+ function shownFile(templatesRoot, ...segments) {
2435
+ const primary = join(templatesRoot, ...segments);
2436
+ if (existsSync(primary)) return primary;
2437
+ const arrived = join(contentPartialRoot(), ...segments);
2438
+ if (existsSync(arrived)) return arrived;
2439
+ return contentFile(templatesRoot, ...segments);
2440
+ }
2421
2441
  function contentDirList(templatesRoot, ...segments) {
2422
2442
  const names = /* @__PURE__ */ new Set();
2423
2443
  const primary = join(templatesRoot, ...segments);
2424
2444
  if (existsSync(primary)) for (const n of readdirSync(primary)) names.add(n);
2425
- if (contentCacheReady()) {
2426
- const cached = join(contentCacheRoot(), ...segments);
2445
+ const installed = installedContentRoot();
2446
+ if (installed) {
2447
+ const cached = join(installed, ...segments);
2427
2448
  if (existsSync(cached)) for (const n of readdirSync(cached)) names.add(n);
2428
2449
  }
2429
2450
  return [...names].sort();
2430
2451
  }
2452
+ function shownDirList(templatesRoot, ...segments) {
2453
+ const names = new Set(contentDirList(templatesRoot, ...segments));
2454
+ const arrived = join(contentPartialRoot(), ...segments);
2455
+ if (existsSync(arrived)) {
2456
+ for (const n of readdirSync(arrived)) if (!n.endsWith(".part")) names.add(n);
2457
+ }
2458
+ return [...names].sort();
2459
+ }
2431
2460
 
2432
2461
  // src/presenters.ts
2433
2462
  var PRESENTATIONS = /* @__PURE__ */ new Set(["woman", "man"]);
@@ -2466,23 +2495,23 @@ var PRESENTER_ANGLES = [
2466
2495
  ["ref-04", "back"]
2467
2496
  ];
2468
2497
  var VIEW_FILES = ["front", "three-quarter", "back", "left", "right"];
2469
- function presenterViews(templatesRoot, id) {
2470
- const at = (slot, angle) => ({ slot, angle, path: presenterRefPath(templatesRoot, id, slot) });
2498
+ function presenterViews(templatesRoot, id, find = contentFile) {
2499
+ const at = (slot, angle) => ({ slot, angle, path: presenterRefPath(templatesRoot, id, slot, find) });
2471
2500
  const v2 = VIEW_FILES.map((view) => at(view, view)).filter((f) => existsSync(f.path));
2472
2501
  if (v2.length) return v2;
2473
2502
  return PRESENTER_ANGLES.map(([slot, angle]) => at(slot, angle)).filter((f) => existsSync(f.path));
2474
2503
  }
2475
- function presenterPageFrames(templatesRoot, id) {
2476
- const views = presenterViews(templatesRoot, id);
2477
- const portrait = presenterRefPath(templatesRoot, id, "portrait");
2504
+ function presenterPageFrames(templatesRoot, id, find = contentFile) {
2505
+ const views = presenterViews(templatesRoot, id, find);
2506
+ const portrait = presenterRefPath(templatesRoot, id, "portrait", find);
2478
2507
  return existsSync(portrait) ? [{ slot: "portrait", angle: "portrait", path: portrait }, ...views] : views;
2479
2508
  }
2480
2509
  var PRESENTER_FRAME_FILE = /^(ref-[0-9]{2}|portrait|front|three-quarter|back|left|right)\.jpg$/;
2481
- function presenterRefPath(templatesRoot, id, slot) {
2482
- return contentFile(templatesRoot, "previews", "presenters", id, `${slot}.jpg`);
2510
+ function presenterRefPath(templatesRoot, id, slot, find = contentFile) {
2511
+ return find(templatesRoot, "previews", "presenters", id, `${slot}.jpg`);
2483
2512
  }
2484
- function presenterAvatarPath(templatesRoot, id) {
2485
- return contentFile(templatesRoot, "previews", "presenters", id, "avatar.jpg");
2513
+ function presenterAvatarPath(templatesRoot, id, find = contentFile) {
2514
+ return find(templatesRoot, "previews", "presenters", id, "avatar.jpg");
2486
2515
  }
2487
2516
  var resolvedRefs = /* @__PURE__ */ new Map();
2488
2517
  async function refHash(core, path) {
@@ -2557,10 +2586,10 @@ var STAND_INS = {
2557
2586
  side: ["label", "packaging-label", "detail", "clasp-detail"],
2558
2587
  "three-quarter": ["detail-fabric"]
2559
2588
  };
2560
- function demoProductAngleFiles(templatesRoot, id, category) {
2589
+ function demoProductAngleFiles(templatesRoot, id, category, find = contentFile) {
2561
2590
  const plan = PRODUCT_ANGLES_BY_CATEGORY[category] ?? PRODUCT_ANGLES_BY_CATEGORY.other;
2562
2591
  return plan.flatMap((planned) => {
2563
- const found = [planned, ...STAND_INS[planned] ?? []].map((angle) => ({ angle, path: demoProductRefPath(templatesRoot, id, angle) })).find((f) => existsSync(f.path));
2592
+ const found = [planned, ...STAND_INS[planned] ?? []].map((angle) => ({ angle, path: demoProductRefPath(templatesRoot, id, angle, find) })).find((f) => existsSync(f.path));
2564
2593
  return found ? [found] : [];
2565
2594
  });
2566
2595
  }
@@ -2597,8 +2626,8 @@ function demoProductFacetsOf(demoProducts) {
2597
2626
  for (const p of demoProducts) categories.add(p.category);
2598
2627
  return { categories: [...categories].sort() };
2599
2628
  }
2600
- function demoProductRefPath(templatesRoot, id, angle) {
2601
- return contentFile(templatesRoot, "previews", "demo-products", id, `${angle}.jpg`);
2629
+ function demoProductRefPath(templatesRoot, id, angle, find = contentFile) {
2630
+ return find(templatesRoot, "previews", "demo-products", id, `${angle}.jpg`);
2602
2631
  }
2603
2632
  var resolvedRefs2 = /* @__PURE__ */ new Map();
2604
2633
  async function refHash2(core, path) {
@@ -6202,12 +6231,1076 @@ function shotWordsFor(core, brandId) {
6202
6231
  return byHash.get(hash) ?? null;
6203
6232
  };
6204
6233
  }
6205
- var CONTENT_VERSION = 3;
6206
- var CONTENT_TAG = "content-v3";
6207
- var CONTENT_SHA256 = "c736f1f9142bc428e19bb80bc139c2d9e60a9dce7449b322760ffe8df333b734";
6208
- function archiveMatches(bytes, expected = CONTENT_SHA256) {
6209
- return createHash("sha256").update(bytes).digest("hex") === expected;
6234
+
6235
+ // src/content/pin.json
6236
+ var pin_default = {
6237
+ version: 3,
6238
+ sha256: "c736f1f9142bc428e19bb80bc139c2d9e60a9dce7449b322760ffe8df333b734",
6239
+ size: 154306148,
6240
+ files: [
6241
+ ["palm-shade-garden.json", 52, 537, 8, 1075, "e31779ff8980ae0e6fe02724c54e1bbc972965caab4274ef08bc7c8f0adabb6c"],
6242
+ ["lantern-room.json", 636, 526, 8, 1041, "107b52bf5dbddee06de40f2be3307ca261c4793f4ddb8dbd9f9c14422dd3b61c"],
6243
+ ["studio-glacier-ice-core.json", 1220, 632, 8, 1375, "062191d27014b3955e65604ab5a3eaaee44d4e179cc6ac94c0e22c8847a2a301"],
6244
+ ["succulent-dew-bed.json", 1904, 570, 8, 1206, "d672052887ed0b6414644adb74fe72617f1368c2c23b04920fb430d2abf19284"],
6245
+ ["clay-court.json", 2519, 580, 8, 1113, "492a1473005cead589d96a9ade377e0ee9ca9d8f3378bb7e8bdc8479e6ae8b3c"],
6246
+ ["red-light-blade.json", 3149, 531, 8, 1053, "0f5005433baa03cc5644ca6c357ef0bcb70e0a0500134784d8edd1e1a8fb0452"],
6247
+ ["block-tower.json", 3726, 641, 8, 1269, "00d17c07be7824fe6c0823b0af5dd7e5f340604db55f89b66146a3aded3fd793"],
6248
+ ["pink-ball-pit.json", 4415, 533, 8, 1037, "79a76e05c979a7afdc171fd8007599bbd1e1682841e77f75329aa1c17d4252ca"],
6249
+ ["chrome-bubble-warp.json", 5001, 689, 8, 1415, "3cd17086c02eb0dfd5ebd1a604653bb12f7dd6a682f99e3645b983ef5348fc01"],
6250
+ ["paper-garden.json", 5737, 624, 8, 1279, "ee2f7e0e05b7a11aabcbf822318dd85b6feb5617036f6215f0b5cf1f00344180"],
6251
+ ["waterline-caustics.json", 6414, 593, 8, 1176, "cdcc9da4097fed71b1f3083c898f0fec04d56f3535dddea517cf349c0723e9e6"],
6252
+ ["travertine-window-light.json", 7065, 565, 8, 1146, "f0cfcd10f3f1bdd3744632a5c72512326feeffbbb3c87310a8a099c5704e0079"],
6253
+ ["studio-boulder-gap.json", 7683, 621, 8, 1305, "d9c595710257a7b894d69ade75784e63c607c533416fa0ff040385b0db725a73"],
6254
+ ["foil-tent.json", 8348, 533, 8, 1055, "b82e5d00bbc5bda2c256fb2921b0efdcb885f82751c885850cdedd15f87d972e"],
6255
+ ["painted-canvas.json", 8930, 548, 8, 1122, "b5270c0e4bc93b5ee9ec97311d141bc166f2955eb543f11dde5aa3f3f72b0636"],
6256
+ ["teak-bath-caddy.json", 9528, 557, 8, 1107, "9fc4c43cb3dc1e1a8227dae701f8a8aacbd2fd148c705aca9a5ed09e98b5059d"],
6257
+ ["linen-morning-room.json", 10138, 617, 8, 1223, "777c72ef4633b1834ce5a6e0410f907e79a3210049463c0e280aa0d209eced77"],
6258
+ ["green-tyre-stack.json", 10806, 547, 8, 1082, "715e560da3a3ce08710e489763c4eb4725c09be77a2eb27b9bccb6ad539a28c2"],
6259
+ ["balloon-knot.json", 11400, 597, 8, 1177, "c0ce5db9d5cc784c69eeb8cbc30afdfaeb6b33af743d92916b029d250642f6ec"],
6260
+ ["laundry-line.json", 12044, 529, 8, 1018, "4d255e9d3247bdfdbf210b947a84d78c8bf9b28a3df82d15791c1ae08f89d6e6"],
6261
+ ["presenters/helene.json", 12666, 442, 8, 815, "7a9141833f5e2a813bc85733872a236b809a1690a96b29376a2656b38360a42d"],
6262
+ ["presenters/elias.json", 13159, 442, 8, 806, "76f606b142b8943072bfc20cde0e58204a028173966cf85df8619388c44866e9"],
6263
+ ["presenters/kwame.json", 13652, 502, 8, 930, "c6fac417c52457e809d720a2c1078bae1c77ba812ddca873d9e56d9742a8dfd6"],
6264
+ ["presenters/anton.json", 14205, 535, 8, 985, "5cf87162d9723218d55ec7f8932f86422acd657644522cd5a49f90456ba49f42"],
6265
+ ["presenters/finn.json", 14790, 526, 8, 991, "63e9b1ee802ac4508dbce27bd8e32e5edf8ca80076422fee0e4bfe1044c775ae"],
6266
+ ["presenters/amara.json", 15367, 455, 8, 831, "fa2b75e15d6e1929d105c65926740708c1cfaeddd783223b1bb51eaab13abf77"],
6267
+ ["presenters/paloma.json", 15874, 459, 8, 842, "5fe7069c49e5219b007c67e8194f29c7fa7536d427a18a7566f26a77c0a19b9f"],
6268
+ ["presenters/zuri.json", 16383, 515, 8, 968, "378190a88572e614ce6d5c60a445a26ff58f9325dc22c0acc6db36b83af03ae9"],
6269
+ ["presenters/maeve.json", 16949, 540, 8, 1001, "e4ab1cefdce7b5ff2f30cd3f40327d4d4f6d4d9451b6f29b08cdb89b9c7524b6"],
6270
+ ["presenters/leila.json", 17540, 546, 8, 1028, "fba30145ccdb1658f4179ab14990213ebdd1bb279b7a9478b1ff1959898efdcc"],
6271
+ ["presenters/ren.json", 18135, 436, 8, 815, "db3e9f161dc80e8227d15904b06fcf937fe7dc8437a6b08f7971256d4209530c"],
6272
+ ["presenters/luz.json", 18620, 567, 8, 1048, "9998c51da642e56c683a0b100653dfb0dc0cfabedf5af9c4a25bb94b86472d72"],
6273
+ ["presenters/nico.json", 19237, 502, 8, 945, "19a607cb7e9e0e7d237e2cdf1b89886d72394a6cea5292e6db10ed6856d2fafc"],
6274
+ ["presenters/odette.json", 19791, 533, 8, 996, "2145546b7f7f106750f654480ad85cf8604f881e31df31e7131aee80c344e52c"],
6275
+ ["presenters/soren.json", 20375, 528, 8, 991, "12e9e668e2cadbd61aba18b1139e331c26832af999194d6e227e4f6d59cbe8fb"],
6276
+ ["presenters/tove.json", 20953, 523, 8, 955, "a72f210bb37ea08cecb218e677817a96146e3f044c956d8be55da880691b4d2d"],
6277
+ ["presenters/anaya.json", 21527, 518, 8, 988, "8459642f6c1ad7ca82a9ca87f7dfa237caea8bee553fbd16b359f3f392f01f3d"],
6278
+ ["presenters/liv.json", 22094, 460, 8, 882, "803e0d8c2a79200f38cb0e200471fc7b7bf5cf1f1858c52fbe2c595a5d80c695"],
6279
+ ["presenters/yuna.json", 22604, 450, 8, 818, "775a07438893842b6a65fe697eee971bffa96bc15aceda66f14c915b7b6889c0"],
6280
+ ["coal-blind-light.json", 23105, 574, 8, 1167, "e67005a33ddeaeed873bb8fc99598bc868b6efba2d5d03e335b8f1676fffe888"],
6281
+ ["chalk-steps.json", 23725, 545, 8, 1112, "c35aad6b0910fe539cddcdb24b8015fa0feb3134985255611189c9251afa0bdd"],
6282
+ ["sand-mound-spotlight.json", 24325, 589, 8, 1224, "2caa694c69c1f9d13072e1d2b9718116a5ac41ee72e288d1938a253edf606d20"],
6283
+ ["hand-studio.json", 24960, 577, 8, 1107, "e2f9aaf5f0e7cdb2615102992b71f1596577f9784dac98972b57446706ff2e98"],
6284
+ ["hair-nest.json", 25581, 631, 8, 1201, "b716e3048979dd74e787436b262b575690a2a0fb1f09fd5b443781e304de7d04"],
6285
+ ["beauty-dish.json", 26258, 552, 8, 1087, "3f918c31fde908efa2a86679e2dd294eca0d7431363577ddd58fce13f0d5f3fc"],
6286
+ ["tight-corner.json", 26857, 550, 8, 1105, "48e6c798d22677e2a0009be20ff74203c0e5154d6cf870f1a19ce42283f23e33"],
6287
+ ["model-village.json", 27455, 708, 8, 1373, "40219c49202e0ea9d366ebe8af7e8d8839e1d36fa28f9b09b4d2735322fc0b36"],
6288
+ ["conversation-pit.json", 28214, 561, 8, 1155, "fd1ac7d2d2550f837f0bba3230ef33515a425cba9c2cda3aa5876e6cfcfff35c"],
6289
+ ["demo-products/verity-stone-dome-hoops.json", 28891, 495, 8, 1046, "09f345b18e036484a1fa63a0b694184519204cfde9732d0225f4619e97677679"],
6290
+ ["demo-products/voss-rowe-ridgeline-trail.json", 29460, 746, 8, 1664, "c920603ef550bab0d74ea9e705386a9a17393aa6db881a3b34a44e58377b86c4"],
6291
+ ["demo-products/harlow-made-fig-vetiver-wash.json", 30283, 633, 8, 1373, "f4925068951d0d9453886ba324090d3623cf6387bb53e73f4c1011933a0dc04a"],
6292
+ ["demo-products/dunmore-kerr-cricket-jumper.json", 30992, 749, 8, 1647, "c39c3aa5ac048107cfa59663abcdb7bb45b932d6236947d64060b9f49abaaeb7"],
6293
+ ["demo-products/moss-larkin-oak-lounge-chair.json", 31818, 483, 8, 1060, "9553a1b6b53093ea279405ae08783a517828b72be91b8bcbdf4ffb95cb59eec2"],
6294
+ ["demo-products/rowan-ash-bowler-bag.json", 32370, 609, 8, 1330, "aefd5a08603989d3d91ecd0a98c1148745b4fc37d2c35098f0160be1f2a40cfe"],
6295
+ ["demo-products/marrow-vale-noir-cedar.json", 33050, 625, 8, 1363, "c7ffc24982b0313abe51f0a548f153f1ecb4c4de98864b85ba182920cb1af651"],
6296
+ ["demo-products/hollow-reed-sleep-gummies.json", 33749, 620, 8, 1395, "d47eb1bad93dd2d17b3d0adef93e86b1070a1b77daf504dbc9616e7a3ca223e9"],
6297
+ ["demo-products/marden-cole-square-acetates.json", 34445, 610, 8, 1446, "f19c475f3c9ee546c0cdbca6fa0864848afebabe10f850202ffc61de357c5e28"],
6298
+ ["demo-products/verlaine-salt-orris.json", 35123, 756, 8, 1680, "3e9e89c7d468bd29e24e78e3131bdc137a2e988b8f758f4cb7d6902ca81fce43"],
6299
+ ["demo-products/brixa-yuzu-tonic.json", 35944, 646, 8, 1419, "e59ad25446243e2e08a5292eaa066f573835721f401ee70a4cbcd5580df863cc"],
6300
+ ["demo-products/fenner-ross-aperitivo.json", 36660, 807, 8, 1808, "9324a8ba6b893243cb35acfb920cb884119afe3158c6d3aad6c179fabf683a81"],
6301
+ ["demo-products/birch-hollow-fig-leaf-candle.json", 37544, 601, 8, 1328, "67d5198052bc96a4e2a79b6f90e28d7b7ac24ad096c96f8978b670a823999035"],
6302
+ ["demo-products/ossett-hume-capsule.json", 38213, 759, 8, 1674, "ba6ec93106dd8612fea2f620c46381d8e30826f77e2812db37d10b4ed0766531"],
6303
+ ["demo-products/fenwick-slade-barrier-cream.json", 39048, 667, 8, 1446, "3431aedaf94ce839e7306c5364fb476b9ec044192693df8cebe6bd6e7e62add9"],
6304
+ ["demo-products/carrick-stead-chug-710.json", 39786, 736, 8, 1627, "07b5936181420cc21aaa08b4a6c86c23bc9d9bb17086a392dfbcb951330bfc37"],
6305
+ ["demo-products/pellow-hibiscus-soda.json", 40591, 615, 8, 1407, "1c6cd814a3eb318d584a9b08833ba231f15673f1af7bd56d32ca48425b75c61c"],
6306
+ ["demo-products/lydford-forge-24-casserole.json", 41281, 713, 8, 1590, "fe90291e22bbcdf93a38a3dbf55d5eb45676d2c9ad5212d2b2b2885774dba082"],
6307
+ ["demo-products/ottery-lane-72-dark.json", 42062, 757, 8, 1723, "1dc17eb235f06cb5428d6bb3b33e08afacf411f6dc357fa4f4f4e54c2d01bb90"],
6308
+ ["demo-products/halden-bay-spf-50.json", 42885, 657, 8, 1453, "16dabd4a232fa6d157dc808abbae85132ca673b39d1df5b9025d94db2bdf832d"],
6309
+ ["demo-products/slate-harbor-cropped-puffer.json", 43618, 618, 8, 1351, "f66d7abc008e1c7da6402986624f4678f8d036df671c3eeccb040f845b4d6fb0"],
6310
+ ["demo-products/nordhavn-over-ear.json", 44302, 574, 8, 1300, "b637f86456f69eb84b96a9eaa78f51218abd390ebca1e2b3a415872d3e728213"],
6311
+ ["demo-products/tanner-fielding-collagen.json", 44949, 626, 8, 1329, "e8d6cc0ddd7e16c4ca2df1ea15528d6b5ce95f438dee925f5d48aea924fcae4e"],
6312
+ ["demo-products/ilse-varden-scarlet-11.json", 45646, 779, 8, 1786, "69165cf6328af8777be4ca335806f6847e3973bc8d7c963ec4a686603f825ca9"],
6313
+ ["demo-products/orchard-oat-green-04.json", 46494, 617, 8, 1343, "649cf2f0e77f50ae75ae94f284107c2fe9e2486894e009695d2bc93c2deffbc8"],
6314
+ ["demo-products/calder-vane-c15-serum.json", 47181, 661, 8, 1535, "183a791b57f32a1c223e5759d5810fdec148f17db867c30aafd7d5dbc0675726"],
6315
+ ["demo-products/aubrey-lisle-court-72.json", 47912, 776, 8, 1780, "decad54b4bcb28a9793a5116e4071c4cea06903c128a9217c63fbfe8ac61d54a"],
6316
+ ["demo-products/oswin-hale-open-buds.json", 48757, 785, 8, 1838, "e38150271b7102bba2f8cf03d668934aafecbff1cd4112b3cb5f4ff70e857d53"],
6317
+ ["demo-products/aldergate-field-38.json", 49609, 809, 8, 1828, "b8580ece1576bab38eba171a7f05615e4f7d0c35f4711758f137edf66b6902f2"],
6318
+ ["demo-products/maud-ferrers-sun-coin.json", 50488, 591, 8, 1318, "f2ea98ce8acd5ede4fb20cbff4e0417b466a5fe1aabc46f5c0248adeb7796984"],
6319
+ ["martini-hour.json", 51126, 566, 8, 1096, "32f3bd398b0c275ba2dc3f3c2d618cb81da91f63910ac56df1a5f9e591828d30"],
6320
+ ["tomato-vine.json", 51738, 579, 8, 1154, "aab2fcc48b42708bc8110aa81cef5024512c500440e836771a6a757087b8aaf9"],
6321
+ ["sunlit-color-field.json", 52370, 661, 8, 1308, "68bbc566cd948ef83bf4e2fd49383d501bd66c879c99987fe85bde8525e15518"],
6322
+ ["glass-block-room.json", 53082, 557, 8, 1124, "fddfcf002306ac5d4997faf642b6d0d90665e2fd56d783ea66cd481ace097c7e"],
6323
+ ["previews/martini-hour/ref-02.jpg", 53792, 349848, 8, 350661, "832e8057120ff2e10508fc81427fd0d49bd72764964021b1aca8409a9dedb84a"],
6324
+ ["previews/martini-hour/ref-03.jpg", 403702, 210982, 8, 213165, "169e14ba8666b3d2911e77a0a20eed525e1caa3ed3924b91c4a5e9a98bfc9a79"],
6325
+ ["previews/martini-hour/ref-01.jpg", 614746, 351022, 8, 351619, "6831c29fca33729fbd5e3d04d6c87b9366081ae1c9b550d1d152a93c49b60e98"],
6326
+ ["previews/martini-hour/ref-04.jpg", 965830, 392143, 8, 392932, "70a6119e63b96dd86a19d310866017ba2f001290ca9d198e38d7fd8e75a8ca64"],
6327
+ ["previews/martini-hour/ref-05.jpg", 1358035, 362619, 8, 363278, "9915b10e24f977f213d91d0d8b4316c1e914d0233009e275680c3b93bf1089fd"],
6328
+ ["previews/tonal-apricot-ledge/ref-02.jpg", 1720782, 150040, 8, 151585, "57fae1bcaf04079dc604ca6727cfe9cca979ef3e6de73eb0faf80f1a78b4c72f"],
6329
+ ["previews/tonal-apricot-ledge/ref-03.jpg", 1870891, 162748, 8, 165136, "cbb67b05835a9be86d2f5138f8b6034a03bf9af03bc74859b02c0c88fdd27cfe"],
6330
+ ["previews/tonal-apricot-ledge/ref-01.jpg", 2033708, 140106, 8, 142035, "eb4445c8c83d7677b682c1b1fb23d02a482c883e04efe2ac7eeb22aded2a0c99"],
6331
+ ["previews/tonal-apricot-ledge/ref-04.jpg", 2173883, 195947, 8, 197302, "a5290b0d47dad3c6e091350b75fc01622b02c98db60364c989a088dbb67da91e"],
6332
+ ["previews/tonal-apricot-ledge/ref-05.jpg", 2369899, 123763, 8, 126364, "3c7a8e9f1ac73d4e6a5744e91ae4ff3c1de70fb88ef36412679852360eeb8ad3"],
6333
+ ["previews/laundry-line/ref-02.jpg", 2493776, 512467, 8, 513313, "037775c2ed74467467612bae23738e74c11be2a673024c69338034e761c76c64"],
6334
+ ["previews/laundry-line/ref-03.jpg", 3006305, 428411, 8, 428799, "bddac69613e9debcc6b12b83794a1c5cf5f44e6c8fa2533da72c1d2fb9c9bbef"],
6335
+ ["previews/laundry-line/ref-01.jpg", 3434778, 601064, 8, 601863, "2115f7763ea0154833ccdde6483113d9b5fd8b58afbf5f0c9590339144407b32"],
6336
+ ["previews/laundry-line/ref-04.jpg", 4035904, 509778, 8, 510124, "d2485fc9d338c2ab6aad8f196924081c2b2fb9132642429ccf83ec97e2f89660"],
6337
+ ["previews/laundry-line/ref-05.jpg", 4545744, 406672, 8, 407176, "e72ef9fc10ddd45fa59229949bc839fe0a01cdae581627cb06e1f2904abf2604"],
6338
+ ["previews/red-light-blade.jpg", 4952474, 63592, 8, 64523, "339ea2c37cd598ea2207861f86ae71051232eaefd7408be15186eb3ea16fc1ab"],
6339
+ ["previews/conversation-pit.jpg", 5016125, 107505, 8, 107693, "8b499b15da6a5ce372f17741a483f79857e00cb251d92a82aaa93f6b9a0a0c8b"],
6340
+ ["previews/palm-shade-garden.jpg", 5123690, 191985, 8, 192013, "6172faf3e77c35252b9cb7000f79175502aa53215d6ab6c3d2d49bd7a4a69c99"],
6341
+ ["previews/travertine-window-light/ref-02.jpg", 5315811, 474027, 8, 475266, "29537edcd8ca9d47b77b092df32a27061036e9e475a458c41a956181fd97a8ab"],
6342
+ ["previews/travertine-window-light/ref-03.jpg", 5789911, 357374, 8, 359794, "bd4c0d1f05f61aa5d8495745973ec6a693a82425682d57afa0b80d99fceca072"],
6343
+ ["previews/travertine-window-light/ref-01.jpg", 6147358, 523477, 8, 524482, "be7ef8bafc73ef675500cb9dced40d0ece76f1b0ece3a4fc81f40054dae30669"],
6344
+ ["previews/travertine-window-light/ref-04.jpg", 6670908, 461741, 8, 462678, "3d9f62566eb119766cde8205f43044ac9cf21d7da7a27ad11e1bb4895435c88d"],
6345
+ ["previews/travertine-window-light/ref-05.jpg", 7132722, 337504, 8, 339663, "3b36e6944222be4ad6f9463ec32653b0ca7c357bf83a420276827e9059698887"],
6346
+ ["previews/clay-court/ref-02.jpg", 7470336, 655245, 8, 656552, "c959a3da6b355df5c09f2e51ffe86732794f237c17b999d590b59e6a9f1ab5a6"],
6347
+ ["previews/clay-court/ref-03.jpg", 8125641, 278602, 8, 280252, "d0936327a7b5759fa3511eafb4e041ece9c923bb6e68cc7f09226745aa14c90f"],
6348
+ ["previews/clay-court/ref-01.jpg", 8404303, 794509, 8, 796603, "38b606d75c5d210c147348fbea23a71e78ecff80eeffcaef199179af729e839f"],
6349
+ ["previews/clay-court/ref-04.jpg", 9198872, 464184, 8, 464879, "c2b24ca24109657cc2d3f441ceb11245813e1af7cfe7c31c91c6648832aa21dc"],
6350
+ ["previews/clay-court/ref-05.jpg", 9663116, 698230, 8, 698793, "309db8cd7bffa2e1b473e00b703700d90532835dcff6d6c76f7cb764ff8aa753"],
6351
+ ["previews/sunlit-color-field.jpg", 10361407, 47139, 8, 47264, "6b68d870b1ab309cb91b7ec8ecf67db603f3588b0fabbafae4640bc9d445b2f7"],
6352
+ ["previews/foil-tent.jpg", 10408598, 125813, 8, 125855, "fc601dfebcf1e171723c84a6cfbeb5db8370ebccaf0a178772f4ae6f66977fe2"],
6353
+ ["previews/chalk-steps/ref-02.jpg", 10534523, 543117, 8, 544381, "33622b9f6fb3efe8917b497afb355ce860af3a71f3dd61cdee25993ca87dbc06"],
6354
+ ["previews/chalk-steps/ref-03.jpg", 11077701, 309412, 8, 309649, "031c5c65e7731803dcbc70a05c953e9ce2bff90bc2733cbb72a4b77f3ab6fa1a"],
6355
+ ["previews/chalk-steps/ref-01.jpg", 11387174, 607523, 8, 608017, "760541ee03368e47dcdda5634a95356d73d0736e7660a26c99528aff9e5ecd51"],
6356
+ ["previews/chalk-steps/ref-04.jpg", 11994758, 502527, 8, 502942, "e9f3f77c33fc89d4c50bb7ccc1d74070524fd71fa9f74744c8c55241f6a7ddc3"],
6357
+ ["previews/chalk-steps/ref-05.jpg", 12497346, 416975, 8, 417895, "e3efb6d6ceb9a7265835db9ab090f34a020d03f31f11d1ff07fd349ab304119e"],
6358
+ ["previews/sky-color-block.jpg", 12914379, 44907, 8, 45214, "dd4597fd9b7fcb15d5e4bcd1a18fef80c91f064e3bffeee6ea07b6fc8ea81360"],
6359
+ ["previews/conversation-pit/ref-02.jpg", 12959408, 423799, 8, 424754, "8a9cdeb40319fd6f87ff9b67c0553a6453e03605eafa0afdfb5e06bbb540cd6d"],
6360
+ ["previews/conversation-pit/ref-03.jpg", 13383273, 515227, 8, 515978, "a84400c691fab27c0777ddc41223b17ac8be109cf54dd9be2438e07375bffa65"],
6361
+ ["previews/conversation-pit/ref-01.jpg", 13898566, 428224, 8, 429329, "2ffdb4c918b49aae33719f11ca71d430f8f177b246cae9fd8cfb8945af528480"],
6362
+ ["previews/conversation-pit/ref-04.jpg", 14326856, 397699, 8, 398751, "4065a44b426eb1a51419572347a76880bbd4bb2e572c8b565b25e31d2f1d6097"],
6363
+ ["previews/conversation-pit/ref-05.jpg", 14724621, 294492, 8, 295618, "731dece84ccbe7f5d11df580eb163a9e40c5b059ea9945dd8bf71c9281f9ee03"],
6364
+ ["previews/tomato-vine/ref-02.jpg", 15019225, 404540, 8, 404958, "a61302630e9424c7e33dfedf94bacdd632e4923351e0d93f9c4e9b31fbaacb2d"],
6365
+ ["previews/tomato-vine/ref-03.jpg", 15423826, 225763, 8, 226326, "8da783f7ed00eaa072826b77861ab7ee35bafdb04f68bcfac3a6b1a5c13c4bac"],
6366
+ ["previews/tomato-vine/ref-01.jpg", 15649650, 467628, 8, 467799, "0186056ee2a112f69f2985bb3f15e746fa974832b96399f8dec53127433df4e0"],
6367
+ ["previews/tomato-vine/ref-04.jpg", 16117339, 279702, 8, 280764, "af88f8314a382340c2e3157ffb721405b269f3859c4446bae270cdd7ce73a2a1"],
6368
+ ["previews/tomato-vine/ref-05.jpg", 16397102, 457905, 8, 458084, "e7caf6d43f46ab419ffef7892045bd46ab480a65a990d4a6ad6141c6360a0999"],
6369
+ ["previews/beauty-dish.jpg", 16855061, 39336, 8, 39438, "d7d4ce3b9123fcb4a050e5b9cc41b76faf7e323d4b3256ebcc42f2a7eff451cc"],
6370
+ ["previews/balloon-knot/ref-02.jpg", 16894511, 277794, 8, 277975, "44eed05fea391e3cf03e939f1c8e10095a7bf6baffd647ca85735d977d2fd3af"],
6371
+ ["previews/balloon-knot/ref-03.jpg", 17172367, 261356, 8, 262255, "18eaaf3ba20c2f706a400d26e67f20f7672217bdb47c1322b287a64d85378dff"],
6372
+ ["previews/balloon-knot/ref-01.jpg", 17433785, 249871, 8, 250261, "973cc3a027f2105487b7b30607a67f96b8e5fd877258d9ba40b950f9b6e0ee05"],
6373
+ ["previews/balloon-knot/ref-04.jpg", 17683718, 237373, 8, 239047, "35731e26cf1be0b094b8487526eb53d7e47bbd577d5e869830c30b3b2a8cb2a2"],
6374
+ ["previews/balloon-knot/ref-05.jpg", 17921153, 185778, 8, 186534, "68d020edf643bc509ca92f98ddcb6d726beaa9229628abd39e3876b7903099a5"],
6375
+ ["previews/glass-block-room/ref-02.jpg", 18107053, 476607, 8, 479347, "883d5372e1c74d99f20718129803f7a15a9d43792ef1dcb825a46e583613e507"],
6376
+ ["previews/glass-block-room/ref-03.jpg", 18583726, 323370, 8, 325851, "4fa4823e823afe2db70e1daf6746e8f8a4c0c36a337c766ac8d0bac2f6e45224"],
6377
+ ["previews/glass-block-room/ref-01.jpg", 18907162, 459239, 8, 462667, "461864d212021f0838ad6d7b268b79876e0a649e0d47fc843593f7eed84cf628"],
6378
+ ["previews/glass-block-room/ref-04.jpg", 19366467, 432747, 8, 434509, "4c6c3bf2f2b8e27d6ed175fb4e59e21653347a14c240122e5f1e815c0ca12291"],
6379
+ ["previews/glass-block-room/ref-05.jpg", 19799280, 441630, 8, 442428, "b2a088ed9e6e965711f8d766471f723e599fcc5a3250babff4a7eaa6d333a0bb"],
6380
+ ["previews/block-tower/ref-02.jpg", 20241022, 258379, 8, 259405, "5c63bafc0d03b269ffb701cb81fcabe2622869f4a0b9512a4ff1b66e92021629"],
6381
+ ["previews/block-tower/ref-03.jpg", 20499462, 352876, 8, 355924, "1a7a18404b5dfad05bcb001c7c9fcd1b7f0274ec04a2e50dd992794162a31253"],
6382
+ ["previews/block-tower/ref-01.jpg", 20852399, 240226, 8, 241258, "4f0cdb4361c3c6c1ea0687bdfa3a4338be7c56053c9950a95c2f54b2ed1b84a1"],
6383
+ ["previews/block-tower/ref-04.jpg", 21092686, 261590, 8, 262316, "c7a763697a271f9d3f61ba09f8661de515bacdf2ecaf24fd4043734387089e63"],
6384
+ ["previews/block-tower/ref-05.jpg", 21354337, 245804, 8, 246910, "fe604dd4f7ebe0f3a8c62cf0525234b9d5fac66885424dc12fa5e28e8cfb9cc5"],
6385
+ ["previews/model-village/ref-02.jpg", 21600257, 694391, 8, 694863, "0b8c12629171595b05522cf58b7acc3178a30581d596ee917ce0dc7189775461"],
6386
+ ["previews/model-village/ref-03.jpg", 22294711, 418731, 8, 419719, "8e67373eec869f8619fd0960a11d33179441510ad09bc7ae500f4ceddc907d54"],
6387
+ ["previews/model-village/ref-01.jpg", 22713505, 735207, 8, 736092, "8cc7811dd7234ee8eb3de5bad249244cfb1f05696e38bdc25e64db77d8662a00"],
6388
+ ["previews/model-village/ref-04.jpg", 23448775, 897756, 8, 897852, "771c9201481b7c8b4c73368701ac54e5a7e5bce82afc96e5d1d6737d14c1becc"],
6389
+ ["previews/model-village/ref-05.jpg", 24346594, 857633, 8, 857764, "cdbbfa23f9f71bc903bc98c67c723331261e40694400482f6a31419dbc4fbeb0"],
6390
+ ["previews/sand-mound-spotlight/ref-02.jpg", 25204357, 214874, 8, 216253, "c6e345176975fbf30a0d55f579100946842818b813babeb8eadaca358364a4f2"],
6391
+ ["previews/sand-mound-spotlight/ref-03.jpg", 25419301, 234501, 8, 236275, "15070cb25fd546742972b40242f1afdb7c7587180875cf5a962f46654f251323"],
6392
+ ["previews/sand-mound-spotlight/ref-01.jpg", 25653872, 175937, 8, 177517, "29eeb87c9370a25f41f0c76ac9f0cd9caa2ce955e4bf252fb52b20d3dce6cca6"],
6393
+ ["previews/sand-mound-spotlight/ref-04.jpg", 25829879, 310166, 8, 311666, "b68338c77f6cae52aabb48649db0f03727344a94f5a9a5669bc428c09371922e"],
6394
+ ["previews/sand-mound-spotlight/ref-05.jpg", 26140115, 174561, 8, 176235, "4980c77954047c0aef5852b1e00de8f5fc938bd0840280e2e3d1111cd69f3c8b"],
6395
+ ["previews/succulent-dew-bed/ref-02.jpg", 26314800, 510169, 8, 510342, "2be277cb6690e5c48625bc9008b557013c7cc479fe8739d2deeb000bfff5ec49"],
6396
+ ["previews/succulent-dew-bed/ref-03.jpg", 26825036, 396814, 8, 397448, "f7c502bc1c78952c762754642087a8586473c36b03647128fa330f650d58dcee"],
6397
+ ["previews/succulent-dew-bed/ref-01.jpg", 27221917, 510962, 8, 511175, "78fc251a378b668632ac624cefda5d371e902730703780826c27204d8c664ef3"],
6398
+ ["previews/succulent-dew-bed/ref-04.jpg", 27732946, 440034, 8, 440247, "6de810a5ca9ff404aba3ffe13a93858ebed1bbbf09b6be74bfded03a260d4cd7"],
6399
+ ["previews/succulent-dew-bed/ref-05.jpg", 28173047, 516994, 8, 517171, "133575360204e2534ae1f05eff787bc90b4dbdebfa565aa738223bfa785d7522"],
6400
+ ["previews/ruby-syrup-pour.jpg", 28690099, 93419, 8, 93481, "19a12d88beda577da92033a73b13a9502ffdbe91bf3e0c7f34e18fe43abf0e77"],
6401
+ ["previews/chrome-bubble-warp.jpg", 28783579, 102926, 8, 102987, "91c693701d0478e2f0007fb75664f296539bfffd16821de1257a08a56485fa7e"],
6402
+ ["previews/studio-soft-horizon.jpg", 28886567, 131004, 8, 131062, "f37df0217de280053e82a2e094e21f2426afee960af9c2b0db03723e28b8fed0"],
6403
+ ["previews/studio-boulder-gap.jpg", 29017632, 207521, 8, 207568, "9cc80d26131db407c0803900ff4525e11e64cdd67a73f98d02e509c304a36aa3"],
6404
+ ["previews/shadow-hand/ref-02.jpg", 29225265, 445532, 8, 446334, "6a5ad192a238e5cd2837bb6e9c60fed36f74e0966d22e30192b2efc55950fe42"],
6405
+ ["previews/shadow-hand/ref-03.jpg", 29670858, 253387, 8, 255328, "b628aafc56ae0f1a01f12f065d0f29245a52968025674baa8ae88d70ba6a41c1"],
6406
+ ["previews/shadow-hand/ref-01.jpg", 29924306, 456118, 8, 456785, "e2b4656694dcded4da66ff56e32e9ac6516258a01c140def85b4cbc5d1b36d6e"],
6407
+ ["previews/shadow-hand/ref-04.jpg", 30380485, 437307, 8, 438138, "09a49167bd488ee10c941b7097be79a9018f37b716f8c44488dbbc75e93bd4c3"],
6408
+ ["previews/shadow-hand/ref-05.jpg", 30817853, 431534, 8, 431761, "1e6d5b87a683ce066b6fc5d055008400b8b9262431b59e4f965fc97ddfd25d37"],
6409
+ ["previews/pink-ball-pit/ref-02.jpg", 31249503, 388409, 8, 388705, "97dc8e1d0e55ba6600e4b86979fc10d8e157e2911a46904d4e16a4a4d494b384"],
6410
+ ["previews/pink-ball-pit/ref-03.jpg", 31637975, 275278, 8, 276215, "33a38c005b2a9cb27e32c692f36f7d52942f3543f7ee73a6983c730283de27a1"],
6411
+ ["previews/pink-ball-pit/ref-01.jpg", 31913316, 371658, 8, 372029, "5606bf900847efe24db9861026a0616284ba7fef04c90ac5fa3f5084f28edc66"],
6412
+ ["previews/pink-ball-pit/ref-04.jpg", 32285037, 412704, 8, 413256, "11d7bf4ddda6d4eb00d6fa52d8f5760ec86d7d424e6670ceb5224e70ebb65e90"],
6413
+ ["previews/pink-ball-pit/ref-05.jpg", 32697804, 214318, 8, 214782, "e5e9ea7b51b847997510d1b9a92ef85c4b4fbdb17fc0a0ade1efabdd2c8a5d58"],
6414
+ ["previews/waterline-caustics/ref-02.jpg", 32912248, 371965, 8, 372777, "6b8527012f7f2734eef4c42bb32def9a4734122421deb6a653aa506137960906"],
6415
+ ["previews/waterline-caustics/ref-03.jpg", 33284281, 186605, 8, 187786, "f03efc2f910c23a8a82bd047b43fb332827fb08d28da92f889f2ec08cadd09ce"],
6416
+ ["previews/waterline-caustics/ref-01.jpg", 33470954, 457072, 8, 457894, "ef94b40f91880d51f9f7fc7183c5ddd87353dc04951fbb85984911c8c60b8ff9"],
6417
+ ["previews/waterline-caustics/ref-04.jpg", 33928094, 431802, 8, 432087, "e574e1f5e458d4a64fb89be33ce57a4c2946056df59014edd55d2d57299ed999"],
6418
+ ["previews/waterline-caustics/ref-05.jpg", 34359964, 414749, 8, 415036, "e97479bd050347dcdc0dd97e268eca9e38553899d0cfb01b87922b7e053d16af"],
6419
+ ["previews/balloon-knot.jpg", 34774768, 92563, 8, 92613, "1c6f34218e3c51b45916e20a1b16efcf3da7d30e0d371a6de37490b244c2966c"],
6420
+ ["previews/pink-smoke.jpg", 34867384, 74589, 8, 74633, "38e820f4fec3a3eca67779af3251d2b522f8374804d98042c93e10929f93b344"],
6421
+ ["previews/studio-soft-horizon/ref-02.jpg", 34942101, 460882, 8, 461444, "828dd5dfe461fa0387eb07b3d408dc5302a859477efedace1f044a91df3c9a78"],
6422
+ ["previews/studio-soft-horizon/ref-03.jpg", 35403052, 447140, 8, 448671, "02748d331b1d9ebf9231ed76ac26932ed388148904f9225f05635b5795cd6f03"],
6423
+ ["previews/studio-soft-horizon/ref-01.jpg", 35850261, 486296, 8, 487207, "239bf21bcc251fd3e2b2ddef6ae269dbc172f71f21f39b9e53de036e35232568"],
6424
+ ["previews/studio-soft-horizon/ref-04.jpg", 36336626, 468385, 8, 468848, "eb4820f68bb736ce88fd30df841d1fba6b759d3d8eefad1c9c4284af32770ff6"],
6425
+ ["previews/studio-soft-horizon/ref-05.jpg", 36805080, 572347, 8, 573076, "8c0cdb25fda3674a17ab373c8af97411d8a5ad0c34bbf9b2080bf03912277a2a"],
6426
+ ["previews/sunlit-color-field/ref-02.jpg", 37377553, 175090, 8, 176138, "cbae2b7bcc42cccb3beddab5cb167193a97b7bd7f026b744b8262b1632823090"],
6427
+ ["previews/sunlit-color-field/ref-03.jpg", 37552711, 229056, 8, 231849, "9a9963283d0edcc0ba3bfbe8ded69fdaec87ec13918ea7ae4d586abf63a09a9c"],
6428
+ ["previews/sunlit-color-field/ref-01.jpg", 37781835, 208666, 8, 209407, "2e172bd4e0b6fbbbf9604f0964d3e970ae85867ee1ec5601ec2e3642f2f1002a"],
6429
+ ["previews/sunlit-color-field/ref-04.jpg", 37990569, 177734, 8, 179091, "2e20c75387239de718e029ad92d2f688b0ba0ac2eaf2cd47c6fe9cf876f56748"],
6430
+ ["previews/sunlit-color-field/ref-05.jpg", 38168371, 166246, 8, 167742, "08d871f72c5b6f20074c8da770278790ebc093712cecf730b1ee6f7500e409ac"],
6431
+ ["previews/sand-mound-spotlight.jpg", 38334680, 91441, 8, 91665, "7e43d037eb2b714b895e255c2f4bcfe3bf1f264b3d1dc990400a0608d5907380"],
6432
+ ["previews/white-glove-tray/ref-02.jpg", 38426243, 320272, 8, 321276, "170b39a9496da241af56427f9b4953ee24c82d5f87dbbba68af8e191e5f576d7"],
6433
+ ["previews/white-glove-tray/ref-03.jpg", 38746581, 283655, 8, 285727, "c2a1a0298a71cfaa00f32162bd028c3372c25ebb83fb2cbfef6c83a20d2c44d9"],
6434
+ ["previews/white-glove-tray/ref-01.jpg", 39030302, 311729, 8, 312442, "c003b2e4369abab81050a94b91fc0ee4aabd702b4678b1d55a042b98ec24e315"],
6435
+ ["previews/white-glove-tray/ref-04.jpg", 39342097, 300317, 8, 301233, "46d7372ca8b679672cc10370728878f49b99c335d22855daa5dd8972a786ed1d"],
6436
+ ["previews/white-glove-tray/ref-05.jpg", 39642480, 243464, 8, 246642, "97a8ba7b721af249701b880903c450c426e7e57bfb99b7b398631460a7926403"],
6437
+ ["previews/teak-bath-caddy/ref-02.jpg", 39886064, 490961, 8, 491046, "f787393715df513a6082fb1cc7eafb3512d35da83729f1c5f52bf25328c45241"],
6438
+ ["previews/teak-bath-caddy/ref-03.jpg", 40377090, 202669, 8, 203615, "4a020a3894e5e0c4a09dd4e67ebce91ed22b81e97c10186736eea914e0c7df0e"],
6439
+ ["previews/teak-bath-caddy/ref-01.jpg", 40579824, 467440, 8, 467770, "3e386701dd404188e6e623148f91af2021645b68e514bff9566c80d70257ce95"],
6440
+ ["previews/teak-bath-caddy/ref-04.jpg", 41047329, 453447, 8, 453962, "8df5a3c7f4dc687ab20bf97c4af8dc9c094468b4c4d8ad4491ffa17227e5469c"],
6441
+ ["previews/teak-bath-caddy/ref-05.jpg", 41500841, 391818, 8, 393534, "9968ec2666e2188fb29a5819c49246ba2822bc2ba4d9ad35f64acf14b1962036"],
6442
+ ["previews/red-light-blade/ref-02.jpg", 41892779, 264341, 8, 269280, "ed65e2480adc9a0d44ca926a01e28b1477aca7a6702c48032caf680d837c5d51"],
6443
+ ["previews/red-light-blade/ref-03.jpg", 42157185, 325769, 8, 330407, "c50dfcbf6bc127bea9fee77bb3855fdcb215088939a395e7dfc0088207bc3c4b"],
6444
+ ["previews/red-light-blade/ref-01.jpg", 42483019, 134254, 8, 142134, "03c3c635a6884569f107576f5a63d63840a8516dfb9e8dad7397153db81d1b3d"],
6445
+ ["previews/red-light-blade/ref-04.jpg", 42617338, 257361, 8, 261599, "d41ecb12b06f2397a043f8353bc16b7158abbc12aa0c6efc0d33c73af8bddef5"],
6446
+ ["previews/red-light-blade/ref-05.jpg", 42874764, 204822, 8, 207914, "3e2ff82a04006ff1629292c11d09f477b95077927babd917d2ce0ab6b9b5c257"],
6447
+ ["previews/palm-shade-garden/ref-02.jpg", 43079710, 711598, 8, 711702, "f6860762d8fcee891351da11d705a38f3c4c8d353f5d78609586a67b2bf0dc6f"],
6448
+ ["previews/palm-shade-garden/ref-03.jpg", 43791375, 418134, 8, 418381, "7a79a44736d0e75bb87e2d46be59acdc6bf860502178fbe50bc70cb35b3bb5e8"],
6449
+ ["previews/palm-shade-garden/ref-01.jpg", 44209576, 687053, 8, 687183, "2b3bbefd712fd36ff54477f278e77294aef1acd52cc58c5e073bc65607031d1e"],
6450
+ ["previews/palm-shade-garden/ref-04.jpg", 44896696, 532174, 8, 532396, "6bae881aff940ab94fc6cbbbbedef7421c3f6a44eb4ec9a91bb29e74fdf1c500"],
6451
+ ["previews/palm-shade-garden/ref-05.jpg", 45428937, 456181, 8, 456405, "7e3378879fc98b203aca572a7fff932f4243c94fa372a1ee6aeed5dd885b952c"],
6452
+ ["previews/martini-hour.jpg", 45885173, 117809, 8, 117899, "6084859f5703d6d24656736f43505fb98e76a95b68159a73b3357e147bc9ce88"],
6453
+ ["previews/hair-nest/ref-02.jpg", 46003090, 590295, 8, 590395, "fa3d7b199d93376f24c8558714265d723b91bdfcd7dbaf68a042be3816a7f2c9"],
6454
+ ["previews/hair-nest/ref-03.jpg", 46593444, 379480, 8, 379749, "4267f55759af608fa5c77904e5b48c6c354782592a27e73802e3a2e2180feeca"],
6455
+ ["previews/hair-nest/ref-01.jpg", 46972983, 578102, 8, 578482, "bd20b7a54f71dc8374194c3c7b3468dc73d4752380ac8ba7b1f6e73e15f21b0e"],
6456
+ ["previews/hair-nest/ref-04.jpg", 47551144, 436485, 8, 436908, "e564ddc8bcd83595a3947c3e34ff38a836ab44260e8d0edef68ba679a7417510"],
6457
+ ["previews/hair-nest/ref-05.jpg", 47987688, 577346, 8, 577753, "5f7fdabbd5baeb9b036be14245a96e60e63c0efa05a35b84b656f97b1a02a684"],
6458
+ ["previews/painted-canvas/ref-02.jpg", 48565152, 427714, 8, 427957, "87e833bd58f017f6530700e4c351f917f926960635b55e895f8fed8a5c010482"],
6459
+ ["previews/painted-canvas/ref-03.jpg", 48992930, 410278, 8, 412147, "57591032f299b57e6b51d431354226dfef4f4d39e9aaaf611ac6a64c804420e4"],
6460
+ ["previews/painted-canvas/ref-01.jpg", 49403272, 382710, 8, 383807, "070ca77e514877148995d52bb578e7988da384a3ee88c31a6b65c98f94038ca3"],
6461
+ ["previews/painted-canvas/ref-04.jpg", 49786046, 448363, 8, 448609, "bb96cf06cbf76da4ba3e96393a457d9ba77284900dbebbade9eb8d2352a0a43a"],
6462
+ ["previews/painted-canvas/ref-05.jpg", 50234473, 346525, 8, 347981, "09f32201fbad0697e84e1a2a76c889f832175b72404ec22abde015c3871a8dc6"],
6463
+ ["previews/waterline-caustics.jpg", 50581059, 112525, 8, 112592, "c4d4b4fb1cbf725244e66613f1aaaebe2e26bd0ac92f87cf9da284620d5c9874"],
6464
+ ["previews/presenters/yuna.jpg", 50693692, 32608, 8, 32731, "9be3bfd52c1c709f3ba5b9438c307c819167c14a06388cfa830ecdb5a843e88c"],
6465
+ ["previews/presenters/ren/portrait.jpg", 50726420, 279480, 8, 281073, "8a17a6b594ee16ac4ddb1249355b84f3801386fdb4fc67aa5b3f2906443ce021"],
6466
+ ["previews/presenters/ren/three-quarter.jpg", 51005971, 68503, 8, 69817, "0dbc9cb7847a2a9217c7779fb62a03a20b5879850f59e9532021893d86fdee84"],
6467
+ ["previews/presenters/ren/left.jpg", 51074536, 56482, 8, 57916, "de43480bd5f25464f8b02084302e7224357347653f4c3ad89cb6f5c984fdfc19"],
6468
+ ["previews/presenters/ren/avatar.jpg", 51131082, 222105, 8, 223429, "37b27e0749aa6b911cc777c870939be1ecc9cf18c488bd4bf974c43d49030b2e"],
6469
+ ["previews/presenters/ren/back.jpg", 51353249, 83102, 8, 84102, "9938357e508bdc47be13e654fa52af282b5a8bca61549c7d9d79a8580cb49efd"],
6470
+ ["previews/presenters/ren/right.jpg", 51436414, 58467, 8, 59791, "4bd969252c059934b79ed3b1c964dd88edd6d8267135a28f99157e277ec6a323"],
6471
+ ["previews/presenters/ren/front.jpg", 51494944, 78684, 8, 79839, "44a50ce67187abb60d66bd8956fa278b411f902726d7906a63eb23f2c4ba6286"],
6472
+ ["previews/presenters/nico.jpg", 51573686, 47219, 8, 47374, "3fca0946c05df89b36fae5e2cf179cb1d809247c7b1c9a643abdc5278566d59b"],
6473
+ ["previews/presenters/elias.jpg", 51620964, 48771, 8, 48986, "cd5f62413f584cd91af62edf7c01186a25649c7221726921c1c9b2c9f19e6eeb"],
6474
+ ["previews/presenters/helene.jpg", 51669795, 49674, 8, 49754, "1cdf3877b7bc46d32f3f15bae70f1b152450b131de834c8fa51547d9411865e9"],
6475
+ ["previews/presenters/elias/portrait.jpg", 51719593, 308217, 8, 309564, "8afaa0e78d87545d90a7d06ad5f6d12b906be1ef07cf100b9f6218df11602836"],
6476
+ ["previews/presenters/elias/three-quarter.jpg", 52027883, 91927, 8, 92680, "d7b45c9c738185631ac1c01d3e49c3d51100e088b6841b95452efaefbc98687d"],
6477
+ ["previews/presenters/elias/left.jpg", 52119874, 76489, 8, 77515, "410fe4e961e44c937c50f274062be3c3eb1a7923ad49247fd834d0393bcd94a8"],
6478
+ ["previews/presenters/elias/avatar.jpg", 52196429, 236010, 8, 237073, "697823b354541e0cf2f4d87bd9689956aa48488e5ad84e1685b47e3e094d8bce"],
6479
+ ["previews/presenters/elias/back.jpg", 52432503, 97580, 8, 98542, "067d9f674a115cc1ad6c83ab20e5ae03b455951269237cb481f63ea59804953e"],
6480
+ ["previews/presenters/elias/right.jpg", 52530148, 73378, 8, 74417, "8594c1f5f824f9411727c31cea315e403af5032396a4b383de1bd63658edbf6d"],
6481
+ ["previews/presenters/elias/front.jpg", 52603591, 96068, 8, 96890, "e126ca567d743785a3b1e484b1713884faef16efc95700ba148d226e18b066e9"],
6482
+ ["previews/presenters/leila/portrait.jpg", 52699783, 262614, 8, 264307, "d8026fc43b2a29bf04cd8503053b9574841a2659f22ce74255ae1f01d68b4981"],
6483
+ ["previews/presenters/leila/three-quarter.jpg", 52962470, 74917, 8, 75898, "b2bca4f5674e6b604542e66628868e2e13b621022b98ad25d6ad578dc1e1f4c5"],
6484
+ ["previews/presenters/leila/left.jpg", 53037451, 64596, 8, 65852, "6e90ded441b652026e1026ed6e7f85d6ad3557ba4df08347426913162fea466f"],
6485
+ ["previews/presenters/leila/avatar.jpg", 53102113, 186672, 8, 188098, "0622148e5f893c6bc71787d45967e90a03201718917f84177c8ad8f80929a5ae"],
6486
+ ["previews/presenters/leila/back.jpg", 53288849, 88652, 8, 89668, "520511bbbd9a199d70c770b7328f2c2edf231595c25f78264ffdb4065b003699"],
6487
+ ["previews/presenters/leila/right.jpg", 53377566, 67583, 8, 68690, "e4475ef5f8b0457951e19d02ed7fb0cbae1a0ea42956d314d0af0512b80ca724"],
6488
+ ["previews/presenters/leila/front.jpg", 53445214, 87143, 8, 87916, "0ffcd76ec5172c439dd54c8d20937db0caf6c01ad0900a1db3af7bbfa5e8cd99"],
6489
+ ["previews/presenters/ren.jpg", 53532414, 43260, 8, 43493, "b5d29521ae97603d4eeca89142366f3c14fe9cfc27f70c548afd24790415b119"],
6490
+ ["previews/presenters/zuri/portrait.jpg", 53575796, 381758, 8, 382952, "7571ec5d1978f3ba59efa22964de8ca4c3c09ec01e014c41d6d1c35890a2d927"],
6491
+ ["previews/presenters/zuri/three-quarter.jpg", 53957626, 86721, 8, 87809, "11e7fddaf3e7bab8c86899778e8c27cd00b393b735e3f75decd657d37ae93e1f"],
6492
+ ["previews/presenters/zuri/left.jpg", 54044410, 78287, 8, 79349, "8e1cbf098c055c542915145a0b30d60686d4e0a4728e4762629742e2f91f5955"],
6493
+ ["previews/presenters/zuri/avatar.jpg", 54122762, 328445, 8, 329401, "a71984eb363db8bb30fe569f0db5c772b41543cacda2e8594b2ee1bbcddf8501"],
6494
+ ["previews/presenters/zuri/back.jpg", 54451270, 94733, 8, 95798, "d38121b11cf002c2af0dfdba6ce023ad1c8f29b7a470981f331797b72d2baebf"],
6495
+ ["previews/presenters/zuri/right.jpg", 54546067, 64163, 8, 67388, "8e4947ee64bfea7611a2eda3636759c861414199a89174eccf2c2e911ef5614e"],
6496
+ ["previews/presenters/zuri/front.jpg", 54610294, 94322, 8, 95129, "7e59d7de33020510043406156bf1832cd543df0dad9b86d7965dd6e5eb7c2e5e"],
6497
+ ["previews/presenters/anaya.jpg", 54704675, 52764, 8, 52902, "e77114aac957c6fb9277e465fe014d971ce00105555aaad2a0bbb5b9a7ac6564"],
6498
+ ["previews/presenters/tove/portrait.jpg", 54757561, 278721, 8, 280518, "b6e0cc1d2e809d7a26dffa3c33ba8ee5e375093c544487c07fd47322e9f9ea9a"],
6499
+ ["previews/presenters/tove/three-quarter.jpg", 55036354, 94600, 8, 95476, "326ae579ab1f3040c6d14df38b6ba7e5a49c25624a16694869fe447b2bf0d20d"],
6500
+ ["previews/presenters/tove/left.jpg", 55131017, 77442, 8, 78608, "af4f458cdb8e4d7abe2a2becfebe730e2073d6677e84cfd18c89bcc9a5e75466"],
6501
+ ["previews/presenters/tove/avatar.jpg", 55208524, 204720, 8, 206003, "78e0479f6cdc3497d85269df7f77586b673833e7daeb874ae3bfc502badbbb3a"],
6502
+ ["previews/presenters/tove/back.jpg", 55413307, 104419, 8, 105403, "f0364f53aee4e844f47a6848f9fea0d83259dba2f5706d7427100627a4203867"],
6503
+ ["previews/presenters/tove/right.jpg", 55517790, 78053, 8, 79238, "3d642b2a070581aa3f5ab97bc5451e04130141b61b63e4065c92c4cfb652f308"],
6504
+ ["previews/presenters/tove/front.jpg", 55595907, 98537, 8, 99746, "114ba24a4f67107fdfc19783377d74cf1455f496a2571152df038df3047831e2"],
6505
+ ["previews/presenters/finn/portrait.jpg", 55694566, 340218, 8, 341191, "476c2c4833e13c255254ba5bfa984bd44fb1229e1e3394c7e5403b2133235e10"],
6506
+ ["previews/presenters/finn/three-quarter.jpg", 56034856, 96940, 8, 97647, "6fef82bed899e7de19274885ebb077e814b11e58e521d24cf933ddaea9d2262a"],
6507
+ ["previews/presenters/finn/left.jpg", 56131859, 88655, 8, 89361, "8107a9fb6540287c6d4784bdf79284eba0ba30376e6ad9e2d5f44ee4efa3703f"],
6508
+ ["previews/presenters/finn/avatar.jpg", 56220579, 248497, 8, 249488, "021ae0cccb8ce8a4294c09a0fd5960e7f6ef4912985b140e1db56d0781afb713"],
6509
+ ["previews/presenters/finn/back.jpg", 56469139, 116448, 8, 117088, "78bd534a353d13e736b30a66734fd7d118c69f7eb47d0b71824fd7f1f69fa157"],
6510
+ ["previews/presenters/finn/right.jpg", 56585651, 84169, 8, 85010, "37d55cf5466a757c9666626f8c20827784275dec6858bdb4fd7785a048ab8c68"],
6511
+ ["previews/presenters/finn/front.jpg", 56669884, 108605, 8, 109167, "963679f5f70958ed3299d6ff2b0ec1a3061a27c517759a4817a30e352cf4e99e"],
6512
+ ["previews/presenters/finn.jpg", 56778547, 55485, 8, 55605, "81b035d4995bb227bddd52b6a379df994c463255985761ef65ea61705c5059c1"],
6513
+ ["previews/presenters/anton/portrait.jpg", 56834156, 365960, 8, 367532, "0a3e8831ffe85cfe46a7848b07c247f5d1b001c157c1d71a103e1dcb43b4a796"],
6514
+ ["previews/presenters/anton/three-quarter.jpg", 57200189, 96096, 8, 97027, "91942e7845bcd2342dcb51e61f668dcd6cd5c218cafbab5e111b601ef8603648"],
6515
+ ["previews/presenters/anton/left.jpg", 57296349, 78956, 8, 80365, "3ad1eccef1633e3413ba798084e26ac3aaeb4bd0ba48b49bbf84b1b58114e413"],
6516
+ ["previews/presenters/anton/avatar.jpg", 57375371, 271698, 8, 273133, "a6c158a9005ccea6c46f434df5552206ee66d1fdb0d721344c548447d2cda9bf"],
6517
+ ["previews/presenters/anton/back.jpg", 57647133, 98493, 8, 99479, "74174f27ac0e475ae47503726b0eb0378838f01c72e35248752e5e7d42e1747d"],
6518
+ ["previews/presenters/anton/right.jpg", 57745691, 79734, 8, 80856, "52328c74a05564cbb65acc4970de5127df2179e35ffe7302744db475610d62fa"],
6519
+ ["previews/presenters/anton/front.jpg", 57825490, 104270, 8, 105071, "86dd8d631eb07be825b01f236a5276178ecc1a5b1b986c289b9fa3cdde9da861"],
6520
+ ["previews/presenters/amara/portrait.jpg", 57929884, 260579, 8, 262879, "1d8f6bea5eaa86b784af7b419270ed9b4fd9c9161614e7565794e17a615a33d9"],
6521
+ ["previews/presenters/amara/three-quarter.jpg", 58190536, 77057, 8, 77947, "2dc50bf22a196b5baa66ffc688a94de0e916a4ac53c2886fd5b3a9dd6ed863de"],
6522
+ ["previews/presenters/amara/left.jpg", 58267657, 67793, 8, 68985, "a36f49acf91c7ff869a6f4a86847703b74b350c20fd0fed7bbe5e8d544c28133"],
6523
+ ["previews/presenters/amara/avatar.jpg", 58335516, 183545, 8, 184691, "5259b04fc38ef166b707a8ed519605a409ea47c887887ebd99f663774243eac6"],
6524
+ ["previews/presenters/amara/back.jpg", 58519125, 81907, 8, 83616, "7cf5fd1dc82d1f0f98c81b8b56c76364d506947964d1f84b93d428ab8f68241b"],
6525
+ ["previews/presenters/amara/right.jpg", 58601097, 65575, 8, 66867, "77f3436501f7b76afe1f07693bc911826cc5640b7acedd36aa8256c04ceb69c2"],
6526
+ ["previews/presenters/amara/front.jpg", 58666737, 84385, 8, 85378, "3a3b3cc0dbc899089aca51226af37f60d7d4699e3b38fbac72475402656c3135"],
6527
+ ["previews/presenters/paloma/portrait.jpg", 58751248, 249911, 8, 251130, "253192669640cbb66804ce0a4e38cc3e3d09f27b6d7deb7f9348cac64f0cccb7"],
6528
+ ["previews/presenters/paloma/three-quarter.jpg", 59001233, 91744, 8, 92803, "1e0a07687d33b0f88054a4690ceae92be7a977bdcfbdae850ba2425000fd757b"],
6529
+ ["previews/presenters/paloma/left.jpg", 59093042, 82878, 8, 83984, "ab24588f47f4c6363ba830a6a3d80eb19c36729cd91bc3011ab54c70874f8915"],
6530
+ ["previews/presenters/paloma/avatar.jpg", 59175987, 183366, 8, 184292, "b5dea8d7dab4245f4f65d76f7166034bfc4e17d45c46ba06d4b11171c09f11ea"],
6531
+ ["previews/presenters/paloma/back.jpg", 59359418, 99527, 8, 100429, "8d271f40c7effacc771fd547dba682ec2ab81b8fc266e072a6752de81d528dda"],
6532
+ ["previews/presenters/paloma/right.jpg", 59459011, 81095, 8, 82105, "1fd372aa6b2876e4882218ae4adf454c3f35c31c04e758b05a1b5331ea7bace3"],
6533
+ ["previews/presenters/paloma/front.jpg", 59540172, 100241, 8, 100975, "077eaf95771a0638f1a674eb7aee0d2136b9b47aaa0b583cffd4ff8024eca448"],
6534
+ ["previews/presenters/luz/portrait.jpg", 59640533, 380286, 8, 381555, "8ae068971199c7605198fa7952ac65013abd51d687b9d2b81c365a6ebc318c50"],
6535
+ ["previews/presenters/luz/three-quarter.jpg", 60020890, 126587, 8, 127281, "6e4915214269ff2c80a99f7a78a71c214dd403dfffebe94486ba08ab11771cb6"],
6536
+ ["previews/presenters/luz/left.jpg", 60147539, 105096, 8, 106032, "27afa4596983b92d0b2a5abdb89c47b4656574f6b8517561b7ebf666fc9e20fa"],
6537
+ ["previews/presenters/luz/avatar.jpg", 60252699, 316007, 8, 316716, "afa8807134fa9c1c0c284bf142f514217f8c8076a5312a7bbde91a90e047759a"],
6538
+ ["previews/presenters/luz/back.jpg", 60568768, 149860, 8, 150521, "334781257e61ec3d8addbeb2e4359afbd2be355692eeafc6cf39dc26c9fac189"],
6539
+ ["previews/presenters/luz/right.jpg", 60718691, 111231, 8, 112091, "11309b0ef40bc4c411e2db31d1ab83a8da1604b0346525ab0a9b48a32d3fbd37"],
6540
+ ["previews/presenters/luz/front.jpg", 60829985, 133309, 8, 134040, "fa781e34cd1eef60b6b8f626309b8fb7da0ee0d2c3468dc6a629dfefab5f5795"],
6541
+ ["previews/presenters/anaya/portrait.jpg", 60963418, 342996, 8, 344233, "f417a8caa7260ef32d24df91cde27362ffa774a923cc0667460c000b1122e5eb"],
6542
+ ["previews/presenters/anaya/three-quarter.jpg", 61306487, 84086, 8, 85074, "fa4df825c36eb3deda0f31ccd3fb7f3b384d8ab5c43f3f6c5782c6e692f4d16e"],
6543
+ ["previews/presenters/anaya/left.jpg", 61390637, 84185, 8, 85025, "4537ee41259ea962d151db0f208eb08b9885f1a8bbcf13ff0d81644a29e63ec6"],
6544
+ ["previews/presenters/anaya/avatar.jpg", 61474888, 257305, 8, 258466, "43de3f7d431214d6aec31e2a4d52b566378b7a164390149af435a371907ca671"],
6545
+ ["previews/presenters/anaya/back.jpg", 61732257, 99120, 8, 99875, "5d7d9ed1135183a360e7ef83a19fcb9ca05e8b2af549506561b5499b483fda82"],
6546
+ ["previews/presenters/anaya/right.jpg", 61831442, 74883, 8, 75968, "381c171b23b298a014e33f8debb03d92611ba640632e424206a5770dfb28d42b"],
6547
+ ["previews/presenters/anaya/front.jpg", 61906390, 98811, 8, 99495, "df46e4c79795f8f6ac9178a48c7abee2fb9f6bab26bb7a51dc5d5062e76407eb"],
6548
+ ["previews/presenters/odette/portrait.jpg", 62005327, 249980, 8, 250987, "c41b27d716e9094a001469888057b57d9cc6900831d123387c715979b2071365"],
6549
+ ["previews/presenters/odette/three-quarter.jpg", 62255381, 68388, 8, 69420, "98948a3734e9247cedeeb64f9fc159e7f418a9be715a42e33ac74ab4d9edb6a7"],
6550
+ ["previews/presenters/odette/left.jpg", 62323834, 62412, 8, 63931, "f43a72eb80345a4c4c2f3ed281f81f993d655e44b36b70fc15f92fca4fd06a0d"],
6551
+ ["previews/presenters/odette/avatar.jpg", 62386313, 197873, 8, 198599, "01c6c2c0ddada76044abb065cd532822e2bfaaaaf551037b013b713bc6e98c6c"],
6552
+ ["previews/presenters/odette/back.jpg", 62584251, 77988, 8, 78923, "424687c62f1e7bf2a33ec56fe703a8e9cc8fda62373de4ed7c0f3a8e1a93bb5b"],
6553
+ ["previews/presenters/odette/right.jpg", 62662305, 56661, 8, 57869, "d949f066f51fa824eef1b5f031f14c86a2b157cf705bd283a1315c349781798d"],
6554
+ ["previews/presenters/odette/front.jpg", 62719032, 78753, 8, 79855, "1f251f3a2467e2865d88d91103896756cc8b4247f24a56fd2acbc9b4f4b5d2da"],
6555
+ ["previews/presenters/maeve.jpg", 62797844, 65918, 8, 66031, "50fd335a537a951ea2b3cf1c7fdcd8ac6cd07d08512f223fa7126ed6573e6640"],
6556
+ ["previews/presenters/yuna/portrait.jpg", 62863884, 204600, 8, 205638, "76b75225d65be9db9c1ae1a5e0aede74f58c88d9b861d482ea5e4c0f2214dc83"],
6557
+ ["previews/presenters/yuna/three-quarter.jpg", 63068556, 61991, 8, 62915, "7647626e227d0fa274a430726e405e4d5f788d94fcf1c5a46629dba1ed79b275"],
6558
+ ["previews/presenters/yuna/left.jpg", 63130610, 58820, 8, 59982, "166cd54c0adc0bd98eecea05afa9e8c53ca8e9f5ada9e3f54bac5f9fc3043473"],
6559
+ ["previews/presenters/yuna/avatar.jpg", 63189495, 154468, 8, 155296, "55ed55a0e96cf0669880af369f48edefe70b18e2e48546f2a22e785512d80dce"],
6560
+ ["previews/presenters/yuna/back.jpg", 63344026, 74732, 8, 75751, "fa83e130b80971cedb3c5a4e72ad06ed29a185fb3b11126438d3be2926893026"],
6561
+ ["previews/presenters/yuna/right.jpg", 63418822, 54842, 8, 55995, "76199d33ce1fd541a4c83874c8a1189138664f95c2c0daecd242e37433bfe1ff"],
6562
+ ["previews/presenters/yuna/front.jpg", 63473728, 68069, 8, 69171, "62551b2e3f7ff05ffbf7d5ce37a602f02bdb253ed07aace2734ee793a61c5121"],
6563
+ ["previews/presenters/paloma.jpg", 63541857, 41102, 8, 41209, "76a3de2d8b8f8f35f62526b60715a03af1c9beeedfb318440101b1b00189e8c5"],
6564
+ ["previews/presenters/nico/portrait.jpg", 63583081, 297323, 8, 299313, "c3ec9319ba18c1d6d4fcff1abaee46908ca4efb0bd363738c92ac7d11451275a"],
6565
+ ["previews/presenters/nico/three-quarter.jpg", 63880476, 95410, 8, 96512, "b8092c04ccb6d2750e6478690776ed543342c108f985c85e715d4798e0c341c3"],
6566
+ ["previews/presenters/nico/left.jpg", 63975949, 76890, 8, 77881, "4d2fbe4cedfaca5974e68defc7e048afd0b870e7a6360cbc40626b6121ff7fe1"],
6567
+ ["previews/presenters/nico/avatar.jpg", 64052904, 217334, 8, 219115, "58d6e5958332dc364e2fbe5f6b2733bf562b57f3f8447b65a8fc0b4dbf9cbc6d"],
6568
+ ["previews/presenters/nico/back.jpg", 64270301, 100015, 8, 100737, "0cb50ab7453ff9a64c5aca03855e7a36a39b41c5ae5b647c9d46cc0a9fea49a5"],
6569
+ ["previews/presenters/nico/right.jpg", 64370380, 74663, 8, 75822, "27941e013fe65a3ceb8a53517d09ade91f60f9c4be0e0da0933793775bb0fe66"],
6570
+ ["previews/presenters/nico/front.jpg", 64445107, 106572, 8, 107205, "29901d62841e22291630d5287a2d7d8c38cc2a0c59e1f39d30000411983a5c69"],
6571
+ ["previews/presenters/soren.jpg", 64551738, 44368, 8, 44498, "3fbb157eb8f21f696e045743939e552589e175ef22019ee41e5a82a3f9839066"],
6572
+ ["previews/presenters/liv/portrait.jpg", 64596226, 280021, 8, 281271, "5cc65205cccf8d532b3015254451f9d50184f42ac6f992a0a527b6ec9a625d4c"],
6573
+ ["previews/presenters/liv/three-quarter.jpg", 64876318, 81005, 8, 81873, "237ca854890d1e007b02e820cbfb8feaaea3291cfbc344008bc7afa9072c8ab1"],
6574
+ ["previews/presenters/liv/left.jpg", 64957385, 74795, 8, 75949, "0ab92455123e27e2cae760025fec16a7e2b28ad547b4bf7ffeef2784832ec21e"],
6575
+ ["previews/presenters/liv/avatar.jpg", 65032244, 223123, 8, 223922, "5f9b0d605ed573191192eae39e13a1c5b345121b89ba8d3416576d18500dcca8"],
6576
+ ["previews/presenters/liv/back.jpg", 65255429, 89526, 8, 90355, "3f025846d86d089f8d38fe3678604902d911c627782d56178aa129a5cb65a5a3"],
6577
+ ["previews/presenters/liv/right.jpg", 65345018, 69544, 8, 70648, "458297823cacb7bce1adf24b62da89e6611f48dd7f8f39e810f1e0b56f0c8ba2"],
6578
+ ["previews/presenters/liv/front.jpg", 65414625, 95286, 8, 96068, "e1e1e95e0a77cf668ce629a1ae46e2f49abb1334563955c3e6e020b8a8a30d6c"],
6579
+ ["previews/presenters/odette.jpg", 65509971, 39997, 8, 40108, "de1166b2e9150ced1cf428c931be9ea88d0ff5d2412654679d0b6dfe876a3397"],
6580
+ ["previews/presenters/kwame/portrait.jpg", 65550092, 314081, 8, 315468, "674d95f6f1a46afc477a3704b9d73fcd38e6d6fdbf6fce82f3be48147dee9295"],
6581
+ ["previews/presenters/kwame/three-quarter.jpg", 65864246, 104164, 8, 105113, "9b74c8b2b511a8a07c0654112d6a6ebb39e9b1afb31db75ae2164f4a3d9e3e08"],
6582
+ ["previews/presenters/kwame/left.jpg", 65968474, 86276, 8, 87296, "f9f83487164586952b8c0e8946d173d2332ab0bdc83dbf50c4a6dcec1399ae55"],
6583
+ ["previews/presenters/kwame/avatar.jpg", 66054816, 232250, 8, 233315, "1380bcfd2c6470e03eda04c9f6db96365c5d6f852695d72712e6fa209856ad2b"],
6584
+ ["previews/presenters/kwame/back.jpg", 66287130, 122314, 8, 123111, "1c16a48f574b1c46088640eb450e029fa67ba1eee8501ba164a7ae4707d51023"],
6585
+ ["previews/presenters/kwame/right.jpg", 66409509, 76165, 8, 77244, "82938769d12806c9d873e48d9d09ff5f646e3e736e6ba924fdabc21db81fcbee"],
6586
+ ["previews/presenters/kwame/front.jpg", 66485739, 114301, 8, 115245, "1999e79fe7388122893ff7c752fc942e754f436dff52cf6ac814706005c7bac1"],
6587
+ ["previews/presenters/liv.jpg", 66600097, 47088, 8, 47187, "a0fef90773e324efe79c8648739e819cfd5366b0169403b9a6ecb096b380abc3"],
6588
+ ["previews/presenters/soren/portrait.jpg", 66647309, 285063, 8, 286734, "8a7a1b363ee4400004cbfc9b405dc3b2118e96d50195cc76af20589401a7d202"],
6589
+ ["previews/presenters/soren/three-quarter.jpg", 66932445, 73378, 8, 74454, "1ede033c1cf8bb157092e9112144a3e4aff3b35aafe5c1d2d65d4eee2d3e7065"],
6590
+ ["previews/presenters/soren/left.jpg", 67005887, 68231, 8, 69533, "b107d96dc8ab931805c781e395290f10cc2e6f7d67d7682dfeadffcff680bbd7"],
6591
+ ["previews/presenters/soren/avatar.jpg", 67074184, 223416, 8, 224658, "fb13c0e327e070ccc7b000a90bf9ca1e20169e94d21e916b0966e7d052e6b219"],
6592
+ ["previews/presenters/soren/back.jpg", 67297664, 88938, 8, 89760, "27357065c81c984a0b71d7477d38fdeec235352daee1d11e63fe9448b7bff2b7"],
6593
+ ["previews/presenters/soren/right.jpg", 67386667, 64514, 8, 65815, "d36e6143487a77b6d0302e95d01f277799240a5f417ffdd6ec6394a3fcfbca46"],
6594
+ ["previews/presenters/soren/front.jpg", 67451246, 82632, 8, 83838, "a636febbbfb4b38654f053cec191820c20ec50a5b273278ec5e4e590d26d35ad"],
6595
+ ["previews/presenters/anton.jpg", 67533937, 57863, 8, 58067, "9ca10d9caad4f11ab1e4b860a4e6cd6265c677e8508ea132ccedcffc91c79890"],
6596
+ ["previews/presenters/tove.jpg", 67591858, 45711, 8, 45827, "cc8e28f4eded5f85a7ee4abee3129cfe8d5366a483fb81fdb290e2375cb2a707"],
6597
+ ["previews/presenters/zuri.jpg", 67637627, 63614, 8, 63757, "8153e4d005d5331cf85413469c152ed6f28b171ca4eb963fcf767697a76ec676"],
6598
+ ["previews/presenters/leila.jpg", 67701300, 39914, 8, 40067, "2d5a08d001b9774eeffb20cf4f9ba1a45833b1aa35e2ab859d083adb50c598ee"],
6599
+ ["previews/presenters/amara.jpg", 67741273, 37326, 8, 37571, "1a4f6fcb09182a1df8b2e5bb557171f6021e8825efb379648c5d5c07d1786088"],
6600
+ ["previews/presenters/kwame.jpg", 67778658, 47775, 8, 47924, "bb73b07614b8a7c69ed15e420dc05d78a9359ca16a47ccb348bc08c354d0d49d"],
6601
+ ["previews/presenters/helene/portrait.jpg", 67826559, 323216, 8, 324342, "47b6917eb209c8c7ca57d189d7e1d9024cbc27deb3d681c4987f1ef570fc595f"],
6602
+ ["previews/presenters/helene/three-quarter.jpg", 68149849, 74502, 8, 75565, "eb8c55aca0ac03daaa2d6d99202f8b1aa5f5c6cb823883c31d9c7483d47c537a"],
6603
+ ["previews/presenters/helene/left.jpg", 68224416, 70348, 8, 71589, "62f68b6b0ec1b223b60984bba30753c74c661d5e252c31e0c0051533234a239d"],
6604
+ ["previews/presenters/helene/avatar.jpg", 68294831, 260253, 8, 261310, "78bd012c6c86550d50c73241884a4d7df07dd52d183906e4fb6b5e51a08ed163"],
6605
+ ["previews/presenters/helene/back.jpg", 68555149, 86787, 8, 87636, "7c65eac222dcf6da84817fc93f03ff191e2b671ad8f1926dd542653a9813247f"],
6606
+ ["previews/presenters/helene/right.jpg", 68642002, 67051, 8, 68662, "ff1f2e411329139e74f89e573222cffe404a0353fedc0445a3b6969e313d686a"],
6607
+ ["previews/presenters/helene/front.jpg", 68709119, 85426, 8, 86447, "c0806b613d289a5c768fa965d10468c8b41cdf2dcc2915228bc799e66298f0e4"],
6608
+ ["previews/presenters/maeve/portrait.jpg", 68794669, 416559, 8, 417492, "f0f8ef1e4ca122b4230402f1c741340eeca700f1a075bcda9029e285eb81ebc9"],
6609
+ ["previews/presenters/maeve/three-quarter.jpg", 69211301, 100430, 8, 101328, "1a7fad83176e28deefc4235fec795e1212d01e326cc1ea84e0316d316e3f050a"],
6610
+ ["previews/presenters/maeve/left.jpg", 69311795, 90844, 8, 91609, "1bfc2b7abdf87e2360d7e1b3da745f9669501f775db3f234cce9b37ee82b3116"],
6611
+ ["previews/presenters/maeve/avatar.jpg", 69402705, 326331, 8, 327145, "00aed263a21918e889d76f576829a20407e912d5e3de17855368c09718d32c51"],
6612
+ ["previews/presenters/maeve/back.jpg", 69729100, 106514, 8, 107824, "1a52e98d5ec8c25d5e6d9aff72843c30001523909de66cd045f5d8bf759a4e0d"],
6613
+ ["previews/presenters/maeve/right.jpg", 69835679, 83190, 8, 84279, "db158dba13f6cb4e21cf3bb6b96d57e024a0903dd08849bb4f9037f4507abf43"],
6614
+ ["previews/presenters/maeve/front.jpg", 69918934, 103836, 8, 104618, "742433514355347d411ed4fe74516aa57c8ad4773cbe131a265e310b52bd9b20"],
6615
+ ["previews/presenters/luz.jpg", 70022827, 66898, 8, 67037, "d98a7ef82c442d2dbc3c2b187ff330179acf12072ffd27bb6d64c5b3a8ab911d"],
6616
+ ["previews/README.md", 70089773, 1354, 8, 2695, "6c6b266d72dfae2229fc5a97367e4fddd3999c87be2bd7dd3b44ddcfade4fd5b"],
6617
+ ["previews/model-village.jpg", 70091183, 191267, 8, 191372, "16428404da8f4f2784f780e31b8045bd5dd6b2cb86a0706dc2302a18debfb29a"],
6618
+ ["previews/clay-court.jpg", 70282503, 165160, 8, 165232, "3da490f6a5ecba995633eaef02ed4dccda4c31d8b2187a5f00e7d505602d7105"],
6619
+ ["previews/pink-smoke/ref-02.jpg", 70447773, 252571, 8, 252684, "7340a57bd721536d79cc8718052c2ee5eab0172bdf231e146d472cca30c2cd7d"],
6620
+ ["previews/pink-smoke/ref-03.jpg", 70700404, 350836, 8, 351471, "ee34e8b4c697de7caf6f480ec06643ce5de0bf579efef3ae3b9062fc4be18469"],
6621
+ ["previews/pink-smoke/ref-01.jpg", 71051300, 185691, 8, 186482, "0b111bfa814b60297858ecc306f98931f03b88a9e4942a2ff3049a44329d069e"],
6622
+ ["previews/pink-smoke/ref-04.jpg", 71237051, 265698, 8, 265819, "833456b770ba104949f406087d2988c058982eccf7b3c681aebe5a98965768b9"],
6623
+ ["previews/pink-smoke/ref-05.jpg", 71502809, 205473, 8, 206188, "892f80ac7080e4b27af2c2c92df1a8144145865b0219f669bc3cc063bc88d5ed"],
6624
+ ["previews/travertine-window-light.jpg", 71708348, 124699, 8, 124855, "02d92692365c596b651aaeb6251f6629108b87092d235b0eaf345d33fc3194b2"],
6625
+ ["previews/tight-corner.jpg", 71833102, 62713, 8, 63012, "fefd4086d92f3fba9e076c31ceeb0bdb33c2699169440ab4b61dac30eaa0e334"],
6626
+ ["previews/beauty-dish/ref-02.jpg", 71895927, 135790, 8, 136414, "6ce07ee3c5bc4cb3846fe74787a8a6f448675b815715bd930d35080ddf562880"],
6627
+ ["previews/beauty-dish/ref-03.jpg", 72031778, 309660, 8, 310129, "9ed455a4d46221eaab89f4c6b81779c1d163116e931361c09018ca6dad50b7fd"],
6628
+ ["previews/beauty-dish/ref-01.jpg", 72341499, 84585, 8, 85130, "d250b5a95ce3a91fb84ef88116801bd2e2d39ea8f724184e188671abb12f6bde"],
6629
+ ["previews/beauty-dish/ref-04.jpg", 72426145, 131855, 8, 132418, "4c7aa810a31c894eafbefb90be693f8fd11c181ef82e13073055d6fb505e2a61"],
6630
+ ["previews/beauty-dish/ref-05.jpg", 72558061, 135984, 8, 138090, "df21bed28f6fc74b5a35525bca00a05537d2a3d2e482816222bf43372a466f5e"],
6631
+ ["previews/block-tower.jpg", 72694099, 76591, 8, 76677, "915a459e09d2664bdf3360a2865bdd8781b4440298863223ea5a6d6ea682c85e"],
6632
+ ["previews/tomato-vine.jpg", 72770744, 128684, 8, 128776, "6c929bf5d28934778fba6d7645855b9039faf7246f8a029b5eaa4b31c9448561"],
6633
+ ["previews/shadow-hand.jpg", 72899482, 111594, 8, 111670, "120b74b3f5d3aa0f5dc01653ff2f27789baa2b27ff82e7fd1f0cd8ae5829b1a5"],
6634
+ ["previews/studio-boulder-gap/ref-02.jpg", 73011202, 756081, 8, 756611, "da4ed00f9280d392b663dce52803d56a44b0a7d76f14e90eb23bffd7c847141d"],
6635
+ ["previews/studio-boulder-gap/ref-03.jpg", 73767351, 412553, 8, 413324, "d91006ae04e9e93f1ed75a083be1d143a2d22a166f6cf44122f4d768f97c41a1"],
6636
+ ["previews/studio-boulder-gap/ref-01.jpg", 74179972, 868235, 8, 868855, "1bdc4e3cfc0c3a5f6cc35be3397552559a47b9a8de4770b9769fe20fa8285230"],
6637
+ ["previews/studio-boulder-gap/ref-04.jpg", 75048275, 554202, 8, 554915, "a4ffab9ecaae54d4c51c60bbc7622c44c4bfb1e6b08c8e904061488cbc54a2cf"],
6638
+ ["previews/studio-boulder-gap/ref-05.jpg", 75602545, 789457, 8, 789767, "c89b35b559966c26e8da86a27209a6c9ace2b895a4db5b50527cd376de1a9be1"],
6639
+ ["previews/tight-corner/ref-02.jpg", 76392116, 233548, 8, 234020, "2cae548562e7ca075a4924a2a625112293fc719a0ccaa38aa6d298b99106f189"],
6640
+ ["previews/tight-corner/ref-03.jpg", 76625726, 323436, 8, 324249, "a9138036eec60b3b2d953ce9c1a8803fe51da25fef17e1ac842d4261c0974115"],
6641
+ ["previews/tight-corner/ref-01.jpg", 76949224, 210604, 8, 211865, "4d3cd8014a469317dd27819fce61f0f745a8d631bde927ec4fba8cec0a077579"],
6642
+ ["previews/tight-corner/ref-04.jpg", 77159890, 221492, 8, 221997, "d71b72b80289c2d9453fa123f43c5825f2eebc04da790afa344806120ae3e7d3"],
6643
+ ["previews/tight-corner/ref-05.jpg", 77381444, 227330, 8, 230053, "2a28c5ab1c1a90f1e63394b006478ac9dda49b7dfae666c354d5095671e1bb79"],
6644
+ ["previews/paper-garden/ref-02.jpg", 77608888, 377645, 8, 378328, "979a724eb19eb84bd3cfb1717371de1715d917d42bffe995aa9204c02150e091"],
6645
+ ["previews/paper-garden/ref-03.jpg", 77986595, 293413, 8, 294464, "d6b1de99d6bf1f63ddec3da2dd016c9f6ff69d6196978742fa96d884b3101671"],
6646
+ ["previews/paper-garden/ref-01.jpg", 78280070, 420596, 8, 420791, "26e6e2beb2ac3d3c720ddd7fd7807f2b5c7554de8dd178bbd9356e3ce1328af3"],
6647
+ ["previews/paper-garden/ref-04.jpg", 78700728, 380662, 8, 381712, "d12c723b17166e487f32c79e1dd464867a4ddeee5627979d54d8187bda6e8726"],
6648
+ ["previews/paper-garden/ref-05.jpg", 79081452, 319001, 8, 319276, "5e5afafca9a80efb8ac6bd909078fc8917e4feae1621ce5d3177eb30fe74ca27"],
6649
+ ["previews/glass-block-room.jpg", 79400512, 141953, 8, 142591, "3ea449d597ebee6eb4681bb22c19a34080aa3c7623538a0b9e7c898ce81cc114"],
6650
+ ["previews/linen-morning-room.jpg", 79542526, 104397, 8, 104452, "fc844fe6891cacbb484410a11327af99c02cfd77e1ae97e41f904804ef9f871d"],
6651
+ ["previews/cobalt-container/ref-02.jpg", 79647045, 432844, 8, 433175, "1f4d2daf4c32b7d707da1ba33c3430241c39c4b7e3ca14a9ff35521dfd5c96cf"],
6652
+ ["previews/cobalt-container/ref-03.jpg", 80079955, 384370, 8, 385089, "59e71da403f57b19ec35fce17be658679061e48e6ca71764952e98e7dca251af"],
6653
+ ["previews/cobalt-container/ref-01.jpg", 80464391, 393561, 8, 394640, "8630ccd292ba2bf6115f15c45db7516306117078557643d0b9004d2cf83ff519"],
6654
+ ["previews/cobalt-container/ref-04.jpg", 80858018, 472960, 8, 473275, "169a8ed788762bcccd65a4832fcf1c86f11b19bd3fb7b6620733c1a5b86ec18e"],
6655
+ ["previews/cobalt-container/ref-05.jpg", 81331044, 346096, 8, 346902, "43c406a46167eb470013d9b4fa6fd7406cee1470ae0c4ed378a2290e57246c60"],
6656
+ ["previews/chrome-bubble-warp/ref-02.jpg", 81677266, 414223, 8, 414462, "721504d8e378c831210352d56aeb1386f0a288ce8e0cc488d67cfd1531d8f856"],
6657
+ ["previews/chrome-bubble-warp/ref-03.jpg", 82091557, 335362, 8, 337460, "9743dbdf3ea92fa9f50fdee912975f05beba0eaf16596c6f02e2487c75e4a13d"],
6658
+ ["previews/chrome-bubble-warp/ref-01.jpg", 82426987, 397781, 8, 398063, "77d037c88a751885b6429b7ba7d252e88fc0bded16b4010daf63b2f323963f8f"],
6659
+ ["previews/chrome-bubble-warp/ref-04.jpg", 82824836, 341685, 8, 343055, "0f084d38582e621636c56e532db31a58db00324ae261b8fb26d17fa69d5ab80e"],
6660
+ ["previews/chrome-bubble-warp/ref-05.jpg", 83166589, 395918, 8, 396207, "91229307352cbfff63d628439dd4277ee8091afd276a46707b74bbf5c815740e"],
6661
+ ["previews/green-tyre-stack.jpg", 83562566, 92935, 8, 92998, "4e6e0da772f27fcfa62596f4c79514f6128a6e021d17e2335e85bed0018a38d0"],
6662
+ ["previews/studio-glacier-ice-core/ref-02.jpg", 83655637, 625603, 8, 625975, "17f2e2b5af13b3800e9a4e320751a6cd6a41785bb4cb073056fb49bd6aa5f7ba"],
6663
+ ["previews/studio-glacier-ice-core/ref-03.jpg", 84281313, 274598, 8, 275163, "344c25afea4da71924fb7555038722866ba11fad827be5056999d4c6b9f23a96"],
6664
+ ["previews/studio-glacier-ice-core/ref-01.jpg", 84555984, 606648, 8, 606942, "e21ade14fb2f6bf9be49d57dda3aae11cf9f61427f75a0b1579be35919d8a1e0"],
6665
+ ["previews/studio-glacier-ice-core/ref-04.jpg", 85162705, 413874, 8, 414043, "2995f39dcf0049ffe21fbd317014f6c65239fc86f963fdcb3d6bd1bb8dd8f367"],
6666
+ ["previews/studio-glacier-ice-core/ref-05.jpg", 85576652, 805586, 8, 805767, "a81c004a113b7251edd3c7414eb130365bb5d4edeab819ab57dc1c1a87687f43"],
6667
+ ["previews/demo-products/dunmore-kerr-cricket-jumper/three-quarter.jpg", 86382470, 286478, 8, 288838, "41c95d6225875b5c86f8644860307f14d492a784c1782c09eca01693f8466a2f"],
6668
+ ["previews/demo-products/dunmore-kerr-cricket-jumper/back.jpg", 86669037, 326956, 8, 329669, "336b8e1fe6b7202a4346daae436ea79babbf829729b0b2b41aa17f27f92b4e6d"],
6669
+ ["previews/demo-products/dunmore-kerr-cricket-jumper/front.jpg", 86996083, 319036, 8, 321501, "e19c6154f9565871c2f44939001377c982ef3e9470192ffc1ebcc935a8958615"],
6670
+ ["previews/demo-products/lydford-forge-24-casserole/side.jpg", 87315287, 73450, 8, 75312, "ae1f99b633e6f835e3496a175fad61a5ae7dc03cbbaf57ca47df372f1da001b9"],
6671
+ ["previews/demo-products/lydford-forge-24-casserole/three-quarter.jpg", 87388834, 144972, 8, 145875, "0685442585e5ded5869935aafbf1f2b4453a10a5b054144213c396b16a0fd2ca"],
6672
+ ["previews/demo-products/lydford-forge-24-casserole/front.jpg", 87533895, 111047, 8, 112626, "e24d4e33cbe5f117ef9c4c75a337e8a591f23bbe498e535fbb97464ebbc4f06c"],
6673
+ ["previews/demo-products/brixa-yuzu-tonic/side.jpg", 87645090, 80804, 8, 84098, "ecd7bc3f8d61964e17d3c9199640500b146e45a07fc558a34a8e0ecbb82eabf8"],
6674
+ ["previews/demo-products/brixa-yuzu-tonic/three-quarter.jpg", 87725981, 105621, 8, 108163, "5adac5fd6a0aa6257c01765314e0b11aaf0dafd668381b0d080ec27e0dd97c26"],
6675
+ ["previews/demo-products/brixa-yuzu-tonic/front.jpg", 87831681, 95251, 8, 96935, "3cab6bae4617e4c77d4c284ccb88c936341ea6e615d22ed5ab98dbe3ff686561"],
6676
+ ["previews/demo-products/voss-rowe-ridgeline-trail/three-quarter.jpg", 87927107, 189306, 8, 190789, "3a07383684fb387e32a1746761f9c0df043791c597f7b301c6905aa1a452a0c5"],
6677
+ ["previews/demo-products/voss-rowe-ridgeline-trail/medial-side.jpg", 88116507, 145101, 8, 148256, "7587a41487ad72981319ea014e9eb0703ccff077200793e76e53b203ebabc7ee"],
6678
+ ["previews/demo-products/voss-rowe-ridgeline-trail/lateral-side.jpg", 88261703, 153335, 8, 156331, "94c38aa4f9f870effbb74b2e718e9edb46819132e669b47ceb122b16ace7fea0"],
6679
+ ["previews/demo-products/fenwick-slade-barrier-cream/side.jpg", 88415208, 88724, 8, 91454, "d00f2290972445353d21031079f8e1514709aed7b8c64d4e55faff39c60e1be2"],
6680
+ ["previews/demo-products/fenwick-slade-barrier-cream/three-quarter.jpg", 88504030, 123720, 8, 127618, "7cc3c25f334c250b6deb7e7308f8abb54447014e60d75a935d496d08906a62b1"],
6681
+ ["previews/demo-products/fenwick-slade-barrier-cream/front.jpg", 88627840, 114809, 8, 116418, "ce8f79267565aaffcc9efd37969df40c3398bdeb04c219d296e568c99e86569d"],
6682
+ ["previews/demo-products/marden-cole-square-acetates/side.jpg", 88742819, 60957, 8, 63080, "96bcb14b471ad14e7b66c0eba1bbccc5fbc89d86271128c19ec0e730f9d50d58"],
6683
+ ["previews/demo-products/marden-cole-square-acetates/three-quarter.jpg", 88803874, 87386, 8, 89518, "ecf6b4826b093b71a3c99c02a41528026ed5facac38424bc9ddbd0bdcb96c862"],
6684
+ ["previews/demo-products/marden-cole-square-acetates/front.jpg", 88891350, 82502, 8, 85270, "0d0662da5e26aa126b32448080796ac574e5063a62f47c6436feabdaa9fbfec4"],
6685
+ ["previews/demo-products/verity-stone-dome-hoops/side.jpg", 88974014, 60038, 8, 63059, "66671eede010daec171c4cc6aa3d80e27fd110df3315d1d161a2909225cbf63e"],
6686
+ ["previews/demo-products/verity-stone-dome-hoops/three-quarter.jpg", 89034146, 102027, 8, 104501, "3cf8cf4ee6b82b675cdeebc7ab53577a7cef3bccc0dfd3171a06dc33698315eb"],
6687
+ ["previews/demo-products/verity-stone-dome-hoops/front.jpg", 89136259, 94563, 8, 97394, "787c8a8618e4760191d26438a046567ad9c6e6367e3178558ee2d2fe26d555e1"],
6688
+ ["previews/demo-products/orchard-oat-green-04/side.jpg", 89230978, 132520, 8, 133691, "3567a311ce0e769de81da5623848e19462e4de079cb8e128a03e96fea14afdf3"],
6689
+ ["previews/demo-products/orchard-oat-green-04/three-quarter.jpg", 89363589, 138018, 8, 140187, "60c0b4a056e639c55b66a778cc157fae11dbeb6c19ea5fc7e8b28fbddb912b2d"],
6690
+ ["previews/demo-products/orchard-oat-green-04/front.jpg", 89501690, 128461, 8, 130517, "6b747e26a1838353a6ac0eb2cbc403b73f3af43ca7aff44df5924653673235d0"],
6691
+ ["previews/demo-products/carrick-stead-chug-710/side.jpg", 89630311, 108719, 8, 113e3, "0f470e0ddceae79b89c1ba969ddface071f10d8a6da822b964a030f0f093d9be"],
6692
+ ["previews/demo-products/carrick-stead-chug-710/three-quarter.jpg", 89739123, 112251, 8, 113634, "71f176d7905b9f827479f67c9bc543685cdf7231ed5c5fb101705cbd68aa2092"],
6693
+ ["previews/demo-products/carrick-stead-chug-710/front.jpg", 89851459, 106582, 8, 109457, "223e8a20bad0cc01a30149ae8254fc32f2010fd8a01f24e82fff81dd4a8cc6fd"],
6694
+ ["previews/demo-products/nordhavn-over-ear/three-quarter.jpg", 89958200, 140244, 8, 141652, "16023607a4b554b654ce348552e7c8ac60965696d0e3bce577525639c8feeaf8"],
6695
+ ["previews/demo-products/nordhavn-over-ear/back.jpg", 90098523, 171448, 8, 173436, "ef18de3be1b88aea8007e36f4f3fa1c1457980f3ddc1f85fa5d570f92de197a8"],
6696
+ ["previews/demo-products/nordhavn-over-ear/front.jpg", 90270051, 152845, 8, 154474, "4ca11ca2d9a1c8ef1db2a22ace8fc054f257420ece896a071ed06ad89cf16acc"],
6697
+ ["previews/demo-products/pellow-hibiscus-soda/side.jpg", 90423052, 84728, 8, 87192, "2eca94e119d18b5c2552089cb04a7ce025ba4f9a4c08b9b7eed0303bb34aebfe"],
6698
+ ["previews/demo-products/pellow-hibiscus-soda/three-quarter.jpg", 90507871, 112500, 8, 114951, "d4c20932e5b0f35c1b053491c700a93b298af60633ff625941beb7a2115ca776"],
6699
+ ["previews/demo-products/pellow-hibiscus-soda/front.jpg", 90620454, 96287, 8, 98198, "7bfac456489e66bded11cb77d528551070185e39dfa4d88ad7a1603a8102f8df"],
6700
+ ["previews/demo-products/halden-bay-spf-50/side.jpg", 90716891, 38590, 8, 41056, "f57e59bf7ea294066f911ac83799b80bcae8db4bcd982648a7a8111207e7618f"],
6701
+ ["previews/demo-products/halden-bay-spf-50/three-quarter.jpg", 90755569, 78509, 8, 80599, "a19822e39b12422f8a510fb8115620b0f92b589e8383251164ef13b7be392cee"],
6702
+ ["previews/demo-products/halden-bay-spf-50/front.jpg", 90834158, 68989, 8, 70993, "285dc9cf3ee90e7d48218c295a4903b805d233ce54542b73e4dabc90a51f0b16"],
6703
+ ["previews/demo-products/aldergate-field-38/side.jpg", 90903299, 170027, 8, 172207, "3cd7d8889d7cd910b44a2d8f4c9907663963f3a1d6ec17295bfa90adf0b8de2c"],
6704
+ ["previews/demo-products/aldergate-field-38/three-quarter.jpg", 91073415, 251520, 8, 252944, "55507563b0c02570c3cb720fa266d4dcfbb030b1ee9366e81d719e8f361af154"],
6705
+ ["previews/demo-products/aldergate-field-38/front.jpg", 91325016, 233967, 8, 236132, "292504a0e856fefc96858b02038e49e6095d1548d791328118401ef17a1a2906"],
6706
+ ["previews/demo-products/aubrey-lisle-court-72/three-quarter.jpg", 91559150, 140687, 8, 143263, "a991f646e7777b03bc47ecbb1da3fc7281b9f6575d92ba257a92f616d6cf391c"],
6707
+ ["previews/demo-products/aubrey-lisle-court-72/medial-side.jpg", 91699927, 95991, 8, 99318, "aeed0b9a909851e21174f9c1e70ba13a62aed31e96d8f2778e2743522ab02154"],
6708
+ ["previews/demo-products/aubrey-lisle-court-72/lateral-side.jpg", 91796009, 112213, 8, 115715, "366c069eaf5d8d6e435ee72d5182b01bd6b38b465674be8ef36f4bc57ae5e567"],
6709
+ ["previews/demo-products/birch-hollow-fig-leaf-candle/side.jpg", 91908394, 146936, 8, 149969, "9a43ea0b0826d0752bd4d87e59612f9b47f5580a86f5f6e6ddb7834e0b9bc27b"],
6710
+ ["previews/demo-products/birch-hollow-fig-leaf-candle/three-quarter.jpg", 92055429, 171599, 8, 173003, "d815b2da8b361ae52c40961246428b824ea77812f851450595a4806cf63043b6"],
6711
+ ["previews/demo-products/birch-hollow-fig-leaf-candle/front.jpg", 92227119, 160407, 8, 162289, "193594771214c210c9a5afaa7e1fdb36cff4bbb0d8feec7d206e5f15a286b943"],
6712
+ ["previews/demo-products/fenner-ross-aperitivo/side.jpg", 92387684, 107349, 8, 109580, "bcc3068472fbd159bd8e1b9c4279a8ccdc42a6127fc9027ed14b587aa29e901c"],
6713
+ ["previews/demo-products/fenner-ross-aperitivo/three-quarter.jpg", 92495125, 171427, 8, 174788, "b29f5e61a9e348c52744029e46d621e418cbf44d15b790c53795e8e2271e5bdb"],
6714
+ ["previews/demo-products/fenner-ross-aperitivo/front.jpg", 92666636, 171628, 8, 173822, "22a7680f7e98411dacba0ddf115ea1714a2570bae72447a9c3a0ba13781e0604"],
6715
+ ["previews/demo-products/harlow-made-fig-vetiver-wash/side.jpg", 92838436, 57126, 8, 61123, "2bfe97c4e960e1dc297c710f6b1dbbc3f6d939db73e1fa0527e9b36b6d01b435"],
6716
+ ["previews/demo-products/harlow-made-fig-vetiver-wash/three-quarter.jpg", 92895661, 80721, 8, 83792, "8eed8bf09ba59e70038a86a8aa983d18e3a74eda3ce70f75ce0fd34bd09a414a"],
6717
+ ["previews/demo-products/harlow-made-fig-vetiver-wash/front.jpg", 92976473, 65348, 8, 69017, "170fd772f08ea0adf37db7339fbea82007e99915b46a612a44d71098179eb6da"],
6718
+ ["previews/demo-products/ossett-hume-capsule/three-quarter.jpg", 93041984, 230500, 8, 236300, "13c3a1fe5528a76e9685f723cc45150936c80eecc46743baa6295bd797983b05"],
6719
+ ["previews/demo-products/ossett-hume-capsule/back.jpg", 93272565, 237175, 8, 240803, "d5634818834bf950914f725ed4efa7964437e34b073d94a02d817664c0f98463"],
6720
+ ["previews/demo-products/ossett-hume-capsule/front.jpg", 93509822, 229208, 8, 233052, "92fe17ad57313c33dcbd2e2adc92b1d209625c5da88cdb30b29d7d5390820c74"],
6721
+ ["previews/demo-products/maud-ferrers-sun-coin/side.jpg", 93739188, 105494, 8, 107887, "1c1bbfeba24e123c6ebbae5b672ec5af5687450ec85afe67bc2de7ff51a3f03d"],
6722
+ ["previews/demo-products/maud-ferrers-sun-coin/three-quarter.jpg", 93844774, 160157, 8, 163044, "6902fad39833f773ce795d761dd5fcdb3838b3e5950596444a22f9ede6470a0c"],
6723
+ ["previews/demo-products/maud-ferrers-sun-coin/front.jpg", 94005015, 124838, 8, 127109, "a2a7455a68fd021ab89f72f27404d04df2d43586560ca496e4405af882b2c415"],
6724
+ ["previews/demo-products/hollow-reed-sleep-gummies/side.jpg", 94130019, 82444, 8, 85130, "4519e6fca9dea42edb444b22e8886890a7e384010fa45c3a54ab82a6f8ca9545"],
6725
+ ["previews/demo-products/hollow-reed-sleep-gummies/three-quarter.jpg", 94212559, 98363, 8, 101288, "4d19e26e54767e9b12d8fa7a5b364652dc21ef0ad6472cf2a1948902371199f4"],
6726
+ ["previews/demo-products/hollow-reed-sleep-gummies/front.jpg", 94311010, 90177, 8, 92092, "9fdfeb9e386901a5449ccd51f3352ef954acbec1339f8920542c0f3893e17ba6"],
6727
+ ["previews/demo-products/moss-larkin-oak-lounge-chair/side.jpg", 94401359, 205646, 8, 209331, "a02f8e32e9b9625afd231888dc1816dc6d1ff096a7eaba0cbaba8f9d3bddc545"],
6728
+ ["previews/demo-products/moss-larkin-oak-lounge-chair/three-quarter.jpg", 94607104, 247741, 8, 249300, "e93d9697f7b517aaaf61b0bf8dc5b5b1776ab6e1f3f7687bc40ec672843ff9ba"],
6729
+ ["previews/demo-products/moss-larkin-oak-lounge-chair/front.jpg", 94854936, 259685, 8, 263759, "587f34b74473aea0ed2239be7edacfe48a7856d1bd3b8ebc209eb82cc538da62"],
6730
+ ["previews/demo-products/verlaine-salt-orris/side.jpg", 95114775, 78771, 8, 81112, "82e1b48ad6b5b060952b48a7de0a7d705f931ae4ddc768f48520a4f1ad296248"],
6731
+ ["previews/demo-products/verlaine-salt-orris/three-quarter.jpg", 95193636, 167401, 8, 169349, "04a0a333f649f37224b39179f8dce1f931ec25c4a9fcc58e310f90a069668c72"],
6732
+ ["previews/demo-products/verlaine-salt-orris/front.jpg", 95361119, 120308, 8, 123530, "13d04e9a3bafbaecedbba4cdf399556ac3da8ac92b3d3e20d6012f7dc8711efb"],
6733
+ ["previews/demo-products/oswin-hale-open-buds/three-quarter.jpg", 95481592, 118383, 8, 119430, "50e927a58f3edb508ccfdae30be7f0b760621e9a7cac817c652a7536327648c9"],
6734
+ ["previews/demo-products/oswin-hale-open-buds/back.jpg", 95600057, 117269, 8, 119760, "3a6a207138e62e7ebb1f4eda1cd455438395a82dd68e53679ebabd7a43fbe800"],
6735
+ ["previews/demo-products/oswin-hale-open-buds/front.jpg", 95717409, 143168, 8, 145680, "10d19be3f80e543a2e5361e2646b6141a51bc2495c9100320058c8d4e12bf8e9"],
6736
+ ["previews/demo-products/slate-harbor-cropped-puffer/three-quarter.jpg", 95860756, 265486, 8, 267855, "dd6a3bbb9fd3d077365631fc81f8c2d9d4578412d8a2847a0b8efb7283b2111a"],
6737
+ ["previews/demo-products/slate-harbor-cropped-puffer/back.jpg", 96126331, 241118, 8, 242896, "67b1ddb106efbe5628de137f05c0169fc983ec2b9f0fc83e6606a0c2925105ee"],
6738
+ ["previews/demo-products/slate-harbor-cropped-puffer/front.jpg", 96367539, 235588, 8, 238023, "01bfe6c6a7944df6ecc0f8aa9b87d65db5ae47f32fa7810e2490af8c16a2b8d9"],
6739
+ ["previews/demo-products/ilse-varden-scarlet-11/side.jpg", 96603287, 52946, 8, 55556, "9b5496cfb4849e1aa75269a3ea1b1d47f693635958c12c11ae81d136077a0551"],
6740
+ ["previews/demo-products/ilse-varden-scarlet-11/three-quarter.jpg", 96656326, 80639, 8, 83390, "579277076faf45e4c3e70699a4cee3cca32eb99267ac3b38febdb82a0e6d4561"],
6741
+ ["previews/demo-products/ilse-varden-scarlet-11/front.jpg", 96737050, 60190, 8, 64236, "37269df62ffcef788102ac00159087bd627a148229a5c69e58a30679da500576"],
6742
+ ["previews/demo-products/manifest.json", 96797306, 7176, 8, 44443, "b45c7eba52f9d30319869d21cf0e50beac5a7d5cb5918f926f66b0f64440f282"],
6743
+ ["previews/demo-products/ottery-lane-72-dark/side.jpg", 96804636, 59781, 8, 63126, "2af5eb293d876d2e99f0a04abbddb2af0774d38c111b4969a2021d63d0ed806d"],
6744
+ ["previews/demo-products/ottery-lane-72-dark/three-quarter.jpg", 96864507, 129548, 8, 132197, "2ca19f202e07b8f595b662e33bf3053f96c61a6a553d091417f2daf74ca0fce5"],
6745
+ ["previews/demo-products/ottery-lane-72-dark/front.jpg", 96994137, 128022, 8, 131456, "7562d5572d0b1178738bc31c8e3e52b5ca5d47ffa0ed04527a284bbdf2f68369"],
6746
+ ["previews/demo-products/marrow-vale-noir-cedar/side.jpg", 97122319, 72235, 8, 75419, "3b5c4c61a5db7ee5f9063f400960267d31fecbea549ed2dd5f133996320ec840"],
6747
+ ["previews/demo-products/marrow-vale-noir-cedar/three-quarter.jpg", 97194647, 118426, 8, 121454, "3cd72d6f0d3026e7825d5f210103bbc24313c98bbacd2f4473cfb01d110f89e2"],
6748
+ ["previews/demo-products/marrow-vale-noir-cedar/front.jpg", 97313158, 101124, 8, 103711, "95db581581963d1b199b200a46151dc65fb3e5e0ab407179e64e29abeec04873"],
6749
+ ["previews/demo-products/calder-vane-c15-serum/side.jpg", 97414440, 42015, 8, 45079, "d401e07c1160d4e239d232171d8558153b58a79e3bc013050562ad930646a068"],
6750
+ ["previews/demo-products/calder-vane-c15-serum/three-quarter.jpg", 97456547, 55747, 8, 58694, "7cf3eab3fadfcd79f8df309babad1dc68b16454f149e48e00b1f4f6976bf393b"],
6751
+ ["previews/demo-products/calder-vane-c15-serum/front.jpg", 97512378, 57094, 8, 59385, "2975186e14da3526fca2bdfd6154c74743bf900ba6371763fc728b2a642b16c5"],
6752
+ ["previews/demo-products/tanner-fielding-collagen/side.jpg", 97569636, 38100, 8, 41262, "4083724364f71f68b2e89cd43ecf20b9b2ca543cf15a5ccd7530b46eebc1f59a"],
6753
+ ["previews/demo-products/tanner-fielding-collagen/three-quarter.jpg", 97607831, 84721, 8, 85841, "604b7824092cf6959ae38583bf9ed2f65db4f11537995f82e678dca1a169a403"],
6754
+ ["previews/demo-products/tanner-fielding-collagen/front.jpg", 97692639, 73341, 8, 75352, "ecb05de827b9093bc60b8ccb64651cf722d2f4b2b59329d980bb3a2b72cf1efb"],
6755
+ ["previews/demo-products/rowan-ash-bowler-bag/side.jpg", 97766136, 109376, 8, 110938, "66d396879d793b660feed6c3630f4bb91fc1700a2e539d58827f098efd7339e2"],
6756
+ ["previews/demo-products/rowan-ash-bowler-bag/three-quarter.jpg", 97875603, 136509, 8, 138654, "0c27edfc7bf2b94b8bf8d0d5d0430083c8aec3de96a54af1fc1cf9f6ba249aea"],
6757
+ ["previews/demo-products/rowan-ash-bowler-bag/front.jpg", 98012195, 129409, 8, 132212, "876306b68dbdf83084b20e30e85951c897822ff9d1af038d3a66b2f0544cf92a"],
6758
+ ["previews/coal-blind-light/ref-02.jpg", 98141726, 306577, 8, 307315, "ca36dc4632350048040ca16619fc0c92843824e2d266bbbd42809ef0f3a31e9f"],
6759
+ ["previews/coal-blind-light/ref-03.jpg", 98448369, 253311, 8, 254023, "78704fe19ed50dcf54789c946a9cd1cd4c203a3b8987e110e9af47a4eba4e904"],
6760
+ ["previews/coal-blind-light/ref-01.jpg", 98701746, 376129, 8, 376983, "859d5a3c5ac3e67423cc78a8a3c7d3d5c2c8d48e103de7045ddef48ab9331222"],
6761
+ ["previews/coal-blind-light/ref-04.jpg", 99077941, 389666, 8, 390432, "1d21fb2526172a0dead03bd1591261f39539de2790b3e9ddee17d937d74ec2e1"],
6762
+ ["previews/coal-blind-light/ref-05.jpg", 99467673, 273250, 8, 273494, "eeca9516f783bbeb2fd666eba37c16ef23c9eb63666b2ce86fbd3325a5fdd21f"],
6763
+ ["previews/succulent-dew-bed.jpg", 99740983, 153845, 8, 153876, "2608ee5b5215898131c0f2ac3417b39fcd2650a4769e97255bb6d7d46c29bf0b"],
6764
+ ["previews/painted-canvas.jpg", 99894885, 113822, 8, 113900, "415d7aa07225f470cffa17f756a81230747eebf5483e20e7b20c401d22f18eab"],
6765
+ ["previews/hair-nest.jpg", 100008759, 162218, 8, 162317, "8428c735a9fff54164ce1e29e8ef68480297c0946b44cd209770cd8315431359"],
6766
+ ["previews/laundry-line.jpg", 100171032, 153541, 8, 153603, "6604253c77672a7a4d7ddb6fe7f07cd8aa32d551c7a1cf7bcb307eda738a6371"],
6767
+ ["previews/lantern-room/ref-02.jpg", 100324687, 333405, 8, 334054, "39b7ce4bc11f39d07337dc4f4bbbfdf7ddc35f4d28a3793cb7b84655c7edbe67"],
6768
+ ["previews/lantern-room/ref-03.jpg", 100658154, 347518, 8, 349051, "fd6fcfa7a0a9955f74c871e82a3bcc497904912b7ed9db89b2ebdd11a51e0640"],
6769
+ ["previews/lantern-room/ref-01.jpg", 101005734, 327194, 8, 328058, "3e8ee4b78194dba5395333f6e35304dc6d9db4443e263992eaf30b1f7671f3b3"],
6770
+ ["previews/lantern-room/ref-04.jpg", 101332990, 340642, 8, 341159, "550a62c0d2620547a1ee36b041ac776bad155c98ebdc77743f310d162c56419b"],
6771
+ ["previews/lantern-room/ref-05.jpg", 101673694, 254438, 8, 256053, "5cc8e2bbceaad185f6940d38a2b709b78cd6e1da0559f491504a7af7fa8a20cf"],
6772
+ ["previews/studio-glacier-ice-core.jpg", 101928198, 176438, 8, 176503, "3384d1c27a265136413879a01291ca9ba03f3cbaeb021696f3436c318b106955"],
6773
+ ["previews/chalk-steps.jpg", 102104690, 151371, 8, 151441, "fb4e52b446609b38a0c81e2d93aa2de528cccc2492ea1b4704019824ce549f30"],
6774
+ ["previews/cobalt-container.jpg", 102256120, 128264, 8, 128301, "ebc1a37d9d1e6b7ed49ca55ac83d4dc19bcbf16abb5676aeb222af7ef51664ea"],
6775
+ ["previews/ruby-syrup-pour/ref-02.jpg", 102384504, 357726, 8, 358621, "75d600368469da9820d00c3f3c18fb7132b6720a3dd12b3d29e6320cbb0e1625"],
6776
+ ["previews/ruby-syrup-pour/ref-03.jpg", 102742295, 413219, 8, 414145, "e1eefdc399700bb2a4f02830b79c7d1b41344850d64404b9d1be5736e4a02252"],
6777
+ ["previews/ruby-syrup-pour/ref-01.jpg", 103155579, 407167, 8, 407889, "8a89de80c9297cb5486131ec09272e0a36e20feae1eb10692252b8722cbbac92"],
6778
+ ["previews/ruby-syrup-pour/ref-04.jpg", 103562811, 375963, 8, 376431, "9240b172c26b9464e9c251e852a3bfff135702366ab07edac59dc7c852ef3ad8"],
6779
+ ["previews/ruby-syrup-pour/ref-05.jpg", 103938839, 292750, 8, 293472, "970fdfe61ddb55f41b07c435f9af04cf196e01633f719027eca809c0f2011ea7"],
6780
+ ["previews/hand-studio/ref-02.jpg", 104231701, 144049, 8, 144844, "8ef577a6ef5e96260612ce10efed24ae6bf49caf015361136dc1a4b6e7b227f2"],
6781
+ ["previews/hand-studio/ref-03.jpg", 104375811, 273238, 8, 274138, "746ed35ff939cab530208cb2d2a1136fa3f57e638387642c42b23d0ba9a5bf72"],
6782
+ ["previews/hand-studio/ref-01.jpg", 104649110, 111067, 8, 111886, "07cbbcba03152e20ea54cec85d5c8d563dd5be16da0ad97e65f4f6937968acc4"],
6783
+ ["previews/hand-studio/ref-04.jpg", 104760238, 205905, 8, 206872, "39581252dab9216ea73b15d077cae8d0092e767fcf340d1ffd37180030f3e974"],
6784
+ ["previews/hand-studio/ref-05.jpg", 104966204, 121100, 8, 123042, "d183e716c1cecfa10f9a796e629695f65b6c2d9f3a2f1d1ff9566e53210143d3"],
6785
+ ["previews/showcase/sun-coin-sundial.jpg", 105087420, 660926, 8, 661321, "79dec45fce346552e18cf2f0e1933d2fce4c5a81c09e93dcc921b38ac935fa58"],
6786
+ ["previews/showcase/c15-orange-pool.jpg", 105748413, 273072, 8, 273892, "bf45f1b47a656386d241b3832f674421c8a1a05388f89eaf98d81ec5e90fa644"],
6787
+ ["previews/showcase/acetates-ice-block.jpg", 106021555, 583242, 8, 584588, "575abd0499ac2bea9b879b8c989a4bc5b14594c5219ed0cc3b58690181874eba"],
6788
+ ["previews/showcase/orris-collarbone.jpg", 106604865, 285135, 8, 285713, "0b33ed6682abaa661a4cc8ae4761c16af5c8e0c9c8c4c381bcd9e562dba87967"],
6789
+ ["previews/showcase/gummies-cherry-heap.jpg", 106890071, 376439, 8, 377243, "cb816414cb1424541dc0f0b4c19c3f3ba0fc95ade30bd790261bc23bcfdc4547"],
6790
+ ["previews/showcase/noir-cedar-char.jpg", 107266577, 265371, 8, 269049, "3be131134808f1bbde84f92c4989b584d17e99ef9563bae4621878f564fc0d39"],
6791
+ ["previews/showcase/barrier-cream-oats.jpg", 107532018, 405147, 8, 405663, "9ff3c02ff91d2fd3cd9b308b60014921ac362ded9b03bfdc92d5ed8c64d15c27"],
6792
+ ["previews/showcase/chug-waterline.jpg", 107937231, 232997, 8, 233588, "801154aeb7cedc31b5df3e28939e357a15735656ba2812ccb6efe444ecc4eeb7"],
6793
+ ["previews/showcase/fig-vetiver-travertine.jpg", 108170302, 322617, 8, 325176, "ec22c0d22c684dc48fd74bb79700fb588b0490ae8f7d643e9607e5d57d4348f7"],
6794
+ ["previews/showcase/hoops-sculpted-hands.jpg", 108492991, 114275, 8, 115967, "b77d6438870dae2ea3ed034ca461d0192fbcf662d049ce5cd08759837f32db08"],
6795
+ ["previews/showcase/c15-morning-drop.jpg", 108607334, 342010, 8, 342429, "c550f9396b8dd0389711121535343e39a64db319e33cb7366b38d49de6a5b2d7"],
6796
+ ["previews/showcase/aperitivo-chrome-bar.jpg", 108949416, 278302, 8, 278835, "98992d5272bd7068c74ebe7b0ff6dbba26d71649b3020272d3b035efb9e93f3b"],
6797
+ ["previews/showcase/hoops-painted-canvas.jpg", 109227790, 315688, 8, 316318, "f86ae40a159b76ec5df487ff13e8f67602df457325ff5f5c9d1d59d6a9fd1b4f"],
6798
+ ["previews/showcase/orris-window-stripe.jpg", 109543549, 315737, 8, 318052, "4432f7ab941c59ebf589574e1faa1faf44d4a7da5ed9447908ca07b1f507f2eb"],
6799
+ ["previews/showcase/acetates-harbour-light.jpg", 109859360, 503578, 8, 504408, "d075db3a8d302dbf9124c3237277af7ee98a44d344124903ea8e8f9f97f83aa5"],
6800
+ ["previews/showcase/hibiscus-dew-bed.jpg", 110363006, 465295, 8, 465575, "d3f8233959aa0ee44d4602f7cbea59e070cb37d723af748f75f3ea6b77522c4b"],
6801
+ ["previews/showcase/wash-fig-leaves.jpg", 110828368, 403253, 8, 403611, "51ef2fd75814acad120ebabe8ade219513c8e9ec9f5055f15d35b589ab1d260e"],
6802
+ ["previews/showcase/field-watch-ice-core.jpg", 111231693, 592533, 8, 592726, "975928461699630e9f6d15ebac48d01c89d0deb4c8e24f8e5f5208cbbc5ee9c4"],
6803
+ ["previews/showcase/ridgeline-stream-leap.jpg", 111824299, 555312, 8, 556196, "f823a06c873fafe33c25538732ba8cdac1f5b2375f4f6b7d89d6b7d3b29c880f"],
6804
+ ["previews/showcase/barrier-cream-cheek.jpg", 112379682, 357912, 8, 358355, "56ecce0ab13268d28d09ecc3178d63d2f166ef30a7a7a2c934096bf31aaca4bb"],
6805
+ ["previews/showcase/collagen-paper-garden.jpg", 112737667, 265801, 8, 266578, "a9bde084aa8f98013affa068adee3d0617a579ece76ddc9a290d523b2553516e"],
6806
+ ["previews/showcase/court-72-baseline.jpg", 113003537, 438519, 8, 440469, "68f27a2de6c823c69563755b143e1036958b97606b0cf8ad0f17a668cc8c7bbe"],
6807
+ ["previews/showcase/wash-steam.jpg", 113442118, 387663, 8, 387988, "6f137787bbebdfd9c31d96e6ec660a2cc53815d714ab9129ad77da62e752a44e"],
6808
+ ["previews/showcase/hibiscus-pour.jpg", 113829846, 226033, 8, 226627, "7f02147b60779b26bc1239364760006b2eb49851f0312b84e38258851bc5989b"],
6809
+ ["previews/showcase/orris-waterline.jpg", 114055946, 224188, 8, 226019, "f67f189dd862b6fb29f485e444624132043db65aa7cb982a750cb5bc32d83f2c"],
6810
+ ["previews/showcase/green-04-track.jpg", 114280200, 491383, 8, 492285, "0e171171710ff9939dcb2415187291b4330c94de14f9ed450f4e02404c5dbf50"],
6811
+ ["previews/showcase/lounge-chair-reading.jpg", 114771655, 464039, 8, 464982, "005b2b1b9a287f47fbaee56384c705ba54a2fc5e13a9917bf15deb45630b4c6b"],
6812
+ ["previews/showcase/field-watch-corner.jpg", 115235764, 358887, 8, 359205, "ea88455cadc50c128bb39ed602130f0d024e3e8c81b6b6ac4f09ad82e9e43b72"],
6813
+ ["previews/showcase/scarlet-swatch.jpg", 115594717, 251469, 8, 251815, "79a7636427406009c41042c80ecab5777a1eb3c3cdc0359fa814aeb56862fe86"],
6814
+ ["previews/showcase/noir-cedar-silk-drape.jpg", 115846259, 355812, 8, 356401, "6622e60593731f4990295e94434abd2faa1466db9feda1f519e53cb1997fdb0f"],
6815
+ ["previews/showcase/capsule-model-village.jpg", 116202144, 588512, 8, 589240, "3935c17c07e336f6e252bdda950171cfcf6205a48924970530524fb7006861e5"],
6816
+ ["previews/showcase/capsule-block-tower.jpg", 116790727, 318230, 8, 319177, "9c7fd622223c265a1351d572397cba3e51088c08e4cf44eab8a16d5491a00360"],
6817
+ ["previews/showcase/aperitivo-pit.jpg", 117109022, 347643, 8, 347838, "cc6a06e9cbc59299a94599028f07de4ce520abb2b76b77f6dee121bcc452d1f2"],
6818
+ ["previews/showcase/bowler-cobalt-room.jpg", 117456735, 167485, 8, 169166, "219bd079936936fcfc208ea99ea2cabfec5597a335ca6f2dd64c2a3a259b9ce9"],
6819
+ ["previews/showcase/over-ear-arch.jpg", 117624285, 116884, 8, 117402, "12b74ccd6bc1d9699d4058cebcebbe8734d8e968fca1293ef2f238f24478882b"],
6820
+ ["previews/showcase/fig-leaf-lanterns.jpg", 117741238, 316813, 8, 317945, "551ecaff7d1ed916f6adbb0d88026143b0234cc95a5c5672d07b198732c697b1"],
6821
+ ["previews/showcase/casserole-tomatoes.jpg", 118058121, 444011, 8, 444259, "ca67dbec14ecd5410529ce6b27ababa3573dc91bb76fe5788f74a407cb7e0f10"],
6822
+ ["previews/showcase/field-watch-helm.jpg", 118502200, 484922, 8, 485431, "23bef3a08cd1a56b3c0a4e5c16c5380fc5a41538d6f7a88163b06be51e270014"],
6823
+ ["previews/showcase/court-72-checker-sit.jpg", 118987194, 304663, 8, 305946, "d92ccf6d35a3137f8542297a8392e5cc55ec32848cc10d40d83a34c8bb04345f"],
6824
+ ["previews/showcase/chug-mountain-stream.jpg", 119291929, 576645, 8, 577108, "c5ef6db2ea33fd4e611cbb14c3b2b5e199e32d83e84eec40b79b8b62baa73d9e"],
6825
+ ["previews/showcase/scarlet-beauty-dish.jpg", 119868645, 334591, 8, 334759, "e6adb2c8541d35d7329451ba385c12317dc9cbe6a85e973250fb39e269930001"],
6826
+ ["previews/showcase/spf-yellow-field.jpg", 120203304, 114006, 8, 115484, "1e81352dda8a10a88dcf47e8dd19b0a5f1f76b02092ca580363e1f4b4a36d824"],
6827
+ ["previews/showcase/cricket-jumper-sheets.jpg", 120317383, 466498, 8, 466966, "8c7fed28995db61469c2eec91fa96521350b2b9c4f61f32947ec8457dd4502d7"],
6828
+ ["previews/showcase/yuzu-ice-burst.jpg", 120783947, 309456, 8, 309614, "855bba1d1dd365498180da51b93254a6d56f11fe76e38c8eef9ba75c9e861bdd"],
6829
+ ["previews/showcase/72-dark-snap.jpg", 121093467, 226041, 8, 227111, "e65b929e0f9e5551edf55ab9c732da473ac789729b6cb1b6e2da112184f7cabc"],
6830
+ ["previews/showcase/gummies-bedside.jpg", 121319575, 300543, 8, 301270, "ddb26adb1f89832b057c0abf942f9080b9e11595e7b20bf4fad3d4f72ea049db"],
6831
+ ["previews/showcase/chug-long-shadow.jpg", 121620186, 129198, 8, 130740, "ea3424e01b1d8d284688898ccc98c2a95d4f6850603b7d5f1fc4df9b2e3ef81e"],
6832
+ ["previews/showcase/court-72-salt-flat.jpg", 121749454, 373683, 8, 374304, "5141dce3dd6d5948b247cccf0ff52268624e45ce36a389a95b9d776f25c7a863"],
6833
+ ["previews/showcase/casserole-steam.jpg", 122123204, 346893, 8, 347783, "1edc4ab7ac4173ee625c0f2681263a01259d072ba564587291b0b91bfcca18ba"],
6834
+ ["previews/showcase/spf-shadow-hand.jpg", 122470164, 348270, 8, 348947, "63a38e4fbc0d4a2a97f2af11b79d7232342a9eb822026e3a6b33519744a37a6d"],
6835
+ ["previews/showcase/barrier-cream-ice-core.jpg", 122818508, 497529, 8, 498373, "c63a900bfd29f3d7711dc3f0787d7fbb38836583728509e76248b2124d79e49a"],
6836
+ ["previews/showcase/over-ear-balloons.jpg", 123316106, 310432, 8, 310737, "96af58ce229c0af801678cf50954154fbea79bc05bce026c2f997c6352aad95e"],
6837
+ ["previews/showcase/puffer-ghost-snow.jpg", 123626607, 587690, 8, 588243, "de5138a7b33744b3a90e2defa1f3cffd7c543fbce867ec76e58c0849169cee48"],
6838
+ ["previews/showcase/ridgeline-tyre-top.jpg", 124214367, 315814, 8, 316186, "e2646f8393da1dd2a24136d96c250f0c4605d2a576441441ed4a3dc71344a891"],
6839
+ ["previews/showcase/collagen-berry-splash.jpg", 124530254, 222430, 8, 222764, "788568ed2b38dd057113f1361d40e63f64174dac99d223166b120d7f0aced9eb"],
6840
+ ["previews/showcase/c15-dew-bed.jpg", 124752747, 325368, 8, 325502, "8cb3d6980c0ca948ae9ab6871c4c245f0dea50c3fd325769311db78e99b46cfd"],
6841
+ ["previews/showcase/capsule-stoop.jpg", 125078180, 497336, 8, 497412, "efbe82e13b3e22da1c98ed2dc3fccdca2de751dc23fcbcdc240b4a2806f65cbf"],
6842
+ ["previews/showcase/bowler-red-blade.jpg", 125575584, 77520, 8, 80673, "bc77b3ebad0761e75c568c93b0745e5dc05f2ad7ba87a29ad23612e5e9adca2f"],
6843
+ ["previews/showcase/hoops-honey-drip.jpg", 125653172, 491008, 8, 492042, "c109c549a437839ded7479032cabe3eb387cf3b1529e2e40d6c1ab81fd69eb55"],
6844
+ ["previews/showcase/scarlet-red-blade.jpg", 126144249, 60920, 8, 71113, "4a3e464444ac81030cb15131bcba5fd36c426b98e8863ff0aa73f53c603e25f1"],
6845
+ ["previews/showcase/fig-leaf-frost-window.jpg", 126205242, 455189, 8, 455784, "b3dca44c9d82d9e191fedfb9653052ec44a9e16d355d0ac54fcbc1f3e519295a"],
6846
+ ["previews/showcase/barrier-cream-caddy.jpg", 126660502, 421113, 8, 421317, "9d3aef2b3ce82fabb6e8eeb7f41a08eb9ded44c0bf1748b071d580676f053be6"],
6847
+ ["previews/showcase/hoops-pink-smoke.jpg", 127081683, 248934, 8, 249194, "b8f5a1ac78a76f55fa18ba357b833fe79aa097cfc0c5f641b5a7de1beaa9fe44"],
6848
+ ["previews/showcase/scarlet-summer-laugh.jpg", 127330689, 431747, 8, 432309, "be681220f956e078c56c24e3ca2f15bc2cfefa30ee3fd428b9e5be9bd597c079"],
6849
+ ["previews/showcase/cricket-jumper-hamper.jpg", 127762509, 698283, 8, 698453, "87824154aa30b8b947ec50e7d45e9759ab6c9855190eabc2b4f3aafdc8400465"],
6850
+ ["previews/showcase/open-buds-vinyl.jpg", 128460859, 180478, 8, 181515, "e49d0fe0aefa258b80aa18b4a863bcd776a3cf501050bace02266c0aadbb6928"],
6851
+ ["previews/showcase/green-04-ice-trough.jpg", 128641408, 455834, 8, 456108, "8761df8447dbbcea8963dca93547716b9af8be9d465e16830c229c84ba0ed5ba"],
6852
+ ["previews/showcase/aperitivo-ruby-pour.jpg", 129097313, 467078, 8, 468094, "fe6391c735b0af9c0af39664992b1750720d458f4a43d5b87dea60a33f497c36"],
6853
+ ["previews/showcase/ridgeline-boulder-gap.jpg", 129564464, 617408, 8, 618216, "bb3e723e42c2b15ed175e7607f8f2d67b25b54504f2b6435faa7e5cb091e9059"],
6854
+ ["previews/showcase/spf-poolside.jpg", 130181936, 483582, 8, 483835, "f26e683ba9698e27cf85fdab51ba299984056885a5d2010cee8adaedabfc1bde"],
6855
+ ["previews/showcase/72-dark-palm-shade.jpg", 130665588, 594142, 8, 594509, "94ee8df1466958b95defe703d5edd6225b75e3ca104987d98615d90faa9dd017"],
6856
+ ["previews/showcase/hibiscus-flower-nest.jpg", 131259802, 597420, 8, 597576, "07e44bf91babf42dd098283152df17ab0d21668fffc0a04b69772e8a9f46490c"],
6857
+ ["previews/showcase/hibiscus-long-lunch.jpg", 131857293, 394239, 8, 394271, "14aa5697df3678e4620637f7fda0aab9ac5cb62de90bcce1562822094a225f63"],
6858
+ ["previews/showcase/collagen-morning-shake.jpg", 132251606, 300992, 8, 302115, "85ef0e5d9d3e91136e3092383bd152a12afacaaff8b9a79764aa21b557092e92"],
6859
+ ["previews/showcase/puffer-snow-street.jpg", 132552668, 461020, 8, 461275, "6ac6689b03f66a2cb302e22e7b83343d4fcdccee0849ff13ca259699230259f5"],
6860
+ ["previews/showcase/open-buds-surf-check.jpg", 133013760, 398457, 8, 399282, "5588a4b7c3db03d71ae536551ce866575d4804c0e6eca1a97a2d05205a2e5d8d"],
6861
+ ["previews/showcase/sun-coin-white-glove.jpg", 133412289, 264727, 8, 265701, "1ba65ce7f2884659dc84b74afbd50e38533c567aa5baaed3dc1cb754a5429efe"],
6862
+ ["previews/showcase/court-72-fisheye-steps.jpg", 133677090, 481266, 8, 481531, "a7de7912ffc43e6ce2ac046b01ea44f2840ee090f4596092c01ab7d5068d7954"],
6863
+ ["previews/showcase/cricket-jumper-green.jpg", 134158428, 504528, 8, 505757, "548a9bb982b2fa34e7b5cfa63fcbed16e0cfbf0d9340c910fba9bc2a1c9736af"],
6864
+ ["previews/showcase/noir-cedar-coal.jpg", 134663023, 286097, 8, 288735, "ca873a752009be35b773d396997981d392adb556fbddb13880cd93cfcdb76a1e"],
6865
+ ["previews/showcase/over-ear-pool-edge.jpg", 134949190, 303571, 8, 304484, "ab1da86b9fbce094ff9d6a43f0c2fe40e360ac8a5a3bfe5d0c23888e553a4faa"],
6866
+ ["previews/showcase/over-ear-glass-blocks.jpg", 135252834, 415828, 8, 416418, "94b86190a58f8cce67e133b13faf6403003c1404516a804ff0d0b1a7bbf8413e"],
6867
+ ["previews/showcase/ridgeline-chalk-sprint.jpg", 135668736, 433645, 8, 434618, "92ff9de7c2497ca196119b02b2c4224f181ec8efaba48be8086500961a69782e"],
6868
+ ["previews/showcase/yuzu-flash-walk.jpg", 136102448, 359961, 8, 360305, "901e3039f2ee5683036a1dc3384bc1867a6b1741feb2e8cbc623169566eb4128"],
6869
+ ["previews/showcase/lounge-chair-snowfall.jpg", 136462482, 426183, 8, 427560, "33e6416f00a9de44081ae29af7004c34d770e9572c779ce1abebae2c6c687a27"],
6870
+ ["previews/showcase/open-buds-hands.jpg", 136888732, 105446, 8, 107086, "a773b5169dd8a315a36a54faf0e1e3e0973c482fdf350ffc08a8620b3e50ba86"],
6871
+ ["previews/showcase/orris-salt-pan.jpg", 136994244, 374497, 8, 377469, "766c4b711adcc755d2e7ed0d524d9e4bddc80bdd58e047c948d62b0efd876f11"],
6872
+ ["previews/showcase/bowler-bonnet-rain.jpg", 137368811, 353544, 8, 353904, "77ed6fafc54455e4522ad76bcfb36c70e02d5677a99291973c01f0944b625f9a"],
6873
+ ["previews/showcase/aperitivo-tomato-vine.jpg", 137722428, 418385, 8, 418676, "dd8938ca99837d1aeb18239f7592f2fc148e9eda777e9ec3af593eb149a1d734"],
6874
+ ["previews/showcase/field-watch-boulder-gap.jpg", 138140888, 521047, 8, 522161, "0754e085f0593f695ba9cd928713e46828dbdd2b7ec91be8986974e83eed3b73"],
6875
+ ["previews/showcase/sun-coin-hair-nest.jpg", 138662005, 526021, 8, 526515, "9c21d492242de5a95e2b0678ba3468b53c761f0fcb084d99263689e7c5a6e122"],
6876
+ ["previews/showcase/chug-courtside.jpg", 139188092, 352210, 8, 353326, "f7f479228a6b5264c0bf976f3805bdfc880cbb951b9c6407fed4f940340f8194"],
6877
+ ["previews/showcase/yuzu-container-sill.jpg", 139540373, 407568, 8, 407905, "04eb421f05f9c1371b2c37304a2d2bcd1ecce0b7e7929559e6331248460b3e56"],
6878
+ ["previews/showcase/lounge-chair-travertine.jpg", 139948016, 392061, 8, 393662, "687ca794a65420542e36d43335f3f450a55c9c7bfcf88df6001a5c72ead494b3"],
6879
+ ["previews/showcase/noir-cedar-smoke.jpg", 140340145, 284276, 8, 285257, "253842c4dc8486aebd83d58e599862b5420b79669bb5ca839d12d2f6e66ee7cb"],
6880
+ ["previews/showcase/casserole-long-table.jpg", 140624493, 250913, 8, 252082, "2f180858030400f473463b08fd46912946e45d7f06b106d4f37fc1ad24ce1594"],
6881
+ ["previews/showcase/c15-apricot-ledge.jpg", 140875475, 131e3, 8, 134257, "c88dd5b287a1369a70e475a0c534498b74923e9b843dba32b6f9c88dd4fd4b26"],
6882
+ ["previews/showcase/spf-salt-flat.jpg", 141006540, 313576, 8, 313890, "b1ef8a1ad76fccad5e590e4767369cb913f932c218068dd9c7ef37ec456e734a"],
6883
+ ["previews/showcase/acetates-salt-flat.jpg", 141320186, 362384, 8, 363010, "284fa306e9a853869bfef3774bd04ae40c9527cf3b59074626c052a455f9db96"],
6884
+ ["previews/showcase/fig-leaf-still-life.jpg", 141682641, 282726, 8, 283800, "ea99a818b4059423185cfab7197f1abf3eaad1eae41b1afd9907635cb489bba6"],
6885
+ ["previews/showcase/puffer-foil-jump.jpg", 141965435, 710691, 8, 710783, "64610d572f595d99908bbd8ef3f55d3ba2861e60d331a248419451680cb56174"],
6886
+ ["previews/showcase/gummies-moonlit-pillow.jpg", 142676200, 284124, 8, 285488, "780d7c11e9d65c0001c72f8698958dbc46f62325df3b62cc400fbb33bb7f5539"],
6887
+ ["previews/showcase/sun-coin-collarbone.jpg", 142960395, 323196, 8, 325224, "5d210ce5e097e4b306cc55e07e0c236216369ae9a3e3288b1d9e821cd3bbb41a"],
6888
+ ["previews/showcase/acetates-silk-drape.jpg", 143283662, 395881, 8, 396758, "e312dd3e7cf0da98bca984742f856aa20038b3c85b0ede05dfcf327b49af4e1c"],
6889
+ ["previews/showcase/puffer-container-lean.jpg", 143679616, 377474, 8, 377650, "a3576d5767ae881b9defc4b4c056a636b405a782f9b6a53955d195d6ee6e8c29"],
6890
+ ["previews/showcase/green-04-ingredients.jpg", 144057162, 578786, 8, 579273, "4e86534b99e637477f7d9c43722e9c17d475a3073c33a84071f1a1cbb7e4fa42"],
6891
+ ["previews/showcase/wash-slate-shower.jpg", 144636017, 496998, 8, 497046, "07be5ea34647b4ce617291cf458d54662e1a8834d2df260a17f410ca7dc55637"],
6892
+ ["previews/showcase/bowler-car-exit.jpg", 145133082, 329443, 8, 329640, "1554d132a75dd621f1a1957e3b0b0ee7576f778f5096e34116a97a0b645873f7"],
6893
+ ["previews/showcase/72-dark-bite.jpg", 145462589, 371628, 8, 371943, "3acb0341cf6abe8ea35668d563a1c9ba720b6997a8c50641b373733ceb926528"],
6894
+ ["previews/showcase/yuzu-arch-lean.jpg", 145834283, 204215, 8, 205293, "ab2e5cbc8c58dac00d0f511bcf5f61b4a42da86fc3bd704130ce75d953ecd67f"],
6895
+ ["previews/foil-tent/ref-02.jpg", 146038606, 397544, 8, 397590, "6f3177ed7e2b73bd079707453b7b632b5a852ae1f08e8d2effdf6cee3151038d"],
6896
+ ["previews/foil-tent/ref-03.jpg", 146436209, 354820, 8, 355597, "dbdafeda217b53bfbcf4a11dbba25a461016e7b8562fc34ca9d5c3338402ae8b"],
6897
+ ["previews/foil-tent/ref-01.jpg", 146791088, 695873, 8, 695832, "3c777da99e5a27fbe1524565573096c9d36a7a944b51809c7d2fd1b9f15eeb9b"],
6898
+ ["previews/foil-tent/ref-04.jpg", 147487020, 420208, 8, 420260, "0c3a556842558069ab93a6fe548279b08385fbae8399052c46b981c51cf233e5"],
6899
+ ["previews/foil-tent/ref-05.jpg", 147907287, 412936, 8, 413283, "4cb195a0706619afeee66790a2ecfe0dac6522a4f646f20660db0d7d7858c411"],
6900
+ ["previews/green-tyre-stack/ref-02.jpg", 148320345, 310398, 8, 310701, "3780b67a5f57c6a508f9f5a654e97f21ab5d893ef5cda09044f42deb6182d19a"],
6901
+ ["previews/green-tyre-stack/ref-03.jpg", 148630809, 339856, 8, 340068, "a195284b7f3f36f61318e61a1efb9e414b165006d162d1b62134dcf0a85fbe83"],
6902
+ ["previews/green-tyre-stack/ref-01.jpg", 148970731, 289238, 8, 289799, "22e4c3221f85ddd1b338d0dee1f5cdc031c2d56cd58004b058a260c4c1f9f3cc"],
6903
+ ["previews/green-tyre-stack/ref-04.jpg", 149260035, 306477, 8, 306898, "80ad532492cd4940fbf4d25f92db24d0992886b766f3afdb41ac6adf212e420b"],
6904
+ ["previews/green-tyre-stack/ref-05.jpg", 149566578, 238036, 8, 239168, "c6c8c65d0db74e0f247efdca0cee18832b8ff60658dd25b70f098c0290734ef4"],
6905
+ ["previews/lantern-room.jpg", 149804669, 94701, 8, 94774, "20321e980146a82aed13898ec1e1779126b97890dfb3ece02f8e235559dcfb9c"],
6906
+ ["previews/cobalt-color-room/ref-02.jpg", 149899494, 212402, 8, 216546, "8d023b337ad20ea085b424c30e311f0ac67d66abd2af53fbf7cb4f2a73af71d1"],
6907
+ ["previews/cobalt-color-room/ref-03.jpg", 150111963, 378394, 8, 380280, "589c5acf85cec595ef0a984e98fac5a8d0cd99d96e8698bd96173ce66f18f9a6"],
6908
+ ["previews/cobalt-color-room/ref-01.jpg", 150490424, 199545, 8, 204696, "4324d296d4af6888e33dcdab55553ff632d8c81d415a47cc8facd7ac96be9876"],
6909
+ ["previews/cobalt-color-room/ref-04.jpg", 150690036, 221643, 8, 224565, "2d1c16a39a5a3229b507b1f151b0f6d2c04d1c68ccf673abf7b2fc14c5201bb8"],
6910
+ ["previews/cobalt-color-room/ref-05.jpg", 150911746, 158014, 8, 159739, "4b79a626da1c47fa3bb18d6929df53cd4b04963abce2617966d3a1016dfaf099"],
6911
+ ["previews/teak-bath-caddy.jpg", 151069818, 147093, 8, 147114, "f1b0ceaac02989d6277021e9dc487e061ef0d39e9cb125fdc70a28c8f0d57eaa"],
6912
+ ["previews/linen-morning-room/ref-02.jpg", 151217037, 363575, 8, 363799, "92b2cc5bf528257d45c6821e873a996eb11d18cb20f7216f2efd3f435dc65ac3"],
6913
+ ["previews/linen-morning-room/ref-03.jpg", 151580680, 402627, 8, 403083, "4cefb80c163cb55d440678015a7fde23b2d49b6e7a1395167916e5da2fd8851e"],
6914
+ ["previews/linen-morning-room/ref-01.jpg", 151983375, 307757, 8, 308107, "5bbca414220f76f0525d536321ace8ca46b7a576eac26a1cba4d3c32dad585da"],
6915
+ ["previews/linen-morning-room/ref-04.jpg", 152291200, 308477, 8, 308674, "d8c478b92bf63712063a5264ec80392ba19c0390b34290a766aa563363142285"],
6916
+ ["previews/linen-morning-room/ref-05.jpg", 152599745, 274658, 8, 275468, "44b0e56f87deaf06605ba482a8b7d5521cd499d7f9566304d7542dd07626c8b8"],
6917
+ ["previews/paper-garden.jpg", 152874458, 117585, 8, 117738, "960437eb2a5dcbc6eb5fb65a1636101ae17193efe6cf49b2001b81bb5e5077d7"],
6918
+ ["previews/sky-color-block/ref-02.jpg", 152992163, 125222, 8, 126632, "629f7aa77ea6a6937e53ae1af359e8819904531005df54a00f1cc8cc06b988f5"],
6919
+ ["previews/sky-color-block/ref-03.jpg", 153117450, 249632, 8, 250383, "41755b57c3fe632e84ef5986735775b5f65d9d525cb5ad94a558cce8c6ba40a4"],
6920
+ ["previews/sky-color-block/ref-01.jpg", 153367147, 67388, 8, 69722, "b73dce561d8045d472cad9de5b65d855031ddaed5d232f44c20ef1452ae1bb53"],
6921
+ ["previews/sky-color-block/ref-04.jpg", 153434600, 130320, 8, 131240, "4c0e6e9585c6b0392634fcd0307916809adfa9840c512c3066f1b51f7325baab"],
6922
+ ["previews/sky-color-block/ref-05.jpg", 153564985, 121782, 8, 125626, "51b1781e7f3e3e166d34f1fd49088654dda600ed6d682aabd0730d9546e0e6f4"],
6923
+ ["previews/white-glove-tray.jpg", 153686826, 104060, 8, 104293, "6ad0c2573f85287f2af4b358e9708b79fbd43044ff0a928374ca3437cb2fdb68"],
6924
+ ["previews/cobalt-color-room.jpg", 153790946, 63787, 8, 64585, "d83a33631d22f31d1c4705f738a38aa4a5587ef26038eb4ad3f9c7fa57a7cdb7"],
6925
+ ["previews/coal-blind-light.jpg", 153854792, 95481, 8, 95616, "630c35b23f6d709df0a2c4cc3b42c7c83e37fcc9e37fbb81114eea0a44122146"],
6926
+ ["previews/hand-studio.jpg", 153950327, 55361, 8, 55581, "73a29a826b409474172e5a1d0b04d459a8a211e7879ac076003a6eaca24fff03"],
6927
+ ["previews/pink-ball-pit.jpg", 154005744, 107941, 8, 108068, "c3f4c9e4de71860fa43829dd993f8470ca3f7fa4191a8e6fc9b82be11ace0d16"],
6928
+ ["previews/tonal-apricot-ledge.jpg", 154113747, 58908, 8, 59100, "d6ff98ae1cf304e7dc130156cb3d642cd6f117c324a0a83c57a6ec0e65568faf"],
6929
+ ["tonal-apricot-ledge.json", 154172709, 623, 8, 1209, "9fa2edf470be877c6a00e9e725e46a2d10f48496e1ff2a8956991c3739a2441e"],
6930
+ ["pink-smoke.json", 154173377, 549, 8, 1065, "d9ca0135472c272dac9fbca681c399569e176a6c3a99e4f2432e9330b4a8be71"],
6931
+ ["showcase/orris-waterline.json", 154174024, 477, 8, 1026, "b6f628a47bc3dd3d2074eca5d628bcaa4be44ce16c30a54622288f396ae38e41"],
6932
+ ["showcase/fig-leaf-still-life.json", 154174564, 443, 8, 869, "dd12b45493ae43fc1ace086b761b840b62c0e4497a71da3a71138ac17c79bcbd"],
6933
+ ["showcase/chug-waterline.json", 154175065, 405, 8, 883, "96b1312e9c418eafac6edcef5c2b9e2d4adf78af19d207fb43a8658ccabcd23f"],
6934
+ ["showcase/cricket-jumper-green.json", 154175534, 430, 8, 901, "8201b3a7008b9019283d057f67e39b0ef5282ef2d6c3d4c05ba9df95e8422fd4"],
6935
+ ["showcase/spf-yellow-field.json", 154176024, 372, 8, 756, "02a4fc4a2104cd0515078fa7515da8187137f6d4bd2cfa7ae646542f62c601e5"],
6936
+ ["showcase/court-72-fisheye-steps.json", 154176462, 453, 8, 924, "177097cfa0de7ec5fdcb2a7016859bdb47976d58e58b12b2caf6fdc0eae45ba5"],
6937
+ ["showcase/capsule-stoop.json", 154176972, 495, 8, 1012, "795bb38288b57854bd3130d746ee5023b0d3654c72a02c1827acd55033a464a6"],
6938
+ ["showcase/hibiscus-flower-nest.json", 154177531, 419, 8, 825, "2a2519a8d867f9895b28a4f377d8d62d2ef414e13f469b380fe21209b950004a"],
6939
+ ["showcase/c15-apricot-ledge.json", 154178011, 377, 8, 806, "40edff73d95e96b65df3720c147f4bc16cc55e24e6fa97b4a0154fa00111fde4"],
6940
+ ["showcase/puffer-container-lean.json", 154178453, 456, 8, 1003, "b503c23c0ad91990fa041d1445cebc71ab24680d6b6f52529489bd0c60a53221"],
6941
+ ["showcase/aperitivo-pit.json", 154178966, 540, 8, 1161, "76dfb56ac263ad88a5f824c6b913f15ab7f8c6e0bbd7c529824fa612d3252f90"],
6942
+ ["showcase/wash-fig-leaves.json", 154179565, 385, 8, 775, "9d7281312aee37426b8184179817db7c75ceec3341bdb98e2f835c1c57a1db64"],
6943
+ ["showcase/hoops-honey-drip.json", 154180010, 418, 8, 834, "7001e4235dd640fab6349bc06435cf75c794ae2ff16f5eb72e3fae5e3a72fec4"],
6944
+ ["showcase/over-ear-balloons.json", 154180489, 429, 8, 931, "40e2f6ea845e1c30a5ec447db60ac52cb9d4e490c0d182b13b528966115e0096"],
6945
+ ["showcase/green-04-ice-trough.json", 154180981, 390, 8, 747, "b1977a95b67860b75a966103973f36370bf95b9f0603b5acc7b0c564a2269343"],
6946
+ ["showcase/puffer-snow-street.json", 154181433, 487, 8, 978, "4c9b28dbb3ea528cbbe23ecf24ef6d4c58f5618261e867c086be05a221a8e2a5"],
6947
+ ["showcase/hibiscus-pour.json", 154181977, 442, 8, 871, "db1fd95941ea9cd587bfad92f9668763214c1507f31c05963f7ce8f1d3a5f58f"],
6948
+ ["showcase/fig-leaf-frost-window.json", 154182484, 392, 8, 788, "0a340cf00aa216de55ebd16bfa865ad29e48bd91bb4c4f180f5d6ca38202e64e"],
6949
+ ["showcase/72-dark-bite.json", 154182932, 393, 8, 796, "e17774b1203e6435a23dcb60c189d08fb95904290c8a135fdac49c4a03f72955"],
6950
+ ["showcase/bowler-bonnet-rain.json", 154183387, 463, 8, 902, "ba77de0e1a1a715c91cbdcb3be7dfd9d2704cd66c8264e21ad5615186c249577"],
6951
+ ["showcase/noir-cedar-char.json", 154183909, 529, 8, 1047, "8f5d28b4c6929070773701d4143eab5b52bb18aece64b2c7830c0301d8a355a8"],
6952
+ ["showcase/ridgeline-chalk-sprint.json", 154184504, 494, 8, 1065, "2ac58a3dc51f5be653c940e78f7a428d6752b1f429e34633f9f90325804668c3"],
6953
+ ["showcase/orris-salt-pan.json", 154185056, 487, 8, 948, "aceb54c8e329dd332aa8e79d1cb49fcfe7ce902d3bbbe550cbd4e2a6753e2337"],
6954
+ ["showcase/scarlet-beauty-dish.json", 154185606, 471, 8, 1010, "e5830af63ccd729a03f671680f3f1bd6e42ebeed1469c101a360fa1e70919906"],
6955
+ ["showcase/casserole-long-table.json", 154186141, 366, 8, 778, "6fdcc2a74bf892ded30088d8151f877459725d4cc85ad2db2fd0308f3f4d1a7f"],
6956
+ ["showcase/aperitivo-tomato-vine.json", 154186572, 367, 8, 818, "365612792eb2a1ca1badec1b31727e8412ff2296196bf0fe98830f57985593a5"],
6957
+ ["showcase/ridgeline-boulder-gap.json", 154187004, 437, 8, 939, "da53c7d801364beee6276964f0fcebf1235257b66b32dd722f324e1abd9d3373"],
6958
+ ["showcase/green-04-ingredients.json", 154187505, 489, 8, 951, "cda383eeb6c878ddd00d5299c88896618adccad93f165fd012867202a3a99c76"],
6959
+ ["showcase/sun-coin-collarbone.json", 154188057, 427, 8, 864, "3ad5cdb45de4abc3923300b16109df5b5dc4ac358586289f5bab853f53b22d51"],
6960
+ ["showcase/sun-coin-hair-nest.json", 154188546, 403, 8, 860, "21a1a7008e2903fb30a1f73e5889907457f22629ecd4d717d6c6fab23ff5e131"],
6961
+ ["showcase/scarlet-red-blade.json", 154189010, 402, 8, 856, "39229b08daeab985e97c60163fe104fe38422ba1146ec8da643da4c0e964db6d"],
6962
+ ["showcase/puffer-ghost-snow.json", 154189473, 516, 8, 1024, "b98eb47edf287bcd714d9eb7c497a4fc4fbbbea5cb5c5b9e5e63af76ac8cbfd1"],
6963
+ ["showcase/bowler-cobalt-room.json", 154190051, 408, 8, 881, "1baedfc1cee551c4a1490ae352b13b35a4e93cc0c661d652b8b4bdaced9f30e1"],
6964
+ ["showcase/orris-window-stripe.json", 154190522, 432, 8, 912, "34c6b9f64123e4cf1777367ee0a78b4acf9f8d6803e2cc0056d9973521d7267c"],
6965
+ ["showcase/barrier-cream-caddy.json", 154191017, 357, 8, 773, "290ac812fecc7f37d8243e3bdc7f7a350d82d2ca5069437144ee0348232f36dd"],
6966
+ ["showcase/puffer-foil-jump.json", 154191434, 450, 8, 955, "8350b74ee65f35b7ff0b817b05f870ee37d0803a72e8b89fdd57a654ff142338"],
6967
+ ["showcase/barrier-cream-ice-core.json", 154191950, 368, 8, 815, "7b4f9cfac4fc1fdbf1632e5275eca07254640d7960a51ffdcc40ebe68b6f77a6"],
6968
+ ["showcase/ridgeline-tyre-top.json", 154192380, 438, 8, 935, "dc96a5333b222228cb0707259adbd0c79e8d3d35b0c507409d7020a75946c0f8"],
6969
+ ["showcase/scarlet-swatch.json", 154192876, 450, 8, 899, "b26af2aa02e7818f60961bcf7b4003ac708d3811f82c6b16c1d58541861802cf"],
6970
+ ["showcase/spf-salt-flat.json", 154193383, 509, 8, 1058, "939641efcfeb48ad99fb74e85793907bb2778e8d607a61988992195ac41083e8"],
6971
+ ["showcase/spf-shadow-hand.json", 154193951, 363, 8, 764, "3b8d7ad49dd89e4afe27fe132f4a3462b4b8a77540a67e14435fe40313cd0ee8"],
6972
+ ["showcase/chug-courtside.json", 154194372, 425, 8, 928, "bd47a2fc561a00c2d411390bc938ec6da950cda7adbb353262de27f96fc70e1a"],
6973
+ ["showcase/hibiscus-dew-bed.json", 154194857, 405, 8, 866, "67d0f375dbfab63323b7bd7c7dc530e3e8eadd7d1628adf57e6d48d8ef36266f"],
6974
+ ["showcase/lounge-chair-travertine.json", 154195329, 364, 8, 795, "6ee7d93720c78d6d5702bac92d3cacab03df98eb941d0848c4c1ce0ea36aaba0"],
6975
+ ["showcase/acetates-salt-flat.json", 154195755, 457, 8, 971, "8baa67a1bbbe618dae29df396713532fbe0e3d85cfb02935444fb0dccc857272"],
6976
+ ["showcase/collagen-berry-splash.json", 154196277, 368, 8, 725, "02fe17a114f13677a3a3116ade083fa5b951ff15419ce08689a43b870b8b8a78"],
6977
+ ["showcase/acetates-ice-block.json", 154196707, 514, 8, 1026, "2d8884110a3c6ceb71074a50e31463ac76c89ad1e90c549117aac51888a76f05"],
6978
+ ["showcase/lounge-chair-reading.json", 154197285, 403, 8, 847, "22828c611b9fbc45ab36a72fbc39bfbea2967b7e32b09a7ec29f3b1de9de56f5"],
6979
+ ["showcase/lounge-chair-snowfall.json", 154197753, 541, 8, 1063, "b17ecb508a05655c49e9c74b5daa833833b2068cb473afd360790f6622468ab9"],
6980
+ ["showcase/noir-cedar-coal.json", 154198353, 361, 8, 773, "3f178e0941d370477a7bb854e7db5c86583dc2589c4a9a3bfa3cb9852b741626"],
6981
+ ["showcase/fig-leaf-lanterns.json", 154198775, 428, 8, 922, "3a3f822e484c44a85468a25d89d3a32762855889294b2e4e1e86a0fb7a8f0e6e"],
6982
+ ["showcase/wash-slate-shower.json", 154199264, 421, 8, 831, "44d65380b87823258e52cd715d0ff11aef21a77abf3f88937f2343b5e16d6ae0"],
6983
+ ["showcase/ridgeline-stream-leap.json", 154199750, 587, 8, 1198, "5ee84ef80b8e5140b8a295b4df79747d7fc058ad43e4a7a1ec435080fe67a80c"],
6984
+ ["showcase/over-ear-arch.json", 154200394, 393, 8, 854, "02fb7239c825e0872cdcc4db6561f773a8c260f6c99efd36f5f25f96135ea678"],
6985
+ ["showcase/court-72-checker-sit.json", 154200851, 412, 8, 905, "d1792c6e45d30261453a3d20000f68947ac3829ad238d549d365c59a753d3b7d"],
6986
+ ["showcase/chug-mountain-stream.json", 154201327, 404, 8, 800, "966e98ef7a96e976924eca79eb4e4f89d320807000a40a703038cfc064707b12"],
6987
+ ["showcase/gummies-bedside.json", 154201790, 403, 8, 843, "1b4484dbc76cb7f96c30687975c73d074e99fa5ef6aab5be2bf1e632a0845314"],
6988
+ ["showcase/field-watch-helm.json", 154202253, 454, 8, 928, "bf0a558da4a3e6ed8c3e502b94565a2fa7d23747a6db62b4fe3d6d615bfac4a6"],
6989
+ ["showcase/court-72-salt-flat.json", 154202769, 374, 8, 810, "86706ac624569c421d4e8c6b29d91ed6124edb0332607f06e034729637370e08"],
6990
+ ["showcase/cricket-jumper-sheets.json", 154203208, 412, 8, 891, "dd2fb68020782e6c4c02c8db11062ecc59bf44a1fd37eed054c0bacc716deb5d"],
6991
+ ["showcase/yuzu-ice-burst.json", 154203678, 548, 8, 1042, "f1c7447d644b0c31fa175df1a035fc1a0402cf44026b01492ea16c565a24e83b"],
6992
+ ["showcase/scarlet-summer-laugh.json", 154204290, 485, 8, 984, "1959c6bfcc12d7f8f8d3f9b48e04fbbf3da8ff448ed6ecf0cf24a2eca7e05ef5"],
6993
+ ["showcase/casserole-tomatoes.json", 154204837, 444, 8, 941, "5341e5de78c04954b6b341fc5a1b6ed6c9718b794a90439443fa4770f139e8da"],
6994
+ ["showcase/72-dark-palm-shade.json", 154205343, 358, 8, 754, "0b0eac42273f8173b50dea5ac438a557dd6ea524a4fd2443343ddc5eea8a5c72"],
6995
+ ["showcase/casserole-steam.json", 154205760, 399, 8, 783, "2d3a13f1452cc1040e415793d7b66ead37ba13c4805bfa44cee9f38ae51817d5"],
6996
+ ["showcase/collagen-paper-garden.json", 154206224, 316, 8, 708, "481dbf2756f6798ef6bc8c0930d9d8b82f2cefe77f9552eb33ff4f21fa75bf3a"],
6997
+ ["showcase/sun-coin-sundial.json", 154206600, 397, 8, 774, "b9f2a997103669e7c4ab11b7b0069abafb974be09bcf9709b4da5cd0ae57e71e"],
6998
+ ["showcase/orris-collarbone.json", 154207057, 499, 8, 1036, "902fad009143d4fa3924120c5b30851e37d3c5a21171ffbadfc5677b52e98045"],
6999
+ ["showcase/c15-orange-pool.json", 154207615, 407, 8, 800, "6f0dae1e9896a3e65ae3eaa86f69281a45184f241a10e3ac95c84df234e30901"],
7000
+ ["showcase/aperitivo-ruby-pour.json", 154208085, 436, 8, 937, "3599f890b2332800f73065cee4c1c71ee816a095c69152f3d596d23674454fed"],
7001
+ ["showcase/wash-steam.json", 154208575, 432, 8, 864, "0f15fbd0e910241a43ef4ed01f70cf46321f600ac2410ac1f89b8b9779169ad1"],
7002
+ ["showcase/yuzu-arch-lean.json", 154209065, 491, 8, 1029, "b2eeaca5ee37d2b15d676a2d8f21bd9362de06f7dc51a2b1ca3299b4adc5b649"],
7003
+ ["showcase/hoops-pink-smoke.json", 154209616, 399, 8, 879, "349096e89e00e189a354695aa04fbb08ee37c9e890e2e305d91d3af8098b7fba"],
7004
+ ["showcase/c15-dew-bed.json", 154210070, 413, 8, 860, "a9b9a5a40e504a79dda643433ecba81bca9660eb12a0057f734615dbf7b415bb"],
7005
+ ["showcase/fig-vetiver-travertine.json", 154210549, 379, 8, 839, "4f2633b8636f90fe75fe1542932711ec06ee2bd60664a7296be40d711617afc4"],
7006
+ ["showcase/noir-cedar-smoke.json", 154210988, 423, 8, 854, "b4637505975bddc6b0d3162cc4a9c71da5de16994f8652aa6cbe3a70901f9c1b"],
7007
+ ["showcase/yuzu-container-sill.json", 154211474, 423, 8, 902, "741376d20b4958bb74752b505bf00f298b53c1f7a4e74054eb4eb4af8f7fa1d3"],
7008
+ ["showcase/spf-poolside.json", 154211953, 433, 8, 869, "f47979d00b72c99ddf4bbcff899998e69c6d9994e1b79f3cbb7abb1bd7b3e64d"],
7009
+ ["showcase/chug-long-shadow.json", 154212446, 379, 8, 798, "3c2e0b357de1ffaf40ba865acfa7c305514f35061dc9afacce3c8de8cfcec288"],
7010
+ ["showcase/cricket-jumper-hamper.json", 154212890, 414, 8, 823, "de85d22590e602b401892608e613af1addeb719eed47e8e3f3ee29fc26ea7812"],
7011
+ ["showcase/bowler-red-blade.json", 154213364, 444, 8, 971, "fc885a8331e9ac59e8c1e53bbbd6beb6537e7708d18c3b901dcd60639089c64e"],
7012
+ ["showcase/open-buds-vinyl.json", 154213867, 384, 8, 766, "955652ed00321859610ee7678084d03634aed7fc71a9ce07968dcde048f98779"],
7013
+ ["showcase/hoops-sculpted-hands.json", 154214315, 379, 8, 805, "1ebf46f9262127e37205da75f675dd1920fc22847f9d9edb85128b7cb4049f88"],
7014
+ ["showcase/hibiscus-long-lunch.json", 154214757, 425, 8, 917, "90108c04dd092c7825335f1c7b80c39a1857e1d4dcae581ccb48990b8c844747"],
7015
+ ["showcase/capsule-block-tower.json", 154215245, 331, 8, 741, "9e4464b7110f040a0dc2aaacde572ea23e7ce8d166e60f0599702b056d8e52a4"],
7016
+ ["showcase/field-watch-corner.json", 154215638, 426, 8, 923, "67c2ad7b50ba170ec45794bd775ce44a53b63bfb5c04d6d989d420635827af5d"],
7017
+ ["showcase/open-buds-surf-check.json", 154216128, 397, 8, 803, "235f44a37bfbdbf2b575a2776fad8d52b743ae3d2261df795a890bb8c082f44b"],
7018
+ ["showcase/field-watch-boulder-gap.json", 154216592, 453, 8, 1008, "b24303daae7c69409e107a098732380ade1340704419df1706d0d602933ada0d"],
7019
+ ["showcase/capsule-model-village.json", 154217110, 470, 8, 1025, "0d6414a289fec49a9f12368de2264d7b46cfd1fc51e2b9e33eae3252e600cb7f"],
7020
+ ["showcase/open-buds-hands.json", 154217639, 324, 8, 709, "b5265d7446afe0358346b27400769c569b3da79d15dfdf59028bf6c23144228d"],
7021
+ ["showcase/gummies-moonlit-pillow.json", 154218029, 385, 8, 778, "6875835e69d03a81b5ccc5175a19bf84f18200a7be86f6e0a7685b5bd4240fe4"],
7022
+ ["showcase/acetates-harbour-light.json", 154218480, 450, 8, 917, "ea4b0dc4836617681c6871066228ff2f8fa8219916e6d04a424659e99cac815f"],
7023
+ ["showcase/barrier-cream-cheek.json", 154218993, 432, 8, 882, "bb37c1c12f85cada52b169e327777472cbed8e461119510fd3a9a9caf748d6f2"],
7024
+ ["showcase/72-dark-snap.json", 154219481, 382, 8, 716, "52fee6622441f3b95aeca13ee82254975b32ca3cac8b2ae662047b6248fdfc49"],
7025
+ ["showcase/court-72-baseline.json", 154219924, 353, 8, 773, "4230d2d98acbc6fcc6fbafc94c724b09d94883f49370f0b47a8b18c911af93d8"],
7026
+ ["showcase/bowler-car-exit.json", 154220336, 498, 8, 1010, "6642b0aefe8f6f6e3167decea58e533ad82ff0be23676ce84ca44428ec66662f"],
7027
+ ["showcase/acetates-silk-drape.json", 154220897, 401, 8, 869, "5f6bf48d65364ccc74039293c3dae6fdc53814c789fc75eb973e37db742eb238"],
7028
+ ["showcase/aperitivo-chrome-bar.json", 154221362, 373, 8, 788, "40dcc9c68d2bf1351baa1d869a039de4e873ddbd1c42a8d286b0c08a23b44c05"],
7029
+ ["showcase/sun-coin-white-glove.json", 154221799, 364, 8, 767, "4d037ab10bd3565c03888e0279f60080988b62fd252513cedda94921783357aa"],
7030
+ ["showcase/noir-cedar-silk-drape.json", 154222228, 413, 8, 866, "47e23a470b8bd35b972babbb78f8dd0e62cfef047169f003d55c7e5663ab696b"],
7031
+ ["showcase/c15-morning-drop.json", 154222701, 453, 8, 905, "b03be219d0834fae7cd086d847b099afdb1b934e7e3fb0a8ea3053133df7ae56"],
7032
+ ["showcase/collagen-morning-shake.json", 154223220, 407, 8, 856, "19d422d30f2d527c97d09c2a7408dc1a154517f59c96725eeeaec96273ccf76b"],
7033
+ ["showcase/barrier-cream-oats.json", 154223689, 405, 8, 790, "d3065016fbb7c99c4f1c8df8546b89675a7d4b7d8d608853e7dbe30bb91483a5"],
7034
+ ["showcase/over-ear-glass-blocks.json", 154224159, 442, 8, 963, "50e3436b83cac86c05a6638a12c40af3d30fe07e903b77f65d047c7ef705dcfc"],
7035
+ ["showcase/yuzu-flash-walk.json", 154224660, 520, 8, 1028, "02f8b33aa86610e407c5b0e042159874fbc5854bca1923cded346a27dc9d5b27"],
7036
+ ["showcase/hoops-painted-canvas.json", 154225244, 464, 8, 1006, "769619fae2f887f66a2841fd8ff2e9f73ed136a4199c94935bb57dc2468f7ce6"],
7037
+ ["showcase/over-ear-pool-edge.json", 154225770, 432, 8, 848, "f1e141e400551622f69b2925d6683a2dd7ee57fd14d8aa4ef21cf13e3c4158f6"],
7038
+ ["showcase/green-04-track.json", 154226260, 420, 8, 864, "9c22e13ba2a356894f134935d139edc7118d6c4fd07951a61da7b4fec191c404"],
7039
+ ["showcase/field-watch-ice-core.json", 154226744, 409, 8, 854, "cdcb99ce999e30166fea6658fd4ddea4f9fdbad5b6089769424bbdbc8784f715"],
7040
+ ["showcase/gummies-cherry-heap.json", 154227216, 379, 8, 753, "145d1c04c1daae81d8fa66037675dfdd765c84db516f5ec22af961a40133768d"],
7041
+ ["sky-color-block.json", 154227645, 595, 8, 1125, "2f29b73fd05fe214b3398b7f29513323edb05816fe0af20960f3eda76c9813b2"],
7042
+ ["cobalt-color-room.json", 154228292, 586, 8, 1183, "fd712d73e14aede6afc4e4540c924d26864f2b4a43dd5f9bff7b6e562ef4e142"],
7043
+ ["ruby-syrup-pour.json", 154228928, 563, 8, 1082, "150fcbd581c9c57f519ac25615ff91baec90574fd0eb52110844fb936832e05b"],
7044
+ ["cobalt-container.json", 154229542, 559, 8, 1133, "2a8de6d2d9be943c0c0946063d4de315140153fd55cd063374be29a829127f80"],
7045
+ ["shadow-hand.json", 154230147, 516, 8, 1004, "50293939caa138b81c594d647dcff9bb7d710b01a64a983a449357565dc00a8f"],
7046
+ ["white-glove-tray.json", 154230714, 568, 8, 1119, "72b2bedb96f1549b2b8d41343ac34e37f849d34b2fffcf9c9db544e55bedb130"],
7047
+ ["studio-soft-horizon.json", 154231336, 631, 8, 1274, "13f05d789724467415bc5d6654693b769a1feb76983388cd5b02b857be809e67"],
7048
+ ["meta.json", 154232006, 58, 8, 60, "3b59dc9b4971ba7b41ee1bc6e0ae21a41e6fb30be1fce3b479014b992b33498d"]
7049
+ ]
7050
+ };
7051
+ var inflateAsync = promisify(inflateRaw);
7052
+ function placeOf(root, name) {
7053
+ const rel = normalize(name);
7054
+ if (rel.startsWith("..") || rel.startsWith("/") || rel.startsWith("\\") || /^[a-zA-Z]:/.test(rel)) return null;
7055
+ const dest = join(root, ...name.split("/"));
7056
+ return dest.startsWith(root + sep) ? dest : null;
7057
+ }
7058
+ var sha256 = (b) => createHash("sha256").update(b).digest("hex");
7059
+ var sleep5 = (ms, signal) => new Promise((resolve) => {
7060
+ if (signal.aborted) return resolve();
7061
+ const t = setTimeout(resolve, ms);
7062
+ signal.addEventListener(
7063
+ "abort",
7064
+ () => {
7065
+ clearTimeout(t);
7066
+ resolve();
7067
+ },
7068
+ { once: true }
7069
+ );
7070
+ });
7071
+ async function renameRetrying(from, to) {
7072
+ for (let i = 0; ; i++) {
7073
+ try {
7074
+ return await rename(from, to);
7075
+ } catch (err) {
7076
+ const code = err.code;
7077
+ if (i >= 5 || code !== "EPERM" && code !== "EBUSY" && code !== "EACCES") throw err;
7078
+ await new Promise((r) => setTimeout(r, 100 * (i + 1)));
7079
+ }
7080
+ }
7081
+ }
7082
+ async function put(dest, data) {
7083
+ await mkdir(dirname(dest), { recursive: true });
7084
+ await writeFile(`${dest}.part`, data);
7085
+ await renameRetrying(`${dest}.part`, dest);
7086
+ }
7087
+ async function keepVerified(partial, pin, onKept = () => {
7088
+ }) {
7089
+ const pinned = new Map(pin.files.map((f) => [f[0], f]));
7090
+ const kept = /* @__PURE__ */ new Set();
7091
+ if (!existsSync(partial)) return kept;
7092
+ const walk = async (dir) => {
7093
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
7094
+ const at = join(dir, entry.name);
7095
+ if (entry.isDirectory()) {
7096
+ await walk(at);
7097
+ continue;
7098
+ }
7099
+ const name = relative(partial, at).split(sep).join("/");
7100
+ const file = pinned.get(name);
7101
+ if (file && !name.endsWith(".part") && sha256(await readFile(at)) === file[5]) {
7102
+ kept.add(name);
7103
+ onKept(file);
7104
+ } else await rm(at, { force: true, maxRetries: 3 });
7105
+ }
7106
+ };
7107
+ await walk(partial);
7108
+ return kept;
7109
+ }
7110
+ function archiveFetch(bytes) {
7111
+ return (async (_url, init) => {
7112
+ const m = /^bytes=(\d+)-(\d+)$/.exec(new Headers(init?.headers).get("range") ?? "");
7113
+ if (!m) return new Response(new Uint8Array(bytes), { status: 200 });
7114
+ const start = Number(m[1]);
7115
+ const end = Math.min(bytes.length - 1, Number(m[2]));
7116
+ return new Response(new Uint8Array(bytes.subarray(start, end + 1)), {
7117
+ status: 206,
7118
+ headers: { "content-range": `bytes ${start}-${end}/${bytes.length}` }
7119
+ });
7120
+ });
6210
7121
  }
7122
+ async function installByRange(o) {
7123
+ const { pin } = o;
7124
+ const meta = pin.files.findIndex((f) => f[0] === "meta.json");
7125
+ if (meta < 0) throw new Error("the pin names no meta.json");
7126
+ await mkdir(o.partial, { recursive: true });
7127
+ const present = await keepVerified(o.partial, pin, (f) => {
7128
+ if (f[0] !== "meta.json") o.onLanded(f);
7129
+ });
7130
+ if (present.has("meta.json") && present.size === pin.files.length) return { kind: "complete" };
7131
+ let resolved = o.url;
7132
+ const probe = async () => {
7133
+ const res = await o.fetchImpl(o.url, {
7134
+ headers: { range: "bytes=0-0" },
7135
+ signal: AbortSignal.any([o.signal, AbortSignal.timeout(o.idleMs)])
7136
+ });
7137
+ const total = /\/(\d+)$/.exec(res.headers.get("content-range") ?? "")?.[1];
7138
+ await res.body?.cancel().catch(() => {
7139
+ });
7140
+ if (res.status !== 206 || !total) return "unranged";
7141
+ if (Number(total) !== pin.size) return Number(total);
7142
+ resolved = res.url || o.url;
7143
+ return "ok";
7144
+ };
7145
+ const probed = await probe();
7146
+ if (probed === "unranged") return { kind: "unranged" };
7147
+ if (probed !== "ok") return { kind: "mismatch", size: probed };
7148
+ if (o.seed) {
7149
+ for (const f of pin.files) {
7150
+ if (f[0] === "meta.json" || present.has(f[0])) continue;
7151
+ const from = placeOf(o.seed, f[0]);
7152
+ const dest = placeOf(o.partial, f[0]);
7153
+ if (!from || !dest || !existsSync(from) || statSync(from).size !== f[4]) continue;
7154
+ const data = await readFile(from);
7155
+ if (sha256(data) !== f[5]) continue;
7156
+ await put(dest, data);
7157
+ present.add(f[0]);
7158
+ o.onLanded(f);
7159
+ }
7160
+ }
7161
+ const index = new Map(pin.files.map((f, i) => [f[0], i]));
7162
+ const seen = /* @__PURE__ */ new Set();
7163
+ const wanted = [];
7164
+ for (const name of o.order) {
7165
+ const i = index.get(name);
7166
+ if (i === void 0 || seen.has(i)) continue;
7167
+ seen.add(i);
7168
+ wanted.push(i);
7169
+ }
7170
+ for (let i = 0; i < pin.files.length; i++) if (!seen.has(i)) wanted.push(i);
7171
+ const jobs2 = [];
7172
+ for (const i of wanted) {
7173
+ if (i === meta || present.has(pin.files[i][0])) continue;
7174
+ const last = jobs2.at(-1);
7175
+ const tail = last?.at(-1);
7176
+ if (last && tail !== void 0 && i === tail + 1) {
7177
+ const first = pin.files[last[0]];
7178
+ const f = pin.files[i];
7179
+ if (f[1] + f[2] - first[1] <= o.capBytes) {
7180
+ last.push(i);
7181
+ continue;
7182
+ }
7183
+ }
7184
+ jobs2.push([i]);
7185
+ }
7186
+ let reresolved = false;
7187
+ let networkStreak = 0;
7188
+ let stopped = false;
7189
+ const failed = /* @__PURE__ */ new Set();
7190
+ const read2 = async (start, end, onBytes) => {
7191
+ const ctrl = new AbortController();
7192
+ const onAbort = () => ctrl.abort();
7193
+ o.signal.addEventListener("abort", onAbort, { once: true });
7194
+ let timer = setTimeout(() => ctrl.abort(), o.idleMs);
7195
+ try {
7196
+ const get = () => o.fetchImpl(resolved, { headers: { range: `bytes=${start}-${end - 1}` }, signal: ctrl.signal });
7197
+ let res = await get();
7198
+ if ((res.status === 401 || res.status === 403) && !reresolved) {
7199
+ reresolved = true;
7200
+ await res.body?.cancel().catch(() => {
7201
+ });
7202
+ if (await probe() === "ok") res = await get();
7203
+ }
7204
+ if (res.status === 404 || res.status === 410 || res.status === 416) {
7205
+ await res.body?.cancel().catch(() => {
7206
+ });
7207
+ return "missing";
7208
+ }
7209
+ if (res.status !== 206 || res.headers.get("content-range") !== `bytes ${start}-${end - 1}/${pin.size}` || !res.body) {
7210
+ await res.body?.cancel().catch(() => {
7211
+ });
7212
+ return "network";
7213
+ }
7214
+ const buf = Buffer.allocUnsafe(end - start);
7215
+ let at = 0;
7216
+ const reader = res.body.getReader();
7217
+ for (; ; ) {
7218
+ const { done, value } = await reader.read();
7219
+ if (done) break;
7220
+ clearTimeout(timer);
7221
+ timer = setTimeout(() => ctrl.abort(), o.idleMs);
7222
+ if (at + value.length > buf.length) return "network";
7223
+ buf.set(value, at);
7224
+ at += value.length;
7225
+ onBytes(buf, at);
7226
+ }
7227
+ return at === buf.length ? "done" : "network";
7228
+ } catch {
7229
+ return "network";
7230
+ } finally {
7231
+ clearTimeout(timer);
7232
+ o.signal.removeEventListener("abort", onAbort);
7233
+ }
7234
+ };
7235
+ const land = async (i, packed) => {
7236
+ const f = pin.files[i];
7237
+ const dest = placeOf(o.partial, f[0]);
7238
+ if (!dest) return false;
7239
+ let data;
7240
+ try {
7241
+ data = f[3] === 0 ? packed : f[3] === 8 ? f[4] < 1 << 20 ? inflateRawSync(packed) : await inflateAsync(packed, { chunkSize: Math.max(64 * 1024, f[4]) }) : Buffer.alloc(0);
7242
+ } catch {
7243
+ return false;
7244
+ }
7245
+ if (data.length !== f[4] || sha256(data) !== f[5]) return false;
7246
+ await put(dest, data);
7247
+ return true;
7248
+ };
7249
+ const run4 = async (job) => {
7250
+ let pending = job;
7251
+ let attempt = 0;
7252
+ while (pending.length && !stopped && !o.signal.aborted) {
7253
+ const start = pin.files[pending[0]][1];
7254
+ const last = pin.files[pending[pending.length - 1]];
7255
+ const tries = pending;
7256
+ let next2 = 0;
7257
+ const landing = [];
7258
+ const got = await read2(start, last[1] + last[2], (buf, at) => {
7259
+ for (; next2 < tries.length; next2 += 1) {
7260
+ const f = pin.files[tries[next2]];
7261
+ if (f[1] + f[2] - start > at) break;
7262
+ landing.push(land(tries[next2], buf.subarray(f[1] - start, f[1] + f[2] - start)));
7263
+ }
7264
+ });
7265
+ const landed = await Promise.all(landing);
7266
+ const again = [];
7267
+ landed.forEach((ok, j) => {
7268
+ if (ok) o.onLanded(pin.files[tries[j]]);
7269
+ else again.push(tries[j]);
7270
+ });
7271
+ again.push(...tries.slice(next2));
7272
+ if (got === "network" && !landed.some(Boolean)) {
7273
+ networkStreak += 1;
7274
+ if (networkStreak >= 3 * o.concurrency) stopped = true;
7275
+ } else networkStreak = 0;
7276
+ if (!again.length) return;
7277
+ if (again.length > 1) {
7278
+ for (const i of again) jobs2.push([i]);
7279
+ return;
7280
+ }
7281
+ pending = again;
7282
+ if (attempt >= o.backoffMs.length) break;
7283
+ await sleep5(o.backoffMs[attempt], o.signal);
7284
+ attempt += 1;
7285
+ }
7286
+ for (const i of pending) failed.add(i);
7287
+ };
7288
+ let next = 0;
7289
+ const worker = async () => {
7290
+ while (!stopped && !o.signal.aborted && next < jobs2.length) await run4(jobs2[next++]);
7291
+ };
7292
+ await Promise.all(Array.from({ length: Math.max(1, o.concurrency) }, worker));
7293
+ const missing = () => pin.files.filter((f, i) => i !== meta && !existsSync(join(o.partial, ...f[0].split("/"))));
7294
+ if (!stopped && !o.signal.aborted && !failed.size && !missing().length) await run4([meta]);
7295
+ const left = pin.files.filter((f) => !existsSync(join(o.partial, ...f[0].split("/"))));
7296
+ return left.length ? { kind: "partial", missing: left } : { kind: "complete" };
7297
+ }
7298
+
7299
+ // src/content/fetch.ts
7300
+ var CONTENT_PIN = pin_default;
7301
+ var CONTENT_VERSION = CONTENT_PIN.version;
7302
+ var CONTENT_TAG = `content-v${CONTENT_VERSION}`;
7303
+ CONTENT_PIN.sha256;
6211
7304
  var DEFAULT_CONTENT_URL = `https://github.com/tonygorb/scenri/releases/download/${CONTENT_TAG}/scenri-content.zip`;
6212
7305
  var TIMEOUT_MS = 30 * 60 * 1e3;
6213
7306
  function resolveContentUrl(env = process.env, override) {
@@ -6217,96 +7310,194 @@ function contentCacheStale(env = process.env, custom = Boolean(env.SCENRI_CONTEN
6217
7310
  if (!contentCacheReady(env)) return true;
6218
7311
  return !custom && contentCacheVersion(env) < CONTENT_VERSION;
6219
7312
  }
6220
- async function installContentArchive(zipBytes, root) {
6221
- const staging = `${root}.staging`;
6222
- rmSync(staging, { recursive: true, force: true });
6223
- mkdirSync(staging, { recursive: true });
7313
+ function finishContentInstall(env = process.env) {
7314
+ const root = contentCacheRoot(env);
7315
+ const partial = contentPartialRoot(env);
7316
+ if (installedContentRoot(env) !== partial) return "none";
7317
+ const aside = `${root}.old`;
6224
7318
  try {
6225
- const zip = await JSZip.loadAsync(zipBytes);
6226
- for (const [name, entry] of Object.entries(zip.files)) {
6227
- if (entry.dir) continue;
6228
- const rel = normalize(name);
6229
- if (rel.startsWith("..") || rel.startsWith("/") || /^[a-zA-Z]:/.test(rel)) continue;
6230
- const dest = join(staging, rel);
6231
- mkdirSync(dirname(dest), { recursive: true });
6232
- await writeFile(dest, await entry.async("nodebuffer"));
6233
- }
6234
- if (!existsSync(join(staging, "meta.json"))) {
6235
- rmSync(staging, { recursive: true, force: true });
6236
- return "archive carries no meta.json";
6237
- }
6238
- removeRoot(root);
6239
- renameSync(staging, root);
6240
- return null;
6241
- } catch (err) {
6242
- rmSync(staging, { recursive: true, force: true });
6243
- throw err;
6244
- }
6245
- }
6246
- function removeRoot(root) {
6247
- let link = false;
6248
- try {
6249
- link = lstatSync(root).isSymbolicLink();
7319
+ rmSync(aside, { recursive: true, force: true, maxRetries: 3 });
7320
+ let link = false;
7321
+ try {
7322
+ link = lstatSync(root).isSymbolicLink();
7323
+ } catch {
7324
+ }
7325
+ if (link) unlinkSync(root);
7326
+ else if (existsSync(root)) renameSync(root, aside);
7327
+ renameSync(partial, root);
6250
7328
  } catch {
6251
- return;
7329
+ return "kept";
6252
7330
  }
6253
- if (link) unlinkSync(root);
6254
- else rmSync(root, { recursive: true, force: true });
7331
+ setTimeout(() => rmSync(aside, { recursive: true, force: true, maxRetries: 5, retryDelay: 200 }), 2e3).unref();
7332
+ return "moved";
6255
7333
  }
7334
+ var isPicture = (f) => f[0].endsWith(".jpg");
7335
+ var benchNumber = (raw, min, max) => {
7336
+ const n = Number(raw);
7337
+ return raw && Number.isInteger(n) ? Math.min(max, Math.max(min, n)) : void 0;
7338
+ };
6256
7339
  function createContentFetcher(deps) {
6257
7340
  const env = deps.env ?? process.env;
6258
7341
  const log = deps.log ?? console.log;
6259
7342
  const doFetch = deps.fetchImpl ?? fetch;
6260
7343
  const url = resolveContentUrl(env, deps.url);
6261
7344
  const custom = Boolean(deps.url ?? env.SCENRI_CONTENT_URL);
6262
- const expected = deps.sha256 !== void 0 ? deps.sha256 : custom ? null : CONTENT_SHA256;
7345
+ const pin = (() => {
7346
+ if (deps.pin !== void 0) return deps.pin;
7347
+ if (custom && env.SCENRI_CONTENT_PIN) {
7348
+ try {
7349
+ return JSON.parse(readFileSync(env.SCENRI_CONTENT_PIN, "utf8"));
7350
+ } catch {
7351
+ return null;
7352
+ }
7353
+ }
7354
+ return CONTENT_PIN;
7355
+ })();
7356
+ const specRetry = benchNumber(env.SCENRI_CONTENT_RETRY_MS, 0, 6e4);
7357
+ const retryWaits = deps.retryWaitsMs ?? (specRetry !== void 0 ? [specRetry] : [5e3, 1e4, 15e3, 3e4]);
6263
7358
  const enabled = () => env.SCENRI_NO_CONTENT_FETCH !== "1" && deps.store.getSetting("content.enabled") !== "false";
6264
7359
  let inflight = null;
6265
7360
  let gaveUp = false;
6266
7361
  let installs = 0;
6267
7362
  let stale = null;
6268
- async function download() {
6269
- const root = contentCacheRoot(env);
6270
- if (!deps.store.getSetting("content.disclosed")) {
6271
- log(" fetching the Scenri library (~155 MB, once, cached; set SCENRI_NO_CONTENT_FETCH=1 to disable)");
6272
- deps.store.setSetting("content.disclosed", "1");
7363
+ let startedAt = null;
7364
+ let outcome = null;
7365
+ let failed = 0;
7366
+ const landedNames = /* @__PURE__ */ new Set();
7367
+ let landedPictures = 0;
7368
+ let landedBytes = 0;
7369
+ const totals = pin ? { total: pin.files.filter(isPicture).length, totalBytes: pin.files.reduce((sum, f) => sum + f[2], 0) } : { total: 0, totalBytes: 0 };
7370
+ const stop = new AbortController();
7371
+ const disclose = () => {
7372
+ if (deps.store.getSetting("content.disclosed")) return;
7373
+ log(" fetching the Scenri library (~155 MB, once, cached; set SCENRI_NO_CONTENT_FETCH=1 to disable)");
7374
+ deps.store.setSetting("content.disclosed", "1");
7375
+ };
7376
+ const pause = (ms) => new Promise((resolve) => {
7377
+ if (stop.signal.aborted) return resolve();
7378
+ const t = setTimeout(resolve, ms);
7379
+ t.unref?.();
7380
+ stop.signal.addEventListener(
7381
+ "abort",
7382
+ () => {
7383
+ clearTimeout(t);
7384
+ resolve();
7385
+ },
7386
+ { once: true }
7387
+ );
7388
+ });
7389
+ const pass = (active, via, inMemory = false) => installByRange({
7390
+ url,
7391
+ pin: active,
7392
+ partial: contentPartialRoot(env),
7393
+ order: deps.priority?.() ?? [],
7394
+ seed: deps.seed,
7395
+ fetchImpl: via,
7396
+ signal: stop.signal,
7397
+ // Eight at once, measured (pnpm cold-start --measure, 2026-09-27, each
7398
+ // file landing as its bytes arrive): on a ~230 Mbps line to GitHub the
7399
+ // Home set in 2.95-3.59 s against 3.48-4.90 at six, the library in
7400
+ // 6.2-7.0 s against 6.9-8.2; at 20 Mbps the line is the limit whatever the
7401
+ // number (60.2 s where the line needs 59.4), and eight costs the first
7402
+ // picture 0.3 s there. Reads merge up to 4 MiB: 16 bought nothing and
7403
+ // held more memory. SCENRI_CONTENT_CONCURRENCY and SCENRI_CONTENT_CAP_MB
7404
+ // are for that bench only.
7405
+ concurrency: deps.concurrency ?? benchNumber(env.SCENRI_CONTENT_CONCURRENCY, 1, 16) ?? 8,
7406
+ capBytes: deps.capBytes ?? (benchNumber(env.SCENRI_CONTENT_CAP_MB, 1, 64) ?? 4) * 1024 * 1024,
7407
+ idleMs: deps.idleMs ?? 3e4,
7408
+ backoffMs: inMemory ? [] : deps.backoffMs ?? [1e3, 2e3, 4e3, 8e3],
7409
+ onLanded: (f) => {
7410
+ if (landedNames.has(f[0])) return;
7411
+ landedNames.add(f[0]);
7412
+ landedBytes += f[2];
7413
+ if (isPicture(f)) landedPictures += 1;
6273
7414
  }
7415
+ });
7416
+ async function whole() {
7417
+ const ctrl = new AbortController();
7418
+ const onStop = () => ctrl.abort();
7419
+ stop.signal.addEventListener("abort", onStop, { once: true });
7420
+ const timer = setTimeout(() => ctrl.abort(), deps.timeoutMs ?? TIMEOUT_MS);
7421
+ timer.unref?.();
6274
7422
  try {
6275
- const ctrl = new AbortController();
6276
- const timer = setTimeout(() => ctrl.abort(), deps.timeoutMs ?? TIMEOUT_MS);
6277
- if (typeof timer === "object") timer.unref?.();
6278
- let bytes;
6279
- try {
6280
- const res = await doFetch(url, { signal: ctrl.signal });
6281
- if (!res.ok) return { ok: false, updated: false, error: `archive answered ${res.status}` };
6282
- bytes = Buffer.from(await res.arrayBuffer());
6283
- } finally {
6284
- clearTimeout(timer);
6285
- }
6286
- if (expected && !archiveMatches(bytes, expected)) {
6287
- return {
6288
- ok: false,
6289
- updated: false,
6290
- error: "the library download does not match the archive this version expects"
6291
- };
7423
+ const res = await doFetch(url, { signal: ctrl.signal });
7424
+ if (!res.ok) throw new Error(`archive answered ${res.status}`);
7425
+ return Buffer.from(await res.arrayBuffer());
7426
+ } finally {
7427
+ clearTimeout(timer);
7428
+ stop.signal.removeEventListener("abort", onStop);
7429
+ }
7430
+ }
7431
+ async function hostAnswers() {
7432
+ try {
7433
+ const res = await doFetch(url, {
7434
+ headers: { range: "bytes=0-0" },
7435
+ signal: AbortSignal.any([stop.signal, AbortSignal.timeout(1e4)])
7436
+ });
7437
+ await res.body?.cancel().catch(() => {
7438
+ });
7439
+ return res.status === 206;
7440
+ } catch {
7441
+ return false;
7442
+ }
7443
+ }
7444
+ async function install(active) {
7445
+ let result = await pass(active, doFetch);
7446
+ if (result.kind === "unranged") {
7447
+ const bytes = await whole();
7448
+ result = bytes.length === active.size ? await pass(active, archiveFetch(bytes), true) : { kind: "mismatch", size: bytes.length };
7449
+ } else if (result.kind === "partial" && !stop.signal.aborted) {
7450
+ for (const ms of retryWaits) {
7451
+ await pause(ms);
7452
+ if (stop.signal.aborted || await hostAnswers()) break;
6292
7453
  }
6293
- const refused = await installContentArchive(bytes, root);
6294
- if (refused) return { ok: false, updated: false, error: refused };
7454
+ if (!stop.signal.aborted) result = await pass(active, doFetch);
7455
+ }
7456
+ if (result.kind === "complete") return { ok: true, updated: true, error: null };
7457
+ if (result.kind === "mismatch") {
7458
+ return {
7459
+ ok: false,
7460
+ updated: false,
7461
+ error: `the archive there is ${result.size} bytes, not the ${active.size} this version pins (an archive of one's own needs SCENRI_CONTENT_PIN)`
7462
+ };
7463
+ }
7464
+ if (result.kind === "unranged")
7465
+ return { ok: false, updated: false, error: "the library host stopped answering byte ranges" };
7466
+ failed = result.missing.filter(isPicture).length;
7467
+ return { ok: false, updated: false, error: `${result.missing.length} library files did not download` };
7468
+ }
7469
+ async function run4() {
7470
+ disclose();
7471
+ startedAt ??= (/* @__PURE__ */ new Date()).toISOString();
7472
+ const began = Date.now();
7473
+ rmSync(`${contentCacheRoot(env)}.staging`, { recursive: true, force: true, maxRetries: 3 });
7474
+ let result;
7475
+ try {
7476
+ result = pin ? await install(pin) : { ok: false, updated: false, error: "SCENRI_CONTENT_PIN could not be read" };
7477
+ } catch (err) {
7478
+ result = { ok: false, updated: false, error: String(err?.message ?? err) };
7479
+ }
7480
+ const seconds = ((Date.now() - began) / 1e3).toFixed(1);
7481
+ if (result.ok) {
7482
+ const installed = installedContentRoot(env);
6295
7483
  try {
6296
- const meta = JSON.parse(readFileSync(join(root, "meta.json"), "utf8"));
7484
+ const meta = JSON.parse(readFileSync(join(installed ?? "", "meta.json"), "utf8"));
6297
7485
  deps.store.setSetting("content.version", String(meta.version ?? ""));
6298
7486
  } catch {
6299
7487
  }
6300
- log(" Scenri library ready");
6301
- return { ok: true, updated: true, error: null };
6302
- } catch (err) {
6303
- return { ok: false, updated: false, error: String(err?.message ?? err) };
7488
+ outcome = "complete";
7489
+ log(` Scenri library ready (${seconds} s)`);
7490
+ } else if (!stop.signal.aborted) {
7491
+ outcome = "partial";
7492
+ if (!failed && totals.total) failed = totals.total - landedPictures;
7493
+ log(` Scenri library: ${result.error ?? "did not download"} (${seconds} s); the next start tries again`);
6304
7494
  }
7495
+ return result;
6305
7496
  }
6306
7497
  async function ensure() {
6307
7498
  if (!enabled()) return { ok: false, updated: false, error: null };
6308
7499
  if (!contentCacheStale(env, custom)) return { ok: true, updated: false, error: null };
6309
- inflight ??= download().then((result) => {
7500
+ inflight ??= run4().then((result) => {
6310
7501
  if (result.updated) installs += 1;
6311
7502
  else if (!result.ok) gaveUp = true;
6312
7503
  return result;
@@ -6317,14 +7508,90 @@ function createContentFetcher(deps) {
6317
7508
  return inflight;
6318
7509
  }
6319
7510
  function state() {
6320
- if (!enabled() || gaveUp) return { arriving: false, installs };
6321
7511
  stale ??= contentCacheStale(env, custom);
6322
- return { arriving: stale, installs };
7512
+ const on = enabled();
7513
+ return {
7514
+ arriving: on && !gaveUp && stale,
7515
+ installs,
7516
+ landed: landedPictures,
7517
+ bytes: landedBytes,
7518
+ failed,
7519
+ outcome,
7520
+ startedAt,
7521
+ ...totals
7522
+ };
6323
7523
  }
6324
7524
  function schedule() {
6325
- setTimeout(() => void ensure(), 3e3).unref();
7525
+ setTimeout(() => void ensure(), 0).unref();
7526
+ }
7527
+ async function settle() {
7528
+ stop.abort();
7529
+ await inflight?.catch(() => {
7530
+ });
6326
7531
  }
6327
- return { enabled, ensure, schedule, state };
7532
+ return { enabled, ensure, schedule, state, settle };
7533
+ }
7534
+ function homeFirst(o) {
7535
+ const out = [];
7536
+ const seen = /* @__PURE__ */ new Set();
7537
+ const add = (rel) => {
7538
+ if (seen.has(rel)) return;
7539
+ seen.add(rel);
7540
+ if (!existsSync(join(o.templatesRoot, ...rel.split("/")))) out.push(rel);
7541
+ };
7542
+ const products = new Map(o.demoProducts.map((p) => [p.id, p]));
7543
+ for (const tile of o.showcase) {
7544
+ add(`previews/showcase/${tile.id}.jpg`);
7545
+ for (const t of tile.brief.tokens) {
7546
+ if (t.t === "product") {
7547
+ const p = products.get(t.id);
7548
+ if (p) add(`previews/demo-products/${p.id}/${primaryAngleFor(p.category)}.jpg`);
7549
+ } else if (t.t === "character") {
7550
+ add(`previews/presenters/${t.id}/avatar.jpg`);
7551
+ }
7552
+ }
7553
+ }
7554
+ for (const p of o.presenters) add(`previews/presenters/${p.id}/portrait.jpg`);
7555
+ for (const s of o.scenes) {
7556
+ const slot = slotOfView(s.cover ?? "place");
7557
+ if (slot) add(`previews/${s.id}/${slot}.jpg`);
7558
+ }
7559
+ return out;
7560
+ }
7561
+ var ID4 = /^[a-z0-9-]+$/;
7562
+ var TOKEN_KINDS = /* @__PURE__ */ new Set(["text", "product", "character", "color", "ref", "template", "format"]);
7563
+ function isShowcaseEntry(x) {
7564
+ return x && typeof x.id === "string" && ID4.test(x.id) && typeof x.title === "string" && typeof x.category === "string" && x.category && x.brief && Array.isArray(x.brief.tokens) && x.brief.tokens.every((t) => t && typeof t.t === "string" && TOKEN_KINDS.has(t.t)) && Number.isFinite(x.width) && Number.isFinite(x.height) && (x.variants === void 0 || Number.isInteger(x.variants) && x.variants >= 1 && x.variants <= 4) && (x.quality === void 0 || ["draft", "standard", "high"].includes(x.quality)) && (x.order === void 0 || Number.isFinite(x.order)) && (x.family === void 0 || typeof x.family === "string" && x.family.length > 0);
7565
+ }
7566
+ function loadShowcase(dir = defaultShowcaseDir()) {
7567
+ const warnings = [];
7568
+ if (!dir || !existsSync(dir)) return { showcase: [], warnings: [`showcase dir not found: ${dir}`] };
7569
+ const showcase = [];
7570
+ for (const f of readdirSync(dir).filter((n) => n.endsWith(".json")).sort()) {
7571
+ try {
7572
+ const parsed = JSON.parse(readFileSync(join(dir, f), "utf8"));
7573
+ if (isShowcaseEntry(parsed)) showcase.push(parsed);
7574
+ else warnings.push(`invalid showcase entry skipped: ${f}`);
7575
+ } catch {
7576
+ warnings.push(`unparseable showcase entry skipped: ${f}`);
7577
+ }
7578
+ }
7579
+ showcase.sort(
7580
+ (a, b) => (a.order ?? Number.POSITIVE_INFINITY) - (b.order ?? Number.POSITIVE_INFINITY) || a.id.localeCompare(b.id)
7581
+ );
7582
+ return { showcase, warnings };
7583
+ }
7584
+ function showcaseFacetsOf(showcase) {
7585
+ const categories = /* @__PURE__ */ new Set();
7586
+ for (const s of showcase) categories.add(s.category);
7587
+ return { categories: [...categories].sort() };
7588
+ }
7589
+ function defaultShowcaseDir() {
7590
+ const here = dirname(fileURLToPath(import.meta.url));
7591
+ for (const p of [join(here, "..", "..", "..", "templates", "showcase"), join(here, "..", "templates", "showcase")]) {
7592
+ if (existsSync(p)) return p;
7593
+ }
7594
+ return join(here, "..", "..", "..", "templates", "showcase");
6328
7595
  }
6329
7596
  async function inspectMark(buf, toPng2) {
6330
7597
  const png = await toPng2(buf);
@@ -6633,7 +7900,7 @@ async function readBounded2(res, maxBytes) {
6633
7900
  }
6634
7901
  return out + decoder.decode();
6635
7902
  }
6636
- function sleep5(ms) {
7903
+ function sleep6(ms) {
6637
7904
  return new Promise((r) => setTimeout(r, ms));
6638
7905
  }
6639
7906
  async function httpGet(url, opts = {}) {
@@ -6690,7 +7957,7 @@ async function httpGet(url, opts = {}) {
6690
7957
  return res;
6691
7958
  }
6692
7959
  if (res.status >= 500 && attempt < retries) {
6693
- await sleep5(throttleBackoff(attempt));
7960
+ await sleep6(throttleBackoff(attempt));
6694
7961
  continue;
6695
7962
  }
6696
7963
  return res;
@@ -6698,7 +7965,7 @@ async function httpGet(url, opts = {}) {
6698
7965
  lastErr = err;
6699
7966
  if (opts.signal?.aborted) throw err;
6700
7967
  if (attempt < retries) {
6701
- await sleep5(400 * 2 ** attempt);
7968
+ await sleep6(400 * 2 ** attempt);
6702
7969
  continue;
6703
7970
  }
6704
7971
  throw err;
@@ -6984,7 +8251,7 @@ function productsFromPage(html, url) {
6984
8251
  const one = parseProductHtml(html, url, doc);
6985
8252
  return one ? [one] : [];
6986
8253
  }
6987
- var sleep6 = (ms) => new Promise((r) => setTimeout(r, ms));
8254
+ var sleep7 = (ms) => new Promise((r) => setTimeout(r, ms));
6988
8255
  async function fetchProductPages(ctx, urls, opts = {}) {
6989
8256
  const out = [];
6990
8257
  const seen = /* @__PURE__ */ new Set();
@@ -7004,7 +8271,7 @@ async function fetchProductPages(ctx, urls, opts = {}) {
7004
8271
  if (opts.deadline != null && Date.now() > opts.deadline) return;
7005
8272
  if (opts.maxTotalBytes != null && bytes >= opts.maxTotalBytes) return;
7006
8273
  try {
7007
- if (opts.delayMs) await sleep6(opts.delayMs);
8274
+ if (opts.delayMs) await sleep7(opts.delayMs);
7008
8275
  const { ok, status, text, url, challenged } = await httpText(u, {
7009
8276
  fetchImpl: ctx.fetchImpl,
7010
8277
  signal: ctx.signal,
@@ -8298,7 +9565,7 @@ function allOffHost(round, storeHost) {
8298
9565
  return h !== "" && h !== storeHost;
8299
9566
  });
8300
9567
  }
8301
- var sleep7 = (ms) => new Promise((r) => setTimeout(r, ms));
9568
+ var sleep8 = (ms) => new Promise((r) => setTimeout(r, ms));
8302
9569
  function beginWrite(deps, jobId, brandId, baseUrl, platform, tally2, discovered) {
8303
9570
  const { core } = deps;
8304
9571
  const patch3 = (p) => core.catalog.updateJob(jobId, p);
@@ -8396,7 +9663,7 @@ function drainPictures(deps, jobId, brandId, tally2, signal, storeHost = "", ima
8396
9663
  const round = core.catalog.listImagesNeedingAssets(brandId, PICTURE_ROUND).filter((img) => img.position < imagesPerProduct);
8397
9664
  if (!round.length) {
8398
9665
  if (stopped) break;
8399
- await sleep7(150);
9666
+ await sleep8(150);
8400
9667
  continue;
8401
9668
  }
8402
9669
  tally2.imagesTotal = tally2.imagesDone + core.catalog.countImagesNeedingAssets(brandId, imagesPerProduct);
@@ -11466,11 +12733,11 @@ var toHex2 = (r, g, b) => "#" + [r, g, b].map(
11466
12733
  // src/routes/scenes.ts
11467
12734
  function registerSceneRoutes(app, deps) {
11468
12735
  const { templatesRoot, scenes, thumbs, core } = deps;
11469
- const previewPath = (id) => contentFile(templatesRoot, "previews", `${id}.jpg`);
12736
+ const previewPath = (id) => shownFile(templatesRoot, "previews", `${id}.jpg`);
11470
12737
  const coverSlot = (id) => slotOfView(scenes.find((s) => s.id === id)?.cover ?? "place");
11471
12738
  const coverPath = (id) => {
11472
12739
  const slot = coverSlot(id);
11473
- return slot ? contentFile(templatesRoot, "previews", id, `${slot}.jpg`) : previewPath(id);
12740
+ return slot ? shownFile(templatesRoot, "previews", id, `${slot}.jpg`) : previewPath(id);
11474
12741
  };
11475
12742
  const cardSource = (id) => {
11476
12743
  const slot = coverSlot(id);
@@ -11501,12 +12768,12 @@ function registerSceneRoutes(app, deps) {
11501
12768
  const path = previewPath(m[1]);
11502
12769
  return serveJpegSized(req, reply, path, thumbs, fileKey("scene", m[1], path), cardSource(m[1]));
11503
12770
  });
11504
- const refPath = (id, slot) => contentFile(templatesRoot, "previews", id, `${slot}.jpg`);
12771
+ const refPath = (id, slot) => shownFile(templatesRoot, "previews", id, `${slot}.jpg`);
11505
12772
  app.get("/api/scene-previews/:id", async (req, reply) => {
11506
12773
  const id = /^[a-z0-9-]+$/.exec(String(req.params.id))?.[0];
11507
12774
  if (!id) return reply.status(400).send({ error: "bad scene id" });
11508
- const files = contentDirList(templatesRoot, "previews", id).filter((f) => /^ref-[0-9]{2}\.jpg$/.test(f));
11509
- const url = (f) => `/api/scene-previews/${id}/${f}${mtimeQS(contentFile(templatesRoot, "previews", id, f))}`;
12775
+ const files = shownDirList(templatesRoot, "previews", id).filter((f) => /^ref-[0-9]{2}\.jpg$/.test(f));
12776
+ const url = (f) => `/api/scene-previews/${id}/${f}${mtimeQS(shownFile(templatesRoot, "previews", id, f))}`;
11510
12777
  const views = files.flatMap((f) => {
11511
12778
  const view = SCENE_VIEW_SLOTS[f.replace(/\.jpg$/, "")];
11512
12779
  return view ? [{ view, url: url(f) }] : [];
@@ -11537,13 +12804,13 @@ function registerSceneRoutes(app, deps) {
11537
12804
  }
11538
12805
  function registerPresenterRoutes(app, deps) {
11539
12806
  const { templatesRoot, presenters, thumbs } = deps;
11540
- const presenterThumbPath = (id) => contentFile(templatesRoot, "previews", "presenters", `${id}.jpg`);
11541
- const portraitPath = (id) => contentFile(templatesRoot, "previews", "presenters", id, "portrait.jpg");
12807
+ const presenterThumbPath = (id) => shownFile(templatesRoot, "previews", "presenters", `${id}.jpg`);
12808
+ const portraitPath = (id) => shownFile(templatesRoot, "previews", "presenters", id, "portrait.jpg");
11542
12809
  const cardSource = (id) => {
11543
12810
  const path = portraitPath(id);
11544
12811
  return existsSync(path) ? { path, key: fileKey("presenter-portrait", id, path) } : void 0;
11545
12812
  };
11546
- const avatarPath = (id) => presenterAvatarPath(templatesRoot, id);
12813
+ const avatarPath = (id) => presenterAvatarPath(templatesRoot, id, shownFile);
11547
12814
  const decoratePresenter = (p) => ({
11548
12815
  ...p,
11549
12816
  previewUrl: existsSync(presenterThumbPath(p.id)) ? `/api/presenter-thumbnails/${p.id}.jpg${mtimeQS(presenterThumbPath(p.id), portraitPath(p.id))}` : null,
@@ -11570,7 +12837,7 @@ function registerPresenterRoutes(app, deps) {
11570
12837
  app.get("/api/presenter-previews/:id", async (req, reply) => {
11571
12838
  const id = /^[a-z0-9-]+$/.exec(String(req.params.id))?.[0];
11572
12839
  if (!id) return reply.status(400).send({ error: "bad presenter id" });
11573
- const frames = presenterPageFrames(templatesRoot, id).map((f) => ({
12840
+ const frames = presenterPageFrames(templatesRoot, id, shownFile).map((f) => ({
11574
12841
  url: `/api/presenter-previews/${id}/${f.slot}.jpg${mtimeQS(f.path)}`,
11575
12842
  angle: f.angle
11576
12843
  }));
@@ -11580,7 +12847,7 @@ function registerPresenterRoutes(app, deps) {
11580
12847
  const p = req.params;
11581
12848
  const id = /^[a-z0-9-]+$/.exec(String(p.id))?.[0];
11582
12849
  const slot = PRESENTER_FRAME_FILE.exec(String(p.file))?.[1];
11583
- const path = id && slot ? presenterRefPath(templatesRoot, id, slot) : null;
12850
+ const path = id && slot ? presenterRefPath(templatesRoot, id, slot, shownFile) : null;
11584
12851
  if (!path || !existsSync(path)) return reply.status(404).send({ error: "no frame" });
11585
12852
  return serveJpeg(req, reply, path);
11586
12853
  });
@@ -11701,7 +12968,7 @@ var shotOf = (s) => ({
11701
12968
  ...s?.angle ? { angle: String(s.angle) } : {},
11702
12969
  ...s?.locked ? { locked: true } : {}
11703
12970
  });
11704
- function put(core, rec) {
12971
+ function put2(core, rec) {
11705
12972
  const { id, brandId, createdAt: _c, updatedAt: _u, ...json } = rec;
11706
12973
  return fromRow(core.store.putPresenterDraft({ id, brandId, json }));
11707
12974
  }
@@ -11709,7 +12976,7 @@ function mutate(core, id, fn) {
11709
12976
  const rec = getPresenterDraft(core, id);
11710
12977
  if (!rec) throw fail("draft not found", 404);
11711
12978
  fn(rec);
11712
- return put(core, rec);
12979
+ return put2(core, rec);
11713
12980
  }
11714
12981
  function getPresenterDraft(core, id) {
11715
12982
  const row = core.store.getPresenterDraft(id);
@@ -11829,7 +13096,7 @@ function sweepPresenterDrafts(core) {
11829
13096
  }
11830
13097
  rec.activeView = null;
11831
13098
  rec.stage = "idle";
11832
- put(core, rec);
13099
+ put2(core, rec);
11833
13100
  swept += 1;
11834
13101
  }
11835
13102
  }
@@ -11929,7 +13196,7 @@ async function createPresenterDraft(deps, input) {
11929
13196
  rec.attestation = { attestedAt: (/* @__PURE__ */ new Date()).toISOString(), version: LIKENESS_VERSION };
11930
13197
  if (direction) rec.direction = direction;
11931
13198
  }
11932
- const saved = put(core, rec);
13199
+ const saved = put2(core, rec);
11933
13200
  if (source === "photos") startJob(deps, saved.id, null, (signal) => filePhotos(deps, saved.id, signal));
11934
13201
  return saved;
11935
13202
  }
@@ -11990,7 +13257,7 @@ function seedDraftFromPresenter(core, brandId, presenter) {
11990
13257
  if (direction) rec.direction = direction;
11991
13258
  if (presenter.likeness) rec.attestation = presenter.likeness;
11992
13259
  if (kept.length) rec.keptShots = kept;
11993
- return put(core, rec);
13260
+ return put2(core, rec);
11994
13261
  }
11995
13262
  function openPresenterEdit(core, brandId, presenterId) {
11996
13263
  const brand = core.store.getBrand(brandId);
@@ -14460,9 +15727,9 @@ function registerDemoProductRoutes(app, deps) {
14460
15727
  const demoProductThumbPath = (id) => {
14461
15728
  const p = demoProductById(id);
14462
15729
  if (!p) return null;
14463
- const preferred = demoProductRefPath(templatesRoot, id, primaryAngleFor(p.category));
15730
+ const preferred = demoProductRefPath(templatesRoot, id, primaryAngleFor(p.category), shownFile);
14464
15731
  if (existsSync(preferred)) return preferred;
14465
- return demoProductAngleFiles(templatesRoot, id, p.category)[0]?.path ?? preferred;
15732
+ return demoProductAngleFiles(templatesRoot, id, p.category, shownFile)[0]?.path ?? preferred;
14466
15733
  };
14467
15734
  const decorateDemoProduct = (p) => {
14468
15735
  const path = demoProductThumbPath(p.id);
@@ -14487,7 +15754,7 @@ function registerDemoProductRoutes(app, deps) {
14487
15754
  if (!id) return reply.status(400).send({ error: "bad product id" });
14488
15755
  const product = demoProductById(id);
14489
15756
  if (!product) return { frames: [] };
14490
- const frames = demoProductAngleFiles(templatesRoot, id, product.category).map((f) => ({
15757
+ const frames = demoProductAngleFiles(templatesRoot, id, product.category, shownFile).map((f) => ({
14491
15758
  angle: f.angle,
14492
15759
  url: `/api/demo-product-previews/${id}/${f.angle}.jpg${mtimeQS(f.path)}`
14493
15760
  }));
@@ -14497,52 +15764,15 @@ function registerDemoProductRoutes(app, deps) {
14497
15764
  const p = req.params;
14498
15765
  const id = /^[a-z0-9-]+$/.exec(String(p.id))?.[0];
14499
15766
  const angle = /^([a-z0-9-]+)\.jpg$/.exec(String(p.file))?.[1];
14500
- const path = id && angle ? demoProductRefPath(templatesRoot, id, angle) : null;
15767
+ const path = id && angle ? demoProductRefPath(templatesRoot, id, angle, shownFile) : null;
14501
15768
  if (!path || !existsSync(path)) return reply.status(404).send({ error: "no frame" });
14502
15769
  return serveJpeg(req, reply, path);
14503
15770
  });
14504
15771
  }
14505
- var ID4 = /^[a-z0-9-]+$/;
14506
- var TOKEN_KINDS = /* @__PURE__ */ new Set(["text", "product", "character", "color", "ref", "template", "format"]);
14507
- function isShowcaseEntry(x) {
14508
- return x && typeof x.id === "string" && ID4.test(x.id) && typeof x.title === "string" && typeof x.category === "string" && x.category && x.brief && Array.isArray(x.brief.tokens) && x.brief.tokens.every((t) => t && typeof t.t === "string" && TOKEN_KINDS.has(t.t)) && Number.isFinite(x.width) && Number.isFinite(x.height) && (x.variants === void 0 || Number.isInteger(x.variants) && x.variants >= 1 && x.variants <= 4) && (x.quality === void 0 || ["draft", "standard", "high"].includes(x.quality)) && (x.order === void 0 || Number.isFinite(x.order)) && (x.family === void 0 || typeof x.family === "string" && x.family.length > 0);
14509
- }
14510
- function loadShowcase(dir = defaultShowcaseDir()) {
14511
- const warnings = [];
14512
- if (!dir || !existsSync(dir)) return { showcase: [], warnings: [`showcase dir not found: ${dir}`] };
14513
- const showcase = [];
14514
- for (const f of readdirSync(dir).filter((n) => n.endsWith(".json")).sort()) {
14515
- try {
14516
- const parsed = JSON.parse(readFileSync(join(dir, f), "utf8"));
14517
- if (isShowcaseEntry(parsed)) showcase.push(parsed);
14518
- else warnings.push(`invalid showcase entry skipped: ${f}`);
14519
- } catch {
14520
- warnings.push(`unparseable showcase entry skipped: ${f}`);
14521
- }
14522
- }
14523
- showcase.sort(
14524
- (a, b) => (a.order ?? Number.POSITIVE_INFINITY) - (b.order ?? Number.POSITIVE_INFINITY) || a.id.localeCompare(b.id)
14525
- );
14526
- return { showcase, warnings };
14527
- }
14528
- function showcaseFacetsOf(showcase) {
14529
- const categories = /* @__PURE__ */ new Set();
14530
- for (const s of showcase) categories.add(s.category);
14531
- return { categories: [...categories].sort() };
14532
- }
14533
- function defaultShowcaseDir() {
14534
- const here = dirname(fileURLToPath(import.meta.url));
14535
- for (const p of [join(here, "..", "..", "..", "templates", "showcase"), join(here, "..", "templates", "showcase")]) {
14536
- if (existsSync(p)) return p;
14537
- }
14538
- return join(here, "..", "..", "..", "templates", "showcase");
14539
- }
14540
-
14541
- // src/routes/showcase.ts
14542
15772
  function registerShowcaseRoutes(app, deps) {
14543
15773
  const { templatesRoot, thumbs } = deps;
14544
15774
  const { showcase } = loadShowcase(join(templatesRoot, "showcase"));
14545
- const showcaseHeroPath = (id) => contentFile(templatesRoot, "previews", "showcase", `${id}.jpg`);
15775
+ const showcaseHeroPath = (id) => shownFile(templatesRoot, "previews", "showcase", `${id}.jpg`);
14546
15776
  const decorateShowcase = (s) => ({
14547
15777
  ...s,
14548
15778
  previewUrl: existsSync(showcaseHeroPath(s.id)) ? `/api/showcase-previews/${s.id}.jpg${mtimeQS(showcaseHeroPath(s.id))}` : null
@@ -15082,6 +16312,21 @@ function registerImageRoutes(app, deps) {
15082
16312
  var HEADLINES_KEPT = 5;
15083
16313
  var FIRST_PUBLIC = "0.2.0";
15084
16314
  var RELEASES = [
16315
+ {
16316
+ version: "0.20.2",
16317
+ date: "2026-09-27",
16318
+ title: "On a first start, Home fills in as the library arrives",
16319
+ sections: [
16320
+ {
16321
+ heading: "Library",
16322
+ body: "Home's pictures come first, and each card fills in where it stands as its picture lands. Activity counts the pictures, and a download that stops picks up where it left off."
16323
+ },
16324
+ {
16325
+ heading: "Fixes",
16326
+ body: "Shut down waits until Scenri has stopped, then closes its tab where the browser allows it, or says Scenri is shut down. A shot sent again with Try again stops spinning when it ends, without a reload."
16327
+ }
16328
+ ]
16329
+ },
15085
16330
  {
15086
16331
  version: "0.20.1",
15087
16332
  date: "2026-09-27",
@@ -16897,7 +18142,7 @@ function registerDesktopRoutes(app, deps) {
16897
18142
  record: null
16898
18143
  };
16899
18144
  }
16900
- const { installDeps } = await import('./cli-WRNWT6P7.js');
18145
+ const { installDeps } = await import('./cli-PXPCJR7V.js');
16901
18146
  const { desktopStatus } = await import('./install-VXJPLYWM.js');
16902
18147
  return desktopStatus(installDeps(runtime.entry));
16903
18148
  });
@@ -16905,7 +18150,7 @@ function registerDesktopRoutes(app, deps) {
16905
18150
  if (!runtime.entry) {
16906
18151
  return { ok: false, reason: "unsupported", message: "Desktop shortcuts are not available on this system yet." };
16907
18152
  }
16908
- const { addToDesktop } = await import('./cli-WRNWT6P7.js');
18153
+ const { addToDesktop } = await import('./cli-PXPCJR7V.js');
16909
18154
  return addToDesktop(runtime.entry);
16910
18155
  });
16911
18156
  app.get("/api/desktop", async (req) => {
@@ -16928,6 +18173,12 @@ function registerDesktopRoutes(app, deps) {
16928
18173
  reason: "dev"
16929
18174
  });
16930
18175
  }
18176
+ if ((deps.env ?? process.env).SCENRI_NO_DESKTOP === "1") {
18177
+ return reply.status(409).send({
18178
+ error: "Desktop shortcuts are switched off for this Scenri (SCENRI_NO_DESKTOP).",
18179
+ reason: "disabled"
18180
+ });
18181
+ }
16931
18182
  const res = await install();
16932
18183
  if (!res.ok) return reply.status(409).send({ error: res.message, reason: res.reason });
16933
18184
  return { ok: true, path: res.path };
@@ -18614,7 +19865,23 @@ function buildServer(opts) {
18614
19865
  const runtime = opts.runtime ?? { installKind: "unknown", supervised: false };
18615
19866
  const updates = createUpdateChecker({ name: meta.name, store: core.store, fetchImpl: opts.fetchImpl });
18616
19867
  app.decorate("updates", updates);
18617
- app.decorate("content", createContentFetcher({ store: core.store, fetchImpl: opts.fetchImpl }));
19868
+ app.decorate(
19869
+ "content",
19870
+ createContentFetcher({
19871
+ store: core.store,
19872
+ fetchImpl: opts.fetchImpl,
19873
+ // what the package carries byte for byte (records, scene cards) is copied, not fetched
19874
+ seed: templatesRoot,
19875
+ // Home's pictures first, read from the records Home is built from
19876
+ priority: () => homeFirst({
19877
+ templatesRoot,
19878
+ showcase: loadShowcase(join(templatesRoot, "showcase")).showcase,
19879
+ demoProducts,
19880
+ presenters,
19881
+ scenes
19882
+ })
19883
+ })
19884
+ );
18618
19885
  registerUpdateRoutes(app, {
18619
19886
  core,
18620
19887
  meta,
@@ -18638,6 +19905,7 @@ function buildServer(opts) {
18638
19905
  await settleCatalogImports();
18639
19906
  await settleSceneStudio();
18640
19907
  await settleAssetBuilds();
19908
+ await app.content.settle();
18641
19909
  await sceneExamples?.settle();
18642
19910
  await settlePresenterDrafts();
18643
19911
  await thumbs.settle();
@@ -18765,6 +20033,7 @@ async function run3() {
18765
20033
  const candidates = [join(here, "..", "..", "..", "apps", "studio", "dist"), join(here, "..", "studio-dist")];
18766
20034
  const studioDist = candidates.find((p) => existsSync(p));
18767
20035
  const named = isLoopbackName(HOST) || isWildcardHost(HOST) || isIPv4Literal(HOST) ? [] : [HOST];
20036
+ finishContentInstall();
18768
20037
  const app = buildServer({
18769
20038
  core,
18770
20039
  engines,
@@ -18855,7 +20124,7 @@ async function run3() {
18855
20124
  }
18856
20125
  }
18857
20126
  const ownEntry = fileURLToPath(import.meta.url);
18858
- const { addToDesktop, installDeps } = await import('./cli-WRNWT6P7.js');
20127
+ const { addToDesktop, installDeps } = await import('./cli-PXPCJR7V.js');
18859
20128
  const { refreshLauncher } = await import('./refresh-5HBDLLLB.js');
18860
20129
  const { askOnTerminal, offerDesktop, shouldOfferDesktop } = await import('./offer-W6NJXMWT.js');
18861
20130
  const { launcherInstalled } = await import('./paths-6ZXRZUHY.js');