---
title: Clothes Rack
description: A shop rail of 3D garments that swivel to face you, with cloth that moves like fabric.
category: Cards
tier: free
url: https://ui.dimaac.com/components/clothes-rack
registry: https://ui.dimaac.com/r/clothes-rack.json
---

# Clothes Rack

A long chrome rail on two wall brackets with ten garments on wooden hangers, made and lit in three.js: tees, a crewneck and a camp shirt, each a real sewing pattern draped on its hanger by a cloth simulation, so the shoulders rest on the hanger, the sleeves are open tubes and the folds come from the cloth. The cloth is lit like a product shot: scanned jersey and fleece tiled at their real size, a heather grain in the grey marl and a scanned photo studio for light (pass your own through textures, or none for a knit drawn in code). At rest every garment hangs side-on and is perfectly still. Point at one and it swivels to face you in about a quarter of a second, its sleeves opening out from where they hung at its sides, while only its neighbours slide apart along the rail: the nearest moves the most, the next ones less and less, and far ones not at all. The fabric moves as it would on a real rail: the lower cloth lags a turn or a push, swings through once and settles, with a faint ripple running down it. A caption with the name appears underneath. Click the facing garment and a detail view fades in over the blurred page; its keycap arrows swap garments like flipping through a rail, the one on show sliding aside as it turns away and the next swinging in to face you, its cloth settling. It works with the mouse, the keyboard (arrow keys, Home, End, Enter, Escape), screen readers (a button per garment) and touch (tap to turn, tap again to open, drag to pan a long rail), and it only renders while something moves. With reduced motion everything finishes almost at once and the cloth stays still. A select callback fires from the see-availability buttons, for shops.

## Install

With the shadcn CLI:

```bash
npx shadcn@latest add https://ui.dimaac.com/r/clothes-rack.json
pnpm dlx shadcn@latest add https://ui.dimaac.com/r/clothes-rack.json
bunx --bun shadcn@latest add https://ui.dimaac.com/r/clothes-rack.json
```

With the `@dimaac` namespace in components.json: `npx shadcn@latest add @dimaac/clothes-rack`

Dependencies:

```bash
pnpm add three
npm install three
```

By hand:

1. Install the packages it uses: three.
2. Copy the component file below into components/dimaac/clothes-rack.tsx.
3. It's styled with Tailwind v4 classes. If that folder sits outside the places Tailwind scans, add it with @source in your CSS.
4. Import it with import { ClothesRack } from "@/components/dimaac/clothes-rack" and give its parent a size: it fills it.

## Usage

```tsx
import { ClothesRack } from "@/components/dimaac/clothes-rack";

<ClothesRack />
```

## Props

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `items` | `ClothesRackItem[]` | `defaultItems` | The garments on the rail, in order. Defaults to ten garments of our own design: eight tees, a crewneck and a shirt. |
| `restAngle` | `number` | `80` | How far each garment is turned away at rest, in degrees. 90 would be edge-on. Default 80. |
| `gap` | `number` | `7` | The clear air between side-on garments, as a percentage of a garment's body width. Default 7. |
| `activeScale` | `number` | `1` | How much the facing garment grows, from 1 (not at all) to 1.2. Default 1. |
| `swing` | `number` | `0` | The peak tilt in degrees a pushed hanger leans against the push, as a rigid tilt. 0 keeps every hanger still. Default 0. |
| `duration` | `number` | `0.25` | How long a garment takes to turn to face you, in seconds. Default 0.25. |
| `flow` | `number` | `1` | How much the fabric moves: its hem lags a turn and trails a push, then swings back and settles. 0 keeps the cloth stiff, 2 is very loose. Default 1. |
| `breeze` | `number` | `0` | A soft draught along the rail, so the rack moves on its own: each garment turns a few degrees back and forth, a slow wave running down the rail, and its cloth sways. 0 keeps everything still until it is pointed at, 1 is a gentle breeze. A garment turned to face you is out of it. Off with reduced motion. Default 0. |
| `rail` | `RailFinish` | `"chrome"` | The finish of the rail. Default "chrome". |
| `hanger` | `HangerFinish` | `"wood"` | The finish of the hangers. Default "wood". |
| `showCaption` | `boolean` | `true` | Show the product name under the facing garment. Default true. |
| `detail` | `boolean` | `true` | Open a detail view when the facing garment is clicked (or Enter is pressed). Default true. |
| `size` | `number` | `0.4` | How much of the box height a garment takes, from 0.25 to 0.42. Default 0.4. |
| `onSelect` | `(item: ClothesRackItem, index: number) => void` | - | Called when "See availability" is pressed, with the garment it was pressed for. |
| `textures` | `GarmentTextures` | - | Photographic cloth and light: addresses of tiling fabric scans (normal and roughness maps of jersey for the tees and the shirt and of fleece for the crewneck), a greyscale heather grain, and an equirect .hdr studio. All optional; without them the knit is drawn in code and the light is a plain room. The demo uses Poly Haven's CC0 scans, served from ui.dimaac.com/media/textures. |
| `className` | `string` | `""` | Extra classes for the outer box. Give it a size: the rack fills it. |

## Credits

- Jersey scan: Rico Cilliers, colormass, Poly Haven (https://polyhaven.com/a/jersey_melange), CC0
- Cotton jersey roughness: Rico Cilliers, colormass, Poly Haven (https://polyhaven.com/a/cotton_jersey), CC0
- Fleece scan: Rico Cilliers, colormass, Poly Haven (https://polyhaven.com/a/knitted_fleece), CC0
- Studio light: Sergej Majboroda, Poly Haven (https://polyhaven.com/a/studio_small_09), CC0

## Source

### clothes-rack.tsx → `components/dimaac/clothes-rack.tsx`

```tsx
"use client";

import { flushSync } from "react-dom";
import { useEffect, useMemo, useRef, useState, useSyncExternalStore, type FocusEvent, type KeyboardEvent } from "react";
import * as THREE from "three";
import { ClothMotion } from "./clothes-rack/cloth-motion";
import { createWardrobe, type Garment, type GarmentSpec, type GarmentTextures, type HangerFinish, type RailFinish, type Wardrobe } from "./clothes-rack/garment";

// A shop rail of real 3D garments, built to move like the reference shop page.
// At rest every garment hangs side-on on its swivel hook, perfectly still. Point at one and it swivels to
// face you while only its neighbours slide apart along the rail: the facing garment's hook never moves,
// the nearest neighbour moves the most, the next ones less and less, and far ones not at all.
// Two signals drive it. "open" is the spacing: each garment's share eases out like a first-order lag
// (time constant 0.18 s), and every position is a plain sum of the open amounts, so nothing overshoots.
// "t" is the turn: a critically damped spring that settles in about the chosen duration.
// The cloth itself moves too (cloth-motion.ts): its lower part lags a turn or a push, swings through once and
// settles, with a faint ripple running down the fabric, then everything is still again.
// A click on the facing garment fades a detail view in over the page. Its arrows swap garments the way you flip
// through a rail: the one on show slides aside turning side-on and fades, the next swings in to face you.
// three.js only renders while something moves, and stops when offscreen or the tab is hidden.

export type ClothesRackItem = GarmentSpec & {
  /** The product name: the caption under the facing garment and the title in the detail view. */
  name: string;
};

export type ClothesRackProps = {
  /** The garments on the rail, in order. Defaults to ten garments of our own design: eight tees, a crewneck and a shirt. */
  items?: ClothesRackItem[];
  /** How far each garment is turned away at rest, in degrees. 90 would be edge-on. Default 80. */
  restAngle?: number;
  /** The clear air between side-on garments, as a percentage of a garment's body width. Default 7. */
  gap?: number;
  /** How much the facing garment grows, from 1 (not at all) to 1.2. Default 1. */
  activeScale?: number;
  /** The peak tilt in degrees a pushed hanger leans against the push, as a rigid tilt. 0 keeps every hanger still. Default 0. */
  swing?: number;
  /** How long a garment takes to turn to face you, in seconds. Default 0.25. */
  duration?: number;
  /** How much the fabric moves: its hem lags a turn and trails a push, then swings back and settles. 0 keeps the cloth stiff, 2 is very loose. Default 1. */
  flow?: number;
  /**
   * A soft draught along the rail, so the rack moves on its own: each garment turns a few degrees back and forth, a
   * slow wave running down the rail, and its cloth sways. 0 keeps everything still until it is pointed at, 1 is a
   * gentle breeze. A garment turned to face you is out of it. Off with reduced motion. Default 0.
   */
  breeze?: number;
  /** The finish of the rail. Default "chrome". */
  rail?: RailFinish;
  /** The finish of the hangers. Default "wood". */
  hanger?: HangerFinish;
  /** Show the product name under the facing garment. Default true. */
  showCaption?: boolean;
  /** Open a detail view when the facing garment is clicked (or Enter is pressed). Default true. */
  detail?: boolean;
  /** How much of the box height a garment takes, from 0.25 to 0.42. Default 0.4. */
  size?: number;
  /** Called when "See availability" is pressed, with the garment it was pressed for. */
  onSelect?: (item: ClothesRackItem, index: number) => void;
  /**
   * Photographic cloth and light: addresses of tiling fabric scans (normal and roughness maps of jersey for the tees
   * and the shirt and of fleece for the crewneck), a greyscale heather grain, and an equirect .hdr studio. All
   * optional; without them the knit is drawn in code and the light is a plain room. The demo uses Poly Haven's CC0
   * scans, served from ui.dimaac.com/media/textures.
   */
  textures?: GarmentTextures;
  /** Extra classes for the outer box. Give it a size: the rack fills it. */
  className?: string;
};

export const defaultItems: ClothesRackItem[] = [
  { name: "Field Shirt", kind: "shirt", colour: "#2f3631", print: { kind: "pattern", colours: ["#20251f", "#e6dcc4", "#c7a46c", "#9fae86", "#bf7350"] } },
  { name: "Heavy Tee, Black", kind: "tee", colour: "#1b1b1d" },
  { name: "Heavy Tee, White", kind: "tee", colour: "#f2f2f3" },
  { name: "Made Slowly Tee", kind: "tee", colour: "#18181a", print: { kind: "script", text: "Made Slowly", ink: "#f4f1ea" } },
  { name: "Field Notes Crewneck", kind: "crewneck", colour: "#2c4844", print: { kind: "serif", lines: ["Field", "Notes", "Club"], ink: "#f1ede2" } },
  { name: "Night Shift Tee", kind: "tee", colour: "#1d1a1f", print: { kind: "chest", text: "Night Shift", ink: "#e9e4dc" } },
  { name: "Bloom Tee", kind: "tee", colour: "#f4f4f5", print: { kind: "flowers", text: "Bloom", ink: "#1f1f24" } },
  { name: "Studio Tee", kind: "tee", colour: "#f5f5f6", print: { kind: "chest", text: "DiMaac Studio", ink: "#22252b" } },
  { name: "Pocket Tee", kind: "tee", colour: "#f3f3f4", print: { kind: "pocket" } },
  { name: "Grey Marl Tee", kind: "tee", colour: "#7d7f84" },
];

// ---------- page theme and motion preference, live, without any site context ----------

function pageIsDark(): boolean {
  const root = document.documentElement;
  const picked = root.getAttribute("data-theme");
  if (picked === "dark") return true;
  if (picked === "light") return false;
  if (root.classList.contains("dark")) return true;
  if (root.classList.contains("light")) return false;
  return window.matchMedia("(prefers-color-scheme: dark)").matches;
}

function watchPageTheme(onChange: () => void): () => void {
  const observer = new MutationObserver(onChange);
  observer.observe(document.documentElement, { attributes: true, attributeFilter: ["data-theme", "class"] });
  const query = window.matchMedia("(prefers-color-scheme: dark)");
  query.addEventListener("change", onChange);
  return () => {
    observer.disconnect();
    query.removeEventListener("change", onChange);
  };
}

function watchMotion(onChange: () => void): () => void {
  const query = window.matchMedia("(prefers-reduced-motion: reduce)");
  query.addEventListener("change", onChange);
  return () => query.removeEventListener("change", onChange);
}
const prefersReducedMotion = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches;

// ---------- numbers ----------

// A long lens: garments at the ends of the rail are seen at almost the same angle as the middle ones
const FOV = 12;
// Where the rail sits on screen, as a fraction of the height from the top
const RAIL_AT = 0.27;
// Stepping at 240 a second keeps the springs stable even with a very short duration
const STEP = 1 / 240;
// How tall the pointer zone is, in garment heights: from just above the rail to just below the hems
const ZONE_TOP = 0.2;
// In the detail view the garment, hook included, takes this much of the box height
const DETAIL_TAKES = 0.57;
const DETAIL_TOP = 0.15;
// How the spacing eases: first-order lags, in seconds (opening, and returning to rest)
const OPEN_TAU = 0.18;
const CLOSE_TAU = 0.2;
// How far each step away from the facing garment is pushed, as a share of the first neighbour's push (measured)
const PUSH_PROFILE = [1, 0.577, 0.309, 0.144, 0.052];
// Empty rail past the end hooks, in pitches, and room kept for the end cap
const RAIL_PAD = 1.1;
const CAP_ROOM = 0.1;

const clamp = (value: number, low: number, high: number) => Math.min(high, Math.max(low, value));
const lerp = (a: number, b: number, t: number) => a + (b - a) * t;

type Entry = {
  garment: Garment;
  /** Facing amount: 0 turned away at rest, 1 facing you (a critically damped spring) */
  t: number;
  tVelocity: number;
  tGoal: number;
  /** Spacing signal: 0 rest, 1 fully open (a first-order ease), the neighbours' positions are sums of these */
  open: number;
  x: number;
  /** x speed of the last frame, for the optional rigid hanger tilt and the cloth */
  xVelocity: number;
  /** The fabric: rows of cloth that lag the hanger's turns and pushes, then settle (cloth-motion.ts) */
  cloth: ClothMotion;
  lastTVelocity: number;
  lastXVelocity: number;
};

type Engine = {
  setActive(index: number): void;
  openDetail(index: number): void;
  closeDetail(): void;
  stepDetail(direction: 1 | -1): void;
  /** Called when the pointer leaves the pill without going back over the rack */
  releaseHover(): void;
  activeIndex(): number;
  lastIndex(): number;
};

// Moves a spring one step toward its goal without ever overshooting (critically damped)
function spring(value: number, velocity: number, goal: number, omega: number, dt: number): [number, number] {
  let x = value;
  let v = velocity;
  let left = dt;
  while (left > 1e-9) {
    const h = Math.min(STEP, left);
    v += (-2 * omega * v - omega * omega * (x - goal)) * h;
    x += v * h;
    left -= h;
  }
  return [x, v];
}

export function ClothesRack({
  items = defaultItems,
  restAngle = 80,
  gap = 7,
  activeScale = 1,
  swing = 0,
  breeze = 0,
  duration = 0.25,
  flow = 1,
  rail = "chrome",
  hanger = "wood",
  showCaption = true,
  detail = true,
  size = 0.4,
  onSelect,
  textures,
  className = "",
}: ClothesRackProps) {
  const hostRef = useRef<HTMLDivElement>(null);
  const canvasBoxRef = useRef<HTMLDivElement>(null);
  const captionRef = useRef<HTMLParagraphElement>(null);
  const dialogRef = useRef<HTMLDivElement>(null);
  const stageRef = useRef<HTMLDivElement>(null);
  const engineRef = useRef<Engine | null>(null);
  const reducedMotion = useSyncExternalStore(watchMotion, prefersReducedMotion, () => false);
  const dark = useSyncExternalStore(watchPageTheme, pageIsDark, () => false);

  const [failed, setFailed] = useState(false);
  // True while the GPU has taken the WebGL context away; a restore rebuilds the scene (generation bumps the effect)
  const [lost, setLost] = useState(false);
  const [generation, setGeneration] = useState(0);
  const [ready, setReady] = useState(false);
  const [open, setOpen] = useState(false);
  // The detail layer is on screen from the start of its fade in to the end of its fade out
  const [stageOn, setStageOn] = useState(false);
  const [detailIndex, setDetailIndex] = useState(0);
  // The garment a keyboard (or screen reader) focus is on: the live status follows this, never the mouse
  const [focusIdx, setFocusIdx] = useState(-1);
  const [, setActiveIdx] = useState(-1);
  // Which arrow key looks pressed (the real arrow keys and the buttons move together)
  const [pressed, setPressed] = useState<"prev" | "next" | null>(null);
  const wasOpen = useRef(false);
  const detailIndexRef = useRef(0);
  const pillRef = useRef<HTMLDivElement>(null);
  const garmentButtons = useRef<(HTMLButtonElement | null)[]>([]);
  const pressTimer = useRef(0);
  const pressedAt = useRef(0);

  // The loop reads these every frame, so a slider never rebuilds the scene
  const settings = useRef({ restAngle, gap, activeScale, swing, breeze, duration, flow, rail, hanger, showCaption, detail, size, reducedMotion, onSelect });
  const refreshRef = useRef<(() => void) | null>(null);
  useEffect(() => {
    settings.current = { restAngle, gap, activeScale, swing, breeze, duration, flow, rail, hanger, showCaption, detail, size, reducedMotion, onSelect };
    refreshRef.current?.();
  }, [restAngle, gap, activeScale, swing, breeze, duration, flow, rail, hanger, showCaption, detail, size, reducedMotion, onSelect]);

  // A new array every render must not rebuild the scene: only its content does (the same for the textures)
  const itemsKey = useMemo(() => JSON.stringify(items), [items]);
  const itemsRef = useRef(items);
  itemsRef.current = items;
  const texturesKey = useMemo(() => JSON.stringify(textures ?? {}), [textures]);
  const texturesRef = useRef(textures);
  texturesRef.current = textures;

  useEffect(() => {
    const box = canvasBoxRef.current;
    const host = hostRef.current;
    const stageBox = stageRef.current;
    if (!box || !host || !stageBox) return;
    const list = itemsRef.current;
    if (list.length === 0) return;
    setFailed(false);

    const canvas = document.createElement("canvas");
    canvas.setAttribute("aria-hidden", "true");
    canvas.style.cssText = "position:absolute;inset:0;width:100%;height:100%;display:block;touch-action:pan-y";
    box.prepend(canvas);

    let renderer: THREE.WebGLRenderer;
    try {
      renderer = new THREE.WebGLRenderer({ canvas, antialias: true, alpha: true, powerPreference: "high-performance" });
    } catch {
      canvas.remove();
      setFailed(true);
      return;
    }
    renderer.setClearColor(0x000000, 0);
    renderer.outputColorSpace = THREE.SRGBColorSpace;
    // a straight tone curve: the cloth is lit like a product shot, so white stays white and black keeps its folds
    renderer.toneMapping = THREE.LinearToneMapping;
    // Context loss (a GPU reset, too many contexts): keep the canvas, show the overlay, and rebuild everything when it returns
    const onLost = (event: Event) => {
      event.preventDefault();
      setLost(true);
    };
    const onRestored = () => {
      setLost(false);
      setGeneration((g) => g + 1);
    };
    canvas.addEventListener("webglcontextlost", onLost);
    canvas.addEventListener("webglcontextrestored", onRestored);

    let alive = true;
    let visible = true;
    let raf = 0;
    let buildRaf = 0;
    let last = 0;
    let clock = 0;
    // how strong the breeze is right now: it eases toward the breeze prop, and to nothing while the detail view
    // covers the rack (so the rack can stop drawing under it)
    let airLevel = 0;
    let needsSnap = true;
    let built = false;

    // ----- the rack scene -----
    const fabricScans = texturesRef.current ?? {};
    const wardrobe: Wardrobe = createWardrobe(renderer, fabricScans);
    const scene = new THREE.Scene();
    // the light goes in once the textures have settled (see buildSome)
    const camera = new THREE.PerspectiveCamera(FOV, 1, 0.1, 80);
    const railMesh = wardrobe.rail(4, settings.current.rail);
    scene.add(railMesh.object);

    const entries: Entry[] = [];

    // ----- view and layout, derived from the props and the box size -----
    const view = { width: 1, height: 1, aspect: 1, hw: 2.4, camY: 0, railAt: RAIL_AT, panX: 0, panMax: 0, panLimit: 0, railLength: 4, dist: 20 };
    // The angle a garment at x is seen at, left or right of the camera's axis (0 in the middle)
    const viewAngle = (x: number) => Math.atan2(x - view.panX, view.dist);
    // Where a garment brought forward by z must stand so it shows on screen where it would without the lift
    const liftedX = (x: number, z: number) => view.panX + (x - view.panX) * (1 - z / view.dist);
    let appliedRail = settings.current.rail;
    let appliedHanger = settings.current.hanger;
    let appliedLength = 0;

    // Where every garment sits at rest and how far a facing garment pushes its first neighbour (garment units).
    // The first neighbour is pushed about 0.97 of a pitch (measured on the reference) for every garment, and more only when
    // the facing garment is wide enough that its sleeves would otherwise touch it
    type Layout = { rest: number[]; sideHalf: number[]; faceHalf: number[]; pitch: number; push: number[]; railLength: number };
    function computeLayout(): Layout {
      const s = settings.current;
      const a = (s.restAngle * Math.PI) / 180;
      const n = entries.length;
      const sideHalf = entries.map((e) => 0.5 * (lerp(e.garment.bodyWidth, e.garment.width, 0.5) * Math.abs(Math.cos(a)) + e.garment.depth * Math.abs(Math.sin(a))));
      const faceHalf = entries.map((e) => (e.garment.width * s.activeScale) / 2);
      const air = entries.map((e) => (s.gap / 100) * e.garment.bodyWidth);
      const rest: number[] = [0];
      for (let i = 1; i < n; i++) rest.push(rest[i - 1]! + sideHalf[i - 1]! + sideHalf[i]! + (air[i - 1]! + air[i]!) / 2);
      const centre = n > 0 ? (rest[0]! + rest[n - 1]!) / 2 : 0;
      for (let i = 0; i < n; i++) rest[i] = rest[i]! - centre;
      const pitch = n > 1 ? (rest[n - 1]! - rest[0]!) / (n - 1) : (sideHalf[0] ?? 0.2) * 2 + (air[0] ?? 0.1);
      const meanSide = sideHalf.reduce((sum, v) => sum + v, 0) / Math.max(1, n);
      const push = entries.map((e, i) => Math.max(faceHalf[i]! + meanSide + 0.06 * e.garment.bodyWidth - pitch, 0.97 * pitch));
      const railLength = (n > 1 ? rest[n - 1]! - rest[0]! : 0) + 2 * RAIL_PAD * pitch + 2 * CAP_ROOM;
      return { rest, sideHalf, faceHalf, pitch, push, railLength };
    }

    // Every hook position is the rest place plus the pushes of the garments that are open: no spring on x.
    // The facing garment's own hook never moves. The ends are held on the rail, and the order never inverts.
    function goalXs(layout: Layout): number[] {
      const n = entries.length;
      const xs = layout.rest.slice();
      for (let i = 0; i < n; i++) {
        const open = entries[i]!.open;
        if (open < 1e-5) continue;
        for (let d = 1; d <= PUSH_PROFILE.length; d++) {
          const amount = open * layout.push[i]! * PUSH_PROFILE[d - 1]!;
          if (i + d < n) xs[i + d] = xs[i + d]! + amount;
          if (i - d >= 0) xs[i - d] = xs[i - d]! - amount;
        }
      }
      let anchor = 0;
      for (let i = 1; i < n; i++) if (entries[i]!.open > entries[anchor]!.open) anchor = i;
      const lo = -layout.railLength / 2 + CAP_ROOM;
      const hi = layout.railLength / 2 - CAP_ROOM;
      const minGap = layout.sideHalf.reduce((sum, v) => sum + v, 0) / Math.max(1, n);
      for (let i = 0; i < n; i++) if (i !== anchor || xs[i]! < lo || xs[i]! > hi) xs[i] = i === anchor ? xs[i]! : clamp(xs[i]!, lo, hi);
      for (let j = anchor + 1; j < n; j++) xs[j] = Math.max(xs[j]!, xs[j - 1]! + minGap);
      for (let j = anchor - 1; j >= 0; j--) xs[j] = Math.min(xs[j]!, xs[j + 1]! - minGap);
      return xs;
    }

    let layout: Layout = computeLayout();
    // The longest garment on the rail, rail to hem: framing and the pill leave room for it
    const tallest = () => entries.reduce((most, e) => Math.max(most, e.garment.height), 0.3);

    function frameView() {
      const s = settings.current;
      layout = computeLayout();
      view.railLength = layout.railLength;
      // A tall box (tablet, phone) puts the rack a little lower, so the rack and the pill sit in the middle
      view.railAt = view.aspect < 1 ? 0.37 : RAIL_AT;
      const faceMax = layout.faceHalf.reduce((m, v) => Math.max(m, v), 0.2);
      // The lowest hem (facing garment, grown) must leave room for the pill under it, even on a short box
      const roomBelow = Math.max(0.2, (view.height - 84) / view.height - view.railAt);
      const natural = Math.max(tallest() / s.size, (s.activeScale * tallest()) / roomBelow);
      // like the reference, the rail spans about 78% of a wide box, with clear page either side
      const fit = view.railLength / (0.78 * view.aspect);
      // Fit the whole rail when that is a reasonable zoom (wide boxes, tablets); a phone keeps the garments big and pans
      // Tall boxes (tablets) zoom out at most 1.5x and pan a little; phones stay big and pan
      view.hw = fit > natural && (view.aspect >= 1.2 || fit <= natural * 3) ? (view.aspect < 1.2 ? clamp(fit, natural, 1.5 * natural) : fit) : natural;
      view.camY = -(0.5 - view.railAt) * view.hw;
      const visibleWidth = view.hw * view.aspect;
      // Panning reaches the rail's end caps; a facing end garment may go a little further
      view.panMax = Math.max(0, view.railLength / 2 + 0.06 - visibleWidth / 2);
      view.panLimit = view.panMax + faceMax + 0.1;
      view.panX = clamp(view.panX, -view.panLimit, view.panLimit);
      if (Math.abs(view.railLength - appliedLength) > 1e-4) {
        railMesh.setLength(view.railLength);
        appliedLength = view.railLength;
      }
      if (s.rail !== appliedRail) {
        railMesh.setFinish(s.rail);
        appliedRail = s.rail;
      }
      if (s.hanger !== appliedHanger) {
        for (const e of entries) e.garment.setHanger(s.hanger);
        appliedHanger = s.hanger;
      }
      camera.fov = FOV;
      const distance = view.hw / 2 / Math.tan((FOV * Math.PI) / 360);
      view.dist = distance;
      camera.position.set(view.panX, view.camY, distance);
      camera.rotation.set(0, 0, 0);
      camera.aspect = view.aspect;
      camera.near = distance * 0.2;
      camera.far = distance * 4;
      camera.updateProjectionMatrix();
      camera.updateMatrixWorld(true);
    }

    function resize() {
      const rect = host!.getBoundingClientRect();
      view.width = Math.max(1, rect.width);
      view.height = Math.max(1, rect.height);
      view.aspect = view.width / view.height;
      renderer.setPixelRatio(Math.min(window.devicePixelRatio || 1, 2));
      renderer.setSize(view.width, view.height, false);
      if (!built) return;
      frameView();
      renderer.render(scene, camera);
      if (needsSnap) {
        needsSnap = false;
        snapAll();
        // One frame is drawn before the canvas fades in, so there is no flash
        renderer.render(scene, camera);
        updateCaption();
        requestAnimationFrame(() => requestAnimationFrame(() => alive && setReady(true)));
      }
      if (detailState) sizeDetail();
      updateCaption();
      wake();
    }

    // ----- hover, touch, pan -----
    let active = -1;
    let lastActive = -1;
    let panVelocity = 0;
    let panGoal: number | null = null;
    let dragging = false;
    let dragMoved = false;
    let dragStartX = 0;
    let dragLastX = 0;
    let dragLastTime = 0;
    let touchId: number | null = null;
    // The mouse position while it is over the canvas: the garment under it is re-checked every frame
    let hovering = false;
    let hoverX = 0;
    let hoverY = 0;
    // The keyboard (or focus) picked the garment last: a resting pointer does not take it back until it moves
    let keyLead = false;

    const canPan = () => view.panMax > 0.02;

    // A garment that is cut off by the screen edge (tapped, hovered or focused with the keyboard) glides to the middle
    function bringIntoView(index: number) {
      if (!canPan()) return;
      const e = entries[index]!;
      const half = (view.hw * view.aspect) / 2;
      const reach = layout.faceHalf[index]! + 0.08;
      if (Math.abs(e.x - view.panX) + reach <= half) return;
      panGoal = clamp(e.x, -view.panLimit, view.panLimit);
      panVelocity = 0;
      wake();
    }

    function setActive(index: number) {
      if (!built || index === active) return;
      active = index;
      // a hand over a garment says it can be opened
      canvas.style.cursor = index >= 0 && settings.current.detail ? "pointer" : "";
      setActiveIdx(index);
      if (index >= 0) lastActive = index;
      if (index >= 0) bringIntoView(index);
      for (let i = 0; i < entries.length; i++) entries[i]!.tGoal = i === index ? 1 : 0;
      wake();
    }

    // The garment whose silhouette, as it is right now, contains the pointer. Over a gap nothing is picked.
    function pick(clientX: number, clientY: number, slack = 1): number {
      const rect = host!.getBoundingClientRect();
      const nx = ((clientX - rect.left) / rect.width) * 2 - 1;
      const ny = 1 - ((clientY - rect.top) / rect.height) * 2;
      const halfH = view.hw / 2;
      const wx = view.panX + nx * halfH * view.aspect;
      const wy = view.camY + ny * halfH;
      let best = -1;
      let bestDistance = Infinity;
      for (let i = 0; i < entries.length; i++) {
        const e = entries[i]!;
        const scale = lerp(1, settings.current.activeScale, e.t);
        if (wy > ZONE_TOP || wy < -scale * e.garment.height - 0.05) continue;
        const half = lerp(layout.sideHalf[i]!, layout.faceHalf[i]!, e.t) * (i === active ? 1.05 : 1) * slack;
        const distance = Math.abs(wx - e.x);
        if (distance <= half && distance < bestDistance) {
          best = i;
          bestDistance = distance;
        }
      }
      return best;
    }

    // A mouse, or a pen that is hovering with no button down, points; touch and a pen on the glass drag
    const isPointing = (event: PointerEvent) => event.pointerType === "mouse" || (event.pointerType === "pen" && event.buttons === 0);

    function onPointerMove(event: PointerEvent) {
      if (openRef.current || closing) return;
      if (!isPointing(event)) {
        if (touchId !== event.pointerId || !event.isPrimary) return;
        const dx = event.clientX - dragLastX;
        if (Math.abs(event.clientX - dragStartX) > 6) dragMoved = true;
        if (dragMoved && canPan()) {
          const perPixel = (view.hw * view.aspect) / view.width;
          const now = performance.now();
          panVelocity = (-dx * perPixel) / Math.max(0.008, (now - dragLastTime) / 1000);
          view.panX = clamp(view.panX - dx * perPixel, -view.panMax, view.panMax);
          panGoal = null;
          dragLastTime = now;
          frameView();
          wake();
        }
        dragLastX = event.clientX;
        return;
      }
      hovering = true;
      keyLead = false;
      hoverX = event.clientX;
      hoverY = event.clientY;
      setActive(pick(event.clientX, event.clientY));
    }

    function onPointerDown(event: PointerEvent) {
      if (openRef.current) return;
      if (isPointing(event) || event.pointerType === "mouse") return;
      // A second finger must not take over from the first
      if (touchId !== null || !event.isPrimary) return;
      touchId = event.pointerId;
      dragging = true;
      dragMoved = false;
      dragStartX = dragLastX = event.clientX;
      dragLastTime = performance.now();
      panVelocity = 0;
      try {
        canvas.setPointerCapture(event.pointerId);
      } catch {
        // some browsers refuse capture for synthetic pointers: dragging still works without it
      }
    }

    // A cancelled touch (the browser took it for scrolling) never picks, faces or opens anything
    function onPointerCancel(event: PointerEvent) {
      if (touchId === event.pointerId) {
        touchId = null;
        dragging = false;
        wake();
      }
    }

    function onPointerUp(event: PointerEvent) {
      if (event.pointerType === "mouse" && event.button !== 0) return;
      const touchLike = event.pointerType === "touch" || (event.pointerType === "pen" && touchId === event.pointerId);
      if (touchLike) {
        if (touchId !== event.pointerId) return;
        touchId = null;
        dragging = false;
        if (dragMoved) {
          wake();
          return;
        }
      }
      if (openRef.current || closing) return;
      // A finger is fatter than a pointer: a tap gets a wider silhouette
      const index = pick(event.clientX, event.clientY, touchLike ? 1.5 : 1);
      if (index < 0) {
        if (touchLike) setActive(-1);
        return;
      }
      // A tap turns a garment to face you, a second tap on it opens the detail view
      if (index === active && (!touchLike || entries[index]!.t > 0.6)) {
        if (settings.current.detail) openDetail(index);
      } else {
        setActive(index);
        if (touchLike && canPan()) {
          // A facing end garment may pass the normal pan end by half its width, so it ends up fully in view
          panGoal = clamp(entries[index]!.x, -view.panLimit, view.panLimit);
          wake();
        }
      }
    }

    function onPointerLeave(event: PointerEvent) {
      if (event.pointerType === "touch") return;
      hovering = false;
      // Going onto the pill keeps the garment facing (the pill is for it); the detail layer covers the canvas, which fires a leave too
      const next = event.relatedTarget as Node | null;
      if (next && pillRef.current?.contains(next)) return;
      if (!openRef.current && !closing) setActive(-1);
    }

    canvas.addEventListener("pointermove", onPointerMove);
    canvas.addEventListener("pointerdown", onPointerDown);
    canvas.addEventListener("pointerup", onPointerUp);
    canvas.addEventListener("pointercancel", onPointerCancel);
    canvas.addEventListener("pointerleave", onPointerLeave);

    // ----- caption under the hem of the facing garment -----
    const captionEl = captionRef.current;
    let captionIndex = -1;
    const corner = new THREE.Vector3();
    const pillEl = pillRef.current;
    // depth: how far below the rail the hem is
    const hemPx = (depth: number, z: number) => {
      corner.set(0, -depth, z).project(camera);
      return (-corner.y * 0.5 + 0.5) * view.height;
    };
    // Puts the pill below the hems and says whether the caption still fits between the two without touching either
    function layoutDom(): boolean {
      const s = settings.current;
      const lowestHem = hemPx(s.activeScale * tallest(), 0.06);
      // Like the reference, the pill sits low under the rack, about a fifth of the box height below the lowest hem
      // (so the caption has its own band between them), kept above the bottom 62 px and never closer than 60 px
      const centre = Math.min(view.height - 30, Math.max(Math.min(view.height - 62, lowestHem + Math.max(90, view.height * 0.2)), lowestHem + 60));
      if (pillEl) pillEl.style.transform = `translate(-50%, ${(centre - 18).toFixed(1)}px)`;
      return centre - 18 >= lowestHem + 18 + 16 + 4;
    }
    function updateCaption() {
      const fits = layoutDom();
      if (!captionEl) return;
      const s = settings.current;
      const idx = active >= 0 ? active : captionIndex;
      const e = idx >= 0 ? entries[idx] : undefined;
      if (!e || !s.showCaption || openRef.current || !fits) {
        captionEl.style.opacity = "0";
        return;
      }
      if (idx !== captionIndex) {
        captionIndex = idx;
        captionEl.textContent = list[idx]!.name;
      }
      const scale = lerp(1, s.activeScale, e.t);
      const py = hemPx(scale * e.garment.height, e.garment.object.position.z);
      corner.set(e.garment.object.position.x, 0, e.garment.object.position.z).project(camera);
      const px = (corner.x * 0.5 + 0.5) * view.width;
      captionEl.style.transform = `translate(${px.toFixed(1)}px, ${(py + 18).toFixed(1)}px) translateX(-50%)`;
      captionEl.style.opacity = String(clamp(e.t * 1.4 - 0.15, 0, 1) * (active >= 0 ? 1 : e.t));
      if (active < 0 && e.t < 0.02) captionIndex = -1;
    }

    // The first layout puts everything straight at its resting place: nothing slides or turns on load
    function snapAll() {
      const s = settings.current;
      for (const e of entries) {
        e.t = e.tGoal;
        e.open = e.tGoal;
      }
      const goals = goalXs(layout);
      const rest = (s.restAngle * Math.PI) / 180;
      for (const [i, e] of entries.entries()) {
        e.x = goals[i]!;
        Object.assign(e, { tVelocity: 0, xVelocity: 0, lastTVelocity: 0, lastXVelocity: 0 });
        e.cloth.reset();
        e.garment.object.position.set(liftedX(e.x, 0.06 * e.t), 0, 0.06 * e.t);
        e.garment.object.rotation.set(0, 0, 0);
        e.garment.turn.rotation.y = rest * (1 - e.t) - viewAngle(e.x);
        e.garment.turn.scale.setScalar(lerp(1, s.activeScale, e.t));
        e.garment.setCloth({ twist: e.cloth.twist, sway: e.cloth.sway, ripple: 0, time: 0 });
      }
    }

    // ----- one frame of the rack -----
    function stepRack(dt: number): boolean {
      const s = settings.current;
      const reduced = s.reducedMotion;
      const omega = 4.6 / (reduced ? 0.15 : Math.max(0.1, s.duration));
      const tilt = reduced ? 0 : (s.swing * Math.PI) / 180;
      let busy = false;
      clock += dt;
      // the breeze comes up over the first seconds, so nothing jumps when the rack appears, and dies down while the
      // detail view is open
      const airGoal = reduced || openRef.current ? 0 : Math.max(0, Math.min(1, s.breeze)) * Math.min(1, clock / 2.5) ** 2;
      airLevel += (airGoal - airLevel) * (1 - Math.exp(-dt / 0.6));
      if (airGoal === 0 && airLevel < 1e-3) airLevel = 0;
      const air = airLevel;
      if (air > 0 || airGoal > 0) busy = true;

      for (const e of entries) {
        [e.t, e.tVelocity] = spring(e.t, e.tVelocity, e.tGoal, omega, dt);
        if (Math.abs(e.t - e.tGoal) > 5e-4 || Math.abs(e.tVelocity) > 5e-3) busy = true;
        else {
          e.t = e.tGoal;
          e.tVelocity = 0;
        }
        // The spacing eases out like a first-order lag: it starts moving in the very first frame and never overshoots
        const tau = reduced ? 0.04 : e.tGoal > e.open ? OPEN_TAU : CLOSE_TAU;
        e.open += (e.tGoal - e.open) * (1 - Math.exp(-dt / tau));
        if (Math.abs(e.open - e.tGoal) > 1e-3) busy = true;
        else e.open = e.tGoal;
      }

      layout = computeLayout();
      const goals = goalXs(layout);
      const rest = (s.restAngle * Math.PI) / 180;
      for (const [i, e] of entries.entries()) {
        const x = goals[i]!;
        // a jump of the layout (a control dragged) is not a push: the cloth only feels real motion along the rail
        e.xVelocity = dt > 0 && Math.abs(x - e.x) < 0.15 ? (x - e.x) / dt : e.lastXVelocity;
        e.x = x;
        const g = e.garment;
        // The facing garment comes forward a little and is drawn after its neighbours; its x is pulled in by the
        // same amount the lift would push it out on screen, so its hook stays put
        g.object.position.z = 0.06 * e.t;
        g.object.position.x = liftedX(e.x, g.object.position.z);
        g.object.renderOrder = e.t > 0.001 ? 10 : 0;
        // An optional rigid tilt against the push (0 by default): the hanger leans, the cloth does not bend. A
        // breeze rocks each hanger a fraction of a degree on its hook.
        const rock = air * (1 - e.t) * 0.012 * Math.sin(clock * 1.1 - i * 0.5 + 0.7);
        g.object.rotation.z = (tilt > 0 ? tilt * Math.tanh(-e.xVelocity / 2) : 0) + rock;
        // turned by the angle it is seen at, so every garment looks the same wherever it hangs, and the facing one
        // faces you square-on. In a breeze a side-on garment drifts a few degrees back and forth (two slow waves down
        // the rail), and the air pushes its cloth round and along the rail.
        const calm = 1 - e.t;
        const drift = air * calm * 0.026 * (Math.sin(clock * 0.9 - i * 0.55) + 0.35 * Math.sin(clock * 1.53 - i * 0.8 + 1.1));
        const airTurn = air * calm * 18 * Math.sin(clock * 1.46 - i * 0.6 + 0.4);
        const airSlide = air * calm * 7 * Math.sin(clock * 1.23 - i * 0.45 + 2);
        g.turn.rotation.y = rest * (1 - e.t) - viewAngle(e.x) + drift;
        g.turn.scale.setScalar(lerp(1, s.activeScale, e.t));
        // The cloth moves only when the garment does, then settles still: when the hanger swivels the lower cloth
        // lags, swings through once and settles, and when the garment is pushed along the rail its hem trails and
        // swings back, while a faint ripple runs down the fabric. The hanger's turn is rest * (1 - t), so its
        // angular acceleration is -rest times the facing amount's.
        if (reduced || dt <= 0) e.cloth.reset();
        else if (e.cloth.step(dt, (-rest * (e.tVelocity - e.lastTVelocity)) / dt + airTurn, (e.xVelocity - e.lastXVelocity) / dt + airSlide, s.flow)) busy = true;
        e.lastTVelocity = e.tVelocity;
        e.lastXVelocity = e.xVelocity;
        g.setCloth({ twist: e.cloth.twist, sway: e.cloth.sway, ripple: e.cloth.ripple, time: clock });
      }

      // Panning on a phone: inertia after a flick, or a glide to a tapped garment
      if (!dragging) {
        if (panGoal !== null) {
          view.panX += (panGoal - view.panX) * (1 - Math.exp(-8 * dt));
          if (Math.abs(panGoal - view.panX) < 0.002) panGoal = null;
          busy = true;
        } else if (Math.abs(panVelocity) > 0.01) {
          view.panX = clamp(view.panX + panVelocity * dt, -view.panMax, view.panMax);
          panVelocity *= Math.exp(-4 * dt);
          if (view.panX <= -view.panMax || view.panX >= view.panMax) panVelocity = 0;
          busy = true;
        } else panVelocity = 0;
      } else busy = true;
      if (busy || canPan()) frameView();
      return busy;
    }

    // ----- the detail view: a second renderer with its own copy of the wardrobe -----
    // (a WebGL texture can't cross contexts, so the second canvas builds its own environment)
    // A garment on the stage. A swap has two: the one leaving slides aside, turns side-on like on the rail and
    // fades, while the next slides in turning to face you; each one's cloth lags its own turn and slide.
    type Shown = {
      garment: Garment;
      /** Across the stage, garment units, 0 is the middle */
      x: number;
      xVelocity: number;
      xGoal: number;
      /** Facing amount: 1 faces you, 0 is side-on at the rest angle */
      t: number;
      tVelocity: number;
      tGoal: number;
      opacity: number;
      /** How fast the opacity moves toward 1 (or 0 once leaving), per second */
      fade: number;
      leaving: boolean;
      cloth: ClothMotion;
      lastXVelocity: number;
      lastTVelocity: number;
    };
    type DetailState = {
      renderer: THREE.WebGLRenderer;
      wardrobe: Wardrobe;
      scene: THREE.Scene;
      camera: THREE.PerspectiveCamera;
      shown: Shown[];
      /** Garments built ahead of time (the ones either side of the one on show), so an arrow press never waits for a
       *  garment's fabric to be drawn and uploaded: the swap starts on the very next frame */
      ready: Map<number, Garment>;
      canvas: HTMLCanvasElement;
    };
    let detailState: DetailState | null = null;
    let detailIdx = 0;
    let closeTimer = 0;
    let disposeTimer = 0;
    const openRef = { current: false };
    // True during the short fade out of the detail layer
    let closing = false;

    // The detail canvas has its own lost and restored handlers: a loss only drops the detail state, the next open rebuilds it
    const onDetailLost = (event: Event) => {
      event.preventDefault();
      disposeDetail();
      if (openRef.current) closeDetail();
    };

    function fadeStage(to: number, seconds: number, ease: string) {
      // Set from the top each time, so a swap restarts its fade instead of snapping
      // A fade in starts from 0; a fade out starts from wherever the opacity is now (it may still be fading in)
      const from = to === 1 ? "0" : String(parseFloat(getComputedStyle(stageBox!).opacity) || 0);
      stageBox!.style.transition = "none";
      stageBox!.style.opacity = from;
      void stageBox!.offsetWidth;
      stageBox!.style.transition = `opacity ${seconds}s ${ease}`;
      stageBox!.style.opacity = String(to);
    }

    function ensureDetail(): DetailState | null {
      if (detailState) return detailState;
      const c = document.createElement("canvas");
      c.setAttribute("aria-hidden", "true");
      c.style.cssText = "position:absolute;inset:0;width:100%;height:100%;display:block";
      stageBox!.prepend(c);
      let r: THREE.WebGLRenderer;
      try {
        r = new THREE.WebGLRenderer({ canvas: c, antialias: true, alpha: true, powerPreference: "high-performance" });
      } catch {
        c.remove();
        return null;
      }
      r.setClearColor(0x000000, 0);
      r.outputColorSpace = THREE.SRGBColorSpace;
      r.toneMapping = THREE.LinearToneMapping;
      // the stage is drawn in passes (solid garments, then each fading one), so it is cleared by hand
      r.autoClear = false;
      c.addEventListener("webglcontextlost", onDetailLost);
      const w = createWardrobe(r, fabricScans);
      const sc = new THREE.Scene();
      sc.environment = w.environment;
      w.addLights(sc);
      detailState = { renderer: r, wardrobe: w, scene: sc, camera: new THREE.PerspectiveCamera(FOV, 1, 0.1, 80), shown: [], ready: new Map(), canvas: c };
      sizeDetail();
      return detailState;
    }

    function dropShown(d: DetailState, s: Shown) {
      d.scene.remove(s.garment.object);
      s.garment.dispose();
      d.shown.splice(d.shown.indexOf(s), 1);
    }

    function disposeDetail() {
      const d = detailState;
      if (!d) return;
      detailState = null;
      d.canvas.removeEventListener("webglcontextlost", onDetailLost);
      for (const s of d.shown.slice()) dropShown(d, s);
      for (const g of d.ready.values()) g.dispose();
      d.ready.clear();
      window.clearTimeout(prepareTimer);
      d.wardrobe.dispose();
      d.renderer.dispose();
      d.renderer.forceContextLoss();
      d.canvas.remove();
    }

    function sizeDetail() {
      const d = detailState;
      if (!d) return;
      d.renderer.setPixelRatio(Math.min(window.devicePixelRatio || 1, 2));
      d.renderer.setSize(view.width, view.height, false);
      const widest = entries.reduce((m, e) => Math.max(m, e.garment.width), 0.5);
      // On a short stage the garment shrinks so the title and pill always fit under it
      const takes = clamp((view.height * 0.92 - 150) / view.height, 0.3, DETAIL_TAKES);
      const top = takes >= DETAIL_TAKES ? DETAIL_TOP : 0.08;
      // Narrow screens: the garment shrinks until the two keys fit beside it (at least 16 px clear; 72 px when there is room)
      const hw = Math.max((0.1 + tallest()) / takes, (widest * 1.4) / view.aspect, (widest * view.height) / Math.max(40, view.width - 2 * (16 + 44 + 10)));
      const camY = 0.1 + top * hw - hw / 2;
      const distance = hw / 2 / Math.tan((FOV * Math.PI) / 360);
      d.camera.aspect = view.aspect;
      d.camera.position.set(0, camY, distance);
      d.camera.near = distance * 0.2;
      d.camera.far = distance * 4;
      d.camera.updateProjectionMatrix();
      // The keys sit beside the garment: half its widest width on screen, then the clear space
      const halfPx = (widest / 2 / hw) * view.height;
      dialogRef.current?.style.setProperty("--half", `${Math.round(halfPx)}px`);
      renderDetail();
    }

    // Solid garments are drawn together; a garment that is fading is drawn twice, first only its depth, then its
    // colour at its opacity over that depth, so it fades as one piece and its own back never shows through it
    function renderDetail() {
      const d = detailState;
      if (!d) return;
      const r = d.renderer;
      r.clear();
      const solid = d.shown.filter((s) => s.opacity >= 0.999);
      const fading = d.shown.filter((s) => s.opacity < 0.999 && s.opacity > 0.001);
      for (const s of d.shown) s.garment.object.visible = false;
      if (solid.length) {
        for (const s of solid) {
          s.garment.setPass("solid");
          s.garment.object.visible = true;
        }
        r.render(d.scene, d.camera);
        for (const s of solid) s.garment.object.visible = false;
      }
      for (const s of fading) {
        s.garment.object.visible = true;
        s.garment.setPass("depth");
        r.render(d.scene, d.camera);
        // eased, so a garment comes and goes softly instead of linearly
        s.garment.setPass("fade", s.opacity * s.opacity * (3 - 2 * s.opacity));
        r.render(d.scene, d.camera);
        s.garment.object.visible = false;
      }
      for (const s of d.shown) s.garment.object.visible = true;
    }

    function makeDetailGarment(d: DetailState, index: number): Garment {
      const garment = d.wardrobe.garment(list[index]!, settings.current.hanger, { fadeable: true });
      // no rail here: the hook is turned to show its curve
      garment.hook.rotation.y = Math.PI / 2;
      return garment;
    }

    // While the stage is open, the garments either side of the one on show are built one at a time in idle moments.
    // Any other prepared garment is let go, so at most two wait at a time.
    let prepareTimer = 0;
    function prepareNeighbours() {
      window.clearTimeout(prepareTimer);
      const d = detailState;
      if (!d || !openRef.current || list.length < 2) return;
      const wanted = [(detailIdx + 1) % list.length, (detailIdx - 1 + list.length) % list.length];
      for (const [index, g] of d.ready) {
        if (!wanted.includes(index)) {
          g.dispose();
          d.ready.delete(index);
        }
      }
      const missing = wanted.find((index) => !d.ready.has(index) && index !== detailIdx);
      if (missing === undefined) return;
      // after the swap has had its first frames, and then one garment per pause
      prepareTimer = window.setTimeout(() => {
        const idle = (window as Window & { requestIdleCallback?: (cb: () => void, o?: { timeout: number }) => number }).requestIdleCallback;
        const build = () => {
          const now = detailState;
          if (!now || !openRef.current || now.ready.has(missing)) return;
          const g = makeDetailGarment(now, missing);
          // its shaders are the ones already on screen, so only its textures were new, and those were uploaded as
          // it was built
          now.ready.set(missing, g);
          prepareNeighbours();
        };
        if (idle) idle(build, { timeout: 600 });
        else build();
      }, 180);
    }

    // Puts a garment on the stage: facing you at the middle, or (from a side) side-on, ready to swing in
    function addShown(d: DetailState, index: number, from: number): Shown {
      const garment = d.ready.get(index) ?? makeDetailGarment(d, index);
      d.ready.delete(index);
      garment.object.visible = true;
      d.scene.add(garment.object);
      const s: Shown = { garment, x: from, xVelocity: 0, xGoal: 0, t: from === 0 ? 1 : 0, tVelocity: 0, tGoal: 1, opacity: from === 0 ? 1 : 0, fade: 1 / 0.2, leaving: false, cloth: new ClothMotion(), lastXVelocity: 0, lastTVelocity: 0 };
      d.shown.push(s);
      poseShown(s, 0);
      return s;
    }

    function poseShown(s: Shown, time: number) {
      const rest = (settings.current.restAngle * Math.PI) / 180;
      s.garment.object.position.x = s.x;
      s.garment.turn.rotation.y = rest * (1 - s.t);
      s.garment.setCloth({ twist: s.cloth.twist, sway: s.cloth.sway, ripple: s.cloth.ripple, time });
    }

    // One frame of the stage: each garment's slide and turn are critically damped springs, its opacity eases, and
    // its cloth is driven by both. A garment that has faded out leaves the stage.
    function stepStage(dt: number): boolean {
      const d = detailState;
      if (!d || d.shown.length === 0) return false;
      const s0 = settings.current;
      const reduced = s0.reducedMotion;
      const rest = (s0.restAngle * Math.PI) / 180;
      let busy = false;
      for (const s of d.shown.slice()) {
        const slide = 4.6 / (reduced ? 0.12 : s.leaving ? 0.42 : 0.58);
        const turn = 4.6 / (reduced ? 0.12 : s.leaving ? 0.34 : 0.5);
        [s.x, s.xVelocity] = spring(s.x, s.xVelocity, s.xGoal, slide, dt);
        [s.t, s.tVelocity] = spring(s.t, s.tVelocity, s.tGoal, turn, dt);
        s.opacity = clamp(s.opacity + (s.leaving ? -1 : 1) * s.fade * dt, 0, 1);
        if (s.leaving && s.opacity <= 0) {
          dropShown(d, s);
          continue;
        }
        const settled = Math.abs(s.x - s.xGoal) < 1e-4 && Math.abs(s.xVelocity) < 1e-3 && Math.abs(s.t - s.tGoal) < 5e-4 && Math.abs(s.tVelocity) < 5e-3;
        if (settled) {
          s.x = s.xGoal;
          s.xVelocity = 0;
          s.t = s.tGoal;
          s.tVelocity = 0;
        } else busy = true;
        if (s.opacity > 0 && s.opacity < 1) busy = true;
        if (reduced) s.cloth.reset();
        else if (s.cloth.step(dt, (-rest * (s.tVelocity - s.lastTVelocity)) / dt, (s.xVelocity - s.lastXVelocity) / dt, s0.flow)) busy = true;
        s.lastXVelocity = s.xVelocity;
        s.lastTVelocity = s.tVelocity;
        poseShown(s, clock);
      }
      return busy;
    }

    // Opens the stage on one garment, facing you; its cloth gets a small push, as if it had just been hung there
    function showDetailGarment(index: number): boolean {
      const d = ensureDetail();
      if (!d) return false;
      for (const s of d.shown.slice()) dropShown(d, s);
      const s = addShown(d, index, 0);
      if (!settings.current.reducedMotion) s.cloth.kick(1.6 * settings.current.flow, 0.12 * settings.current.flow);
      renderDetail();
      return true;
    }

    // The rack copy of the garment shown big is hidden once the detail view is in, so no blurred double sits behind it
    let hiddenIndex = -1;
    // the rack under the open detail view needs one more frame after a garment is hidden or shown
    let rackDirty = false;
    let hideTimer = 0;
    function hideRack(index: number) {
      if (hiddenIndex >= 0 && entries[hiddenIndex]) entries[hiddenIndex]!.garment.object.visible = true;
      hiddenIndex = index;
      if (index >= 0 && entries[index]) entries[index]!.garment.object.visible = false;
      rackDirty = true;
      wake();
    }

    function openDetail(index: number) {
      if (!settings.current.detail || openRef.current || !built) return;
      window.clearTimeout(closeTimer);
      window.clearTimeout(disposeTimer);
      closing = false;
      detailIdx = index;
      if (!showDetailGarment(index)) return;
      detailIndexRef.current = index;
      openRef.current = true;
      // The rack stays as it is under the veil, with this garment facing
      setActive(index);
      flushSync(() => {
        setDetailIndex(index);
        setStageOn(true);
        setOpen(true);
      });
      fadeStage(1, 0.25, "ease-out");
      window.clearTimeout(hideTimer);
      hideTimer = window.setTimeout(() => {
        if (openRef.current) hideRack(detailIdx);
      }, 260);
      wake();
      prepareNeighbours();
    }

    function finishClose() {
      if (!closing) return;
      closing = false;
      flushSync(() => setStageOn(false));
      const d = detailState;
      window.clearTimeout(prepareTimer);
      if (d) {
        for (const s of d.shown.slice()) dropShown(d, s);
        for (const g of d.ready.values()) g.dispose();
        d.ready.clear();
        renderDetail();
      }
      // focus has gone back to the garment's button: it stays facing; otherwise the pointer decides
      const focused = garmentButtons.current.indexOf(document.activeElement as HTMLButtonElement);
      setActive(focused >= 0 ? focused : hovering && !keyLead ? pick(hoverX, hoverY) : -1);
      // The second renderer is not kept for long: it is built again on the next open
      window.clearTimeout(disposeTimer);
      disposeTimer = window.setTimeout(() => {
        if (!openRef.current) disposeDetail();
      }, 1500);
    }

    function closeDetail() {
      if (!openRef.current) return;
      openRef.current = false;
      closing = true;
      setOpen(false);
      window.clearTimeout(hideTimer);
      hideRack(-1);
      // Under the fade the rack shows the garment that was last shown, facing
      setActive(detailIdx);
      fadeStage(0, 0.15, "linear");
      window.clearTimeout(closeTimer);
      closeTimer = window.setTimeout(finishClose, 160);
    }

    // Next and previous: the title and counter swap at once. The garment on show slides aside, turning side-on as it
    // fades; the next one swings in from the other side, turning to face you, and its cloth lags and settles.
    function stepDetail(direction: 1 | -1) {
      if (!openRef.current || list.length < 2) return;
      const d = ensureDetail();
      if (!d) return;
      const next = (detailIdx + direction + list.length) % list.length;
      const reduced = settings.current.reducedMotion;
      for (const s of d.shown) {
        if (s.leaving) continue;
        s.leaving = true;
        s.fade = 1 / (reduced ? 0.12 : 0.3);
        if (!reduced) {
          s.xGoal = -direction * 0.5 * s.garment.width;
          s.tGoal = 0;
        }
      }
      // a quick run of presses never piles up garments: older ones on their way out hurry their fade, and only a
      // fourth one at once is let go
      for (const s of d.shown.slice(0, -1)) s.fade = Math.max(s.fade, 1 / 0.08);
      while (d.shown.length > 2) dropShown(d, d.shown[0]!);
      const entering = addShown(d, next, reduced ? 0 : direction * 0.62 * entries[next]!.garment.width);
      if (reduced) {
        entering.opacity = 0;
        entering.fade = 1 / 0.12;
      }
      detailIdx = next;
      detailIndexRef.current = next;
      setActive(next);
      if (hiddenIndex >= 0) hideRack(next);
      flushSync(() => setDetailIndex(next));
      wake();
      prepareNeighbours();
    }

    engineRef.current = {
      setActive(index: number) {
        keyLead = index >= 0;
        setActive(index);
      },
      openDetail,
      closeDetail,
      stepDetail,
      releaseHover() {
        if (!openRef.current && !closing && !hovering) setActive(-1);
      },
      activeIndex: () => active,
      lastIndex: () => lastActive,
    };

    // ----- the loop: only runs while something moves -----
    function tick(now: number) {
      raf = 0;
      if (!alive) return;
      const dt = Math.min(0.05, Math.max(0.001, (now - (last || now - 16)) / 1000));
      last = now;
      const busy = stepRack(dt);
      const staging = stepStage(dt);
      // Things moved, so the garment under a resting pointer may have changed
      if (hovering && !keyLead && !openRef.current && !closing) setActive(pick(hoverX, hoverY));
      updateCaption();
      // under the open detail view the rack is only drawn again while it still moves
      if (busy || !openRef.current || rackDirty) {
        renderer.render(scene, camera);
        rackDirty = false;
      }
      if (detailState) renderDetail();
      if ((busy || staging) && visible && !document.hidden) raf = requestAnimationFrame(tick);
      else last = 0;
    }
    function wake() {
      if (!built || raf || !alive || !visible || document.hidden) return;
      raf = requestAnimationFrame(tick);
    }
    refreshRef.current = () => {
      if (!built) return;
      frameView();
      wake();
    };

    let resizeObserver: ResizeObserver | null = null;
    let intersection: IntersectionObserver | null = null;
    const onVisibility = () => {
      if (!document.hidden) wake();
    };
    document.addEventListener("visibilitychange", onVisibility);

    // Moving the window to another monitor changes the pixel ratio without changing the size
    let dprQuery: MediaQueryList | null = null;
    const onDpr = () => {
      resize();
      armDpr();
    };
    function armDpr() {
      dprQuery?.removeEventListener("change", onDpr);
      dprQuery = window.matchMedia(`(resolution: ${window.devicePixelRatio || 1}dppx)`);
      dprQuery.addEventListener("change", onDpr);
    }
    armDpr();

    // The garments are built a couple per animation frame while the canvas is still hidden, so the page never freezes;
    // when the last one is in, the first layout snaps and the canvas fades in
    let nextToBuild = 0;
    function buildSome() {
      buildRaf = 0;
      if (!alive) return;
      for (let k = 0; k < 2 && nextToBuild < list.length; k++, nextToBuild++) {
        const garment = wardrobe.garment(list[nextToBuild]!, settings.current.hanger);
        scene.add(garment.object);
        entries.push({ garment, t: 0, tVelocity: 0, tGoal: 0, open: 0, x: 0, xVelocity: 0, cloth: new ClothMotion(), lastTVelocity: 0, lastXVelocity: 0 });
      }
      if (nextToBuild < list.length) {
        buildRaf = requestAnimationFrame(buildSome);
        return;
      }
      built = true;
      resizeObserver = new ResizeObserver(resize);
      resizeObserver.observe(host!);
      intersection = new IntersectionObserver((records) => {
        visible = records[records.length - 1]?.isIntersecting ?? true;
        if (visible) wake();
      });
      intersection.observe(host!);
      // The shaders are compiled before the first visible frame (the canvas stays hidden until then), so there is no stall
      // when the page appears. If compiling fails the first render still works, just later.
      const start = () => {
        if (alive) resize();
      };
      renderer.compileAsync(scene, camera).then(start, start);
    }
    // The fabric scans and the studio arrive before the first garment is made (the canvas is still hidden), so
    // nothing changes look once it shows; if they are slow, the drawn knit and the plain room go ahead after 2.5 s
    let waitTimer = 0;
    const begin = () => {
      window.clearTimeout(waitTimer);
      if (!alive || built || buildRaf || nextToBuild > 0) return;
      scene.environment = wardrobe.environment;
      wardrobe.addLights(scene);
      buildSome();
    };
    waitTimer = window.setTimeout(begin, 2500);
    wardrobe.ready.then(begin, begin);

    return () => {
      dprQuery?.removeEventListener("change", onDpr);
      window.clearTimeout(waitTimer);
      alive = false;
      window.clearTimeout(hideTimer);
      window.clearTimeout(closeTimer);
      window.clearTimeout(disposeTimer);
      window.clearTimeout(prepareTimer);
      cancelAnimationFrame(raf);
      cancelAnimationFrame(buildRaf);
      engineRef.current = null;
      refreshRef.current = null;
      resizeObserver?.disconnect();
      intersection?.disconnect();
      document.removeEventListener("visibilitychange", onVisibility);
      canvas.removeEventListener("webglcontextlost", onLost);
      canvas.removeEventListener("webglcontextrestored", onRestored);
      canvas.removeEventListener("pointermove", onPointerMove);
      canvas.removeEventListener("pointerdown", onPointerDown);
      canvas.removeEventListener("pointerup", onPointerUp);
      canvas.removeEventListener("pointercancel", onPointerCancel);
      canvas.removeEventListener("pointerleave", onPointerLeave);
      for (const e of entries) e.garment.dispose();
      railMesh.dispose();
      wardrobe.dispose();
      scene.environment = null;
      renderer.dispose();
      renderer.forceContextLoss();
      canvas.remove();
      disposeDetail();
      setReady(false);
      setOpen(false);
      setStageOn(false);
    };
    // The scene is rebuilt only when the garments themselves change
    // eslint-disable-next-line react-hooks/exhaustive-deps
  }, [itemsKey, texturesKey, generation]);

  // Focus moves into the dialog on open and back to the garment on close
  useEffect(() => {
    if (open) dialogRef.current?.focus();
    else if (wasOpen.current) (garmentButtons.current[detailIndexRef.current] ?? hostRef.current)?.focus();
    wasOpen.current = open;
  }, [open]);

  // A key looks pressed for at least 120 ms, whether the pointer or the real arrow key did it
  const press = (which: "prev" | "next") => {
    window.clearTimeout(pressTimer.current);
    pressedAt.current = performance.now();
    setPressed(which);
  };
  const release = () => {
    window.clearTimeout(pressTimer.current);
    const wait = Math.max(0, 120 - (performance.now() - pressedAt.current));
    pressTimer.current = window.setTimeout(() => setPressed(null), wait);
  };
  useEffect(() => () => window.clearTimeout(pressTimer.current), []);
  // Closing the detail view clears a key that was still showing as pressed, and its timer
  useEffect(() => {
    if (!open) {
      window.clearTimeout(pressTimer.current);
      setPressed(null);
    }
  }, [open]);

  // While the detail view is open the page behind is out of reach: keys are handled here, wherever focus is,
  // and Tab cycles through the dialog's own buttons
  useEffect(() => {
    if (!open) return;
    const onKey = (event: globalThis.KeyboardEvent) => {
      const engine = engineRef.current;
      if (!engine || event.altKey || event.ctrlKey || event.metaKey) return;
      if (event.key === "Escape") {
        event.preventDefault();
        engine.closeDetail();
      } else if (event.key === "ArrowRight" || event.key === "ArrowLeft") {
        event.preventDefault();
        // holding a key flips once, not at the key repeat rate
        if (event.repeat) return;
        const dir = event.key === "ArrowRight" ? 1 : -1;
        press(dir === 1 ? "next" : "prev");
        engine.stepDetail(dir);
      } else if (event.key === "Tab") {
        const stops = Array.from(dialogRef.current?.querySelectorAll<HTMLButtonElement>("button") ?? []);
        if (stops.length === 0) return;
        const at = stops.indexOf(document.activeElement as HTMLButtonElement);
        const next = event.shiftKey ? (at <= 0 ? stops.length - 1 : at - 1) : at < 0 || at === stops.length - 1 ? 0 : at + 1;
        event.preventDefault();
        stops[next]!.focus();
      }
    };
    const onKeyUp = (event: globalThis.KeyboardEvent) => {
      if (event.key === "ArrowRight" || event.key === "ArrowLeft") release();
    };
    // a key let go while the window was away would leave its keycap pressed
    const onWindowBlur = () => release();
    document.addEventListener("keydown", onKey);
    document.addEventListener("keyup", onKeyUp);
    window.addEventListener("blur", onWindowBlur);
    return () => {
      document.removeEventListener("keydown", onKey);
      document.removeEventListener("keyup", onKeyUp);
      window.removeEventListener("blur", onWindowBlur);
    };
  }, [open]);

  const select = (index: number) => {
    const item = itemsRef.current[index];
    if (item) onSelect?.(item, index);
  };

  const onKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {
    const engine = engineRef.current;
    if (!engine || open) return;
    const count = itemsRef.current.length;
    const target = event.target as HTMLElement;
    const buttonIndex = garmentButtons.current.indexOf(target as HTMLButtonElement);
    const onButton = buttonIndex >= 0;
    if (target !== hostRef.current && !onButton) return;
    if (event.key === "ArrowRight" || event.key === "ArrowLeft") {
      event.preventDefault();
      // From a garment button the walk starts at that button, not at whatever the pointer last faced
      const from = onButton ? buttonIndex : engine.activeIndex() >= 0 ? engine.activeIndex() : event.key === "ArrowRight" ? -1 : count;
      const next = clamp(from + (event.key === "ArrowRight" ? 1 : -1), 0, count - 1);
      engine.setActive(next);
      setFocusIdx(next);
      if (onButton) garmentButtons.current[next]?.focus();
    } else if (event.key === "Home" || event.key === "End") {
      event.preventDefault();
      const next = event.key === "Home" ? 0 : count - 1;
      engine.setActive(next);
      setFocusIdx(next);
      if (onButton) garmentButtons.current[next]?.focus();
    } else if (!onButton && (event.key === "Enter" || event.key === " ")) {
      event.preventDefault();
      const index = engine.activeIndex();
      if (index >= 0) engine.openDetail(index);
    } else if (event.key === "Escape") {
      engine.setActive(-1);
      setFocusIdx(-1);
    }
  };

  // Focus leaving the rack lets the garment turn back, so the render loop can stop
  const onBlur = (event: FocusEvent<HTMLDivElement>) => {
    if (open) return;
    const next = event.relatedTarget as Node | null;
    if (next && hostRef.current?.contains(next)) return;
    setFocusIdx(-1);
    engineRef.current?.setActive(-1);
  };

  // The pill is for the facing garment, or the last one looked at
  const onPill = () => {
    const engine = engineRef.current;
    if (!engine) return;
    select(engine.activeIndex() >= 0 ? engine.activeIndex() : Math.max(0, engine.lastIndex()));
  };

  // The DiMaac look: near-monochrome, hairlines, Inter Tight, sentence case
  const vars = dark
    ? { ink: "#F5F5F5", paper: "#0B0B0C", line: "#27272A", grey: "#8B8F98" }
    : { ink: "#0A0A0A", paper: "#FAFAFA", line: "#E5E7EB", grey: "#6B7280" };
  const names = itemsRef.current;
  const shown = names[Math.min(detailIndex, names.length - 1)];
  const status = open && shown ? `${shown.name}, ${detailIndex + 1} of ${names.length}` : focusIdx >= 0 && names[focusIdx] ? `${names[focusIdx]!.name}, ${focusIdx + 1} of ${names.length}` : "";
  const unavailable = failed || lost || !ready;

  const ring = "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-solid focus-visible:outline-(--cr-ink)";
  const pill = `inline-flex h-9 cursor-pointer items-center rounded-full border border-(--cr-line) bg-transparent px-4 text-[13px] font-medium text-(--cr-ink) transition-[background-color,color,border-color] duration-150 hover:border-(--cr-ink) hover:bg-(--cr-ink) hover:text-(--cr-paper) ${ring}`;
  // DiMaac keycap: no outline, a soft ink-tinted face with a shadow lip under it; it presses down 1 px and loses the lip
  const keycap = (isPressed: boolean) =>
    `absolute top-[42%] z-[2] flex h-11 w-11 -translate-y-1/2 cursor-pointer items-center justify-center rounded-xl border-0 bg-[color-mix(in_srgb,var(--cr-ink)_7%,transparent)] p-0 text-(--cr-ink) transition-[background-color,box-shadow,transform] duration-100 hover:bg-[color-mix(in_srgb,var(--cr-ink)_13%,transparent)] ${ring} ${
      isPressed ? "translate-y-[calc(-50%+1px)] shadow-none" : "shadow-[0_1px_0_rgba(0,0,0,0.3)]"
    }`;
  const arrowProps = { width: 16, height: 16, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 1.5, strokeLinecap: "round" as const, strokeLinejoin: "round" as const, "aria-hidden": true };

  return (
    <div
      ref={hostRef}
      role="group"
      aria-roledescription="clothes rack"
      aria-label="Clothes rack. Use the left and right arrow keys to move along it and Enter to open a garment."
      tabIndex={-1}
      onKeyDown={onKeyDown}
      onBlur={onBlur}
      className={`relative h-full w-full overflow-hidden outline-none focus-visible:outline-2 focus-visible:-outline-offset-4 focus-visible:outline-solid focus-visible:outline-(--cr-ink) ${className}`}
      style={{
        color: vars.ink,
        fontFamily: "var(--font-sans, 'Inter Tight', ui-sans-serif, system-ui, sans-serif)",
        ["--cr-ink" as string]: vars.ink,
        ["--cr-paper" as string]: vars.paper,
        ["--cr-line" as string]: vars.line,
        ["--cr-grey" as string]: vars.grey,
      }}
    >
      <div ref={canvasBoxRef} className="absolute inset-0" style={{ opacity: ready ? 1 : 0, transition: "opacity 0.5s ease" }} inert={open}>
        <p
          ref={captionRef}
          aria-hidden="true"
          className="pointer-events-none absolute top-0 left-0 m-0 whitespace-nowrap text-[13px] opacity-0"
          style={{ color: "color-mix(in srgb, var(--cr-ink) 70%, transparent)", transition: "opacity 0.35s ease" }}
        />
      </div>

      {failed || lost ? (
        <div className="absolute inset-0 z-[3] flex flex-col items-center justify-center gap-3 text-[13px]" role="alert">
          <span className="text-(--cr-grey)">{lost ? "The graphics context was lost." : "This needs WebGL, which is not available here."}</span>
          <button
            type="button"
            onClick={() => {
              setFailed(false);
              setLost(false);
              setGeneration((g) => g + 1);
            }}
            className={pill}
          >
            Try again
          </button>
        </div>
      ) : null}

      {/* Real buttons for screen readers: one per garment */}
      <ul className="sr-only" data-garments="" inert={open || unavailable} aria-hidden={unavailable}>
        {names.map((item, index) => (
          <li key={`${item.name}-${index}`}>
            <button
              type="button"
              ref={(node) => {
                garmentButtons.current[index] = node;
              }}
              onFocus={() => {
                setFocusIdx(index);
                engineRef.current?.setActive(index);
              }}
              onBlur={() => setFocusIdx(-1)}
              onClick={() => (detail ? engineRef.current?.openDetail(index) : select(index))}
            >
              {item.name}
            </button>
          </li>
        ))}
      </ul>
      <div className="sr-only" role="status" aria-live="polite">
        {status}
      </div>

      <div
        ref={pillRef}
        className="pointer-events-none absolute top-0 left-1/2 z-[1]"
        style={{ transform: "translate(-50%, 70vh)", opacity: ready && !stageOn ? 1 : 0, transition: "opacity 0.3s ease" }}
        inert={open || unavailable}
        aria-hidden={unavailable}
        onPointerLeave={(event) => {
          if (!canvasBoxRef.current?.contains(event.relatedTarget as Node | null)) engineRef.current?.releaseHover();
        }}
      >
        <button type="button" onClick={onPill} className={`${pill} pointer-events-auto`}>
          See availability
        </button>
      </div>

      <div
        ref={dialogRef}
        role="dialog"
        aria-modal="true"
        aria-label={shown ? `${shown.name}, garment ${detailIndex + 1} of ${names.length}` : "Garment"}
        aria-hidden={!open}
        inert={!open}
        tabIndex={-1}
        className="absolute inset-0 z-10 outline-none"
        style={{ visibility: stageOn ? "visible" : "hidden", pointerEvents: open ? "auto" : "none", ["--half" as string]: "140px" }}
      >
        {/* The veil and its blur fade in with the garment: one crossfade, no flight */}
        <div
          className="absolute inset-0"
          style={{
            background: dark ? "rgba(11,11,12,0.86)" : "rgba(250,250,250,0.86)",
            opacity: open ? 1 : 0,
            backdropFilter: open ? "blur(12px)" : "blur(0px)",
            WebkitBackdropFilter: open ? "blur(12px)" : "blur(0px)",
            transition: open ? "opacity 0.25s ease-out, backdrop-filter 0.25s ease-out, -webkit-backdrop-filter 0.25s ease-out" : "opacity 0.15s linear, backdrop-filter 0.15s linear, -webkit-backdrop-filter 0.15s linear",
          }}
        />
        <div ref={stageRef} className="absolute inset-0" style={{ opacity: 0, filter: dark ? "drop-shadow(0 28px 36px rgba(0,0,0,0.55))" : "drop-shadow(0 1px 1.5px rgba(15,23,42,0.16)) drop-shadow(0 28px 36px rgba(15,23,42,0.14))" }} />
        <div className="absolute inset-0" style={{ opacity: open ? 1 : 0, transition: open ? "opacity 0.25s ease-out" : "opacity 0.15s linear" }}>
          <button
            type="button"
            onClick={() => engineRef.current?.closeDetail()}
            className={`absolute top-4 right-5 flex cursor-pointer items-center gap-2 rounded-full border-0 bg-transparent px-2 py-1 text-[13px] text-(--cr-ink) transition-opacity duration-150 hover:opacity-60 ${ring}`}
          >
            Close
            <svg width="12" height="12" viewBox="0 0 12 12" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" aria-hidden="true">
              <path d="M2 2L10 10M10 2L2 10" />
            </svg>
          </button>
          {names.length > 1 ? (
            <>
              <button
                type="button"
                aria-label="Previous garment"
                onClick={() => engineRef.current?.stepDetail(-1)}
                onPointerDown={() => press("prev")}
                onPointerUp={release}
                onPointerLeave={release}
                onPointerCancel={release}
                className={keycap(pressed === "prev")}
                style={{ left: "max(10px, calc(50% - var(--half) - 72px - 44px))" }}
              >
                <svg {...arrowProps}>
                  <path d="M19 12H5M11 6l-6 6 6 6" />
                </svg>
              </button>
              <button
                type="button"
                aria-label="Next garment"
                onClick={() => engineRef.current?.stepDetail(1)}
                onPointerDown={() => press("next")}
                onPointerUp={release}
                onPointerLeave={release}
                onPointerCancel={release}
                className={keycap(pressed === "next")}
                style={{ right: "max(10px, calc(50% - var(--half) - 72px - 44px))" }}
              >
                <svg {...arrowProps}>
                  <path d="M5 12h14M13 6l6 6-6 6" />
                </svg>
              </button>
            </>
          ) : null}
          <div className="absolute inset-x-0 bottom-[5%] z-[2] flex flex-col items-center gap-2 px-4 text-center">
            <span className="text-[13px] text-(--cr-grey)" style={{ fontVariantNumeric: "tabular-nums" }}>
              {String(detailIndex + 1).padStart(2, "0")} / {String(names.length).padStart(2, "0")}
            </span>
            <h3 className="m-0 mb-1 text-[32px] leading-[1.1] font-normal tracking-[-0.02em] text-(--cr-ink)">{shown?.name}</h3>
            <button type="button" onClick={() => select(detailIndex)} className={pill}>
              See availability
            </button>
          </div>
        </div>
      </div>
    </div>
  );
}
```

### cloth-motion.ts → `components/dimaac/clothes-rack/cloth-motion.ts`

```tsx
// How the cloth of a garment on a hanger moves, for the Clothes Rack.
//
// A hanging garment is a column of rows, from the shoulders (held by the hanger) down to the hem. Each row can twist
// about the hook's upright axis and trail sideways along the rail, and each is tied to the row above and the row below,
// like a damped string fixed at the top and free at the bottom. When the hanger swivels or is pushed along the rail,
// the rows feel its acceleration (the cloth is heavy, the hanger is not), so the lower cloth lags, swings through once
// and settles: a wave that runs down the fabric instead of a stiff board turning. Nothing here knows about three.js;
// the garment's vertex shader bends the cloth with these numbers.

/** Rows below the shoulders. Row 0 is the shoulders and never moves. */
export const CLOTH_ROWS = 6;

// Tuned offline against the rack's 0.25 s critically damped turn: the hem lags about 9 degrees while the garment
// turns, swings back about 6 and is still again after about 0.8 s. A neighbour pushed by a pitch trails its hem by
// about 3% of its length.
const K = 1100;
const DAMP = 6.5;
// damping of rows moving against each other: it calms the fast, jittery shapes of the string and leaves the slow sway
const DAMP_BETWEEN = 2;
const TWIST_GAIN = 0.32;
const SWAY_GAIN = 0.4;
const MAX_TWIST = 0.5;
const MAX_SWAY = 0.09;
// stepping at 240 a second keeps the string stable however long a frame is
const STEP = 1 / 240;

export class ClothMotion {
  /** The twist of each row, radians, row 0 at the shoulders. */
  readonly twist = new Float32Array(CLOTH_ROWS + 1);
  /** How far each row trails sideways along the rail, garment units. */
  readonly sway = new Float32Array(CLOTH_ROWS + 1);
  /** 0 - 1: how lively the cloth is, for the faint ripple that runs down it while it moves. */
  ripple = 0;
  private readonly twistV = new Float32Array(CLOTH_ROWS + 1);
  private readonly swayV = new Float32Array(CLOTH_ROWS + 1);

  /**
   * Moves the cloth on by dt seconds. turnAccel is the hanger's angular acceleration about its hook (rad/s²) and
   * slideAccel its acceleration along the rail (units/s²); amount scales both (0 keeps the cloth still).
   * Returns true while the cloth is still moving.
   */
  step(dt: number, turnAccel: number, slideAccel: number, amount = 1): boolean {
    let left = Math.min(dt, 0.05);
    while (left > 1e-9) {
      const h = Math.min(STEP, left);
      this.integrate(this.twist, this.twistV, -TWIST_GAIN * amount * turnAccel, MAX_TWIST, h);
      this.integrate(this.sway, this.swayV, -SWAY_GAIN * amount * slideAccel, MAX_SWAY, h);
      left -= h;
    }
    const n = CLOTH_ROWS;
    const energy = Math.min(1, Math.abs(this.twistV[n]!) * 0.22 + Math.abs(this.swayV[n]!) * 5);
    // the ripple rises quickly with the motion and dies away slowly after it
    this.ripple += (energy - this.ripple) * (1 - Math.exp(-dt / (energy > this.ripple ? 0.06 : 0.5)));
    let moving = this.ripple > 2e-3;
    for (let k = 1; k <= n; k++) {
      if (Math.abs(this.twist[k]!) > 3e-4 || Math.abs(this.twistV[k]!) > 3e-3 || Math.abs(this.sway[k]!) > 6e-5 || Math.abs(this.swayV[k]!) > 1e-3) moving = true;
    }
    if (!moving) this.reset();
    return moving;
  }

  /** Gives the cloth a push, as when it is hung or lifted: twist in rad/s, sway in units/s at the hem. */
  kick(twist: number, sway: number) {
    for (let k = 1; k <= CLOTH_ROWS; k++) {
      this.twistV[k] = this.twistV[k]! + (twist * k) / CLOTH_ROWS;
      this.swayV[k] = this.swayV[k]! + (sway * k) / CLOTH_ROWS;
    }
  }

  /** Still, hanging straight. */
  reset() {
    this.twist.fill(0);
    this.twistV.fill(0);
    this.sway.fill(0);
    this.swayV.fill(0);
    this.ripple = 0;
  }

  // One step of the string: each row is pulled toward its neighbours, damped, and pushed by the drive, which grows
  // toward the hem (a row far down has more cloth hanging off it, so it lags more)
  private integrate(x: Float32Array, v: Float32Array, drive: number, limit: number, h: number) {
    const n = CLOTH_ROWS;
    for (let k = 1; k <= n; k++) {
      const below = k === n ? x[k]! : x[k + 1]!;
      const belowV = k === n ? v[k]! : v[k + 1]!;
      const accel = K * (x[k - 1]! - 2 * x[k]! + below) - DAMP * v[k]! + DAMP_BETWEEN * (v[k - 1]! - 2 * v[k]! + belowV) + (drive * k) / n;
      v[k] = v[k]! + accel * h;
    }
    for (let k = 1; k <= n; k++) {
      x[k] = Math.max(-limit, Math.min(limit, x[k]! + v[k]! * h));
    }
  }
}
```

### garment-drapes.ts → `components/dimaac/clothes-rack/garment-drapes.ts`

```tsx
// Generated by scripts/clothes-rack/bake.ts: each garment is a sewn pattern draped on the hanger by a cloth
// simulation, then resampled. Do not edit by hand; change the patterns in drape.ts and run the bake again.
// Numbers are 16-bit integers (divide by 16384); tri holds triangle corners; ao is 0 - 255 per point.
export type DrapePanel = { pat: string; pos: string; tri: string; ao: string };
// a sleeve: rings x around grid points; uv is 0 - 65535 (round the sleeve, along it from the armhole). pos is the
// sleeve open (the garment facing you), hang the same points hanging down its side (the garment side-on on the rail).
export type DrapeSleeve = { rings: number; around: number; pos: string; hang: string; uv: string; tri: string; ao: string };
export type DrapeData = {
  pattern: { half: number; shoulderX: number; shoulderDrop: number; neckHalf: number; neckFront: number; neckBack: number; armpit: number; sleeve: { top: number; under: number; cuff: number }; length: number; vNeck?: boolean; open: { chest: number; hem: number; sleeveRoot: number; cuff: number } };
  front: DrapePanel;
  back: DrapePanel;
  /** the right sleeve, then the left */
  sleeves: DrapeSleeve[];
  neck: number[];
};
export const DRAPE_SCALE = 16384;
export const DRAPE_HANGER: [number, number][] = [[-0.215,-0.222],[-0.17,-0.202],[-0.12,-0.18],[-0.07,-0.152],[-0.03,-0.136],[0,-0.132],[0.03,-0.136],[0.07,-0.152],[0.12,-0.18],[0.17,-0.202],[0.215,-0.222]];
export const DRAPES: Record<"tee" | "crewneck" | "shirt", DrapeData> = {
  tee: {
    pattern: {"half":0.235,"shoulderX":0.265,"shoulderDrop":0.075,"neckHalf":0.085,"neckFront":0.075,"neckBack":0.02,"armpit":0.37,"sleeve":{"top":0.26,"under":0.14,"cuff":0.46},"length":0.8,"open":{"chest":0.024,"hem":0.045,"sleeveRoot":0.045,"cuff":0.05}},
    front: {"pat":"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","pos":"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","tri":"BgAFAAcAbgBtAG8ARABDAHQARQBEAHQARgBFAHQAQwBCAHUAdABDAHUAQgBBAHYAdQBCAHYAQQBAAHcAdgBBAHcAQAA/AHgAdwBAAHgAPwA+AHkAeAA/AHkAPgA9AHoAeQA+AHoAPQA8AHsAegA9AHsAPAA7AHwAewA8AHwAOwA6AH0AfAA7AH0AOgA5AH4AfQA6AH4AOQA4AH8AfgA5AH8AOAA3AIAAfwA4AIAANwA2AIEAgAA3AIEANgA1AIIAgQA2AIIANQA0AIMAggA1AIMANAAzAIQAgwA0AIQAMwAyAIUAhAAzAIUAMgAxAIYAhQAyAIYALwAuAIcAMAAvAIcAMQAwAIcAhgAxAIcARwBGAIgARgB0AIgAdAB1AIkAiAB0AIkAdQB2AIoAiQB1AIoAdgB3AIsAigB2AIsAdwB4AIwAiwB3AIwAeAB5AI0AjAB4AI0AeQB6AI4AjQB5AI4AegB7AI8AjgB6AI8AewB8AJAAjwB7AJAAfAB9AJEAkAB8AJEAfQB+AJIAkQB9AJIAfgB/AJMAkgB+AJMAfwCAAJQAkwB/AJQAgACBAJUAlACAAJUAgQCCAJYAlQCBAJYAggCDAJcAlgCCAJcAgwCEAJgAlwCDAJgAhACFAJkAmACEAJkAhQCGAJoAmQCFAJoAhgCHAJsAmgCGAJsALgAtAJwAhwAuAJwAmwCHAJwASABHAJ0ARwCIAJ0AiACJAJ0AiQCKAJ4AnQCJAJ4AigCLAJ8AngCKAJ8AiwCMAKAAnwCLAKAAjACNAKEAoACMAKEAjQCOAKIAoQCNAKIAjgCPAKMAogCOAKMAjwCQAKQAowCPAKQAkACRAKUApACQAKUAkQCSAKYApQCRAKYAkgCTAKcApgCSAKcAkwCUAKgApwCTAKgAlACVAKkAqACUAKkAlQCWAKoAqQCVAKoAlgCXAKsAqgCWAKsAlwCYAKwAqwCXAKwAmACZAK0ArACYAK0AmQCaAK4ArQCZAK4AmgCbAK8ArgCaAK8ALQAsALAAnAAtALAAmwCcALAArwCbALAASQBIALEASACdALEAnQCeALIAsQCdALIAngCfALMAsgCeALMAnwCgALQAswCfALQAoAChALUAtACgALUAoQCiALYAtQChALYAogCjALcAtgCiALcAowCkALgAtwCjALgApAClALkAuACkALkApQCmALoAuQClALoApgCnALsAugCmALsApwCoALwAuwCnALwAqACpAL0AvACoAL0AqQCqAL4AvQCpAL4AqgCrAL8AvgCqAL8AqwCsAMAAvwCrAMAArACtAMEAwACsAMEArQCuAMIAwQCtAMIArgCvAMMAwgCuAMMArwCwAMQAwwCvAMQALAArAMUAsAAsAMUAxACwAMUASQCxAMYAsQCyAMYAsgCzAMcAxgCyAMcAswC0AMgAxwCzAMgAtAC1AMkAyAC0AMkAtQC2AMoAyQC1AMoAtgC3AMsAygC2AMsAtwC4AMwAywC3AMwAuAC5AM0AzAC4AM0AuQC6AM4AzQC5AM4AugC7AM8AzgC6AM8AuwC8ANAAzwC7ANAAvAC9ANEA0AC8ANEAvQC+ANIA0QC9ANIAvgC/ANMA0gC+ANMAvwDAANQA0wC/ANQAwADBANUA1ADAANUAwQDCANYA1QDBANYAwgDDANcA1gDCANcAwwDEANgA1wDDANgAxQArANkAxADFANkA2ADEANkASgBJANoASQDGANoASwBKANoAxgDHANsA2gDGANsAxwDIANwA2wDHANwAyADJAN0A3ADIAN0AyQDKAN4A3QDJAN4AygDLAN8A3gDKAN8AywDMAOAA3wDLAOAAzADNAOEA4ADMAOEAzQDOAOIA4QDNAOIAzgDPAOMA4gDOAOMAzwDQAOQA4wDPAOQA0ADRAOUA5ADQAOUA0QDSAOYA5QDRAOYA0gDTAOcA5gDSAOcA0wDUAOgA5wDTAOgA1ADVAOkA6ADUAOkA1QDWAOoA6QDVAOoA1gDXAOsA6gDWAOsA1wDYAOwA6wDXAOwA2ADZAO0A7ADYAO0AKwAqAO4A2QArAO4AKgApAO4A7QDZAO4ASwDaAO8A2gDbAO8A2wDcAPAA7wDbAPAA3ADdAPEA8ADcAPEA3QDeAPIA8QDdAPIA3gDfAPMA8gDeAPMA3wDgAPQA8wDfAPQA4ADhAPUA9ADgAPUA4QDiAPYA9QDhAPYA4gDjAPcA9gDiAPcA4wDkAPgA9wDjAPgA5ADlAPkA+ADkAPkA5QDmAPoA+QDlAPoA5gDnAPsA+gDmAPsA5wDoAPwA+wDnAPwA6ADpAP0A/ADoAP0A6QDqAP4A/QDpAP4A6gDrAP8A/gDqAP8A6wDsAAAB/wDrAAAB7ADtAAEBAAHsAAEB7QDuAAIBAQHtAAIB7gApAAIBTABLAAMBSwDvAAMBTQBMAAMB7wDwAAQBAwHvAAQB8ADxAAUBBAHwAAUB8QDyAAYBBQHxAAYB8gDzAAcBBgHyAAcB8wD0AAgBBwHzAAgB9AD1AAkBCAH0AAkB9QD2AAoBCQH1AAoB9gD3AAsBCgH2AAsB9wD4AAwBCwH3AAwB+AD5AA0BDAH4AA0B+QD6AA4BDQH5AA4B+gD7AA8BDgH6AA8B+wD8ABABDwH7ABAB/AD9ABEBEAH8ABEB/QD+ABIBEQH9ABIB/gD/ABMBEgH+ABMB/wAAARQBEwH/ABQBAAEBARUBFAEAARUBAQECARYBFQEBARYBKQAoABcBAgEpABcBKAAnABcBFgECARcBTQADARgBAwEEARgBBAEFARkBGAEEARkBBQEGARoBGQEFARoBBgEHARsBGgEGARsBBwEIARwBGwEHARwBCAEJAR0BHAEIAR0BCQEKAR4BHQEJAR4BCgELAR8BHgEKAR8BCwEMASABHwELASABDAENASEBIAEMASEBDQEOASIBIQENASIBDgEPASMBIgEOASMBDwEQASQBIwEPASQBEAERASUBJAEQASUBEQESASYBJQERASYBEgETAScBJgESAScBEwEUASgBJwETASgBFAEVASkBKAEUASkBFQEWASoBKQEVASoBFgEXASsBKgEWASsBFwEnACsBTgBNACwBTQAYASwBGAEZAS0BLAEYAS0BGQEaAS4BLQEZAS4BGgEbAS8BLgEaAS8BGwEcATABLwEbATABHAEdATEBMAEcATEBHQEeATIBMQEdATIBHgEfATMBMgEeATMBHwEgATQBMwEfATQBIAEhATUBNAEgATUBIQEiATYBNQEhATYBIgEjATcBNgEiATcBIwEkATgBNwEjATgBJAElATkBOAEkATkBJQEmAToBOQElAToBJgEnATsBOgEmATsBJwEoATwBOwEnATwBKAEpAT0BPAEoAT0BKQEqAT4BPQEpAT4BKgErAT8BPgEqAT8BJwAmAEABKwEnAEABPwErAUABTwBOAEEBTgAsAUEBLAEtAUEBLQEuAUIBQQEtAUIBLgEvAUMBQgEuAUMBLwEwAUQBQwEvAUQBMAExAUUBRAEwAUUBMQEyAUYBRQExAUYBMgEzAUcBRgEyAUcBMwE0AUgBRwEzAUgBNAE1AUkBSAE0AUkBNQE2AUoBSQE1AUoBNgE3AUsBSgE2AUsBNwE4AUwBSwE3AUwBOAE5AU0BTAE4AU0BOQE6AU4BTQE5AU4BOgE7AU8BTgE6AU8BOwE8AVABTwE7AVABPAE9AVEBUAE8AVEBPQE+AVIBUQE9AVIBPgE/AVMBUgE+AVMBJgAlAFQBQAEmAFQBPwFAAVQBUwE/AVQBUABPAFUBTwBBAVUBQQFCAVYBVQFBAVYBQgFDAVcBVgFCAVcBQwFEAVgBVwFDAVgBRAFFAVkBWAFEAVkBRQFGAVoBWQFFAVoBRgFHAVsBWgFGAVsBRwFIAVwBWwFHAVwBSAFJAV0BXAFIAV0BSQFKAV4BXQFJAV4BSgFLAV8BXgFKAV8BSwFMAWABXwFLAWABTAFNAWEBYAFMAWEBTQFOAWIBYQFNAWIBTgFPAWMBYgFOAWMBTwFQAWQBYwFPAWQBUAFRAWUBZAFQAWUBUQFSAWYBZQFRAWYBUgFTAWcBZgFSAWcBUwFUAWgBZwFTAWgBJQAkAGkBVAElAGkBaAFUAWkBUABVAWoBVQFWAWoBVgFXAWsBagFWAWsBVwFYAWwBawFXAWwBWAFZAW0BbAFYAW0BWQFaAW4BbQFZAW4BWgFbAW8BbgFaAW8BWwFcAXABbwFbAXABXAFdAXEBcAFcAXEBXQFeAXIBcQFdAXIBXgFfAXMBcgFeAXMBXwFgAXQBcwFfAXQBYAFhAXUBdAFgAXUBYQFiAXYBdQFhAXYBYgFjAXcBdgFiAXcBYwFkAXgBdwFjAXgBZAFlAXkBeAFkAXkBZQFmAXoBeQFlAXoBZgFnAXsBegFmAXsBZwFoAXwBewFnAXwBaQEkAH0BaAFpAX0BfAFoAX0BUQBQAH4BUABqAX4BUgBRAH4BagFrAX8BfgFqAX8BawFsAYABfwFrAYABbAFtAYEBgAFsAYEBbQFuAYIBgQFtAYIBbgFvAYMBggFuAYMBbwFwAYQBgwFvAYQBcAFxAYUBhAFwAYUBcQFyAYYBhQFxAYYBcgFzAYcBhgFyAYcBcwF0AYgBhwFzAYgBdAF1AYkBiAF0AYkBdQF2AYoBiQF1AYoBdgF3AYsBigF2AYsBdwF4AYwBiwF3AYwBeAF5AY0BjAF4AY0BeQF6AY4BjQF5AY4BegF7AY8BjgF6AY8BewF8AZABjwF7AZABfAF9AZEBkAF8AZEBJAAjAJIBfQEkAJIBIwAiAJIBkQF9AZIBUgB+AZMBfgF/AZMBfwGAAZQBkwF/AZQBgAGBAZUBlAGAAZUBgQGCAZYBlQGBAZYBggGDAZcBlgGCAZcBgwGEAZgBlwGDAZgBhAGFAZkBmAGEAZkBhQGGAZoBmQGFAZoBhgGHAZsBmgGGAZsBhwGIAZwBmwGHAZwBiAGJAZ0BnAGIAZ0BiQGKAZ4BnQGJAZ4BigGLAZ8BngGKAZ8BiwGMAaABnwGLAaABjAGNAaEBoAGMAaEBjQGOAaIBoQGNAaIBjgGPAaMBogGOAaMBjwGQAaQBowGPAaQBkAGRAaUBpAGQAaUBkQGSAaYBpQGRAaYBkgEiAKYBUwBSAKcBUgCTAacBkwGUAagBpwGTAagBlAGVAakBqAGUAakBlQGWAaoBqQGVAaoBlgGXAasBqgGWAasBlwGYAawBqwGXAawBmAGZAa0BrAGYAa0BmQGaAa4BrQGZAa4BmgGbAa8BrgGaAa8BmwGcAbABrwGbAbABnAGdAbEBsAGcAbEBnQGeAbIBsQGdAbIBngGfAbMBsgGeAbMBnwGgAbQBswGfAbQBoAGhAbUBtAGgAbUBoQGiAbYBtQGhAbYBogGjAbcBtgGiAbcBowGkAbgBtwGjAbgBpAGlAbkBuAGkAbkBpQGmAboBuQGlAboBIgAhALsBpgEiALsBugGmAbsBVABTALwBUwCnAbwBpwGoAbwBqAGpAb0BvAGoAb0BqQGqAb4BvQGpAb4BqgGrAb8BvgGqAb8BqwGsAcABvwGrAcABrAGtAcEBwAGsAcEBrQGuAcIBwQGtAcIBrgGvAcMBwgGuAcMBrwGwAcQBwwGvAcQBsAGxAcUBxAGwAcUBsQGyAcYBxQGxAcYBsgGzAccBxgGyAccBswG0AcgBxwGzAcgBtAG1AckByAG0AckBtQG2AcoByQG1AcoBtgG3AcsBygG2AcsBtwG4AcwBywG3AcwBuAG5Ac0BzAG4Ac0BuQG6Ac4BzQG5Ac4BIQAgAM8BuwEhAM8BugG7Ac8BzgG6Ac8BVQBUANABVAC8AdABvAG9AdEB0AG8AdEBvQG+AdIB0QG9AdIBvgG/AdMB0gG+AdMBvwHAAdQB0wG/AdQBwAHBAdUB1AHAAdUBwQHCAdYB1QHBAdYBwgHDAdcB1gHCAdcBwwHEAdgB1wHDAdgBxAHFAdkB2AHEAdkBxQHGAdoB2QHFAdoBxgHHAdsB2gHGAdsBxwHIAdwB2wHHAdwByAHJAd0B3AHIAd0ByQHKAd4B3QHJAd4BygHLAd8B3gHKAd8BywHMAeAB3wHLAeABzAHNAeEB4AHMAeEBzQHOAeIB4QHNAeIBzgHPAeMB4gHOAeMBIAAfAOQBzwEgAOQB4wHPAeQBVgBVAOUBVQDQAeUB0AHRAeUB0QHSAeYB5QHRAeYB0gHTAecB5gHSAecB0wHUAegB5wHTAegB1AHVAekB6AHUAekB1QHWAeoB6QHVAeoB1gHXAesB6gHWAesB1wHYAewB6wHXAewB2AHZAe0B7AHYAe0B2QHaAe4B7QHZAe4B2gHbAe8B7gHaAe8B2wHcAfAB7wHbAfAB3AHdAfEB8AHcAfEB3QHeAfIB8QHdAfIB3gHfAfMB8gHeAfMB3wHgAfQB8wHfAfQB4AHhAfUB9AHgAfUB4QHiAfYB9QHhAfYB4gHjAfcB9gHiAfcBHwAeAPgB5AEfAPgB4wHkAfgB9wHjAfgBVwBWAPkBVgDlAfkB5QHmAfoB+QHlAfoB5gHnAfsB+gHmAfsB5wHoAfwB+wHnAfwB6AHpAf0B/AHoAf0B6QHqAf4B/QHpAf4B6gHrAf8B/gHqAf8B6wHsAQAC/wHrAQAC7AHtAQECAALsAQEC7QHuAQICAQLtAQIC7gHvAQMCAgLuAQMC7wHwAQQCAwLvAQQC8AHxAQUCBALwAQUC8QHyAQYCBQLxAQYC8gHzAQcCBgLyAQcC8wH0AQgCBwLzAQgC9AH1AQkCCAL0AQkC9QH2AQoCCQL1AQoC9gH3AQsCCgL2AQsC9wH4AQwCCwL3AQwCHgAdAA0C+AEeAA0CDAL4AQ0CVwD5AQ4C+QH6AQ4C+gH7AQ8CDgL6AQ8C+wH8ARACDwL7ARAC/AH9ARECEAL8AREC/QH+ARICEQL9ARIC/gH/ARMCEgL+ARMC/wEAAhQCEwL/ARQCAAIBAhUCFAIAAhUCAQICAhYCFQIBAhYCAgIDAhcCFgICAhcCAwIEAhgCFwIDAhgCBAIFAhkCGAIEAhkCBQIGAhoCGQIFAhoCBgIHAhsCGgIGAhsCBwIIAhwCGwIHAhwCCAIJAh0CHAIIAh0CCQIKAh4CHQIJAh4CCgILAh8CHgIKAh8CCwIMAiACHwILAiACDAINAiECIAIMAiECDQIdACECWABXACICVwAOAiICDgIPAiMCIgIOAiMCDwIQAiQCIwIPAiQCEAIRAiUCJAIQAiUCEQISAiYCJQIRAiYCEgITAicCJgISAicCEwIUAigCJwITAigCFAIVAikCKAIUAikCFQIWAioCKQIVAioCFgIXAisCKgIWAisCFwIYAiwCKwIXAiwCGAIZAi0CLAIYAi0CGQIaAi4CLQIZAi4CGgIbAi8CLgIaAi8CGwIcAjACLwIbAjACHAIdAjECMAIcAjECHQIeAjICMQIdAjICHgIfAjMCMgIeAjMCHwIgAjQCMwIfAjQCIAIhAjUCNAIgAjUCHQAcADYCIQIdADYCNQIhAjYCWQBYADcCWAAiAjcCIgIjAjcCIwIkAjgCNwIjAjgCJAIlAjkCOAIkAjkCJQImAjoCOQIlAjoCJgInAjsCOgImAjsCJwIoAjwCOwInAjwCKAIpAj0CPAIoAj0CKQIqAj4CPQIpAj4CKgIrAj8CPgIqAj8CKwIsAkACPwIrAkACLAItAkECQAIsAkECLQIuAkICQQItAkICLgIvAkMCQgIuAkMCLwIwAkQCQwIvAkQCMAIxAkUCRAIwAkUCMQIyAkYCRQIxAkYCMgIzAkcCRgIyAkcCMwI0AkgCRwIzAkgCNAI1AkkCSAI0AkkCHAAbAEoCNgIcAEoCNQI2AkoCSQI1AkoCWgBZAEsCWQA3AksCNwI4AkwCSwI3AkwCOAI5Ak0CTAI4Ak0COQI6Ak4CTQI5Ak4COgI7Ak8CTgI6Ak8COwI8AlACTwI7AlACPAI9AlECUAI8AlECPQI+AlICUQI9AlICPgI/AlMCUgI+AlMCPwJAAlQCUwI/AlQCQAJBAlUCVAJAAlUCQQJCAlYCVQJBAlYCQgJDAlcCVgJCAlcCQwJEAlgCVwJDAlgCRAJFAlkCWAJEAlkCRQJGAloCWQJFAloCRgJHAlsCWgJGAlsCRwJIAlwCWwJHAlwCSAJJAl0CXAJIAl0CSQJKAl4CXQJJAl4CGwAaAF8CSgIbAF8CXgJKAl8CWwBaAGACWgBLAmACSwJMAmECYAJLAmECTAJNAmICYQJMAmICTQJOAmMCYgJNAmMCTgJPAmQCYwJOAmQCTwJQAmUCZAJPAmUCUAJRAmYCZQJQAmYCUQJSAmcCZgJRAmcCUgJTAmgCZwJSAmgCUwJUAmkCaAJTAmkCVAJVAmoCaQJUAmoCVQJWAmsCagJVAmsCVgJXAmwCawJWAmwCVwJYAm0CbAJXAm0CWAJZAm4CbQJYAm4CWQJaAm8CbgJZAm8CWgJbAnACbwJaAnACWwJcAnECcAJbAnECXAJdAnICcQJcAnICXQJeAnMCcgJdAnMCXgJfAnQCcwJeAnQCGgAZAHUCXwIaAHUCdAJfAnUCWwBgAnYCYAJhAnYCYQJiAncCdgJhAncCYgJjAngCdwJiAngCYwJkAnkCeAJjAnkCZAJlAnoCeQJkAnoCZQJmAnsCegJlAnsCZgJnAnwCewJmAnwCZwJoAn0CfAJnAn0CaAJpAn4CfQJoAn4CaQJqAn8CfgJpAn8CagJrAoACfwJqAoACawJsAoECgAJrAoECbAJtAoICgQJsAoICbQJuAoMCggJtAoMCbgJvAoQCgwJuAoQCbwJwAoUChAJvAoUCcAJxAoYChQJwAoYCcQJyAocChgJxAocCcgJzAogChwJyAogCcwJ0AokCiAJzAokCdQIZAIoCdAJ1AooCiQJ0AooCXABbAIsCWwB2AosCdgJ3AowCiwJ2AowCdwJ4Ao0CjAJ3Ao0CeAJ5Ao4CjQJ4Ao4CeQJ6Ao8CjgJ5Ao8CegJ7ApACjwJ6ApACewJ8ApECkAJ7ApECfAJ9ApICkQJ8ApICfQJ+ApMCkgJ9ApMCfgJ/ApQCkwJ+ApQCfwKAApUClAJ/ApUCgAKBApYClQKAApYCgQKCApcClgKBApcCggKDApgClwKCApgCgwKEApkCmAKDApkChAKFApoCmQKEApoChQKGApsCmgKFApsChgKHApwCmwKGApwChwKIAp0CnAKHAp0CiAKJAp4CnQKIAp4CiQKKAp8CngKJAp8CGQAYAKACigIZAKACnwKKAqACXQBcAKECXACLAqECXgBdAKECiwKMAqICoQKLAqICjAKNAqMCogKMAqMCjQKOAqQCowKNAqQCjgKPAqUCpAKOAqUCjwKQAqYCpQKPAqYCkAKRAqcCpgKQAqcCkQKSAqgCpwKRAqgCkgKTAqkCqAKSAqkCkwKUAqoCqQKTAqoClAKVAqsCqgKUAqsClQKWAqwCqwKVAqwClgKXAq0CrAKWAq0ClwKYAq4CrQKXAq4CmAKZAq8CrgKYAq8CmQKaArACrwKZArACmgKbArECsAKaArECmwKcArICsQKbArICnAKdArMCsgKcArMCnQKeArQCswKdArQCngKfArUCtAKeArUCnwKgArYCtQKfArYCGAAXALcCoAIYALcCFwAWALcCtgKgArcCXgChArgCoQKiArgCogKjArkCuAKiArkCowKkAroCuQKjAroCpAKlArsCugKkArsCpQKmArwCuwKlArwCpgKnAr0CvAKmAr0CpwKoAr4CvQKnAr4CqAKpAr8CvgKoAr8CqQKqAsACvwKpAsACqgKrAsECwAKqAsECqwKsAsICwQKrAsICrAKtAsMCwgKsAsMCrQKuAsQCwwKtAsQCrgKvAsUCxAKuAsUCrwKwAsYCxQKvAsYCsAKxAscCxgKwAscCsQKyAsgCxwKxAsgCsgKzAskCyAKyAskCswK0AsoCyQKzAsoCtAK1AssCygK0AssCtQK2AswCywK1AswCtgK3As0CzAK2As0CtwIWAM0CXwBeAM4CXgC4As4CuAK5As8CzgK4As8CuQK6AtACzwK5AtACugK7AtEC0AK6AtECuwK8AtIC0QK7AtICvAK9AtMC0gK8AtMCvQK+AtQC0wK9AtQCvgK/AtUC1AK+AtUCvwLAAtYC1QK/AtYCwALBAtcC1gLAAtcCwQLCAtgC1wLBAtgCwgLDAtkC2ALCAtkCwwLEAtoC2QLDAtoCxALFAtsC2gLEAtsCxQLGAtwC2wLFAtwCxgLHAt0C3ALGAt0CxwLIAt4C3QLHAt4CyALJAt8C3gLIAt8CyQLKAuAC3wLJAuACygLLAuEC4ALKAuECywLMAuIC4QLLAuICzALNAuMC4gLMAuMCFgAVAOQCzQIWAOQC4wLNAuQCXwDOAuUCzgLPAuUCzwLQAuYC5QLPAuYC0ALRAucC5gLQAucC0QLSAugC5wLRAugC0gLTAukC6ALSAukC0wLUAuoC6QLTAuoC1ALVAusC6gLUAusC1QLWAuwC6wLVAuwC1gLXAu0C7ALWAu0C1wLYAu4C7QLXAu4C2ALZAu8C7gLYAu8C2QLaAvAC7wLZAvAC2gLbAvEC8ALaAvEC2wLcAvIC8QLbAvIC3ALdAvMC8gLcAvMC3QLeAvQC8wLdAvQC3gLfAvUC9ALeAvUC3wLgAvYC9QLfAvYC4ALhAvcC9gLgAvcC4QLiAvgC9wLhAvgC4gLjAvkC+ALiAvkC5AIVAPoC4wLkAvoC+QLjAvoCYABfAPsCXwDlAvsCYQBgAPsC5QLmAvwC+wLlAvwC5gLnAv0C/ALmAv0C5wLoAv4C/QLnAv4C6ALpAv8C/gLoAv8C6QLqAgAD/wLpAgAD6gLrAgEDAAPqAgED6wLsAgIDAQPrAgID7ALtAgMDAgPsAgMD7QLuAgQDAwPtAgQD7gLvAgUDBAPuAgUD7wLwAgYDBQPvAgYD8ALxAgcDBgPwAgcD8QLyAggDBwPxAggD8gLzAgkDCAPyAgkD8wL0AgoDCQPzAgoD9AL1AgsDCgP0AgsD9QL2AgwDCwP1AgwD9gL3Ag0DDAP2Ag0D9wL4Ag4DDQP3Ag4D+AL5Ag8DDgP4Ag8D+QL6AhADDwP5AhADFQAUABED+gIVABEDFAATABEDEAP6AhEDYQD7AhID+wL8AhID/AL9AhMDEgP8AhMD/QL+AhQDEwP9AhQD/gL/AhUDFAP+AhUD/wIAAxYDFQP/AhYDAAMBAxcDFgMAAxcDAQMCAxgDFwMBAxgDAgMDAxkDGAMCAxkDAwMEAxoDGQMDAxoDBAMFAxsDGgMEAxsDBQMGAxwDGwMFAxwDBgMHAx0DHAMGAx0DBwMIAx4DHQMHAx4DCAMJAx8DHgMIAx8DCQMKAyADHwMJAyADCgMLAyEDIAMKAyEDCwMMAyIDIQMLAyIDDAMNAyMDIgMMAyMDDQMOAyQDIwMNAyQDDgMPAyUDJAMOAyUDDwMQAyYDJQMPAyYDEQMTACcDEAMRAycDJgMQAycDYgBhACgDYQASAygDYwBiACgDEgMTAykDKAMSAykDEwMUAyoDKQMTAyoDFAMVAysDKgMUAysDFQMWAywDKwMVAywDFgMXAy0DLAMWAy0DFwMYAy4DLQMXAy4DGAMZAy8DLgMYAy8DGQMaAzADLwMZAzADGgMbAzEDMAMaAzEDGwMcAzIDMQMbAzIDHAMdAzMDMgMcAzMDHQMeAzQDMwMdAzQDHgMfAzUDNAMeAzUDHwMgAzYDNQMfAzYDIAMhAzcDNgMgAzcDIQMiAzgDNwMhAzgDIgMjAzkDOAMiAzkDIwMkAzoDOQMjAzoDJAMlAzsDOgMkAzsDJQMmAzwDOwMlAzwDJgMnAz0DPAMmAz0DEwASAD4DJwMTAD4DEgARAD4DPQMnAz4DYwAoAz8DKAMpAz8DKQMqA0ADPwMpA0ADKgMrA0EDQAMqA0EDKwMsA0IDQQMrA0IDLAMtA0MDQgMsA0MDLQMuA0QDQwMtA0QDLgMvA0UDRAMuA0UDLwMwA0YDRQMvA0YDMAMxA0cDRgMwA0cDMQMyA0gDRwMxA0gDMgMzA0kDSAMyA0kDMwM0A0oDSQMzA0oDNAM1A0sDSgM0A0sDNQM2A0wDSwM1A0wDNgM3A00DTAM2A00DNwM4A04DTQM3A04DOAM5A08DTgM4A08DOQM6A1ADTwM5A1ADOgM7A1EDUAM6A1EDOwM8A1IDUQM7A1IDPAM9A1MDUgM8A1MDPgMRAFQDPQM+A1QDUwM9A1QDZABjAFUDYwA/A1UDPwNAA1YDVQM/A1YDQANBA1cDVgNAA1cDQQNCA1gDVwNBA1gDQgNDA1kDWANCA1kDQwNEA1oDWQNDA1oDRANFA1sDWgNEA1sDRQNGA1wDWwNFA1wDRgNHA10DXANGA10DRwNIA14DXQNHA14DAABzAF8DSANJA18DXgNIA18DSQNKA2ADXwNJA2ADAABfA2ADAQAAAGEDAABgA2EDSgNLA2EDYANKA2EDSwNMA2IDYQNLA2IDTANNA2MDYgNMA2MDTQNOA2QDYwNNA2QDTgNPA2UDZANOA2UDTwNQA2YDZQNPA2YDUANRA2cDZgNQA2cDUQNSA2gDZwNRA2gDUgNTA2kDaANSA2kDUwNUA2oDaQNTA2oDEQAQAGsDVAMRAGsDagNUA2sDZQBkAGwDZABVA2wDZgBlAGwDZwBmAGwDVQNWA2wDVgNXA20DbANWA20DZwBsA20DVwNYA24DbQNXA24DWANZA28DbgNYA28DWQNaA3ADbwNZA3ADWgNbA3EDcANaA3EDWwNcA3IDcQNbA3IDXANdA3MDcgNcA3MDXQNeA3QDcwNdA3QDXgNfA3UDXwNzAHUDcwByAHUDcgB0A3UDdANeA3UDAgABAHYDAQBhA3YDYQNiA3YDYgNjA3cDdgNiA3cDAgB2A3cDYwNkA3gDdwNjA3gDZANlA3kDeANkA3kDZQNmA3oDeQNlA3oDZgNnA3sDegNmA3sDZwNoA3wDewNnA3wDaANpA30DfANoA30DaQNqA34DfQNpA34DDgANAH8DDQB+A38DagNrA38DfgNqA38DDwAOAIADDgB/A4ADEAAPAIADawMQAIADfwNrA4ADaABnAIEDZwBtA4EDaQBoAIEDbQNuA4EDbgNvA4IDgQNuA4IDaQCBA4IDbwNwA4MDggNvA4MDcANxA4QDgwNwA4QDcQNyA4UDhANxA4UDcgNzA4YDhQNyA4YDcgBxAIcDdANyAIcDcwN0A4cDcQBwAIcDcACGA4cDhgNzA4cDAwACAIgDAgB3A4gDdwN4A4gDBAADAIkDAwCIA4kDeAN5A4kDiAN4A4kDeQN6A4oDiQN5A4oDegN7A4sDigN6A4sDewN8A4wDiwN7A4wDfAN9A40DjAN8A40DDQAMAI4DfgMNAI4DfQN+A44DDAALAI4DCwCNA44DjQN9A44DagBpAI8DaQCCA48DggODA48DawBqAJADagCPA5ADgwOEA5ADjwODA5ADbABrAJEDawCQA5EDhAOFA5EDkAOEA5EDcABvAJIDhQOGA5IDkQOFA5IDhgNwAJIDBQAEAJMDBACJA5MDiQOKA5MDCQAIAJQDigOLA5QDkwOKA5QDCgAJAJUDiwOMA5UDlAOLA5UDCQCUA5UDCwAKAJYDjQMLAJYDjAONA5YDCgCVA5YDlQOMA5YDbQBsAJcDbACRA5cDkQOSA5cDbwBtAJcDkgNvAJcDBwAFAJgDBQCTA5gDCAAHAJgDkwOUA5gDlAMIAJgD","ao":"//////////////////////////7+/Pr49vPv6uTg3t7c29/l7PT5/P7+/////////////////////////////////////////////v78+fXs5t/c3d/g4uXr7/P2+Pr8/v7//////////////////////////////////////////////////////////////////////////////////v7+/////v///v////7+/v7///7+/f7+/v7+/v7+/v7+/v79/f7//v38/P3+/v7+/v7+/v7+/fz8/f7+/fv7/P3+/f3+/v79/f79/Pv7/f79+vn6/P39/f39/f39/f39+vn6/f369/j7/f39/f39/f39/f37+Pf6/fr29fj8/f38/P39/fz9/fz59vb6+fXz9fr8/fz8/P38/Pz8/Pr18/X59fDx9vv8/Pz8/Pz8/Pz8+/bx8PTx7ezx+Pz8/Pz8/Pz8/Pz8+fHs7fDp5+v0+vz8/Pz8/Pz7/Pz69Ovn6eTh5O33/Pz8/Pz8/Pz8/Pz47uTi5N3d5vL6/Pz8/Pz8/Pz8/Prz5t7d29rf7Pj8/Pz8/P38/Pz8/Pjt4Nrb29zm9Pv8/Pz8/f38/Pz8+/Xn3Nrd3OLw+v38/Pz9/f38/Pz9+vHj3Nzf4u34/f39/f39/f39/f39+O7i3uHk7Pf8/f39/f3+/f39/f389+zj3+Xs9vz+/v39/v7+/v39/v789uzj5ev0+/7+/v7+/v7+/v7+/v779Orj6vL6/f7+/v7+/v7+/v7+/v768uru8ff9/v7+/v7+//7+/v7+/v348e7x8vb7/v////////////////789/Lx8/b6/f/////////////////++vbz9vb5/f7////////////////+/fn29vj4+fz+//////////////////78+fj4+fr7/v///////////////////vz6+fv7/P3////////////////////9/Pv7/Pz9/v///////////////////v38/P39/v7////////////////////+/v39/v7////////////////////////+/v//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"},
    back: {"pat":"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","pos":"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","tri":"BgAFAAcAbgBtAG8ARABDAHQARQBEAHQARgBFAHQAQwBCAHUAdABDAHUAQgBBAHYAdQBCAHYAQQBAAHcAdgBBAHcAQAA/AHgAdwBAAHgAPwA+AHkAeAA/AHkAPgA9AHoAeQA+AHoAPQA8AHsAegA9AHsAPAA7AHwAewA8AHwAOwA6AH0AfAA7AH0AOgA5AH4AfQA6AH4AOQA4AH8AfgA5AH8AOAA3AIAAfwA4AIAANwA2AIEAgAA3AIEANgA1AIIAgQA2AIIANQA0AIMAggA1AIMANAAzAIQAgwA0AIQAMwAyAIUAhAAzAIUAMgAxAIYAhQAyAIYALwAuAIcAMAAvAIcAMQAwAIcAhgAxAIcARwBGAIgARgB0AIgAdAB1AIkAiAB0AIkAdQB2AIoAiQB1AIoAdgB3AIsAigB2AIsAdwB4AIwAiwB3AIwAeAB5AI0AjAB4AI0AeQB6AI4AjQB5AI4AegB7AI8AjgB6AI8AewB8AJAAjwB7AJAAfAB9AJEAkAB8AJEAfQB+AJIAkQB9AJIAfgB/AJMAkgB+AJMAfwCAAJQAkwB/AJQAgACBAJUAlACAAJUAgQCCAJYAlQCBAJYAggCDAJcAlgCCAJcAgwCEAJgAlwCDAJgAhACFAJkAmACEAJkAhQCGAJoAmQCFAJoAhgCHAJsAmgCGAJsALgAtAJwAhwAuAJwAmwCHAJwASABHAJ0ARwCIAJ0AiACJAJ0AiQCKAJ4AnQCJAJ4AigCLAJ8AngCKAJ8AiwCMAKAAnwCLAKAAjACNAKEAoACMAKEAjQCOAKIAoQCNAKIAjgCPAKMAogCOAKMAjwCQAKQAowCPAKQAkACRAKUApACQAKUAkQCSAKYApQCRAKYAkgCTAKcApgCSAKcAkwCUAKgApwCTAKgAlACVAKkAqACUAKkAlQCWAKoAqQCVAKoAlgCXAKsAqgCWAKsAlwCYAKwAqwCXAKwAmACZAK0ArACYAK0AmQCaAK4ArQCZAK4AmgCbAK8ArgCaAK8ALQAsALAAnAAtALAAmwCcALAArwCbALAASQBIALEASACdALEAnQCeALIAsQCdALIAngCfALMAsgCeALMAnwCgALQAswCfALQAoAChALUAtACgALUAoQCiALYAtQChALYAogCjALcAtgCiALcAowCkALgAtwCjALgApAClALkAuACkALkApQCmALoAuQClALoApgCnALsAugCmALsApwCoALwAuwCnALwAqACpAL0AvACoAL0AqQCqAL4AvQCpAL4AqgCrAL8AvgCqAL8AqwCsAMAAvwCrAMAArACtAMEAwACsAMEArQCuAMIAwQCtAMIArgCvAMMAwgCuAMMArwCwAMQAwwCvAMQALAArAMUAsAAsAMUAxACwAMUASQCxAMYAsQCyAMYAsgCzAMcAxgCyAMcAswC0AMgAxwCzAMgAtAC1AMkAyAC0AMkAtQC2AMoAyQC1AMoAtgC3AMsAygC2AMsAtwC4AMwAywC3AMwAuAC5AM0AzAC4AM0AuQC6AM4AzQC5AM4AugC7AM8AzgC6AM8AuwC8ANAAzwC7ANAAvAC9ANEA0AC8ANEAvQC+ANIA0QC9ANIAvgC/ANMA0gC+ANMAvwDAANQA0wC/ANQAwADBANUA1ADAANUAwQDCANYA1QDBANYAwgDDANcA1gDCANcAwwDEANgA1wDDANgAxQArANkAxADFANkA2ADEANkASgBJANoASQDGANoASwBKANoAxgDHANsA2gDGANsAxwDIANwA2wDHANwAyADJAN0A3ADIAN0AyQDKAN4A3QDJAN4AygDLAN8A3gDKAN8AywDMAOAA3wDLAOAAzADNAOEA4ADMAOEAzQDOAOIA4QDNAOIAzgDPAOMA4gDOAOMAzwDQAOQA4wDPAOQA0ADRAOUA5ADQAOUA0QDSAOYA5QDRAOYA0gDTAOcA5gDSAOcA0wDUAOgA5wDTAOgA1ADVAOkA6ADUAOkA1QDWAOoA6QDVAOoA1gDXAOsA6gDWAOsA1wDYAOwA6wDXAOwA2ADZAO0A7ADYAO0AKwAqAO4A2QArAO4AKgApAO4A7QDZAO4ASwDaAO8A2gDbAO8A2wDcAPAA7wDbAPAA3ADdAPEA8ADcAPEA3QDeAPIA8QDdAPIA3gDfAPMA8gDeAPMA3wDgAPQA8wDfAPQA4ADhAPUA9ADgAPUA4QDiAPYA9QDhAPYA4gDjAPcA9gDiAPcA4wDkAPgA9wDjAPgA5ADlAPkA+ADkAPkA5QDmAPoA+QDlAPoA5gDnAPsA+gDmAPsA5wDoAPwA+wDnAPwA6ADpAP0A/ADoAP0A6QDqAP4A/QDpAP4A6gDrAP8A/gDqAP8A6wDsAAAB/wDrAAAB7ADtAAEBAAHsAAEB7QDuAAIBAQHtAAIB7gApAAIBTABLAAMBSwDvAAMBTQBMAAMB7wDwAAQBAwHvAAQB8ADxAAUBBAHwAAUB8QDyAAYBBQHxAAYB8gDzAAcBBgHyAAcB8wD0AAgBBwHzAAgB9AD1AAkBCAH0AAkB9QD2AAoBCQH1AAoB9gD3AAsBCgH2AAsB9wD4AAwBCwH3AAwB+AD5AA0BDAH4AA0B+QD6AA4BDQH5AA4B+gD7AA8BDgH6AA8B+wD8ABABDwH7ABAB/AD9ABEBEAH8ABEB/QD+ABIBEQH9ABIB/gD/ABMBEgH+ABMB/wAAARQBEwH/ABQBAAEBARUBFAEAARUBAQECARYBFQEBARYBKQAoABcBAgEpABcBKAAnABcBFgECARcBTQADARgBAwEEARgBBAEFARkBGAEEARkBBQEGARoBGQEFARoBBgEHARsBGgEGARsBBwEIARwBGwEHARwBCAEJAR0BHAEIAR0BCQEKAR4BHQEJAR4BCgELAR8BHgEKAR8BCwEMASABHwELASABDAENASEBIAEMASEBDQEOASIBIQENASIBDgEPASMBIgEOASMBDwEQASQBIwEPASQBEAERASUBJAEQASUBEQESASYBJQERASYBEgETAScBJgESAScBEwEUASgBJwETASgBFAEVASkBKAEUASkBFQEWASoBKQEVASoBFgEXASsBKgEWASsBFwEnACsBTgBNACwBTQAYASwBGAEZAS0BLAEYAS0BGQEaAS4BLQEZAS4BGgEbAS8BLgEaAS8BGwEcATABLwEbATABHAEdATEBMAEcATEBHQEeATIBMQEdATIBHgEfATMBMgEeATMBHwEgATQBMwEfATQBIAEhATUBNAEgATUBIQEiATYBNQEhATYBIgEjATcBNgEiATcBIwEkATgBNwEjATgBJAElATkBOAEkATkBJQEmAToBOQElAToBJgEnATsBOgEmATsBJwEoATwBOwEnATwBKAEpAT0BPAEoAT0BKQEqAT4BPQEpAT4BKgErAT8BPgEqAT8BJwAmAEABKwEnAEABPwErAUABTwBOAEEBTgAsAUEBLAEtAUEBLQEuAUIBQQEtAUIBLgEvAUMBQgEuAUMBLwEwAUQBQwEvAUQBMAExAUUBRAEwAUUBMQEyAUYBRQExAUYBMgEzAUcBRgEyAUcBMwE0AUgBRwEzAUgBNAE1AUkBSAE0AUkBNQE2AUoBSQE1AUoBNgE3AUsBSgE2AUsBNwE4AUwBSwE3AUwBOAE5AU0BTAE4AU0BOQE6AU4BTQE5AU4BOgE7AU8BTgE6AU8BOwE8AVABTwE7AVABPAE9AVEBUAE8AVEBPQE+AVIBUQE9AVIBPgE/AVMBUgE+AVMBJgAlAFQBQAEmAFQBPwFAAVQBUwE/AVQBUABPAFUBTwBBAVUBQQFCAVYBVQFBAVYBQgFDAVcBVgFCAVcBQwFEAVgBVwFDAVgBRAFFAVkBWAFEAVkBRQFGAVoBWQFFAVoBRgFHAVsBWgFGAVsBRwFIAVwBWwFHAVwBSAFJAV0BXAFIAV0BSQFKAV4BXQFJAV4BSgFLAV8BXgFKAV8BSwFMAWABXwFLAWABTAFNAWEBYAFMAWEBTQFOAWIBYQFNAWIBTgFPAWMBYgFOAWMBTwFQAWQBYwFPAWQBUAFRAWUBZAFQAWUBUQFSAWYBZQFRAWYBUgFTAWcBZgFSAWcBUwFUAWgBZwFTAWgBJQAkAGkBVAElAGkBaAFUAWkBUABVAWoBVQFWAWoBVgFXAWsBagFWAWsBVwFYAWwBawFXAWwBWAFZAW0BbAFYAW0BWQFaAW4BbQFZAW4BWgFbAW8BbgFaAW8BWwFcAXABbwFbAXABXAFdAXEBcAFcAXEBXQFeAXIBcQFdAXIBXgFfAXMBcgFeAXMBXwFgAXQBcwFfAXQBYAFhAXUBdAFgAXUBYQFiAXYBdQFhAXYBYgFjAXcBdgFiAXcBYwFkAXgBdwFjAXgBZAFlAXkBeAFkAXkBZQFmAXoBeQFlAXoBZgFnAXsBegFmAXsBZwFoAXwBewFnAXwBaQEkAH0BaAFpAX0BfAFoAX0BUQBQAH4BUABqAX4BUgBRAH4BagFrAX8BfgFqAX8BawFsAYABfwFrAYABbAFtAYEBgAFsAYEBbQFuAYIBgQFtAYIBbgFvAYMBggFuAYMBbwFwAYQBgwFvAYQBcAFxAYUBhAFwAYUBcQFyAYYBhQFxAYYBcgFzAYcBhgFyAYcBcwF0AYgBhwFzAYgBdAF1AYkBiAF0AYkBdQF2AYoBiQF1AYoBdgF3AYsBigF2AYsBdwF4AYwBiwF3AYwBeAF5AY0BjAF4AY0BeQF6AY4BjQF5AY4BegF7AY8BjgF6AY8BewF8AZABjwF7AZABfAF9AZEBkAF8AZEBJAAjAJIBfQEkAJIBIwAiAJIBkQF9AZIBUgB+AZMBfgF/AZMBfwGAAZQBkwF/AZQBgAGBAZUBlAGAAZUBgQGCAZYBlQGBAZYBggGDAZcBlgGCAZcBgwGEAZgBlwGDAZgBhAGFAZkBmAGEAZkBhQGGAZoBmQGFAZoBhgGHAZsBmgGGAZsBhwGIAZwBmwGHAZwBiAGJAZ0BnAGIAZ0BiQGKAZ4BnQGJAZ4BigGLAZ8BngGKAZ8BiwGMAaABnwGLAaABjAGNAaEBoAGMAaEBjQGOAaIBoQGNAaIBjgGPAaMBogGOAaMBjwGQAaQBowGPAaQBkAGRAaUBpAGQAaUBkQGSAaYBpQGRAaYBkgEiAKYBUwBSAKcBUgCTAacBkwGUAagBpwGTAagBlAGVAakBqAGUAakBlQGWAaoBqQGVAaoBlgGXAasBqgGWAasBlwGYAawBqwGXAawBmAGZAa0BrAGYAa0BmQGaAa4BrQGZAa4BmgGbAa8BrgGaAa8BmwGcAbABrwGbAbABnAGdAbEBsAGcAbEBnQGeAbIBsQGdAbIBngGfAbMBsgGeAbMBnwGgAbQBswGfAbQBoAGhAbUBtAGgAbUBoQGiAbYBtQGhAbYBogGjAbcBtgGiAbcBowGkAbgBtwGjAbgBpAGlAbkBuAGkAbkBpQGmAboBuQGlAboBIgAhALsBpgEiALsBugGmAbsBVABTALwBUwCnAbwBpwGoAbwBqAGpAb0BvAGoAb0BqQGqAb4BvQGpAb4BqgGrAb8BvgGqAb8BqwGsAcABvwGrAcABrAGtAcEBwAGsAcEBrQGuAcIBwQGtAcIBrgGvAcMBwgGuAcMBrwGwAcQBwwGvAcQBsAGxAcUBxAGwAcUBsQGyAcYBxQGxAcYBsgGzAccBxgGyAccBswG0AcgBxwGzAcgBtAG1AckByAG0AckBtQG2AcoByQG1AcoBtgG3AcsBygG2AcsBtwG4AcwBywG3AcwBuAG5Ac0BzAG4Ac0BuQG6Ac4BzQG5Ac4BIQAgAM8BuwEhAM8BugG7Ac8BzgG6Ac8BVQBUANABVAC8AdABvAG9AdEB0AG8AdEBvQG+AdIB0QG9AdIBvgG/AdMB0gG+AdMBvwHAAdQB0wG/AdQBwAHBAdUB1AHAAdUBwQHCAdYB1QHBAdYBwgHDAdcB1gHCAdcBwwHEAdgB1wHDAdgBxAHFAdkB2AHEAdkBxQHGAdoB2QHFAdoBxgHHAdsB2gHGAdsBxwHIAdwB2wHHAdwByAHJAd0B3AHIAd0ByQHKAd4B3QHJAd4BygHLAd8B3gHKAd8BywHMAeAB3wHLAeABzAHNAeEB4AHMAeEBzQHOAeIB4QHNAeIBzgHPAeMB4gHOAeMBIAAfAOQBzwEgAOQB4wHPAeQBVgBVAOUBVQDQAeUB0AHRAeUB0QHSAeYB5QHRAeYB0gHTAecB5gHSAecB0wHUAegB5wHTAegB1AHVAekB6AHUAekB1QHWAeoB6QHVAeoB1gHXAesB6gHWAesB1wHYAewB6wHXAewB2AHZAe0B7AHYAe0B2QHaAe4B7QHZAe4B2gHbAe8B7gHaAe8B2wHcAfAB7wHbAfAB3AHdAfEB8AHcAfEB3QHeAfIB8QHdAfIB3gHfAfMB8gHeAfMB3wHgAfQB8wHfAfQB4AHhAfUB9AHgAfUB4QHiAfYB9QHhAfYB4gHjAfcB9gHiAfcBHwAeAPgB5AEfAPgB4wHkAfgB9wHjAfgBVwBWAPkBVgDlAfkB5QHmAfoB+QHlAfoB5gHnAfsB+gHmAfsB5wHoAfwB+wHnAfwB6AHpAf0B/AHoAf0B6QHqAf4B/QHpAf4B6gHrAf8B/gHqAf8B6wHsAQAC/wHrAQAC7AHtAQECAALsAQEC7QHuAQICAQLtAQIC7gHvAQMCAgLuAQMC7wHwAQQCAwLvAQQC8AHxAQUCBALwAQUC8QHyAQYCBQLxAQYC8gHzAQcCBgLyAQcC8wH0AQgCBwLzAQgC9AH1AQkCCAL0AQkC9QH2AQoCCQL1AQoC9gH3AQsCCgL2AQsC9wH4AQwCCwL3AQwCHgAdAA0C+AEeAA0CDAL4AQ0CVwD5AQ4C+QH6AQ4C+gH7AQ8CDgL6AQ8C+wH8ARACDwL7ARAC/AH9ARECEAL8AREC/QH+ARICEQL9ARIC/gH/ARMCEgL+ARMC/wEAAhQCEwL/ARQCAAIBAhUCFAIAAhUCAQICAhYCFQIBAhYCAgIDAhcCFgICAhcCAwIEAhgCFwIDAhgCBAIFAhkCGAIEAhkCBQIGAhoCGQIFAhoCBgIHAhsCGgIGAhsCBwIIAhwCGwIHAhwCCAIJAh0CHAIIAh0CCQIKAh4CHQIJAh4CCgILAh8CHgIKAh8CCwIMAiACHwILAiACDAINAiECIAIMAiECDQIdACECWABXACICVwAOAiICDgIPAiMCIgIOAiMCDwIQAiQCIwIPAiQCEAIRAiUCJAIQAiUCEQISAiYCJQIRAiYCEgITAicCJgISAicCEwIUAigCJwITAigCFAIVAikCKAIUAikCFQIWAioCKQIVAioCFgIXAisCKgIWAisCFwIYAiwCKwIXAiwCGAIZAi0CLAIYAi0CGQIaAi4CLQIZAi4CGgIbAi8CLgIaAi8CGwIcAjACLwIbAjACHAIdAjECMAIcAjECHQIeAjICMQIdAjICHgIfAjMCMgIeAjMCHwIgAjQCMwIfAjQCIAIhAjUCNAIgAjUCHQAcADYCIQIdADYCNQIhAjYCWQBYADcCWAAiAjcCIgIjAjcCIwIkAjgCNwIjAjgCJAIlAjkCOAIkAjkCJQImAjoCOQIlAjoCJgInAjsCOgImAjsCJwIoAjwCOwInAjwCKAIpAj0CPAIoAj0CKQIqAj4CPQIpAj4CKgIrAj8CPgIqAj8CKwIsAkACPwIrAkACLAItAkECQAIsAkECLQIuAkICQQItAkICLgIvAkMCQgIuAkMCLwIwAkQCQwIvAkQCMAIxAkUCRAIwAkUCMQIyAkYCRQIxAkYCMgIzAkcCRgIyAkcCMwI0AkgCRwIzAkgCNAI1AkkCSAI0AkkCHAAbAEoCNgIcAEoCNQI2AkoCSQI1AkoCWgBZAEsCWQA3AksCNwI4AkwCSwI3AkwCOAI5Ak0CTAI4Ak0COQI6Ak4CTQI5Ak4COgI7Ak8CTgI6Ak8COwI8AlACTwI7AlACPAI9AlECUAI8AlECPQI+AlICUQI9AlICPgI/AlMCUgI+AlMCPwJAAlQCUwI/AlQCQAJBAlUCVAJAAlUCQQJCAlYCVQJBAlYCQgJDAlcCVgJCAlcCQwJEAlgCVwJDAlgCRAJFAlkCWAJEAlkCRQJGAloCWQJFAloCRgJHAlsCWgJGAlsCRwJIAlwCWwJHAlwCSAJJAl0CXAJIAl0CSQJKAl4CXQJJAl4CGwAaAF8CSgIbAF8CXgJKAl8CWwBaAGACWgBLAmACSwJMAmECYAJLAmECTAJNAmICYQJMAmICTQJOAmMCYgJNAmMCTgJPAmQCYwJOAmQCTwJQAmUCZAJPAmUCUAJRAmYCZQJQAmYCUQJSAmcCZgJRAmcCUgJTAmgCZwJSAmgCUwJUAmkCaAJTAmkCVAJVAmoCaQJUAmoCVQJWAmsCagJVAmsCVgJXAmwCawJWAmwCVwJYAm0CbAJXAm0CWAJZAm4CbQJYAm4CWQJaAm8CbgJZAm8CWgJbAnACbwJaAnACWwJcAnECcAJbAnECXAJdAnICcQJcAnICXQJeAnMCcgJdAnMCXgJfAnQCcwJeAnQCGgAZAHUCXwIaAHUCdAJfAnUCWwBgAnYCYAJhAnYCYQJiAncCdgJhAncCYgJjAngCdwJiAngCYwJkAnkCeAJjAnkCZAJlAnoCeQJkAnoCZQJmAnsCegJlAnsCZgJnAnwCewJmAnwCZwJoAn0CfAJnAn0CaAJpAn4CfQJoAn4CaQJqAn8CfgJpAn8CagJrAoACfwJqAoACawJsAoECgAJrAoECbAJtAoICgQJsAoICbQJuAoMCggJtAoMCbgJvAoQCgwJuAoQCbwJwAoUChAJvAoUCcAJxAoYChQJwAoYCcQJyAocChgJxAocCcgJzAogChwJyAogCcwJ0AokCiAJzAokCdQIZAIoCdAJ1AooCiQJ0AooCXABbAIsCWwB2AosCdgJ3AowCiwJ2AowCdwJ4Ao0CjAJ3Ao0CeAJ5Ao4CjQJ4Ao4CeQJ6Ao8CjgJ5Ao8CegJ7ApACjwJ6ApACewJ8ApECkAJ7ApECfAJ9ApICkQJ8ApICfQJ+ApMCkgJ9ApMCfgJ/ApQCkwJ+ApQCfwKAApUClAJ/ApUCgAKBApYClQKAApYCgQKCApcClgKBApcCggKDApgClwKCApgCgwKEApkCmAKDApkChAKFApoCmQKEApoChQKGApsCmgKFApsChgKHApwCmwKGApwChwKIAp0CnAKHAp0CiAKJAp4CnQKIAp4CiQKKAp8CngKJAp8CGQAYAKACigIZAKACnwKKAqACXQBcAKECXACLAqECXgBdAKECiwKMAqICoQKLAqICjAKNAqMCogKMAqMCjQKOAqQCowKNAqQCjgKPAqUCpAKOAqUCjwKQAqYCpQKPAqYCkAKRAqcCpgKQAqcCkQKSAqgCpwKRAqgCkgKTAqkCqAKSAqkCkwKUAqoCqQKTAqoClAKVAqsCqgKUAqsClQKWAqwCqwKVAqwClgKXAq0CrAKWAq0ClwKYAq4CrQKXAq4CmAKZAq8CrgKYAq8CmQKaArACrwKZArACmgKbArECsAKaArECmwKcArICsQKbArICnAKdArMCsgKcArMCnQKeArQCswKdArQCngKfArUCtAKeArUCnwKgArYCtQKfArYCGAAXALcCoAIYALcCFwAWALcCtgKgArcCXgChArgCoQKiArgCogKjArkCuAKiArkCowKkAroCuQKjAroCpAKlArsCugKkArsCpQKmArwCuwKlArwCpgKnAr0CvAKmAr0CpwKoAr4CvQKnAr4CqAKpAr8CvgKoAr8CqQKqAsACvwKpAsACqgKrAsECwAKqAsECqwKsAsICwQKrAsICrAKtAsMCwgKsAsMCrQKuAsQCwwKtAsQCrgKvAsUCxAKuAsUCrwKwAsYCxQKvAsYCsAKxAscCxgKwAscCsQKyAsgCxwKxAsgCsgKzAskCyAKyAskCswK0AsoCyQKzAsoCtAK1AssCygK0AssCtQK2AswCywK1AswCtgK3As0CzAK2As0CtwIWAM0CXwBeAM4CXgC4As4CuAK5As8CzgK4As8CuQK6AtACzwK5AtACugK7AtEC0AK6AtECuwK8AtIC0QK7AtICvAK9AtMC0gK8AtMCvQK+AtQC0wK9AtQCvgK/AtUC1AK+AtUCvwLAAtYC1QK/AtYCwALBAtcC1gLAAtcCwQLCAtgC1wLBAtgCwgLDAtkC2ALCAtkCwwLEAtoC2QLDAtoCxALFAtsC2gLEAtsCxQLGAtwC2wLFAtwCxgLHAt0C3ALGAt0CxwLIAt4C3QLHAt4CyALJAt8C3gLIAt8CyQLKAuAC3wLJAuACygLLAuEC4ALKAuECywLMAuIC4QLLAuICzALNAuMC4gLMAuMCFgAVAOQCzQIWAOQC4wLNAuQCXwDOAuUCzgLPAuUCzwLQAuYC5QLPAuYC0ALRAucC5gLQAucC0QLSAugC5wLRAugC0gLTAukC6ALSAukC0wLUAuoC6QLTAuoC1ALVAusC6gLUAusC1QLWAuwC6wLVAuwC1gLXAu0C7ALWAu0C1wLYAu4C7QLXAu4C2ALZAu8C7gLYAu8C2QLaAvAC7wLZAvAC2gLbAvEC8ALaAvEC2wLcAvIC8QLbAvIC3ALdAvMC8gLcAvMC3QLeAvQC8wLdAvQC3gLfAvUC9ALeAvUC3wLgAvYC9QLfAvYC4ALhAvcC9gLgAvcC4QLiAvgC9wLhAvgC4gLjAvkC+ALiAvkC5AIVAPoC4wLkAvoC+QLjAvoCYABfAPsCXwDlAvsCYQBgAPsC5QLmAvwC+wLlAvwC5gLnAv0C/ALmAv0C5wLoAv4C/QLnAv4C6ALpAv8C/gLoAv8C6QLqAgAD/wLpAgAD6gLrAgEDAAPqAgED6wLsAgIDAQPrAgID7ALtAgMDAgPsAgMD7QLuAgQDAwPtAgQD7gLvAgUDBAPuAgUD7wLwAgYDBQPvAgYD8ALxAgcDBgPwAgcD8QLyAggDBwPxAggD8gLzAgkDCAPyAgkD8wL0AgoDCQPzAgoD9AL1AgsDCgP0AgsD9QL2AgwDCwP1AgwD9gL3Ag0DDAP2Ag0D9wL4Ag4DDQP3Ag4D+AL5Ag8DDgP4Ag8D+QL6AhADDwP5AhADFQAUABED+gIVABEDFAATABEDEAP6AhEDYQD7AhID+wL8AhID/AL9AhMDEgP8AhMD/QL+AhQDEwP9AhQD/gL/AhUDFAP+AhUD/wIAAxYDFQP/AhYDAAMBAxcDFgMAAxcDAQMCAxgDFwMBAxgDAgMDAxkDGAMCAxkDAwMEAxoDGQMDAxoDBAMFAxsDGgMEAxsDBQMGAxwDGwMFAxwDBgMHAx0DHAMGAx0DBwMIAx4DHQMHAx4DCAMJAx8DHgMIAx8DCQMKAyADHwMJAyADCgMLAyEDIAMKAyEDCwMMAyIDIQMLAyIDDAMNAyMDIgMMAyMDDQMOAyQDIwMNAyQDDgMPAyUDJAMOAyUDDwMQAyYDJQMPAyYDEQMTACcDEAMRAycDJgMQAycDYgBhACgDYQASAygDYwBiACgDEgMTAykDKAMSAykDEwMUAyoDKQMTAyoDFAMVAysDKgMUAysDFQMWAywDKwMVAywDFgMXAy0DLAMWAy0DFwMYAy4DLQMXAy4DGAMZAy8DLgMYAy8DGQMaAzADLwMZAzADGgMbAzEDMAMaAzEDGwMcAzIDMQMbAzIDHAMdAzMDMgMcAzMDHQMeAzQDMwMdAzQDHgMfAzUDNAMeAzUDHwMgAzYDNQMfAzYDIAMhAzcDNgMgAzcDIQMiAzgDNwMhAzgDIgMjAzkDOAMiAzkDIwMkAzoDOQMjAzoDJAMlAzsDOgMkAzsDJQMmAzwDOwMlAzwDJgMnAz0DPAMmAz0DEwASAD4DJwMTAD4DEgARAD4DPQMnAz4DYwAoAz8DKAMpAz8DKQMqA0ADPwMpA0ADKgMrA0EDQAMqA0EDKwMsA0IDQQMrA0IDLAMtA0MDQgMsA0MDLQMuA0QDQwMtA0QDLgMvA0UDRAMuA0UDLwMwA0YDRQMvA0YDMAMxA0cDRgMwA0cDMQMyA0gDRwMxA0gDMgMzA0kDSAMyA0kDMwM0A0oDSQMzA0oDNAM1A0sDSgM0A0sDNQM2A0wDSwM1A0wDNgM3A00DTAM2A00DNwM4A04DTQM3A04DOAM5A08DTgM4A08DOQM6A1ADTwM5A1ADOgM7A1EDUAM6A1EDOwM8A1IDUQM7A1IDPAM9A1MDUgM8A1MDPgMRAFQDPQM+A1QDUwM9A1QDZABjAFUDYwA/A1UDPwNAA1YDVQM/A1YDQANBA1cDVgNAA1cDQQNCA1gDVwNBA1gDQgNDA1kDWANCA1kDQwNEA1oDWQNDA1oDRANFA1sDWgNEA1sDRQNGA1wDWwNFA1wDRgNHA10DXANGA10DRwNIA14DXQNHA14DSANJA18DXgNIA18DSQNKA2ADXwNJA2ADSgNLA2EDYANKA2EDSwNMA2IDYQNLA2IDTANNA2MDYgNMA2MDTQNOA2QDYwNNA2QDTgNPA2UDZANOA2UDTwNQA2YDZQNPA2YDUANRA2cDZgNQA2cDUQNSA2gDZwNRA2gDUgNTA2kDaANSA2kDUwNUA2oDaQNTA2oDEQAQAGsDVAMRAGsDagNUA2sDZQBkAGwDZABVA2wDZgBlAGwDZwBmAGwDVQNWA2wDVgNXA20DbANWA20DZwBsA20DVwNYA24DbQNXA24DWANZA28DbgNYA28DWQNaA3ADbwNZA3ADWgNbA3EDcANaA3EDWwNcA3IDcQNbA3IDXANdA3MDcgNcA3MDXQNeA3QDcwNdA3QDXgNfA3UDdANeA3UDXwNgA3YDdQNfA3YDYANhA3cDdgNgA3cDYQNiA3gDdwNhA3gDYgNjA3kDeANiA3kDYwNkA3oDeQNjA3oDZANlA3sDegNkA3sDZQNmA3wDewNlA3wDZgNnA30DfANmA30DZwNoA34DfQNnA34DaANpA38DfgNoA38DaQNqA4ADfwNpA4ADDgANAIEDDQCAA4EDagNrA4EDgANqA4EDDwAOAIIDDgCBA4IDEAAPAIIDawMQAIIDgQNrA4IDaABnAIMDZwBtA4MDaQBoAIMDbQNuA4MDbgNvA4QDgwNuA4QDaQCDA4QDbwNwA4UDhANvA4UDcANxA4YDhQNwA4YDcQNyA4cDhgNxA4cDcgNzA4gDhwNyA4gDcwN0A4kDiANzA4kDdAN1A4oDiQN0A4oDdQN2A4sDigN1A4sDdgN3A4wDiwN2A4wDdwN4A40DjAN3A40DeAN5A44DjQN4A44DeQN6A48DjgN5A48DegN7A5ADjwN6A5ADewN8A5EDkAN7A5EDfAN9A5IDkQN8A5IDfQN+A5MDkgN9A5MDfgN/A5QDkwN+A5QDDQAMAJUDgAMNAJUDfwOAA5UDDAALAJUDCwCUA5UDlAN/A5UDagBpAJYDaQCEA5YDhAOFA5YDawBqAJcDagCWA5cDhQOGA5cDlgOFA5cDbABrAJgDawCXA5gDhgOHA5gDlwOGA5gDhwOIA5kDmAOHA5kDiAOJA5oDmQOIA5oDiQOKA5sDmgOJA5sDcwByAJwDcgCbA5wDigOLA5wDmwOKA5wDAABzAJ0DcwCcA50DiwOMA50DnAOLA50DAQAAAJ4DAACdA54DjAONA54DnQOMA54DAgABAJ8DAQCeA58DjQOOA58DngONA58DAgCfA6ADjgOPA6ADnwOOA6ADjwOQA6EDoAOPA6EDkAORA6IDoQOQA6IDCQAIAKMDkQOSA6MDogORA6MDCgAJAKQDkgOTA6QDowOSA6QDCQCjA6QDCwAKAKUDlAMLAKUDkwOUA6UDCgCkA6UDpAOTA6UDbQBsAKYDbACYA6YDmAOZA6YDbwBtAKcDbQCmA6cDcABvAKcDmQOaA6cDpgOZA6cDcgBxAKgDmwNyAKgDmgObA6gDcQBwAKgDcACnA6gDpwOaA6gDAwACAKkDAgCgA6kDBAADAKkDoAOhA6kDBQAEAKoDBwAFAKoDoQOiA6oDqQOhA6oDBACpA6oDCAAHAKsDogOjA6sDowMIAKsDBwCqA6sDqgOiA6sD","ao":"///////////////+/fnv6vD6/v7//v7+/fv48ujZycPI1+v3/P7////////////////+/v7+/v7///////7+/v7+/v////////7+/////v789+vTwLrE2er0+fz+/v7+//7+/fn39/v9/v////////////////7+/v7+/////////v7+/v7//////v7+/v7+///////+/v7+/v7////+/v7+/v7+//////7+/v7+/v/////+/v7+/v7+//////7+/v7+/v////7+/v7+/v7//////v7+/v7+//////7+/v7+/v///////v7+/v7+//////7+/v7+/v///////v7+/v7//////v7+/v7+///////+/v7+/v7//////v7+/v7////////+/v7+/v/////+/v7+/v/////////+/v7+/////v7+/v7+///////////+/v7+///+/v7+/v7////////////+/v7+/v78/f7+/v7///////////7+/v79/Pf5/P3+/v////////////7+/fz59+/1+v3+/v///////////v79+/Xv3+by+f3+/////////////v368+nh0OPy+f3+///////////+/frz59bA0+fz+v3+//////////79+vTq2cnI3ez1+/7///////////779e3gzs/a5u/2/P7//////////vz27+fc0t7k6fD4/f///////////fjw6eTe5ufm6vL6/v/////////++/Pp5eXk7ejm7Pb8///////////99uzl5uv17Ofo8fr+//////////768ejm6/P58+vo7fb8///////////99+7o6vH4+PHs7fP6/v/////////++/Tt6/D3+/bw7vH4/f///////////fjy7vD1+/369fHx9vv+//////////789vHx9Pr9/fn08vT5/f///////////fr18vT4/P78+PX1+Pz+//////////78+PX09/v+/fv49vf7/v///////////vv39vf7/f79+/j4+v3////////////9+vj4+v3+/v37+vr8/v///////////v36+fv9/v7+/fz7/P7////////////+/Pv7/f7+/f39/f3+//////////////79/f39/Pv8/f7+/v///////////////v7+/fv2+fz+/v7////////////////+/v789u79/v////////////////////79/////////////////////////////w=="},
    sleeves: [{"rings":12,"around":28,"pos":"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","hang":"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","uv":"AAAAAHsJAAD2EgAAchwAAO0lAABoLwAA4zgAAF9CAADaSwAAVVUAANBeAABLaAAAx3EAAEJ7AAC9hAAAOI4AALSXAAAvoQAAqqoAACW0AACgvQAAHMcAAJfQAAAS2gAAjeMAAAntAACE9gAA//8AAAAAVRV7CVUV9hJVFXIcVRXtJVUVaC9VFeM4VRVfQlUV2ktVFVVVVRXQXlUVS2hVFcdxVRVCe1UVvYRVFTiOVRW0l1UVL6FVFaqqVRUltFUVoL1VFRzHVRWX0FUVEtpVFY3jVRUJ7VUVhPZVFf//VRUAAKsqewmrKvYSqypyHKsq7SWrKmgvqyrjOKsqX0KrKtpLqypVVasq0F6rKktoqyrHcasqQnurKr2Eqyo4jqsqtJerKi+hqyqqqqsqJbSrKqC9qyocx6sql9CrKhLaqyqN46sqCe2rKoT2qyr//6sqAAAAQHsJAED2EgBAchwAQO0lAEBoLwBA4zgAQF9CAEDaSwBAVVUAQNBeAEBLaABAx3EAQEJ7AEC9hABAOI4AQLSXAEAvoQBAqqoAQCW0AECgvQBAHMcAQJfQAEAS2gBAjeMAQAntAECE9gBA//8AQAAAVVV7CVVV9hJVVXIcVVXtJVVVaC9VVeM4VVVfQlVV2ktVVVVVVVXQXlVVS2hVVcdxVVVCe1VVvYRVVTiOVVW0l1VVL6FVVaqqVVUltFVVoL1VVRzHVVWX0FVVEtpVVY3jVVUJ7VVVhPZVVf//VVUAAKpqewmqavYSqmpyHKpq7SWqamgvqmrjOKpqX0KqatpLqmpVVapq0F6qaktoqmrHcapqQnuqar2Eqmo4jqpqtJeqai+hqmqqqqpqJbSqaqC9qmocx6pql9CqahLaqmqN46pqCe2qaoT2qmr//6pqAAAAgHsJAID2EgCAchwAgO0lAIBoLwCA4zgAgF9CAIDaSwCAVVUAgNBeAIBLaACAx3EAgEJ7AIC9hACAOI4AgLSXAIAvoQCAqqoAgCW0AICgvQCAHMcAgJfQAIAS2gCAjeMAgAntAICE9gCA//8AgAAAVZV7CVWV9hJVlXIcVZXtJVWVaC9VleM4VZVfQlWV2ktVlVVVVZXQXlWVS2hVlcdxVZVCe1WVvYRVlTiOVZW0l1WVL6FVlaqqVZUltFWVoL1VlRzHVZWX0FWVEtpVlY3jVZUJ7VWVhPZVlf//VZUAAKqqewmqqvYSqqpyHKqq7SWqqmgvqqrjOKqqX0KqqtpLqqpVVaqq0F6qqktoqqrHcaqqQnuqqr2Eqqo4jqqqtJeqqi+hqqqqqqqqJbSqqqC9qqocx6qql9CqqhLaqqqN46qqCe2qqoT2qqr//6qqAAD/v3sJ/7/2Ev+/chz/v+0l/79oL/+/4zj/v19C/7/aS/+/VVX/v9Be/79LaP+/x3H/v0J7/7+9hP+/OI7/v7SX/78vof+/qqr/vyW0/7+gvf+/HMf/v5fQ/78S2v+/jeP/vwnt/7+E9v+/////vwAAVdV7CVXV9hJV1XIcVdXtJVXVaC9V1eM4VdVfQlXV2ktV1VVVVdXQXlXVS2hV1cdxVdVCe1XVvYRV1TiOVdW0l1XVL6FV1aqqVdUltFXVoL1V1RzHVdWX0FXVEtpV1Y3jVdUJ7VXVhPZV1f//VdUAAKrqewmq6vYSqupyHKrq7SWq6mgvqurjOKrqX0Kq6tpLqupVVarq0F6q6ktoqurHcarqQnuq6r2Equo4jqrqtJeq6i+hquqqqqrqJbSq6qC9quocx6rql9Cq6hLaquqN46rqCe2q6oT2qur//6rqAAD//3sJ///2Ev//chz//+0l//9oL///4zj//19C///aS///VVX//9Be//9LaP//x3H//0J7//+9hP//OI7//7SX//8vof//qqr//yW0//+gvf//HMf//5fQ//8S2v//jeP//wnt//+E9v///////w==","tri":"AAABABwAAQAdABwAAQACAB0AAgAeAB0AAgADAB4AAwAfAB4AAwAEAB8ABAAgAB8ABAAFACAABQAhACAABQAGACEABgAiACEABgAHACIABwAjACIABwAIACMACAAkACMACAAJACQACQAlACQACQAKACUACgAmACUACgALACYACwAnACYACwAMACcADAAoACcADAANACgADQApACgADQAOACkADgAqACkADgAPACoADwArACoADwAQACsAEAAsACsAEAARACwAEQAtACwAEQASAC0AEgAuAC0AEgATAC4AEwAvAC4AEwAUAC8AFAAwAC8AFAAVADAAFQAxADAAFQAWADEAFgAyADEAFgAXADIAFwAzADIAFwAYADMAGAA0ADMAGAAZADQAGQA1ADQAGQAaADUAGgA2ADUAGgAbADYAGwA3ADYAGwAAADcAAAAcADcAHAAdADgAHQA5ADgAHQAeADkAHgA6ADkAHgAfADoAHwA7ADoAHwAgADsAIAA8ADsAIAAhADwAIQA9ADwAIQAiAD0AIgA+AD0AIgAjAD4AIwA/AD4AIwAkAD8AJABAAD8AJAAlAEAAJQBBAEAAJQAmAEEAJgBCAEEAJgAnAEIAJwBDAEIAJwAoAEMAKABEAEMAKAApAEQAKQBFAEQAKQAqAEUAKgBGAEUAKgArAEYAKwBHAEYAKwAsAEcALABIAEcALAAtAEgALQBJAEgALQAuAEkALgBKAEkALgAvAEoALwBLAEoALwAwAEsAMABMAEsAMAAxAEwAMQBNAEwAMQAyAE0AMgBOAE0AMgAzAE4AMwBPAE4AMwA0AE8ANABQAE8ANAA1AFAANQBRAFAANQA2AFEANgBSAFEANgA3AFIANwBTAFIANwAcAFMAHAA4AFMAOAA5AFQAOQBVAFQAOQA6AFUAOgBWAFUAOgA7AFYAOwBXAFYAOwA8AFcAPABYAFcAPAA9AFgAPQBZAFgAPQA+AFkAPgBaAFkAPgA/AFoAPwBbAFoAPwBAAFsAQABcAFsAQABBAFwAQQBdAFwAQQBCAF0AQgBeAF0AQgBDAF4AQwBfAF4AQwBEAF8ARABgAF8ARABFAGAARQBhAGAARQBGAGEARgBiAGEARgBHAGIARwBjAGIARwBIAGMASABkAGMASABJAGQASQBlAGQASQBKAGUASgBmAGUASgBLAGYASwBnAGYASwBMAGcATABoAGcATABNAGgATQBpAGgATQBOAGkATgBqAGkATgBPAGoATwBrAGoATwBQAGsAUABsAGsAUABRAGwAUQBtAGwAUQBSAG0AUgBuAG0AUgBTAG4AUwBvAG4AUwA4AG8AOABUAG8AVABVAHAAVQBxAHAAVQBWAHEAVgByAHEAVgBXAHIAVwBzAHIAVwBYAHMAWAB0AHMAWABZAHQAWQB1AHQAWQBaAHUAWgB2AHUAWgBbAHYAWwB3AHYAWwBcAHcAXAB4AHcAXABdAHgAXQB5AHgAXQBeAHkAXgB6AHkAXgBfAHoAXwB7AHoAXwBgAHsAYAB8AHsAYABhAHwAYQB9AHwAYQBiAH0AYgB+AH0AYgBjAH4AYwB/AH4AYwBkAH8AZACAAH8AZABlAIAAZQCBAIAAZQBmAIEAZgCCAIEAZgBnAIIAZwCDAIIAZwBoAIMAaACEAIMAaABpAIQAaQCFAIQAaQBqAIUAagCGAIUAagBrAIYAawCHAIYAawBsAIcAbACIAIcAbABtAIgAbQCJAIgAbQBuAIkAbgCKAIkAbgBvAIoAbwCLAIoAbwBUAIsAVABwAIsAcABxAIwAcQCNAIwAcQByAI0AcgCOAI0AcgBzAI4AcwCPAI4AcwB0AI8AdACQAI8AdAB1AJAAdQCRAJAAdQB2AJEAdgCSAJEAdgB3AJIAdwCTAJIAdwB4AJMAeACUAJMAeAB5AJQAeQCVAJQAeQB6AJUAegCWAJUAegB7AJYAewCXAJYAewB8AJcAfACYAJcAfAB9AJgAfQCZAJgAfQB+AJkAfgCaAJkAfgB/AJoAfwCbAJoAfwCAAJsAgACcAJsAgACBAJwAgQCdAJwAgQCCAJ0AggCeAJ0AggCDAJ4AgwCfAJ4AgwCEAJ8AhACgAJ8AhACFAKAAhQChAKAAhQCGAKEAhgCiAKEAhgCHAKIAhwCjAKIAhwCIAKMAiACkAKMAiACJAKQAiQClAKQAiQCKAKUAigCmAKUAigCLAKYAiwCnAKYAiwBwAKcAcACMAKcAjACNAKgAjQCpAKgAjQCOAKkAjgCqAKkAjgCPAKoAjwCrAKoAjwCQAKsAkACsAKsAkACRAKwAkQCtAKwAkQCSAK0AkgCuAK0AkgCTAK4AkwCvAK4AkwCUAK8AlACwAK8AlACVALAAlQCxALAAlQCWALEAlgCyALEAlgCXALIAlwCzALIAlwCYALMAmAC0ALMAmACZALQAmQC1ALQAmQCaALUAmgC2ALUAmgCbALYAmwC3ALYAmwCcALcAnAC4ALcAnACdALgAnQC5ALgAnQCeALkAngC6ALkAngCfALoAnwC7ALoAnwCgALsAoAC8ALsAoAChALwAoQC9ALwAoQCiAL0AogC+AL0AogCjAL4AowC/AL4AowCkAL8ApADAAL8ApAClAMAApQDBAMAApQCmAMEApgDCAMEApgCnAMIApwDDAMIApwCMAMMAjACoAMMAqACpAMQAqQDFAMQAqQCqAMUAqgDGAMUAqgCrAMYAqwDHAMYAqwCsAMcArADIAMcArACtAMgArQDJAMgArQCuAMkArgDKAMkArgCvAMoArwDLAMoArwCwAMsAsADMAMsAsACxAMwAsQDNAMwAsQCyAM0AsgDOAM0AsgCzAM4AswDPAM4AswC0AM8AtADQAM8AtAC1ANAAtQDRANAAtQC2ANEAtgDSANEAtgC3ANIAtwDTANIAtwC4ANMAuADUANMAuAC5ANQAuQDVANQAuQC6ANUAugDWANUAugC7ANYAuwDXANYAuwC8ANcAvADYANcAvAC9ANgAvQDZANgAvQC+ANkAvgDaANkAvgC/ANoAvwDbANoAvwDAANsAwADcANsAwADBANwAwQDdANwAwQDCAN0AwgDeAN0AwgDDAN4AwwDfAN4AwwCoAN8AqADEAN8AxADFAOAAxQDhAOAAxQDGAOEAxgDiAOEAxgDHAOIAxwDjAOIAxwDIAOMAyADkAOMAyADJAOQAyQDlAOQAyQDKAOUAygDmAOUAygDLAOYAywDnAOYAywDMAOcAzADoAOcAzADNAOgAzQDpAOgAzQDOAOkAzgDqAOkAzgDPAOoAzwDrAOoAzwDQAOsA0ADsAOsA0ADRAOwA0QDtAOwA0QDSAO0A0gDuAO0A0gDTAO4A0wDvAO4A0wDUAO8A1ADwAO8A1ADVAPAA1QDxAPAA1QDWAPEA1gDyAPEA1gDXAPIA1wDzAPIA1wDYAPMA2AD0APMA2ADZAPQA2QD1APQA2QDaAPUA2gD2APUA2gDbAPYA2wD3APYA2wDcAPcA3AD4APcA3ADdAPgA3QD5APgA3QDeAPkA3gD6APkA3gDfAPoA3wD7APoA3wDEAPsAxADgAPsA4ADhAPwA4QD9APwA4QDiAP0A4gD+AP0A4gDjAP4A4wD/AP4A4wDkAP8A5AAAAf8A5ADlAAAB5QABAQAB5QDmAAEB5gACAQEB5gDnAAIB5wADAQIB5wDoAAMB6AAEAQMB6ADpAAQB6QAFAQQB6QDqAAUB6gAGAQUB6gDrAAYB6wAHAQYB6wDsAAcB7AAIAQcB7ADtAAgB7QAJAQgB7QDuAAkB7gAKAQkB7gDvAAoB7wALAQoB7wDwAAsB8AAMAQsB8ADxAAwB8QANAQwB8QDyAA0B8gAOAQ0B8gDzAA4B8wAPAQ4B8wD0AA8B9AAQAQ8B9AD1ABAB9QARARAB9QD2ABEB9gASAREB9gD3ABIB9wATARIB9wD4ABMB+AAUARMB+AD5ABQB+QAVARQB+QD6ABUB+gAWARUB+gD7ABYB+wAXARYB+wDgABcB4AD8ABcB/AD9ABgB/QAZARgB/QD+ABkB/gAaARkB/gD/ABoB/wAbARoB/wAAARsBAAEcARsBAAEBARwBAQEdARwBAQECAR0BAgEeAR0BAgEDAR4BAwEfAR4BAwEEAR8BBAEgAR8BBAEFASABBQEhASABBQEGASEBBgEiASEBBgEHASIBBwEjASIBBwEIASMBCAEkASMBCAEJASQBCQElASQBCQEKASUBCgEmASUBCgELASYBCwEnASYBCwEMAScBDAEoAScBDAENASgBDQEpASgBDQEOASkBDgEqASkBDgEPASoBDwErASoBDwEQASsBEAEsASsBEAERASwBEQEtASwBEQESAS0BEgEuAS0BEgETAS4BEwEvAS4BEwEUAS8BFAEwAS8BFAEVATABFQExATABFQEWATEBFgEyATEBFgEXATIBFwEzATIBFwH8ADMB/AAYATMBGAEZATQBGQE1ATQBGQEaATUBGgE2ATUBGgEbATYBGwE3ATYBGwEcATcBHAE4ATcBHAEdATgBHQE5ATgBHQEeATkBHgE6ATkBHgEfAToBHwE7AToBHwEgATsBIAE8ATsBIAEhATwBIQE9ATwBIQEiAT0BIgE+AT0BIgEjAT4BIwE/AT4BIwEkAT8BJAFAAT8BJAElAUABJQFBAUABJQEmAUEBJgFCAUEBJgEnAUIBJwFDAUIBJwEoAUMBKAFEAUMBKAEpAUQBKQFFAUQBKQEqAUUBKgFGAUUBKgErAUYBKwFHAUYBKwEsAUcBLAFIAUcBLAEtAUgBLQFJAUgBLQEuAUkBLgFKAUkBLgEvAUoBLwFLAUoBLwEwAUsBMAFMAUsBMAExAUwBMQFNAUwBMQEyAU0BMgFOAU0BMgEzAU4BMwFPAU4BMwEYAU8BGAE0AU8BNAE1AVABNQFRAVABNQE2AVEBNgFSAVEBNgE3AVIBNwFTAVIBNwE4AVMBOAFUAVMBOAE5AVQBOQFVAVQBOQE6AVUBOgFWAVUBOgE7AVYBOwFXAVYBOwE8AVcBPAFYAVcBPAE9AVgBPQFZAVgBPQE+AVkBPgFaAVkBPgE/AVoBPwFbAVoBPwFAAVsBQAFcAVsBQAFBAVwBQQFdAVwBQQFCAV0BQgFeAV0BQgFDAV4BQwFfAV4BQwFEAV8BRAFgAV8BRAFFAWABRQFhAWABRQFGAWEBRgFiAWEBRgFHAWIBRwFjAWIBRwFIAWMBSAFkAWMBSAFJAWQBSQFlAWQBSQFKAWUBSgFmAWUBSgFLAWYBSwFnAWYBSwFMAWcBTAFoAWcBTAFNAWgBTQFpAWgBTQFOAWkBTgFqAWkBTgFPAWoBTwFrAWoBTwE0AWsBNAFQAWsB","ao":"8/n9/v38+vj18u3k2tXc6fP4/P3+/v7+/fr28fT6/v79+/r39PDp39bV4Oz0+fz+/v7+/vz59PH1+/7+/fz69/Pu5drS1ODs8/j8/v7//v78+PPx9/z+/v38+vfz7OLWztPg6vH3+/7////+/Pn08/r9//7+/fv48+zg08zS3ujv9vv+/////v369vb9/v///v78+fTs4NLM0t3l7fX7/v/////+/Pr6/v/////+/fr17eHTzdLb4+v1+/7//////v39/f///////v379u7i1M3R2uHr9fz+///////+/v/////////+/Pfw49TN0dnh6/X8/v///////////////////vz48OPVzdHZ4ez2/P7///////////////////79+fHk1c3R2eLt9/3+///////////////////+/fnw4tPM0tvk7/n9/////////////////////vz37NzOzdXe6PP7/v///////////w=="},{"rings":12,"around":28,"pos":"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","hang":"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","uv":"AAAAAHsJAAD2EgAAchwAAO0lAABoLwAA4zgAAF9CAADaSwAAVVUAANBeAABLaAAAx3EAAEJ7AAC9hAAAOI4AALSXAAAvoQAAqqoAACW0AACgvQAAHMcAAJfQAAAS2gAAjeMAAAntAACE9gAA//8AAAAAVRV7CVUV9hJVFXIcVRXtJVUVaC9VFeM4VRVfQlUV2ktVFVVVVRXQXlUVS2hVFcdxVRVCe1UVvYRVFTiOVRW0l1UVL6FVFaqqVRUltFUVoL1VFRzHVRWX0FUVEtpVFY3jVRUJ7VUVhPZVFf//VRUAAKsqewmrKvYSqypyHKsq7SWrKmgvqyrjOKsqX0KrKtpLqypVVasq0F6rKktoqyrHcasqQnurKr2Eqyo4jqsqtJerKi+hqyqqqqsqJbSrKqC9qyocx6sql9CrKhLaqyqN46sqCe2rKoT2qyr//6sqAAAAQHsJAED2EgBAchwAQO0lAEBoLwBA4zgAQF9CAEDaSwBAVVUAQNBeAEBLaABAx3EAQEJ7AEC9hABAOI4AQLSXAEAvoQBAqqoAQCW0AECgvQBAHMcAQJfQAEAS2gBAjeMAQAntAECE9gBA//8AQAAAVVV7CVVV9hJVVXIcVVXtJVVVaC9VVeM4VVVfQlVV2ktVVVVVVVXQXlVVS2hVVcdxVVVCe1VVvYRVVTiOVVW0l1VVL6FVVaqqVVUltFVVoL1VVRzHVVWX0FVVEtpVVY3jVVUJ7VVVhPZVVf//VVUAAKpqewmqavYSqmpyHKpq7SWqamgvqmrjOKpqX0KqatpLqmpVVapq0F6qaktoqmrHcapqQnuqar2Eqmo4jqpqtJeqai+hqmqqqqpqJbSqaqC9qmocx6pql9CqahLaqmqN46pqCe2qaoT2qmr//6pqAAAAgHsJAID2EgCAchwAgO0lAIBoLwCA4zgAgF9CAIDaSwCAVVUAgNBeAIBLaACAx3EAgEJ7AIC9hACAOI4AgLSXAIAvoQCAqqoAgCW0AICgvQCAHMcAgJfQAIAS2gCAjeMAgAntAICE9gCA//8AgAAAVZV7CVWV9hJVlXIcVZXtJVWVaC9VleM4VZVfQlWV2ktVlVVVVZXQXlWVS2hVlcdxVZVCe1WVvYRVlTiOVZW0l1WVL6FVlaqqVZUltFWVoL1VlRzHVZWX0FWVEtpVlY3jVZUJ7VWVhPZVlf//VZUAAKqqewmqqvYSqqpyHKqq7SWqqmgvqqrjOKqqX0KqqtpLqqpVVaqq0F6qqktoqqrHcaqqQnuqqr2Eqqo4jqqqtJeqqi+hqqqqqqqqJbSqqqC9qqocx6qql9CqqhLaqqqN46qqCe2qqoT2qqr//6qqAAD/v3sJ/7/2Ev+/chz/v+0l/79oL/+/4zj/v19C/7/aS/+/VVX/v9Be/79LaP+/x3H/v0J7/7+9hP+/OI7/v7SX/78vof+/qqr/vyW0/7+gvf+/HMf/v5fQ/78S2v+/jeP/vwnt/7+E9v+/////vwAAVdV7CVXV9hJV1XIcVdXtJVXVaC9V1eM4VdVfQlXV2ktV1VVVVdXQXlXVS2hV1cdxVdVCe1XVvYRV1TiOVdW0l1XVL6FV1aqqVdUltFXVoL1V1RzHVdWX0FXVEtpV1Y3jVdUJ7VXVhPZV1f//VdUAAKrqewmq6vYSqupyHKrq7SWq6mgvqurjOKrqX0Kq6tpLqupVVarq0F6q6ktoqurHcarqQnuq6r2Equo4jqrqtJeq6i+hquqqqqrqJbSq6qC9quocx6rql9Cq6hLaquqN46rqCe2q6oT2qur//6rqAAD//3sJ///2Ev//chz//+0l//9oL///4zj//19C///aS///VVX//9Be//9LaP//x3H//0J7//+9hP//OI7//7SX//8vof//qqr//yW0//+gvf//HMf//5fQ//8S2v//jeP//wnt//+E9v///////w==","tri":"AAAcAAEAAQAcAB0AAQAdAAIAAgAdAB4AAgAeAAMAAwAeAB8AAwAfAAQABAAfACAABAAgAAUABQAgACEABQAhAAYABgAhACIABgAiAAcABwAiACMABwAjAAgACAAjACQACAAkAAkACQAkACUACQAlAAoACgAlACYACgAmAAsACwAmACcACwAnAAwADAAnACgADAAoAA0ADQAoACkADQApAA4ADgApACoADgAqAA8ADwAqACsADwArABAAEAArACwAEAAsABEAEQAsAC0AEQAtABIAEgAtAC4AEgAuABMAEwAuAC8AEwAvABQAFAAvADAAFAAwABUAFQAwADEAFQAxABYAFgAxADIAFgAyABcAFwAyADMAFwAzABgAGAAzADQAGAA0ABkAGQA0ADUAGQA1ABoAGgA1ADYAGgA2ABsAGwA2ADcAGwA3AAAAAAA3ABwAHAA4AB0AHQA4ADkAHQA5AB4AHgA5ADoAHgA6AB8AHwA6ADsAHwA7ACAAIAA7ADwAIAA8ACEAIQA8AD0AIQA9ACIAIgA9AD4AIgA+ACMAIwA+AD8AIwA/ACQAJAA/AEAAJABAACUAJQBAAEEAJQBBACYAJgBBAEIAJgBCACcAJwBCAEMAJwBDACgAKABDAEQAKABEACkAKQBEAEUAKQBFACoAKgBFAEYAKgBGACsAKwBGAEcAKwBHACwALABHAEgALABIAC0ALQBIAEkALQBJAC4ALgBJAEoALgBKAC8ALwBKAEsALwBLADAAMABLAEwAMABMADEAMQBMAE0AMQBNADIAMgBNAE4AMgBOADMAMwBOAE8AMwBPADQANABPAFAANABQADUANQBQAFEANQBRADYANgBRAFIANgBSADcANwBSAFMANwBTABwAHABTADgAOABUADkAOQBUAFUAOQBVADoAOgBVAFYAOgBWADsAOwBWAFcAOwBXADwAPABXAFgAPABYAD0APQBYAFkAPQBZAD4APgBZAFoAPgBaAD8APwBaAFsAPwBbAEAAQABbAFwAQABcAEEAQQBcAF0AQQBdAEIAQgBdAF4AQgBeAEMAQwBeAF8AQwBfAEQARABfAGAARABgAEUARQBgAGEARQBhAEYARgBhAGIARgBiAEcARwBiAGMARwBjAEgASABjAGQASABkAEkASQBkAGUASQBlAEoASgBlAGYASgBmAEsASwBmAGcASwBnAEwATABnAGgATABoAE0ATQBoAGkATQBpAE4ATgBpAGoATgBqAE8ATwBqAGsATwBrAFAAUABrAGwAUABsAFEAUQBsAG0AUQBtAFIAUgBtAG4AUgBuAFMAUwBuAG8AUwBvADgAOABvAFQAVABwAFUAVQBwAHEAVQBxAFYAVgBxAHIAVgByAFcAVwByAHMAVwBzAFgAWABzAHQAWAB0AFkAWQB0AHUAWQB1AFoAWgB1AHYAWgB2AFsAWwB2AHcAWwB3AFwAXAB3AHgAXAB4AF0AXQB4AHkAXQB5AF4AXgB5AHoAXgB6AF8AXwB6AHsAXwB7AGAAYAB7AHwAYAB8AGEAYQB8AH0AYQB9AGIAYgB9AH4AYgB+AGMAYwB+AH8AYwB/AGQAZAB/AIAAZACAAGUAZQCAAIEAZQCBAGYAZgCBAIIAZgCCAGcAZwCCAIMAZwCDAGgAaACDAIQAaACEAGkAaQCEAIUAaQCFAGoAagCFAIYAagCGAGsAawCGAIcAawCHAGwAbACHAIgAbACIAG0AbQCIAIkAbQCJAG4AbgCJAIoAbgCKAG8AbwCKAIsAbwCLAFQAVACLAHAAcACMAHEAcQCMAI0AcQCNAHIAcgCNAI4AcgCOAHMAcwCOAI8AcwCPAHQAdACPAJAAdACQAHUAdQCQAJEAdQCRAHYAdgCRAJIAdgCSAHcAdwCSAJMAdwCTAHgAeACTAJQAeACUAHkAeQCUAJUAeQCVAHoAegCVAJYAegCWAHsAewCWAJcAewCXAHwAfACXAJgAfACYAH0AfQCYAJkAfQCZAH4AfgCZAJoAfgCaAH8AfwCaAJsAfwCbAIAAgACbAJwAgACcAIEAgQCcAJ0AgQCdAIIAggCdAJ4AggCeAIMAgwCeAJ8AgwCfAIQAhACfAKAAhACgAIUAhQCgAKEAhQChAIYAhgChAKIAhgCiAIcAhwCiAKMAhwCjAIgAiACjAKQAiACkAIkAiQCkAKUAiQClAIoAigClAKYAigCmAIsAiwCmAKcAiwCnAHAAcACnAIwAjACoAI0AjQCoAKkAjQCpAI4AjgCpAKoAjgCqAI8AjwCqAKsAjwCrAJAAkACrAKwAkACsAJEAkQCsAK0AkQCtAJIAkgCtAK4AkgCuAJMAkwCuAK8AkwCvAJQAlACvALAAlACwAJUAlQCwALEAlQCxAJYAlgCxALIAlgCyAJcAlwCyALMAlwCzAJgAmACzALQAmAC0AJkAmQC0ALUAmQC1AJoAmgC1ALYAmgC2AJsAmwC2ALcAmwC3AJwAnAC3ALgAnAC4AJ0AnQC4ALkAnQC5AJ4AngC5ALoAngC6AJ8AnwC6ALsAnwC7AKAAoAC7ALwAoAC8AKEAoQC8AL0AoQC9AKIAogC9AL4AogC+AKMAowC+AL8AowC/AKQApAC/AMAApADAAKUApQDAAMEApQDBAKYApgDBAMIApgDCAKcApwDCAMMApwDDAIwAjADDAKgAqADEAKkAqQDEAMUAqQDFAKoAqgDFAMYAqgDGAKsAqwDGAMcAqwDHAKwArADHAMgArADIAK0ArQDIAMkArQDJAK4ArgDJAMoArgDKAK8ArwDKAMsArwDLALAAsADLAMwAsADMALEAsQDMAM0AsQDNALIAsgDNAM4AsgDOALMAswDOAM8AswDPALQAtADPANAAtADQALUAtQDQANEAtQDRALYAtgDRANIAtgDSALcAtwDSANMAtwDTALgAuADTANQAuADUALkAuQDUANUAuQDVALoAugDVANYAugDWALsAuwDWANcAuwDXALwAvADXANgAvADYAL0AvQDYANkAvQDZAL4AvgDZANoAvgDaAL8AvwDaANsAvwDbAMAAwADbANwAwADcAMEAwQDcAN0AwQDdAMIAwgDdAN4AwgDeAMMAwwDeAN8AwwDfAKgAqADfAMQAxADgAMUAxQDgAOEAxQDhAMYAxgDhAOIAxgDiAMcAxwDiAOMAxwDjAMgAyADjAOQAyADkAMkAyQDkAOUAyQDlAMoAygDlAOYAygDmAMsAywDmAOcAywDnAMwAzADnAOgAzADoAM0AzQDoAOkAzQDpAM4AzgDpAOoAzgDqAM8AzwDqAOsAzwDrANAA0ADrAOwA0ADsANEA0QDsAO0A0QDtANIA0gDtAO4A0gDuANMA0wDuAO8A0wDvANQA1ADvAPAA1ADwANUA1QDwAPEA1QDxANYA1gDxAPIA1gDyANcA1wDyAPMA1wDzANgA2ADzAPQA2AD0ANkA2QD0APUA2QD1ANoA2gD1APYA2gD2ANsA2wD2APcA2wD3ANwA3AD3APgA3AD4AN0A3QD4APkA3QD5AN4A3gD5APoA3gD6AN8A3wD6APsA3wD7AMQAxAD7AOAA4AD8AOEA4QD8AP0A4QD9AOIA4gD9AP4A4gD+AOMA4wD+AP8A4wD/AOQA5AD/AAAB5AAAAeUA5QAAAQEB5QABAeYA5gABAQIB5gACAecA5wACAQMB5wADAegA6AADAQQB6AAEAekA6QAEAQUB6QAFAeoA6gAFAQYB6gAGAesA6wAGAQcB6wAHAewA7AAHAQgB7AAIAe0A7QAIAQkB7QAJAe4A7gAJAQoB7gAKAe8A7wAKAQsB7wALAfAA8AALAQwB8AAMAfEA8QAMAQ0B8QANAfIA8gANAQ4B8gAOAfMA8wAOAQ8B8wAPAfQA9AAPARAB9AAQAfUA9QAQAREB9QARAfYA9gARARIB9gASAfcA9wASARMB9wATAfgA+AATARQB+AAUAfkA+QAUARUB+QAVAfoA+gAVARYB+gAWAfsA+wAWARcB+wAXAeAA4AAXAfwA/AAYAf0A/QAYARkB/QAZAf4A/gAZARoB/gAaAf8A/wAaARsB/wAbAQABAAEbARwBAAEcAQEBAQEcAR0BAQEdAQIBAgEdAR4BAgEeAQMBAwEeAR8BAwEfAQQBBAEfASABBAEgAQUBBQEgASEBBQEhAQYBBgEhASIBBgEiAQcBBwEiASMBBwEjAQgBCAEjASQBCAEkAQkBCQEkASUBCQElAQoBCgElASYBCgEmAQsBCwEmAScBCwEnAQwBDAEnASgBDAEoAQ0BDQEoASkBDQEpAQ4BDgEpASoBDgEqAQ8BDwEqASsBDwErARABEAErASwBEAEsAREBEQEsAS0BEQEtARIBEgEtAS4BEgEuARMBEwEuAS8BEwEvARQBFAEvATABFAEwARUBFQEwATEBFQExARYBFgExATIBFgEyARcBFwEyATMBFwEzAfwA/AAzARgBGAE0ARkBGQE0ATUBGQE1ARoBGgE1ATYBGgE2ARsBGwE2ATcBGwE3ARwBHAE3ATgBHAE4AR0BHQE4ATkBHQE5AR4BHgE5AToBHgE6AR8BHwE6ATsBHwE7ASABIAE7ATwBIAE8ASEBIQE8AT0BIQE9ASIBIgE9AT4BIgE+ASMBIwE+AT8BIwE/ASQBJAE/AUABJAFAASUBJQFAAUEBJQFBASYBJgFBAUIBJgFCAScBJwFCAUMBJwFDASgBKAFDAUQBKAFEASkBKQFEAUUBKQFFASoBKgFFAUYBKgFGASsBKwFGAUcBKwFHASwBLAFHAUgBLAFIAS0BLQFIAUkBLQFJAS4BLgFJAUoBLgFKAS8BLwFKAUsBLwFLATABMAFLAUwBMAFMATEBMQFMAU0BMQFNATIBMgFNAU4BMgFOATMBMwFOAU8BMwFPARgBGAFPATQBNAFQATUBNQFQAVEBNQFRATYBNgFRAVIBNgFSATcBNwFSAVMBNwFTATgBOAFTAVQBOAFUATkBOQFUAVUBOQFVAToBOgFVAVYBOgFWATsBOwFWAVcBOwFXATwBPAFXAVgBPAFYAT0BPQFYAVkBPQFZAT4BPgFZAVoBPgFaAT8BPwFaAVsBPwFbAUABQAFbAVwBQAFcAUEBQQFcAV0BQQFdAUIBQgFdAV4BQgFeAUMBQwFeAV8BQwFfAUQBRAFfAWABRAFgAUUBRQFgAWEBRQFhAUYBRgFhAWIBRgFiAUcBRwFiAWMBRwFjAUgBSAFjAWQBSAFkAUkBSQFkAWUBSQFlAUoBSgFlAWYBSgFmAUsBSwFmAWcBSwFnAUwBTAFnAWgBTAFoAU0BTQFoAWkBTQFpAU4BTgFpAWoBTgFqAU8BTwFqAWsBTwFrATQBNAFrAVAB","ao":"9fr9/v38+/n28+7m3Njh7vf7/f7////+/fv39Pb7/v79/Pr49fHr4dnZ5PD3+/3+/////v369vP2+/7+/fz6+PTv59zV2eTu9Pn8/v////78+fTy9/z+/v79+/jz7eTZ09ji6/L3+/7////+/Pn08/r9///+/fv49Ozi19LX4env9vv+/////v369vb9/v///v78+fTt4tfT1+Dn7vX7/v/////+/Pr6/v/////+/fr17uPY09fe5e31+/7//////v39/f///////v379u/k2NPW3OPs9vz+///////+/v/////////+/Pfw5NnT1dzj7fb8/v///////////////////vz48eXZ09Xb5O73/f7///////////////////79+fHl2NLV3OXv+P3////////////////////+/fnx5NfR1d3n8fn9/////////////////////vz37d7T0djh6/X8/v///////////w=="}],
    neck: [110,111,112,113,114,115,0,1,2,3,4,5,6,927,926,925,924,923,922,921,1036,1035,1034,1033,1032,1031],
  },
  crewneck: {
    pattern: {"half":0.24,"shoulderX":0.252,"shoulderDrop":0.1,"neckHalf":0.085,"neckFront":0.07,"neckBack":0.025,"armpit":0.32,"sleeve":{"top":0.66,"under":0.44,"cuff":0.36},"length":0.81,"open":{"chest":0.03,"hem":0.045,"sleeveRoot":0.03,"cuff":0.03}},
    front: {"pat":"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","pos":"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","tri":"BgAFAAcAbgBtAG8ARABDAHQARQBEAHQARgBFAHQARwBGAHQAQwBCAHUAdABDAHUAQgBBAHYAdQBCAHYAQQBAAHcAdgBBAHcAQAA/AHgAdwBAAHgAPwA+AHkAeAA/AHkAPgA9AHoAeQA+AHoAPQA8AHsAegA9AHsAPAA7AHwAewA8AHwAOwA6AH0AfAA7AH0AOgA5AH4AfQA6AH4AfgA5AH8AOQA4AIAAfwA5AIAAOAA3AIEAgAA4AIEANwA2AIIAgQA3AIIANgA1AIMAggA2AIMANQA0AIQAgwA1AIQANAAzAIUAhAA0AIUAMwAyAIYAhQAzAIYAMgAxAIcAhgAyAIcALwAuAIgAMAAvAIgAMQAwAIgAhwAxAIgALgAtAIgARwB0AIkAdAB1AIkAdQB2AIoAiQB1AIoAdgB3AIsAigB2AIsAdwB4AIwAiwB3AIwAeAB5AI0AjAB4AI0AeQB6AI4AjQB5AI4AegB7AI8AjgB6AI8AewB8AJAAjwB7AJAAfAB9AJEAkAB8AJEAfQB+AJIAkQB9AJIAfgB/AJMAkgB+AJMAfwCAAJQAkwB/AJQAgACBAJUAlACAAJUAgQCCAJYAlQCBAJYAggCDAJcAlgCCAJcAgwCEAJgAlwCDAJgAhACFAJkAmACEAJkAhQCGAJoAmQCFAJoAhgCHAJsAmgCGAJsAhwCIAJwAmwCHAJwAiAAtAJwASABHAJ0ARwCJAJ0AiQCKAJ4AnQCJAJ4AigCLAJ8AngCKAJ8AiwCMAKAAnwCLAKAAjACNAKEAoACMAKEAjQCOAKIAoQCNAKIAjgCPAKMAogCOAKMAjwCQAKQAowCPAKQAkACRAKUApACQAKUAkQCSAKYApQCRAKYAkgCTAKcApgCSAKcAkwCUAKgApwCTAKgAlACVAKkAqACUAKkAlQCWAKoAqQCVAKoAlgCXAKsAqgCWAKsAlwCYAKwAqwCXAKwAmACZAK0ArACYAK0AmQCaAK4ArQCZAK4AmgCbAK8ArgCaAK8AmwCcALAArwCbALAALQAsALEAnAAtALEAsACcALEASQBIALIASACdALIAnQCeALIAngCfALMAsgCeALMAnwCgALQAswCfALQAoAChALUAtACgALUAoQCiALYAtQChALYAogCjALcAtgCiALcAowCkALgAtwCjALgApAClALkAuACkALkApQCmALoAuQClALoApgCnALsAugCmALsApwCoALwAuwCnALwAqACpAL0AvACoAL0AqQCqAL4AvQCpAL4AqgCrAL8AvgCqAL8AqwCsAMAAvwCrAMAArACtAMEAwACsAMEArQCuAMIAwQCtAMIArgCvAMMAwgCuAMMArwCwAMQAwwCvAMQALAArAMUAsQAsAMUAsACxAMUAxACwAMUASgBJAMYASQCyAMYAsgCzAMcAxgCyAMcAswC0AMgAxwCzAMgAtAC1AMkAyAC0AMkAtQC2AMoAyQC1AMoAtgC3AMsAygC2AMsAtwC4AMwAywC3AMwAuAC5AM0AzAC4AM0AuQC6AM4AzQC5AM4AugC7AM8AzgC6AM8AuwC8ANAAzwC7ANAAvAC9ANEA0AC8ANEAvQC+ANIA0QC9ANIAvgC/ANMA0gC+ANMAvwDAANQA0wC/ANQAwADBANUA1ADAANUAwQDCANYA1QDBANYAwgDDANcA1gDCANcAwwDEANgA1wDDANgAxADFANkA2ADEANkAKwAqANoAxQArANoA2QDFANoASgDGANsAxgDHANsAxwDIANwA2wDHANwAyADJAN0A3ADIAN0AyQDKAN4A3QDJAN4AygDLAN8A3gDKAN8AywDMAOAA3wDLAOAAzADNAOEA4ADMAOEAzQDOAOIA4QDNAOIAzgDPAOMA4gDOAOMAzwDQAOQA4wDPAOQA0ADRAOUA5ADQAOUA0QDSAOYA5QDRAOYA0gDTAOcA5gDSAOcA0wDUAOgA5wDTAOgA1ADVAOkA6ADUAOkA1QDWAOoA6QDVAOoA1gDXAOsA6gDWAOsA1wDYAOwA6wDXAOwA2ADZAO0A7ADYAO0A2gAqAO4A2QDaAO4A7QDZAO4ASwBKAO8ASgDbAO8ATABLAO8A2wDcAPAA7wDbAPAA3ADdAPEA8ADcAPEA3QDeAPIA8QDdAPIA3gDfAPMA8gDeAPMA3wDgAPQA8wDfAPQA4ADhAPUA9ADgAPUA4QDiAPYA9QDhAPYA4gDjAPcA9gDiAPcA4wDkAPgA9wDjAPgA5ADlAPkA+ADkAPkA5QDmAPoA+QDlAPoA5gDnAPsA+gDmAPsA5wDoAPwA+wDnAPwA6ADpAP0A/ADoAP0A6QDqAP4A/QDpAP4A6gDrAP8A/gDqAP8A6wDsAAAB/wDrAAAB7ADtAAEBAAHsAAEB7QDuAAIBAQHtAAIBKgApAAMB7gAqAAMBKQAoAAMBAgHuAAMBTADvAAQB7wDwAAQB8ADxAAUBBAHwAAUB8QDyAAYBBQHxAAYB8gDzAAcBBgHyAAcB8wD0AAgBBwHzAAgB9AD1AAkBCAH0AAkB9QD2AAoBCQH1AAoB9gD3AAsBCgH2AAsB9wD4AAwBCwH3AAwB+AD5AA0BDAH4AA0B+QD6AA4BDQH5AA4B+gD7AA8BDgH6AA8B+wD8ABABDwH7ABAB/AD9ABEBEAH8ABEB/QD+ABIBEQH9ABIB/gD/ABMBEgH+ABMB/wAAARQBEwH/ABQBAAEBARUBFAEAARUBAQECARYBFQEBARYBAgEDARcBFgECARcBAwEoABcBTQBMABgBTAAEARgBTgBNABgBBAEFARkBGAEEARkBBQEGARoBGQEFARoBBgEHARsBGgEGARsBBwEIARwBGwEHARwBCAEJAR0BHAEIAR0BCQEKAR4BHQEJAR4BCgELAR8BHgEKAR8BCwEMASABHwELASABDAENASEBIAEMASEBDQEOASIBIQENASIBDgEPASMBIgEOASMBDwEQASQBIwEPASQBEAERASUBJAEQASUBEQESASYBJQERASYBEgETAScBJgESAScBEwEUASgBJwETASgBFAEVASkBKAEUASkBFQEWASoBKQEVASoBFgEXASsBKgEWASsBKAAnACwBFwEoACwBJwAmACwBKwEXASwBTgAYAS0BGAEZAS0BGQEaAS4BLQEZAS4BGgEbAS8BLgEaAS8BGwEcATABLwEbATABHAEdATEBMAEcATEBHQEeATIBMQEdATIBHgEfATMBMgEeATMBHwEgATQBMwEfATQBIAEhATUBNAEgATUBIQEiATYBNQEhATYBIgEjATcBNgEiATcBIwEkATgBNwEjATgBJAElATkBOAEkATkBJQEmAToBOQElAToBJgEnATsBOgEmATsBJwEoATwBOwEnATwBKAEpAT0BPAEoAT0BKQEqAT4BPQEpAT4BKgErAT8BPgEqAT8BKwEsAUABPwErAUABLAEmAEABTwBOAEEBTgAtAUEBLQEuAUIBQQEtAUIBLgEvAUMBQgEuAUMBLwEwAUQBQwEvAUQBMAExAUUBRAEwAUUBMQEyAUYBRQExAUYBMgEzAUcBRgEyAUcBMwE0AUgBRwEzAUgBNAE1AUkBSAE0AUkBNQE2AUoBSQE1AUoBNgE3AUsBSgE2AUsBNwE4AUwBSwE3AUwBOAE5AU0BTAE4AU0BOQE6AU4BTQE5AU4BOgE7AU8BTgE6AU8BOwE8AVABTwE7AVABPAE9AVEBUAE8AVEBPQE+AVIBUQE9AVIBPgE/AVMBUgE+AVMBPwFAAVQBUwE/AVQBJgAlAFUBQAEmAFUBVAFAAVUBUABPAFYBTwBBAVYBQQFCAVYBQgFDAVcBVgFCAVcBQwFEAVgBVwFDAVgBRAFFAVkBWAFEAVkBRQFGAVoBWQFFAVoBRgFHAVsBWgFGAVsBRwFIAVwBWwFHAVwBSAFJAV0BXAFIAV0BSQFKAV4BXQFJAV4BSgFLAV8BXgFKAV8BSwFMAWABXwFLAWABTAFNAWEBYAFMAWEBTQFOAWIBYQFNAWIBTgFPAWMBYgFOAWMBTwFQAWQBYwFPAWQBUAFRAWUBZAFQAWUBUQFSAWYBZQFRAWYBUgFTAWcBZgFSAWcBUwFUAWgBZwFTAWgBJQAkAGkBVQElAGkBVAFVAWkBaAFUAWkBUQBQAGoBUABWAWoBVgFXAWsBagFWAWsBVwFYAWwBawFXAWwBWAFZAW0BbAFYAW0BWQFaAW4BbQFZAW4BWgFbAW8BbgFaAW8BWwFcAXABbwFbAXABXAFdAXEBcAFcAXEBXQFeAXIBcQFdAXIBXgFfAXMBcgFeAXMBXwFgAXQBcwFfAXQBYAFhAXUBdAFgAXUBYQFiAXYBdQFhAXYBYgFjAXcBdgFiAXcBYwFkAXgBdwFjAXgBZAFlAXkBeAFkAXkBZQFmAXoBeQFlAXoBZgFnAXsBegFmAXsBZwFoAXwBewFnAXwBaAFpAX0BfAFoAX0BJAAjAH4BaQEkAH4BfQFpAX4BUQBqAX8BagFrAX8BawFsAYABfwFrAYABbAFtAYEBgAFsAYEBbQFuAYIBgQFtAYIBbgFvAYMBggFuAYMBbwFwAYQBgwFvAYQBcAFxAYUBhAFwAYUBcQFyAYYBhQFxAYYBcgFzAYcBhgFyAYcBcwF0AYgBhwFzAYgBdAF1AYkBiAF0AYkBdQF2AYoBiQF1AYoBdgF3AYsBigF2AYsBdwF4AYwBiwF3AYwBeAF5AY0BjAF4AY0BeQF6AY4BjQF5AY4BegF7AY8BjgF6AY8BewF8AZABjwF7AZABfAF9AZEBkAF8AZEBfgEjAJIBfQF+AZIBkQF9AZIBUgBRAJMBUQB/AZMBUwBSAJMBfwGAAZQBkwF/AZQBgAGBAZUBlAGAAZUBgQGCAZYBlQGBAZYBggGDAZcBlgGCAZcBgwGEAZgBlwGDAZgBhAGFAZkBmAGEAZkBhQGGAZoBmQGFAZoBhgGHAZsBmgGGAZsBhwGIAZwBmwGHAZwBiAGJAZ0BnAGIAZ0BiQGKAZ4BnQGJAZ4BigGLAZ8BngGKAZ8BiwGMAaABnwGLAaABjAGNAaEBoAGMAaEBjQGOAaIBoQGNAaIBjgGPAaMBogGOAaMBjwGQAaQBowGPAaQBkAGRAaUBpAGQAaUBkQGSAaYBpQGRAaYBIwAiAKcBkgEjAKcBIgAhAKcBpgGSAacBUwCTAagBkwGUAagBlAGVAakBqAGUAakBlQGWAaoBqQGVAaoBlgGXAasBqgGWAasBlwGYAawBqwGXAawBmAGZAa0BrAGYAa0BmQGaAa4BrQGZAa4BmgGbAa8BrgGaAa8BmwGcAbABrwGbAbABnAGdAbEBsAGcAbEBnQGeAbIBsQGdAbIBngGfAbMBsgGeAbMBnwGgAbQBswGfAbQBoAGhAbUBtAGgAbUBoQGiAbYBtQGhAbYBogGjAbcBtgGiAbcBowGkAbgBtwGjAbgBpAGlAbkBuAGkAbkBpQGmAboBuQGlAboBpgGnAbsBugGmAbsBpwEhALsBVABTALwBUwCoAbwBVQBUALwBqAGpAb0BvAGoAb0BqQGqAb4BvQGpAb4BqgGrAb8BvgGqAb8BqwGsAcABvwGrAcABrAGtAcEBwAGsAcEBrQGuAcIBwQGtAcIBrgGvAcMBwgGuAcMBrwGwAcQBwwGvAcQBsAGxAcUBxAGwAcUBsQGyAcYBxQGxAcYBsgGzAccBxgGyAccBswG0AcgBxwGzAcgBtAG1AckByAG0AckBtQG2AcoByQG1AcoBtgG3AcsBygG2AcsBtwG4AcwBywG3AcwBuAG5Ac0BzAG4Ac0BuQG6Ac4BzQG5Ac4BugG7Ac8BzgG6Ac8BIQAgANABuwEhANABIAAfANABzwG7AdABVQC8AdEBvAG9AdEBvQG+AdIB0QG9AdIBvgG/AdMB0gG+AdMBvwHAAdQB0wG/AdQBwAHBAdUB1AHAAdUBwQHCAdYB1QHBAdYBwgHDAdcB1gHCAdcBwwHEAdgB1wHDAdgBxAHFAdkB2AHEAdkBxQHGAdoB2QHFAdoBxgHHAdsB2gHGAdsBxwHIAdwB2wHHAdwByAHJAd0B3AHIAd0ByQHKAd4B3QHJAd4BygHLAd8B3gHKAd8BywHMAeAB3wHLAeABzAHNAeEB4AHMAeEBzQHOAeIB4QHNAeIBzgHPAeMB4gHOAeMBzwHQAeQB4wHPAeQB0AEfAOQBVgBVAOUBVQDRAeUB0QHSAeYB5QHRAeYB0gHTAecB5gHSAecB0wHUAegB5wHTAegB1AHVAekB6AHUAekB1QHWAeoB6QHVAeoB1gHXAesB6gHWAesB1wHYAewB6wHXAewB2AHZAe0B7AHYAe0B2QHaAe4B7QHZAe4B2gHbAe8B7gHaAe8B2wHcAfAB7wHbAfAB3AHdAfEB8AHcAfEB3QHeAfIB8QHdAfIB3gHfAfMB8gHeAfMB3wHgAfQB8wHfAfQB4AHhAfUB9AHgAfUB4QHiAfYB9QHhAfYB4gHjAfcB9gHiAfcB4wHkAfgB9wHjAfgBHwAeAPkB5AEfAPkB+AHkAfkBVwBWAPoBVgDlAfoB5QHmAfoB5gHnAfsB+gHmAfsB5wHoAfwB+wHnAfwB6AHpAf0B/AHoAf0B6QHqAf4B/QHpAf4B6gHrAf8B/gHqAf8B6wHsAQAC/wHrAQAC7AHtAQECAALsAQEC7QHuAQICAQLtAQIC7gHvAQMCAgLuAQMC7wHwAQQCAwLvAQQC8AHxAQUCBALwAQUC8QHyAQYCBQLxAQYC8gHzAQcCBgLyAQcC8wH0AQgCBwLzAQgC9AH1AQkCCAL0AQkC9QH2AQoCCQL1AQoC9gH3AQsCCgL2AQsC9wH4AQwCCwL3AQwCHgAdAA0C+QEeAA0C+AH5AQ0CDAL4AQ0CWABXAA4CVwD6AQ4C+gH7AQ8CDgL6AQ8C+wH8ARACDwL7ARAC/AH9ARECEAL8AREC/QH+ARICEQL9ARIC/gH/ARMCEgL+ARMC/wEAAhQCEwL/ARQCAAIBAhUCFAIAAhUCAQICAhYCFQIBAhYCAgIDAhcCFgICAhcCAwIEAhgCFwIDAhgCBAIFAhkCGAIEAhkCBQIGAhoCGQIFAhoCBgIHAhsCGgIGAhsCBwIIAhwCGwIHAhwCCAIJAh0CHAIIAh0CCQIKAh4CHQIJAh4CCgILAh8CHgIKAh8CCwIMAiACHwILAiACDAINAiECIAIMAiECHQAcACICDQIdACICIQINAiICWAAOAiMCDgIPAiMCDwIQAiQCIwIPAiQCEAIRAiUCJAIQAiUCEQISAiYCJQIRAiYCEgITAicCJgISAicCEwIUAigCJwITAigCFAIVAikCKAIUAikCFQIWAioCKQIVAioCFgIXAisCKgIWAisCFwIYAiwCKwIXAiwCGAIZAi0CLAIYAi0CGQIaAi4CLQIZAi4CGgIbAi8CLgIaAi8CGwIcAjACLwIbAjACHAIdAjECMAIcAjECHQIeAjICMQIdAjICHgIfAjMCMgIeAjMCHwIgAjQCMwIfAjQCIAIhAjUCNAIgAjUCIgIcADYCIQIiAjYCNQIhAjYCWQBYADcCWAAjAjcCWgBZADcCIwIkAjgCNwIjAjgCJAIlAjkCOAIkAjkCJQImAjoCOQIlAjoCJgInAjsCOgImAjsCJwIoAjwCOwInAjwCKAIpAj0CPAIoAj0CKQIqAj4CPQIpAj4CKgIrAj8CPgIqAj8CKwIsAkACPwIrAkACLAItAkECQAIsAkECLQIuAkICQQItAkICLgIvAkMCQgIuAkMCLwIwAkQCQwIvAkQCMAIxAkUCRAIwAkUCMQIyAkYCRQIxAkYCMgIzAkcCRgIyAkcCMwI0AkgCRwIzAkgCNAI1AkkCSAI0AkkCNQI2AkoCSQI1AkoCHAAbAEsCNgIcAEsCGwAaAEsCSgI2AksCWgA3AkwCNwI4AkwCOAI5Ak0CTAI4Ak0COQI6Ak4CTQI5Ak4COgI7Ak8CTgI6Ak8COwI8AlACTwI7AlACPAI9AlECUAI8AlECPQI+AlICUQI9AlICPgI/AlMCUgI+AlMCPwJAAlQCUwI/AlQCQAJBAlUCVAJAAlUCQQJCAlYCVQJBAlYCQgJDAlcCVgJCAlcCQwJEAlgCVwJDAlgCRAJFAlkCWAJEAlkCRQJGAloCWQJFAloCRgJHAlsCWgJGAlsCRwJIAlwCWwJHAlwCSAJJAl0CXAJIAl0CSQJKAl4CXQJJAl4CSgJLAl8CXgJKAl8CSwIaAF8CWwBaAGACWgBMAmACXABbAGACTAJNAmECYAJMAmECTQJOAmICYQJNAmICTgJPAmMCYgJOAmMCTwJQAmQCYwJPAmQCUAJRAmUCZAJQAmUCUQJSAmYCZQJRAmYCUgJTAmcCZgJSAmcCUwJUAmgCZwJTAmgCVAJVAmkCaAJUAmkCVQJWAmoCaQJVAmoCVgJXAmsCagJWAmsCVwJYAmwCawJXAmwCWAJZAm0CbAJYAm0CWQJaAm4CbQJZAm4CWgJbAm8CbgJaAm8CWwJcAnACbwJbAnACXAJdAnECcAJcAnECXQJeAnICcQJdAnICXgJfAnMCcgJeAnMCGgAZAHQCXwIaAHQCcwJfAnQCXABgAnUCYAJhAnUCYQJiAnYCdQJhAnYCYgJjAncCdgJiAncCYwJkAngCdwJjAngCZAJlAnkCeAJkAnkCZQJmAnoCeQJlAnoCZgJnAnsCegJmAnsCZwJoAnwCewJnAnwCaAJpAn0CfAJoAn0CaQJqAn4CfQJpAn4CagJrAn8CfgJqAn8CawJsAoACfwJrAoACbAJtAoECgAJsAoECbQJuAoICgQJtAoICbgJvAoMCggJuAoMCbwJwAoQCgwJvAoQCcAJxAoUChAJwAoUCcQJyAoYChQJxAoYCcgJzAocChgJyAocCGQAYAIgCdAIZAIgCcwJ0AogChwJzAogCXQBcAIkCXAB1AokCdQJ2AooCiQJ1AooCdgJ3AosCigJ2AosCdwJ4AowCiwJ3AowCeAJ5Ao0CjAJ4Ao0CeQJ6Ao4CjQJ5Ao4CegJ7Ao8CjgJ6Ao8CewJ8ApACjwJ7ApACfAJ9ApECkAJ8ApECfQJ+ApICkQJ9ApICfgJ/ApMCkgJ+ApMCfwKAApQCkwJ/ApQCgAKBApUClAKAApUCgQKCApYClQKBApYCggKDApcClgKCApcCgwKEApgClwKDApgChAKFApkCmAKEApkChQKGApoCmQKFApoChgKHApsCmgKGApsChwKIApwCmwKHApwCGAAXAJ0CiAIYAJ0CnAKIAp0CXgBdAJ4CXQCJAp4CiQKKAp8CngKJAp8CigKLAqACnwKKAqACiwKMAqECoAKLAqECjAKNAqICoQKMAqICjQKOAqMCogKNAqMCjgKPAqQCowKOAqQCjwKQAqUCpAKPAqUCkAKRAqYCpQKQAqYCkQKSAqcCpgKRAqcCkgKTAqgCpwKSAqgCkwKUAqkCqAKTAqkClAKVAqoCqQKUAqoClQKWAqsCqgKVAqsClgKXAqwCqwKWAqwClwKYAq0CrAKXAq0CmAKZAq4CrQKYAq4CmQKaAq8CrgKZAq8CmgKbArACrwKaArACmwKcArECsAKbArECnAKdArICsQKcArICFwAWALMCnQIXALMCsgKdArMCXwBeALQCXgCeArQCngKfArQCnwKgArUCtAKfArUCoAKhArYCtQKgArYCoQKiArcCtgKhArcCogKjArgCtwKiArgCowKkArkCuAKjArkCpAKlAroCuQKkAroCpQKmArsCugKlArsCpgKnArwCuwKmArwCpwKoAr0CvAKnAr0CqAKpAr4CvQKoAr4CqQKqAr8CvgKpAr8CqgKrAsACvwKqAsACqwKsAsECwAKrAsECrAKtAsICwQKsAsICrQKuAsMCwgKtAsMCrgKvAsQCwwKuAsQCrwKwAsUCxAKvAsUCsAKxAsYCxQKwAsYCsQKyAscCxgKxAscCFgAVAMgCswIWAMgCsgKzAsgCxwKyAsgCYABfAMkCXwC0AskCtAK1AsoCyQK0AsoCtQK2AssCygK1AssCtgK3AswCywK2AswCtwK4As0CzAK3As0CuAK5As4CzQK4As4CuQK6As8CzgK5As8CugK7AtACzwK6AtACuwK8AtEC0AK7AtECvAK9AtIC0QK8AtICvQK+AtMC0gK9AtMCvgK/AtQC0wK+AtQCvwLAAtUC1AK/AtUCwALBAtYC1QLAAtYCwQLCAtcC1gLBAtcCwgLDAtgC1wLCAtgCwwLEAtkC2ALDAtkCxALFAtoC2QLEAtoCxQLGAtsC2gLFAtsCxgLHAtwC2wLGAtwCxwLIAt0C3ALHAt0CFQAUAN4CyAIVAN4C3QLIAt4CYQBgAN8CYADJAt8CyQLKAt8CygLLAuAC3wLKAuACywLMAuEC4ALLAuECzALNAuIC4QLMAuICzQLOAuMC4gLNAuMCzgLPAuQC4wLOAuQCzwLQAuUC5ALPAuUC0ALRAuYC5QLQAuYC0QLSAucC5gLRAucC0gLTAugC5wLSAugC0wLUAukC6ALTAukC1ALVAuoC6QLUAuoC1QLWAusC6gLVAusC1gLXAuwC6wLWAuwC1wLYAu0C7ALXAu0C2ALZAu4C7QLYAu4C2QLaAu8C7gLZAu8C2gLbAvAC7wLaAvAC2wLcAvEC8ALbAvEC3ALdAvIC8QLcAvICFAATAPMC3gIUAPMC3QLeAvMC8gLdAvMCYgBhAPQCYQDfAvQC3wLgAvUC9ALfAvUC4ALhAvYC9QLgAvYC4QLiAvcC9gLhAvcC4gLjAvgC9wLiAvgC4wLkAvkC+ALjAvkC5ALlAvoC+QLkAvoC5QLmAvsC+gLlAvsC5gLnAvwC+wLmAvwC5wLoAv0C/ALnAv0C6ALpAv4C/QLoAv4C6QLqAv8C/gLpAv8C6gLrAgAD/wLqAgAD6wLsAgEDAAPrAgED7ALtAgIDAQPsAgID7QLuAgMDAgPtAgMD7gLvAgQDAwPuAgQD7wLwAgUDBAPvAgUD8ALxAgYDBQPwAgYD8QLyAgcDBgPxAgcD8gLzAggDBwPyAggDEwASAAkD8wITAAkDCAPzAgkDYgD0AgoD9AL1AgoD9QL2AgsDCgP1AgsD9gL3AgwDCwP2AgwD9wL4Ag0DDAP3Ag0D+AL5Ag4DDQP4Ag4D+QL6Ag8DDgP5Ag8D+gL7AhADDwP6AhAD+wL8AhEDEAP7AhED/AL9AhIDEQP8AhID/QL+AhMDEgP9AhMD/gL/AhQDEwP+AhQD/wIAAxUDFAP/AhUDAAMBAxYDFQMAAxYDAQMCAxcDFgMBAxcDAgMDAxgDFwMCAxgDAwMEAxkDGAMDAxkDBAMFAxoDGQMEAxoDBQMGAxsDGgMFAxsDBgMHAxwDGwMGAxwDBwMIAx0DHAMHAx0DCQMSAB4DCAMJAx4DHQMIAx4DYwBiAB8DYgAKAx8DZABjAB8DCgMLAyADHwMKAyADCwMMAyEDIAMLAyEDDAMNAyIDIQMMAyIDDQMOAyMDIgMNAyMDDgMPAyQDIwMOAyQDDwMQAyUDJAMPAyUDEAMRAyYDJQMQAyYDEQMSAycDJgMRAycDEgMTAygDJwMSAygDEwMUAykDKAMTAykDFAMVAyoDKQMUAyoDFQMWAysDKgMVAysDFgMXAywDKwMWAywDFwMYAy0DLAMXAy0DGAMZAy4DLQMYAy4DGQMaAy8DLgMZAy8DGgMbAzADLwMaAzADGwMcAzEDMAMbAzEDHAMdAzIDMQMcAzIDHQMeAzMDMgMdAzMDEgARADQDHgMSADQDEQAQADQDMwMeAzQDZAAfAzUDHwMgAzUDIAMhAzYDNQMgAzYDIQMiAzcDNgMhAzcDIgMjAzgDNwMiAzgDIwMkAzkDOAMjAzkDJAMlAzoDOQMkAzoDJQMmAzsDOgMlAzsDJgMnAzwDOwMmAzwDJwMoAz0DPAMnAz0DKAMpAz4DPQMoAz4DKQMqAz8DPgMpAz8DKgMrA0ADPwMqA0ADKwMsA0EDQAMrA0EDLAMtA0IDQQMsA0IDLQMuA0MDQgMtA0MDLgMvA0QDQwMuA0QDLwMwA0UDRAMvA0UDMAMxA0YDRQMwA0YDMQMyA0cDRgMxA0cDMgMzA0gDRwMyA0gDMwM0A0kDSAMzA0kDNAMQAEkDZQBkAEoDZgBlAEoDZAA1A0oDNQM2A0sDSgM1A0sDNgM3A0wDSwM2A0wDNwM4A00DTAM3A00DOAM5A04DTQM4A04DOQM6A08DTgM5A08DOgM7A1ADTwM6A1ADOwM8A1EDUAM7A1EDPAM9A1IDUQM8A1IDPQM+A1MDUgM9A1MDPgM/A1QDUwM+A1QDPwNAA1UDVAM/A1UDQANBA1YDVQNAA1YDQQNCA1cDVgNBA1cDQgNDA1gDVwNCA1gDQwNEA1kDWANDA1kDRANFA1oDWQNEA1oDRQNGA1sDWgNFA1sDRgNHA1wDWwNGA1wDRwNIA10DXANHA10DSANJA14DXQNIA14DDwAOAF8DDgBeA18DEAAPAF8DSQMQAF8DXgNJA18DZwBmAGADZgBKA2ADSgNLA2ADaABnAGEDSwNMA2EDYANLA2EDZwBgA2EDTANNA2IDYQNMA2IDTQNOA2MDYgNNA2MDTgNPA2QDYwNOA2QDTwNQA2UDZANPA2UDUANRA2YDZQNQA2YDUQNSA2cDZgNRA2cDUgNTA2gDZwNSA2gDAABzAGkDUwNUA2kDaANTA2kDcwBoA2kDVANVA2oDaQNUA2oDAABpA2oDAQAAAGsDAABqA2sDVQNWA2sDagNVA2sDVgNXA2wDawNWA2wDVwNYA20DbANXA20DWANZA24DbQNYA24DWQNaA28DbgNZA28DWgNbA3ADbwNaA3ADWwNcA3EDcANbA3EDXANdA3IDcQNcA3IDDgANAHMDXgMOAHMDXQNeA3MDcgNdA3MDaQBoAHQDaABhA3QDYQNiA3QDYgNjA3UDdANiA3UDaQB0A3UDYwNkA3YDdQNjA3YDZANlA3cDdgNkA3cDZQNmA3gDdwNlA3gDZgNnA3kDeANmA3kDcwByAHoDaANzAHoDZwNoA3oDcgBxAHoDcQB5A3oDeQNnA3oDAgABAHsDAQBrA3sDawNsA3sDAwACAHwDbANtA3wDAgB7A3wDewNsA3wDbQNuA30DfANtA30DAwB8A30DbgNvA34DfQNuA34DbwNwA38DfgNvA38DcANxA4ADfwNwA4ADcQNyA4EDgANxA4EDDQAMAIIDcwMNAIIDcgNzA4IDDAALAIIDCwCBA4IDgQNyA4IDagBpAIMDaQB1A4MDawBqAIMDdQN2A4MDdgN3A4QDgwN2A4QDawCDA4QDdwN4A4UDhAN3A4UDcQBwAIYDeQNxAIYDeAN5A4YDhQN4A4YDBAADAIcDAwB9A4cDfQN+A4cDfgN/A4gDhwN+A4gDfwOAA4kDiAN/A4kDCwAKAIoDgQMLAIoDgAOBA4oDCgAJAIoDCQCJA4oDiQOAA4oDbABrAIsDawCEA4sDhAOFA4sDbQBsAIwDbACLA4wDbwBtAIwDcABvAIwDhgNwAIwDhQOGA4wDiwOFA4wDBQAEAI0DBACHA40DBwAFAI0DCAAHAI0DhwOIA40DCQAIAI4DiQMJAI4DiAOJA44DCACNA44DjQOIA44D","ao":"//////////////7+/v7+/v7+/fz69vHp3c3AtrSwrauqrK2vsbKztLi8xtbj7/X29vf4+vz+/////////////v37+ff39/Xx5djKwLq2tLKxr62sqautsLW2wcna6vL3+vz9/v7+/v3+/v7////////////29/n7/f7////////////+/fv49vXy9Pf6/f7///////////78+vbz8evs8fb6/f7//////////vz59e/q6eHm7vX6/f7////////+/fr07eTe1Nrk7/b7/v/////////9+/Xt4tfQzdjl8fj8/v////////789+/j1MnCy9rp9Pr9//////////368+jXx76/zuDv+Pz+/////////vz37d7KvLjC1ej0+v7//////////frz5tO/trnJ3u/4/P7////////+/Pfu3Me3tL/T6PT7/v/////////++/Tm0b2ztsfe8Pn9/v////////79+O/dxrWyvNPp9vz+//////////779ujSu7G0yOHz+v3+/////////v368uDGs6+92O75/P7//////////vz47da7r7TN6Pf8/v///////////vz25suzrsLf8/v9/v/////////+/fvz3cCuuNXu+f3+///////////+/fnt0rexyOX2/P7+//////////7+/PbkxrG62vH6/f7///////////79+vDYubjO6Pf8/v////////////789+fMt8Te8vv9/v///////////v368dzCvtTr+P3+/////////////vz36dK9zuP0+/7//////////////vvy4cvP3u/5/f7////////////+/fnt28zg7Pf8/v/////////////+/Pbq2+ft9fv+///////////////++/Tr5u/x9fr9///////////////+/fr07+319/r9/v///////////////v359vT5+fr9/v////////////////78+vj4+/v9/v/////////////////+/fv7/Pz9/v///////////////////v38/f3+/v////////////////////7+/f7+/v/////////////////////+/v7+/v///////////////////////v7+/v7//////////////////////v7+/v7+/////////////////////v7+/v///////////////v7+/////////v////8="},
    back: {"pat":"AABm/mgBdP64Ap3+2QPe/rYEM/9BBZb/cQUAAKEGSv/RB5T+AQne/TEKKP1hC3L8kQy8+8ENBvvxDlD6IRCa+RUQ8PcJEEf2+w/P9O4PWPPeDxLyzw/N8L4Pue+sD6buhg/k7FwPhetcDyDqXA+66FwPVedcD+/lXA+K5FwPJONcD7/hXA9Z4FwP9N5cD47dXA8p3FwPw9pcD17ZXA/511wPk9ZcDy7VXA/I01wPY9JcD/3QXA+Yz1wPMs5cD83MuA4pzD8NKczHCynMTgopzNUIKcxcBynM4wUpzGoEKczyAinMeQEpzAAAKcyH/inMDv0pzJb7Kcwd+inMpPgpzCv3Kcyy9SnMOfQpzMHyKcxI8SnMpPDNzKTwMs6k8JjPpPD90KTwY9Kk8MjTpPAu1aTwk9ak8PnXpPBe2aTww9qk8CncpPCO3aTw9N6k8FngpPC/4aTwJOOk8IrkpPDv5aTwVeek8LropPAg6qTwhet68OTsVPCm7kLwue8x8M3wIvAS8hLwWPMF8M/09+9H9uvv8Pff75r5D/FQ+j/yBvtv87z7n/Ry/M/1KP3/9t79L/iU/l/5Sv+P+gAAv/qW/0r7M/8n/N7+SP2d/pj+dP788f3NZPP9zc30/c019v3Nnvf9zQb5/c1v+v3N1/v9zT/9/c2o/v3NEAD9zXkB/c3hAv3NSgT9zbIF/c0bB/3Ngwj9zewJ/c1UC/3NvAz9zSUO/c2w8jXPGfQ1z4H1Nc/p9jXPUvg1z7r5Nc8j+zXPi/w1z/T9Nc9c/zXPxQA1zy0CNc+WAzXP/gQ1z2YGNc/PBzXPNwk1z6AKNc8IDDXPcQ01z/zxbtBk827QzfRu0DX2btCe927QBvlu0G/6btDX+27QP/1u0Kj+btAQAG7QeQFu0OECbtBKBG7QsgVu0BsHbtCDCG7Q7Alu0FQLbtC8DG7QJQ5u0LDyptEZ9KbRgfWm0en2ptFS+KbRuvmm0SP7ptGL/KbR9P2m0Vz/ptHFAKbRLQKm0ZYDptH+BKbRZgam0c8HptE3CabRoAqm0QgMptFxDabR/PHe0mTz3tLN9N7SNfbe0p733tIG+d7Sb/re0tf73tI//d7SqP7e0hAA3tJ5Ad7S4QLe0koE3tKyBd7SGwfe0oMI3tLsCd7SVAve0rwM3tIlDt7SsPIW1Bn0FtSB9RbU6fYW1FL4FtS6+RbUI/sW1Iv8FtT0/RbUXP8W1MUAFtQtAhbUlgMW1P4EFtRmBhbUzwcW1DcJFtSgChbUCAwW1HENFtT88U7VZPNO1c30TtU19k7VnvdO1Qb5TtVv+k7V1/tO1T/9TtWo/k7VEABO1XkBTtXhAk7VSgRO1bIFTtUbB07VgwhO1ewJTtVUC07VvAxO1SUOTtWw8obWGfSG1oH1htbp9obWUviG1rr5htYj+4bWi/yG1vT9htZc/4bWxQCG1i0ChtaWA4bW/gSG1mYGhtbPB4bWNwmG1qAKhtYIDIbWcQ2G1vzxvtdk877XzfS+1zX2vtee977XBvm+12/6vtfX+77XP/2+16j+vtcQAL7XeQG+1+ECvtdKBL7XsgW+1xsHvteDCL7X7Am+11QLvte8DL7XJQ6+17Dy99gZ9PfYgfX32On299hS+PfYuvn32CP799iL/PfY9P332Fz/99jFAPfYLQL32JYD99j+BPfYZgb32M8H99g3CffYoAr32AgM99hxDffY/PEv2mTzL9rN9C/aNfYv2p73L9oG+S/ab/ov2tf7L9o//S/aqP4v2hAAL9p5AS/a4QIv2koEL9qyBS/aGwcv2oMIL9rsCS/aVAsv2rwML9olDi/asPJn2xn0Z9uB9Wfb6fZn21L4Z9u6+WfbI/tn24v8Z9v0/WfbXP9n28UAZ9stAmfblgNn2/4EZ9tmBmfbzwdn2zcJZ9ugCmfbCAxn23ENZ9v88Z/cZPOf3M30n9w19p/cnvef3Ab5n9xv+p/c1/uf3D/9n9yo/p/cEACf3HkBn9zhAp/cSgSf3LIFn9wbB5/cgwif3OwJn9xUC5/cvAyf3CUOn9yw8tfdGfTX3YH1193p9tfdUvjX3br5190j+9fdi/zX3fT9191c/9fdxQDX3S0C192WA9fd/gTX3WYG193PB9fdNwnX3aAK190IDNfdcQ3X3fzxD99k8w/fzfQP3zX2D9+e9w/fBvkP32/6D9/X+w/fP/0P36j+D98QAA/feQEP3+ECD99KBA/fsgUP3xsHD9+DCA/f7AkP31QLD9+8DA/fJQ4P37DySOAZ9EjggfVI4On2SOBS+EjguvlI4CP7SOCL/Ejg9P1I4Fz/SODFAEjgLQJI4JYDSOD+BEjgZgZI4M8HSOA3CUjgoApI4AgMSOBxDUjg/PGA4WTzgOHN9IDhNfaA4Z73gOEG+YDhb/qA4df7gOE//YDhqP6A4RAAgOF5AYDh4QKA4UoEgOGyBYDhGweA4YMIgOHsCYDhVAuA4bwMgOElDoDhsPK44hn0uOKB9bji6fa44lL4uOK6+bjiI/u44ov8uOL0/bjiXP+44sUAuOItArjilgO44v4EuOJmBrjizwe44jcJuOKgCrjiCAy44nENuOL88fDjZPPw48308OM19vDjnvfw4wb58ONv+vDj1/vw4z/98OOo/vDjEADw43kB8OPhAvDjSgTw47IF8OMbB/Djgwjw4+wJ8ONUC/DjvAzw4yUO8OOw8ijlGfQo5YH1KOXp9ijlUvgo5br5KOUj+yjli/wo5fT9KOVc/yjlxQAo5S0CKOWWAyjl/gQo5WYGKOXPByjlNwko5aAKKOUIDCjlcQ0o5fzxYOZk82DmzfRg5jX2YOae92DmBvlg5m/6YObX+2DmP/1g5qj+YOYQAGDmeQFg5uECYOZKBGDmsgVg5hsHYOaDCGDm7Alg5lQLYOa8DGDmJQ5g5rDymOcZ9JjngfWY5+n2mOdS+JjnuvmY5yP7mOeL/Jjn9P2Y51z/mOfFAJjnLQKY55YDmOf+BJjnZgaY588HmOc3CZjnoAqY5wgMmOdxDZjn/PHR6GTz0ejN9NHoNfbR6J730egG+dHob/rR6Nf70eg//dHoqP7R6BAA0eh5AdHo4QLR6EoE0eiyBdHoGwfR6IMI0ejsCdHoVAvR6LwM0eglDtHosPIJ6hn0CeqB9Qnq6fYJ6lL4Ceq6+QnqI/sJ6ov8Cer0/QnqXP8J6sUACeotAgnqlgMJ6v4ECepmBgnqzwcJ6jcJCeqgCgnqCAwJ6nENCer88UHrZPNB6830Qes19kHrnvdB6wb5Qetv+kHr1/tB6z/9Qeuo/kHrEABB63kBQevhAkHrSgRB67IFQesbB0HrgwhB6+wJQetUC0HrvAxB6yUOQeuw8nnsGfR57IH1eezp9nnsUvh57Lr5eewj+3nsi/x57PT9eexc/3nsxQB57C0CeeyWA3ns/gR57GYGeezPB3nsNwl57KAKeewIDHnscQ157Pzxse1k87HtzfSx7TX2se2e97HtBvmx7W/6se3X+7HtP/2x7aj+se0QALHteQGx7eECse1KBLHtsgWx7RsHse2DCLHt7Amx7VQLse28DLHtJQ6x7Ujx6e6w8unuGfTp7oH16e7p9unuUvjp7rr56e4j++nui/zp7vT96e5c/+nuxQDp7i0C6e6WA+nu/gTp7mYG6e7PB+nuNwnp7qAK6e4IDOnucQ3p7tkO6e788SLwZPMi8M30IvA19iLwnvci8Ab5IvBv+iLw1/si8D/9IvCo/iLwEAAi8HkBIvDhAiLwSgQi8LIFIvAbByLwgwgi8OwJIvBUCyLwvAwi8CUOIvBI8VrxsPJa8Rn0WvGB9Vrx6fZa8VL4WvG6+VrxI/ta8Yv8WvH0/VrxXP9a8cUAWvEtAlrxlgNa8f4EWvFmBlrxzwda8TcJWvGgClrxCAxa8XENWvHZDlrx/PGS8mTzkvLN9JLyNfaS8p73kvIG+ZLyb/qS8tf7kvI//ZLyqP6S8hAAkvJ5AZLy4QKS8koEkvKyBZLyGweS8oMIkvLsCZLyVAuS8rwMkvIlDpLySPHK87DyyvMZ9MrzgfXK8+n2yvNS+MrzuvnK8yP7yvOL/Mrz9P3K81z/yvPFAMrzLQLK85YDyvP+BMrzZgbK888HyvM3CcrzoArK8wgMyvNxDcrz2Q7K8/zxAvVk8wL1zfQC9TX2AvWe9wL1BvkC9W/6AvXX+wL1P/0C9aj+AvUQAAL1eQEC9eECAvVKBAL1sgUC9RsHAvWDCAL17AkC9VQLAvW8DAL1JQ4C9UjxOvaw8jr2GfQ69oH1Ovbp9jr2Uvg69rr5OvYj+zr2i/w69vT9OvZc/zr2xQA69i0COvaWAzr2/gQ69mYGOvbPBzr2Nwk69qAKOvYIDDr2cQ069tkOOvb88XP3ZPNz9830c/c19nP3nvdz9wb5c/dv+nP31/tz9z/9c/eo/nP3EABz93kBc/fhAnP3SgRz97IFc/cbB3P3gwhz9+wJc/dUC3P3vAxz9yUOc/dI8av4sPKr+Bn0q/iB9av46far+FL4q/i6+av4I/ur+Iv8q/j0/av4XP+r+MUAq/gtAqv4lgOr+P4Eq/hmBqv4zwer+DcJq/igCqv4CAyr+HENq/jZDqv4/PHj+WTz4/nN9OP5Nfbj+Z734/kG+eP5b/rj+df74/k//eP5qP7j+RAA4/l5AeP54QLj+UoE4/myBeP5Gwfj+YMI4/nsCeP5VAvj+bwM4/kZ9Bv7gfUb++n2G/tS+Bv7uvkb+yP7G/uL/Bv79P0b+1z/G/vFABv7LQIb+5YDG/v+BBv7ZgYb+88HG/s3CRv7oAob+wgMG/s19lP8nvdT/Ab5U/xv+lP81/tT/D/9U/yo/lP8EABT/HkBU/zhAlP8SgRT/LIFU/wbB1P8gwhT/OwJU/xS+Iv9uvmL/SP7i/2L/Iv99P2L/Vz/i/3FAIv9LQKL/ZYDi/3+BIv9ZgaL/c8Hi/1v+sP+sgXD/g==","pos":"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","tri":"BgAFAAcAbgBtAG8ARABDAHQARQBEAHQARgBFAHQARwBGAHQAQwBCAHUAdABDAHUAQgBBAHYAdQBCAHYAQQBAAHcAdgBBAHcAQAA/AHgAdwBAAHgAPwA+AHkAeAA/AHkAPgA9AHoAeQA+AHoAPQA8AHsAegA9AHsAPAA7AHwAewA8AHwAOwA6AH0AfAA7AH0AOgA5AH4AfQA6AH4AfgA5AH8AOQA4AIAAfwA5AIAAOAA3AIEAgAA4AIEANwA2AIIAgQA3AIIANgA1AIMAggA2AIMANQA0AIQAgwA1AIQANAAzAIUAhAA0AIUAMwAyAIYAhQAzAIYAMgAxAIcAhgAyAIcALwAuAIgAMAAvAIgAMQAwAIgAhwAxAIgALgAtAIgARwB0AIkAdAB1AIkAdQB2AIoAiQB1AIoAdgB3AIsAigB2AIsAdwB4AIwAiwB3AIwAeAB5AI0AjAB4AI0AeQB6AI4AjQB5AI4AegB7AI8AjgB6AI8AewB8AJAAjwB7AJAAfAB9AJEAkAB8AJEAfQB+AJIAkQB9AJIAfgB/AJMAkgB+AJMAfwCAAJQAkwB/AJQAgACBAJUAlACAAJUAgQCCAJYAlQCBAJYAggCDAJcAlgCCAJcAgwCEAJgAlwCDAJgAhACFAJkAmACEAJkAhQCGAJoAmQCFAJoAhgCHAJsAmgCGAJsAhwCIAJwAmwCHAJwAiAAtAJwASABHAJ0ARwCJAJ0AiQCKAJ4AnQCJAJ4AigCLAJ8AngCKAJ8AiwCMAKAAnwCLAKAAjACNAKEAoACMAKEAjQCOAKIAoQCNAKIAjgCPAKMAogCOAKMAjwCQAKQAowCPAKQAkACRAKUApACQAKUAkQCSAKYApQCRAKYAkgCTAKcApgCSAKcAkwCUAKgApwCTAKgAlACVAKkAqACUAKkAlQCWAKoAqQCVAKoAlgCXAKsAqgCWAKsAlwCYAKwAqwCXAKwAmACZAK0ArACYAK0AmQCaAK4ArQCZAK4AmgCbAK8ArgCaAK8AmwCcALAArwCbALAALQAsALEAnAAtALEAsACcALEASQBIALIASACdALIAnQCeALIAngCfALMAsgCeALMAnwCgALQAswCfALQAoAChALUAtACgALUAoQCiALYAtQChALYAogCjALcAtgCiALcAowCkALgAtwCjALgApAClALkAuACkALkApQCmALoAuQClALoApgCnALsAugCmALsApwCoALwAuwCnALwAqACpAL0AvACoAL0AqQCqAL4AvQCpAL4AqgCrAL8AvgCqAL8AqwCsAMAAvwCrAMAArACtAMEAwACsAMEArQCuAMIAwQCtAMIArgCvAMMAwgCuAMMArwCwAMQAwwCvAMQALAArAMUAsQAsAMUAsACxAMUAxACwAMUASgBJAMYASQCyAMYAsgCzAMcAxgCyAMcAswC0AMgAxwCzAMgAtAC1AMkAyAC0AMkAtQC2AMoAyQC1AMoAtgC3AMsAygC2AMsAtwC4AMwAywC3AMwAuAC5AM0AzAC4AM0AuQC6AM4AzQC5AM4AugC7AM8AzgC6AM8AuwC8ANAAzwC7ANAAvAC9ANEA0AC8ANEAvQC+ANIA0QC9ANIAvgC/ANMA0gC+ANMAvwDAANQA0wC/ANQAwADBANUA1ADAANUAwQDCANYA1QDBANYAwgDDANcA1gDCANcAwwDEANgA1wDDANgAxADFANkA2ADEANkAKwAqANoAxQArANoA2QDFANoASgDGANsAxgDHANsAxwDIANwA2wDHANwAyADJAN0A3ADIAN0AyQDKAN4A3QDJAN4AygDLAN8A3gDKAN8AywDMAOAA3wDLAOAAzADNAOEA4ADMAOEAzQDOAOIA4QDNAOIAzgDPAOMA4gDOAOMAzwDQAOQA4wDPAOQA0ADRAOUA5ADQAOUA0QDSAOYA5QDRAOYA0gDTAOcA5gDSAOcA0wDUAOgA5wDTAOgA1ADVAOkA6ADUAOkA1QDWAOoA6QDVAOoA1gDXAOsA6gDWAOsA1wDYAOwA6wDXAOwA2ADZAO0A7ADYAO0A2gAqAO4A2QDaAO4A7QDZAO4ASwBKAO8ASgDbAO8ATABLAO8A2wDcAPAA7wDbAPAA3ADdAPEA8ADcAPEA3QDeAPIA8QDdAPIA3gDfAPMA8gDeAPMA3wDgAPQA8wDfAPQA4ADhAPUA9ADgAPUA4QDiAPYA9QDhAPYA4gDjAPcA9gDiAPcA4wDkAPgA9wDjAPgA5ADlAPkA+ADkAPkA5QDmAPoA+QDlAPoA5gDnAPsA+gDmAPsA5wDoAPwA+wDnAPwA6ADpAP0A/ADoAP0A6QDqAP4A/QDpAP4A6gDrAP8A/gDqAP8A6wDsAAAB/wDrAAAB7ADtAAEBAAHsAAEB7QDuAAIBAQHtAAIBKgApAAMB7gAqAAMBKQAoAAMBAgHuAAMBTADvAAQB7wDwAAQB8ADxAAUBBAHwAAUB8QDyAAYBBQHxAAYB8gDzAAcBBgHyAAcB8wD0AAgBBwHzAAgB9AD1AAkBCAH0AAkB9QD2AAoBCQH1AAoB9gD3AAsBCgH2AAsB9wD4AAwBCwH3AAwB+AD5AA0BDAH4AA0B+QD6AA4BDQH5AA4B+gD7AA8BDgH6AA8B+wD8ABABDwH7ABAB/AD9ABEBEAH8ABEB/QD+ABIBEQH9ABIB/gD/ABMBEgH+ABMB/wAAARQBEwH/ABQBAAEBARUBFAEAARUBAQECARYBFQEBARYBAgEDARcBFgECARcBAwEoABcBTQBMABgBTAAEARgBTgBNABgBBAEFARkBGAEEARkBBQEGARoBGQEFARoBBgEHARsBGgEGARsBBwEIARwBGwEHARwBCAEJAR0BHAEIAR0BCQEKAR4BHQEJAR4BCgELAR8BHgEKAR8BCwEMASABHwELASABDAENASEBIAEMASEBDQEOASIBIQENASIBDgEPASMBIgEOASMBDwEQASQBIwEPASQBEAERASUBJAEQASUBEQESASYBJQERASYBEgETAScBJgESAScBEwEUASgBJwETASgBFAEVASkBKAEUASkBFQEWASoBKQEVASoBFgEXASsBKgEWASsBKAAnACwBFwEoACwBJwAmACwBKwEXASwBTgAYAS0BGAEZAS0BGQEaAS4BLQEZAS4BGgEbAS8BLgEaAS8BGwEcATABLwEbATABHAEdATEBMAEcATEBHQEeATIBMQEdATIBHgEfATMBMgEeATMBHwEgATQBMwEfATQBIAEhATUBNAEgATUBIQEiATYBNQEhATYBIgEjATcBNgEiATcBIwEkATgBNwEjATgBJAElATkBOAEkATkBJQEmAToBOQElAToBJgEnATsBOgEmATsBJwEoATwBOwEnATwBKAEpAT0BPAEoAT0BKQEqAT4BPQEpAT4BKgErAT8BPgEqAT8BKwEsAUABPwErAUABLAEmAEABTwBOAEEBTgAtAUEBLQEuAUIBQQEtAUIBLgEvAUMBQgEuAUMBLwEwAUQBQwEvAUQBMAExAUUBRAEwAUUBMQEyAUYBRQExAUYBMgEzAUcBRgEyAUcBMwE0AUgBRwEzAUgBNAE1AUkBSAE0AUkBNQE2AUoBSQE1AUoBNgE3AUsBSgE2AUsBNwE4AUwBSwE3AUwBOAE5AU0BTAE4AU0BOQE6AU4BTQE5AU4BOgE7AU8BTgE6AU8BOwE8AVABTwE7AVABPAE9AVEBUAE8AVEBPQE+AVIBUQE9AVIBPgE/AVMBUgE+AVMBPwFAAVQBUwE/AVQBJgAlAFUBQAEmAFUBVAFAAVUBUABPAFYBTwBBAVYBQQFCAVYBQgFDAVcBVgFCAVcBQwFEAVgBVwFDAVgBRAFFAVkBWAFEAVkBRQFGAVoBWQFFAVoBRgFHAVsBWgFGAVsBRwFIAVwBWwFHAVwBSAFJAV0BXAFIAV0BSQFKAV4BXQFJAV4BSgFLAV8BXgFKAV8BSwFMAWABXwFLAWABTAFNAWEBYAFMAWEBTQFOAWIBYQFNAWIBTgFPAWMBYgFOAWMBTwFQAWQBYwFPAWQBUAFRAWUBZAFQAWUBUQFSAWYBZQFRAWYBUgFTAWcBZgFSAWcBUwFUAWgBZwFTAWgBJQAkAGkBVQElAGkBVAFVAWkBaAFUAWkBUQBQAGoBUABWAWoBVgFXAWsBagFWAWsBVwFYAWwBawFXAWwBWAFZAW0BbAFYAW0BWQFaAW4BbQFZAW4BWgFbAW8BbgFaAW8BWwFcAXABbwFbAXABXAFdAXEBcAFcAXEBXQFeAXIBcQFdAXIBXgFfAXMBcgFeAXMBXwFgAXQBcwFfAXQBYAFhAXUBdAFgAXUBYQFiAXYBdQFhAXYBYgFjAXcBdgFiAXcBYwFkAXgBdwFjAXgBZAFlAXkBeAFkAXkBZQFmAXoBeQFlAXoBZgFnAXsBegFmAXsBZwFoAXwBewFnAXwBaAFpAX0BfAFoAX0BJAAjAH4BaQEkAH4BfQFpAX4BUQBqAX8BagFrAX8BawFsAYABfwFrAYABbAFtAYEBgAFsAYEBbQFuAYIBgQFtAYIBbgFvAYMBggFuAYMBbwFwAYQBgwFvAYQBcAFxAYUBhAFwAYUBcQFyAYYBhQFxAYYBcgFzAYcBhgFyAYcBcwF0AYgBhwFzAYgBdAF1AYkBiAF0AYkBdQF2AYoBiQF1AYoBdgF3AYsBigF2AYsBdwF4AYwBiwF3AYwBeAF5AY0BjAF4AY0BeQF6AY4BjQF5AY4BegF7AY8BjgF6AY8BewF8AZABjwF7AZABfAF9AZEBkAF8AZEBfgEjAJIBfQF+AZIBkQF9AZIBUgBRAJMBUQB/AZMBUwBSAJMBfwGAAZQBkwF/AZQBgAGBAZUBlAGAAZUBgQGCAZYBlQGBAZYBggGDAZcBlgGCAZcBgwGEAZgBlwGDAZgBhAGFAZkBmAGEAZkBhQGGAZoBmQGFAZoBhgGHAZsBmgGGAZsBhwGIAZwBmwGHAZwBiAGJAZ0BnAGIAZ0BiQGKAZ4BnQGJAZ4BigGLAZ8BngGKAZ8BiwGMAaABnwGLAaABjAGNAaEBoAGMAaEBjQGOAaIBoQGNAaIBjgGPAaMBogGOAaMBjwGQAaQBowGPAaQBkAGRAaUBpAGQAaUBkQGSAaYBpQGRAaYBIwAiAKcBkgEjAKcBIgAhAKcBpgGSAacBUwCTAagBkwGUAagBlAGVAakBqAGUAakBlQGWAaoBqQGVAaoBlgGXAasBqgGWAasBlwGYAawBqwGXAawBmAGZAa0BrAGYAa0BmQGaAa4BrQGZAa4BmgGbAa8BrgGaAa8BmwGcAbABrwGbAbABnAGdAbEBsAGcAbEBnQGeAbIBsQGdAbIBngGfAbMBsgGeAbMBnwGgAbQBswGfAbQBoAGhAbUBtAGgAbUBoQGiAbYBtQGhAbYBogGjAbcBtgGiAbcBowGkAbgBtwGjAbgBpAGlAbkBuAGkAbkBpQGmAboBuQGlAboBpgGnAbsBugGmAbsBpwEhALsBVABTALwBUwCoAbwBVQBUALwBqAGpAb0BvAGoAb0BqQGqAb4BvQGpAb4BqgGrAb8BvgGqAb8BqwGsAcABvwGrAcABrAGtAcEBwAGsAcEBrQGuAcIBwQGtAcIBrgGvAcMBwgGuAcMBrwGwAcQBwwGvAcQBsAGxAcUBxAGwAcUBsQGyAcYBxQGxAcYBsgGzAccBxgGyAccBswG0AcgBxwGzAcgBtAG1AckByAG0AckBtQG2AcoByQG1AcoBtgG3AcsBygG2AcsBtwG4AcwBywG3AcwBuAG5Ac0BzAG4Ac0BuQG6Ac4BzQG5Ac4BugG7Ac8BzgG6Ac8BIQAgANABuwEhANABIAAfANABzwG7AdABVQC8AdEBvAG9AdEBvQG+AdIB0QG9AdIBvgG/AdMB0gG+AdMBvwHAAdQB0wG/AdQBwAHBAdUB1AHAAdUBwQHCAdYB1QHBAdYBwgHDAdcB1gHCAdcBwwHEAdgB1wHDAdgBxAHFAdkB2AHEAdkBxQHGAdoB2QHFAdoBxgHHAdsB2gHGAdsBxwHIAdwB2wHHAdwByAHJAd0B3AHIAd0ByQHKAd4B3QHJAd4BygHLAd8B3gHKAd8BywHMAeAB3wHLAeABzAHNAeEB4AHMAeEBzQHOAeIB4QHNAeIBzgHPAeMB4gHOAeMBzwHQAeQB4wHPAeQB0AEfAOQBVgBVAOUBVQDRAeUB0QHSAeYB5QHRAeYB0gHTAecB5gHSAecB0wHUAegB5wHTAegB1AHVAekB6AHUAekB1QHWAeoB6QHVAeoB1gHXAesB6gHWAesB1wHYAewB6wHXAewB2AHZAe0B7AHYAe0B2QHaAe4B7QHZAe4B2gHbAe8B7gHaAe8B2wHcAfAB7wHbAfAB3AHdAfEB8AHcAfEB3QHeAfIB8QHdAfIB3gHfAfMB8gHeAfMB3wHgAfQB8wHfAfQB4AHhAfUB9AHgAfUB4QHiAfYB9QHhAfYB4gHjAfcB9gHiAfcB4wHkAfgB9wHjAfgBHwAeAPkB5AEfAPkB+AHkAfkBVwBWAPoBVgDlAfoB5QHmAfoB5gHnAfsB+gHmAfsB5wHoAfwB+wHnAfwB6AHpAf0B/AHoAf0B6QHqAf4B/QHpAf4B6gHrAf8B/gHqAf8B6wHsAQAC/wHrAQAC7AHtAQECAALsAQEC7QHuAQICAQLtAQIC7gHvAQMCAgLuAQMC7wHwAQQCAwLvAQQC8AHxAQUCBALwAQUC8QHyAQYCBQLxAQYC8gHzAQcCBgLyAQcC8wH0AQgCBwLzAQgC9AH1AQkCCAL0AQkC9QH2AQoCCQL1AQoC9gH3AQsCCgL2AQsC9wH4AQwCCwL3AQwCHgAdAA0C+QEeAA0C+AH5AQ0CDAL4AQ0CWABXAA4CVwD6AQ4C+gH7AQ8CDgL6AQ8C+wH8ARACDwL7ARAC/AH9ARECEAL8AREC/QH+ARICEQL9ARIC/gH/ARMCEgL+ARMC/wEAAhQCEwL/ARQCAAIBAhUCFAIAAhUCAQICAhYCFQIBAhYCAgIDAhcCFgICAhcCAwIEAhgCFwIDAhgCBAIFAhkCGAIEAhkCBQIGAhoCGQIFAhoCBgIHAhsCGgIGAhsCBwIIAhwCGwIHAhwCCAIJAh0CHAIIAh0CCQIKAh4CHQIJAh4CCgILAh8CHgIKAh8CCwIMAiACHwILAiACDAINAiECIAIMAiECHQAcACICDQIdACICIQINAiICWAAOAiMCDgIPAiMCDwIQAiQCIwIPAiQCEAIRAiUCJAIQAiUCEQISAiYCJQIRAiYCEgITAicCJgISAicCEwIUAigCJwITAigCFAIVAikCKAIUAikCFQIWAioCKQIVAioCFgIXAisCKgIWAisCFwIYAiwCKwIXAiwCGAIZAi0CLAIYAi0CGQIaAi4CLQIZAi4CGgIbAi8CLgIaAi8CGwIcAjACLwIbAjACHAIdAjECMAIcAjECHQIeAjICMQIdAjICHgIfAjMCMgIeAjMCHwIgAjQCMwIfAjQCIAIhAjUCNAIgAjUCIgIcADYCIQIiAjYCNQIhAjYCWQBYADcCWAAjAjcCWgBZADcCIwIkAjgCNwIjAjgCJAIlAjkCOAIkAjkCJQImAjoCOQIlAjoCJgInAjsCOgImAjsCJwIoAjwCOwInAjwCKAIpAj0CPAIoAj0CKQIqAj4CPQIpAj4CKgIrAj8CPgIqAj8CKwIsAkACPwIrAkACLAItAkECQAIsAkECLQIuAkICQQItAkICLgIvAkMCQgIuAkMCLwIwAkQCQwIvAkQCMAIxAkUCRAIwAkUCMQIyAkYCRQIxAkYCMgIzAkcCRgIyAkcCMwI0AkgCRwIzAkgCNAI1AkkCSAI0AkkCNQI2AkoCSQI1AkoCHAAbAEsCNgIcAEsCGwAaAEsCSgI2AksCWgA3AkwCNwI4AkwCOAI5Ak0CTAI4Ak0COQI6Ak4CTQI5Ak4COgI7Ak8CTgI6Ak8COwI8AlACTwI7AlACPAI9AlECUAI8AlECPQI+AlICUQI9AlICPgI/AlMCUgI+AlMCPwJAAlQCUwI/AlQCQAJBAlUCVAJAAlUCQQJCAlYCVQJBAlYCQgJDAlcCVgJCAlcCQwJEAlgCVwJDAlgCRAJFAlkCWAJEAlkCRQJGAloCWQJFAloCRgJHAlsCWgJGAlsCRwJIAlwCWwJHAlwCSAJJAl0CXAJIAl0CSQJKAl4CXQJJAl4CSgJLAl8CXgJKAl8CSwIaAF8CWwBaAGACWgBMAmACXABbAGACTAJNAmECYAJMAmECTQJOAmICYQJNAmICTgJPAmMCYgJOAmMCTwJQAmQCYwJPAmQCUAJRAmUCZAJQAmUCUQJSAmYCZQJRAmYCUgJTAmcCZgJSAmcCUwJUAmgCZwJTAmgCVAJVAmkCaAJUAmkCVQJWAmoCaQJVAmoCVgJXAmsCagJWAmsCVwJYAmwCawJXAmwCWAJZAm0CbAJYAm0CWQJaAm4CbQJZAm4CWgJbAm8CbgJaAm8CWwJcAnACbwJbAnACXAJdAnECcAJcAnECXQJeAnICcQJdAnICXgJfAnMCcgJeAnMCGgAZAHQCXwIaAHQCcwJfAnQCXABgAnUCYAJhAnUCYQJiAnYCdQJhAnYCYgJjAncCdgJiAncCYwJkAngCdwJjAngCZAJlAnkCeAJkAnkCZQJmAnoCeQJlAnoCZgJnAnsCegJmAnsCZwJoAnwCewJnAnwCaAJpAn0CfAJoAn0CaQJqAn4CfQJpAn4CagJrAn8CfgJqAn8CawJsAoACfwJrAoACbAJtAoECgAJsAoECbQJuAoICgQJtAoICbgJvAoMCggJuAoMCbwJwAoQCgwJvAoQCcAJxAoUChAJwAoUCcQJyAoYChQJxAoYCcgJzAocChgJyAocCGQAYAIgCdAIZAIgCcwJ0AogChwJzAogCXQBcAIkCXAB1AokCdQJ2AooCiQJ1AooCdgJ3AosCigJ2AosCdwJ4AowCiwJ3AowCeAJ5Ao0CjAJ4Ao0CeQJ6Ao4CjQJ5Ao4CegJ7Ao8CjgJ6Ao8CewJ8ApACjwJ7ApACfAJ9ApECkAJ8ApECfQJ+ApICkQJ9ApICfgJ/ApMCkgJ+ApMCfwKAApQCkwJ/ApQCgAKBApUClAKAApUCgQKCApYClQKBApYCggKDApcClgKCApcCgwKEApgClwKDApgChAKFApkCmAKEApkChQKGApoCmQKFApoChgKHApsCmgKGApsChwKIApwCmwKHApwCGAAXAJ0CiAIYAJ0CnAKIAp0CXgBdAJ4CXQCJAp4CiQKKAp8CngKJAp8CigKLAqACnwKKAqACiwKMAqECoAKLAqECjAKNAqICoQKMAqICjQKOAqMCogKNAqMCjgKPAqQCowKOAqQCjwKQAqUCpAKPAqUCkAKRAqYCpQKQAqYCkQKSAqcCpgKRAqcCkgKTAqgCpwKSAqgCkwKUAqkCqAKTAqkClAKVAqoCqQKUAqoClQKWAqsCqgKVAqsClgKXAqwCqwKWAqwClwKYAq0CrAKXAq0CmAKZAq4CrQKYAq4CmQKaAq8CrgKZAq8CmgKbArACrwKaArACmwKcArECsAKbArECnAKdArICsQKcArICFwAWALMCnQIXALMCsgKdArMCXwBeALQCXgCeArQCngKfArQCnwKgArUCtAKfArUCoAKhArYCtQKgArYCoQKiArcCtgKhArcCogKjArgCtwKiArgCowKkArkCuAKjArkCpAKlAroCuQKkAroCpQKmArsCugKlArsCpgKnArwCuwKmArwCpwKoAr0CvAKnAr0CqAKpAr4CvQKoAr4CqQKqAr8CvgKpAr8CqgKrAsACvwKqAsACqwKsAsECwAKrAsECrAKtAsICwQKsAsICrQKuAsMCwgKtAsMCrgKvAsQCwwKuAsQCrwKwAsUCxAKvAsUCsAKxAsYCxQKwAsYCsQKyAscCxgKxAscCFgAVAMgCswIWAMgCsgKzAsgCxwKyAsgCYABfAMkCXwC0AskCtAK1AsoCyQK0AsoCtQK2AssCygK1AssCtgK3AswCywK2AswCtwK4As0CzAK3As0CuAK5As4CzQK4As4CuQK6As8CzgK5As8CugK7AtACzwK6AtACuwK8AtEC0AK7AtECvAK9AtIC0QK8AtICvQK+AtMC0gK9AtMCvgK/AtQC0wK+AtQCvwLAAtUC1AK/AtUCwALBAtYC1QLAAtYCwQLCAtcC1gLBAtcCwgLDAtgC1wLCAtgCwwLEAtkC2ALDAtkCxALFAtoC2QLEAtoCxQLGAtsC2gLFAtsCxgLHAtwC2wLGAtwCxwLIAt0C3ALHAt0CFQAUAN4CyAIVAN4C3QLIAt4CYQBgAN8CYADJAt8CyQLKAt8CygLLAuAC3wLKAuACywLMAuEC4ALLAuECzALNAuIC4QLMAuICzQLOAuMC4gLNAuMCzgLPAuQC4wLOAuQCzwLQAuUC5ALPAuUC0ALRAuYC5QLQAuYC0QLSAucC5gLRAucC0gLTAugC5wLSAugC0wLUAukC6ALTAukC1ALVAuoC6QLUAuoC1QLWAusC6gLVAusC1gLXAuwC6wLWAuwC1wLYAu0C7ALXAu0C2ALZAu4C7QLYAu4C2QLaAu8C7gLZAu8C2gLbAvAC7wLaAvAC2wLcAvEC8ALbAvEC3ALdAvIC8QLcAvICFAATAPMC3gIUAPMC3QLeAvMC8gLdAvMCYgBhAPQCYQDfAvQC3wLgAvUC9ALfAvUC4ALhAvYC9QLgAvYC4QLiAvcC9gLhAvcC4gLjAvgC9wLiAvgC4wLkAvkC+ALjAvkC5ALlAvoC+QLkAvoC5QLmAvsC+gLlAvsC5gLnAvwC+wLmAvwC5wLoAv0C/ALnAv0C6ALpAv4C/QLoAv4C6QLqAv8C/gLpAv8C6gLrAgAD/wLqAgAD6wLsAgEDAAPrAgED7ALtAgIDAQPsAgID7QLuAgMDAgPtAgMD7gLvAgQDAwPuAgQD7wLwAgUDBAPvAgUD8ALxAgYDBQPwAgYD8QLyAgcDBgPxAgcD8gLzAggDBwPyAggDEwASAAkD8wITAAkDCAPzAgkDYgD0AgoD9AL1AgoD9QL2AgsDCgP1AgsD9gL3AgwDCwP2AgwD9wL4Ag0DDAP3Ag0D+AL5Ag4DDQP4Ag4D+QL6Ag8DDgP5Ag8D+gL7AhADDwP6AhAD+wL8AhEDEAP7AhED/AL9AhIDEQP8AhID/QL+AhMDEgP9AhMD/gL/AhQDEwP+AhQD/wIAAxUDFAP/AhUDAAMBAxYDFQMAAxYDAQMCAxcDFgMBAxcDAgMDAxgDFwMCAxgDAwMEAxkDGAMDAxkDBAMFAxoDGQMEAxoDBQMGAxsDGgMFAxsDBgMHAxwDGwMGAxwDBwMIAx0DHAMHAx0DCQMSAB4DCAMJAx4DHQMIAx4DYwBiAB8DYgAKAx8DZABjAB8DCgMLAyADHwMKAyADCwMMAyEDIAMLAyEDDAMNAyIDIQMMAyIDDQMOAyMDIgMNAyMDDgMPAyQDIwMOAyQDDwMQAyUDJAMPAyUDEAMRAyYDJQMQAyYDEQMSAycDJgMRAycDEgMTAygDJwMSAygDEwMUAykDKAMTAykDFAMVAyoDKQMUAyoDFQMWAysDKgMVAysDFgMXAywDKwMWAywDFwMYAy0DLAMXAy0DGAMZAy4DLQMYAy4DGQMaAy8DLgMZAy8DGgMbAzADLwMaAzADGwMcAzEDMAMbAzEDHAMdAzIDMQMcAzIDHQMeAzMDMgMdAzMDEgARADQDHgMSADQDEQAQADQDMwMeAzQDZAAfAzUDHwMgAzUDIAMhAzYDNQMgAzYDIQMiAzcDNgMhAzcDIgMjAzgDNwMiAzgDIwMkAzkDOAMjAzkDJAMlAzoDOQMkAzoDJQMmAzsDOgMlAzsDJgMnAzwDOwMmAzwDJwMoAz0DPAMnAz0DKAMpAz4DPQMoAz4DKQMqAz8DPgMpAz8DKgMrA0ADPwMqA0ADKwMsA0EDQAMrA0EDLAMtA0IDQQMsA0IDLQMuA0MDQgMtA0MDLgMvA0QDQwMuA0QDLwMwA0UDRAMvA0UDMAMxA0YDRQMwA0YDMQMyA0cDRgMxA0cDMgMzA0gDRwMyA0gDMwM0A0kDSAMzA0kDNAMQAEkDZQBkAEoDZgBlAEoDZAA1A0oDNQM2A0sDSgM1A0sDNgM3A0wDSwM2A0wDNwM4A00DTAM3A00DOAM5A04DTQM4A04DOQM6A08DTgM5A08DOgM7A1ADTwM6A1ADOwM8A1EDUAM7A1EDPAM9A1IDUQM8A1IDPQM+A1MDUgM9A1MDPgM/A1QDUwM+A1QDPwNAA1UDVAM/A1UDQANBA1YDVQNAA1YDQQNCA1cDVgNBA1cDQgNDA1gDVwNCA1gDQwNEA1kDWANDA1kDRANFA1oDWQNEA1oDRQNGA1sDWgNFA1sDRgNHA1wDWwNGA1wDRwNIA10DXANHA10DSANJA14DXQNIA14DDwAOAF8DDgBeA18DEAAPAF8DSQMQAF8DXgNJA18DZwBmAGADZgBKA2ADSgNLA2ADaABnAGEDSwNMA2EDYANLA2EDZwBgA2EDTANNA2IDYQNMA2IDTQNOA2MDYgNNA2MDTgNPA2QDYwNOA2QDTwNQA2UDZANPA2UDUANRA2YDZQNQA2YDUQNSA2cDZgNRA2cDUgNTA2gDZwNSA2gDUwNUA2kDaANTA2kDVANVA2oDaQNUA2oDVQNWA2sDagNVA2sDVgNXA2wDawNWA2wDVwNYA20DbANXA20DWANZA24DbQNYA24DWQNaA28DbgNZA28DWgNbA3ADbwNaA3ADWwNcA3EDcANbA3EDXANdA3IDcQNcA3IDDgANAHMDXgMOAHMDXQNeA3MDcgNdA3MDaQBoAHQDaABhA3QDYQNiA3QDYgNjA3UDdANiA3UDaQB0A3UDYwNkA3YDdQNjA3YDZANlA3cDdgNkA3cDZQNmA3gDdwNlA3gDZgNnA3kDeANmA3kDZwNoA3oDeQNnA3oDaANpA3sDegNoA3sDaQNqA3wDewNpA3wDagNrA30DfANqA30DawNsA34DfQNrA34DbANtA38DfgNsA38DbQNuA4ADfwNtA4ADbgNvA4EDgANuA4EDbwNwA4IDgQNvA4IDcANxA4MDggNwA4MDcQNyA4QDgwNxA4QDDQAMAIUDcwMNAIUDcgNzA4UDDAALAIUDCwCEA4UDhANyA4UDagBpAIYDaQB1A4YDawBqAIYDdQN2A4YDdgN3A4cDhgN2A4cDawCGA4cDdwN4A4gDhwN3A4gDeAN5A4kDiAN4A4kDeQN6A4oDiQN5A4oDegN7A4sDigN6A4sDewN8A4wDiwN7A4wDfAN9A40DjAN8A40DfQN+A44DjQN9A44DfgN/A48DjgN+A48DfwOAA5ADjwN/A5ADgAOBA5EDkAOAA5EDgQOCA5IDkQOBA5IDggODA5MDkgOCA5MDCwAKAJQDhAMLAJQDgwOEA5QDCgAJAJQDCQCTA5QDkwODA5QDbABrAJUDawCHA5UDhwOIA5UDbQBsAJYDbACVA5YDiAOJA5YDlQOIA5YDcQBwAJcDiQOKA5cDlgOJA5cDigOLA5gDcgBxAJgDcQCXA5gDlwOKA5gDiwOMA5kDcwByAJkDcgCYA5kDmAOLA5kDAABzAJoDjAONA5oDcwCZA5oDmQOMA5oDAQAAAJsDjQOOA5sDAACaA5sDmgONA5sDAgABAJwDjgOPA5wDAQCbA5wDmwOOA5wDAwACAJ0DjwOQA50DAgCcA50DnAOPA50DBAADAJ4DAwCdA54DkAORA54DnQOQA54DCAAHAJ8DkQOSA58DngORA58DCQAIAKADkwMJAKADkgOTA6ADCACfA6ADnwOSA6ADbwBtAKEDbQCWA6EDcABvAKEDlgOXA6EDlwNwAKEDBQAEAKIDBACeA6IDBwAFAKIDnwMHAKIDngOfA6ID","ao":"//////////////7+/v7+/v7+//////789u3o5Ors7e7t8fP4/f7///////////7+/v7////////////////////////+/v7///////////789/Lx7e7s6+ji5ujz/P7///////7+/v3+/v7////////////+//////////////////////////7///////////////////////////////////////////////////////////7+/v///////////v7//////////v7+/v/////////+/v7+///////+/v39/v////////79/f7+//////7+/f39/v///////v39/f7+/////v79/Pz+///////+/fz8/f7+/////v38+/3+///////+/Pv8/f7////+/fv7+/3+//////79+/v7/f7///79+/r6/P7///////78+vr7/f7//v37+vn6/f7//////v36+fr8/f77/Pz6+fn7/v///////fv5+fr8/Pz5+/v5+fr9/v/////+/fr5+vv7+fT4+/r6+vz+///////+/Pr6+/v49fX6/Pv6/P3///////79+/r7/Pr18fj8/Pv8/f7///////79/Pv8/Pjx9Pv9/fz9/v////////79/P39+/Tw+P3+/f3+//////////79/f79+PHx+/7+/v7///////////7+/v778u73/f/+///////////////+//337/H7/v///////////////////vvy6fb9/////////////////////fbq8Pr+///////////////////++vDt+P7////////////////////99+34/f/////////////////////89fv9//////////////////////78+/7+/////////////////////////v7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////7+/v7//////////////////////v7+/v7+/////////////////////v7+/v///////////////////v7///////////////////7//////////////////w=="},
    sleeves: [{"rings":30,"around":22,"pos":"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","hang":"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","uv":"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27b//wvD//88z///bdv//57n///O8////////w==","tri":"AAABABYAAQAXABYAAQACABcAAgAYABcAAgADABgAAwAZABgAAwAEABkABAAaABkABAAFABoABQAbABoABQAGABsABgAcABsABgAHABwABwAdABwABwAIAB0ACAAeAB0ACAAJAB4ACQAfAB4ACQAKAB8ACgAgAB8ACgALACAACwAhACAACwAMACEADAAiACEADAANACIADQAjACIADQAOACMADgAkACMADgAPACQADwAlACQADwAQACUAEAAmACUAEAARACYAEQAnACYAEQASACcAEgAoACcAEgATACgAEwApACgAEwAUACkAFAAqACkAFAAVACoAFQArACoAFQAAACsAAAAWACsAFgAXACwAFwAtACwAFwAYAC0AGAAuAC0AGAAZAC4AGQAvAC4AGQAaAC8AGgAwAC8AGgAbADAAGwAxADAAGwAcADEAHAAyADEAHAAdADIAHQAzADIAHQAeADMAHgA0ADMAHgAfADQAHwA1ADQAHwAgADUAIAA2ADUAIAAhADYAIQA3ADYAIQAiADcAIgA4ADcAIgAjADgAIwA5ADgAIwAkADkAJAA6ADkAJAAlADoAJQA7ADoAJQAmADsAJgA8ADsAJgAnADwAJwA9ADwAJwAoAD0AKAA+AD0AKAApAD4AKQA/AD4AKQAqAD8AKgBAAD8AKgArAEAAKwBBAEAAKwAWAEEAFgAsAEEALAAtAEIALQBDAEIALQAuAEMALgBEAEMALgAvAEQALwBFAEQALwAwAEUAMABGAEUAMAAxAEYAMQBHAEYAMQAyAEcAMgBIAEcAMgAzAEgAMwBJAEgAMwA0AEkANABKAEkANAA1AEoANQBLAEoANQA2AEsANgBMAEsANgA3AEwANwBNAEwANwA4AE0AOABOAE0AOAA5AE4AOQBPAE4AOQA6AE8AOgBQAE8AOgA7AFAAOwBRAFAAOwA8AFEAPABSAFEAPAA9AFIAPQBTAFIAPQA+AFMAPgBUAFMAPgA/AFQAPwBVAFQAPwBAAFUAQABWAFUAQABBAFYAQQBXAFYAQQAsAFcALABCAFcAQgBDAFgAQwBZAFgAQwBEAFkARABaAFkARABFAFoARQBbAFoARQBGAFsARgBcAFsARgBHAFwARwBdAFwARwBIAF0ASABeAF0ASABJAF4ASQBfAF4ASQBKAF8ASgBgAF8ASgBLAGAASwBhAGAASwBMAGEATABiAGEATABNAGIATQBjAGIATQBOAGMATgBkAGMATgBPAGQATwBlAGQATwBQAGUAUABmAGUAUABRAGYAUQBnAGYAUQBSAGcAUgBoAGcAUgBTAGgAUwBpAGgAUwBUAGkAVABqAGkAVABVAGoAVQBrAGoAVQBWAGsAVgBsAGsAVgBXAGwAVwBtAGwAVwBCAG0AQgBYAG0AWABZAG4AWQBvAG4AWQBaAG8AWgBwAG8AWgBbAHAAWwBxAHAAWwBcAHEAXAByAHEAXABdAHIAXQBzAHIAXQBeAHMAXgB0AHMAXgBfAHQAXwB1AHQAXwBgAHUAYAB2AHUAYABhAHYAYQB3AHYAYQBiAHcAYgB4AHcAYgBjAHgAYwB5AHgAYwBkAHkAZAB6AHkAZABlAHoAZQB7AHoAZQBmAHsAZgB8AHsAZgBnAHwAZwB9AHwAZwBoAH0AaAB+AH0AaABpAH4AaQB/AH4AaQBqAH8AagCAAH8AagBrAIAAawCBAIAAawBsAIEAbACCAIEAbABtAIIAbQCDAIIAbQBYAIMAWABuAIMAbgBvAIQAbwCFAIQAbwBwAIUAcACGAIUAcABxAIYAcQCHAIYAcQByAIcAcgCIAIcAcgBzAIgAcwCJAIgAcwB0AIkAdACKAIkAdAB1AIoAdQCLAIoAdQB2AIsAdgCMAIsAdgB3AIwAdwCNAIwAdwB4AI0AeACOAI0AeAB5AI4AeQCPAI4AeQB6AI8AegCQAI8AegB7AJAAewCRAJAAewB8AJEAfACSAJEAfAB9AJIAfQCTAJIAfQB+AJMAfgCUAJMAfgB/AJQAfwCVAJQAfwCAAJUAgACWAJUAgACBAJYAgQCXAJYAgQCCAJcAggCYAJcAggCDAJgAgwCZAJgAgwBuAJkAbgCEAJkAhACFAJoAhQCbAJoAhQCGAJsAhgCcAJsAhgCHAJwAhwCdAJwAhwCIAJ0AiACeAJ0AiACJAJ4AiQCfAJ4AiQCKAJ8AigCgAJ8AigCLAKAAiwChAKAAiwCMAKEAjACiAKEAjACNAKIAjQCjAKIAjQCOAKMAjgCkAKMAjgCPAKQAjwClAKQAjwCQAKUAkACmAKUAkACRAKYAkQCnAKYAkQCSAKcAkgCoAKcAkgCTAKgAkwCpAKgAkwCUAKkAlACqAKkAlACVAKoAlQCrAKoAlQCWAKsAlgCsAKsAlgCXAKwAlwCtAKwAlwCYAK0AmACuAK0AmACZAK4AmQCvAK4AmQCEAK8AhACaAK8AmgCbALAAmwCxALAAmwCcALEAnACyALEAnACdALIAnQCzALIAnQCeALMAngC0ALMAngCfALQAnwC1ALQAnwCgALUAoAC2ALUAoAChALYAoQC3ALYAoQCiALcAogC4ALcAogCjALgAowC5ALgAowCkALkApAC6ALkApAClALoApQC7ALoApQCmALsApgC8ALsApgCnALwApwC9ALwApwCoAL0AqAC+AL0AqACpAL4AqQC/AL4AqQCqAL8AqgDAAL8AqgCrAMAAqwDBAMAAqwCsAMEArADCAMEArACtAMIArQDDAMIArQCuAMMArgDEAMMArgCvAMQArwDFAMQArwCaAMUAmgCwAMUAsACxAMYAsQDHAMYAsQCyAMcAsgDIAMcAsgCzAMgAswDJAMgAswC0AMkAtADKAMkAtAC1AMoAtQDLAMoAtQC2AMsAtgDMAMsAtgC3AMwAtwDNAMwAtwC4AM0AuADOAM0AuAC5AM4AuQDPAM4AuQC6AM8AugDQAM8AugC7ANAAuwDRANAAuwC8ANEAvADSANEAvAC9ANIAvQDTANIAvQC+ANMAvgDUANMAvgC/ANQAvwDVANQAvwDAANUAwADWANUAwADBANYAwQDXANYAwQDCANcAwgDYANcAwgDDANgAwwDZANgAwwDEANkAxADaANkAxADFANoAxQDbANoAxQCwANsAsADGANsAxgDHANwAxwDdANwAxwDIAN0AyADeAN0AyADJAN4AyQDfAN4AyQDKAN8AygDgAN8AygDLAOAAywDhAOAAywDMAOEAzADiAOEAzADNAOIAzQDjAOIAzQDOAOMAzgDkAOMAzgDPAOQAzwDlAOQAzwDQAOUA0ADmAOUA0ADRAOYA0QDnAOYA0QDSAOcA0gDoAOcA0gDTAOgA0wDpAOgA0wDUAOkA1ADqAOkA1ADVAOoA1QDrAOoA1QDWAOsA1gDsAOsA1gDXAOwA1wDtAOwA1wDYAO0A2ADuAO0A2ADZAO4A2QDvAO4A2QDaAO8A2gDwAO8A2gDbAPAA2wDxAPAA2wDGAPEAxgDcAPEA3ADdAPIA3QDzAPIA3QDeAPMA3gD0APMA3gDfAPQA3wD1APQA3wDgAPUA4AD2APUA4ADhAPYA4QD3APYA4QDiAPcA4gD4APcA4gDjAPgA4wD5APgA4wDkAPkA5AD6APkA5ADlAPoA5QD7APoA5QDmAPsA5gD8APsA5gDnAPwA5wD9APwA5wDoAP0A6AD+AP0A6ADpAP4A6QD/AP4A6QDqAP8A6gAAAf8A6gDrAAAB6wABAQAB6wDsAAEB7AACAQEB7ADtAAIB7QADAQIB7QDuAAMB7gAEAQMB7gDvAAQB7wAFAQQB7wDwAAUB8AAGAQUB8ADxAAYB8QAHAQYB8QDcAAcB3ADyAAcB8gDzAAgB8wAJAQgB8wD0AAkB9AAKAQkB9AD1AAoB9QALAQoB9QD2AAsB9gAMAQsB9gD3AAwB9wANAQwB9wD4AA0B+AAOAQ0B+AD5AA4B+QAPAQ4B+QD6AA8B+gAQAQ8B+gD7ABAB+wARARAB+wD8ABEB/AASAREB/AD9ABIB/QATARIB/QD+ABMB/gAUARMB/gD/ABQB/wAVARQB/wAAARUBAAEWARUBAAEBARYBAQEXARYBAQECARcBAgEYARcBAgEDARgBAwEZARgBAwEEARkBBAEaARkBBAEFARoBBQEbARoBBQEGARsBBgEcARsBBgEHARwBBwEdARwBBwHyAB0B8gAIAR0BCAEJAR4BCQEfAR4BCQEKAR8BCgEgAR8BCgELASABCwEhASABCwEMASEBDAEiASEBDAENASIBDQEjASIBDQEOASMBDgEkASMBDgEPASQBDwElASQBDwEQASUBEAEmASUBEAERASYBEQEnASYBEQESAScBEgEoAScBEgETASgBEwEpASgBEwEUASkBFAEqASkBFAEVASoBFQErASoBFQEWASsBFgEsASsBFgEXASwBFwEtASwBFwEYAS0BGAEuAS0BGAEZAS4BGQEvAS4BGQEaAS8BGgEwAS8BGgEbATABGwExATABGwEcATEBHAEyATEBHAEdATIBHQEzATIBHQEIATMBCAEeATMBHgEfATQBHwE1ATQBHwEgATUBIAE2ATUBIAEhATYBIQE3ATYBIQEiATcBIgE4ATcBIgEjATgBIwE5ATgBIwEkATkBJAE6ATkBJAElAToBJQE7AToBJQEmATsBJgE8ATsBJgEnATwBJwE9ATwBJwEoAT0BKAE+AT0BKAEpAT4BKQE/AT4BKQEqAT8BKgFAAT8BKgErAUABKwFBAUABKwEsAUEBLAFCAUEBLAEtAUIBLQFDAUIBLQEuAUMBLgFEAUMBLgEvAUQBLwFFAUQBLwEwAUUBMAFGAUUBMAExAUYBMQFHAUYBMQEyAUcBMgFIAUcBMgEzAUgBMwFJAUgBMwEeAUkBHgE0AUkBNAE1AUoBNQFLAUoBNQE2AUsBNgFMAUsBNgE3AUwBNwFNAUwBNwE4AU0BOAFOAU0BOAE5AU4BOQFPAU4BOQE6AU8BOgFQAU8BOgE7AVABOwFRAVABOwE8AVEBPAFSAVEBPAE9AVIBPQFTAVIBPQE+AVMBPgFUAVMBPgE/AVQBPwFVAVQBPwFAAVUBQAFWAVUBQAFBAVYBQQFXAVYBQQFCAVcBQgFYAVcBQgFDAVgBQwFZAVgBQwFEAVkBRAFaAVkBRAFFAVoBRQFbAVoBRQFGAVsBRgFcAVsBRgFHAVwBRwFdAVwBRwFIAV0BSAFeAV0BSAFJAV4BSQFfAV4BSQE0AV8BNAFKAV8BSgFLAWABSwFhAWABSwFMAWEBTAFiAWEBTAFNAWIBTQFjAWIBTQFOAWMBTgFkAWMBTgFPAWQBTwFlAWQBTwFQAWUBUAFmAWUBUAFRAWYBUQFnAWYBUQFSAWcBUgFoAWcBUgFTAWgBUwFpAWgBUwFUAWkBVAFqAWkBVAFVAWoBVQFrAWoBVQFWAWsBVgFsAWsBVgFXAWwBVwFtAWwBVwFYAW0BWAFuAW0BWAFZAW4BWQFvAW4BWQFaAW8BWgFwAW8BWgFbAXABWwFxAXABWwFcAXEBXAFyAXEBXAFdAXIBXQFzAXIBXQFeAXMBXgF0AXMBXgFfAXQBXwF1AXQBXwFKAXUBSgFgAXUBYAFhAXYBYQF3AXYBYQFiAXcBYgF4AXcBYgFjAXgBYwF5AXgBYwFkAXkBZAF6AXkBZAFlAXoBZQF7AXoBZQFmAXsBZgF8AXsBZgFnAXwBZwF9AXwBZwFoAX0BaAF+AX0BaAFpAX4BaQF/AX4BaQFqAX8BagGAAX8BagFrAYABawGBAYABawFsAYEBbAGCAYEBbAFtAYIBbQGDAYIBbQFuAYMBbgGEAYMBbgFvAYQBbwGFAYQBbwFwAYUBcAGGAYUBcAFxAYYBcQGHAYYBcQFyAYcBcgGIAYcBcgFzAYgBcwGJAYgBcwF0AYkBdAGKAYkBdAF1AYoBdQGLAYoBdQFgAYsBYAF2AYsBdgF3AYwBdwGNAYwBdwF4AY0BeAGOAY0BeAF5AY4BeQGPAY4BeQF6AY8BegGQAY8BegF7AZABewGRAZABewF8AZEBfAGSAZEBfAF9AZIBfQGTAZIBfQF+AZMBfgGUAZMBfgF/AZQBfwGVAZQBfwGAAZUBgAGWAZUBgAGBAZYBgQGXAZYBgQGCAZcBggGYAZcBggGDAZgBgwGZAZgBgwGEAZkBhAGaAZkBhAGFAZoBhQGbAZoBhQGGAZsBhgGcAZsBhgGHAZwBhwGdAZwBhwGIAZ0BiAGeAZ0BiAGJAZ4BiQGfAZ4BiQGKAZ8BigGgAZ8BigGLAaABiwGhAaABiwF2AaEBdgGMAaEBjAGNAaIBjQGjAaIBjQGOAaMBjgGkAaMBjgGPAaQBjwGlAaQBjwGQAaUBkAGmAaUBkAGRAaYBkQGnAaYBkQGSAacBkgGoAacBkgGTAagBkwGpAagBkwGUAakBlAGqAakBlAGVAaoBlQGrAaoBlQGWAasBlgGsAasBlgGXAawBlwGtAawBlwGYAa0BmAGuAa0BmAGZAa4BmQGvAa4BmQGaAa8BmgGwAa8BmgGbAbABmwGxAbABmwGcAbEBnAGyAbEBnAGdAbIBnQGzAbIBnQGeAbMBngG0AbMBngGfAbQBnwG1AbQBnwGgAbUBoAG2AbUBoAGhAbYBoQG3AbYBoQGMAbcBjAGiAbcBogGjAbgBowG5AbgBowGkAbkBpAG6AbkBpAGlAboBpQG7AboBpQGmAbsBpgG8AbsBpgGnAbwBpwG9AbwBpwGoAb0BqAG+Ab0BqAGpAb4BqQG/Ab4BqQGqAb8BqgHAAb8BqgGrAcABqwHBAcABqwGsAcEBrAHCAcEBrAGtAcIBrQHDAcIBrQGuAcMBrgHEAcMBrgGvAcQBrwHFAcQBrwGwAcUBsAHGAcUBsAGxAcYBsQHHAcYBsQGyAccBsgHIAccBsgGzAcgBswHJAcgBswG0AckBtAHKAckBtAG1AcoBtQHLAcoBtQG2AcsBtgHMAcsBtgG3AcwBtwHNAcwBtwGiAc0BogG4Ac0BuAG5Ac4BuQHPAc4BuQG6Ac8BugHQAc8BugG7AdABuwHRAdABuwG8AdEBvAHSAdEBvAG9AdIBvQHTAdIBvQG+AdMBvgHUAdMBvgG/AdQBvwHVAdQBvwHAAdUBwAHWAdUBwAHBAdYBwQHXAdYBwQHCAdcBwgHYAdcBwgHDAdgBwwHZAdgBwwHEAdkBxAHaAdkBxAHFAdoBxQHbAdoBxQHGAdsBxgHcAdsBxgHHAdwBxwHdAdwBxwHIAd0ByAHeAd0ByAHJAd4ByQHfAd4ByQHKAd8BygHgAd8BygHLAeABywHhAeABywHMAeEBzAHiAeEBzAHNAeIBzQHjAeIBzQG4AeMBuAHOAeMBzgHPAeQBzwHlAeQBzwHQAeUB0AHmAeUB0AHRAeYB0QHnAeYB0QHSAecB0gHoAecB0gHTAegB0wHpAegB0wHUAekB1AHqAekB1AHVAeoB1QHrAeoB1QHWAesB1gHsAesB1gHXAewB1wHtAewB1wHYAe0B2AHuAe0B2AHZAe4B2QHvAe4B2QHaAe8B2gHwAe8B2gHbAfAB2wHxAfAB2wHcAfEB3AHyAfEB3AHdAfIB3QHzAfIB3QHeAfMB3gH0AfMB3gHfAfQB3wH1AfQB3wHgAfUB4AH2AfUB4AHhAfYB4QH3AfYB4QHiAfcB4gH4AfcB4gHjAfgB4wH5AfgB4wHOAfkBzgHkAfkB5AHlAfoB5QH7AfoB5QHmAfsB5gH8AfsB5gHnAfwB5wH9AfwB5wHoAf0B6AH+Af0B6AHpAf4B6QH/Af4B6QHqAf8B6gEAAv8B6gHrAQAC6wEBAgAC6wHsAQEC7AECAgEC7AHtAQIC7QEDAgIC7QHuAQMC7gEEAgMC7gHvAQQC7wEFAgQC7wHwAQUC8AEGAgUC8AHxAQYC8QEHAgYC8QHyAQcC8gEIAgcC8gHzAQgC8wEJAggC8wH0AQkC9AEKAgkC9AH1AQoC9QELAgoC9QH2AQsC9gEMAgsC9gH3AQwC9wENAgwC9wH4AQ0C+AEOAg0C+AH5AQ4C+QEPAg4C+QHkAQ8C5AH6AQ8C+gH7ARAC+wERAhAC+wH8AREC/AESAhEC/AH9ARIC/QETAhIC/QH+ARMC/gEUAhMC/gH/ARQC/wEVAhQC/wEAAhUCAAIWAhUCAAIBAhYCAQIXAhYCAQICAhcCAgIYAhcCAgIDAhgCAwIZAhgCAwIEAhkCBAIaAhkCBAIFAhoCBQIbAhoCBQIGAhsCBgIcAhsCBgIHAhwCBwIdAhwCBwIIAh0CCAIeAh0CCAIJAh4CCQIfAh4CCQIKAh8CCgIgAh8CCgILAiACCwIhAiACCwIMAiECDAIiAiECDAINAiICDQIjAiICDQIOAiMCDgIkAiMCDgIPAiQCDwIlAiQCDwL6ASUC+gEQAiUCEAIRAiYCEQInAiYCEQISAicCEgIoAicCEgITAigCEwIpAigCEwIUAikCFAIqAikCFAIVAioCFQIrAioCFQIWAisCFgIsAisCFgIXAiwCFwItAiwCFwIYAi0CGAIuAi0CGAIZAi4CGQIvAi4CGQIaAi8CGgIwAi8CGgIbAjACGwIxAjACGwIcAjECHAIyAjECHAIdAjICHQIzAjICHQIeAjMCHgI0AjMCHgIfAjQCHwI1AjQCHwIgAjUCIAI2AjUCIAIhAjYCIQI3AjYCIQIiAjcCIgI4AjcCIgIjAjgCIwI5AjgCIwIkAjkCJAI6AjkCJAIlAjoCJQI7AjoCJQIQAjsCEAImAjsCJgInAjwCJwI9AjwCJwIoAj0CKAI+Aj0CKAIpAj4CKQI/Aj4CKQIqAj8CKgJAAj8CKgIrAkACKwJBAkACKwIsAkECLAJCAkECLAItAkICLQJDAkICLQIuAkMCLgJEAkMCLgIvAkQCLwJFAkQCLwIwAkUCMAJGAkUCMAIxAkYCMQJHAkYCMQIyAkcCMgJIAkcCMgIzAkgCMwJJAkgCMwI0AkkCNAJKAkkCNAI1AkoCNQJLAkoCNQI2AksCNgJMAksCNgI3AkwCNwJNAkwCNwI4Ak0COAJOAk0COAI5Ak4COQJPAk4COQI6Ak8COgJQAk8COgI7AlACOwJRAlACOwImAlECJgI8AlECPAI9AlICPQJTAlICPQI+AlMCPgJUAlMCPgI/AlQCPwJVAlQCPwJAAlUCQAJWAlUCQAJBAlYCQQJXAlYCQQJCAlcCQgJYAlcCQgJDAlgCQwJZAlgCQwJEAlkCRAJaAlkCRAJFAloCRQJbAloCRQJGAlsCRgJcAlsCRgJHAlwCRwJdAlwCRwJIAl0CSAJeAl0CSAJJAl4CSQJfAl4CSQJKAl8CSgJgAl8CSgJLAmACSwJhAmACSwJMAmECTAJiAmECTAJNAmICTQJjAmICTQJOAmMCTgJkAmMCTgJPAmQCTwJlAmQCTwJQAmUCUAJmAmUCUAJRAmYCUQJnAmYCUQI8AmcCPAJSAmcCUgJTAmgCUwJpAmgCUwJUAmkCVAJqAmkCVAJVAmoCVQJrAmoCVQJWAmsCVgJsAmsCVgJXAmwCVwJtAmwCVwJYAm0CWAJuAm0CWAJZAm4CWQJvAm4CWQJaAm8CWgJwAm8CWgJbAnACWwJxAnACWwJcAnECXAJyAnECXAJdAnICXQJzAnICXQJeAnMCXgJ0AnMCXgJfAnQCXwJ1AnQCXwJgAnUCYAJ2AnUCYAJhAnYCYQJ3AnYCYQJiAncCYgJ4AncCYgJjAngCYwJ5AngCYwJkAnkCZAJ6AnkCZAJlAnoCZQJ7AnoCZQJmAnsCZgJ8AnsCZgJnAnwCZwJ9AnwCZwJSAn0CUgJoAn0CaAJpAn4CaQJ/An4CaQJqAn8CagKAAn8CagJrAoACawKBAoACawJsAoECbAKCAoECbAJtAoICbQKDAoICbQJuAoMCbgKEAoMCbgJvAoQCbwKFAoQCbwJwAoUCcAKGAoUCcAJxAoYCcQKHAoYCcQJyAocCcgKIAocCcgJzAogCcwKJAogCcwJ0AokCdAKKAokCdAJ1AooCdQKLAooCdQJ2AosCdgKMAosCdgJ3AowCdwKNAowCdwJ4Ao0CeAKOAo0CeAJ5Ao4CeQKPAo4CeQJ6Ao8CegKQAo8CegJ7ApACewKRApACewJ8ApECfAKSApECfAJ9ApICfQKTApICfQJoApMCaAJ+ApMCfgJ/ApQCfwKVApQCfwKAApUCgAKWApUCgAKBApYCgQKXApYCgQKCApcCggKYApcCggKDApgCgwKZApgCgwKEApkChAKaApkChAKFApoChQKbApoChQKGApsChgKcApsChgKHApwChwKdApwChwKIAp0CiAKeAp0CiAKJAp4CiQKfAp4CiQKKAp8CigKgAp8CigKLAqACiwKhAqACiwKMAqECjAKiAqECjAKNAqICjQKjAqICjQKOAqMCjgKkAqMCjgKPAqQCjwKlAqQCjwKQAqUCkAKmAqUCkAKRAqYCkQKnAqYCkQKSAqcCkgKoAqcCkgKTAqgCkwKpAqgCkwJ+AqkCfgKUAqkC","ao":"//779e7o4tzW0tLW4Oz3/f/////////9+fLr5N3W0c/R2eTw+f3////////+/Pfv597VzMfJ0Nrl8Pn9/////////vv17uTZzcK+xM/Z5O/4/f////////779u7k18i8usLO2ePu9/3////////++/fw5tfGubjBzdji7ff9/////////vz48ujZx7m3wMzX4u33/f////////79+fTq28i6t8DL1uHt9/3+///////+/fv27d3Jure/y9Xg7Pf8/v////////38+O/fy7u3v8rU4Oz2/P7////////+/Pnw4My8uL7J1N/r9vz+/v///////v368uLOvbi+ydPe6/b8/v7///////7++/Pjz764vsjS3ur2/P7+/////////vv05NC/uL3H0t3q9fz+/v////////789ObRwLi8xtHc6fX8/v7////////+/PXn08C3u8XQ2+n1/P7+//////////z26NTBt7rEz9rp9fz+/v/////////99unWw7i5w87a6PX8/v7//////////ffq18S5ucLN2ej1/P7+//////////3369nGubjBzNjo9fz+///////////9+OzbyLq4v8vY5/X8/v///////////fju3cm6t77J1+f0/P7///////////3579/Lu7a9ydfn9Pz+///////////++vDhzr22vcnX5/X8/v///////////vry5NLAusDM2un1/P7///////7+/v779OjXx8HH0t/r9fv9/v///v79/f39+/Xr3M7Jztji6/P5/P7+/v79/Pz9/Pv27eDTztHY4Ojx9/v9/f38/Pz8/fz79u7h08zP1t3m7/f7/f39/Pz9/f39+/bt3tDLz9be5/H4+/39/f38/f39/fr06NnMy9LZ4ev0+fz9/f39/Q=="},{"rings":30,"around":22,"pos":"IvC98f//E/Ax8JoAB/B77tIAC/D17PIAEfBv6/QAGPAb6vUAIvDK6PYAMfCv5/AAP/CQ5s8AcvC15IcAwvBl4/P/qvBl4/P/YPCz5F//NfCO5hr/K/Ct5/v+HvDI6Pj+FvAZ6vz+D/Bs6wD/CvDz7Af/BvB57ir/EfAv8Gb/HvC98f//Z+9l8EAAbu/m7tkAfu8y7Q4Bm++26ycBu+9A6iUB2O/36CIB9u+t5xoBE/Ca5g0BLfCC5eYAbfC445UAwfB64gEAwfB64gEAavC942//J/B+5Sr/C/CS5g3/6u+o5w3/y+/06Bv/ru876if/j++36zb/dO8w7WH/au/c7qX/Z+9l8EAAKO8O74AANu+a7RgBUe/q60kBee936lwBo+8T6VcBye/S51AB8O+Q5j4BE/CF5SkBMfB05PwAcfC74qMAv/CO4Q4Av/CO4Q4AZvDG4n//HPBt5Dr/+O925R3/0O+I5iL/p+/O5zr/ge8K6U//We976mX/Oe/o65n/Ku+J7eP/KO8O74AA6u627cAA/e5O7FgBJO+g6oMBV+846ZABi+/l54kBu++t5n8B6u9z5WMBEvBw5EYBNPBm4xMBdfC/4bIAvfCi4BwAvfCi4BwAYvDP4Y//EfBc40n/5u9b5C7/te9o5Tf/g++p5lr/Ve/Z53f/I+8/6ZX//e6h6tD/6+437CEA6u627cAAq+5e7AEBxO4A65cB9+5X6b4BNO/658QBc++45rsBru+I5a4B5e9W5IcBEvBb42MBOPBa4ikBefDD4MAAu/C23yoAu/C23yoAXvDW4KD/BvBL4lf/1O9A4z7/m+9J5Ez/X++E5Xv/Ke+n5p//7e4E6MT/we5b6QcArO7l6mAAq+5e7AEBa+4F60IBi+6y6dcBy+4O6PcBEu+85vgBW++L5e4Boe9j5N0B4O8446wBEvBH4n8BPPBO4UABffDI384AuPDK3jkAuPDK3jkAWvDd37D//O864Wb/w+8m4k3/gO8r42L/O+9f5Jz//e515cj/uO7I5vP/he4V6D4AbO6V6Z4Aa+4F60IBLO6s6YMBU+5j6BcCn+7E5jEC8O6A5SwCQ+9f5CEClO8+4w0C3O8b4tABEvAz4ZsBP/BD4FYBgPDN3t0AtvDd3UcAtvDd3UcAVvDj3sH/8u8o4HT/su8M4V3/Zu8N4nj/F+86477/0u5E5PH/g+6N5SIASu7Q5nQALO5E6NwALO6s6YMB7O1S6MUBGu4S51YCc+575WkCzu5E5GACK+8z41UCiO8Z4j0C2O/+4PUBEvAg4LcBQ/A532sBhPDS3esAs/Dv3FYAs/Dv3FYAUfDn3dH/6e8X34H/oO/z32z/S+/w4I7/9O4V4uD/qO4T4xoATe5S5FEADu6L5asA7O305hsB7O1S6MUBrO335gYC4e3B5ZYCR+4z5KICrO4J45QCE+8H4okCfe/14GwC1O/i3xkCEfAN39MBRvAv3oEBh/DY3PoAsPAA3GUAsPAA3GUATfDr3OH/3+8H3o7/j+/c3nv/Me/U36T/0e7w4AIAfu7i4UMAGO4Y438A0e1I5OIArO2k5VkBrO335gYCbO2b5UgCqe1v5NUCHO7r4toCiu7P4cgC++7b4L4Ccu/Q35wC0O/G3j0CEfD73e8BSPAm3ZcBivDd2wgBrfAR23QArfAR23QASfDu2/H/1u/33Jv/fu/F3Yv/Fu+43rv/ru7L3yUAVO6x4GsA4+3e4a4Ale0F4xgBbO1U5JgBbO2b5UgCLO0/5IoCcO0c4xQD8e2j4RMDaO6W4P0C4+6v3/MCZ++s3ssCzO+q3WACEPDp3AsCS/Ad3K0BjPDj2hcBqvAg2oMAqvAg2oMARvDv2gEAze/o26j/be+v3Jv/++6c3dP/i+6m3kcAKu6B35MAre2l4NwAWO3C4U8BK+0F49YBLO0/5IkC7Ozh4ssCOO3J4VIDxu1d4EsDRe5e3zIDy+6D3ikDXO+I3foCyO+P3IQCD/DX2yYCTfAV28MBj/Do2SYBqPAv2ZIAqPAv2ZIAQvDx2REAxe/a2rX/XO+a26v/4e6B3Oz/aO6B3WoAAO5S3rsAd+1s3wsBGu2A4IUB6+y14RUC7Ozh4ssCreyC4Q0DAe114JADmu0Y34MDIu4m3mgDs+5X3V8DUe9j3CgDxO9126cCDfDG2kICTvAN2tkBkfDt2DUBpfA82KEApfA82KEAP/Dx2CAAvO/N2cL/Su+H2rz/xu5m2wUARu5b3IwA1u0i3eMAQe0z3jkB3Ow+37wBquxl4FQCreyC4Q0Dbewi4E4Dyewh384Db+3T3bwDAO7w3J4DnO4r3JQDRu8/21UDv+9b2skCC/C12V0CT/AF2e8BlPDx10QBo/BJ168Ao/BJ168APfDx1y8As+/A2ND/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","hang":"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","uv":"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27b//wvD//88z///bdv//57n///O8////////w==","tri":"AAAWAAEAAQAWABcAAQAXAAIAAgAXABgAAgAYAAMAAwAYABkAAwAZAAQABAAZABoABAAaAAUABQAaABsABQAbAAYABgAbABwABgAcAAcABwAcAB0ABwAdAAgACAAdAB4ACAAeAAkACQAeAB8ACQAfAAoACgAfACAACgAgAAsACwAgACEACwAhAAwADAAhACIADAAiAA0ADQAiACMADQAjAA4ADgAjACQADgAkAA8ADwAkACUADwAlABAAEAAlACYAEAAmABEAEQAmACcAEQAnABIAEgAnACgAEgAoABMAEwAoACkAEwApABQAFAApACoAFAAqABUAFQAqACsAFQArAAAAAAArABYAFgAsABcAFwAsAC0AFwAtABgAGAAtAC4AGAAuABkAGQAuAC8AGQAvABoAGgAvADAAGgAwABsAGwAwADEAGwAxABwAHAAxADIAHAAyAB0AHQAyADMAHQAzAB4AHgAzADQAHgA0AB8AHwA0ADUAHwA1ACAAIAA1ADYAIAA2ACEAIQA2ADcAIQA3ACIAIgA3ADgAIgA4ACMAIwA4ADkAIwA5ACQAJAA5ADoAJAA6ACUAJQA6ADsAJQA7ACYAJgA7ADwAJgA8ACcAJwA8AD0AJwA9ACgAKAA9AD4AKAA+ACkAKQA+AD8AKQA/ACoAKgA/AEAAKgBAACsAKwBAAEEAKwBBABYAFgBBACwALABCAC0ALQBCAEMALQBDAC4ALgBDAEQALgBEAC8ALwBEAEUALwBFADAAMABFAEYAMABGADEAMQBGAEcAMQBHADIAMgBHAEgAMgBIADMAMwBIAEkAMwBJADQANABJAEoANABKADUANQBKAEsANQBLADYANgBLAEwANgBMADcANwBMAE0ANwBNADgAOABNAE4AOABOADkAOQBOAE8AOQBPADoAOgBPAFAAOgBQADsAOwBQAFEAOwBRADwAPABRAFIAPABSAD0APQBSAFMAPQBTAD4APgBTAFQAPgBUAD8APwBUAFUAPwBVAEAAQABVAFYAQABWAEEAQQBWAFcAQQBXACwALABXAEIAQgBYAEMAQwBYAFkAQwBZAEQARABZAFoARABaAEUARQBaAFsARQBbAEYARgBbAFwARgBcAEcARwBcAF0ARwBdAEgASABdAF4ASABeAEkASQBeAF8ASQBfAEoASgBfAGAASgBgAEsASwBgAGEASwBhAEwATABhAGIATABiAE0ATQBiAGMATQBjAE4ATgBjAGQATgBkAE8ATwBkAGUATwBlAFAAUABlAGYAUABmAFEAUQBmAGcAUQBnAFIAUgBnAGgAUgBoAFMAUwBoAGkAUwBpAFQAVABpAGoAVABqAFUAVQBqAGsAVQBrAFYAVgBrAGwAVgBsAFcAVwBsAG0AVwBtAEIAQgBtAFgAWABuAFkAWQBuAG8AWQBvAFoAWgBvAHAAWgBwAFsAWwBwAHEAWwBxAFwAXABxAHIAXAByAF0AXQByAHMAXQBzAF4AXgBzAHQAXgB0AF8AXwB0AHUAXwB1AGAAYAB1AHYAYAB2AGEAYQB2AHcAYQB3AGIAYgB3AHgAYgB4AGMAYwB4AHkAYwB5AGQAZAB5AHoAZAB6AGUAZQB6AHsAZQB7AGYAZgB7AHwAZgB8AGcAZwB8AH0AZwB9AGgAaAB9AH4AaAB+AGkAaQB+AH8AaQB/AGoAagB/AIAAagCAAGsAawCAAIEAawCBAGwAbACBAIIAbACCAG0AbQCCAIMAbQCDAFgAWACDAG4AbgCEAG8AbwCEAIUAbwCFAHAAcACFAIYAcACGAHEAcQCGAIcAcQCHAHIAcgCHAIgAcgCIAHMAcwCIAIkAcwCJAHQAdACJAIoAdACKAHUAdQCKAIsAdQCLAHYAdgCLAIwAdgCMAHcAdwCMAI0AdwCNAHgAeACNAI4AeACOAHkAeQCOAI8AeQCPAHoAegCPAJAAegCQAHsAewCQAJEAewCRAHwAfACRAJIAfACSAH0AfQCSAJMAfQCTAH4AfgCTAJQAfgCUAH8AfwCUAJUAfwCVAIAAgACVAJYAgACWAIEAgQCWAJcAgQCXAIIAggCXAJgAggCYAIMAgwCYAJkAgwCZAG4AbgCZAIQAhACaAIUAhQCaAJsAhQCbAIYAhgCbAJwAhgCcAIcAhwCcAJ0AhwCdAIgAiACdAJ4AiACeAIkAiQCeAJ8AiQCfAIoAigCfAKAAigCgAIsAiwCgAKEAiwChAIwAjAChAKIAjACiAI0AjQCiAKMAjQCjAI4AjgCjAKQAjgCkAI8AjwCkAKUAjwClAJAAkAClAKYAkACmAJEAkQCmAKcAkQCnAJIAkgCnAKgAkgCoAJMAkwCoAKkAkwCpAJQAlACpAKoAlACqAJUAlQCqAKsAlQCrAJYAlgCrAKwAlgCsAJcAlwCsAK0AlwCtAJgAmACtAK4AmACuAJkAmQCuAK8AmQCvAIQAhACvAJoAmgCwAJsAmwCwALEAmwCxAJwAnACxALIAnACyAJ0AnQCyALMAnQCzAJ4AngCzALQAngC0AJ8AnwC0ALUAnwC1AKAAoAC1ALYAoAC2AKEAoQC2ALcAoQC3AKIAogC3ALgAogC4AKMAowC4ALkAowC5AKQApAC5ALoApAC6AKUApQC6ALsApQC7AKYApgC7ALwApgC8AKcApwC8AL0ApwC9AKgAqAC9AL4AqAC+AKkAqQC+AL8AqQC/AKoAqgC/AMAAqgDAAKsAqwDAAMEAqwDBAKwArADBAMIArADCAK0ArQDCAMMArQDDAK4ArgDDAMQArgDEAK8ArwDEAMUArwDFAJoAmgDFALAAsADGALEAsQDGAMcAsQDHALIAsgDHAMgAsgDIALMAswDIAMkAswDJALQAtADJAMoAtADKALUAtQDKAMsAtQDLALYAtgDLAMwAtgDMALcAtwDMAM0AtwDNALgAuADNAM4AuADOALkAuQDOAM8AuQDPALoAugDPANAAugDQALsAuwDQANEAuwDRALwAvADRANIAvADSAL0AvQDSANMAvQDTAL4AvgDTANQAvgDUAL8AvwDUANUAvwDVAMAAwADVANYAwADWAMEAwQDWANcAwQDXAMIAwgDXANgAwgDYAMMAwwDYANkAwwDZAMQAxADZANoAxADaAMUAxQDaANsAxQDbALAAsADbAMYAxgDcAMcAxwDcAN0AxwDdAMgAyADdAN4AyADeAMkAyQDeAN8AyQDfAMoAygDfAOAAygDgAMsAywDgAOEAywDhAMwAzADhAOIAzADiAM0AzQDiAOMAzQDjAM4AzgDjAOQAzgDkAM8AzwDkAOUAzwDlANAA0ADlAOYA0ADmANEA0QDmAOcA0QDnANIA0gDnAOgA0gDoANMA0wDoAOkA0wDpANQA1ADpAOoA1ADqANUA1QDqAOsA1QDrANYA1gDrAOwA1gDsANcA1wDsAO0A1wDtANgA2ADtAO4A2ADuANkA2QDuAO8A2QDvANoA2gDvAPAA2gDwANsA2wDwAPEA2wDxAMYAxgDxANwA3ADyAN0A3QDyAPMA3QDzAN4A3gDzAPQA3gD0AN8A3wD0APUA3wD1AOAA4AD1APYA4AD2AOEA4QD2APcA4QD3AOIA4gD3APgA4gD4AOMA4wD4APkA4wD5AOQA5AD5APoA5AD6AOUA5QD6APsA5QD7AOYA5gD7APwA5gD8AOcA5wD8AP0A5wD9AOgA6AD9AP4A6AD+AOkA6QD+AP8A6QD/AOoA6gD/AAAB6gAAAesA6wAAAQEB6wABAewA7AABAQIB7AACAe0A7QACAQMB7QADAe4A7gADAQQB7gAEAe8A7wAEAQUB7wAFAfAA8AAFAQYB8AAGAfEA8QAGAQcB8QAHAdwA3AAHAfIA8gAIAfMA8wAIAQkB8wAJAfQA9AAJAQoB9AAKAfUA9QAKAQsB9QALAfYA9gALAQwB9gAMAfcA9wAMAQ0B9wANAfgA+AANAQ4B+AAOAfkA+QAOAQ8B+QAPAfoA+gAPARAB+gAQAfsA+wAQAREB+wARAfwA/AARARIB/AASAf0A/QASARMB/QATAf4A/gATARQB/gAUAf8A/wAUARUB/wAVAQABAAEVARYBAAEWAQEBAQEWARcBAQEXAQIBAgEXARgBAgEYAQMBAwEYARkBAwEZAQQBBAEZARoBBAEaAQUBBQEaARsBBQEbAQYBBgEbARwBBgEcAQcBBwEcAR0BBwEdAfIA8gAdAQgBCAEeAQkBCQEeAR8BCQEfAQoBCgEfASABCgEgAQsBCwEgASEBCwEhAQwBDAEhASIBDAEiAQ0BDQEiASMBDQEjAQ4BDgEjASQBDgEkAQ8BDwEkASUBDwElARABEAElASYBEAEmAREBEQEmAScBEQEnARIBEgEnASgBEgEoARMBEwEoASkBEwEpARQBFAEpASoBFAEqARUBFQEqASsBFQErARYBFgErASwBFgEsARcBFwEsAS0BFwEtARgBGAEtAS4BGAEuARkBGQEuAS8BGQEvARoBGgEvATABGgEwARsBGwEwATEBGwExARwBHAExATIBHAEyAR0BHQEyATMBHQEzAQgBCAEzAR4BHgE0AR8BHwE0ATUBHwE1ASABIAE1ATYBIAE2ASEBIQE2ATcBIQE3ASIBIgE3ATgBIgE4ASMBIwE4ATkBIwE5ASQBJAE5AToBJAE6ASUBJQE6ATsBJQE7ASYBJgE7ATwBJgE8AScBJwE8AT0BJwE9ASgBKAE9AT4BKAE+ASkBKQE+AT8BKQE/ASoBKgE/AUABKgFAASsBKwFAAUEBKwFBASwBLAFBAUIBLAFCAS0BLQFCAUMBLQFDAS4BLgFDAUQBLgFEAS8BLwFEAUUBLwFFATABMAFFAUYBMAFGATEBMQFGAUcBMQFHATIBMgFHAUgBMgFIATMBMwFIAUkBMwFJAR4BHgFJATQBNAFKATUBNQFKAUsBNQFLATYBNgFLAUwBNgFMATcBNwFMAU0BNwFNATgBOAFNAU4BOAFOATkBOQFOAU8BOQFPAToBOgFPAVABOgFQATsBOwFQAVEBOwFRATwBPAFRAVIBPAFSAT0BPQFSAVMBPQFTAT4BPgFTAVQBPgFUAT8BPwFUAVUBPwFVAUABQAFVAVYBQAFWAUEBQQFWAVcBQQFXAUIBQgFXAVgBQgFYAUMBQwFYAVkBQwFZAUQBRAFZAVoBRAFaAUUBRQFaAVsBRQFbAUYBRgFbAVwBRgFcAUcBRwFcAV0BRwFdAUgBSAFdAV4BSAFeAUkBSQFeAV8BSQFfATQBNAFfAUoBSgFgAUsBSwFgAWEBSwFhAUwBTAFhAWIBTAFiAU0BTQFiAWMBTQFjAU4BTgFjAWQBTgFkAU8BTwFkAWUBTwFlAVABUAFlAWYBUAFmAVEBUQFmAWcBUQFnAVIBUgFnAWgBUgFoAVMBUwFoAWkBUwFpAVQBVAFpAWoBVAFqAVUBVQFqAWsBVQFrAVYBVgFrAWwBVgFsAVcBVwFsAW0BVwFtAVgBWAFtAW4BWAFuAVkBWQFuAW8BWQFvAVoBWgFvAXABWgFwAVsBWwFwAXEBWwFxAVwBXAFxAXIBXAFyAV0BXQFyAXMBXQFzAV4BXgFzAXQBXgF0AV8BXwF0AXUBXwF1AUoBSgF1AWABYAF2AWEBYQF2AXcBYQF3AWIBYgF3AXgBYgF4AWMBYwF4AXkBYwF5AWQBZAF5AXoBZAF6AWUBZQF6AXsBZQF7AWYBZgF7AXwBZgF8AWcBZwF8AX0BZwF9AWgBaAF9AX4BaAF+AWkBaQF+AX8BaQF/AWoBagF/AYABagGAAWsBawGAAYEBawGBAWwBbAGBAYIBbAGCAW0BbQGCAYMBbQGDAW4BbgGDAYQBbgGEAW8BbwGEAYUBbwGFAXABcAGFAYYBcAGGAXEBcQGGAYcBcQGHAXIBcgGHAYgBcgGIAXMBcwGIAYkBcwGJAXQBdAGJAYoBdAGKAXUBdQGKAYsBdQGLAWABYAGLAXYBdgGMAXcBdwGMAY0BdwGNAXgBeAGNAY4BeAGOAXkBeQGOAY8BeQGPAXoBegGPAZABegGQAXsBewGQAZEBewGRAXwBfAGRAZIBfAGSAX0BfQGSAZMBfQGTAX4BfgGTAZQBfgGUAX8BfwGUAZUBfwGVAYABgAGVAZYBgAGWAYEBgQGWAZcBgQGXAYIBggGXAZgBggGYAYMBgwGYAZkBgwGZAYQBhAGZAZoBhAGaAYUBhQGaAZsBhQGbAYYBhgGbAZwBhgGcAYcBhwGcAZ0BhwGdAYgBiAGdAZ4BiAGeAYkBiQGeAZ8BiQGfAYoBigGfAaABigGgAYsBiwGgAaEBiwGhAXYBdgGhAYwBjAGiAY0BjQGiAaMBjQGjAY4BjgGjAaQBjgGkAY8BjwGkAaUBjwGlAZABkAGlAaYBkAGmAZEBkQGmAacBkQGnAZIBkgGnAagBkgGoAZMBkwGoAakBkwGpAZQBlAGpAaoBlAGqAZUBlQGqAasBlQGrAZYBlgGrAawBlgGsAZcBlwGsAa0BlwGtAZgBmAGtAa4BmAGuAZkBmQGuAa8BmQGvAZoBmgGvAbABmgGwAZsBmwGwAbEBmwGxAZwBnAGxAbIBnAGyAZ0BnQGyAbMBnQGzAZ4BngGzAbQBngG0AZ8BnwG0AbUBnwG1AaABoAG1AbYBoAG2AaEBoQG2AbcBoQG3AYwBjAG3AaIBogG4AaMBowG4AbkBowG5AaQBpAG5AboBpAG6AaUBpQG6AbsBpQG7AaYBpgG7AbwBpgG8AacBpwG8Ab0BpwG9AagBqAG9Ab4BqAG+AakBqQG+Ab8BqQG/AaoBqgG/AcABqgHAAasBqwHAAcEBqwHBAawBrAHBAcIBrAHCAa0BrQHCAcMBrQHDAa4BrgHDAcQBrgHEAa8BrwHEAcUBrwHFAbABsAHFAcYBsAHGAbEBsQHGAccBsQHHAbIBsgHHAcgBsgHIAbMBswHIAckBswHJAbQBtAHJAcoBtAHKAbUBtQHKAcsBtQHLAbYBtgHLAcwBtgHMAbcBtwHMAc0BtwHNAaIBogHNAbgBuAHOAbkBuQHOAc8BuQHPAboBugHPAdABugHQAbsBuwHQAdEBuwHRAbwBvAHRAdIBvAHSAb0BvQHSAdMBvQHTAb4BvgHTAdQBvgHUAb8BvwHUAdUBvwHVAcABwAHVAdYBwAHWAcEBwQHWAdcBwQHXAcIBwgHXAdgBwgHYAcMBwwHYAdkBwwHZAcQBxAHZAdoBxAHaAcUBxQHaAdsBxQHbAcYBxgHbAdwBxgHcAccBxwHcAd0BxwHdAcgByAHdAd4ByAHeAckByQHeAd8ByQHfAcoBygHfAeABygHgAcsBywHgAeEBywHhAcwBzAHhAeIBzAHiAc0BzQHiAeMBzQHjAbgBuAHjAc4BzgHkAc8BzwHkAeUBzwHlAdAB0AHlAeYB0AHmAdEB0QHmAecB0QHnAdIB0gHnAegB0gHoAdMB0wHoAekB0wHpAdQB1AHpAeoB1AHqAdUB1QHqAesB1QHrAdYB1gHrAewB1gHsAdcB1wHsAe0B1wHtAdgB2AHtAe4B2AHuAdkB2QHuAe8B2QHvAdoB2gHvAfAB2gHwAdsB2wHwAfEB2wHxAdwB3AHxAfIB3AHyAd0B3QHyAfMB3QHzAd4B3gHzAfQB3gH0Ad8B3wH0AfUB3wH1AeAB4AH1AfYB4AH2AeEB4QH2AfcB4QH3AeIB4gH3AfgB4gH4AeMB4wH4AfkB4wH5Ac4BzgH5AeQB5AH6AeUB5QH6AfsB5QH7AeYB5gH7AfwB5gH8AecB5wH8Af0B5wH9AegB6AH9Af4B6AH+AekB6QH+Af8B6QH/AeoB6gH/AQAC6gEAAusB6wEAAgEC6wEBAuwB7AEBAgIC7AECAu0B7QECAgMC7QEDAu4B7gEDAgQC7gEEAu8B7wEEAgUC7wEFAvAB8AEFAgYC8AEGAvEB8QEGAgcC8QEHAvIB8gEHAggC8gEIAvMB8wEIAgkC8wEJAvQB9AEJAgoC9AEKAvUB9QEKAgsC9QELAvYB9gELAgwC9gEMAvcB9wEMAg0C9wENAvgB+AENAg4C+AEOAvkB+QEOAg8C+QEPAuQB5AEPAvoB+gEQAvsB+wEQAhEC+wERAvwB/AERAhIC/AESAv0B/QESAhMC/QETAv4B/gETAhQC/gEUAv8B/wEUAhUC/wEVAgACAAIVAhYCAAIWAgECAQIWAhcCAQIXAgICAgIXAhgCAgIYAgMCAwIYAhkCAwIZAgQCBAIZAhoCBAIaAgUCBQIaAhsCBQIbAgYCBgIbAhwCBgIcAgcCBwIcAh0CBwIdAggCCAIdAh4CCAIeAgkCCQIeAh8CCQIfAgoCCgIfAiACCgIgAgsCCwIgAiECCwIhAgwCDAIhAiICDAIiAg0CDQIiAiMCDQIjAg4CDgIjAiQCDgIkAg8CDwIkAiUCDwIlAvoB+gElAhACEAImAhECEQImAicCEQInAhICEgInAigCEgIoAhMCEwIoAikCEwIpAhQCFAIpAioCFAIqAhUCFQIqAisCFQIrAhYCFgIrAiwCFgIsAhcCFwIsAi0CFwItAhgCGAItAi4CGAIuAhkCGQIuAi8CGQIvAhoCGgIvAjACGgIwAhsCGwIwAjECGwIxAhwCHAIxAjICHAIyAh0CHQIyAjMCHQIzAh4CHgIzAjQCHgI0Ah8CHwI0AjUCHwI1AiACIAI1AjYCIAI2AiECIQI2AjcCIQI3AiICIgI3AjgCIgI4AiMCIwI4AjkCIwI5AiQCJAI5AjoCJAI6AiUCJQI6AjsCJQI7AhACEAI7AiYCJgI8AicCJwI8Aj0CJwI9AigCKAI9Aj4CKAI+AikCKQI+Aj8CKQI/AioCKgI/AkACKgJAAisCKwJAAkECKwJBAiwCLAJBAkICLAJCAi0CLQJCAkMCLQJDAi4CLgJDAkQCLgJEAi8CLwJEAkUCLwJFAjACMAJFAkYCMAJGAjECMQJGAkcCMQJHAjICMgJHAkgCMgJIAjMCMwJIAkkCMwJJAjQCNAJJAkoCNAJKAjUCNQJKAksCNQJLAjYCNgJLAkwCNgJMAjcCNwJMAk0CNwJNAjgCOAJNAk4COAJOAjkCOQJOAk8COQJPAjoCOgJPAlACOgJQAjsCOwJQAlECOwJRAiYCJgJRAjwCPAJSAj0CPQJSAlMCPQJTAj4CPgJTAlQCPgJUAj8CPwJUAlUCPwJVAkACQAJVAlYCQAJWAkECQQJWAlcCQQJXAkICQgJXAlgCQgJYAkMCQwJYAlkCQwJZAkQCRAJZAloCRAJaAkUCRQJaAlsCRQJbAkYCRgJbAlwCRgJcAkcCRwJcAl0CRwJdAkgCSAJdAl4CSAJeAkkCSQJeAl8CSQJfAkoCSgJfAmACSgJgAksCSwJgAmECSwJhAkwCTAJhAmICTAJiAk0CTQJiAmMCTQJjAk4CTgJjAmQCTgJkAk8CTwJkAmUCTwJlAlACUAJlAmYCUAJmAlECUQJmAmcCUQJnAjwCPAJnAlICUgJoAlMCUwJoAmkCUwJpAlQCVAJpAmoCVAJqAlUCVQJqAmsCVQJrAlYCVgJrAmwCVgJsAlcCVwJsAm0CVwJtAlgCWAJtAm4CWAJuAlkCWQJuAm8CWQJvAloCWgJvAnACWgJwAlsCWwJwAnECWwJxAlwCXAJxAnICXAJyAl0CXQJyAnMCXQJzAl4CXgJzAnQCXgJ0Al8CXwJ0AnUCXwJ1AmACYAJ1AnYCYAJ2AmECYQJ2AncCYQJ3AmICYgJ3AngCYgJ4AmMCYwJ4AnkCYwJ5AmQCZAJ5AnoCZAJ6AmUCZQJ6AnsCZQJ7AmYCZgJ7AnwCZgJ8AmcCZwJ8An0CZwJ9AlICUgJ9AmgCaAJ+AmkCaQJ+An8CaQJ/AmoCagJ/AoACagKAAmsCawKAAoECawKBAmwCbAKBAoICbAKCAm0CbQKCAoMCbQKDAm4CbgKDAoQCbgKEAm8CbwKEAoUCbwKFAnACcAKFAoYCcAKGAnECcQKGAocCcQKHAnICcgKHAogCcgKIAnMCcwKIAokCcwKJAnQCdAKJAooCdAKKAnUCdQKKAosCdQKLAnYCdgKLAowCdgKMAncCdwKMAo0CdwKNAngCeAKNAo4CeAKOAnkCeQKOAo8CeQKPAnoCegKPApACegKQAnsCewKQApECewKRAnwCfAKRApICfAKSAn0CfQKSApMCfQKTAmgCaAKTAn4CfgKUAn8CfwKUApUCfwKVAoACgAKVApYCgAKWAoECgQKWApcCgQKXAoICggKXApgCggKYAoMCgwKYApkCgwKZAoQChAKZApoChAKaAoUChQKaApsChQKbAoYChgKbApwChgKcAocChwKcAp0ChwKdAogCiAKdAp4CiAKeAokCiQKeAp8CiQKfAooCigKfAqACigKgAosCiwKgAqECiwKhAowCjAKhAqICjAKiAo0CjQKiAqMCjQKjAo4CjgKjAqQCjgKkAo8CjwKkAqUCjwKlApACkAKlAqYCkAKmApECkQKmAqcCkQKnApICkgKnAqgCkgKoApMCkwKoAqkCkwKpAn4CfgKpApQC","ao":"///9+vbw6uPa09DT3Or2/f/////////+/Pfy6+Pa0s7P1uHv+f3//////////fnz6+LYzsfIztfk8Pj9/////////vz37+bbzsO+w83Y4+/4/f////////779u/l2Mm9usHN1+Lt9/3////////++/fw5tjHurjAzNfh7ff9/////////vz48ujZx7m3wMvW4Oz3/P////////79+fTr28i5t7/K1N/s9vz+///////+/fv27d3Jure+ydPf6/b8/v////////38+O/eyru3vsjS3uv2/P7////////+/Pnw4My8t73H0t3q9fz+/v///////v368uLNvbe9x9Hc6fX8/v7///////7++/Pjz723vMbQ2+n1/P7+/////////vv05NC+t7vFz9ro9fz+/v////////789OXRv7e6xM7a5/T8/v7////////+/PXm0sC2ucPN2ef0/P7+//////////z259TBt7nCzNjm9Pv+/v/////////99unVwre4wcvX5vT7/v7//////////ffq18S4uMDK1uX0+/7+//////////3369nGubi/ydXl8/v+///////////9+OzbyLq3vsjU5PP7/v///////////fju3cm6tr3H1OTz+/7///////////3579/Lu7a8xtPk8/v+///////////++vDhzr22vMbU5fP7/v///////////vry5NLBur/K1+f0+/7///////7+/v379OjXx8HG0Nzq9Pr9/v///v79/f39+/Xr3M/Kztfg6vP5/P7+/v79/Pz9/Pv27eDUztHY4Ojw9/v9/f38/Pz8/fz79u7h1M3Q1t3m7/b6/P39/Pz9/f39+/bt39HMz9bd5/D3+/39/f38/f39/fr06dnNzNLZ4evz+fz9/f39/Q=="}],
    neck: [110,111,112,113,114,115,0,1,2,3,4,5,6,917,916,915,914,913,912,911,1026,1025,1024,1023,1022,1021],
  },
  shirt: {
    pattern: {"half":0.245,"shoulderX":0.275,"shoulderDrop":0.072,"neckHalf":0.095,"neckFront":0.2,"neckBack":0.03,"armpit":0.37,"sleeve":{"top":0.27,"under":0.14,"cuff":0.48},"length":0.84,"vNeck":true,"open":{"chest":0.024,"hem":0.05,"sleeveRoot":0.045,"cuff":0.052}},
    front: {"pat":"AAAz88MAn/SFAQv2LgJT99YCm/hlA7759APh+mgE4PvdBN/8kwWU/hQGAABcB33/pAj6/uwJd/4zC/T9ewxx/cMN7vwKD2r8UhDn+5oRZPuPEeT5hBFk+HoR5PZoEZD1VxE99EYR6vIiETLx/hB579AQBO6iEI/sahBe6zIQLequD1Lorg/r5q4PhOWuDx3krg+24q4PT+GuD+nfrg+C3q4PG92uD7Tbrg9N2q4P5tiuD3/Xrg8Y1q4PsdSuD0vTrg/k0a4PfdCuDxbPrg+vza4PSMyuD+HKCg89yqwNPcpODD3K8Ao9ypIJPco0CD3K1gY9yngFPcoaBD3KvAI9yl4BPcoAAD3Kov49ykT9Pcrm+z3KiPo9yir5PcrM9z3KbvY9yhD1Pcqy8z3KVPI9yvbwPcpS8OHKUvBIzFLwr81S8BbPUvB90FLw5NFS8EvTUvCx1FLwGNZS8H/XUvDm2FLwTdpS8LTbUvAb3VLwgt5S8OnfUvBP4VLwtuJS8B3kUvCE5VLw6+ZS8FLozu8t6pbvXute74/sMO8E7gLvee/e7jLxuu7q8qnuPfSY7pD1hu7k9nzuZPhx7uT5Zu5k+67v5/v28Gr8PfLu/IXzcf3N9PT9FPZ3/lz3+v6k+H3/7PkAAG36lP4j+9/8mPvg+wz84fqb/L75Kv2b+NL9U/d7/gv2Pf+f9OzxEsxU8xLMvPQSzCX2EsyN9xLM9vgSzF76EszH+xLML/0SzJj+EswAABLMaAESzNECEsw5BBLMogUSzAoHEsxzCBLM2wkSzEQLEsysDBLMFA4SzDfxSs2g8krNCPRKzXH1Ss3Z9krNQvhKzar5Ss0S+0rNe/xKzeP9Ss1M/0rNtABKzR0CSs2FA0rN7gRKzVYGSs2+B0rNJwlKzY8KSs34C0rNYA1KzckOSs3s8YLOVPOCzrz0gs4l9oLOjfeCzvb4gs5e+oLOx/uCzi/9gs6Y/oLOAACCzmgBgs7RAoLOOQSCzqIFgs4KB4LOcwiCztsJgs5EC4LOrAyCzhQOgs438brPoPK6zwj0us9x9brP2fa6z0L4us+q+brPEvu6z3v8us/j/brPTP+6z7QAus8dArrPhQO6z+4Eus9WBrrPvge6zycJus+PCrrP+Au6z2ANus/JDrrP7PHy0FTz8tC89PLQJfby0I338tD2+PLQXvry0Mf78tAv/fLQmP7y0AAA8tBoAfLQ0QLy0DkE8tCiBfLQCgfy0HMI8tDbCfLQRAvy0KwM8tAUDvLQN/Eq0qDyKtII9CrScfUq0tn2KtJC+CrSqvkq0hL7KtJ7/CrS4/0q0kz/KtK0ACrSHQIq0oUDKtLuBCrSVgYq0r4HKtInCSrSjwoq0vgLKtJgDSrSyQ4q0uzxY9NU82PTvPRj0yX2Y9ON92PT9vhj0176Y9PH+2PTL/1j05j+Y9MAAGPTaAFj09ECY9M5BGPTogVj0woHY9NzCGPT2wlj00QLY9OsDGPTFA5j0zfxm9Sg8pvUCPSb1HH1m9TZ9pvUQvib1Kr5m9QS+5vUe/yb1OP9m9RM/5vUtACb1B0Cm9SFA5vU7gSb1FYGm9S+B5vUJwmb1I8Km9T4C5vUYA2b1MkOm9Ts8dPVVPPT1bz009Ul9tPVjffT1fb409Ve+tPVx/vT1S/909WY/tPVAADT1WgB09XRAtPVOQTT1aIF09UKB9PVcwjT1dsJ09VEC9PVrAzT1RQO09U38QvXoPIL1wj0C9dx9QvX2fYL10L4C9eq+QvXEvsL13v8C9fj/QvXTP8L17QAC9cdAgvXhQML1+4EC9dWBgvXvgcL1ycJC9ePCgvX+AsL12ANC9fJDgvX7PFD2FTzQ9i89EPYJfZD2I33Q9j2+EPYXvpD2Mf7Q9gv/UPYmP5D2AAAQ9hoAUPY0QJD2DkEQ9iiBUPYCgdD2HMIQ9jbCUPYRAtD2KwMQ9gUDkPYN/F72aDye9kI9HvZcfV72dn2e9lC+HvZqvl72RL7e9l7/HvZ4/172Uz/e9m0AHvZHQJ72YUDe9nuBHvZVgZ72b4He9knCXvZjwp72fgLe9lgDXvZyQ572ezxtNpU87TavPS02iX2tNqN97Ta9vi02l76tNrH+7TaL/202pj+tNoAALTaaAG02tECtNo5BLTaogW02goHtNpzCLTa2wm02kQLtNqsDLTaFA602jfx7Nug8uzbCPTs23H17NvZ9uzbQvjs26r57NsS++zbe/zs2+P97NtM/+zbtADs2x0C7NuFA+zb7gTs21YG7Nu+B+zbJwns248K7Nv4C+zbYA3s28kO7Nvs8STdVPMk3bz0JN0l9iTdjfck3fb4JN1e+iTdx/sk3S/9JN2Y/iTdAAAk3WgBJN3RAiTdOQQk3aIFJN0KByTdcwgk3dsJJN1ECyTdrAwk3RQOJN038VzeoPJc3gj0XN5x9Vze2fZc3kL4XN6q+VzeEvtc3nv8XN7j/VzeTP9c3rQAXN4dAlzehQNc3u4EXN5WBlzevgdc3icJXN6PClze+Atc3mANXN7JDlze7PGU31TzlN+89JTfJfaU3433lN/2+JTfXvqU38f7lN8v/ZTfmP6U3wAAlN9oAZTf0QKU3zkElN+iBZTfCgeU33MIlN/bCZTfRAuU36wMlN8UDpTfN/HM4KDyzOAI9MzgcfXM4Nn2zOBC+MzgqvnM4BL7zOB7/Mzg4/3M4Ez/zOC0AMzgHQLM4IUDzODuBMzgVgbM4L4HzOAnCczgjwrM4PgLzOBgDczgyQ7M4OzxBeJU8wXivPQF4iX2BeKN9wXi9vgF4l76BeLH+wXiL/0F4pj+BeIAAAXiaAEF4tECBeI5BAXiogUF4goHBeJzCAXi2wkF4kQLBeKsDAXiFA4F4jfxPeOg8j3jCPQ943H1PePZ9j3jQvg946r5PeMS+z3je/w94+P9PeNM/z3jtAA94x0CPeOFAz3j7gQ941YGPeO+Bz3jJwk9448KPeP4Cz3jYA0948kOPePs8XXkVPN15Lz0deQl9nXkjfd15Pb4deRe+nXkx/t15C/9deSY/nXkAAB15GgBdeTRAnXkOQR15KIFdeQKB3Xkcwh15NsJdeREC3XkrAx15BQOdeQ38a3loPKt5Qj0reVx9a3l2fat5UL4reWq+a3lEvut5Xv8reXj/a3lTP+t5bQAreUdAq3lhQOt5e4EreVWBq3lvget5ScJreWPCq3l+Aut5WANreXJDq3l7PHl5lTz5ea89OXmJfbl5o335eb2+OXmXvrl5sf75eYv/eXmmP7l5gAA5eZoAeXm0QLl5jkE5eaiBeXmCgfl5nMI5ebbCeXmRAvl5qwM5eYUDuXmN/Ed6KDyHegI9B3ocfUd6Nn2HehC+B3oqvkd6BL7Heh7/B3o4/0d6Ez/Hei0AB3oHQId6IUDHejuBB3oVgYd6L4HHegnCR3ojwod6PgLHehgDR3oyQ4d6OzxVelU81XpvPRV6SX2VemN91Xp9vhV6V76VenH+1XpL/1V6Zj+VekAAFXpaAFV6dECVek5BFXpogVV6QoHVelzCFXp2wlV6UQLVemsDFXpFA5V6Tfxjuqg8o7qCPSO6nH1jurZ9o7qQviO6qr5juoS+47qe/yO6uP9jupM/47qtACO6h0CjuqFA47q7gSO6lYGjuq+B47qJwmO6o8Kjur4C47qYA2O6skOjuqD8Mbr7PHG61Tzxuu89MbrJfbG6433xuv2+MbrXvrG68f7xusv/cbrmP7G6wAAxutoAcbr0QLG6zkExuuiBcbrCgfG63MIxuvbCcbrRAvG66wMxusUDsbrfQ/G6zfx/uyg8v7sCPT+7HH1/uzZ9v7sQvj+7Kr5/uwS+/7se/z+7OP9/uxM//7stAD+7B0C/uyFA/7s7gT+7FYG/uy+B/7sJwn+7I8K/uz4C/7sYA3+7MkO/uyD8Dbu7PE27lTzNu689DbuJfY27o33Nu72+DbuXvo27sf7Nu4v/TbumP427gAANu5oATbu0QI27jkENu6iBTbuCgc27nMINu7bCTbuRAs27qwMNu4UDjbufQ827s/vbu838W7voPJu7wj0bu9x9W7v2fZu70L4bu+q+W7vEvtu73v8bu/j/W7vTP9u77QAbu8dAm7vhQNu7+4Ebu9WBm7vvgdu7ycJbu+PCm7v+Atu72ANbu/JDm7vMRBu74PwpvDs8abwVPOm8Lz0pvAl9qbwjfem8Pb4pvBe+qbwx/um8C/9pvCY/qbwAACm8GgBpvDRAqbwOQSm8KIFpvAKB6bwcwim8NsJpvBEC6bwrAym8BQOpvB9D6bwz+/f8Tfx3/Gg8t/xCPTf8XH13/HZ9t/xQvjf8ar53/ES+9/xe/zf8eP93/FM/9/xtADf8R0C3/GFA9/x7gTf8VYG3/G+B9/xJwnf8Y8K3/H4C9/xYA3f8ckO3/ExEN/xg/AX8+zxF/NU8xfzvPQX8yX2F/ON9xfz9vgX8176F/PH+xfzL/0X85j+F/NoARfz0QIX8zkEF/OiBRfzCgcX83MIF/PbCRfzRAsX86wMF/MUDhfzfQ8X88/vT/Q38U/0oPJP9Aj0T/Rx9U/02fZP9EL4T/Sq+U/0EvtP9Hv8T/Tj/U/0HQJP9IUDT/TuBE/0VgZP9L4HT/QnCU/0jwpP9PgLT/RgDU/0yQ5P9DEQT/SD8If17PGH9VTzh/W89If1JfaH9Y33h/X2+If1XvqH9cf7h/Uv/Yf10QKH9TkEh/WiBYf1CgeH9XMIh/XbCYf1RAuH9awMh/UUDof1fQ+H9c/vv/Y38b/2oPK/9gj0v/Zx9b/22fa/9kL4v/aq+b/2Evu/9nv8v/aFA7/27gS/9lYGv/a+B7/2Jwm/9o8Kv/b4C7/2YA2/9skOv/YxEL/2g/D39+zx9/dU8/f3vPT39yX29/eN9/f39vj391769/fH+/f3OQT396IF9/cKB/f3cwj399sJ9/dEC/f3rAz39xQO9/d9D/f3z+8v+TfxL/mg8i/5CPQv+XH1L/nZ9i/5Qvgv+ar5L/kS+y/57gQv+VYGL/m+By/5Jwkv+Y8KL/n4Cy/5YA0v+ckOL/kxEC/5g/Bo+uzxaPpU82j6vPRo+iX2aPqN92j69vho+l76aPqiBWj6Cgdo+nMIaPrbCWj6RAto+qwMaPoUDmj6fQ9o+jfxoPug8qD7CPSg+3H1oPvZ9qD7Qvig+6r5oPtWBqD7vgeg+ycJoPuPCqD7+Aug+2ANoPvJDqD7vPTY/CX22PyN99j89vjY/AoH2PxzCNj82wnY/EQL2PxC+BD+qvkQ/lYGEP6+BxD+","pos":"7v9k6k0B0wC06wQBuQED7bQAbgJC7oUACwOR734AgQO/8JkA9APt8cMAUQT08usArwT68xIBQQW89UcBkAUA94kA5Qap9poAOghK9pwAjAnp9Y8A4AqG9XsAOQwc9WQAiA2k9HEAuw7282YAvw+S85P/mBAK85b+jxCr8SX/wBBm8LT/uRDk7sX/qRCG7cX/nRAm7M3/kxDE6tf/ghD66O3/cBAw5wQATxCo5R4AKxAg5DcA9Q/j4i8Atw+r4R8ADg/U36X/CQ9V3pr/Bw/f3I7/Aw9q24P/AQ/32Xj//Q6C2G//+A4Q12b/8w6g1V3/7Q4x1FT/6Q7D0kv/5Q5T0UP/3w7lzzr/2g55zjH/1Q4NzSn/0Q6iyyD/zg42yhf/yQ7LyA7/xQ5hxwX/wA74xfv+uw6PxPL+tA4mw+j+ow68wd7+mQ40wZ7/fA0XwWUAOAwOweEA3woIwRsBgwkCwT8BJgj8wFoByAb2wGwBagXxwHgBCwTrwIEBrQLmwIYBTgHhwIoB8P/dwIwBkf7hwIoBMv3mwIYB1PvrwIEBdfrxwHgBF/n2wGwBuff8wFoBXPYCwT8BAPUIwRsBp/MOweEAZPIXwWUARvE0wZ7/OPG8wd7+IPEmw+j+EfGPxPL+BfH4xfv++vBhxwX/8fDLyA7/5/A2yhf/4PCiyyD/2PANzSn/0PB5zjH/yfDlzzr/wfBT0UP/vPDD0kv/t/Ax1FT/sfCg1V3/rfAQ12b/p/CC2G//pfD32Xj/pPBq24P/o/Df3I7/o/BV3pr/ofDU36X//O+r4R8Awu/j4i8AkO8g5DcAce+o5R4AV+8w5wQATu/66O3/Pe/E6tf/M+8m7M3/J++G7cX/F+/k7sX/EO9m8LT/Qe+r8SX/OO8K85b+EfCS85P/FfH282YASPKk9HEAmPMc9WQA8PSG9XsARPbp9Y8Al/dK9pwA6/ip9poAQPoA94kAj/q89UcBIfv68xIBf/v08usA3fvt8cMAUPy/8JkAxfyR734AYv1C7oUAF/4D7bQA/f606wQBFvLswi8AR/PlwtwAqvTewhcBEPbYwkABd/fSwlsB3/jMwm4BR/rGwnoBsPvBwoMBGf27wogBgf62wowB6v+ywo8BUwG2wowBvAK7wogBJATBwoMBjQXGwnoB9QbMwm4BXQjSwlsBxQnYwkABKwvewhcBjgzlwtwAvw3swi8AlvEmxK3/nvIhxJoA9vMbxAABWvUUxDIBwfYOxFEBKfgIxGcBkfkCxHYB+fr8w38BYvz3w4YByv3yw4sBM//tw44BmwDtw44BBALyw4sBbAP3w4YB1QT8w38BPQYCxHYBpQcIxGcBDQkOxFEBdAoUxDIB2AsbxAABLw0hxJoAOA4mxK3/B/JdxTcARfNXxdkApvRRxRwBDPZKxUUBc/dExV4B2/g+xW8BQ/o4xXsBq/szxYIBE/0uxYgBfP4pxYsB5P8kxY4BTAEpxYsBtQIuxYgBHQQzxYIBhQU4xXsB7QY+xW8BVQhExV4BvAlKxUUBIgtRxRwBgwxXxdkAwQ1dxTcAi/Gaxrb/nPKUxpkA8/OOxgABV/WHxjIBvfaBxlMBJfh7xmcBjfl1xnQB9fpvxn4BXfxqxoQBxf1lxocBLf9gxooBlQBgxooB/gFlxocBZgNqxoQBzgRvxn4BNgZ1xnQBngd7xmcBBQmBxlMBbAqHxjIB0AuOxgABJw2UxpkAOA6axrb/A/LRxzgAQvPLx9gAo/TFxxoBCPa+x0MBb/e4x1wB1/iyx2wBP/qsx3cBpvunx34BD/2hx4MBd/6cx4YB3/+Yx4kBRwGcx4YBrwKhx4MBFwSnx34BfwWsx3cB5wayx2wBTgi4x1wBtQm+x0MBGgvFxxoBfAzLx9gAug3RxzgAf/EPycP/l/IJyZ0A8PMCyf0AVPX8yC8Buvb2yE8BIfjvyGMBifnpyHAB8frkyHgBWPzeyH4BwP3ZyIEBKP/VyIQBkADVyIQB+AHZyIEBYAPeyH4ByATkyHgBMAbpyHABmAfvyGMB/wj2yE8BZQr8yC8ByQsCyf0AIg0JyZ0AOg4PycP/9/FHykcAP/NAytUAoPQ6yhgBBvY0yj4BbPctylYB0/gnymcBO/ohynEBo/scyncBC/0WynsBcv4Syn4B2v8NyoABQgESyn4BqgIWynsBEgQcyncBegUhynEB4QYnymcBSQgtylYBrwk0yj4BFQs6yhgBdQxAytUAvg1HykcAcfGGy9L/k/J/y54A7vN5y/oAUfVyyysBuPZry0gBHvhly1wBhvlfy2kB7fpZy3ABVfxUy3UBvf1Py3gBJf9Ky3sBjABKy3sB9AFPy3gBXANUy3UBxARZy3ABKwZfy2kBkwdly1wB+ghry0gBYApyyysBwwt5y/oAHg1/y54AQQ6Gy9L/9PG/zEoAPfO4zNUAnvSxzBQBA/aqzDkBavekzFIB0fidzGEBOPqYzGoBoPuSzHABB/2NzHMBb/6IzHUB1/+DzHgBPwGIzHUBpgKNzHMBDgSSzHABdgWYzGoB3QadzGEBRAikzFIBqwmqzDkBEAuxzBQBcQy4zNUAug2/zEoAb/H/zdX/kvL4zZ0A7PPwzfkAUPXpzSYBtfbjzUUBHPjczVkBg/nWzWQB6/rQzWsBUvzLzW4Buv3GzXABIv/BzXMBiQDBzXMB8QHGzXABWQPLzW4BwATQzWsBKAbWzWQBjwfczVkB9gjjzUUBWwrpzSYBvwvwzfkAGQ34zZ0APA7/zdX/8fE5z08AO/Mxz9YAnfQpzxIBAvYizzcBaPcbz08Bz/gVz14BNvoPz2YBnvsJz2oBBf0Ez2wBbf7/zm4B1P/7znEBPAH/zm4BpAIEz2wBCwQJz2oBcwUPz2YB2gYVz14BQQgbz08BpwkizzcBDAspzxIBbgwxz9YAuA05z08AZPF40Ob/j/Jy0KQA6/Nq0PcATvVi0CYBtPZb0EQBG/hU0FcBgvlO0GEB6fpI0GYBUfxD0GgBuP0+0GoBIP850GwBhwA50GwB7wE+0GoBVwND0GgBvgRI0GYBJQZO0GEBjAdU0FcB8whb0EQBWQpi0CYBvAtq0PcAGA1y0KQAQw540Ob/6/G00VkAO/Or0dUAnPSj0REBAfab0TcBZ/eU0U8BzfiO0V0BNfqH0WIBnPuC0WUBBP180WcBa/540WgB0/9z0WoBOgF40WgBogJ80WcBCQSC0WUBcQWH0WIB2AaO0V0BPwiU0U8BpQmb0TcBCguj0REBawyr0dUAug200VkAYPH20u3/jvLu0qYA6/Pl0vcATvXc0icBs/bV0kYBGvjO0lgBgfnH0l8B6PrB0mIBT/y80mQBt/230mUBH/+y0mYBhgCy0mYB7gG30mUBVQO80mQBvQTB0mIBJAbH0l8BiwfO0lgB8gjV0kYBVwrc0icBugvl0vcAFg3u0qYARQ720u3/7vEx1FgAO/Mn1NYAnPQe1BMBAPYW1DsBZvcO1FIBzfgH1FwBNPoB1GABm/v702EBA/3202IBav7x02MB0v/t02UBOgHx02MBoQL202IBCQT702EBcAUB1GAB1wYH1FwBPggO1FIBpAkW1DsBCAse1BMBaQwn1NYAtg0x1FgAXfF11fP/kPJr1aQA6/Nh1foATfVY1SwBsvZP1UwBGfhI1VoBgPlB1V4B6Po71V8BT/w11WABt/0w1WABHv8s1WEBhgAs1WEB7QEw1WABVQM11WABvAQ71V8BJAZB1V4BiwdI1VoB8QhP1UwBVwpY1SwBuQth1foAFA1r1aQARw511fP/7PGw1mEAPPOk1tgAnPSa1hoBAPaR1kIBZveJ1lcBzfiC1l0BNPp71l4Bm/t11l4BA/1w1l4Bav5r1l4B0v9n1l8BOgFr1l4BoQJw1l4BCQR11l4BcAV71l4B1waC1l0BPgiJ1lcBpAmR1kIBCAua1hoBaAyk1tgAuA2w1mEAWPHz1wUAkfLq16oA7PPe1/8ATfXU1zYBsvbL11MBGfjD110BgPm8114B6Pq1110BT/yw11wBt/2r11wBHv+n110BhgCn110B7gGr11wBVQOw11wBvQS1110BJAa8114BiwfD110B8gjL11MBVwrU1zYBuQve1/8AEw3q16oATA7z1wUA7fEx2WcAPfMj2d4AnPQX2SQBAPYN2U4BZvcE2V0Bzfj92F4BNPr22FwBnPvw2FoBA/3r2FoBa/7n2FoB0//j2FsBOgHn2FoBogLr2FoBCQTw2FoBcQX22FwB2Ab92F4BPwgE2V0BpgkN2U4BCQsX2SQBaAwj2d4AuQ0x2WcAW/F52gYAk/Jq2q8A7PNc2gsBTfVQ2kQBs/ZG2l4BGvg+2mABgfk32lwB6Pow2lkBUPwr2lgBuP0m2lgBH/8j2lgBhwAj2lgB7wEm2lgBVgMr2lgBvgQw2lkBJQY32lwBjQc+2mAB8whG2l4BWQpQ2kQBugtc2gsBEw1q2q8ATA552gYA8vGz22kAPvOj2+gAnPSU2zYBAPaJ21wBZ/eA22QBzvh4214BNfpx21kBnPtr21YBBP1n21YBbP5i21YB1P9f21cBPAFi21YBpAJn21YBCwRr21YBcwVx21kB2gZ4214BQQiA22QBqAmJ21wBDAuU2zYBaQyj2+gAtg2z22kAW/H/3BQAlvLs3LkA7PPa3CMBTvXM3FoBtPbC3GkBG/i63GEBgvmy3FkB6fqs3FUBUfyn3FQBuf2i3FQBIf+f3FUBiQCf3FUB8QGi3FQBWQOn3FQBwASs3FUBKAay3FkBjwe63GEB9QjC3GkBXArM3FoBvQva3CMBFA3s3LkATg7/3BQA9fE53nwAQPMh3gUBnfQR3lUBAvYG3m8BaPf83WcBz/j03VoBNvrt3VQBnvvn3VIBBf3i3VIBbv7f3VMB1v/c3VMBPgHf3VMBpgLi3VIBDgTn3VIBdgXt3VQB3Qb03VoBRAj83WcBqgkG3m8BDwsR3lUBawwh3gUBtw053nwAX/GA3zkAmfJq3+IA7vNX30gBUPVK33UBtvY/33ABHPg2314Bg/ku31IB6voo31ABUvwi31ABuv0e31EBI/8b31IBiwAb31IB9AEe31EBXAMi31ABxAQo31ABKwYu31IBkgc2314B+Ag/33ABXgpK33UBwAtX30gBFg1q3+IATw6A3zkA9vG04LUAQvOg4DQBoPSQ4HgBBfaE4HwBavd54GQB0Phw4FIBN/pp4E0Bn/tj4E4BB/1e4E8BcP5b4FAB2f9Y4FABQQFb4FABqgJe4E8BEgRj4E4BegVp4E0B4QZw4FIBRwh54GQBrQmE4HwBEQuQ4HgBbwyg4DQBuw204LUATvH+4ZIAm/Lq4REB8fPX4XQBVPXJ4YgBuPa94W4BHfiz4VMBhPmq4UoB6/qj4UsBVPye4U0Bvf2a4U4BJv+X4U8BjwCX4U8B+AGa4U4BYQOe4U0ByQSj4UsBMQaq4UoBlwez4VMB/Ai94W4BYArJ4YgBxAvX4XQBGQ3q4REBZg7+4ZIApPBH43wA9/E14+cARfMh42EBpPQQ45MBB/YD430Ba/f34lUB0fjs4kYBOPrk4kcBoPvd4koBCf3Z4kwBc/7W4k0B3P/V4k4BRgHW4k0BrwLZ4kwBGATd4koBgAXk4kcB6Abs4kYBTgj34lUBsQkD430BFAsQ45MBcwwh42EBwQ014+cAFA9H43wAVPGC5MEAn/Jt5D0B9vNa5JQBWPVK5I8BufY85F0BHvgv5EMBhfkl5EIB7fod5EgBVvwY5EoBv/0U5EwBKf8T5E0BkwAT5E0B/QEU5EwBZwMY5EoB0AQd5EgBOAYl5EIBnwcv5EMBAwk85F0BZApK5I8Bxwta5JQBHQ1t5D0BaQ6C5MEAs/DN5Y4A/fG65Q8BSvOl5YUBqvSU5Z8BCfaD5WoBbPd05UEB0vho5TwBOfpe5UUBovtX5UkBDP1S5UoBdv5Q5UwB4f9Q5U0BSwFQ5UwBtgJS5UoBIARX5UkBiAVe5UUB8AZo5TwBVgh05UEBuAmD5WoBGAuU5Z8Bdwyl5YUBxA265Q8BDw/N5Y4AFfAb508AX/EI59gAofLz5mkB/PPf5qgBW/XN5nwBuva75kEBH/is5jYBhvmg5kMB7vqW5kgBWPyP5kgBwv2M5koBLv+M5kwBmQCM5kwBBAKM5koBbwOP5kgB2QSW5kgBQQag5kMBqAes5jYBDQm75kEBawrN5nwBywvf5qgBJQ3z5mkBaA4I59gAsQ8b508AxPBY6JcAAfJC6DcBT/Mt6KUBr/QZ6JABC/YE6EkBbvfy5y8B1Pjj50ABO/rW50gBpPvN50YBD/3I50cBev7H50wB5v/J500BUgHH50wBvgLI50cBKQTN50YBkgXW50gB+Qbj50ABXwjy5y8BwgkE6EkBHgsZ6JABfgwt6KUBzA1C6DcBCQ9Y6JcALfCm6U0AZPGT6fcApPJ96YsBAPRo6aIBWvVQ6VYBuvY76SoBH/go6TwBhvkY6UkB7voM6UMBWPwE6UMBw/0A6U0BMP8D6U4BoAAD6U4BDQIA6U0BeAME6UMB4gQM6UMBSwYY6UkBsQco6TwBFgk76SoBdgpQ6VYB0Ato6aIBLQ196YsBbA6T6fcAow+m6U0AzvDm6qcA+vHQ6l4BTvO66qUBp/Sg6mcBBPaG6ikBaPdw6jgBzvhc6koBNfpN6j8BnvtB6j0BCP056lYBc/456l8BXQE56l8ByQI56lYBMgRB6j0BmwVN6j8BAgdc6koBaAhw6jgBzQmG6ikBKQug6mcBggy66qUB1g3Q6l4BAg/m6qcAO/Ay7EsAXPEk7BcBnfIP7JcB9vPz63kBTvXV6y4Bsva76zQBF/ij60oBfvmP6zwB5vqA6zgBTfxz62cBtv1v63EBGgJv63EBhANz62cB6gSA6zgBUgaP6zwBuQej60oBHwm76zQBggrV6y4B2gvz63kBNA0P7JcBdQ4k7BcBlQ8y7EsAzPB27bIA7/Fn7XABRfNM7YQBm/Qp7TkB/fUI7TIBYvfs7EkByPjU7DoBL/rA7DkBk/uv7HUB+vym7GkB1gKm7GkBPQSv7HUBoQXA7DkBCAfU7DoBbwjs7EkB0wkI7TIBNQsp7TkBiwxM7YQB4Q1n7XABBA927bIASPDB7jkAUfHA7h4BlPKq7n0B6POC7kcBSfVb7jMBrvY47kcBFPgc7jkBevkD7joB3fru7XwBQvze7VoBjwPe7VoB8wTu7XwBVwYD7joBvAcc7jkBIgk47kcBhwpb7jMB6AuC7kcBPA2q7n0Bfw7A7h4BiA/B7jkAx/AQ8KcA5/EO8E4BNfPk71ABl/Sx7zgB/fWI70QBY/dm7zsBx/hJ7zoBKvow73wBjPsY70QBRQQY70QBpgUw73wBCgdJ7zoBbghm7zsB0wmI70QBOQux7zgBmwzk71AB6g0O8E4BCQ8Q8KcAV/BB8QAAO/F88fcAfvJY8U0B6vMJ8TwBUfXb8EEBtPa28D4BF/iR8DsBfPlz8HMB3fpX8DUB8wRX8DUBVAZz8HMBuQeR8DsBHAm28D4Bfwrb8EEB5gsJ8TwBUg1Y8U0Blg588fcAeQ9B8QAA3vCC8iMA9/Gx8t4ATfNs8joBrPQz8j8BCfYL8kIBavfd8TsB0vi48WUBNPqY8SkBnAWY8SkB/wa48WUBZgjd8TsByAkL8kIBJAsz8j8BhAxs8joB2g2x8t4A8w6C8iMAo/GB8wkA3PKN86cAA/R88ycBYfVp8zwBwvYt8zoBLPj/8lQBk/nc8ioBPQbc8ioBpAf/8lQBDgkt8zoBbwpp8zwBzQt88ycB9QyN86cALQ6B8wkAxvSL9MAAJvZ+9CIBjvdG9D4B9/gi9DcB2QYi9DcBQghG9D4Bqwl+9CIBCguL9MAAYPhh9QsBwvlL9ToBDgZL9ToBcAdh9QsB","tri":"CgAJAAsAeAB3AHkATABLAIIATQBMAIIATgBNAIIASwBKAIMAggBLAIMASgBJAIQAgwBKAIQASQBIAIUAhABJAIUASABHAIYAhQBIAIYARwBGAIcAhgBHAIcARgBFAIgAhwBGAIgARQBEAIkAiABFAIkARABDAIoAiQBEAIoAQwBCAIsAigBDAIsAQQBAAIwAQgBBAIwAiwBCAIwAQAA/AI0AjABAAI0APwA+AI4AjQA/AI4APgA9AI8AjgA+AI8APQA8AJAAjwA9AJAAPAA7AJEAkAA8AJEAOwA6AJIAkQA7AJIAOgA5AJMAkgA6AJMAOQA4AJQAkwA5AJQAOAA3AJUAlAA4AJUANQA0AJYANgA1AJYANwA2AJYAlQA3AJYATwBOAJcATgCCAJcAggCDAJgAlwCCAJgAgwCEAJkAmACDAJkAhACFAJoAmQCEAJoAhQCGAJsAmgCFAJsAhgCHAJwAmwCGAJwAhwCIAJ0AnACHAJ0AiACJAJ4AnQCIAJ4AiQCKAJ8AngCJAJ8AigCLAKAAnwCKAKAAiwCMAKEAoACLAKEAjACNAKIAoQCMAKIAjQCOAKMAogCNAKMAjgCPAKQAowCOAKQAjwCQAKUApACPAKUAkACRAKYApQCQAKYAkQCSAKcApgCRAKcAkgCTAKgApwCSAKgAkwCUAKkAqACTAKkAlACVAKoAqQCUAKoAlQCWAKsAqgCVAKsANAAzAKwAlgA0AKwAqwCWAKwAUABPAK0ATwCXAK0AlwCYAK0AmACZAK4ArQCYAK4AmQCaAK8ArgCZAK8AmgCbALAArwCaALAAmwCcALEAsACbALEAnACdALIAsQCcALIAnQCeALMAsgCdALMAngCfALQAswCeALQAnwCgALUAtACfALUAoAChALYAtQCgALYAoQCiALcAtgChALcAogCjALgAtwCiALgAowCkALkAuACjALkApAClALoAuQCkALoApQCmALsAugClALsApgCnALwAuwCmALwApwCoAL0AvACnAL0AqACpAL4AvQCoAL4AqQCqAL8AvgCpAL8AqgCrAMAAvwCqAMAAMwAyAMEArAAzAMEAqwCsAMEAwACrAMEAUQBQAMIAUACtAMIArQCuAMMAwgCtAMMArgCvAMQAwwCuAMQArwCwAMUAxACvAMUAsACxAMYAxQCwAMYAsQCyAMcAxgCxAMcAsgCzAMgAxwCyAMgAswC0AMkAyACzAMkAtAC1AMoAyQC0AMoAtQC2AMsAygC1AMsAtgC3AMwAywC2AMwAtwC4AM0AzAC3AM0AuAC5AM4AzQC4AM4AuQC6AM8AzgC5AM8AugC7ANAAzwC6ANAAuwC8ANEA0AC7ANEAvAC9ANIA0QC8ANIAvQC+ANMA0gC9ANMAvgC/ANQA0wC+ANQAvwDAANUA1AC/ANUAwADBANYA1QDAANYAMgAxANcAwQAyANcA1gDBANcAUgBRANgAUQDCANgAwgDDANgAwwDEANkA2ADDANkAxADFANoA2QDEANoAxQDGANsA2gDFANsAxgDHANwA2wDGANwAxwDIAN0A3ADHAN0AyADJAN4A3QDIAN4AyQDKAN8A3gDJAN8AygDLAOAA3wDKAOAAywDMAOEA4ADLAOEAzADNAOIA4QDMAOIAzQDOAOMA4gDNAOMAzgDPAOQA4wDOAOQAzwDQAOUA5ADPAOUA0ADRAOYA5QDQAOYA0QDSAOcA5gDRAOcA0gDTAOgA5wDSAOgA0wDUAOkA6ADTAOkA1ADVAOoA6QDUAOoA1QDWAOsA6gDVAOsAMQAwAOwA1wAxAOwA1gDXAOwA6wDWAOwAUwBSAO0AUgDYAO0A2ADZAO4A7QDYAO4A2QDaAO8A7gDZAO8A2gDbAPAA7wDaAPAA2wDcAPEA8ADbAPEA3ADdAPIA8QDcAPIA3QDeAPMA8gDdAPMA3gDfAPQA8wDeAPQA3wDgAPUA9ADfAPUA4ADhAPYA9QDgAPYA4QDiAPcA9gDhAPcA4gDjAPgA9wDiAPgA4wDkAPkA+ADjAPkA5ADlAPoA+QDkAPoA5QDmAPsA+gDlAPsA5gDnAPwA+wDmAPwA5wDoAP0A/ADnAP0A6ADpAP4A/QDoAP4A6QDqAP8A/gDpAP8A6gDrAAAB/wDqAAAB6wDsAAEBAAHrAAEBMAAvAAIB7AAwAAIBAQHsAAIBUwDtAAMB7QDuAAMB7gDvAAQBAwHuAAQB7wDwAAUBBAHvAAUB8ADxAAYBBQHwAAYB8QDyAAcBBgHxAAcB8gDzAAgBBwHyAAgB8wD0AAkBCAHzAAkB9AD1AAoBCQH0AAoB9QD2AAsBCgH1AAsB9gD3AAwBCwH2AAwB9wD4AA0BDAH3AA0B+AD5AA4BDQH4AA4B+QD6AA8BDgH5AA8B+gD7ABABDwH6ABAB+wD8ABEBEAH7ABEB/AD9ABIBEQH8ABIB/QD+ABMBEgH9ABMB/gD/ABQBEwH+ABQB/wAAARUBFAH/ABUBAAEBARYBFQEAARYBAQECARcBFgEBARcBAgEvABcBVABTABgBUwADARgBVQBUABgBAwEEARkBGAEDARkBBAEFARoBGQEEARoBBQEGARsBGgEFARsBBgEHARwBGwEGARwBBwEIAR0BHAEHAR0BCAEJAR4BHQEIAR4BCQEKAR8BHgEJAR8BCgELASABHwEKASABCwEMASEBIAELASEBDAENASIBIQEMASIBDQEOASMBIgENASMBDgEPASQBIwEOASQBDwEQASUBJAEPASUBEAERASYBJQEQASYBEQESAScBJgERAScBEgETASgBJwESASgBEwEUASkBKAETASkBFAEVASoBKQEUASoBFQEWASsBKgEVASsBFgEXASwBKwEWASwBLwAuAC0BFwEvAC0BLgAtAC0BLAEXAS0BVQAYAS4BGAEZAS4BGQEaAS8BLgEZAS8BGgEbATABLwEaATABGwEcATEBMAEbATEBHAEdATIBMQEcATIBHQEeATMBMgEdATMBHgEfATQBMwEeATQBHwEgATUBNAEfATUBIAEhATYBNQEgATYBIQEiATcBNgEhATcBIgEjATgBNwEiATgBIwEkATkBOAEjATkBJAElAToBOQEkAToBJQEmATsBOgElATsBJgEnATwBOwEmATwBJwEoAT0BPAEnAT0BKAEpAT4BPQEoAT4BKQEqAT8BPgEpAT8BKgErAUABPwEqAUABKwEsAUEBQAErAUEBLAEtAUIBQQEsAUIBLQEtAEIBVgBVAEMBVQAuAUMBLgEvAUQBQwEuAUQBLwEwAUUBRAEvAUUBMAExAUYBRQEwAUYBMQEyAUcBRgExAUcBMgEzAUgBRwEyAUgBMwE0AUkBSAEzAUkBNAE1AUoBSQE0AUoBNQE2AUsBSgE1AUsBNgE3AUwBSwE2AUwBNwE4AU0BTAE3AU0BOAE5AU4BTQE4AU4BOQE6AU8BTgE5AU8BOgE7AVABTwE6AVABOwE8AVEBUAE7AVEBPAE9AVIBUQE8AVIBPQE+AVMBUgE9AVMBPgE/AVQBUwE+AVQBPwFAAVUBVAE/AVUBQAFBAVYBVQFAAVYBQQFCAVcBVgFBAVcBLQAsAFgBQgEtAFgBVwFCAVgBVwBWAFkBVgBDAVkBQwFEAVkBRAFFAVoBWQFEAVoBRQFGAVsBWgFFAVsBRgFHAVwBWwFGAVwBRwFIAV0BXAFHAV0BSAFJAV4BXQFIAV4BSQFKAV8BXgFJAV8BSgFLAWABXwFKAWABSwFMAWEBYAFLAWEBTAFNAWIBYQFMAWIBTQFOAWMBYgFNAWMBTgFPAWQBYwFOAWQBTwFQAWUBZAFPAWUBUAFRAWYBZQFQAWYBUQFSAWcBZgFRAWcBUgFTAWgBZwFSAWgBUwFUAWkBaAFTAWkBVAFVAWoBaQFUAWoBVQFWAWsBagFVAWsBVgFXAWwBawFWAWwBLAArAG0BWAEsAG0BVwFYAW0BbAFXAW0BWABXAG4BVwBZAW4BWQFaAW8BbgFZAW8BWgFbAXABbwFaAXABWwFcAXEBcAFbAXEBXAFdAXIBcQFcAXIBXQFeAXMBcgFdAXMBXgFfAXQBcwFeAXQBXwFgAXUBdAFfAXUBYAFhAXYBdQFgAXYBYQFiAXcBdgFhAXcBYgFjAXgBdwFiAXgBYwFkAXkBeAFjAXkBZAFlAXoBeQFkAXoBZQFmAXsBegFlAXsBZgFnAXwBewFmAXwBZwFoAX0BfAFnAX0BaAFpAX4BfQFoAX4BaQFqAX8BfgFpAX8BagFrAYABfwFqAYABawFsAYEBgAFrAYEBbAFtAYIBgQFsAYIBKwAqAIMBbQErAIMBggFtAYMBWABuAYQBbgFvAYQBbwFwAYUBhAFvAYUBcAFxAYYBhQFwAYYBcQFyAYcBhgFxAYcBcgFzAYgBhwFyAYgBcwF0AYkBiAFzAYkBdAF1AYoBiQF0AYoBdQF2AYsBigF1AYsBdgF3AYwBiwF2AYwBdwF4AY0BjAF3AY0BeAF5AY4BjQF4AY4BeQF6AY8BjgF5AY8BegF7AZABjwF6AZABewF8AZEBkAF7AZEBfAF9AZIBkQF8AZIBfQF+AZMBkgF9AZMBfgF/AZQBkwF+AZQBfwGAAZUBlAF/AZUBgAGBAZYBlQGAAZYBgQGCAZcBlgGBAZcBgwEqAJgBggGDAZgBlwGCAZgBWQBYAJkBWACEAZkBWgBZAJkBhAGFAZoBmQGEAZoBhQGGAZsBmgGFAZsBhgGHAZwBmwGGAZwBhwGIAZ0BnAGHAZ0BiAGJAZ4BnQGIAZ4BiQGKAZ8BngGJAZ8BigGLAaABnwGKAaABiwGMAaEBoAGLAaEBjAGNAaIBoQGMAaIBjQGOAaMBogGNAaMBjgGPAaQBowGOAaQBjwGQAaUBpAGPAaUBkAGRAaYBpQGQAaYBkQGSAacBpgGRAacBkgGTAagBpwGSAagBkwGUAakBqAGTAakBlAGVAaoBqQGUAaoBlQGWAasBqgGVAasBlgGXAawBqwGWAawBlwGYAa0BrAGXAa0BKgApAK4BmAEqAK4BKQAoAK4BrQGYAa4BWgCZAa8BmQGaAa8BmgGbAbABrwGaAbABmwGcAbEBsAGbAbEBnAGdAbIBsQGcAbIBnQGeAbMBsgGdAbMBngGfAbQBswGeAbQBnwGgAbUBtAGfAbUBoAGhAbYBtQGgAbYBoQGiAbcBtgGhAbcBogGjAbgBtwGiAbgBowGkAbkBuAGjAbkBpAGlAboBuQGkAboBpQGmAbsBugGlAbsBpgGnAbwBuwGmAbwBpwGoAb0BvAGnAb0BqAGpAb4BvQGoAb4BqQGqAb8BvgGpAb8BqgGrAcABvwGqAcABqwGsAcEBwAGrAcEBrAGtAcIBwQGsAcIBrQGuAcMBwgGtAcMBrgEoAMMBWwBaAMQBWgCvAcQBXABbAMQBrwGwAcUBxAGvAcUBsAGxAcYBxQGwAcYBsQGyAccBxgGxAccBsgGzAcgBxwGyAcgBswG0AckByAGzAckBtAG1AcoByQG0AcoBtQG2AcsBygG1AcsBtgG3AcwBywG2AcwBtwG4Ac0BzAG3Ac0BuAG5Ac4BzQG4Ac4BuQG6Ac8BzgG5Ac8BugG7AdABzwG6AdABuwG8AdEB0AG7AdEBvAG9AdIB0QG8AdIBvQG+AdMB0gG9AdMBvgG/AdQB0wG+AdQBvwHAAdUB1AG/AdUBwAHBAdYB1QHAAdYBwQHCAdcB1gHBAdcBwgHDAdgB1wHCAdgBKAAnANkBwwEoANkBJwAmANkB2AHDAdkBXADEAdoBxAHFAdoBxQHGAdsB2gHFAdsBxgHHAdwB2wHGAdwBxwHIAd0B3AHHAd0ByAHJAd4B3QHIAd4ByQHKAd8B3gHJAd8BygHLAeAB3wHKAeABywHMAeEB4AHLAeEBzAHNAeIB4QHMAeIBzQHOAeMB4gHNAeMBzgHPAeQB4wHOAeQBzwHQAeUB5AHPAeUB0AHRAeYB5QHQAeYB0QHSAecB5gHRAecB0gHTAegB5wHSAegB0wHUAekB6AHTAekB1AHVAeoB6QHUAeoB1QHWAesB6gHVAesB1gHXAewB6wHWAewB1wHYAe0B7AHXAe0B2AHZAe4B7QHYAe4B2QEmAO4BXQBcAO8BXADaAe8B2gHbAfAB7wHaAfAB2wHcAfEB8AHbAfEB3AHdAfIB8QHcAfIB3QHeAfMB8gHdAfMB3gHfAfQB8wHeAfQB3wHgAfUB9AHfAfUB4AHhAfYB9QHgAfYB4QHiAfcB9gHhAfcB4gHjAfgB9wHiAfgB4wHkAfkB+AHjAfkB5AHlAfoB+QHkAfoB5QHmAfsB+gHlAfsB5gHnAfwB+wHmAfwB5wHoAf0B/AHnAf0B6AHpAf4B/QHoAf4B6QHqAf8B/gHpAf8B6gHrAQAC/wHqAQAC6wHsAQECAALrAQEC7AHtAQICAQLsAQIC7QHuAQMCAgLtAQMCJgAlAAQC7gEmAAQCAwLuAQQCXgBdAAUCXQDvAQUC7wHwAQUC8AHxAQYCBQLwAQYC8QHyAQcCBgLxAQcC8gHzAQgCBwLyAQgC8wH0AQkCCALzAQkC9AH1AQoCCQL0AQoC9QH2AQsCCgL1AQsC9gH3AQwCCwL2AQwC9wH4AQ0CDAL3AQ0C+AH5AQ4CDQL4AQ4C+QH6AQ8CDgL5AQ8C+gH7ARACDwL6ARAC+wH8ARECEAL7AREC/AH9ARICEQL8ARIC/QH+ARMCEgL9ARMC/gH/ARQCEwL+ARQC/wEAAhUCFAL/ARUCAAIBAhYCFQIAAhYCAQICAhcCFgIBAhcCAgIDAhgCFwICAhgCJQAkABkCBAIlABkCAwIEAhkCGAIDAhkCXwBeABoCXgAFAhoCBQIGAhsCGgIFAhsCBgIHAhwCGwIGAhwCBwIIAh0CHAIHAh0CCAIJAh4CHQIIAh4CCQIKAh8CHgIJAh8CCgILAiACHwIKAiACCwIMAiECIAILAiECDAINAiICIQIMAiICDQIOAiMCIgINAiMCDgIPAiQCIwIOAiQCDwIQAiUCJAIPAiUCEAIRAiYCJQIQAiYCEQISAicCJgIRAicCEgITAigCJwISAigCEwIUAikCKAITAikCFAIVAioCKQIUAioCFQIWAisCKgIVAisCFgIXAiwCKwIWAiwCFwIYAi0CLAIXAi0CGAIZAi4CLQIYAi4CJAAjAC8CGQIkAC8CLgIZAi8CXwAaAjACGgIbAjACGwIcAjECMAIbAjECHAIdAjICMQIcAjICHQIeAjMCMgIdAjMCHgIfAjQCMwIeAjQCHwIgAjUCNAIfAjUCIAIhAjYCNQIgAjYCIQIiAjcCNgIhAjcCIgIjAjgCNwIiAjgCIwIkAjkCOAIjAjkCJAIlAjoCOQIkAjoCJQImAjsCOgIlAjsCJgInAjwCOwImAjwCJwIoAj0CPAInAj0CKAIpAj4CPQIoAj4CKQIqAj8CPgIpAj8CKgIrAkACPwIqAkACKwIsAkECQAIrAkECLAItAkICQQIsAkICLQIuAkMCQgItAkMCLwIjAEQCLgIvAkQCQwIuAkQCYABfAEUCXwAwAkUCYQBgAEUCMAIxAkYCRQIwAkYCMQIyAkcCRgIxAkcCMgIzAkgCRwIyAkgCMwI0AkkCSAIzAkkCNAI1AkoCSQI0AkoCNQI2AksCSgI1AksCNgI3AkwCSwI2AkwCNwI4Ak0CTAI3Ak0COAI5Ak4CTQI4Ak4COQI6Ak8CTgI5Ak8COgI7AlACTwI6AlACOwI8AlECUAI7AlECPAI9AlICUQI8AlICPQI+AlMCUgI9AlMCPgI/AlQCUwI+AlQCPwJAAlUCVAI/AlUCQAJBAlYCVQJAAlYCQQJCAlcCVgJBAlcCQgJDAlgCVwJCAlgCQwJEAlkCWAJDAlkCIwAiAFoCRAIjAFoCIgAhAFoCWQJEAloCYQBFAlsCRQJGAlsCRgJHAlwCWwJGAlwCRwJIAl0CXAJHAl0CSAJJAl4CXQJIAl4CSQJKAl8CXgJJAl8CSgJLAmACXwJKAmACSwJMAmECYAJLAmECTAJNAmICYQJMAmICTQJOAmMCYgJNAmMCTgJPAmQCYwJOAmQCTwJQAmUCZAJPAmUCUAJRAmYCZQJQAmYCUQJSAmcCZgJRAmcCUgJTAmgCZwJSAmgCUwJUAmkCaAJTAmkCVAJVAmoCaQJUAmoCVQJWAmsCagJVAmsCVgJXAmwCawJWAmwCVwJYAm0CbAJXAm0CWAJZAm4CbQJYAm4CWQJaAm8CbgJZAm8CWgIhAG8CYgBhAHACYQBbAnACWwJcAnECcAJbAnECXAJdAnICcQJcAnICXQJeAnMCcgJdAnMCXgJfAnQCcwJeAnQCXwJgAnUCdAJfAnUCYAJhAnYCdQJgAnYCYQJiAncCdgJhAncCYgJjAngCdwJiAngCYwJkAnkCeAJjAnkCZAJlAnoCeQJkAnoCZQJmAnsCegJlAnsCZgJnAnwCewJmAnwCZwJoAn0CfAJnAn0CaAJpAn4CfQJoAn4CaQJqAn8CfgJpAn8CagJrAoACfwJqAoACawJsAoECgAJrAoECbAJtAoICgQJsAoICbQJuAoMCggJtAoMCbgJvAoQCgwJuAoQCIQAgAIUCbwIhAIUChAJvAoUCYwBiAIYCYgBwAoYCcAJxAoYCcQJyAocChgJxAocCcgJzAogChwJyAogCcwJ0AokCiAJzAokCdAJ1AooCiQJ0AooCdQJ2AosCigJ1AosCdgJ3AowCiwJ2AowCdwJ4Ao0CjAJ3Ao0CeAJ5Ao4CjQJ4Ao4CeQJ6Ao8CjgJ5Ao8CegJ7ApACjwJ6ApACewJ8ApECkAJ7ApECfAJ9ApICkQJ8ApICfQJ+ApMCkgJ9ApMCfgJ/ApQCkwJ+ApQCfwKAApUClAJ/ApUCgAKBApYClQKAApYCgQKCApcClgKBApcCggKDApgClwKCApgCgwKEApkCmAKDApkCIAAfAJoChQIgAJoChAKFApoCmQKEApoCYwCGApsChgKHApwCmwKGApwChwKIAp0CnAKHAp0CiAKJAp4CnQKIAp4CiQKKAp8CngKJAp8CigKLAqACnwKKAqACiwKMAqECoAKLAqECjAKNAqICoQKMAqICjQKOAqMCogKNAqMCjgKPAqQCowKOAqQCjwKQAqUCpAKPAqUCkAKRAqYCpQKQAqYCkQKSAqcCpgKRAqcCkgKTAqgCpwKSAqgCkwKUAqkCqAKTAqkClAKVAqoCqQKUAqoClQKWAqsCqgKVAqsClgKXAqwCqwKWAqwClwKYAq0CrAKXAq0CmAKZAq4CrQKYAq4CmQKaAq8CrgKZAq8CmgIfALACrwKaArACZABjALECYwCbArECZQBkALECmwKcArICsQKbArICnAKdArMCsgKcArMCnQKeArQCswKdArQCngKfArUCtAKeArUCnwKgArYCtQKfArYCoAKhArcCtgKgArcCoQKiArgCtwKhArgCogKjArkCuAKiArkCowKkAroCuQKjAroCpAKlArsCugKkArsCpQKmArwCuwKlArwCpgKnAr0CvAKmAr0CpwKoAr4CvQKnAr4CqAKpAr8CvgKoAr8CqQKqAsACvwKpAsACqgKrAsECwAKqAsECqwKsAsICwQKrAsICrAKtAsMCwgKsAsMCrQKuAsQCwwKtAsQCrgKvAsUCxAKuAsUCrwKwAsYCxQKvAsYCHwAeAMcCsAIfAMcCHgAdAMcCxgKwAscCZQCxAsgCsQKyAsgCsgKzAskCyAKyAskCswK0AsoCyQKzAsoCtAK1AssCygK0AssCtQK2AswCywK1AswCtgK3As0CzAK2As0CtwK4As4CzQK3As4CuAK5As8CzgK4As8CuQK6AtACzwK5AtACugK7AtEC0AK6AtECuwK8AtIC0QK7AtICvAK9AtMC0gK8AtMCvQK+AtQC0wK9AtQCvgK/AtUC1AK+AtUCvwLAAtYC1QK/AtYCwALBAtcC1gLAAtcCwQLCAtgC1wLBAtgCwgLDAtkC2ALCAtkCwwLEAtoC2QLDAtoCxALFAtsC2gLEAtsCxQLGAtwC2wLFAtwCxwIdAN0CxgLHAt0C3ALGAt0CZgBlAN4CZQDIAt4CyALJAt8C3gLIAt8CyQLKAuAC3wLJAuACygLLAuEC4ALKAuECywLMAuIC4QLLAuICzALNAuMC4gLMAuMCzQLOAuQC4wLNAuQCzgLPAuUC5ALOAuUCzwLQAuYC5QLPAuYC0ALRAucC5gLQAucC0QLSAugC5wLRAugC0gLTAukC6ALSAukC0wLUAuoC6QLTAuoC1ALVAusC6gLUAusC1QLWAuwC6wLVAuwC1gLXAu0C7ALWAu0C1wLYAu4C7QLXAu4C2ALZAu8C7gLYAu8C2QLaAvAC7wLZAvAC2gLbAvEC8ALaAvEC2wLcAvIC8QLbAvIC3ALdAvMC8gLcAvMCHQAcAPQC3QIdAPQC8wLdAvQCZwBmAPUCZgDeAvUCaABnAPUC3gLfAvYC9QLeAvYC3wLgAvcC9gLfAvcC4ALhAvgC9wLgAvgC4QLiAvkC+ALhAvkC4gLjAvoC+QLiAvoC4wLkAvsC+gLjAvsC5ALlAvwC+wLkAvwC5QLmAv0C/ALlAv0C5gLnAv4C/QLmAv4C5wLoAv8C/gLnAv8C6ALpAgAD/wLoAgAD6QLqAgEDAAPpAgED6gLrAgIDAQPqAgID6wLsAgMDAgPrAgMD7ALtAgQDAwPsAgQD7QLuAgUDBAPtAgUD7gLvAgYDBQPuAgYD7wLwAgcDBgPvAgcD8ALxAggDBwPwAggD8QLyAgkDCAPxAgkD8gLzAgoDCQPyAgoD8wL0AgsDCgPzAgsDHAAbAAwD9AIcAAwDGwAaAAwDCwP0AgwDaAD1Ag0D9QL2Ag0D9gL3Ag4DDQP2Ag4D9wL4Ag8DDgP3Ag8D+AL5AhADDwP4AhAD+QL6AhEDEAP5AhED+gL7AhIDEQP6AhID+wL8AhMDEgP7AhMD/AL9AhQDEwP8AhQD/QL+AhUDFAP9AhUD/gL/AhYDFQP+AhYD/wIAAxcDFgP/AhcDAAMBAxgDFwMAAxgDAQMCAxkDGAMBAxkDAgMDAxoDGQMCAxoDAwMEAxsDGgMDAxsDBAMFAxwDGwMEAxwDBQMGAx0DHAMFAx0DBgMHAx4DHQMGAx4DBwMIAx8DHgMHAx8DCAMJAyADHwMIAyADCQMKAyEDIAMJAyEDCgMLAyIDIQMKAyIDCwMMAyMDIgMLAyMDDAMaACMDaQBoACQDaAANAyQDDQMOAyUDJAMNAyUDDgMPAyYDJQMOAyYDDwMQAycDJgMPAycDEAMRAygDJwMQAygDEQMSAykDKAMRAykDEgMTAyoDKQMSAyoDEwMUAysDKgMTAysDFAMVAywDKwMUAywDFQMWAy0DLAMVAy0DFgMXAy4DLQMWAy4DFwMYAy8DLgMXAy8DGAMZAzADLwMYAzADAAAvAzADGQMaAzEDMAMZAzEDGgMbAzIDMQMaAzIDGwMcAzMDMgMbAzMDHAMdAzQDMwMcAzQDHQMeAzUDNAMdAzUDHgMfAzYDNQMeAzYDHwMgAzcDNgMfAzcDIAMhAzgDNwMgAzgDIQMiAzkDOAMhAzkDIgMjAzoDOQMiAzoDGgAZADsDIwMaADsDOgMjAzsDaQAkAzwDJAMlAzwDJQMmAz0DPAMlAz0DJgMnAz4DPQMmAz4DJwMoAz8DPgMnAz8DKAMpA0ADPwMoA0ADKQMqA0EDQAMpA0EDKgMrA0IDQQMqA0IDKwMsA0MDQgMrA0MDLAMtA0QDQwMsA0QDLQMuA0UDRAMtA0UDAACBAEYDLgMvA0YDRQMuA0YDLwMAAEYDAQAAAEcDAAAwA0cDMAMxA0cDMQMyA0gDRwMxA0gDMgMzA0kDSAMyA0kDMwM0A0oDSQMzA0oDNAM1A0sDSgM0A0sDNQM2A0wDSwM1A0wDNgM3A00DTAM2A00DNwM4A04DTQM3A04DOAM5A08DTgM4A08DOQM6A1ADTwM5A1ADOwMZAFEDOgM7A1EDUAM6A1EDagBpAFIDaQA8A1IDawBqAFIDPAM9A1MDUgM8A1MDPQM+A1QDUwM9A1QDPgM/A1UDVAM+A1UDPwNAA1YDVQM/A1YDQANBA1cDVgNAA1cDQQNCA1gDVwNBA1gDQgNDA1kDWANCA1kDQwNEA1oDWQNDA1oDRANFA1sDWgNEA1sDRQNGA1wDRgOBAFwDgQCAAFwDWwNFA1wDAgABAF0DAQBHA10DRwNIA10DSANJA14DXQNIA14DSQNKA18DXgNJA18DSgNLA2ADXwNKA2ADSwNMA2EDYANLA2EDTANNA2IDYQNMA2IDTQNOA2MDYgNNA2MDTgNPA2QDYwNOA2QDTwNQA2UDZANPA2UDUANRA2YDZQNQA2YDGQAYAGcDUQMZAGcDGAAXAGcDZgNRA2cDawBSA2gDUgNTA2gDUwNUA2kDaANTA2kDVANVA2oDaQNUA2oDVQNWA2sDagNVA2sDVgNXA2wDawNWA2wDVwNYA20DbANXA20DWANZA24DbQNYA24DWQNaA28DbgNZA28DWgNbA3ADbwNaA3ADWwNcA3EDXAOAAHEDgAB/AHEDcANbA3EDAwACAHIDAgBdA3IDXQNeA3IDXgNfA3MDcgNeA3MDXwNgA3QDcwNfA3QDYANhA3UDdANgA3UDYQNiA3YDdQNhA3YDYgNjA3cDdgNiA3cDYwNkA3gDdwNjA3gDZANlA3kDeANkA3kDZQNmA3oDeQNlA3oDZgNnA3sDegNmA3sDZwMXAHsDbQBsAHwDbABrAHwDawBoA3wDaANpA30DfANoA30DaQNqA34DfQNpA34DagNrA38DfgNqA38DawNsA4ADfwNrA4ADbANtA4EDgANsA4EDbQNuA4IDgQNtA4IDbgNvA4MDggNuA4MDbwNwA4QDgwNvA4QDfwB+AIUDcANxA4UDhANwA4UDcQN/AIUDBAADAIYDAwByA4YDcgNzA4YDcwN0A4cDhgNzA4cDdAN1A4gDhwN0A4gDdQN2A4kDiAN1A4kDdgN3A4oDiQN2A4oDdwN4A4sDigN3A4sDeAN5A4wDiwN4A4wDeQN6A40DjAN5A40DegN7A44DjQN6A44DFwAWAI8DewMXAI8DFgAVAI8DjgN7A48DbQB8A5ADfAN9A5ADfQN+A5EDkAN9A5EDfgN/A5IDkQN+A5IDfwOAA5MDkgN/A5MDgAOBA5QDkwOAA5QDgQOCA5UDlAOBA5UDggODA5YDlQOCA5YDgwOEA5cDlgODA5cDfgB9AJgDhAOFA5gDlwOEA5gDhQN+AJgDBQAEAJkDBACGA5kDhgOHA5kDhwOIA5oDmQOHA5oDiAOJA5sDmgOIA5sDiQOKA5wDmwOJA5wDigOLA50DnAOKA50DiwOMA54DnQOLA54DjAONA58DngOMA58DjQOOA6ADnwONA6ADjgOPA6EDoAOOA6EDjwMVAKEDbgBtAKIDbQCQA6IDkAORA6MDogOQA6MDkQOSA6QDowORA6QDkgOTA6UDpAOSA6UDkwOUA6YDpQOTA6YDlAOVA6cDpgOUA6cDlQOWA6gDpwOVA6gDlgOXA6kDqAOWA6kDfQB8AKoDlwOYA6oDqQOXA6oDmAN9AKoDBgAFAKsDBQCZA6sDmQOaA6sDmgObA6wDqwOaA6wDmwOcA60DrAObA60DnAOdA64DrQOcA64DnQOeA68DrgOdA68DngOfA7ADrwOeA7ADnwOgA7EDsAOfA7EDoAOhA7IDsQOgA7IDFQAUALMDoQMVALMDsgOhA7MDbwBuALQDcABvALQDbgCiA7QDogOjA7QDowOkA7UDtAOjA7UDpAOlA7YDtQOkA7YDpQOmA7cDtgOlA7cDpgOnA7gDtwOmA7gDpwOoA7kDuAOnA7kDqAOpA7oDuQOoA7oDfAB7ALsDqgN8ALsDqQOqA7sDugOpA7sDBwAGALwDBgCrA7wDqwOsA7wDrAOtA70DvAOsA70DrQOuA74DvQOtA74DrgOvA78DvgOuA78DrwOwA8ADvwOvA8ADsAOxA8EDwAOwA8EDsQOyA8IDwQOxA8IDEwASAMMDFAATAMMDswMUAMMDsgOzA8MDwgOyA8MDcQBwAMQDcAC0A8QDcgBxAMQDtAO1A8QDcwByAMUDtQO2A8UDcgDEA8UDxAO1A8UDtgO3A8YDxQO2A8YDcwDFA8YDtwO4A8cDxgO3A8cDuAO5A8gDxwO4A8gDuQO6A8kDyAO5A8kDewB6AMoDuwN7AMoDugO7A8oDyQO6A8oDCAAHAMsDBwC8A8sDvAO9A8sDvQO+A8wDywO9A8wDvgO/A80DzAO+A80DvwPAA84DzQO/A84DwAPBA88DzgPAA88DwQPCA9ADEAAPANADDwDPA9ADzwPBA9ADEgARANEDwwMSANEDwgPDA9EDEQAQANEDEADQA9ED0APCA9EDdABzANIDcwDGA9IDxgPHA9IDdQB0ANMDdADSA9MDxwPIA9MD0gPHA9MDdgB1ANQDdQDTA9QDyAPJA9QD0wPIA9QDygN6ANUDyQPKA9UD1APJA9UDCADLA9YDywPMA9YDDQAMANcDzAPNA9cD1gPMA9cDDgANANgDzQPOA9gD1wPNA9gDDQDXA9gDDwAOANkDzwMPANkDzgPPA9kDDgDYA9kD2APOA9kDdwB2ANoDdgDUA9oD1APVA9oDegB5ANsD1QN6ANsDeQB3ANsDdwDaA9sD2gPVA9sDCQAIANwDCADWA9wDCwAJANwD1gPXA90D1wMMAN0DDAALAN0DCwDcA90D3APWA90D","ao":"/v37+vv8/f7//////////vv5+/z9/f37+vr5+fn49vPu7Ozx9/v9/v///////////////////////////////////////////////////////////////////v79+vfx7Ovu8/b4+fn5+vr7/P39/Pv5+/7//////////v38+vr7/f/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/v////////////////////////7+/v7///////////////////////7+/P3+//////////////////////79/Pr8/v////////////////////78+vX5/P7///////////////////78+fb0+f3////////////////////9+fTu9Pr+///////////////////++vXu8Pf8/v/////////////////+/Pfw7vT6/v///////////////////vr07vP5/f////////////////////358/b4/P7///////////////////78+Pb3+fz+/////////////////////vz59/n7/f7///////////////////79+/n5+/3+/v7///////////////7+/v37+fn6/P7+/v7//////////////v7+/fz6+fr7/f7+/v7////////////+/v7+/fv5+fr8/f39/v7///////////7+/f39/Pr5+vv9/f3+/v7+/v7+/v7+/v79/f37+vr7/f39/f7+/v39/f3+/v79/f39+/r8/f7+/v7+/v37+/3+/v7+/v79/P39/v7+/v7+/fv7/f7+/v7+/v39/f7+/v7+/v38/P3+/v7+/v7+/v7+/////v79/f7+/////v7+/f3+/////v7+/v////79/fv9/v////7+/////v37////////////////"},
    back: {"pat":"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","pos":"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","tri":"BgAFAAcAdABzAHUASABHAHoASQBIAHoASgBJAHoARwBGAHsAegBHAHsARgBFAHwAewBGAHwARQBEAH0AfABFAH0ARABDAH4AfQBEAH4AQwBCAH8AfgBDAH8AQgBBAIAAfwBCAIAAQQBAAIEAgABBAIEAQAA/AIIAgQBAAIIAPwA+AIMAggA/AIMAPQA8AIQAPgA9AIQAgwA+AIQAPAA7AIUAhAA8AIUAOwA6AIYAhQA7AIYAOgA5AIcAhgA6AIcAOQA4AIgAhwA5AIgAOAA3AIkAiAA4AIkANwA2AIoAiQA3AIoANgA1AIsAigA2AIsANQA0AIwAiwA1AIwANAAzAI0AjAA0AI0AMQAwAI4AMgAxAI4AMwAyAI4AjQAzAI4ASwBKAI8ASgB6AI8AegB7AJAAjwB6AJAAewB8AJEAkAB7AJEAfAB9AJIAkQB8AJIAfQB+AJMAkgB9AJMAfgB/AJQAkwB+AJQAfwCAAJUAlAB/AJUAgACBAJYAlQCAAJYAgQCCAJcAlgCBAJcAggCDAJgAlwCCAJgAgwCEAJkAmACDAJkAhACFAJoAmQCEAJoAhQCGAJsAmgCFAJsAhgCHAJwAmwCGAJwAhwCIAJ0AnACHAJ0AiACJAJ4AnQCIAJ4AiQCKAJ8AngCJAJ8AigCLAKAAnwCKAKAAiwCMAKEAoACLAKEAjACNAKIAoQCMAKIAjQCOAKMAogCNAKMAMAAvAKQAjgAwAKQAowCOAKQATABLAKUASwCPAKUAjwCQAKUAkACRAKYApQCQAKYAkQCSAKcApgCRAKcAkgCTAKgApwCSAKgAkwCUAKkAqACTAKkAlACVAKoAqQCUAKoAlQCWAKsAqgCVAKsAlgCXAKwAqwCWAKwAlwCYAK0ArACXAK0AmACZAK4ArQCYAK4AmQCaAK8ArgCZAK8AmgCbALAArwCaALAAmwCcALEAsACbALEAnACdALIAsQCcALIAnQCeALMAsgCdALMAngCfALQAswCeALQAnwCgALUAtACfALUAoAChALYAtQCgALYAoQCiALcAtgChALcAogCjALgAtwCiALgALwAuALkApAAvALkAowCkALkAuACjALkATQBMALoATAClALoApQCmALsAugClALsApgCnALwAuwCmALwApwCoAL0AvACnAL0AqACpAL4AvQCoAL4AqQCqAL8AvgCpAL8AqgCrAMAAvwCqAMAAqwCsAMEAwACrAMEArACtAMIAwQCsAMIArQCuAMMAwgCtAMMArgCvAMQAwwCuAMQArwCwAMUAxACvAMUAsACxAMYAxQCwAMYAsQCyAMcAxgCxAMcAsgCzAMgAxwCyAMgAswC0AMkAyACzAMkAtAC1AMoAyQC0AMoAtQC2AMsAygC1AMsAtgC3AMwAywC2AMwAtwC4AM0AzAC3AM0AuAC5AM4AzQC4AM4ALgAtAM8AuQAuAM8AzgC5AM8ATgBNANAATQC6ANAAugC7ANAAuwC8ANEA0AC7ANEAvAC9ANIA0QC8ANIAvQC+ANMA0gC9ANMAvgC/ANQA0wC+ANQAvwDAANUA1AC/ANUAwADBANYA1QDAANYAwQDCANcA1gDBANcAwgDDANgA1wDCANgAwwDEANkA2ADDANkAxADFANoA2QDEANoAxQDGANsA2gDFANsAxgDHANwA2wDGANwAxwDIAN0A3ADHAN0AyADJAN4A3QDIAN4AyQDKAN8A3gDJAN8AygDLAOAA3wDKAOAAywDMAOEA4ADLAOEAzADNAOIA4QDMAOIAzQDOAOMA4gDNAOMALQAsAOQAzwAtAOQAzgDPAOQA4wDOAOQATwBOAOUATgDQAOUA0ADRAOYA5QDQAOYA0QDSAOcA5gDRAOcA0gDTAOgA5wDSAOgA0wDUAOkA6ADTAOkA1ADVAOoA6QDUAOoA1QDWAOsA6gDVAOsA1gDXAOwA6wDWAOwA1wDYAO0A7ADXAO0A2ADZAO4A7QDYAO4A2QDaAO8A7gDZAO8A2gDbAPAA7wDaAPAA2wDcAPEA8ADbAPEA3ADdAPIA8QDcAPIA3QDeAPMA8gDdAPMA3gDfAPQA8wDeAPQA3wDgAPUA9ADfAPUA4ADhAPYA9QDgAPYA4QDiAPcA9gDhAPcA4gDjAPgA9wDiAPgA4wDkAPkA+ADjAPkALAArAPoA5AAsAPoA+QDkAPoATwDlAPsA5QDmAPsA5gDnAPwA+wDmAPwA5wDoAP0A/ADnAP0A6ADpAP4A/QDoAP4A6QDqAP8A/gDpAP8A6gDrAAAB/wDqAAAB6wDsAAEBAAHrAAEB7ADtAAIBAQHsAAIB7QDuAAMBAgHtAAMB7gDvAAQBAwHuAAQB7wDwAAUBBAHvAAUB8ADxAAYBBQHwAAYB8QDyAAcBBgHxAAcB8gDzAAgBBwHyAAgB8wD0AAkBCAHzAAkB9AD1AAoBCQH0AAoB9QD2AAsBCgH1AAsB9gD3AAwBCwH2AAwB9wD4AA0BDAH3AA0B+AD5AA4BDQH4AA4B+QD6AA8BDgH5AA8B+gArAA8BUABPABABTwD7ABABUQBQABAB+wD8ABEBEAH7ABEB/AD9ABIBEQH8ABIB/QD+ABMBEgH9ABMB/gD/ABQBEwH+ABQB/wAAARUBFAH/ABUBAAEBARYBFQEAARYBAQECARcBFgEBARcBAgEDARgBFwECARgBAwEEARkBGAEDARkBBAEFARoBGQEEARoBBQEGARsBGgEFARsBBgEHARwBGwEGARwBBwEIAR0BHAEHAR0BCAEJAR4BHQEIAR4BCQEKAR8BHgEJAR8BCgELASABHwEKASABCwEMASEBIAELASEBDAENASIBIQEMASIBDQEOASMBIgENASMBDgEPASQBIwEOASQBKwAqACUBDwErACUBKgApACUBJAEPASUBUQAQASYBEAERASYBEQESAScBJgERAScBEgETASgBJwESASgBEwEUASkBKAETASkBFAEVASoBKQEUASoBFQEWASsBKgEVASsBFgEXASwBKwEWASwBFwEYAS0BLAEXAS0BGAEZAS4BLQEYAS4BGQEaAS8BLgEZAS8BGgEbATABLwEaATABGwEcATEBMAEbATEBHAEdATIBMQEcATIBHQEeATMBMgEdATMBHgEfATQBMwEeATQBHwEgATUBNAEfATUBIAEhATYBNQEgATYBIQEiATcBNgEhATcBIgEjATgBNwEiATgBIwEkATkBOAEjATkBJAElAToBOQEkAToBJQEpADoBUgBRADsBUQAmATsBJgEnATwBOwEmATwBJwEoAT0BPAEnAT0BKAEpAT4BPQEoAT4BKQEqAT8BPgEpAT8BKgErAUABPwEqAUABKwEsAUEBQAErAUEBLAEtAUIBQQEsAUIBLQEuAUMBQgEtAUMBLgEvAUQBQwEuAUQBLwEwAUUBRAEvAUUBMAExAUYBRQEwAUYBMQEyAUcBRgExAUcBMgEzAUgBRwEyAUgBMwE0AUkBSAEzAUkBNAE1AUoBSQE0AUoBNQE2AUsBSgE1AUsBNgE3AUwBSwE2AUwBNwE4AU0BTAE3AU0BOAE5AU4BTQE4AU4BOQE6AU8BTgE5AU8BKQAoAFABOgEpAFABTwE6AVABUwBSAFEBUgA7AVEBOwE8AVEBPAE9AVIBUQE8AVIBPQE+AVMBUgE9AVMBPgE/AVQBUwE+AVQBPwFAAVUBVAE/AVUBQAFBAVYBVQFAAVYBQQFCAVcBVgFBAVcBQgFDAVgBVwFCAVgBQwFEAVkBWAFDAVkBRAFFAVoBWQFEAVoBRQFGAVsBWgFFAVsBRgFHAVwBWwFGAVwBRwFIAV0BXAFHAV0BSAFJAV4BXQFIAV4BSQFKAV8BXgFJAV8BSgFLAWABXwFKAWABSwFMAWEBYAFLAWEBTAFNAWIBYQFMAWIBTQFOAWMBYgFNAWMBTgFPAWQBYwFOAWQBKAAnAGUBUAEoAGUBTwFQAWUBZAFPAWUBVABTAGYBUwBRAWYBUQFSAWcBZgFRAWcBUgFTAWgBZwFSAWgBUwFUAWkBaAFTAWkBVAFVAWoBaQFUAWoBVQFWAWsBagFVAWsBVgFXAWwBawFWAWwBVwFYAW0BbAFXAW0BWAFZAW4BbQFYAW4BWQFaAW8BbgFZAW8BWgFbAXABbwFaAXABWwFcAXEBcAFbAXEBXAFdAXIBcQFcAXIBXQFeAXMBcgFdAXMBXgFfAXQBcwFeAXQBXwFgAXUBdAFfAXUBYAFhAXYBdQFgAXYBYQFiAXcBdgFhAXcBYgFjAXgBdwFiAXgBYwFkAXkBeAFjAXkBZAFlAXoBeQFkAXoBJwAmAHsBZQEnAHsBegFlAXsBVABmAXwBZgFnAXwBZwFoAX0BfAFnAX0BaAFpAX4BfQFoAX4BaQFqAX8BfgFpAX8BagFrAYABfwFqAYABawFsAYEBgAFrAYEBbAFtAYIBgQFsAYIBbQFuAYMBggFtAYMBbgFvAYQBgwFuAYQBbwFwAYUBhAFvAYUBcAFxAYYBhQFwAYYBcQFyAYcBhgFxAYcBcgFzAYgBhwFyAYgBcwF0AYkBiAFzAYkBdAF1AYoBiQF0AYoBdQF2AYsBigF1AYsBdgF3AYwBiwF2AYwBdwF4AY0BjAF3AY0BeAF5AY4BjQF4AY4BeQF6AY8BjgF5AY8BewEmAJABegF7AZABjwF6AZABVQBUAJEBVAB8AZEBVgBVAJEBfAF9AZIBkQF8AZIBfQF+AZMBkgF9AZMBfgF/AZQBkwF+AZQBfwGAAZUBlAF/AZUBgAGBAZYBlQGAAZYBgQGCAZcBlgGBAZcBggGDAZgBlwGCAZgBgwGEAZkBmAGDAZkBhAGFAZoBmQGEAZoBhQGGAZsBmgGFAZsBhgGHAZwBmwGGAZwBhwGIAZ0BnAGHAZ0BiAGJAZ4BnQGIAZ4BiQGKAZ8BngGJAZ8BigGLAaABnwGKAaABiwGMAaEBoAGLAaEBjAGNAaIBoQGMAaIBjQGOAaMBogGNAaMBjgGPAaQBowGOAaQBjwGQAaUBpAGPAaUBJgAlAKYBkAEmAKYBJQAkAKYBpQGQAaYBVgCRAacBkQGSAacBkgGTAagBpwGSAagBkwGUAakBqAGTAakBlAGVAaoBqQGUAaoBlQGWAasBqgGVAasBlgGXAawBqwGWAawBlwGYAa0BrAGXAa0BmAGZAa4BrQGYAa4BmQGaAa8BrgGZAa8BmgGbAbABrwGaAbABmwGcAbEBsAGbAbEBnAGdAbIBsQGcAbIBnQGeAbMBsgGdAbMBngGfAbQBswGeAbQBnwGgAbUBtAGfAbUBoAGhAbYBtQGgAbYBoQGiAbcBtgGhAbcBogGjAbgBtwGiAbgBowGkAbkBuAGjAbkBpAGlAboBuQGkAboBpQGmAbsBugGlAbsBpgEkALsBVwBWALwBVgCnAbwBWABXALwBpwGoAb0BvAGnAb0BqAGpAb4BvQGoAb4BqQGqAb8BvgGpAb8BqgGrAcABvwGqAcABqwGsAcEBwAGrAcEBrAGtAcIBwQGsAcIBrQGuAcMBwgGtAcMBrgGvAcQBwwGuAcQBrwGwAcUBxAGvAcUBsAGxAcYBxQGwAcYBsQGyAccBxgGxAccBsgGzAcgBxwGyAcgBswG0AckByAGzAckBtAG1AcoByQG0AcoBtQG2AcsBygG1AcsBtgG3AcwBywG2AcwBtwG4Ac0BzAG3Ac0BuAG5Ac4BzQG4Ac4BuQG6Ac8BzgG5Ac8BugG7AdABzwG6AdABJAAjANEBuwEkANEBIwAiANEB0AG7AdEBWAC8AdIBvAG9AdIBvQG+AdMB0gG9AdMBvgG/AdQB0wG+AdQBvwHAAdUB1AG/AdUBwAHBAdYB1QHAAdYBwQHCAdcB1gHBAdcBwgHDAdgB1wHCAdgBwwHEAdkB2AHDAdkBxAHFAdoB2QHEAdoBxQHGAdsB2gHFAdsBxgHHAdwB2wHGAdwBxwHIAd0B3AHHAd0ByAHJAd4B3QHIAd4ByQHKAd8B3gHJAd8BygHLAeAB3wHKAeABywHMAeEB4AHLAeEBzAHNAeIB4QHMAeIBzQHOAeMB4gHNAeMBzgHPAeQB4wHOAeQBzwHQAeUB5AHPAeUB0AHRAeYB5QHQAeYB0QEiAOYBWQBYAOcBWADSAecB0gHTAegB5wHSAegB0wHUAekB6AHTAekB1AHVAeoB6QHUAeoB1QHWAesB6gHVAesB1gHXAewB6wHWAewB1wHYAe0B7AHXAe0B2AHZAe4B7QHYAe4B2QHaAe8B7gHZAe8B2gHbAfAB7wHaAfAB2wHcAfEB8AHbAfEB3AHdAfIB8QHcAfIB3QHeAfMB8gHdAfMB3gHfAfQB8wHeAfQB3wHgAfUB9AHfAfUB4AHhAfYB9QHgAfYB4QHiAfcB9gHhAfcB4gHjAfgB9wHiAfgB4wHkAfkB+AHjAfkB5AHlAfoB+QHkAfoB5QHmAfsB+gHlAfsBIgAhAPwB5gEiAPwB+wHmAfwBWgBZAP0BWQDnAf0B5wHoAf0B6AHpAf4B/QHoAf4B6QHqAf8B/gHpAf8B6gHrAQAC/wHqAQAC6wHsAQECAALrAQEC7AHtAQICAQLsAQIC7QHuAQMCAgLtAQMC7gHvAQQCAwLuAQQC7wHwAQUCBALvAQUC8AHxAQYCBQLwAQYC8QHyAQcCBgLxAQcC8gHzAQgCBwLyAQgC8wH0AQkCCALzAQkC9AH1AQoCCQL0AQoC9QH2AQsCCgL1AQsC9gH3AQwCCwL2AQwC9wH4AQ0CDAL3AQ0C+AH5AQ4CDQL4AQ4C+QH6AQ8CDgL5AQ8C+gH7ARACDwL6ARACIQAgABEC/AEhABEC+wH8ARECEAL7ARECWwBaABICWgD9ARIC/QH+ARMCEgL9ARMC/gH/ARQCEwL+ARQC/wEAAhUCFAL/ARUCAAIBAhYCFQIAAhYCAQICAhcCFgIBAhcCAgIDAhgCFwICAhgCAwIEAhkCGAIDAhkCBAIFAhoCGQIEAhoCBQIGAhsCGgIFAhsCBgIHAhwCGwIGAhwCBwIIAh0CHAIHAh0CCAIJAh4CHQIIAh4CCQIKAh8CHgIJAh8CCgILAiACHwIKAiACCwIMAiECIAILAiECDAINAiICIQIMAiICDQIOAiMCIgINAiMCDgIPAiQCIwIOAiQCDwIQAiUCJAIPAiUCEAIRAiYCJQIQAiYCIAAfACcCEQIgACcCJgIRAicCWwASAigCEgITAigCEwIUAikCKAITAikCFAIVAioCKQIUAioCFQIWAisCKgIVAisCFgIXAiwCKwIWAiwCFwIYAi0CLAIXAi0CGAIZAi4CLQIYAi4CGQIaAi8CLgIZAi8CGgIbAjACLwIaAjACGwIcAjECMAIbAjECHAIdAjICMQIcAjICHQIeAjMCMgIdAjMCHgIfAjQCMwIeAjQCHwIgAjUCNAIfAjUCIAIhAjYCNQIgAjYCIQIiAjcCNgIhAjcCIgIjAjgCNwIiAjgCIwIkAjkCOAIjAjkCJAIlAjoCOQIkAjoCJQImAjsCOgIlAjsCJwIfADwCJgInAjwCOwImAjwCXABbAD0CWwAoAj0CXQBcAD0CKAIpAj4CPQIoAj4CKQIqAj8CPgIpAj8CKgIrAkACPwIqAkACKwIsAkECQAIrAkECLAItAkICQQIsAkICLQIuAkMCQgItAkMCLgIvAkQCQwIuAkQCLwIwAkUCRAIvAkUCMAIxAkYCRQIwAkYCMQIyAkcCRgIxAkcCMgIzAkgCRwIyAkgCMwI0AkkCSAIzAkkCNAI1AkoCSQI0AkoCNQI2AksCSgI1AksCNgI3AkwCSwI2AkwCNwI4Ak0CTAI3Ak0COAI5Ak4CTQI4Ak4COQI6Ak8CTgI5Ak8COgI7AlACTwI6AlACOwI8AlECUAI7AlECHwAeAFICPAIfAFICHgAdAFICUQI8AlICXQA9AlMCPQI+AlMCPgI/AlQCUwI+AlQCPwJAAlUCVAI/AlUCQAJBAlYCVQJAAlYCQQJCAlcCVgJBAlcCQgJDAlgCVwJCAlgCQwJEAlkCWAJDAlkCRAJFAloCWQJEAloCRQJGAlsCWgJFAlsCRgJHAlwCWwJGAlwCRwJIAl0CXAJHAl0CSAJJAl4CXQJIAl4CSQJKAl8CXgJJAl8CSgJLAmACXwJKAmACSwJMAmECYAJLAmECTAJNAmICYQJMAmICTQJOAmMCYgJNAmMCTgJPAmQCYwJOAmQCTwJQAmUCZAJPAmUCUAJRAmYCZQJQAmYCUQJSAmcCZgJRAmcCUgIdAGcCXgBdAGgCXQBTAmgCUwJUAmkCaAJTAmkCVAJVAmoCaQJUAmoCVQJWAmsCagJVAmsCVgJXAmwCawJWAmwCVwJYAm0CbAJXAm0CWAJZAm4CbQJYAm4CWQJaAm8CbgJZAm8CWgJbAnACbwJaAnACWwJcAnECcAJbAnECXAJdAnICcQJcAnICXQJeAnMCcgJdAnMCXgJfAnQCcwJeAnQCXwJgAnUCdAJfAnUCYAJhAnYCdQJgAnYCYQJiAncCdgJhAncCYgJjAngCdwJiAngCYwJkAnkCeAJjAnkCZAJlAnoCeQJkAnoCZQJmAnsCegJlAnsCZgJnAnwCewJmAnwCHQAcAH0CZwIdAH0CfAJnAn0CXwBeAH4CXgBoAn4CaAJpAn4CaQJqAn8CfgJpAn8CagJrAoACfwJqAoACawJsAoECgAJrAoECbAJtAoICgQJsAoICbQJuAoMCggJtAoMCbgJvAoQCgwJuAoQCbwJwAoUChAJvAoUCcAJxAoYChQJwAoYCcQJyAocChgJxAocCcgJzAogChwJyAogCcwJ0AokCiAJzAokCdAJ1AooCiQJ0AooCdQJ2AosCigJ1AosCdgJ3AowCiwJ2AowCdwJ4Ao0CjAJ3Ao0CeAJ5Ao4CjQJ4Ao4CeQJ6Ao8CjgJ5Ao8CegJ7ApACjwJ6ApACewJ8ApECkAJ7ApECHAAbAJICfQIcAJICfAJ9ApICkQJ8ApICXwB+ApMCfgJ/ApQCkwJ+ApQCfwKAApUClAJ/ApUCgAKBApYClQKAApYCgQKCApcClgKBApcCggKDApgClwKCApgCgwKEApkCmAKDApkChAKFApoCmQKEApoChQKGApsCmgKFApsChgKHApwCmwKGApwChwKIAp0CnAKHAp0CiAKJAp4CnQKIAp4CiQKKAp8CngKJAp8CigKLAqACnwKKAqACiwKMAqECoAKLAqECjAKNAqICoQKMAqICjQKOAqMCogKNAqMCjgKPAqQCowKOAqQCjwKQAqUCpAKPAqUCkAKRAqYCpQKQAqYCkQKSAqcCpgKRAqcCkgIbAKgCpwKSAqgCYABfAKkCXwCTAqkCYQBgAKkCkwKUAqoCqQKTAqoClAKVAqsCqgKUAqsClQKWAqwCqwKVAqwClgKXAq0CrAKWAq0ClwKYAq4CrQKXAq4CmAKZAq8CrgKYAq8CmQKaArACrwKZArACmgKbArECsAKaArECmwKcArICsQKbArICnAKdArMCsgKcArMCnQKeArQCswKdArQCngKfArUCtAKeArUCnwKgArYCtQKfArYCoAKhArcCtgKgArcCoQKiArgCtwKhArgCogKjArkCuAKiArkCowKkAroCuQKjAroCpAKlArsCugKkArsCpQKmArwCuwKlArwCpgKnAr0CvAKmAr0CpwKoAr4CvQKnAr4CGwAaAL8CqAIbAL8CGgAZAL8CvgKoAr8CYQCpAsACqQKqAsACqgKrAsECwAKqAsECqwKsAsICwQKrAsICrAKtAsMCwgKsAsMCrQKuAsQCwwKtAsQCrgKvAsUCxAKuAsUCrwKwAsYCxQKvAsYCsAKxAscCxgKwAscCsQKyAsgCxwKxAsgCsgKzAskCyAKyAskCswK0AsoCyQKzAsoCtAK1AssCygK0AssCtQK2AswCywK1AswCtgK3As0CzAK2As0CtwK4As4CzQK3As4CuAK5As8CzgK4As8CuQK6AtACzwK5AtACugK7AtEC0AK6AtECuwK8AtIC0QK7AtICvAK9AtMC0gK8AtMCvQK+AtQC0wK9AtQCvwIZANUCvgK/AtUC1AK+AtUCYgBhANYCYQDAAtYCwALBAtcC1gLAAtcCwQLCAtgC1wLBAtgCwgLDAtkC2ALCAtkCwwLEAtoC2QLDAtoCxALFAtsC2gLEAtsCxQLGAtwC2wLFAtwCxgLHAt0C3ALGAt0CxwLIAt4C3QLHAt4CyALJAt8C3gLIAt8CyQLKAuAC3wLJAuACygLLAuEC4ALKAuECywLMAuIC4QLLAuICzALNAuMC4gLMAuMCzQLOAuQC4wLNAuQCzgLPAuUC5ALOAuUCzwLQAuYC5QLPAuYC0ALRAucC5gLQAucC0QLSAugC5wLRAugC0gLTAukC6ALSAukC0wLUAuoC6QLTAuoC1ALVAusC6gLUAusCGQAYAOwC1QIZAOwC6wLVAuwCYwBiAO0CYgDWAu0CZABjAO0C1gLXAu4C7QLWAu4C1wLYAu8C7gLXAu8C2ALZAvAC7wLYAvAC2QLaAvEC8ALZAvEC2gLbAvIC8QLaAvIC2wLcAvMC8gLbAvMC3ALdAvQC8wLcAvQC3QLeAvUC9ALdAvUC3gLfAvYC9QLeAvYC3wLgAvcC9gLfAvcC4ALhAvgC9wLgAvgC4QLiAvkC+ALhAvkC4gLjAvoC+QLiAvoC4wLkAvsC+gLjAvsC5ALlAvwC+wLkAvwC5QLmAv0C/ALlAv0C5gLnAv4C/QLmAv4C5wLoAv8C/gLnAv8C6ALpAgAD/wLoAgAD6QLqAgEDAAPpAgED6gLrAgIDAQPqAgID6wLsAgMDAgPrAgMDGAAXAAQD7AIYAAQDFwAWAAQDAwPsAgQDZADtAgUD7QLuAgUD7gLvAgYDBQPuAgYD7wLwAgcDBgPvAgcD8ALxAggDBwPwAggD8QLyAgkDCAPxAgkD8gLzAgoDCQPyAgoD8wL0AgsDCgPzAgsD9AL1AgwDCwP0AgwD9QL2Ag0DDAP1Ag0D9gL3Ag4DDQP2Ag4D9wL4Ag8DDgP3Ag8D+AL5AhADDwP4AhAD+QL6AhEDEAP5AhED+gL7AhIDEQP6AhID+wL8AhMDEgP7AhMD/AL9AhQDEwP8AhQD/QL+AhUDFAP9AhUD/gL/AhYDFQP+AhYD/wIAAxcDFgP/AhcDAAMBAxgDFwMAAxgDAQMCAxkDGAMBAxkDAgMDAxoDGQMCAxoDAwMEAxsDGgMDAxsDBAMWABsDZQBkABwDZAAFAxwDBQMGAx0DHAMFAx0DBgMHAx4DHQMGAx4DBwMIAx8DHgMHAx8DCAMJAyADHwMIAyADCQMKAyEDIAMJAyEDCgMLAyIDIQMKAyIDCwMMAyMDIgMLAyMDDAMNAyQDIwMMAyQDDQMOAyUDJAMNAyUDDgMPAyYDJQMOAyYDDwMQAycDJgMPAycDEAMRAygDJwMQAygDEQMSAykDKAMRAykDEgMTAyoDKQMSAyoDEwMUAysDKgMTAysDFAMVAywDKwMUAywDFQMWAy0DLAMVAy0DFgMXAy4DLQMWAy4DFwMYAy8DLgMXAy8DGAMZAzADLwMYAzADGQMaAzEDMAMZAzEDGgMbAzIDMQMaAzIDFgAVADMDGwMWADMDMgMbAzMDZQAcAzQDHAMdAzQDHQMeAzUDNAMdAzUDHgMfAzYDNQMeAzYDHwMgAzcDNgMfAzcDIAMhAzgDNwMgAzgDIQMiAzkDOAMhAzkDIgMjAzoDOQMiAzoDIwMkAzsDOgMjAzsDJAMlAzwDOwMkAzwDJQMmAz0DPAMlAz0DJgMnAz4DPQMmAz4DJwMoAz8DPgMnAz8DKAMpA0ADPwMoA0ADKQMqA0EDQAMpA0EDKgMrA0IDQQMqA0IDKwMsA0MDQgMrA0MDLAMtA0QDQwMsA0QDLQMuA0UDRAMtA0UDLgMvA0YDRQMuA0YDLwMwA0cDRgMvA0cDMAMxA0gDRwMwA0gDMQMyA0kDSAMxA0kDMwMVAEoDMgMzA0oDSQMyA0oDZgBlAEsDZQA0A0sDZwBmAEsDNAM1A0wDSwM0A0wDNQM2A00DTAM1A00DNgM3A04DTQM2A04DNwM4A08DTgM3A08DOAM5A1ADTwM4A1ADOQM6A1EDUAM5A1EDOgM7A1IDUQM6A1IDOwM8A1MDUgM7A1MDPAM9A1QDUwM8A1QDPQM+A1UDVAM9A1UDPgM/A1YDVQM+A1YDPwNAA1cDVgM/A1cDQANBA1gDVwNAA1gDQQNCA1kDWANBA1kDQgNDA1oDWQNCA1oDQwNEA1sDWgNDA1sDRANFA1wDWwNEA1wDRQNGA10DXANFA10DRgNHA14DXQNGA14DRwNIA18DXgNHA18DSANJA2ADXwNIA2ADSQNKA2EDYANJA2EDFQAUAGIDSgMVAGIDFAATAGIDYQNKA2IDZwBLA2MDSwNMA2MDTANNA2QDYwNMA2QDTQNOA2UDZANNA2UDTgNPA2YDZQNOA2YDTwNQA2cDZgNPA2cDUANRA2gDZwNQA2gDUQNSA2kDaANRA2kDUgNTA2oDaQNSA2oDUwNUA2sDagNTA2sDVANVA2wDawNUA2wDVQNWA20DbANVA20DVgNXA24DbQNWA24DVwNYA28DbgNXA28DWANZA3ADbwNYA3ADWQNaA3EDcANZA3EDWgNbA3IDcQNaA3IDWwNcA3MDcgNbA3MDXANdA3QDcwNcA3QDXQNeA3UDdANdA3UDXgNfA3YDdQNeA3YDXwNgA3cDdgNfA3cDYANhA3gDdwNgA3gDYQNiA3kDeANhA3kDYgMTAHkDaQBoAHoDaABnAHoDZwBjA3oDYwNkA3sDegNjA3sDZANlA3wDewNkA3wDZQNmA30DfANlA30DZgNnA34DfQNmA34DZwNoA38DfgNnA38DaANpA4ADfwNoA4ADaQNqA4EDgANpA4EDagNrA4IDgQNqA4IDawNsA4MDggNrA4MDbANtA4QDgwNsA4QDbQNuA4UDhANtA4UDbgNvA4YDhQNuA4YDbwNwA4cDhgNvA4cDcANxA4gDhwNwA4gDcQNyA4kDiANxA4kDcgNzA4oDiQNyA4oDcwN0A4sDigNzA4sDdAN1A4wDiwN0A4wDdQN2A40DjAN1A40DdgN3A44DjQN2A44DdwN4A48DjgN3A48DeAN5A5ADjwN4A5ADEwASAJEDeQMTAJEDEgARAJEDkAN5A5EDaQB6A5IDegN7A5IDewN8A5MDkgN7A5MDfAN9A5QDkwN8A5QDfQN+A5UDlAN9A5UDfgN/A5YDlQN+A5YDfwOAA5cDlgN/A5cDgAOBA5gDlwOAA5gDgQOCA5kDmAOBA5kDggODA5oDmQOCA5oDgwOEA5sDmgODA5sDhAOFA5wDmwOEA5wDhQOGA50DnAOFA50DhgOHA54DnQOGA54DhwOIA58DngOHA58DiAOJA6ADnwOIA6ADiQOKA6EDoAOJA6EDigOLA6IDoQOKA6IDiwOMA6MDogOLA6MDjAONA6QDowOMA6QDjQOOA6UDpAONA6UDjgOPA6YDpQOOA6YDjwOQA6cDpgOPA6cDkAORA6gDpwOQA6gDkQMRAKgDagBpAKkDaQCSA6kDkgOTA6oDqQOSA6oDkwOUA6sDqgOTA6sDlAOVA6wDqwOUA6wDlQOWA60DrAOVA60DlgOXA64DrQOWA64DlwOYA68DrgOXA68DmAOZA7ADrwOYA7ADmQOaA7EDsAOZA7EDmgObA7IDsQOaA7IDmwOcA7MDsgObA7MDnAOdA7QDswOcA7QDnQOeA7UDtAOdA7UDngOfA7YDtQOeA7YDnwOgA7cDtgOfA7cDoAOhA7gDtwOgA7gDoQOiA7kDuAOhA7kDogOjA7oDuQOiA7oDowOkA7sDugOjA7sDpAOlA7wDuwOkA7wDpQOmA70DvAOlA70DpgOnA74DvQOmA74DpwOoA78DvgOnA78DEQAQAMADqAMRAMADvwOoA8ADawBqAMEDbABrAMEDagCpA8EDqQOqA8EDqgOrA8IDwQOqA8IDqwOsA8MDwgOrA8MDrAOtA8QDwwOsA8QDrQOuA8UDxAOtA8UDrgOvA8YDxQOuA8YDrwOwA8cDxgOvA8cDsAOxA8gDxwOwA8gDsQOyA8kDyAOxA8kDsgOzA8oDyQOyA8oDswO0A8sDygOzA8sDtAO1A8wDywO0A8wDtQO2A80DzAO1A80DtgO3A84DzQO2A84DtwO4A88DzgO3A88DuAO5A9ADzwO4A9ADuQO6A9ED0AO5A9EDugO7A9ID0QO6A9IDuwO8A9MD0gO7A9MDvAO9A9QD0wO8A9QDvQO+A9UD1AO9A9UDvgO/A9YD1QO+A9YDDwAOANcDEAAPANcDwAMQANcDvwPAA9cD1gO/A9cDbQBsANgDbADBA9gDbgBtANgDwQPCA9gDbwBuANkDwgPDA9kDbgDYA9kD2APCA9kDwwPEA9oD2QPDA9oDbwDZA9oDxAPFA9sD2gPEA9sDxQPGA9wD2wPFA9wDxgPHA90D3APGA90DxwPIA94D3QPHA94DyAPJA98D3gPIA98DyQPKA+AD3wPJA+ADygPLA+ED4APKA+EDywPMA+ID4QPLA+IDzAPNA+MD4gPMA+MDzQPOA+QD4wPNA+QDzgPPA+UD5APOA+UDzwPQA+YD5QPPA+YD0APRA+cD5gPQA+cD0QPSA+gD5wPRA+gD0gPTA+kD6APSA+kD0wPUA+oD6QPTA+oD1APVA+sD6gPUA+sD1QPWA+wDDAALAOwDCwDrA+wD6wPVA+wDDgANAO0D1wMOAO0D1gPXA+0DDQAMAO0DDADsA+0D7APWA+0DcABvAO4DbwDaA+4D2gPbA+4DcQBwAO8DcADuA+8D2wPcA+8D7gPbA+8DcgBxAPADcQDvA/AD3APdA/AD7wPcA/AD3QPeA/ED8APdA/ED3gPfA/ID8QPeA/IDeAB3APMD3wPgA/MD8gPfA/MDeQB4APQD4APhA/QD8wPgA/QDeADzA/QDAAB5APUD4QPiA/UDeQD0A/UD9APhA/UD4gPjA/YDAAD1A/YD9QPiA/YD4wPkA/cDAQAAAPcDAAD2A/cD9gPjA/cDAgABAPgDAQD3A/gD5APlA/gD9wPkA/gDAwACAPkDAgD4A/kD5QPmA/kD+APlA/kD5gPnA/oD+QPmA/oD5wPoA/sD+gPnA/sDCQAIAPwD6APpA/wD+wPoA/wDCgAJAP0D6QPqA/0D/APpA/0DCQD8A/0DCwAKAP4D6wMLAP4D6gPrA/4DCgD9A/4D/QPqA/4DcwByAP8DcgDwA/8D8APxA/8DdQBzAAAEcwD/AwAEdgB1AAAE8QPyAwAE/wPxAwAEdwB2AAEE8gPzAwEE8wN3AAEEdgAABAEEAATyAwEEBAADAAIEAwD5AwIE+QP6AwIEBQAEAAMEBwAFAAME+gP7AwMEAgT6AwMEBAACBAME+wP8AwQE/AMIAAQECAAHAAQEBwADBAQEAwT7AwQE","ao":"//////////////78+PX09fj8/f39/Pv6+vj39fDu7/T5/P7+/////////////////////////////////////////////////////////////////////v789/Do5+ry9fj5+vv8/P39/Pj08/T4/P7//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////v///////////////////////////v7+///////////////////////+/v39/v/////////////////////+/v37/f7////////////////////+/fz2+v3+/////////////////////fv49Pr9/////////////////////vv37PT7/v///////////////////vz38e73/P7//////////////////v348urz+v7///////////////////779fDw9/z+//////////////////79+fT09/v9///////////////////++/j29vf6/P7//////////////////v36+Pf4+fv9///////////////////9+/n5+fn6/P7//////////////////vz6+fn6+fr7/f///////////////////fv6+vr6+vr8/v/////////////////+/Pr6+vv6+vv9///////////////////9+/r6+/v6+/z+//////////////////78+/v7/Pv7/P7///////////////////78+/v8/Pz8/f7//////////////////v38/Pz9/fz9/v///////////////////v38/f38/P3+/////////////////////v38/Pr6/P7//////////////////////vz7+vb5/P7////////////////////+/Pn39vr9/v///////////////////v369v7////////////////////+////////"},
    sleeves: [{"rings":12,"around":28,"pos":"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","hang":"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","uv":"AAAAAHsJAAD2EgAAchwAAO0lAABoLwAA4zgAAF9CAADaSwAAVVUAANBeAABLaAAAx3EAAEJ7AAC9hAAAOI4AALSXAAAvoQAAqqoAACW0AACgvQAAHMcAAJfQAAAS2gAAjeMAAAntAACE9gAA//8AAAAAVRV7CVUV9hJVFXIcVRXtJVUVaC9VFeM4VRVfQlUV2ktVFVVVVRXQXlUVS2hVFcdxVRVCe1UVvYRVFTiOVRW0l1UVL6FVFaqqVRUltFUVoL1VFRzHVRWX0FUVEtpVFY3jVRUJ7VUVhPZVFf//VRUAAKsqewmrKvYSqypyHKsq7SWrKmgvqyrjOKsqX0KrKtpLqypVVasq0F6rKktoqyrHcasqQnurKr2Eqyo4jqsqtJerKi+hqyqqqqsqJbSrKqC9qyocx6sql9CrKhLaqyqN46sqCe2rKoT2qyr//6sqAAAAQHsJAED2EgBAchwAQO0lAEBoLwBA4zgAQF9CAEDaSwBAVVUAQNBeAEBLaABAx3EAQEJ7AEC9hABAOI4AQLSXAEAvoQBAqqoAQCW0AECgvQBAHMcAQJfQAEAS2gBAjeMAQAntAECE9gBA//8AQAAAVVV7CVVV9hJVVXIcVVXtJVVVaC9VVeM4VVVfQlVV2ktVVVVVVVXQXlVVS2hVVcdxVVVCe1VVvYRVVTiOVVW0l1VVL6FVVaqqVVUltFVVoL1VVRzHVVWX0FVVEtpVVY3jVVUJ7VVVhPZVVf//VVUAAKpqewmqavYSqmpyHKpq7SWqamgvqmrjOKpqX0KqatpLqmpVVapq0F6qaktoqmrHcapqQnuqar2Eqmo4jqpqtJeqai+hqmqqqqpqJbSqaqC9qmocx6pql9CqahLaqmqN46pqCe2qaoT2qmr//6pqAAAAgHsJAID2EgCAchwAgO0lAIBoLwCA4zgAgF9CAIDaSwCAVVUAgNBeAIBLaACAx3EAgEJ7AIC9hACAOI4AgLSXAIAvoQCAqqoAgCW0AICgvQCAHMcAgJfQAIAS2gCAjeMAgAntAICE9gCA//8AgAAAVZV7CVWV9hJVlXIcVZXtJVWVaC9VleM4VZVfQlWV2ktVlVVVVZXQXlWVS2hVlcdxVZVCe1WVvYRVlTiOVZW0l1WVL6FVlaqqVZUltFWVoL1VlRzHVZWX0FWVEtpVlY3jVZUJ7VWVhPZVlf//VZUAAKqqewmqqvYSqqpyHKqq7SWqqmgvqqrjOKqqX0KqqtpLqqpVVaqq0F6qqktoqqrHcaqqQnuqqr2Eqqo4jqqqtJeqqi+hqqqqqqqqJbSqqqC9qqocx6qql9CqqhLaqqqN46qqCe2qqoT2qqr//6qqAAD/v3sJ/7/2Ev+/chz/v+0l/79oL/+/4zj/v19C/7/aS/+/VVX/v9Be/79LaP+/x3H/v0J7/7+9hP+/OI7/v7SX/78vof+/qqr/vyW0/7+gvf+/HMf/v5fQ/78S2v+/jeP/vwnt/7+E9v+/////vwAAVdV7CVXV9hJV1XIcVdXtJVXVaC9V1eM4VdVfQlXV2ktV1VVVVdXQXlXVS2hV1cdxVdVCe1XVvYRV1TiOVdW0l1XVL6FV1aqqVdUltFXVoL1V1RzHVdWX0FXVEtpV1Y3jVdUJ7VXVhPZV1f//VdUAAKrqewmq6vYSqupyHKrq7SWq6mgvqurjOKrqX0Kq6tpLqupVVarq0F6q6ktoqurHcarqQnuq6r2Equo4jqrqtJeq6i+hquqqqqrqJbSq6qC9quocx6rql9Cq6hLaquqN46rqCe2q6oT2qur//6rqAAD//3sJ///2Ev//chz//+0l//9oL///4zj//19C///aS///VVX//9Be//9LaP//x3H//0J7//+9hP//OI7//7SX//8vof//qqr//yW0//+gvf//HMf//5fQ//8S2v//jeP//wnt//+E9v///////w==","tri":"AAABABwAAQAdABwAAQACAB0AAgAeAB0AAgADAB4AAwAfAB4AAwAEAB8ABAAgAB8ABAAFACAABQAhACAABQAGACEABgAiACEABgAHACIABwAjACIABwAIACMACAAkACMACAAJACQACQAlACQACQAKACUACgAmACUACgALACYACwAnACYACwAMACcADAAoACcADAANACgADQApACgADQAOACkADgAqACkADgAPACoADwArACoADwAQACsAEAAsACsAEAARACwAEQAtACwAEQASAC0AEgAuAC0AEgATAC4AEwAvAC4AEwAUAC8AFAAwAC8AFAAVADAAFQAxADAAFQAWADEAFgAyADEAFgAXADIAFwAzADIAFwAYADMAGAA0ADMAGAAZADQAGQA1ADQAGQAaADUAGgA2ADUAGgAbADYAGwA3ADYAGwAAADcAAAAcADcAHAAdADgAHQA5ADgAHQAeADkAHgA6ADkAHgAfADoAHwA7ADoAHwAgADsAIAA8ADsAIAAhADwAIQA9ADwAIQAiAD0AIgA+AD0AIgAjAD4AIwA/AD4AIwAkAD8AJABAAD8AJAAlAEAAJQBBAEAAJQAmAEEAJgBCAEEAJgAnAEIAJwBDAEIAJwAoAEMAKABEAEMAKAApAEQAKQBFAEQAKQAqAEUAKgBGAEUAKgArAEYAKwBHAEYAKwAsAEcALABIAEcALAAtAEgALQBJAEgALQAuAEkALgBKAEkALgAvAEoALwBLAEoALwAwAEsAMABMAEsAMAAxAEwAMQBNAEwAMQAyAE0AMgBOAE0AMgAzAE4AMwBPAE4AMwA0AE8ANABQAE8ANAA1AFAANQBRAFAANQA2AFEANgBSAFEANgA3AFIANwBTAFIANwAcAFMAHAA4AFMAOAA5AFQAOQBVAFQAOQA6AFUAOgBWAFUAOgA7AFYAOwBXAFYAOwA8AFcAPABYAFcAPAA9AFgAPQBZAFgAPQA+AFkAPgBaAFkAPgA/AFoAPwBbAFoAPwBAAFsAQABcAFsAQABBAFwAQQBdAFwAQQBCAF0AQgBeAF0AQgBDAF4AQwBfAF4AQwBEAF8ARABgAF8ARABFAGAARQBhAGAARQBGAGEARgBiAGEARgBHAGIARwBjAGIARwBIAGMASABkAGMASABJAGQASQBlAGQASQBKAGUASgBmAGUASgBLAGYASwBnAGYASwBMAGcATABoAGcATABNAGgATQBpAGgATQBOAGkATgBqAGkATgBPAGoATwBrAGoATwBQAGsAUABsAGsAUABRAGwAUQBtAGwAUQBSAG0AUgBuAG0AUgBTAG4AUwBvAG4AUwA4AG8AOABUAG8AVABVAHAAVQBxAHAAVQBWAHEAVgByAHEAVgBXAHIAVwBzAHIAVwBYAHMAWAB0AHMAWABZAHQAWQB1AHQAWQBaAHUAWgB2AHUAWgBbAHYAWwB3AHYAWwBcAHcAXAB4AHcAXABdAHgAXQB5AHgAXQBeAHkAXgB6AHkAXgBfAHoAXwB7AHoAXwBgAHsAYAB8AHsAYABhAHwAYQB9AHwAYQBiAH0AYgB+AH0AYgBjAH4AYwB/AH4AYwBkAH8AZACAAH8AZABlAIAAZQCBAIAAZQBmAIEAZgCCAIEAZgBnAIIAZwCDAIIAZwBoAIMAaACEAIMAaABpAIQAaQCFAIQAaQBqAIUAagCGAIUAagBrAIYAawCHAIYAawBsAIcAbACIAIcAbABtAIgAbQCJAIgAbQBuAIkAbgCKAIkAbgBvAIoAbwCLAIoAbwBUAIsAVABwAIsAcABxAIwAcQCNAIwAcQByAI0AcgCOAI0AcgBzAI4AcwCPAI4AcwB0AI8AdACQAI8AdAB1AJAAdQCRAJAAdQB2AJEAdgCSAJEAdgB3AJIAdwCTAJIAdwB4AJMAeACUAJMAeAB5AJQAeQCVAJQAeQB6AJUAegCWAJUAegB7AJYAewCXAJYAewB8AJcAfACYAJcAfAB9AJgAfQCZAJgAfQB+AJkAfgCaAJkAfgB/AJoAfwCbAJoAfwCAAJsAgACcAJsAgACBAJwAgQCdAJwAgQCCAJ0AggCeAJ0AggCDAJ4AgwCfAJ4AgwCEAJ8AhACgAJ8AhACFAKAAhQChAKAAhQCGAKEAhgCiAKEAhgCHAKIAhwCjAKIAhwCIAKMAiACkAKMAiACJAKQAiQClAKQAiQCKAKUAigCmAKUAigCLAKYAiwCnAKYAiwBwAKcAcACMAKcAjACNAKgAjQCpAKgAjQCOAKkAjgCqAKkAjgCPAKoAjwCrAKoAjwCQAKsAkACsAKsAkACRAKwAkQCtAKwAkQCSAK0AkgCuAK0AkgCTAK4AkwCvAK4AkwCUAK8AlACwAK8AlACVALAAlQCxALAAlQCWALEAlgCyALEAlgCXALIAlwCzALIAlwCYALMAmAC0ALMAmACZALQAmQC1ALQAmQCaALUAmgC2ALUAmgCbALYAmwC3ALYAmwCcALcAnAC4ALcAnACdALgAnQC5ALgAnQCeALkAngC6ALkAngCfALoAnwC7ALoAnwCgALsAoAC8ALsAoAChALwAoQC9ALwAoQCiAL0AogC+AL0AogCjAL4AowC/AL4AowCkAL8ApADAAL8ApAClAMAApQDBAMAApQCmAMEApgDCAMEApgCnAMIApwDDAMIApwCMAMMAjACoAMMAqACpAMQAqQDFAMQAqQCqAMUAqgDGAMUAqgCrAMYAqwDHAMYAqwCsAMcArADIAMcArACtAMgArQDJAMgArQCuAMkArgDKAMkArgCvAMoArwDLAMoArwCwAMsAsADMAMsAsACxAMwAsQDNAMwAsQCyAM0AsgDOAM0AsgCzAM4AswDPAM4AswC0AM8AtADQAM8AtAC1ANAAtQDRANAAtQC2ANEAtgDSANEAtgC3ANIAtwDTANIAtwC4ANMAuADUANMAuAC5ANQAuQDVANQAuQC6ANUAugDWANUAugC7ANYAuwDXANYAuwC8ANcAvADYANcAvAC9ANgAvQDZANgAvQC+ANkAvgDaANkAvgC/ANoAvwDbANoAvwDAANsAwADcANsAwADBANwAwQDdANwAwQDCAN0AwgDeAN0AwgDDAN4AwwDfAN4AwwCoAN8AqADEAN8AxADFAOAAxQDhAOAAxQDGAOEAxgDiAOEAxgDHAOIAxwDjAOIAxwDIAOMAyADkAOMAyADJAOQAyQDlAOQAyQDKAOUAygDmAOUAygDLAOYAywDnAOYAywDMAOcAzADoAOcAzADNAOgAzQDpAOgAzQDOAOkAzgDqAOkAzgDPAOoAzwDrAOoAzwDQAOsA0ADsAOsA0ADRAOwA0QDtAOwA0QDSAO0A0gDuAO0A0gDTAO4A0wDvAO4A0wDUAO8A1ADwAO8A1ADVAPAA1QDxAPAA1QDWAPEA1gDyAPEA1gDXAPIA1wDzAPIA1wDYAPMA2AD0APMA2ADZAPQA2QD1APQA2QDaAPUA2gD2APUA2gDbAPYA2wD3APYA2wDcAPcA3AD4APcA3ADdAPgA3QD5APgA3QDeAPkA3gD6APkA3gDfAPoA3wD7APoA3wDEAPsAxADgAPsA4ADhAPwA4QD9APwA4QDiAP0A4gD+AP0A4gDjAP4A4wD/AP4A4wDkAP8A5AAAAf8A5ADlAAAB5QABAQAB5QDmAAEB5gACAQEB5gDnAAIB5wADAQIB5wDoAAMB6AAEAQMB6ADpAAQB6QAFAQQB6QDqAAUB6gAGAQUB6gDrAAYB6wAHAQYB6wDsAAcB7AAIAQcB7ADtAAgB7QAJAQgB7QDuAAkB7gAKAQkB7gDvAAoB7wALAQoB7wDwAAsB8AAMAQsB8ADxAAwB8QANAQwB8QDyAA0B8gAOAQ0B8gDzAA4B8wAPAQ4B8wD0AA8B9AAQAQ8B9AD1ABAB9QARARAB9QD2ABEB9gASAREB9gD3ABIB9wATARIB9wD4ABMB+AAUARMB+AD5ABQB+QAVARQB+QD6ABUB+gAWARUB+gD7ABYB+wAXARYB+wDgABcB4AD8ABcB/AD9ABgB/QAZARgB/QD+ABkB/gAaARkB/gD/ABoB/wAbARoB/wAAARsBAAEcARsBAAEBARwBAQEdARwBAQECAR0BAgEeAR0BAgEDAR4BAwEfAR4BAwEEAR8BBAEgAR8BBAEFASABBQEhASABBQEGASEBBgEiASEBBgEHASIBBwEjASIBBwEIASMBCAEkASMBCAEJASQBCQElASQBCQEKASUBCgEmASUBCgELASYBCwEnASYBCwEMAScBDAEoAScBDAENASgBDQEpASgBDQEOASkBDgEqASkBDgEPASoBDwErASoBDwEQASsBEAEsASsBEAERASwBEQEtASwBEQESAS0BEgEuAS0BEgETAS4BEwEvAS4BEwEUAS8BFAEwAS8BFAEVATABFQExATABFQEWATEBFgEyATEBFgEXATIBFwEzATIBFwH8ADMB/AAYATMBGAEZATQBGQE1ATQBGQEaATUBGgE2ATUBGgEbATYBGwE3ATYBGwEcATcBHAE4ATcBHAEdATgBHQE5ATgBHQEeATkBHgE6ATkBHgEfAToBHwE7AToBHwEgATsBIAE8ATsBIAEhATwBIQE9ATwBIQEiAT0BIgE+AT0BIgEjAT4BIwE/AT4BIwEkAT8BJAFAAT8BJAElAUABJQFBAUABJQEmAUEBJgFCAUEBJgEnAUIBJwFDAUIBJwEoAUMBKAFEAUMBKAEpAUQBKQFFAUQBKQEqAUUBKgFGAUUBKgErAUYBKwFHAUYBKwEsAUcBLAFIAUcBLAEtAUgBLQFJAUgBLQEuAUkBLgFKAUkBLgEvAUoBLwFLAUoBLwEwAUsBMAFMAUsBMAExAUwBMQFNAUwBMQEyAU0BMgFOAU0BMgEzAU4BMwFPAU4BMwEYAU8BGAE0AU8BNAE1AVABNQFRAVABNQE2AVEBNgFSAVEBNgE3AVIBNwFTAVIBNwE4AVMBOAFUAVMBOAE5AVQBOQFVAVQBOQE6AVUBOgFWAVUBOgE7AVYBOwFXAVYBOwE8AVcBPAFYAVcBPAE9AVgBPQFZAVgBPQE+AVkBPgFaAVkBPgE/AVoBPwFbAVoBPwFAAVsBQAFcAVsBQAFBAVwBQQFdAVwBQQFCAV0BQgFeAV0BQgFDAV4BQwFfAV4BQwFEAV8BRAFgAV8BRAFFAWABRQFhAWABRQFGAWEBRgFiAWEBRgFHAWIBRwFjAWIBRwFIAWMBSAFkAWMBSAFJAWQBSQFlAWQBSQFKAWUBSgFmAWUBSgFLAWYBSwFnAWYBSwFMAWcBTAFoAWcBTAFNAWgBTQFpAWgBTQFOAWkBTgFqAWkBTgFPAWoBTwFrAWoBTwE0AWsBNAFQAWsB","ao":"/P39+vf19PT19fTw6eLg5Oz0+f3+/////v38+/z9/Pn39vX19fXy7ebg4efu9fr9/v////78+/v8/fz6+Pf39vX08evk3+Hm7PP5/f////7+/fv7/f39+/r5+Pf29PDp4t7f4+ny+f3//////v38/P7+/fz8+/r59/Tv5+Dd3uHn8fn9//////7+/f3+/v7+/fz7+vj17+fg3d3g5/H5/f///////v7+/////v79/fv59fDo4d3d4Ofy+v7////////+/v/////+/v38+vfw6OHd3eDp8/r+///////////////////+/fv48enh3d7i6vT7/v///////////////////v38+PLp4d7e5Oz1+/7////////////////////+/Pny6eHe3+Xu9vz+/////////////////////vz58ujg3uHn8Pj8/v////////////////////789+7k3t7j6/P6/f7//////////w=="},{"rings":12,"around":28,"pos":"OO8K85b+Qe+r8SX/EO9m8LT/F+/k7sX/J++G7cX/M+8m7M3/Pe/E6tf/Tu/66O3/V+8w5wQAce+o5R4AkO8g5DcAwu/j4i8A/O+r4R8AofDU36X/SPDU36X/z++u4eD+nu/i4qP+c+8e5HH+Se+i5V/+IO8l51L+A+/q6En+5+6u6kH+1+4L7ED+x+5m7UP+te7C7kv+su5I8I3+y+7M8eP+eO8K85b+B+6w8aD+Eu5v8C3/8e0w77r/De6u7dD/NO5U7NX/Wu4C6+L/gO6z6fL/uO7t5xEA8+4p5iMAMe+q5DgAbu8s40kAse/94T0A9e/c4CcAlPA336r/lPA336r/EvDv4Or+0+8E4qr+lO8j43P+Se+U5Fn+9u4Y5kb+pO7j50D+U+6Y6Tn+Ge7v6jf+4e1C7Dv+re2P7Uf+he0G74n+fe1/8N/+Bu6x8aD+9OxV8Kn+A+0u7zX/8+z27b//J+137Nv/Z+0k6+X/pe3i6fb/5O2m6A8ARe7g5jgAqe4j5UIABO+x41EAWO9A4lsAqO8e4UoA8e8U4C4Ah/Cd3rD/h/Cd3rD/CfAu4PT+x+8l4bH+f+8p4nX+Hu+L41L+re4R5Tz+NO7g5jv+wu2D6DX+au3T6S7+GO0g6zL+z+xh7EL+lezJ7YX+fOwz79v+9OxW8Kv+4ev27rP+8uvn7T3/9+u47MP/ROw/6+X/nOz46fT/8ezJ6AsARu2e5y8A0u3V5WEAX+4j5GIA1u6/4mkAQu9d4W0Anu9L4FYA7e9V3zUAePAF3rX/ePAF3rX/APBt3/7+vO9I4Lf+bO824Xb+9e6K4kz+ZO4S5DP+xO3i5Tj+Mu1y5zH+vOy76CX+T+wC6in+8es56zz+o+uQ7ID+euvo7df+4Ov37rX+zOqS7b3+4eqZ7EX//Op368j/Y+sL6u//0+vT6AQAPOy45yIAp+yb5lEAYO3Q5IoAFu4q44IAqO7Y4YEAK++H4H0Ak++E32IA5++g3jwAafBz3bv/afBz3bv/+e+x3gf/s+9z377+W+9N4Hj+ze6V4Ub+Gu4d4yv+Uu3q5Db+o+xm5i7+Deyo5xv+hOvp6B/+EOsV6jX+r+pa63r+eOqb7NP+zOqT7cD+uekn7Mj+0+lG603/Auo06sz/g+rd6Pr/COu45xUAheuu5jsABuyd5XUA7+zU47MAze094qAAeO794JcAEu+934wAh+/J3m0A4e/13UMAXPDm3MH/XPDm3MH/8+/73RH/q++o3sT+Su9y33r+pO6x4EL+z+004iT+4Oz34zT+Euxg5Sj+Xeub5hD+t+rU5xT+Ler16C7+uukl6nX+dulL68/+uOko7Mv+p+i46tP+x+jv6VX/C+n06ND/oem25wUAOuqm5igAyuqr5VYAZOui5JkAfuzh4tkAg+1b4b0ARu4t4K0A9+4A35wAee8Z3nkA2+9V3UoAUfBg3Mf/UfBg3Mf/7+9P3Rr/pO/r3cr+N++p3n3+eO7d3z/+ge1W4R/+bewJ4zH+gOth5B/+q+qT5QP+6OnD5gj+SenW5yb+xejw6G/+dOj46cv+p+i46tf+medE6d7+vueW6F3/E+i159X/vOiX5hEAZumb5T0ADequ5HIAw+qs47sADOz64fsAN+2G4NkAFO5o38MA2+5M3qsAbO903YQA1+++3FIASfDk287/SfDk287/7e+w3CP/nO8+3dD+Iu/z3YH+Se4Z3z3+M+2B4Bv+++se4iv+6+pp4xH+9+mR5PT9GOm05fz9ZOi45h7+0Oe652r+deei6Mj+mOdF6eP+jebP5+n+t+Y952X/Gud75tn/0ud95R8AjuiW5FMATum0448AJOq54toAmese4RcB6ey73/MA4e2r3tgAwO6h3bsAX+/Z3JAA1O8y3FoAQ/Bz29T/Q/Bz29T/7O8e3Cz/ku+i3Nf+Ce9M3YX+F+5i3j3+5Oyz3xf+ies14SD+U+p24gD+QumT4+X9Seim5PH9geeY5Rf+3eaC5mX+eeZK58X+jebP5+/+hOVa5vX+seXn5W3/HuZE5d7/4uZo5C0AseeV42sAjui84qsAienK4fUAJetK4C0Bmuz43gwBr+313e8Ap+793MwAVe9F3J0A0u+w22IAQPAO29v/QPAO29v/6u+b2zb/he8T3N/+6u603Iv+4O213T7+lezr3hH+GOtQ4A/+uOmJ4ev9jOiX4tb9e+eY4+b9oOZ25BH+6+VI5WH+f+Xx5cL+heVa5vv+fOTn5AD/quST5HX/H+UR5OT/7eVU4zwA0eaU4oIAz+fF4ccA8ejc4AwBr+p83z8BSuw73iQBgO1D3QcBku5d3N4ATe+526oA0+8222oAPfC12uL/PfC12uL/5u8j2z//dO+R2+b+x+4l3JH+qO0P3T/+Sewl3gr+qupu3/j9G+mg4NT91+ed4cj9seaJ4t39wuVT4wz+/OQN5F3+huSa5L/+feTn5Af/c+N44wv/oeND433/HeTe4un/9uRB4ksA8eWT4ZoAFOfN4OEAXeju3x8BOOqv3kwB+uuA3T4BVO2U3CEBgO7B2/EAR+8x27gA1O/E2nMAOfBl2uj/OfBl2uj/4O+12kn/X+8V2+7+oO6a25f+b+1r3ED+/+ti3QH+PeqQ3tz9fui63739JOej4Lv97OV54db96eQv4gj+D+TS4ln+jONE47z+c+N44xP/Z+IL4hb/leL14YX/GOOs4e///uMs4VoAEuWP4LAAW+bU3/kAy+cB3zABwOnh3VgBrevF3FkBLu3l2zwBc+4o2wUBQ++u2sYA1O9X2nsAM/Ac2u//M/Ac2u//1+9L2lL/SO+b2vb+ee4P257+N+3G20D+uuuf3PX90um33bz94ufV3qf9dOao37H9K+Vn4NH9E+QL4QX+IuOZ4Vb+kOLw4bn+Z+IL4h7/","hang":"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","uv":"AAAAAHsJAAD2EgAAchwAAO0lAABoLwAA4zgAAF9CAADaSwAAVVUAANBeAABLaAAAx3EAAEJ7AAC9hAAAOI4AALSXAAAvoQAAqqoAACW0AACgvQAAHMcAAJfQAAAS2gAAjeMAAAntAACE9gAA//8AAAAAVRV7CVUV9hJVFXIcVRXtJVUVaC9VFeM4VRVfQlUV2ktVFVVVVRXQXlUVS2hVFcdxVRVCe1UVvYRVFTiOVRW0l1UVL6FVFaqqVRUltFUVoL1VFRzHVRWX0FUVEtpVFY3jVRUJ7VUVhPZVFf//VRUAAKsqewmrKvYSqypyHKsq7SWrKmgvqyrjOKsqX0KrKtpLqypVVasq0F6rKktoqyrHcasqQnurKr2Eqyo4jqsqtJerKi+hqyqqqqsqJbSrKqC9qyocx6sql9CrKhLaqyqN46sqCe2rKoT2qyr//6sqAAAAQHsJAED2EgBAchwAQO0lAEBoLwBA4zgAQF9CAEDaSwBAVVUAQNBeAEBLaABAx3EAQEJ7AEC9hABAOI4AQLSXAEAvoQBAqqoAQCW0AECgvQBAHMcAQJfQAEAS2gBAjeMAQAntAECE9gBA//8AQAAAVVV7CVVV9hJVVXIcVVXtJVVVaC9VVeM4VVVfQlVV2ktVVVVVVVXQXlVVS2hVVcdxVVVCe1VVvYRVVTiOVVW0l1VVL6FVVaqqVVUltFVVoL1VVRzHVVWX0FVVEtpVVY3jVVUJ7VVVhPZVVf//VVUAAKpqewmqavYSqmpyHKpq7SWqamgvqmrjOKpqX0KqatpLqmpVVapq0F6qaktoqmrHcapqQnuqar2Eqmo4jqpqtJeqai+hqmqqqqpqJbSqaqC9qmocx6pql9CqahLaqmqN46pqCe2qaoT2qmr//6pqAAAAgHsJAID2EgCAchwAgO0lAIBoLwCA4zgAgF9CAIDaSwCAVVUAgNBeAIBLaACAx3EAgEJ7AIC9hACAOI4AgLSXAIAvoQCAqqoAgCW0AICgvQCAHMcAgJfQAIAS2gCAjeMAgAntAICE9gCA//8AgAAAVZV7CVWV9hJVlXIcVZXtJVWVaC9VleM4VZVfQlWV2ktVlVVVVZXQXlWVS2hVlcdxVZVCe1WVvYRVlTiOVZW0l1WVL6FVlaqqVZUltFWVoL1VlRzHVZWX0FWVEtpVlY3jVZUJ7VWVhPZVlf//VZUAAKqqewmqqvYSqqpyHKqq7SWqqmgvqqrjOKqqX0KqqtpLqqpVVaqq0F6qqktoqqrHcaqqQnuqqr2Eqqo4jqqqtJeqqi+hqqqqqqqqJbSqqqC9qqocx6qql9CqqhLaqqqN46qqCe2qqoT2qqr//6qqAAD/v3sJ/7/2Ev+/chz/v+0l/79oL/+/4zj/v19C/7/aS/+/VVX/v9Be/79LaP+/x3H/v0J7/7+9hP+/OI7/v7SX/78vof+/qqr/vyW0/7+gvf+/HMf/v5fQ/78S2v+/jeP/vwnt/7+E9v+/////vwAAVdV7CVXV9hJV1XIcVdXtJVXVaC9V1eM4VdVfQlXV2ktV1VVVVdXQXlXVS2hV1cdxVdVCe1XVvYRV1TiOVdW0l1XVL6FV1aqqVdUltFXVoL1V1RzHVdWX0FXVEtpV1Y3jVdUJ7VXVhPZV1f//VdUAAKrqewmq6vYSqupyHKrq7SWq6mgvqurjOKrqX0Kq6tpLqupVVarq0F6q6ktoqurHcarqQnuq6r2Equo4jqrqtJeq6i+hquqqqqrqJbSq6qC9quocx6rql9Cq6hLaquqN46rqCe2q6oT2qur//6rqAAD//3sJ///2Ev//chz//+0l//9oL///4zj//19C///aS///VVX//9Be//9LaP//x3H//0J7//+9hP//OI7//7SX//8vof//qqr//yW0//+gvf//HMf//5fQ//8S2v//jeP//wnt//+E9v///////w==","tri":"AAAcAAEAAQAcAB0AAQAdAAIAAgAdAB4AAgAeAAMAAwAeAB8AAwAfAAQABAAfACAABAAgAAUABQAgACEABQAhAAYABgAhACIABgAiAAcABwAiACMABwAjAAgACAAjACQACAAkAAkACQAkACUACQAlAAoACgAlACYACgAmAAsACwAmACcACwAnAAwADAAnACgADAAoAA0ADQAoACkADQApAA4ADgApACoADgAqAA8ADwAqACsADwArABAAEAArACwAEAAsABEAEQAsAC0AEQAtABIAEgAtAC4AEgAuABMAEwAuAC8AEwAvABQAFAAvADAAFAAwABUAFQAwADEAFQAxABYAFgAxADIAFgAyABcAFwAyADMAFwAzABgAGAAzADQAGAA0ABkAGQA0ADUAGQA1ABoAGgA1ADYAGgA2ABsAGwA2ADcAGwA3AAAAAAA3ABwAHAA4AB0AHQA4ADkAHQA5AB4AHgA5ADoAHgA6AB8AHwA6ADsAHwA7ACAAIAA7ADwAIAA8ACEAIQA8AD0AIQA9ACIAIgA9AD4AIgA+ACMAIwA+AD8AIwA/ACQAJAA/AEAAJABAACUAJQBAAEEAJQBBACYAJgBBAEIAJgBCACcAJwBCAEMAJwBDACgAKABDAEQAKABEACkAKQBEAEUAKQBFACoAKgBFAEYAKgBGACsAKwBGAEcAKwBHACwALABHAEgALABIAC0ALQBIAEkALQBJAC4ALgBJAEoALgBKAC8ALwBKAEsALwBLADAAMABLAEwAMABMADEAMQBMAE0AMQBNADIAMgBNAE4AMgBOADMAMwBOAE8AMwBPADQANABPAFAANABQADUANQBQAFEANQBRADYANgBRAFIANgBSADcANwBSAFMANwBTABwAHABTADgAOABUADkAOQBUAFUAOQBVADoAOgBVAFYAOgBWADsAOwBWAFcAOwBXADwAPABXAFgAPABYAD0APQBYAFkAPQBZAD4APgBZAFoAPgBaAD8APwBaAFsAPwBbAEAAQABbAFwAQABcAEEAQQBcAF0AQQBdAEIAQgBdAF4AQgBeAEMAQwBeAF8AQwBfAEQARABfAGAARABgAEUARQBgAGEARQBhAEYARgBhAGIARgBiAEcARwBiAGMARwBjAEgASABjAGQASABkAEkASQBkAGUASQBlAEoASgBlAGYASgBmAEsASwBmAGcASwBnAEwATABnAGgATABoAE0ATQBoAGkATQBpAE4ATgBpAGoATgBqAE8ATwBqAGsATwBrAFAAUABrAGwAUABsAFEAUQBsAG0AUQBtAFIAUgBtAG4AUgBuAFMAUwBuAG8AUwBvADgAOABvAFQAVABwAFUAVQBwAHEAVQBxAFYAVgBxAHIAVgByAFcAVwByAHMAVwBzAFgAWABzAHQAWAB0AFkAWQB0AHUAWQB1AFoAWgB1AHYAWgB2AFsAWwB2AHcAWwB3AFwAXAB3AHgAXAB4AF0AXQB4AHkAXQB5AF4AXgB5AHoAXgB6AF8AXwB6AHsAXwB7AGAAYAB7AHwAYAB8AGEAYQB8AH0AYQB9AGIAYgB9AH4AYgB+AGMAYwB+AH8AYwB/AGQAZAB/AIAAZACAAGUAZQCAAIEAZQCBAGYAZgCBAIIAZgCCAGcAZwCCAIMAZwCDAGgAaACDAIQAaACEAGkAaQCEAIUAaQCFAGoAagCFAIYAagCGAGsAawCGAIcAawCHAGwAbACHAIgAbACIAG0AbQCIAIkAbQCJAG4AbgCJAIoAbgCKAG8AbwCKAIsAbwCLAFQAVACLAHAAcACMAHEAcQCMAI0AcQCNAHIAcgCNAI4AcgCOAHMAcwCOAI8AcwCPAHQAdACPAJAAdACQAHUAdQCQAJEAdQCRAHYAdgCRAJIAdgCSAHcAdwCSAJMAdwCTAHgAeACTAJQAeACUAHkAeQCUAJUAeQCVAHoAegCVAJYAegCWAHsAewCWAJcAewCXAHwAfACXAJgAfACYAH0AfQCYAJkAfQCZAH4AfgCZAJoAfgCaAH8AfwCaAJsAfwCbAIAAgACbAJwAgACcAIEAgQCcAJ0AgQCdAIIAggCdAJ4AggCeAIMAgwCeAJ8AgwCfAIQAhACfAKAAhACgAIUAhQCgAKEAhQChAIYAhgChAKIAhgCiAIcAhwCiAKMAhwCjAIgAiACjAKQAiACkAIkAiQCkAKUAiQClAIoAigClAKYAigCmAIsAiwCmAKcAiwCnAHAAcACnAIwAjACoAI0AjQCoAKkAjQCpAI4AjgCpAKoAjgCqAI8AjwCqAKsAjwCrAJAAkACrAKwAkACsAJEAkQCsAK0AkQCtAJIAkgCtAK4AkgCuAJMAkwCuAK8AkwCvAJQAlACvALAAlACwAJUAlQCwALEAlQCxAJYAlgCxALIAlgCyAJcAlwCyALMAlwCzAJgAmACzALQAmAC0AJkAmQC0ALUAmQC1AJoAmgC1ALYAmgC2AJsAmwC2ALcAmwC3AJwAnAC3ALgAnAC4AJ0AnQC4ALkAnQC5AJ4AngC5ALoAngC6AJ8AnwC6ALsAnwC7AKAAoAC7ALwAoAC8AKEAoQC8AL0AoQC9AKIAogC9AL4AogC+AKMAowC+AL8AowC/AKQApAC/AMAApADAAKUApQDAAMEApQDBAKYApgDBAMIApgDCAKcApwDCAMMApwDDAIwAjADDAKgAqADEAKkAqQDEAMUAqQDFAKoAqgDFAMYAqgDGAKsAqwDGAMcAqwDHAKwArADHAMgArADIAK0ArQDIAMkArQDJAK4ArgDJAMoArgDKAK8ArwDKAMsArwDLALAAsADLAMwAsADMALEAsQDMAM0AsQDNALIAsgDNAM4AsgDOALMAswDOAM8AswDPALQAtADPANAAtADQALUAtQDQANEAtQDRALYAtgDRANIAtgDSALcAtwDSANMAtwDTALgAuADTANQAuADUALkAuQDUANUAuQDVALoAugDVANYAugDWALsAuwDWANcAuwDXALwAvADXANgAvADYAL0AvQDYANkAvQDZAL4AvgDZANoAvgDaAL8AvwDaANsAvwDbAMAAwADbANwAwADcAMEAwQDcAN0AwQDdAMIAwgDdAN4AwgDeAMMAwwDeAN8AwwDfAKgAqADfAMQAxADgAMUAxQDgAOEAxQDhAMYAxgDhAOIAxgDiAMcAxwDiAOMAxwDjAMgAyADjAOQAyADkAMkAyQDkAOUAyQDlAMoAygDlAOYAygDmAMsAywDmAOcAywDnAMwAzADnAOgAzADoAM0AzQDoAOkAzQDpAM4AzgDpAOoAzgDqAM8AzwDqAOsAzwDrANAA0ADrAOwA0ADsANEA0QDsAO0A0QDtANIA0gDtAO4A0gDuANMA0wDuAO8A0wDvANQA1ADvAPAA1ADwANUA1QDwAPEA1QDxANYA1gDxAPIA1gDyANcA1wDyAPMA1wDzANgA2ADzAPQA2AD0ANkA2QD0APUA2QD1ANoA2gD1APYA2gD2ANsA2wD2APcA2wD3ANwA3AD3APgA3AD4AN0A3QD4APkA3QD5AN4A3gD5APoA3gD6AN8A3wD6APsA3wD7AMQAxAD7AOAA4AD8AOEA4QD8AP0A4QD9AOIA4gD9AP4A4gD+AOMA4wD+AP8A4wD/AOQA5AD/AAAB5AAAAeUA5QAAAQEB5QABAeYA5gABAQIB5gACAecA5wACAQMB5wADAegA6AADAQQB6AAEAekA6QAEAQUB6QAFAeoA6gAFAQYB6gAGAesA6wAGAQcB6wAHAewA7AAHAQgB7AAIAe0A7QAIAQkB7QAJAe4A7gAJAQoB7gAKAe8A7wAKAQsB7wALAfAA8AALAQwB8AAMAfEA8QAMAQ0B8QANAfIA8gANAQ4B8gAOAfMA8wAOAQ8B8wAPAfQA9AAPARAB9AAQAfUA9QAQAREB9QARAfYA9gARARIB9gASAfcA9wASARMB9wATAfgA+AATARQB+AAUAfkA+QAUARUB+QAVAfoA+gAVARYB+gAWAfsA+wAWARcB+wAXAeAA4AAXAfwA/AAYAf0A/QAYARkB/QAZAf4A/gAZARoB/gAaAf8A/wAaARsB/wAbAQABAAEbARwBAAEcAQEBAQEcAR0BAQEdAQIBAgEdAR4BAgEeAQMBAwEeAR8BAwEfAQQBBAEfASABBAEgAQUBBQEgASEBBQEhAQYBBgEhASIBBgEiAQcBBwEiASMBBwEjAQgBCAEjASQBCAEkAQkBCQEkASUBCQElAQoBCgElASYBCgEmAQsBCwEmAScBCwEnAQwBDAEnASgBDAEoAQ0BDQEoASkBDQEpAQ4BDgEpASoBDgEqAQ8BDwEqASsBDwErARABEAErASwBEAEsAREBEQEsAS0BEQEtARIBEgEtAS4BEgEuARMBEwEuAS8BEwEvARQBFAEvATABFAEwARUBFQEwATEBFQExARYBFgExATIBFgEyARcBFwEyATMBFwEzAfwA/AAzARgBGAE0ARkBGQE0ATUBGQE1ARoBGgE1ATYBGgE2ARsBGwE2ATcBGwE3ARwBHAE3ATgBHAE4AR0BHQE4ATkBHQE5AR4BHgE5AToBHgE6AR8BHwE6ATsBHwE7ASABIAE7ATwBIAE8ASEBIQE8AT0BIQE9ASIBIgE9AT4BIgE+ASMBIwE+AT8BIwE/ASQBJAE/AUABJAFAASUBJQFAAUEBJQFBASYBJgFBAUIBJgFCAScBJwFCAUMBJwFDASgBKAFDAUQBKAFEASkBKQFEAUUBKQFFASoBKgFFAUYBKgFGASsBKwFGAUcBKwFHASwBLAFHAUgBLAFIAS0BLQFIAUkBLQFJAS4BLgFJAUoBLgFKAS8BLwFKAUsBLwFLATABMAFLAUwBMAFMATEBMQFMAU0BMQFNATIBMgFNAU4BMgFOATMBMwFOAU8BMwFPARgBGAFPATQBNAFQATUBNQFQAVEBNQFRATYBNgFRAVIBNgFSATcBNwFSAVMBNwFTATgBOAFTAVQBOAFUATkBOQFUAVUBOQFVAToBOgFVAVYBOgFWATsBOwFWAVcBOwFXATwBPAFXAVgBPAFYAT0BPQFYAVkBPQFZAT4BPgFZAVoBPgFaAT8BPwFaAVsBPwFbAUABQAFbAVwBQAFcAUEBQQFcAV0BQQFdAUIBQgFdAV4BQgFeAUMBQwFeAV8BQwFfAUQBRAFfAWABRAFgAUUBRQFgAWEBRQFhAUYBRgFhAWIBRgFiAUcBRwFiAWMBRwFjAUgBSAFjAWQBSAFkAUkBSQFkAWUBSQFlAUoBSgFlAWYBSgFmAUsBSwFmAWcBSwFnAUwBTAFnAWgBTAFoAU0BTQFoAWkBTQFpAU4BTgFpAWoBTgFqAU8BTwFqAWsBTwFrATQBNAFrAVAB","ao":"/f39+vf29fX19fTw6N3U0dbh7/n9/////v38/P39/Pn39vb19fXz7eTZ09Td6fX8/v////79/Pz9/fz6+Pj39/b18evh2dfb5O/4/f/////+/fz8/f79+/r5+fj29PDo4Nra3ubw+P3//////v38/P7+/v38+/r59/Tv59/b297l7/j9//////7+/f3+//7+/f38+vj17+bf29rd5fD5/f///////v7+/////v7+/fv59u/n39vZ3eXw+f3////////+/v///////v38+vfw6N/a2t3m8vr+///////////////////+/fv48ejf2trf6PP7/v///////////////////v78+PLo39vb4Or0+/7////////////////////+/Pny6N/b3OLs9fv+/////////////////////vz58ufe2t3l7vf8/v////////////////////789+7j3Nvg6PL5/f7//////////w=="}],
    neck: [120,121,122,123,124,125,126,127,128,129,0,1,2,3,4,5,6,7,8,9,10,996,995,994,993,992,991,990,1111,1110,1109,1108,1107,1106],
  },
};
```

### garment.ts → `components/dimaac/clothes-rack/garment.ts`

```tsx
// Garments, hangers and the rail for the Clothes Rack, built in three.js.
//
// How a garment is made: each kind (a tee, a crewneck, a camp shirt) is a real sewing pattern, a front and a back
// panel with the sleeves cut on, sewn along the shoulders, the sleeves and the sides. A cloth simulation drops the
// sewn garment onto the hanger and lets it settle under gravity, so the shoulders rest on the hanger, the sleeves
// droop and the folds come from the cloth itself (scripts/clothes-rack/drape.ts). That draped shape is baked into
// garment-drapes.ts, so nothing is simulated in the browser: the page only decodes it. On top of the shape: a
// physical cloth material with sheen, a fine knit normal map, fold shading from the shape's curvature, a rib collar
// round the neck, and a colour texture drawn on a canvas in the pattern's own coordinates (the fabric, the
// stitching and the print), so a print sits on the chest the way it was placed on the flat pattern. The vertex shader
// bends the cloth with the rows of cloth-motion.ts while the garment moves.
//
// Units: the rail's centre line is the x axis at y = 0, z = 0. A garment hangs about 0.85 units below the rail and
// its front faces +z when its turn group has rotation.y = 0. The hook is a swivel: it stays across the rail while
// the hanger and garment turn under it.
import * as THREE from "three";
import { RoomEnvironment } from "three/examples/jsm/environments/RoomEnvironment.js";
import { HDRLoader } from "three/examples/jsm/loaders/HDRLoader.js";
import { CLOTH_ROWS } from "./cloth-motion";
import { DRAPES, DRAPE_HANGER, DRAPE_SCALE, type DrapeData, type DrapePanel, type DrapeSleeve } from "./garment-drapes";

export type GarmentKind = "tee" | "crewneck" | "shirt";

export type GarmentPrint =
  /** A big flowing script word or two across the chest. */
  | { kind: "script"; text: string; ink: string }
  /** Stacked bold serif lines across the chest, like a college crewneck. */
  | { kind: "serif"; lines: string[]; ink: string }
  /** A cluster of simple flowers, with an optional script word over it. */
  | { kind: "flowers"; text?: string; ink: string }
  /** A small wordmark on the left chest. */
  | { kind: "chest"; text: string; ink: string }
  /** A sewn-on chest pocket in the same fabric. */
  | { kind: "pocket" }
  /** An all-over leaf pattern in a few colours (the shirt). */
  | { kind: "pattern"; colours: string[] };

export type GarmentSpec = {
  kind: GarmentKind;
  /** The fabric colour, as a hex string. */
  colour: string;
  print?: GarmentPrint;
  /** A transparent PNG or WebP drawn over the front panel instead of the print. */
  image?: string;
};

export type HangerFinish = "wood" | "black" | "chrome";

/**
 * Photographic cloth and light, each optional: tiling scans of knitted cloth (normal and roughness maps; jersey for the
 * tees and the shirt, fleece for the crewneck), a greyscale heather grain (strong on a grey marl, faint on any other
 * colour), and an equirect .hdr studio that lights the cloth and shows in its sheen. Without them the knit is drawn in
 * code and the light is a plain room.
 */
export type GarmentTextures = {
  jerseyNormal?: string;
  jerseyRoughness?: string;
  fleeceNormal?: string;
  fleeceRoughness?: string;
  heatherGrain?: string;
  studio?: string;
};
export type RailFinish = "chrome" | "black" | "brass";

export type Garment = {
  /** Put this on the rail at (x, 0, 0). Its rotation.x swings the hanger on the rail (a pendulum toward or away from you). */
  object: THREE.Group;
  /** The hanger and garment on their swivel hook. rotation.y turns the garment (0 faces the camera). The hook itself does not turn. */
  turn: THREE.Group;
  /** The chrome hook. On the rail it stays across the rail; turn it (rotation.y = PI / 2) to show its curve, e.g. off the rail. */
  hook: THREE.Object3D;
  /** Width of the garment seen from the front, sleeves included. */
  width: number;
  /** Width of the body alone (no sleeves). */
  bodyWidth: number;
  /** Thickness of the garment seen from the side, at the hem where it hangs open widest. */
  depth: number;
  /** Height from the rail to the hem. */
  height: number;
  setHanger(finish: HangerFinish): void;
  /**
   * Bends the cloth like fabric (see cloth-motion.ts). Call it every frame while anything moves, after setting
   * turn.rotation.y. twist: radians each row of cloth has turned past the hanger, from the shoulders (row 0) to the
   * hem; sway: how far each row trails along the rail (garment units, in the rail's frame whatever way the garment is
   * turned); ripple: 0 - 1, a faint wave that runs down the cloth while it moves; time: seconds, for the ripple.
   */
  setCloth(cloth: { twist: ArrayLike<number>; sway: ArrayLike<number>; ripple: number; time: number }): void;
  /**
   * Only for a garment made with { fadeable: true }: "solid" is the normal look; "depth" draws only its depth; "fade"
   * then draws its colour at this opacity on top of that depth, so the whole garment fades as one piece and its own
   * hidden parts (the back, the inside) never show through.
   */
  setPass(pass: "solid" | "depth" | "fade", opacity?: number): void;
  dispose(): void;
};

export type Rail = {
  object: THREE.Object3D;
  setLength(length: number): void;
  setFinish(finish: RailFinish): void;
  dispose(): void;
};

export type Wardrobe = {
  /** fadeable: the garment's materials are made so it can fade in and out with setPass (the detail view's swaps). */
  garment(spec: GarmentSpec, hanger: HangerFinish, options?: { fadeable?: boolean }): Garment;
  rail(length: number, finish: RailFinish): Rail;
  /** The light the cloth is seen in: the studio when one was given and has loaded, else a plain room. Set it as
   * scene.environment once `ready` has settled. */
  readonly environment: THREE.Texture;
  /** Settles when every texture asked for has loaded (or failed). Garments made before then use the drawn knit. */
  ready: Promise<void>;
  /** Adds the house lights (soft key, fill and sky) to a scene. */
  addLights(scene: THREE.Scene): void;
  dispose(): void;
};

type Pt = [number, number];
type Pattern = DrapeData["pattern"];

// ---------------------------------------------------------------- photographic cloth and light

// Each address is loaded once per page and shared: a texture's picture can be uploaded by several renderers (the rack
// and the detail view have one each), so the detail view opens with everything already here. They are small (about
// 460 KB in all) and kept for the life of the page.
const LOADING = new Map<string, Promise<THREE.Texture | null>>();
const LOADED = new Map<string, THREE.Texture>();
function loadOnce(url: string, hdr: boolean): Promise<THREE.Texture | null> {
  let pending = LOADING.get(url);
  if (!pending) {
    pending = new Promise((resolve) => {
      const done = (t: THREE.Texture) => {
        LOADED.set(url, t);
        resolve(t);
      };
      // a file that fails to load leaves the drawn knit or the plain room in its place, and is tried again by the
      // next wardrobe (a rebuild, the detail view) instead of failing for the rest of the page
      const failed = () => {
        LOADING.delete(url);
        resolve(null);
      };
      if (hdr) {
        new HDRLoader().load(
          url,
          (t) => {
            t.mapping = THREE.EquirectangularReflectionMapping;
            done(t);
          },
          undefined,
          failed,
        );
      } else {
        new THREE.TextureLoader().load(
          url,
          (t) => {
            t.wrapS = t.wrapT = THREE.RepeatWrapping;
            t.colorSpace = THREE.NoColorSpace;
            done(t);
          },
          undefined,
          failed,
        );
      }
    });
    LOADING.set(url, pending);
  }
  return pending;
}

// One scan covers about 27 cm of real cloth, a little under a third of a garment unit
const SCAN_TILE = 0.3;
// The scanned studio (a white cyclorama wall on one side, two softboxes and a dark room on the other) is turned so
// the wall is behind the viewer and off to one side: it lights the fronts in the detail view and the sides the rail
// shows, as a big soft source does in a product shot
const STUDIO_TURN = new THREE.Euler(0, 4.2, 0);
// how far a side-on garment's sleeves are blended from open toward hanging down its side (see setCloth)
const HANG_AT_REST = 0.55;
// without the scan, the plain room is turned a quarter so its brightest panel is not straight in front of the cloth
const ROOM_TURN = new THREE.Euler(0, Math.PI / 2, 0);

// ---------------------------------------------------------------- the draped shapes

// One panel: where each point sits on the flat pattern (x, y pairs), where it ended up on the hanger (x, y, z), and
// the triangles
type Panel = { pat: Float32Array; pos: Float32Array; tri: Uint16Array; ao: Uint8Array };

function bytes(b64: string): ArrayBuffer {
  const bin = atob(b64);
  const out = new Uint8Array(bin.length);
  for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);
  return out.buffer;
}

// outward: 1 for the front (its pattern is seen from the front), -1 for the back (seen from behind)
function decodePanel(p: DrapePanel, outward: 1 | -1): Panel {
  const pat = Float32Array.from(new Int16Array(bytes(p.pat)), (v) => v / DRAPE_SCALE);
  const pos = Float32Array.from(new Int16Array(bytes(p.pos)), (v) => v / DRAPE_SCALE);
  const tri = new Uint16Array(bytes(p.tri));
  const ao = new Uint8Array(bytes(p.ao));
  // wind every triangle so its face points out of the garment: then the normals agree across the panel, and the
  // inside of the cloth is always the back face
  for (let i = 0; i < tri.length; i += 3) {
    const a = tri[i]!;
    const b = tri[i + 1]!;
    const c = tri[i + 2]!;
    const area = (pat[b * 2]! - pat[a * 2]!) * (pat[c * 2 + 1]! - pat[a * 2 + 1]!) - (pat[c * 2]! - pat[a * 2]!) * (pat[b * 2 + 1]! - pat[a * 2 + 1]!);
    if (area * outward < 0) {
      tri[i + 1] = c;
      tri[i + 2] = b;
    }
  }
  return { pat, pos, tri, ao };
}

// One sleeve: its draped grid, its texture coordinates (round the sleeve, along it from the armhole), its triangles
// and its baked occlusion
function decodeSleeve(sl: DrapeSleeve) {
  const pos = Float32Array.from(new Int16Array(bytes(sl.pos)), (v) => v / DRAPE_SCALE);
  const hang = Float32Array.from(new Int16Array(bytes(sl.hang)), (v) => v / DRAPE_SCALE);
  const uv = Float32Array.from(new Uint16Array(bytes(sl.uv)), (v) => v / 65535);
  return { pos, hang, uv, tri: new Uint16Array(bytes(sl.tri)), ao: new Uint8Array(bytes(sl.ao)), rings: sl.rings, around: sl.around };
}

// The part of the flat pattern a kind's texture covers, in pattern units (the neck corners are at y = 0), and the
// texture's size: about 1180 texels per unit, so a print reads sharp in the detail view
type Box = { x0: number; y0: number; y1: number; w: number; h: number; texW: number; texH: number };
function boxFor(p: Pattern): Box {
  const x1 = Math.max(p.half, p.shoulderX) + 0.02;
  const y1 = 0.03;
  const y0 = -p.length - 0.02;
  const w = 2 * x1;
  const h = y1 - y0;
  const texW = Math.min(1536, Math.round(1180 * w));
  return { x0: -x1, y0, y1, w, h, texW, texH: Math.round((texW * h) / w) };
}

// One panel as geometry: the draped positions, UVs from the flat pattern, and shading baked in as a vertex colour:
// the occlusion baked with the drape, a little more in the hollows between folds, a touch more along the seams
function panelGeometry(panel: Panel, box: Box) {
  const n = panel.pos.length / 3;
  const uv = new Float32Array(n * 2);
  for (let i = 0; i < n; i++) {
    uv[i * 2] = (panel.pat[i * 2]! - box.x0) / box.w;
    uv[i * 2 + 1] = (panel.pat[i * 2 + 1]! - box.y0) / box.h;
  }
  return shadedGeometry(panel.pos, uv, panel.tri, panel.ao);
}

// A piece of cloth as geometry: the draped positions, its texture coordinates, and shading baked in as a vertex colour
function shadedGeometry(P: Float32Array, uv: Float32Array, tri: Uint16Array, ao: Uint8Array) {
  const n = P.length / 3;
  const panel = { tri, ao };
  const geo = new THREE.BufferGeometry();
  geo.setAttribute("position", new THREE.BufferAttribute(P, 3));
  geo.setAttribute("uv", new THREE.BufferAttribute(uv, 2));
  geo.setIndex(new THREE.BufferAttribute(tri, 1));
  geo.computeVertexNormals();
  const normal = geo.attributes.normal as THREE.BufferAttribute;
  // each point's neighbours (for the curvature), and the edges only one triangle uses (the panel's outline)
  const neighbours: number[][] = Array.from({ length: n }, () => []);
  const edgeUse = new Map<number, number>();
  for (let t = 0; t < panel.tri.length; t += 3) {
    for (let k = 0; k < 3; k++) {
      const a = panel.tri[t + k]!;
      const b = panel.tri[t + ((k + 1) % 3)]!;
      const key = a < b ? a * 65536 + b : b * 65536 + a;
      const uses = (edgeUse.get(key) ?? 0) + 1;
      edgeUse.set(key, uses);
      if (uses === 1) {
        neighbours[a]!.push(b);
        neighbours[b]!.push(a);
      }
    }
  }
  const rim = new Uint8Array(n);
  for (const [key, uses] of edgeUse) {
    if (uses !== 1) continue;
    rim[Math.floor(key / 65536)] = 1;
    rim[key % 65536] = 1;
  }
  // how deep each point sits in a hollow: its neighbours' average, measured along its outward normal
  const hollow = new Float32Array(n);
  for (let i = 0; i < n; i++) {
    const ns = neighbours[i]!;
    if (!ns.length) continue;
    let lx = 0;
    let ly = 0;
    let lz = 0;
    for (const j of ns) {
      lx += P[j * 3]!;
      ly += P[j * 3 + 1]!;
      lz += P[j * 3 + 2]!;
    }
    lx = lx / ns.length - P[i * 3]!;
    ly = ly / ns.length - P[i * 3 + 1]!;
    lz = lz / ns.length - P[i * 3 + 2]!;
    hollow[i] = Math.max(0, lx * normal.getX(i) + ly * normal.getY(i) + lz * normal.getZ(i));
  }
  // three passes of blur so the shading follows the folds, never the points of the mesh (one pass left the lattice
  // showing as a faint grid of dots on white cloth)
  let depthOf = hollow;
  for (let pass = 0; pass < 3; pass++) {
    const next = new Float32Array(n);
    for (let i = 0; i < n; i++) {
      const ns = neighbours[i]!;
      let sum = depthOf[i]! * 2;
      for (const j of ns) sum += depthOf[j]!;
      next[i] = sum / (ns.length + 2);
    }
    depthOf = next;
  }
  // The simulation leaves tiny bumps at the scale of its mesh. They do not change the shape, but a light grazing
  // across white cloth shows them as a grid of dots, so the normals are smoothed over their neighbours.
  const N = normal.array as Float32Array;
  for (let pass = 0; pass < 2; pass++) {
    const next = new Float32Array(N.length);
    for (let i = 0; i < n; i++) {
      let x = N[i * 3]! * 2;
      let y = N[i * 3 + 1]! * 2;
      let z = N[i * 3 + 2]! * 2;
      for (const j of neighbours[i]!) {
        x += N[j * 3]!;
        y += N[j * 3 + 1]!;
        z += N[j * 3 + 2]!;
      }
      const l = Math.hypot(x, y, z) || 1;
      next[i * 3] = x / l;
      next[i * 3 + 1] = y / l;
      next[i * 3 + 2] = z / l;
    }
    N.set(next);
  }
  normal.needsUpdate = true;
  const colors = new Float32Array(n * 3);
  for (let i = 0; i < n; i++) {
    const depth = depthOf[i]!;
    // the baked occlusion (under the sleeves, deep in the folds), softened so it never goes black
    let s = (1 - 0.55 * (1 - Math.max(0.2, panel.ao[i]! / 255))) * (1 - Math.min(0.16, depth * 55));
    if (rim[i]) s *= 0.93;
    // shade on cloth in a daylight studio is a touch cool, never warm (warm shade made white cotton read cream)
    colors[i * 3] = s * (0.99 + 0.01 * s);
    colors[i * 3 + 1] = s * (0.995 + 0.005 * s);
    colors[i * 3 + 2] = s;
  }
  geo.setAttribute("color", new THREE.BufferAttribute(colors, 3));
  return geo;
}

// Where a point of the flat front pattern ended up on the draped cloth, and which way the cloth faces there
function surfaceAt(panel: Panel, normals: THREE.BufferAttribute, q: Pt): { p: THREE.Vector3; n: THREE.Vector3 } {
  const { pat, pos, tri } = panel;
  const p = new THREE.Vector3();
  const nv = new THREE.Vector3(0, 0, 1);
  let best = Infinity;
  for (let t = 0; t < tri.length; t += 3) {
    const a = tri[t]!;
    const b = tri[t + 1]!;
    const c = tri[t + 2]!;
    const ax = pat[a * 2]!;
    const ay = pat[a * 2 + 1]!;
    const bx = pat[b * 2]!;
    const by = pat[b * 2 + 1]!;
    const cx = pat[c * 2]!;
    const cy = pat[c * 2 + 1]!;
    const d = (by - cy) * (ax - cx) + (cx - bx) * (ay - cy);
    if (Math.abs(d) < 1e-14) continue;
    let u = ((by - cy) * (q[0] - cx) + (cx - bx) * (q[1] - cy)) / d;
    let v = ((cy - ay) * (q[0] - cx) + (ax - cx) * (q[1] - cy)) / d;
    let w = 1 - u - v;
    const outside = Math.max(0, -u) + Math.max(0, -v) + Math.max(0, -w);
    if (outside >= best) continue;
    best = outside;
    u = Math.max(0, u);
    v = Math.max(0, v);
    w = Math.max(0, w);
    const s = u + v + w;
    u /= s;
    v /= s;
    w /= s;
    p.set(u * pos[a * 3]! + v * pos[b * 3]! + w * pos[c * 3]!, u * pos[a * 3 + 1]! + v * pos[b * 3 + 1]! + w * pos[c * 3 + 1]!, u * pos[a * 3 + 2]! + v * pos[b * 3 + 2]! + w * pos[c * 3 + 2]!);
    nv.set(
      u * normals.getX(a) + v * normals.getX(b) + w * normals.getX(c),
      u * normals.getY(a) + v * normals.getY(b) + w * normals.getY(c),
      u * normals.getZ(a) + v * normals.getZ(b) + w * normals.getZ(c),
    ).normalize();
    if (outside === 0) break;
  }
  return { p, n: nv };
}

// The collar: a rib band round the draped neckline (the front's neck edge, then the back's, meeting at the shoulders)
function collarGeometry(front: Panel, back: Panel, neck: number[], kind: GarmentKind) {
  const nF = front.pos.length / 3;
  const pts: THREE.Vector3[] = [];
  for (const i of neck) {
    const src = i < nF ? front.pos : back.pos;
    const j = i < nF ? i : i - nF;
    const v = new THREE.Vector3(src[j * 3]!, src[j * 3 + 1]!, src[j * 3 + 2]!);
    // the two panels meet at the shoulders, so a corner can come twice
    if (!pts.length || v.distanceTo(pts[pts.length - 1]!) > 1e-3) pts.push(v);
  }
  if (pts.length > 2 && pts[0]!.distanceTo(pts[pts.length - 1]!) < 1e-3) pts.pop();
  // The loop turns sharply at the two neck corners, where the front's neckline meets the back's: a curve drawn
  // through them overshot and stood up as two little ears beside the hanger. A few passes of easing round the loop
  // take the corners off.
  for (let pass = 0; pass < 4; pass++) {
    const prev = pts.map((v) => v.clone());
    const n = prev.length;
    for (let i = 0; i < n; i++) pts[i]!.copy(prev[(i + n - 1) % n]!).multiplyScalar(0.25).addScaledVector(prev[i]!, 0.5).addScaledVector(prev[(i + 1) % n]!, 0.25);
  }
  const curve = new THREE.CatmullRomCurve3(pts, true, "centripetal");
  // only the rolled edge of the rib: thin, so seen side-on it never stands up off the shoulders like a hood
  return new THREE.TubeGeometry(curve, 160, kind === "crewneck" ? 0.0058 : kind === "shirt" ? 0.0062 : 0.0046, 10, true);
}

// The right armhole, from the shoulder point down to the armpit, cut as drape.ts cuts it
function armholeLine(p: Pattern): Pt[] {
  const c: Pt = [p.shoulderX - 0.004, -(0.25 * p.shoulderDrop + 0.75 * p.armpit)];
  const pts: Pt[] = [];
  for (let i = 0; i <= 12; i++) {
    const t = i / 12;
    pts.push([(1 - t) * (1 - t) * p.shoulderX + 2 * (1 - t) * t * c[0] + t * t * p.half, -(1 - t) * (1 - t) * p.shoulderDrop + 2 * (1 - t) * t * c[1] - t * t * p.armpit]);
  }
  return pts;
}

// A point on the front neckline, t from the middle (0) to the neck corner (1), cut as drape.ts cuts it
function neckPoint(p: Pattern, t: number): Pt {
  if (p.vNeck) {
    const cx = 0.8 * p.neckHalf;
    const cy = -0.3 * p.neckFront;
    return [2 * (1 - t) * t * cx + t * t * p.neckHalf, -(1 - t) * (1 - t) * p.neckFront + 2 * (1 - t) * t * cy];
  }
  const a = t * (Math.PI / 2);
  return [Math.sin(a) * p.neckHalf, -Math.cos(a) * p.neckFront];
}

// One side of the shirt's open camp collar on the flat front, as two edges from the neck corner down: the inner
// edge along the V, the outer edge out over the chest to the collar point. dir 1 is the side on your right.
const FLAP_STEPS = 14;
function flapEdges(p: Pattern, dir: number): { inner: Pt[]; outer: Pt[] } {
  const inner: Pt[] = [];
  const outer: Pt[] = [];
  const o0: Pt = [p.neckHalf + 0.035, -0.015];
  const o1: Pt = [p.neckHalf + 0.065, -0.1];
  const o2: Pt = [p.neckHalf - 0.005, -p.neckFront + 0.035];
  for (let i = 0; i <= FLAP_STEPS; i++) {
    const s = i / FLAP_STEPS;
    const [ix, iy] = neckPoint(p, 1 - s);
    inner.push([dir * ix, iy]);
    const a = (1 - s) * (1 - s);
    const b = 2 * (1 - s) * s;
    const c = s * s;
    outer.push([dir * (a * o0[0] + b * o1[0] + c * o2[0]), a * o0[1] + b * o1[1] + c * o2[1]]);
  }
  return { inner, outer };
}

// The shirt's camp collar, two soft flaps lying open on the chest either side of the V, and a row of buttons. Both
// are placed on the draped front, so they follow its folds, and both sit at their real place in the geometry (not
// moved by a mesh position), so the cloth shader, which bends by height, carries them along with the fabric.
function shirtParts(p: Pattern, box: Box, front: Panel, normals: THREE.BufferAttribute) {
  const flaps: THREE.BufferGeometry[] = [];
  for (const dir of [1, -1]) {
    const { inner, outer } = flapEdges(p, dir);
    const verts: number[] = [];
    const uvs: number[] = [];
    const idx: number[] = [];
    for (let i = 0; i <= FLAP_STEPS; i++) {
      for (const q of [inner[i]!, outer[i]!]) {
        const s = surfaceAt(front, normals, q);
        s.p.addScaledVector(s.n, 0.0035);
        verts.push(s.p.x, s.p.y, s.p.z);
        uvs.push((q[0] - box.x0) / box.w, (q[1] - box.y0) / box.h);
      }
      if (i < FLAP_STEPS) {
        const k = i * 2;
        idx.push(k, k + 1, k + 2, k + 1, k + 3, k + 2);
      }
    }
    const g = new THREE.BufferGeometry();
    g.setAttribute("position", new THREE.Float32BufferAttribute(verts, 3));
    g.setAttribute("uv", new THREE.Float32BufferAttribute(uvs, 2));
    g.setIndex(idx);
    g.computeVertexNormals();
    // face the flap out of the chest, whichever way its strip happened to wind
    if ((g.attributes.normal as THREE.BufferAttribute).getZ(FLAP_STEPS) < 0) {
      for (let i = 0; i < idx.length; i += 3) [idx[i + 1], idx[i + 2]] = [idx[i + 2]!, idx[i + 1]!];
      g.setIndex(idx);
      g.computeVertexNormals();
    }
    // the same cloth as the body, a shade darker, so the collar reads as a layer lying on the chest
    g.setAttribute("color", new THREE.BufferAttribute(new Float32Array(verts.length).fill(0.9), 3));
    flaps.push(g);
  }
  const buttons: THREE.BufferGeometry[] = [];
  for (let i = 0; i < 5; i++) {
    const s = surfaceAt(front, normals, [0.007, -p.neckFront - 0.025 - i * 0.115]);
    const b = new THREE.CylinderGeometry(0.0062, 0.0062, 0.003, 16);
    // the button's axis along the cloth's normal, standing a hair off the surface
    b.applyQuaternion(new THREE.Quaternion().setFromUnitVectors(new THREE.Vector3(0, 1, 0), s.n));
    b.translate(s.p.x + s.n.x * 0.003, s.p.y + s.n.y * 0.003, s.p.z + s.n.z * 0.003);
    buttons.push(b);
  }
  return { flaps, buttons };
}

// ---------------------------------------------------------------- textures

function canvas(w: number, h: number) {
  const c = document.createElement("canvas");
  c.width = w;
  c.height = h;
  return c;
}

function parse(hex: string) {
  return new THREE.Color(hex);
}
function shade(hex: string, amount: number) {
  const c = parse(hex);
  const t = amount < 0 ? new THREE.Color(0, 0, 0) : new THREE.Color(1, 1, 1);
  return "#" + c.lerp(t, Math.abs(amount)).getHexString();
}
// a grey marl: hardly any colour, neither dark nor light
function isMarl(hex: string) {
  const hsl = { h: 0, s: 0, l: 0 };
  parse(hex).getHSL(hsl);
  return hsl.s < 0.08 && hsl.l > 0.3 && hsl.l < 0.7;
}
function lum(hex: string) {
  const c = parse(hex);
  return 0.2126 * c.r + 0.7152 * c.g + 0.0722 * c.b;
}

const SCRIPT = "'Snell Roundhand', 'Segoe Script', 'Brush Script MT', 'Apple Chancery', cursive";
const SERIF = "'Didot', 'Bodoni 72', 'Bodoni MT', 'Playfair Display', Georgia, serif";

function rand(seed: number) {
  let s = seed >>> 0 || 1;
  return () => {
    s ^= s << 13;
    s ^= s >>> 17;
    s ^= s << 5;
    return (s >>> 0) / 4294967296;
  };
}

function hash(x: number, y: number, seed: number) {
  const h = Math.sin(x * 127.1 + y * 311.7 + seed * 74.7) * 43758.5453;
  return h - Math.floor(h);
}

// A screen print is never perfectly solid: knock tiny specks out of it so the cloth shows through.
function grain(ctx: CanvasRenderingContext2D, x: number, y: number, w: number, h: number, seed: number) {
  const r = rand(seed);
  ctx.save();
  ctx.globalCompositeOperation = "destination-out";
  for (let i = 0; i < (w * h) / 170; i++) {
    ctx.fillStyle = `rgba(0,0,0,${0.12 + r() * 0.28})`;
    ctx.fillRect(x + r() * w, y + r() * h, 1 + r() * 1.5, 1 + r() * 1.5);
  }
  ctx.restore();
}

// Pattern units to texture pixels for one kind's texture, and how many pixels make a unit
function painter(box: Box) {
  const unit = box.texW / box.w;
  const toPx = (x: number, y: number): Pt => [(x - box.x0) * unit, (box.y1 - y) * unit];
  return { toPx, unit };
}

function drawPrint(ctx: CanvasRenderingContext2D, print: GarmentPrint, kind: GarmentKind, p: Pattern, box: Box, colour: string) {
  const { toPx, unit } = painter(box);
  // a chest print sits about a fifth of the body below the front of the neck
  const [cx, chestY] = toPx(0, -p.neckFront - (kind === "crewneck" ? 0.2 : 0.17));
  // prints are sized to the chest they sit on
  const bodyW = 2 * p.half * 0.8 * unit;
  const fit = bodyW / (0.5 * unit);
  const layer = canvas(box.texW, box.texH);
  const g = layer.getContext("2d")!;
  g.textAlign = "center";
  g.textBaseline = "middle";
  if (print.kind === "script") {
    const words = print.text.split(" ");
    const lines = words.length > 1 ? [words.slice(0, Math.ceil(words.length / 2)).join(" "), words.slice(Math.ceil(words.length / 2)).join(" ")] : words;
    g.save();
    g.translate(cx, chestY);
    g.rotate(-0.12);
    g.fillStyle = print.ink;
    lines.forEach((line, i) => {
      let size = 150;
      g.font = `700 ${size}px ${SCRIPT}`;
      const w = g.measureText(line).width;
      size = Math.min(170 * fit, (size * bodyW * 0.74) / Math.max(1, w));
      g.font = `700 ${size}px ${SCRIPT}`;
      g.fillText(line, (i ? 0.08 : -0.06) * bodyW, (i - (lines.length - 1) / 2) * size * 0.78);
    });
    g.restore();
    grain(g, cx - bodyW / 2, chestY - 160 * fit, bodyW, 320 * fit, 7);
  } else if (print.kind === "serif") {
    g.fillStyle = print.ink;
    const size = (bodyW * 0.235) | 0;
    print.lines.forEach((line, i) => {
      g.font = `700 ${size}px ${SERIF}`;
      g.fillText(line, cx, chestY - size * 0.95 + i * size * 0.92);
    });
    g.font = `600 ${Math.round(size * 0.16)}px ${SERIF}`;
    g.fillText("DIMAAC GOODS  ·  MMXXVI", cx, chestY - size * 0.95 + print.lines.length * size * 0.92 - size * 0.12);
    grain(g, cx - bodyW / 2, chestY - size * 1.6, bodyW, size * 3.6, 9);
  } else if (print.kind === "flowers") {
    const r = rand(23);
    const palette = ["#e8364f", "#f58a1f", "#6a4cf0", "#11a58a", "#ec3f8c", "#f7c21b", "#2f7ff0"];
    const cy = chestY + 30 * fit;
    for (let i = 0; i < 34; i++) {
      const a = r() * Math.PI * 2;
      const rr = Math.sqrt(r()) * bodyW * 0.3;
      const fx = cx + Math.cos(a) * rr * 1.05;
      const fy = cy + Math.sin(a) * rr * 0.92;
      const petals = 5 + ((r() * 4) | 0);
      const size = (20 + r() * 30) * fit;
      const col = palette[(r() * palette.length) | 0] ?? "#e85d75";
      // leaf
      g.save();
      g.translate(fx, fy);
      g.rotate(r() * Math.PI * 2);
      g.fillStyle = r() > 0.5 ? "#2f7a46" : "#4b9a5a";
      g.beginPath();
      g.ellipse(size * 1.1, 0, size * 0.7, size * 0.26, 0.3, 0, Math.PI * 2);
      g.fill();
      for (let k = 0; k < petals; k++) {
        g.rotate((Math.PI * 2) / petals);
        g.fillStyle = col;
        g.beginPath();
        g.ellipse(size * 0.55, 0, size * 0.55, size * 0.3, 0, 0, Math.PI * 2);
        g.fill();
      }
      g.fillStyle = r() > 0.5 ? "#2b2b33" : "#ffd84d";
      g.beginPath();
      g.arc(0, 0, size * 0.24, 0, Math.PI * 2);
      g.fill();
      g.restore();
    }
    if (print.text) {
      g.save();
      g.translate(cx, cy - bodyW * 0.12);
      g.rotate(-0.1);
      g.fillStyle = print.ink;
      g.font = `700 ${Math.round(150 * fit)}px ${SCRIPT}`;
      g.strokeStyle = colour;
      g.lineWidth = 14 * fit;
      g.strokeText(print.text, 0, 0);
      g.fillText(print.text, 0, 0);
      g.restore();
    }
    // flowers are printed solid: no knock-out grain, so the colours stay bright
  } else if (print.kind === "chest") {
    // the wearer's left chest, which is on your right when it faces you
    const [x, y] = toPx(p.neckHalf + 0.015, -p.neckFront - 0.045);
    g.fillStyle = print.ink;
    g.font = `italic 600 30px ${SERIF}`;
    const w = g.measureText(print.text).width;
    const size = Math.min(34, (30 * 0.09 * unit) / Math.max(1, w));
    g.font = `italic 600 ${size}px ${SERIF}`;
    g.fillText(print.text, x, y);
  } else if (print.kind === "pocket") {
    // a sewn-on patch pocket on the wearer's left chest: a slightly darker patch with a soft shadow under it, a
    // shadow just inside its open top, a folded top hem and a row of stitches round it
    const [x, y] = toPx(0.05, -p.neckFront - 0.06);
    const w = 0.1 * unit;
    const h = 0.115 * unit;
    g.fillStyle = "rgba(0,0,0,0.16)";
    g.beginPath();
    g.roundRect(x + 3, y + 5, w, h, [2, 2, 8, 8]);
    g.fill();
    g.fillStyle = shade(colour, -0.09);
    g.beginPath();
    g.roundRect(x, y, w, h, [2, 2, 8, 8]);
    g.fill();
    const lip = g.createLinearGradient(0, y, 0, y + 24);
    lip.addColorStop(0, "rgba(0,0,0,0.22)");
    lip.addColorStop(1, "rgba(0,0,0,0)");
    g.fillStyle = lip;
    g.fillRect(x, y, w, 24);
    g.strokeStyle = shade(colour, -0.3);
    g.lineWidth = 1.6;
    g.setLineDash([5, 4]);
    g.beginPath();
    g.moveTo(x + 5, y + 15);
    g.lineTo(x + w - 5, y + 15);
    g.stroke();
    g.beginPath();
    g.roundRect(x + 5, y + 5, w - 10, h - 10, [1, 1, 5, 5]);
    g.stroke();
    g.setLineDash([]);
    g.strokeStyle = shade(colour, -0.24);
    g.lineWidth = 1.4;
    g.beginPath();
    g.roundRect(x, y, w, h, [2, 2, 8, 8]);
    g.stroke();
  }
  if (print.kind !== "pattern") ctx.drawImage(layer, 0, 0);
}

// An all-over print of small sprigs, like a vintage resort shirt: five-petal flowers, pairs of leaves on a stem and
// the odd dot, set on a jittered grid so the print is even (pure random clumps), the same size on every kind. The
// first colour is the flowers' centres and the stems.
function drawPattern(ctx: CanvasRenderingContext2D, colours: string[], seed: number, box: Box) {
  const r = rand(seed);
  const unit = box.texW / box.w;
  const cell = 0.052 * unit;
  const pick = () => colours[1 + ((r() * (colours.length - 1)) | 0)] ?? colours[0] ?? "#ddd";
  for (let j = 0; j * cell < box.texH + cell; j++) {
    for (let i = 0; i * cell < box.texW + cell; i++) {
      const x = (i + (j % 2) * 0.5 + (r() - 0.5) * 0.55) * cell;
      const y = (j + (r() - 0.5) * 0.55) * cell;
      const what = r();
      ctx.save();
      ctx.translate(x, y);
      ctx.rotate(r() * Math.PI * 2);
      if (what < 0.46) {
        const s = (0.0075 + r() * 0.004) * unit;
        ctx.fillStyle = pick();
        for (let k = 0; k < 5; k++) {
          ctx.rotate((Math.PI * 2) / 5);
          ctx.beginPath();
          ctx.ellipse(s * 0.95, 0, s * 0.78, s * 0.5, 0, 0, Math.PI * 2);
          ctx.fill();
        }
        ctx.fillStyle = colours[0] ?? "#333";
        ctx.beginPath();
        ctx.arc(0, 0, s * 0.36, 0, Math.PI * 2);
        ctx.fill();
      } else if (what < 0.88) {
        const s = (0.008 + r() * 0.004) * unit;
        ctx.strokeStyle = colours[0] ?? "#333";
        ctx.lineWidth = Math.max(1, s * 0.12);
        ctx.beginPath();
        ctx.moveTo(-s * 1.4, 0);
        ctx.quadraticCurveTo(0, -s * 0.25, s * 1.4, 0);
        ctx.stroke();
        ctx.fillStyle = pick();
        for (const [lx, side] of [[-0.55, 1], [0.15, -1], [0.85, 1]] as const) {
          ctx.save();
          ctx.translate(lx * s, 0);
          ctx.rotate(side * 0.75);
          ctx.beginPath();
          ctx.moveTo(0, 0);
          ctx.quadraticCurveTo(s * 0.45, -s * 0.38 * side, s * 0.95, 0);
          ctx.quadraticCurveTo(s * 0.45, s * 0.38 * side, 0, 0);
          ctx.fill();
          ctx.restore();
        }
      } else {
        ctx.fillStyle = pick();
        ctx.beginPath();
        ctx.arc(0, 0, (0.0022 + r() * 0.0016) * unit, 0, Math.PI * 2);
        ctx.fill();
      }
      ctx.restore();
    }
  }
}

const SPECKS: { fine?: HTMLCanvasElement; marl?: HTMLCanvasElement } = {};
function speckTile(marl: boolean) {
  const key = marl ? "marl" : "fine";
  let tile = SPECKS[key];
  if (!tile) {
    tile = canvas(256, 256);
    const ctx = tile.getContext("2d")!;
    const r = rand(marl ? 41 : 42);
    for (let i = 0; i < (marl ? 3300 : 1450); i++) {
      ctx.fillStyle = r() > 0.5 ? `rgba(255,255,255,${marl ? 0.16 : 0.035})` : `rgba(0,0,0,${marl ? 0.16 : 0.045})`;
      ctx.fillRect(r() * 256, r() * 256, marl ? 2.4 : 1.6, marl ? 1.2 : 1.6);
    }
    SPECKS[key] = tile;
  }
  return tile;
}

// The fabric colour, its knit, the stitching, seams and rib bands, and the print, all drawn on the flat pattern.
function fabricTexture(spec: GarmentSpec, p: Pattern, box: Box, front: boolean, speck: boolean) {
  // the back is mostly hidden, so it is drawn at half size (a quarter of the work); everything below is drawn in
  // full-size coordinates and the context scale shrinks it
  const k = front ? 1 : 0.5;
  const c = canvas(Math.round(box.texW * k), Math.round(box.texH * k));
  const ctx = c.getContext("2d")!;
  ctx.scale(k, k);
  const { toPx } = painter(box);
  const { kind } = spec;
  // white cotton is never paper white (about 85% reflectance), or it melts into a light page
  const colour = lum(spec.colour) > 0.8 ? shade(spec.colour, -0.07) : spec.colour;
  ctx.fillStyle = colour;
  ctx.fillRect(0, 0, box.texW, box.texH);
  if (spec.print?.kind === "pattern") drawPattern(ctx, spec.print.colours, front ? 5 : 6, box);
  // knit: fine speckle, much stronger for a grey marl
  const col = parse(colour);
  const hsl = { h: 0, s: 0, l: 0 };
  col.getHSL(hsl);
  const marl = hsl.s < 0.08 && hsl.l > 0.3 && hsl.l < 0.7;
  // the knit speckle is one small tile drawn once and repeated: tens of thousands of single dots per texture
  // were most of the time it took to build a rack. Scanned cloth has its own knit: only a marl keeps its flecks.
  const pattern = speck || marl ? ctx.createPattern(speckTile(marl), "repeat") : null;
  if (pattern) {
    ctx.fillStyle = pattern;
    ctx.fillRect(0, 0, box.texW, box.texH);
  }
  const dark = lum(colour) < 0.25;
  const line = (pts: Pt[]) => {
    ctx.beginPath();
    pts.forEach(([x, y], i) => {
      const [px, py] = toPx(x, y);
      if (i === 0) ctx.moveTo(px, py);
      else ctx.lineTo(px, py);
    });
    ctx.stroke();
  };
  const hemY = -p.length;
  if (kind === "crewneck") {
    // the rib waistband: a shade darker with fine ribs running down it, and a seam where it joins the body
    const rib = 0.065;
    const [x0, y0] = toPx(-p.half - 0.02, hemY + rib);
    const [x1, y1] = toPx(p.half + 0.02, hemY - 0.02);
    ctx.fillStyle = shade(colour, -0.09);
    ctx.fillRect(x0, y0, x1 - x0, y1 - y0);
    ctx.fillStyle = "rgba(0,0,0,0.16)";
    for (let x = x0; x < x1; x += 3) ctx.fillRect(x, y0, 1.2, y1 - y0);
    ctx.strokeStyle = shade(colour, -0.22);
    ctx.lineWidth = 1.4;
    line([[-p.half - 0.02, hemY + rib], [p.half + 0.02, hemY + rib]]);
  } else {
    // a turned-up hem: the doubled cloth reads a touch darker, closed by a quiet twin-needle stitch in the cloth's
    // own colour
    const [x0, y0] = toPx(-p.half - 0.02, hemY + 0.022);
    const [x1, y1] = toPx(p.half + 0.02, hemY - 0.02);
    ctx.fillStyle = dark ? "rgba(255,255,255,0.025)" : "rgba(0,0,0,0.035)";
    ctx.fillRect(x0, y0, x1 - x0, y1 - y0);
    ctx.strokeStyle = dark ? "rgba(255,255,255,0.09)" : "rgba(0,0,0,0.1)";
    ctx.lineWidth = 1.1;
    for (const off of [0.019, 0.024]) line([[-p.half - 0.02, hemY + off], [p.half + 0.02, hemY + off]]);
  }
  // the armhole seams, where the sleeves are sewn in: a soft shadow just inside the body's edge and the stitch line
  for (const s of [1, -1]) {
    const edge = armholeLine(p).map(([x, y]) => [s * (x - 0.006), y] as Pt);
    ctx.strokeStyle = dark ? "rgba(0,0,0,0.12)" : "rgba(0,0,0,0.05)";
    ctx.lineWidth = 7;
    line(edge);
    ctx.strokeStyle = dark ? "rgba(255,255,255,0.06)" : "rgba(0,0,0,0.09)";
    ctx.lineWidth = 1.1;
    line(edge.map(([x, y]) => [x - s * 0.004, y] as Pt));
  }
  // shoulder seams, just inside the pattern's edge
  ctx.strokeStyle = dark ? "rgba(255,255,255,0.06)" : `rgba(0,0,0,${spec.print?.kind === "pattern" ? 0.04 : 0.08})`;
  ctx.lineWidth = 1.2;
  for (const s of [1, -1]) line([[s * p.neckHalf, -0.004], [s * p.shoulderX, -p.shoulderDrop - 0.004]]);
  // the neck rib: a band round the neckline a shade darker than the body, ribbed across, with its seam under it
  if (kind !== "shirt") {
    const ribW = kind === "crewneck" ? 0.024 : 0.017;
    // the neckline grown outward by inset: the same quarter ellipses the pattern is cut with
    const neck = (inset: number): Pt[] => {
      const pts: Pt[] = [];
      const drop = front ? p.neckFront : p.neckBack;
      for (let i = 0; i <= 32; i++) {
        const a = (-1 + (2 * i) / 32) * (Math.PI / 2);
        pts.push([Math.sin(a) * (p.neckHalf + inset), -Math.cos(a) * (drop + inset)]);
      }
      return pts;
    };
    ctx.strokeStyle = shade(colour, dark ? 0.012 : -0.05);
    ctx.lineWidth = ribW * painter(box).unit;
    line(neck(ribW / 2));
    ctx.strokeStyle = dark ? "rgba(255,255,255,0.035)" : "rgba(0,0,0,0.12)";
    ctx.lineWidth = 1.2;
    line(neck(ribW));
  }
  // the shirt's placket: a slightly darker band down the button column, stitched on both edges; and the soft
  // shadow the open collar casts on the chest round its edges
  if (kind === "shirt" && front) {
    for (const dir of [1, -1]) {
      const { inner, outer } = flapEdges(p, dir);
      const edge = [...outer, inner[inner.length - 1]!];
      for (const [width, alpha] of [
        [16, 0.05],
        [10, 0.07],
        [5, 0.09],
      ] as const) {
        ctx.strokeStyle = `rgba(0,0,0,${alpha})`;
        ctx.lineWidth = width;
        ctx.lineJoin = "round";
        ctx.lineCap = "round";
        ctx.beginPath();
        edge.forEach(([x, y], i) => {
          const [px, py] = toPx(x, y);
          if (i === 0) ctx.moveTo(px + 2, py + 4);
          else ctx.lineTo(px + 2, py + 4);
        });
        ctx.stroke();
      }
    }
  }
  if (kind === "shirt") {
    // the placket: the button band, a doubled strip a touch darker with a fine stitch down each edge
    const [px0, py0] = toPx(-0.012, -p.neckFront);
    const [px1, py1] = toPx(0.026, hemY - 0.02);
    ctx.fillStyle = "rgba(0,0,0,0.1)";
    ctx.fillRect(px0, py0, px1 - px0, py1 - py0);
    ctx.strokeStyle = dark ? "rgba(255,255,255,0.1)" : "rgba(0,0,0,0.14)";
    ctx.lineWidth = 1.1;
    for (const x of [px0 + 3, px1 - 3]) {
      ctx.beginPath();
      ctx.moveTo(x, py0);
      ctx.lineTo(x, py1);
      ctx.stroke();
    }
  }
  if (front && spec.print) drawPrint(ctx, spec.print, kind, p, box, colour);
  const tex = new THREE.CanvasTexture(c);
  tex.colorSpace = THREE.SRGBColorSpace;
  tex.anisotropy = 8;
  return tex;
}

// A sleeve's fabric: the same cloth, knit and print as the body at the same scale, with the cuff finished like the
// body's hem (a turned-up hem on a tee or a shirt, a rib cuff on the crewneck) and a stitch line along the armhole.
// u runs round the sleeve from the fold over the top, v from the armhole (the canvas's bottom) to the cuff (its top).
function sleeveTexture(spec: GarmentSpec, size: { around: number; along: number }, speck: boolean) {
  const W = Math.min(1024, Math.round(1180 * size.around));
  const H = Math.min(1024, Math.round(1180 * size.along));
  const c = canvas(W, H);
  const ctx = c.getContext("2d")!;
  const colour = lum(spec.colour) > 0.8 ? shade(spec.colour, -0.07) : spec.colour;
  ctx.fillStyle = colour;
  ctx.fillRect(0, 0, W, H);
  if (spec.print?.kind === "pattern") drawPattern(ctx, spec.print.colours, 7, { x0: 0, y0: 0, y1: 0, w: size.around, h: size.along, texW: W, texH: H });
  const col = parse(colour);
  const hsl = { h: 0, s: 0, l: 0 };
  col.getHSL(hsl);
  const marl = hsl.s < 0.08 && hsl.l > 0.3 && hsl.l < 0.7;
  const knit = speck || marl ? ctx.createPattern(speckTile(marl), "repeat") : null;
  if (knit) {
    ctx.fillStyle = knit;
    ctx.fillRect(0, 0, W, H);
  }
  const dark = lum(colour) < 0.25;
  const unit = H / size.along;
  if (spec.kind === "crewneck") {
    const rib = 0.065 * unit;
    ctx.fillStyle = shade(colour, -0.09);
    ctx.fillRect(0, 0, W, rib);
    ctx.fillStyle = "rgba(0,0,0,0.16)";
    for (let x = 0; x < W; x += 3) ctx.fillRect(x, 0, 1.2, rib);
    ctx.fillStyle = shade(colour, -0.22);
    ctx.fillRect(0, rib, W, 1.4);
  } else {
    ctx.fillStyle = dark ? "rgba(255,255,255,0.025)" : "rgba(0,0,0,0.035)";
    ctx.fillRect(0, 0, W, 0.022 * unit);
    ctx.fillStyle = dark ? "rgba(255,255,255,0.09)" : "rgba(0,0,0,0.1)";
    for (const off of [0.019, 0.024]) ctx.fillRect(0, off * unit, W, 1.1);
  }
  ctx.fillStyle = dark ? "rgba(255,255,255,0.06)" : "rgba(0,0,0,0.09)";
  ctx.fillRect(0, H - 0.007 * unit, W, 1.1);
  const tex = new THREE.CanvasTexture(c);
  tex.colorSpace = THREE.SRGBColorSpace;
  tex.anisotropy = 8;
  return tex;
}

// A tiny jersey knit as a normal map, tiled across the cloth.
function knitNormal() {
  const N = 64;
  const hgt = new Float32Array(N * N);
  for (let y = 0; y < N; y++)
    for (let x = 0; x < N; x++) {
      const u = x / N;
      const v = y / N;
      const row = Math.floor(v * 8);
      const k = Math.abs(Math.sin(Math.PI * (u * 8 + (row % 2) * 0.5 + (v * 8 - row) * 0.6)));
      hgt[y * N + x] = 0.6 * k + 0.4 * (hash(x, y, 9) - 0.5) * 0.4;
    }
  const c = canvas(N, N);
  const ctx = c.getContext("2d")!;
  const img = ctx.createImageData(N, N);
  for (let y = 0; y < N; y++)
    for (let x = 0; x < N; x++) {
      const H = (k: number) => hgt[k] ?? 0;
      const hx = H(y * N + ((x + 1) % N)) - H(y * N + ((x + N - 1) % N));
      const hy = H(((y + 1) % N) * N + x) - H(((y + N - 1) % N) * N + x);
      const n = new THREE.Vector3(-hx * 2, -hy * 2, 1).normalize();
      const i = (y * N + x) * 4;
      img.data[i] = (n.x * 0.5 + 0.5) * 255;
      img.data[i + 1] = (n.y * 0.5 + 0.5) * 255;
      img.data[i + 2] = (n.z * 0.5 + 0.5) * 255;
      img.data[i + 3] = 255;
    }
  ctx.putImageData(img, 0, 0);
  const tex = new THREE.CanvasTexture(c);
  tex.colorSpace = THREE.NoColorSpace;
  tex.wrapS = tex.wrapT = THREE.RepeatWrapping;
  return tex;
}

// ---------------------------------------------------------------- hanger, hook, rail

// A tiny studio for the chrome to reflect: a ring of light and dark bands round it (a bright strip just above eye
// level, a dark horizon, a pale floor bounce) and a softbox overhead. Built as a scene and prefiltered like the room.
function studioScene() {
  const scene = new THREE.Scene();
  scene.background = new THREE.Color(0.3, 0.3, 0.31);
  const R = 10;
  const band = (from: number, to: number, value: number) => {
    // a band between two elevations (degrees) on a cylinder round the middle, seen from inside
    const y0 = R * Math.tan((from * Math.PI) / 180);
    const y1 = R * Math.tan((to * Math.PI) / 180);
    const geo = new THREE.CylinderGeometry(R, R, y1 - y0, 48, 1, true);
    const mesh = new THREE.Mesh(geo, new THREE.MeshBasicMaterial({ color: new THREE.Color(value, value * 1.01, value * 1.03), side: THREE.BackSide }));
    mesh.position.y = (y0 + y1) / 2;
    scene.add(mesh);
  };
  band(-62, -30, 0.24);
  band(-30, -6, 0.5);
  band(-6, 6, 0.08);
  band(6, 10, 0.5);
  band(10, 17, 2.6);
  band(17, 24, 0.7);
  band(24, 55, 0.45);
  const box = new THREE.Mesh(new THREE.CircleGeometry(R * 0.9, 48), new THREE.MeshBasicMaterial({ color: new THREE.Color(1.9, 1.9, 1.95), side: THREE.DoubleSide }));
  box.rotation.x = Math.PI / 2;
  box.position.y = R * 1.35;
  scene.add(box);
  return scene;
}

function disposeScene(scene: THREE.Scene) {
  scene.traverse((o) => {
    const mesh = o as THREE.Mesh;
    if (!mesh.isMesh) return;
    mesh.geometry.dispose();
    (mesh.material as THREE.Material).dispose();
  });
}

// The wooden bar follows the hanger the garments were draped on (its tips end inside the shoulders), a little
// thinner than the room the cloth left round it, so it never shows through
function hangerGeometry(): [THREE.BufferGeometry, THREE.BufferGeometry] {
  // drawn a touch shorter than the hanger the cloth was draped on, so its tips never poke out at the shoulders
  const pts = DRAPE_HANGER.map(([x, y]) => new THREE.Vector3(x * 0.9, y, 0));
  // a flat bar: round tube squashed front to back (the curve lies at z 0, so only the section flattens)
  const bar = new THREE.TubeGeometry(new THREE.CatmullRomCurve3(pts), 64, 0.0165, 14, false);
  bar.scale(1, 1, 0.46);
  const block = new THREE.CylinderGeometry(0.0105, 0.012, 0.02, 16);
  block.translate(0, -0.104, 0);
  return [bar, block];
}

// the rail's radius (a 25 mm tube on a garment about 80 cm long); the hook wraps round it
const RAIL_R = 0.023;

function hookGeometry() {
  const R = RAIL_R + 0.0045 + 0.0012;
  const pts: THREE.Vector3[] = [new THREE.Vector3(0, -0.104, 0), new THREE.Vector3(0, -0.075, 0.004), new THREE.Vector3(0, -0.04, 0.015), new THREE.Vector3(0, -0.012, R * 0.98)];
  for (let i = 0; i <= 14; i++) {
    const a = (i / 14) * (Math.PI * 1.16);
    pts.push(new THREE.Vector3(0, Math.sin(a) * R, Math.cos(a) * R));
  }
  return new THREE.TubeGeometry(new THREE.CatmullRomCurve3(pts), 96, 0.0045, 10, false);
}

const HANGER_LOOK: Record<HangerFinish, { color: number; metalness: number; roughness: number }> = {
  wood: { color: 0x5b2a18, metalness: 0, roughness: 0.34 },
  black: { color: 0x141416, metalness: 0, roughness: 0.38 },
  chrome: { color: 0xe3e6ea, metalness: 1, roughness: 0.16 },
};
const RAIL_LOOK: Record<RailFinish, { color: number; metalness: number; roughness: number }> = {
  chrome: { color: 0xe8ebef, metalness: 1, roughness: 0.12 },
  black: { color: 0x18181a, metalness: 0.6, roughness: 0.32 },
  brass: { color: 0xc9a15a, metalness: 1, roughness: 0.22 },
};

// ---------------------------------------------------------------- cloth motion

type FlowUniforms = {
  uTwist: { value: Float32Array };
  uSway: { value: Float32Array };
  uSwayAxis: { value: THREE.Vector2 };
  uRows: { value: THREE.Vector2 };
  uRipple: { value: number };
  uTime: { value: number };
  uAO: { value: number };
  uInside: { value: number };
  uHang: { value: number };
  uGrain: { value: THREE.Texture };
  uGrainAmt: { value: number };
};

// Bends the cloth in the vertex shader with the rows of cloth-motion.ts: each row of cloth, from the shoulders down
// to the hem, twists about the hook and trails along the rail by its own amount, blended smoothly between rows, so a
// turn or a push runs down the fabric as a wave. While it moves, a faint ripple travels from the shoulders to the hem
// (a small bend in the cloth and in its light). Above the first row, where the hanger holds the cloth, nothing moves.
// Soft drape folds on a garment's body, drawn into its shading as a height over the flat pattern (the baked drape is
// too coarse to hold them): two from where the hanger holds each shoulder, running in toward the chest; one from
// under each arm, down and in; a few slow waves across the lower body, more toward the hem. Mirrored left to right.
const FOLDS_GLSL = /* glsl */ `
uniform vec4 uBox;
uniform vec4 uShape;
uniform float uDrop;
uniform float uFolds;
float clothRidge(vec2 p, vec2 a, vec2 b, float w) {
  vec2 ab = b - a;
  float t = clamp(dot(p - a, ab) / dot(ab, ab), 0.0, 1.0);
  vec2 d = p - a - ab * t;
  return exp(-dot(d, d) / (w * w)) * sin(3.14159 * t);
}
float clothHeight(vec2 q) {
  vec2 p = vec2(abs(q.x), q.y);
  float hw = uShape.x;
  float pit = uShape.y;
  float len = uShape.z;
  float sx = uShape.w;
  float h = 0.9 * clothRidge(p, vec2(sx - 0.05, -uDrop - 0.02), vec2(0.07, -pit + 0.03), 0.024);
  h += 0.5 * clothRidge(p, vec2(sx - 0.02, -uDrop - 0.07), vec2(0.15, -pit - 0.07), 0.02);
  h += 0.7 * clothRidge(p, vec2(hw - 0.01, -pit - 0.01), vec2(hw - 0.12, -pit - 0.17), 0.018);
  h += 0.45 * smoothstep(-len * 0.5, -len * 0.95, q.y) * cos(6.2832 * q.x / 0.17);
  return h;
}
vec2 clothFolds(vec2 uv) {
  vec2 q = uBox.xy + uv * uBox.zw;
  float e = 0.004;
  float hx = clothHeight(q + vec2(e, 0.0)) - clothHeight(q - vec2(e, 0.0));
  float hy = clothHeight(q + vec2(0.0, e)) - clothHeight(q - vec2(0.0, e));
  return -uFolds * vec2(hx, hy) / (2.0 * e);
}
`;

type Folds = { box: { x0: number; y0: number; w: number; h: number }; pattern: Pattern; strength: number };

function addFlow(material: THREE.Material, flow: FlowUniforms, hang = false, folds?: Folds) {
  if (hang) material.defines = { ...material.defines, CLOTH_HANG: "" };
  if (folds) material.defines = { ...material.defines, CLOTH_FOLDS: "" };
  const foldUniforms = folds && {
    uBox: { value: new THREE.Vector4(folds.box.x0, folds.box.y0, folds.box.w, folds.box.h) },
    uShape: { value: new THREE.Vector4(folds.pattern.half, folds.pattern.armpit, folds.pattern.length, folds.pattern.shoulderX) },
    uDrop: { value: folds.pattern.shoulderDrop },
    uFolds: { value: folds.strength },
  };
  material.onBeforeCompile = (shader) => {
    Object.assign(shader.uniforms, flow, foldUniforms);
    if (folds) {
      shader.fragmentShader = shader.fragmentShader
        .replace("#include <common>", `#include <common>\n${FOLDS_GLSL}`)
        .replace("#include <normal_fragment_maps>", THREE.ShaderChunk.normal_fragment_maps.replace("mapN.xy *= normalScale;", "mapN.xy *= normalScale;\n\tmapN.xy += clothFolds(vMapUv);"));
    }
    // the baked fold shading (vertex colour) counts for more on light cloth: white needs it to read as cloth. The
    // inside of the cloth (the back face of a two-sided panel) is in the garment's own shadow, seen through the
    // neck and the sleeves.
    shader.fragmentShader = shader.fragmentShader
      .replace("#include <common>", "#include <common>\nuniform float uAO;\nuniform float uInside;\nuniform sampler2D uGrain;\nuniform float uGrainAmt;")
      .replace(
        "#include <color_fragment>",
        `#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA )
  // stronger on light cloth, but never darker than about half: a fold or the shade under a sleeve is a soft grey
  diffuseColor *= max(mix(vec4(1.0), vColor, uAO), vec4(0.5));
#endif
#ifdef USE_NORMALMAP
  // the heather grain, tiled with the knit (0.513 is the grain's own average, so it shades without darkening)
  diffuseColor.rgb *= mix(1.0, texture2D(uGrain, vNormalMapUv).r / 0.513, uGrainAmt);
#endif
#ifdef DOUBLE_SIDED
  if (!gl_FrontFacing) diffuseColor.rgb *= uInside;
#endif`,
      );
    shader.vertexShader = shader.vertexShader
      .replace(
        "#include <common>",
        `#include <common>
uniform float uTwist[${CLOTH_ROWS + 1}];
uniform float uSway[${CLOTH_ROWS + 1}];
uniform vec2 uSwayAxis;
uniform vec2 uRows;
uniform float uRipple;
uniform float uTime;
uniform float uHang;
#ifdef CLOTH_HANG
attribute vec3 hangPosition;
attribute vec3 hangNormal;
#endif`,
      )
      .replace(
        "#include <beginnormal_vertex>",
        `#include <beginnormal_vertex>
// a sleeve hangs down the garment's side on the rail and opens out as the garment turns to face you
#ifdef CLOTH_HANG
vec3 clothPos = mix(position, hangPosition, uHang);
objectNormal = normalize(mix(objectNormal, hangNormal, uHang));
#else
vec3 clothPos = position;
#endif
float clothRow = clamp((uRows.x - clothPos.y) / uRows.y, 0.0, 1.0) * ${CLOTH_ROWS}.0;
float clothTwist = 0.0;
float clothSway = 0.0;
for (int k = 0; k <= ${CLOTH_ROWS}; k++) {
  float w = max(0.0, 1.0 - abs(clothRow - float(k)));
  clothTwist += uTwist[k] * w;
  clothSway += uSway[k] * w;
}
float clothC = cos(clothTwist);
float clothS = sin(clothTwist);
objectNormal = vec3(objectNormal.x * clothC + objectNormal.z * clothS, objectNormal.y, -objectNormal.x * clothS + objectNormal.z * clothC);
float clothPhase = uTime * 11.0 - (uRows.x - clothPos.y) * 34.0 + clothPos.x * 5.0;
float clothAmp = uRipple * 0.0032 * smoothstep(0.0, 1.5, clothRow);
objectNormal = normalize(objectNormal - vec3(0.0, clothAmp * 34.0 * cos(clothPhase), 0.0));`,
      )
      .replace(
        "#include <begin_vertex>",
        `#include <begin_vertex>
transformed = clothPos;
{
  float x2 = transformed.x * clothC + transformed.z * clothS;
  float z2 = -transformed.x * clothS + transformed.z * clothC;
  transformed.x = x2 + uSwayAxis.x * clothSway;
  transformed.z = z2 + uSwayAxis.y * clothSway;
  transformed += objectNormal * clothAmp * sin(clothPhase);
}`,
      );
  };
  material.customProgramCacheKey = () => (hang ? "clothes-rack-flow-hang" : folds ? "clothes-rack-flow-folds" : "clothes-rack-flow");
}

// ---------------------------------------------------------------- shared cloth geometry

// The cloth geometry is plain data (no WebGL context), so every wardrobe on the page shares it: the detail view's
// own renderer reuses what the rack already built instead of decoding it again on the first click.
type Size = { width: number; bodyWidth: number; depth: number; height: number };
type KindParts = {
  pattern: Pattern;
  box: Box;
  front: THREE.BufferGeometry;
  back: THREE.BufferGeometry;
  collar: THREE.BufferGeometry;
  /** the right sleeve and the left */
  sleeves: THREE.BufferGeometry[];
  /** round the sleeve at its armhole, and its length over the top, for drawing its fabric at the body's scale */
  sleeveSize: { around: number; along: number };
  extras?: { flaps: THREE.BufferGeometry[]; buttons: THREE.BufferGeometry[] };
  size: Size;
};
const SHARED = new Map<GarmentKind, { parts: KindParts; refs: number }>();

// The draped garment's own measurements: sleeve to sleeve, the body alone (across the waist), front to back at the
// hem, and rail to hem
function measure(front: Panel, back: Panel, sleeves: Float32Array[], p: Pattern): Size {
  let width = 0;
  let body = 0;
  let low = 0;
  let zMin = Infinity;
  let zMax = -Infinity;
  for (const P of sleeves) {
    for (let i = 0; i < P.length; i += 3) {
      width = Math.max(width, Math.abs(P[i]!));
      low = Math.min(low, P[i + 1]!);
    }
  }
  for (const panel of [front, back]) {
    for (let i = 0; i < panel.pos.length / 3; i++) {
      const x = Math.abs(panel.pos[i * 3]!);
      const y = panel.pos[i * 3 + 1]!;
      const z = panel.pos[i * 3 + 2]!;
      const px = Math.abs(panel.pat[i * 2]!);
      const py = panel.pat[i * 2 + 1]!;
      width = Math.max(width, x);
      low = Math.min(low, y);
      if (px > p.half) continue;
      if (py < -0.4 && py > -0.5) body = Math.max(body, x);
      if (py < -p.length * 0.75) {
        zMin = Math.min(zMin, z);
        zMax = Math.max(zMax, z);
      }
    }
  }
  return { width: width * 2, bodyWidth: body * 2, depth: zMax - zMin, height: -low };
}

function acquireKind(kind: GarmentKind): KindParts {
  let entry = SHARED.get(kind);
  if (!entry) {
    const data = DRAPES[kind];
    const pattern = data.pattern;
    const box = boxFor(pattern);
    const front = decodePanel(data.front, 1);
    const back = decodePanel(data.back, -1);
    const frontGeo = panelGeometry(front, box);
    const sleeves = data.sleeves.map(decodeSleeve);
    const parts: KindParts = {
      pattern,
      box,
      front: frontGeo,
      back: panelGeometry(back, box),
      collar: collarGeometry(front, back, data.neck, kind),
      sleeves: sleeves.map((sl) => sleeveGeometry(sl)),
      sleeveSize: { around: 2 * (pattern.armpit - pattern.shoulderDrop) + 0.04, along: pattern.sleeve.top },
      size: measure(front, back, sleeves.map((sl) => sl.pos), pattern),
    };
    blendSeams(parts.sleeves, [parts.front, parts.back]);
    // the hanging shape's armhole ring is the same points as the open one's, so it takes the same (blended) normals
    for (const g of parts.sleeves) {
      const uv = g.attributes.uv as THREE.BufferAttribute;
      const n = g.attributes.normal as THREE.BufferAttribute;
      const hn = g.attributes.hangNormal as THREE.BufferAttribute;
      for (let i = 0; i < uv.count; i++) if (uv.getY(i) <= 1e-3) hn.setXYZ(i, n.getX(i), n.getY(i), n.getZ(i));
    }
    if (kind === "shirt") parts.extras = shirtParts(pattern, box, front, frontGeo.attributes.normal as THREE.BufferAttribute);
    entry = { parts, refs: 0 };
    SHARED.set(kind, entry);
  }
  entry.refs++;
  return entry.parts;
}

// A sleeve's geometry carries both of its shapes: open (position, normal) and hanging down its side (hangPosition,
// hangNormal); the cloth shader blends between them as the garment turns (see addFlow)
function sleeveGeometry(sl: ReturnType<typeof decodeSleeve>) {
  const geo = shadedGeometry(sl.pos, sl.uv, sl.tri, sl.ao);
  const hung = shadedGeometry(sl.hang, sl.uv, sl.tri, sl.ao);
  geo.setAttribute("hangPosition", new THREE.BufferAttribute(sl.hang, 3));
  geo.setAttribute("hangNormal", (hung.attributes.normal as THREE.BufferAttribute).clone());
  hung.dispose();
  // culling has to allow for either shape
  const box = new THREE.Box3().setFromArray(sl.pos).union(new THREE.Box3().setFromArray(sl.hang));
  geo.boundingBox = box;
  geo.boundingSphere = box.getBoundingSphere(new THREE.Sphere());
  return geo;
}

// Each sleeve starts on the body's armhole, point for point, but every piece works out its own normals, so the seam
// showed as a bright ridge where the two met at an angle. Points that share a place share one normal.
function blendSeams(sleeves: THREE.BufferGeometry[], body: THREE.BufferGeometry[]) {
  const at = (g: THREE.BufferGeometry) => (g.attributes.position as THREE.BufferAttribute).array as Float32Array;
  const nm = (g: THREE.BufferGeometry) => g.attributes.normal as THREE.BufferAttribute;
  for (const sleeve of sleeves) {
    const P = at(sleeve);
    const SN = nm(sleeve);
    const uv = sleeve.attributes.uv as THREE.BufferAttribute;
    for (let i = 0; i < P.length / 3; i++) {
      // only the armhole ring (v = 0) is sewn to the body
      if (uv.getY(i) > 1e-3) continue;
      for (const piece of body) {
        const Q = at(piece);
        const BN = nm(piece);
        for (let j = 0; j < Q.length / 3; j++) {
          if (Math.abs(Q[j * 3]! - P[i * 3]!) + Math.abs(Q[j * 3 + 1]! - P[i * 3 + 1]!) + Math.abs(Q[j * 3 + 2]! - P[i * 3 + 2]!) > 1e-4) continue;
          const n = new THREE.Vector3(SN.getX(i) + BN.getX(j), SN.getY(i) + BN.getY(j), SN.getZ(i) + BN.getZ(j)).normalize();
          SN.setXYZ(i, n.x, n.y, n.z);
          BN.setXYZ(j, n.x, n.y, n.z);
        }
      }
    }
  }
}

function releaseKind(kind: GarmentKind) {
  const entry = SHARED.get(kind);
  if (!entry || --entry.refs > 0) return;
  const k = entry.parts;
  k.front.dispose();
  k.back.dispose();
  k.collar.dispose();
  k.sleeves.forEach((g) => g.dispose());
  k.extras?.flaps.forEach((g) => g.dispose());
  k.extras?.buttons.forEach((g) => g.dispose());
  SHARED.delete(kind);
}

// ---------------------------------------------------------------- the wardrobe

export function createWardrobe(renderer: THREE.WebGLRenderer, textures: GarmentTextures = {}): Wardrobe {
  const pmrem = new THREE.PMREMGenerator(renderer);
  const room = new RoomEnvironment();
  const roomLight = pmrem.fromScene(room, 0.04).texture;
  room.dispose();
  // The photographic cloth and light: whatever is already loaded on the page is used at once, the rest loads now.
  // The studio is prefiltered for this renderer when it arrives.
  let disposed = false;
  // once the first garment is made the look is fixed: a scan that arrives later (after the rack gave up waiting)
  // stays in the page cache for the next wardrobe instead of giving the rest of this rack a different cloth
  let fixed = false;
  const scans: Partial<Record<Exclude<keyof GarmentTextures, "studio">, THREE.Texture>> = {};
  let studioLight: THREE.Texture | null = null;
  const take = (key: keyof GarmentTextures, t: THREE.Texture | null | undefined) => {
    if (!t || disposed || fixed) return;
    if (key === "studio") studioLight = pmrem.fromEquirectangular(t).texture;
    else scans[key] = t;
  };
  const waiting: Promise<void>[] = [];
  for (const key of Object.keys(textures) as (keyof GarmentTextures)[]) {
    const url = textures[key];
    if (!url) continue;
    if (LOADED.has(url)) take(key, LOADED.get(url));
    else waiting.push(loadOnce(url, key === "studio").then((t) => take(key, t)));
  }
  const ready = Promise.all(waiting).then(() => undefined);
  // the heather grain is sampled in the cloth's shader; until there is one, a flat grey that changes nothing
  const flatGrain = new THREE.DataTexture(new Uint8Array([131, 131, 131, 255]), 1, 1);
  flatGrain.needsUpdate = true;
  // Chrome needs contrast to read as chrome: the rail, the hooks and the brackets reflect a studio of light and dark
  // bands (a softbox above, a bright strip, a dark horizon, a floor), so a rod gets its bright top, its dark line
  // and its bright lower edge
  const studio = studioScene();
  const strips = pmrem.fromScene(studio, 0).texture;
  disposeScene(studio);

  // shared by every garment of a kind
  const kinds = new Set<GarmentKind>();
  const knit = knitNormal();
  // The knit on each kind, body and sleeves: the scanned cloth tiled at its real size when there is one (jersey for
  // the tees and the shirt, fleece for the crewneck), else the drawn knit at the same stitch size on every kind (each
  // kind's texture covers a different part of the pattern)
  type Fabric = { normal: THREE.Texture; normalScale: number; roughness: THREE.Texture | null; scanned: boolean };
  const fabrics = new Map<GarmentKind, { body: Fabric; sleeve: Fabric }>();
  const tiled: THREE.Texture[] = [];
  const tile = (t: THREE.Texture, w: number, h: number) => {
    const c = t.clone();
    c.repeat.set(w, h);
    tiled.push(c);
    return c;
  };
  function fabricFor(kind: GarmentKind, w: number, h: number): Fabric {
    const fleece = kind === "crewneck";
    const scan = fleece ? scans.fleeceNormal : scans.jerseyNormal;
    const rough = fleece ? scans.fleeceRoughness : scans.jerseyRoughness;
    if (scan) return { normal: tile(scan, w / SCAN_TILE, h / SCAN_TILE), normalScale: fleece ? 0.8 : 0.6, roughness: rough ? tile(rough, w / SCAN_TILE, h / SCAN_TILE) : null, scanned: true };
    return { normal: tile(knit, 88 * w, 87 * h), normalScale: 0.3, roughness: null, scanned: false };
  }
  const [barGeo, blockGeo] = hangerGeometry();
  const hookGeo = hookGeometry();
  const chrome = new THREE.MeshStandardMaterial({ ...RAIL_LOOK.chrome, envMap: strips, envMapIntensity: 1 });
  const buttonMat = new THREE.MeshStandardMaterial({ color: 0xe9e2d4, roughness: 0.35 });

  function parts(kind: GarmentKind): KindParts {
    fixed = true;
    if (!kinds.has(kind)) {
      kinds.add(kind);
      const k = acquireKind(kind);
      fabrics.set(kind, { body: fabricFor(kind, k.box.w, k.box.h), sleeve: fabricFor(kind, k.sleeveSize.around, k.sleeveSize.along) });
      return k;
    }
    return SHARED.get(kind)!.parts;
  }

  function cloth(map: THREE.Texture, fabric: Fabric, colour: string, fleece: boolean) {
    const c = parse(colour);
    // dark cloth gets a much fainter sheen, or a black tee reads grey; light cloth too, or its edges glow and the
    // shirt loses its form
    const L = lum(colour);
    // black cotton barely shines: its reflections lifted a black tee to charcoal grey (fleece keeps its soft sheen)
    const black = L < 0.12 && !fleece;
    const sheen = c.clone().lerp(new THREE.Color(1, 1, 1), L < 0.12 ? 0.1 : 0.3);
    return new THREE.MeshPhysicalMaterial({
      map,
      vertexColors: true,
      // a scanned roughness map carries the knit's own sheen (it is multiplied by this)
      roughness: fabric.roughness ? 1 : fleece ? 0.97 : 0.93,
      roughnessMap: fabric.roughness,
      sheen: fleece ? 0.45 : L > 0.6 ? 0.16 : black ? 0.22 : 0.32,
      sheenRoughness: 0.82,
      sheenColor: sheen,
      normalMap: fabric.normal,
      normalScale: new THREE.Vector2(fabric.normalScale, fabric.normalScale),
      specularIntensity: black ? 0.12 : 0.25,
      // the cloth carries its own light (three ignores envMapIntensity for light taken from scene.environment)
      envMap: studioLight ?? roomLight,
      envMapRotation: studioLight ? STUDIO_TURN : ROOM_TURN,
      envMapIntensity: studioLight ? 1.2 : 0.55,
      // one layer of cloth: its inside shows through the neck and the sleeves
      side: THREE.DoubleSide,
    });
  }

  function garment(spec: GarmentSpec, hangerFinish: HangerFinish, options: { fadeable?: boolean } = {}): Garment {
    const k = parts(spec.kind);
    const fabric = fabrics.get(spec.kind)!;
    const object = new THREE.Group();
    const turn = new THREE.Group();
    object.add(turn);
    const own: { dispose(): void }[] = [];

    const frontMap = fabricTexture(spec, k.pattern, k.box, true, !fabric.body.scanned);
    const backMap = fabricTexture(spec, k.pattern, k.box, false, !fabric.body.scanned);
    own.push(frontMap, backMap);
    // upload now, while this garment is being built, instead of all twenty textures in the first frame
    renderer.initTexture(frontMap);
    renderer.initTexture(backMap);
    let gone = false;
    if (spec.image) {
      new THREE.TextureLoader().load(
        spec.image,
        (t) => {
          if (gone) {
            t.dispose();
            return;
          }
          t.colorSpace = THREE.SRGBColorSpace;
          frontMat.map = t;
          frontMat.needsUpdate = true;
          own.push(t);
        },
        undefined,
        // a photo that fails to load leaves the drawn fabric in place
        () => {},
      );
    }
    const fleece = spec.kind === "crewneck";
    const light = lum(spec.colour);
    // the inside of the cloth is in the garment's own shadow: on white it has to read clearly darker, or a sleeve
    // opening or the open hem looks like more of the outside
    const flow: FlowUniforms = {
      uTwist: { value: new Float32Array(CLOTH_ROWS + 1) },
      uSway: { value: new Float32Array(CLOTH_ROWS + 1) },
      uSwayAxis: { value: new THREE.Vector2(1, 0) },
      // the rows run from just under the hanger's arms to the hem
      uRows: { value: new THREE.Vector2(-0.2, Math.max(0.2, k.size.height - 0.2)) },
      uRipple: { value: 0 },
      uTime: { value: 0 },
      // garments are made side-on on the rail, sleeves down
      uHang: { value: HANG_AT_REST },
      uAO: { value: light > 0.6 ? 2.1 : light > 0.25 ? 1.3 : 1 },
      uInside: { value: light > 0.6 ? 0.74 : light > 0.25 ? 0.6 : 0.62 },
      // heather: strong on a grey marl, the faintest unevenness on any other colour, as dyed cotton has
      uGrain: { value: scans.heatherGrain ?? flatGrain },
      uGrainAmt: { value: scans.heatherGrain ? (isMarl(spec.colour) ? 0.42 : 0.06) : 0 },
    };
    const frontMat = cloth(frontMap, fabric.body, spec.colour, fleece);
    const backMat = cloth(backMap, fabric.body, spec.colour, fleece);
    own.push(frontMat, backMat);
    const folds: Folds = { box: k.box, pattern: k.pattern, strength: fleece ? 0.005 : 0.004 };
    addFlow(frontMat, flow, false, folds);
    addFlow(backMat, flow, false, folds);
    turn.add(new THREE.Mesh(k.front, frontMat), new THREE.Mesh(k.back, backMat));
    const sleeveMap = sleeveTexture(spec, k.sleeveSize, !fabric.sleeve.scanned);
    own.push(sleeveMap);
    renderer.initTexture(sleeveMap);
    const sleeveMat = cloth(sleeveMap, fabric.sleeve, spec.colour, fleece);
    own.push(sleeveMat);
    addFlow(sleeveMat, flow, true);
    k.sleeves.forEach((g) => turn.add(new THREE.Mesh(g, sleeveMat)));

    const dark = lum(spec.colour) < 0.12;
    const collarMat = new THREE.MeshPhysicalMaterial({ color: dark ? spec.colour : shade(spec.colour, light > 0.8 ? -0.2 : -0.04), roughness: 0.92, sheen: dark ? 0.2 : 0.6, sheenRoughness: 0.75, sheenColor: parse(spec.colour).lerp(new THREE.Color(1, 1, 1), dark ? 0.1 : 0.4), normalMap: fabric.body.normal, normalScale: new THREE.Vector2(0.4, 0.4), specularIntensity: 0.25, envMap: studioLight ?? roomLight, envMapRotation: studioLight ? STUDIO_TURN : ROOM_TURN, envMapIntensity: studioLight ? 1.2 : 0.55 });
    own.push(collarMat);
    addFlow(collarMat, flow);
    turn.add(new THREE.Mesh(k.collar, collarMat));
    if (k.extras) {
      // the collar is the body's own cloth (same print, same knit, same faint sheen), only a shade darker
      const flapMat = cloth(frontMap, fabric.body, spec.colour, false);
      own.push(flapMat);
      addFlow(flapMat, flow);
      const shirtButtons = buttonMat.clone();
      own.push(shirtButtons);
      addFlow(shirtButtons, flow);
      k.extras.flaps.forEach((g) => turn.add(new THREE.Mesh(g, flapMat)));
      k.extras.buttons.forEach((b) => turn.add(new THREE.Mesh(b, shirtButtons)));
    }

    // a lacquered finish: a clear coat over the wood, so the hanger catches a crisp highlight like the real thing
    const hangerMat = new THREE.MeshPhysicalMaterial({ ...HANGER_LOOK[hangerFinish], clearcoat: hangerFinish === "chrome" ? 0 : 0.7, clearcoatRoughness: 0.18 });
    own.push(hangerMat);
    turn.add(new THREE.Mesh(barGeo, hangerMat), new THREE.Mesh(blockGeo, hangerMat));
    // a garment that fades needs its own hook material (the shared one would fade every hook on the page)
    const hookMat = options.fadeable ? chrome.clone() : chrome;
    if (options.fadeable) own.push(hookMat);
    const hook = new THREE.Mesh(hookGeo, hookMat);
    object.add(hook);
    // every material of this garment, for the fade passes; a fadeable garment is always drawn as transparent (at
    // opacity 1 when solid), so switching passes never needs a new shader
    const materials: THREE.Material[] = [];
    object.traverse((o) => {
      const m = (o as THREE.Mesh).material as THREE.Material | undefined;
      if (m && !materials.includes(m)) materials.push(m);
    });
    if (options.fadeable) for (const m of materials) m.transparent = true;

    return {
      object,
      turn,
      hook,
      ...k.size,
      setCloth(c) {
        flow.uTwist.value.set(c.twist);
        flow.uSway.value.set(c.sway);
        flow.uRipple.value = c.ripple;
        flow.uTime.value = c.time;
        // the sway is along the rail, but the cloth bends in the garment's own frame, which is turned by
        // turn.rotation.y: the rail's direction seen from inside the garment
        const th = turn.rotation.y;
        flow.uSwayAxis.value.set(Math.cos(th), Math.sin(th));
        // side-on on the rail the sleeves hang half way down (all the way down they read as flat slabs, fully open as
        // pouches sticking out); they open fully within about 20 degrees of facing you
        const a = Math.min(1, Math.max(0, (Math.abs(th) - 0.35) / 0.9));
        flow.uHang.value = HANG_AT_REST * a * a * (3 - 2 * a);
      },
      setPass(pass, opacity = 1) {
        if (!options.fadeable) return;
        for (const m of materials) {
          m.colorWrite = pass !== "depth";
          m.depthWrite = pass !== "fade";
          m.opacity = pass === "fade" ? opacity : 1;
        }
      },
      setHanger(f) {
        const look = HANGER_LOOK[f];
        hangerMat.color.setHex(look.color);
        hangerMat.metalness = look.metalness;
        hangerMat.roughness = look.roughness;
      },
      dispose() {
        gone = true;
        own.forEach((d) => d.dispose());
      },
    };
  }

  function rail(length: number, finish: RailFinish): Rail {
    const object = new THREE.Group();
    const mat = new THREE.MeshStandardMaterial({ ...RAIL_LOOK[finish], envMap: strips, envMapIntensity: 1 });
    const tubeGeo = new THREE.CylinderGeometry(RAIL_R, RAIL_R, 1, 48, 1, true).rotateZ(Math.PI / 2);
    const tube = new THREE.Mesh(tubeGeo, mat);
    // Each end is held by a wall bracket, like a shop rail: a plate on the wall with two screws, a post out to the
    // rail, a collar round the tube and a domed end cap
    const collarGeo = new THREE.CylinderGeometry(RAIL_R * 1.32, RAIL_R * 1.32, 0.024, 40).rotateZ(Math.PI / 2);
    const domeGeo = new THREE.SphereGeometry(RAIL_R * 1.32, 40, 16, 0, Math.PI * 2, 0, Math.PI / 2).rotateZ(-Math.PI / 2);
    domeGeo.scale(0.4, 1, 1);
    const plateGeo = new THREE.BoxGeometry(0.05, 0.13, 0.008);
    const postGeo = new THREE.CylinderGeometry(0.0105, 0.0105, 0.05, 24).rotateX(Math.PI / 2);
    const screwGeo = new THREE.CylinderGeometry(0.0055, 0.0055, 0.003, 16).rotateX(Math.PI / 2);
    const screwMat = new THREE.MeshStandardMaterial({ color: 0x55585e, metalness: 0.8, roughness: 0.4, envMap: strips, envMapIntensity: 1 });
    // the wall plate is brushed, not mirror-polished: flat and facing you, a mirror would only show the dark horizon
    const plateMat = new THREE.MeshStandardMaterial({ color: 0xdfe2e6, metalness: 1, roughness: 0.42, envMap: strips, envMapIntensity: 1 });
    const end = (side: 1 | -1) => {
      const g = new THREE.Group();
      const collar = new THREE.Mesh(collarGeo, mat);
      const dome = new THREE.Mesh(domeGeo, mat);
      dome.scale.x = side;
      dome.position.x = side * 0.012;
      const plate = new THREE.Mesh(plateGeo, plateMat);
      plate.position.set(side * 0.004, 0, -0.054);
      const post = new THREE.Mesh(postGeo, mat);
      post.position.set(side * 0.004, 0, -0.027);
      g.add(collar, dome, plate, post);
      for (const y of [0.042, -0.042]) {
        const screw = new THREE.Mesh(screwGeo, screwMat);
        screw.position.set(side * 0.004, y, -0.0485);
        g.add(screw);
      }
      return g;
    };
    const left = end(-1);
    const right = end(1);
    object.add(tube, left, right);
    const api: Rail = {
      object,
      setLength(l) {
        tube.scale.x = l;
        left.position.x = -l / 2 - 0.006;
        right.position.x = l / 2 + 0.006;
      },
      setFinish(f) {
        const look = RAIL_LOOK[f];
        mat.color.setHex(look.color);
        mat.metalness = look.metalness;
        mat.roughness = look.roughness;
        plateMat.color.setHex(look.color);
        plateMat.metalness = look.metalness;
        plateMat.roughness = Math.max(0.42, look.roughness);
      },
      dispose() {
        tubeGeo.dispose();
        collarGeo.dispose();
        domeGeo.dispose();
        plateGeo.dispose();
        postGeo.dispose();
        screwGeo.dispose();
        screwMat.dispose();
        plateMat.dispose();
        mat.dispose();
      },
    };
    api.setLength(length);
    return api;
  }

  function addLights(scene: THREE.Scene) {
    // Most of the light is the studio around the cloth. On top of it, a key high on the left, so the cloth turns from
    // light to shade across its folds, and a low side light on the right as strong as the key: the rail shows each
    // garment side-on, and that light is what keeps a white tee white there, as a strip box beside a rail does.
    scene.add(new THREE.HemisphereLight(0xffffff, 0xcfd0d3, 0.05));
    const key = new THREE.DirectionalLight(0xffffff, 1.1);
    key.position.set(-3.3, 2.5, 1.6);
    const side = new THREE.DirectionalLight(0xf4f6ff, 1);
    side.position.set(2.6, 0.6, 2.2);
    scene.add(key, side);
  }

  return {
    garment,
    rail,
    get environment() {
      return studioLight ?? roomLight;
    },
    ready,
    addLights,
    dispose() {
      disposed = true;
      kinds.forEach(releaseKind);
      kinds.clear();
      // only this wardrobe's tiled copies: the scans themselves are shared by the page
      tiled.forEach((t) => t.dispose());
      tiled.length = 0;
      fabrics.clear();
      flatGrain.dispose();
      studioLight?.dispose();
      knit.dispose();
      barGeo.dispose();
      blockGeo.dispose();
      hookGeo.dispose();
      chrome.dispose();
      buttonMat.dispose();
      roomLight.dispose();
      strips.dispose();
      pmrem.dispose();
    },
  };
}
```

### demo.tsx (the demo on the page, not installed)

```tsx
"use client";

import { ClothesRack, type ClothesRackProps } from "@/components/dimaac/clothes-rack";

// The DiMaac mark (the same path as apps/ui/components/logo.tsx)
const MARK =
  "M42.3447 55.2821V102.404L31.8417 110.282H30.3447V55.2821A7.5 7.5 0 0 0 42.3447 55.2821ZM8.3661 8.94717C9.37902 2.10251 16.8316 -2.10005 23.2694 1.08097L23.911 1.42374L25.8446 2.55753C35.5377 8.31711 45.4047 15.3513 53.6034 22.8603C62.1498 30.6882 69.7215 39.7797 72.6288 49.1103C74.136 53.9493 74.4864 59.1978 72.6903 64.3416C70.8867 69.5049 67.2099 73.7292 62.1726 77.0301C57.5103 80.0856 51.4284 82.5183 43.8447 84.3399V68.8182C48.2679 67.5225 51.5724 66.0447 53.952 64.4853C56.8683 62.5743 58.0452 60.7869 58.5312 59.3964C59.0232 57.9861 59.1009 56.1291 58.3056 53.5752C56.6052 48.1173 51.456 41.2377 43.4697 33.9228C37.3743 28.3403 30.0984 22.9315 22.6395 18.1933L18.1513 72.8319C22.0425 72.5685 25.5978 72.2133 28.8417 71.7948V86.9151C24.2037 87.4587 19.1872 87.8637 13.7802 88.1103C7.74687 88.3848 2.23938 83.3451 2.77625 76.7871L8.28699 9.63858L8.3661 8.94717Z";

// Scanned cloth and a small studio to light it, all CC0 from Poly Haven (credits in apps/ui/public/media/credits.json)
const TEXTURES = {
  jerseyNormal: "https://ui.dimaac.com/media/textures/jersey-normal.webp",
  jerseyRoughness: "https://ui.dimaac.com/media/textures/jersey-roughness.webp",
  fleeceNormal: "https://ui.dimaac.com/media/textures/fleece-normal.webp",
  fleeceRoughness: "https://ui.dimaac.com/media/textures/fleece-roughness.webp",
  heatherGrain: "https://ui.dimaac.com/media/textures/heather-grain.webp",
  studio: "https://ui.dimaac.com/media/textures/studio-small-09.hdr",
};

// A quiet shop page in the DiMaac look: plain paper, the mark and name centred, two small links, the rack across the middle.
// Colours flip with the site theme; the garments keep their own.
export default function Demo(props: Partial<ClothesRackProps>) {
  return (
    <div
      className="relative h-full w-full overflow-hidden bg-[#FAFAFA] text-[#0A0A0A] dark:bg-[#0B0B0C] dark:text-[#F5F5F5]"
      style={{ fontFamily: "var(--font-sans, 'Inter Tight', ui-sans-serif, system-ui, sans-serif)" }}
    >
      <div className="absolute inset-x-0 top-0 flex items-center justify-between px-[4%] pt-6 text-[13px] text-[#6B7280] dark:text-[#8B8F98]">
        <span>Collection</span>
        <span>Contact</span>
      </div>
      <div className="absolute inset-x-0 top-5 flex items-center justify-center gap-2 text-[15px] leading-none font-medium">
        <svg viewBox="0 0 75 111" height="16" width="11" aria-hidden="true" focusable="false">
          <path d={MARK} fill="currentColor" />
          <circle cx="36.3447" cy="46.2821" r="6" fill="currentColor" />
        </svg>
        DiMaac
      </div>
      <ClothesRack textures={TEXTURES} {...props} className="absolute! inset-0" />
    </div>
  );
}
```

## Agent prompt

```text
Add the Clothes Rack component (<ClothesRack />) from DiMaac UI to this project.

Docs: https://ui.dimaac.com/components/clothes-rack
Source and dependencies (shadcn registry JSON): https://ui.dimaac.com/r/clothes-rack.json

Install it with:
npx shadcn@latest add https://ui.dimaac.com/r/clothes-rack.json

Then use it like this:
import { ClothesRack } from "@/components/dimaac/clothes-rack";
<ClothesRack />

If the shadcn CLI isn't set up here, fetch the registry JSON above, write files[0].content to components/dimaac/clothes-rack.tsx and install three.
It uses Tailwind v4 classes, so make sure Tailwind scans that folder. Give its parent a size, keep light and dark mode working and keep its prefers-reduced-motion fallback.
Full index for agents: https://ui.dimaac.com/llms.txt
```
