From d06bd61e5cefad89f979462ff90dc6427fbb8154 Mon Sep 17 00:00:00 2001 From: Skies912 Date: Tue, 21 Jul 2026 08:51:21 -0400 Subject: [PATCH] TableView: support JSON-declarable static rows via a "cells" array Tables with a fixed, known-in-advance shape (columns + per-cell views) can now be authored entirely in JSON instead of requiring a dataSource/delegate, by constructing TableRowView/TableCellViews directly and appending them to rows/contentView. Columns also accept a bare identifier String, not just a {"identifier": ...} Dictionary. TableRowView gains two behaviors needed by that JSON path and by C-built tables alike: - layoutSubviews stretches the last cell's content to fill whatever width remains after the other (typically fixed-width) cells -- StackView's Fill distribution alone can't express "one fixed column, one flexible column". - A selected row's background nudges its own unselected color +25 per RGB (and alpha) channel instead of hard-coding an unrelated color, correctly handling this framework's "transparent" being white-at-alpha-0 rather than black-transparent. TableCellView now reports its actual content size (Contain) so a row's height accounts for cells taller than a single line of text. --- Assets/stylesheet.css | 10 +- Assets/stylesheet.css.h | 903 ++++++++++++++----------- Sources/ObjectivelyMVC/TableCellView.c | 5 + Sources/ObjectivelyMVC/TableRowView.c | 108 +++ Sources/ObjectivelyMVC/TableRowView.h | 8 + Sources/ObjectivelyMVC/TableView.c | 139 +++- 6 files changed, 766 insertions(+), 407 deletions(-) diff --git a/Assets/stylesheet.css b/Assets/stylesheet.css index 96e1045c..75c51021 100644 --- a/Assets/stylesheet.css +++ b/Assets/stylesheet.css @@ -271,8 +271,16 @@ TableRowView:nth-child(even) TableCellView { background-color: #ffffff11; } +/* Sentinel, not a real color: `View::applyTheme` only calls `applyStyle` when the computed CSS + attribute set actually changes (an equality check, for perf) -- without SOME attribute here + that differs between selected/unselected, toggling :selected changes nothing CSS can see, and + TableRowView's computed default (base color + 25 per RGB channel, see TableRowView.c) never + gets a chance to run. `none` is a real, explicit inlet value that `bindColor` deliberately + leaves untouched (see its "none" case), so this is purely a change-detection trigger; it does + not itself paint anything. A real `TableRowView:selected { background-color: X }` rule in an + app's own stylesheet still fully overrides the computed default, same as before. */ TableRowView:selected { - background-color: darkgray; + background-color: none; } TableView > ScrollView > .contentView { diff --git a/Assets/stylesheet.css.h b/Assets/stylesheet.css.h index 1202b8d9..705a30f5 100644 --- a/Assets/stylesheet.css.h +++ b/Assets/stylesheet.css.h @@ -1,434 +1,527 @@ unsigned char stylesheet_css[] = { - 0x2a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, - 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3b, - 0x0a, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x3a, 0x20, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x42, - 0x6f, 0x78, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, - 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, - 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x3b, 0x0a, 0x20, - 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, - 0x72, 0x3a, 0x20, 0x23, 0x64, 0x65, 0x64, 0x65, 0x64, 0x65, 0x61, 0x61, - 0x3b, 0x0a, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x70, - 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x31, 0x30, 0x20, 0x31, - 0x30, 0x20, 0x31, 0x30, 0x20, 0x31, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, + 0x2a, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, + 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, + 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x30, 0x3b, 0x0d, 0x0a, 0x7d, + 0x0d, 0x0a, 0x0d, 0x0a, 0x42, 0x6f, 0x78, 0x20, 0x7b, 0x0d, 0x0a, 0x20, + 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, + 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, + 0x65, 0x72, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x64, + 0x65, 0x64, 0x65, 0x64, 0x65, 0x61, 0x61, 0x3b, 0x0d, 0x0a, 0x20, 0x20, + 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, + 0x3a, 0x20, 0x31, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, + 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x31, 0x30, 0x20, 0x31, 0x30, 0x20, 0x31, + 0x30, 0x20, 0x31, 0x30, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x42, 0x6f, 0x78, 0x20, 0x3e, 0x20, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, - 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x38, - 0x38, 0x38, 0x38, 0x38, 0x38, 0x3b, 0x0a, 0x20, 0x20, 0x70, 0x61, 0x64, - 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x30, 0x20, 0x38, 0x20, 0x30, 0x20, - 0x38, 0x3b, 0x0a, 0x20, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x3a, 0x20, 0x32, - 0x30, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x42, 0x6f, 0x78, 0x20, 0x3e, 0x20, - 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x20, 0x3e, 0x20, 0x54, 0x65, 0x78, 0x74, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, - 0x7a, 0x65, 0x3a, 0x20, 0x31, 0x32, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x42, - 0x6f, 0x78, 0x20, 0x3e, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x75, - 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, - 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x20, 0x7c, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3b, 0x0a, 0x20, 0x20, + 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, + 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, + 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x70, + 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x30, 0x20, 0x38, 0x20, + 0x30, 0x20, 0x38, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x6c, 0x65, 0x66, 0x74, + 0x3a, 0x20, 0x32, 0x30, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, + 0x42, 0x6f, 0x78, 0x20, 0x3e, 0x20, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x20, + 0x3e, 0x20, 0x54, 0x65, 0x78, 0x74, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, + 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x31, + 0x32, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x42, 0x6f, 0x78, + 0x20, 0x3e, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x56, + 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, + 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, + 0x73, 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, + 0x7c, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x2d, 0x74, 0x6f, 0x70, 0x3a, - 0x20, 0x34, 0x3b, 0x0a, 0x20, 0x20, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, - 0x67, 0x3a, 0x20, 0x34, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x42, 0x75, 0x74, - 0x74, 0x6f, 0x6e, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, + 0x20, 0x34, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x73, 0x70, 0x61, 0x63, 0x69, + 0x6e, 0x67, 0x3a, 0x20, 0x34, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, + 0x0a, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x20, 0x7b, 0x0d, 0x0a, 0x20, + 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, + 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, + 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, + 0x3a, 0x20, 0x23, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x32, 0x32, 0x3b, + 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x63, + 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x67, 0x68, 0x6f, 0x73, 0x74, 0x77, + 0x68, 0x69, 0x74, 0x65, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x65, 0x76, + 0x65, 0x6c, 0x3a, 0x20, 0x6f, 0x75, 0x74, 0x73, 0x65, 0x74, 0x3b, 0x0d, + 0x0a, 0x20, 0x20, 0x6d, 0x69, 0x6e, 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, + 0x3a, 0x20, 0x31, 0x30, 0x30, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x70, 0x61, + 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x38, 0x20, 0x38, 0x20, 0x38, + 0x20, 0x38, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x42, 0x75, + 0x74, 0x74, 0x6f, 0x6e, 0x3a, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, + 0x68, 0x74, 0x65, 0x64, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x65, + 0x76, 0x65, 0x6c, 0x3a, 0x20, 0x69, 0x6e, 0x73, 0x65, 0x74, 0x3b, 0x0d, + 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, + 0x20, 0x3e, 0x20, 0x2a, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x6d, 0x69, 0x64, + 0x64, 0x6c, 0x65, 0x2d, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0x0d, + 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x62, + 0x6f, 0x78, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, - 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x3b, 0x0a, - 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x38, 0x38, 0x38, - 0x38, 0x38, 0x38, 0x32, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x62, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x67, - 0x68, 0x6f, 0x73, 0x74, 0x77, 0x68, 0x69, 0x74, 0x65, 0x3b, 0x0a, 0x20, - 0x20, 0x62, 0x65, 0x76, 0x65, 0x6c, 0x3a, 0x20, 0x6f, 0x75, 0x74, 0x73, - 0x65, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x6d, 0x69, 0x6e, 0x2d, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x30, 0x30, 0x3b, 0x0a, 0x20, 0x20, - 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x38, 0x20, 0x38, - 0x20, 0x38, 0x20, 0x38, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x42, 0x75, 0x74, - 0x74, 0x6f, 0x6e, 0x3a, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, - 0x74, 0x65, 0x64, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x62, 0x65, 0x76, 0x65, - 0x6c, 0x3a, 0x20, 0x69, 0x6e, 0x73, 0x65, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, - 0x0a, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x20, 0x3e, 0x20, 0x2a, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x3a, 0x20, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x2d, 0x63, 0x65, - 0x6e, 0x74, 0x65, 0x72, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x62, 0x6f, 0x78, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x75, - 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, - 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x62, 0x6f, - 0x78, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x56, 0x69, 0x65, 0x77, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x3a, 0x20, - 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x77, 0x69, 0x64, 0x74, - 0x68, 0x3a, 0x20, 0x31, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x3a, 0x20, 0x31, 0x32, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x62, 0x6f, 0x78, 0x3a, 0x73, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x56, - 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x68, 0x69, 0x64, 0x64, - 0x65, 0x6e, 0x3a, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x7d, - 0x0a, 0x0a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x62, 0x6f, 0x78, 0x20, 0x3e, - 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x7b, 0x0a, 0x20, + 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x3b, 0x0d, + 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x62, + 0x6f, 0x78, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x56, 0x69, 0x65, 0x77, + 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, + 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x32, 0x3b, 0x0d, 0x0a, 0x20, + 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x31, 0x32, 0x3b, + 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x62, 0x6f, 0x78, 0x3a, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, + 0x0d, 0x0a, 0x20, 0x20, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x3a, 0x20, + 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, + 0x0a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x62, 0x6f, 0x78, 0x20, 0x3e, 0x20, + 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, - 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, - 0x20, 0x23, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x36, 0x36, 0x3b, 0x0a, - 0x20, 0x20, 0x62, 0x65, 0x76, 0x65, 0x6c, 0x3a, 0x20, 0x69, 0x6e, 0x73, - 0x65, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x6d, 0x69, 0x6e, 0x2d, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x38, 0x3b, 0x0a, 0x20, 0x20, 0x6d, - 0x69, 0x6e, 0x2d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x31, - 0x38, 0x3b, 0x0a, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, - 0x3a, 0x20, 0x34, 0x20, 0x34, 0x20, 0x34, 0x20, 0x34, 0x3b, 0x0a, 0x7d, - 0x0a, 0x0a, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x74, 0x65, 0x6d, 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, - 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x32, 0x32, 0x32, 0x32, - 0x32, 0x32, 0x36, 0x36, 0x3b, 0x0a, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x61, 0x61, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, - 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, - 0x65, 0x6d, 0x56, 0x69, 0x65, 0x77, 0x20, 0x3e, 0x20, 0x2e, 0x73, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x76, 0x65, 0x72, 0x6c, - 0x61, 0x79, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, - 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, - 0x20, 0x23, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x32, 0x32, 0x3b, 0x0a, - 0x20, 0x20, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x3a, 0x20, 0x74, 0x72, - 0x75, 0x65, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x43, 0x6f, 0x6c, 0x6c, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x56, 0x69, 0x65, - 0x77, 0x3a, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x3e, - 0x20, 0x2e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, - 0x76, 0x65, 0x72, 0x6c, 0x61, 0x79, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x68, - 0x69, 0x64, 0x64, 0x65, 0x6e, 0x3a, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, - 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, - 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x32, 0x32, 0x32, 0x32, 0x32, - 0x32, 0x36, 0x36, 0x3b, 0x0a, 0x20, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x2d, + 0x61, 0x69, 0x6e, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, + 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, + 0x3a, 0x20, 0x23, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x36, 0x36, 0x3b, + 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x65, 0x76, 0x65, 0x6c, 0x3a, 0x20, 0x69, + 0x6e, 0x73, 0x65, 0x74, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x6d, 0x69, 0x6e, + 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x38, 0x3b, 0x0d, + 0x0a, 0x20, 0x20, 0x6d, 0x69, 0x6e, 0x2d, 0x68, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x3a, 0x20, 0x31, 0x38, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x70, 0x61, + 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x34, 0x20, 0x34, 0x20, 0x34, + 0x20, 0x34, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x43, 0x6f, + 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d, + 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x61, + 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, + 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x36, + 0x36, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, + 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x39, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x61, 0x61, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, + 0x0a, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x74, 0x65, 0x6d, 0x56, 0x69, 0x65, 0x77, 0x20, 0x3e, 0x20, 0x2e, 0x73, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x76, 0x65, 0x72, + 0x6c, 0x61, 0x79, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, + 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x3a, 0x20, 0x23, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x32, 0x32, + 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x3a, + 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, + 0x0a, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x74, 0x65, 0x6d, 0x56, 0x69, 0x65, 0x77, 0x3a, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x20, 0x3e, 0x20, 0x2e, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x79, + 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, + 0x3a, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, + 0x0a, 0x0d, 0x0a, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x62, + 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, + 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, + 0x36, 0x36, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x36, 0x34, 0x20, 0x36, 0x34, 0x3b, - 0x0a, 0x20, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x2d, 0x73, 0x70, 0x61, 0x63, - 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x31, 0x30, 0x20, 0x31, 0x30, 0x3b, 0x0a, - 0x7d, 0x0a, 0x0a, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x56, 0x69, 0x65, 0x77, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x61, - 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, - 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x20, 0x7c, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3b, 0x0a, 0x20, - 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x31, 0x30, - 0x20, 0x31, 0x30, 0x20, 0x31, 0x30, 0x20, 0x31, 0x30, 0x3b, 0x0a, 0x7d, - 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x6d, 0x69, 0x6e, 0x2d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x3a, 0x20, 0x33, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, - 0x65, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x3a, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x20, 0x54, - 0x65, 0x78, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, - 0x72, 0x3a, 0x20, 0x67, 0x72, 0x65, 0x79, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, - 0x48, 0x53, 0x56, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x50, 0x69, 0x63, 0x6b, - 0x65, 0x72, 0x2c, 0x0a, 0x48, 0x75, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, - 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x2c, 0x0a, 0x52, 0x47, 0x42, 0x43, - 0x6f, 0x6c, 0x6f, 0x72, 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, - 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x48, 0x53, + 0x0d, 0x0a, 0x20, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x2d, 0x73, 0x70, 0x61, + 0x63, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x31, 0x30, 0x20, 0x31, 0x30, 0x3b, + 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x43, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x20, 0x2e, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, + 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, + 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x7c, 0x20, 0x77, 0x69, 0x64, + 0x74, 0x68, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, + 0x6e, 0x67, 0x3a, 0x20, 0x31, 0x30, 0x20, 0x31, 0x30, 0x20, 0x31, 0x30, + 0x20, 0x31, 0x30, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x43, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, + 0x6d, 0x69, 0x6e, 0x2d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, + 0x33, 0x32, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, + 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x74, + 0x72, 0x6f, 0x6c, 0x3a, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x20, 0x54, 0x65, 0x78, 0x74, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x63, + 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x67, 0x72, 0x65, 0x79, 0x3b, 0x0d, + 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x48, 0x53, 0x56, 0x43, 0x6f, 0x6c, + 0x6f, 0x72, 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x2c, 0x0d, 0x0a, 0x48, + 0x75, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x50, 0x69, 0x63, 0x6b, 0x65, + 0x72, 0x2c, 0x0d, 0x0a, 0x52, 0x47, 0x42, 0x43, 0x6f, 0x6c, 0x6f, 0x72, + 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, + 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, + 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x48, 0x53, 0x56, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x20, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x56, 0x69, 0x65, 0x77, 0x2c, - 0x0a, 0x48, 0x75, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x50, 0x69, 0x63, - 0x6b, 0x65, 0x72, 0x20, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x56, 0x69, - 0x65, 0x77, 0x2c, 0x0a, 0x52, 0x47, 0x42, 0x43, 0x6f, 0x6c, 0x6f, 0x72, - 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x20, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, - 0x72, 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x75, + 0x0d, 0x0a, 0x48, 0x75, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x50, 0x69, + 0x63, 0x6b, 0x65, 0x72, 0x20, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x56, + 0x69, 0x65, 0x77, 0x2c, 0x0d, 0x0a, 0x52, 0x47, 0x42, 0x43, 0x6f, 0x6c, + 0x6f, 0x72, 0x50, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x20, 0x2e, 0x63, 0x6f, + 0x6c, 0x6f, 0x72, 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0d, 0x0a, 0x20, + 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, + 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, + 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, + 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x68, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x3a, 0x20, 0x38, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, + 0x0d, 0x0a, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0d, 0x0a, 0x20, + 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, + 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x4c, + 0x61, 0x62, 0x65, 0x6c, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, - 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3b, 0x0a, - 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x6e, 0x6f, 0x6e, 0x65, - 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, - 0x38, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, - 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, + 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x4c, 0x61, 0x62, 0x65, + 0x6c, 0x20, 0x3e, 0x20, 0x54, 0x65, 0x78, 0x74, 0x20, 0x7b, 0x0d, 0x0a, + 0x20, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x3a, + 0x20, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x2d, 0x6c, 0x65, 0x66, 0x74, + 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, + 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, + 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x7c, + 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x6d, + 0x69, 0x6e, 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x30, + 0x30, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, + 0x67, 0x3a, 0x20, 0x32, 0x20, 0x32, 0x20, 0x32, 0x20, 0x32, 0x3b, 0x0d, + 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x3e, 0x20, 0x54, 0x65, 0x78, 0x74, 0x20, 0x7b, 0x0d, 0x0a, 0x20, + 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x20, + 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x2d, 0x6c, 0x65, 0x66, 0x74, 0x3b, + 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x50, 0x61, 0x67, 0x65, 0x56, + 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x3b, - 0x0a, 0x7d, 0x0a, 0x0a, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x20, 0x3e, 0x20, - 0x54, 0x65, 0x78, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x6c, 0x69, - 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x6d, 0x69, 0x64, 0x64, - 0x6c, 0x65, 0x2d, 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x61, - 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, - 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x20, 0x7c, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3b, 0x0a, 0x20, - 0x20, 0x6d, 0x69, 0x6e, 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, - 0x31, 0x30, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, - 0x6e, 0x67, 0x3a, 0x20, 0x32, 0x20, 0x32, 0x20, 0x32, 0x20, 0x32, 0x3b, - 0x0a, 0x7d, 0x0a, 0x0a, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3e, - 0x20, 0x54, 0x65, 0x78, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x6c, + 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x63, + 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x38, 0x38, 0x38, 0x38, 0x38, + 0x38, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, + 0x67, 0x3a, 0x20, 0x31, 0x32, 0x20, 0x31, 0x32, 0x20, 0x31, 0x32, 0x20, + 0x31, 0x32, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x50, 0x61, + 0x6e, 0x65, 0x6c, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, + 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, + 0x73, 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x3b, + 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, + 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x34, + 0x34, 0x34, 0x34, 0x34, 0x34, 0x64, 0x64, 0x3b, 0x0d, 0x0a, 0x20, 0x20, + 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, + 0x3a, 0x20, 0x23, 0x64, 0x65, 0x64, 0x65, 0x64, 0x65, 0x3b, 0x0d, 0x0a, + 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x77, 0x69, 0x64, + 0x74, 0x68, 0x3a, 0x20, 0x31, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x70, 0x61, + 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x31, 0x32, 0x20, 0x31, 0x32, + 0x20, 0x31, 0x32, 0x20, 0x31, 0x32, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, + 0x0d, 0x0a, 0x50, 0x61, 0x6e, 0x65, 0x6c, 0x20, 0x3e, 0x20, 0x53, 0x74, + 0x61, 0x63, 0x6b, 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0d, 0x0a, 0x20, + 0x20, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x31, 0x32, + 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x50, 0x61, 0x6e, 0x65, + 0x6c, 0x20, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x79, + 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x6d, 0x69, 0x64, - 0x64, 0x6c, 0x65, 0x2d, 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, - 0x0a, 0x50, 0x61, 0x67, 0x65, 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0a, + 0x64, 0x6c, 0x65, 0x2d, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x38, - 0x38, 0x38, 0x38, 0x38, 0x38, 0x3b, 0x0a, 0x20, 0x20, 0x70, 0x61, 0x64, - 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x31, 0x32, 0x20, 0x31, 0x32, 0x20, - 0x31, 0x32, 0x20, 0x31, 0x32, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x50, 0x61, - 0x6e, 0x65, 0x6c, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, - 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, - 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x3b, 0x0a, - 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x34, 0x34, 0x34, - 0x34, 0x34, 0x34, 0x64, 0x64, 0x3b, 0x0a, 0x20, 0x20, 0x62, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, - 0x64, 0x65, 0x64, 0x65, 0x64, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x62, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, - 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, - 0x3a, 0x20, 0x31, 0x32, 0x20, 0x31, 0x32, 0x20, 0x31, 0x32, 0x20, 0x31, - 0x32, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x50, 0x61, 0x6e, 0x65, 0x6c, 0x20, - 0x3e, 0x20, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x56, 0x69, 0x65, 0x77, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x3a, - 0x20, 0x31, 0x32, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x50, 0x61, 0x6e, 0x65, - 0x6c, 0x20, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x79, - 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x6c, 0x69, - 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x6d, 0x69, 0x64, 0x64, - 0x6c, 0x65, 0x2d, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3b, 0x0a, 0x20, 0x20, - 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, - 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x61, 0x78, 0x69, 0x73, 0x3a, 0x20, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x3b, 0x0a, - 0x7d, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x42, - 0x61, 0x72, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, - 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, - 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x7c, 0x20, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x50, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x42, 0x61, 0x72, 0x20, 0x3e, 0x20, - 0x2e, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, - 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x66, - 0x69, 0x6c, 0x6c, 0x3b, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, - 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, - 0x20, 0x73, 0x69, 0x6c, 0x76, 0x65, 0x72, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, - 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x42, 0x61, 0x72, 0x20, - 0x3e, 0x20, 0x2e, 0x66, 0x6f, 0x72, 0x65, 0x67, 0x72, 0x6f, 0x75, 0x6e, - 0x64, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, - 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, - 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x62, - 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, - 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x64, 0x61, 0x72, 0x6b, 0x67, 0x72, 0x61, - 0x79, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x42, 0x61, 0x72, 0x20, 0x3e, 0x20, 0x54, 0x65, 0x78, 0x74, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x3a, 0x20, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x2d, 0x63, - 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x53, 0x63, - 0x72, 0x6f, 0x6c, 0x6c, 0x42, 0x61, 0x72, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x32, 0x3b, 0x0a, 0x20, - 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, - 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x32, 0x32, 0x32, 0x32, - 0x32, 0x32, 0x63, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x53, 0x63, 0x72, - 0x6f, 0x6c, 0x6c, 0x42, 0x61, 0x72, 0x20, 0x3e, 0x20, 0x2e, 0x68, 0x61, - 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, - 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, - 0x72, 0x3a, 0x20, 0x23, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x63, 0x30, - 0x3b, 0x0a, 0x20, 0x20, 0x6d, 0x69, 0x6e, 0x2d, 0x68, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x3a, 0x20, 0x31, 0x36, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x53, - 0x63, 0x72, 0x6f, 0x6c, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, - 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x66, 0x69, 0x6c, - 0x6c, 0x3b, 0x0a, 0x20, 0x20, 0x63, 0x6c, 0x69, 0x70, 0x73, 0x2d, 0x73, - 0x75, 0x62, 0x76, 0x69, 0x65, 0x77, 0x73, 0x3a, 0x20, 0x74, 0x72, 0x75, - 0x65, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x53, 0x63, 0x72, 0x6f, 0x6c, 0x6c, - 0x56, 0x69, 0x65, 0x77, 0x20, 0x3e, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, - 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x66, 0x69, 0x74, 0x3b, 0x0a, - 0x7d, 0x0a, 0x0a, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x7b, 0x0a, + 0x74, 0x61, 0x69, 0x6e, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x78, 0x69, + 0x73, 0x3a, 0x20, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, + 0x6c, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x50, 0x72, 0x6f, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x42, 0x61, 0x72, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, - 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, - 0x3a, 0x20, 0x23, 0x64, 0x65, 0x64, 0x65, 0x64, 0x65, 0x31, 0x30, 0x3b, - 0x0a, 0x20, 0x20, 0x62, 0x65, 0x76, 0x65, 0x6c, 0x3a, 0x20, 0x6f, 0x75, - 0x74, 0x73, 0x65, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, - 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x34, 0x20, 0x34, 0x20, 0x34, 0x20, 0x34, - 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, - 0x3e, 0x20, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x56, 0x69, 0x65, 0x77, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, - 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x61, 0x6c, - 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x6d, 0x69, 0x64, - 0x64, 0x6c, 0x65, 0x2d, 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, - 0x0a, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, - 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, - 0x20, 0x31, 0x34, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x53, 0x6c, 0x69, - 0x64, 0x65, 0x72, 0x20, 0x3e, 0x20, 0x2e, 0x62, 0x61, 0x72, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x3a, 0x20, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x2d, 0x6c, 0x65, 0x66, - 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, - 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, - 0x66, 0x69, 0x6c, 0x6c, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x53, 0x6c, 0x69, - 0x64, 0x65, 0x72, 0x20, 0x3e, 0x20, 0x2e, 0x62, 0x61, 0x72, 0x20, 0x3e, - 0x20, 0x2e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x20, - 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x62, 0x61, - 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, - 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x66, - 0x66, 0x3b, 0x0a, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, - 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, - 0x3a, 0x20, 0x23, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x66, 0x66, 0x3b, - 0x0a, 0x20, 0x20, 0x6d, 0x69, 0x6e, 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, - 0x3a, 0x20, 0x38, 0x3b, 0x0a, 0x20, 0x20, 0x6d, 0x69, 0x6e, 0x2d, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x31, 0x36, 0x3b, 0x0a, 0x7d, - 0x0a, 0x0a, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x20, 0x3e, 0x20, 0x2e, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x6c, - 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x6d, 0x69, 0x64, - 0x64, 0x6c, 0x65, 0x2d, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3b, 0x0a, 0x20, - 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x30, 0x20, - 0x30, 0x20, 0x30, 0x20, 0x31, 0x38, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x53, - 0x6c, 0x69, 0x64, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x56, 0x69, 0x65, 0x77, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, - 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, - 0x66, 0x69, 0x6c, 0x6c, 0x3b, 0x0a, 0x20, 0x20, 0x63, 0x6c, 0x69, 0x70, - 0x73, 0x2d, 0x73, 0x75, 0x62, 0x76, 0x69, 0x65, 0x77, 0x73, 0x3a, 0x20, - 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x53, 0x6c, 0x69, - 0x64, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x56, 0x69, 0x65, 0x77, 0x20, 0x3e, - 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, + 0x74, 0x61, 0x69, 0x6e, 0x20, 0x7c, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, + 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x50, 0x72, 0x6f, 0x67, + 0x72, 0x65, 0x73, 0x73, 0x42, 0x61, 0x72, 0x20, 0x3e, 0x20, 0x2e, 0x62, + 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x66, 0x69, - 0x6c, 0x6c, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x63, 0x6b, - 0x56, 0x69, 0x65, 0x77, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x73, 0x70, 0x61, 0x63, 0x69, - 0x6e, 0x67, 0x3a, 0x20, 0x31, 0x32, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x56, 0x69, 0x65, 0x77, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, - 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x70, - 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x30, 0x20, 0x32, 0x20, - 0x30, 0x20, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x6d, 0x69, 0x6e, 0x2d, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x38, 0x30, 0x3b, 0x0a, 0x20, 0x20, - 0x6d, 0x69, 0x6e, 0x2d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, - 0x32, 0x34, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x43, 0x65, 0x6c, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x20, 0x3e, 0x20, 0x54, - 0x65, 0x78, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x6c, 0x69, 0x67, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x6d, 0x69, 0x64, 0x64, 0x6c, - 0x65, 0x2d, 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x56, 0x69, - 0x65, 0x77, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, + 0x6c, 0x6c, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, - 0x20, 0x23, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x32, 0x32, 0x3b, 0x0a, - 0x7d, 0x0a, 0x0a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x56, - 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, - 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, - 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x7c, - 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3b, 0x0a, 0x20, 0x20, 0x61, 0x78, - 0x69, 0x73, 0x3a, 0x20, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, - 0x61, 0x6c, 0x3b, 0x0a, 0x20, 0x20, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x66, 0x69, 0x6c, 0x6c, - 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, - 0x77, 0x56, 0x69, 0x65, 0x77, 0x3a, 0x6e, 0x74, 0x68, 0x2d, 0x63, 0x68, - 0x69, 0x6c, 0x64, 0x28, 0x65, 0x76, 0x65, 0x6e, 0x29, 0x20, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, - 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x66, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x31, 0x31, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x56, 0x69, 0x65, 0x77, - 0x3a, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x64, 0x61, 0x72, 0x6b, - 0x67, 0x72, 0x61, 0x79, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x56, 0x69, 0x65, 0x77, 0x20, 0x3e, 0x20, 0x53, 0x63, 0x72, + 0x20, 0x73, 0x69, 0x6c, 0x76, 0x65, 0x72, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, + 0x0a, 0x0d, 0x0a, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x42, + 0x61, 0x72, 0x20, 0x3e, 0x20, 0x2e, 0x66, 0x6f, 0x72, 0x65, 0x67, 0x72, + 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x75, + 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, + 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3b, + 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, + 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x64, 0x61, + 0x72, 0x6b, 0x67, 0x72, 0x61, 0x79, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, + 0x0d, 0x0a, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x42, 0x61, + 0x72, 0x20, 0x3e, 0x20, 0x54, 0x65, 0x78, 0x74, 0x20, 0x7b, 0x0d, 0x0a, + 0x20, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x3a, + 0x20, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x2d, 0x63, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x53, 0x63, + 0x72, 0x6f, 0x6c, 0x6c, 0x42, 0x61, 0x72, 0x20, 0x7b, 0x0d, 0x0a, 0x20, + 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x32, 0x3b, 0x0d, + 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, + 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x63, 0x30, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, + 0x0d, 0x0a, 0x53, 0x63, 0x72, 0x6f, 0x6c, 0x6c, 0x42, 0x61, 0x72, 0x20, + 0x3e, 0x20, 0x2e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x7b, 0x0d, + 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, + 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x38, 0x38, + 0x38, 0x38, 0x38, 0x38, 0x63, 0x30, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x6d, + 0x69, 0x6e, 0x2d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x31, + 0x36, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x53, 0x63, 0x72, + 0x6f, 0x6c, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0d, 0x0a, 0x20, + 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, + 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x66, 0x69, 0x6c, 0x6c, + 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x63, 0x6c, 0x69, 0x70, 0x73, 0x2d, 0x73, + 0x75, 0x62, 0x76, 0x69, 0x65, 0x77, 0x73, 0x3a, 0x20, 0x74, 0x72, 0x75, + 0x65, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x53, 0x63, 0x72, 0x6f, 0x6c, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x20, 0x3e, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, - 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x7c, 0x20, 0x77, 0x69, 0x64, 0x74, - 0x68, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x54, 0x61, 0x62, 0x56, 0x69, 0x65, - 0x77, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, - 0x67, 0x3a, 0x20, 0x34, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x54, 0x61, 0x62, - 0x56, 0x69, 0x65, 0x77, 0x20, 0x3e, 0x20, 0x2e, 0x74, 0x61, 0x62, 0x50, - 0x61, 0x67, 0x65, 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, - 0x3a, 0x20, 0x73, 0x69, 0x6c, 0x76, 0x65, 0x72, 0x3b, 0x0a, 0x20, 0x20, - 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, - 0x3a, 0x20, 0x31, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x54, 0x61, 0x62, 0x56, - 0x69, 0x65, 0x77, 0x20, 0x3e, 0x20, 0x2e, 0x74, 0x61, 0x62, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, - 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x7c, 0x20, 0x77, 0x69, 0x64, - 0x74, 0x68, 0x3b, 0x0a, 0x20, 0x20, 0x61, 0x78, 0x69, 0x73, 0x3a, 0x20, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x3b, 0x0a, - 0x20, 0x20, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x3a, 0x20, 0x66, 0x69, 0x6c, 0x6c, 0x2d, 0x65, 0x71, 0x75, - 0x61, 0x6c, 0x6c, 0x79, 0x3b, 0x0a, 0x20, 0x20, 0x73, 0x70, 0x61, 0x63, - 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x34, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x54, - 0x61, 0x62, 0x56, 0x69, 0x65, 0x77, 0x20, 0x3e, 0x20, 0x2e, 0x74, 0x61, - 0x62, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, - 0x65, 0x77, 0x20, 0x3e, 0x20, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, - 0x32, 0x20, 0x32, 0x20, 0x32, 0x20, 0x32, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, - 0x54, 0x61, 0x62, 0x56, 0x69, 0x65, 0x77, 0x20, 0x3e, 0x20, 0x2e, 0x74, - 0x61, 0x62, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, - 0x69, 0x65, 0x77, 0x20, 0x3e, 0x20, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x2e, - 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, - 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x64, 0x61, 0x72, 0x6b, 0x67, - 0x72, 0x61, 0x79, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x54, 0x61, 0x62, 0x56, - 0x69, 0x65, 0x77, 0x20, 0x3e, 0x20, 0x2e, 0x74, 0x61, 0x62, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x20, - 0x3e, 0x20, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x2e, 0x64, 0x69, 0x73, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x20, 0x3e, 0x20, 0x54, 0x65, 0x78, 0x74, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x67, - 0x72, 0x65, 0x79, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x54, 0x61, 0x62, 0x56, - 0x69, 0x65, 0x77, 0x20, 0x3e, 0x20, 0x2e, 0x74, 0x61, 0x62, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x20, - 0x3e, 0x20, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x20, 0x3e, 0x20, 0x54, 0x65, - 0x78, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, + 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, + 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x66, + 0x69, 0x74, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x53, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x75, + 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, + 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, + 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, + 0x64, 0x65, 0x64, 0x65, 0x64, 0x65, 0x31, 0x30, 0x3b, 0x0d, 0x0a, 0x20, + 0x20, 0x62, 0x65, 0x76, 0x65, 0x6c, 0x3a, 0x20, 0x6f, 0x75, 0x74, 0x73, + 0x65, 0x74, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, + 0x6e, 0x67, 0x3a, 0x20, 0x34, 0x20, 0x34, 0x20, 0x34, 0x20, 0x34, 0x3b, + 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x20, 0x3e, 0x20, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x56, 0x69, 0x65, + 0x77, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, + 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, + 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x3b, 0x0d, 0x0a, + 0x20, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x3a, + 0x20, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x2d, 0x6c, 0x65, 0x66, 0x74, + 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x53, 0x6c, 0x69, 0x64, + 0x65, 0x72, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, + 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, + 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x3b, 0x0d, + 0x0a, 0x20, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x34, + 0x30, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x53, 0x6c, 0x69, + 0x64, 0x65, 0x72, 0x20, 0x3e, 0x20, 0x2e, 0x62, 0x61, 0x72, 0x20, 0x7b, + 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x3a, 0x20, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x2d, 0x6c, 0x65, + 0x66, 0x74, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, + 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, + 0x3a, 0x20, 0x66, 0x69, 0x6c, 0x6c, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, + 0x0d, 0x0a, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x20, 0x3e, 0x20, 0x2e, + 0x62, 0x61, 0x72, 0x20, 0x3e, 0x20, 0x2e, 0x68, 0x61, 0x6e, 0x64, 0x6c, + 0x65, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, - 0x2d, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, - 0x54, 0x65, 0x78, 0x74, 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, - 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, - 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, - 0x20, 0x23, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x36, 0x36, 0x3b, 0x0a, - 0x20, 0x20, 0x62, 0x65, 0x76, 0x65, 0x6c, 0x3a, 0x20, 0x69, 0x6e, 0x73, - 0x65, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, - 0x67, 0x3a, 0x20, 0x34, 0x20, 0x34, 0x20, 0x34, 0x20, 0x34, 0x3b, 0x0a, - 0x20, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x36, 0x30, - 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x54, 0x65, 0x78, 0x74, 0x56, 0x69, 0x65, - 0x77, 0x20, 0x3e, 0x20, 0x54, 0x65, 0x78, 0x74, 0x20, 0x7b, 0x0a, 0x20, + 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, + 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, + 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x66, 0x66, 0x3b, 0x0d, 0x0a, 0x20, + 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x3a, 0x20, 0x31, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x6f, 0x72, + 0x64, 0x65, 0x72, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, + 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x66, 0x66, 0x3b, 0x0d, 0x0a, 0x20, + 0x20, 0x6d, 0x69, 0x6e, 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, + 0x38, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x6d, 0x69, 0x6e, 0x2d, 0x68, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x31, 0x36, 0x3b, 0x0d, 0x0a, 0x7d, + 0x0d, 0x0a, 0x0d, 0x0a, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x20, 0x3e, + 0x20, 0x2e, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x20, - 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x2d, 0x6c, 0x65, 0x66, 0x74, 0x3b, - 0x0a, 0x7d, 0x0a, 0x0a, 0x54, 0x65, 0x78, 0x74, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x67, 0x68, 0x6f, 0x73, - 0x74, 0x77, 0x68, 0x69, 0x74, 0x65, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2e, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x20, 0x7b, 0x0a, + 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x2d, 0x72, 0x69, 0x67, 0x68, 0x74, + 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, + 0x3a, 0x20, 0x30, 0x20, 0x30, 0x20, 0x30, 0x20, 0x31, 0x38, 0x3b, 0x0d, + 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x53, 0x6c, 0x69, 0x64, 0x65, 0x53, + 0x68, 0x6f, 0x77, 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0d, 0x0a, 0x20, + 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, + 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x66, 0x69, 0x6c, 0x6c, + 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x63, 0x6c, 0x69, 0x70, 0x73, 0x2d, 0x73, + 0x75, 0x62, 0x76, 0x69, 0x65, 0x77, 0x73, 0x3a, 0x20, 0x74, 0x72, 0x75, + 0x65, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x53, 0x6c, 0x69, + 0x64, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x56, 0x69, 0x65, 0x77, 0x20, 0x3e, + 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, + 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, + 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x66, + 0x69, 0x6c, 0x6c, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x53, + 0x74, 0x61, 0x63, 0x6b, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, + 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x31, 0x32, 0x3b, + 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x43, 0x65, 0x6c, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2e, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x61, 0x6c, - 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x3b, 0x0a, 0x20, 0x20, 0x62, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, - 0x64, 0x65, 0x64, 0x65, 0x64, 0x65, 0x61, 0x61, 0x3b, 0x0a, 0x20, 0x20, - 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, - 0x3a, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, - 0x6e, 0x67, 0x3a, 0x20, 0x31, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2e, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x3e, 0x20, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, + 0x74, 0x61, 0x69, 0x6e, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x70, 0x61, 0x64, + 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x30, 0x20, 0x32, 0x20, 0x30, 0x20, + 0x32, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x6d, 0x69, 0x6e, 0x2d, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x3a, 0x20, 0x38, 0x30, 0x3b, 0x0d, 0x0a, 0x20, 0x20, + 0x6d, 0x69, 0x6e, 0x2d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, + 0x32, 0x34, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x43, 0x65, 0x6c, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x20, + 0x3e, 0x20, 0x54, 0x65, 0x78, 0x74, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, + 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x6d, + 0x69, 0x64, 0x64, 0x6c, 0x65, 0x2d, 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x0d, + 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0d, + 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, + 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x66, 0x66, + 0x66, 0x66, 0x66, 0x66, 0x32, 0x32, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, + 0x0d, 0x0a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x56, 0x69, + 0x65, 0x77, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, + 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, + 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x7c, + 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x61, + 0x78, 0x69, 0x73, 0x3a, 0x20, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, + 0x74, 0x61, 0x6c, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x64, 0x69, 0x73, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x66, 0x69, + 0x6c, 0x6c, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x56, 0x69, 0x65, 0x77, 0x3a, 0x6e, + 0x74, 0x68, 0x2d, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x28, 0x65, 0x76, 0x65, + 0x6e, 0x29, 0x20, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x65, 0x6c, 0x6c, + 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x61, + 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, + 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x31, + 0x31, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x2f, 0x2a, 0x20, + 0x53, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2c, 0x20, 0x6e, 0x6f, + 0x74, 0x20, 0x61, 0x20, 0x72, 0x65, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6c, + 0x6f, 0x72, 0x3a, 0x20, 0x60, 0x56, 0x69, 0x65, 0x77, 0x3a, 0x3a, 0x61, + 0x70, 0x70, 0x6c, 0x79, 0x54, 0x68, 0x65, 0x6d, 0x65, 0x60, 0x20, 0x6f, + 0x6e, 0x6c, 0x79, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x20, 0x60, 0x61, + 0x70, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x60, 0x20, 0x77, + 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70, + 0x75, 0x74, 0x65, 0x64, 0x20, 0x43, 0x53, 0x53, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x73, + 0x65, 0x74, 0x20, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x20, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x20, 0x28, 0x61, 0x6e, 0x20, + 0x65, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x2c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x70, 0x65, 0x72, 0x66, + 0x29, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, + 0x20, 0x53, 0x4f, 0x4d, 0x45, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x20, 0x68, 0x65, 0x72, 0x65, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, + 0x73, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x73, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x2f, 0x75, 0x6e, 0x73, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x74, 0x6f, 0x67, 0x67, 0x6c, + 0x69, 0x6e, 0x67, 0x20, 0x3a, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x20, 0x6e, 0x6f, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x43, 0x53, 0x53, 0x20, 0x63, 0x61, + 0x6e, 0x20, 0x73, 0x65, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x56, + 0x69, 0x65, 0x77, 0x27, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, + 0x65, 0x64, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x28, + 0x62, 0x61, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x2b, + 0x20, 0x32, 0x35, 0x20, 0x70, 0x65, 0x72, 0x20, 0x52, 0x47, 0x42, 0x20, + 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2c, 0x20, 0x73, 0x65, 0x65, + 0x20, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x56, 0x69, 0x65, + 0x77, 0x2e, 0x63, 0x29, 0x20, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x67, 0x65, 0x74, 0x73, 0x20, 0x61, 0x20, 0x63, 0x68, + 0x61, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x75, 0x6e, 0x2e, + 0x20, 0x60, 0x6e, 0x6f, 0x6e, 0x65, 0x60, 0x20, 0x69, 0x73, 0x20, 0x61, + 0x20, 0x72, 0x65, 0x61, 0x6c, 0x2c, 0x20, 0x65, 0x78, 0x70, 0x6c, 0x69, + 0x63, 0x69, 0x74, 0x20, 0x69, 0x6e, 0x6c, 0x65, 0x74, 0x20, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x60, 0x62, 0x69, + 0x6e, 0x64, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x60, 0x20, 0x64, 0x65, 0x6c, + 0x69, 0x62, 0x65, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x20, 0x75, 0x6e, 0x74, + 0x6f, 0x75, 0x63, 0x68, 0x65, 0x64, 0x20, 0x28, 0x73, 0x65, 0x65, 0x20, + 0x69, 0x74, 0x73, 0x20, 0x22, 0x6e, 0x6f, 0x6e, 0x65, 0x22, 0x20, 0x63, + 0x61, 0x73, 0x65, 0x29, 0x2c, 0x20, 0x73, 0x6f, 0x20, 0x74, 0x68, 0x69, + 0x73, 0x20, 0x69, 0x73, 0x20, 0x70, 0x75, 0x72, 0x65, 0x6c, 0x79, 0x20, + 0x61, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2d, 0x64, 0x65, 0x74, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x72, 0x69, 0x67, 0x67, + 0x65, 0x72, 0x3b, 0x20, 0x69, 0x74, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x74, 0x73, 0x65, + 0x6c, 0x66, 0x20, 0x70, 0x61, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x6e, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x20, 0x41, 0x20, 0x72, 0x65, 0x61, + 0x6c, 0x20, 0x60, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x56, + 0x69, 0x65, 0x77, 0x3a, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x20, 0x7b, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, + 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x58, 0x20, 0x7d, + 0x60, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x61, 0x70, 0x70, 0x27, 0x73, 0x20, 0x6f, + 0x77, 0x6e, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, + 0x74, 0x20, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x20, 0x66, 0x75, 0x6c, 0x6c, + 0x79, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, + 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x73, 0x61, + 0x6d, 0x65, 0x20, 0x61, 0x73, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, + 0x2e, 0x20, 0x2a, 0x2f, 0x0d, 0x0a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, + 0x6f, 0x77, 0x56, 0x69, 0x65, 0x77, 0x3a, 0x73, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, + 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x3a, 0x20, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, + 0x0a, 0x0d, 0x0a, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x56, 0x69, 0x65, 0x77, + 0x20, 0x3e, 0x20, 0x53, 0x63, 0x72, 0x6f, 0x6c, 0x6c, 0x56, 0x69, 0x65, + 0x77, 0x20, 0x3e, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x75, + 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, + 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x20, 0x7c, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3b, 0x0d, 0x0a, 0x7d, + 0x0d, 0x0a, 0x0d, 0x0a, 0x54, 0x61, 0x62, 0x56, 0x69, 0x65, 0x77, 0x20, + 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, + 0x3a, 0x20, 0x34, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x54, + 0x61, 0x62, 0x56, 0x69, 0x65, 0x77, 0x20, 0x3e, 0x20, 0x2e, 0x74, 0x61, + 0x62, 0x50, 0x61, 0x67, 0x65, 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0d, + 0x0a, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x63, 0x6f, + 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x73, 0x69, 0x6c, 0x76, 0x65, 0x72, 0x3b, + 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, + 0x0a, 0x0d, 0x0a, 0x54, 0x61, 0x62, 0x56, 0x69, 0x65, 0x77, 0x20, 0x3e, + 0x20, 0x2e, 0x74, 0x61, 0x62, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, + 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, + 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x20, 0x7c, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3b, 0x0d, + 0x0a, 0x20, 0x20, 0x61, 0x78, 0x69, 0x73, 0x3a, 0x20, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x3b, 0x0d, 0x0a, 0x20, 0x20, + 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x3a, 0x20, 0x66, 0x69, 0x6c, 0x6c, 0x2d, 0x65, 0x71, 0x75, 0x61, 0x6c, + 0x6c, 0x79, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x73, 0x70, 0x61, 0x63, 0x69, + 0x6e, 0x67, 0x3a, 0x20, 0x34, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, + 0x0a, 0x54, 0x61, 0x62, 0x56, 0x69, 0x65, 0x77, 0x20, 0x3e, 0x20, 0x2e, + 0x74, 0x61, 0x62, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x56, 0x69, 0x65, 0x77, 0x20, 0x3e, 0x20, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, + 0x67, 0x3a, 0x20, 0x32, 0x20, 0x32, 0x20, 0x32, 0x20, 0x32, 0x3b, 0x0d, + 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x54, 0x61, 0x62, 0x56, 0x69, 0x65, + 0x77, 0x20, 0x3e, 0x20, 0x2e, 0x74, 0x61, 0x62, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x20, 0x3e, 0x20, + 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x2e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, - 0x3a, 0x20, 0x63, 0x68, 0x61, 0x72, 0x63, 0x6f, 0x61, 0x6c, 0x3b, 0x0a, - 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x30, - 0x20, 0x34, 0x20, 0x30, 0x20, 0x34, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2e, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x3e, 0x20, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x68, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x7b, + 0x3a, 0x20, 0x64, 0x61, 0x72, 0x6b, 0x67, 0x72, 0x61, 0x79, 0x3b, 0x0d, + 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x54, 0x61, 0x62, 0x56, 0x69, 0x65, + 0x77, 0x20, 0x3e, 0x20, 0x2e, 0x74, 0x61, 0x62, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x20, 0x3e, 0x20, + 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x2e, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x20, 0x3e, 0x20, 0x54, 0x65, 0x78, 0x74, 0x20, 0x7b, 0x0d, + 0x0a, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x67, 0x72, + 0x65, 0x79, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x54, 0x61, + 0x62, 0x56, 0x69, 0x65, 0x77, 0x20, 0x3e, 0x20, 0x2e, 0x74, 0x61, 0x62, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, + 0x77, 0x20, 0x3e, 0x20, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x20, 0x3e, 0x20, + 0x54, 0x65, 0x78, 0x74, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x6c, + 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x6d, 0x69, 0x64, + 0x64, 0x6c, 0x65, 0x2d, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0x0d, + 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x54, 0x65, 0x78, 0x74, 0x56, 0x69, + 0x65, 0x77, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x75, 0x74, 0x6f, + 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x2d, 0x6d, 0x61, 0x73, + 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, - 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x64, 0x61, 0x72, - 0x6b, 0x67, 0x72, 0x61, 0x79, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2e, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x3e, 0x20, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x3a, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, - 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x64, - 0x69, 0x6d, 0x67, 0x72, 0x61, 0x79, 0x3b, 0x0a, 0x7d, 0x0a, 0x00 + 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x32, 0x32, + 0x32, 0x32, 0x32, 0x32, 0x36, 0x36, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x62, + 0x65, 0x76, 0x65, 0x6c, 0x3a, 0x20, 0x69, 0x6e, 0x73, 0x65, 0x74, 0x3b, + 0x0d, 0x0a, 0x20, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, + 0x20, 0x34, 0x20, 0x34, 0x20, 0x34, 0x20, 0x34, 0x3b, 0x0d, 0x0a, 0x20, + 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x36, 0x30, 0x3b, + 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x54, 0x65, 0x78, 0x74, 0x56, + 0x69, 0x65, 0x77, 0x20, 0x3e, 0x20, 0x54, 0x65, 0x78, 0x74, 0x20, 0x7b, + 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x3a, 0x20, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x2d, 0x6c, 0x65, + 0x66, 0x74, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x54, 0x65, + 0x78, 0x74, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x3a, 0x20, 0x67, 0x68, 0x6f, 0x73, 0x74, 0x77, 0x68, 0x69, 0x74, + 0x65, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x2e, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x20, 0x7b, 0x0d, 0x0a, 0x20, + 0x20, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x69, 0x6e, + 0x67, 0x2d, 0x6d, 0x61, 0x73, 0x6b, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x2e, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x7b, 0x0d, 0x0a, 0x20, + 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x20, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x3b, 0x0d, 0x0a, 0x20, + 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x3a, 0x20, 0x23, 0x64, 0x65, 0x64, 0x65, 0x64, 0x65, 0x61, 0x61, + 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, + 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x3b, 0x0d, 0x0a, 0x20, + 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x31, 0x3b, + 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x20, 0x3e, 0x20, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, + 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, + 0x63, 0x68, 0x61, 0x72, 0x63, 0x6f, 0x61, 0x6c, 0x3b, 0x0d, 0x0a, 0x20, + 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x30, 0x20, + 0x34, 0x20, 0x30, 0x20, 0x34, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, + 0x0a, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x3e, 0x20, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x68, 0x6f, 0x76, 0x65, 0x72, + 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, + 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, + 0x64, 0x61, 0x72, 0x6b, 0x67, 0x72, 0x61, 0x79, 0x3b, 0x0d, 0x0a, 0x7d, + 0x0d, 0x0a, 0x0d, 0x0a, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x20, 0x3e, 0x20, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x73, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, + 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, + 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x64, 0x69, 0x6d, 0x67, 0x72, 0x61, + 0x79, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x00 }; -unsigned int stylesheet_css_len = 5170; +unsigned int stylesheet_css_len = 6284; diff --git a/Sources/ObjectivelyMVC/TableCellView.c b/Sources/ObjectivelyMVC/TableCellView.c index 0d7bed6c..0ed4b46d 100644 --- a/Sources/ObjectivelyMVC/TableCellView.c +++ b/Sources/ObjectivelyMVC/TableCellView.c @@ -55,6 +55,11 @@ static TableCellView *initWithFrame(TableCellView *self, const SDL_Rect *frame) assert(self->text); $((View *) self, addSubview, (View *) self->text); + + // Without this, the cell's own size() reflects only its raw/prior frame, not its actual + // content -- so the row's height (computed from its tallest cell) never accounts for cells + // whose content is taller than a single line of text (e.g. a nested Box). + ((View *) self)->autoresizingMask = ViewAutoresizingContain; } return self; diff --git a/Sources/ObjectivelyMVC/TableRowView.c b/Sources/ObjectivelyMVC/TableRowView.c index a31633f1..71d1efff 100644 --- a/Sources/ObjectivelyMVC/TableRowView.c +++ b/Sources/ObjectivelyMVC/TableRowView.c @@ -22,6 +22,7 @@ */ #include +#include #include "TableRowView.h" #include "TableView.h" @@ -60,6 +61,111 @@ static bool matchesSelector(const View *self, const SimpleSelector *simpleSelect return super(View, self, matchesSelector, simpleSelector); } +/** + * @see View::applyStyle(View *, const Style *) + * @remarks When selected, nudges this row's own (unselected) background-color +25 per RGB + * channel, rather than hard-coding an unrelated selection color. A stylesheet rule targeting + * `TableRowView:selected` still takes precedence: if such a rule changed backgroundColor during + * this same pass (via `super`), that value is left alone. + * @remarks `applyStyle` may run more than once while selected (e.g. re-triggered by unrelated + * hover-state invalidation elsewhere in the tree); reading the *incoming* backgroundColor as + * "the base" would treat an already-nudged value as the new base and compound on every call, + * drifting toward white. `unselectedBackgroundColor` is only ever captured while NOT selected, so + * it stays a stable reference no matter how many times this runs while selected. + */ +static void applyStyle(View *self, const Style *style) { + + TableRowView *this = (TableRowView *) self; + + if (this->isSelected == false) { + super(View, self, applyStyle, style); + this->unselectedBackgroundColor = self->backgroundColor; + return; + } + + self->backgroundColor = this->unselectedBackgroundColor; + + super(View, self, applyStyle, style); + + if (memcmp(&self->backgroundColor, &this->unselectedBackgroundColor, sizeof(SDL_Color)) == 0) { + const int selectedColorNudge = 25; + const SDL_Color baseColor = this->unselectedBackgroundColor; + // Nudge alpha too, uniformly with RGB: this framework represents "transparent" as + // white with alpha=0, not black-transparent, so a TableRowView with no explicit + // background (the common case) has base (255,255,255,0). Forcing alpha to 255 in + // that case turned an invisible row into a solid white block; nudging alpha by + // the same amount instead yields a faint, barely-visible highlight (alpha 25), + // consistent with the subtle-overlay tints used elsewhere (e.g. #ffffff22). + self->backgroundColor = MakeColor( + (Uint8) min(255, baseColor.r + selectedColorNudge), + (Uint8) min(255, baseColor.g + selectedColorNudge), + (Uint8) min(255, baseColor.b + selectedColorNudge), + (Uint8) min(255, baseColor.a + selectedColorNudge) + ); + } +} + +/** + * @see View::layoutSubviews(View *) + * @remarks After the normal StackView layout, the LAST cell is stretched to fill + * whatever width remains after the preceding cells -- a "fixed label(s) + flexible + * value" table shape (every current consumer is exactly this: a key/label column + * plus a value column meant to reach the table's own width). This is not + * expressible via StackView distribution alone: `Fill` scales every child + * uniformly, so a caller-side fixed-width clamp on the other cells just fights and + * undoes it. Grows the cell's real content widget (the one subview that isn't the + * cell's own hidden default Text) rather than the cell itself, since the cell's + * `autoresizing-mask:contain` hugs that content -- growing the content lets + * Contain naturally report the wider size back up, instead of fighting it. + */ +static void layoutSubviews(View *self) { + + super(View, self, layoutSubviews); + + TableRowView *this = (TableRowView *) self; + + const Array *cells = (Array *) this->cells; + if (cells->count < 2) { + return; + } + + const SDL_Rect bounds = $(self, bounds); + + int used = 0; + for (size_t i = 0; i < cells->count - 1; i++) { + const View *cell = $(cells, objectAtIndex, i); + used += cell->frame.w + this->stackView.spacing; + } + + TableCellView *last = $(cells, objectAtIndex, cells->count - 1); + const View *lastView = (View *) last; + + // The cell's own padding is added back on top of its (Contain-computed) child + // size, so the child must be sized to `width` MINUS that padding -- otherwise + // the cell reports back width+padding next pass, which grows `bounds.w` on the + // pass after that, compounding a few pixels wider on every re-layout (visible + // as "clicking anything grows the row"). + const int width = max(0, bounds.w - used - lastView->padding.left - lastView->padding.right); + + const Array *subviews = lastView->subviews; + for (size_t i = 0; i < subviews->count; i++) { + + View *child = $(subviews, objectAtIndex, i); + if (child != (View *) last->text) { + if (child->frame.w != width) { + const SDL_Size size = MakeSize(width, child->frame.h); + $(child, resize, &size); + } + break; + } + } + + ((View *) last)->needsLayout = true; + $((View *) last, layoutIfNeeded); + + ((View *) last)->frame.x = used; +} + #pragma mark - TableRowView /** @@ -147,6 +253,8 @@ static void initialize(Class *clazz) { ((ObjectInterface *) clazz->interface)->dealloc = dealloc; ((ViewInterface *) clazz->interface)->matchesSelector = matchesSelector; + ((ViewInterface *) clazz->interface)->layoutSubviews = layoutSubviews; + ((ViewInterface *) clazz->interface)->applyStyle = applyStyle; ((TableRowViewInterface *) clazz->interface)->addCell = addCell; ((TableRowViewInterface *) clazz->interface)->initWithTableView = initWithTableView; diff --git a/Sources/ObjectivelyMVC/TableRowView.h b/Sources/ObjectivelyMVC/TableRowView.h index 77b19739..799d104d 100644 --- a/Sources/ObjectivelyMVC/TableRowView.h +++ b/Sources/ObjectivelyMVC/TableRowView.h @@ -68,6 +68,14 @@ struct TableRowView { * @brief The table. */ TableView *tableView; + + /** + * @brief This row's own background-color while unselected, captured in `applyStyle`. + * @remarks Used as a stable reference for computing the default selected background-color + * (base + 25 per RGB channel); only ever updated while NOT selected, so it stays correct no + * matter how many times `applyStyle` re-runs while selected. + */ + SDL_Color unselectedBackgroundColor; }; /** diff --git a/Sources/ObjectivelyMVC/TableView.c b/Sources/ObjectivelyMVC/TableView.c index ca89b440..75e9bd6c 100644 --- a/Sources/ObjectivelyMVC/TableView.c +++ b/Sources/ObjectivelyMVC/TableView.c @@ -22,8 +22,10 @@ */ #include +#include #include +#include #include #include "TableView.h" @@ -54,10 +56,17 @@ static void dealloc(Object *self) { /** * @brief ArrayEnumerator for awaking TableColumns. + * @remarks Accepts either a bare identifier String (`"key"`) or a full `{"identifier": "key"}` + * Dictionary, for whenever a column ever needs more than just its identifier. */ static void awakeWithDictionary_columns(const Array *array, ident obj, ident data) { - const String *identifier = $((Dictionary *) obj, objectForKeyPath, "identifier"); + const String *identifier; + if ($((Object *) obj, isKindOfClass, _String())) { + identifier = (String *) obj; + } else { + identifier = $((Dictionary *) obj, objectForKeyPath, "identifier"); + } assert(identifier); TableColumn *column = $(alloc(TableColumn), initWithIdentifier, identifier->chars); @@ -68,6 +77,118 @@ static void awakeWithDictionary_columns(const Array *array, ident obj, ident dat release(column); } +/** + * @return The index of `column` within `self->columns`, or `0` if not found. + */ +static size_t indexOfColumn(const TableView *self, const TableColumn *column) { + + const Array *columns = (Array *) self->columns; + for (size_t i = 0; i < columns->count; i++) { + if ($(columns, objectAtIndex, i) == column) { + return i; + } + } + + return 0; +} + +/** + * @brief Parses a JSON `"cells"` array directly into TableRowViews/TableCellViews, appended to + * this table's `rows`/`contentView` -- bypassing `dataSource`/`delegate`/`reloadData()` entirely. + * Each entry specifies `"column"` (an identifier declared in `"columns"`) and `"row"` (a 0-based + * integer index), plus a View definition -- anything a normal subview entry would accept, + * including nested composites like `Box` or another `TableView` -- for the cell's content. Cells + * not covered by any entry render as blank (default-constructed) TableCellViews. This exists so + * tables with a fixed, known-in-advance row set can be authored entirely in JSON, without a C + * `dataSource`/`delegate` -- that path remains for genuinely data-driven tables (row count/content + * not known until runtime). + */ +static void awakeWithDictionary_cells(TableView *self, const Array *cells) { + + const Array *columns = (Array *) self->columns; + const size_t numColumns = columns->count; + if (numColumns == 0 || cells->count == 0) { + return; + } + + size_t numRows = 0; + for (size_t i = 0; i < cells->count; i++) { + const Dictionary *dictionary = $(cells, objectAtIndex, i); + + const Number *rowNumber = $(dictionary, objectForKeyPath, "row"); + assert(rowNumber); + + numRows = max(numRows, (size_t) rowNumber->value + 1); + } + + View **grid = calloc(numRows * numColumns, sizeof(View *)); + assert(grid); + + for (size_t i = 0; i < cells->count; i++) { + const Dictionary *dictionary = $(cells, objectAtIndex, i); + + const String *columnIdentifier = $(dictionary, objectForKeyPath, "column"); + assert(columnIdentifier); + + const Number *rowNumber = $(dictionary, objectForKeyPath, "row"); + assert(rowNumber); + + const TableColumn *column = $(self, columnWithIdentifier, columnIdentifier->chars); + assert(column); + + const size_t columnIndex = indexOfColumn(self, column); + const size_t row = (size_t) rowNumber->value; + + View *view = NULL; + const Inlet inlet = MakeInlet(NULL, InletTypeView, &view, NULL); + BindInlet(&inlet, dictionary); + assert(view); + + grid[row * numColumns + columnIndex] = view; + } + + for (size_t row = 0; row < numRows; row++) { + + TableRowView *rowView = $(alloc(TableRowView), initWithTableView, self); + assert(rowView); + + for (size_t col = 0; col < numColumns; col++) { + + const TableColumn *column = $(columns, objectAtIndex, col); + + TableCellView *cell = $(alloc(TableCellView), initWithFrame, NULL); + assert(cell); + + cell->view.identifier = strdup(column->identifier); + + // Every row's cell for a given column shares this class, so a column can be + // styled once (e.g. `.value { width: 280px }`) instead of per-row. + $((View *) cell, addClassName, column->identifier); + + View *view = grid[row * numColumns + col]; + if (view) { + ((View *) cell->text)->hidden = true; + $((View *) cell, addSubview, view); + } + + $(rowView, addCell, cell); + release(cell); + } + + $(self->rows, addObject, rowView); + release(rowView); + + $((View *) self->contentView, addSubview, (View *) rowView); + } + + free(grid); + + // None of these are sortable spreadsheet-style tables. + ((View *) self->headerView)->hidden = true; + + self->control.view.needsLayout = true; +} + /** * @see View::awakeWithDictionary(View *, const Dictionary *) */ @@ -75,10 +196,17 @@ static void awakeWithDictionary(View *self, const Dictionary *dictionary) { super(View, self, awakeWithDictionary, dictionary); + TableView *this = (TableView *) self; + const Array *columns = $(dictionary, objectForKeyPath, "columns"); if (columns) { $(columns, enumerate, awakeWithDictionary_columns, self); } + + const Array *cells = $(dictionary, objectForKeyPath, "cells"); + if (cells) { + awakeWithDictionary_cells(this, cells); + } } /** @@ -352,6 +480,11 @@ static TableView *initWithFrame(TableView *self, const SDL_Rect *frame) { $((View *) self->contentView, addClassName, "contentView"); + // Box's own body is ALSO classed "contentView" -- this second class lets a stylesheet + // target just the row stack (e.g. row spacing) without also matching an ancestor Box's + // contentView. + $((View *) self->contentView, addClassName, "tableRows"); + self->scrollView = $(alloc(ScrollView), initWithFrame, NULL); assert(self->scrollView); @@ -424,6 +557,10 @@ static void reloadData(TableView *self) { cell->view.identifier = strdup(column->identifier); + // Every row's cell for a given column shares this class, so a column can be + // styled once (e.g. `.value { width: 280px }`) instead of per-row. + $((View *) cell, addClassName, column->identifier); + $(row, addCell, cell); release(cell); }