gitroots 0.6.2 → 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gitroots",
3
- "version": "0.6.2",
3
+ "version": "0.6.3",
4
4
  "description": "gitroots CLI: code governance and agent sessions.",
5
5
  "type": "module",
6
6
  "bin": {
package/src/runtime.js CHANGED
@@ -5,7 +5,7 @@ import os from 'node:os';
5
5
  import path from 'node:path';
6
6
  import { fileURLToPath } from 'node:url';
7
7
 
8
- export const VERSION = '0.6.2';
8
+ export const VERSION = '0.6.3';
9
9
 
10
10
  // Default download location for install.sh / gitroots update. Override with GITROOTS_DOWNLOAD_BASE.
11
11
  export const DOWNLOAD_BASE = process.env.GITROOTS_DOWNLOAD_BASE || 'https://gitroots.com/cli';
@@ -1,88 +1,35 @@
1
- // The gitroots logo in the welcome box.
2
- // iTerm2, Ghostty, WezTerm, Kitty: the real assets/logo.png, drawn as an image.
3
- // Every other terminal (Terminal.app, …): the same image in half-block pixels (src/session/logo-art.js).
4
- import { state as colorState, c, width, fit } from '../ui/ansi.js';
1
+ // The welcome header from the gitroots CLI design:
2
+ //
3
+ // [logo] │ v0.6.2 · code governance and agent sessions
4
+ // │ Secure it to the root, scale with confidence.
5
+ //
6
+ // Terminals that can show images (iTerm2, Ghostty, WezTerm, Kitty) get the real assets/logo.png.
7
+ // Others (Terminal.app, …) print a plain bold "gitroots" in its place, as the design specifies.
8
+ import { c, width, state as colorState } from '../ui/ansi.js';
5
9
  import { imageProtocol, logoImage } from '../ui/term.js';
6
- import { ART } from './logo-art.js';
7
10
 
8
- const rgb = (h) => [0, 2, 4].map((i) => parseInt(h.slice(i, i + 2), 16));
11
+ const IMG_ROWS = 3;
12
+ const IMG_COLS = 22; // logo.png is 3.38:1; terminal cells are about 1:2
9
13
 
10
- // Nearest xterm-256 color for terminals without 24-bit color.
11
- function x256([r, g, b]) {
12
- const q = (v) => (v < 48 ? 0 : v < 115 ? 1 : Math.floor((v - 35) / 40));
13
- const lv = [0, 95, 135, 175, 215, 255];
14
- const [qr, qg, qb] = [q(r), q(g), q(b)];
15
- const dc = (lv[qr] - r) ** 2 + (lv[qg] - g) ** 2 + (lv[qb] - b) ** 2;
16
- const gray = Math.max(0, Math.min(23, Math.round(((r + g + b) / 3 - 8) / 10)));
17
- const gv = 8 + gray * 10;
18
- return (gv - r) ** 2 + (gv - g) ** 2 + (gv - b) ** 2 < dc ? 232 + gray : 16 + 36 * qr + 6 * qg + qb;
19
- }
20
- const fg = (h) => (colorState.truecolor ? `\x1b[38;2;${rgb(h).join(';')}m` : `\x1b[38;5;${x256(rgb(h))}m`);
21
- const bg = (h) => (colorState.truecolor ? `\x1b[48;2;${rgb(h).join(';')}m` : `\x1b[48;5;${x256(rgb(h))}m`);
22
-
23
- function pixelAt(art, x, y) {
24
- const p = art.px[y].slice(x * 6, x * 6 + 6);
25
- return p === '------' ? null : p;
26
- }
27
-
28
- /** The logo drawn with half blocks: `rows` terminal rows (12 or 8). */
29
- export function logoLines(rows = 14) {
30
- const art = ART[rows] || ART[14];
31
- const lines = [];
32
- for (let y = 0; y < art.px.length; y += 2) {
33
- let s = '';
34
- for (let x = 0; x < art.w; x++) {
35
- const t = pixelAt(art, x, y);
36
- const b = pixelAt(art, x, y + 1);
37
- if (!colorState.color) { s += t && b ? '█' : t ? '▀' : b ? '▄' : ' '; continue; }
38
- if (!t && !b) s += ' ';
39
- else if (t && b && t === b) s += `${fg(t)}█\x1b[39m`;
40
- else if (t && b) s += `${fg(t)}${bg(b)}▀\x1b[39;49m`;
41
- else if (t) s += `${fg(t)}▀\x1b[39m`;
42
- else s += `${fg(b)}▄\x1b[39m`;
43
- }
44
- lines.push(s);
45
- }
46
- return lines;
47
- }
14
+ const word = (s) => (colorState.color ? `\x1b[1m${colorState.truecolor ? '\x1b[38;2;227;237;252m' : '\x1b[38;5;255m'}${s}\x1b[39;22m` : s);
48
15
 
49
16
  /**
50
- * Welcome box: logo plus info lines (beside it when there's room, under it otherwise).
51
- * Returns { lines, image } — when the terminal can show images, `image` says where to draw logo.png
52
- * (rows up from the end of the box, column) and the logo area in `lines` is left blank for it.
17
+ * Print the header. `lines` are the text lines beside the divider (two in the design).
18
+ * Returns the number of rows printed.
53
19
  */
54
- export function welcomeBox(info, cols) {
55
- const rows = cols >= 100 ? 14 : 10;
56
- const art = ART[rows];
20
+ export function printWelcome(write, lines) {
57
21
  const proto = colorState.color ? imageProtocol() : null;
58
- const logo = proto ? Array(rows).fill(' '.repeat(art.w)) : logoLines(rows);
59
- const logoW = art.w;
60
- const infoW = Math.max(...info.map((l) => width(l)));
61
- const side = cols >= logoW + infoW + 14;
62
- const inner = Math.min(cols - 2, side ? logoW + infoW + 11 : Math.max(logoW, infoW) + 6);
63
- const b = (s) => c.g(s);
64
- const row = (s) => { const t = fit(s, inner - 4); return `${b('│')} ${t}${' '.repeat(Math.max(0, inner - 4 - width(t)))} ${b('│')}`; };
65
- const lines = [b(`╭${'─'.repeat(inner)}╮`), row('')];
66
- const logoTop = lines.length;
67
- if (side) {
68
- const off = Math.max(0, Math.floor((rows - info.length) / 2));
69
- for (let i = 0; i < rows; i++) lines.push(row(`${logo[i]} ${info[i - off] ?? ''}`));
70
- } else {
71
- for (const l of logo) lines.push(row(l));
72
- lines.push(row(''));
73
- for (const l of info) lines.push(row(l));
22
+ const rows = proto ? IMG_ROWS : Math.max(2, lines.length);
23
+ const logoCol = proto ? IMG_COLS : width('gitroots');
24
+ const out = [];
25
+ for (let i = 0; i < rows; i++) {
26
+ const logo = proto ? ' '.repeat(logoCol) : i === 0 ? word('gitroots') : ' '.repeat(logoCol);
27
+ out.push(` ${logo} ${c.m('│')} ${lines[i] ?? ''}`);
74
28
  }
75
- lines.push(row(''), b(`╰${'─'.repeat(inner)}╯`));
76
- const image = proto ? { up: lines.length - logoTop, col: 3, cols: logoW, rows } : null;
77
- return { lines, image };
78
- }
79
-
80
- /** Print the welcome box; in image-capable terminals, draw logo.png into its space. */
81
- export function printWelcome(write, info, cols) {
82
- const { lines, image } = welcomeBox(info, cols);
83
- write(`${lines.join('\n')}\n`);
84
- if (image) {
85
- const esc = logoImage(image.cols, image.rows);
86
- if (esc) write(`\x1b7\x1b[${image.up}A\r\x1b[${image.col}C${esc}\x1b8`);
29
+ write(`${out.join('\n')}\n`);
30
+ if (proto) {
31
+ const esc = logoImage(IMG_COLS, IMG_ROWS);
32
+ if (esc) write(`\x1b7\x1b[${rows}A\r\x1b[2C${esc}\x1b8`);
87
33
  }
34
+ return rows;
88
35
  }
@@ -33,21 +33,24 @@ export function words(text) {
33
33
  return outw;
34
34
  }
35
35
 
36
+ // The design's welcome: logo │ version + tagline, then who you are and where you are.
36
37
  function header(ctx) {
37
38
  const cfg = readConfig();
38
- const { cols } = size();
39
39
  const top = tryGit(['rev-parse', '--show-toplevel']);
40
40
  const branch = top ? tryGit(['rev-parse', '--abbrev-ref', 'HEAD']) : '';
41
41
  const repo = top ? remoteFullName(tryGit(['remote', 'get-url', 'origin'])) || top.split('/').pop() : '';
42
- const who = ctx.api.signedIn
43
- ? `${c.b(cfg.user?.name || cfg.username)} ${c.m('·')} ${cfg.org ? `${cfg.org.name} ${c.m(`(${cfg.org.role})`)}` : c.w('no workspace · /workspace')} ${c.m(`· ${ctx.api.host}`)}`
44
- : `${c.w('Not signed in')} ${c.m('· /login to connect your gitroots account')}`;
42
+ write('\n');
45
43
  printWelcome(write, [
46
- `${c.s(`v${VERSION}`)} ${c.m('· code governance and agent sessions')}`,
47
- '',
48
- who,
49
- c.m(`${shortPath(process.cwd())}${repo ? ` · ${repo}${branch ? ` @ ${branch}` : ''}` : ''}`),
50
- ], cols);
44
+ `${c.s(`v${VERSION}`)} ${c.m('·')} ${c.s('code governance and agent sessions')}`,
45
+ c.g('Secure it to the root, scale with confidence.'),
46
+ ]);
47
+ write('\n');
48
+ if (ctx.api.signedIn) {
49
+ write(` ${c.g('✓')} Signed in as ${c.b(cfg.user?.name || cfg.username)} ${c.m(`${cfg.org ? `${cfg.org.name} · ${cfg.org.role}` : 'no workspace · /workspace'} · ${ctx.api.host}`)}\n`);
50
+ } else {
51
+ write(` ${c.w('◐')} Not signed in ${c.m('·')} ${c.g('/login')} ${c.m('connects your gitroots account')}\n`);
52
+ }
53
+ write(` ${c.m(`${shortPath(process.cwd())}${repo ? ` · ${repo}${branch ? ` @ ${branch}` : ''}` : ''}`)}\n`);
51
54
  }
52
55
 
53
56
  class Repl {
@@ -293,9 +296,8 @@ class Repl {
293
296
  }
294
297
 
295
298
  start() {
296
- write('\n');
297
299
  header(this.ctx);
298
- write(` ${c.m('Type')} ${c.g('/')} ${c.m('to pick a command, or')} ${c.g('/help')} ${c.m('for all of them.')}${this.ctx.api.signedIn ? '' : ` ${c.m('Start with')} ${c.g('/login')}${c.m('.')}`}\n\n`);
300
+ write(`\n ${c.m('Type')} ${c.g('/')} ${c.m('to pick a command, or')} ${c.g('/help')} ${c.m('for all of them.')}\n\n`);
299
301
  process.stdin.setRawMode(true);
300
302
  process.stdin.resume();
301
303
  process.stdin.on('data', this.onData);
@@ -1,56 +0,0 @@
1
- // Generated by scripts/make-logo.py from assets/logo.png. Do not edit by hand.
2
- // Pixel rows (two per terminal row), 6 hex digits per pixel, '------' = transparent.
3
- export const ART = {
4
- 14: { w: 91, px: [
5
- '586a26b3da44b3da44b3da44b3da44586a26------4c652197d03997d03997d03997d0394c6521------30582159b23859b23859b23859b238305821------164a2a20944d20944d20944d20944d164a2a------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
6
- 'b3da44b3da44b3da44b3da44b3da44b3da44------97d03997d03997d03997d03997d03997d039------59b23859b23859b23859b23859b23859b238------20944d20944d20944d20944d20944d20944d------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
7
- 'b3da44b3da44b3da44b3da44b3da44b3da44------97d03997d03997d03997d03997d03997d039------59b23859b23859b23859b23859b23859b238------20944d20944d20944d20944d20944d20944d------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
8
- 'b3da44b3da44b3da44b3da44b3da44b3da44------97d03997d03997d03997d03997d03997d039------59b23859b23859b23859b23859b23859b238------20944d20944d20944d20944d20944d20944d------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
9
- 'b3da44b3da44b3da44b3da44b3da44b3da44------97d03997d03997d03997d03997d03997d039------59b23859b23859b23859b23859b23859b238------20944d20944d20944d20944d20944d20944d------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
10
- '586a26b3da44b3da44b3da44b3da44586a26------4c652197d03997d03997d03997d0394c6521------30582159b23859b23859b23859b238305821------164a2a20944d20944d20944d20944d164a2a------------------------------------------------------------------------------------------------36383b------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
11
- '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------8d949de3edfc979da6------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
12
- '3f5f207ac1357ac1357ac1357ac1353f5f20------35591e64b53264b53264b53264b53235591e------17461e238b32238b32238b32238b3217461e------0b3c2407753e07753e07753e07753e0b3c24------------------------------------------------------------------------------------------898d97e3edfc9197a1------------acb4bfb3bac64d5054------------------------------------------------------------------------------------------------------------------------------------------------------------------------797d85b3bac67e848b------------------------------------------------------------',
13
- '7ac1357ac1357ac1357ac1357ac1357ac135------64b53264b53264b53264b53264b53264b532------238b32238b32238b32238b32238b32238b32------07753e07753e07753e07753e07753e07753e------------------------------------------------------------------------------------------------------------------------dbe5f3e3edfc5f6269------------------------------------------------------------------------------------------------------------------------------------------------------------------------989ea7e3edfc9fa6b0------------------------------------------------------------',
14
- '7ac1357ac1357ac1357ac1357ac1357ac135------64b53264b53264b53264b53264b53264b532------238b32238b32238b32238b32238b32238b32------07753e07753e07753e07753e07753e07753e------------------------------------3536399ba3adbec6d29fa6b0------969ca5a9b0bb4e5155------6e737aa9b0bb797e86------a9b0bbe0eaf9e3edfcbfc7d3a7adb9------60646aa9b0bb7e828a56595eb7bfcb80848d------------6c7077aeb5c0bec7d3a8b0b95e6167------------------------------848a92b7bfcbbcc4d1999fa93f4144------------9196a0ced7e5e3edfcd0dae7a9b0bb3e4043------------8d949db8c0ccbdc5d19ea5af484b4f------',
15
- '7ac1357ac1357ac1357ac1357ac1357ac135------64b53264b53264b53264b53264b53264b532------238b32238b32238b32238b32238b32238b32------07753e07753e07753e07753e07753e07753e------------------------------313335d9e3f1e3edfce3edfce3edfcc7d0ddd0d9e6e3edfc65696f------9399a3e3edfca1a8b3------e3edfce3edfce3edfce3edfce0e9f8------7f858de3edfcc1c9d6dfe9f7e3edfc999fa9------aab2bde3edfce3edfce3edfce3edfce3edfc8f959e------------------cfd8e6e3edfce3edfce3edfce3edfce0e9f855585d------c2cad7e3edfce3edfce3edfce3edfc4f5356------d6dfede3edfcd6dfedc9d2dfe3edfce1ebfa53575c',
16
- '7ac1357ac1357ac1357ac1357ac1357ac135------64b53264b53264b53264b53264b53264b532------238b32238b32238b32238b32238b32238b32------07753e07753e07753e07753e07753e07753e------------------------------999fa9e3edfcd4ddeb404246------8e949de3edfce3edfc65696f------9399a3e3edfca1a8b3------------dbe5f3e3edfc666a71------------7f858de3edfce3edfc8990983e404332333660646ae3edfce0e9f7515358------6a6e74e3edfce3edfc42454a------9ba1abe3edfcc7d0dd------------9ea4aee3edfcd4dcea------------9da3ade3edfca3aab5------------6f7379e3edfcd1dae7------------6f747aa1a8b25f6368',
17
- '3f5f207ac1357ac1357ac1357ac1353f5f20------35591e64b53264b53264b53264b53235591e------17461e238b32238b32238b32238b3217461e------0b3c2407753e07753e07753e07753e0b3c24------------------------------cfd8e5e3edfc82878f------------------dee8f6e3edfc65696f------9399a3e3edfca1a8b3------------dbe5f3e3edfc5f6269------------7f858de3edfcc7cedb------------------a2a9b3e3edfca5acb8------------------c2cbd8e3edfc848992------dae3f2e3edfc6c7077------------------e3edfce3edfc4a4d51------989ea7e3edfc9fa6b0------------61646ae3edfce1ebfa848a924c4e53------------------',
18
- '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------dee8f6e3edfc65696f------------------cbd4e2e3edfc65696f------9399a3e3edfca1a8b3------------dbe5f3e3edfc5f6269------------7f858de3edfcb4bdc9------------------b8c0cbe3edfc898f97------------------a5acb8e3edfc999fa9------e3edfce3edfc4f5256------------------dfe9f7e3edfc5f6368------989ea7e3edfc9fa6b0------------------a3aab5e3edfce3edfce3edfce1ebfab3bcc836383b',
19
- '15441d1d872f1d872f1d872f1d872f15441d------103c2312743d12743d12743d12743d103c23------0c36200967360967360967360967360c3620------0c2c1c09512e09512e09512e09512e0c2c1c------------------------------d2dbe9e3edfc7a8088------------------dbe5f4e3edfc65696f------9399a3e3edfca1a8b3------------dbe5f3e3edfc5f6269------------7f858de3edfcb4bdc9------------------abb2bde3edfc9aa0aa------------------b7bfcbe3edfc8c929b------e0e9f8e3edfc606369------------------e3edfce3edfc53565b------989ea7e3edfc9fa6b0------------------------31333564686e9399a2d7e2efe3edfcc0c8d4',
20
- '1d872f1d872f1d872f1d872f1d872f1d872f------12743d12743d12743d12743d12743d12743d------096736096736096736096736096736096736------09512e09512e09512e09512e09512e09512e------------------------------a2a8b3e3edfccdd6e4333437------80858de3edfce3edfc65696f------9399a3e3edfca1a8b3------------dae4f2e3edfc666a71------------7f858de3edfcb4bdc9------------------767b82e3edfcd6e1ee------------3c3e42e0eaf9e3edfc585c61------b0b8c3e3edfcb1b9c4------------777b83e3edfcdfe9f6------------979da6e3edfca5acb8------------585b619aa0aa7c818a------------70757ce3edfcd7e2ef',
21
- '1d872f1d872f1d872f1d872f1d872f1d872f------12743d12743d12743d12743d12743d12743d------096736096736096736096736096736096736------09512e09512e09512e09512e09512e09512e------------------------------383a3ddce6f4e3edfce3edfce1ebfac5cedad4ddeae3edfc65696f------9399a3e3edfca1a8b3------------bbc3d0e3edfcd9e3f0bfc7d4------7f858de3edfcb4bdc9------------------------cbd5e1e3edfcd7e1eeb3bac6dde6f4e3edfcb8c0cb------------434549e0e9f8e3edfcc9d2dfbac2cee3edfce3edfc7e848b------------7a7f86e3edfce1ebf9c2cad7484a4e585b60e3edfce3edfcabb3be999fa9d7e2efe3edfc939aa3',
22
- '1d872f1d872f1d872f1d872f1d872f1d872f------12743d12743d12743d12743d12743d12743d------096736096736096736096736096736096736------09512e09512e09512e09512e09512e09512e------------------------------------37393c979da6b4bdc9999fa8------cad3e0e3edfc65696f------878d96cfd8e6949aa4------------3c3e41c0c8d4e3edfcdce6f4------757a82cfd8e6a5acb8------------------------------a0a7b1dee7f5e3edfcd9e3f19198a1------------------------47494eb8c0cce1ebfae3edfccdd6e470747b------------------------a3aab5dfe9f7e1ebfa686c72------61656bc5cedae3edfce3edfcd1dbe7828790------',
23
- '1d872f1d872f1d872f1d872f1d872f1d872f------12743d12743d12743d12743d12743d12743d------096736096736096736096736096736096736------09512e09512e09512e09512e09512e09512e------------------------------------------------------------------d8e2f0e3edfc595d62------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
24
- '15441d1d872f1d872f1d872f1d872f15441d------103c2312743d12743d12743d12743d103c23------0c36200967360967360967360967360c3620------0c2c1c09512e09512e09512e09512e0c2c1c------------------------------73787fe3edfcd1dae773777e64686eacb4bfe3edfcd6e1ee------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
25
- '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------969ca5e0e9f8e3edfce3edfce3edfcc5cdda404346------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
26
- '0b2f1f0758330758330758330758330b2f1f------0c2d1a0a52290a52290a52290a52290c2d1a------0c241a0a3e280a3e280a3e280a3e280c241a------0c211a0a39290a39290a39290a39290c211a------------------------------------------------494c504f525635373a------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
27
- '075833075833075833075833075833075833------0a52290a52290a52290a52290a52290a5229------0a3e280a3e280a3e280a3e280a3e280a3e28------0a39290a39290a39290a39290a39290a3929------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
28
- '075833075833075833075833075833075833------0a52290a52290a52290a52290a52290a5229------0a3e280a3e280a3e280a3e280a3e280a3e28------0a39290a39290a39290a39290a39290a3929------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
29
- '075833075833075833075833075833075833------0a52290a52290a52290a52290a52290a5229------0a3e280a3e280a3e280a3e280a3e280a3e28------0a39290a39290a39290a39290a39290a3929------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
30
- '075833075833075833075833075833075833------0a52290a52290a52290a52290a52290a5229------0a3e280a3e280a3e280a3e280a3e280a3e28------0a39290a39290a39290a39290a39290a3929------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
31
- '0b2f1f0758330758330758330758330b2f1f------0c2d1a0a52290a52290a52290a52290c2d1a------0c241a0a3e280a3e280a3e280a3e280c241a------0c211a0a39290a39290a39290a39290c211a------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
32
- '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
33
- ] },
34
- 10: { w: 65, px: [
35
- 'b3da44b3da44b3da44b3da44------97d03997d03997d03997d039------59b23859b23859b23859b238------20944d20944d20944d20944d------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
36
- 'b3da44b3da44b3da44b3da44------97d03997d03997d03997d039------59b23859b23859b23859b238------20944d20944d20944d20944d------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
37
- 'b3da44b3da44b3da44b3da44------97d03997d03997d03997d039------59b23859b23859b23859b238------20944d20944d20944d20944d------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
38
- 'b3da44b3da44b3da44b3da44------97d03997d03997d03997d039------59b23859b23859b23859b238------20944d20944d20944d20944d------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
39
- '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------7d818ac2ccd9------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
40
- '7ac1357ac1357ac1357ac135------64b53264b53264b53264b532------238b32238b32238b32238b32------07753e07753e07753e07753e------------------------------------------------------------------5d6167969da5------434549d0d9e755585d------------------------------------------------------------------------------------------------------------------------d0d9e78f959e------------------------------------------',
41
- '7ac1357ac1357ac1357ac135------64b53264b53264b53264b532------238b32238b32238b32238b32------07753e07753e07753e07753e------------------------------4c4f537e858d4a4d514e515671767d------4c4f5471767d------90969fe3edfc9ba1ab424448383a3d71767d36383b7b8188------------55585d7f858d6b7076------------------------5d606680858d676c72------------64686ee3edfcbcc5d15d6166------------72777e7f858d53575c------',
42
- '7ac1357ac1357ac1357ac135------64b53264b53264b53264b532------238b32238b32238b32238b32------07753e07753e07753e07753e------------------------666a70e3edfccbd5e1c7cfdcc7d0dde3edfc------9399a3e3edfc------c1cad6e3edfcc6ceda65696f686d73e3edfcccd5e2cfd8e54243479aa0aae1ebfab4bdc9d7e2efcbd5e2------------adb4bfe0e9f8b3bac7dae4f3c1cad6------9da3ade3edfcd2dcea9298a1------d8e3f0c6ceda9ea5afe0e9f8838891',
43
- '7ac1357ac1357ac1357ac135------64b53264b53264b53264b532------238b32238b32238b32238b32------07753e07753e07753e07753e------------------------c7cedbd1dae7------------c5cddae3edfc------9399a3e3edfc------484b4fe3edfc5c6065------686d73e3edfc6e7379------383a3de3edfc8b9199------434649e3edfc7e838c4b4e52e3edfc767a82------515559e3edfc696d74------e3edfc9ba3ad------515358e3edfc828890------3a3c3f------',
44
- '------------------------------------------------------------------------------------------------------------------------------------------dfe9f7abb3be------------9aa0aae3edfc------9399a3e3edfc------484b4fe3edfc5c6065------686d73e3edfc404246------575b60e3edfc5b5f64------------e3edfc9da4af6a6e75e3edfc46484c------------e3edfc898d97------e3edfc9ba3ad------------a7adb9e1ebfae1ebfac2cad754585d',
45
- '1d872f1d872f1d872f1d872f------12743d12743d12743d12743d------096736096736096736096736------09512e09512e09512e09512e------------------------cad3e0ccd5e3------------bfc8d4e3edfc------9399a3e3edfc------484b4fe3edfc5c6065------686d73e3edfc404246------434449e3edfc7a8088------333637e3edfc888d9755585de3edfc656a70------424447e3edfc73777f------e3edfc9ba3ad------------404246------4e5156cbd3e1d6deed',
46
- '1d872f1d872f1d872f1d872f------12743d12743d12743d12743d------096736096736096736096736------09512e09512e09512e09512e------------------------6c7278e3edfcc5cedac0c8d5c8d1dee3edfc------9399a3e3edfc------35373ae3edfcb9c1cd575b60686d73e3edfc404246------------b4bdc9dce6f490969fc6cedbdae3f2323336------c3cdd9d6e1ee8e949dcbd3e1d2dbe9------------d1dbe7d1dbe87b80884a4d51e1ebfaa9b1bc7d828bd6dfedb0b8c3',
47
- '1d872f1d872f1d872f1d872f------12743d12743d12743d12743d------096736096736096736096736------09512e09512e09512e09512e------------------------------4a4d52797e8547494d999fa9e1ebfa------5e61688d939c------------64686e9ea5af64686e44474a8d939c------------------------7a8088a5acb89197a0353639------------------838890a5aeb88d939c------------------40444699a0a88b9199------4d505599a1a9a4acb77b8088------',
48
- '1d872f1d872f1d872f1d872f------12743d12743d12743d12743d------096736096736096736096736------09512e09512e09512e09512e------------------------62666dabb3be484b4f494b4fcdd6e4bbc3cf------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
49
- '------------------------------------------------------------------------------------------------------------------------------------------------abb3bedfe9f6dfe9f6adb5c0303134------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
50
- '075833075833075833075833------0a52290a52290a52290a5229------0a3e280a3e280a3e280a3e28------0a39290a39290a39290a3929------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
51
- '075833075833075833075833------0a52290a52290a52290a5229------0a3e280a3e280a3e280a3e28------0a39290a39290a39290a3929------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
52
- '075833075833075833075833------0a52290a52290a52290a5229------0a3e280a3e280a3e280a3e28------0a39290a39290a39290a3929------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
53
- '075833075833075833075833------0a52290a52290a52290a5229------0a3e280a3e280a3e280a3e28------0a39290a39290a39290a3929------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
54
- '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------',
55
- ] },
56
- };